diff --git a/registry/vulkan/appendices/VK_AMD_buffer_marker.txt b/registry/vulkan/appendices/VK_AMD_buffer_marker.txt
deleted file mode 100644
index bc7c272..0000000
--- a/registry/vulkan/appendices/VK_AMD_buffer_marker.txt
+++ /dev/null
@@ -1,36 +0,0 @@
-// Copyright (c) 2018-2020 Advanced Micro Devices, Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-include::{generated}/meta/{refprefix}VK_AMD_buffer_marker.txt[]
-
-=== Other Extension Metadata
-
-*Last Modified Date*::
-    2018-01-26
-*IP Status*::
-    No known IP claims.
-*Contributors*::
-  - Matthaeus G. Chajdas, AMD
-  - Jaakko Konttinen, AMD
-  - Daniel Rakos, AMD
-
-=== Description
-
-This extension adds a new operation to execute pipelined writes of small
-marker values into a sname:VkBuffer object.
-
-The primary purpose of these markers is to facilitate the development of
-debugging tools for tracking which pipelined command contributed to device
-loss.
-
-include::{generated}/interfaces/VK_AMD_buffer_marker.txt[]
-
-=== Examples
-
-None.
-
-=== Version History
-
-  * Revision 1, 2018-01-26 (Jaakko Konttinen)
-    - Initial revision
diff --git a/registry/vulkan/appendices/VK_AMD_device_coherent_memory.txt b/registry/vulkan/appendices/VK_AMD_device_coherent_memory.txt
deleted file mode 100644
index d7a9588..0000000
--- a/registry/vulkan/appendices/VK_AMD_device_coherent_memory.txt
+++ /dev/null
@@ -1,33 +0,0 @@
-// Copyright (c) 2019-2020 Advanced Micro Devices, Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-include::{generated}/meta/{refprefix}VK_AMD_device_coherent_memory.txt[]
-
-=== Other Extension Metadata
-
-*Last Modified Date*::
-    2019-02-04
-*Contributors*::
-  - Ping Fu, AMD
-  - Timothy Lottes, AMD
-  - Tobias Hector, AMD
-
-=== Description
-
-This extension adds the device coherent and device uncached memory types.
-Any device accesses to device coherent memory are automatically made visible
-to any other device access.
-Device uncached memory indicates to applications that caches are disabled
-for a particular memory type, which guarantees device coherence.
-
-Device coherent and uncached memory are expected to have lower performance
-for general access than non-device coherent memory, but can be useful in
-certain scenarios; particularly so for debugging.
-
-include::{generated}/interfaces/VK_AMD_device_coherent_memory.txt[]
-
-=== Version History
-
-  * Revision 1, 2019-02-04 (Tobias Hector)
-    - Initial revision
diff --git a/registry/vulkan/appendices/VK_AMD_display_native_hdr.txt b/registry/vulkan/appendices/VK_AMD_display_native_hdr.txt
deleted file mode 100644
index 50912fe..0000000
--- a/registry/vulkan/appendices/VK_AMD_display_native_hdr.txt
+++ /dev/null
@@ -1,45 +0,0 @@
-// Copyright (c) 2019-2020 Advanced Micro Devices, Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-include::{generated}/meta/{refprefix}VK_AMD_display_native_hdr.txt[]
-
-=== Other Extension Metadata
-
-*Last Modified Date*::
-    2018-12-18
-*IP Status*::
-    No known IP claims.
-*Contributors*::
-  - Matthaeus G. Chajdas, AMD
-  - Aaron Hagan, AMD
-  - Aric Cyr, AMD
-  - Timothy Lottes, AMD
-  - Derrick Owens, AMD
-  - Daniel Rakos, AMD
-
-=== Description
-
-This extension introduces the following display native HDR features to
-Vulkan:
-
-  * A new elink:VkColorSpaceKHR enum for setting the native display
-    colorspace.
-    For example, this color space would be set by the swapchain to use the
-    native color space in Freesync2 displays.
-  * Local dimming control
-
-include::{generated}/interfaces/VK_AMD_display_native_hdr.txt[]
-
-=== Issues
-
-None.
-
-=== Examples
-
-None.
-
-=== Version History
-
-  * Revision 1, 2018-12-18 (Daniel Rakos)
-    - Initial revision
diff --git a/registry/vulkan/appendices/VK_AMD_draw_indirect_count.txt b/registry/vulkan/appendices/VK_AMD_draw_indirect_count.txt
deleted file mode 100644
index 20761d1..0000000
--- a/registry/vulkan/appendices/VK_AMD_draw_indirect_count.txt
+++ /dev/null
@@ -1,43 +0,0 @@
-// Copyright (c) 2016-2020 Advanced Micro Devices, Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-include::{generated}/meta/{refprefix}VK_AMD_draw_indirect_count.txt[]
-
-=== Other Extension Metadata
-
-*Last Modified Date*::
-    2016-08-23
-*Interactions and External Dependencies*::
-  - Promoted to `apiext:VK_KHR_draw_indirect_count`
-*IP Status*::
-    No known IP claims.
-*Contributors*::
-  - Matthaeus G. Chajdas, AMD
-  - Derrick Owens, AMD
-  - Graham Sellers, AMD
-  - Daniel Rakos, AMD
-  - Dominik Witczak, AMD
-
-=== Description
-
-This extension allows an application to source the number of draws for
-indirect drawing commands from a buffer.
-This enables applications to generate an arbitrary number of drawing
-commands and execute them without host intervention.
-
-=== Promotion to `VK_KHR_draw_indirect_count`
-
-All functionality in this extension is included in
-`apiext:VK_KHR_draw_indirect_count`, with the suffix changed to KHR.
-The original type, enum and command names are still available as aliases of
-the core functionality.
-
-include::{generated}/interfaces/VK_AMD_draw_indirect_count.txt[]
-
-=== Version History
-
- * Revision 2, 2016-08-23 (Dominik Witczak)
-   - Minor fixes
- * Revision 1, 2016-07-21 (Matthaeus Chajdas)
-   - Initial draft
diff --git a/registry/vulkan/appendices/VK_AMD_gcn_shader.txt b/registry/vulkan/appendices/VK_AMD_gcn_shader.txt
deleted file mode 100644
index 0fde98b..0000000
--- a/registry/vulkan/appendices/VK_AMD_gcn_shader.txt
+++ /dev/null
@@ -1,33 +0,0 @@
-// Copyright (c) 2016-2020 Advanced Micro Devices, Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-include::{generated}/meta/{refprefix}VK_AMD_gcn_shader.txt[]
-
-=== Other Extension Metadata
-
-*Last Modified Date*::
-    2016-05-30
-*IP Status*::
-    No known IP claims.
-*Interactions and External Dependencies*::
-  - This extension requires
-    {spirv}/AMD/SPV_AMD_gcn_shader.html[`SPV_AMD_gcn_shader`]
-*Contributors*::
-  - Dominik Witczak, AMD
-  - Daniel Rakos, AMD
-  - Rex Xu, AMD
-  - Graham Sellers, AMD
-
-=== Description
-
-This extension adds support for the following SPIR-V extension in Vulkan:
-
-  * {spirv}/AMD/SPV_AMD_gcn_shader.html[`SPV_AMD_gcn_shader`]
-
-include::{generated}/interfaces/VK_AMD_gcn_shader.txt[]
-
-=== Version History
-
- * Revision 1, 2016-05-30 (Dominik Witczak)
-   - Initial draft
diff --git a/registry/vulkan/appendices/VK_AMD_gpu_shader_half_float.txt b/registry/vulkan/appendices/VK_AMD_gpu_shader_half_float.txt
deleted file mode 100644
index ee8bab7..0000000
--- a/registry/vulkan/appendices/VK_AMD_gpu_shader_half_float.txt
+++ /dev/null
@@ -1,42 +0,0 @@
-// Copyright (c) 2016-2019 Advanced Micro Devices, Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-include::{generated}/meta/{refprefix}VK_AMD_gpu_shader_half_float.txt[]
-
-=== Other Extension Metadata
-
-*Last Modified Date*::
-    2019-04-11
-*IP Status*::
-    No known IP claims.
-*Interactions and External Dependencies*::
-  - This extension requires
-    {spirv}/AMD/SPV_AMD_gpu_shader_half_float.html[`SPV_AMD_gpu_shader_half_float`]
-*Contributors*::
-  - Daniel Rakos, AMD
-  - Dominik Witczak, AMD
-  - Donglin Wei, AMD
-  - Graham Sellers, AMD
-  - Qun Lin, AMD
-  - Rex Xu, AMD
-
-=== Description
-
-This extension adds support for using half float variables in shaders.
-
-=== Deprecation by `VK_KHR_shader_float16_int8`
-
-Functionality in this extension was included in
-`apiext:VK_KHR_shader_float16_int8` extension, when
-slink:VkPhysicalDeviceShaderFloat16Int8FeaturesKHR::pname:shaderFloat16 is
-enabled.
-
-include::{generated}/interfaces/VK_AMD_gpu_shader_half_float.txt[]
-
-=== Version History
-
- * Revision 2, 2019-04-11 (Tobias Hector)
-   - Marked as deprecated
- * Revision 1, 2016-09-21 (Dominik Witczak)
-   - Initial draft
diff --git a/registry/vulkan/appendices/VK_AMD_gpu_shader_int16.txt b/registry/vulkan/appendices/VK_AMD_gpu_shader_int16.txt
deleted file mode 100644
index 19230c3..0000000
--- a/registry/vulkan/appendices/VK_AMD_gpu_shader_int16.txt
+++ /dev/null
@@ -1,45 +0,0 @@
-// Copyright (c) 2017-2020 Advanced Micro Devices, Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-include::{generated}/meta/{refprefix}VK_AMD_gpu_shader_int16.txt[]
-
-=== Other Extension Metadata
-
-*Last Modified Date*::
-    2019-04-11
-*IP Status*::
-    No known IP claims.
-*Interactions and External Dependencies*::
-  - This extension requires
-    {spirv}/AMD/SPV_AMD_gpu_shader_int16.html[`SPV_AMD_gpu_shader_int16`]
-*Contributors*::
-  - Daniel Rakos, AMD
-  - Dominik Witczak, AMD
-  - Matthaeus G. Chajdas, AMD
-  - Rex Xu, AMD
-  - Timothy Lottes, AMD
-  - Zhi Cai, AMD
-*External Dependencies*::
-  - {spirv}/AMD/SPV_AMD_gpu_shader_int16.html[`SPV_AMD_gpu_shader_int16`]
-
-=== Description
-
-This extension adds support for using 16-bit integer variables in shaders.
-
-=== Deprecation by `VK_KHR_shader_float16_int8`
-
-Functionality in this extension was included in
-`apiext:VK_KHR_shader_float16_int8` extension, when
-slink:VkPhysicalDeviceFeatures::pname:shaderInt16 and
-slink:VkPhysicalDeviceShaderFloat16Int8FeaturesKHR::pname:shaderFloat16 are
-enabled.
-
-include::{generated}/interfaces/VK_AMD_gpu_shader_int16.txt[]
-
-=== Version History
-
- * Revision 2, 2019-04-11 (Tobias Hector)
-   - Marked as deprecated
- * Revision 1, 2017-06-18 (Dominik Witczak)
-   - First version
diff --git a/registry/vulkan/appendices/VK_AMD_memory_overallocation_behavior.txt b/registry/vulkan/appendices/VK_AMD_memory_overallocation_behavior.txt
deleted file mode 100644
index 412b221..0000000
--- a/registry/vulkan/appendices/VK_AMD_memory_overallocation_behavior.txt
+++ /dev/null
@@ -1,32 +0,0 @@
-// Copyright (c) 2018-2020 Advanced Micro Devices, Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-include::{generated}/meta/{refprefix}VK_AMD_memory_overallocation_behavior.txt[]
-
-=== Other Extension Metadata
-
-*Last Modified Date*::
-    2018-09-19
-*IP Status*::
-    No known IP claims.
-*Contributors*::
-  - Martin Dinkov, AMD
-  - Matthaeus Chajdas, AMD
-  - Daniel Rakos, AMD
-  - Jon Campbell, AMD
-
-=== Description
-
-This extension allows controlling whether explicit overallocation beyond the
-device memory heap sizes (reported by
-slink:VkPhysicalDeviceMemoryProperties) is allowed or not.
-Overallocation may lead to performance loss and is not supported for all
-platforms.
-
-include::{generated}/interfaces/VK_AMD_memory_overallocation_behavior.txt[]
-
-=== Version History
-
-  * Revision 1, 2018-09-19 (Martin Dinkov)
-    - Initial draft.
diff --git a/registry/vulkan/appendices/VK_AMD_mixed_attachment_samples.txt b/registry/vulkan/appendices/VK_AMD_mixed_attachment_samples.txt
deleted file mode 100644
index fe2ab3c..0000000
--- a/registry/vulkan/appendices/VK_AMD_mixed_attachment_samples.txt
+++ /dev/null
@@ -1,36 +0,0 @@
-// Copyright (c) 2017-2020 Advanced Micro Devices, Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-include::{generated}/meta/{refprefix}VK_AMD_mixed_attachment_samples.txt[]
-
-=== Other Extension Metadata
-
-*Last Modified Date*::
-    2017-07-24
-*Contributors*::
-  - Mais Alnasser, AMD
-  - Matthaeus G. Chajdas, AMD
-  - Maciej Jesionowski, AMD
-  - Daniel Rakos, AMD
-
-=== Description
-
-This extension enables applications to use multisampled rendering with a
-depth/stencil sample count that is larger than the color sample count.
-Having a depth/stencil sample count larger than the color sample count
-allows maintaining geometry and coverage information at a higher sample rate
-than color information.
-All samples are depth/stencil tested, but only the first color sample count
-number of samples get a corresponding color output.
-
-include::{generated}/interfaces/VK_AMD_mixed_attachment_samples.txt[]
-
-=== Issues
-
-None.
-
-=== Version History
-
- * Revision 1, 2017-07-24 (Daniel Rakos)
-   - Internal revisions
diff --git a/registry/vulkan/appendices/VK_AMD_negative_viewport_height.txt b/registry/vulkan/appendices/VK_AMD_negative_viewport_height.txt
deleted file mode 100755
index 419c4f9..0000000
--- a/registry/vulkan/appendices/VK_AMD_negative_viewport_height.txt
+++ /dev/null
@@ -1,42 +0,0 @@
-// Copyright (c) 2016-2020 Advanced Micro Devices, Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-include::{generated}/meta/{refprefix}VK_AMD_negative_viewport_height.txt[]
-
-=== Other Extension Metadata
-
-*Last Modified Date*::
-    2016-09-02
-*IP Status*::
-    No known IP claims.
-*Contributors*::
-  - Matthaeus G. Chajdas, AMD
-  - Graham Sellers, AMD
-  - Baldur Karlsson
-
-=== Description
-
-This extension allows an application to specify a negative viewport height.
-The result is that the viewport transformation will flip along the y-axis.
-
-  * Allow negative height to be specified in the
-    slink:VkViewport::pname:height field to perform y-inversion of the
-    clip-space to framebuffer-space transform.
-    This allows apps to avoid having to use `gl_Position.y = -gl_Position.y`
-    in shaders also targeting other APIs.
-
-=== Obsoletion by `VK_KHR_maintenance1` and Vulkan 1.1
-
-Functionality in this extension is included in `VK_KHR_maintenance1` and
-subsequently Vulkan 1.1.
-Due to some slight behavioral differences, this extension must: not be
-enabled alongside `VK_KHR_maintenance1`, or in an instance created with
-version 1.1 or later requested in slink:VkApplicationInfo::pname:apiVersion.
-
-include::{generated}/interfaces/VK_AMD_negative_viewport_height.txt[]
-
-=== Version History
-
- * Revision 1, 2016-09-02 (Matthaeus Chajdas)
-   - Initial draft
diff --git a/registry/vulkan/appendices/VK_AMD_pipeline_compiler_control.txt b/registry/vulkan/appendices/VK_AMD_pipeline_compiler_control.txt
deleted file mode 100644
index 8e242db..0000000
--- a/registry/vulkan/appendices/VK_AMD_pipeline_compiler_control.txt
+++ /dev/null
@@ -1,38 +0,0 @@
-// Copyright (c) 2019-2020 Advanced Micro Devices, Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-include::{generated}/meta/{refprefix}VK_AMD_pipeline_compiler_control.txt[]
-
-=== Other Extension Metadata
-
-*Last Modified Date*::
-    2019-07-26
-*IP Status*::
-    No known IP claims.
-*Contributors*::
-  - Matthaeus G. Chajdas, AMD
-  - Daniel Rakos, AMD
-  - Maciej Jesionowski, AMD
-  - Tobias Hector, AMD
-
-=== Description
-
-This extension introduces slink:VkPipelineCompilerControlCreateInfoAMD
-structure that can be chained to a pipeline's creation information to
-specify additional flags that affect pipeline compilation.
-
-include::{generated}/interfaces/VK_AMD_pipeline_compiler_control.txt[]
-
-=== Issues
-
-None.
-
-=== Examples
-
-None.
-
-=== Version History
-
-  * Revision 1, 2019-07-26 (Tobias Hector)
-    - Initial revision.
diff --git a/registry/vulkan/appendices/VK_AMD_rasterization_order.txt b/registry/vulkan/appendices/VK_AMD_rasterization_order.txt
deleted file mode 100644
index 847c7a7..0000000
--- a/registry/vulkan/appendices/VK_AMD_rasterization_order.txt
+++ /dev/null
@@ -1,98 +0,0 @@
-// Copyright (c) 2016-2020 Advanced Micro Devices, Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-include::{generated}/meta/{refprefix}VK_AMD_rasterization_order.txt[]
-
-=== Other Extension Metadata
-
-*Last Modified Date*::
-    2016-04-25
-*IP Status*::
-    No known IP claims.
-*Contributors*::
-  - Matthaeus G. Chajdas, AMD
-  - Jaakko Konttinen, AMD
-  - Daniel Rakos, AMD
-  - Graham Sellers, AMD
-  - Dominik Witczak, AMD
-
-=== Description
-
-This extension introduces the possibility for the application to control the
-order of primitive rasterization.
-In unextended Vulkan, the following stages are guaranteed to execute in _API
-order_:
-
-  * depth bounds test
-  * stencil test, stencil op, and stencil write
-  * depth test and depth write
-  * occlusion queries
-  * blending, logic op, and color write
-
-This extension enables applications to opt into a relaxed, implementation
-defined primitive rasterization order that may allow better parallel
-processing of primitives and thus enabling higher primitive throughput.
-It is applicable in cases where the primitive rasterization order is known
-to not affect the output of the rendering or any differences caused by a
-different rasterization order are not a concern from the point of view of
-the application's purpose.
-
-A few examples of cases when using the relaxed primitive rasterization order
-would not have an effect on the final rendering:
-
-  * If the primitives rendered are known to not overlap in framebuffer
-    space.
-  * If depth testing is used with a comparison operator of
-    ename:VK_COMPARE_OP_LESS, ename:VK_COMPARE_OP_LESS_OR_EQUAL,
-    ename:VK_COMPARE_OP_GREATER, or ename:VK_COMPARE_OP_GREATER_OR_EQUAL,
-    and the primitives rendered are known to not overlap in clip space.
-  * If depth testing is not used and blending is enabled for all attachments
-    with a commutative blend operator.
-
-include::{generated}/interfaces/VK_AMD_rasterization_order.txt[]
-
-=== Issues
-
-1) How is this extension useful to application developers?
-
-*RESOLVED*: Allows them to increase primitive throughput for cases when
-strict API order rasterization is not important due to the nature of the
-content, the configuration used, or the requirements towards the output of
-the rendering.
-
-2) How does this extension interact with content optimizations aiming to
-reduce overdraw by appropriately ordering the input primitives?
-
-*RESOLVED*: While the relaxed rasterization order might somewhat limit the
-effectiveness of such content optimizations, most of the benefits of it are
-expected to be retained even when the relaxed rasterization order is used,
-so applications should: still apply these optimizations even if they intend
-to use the extension.
-
-3) Are there any guarantees about the primitive rasterization order when
-using the new relaxed mode?
-
-*RESOLVED*: No.
-In this case the rasterization order is completely implementation-dependent,
-but in practice it is expected to partially still follow the order of
-incoming primitives.
-
-4) Does the new relaxed rasterization order have any adverse effect on
-repeatability and other invariance rules of the API?
-
-*RESOLVED*: Yes, in the sense that it extends the list of exceptions when
-the repeatability requirement does not apply.
-
-=== Examples
-
-None
-
-=== Issues
-
-None
-
-=== Version History
-
-  * Revision 1, 2016-04-25 (Daniel Rakos)
-    - Initial draft.
diff --git a/registry/vulkan/appendices/VK_AMD_shader_ballot.txt b/registry/vulkan/appendices/VK_AMD_shader_ballot.txt
deleted file mode 100644
index 008c1fb..0000000
--- a/registry/vulkan/appendices/VK_AMD_shader_ballot.txt
+++ /dev/null
@@ -1,35 +0,0 @@
-// Copyright (c) 2016-2020 Advanced Micro Devices, Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-include::{generated}/meta/{refprefix}VK_AMD_shader_ballot.txt[]
-
-=== Other Extension Metadata
-
-*Last Modified Date*::
-    2016-09-19
-*IP Status*::
-    No known IP claims.
-*Interactions and External Dependencies*::
-  - This extension requires
-    {spirv}/AMD/SPV_AMD_shader_ballot.html[`SPV_AMD_shader_ballot`]
-*Contributors*::
-  - Qun Lin, AMD
-  - Graham Sellers, AMD
-  - Daniel Rakos, AMD
-  - Rex Xu, AMD
-  - Dominik Witczak, AMD
-  - Matthäus G. Chajdas, AMD
-
-=== Description
-
-This extension adds support for the following SPIR-V extension in Vulkan:
-
-  * {spirv}/AMD/SPV_AMD_shader_ballot.html[`SPV_AMD_shader_ballot`]
-
-include::{generated}/interfaces/VK_AMD_shader_ballot.txt[]
-
-=== Version History
-
- * Revision 1, 2016-09-19 (Dominik Witczak)
-   - Initial draft
diff --git a/registry/vulkan/appendices/VK_AMD_shader_core_properties.txt b/registry/vulkan/appendices/VK_AMD_shader_core_properties.txt
deleted file mode 100644
index 702e24d..0000000
--- a/registry/vulkan/appendices/VK_AMD_shader_core_properties.txt
+++ /dev/null
@@ -1,99 +0,0 @@
-// Copyright (c) 2018-2020 Advanced Micro Devices, Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-include::{generated}/meta/{refprefix}VK_AMD_shader_core_properties.txt[]
-
-=== Other Extension Metadata
-
-*Last Modified Date*::
-    2019-06-25
-*IP Status*::
-    No known IP claims.
-*Contributors*::
-  - Martin Dinkov, AMD
-  - Matthaeus G. Chajdas, AMD
-
-=== Description
-
-This extension exposes shader core properties for a target physical device
-through the `apiext:VK_KHR_get_physical_device_properties2` extension.
-Please refer to the example below for proper usage.
-
-include::{generated}/interfaces/VK_AMD_shader_core_properties.txt[]
-
-=== Examples
-
-This example retrieves the shader core properties for a physical device.
-
-[source,c++]
-----------------------------------------
-extern VkInstance       instance;
-
-PFN_vkGetPhysicalDeviceProperties2 pfnVkGetPhysicalDeviceProperties2 =
-    reinterpret_cast<PFN_vkGetPhysicalDeviceProperties2>
-    (vkGetInstanceProcAddr(instance, "vkGetPhysicalDeviceProperties2") );
-
-VkPhysicalDeviceProperties2             general_props;
-VkPhysicalDeviceShaderCorePropertiesAMD shader_core_properties;
-
-shader_core_properties.pNext = nullptr;
-shader_core_properties.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_CORE_PROPERTIES_AMD;
-
-general_props.pNext = &shader_core_properties;
-general_props.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROPERTIES_2;
-
-// After this call, shader_core_properties has been populated
-pfnVkGetPhysicalDeviceProperties2(device, &general_props);
-
-printf("Number of shader engines: %d\n",
-    m_shader_core_properties.shader_engine_count =
-    shader_core_properties.shaderEngineCount;
-printf("Number of shader arrays: %d\n",
-    m_shader_core_properties.shader_arrays_per_engine_count =
-    shader_core_properties.shaderArraysPerEngineCount;
-printf("Number of CUs per shader array: %d\n",
-    m_shader_core_properties.compute_units_per_shader_array =
-    shader_core_properties.computeUnitsPerShaderArray;
-printf("Number of SIMDs per compute unit: %d\n",
-    m_shader_core_properties.simd_per_compute_unit =
-    shader_core_properties.simdPerComputeUnit;
-printf("Number of wavefront slots in each SIMD: %d\n",
-    m_shader_core_properties.wavefronts_per_simd =
-    shader_core_properties.wavefrontsPerSimd;
-printf("Number of threads per wavefront: %d\n",
-    m_shader_core_properties.wavefront_size =
-    shader_core_properties.wavefrontSize;
-printf("Number of physical SGPRs per SIMD: %d\n",
-    m_shader_core_properties.sgprs_per_simd =
-    shader_core_properties.sgprsPerSimd;
-printf("Minimum number of SGPRs that can be allocated by a wave: %d\n",
-    m_shader_core_properties.min_sgpr_allocation =
-    shader_core_properties.minSgprAllocation;
-printf("Number of available SGPRs: %d\n",
-    m_shader_core_properties.max_sgpr_allocation =
-    shader_core_properties.maxSgprAllocation;
-printf("SGPRs are allocated in groups of this size: %d\n",
-    m_shader_core_properties.sgpr_allocation_granularity =
-    shader_core_properties.sgprAllocationGranularity;
-printf("Number of physical VGPRs per SIMD: %d\n",
-    m_shader_core_properties.vgprs_per_simd =
-    shader_core_properties.vgprsPerSimd;
-printf("Minimum number of VGPRs that can be allocated by a wave: %d\n",
-    m_shader_core_properties.min_vgpr_allocation =
-    shader_core_properties.minVgprAllocation;
-printf("Number of available VGPRs: %d\n",
-    m_shader_core_properties.max_vgpr_allocation =
-    shader_core_properties.maxVgprAllocation;
-printf("VGPRs are allocated in groups of this size: %d\n",
-    m_shader_core_properties.vgpr_allocation_granularity =
-    shader_core_properties.vgprAllocationGranularity;
-----------------------------------------
-
-
-=== Version History
-
-  * Revision 2, 2019-06-25 (Matthaeus G. Chajdas)
-    - Clarified the meaning of a few fields.
-  * Revision 1, 2018-02-15 (Martin Dinkov)
-    - Initial draft.
diff --git a/registry/vulkan/appendices/VK_AMD_shader_core_properties2.txt b/registry/vulkan/appendices/VK_AMD_shader_core_properties2.txt
deleted file mode 100644
index afaef08..0000000
--- a/registry/vulkan/appendices/VK_AMD_shader_core_properties2.txt
+++ /dev/null
@@ -1,32 +0,0 @@
-// Copyright (c) 2019-2020 Advanced Micro Devices, Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-include::{generated}/meta/{refprefix}VK_AMD_shader_core_properties2.txt[]
-
-=== Other Extension Metadata
-
-*Last Modified Date*::
-    2019-07-26
-*IP Status*::
-    No known IP claims.
-*Contributors*::
-  - Matthaeus G. Chajdas, AMD
-  - Tobias Hector, AMD
-
-=== Description
-
-This extension exposes additional shader core properties for a target
-physical device through the `apiext:VK_KHR_get_physical_device_properties2`
-extension.
-
-include::{generated}/interfaces/VK_AMD_shader_core_properties2.txt[]
-
-=== Examples
-
-None.
-
-=== Version History
-
-  * Revision 1, 2019-07-26 (Matthaeus G. Chajdas)
-    - Initial draft.
diff --git a/registry/vulkan/appendices/VK_AMD_shader_explicit_vertex_parameter.txt b/registry/vulkan/appendices/VK_AMD_shader_explicit_vertex_parameter.txt
deleted file mode 100644
index e7bf6b1..0000000
--- a/registry/vulkan/appendices/VK_AMD_shader_explicit_vertex_parameter.txt
+++ /dev/null
@@ -1,34 +0,0 @@
-// Copyright (c) 2016-2020 Advanced Micro Devices, Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-include::{generated}/meta/{refprefix}VK_AMD_shader_explicit_vertex_parameter.txt[]
-
-=== Other Extension Metadata
-
-*Last Modified Date*::
-    2016-05-10
-*IP Status*::
-    No known IP claims.
-*Interactions and External Dependencies*::
-  - This extension requires
-    {spirv}/AMD/SPV_AMD_shader_explicit_vertex_parameter.html[`SPV_AMD_shader_explicit_vertex_parameter`]
-*Contributors*::
-  - Matthaeus G. Chajdas, AMD
-  - Qun Lin, AMD
-  - Daniel Rakos, AMD
-  - Graham Sellers, AMD
-  - Rex Xu, AMD
-
-=== Description
-
-This extension adds support for the following SPIR-V extension in Vulkan:
-
-  * {spirv}/AMD/SPV_AMD_shader_explicit_vertex_parameter.html[`SPV_AMD_shader_explicit_vertex_parameter`]
-
-include::{generated}/interfaces/VK_AMD_shader_explicit_vertex_parameter.txt[]
-
-=== Version History
-
- * Revision 1, 2016-05-10 (Daniel Rakos)
-   - Initial draft
diff --git a/registry/vulkan/appendices/VK_AMD_shader_fragment_mask.txt b/registry/vulkan/appendices/VK_AMD_shader_fragment_mask.txt
deleted file mode 100644
index b8cfcdf..0000000
--- a/registry/vulkan/appendices/VK_AMD_shader_fragment_mask.txt
+++ /dev/null
@@ -1,87 +0,0 @@
-// Copyright (c) 2017-2020 Advanced Micro Devices, Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-include::{generated}/meta/{refprefix}VK_AMD_shader_fragment_mask.txt[]
-
-=== Other Extension Metadata
-
-*Last Modified Date*::
-    2017-08-16
-*IP Status*::
-    No known IP claims.
-*Interactions and External Dependencies*::
-  - This extension requires
-    {spirv}/AMD/SPV_AMD_shader_fragment_mask.html[`SPV_AMD_shader_fragment_mask`]
-*Contributors*::
-  - Aaron Hagan, AMD
-  - Daniel Rakos, AMD
-  - Timothy Lottes, AMD
-
-=== Description
-
-This extension provides efficient read access to the fragment mask in
-compressed multisampled color surfaces.
-The fragment mask is a lookup table that associates color samples with color
-fragment values.
-
-From a shader, the fragment mask can be fetched with a call to
-code:fragmentMaskFetchAMD, which returns a single code:uint where each
-subsequent four bits specify the color fragment index corresponding to the
-color sample, starting from the least significant bit.
-For example, when eight color samples are used, the color fragment index for
-color sample 0 will be in bits 0-3 of the fragment mask, for color sample 7
-the index will be in bits 28-31.
-
-The color fragment for a particular color sample may then be fetched with
-the corresponding fragment mask value using the code:fragmentFetchAMD shader
-function.
-
-include::{generated}/interfaces/VK_AMD_shader_fragment_mask.txt[]
-
-=== New SPIR-V Capabilities
-
-  * <<spirvenv-capabilities-table-FragmentMaskAMD, code:FragmentMaskAMD>>
-
-=== Examples
-
-This example shows a shader that queries the fragment mask from a
-multisampled compressed surface and uses it to query fragment values.
-
-[source,c++]
-----------------------------------------
-#version 450 core
-
-#extension GL_AMD_shader_fragment_mask: enable
-
-layout(binding = 0) uniform sampler2DMS       s2DMS;
-layout(binding = 1) uniform isampler2DMSArray is2DMSArray;
-
-layout(binding = 2, input_attachment_index = 0) uniform usubpassInputMS usubpassMS;
-
-layout(location = 0) out vec4 fragColor;
-
-void main()
-{
-    vec4 fragOne = vec4(0.0);
-
-    uint fragMask = fragmentMaskFetchAMD(s2DMS, ivec2(2, 3));
-    uint fragIndex = (fragMask & 0xF0) >> 4;
-    fragOne += fragmentFetchAMD(s2DMS, ivec2(2, 3), 1);
-
-    fragMask = fragmentMaskFetchAMD(is2DMSArray, ivec3(2, 3, 1));
-    fragIndex = (fragMask & 0xF0) >> 4;
-    fragOne += fragmentFetchAMD(is2DMSArray, ivec3(2, 3, 1), fragIndex);
-
-    fragMask = fragmentMaskFetchAMD(usubpassMS);
-    fragIndex = (fragMask & 0xF0) >> 4;
-    fragOne += fragmentFetchAMD(usubpassMS, fragIndex);
-
-    fragColor = fragOne;
-}
-----------------------------------------
-
-=== Version History
-
-  * Revision 1, 2017-08-16 (Aaron Hagan)
-    - Initial draft
diff --git a/registry/vulkan/appendices/VK_AMD_shader_image_load_store_lod.txt b/registry/vulkan/appendices/VK_AMD_shader_image_load_store_lod.txt
deleted file mode 100644
index 65f4de6..0000000
--- a/registry/vulkan/appendices/VK_AMD_shader_image_load_store_lod.txt
+++ /dev/null
@@ -1,34 +0,0 @@
-// Copyright (c) 2017-2020 Advanced Micro Devices, Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-include::{generated}/meta/{refprefix}VK_AMD_shader_image_load_store_lod.txt[]
-
-=== Other Extension Metadata
-
-*Last Modified Date*::
-    2017-08-21
-*Interactions and External Dependencies*::
-  - This extension requires
-    {spirv}/AMD/SPV_AMD_shader_image_load_store_lod.html[`SPV_AMD_shader_image_load_store_lod`]
-  - This extension provides API support for
-    https://www.khronos.org/registry/OpenGL/extensions/AMD/AMD_shader_image_load_store_lod.txt[`GL_AMD_shader_image_load_store_lod`]
-*IP Status*::
-    No known IP claims.
-*Contributors*::
-  - Dominik Witczak, AMD
-  - Qun Lin, AMD
-  - Rex Xu, AMD
-
-=== Description
-
-This extension adds support for the following SPIR-V extension in Vulkan:
-
-  * {spirv}/AMD/SPV_AMD_shader_image_load_store_lod.html[`SPV_AMD_shader_image_load_store_lod`]
-
-include::{generated}/interfaces/VK_AMD_shader_image_load_store_lod.txt[]
-
-=== Version History
-
-  * Revision 1, 2017-08-21 (Dominik Witczak)
-    - Initial draft
diff --git a/registry/vulkan/appendices/VK_AMD_shader_info.txt b/registry/vulkan/appendices/VK_AMD_shader_info.txt
deleted file mode 100644
index 8a34077..0000000
--- a/registry/vulkan/appendices/VK_AMD_shader_info.txt
+++ /dev/null
@@ -1,98 +0,0 @@
-// Copyright (c) 2017-2020 Advanced Micro Devices, Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-include::{generated}/meta/{refprefix}VK_AMD_shader_info.txt[]
-
-=== Other Extension Metadata
-
-*Last Modified Date*::
-    2017-10-09
-*IP Status*::
-    No known IP claims.
-*Contributors*::
-  - Jaakko Konttinen, AMD
-
-=== Description
-
-This extension adds a way to query certain information about a compiled
-shader which is part of a pipeline.
-This information may include shader disassembly, shader binary and various
-statistics about a shader's resource usage.
-
-While this extension provides a mechanism for extracting this information,
-the details regarding the contents or format of this information are not
-specified by this extension and may be provided by the vendor externally.
-
-Furthermore, all information types are optionally supported, and users
-should not assume every implementation supports querying every type of
-information.
-
-include::{generated}/interfaces/VK_AMD_shader_info.txt[]
-
-=== Examples
-
-This example extracts the register usage of a fragment shader within a
-particular graphics pipeline:
-
-[source,c++]
-----------------------------------------
-extern VkDevice device;
-extern VkPipeline gfxPipeline;
-
-PFN_vkGetShaderInfoAMD pfnGetShaderInfoAMD = (PFN_vkGetShaderInfoAMD)vkGetDeviceProcAddr(
-    device, "vkGetShaderInfoAMD");
-
-VkShaderStatisticsInfoAMD statistics = {};
-
-size_t dataSize = sizeof(statistics);
-
-if (pfnGetShaderInfoAMD(device,
-    gfxPipeline,
-    VK_SHADER_STAGE_FRAGMENT_BIT,
-    VK_SHADER_INFO_TYPE_STATISTICS_AMD,
-    &dataSize,
-    &statistics) == VK_SUCCESS)
-{
-    printf("VGPR usage: %d\n", statistics.resourceUsage.numUsedVgprs);
-    printf("SGPR usage: %d\n", statistics.resourceUsage.numUsedSgprs);
-}
-----------------------------------------
-
-The following example continues the previous example by subsequently
-attempting to query and print shader disassembly about the fragment shader:
-
-[source,c++]
-----------------------------------------
-// Query disassembly size (if available)
-if (pfnGetShaderInfoAMD(device,
-    gfxPipeline,
-    VK_SHADER_STAGE_FRAGMENT_BIT,
-    VK_SHADER_INFO_TYPE_DISASSEMBLY_AMD,
-    &dataSize,
-    nullptr) == VK_SUCCESS)
-{
-    printf("Fragment shader disassembly:\n");
-
-    void* disassembly = malloc(dataSize);
-
-    // Query disassembly and print
-    if (pfnGetShaderInfoAMD(device,
-        gfxPipeline,
-        VK_SHADER_STAGE_FRAGMENT_BIT,
-        VK_SHADER_INFO_TYPE_DISASSEMBLY_AMD,
-        &dataSize,
-        disassembly) == VK_SUCCESS)
-    {
-        printf((char*)disassembly);
-    }
-
-    free(disassembly);
-}
-----------------------------------------
-
-
-=== Version History
-
-  * Revision 1, 2017-10-09 (Jaakko Konttinen)
-    - Initial revision
diff --git a/registry/vulkan/appendices/VK_AMD_shader_trinary_minmax.txt b/registry/vulkan/appendices/VK_AMD_shader_trinary_minmax.txt
deleted file mode 100644
index a364b6f..0000000
--- a/registry/vulkan/appendices/VK_AMD_shader_trinary_minmax.txt
+++ /dev/null
@@ -1,34 +0,0 @@
-// Copyright (c) 2016-2020 Advanced Micro Devices, Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-include::{generated}/meta/{refprefix}VK_AMD_shader_trinary_minmax.txt[]
-
-=== Other Extension Metadata
-
-*Last Modified Date*::
-    2016-05-10
-*IP Status*::
-    No known IP claims.
-*Interactions and External Dependencies*::
-  - This extension requires
-    {spirv}/AMD/SPV_AMD_shader_trinary_minmax.html[`SPV_AMD_shader_trinary_minmax`]
-*Contributors*::
-  - Matthaeus G. Chajdas, AMD
-  - Qun Lin, AMD
-  - Daniel Rakos, AMD
-  - Graham Sellers, AMD
-  - Rex Xu, AMD
-
-=== Description
-
-This extension adds support for the following SPIR-V extension in Vulkan:
-
-  * {spirv}/AMD/SPV_AMD_shader_trinary_minmax.html[`SPV_AMD_shader_trinary_minmax`]
-
-include::{generated}/interfaces/VK_AMD_shader_trinary_minmax.txt[]
-
-=== Version History
-
- * Revision 1, 2016-05-10 (Daniel Rakos)
-   - Initial draft
diff --git a/registry/vulkan/appendices/VK_AMD_texture_gather_bias_lod.txt b/registry/vulkan/appendices/VK_AMD_texture_gather_bias_lod.txt
deleted file mode 100644
index c9c449e..0000000
--- a/registry/vulkan/appendices/VK_AMD_texture_gather_bias_lod.txt
+++ /dev/null
@@ -1,93 +0,0 @@
-// Copyright (c) 2017-2020 Advanced Micro Devices, Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-include::{generated}/meta/{refprefix}VK_AMD_texture_gather_bias_lod.txt[]
-
-=== Other Extension Metadata
-
-*Last Modified Date*::
-    2017-03-21
-*IP Status*::
-    No known IP claims.
-*Interactions and External Dependencies*::
-  - This extension requires
-    {spirv}/AMD/SPV_AMD_texture_gather_bias_lod.html[`SPV_AMD_texture_gather_bias_lod`]
-*Contributors*::
-  - Dominik Witczak, AMD
-  - Daniel Rakos, AMD
-  - Graham Sellers, AMD
-  - Matthaeus G. Chajdas, AMD
-  - Qun Lin, AMD
-  - Rex Xu, AMD
-  - Timothy Lottes, AMD
-
-=== Description
-
-This extension adds two related features.
-
-Firstly, support for the following SPIR-V extension in Vulkan is added:
-
-  * `SPV_AMD_texture_gather_bias_lod`
-
-Secondly, the extension allows the application to query which formats can be
-used together with the new function prototypes introduced by the SPIR-V
-extension.
-
-include::{generated}/interfaces/VK_AMD_texture_gather_bias_lod.txt[]
-
-=== New SPIR-V Capabilities
-
-  * <<spirvenv-capabilities-table-ImageGatherBiasLodAMD,
-    code:ImageGatherBiasLodAMD>>
-
-=== Examples
-
-[source,c++]
---------------------------------------
-
-struct VkTextureLODGatherFormatPropertiesAMD
-{
-    VkStructureType sType;
-    const void*     pNext;
-    VkBool32        supportsTextureGatherLODBiasAMD;
-};
-
-// ----------------------------------------------------------------------------------------
-// How to detect if an image format can be used with the new function prototypes.
-VkPhysicalDeviceImageFormatInfo2   formatInfo;
-VkImageFormatProperties2           formatProps;
-VkTextureLODGatherFormatPropertiesAMD textureLODGatherSupport;
-
-textureLODGatherSupport.sType = VK_STRUCTURE_TYPE_TEXTURE_LOD_GATHER_FORMAT_PROPERTIES_AMD;
-textureLODGatherSupport.pNext = nullptr;
-
-formatInfo.sType  = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_FORMAT_INFO_2;
-formatInfo.pNext  = nullptr;
-formatInfo.format = ...;
-formatInfo.type   = ...;
-formatInfo.tiling = ...;
-formatInfo.usage  = ...;
-formatInfo.flags  = ...;
-
-formatProps.sType = VK_STRUCTURE_TYPE_IMAGE_FORMAT_PROPERTIES_2;
-formatProps.pNext = &textureLODGatherSupport;
-
-vkGetPhysicalDeviceImageFormatProperties2(physical_device, &formatInfo, &formatProps);
-
-if (textureLODGatherSupport.supportsTextureGatherLODBiasAMD == VK_TRUE)
-{
-    // physical device supports SPV_AMD_texture_gather_bias_lod for the specified
-    // format configuration.
-}
-else
-{
-    // physical device does not support SPV_AMD_texture_gather_bias_lod for the
-    // specified format configuration.
-}
---------------------------------------
-
-=== Version History
-
-  * Revision 1, 2017-03-21 (Dominik Witczak)
-    - Initial draft
diff --git a/registry/vulkan/appendices/VK_ANDROID_external_memory_android_hardware_buffer.txt b/registry/vulkan/appendices/VK_ANDROID_external_memory_android_hardware_buffer.txt
deleted file mode 100644
index d704cc4..0000000
--- a/registry/vulkan/appendices/VK_ANDROID_external_memory_android_hardware_buffer.txt
+++ /dev/null
@@ -1,145 +0,0 @@
-// Copyright (c) 2018-2020 Google LLC
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-include::{generated}/meta/{refprefix}VK_ANDROID_external_memory_android_hardware_buffer.txt[]
-
-=== Other Extension Metadata
-
-*Last Modified Date*::
-    2021-09-30
-*IP Status*::
-    No known IP claims.
-*Contributors*::
-  - Ray Smith, ARM
-  - Chad Versace, Google
-  - Jesse Hall, Google
-  - Tobias Hector, Imagination
-  - James Jones, NVIDIA
-  - Tony Zlatinski, NVIDIA
-  - Matthew Netsch, Qualcomm
-  - Andrew Garrard, Samsung
-
-=== Description
-
-This extension enables an application to import Android
-basetype:AHardwareBuffer objects created outside of the Vulkan device into
-Vulkan memory objects, where they can: be bound to images and buffers.
-It also allows exporting an basetype:AHardwareBuffer from a Vulkan memory
-object for symmetry with other operating systems.
-But since not all basetype:AHardwareBuffer usages and formats have Vulkan
-equivalents, exporting from Vulkan provides strictly less functionality than
-creating the basetype:AHardwareBuffer externally and importing it.
-
-Some basetype:AHardwareBuffer images have implementation-defined _external
-formats_ that may: not correspond to Vulkan formats.
-Sampler {YCbCr} conversion can: be used to sample from these images and
-convert them to a known color space.
-
-include::{generated}/interfaces/VK_ANDROID_external_memory_android_hardware_buffer.txt[]
-
-=== Issues
-
-1) Other external memory objects are represented as weakly-typed handles
-(e.g. Win32 code:HANDLE or POSIX file descriptor), and require a handle type
-parameter along with handles.
-basetype:AHardwareBuffer is strongly typed, so naming the handle type is
-redundant.
-Does symmetry justify adding handle type parameters/fields anyway?
-
-*RESOLVED*: No.
-The handle type is already provided in places that treat external memory
-objects generically.
-In the places we would add it, the application code that would have to
-provide the handle type value is already dealing with
-basetype:AHardwareBuffer-specific commands/structures; the extra symmetry
-would not be enough to make that code generic.
-
-2) The internal layout and therefore size of a basetype:AHardwareBuffer
-image may depend on native usage flags that do not have corresponding Vulkan
-counterparts.
-Do we provide this information to flink:vkCreateImage somehow, or allow the
-allocation size reported by flink:vkGetImageMemoryRequirements to be
-approximate?
-
-*RESOLVED*: Allow the allocation size to be unspecified when allocating the
-memory.
-It has to work this way for exported image memory anyway, since
-basetype:AHardwareBuffer allocation happens in flink:vkAllocateMemory, and
-internally is performed by a separate HAL, not the Vulkan implementation
-itself.
-There is a similar issue with flink:vkGetImageSubresourceLayout: the layout
-is determined by the allocator HAL, so it is not known until the image is
-bound to memory.
-
-3) Should the result of sampling an external-format image with the suggested
-{YCbCr} conversion parameters yield the same results as using a
-code:samplerExternalOES in OpenGL ES?
-
-*RESOLVED*: This would be desirable, so that apps converting from OpenGL ES
-to Vulkan could get the same output given the same input.
-But since sampling and conversion from {YCbCr} images is so loosely defined
-in OpenGL ES, multiple implementations do it in a way that does not conform
-to Vulkan's requirements.
-Modifying the OpenGL ES implementation would be difficult, and would change
-the output of existing unmodified applications.
-Changing the output only for applications that are being modified gives
-developers the chance to notice and mitigate any problems.
-Implementations are encouraged to minimize differences as much as possible
-without causing compatibility problems for existing OpenGL ES applications
-or violating Vulkan requirements.
-
-4) Should an basetype:AHardwareBuffer with code:AHARDWAREBUFFER_USAGE_CPU_*
-usage be mappable in Vulkan? Should it be possible to export an
-code:AHardwareBuffers with such usage?
-
-*RESOLVED*: Optional, and mapping in Vulkan is not the same as
-code:AHardwareBuffer_lock.
-The semantics of these are different: mapping in memory is persistent, just
-gives a raw view of the memory contents, and does not involve ownership.
-code:AHardwareBuffer_lock gives the host exclusive access to the buffer, is
-temporary, and allows for reformatting copy-in/copy-out.
-Implementations are not required to support host-visible memory types for
-imported Android hardware buffers or resources backed by them.
-If a host-visible memory type is supported and used, the memory can be
-mapped in Vulkan, but doing so follows Vulkan semantics: it is just a raw
-view of the data and does not imply ownership (this means implementations
-must not internally call code:AHardwareBuffer_lock to implement
-flink:vkMapMemory, or assume the application has done so).
-Implementations are not required to support linear-tiled images backed by
-Android hardware buffers, even if the basetype:AHardwareBuffer has CPU
-usage.
-There is no reliable way to allocate memory in Vulkan that can be exported
-to a basetype:AHardwareBuffer with CPU usage.
-
-5) Android may add new basetype:AHardwareBuffer formats and usage flags over
-time.
-Can reference to them be added to this extension, or do they need a new
-extension?
-
-*RESOLVED*: This extension can document the interaction between the new AHB
-formats/usages and existing Vulkan features.
-No new Vulkan features or implementation requirements can be added.
-The extension version number will be incremented when this additional
-documentation is added, but the version number does not indicate that an
-implementaiton supports Vulkan memory or resources that map to the new
-basetype:AHardwareBuffer features: support for that must be queried with
-flink:vkGetPhysicalDeviceImageFormatProperties2 or is implied by
-successfully allocating a basetype:AHardwareBuffer outside of Vulkan that
-uses the new feature and has a GPU usage flag.
-
-In essence, these are new features added to a new Android API level, rather
-than new Vulkan features.
-The extension will only document how existing Vulkan features map to that
-new Android feature.
-
-=== Version History
-
-  * Revision 4, 2021-09-30 (Jon Leech)
-    - Add interaction with `apiext:VK_KHR_format_feature_flags2` to `vk.xml`
-  * Revision 3, 2019-08-27 (Jon Leech)
-    - Update revision history to correspond to XML version number
-  * Revision 2, 2018-04-09 (Petr Kraus)
-    - Markup fixes and remove incorrect Draft status
-  * Revision 1, 2018-03-04 (Jesse Hall)
-    - Initial version
diff --git a/registry/vulkan/appendices/VK_EXT_4444_formats.txt b/registry/vulkan/appendices/VK_EXT_4444_formats.txt
deleted file mode 100644
index 3a7734b..0000000
--- a/registry/vulkan/appendices/VK_EXT_4444_formats.txt
+++ /dev/null
@@ -1,36 +0,0 @@
-// Copyright 2020-2021 The Khronos Group Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-include::{generated}/meta/{refprefix}VK_EXT_4444_formats.txt[]
-
-=== Other Extension Metadata
-
-*Last Modified Date*::
-    2020-07-28
-*IP Status*::
-    No known IP claims.
-*Contributors*::
-  - Joshua Ashton, Valve
-  - Jason Ekstrand, Intel
-
-=== Description
-
-This extension defines the ename:VK_FORMAT_A4R4G4B4_UNORM_PACK16_EXT and
-ename:VK_FORMAT_A4B4G4R4_UNORM_PACK16_EXT formats which are defined in other
-current graphics APIs.
-
-This extension may be useful for building translation layers for those APIs
-or for porting applications that use these formats without having to resort
-to swizzles.
-
-When VK_EXT_custom_border_color is used, these formats are not subject to
-the same restrictions for border color without format as with
-VK_FORMAT_B4G4R4A4_UNORM_PACK16.
-
-include::{generated}/interfaces/VK_EXT_4444_formats.txt[]
-
-=== Version History
-
- * Revision 1, 2020-07-04 (Joshua Ashton)
-   - Initial draft
diff --git a/registry/vulkan/appendices/VK_EXT_acquire_drm_display.txt b/registry/vulkan/appendices/VK_EXT_acquire_drm_display.txt
deleted file mode 100644
index 77976f5..0000000
--- a/registry/vulkan/appendices/VK_EXT_acquire_drm_display.txt
+++ /dev/null
@@ -1,32 +0,0 @@
-// Copyright 2018-2021 The Khronos Group, Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-include::{generated}/meta/{refprefix}VK_EXT_acquire_drm_display.txt[]
-
-=== Other Extension Metadata
-
-*Last Modified Date*::
-    2021-06-09
-*IP Status*::
-    No known IP claims.
-*Contributors*::
-  - Simon Zeni, Status Holdings, Ltd.
-
-=== Description
-
-This extension allows an application to take exclusive control of a display
-using the Direct Rendering Manager (DRM) interface.
-When acquired, the display will be under full control of the application
-until the display is either released or the connector is unplugged.
-
-include::{generated}/interfaces/VK_EXT_acquire_drm_display.txt[]
-
-=== Issues
-
-None.
-
-=== Version History
-
-  * Revision 1, 2021-05-11 (Simon Zeni)
-    - Initial draft
diff --git a/registry/vulkan/appendices/VK_EXT_acquire_xlib_display.txt b/registry/vulkan/appendices/VK_EXT_acquire_xlib_display.txt
deleted file mode 100644
index feddb5a..0000000
--- a/registry/vulkan/appendices/VK_EXT_acquire_xlib_display.txt
+++ /dev/null
@@ -1,58 +0,0 @@
-// Copyright 2018-2021 The Khronos Group Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-include::{generated}/meta/{refprefix}VK_EXT_acquire_xlib_display.txt[]
-
-=== Other Extension Metadata
-
-*Last Modified Date*::
-    2016-12-13
-*IP Status*::
-    No known IP claims.
-*Contributors*::
-  - Dave Airlie, Red Hat
-  - Pierre Boudier, NVIDIA
-  - James Jones, NVIDIA
-  - Damien Leone, NVIDIA
-  - Pierre-Loup Griffais, Valve
-  - Liam Middlebrook, NVIDIA
-  - Daniel Vetter, Intel
-
-=== Description
-
-This extension allows an application to take exclusive control on a display
-currently associated with an X11 screen.
-When control is acquired, the display will be deassociated from the X11
-screen until control is released or the specified display connection is
-closed.
-Essentially, the X11 screen will behave as if the monitor has been unplugged
-until control is released.
-
-include::{generated}/interfaces/VK_EXT_acquire_xlib_display.txt[]
-
-=== Issues
-
-1) Should flink:vkAcquireXlibDisplayEXT take an RandR display ID, or a
-Vulkan display handle as input?
-
-*RESOLVED*: A Vulkan display handle.
-Otherwise there would be no way to specify handles to displays that had been
-prevented from being included in the X11 display list by some native
-platform or vendor-specific mechanism.
-
-2) How does an application figure out which RandR display corresponds to a
-Vulkan display?
-
-*RESOLVED*: A new function, flink:vkGetRandROutputDisplayEXT, is introduced
-for this purpose.
-
-3) Should flink:vkGetRandROutputDisplayEXT be part of this extension, or a
-general Vulkan / RandR or Vulkan / Xlib extension?
-
-*RESOLVED*: To avoid yet another extension, include it in this extension.
-
-=== Version History
-
- * Revision 1, 2016-12-13 (James Jones)
-   - Initial draft
diff --git a/registry/vulkan/appendices/VK_EXT_astc_decode_mode.txt b/registry/vulkan/appendices/VK_EXT_astc_decode_mode.txt
deleted file mode 100644
index 3a77206..0000000
--- a/registry/vulkan/appendices/VK_EXT_astc_decode_mode.txt
+++ /dev/null
@@ -1,101 +0,0 @@
-// Copyright 2018-2021 The Khronos Group, Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-include::{generated}/meta/{refprefix}VK_EXT_astc_decode_mode.txt[]
-
-=== Other Extension Metadata
-
-*Last Modified Date*::
-    2018-08-07
-*Contributors*::
-  - Jan-Harald Fredriksen, Arm
-
-=== Description
-
-The existing specification requires that low dynamic range (LDR) ASTC
-textures are decompressed to FP16 values per component.
-In many cases, decompressing LDR textures to a lower precision intermediate
-result gives acceptable image quality.
-Source material for LDR textures is typically authored as 8-bit UNORM
-values, so decoding to FP16 values adds little value.
-On the other hand, reducing precision of the decoded result reduces the size
-of the decompressed data, potentially improving texture cache performance
-and saving power.
-
-The goal of this extension is to enable this efficiency gain on existing
-ASTC texture data.
-This is achieved by giving the application the ability to select the
-intermediate decoding precision.
-
-Three decoding options are provided:
-
-  * Decode to ename:VK_FORMAT_R16G16B16A16_SFLOAT precision: This is the
-    default, and matches the required behavior in the core API.
-  * Decode to ename:VK_FORMAT_R8G8B8A8_UNORM precision: This is provided as
-    an option in LDR mode.
-  * Decode to ename:VK_FORMAT_E5B9G9R9_UFLOAT_PACK32 precision: This is
-    provided as an option in both LDR and HDR mode.
-    In this mode, negative values cannot be represented and are clamped to
-    zero.
-    The alpha component is ignored, and the results are as if alpha was 1.0.
-    This decode mode is optional and support can be queried via the physical
-    device properties.
-
-include::{generated}/interfaces/VK_EXT_astc_decode_mode.txt[]
-
-=== Issues
-
-1) Are implementations allowed to decode at a higher precision than what is
-requested?
-
-    RESOLUTION: No.
-    If we allow this, then this extension could be exposed on all
-    implementations that support ASTC.
-    But developers would have no way of knowing what precision was actually
-    used, and thus whether the image quality is sufficient at reduced
-    precision.
-
-2) Should the decode mode be image view state and/or sampler state?
-
-    RESOLUTION: Image view state only.
-    Some implementations treat the different decode modes as different
-    texture formats.
-
-=== Example
-
-Create an image view that decodes to ename:VK_FORMAT_R8G8B8A8_UNORM
-precision:
-
-[source,c++]
-----------------------------------------
-
-    VkImageViewASTCDecodeModeEXT decodeMode =
-    {
-        VK_STRUCTURE_TYPE_IMAGE_VIEW_ASTC_DECODE_MODE_EXT, // sType
-        NULL, // pNext
-        VK_FORMAT_R8G8B8A8_UNORM // decode mode
-    };
-
-    VkImageViewCreateInfo createInfo =
-    {
-        VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO, // sType
-        &decodeMode, // pNext
-        // flags, image, viewType set to application-desired values
-        VK_FORMAT_ASTC_8x8_UNORM_BLOCK, // format
-        // components, subresourceRange set to application-desired values
-    };
-
-    VkImageView imageView;
-    VkResult result = vkCreateImageView(
-        device,
-        &createInfo,
-        NULL,
-        &imageView);
-----------------------------------------
-
-=== Version History
-
- * Revision 1, 2018-08-07 (Jan-Harald Fredriksen)
-   - Initial revision
-
diff --git a/registry/vulkan/appendices/VK_EXT_blend_operation_advanced.txt b/registry/vulkan/appendices/VK_EXT_blend_operation_advanced.txt
deleted file mode 100644
index 33d88f3..0000000
--- a/registry/vulkan/appendices/VK_EXT_blend_operation_advanced.txt
+++ /dev/null
@@ -1,110 +0,0 @@
-// Copyright 2017-2021 The Khronos Group Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-include::{generated}/meta/{refprefix}VK_EXT_blend_operation_advanced.txt[]
-
-=== Other Extension Metadata
-
-*Last Modified Date*::
-    2017-06-12
-*Contributors*::
-  - Jeff Bolz, NVIDIA
-
-=== Description
-
-This extension adds a number of "`advanced`" blending operations that can:
-be used to perform new color blending operations, many of which are more
-complex than the standard blend modes provided by unextended Vulkan.
-This extension requires different styles of usage, depending on the level of
-hardware support and the enabled features:
-
-  - If
-    slink:VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT::pname:advancedBlendCoherentOperations
-    is ename:VK_FALSE, the new blending operations are supported, but a
-    memory dependency must: separate each advanced blend operation on a
-    given sample.
-    ename:VK_ACCESS_COLOR_ATTACHMENT_READ_NONCOHERENT_BIT_EXT is used to
-    synchronize reads using advanced blend operations.
-
-  - If
-    slink:VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT::pname:advancedBlendCoherentOperations
-    is ename:VK_TRUE, advanced blend operations obey primitive order just
-    like basic blend operations.
-
-In unextended Vulkan, the set of blending operations is limited, and can: be
-expressed very simply.
-The ename:VK_BLEND_OP_MIN and ename:VK_BLEND_OP_MAX blend operations simply
-compute component-wise minimums or maximums of source and destination color
-components.
-The ename:VK_BLEND_OP_ADD, ename:VK_BLEND_OP_SUBTRACT, and
-ename:VK_BLEND_OP_REVERSE_SUBTRACT modes multiply the source and destination
-colors by source and destination factors and either add the two products
-together or subtract one from the other.
-This limited set of operations supports many common blending operations but
-precludes the use of more sophisticated transparency and blending operations
-commonly available in many dedicated imaging APIs.
-
-This extension provides a number of new "`advanced`" blending operations.
-Unlike traditional blending operations using ename:VK_BLEND_OP_ADD, these
-blending equations do not use source and destination factors specified by
-elink:VkBlendFactor.
-Instead, each blend operation specifies a complete equation based on the
-source and destination colors.
-These new blend operations are used for both RGB and alpha components; they
-must: not be used to perform separate RGB and alpha blending (via different
-values of color and alpha elink:VkBlendOp).
-
-These blending operations are performed using premultiplied colors, where
-RGB colors can: be considered premultiplied or non-premultiplied by alpha,
-according to the pname:srcPremultiplied and pname:dstPremultiplied members
-of slink:VkPipelineColorBlendAdvancedStateCreateInfoEXT.
-If a color is considered non-premultiplied, the (R,G,B) color components are
-multiplied by the alpha component prior to blending.
-For non-premultiplied color components in the range [eq]#[0,1]#, the
-corresponding premultiplied color component would have values in the range
-[eq]#[0 {times} A, 1 {times} A]#.
-
-Many of these advanced blending equations are formulated where the result of
-blending source and destination colors with partial coverage have three
-separate contributions: from the portions covered by both the source and the
-destination, from the portion covered only by the source, and from the
-portion covered only by the destination.
-The blend parameter
-slink:VkPipelineColorBlendAdvancedStateCreateInfoEXT::pname:blendOverlap
-can: be used to specify a correlation between source and destination pixel
-coverage.
-If set to ename:VK_BLEND_OVERLAP_CONJOINT_EXT, the source and destination
-are considered to have maximal overlap, as would be the case if drawing two
-objects on top of each other.
-If set to ename:VK_BLEND_OVERLAP_DISJOINT_EXT, the source and destination
-are considered to have minimal overlap, as would be the case when rendering
-a complex polygon tessellated into individual non-intersecting triangles.
-If set to ename:VK_BLEND_OVERLAP_UNCORRELATED_EXT, the source and
-destination coverage are assumed to have no spatial correlation within the
-pixel.
-
-In addition to the coherency issues on implementations not supporting
-pname:advancedBlendCoherentOperations, this extension has several
-limitations worth noting.
-First, the new blend operations have a limit on the number of color
-attachments they can: be used with, as indicated by
-slink:VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT::pname:advancedBlendMaxColorAttachments.
-Additionally, blending precision may: be limited to 16-bit floating-point,
-which may: result in a loss of precision and dynamic range for framebuffer
-formats with 32-bit floating-point components, and in a loss of precision
-for formats with 12- and 16-bit signed or unsigned normalized integer
-components.
-
-include::{generated}/interfaces/VK_EXT_blend_operation_advanced.txt[]
-
-=== Issues
-
-None.
-
-=== Version History
-
-  * Revision 1, 2017-06-12 (Jeff Bolz)
-    - Internal revisions
-  * Revision 2, 2017-06-12 (Jeff Bolz)
-    - Internal revisions
diff --git a/registry/vulkan/appendices/VK_EXT_border_color_swizzle.txt b/registry/vulkan/appendices/VK_EXT_border_color_swizzle.txt
deleted file mode 100644
index 2aa1ac8..0000000
--- a/registry/vulkan/appendices/VK_EXT_border_color_swizzle.txt
+++ /dev/null
@@ -1,46 +0,0 @@
-// Copyright 2021 The Khronos Group Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-include::{generated}/meta/{refprefix}VK_EXT_border_color_swizzle.txt[]
-
-=== Other Extension Metadata
-
-*Last Modified Date*::
-    2021-10-12
-*IP Status*::
-    No known IP claims.
-*Contributors*::
-  - Graeme Leese, Broadcom
-  - Jan-Harald Fredriksen, Arm
-  - Ricardo Garcia, Igalia
-  - Shahbaz Youssefi, Google
-  - Stu Smith, AMD
-
-=== Description
-
-After the publication of VK_EXT_custom_border_color, it was discovered that
-some implementations had undefined behavior when combining a sampler that
-uses a custom border color with image views whose component mapping is not
-the identity mapping.
-
-Since VK_EXT_custom_border_color has already shipped, this new extension
-VK_EXT_border_color_swizzle was created to define the interaction between
-custom border colors and non-identity image view swizzles, and provide a
-work-around for implementations that must pre-swizzle the sampler border
-color to match the image view component mapping it is combined with.
-
-This extension also defines the behavior between samplers with an opaque
-black border color and image views with a non-identity component swizzle,
-which was previously left undefined.
-
-include::{generated}/interfaces/VK_EXT_border_color_swizzle.txt[]
-
-=== Issues
-
-None.
-
-=== Version History
-
-  * Revision 1, 2021-10-12 (Piers Daniell)
-    - Internal revisions.
diff --git a/registry/vulkan/appendices/VK_EXT_buffer_device_address.txt b/registry/vulkan/appendices/VK_EXT_buffer_device_address.txt
deleted file mode 100644
index 4020279..0000000
--- a/registry/vulkan/appendices/VK_EXT_buffer_device_address.txt
+++ /dev/null
@@ -1,59 +0,0 @@
-// Copyright 2018-2021 The Khronos Group Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-include::{generated}/meta/{refprefix}VK_EXT_buffer_device_address.txt[]
-
-=== Other Extension Metadata
-
-*Last Modified Date*::
-    2019-01-06
-*IP Status*::
-    No known IP claims.
-*Interactions and External Dependencies*::
-  - This extension requires
-    {spirv}/EXT/SPV_EXT_physical_storage_buffer.html[`SPV_EXT_physical_storage_buffer`]
-*Contributors*::
-  - Jeff Bolz, NVIDIA
-  - Neil Henning, AMD
-  - Tobias Hector, AMD
-  - Jason Ekstrand, Intel
-  - Baldur Karlsson, Valve
-
-=== Description
-
-This extension allows the application to query a 64-bit buffer device
-address value for a buffer, which can be used to access the buffer memory
-via the code:PhysicalStorageBufferEXT storage class in the
-https://github.com/KhronosGroup/GLSL/blob/master/extensions/ext/GLSL_EXT_buffer_reference.txt[`GL_EXT_buffer_reference`]
-GLSL extension and
-{spirv}/EXT/SPV_EXT_physical_storage_buffer.html[`SPV_EXT_physical_storage_buffer`]
-SPIR-V extension.
-
-It also allows buffer device addresses to be provided by a trace replay
-tool, so that it matches the address used when the trace was captured.
-
-include::{generated}/interfaces/VK_EXT_buffer_device_address.txt[]
-
-=== New SPIR-V Capabilities
-
-  * <<spirvenv-capabilities-table-PhysicalStorageBufferAddresses,code:PhysicalStorageBufferAddressesEXT>>
-
-=== Issues
-
-1) Where is VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BUFFER_ADDRESS_FEATURES_EXT
-and VkPhysicalDeviceBufferAddressFeaturesEXT?
-
-*RESOLVED*: They were renamed as
-ename:VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BUFFER_DEVICE_ADDRESS_FEATURES_EXT
-and slink:VkPhysicalDeviceBufferDeviceAddressFeaturesEXT accordingly for
-consistency.
-Even though, the old names can still be found in the generated header files
-for compatibility.
-
-=== Version History
-
- * Revision 1, 2018-11-01 (Jeff Bolz)
-   - Internal revisions
- * Revision 2, 2019-01-06 (Jon Leech)
-   - Minor updates to appendix for publication
diff --git a/registry/vulkan/appendices/VK_EXT_calibrated_timestamps.txt b/registry/vulkan/appendices/VK_EXT_calibrated_timestamps.txt
deleted file mode 100644
index e6288c7..0000000
--- a/registry/vulkan/appendices/VK_EXT_calibrated_timestamps.txt
+++ /dev/null
@@ -1,112 +0,0 @@
-// Copyright 2018-2021 The Khronos Group Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-include::{generated}/meta/{refprefix}VK_EXT_calibrated_timestamps.txt[]
-
-=== Other Extension Metadata
-
-*Last Modified Date*::
-    2018-10-04
-*IP Status*::
-    No known IP claims.
-*Contributors*::
-  - Matthaeus G. Chajdas, AMD
-  - Alan Harrison, AMD
-  - Derrick Owens, AMD
-  - Daniel Rakos, AMD
-  - Jason Ekstrand, Intel
-  - Keith Packard, Valve
-
-=== Description
-
-This extension provides an interface to query calibrated timestamps obtained
-quasi simultaneously from two time domains.
-
-include::{generated}/interfaces/VK_EXT_calibrated_timestamps.txt[]
-
-=== Issues
-
-1) Is the device timestamp value returned in the same time domain as the
-timestamp values written by flink:vkCmdWriteTimestamp?
-
-*RESOLVED*: Yes.
-
-2) What time domain is the host timestamp returned in?
-
-*RESOLVED*: A query is provided to determine the calibrateable time domains.
-The expected host time domain used on Windows is that of
-QueryPerformanceCounter, and on Linux that of CLOCK_MONOTONIC.
-
-3) Should we support other time domain combinations than just one host and
-the device time domain?
-
-*RESOLVED*: Supporting that would need the application to query the set of
-supported time domains, while supporting only one host and the device time
-domain would only need a query for the host time domain type.
-The proposed API chooses the general approach for the sake of extensibility.
-
-4) Should we use CLOCK_MONOTONIC_RAW instead of CLOCK_MONOTONIC?
-
-*RESOLVED*: CLOCK_MONOTONIC is usable in a wider set of situations, however,
-it is subject to NTP adjustments so some use cases may prefer
-CLOCK_MONOTONIC_RAW.
-Thus this extension allows both to be exposed.
-
-5) How can the application extrapolate future device timestamp values from
-the calibrated timestamp value?
-
-*RESOLVED*: slink:VkPhysicalDeviceLimits::pname:timestampPeriod makes it
-possible to calculate future device timestamps as follows:
-
-6) In what queue are timestamp values in time domain
-ename:VK_TIME_DOMAIN_DEVICE_EXT captured by
-flink:vkGetCalibratedTimestampsEXT?
-
-*RESOLVED*: An implementation supporting this extension will have all its
-VkQueue share the same time domain.
-
-[source,c]
----------------------------------------------------
-futureTimestamp = calibratedTimestamp + deltaNanoseconds / timestampPeriod
----------------------------------------------------
-
-6) Can the host and device timestamp values drift apart over longer periods
-of time?
-
-*RESOLVED*: Yes, especially as some time domains by definition allow for
-that to happen (e.g. CLOCK_MONOTONIC is subject to NTP adjustments).
-Thus it is recommended that applications re-calibrate from time to time.
-
-7) Should we add a query for reporting the maximum deviation of the
-timestamp values returned by calibrated timestamp queries?
-
-*RESOLVED*: A global query seems inappropriate and difficult to enforce.
-However, it is possible to return the maximum deviation any single
-calibrated timestamp query can have by sampling one of the time domains
-twice as follows:
-
-[source,c]
----------------------------------------------------
-timestampX = timestampX_before = SampleTimeDomain(X)
-for each time domain Y != X
-    timestampY = SampleTimeDomain(Y)
-timestampX_after = SampleTimeDomain(X)
-maxDeviation = timestampX_after - timestampX_before
----------------------------------------------------
-
-8) Can the maximum deviation reported ever be zero?
-
-*RESOLVED*: Unless the tick of each clock corresponding to the set of time
-domains coincides and all clocks can literally be sampled simutaneously,
-there is not really a possibility for the maximum deviation to be zero, so
-by convention the maximum deviation is always at least the maximum of the
-length of the ticks of the set of time domains calibrated and thus can never
-be zero.
-
-=== Version History
-
-  * Revision 2, 2021-03-16 (Lionel Landwerlin)
-    - Specify requirement on device timestamps
-  * Revision 1, 2018-10-04 (Daniel Rakos)
-    - Internal revisions.
diff --git a/registry/vulkan/appendices/VK_EXT_color_write_enable.txt b/registry/vulkan/appendices/VK_EXT_color_write_enable.txt
deleted file mode 100644
index 4d6ee46..0000000
--- a/registry/vulkan/appendices/VK_EXT_color_write_enable.txt
+++ /dev/null
@@ -1,39 +0,0 @@
-// Copyright (c) 2020 The Khronos Group Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-include::{generated}/meta/{refprefix}VK_EXT_color_write_enable.txt[]
-
-=== Other Extension Metadata
-
-*Last Modified Date*::
-    2020-02-25
-*IP Status*::
-    No known IP claims.
-*Contributors*::
-  - Sharif Elcott, Google
-  - Tobias Hector, AMD
-  - Piers Daniell, NVIDIA
-
-=== Description
-
-This extension allows for selectively enabling and disabling writes to
-output color attachments via a pipeline dynamic state.
-
-The intended use cases for this new state are mostly identical to those of
-colorWriteMask, such as selectively disabling writes to avoid feedback loops
-between subpasses or bandwidth savings for unused outputs.
-By making the state dynamic, one additional benefit is the ability to reduce
-pipeline counts and pipeline switching via shaders that write a superset of
-the desired data of which subsets are selected dynamically.
-The reason for a new state, colorWriteEnable, rather than making
-colorWriteMask dynamic is that, on many implementations, the more flexible
-per-component semantics of the colorWriteMask state cannot be made dynamic
-in a performant manner.
-
-include::{generated}/interfaces/VK_EXT_color_write_enable.txt[]
-
-=== Version History
-
- * Revision 1, 2020-01-25 (Sharif Elcott)
-   - Internal revisions
diff --git a/registry/vulkan/appendices/VK_EXT_conditional_rendering.txt b/registry/vulkan/appendices/VK_EXT_conditional_rendering.txt
deleted file mode 100644
index 83c55a7..0000000
--- a/registry/vulkan/appendices/VK_EXT_conditional_rendering.txt
+++ /dev/null
@@ -1,58 +0,0 @@
-// Copyright 2018-2021 The Khronos Group Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-include::{generated}/meta/{refprefix}VK_EXT_conditional_rendering.txt[]
-
-=== Other Extension Metadata
-
-*Last Modified Date*::
-    2018-05-21
-*IP Status*::
-    No known IP claims.
-*Contributors*::
-  - Vikram Kushwaha, NVIDIA
-  - Daniel Rakos, AMD
-  - Jesse Hall, Google
-  - Jeff Bolz, NVIDIA
-  - Piers Daniell, NVIDIA
-  - Stuart Smith, Imagination Technologies
-
-=== Description
-
-This extension allows the execution of one or more rendering commands to be
-conditional on a value in buffer memory.
-This may help an application reduce the latency by conditionally discarding
-rendering commands without application intervention.
-The conditional rendering commands are limited to draws, compute dispatches
-and clearing attachments within a conditional rendering block.
-
-include::{generated}/interfaces/VK_EXT_conditional_rendering.txt[]
-
-=== Issues
-
-1) Should conditional rendering affect copy and blit commands?
-
-*RESOLVED*: Conditional rendering should not affect copies and blits.
-
-2) Should secondary command buffers be allowed to execute while conditional
-rendering is active in the primary command buffer?
-
-*RESOLVED*: The rendering commands in secondary command buffer will be
-affected by an active conditional rendering in primary command buffer if the
-pname:conditionalRenderingEnable is set to ename:VK_TRUE.
-Conditional rendering must: not be active in the primary command buffer if
-pname:conditionalRenderingEnable is ename:VK_FALSE.
-
-=== Examples
-
-None.
-
-=== Version History
-
-  * Revision 1, 2018-04-19 (Vikram Kushwaha)
-    - First Version
-
-  * Revision 2, 2018-05-21 (Vikram Kushwaha)
-    - Add new pipeline stage, access flags and limit conditional rendering
-      to a subpass or entire render pass.
diff --git a/registry/vulkan/appendices/VK_EXT_conservative_rasterization.txt b/registry/vulkan/appendices/VK_EXT_conservative_rasterization.txt
deleted file mode 100644
index 38f7486..0000000
--- a/registry/vulkan/appendices/VK_EXT_conservative_rasterization.txt
+++ /dev/null
@@ -1,74 +0,0 @@
-// Copyright 2017-2021 The Khronos Group Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-include::{generated}/meta/{refprefix}VK_EXT_conservative_rasterization.txt[]
-
-=== Other Extension Metadata
-
-*Last Modified Date*::
-    2020-06-09
-*Interactions and External Dependencies*::
-  - This extension requires
-    {spirv}/EXT/SPV_EXT_fragment_fully_covered.html[`SPV_EXT_fragment_fully_covered`]
-    if the
-    sname:VkPhysicalDeviceConservativeRasterizationPropertiesEXT::pname:fullyCoveredFragmentShaderInputVariable
-    feature is used.
-  - This extension requires
-    {spirv}/KHR/SPV_KHR_post_depth_coverage.html[`SPV_KHR_post_depth_coverage`]if
-    the
-    sname:VkPhysicalDeviceConservativeRasterizationPropertiesEXT::pname:conservativeRasterizationPostDepthCoverage
-    feature is used.
-  - This extension provides API support for
-    https://www.khronos.org/registry/OpenGL/extensions/NV/NV_conservative_raster_underestimation.txt[`GL_NV_conservative_raster_underestimation`]
-    if the
-    sname:VkPhysicalDeviceConservativeRasterizationPropertiesEXT::pname:fullyCoveredFragmentShaderInputVariable
-    feature is used.
-*Contributors*::
-  - Daniel Koch, NVIDIA
-  - Daniel Rakos, AMD
-  - Jeff Bolz, NVIDIA
-  - Slawomir Grajewski, Intel
-  - Stu Smith, Imagination Technologies
-
-=== Description
-
-This extension adds a new rasterization mode called conservative
-rasterization.
-There are two modes of conservative rasterization; overestimation and
-underestimation.
-
-When overestimation is enabled, if any part of the primitive, including its
-edges, covers any part of the rectangular pixel area, including its sides,
-then a fragment is generated with all coverage samples turned on.
-This extension allows for some variation in implementations by accounting
-for differences in overestimation, where the generating primitive size is
-increased at each of its edges by some sub-pixel amount to further increase
-conservative pixel coverage.
-Implementations can allow the application to specify an extra overestimation
-beyond the base overestimation the implementation already does.
-It also allows implementations to either cull degenerate primitives or
-rasterize them.
-
-When underestimation is enabled, fragments are only generated if the
-rectangular pixel area is fully covered by the generating primitive.
-If supported by the implementation, when a pixel rectangle is fully covered
-the fragment shader input variable builtin called FullyCoveredEXT is set to
-true.
-The shader variable works in either overestimation or underestimation mode.
-
-Implementations can process degenerate triangles and lines by either
-discarding them or generating conservative fragments for them.
-Degenerate triangles are those that end up with zero area after the
-rasterizer quantizes them to the fixed-point pixel grid.
-Degenerate lines are those with zero length after quantization.
-
-include::{generated}/interfaces/VK_EXT_conservative_rasterization.txt[]
-
-=== Version History
-
-  * Revision 1.1, 2020-09-06 (Piers Daniell)
-    - Add missing SPIR-V and GLSL dependencies.
-
-  * Revision 1, 2017-08-28 (Piers Daniell)
-    - Internal revisions
diff --git a/registry/vulkan/appendices/VK_EXT_custom_border_color.txt b/registry/vulkan/appendices/VK_EXT_custom_border_color.txt
deleted file mode 100644
index bd9237e..0000000
--- a/registry/vulkan/appendices/VK_EXT_custom_border_color.txt
+++ /dev/null
@@ -1,136 +0,0 @@
-// Copyright 2019-2021 The Khronos Group Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-include::{generated}/meta/{refprefix}VK_EXT_custom_border_color.txt[]
-
-=== Other Extension Metadata
-
-*Last Modified Date*::
-    2020-04-16
-*IP Status*::
-    No known IP claims.
-*Contributors*::
-  - Joshua Ashton, Valve
-  - Hans-Kristian Arntzen, Valve
-  - Philip Rebohle, Valve
-  - Liam Middlebrook, NVIDIA
-  - Jeff Bolz, NVIDIA
-  - Tobias Hector, AMD
-  - Jason Ekstrand, Intel
-  - Spencer Fricke, Samsung Electronics
-  - Graeme Leese, Broadcom
-  - Jesse Hall, Google
-  - Jan-Harald Fredriksen, ARM
-  - Tom Olson, ARM
-  - Stuart Smith, Imagination Technologies
-  - Donald Scorgie, Imagination Technologies
-  - Alex Walters, Imagination Technologies
-  - Peter Quayle, Imagination Technologies
-
-=== Description
-
-This extension provides cross-vendor functionality to specify a custom
-border color for use when the sampler address mode
-ename:VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_BORDER is used.
-
-To create a sampler which uses a custom border color set
-slink:VkSamplerCreateInfo::pname:borderColor to one of:
-
-  * ename:VK_BORDER_COLOR_FLOAT_CUSTOM_EXT
-  * ename:VK_BORDER_COLOR_INT_CUSTOM_EXT
-
-When ename:VK_BORDER_COLOR_FLOAT_CUSTOM_EXT or
-ename:VK_BORDER_COLOR_INT_CUSTOM_EXT is used, applications must provide a
-slink:VkSamplerCustomBorderColorCreateInfoEXT in the pname:pNext chain for
-slink:VkSamplerCreateInfo.
-
-include::{generated}/interfaces/VK_EXT_custom_border_color.txt[]
-
-=== Issues
-
-1) Should VkClearColorValue be used for the border color value, or should we
-have our own struct/union? Do we need to specify the type of the input
-values for the components? This is more of a concern if VkClearColorValue is
-used here because it provides a union of float,int,uint types.
-
-*RESOLVED*: Will reuse existing VkClearColorValue structure in order to
-easily take advantage of float,int,uint borderColor types.
-
-
-2) For hardware which supports a limited number of border colors what
-happens if that number is exceeded? Should this be handled by the driver
-unbeknownst to the application? In Revision 1 we had solved this issue using
-a new Object type, however that may have lead to additional system resource
-consumption which would otherwise not be required.
-
-*RESOLVED*: Added
-sname:VkPhysicalDeviceCustomBorderColorPropertiesEXT::pname:maxCustomBorderColorSamplers
-for tracking implementation-specific limit, and Valid Usage statement
-handling overflow.
-
-3) Should this be supported for immutable samplers at all, or by a feature
-bit? Some implementations may not be able to support custom border colors on
-immutable samplers -- is it worthwhile enabling this to work on them for
-implementations that can support it, or forbidding it entirely.
-
-*RESOLVED*: Samplers created with a custom border color are forbidden from
-being immutable.
-This resolves concerns for implementations where the custom border color is
-an index to a LUT instead of being directly embedded into sampler state.
-
-4) Should UINT and SINT (unsigned integer and signed integer) border color
-types be separated or should they be combined into one generic INT (integer)
-type?
-
-*RESOLVED*: Separating these does not make much sense as the existing fixed
-border color types do not have this distinction, and there is no reason in
-hardware to do so.
-This separation would also create unnecessary work and considerations for
-the application.
-
-=== Version History
-
-  * Revision 1, 2019-10-10 (Joshua Ashton)
-    - Internal revisions.
-
-  * Revision 2, 2019-10-11 (Liam Middlebrook)
-    - Remove VkCustomBorderColor object and associated functions
-    - Add issues concerning HW limitations for custom border color count
-
-  * Revision 3, 2019-10-12 (Joshua Ashton)
-    - Re-expose the limits for the maximum number of unique border colors
-    - Add extra details about border color tracking
-    - Fix typos
-
-  * Revision 4, 2019-10-12 (Joshua Ashton)
-    - Changed maxUniqueCustomBorderColors to a uint32_t from a VkDeviceSize
-
-  * Revision 5, 2019-10-14 (Liam Middlebrook)
-    - Added features bit
-
-  * Revision 6, 2019-10-15 (Joshua Ashton)
-    - Type-ize VK_BORDER_COLOR_CUSTOM
-    - Fix const-ness on pname:pNext of
-      VkSamplerCustomBorderColorCreateInfoEXT
-
-  * Revision 7, 2019-11-26 (Liam Middlebrook)
-    - Renamed maxUniqueCustomBorderColors to maxCustomBorderColors
-
-  * Revision 8, 2019-11-29 (Joshua Ashton)
-    - Renamed borderColor member of VkSamplerCustomBorderColorCreateInfoEXT
-      to customBorderColor
-
-  * Revision 9, 2020-02-19 (Joshua Ashton)
-    - Renamed maxCustomBorderColors to maxCustomBorderColorSamplers
-
-  * Revision 10, 2020-02-21 (Joshua Ashton)
-    - Added format to VkSamplerCustomBorderColorCreateInfoEXT and feature
-      bit
-
-  * Revision 11, 2020-04-07 (Joshua Ashton)
-    - Dropped UINT/SINT border color differences, consolidated types
-
-  * Revision 12, 2020-04-16 (Joshua Ashton)
-    - Renamed VK_BORDER_COLOR_CUSTOM_FLOAT_EXT to
-      VK_BORDER_COLOR_FLOAT_CUSTOM_EXT for consistency
diff --git a/registry/vulkan/appendices/VK_EXT_debug_marker.txt b/registry/vulkan/appendices/VK_EXT_debug_marker.txt
deleted file mode 100644
index 0e5cc9d..0000000
--- a/registry/vulkan/appendices/VK_EXT_debug_marker.txt
+++ /dev/null
@@ -1,178 +0,0 @@
-// Copyright 2016-2021 The Khronos Group Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-include::{generated}/meta/{refprefix}VK_EXT_debug_marker.txt[]
-
-=== Other Extension Metadata
-
-*Last Modified Date*::
-    2017-01-31
-*IP Status*::
-    No known IP claims.
-*Contributors*::
-  - Baldur Karlsson
-  - Dan Ginsburg, Valve
-  - Jon Ashburn, LunarG
-  - Kyle Spagnoli, NVIDIA
-
-=== Description
-
-The `VK_EXT_debug_marker` extension is a device extension.
-It introduces concepts of object naming and tagging, for better tracking of
-Vulkan objects, as well as additional commands for recording annotations of
-named sections of a workload to aid organization and offline analysis in
-external tools.
-
-include::{generated}/interfaces/VK_EXT_debug_marker.txt[]
-
-=== Examples
-
-*Example 1*
-
-Associate a name with an image, for easier debugging in external tools or
-with validation layers that can print a friendly name when referring to
-objects in error messages.
-
-[source,c++]
-----------------------------------------
-    extern VkDevice device;
-    extern VkImage image;
-
-    // Must call extension functions through a function pointer:
-    PFN_vkDebugMarkerSetObjectNameEXT pfnDebugMarkerSetObjectNameEXT = (PFN_vkDebugMarkerSetObjectNameEXT)vkGetDeviceProcAddr(device, "vkDebugMarkerSetObjectNameEXT");
-
-    // Set a name on the image
-    const VkDebugMarkerObjectNameInfoEXT imageNameInfo =
-    {
-        VK_STRUCTURE_TYPE_DEBUG_MARKER_OBJECT_NAME_INFO_EXT, // sType
-        NULL,                                           // pNext
-        VK_DEBUG_REPORT_OBJECT_TYPE_IMAGE_EXT,          // objectType
-        (uint64_t)image,                                // object
-        "Brick Diffuse Texture",                        // pObjectName
-    };
-
-    pfnDebugMarkerSetObjectNameEXT(device, &imageNameInfo);
-
-    // A subsequent error might print:
-    //   Image 'Brick Diffuse Texture' (0xc0dec0dedeadbeef) is used in a
-    //   command buffer with no memory bound to it.
-----------------------------------------
-
-*Example 2*
-
-Annotating regions of a workload with naming information so that offline
-analysis tools can display a more usable visualisation of the commands
-submitted.
-
-[source,c++]
-----------------------------------------
-    extern VkDevice device;
-    extern VkCommandBuffer commandBuffer;
-
-    // Must call extension functions through a function pointer:
-    PFN_vkCmdDebugMarkerBeginEXT pfnCmdDebugMarkerBeginEXT = (PFN_vkCmdDebugMarkerBeginEXT)vkGetDeviceProcAddr(device, "vkCmdDebugMarkerBeginEXT");
-    PFN_vkCmdDebugMarkerEndEXT pfnCmdDebugMarkerEndEXT = (PFN_vkCmdDebugMarkerEndEXT)vkGetDeviceProcAddr(device, "vkCmdDebugMarkerEndEXT");
-    PFN_vkCmdDebugMarkerInsertEXT pfnCmdDebugMarkerInsertEXT = (PFN_vkCmdDebugMarkerInsertEXT)vkGetDeviceProcAddr(device, "vkCmdDebugMarkerInsertEXT");
-
-    // Describe the area being rendered
-    const VkDebugMarkerMarkerInfoEXT houseMarker =
-    {
-        VK_STRUCTURE_TYPE_DEBUG_MARKER_MARKER_INFO_EXT, // sType
-        NULL,                                           // pNext
-        "Brick House",                                  // pMarkerName
-        { 1.0f, 0.0f, 0.0f, 1.0f },                     // color
-    };
-
-    // Start an annotated group of calls under the 'Brick House' name
-    pfnCmdDebugMarkerBeginEXT(commandBuffer, &houseMarker);
-    {
-        // A mutable structure for each part being rendered
-        VkDebugMarkerMarkerInfoEXT housePartMarker =
-        {
-            VK_STRUCTURE_TYPE_DEBUG_MARKER_MARKER_INFO_EXT, // sType
-            NULL,                                           // pNext
-            NULL,                                           // pMarkerName
-            { 0.0f, 0.0f, 0.0f, 0.0f },                     // color
-        };
-
-        // Set the name and insert the marker
-        housePartMarker.pMarkerName = "Walls";
-        pfnCmdDebugMarkerInsertEXT(commandBuffer, &housePartMarker);
-
-        // Insert the drawcall for the walls
-        vkCmdDrawIndexed(commandBuffer, 1000, 1, 0, 0, 0);
-
-        // Insert a recursive region for two sets of windows
-        housePartMarker.pMarkerName = "Windows";
-        pfnCmdDebugMarkerBeginEXT(commandBuffer, &housePartMarker);
-        {
-            vkCmdDrawIndexed(commandBuffer, 75, 6, 1000, 0, 0);
-            vkCmdDrawIndexed(commandBuffer, 100, 2, 1450, 0, 0);
-        }
-        pfnCmdDebugMarkerEndEXT(commandBuffer);
-
-        housePartMarker.pMarkerName = "Front Door";
-        pfnCmdDebugMarkerInsertEXT(commandBuffer, &housePartMarker);
-
-        vkCmdDrawIndexed(commandBuffer, 350, 1, 1650, 0, 0);
-
-        housePartMarker.pMarkerName = "Roof";
-        pfnCmdDebugMarkerInsertEXT(commandBuffer, &housePartMarker);
-
-        vkCmdDrawIndexed(commandBuffer, 500, 1, 2000, 0, 0);
-    }
-    // End the house annotation started above
-    pfnCmdDebugMarkerEndEXT(commandBuffer);
-----------------------------------------
-
-=== Issues
-
-1) Should the tag or name for an object be specified using the pname:pNext
-parameter in the object's stext:Vk*CreateInfo structure?
-
-*RESOLVED*: No.
-While this fits with other Vulkan patterns and would allow more type safety
-and future proofing against future objects, it has notable downsides.
-In particular passing the name at stext:Vk*CreateInfo time does not allow
-renaming, prevents late binding of naming information, and does not allow
-naming of implicitly created objects such as queues and swapchain images.
-
-2) Should the command annotation functions flink:vkCmdDebugMarkerBeginEXT
-and flink:vkCmdDebugMarkerEndEXT support the ability to specify a color?
-
-*RESOLVED*: Yes.
-The functions have been expanded to take an optional color which can be used
-at will by implementations consuming the command buffer annotations in their
-visualisation.
-
-3) Should the functions added in this extension accept an extensible
-structure as their parameter for a more flexible API, as opposed to direct
-function parameters? If so, which functions?
-
-*RESOLVED*: Yes.
-All functions have been modified to take a structure type with extensible
-pname:pNext pointer, to allow future extensions to add additional annotation
-information in the same commands.
-
-=== Version History
-
- * Revision 1, 2016-02-24 (Baldur Karlsson)
-   - Initial draft, based on LunarG marker spec
-
- * Revision 2, 2016-02-26 (Baldur Karlsson)
-   - Renamed Dbg to DebugMarker in function names
-   - Allow markers in secondary command buffers under certain circumstances
-   - Minor language tweaks and edits
-
- * Revision 3, 2016-04-23 (Baldur Karlsson)
-   - Reorganise spec layout to closer match desired organisation
-   - Added optional color to markers (both regions and inserted labels)
-   - Changed functions to take extensible structs instead of direct function
-     parameters
-
- * Revision 4, 2017-01-31 (Baldur Karlsson)
-   - Added explicit dependency on VK_EXT_debug_report
-   - Moved definition of elink:VkDebugReportObjectTypeEXT to debug report
-     chapter.
-   - Fixed typo in dates in revision history
diff --git a/registry/vulkan/appendices/VK_EXT_debug_report.txt b/registry/vulkan/appendices/VK_EXT_debug_report.txt
deleted file mode 100644
index 8a2e6fd..0000000
--- a/registry/vulkan/appendices/VK_EXT_debug_report.txt
+++ /dev/null
@@ -1,213 +0,0 @@
-// Copyright 2015-2021 The Khronos Group Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-include::{generated}/meta/{refprefix}VK_EXT_debug_report.txt[]
-
-=== Other Extension Metadata
-
-*Last Modified Date*::
-    2020-12-14
-*IP Status*::
-    No known IP claims.
-*Contributors*::
-  - Courtney Goeltzenleuchter, LunarG
-  - Dan Ginsburg, Valve
-  - Jon Ashburn, LunarG
-  - Mark Lobodzinski, LunarG
-
-=== Description
-
-Due to the nature of the Vulkan interface, there is very little error
-information available to the developer and application.
-By enabling optional validation layers and using the `VK_EXT_debug_report`
-extension, developers can: obtain much more detailed feedback on the
-application's use of Vulkan.
-This extension defines a way for layers and the implementation to call back
-to the application for events of interest to the application.
-
-include::{generated}/interfaces/VK_EXT_debug_report.txt[]
-
-=== Examples
-
-`VK_EXT_debug_report` allows an application to register multiple callbacks
-with the validation layers.
-Some callbacks may log the information to a file, others may cause a debug
-break point or other application defined behavior.
-An application can: register callbacks even when no validation layers are
-enabled, but they will only be called for loader and, if implemented, driver
-events.
-
-To capture events that occur while creating or destroying an instance an
-application can: link a slink:VkDebugReportCallbackCreateInfoEXT structure
-to the pname:pNext element of the slink:VkInstanceCreateInfo structure given
-to flink:vkCreateInstance.
-
-Example uses: Create three callback objects.
-One will log errors and warnings to the debug console using Windows
-code:OutputDebugString.
-The second will cause the debugger to break at that callback when an error
-happens and the third will log warnings to stdout.
-[source,c++]
-------------------------------------------------------------------------------
-    VkResult res;
-    VkDebugReportCallbackEXT cb1, cb2, cb3;
-
-    VkDebugReportCallbackCreateInfoEXT callback1 = {
-            VK_STRUCTURE_TYPE_DEBUG_REPORT_CALLBACK_CREATE_INFO_EXT,    // sType
-            NULL,                                                       // pNext
-            VK_DEBUG_REPORT_ERROR_BIT_EXT |                             // flags
-            VK_DEBUG_REPORT_WARNING_BIT_EXT,
-            myOutputDebugString,                                        // pfnCallback
-            NULL                                                        // pUserData
-    };
-    res = vkCreateDebugReportCallbackEXT(instance, &callback1, &cb1);
-    if (res != VK_SUCCESS)
-       /* Do error handling for VK_ERROR_OUT_OF_MEMORY */
-
-    callback.flags = VK_DEBUG_REPORT_ERROR_BIT_EXT;
-    callback.pfnCallback = myDebugBreak;
-    callback.pUserData = NULL;
-    res = vkCreateDebugReportCallbackEXT(instance, &callback, &cb2);
-    if (res != VK_SUCCESS)
-       /* Do error handling for VK_ERROR_OUT_OF_MEMORY */
-
-    VkDebugReportCallbackCreateInfoEXT callback3 = {
-            VK_STRUCTURE_TYPE_DEBUG_REPORT_CALLBACK_CREATE_INFO_EXT,    // sType
-            NULL,                                                       // pNext
-            VK_DEBUG_REPORT_WARNING_BIT_EXT,                            // flags
-            mystdOutLogger,                                             // pfnCallback
-            NULL                                                        // pUserData
-    };
-    res = vkCreateDebugReportCallbackEXT(instance, &callback3, &cb3);
-    if (res != VK_SUCCESS)
-       /* Do error handling for VK_ERROR_OUT_OF_MEMORY */
-
-    ...
-
-    /* remove callbacks when cleaning up */
-    vkDestroyDebugReportCallbackEXT(instance, cb1);
-    vkDestroyDebugReportCallbackEXT(instance, cb2);
-    vkDestroyDebugReportCallbackEXT(instance, cb3);
-------------------------------------------------------------------------------
-
-[NOTE]
-.Note
-====
-In the initial release of the `VK_EXT_debug_report` extension, the token
-ename:VK_STRUCTURE_TYPE_DEBUG_REPORT_CREATE_INFO_EXT was used.
-Starting in version 2 of the extension branch,
-ename:VK_STRUCTURE_TYPE_DEBUG_REPORT_CALLBACK_CREATE_INFO_EXT is used
-instead for consistency with Vulkan naming rules.
-The older enum is still available for backwards compatibility.
-====
-
-[NOTE]
-.Note
-====
-In the initial release of the `VK_EXT_debug_report` extension, the token
-ename:VK_DEBUG_REPORT_OBJECT_TYPE_DEBUG_REPORT_EXT was used.
-Starting in version 8 of the extension branch,
-ename:VK_DEBUG_REPORT_OBJECT_TYPE_DEBUG_REPORT_CALLBACK_EXT_EXT is used
-instead for consistency with Vulkan naming rules.
-The older enum is still available for backwards compatibility.
-====
-
-
-=== Issues
-
-1) What is the hierarchy / seriousness of the message flags? E.g.
-etext:ERROR > etext:WARN > etext:PERF_WARN ...
-
-*RESOLVED*: There is no specific hierarchy.
-Each bit is independent and should be checked via bitwise AND.
-For example:
-
-[source,c++]
-----------------------------------------
-    if (localFlags & VK_DEBUG_REPORT_ERROR_BIT_EXT) {
-        process error message
-    }
-    if (localFlags & VK_DEBUG_REPORT_DEBUG_BIT_EXT) {
-        process debug message
-    }
-----------------------------------------
-
-The validation layers do use them in a hierarchical way (etext:ERROR >
-etext:WARN > etext:PERF, etext:WARN > etext:DEBUG > etext:INFO) and they (at
-least at the time of this writing) only set one bit at a time.
-But it is not a requirement of this extension.
-
-It is possible that a layer may intercept and change, or augment the flags
-with extension values the application's debug report handler may not be
-familiar with, so it is important to treat each flag independently.
-
-2) Should there be a VU requiring
-slink:VkDebugReportCallbackCreateInfoEXT::pname:flags to be non-zero?
-
-*RESOLVED*: It may not be very useful, but we do not need VU statement
-requiring the sname:VkDebugReportCallbackCreateInfoEXT::pname:msgFlags at
-create-time to be non-zero.
-One can imagine that apps may prefer it as it allows them to set the mask as
-desired - including nothing - at runtime without having to check.
-
-3) What is the difference between ename:VK_DEBUG_REPORT_DEBUG_BIT_EXT and
-ename:VK_DEBUG_REPORT_INFORMATION_BIT_EXT?
-
-*RESOLVED*: ename:VK_DEBUG_REPORT_DEBUG_BIT_EXT specifies information that
-could be useful debugging the Vulkan implementation itself.
-
-4) How do you compare handles returned by the debug_report callback to the
-application's handles?
-
-*RESOLVED*: Due to the different nature of dispatchable and nondispatchable
-handles there is no generic way (that we know of) that works for common
-compilers with 32bit, 64bit, C and C++.
-We recommend applications use the same cast that the validation layers use:
-+
-[source,c++]
-----
-reinterpret_cast<uint64_t &>(dispatchableHandle)
-(uint64_t)(nondispatchableHandle)
-----
-+
-This does require that the app treat dispatchable and nondispatchable
-handles differently.
-
-=== Version History
-
- * Revision 1, 2015-05-20 (Courtney Goetzenleuchter)
-   - Initial draft, based on LunarG KHR spec, other KHR specs
-
- * Revision 2, 2016-02-16 (Courtney Goetzenleuchter)
-   - Update usage, documentation
-
- * Revision 3, 2016-06-14 (Courtney Goetzenleuchter)
-   - Update VK_EXT_DEBUG_REPORT_SPEC_VERSION to indicate added support for
-     vkCreateInstance and vkDestroyInstance
-
- * Revision 4, 2016-12-08 (Mark Lobodzinski)
-   - Added Display_KHR, DisplayModeKHR extension objects
-   - Added ObjectTable_NVX, IndirectCommandsLayout_NVX extension objects
-   - Bumped spec revision
-   - Retroactively added version history
-
- * Revision 5, 2017-01-31 (Baldur Karlsson)
-   - Moved definition of elink:VkDebugReportObjectTypeEXT from debug marker
-     chapter
-
- * Revision 6, 2017-01-31 (Baldur Karlsson)
-   - Added VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_UPDATE_TEMPLATE_KHR_EXT
-
- * Revision 7, 2017-04-20 (Courtney Goeltzenleuchter)
-   - Clarify wording and address questions from developers.
-
- * Revision 8, 2017-04-21 (Courtney Goeltzenleuchter)
-   - Remove unused enum VkDebugReportErrorEXT
-
- * Revision 9, 2017-09-12 (Tobias Hector)
-   - Added interactions with Vulkan 1.1
-
- * Revision 10, 2020-12-14 (Courtney Goetzenleuchter)
-   - Add issue 4 discussing matching handles returned by the extension,
-     based on suggestion in public issue 368.
diff --git a/registry/vulkan/appendices/VK_EXT_debug_utils.txt b/registry/vulkan/appendices/VK_EXT_debug_utils.txt
deleted file mode 100644
index 7107167..0000000
--- a/registry/vulkan/appendices/VK_EXT_debug_utils.txt
+++ /dev/null
@@ -1,338 +0,0 @@
-// Copyright 2017-2021 The Khronos Group Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-include::{generated}/meta/{refprefix}VK_EXT_debug_utils.txt[]
-
-=== Other Extension Metadata
-
-*Last Modified Date*::
-    2020-04-03
-*Revision*::
-    2
-*IP Status*::
-    No known IP claims.
-*Dependencies*::
-  - This extension is written against version 1.0 of the Vulkan API.
-  - Requires elink:VkObjectType
-*Contributors*::
-  - Mark Young, LunarG
-  - Baldur Karlsson
-  - Ian Elliott, Google
-  - Courtney Goeltzenleuchter, Google
-  - Karl Schultz, LunarG
-  - Mark Lobodzinski, LunarG
-  - Mike Schuchardt, LunarG
-  - Jaakko Konttinen, AMD
-  - Dan Ginsburg, Valve Software
-  - Rolando Olivares, Epic Games
-  - Dan Baker, Oxide Games
-  - Kyle Spagnoli, NVIDIA
-  - Jon Ashburn, LunarG
-  - Piers Daniell, NVIDIA
-
-=== Description
-
-Due to the nature of the Vulkan interface, there is very little error
-information available to the developer and application.
-By using the `VK_EXT_debug_utils` extension, developers can: obtain more
-information.
-When combined with validation layers, even more detailed feedback on the
-application's use of Vulkan will be provided.
-
-This extension provides the following capabilities:
-
-  - The ability to create a debug messenger which will pass along debug
-    messages to an application supplied callback.
-  - The ability to identify specific Vulkan objects using a name or tag to
-    improve tracking.
-  - The ability to identify specific sections within a sname:VkQueue or
-    sname:VkCommandBuffer using labels to aid organization and offline
-    analysis in external tools.
-
-The main difference between this extension and `apiext:VK_EXT_debug_report`
-and `apiext:VK_EXT_debug_marker` is that those extensions use
-elink:VkDebugReportObjectTypeEXT to identify objects.
-This extension uses the core elink:VkObjectType in place of
-elink:VkDebugReportObjectTypeEXT.
-The primary reason for this move is that no future object type handle
-enumeration values will be added to elink:VkDebugReportObjectTypeEXT since
-the creation of elink:VkObjectType.
-
-In addition, this extension combines the functionality of both
-`apiext:VK_EXT_debug_report` and `apiext:VK_EXT_debug_marker` by allowing
-object name and debug markers (now called labels) to be returned to the
-application's callback function.
-This should assist in clarifying the details of a debug message including:
-what objects are involved and potentially which location within a
-slink:VkQueue or slink:VkCommandBuffer the message occurred.
-
-include::{generated}/interfaces/VK_EXT_debug_utils.txt[]
-
-=== Examples
-
-*Example 1*
-
-`VK_EXT_debug_utils` allows an application to register multiple callbacks
-with any Vulkan component wishing to report debug information.
-Some callbacks may log the information to a file, others may cause a debug
-break point or other application defined behavior.
-An application can: register callbacks even when no validation layers are
-enabled, but they will only be called for loader and, if implemented, driver
-events.
-
-To capture events that occur while creating or destroying an instance an
-application can: link a slink:VkDebugUtilsMessengerCreateInfoEXT structure
-to the pname:pNext element of the slink:VkInstanceCreateInfo structure given
-to flink:vkCreateInstance.
-
-Example uses: Create three callback objects.
-One will log errors and warnings to the debug console using Windows
-code:OutputDebugString.
-The second will cause the debugger to break at that callback when an error
-happens and the third will log warnings to stdout.
-[source,c++]
-------------------------------------------------------------------------------
-    extern VkInstance instance;
-    VkResult res;
-    VkDebugUtilsMessengerEXT cb1, cb2, cb3;
-
-    // Must call extension functions through a function pointer:
-    PFN_vkCreateDebugUtilsMessengerEXT pfnCreateDebugUtilsMessengerEXT = (PFN_vkCreateDebugUtilsMessengerEXT)vkGetInstanceProcAddr(instance, "vkCreateDebugUtilsMessengerEXT");
-    PFN_vkDestroyDebugUtilsMessengerEXT pfnDestroyDebugUtilsMessengerEXT = (PFN_vkDestroyDebugUtilsMessengerEXT)vkGetInstanceProcAddr(instance, "vkDestroyDebugUtilsMessengerEXT");
-
-    VkDebugUtilsMessengerCreateInfoEXT callback1 = {
-            VK_STRUCTURE_TYPE_DEBUG_UTILS_MESSENGER_CREATE_INFO_EXT,  // sType
-            NULL,                                                     // pNext
-            0,                                                        // flags
-            VK_DEBUG_UTILS_MESSAGE_SEVERITY_ERROR_BIT_EXT |           // messageSeverity
-            VK_DEBUG_UTILS_MESSAGE_SEVERITY_WARNING_BIT_EXT,
-            VK_DEBUG_UTILS_MESSAGE_TYPE_GENERAL_BIT_EXT |             // messageType
-            VK_DEBUG_UTILS_MESSAGE_TYPE_VALIDATION_BIT_EXT,
-            myOutputDebugString,                                      // pfnUserCallback
-            NULL                                                      // pUserData
-    };
-    res = pfnCreateDebugUtilsMessengerEXT(instance, &callback1, NULL, &cb1);
-    if (res != VK_SUCCESS) {
-       // Do error handling for VK_ERROR_OUT_OF_MEMORY
-    }
-
-    callback1.messageSeverity = VK_DEBUG_UTILS_MESSAGE_SEVERITY_ERROR_BIT_EXT;
-    callback1.pfnUserCallback = myDebugBreak;
-    callback1.pUserData = NULL;
-    res = pfnCreateDebugUtilsMessengerEXT(instance, &callback1, NULL, &cb2);
-    if (res != VK_SUCCESS) {
-       // Do error handling for VK_ERROR_OUT_OF_MEMORY
-    }
-
-    VkDebugUtilsMessengerCreateInfoEXT callback3 = {
-            VK_STRUCTURE_TYPE_DEBUG_UTILS_MESSENGER_CREATE_INFO_EXT,  // sType
-            NULL,                                                     // pNext
-            0,                                                        // flags
-            VK_DEBUG_UTILS_MESSAGE_SEVERITY_WARNING_BIT_EXT,          // messageSeverity
-            VK_DEBUG_UTILS_MESSAGE_TYPE_GENERAL_BIT_EXT |             // messageType
-            VK_DEBUG_UTILS_MESSAGE_TYPE_VALIDATION_BIT_EXT,
-            mystdOutLogger,                                           // pfnUserCallback
-            NULL                                                      // pUserData
-    };
-    res = pfnCreateDebugUtilsMessengerEXT(instance, &callback3, NULL, &cb3);
-    if (res != VK_SUCCESS) {
-       // Do error handling for VK_ERROR_OUT_OF_MEMORY
-    }
-
-    ...
-
-    // Remove callbacks when cleaning up
-    pfnDestroyDebugUtilsMessengerEXT(instance, cb1, NULL);
-    pfnDestroyDebugUtilsMessengerEXT(instance, cb2, NULL);
-    pfnDestroyDebugUtilsMessengerEXT(instance, cb3, NULL);
-------------------------------------------------------------------------------
-
-*Example 2*
-
-Associate a name with an image, for easier debugging in external tools or
-with validation layers that can print a friendly name when referring to
-objects in error messages.
-
-[source,c++]
-----------------------------------------
-    extern VkInstance instance;
-    extern VkDevice device;
-    extern VkImage image;
-
-    // Must call extension functions through a function pointer:
-    PFN_vkSetDebugUtilsObjectNameEXT pfnSetDebugUtilsObjectNameEXT = (PFN_vkSetDebugUtilsObjectNameEXT)vkGetInstanceProcAddr(instance, "vkSetDebugUtilsObjectNameEXT");
-
-    // Set a name on the image
-    const VkDebugUtilsObjectNameInfoEXT imageNameInfo =
-    {
-        VK_STRUCTURE_TYPE_DEBUG_UTILS_OBJECT_NAME_INFO_EXT, // sType
-        NULL,                                               // pNext
-        VK_OBJECT_TYPE_IMAGE,                               // objectType
-        (uint64_t)image,                                    // objectHandle
-        "Brick Diffuse Texture",                            // pObjectName
-    };
-
-    pfnSetDebugUtilsObjectNameEXT(device, &imageNameInfo);
-
-    // A subsequent error might print:
-    //   Image 'Brick Diffuse Texture' (0xc0dec0dedeadbeef) is used in a
-    //   command buffer with no memory bound to it.
-----------------------------------------
-
-*Example 3*
-
-Annotating regions of a workload with naming information so that offline
-analysis tools can display a more usable visualization of the commands
-submitted.
-
-[source,c++]
-----------------------------------------
-    extern VkInstance instance;
-    extern VkCommandBuffer commandBuffer;
-
-    // Must call extension functions through a function pointer:
-    PFN_vkQueueBeginDebugUtilsLabelEXT pfnQueueBeginDebugUtilsLabelEXT = (PFN_vkQueueBeginDebugUtilsLabelEXT)vkGetInstanceProcAddr(instance, "vkQueueBeginDebugUtilsLabelEXT");
-    PFN_vkQueueEndDebugUtilsLabelEXT pfnQueueEndDebugUtilsLabelEXT = (PFN_vkQueueEndDebugUtilsLabelEXT)vkGetInstanceProcAddr(instance, "vkQueueEndDebugUtilsLabelEXT");
-    PFN_vkCmdBeginDebugUtilsLabelEXT pfnCmdBeginDebugUtilsLabelEXT = (PFN_vkCmdBeginDebugUtilsLabelEXT)vkGetInstanceProcAddr(instance, "vkCmdBeginDebugUtilsLabelEXT");
-    PFN_vkCmdEndDebugUtilsLabelEXT pfnCmdEndDebugUtilsLabelEXT = (PFN_vkCmdEndDebugUtilsLabelEXT)vkGetInstanceProcAddr(instance, "vkCmdEndDebugUtilsLabelEXT");
-    PFN_vkCmdInsertDebugUtilsLabelEXT pfnCmdInsertDebugUtilsLabelEXT = (PFN_vkCmdInsertDebugUtilsLabelEXT)vkGetInstanceProcAddr(instance, "vkCmdInsertDebugUtilsLabelEXT");
-
-    // Describe the area being rendered
-    const VkDebugUtilsLabelEXT houseLabel =
-    {
-        VK_STRUCTURE_TYPE_DEBUG_UTILS_LABEL_EXT, // sType
-        NULL,                                    // pNext
-        "Brick House",                           // pLabelName
-        { 1.0f, 0.0f, 0.0f, 1.0f },              // color
-    };
-
-    // Start an annotated group of calls under the 'Brick House' name
-    pfnCmdBeginDebugUtilsLabelEXT(commandBuffer, &houseLabel);
-    {
-        // A mutable structure for each part being rendered
-        VkDebugUtilsLabelEXT housePartLabel =
-        {
-            VK_STRUCTURE_TYPE_DEBUG_UTILS_LABEL_EXT, // sType
-            NULL,                                    // pNext
-            NULL,                                    // pLabelName
-            { 0.0f, 0.0f, 0.0f, 0.0f },              // color
-        };
-
-        // Set the name and insert the marker
-        housePartLabel.pLabelName = "Walls";
-        pfnCmdInsertDebugUtilsLabelEXT(commandBuffer, &housePartLabel);
-
-        // Insert the drawcall for the walls
-        vkCmdDrawIndexed(commandBuffer, 1000, 1, 0, 0, 0);
-
-        // Insert a recursive region for two sets of windows
-        housePartLabel.pLabelName = "Windows";
-        pfnCmdBeginDebugUtilsLabelEXT(commandBuffer, &housePartLabel);
-        {
-            vkCmdDrawIndexed(commandBuffer, 75, 6, 1000, 0, 0);
-            vkCmdDrawIndexed(commandBuffer, 100, 2, 1450, 0, 0);
-        }
-        pfnCmdEndDebugUtilsLabelEXT(commandBuffer);
-
-        housePartLabel.pLabelName = "Front Door";
-        pfnCmdInsertDebugUtilsLabelEXT(commandBuffer, &housePartLabel);
-
-        vkCmdDrawIndexed(commandBuffer, 350, 1, 1650, 0, 0);
-
-        housePartLabel.pLabelName = "Roof";
-        pfnCmdInsertDebugUtilsLabelEXT(commandBuffer, &housePartLabel);
-
-        vkCmdDrawIndexed(commandBuffer, 500, 1, 2000, 0, 0);
-    }
-    // End the house annotation started above
-    pfnCmdEndDebugUtilsLabelEXT(commandBuffer);
-
-    // Do other work
-
-    vkEndCommandBuffer(commandBuffer);
-
-    // Describe the queue being used
-    const VkDebugUtilsLabelEXT queueLabel =
-    {
-        VK_STRUCTURE_TYPE_DEBUG_UTILS_LABEL_EXT, // sType
-        NULL,                                    // pNext
-        "Main Render Work",                      // pLabelName
-        { 0.0f, 1.0f, 0.0f, 1.0f },              // color
-    };
-
-    // Identify the queue label region
-    pfnQueueBeginDebugUtilsLabelEXT(queue, &queueLabel);
-
-    // Submit the work for the main render thread
-    const VkCommandBuffer cmd_bufs[] = {commandBuffer};
-    VkSubmitInfo submit_info = {.sType = VK_STRUCTURE_TYPE_SUBMIT_INFO,
-                                .pNext = NULL,
-                                .waitSemaphoreCount = 0,
-                                .pWaitSemaphores = NULL,
-                                .pWaitDstStageMask = NULL,
-                                .commandBufferCount = 1,
-                                .pCommandBuffers = cmd_bufs,
-                                .signalSemaphoreCount = 0,
-                                .pSignalSemaphores = NULL};
-    vkQueueSubmit(queue, 1, &submit_info, fence);
-
-    // End the queue label region
-    pfnQueueEndDebugUtilsLabelEXT(queue);
-
-----------------------------------------
-
-=== Issues
-
-1) Should we just name this extension `VK_EXT_debug_report2`
-
-*RESOLVED*: No.
-There is enough additional changes to the structures to break backwards
-compatibility.
-So, a new name was decided that would not indicate any interaction with the
-previous extension.
-
-2) Will validation layers immediately support all the new features.
-
-*RESOLVED*: Not immediately.
-As one can imagine, there is a lot of work involved with converting the
-validation layer logging over to the new functionality.
-Basic logging, as seen in the origin `apiext:VK_EXT_debug_report` extension
-will be made available immediately.
-However, adding the labels and object names will take time.
-Since the priority for Khronos at this time is to continue focusing on Valid
-Usage statements, it may take a while before the new functionality is fully
-exposed.
-
-3) If the validation layers will not expose the new functionality
-immediately, then what is the point of this extension?
-
-*RESOLVED*: We needed a replacement for `apiext:VK_EXT_debug_report` because
-the elink:VkDebugReportObjectTypeEXT enumeration will no longer be updated
-and any new objects will need to be debugged using the new functionality
-provided by this extension.
-
-4) Should this extension be split into two separate parts (1 extension that
-is an instance extension providing the callback functionality, and another
-device extension providing the general debug marker and annotation
-functionality)?
-
-*RESOLVED*: No, the functionality for this extension is too closely related.
-If we did split up the extension, where would the structures and enums live,
-and how would you define that the device behavior in the instance extension
-is really only valid if the device extension is enabled, and the
-functionality is passed in.
-It is cleaner to just define this all as an instance extension, plus it
-allows the application to enable all debug functionality provided with one
-enable string during flink:vkCreateInstance.
-
-=== Version History
-
- * Revision 1, 2017-09-14 (Mark Young and all listed Contributors)
- ** Initial draft, based on `apiext:VK_EXT_debug_report` and
-    `apiext:VK_EXT_debug_marker` in addition to previous feedback supplied
-    from various companies including Valve, Epic, and Oxide games.
- * Revision 2, 2020-04-03 (Mark Young and Piers Daniell)
- ** Updated to allow either `NULL` or an empty string to be passed in for
-    pname:pObjectName in sname:VkDebugUtilsObjectNameInfoEXT, because the
-    loader and various drivers support `NULL` already.
diff --git a/registry/vulkan/appendices/VK_EXT_depth_clip_enable.txt b/registry/vulkan/appendices/VK_EXT_depth_clip_enable.txt
deleted file mode 100644
index c1e9194..0000000
--- a/registry/vulkan/appendices/VK_EXT_depth_clip_enable.txt
+++ /dev/null
@@ -1,35 +0,0 @@
-// Copyright 2018-2021 The Khronos Group Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-include::{generated}/meta/{refprefix}VK_EXT_depth_clip_enable.txt[]
-
-=== Other Extension Metadata
-
-*Last Modified Date*::
-    2018-12-20
-*Contributors*::
-  - Daniel Rakos, AMD
-  - Henri Verbeet, CodeWeavers
-  - Jeff Bolz, NVIDIA
-  - Philip Rebohle, DXVK
-  - Tobias Hector, AMD
-
-=== Description
-
-This extension allows the depth clipping operation, that is normally
-implicitly controlled by
-slink:VkPipelineRasterizationStateCreateInfo::pname:depthClampEnable, to
-instead be controlled explicitly by
-slink:VkPipelineRasterizationDepthClipStateCreateInfoEXT::pname:depthClipEnable.
-
-This is useful for translating DX content which assumes depth clamping is
-always enabled, but depth clip can be controlled by the DepthClipEnable
-rasterization state (D3D12_RASTERIZER_DESC).
-
-include::{generated}/interfaces/VK_EXT_depth_clip_enable.txt[]
-
-=== Version History
-
-  * Revision 1, 2018-12-20 (Piers Daniell)
-    - Internal revisions
diff --git a/registry/vulkan/appendices/VK_EXT_depth_range_unrestricted.txt b/registry/vulkan/appendices/VK_EXT_depth_range_unrestricted.txt
deleted file mode 100644
index eb2a929..0000000
--- a/registry/vulkan/appendices/VK_EXT_depth_range_unrestricted.txt
+++ /dev/null
@@ -1,52 +0,0 @@
-// Copyright 2017-2021 The Khronos Group Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-include::{generated}/meta/{refprefix}VK_EXT_depth_range_unrestricted.txt[]
-
-=== Other Extension Metadata
-
-*Last Modified Date*::
-    2017-06-22
-*Contributors*::
-    - Daniel Koch, NVIDIA
-    - Jeff Bolz, NVIDIA
-
-=== Description
-
-This extension removes the slink:VkViewport pname:minDepth and
-pname:maxDepth restrictions that the values must be between `0.0` and `1.0`,
-inclusive.
-It also removes the same restriction on
-slink:VkPipelineDepthStencilStateCreateInfo pname:minDepthBounds and
-pname:maxDepthBounds.
-Finally it removes the restriction on the pname:depth value in
-slink:VkClearDepthStencilValue.
-
-include::{generated}/interfaces/VK_EXT_depth_range_unrestricted.txt[]
-
-=== Issues
-
-1) How do slink:VkViewport pname:minDepth and pname:maxDepth values outside
-of the `0.0` to `1.0` range interact with
-<<vertexpostproc-clipping,Primitive Clipping>>?
-
-*RESOLVED*: The behavior described in <<vertexpostproc-clipping,Primitive
-Clipping>> still applies.
-If depth clamping is disabled the depth values are still clipped to [eq]#0
-{leq} z~c~ {leq} w~c~# before the viewport transform.
-If depth clamping is enabled the above equation is ignored and the depth
-values are instead clamped to the slink:VkViewport pname:minDepth and
-pname:maxDepth values, which in the case of this extension can be outside of
-the `0.0` to `1.0` range.
-
-2) What happens if a resulting depth fragment is outside of the `0.0` to
-`1.0` range and the depth buffer is fixed-point rather than floating-point?
-
-*RESOLVED*: The supported range of a fixed-point depth buffer is `0.0` to
-`1.0` and depth fragments are clamped to this range.
-
-=== Version History
-
-  * Revision 1, 2017-06-22 (Piers Daniell)
-    - Internal revisions
diff --git a/registry/vulkan/appendices/VK_EXT_descriptor_indexing.txt b/registry/vulkan/appendices/VK_EXT_descriptor_indexing.txt
deleted file mode 100644
index 207ada3..0000000
--- a/registry/vulkan/appendices/VK_EXT_descriptor_indexing.txt
+++ /dev/null
@@ -1,79 +0,0 @@
-// Copyright 2017-2021 The Khronos Group Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-include::{generated}/meta/{refprefix}VK_EXT_descriptor_indexing.txt[]
-
-=== Other Extension Metadata
-
-*Last Modified Date*::
-    2017-10-02
-*Interactions and External Dependencies*::
-  - Promoted to Vulkan 1.2 Core
-*Contributors*::
-  - Jeff Bolz, NVIDIA
-  - Daniel Rakos, AMD
-  - Slawomir Grajewski, Intel
-  - Tobias Hector, Imagination Technologies
-
-=== Description
-
-This extension adds several small features which together enable
-applications to create large descriptor sets containing substantially all of
-their resources, and selecting amongst those resources with dynamic
-(non-uniform) indexes in the shader.
-There are feature enables and SPIR-V capabilities for non-uniform descriptor
-indexing in the shader, and non-uniform indexing in the shader requires use
-of a new code:NonUniformEXT decoration defined in the
-`SPV_EXT_descriptor_indexing` SPIR-V extension.
-There are descriptor set layout binding creation flags enabling several
-features:
-
-  * Descriptors can be updated after they are bound to a command buffer,
-    such that the execution of the command buffer reflects the most recent
-    update to the descriptors.
-  * Descriptors that are not used by any pending command buffers can be
-    updated, which enables writing new descriptors for frame N+1 while frame
-    N is executing.
-  * Relax the requirement that all descriptors in a binding that is
-    "`statically used`" must be valid, such that descriptors that are not
-    accessed by a submission need not be valid and can be updated while that
-    submission is executing.
-  * The final binding in a descriptor set layout can have a variable size
-    (and unsized arrays of resources are allowed in the
-    `GL_EXT_nonuniform_qualifier` and `SPV_EXT_descriptor_indexing`
-    extensions).
-
-Note that it is valid for multiple descriptor arrays in a shader to use the
-same set and binding number, as long as they are all compatible with the
-descriptor type in the pipeline layout.
-This means a single array binding in the descriptor set can serve multiple
-texture dimensionalities, or an array of buffer descriptors can be used with
-multiple different block layouts.
-
-There are new descriptor set layout and descriptor pool creation flags that
-are required to opt in to the update-after-bind functionality, and there are
-separate pname:maxPerStage* and pname:maxDescriptorSet* limits that apply to
-these descriptor set layouts which may: be much higher than the pre-existing
-limits.
-The old limits only count descriptors in non-updateAfterBind descriptor set
-layouts, and the new limits count descriptors in all descriptor set layouts
-in the pipeline layout.
-
-include::{generated}/interfaces/VK_EXT_descriptor_indexing.txt[]
-
-=== Promotion to Vulkan 1.2
-
-Functionality in this extension is included in core Vulkan 1.2, with the EXT
-suffix omitted.
-However, if Vulkan 1.2 is supported and this extension is not, the
-code:descriptorIndexing capability is optional.
-The original type, enum and command names are still available as aliases of
-the core functionality.
-
-=== Version History
-
-  * Revision 1, 2017-07-26 (Jeff Bolz)
-    - Internal revisions
-  * Revision 2, 2017-10-02 (Jeff Bolz)
-    - ???
diff --git a/registry/vulkan/appendices/VK_EXT_device_memory_report.txt b/registry/vulkan/appendices/VK_EXT_device_memory_report.txt
deleted file mode 100644
index 17cdebc..0000000
--- a/registry/vulkan/appendices/VK_EXT_device_memory_report.txt
+++ /dev/null
@@ -1,162 +0,0 @@
-// Copyright 2020-2021 The Khronos Group Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-include::{generated}/meta/{refprefix}VK_EXT_device_memory_report.txt[]
-
-=== Other Extension Metadata
-
-*Last Modified Date*::
-    2021-01-06
-*IP Status*::
-    No known IP claims.
-*Contributors*::
-  - Yiwei Zhang, Google
-  - Jesse Hall, Google
-
-=== Description
-
-This device extension allows registration of device memory event callbacks
-upon device creation, so that applications or middleware can obtain detailed
-information about memory usage and how memory is associated with Vulkan
-objects.
-This extension exposes the actual underlying device memory usage, including
-allocations that are not normally visible to the application, such as memory
-consumed by flink:vkCreateGraphicsPipelines.
-It is intended primarily for use by debug tooling rather than for production
-applications.
-
-include::{generated}/interfaces/VK_EXT_device_memory_report.txt[]
-
-=== Issues
-
-1) Should this be better expressed as an extension to VK_EXT_debug_utils and
-its general-purpose messenger construct?
-
-*RESOLVED*: No.
-The intended lifecycle is quite different.
-We want to make this extension tied to the device's lifecycle.
-Each ICD just handles its own implementation of this extension, and this
-extension will only be directly exposed from the ICD.
-So we can avoid the extra implementation complexity used to accommodate the
-flexibility of `apiext:VK_EXT_debug_utils` extension.
-
-2) Can we extend and use the existing internal allocation callbacks instead
-of adding the new callback structure in this extension?
-
-*RESOLVED*: No.
-Our memory reporting layer that combines this information with other memory
-information it collects directly (e.g. bindings of resources to
-slink:VkDeviceMemory) would have to intercept all entry points that take a
-slink:VkAllocationCallbacks parameter and inject its own
-pname:pfnInternalAllocation and pname:pfnInternalFree.
-That may be doable for the extensions we know about, but not for ones we do
-not.
-The proposal would work fine in the face of most unknown extensions.
-But even for ones we know about, since apps can provide a different set of
-callbacks and userdata and those can be retained by the driver and used
-later (esp.
-for pool object, but not just those), we would have to dynamically allocate
-the interception trampoline every time.
-That is getting to be an unreasonably large amount of complexity and
-(possibly) overhead.
-
-We are interested in both alloc/free and import/unimport.
-The latter is fairly important for tracking (and avoiding double-counting)
-of swapchain images (still true with "`native swapchains`" based on external
-memory) and media/camera interop.
-Though we might be able to handle this with additional
-elink:VkInternalAllocationType values, for import/export we do want to be
-able to tie this to the external resource, which is one thing that the
-pname:memoryObjectId is for.
-
-The internal alloc/free callbacks are not extensible except via new
-elink:VkInternalAllocationType values.
-The slink:VkDeviceMemoryReportCallbackDataEXT in this extension is
-extensible.
-That was deliberate: there is a real possibility we will want to get extra
-information in the future.
-As one example, currently this reports only physical allocations, but we
-believe there are interesting cases for tracking how populated that VA
-region is.
-
-The callbacks are clearly specified as only callable within the context of a
-call from the app into Vulkan.
-We believe there are some cases where drivers can allocate device memory
-asynchronously.
-This was one of the sticky issues that derailed the internal device memory
-allocation reporting design (which is essentially what this extension is
-trying to do) leading up to 1.0.
-
-slink:VkAllocationCallbacks is described in a section called "`Host memory`"
-and the intro to it is very explicitly about host memory.
-The other callbacks are all inherently about host memory.
-But this extension is very focused on device memory.
-
-3) Should the callback be reporting which heap is used?
-
-*RESOLVED*: Yes.
-It is important for non-UMA systems to have all the device memory
-allocations attributed to the corresponding device memory heaps.
-For internally-allocated device memory, pname:heapIndex will always
-correspond to an advertised heap, rather than having a magic value
-indicating a non-advertised heap.
-Drivers can advertise heaps that do not have any corresponding memory types
-if they need to.
-
-4) Should we use an array of callback for the layers to intercept instead of
-chaining multiple of the slink:VkDeviceDeviceMemoryReportCreateInfoEXT
-structures in the pname:pNext of slink:VkDeviceCreateInfo?
-
-*RESOLVED* No.
-The pointer to the slink:VkDeviceDeviceMemoryReportCreateInfoEXT structure
-itself is const and you cannot just cast it away.
-Thus we cannot update the callback array inside the structure.
-In addition, we cannot drop this pname:pNext chain either, so making a copy
-of this whole structure does not work either.
-
-5) Should we track bulk allocations shared among multiple objects?
-
-*RESOLVED* No.
-Take the shader heap as an example.
-Some implementations will let multiple slink:VkPipeline objects share the
-same shader heap.
-We are not asking the implementation to report ename:VK_OBJECT_TYPE_PIPELINE
-along with a dlink:VK_NULL_HANDLE for this bulk allocation.
-Instead, this bulk allocation is considered as a layer below what this
-extension is interested in.
-Later, when the actual slink:VkPipeline objects are created by suballocating
-from the bulk allocation, we ask the implementation to report the valid
-handles of the slink:VkPipeline objects along with the actual suballocated
-sizes and different pname:memoryObjectId.
-
-6) Can we require the callbacks to be always called in the same thread with
-the Vulkan commands?
-
-*RESOLVED* No.
-Some implementations might choose to multiplex work from multiple
-application threads into a single backend thread and perform JIT allocations
-as a part of that flow.
-Since this behavior is theoretically legit, we cannot require the callbacks
-to be always called in the same thread with the Vulkan commands, and the
-note is to remind the applications to handle this case properly.
-
-7) Should we add an additional "`allocation failed`" event type with things
-like size and heap index reported?
-
-*RESOLVED* Yes.
-This fits in well with the callback infrastructure added in this extension,
-and implementation touches the same code and has the same overheads as the
-rest of the extension.
-It could help debugging things like getting an
-ename:VK_ERROR_OUT_OF_HOST_MEMORY error when ending a command buffer.
-Right now the allocation failure could have happened anywhere during
-recording, and a callback would be really useful to understand where and
-why.
-
-=== Version History
-
- * Revision 1, 2020-08-26 (Yiwei Zhang)
-   - Initial version
- * Revision 2, 2021-01-06 (Yiwei Zhang)
-   - Minor description update
diff --git a/registry/vulkan/appendices/VK_EXT_direct_mode_display.txt b/registry/vulkan/appendices/VK_EXT_direct_mode_display.txt
deleted file mode 100644
index d91bd29..0000000
--- a/registry/vulkan/appendices/VK_EXT_direct_mode_display.txt
+++ /dev/null
@@ -1,53 +0,0 @@
-// Copyright 2016-2021 The Khronos Group Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-include::{generated}/meta/{refprefix}VK_EXT_direct_mode_display.txt[]
-
-=== Other Extension Metadata
-
-*Last Modified Date*::
-    2016-12-13
-*IP Status*::
-    No known IP claims.
-*Contributors*::
-  - Pierre Boudier, NVIDIA
-  - James Jones, NVIDIA
-  - Damien Leone, NVIDIA
-  - Pierre-Loup Griffais, Valve
-  - Liam Middlebrook, NVIDIA
-
-=== Description
-
-This is extension, along with related platform extensions, allows
-applications to take exclusive control of displays associated with a native
-windowing system.
-This is especially useful for virtual reality applications that wish to hide
-HMDs (head mounted displays) from the native platform's display management
-system, desktop, and/or other applications.
-
-include::{generated}/interfaces/VK_EXT_direct_mode_display.txt[]
-
-=== Issues
-
-1) Should this extension and its related platform-specific extensions
-leverage `apiext:VK_KHR_display`, or provide separate equivalent interfaces.
-
-*RESOLVED*: Use `apiext:VK_KHR_display` concepts and objects.
-`apiext:VK_KHR_display` can be used to enumerate all displays on the system,
-including those attached to/in use by a window system or native platform,
-but `apiext:VK_KHR_display_swapchain` will fail to create a swapchain on
-in-use displays.
-This extension and its platform-specific children will allow applications to
-grab in-use displays away from window systems and/or native platforms,
-allowing them to be used with `apiext:VK_KHR_display_swapchain`.
-
-2) Are separate calls needed to acquire displays and enable direct mode?
-
-*RESOLVED*: No, these operations happen in one combined command.
-Acquiring a display puts it into direct mode.
-
-=== Version History
-
- * Revision 1, 2016-12-13 (James Jones)
-   - Initial draft
diff --git a/registry/vulkan/appendices/VK_EXT_directfb_surface.txt b/registry/vulkan/appendices/VK_EXT_directfb_surface.txt
deleted file mode 100644
index 45fa147..0000000
--- a/registry/vulkan/appendices/VK_EXT_directfb_surface.txt
+++ /dev/null
@@ -1,29 +0,0 @@
-// Copyright 2014-2021 The Khronos Group, Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-include::{generated}/meta/{refprefix}VK_EXT_directfb_surface.txt[]
-
-=== Other Extension Metadata
-
-*Last Modified Date*::
-    2020-06-16
-*IP Status*::
-    No known IP claims.
-*Contributors*::
-  - Nicolas Caramelli
-
-=== Description
-
-The `VK_EXT_directfb_surface` extension is an instance extension.
-It provides a mechanism to create a slink:VkSurfaceKHR object (defined by
-the `apiext:VK_KHR_surface` extension) that refers to a DirectFB
-code:IDirectFBSurface, as well as a query to determine support for rendering
-via DirectFB.
-
-include::{generated}/interfaces/VK_EXT_directfb_surface.txt[]
-
-=== Version History
-
- * Revision 1, 2020-06-16 (Nicolas Caramelli)
-   - Initial version
diff --git a/registry/vulkan/appendices/VK_EXT_discard_rectangles.txt b/registry/vulkan/appendices/VK_EXT_discard_rectangles.txt
deleted file mode 100644
index 3edbda5..0000000
--- a/registry/vulkan/appendices/VK_EXT_discard_rectangles.txt
+++ /dev/null
@@ -1,46 +0,0 @@
-// Copyright 2016-2021 The Khronos Group Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-include::{generated}/meta/{refprefix}VK_EXT_discard_rectangles.txt[]
-
-=== Other Extension Metadata
-
-*Last Modified Date*::
-    2016-12-22
-*Interactions and External Dependencies*::
-  - Interacts with `apiext:VK_KHR_device_group`
-  - Interacts with Vulkan 1.1
-*Contributors*::
-  - Daniel Koch, NVIDIA
-  - Jeff Bolz, NVIDIA
-
-=== Description
-
-This extension provides additional orthogonally aligned "`discard
-rectangles`" specified in framebuffer-space coordinates that restrict
-rasterization of all points, lines and triangles.
-
-From zero to an implementation-dependent limit (specified by
-pname:maxDiscardRectangles) number of discard rectangles can be operational
-at once.
-When one or more discard rectangles are active, rasterized fragments can
-either survive if the fragment is within any of the operational discard
-rectangles (ename:VK_DISCARD_RECTANGLE_MODE_INCLUSIVE_EXT mode) or be
-rejected if the fragment is within any of the operational discard rectangles
-(ename:VK_DISCARD_RECTANGLE_MODE_EXCLUSIVE_EXT mode).
-
-These discard rectangles operate orthogonally to the existing scissor test
-functionality.
-ifdef::VK_VERSION_1_1,VK_KHR_device_group[]
-The discard rectangles can be different for each physical device in a device
-group by specifying the device mask and setting discard rectangle dynamic
-state.
-endif::VK_VERSION_1_1,VK_KHR_device_group[]
-
-include::{generated}/interfaces/VK_EXT_discard_rectangles.txt[]
-
-=== Version History
-
-  * Revision 1, 2016-12-22 (Piers Daniell)
-    - Internal revisions
diff --git a/registry/vulkan/appendices/VK_EXT_display_control.txt b/registry/vulkan/appendices/VK_EXT_display_control.txt
deleted file mode 100644
index 9b42d10..0000000
--- a/registry/vulkan/appendices/VK_EXT_display_control.txt
+++ /dev/null
@@ -1,58 +0,0 @@
-// Copyright 2016-2021 The Khronos Group Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-include::{generated}/meta/{refprefix}VK_EXT_display_control.txt[]
-
-=== Other Extension Metadata
-
-*Last Modified Date*::
-    2016-12-13
-*IP Status*::
-    No known IP claims.
-*Contributors*::
-  - Pierre Boudier, NVIDIA
-  - James Jones, NVIDIA
-  - Damien Leone, NVIDIA
-  - Pierre-Loup Griffais, Valve
-  - Daniel Vetter, Intel
-
-=== Description
-
-This extension defines a set of utility functions for use with the
-`apiext:VK_KHR_display` and `apiext:VK_KHR_display_swapchain` extensions.
-
-include::{generated}/interfaces/VK_EXT_display_control.txt[]
-
-=== Issues
-
-1) Should this extension add an explicit "`WaitForVsync`" API or a fence
-signaled at vsync that the application can wait on?
-
-*RESOLVED*: A fence.
-A separate API could later be provided that allows exporting the fence to a
-native object that could be inserted into standard run loops on POSIX and
-Windows systems.
-
-2) Should callbacks be added for a vsync event, or in general to monitor
-events in Vulkan?
-
-*RESOLVED*: No, fences should be used.
-Some events are generated by interrupts which are managed in the kernel.
-In order to use a callback provided by the application, drivers would need
-to have the userspace driver spawn threads that would wait on the kernel
-event, and hence the callbacks could be difficult for the application to
-synchronize with its other work given they would arrive on a foreign thread.
-
-3) Should vblank or scanline events be exposed?
-
-*RESOLVED*: Vblank events.
-Scanline events could be added by a separate extension, but the latency of
-processing an interrupt and waking up a userspace event is high enough that
-the accuracy of a scanline event would be rather low.
-Further, per-scanline interrupts are not supported by all hardware.
-
-=== Version History
-
- * Revision 1, 2016-12-13 (James Jones)
-   - Initial draft
diff --git a/registry/vulkan/appendices/VK_EXT_display_surface_counter.txt b/registry/vulkan/appendices/VK_EXT_display_surface_counter.txt
deleted file mode 100644
index 9840b81..0000000
--- a/registry/vulkan/appendices/VK_EXT_display_surface_counter.txt
+++ /dev/null
@@ -1,32 +0,0 @@
-// Copyright 2016-2021 The Khronos Group Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-include::{generated}/meta/{refprefix}VK_EXT_display_surface_counter.txt[]
-
-=== Other Extension Metadata
-
-*Last Modified Date*::
-    2016-12-13
-*IP Status*::
-    No known IP claims.
-*Contributors*::
-  - Pierre Boudier, NVIDIA
-  - James Jones, NVIDIA
-  - Damien Leone, NVIDIA
-  - Pierre-Loup Griffais, Valve
-  - Daniel Vetter, Intel
-
-=== Description
-
-This extension defines a vertical blanking period counter associated with
-display surfaces.
-It provides a mechanism to query support for such a counter from a
-slink:VkSurfaceKHR object.
-
-include::{generated}/interfaces/VK_EXT_display_surface_counter.txt[]
-
-=== Version History
-
- * Revision 1, 2016-12-13 (James Jones)
-   - Initial draft
diff --git a/registry/vulkan/appendices/VK_EXT_extended_dynamic_state.txt b/registry/vulkan/appendices/VK_EXT_extended_dynamic_state.txt
deleted file mode 100644
index f20d0e8..0000000
--- a/registry/vulkan/appendices/VK_EXT_extended_dynamic_state.txt
+++ /dev/null
@@ -1,35 +0,0 @@
-// Copyright 2019-2021 The Khronos Group Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-include::{generated}/meta/{refprefix}VK_EXT_extended_dynamic_state.txt[]
-
-=== Other Extension Metadata
-
-*Last Modified Date*::
-    2019-12-09
-*IP Status*::
-    No known IP claims.
-*Contributors*::
-  - Dan Ginsburg, Valve Corporation
-  - Graeme Leese, Broadcom
-  - Hans-Kristian Arntzen, Valve Corporation
-  - Jan-Harald Fredriksen, Arm Limited
-  - Jason Ekstrand, Intel
-  - Jeff Bolz, NVIDIA
-  - Jesse Hall, Google
-  - Philip Rebohle, Valve Corporation
-  - Stuart Smith, Imagination Technologies
-  - Tobias Hector, AMD
-
-=== Description
-
-This extension adds some more dynamic state to support applications that
-need to reduce the number of pipeline state objects they compile and bind.
-
-include::{generated}/interfaces/VK_EXT_extended_dynamic_state.txt[]
-
-=== Version History
-
- * Revision 1, 2019-12-09 (Piers Daniell)
-   - Internal revisions
diff --git a/registry/vulkan/appendices/VK_EXT_extended_dynamic_state2.txt b/registry/vulkan/appendices/VK_EXT_extended_dynamic_state2.txt
deleted file mode 100755
index fbbfbbd..0000000
--- a/registry/vulkan/appendices/VK_EXT_extended_dynamic_state2.txt
+++ /dev/null
@@ -1,28 +0,0 @@
-// Copyright (c) 2021 The Khronos Group Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-include::{generated}/meta/{refprefix}VK_EXT_extended_dynamic_state2.txt[]
-
-=== Other Extension Metadata
-
-*Last Modified Date*::
-    2021-04-12
-*IP Status*::
-    No known IP claims.
-*Contributors*::
-  - Vikram Kushwaha, NVIDIA
-  - Piers Daniell, NVIDIA
-  - Jeff Bolz, NVIDIA
-
-=== Description
-
-This extension adds some more dynamic state to support applications that
-need to reduce the number of pipeline state objects they compile and bind.
-
-include::{generated}/interfaces/VK_EXT_extended_dynamic_state2.txt[]
-
-=== Version History
-
- * Revision 1, 2021-04-12 (Vikram Kushwaha)
-   - Internal revisions
diff --git a/registry/vulkan/appendices/VK_EXT_external_memory_dma_buf.txt b/registry/vulkan/appendices/VK_EXT_external_memory_dma_buf.txt
deleted file mode 100644
index 440d057..0000000
--- a/registry/vulkan/appendices/VK_EXT_external_memory_dma_buf.txt
+++ /dev/null
@@ -1,59 +0,0 @@
-// Copyright 2017-2021 The Khronos Group Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-include::{generated}/meta/{refprefix}VK_EXT_external_memory_dma_buf.txt[]
-
-=== Other Extension Metadata
-
-*Last Modified Date*::
-    2017-10-10
-*IP Status*::
-    No known IP claims.
-*Contributors*::
-  - Chad Versace, Google
-  - James Jones, NVIDIA
-  - Jason Ekstrand, Intel
-
-=== Description
-
-A code:dma_buf is a type of file descriptor, defined by the Linux kernel,
-that allows sharing memory across kernel device drivers and across
-processes.
-This extension enables applications to import a code:dma_buf as
-slink:VkDeviceMemory, to export slink:VkDeviceMemory as a code:dma_buf, and
-to create slink:VkBuffer objects that can: be bound to that memory.
-
-include::{generated}/interfaces/VK_EXT_external_memory_dma_buf.txt[]
-
-=== Issues
-
-1) How does the application, when creating a slink:VkImage that it intends
-to bind to code:dma_buf slink:VkDeviceMemory containing an externally
-produced image, specify the memory layout (such as row pitch and DRM format
-modifier) of the slink:VkImage? In other words, how does the application
-achieve behavior comparable to that provided by
-https://www.khronos.org/registry/EGL/extensions/EXT/EGL_EXT_image_dma_buf_import.txt[`EGL_EXT_image_dma_buf_import`]
-and
-https://www.khronos.org/registry/EGL/extensions/EXT/EGL_EXT_image_dma_buf_import_modifiers.txt[`EGL_EXT_image_dma_buf_import_modifiers`]
-?
-
-*RESOLVED*: Features comparable to those in
-https://www.khronos.org/registry/EGL/extensions/EXT/EGL_EXT_image_dma_buf_import.txt[`EGL_EXT_image_dma_buf_import`]
-and
-https://www.khronos.org/registry/EGL/extensions/EXT/EGL_EXT_image_dma_buf_import_modifiers.txt[`EGL_EXT_image_dma_buf_import_modifiers`]
-will be provided by an extension layered atop this one.
-
-2) Without the ability to specify the memory layout of external code:dma_buf
-images, how is this extension useful?
-
-*RESOLVED*: This extension provides exactly one new feature: the ability to
-import/export between code:dma_buf and slink:VkDeviceMemory.
-This feature, together with features provided by
-`apiext:VK_KHR_external_memory_fd`, is sufficient to bind a slink:VkBuffer
-to code:dma_buf.
-
-=== Version History
-
-  * Revision 1, 2017-10-10 (Chad Versace)
-    - Squashed internal revisions
diff --git a/registry/vulkan/appendices/VK_EXT_external_memory_host.txt b/registry/vulkan/appendices/VK_EXT_external_memory_host.txt
deleted file mode 100644
index 0c10b38..0000000
--- a/registry/vulkan/appendices/VK_EXT_external_memory_host.txt
+++ /dev/null
@@ -1,91 +0,0 @@
-// Copyright 2017-2021 The Khronos Group Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-include::{generated}/meta/{refprefix}VK_EXT_external_memory_host.txt[]
-
-=== Other Extension Metadata
-
-*Last Modified Date*::
-    2017-11-10
-*IP Status*::
-    No known IP claims.
-*Contributors*::
-  - Jaakko Konttinen, AMD
-  - David Mao, AMD
-  - Daniel Rakos, AMD
-  - Tobias Hector, Imagination Technologies
-  - Jason Ekstrand, Intel
-  - James Jones, NVIDIA
-
-=== Description
-
-This extension enables an application to import host allocations and host
-mapped foreign device memory to Vulkan memory objects.
-
-include::{generated}/interfaces/VK_EXT_external_memory_host.txt[]
-
-=== Issues
-
-1) What memory type has to be used to import host pointers?
-
-*RESOLVED*: Depends on the implementation.
-Applications have to use the new flink:vkGetMemoryHostPointerPropertiesEXT
-command to query the supported memory types for a particular host pointer.
-The reported memory types may include memory types that come from a memory
-heap that is otherwise not usable for regular memory object allocation and
-thus such a heap's size may be zero.
-
-2) Can the application still access the contents of the host allocation
-after importing?
-
-*RESOLVED*: Yes.
-However, usual synchronization requirements apply.
-
-3) Can the application free the host allocation?
-
-*RESOLVED*: No, it violates valid usage conditions.
-Using the memory object imported from a host allocation that is already
-freed thus results in undefined: behavior.
-
-4) Is flink:vkMapMemory expected to return the same host address which was
-specified when importing it to the memory object?
-
-*RESOLVED*: No.
-Implementations are allowed to return the same address but it is not
-required.
-Some implementations might return a different virtual mapping of the
-allocation, although the same physical pages will be used.
-
-5) Is there any limitation on the alignment of the host pointer and/or size?
-
-*RESOLVED*: Yes.
-Both the address and the size have to be an integer multiple of
-pname:minImportedHostPointerAlignment.
-In addition, some platforms and foreign devices may have additional
-restrictions.
-
-6) Can the same host allocation be imported multiple times into a given
-physical device?
-
-*RESOLVED*: No, at least not guaranteed by this extension.
-Some platforms do not allow locking the same physical pages for device
-access multiple times, so attempting to do it may result in undefined:
-behavior.
-
-7) Does this extension support exporting the new handle type?
-
-*RESOLVED*: No.
-
-8) Should we include the possibility to import host mapped foreign device
-memory using this API?
-
-*RESOLVED*: Yes, through a separate handle type.
-Implementations are still allowed to support only one of the handle types
-introduced by this extension by not returning import support for a
-particular handle type as returned in slink:VkExternalMemoryPropertiesKHR.
-
-=== Version History
-
- * Revision 1, 2017-11-10 (Daniel Rakos)
-   - Internal revisions
diff --git a/registry/vulkan/appendices/VK_EXT_filter_cubic.txt b/registry/vulkan/appendices/VK_EXT_filter_cubic.txt
deleted file mode 100644
index 4fe1e1c..0000000
--- a/registry/vulkan/appendices/VK_EXT_filter_cubic.txt
+++ /dev/null
@@ -1,43 +0,0 @@
-// Copyright 2019-2021 The Khronos Group Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-include::{generated}/meta/{refprefix}VK_EXT_filter_cubic.txt[]
-
-=== Other Extension Metadata
-
-*Last Modified Date*::
-    2019-12-13
-*Contributors*::
-  - Bill Licea-Kane, Qualcomm Technologies, Inc.
-  - Andrew Garrard, Samsung
-  - Daniel Koch, NVIDIA
-  - Donald Scorgie, Imagination Technologies
-  - Graeme Leese, Broadcom
-  - Jan-Herald Fredericksen, ARM
-  - Jeff Leger, Qualcomm Technologies, Inc.
-  - Tobias Hector, AMD
-  - Tom Olson, ARM
-  - Stuart Smith, Imagination Technologies
-
-=== Description
-
-`VK_EXT_filter_cubic` extends `VK_IMG_filter_cubic`.
-
-It documents cubic filtering of other image view types.
-It adds new structures that can: be added to the pname:pNext chain of
-slink:VkPhysicalDeviceImageFormatInfo2 and slink:VkImageFormatProperties2
-that can: be used to determine which image types and which image view types
-support cubic filtering.
-
-include::{generated}/interfaces/VK_EXT_filter_cubic.txt[]
-
-=== Version History
-
- * Revision 3, 2019-12-13 (wwlk)
-   - Delete requirement to cubic filter the formats USCALED_PACKED32,
-     SSCALED_PACKED32, UINT_PACK32, and SINT_PACK32 (cut/paste error)
- * Revision 2, 2019-06-05 (wwlk)
-   - Clarify 1D optional
- * Revision 1, 2019-01-24 (wwlk)
-   - Initial version
diff --git a/registry/vulkan/appendices/VK_EXT_fragment_density_map.txt b/registry/vulkan/appendices/VK_EXT_fragment_density_map.txt
deleted file mode 100644
index 3501470..0000000
--- a/registry/vulkan/appendices/VK_EXT_fragment_density_map.txt
+++ /dev/null
@@ -1,54 +0,0 @@
-// Copyright 2018-2021 The Khronos Group Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-include::{generated}/meta/{refprefix}VK_EXT_fragment_density_map.txt[]
-
-=== Other Extension Metadata
-
-*Last Modified Date*::
-    2021-09-30
-*Interactions and External Dependencies*::
-  - This extension requires
-    {spirv}/EXT/SPV_EXT_fragment_invocation_density.html[`SPV_EXT_fragment_invocation_density`]
-*Contributors*::
-  - Matthew Netsch, Qualcomm Technologies, Inc.
-  - Robert VanReenen, Qualcomm Technologies, Inc.
-  - Jonathan Wicks, Qualcomm Technologies, Inc.
-  - Tate Hornbeck, Qualcomm Technologies, Inc.
-  - Sam Holmes, Qualcomm Technologies, Inc.
-  - Jeff Leger, Qualcomm Technologies, Inc.
-  - Jan-Harald Fredriksen, ARM
-  - Jeff Bolz, NVIDIA
-  - Pat Brown, NVIDIA
-  - Daniel Rakos, AMD
-  - Piers Daniell, NVIDIA
-
-=== Description
-
-This extension allows an application to specify areas of the render target
-where the fragment shader may be invoked fewer times.
-These fragments are broadcasted out to multiple pixels to cover the render
-target.
-
-The primary use of this extension is to reduce workloads in areas where
-lower quality may not be perceived such as the distorted edges of a lens or
-the periphery of a user's gaze.
-
-include::{generated}/interfaces/VK_EXT_fragment_density_map.txt[]
-
-=== New or Modified Built-In Variables
-
-  * <<interfaces-builtin-variables-fraginvocationcount,code:FragInvocationCountEXT>>
-  * <<interfaces-builtin-variables-fragsize,code:FragSizeEXT>>
-
-=== New SPIR-V Capabilities
-
-  * <<spirvenv-capabilities-table-FragmentDensityEXT,FragmentDensityEXT>>
-
-=== Version History
-
-  * Revision 1, 2018-09-25 (Matthew Netsch)
-    - Initial version
-  * Revision 2, 2021-09-30 (Jon Leech)
-    - Add interaction with `apiext:VK_KHR_format_feature_flags2` to `vk.xml`
diff --git a/registry/vulkan/appendices/VK_EXT_fragment_density_map2.txt b/registry/vulkan/appendices/VK_EXT_fragment_density_map2.txt
deleted file mode 100644
index 03caa38..0000000
--- a/registry/vulkan/appendices/VK_EXT_fragment_density_map2.txt
+++ /dev/null
@@ -1,95 +0,0 @@
-// Copyright 2020-2021 The Khronos Group Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-include::{generated}/meta/{refprefix}VK_EXT_fragment_density_map2.txt[]
-
-=== Other Extension Metadata
-
-*Last Modified Date*::
-    2020-06-16
-*Interactions and External Dependencies*::
-  - Interacts with Vulkan 1.1
-*Contributors*::
-  - Matthew Netsch, Qualcomm Technologies, Inc.
-  - Jonathan Tinkham, Qualcomm Technologies, Inc.
-  - Jonathan Wicks, Qualcomm Technologies, Inc.
-  - Jan-Harald Fredriksen, ARM
-
-=== Description
-
-This extension adds additional features and properties to
-`apiext:VK_EXT_fragment_density_map` in order to reduce fragment density map
-host latency as well as improved queries for subsampled sampler
-implementation-dependent behavior.
-
-include::{generated}/interfaces/VK_EXT_fragment_density_map.txt[]
-
-=== Version History
-
- * Revision 1, 2020-06-16 (Matthew Netsch)
-   - Initial version
-
-ifdef::isrefpage[]
-=== Examples
-
-==== Additional limits for subsampling
-
-Some implementations may not support subsampled samplers if certain
-implementation limits are not observed by the app.
-slink:VkPhysicalDeviceFragmentDensityMap2PropertiesEXT provides additional
-limits to require apps remain within these boundaries if they wish to use
-subsampling.
-
-==== Improved host latency
-
-By default, the fragment density map is locked by the host for reading
-between flink:vkCmdBeginRenderPass during recording and
-ename:VK_PIPELINE_STAGE_FRAGMENT_DENSITY_PROCESS_BIT_EXT during draw
-execution.
-
-This can introduce large latency for certain use cases between recording the
-frame and displaying the frame.
-Apps may wish to modify the fragment density map just before draw execution.
-
-ename:VK_IMAGE_VIEW_CREATE_FRAGMENT_DENSITY_MAP_DEFERRED_BIT_EXT is intended
-to help address this for implementations that do not support the
-<<features-fragmentdensitymapdynamic,fragmentDensityMapDynamic>> feature by
-deferring the start of the locked range to flink:vkEndCommandBuffer.
-
-
-[source,c++]
-----------------------------------------
-// Create view for fragment density map
-VkImageViewCreateInfo createInfo =
-{
-   ​VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO,
-   // ...
-   VK_IMAGE_VIEW_CREATE_FRAGMENT_DENSITY_MAP_DEFERRED_BIT_EXT,
-   fdmImage, // Created with VK_IMAGE_USAGE_FRAGMENT_DENSITY_MAP_BIT_EXT
-   // ...
-};
-
-// ...
-
-// Begin fragment density map render pass with deferred view.
-// By default, fdmImage must not be modified after this call
-// unless view is created with the FDM dynamic or deferred flags.
-vkCmdBeginRenderPass(commandBuffer, pRenderPassBegin, contents);
-
-// ...
-
-vkCmdEndRenderPass(VkCommandBuffer commandBuffer);
-
-// Can keep making modifications to deferred fragment density maps
-// while recording commandBuffer ...
-
-result = vkEndCommandBuffer(commandBuffer);
-
-// Must now freeze modifying fdmImage until after the
-// VK_PIPELINE_STAGE_FRAGMENT_DENSITY_PROCESS_BIT_EXT of
-// the last executing draw that uses the fdmImage in the
-// last submit of commandBuffer.
-
-----------------------------------------
-endif::isrefpage[]
diff --git a/registry/vulkan/appendices/VK_EXT_fragment_shader_interlock.txt b/registry/vulkan/appendices/VK_EXT_fragment_shader_interlock.txt
deleted file mode 100644
index b2adc6a..0000000
--- a/registry/vulkan/appendices/VK_EXT_fragment_shader_interlock.txt
+++ /dev/null
@@ -1,60 +0,0 @@
-// Copyright 2019-2021 The Khronos Group Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-include::{generated}/meta/{refprefix}VK_EXT_fragment_shader_interlock.txt[]
-
-=== Other Extension Metadata
-
-*Last Modified Date*::
-    2019-05-02
-*Interactions and External Dependencies*::
-  - This extension requires
-    {spirv}/EXT/SPV_EXT_fragment_shader_interlock.html[`SPV_EXT_fragment_shader_interlock`]
-  - This extension provides API support for
-    https://www.khronos.org/registry/OpenGL/extensions/ARB/ARB_fragment_shader_interlock.txt[`GL_ARB_fragment_shader_interlock`]
-*Contributors*::
-  - Daniel Koch, NVIDIA
-  - Graeme Leese, Broadcom
-  - Jan-Harald Fredriksen, Arm
-  - Jason Ekstrand, Intel
-  - Jeff Bolz, NVIDIA
-  - Ruihao Zhang, Qualcomm
-  - Slawomir Grajewski, Intel
-  - Spencer Fricke, Samsung
-
-=== Description
-
-This extension adds support for the code:FragmentShaderPixelInterlockEXT,
-code:FragmentShaderSampleInterlockEXT, and
-code:FragmentShaderShadingRateInterlockEXT capabilities from the
-`SPV_EXT_fragment_shader_interlock` extension to Vulkan.
-
-Enabling these capabilities provides a critical section for fragment shaders
-to avoid overlapping pixels being processed at the same time, and certain
-guarantees about the ordering of fragment shader invocations of fragments of
-overlapping pixels.
-
-This extension can be useful for algorithms that need to access per-pixel
-data structures via shader loads and stores.
-Algorithms using this extension can access per-pixel data structures in
-critical sections without other invocations accessing the same per-pixel
-data.
-Additionally, the ordering guarantees are useful for cases where the API
-ordering of fragments is meaningful.
-For example, applications may be able to execute programmable blending
-operations in the fragment shader, where the destination buffer is read via
-image loads and the final value is written via image stores.
-
-include::{generated}/interfaces/VK_EXT_fragment_shader_interlock.txt[]
-
-=== New SPIR-V Capabilities
-
-  * <<spirvenv-capabilities-table-FragmentShaderSampleInterlockEXT,FragmentShaderInterlockEXT>>
-  * <<spirvenv-capabilities-table-FragmentShaderPixelInterlockEXT,FragmentShaderPixelInterlockEXT>>
-  * <<spirvenv-capabilities-table-FragmentShaderShadingRateInterlockEXT,FragmentShaderShadingRateInterlockEXT>>
-
-=== Version History
-
-  * Revision 1, 2019-05-24 (Piers Daniell)
-    - Internal revisions
diff --git a/registry/vulkan/appendices/VK_EXT_full_screen_exclusive.txt b/registry/vulkan/appendices/VK_EXT_full_screen_exclusive.txt
deleted file mode 100644
index d0333f6..0000000
--- a/registry/vulkan/appendices/VK_EXT_full_screen_exclusive.txt
+++ /dev/null
@@ -1,117 +0,0 @@
-// Copyright 2018-2021 The Khronos Group, Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-include::{generated}/meta/{refprefix}VK_EXT_full_screen_exclusive.txt[]
-
-=== Other Extension Metadata
-
-*Last Modified Date*::
-    2019-03-12
-*IP Status*::
-    No known IP claims.
-*Interactions and External Dependencies*::
-  - Interacts with Vulkan 1.1
-  - Interacts with `apiext:VK_KHR_device_group`
-  - Interacts with `apiext:VK_KHR_win32_surface`
-*Contributors*::
-  - Hans-Kristian Arntzen, ARM
-  - Slawomir Grajewski, Intel
-  - Tobias Hector, AMD
-  - James Jones, NVIDIA
-  - Daniel Rakos, AMD
-  - Jeff Juliano, NVIDIA
-  - Joshua Schnarr, NVIDIA
-  - Aaron Hagan, AMD
-
-=== Description
-
-This extension allows applications to set the policy for swapchain creation
-and presentation mechanisms relating to full-screen access.
-Implementations may be able to acquire exclusive access to a particular
-display for an application window that covers the whole screen.
-This can increase performance on some systems by bypassing composition,
-however it can also result in disruptive or expensive transitions in the
-underlying windowing system when a change occurs.
-
-Applications can choose between explicitly disallowing or allowing this
-behavior, letting the implementation decide, or managing this mode of
-operation directly using the new flink:vkAcquireFullScreenExclusiveModeEXT
-and flink:vkReleaseFullScreenExclusiveModeEXT commands.
-
-include::{generated}/interfaces/VK_EXT_full_screen_exclusive.txt[]
-
-=== Issues
-
-1) What should the extension & flag be called?
-
-*RESOLVED*: VK_EXT_full_screen_exclusive.
-
-Other options considered (prior to the app-controlled mode) were:
-
-  * VK_EXT_smooth_fullscreen_transition
-  * VK_EXT_fullscreen_behavior
-  * VK_EXT_fullscreen_preference
-  * VK_EXT_fullscreen_hint
-  * VK_EXT_fast_fullscreen_transition
-  * VK_EXT_avoid_fullscreen_exclusive
-
-2) Do we need more than a boolean toggle?
-
-*RESOLVED*: Yes.
-
-Using an enum with default/allowed/disallowed/app-controlled enables
-applications to accept driver default behavior, specifically override it in
-either direction without implying the driver is ever required to use
-full-screen exclusive mechanisms, or manage this mode explicitly.
-
-3) Should this be a KHR or EXT extension?
-
-*RESOLVED*: EXT, in order to allow it to be shipped faster.
-
-4) Can the fullscreen hint affect the surface capabilities, and if so,
-should the hint also be specified as input when querying the surface
-capabilities?
-
-*RESOLVED*: Yes on both accounts.
-
-While the hint does not guarantee a particular fullscreen mode will be used
-when the swapchain is created, it can sometimes imply particular modes will
-NOT be used.
-If the driver determines that it will opt-out of using a particular mode
-based on the policy, and knows it can only support certain capabilities if
-that mode is used, it would be confusing at best to the application to
-report those capabilities in such cases.
-Not allowing implementations to report this state to applications could
-result in situations where applications are unable to determine why
-swapchain creation fails when they specify certain hint values, which could
-result in never- terminating surface creation loops.
-
-5) Should full-screen be one word or two?
-
-*RESOLVED*: Two words.
-
-"Fullscreen" is not in my dictionary, and web searches did not turn up
-definitive proof that it is a colloquially accepted compound word.
-Documentation for the corresponding Windows API mechanisms dithers.
-The text consistently uses a hyphen, but none-the-less, there is a
-SetFullscreenState method in the DXGI swapchain object.
-Given this inconclusive external guidance, it is best to adhere to the
-Vulkan style guidelines and avoid inventing new compound words.
-
-=== Version History
-
- * Revision 4, 2019-03-12 (Tobias Hector)
-   - Added application-controlled mode, and related functions
-   - Tidied up appendix
-
- * Revision 3, 2019-01-03 (James Jones)
-   - Renamed to VK_EXT_full_screen_exclusive
-   - Made related adjustments to the tri-state enumerant names.
-
- * Revision 2, 2018-11-27 (James Jones)
-   - Renamed to VK_KHR_fullscreen_behavior
-   - Switched from boolean flag to tri-state enum
-
- * Revision 1, 2018-11-06 (James Jones)
-   - Internal revision
diff --git a/registry/vulkan/appendices/VK_EXT_global_priority.txt b/registry/vulkan/appendices/VK_EXT_global_priority.txt
deleted file mode 100644
index 1a0feba..0000000
--- a/registry/vulkan/appendices/VK_EXT_global_priority.txt
+++ /dev/null
@@ -1,57 +0,0 @@
-// Copyright 2017-2021 The Khronos Group Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-include::{generated}/meta/{refprefix}VK_EXT_global_priority.txt[]
-
-=== Other Extension Metadata
-
-*Last Modified Date*::
-     2017-10-06
-*IP Status*::
-    No known IP claims.
-*Contributors*::
-  - Andres Rodriguez, Valve
-  - Pierre-Loup Griffais, Valve
-  - Dan Ginsburg, Valve
-  - Mitch Singer, AMD
-
-=== Description
-
-In Vulkan, users can specify device-scope queue priorities.
-In some cases it may be useful to extend this concept to a system-wide
-scope.
-This extension provides a mechanism for callers to set their system-wide
-priority.
-The default queue priority is ename:VK_QUEUE_GLOBAL_PRIORITY_MEDIUM_EXT.
-
-The driver implementation will attempt to skew hardware resource allocation
-in favour of the higher-priority task.
-Therefore, higher-priority work may retain similar latency and throughput
-characteristics even if the system is congested with lower priority work.
-
-The global priority level of a queue shall take precedence over the
-per-process queue priority
-(sname:VkDeviceQueueCreateInfo::pname:pQueuePriorities).
-
-Abuse of this feature may result in starving the rest of the system from
-hardware resources.
-Therefore, the driver implementation may deny requests to acquire a priority
-above the default priority (ename:VK_QUEUE_GLOBAL_PRIORITY_MEDIUM_EXT) if
-the caller does not have sufficient privileges.
-In this scenario ename:VK_ERROR_NOT_PERMITTED_EXT is returned.
-
-The driver implementation may fail the queue allocation request if resources
-required to complete the operation have been exhausted (either by the same
-process or a different process).
-In this scenario ename:VK_ERROR_INITIALIZATION_FAILED is returned.
-
-include::{generated}/interfaces/VK_EXT_global_priority.txt[]
-
-=== Version History
-
- * Revision 2, 2017-11-03 (Andres Rodriguez)
-   - Fixed VkQueueGlobalPriorityEXT missing _EXT suffix
-
- * Revision 1, 2017-10-06 (Andres Rodriguez)
-   - First version.
diff --git a/registry/vulkan/appendices/VK_EXT_global_priority_query.txt b/registry/vulkan/appendices/VK_EXT_global_priority_query.txt
deleted file mode 100644
index 8c0fc2e..0000000
--- a/registry/vulkan/appendices/VK_EXT_global_priority_query.txt
+++ /dev/null
@@ -1,53 +0,0 @@
-// Copyright (c) 2021 The Khronos Group Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-include::{generated}/meta/{refprefix}VK_EXT_global_priority_query.txt[]
-
-=== Other Extension Metadata
-
-*Last Modified Date*::
-    2021-03-29
-*IP Status*::
-    No known IP claims.
-*Contributors*::
-  - Yiwei Zhang, Google
-
-=== Description
-
-This device extension allows applications to query the global queue
-priorities supported by a queue family.
-It allows implementations to report which global priority levels are treated
-differently by the implementation, instead of silently mapping multiple
-requested global priority levels to the same internal priority, or using
-device creation failure to signal that a requested priority is not
-supported.
-It is intended primarily for use by system integration along with certain
-platform-specific priority enforcement rules.
-
-include::{generated}/interfaces/VK_EXT_global_priority_query.txt[]
-
-=== Issues
-
-1) Can we additionally query whether a caller is permitted to acquire a
-specific global queue priority in this extension?
-
-*RESOLVED*: No.
-Whether a caller has enough privilege goes with the OS, and the Vulkan
-driver cannot really guarantee that the privilege will not change in between
-this query and the actual queue creation call.
-
-2) If more than 1 queue using global priority is requested, is there a good
-way to know which queue is failing the device creation?
-
-*RESOLVED*: No.
-There is not a good way at this moment, and it is also not quite actionable
-for the applications to know that because the information may not be
-accurate.
-Queue creation can fail because of runtime constraints like insufficient
-privilege or lack of resource, and the failure is not necessarily tied to
-that particular queue configuration requested.
-
-=== Version History
-
- * Revision 1, 2021-03-29 (Yiwei Zhang)
diff --git a/registry/vulkan/appendices/VK_EXT_hdr_metadata.txt b/registry/vulkan/appendices/VK_EXT_hdr_metadata.txt
deleted file mode 100644
index 60865bf..0000000
--- a/registry/vulkan/appendices/VK_EXT_hdr_metadata.txt
+++ /dev/null
@@ -1,59 +0,0 @@
-// Copyright 2016-2021 The Khronos Group Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-include::{generated}/meta/{refprefix}VK_EXT_hdr_metadata.txt[]
-
-=== Other Extension Metadata
-
-*Last Modified Date*::
-    2018-12-19
-*IP Status*::
-    No known IP claims.
-*Contributors*::
-  - Courtney Goeltzenleuchter, Google
-
-=== Description
-
-This extension defines two new structures and a function to assign SMPTE
-(the Society of Motion Picture and Television Engineers) 2086 metadata and
-CTA (Consumer Technology Association) 861.3 metadata to a swapchain.
-The metadata includes the color primaries, white point, and luminance range
-of the reference monitor, which all together define the color volume that
-contains all the possible colors the reference monitor can produce.
-The reference monitor is the display where creative work is done and
-creative intent is established.
-To preserve such creative intent as much as possible and achieve consistent
-color reproduction on different viewing displays, it is useful for the
-display pipeline to know the color volume of the original reference monitor
-where content was created or tuned.
-This avoids performing unnecessary mapping of colors that are not
-displayable on the original reference monitor.
-The metadata also includes the pname:maxContentLightLevel and
-pname:maxFrameAverageLightLevel as defined by CTA 861.3.
-
-While the general purpose of the metadata is to assist in the transformation
-between different color volumes of different displays and help achieve
-better color reproduction, it is not in the scope of this extension to
-define how exactly the metadata should be used in such a process.
-It is up to the implementation to determine how to make use of the metadata.
-
-include::{generated}/interfaces/VK_EXT_hdr_metadata.txt[]
-
-=== Issues
-
-1) Do we need a query function?
-
-*PROPOSED*: No, Vulkan does not provide queries for state that the
-application can track on its own.
-
-2) Should we specify default if not specified by the application?
-
-*PROPOSED*: No, that leaves the default up to the display.
-
-=== Version History
-
-  * Revision 1, 2016-12-27 (Courtney Goeltzenleuchter)
-    - Initial version
-  * Revision 2, 2018-12-19 (Courtney Goeltzenleuchter)
-    - Correct implicit validity for VkHdrMetadataEXT structure
diff --git a/registry/vulkan/appendices/VK_EXT_headless_surface.txt b/registry/vulkan/appendices/VK_EXT_headless_surface.txt
deleted file mode 100644
index 05d57d8..0000000
--- a/registry/vulkan/appendices/VK_EXT_headless_surface.txt
+++ /dev/null
@@ -1,43 +0,0 @@
-// Copyright 2017-2021 The Khronos Group, Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-include::{generated}/meta/{refprefix}VK_EXT_headless_surface.txt[]
-
-=== Other Extension Metadata
-
-*Last Modified Date*::
-    2019-03-21
-*IP Status*::
-    No known IP claims.
-*Contributors*::
-  - Ray Smith, Arm
-
-=== Description
-
-The `VK_EXT_headless_surface` extension is an instance extension.
-It provides a mechanism to create slink:VkSurfaceKHR objects independently
-of any window system or display device.
-The presentation operation for a swapchain created from a headless surface
-is by default a no-op, resulting in no externally-visible result.
-
-Because there is no real presentation target, future extensions can layer on
-top of the headless surface to introduce arbitrary or customisable sets of
-restrictions or features.
-These could include features like saving to a file or restrictions to
-emulate a particular presentation target.
-
-This functionality is expected to be useful for application and driver
-development because it allows any platform to expose an arbitrary or
-customisable set of restrictions and features of a presentation engine.
-This makes it a useful portable test target for applications targeting a
-wide range of presentation engines where the actual target presentation
-engines might be scarce, unavailable or otherwise undesirable or
-inconvenient to use for general Vulkan application development.
-
-include::{generated}/interfaces/VK_EXT_headless_surface.txt[]
-
-=== Version History
-
- * Revision 1, 2019-03-21 (Ray Smith)
-   - Initial draft
diff --git a/registry/vulkan/appendices/VK_EXT_host_query_reset.txt b/registry/vulkan/appendices/VK_EXT_host_query_reset.txt
deleted file mode 100644
index 5a99a36..0000000
--- a/registry/vulkan/appendices/VK_EXT_host_query_reset.txt
+++ /dev/null
@@ -1,37 +0,0 @@
-// Copyright 2019-2021 The Khronos Group Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-include::{generated}/meta/{refprefix}VK_EXT_host_query_reset.txt[]
-
-=== Other Extension Metadata
-
-*Last Modified Date*::
-    2019-03-06
-*IP Status*::
-    No known IP claims.
-*Interactions and External Dependencies*::
-  - Promoted to Vulkan 1.2 Core
-*Contributors*::
-  - Bas Nieuwenhuizen, Google
-  - Jason Ekstrand, Intel
-  - Jeff Bolz, NVIDIA
-  - Piers Daniell, NVIDIA
-
-=== Description
-
-This extension adds a new function to reset queries from the host.
-
-=== Promotion to Vulkan 1.2
-
-All functionality in this extension is included in core Vulkan 1.2, with the
-EXT suffix omitted.
-The original type, enum and command names are still available as aliases of
-the core functionality.
-
-include::{generated}/interfaces/VK_EXT_host_query_reset.txt[]
-
-=== Version History
-
-  * Revision 1, 2019-03-12 (Bas Nieuwenhuizen)
-    - Initial draft
diff --git a/registry/vulkan/appendices/VK_EXT_image_drm_format_modifier.txt b/registry/vulkan/appendices/VK_EXT_image_drm_format_modifier.txt
deleted file mode 100644
index b33195e..0000000
--- a/registry/vulkan/appendices/VK_EXT_image_drm_format_modifier.txt
+++ /dev/null
@@ -1,411 +0,0 @@
-// Copyright 2018-2021 The Khronos Group, Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-include::{generated}/meta/{refprefix}VK_EXT_image_drm_format_modifier.txt[]
-
-=== Other Extension Metadata
-
-*Last Modified Date*::
-    2021-09-30
-*IP Status*::
-    No known IP claims.
-*Contributors*::
-  - Antoine Labour, Google
-  - Bas Nieuwenhuizen, Google
-  - Chad Versace, Google
-  - James Jones, NVIDIA
-  - Jason Ekstrand, Intel
-  - Jőrg Wagner, ARM
-  - Kristian Høgsberg Kristensen, Google
-  - Ray Smith, ARM
-
-=== Description
-
-This extension provides the ability to use _DRM format modifiers_ with
-images, enabling Vulkan to better integrate with the Linux ecosystem of
-graphics, video, and display APIs.
-
-Its functionality closely overlaps with
-`EGL_EXT_image_dma_buf_import_modifiers`^<<VK_EXT_image_drm_format_modifier-fn2,2>>^
-and
-`EGL_MESA_image_dma_buf_export`^<<VK_EXT_image_drm_format_modifier-fn3,3>>^.
-Unlike the EGL extensions, this extension does not require the use of a
-specific handle type (such as a dma_buf) for external memory and provides
-more explicit control of image creation.
-
-=== Introduction to DRM Format Modifiers
-
-A _DRM format modifier_ is a 64-bit, vendor-prefixed, semi-opaque unsigned
-integer.
-Most _modifiers_ represent a concrete, vendor-specific tiling format for
-images.
-Some exceptions are etext:DRM_FORMAT_MOD_LINEAR (which is not
-vendor-specific); etext:DRM_FORMAT_MOD_NONE (which is an alias of
-etext:DRM_FORMAT_MOD_LINEAR due to historical accident); and
-etext:DRM_FORMAT_MOD_INVALID (which does not represent a tiling format).
-The _modifier's_ vendor prefix consists of the 8 most significant bits.
-The canonical list of _modifiers_ and vendor prefixes is found in
-https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/include/uapi/drm/drm_fourcc.h[`drm_fourcc.h`]
-in the Linux kernel source.
-The other dominant source of _modifiers_ are vendor kernel trees.
-
-One goal of _modifiers_ in the Linux ecosystem is to enumerate for each
-vendor a reasonably sized set of tiling formats that are appropriate for
-images shared across processes, APIs, and/or devices, where each
-participating component may possibly be from different vendors.
-A non-goal is to enumerate all tiling formats supported by all vendors.
-Some tiling formats used internally by vendors are inappropriate for
-sharing; no _modifiers_ should be assigned to such tiling formats.
-
-Modifier values typically do not _describe_ memory layouts.
-More precisely, a _modifier_'s lower 56 bits usually have no structure.
-Instead, modifiers _name_ memory layouts; they name a small set of
-vendor-preferred layouts for image sharing.
-As a consequence, in each vendor namespace the modifier values are often
-sequentially allocated starting at 1.
-
-Each _modifier_ is usually supported by a single vendor and its name matches
-the pattern `{VENDOR}_FORMAT_MOD_*` or `DRM_FORMAT_MOD_{VENDOR}_*`.
-Examples are etext:I915_FORMAT_MOD_X_TILED and
-etext:DRM_FORMAT_MOD_BROADCOM_VC4_T_TILED.
-An exception is etext:DRM_FORMAT_MOD_LINEAR, which is supported by most
-vendors.
-
-Many APIs in Linux use _modifiers_ to negotiate and specify the memory
-layout of shared images.
-For example, a Wayland compositor and Wayland client may, by relaying
-_modifiers_ over the Wayland protocol `zwp_linux_dmabuf_v1`, negotiate a
-vendor-specific tiling format for a shared code:wl_buffer.
-The client may allocate the underlying memory for the code:wl_buffer with
-GBM, providing the chosen _modifier_ to code:gbm_bo_create_with_modifiers.
-The client may then import the code:wl_buffer into Vulkan for producing
-image content, providing the resource's dma_buf to
-slink:VkImportMemoryFdInfoKHR and its _modifier_ to
-slink:VkImageDrmFormatModifierExplicitCreateInfoEXT.
-The compositor may then import the code:wl_buffer into OpenGL for sampling,
-providing the resource's dma_buf and _modifier_ to code:eglCreateImage.
-The compositor may also bypass OpenGL and submit the code:wl_buffer directly
-to the kernel's display API, providing the dma_buf and _modifier_ through
-code:drm_mode_fb_cmd2.
-
-=== Format Translation
-
-_Modifier_-capable APIs often pair _modifiers_ with DRM formats, which are
-defined in
-https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/include/uapi/drm/drm_fourcc.h[`drm_fourcc.h`].
-However, `VK_EXT_image_drm_format_modifier` uses elink:VkFormat instead of
-DRM formats.
-The application must convert between elink:VkFormat and DRM format when it
-sends or receives a DRM format to or from an external API.
-
-The mapping from elink:VkFormat to DRM format is lossy.
-Therefore, when receiving a DRM format from an external API, often the
-application must use information from the external API to accurately map the
-DRM format to a elink:VkFormat.
-For example, DRM formats do not distinguish between RGB and sRGB (as of
-2018-03-28); external information is required to identify the image's
-colorspace.
-
-The mapping between elink:VkFormat and DRM format is also incomplete.
-For some DRM formats there exist no corresponding Vulkan format, and for
-some Vulkan formats there exist no corresponding DRM format.
-
-=== Usage Patterns
-
-Three primary usage patterns are intended for this extension:
-
-  * *Negotiation.* The application negotiates with _modifier_-aware,
-    external components to determine sets of image creation parameters
-    supported among all components.
-+
---
-In the Linux ecosystem, the negotiation usually assumes the image is a 2D,
-single-sampled, non-mipmapped, non-array image; this extension permits that
-assumption but does not require it.
-The result of the negotiation usually resembles a set of tuples such as
-_(drmFormat, drmFormatModifier)_, where each participating component
-supports all tuples in the set.
-
-Many details of this negotiation—such as the protocol used during
-negotiation, the set of image creation parameters expressable in the
-protocol, and how the protocol chooses which process and which API will
-create the image—are outside the scope of this specification.
-
-In this extension, flink:vkGetPhysicalDeviceFormatProperties2 with
-slink:VkDrmFormatModifierPropertiesListEXT serves a primary role during the
-negotiation, and flink:vkGetPhysicalDeviceImageFormatProperties2 with
-slink:VkPhysicalDeviceImageDrmFormatModifierInfoEXT serves a secondary role.
---
-
-  * *Import.* The application imports an image with a _modifier_.
-+
---
-In this pattern, the application receives from an external source the
-image's memory and its creation parameters, which are often the result of
-the negotiation described above.
-Some image creation parameters are implicitly defined by the external
-source; for example, ename:VK_IMAGE_TYPE_2D is often assumed.
-Some image creation parameters are usually explicit, such as the image's
-pname:format, pname:drmFormatModifier, and pname:extent; and each plane's
-pname:offset and pname:rowPitch.
-
-Before creating the image, the application first verifies that the physical
-device supports the received creation parameters by querying
-flink:vkGetPhysicalDeviceFormatProperties2 with
-slink:VkDrmFormatModifierPropertiesListEXT and
-flink:vkGetPhysicalDeviceImageFormatProperties2 with
-slink:VkPhysicalDeviceImageDrmFormatModifierInfoEXT.
-Then the application creates the image by chaining
-slink:VkImageDrmFormatModifierExplicitCreateInfoEXT and
-slink:VkExternalMemoryImageCreateInfo onto slink:VkImageCreateInfo.
---
-
-  * *Export.* The application creates an image and allocates its memory.
-    Then the application exports to _modifier_-aware consumers the image's
-    memory handles; its creation parameters; its _modifier_; and the
-    <<VkSubresourceLayout,pname:offset>>,
-    <<VkSubresourceLayout,pname:size>>, and
-    <<VkSubresourceLayout,pname:rowPitch>> of each _memory plane_.
-+
---
-In this pattern, the Vulkan device is the authority for the image; it is the
-allocator of the image's memory and the decider of the image's creation
-parameters.
-When choosing the image's creation parameters, the application usually
-chooses a tuple _(format, drmFormatModifier)_ from the result of the
-negotiation described above.
-The negotiation's result often contains multiple tuples that share the same
-format but differ in their _modifier_.
-In this case, the application should defer the choice of the image's
-_modifier_ to the Vulkan implementation by providing all such _modifiers_ to
-slink:VkImageDrmFormatModifierListCreateInfoEXT::pname:pDrmFormatModifiers;
-and the implementation should choose from pname:pDrmFormatModifiers the
-optimal _modifier_ in consideration with the other image parameters.
-
-The application creates the image by chaining
-slink:VkImageDrmFormatModifierListCreateInfoEXT and
-slink:VkExternalMemoryImageCreateInfo onto slink:VkImageCreateInfo.
-The protocol and APIs by which the application will share the image with
-external consumers will likely determine the value of
-slink:VkExternalMemoryImageCreateInfo::pname:handleTypes.
-The implementation chooses for the image an optimal _modifier_ from
-slink:VkImageDrmFormatModifierListCreateInfoEXT::pname:pDrmFormatModifiers.
-The application then queries the implementation-chosen _modifier_ with
-flink:vkGetImageDrmFormatModifierPropertiesEXT, and queries the memory
-layout of each plane with flink:vkGetImageSubresourceLayout.
-
-The application then allocates the image's memory with
-slink:VkMemoryAllocateInfo, adding chained extending structures for external
-memory; binds it to the image; and exports the memory, for example, with
-flink:vkGetMemoryFdKHR.
-
-Finally, the application sends the image's creation parameters, its
-_modifier_, its per-plane memory layout, and the exported memory handle to
-the external consumers.
-The details of how the application transmits this information to external
-consumers is outside the scope of this specification.
---
-
-=== Prior Art
-
-Extension
-`EGL_EXT_image_dma_buf_import`^<<VK_EXT_image_drm_format_modifier-fn1,1>>^
-introduced the ability to create an code:EGLImage by importing for each
-plane a dma_buf, offset, and row pitch.
-
-Later, extension
-`EGL_EXT_image_dma_buf_import_modifiers`^<<VK_EXT_image_drm_format_modifier-fn2,2>>^
-introduced the ability to query which combination of formats and _modifiers_
-the implementation supports and to specify _modifiers_ during creation of
-the code:EGLImage.
-
-Extension
-`EGL_MESA_image_dma_buf_export`^<<VK_EXT_image_drm_format_modifier-fn3,3>>^
-is the inverse of `EGL_EXT_image_dma_buf_import_modifiers`.
-
-The Linux kernel modesetting API (KMS), when configuring the display's
-framebuffer with `struct
-drm_mode_fb_cmd2`^<<VK_EXT_image_drm_format_modifier-fn4,4>>^, allows one to
-specify the frambuffer's _modifier_ as well as a per-plane memory handle,
-offset, and row pitch.
-
-GBM, a graphics buffer manager for Linux, allows creation of a `gbm_bo`
-(that is, a graphics _buffer object_) by importing data similar to that in
-`EGL_EXT_image_dma_buf_import_modifiers`^<<VK_EXT_image_drm_format_modifier-fn1,1>>^;
-and symmetrically allows exporting the same data from the `gbm_bo`.
-See the references to _modifier_ and _plane_ in
-`gbm.h`^<<VK_EXT_image_drm_format_modifier-fn5,5>>^.
-
-include::{generated}/interfaces/VK_EXT_image_drm_format_modifier.txt[]
-
-=== Issues
-
-1) Should this extension define a single DRM format modifier per
-sname:VkImage? Or define one per plane?
-+
---
-*RESOLVED*: There exists a single DRM format modifier per sname:VkImage.
-
-*DISCUSSION*: Prior art, such as
-`EGL_EXT_image_dma_buf_import_modifiers`^<<VK_EXT_image_drm_format_modifier-fn2,2>>^,
-`struct drm_mode_fb_cmd2`^<<VK_EXT_image_drm_format_modifier-fn4,4>>^, and
-`struct
-gbm_import_fd_modifier_data`^<<VK_EXT_image_drm_format_modifier-fn5,5>>^,
-allows defining one _modifier_ per plane.
-However, developers of the GBM and kernel APIs concede it was a mistake.
-Beginning in Linux 4.10, the kernel requires that the application provide
-the same DRM format _modifier_ for each plane.
-(See Linux commit
-https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=bae781b259269590109e8a4a8227331362b88212[bae781b259269590109e8a4a8227331362b88212]).
-And GBM provides an entry point, code:gbm_bo_get_modifier, for querying the
-_modifier_ of the image but does not provide one to query the modifier of
-individual planes.
---
-
-2) When creating an image with
-slink:VkImageDrmFormatModifierExplicitCreateInfoEXT, which is typically used
-when _importing_ an image, should the application explicitly provide the
-size of each plane?
-+
---
-*RESOLVED*: No.
-The application must: not provide the size.
-To enforce this, the API requires that
-slink:VkImageDrmFormatModifierExplicitCreateInfoEXT::pname:pPlaneLayouts->size
-must: be 0.
-
-*DISCUSSION*: Prior art, such as
-`EGL_EXT_image_dma_buf_import_modifiers`^<<VK_EXT_image_drm_format_modifier-fn2,2>>^,
-`struct drm_mode_fb_cmd2`^<<VK_EXT_image_drm_format_modifier-fn4,4>>^, and
-`struct
-gbm_import_fd_modifier_data`^<<VK_EXT_image_drm_format_modifier-fn5,5>>^,
-omits from the API the size of each plane.
-Instead, the APIs infer each plane's size from the import parameters, which
-include the image's pixel format and a dma_buf, offset, and row pitch for
-each plane.
-
-However, Vulkan differs from EGL and GBM with regards to image creation in
-the following ways:
-
-.Differences in Image Creation
-
-  - *Undedicated allocation by default.* When importing or exporting a set
-    of dma_bufs as an code:EGLImage or code:gbm_bo, common practice mandates
-    that each dma_buf's memory be dedicated (in the sense of
-    `VK_KHR_dedicated_allocation`) to the image (though not necessarily
-    dedicated to a single plane).
-    In particular, neither the GBM documentation nor the EGL extension
-    specifications explicitly state this requirement, but in light of common
-    practice this is likely due to under-specification rather than
-    intentional omission.
-    In contrast, `VK_EXT_image_drm_format_modifier` permits, but does not
-    require, the implementation to require dedicated allocations for images
-    created with ename:VK_IMAGE_TILING_DRM_FORMAT_MODIFIER_EXT.
-
-  - *Separation of image creation and memory allocation.* When importing a
-    set of dma_bufs as an code:EGLImage or code:gbm_bo, EGL and GBM create
-    the image resource and bind it to memory (the dma_bufs) simultaneously.
-    This allows EGL and GBM to query each dma_buf's size during image
-    creation.
-    In Vulkan, image creation and memory allocation are independent unless a
-    dedicated allocation is used (as in `VK_KHR_dedicated_allocation`).
-    Therefore, without requiring dedicated allocation, Vulkan cannot query
-    the size of each dma_buf (or other external handle) when calculating the
-    image's memory layout.
-    Even if dedication allocation were required, Vulkan cannot calculate the
-    image's memory layout until after the image is bound to its dma_ufs.
-
-The above differences complicate the potential inference of plane size in
-Vulkan.
-Consider the following problematic cases:
-
-.Problematic Plane Size Calculations
-
-  - *Padding.* Some plane of the image may require implementation-dependent
-    padding.
-
-  - *Metadata.* For some _modifiers_, the image may have a metadata plane
-    which requires a non-trivial calculation to determine its size.
-
-  - *Mipmapped, array, and 3D images.* The implementation may support
-    ename:VK_IMAGE_TILING_DRM_FORMAT_MODIFIER_EXT for images whose
-    pname:mipLevels, pname:arrayLayers, or pname:depth is greater than 1.
-    For such images with certain _modifiers_, the calculation of each
-    plane's size may be non-trivial.
-
-However, an application-provided plane size solves none of the above
-problems.
-
-For simplicity, consider an external image with a single memory plane.
-The implementation is obviously capable calculating the image's size when
-its tiling is ename:VK_IMAGE_TILING_OPTIMAL.
-Likewise, any reasonable implementation is capable of calculating the
-image's size when its tiling uses a supported _modifier_.
-
-Suppose that the external image's size is smaller than the
-implementation-calculated size.
-If the application provided the external image's size to
-flink:vkCreateImage, the implementation would observe the mismatched size
-and recognize its inability to comprehend the external image's layout
-(unless the implementation used the application-provided size to select a
-refinement of the tiling layout indicated by the _modifier_, which is
-strongly discouraged).
-The implementation would observe the conflict, and reject image creation
-with ename:VK_ERROR_INVALID_DRM_FORMAT_MODIFIER_PLANE_LAYOUT_EXT.
-On the other hand, if the application did not provide the external image's
-size to flink:vkCreateImage, then the application would observe after
-calling flink:vkGetImageMemoryRequirements that the external image's size is
-less than the size required by the implementation.
-The application would observe the conflict and refuse to bind the
-sname:VkImage to the external memory.
-In both cases, the result is explicit failure.
-
-Suppose that the external image's size is larger than the
-implementation-calculated size.
-If the application provided the external image's size to
-flink:vkCreateImage, for reasons similar to above the implementation would
-observe the mismatched size and recognize its inability to comprehend the
-image data residing in the extra size.
-The implementation, however, must assume that image data resides in the
-entire size provided by the application.
-The implementation would observe the conflict and reject image creation with
-ename:VK_ERROR_INVALID_DRM_FORMAT_MODIFIER_PLANE_LAYOUT_EXT.
-On the other hand, if the application did not provide the external image's
-size to flink:vkCreateImage, then the application would observe after
-calling flink:vkGetImageMemoryRequirements that the external image's size is
-larger than the implementation-usable size.
-The application would observe the conflict and refuse to bind the
-sname:VkImage to the external memory.
-In both cases, the result is explicit failure.
-
-Therefore, an application-provided size provides no benefit, and this
-extension should not require it.
-This decision renders slink:VkSubresourceLayout::pname:size an unused field
-during image creation, and thus introduces a risk that implementations may
-require applications to submit sideband creation parameters in the unused
-field.
-To prevent implementations from relying on sideband data, this extension
-_requires_ the application to set pname:size to 0.
---
-
-==== References
-
-  . [[VK_EXT_image_drm_format_modifier-fn1]]
-    https://www.khronos.org/registry/EGL/extensions/EXT/EGL_EXT_image_dma_buf_import.txt[`EGL_EXT_image_dma_buf_import`]
-  . [[VK_EXT_image_drm_format_modifier-fn2]]
-    https://www.khronos.org/registry/EGL/extensions/EXT/EGL_EXT_image_dma_buf_import_modifiers.txt[`EGL_EXT_image_dma_buf_import_modifiers`]
-  . [[VK_EXT_image_drm_format_modifier-fn3]]
-    https://www.khronos.org/registry/EGL/extensions/MESA/EGL_MESA_image_dma_buf_export.txt[`EGL_MESA_image_dma_buf_export`]
-  . [[VK_EXT_image_drm_format_modifier-fn4]]
-    https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/tree/include/uapi/drm/drm_mode.h?id=refs/tags/v4.10#n392[`struct
-    drm_mode_fb_cmd2`]
-  . [[VK_EXT_image_drm_format_modifier-fn5]]
-    https://cgit.freedesktop.org/mesa/mesa/tree/src/gbm/main/gbm.h?id=refs/tags/mesa-18.0.0-rc1[`gbm.h`]
-
-==== Version History
-
-  * Revision 1, 2018-08-29 (Chad Versace)
-    - First stable revision
-  * Revision 2, 2021-09-30 (Jon Leech)
-    - Add interaction with `apiext:VK_KHR_format_feature_flags2` to `vk.xml`
diff --git a/registry/vulkan/appendices/VK_EXT_image_robustness.txt b/registry/vulkan/appendices/VK_EXT_image_robustness.txt
deleted file mode 100644
index fbe5b25..0000000
--- a/registry/vulkan/appendices/VK_EXT_image_robustness.txt
+++ /dev/null
@@ -1,52 +0,0 @@
-// Copyright 2019-2021 The Khronos Group Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-include::{generated}/meta/{refprefix}VK_EXT_image_robustness.txt[]
-
-=== Other Extension Metadata
-
-*Last Modified Date*::
-    2020-04-27
-*IP Status*::
-    No known IP claims.
-*Contributors*::
-    - Graeme Leese, Broadcom
-    - Jan-Harald Fredriksen, ARM
-    - Jeff Bolz, NVIDIA
-    - Spencer Fricke, Samsung
-    - Courtney Goeltzenleuchter, Google
-    - Slawomir Cygan, Intel
-
-=== Description
-
-This extension adds stricter requirements for how out of bounds reads from
-images are handled.
-Rather than returning undefined values, most out of bounds reads return R,
-G, and B values of zero and alpha values of either zero or one.
-Components not present in the image format may be set to zero or to values
-based on the format as described in <<textures-conversion-to-rgba,
-Conversion to RGBA>>.
-
-include::{generated}/interfaces/VK_EXT_image_robustness.txt[]
-
-=== Issues
-
-1. How does this extension differ from VK_EXT_robustness2?
-
-The guarantees provided by this extension are a subset of those provided by
-the robustImageAccess2 feature of VK_EXT_robustness2.
-Where this extension allows return values of (0, 0, 0, 0) or (0, 0, 0, 1),
-robustImageAccess2 requires that a particular value dependent on the image
-format be returned.
-This extension provides no guarantees about the values returned for an
-access to an invalid Lod.
-
-=== Examples
-
-None.
-
-=== Version History
-
-    * Revision 1, 2020-04-27 (Graeme Leese)
-        - Initial draft
diff --git a/registry/vulkan/appendices/VK_EXT_index_type_uint8.txt b/registry/vulkan/appendices/VK_EXT_index_type_uint8.txt
deleted file mode 100644
index 2683fea..0000000
--- a/registry/vulkan/appendices/VK_EXT_index_type_uint8.txt
+++ /dev/null
@@ -1,26 +0,0 @@
-// Copyright 2019-2021 The Khronos Group Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-include::{generated}/meta/{refprefix}VK_EXT_index_type_uint8.txt[]
-
-=== Other Extension Metadata
-
-*Last Modified Date*::
-    2019-05-02
-*IP Status*::
-    No known IP claims.
-*Contributors*::
-  - Jeff Bolz, NVIDIA
-
-=== Description
-
-This extension allows code:uint8_t indices to be used with
-flink:vkCmdBindIndexBuffer.
-
-include::{generated}/interfaces/VK_EXT_index_type_uint8.txt[]
-
-=== Version History
-
- * Revision 1, 2019-05-02 (Piers Daniell)
-   - Internal revisions
diff --git a/registry/vulkan/appendices/VK_EXT_inline_uniform_block.txt b/registry/vulkan/appendices/VK_EXT_inline_uniform_block.txt
deleted file mode 100644
index f13c561..0000000
--- a/registry/vulkan/appendices/VK_EXT_inline_uniform_block.txt
+++ /dev/null
@@ -1,88 +0,0 @@
-// Copyright 2018-2021 The Khronos Group Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-include::{generated}/meta/{refprefix}VK_EXT_inline_uniform_block.txt[]
-
-=== Other Extension Metadata
-
-*Last Modified Date*::
-    2018-08-01
-*IP Status*::
-    No known IP claims.
-*Contributors*::
-  - Daniel Rakos, AMD
-  - Jeff Bolz, NVIDIA
-  - Slawomir Grajewski, Intel
-  - Neil Henning, Codeplay
-
-=== Description
-
-This extension introduces the ability to back uniform blocks directly with
-descriptor sets by storing inline uniform data within descriptor pool
-storage.
-Compared to push constants this new construct allows uniform data to be
-reused across multiple disjoint sets of drawing or dispatching commands and
-may: enable uniform data to be accessed with fewer indirections compared to
-uniforms backed by buffer memory.
-
-include::{generated}/interfaces/VK_EXT_inline_uniform_block.txt[]
-
-=== Issues
-
-1) Do we need a new storage class for inline uniform blocks vs uniform
-blocks?
-
-*RESOLVED*: No.
-The code:Uniform storage class is used to allow the same syntax used for
-both uniform buffers and inline uniform blocks.
-
-2) Is the descriptor array index and array size expressed in terms of bytes
-or dwords for inline uniform block descriptors?
-
-*RESOLVED*: In bytes, but both must: be a multiple of 4, similar to how push
-constant ranges are specified.
-The pname:descriptorCount of sname:VkDescriptorSetLayoutBinding thus
-provides the total number of bytes a particular binding with an inline
-uniform block descriptor type can hold, while the pname:srcArrayElement,
-pname:dstArrayElement, and pname:descriptorCount members of
-sname:VkWriteDescriptorSet, sname:VkCopyDescriptorSet, and
-sname:VkDescriptorUpdateTemplateEntry (where applicable) specify the byte
-offset and number of bytes to write/copy to the binding's backing store.
-Additionally, the pname:stride member of
-sname:VkDescriptorUpdateTemplateEntry is ignored for inline uniform blocks
-and a default value of one is used, meaning that the data to update inline
-uniform block bindings with must be contiguous in memory.
-
-3) What layout rules apply for uniform blocks corresponding to inline
-constants?
-
-*RESOLVED*: They use the same layout rules as uniform buffers.
-
-4) Do we need to add non-uniform indexing features/properties as introduced
-by `VK_EXT_descriptor_indexing` for inline uniform blocks?
-
-*RESOLVED*: No, because inline uniform blocks are not allowed to be
-"`arrayed`".
-A single binding with an inline uniform block descriptor type corresponds to
-a single uniform block instance and the array indices inside that binding
-refer to individual offsets within the uniform block (see issue #2).
-However, this extension does introduce new features/properties about the
-level of support for update-after-bind inline uniform blocks.
-
-5) Is the pname:descriptorBindingVariableDescriptorCount feature introduced
-by `VK_EXT_descriptor_indexing` supported for inline uniform blocks?
-
-*RESOLVED*: Yes, as long as other inline uniform block specific limits are
-respected.
-
-6) Do the robustness guarantees of pname:robustBufferAccess apply to inline
-uniform block accesses?
-
-*RESOLVED*: No, similarly to push constants, as they are not backed by
-buffer memory like uniform buffers.
-
-=== Version History
-
- * Revision 1, 2018-08-01 (Daniel Rakos)
-   - Internal revisions
diff --git a/registry/vulkan/appendices/VK_EXT_line_rasterization.txt b/registry/vulkan/appendices/VK_EXT_line_rasterization.txt
deleted file mode 100644
index 2a18277..0000000
--- a/registry/vulkan/appendices/VK_EXT_line_rasterization.txt
+++ /dev/null
@@ -1,42 +0,0 @@
-// Copyright 2019-2021 The Khronos Group Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-include::{generated}/meta/{refprefix}VK_EXT_line_rasterization.txt[]
-
-=== Other Extension Metadata
-
-*Last Modified Date*::
-    2019-05-09
-*IP Status*::
-    No known IP claims.
-*Contributors*::
-  - Jeff Bolz, NVIDIA
-  - Allen Jensen, NVIDIA
-  - Jason Ekstrand, Intel
-
-=== Description
-
-This extension adds some line rasterization features that are commonly used
-in CAD applications and supported in other APIs like OpenGL.
-Bresenham-style line rasterization is supported, smooth rectangular lines
-(coverage to alpha) are supported, and stippled lines are supported for all
-three line rasterization modes.
-
-include::{generated}/interfaces/VK_EXT_line_rasterization.txt[]
-
-=== Issues
-
- (1) Do we need to support Bresenham-style and smooth lines with more than
- one rasterization sample? i.e. the equivalent of glDisable(GL_MULTISAMPLE)
- in OpenGL when the framebuffer has more than one sample?
-
-  RESOLVED: Yes.
-  For simplicity, Bresenham line rasterization carries forward a few
-  restrictions from OpenGL, such as not supporting per-sample shading, alpha
-  to coverage, or alpha to one.
-
-=== Version History
-
-  * Revision 1, 2019-05-09 (Jeff Bolz)
-    - Initial draft
diff --git a/registry/vulkan/appendices/VK_EXT_load_store_op_none.txt b/registry/vulkan/appendices/VK_EXT_load_store_op_none.txt
deleted file mode 100644
index 1408940..0000000
--- a/registry/vulkan/appendices/VK_EXT_load_store_op_none.txt
+++ /dev/null
@@ -1,37 +0,0 @@
-// Copyright 2021 The Khronos Group, Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-include::{generated}/meta/{refprefix}VK_EXT_load_store_op_none.txt[]
-
-=== Other Extension Metadata
-
-*Last Modified Date*::
-    2021-06-06
-*Contributors*::
-  - Shahbaz Youssefi, Google
-  - Bill Licea-Kane, Qualcomm Technologies, Inc.
-  - Tobias Hector, AMD
-
-=== Description
-
-This extension incorporates ename:VK_ATTACHMENT_STORE_OP_NONE_EXT from
-`apiext:VK_QCOM_render_pass_store_ops`, enabling applications to avoid
-unnecessary synchronization when an attachment is not written during a
-render pass.
-
-Additionally, ename:VK_ATTACHMENT_LOAD_OP_NONE_EXT is introduced to avoid
-unnecessary synchronization when an attachment is not used during a render
-pass at all.
-In combination with ename:VK_ATTACHMENT_STORE_OP_NONE_EXT, this is useful as
-an alternative to preserve attachments in applications that cannot decide if
-an attachment will be used in a render pass until after the necessary
-pipelines have been created.
-
-include::{generated}/interfaces/VK_EXT_load_store_op_none.txt[]
-
-=== Version History
-
-  * Revision 1, 2021-06-06 (Shahbaz Youssefi)
-    - Initial revision, based on VK_QCOM_render_pass_store_ops.
-    - Added VK_ATTACHMENT_LOAD_OP_NONE_EXT.
diff --git a/registry/vulkan/appendices/VK_EXT_memory_budget.txt b/registry/vulkan/appendices/VK_EXT_memory_budget.txt
deleted file mode 100644
index ceea77b..0000000
--- a/registry/vulkan/appendices/VK_EXT_memory_budget.txt
+++ /dev/null
@@ -1,48 +0,0 @@
-// Copyright 2018-2021 The Khronos Group, Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-include::{generated}/meta/{refprefix}VK_EXT_memory_budget.txt[]
-
-=== Other Extension Metadata
-
-*Last Modified Date*::
-    2018-10-08
-*Contributors*::
-  - Jeff Bolz, NVIDIA
-  - Jeff Juliano, NVIDIA
-
-=== Description
-
-While running a Vulkan application, other processes on the machine might
-also be attempting to use the same device memory, which can pose problems.
-This extension adds support for querying the amount of memory used and the
-total memory budget for a memory heap.
-The values returned by this query are implementation-dependent and can
-depend on a variety of factors including operating system and system load.
-
-The slink:VkPhysicalDeviceMemoryBudgetPropertiesEXT::pname:heapBudget values
-can be used as a guideline for how much total memory from each heap the
-**current process** can use at any given time, before allocations may start
-failing or causing performance degradation.
-The values may change based on other activity in the system that is outside
-the scope and control of the Vulkan implementation.
-
-The slink:VkPhysicalDeviceMemoryBudgetPropertiesEXT::pname:heapUsage will
-display the **current process** estimated heap usage.
-
-With this information, the idea is for an application at some interval (once
-per frame, per few seconds, etc) to query pname:heapBudget and
-pname:heapUsage.
-From here the application can notice if it is over budget and decide how it
-wants to handle the memory situation (free it, move to host memory, changing
-mipmap levels, etc).
-This extension is designed to be used in concert with
-`apiext:VK_EXT_memory_priority` to help with this part of memory management.
-
-include::{generated}/interfaces/VK_EXT_memory_budget.txt[]
-
-=== Version History
-
- * Revision 1, 2018-10-08 (Jeff Bolz)
-   - Initial revision
diff --git a/registry/vulkan/appendices/VK_EXT_memory_priority.txt b/registry/vulkan/appendices/VK_EXT_memory_priority.txt
deleted file mode 100644
index b97a621..0000000
--- a/registry/vulkan/appendices/VK_EXT_memory_priority.txt
+++ /dev/null
@@ -1,32 +0,0 @@
-// Copyright 2018-2021 The Khronos Group, Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-include::{generated}/meta/{refprefix}VK_EXT_memory_priority.txt[]
-
-=== Other Extension Metadata
-
-*Last Modified Date*::
-    2018-10-08
-*Contributors*::
-  - Jeff Bolz, NVIDIA
-  - Jeff Juliano, NVIDIA
-
-=== Description
-
-This extension adds a pname:priority value specified at memory allocation
-time.
-On some systems with both device-local and non-device-local memory heaps,
-the implementation may transparently move memory from one heap to another
-when a heap becomes full (for example, when the total memory used across all
-processes exceeds the size of the heap).
-In such a case, this priority value may be used to determine which
-allocations are more likely to remain in device-local memory.
-
-include::{generated}/interfaces/VK_EXT_memory_priority.txt[]
-
-=== Version History
-
- * Revision 1, 2018-10-08 (Jeff Bolz)
-   - Initial revision
-
diff --git a/registry/vulkan/appendices/VK_EXT_metal_surface.txt b/registry/vulkan/appendices/VK_EXT_metal_surface.txt
deleted file mode 100644
index d96a60b..0000000
--- a/registry/vulkan/appendices/VK_EXT_metal_surface.txt
+++ /dev/null
@@ -1,28 +0,0 @@
-// Copyright 2018-2021 The Khronos Group Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-include::{generated}/meta/{refprefix}VK_EXT_metal_surface.txt[]
-
-=== Other Extension Metadata
-
-*Last Modified Date*::
-    2018-10-01
-*IP Status*::
-    No known IP claims.
-*Contributors*::
-  - Dzmitry Malyshau, Mozilla Corp.
-
-=== Description
-
-The `VK_EXT_metal_surface` extension is an instance extension.
-It provides a mechanism to create a slink:VkSurfaceKHR object (defined by
-the `apiext:VK_KHR_surface` extension) from basetype:CAMetalLayer, which is
-the native rendering surface of Apple's Metal framework.
-
-include::{generated}/interfaces/VK_EXT_metal_surface.txt[]
-
-=== Version History
-
- * Revision 1, 2018-10-01 (Dzmitry Malyshau)
-   - Initial version
diff --git a/registry/vulkan/appendices/VK_EXT_multi_draw.txt b/registry/vulkan/appendices/VK_EXT_multi_draw.txt
deleted file mode 100644
index 7c46d84..0000000
--- a/registry/vulkan/appendices/VK_EXT_multi_draw.txt
+++ /dev/null
@@ -1,43 +0,0 @@
-// Copyright 2021 The Khronos Group Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-include::{generated}/meta/{refprefix}VK_EXT_multi_draw.txt[]
-
-=== Other Extension Metadata
-
-*Last Modified Date*::
-    2021-05-19
-*IP Status*::
-    No known IP claims.
-*Contributors*::
-  - Mike Blumenkrantz, VALVE
-  - Piers Daniell, NVIDIA
-  - Jason Ekstrand, INTEL
-  - Spencer Fricke, SAMSUNG
-  - Ricardo Garcia, IGALIA
-  - Jon Leech, KHRONOS
-  - Stu Smith, AMD
-
-=== Description
-
-Processing multiple draw commands in sequence incurs measurable overhead
-within drivers due to repeated state checks and updates during dispatch.
-This extension enables passing the entire sequence of draws directly to the
-driver in order to avoid any such overhead, using an array of
-slink:VkMultiDrawInfoEXT or slink:VkMultiDrawIndexedInfoEXT structs with
-fname:vkCmdDrawMultiEXT or fname:vkCmdDrawMultiIndexedEXT, respectively.
-These functions could be used any time multiple draw commands are being
-recorded without any state changes between them in order to maximize
-performance.
-
-include::{generated}/interfaces/VK_EXT_multi_draw.txt[]
-
-=== New or Modified Built-In Variables
-
-  * (modified)code:DrawIndex
-
-=== Version History
-
-  * Revision 1, 2021-01-20 (Mike Blumenkrantz)
-    - Initial version
diff --git a/registry/vulkan/appendices/VK_EXT_pageable_device_local_memory.txt b/registry/vulkan/appendices/VK_EXT_pageable_device_local_memory.txt
deleted file mode 100644
index 7e062d5..0000000
--- a/registry/vulkan/appendices/VK_EXT_pageable_device_local_memory.txt
+++ /dev/null
@@ -1,74 +0,0 @@
-// Copyright 2018-2021 The Khronos Group, Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-include::{generated}/meta/{refprefix}VK_EXT_pageable_device_local_memory.txt[]
-
-=== Other Extension Metadata
-
-*Last Modified Date*::
-    2021-08-24
-*Contributors*::
-  - Hans-Kristian Arntzen, Valve
-  - Axel Gneiting, id Software
-  - Billy Khan, id Software
-  - Daniel Koch, NVIDIA
-  - Chris Lentini, NVIDIA
-  - Joshua Schnarr, NVIDIA
-  - Stu Smith, AMD
-
-=== Description
-
-Vulkan is frequently implemented on multi-user and multi-process operating
-systems where the device-local memory can be shared by more than one
-process.
-On such systems the size of the device-local memory available to the
-application may not be the full size of the memory heap at all times.
-In order for these operating systems to support multiple applications the
-device-local memory is virtualized and paging is used to move memory between
-device-local and host-local memory heaps, transparent to the application.
-
-The current Vulkan specification does not expose this behavior well and may
-cause applications to make suboptimal memory choices when allocating memory.
-For example, in a system with multiple applications running, the application
-may think that device-local memory is full and revert to making
-performance-sensitive allocations from host-local memory.
-In reality the memory heap might not have been full, it just appeared to be
-at the time memory consumption was queried, and a device-local allocation
-would have succeeded.
-A well designed operating system that implements pageable device-local
-memory will try to have all memory allocations for the foreground
-application paged into device-local memory, and paged out for other
-applications as needed when not in use.
-
-When this extension is exposed by the Vulkan implementation it indicates to
-the application that the operating system implements pageable device-local
-memory and the application should adjust its memory allocation strategy
-accordingly.
-The extension also exposes a new flink:vkSetDeviceMemoryPriorityEXT function
-to allow the application to dynamically adjust the priority of existing
-memory allocations based on its current needs.
-This will help the operating system page out lower priority memory
-allocations before higher priority allocations when needed.
-It will also help the operating system decide which memory allocations to
-page back into device-local memory first.
-
-To take best advantage of pageable device-local memory the application must
-create the Vulkan device with the
-slink:VkPhysicalDevicePageableDeviceLocalMemoryFeaturesEXT::pname:pageableDeviceLocalMemory
-feature enabled.
-When enabled the Vulkan implementation will allow device-local memory
-allocations to be paged in and out by the operating system, and may: not
-return VK_ERROR_OUT_OF_DEVICE_MEMORY even if device-local memory appears to
-be full, but will instead page this, or other allocations, out to make room.
-The Vulkan implementation will also ensure that host-local memory
-allocations will never be promoted to device-local memory by the operating
-system, or consume device-local memory.
-
-
-include::{generated}/interfaces/VK_EXT_pageable_device_local_memory.txt[]
-
-=== Version History
-
- * Revision 1, 2021-08-24 (Piers Daniell)
-   - Initial revision
diff --git a/registry/vulkan/appendices/VK_EXT_pci_bus_info.txt b/registry/vulkan/appendices/VK_EXT_pci_bus_info.txt
deleted file mode 100644
index adfca7e..0000000
--- a/registry/vulkan/appendices/VK_EXT_pci_bus_info.txt
+++ /dev/null
@@ -1,40 +0,0 @@
-// Copyright 2018-2021 The Khronos Group Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-include::{generated}/meta/{refprefix}VK_EXT_pci_bus_info.txt[]
-
-=== Other Extension Metadata
-
-*Last Modified Date*::
-    2018-12-10
-*IP Status*::
-    No known IP claims.
-*Contributors*::
-  - Matthaeus G. Chajdas, AMD
-  - Daniel Rakos, AMD
-
-=== Description
-
-This extension adds a new query to obtain PCI bus information about a
-physical device.
-
-Not all physical devices have PCI bus information, either due to the device
-not being connected to the system through a PCI interface or due to platform
-specific restrictions and policies.
-Thus this extension is only expected to be supported by physical devices
-which can provide the information.
-
-As a consequence, applications should always check for the presence of the
-extension string for each individual physical device for which they intend
-to issue the new query for and should not have any assumptions about the
-availability of the extension on any given platform.
-
-include::{generated}/interfaces/VK_EXT_pci_bus_info.txt[]
-
-=== Version History
-
-  * Revision 2, 2018-12-10 (Daniel Rakos)
-    - Changed all members of the new structure to have the uint32_t type
-  * Revision 1, 2018-10-11 (Daniel Rakos)
-    - Initial revision
diff --git a/registry/vulkan/appendices/VK_EXT_physical_device_drm.txt b/registry/vulkan/appendices/VK_EXT_physical_device_drm.txt
deleted file mode 100644
index e97b44d..0000000
--- a/registry/vulkan/appendices/VK_EXT_physical_device_drm.txt
+++ /dev/null
@@ -1,48 +0,0 @@
-// Copyright (c) 2020 Simon Ser
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-include::{generated}/meta/{refprefix}VK_EXT_physical_device_drm.txt[]
-
-=== Other Extension Metadata
-
-*Last Modified Date*::
-    2021-06-09
-*IP Status*::
-    No known IP claims.
-*Contributors*::
-    - Simon Ser
-
-=== Description
-
-This extension provides new facilities to query DRM properties for physical
-devices, enabling users to match Vulkan physical devices with DRM nodes on
-Linux.
-
-Its functionality closely overlaps with
-`EGL_EXT_device_drm`^<<VK_EXT_physical_device_drm-fn1,1>>^.
-Unlike the EGL extension, this extension does not expose a string containing
-the name of the device file and instead exposes device minor numbers.
-
-DRM defines multiple device node types.
-Each physical device may have one primary node and one render node
-associated.
-Physical devices may have no primary node (e.g. if the device does not have
-a display subsystem), may have no render node (e.g. if it is a software
-rendering engine), or may have neither (e.g. if it is a software rendering
-engine without a display subsystem).
-
-To query DRM properties for a physical device, chain
-slink:VkPhysicalDeviceDrmPropertiesEXT to slink:VkPhysicalDeviceProperties2.
-
-include::{generated}/interfaces/VK_EXT_physical_device_drm.txt[]
-
-=== References
-
-  . [[VK_EXT_physical_device_drm-fn1]]
-    https://www.khronos.org/registry/EGL/extensions/EXT/EGL_EXT_device_drm.txt[`EGL_EXT_device_drm`]
-
-=== Version History
-
-  * Revision 1, 2021-06-09
-    - First stable revision
diff --git a/registry/vulkan/appendices/VK_EXT_pipeline_creation_cache_control.txt b/registry/vulkan/appendices/VK_EXT_pipeline_creation_cache_control.txt
deleted file mode 100644
index 8c3178a..0000000
--- a/registry/vulkan/appendices/VK_EXT_pipeline_creation_cache_control.txt
+++ /dev/null
@@ -1,111 +0,0 @@
-// Copyright 2019-2021 The Khronos Group Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-include::{generated}/meta/{refprefix}VK_EXT_pipeline_creation_cache_control.txt[]
-
-=== Other Extension Metadata
-
-*Last Modified Date*::
-    2020-03-23
-*IP Status*::
-    No known IP claims.
-*Contributors*::
-  - Gregory Grebe, AMD
-  - Tobias Hector, AMD
-  - Matthaeus Chajdas, AMD
-  - Mitch Singer, AMD
-  - Spencer Fricke, Samsung Electronics
-  - Stuart Smith, Imagination Technologies
-  - Jeff Bolz, NVIDIA Corporation
-  - Daniel Koch, NVIDIA Corporation
-  - Dan Ginsburg, Valve Corporation
-  - Jeff Leger, QUALCOMM
-  - Michal Pietrasiuk, Intel
-  - Jan-Harald Fredriksen, Arm Limited
-
-=== Description
-
-This extension adds flags to stext:Vk*PipelineCreateInfo and
-slink:VkPipelineCacheCreateInfo structures with the aim of improving the
-predictability of pipeline creation cost.
-The goal is to provide information about potentially expensive hazards
-within the client driver during pipeline creation to the application before
-carrying them out rather than after.
-
-=== Background
-
-Pipeline creation is a costly operation, and the explicit nature of the
-Vulkan design means that cost is not hidden from the developer.
-Applications are also expected to schedule, prioritize, and load balance all
-calls for pipeline creation.
-It is strongly advised that applications create pipelines sufficiently ahead
-of their usage.
-Failure to do so will result in an unresponsive application, intermittent
-stuttering, or other poor user experiences.
-Proper usage of pipeline caches and/or derivative pipelines help mitigate
-this but is not assured to eliminate disruption in all cases.
-In the event that an ahead-of-time creation is not possible, considerations
-should be taken to ensure that the current execution context is suitable for
-the workload of pipeline creation including possible shader compilation.
-
-Applications making API calls to create a pipeline must be prepared for any
-of the following to occur:
-
-  * OS/kernel calls to be made by the ICD
-  * Internal memory allocation not tracked by the pname:pAllocator passed to
-    ftext:vkCreate*Pipelines
-  * Internal thread synchronization or yielding of the current thread's core
-  * Extremely long (multi-millisecond+), blocking, compilation times
-  * Arbitrary call stacks depths and stack memory usage
-
-The job or task based game engines that are being developed to take
-advantage of explicit graphics APIs like Vulkan may behave exceptionally
-poorly if any of the above scenarios occur.
-However, most game engines are already built to "`stream`" in assets
-dynamically as the user plays the game.
-By adding control by way of tlink:VkPipelineCreateFlags, we can require an
-ICD to report back a failure in critical execution paths rather than forcing
-an unexpected wait.
-
-Applications can prevent unexpected compilation by setting
-ename:VK_PIPELINE_CREATE_FAIL_ON_PIPELINE_COMPILE_REQUIRED_BIT_EXT on
-stext:Vk*PipelineCreateInfo::pname:flags.
-When set, an ICD must not attempt pipeline or shader compilation to create
-the pipeline object.
-The ICD will return the result ename:VK_PIPELINE_COMPILE_REQUIRED_EXT.
-An ICD may still return a valid sname:VkPipeline object by either re-using
-existing pre-compiled objects such as those from a pipeline cache, or
-derivative pipelines.
-
-By default ftext:vkCreate*Pipelines calls must attempt to create all
-pipelines before returning.
-Setting ename:VK_PIPELINE_CREATE_EARLY_RETURN_ON_FAILURE_BIT_EXT on
-stext:Vk*PipelineCreateInfo::pname:flags can be used as an escape hatch for
-batched pipeline creates.
-
-Hidden locks also add to the unpredictability of the cost of pipeline
-creation.
-The most common case of locks inside the stext:vkCreate*Pipelines is
-internal synchronization of the slink:VkPipelineCache object.
-ename:VK_PIPELINE_CACHE_CREATE_EXTERNALLY_SYNCHRONIZED_BIT_EXT can be set
-when calling flink:vkCreatePipelineCache to state the cache is
-<<fundamentals-threadingbehavior,externally synchronized>>.
-
-The hope is that armed with this information application and engine
-developers can leverage existing asset streaming systems to recover from
-"just-in-time" pipeline creation stalls.
-
-include::{generated}/interfaces/VK_EXT_pipeline_creation_cache_control.txt[]
-
-=== Version History
-
-  * Revision 1, 2019-11-01 (Gregory Grebe)
-    - Initial revision
-  * Revision 2, 2020-02-24 (Gregory Grebe)
-    - Initial public revision
-  * Revision 3, 2020-03-23 (Tobias Hector)
-    - Changed ename:VK_PIPELINE_COMPILE_REQUIRED_EXT to a success code,
-      adding an alias for the original
-      ename:VK_ERROR_PIPELINE_COMPILE_REQUIRED_EXT.
-      Also updated the xml to include these codes as return values.
diff --git a/registry/vulkan/appendices/VK_EXT_pipeline_creation_feedback.txt b/registry/vulkan/appendices/VK_EXT_pipeline_creation_feedback.txt
deleted file mode 100644
index 6d10d30..0000000
--- a/registry/vulkan/appendices/VK_EXT_pipeline_creation_feedback.txt
+++ /dev/null
@@ -1,37 +0,0 @@
-// Copyright 2019-2021 The Khronos Group Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-include::{generated}/meta/{refprefix}VK_EXT_pipeline_creation_feedback.txt[]
-
-=== Other Extension Metadata
-
-*Last Modified Date*::
-    2019-03-12
-*IP Status*::
-    No known IP claims.
-*Contributors*::
-  - Jean-Francois Roy, Google
-  - Hai Nguyen, Google
-  - Andrew Ellem, Google
-  - Bob Fraser, Google
-  - Sujeevan Rajayogam, Google
-  - Jan-Harald Fredriksen, ARM
-  - Jeff Leger, Qualcomm Technologies, Inc.
-  - Jeff Bolz, NVIDIA
-  - Daniel Koch, NVIDIA
-  - Neil Henning, AMD
-
-=== Description
-
-This extension adds a mechanism to provide feedback to an application about
-pipeline creation, with the specific goal of allowing a feedback loop
-between build systems and in-the-field application executions to ensure
-effective pipeline caches are shipped to customers.
-
-include::{generated}/interfaces/VK_EXT_pipeline_creation_feedback.txt[]
-
-=== Version History
-
-  * Revision 1, 2019-03-12 (Jean-Francois Roy)
-    - Initial revision
diff --git a/registry/vulkan/appendices/VK_EXT_post_depth_coverage.txt b/registry/vulkan/appendices/VK_EXT_post_depth_coverage.txt
deleted file mode 100644
index dadd69e..0000000
--- a/registry/vulkan/appendices/VK_EXT_post_depth_coverage.txt
+++ /dev/null
@@ -1,54 +0,0 @@
-// Copyright 2017-2021 The Khronos Group Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-include::{generated}/meta/{refprefix}VK_EXT_post_depth_coverage.txt[]
-
-=== Other Extension Metadata
-
-*Last Modified Date*::
-    2017-07-17
-*Interactions and External Dependencies*::
-  - This extension requires
-    {spirv}/KHR/SPV_KHR_post_depth_coverage.html[`SPV_KHR_post_depth_coverage`]
-  - This extension provides API support for
-    https://www.khronos.org/registry/OpenGL/extensions/ARB/ARB_post_depth_coverage.txt[`GL_ARB_post_depth_coverage`]
-    and
-    https://www.khronos.org/registry/OpenGL/extensions/EXT/EXT_post_depth_coverage.txt[`GL_EXT_post_depth_coverage`]
-*Contributors*::
-  - Jeff Bolz, NVIDIA
-
-=== Description
-
-This extension adds support for the following SPIR-V extension in Vulkan:
-
-  * `SPV_KHR_post_depth_coverage`
-
-which allows the fragment shader to control whether values in the
-code:SampleMask built-in input variable reflect the coverage after early
-<<fragops-depth,depth>> and <<fragops-stencil,stencil>> tests are applied.
-
-This extension adds a new code:PostDepthCoverage execution mode under the
-code:SampleMaskPostDepthCoverage capability.
-When this mode is specified along with code:EarlyFragmentTests, the value of
-an input variable decorated with the
-<<interfaces-builtin-variables-samplemask, code:SampleMask>> built-in
-reflects the coverage after the <<shaders-fragment-earlytest, early fragment
-tests>> are applied.
-Otherwise, it reflects the coverage before the depth and stencil tests.
-
-When using GLSL source-based shading languages, the code:post_depth_coverage
-layout qualifier from GL_ARB_post_depth_coverage or
-GL_EXT_post_depth_coverage maps to the code:PostDepthCoverage execution
-mode.
-
-include::{generated}/interfaces/VK_EXT_post_depth_coverage.txt[]
-
-=== New SPIR-V Capabilities
-
-  * <<spirvenv-capabilities-table-SampleMaskPostDepthCoverage,SampleMaskPostDepthCoverage>>
-
-=== Version History
-
-  * Revision 1, 2017-07-17 (Daniel Koch)
-    - Internal revisions
diff --git a/registry/vulkan/appendices/VK_EXT_primitive_topology_list_restart.txt b/registry/vulkan/appendices/VK_EXT_primitive_topology_list_restart.txt
deleted file mode 100644
index a8b4609..0000000
--- a/registry/vulkan/appendices/VK_EXT_primitive_topology_list_restart.txt
+++ /dev/null
@@ -1,33 +0,0 @@
-// Copyright (c) 2020-2021 The Khronos Group Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-include::{generated}/meta/{refprefix}VK_EXT_primitive_topology_list_restart.txt[]
-
-=== Other Extension Metadata
-
-*Last Modified Date*::
-    2021-01-11
-*IP Status*::
-    No known IP claims.
-*Contributors*::
-  - Courtney Goeltzenleuchter, Google
-  - Shahbaz Youssefi, Google
-
-=== Description
-
-This extension allows list primitives to use the primitive restart index
-value.
-This provides a more efficient implementation when layering OpenGL
-functionality on Vulkan by avoiding emulation which incurs data copies.
-
-include::{generated}/interfaces/VK_EXT_primitive_topology_list_restart.txt[]
-
-=== Version History
-
- * Revision 0, 2020-09-14 (Courtney Goeltzenleuchter)
-   - Internal revisions
-
- * Revision 1, 2021-01-11 (Shahbaz Youssefi)
-   - Add the `primitiveTopologyPatchListRestart` feature
-   - Internal revisions
diff --git a/registry/vulkan/appendices/VK_EXT_private_data.txt b/registry/vulkan/appendices/VK_EXT_private_data.txt
deleted file mode 100644
index ead5f38..0000000
--- a/registry/vulkan/appendices/VK_EXT_private_data.txt
+++ /dev/null
@@ -1,40 +0,0 @@
-// Copyright 2020-2021 The Khronos Group Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-include::{generated}/meta/{refprefix}VK_EXT_private_data.txt[]
-
-=== Other Extension Metadata
-
-*Last Modified Date*::
-    2020-03-25
-*IP Status*::
-    No known IP claims.
-*Contributors*::
-  - Matthew Rusch, NVIDIA
-  - Nuno Subtil, NVIDIA
-  - Piers Daniell, NVIDIA
-  - Jeff Bolz, NVIDIA
-
-=== Description
-
-The 'VK_EXT_private_data' extension is a device extension which enables
-attaching arbitrary payloads to Vulkan objects.
-It introduces the idea of private data slots as a means of storing a 64-bit
-unsigned integer of application defined data.
-Private data slots can be created or destroyed any time an associated device
-is available.
-Private data slots can be reserved at device creation time, and limiting use
-to the amount reserved will allow the extension to exhibit better
-performance characteristics.
-
-include::{generated}/interfaces/VK_EXT_private_data.txt[]
-
-=== Examples
-
-  * In progress
-
-=== Version History
-
- * Revision 1, 2020-01-15 (Matthew Rusch)
-   - Initial draft
diff --git a/registry/vulkan/appendices/VK_EXT_provoking_vertex.txt b/registry/vulkan/appendices/VK_EXT_provoking_vertex.txt
deleted file mode 100644
index 7d259e0..0000000
--- a/registry/vulkan/appendices/VK_EXT_provoking_vertex.txt
+++ /dev/null
@@ -1,85 +0,0 @@
-// Copyright 2019-2021 The Khronos Group Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-include::{generated}/meta/{refprefix}VK_EXT_provoking_vertex.txt[]
-
-=== Other Extension Metadata
-
-*Last Modified Date*::
-    2021-02-22
-*IP Status*::
-    No known IP claims.
-*Contributors*::
-  - Alexis Hétu, Google
-  - Bill Licea-Kane, Qualcomm
-  - Daniel Koch, Nvidia
-  - Jamie Madill, Google
-  - Jan-Harald Fredriksen, Arm
-  - Jason Ekstrand, Intel
-  - Jeff Bolz, Nvidia
-  - Jeff Leger, Qualcomm
-  - Jesse Hall, Google
-  - Jörg Wagner, Arm
-  - Matthew Netsch, Qualcomm
-  - Mike Blumenkrantz, Valve
-  - Piers Daniell, Nvidia
-  - Tobias Hector, AMD
-
-=== Description
-
-This extension allows changing the provoking vertex convention between
-Vulkan's default convention (first vertex) and OpenGL's convention (last
-vertex).
-
-This extension is intended for use by API-translation layers that implement
-APIs like OpenGL on top of Vulkan, and need to match the source API's
-provoking vertex convention.
-Applications using Vulkan directly should use Vulkan's default convention.
-
-include::{generated}/interfaces/VK_EXT_provoking_vertex.txt[]
-
-=== Issues
-
-1) At what granularity should this state be set?
-
-*RESOLVED*: At pipeline bind, with an optional per-render pass restriction.
-
-The most natural place to put this state is in the graphics pipeline object.
-Some implementations require it to be known when creating the pipeline, and
-pipeline state is convenient for implementing OpenGL 3.2's
-glProvokingVertex, which can change the state between draw calls.
-However, some implementations can only change it approximately render pass
-granularity.
-To accommodate both, provoking vertex will be pipeline state, but
-implementations can require that only one mode is used within a render pass
-instance; the render pass's mode is chosen implicitly when the first
-pipeline is bound.
-
-2) Does the provoking vertex mode affect the order that vertices are written
-to transform feedback buffers?
-
-*RESOLVED*: Yes, to enable layered implementations of OpenGL and D3D.
-
-All of OpenGL, OpenGL ES, and Direct3D 11 require that vertices are written
-to transform feedback buffers such that flat-shaded attributes have the same
-value when drawing the contents of the transform feedback buffer as they did
-in the original drawing when the transform feedback buffer was written
-(assuming the provoking vertex mode has not changed, in APIs that support
-more than one mode).
-
-
-=== Version History
-
-  * Revision 1, (1c) 2021-02-22 (Jesse Hall)
-    - Added
-      VkPhysicalDeviceProvokingVertexPropertiesEXT::transformFeedbackPreservesTriangleFanProvokingVertex
-      to accommodate implementations that cannot change the transform
-      feedback vertex order for triangle fans.
-  * Revision 1, (1b) 2020-06-14 (Jesse Hall)
-    - Added
-      VkPhysicalDeviceProvokingVertexFeaturesEXT::transformFeedbackPreservesProvokingVertex
-      and required that transform feedback write vertices so as to preserve
-      the provoking vertex of each primitive.
-  * Revision 1, (1a) 2019-10-23 (Jesse Hall)
-    - Initial draft, based on a proposal by Alexis Hétu
diff --git a/registry/vulkan/appendices/VK_EXT_queue_family_foreign.txt b/registry/vulkan/appendices/VK_EXT_queue_family_foreign.txt
deleted file mode 100644
index ce1ad1e..0000000
--- a/registry/vulkan/appendices/VK_EXT_queue_family_foreign.txt
+++ /dev/null
@@ -1,48 +0,0 @@
-// Copyright 2017-2021 The Khronos Group Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-include::{generated}/meta/{refprefix}VK_EXT_queue_family_foreign.txt[]
-
-=== Other Extension Metadata
-
-*Last Modified Date*::
-    2017-11-01
-*IP Status*::
-    No known IP claims.
-*Contributors*::
-  - Chad Versace, Google
-  - James Jones, NVIDIA
-  - Jason Ekstrand, Intel
-  - Jesse Hall, Google
-  - Daniel Rakos, AMD
-  - Ray Smith, ARM
-
-=== Description
-
-This extension defines a special queue family,
-ename:VK_QUEUE_FAMILY_FOREIGN_EXT, which can be used to transfer ownership
-of resources backed by external memory to foreign, external queues.
-This is similar to ename:VK_QUEUE_FAMILY_EXTERNAL_KHR, defined in
-`apiext:VK_KHR_external_memory`.
-The key differences between the two are:
-
-  * The queues represented by ename:VK_QUEUE_FAMILY_EXTERNAL_KHR must share
-    the same physical device and the same driver version as the current
-    slink:VkInstance.
-    ename:VK_QUEUE_FAMILY_FOREIGN_EXT has no such restrictions.
-    It can represent devices and drivers from other vendors, and can even
-    represent non-Vulkan-capable devices.
-  * All resources backed by external memory support
-    ename:VK_QUEUE_FAMILY_EXTERNAL_KHR.
-    Support for ename:VK_QUEUE_FAMILY_FOREIGN_EXT is more restrictive.
-  * Applications should expect transitions to/from
-    ename:VK_QUEUE_FAMILY_FOREIGN_EXT to be more expensive than transitions
-    to/from ename:VK_QUEUE_FAMILY_EXTERNAL_KHR.
-
-include::{generated}/interfaces/VK_EXT_queue_family_foreign.txt[]
-
-=== Version History
-
-  * Revision 1, 2017-11-01 (Chad Versace)
-    - Squashed internal revisions
diff --git a/registry/vulkan/appendices/VK_EXT_rgba10x6_formats.txt b/registry/vulkan/appendices/VK_EXT_rgba10x6_formats.txt
deleted file mode 100644
index 444f79f..0000000
--- a/registry/vulkan/appendices/VK_EXT_rgba10x6_formats.txt
+++ /dev/null
@@ -1,48 +0,0 @@
-// Copyright 2021 The Khronos Group Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-include::{generated}/meta/{refprefix}VK_EXT_rgba10x6_formats.txt[]
-
-=== Other Extension Metadata
-
-*Last Modified Date*::
-    2021-09-29
-*IP Status*::
-    No known IP claims.
-*Contributors*::
-  - Jan-Harald Fredriksen, Arm
-  - Graeme Leese, Broadcom
-  - Spencer Fricke, Samsung
-
-=== Description
-
-This extension enables the
-ename:VK_FORMAT_R10X6G10X6B10X6A10X6_UNORM_4PACK16 format to be used without
-a <<samplers-YCbCr-conversion, sampler {YCbCr} conversion>> enabled.
-
-include::{generated}/interfaces/VK_EXT_rgba10x6_formats.txt[]
-
-=== Issues
-
-1) Should we reuse the existing format enumeration or introduce a new one?
-
-*RESOLVED*: We reuse an existing format enumeration,
-ename:VK_FORMAT_R10X6G10X6B10X6A10X6_UNORM_4PACK16, that was previously
-exclusively used for YCbCr and therefore had a set of limitations related to
-that usage.
-The alternative was to introduce a new format token with exactly the same
-bit representation as the existing token, but without the limitations.
-
-2) Should we only introduce
-ename:VK_FORMAT_R10X6G10X6B10X6A10X6_UNORM_4PACK16 or also 1-3 component
-variations?
-
-*RESOLVED*: Only the 4-component format is introduced because the 1- and 2-
-component variations are already not exclusive to YCbCr, and the 3-component
-variation is not a good match for hardware capabilities.
-
-=== Version History
-
- * Revision 1, 2021-09-29 (Jan-Harald Fredriksen)
-   - Initial EXT version
diff --git a/registry/vulkan/appendices/VK_EXT_robustness2.txt b/registry/vulkan/appendices/VK_EXT_robustness2.txt
deleted file mode 100644
index d37760a..0000000
--- a/registry/vulkan/appendices/VK_EXT_robustness2.txt
+++ /dev/null
@@ -1,63 +0,0 @@
-// Copyright 2019-2021 The Khronos Group Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-include::{generated}/meta/{refprefix}VK_EXT_robustness2.txt[]
-
-=== Other Extension Metadata
-
-*Last Modified Date*::
-    2020-01-29
-*IP Status*::
-    No known IP claims.
-*Contributors*::
-    - Liam Middlebrook, NVIDIA
-    - Jeff Bolz, NVIDIA
-
-=== Description
-
-This extension adds stricter requirements for how out of bounds reads and
-writes are handled.
-Most accesses must: be tightly bounds-checked, out of bounds writes must: be
-discarded, out of bound reads must: return zero.
-Rather than allowing multiple possible [eq]#(0,0,0,x)# vectors, the out of
-bounds values are treated as zero, and then missing components are inserted
-based on the format as described in <<textures-conversion-to-rgba,
-Conversion to RGBA>> and <<fxvertex-input-extraction,vertex input attribute
-extraction>>.
-
-These additional requirements may: be expensive on some implementations, and
-should only be enabled when truly necessary.
-
-This extension also adds support for "`null descriptors`", where
-dlink:VK_NULL_HANDLE can: be used instead of a valid handle.
-Accesses to null descriptors have well-defined behavior, and do not rely on
-robustness.
-
-include::{generated}/interfaces/VK_EXT_robustness2.txt[]
-
-=== Issues
-
-1. Why do
-   slink:VkPhysicalDeviceRobustness2PropertiesEXT::pname:robustUniformBufferAccessSizeAlignment
-   and
-   slink:VkPhysicalDeviceRobustness2PropertiesEXT::pname:robustStorageBufferAccessSizeAlignment
-   exist?
-
-*RESOLVED*: Some implementations cannot efficiently tightly bounds-check all
-buffer accesses.
-Rather, the size of the bound range is padded to some power of two multiple,
-up to 256 bytes for uniform buffers and up to 4 bytes for storage buffers,
-and that padded size is bounds-checked.
-This is sufficient to implement D3D-like behavior, because D3D only allows
-binding whole uniform buffers or ranges that are a multiple of 256 bytes,
-and D3D raw and structured buffers only support 32-bit accesses.
-
-=== Examples
-
-None.
-
-=== Version History
-
-    * Revision 1, 2019-11-01 (Jeff Bolz, Liam Middlebrook)
-        - Initial draft
diff --git a/registry/vulkan/appendices/VK_EXT_sample_locations.txt b/registry/vulkan/appendices/VK_EXT_sample_locations.txt
deleted file mode 100644
index 7b89491..0000000
--- a/registry/vulkan/appendices/VK_EXT_sample_locations.txt
+++ /dev/null
@@ -1,59 +0,0 @@
-// Copyright 2017-2021 The Khronos Group Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-include::{generated}/meta/{refprefix}VK_EXT_sample_locations.txt[]
-
-=== Other Extension Metadata
-
-*Last Modified Date*::
-    2017-08-02
-*Contributors*::
-  - Mais Alnasser, AMD
-  - Matthaeus G. Chajdas, AMD
-  - Maciej Jesionowski, AMD
-  - Daniel Rakos, AMD
-  - Slawomir Grajewski, Intel
-  - Jeff Bolz, NVIDIA
-  - Bill Licea-Kane, Qualcomm
-
-=== Description
-
-This extension allows an application to modify the locations of samples
-within a pixel used in rasterization.
-Additionally, it allows applications to specify different sample locations
-for each pixel in a group of adjacent pixels, which can: increase
-antialiasing quality (particularly if a custom resolve shader is used that
-takes advantage of these different locations).
-
-It is common for implementations to optimize the storage of depth values by
-storing values that can: be used to reconstruct depth at each sample
-location, rather than storing separate depth values for each sample.
-For example, the depth values from a single triangle may: be represented
-using plane equations.
-When the depth value for a sample is needed, it is automatically evaluated
-at the sample location.
-Modifying the sample locations causes the reconstruction to no longer
-evaluate the same depth values as when the samples were originally
-generated, thus the depth aspect of a depth/stencil attachment must: be
-cleared before rendering to it using different sample locations.
-
-Some implementations may: need to evaluate depth image values while
-performing image layout transitions.
-To accommodate this, instances of the slink:VkSampleLocationsInfoEXT
-structure can: be specified for each situation where an explicit or
-automatic layout transition has to take place.
-slink:VkSampleLocationsInfoEXT can: be chained from
-slink:VkImageMemoryBarrier structures to provide sample locations for layout
-transitions performed by flink:vkCmdWaitEvents and
-flink:vkCmdPipelineBarrier calls, and
-slink:VkRenderPassSampleLocationsBeginInfoEXT can: be chained from
-slink:VkRenderPassBeginInfo to provide sample locations for layout
-transitions performed implicitly by a render pass instance.
-
-include::{generated}/interfaces/VK_EXT_sample_locations.txt[]
-
-=== Version History
-
- * Revision 1, 2017-08-02 (Daniel Rakos)
-   - Internal revisions
diff --git a/registry/vulkan/appendices/VK_EXT_sampler_filter_minmax.txt b/registry/vulkan/appendices/VK_EXT_sampler_filter_minmax.txt
deleted file mode 100644
index 7d1832d..0000000
--- a/registry/vulkan/appendices/VK_EXT_sampler_filter_minmax.txt
+++ /dev/null
@@ -1,50 +0,0 @@
-// Copyright 2017-2021 The Khronos Group Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-include::{generated}/meta/{refprefix}VK_EXT_sampler_filter_minmax.txt[]
-
-=== Other Extension Metadata
-
-*Last Modified Date*::
-    2017-05-19
-*Interactions and External Dependencies*::
-  - Promoted to Vulkan 1.2 Core
-*IP Status*::
-    No known IP claims.
-*Contributors*::
-  - Jeff Bolz, NVIDIA
-  - Piers Daniell, NVIDIA
-
-=== Description
-
-In unextended Vulkan, minification and magnification filters such as LINEAR
-allow sampled image lookups to return a filtered texel value produced by
-computing a weighted average of a collection of texels in the neighborhood
-of the texture coordinate provided.
-
-This extension provides a new sampler parameter which allows applications to
-produce a filtered texel value by computing a component-wise minimum (MIN)
-or maximum (MAX) of the texels that would normally be averaged.
-The reduction mode is orthogonal to the minification and magnification
-filter parameters.
-The filter parameters are used to identify the set of texels used to produce
-a final filtered value; the reduction mode identifies how these texels are
-combined.
-
-=== Promotion to Vulkan 1.2
-
-All functionality in this extension is included in core Vulkan 1.2, with the
-EXT suffix omitted.
-The original type, enum and command names are still available as aliases of
-the core functionality.
-
-include::{generated}/interfaces/VK_EXT_sampler_filter_minmax.txt[]
-
-=== Version History
-
- * Revision 2, 2017-05-19 (Piers Daniell)
-   - Renamed to EXT
-
- * Revision 1, 2017-03-25 (Jeff Bolz)
-   - Internal revisions
diff --git a/registry/vulkan/appendices/VK_EXT_scalar_block_layout.txt b/registry/vulkan/appendices/VK_EXT_scalar_block_layout.txt
deleted file mode 100644
index c7e9da6..0000000
--- a/registry/vulkan/appendices/VK_EXT_scalar_block_layout.txt
+++ /dev/null
@@ -1,41 +0,0 @@
-// Copyright 2017-2021 The Khronos Group, Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-include::{generated}/meta/{refprefix}VK_EXT_scalar_block_layout.txt[]
-
-=== Other Extension Metadata
-
-*Last Modified Date*::
-    2018-11-14
-*Interactions and External Dependencies*::
-  - Promoted to Vulkan 1.2 Core
-*Contributors*::
-  - Jeff Bolz
-  - Jan-Harald Fredriksen
-  - Graeme Leese
-  - Jason Ekstrand
-  - John Kessenich
-
-=== Description
-
-This extension enables C-like structure layout for SPIR-V blocks.
-It modifies the alignment rules for uniform buffers, storage buffers and
-push constants, allowing non-scalar types to be aligned solely based on the
-size of their components, without additional requirements.
-
-=== Promotion to Vulkan 1.2
-
-Functionality in this extension is included in core Vulkan 1.2, with the EXT
-suffix omitted.
-However, if Vulkan 1.2 is supported and this extension is not, the
-code:scalarBlockLayout capability is optional.
-The original type, enum and command names are still available as aliases of
-the core functionality.
-
-include::{generated}/interfaces/VK_EXT_scalar_block_layout.txt[]
-
-=== Version History
-
-  * Revision 1, 2018-11-14 (Tobias Hector)
-    - Initial draft
diff --git a/registry/vulkan/appendices/VK_EXT_separate_stencil_usage.txt b/registry/vulkan/appendices/VK_EXT_separate_stencil_usage.txt
deleted file mode 100644
index e29c025..0000000
--- a/registry/vulkan/appendices/VK_EXT_separate_stencil_usage.txt
+++ /dev/null
@@ -1,36 +0,0 @@
-// Copyright 2018-2021 The Khronos Group Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-include::{generated}/meta/{refprefix}VK_EXT_separate_stencil_usage.txt[]
-
-=== Other Extension Metadata
-
-*Last Modified Date*::
-    2018-11-08
-*Interactions and External Dependencies*::
-  - Promoted to Vulkan 1.2 Core
-*IP Status*::
-    No known IP claims.
-*Contributors*::
-  - Daniel Rakos, AMD
-  - Jordan Logan, AMD
-
-=== Description
-
-This extension allows specifying separate usage flags for the stencil aspect
-of images with a depth-stencil format at image creation time.
-
-=== Promotion to Vulkan 1.2
-
-All functionality in this extension is included in core Vulkan 1.2, with the
-EXT suffix omitted.
-The original type, enum and command names are still available as aliases of
-the core functionality.
-
-include::{generated}/interfaces/VK_EXT_separate_stencil_usage.txt[]
-
-=== Version History
-
-  * Revision 1, 2018-11-08 (Daniel Rakos)
-    - Internal revisions.
diff --git a/registry/vulkan/appendices/VK_EXT_shader_atomic_float.txt b/registry/vulkan/appendices/VK_EXT_shader_atomic_float.txt
deleted file mode 100644
index acdb7dd..0000000
--- a/registry/vulkan/appendices/VK_EXT_shader_atomic_float.txt
+++ /dev/null
@@ -1,44 +0,0 @@
-// Copyright 2018-2021 The Khronos Group Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-include::{generated}/meta/{refprefix}VK_EXT_shader_atomic_float.txt[]
-
-=== Other Extension Metadata
-
-*Last Modified Date*::
-    2020-07-15
-*IP Status*::
-    No known IP claims.
-*Interactions and External Dependencies*::
-  - This extension requires
-    {spirv}/EXT/SPV_EXT_shader_atomic_float_add.html[`SPV_EXT_shader_atomic_float_add`]
-  - This extension provides API support for
-    https://github.com/KhronosGroup/GLSL/tree/master/extensions/ext/GLSL_EXT_shader_atomic_float.txt[`GL_EXT_shader_atomic_float`]
-*Contributors*::
-  - Vikram Kushwaha, NVIDIA
-  - Jeff Bolz, NVIDIA
-
-=== Description
-
-This extension allows a shader to contain floating-point atomic operations
-on buffer, workgroup, and image memory.
-It also advertises the SPIR-V code:AtomicFloat32AddEXT and
-code:AtomicFloat64AddEXT capabilities that allows atomic addition on
-floating-points numbers.
-The supported operations include code:OpAtomicFAddEXT,
-code:OpAtomicExchange, code:OpAtomicLoad and code:OpAtomicStore.
-
-include::{generated}/interfaces/VK_EXT_shader_atomic_float.txt[]
-
-=== New SPIR-V Capabilities
-
-  * <<spirvenv-capabilities-table-AtomicFloat32AddEXT,
-    code:AtomicFloat32AddEXT>>
-  * <<spirvenv-capabilities-table-AtomicFloat64AddEXT,
-    code:AtomicFloat64AddEXT>>
-
-=== Version History
-
-  * Revision 1, 2020-07-15 (Vikram Kushwaha)
-    - Internal revisions
diff --git a/registry/vulkan/appendices/VK_EXT_shader_atomic_float2.txt b/registry/vulkan/appendices/VK_EXT_shader_atomic_float2.txt
deleted file mode 100755
index 905db95..0000000
--- a/registry/vulkan/appendices/VK_EXT_shader_atomic_float2.txt
+++ /dev/null
@@ -1,66 +0,0 @@
-// Copyright (c) 2018-2020 The Khronos Group Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-include::{generated}/meta/{refprefix}VK_EXT_shader_atomic_float2.txt[]
-
-=== Other Extension Metadata
-
-*Last Modified Date*::
-    2020-08-14
-*IP Status*::
-    No known IP claims.
-*Interactions and External Dependencies*::
-  - This extension requires the VK_EXT_shader_atomic_float extension.
-  - This extension requires
-    {spirv}/EXT/SPV_EXT_shader_atomic_float_min_max.html[`SPV_EXT_shader_atomic_float_min_max`]
-    and
-    {spirv}/EXT/SPV_EXT_shader_atomic_float16_add.html[`SPV_EXT_shader_atomic_float16_add`]
-  - This extension provides API support for
-    https://github.com/KhronosGroup/GLSL/blob/master/extensions/ext/GLSL_EXT_shader_atomic_float2.txt[`GLSL_EXT_shader_atomic_float2`]
-*Contributors*::
-  - Jason Ekstrand, Intel
-
-=== Description
-
-This extension allows a shader to perform 16-bit floating-point atomic
-operations on buffer and workgroup memory as well as floating-point atomic
-minimum and maximum operations on buffer, workgroup, and image memory.
-It advertises the SPIR-V code:AtomicFloat16AddEXT capability which allows
-atomic add operations on 16-bit floating-point numbers and the SPIR-V
-code:AtomicFloat16MinMaxEXT, code:AtomicFloat32MinMaxEXT and
-code:AtomicFloat64MinMaxEXT capabilities which allow atomic minimum and
-maximum operations on floating-point numbers.
-The supported operations include code:OpAtomicFAddEXT, code:OpAtomicFMinEXT
-and code:OpAtomicFMaxEXT.
-
-include::{generated}/interfaces/VK_EXT_shader_atomic_float2.txt[]
-
-=== Issues
-
-1) Should this extension add support for 16-bit image atomics?
-
-*RESOLVED*: No.
-While Vulkan supports creating storage images with
-ename:VK_FORMAT_R16_SFLOAT and doing load and store on them, the data in the
-shader has a 32-bit representation.
-Vulkan currently has no facility for even basic reading or writing such
-images using 16-bit float values in the shader.
-Adding such functionality would be required before 16-bit image atomics
-would make sense and is outside the scope of this extension.
-
-=== New SPIR-V Capabilities
-
-  * <<spirvenv-capabilities-table-AtomicFloat16AddEXT,
-    code:AtomicFloat32MinMaxEXT>>
-  * <<spirvenv-capabilities-table-AtomicFloat16MinMaxEXT,
-    code:AtomicFloat32MinMaxEXT>>
-  * <<spirvenv-capabilities-table-AtomicFloat32MinMaxEXT,
-    code:AtomicFloat32MinMaxEXT>>
-  * <<spirvenv-capabilities-table-AtomicFloat64MinMaxEXT,
-    code:AtomicFloat64MinMaxEXT>>
-
-=== Version History
-
-  * Revision 1, 2020-08-14 (Jason Ekstrand)
-    - Internal revisions
diff --git a/registry/vulkan/appendices/VK_EXT_shader_demote_to_helper_invocation.txt b/registry/vulkan/appendices/VK_EXT_shader_demote_to_helper_invocation.txt
deleted file mode 100644
index 26346bc..0000000
--- a/registry/vulkan/appendices/VK_EXT_shader_demote_to_helper_invocation.txt
+++ /dev/null
@@ -1,41 +0,0 @@
-// Copyright 2019-2021 The Khronos Group Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-include::{generated}/meta/{refprefix}VK_EXT_shader_demote_to_helper_invocation.txt[]
-
-=== Other Extension Metadata
-
-*Last Modified Date*::
-    2019-06-01
-*IP Status*::
-    No known IP claims.
-*Interactions and External Dependencies*::
-  - This extension requires
-    {spirv}/EXT/SPV_EXT_demote_to_helper_invocation.html[`SPV_EXT_demote_to_helper_invocation`]
-*Contributors*::
-  - Jeff Bolz, NVIDIA
-
-=== Description
-
-This extension adds Vulkan support for the
-{spirv}/EXT/SPV_EXT_demote_to_helper_invocation.html[`SPV_EXT_demote_to_helper_invocation`]
-SPIR-V extension.
-That SPIR-V extension provides a new instruction
-code:OpDemoteToHelperInvocationEXT allowing shaders to "`demote`" a fragment
-shader invocation to behave like a helper invocation for its duration.
-The demoted invocation will have no further side effects and will not output
-to the framebuffer, but remains active and can participate in computing
-derivatives and in <<shaders-group-operations, group operations>>.
-This is a better match for the "`discard`" instruction in HLSL.
-
-include::{generated}/interfaces/VK_EXT_shader_demote_to_helper_invocation.txt[]
-
-=== New SPIR-V Capability
-
-  * <<spirvenv-capabilities-table-DemoteToHelperInvocationEXT,DemoteToHelperInvocationEXT>>
-
-=== Version History
-
- * Revision 1, 2019-06-01 (Jeff Bolz)
-   - Initial draft
diff --git a/registry/vulkan/appendices/VK_EXT_shader_image_atomic_int64.txt b/registry/vulkan/appendices/VK_EXT_shader_image_atomic_int64.txt
deleted file mode 100644
index 322a0a7..0000000
--- a/registry/vulkan/appendices/VK_EXT_shader_image_atomic_int64.txt
+++ /dev/null
@@ -1,47 +0,0 @@
-// Copyright 2020-2021 The Khronos Group Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-include::{generated}/meta/{refprefix}VK_EXT_shader_image_atomic_int64.txt[]
-
-=== Other Extension Metadata
-
-*Last Modified Date*::
-    2020-07-14
-*IP Status*::
-    No known IP claims.
-*Contributors*::
-  - Matthaeus Chajdas, AMD
-  - Graham Wihlidal, Epic Games
-  - Tobias Hector, AMD
-  - Jeff Bolz, Nvidia
-  - Jason Ekstrand, Intel
-*Interactions and External Dependencies*::
-  - This extension requires the
-    {spirv}/EXT/SPV_EXT_shader_image_int64.html[`SPV_EXT_shader_image_int64`]
-    SPIR-V extension.
-  - This extension requires the
-    https://github.com/KhronosGroup/GLSL/blob/master/extensions/ext/GLSL_EXT_shader_image_int64.txt[`GLSL_EXT_shader_image_int64`]
-    extension for GLSL source languages.
-
-=== Description
-
-This extension extends existing 64-bit integer atomic support to enable
-these operations on images as well.
-
-When working with large 2- or 3-dimensional data sets (e.g. rasterization or
-screen-space effects), image accesses are generally more efficient than
-equivalent buffer accesses.
-This extension allows applications relying on 64-bit integer atomics in this
-manner to quickly improve performance with only relatively minor code
-changes.
-
-64-bit integer atomic support is guaranteed for optimally tiled images with
-the ename:VK_FORMAT_R64_UINT and ename:VK_FORMAT_R64_SINT formats.
-
-include::{generated}/interfaces/VK_EXT_shader_image_atomic_int64.txt[]
-
-=== Version History
-
- * Revision 1, 2020-07-14 (Tobias Hector)
-   - Initial draft
diff --git a/registry/vulkan/appendices/VK_EXT_shader_stencil_export.txt b/registry/vulkan/appendices/VK_EXT_shader_stencil_export.txt
deleted file mode 100644
index 4b45ac4..0000000
--- a/registry/vulkan/appendices/VK_EXT_shader_stencil_export.txt
+++ /dev/null
@@ -1,36 +0,0 @@
-// Copyright 2017-2021 The Khronos Group Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-include::{generated}/meta/{refprefix}VK_EXT_shader_stencil_export.txt[]
-
-=== Other Extension Metadata
-
-*Last Modified Date*::
-    2017-07-19
-*IP Status*::
-    No known IP claims.
-*Interactions and External Dependencies*::
-  - This extension requires
-    {spirv}/EXT/SPV_EXT_shader_stencil_export.html[`SPV_EXT_shader_stencil_export`]
-  - This extension provides API support for
-    https://www.khronos.org/registry/OpenGL/extensions/ARB/ARB_shader_stencil_export.txt[`GL_ARB_shader_stencil_export`]
-*Contributors*::
-  - Dominik Witczak, AMD
-  - Daniel Rakos, AMD
-  - Rex Xu, AMD
-
-=== Description
-
-This extension adds support for the SPIR-V extension
-`SPV_EXT_shader_stencil_export`, providing a mechanism whereby a shader may
-generate the stencil reference value per invocation.
-When stencil testing is enabled, this allows the test to be performed
-against the value generated in the shader.
-
-include::{generated}/interfaces/VK_EXT_shader_stencil_export.txt[]
-
-=== Version History
-
- * Revision 1, 2017-07-19 (Dominik Witczak)
-   - Initial draft
diff --git a/registry/vulkan/appendices/VK_EXT_shader_subgroup_ballot.txt b/registry/vulkan/appendices/VK_EXT_shader_subgroup_ballot.txt
deleted file mode 100644
index 9d6d55a..0000000
--- a/registry/vulkan/appendices/VK_EXT_shader_subgroup_ballot.txt
+++ /dev/null
@@ -1,101 +0,0 @@
-// Copyright 2016-2021 The Khronos Group Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-include::{generated}/meta/{refprefix}VK_EXT_shader_subgroup_ballot.txt[]
-
-=== Other Extension Metadata
-
-*Last Modified Date*::
-    2016-11-28
-*IP Status*::
-    No known IP claims.
-*Interactions and External Dependencies*::
-  - This extension requires
-    {spirv}/KHR/SPV_KHR_shader_ballot.html[`SPV_KHR_shader_ballot`]
-  - This extension provides API support for
-    https://www.khronos.org/registry/OpenGL/extensions/ARB/ARB_shader_ballot.txt[`GL_ARB_shader_ballot`]
-*Contributors*::
-  - Jeff Bolz, NVIDIA
-  - Neil Henning, Codeplay
-  - Daniel Koch, NVIDIA Corporation
-
-=== Description
-
-This extension adds support for the following SPIR-V extension in Vulkan:
-
-  * `SPV_KHR_shader_ballot`
-
-This extension provides the ability for a group of invocations, which
-execute in parallel, to do limited forms of cross-invocation communication
-via a group broadcast of a invocation value, or broadcast of a bitarray
-representing a predicate value from each invocation in the group.
-
-This extension provides access to a number of additional built-in shader
-variables in Vulkan:
-
-  * code:SubgroupEqMaskKHR, which contains the subgroup mask of the current
-    subgroup invocation,
-  * code:SubgroupGeMaskKHR, which contains the subgroup mask of the
-    invocations greater than or equal to the current invocation,
-  * code:SubgroupGtMaskKHR, which contains the subgroup mask of the
-    invocations greater than the current invocation,
-  * code:SubgroupLeMaskKHR, which contains the subgroup mask of the
-    invocations less than or equal to the current invocation,
-  * code:SubgroupLtMaskKHR, which contains the subgroup mask of the
-    invocations less than the current invocation,
-  * code:SubgroupLocalInvocationId, which contains the index of an
-    invocation within a subgroup, and
-  * code:SubgroupSize, which contains the maximum number of invocations in a
-    subgroup.
-
-Additionally, this extension provides access to the new SPIR-V instructions:
-
-  * code:OpSubgroupBallotKHR,
-  * code:OpSubgroupFirstInvocationKHR, and
-  * code:OpSubgroupReadInvocationKHR,
-
-When using GLSL source-based shader languages, the following variables and
-shader functions from GL_ARB_shader_ballot can map to these SPIR-V built-in
-decorations and instructions:
-
-  * `in uint64_t gl_SubGroupEqMaskARB;` -> code:SubgroupEqMaskKHR,
-  * `in uint64_t gl_SubGroupGeMaskARB;` -> code:SubgroupGeMaskKHR,
-  * `in uint64_t gl_SubGroupGtMaskARB;` -> code:SubgroupGtMaskKHR,
-  * `in uint64_t gl_SubGroupLeMaskARB;` -> code:SubgroupLeMaskKHR,
-  * `in uint64_t gl_SubGroupLtMaskARB;` -> code:SubgroupLtMaskKHR,
-  * `in uint gl_SubGroupInvocationARB;` -> code:SubgroupLocalInvocationId,
-  * `uniform uint gl_SubGroupSizeARB;` -> code:SubgroupSize,
-  * code:ballotARB() -> code:OpSubgroupBallotKHR,
-  * code:readFirstInvocationARB() -> code:OpSubgroupFirstInvocationKHR, and
-  * code:readInvocationARB() -> code:OpSubgroupReadInvocationKHR.
-
-=== Deprecated by Vulkan 1.2
-
-Most of the functionality in this extension is superseded by the core Vulkan
-1.1 <<VkPhysicalDeviceSubgroupProperties, subgroup operations>>.
-However, Vulkan 1.1 required the code:OpGroupNonUniformBroadcast "`Id`" to
-be constant.
-This restriction was removed in Vulkan 1.2 with the addition of the
-<<features-subgroupBroadcastDynamicId,subgroupBroadcastDynamicId>> feature.
-
-include::{generated}/interfaces/VK_EXT_shader_subgroup_ballot.txt[]
-
-=== New Built-In Variables
-
-  * <<interfaces-builtin-variables-sgeq,code:SubgroupEqMaskKHR>>
-  * <<interfaces-builtin-variables-sgge,code:SubgroupGeMaskKHR>>
-  * <<interfaces-builtin-variables-sggt,code:SubgroupGtMaskKHR>>
-  * <<interfaces-builtin-variables-sgle,code:SubgroupLeMaskKHR>>
-  * <<interfaces-builtin-variables-sglt,code:SubgroupLtMaskKHR>>
-  * <<interfaces-builtin-variables-sgli,code:SubgroupLocalInvocationId>>
-  * <<interfaces-builtin-variables-sgs,code:SubgroupSize>>
-
-=== New SPIR-V Capabilities
-
-  * <<spirvenv-capabilities-table-SubgroupBallotKHR,SubgroupBallotKHR>>
-
-=== Version History
-
-  * Revision 1, 2016-11-28 (Daniel Koch)
-    - Initial draft
diff --git a/registry/vulkan/appendices/VK_EXT_shader_subgroup_vote.txt b/registry/vulkan/appendices/VK_EXT_shader_subgroup_vote.txt
deleted file mode 100644
index f55c480..0000000
--- a/registry/vulkan/appendices/VK_EXT_shader_subgroup_vote.txt
+++ /dev/null
@@ -1,117 +0,0 @@
-// Copyright 2016-2021 The Khronos Group Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-include::{generated}/meta/{refprefix}VK_EXT_shader_subgroup_vote.txt[]
-
-=== Other Extension Metadata
-
-*Last Modified Date*::
-    2016-11-28
-*IP Status*::
-    No known IP claims.
-*Interactions and External Dependencies*::
-  - This extension requires
-    {spirv}/KHR/SPV_KHR_subgroup_vote.html[`SPV_KHR_subgroup_vote`]
-  - This extension provides API support for
-    https://www.khronos.org/registry/OpenGL/extensions/ARB/ARB_shader_group_vote.txt[`GL_ARB_shader_group_vote`]
-*Contributors*::
-  - Neil Henning, Codeplay
-  - Daniel Koch, NVIDIA Corporation
-
-=== Description
-
-This extension adds support for the following SPIR-V extension in Vulkan:
-
-  * `SPV_KHR_subgroup_vote`
-
-This extension provides new SPIR-V instructions:
-
-  * code:OpSubgroupAllKHR,
-  * code:OpSubgroupAnyKHR, and
-  * code:OpSubgroupAllEqualKHR.
-
-to compute the composite of a set of boolean conditions across a group of
-shader invocations that are running concurrently (a _subgroup_).
-These composite results may be used to execute shaders more efficiently on a
-slink:VkPhysicalDevice.
-
-When using GLSL source-based shader languages, the following shader
-functions from GL_ARB_shader_group_vote can map to these SPIR-V
-instructions:
-
-  * code:anyInvocationARB() -> code:OpSubgroupAnyKHR,
-  * code:allInvocationsARB() -> code:OpSubgroupAllKHR, and
-  * code:allInvocationsEqualARB() -> code:OpSubgroupAllEqualKHR.
-
-The subgroup across which the boolean conditions are evaluated is
-implementation-dependent, and this extension provides no guarantee over how
-individual shader invocations are assigned to subgroups.
-In particular, a subgroup has no necessary relationship with the compute
-shader _local workgroup_ -- any pair of shader invocations in a compute
-local workgroup may execute in different subgroups as used by these
-instructions.
-
-Compute shaders operate on an explicitly specified group of threads (a local
-workgroup), but many implementations will also group non-compute shader
-invocations and execute them concurrently.
-When executing code like
-
-[source,c++]
-----------------------------------------
-if (condition) {
-  result = do_fast_path();
-} else {
-  result = do_general_path();
-}
-----------------------------------------
-
-where code:condition diverges between invocations, an implementation might
-first execute code:do_fast_path() for the invocations where code:condition
-is true and leave the other invocations dormant.
-Once code:do_fast_path() returns, it might call code:do_general_path() for
-invocations where code:condition is code:false and leave the other
-invocations dormant.
-In this case, the shader executes *both* the fast and the general path and
-might be better off just using the general path for all invocations.
-
-This extension provides the ability to avoid divergent execution by
-evaluating a condition across an entire subgroup using code like:
-
-[source,c++]
-----------------------------------------
-if (allInvocationsARB(condition)) {
-  result = do_fast_path();
-} else {
-  result = do_general_path();
-}
-----------------------------------------
-
-The built-in function code:allInvocationsARB() will return the same value
-for all invocations in the group, so the group will either execute
-code:do_fast_path() or code:do_general_path(), but never both.
-For example, shader code might want to evaluate a complex function
-iteratively by starting with an approximation of the result and then
-refining the approximation.
-Some input values may require a small number of iterations to generate an
-accurate result (code:do_fast_path) while others require a larger number
-(code:do_general_path).
-In another example, shader code might want to evaluate a complex function
-(code:do_general_path) that can be greatly simplified when assuming a
-specific value for one of its inputs (code:do_fast_path).
-
-=== Deprecated by Vulkan 1.1
-
-All functionality in this extension is superseded by the core Vulkan 1.1
-<<VkPhysicalDeviceSubgroupProperties, subgroup operations>>.
-
-include::{generated}/interfaces/VK_EXT_shader_subgroup_vote.txt[]
-
-=== New SPIR-V Capabilities
-
-  * <<spirvenv-capabilities-table-SubgroupVoteKHR,SubgroupVoteKHR>>
-
-=== Version History
-
-  * Revision 1, 2016-11-28 (Daniel Koch)
-    - Initial draft
diff --git a/registry/vulkan/appendices/VK_EXT_shader_viewport_index_layer.txt b/registry/vulkan/appendices/VK_EXT_shader_viewport_index_layer.txt
deleted file mode 100644
index 3b2a581..0000000
--- a/registry/vulkan/appendices/VK_EXT_shader_viewport_index_layer.txt
+++ /dev/null
@@ -1,90 +0,0 @@
-// Copyright 2017-2021 The Khronos Group Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-include::{generated}/meta/{refprefix}VK_EXT_shader_viewport_index_layer.txt[]
-
-=== Other Extension Metadata
-
-*Last Modified Date*::
-    2017-08-08
-*Interactions and External Dependencies*::
-  - Promoted to Vulkan 1.2 Core
-  - This extension requires
-    {spirv}/EXT/SPV_EXT_shader_viewport_index_layer.html[`SPV_EXT_shader_viewport_index_layer`]
-  - This extension provides API support for
-    https://www.khronos.org/registry/OpenGL/extensions/ARB/ARB_shader_viewport_layer_array.txt[`GL_ARB_shader_viewport_layer_array`],
-    https://www.khronos.org/registry/OpenGL/extensions/AMD/AMD_vertex_shader_layer.txt[`GL_AMD_vertex_shader_layer`],
-    https://www.khronos.org/registry/OpenGL/extensions/AMD/AMD_vertex_shader_viewport_index.txt[`GL_AMD_vertex_shader_viewport_index`],
-    and
-    https://www.khronos.org/registry/OpenGL/extensions/NV/NV_viewport_array2.txt[`GL_NV_viewport_array2`]
-  - This extension requires the pname:multiViewport feature.
-  - This extension interacts with the pname:tessellationShader feature.
-*Contributors*::
-  - Piers Daniell, NVIDIA
-  - Jeff Bolz, NVIDIA
-  - Jan-Harald Fredriksen, ARM
-  - Daniel Rakos, AMD
-  - Slawomir Grajeswki, Intel
-
-=== Description
-
-This extension adds support for the code:ShaderViewportIndexLayerEXT
-capability from the `SPV_EXT_shader_viewport_index_layer` extension in
-Vulkan.
-
-This extension allows variables decorated with the code:Layer and
-code:ViewportIndex built-ins to be exported from vertex or tessellation
-shaders, using the code:ShaderViewportIndexLayerEXT capability.
-
-When using GLSL source-based shading languages, the code:gl_ViewportIndex
-and code:gl_Layer built-in variables map to the SPIR-V code:ViewportIndex
-and code:Layer built-in decorations, respectively.
-Behaviour of these variables is extended as described in the
-`GL_ARB_shader_viewport_layer_array` (or the precursor
-`GL_AMD_vertex_shader_layer`, `GL_AMD_vertex_shader_viewport_index`, and
-`GL_NV_viewport_array2` extensions).
-
-ifdef::VK_NV_viewport_array2[]
-[NOTE]
-.Note
-====
-The code:ShaderViewportIndexLayerEXT capability is equivalent to the
-code:ShaderViewportIndexLayerNV capability added by
-`apiext:VK_NV_viewport_array2`.
-====
-endif::VK_NV_viewport_array2[]
-
-=== Promotion to Vulkan 1.2
-
-All functionality in this extension is included in core Vulkan 1.2.
-
-The single code:ShaderViewportIndexLayerEXT capability from the
-`SPV_EXT_shader_viewport_index_layer` extension is replaced by the
-<<spirvenv-capabilities-table-ShaderViewportIndex,code:ShaderViewportIndex>>
-and <<spirvenv-capabilities-table-ShaderLayer,code:ShaderLayer>>
-capabilities from SPIR-V 1.5 which are enabled by the
-<<features-shaderOutputViewportIndex,shaderOutputViewportIndex>> and
-<<features-shaderOutputLayer,shaderOutputLayer>> features, respectively.
-Additionally, if Vulkan 1.2 is supported but this extension is not, these
-capabilities are optional.
-
-Enabling both features is equivalent to enabling the
-`VK_EXT_shader_viewport_index_layer` extension.
-
-include::{generated}/interfaces/VK_EXT_shader_viewport_index_layer.txt[]
-
-=== New or Modified Built-In Variables
-
-  * (modified) <<interfaces-builtin-variables-layer,code:Layer>>
-  * (modified)
-    <<interfaces-builtin-variables-viewportindex,code:ViewportIndex>>
-
-=== New SPIR-V Capabilities
-
-  * <<spirvenv-capabilities-table-ShaderViewportIndexLayerEXT,code:ShaderViewportIndexLayerEXT>>
-
-=== Version History
-
-  * Revision 1, 2017-08-08 (Daniel Koch)
-    - Internal drafts
diff --git a/registry/vulkan/appendices/VK_EXT_subgroup_size_control.txt b/registry/vulkan/appendices/VK_EXT_subgroup_size_control.txt
deleted file mode 100644
index dab90f2..0000000
--- a/registry/vulkan/appendices/VK_EXT_subgroup_size_control.txt
+++ /dev/null
@@ -1,82 +0,0 @@
-// Copyright 2017-2021 The Khronos Group, Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-include::{generated}/meta/{refprefix}VK_EXT_subgroup_size_control.txt[]
-
-=== Other Extension Metadata
-
-*Last Modified Date*::
-    2019-03-05
-*Contributors*::
-  - Jeff Bolz, NVIDIA
-  - Jason Ekstrand, Intel
-  - Sławek Grajewski, Intel
-  - Jesse Hall, Google
-  - Neil Henning, AMD
-  - Daniel Koch, NVIDIA
-  - Jeff Leger, Qualcomm
-  - Graeme Leese, Broadcom
-  - Allan MacKinnon, Google
-  - Mariusz Merecki, Intel
-  - Graham Wihlidal, Electronic Arts
-
-
-=== Description
-
-This extension enables an implementation to control the subgroup size by
-allowing a varying subgroup size and also specifying a required subgroup
-size.
-
-It extends the subgroup support in Vulkan 1.1 to allow an implementation to
-expose a varying subgroup size.
-Previously Vulkan exposed a single subgroup size per physical device, with
-the expectation that implementations will behave as if all subgroups have
-the same size.
-Some implementations may: dispatch shaders with a varying subgroup size for
-different subgroups.
-As a result they could implicitly split a large subgroup into smaller
-subgroups or represent a small subgroup as a larger subgroup, some of whose
-invocations were inactive on launch.
-
-To aid developers in understanding the performance characteristics of their
-programs, this extension exposes a minimum and maximum subgroup size that a
-physical device supports and a pipeline create flag to enable that pipeline
-to vary its subgroup size.
-If enabled, any code:SubgroupSize decorated variables in the SPIR-V shader
-modules provided to pipeline creation may: vary between the
-<<limits-min-subgroup-size,minimum>> and
-<<limits-max-subgroup-size,maximum>> subgroup sizes.
-
-An implementation is also optionally allowed to support specifying a
-required subgroup size for a given pipeline stage.
-Implementations advertise which <<limits-required-subgroup-size-stages,
-stages support a required subgroup size>>, and any pipeline of a supported
-stage can be passed a
-slink:VkPipelineShaderStageRequiredSubgroupSizeCreateInfoEXT structure to
-set the subgroup size for that shader stage of the pipeline.
-For compute shaders, this requires the developer to query the
-<<limits-max-subgroups-per-workgroup, pname:maxComputeWorkgroupSubgroups>>
-and ensure that:
-
-[latexmath]
-++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-s = { WorkGroupSize.x \times WorkGroupSize.y \times WorkgroupSize.z \leq SubgroupSize \times maxComputeWorkgroupSubgroups }
-++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-Developers can also specify a new pipeline shader stage create flag that
-requires the implementation to have fully populated subgroups within local
-workgroups.
-This requires the workgroup size in the X dimension to be a multiple of the
-subgroup size.
-
-include::{generated}/interfaces/VK_EXT_subgroup_size_control.txt[]
-
-=== Version History
-
-  * Revision 1, 2019-03-05 (Neil Henning)
-    - Initial draft
-
-  * Revision 2, 2019-07-26 (Jason Ekstrand)
-    - Add the missing slink:VkPhysicalDeviceSubgroupSizeControlFeaturesEXT
-      for querying subgroup size control features.
diff --git a/registry/vulkan/appendices/VK_EXT_swapchain_colorspace.txt b/registry/vulkan/appendices/VK_EXT_swapchain_colorspace.txt
deleted file mode 100644
index 95e1a99..0000000
--- a/registry/vulkan/appendices/VK_EXT_swapchain_colorspace.txt
+++ /dev/null
@@ -1,58 +0,0 @@
-// Copyright 2016-2021 The Khronos Group Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-include::{generated}/meta/{refprefix}VK_EXT_swapchain_colorspace.txt[]
-
-=== Other Extension Metadata
-
-*Last Modified Date*::
-    2019-04-26
-*IP Status*::
-    No known IP claims.
-*Contributors*::
-  - Courtney Goeltzenleuchter, Google
-
-=== Description
-
-To be done.
-
-include::{generated}/interfaces/VK_EXT_swapchain_colorspace.txt[]
-
-=== Issues
-
-1) Does the spec need to specify which kinds of image formats support the
-color spaces?
-
-*RESOLVED*: Pixel format is independent of color space (though some color
-spaces really want / need floating point color components to be useful).
-Therefore, do not plan on documenting what formats support which
-colorspaces.
-An application can: call flink:vkGetPhysicalDeviceSurfaceFormatsKHR to query
-what a particular implementation supports.
-
-2) How does application determine if HW supports appropriate transfer
-function for a colorspace?
-
-*RESOLVED*: Extension indicates that implementation must: not do the OETF
-encoding if it is not sRGB.
-That responsibility falls to the application shaders.
-Any other native OETF / EOTF functions supported by an implementation can be
-described by separate extension.
-
-=== Version History
-
-  * Revision 1, 2016-12-27 (Courtney Goeltzenleuchter)
-    - Initial version
-
-  * Revision 2, 2017-01-19 (Courtney Goeltzenleuchter)
-    - Add pass through and multiple options for BT2020.
-    - Clean up some issues with equations not displaying properly.
-
-  * Revision 3, 2017-06-23 (Courtney Goeltzenleuchter)
-    - Add extended sRGB non-linear enum.
-
-  * Revision 4, 2019-04-26 (Graeme Leese)
-    - Clarify colorspace transfer function usage.
-    - Refer to normative definitions in the Data Format Specification.
-    - Clarify DCI-P3 and Display P3 usage.
diff --git a/registry/vulkan/appendices/VK_EXT_texel_buffer_alignment.txt b/registry/vulkan/appendices/VK_EXT_texel_buffer_alignment.txt
deleted file mode 100644
index af5ca5a..0000000
--- a/registry/vulkan/appendices/VK_EXT_texel_buffer_alignment.txt
+++ /dev/null
@@ -1,30 +0,0 @@
-// Copyright 2019-2021 The Khronos Group Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-include::{generated}/meta/{refprefix}VK_EXT_texel_buffer_alignment.txt[]
-
-=== Other Extension Metadata
-
-*Last Modified Date*::
-    2019-06-06
-*IP Status*::
-    No known IP claims.
-*Interactions and External Dependencies*::
-*Contributors*::
-  - Jeff Bolz, NVIDIA
-
-=== Description
-
-This extension adds more expressive alignment requirements for uniform and
-storage texel buffers.
-Some implementations have single texel alignment requirements that cannot be
-expressed via
-slink:VkPhysicalDeviceLimits::pname:minTexelBufferOffsetAlignment.
-
-include::{generated}/interfaces/VK_EXT_texel_buffer_alignment.txt[]
-
-=== Version History
-
-  * Revision 1, 2019-06-06 (Jeff Bolz)
-    - Initial draft
diff --git a/registry/vulkan/appendices/VK_EXT_texture_compression_astc_hdr.txt b/registry/vulkan/appendices/VK_EXT_texture_compression_astc_hdr.txt
deleted file mode 100644
index 441006c..0000000
--- a/registry/vulkan/appendices/VK_EXT_texture_compression_astc_hdr.txt
+++ /dev/null
@@ -1,60 +0,0 @@
-// Copyright 2019-2021 The Khronos Group Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-include::{generated}/meta/{refprefix}VK_EXT_texture_compression_astc_hdr.txt[]
-
-=== Other Extension Metadata
-
-*Last Modified Date*::
-    2019-05-28
-*IP Status*::
-    No known issues.
-*Contributors*::
-  - Jan-Harald Fredriksen, Arm
-
-=== Description
-
-This extension adds support for textures compressed using the Adaptive
-Scalable Texture Compression (ASTC) High Dynamic Range (HDR) profile.
-
-When this extension is enabled, the HDR profile is supported for all ASTC
-formats listed in <<appendix-compressedtex-astc, ASTC Compressed Image
-Formats>>.
-
-include::{generated}/interfaces/VK_EXT_texture_compression_astc_hdr.txt[]
-
-=== Issues
-
-1) Should we add a feature or limit for this functionality?
-
-Yes.
-It is consistent with the ASTC LDR support to add a feature like
-textureCompressionASTC_HDR.
-
-The feature is strictly speaking redundant as long as this is just an
-extension; it would be sufficient to just enable the extension.
-But adding the feature is more forward-looking if wanted to make this an
-optional core feature in the future.
-
-2) Should we introduce new format enums for HDR?
-
-Yes.
-Vulkan 1.0 describes the ASTC format enums as UNORM, e.g.
-ename:VK_FORMAT_ASTC_4x4_UNORM_BLOCK, so it is confusing to make these
-contain HDR data.
-Note that the OpenGL (ES) extensions did not make this distinction because a
-single ASTC HDR texture may contain both unorm and float blocks.
-Implementations may: not be able to distinguish between LDR and HDR ASTC
-textures internally and just treat them as the same format, i.e. if this
-extension is supported then sampling from a
-ename:VK_FORMAT_ASTC_4x4_UNORM_BLOCK image format may: return HDR results.
-Applications can: get predictable results by using the appropriate image
-format.
-
-
-=== Version History
-
-  * Revision 1, 2019-05-28 (Jan-Harald Fredriksen)
-    - Initial version
-
diff --git a/registry/vulkan/appendices/VK_EXT_tooling_info.txt b/registry/vulkan/appendices/VK_EXT_tooling_info.txt
deleted file mode 100644
index 67eb718..0000000
--- a/registry/vulkan/appendices/VK_EXT_tooling_info.txt
+++ /dev/null
@@ -1,81 +0,0 @@
-// Copyright 2018-2021 The Khronos Group Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-include::{generated}/meta/{refprefix}VK_EXT_tooling_info.txt[]
-
-=== Other Extension Metadata
-
-*Last Modified Date*::
-    2018-11-05
-*Contributors*::
-  - Rolando Caloca
-  - Matthaeus Chajdas
-  - Baldur Karlsson
-  - Daniel Rakos
-
-=== Description
-
-When an error occurs during application development, a common question is
-"What tools are actually running right now?" This extension adds the ability
-to query that information directly from the Vulkan implementation.
-
-Outdated versions of one tool might not play nicely with another, or perhaps
-a tool is not actually running when it should have been.
-Trying to figure that out can cause headaches as it is necessary to consult
-each known tool to figure out what is going on -- in some cases the tool
-might not even be known.
-
-Typically, the expectation is that developers will simply print out this
-information for visual inspection when an issue occurs, however a small
-amount of semantic information about what the tool is doing is provided to
-help identify it programmatically.
-For example, if the advertised limits or features of an implementation are
-unexpected, is there a tool active which modifies these limits? Or if an
-application is providing debug markers, but the implementation is not
-actually doing anything with that information, this can quickly point that
-out.
-
-include::{generated}/interfaces/VK_EXT_tooling_info.txt[]
-
-=== Examples
-
-.Printing Tool Information
-
-```
-uint32_t num_tools;
-VkPhysicalDeviceToolPropertiesEXT *pToolProperties;
-vkGetPhysicalDeviceToolPropertiesEXT(physicalDevice, &num_tools, NULL);
-
-pToolProperties = (VkPhysicalDeviceToolPropertiesEXT*)malloc(sizeof(VkPhysicalDeviceToolPropertiesEXT) * num_tools);
-
-vkGetPhysicalDeviceToolPropertiesEXT(physicalDevice, &num_tools, pToolProperties);
-
-for (int i = 0; i < num_tools; ++i) {
-    printf("%s:\n", pToolProperties[i].name);
-    printf("Version:\n");
-    printf("%s:\n", pToolProperties[i].version);
-    printf("Description:\n");
-    printf("\t%s\n", pToolProperties[i].description);
-    printf("Purposes:\n");
-    printf("\t%s\n", VkToolPurposeFlagBitsEXT_to_string(pToolProperties[i].purposes));
-    if (strnlen_s(pToolProperties[i].layer,VK_MAX_EXTENSION_NAME_SIZE) > 0) {
-        printf("Corresponding Layer:\n");
-        printf("\t%s\n", pToolProperties[i].layer);
-    }
-}
-```
-
-=== Issues
-
-1) Why is this information separate from the layer mechanism?
-
-Some tooling may be built into a driver, or be part of the Vulkan loader
-etc.
-- and so tying this information directly to layers would've been awkward at
-  best.
-
-=== Version History
-
- * Revision 1, 2018-11-05 (Tobias Hector)
-   - Initial draft
diff --git a/registry/vulkan/appendices/VK_EXT_transform_feedback.txt b/registry/vulkan/appendices/VK_EXT_transform_feedback.txt
deleted file mode 100644
index 75f0671..0000000
--- a/registry/vulkan/appendices/VK_EXT_transform_feedback.txt
+++ /dev/null
@@ -1,99 +0,0 @@
-// Copyright 2018-2021 The Khronos Group Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-include::{generated}/meta/{refprefix}VK_EXT_transform_feedback.txt[]
-
-=== Other Extension Metadata
-
-*Last Modified Date*::
-    2018-10-09
-*Contributors*::
-  - Baldur Karlsson, Valve
-  - Boris Zanin, Mobica
-  - Daniel Rakos, AMD
-  - Donald Scorgie, Imagination
-  - Henri Verbeet, CodeWeavers
-  - Jan-Harald Fredriksen, Arm
-  - Jason Ekstrand, Intel
-  - Jeff Bolz, NVIDIA
-  - Jesse Barker, Unity
-  - Jesse Hall, Google
-  - Pierre-Loup Griffais, Valve
-  - Philip Rebohle, DXVK
-  - Ruihao Zhang, Qualcomm
-  - Samuel Pitoiset, Valve
-  - Slawomir Grajewski, Intel
-  - Stu Smith, Imagination Technologies
-
-=== Description
-
-This extension adds transform feedback to the Vulkan API by exposing the
-SPIR-V code:TransformFeedback and code:GeometryStreams capabilities to
-capture vertex, tessellation or geometry shader outputs to one or more
-buffers.
-It adds API functionality to bind transform feedback buffers to capture the
-primitives emitted by the graphics pipeline from SPIR-V outputs decorated
-for transform feedback.
-The transform feedback capture can be paused and resumed by way of storing
-and retrieving a byte counter.
-The captured data can be drawn again where the vertex count is derived from
-the byte counter without CPU intervention.
-If the implementation is capable, a vertex stream other than zero can be
-rasterized.
-
-All these features are designed to match the full capabilities of OpenGL
-core transform feedback functionality and beyond.
-Many of the features are optional to allow base OpenGL ES GPUs to also
-implement this extension.
-
-The primary purpose of the functionality exposed by this extension is to
-support translation layers from other 3D APIs.
-This functionality is not considered forward looking, and is not expected to
-be promoted to a KHR extension or to core Vulkan.
-Unless this is needed for translation, it is recommended that developers use
-alternative techniques of using the GPU to process and capture vertex data.
-
-include::{generated}/interfaces/VK_EXT_transform_feedback.txt[]
-
-=== Issues
-
-1) Should we include pause/resume functionality?
-
-*RESOLVED*: Yes, this is needed to ease layering other APIs which have this
-functionality.
-To pause use fname:vkCmdEndTransformFeedbackEXT and provide valid buffer
-handles in the pname:pCounterBuffers array and offsets in the
-pname:pCounterBufferOffsets array for the implementation to save the resume
-points.
-Then to resume use fname:vkCmdBeginTransformFeedbackEXT with the previous
-pname:pCounterBuffers and pname:pCounterBufferOffsets values.
-Between the pause and resume there needs to be a memory barrier for the
-counter buffers with a source access of
-ename:VK_ACCESS_TRANSFORM_FEEDBACK_COUNTER_WRITE_BIT_EXT at pipeline stage
-ename:VK_PIPELINE_STAGE_TRANSFORM_FEEDBACK_BIT_EXT to a destination access
-of ename:VK_ACCESS_TRANSFORM_FEEDBACK_COUNTER_READ_BIT_EXT at pipeline stage
-ename:VK_PIPELINE_STAGE_TRANSFORM_FEEDBACK_BIT_EXT.
-
-2) How does this interact with multiview?
-
-*RESOLVED*: Transform feedback cannot be made active in a render pass with
-multiview enabled.
-
-3) How should queries be done?
-
-*RESOLVED*: There is a new query type
-ename:VK_QUERY_TYPE_TRANSFORM_FEEDBACK_STREAM_EXT.
-A query pool created with this type will capture 2 integers -
-numPrimitivesWritten and numPrimitivesNeeded - for the specified vertex
-stream output from the last
-<<pipeline-graphics-subsets-pre-rasterization,pre-rasterization shader
-stage>>.
-The vertex stream output queried is zero by default, but can be specified
-with the new fname:vkCmdBeginQueryIndexedEXT and
-fname:vkCmdEndQueryIndexedEXT commands.
-
-=== Version History
-
-  * Revision 1, 2018-10-09 (Piers Daniell)
-    - Internal revisions
diff --git a/registry/vulkan/appendices/VK_EXT_validation_cache.txt b/registry/vulkan/appendices/VK_EXT_validation_cache.txt
deleted file mode 100644
index 1c21e91..0000000
--- a/registry/vulkan/appendices/VK_EXT_validation_cache.txt
+++ /dev/null
@@ -1,35 +0,0 @@
-// Copyright 2017-2021 The Khronos Group Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-include::{generated}/meta/{refprefix}VK_EXT_validation_cache.txt[]
-
-=== Other Extension Metadata
-
-*Last Modified Date*::
-    2017-08-29
-*IP Status*::
-    No known IP claims.
-*Contributors*::
-  - Cort Stratton, Google
-  - Chris Forbes, Google
-
-=== Description
-
-This extension provides a mechanism for caching the results of potentially
-expensive internal validation operations across multiple runs of a Vulkan
-application.
-At the core is the slink:VkValidationCacheEXT object type, which is managed
-similarly to the existing slink:VkPipelineCache.
-
-The new struct slink:VkShaderModuleValidationCacheCreateInfoEXT can be
-included in the pname:pNext chain at flink:vkCreateShaderModule time.
-It contains a slink:VkValidationCacheEXT to use when validating the
-slink:VkShaderModule.
-
-include::{generated}/interfaces/VK_EXT_validation_cache.txt[]
-
-=== Version History
-
- * Revision 1, 2017-08-29 (Cort Stratton)
-   - Initial draft
diff --git a/registry/vulkan/appendices/VK_EXT_validation_features.txt b/registry/vulkan/appendices/VK_EXT_validation_features.txt
deleted file mode 100644
index aee0777..0000000
--- a/registry/vulkan/appendices/VK_EXT_validation_features.txt
+++ /dev/null
@@ -1,54 +0,0 @@
-// Copyright 2018-2021 The Khronos Group Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-include::{generated}/meta/{refprefix}VK_EXT_validation_features.txt[]
-
-=== Other Extension Metadata
-
-*Last Modified Date*::
-    2018-11-14
-*IP Status*::
-    No known IP claims.
-*Contributors*::
-  - Karl Schultz, LunarG
-  - Dave Houlton, LunarG
-  - Mark Lobodzinski, LunarG
-  - Camden Stocker, LunarG
-  - Tony Barbour, LunarG
-  - John Zulauf, LunarG
-
-=== Description
-
-This extension provides the slink:VkValidationFeaturesEXT struct that can be
-included in the pname:pNext chain of the slink:VkInstanceCreateInfo
-structure passed as the pname:pCreateInfo parameter of
-flink:vkCreateInstance.
-The structure contains an array of elink:VkValidationFeatureEnableEXT enum
-values that enable specific validation features that are disabled by
-default.
-The structure also contains an array of elink:VkValidationFeatureDisableEXT
-enum values that disable specific validation layer features that are enabled
-by default.
-
-[NOTE]
-.Note
-====
-The `apiext:VK_EXT_validation_features` extension subsumes all the
-functionality provided in the `apiext:VK_EXT_validation_flags` extension.
-====
-
-include::{generated}/interfaces/VK_EXT_validation_features.txt[]
-
-=== Version History
-
- * Revision 1, 2018-11-14 (Karl Schultz)
-   - Initial revision
- * Revision 2, 2019-08-06 (Mark Lobodzinski)
-   - Add Best Practices enable
- * Revision 3, 2020-03-04 (Tony Barbour)
-   - Add Debug Printf enable
- * Revision 4, 2020-07-29 (John Zulauf)
-   - Add Synchronization Validation enable
- * Revision 5, 2021-05-18 (Tony Barbour)
-   - Add Shader Validation Cache disable
diff --git a/registry/vulkan/appendices/VK_EXT_validation_flags.txt b/registry/vulkan/appendices/VK_EXT_validation_flags.txt
deleted file mode 100644
index 522c7a7..0000000
--- a/registry/vulkan/appendices/VK_EXT_validation_flags.txt
+++ /dev/null
@@ -1,37 +0,0 @@
-// Copyright 2016-2021 The Khronos Group Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-include::{generated}/meta/{refprefix}VK_EXT_validation_flags.txt[]
-
-=== Other Extension Metadata
-
-*Last Modified Date*::
-    2019-08-19
-*IP Status*::
-    No known IP claims.
-*Contributors*::
-  - Tobin Ehlis, Google
-  - Courtney Goeltzenleuchter, Google
-
-=== Description
-
-This extension provides the slink:VkValidationFlagsEXT struct that can be
-included in the pname:pNext chain of the slink:VkInstanceCreateInfo
-structure passed as the pname:pCreateInfo parameter of
-flink:vkCreateInstance.
-The structure contains an array of elink:VkValidationCheckEXT values that
-will be disabled by the validation layers.
-
-=== Deprecation by `VK_EXT_validation_features`
-Functionality in this extension is subsumed into the
-`apiext:VK_EXT_validation_features` extension.
-
-include::{generated}/interfaces/VK_EXT_validation_flags.txt[]
-
-=== Version History
-
- * Revision 2, 2019-08-19 (Mark Lobodzinski)
-   - Marked as deprecated
- * Revision 1, 2016-08-26 (Courtney Goeltzenleuchter)
-   - Initial draft
diff --git a/registry/vulkan/appendices/VK_EXT_vertex_attribute_divisor.txt b/registry/vulkan/appendices/VK_EXT_vertex_attribute_divisor.txt
deleted file mode 100644
index 9058d7d..0000000
--- a/registry/vulkan/appendices/VK_EXT_vertex_attribute_divisor.txt
+++ /dev/null
@@ -1,89 +0,0 @@
-// Copyright 2017-2021 The Khronos Group Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-include::{generated}/meta/{refprefix}VK_EXT_vertex_attribute_divisor.txt[]
-
-=== Other Extension Metadata
-
-*Last Modified Date*::
-    2018-08-03
-*IP Status*::
-    No known IP claims.
-*Contributors*::
-  - Vikram Kushwaha, NVIDIA
-  - Jason Ekstrand, Intel
-
-=== Description
-
-This extension allows instance-rate vertex attributes to be repeated for
-certain number of instances instead of advancing for every instance when
-instanced rendering is enabled.
-
-include::{generated}/interfaces/VK_EXT_vertex_attribute_divisor.txt[]
-
-=== Issues
-
-1) What is the effect of a non-zero value for pname:firstInstance?
-
-*RESOLVED*: The Vulkan API should follow the OpenGL convention and offset
-attribute fetching by pname:firstInstance while computing vertex attribute
-offsets.
-
-2) Should zero be an allowed divisor?
-
-*RESOLVED*: Yes.
-A zero divisor means the vertex attribute is repeated for all instances.
-
-
-=== Examples
-
-To create a vertex binding such that the first binding uses instanced
-rendering and the same attribute is used for every 4 draw instances, an
-application could use the following set of structures:
-
-
-[source,c++]
-----------------------------------------
-
-    const VkVertexInputBindingDivisorDescriptionEXT divisorDesc =
-    {
-        0,
-        4
-    };
-
-    const VkPipelineVertexInputDivisorStateCreateInfoEXT divisorInfo =
-    {
-        VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_DIVISOR_STATE_CREATE_INFO_EXT, // sType
-        NULL,                                                             // pNext
-        1,                                                                // vertexBindingDivisorCount
-        &divisorDesc                                                      // pVertexBindingDivisors
-    }
-
-    const VkVertexInputBindingDescription binding =
-    {
-        0,                                                                // binding
-        sizeof(Vertex),                                                   // stride
-        VK_VERTEX_INPUT_RATE_INSTANCE                                     // inputRate
-    };
-
-    const VkPipelineVertexInputStateCreateInfo viInfo =
-    {
-        VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_CREATE_INFO,              // sType
-        &divisorInfo,                                                     // pNext
-        ...
-    };
-    //...
-----------------------------------------
-
-=== Version History
-
-  * Revision 1, 2017-12-04 (Vikram Kushwaha)
-    - First Version
-  * Revision 2, 2018-07-16 (Jason Ekstrand)
-    - Adjust the interaction between pname:divisor and pname:firstInstance
-      to match the OpenGL convention.
-    - Disallow divisors of zero.
-  * Revision 3, 2018-08-03 (Vikram Kushwaha)
-    - Allow a zero divisor.
-    - Add a physical device features structure to query/enable this feature.
diff --git a/registry/vulkan/appendices/VK_EXT_vertex_input_dynamic_state.txt b/registry/vulkan/appendices/VK_EXT_vertex_input_dynamic_state.txt
deleted file mode 100644
index 9cae1e9..0000000
--- a/registry/vulkan/appendices/VK_EXT_vertex_input_dynamic_state.txt
+++ /dev/null
@@ -1,40 +0,0 @@
-// Copyright (c) 2019-2021 The Khronos Group Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-include::{generated}/meta/{refprefix}VK_EXT_vertex_input_dynamic_state.txt[]
-
-=== Other Extension Metadata
-
-*Last Modified Date*::
-    2020-08-21
-*IP Status*::
-    No known IP claims.
-*Contributors*::
-  - Jeff Bolz, NVIDIA
-  - Spencer Fricke, Samsung
-  - Stu Smith, AMD
-
-=== Description
-
-One of the states that contributes to the combinatorial explosion of
-pipeline state objects that need to be created, is the vertex input binding
-and attribute descriptions.
-By allowing them to be dynamic applications may reduce the number of
-pipeline objects they need to create.
-
-This extension adds dynamic state support for what is normally static state
-in slink:VkPipelineVertexInputStateCreateInfo.
-
-include::{generated}/interfaces/VK_EXT_vertex_input_dynamic_state.txt[]
-
-=== Version History
-
- * Revision 2, 2020-11-05 (Piers Daniell)
-   - Make slink:VkVertexInputBindingDescription2EXT extensible
-   - Add new slink:VkVertexInputAttributeDescription2EXT struct for the
-     pname:pVertexAttributeDescriptions parameter to
-     flink:vkCmdSetVertexInputEXT so it is also extensible
-
- * Revision 1, 2020-08-21 (Piers Daniell)
-   - Internal revisions
diff --git a/registry/vulkan/appendices/VK_EXT_video_decode_h264.txt b/registry/vulkan/appendices/VK_EXT_video_decode_h264.txt
deleted file mode 100644
index bb3c9b8..0000000
--- a/registry/vulkan/appendices/VK_EXT_video_decode_h264.txt
+++ /dev/null
@@ -1,37 +0,0 @@
-// Copyright (c) 2018-2021 The Khronos Group Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-include::{generated}/meta/{refprefix}VK_EXT_video_decode_h264.txt[]
-
-=== Other Extension Metadata
-
-*Last Modified Date*::
-    2021-03-29
-*IP Status*::
-    No known IP claims.
-*Contributors*::
-  - Chunbo Chen, Intel
-  - HoHin Lau, AMD
-  - Jake Beju, AMD
-  - Peter Fang, AMD
-  - Ping Liu, Intel
-  - Srinath Kumarapuram, NVIDIA
-  - Tony Zlatinski, NVIDIA
-
-include::{generated}/interfaces/VK_EXT_video_decode_h264.txt[]
-
-=== Version History
-
-  * Revision 1, 2018-6-11 (Peter Fang)
-    - Initial draft
-  * Revision 2, March 29 2021 (Tony Zlatinski)
-    - Spec and API Updates
-  * Revision 3, August 1 2021 (Srinath Kumarapuram)
-    - Rename `VkVideoDecodeH264FieldLayoutFlagsEXT` to
-     `VkVideoDecodeH264PictureLayoutFlagsEXT`,
-     `VkVideoDecodeH264FieldLayoutFlagBitsEXT` to
-     `VkVideoDecodeH264PictureLayoutFlagBitsEXT` (along with the names of
-     enumerants it defines), and `VkVideoDecodeH264ProfileEXT.fieldLayout`
-     to `VkVideoDecodeH264ProfileEXT.pictureLayout`, following Vulkan naming
-     conventions.
diff --git a/registry/vulkan/appendices/VK_EXT_video_decode_h265.txt b/registry/vulkan/appendices/VK_EXT_video_decode_h265.txt
deleted file mode 100644
index e13b4ae..0000000
--- a/registry/vulkan/appendices/VK_EXT_video_decode_h265.txt
+++ /dev/null
@@ -1,28 +0,0 @@
-// Copyright (c) 2018-2021 The Khronos Group Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-include::{generated}/meta/{refprefix}VK_EXT_video_decode_h265.txt[]
-
-=== Other Extension Metadata
-
-*Last Modified Date*::
-    2021-03-29
-*IP Status*::
-    No known IP claims.
-*Contributors*::
-  - HoHin Lau, AMD
-  - Jake Beju, AMD
-  - Peter Fang, AMD
-  - Ping Liu, Intel
-  - Srinath Kumarapuram, NVIDIA
-  - Tony Zlatinski, NVIDIA
-
-include::{generated}/interfaces/VK_EXT_video_decode_h265.txt[]
-
-=== Version History
-
- * Revision 1, 2018-6-11 (Peter Fang)
-   - Initial draft
- * Revision 1.6, March 29 2021 (Tony Zlatinski)
-   - Spec and API updates.
diff --git a/registry/vulkan/appendices/VK_EXT_video_encode_h264.txt b/registry/vulkan/appendices/VK_EXT_video_encode_h264.txt
deleted file mode 100644
index 98092b4..0000000
--- a/registry/vulkan/appendices/VK_EXT_video_encode_h264.txt
+++ /dev/null
@@ -1,42 +0,0 @@
-// Copyright (c) 2018-2021 The Khronos Group Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-include::{generated}/meta/{refprefix}VK_EXT_video_encode_h264.txt[]
-
-=== Other Extension Metadata
-
-*Last Modified Date*::
-    2021-03-29
-*IP Status*::
-    No known IP claims.
-*Contributors*::
-  - Ahmed Abdelkhalek, AMD
-  - Daniel Rakos, AMD
-  - George Hao, AMD
-  - Jake Beju, AMD
-  - Peter Fang, AMD
-  - Ping Liu, Intel
-  - Srinath Kumarapuram, NVIDIA
-  - Tony Zlatinski, NVIDIA
-  - Yang Liu, AMD
-
-include::{generated}/interfaces/VK_EXT_video_encode_h264.txt[]
-
-=== Version History
-
-  * Revision 0, 2018-7-23 (Ahmed Abdelkhalek)
-    - Initial draft
-  * Revision 0.5, 2020-02-13 (Tony Zlatinski)
-    - General Spec cleanup
-    - Added DPB structures
-    - Change the VCL frame encode structure
-    - Added a common Non-VCL Picture Paramarameters structure
-  * Revision 1, 2021-03-29 (Tony Zlatinski)
-    - Spec and API updates
-  * Revision 2, August 1 2021 (Srinath Kumarapuram)
-    - Rename `VkVideoEncodeH264CapabilitiesFlagsEXT` to
-     `VkVideoEncodeH264CapabilityFlagsEXT` and
-     `VkVideoEncodeH264CapabilitiesFlagsEXT` to
-     `VkVideoEncodeH264CapabilityFlagsEXT`, following Vulkan naming
-     conventions.
diff --git a/registry/vulkan/appendices/VK_EXT_video_encode_h265.txt b/registry/vulkan/appendices/VK_EXT_video_encode_h265.txt
deleted file mode 100644
index f53b10b..0000000
--- a/registry/vulkan/appendices/VK_EXT_video_encode_h265.txt
+++ /dev/null
@@ -1,39 +0,0 @@
-// Copyright (c) 2018-2021 The Khronos Group Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-include::{generated}/meta/{refprefix}VK_EXT_video_encode_h265.txt[]
-
-=== Other Extension Metadata
-
-*Last Modified Date*::
-    2020-01-22
-*IP Status*::
-    No known IP claims.
-*Contributors*::
-  - Ahmed Abdelkhalek, AMD
-  - George Hao, AMD
-  - Jake Beju, AMD
-  - Chunbo Chen, Intel
-  - Ping Liu, Intel
-  - Srinath Kumarapuram, NVIDIA
-  - Tony Zlatinski, NVIDIA
-
-=== Description
-
-This extension allows applications to compress a raw video sequence by using
-the H.265/HEVC video compression standard.
-
-include::{generated}/interfaces/VK_EXT_video_encode_h265.txt[]
-
-=== Version History
-
- * Revision 0, 2019-11-14 (Ahmed Abdelkhalek)
-   - Initial draft
- * Revision 0.5, 2020-02-13 (Tony Zlatinski)
-   - General Spec cleanup
-   - Added DPB structures
-   - Change the VCL frame encode structure
-   - Added a common Non-VCL Picture Paramarameters structure
- * Revision 2, Oct 10 2021 (Srinath Kumarapuram)
-   - Vulkan Video Encode h.265 update and spec edits
diff --git a/registry/vulkan/appendices/VK_EXT_ycbcr_2plane_444_formats.txt b/registry/vulkan/appendices/VK_EXT_ycbcr_2plane_444_formats.txt
deleted file mode 100644
index 9a79339..0000000
--- a/registry/vulkan/appendices/VK_EXT_ycbcr_2plane_444_formats.txt
+++ /dev/null
@@ -1,28 +0,0 @@
-// Copyright 2020-2021 The Khronos Group Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-include::{generated}/meta/{refprefix}VK_EXT_ycbcr_2plane_444_formats.txt[]
-
-=== Other Extension Metadata
-
-*Last Modified Date*::
-    2020-07-28
-*IP Status*::
-    No known IP claims.
-*Contributors*::
-  - Piers Daniell, NVIDIA
-  - Ping Liu, Intel
-
-=== Description
-
-This extension adds some {YCbCr} formats that are in common use for video
-encode and decode, but were not part of the
-`apiext:VK_KHR_sampler_ycbcr_conversion` extension.
-
-include::{generated}/interfaces/VK_EXT_ycbcr_2plane_444_formats.txt[]
-
-=== Version History
-
- * Revision 1, 2020-03-08 (Piers Daniell)
-   - Initial draft
diff --git a/registry/vulkan/appendices/VK_EXT_ycbcr_image_arrays.txt b/registry/vulkan/appendices/VK_EXT_ycbcr_image_arrays.txt
deleted file mode 100644
index 9ae0abb..0000000
--- a/registry/vulkan/appendices/VK_EXT_ycbcr_image_arrays.txt
+++ /dev/null
@@ -1,26 +0,0 @@
-// Copyright 2018-2021 The Khronos Group, Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-include::{generated}/meta/{refprefix}VK_EXT_ycbcr_image_arrays.txt[]
-
-=== Other Extension Metadata
-
-*Last Modified Date*::
-    2019-01-15
-*Contributors*::
-  - Piers Daniell, NVIDIA
-
-=== Description
-
-This extension allows images of a format that requires
-<<formats-requiring-sampler-ycbcr-conversion, {YCbCr} conversion>> to be
-created with multiple array layers, which is otherwise restricted.
-
-include::{generated}/interfaces/VK_EXT_ycbcr_image_arrays.txt[]
-
-=== Version History
-
- * Revision 1, 2019-01-15 (Piers Daniell)
-   - Initial revision
-
diff --git a/registry/vulkan/appendices/VK_FUCHSIA_buffer_collection.txt b/registry/vulkan/appendices/VK_FUCHSIA_buffer_collection.txt
deleted file mode 100644
index 99862ad..0000000
--- a/registry/vulkan/appendices/VK_FUCHSIA_buffer_collection.txt
+++ /dev/null
@@ -1,62 +0,0 @@
-// Copyright 2021 The Khronos Group, Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-include::{generated}/meta/{refprefix}VK_FUCHSIA_buffer_collection.txt[]
-
-=== Other Extension Metadata
-
-*Last Modified Date*::
-    2021-09-23
-*IP Status*::
-    No known IP claims.
-*Contributors*::
-  - Craig Stout, Google
-  - John Bauman, Google
-  - John Rosasco, Google
-
-=== Description
-A buffer collection is a collection of one or more buffers which were
-allocated together as a group and which all have the same properties.
-These properties describe the buffers’ internal representation such as its
-dimensions and memory layout.
-This ensures that all of the buffers can be used interchangeably by tasks
-that require swapping among multiple buffers, such as double-buffered
-graphics rendering.
-
-By sharing such a collection of buffers between components, communication
-about buffer lifecycle can be made much simpler and more efficient.
-For example, when a content producer finishes writing to a buffer, it can
-message the consumer of the buffer with the buffer index, rather than
-passing a handle to the shared memory.
-
-On Fuchsia, the Sysmem service uses buffer collections as a core construct
-in its design.
-VK_FUCHSIA_buffer_collection is the Vulkan extension that allows Vulkan
-applications to interoperate with the Sysmem service on Fuchsia.
-
-include::{generated}/interfaces/VK_FUCHSIA_buffer_collection.txt[]
-
-=== Issues
-
-1) When configuring a slink:VkImageConstraintsInfoFUCHSIA structure for
-constraint setting, should a NULL pname:pFormatConstraints parameter be
-allowed ?
-
-*RESOLVED*: No.
-Specifying a NULL pname:pFormatConstraints results in logical complexity of
-interpreting the relationship between the
-slink:VkImageCreateInfo::pname:usage settings of the elements of the
-pname:pImageCreateInfos array and the implied or desired
-tlink:VkFormatFeatureFlags.
-
-The explicit requirement for pname:pFormatConstraints to be non-NULL
-simplifies the implied logic of the implementation and expectations for the
-Vulkan application.
-
-=== Version History
-
-  * Revision 2, 2021-09-23 (John Rosasco)
-    - Review passes
-  * Revision 1, 2021-03-09 (John Rosasco)
-    - Initial revision
diff --git a/registry/vulkan/appendices/VK_FUCHSIA_external_memory.txt b/registry/vulkan/appendices/VK_FUCHSIA_external_memory.txt
deleted file mode 100644
index 053d944..0000000
--- a/registry/vulkan/appendices/VK_FUCHSIA_external_memory.txt
+++ /dev/null
@@ -1,37 +0,0 @@
-// Copyright (c) 2017-2021 Google Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-include::{generated}/meta/{refprefix}VK_FUCHSIA_external_memory.txt[]
-
-=== Other Extension Metadata
-
-*Last Modified Date*::
-    2021-03-01
-*IP Status*::
-    No known IP claims.
-*Contributors*::
-  - Craig Stout, Google
-  - John Bauman, Google
-  - John Rosasco, Google
-
-=== Description
-
-Vulkan apps may wish to export or import device memory handles to or from
-other logical devices, instances or APIs.
-
-This memory sharing can eliminate copies of memory buffers when different
-subsystems need to interoperate on them.
-Sharing memory buffers may also facilitate a better distribution of
-processing workload for more complex memory manipulation pipelines.
-
-include::{generated}/interfaces/VK_FUCHSIA_external_memory.txt[]
-
-=== Issues
-
-See `apiext:VK_KHR_external_memory` issues list for further information.
-
-=== Version History
-
-  * Revision 1, 2021-03-01 (John Rosasco)
-    - Initial draft
diff --git a/registry/vulkan/appendices/VK_FUCHSIA_external_semaphore.txt b/registry/vulkan/appendices/VK_FUCHSIA_external_semaphore.txt
deleted file mode 100644
index d3c8740..0000000
--- a/registry/vulkan/appendices/VK_FUCHSIA_external_semaphore.txt
+++ /dev/null
@@ -1,43 +0,0 @@
-// Copyright 2021 The Khronos Group, Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-include::{generated}/meta/{refprefix}VK_FUCHSIA_external_semaphore.txt[]
-
-=== Other Extension Metadata
-
-*Last Modified Date*::
-    2021-03-08
-*IP Status*::
-    No known IP claims.
-*Contributors*::
-  - Craig Stout, Google
-  - John Bauman, Google
-  - John Rosasco, Google
-
-=== Description
-
-An application using external memory may wish to synchronize access to that
-memory using semaphores.
-This extension enables an application to export semaphore payload to and
-import semaphore payload from Zircon event handles.
-
-include::{generated}/interfaces/VK_FUCHSIA_external_semaphore.txt[]
-
-=== Issues
-
-1) Does the application need to close the Zircon event handle returned by
-flink:vkGetSemaphoreZirconHandleFUCHSIA?
-
-*RESOLVED*: Yes, unless it is passed back in to a driver instance to import
-the semaphore.
-A successful get call transfers ownership of the Zircon event handle to the
-application, and a successful import transfers it back to the driver.
-Destroying the original semaphore object will not close the Zircon event
-handle nor remove its reference to the underlying semaphore resource
-associated with it.
-
-=== Version History
-
-  * Revision 1, 2021-03-08 (John Rosasco)
-    - Initial revision
diff --git a/registry/vulkan/appendices/VK_FUCHSIA_imagepipe_surface.txt b/registry/vulkan/appendices/VK_FUCHSIA_imagepipe_surface.txt
deleted file mode 100644
index 9519f2f..0000000
--- a/registry/vulkan/appendices/VK_FUCHSIA_imagepipe_surface.txt
+++ /dev/null
@@ -1,30 +0,0 @@
-// Copyright 2014-2021 The Khronos Group, Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-include::{generated}/meta/{refprefix}VK_FUCHSIA_imagepipe_surface.txt[]
-
-=== Other Extension Metadata
-
-*Last Modified Date*::
-    2018-07-27
-*IP Status*::
-    No known IP claims.
-*Contributors*::
-  - Craig Stout, Google
-  - Ian Elliott, Google
-  - Jesse Hall, Google
-
-=== Description
-
-The `VK_FUCHSIA_imagepipe_surface` extension is an instance extension.
-It provides a mechanism to create a slink:VkSurfaceKHR object (defined by
-the `apiext:VK_KHR_surface` extension) that refers to a Fuchsia
-code:imagePipeHandle.
-
-include::{generated}/interfaces/VK_FUCHSIA_imagepipe_surface.txt[]
-
-=== Version History
-
- * Revision 1, 2018-07-27 (Craig Stout)
-   - Initial draft.
diff --git a/registry/vulkan/appendices/VK_GGP_frame_token.txt b/registry/vulkan/appendices/VK_GGP_frame_token.txt
deleted file mode 100644
index e7a7f81..0000000
--- a/registry/vulkan/appendices/VK_GGP_frame_token.txt
+++ /dev/null
@@ -1,29 +0,0 @@
-// Copyright 2014-2021 The Khronos Group, Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-include::{generated}/meta/{refprefix}VK_GGP_frame_token.txt[]
-
-=== Other Extension Metadata
-
-*Last Modified Date*::
-    2019-01-28
-*IP Status*::
-    No known IP claims.
-*Contributors*::
-  - Jean-Francois Roy, Google
-  - Richard O'Grady, Google
-
-=== Description
-
-This extension allows an application that uses the `apiext:VK_KHR_swapchain`
-extension in combination with a Google Games Platform surface provided by
-the `apiext:VK_GGP_stream_descriptor_surface` extension to associate a
-Google Games Platform frame token with a present operation.
-
-include::{generated}/interfaces/VK_GGP_frame_token.txt[]
-
-=== Version History
-
- * Revision 1, 2018-11-26 (Jean-Francois Roy)
-   - Initial revision.
diff --git a/registry/vulkan/appendices/VK_GGP_stream_descriptor_surface.txt b/registry/vulkan/appendices/VK_GGP_stream_descriptor_surface.txt
deleted file mode 100644
index 9fbeb80..0000000
--- a/registry/vulkan/appendices/VK_GGP_stream_descriptor_surface.txt
+++ /dev/null
@@ -1,42 +0,0 @@
-// Copyright 2014-2021 The Khronos Group, Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-include::{generated}/meta/{refprefix}VK_GGP_stream_descriptor_surface.txt[]
-
-=== Other Extension Metadata
-
-*Last Modified Date*::
-    2019-01-28
-*IP Status*::
-    No known IP claims.
-*Contributors*::
-  - Jean-Francois Roy, Google
-  - Brad Grantham, Google
-  - Connor Smith, Google
-  - Cort Stratton, Google
-  - Hai Nguyen, Google
-  - Ian Elliott, Google
-  - Jesse Hall, Google
-  - Jim Ray, Google
-  - Katherine Wu, Google
-  - Kaye Mason, Google
-  - Kuangye Guo, Google
-  - Mark Segal, Google
-  - Nicholas Vining, Google
-  - Paul Lalonde, Google
-  - Richard O'Grady, Google
-
-=== Description
-
-The `VK_GGP_stream_descriptor_surface` extension is an instance extension.
-It provides a mechanism to create a slink:VkSurfaceKHR object (defined by
-the `apiext:VK_KHR_surface` extension) that refers to a Google Games
-Platform code:GgpStreamDescriptor.
-
-include::{generated}/interfaces/VK_GGP_stream_descriptor_surface.txt[]
-
-=== Version History
-
- * Revision 1, 2018-11-26 (Jean-Francois Roy)
-   - Initial revision.
diff --git a/registry/vulkan/appendices/VK_GOOGLE_decorate_string.txt b/registry/vulkan/appendices/VK_GOOGLE_decorate_string.txt
deleted file mode 100644
index f6777a6..0000000
--- a/registry/vulkan/appendices/VK_GOOGLE_decorate_string.txt
+++ /dev/null
@@ -1,30 +0,0 @@
-// Copyright (c) 2018-2020 Google LLC
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-include::{generated}/meta/{refprefix}VK_GOOGLE_decorate_string.txt[]
-
-=== Other Extension Metadata
-
-*Last Modified Date*::
-    2018-07-09
-*IP Status*::
-    No known IP claims.
-*Interactions and External Dependencies*::
-  - This extension requires
-    {spirv}/GOOGLE/SPV_GOOGLE_decorate_string.html[`SPV_GOOGLE_decorate_string`]
-*Contributors*::
-  - Hai Nguyen, Google
-  - Neil Henning, AMD
-
-=== Description
-
-The `VK_GOOGLE_decorate_string` extension allows use of the
-`SPV_GOOGLE_decorate_string` extension in SPIR-V shader modules.
-
-include::{generated}/interfaces/VK_GOOGLE_decorate_string.txt[]
-
-=== Version History
-
-  * Revision 1, 2018-07-09 (Neil Henning)
-    - Initial draft
diff --git a/registry/vulkan/appendices/VK_GOOGLE_display_timing.txt b/registry/vulkan/appendices/VK_GOOGLE_display_timing.txt
deleted file mode 100644
index 046000b..0000000
--- a/registry/vulkan/appendices/VK_GOOGLE_display_timing.txt
+++ /dev/null
@@ -1,58 +0,0 @@
-// Copyright 2014-2021 The Khronos Group, Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-include::{generated}/meta/{refprefix}VK_GOOGLE_display_timing.txt[]
-
-=== Other Extension Metadata
-
-*Last Modified Date*::
-    2017-02-14
-*IP Status*::
-    No known IP claims.
-*Contributors*::
-  - Ian Elliott, Google
-  - Jesse Hall, Google
-
-=== Description
-
-This device extension allows an application that uses the
-`apiext:VK_KHR_swapchain` extension to obtain information about the
-presentation engine's display, to obtain timing information about each
-present, and to schedule a present to happen no earlier than a desired time.
-An application can use this to minimize various visual anomalies (e.g.
-stuttering).
-
-Traditional game and real-time animation applications need to correctly
-position their geometry for when the presentable image will be presented to
-the user.
-To accomplish this, applications need various timing information about the
-presentation engine's display.
-They need to know when presentable images were actually presented, and when
-they could have been presented.
-Applications also need to tell the presentation engine to display an image
-no sooner than a given time.
-This allows the application to avoid stuttering, so the animation looks
-smooth to the user.
-
-This extension treats variable-refresh-rate (VRR) displays as if they are
-fixed-refresh-rate (FRR) displays.
-
-include::{generated}/interfaces/VK_GOOGLE_display_timing.txt[]
-
-=== Examples
-
-[NOTE]
-.Note
-====
-The example code for the this extension (like the `apiext:VK_KHR_surface`
-and `VK_GOOGLE_display_timing` extensions) is contained in the cube demo
-that is shipped with the official Khronos SDK, and is being kept up-to-date
-in that location (see:
-https://github.com/KhronosGroup/Vulkan-Tools/blob/master/cube/cube.c ).
-====
-
-=== Version History
-
- * Revision 1, 2017-02-14 (Ian Elliott)
-   - Internal revisions
diff --git a/registry/vulkan/appendices/VK_GOOGLE_hlsl_functionality1.txt b/registry/vulkan/appendices/VK_GOOGLE_hlsl_functionality1.txt
deleted file mode 100644
index c8774b7..0000000
--- a/registry/vulkan/appendices/VK_GOOGLE_hlsl_functionality1.txt
+++ /dev/null
@@ -1,30 +0,0 @@
-// Copyright (c) 2018-2020 Google LLC
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-include::{generated}/meta/{refprefix}VK_GOOGLE_hlsl_functionality1.txt[]
-
-=== Other Extension Metadata
-
-*Last Modified Date*::
-    2018-07-09
-*IP Status*::
-    No known IP claims.
-*Interactions and External Dependencies*::
-  - This extension requires
-    {spirv}/GOOGLE/SPV_GOOGLE_hlsl_functionality1.html[`SPV_GOOGLE_hlsl_functionality1`]
-*Contributors*::
-  - Hai Nguyen, Google
-  - Neil Henning, AMD
-
-=== Description
-
-The `VK_GOOGLE_hlsl_functionality1` extension allows use of the
-`SPV_GOOGLE_hlsl_functionality1` extension in SPIR-V shader modules.
-
-include::{generated}/interfaces/VK_GOOGLE_hlsl_functionality1.txt[]
-
-=== Version History
-
-  * Revision 1, 2018-07-09 (Neil Henning)
-    - Initial draft
diff --git a/registry/vulkan/appendices/VK_GOOGLE_user_type.txt b/registry/vulkan/appendices/VK_GOOGLE_user_type.txt
deleted file mode 100644
index bfb6333..0000000
--- a/registry/vulkan/appendices/VK_GOOGLE_user_type.txt
+++ /dev/null
@@ -1,30 +0,0 @@
-// Copyright (c) 2019-2020 Google LLC
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-include::{generated}/meta/{refprefix}VK_GOOGLE_user_type.txt[]
-
-=== Other Extension Metadata
-
-*Last Modified Date*::
-    2019-07-09
-*IP Status*::
-    No known IP claims.
-*Interactions and External Dependencies*::
-  - This extension requires
-    {spirv}/GOOGLE/SPV_GOOGLE_user_type.asciidoc[`SPV_GOOGLE_user_type`]
-*Contributors*::
-  - Kaye Mason, Google
-  - Hai Nguyen, Google
-
-=== Description
-
-The `VK_GOOGLE_user_type` extension allows use of the `SPV_GOOGLE_user_type`
-extension in SPIR-V shader modules.
-
-include::{generated}/interfaces/VK_GOOGLE_user_type.txt[]
-
-=== Version History
-
-  * Revision 1, 2019-09-07 (Kaye Mason)
-    - Initial draft
diff --git a/registry/vulkan/appendices/VK_HUAWEI_invocation_mask.txt b/registry/vulkan/appendices/VK_HUAWEI_invocation_mask.txt
deleted file mode 100644
index a822892..0000000
--- a/registry/vulkan/appendices/VK_HUAWEI_invocation_mask.txt
+++ /dev/null
@@ -1,71 +0,0 @@
-// Copyright (c) 2021 Huawei Technologies Co. Ltd.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-include::{generated}/meta/{refprefix}VK_HUAWEI_invocation_mask.txt[]
-
-=== Other Extension Metadata
-
-*Last Modified Date*::
-    2021-05-27
-*Interactions and External Dependencies*::
-  - This extension requires `apiext:VK_KHR_ray_tracing_pipeline`, which
-    allow to bind an invocation mask image before the ray tracing command
-  - This extension requires `apiext:VK_KHR_synchronization2`, which allows
-    new pipeline stage for the invocation mask image
-*Contributors*::
-  - Yunpeng Zhu, HuaWei
-
-=== Description
-
-The rays to trace may be sparse in some use cases.
-For example, the scene only have a few regions to reflect.
-Providing an invocation mask image to the ray tracing commands could
-potentially give the hardware the hint to do certain optimization without
-invoking an additional pass to compact the ray buffer.
-
-include::{generated}/interfaces/VK_HUAWEI_invocation_mask.txt[]
-
-=== Examples
-
-RT mask is updated before each traceRay.
-
-Step 1.
-Generate InvocationMask.
-
-[source,c]
----------------------------------------------------
-//the rt mask image bind as color attachment in the fragment shader
-Layout(location = 2) out vec4 outRTmask
-vec4 mask = vec4(x,x,x,x);
-outRTmask = mask;
----------------------------------------------------
-
-Step 2.
-traceRay with InvocationMask
-
-[source,c]
----------------------------------------------------
-vkCmdBindPipeline(
-    commandBuffers[imageIndex],
-    VK_PIPELINE_BIND_POINT_RAY_TRACING_KHR, m_rtPipeline);
-    vkCmdBindDescriptorSets(commandBuffers[imageIndex],
-    VK_PIPELINE_BIND_POINT_RAY_TRACING_NV,
-    m_rtPipelineLayout, 0, 1, &m_rtDescriptorSet,
-    0, nullptr);
-
-vkCmdBindInvocationMaskHUAWEI(
-    commandBuffers[imageIndex],
-    InvocationMaskimageView,
-    InvocationMaskimageLayout);
-    vkCmdTraceRaysKHR(commandBuffers[imageIndex],
-    pRaygenShaderBindingTable,
-    pMissShaderBindingTable,
-    swapChainExtent.width,
-    swapChainExtent.height, 1);
----------------------------------------------------
-
-=== Version History
-
- * Revision 1, 2021-05-27 (Yunpeng Zhu)
-   - Initial draft.
diff --git a/registry/vulkan/appendices/VK_HUAWEI_subpass_shading.txt b/registry/vulkan/appendices/VK_HUAWEI_subpass_shading.txt
deleted file mode 100644
index 26d3047..0000000
--- a/registry/vulkan/appendices/VK_HUAWEI_subpass_shading.txt
+++ /dev/null
@@ -1,260 +0,0 @@
-// Copyright (c) 2020-2024 Huawei Technologies Co. Ltd.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-include::{generated}/meta/{refprefix}VK_HUAWEI_subpass_shading.txt[]
-
-=== Other Extension Metadata
-
-*Last Modified Date*::
-    2021-06-01
-*Interactions and External Dependencies*::
-  - This extension requires
-    https://github.com/KhronosGroup/GLSL/blob/master/extensions/huawei/GLSL_HUAWEI_subpass_shading.txt[`GL_HUAWEI_subpass_shading`].
-  - This extension requires
-    {spirv}/HUAWEI/SPV_HUAWEI_subpass_shading.html[`SPV_HUAWEI_subpass_shading`].
-*Contributors*::
-  - Hueilong Wang
-
-=== Description
-
-This extension allows applications to execute a subpass shading pipeline in
-a subpass of a render pass in order to save memory bandwidth for algorithms
-like tile-based deferred rendering and forward plus.
-A subpass shading pipeline is a pipeline with the compute pipeline ability,
-allowed to read values from input attachments, and only allowed to be
-dispatched inside a stand-alone subpass.
-Its work dimension is defined by the render pass's render area size.
-Its workgroup size (width, height) shall be a power-of-two number in width
-or height, with minimum value from 8, and maximum value shall be decided
-from the render pass attachments and sample counts but depends on
-implementation.
-
-The code:GlobalInvocationId.xy of a subpass shading pipeline is equal to the
-code:FragCoord.xy of a graphic pipeline in the same render pass subtracted
-the <<VkRect2D,pname:offset>> of the
-slink:VkRenderPassBeginInfo::code:renderArea.
-code:GlobalInvocationId.z is mapped to the Layer if
-`apiext:VK_EXT_shader_viewport_index_layer` is supported.
-The code:GlobalInvocationId.xy is equal to the index of the local workgroup
-multiplied by the size of the local workgroup plus the
-code:LocalInvocationId and the <<VkRect2D,pname:offset>> of the
-slink:VkRenderPassBeginInfo::code:renderArea.
-
-This extension allows a subpass's pipeline bind point to be
-ename:VK_PIPELINE_BIND_POINT_SUBPASS_SHADING_HUAWEI.
-
-include::{generated}/interfaces/VK_HUAWEI_subpass_shading.txt[]
-
-
-=== Sample Code
-
-Example of subpass shading in a GLSL shader
-
-[source,c]
----------------------------------------------------
-#extension GL_HUAWEI_subpass_shading: enable
-#extension GL_KHR_shader_subgroup_arithmetic: enable
-
-layout(constant_id = 0) const uint tileWidth = 8;
-layout(constant_id = 1) const uint tileHeight = 8;
-layout(local_size_x_id = 0, local_size_y_id = 1, local_size_z = 1) in;
-layout (set=0, binding=0, input_attachment_index=0) uniform subpassInput depth;
-
-void main()
-{
-  float d = subpassLoad(depth).x;
-  float minD = subgroupMin(d);
-  float maxD = subgroupMax(d);
-}
----------------------------------------------------
-
-Example of subpass shading dispatching in a subpass
-
-[source,c]
----------------------------------------------------
-vkCmdNextSubpass(commandBuffer, VK_SUBPASS_CONTENTS_INLINE);
-vkCmdBindPipeline(commandBuffer, VK_PIPELINE_BIND_POINT_SUBPASS_SHADING_HUAWEI, subpassShadingPipeline);
-vkCmdBindDescriptorSets(commandBuffer, VK_PIPELINE_BIND_POINT_SUBPASS_SHADING_HUAWEI, subpassShadingPipelineLayout,
-  firstSet, descriptorSetCount, pDescriptorSets, dynamicOffsetCount, pDynamicOffsets);
-vkCmdSubpassShadingHUAWEI(commandBuffer)
-vkCmdEndRenderPass(commandBuffer);
----------------------------------------------------
-
-Example of subpass shading render pass creation
-
-[source,c]
----------------------------------------------------
-VkAttachmentDescription2 attachments[] = {
-  {
-    VK_STRUCTURE_TYPE_ATTACHMENT_DESCRIPTION_2, NULL,
-    0, VK_FORMAT_R8G8B8A8_UNORM, VK_SAMPLE_COUNT_1_BIT,
-    VK_ATTACHMENT_LOAD_OP_CLEAR, VK_ATTACHMENT_STORE_OP_DONT_CARE,
-    VK_ATTACHMENT_LOAD_OP_DONT_CARE, VK_ATTACHMENT_LOAD_OP_DONT_CARE,
-    VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL, VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL
-  },
-  {
-    VK_STRUCTURE_TYPE_ATTACHMENT_DESCRIPTION_2, NULL,
-    0, VK_FORMAT_R8G8B8A8_UNORM, VK_SAMPLE_COUNT_1_BIT,
-    VK_ATTACHMENT_LOAD_OP_CLEAR, VK_ATTACHMENT_STORE_OP_DONT_CARE,
-    VK_ATTACHMENT_LOAD_OP_DONT_CARE, VK_ATTACHMENT_LOAD_OP_DONT_CARE,
-    VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL, VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL
-  },
-  {
-    VK_STRUCTURE_TYPE_ATTACHMENT_DESCRIPTION_2, NULL,
-    0, VK_FORMAT_R8G8B8A8_UNORM, VK_SAMPLE_COUNT_1_BIT,
-    VK_ATTACHMENT_LOAD_OP_CLEAR, VK_ATTACHMENT_STORE_OP_DONT_CARE,
-    VK_ATTACHMENT_LOAD_OP_DONT_CARE, VK_ATTACHMENT_LOAD_OP_DONT_CARE,
-    VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL, VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL
-  },
-  {
-    VK_STRUCTURE_TYPE_ATTACHMENT_DESCRIPTION_2, NULL,
-    0, VK_FORMAT_D24_UNORM_S8_UINT, VK_SAMPLE_COUNT_1_BIT,
-    VK_ATTACHMENT_LOAD_OP_CLEAR, VK_ATTACHMENT_STORE_OP_DONT_CARE,
-    VK_ATTACHMENT_LOAD_OP_CLEAR, VK_ATTACHMENT_LOAD_OP_DONT_CARE,
-    VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL, VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL
-  },
-  {
-    VK_STRUCTURE_TYPE_ATTACHMENT_DESCRIPTION_2, NULL,
-    0, VK_FORMAT_R8G8B8A8_UNORM, VK_SAMPLE_COUNT_1_BIT,
-    VK_ATTACHMENT_LOAD_OP_CLEAR, VK_ATTACHMENT_STORE_OP_STORE,
-    VK_ATTACHMENT_LOAD_OP_DONT_CARE, VK_ATTACHMENT_LOAD_OP_DONT_CARE,
-    VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL, VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL
-  }
-};
-
-VkAttachmentReference2 gBufferAttachmentReferences[] = {
-  { VK_STRUCTURE_TYPE_ATTACHMENT_REFERENCE_2, NULL, 0, VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL, VK_IMAGE_ASPECT_COLOR_BIT },
-  { VK_STRUCTURE_TYPE_ATTACHMENT_REFERENCE_2, NULL, 1, VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL, VK_IMAGE_ASPECT_COLOR_BIT },
-  { VK_STRUCTURE_TYPE_ATTACHMENT_REFERENCE_2, NULL, 2, VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL, VK_IMAGE_ASPECT_COLOR_BIT }
-};
-VkAttachmentReference2 gBufferDepthStencilAttachmentReferences =
-  { VK_STRUCTURE_TYPE_ATTACHMENT_REFERENCE_2, NULL, 3, VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL, VK_IMAGE_ASPECT_DEPTH_BIT|VK_IMAGE_ASPECT_STENCIL_BIT };
-VkAttachmentReference2 depthInputAttachmentReferences[] = {
-  { VK_STRUCTURE_TYPE_ATTACHMENT_REFERENCE_2, NULL, 3, VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL, VK_IMAGE_ASPECT_DEPTH_BIT|VK_IMAGE_ASPECT_STENCIL_BIT };
-};
-VkAttachmentReference2 preserveAttachmentReferences[] = {
-  { VK_STRUCTURE_TYPE_ATTACHMENT_REFERENCE_2, NULL, 0, VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL, VK_IMAGE_ASPECT_COLOR_BIT },
-  { VK_STRUCTURE_TYPE_ATTACHMENT_REFERENCE_2, NULL, 1, VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL, VK_IMAGE_ASPECT_COLOR_BIT },
-  { VK_STRUCTURE_TYPE_ATTACHMENT_REFERENCE_2, NULL, 2, VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL, VK_IMAGE_ASPECT_COLOR_BIT },
-  { VK_STRUCTURE_TYPE_ATTACHMENT_REFERENCE_2, NULL, 3, VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL, VK_IMAGE_ASPECT_DEPTH_BIT|VK_IMAGE_ASPECT_STENCIL_BIT }
-}; // G buffer including depth/stencil
-VkAttachmentReference2 colorAttachmentReferences[] = {
-  { VK_STRUCTURE_TYPE_ATTACHMENT_REFERENCE_2, NULL, 4, VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL, VK_IMAGE_ASPECT_COLOR_BIT }
-};
-VkAttachmentReference2 resolveAttachmentReference =
-  { VK_STRUCTURE_TYPE_ATTACHMENT_REFERENCE_2, NULL, 4, VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL, VK_IMAGE_ASPECT_COLOR_BIT };
-
-VkSubpassDescription2 subpasses[] = {
-  {
-    VK_STRUCTURE_TYPE_SUBPASS_DESCRIPTION_2, NULL, 0, VK_PIPELINE_BIND_POINT_GRAPHICS, 0,
-    0, NULL, // input
-    sizeof(gBufferAttachmentReferences)/sizeof(gBufferAttachmentReferences[0]), gBufferAttachmentReferences, // color
-    NULL, &gBufferDepthStencilAttachmentReferences, // resolve & DS
-    0, NULL
-  },
-  {
-    VK_STRUCTURE_TYPE_SUBPASS_DESCRIPTION_2, NULL, 0, VK_PIPELINE_BIND_POINT_SUBPASS_SHADING_HUAWEI , 0,
-    sizeof(depthInputAttachmentReferences)/sizeof(depthInputAttachmentReferences[0]), depthInputAttachmentReferences, // input
-    0, NULL, // color
-    NULL, NULL, // resolve & DS
-    sizeof(preserveAttachmentReferences)/sizeof(preserveAttachmentReferences[0]), preserveAttachmentReferences,
-  },
-  {
-    VK_STRUCTURE_TYPE_SUBPASS_DESCRIPTION_2, NULL, 0, VK_PIPELINE_BIND_POINT_GRAPHICS, 0,
-    sizeof(gBufferAttachmentReferences)/sizeof(gBufferAttachmentReferences[0]), gBufferAttachmentReferences, // input
-    sizeof(colorAttachmentReferences)/sizeof(colorAttachmentReferences[0]), colorAttachmentReferences, // color
-    &resolveAttachmentReference, &gBufferDepthStencilAttachmentReferences, // resolve & DS
-    0, NULL
-  },
-};
-
-VkMemoryBarrier2KHR fragmentToSubpassShading = {
-  VK_STRUCTURE_TYPE_MEMORY_BARRIER_2_KHR, NULL,
-  VK_PIPELINE_STAGE_2_FRAGMENT_SHADER_BIT_KHR, VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT|VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT,
-  VK_PIPELINE_STAGE_2_SUBPASS_SHADING_BIT_HUAWEI, VK_ACCESS_INPUT_ATTACHMENT_READ_BIT
-};
-
-VkMemoryBarrier2KHR subpassShadingToFragment = {
-  VK_STRUCTURE_TYPE_MEMORY_BARRIER_2_KHR, NULL,
-  VK_PIPELINE_STAGE_2_SUBPASS_SHADING_BIT_HUAWEI, VK_ACCESS_SHADER_WRITE_BIT,
-  VK_PIPELINE_STAGE_2_FRAGMENT_SHADER_BIT_KHR, VK_ACCESS_SHADER_READ_BIT
-};
-
-VkSubpassDependency2 dependencies[] = {
-  {
-    VK_STRUCTURE_TYPE_SUBPASS_DEPENDENCY_2, &fragmentToSubpassShading,
-    0, 1,
-    0, 0, 0, 0,
-    0, 0
-  },
-  {
-    VK_STRUCTURE_TYPE_SUBPASS_DEPENDENCY_2, &subpassShadingToFragment,
-    1, 2,
-    0, 0, 0, 0,
-    0, 0
-  },
-};
-
-VkRenderPassCreateInfo2 renderPassCreateInfo = {
-  VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO_2, NULL, 0,
-    sizeof(attachments)/sizeof(attachments[0]), attachments,
-    sizeof(subpasses)/sizeof(subpasses[0]), subpasses,
-    sizeof(dependencies)/sizeof(dependencies[0]), dependencies,
-    0, NULL
-};
-VKRenderPass renderPass;
-vkCreateRenderPass2(device, &renderPassCreateInfo, NULL, &renderPass);
----------------------------------------------------
-
-Example of subpass shading pipeline creation
-
-[source,c]
----------------------------------------------------
-VkExtent2D maxWorkgroupSize;
-
-VkSpecializationMapEntry subpassShadingConstantMapEntries[] = {
-  { 0, 0 * sizeof(uint32_t), sizeof(uint32_t) },
-  { 1, 1 * sizeof(uint32_t), sizeof(uint32_t) }
-};
-
-VkSpecializationInfo subpassShadingConstants = {
-  2, subpassShadingConstantMapEntries,
-  sizeof(VkExtent2D), &maxWorkgroupSize
-};
-
-VkSubpassShadingPipelineCreateInfoHUAWEI subpassShadingPipelineCreateInfo {
-  VK_STRUCTURE_TYPE_SUBPASSS_SHADING_PIPELINE_CREATE_INFO_HUAWEI, NULL,
-  renderPass, 1
-};
-
-VkPipelineShaderStageCreateInfo subpassShadingPipelineStageCreateInfo {
-  VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO, NULL,
-  0, VK_SHADER_STAGE_SUBPASS_SHADING_BIT_HUAWEI,
-  shaderModule, "main",
-  &subpassShadingConstants
-};
-
-VkComputePipelineCreateInfo subpassShadingComputePipelineCreateInfo = {
-  VK_STRUCTURE_TYPE_COMPUTE_PIPELINE_CREATE_INFO, &subpassShadingPipelineCreateInfo,
-  0, &subpassShadingPipelineStageCreateInfo,
-  pipelineLayout, basePipelineHandle, basePipelineIndex
-};
-
-VKPipeline pipeline;
-
-vkGetDeviceSubpassShadingMaxWorkgroupSizeHUAWEI(device, renderPass, &maxWorkgroupSize);
-vkCreateComputePipelines(device, pipelineCache, 1, &subpassShadingComputePipelineCreateInfo, NULL, &pipeline);
-
----------------------------------------------------
-
-
-=== Version History
-
-  * Revision 2, 2021-06-28 (Hueilong Wang)
-    - Change vkGetSubpassShadingMaxWorkgroupSizeHUAWEI to
-      vkGetDeviceSubpassShadingMaxWorkgroupSizeHUAWEI to resolve issue
-      https://github.com/KhronosGroup/Vulkan-Docs/issues/1564[`pub1564`]
-  * Revision 1, 2020-12-15 (Hueilong Wang)
-    - Initial draft.
-
diff --git a/registry/vulkan/appendices/VK_IMG_filter_cubic.txt b/registry/vulkan/appendices/VK_IMG_filter_cubic.txt
deleted file mode 100644
index f1747c3..0000000
--- a/registry/vulkan/appendices/VK_IMG_filter_cubic.txt
+++ /dev/null
@@ -1,52 +0,0 @@
-// Copyright (c) 2016-2020 Imagination Technologies Limited
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-include::{generated}/meta/{refprefix}VK_IMG_filter_cubic.txt[]
-
-=== Other Extension Metadata
-
-*Last Modified Date*::
-    2016-02-23
-*Contributors*::
-  - Tobias Hector, Imagination Technologies
-
-=== Description
-
-`VK_IMG_filter_cubic` adds an additional, high quality cubic filtering mode
-to Vulkan, using a Catmull-Rom bicubic filter.
-Performing this kind of filtering can be done in a shader by using 16
-samples and a number of instructions, but this can be inefficient.
-The cubic filter mode exposes an optimized high quality texture sampling
-using fixed texture sampling functionality.
-
-include::{generated}/interfaces/VK_IMG_filter_cubic.txt[]
-
-=== Example
-
-Creating a sampler with the new filter for both magnification and
-minification
-
-[source,c++]
-----------------------------------------
-    VkSamplerCreateInfo createInfo =
-    {
-        VK_STRUCTURE_TYPE_SAMPLER_CREATE_INFO // sType
-        // Other members set to application-desired values
-    };
-
-    createInfo.magFilter = VK_FILTER_CUBIC_IMG;
-    createInfo.minFilter = VK_FILTER_CUBIC_IMG;
-
-    VkSampler sampler;
-    VkResult result = vkCreateSampler(
-        device,
-        &createInfo,
-        &sampler);
-----------------------------------------
-
-=== Version History
-
- * Revision 1, 2016-02-23 (Tobias Hector)
-   - Initial version
-
diff --git a/registry/vulkan/appendices/VK_IMG_format_pvrtc.txt b/registry/vulkan/appendices/VK_IMG_format_pvrtc.txt
deleted file mode 100644
index a6e504e..0000000
--- a/registry/vulkan/appendices/VK_IMG_format_pvrtc.txt
+++ /dev/null
@@ -1,28 +0,0 @@
-// Copyright (c) 2019-2020 Imagination Technologies Limited
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-include::{generated}/meta/{refprefix}VK_IMG_format_pvrtc.txt[]
-
-=== Other Extension Metadata
-
-*Last Modified Date*::
-    2019-09-02
-*IP Status*::
-    Imagination Technologies Proprietary
-*Contributors*::
-  - Stuart Smith, Imagination Technologies
-
-=== Description
-
-`VK_IMG_format_pvrtc` provides additional texture compression functionality
-specific to Imagination Technologies PowerVR Texture compression format
-(called PVRTC).
-
-include::{generated}/interfaces/VK_IMG_format_pvrtc.txt[]
-
-=== Version History
-
- * Revision 1, 2019-09-02 (Stuart Smith)
-   - Initial version
-
diff --git a/registry/vulkan/appendices/VK_INTEL_performance_query.txt b/registry/vulkan/appendices/VK_INTEL_performance_query.txt
deleted file mode 100644
index 723710f..0000000
--- a/registry/vulkan/appendices/VK_INTEL_performance_query.txt
+++ /dev/null
@@ -1,176 +0,0 @@
-// Copyright (c) 2018-2020 Intel Corporation
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-include::{generated}/meta/{refprefix}VK_INTEL_performance_query.txt[]
-
-=== Other Extension Metadata
-
-*Last Modified Date*::
-    2018-05-16
-*IP Status*::
-    No known IP claims.
-*Contributors*::
-  - Lionel Landwerlin, Intel
-  - Piotr Maciejewski, Intel
-
-=== Description
-
-This extension allows an application to capture performance data to be
-interpreted by a external application or library.
-
-Such a library is available at : https://github.com/intel/metrics-discovery
-
-Performance analysis tools such as
-link:++https://software.intel.com/content/www/us/en/develop/tools/graphics-performance-analyzers.html++[Graphics
-Performance Analyzers] make use of this extension and the metrics-discovery
-library to present the data in a human readable way.
-
-include::{generated}/interfaces/VK_INTEL_performance_query.txt[]
-
-=== Example Code
-
-[source,c]
----------------------------------------------------
-
-// A previously created device
-VkDevice device;
-
-// A queue derived from the device
-VkQueue queue;
-
-VkInitializePerformanceApiInfoINTEL performanceApiInfoIntel = {
-  VK_STRUCTURE_TYPE_INITIALIZE_PERFORMANCE_API_INFO_INTEL,
-  NULL,
-  NULL
-};
-
-vkInitializePerformanceApiINTEL(
-  device,
-  &performanceApiInfoIntel);
-
-VkQueryPoolPerformanceQueryCreateInfoINTEL queryPoolIntel = {
-  VK_STRUCTURE_TYPE_QUERY_POOL_CREATE_INFO_INTEL,
-  NULL,
-  VK_QUERY_POOL_SAMPLING_MODE_MANUAL_INTEL,
-};
-
-VkQueryPoolCreateInfo queryPoolCreateInfo = {
-  VK_STRUCTURE_TYPE_QUERY_POOL_CREATE_INFO,
-  &queryPoolIntel,
-  0,
-  VK_QUERY_TYPE_PERFORMANCE_QUERY_INTEL,
-  1,
-  0
-};
-
-VkQueryPool queryPool;
-
-VkResult result = vkCreateQueryPool(
-  device,
-  &queryPoolCreateInfo,
-  NULL,
-  &queryPool);
-
-assert(VK_SUCCESS == result);
-
-// A command buffer we want to record counters on
-VkCommandBuffer commandBuffer;
-
-VkCommandBufferBeginInfo commandBufferBeginInfo = {
-  VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO,
-  NULL,
-  VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT,
-  NULL
-};
-
-result = vkBeginCommandBuffer(commandBuffer, &commandBufferBeginInfo);
-
-assert(VK_SUCCESS == result);
-
-vkCmdResetQueryPool(
-  commandBuffer,
-  queryPool,
-  0,
-  1);
-
-vkCmdBeginQuery(
-  commandBuffer,
-  queryPool,
-  0,
-  0);
-
-// Perform the commands you want to get performance information on
-// ...
-
-// Perform a barrier to ensure all previous commands were complete before
-// ending the query
-vkCmdPipelineBarrier(commandBuffer,
-  VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT,
-  VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT,
-  0,
-  0,
-  NULL,
-  0,
-  NULL,
-  0,
-  NULL);
-
-vkCmdEndQuery(
-  commandBuffer,
-  queryPool,
-  0);
-
-result = vkEndCommandBuffer(commandBuffer);
-
-assert(VK_SUCCESS == result);
-
-VkPerformanceConfigurationAcquireInfoINTEL performanceConfigurationAcquireInfo = {
-  VK_STRUCTURE_TYPE_PERFORMANCE_CONFIGURATION_ACQUIRE_INFO_INTEL,
-  NULL,
-  VK_PERFORMANCE_CONFIGURATION_TYPE_COMMAND_QUEUE_METRICS_DISCOVERY_ACTIVATED_INTEL
-};
-
-VkPerformanceConfigurationINTEL performanceConfigurationIntel;
-
-result = vkAcquirePerformanceConfigurationINTEL(
-  device,
-  &performanceConfigurationAcquireInfo,
-  &performanceConfigurationIntel);
-
-vkQueueSetPerformanceConfigurationINTEL(queue, performanceConfigurationIntel);
-
-assert(VK_SUCCESS == result);
-
-// Submit the command buffer and wait for its completion
-// ...
-
-result = vkReleasePerformanceConfigurationINTEL(
-  device,
-  performanceConfigurationIntel);
-
-assert(VK_SUCCESS == result);
-
-// Get the report size from metrics-discovery's QueryReportSize
-
-result = vkGetQueryPoolResults(
-  device,
-  queryPool,
-  0, 1, QueryReportSize,
-  data, QueryReportSize, 0);
-
-assert(VK_SUCCESS == result);
-
-// The data can then be passed back to metrics-discovery from which
-// human readable values can be queried.
-
----------------------------------------------------
-
-=== Version History
-
- * Revision 2, 2020-03-06 (Lionel Landwerlin)
-   - Rename VkQueryPoolCreateInfoINTEL in
-     VkQueryPoolPerformanceQueryCreateInfoINTEL
-
- * Revision 1, 2018-05-16 (Lionel Landwerlin)
-   - Initial revision
diff --git a/registry/vulkan/appendices/VK_INTEL_shader_integer_functions2.txt b/registry/vulkan/appendices/VK_INTEL_shader_integer_functions2.txt
deleted file mode 100644
index 1a5f53e..0000000
--- a/registry/vulkan/appendices/VK_INTEL_shader_integer_functions2.txt
+++ /dev/null
@@ -1,38 +0,0 @@
-// Copyright (c) 2019-2020 Intel Corporation
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-include::{generated}/meta/{refprefix}VK_INTEL_shader_integer_functions2.txt[]
-
-=== Other Extension Metadata
-
-*Last Modified Date*::
-    2019-04-30
-*IP Status*::
-    No known IP claims.
-*Contributors*::
-  - Ian Romanick, Intel
-  - Ben Ashbaugh, Intel
-
-=== Description
-
-This extension adds support for several new integer instructions in SPIR-V
-for use in graphics shaders.
-Many of these instructions have pre-existing counterparts in the Kernel
-environment.
-
-The added integer functions are defined by the
-{spirv}/INTEL/SPV_INTEL_shader_integer_functions2.html[`SPV_INTEL_shader_integer_functions`]
-SPIR-V extension and can be used with the GL_INTEL_shader_integer_functions2
-GLSL extension.
-
-include::{generated}/interfaces/VK_INTEL_shader_integer_functions2.txt[]
-
-=== New SPIR-V Capabilities
-
-  * <<spirvenv-capabilities-table-IntegerFunctions2INTEL,IntegerFunctions2INTEL>>
-
-=== Version History
-
- * Revision 1, 2019-04-30 (Ian Romanick)
-   - Initial draft
diff --git a/registry/vulkan/appendices/VK_KHR_16bit_storage.txt b/registry/vulkan/appendices/VK_KHR_16bit_storage.txt
deleted file mode 100644
index bce8665..0000000
--- a/registry/vulkan/appendices/VK_KHR_16bit_storage.txt
+++ /dev/null
@@ -1,66 +0,0 @@
-// Copyright 2017-2021 The Khronos Group, Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-include::{generated}/meta/{refprefix}VK_KHR_16bit_storage.txt[]
-
-=== Other Extension Metadata
-
-*Last Modified Date*::
-    2017-09-05
-*IP Status*::
-    No known IP claims.
-*Interactions and External Dependencies*::
-  - Promoted to Vulkan 1.1 Core
-  - This extension requires
-    {spirv}/KHR/SPV_KHR_16bit_storage.html[`SPV_KHR_16bit_storage`]
-  - This extension provides API support for
-    https://github.com/KhronosGroup/GLSL/blob/master/extensions/ext/GL_EXT_shader_16bit_storage.txt[`GL_EXT_shader_16bit_storage`]
-*Contributors*::
-  - Alexander Galazin, ARM
-  - Jan-Harald Fredriksen, ARM
-  - Joerg Wagner, ARM
-  - Neil Henning, Codeplay
-  - Jeff Bolz, Nvidia
-  - Daniel Koch, Nvidia
-  - David Neto, Google
-  - John Kessenich, Google
-
-=== Description
-
-The `VK_KHR_16bit_storage` extension allows use of 16-bit types in shader
-input and output interfaces, and push constant blocks.
-This extension introduces several new optional features which map to SPIR-V
-capabilities and allow access to 16-bit data in code:Block-decorated objects
-in the code:Uniform and the code:StorageBuffer storage classes, and objects
-in the code:PushConstant storage class.
-This extension allows 16-bit variables to be declared and used as
-user-defined shader inputs and outputs but does not change location
-assignment and component assignment rules.
-
-=== Promotion to Vulkan 1.1
-
-All functionality in this extension is included in core Vulkan 1.1, with the
-KHR suffix omitted.
-However, if Vulkan 1.1 is supported and this extension is not, the
-code:storageBuffer16BitAccess capability is optional.
-The original type, enum and command names are still available as aliases of
-the core functionality.
-
-include::{generated}/interfaces/VK_KHR_16bit_storage.txt[]
-
-=== New SPIR-V Capabilities
-
-  * <<spirvenv-capabilities-table-StorageBuffer16BitAccess,
-    code:StorageBuffer16BitAccess>>
-  * <<spirvenv-capabilities-table-UniformAndStorageBuffer16BitAccess,
-    code:UniformAndStorageBuffer16BitAccess>>
-  * <<spirvenv-capabilities-table-StoragePushConstant16,
-    code:StoragePushConstant16>>
-  * <<spirvenv-capabilities-table-StorageInputOutput16,
-    code:StorageInputOutput16>>
-
-=== Version History
-
-  * Revision 1, 2017-03-23 (Alexander Galazin)
-    - Initial draft
diff --git a/registry/vulkan/appendices/VK_KHR_8bit_storage.txt b/registry/vulkan/appendices/VK_KHR_8bit_storage.txt
deleted file mode 100644
index 44f84d3..0000000
--- a/registry/vulkan/appendices/VK_KHR_8bit_storage.txt
+++ /dev/null
@@ -1,58 +0,0 @@
-// Copyright 2017-2021 The Khronos Group, Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-include::{generated}/meta/{refprefix}VK_KHR_8bit_storage.txt[]
-
-=== Other Extension Metadata
-
-*Last Modified Date*::
-    2018-02-05
-*Interactions and External Dependencies*::
-  - Promoted to Vulkan 1.2 Core
-  - This extension requires
-    {spirv}/KHR/SPV_KHR_8bit_storage.html[`SPV_KHR_8bit_storage`]
-  - This extension provides API support for
-    https://github.com/KhronosGroup/GLSL/blob/master/extensions/ext/GL_EXT_shader_16bit_storage.txt[`GL_EXT_shader_16bit_storage`]
-*IP Status*::
-    No known IP claims.
-*Contributors*::
-  - Alexander Galazin, Arm
-
-=== Description
-
-The `VK_KHR_8bit_storage` extension allows use of 8-bit types in uniform and
-storage buffers, and push constant blocks.
-This extension introduces several new optional features which map to SPIR-V
-capabilities and allow access to 8-bit data in code:Block-decorated objects
-in the code:Uniform and the code:StorageBuffer storage classes, and objects
-in the code:PushConstant storage class.
-
-The code:StorageBuffer8BitAccess capability must: be supported by all
-implementations of this extension.
-The other capabilities are optional.
-
-=== Promotion to Vulkan 1.2
-
-Functionality in this extension is included in core Vulkan 1.2, with the KHR
-suffix omitted.
-However, if Vulkan 1.2 is supported and this extension is not, the
-code:StorageBuffer8BitAccess capability is optional.
-The original type, enum and command names are still available as aliases of
-the core functionality.
-
-include::{generated}/interfaces/VK_KHR_8bit_storage.txt[]
-
-=== New SPIR-V Capabilities
-
-  * <<spirvenv-capabilities-table-StorageBuffer8BitAccess,
-    code:StorageBuffer8BitAccess>>
-  * <<spirvenv-capabilities-table-UniformAndStorageBuffer8BitAccess,
-    code:UniformAndStorageBuffer8BitAccess>>
-  * <<spirvenv-capabilities-table-StoragePushConstant8,
-    code:StoragePushConstant8>>
-
-=== Version History
-
-  * Revision 1, 2018-02-05 (Alexander Galazin)
-    - Initial draft
diff --git a/registry/vulkan/appendices/VK_KHR_acceleration_structure.txt b/registry/vulkan/appendices/VK_KHR_acceleration_structure.txt
deleted file mode 100644
index a911305..0000000
--- a/registry/vulkan/appendices/VK_KHR_acceleration_structure.txt
+++ /dev/null
@@ -1,545 +0,0 @@
-// Copyright 2017-2021 The Khronos Group, Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-include::{generated}/meta/{refprefix}VK_KHR_acceleration_structure.txt[]
-
-=== Other Extension Metadata
-
-*Last Modified Date*::
-    2021-09-30
-*Contributors*::
-  - Samuel Bourasseau, Adobe
-  - Matthäus Chajdas, AMD
-  - Greg Grebe, AMD
-  - Nicolai Hähnle, AMD
-  - Tobias Hector, AMD
-  - Dave Oldcorn, AMD
-  - Skyler Saleh, AMD
-  - Mathieu Robart, Arm
-  - Marius Bjorge, Arm
-  - Tom Olson, Arm
-  - Sebastian Tafuri, EA
-  - Henrik Rydgard, Embark
-  - Juan Cañada, Epic Games
-  - Patrick Kelly, Epic Games
-  - Yuriy O'Donnell, Epic Games
-  - Michael Doggett, Facebook/Oculus
-  - Ricardo Garcia, Igalia
-  - Andrew Garrard, Imagination
-  - Don Scorgie, Imagination
-  - Dae Kim, Imagination
-  - Joshua Barczak, Intel
-  - Slawek Grajewski, Intel
-  - Jeff Bolz, NVIDIA
-  - Pascal Gautron, NVIDIA
-  - Daniel Koch, NVIDIA
-  - Christoph Kubisch, NVIDIA
-  - Ashwin Lele, NVIDIA
-  - Robert Stepinski, NVIDIA
-  - Martin Stich, NVIDIA
-  - Nuno Subtil, NVIDIA
-  - Eric Werness, NVIDIA
-  - Jon Leech, Khronos
-  - Jeroen van Schijndel, OTOY
-  - Juul Joosten, OTOY
-  - Alex Bourd, Qualcomm
-  - Roman Larionov, Qualcomm
-  - David McAllister, Qualcomm
-  - Lewis Gordon, Samsung
-  - Ralph Potter, Samsung
-  - Jasper Bekkers, Traverse Research
-  - Jesse Barker, Unity
-  - Baldur Karlsson, Valve
-
-=== Description
-
-In order to be efficient, rendering techniques such as ray tracing need a
-quick way to identify which primitives may be intersected by a ray
-traversing the geometries.
-Acceleration structures are the most common way to represent the geometry
-spatially sorted, in order to quickly identify such potential intersections.
-
-This extension adds new functionalities:
-
-  * Acceleration structure objects and build commands
-  * Structures to describe geometry inputs to acceleration structure builds
-  * Acceleration structure copy commands
-
-
-include::{generated}/interfaces/VK_KHR_acceleration_structure.txt[]
-
-
-=== Issues
-
-(1) How does this extension differ from VK_NV_ray_tracing?
---
-*DISCUSSION*:
-
-The following is a summary of the main functional differences between
-VK_KHR_acceleration_structure and VK_NV_ray_tracing:
-
-  * added acceleration structure serialization / deserialization
-    (ename:VK_COPY_ACCELERATION_STRUCTURE_MODE_SERIALIZE_KHR,
-    ename:VK_COPY_ACCELERATION_STRUCTURE_MODE_DESERIALIZE_KHR,
-    flink:vkCmdCopyAccelerationStructureToMemoryKHR,
-    flink:vkCmdCopyMemoryToAccelerationStructureKHR)
-  * document <<acceleration-structure-inactive-prims,inactive primitives and
-    instances>>
-  * added slink:VkPhysicalDeviceAccelerationStructureFeaturesKHR structure
-  * added indirect and batched acceleration structure builds
-    (flink:vkCmdBuildAccelerationStructuresIndirectKHR)
-  * added <<host-acceleration-structure,host acceleration structure>>
-    commands
-  * reworked geometry structures so they could be better shared between
-    device, host, and indirect builds
-  * explicitly made slink:VkAccelerationStructureKHR use device addresses
-  * added acceleration structure compatibility check function
-    (flink:vkGetDeviceAccelerationStructureCompatibilityKHR)
-  * add parameter for requesting memory requirements for host and/or device
-    build
-  * added format feature for acceleration structure build vertex formats
-    (ename:VK_FORMAT_FEATURE_ACCELERATION_STRUCTURE_VERTEX_BUFFER_BIT_KHR)
---
-
-ifdef::VK_NV_ray_tracing[]
-(2) Can you give a more detailed comparision of differences and similarities
-between VK_NV_ray_tracing and VK_KHR_acceleration_structure?
---
-*DISCUSSION*:
-
-The following is a more detailed comparision of which commands, structures,
-and enums are aliased, changed, or removed.
-
-  * Aliased functionality -- enums, structures, and commands that are
-    considered equivalent:
-  ** elink:VkGeometryTypeNV {harr} elink:VkGeometryTypeKHR
-  ** elink:VkAccelerationStructureTypeNV {harr}
-     elink:VkAccelerationStructureTypeKHR
-  ** elink:VkCopyAccelerationStructureModeNV {harr}
-     elink:VkCopyAccelerationStructureModeKHR
-  ** tlink:VkGeometryFlagsNV {harr} tlink:VkGeometryFlagsKHR
-  ** elink:VkGeometryFlagBitsNV {harr} elink:VkGeometryFlagBitsKHR
-  ** tlink:VkGeometryInstanceFlagsNV {harr} tlink:VkGeometryInstanceFlagsKHR
-  ** elink:VkGeometryInstanceFlagBitsNV {harr}
-     elink:VkGeometryInstanceFlagBitsKHR
-  ** tlink:VkBuildAccelerationStructureFlagsNV {harr}
-     tlink:VkBuildAccelerationStructureFlagsKHR
-  ** elink:VkBuildAccelerationStructureFlagBitsNV {harr}
-     elink:VkBuildAccelerationStructureFlagBitsKHR
-  ** slink:VkTransformMatrixNV {harr} slink:VkTransformMatrixKHR (added to
-     VK_NV_ray_tracing for descriptive purposes)
-  ** slink:VkAabbPositionsNV {harr} slink:VkAabbPositionsKHR (added to
-     VK_NV_ray_tracing for descriptive purposes)
-  ** slink:VkAccelerationStructureInstanceNV {harr}
-     slink:VkAccelerationStructureInstanceKHR (added to VK_NV_ray_tracing
-     for descriptive purposes)
-
-  * Changed enums, structures, and commands:
-  ** renamed ename:VK_GEOMETRY_INSTANCE_TRIANGLE_CULL_DISABLE_BIT_NV ->
-     ename:VK_GEOMETRY_INSTANCE_TRIANGLE_FACING_CULL_DISABLE_BIT_KHR in
-     elink:VkGeometryInstanceFlagBitsKHR
-  ** slink:VkGeometryTrianglesNV ->
-     slink:VkAccelerationStructureGeometryTrianglesDataKHR (device or host
-     address instead of buffer+offset)
-  ** slink:VkGeometryAABBNV ->
-     slink:VkAccelerationStructureGeometryAabbsDataKHR (device or host
-     address instead of buffer+offset)
-  ** slink:VkGeometryDataNV -> slink:VkAccelerationStructureGeometryDataKHR
-     (union of triangle/aabbs/instances)
-  ** slink:VkGeometryNV -> slink:VkAccelerationStructureGeometryKHR (changed
-     type of geometry)
-  ** slink:VkAccelerationStructureCreateInfoNV ->
-     slink:VkAccelerationStructureCreateInfoKHR (reshuffle geometry
-     layout/information)
-  ** slink:VkPhysicalDeviceRayTracingPropertiesNV ->
-     slink:VkPhysicalDeviceAccelerationStructurePropertiesKHR (for
-     acceleration structure properties, renamed pname:maxTriangleCount to
-     pname:maxPrimitiveCount, added per stage and update after bind limits)
-     and slink:VkPhysicalDeviceRayTracingPipelinePropertiesKHR (for ray
-     tracing pipeline properties)
-  ** slink:VkAccelerationStructureMemoryRequirementsInfoNV (deleted -
-     replaced by allocating on top of slink:VkBuffer)
-  ** slink:VkWriteDescriptorSetAccelerationStructureNV ->
-     slink:VkWriteDescriptorSetAccelerationStructureKHR (different
-     acceleration structure type)
-  ** flink:vkCreateAccelerationStructureNV ->
-     flink:vkCreateAccelerationStructureKHR (device address, different
-     geometry layout/information)
-  ** flink:vkGetAccelerationStructureMemoryRequirementsNV (deleted -
-     replaced by allocating on top of slink:VkBuffer)
-  ** flink:vkCmdBuildAccelerationStructureNV ->
-     flink:vkCmdBuildAccelerationStructuresKHR (params moved to structs,
-     layout differences)
-  ** flink:vkCmdCopyAccelerationStructureNV ->
-     flink:vkCmdCopyAccelerationStructureKHR (params to struct, extendable)
-  ** flink:vkGetAccelerationStructureHandleNV ->
-     flink:vkGetAccelerationStructureDeviceAddressKHR (device address
-     instead of handle)
-  ** elink:VkAccelerationStructureMemoryRequirementsTypeNV -> size queries
-     for scratch space moved to
-     flink:vkGetAccelerationStructureBuildSizesKHR
-  ** flink:vkDestroyAccelerationStructureNV ->
-     flink:vkDestroyAccelerationStructureKHR (different acceleration
-     structure types)
-  ** flink:vkCmdWriteAccelerationStructuresPropertiesNV ->
-     flink:vkCmdWriteAccelerationStructuresPropertiesKHR (different
-     acceleration structure types)
-  * Added enums, structures and commands:
-  ** ename:VK_GEOMETRY_TYPE_INSTANCES_KHR to elink:VkGeometryTypeKHR enum
-  ** ename:VK_COPY_ACCELERATION_STRUCTURE_MODE_SERIALIZE_KHR,
-     ename:VK_COPY_ACCELERATION_STRUCTURE_MODE_DESERIALIZE_KHR to
-     elink:VkCopyAccelerationStructureModeKHR enum
-  ** slink:VkPhysicalDeviceAccelerationStructureFeaturesKHR structure
-  ** elink:VkAccelerationStructureBuildTypeKHR enum
-  ** elink:VkBuildAccelerationStructureModeKHR enum
-  ** slink:VkDeviceOrHostAddressKHR and slink:VkDeviceOrHostAddressConstKHR
-     unions
-  ** slink:VkAccelerationStructureBuildRangeInfoKHR struct
-  ** slink:VkAccelerationStructureGeometryInstancesDataKHR struct
-  ** slink:VkAccelerationStructureDeviceAddressInfoKHR struct
-  ** slink:VkAccelerationStructureVersionInfoKHR struct
-  ** slink:VkStridedDeviceAddressRegionKHR struct
-  ** slink:VkCopyAccelerationStructureToMemoryInfoKHR struct
-  ** slink:VkCopyMemoryToAccelerationStructureInfoKHR struct
-  ** slink:VkCopyAccelerationStructureInfoKHR struct
-  ** flink:vkBuildAccelerationStructuresKHR command (host build)
-  ** flink:vkCopyAccelerationStructureKHR command (host copy)
-  ** flink:vkCopyAccelerationStructureToMemoryKHR (host serialize)
-  ** flink:vkCopyMemoryToAccelerationStructureKHR (host deserialize)
-  ** flink:vkWriteAccelerationStructuresPropertiesKHR (host properties)
-  ** flink:vkCmdCopyAccelerationStructureToMemoryKHR (device serialize)
-  ** flink:vkCmdCopyMemoryToAccelerationStructureKHR (device deserialize)
-  ** flink:vkGetDeviceAccelerationStructureCompatibilityKHR (serialization)
-
---
-endif::VK_NV_ray_tracing[]
-
-(3) What are the changes between the public provisional (VK_KHR_ray_tracing
-v8) release and the internal provisional (VK_KHR_ray_tracing v9) release?
---
-  * added pname:geometryFlags to
-    stext:VkAccelerationStructureCreateGeometryTypeInfoKHR (later reworked
-    to obsolete this)
-  * added pname:minAccelerationStructureScratchOffsetAlignment property to
-    VkPhysicalDeviceRayTracingPropertiesKHR
-  * fix naming and return enum from
-    flink:vkGetDeviceAccelerationStructureCompatibilityKHR
-  ** renamed stext:VkAccelerationStructureVersionKHR to
-     slink:VkAccelerationStructureVersionInfoKHR
-  ** renamed etext:VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_VERSION_KHR to
-     ename:VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_VERSION_INFO_KHR
-  ** removed etext:VK_ERROR_INCOMPATIBLE_VERSION_KHR
-  ** added elink:VkAccelerationStructureCompatibilityKHR enum
-  ** remove return value from
-     flink:vkGetDeviceAccelerationStructureCompatibilityKHR and added return
-     enum parameter
-  * Require Vulkan 1.1
-  * added creation time capture and replay flags
-  ** added elink:VkAccelerationStructureCreateFlagBitsKHR and
-     tlink:VkAccelerationStructureCreateFlagsKHR
-  ** renamed the pname:flags member of
-     slink:VkAccelerationStructureCreateInfoKHR to pname:buildFlags (later
-     removed) and added the pname:createFlags member
-  * change flink:vkCmdBuildAccelerationStructuresIndirectKHR to use buffer
-    device address for indirect parameter
-  * make `apiext:VK_KHR_deferred_host_operations` an interaction instead of
-    a required extension (later went back on this)
-  * renamed stext:VkAccelerationStructureBuildOffsetInfoKHR to
-    slink:VkAccelerationStructureBuildRangeInfoKHR
-  ** renamed the pname:ppOffsetInfos parameter of
-     flink:vkCmdBuildAccelerationStructuresKHR to pname:ppBuildRangeInfos
-  * Re-unify geometry description between build and create
-  ** remove stext:VkAccelerationStructureCreateGeometryTypeInfoKHR and
-     etext:VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_CREATE_GEOMETRY_TYPE_INFO_KHR
-  ** added stext:VkAccelerationStructureCreateSizeInfoKHR structure (later
-     removed)
-  ** change type of the pname:pGeometryInfos member of
-     slink:VkAccelerationStructureCreateInfoKHR from
-     stext:VkAccelerationStructureCreateGeometryTypeInfoKHR to
-     slink:VkAccelerationStructureGeometryKHR (later removed)
-  ** added pname:pCreateSizeInfos member to
-     slink:VkAccelerationStructureCreateInfoKHR (later removed)
-  * Fix ppGeometries ambiguity, add pGeometries
-  ** remove pname:geometryArrayOfPointers member of
-     VkAccelerationStructureBuildGeometryInfoKHR
-  ** disambiguate two meanings of pname:ppGeometries by explicitly adding
-     pname:pGeometries to the
-     slink:VkAccelerationStructureBuildGeometryInfoKHR structure and require
-     one of them be `NULL`
-  * added <<features-nullDescriptor,nullDescriptor>> support for
-    acceleration structures
-  * changed the pname:update member of
-    slink:VkAccelerationStructureBuildGeometryInfoKHR from a bool to the
-    pname:mode elink:VkBuildAccelerationStructureModeKHR enum which allows
-    future extensibility in update types
-  * Clarify deferred host ops for pipeline creation
-  ** slink:VkDeferredOperationKHR is now a top-level parameter for
-     flink:vkBuildAccelerationStructuresKHR,
-     flink:vkCreateRayTracingPipelinesKHR,
-     flink:vkCopyAccelerationStructureToMemoryKHR,
-     flink:vkCopyAccelerationStructureKHR, and
-     flink:vkCopyMemoryToAccelerationStructureKHR
-  ** removed stext:VkDeferredOperationInfoKHR structure
-  ** change deferred host creation/return parameter behavior such that the
-     implementation can modify such parameters until the deferred host
-     operation completes
-  ** `apiext:VK_KHR_deferred_host_operations` is required again
-  * Change acceleration structure build to always be sized
-  ** de-alias ename:VkAccelerationStructureMemoryRequirementsTypeNV and
-     etext:VkAccelerationStructureMemoryRequirementsTypeKHR, and remove
-     etext:VkAccelerationStructureMemoryRequirementsTypeKHR
-  ** add flink:vkGetAccelerationStructureBuildSizesKHR command and
-     slink:VkAccelerationStructureBuildSizesInfoKHR structure and
-     ename:VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_BUILD_SIZES_INFO_KHR
-     enum to query sizes for acceleration structures and scratch storage
-  ** move size queries for scratch space to
-     flink:vkGetAccelerationStructureBuildSizesKHR
-  ** remove pname:compactedSize, pname:buildFlags, pname:maxGeometryCount,
-     pname:pGeometryInfos, pname:pCreateSizeInfos members of
-     slink:VkAccelerationStructureCreateInfoKHR and add the pname:size
-     member
-  ** add pname:maxVertex member to
-     slink:VkAccelerationStructureGeometryTrianglesDataKHR structure
-  ** remove stext:VkAccelerationStructureCreateSizeInfoKHR structure
---
-
-(4) What are the changes between the internal provisional
-(VK_KHR_ray_tracing v9) release and the final (VK_KHR_acceleration_structure
-v11) release?
---
-  * refactor VK_KHR_ray_tracing into 3 extensions, enabling implementation
-    flexibility and decoupling ray query support from ray pipelines:
-  ** `apiext:VK_KHR_acceleration_structure` (for acceleration structure
-     operations)
-  ** `apiext:VK_KHR_ray_tracing_pipeline` (for ray tracing pipeline and
-     shader stages)
-  ** `apiext:VK_KHR_ray_query` (for ray queries in existing shader stages)
-  * clarify buffer usage flags for ray tracing
-  ** ename:VK_BUFFER_USAGE_RAY_TRACING_BIT_NV is left alone in
-     `apiext:VK_NV_ray_tracing` (required on pname:scratch and
-     pname:instanceData)
-  ** ename:VK_BUFFER_USAGE_SHADER_BINDING_TABLE_BIT_KHR is added as an alias
-     of ename:VK_BUFFER_USAGE_RAY_TRACING_BIT_NV in
-     `apiext:VK_KHR_ray_tracing_pipeline` and is required on shader binding
-     table buffers
-  ** ename:VK_BUFFER_USAGE_ACCELERATION_STRUCTURE_BUILD_INPUT_READ_ONLY_BIT_KHR
-     is added in `apiext:VK_KHR_acceleration_structure` for all vertex,
-     index, transform, aabb, and instance buffer data referenced by device
-     build commands
-  ** ename:VK_BUFFER_USAGE_STORAGE_BUFFER_BIT is used for pname:scratchData
-  * add max primitive counts (pname:ppMaxPrimitiveCounts) to
-    flink:vkCmdBuildAccelerationStructuresIndirectKHR
-  * Allocate acceleration structures from stext:VkBuffers and add a mode to
-    constrain the device address
-  ** de-alias sname:VkBindAccelerationStructureMemoryInfoNV and
-     fname:vkBindAccelerationStructureMemoryNV, and remove
-     stext:VkBindAccelerationStructureMemoryInfoKHR,
-     stext:VkAccelerationStructureMemoryRequirementsInfoKHR, and
-     ftext:vkGetAccelerationStructureMemoryRequirementsKHR
-  ** acceleration structures now take a slink:VkBuffer and offset at
-     creation time for memory placement
-  ** add a new ename:VK_BUFFER_USAGE_ACCELERATION_STRUCTURE_STORAGE_BIT_KHR
-     buffer usage for such buffers
-  ** add a new ename:VK_ACCELERATION_STRUCTURE_TYPE_GENERIC_KHR acceleration
-     structure type for layering
-  * move ename:VK_GEOMETRY_TYPE_INSTANCES_KHR to main enum instead of being
-    added via extension
-  * make build commands more consistent - all now build multiple
-    acceleration structures and are named plurally
-    (flink:vkCmdBuildAccelerationStructuresIndirectKHR,
-    flink:vkCmdBuildAccelerationStructuresKHR,
-    flink:vkBuildAccelerationStructuresKHR)
-  * add interactions with
-    ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT for
-    acceleration structures, including a new feature
-    (pname:descriptorBindingAccelerationStructureUpdateAfterBind) and 3 new
-    properties (pname:maxPerStageDescriptorAccelerationStructures,
-    pname:maxPerStageDescriptorUpdateAfterBindAccelerationStructures,
-    pname:maxDescriptorSetUpdateAfterBindAccelerationStructures)
-  * extension is no longer provisional
-  * define synchronization requirements for builds, traces, and copies
-  * define synchronization requirements for AS build inputs and indirect
-    build buffer
---
-
-(5) What is ename:VK_ACCELERATION_STRUCTURE_TYPE_GENERIC_KHR for?
---
-*RESOLVED*: It is primarily intended for API layering.
-In DXR, the acceleration structure is basically just a buffer in a special
-layout, and you do not know at creation time whether it will be used as a
-top or bottom level acceleration structure.
-We thus added a generic acceleration structure type whose type is unknown at
-creation time, but is specified at build time instead.
-Applications which are written directly for Vulkan should not use it.
---
-
-=== Version History
-  * Revision 1, 2019-12-05 (Members of the Vulkan Ray Tracing TSG)
-    - Internal revisions (forked from VK_NV_ray_tracing)
-  * Revision 2, 2019-12-20 (Daniel Koch, Eric Werness)
-    - Add const version of DeviceOrHostAddress (!3515)
-    - Add VU to clarify that only handles in the current pipeline are valid
-      (!3518)
-    - Restore some missing VUs and add in-place update language (#1902,
-      !3522)
-    - rename VkAccelerationStructureInstanceKHR member from
-      accelerationStructure to accelerationStructureReference to better
-      match its type (!3523)
-    - Allow VK_ERROR_INVALID_OPAQUE_CAPTURE_ADDRESS for pipeline creation if
-      shader group handles cannot be reused (!3523)
-    - update documentation for the VK_ERROR_INVALID_OPAQUE_CAPTURE_ADDRESS
-      error code and add missing documentation for new return codes from
-      VK_KHR_deferred_host_operations (!3523)
-    - list new query types for VK_KHR_ray_tracing (!3523)
-    - Fix VU statements for VkAccelerationStructureGeometryKHR referring to
-      correct union members and update to use more current wording (!3523)
-  * Revision 3, 2020-01-10 (Daniel Koch, Jon Leech, Christoph Kubisch)
-    - Fix 'instance of' and 'that/which contains/defines' markup issues
-      (!3528)
-    - factor out VK_KHR_pipeline_library as stand-alone extension (!3540)
-    - Resolve Vulkan-hpp issues (!3543)
-      - add missing require for VkGeometryInstanceFlagsKHR
-      - de-alias VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_CREATE_INFO_NV
-        since the KHR structure is no longer equivalent
-      - add len to pDataSize attribute for
-        vkWriteAccelerationStructuresPropertiesKHR
-  * Revision 4, 2020-01-23 (Daniel Koch, Eric Werness)
-    - Improve vkWriteAccelerationStructuresPropertiesKHR, add return value
-      and VUs (#1947)
-    - Clarify language to allow multiple raygen shaders (#1959)
-    - Various editorial feedback (!3556)
-    - Add language to help deal with looped self-intersecting fans (#1901)
-    - Change vkCmdTraceRays{Indirect}KHR args to pointers (!3559)
-    - Add scratch address validation language (#1941, !3551)
-    - Fix definition and add hierarchy information for shader call scope
-      (#1977, !3571)
-  * Revision 5, 2020-02-04 (Eric Werness, Jeff Bolz, Daniel Koch)
-    - remove vestigial accelerationStructureUUID (!3582)
-    - update definition of repack instructions and improve memory model
-      interactions (#1910, #1913, !3584)
-    - Fix wrong sType for VkPhysicalDeviceRayTracingFeaturesKHR (#1988)
-    - Use provisional SPIR-V capabilities (#1987)
-    - require rayTraversalPrimitiveCulling if rayQuery is supported (#1927)
-    - Miss shaders do not have object parameters (!3592)
-    - Fix missing required types in XML (!3592)
-    - clarify matching conditions for update (!3592)
-    - add goal that host and device builds be similar (!3592)
-    - clarify that pname:maxPrimitiveCount limit should apply to triangles
-      and AABBs (!3592)
-    - Require alignment for instance arrayOfPointers (!3592)
-    - Zero is a valid value for instance flags (!3592)
-    - Add some alignment VUs that got lost in refactoring (!3592)
-    - Recommend TMin epsilon rather than culling (!3592)
-    - Get angle from dot product not cross product (!3592)
-    - Clarify that AH can access the payload and attributes (!3592)
-    - Match DXR behavior for inactive primitive definition (!3592)
-    - Use a more generic term than degenerate for inactive to avoid
-      confusion (!3592)
-  * Revision 6, 2020-02-20 (Daniel Koch)
-    - fix some dangling NV references (#1996)
-    - rename VkCmdTraceRaysIndirectCommandKHR to
-      VkTraceRaysIndirectCommandKHR (!3607)
-    - update contributor list (!3611)
-    - use uint64_t instead of VkAccelerationStructureReferenceKHR in
-      VkAccelerationStructureInstanceKHR (#2004)
-  * Revision 7, 2020-02-28 (Tobias Hector)
-    - remove HitTKHR SPIR-V builtin (spirv/spirv-extensions#7)
-  * Revision 8, 2020-03-06 (Tobias Hector, Dae Kim, Daniel Koch, Jeff Bolz,
-    Eric Werness)
-    - explicitly state that Tmax is updated when new closest intersection is
-      accepted (#2020,!3536)
-    - Made references to min and max t values consistent (!3644)
-    - finish enumerating differences relative to VK_NV_ray_tracing in issues
-      (1) and (2) (#1974,!3642)
-    - fix formatting in some math equations (!3642)
-    - Restrict the Hit Kind operand of code:OpReportIntersectionKHR to
-      7-bits (spirv/spirv-extensions#8,!3646)
-    - Say ray tracing 'should:' be watertight (#2008,!3631)
-    - Clarify memory requirements for ray tracing buffers (#2005,!3649)
-    - Add callable size limits (#1997,!3652)
-  * Revision 9, 2020-04-15 (Eric Werness, Daniel Koch, Tobias Hector, Joshua
-    Barczak)
-    - Add geometry flags to acceleration structure creation (!3672)
-    - add build scratch memory alignment
-      (minAccelerationStructureScratchOffsetAlignment) (#2065,!3725)
-    - fix naming and return enum from
-      vkGetDeviceAccelerationStructureCompatibilityKHR (#2051,!3726)
-    - require SPIR-V 1.4 (#2096,!3777)
-    - added creation time capture/replay flags (#2104,!3774)
-    - require Vulkan 1.1 (#2133,!3806)
-    - use device addresses instead of VkBuffers for ray tracing commands
-      (#2074,!3815)
-    - add interactions with Vulkan 1.2 and VK_KHR_vulkan_memory_model
-      (#2133,!3830)
-    - make VK_KHR_pipeline_library an interaction instead of required
-      (#2045,#2108,!3830)
-    - make VK_KHR_deferred_host_operations an interaction instead of
-      required (#2045,!3830)
-    - removed maxCallableSize and added explicit stack size management for
-      ray pipelines (#1997,!3817,!3772,!3844)
-    - improved documentation for VkAccelerationStructureVersionInfoKHR
-      (#2135,3835)
-    - rename VkAccelerationStructureBuildOffsetInfoKHR to
-      VkAccelerationStructureBuildRangeInfoKHR (#2058,!3754)
-    - Re-unify geometry description between build and create (!3754)
-    - Fix ppGeometries ambiguity, add pGeometries (#2032,!3811)
-    - add interactions with VK_EXT_robustness2 and allow nullDescriptor
-      support for acceleration structures (#1920,!3848)
-    - added future extensibility for AS updates (#2114,!3849)
-    - Fix VU for dispatchrays and add a limit on the size of the full grid
-      (#2160,!3851)
-    - Add shaderGroupHandleAlignment property (#2180,!3875)
-    - Clarify deferred host ops for pipeline creation (#2067,!3813)
-    - Change acceleration structure build to always be sized
-      (#2131,#2197,#2198,!3854,!3883,!3880)
-  * Revision 10, 2020-07-03 (Mathieu Robart, Daniel Koch, Eric Werness,
-    Tobias Hector)
-    - Decomposition of the specification, from VK_KHR_ray_tracing to
-      VK_KHR_acceleration_structure (#1918,!3912)
-    - clarify buffer usage flags for ray tracing (#2181,!3939)
-    - add max primitive counts to build indirect command (#2233,!3944)
-    - Allocate acceleration structures from VkBuffers and add a mode to
-      constrain the device address (#2131,!3936)
-    - Move VK_GEOMETRY_TYPE_INSTANCES_KHR to main enum (#2243,!3952)
-    - make build commands more consistent (#2247,!3958)
-    - add interactions with UPDATE_AFTER_BIND (#2128,!3986)
-    - correct and expand build command VUs (!4020)
-    - fix copy command VUs (!4018)
-    - added various alignment requirements (#2229,!3943)
-    - fix valid usage for arrays of geometryCount items (#2198,!4010)
-    - define what is allowed to change on RTAS updates and relevant VUs
-      (#2177,!3961)
-  * Revision 11, 2020-11-12 (Eric Werness, Josh Barczak, Daniel Koch, Tobias
-    Hector)
-    - de-alias NV and KHR acceleration structure types and associated
-      commands (#2271,!4035)
-    - specify alignment for host copy commands (#2273,!4037)
-    - document
-      ename:VK_FORMAT_FEATURE_ACCELERATION_STRUCTURE_VERTEX_BUFFER_BIT_KHR
-    - specify that acceleration structures are non-linear (#2289,!4068)
-    - add several missing VUs for strides, vertexFormat, and indexType
-      (#2315,!4069)
-    - restore VUs for VkAccelerationStructureBuildGeometryInfoKHR
-      (#2337,!4098)
-    - ban multi-instance memory for host operations (#2324,!4102)
-    - allow dstAccelerationStructure to be null for
-      vkGetAccelerationStructureBuildSizesKHR (#2330,!4111)
-    - more build VU cleanup (#2138,#4130)
-    - specify host endianness for AS serialization (#2261,!4136)
-    - add invertible transform matrix VU (#1710,!4140)
-    - require geometryCount to be 1 for TLAS builds (!4145)
-    - improved validity conditions for build addresses (#4142)
-    - add single statement SPIR-V VUs, build limit VUs (!4158)
-    - document limits for vertex and aabb strides (#2390,!4184)
-    - specify that
-      ename:VK_PIPELINE_STAGE_ACCELERATION_STRUCTURE_BUILD_BIT_KHR applies
-      to AS copies (#2382,#4173)
-    - define sync for AS build inputs and indirect buffer (#2407,!4208)
-  * Revision 12, 2021-08-06 (Samuel Bourasseau)
-    - rename VK_GEOMETRY_INSTANCE_TRIANGLE_FRONT_COUNTERCLOCKWISE_BIT_KHR to
-      VK_GEOMETRY_INSTANCE_TRIANGLE_FLIP_FACING_BIT_KHR (keep previous as
-      alias).
-    - Clarify description and add note.
-  * Revision 13, 2021-09-30 (Jon Leech)
-    - Add interaction with `apiext:VK_KHR_format_feature_flags2` to `vk.xml`
diff --git a/registry/vulkan/appendices/VK_KHR_android_surface.txt b/registry/vulkan/appendices/VK_KHR_android_surface.txt
deleted file mode 100644
index e99cd78..0000000
--- a/registry/vulkan/appendices/VK_KHR_android_surface.txt
+++ /dev/null
@@ -1,74 +0,0 @@
-// Copyright 2014-2021 The Khronos Group, Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-include::{generated}/meta/{refprefix}VK_KHR_android_surface.txt[]
-
-=== Other Extension Metadata
-
-*Last Modified Date*::
-    2016-01-14
-*IP Status*::
-    No known IP claims.
-*Contributors*::
-  - Patrick Doane, Blizzard
-  - Jason Ekstrand, Intel
-  - Ian Elliott, LunarG
-  - Courtney Goeltzenleuchter, LunarG
-  - Jesse Hall, Google
-  - James Jones, NVIDIA
-  - Antoine Labour, Google
-  - Jon Leech, Khronos
-  - David Mao, AMD
-  - Norbert Nopper, Freescale
-  - Alon Or-bach, Samsung
-  - Daniel Rakos, AMD
-  - Graham Sellers, AMD
-  - Ray Smith, ARM
-  - Jeff Vigil, Qualcomm
-  - Chia-I Wu, LunarG
-
-=== Description
-
-The `VK_KHR_android_surface` extension is an instance extension.
-It provides a mechanism to create a slink:VkSurfaceKHR object (defined by
-the `apiext:VK_KHR_surface` extension) that refers to an
-basetype:ANativeWindow, Android's native surface type.
-The basetype:ANativeWindow represents the producer endpoint of any buffer
-queue, regardless of consumer endpoint.
-Common consumer endpoints for code:ANativeWindows are the system window
-compositor, video encoders, and application-specific compositors importing
-the images through a code:SurfaceTexture.
-
-include::{generated}/interfaces/VK_KHR_android_surface.txt[]
-
-=== Issues
-
-1) Does Android need a way to query for compatibility between a particular
-physical device (and queue family?) and a specific Android display?
-
-*RESOLVED*: No.
-Currently on Android, any physical device is expected to be able to present
-to the system compositor, and all queue families must support the necessary
-image layout transitions and synchronization operations.
-
-=== Version History
-
- * Revision 1, 2015-09-23 (Jesse Hall)
-   - Initial draft.
-
- * Revision 2, 2015-10-26 (Ian Elliott)
-   - Renamed from VK_EXT_KHR_android_surface to VK_KHR_android_surface.
-
- * Revision 3, 2015-11-03 (Daniel Rakos)
-   - Added allocation callbacks to surface creation function.
-
- * Revision 4, 2015-11-10 (Jesse Hall)
-   - Removed VK_ERROR_INVALID_ANDROID_WINDOW_KHR.
-
- * Revision 5, 2015-11-28 (Daniel Rakos)
-   - Updated the surface create function to take a pCreateInfo structure.
-
- * Revision 6, 2016-01-14 (James Jones)
-   - Moved VK_ERROR_NATIVE_WINDOW_IN_USE_KHR from the VK_KHR_android_surface
-     to the VK_KHR_surface extension.
diff --git a/registry/vulkan/appendices/VK_KHR_bind_memory2.txt b/registry/vulkan/appendices/VK_KHR_bind_memory2.txt
deleted file mode 100644
index ab37b8a..0000000
--- a/registry/vulkan/appendices/VK_KHR_bind_memory2.txt
+++ /dev/null
@@ -1,41 +0,0 @@
-// Copyright 2016-2021 The Khronos Group, Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-include::{generated}/meta/{refprefix}VK_KHR_bind_memory2.txt[]
-
-=== Other Extension Metadata
-
-*Last Modified Date*::
-    2017-09-05
-*IP Status*::
-    No known IP claims.
-*Interactions and External Dependencies*::
-  - Promoted to Vulkan 1.1 Core
-*Contributors*::
-  - Jeff Bolz, NVIDIA
-  - Tobias Hector, Imagination Technologies
-
-=== Description
-
-This extension provides versions of flink:vkBindBufferMemory and
-flink:vkBindImageMemory that allow multiple bindings to be performed at
-once, and are extensible.
-
-This extension also introduces ename:VK_IMAGE_CREATE_ALIAS_BIT_KHR, which
-allows "`identical`" images that alias the same memory to interpret the
-contents consistently, even across image layout changes.
-
-=== Promotion to Vulkan 1.1
-
-All functionality in this extension is included in core Vulkan 1.1, with the
-KHR suffix omitted.
-The original type, enum and command names are still available as aliases of
-the core functionality.
-
-include::{generated}/interfaces/VK_KHR_bind_memory2.txt[]
-
-=== Version History
-
- * Revision 1, 2017-05-19 (Tobias Hector)
-   - Pulled bind memory functions into their own extension
diff --git a/registry/vulkan/appendices/VK_KHR_buffer_device_address.txt b/registry/vulkan/appendices/VK_KHR_buffer_device_address.txt
deleted file mode 100644
index 6698fd1..0000000
--- a/registry/vulkan/appendices/VK_KHR_buffer_device_address.txt
+++ /dev/null
@@ -1,125 +0,0 @@
-// Copyright 2016-2021 The Khronos Group, Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-include::{generated}/meta/{refprefix}VK_KHR_buffer_device_address.txt[]
-
-=== Other Extension Metadata
-
-*Last Modified Date*::
-    2019-06-24
-*IP Status*::
-    No known IP claims.
-*Interactions and External Dependencies*::
-  - Promoted to Vulkan 1.2 Core
-  - This extension requires
-    {spirv}/KHR/SPV_KHR_physical_storage_buffer.html[`SPV_KHR_physical_storage_buffer`]
-  - This extension provides API support for
-    https://github.com/KhronosGroup/GLSL/blob/master/extensions/ext/GLSL_EXT_buffer_reference.txt[`GL_EXT_buffer_reference`]
-    and
-    https://github.com/KhronosGroup/GLSL/blob/master/extensions/ext/GLSL_EXT_buffer_reference2.txt[`GL_EXT_buffer_reference2`]
-    and
-    https://github.com/KhronosGroup/GLSL/blob/master/extensions/ext/GLSL_EXT_buffer_reference_uvec2.txt[`GL_EXT_buffer_reference_uvec2`]
-*Contributors*::
-  - Jeff Bolz, NVIDIA
-  - Neil Henning, AMD
-  - Tobias Hector, AMD
-  - Jason Ekstrand, Intel
-  - Baldur Karlsson, Valve
-  - Jan-Harald Fredriksen, Arm
-
-=== Description
-
-This extension allows the application to query a 64-bit buffer device
-address value for a buffer, which can be used to access the buffer memory
-via the code:PhysicalStorageBuffer storage class in the
-https://github.com/KhronosGroup/GLSL/blob/master/extensions/ext/GLSL_EXT_buffer_reference.txt[`GL_EXT_buffer_reference`]
-GLSL extension and
-{spirv}/KHR/SPV_KHR_physical_storage_buffer.html[`SPV_KHR_physical_storage_buffer`]
-SPIR-V extension.
-
-Another way to describe this extension is that it adds "`pointers to buffer
-memory in shaders`".
-By calling flink:vkGetBufferDeviceAddress with a sname:VkBuffer, it will
-return a basetype:VkDeviceAddress value which represents the address of the
-start of the buffer.
-
-flink:vkGetBufferOpaqueCaptureAddress and
-flink:vkGetDeviceMemoryOpaqueCaptureAddress allow opaque addresses for
-buffers and memory objects to be queried for the current process.
-A trace capture and replay tool can then supply these addresses to be used
-at replay time to match the addresses used when the trace was captured.
-To enable tools to insert these queries, new memory allocation flags must be
-specified for memory objects that will be bound to buffers accessed via the
-code:PhysicalStorageBuffer storage class.
-Note that this mechanism is intended only to support capture/replay tools,
-and is not recommended for use in other applications.
-
-There are various use cases this extension is designed for.
-It is required for ray tracing, useful for DX12 portability, and by allowing
-buffer addresses to be stored in memory it enables more complex data
-structures to be created.
-
-This extension can also be used to hardcode a dedicated debug channel into
-all shaders by querying a pointer at startup and pushing that into shaders
-as a run-time constant (e.g. specialization constant) that avoids impacting
-other descriptor limits.
-
-There are examples of usage in the
-https://github.com/KhronosGroup/GLSL/blob/master/extensions/ext/GLSL_EXT_buffer_reference.txt[`GL_EXT_buffer_reference`]
-spec for how to use this in a high-level shading language such as GLSL.
-The
-https://github.com/KhronosGroup/GLSL/blob/master/extensions/ext/GLSL_EXT_buffer_reference2.txt[`GL_EXT_buffer_reference2`]
-and
-https://github.com/KhronosGroup/GLSL/blob/master/extensions/ext/GLSL_EXT_buffer_reference_uvec2.txt[`GL_EXT_buffer_reference_uvec2`]
-extensions were also added to help cover a few additional edge cases.
-
-=== Promotion to Vulkan 1.2
-
-All functionality in this extension is included in core Vulkan 1.2, with the
-KHR suffix omitted.
-However, if Vulkan 1.2 is supported and this extension is not, the
-code:bufferDeviceAddress capability is optional.
-The original type, enum and command names are still available as aliases of
-the core functionality.
-
-include::{generated}/interfaces/VK_KHR_buffer_device_address.txt[]
-
-=== New SPIR-V Capabilities
-
-  * <<spirvenv-capabilities-table-PhysicalStorageBufferAddresses,code:PhysicalStorageBufferAddresses>>
-
-=== Version History
-
- * Revision 1, 2019-06-24 (Jan-Harald Fredriksen)
-   - Internal revisions based on VK_EXT_buffer_device_address
-
-ifdef::isrefpage[]
-
-=== Examples
-
-There are various use cases this extensions is designed for.
-It is required for ray tracing, useful for DX12 portability, and it allows
-storing buffer addresses in memory (enabling creating more complex data
-strcutures).
-
-This extension can also be used to hardcode a dedicated debug channel into
-all shaders without impacting other descriptor limits by querying a buffer
-device address at startup and pushing that into shaders as a run-time
-constant (e.g. specialization constant).
-
-There are examples of usage in the
-https://github.com/KhronosGroup/GLSL/blob/master/extensions/ext/GLSL_EXT_buffer_reference.txt[`GL_EXT_buffer_reference`]
-spec for how to use this in a high-level shading language such as GLSL.
-The
-https://github.com/KhronosGroup/GLSL/blob/master/extensions/ext/GLSL_EXT_buffer_reference2.txt[`GL_EXT_buffer_reference2`]
-and
-https://github.com/KhronosGroup/GLSL/blob/master/extensions/ext/GLSL_EXT_buffer_reference_uvec2.txt[`GL_EXT_buffer_reference_uvec2`]
-extensions were added to help cover a few edge cases missed by the original
-`GL_EXT_buffer_reference`.
-
-It is important to also be aware that the capture/replay mechanisms are
-meant for capture/replay tools, and should not be used general application
-usage.
-
-endif::isrefpage[]
diff --git a/registry/vulkan/appendices/VK_KHR_copy_commands2.txt b/registry/vulkan/appendices/VK_KHR_copy_commands2.txt
deleted file mode 100644
index 55fe09e..0000000
--- a/registry/vulkan/appendices/VK_KHR_copy_commands2.txt
+++ /dev/null
@@ -1,42 +0,0 @@
-// Copyright 2016-2021 The Khronos Group, Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-include::{generated}/meta/{refprefix}VK_KHR_copy_commands2.txt[]
-
-=== Other Extension Metadata
-
-*Last Modified Date*::
-    2020-07-06
-*Interactions and External Dependencies*::
-  - None
-*Contributors*::
-  - Jeff Leger, Qualcomm
-  - Tobias Hector, AMD
-  - Jan-Harald Fredriksen, ARM
-  - Tom Olson, ARM
-
-
-=== Description
-
-This extension provides extensible versions of the Vulkan buffer and image
-copy commands.
-The new commands are functionally identical to the core commands, except
-that their copy parameters are specified using extensible structures that
-can be used to pass extension-specific information.
-
-The following extensible copy commands are introduced with this extension:
-flink:vkCmdCopyBuffer2KHR, flink:vkCmdCopyImage2KHR,
-flink:vkCmdCopyBufferToImage2KHR, flink:vkCmdCopyImageToBuffer2KHR,
-flink:vkCmdBlitImage2KHR, and flink:vkCmdResolveImage2KHR.
-Each command contains an stext:*Info2KHR structure parameter that includes
-ptext:sType/ptext:pNext members.
-Lower level structures that describe each region to be copied are also
-extended with ptext:sType/ptext:pNext members.
-
-include::{generated}/interfaces/VK_KHR_copy_commands2.txt[]
-
-=== Version History
-
- * Revision 1, 2020-07-06 (Jeff Leger)
-   - Internal revisions
diff --git a/registry/vulkan/appendices/VK_KHR_create_renderpass2.txt b/registry/vulkan/appendices/VK_KHR_create_renderpass2.txt
deleted file mode 100644
index 3328aa2..0000000
--- a/registry/vulkan/appendices/VK_KHR_create_renderpass2.txt
+++ /dev/null
@@ -1,58 +0,0 @@
-// Copyright 2016-2021 The Khronos Group, Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-include::{generated}/meta/{refprefix}VK_KHR_create_renderpass2.txt[]
-
-=== Other Extension Metadata
-
-*Last Modified Date*::
-    2018-02-07
-*Interactions and External Dependencies*::
-  - Promoted to Vulkan 1.2 Core
-*Contributors*::
-  - Tobias Hector
-  - Jeff Bolz
-
-=== Description
-
-This extension provides a new entry point to create render passes in a way
-that can be easily extended by other extensions through the substructures of
-render pass creation.
-The Vulkan 1.0 render pass creation sub-structures do not include
-ptext:sType/ptext:pNext members.
-Additionally, the render pass begin/next/end commands have been augmented
-with new extensible structures for passing additional subpass information.
-
-The slink:VkRenderPassMultiviewCreateInfo and
-slink:VkInputAttachmentAspectReference structures that extended the original
-slink:VkRenderPassCreateInfo are not accepted into the new creation
-functions, and instead their parameters are folded into this extension as
-follows:
-
-  * Elements of slink:VkRenderPassMultiviewCreateInfo::pname:pViewMasks are
-    now specified in slink:VkSubpassDescription2KHR::pname:viewMask.
-  * Elements of slink:VkRenderPassMultiviewCreateInfo::pname:pViewOffsets
-    are now specified in slink:VkSubpassDependency2KHR::pname:viewOffset.
-  * slink:VkRenderPassMultiviewCreateInfo::pname:correlationMaskCount and
-    slink:VkRenderPassMultiviewCreateInfo::pname:pCorrelationMasks are
-    directly specified in slink:VkRenderPassCreateInfo2KHR.
-  * slink:VkInputAttachmentAspectReference::pname:aspectMask is now
-    specified in the relevant input attachment description in
-    slink:VkAttachmentDescription2KHR::pname:aspectMask
-
-The details of these mappings are explained fully in the new structures.
-
-=== Promotion to Vulkan 1.2
-
-All functionality in this extension is included in core Vulkan 1.2, with the
-KHR suffix omitted.
-The original type, enum and command names are still available as aliases of
-the core functionality.
-
-include::{generated}/interfaces/VK_KHR_create_renderpass2.txt[]
-
-=== Version History
-
- * Revision 1, 2018-02-07 (Tobias Hector)
-   - Internal revisions
diff --git a/registry/vulkan/appendices/VK_KHR_dedicated_allocation.txt b/registry/vulkan/appendices/VK_KHR_dedicated_allocation.txt
deleted file mode 100644
index 2d04e17..0000000
--- a/registry/vulkan/appendices/VK_KHR_dedicated_allocation.txt
+++ /dev/null
@@ -1,148 +0,0 @@
-// Copyright 2016-2021 The Khronos Group, Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-include::{generated}/meta/{refprefix}VK_KHR_dedicated_allocation.txt[]
-
-=== Other Extension Metadata
-
-*Last Modified Date*::
-    2017-09-05
-*IP Status*::
-    No known IP claims.
-*Interactions and External Dependencies*::
-  - Promoted to Vulkan 1.1 Core
-*Contributors*::
-  - Jeff Bolz, NVIDIA
-  - Jason Ekstrand, Intel
-
-=== Description
-
-This extension enables resources to be bound to a dedicated allocation,
-rather than suballocated.
-For any particular resource, applications can: query whether a dedicated
-allocation is recommended, in which case using a dedicated allocation may:
-improve the performance of access to that resource.
-Normal device memory allocations must support multiple resources per
-allocation, memory aliasing and sparse binding, which could interfere with
-some optimizations.
-Applications should query the implementation for when a dedicated allocation
-may: be beneficial by adding a sname:VkMemoryDedicatedRequirementsKHR
-structure to the pname:pNext chain of the sname:VkMemoryRequirements2
-structure passed as the pname:pMemoryRequirements parameter of a call to
-fname:vkGetBufferMemoryRequirements2 or fname:vkGetImageMemoryRequirements2.
-Certain external handle types and external images or buffers may: also
-depend on dedicated allocations on implementations that associate image or
-buffer metadata with OS-level memory objects.
-
-This extension adds a two small structures to memory requirements querying
-and memory allocation: a new structure that flags whether an image/buffer
-should have a dedicated allocation, and a structure indicating the image or
-buffer that an allocation will be bound to.
-
-=== Promotion to Vulkan 1.1
-
-All functionality in this extension is included in core Vulkan 1.1, with the
-KHR suffix omitted.
-The original type, enum and command names are still available as aliases of
-the core functionality.
-
-include::{generated}/interfaces/VK_KHR_dedicated_allocation.txt[]
-
-=== Examples
-
-[source,c++]
---------------------------------------
-
-    // Create an image with a dedicated allocation based on the
-    // implementation's preference
-
-    VkImageCreateInfo imageCreateInfo =
-    {
-        // Image creation parameters
-    };
-
-    VkImage image;
-    VkResult result = vkCreateImage(
-        device,
-        &imageCreateInfo,
-        NULL,                               // pAllocator
-        &image);
-
-    VkMemoryDedicatedRequirementsKHR dedicatedRequirements =
-    {
-        VK_STRUCTURE_TYPE_MEMORY_DEDICATED_REQUIREMENTS_KHR,
-        NULL,                               // pNext
-    };
-
-    VkMemoryRequirements2 memoryRequirements =
-    {
-        VK_STRUCTURE_TYPE_MEMORY_REQUIREMENTS_2,
-        &dedicatedRequirements,             // pNext
-    };
-
-    const VkImageMemoryRequirementsInfo2 imageRequirementsInfo =
-    {
-        VK_STRUCTURE_TYPE_IMAGE_MEMORY_REQUIREMENTS_INFO_2,
-        NULL,                               // pNext
-        image
-    };
-
-    vkGetImageMemoryRequirements2(
-        device,
-        &imageRequirementsInfo,
-        &memoryRequirements);
-
-    if (dedicatedRequirements.prefersDedicatedAllocation) {
-        // Allocate memory with VkMemoryDedicatedAllocateInfoKHR::image
-        // pointing to the image we are allocating the memory for
-
-        VkMemoryDedicatedAllocateInfoKHR dedicatedInfo =
-        {
-            VK_STRUCTURE_TYPE_MEMORY_DEDICATED_ALLOCATE_INFO_KHR,   // sType
-            NULL,                                                   // pNext
-            image,                                                  // image
-            VK_NULL_HANDLE,                                         // buffer
-        };
-
-        VkMemoryAllocateInfo memoryAllocateInfo =
-        {
-            VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO,                 // sType
-            &dedicatedInfo,                                         // pNext
-            memoryRequirements.size,                                // allocationSize
-            FindMemoryTypeIndex(memoryRequirements.memoryTypeBits), // memoryTypeIndex
-        };
-
-        VkDeviceMemory memory;
-        vkAllocateMemory(
-            device,
-            &memoryAllocateInfo,
-            NULL,                       // pAllocator
-            &memory);
-
-        // Bind the image to the memory
-
-        vkBindImageMemory(
-            device,
-            image,
-            memory,
-            0);
-    } else {
-        // Take the normal memory sub-allocation path
-    }
-
---------------------------------------
-
-=== Version History
-
- * Revision 1, 2017-02-27 (James Jones)
-   - Copy content from VK_NV_dedicated_allocation
-   - Add some references to external object interactions to the overview.
-
- * Revision 2, 2017-03-27 (Jason Ekstrand)
-   - Rework the extension to be query-based
-
- * Revision 3, 2017-07-31 (Jason Ekstrand)
-   - Clarify that memory objects allocated with
-     VkMemoryDedicatedAllocateInfoKHR can only have the specified resource
-     bound and no others.
diff --git a/registry/vulkan/appendices/VK_KHR_deferred_host_operations.txt b/registry/vulkan/appendices/VK_KHR_deferred_host_operations.txt
deleted file mode 100644
index dc2220f..0000000
--- a/registry/vulkan/appendices/VK_KHR_deferred_host_operations.txt
+++ /dev/null
@@ -1,192 +0,0 @@
-// Copyright 2014-2021 The Khronos Group, Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-include::{generated}/meta/{refprefix}VK_KHR_deferred_host_operations.txt[]
-
-=== Other Extension Metadata
-
-*Last Modified Date*::
-    2020-11-12
-*IP Status*::
-    No known IP claims.
-*Contributors*::
-  - Joshua Barczak, Intel
-  - Jeff Bolz, NVIDIA
-  - Daniel Koch, NVIDIA
-  - Slawek Grajewski, Intel
-  - Tobias Hector, AMD
-  - Yuriy O'Donnell, Epic
-  - Eric Werness, NVIDIA
-  - Baldur Karlsson, Valve
-  - Jesse Barker, Unity
-  - Contributors to VK_KHR_acceleration_structure,
-    VK_KHR_ray_tracing_pipeline
-
-=== Description
-
-The `apiext:VK_KHR_deferred_host_operations` extension defines the
-infrastructure and usage patterns for deferrable commands, but does not
-specify any commands as deferrable.
-This is left to additional dependent extensions.
-Commands must: not be deferred unless the deferral is specifically allowed
-by another extension which depends on
-`apiext:VK_KHR_deferred_host_operations`.
-
-include::{generated}/interfaces/VK_KHR_deferred_host_operations.txt[]
-
-=== Code Examples
-
-The following examples will illustrate the concept of deferrable operations
-using a hypothetical example.
-The command ftext:vkDoSomethingExpensiveEXT denotes a deferrable command.
-The structure stext:VkExpensiveOperationArgsEXT represents the arguments
-which it would normally accept.
-
-The following example illustrates how a vulkan application might request
-deferral of an expensive operation:
-
-[source,cpp]
-----
-
-// create a deferred operation
-VkDeferredOperationKHR hOp;
-VkResult result = vkCreateDeferredOperationKHR(device, pCallbacks, &hOp);
-assert(result == VK_SUCCESS);
-
-result = vkDoSomethingExpensive(device, hOp, ...);
-assert( result == VK_OPERATION_DEFERRED_KHR );
-
-// operation was deferred.  Execute it asynchronously
-std::async::launch(
-    [ hOp ] ( )
-    {
-        vkDeferredOperationJoinKHR(device, hOp);
-
-        result = vkGetDeferredOperationResultKHR(device, hOp);
-
-        // deferred operation is now complete.  'result' indicates success or failure
-
-        vkDestroyDeferredOperationKHR(device, hOp, pCallbacks);
-    }
-);
-
-----
-
-The following example illustrates extracting concurrency from a single
-deferred operation:
-
-[source,cpp]
-----
-
-// create a deferred operation
-VkDeferredOperationKHR hOp;
-VkResult result = vkCreateDeferredOperationKHR(device, pCallbacks, &hOp);
-assert(result == VK_SUCCESS);
-
-result = vkDoSomethingExpensive(device, hOp, ...);
-assert( result == VK_OPERATION_DEFERRED_KHR );
-
-// Query the maximum amount of concurrency and clamp to the desired maximum
-uint32_t numLaunches = std::min(vkGetDeferredOperationMaxConcurrencyKHR(device, hOp), maxThreads);
-
-std::vector<std::future<void> > joins;
-
-for (uint32_t i = 0; i < numLaunches; i++) {
-  joins.emplace_back(std::async::launch(
-    [ hOp ] ( )
-    {
-        vkDeferredOperationJoinKHR(device, hOp);
-                // in a job system, a return of VK_THREAD_IDLE_KHR should queue another
-                // job, but it is not functionally required
-    }
-  );
-}
-
-for (auto &f : joins) {
-  f.get();
-}
-
-result = vkGetDeferredOperationResultKHR(device, hOp);
-
-// deferred operation is now complete.  'result' indicates success or failure
-
-vkDestroyDeferredOperationKHR(device, hOp, pCallbacks);
-
-----
-
-
-The following example shows a subroutine which guarantees completion of a
-deferred operation, in the presence of multiple worker threads, and returns
-the result of the operation.
-
-[source,cpp]
-----
-
-VkResult FinishDeferredOperation(VkDeferredOperationKHR hOp)
-{
-    // Attempt to join the operation until the implementation indicates that we should stop
-
-    VkResult result = vkDeferredOperationJoinKHR(device, hOp);
-    while( result == VK_THREAD_IDLE_KHR )
-    {
-        std::this_thread::yield();
-        result = vkDeferredOperationJoinKHR(device, hOp);
-    }
-
-    switch( result )
-    {
-    case VK_SUCCESS:
-        {
-            // deferred operation has finished.  Query its result
-            result = vkGetDeferredOperationResultKHR(device, hOp);
-        }
-        break;
-
-    case VK_THREAD_DONE_KHR:
-        {
-            // deferred operation is being wrapped up by another thread
-            //  wait for that thread to finish
-            do
-            {
-                std::this_thread::yield();
-                result = vkGetDeferredOperationResultKHR(device, hOp);
-            } while( result == VK_NOT_READY );
-        }
-        break;
-
-    default:
-        assert(false); // other conditions are illegal.
-        break;
-    }
-
-    return result;
-}
-----
-
-=== Issues
-
-. Should this extension have a VkPhysicalDevice*FeaturesKHR structure?
-
-*RESOLVED*: No.
-This extension does not add any functionality on its own and requires a
-dependent extension to actually enable functionality and thus there is no
-value in adding a feature structure.
-If necessary, any dependent extension could add a feature boolean if it
-wanted to indicate that it is adding optional deferral support.
-
-=== Version History
-
- * Revision 1, 2019-12-05 (Josh Barczak, Daniel Koch)
-   - Initial draft.
- * Revision 2, 2020-03-06 (Daniel Koch, Tobias Hector)
-   - Add missing VK_OBJECT_TYPE_DEFERRED_OPERATION_KHR enum
-   - fix sample code
-   - Clarified deferred operation parameter lifetimes (#2018,!3647)
- * Revision 3, 2020-05-15 (Josh Barczak)
-   - Clarify behavior of vkGetDeferredOperationMaxConcurrencyKHR, allowing
-     it to return 0 if the operation is complete (#2036,!3850)
- * Revision 4, 2020-11-12 (Tobias Hector, Daniel Koch)
-   - Remove VkDeferredOperationInfoKHR and change return value semantics
-     when deferred host operations are in use (#2067,3813)
-   - clarify return value of vkGetDeferredOperationResultKHR (#2339,!4110)
diff --git a/registry/vulkan/appendices/VK_KHR_depth_stencil_resolve.txt b/registry/vulkan/appendices/VK_KHR_depth_stencil_resolve.txt
deleted file mode 100644
index 93cd81a..0000000
--- a/registry/vulkan/appendices/VK_KHR_depth_stencil_resolve.txt
+++ /dev/null
@@ -1,72 +0,0 @@
-// Copyright 2018-2021 The Khronos Group, Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-include::{generated}/meta/{refprefix}VK_KHR_depth_stencil_resolve.txt[]
-
-=== Other Extension Metadata
-
-*Last Modified Date*::
-    2018-04-09
-*Interactions and External Dependencies*::
-  - Promoted to Vulkan 1.2 Core
-*Contributors*::
-  - Jan-Harald Fredriksen, Arm
-  - Andrew Garrard, Samsung Electronics
-  - Soowan Park, Samsung Electronics
-  - Jeff Bolz, NVIDIA
-  - Daniel Rakos, AMD
-
-=== Description
-
-This extension adds support for automatically resolving multisampled
-depth/stencil attachments in a subpass in a similar manner as for color
-attachments.
-
-Multisampled color attachments can be resolved at the end of a subpass by
-specifying pname:pResolveAttachments entries corresponding to the
-pname:pColorAttachments array entries.
-This does not allow for a way to map the resolve attachments to the
-depth/stencil attachment.
-The flink:vkCmdResolveImage command does not allow for depth/stencil images.
-While there are other ways to resolve the depth/stencil attachment, they can
-give sub-optimal performance.
-Extending the sname:VkSubpassDescription2 in this extension allows an
-application to add a pname:pDepthStencilResolveAttachment, that is similar
-to the color pname:pResolveAttachments, that the
-pname:pDepthStencilAttachment can be resolved into.
-
-Depth and stencil samples are resolved to a single value based on the
-resolve mode.
-The set of possible resolve modes is defined in the
-elink:VkResolveModeFlagBits enum.
-The ename:VK_RESOLVE_MODE_SAMPLE_ZERO_BIT mode is the only mode that is
-required of all implementations (that support the extension or support
-Vulkan 1.2 or higher).
-Some implementations may also support averaging (the same as color sample
-resolve) or taking the minimum or maximum sample, which may be more suitable
-for depth/stencil resolve.
-
-=== Promotion to Vulkan 1.2
-
-All functionality in this extension is included in core Vulkan 1.2, with the
-KHR suffix omitted.
-The original type, enum and command names are still available as aliases of
-the core functionality.
-
-include::{generated}/interfaces/VK_KHR_depth_stencil_resolve.txt[]
-
-=== Version History
-
- * Revision 1, 2018-04-09 (Jan-Harald Fredriksen)
-   - Initial revision
-
-ifdef::isrefpage[]
-
-=== Additional Resources
-
-* GDC 2019
-** https://www.youtube.com/watch?v=GnnEmJFFC7Q&feature=youtu.be&t=1983[`video`]
-** https://www.khronos.org/assets/uploads/developers/library/2019-gdc/Vulkan-Depth-Stencil-Resolve-GDC-Mar19.pdf[`slides`]
-
-endif::isrefpage[]
diff --git a/registry/vulkan/appendices/VK_KHR_descriptor_update_template.txt b/registry/vulkan/appendices/VK_KHR_descriptor_update_template.txt
deleted file mode 100644
index be62b3b..0000000
--- a/registry/vulkan/appendices/VK_KHR_descriptor_update_template.txt
+++ /dev/null
@@ -1,50 +0,0 @@
-// Copyright 2016-2021 The Khronos Group, Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-include::{generated}/meta/{refprefix}VK_KHR_descriptor_update_template.txt[]
-
-=== Other Extension Metadata
-
-*Last Modified Date*::
-    2017-09-05
-*IP Status*::
-    No known IP claims.
-*Interactions and External Dependencies*::
-  - Interacts with `apiext:VK_KHR_push_descriptor`
-  - Promoted to Vulkan 1.1 Core
-*Contributors*::
-  - Jeff Bolz, NVIDIA
-  - Michael Worcester, Imagination Technologies
-
-=== Description
-
-Applications may wish to update a fixed set of descriptors in a large number
-of descriptor sets very frequently, i.e. during initializaton phase or if it
-is required to rebuild descriptor sets for each frame.
-For those cases it is also not unlikely that all information required to
-update a single descriptor set is stored in a single struct.
-This extension provides a way to update a fixed set of descriptors in a
-single slink:VkDescriptorSet with a pointer to a user defined data structure
-describing the new descriptors.
-
-=== Promotion to Vulkan 1.1
-
-ifdef::VK_KHR_push_descriptor[]
-flink:vkCmdPushDescriptorSetWithTemplateKHR is included as an interaction
-with `apiext:VK_KHR_push_descriptor`.
-If Vulkan 1.1 and `VK_KHR_push_descriptor` are supported, this is included
-by `apiext:VK_KHR_push_descriptor`.
-endif::VK_KHR_push_descriptor[]
-
-The base functionality in this extension is included in core Vulkan 1.1,
-with the KHR suffix omitted.
-The original type, enum and command names are still available as aliases of
-the core functionality.
-
-include::{generated}/interfaces/VK_KHR_descriptor_update_template.txt[]
-
-=== Version History
-
-  * Revision 1, 2016-01-11 (Markus Tavenrath)
-    - Initial draft
diff --git a/registry/vulkan/appendices/VK_KHR_device_group.txt b/registry/vulkan/appendices/VK_KHR_device_group.txt
deleted file mode 100644
index 6ed300f..0000000
--- a/registry/vulkan/appendices/VK_KHR_device_group.txt
+++ /dev/null
@@ -1,87 +0,0 @@
-// Copyright 2016-2021 The Khronos Group, Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-include::{generated}/meta/{refprefix}VK_KHR_device_group.txt[]
-
-=== Other Extension Metadata
-
-*Last Modified Date*::
-    2017-10-10
-*IP Status*::
-    No known IP claims.
-*Interactions and External Dependencies*::
-  - Promoted to Vulkan 1.1 Core
-*Contributors*::
-  - Jeff Bolz, NVIDIA
-  - Tobias Hector, Imagination Technologies
-
-=== Description
-
-This extension provides functionality to use a logical device that consists
-of multiple physical devices, as created with the
-`apiext:VK_KHR_device_group_creation` extension.
-A device group can allocate memory across the subdevices, bind memory from
-one subdevice to a resource on another subdevice, record command buffers
-where some work executes on an arbitrary subset of the subdevices, and
-potentially present a swapchain image from one or more subdevices.
-
-=== Promotion to Vulkan 1.1
-
-ifdef::VK_KHR_swapchain[]
-The following enums, types and commands are included as interactions with
-`apiext:VK_KHR_swapchain`:
-
-  * ename:VK_STRUCTURE_TYPE_DEVICE_GROUP_PRESENT_CAPABILITIES_KHR
-  * ename:VK_STRUCTURE_TYPE_IMAGE_SWAPCHAIN_CREATE_INFO_KHR
-  * ename:VK_STRUCTURE_TYPE_BIND_IMAGE_MEMORY_SWAPCHAIN_INFO_KHR
-  * ename:VK_STRUCTURE_TYPE_ACQUIRE_NEXT_IMAGE_INFO_KHR
-  * ename:VK_STRUCTURE_TYPE_DEVICE_GROUP_PRESENT_INFO_KHR
-  * ename:VK_STRUCTURE_TYPE_DEVICE_GROUP_SWAPCHAIN_CREATE_INFO_KHR
-  * ename:VK_SWAPCHAIN_CREATE_SPLIT_INSTANCE_BIND_REGIONS_BIT_KHR
-  * elink:VkDeviceGroupPresentModeFlagBitsKHR
-  * slink:VkDeviceGroupPresentCapabilitiesKHR
-  * slink:VkImageSwapchainCreateInfoKHR
-  * slink:VkBindImageMemorySwapchainInfoKHR
-  * slink:VkAcquireNextImageInfoKHR
-  * slink:VkDeviceGroupPresentInfoKHR
-  * slink:VkDeviceGroupSwapchainCreateInfoKHR
-  * flink:vkGetDeviceGroupPresentCapabilitiesKHR
-  * flink:vkGetDeviceGroupSurfacePresentModesKHR
-  * flink:vkGetPhysicalDevicePresentRectanglesKHR
-  * flink:vkAcquireNextImage2KHR
-
-If Vulkan 1.1 and `apiext:VK_KHR_swapchain` are supported, these are
-included by `VK_KHR_swapchain`.
-endif::VK_KHR_swapchain[]
-
-The base functionality in this extension is included in core Vulkan 1.1,
-with the KHR suffix omitted.
-The original type, enum and command names are still available as aliases of
-the core functionality.
-
-include::{generated}/interfaces/VK_KHR_device_group.txt[]
-
-=== New Built-in Variables
-
-  * <<interfaces-builtin-variables-deviceindex,code:DeviceIndex>>
-
-=== New SPIR-V Capabilities
-
-  * <<spirvenv-capabilities-table-DeviceGroup,code:DeviceGroup>>
-
-=== Version History
-
- * Revision 1, 2016-10-19 (Jeff Bolz)
-   - Internal revisions
- * Revision 2, 2017-05-19 (Tobias Hector)
-   - Removed extended memory bind functions to VK_KHR_bind_memory2, added
-     dependency on that extension, and device-group-specific structs for
-     those functions.
- * Revision 3, 2017-10-06 (Ian Elliott)
-   - Corrected Vulkan 1.1 interactions with the WSI extensions.
-     All Vulkan 1.1 WSI interactions are with the VK_KHR_swapchain
-     extension.
- * Revision 4, 2017-10-10 (Jeff Bolz)
-   - Rename "`SFR`" bits and structure members to use the phrase "`split
-     instance bind regions`".
diff --git a/registry/vulkan/appendices/VK_KHR_device_group_creation.txt b/registry/vulkan/appendices/VK_KHR_device_group_creation.txt
deleted file mode 100644
index d52c036..0000000
--- a/registry/vulkan/appendices/VK_KHR_device_group_creation.txt
+++ /dev/null
@@ -1,73 +0,0 @@
-// Copyright 2016-2021 The Khronos Group, Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-include::{generated}/meta/{refprefix}VK_KHR_device_group_creation.txt[]
-
-=== Other Extension Metadata
-
-*Last Modified Date*::
-    2016-10-19
-*IP Status*::
-    No known IP claims.
-*Interactions and External Dependencies*::
-  - Promoted to Vulkan 1.1 Core
-*Contributors*::
-  - Jeff Bolz, NVIDIA
-
-=== Description
-
-This extension provides instance-level commands to enumerate groups of
-physical devices, and to create a logical device from a subset of one of
-those groups.
-Such a logical device can then be used with new features in the
-`apiext:VK_KHR_device_group` extension.
-
-=== Promotion to Vulkan 1.1
-
-All functionality in this extension is included in core Vulkan 1.1, with the
-KHR suffix omitted.
-The original type, enum and command names are still available as aliases of
-the core functionality.
-
-include::{generated}/interfaces/VK_KHR_device_group_creation.txt[]
-
-=== Examples
-
-[source,c++]
-----------------------------------------
-
-    VkDeviceCreateInfo devCreateInfo = { VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO };
-    // (not shown) fill out devCreateInfo as usual.
-    uint32_t deviceGroupCount = 0;
-    VkPhysicalDeviceGroupPropertiesKHR *props = NULL;
-
-    // Query the number of device groups
-    vkEnumeratePhysicalDeviceGroupsKHR(g_vkInstance, &deviceGroupCount, NULL);
-
-    // Allocate and initialize structures to query the device groups
-    props = (VkPhysicalDeviceGroupPropertiesKHR *)malloc(deviceGroupCount*sizeof(VkPhysicalDeviceGroupPropertiesKHR));
-    for (i = 0; i < deviceGroupCount; ++i) {
-        props[i].sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_GROUP_PROPERTIES_KHR;
-        props[i].pNext = NULL;
-    }
-    vkEnumeratePhysicalDeviceGroupsKHR(g_vkInstance, &deviceGroupCount, props);
-
-    // If the first device group has more than one physical device. create
-    // a logical device using all of the physical devices.
-    VkDeviceGroupDeviceCreateInfoKHR deviceGroupInfo = { VK_STRUCTURE_TYPE_DEVICE_GROUP_DEVICE_CREATE_INFO_KHR };
-    if (props[0].physicalDeviceCount > 1) {
-        deviceGroupInfo.physicalDeviceCount = props[0].physicalDeviceCount;
-        deviceGroupInfo.pPhysicalDevices = props[0].physicalDevices;
-        devCreateInfo.pNext = &deviceGroupInfo;
-    }
-
-    vkCreateDevice(props[0].physicalDevices[0], &devCreateInfo, NULL, &g_vkDevice);
-    free(props);
-
-----------------------------------------
-
-=== Version History
-
- * Revision 1, 2016-10-19 (Jeff Bolz)
-   - Internal revisions
diff --git a/registry/vulkan/appendices/VK_KHR_display.txt b/registry/vulkan/appendices/VK_KHR_display.txt
deleted file mode 100644
index 4d3882f..0000000
--- a/registry/vulkan/appendices/VK_KHR_display.txt
+++ /dev/null
@@ -1,352 +0,0 @@
-// Copyright 2014-2021 The Khronos Group, Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-include::{generated}/meta/{refprefix}VK_KHR_display.txt[]
-
-=== Other Extension Metadata
-
-*Last Modified Date*::
-    2017-03-13
-*IP Status*::
-    No known IP claims.
-*Contributors*::
-  - James Jones, NVIDIA
-  - Norbert Nopper, Freescale
-  - Jeff Vigil, Qualcomm
-  - Daniel Rakos, AMD
-
-=== Description
-
-This extension provides the API to enumerate displays and available modes on
-a given device.
-
-include::{generated}/interfaces/VK_KHR_display.txt[]
-
-=== Issues
-
-1) Which properties of a mode should be fixed in the mode information vs.
-settable in some other function when setting the mode? E.g., do we need to
-double the size of the mode pool to include both stereo and non-stereo
-modes? YUV and RGB scanout even if they both take RGB input images? BGR vs.
-RGB input? etc.
-
-*PROPOSED RESOLUTION*: Many modern displays support at most a handful of
-resolutions and timings natively.
-Other "`modes`" are expected to be supported using scaling hardware on the
-display engine or GPU.
-Other properties, such as rotation and mirroring should not require
-duplicating hardware modes just to express all combinations.
-Further, these properties may be implemented on a per-display or per-overlay
-granularity.
-
-To avoid the exponential growth of modes as mutable properties are added, as
-was the case with code:EGLConfig/WGL pixel formats/code:GLXFBConfig, this
-specification should separate out hardware properties and configurable state
-into separate objects.
-Modes and overlay planes will express capabilities of the hardware, while a
-separate structure will allow applications to configure scaling, rotation,
-mirroring, color keys, LUT values, alpha masks, etc.
-for a given swapchain independent of the mode in use.
-Constraints on these settings will be established by properties of the
-immutable objects.
-
-Note the resolution of this issue may affect issue 5 as well.
-
-2) What properties of a display itself are useful?
-
-*PROPOSED RESOLUTION*: This issue is too broad.
-It was meant to prompt general discussion, but resolving this issue amounts
-to completing this specification.
-All interesting properties should be included.
-The issue will remain as a placeholder since removing it would make it hard
-to parse existing discussion notes that refer to issues by number.
-
-3) How are multiple overlay planes within a display or mode enumerated?
-
-*PROPOSED RESOLUTION*: They are referred to by an index.
-Each display will report the number of overlay planes it contains.
-
-4) Should swapchains be created relative to a mode or a display?
-
-*PROPOSED RESOLUTION*: When using this extension, swapchains are created
-relative to a mode and a plane.
-The mode implies the display object the swapchain will present to.
-If the specified mode is not the display's current mode, the new mode will
-be applied when the first image is presented to the swapchain, and the
-default operating system mode, if any, will be restored when the swapchain
-is destroyed.
-
-5) Should users query generic ranges from displays and construct their own
-modes explicitly using those constraints rather than querying a fixed set of
-modes (Most monitors only have one real "`mode`" these days, even though
-many support relatively arbitrary scaling, either on the monitor side or in
-the GPU display engine, making "`modes`" something of a relic/compatibility
-construct).
-
-*PROPOSED RESOLUTION*: Expose both.
-Display information structures will expose a set of predefined modes, as
-well as any attributes necessary to construct a customized mode.
-
-6) Is it fine if we return the display and display mode handles in the
-structure used to query their properties?
-
-*PROPOSED RESOLUTION*: Yes.
-
-7) Is there a possibility that not all displays of a device work with all of
-the present queues of a device? If yes, how do we determine which displays
-work with which present queues?
-
-*PROPOSED RESOLUTION*: No known hardware has such limitations, but
-determining such limitations is supported automatically using the existing
-`apiext:VK_KHR_surface` and `apiext:VK_KHR_swapchain` query mechanisms.
-
-8) Should all presentation need to be done relative to an overlay plane, or
-can a display mode + display be used alone to target an output?
-
-*PROPOSED RESOLUTION*: Require specifying a plane explicitly.
-
-9) Should displays have an associated window system display, such as an
-code:HDC or code:Display*?
-
-*PROPOSED RESOLUTION*: No.
-Displays are independent of any windowing system in use on the system.
-Further, neither code:HDC nor code:Display* refer to a physical display
-object.
-
-10) Are displays queried from a physical GPU or from a device instance?
-
-*PROPOSED RESOLUTION*: Developers prefer to query modes directly from the
-physical GPU so they can use display information as an input to their device
-selection algorithms prior to device creation.
-This avoids the need to create placeholder device instances to enumerate
-displays.
-
-This preference must be weighed against the extra initialization that must
-be done by driver vendors prior to device instance creation to support this
-usage.
-
-11) Should displays and/or modes be dispatchable objects? If functions are
-to take displays, overlays, or modes as their first parameter, they must be
-dispatchable objects as defined in Khronos bug 13529.
-If they are not added to the list of dispatchable objects, functions
-operating on them must take some higher-level object as their first
-parameter.
-There is no performance case against making them dispatchable objects, but
-they would be the first extension objects to be dispatchable.
-
-*PROPOSED RESOLUTION*: Do not make displays or modes dispatchable.
-They will dispatch based on their associated physical device.
-
-12) Should hardware cursor capabilities be exposed?
-
-*PROPOSED RESOLUTION*: Defer.
-This could be a separate extension on top of the base WSI specs.
-
-ifdef::editing-notes[]
-[NOTE]
-.editing-note
-====
-There appears to be a missing sentence for the first part of issue 13 here.
-====
-endif::editing-notes[]
-
-if they are one physical display device to an end user, but may internally
-be implemented as two side-by-side displays using the same display engine
-(and sometimes cabling) resources as two physically separate display
-devices.
-
-*RESOLVED*: Tiled displays will appear as a single display object in this
-API.
-
-14) Should the raw EDID data be included in the display information?
-
-*RESOLVED*: No.
-A future extension could be added which reports the EDID if necessary.
-This may be complicated by the outcome of issue 13.
-
-15) Should min and max scaling factor capabilities of overlays be exposed?
-
-*RESOLVED*: Yes.
-This is exposed indirectly by allowing applications to query the min/max
-position and extent of the source and destination regions from which image
-contents are fetched by the display engine when using a particular mode and
-overlay pair.
-
-16) Should devices be able to expose planes that can be moved between
-displays? If so, how?
-
-*RESOLVED*: Yes.
-Applications can determine which displays a given plane supports using
-flink:vkGetDisplayPlaneSupportedDisplaysKHR.
-
-17) Should there be a way to destroy display modes? If so, does it support
-destroying "`built in`" modes?
-
-*RESOLVED*: Not in this extension.
-A future extension could add this functionality.
-
-18) What should the lifetime of display and built-in display mode objects
-be?
-
-*RESOLVED*: The lifetime of the instance.
-These objects cannot be destroyed.
-A future extension may be added to expose a way to destroy these objects
-and/or support display hotplug.
-
-19) Should persistent mode for smart panels be enabled/disabled at swapchain
-creation time, or on a per-present basis.
-
-*RESOLVED*: On a per-present basis.
-
-=== Examples
-
-[NOTE]
-.Note
-====
-The example code for the `VK_KHR_display` and
-`apiext:VK_KHR_display_swapchain` extensions was removed from the appendix
-after revision 1.0.43.
-The display enumeration example code was ported to the cube demo that is
-shipped with the official Khronos SDK, and is being kept up-to-date in that
-location (see:
-https://github.com/KhronosGroup/Vulkan-Tools/blob/master/cube/cube.c).
-====
-
-=== Version History
-
- * Revision 1, 2015-02-24 (James Jones)
-   - Initial draft
-
- * Revision 2, 2015-03-12 (Norbert Nopper)
-   - Added overlay enumeration for a display.
-
- * Revision 3, 2015-03-17 (Norbert Nopper)
-   - Fixed typos and namings as discussed in Bugzilla.
-   - Reordered and grouped functions.
-   - Added functions to query count of display, mode and overlay.
-   - Added native display handle, which may be needed on some platforms to
-     create a native Window.
-
- * Revision 4, 2015-03-18 (Norbert Nopper)
-   - Removed primary and virtualPostion members (see comment of James Jones
-     in Bugzilla).
-   - Added native overlay handle to information structure.
-   - Replaced , with ; in struct.
-
- * Revision 6, 2015-03-18 (Daniel Rakos)
-   - Added WSI extension suffix to all items.
-   - Made the whole API more "`Vulkanish`".
-   - Replaced all functions with a single vkGetDisplayInfoKHR function to
-     better match the rest of the API.
-   - Made the display, display mode, and overlay objects be first class
-     objects, not subclasses of VkBaseObject as they do not support the
-     common functions anyways.
-   - Renamed *Info structures to *Properties.
-   - Removed overlayIndex field from VkOverlayProperties as there is an
-     implicit index already as a result of moving to a "`Vulkanish`" API.
-   - Displays are not get through device, but through physical GPU to match
-     the rest of the Vulkan API.
-     Also this is something ISVs explicitly requested.
-   - Added issue (6) and (7).
-
- * Revision 7, 2015-03-25 (James Jones)
-   - Added an issues section
-   - Added rotation and mirroring flags
-
- * Revision 8, 2015-03-25 (James Jones)
-   - Combined the duplicate issues sections introduced in last change.
-   - Added proposed resolutions to several issues.
-
- * Revision 9, 2015-04-01 (Daniel Rakos)
-   - Rebased extension against Vulkan 0.82.0
-
- * Revision 10, 2015-04-01 (James Jones)
-   - Added issues (10) and (11).
-   - Added more straw-man issue resolutions, and cleaned up the proposed
-     resolution for issue (4).
-   - Updated the rotation and mirroring enums to have proper bitmask
-     semantics.
-
- * Revision 11, 2015-04-15 (James Jones)
-   - Added proposed resolution for issues (1) and (2).
-   - Added issues (12), (13), (14), and (15)
-   - Removed pNativeHandle field from overlay structure.
-   - Fixed small compilation errors in example code.
-
- * Revision 12, 2015-07-29 (James Jones)
-   - Rewrote the guts of the extension against the latest WSI swapchain
-     specifications and the latest Vulkan API.
-   - Address overlay planes by their index rather than an object handle and
-     refer to them as "`planes`" rather than "`overlays`" to make it
-     slightly clearer that even a display with no "`overlays`" still has at
-     least one base "`plane`" that images can be displayed on.
-   - Updated most of the issues.
-   - Added an "`extension type`" section to the specification header.
-   - Re-used the VK_EXT_KHR_surface surface transform enumerations rather
-     than redefining them here.
-   - Updated the example code to use the new semantics.
-
- * Revision 13, 2015-08-21 (Ian Elliott)
-   - Renamed this extension and all of its enumerations, types, functions,
-     etc.
-     This makes it compliant with the proposed standard for Vulkan
-     extensions.
-   - Switched from "`revision`" to "`version`", including use of the
-     VK_MAKE_VERSION macro in the header file.
-
- * Revision 14, 2015-09-01 (James Jones)
-   - Restore single-field revision number.
-
- * Revision 15, 2015-09-08 (James Jones)
-   - Added alpha flags enum.
-   - Added premultiplied alpha support.
-
- * Revision 16, 2015-09-08 (James Jones)
-   - Added description section to the spec.
-   - Added issues 16 - 18.
-
- * Revision 17, 2015-10-02 (James Jones)
-   - Planes are now a property of the entire device rather than individual
-     displays.
-     This allows planes to be moved between multiple displays on devices
-     that support it.
-   - Added a function to create a VkSurfaceKHR object describing a display
-     plane and mode to align with the new per-platform surface creation
-     conventions.
-   - Removed detailed mode timing data.
-     It was agreed that the mode extents and refresh rate are sufficient for
-     current use cases.
-     Other information could be added back in as an extension if it is
-     needed in the future.
-   - Added support for smart/persistent/buffered display devices.
-
- * Revision 18, 2015-10-26 (Ian Elliott)
-   - Renamed from VK_EXT_KHR_display to VK_KHR_display.
-
- * Revision 19, 2015-11-02 (James Jones)
-   - Updated example code to match revision 17 changes.
-
- * Revision 20, 2015-11-03 (Daniel Rakos)
-   - Added allocation callbacks to creation functions.
-
- * Revision 21, 2015-11-10 (Jesse Hall)
-   - Added VK_DISPLAY_PLANE_ALPHA_OPAQUE_BIT_KHR, and use
-     VkDisplayPlaneAlphaFlagBitsKHR for
-     VkDisplayPlanePropertiesKHR::alphaMode instead of
-     VkDisplayPlaneAlphaFlagsKHR, since it only represents one mode.
-   - Added reserved flags bitmask to VkDisplayPlanePropertiesKHR.
-   - Use VkSurfaceTransformFlagBitsKHR instead of obsolete
-     VkSurfaceTransformKHR.
-   - Renamed vkGetDisplayPlaneSupportedDisplaysKHR parameters for clarity.
-
- * Revision 22, 2015-12-18 (James Jones)
-   - Added missing "`planeIndex`" parameter to
-     vkGetDisplayPlaneSupportedDisplaysKHR()
-
- * Revision 23, 2017-03-13 (James Jones)
-   - Closed all remaining issues.
-     The specification and implementations have been shipping with the
-     proposed resolutions for some time now.
-   - Removed the sample code and noted it has been integrated into the
-     official Vulkan SDK cube demo.
diff --git a/registry/vulkan/appendices/VK_KHR_display_swapchain.txt b/registry/vulkan/appendices/VK_KHR_display_swapchain.txt
deleted file mode 100644
index 9874016..0000000
--- a/registry/vulkan/appendices/VK_KHR_display_swapchain.txt
+++ /dev/null
@@ -1,127 +0,0 @@
-// Copyright 2014-2021 The Khronos Group, Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-include::{generated}/meta/{refprefix}VK_KHR_display_swapchain.txt[]
-
-=== Other Extension Metadata
-
-*Last Modified Date*::
-    2017-03-13
-*IP Status*::
-    No known IP claims.
-*Contributors*::
-  - James Jones, NVIDIA
-  - Jeff Vigil, Qualcomm
-  - Jesse Hall, Google
-
-=== Description
-
-This extension provides an API to create a swapchain directly on a device's
-display without any underlying window system.
-
-include::{generated}/interfaces/VK_KHR_display_swapchain.txt[]
-
-=== Issues
-
-1) Should swapchains sharing images each hold a reference to the images, or
-should it be up to the application to destroy the swapchains and images in
-an order that avoids the need for reference counting?
-
-*RESOLVED*: Take a reference.
-The lifetime of presentable images is already complex enough.
-
-2) Should the pname:srcRect and pname:dstRect parameters be specified as
-part of the presentation command, or at swapchain creation time?
-
-*RESOLVED*: As part of the presentation command.
-This allows moving and scaling the image on the screen without the need to
-respecify the mode or create a new swapchain and presentable images.
-
-3) Should pname:srcRect and pname:dstRect be specified as rects, or separate
-offset/extent values?
-
-*RESOLVED*: As rects.
-Specifying them separately might make it easier for hardware to expose
-support for one but not the other, but in such cases applications must just
-take care to obey the reported capabilities and not use non-zero offsets or
-extents that require scaling, as appropriate.
-
-4) How can applications create multiple swapchains that use the same images?
-
-*RESOLVED*: By calling flink:vkCreateSharedSwapchainsKHR.
-
-An earlier resolution used flink:vkCreateSwapchainKHR, chaining multiple
-slink:VkSwapchainCreateInfoKHR structures through pname:pNext.
-In order to allow each swapchain to also allow other extension structs, a
-level of indirection was used: slink:VkSwapchainCreateInfoKHR::pname:pNext
-pointed to a different structure, which had both pname:sType and pname:pNext
-members for additional extensions, and also had a pointer to the next
-slink:VkSwapchainCreateInfoKHR structure.
-The number of swapchains to be created could only be found by walking this
-linked list of alternating structures, and the pname:pSwapchains out
-parameter was reinterpreted to be an array of slink:VkSwapchainKHR handles.
-
-Another option considered was a method to specify a "`shared`" swapchain
-when creating a new swapchain, such that groups of swapchains using the same
-images could be built up one at a time.
-This was deemed unusable because drivers need to know all of the displays an
-image will be used on when determining which internal formats and layouts to
-use for that image.
-
-=== Examples
-
-[NOTE]
-.Note
-====
-The example code for the `apiext:VK_KHR_display` and
-`VK_KHR_display_swapchain` extensions was removed from the appendix after
-revision 1.0.43.
-The display swapchain creation example code was ported to the cube demo that
-is shipped with the official Khronos SDK, and is being kept up-to-date in
-that location (see:
-https://github.com/KhronosGroup/Vulkan-Tools/blob/master/cube/cube.c).
-====
-
-=== Version History
-
- * Revision 1, 2015-07-29 (James Jones)
-   - Initial draft
-
- * Revision 2, 2015-08-21 (Ian Elliott)
-   - Renamed this extension and all of its enumerations, types, functions,
-     etc.
-     This makes it compliant with the proposed standard for Vulkan
-     extensions.
-   - Switched from "`revision`" to "`version`", including use of the
-     VK_MAKE_VERSION macro in the header file.
-
- * Revision 3, 2015-09-01 (James Jones)
-   - Restore single-field revision number.
-
- * Revision 4, 2015-09-08 (James Jones)
-   - Allow creating multiple swap chains that share the same images using a
-     single call to vkCreateSwapchainKHR().
-
- * Revision 5, 2015-09-10 (Alon Or-bach)
-   - Removed underscores from SWAP_CHAIN in two enums.
-
- * Revision 6, 2015-10-02 (James Jones)
-   - Added support for smart panels/buffered displays.
-
- * Revision 7, 2015-10-26 (Ian Elliott)
-   - Renamed from VK_EXT_KHR_display_swapchain to VK_KHR_display_swapchain.
-
- * Revision 8, 2015-11-03 (Daniel Rakos)
-   - Updated sample code based on the changes to VK_KHR_swapchain.
-
- * Revision 9, 2015-11-10 (Jesse Hall)
-   - Replaced VkDisplaySwapchainCreateInfoKHR with
-     vkCreateSharedSwapchainsKHR, changing resolution of issue #4.
-
- * Revision 10, 2017-03-13 (James Jones)
-   - Closed all remaining issues.
-     The specification and implementations have been shipping with the
-     proposed resolutions for some time now.
-   - Removed the sample code and noted it has been integrated into the
-     official Vulkan SDK cube demo.
diff --git a/registry/vulkan/appendices/VK_KHR_draw_indirect_count.txt b/registry/vulkan/appendices/VK_KHR_draw_indirect_count.txt
deleted file mode 100644
index e5426cc..0000000
--- a/registry/vulkan/appendices/VK_KHR_draw_indirect_count.txt
+++ /dev/null
@@ -1,50 +0,0 @@
-// Copyright 2016-2021 The Khronos Group, Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-include::{generated}/meta/{refprefix}VK_KHR_draw_indirect_count.txt[]
-
-=== Other Extension Metadata
-
-*Last Modified Date*::
-    2017-08-25
-*Interactions and External Dependencies*::
-  - Promoted to Vulkan 1.2 Core
-*IP Status*::
-    No known IP claims.
-*Contributors*::
-  - Matthaeus G. Chajdas, AMD
-  - Derrick Owens, AMD
-  - Graham Sellers, AMD
-  - Daniel Rakos, AMD
-  - Dominik Witczak, AMD
-  - Piers Daniell, NVIDIA
-
-=== Description
-
-This extension is based off the `apiext:VK_AMD_draw_indirect_count`
-extension.
-This extension allows an application to source the number of draws for
-indirect draw calls from a buffer.
-
-Applications might want to do culling on the GPU via a compute shader prior
-to drawing.
-This enables the application to generate an arbitrary number of drawing
-commands and execute them without host intervention.
-
-=== Promotion to Vulkan 1.2
-
-All functionality in this extension is included in core Vulkan 1.2, with the
-KHR suffix omitted.
-However, if Vulkan 1.2 is supported and this extension is not, the entry
-points flink:vkCmdDrawIndirectCount and flink:vkCmdDrawIndexedIndirectCount
-are optional.
-The original type, enum and command names are still available as aliases of
-the core functionality.
-
-include::{generated}/interfaces/VK_KHR_draw_indirect_count.txt[]
-
-=== Version History
-
- * Revision 1, 2017-08-25 (Piers Daniell)
-   - Initial draft based off VK_AMD_draw_indirect_count
diff --git a/registry/vulkan/appendices/VK_KHR_driver_properties.txt b/registry/vulkan/appendices/VK_KHR_driver_properties.txt
deleted file mode 100644
index 36fea9f..0000000
--- a/registry/vulkan/appendices/VK_KHR_driver_properties.txt
+++ /dev/null
@@ -1,43 +0,0 @@
-// Copyright 2016-2021 The Khronos Group, Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-include::{generated}/meta/{refprefix}VK_KHR_driver_properties.txt[]
-
-=== Other Extension Metadata
-
-*Last Modified Date*::
-    2018-04-11
-*Interactions and External Dependencies*::
-  - Promoted to Vulkan 1.2 Core
-*IP Status*::
-    No known IP claims.
-*Contributors*::
-  - Baldur Karlsson
-  - Matthaeus G. Chajdas, AMD
-  - Piers Daniell, NVIDIA
-  - Alexander Galazin, Arm
-  - Jesse Hall, Google
-  - Daniel Rakos, AMD
-
-=== Description
-
-This extension provides a new physical device query which allows retrieving
-information about the driver implementation, allowing applications to
-determine which physical device corresponds to which particular vendor's
-driver, and which conformance test suite version the driver implementation
-is compliant with.
-
-=== Promotion to Vulkan 1.2
-
-All functionality in this extension is included in core Vulkan 1.2, with the
-KHR suffix omitted.
-The original type, enum and command names are still available as aliases of
-the core functionality.
-
-include::{generated}/interfaces/VK_KHR_driver_properties.txt[]
-
-=== Version History
-
- * Revision 1, 2018-04-11 (Daniel Rakos)
-   - Internal revisions
diff --git a/registry/vulkan/appendices/VK_KHR_dynamic_rendering.txt b/registry/vulkan/appendices/VK_KHR_dynamic_rendering.txt
deleted file mode 100644
index 77ebe3e..0000000
--- a/registry/vulkan/appendices/VK_KHR_dynamic_rendering.txt
+++ /dev/null
@@ -1,43 +0,0 @@
-// Copyright 2017-2021 The Khronos Group, Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-include::{generated}/meta/{refprefix}VK_KHR_dynamic_rendering.txt[]
-
-=== Other Extension Metadata
-
-*Last Modified Date*::
-    2021-10-06
-*Contributors*::
-  - Tobias Hector, AMD
-  - Arseny Kapoulkine, Roblox
-  - François Duranleau, Gameloft
-  - Stuart Smith, AMD
-  - Hai Nguyen, Google
-  - Jean-François Roy, Google
-  - Jeff Leger, Qualcomm
-  - Jan-Harald Fredriksen, Arm
-  - Piers Daniell, Nvidia
-  - James Fitzpatrick, Imagination
-  - Piotr Byszewski, Mobica
-  - Jesse Hall, Google
-  - Mike Blumenkrantz, Valve
-
-=== Description
-
-This extension allows applications to create single-pass render pass
-instances without needing to create render pass objects or framebuffers.
-Dynamic render passes can also span across multiple primary command buffers,
-rather than relying on secondary command buffers.
-
-This extension also incorporates ename:VK_ATTACHMENT_STORE_OP_NONE_KHR from
-<<VK_QCOM_render_pass_store_ops,VK_QCOM_render_pass_store_ops>>, enabling
-applications to avoid unnecessary synchronization when an attachment is not
-written during a render pass.
-
-include::{generated}/interfaces/VK_KHR_dynamic_rendering.txt[]
-
-=== Version History
-
-  * Revision 1, 2021-10-06 (Tobias Hector)
-    - Initial revision
diff --git a/registry/vulkan/appendices/VK_KHR_external_fence.txt b/registry/vulkan/appendices/VK_KHR_external_fence.txt
deleted file mode 100644
index 68e639e..0000000
--- a/registry/vulkan/appendices/VK_KHR_external_fence.txt
+++ /dev/null
@@ -1,48 +0,0 @@
-// Copyright 2016-2021 The Khronos Group, Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-include::{generated}/meta/{refprefix}VK_KHR_external_fence.txt[]
-
-=== Other Extension Metadata
-
-*Last Modified Date*::
-    2017-05-08
-*IP Status*::
-    No known IP claims.
-*Interactions and External Dependencies*::
-  - Promoted to Vulkan 1.1 Core
-*Contributors*::
-  - Jesse Hall, Google
-  - James Jones, NVIDIA
-  - Jeff Juliano, NVIDIA
-  - Cass Everitt, Oculus
-  - Contributors to `apiext:VK_KHR_external_semaphore`
-
-=== Description
-
-An application using external memory may wish to synchronize access to that
-memory using fences.
-This extension enables an application to create fences from which non-Vulkan
-handles that reference the underlying synchronization primitive can be
-exported.
-
-=== Promotion to Vulkan 1.1
-
-All functionality in this extension is included in core Vulkan 1.1, with the
-KHR suffix omitted.
-The original type, enum and command names are still available as aliases of
-the core functionality.
-
-include::{generated}/interfaces/VK_KHR_external_fence.txt[]
-
-=== Issues
-
-This extension borrows concepts, semantics, and language from
-`apiext:VK_KHR_external_semaphore`.
-That extension's issues apply equally to this extension.
-
-=== Version History
-
-  * Revision 1, 2017-05-08 (Jesse Hall)
-    - Initial revision
diff --git a/registry/vulkan/appendices/VK_KHR_external_fence_capabilities.txt b/registry/vulkan/appendices/VK_KHR_external_fence_capabilities.txt
deleted file mode 100644
index fe8480b..0000000
--- a/registry/vulkan/appendices/VK_KHR_external_fence_capabilities.txt
+++ /dev/null
@@ -1,43 +0,0 @@
-// Copyright 2016-2021 The Khronos Group, Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-include::{generated}/meta/{refprefix}VK_KHR_external_fence_capabilities.txt[]
-
-=== Other Extension Metadata
-
-*Last Modified Date*::
-    2017-05-08
-*IP Status*::
-    No known IP claims.
-*Interactions and External Dependencies*::
-  - Promoted to Vulkan 1.1 Core
-*Contributors*::
-  - Jesse Hall, Google
-  - James Jones, NVIDIA
-  - Jeff Juliano, NVIDIA
-  - Cass Everitt, Oculus
-  - Contributors to `apiext:VK_KHR_external_semaphore_capabilities`
-
-=== Description
-
-An application may wish to reference device fences in multiple Vulkan
-logical devices or instances, in multiple processes, and/or in multiple
-APIs.
-This extension provides a set of capability queries and handle definitions
-that allow an application to determine what types of "`external`" fence
-handles an implementation supports for a given set of use cases.
-
-=== Promotion to Vulkan 1.1
-
-All functionality in this extension is included in core Vulkan 1.1, with the
-KHR suffix omitted.
-The original type, enum and command names are still available as aliases of
-the core functionality.
-
-include::{generated}/interfaces/VK_KHR_external_fence_capabilities.txt[]
-
-=== Version History
-
- * Revision 1, 2017-05-08 (Jesse Hall)
-   - Initial version
diff --git a/registry/vulkan/appendices/VK_KHR_external_fence_fd.txt b/registry/vulkan/appendices/VK_KHR_external_fence_fd.txt
deleted file mode 100644
index a043733..0000000
--- a/registry/vulkan/appendices/VK_KHR_external_fence_fd.txt
+++ /dev/null
@@ -1,38 +0,0 @@
-// Copyright 2016-2021 The Khronos Group, Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-include::{generated}/meta/{refprefix}VK_KHR_external_fence_fd.txt[]
-
-=== Other Extension Metadata
-
-*Last Modified Date*::
-    2017-05-08
-*IP Status*::
-    No known IP claims.
-*Contributors*::
-  - Jesse Hall, Google
-  - James Jones, NVIDIA
-  - Jeff Juliano, NVIDIA
-  - Cass Everitt, Oculus
-  - Contributors to `apiext:VK_KHR_external_semaphore_fd`
-
-=== Description
-
-An application using external memory may wish to synchronize access to that
-memory using fences.
-This extension enables an application to export fence payload to and import
-fence payload from POSIX file descriptors.
-
-include::{generated}/interfaces/VK_KHR_external_fence_fd.txt[]
-
-=== Issues
-
-This extension borrows concepts, semantics, and language from
-`apiext:VK_KHR_external_semaphore_fd`.
-That extension's issues apply equally to this extension.
-
-=== Version History
-
-  * Revision 1, 2017-05-08 (Jesse Hall)
-    - Initial revision
diff --git a/registry/vulkan/appendices/VK_KHR_external_fence_win32.txt b/registry/vulkan/appendices/VK_KHR_external_fence_win32.txt
deleted file mode 100644
index 5c88d74..0000000
--- a/registry/vulkan/appendices/VK_KHR_external_fence_win32.txt
+++ /dev/null
@@ -1,51 +0,0 @@
-// Copyright 2016-2021 The Khronos Group, Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-include::{generated}/meta/{refprefix}VK_KHR_external_fence_win32.txt[]
-
-=== Other Extension Metadata
-
-*Last Modified Date*::
-    2017-05-08
-*IP Status*::
-    No known IP claims.
-*Contributors*::
-  - Jesse Hall, Google
-  - James Jones, NVIDIA
-  - Jeff Juliano, NVIDIA
-  - Cass Everitt, Oculus
-  - Contributors to `apiext:VK_KHR_external_semaphore_win32`
-
-=== Description
-
-An application using external memory may wish to synchronize access to that
-memory using fences.
-This extension enables an application to export fence payload to and import
-fence payload from Windows handles.
-
-include::{generated}/interfaces/VK_KHR_external_fence_win32.txt[]
-
-=== Issues
-
-This extension borrows concepts, semantics, and language from
-`apiext:VK_KHR_external_semaphore_win32`.
-That extension's issues apply equally to this extension.
-
-1) Should D3D12 fence handle types be supported, like they are for
-semaphores?
-
-*RESOLVED*: No.
-Doing so would require extending the fence signal and wait operations to
-provide values to signal / wait for, like sname:VkD3D12FenceSubmitInfoKHR
-does.
-A D3D12 fence can be signaled by importing it into a slink:VkSemaphore
-instead of a slink:VkFence, and applications can check status or wait on the
-D3D12 fence using non-Vulkan APIs.
-The convenience of being able to do these operations on sname:VkFence
-objects does not justify the extra API complexity.
-
-=== Version History
-
-  * Revision 1, 2017-05-08 (Jesse Hall)
-    - Initial revision
diff --git a/registry/vulkan/appendices/VK_KHR_external_memory.txt b/registry/vulkan/appendices/VK_KHR_external_memory.txt
deleted file mode 100644
index 3020529..0000000
--- a/registry/vulkan/appendices/VK_KHR_external_memory.txt
+++ /dev/null
@@ -1,248 +0,0 @@
-// Copyright 2016-2021 The Khronos Group, Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-include::{generated}/meta/{refprefix}VK_KHR_external_memory.txt[]
-
-=== Other Extension Metadata
-
-*Last Modified Date*::
-    2016-10-20
-*IP Status*::
-    No known IP claims.
-*Interactions and External Dependencies*::
-  - Interacts with `apiext:VK_KHR_dedicated_allocation`.
-  - Interacts with `apiext:VK_NV_dedicated_allocation`.
-  - Promoted to Vulkan 1.1 Core
-*Contributors*::
-  - Jason Ekstrand, Intel
-  - Ian Elliot, Google
-  - Jesse Hall, Google
-  - Tobias Hector, Imagination Technologies
-  - James Jones, NVIDIA
-  - Jeff Juliano, NVIDIA
-  - Matthew Netsch, Qualcomm Technologies, Inc.
-  - Daniel Rakos, AMD
-  - Carsten Rohde, NVIDIA
-  - Ray Smith, ARM
-  - Chad Versace, Google
-
-=== Description
-
-An application may wish to reference device memory in multiple Vulkan
-logical devices or instances, in multiple processes, and/or in multiple
-APIs.
-This extension enables an application to export non-Vulkan handles from
-Vulkan memory objects such that the underlying resources can be referenced
-outside the scope of the Vulkan logical device that created them.
-
-=== Promotion to Vulkan 1.1
-
-All functionality in this extension is included in core Vulkan 1.1, with the
-KHR suffix omitted.
-The original type, enum and command names are still available as aliases of
-the core functionality.
-
-include::{generated}/interfaces/VK_KHR_external_memory.txt[]
-
-=== Issues
-
-1) How do applications correlate two physical devices across process or
-Vulkan instance boundaries?
-
-*RESOLVED*: New device ID fields have been introduced by
-`apiext:VK_KHR_external_memory_capabilities`.
-These fields, combined with the existing
-slink:VkPhysicalDeviceProperties::pname:driverVersion field can be used to
-identify compatible devices across processes, drivers, and APIs.
-slink:VkPhysicalDeviceProperties::pname:pipelineCacheUUID is not sufficient
-for this purpose because despite its description in the specification, it
-need only identify a unique pipeline cache format in practice.
-Multiple devices may be able to use the same pipeline cache data, and hence
-it would be desirable for all of them to have the same pipeline cache UUID.
-However, only the same concrete physical device can be used when sharing
-memory, so an actual unique device ID was introduced.
-Further, the pipeline cache UUID was specific to Vulkan, but correlation
-with other, non-extensible APIs is required to enable interoperation with
-those APIs.
-
-2) If memory objects are shared between processes and APIs, is this
-considered aliasing according to the rules outlined in the
-<<resources-memory-aliasing,Memory Aliasing>> section?
-
-*RESOLVED*: Yes.
-Applications must take care to obey all restrictions imposed on aliased
-resources when using memory across multiple Vulkan instances or other APIs.
-
-3) Are new image layouts or metadata required to specify image layouts and
-layout transitions compatible with non-Vulkan APIs, or with other instances
-of the same Vulkan driver?
-
-*RESOLVED*: Separate instances of the same Vulkan driver running on the same
-GPU should have identical internal layout semantics, so applications have
-the tools they need to ensure views of images are consistent between the two
-instances.
-Other APIs will fall into two categories: Those that are Vulkan- compatible,
-and those that are Vulkan-incompatible.
-Vulkan-incompatible APIs will require the image to be in the GENERAL layout
-whenever they are accessing them.
-
-Note this does not attempt to address cross-device transitions, nor
-transitions to engines on the same device which are not visible within the
-Vulkan API.
-Both of these are beyond the scope of this extension.
-
-4) Is a new barrier flag or operation of some type needed to prepare
-external memory for handoff to another Vulkan instance or API and/or receive
-it from another instance or API?
-
-*RESOLVED*: Yes.
-Some implementations need to perform additional cache management when
-transitioning memory between address spaces and other APIs, instances, or
-processes which may operate in a separate address space.
-Options for defining this transition include:
-
-  * A new structure that can be added to the pname:pNext list in
-    slink:VkMemoryBarrier, slink:VkBufferMemoryBarrier, and
-    slink:VkImageMemoryBarrier.
-  * A new bit in tlink:VkAccessFlags that can be set to indicate an
-    "`external`" access.
-  * A new bit in tlink:VkDependencyFlags
-  * A new special queue family that represents an "`external`" queue.
-
-A new structure has the advantage that the type of external transition can
-be described in as much detail as necessary.
-However, there is not currently a known need for anything beyond
-differentiating between external and internal accesses, so this is likely an
-over-engineered solution.
-The access flag bit has the advantage that it can be applied at buffer,
-image, or global granularity, and semantically it maps pretty well to the
-operation being described.
-Additionally, the API already includes ename:VK_ACCESS_MEMORY_READ_BIT and
-ename:VK_ACCESS_MEMORY_WRITE_BIT which appear to be intended for this
-purpose.
-However, there is no obvious pipeline stage that would correspond to an
-external access, and therefore no clear way to use
-ename:VK_ACCESS_MEMORY_READ_BIT or ename:VK_ACCESS_MEMORY_WRITE_BIT.
-tlink:VkDependencyFlags and tlink:VkPipelineStageFlags operate at command
-granularity rather than image or buffer granularity, which would make an
-entire pipeline barrier an internal->external or external->internal barrier.
-This may not be a problem in practice, but seems like the wrong scope.
-Another downside of tlink:VkDependencyFlags is that it lacks inherent
-directionality: there are no ptext:src and ptext:dst variants of it in the
-barrier or dependency description semantics, so two bits might need to be
-added to describe both internal->external and external->internal
-transitions.
-Transitioning a resource to a special queue family corresponds well with the
-operation of transitioning to a separate Vulkan instance, in that both
-operations ideally include scheduling a barrier on both sides of the
-transition: Both the releasing and the acquiring queue or process.
-Using a special queue family requires adding an additional reserved queue
-family index.
-Re-using ename:VK_QUEUE_FAMILY_IGNORED would have left it unclear how to
-transition a concurrent usage resource from one process to another, since
-the semantics would have likely been equivalent to the currently-ignored
-transition of
-ename:VK_QUEUE_FAMILY_IGNORED{nbsp}->{nbsp}ename:VK_QUEUE_FAMILY_IGNORED.
-Fortunately, creating a new reserved queue family index is not invasive.
-
-Based on the above analysis, the approach of transitioning to a special
-"`external`" queue family was chosen.
-
-5) Do internal driver memory arrangements and/or other internal driver image
-properties need to be exported and imported when sharing images across
-processes or APIs.
-
-*RESOLVED*: Some vendors claim this is necessary on their implementations,
-but it was determined that the security risks of allowing opaque metadata to
-be passed from applications to the driver were too high.
-Therefore, implementations which require metadata will need to associate it
-with the objects represented by the external handles, and rely on the
-dedicated allocation mechanism to associate the exported and imported memory
-objects with a single image or buffer.
-
-6) Most prior interoperation and cross-process sharing APIs have been based
-on image-level sharing.
-Should Vulkan sharing be based on memory-object sharing or image sharing?
-
-*RESOLVED*: These extensions have assumed memory-level sharing is the
-correct granularity.
-Vulkan is a lower-level API than most prior APIs, and as such attempts to
-closely align with to the underlying primitives of the hardware and
-system-level drivers it abstracts.
-In general, the resource that holds the backing store for both images and
-buffers of various types is memory.
-Images and buffers are merely metadata containing brief descriptions of the
-layout of bits within that memory.
-
-Because memory object-based sharing is aligned with the overall Vulkan API
-design, it enables the full range of Vulkan capabilities with external
-objects.
-External memory can be used as backing for sparse images, for example,
-whereas such usage would be awkward at best with a sharing mechanism based
-on higher-level primitives such as images.
-Further, aligning the mechanism with the API in this way provides some hope
-of trivial compatibility with future API enhancements.
-If new objects backed by memory objects are added to the API, they too can
-be used across processes with minimal additions to the base external memory
-APIs.
-
-Earlier APIs implemented interop at a higher level, and this necessitated
-entirely separate sharing APIs for images and buffers.
-To co-exist and interoperate with those APIs, the Vulkan external sharing
-mechanism must accommodate their model.
-However, if it can be agreed that memory-based sharing is the more desirable
-and forward-looking design, legacy interoperation constraints can be
-considered another reason to favor memory-based sharing: while native and
-legacy driver primitives that may be used to implement sharing may not be as
-low-level as the API here suggests, raw memory is still the least common
-denominator among the types.
-Image-based sharing can be cleanly derived from a set of base memory- object
-sharing APIs with minimal effort, whereas image-based sharing does not
-generalize well to buffer or raw-memory sharing.
-Therefore, following the general Vulkan design principle of minimalism, it
-is better to expose interopability with image-based native and external
-primitives via the memory sharing API, and place sufficient limits on their
-usage to ensure they can be used only as backing for equivalent Vulkan
-images.
-This provides a consistent API for applications regardless of which platform
-or external API they are targeting, which makes development of multi-API and
-multi-platform applications simpler.
-
-7) Should Vulkan define a common external handle type and provide Vulkan
-functions to facilitate cross-process sharing of such handles rather than
-relying on native handles to define the external objects?
-
-*RESOLVED*: No.
-Cross-process sharing of resources is best left to native platforms.
-There are myriad security and extensibility issues with such a mechanism,
-and attempting to re-solve all those issues within Vulkan does not align
-with Vulkan's purpose as a graphics API.
-If desired, such a mechanism could be built as a layer or helper library on
-top of the opaque native handle defined in this family of extensions.
-
-8) Must implementations provide additional guarantees about state implicitly
-included in memory objects for those memory objects that may be exported?
-
-*RESOLVED*: Implementations must ensure that sharing memory objects does not
-transfer any information between the exporting and importing instances and
-APIs other than that required to share the data contained in the memory
-objects explicitly shared.
-As specific examples, data from previously freed memory objects that used
-the same underlying physical memory, and data from memory obects using
-adjacent physical memory must not be visible to applications importing an
-exported memory object.
-
-9) Must implementations validate external handles the application provides
-as inputs to memory import operations?
-
-*RESOLVED*: Implementations must return an error to the application if the
-provided memory handle cannot be used to complete the requested import
-operation.
-However, implementations need not validate handles are of the exact type
-specified by the application.
-
-=== Version History
-
- * Revision 1, 2016-10-20 (James Jones)
-   - Initial version
diff --git a/registry/vulkan/appendices/VK_KHR_external_memory_capabilities.txt b/registry/vulkan/appendices/VK_KHR_external_memory_capabilities.txt
deleted file mode 100644
index 22c4931..0000000
--- a/registry/vulkan/appendices/VK_KHR_external_memory_capabilities.txt
+++ /dev/null
@@ -1,107 +0,0 @@
-// Copyright 2016-2021 The Khronos Group, Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-include::{generated}/meta/{refprefix}VK_KHR_external_memory_capabilities.txt[]
-
-=== Other Extension Metadata
-
-*Last Modified Date*::
-    2016-10-17
-*IP Status*::
-    No known IP claims.
-*Interactions and External Dependencies*::
-  - Interacts with `apiext:VK_KHR_dedicated_allocation`.
-  - Interacts with `apiext:VK_NV_dedicated_allocation`.
-  - Promoted to Vulkan 1.1 Core
-*Contributors*::
-  - Ian Elliot, Google
-  - Jesse Hall, Google
-  - James Jones, NVIDIA
-
-=== Description
-
-An application may wish to reference device memory in multiple Vulkan
-logical devices or instances, in multiple processes, and/or in multiple
-APIs.
-This extension provides a set of capability queries and handle definitions
-that allow an application to determine what types of "`external`" memory
-handles an implementation supports for a given set of use cases.
-
-=== Promotion to Vulkan 1.1
-
-All functionality in this extension is included in core Vulkan 1.1, with the
-KHR suffix omitted.
-The original type, enum and command names are still available as aliases of
-the core functionality.
-
-include::{generated}/interfaces/VK_KHR_external_memory_capabilities.txt[]
-
-=== Issues
-
-1) Why do so many external memory capabilities need to be queried on a
-per-memory-handle-type basis?
-
-*PROPOSED RESOLUTION*: This is because some handle types are based on
-OS-native objects that have far more limited capabilities than the very
-generic Vulkan memory objects.
-Not all memory handle types can name memory objects that support 3D images,
-for example.
-Some handle types cannot even support the deferred image and memory binding
-behavior of Vulkan and require specifying the image when allocating or
-importing the memory object.
-
-2) Do the slink:VkExternalImageFormatPropertiesKHR and
-slink:VkExternalBufferPropertiesKHR structs need to include a list of memory
-type bits that support the given handle type?
-
-*PROPOSED RESOLUTION*: No.
-The memory types that do not support the handle types will simply be
-filtered out of the results returned by flink:vkGetImageMemoryRequirements
-and flink:vkGetBufferMemoryRequirements when a set of handle types was
-specified at image or buffer creation time.
-
-3) Should the non-opaque handle types be moved to their own extension?
-
-*PROPOSED RESOLUTION*: Perhaps.
-However, defining the handle type bits does very little and does not require
-any platform-specific types on its own, and it is easier to maintain the
-bitfield values in a single extension for now.
-Presumably more handle types could be added by separate extensions though,
-and it would be midly weird to have some platform-specific ones defined in
-the core spec and some in extensions
-
-4) Do we need a code:D3D11_TILEPOOL type?
-
-*PROPOSED RESOLUTION*: No.
-This is technically possible, but the synchronization is awkward.
-D3D11 surfaces must be synchronized using shared mutexes, and these
-synchronization primitives are shared by the entire memory object, so D3D11
-shared allocations divided among multiple buffer and image bindings may be
-difficult to synchronize.
-
-5) Should the Windows 7-compatible handle types be named "`KMT`" handles or
-"`GLOBAL_SHARE`" handles?
-
-*PROPOSED RESOLUTION*: KMT, simply because it is more concise.
-
-6) How do applications identify compatible devices and drivers across
-instance, process, and API boundaries when sharing memory?
-
-*PROPOSED RESOLUTION*: New device properties are exposed that allow
-applications to correctly correlate devices and drivers.
-A device and driver UUID that must both match to ensure sharing
-compatibility between two Vulkan instances, or a Vulkan instance and an
-extensible external API are added.
-To allow correlating with Direct3D devices, a device LUID is added that
-corresponds to a DXGI adapter LUID.
-A driver ID is not needed for Direct3D because mismatched driver component
-versions are not currently supported on the Windows OS.
-Should support for such configurations be introduced at the OS level,
-further Vulkan extensions would be needed to correlate userspace component
-builds.
-
-=== Version History
-
- * Revision 1, 2016-10-17 (James Jones)
-   - Initial version
diff --git a/registry/vulkan/appendices/VK_KHR_external_memory_fd.txt b/registry/vulkan/appendices/VK_KHR_external_memory_fd.txt
deleted file mode 100644
index 46122ac..0000000
--- a/registry/vulkan/appendices/VK_KHR_external_memory_fd.txt
+++ /dev/null
@@ -1,59 +0,0 @@
-// Copyright 2016-2021 The Khronos Group, Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-include::{generated}/meta/{refprefix}VK_KHR_external_memory_fd.txt[]
-
-=== Other Extension Metadata
-
-*Last Modified Date*::
-    2016-10-21
-*IP Status*::
-    No known IP claims.
-*Contributors*::
-  - James Jones, NVIDIA
-  - Jeff Juliano, NVIDIA
-
-=== Description
-
-An application may wish to reference device memory in multiple Vulkan
-logical devices or instances, in multiple processes, and/or in multiple
-APIs.
-This extension enables an application to export POSIX file descriptor
-handles from Vulkan memory objects and to import Vulkan memory objects from
-POSIX file descriptor handles exported from other Vulkan memory objects or
-from similar resources in other APIs.
-
-include::{generated}/interfaces/VK_KHR_external_memory_fd.txt[]
-
-=== Issues
-
-1) Does the application need to close the file descriptor returned by
-flink:vkGetMemoryFdKHR?
-
-*RESOLVED*: Yes, unless it is passed back in to a driver instance to import
-the memory.
-A successful get call transfers ownership of the file descriptor to the
-application, and a successful import transfers it back to the driver.
-Destroying the original memory object will not close the file descriptor or
-remove its reference to the underlying memory resource associated with it.
-
-2) Do drivers ever need to expose multiple file descriptors per memory
-object?
-
-*RESOLVED*: No.
-This would indicate there are actually multiple memory objects, rather than
-a single memory object.
-
-3) How should the valid size and memory type for POSIX file descriptor
-memory handles created outside of Vulkan be specified?
-
-*RESOLVED*: The valid memory types are queried directly from the external
-handle.
-The size will be specified by future extensions that introduce such external
-memory handle types.
-
-=== Version History
-
-  * Revision 1, 2016-10-21 (James Jones)
-    - Initial revision
diff --git a/registry/vulkan/appendices/VK_KHR_external_memory_win32.txt b/registry/vulkan/appendices/VK_KHR_external_memory_win32.txt
deleted file mode 100644
index aadb741..0000000
--- a/registry/vulkan/appendices/VK_KHR_external_memory_win32.txt
+++ /dev/null
@@ -1,72 +0,0 @@
-// Copyright 2016-2021 The Khronos Group, Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-include::{generated}/meta/{refprefix}VK_KHR_external_memory_win32.txt[]
-
-=== Other Extension Metadata
-
-*Last Modified Date*::
-    2016-10-21
-*IP Status*::
-    No known IP claims.
-*Contributors*::
-  - James Jones, NVIDIA
-  - Jeff Juliano, NVIDIA
-  - Carsten Rohde, NVIDIA
-
-=== Description
-
-An application may wish to reference device memory in multiple Vulkan
-logical devices or instances, in multiple processes, and/or in multiple
-APIs.
-This extension enables an application to export Windows handles from Vulkan
-memory objects and to import Vulkan memory objects from Windows handles
-exported from other Vulkan memory objects or from similar resources in other
-APIs.
-
-include::{generated}/interfaces/VK_KHR_external_memory_win32.txt[]
-
-=== Issues
-
-1) Do applications need to call code:CloseHandle() on the values returned
-from flink:vkGetMemoryWin32HandleKHR when pname:handleType is
-ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_BIT_KHR?
-
-ifdef::editing-notes[]
-[NOTE]
-.editing-note
-====
-(Jon) This issue refers to a token from
-`apiext:VK_KHR_external_semaphore_win32`, but there is no dependency or
-interaction with that extension defined above.
-====
-endif::editing-notes[]
-
-*RESOLVED*: Yes, unless it is passed back in to another driver instance to
-import the object.
-A successful get call transfers ownership of the handle to the application.
-Destroying the memory object will not destroy the handle or the handle's
-reference to the underlying memory resource.
-
-2) Should the language regarding KMT/Windows 7 handles be moved to a
-separate extension so that it can be deprecated over time?
-
-*RESOLVED*: No.
-Support for them can be deprecated by drivers if they choose, by no longer
-returning them in the supported handle types of the instance level queries.
-
-3) How should the valid size and memory type for windows memory handles
-created outside of Vulkan be specified?
-
-*RESOLVED*: The valid memory types are queried directly from the external
-handle.
-The size is determined by the associated image or buffer memory requirements
-for external handle types that require dedicated allocations, and by the
-size specified when creating the object from which the handle was exported
-for other external handle types.
-
-=== Version History
-
-  * Revision 1, 2016-10-21 (James Jones)
-    - Initial revision
diff --git a/registry/vulkan/appendices/VK_KHR_external_semaphore.txt b/registry/vulkan/appendices/VK_KHR_external_semaphore.txt
deleted file mode 100644
index 8df6c1d..0000000
--- a/registry/vulkan/appendices/VK_KHR_external_semaphore.txt
+++ /dev/null
@@ -1,68 +0,0 @@
-// Copyright 2016-2021 The Khronos Group, Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-include::{generated}/meta/{refprefix}VK_KHR_external_semaphore.txt[]
-
-=== Other Extension Metadata
-
-*Last Modified Date*::
-    2016-10-21
-*IP Status*::
-    No known IP claims.
-*Interactions and External Dependencies*::
-  - Promoted to Vulkan 1.1 Core
-*Contributors*::
-  - Jason Ekstrand, Intel
-  - Jesse Hall, Google
-  - Tobias Hector, Imagination Technologies
-  - James Jones, NVIDIA
-  - Jeff Juliano, NVIDIA
-  - Matthew Netsch, Qualcomm Technologies, Inc.
-  - Ray Smith, ARM
-  - Chad Versace, Google
-
-=== Description
-
-An application using external memory may wish to synchronize access to that
-memory using semaphores.
-This extension enables an application to create semaphores from which
-non-Vulkan handles that reference the underlying synchronization primitive
-can be exported.
-
-=== Promotion to Vulkan 1.1
-
-All functionality in this extension is included in core Vulkan 1.1, with the
-KHR suffix omitted.
-The original type, enum and command names are still available as aliases of
-the core functionality.
-
-include::{generated}/interfaces/VK_KHR_external_semaphore.txt[]
-
-=== Issues
-
-1) Should there be restrictions on what side effects can occur when waiting
-on imported semaphores that are in an invalid state?
-
-*RESOLVED*: Yes.
-Normally, validating such state would be the responsibility of the
-application, and the implementation would be free to enter an undefined:
-state if valid usage rules were violated.
-However, this could cause security concerns when using imported semaphores,
-as it would require the importing application to trust the exporting
-application to ensure the state is valid.
-Requiring this level of trust is undesirable for many potential use cases.
-
-2) Must implementations validate external handles the application provides
-as input to semaphore state import operations?
-
-*RESOLVED*: Implementations must return an error to the application if the
-provided semaphore state handle cannot be used to complete the requested
-import operation.
-However, implementations need not validate handles are of the exact type
-specified by the application.
-
-=== Version History
-
-  * Revision 1, 2016-10-21 (James Jones)
-    - Initial revision
diff --git a/registry/vulkan/appendices/VK_KHR_external_semaphore_capabilities.txt b/registry/vulkan/appendices/VK_KHR_external_semaphore_capabilities.txt
deleted file mode 100644
index 94f9fc3..0000000
--- a/registry/vulkan/appendices/VK_KHR_external_semaphore_capabilities.txt
+++ /dev/null
@@ -1,41 +0,0 @@
-// Copyright 2016-2021 The Khronos Group, Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-include::{generated}/meta/{refprefix}VK_KHR_external_semaphore_capabilities.txt[]
-
-=== Other Extension Metadata
-
-*Last Modified Date*::
-    2016-10-20
-*IP Status*::
-    No known IP claims.
-*Interactions and External Dependencies*::
-  - Promoted to Vulkan 1.1 Core
-*Contributors*::
-  - Jesse Hall, Google
-  - James Jones, NVIDIA
-  - Jeff Juliano, NVIDIA
-
-=== Description
-
-An application may wish to reference device semaphores in multiple Vulkan
-logical devices or instances, in multiple processes, and/or in multiple
-APIs.
-This extension provides a set of capability queries and handle definitions
-that allow an application to determine what types of "`external`" semaphore
-handles an implementation supports for a given set of use cases.
-
-=== Promotion to Vulkan 1.1
-
-All functionality in this extension is included in core Vulkan 1.1, with the
-KHR suffix omitted.
-The original type, enum and command names are still available as aliases of
-the core functionality.
-
-include::{generated}/interfaces/VK_KHR_external_semaphore_capabilities.txt[]
-
-=== Version History
-
-  * Revision 1, 2016-10-20 (James Jones)
-    - Initial revision
diff --git a/registry/vulkan/appendices/VK_KHR_external_semaphore_fd.txt b/registry/vulkan/appendices/VK_KHR_external_semaphore_fd.txt
deleted file mode 100644
index 34d89c2..0000000
--- a/registry/vulkan/appendices/VK_KHR_external_semaphore_fd.txt
+++ /dev/null
@@ -1,44 +0,0 @@
-// Copyright 2016-2021 The Khronos Group, Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-include::{generated}/meta/{refprefix}VK_KHR_external_semaphore_fd.txt[]
-
-=== Other Extension Metadata
-
-*Last Modified Date*::
-    2016-10-21
-*IP Status*::
-    No known IP claims.
-*Contributors*::
-  - Jesse Hall, Google
-  - James Jones, NVIDIA
-  - Jeff Juliano, NVIDIA
-  - Carsten Rohde, NVIDIA
-
-=== Description
-
-An application using external memory may wish to synchronize access to that
-memory using semaphores.
-This extension enables an application to export semaphore payload to and
-import semaphore payload from POSIX file descriptors.
-
-include::{generated}/interfaces/VK_KHR_external_semaphore_fd.txt[]
-
-=== Issues
-
-1) Does the application need to close the file descriptor returned by
-flink:vkGetSemaphoreFdKHR?
-
-*RESOLVED*: Yes, unless it is passed back in to a driver instance to import
-the semaphore.
-A successful get call transfers ownership of the file descriptor to the
-application, and a successful import transfers it back to the driver.
-Destroying the original semaphore object will not close the file descriptor
-or remove its reference to the underlying semaphore resource associated with
-it.
-
-=== Version History
-
-  * Revision 1, 2016-10-21 (Jesse Hall)
-    - Initial revision
diff --git a/registry/vulkan/appendices/VK_KHR_external_semaphore_win32.txt b/registry/vulkan/appendices/VK_KHR_external_semaphore_win32.txt
deleted file mode 100644
index 780c3f0..0000000
--- a/registry/vulkan/appendices/VK_KHR_external_semaphore_win32.txt
+++ /dev/null
@@ -1,72 +0,0 @@
-// Copyright 2016-2021 The Khronos Group, Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-include::{generated}/meta/{refprefix}VK_KHR_external_semaphore_win32.txt[]
-
-=== Other Extension Metadata
-
-*Last Modified Date*::
-    2016-10-21
-*IP Status*::
-    No known IP claims.
-*Contributors*::
-  - James Jones, NVIDIA
-  - Jeff Juliano, NVIDIA
-  - Carsten Rohde, NVIDIA
-
-=== Description
-
-An application using external memory may wish to synchronize access to that
-memory using semaphores.
-This extension enables an application to export semaphore payload to and
-import semaphore payload from Windows handles.
-
-include::{generated}/interfaces/VK_KHR_external_semaphore_win32.txt[]
-
-=== Issues
-
-1) Do applications need to call code:CloseHandle() on the values returned
-from flink:vkGetSemaphoreWin32HandleKHR when pname:handleType is
-ename:VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_BIT_KHR?
-
-*RESOLVED*: Yes, unless it is passed back in to another driver instance to
-import the object.
-A successful get call transfers ownership of the handle to the application.
-Destroying the semaphore object will not destroy the handle or the handle's
-reference to the underlying semaphore resource.
-
-2) Should the language regarding KMT/Windows 7 handles be moved to a
-separate extension so that it can be deprecated over time?
-
-*RESOLVED*: No.
-Support for them can be deprecated by drivers if they choose, by no longer
-returning them in the supported handle types of the instance level queries.
-
-3) Should applications be allowed to specify additional object attributes
-for shared handles?
-
-*RESOLVED*: Yes.
-Applications will be allowed to provide similar attributes to those they
-would to any other handle creation API.
-
-4) How do applications communicate the desired fence values to use with
-etext:D3D12_FENCE-based Vulkan semaphores?
-
-*RESOLVED*: There are a couple of options.
-The values for the signaled and reset states could be communicated up front
-when creating the object and remain static for the life of the Vulkan
-semaphore, or they could be specified using auxiliary structures when
-submitting semaphore signal and wait operations, similar to what is done
-with the keyed mutex extensions.
-The latter is more flexible and consistent with the keyed mutex usage, but
-the former is a much simpler API.
-
-Since Vulkan tends to favor flexibility and consistency over simplicity, a
-new structure specifying D3D12 fence acquire and release values is added to
-the flink:vkQueueSubmit function.
-
-=== Version History
-
-  * Revision 1, 2016-10-21 (James Jones)
-    - Initial revision
diff --git a/registry/vulkan/appendices/VK_KHR_format_feature_flags2.txt b/registry/vulkan/appendices/VK_KHR_format_feature_flags2.txt
deleted file mode 100644
index 2e39b6b..0000000
--- a/registry/vulkan/appendices/VK_KHR_format_feature_flags2.txt
+++ /dev/null
@@ -1,56 +0,0 @@
-// Copyright (c) 2021 The Khronos Group Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-include::{generated}/meta/{refprefix}VK_KHR_format_feature_flags2.txt[]
-
-=== Other Extension Metadata
-
-*Last Modified Date*::
-    2021-07-01
-*IP Status*::
-    No known IP claims.
-*Contributors*::
-  - Lionel Landwerlin, Intel
-  - Jason Ekstrand, Intel
-  - Tobias Hector, AMD
-  - Spencer Fricke, Samsung Electronics
-  - Graeme Leese, Broadcom
-  - Jan-Harald Fredriksen, ARM
-
-=== Description
-
-This extension adds a new elink:VkFormatFeatureFlagBits2KHR 64bits format
-feature flag type to extend the existing elink:VkFormatFeatureFlagBits which
-is limited to 31 flags.
-At the time of this writing 29 bits of elink:VkFormatFeatureFlagBits are
-already used.
-
-Because slink:VkFormatProperties2 is already defined to extend the Vulkan
-1.0 flink:vkGetPhysicalDeviceFormatProperties entry point, this extension
-defines a new slink:VkFormatProperties3KHR to extend the
-slink:VkFormatProperties.
-
-On top of replicating all the bits from elink:VkFormatFeatureFlagBits,
-elink:VkFormatFeatureFlagBits2KHR adds the following bits :
-
-  * ename:VK_FORMAT_FEATURE_2_STORAGE_READ_WITHOUT_FORMAT_BIT_KHR and
-    ename:VK_FORMAT_FEATURE_2_STORAGE_WRITE_WITHOUT_FORMAT_BIT_KHR indicate
-    that an implementation supports respectively reading and writing a given
-    elink:VkFormat through storage operations without specifying the format
-    in the shader.
-
-  * ename:VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_DEPTH_COMPARISON_BIT_KHR
-    indicates that an implementation supports depth comparison performed by
-    code:OpImage*Dref instructions on a given elink:VkFormat.
-    Previously the result of executing a code:OpImage*Dref* instruction on
-    an image view, where the pname:format was not one of the depth/stencil
-    formats with a depth component, was undefined.
-    This bit clarifies on which formats such instructions can be used.
-
-include::{generated}/interfaces/VK_KHR_format_feature_flags2.txt[]
-
-=== Version History
-
- * Revision 1, 2020-07-21 (Lionel Landwerlin)
-   - Initial draft
diff --git a/registry/vulkan/appendices/VK_KHR_fragment_shading_rate.txt b/registry/vulkan/appendices/VK_KHR_fragment_shading_rate.txt
deleted file mode 100644
index 2b23e3f..0000000
--- a/registry/vulkan/appendices/VK_KHR_fragment_shading_rate.txt
+++ /dev/null
@@ -1,65 +0,0 @@
-// Copyright 2017-2021 The Khronos Group, Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-include::{generated}/meta/{refprefix}VK_KHR_fragment_shading_rate.txt[]
-
-=== Other Extension Metadata
-
-*Last Modified Date*::
-    2021-09-30
-*Interactions and External Dependencies*::
-  - This extension requires
-    {spirv}/KHR/SPV_KHR_fragment_shading_rate.html[`SPV_KHR_fragment_shading_rate`].
-*Contributors*::
-  - Tobias Hector, AMD
-  - Guennadi Riguer, AMD
-  - Matthaeus Chajdas, AMD
-  - Pat Brown, Nvidia
-  - Matthew Netsch, Qualcomm
-  - Slawomir Grajewski, Intel
-  - Jan-Harald Fredriksen, Arm
-  - Jeff Bolz, Nvidia
-  - Contributors to the VK_NV_shading_rate_image specification
-  - Contributors to the VK_EXT_fragment_density_map specification
-
-=== Description
-
-This extension adds the ability to change the rate at which fragments are
-shaded.
-Rather than the usual single fragment invocation for each pixel covered by a
-primitive, multiple pixels can be shaded by a single fragment shader
-invocation.
-
-Up to three methods are available to the application to change the fragment
-shading rate:
-
- - <<primsrast-fragment-shading-rate-pipeline>>, which allows the
-   specification of a rate per-draw.
- - <<primsrast-fragment-shading-rate-primitive>>, which allows the
-   specification of a rate per primitive, specified during shading.
- - <<primsrast-fragment-shading-rate-attachment>>, which allows the
-   specification of a rate per-region of the framebuffer, specified in a
-   specialized image attachment.
-
-Additionally, these rates can all be specified and combined in order to
-adjust the overall detail in the image at each point.
-
-This functionality can be used to focus shading efforts where higher levels
-of detail are needed in some parts of a scene compared to others.
-This can be particularly useful in high resolution rendering, or for XR
-contexts.
-
-This extension also adds support for the `SPV_KHR_fragment_shading_rate`
-extension which enables setting the
-<<primsrast-fragment-shading-rate-primitive, primitive fragment shading
-rate>>, and allows querying the final shading rate from a fragment shader.
-
-include::{generated}/interfaces/VK_KHR_fragment_shading_rate.txt[]
-
-=== Version History
-
-  * Revision 1, 2020-05-06 (Tobias Hector)
-    - Initial revision
-  * Revision 2, 2021-09-30 (Jon Leech)
-    - Add interaction with `apiext:VK_KHR_format_feature_flags2` to `vk.xml`
diff --git a/registry/vulkan/appendices/VK_KHR_get_display_properties2.txt b/registry/vulkan/appendices/VK_KHR_get_display_properties2.txt
deleted file mode 100644
index afe6365..0000000
--- a/registry/vulkan/appendices/VK_KHR_get_display_properties2.txt
+++ /dev/null
@@ -1,63 +0,0 @@
-// Copyright 2017-2021 The Khronos Group, Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-include::{generated}/meta/{refprefix}VK_KHR_get_display_properties2.txt[]
-
-=== Other Extension Metadata
-
-*Last Modified Date*::
-    2017-02-21
-*IP Status*::
-    No known IP claims.
-*Contributors*::
-  - Ian Elliott, Google
-  - James Jones, NVIDIA
-
-=== Description
-
-This extension provides new entry points to query device display properties
-and capabilities in a way that can be easily extended by other extensions,
-without introducing any further entry points.
-This extension can be considered the `apiext:VK_KHR_display` equivalent of
-the `apiext:VK_KHR_get_physical_device_properties2` extension.
-
-include::{generated}/interfaces/VK_KHR_get_display_properties2.txt[]
-
-=== Issues
-
-1) What should this extension be named?
-
-*RESOLVED*: `VK_KHR_get_display_properties2`.
-Other alternatives:
-
-  * `VK_KHR_display2`
-  * One extension, combined with `VK_KHR_surface_capabilites2`.
-
-2) Should extensible input structs be added for these new functions:
-
-*RESOLVED*:
-
-  * flink:vkGetPhysicalDeviceDisplayProperties2KHR: No.
-    The only current input is a slink:VkPhysicalDevice.
-    Other inputs would not make sense.
-  * flink:vkGetPhysicalDeviceDisplayPlaneProperties2KHR: No.
-    The only current input is a slink:VkPhysicalDevice.
-    Other inputs wouldn't make sense.
-  * flink:vkGetDisplayModeProperties2KHR: No.
-    The only current inputs are a slink:VkPhysicalDevice and a
-    slink:VkDisplayModeKHR.
-    Other inputs wouldn't make sense.
-
-3) Should additional display query functions be extended?
-
-*RESOLVED*:
-
-  * flink:vkGetDisplayPlaneSupportedDisplaysKHR: No.
-    Extensions should instead extend
-    flink:vkGetDisplayPlaneCapabilitiesKHR().
-
-=== Version History
-
- * Revision 1, 2017-02-21 (James Jones)
-   - Initial draft.
diff --git a/registry/vulkan/appendices/VK_KHR_get_memory_requirements2.txt b/registry/vulkan/appendices/VK_KHR_get_memory_requirements2.txt
deleted file mode 100644
index d3f9494..0000000
--- a/registry/vulkan/appendices/VK_KHR_get_memory_requirements2.txt
+++ /dev/null
@@ -1,46 +0,0 @@
-// Copyright 2016-2021 The Khronos Group, Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-include::{generated}/meta/{refprefix}VK_KHR_get_memory_requirements2.txt[]
-
-=== Other Extension Metadata
-
-*Last Modified Date*::
-    2017-09-05
-*IP Status*::
-    No known IP claims.
-*Interactions and External Dependencies*::
-  - Promoted to Vulkan 1.1 Core
-*Contributors*::
-  - Jason Ekstrand, Intel
-  - Jeff Bolz, NVIDIA
-  - Jesse Hall, Google
-
-=== Description
-
-This extension provides new entry points to query memory requirements of
-images and buffers in a way that can be easily extended by other extensions,
-without introducing any further entry points.
-The Vulkan 1.0 slink:VkMemoryRequirements and
-slink:VkSparseImageMemoryRequirements structures do not include pname:sType
-and pname:pNext members.
-This extension wraps them in new structures with these members, so an
-application can query a chain of memory requirements structures by
-constructing the chain and letting the implementation fill them in.
-A new command is added for each ftext:vkGet*MemoryRequrements command in
-core Vulkan 1.0.
-
-=== Promotion to Vulkan 1.1
-
-All functionality in this extension is included in core Vulkan 1.1, with the
-KHR suffix omitted.
-The original type, enum and command names are still available as aliases of
-the core functionality.
-
-include::{generated}/interfaces/VK_KHR_get_memory_requirements2.txt[]
-
-=== Version History
-
- * Revision 1, 2017-03-23 (Jason Ekstrand)
-   - Internal revisions
diff --git a/registry/vulkan/appendices/VK_KHR_get_physical_device_properties2.txt b/registry/vulkan/appendices/VK_KHR_get_physical_device_properties2.txt
deleted file mode 100644
index d8a75fc..0000000
--- a/registry/vulkan/appendices/VK_KHR_get_physical_device_properties2.txt
+++ /dev/null
@@ -1,106 +0,0 @@
-// Copyright 2016-2021 The Khronos Group, Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-include::{generated}/meta/{refprefix}VK_KHR_get_physical_device_properties2.txt[]
-
-=== Other Extension Metadata
-
-*Last Modified Date*::
-    2017-09-05
-*IP Status*::
-    No known IP claims.
-*Interactions and External Dependencies*::
-  - Promoted to Vulkan 1.1 Core
-*Contributors*::
-  - Jeff Bolz, NVIDIA
-  - Ian Elliott, Google
-
-=== Description
-
-This extension provides new entry points to query device features, device
-properties, and format properties in a way that can be easily extended by
-other extensions, without introducing any further entry points.
-The Vulkan 1.0 feature/limit/formatproperty structures do not include
-ptext:sType/ptext:pNext members.
-This extension wraps them in new structures with ptext:sType/ptext:pNext
-members, so an application can query a chain of feature/limit/formatproperty
-structures by constructing the chain and letting the implementation fill
-them in.
-A new command is added for each ftext:vkGetPhysicalDevice* command in core
-Vulkan 1.0.
-The new feature structure (and a pname:pNext chain of extending structures)
-can also be passed in to device creation to enable features.
-
-This extension also allows applications to use the physical-device
-components of device extensions before flink:vkCreateDevice is called.
-
-=== Promotion to Vulkan 1.1
-
-All functionality in this extension is included in core Vulkan 1.1, with the
-KHR suffix omitted.
-The original type, enum and command names are still available as aliases of
-the core functionality.
-
-include::{generated}/interfaces/VK_KHR_get_physical_device_properties2.txt[]
-
-=== Examples
-
-[source,c++]
-----------------------------------------
-
-    // Get features with a hypothetical future extension.
-    VkHypotheticalExtensionFeaturesKHR hypotheticalFeatures =
-    {
-        VK_STRUCTURE_TYPE_HYPOTHETICAL_FEATURES_KHR,                // sType
-        NULL,                                                       // pNext
-    };
-
-    VkPhysicalDeviceFeatures2KHR features =
-    {
-        VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2_KHR,           // sType
-        &hypotheticalFeatures,                                      // pNext
-    };
-
-    // After this call, features and hypotheticalFeatures have been filled out.
-    vkGetPhysicalDeviceFeatures2KHR(physicalDevice, &features);
-
-    // Properties/limits can be chained and queried similarly.
-
-    // Enable some features:
-    VkHypotheticalExtensionFeaturesKHR enabledHypotheticalFeatures =
-    {
-        VK_STRUCTURE_TYPE_HYPOTHETICAL_FEATURES_KHR,                // sType
-        NULL,                                                       // pNext
-    };
-
-    VkPhysicalDeviceFeatures2KHR enabledFeatures =
-    {
-        VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2_KHR,           // sType
-        &enabledHypotheticalFeatures,                               // pNext
-    };
-
-    enabledFeatures.features.xyz = VK_TRUE;
-    enabledHypotheticalFeatures.abc = VK_TRUE;
-
-    VkDeviceCreateInfo deviceCreateInfo =
-    {
-        VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO,                       // sType
-        &enabledFeatures,                                           // pNext
-        ...
-        NULL,                                                       // pEnabledFeatures
-    };
-
-    VkDevice device;
-    vkCreateDevice(physicalDevice, &deviceCreateInfo, NULL, &device);
-
-----------------------------------------
-
-=== Version History
-
- * Revision 1, 2016-09-12 (Jeff Bolz)
-   - Internal revisions
-
- * Revision 2, 2016-11-02 (Ian Elliott)
-   - Added ability for applications to use the physical-device components of
-     device extensions before vkCreateDevice is called.
diff --git a/registry/vulkan/appendices/VK_KHR_get_surface_capabilities2.txt b/registry/vulkan/appendices/VK_KHR_get_surface_capabilities2.txt
deleted file mode 100644
index 0b04af4..0000000
--- a/registry/vulkan/appendices/VK_KHR_get_surface_capabilities2.txt
+++ /dev/null
@@ -1,66 +0,0 @@
-// Copyright 2017-2021 The Khronos Group, Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-include::{generated}/meta/{refprefix}VK_KHR_get_surface_capabilities2.txt[]
-
-=== Other Extension Metadata
-
-*Last Modified Date*::
-    2017-02-27
-*IP Status*::
-    No known IP claims.
-*Contributors*::
-  - Ian Elliott, Google
-  - James Jones, NVIDIA
-  - Alon Or-bach, Samsung
-
-=== Description
-
-This extension provides new entry points to query device surface
-capabilities in a way that can be easily extended by other extensions,
-without introducing any further entry points.
-This extension can be considered the `apiext:VK_KHR_surface` equivalent of
-the `apiext:VK_KHR_get_physical_device_properties2` extension.
-
-include::{generated}/interfaces/VK_KHR_get_surface_capabilities2.txt[]
-
-=== Issues
-
-1) What should this extension be named?
-
-*RESOLVED*: `VK_KHR_get_surface_capabilities2`.
-Other alternatives:
-
-  * `VK_KHR_surface2`
-  * One extension, combining a separate display-specific query extension.
-
-2) Should additional WSI query functions be extended?
-
-*RESOLVED*:
-
-  * flink:vkGetPhysicalDeviceSurfaceCapabilitiesKHR: Yes.
-    The need for this motivated the extension.
-  * flink:vkGetPhysicalDeviceSurfaceSupportKHR: No.
-    Currently only has boolean output.
-    Extensions should instead extend
-    flink:vkGetPhysicalDeviceSurfaceCapabilities2KHR.
-  * flink:vkGetPhysicalDeviceSurfaceFormatsKHR: Yes.
-  * flink:vkGetPhysicalDeviceSurfacePresentModesKHR: No.
-    Recent discussion concluded this introduced too much variability for
-    applications to deal with.
-    Extensions should instead extend
-    flink:vkGetPhysicalDeviceSurfaceCapabilities2KHR.
-  * flink:vkGetPhysicalDeviceXlibPresentationSupportKHR: Not in this
-    extension.
-  * flink:vkGetPhysicalDeviceXcbPresentationSupportKHR: Not in this
-    extension.
-  * flink:vkGetPhysicalDeviceWaylandPresentationSupportKHR: Not in this
-    extension.
-  * flink:vkGetPhysicalDeviceWin32PresentationSupportKHR: Not in this
-    extension.
-
-=== Version History
-
- * Revision 1, 2017-02-27 (James Jones)
-   - Initial draft.
diff --git a/registry/vulkan/appendices/VK_KHR_image_format_list.txt b/registry/vulkan/appendices/VK_KHR_image_format_list.txt
deleted file mode 100644
index df1ce39..0000000
--- a/registry/vulkan/appendices/VK_KHR_image_format_list.txt
+++ /dev/null
@@ -1,48 +0,0 @@
-// Copyright (c) 2016-2020 Intel Corporation
-//
-// SPDX-License-Identifier: Apache-2.0
-
-include::{generated}/meta/{refprefix}VK_KHR_image_format_list.txt[]
-
-=== Other Extension Metadata
-
-*Last Modified Date*::
-    2017-03-20
-*Interactions and External Dependencies*::
-  - Promoted to Vulkan 1.2 Core
-*IP Status*::
-    No known IP claims.
-*Contributors*::
-  - Jason Ekstrand, Intel
-  - Jan-Harald Fredriksen, ARM
-  - Jeff Bolz, NVIDIA
-  - Jeff Leger, Qualcomm
-  - Neil Henning, Codeplay
-
-=== Description
-
-On some implementations, setting the
-ename:VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT on image creation can cause access
-to that image to perform worse than an equivalent image created without
-ename:VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT because the implementation does not
-know what view formats will be paired with the image.
-
-This extension allows an application to provide the list of all formats that
-can: be used with an image when it is created.
-The implementation may then be able to create a more efficient image that
-supports the subset of formats required by the application without having to
-support all formats in the format compatibility class of the image format.
-
-=== Promotion to Vulkan 1.2
-
-All functionality in this extension is included in core Vulkan 1.2, with the
-KHR suffix omitted.
-The original type, enum and command names are still available as aliases of
-the core functionality.
-
-include::{generated}/interfaces/VK_KHR_image_format_list.txt[]
-
-=== Version History
-
-  * Revision 1, 2017-03-20 (Jason Ekstrand)
-    - Initial revision
diff --git a/registry/vulkan/appendices/VK_KHR_imageless_framebuffer.txt b/registry/vulkan/appendices/VK_KHR_imageless_framebuffer.txt
deleted file mode 100644
index 2a4a6ee..0000000
--- a/registry/vulkan/appendices/VK_KHR_imageless_framebuffer.txt
+++ /dev/null
@@ -1,41 +0,0 @@
-// Copyright 2016-2021 The Khronos Group, Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-include::{generated}/meta/{refprefix}VK_KHR_imageless_framebuffer.txt[]
-
-=== Other Extension Metadata
-
-*Last Modified Date*::
-    2018-12-14
-*Interactions and External Dependencies*::
-  - Promoted to Vulkan 1.2 Core
-*Contributors*::
-  - Tobias Hector
-  - Graham Wihlidal
-
-=== Description
-
-This extension allows framebuffers to be created without the need for
-creating images first, allowing more flexibility in how they are used, and
-avoiding the need for many of the confusing compatibility rules.
-
-Framebuffers are now created with a small amount of additional metadata
-about the image views that will be used in
-slink:VkFramebufferAttachmentsCreateInfoKHR, and the actual image views are
-provided at render pass begin time via
-slink:VkRenderPassAttachmentBeginInfoKHR.
-
-=== Promotion to Vulkan 1.2
-
-All functionality in this extension is included in core Vulkan 1.2, with the
-KHR suffix omitted.
-The original type, enum and command names are still available as aliases of
-the core functionality.
-
-include::{generated}/interfaces/VK_KHR_imageless_framebuffer.txt[]
-
-=== Version History
-
- * Revision 1, 2018-12-14 (Tobias Hector)
-   - Internal revisions
diff --git a/registry/vulkan/appendices/VK_KHR_incremental_present.txt b/registry/vulkan/appendices/VK_KHR_incremental_present.txt
deleted file mode 100644
index 7766cbd..0000000
--- a/registry/vulkan/appendices/VK_KHR_incremental_present.txt
+++ /dev/null
@@ -1,97 +0,0 @@
-// Copyright 2014-2021 The Khronos Group, Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-include::{generated}/meta/{refprefix}VK_KHR_incremental_present.txt[]
-
-=== Other Extension Metadata
-
-*Last Modified Date*::
-    2016-11-02
-*IP Status*::
-    No known IP claims.
-*Contributors*::
-  - Ian Elliott, Google
-  - Jesse Hall, Google
-  - Alon Or-bach, Samsung
-  - James Jones, NVIDIA
-  - Daniel Rakos, AMD
-  - Ray Smith, ARM
-  - Mika Isojarvi, Google
-  - Jeff Juliano, NVIDIA
-  - Jeff Bolz, NVIDIA
-
-=== Description
-
-This device extension extends flink:vkQueuePresentKHR, from the
-`apiext:VK_KHR_swapchain` extension, allowing an application to specify a
-list of rectangular, modified regions of each image to present.
-This should be used in situations where an application is only changing a
-small portion of the presentable images within a swapchain, since it enables
-the presentation engine to avoid wasting time presenting parts of the
-surface that have not changed.
-
-This extension is leveraged from the `EGL_KHR_swap_buffers_with_damage`
-extension.
-
-include::{generated}/interfaces/VK_KHR_incremental_present.txt[]
-
-=== Issues
-
-1) How should we handle steroescopic-3D swapchains? We need to add a layer
-for each rectangle.
-One approach is to create another struct containing the slink:VkRect2D plus
-layer, and have slink:VkPresentRegionsKHR point to an array of that struct.
-Another approach is to have two parallel arrays, ptext:pRectangles and
-ptext:pLayers, where ptext:pRectangles[i] and ptext:pLayers[i] must be used
-together.
-Which approach should we use, and if the array of a new structure, what
-should that be called?
-
-*RESOLVED*: Create a new structure, which is a slink:VkRect2D plus a layer,
-and will be called slink:VkRectLayerKHR.
-
-2) Where is the origin of the slink:VkRectLayerKHR?
-
-*RESOLVED*: The upper left corner of the presentable image(s) of the
-swapchain, per the definition of framebuffer coordinates.
-
-3) Does the rectangular region, slink:VkRectLayerKHR, specify pixels of the
-swapchain's image(s), or of the surface?
-
-*RESOLVED*: Of the image(s).
-Some presentation engines may scale the pixels of a swapchain's image(s) to
-the size of the surface.
-The size of the swapchain's image(s) will be consistent, where the size of
-the surface may vary over time.
-
-4) What if all of the rectangles for a given swapchain contain a width
-and/or height of zero?
-
-*RESOLVED*: The application is indicating that no pixels changed since the
-last present.
-The presentation engine may use such a hint and not update any pixels for
-the swapchain.
-However, all other semantics of flink:vkQueuePresentKHR must still be
-honored, including waiting for semaphores to signal.
-
-5) When the swapchain is created with
-sname:VkSwapchainCreateInfoKHR::pname:preTransform set to a value other than
-ename:VK_SURFACE_TRANSFORM_IDENTITY_BIT_KHR, should the rectangular region,
-slink:VkRectLayerKHR, be transformed to align with the pname:preTransform?
-
-*RESOLVED*: No.
-The rectangular region in slink:VkRectLayerKHR should not be tranformed.
-As such, it may not align with the extents of the swapchain's image(s).
-It is the responsibility of the presentation engine to transform the
-rectangular region.
-This matches the behavior of the Android presentation engine, which set the
-precedent.
-
-=== Version History
-
- * Revision 1, 2016-11-02 (Ian Elliott)
-   - Internal revisions
- * Revision 2, 2021-03-18 (Ian Elliott)
-   - Clarified alignment of rectangles for presentation engines that support
-     transformed swapchains.
diff --git a/registry/vulkan/appendices/VK_KHR_maintenance1.txt b/registry/vulkan/appendices/VK_KHR_maintenance1.txt
deleted file mode 100644
index 3656b01..0000000
--- a/registry/vulkan/appendices/VK_KHR_maintenance1.txt
+++ /dev/null
@@ -1,89 +0,0 @@
-// Copyright 2016-2021 The Khronos Group, Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-include::{generated}/meta/{refprefix}VK_KHR_maintenance1.txt[]
-
-=== Other Extension Metadata
-
-*Last Modified Date*::
-    2018-03-13
-*Interactions and External Dependencies*::
-  - Promoted to Vulkan 1.1 Core
-*Contributors*::
-  - Dan Ginsburg, Valve
-  - Daniel Koch, NVIDIA
-  - Daniel Rakos, AMD
-  - Jan-Harald Fredriksen, ARM
-  - Jason Ekstrand, Intel
-  - Jeff Bolz, NVIDIA
-  - Jesse Hall, Google
-  - John Kessenich, Google
-  - Michael Worcester, Imagination Technologies
-  - Neil Henning, Codeplay Software Ltd.
-  - Piers Daniell, NVIDIA
-  - Slawomir Grajewski, Intel
-  - Tobias Hector, Imagination Technologies
-  - Tom Olson, ARM
-
-=== Description
-
-`VK_KHR_maintenance1` adds a collection of minor features that were
-intentionally left out or overlooked from the original Vulkan 1.0 release.
-
-The new features are as follows:
-
-  * Allow 2D and 2D array image views to be created from 3D images, which
-    can then be used as color framebuffer attachments.
-    This allows applications to render to slices of a 3D image.
-  * Support flink:vkCmdCopyImage between 2D array layers and 3D slices.
-    This extension allows copying from layers of a 2D array image to slices
-    of a 3D image and vice versa.
-  * Allow negative height to be specified in the
-    slink:VkViewport::pname:height field to perform y-inversion of the
-    clip-space to framebuffer-space transform.
-    This allows apps to avoid having to use `gl_Position.y = -gl_Position.y`
-    in shaders also targeting other APIs.
-  * Allow implementations to express support for doing just transfers and
-    clears of image formats that they otherwise support no other format
-    features for.
-    This is done by adding new format feature flags
-    ename:VK_FORMAT_FEATURE_TRANSFER_SRC_BIT_KHR and
-    ename:VK_FORMAT_FEATURE_TRANSFER_DST_BIT_KHR.
-  * Support flink:vkCmdFillBuffer on transfer-only queues.
-    Previously flink:vkCmdFillBuffer was defined to only work on command
-    buffers allocated from command pools which support graphics or compute
-    queues.
-    It is now allowed on queues that just support transfer operations.
-  * Fix the inconsistency of how error conditions are returned between the
-    flink:vkCreateGraphicsPipelines and flink:vkCreateComputePipelines
-    functions and the flink:vkAllocateDescriptorSets and
-    flink:vkAllocateCommandBuffers functions.
-  * Add new ename:VK_ERROR_OUT_OF_POOL_MEMORY_KHR error so implementations
-    can give a more precise reason for flink:vkAllocateDescriptorSets
-    failures.
-  * Add a new command flink:vkTrimCommandPoolKHR which gives the
-    implementation an opportunity to release any unused command pool memory
-    back to the system.
-
-=== Promotion to Vulkan 1.1
-
-All functionality in this extension is included in core Vulkan 1.1, with the
-KHR suffix omitted.
-The original type, enum and command names are still available as aliases of
-the core functionality.
-
-include::{generated}/interfaces/VK_KHR_maintenance1.txt[]
-
-=== Issues
-
-  . Are viewports with zero height allowed?
-+
-*RESOLVED*: Yes, although they have low utility.
-
-=== Version History
-
- * Revision 1, 2016-10-26 (Piers Daniell)
-   - Internal revisions
- * Revision 2, 2018-03-13 (Jon Leech)
-   - Add issue for zero-height viewports
diff --git a/registry/vulkan/appendices/VK_KHR_maintenance2.txt b/registry/vulkan/appendices/VK_KHR_maintenance2.txt
deleted file mode 100644
index e07767e..0000000
--- a/registry/vulkan/appendices/VK_KHR_maintenance2.txt
+++ /dev/null
@@ -1,112 +0,0 @@
-// Copyright 2016-2021 The Khronos Group, Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-include::{generated}/meta/{refprefix}VK_KHR_maintenance2.txt[]
-
-=== Other Extension Metadata
-
-*Last Modified Date*::
-    2017-09-05
-*Interactions and External Dependencies*::
-  - Promoted to Vulkan 1.1 Core
-*Contributors*::
-  - Michael Worcester, Imagination Technologies
-  - Stuart Smith, Imagination Technologies
-  - Jeff Bolz, NVIDIA
-  - Daniel Koch, NVIDIA
-  - Jan-Harald Fredriksen, ARM
-  - Daniel Rakos, AMD
-  - Neil Henning, Codeplay
-  - Piers Daniell, NVIDIA
-
-=== Description
-
-`VK_KHR_maintenance2` adds a collection of minor features that were
-intentionally left out or overlooked from the original Vulkan 1.0 release.
-
-The new features are as follows:
-
-  * Allow the application to specify which aspect of an input attachment
-    might be read for a given subpass.
-  * Allow implementations to express the clipping behavior of points.
-  * Allow creating images with usage flags that may not be supported for the
-    base image's format, but are supported for image views of the image that
-    have a different but compatible format.
-  * Allow creating uncompressed image views of compressed images.
-  * Allow the application to select between an upper-left and lower-left
-    origin for the tessellation domain space.
-  * Adds two new image layouts for depth stencil images to allow either the
-    depth or stencil aspect to be read-only while the other aspect is
-    writable.
-
-=== Input Attachment Specification
-
-Input attachment specification allows an application to specify which aspect
-of a multi-aspect image (e.g. a combined depth stencil format) will be
-accessed via a code:subpassLoad operation.
-
-On some implementations there may: be a performance penalty if the
-implementation does not know (at flink:vkCreateRenderPass time) which
-aspect(s) of multi-aspect images can: be accessed as input attachments.
-
-=== Promotion to Vulkan 1.1
-
-All functionality in this extension is included in core Vulkan 1.1, with the
-KHR suffix omitted.
-The original type, enum and command names are still available as aliases of
-the core functionality.
-
-include::{generated}/interfaces/VK_KHR_maintenance2.txt[]
-
-=== Input Attachment Specification Example
-
-Consider the case where a render pass has two subpasses and two attachments.
-
-Attachment 0 has the format ename:VK_FORMAT_D24_UNORM_S8_UINT, attachment 1
-has some color format.
-
-Subpass 0 writes to attachment 0, subpass 1 reads only the depth information
-from attachment 0 (using inputAttachmentRead) and writes to attachment 1.
-
-[source,c++]
-----------------------------------------
-    VkInputAttachmentAspectReferenceKHR references[] = {
-        {
-            .subpass = 1,
-            .inputAttachmentIndex = 0,
-            .aspectMask = VK_IMAGE_ASPECT_DEPTH_BIT
-        }
-    };
-
-    VkRenderPassInputAttachmentAspectCreateInfoKHR specifyAspects = {
-        .sType = VK_STRUCTURE_TYPE_RENDER_PASS_INPUT_ATTACHMENT_ASPECT_CREATE_INFO_KHR,
-        .pNext = NULL,
-        .aspectReferenceCount = 1,
-        .pAspectReferences = references
-    };
-
-
-    VkRenderPassCreateInfo createInfo = {
-        ...
-        .pNext = &specifyAspects,
-        ...
-    };
-
-    vkCreateRenderPass(...);
-----------------------------------------
-
-=== Issues
-
-1) What is the default tessellation domain origin?
-
-*RESOLVED*: Vulkan 1.0 originally inadvertently documented a lower-left
-origin, but the conformance tests and all implementations implemented an
-upper-left origin.
-This extension adds a control to select between lower-left (for
-compatibility with OpenGL) and upper-left, and we retroactively fix
-unextended Vulkan to have a default of an upper-left origin.
-
-=== Version History
-
- * Revision 1, 2017-04-28
diff --git a/registry/vulkan/appendices/VK_KHR_maintenance3.txt b/registry/vulkan/appendices/VK_KHR_maintenance3.txt
deleted file mode 100644
index 71f6fea..0000000
--- a/registry/vulkan/appendices/VK_KHR_maintenance3.txt
+++ /dev/null
@@ -1,42 +0,0 @@
-// Copyright 2016-2021 The Khronos Group, Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-include::{generated}/meta/{refprefix}VK_KHR_maintenance3.txt[]
-
-=== Other Extension Metadata
-
-*Last Modified Date*::
-    2017-09-05
-*Interactions and External Dependencies*::
-  - Promoted to Vulkan 1.1 Core
-*Contributors*::
-  - Jeff Bolz, NVIDIA
-
-=== Description
-
-`VK_KHR_maintenance3` adds a collection of minor features that were
-intentionally left out or overlooked from the original Vulkan 1.0 release.
-
-The new features are as follows:
-
-  * A limit on the maximum number of descriptors that are supported in a
-    single descriptor set layout.
-    Some implementations have a limit on the total size of descriptors in a
-    set, which cannot be expressed in terms of the limits in Vulkan 1.0.
-  * A limit on the maximum size of a single memory allocation.
-    Some platforms have kernel interfaces that limit the maximum size of an
-    allocation.
-
-=== Promotion to Vulkan 1.1
-
-All functionality in this extension is included in core Vulkan 1.1, with the
-KHR suffix omitted.
-The original type, enum and command names are still available as aliases of
-the core functionality.
-
-include::{generated}/interfaces/VK_KHR_maintenance3.txt[]
-
-=== Version History
-
- * Revision 1, 2017-08-22
diff --git a/registry/vulkan/appendices/VK_KHR_maintenance4.txt b/registry/vulkan/appendices/VK_KHR_maintenance4.txt
deleted file mode 100644
index 04d4944..0000000
--- a/registry/vulkan/appendices/VK_KHR_maintenance4.txt
+++ /dev/null
@@ -1,62 +0,0 @@
-// Copyright 2016-2021 The Khronos Group, Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-include::{generated}/meta/{refprefix}VK_KHR_maintenance4.txt[]
-
-=== Other Extension Metadata
-
-*Last Modified Date*::
-    2021-08-18
-*Interactions and External Dependencies*::
-  - Requires SPIR-V 1.2 for code:LocalSizeId
-*Contributors*::
-  - Lionel Duc, NVIDIA
-  - Jason Ekstrand, Intel
-  - Spencer Fricke, Samsung
-  - Tobias Hector, AMD
-  - Lionel Landwerlin, Intel
-  - Graeme Leese, Broadcom
-  - Tom Olson, Arm
-  - Stu Smith, AMD
-
-=== Description
-
-`VK_KHR_maintenance4` adds a collection of minor features, none of which
-would warrant an entire extension of their own.
-
-The new features are as follows:
-
-  * Allow the application to destroy their slink:VkPipelineLayout object
-    immediately after it was used to create another object.
-    It is no longer necessary to keep its handle valid while the created
-    object is in use.
-  * Add a new <<limits-maxBufferSize, pname:maxBufferSize>>
-    implementation-defined limit for the maximum size sname:VkBuffer that
-    can: be created.
-  * Add support for the SPIR-V 1.2 code:LocalSizeId execution mode, which
-    can be used as an alternative to code:LocalSize to specify the local
-    workgroup size with specialization constants.
-  * Add a guarantee that images created with identical creation parameters
-    will always have the same alignment requirements.
-  * Add new flink:vkGetDeviceBufferMemoryRequirementsKHR,
-    flink:vkGetDeviceImageMemoryRequirementsKHR, and
-    flink:vkGetDeviceImageSparseMemoryRequirementsKHR to allow the
-    application to query the image memory requirements without having to
-    create an image object and query it.
-  * Relax the requirement that push constants must be initialized before
-    they are dynamically accessed.
-  * Relax the interface matching rules to allow a larger output vector to
-    match with a smaller input vector, with additional values being
-    discarded.
-  
-include::{generated}/interfaces/VK_KHR_maintenance4.txt[]
-
-=== Issues
-
-None.
-
-=== Version History
-
- * Revision 1, 2021-08-18 (Piers Daniell)
-    - Internal revisions
diff --git a/registry/vulkan/appendices/VK_KHR_multiview.txt b/registry/vulkan/appendices/VK_KHR_multiview.txt
deleted file mode 100644
index 6775cf0..0000000
--- a/registry/vulkan/appendices/VK_KHR_multiview.txt
+++ /dev/null
@@ -1,77 +0,0 @@
-// Copyright 2016-2021 The Khronos Group, Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-include::{generated}/meta/{refprefix}VK_KHR_multiview.txt[]
-
-=== Other Extension Metadata
-
-*Last Modified Date*::
-    2016-10-28
-*IP Status*::
-    No known IP claims.
-*Interactions and External Dependencies*::
-  - Promoted to Vulkan 1.1 Core
-  - This extension requires
-    {spirv}/KHR/SPV_KHR_multiview.html[`SPV_KHR_multiview`]
-  - This extension provides API support for
-    https://raw.githubusercontent.com/KhronosGroup/GLSL/master/extensions/ext/GL_EXT_multiview.txt[`GL_EXT_multiview`]
-*Contributors*::
-  - Jeff Bolz, NVIDIA
-
-=== Description
-
-This extension has the same goal as the OpenGL ES `GL_OVR_multiview`
-extension.
-Multiview is a rendering technique originally designed for VR where it is
-more efficient to record a single set of commands to be executed with
-slightly different behavior for each "`view`".
-
-It includes a concise way to declare a render pass with multiple views, and
-gives implementations freedom to render the views in the most efficient way
-possible.
-This is done with a multiview configuration specified during <<renderpass,
-render pass>> creation with the slink:VkRenderPassMultiviewCreateInfo passed
-into slink:VkRenderPassCreateInfo::pname:pNext.
-
-This extension enables the use of the
-{spirv}/KHR/SPV_KHR_multiview.html[`SPV_KHR_multiview`] shader extension,
-which adds a new `ViewIndex` built-in type that allows shaders to control
-what to do for each view.
-If using GLSL there is also the
-https://raw.githubusercontent.com/KhronosGroup/GLSL/master/extensions/ext/GL_EXT_multiview.txt[`GL_EXT_multiview`]
-extension that introduces a `highp int gl_ViewIndex;` built-in variable for
-vertex, tessellation, geometry, and fragment shaders.
-
-=== Promotion to Vulkan 1.1
-
-All functionality in this extension is included in core Vulkan 1.1, with the
-KHR suffix omitted.
-The original type, enum and command names are still available as aliases of
-the core functionality.
-
-include::{generated}/interfaces/VK_KHR_multiview.txt[]
-
-=== New Built-In Variables
-
-  * <<interfaces-builtin-variables-viewindex,code:ViewIndex>>
-
-=== New SPIR-V Capabilities
-
-  * <<spirvenv-capabilities-table-MultiView,code:MultiView>>
-
-=== Version History
-
- * Revision 1, 2016-10-28 (Jeff Bolz)
-   - Internal revisions
-
-ifdef::isrefpage[]
-
-=== Additional Resources
-
-* https://devblogs.nvidia.com/turing-multi-view-rendering-vrworks['NVIDIA
-  blog post']
-* https://community.arm.com/developer/tools-software/graphics/b/blog/posts/optimizing-virtual-reality-understanding-multiview['ARM
-  blog post']
-
-endif::isrefpage[]
diff --git a/registry/vulkan/appendices/VK_KHR_performance_query.txt b/registry/vulkan/appendices/VK_KHR_performance_query.txt
deleted file mode 100644
index f632dd8..0000000
--- a/registry/vulkan/appendices/VK_KHR_performance_query.txt
+++ /dev/null
@@ -1,328 +0,0 @@
-// Copyright 2016-2021 The Khronos Group, Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-include::{generated}/meta/{refprefix}VK_KHR_performance_query.txt[]
-
-=== Other Extension Metadata
-
-*Last Modified Date*::
-    2019-10-08
-*IP Status*::
-    No known IP claims.
-*Contributors*::
-  - Jesse Barker, Unity Technologies
-  - Kenneth Benzie, Codeplay
-  - Jan-Harald Fredriksen, ARM
-  - Jeff Leger, Qualcomm
-  - Jesse Hall, Google
-  - Tobias Hector, AMD
-  - Neil Henning, Codeplay
-  - Baldur Karlsson
-  - Lionel Landwerlin, Intel
-  - Peter Lohrmann, AMD
-  - Alon Or-bach, Samsung
-  - Daniel Rakos, AMD
-  - Niklas Smedberg, Unity Technologies
-  - Igor Ostrowski, Intel
-
-=== Description
-
-The `VK_KHR_performance_query` extension adds a mechanism to allow querying
-of performance counters for use in applications and by profiling tools.
-
-Each queue family may: expose counters that can: be enabled on a queue of
-that family.
-We extend elink:VkQueryType to add a new query type for performance queries,
-and chain a structure on slink:VkQueryPoolCreateInfo to specify the
-performance queries to enable.
-
-include::{generated}/interfaces/VK_KHR_performance_query.txt[]
-
-=== Issues
-
-1) Should this extension include a mechanism to begin a query in command
-buffer _A_ and end the query in command buffer _B_?
-
-*RESOLVED* No - queries are tied to command buffer creation and thus have to
-be encapsulated within a single command buffer.
-
-2) Should this extension include a mechanism to begin and end queries
-globally on the queue, not using the existing command buffer commands?
-
-*RESOLVED* No - for the same reasoning as the resolution of 1).
-
-3) Should this extension expose counters that require multiple passes?
-
-*RESOLVED* Yes - users should re-submit a command buffer with the same
-commands in it multiple times, specifying the pass to count as the query
-parameter in VkPerformanceQuerySubmitInfoKHR.
-
-4) How to handle counters across parallel workloads?
-
-*RESOLVED* In the spirit of Vulkan, a counter description flag
-ename:VK_PERFORMANCE_COUNTER_DESCRIPTION_CONCURRENTLY_IMPACTED_BIT_KHR
-denotes that the accuracy of a counter result is affected by parallel
-workloads.
-
-5) How to handle secondary command buffers?
-
-*RESOLVED* Secondary command buffers inherit any counter pass index
-specified in the parent primary command buffer.
-Note: this is no longer an issue after change from issue 10 resolution
-
-6) What commands does the profiling lock have to be held for?
-
-*RESOLVED* For any command buffer that is being queried with a performance
-query pool, the profiling lock must: be held while that command buffer is in
-the _recording_, _executable_, or _pending state_.
-
-7) Should we support flink:vkCmdCopyQueryPoolResults?
-
-*RESOLVED* Yes.
-
-8) Should we allow performance queries to interact with multiview?
-
-*RESOLVED* Yes, but the performance queries must be performed once for each
-pass per view.
-
-9) Should a `queryCount > 1` be usable for performance queries?
-
-*RESOLVED* Yes.
-Some vendors will have costly performance counter query pool creation, and
-would rather if a certain set of counters were to be used multiple times
-that a `queryCount > 1` can be used to amortize the instantiation cost.
-
-10) Should we introduce an indirect mechanism to set the counter pass index?
-
-*RESOLVED* Specify the counter pass index at submit time instead, to avoid
-requiring re-recording of command buffers when multiple counter passes are
-needed.
-
-
-=== Examples
-
-The following example shows how to find what performance counters a queue
-family supports, setup a query pool to record these performance counters,
-how to add the query pool to the command buffer to record information, and
-how to get the results from the query pool.
-
-[source,c++]
---------------------------------------
-// A previously created physical device
-VkPhysicalDevice physicalDevice;
-
-// One of the queue families our device supports
-uint32_t queueFamilyIndex;
-
-uint32_t counterCount;
-
-// Get the count of counters supported
-vkEnumeratePhysicalDeviceQueueFamilyPerformanceQueryCountersKHR(
-  physicalDevice,
-  queueFamilyIndex,
-  &counterCount,
-  NULL,
-  NULL);
-
-VkPerformanceCounterKHR* counters =
-  malloc(sizeof(VkPerformanceCounterKHR) * counterCount);
-VkPerformanceCounterDescriptionKHR* counterDescriptions =
-  malloc(sizeof(VkPerformanceCounterDescriptionKHR) * counterCount);
-
-// Get the counters supported
-vkEnumeratePhysicalDeviceQueueFamilyPerformanceQueryCountersKHR(
-  physicalDevice,
-  queueFamilyIndex,
-  &counterCount,
-  counters,
-  counterDescriptions);
-
-// Try to enable the first 8 counters
-uint32_t enabledCounters[8];
-
-const uint32_t enabledCounterCount = min(counterCount, 8));
-
-for (uint32_t i = 0; i < enabledCounterCount; i++) {
-  enabledCounters[i] = i;
-}
-
-// A previously created device that had the performanceCounterQueryPools feature
-// set to VK_TRUE
-VkDevice device;
-
-VkQueryPoolPerformanceCreateInfoKHR performanceQueryCreateInfo = {
-  VK_STRUCTURE_TYPE_QUERY_POOL_PERFORMANCE_CREATE_INFO_KHR,
-  NULL,
-
-  // Specify the queue family that this performance query is performed on
-  queueFamilyIndex,
-
-  // The number of counters to enable
-  enabledCounterCount,
-
-  // The array of indices of counters to enable
-  enabledCounters
-};
-
-
-// Get the number of passes our counters will require.
-uint32_t numPasses;
-
-vkGetPhysicalDeviceQueueFamilyPerformanceQueryPassesKHR(
-  physicalDevice,
-  &performanceQueryCreateInfo,
-  &numPasses);
-
-VkQueryPoolCreateInfo queryPoolCreateInfo = {
-  VK_STRUCTURE_TYPE_QUERY_POOL_CREATE_INFO,
-  &performanceQueryCreateInfo,
-  0,
-
-  // Using our new query type here
-  VK_QUERY_TYPE_PERFORMANCE_QUERY_KHR,
-
-  1,
-
-  0
-};
-
-VkQueryPool queryPool;
-
-VkResult result = vkCreateQueryPool(
-  device,
-  &queryPoolCreateInfo,
-  NULL,
-  &queryPool);
-
-assert(VK_SUCCESS == result);
-
-// A queue from queueFamilyIndex
-VkQueue queue;
-
-// A command buffer we want to record counters on
-VkCommandBuffer commandBuffer;
-
-VkCommandBufferBeginInfo commandBufferBeginInfo = {
-  VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO,
-  NULL,
-  0,
-  NULL
-};
-
-VkAcquireProfilingLockInfoKHR lockInfo = {
-  VK_STRUCTURE_TYPE_ACQUIRE_PROFILING_LOCK_INFO_KHR,
-  NULL,
-  0,
-  UINT64_MAX // Wait forever for the lock
-};
-
-// Acquire the profiling lock before we record command buffers
-// that will use performance queries
-
-result = vkAcquireProfilingLockKHR(device, &lockInfo);
-
-assert(VK_SUCCESS == result);
-
-result = vkBeginCommandBuffer(commandBuffer, &commandBufferBeginInfo);
-
-assert(VK_SUCCESS == result);
-
-vkCmdResetQueryPool(
-  commandBuffer,
-  queryPool,
-  0,
-  1);
-
-vkCmdBeginQuery(
-  commandBuffer,
-  queryPool,
-  0,
-  0);
-
-// Perform the commands you want to get performance information on
-// ...
-
-// Perform a barrier to ensure all previous commands were complete before
-// ending the query
-vkCmdPipelineBarrier(commandBuffer,
-  VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT,
-  VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT,
-  0,
-  0,
-  NULL,
-  0,
-  NULL,
-  0,
-  NULL);
-
-vkCmdEndQuery(
-  commandBuffer,
-  queryPool,
-  0);
-
-result = vkEndCommandBuffer(commandBuffer);
-
-assert(VK_SUCCESS == result);
-
-for (uint32_t counterPass = 0; counterPass < numPasses; counterPass++) {
-
-  VkPerformanceQuerySubmitInfoKHR performanceQuerySubmitInfo = {
-    VK_STRUCTURE_TYPE_PERFORMANCE_QUERY_SUBMIT_INFO_KHR,
-    NULL,
-    counterPass
-  };
-
-
-  // Submit the command buffer and wait for its completion
-  // ...
-}
-
-// Release the profiling lock after the command buffer is no longer in the
-// pending state.
-vkReleaseProfilingLockKHR(device);
-
-result = vkResetCommandBuffer(commandBuffer, 0);
-
-assert(VK_SUCCESS == result);
-
-// Create an array to hold the results of all counters
-VkPerformanceCounterResultKHR* recordedCounters = malloc(
-  sizeof(VkPerformanceCounterResultKHR) * enabledCounterCount);
-
-result = vkGetQueryPoolResults(
-  device,
-  queryPool,
-  0,
-  1,
-  sizeof(VkPerformanceCounterResultKHR) * enabledCounterCount,
-  recordedCounters,
-  sizeof(VkPerformanceCounterResultKHR),
-  NULL);
-
-// recordedCounters is filled with our counters, we will look at one for posterity
-switch (counters[0].storage) {
-  case VK_PERFORMANCE_COUNTER_STORAGE_INT32:
-    // use recordCounters[0].int32 to get at the counter result!
-    break;
-  case VK_PERFORMANCE_COUNTER_STORAGE_INT64:
-    // use recordCounters[0].int64 to get at the counter result!
-    break;
-  case VK_PERFORMANCE_COUNTER_STORAGE_UINT32:
-    // use recordCounters[0].uint32 to get at the counter result!
-    break;
-  case VK_PERFORMANCE_COUNTER_STORAGE_UINT64:
-    // use recordCounters[0].uint64 to get at the counter result!
-    break;
-  case VK_PERFORMANCE_COUNTER_STORAGE_FLOAT32:
-    // use recordCounters[0].float32 to get at the counter result!
-    break;
-  case VK_PERFORMANCE_COUNTER_STORAGE_FLOAT64:
-    // use recordCounters[0].float64 to get at the counter result!
-    break;
-}
---------------------------------------
-
-=== Version History
-
- * Revision 1, 2019-10-08
diff --git a/registry/vulkan/appendices/VK_KHR_pipeline_executable_properties.txt b/registry/vulkan/appendices/VK_KHR_pipeline_executable_properties.txt
deleted file mode 100644
index 0ffbf2e..0000000
--- a/registry/vulkan/appendices/VK_KHR_pipeline_executable_properties.txt
+++ /dev/null
@@ -1,57 +0,0 @@
-// Copyright 2017-2021 The Khronos Group, Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-include::{generated}/meta/{refprefix}VK_KHR_pipeline_executable_properties.txt[]
-
-=== Other Extension Metadata
-
-*Last Modified Date*::
-    2019-05-28
-*IP Status*::
-    No known IP claims.
-*Interactions and External Dependencies*::
-*Contributors*::
-  - Jason Ekstrand, Intel
-  - Ian Romanick, Intel
-  - Kenneth Graunke, Intel
-  - Baldur Karlsson, Valve
-  - Jesse Hall, Google
-  - Jeff Bolz, Nvidia
-  - Piers Daniel, Nvidia
-  - Tobias Hector, AMD
-  - Jan-Harald Fredriksen, ARM
-  - Tom Olson, ARM
-  - Daniel Koch, Nvidia
-  - Spencer Fricke, Samsung
-
-=== Description
-
-When a pipeline is created, its state and shaders are compiled into zero or
-more device-specific executables, which are used when executing commands
-against that pipeline.
-This extension adds a mechanism to query properties and statistics about the
-different executables produced by the pipeline compilation process.
-This is intended to be used by debugging and performance tools to allow them
-to provide more detailed information to the user.
-Certain compile-time shader statistics provided through this extension may
-be useful to developers for debugging or performance analysis.
-
-include::{generated}/interfaces/VK_KHR_pipeline_executable_properties.txt[]
-
-=== Issues
-
-1) What should we call the pieces of the pipeline which are produced by the
-compilation process and about which you can query properties and statistics?
-
-*RESOLVED*: Call them "`executables`".
-The name "`binary`" was used in early drafts of the extension but it was
-determined that "`pipeline binary`" could have a fairly broad meaning (such
-as a binary serialized form of an entire pipeline) and was too big of a
-namespace for the very specific needs of this extension.
-
-
-=== Version History
-
-  * Revision 1, 2019-05-28 (Jason Ekstrand)
-    - Initial draft
diff --git a/registry/vulkan/appendices/VK_KHR_pipeline_library.txt b/registry/vulkan/appendices/VK_KHR_pipeline_library.txt
deleted file mode 100644
index 5498224..0000000
--- a/registry/vulkan/appendices/VK_KHR_pipeline_library.txt
+++ /dev/null
@@ -1,30 +0,0 @@
-// Copyright 2020-2021 The Khronos Group, Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-include::{generated}/meta/{refprefix}VK_KHR_pipeline_library.txt[]
-
-=== Other Extension Metadata
-
-*Last Modified Date*::
-    2020-01-08
-*IP Status*::
-    No known IP claims.
-*Contributors*::
-  - See contributors to `apiext:VK_KHR_ray_tracing_pipeline`
-
-=== Description
-
-A pipeline library is a special pipeline that cannot be bound, instead it
-defines a set of shaders and shader groups which can be linked into other
-pipelines.
-This extension defines the infrastructure for pipeline libraries, but does
-not specify the creation or usage of pipeline libraries.
-This is left to additional dependent extensions.
-
-include::{generated}/interfaces/VK_KHR_pipeline_library.txt[]
-
-=== Version History
-
- * Revision 1, 2020-01-08 (Christoph Kubisch)
-   - Initial draft.
diff --git a/registry/vulkan/appendices/VK_KHR_portability_subset.txt b/registry/vulkan/appendices/VK_KHR_portability_subset.txt
deleted file mode 100644
index 3a68360..0000000
--- a/registry/vulkan/appendices/VK_KHR_portability_subset.txt
+++ /dev/null
@@ -1,65 +0,0 @@
-// Copyright 2018-2021 The Khronos Group, Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-include::{generated}/meta/{refprefix}VK_KHR_portability_subset.txt[]
-
-=== Other Extension Metadata
-
-*Last Modified Date*::
-    2020-07-21
-*IP Status*::
-    No known IP claims.
-*Contributors*::
-  - Bill Hollings, The Brenwill Workshop Ltd.
-  - Daniel Koch, NVIDIA
-  - Dzmitry Malyshau, Mozilla
-  - Chip Davis, CodeWeavers
-  - Dan Ginsburg, Valve
-  - Mike Weiblen, LunarG
-  - Neil Trevett, NVIDIA
-  - Alexey Knyazev, Independent
-
-=== Description
-
-The `VK_KHR_portability_subset extension allows a non-conformant Vulkan
-implementation to be built on top of another non-Vulkan graphics API, and
-identifies differences between that implementation and a fully-conformant
-native Vulkan implementation.
-
-This extension provides Vulkan implementations with the ability to mark
-otherwise-required capabilities as unsupported, or to establish additional
-properties and limits that the application should adhere to in order to
-guarantee portable behaviour and operation across platforms, including
-platforms where Vulkan is not natively supported.
-
-The goal of this specification is to document, and make queryable,
-capabilities which are required to be supported by a fully-conformant Vulkan
-1.0 implementation, but may be optional for an implementation of the Vulkan
-1.0 Portability Subset.
-
-The intent is that this extension will be advertised only on implementations
-of the Vulkan 1.0 Portability Subset, and not on conformant implementations
-of Vulkan 1.0.
-Fully-conformant Vulkan implementations provide all the required capabilies,
-and so will not provide this extension.
-Therefore, the existence of this extension can be used to determine that an
-implementation is likely not fully conformant with the Vulkan spec.
-
-If this extension is supported by the Vulkan implementation, the application
-must enable this extension.
-
-This extension defines several new structures that can be chained to the
-existing structures used by certain standard Vulkan calls, in order to query
-for non-conformant portable behavior.
-
-include::{generated}/interfaces/VK_KHR_portability_subset.txt[]
-
-=== Issues
-
-None.
-
-=== Version History
-
- * Revision 1, 2020-07-21 (Bill Hollings)
-   - Initial draft.
diff --git a/registry/vulkan/appendices/VK_KHR_present_id.txt b/registry/vulkan/appendices/VK_KHR_present_id.txt
deleted file mode 100644
index debbbe7..0000000
--- a/registry/vulkan/appendices/VK_KHR_present_id.txt
+++ /dev/null
@@ -1,37 +0,0 @@
-// Copyright 2019-2021 The Khronos Group, Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-include::{generated}/meta/{refprefix}VK_KHR_present_id.txt[]
-
-=== Other Extension Metadata
-
-*Last Modified Date*::
-    2019-05-15
-*IP Status*::
-    No known IP claims.
-*Contributors*::
-  - Keith Packard, Valve
-  - Ian Elliott, Google
-  - Alon Or-bach, Samsung
-
-=== Description
-
-This device extension allows an application that uses the
-`apiext:VK_KHR_swapchain` extension to provide an identifier for present
-operations on a swapchain.
-An application can: use this to reference specific present operations in
-other extensions.
-
-include::{generated}/interfaces/VK_KHR_present_id.txt[]
-
-=== Issues
-
-None.
-
-=== Examples
-
-=== Version History
-
- * Revision 1, 2019-05-15 (Keith Packard)
-   - Initial version
diff --git a/registry/vulkan/appendices/VK_KHR_present_wait.txt b/registry/vulkan/appendices/VK_KHR_present_wait.txt
deleted file mode 100644
index 2f4df88..0000000
--- a/registry/vulkan/appendices/VK_KHR_present_wait.txt
+++ /dev/null
@@ -1,84 +0,0 @@
-// Copyright 2019-2021 The Khronos Group, Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-include::{generated}/meta/{refprefix}VK_KHR_present_wait.txt[]
-
-=== Other Extension Metadata
-
-*Last Modified Date*::
-    2019-05-15
-*IP Status*::
-    No known IP claims.
-*Contributors*::
-  - Keith Packard, Valve
-  - Ian Elliott, Google
-  - Tobias Hector, AMD
-  - Daniel Stone, Collabora
-
-=== Description
-
-This device extension allows an application that uses the
-`apiext:VK_KHR_swapchain` extension to wait for present operations to
-complete.
-An application can use this to monitor and control the pacing of the
-application by managing the number of outstanding images yet to be
-presented.
-
-include::{generated}/interfaces/VK_KHR_present_wait.txt[]
-
-=== Issues
-
-1) When does the wait finish?
-
-*RESOLVED*.
-The wait will finish when the present is visible to the user.
-There is no requirement for any precise timing relationship between the
-presentation of the image to the user, but implementations should: signal
-the wait as close as possible to the presentation of the first pixel in the
-new image to the user.
-
-2) Should this use fences or other existing synchronization mechanism.
-
-*RESOLVED*.
-Because display and rendering are often implemented in separate drivers,
-this extension will provide a separate synchronization API.
-
-3) Should this extension share present identification with other extensions?
-
-*RESOLVED*.
-Yes.
-A new extension, VK_KHR_present_id, should be created to provide a shared
-structure for presentation identifiers.
-
-4) What happens when presentations complete out of order wrt calls to
-   vkQueuePresent? This could happen if the semaphores for the presentations
-   were ready out of order.
-
-*OPTION A*: Require that when a PresentId is set that the driver ensure that
-            images are always presented in the order of calls to
-            vkQueuePresent.
-
-*OPTION B*: Finish both waits when the earliest present completes.
-            This will complete the later present wait earlier than the
-            actual presentation.
-            This should be the easiest to implement as the driver need only
-            track the largest present ID completed.
-            This is also the 'natural' consequence of interpreting the
-            existing vkWaitForPresentKHR specificationn.
-
-*OPTION C*: Finish both waits when both have completed.
-            This will complete the earlier presentation later than the
-            actual presentation time.
-            This is allowed by the current specification as there is no
-            precise timing requirement for when the presentId value is
-            updated.
-            This requires slightly more complexity in the driver as it will
-            need to track all outstanding presentId values.
-
-=== Examples
-
-=== Version History
-
- * Revision 1, 2019-02-19 (Keith Packard)
-   - Initial version
diff --git a/registry/vulkan/appendices/VK_KHR_push_descriptor.txt b/registry/vulkan/appendices/VK_KHR_push_descriptor.txt
deleted file mode 100644
index 7e17fdd..0000000
--- a/registry/vulkan/appendices/VK_KHR_push_descriptor.txt
+++ /dev/null
@@ -1,32 +0,0 @@
-// Copyright 2016-2021 The Khronos Group, Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-include::{generated}/meta/{refprefix}VK_KHR_push_descriptor.txt[]
-
-=== Other Extension Metadata
-
-*Last Modified Date*::
-    2017-09-12
-*IP Status*::
-    No known IP claims.
-*Contributors*::
-  - Jeff Bolz, NVIDIA
-  - Michael Worcester, Imagination Technologies
-
-=== Description
-
-This extension allows descriptors to be written into the command buffer,
-while the implementation is responsible for managing their memory.
-Push descriptors may enable easier porting from older APIs and in some cases
-can be more efficient than writing descriptors into descriptor sets.
-
-include::{generated}/interfaces/VK_KHR_push_descriptor.txt[]
-
-=== Version History
-
-  * Revision 1, 2016-10-15 (Jeff Bolz)
-    - Internal revisions
-
-  * Revision 2, 2017-09-12 (Tobias Hector)
-    - Added interactions with Vulkan 1.1
diff --git a/registry/vulkan/appendices/VK_KHR_ray_query.txt b/registry/vulkan/appendices/VK_KHR_ray_query.txt
deleted file mode 100644
index f5d9ad8..0000000
--- a/registry/vulkan/appendices/VK_KHR_ray_query.txt
+++ /dev/null
@@ -1,139 +0,0 @@
-// Copyright 2017-2021 The Khronos Group, Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-include::{generated}/meta/{refprefix}VK_KHR_ray_query.txt[]
-
-=== Other Extension Metadata
-
-*Last Modified Date*::
-    2020-11-12
-*Interactions and External Dependencies*::
-  - This extension requires
-    https://htmlpreview.github.io/?https://github.com/KhronosGroup/SPIRV-Registry/blob/master/extensions/KHR/SPV_KHR_ray_query.html[`SPV_KHR_ray_query`]
-  - This extension provides API support for
-    https://github.com/KhronosGroup/GLSL/blob/master/extensions/ext/GLSL_EXT_ray_query.txt[`GLSL_EXT_ray_query`]
-*Contributors*::
-  - Matthäus Chajdas, AMD
-  - Greg Grebe, AMD
-  - Nicolai Hähnle, AMD
-  - Tobias Hector, AMD
-  - Dave Oldcorn, AMD
-  - Skyler Saleh, AMD
-  - Mathieu Robart, Arm
-  - Marius Bjorge, Arm
-  - Tom Olson, Arm
-  - Sebastian Tafuri, EA
-  - Henrik Rydgard, Embark
-  - Juan Cañada, Epic Games
-  - Patrick Kelly, Epic Games
-  - Yuriy O'Donnell, Epic Games
-  - Michael Doggett, Facebook/Oculus
-  - Andrew Garrard, Imagination
-  - Don Scorgie, Imagination
-  - Dae Kim, Imagination
-  - Joshua Barczak, Intel
-  - Slawek Grajewski, Intel
-  - Jeff Bolz, NVIDIA
-  - Pascal Gautron, NVIDIA
-  - Daniel Koch, NVIDIA
-  - Christoph Kubisch, NVIDIA
-  - Ashwin Lele, NVIDIA
-  - Robert Stepinski, NVIDIA
-  - Martin Stich, NVIDIA
-  - Nuno Subtil, NVIDIA
-  - Eric Werness, NVIDIA
-  - Jon Leech, Khronos
-  - Jeroen van Schijndel, OTOY
-  - Juul Joosten, OTOY
-  - Alex Bourd, Qualcomm
-  - Roman Larionov, Qualcomm
-  - David McAllister, Qualcomm
-  - Spencer Fricke, Samsung
-  - Lewis Gordon, Samsung
-  - Ralph Potter, Samsung
-  - Jasper Bekkers, Traverse Research
-  - Jesse Barker, Unity
-  - Baldur Karlsson, Valve
-
-=== Description
-
-Rasterization has been the dominant method to produce interactive graphics,
-but increasing performance of graphics hardware has made ray tracing a
-viable option for interactive rendering.
-Being able to integrate ray tracing with traditional rasterization makes it
-easier for applications to incrementally add ray traced effects to existing
-applications or to do hybrid approaches with rasterization for primary
-visibility and ray tracing for secondary queries.
-
-Ray queries are available to all shader types, including graphics, compute
-and ray tracing pipelines.
-Ray queries are not able to launch additional shaders, instead returning
-traversal results to the calling shader.
-
-This extension adds support for the following SPIR-V extension in Vulkan:
-
-  * `SPV_KHR_ray_query`
-
-include::{generated}/interfaces/VK_KHR_ray_query.txt[]
-
-
-=== New SPIR-V Capabilities
-
-  * <<spirvenv-capabilities-table-RayQueryKHR,RayQueryKHR>>
-  * <<spirvenv-capabilities-table-RayTraversalPrimitiveCullingKHR,RayTraversalPrimitiveCullingKHR>>
-
-
-=== Sample Code
-
-Example of ray query in a GLSL shader
-
-[source,c]
----------------------------------------------------
-rayQueryEXT rq;
-
-rayQueryInitializeEXT(rq, accStruct, gl_RayFlagsNoneEXT, 0, origin, tMin, direction, tMax);
-
-while(rayQueryProceedEXT(rq)) {
-    if (rayQueryGetIntersectionTypeEXT(rq, false) == gl_RayQueryCandidateIntersectionTriangleEXT) {
-        //...
-        rayQueryConfirmIntersectionEXT(rq);
-    }
-}
-
-if (rayQueryGetIntersectionTypeEXT(rq, true) == gl_RayQueryCommittedIntersectionNoneEXT) {
-    //...
-}
----------------------------------------------------
-
-=== Issues
-
-(1) What are the changes between the public provisional (VK_KHR_ray_tracing
-v8) release and the final (VK_KHR_acceleration_structure v11 /
-VK_KHR_ray_query v1) release?
---
-  * refactor VK_KHR_ray_tracing into 3 extensions, enabling implementation
-    flexibility and decoupling ray query support from ray pipelines:
-  ** `apiext:VK_KHR_acceleration_structure` (for acceleration structure
-     operations)
-  ** `apiext:VK_KHR_ray_tracing_pipeline` (for ray tracing pipeline and
-     shader stages)
-  ** `apiext:VK_KHR_ray_query` (for ray queries in existing shader stages)
-  * Update SPIRV capabilities to use code:RayQueryKHR
-  * extension is no longer provisional
---
-
-
-=== Version History
-
-  * Revision 1, 2020-11-12 (Mathieu Robart, Daniel Koch, Andrew Garrard)
-    - Decomposition of the specification, from VK_KHR_ray_tracing to
-      VK_KHR_ray_query (#1918,!3912)
-    - update to use code:RayQueryKHR SPIR-V capability
-    - add numerical limits for ray parameters (#2235,!3960)
-    - relax formula for ray intersection candidate determination
-      (#2322,!4080)
-    - restrict traces to TLAS (#2239,!4141)
-    - require code:HitT to be in ray interval for
-      code:OpRayQueryGenerateIntersectionKHR (#2359,!4146)
-    - add ray query shader stages for AS read bit (#2407,!4203)
diff --git a/registry/vulkan/appendices/VK_KHR_ray_tracing_pipeline.txt b/registry/vulkan/appendices/VK_KHR_ray_tracing_pipeline.txt
deleted file mode 100644
index 45f0432..0000000
--- a/registry/vulkan/appendices/VK_KHR_ray_tracing_pipeline.txt
+++ /dev/null
@@ -1,383 +0,0 @@
-// Copyright 2017-2021 The Khronos Group, Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-include::{generated}/meta/{refprefix}VK_KHR_ray_tracing_pipeline.txt[]
-
-=== Other Extension Metadata
-
-*Last Modified Date*::
-    2020-11-12
-*Interactions and External Dependencies*::
-  - This extension requires
-    https://htmlpreview.github.io/?https://github.com/KhronosGroup/SPIRV-Registry/blob/master/extensions/KHR/SPV_KHR_ray_tracing.html[`SPV_KHR_ray_tracing`]
-  - This extension provides API support for
-    https://github.com/KhronosGroup/GLSL/blob/master/extensions/ext/GLSL_EXT_ray_tracing.txt[`GLSL_EXT_ray_tracing`]
-  - This extension interacts with <<versions-1.2, Vulkan 1.2>> and
-    `apiext:VK_KHR_vulkan_memory_model`, adding the <<shader-call-related,
-    shader-call-related>> relation of invocations, <<shader-call-order,
-    shader-call-order>> partial order of dynamic instances of instructions,
-    and the <<shaders-scope-shadercall, code:ShaderCallKHR>> scope.
-  - This extension interacts with `apiext:VK_KHR_pipeline_library`, enabling
-    pipeline libraries to be used with ray tracing pipelines and enabling
-    usage of slink:VkRayTracingPipelineInterfaceCreateInfoKHR.
-*Contributors*::
-  - Matthäus Chajdas, AMD
-  - Greg Grebe, AMD
-  - Nicolai Hähnle, AMD
-  - Tobias Hector, AMD
-  - Dave Oldcorn, AMD
-  - Skyler Saleh, AMD
-  - Mathieu Robart, Arm
-  - Marius Bjorge, Arm
-  - Tom Olson, Arm
-  - Sebastian Tafuri, EA
-  - Henrik Rydgard, Embark
-  - Juan Cañada, Epic Games
-  - Patrick Kelly, Epic Games
-  - Yuriy O'Donnell, Epic Games
-  - Michael Doggett, Facebook/Oculus
-  - Andrew Garrard, Imagination
-  - Don Scorgie, Imagination
-  - Dae Kim, Imagination
-  - Joshua Barczak, Intel
-  - Slawek Grajewski, Intel
-  - Jeff Bolz, NVIDIA
-  - Pascal Gautron, NVIDIA
-  - Daniel Koch, NVIDIA
-  - Christoph Kubisch, NVIDIA
-  - Ashwin Lele, NVIDIA
-  - Robert Stepinski, NVIDIA
-  - Martin Stich, NVIDIA
-  - Nuno Subtil, NVIDIA
-  - Eric Werness, NVIDIA
-  - Jon Leech, Khronos
-  - Jeroen van Schijndel, OTOY
-  - Juul Joosten, OTOY
-  - Alex Bourd, Qualcomm
-  - Roman Larionov, Qualcomm
-  - David McAllister, Qualcomm
-  - Spencer Fricke, Samsung
-  - Lewis Gordon, Samsung
-  - Ralph Potter, Samsung
-  - Jasper Bekkers, Traverse Research
-  - Jesse Barker, Unity
-  - Baldur Karlsson, Valve
-
-=== Description
-
-Rasterization has been the dominant method to produce interactive graphics,
-but increasing performance of graphics hardware has made ray tracing a
-viable option for interactive rendering.
-Being able to integrate ray tracing with traditional rasterization makes it
-easier for applications to incrementally add ray traced effects to existing
-applications or to do hybrid approaches with rasterization for primary
-visibility and ray tracing for secondary queries.
-
-To enable ray tracing, this extension adds a few different categories of new
-functionality:
-
-  * A new ray tracing pipeline type with new shader domains: ray generation,
-    intersection, any-hit, closest hit, miss, and callable
-  * A shader binding indirection table to link shader groups with
-    acceleration structure items
-  * Ray tracing commands which initiate the ray pipeline traversal and
-    invocation of the various new shader domains depending on which
-    traversal conditions are met
-
-This extension adds support for the following SPIR-V extension in Vulkan:
-
-  * `SPV_KHR_ray_tracing`
-
-include::{generated}/interfaces/VK_KHR_ray_tracing_pipeline.txt[]
-
-=== New or Modified Built-In Variables
-
-  * <<interfaces-builtin-variables-launchid,code:LaunchIdKHR>>
-  * <<interfaces-builtin-variables-launchsize,code:LaunchSizeKHR>>
-  * <<interfaces-builtin-variables-worldrayorigin,code:WorldRayOriginKHR>>
-  * <<interfaces-builtin-variables-worldraydirection,code:WorldRayDirectionKHR>>
-  * <<interfaces-builtin-variables-objectrayorigin,code:ObjectRayOriginKHR>>
-  * <<interfaces-builtin-variables-objectraydirection,code:ObjectRayDirectionKHR>>
-  * <<interfaces-builtin-variables-raytmin,code:RayTminKHR>>
-  * <<interfaces-builtin-variables-raytmax,code:RayTmaxKHR>>
-  * <<interfaces-builtin-variables-instancecustomindex,code:InstanceCustomIndexKHR>>
-  * <<interfaces-builtin-variables-instanceid,code:InstanceId>>
-  * <<interfaces-builtin-variables-objecttoworld,code:ObjectToWorldKHR>>
-  * <<interfaces-builtin-variables-worldtoobject,code:WorldToObjectKHR>>
-  * <<interfaces-builtin-variables-hitkind,code:HitKindKHR>>
-  * <<interfaces-builtin-variables-incomingrayflags,code:IncomingRayFlagsKHR>>
-  * <<interfaces-builtin-variables-raygeometryindex,code:RayGeometryIndexKHR>>
-  * (modified)code:PrimitiveId
-
-=== New SPIR-V Capabilities
-
-  * <<spirvenv-capabilities-table-RayTracingKHR,RayTracingKHR>>
-  * <<spirvenv-capabilities-table-RayTraversalPrimitiveCullingKHR,RayTraversalPrimitiveCullingKHR>>
-
-=== Issues
-
-(1) How does this extension differ from VK_NV_ray_tracing?
---
-*DISCUSSION*:
-
-The following is a summary of the main functional differences between
-VK_KHR_ray_tracing_pipeline and VK_NV_ray_tracing:
-
-  * added support for indirect ray tracing (flink:vkCmdTraceRaysIndirectKHR)
-  * uses SPV_KHR_ray_tracing instead of SPV_NV_ray_tracing
-  ** refer to KHR SPIR-V enums instead of NV SPIR-V enums (which are
-     functionally equivalent and aliased to the same values).
-  ** added code:RayGeometryIndexKHR built-in
-  * removed vkCompileDeferredNV compilation functionality and replaced with
-    <<deferred-host-operations, deferred host operations>> interactions for
-    ray tracing
-  * added slink:VkPhysicalDeviceRayTracingPipelineFeaturesKHR structure
-  * extended slink:VkPhysicalDeviceRayTracingPipelinePropertiesKHR structure
-  ** renamed pname:maxRecursionDepth to pname:maxRayRecursionDepth and it
-     has a minimum of 1 instead of 31
-  ** require pname:shaderGroupHandleSize to be 32 bytes
-  ** added pname:maxRayDispatchInvocationCount,
-     pname:shaderGroupHandleAlignment and pname:maxRayHitAttributeSize
-  * reworked geometry structures so they could be better shared between
-    device, host, and indirect builds
-  * changed SBT parameters to a structure and added size
-    (slink:VkStridedDeviceAddressRegionKHR)
-  * add parameter for requesting memory requirements for host and/or device
-    build
-  * added <<pipeline-library,pipeline library>> support for ray tracing
-  * added <<ray-traversal-watertight, watertightness guarantees>>
-  * added no-null-shader pipeline flags
-    (etext:VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_*_SHADERS_BIT_KHR)
-  * added <<ray-tracing-shader-call,memory model interactions>> with ray
-    tracing and define how subgroups work and can be repacked
---
-
-ifdef::VK_NV_ray_tracing[]
-(2) Can you give a more detailed comparision of differences and similarities
-between VK_NV_ray_tracing and VK_KHR_ray_tracing_pipeline?
---
-*DISCUSSION*:
-
-The following is a more detailed comparision of which commands, structures,
-and enums are aliased, changed, or removed.
-
-  * Aliased functionality -- enums, structures, and commands that are
-    considered equivalent:
-  ** elink:VkRayTracingShaderGroupTypeNV {harr}
-     elink:VkRayTracingShaderGroupTypeKHR
-  ** flink:vkGetRayTracingShaderGroupHandlesNV {harr}
-     flink:vkGetRayTracingShaderGroupHandlesKHR
-
-  * Changed enums, structures, and commands:
-  ** slink:VkRayTracingShaderGroupCreateInfoNV ->
-     slink:VkRayTracingShaderGroupCreateInfoKHR (added
-     pname:pShaderGroupCaptureReplayHandle)
-  ** slink:VkRayTracingPipelineCreateInfoNV ->
-     slink:VkRayTracingPipelineCreateInfoKHR (changed type of pname:pGroups,
-     added pname:libraries, pname:pLibraryInterface, and
-     pname:pDynamicState)
-  ** slink:VkPhysicalDeviceRayTracingPropertiesNV ->
-     VkPhysicalDeviceRayTracingPropertiesKHR (renamed pname:maxTriangleCount
-     to pname:maxPrimitiveCount, added
-     pname:shaderGroupHandleCaptureReplaySize)
-  ** flink:vkCmdTraceRaysNV -> flink:vkCmdTraceRaysKHR (params to struct)
-  ** flink:vkCreateRayTracingPipelinesNV ->
-     flink:vkCreateRayTracingPipelinesKHR (different struct, changed
-     functionality)
-
-  * Added enums, structures and commands:
-  ** ename:VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_ANY_HIT_SHADERS_BIT_KHR
-     ename:VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_CLOSEST_HIT_SHADERS_BIT_KHR,
-     ename:VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_MISS_SHADERS_BIT_KHR,
-     ename:VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_INTERSECTION_SHADERS_BIT_KHR,
-     ename:VK_PIPELINE_CREATE_RAY_TRACING_SKIP_TRIANGLES_BIT_KHR,
-     ename:VK_PIPELINE_CREATE_RAY_TRACING_SKIP_AABBS_BIT_KHR to
-     elink:VkPipelineCreateFlagBits
-  ** slink:VkPhysicalDeviceRayTracingPipelineFeaturesKHR structure
-  ** slink:VkDeviceOrHostAddressKHR and slink:VkDeviceOrHostAddressConstKHR
-     unions
-  ** slink:VkPipelineLibraryCreateInfoKHR struct
-  ** slink:VkRayTracingPipelineInterfaceCreateInfoKHR struct
-  ** slink:VkStridedDeviceAddressRegionKHR struct
-  ** flink:vkCmdTraceRaysIndirectKHR command and
-     slink:VkTraceRaysIndirectCommandKHR struct
-  ** flink:vkGetRayTracingCaptureReplayShaderGroupHandlesKHR (shader group
-     capture/replay)
-  ** flink:vkCmdSetRayTracingPipelineStackSizeKHR and
-     flink:vkGetRayTracingShaderGroupStackSizeKHR commands for stack size
-     control
-
-  * Functionality removed:
-  ** ename:VK_PIPELINE_CREATE_DEFER_COMPILE_BIT_NV
-  ** flink:vkCompileDeferredNV command (replaced with
-     `apiext:VK_KHR_deferred_host_operations`)
---
-endif::VK_NV_ray_tracing[]
-
-(3) What are the changes between the public provisional (VK_KHR_ray_tracing
-v8) release and the internal provisional (VK_KHR_ray_tracing v9) release?
---
-  * Require Vulkan 1.1 and SPIR-V 1.4
-  * Added interactions with Vulkan 1.2 and
-    `apiext:VK_KHR_vulkan_memory_model`
-  * added creation time capture and replay flags
-  ** added
-     ename:VK_PIPELINE_CREATE_RAY_TRACING_SHADER_GROUP_HANDLE_CAPTURE_REPLAY_BIT_KHR
-     to elink:VkPipelineCreateFlagBits
-  * replace stext:VkStridedBufferRegionKHR with
-    slink:VkStridedDeviceAddressRegionKHR and change
-    flink:vkCmdTraceRaysKHR, flink:vkCmdTraceRaysIndirectKHR, to take these
-    for the shader binding table and use device addresses instead of
-    buffers.
-  * require the shader binding table buffers to have the
-    etext:VK_BUFFER_USAGE_RAY_TRACING_BIT_KHR set
-  * make `apiext:VK_KHR_pipeline_library` an interaction instead of required
-    extension
-  * rename the pname:libraries member of
-    slink:VkRayTracingPipelineCreateInfoKHR to pname:pLibraryInfo and make
-    it a pointer
-  * make `apiext:VK_KHR_deferred_host_operations` an interaction instead of
-    a required extension (later went back on this)
-  * added explicit stack size management for ray tracing pipelines
-  ** removed the pname:maxCallableSize member of
-     slink:VkRayTracingPipelineInterfaceCreateInfoKHR
-  ** added the pname:pDynamicState member to
-     slink:VkRayTracingPipelineCreateInfoKHR
-  ** added ename:VK_DYNAMIC_STATE_RAY_TRACING_PIPELINE_STACK_SIZE_KHR
-     dynamic state for ray tracing pipelines
-  ** added flink:vkGetRayTracingShaderGroupStackSizeKHR and
-     flink:vkCmdSetRayTracingPipelineStackSizeKHR commands
-  ** added elink:VkShaderGroupShaderKHR enum
-  * Added pname:maxRayDispatchInvocationCount limit to
-    slink:VkPhysicalDeviceRayTracingPipelinePropertiesKHR
-  * Added pname:shaderGroupHandleAlignment property to
-    slink:VkPhysicalDeviceRayTracingPipelinePropertiesKHR
-  * Added pname:maxRayHitAttributeSize property to
-    slink:VkPhysicalDeviceRayTracingPipelinePropertiesKHR
-  * Clarify deferred host ops for pipeline creation
-  ** slink:VkDeferredOperationKHR is now a top-level parameter for
-     flink:vkCreateRayTracingPipelinesKHR
-  ** removed stext:VkDeferredOperationInfoKHR structure
-  ** change deferred host creation/return parameter behavior such that the
-     implementation can modify such parameters until the deferred host
-     operation completes
-  ** `apiext:VK_KHR_deferred_host_operations` is required again
---
-
-(4) What are the changes between the internal provisional
-(VK_KHR_ray_tracing v9) release and the final (VK_KHR_acceleration_structure
-v11 / VK_KHR_ray_tracing_pipeline v1) release?
---
-  * refactor VK_KHR_ray_tracing into 3 extensions, enabling implementation
-    flexibility and decoupling ray query support from ray pipelines:
-  ** `apiext:VK_KHR_acceleration_structure` (for acceleration structure
-     operations)
-  ** `apiext:VK_KHR_ray_tracing_pipeline` (for ray tracing pipeline and
-     shader stages)
-  ** `apiext:VK_KHR_ray_query` (for ray queries in existing shader stages)
-  * Require code:Volatile for the following builtins in the ray generation,
-    closest hit, miss, intersection, and callable shader stages:
-  ** code:SubgroupSize, code:SubgroupLocalInvocationId, code:SubgroupEqMask,
-     code:SubgroupGeMask, code:SubgroupGtMask, code:SubgroupLeMask,
-     code:SubgroupLtMask
-  ** code:SMIDNV, code:WarpIDNV
-  * clarify buffer usage flags for ray tracing
-  ** ename:VK_BUFFER_USAGE_SHADER_BINDING_TABLE_BIT_KHR is added as an alias
-     of ename:VK_BUFFER_USAGE_RAY_TRACING_BIT_NV and is required on shader
-     binding table buffers
-  ** ename:VK_BUFFER_USAGE_STORAGE_BUFFER_BIT is used in
-     `apiext:VK_KHR_acceleration_structure` for pname:scratchData
-  * rename pname:maxRecursionDepth to pname:maxRayPipelineRecursionDepth
-    (pipeline creation) and pname:maxRayRecursionDepth (limit) to reduce
-    confusion
-  * Add queryable pname:maxRayHitAttributeSize limit and rename members of
-    slink:VkRayTracingPipelineInterfaceCreateInfoKHR to
-    pname:maxPipelineRayPayloadSize and pname:maxPipelineRayHitAttributeSize
-    for clarity
-  * Update SPIRV capabilities to use code:RayTracingKHR
-  * extension is no longer provisional
-  * define synchronization requirements for indirect trace rays and indirect
-    buffer
---
-
-(5) This extension adds gl_InstanceID for the intersection, any-hit, and
-    closest hit shaders, but in KHR_vulkan_glsl, gl_InstanceID is replaced
-    with gl_InstanceIndex.
-    Which should be used for Vulkan in this extension?
---
-*RESOLVED*: This extension uses gl_InstanceID and maps it to code:InstanceId
-in SPIR-V.
-It is acknowledged that this is different than other shader stages in
-Vulkan.
-There are two main reasons for the difference here:
-
-  * symmetry with gl_PrimitiveID which is also available in these shaders
-  * there is no "`baseInstance`" relevant for these shaders, and so ID makes
-    it more obvious that this is zero-based.
---
-
-=== Sample Code
-
-Example ray generation GLSL shader
-
-[source,c]
----------------------------------------------------
-#version 450 core
-#extension GL_EXT_ray_tracing : require
-layout(set = 0, binding = 0, rgba8) uniform image2D image;
-layout(set = 0, binding = 1) uniform accelerationStructureEXT as;
-layout(location = 0) rayPayloadEXT float payload;
-
-void main()
-{
-   vec4 col = vec4(0, 0, 0, 1);
-
-   vec3 origin = vec3(float(gl_LaunchIDEXT.x)/float(gl_LaunchSizeEXT.x), float(gl_LaunchIDEXT.y)/float(gl_LaunchSizeEXT.y), 1.0);
-   vec3 dir = vec3(0.0, 0.0, -1.0);
-
-   traceRayEXT(as, 0, 0xff, 0, 1, 0, origin, 0.0, dir, 1000.0, 0);
-
-   col.y = payload;
-
-   imageStore(image, ivec2(gl_LaunchIDEXT.xy), col);
-}
----------------------------------------------------
-
-=== Version History
-
-  * Revision 1, 2020-11-12 (Mathieu Robart, Daniel Koch, Eric Werness,
-    Tobias Hector)
-    - Decomposition of the specification, from VK_KHR_ray_tracing to
-      VK_KHR_ray_tracing_pipeline (#1918,!3912)
-    - require certain subgroup and sm_shader_builtin shader builtins to be
-      decorated as volatile in the ray generation, closest hit, miss,
-      intersection, and callable stages (#1924,!3903,!3954)
-    - clarify buffer usage flags for ray tracing (#2181,!3939)
-    - rename maxRecursionDepth to maxRayPipelineRecursionDepth and
-      maxRayRecursionDepth (#2203,!3937)
-    - add queriable maxRayHitAttributeSize and rename members of
-      VkRayTracingPipelineInterfaceCreateInfoKHR (#2102,!3966)
-    - update to use code:RayTracingKHR SPIR-V capability
-    - add VUs for matching hit group type against geometry type
-      (#2245,!3994)
-    - require code:RayTMaxKHR be volatile in intersection shaders
-      (#2268,!4030)
-    - add numerical limits for ray parameters (#2235,!3960)
-    - fix SBT indexing rules for device addresses (#2308,!4079)
-    - relax formula for ray intersection candidate determination
-      (#2322,!4080)
-    - add more details on code:ShaderRecordBufferKHR variables (#2230,!4083)
-    - clarify valid bits for code:InstanceCustomIndexKHR
-      (GLSL/GLSL#19,!4128)
-    - allow at most one code:IncomingRayPayloadKHR,
-      code:IncomingCallableDataKHR, and code:HitAttributeKHR (!4129)
-    - add minimum for maxShaderGroupStride (#2353,!4131)
-    - require VK_KHR_pipeline_library extension to be supported
-      (#2348,!4135)
-    - clarify meaning of 'geometry index' (#2272,!4137)
-    - restrict traces to TLAS (#2239,!4141)
-    - add note about maxPipelineRayPayloadSize (#2383,!4172)
-    - do not require raygen shader in pipeline libraries (!4185)
-    - define sync for indirect trace rays and indirect buffer (#2407,!4208)
-
diff --git a/registry/vulkan/appendices/VK_KHR_relaxed_block_layout.txt b/registry/vulkan/appendices/VK_KHR_relaxed_block_layout.txt
deleted file mode 100644
index ab3bf98..0000000
--- a/registry/vulkan/appendices/VK_KHR_relaxed_block_layout.txt
+++ /dev/null
@@ -1,38 +0,0 @@
-// Copyright 2016-2021 The Khronos Group, Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-include::{generated}/meta/{refprefix}VK_KHR_relaxed_block_layout.txt[]
-
-=== Other Extension Metadata
-
-*Last Modified Date*::
-    2017-03-26
-*IP Status*::
-    No known IP claims.
-*Interactions and External Dependencies*::
-  - Promoted to Vulkan 1.1 Core
-*Contributors*::
-  - John Kessenich, Google
-
-=== Description
-
-The `VK_KHR_relaxed_block_layout` extension allows implementations to
-indicate they can support more variation in block code:Offset decorations.
-For example, placing a vector of three floats at an offset of
-[eq]#16{times}N {plus} 4#.
-
-See <<interfaces-resources-layout,Offset and Stride Assignment>> for
-details.
-
-=== Promotion to Vulkan 1.1
-
-All functionality in this extension is included in core Vulkan 1.1, with the
-KHR suffix omitted.
-The original type, enum and command names are still available as aliases of
-the core functionality.
-
-include::{generated}/interfaces/VK_KHR_relaxed_block_layout.txt[]
-
-=== Version History
-  * Revision 1, 2017-03-26 (JohnK)
diff --git a/registry/vulkan/appendices/VK_KHR_sampler_mirror_clamp_to_edge.txt b/registry/vulkan/appendices/VK_KHR_sampler_mirror_clamp_to_edge.txt
deleted file mode 100644
index ddec972..0000000
--- a/registry/vulkan/appendices/VK_KHR_sampler_mirror_clamp_to_edge.txt
+++ /dev/null
@@ -1,91 +0,0 @@
-// Copyright 2014-2021 The Khronos Group, Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-include::{generated}/meta/{refprefix}VK_KHR_sampler_mirror_clamp_to_edge.txt[]
-
-=== Other Extension Metadata
-
-*Last Modified Date*::
-    2019-08-17
-*Interactions and External Dependencies*::
-  - Promoted to Vulkan 1.2 Core
-*Contributors*::
-  - Tobias Hector, Imagination Technologies
-  - Jon Leech, Khronos
-
-=== Description
-
-`VK_KHR_sampler_mirror_clamp_to_edge` extends the set of sampler address
-modes to include an additional mode
-(ename:VK_SAMPLER_ADDRESS_MODE_MIRROR_CLAMP_TO_EDGE) that effectively uses a
-texture map twice as large as the original image in which the additional
-half of the new image is a mirror image of the original image.
-
-This new mode relaxes the need to generate images whose opposite edges match
-by using the original image to generate a matching "`mirror image`".
-This mode allows the texture to be mirrored only once in the negative s, t,
-and r directions.
-
-=== Promotion to Vulkan 1.2
-
-All functionality in this extension is included in core Vulkan 1.2.
-However, if Vulkan 1.2 is supported and this extension is not, the
-elink:VkSamplerAddressMode
-ename:VK_SAMPLER_ADDRESS_MODE_MIRROR_CLAMP_TO_EDGE is optional.
-Since the original extension did not use an author suffix on the enum
-ename:VK_SAMPLER_ADDRESS_MODE_MIRROR_CLAMP_TO_EDGE, it is used by both core
-and extension implementations.
-
-include::{generated}/interfaces/VK_KHR_sampler_mirror_clamp_to_edge.txt[]
-
-=== Example
-
-Creating a sampler with the new address mode in each dimension
-
-
-[source,c++]
-----------------------------------------
-    VkSamplerCreateInfo createInfo =
-    {
-        VK_STRUCTURE_TYPE_SAMPLER_CREATE_INFO // sType
-        // Other members set to application-desired values
-    };
-
-    createInfo.addressModeU = VK_SAMPLER_ADDRESS_MODE_MIRROR_CLAMP_TO_EDGE;
-    createInfo.addressModeV = VK_SAMPLER_ADDRESS_MODE_MIRROR_CLAMP_TO_EDGE;
-    createInfo.addressModeW = VK_SAMPLER_ADDRESS_MODE_MIRROR_CLAMP_TO_EDGE;
-
-    VkSampler sampler;
-    VkResult result = vkCreateSampler(
-        device,
-        &createInfo,
-        &sampler);
-----------------------------------------
-
-=== Issues
-
-1) Why are both KHR and core versions of the
-ename:VK_SAMPLER_ADDRESS_MODE_MIRROR_CLAMP_TO_EDGE token present?
-
-*RESOLVED*: This functionality was intended to be required in Vulkan 1.0.
-We realized shortly before public release that not all implementations could
-support it, and moved the functionality into an optional extension, but did
-not apply the KHR extension suffix.
-Adding a KHR-suffixed alias of the non-suffixed enum has been done to comply
-with our own naming rules.
-
-In a related change, before spec revision 1.1.121 this extension was
-hardwiring into the spec Makefile so it was always included with the
-Specification, even in the core-only versions.
-This has now been reverted, and it is treated as any other extension.
-
-=== Version History
-
- * Revision 1, 2016-02-16 (Tobias Hector)
-   - Initial draft
- * Revision 2, 2019-08-14 (Jon Leech)
-   - Add KHR-suffixed alias of non-suffixed enum.
- * Revision 3, 2019-08-17 (Jon Leech)
-   - Add an issue explaining the reason for the extension API not being
-     suffixed with KHR.
diff --git a/registry/vulkan/appendices/VK_KHR_sampler_ycbcr_conversion.txt b/registry/vulkan/appendices/VK_KHR_sampler_ycbcr_conversion.txt
deleted file mode 100644
index 3df219b..0000000
--- a/registry/vulkan/appendices/VK_KHR_sampler_ycbcr_conversion.txt
+++ /dev/null
@@ -1,88 +0,0 @@
-// Copyright 2017-2021 The Khronos Group, Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-include::{generated}/meta/{refprefix}VK_KHR_sampler_ycbcr_conversion.txt[]
-
-=== Other Extension Metadata
-
-*Last Modified Date*::
-    2017-08-11
-*IP Status*::
-    No known IP claims.
-*Interactions and External Dependencies*::
-  - Promoted to Vulkan 1.1 Core
-*Contributors*::
-  - Andrew Garrard, Samsung Electronics
-  - Tobias Hector, Imagination Technologies
-  - James Jones, NVIDIA
-  - Daniel Koch, NVIDIA
-  - Daniel Rakos, AMD
-  - Romain Guy, Google
-  - Jesse Hall, Google
-  - Tom Cooksey, ARM Ltd
-  - Jeff Leger, Qualcomm Technologies, Inc
-  - Jan-Harald Fredriksen, ARM Ltd
-  - Jan Outters, Samsung Electronics
-  - Alon Or-bach, Samsung Electronics
-  - Michael Worcester, Imagination Technologies
-  - Jeff Bolz, NVIDIA
-  - Tony Zlatinski, NVIDIA
-  - Matthew Netsch, Qualcomm Technologies, Inc
-
-=== Description
-
-The use of {YCbCr} sampler conversion is an area in 3D graphics not used by
-most Vulkan developers.
-It is mainly used for processing inputs from video decoders and cameras.
-The use of the extension assumes basic knowledge of {YCbCr} concepts.
-
-This extension provides the ability to perform specified color space
-conversions during texture sampling operations for the {YCbCr} color space
-natively.
-It also adds a selection of multi-planar formats, image aspect plane, and
-the ability to bind memory to the planes of an image collectively or
-separately.
-
-=== Promotion to Vulkan 1.1
-
-All functionality in this extension is included in core Vulkan 1.1, with the
-KHR suffix omitted.
-However, if Vulkan 1.1 is supported and this extension is not, the
-code:samplerYcbcrConversion capability is optional.
-The original type, enum and command names are still available as aliases of
-the core functionality.
-
-include::{generated}/interfaces/VK_KHR_sampler_ycbcr_conversion.txt[]
-
-=== Version History
-
- * Revision 1, 2017-01-24 (Andrew Garrard)
-   - Initial draft
- * Revision 2, 2017-01-25 (Andrew Garrard)
-   - After initial feedback
- * Revision 3, 2017-01-27 (Andrew Garrard)
-   - Higher bit depth formats, renaming, swizzle
- * Revision 4, 2017-02-22 (Andrew Garrard)
-   - Added query function, formats as RGB, clarifications
- * Revision 5, 2017-04-?? (Andrew Garrard)
-   - Simplified query and removed output conversions
- * Revision 6, 2017-04-24 (Andrew Garrard)
-   - Tidying, incorporated new image query, restored transfer functions
- * Revision 7, 2017-04-25 (Andrew Garrard)
-   - Added cosited option/midpoint requirement for formats,
-     "`bypassConversion`"
- * Revision 8, 2017-04-25 (Andrew Garrard)
-   - Simplified further
- * Revision 9, 2017-04-27 (Andrew Garrard)
-   - Disjoint no more
- * Revision 10, 2017-04-28 (Andrew Garrard)
-   - Restored disjoint
- * Revision 11, 2017-04-29 (Andrew Garrard)
-   - Now Ycbcr conversion, and KHR
- * Revision 12, 2017-06-06 (Andrew Garrard)
-   - Added conversion to image view creation
- * Revision 13, 2017-07-13 (Andrew Garrard)
-   - Allowed cosited-only chroma samples for formats
- * Revision 14, 2017-08-11 (Andrew Garrard)
-   - Reflected quantization changes in BT.2100-1
diff --git a/registry/vulkan/appendices/VK_KHR_separate_depth_stencil_layouts.txt b/registry/vulkan/appendices/VK_KHR_separate_depth_stencil_layouts.txt
deleted file mode 100644
index dda24e0..0000000
--- a/registry/vulkan/appendices/VK_KHR_separate_depth_stencil_layouts.txt
+++ /dev/null
@@ -1,41 +0,0 @@
-// Copyright 2019-2021 The Khronos Group, Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-include::{generated}/meta/{refprefix}VK_KHR_separate_depth_stencil_layouts.txt[]
-
-=== Other Extension Metadata
-
-*Last Modified Date*::
-    2019-06-25
-*Interactions and External Dependencies*::
-  - Promoted to Vulkan 1.2 Core
-*Contributors*::
-  - Daniel Koch, NVIDIA
-  - Jeff Bolz, NVIDIA
-  - Jesse Barker, Unity
-  - Tobias Hector, AMD
-
-=== Description
-
-This extension allows image memory barriers for depth/stencil images to have
-just one of the ename:VK_IMAGE_ASPECT_DEPTH_BIT or
-ename:VK_IMAGE_ASPECT_STENCIL_BIT aspect bits set, rather than require both.
-This allows their layouts to be set independently.
-To support depth/stencil images with different layouts for the depth and
-stencil aspects, the depth/stencil attachment interface has been updated to
-support a separate layout for stencil.
-
-=== Promotion to Vulkan 1.2
-
-All functionality in this extension is included in core Vulkan 1.2, with the
-KHR suffix omitted.
-The original type, enum and command names are still available as aliases of
-the core functionality.
-
-include::{generated}/interfaces/VK_KHR_separate_depth_stencil_layouts.txt[]
-
-=== Version History
-
-  * Revision 1, 2019-06-25 (Piers Daniell)
-    - Internal revisions
diff --git a/registry/vulkan/appendices/VK_KHR_shader_atomic_int64.txt b/registry/vulkan/appendices/VK_KHR_shader_atomic_int64.txt
deleted file mode 100644
index 68fd623..0000000
--- a/registry/vulkan/appendices/VK_KHR_shader_atomic_int64.txt
+++ /dev/null
@@ -1,51 +0,0 @@
-// Copyright 2014-2021 The Khronos Group, Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-include::{generated}/meta/{refprefix}VK_KHR_shader_atomic_int64.txt[]
-
-=== Other Extension Metadata
-
-*Last Modified Date*::
-    2018-07-05
-*Interactions and External Dependencies*::
-  - Promoted to Vulkan 1.2 Core
-  - This extension enables
-    https://www.khronos.org/registry/OpenGL/extensions/ARB/ARB_gpu_shader_int64.txt[`GL_ARB_gpu_shader_int64`]
-    and
-    https://raw.githubusercontent.com/KhronosGroup/GLSL/master/extensions/ext/GL_EXT_shader_atomic_int64.txt[`GL_EXT_shader_atomic_int64`]
-    for GLSL source languages.
-*Contributors*::
-  - Aaron Hagan, AMD
-  - Daniel Rakos, AMD
-  - Jeff Bolz, NVIDIA
-  - Neil Henning, Codeplay
-
-=== Description
-
-This extension advertises the SPIR-V *Int64Atomics* capability for Vulkan,
-which allows a shader to contain 64-bit atomic operations on signed and
-unsigned integers.
-The supported operations include OpAtomicMin, OpAtomicMax, OpAtomicAnd,
-OpAtomicOr, OpAtomicXor, OpAtomicAdd, OpAtomicExchange, and
-OpAtomicCompareExchange.
-
-=== Promotion to Vulkan 1.2
-
-All functionality in this extension is included in core Vulkan 1.2, with the
-KHR suffix omitted.
-However, if Vulkan 1.2 is supported and this extension is not, the
-code:shaderBufferInt64Atomics capability is optional.
-The original type, enum and command names are still available as aliases of
-the core functionality.
-
-include::{generated}/interfaces/VK_KHR_shader_atomic_int64.txt[]
-
-=== New SPIR-V Capabilities
-
-  * <<spirvenv-capabilities-table-Int64Atomics,Int64Atomics>>
-
-=== Version History
-
-  * Revision 1, 2018-07-05 (Aaron Hagan)
-    - Internal revisions
diff --git a/registry/vulkan/appendices/VK_KHR_shader_clock.txt b/registry/vulkan/appendices/VK_KHR_shader_clock.txt
deleted file mode 100644
index 8134373..0000000
--- a/registry/vulkan/appendices/VK_KHR_shader_clock.txt
+++ /dev/null
@@ -1,46 +0,0 @@
-// Copyright 2017-2021 The Khronos Group, Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-include::{generated}/meta/{refprefix}VK_KHR_shader_clock.txt[]
-
-=== Other Extension Metadata
-
-*Last Modified Date*::
-    2019-4-25
-*IP Status*::
-    No known IP claims.
-*Interactions and External Dependencies*::
-  - This extension requires
-    {spirv}/KHR/SPV_KHR_shader_clock.html[`SPV_KHR_shader_clock`].
-  - This extension provides API support for
-    https://www.khronos.org/registry/OpenGL/extensions/ARB/ARB_shader_clock.txt[`ARB_shader_clock`]
-    and
-    https://github.com/KhronosGroup/GLSL/blob/master/extensions/ext/GL_EXT_shader_realtime_clock.txt[`EXT_shader_realtime_clock`]
-*Contributors*::
-  - Aaron Hagan, AMD
-  - Daniel Koch, NVIDIA
-
-=== Description
-
-This extension advertises the SPIR-V code:ShaderClockKHR capability for
-Vulkan, which allows a shader to query a real-time or monotonically
-incrementing counter at the subgroup level or across the device level.
-The two valid SPIR-V scopes for code:OpReadClockKHR are code:Subgroup and
-code:Device.
-
-When using GLSL source-based shading languages, the code:clockRealtime*EXT()
-timing functions map to the code:OpReadClockKHR instruction with a scope of
-code:Device, and the code:clock*ARB() timing functions map to the
-code:OpReadClockKHR instruction with a scope of code:Subgroup.
-
-include::{generated}/interfaces/VK_KHR_shader_clock.txt[]
-
-=== New SPIR-V Capabilities
-
-  * <<spirvenv-capabilities-table-ShaderClockKHR,ShaderClockKHR>>
-
-=== Version History
-
-  * Revision 1, 2019-4-25 (Aaron Hagan)
-    - Initial revision
diff --git a/registry/vulkan/appendices/VK_KHR_shader_draw_parameters.txt b/registry/vulkan/appendices/VK_KHR_shader_draw_parameters.txt
deleted file mode 100644
index ef04bbd..0000000
--- a/registry/vulkan/appendices/VK_KHR_shader_draw_parameters.txt
+++ /dev/null
@@ -1,93 +0,0 @@
-// Copyright 2016-2021 The Khronos Group, Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-include::{generated}/meta/{refprefix}VK_KHR_shader_draw_parameters.txt[]
-
-=== Other Extension Metadata
-
-*Last Modified Date*::
-    2017-09-05
-*IP Status*::
-    No known IP claims.
-*Interactions and External Dependencies*::
-  - This extension requires
-    {spirv}/KHR/SPV_KHR_shader_draw_parameters.html[`SPV_KHR_shader_draw_parameters`]
-  - This extension provides API support for
-    https://www.khronos.org/registry/OpenGL/extensions/ARB/ARB_shader_draw_parameters.txt[`GL_ARB_shader_draw_parameters`]
-  - Promoted to Vulkan 1.1 Core
-*Contributors*::
-  - Daniel Koch, NVIDIA Corporation
-  - Jeff Bolz, NVIDIA
-  - Daniel Rakos, AMD
-  - Jan-Harald Fredriksen, ARM
-  - John Kessenich, Google
-  - Stuart Smith, IMG
-
-=== Description
-
-This extension adds support for the following SPIR-V extension in Vulkan:
-
-  * `SPV_KHR_shader_draw_parameters`
-
-The extension provides access to three additional built-in shader variables
-in Vulkan:
-
-  * code:BaseInstance, which contains the pname:firstInstance parameter
-    passed to drawing commands,
-  * code:BaseVertex, which contains the pname:firstVertex or
-    pname:vertexOffset parameter passed to drawing commands, and
-  * code:DrawIndex, which contains the index of the draw call currently
-    being processed from an indirect draw call.
-
-When using GLSL source-based shader languages, the following variables from
-`GL_ARB_shader_draw_parameters` can map to these SPIR-V built-in
-decorations:
-
-  * `in int gl_BaseInstanceARB;` -> code:BaseInstance,
-  * `in int gl_BaseVertexARB;` -> code:BaseVertex, and
-  * `in int gl_DrawIDARB;` -> code:DrawIndex.
-
-=== Promotion to Vulkan 1.1
-
-All functionality in this extension is included in core Vulkan 1.1, however
-a <<features-shaderDrawParameters,feature bit was added>> to distinguish
-whether it is actually available or not.
-
-include::{generated}/interfaces/VK_KHR_shader_draw_parameters.txt[]
-
-=== New Built-In Variables
-
-  * <<interfaces-builtin-variables-baseinstance,code:BaseInstance>>
-  * <<interfaces-builtin-variables-basevertex,code:BaseVertex>>
-  * <<interfaces-builtin-variables-drawindex,code:DrawIndex>>
-
-=== New SPIR-V Capabilities
-
-  * <<spirvenv-capabilities-table-DrawParameters,DrawParameters>>
-
-=== Issues
-
-1) Is this the same functionality as `GL_ARB_shader_draw_parameters`?
-
-*RESOLVED*: It is actually a superset, as it also adds in support for
-arrayed drawing commands.
-
-In GL for `GL_ARB_shader_draw_parameters`, code:gl_BaseVertexARB holds the
-integer value passed to the parameter to the command that resulted in the
-current shader invocation.
-In the case where the command has no code:baseVertex parameter, the value of
-code:gl_BaseVertexARB is zero.
-This means that code:gl_BaseVertexARB = code:baseVertex (for
-code:glDrawElements commands with code:baseVertex) or 0.
-In particular there are no code:glDrawArrays commands that take a
-code:baseVertex parameter.
-
-Now in Vulkan, we have code:BaseVertex = pname:vertexOffset (for indexed
-drawing commands) or pname:firstVertex (for arrayed drawing commands), and
-so Vulkan's version is really a superset of GL functionality.
-
-=== Version History
-
-  * Revision 1, 2016-10-05 (Daniel Koch)
-    - Internal revisions
diff --git a/registry/vulkan/appendices/VK_KHR_shader_float16_int8.txt b/registry/vulkan/appendices/VK_KHR_shader_float16_int8.txt
deleted file mode 100644
index 7217cc7..0000000
--- a/registry/vulkan/appendices/VK_KHR_shader_float16_int8.txt
+++ /dev/null
@@ -1,56 +0,0 @@
-// Copyright 2014-2021 The Khronos Group, Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-include::{generated}/meta/{refprefix}VK_KHR_shader_float16_int8.txt[]
-
-=== Other Extension Metadata
-
-*Last Modified Date*::
-    2018-03-07
-*Interactions and External Dependencies*::
-  - Promoted to Vulkan 1.2 Core
-  - This extension interacts with `apiext:VK_KHR_8bit_storage`
-  - This extension interacts with `apiext:VK_KHR_16bit_storage`
-  - This extension interacts with `apiext:VK_KHR_shader_float_controls`
-  - This extension provides API support for
-    https://github.com/KhronosGroup/GLSL/blob/master/extensions/ext/GL_EXT_shader_explicit_arithmetic_types.txt[`GL_EXT_shader_explicit_arithmetic_types`]
-*IP Status*::
-    No known IP claims.
-*Contributors*::
-    - Alexander Galazin, Arm
-    - Jan-Harald Fredriksen, Arm
-    - Jeff Bolz, NVIDIA
-    - Graeme Leese, Broadcom
-    - Daniel Rakos, AMD
-
-=== Description
-
-The `VK_KHR_shader_float16_int8` extension allows use of 16-bit
-floating-point types and 8-bit integer types in shaders for arithmetic
-operations.
-
-It introduces two new optional features pname:shaderFloat16 and
-pname:shaderInt8 which directly map to the code:Float16 and the code:Int8
-SPIR-V capabilities.
-The `VK_KHR_shader_float16_int8` extension also specifies precision
-requirements for half-precision floating-point SPIR-V operations.
-This extension does not enable use of 8-bit integer types or 16-bit
-floating-point types in any <<interfaces-iointerfaces, shader input and
-output interfaces>> and therefore does not supersede the
-`apiext:VK_KHR_8bit_storage` or `apiext:VK_KHR_16bit_storage` extensions.
-
-=== Promotion to Vulkan 1.2
-
-All functionality in this extension is included in core Vulkan 1.2, with the
-KHR suffix omitted.
-However, if Vulkan 1.2 is supported and this extension is not, both the
-code:shaderFloat16 and code:shaderInt8 capabilities are optional.
-The original type, enum and command names are still available as aliases of
-the core functionality.
-
-include::{generated}/interfaces/VK_KHR_shader_float16_int8.txt[]
-
-=== Version History
-  * Revision 1, 2018-03-07 (Alexander Galazin)
-    - Initial draft
diff --git a/registry/vulkan/appendices/VK_KHR_shader_float_controls.txt b/registry/vulkan/appendices/VK_KHR_shader_float_controls.txt
deleted file mode 100644
index 50fefb1..0000000
--- a/registry/vulkan/appendices/VK_KHR_shader_float_controls.txt
+++ /dev/null
@@ -1,134 +0,0 @@
-// Copyright 2014-2021 The Khronos Group, Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-include::{generated}/meta/{refprefix}VK_KHR_shader_float_controls.txt[]
-
-=== Other Extension Metadata
-
-*Last Modified Date*::
-    2018-09-11
-*Interactions and External Dependencies*::
-  - Promoted to Vulkan 1.2 Core
-  - This extension requires
-    {spirv}/KHR/SPV_KHR_float_controls.html[`SPV_KHR_float_controls`]
-*IP Status*::
-    No known IP claims.
-*Contributors*::
-    - Alexander Galazin, Arm
-    - Jan-Harald Fredriksen, Arm
-    - Jeff Bolz, NVIDIA
-    - Graeme Leese, Broadcom
-    - Daniel Rakos, AMD
-
-=== Description
-
-The `VK_KHR_shader_float_controls` extension enables efficient use of
-floating-point computations through the ability to query and override the
-implementation's default behavior for rounding modes, denormals, signed
-zero, and infinity.
-
-=== Promotion to Vulkan 1.2
-
-All functionality in this extension is included in core Vulkan 1.2, with the
-KHR suffix omitted.
-The original type, enum and command names are still available as aliases of
-the core functionality.
-
-include::{generated}/interfaces/VK_KHR_shader_float_controls.txt[]
-
-=== New SPIR-V Capabilities
-
-  * <<spirvenv-capabilities-table-DenormPreserve,code:DenormPreserve>>
-  * <<spirvenv-capabilities-table-DenormFlushToZero,code:DenormFlushToZero>>
-  * <<spirvenv-capabilities-table-SignedZeroInfNanPreserve,code:SignedZeroInfNanPreserve>>
-  * <<spirvenv-capabilities-table-RoundingModeRTE,code:RoundingModeRTE>>
-  * <<spirvenv-capabilities-table-RoundingModeRTZ,code:RoundingModeRTZ>>
-
-=== Issues
-
-1) Which instructions must flush denorms?
-
-*RESOLVED*: Only floating-point conversion, floating-point arithmetic,
-floating-point relational (except code:OpIsNaN, code:OpIsInf), and
-floating-point GLSL.std.450 extended instructions must flush denormals.
-
-2) What is the denorm behavior for intermediate results?
-
-*RESOLVED*: When a SPIR-V instruction is implemented as a sequence of other
-instructions:
-
- * in the code:DenormFlushToZero execution mode, the intermediate
-   instructions may flush denormals, the final result of the sequence must:
-   not be denormal.
- * in the code:DenormPreserve execution mode, denormals must be preserved
-   throughout the whole sequence.
-
-3) Do denorm and rounding mode controls apply to code:OpSpecConstantOp?
-
-*RESOLVED*: Yes, except when the opcode is code:OpQuantizeToF16.
-
-4) The SPIR-V specification says that code:OpConvertFToU and
-code:OpConvertFToS unconditionally round towards zero.
-Do the rounding mode controls specified through the execution modes apply to
-them?
-
-*RESOLVED*: No, these instructions unconditionally round towards zero.
-
-5) Do any of the "`Pack`" GLSL.std.450 instructions count as conversion
-instructions and have the rounding mode applied?
-
-*RESOLVED*: No, only instructions listed in "`section 3.32.11.
-Conversion Instructions`" of the SPIR-V specification count as conversion
-instructions.
-
-6) When using inf/nan-ignore mode, what is expected of code:OpIsNan and
-code:OpIsInf?
-
-*RESOLVED*: These instructions must always accurately detect inf/nan if it
-is passed to them.
-
-
-[[VK_KHR_shader_controls_v4_incompatibility]]
-=== Version 4 API incompatibility
-
-The original versions of `VK_KHR_shader_float_controls` shipped with
-booleans named "`separateDenormSettings`" and
-"`separateRoundingModeSettings`", which at first glance could have indicated
-"`they can all be set independently, or not`".
-However the spec language as written indicated that the 32-bit value could
-always be set independently, and only the 16- and 64-bit controls needed to
-be the same if these values were ename:VK_FALSE.
-
-As a result of this slight disparity, and lack of test coverage for this
-facet of the extension, we ended up with two different behaviors in the
-wild, where some implementations worked as written, and others worked based
-on the naming.
-As these are hard limits in hardware with reasons for exposure as written,
-it was not possible to standardise on a single way to make this work within
-the existing API.
-
-No known users of this part of the extension exist in the wild, and as such
-the Vulkan WG took the unusual step of retroactively changing the once
-boolean value into a tri-state enum, breaking source compatibility.
-This was however done in such a way as to retain ABI compatibility, in case
-any code using this did exist; with the numerical values 0 and 1 retaining
-their original specified meaning, and a new value signifying the additional
-"`all need to be set together`" state.
-If any applications exist today, compiled binaries will continue to work as
-written in most cases, but will need changes before the code can be
-recompiled.
-
-
-=== Version History
-
-  * Revision 4, 2019-06-18 (Tobias Hector)
-    - Modified settings restrictions, see
-      <<VK_KHR_shader_controls_v4_incompatibility, Version 4 API
-      incompatibility>>
-  * Revision 3, 2018-09-11 (Alexander Galazin)
-    - Minor restructuring
-  * Revision 2, 2018-04-17 (Alexander Galazin)
-    - Added issues and resolutions
-  * Revision 1, 2018-04-11 (Alexander Galazin)
-    - Initial draft
diff --git a/registry/vulkan/appendices/VK_KHR_shader_integer_dot_product.txt b/registry/vulkan/appendices/VK_KHR_shader_integer_dot_product.txt
deleted file mode 100644
index 6b01cd8..0000000
--- a/registry/vulkan/appendices/VK_KHR_shader_integer_dot_product.txt
+++ /dev/null
@@ -1,54 +0,0 @@
-// Copyright (c) 2019-2020 Khronos Group.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-include::{generated}/meta/{refprefix}VK_KHR_shader_integer_dot_product.txt[]
-
-=== Other Extension Metadata
-
-*Last Modified Date*::
-    2021-06-16
-*Interactions and External Dependencies*::
-  - This extension requires
-    {spirv}/KHR/SPV_KHR_integer_dot_product.html[`SPV_KHR_integer_dot_product`].
-  - This extension interacts with `apiext:VK_KHR_shader_float16_int8`.
-*IP Status*::
-    No known IP claims.
-*Contributors*::
-  - Kévin Petit, Arm Ltd.
-  - Jeff Bolz, NVidia
-  - Spencer Fricke, Samsung
-  - Jesse Hall, Google
-  - John Kessenich, Google
-  - Graeme Leese, Broadcom
-  - Einar Hov, Arm Ltd.
-  - Stuart Brady, Arm Ltd.
-  - Pablo Cascon, Arm Ltd.
-  - Tobias Hector, AMD
-  - Jeff Leger, Qualcomm
-  - Ruihao Zhang, Qualcomm
-  - Pierre Boudier, NVidia
-  - Jon Leech, The Khronos Group
-  - Tom Olson, Arm Ltd.
-
-=== Description
-
-This extension adds support for the integer dot product SPIR-V instructions
-defined in SPV_KHR_integer_dot_product.
-These instructions are particularly useful for neural network inference and
-training but find uses in other general purpose compute applications as
-well.
-
-include::{generated}/interfaces/VK_KHR_shader_integer_dot_product.txt[]
-
-=== New SPIR-V Capabilities
-
-  * <<spirvenv-capabilities-table-DotProductInputAllKHR,DotProductInputAllKHR>>
-  * <<spirvenv-capabilities-table-DotProductInput4x8BitKHR,DotProductInput4x8BitKHR>>
-  * <<spirvenv-capabilities-table-DotProductInput4x8BitPackedKHR,DotProductInput4x8BitPackedKHR>>
-  * <<spirvenv-capabilities-table-DotProductKHR,DotProductKHR>>
-
-=== Version History
-
-  * Revision 1, 2021-06-16 (Kévin Petit)
-    - Initial revision
diff --git a/registry/vulkan/appendices/VK_KHR_shader_non_semantic_info.txt b/registry/vulkan/appendices/VK_KHR_shader_non_semantic_info.txt
deleted file mode 100644
index 9531ad2..0000000
--- a/registry/vulkan/appendices/VK_KHR_shader_non_semantic_info.txt
+++ /dev/null
@@ -1,29 +0,0 @@
-// Copyright 2017-2021 The Khronos Group, Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-include::{generated}/meta/{refprefix}VK_KHR_shader_non_semantic_info.txt[]
-
-=== Other Extension Metadata
-
-*Last Modified Date*::
-    2019-10-16
-*IP Status*::
-    No known IP claims.
-*Interactions and External Dependencies*::
-  - This extension requires
-    {spirv}/KHR/SPV_KHR_non_semantic_info.html[`SPV_KHR_non_semantic_info`]
-*Contributors*::
-  - Baldur Karlsson, Valve
-
-=== Description
-
-This extension allows the use of the `SPV_KHR_non_semantic_info` extension
-in SPIR-V shader modules.
-
-include::{generated}/interfaces/VK_KHR_shader_non_semantic_info.txt[]
-
-=== Version History
-
-  * Revision 1, 2019-10-16 (Baldur Karlsson)
-    - Initial revision
diff --git a/registry/vulkan/appendices/VK_KHR_shader_subgroup_extended_types.txt b/registry/vulkan/appendices/VK_KHR_shader_subgroup_extended_types.txt
deleted file mode 100644
index 7f13247..0000000
--- a/registry/vulkan/appendices/VK_KHR_shader_subgroup_extended_types.txt
+++ /dev/null
@@ -1,45 +0,0 @@
-// Copyright 2017-2021 The Khronos Group, Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-include::{generated}/meta/{refprefix}VK_KHR_shader_subgroup_extended_types.txt[]
-
-=== Other Extension Metadata
-
-*Last Modified Date*::
-    2019-01-08
-*IP Status*::
-    No known IP claims.
-*Interactions and External Dependencies*::
-  - Promoted to Vulkan 1.2 Core
-  - This extension provides API support for
-    https://github.com/KhronosGroup/GLSL/blob/master/extensions/ext/GLSL_EXT_shader_subgroup_extended_types.txt[`GLSL_EXT_shader_subgroup_extended_types`]
-*Contributors*::
-  - Jeff Bolz, NVIDIA
-  - Jan-Harald Fredriksen, Arm
-  - Neil Henning, AMD
-  - Daniel Koch, NVIDIA
-  - Jeff Leger, Qualcomm
-  - Graeme Leese, Broadcom
-  - David Neto, Google
-  - Daniel Rakos, AMD
-
-=== Description
-
-This extension enables the Non Uniform Group Operations in SPIR-V to support
-8-bit integer, 16-bit integer, 64-bit integer, 16-bit floating-point, and
-vectors of these types.
-
-=== Promotion to Vulkan 1.2
-
-All functionality in this extension is included in core Vulkan 1.2, with the
-KHR suffix omitted.
-The original type, enum and command names are still available as aliases of
-the core functionality.
-
-include::{generated}/interfaces/VK_KHR_shader_subgroup_extended_types.txt[]
-
-=== Version History
-
-  * Revision 1, 2019-01-08 (Neil Henning)
-    - Initial draft
diff --git a/registry/vulkan/appendices/VK_KHR_shader_subgroup_uniform_control_flow.txt b/registry/vulkan/appendices/VK_KHR_shader_subgroup_uniform_control_flow.txt
deleted file mode 100644
index 2d97a64..0000000
--- a/registry/vulkan/appendices/VK_KHR_shader_subgroup_uniform_control_flow.txt
+++ /dev/null
@@ -1,39 +0,0 @@
-// Copyright 2020-2021 The Khronos Group Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-include::{generated}/meta/{refprefix}VK_KHR_shader_subgroup_uniform_control_flow.txt[]
-
-=== Other Extension Metadata
-
-*Last Modified Date*::
-    2020-08-27
-*IP Status*::
-    No known IP claims.
-*Interactions and External Dependencies*::
-  - Requires SPIR-V 1.3.
-  - This extension requires
-    {spirv}/KHR/SPV_KHR_subgroup_uniform_control_flow.html[`SPV_KHR_subgroup_uniform_control_flow`]
-*Contributors*::
-  - Alan Baker, Google
-  - Jeff Bolz, NVIDIA
-
-=== Description
-
-This extension allows the use of the `SPV_KHR_subgroup_uniform_control_flow`
-SPIR-V extension in shader modules.
-`SPV_KHR_subgroup_uniform_control_flow` provides stronger guarantees that
-diverged subgroups will reconverge.
-
-Developers should utilize this extension if they use subgroup operations to
-reduce the work performed by a uniform subgroup.
-This extension will guarantee that uniform subgroup will reconverge in the
-same manner as invocation groups (see "`Uniform Control Flow`" in the
-<<spirv-spec,Khronos SPIR-V Specification>>).
-
-include::{generated}/interfaces/VK_KHR_shader_subgroup_uniform_control_flow.txt[]
-
-=== Version History
-
-  * Revision 1, 2020-08-27 (Alan Baker)
-    - Internal draft version
diff --git a/registry/vulkan/appendices/VK_KHR_shader_terminate_invocation.txt b/registry/vulkan/appendices/VK_KHR_shader_terminate_invocation.txt
deleted file mode 100644
index b3b724c..0000000
--- a/registry/vulkan/appendices/VK_KHR_shader_terminate_invocation.txt
+++ /dev/null
@@ -1,46 +0,0 @@
-// Copyright 2020-2021 The Khronos Group Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-include::{generated}/meta/{refprefix}VK_KHR_shader_terminate_invocation.txt[]
-
-=== Other Extension Metadata
-
-*Last Modified Date*::
-    2020-08-11
-*IP Status*::
-    No known IP claims.
-*Interactions and External Dependencies*::
-  - Requires the
-    {spirv}/KHR/SPV_KHR_terminate_invocation.html[`SPV_KHR_terminate_invocation`]
-    SPIR-V extension.
-*Contributors*::
-  - Alan Baker, Google
-  - Jeff Bolz, NVIDIA
-  - Jesse Hall, Google
-  - Ralph Potter, Samsung
-  - Tom Olson, Arm
-
-=== Description
-
-This extension adds Vulkan support for the
-{spirv}/KHR/SPV_KHR_terminate_invocation.html[`SPV_KHR_terminate_invocation`]
-SPIR-V extension.
-That SPIR-V extension provides a new instruction,
-code:OpTerminateInvocation, which causes a shader invocation to immediately
-terminate and sets the coverage of shaded samples to `0`; only previously
-executed instructions will have observable effects.
-The code:OpTerminateInvocation instruction, along with the
-code:OpDemoteToHelperInvocation instruction from the
-`apiext:VK_EXT_shader_demote_to_helper_invocation` extension, together
-replace the code:OpKill instruction, which could behave like either of these
-instructions.
-code:OpTerminateInvocation provides the behavior required by the GLSL
-code:discard statement, and should be used when available by GLSL compilers
-and applications that need the GLSL code:discard behavior.
-
-include::{generated}/interfaces/VK_KHR_shader_terminate_invocation.txt[]
-
-=== Version History
-
-  * Revision 1, 2020-08-11 (Jesse Hall)
diff --git a/registry/vulkan/appendices/VK_KHR_shared_presentable_image.txt b/registry/vulkan/appendices/VK_KHR_shared_presentable_image.txt
deleted file mode 100644
index ea5b522..0000000
--- a/registry/vulkan/appendices/VK_KHR_shared_presentable_image.txt
+++ /dev/null
@@ -1,127 +0,0 @@
-// Copyright 2014-2021 The Khronos Group, Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-include::{generated}/meta/{refprefix}VK_KHR_shared_presentable_image.txt[]
-
-=== Other Extension Metadata
-
-*Last Modified Date*::
-    2017-03-20
-*IP Status*::
-    No known IP claims.
-*Contributors*::
-  - Alon Or-bach, Samsung Electronics
-  - Ian Elliott, Google
-  - Jesse Hall, Google
-  - Pablo Ceballos, Google
-  - Chris Forbes, Google
-  - Jeff Juliano, NVIDIA
-  - James Jones, NVIDIA
-  - Daniel Rakos, AMD
-  - Tobias Hector, Imagination Technologies
-  - Graham Connor, Imagination Technologies
-  - Michael Worcester, Imagination Technologies
-  - Cass Everitt, Oculus
-  - Johannes Van Waveren, Oculus
-
-=== Description
-
-This extension extends `apiext:VK_KHR_swapchain` to enable creation of a
-shared presentable image.
-This allows the application to use the image while the presention engine is
-accessing it, in order to reduce the latency between rendering and
-presentation.
-
-include::{generated}/interfaces/VK_KHR_shared_presentable_image.txt[]
-
-=== Issues
-
-1) Should we allow a Vulkan WSI swapchain to toggle between normal usage and
-shared presentation usage?
-
-*RESOLVED*: No.
-WSI swapchains are typically recreated with new properties instead of having
-their properties changed.
-This can also save resources, assuming that fewer images are needed for
-shared presentation, and assuming that most VR applications do not need to
-switch between normal and shared usage.
-
-2) Should we have a query for determining how the presentation engine
-refresh is triggered?
-
-*RESOLVED*: Yes.
-This is done via which presentation modes a surface supports.
-
-3) Should the object representing a shared presentable image be an extension
-of a slink:VkSwapchainKHR or a separate object?
-
-*RESOLVED*: Extension of a swapchain due to overlap in creation properties
-and to allow common functionality between shared and normal presentable
-images and swapchains.
-
-4) What should we call the extension and the new structures it creates?
-
-*RESOLVED*: Shared presentable image / shared present.
-
-5) Should the pname:minImageCount and pname:presentMode values of the
-slink:VkSwapchainCreateInfoKHR be ignored, or required to be compatible
-values?
-
-*RESOLVED*: pname:minImageCount must be set to 1, and pname:presentMode
-should be set to either ename:VK_PRESENT_MODE_SHARED_DEMAND_REFRESH_KHR or
-ename:VK_PRESENT_MODE_SHARED_CONTINUOUS_REFRESH_KHR.
-
-6) What should the layout of the shared presentable image be?
-
-*RESOLVED*: After acquiring the shared presentable image, the application
-must transition it to the ename:VK_IMAGE_LAYOUT_SHARED_PRESENT_KHR layout
-prior to it being used.
-After this initial transition, any image usage that was requested during
-swapchain creation can: be performed on the image without layout transitions
-being performed.
-
-7) Do we need a new API for the trigger to refresh new content?
-
-*RESOLVED*: flink:vkQueuePresentKHR to act as API to trigger a refresh, as
-will allow combination with other compatible extensions to
-flink:vkQueuePresentKHR.
-
-8) How should an application detect a ename:VK_ERROR_OUT_OF_DATE_KHR error
-on a swapchain using the ename:VK_PRESENT_MODE_SHARED_CONTINUOUS_REFRESH_KHR
-present mode?
-
-*RESOLVED*: Introduce flink:vkGetSwapchainStatusKHR to allow applications to
-query the status of a swapchain using a shared presentation mode.
-
-9) What should subsequent calls to flink:vkQueuePresentKHR for
-ename:VK_PRESENT_MODE_SHARED_CONTINUOUS_REFRESH_KHR swapchains be defined to
-do?
-
-*RESOLVED*: State that implementations may use it as a hint for updated
-content.
-
-10) Can the ownership of a shared presentable image be transferred to a
-different queue?
-
-*RESOLVED*: No.
-It is not possible to transfer ownership of a shared presentable image
-obtained from a swapchain created using ename:VK_SHARING_MODE_EXCLUSIVE
-after it has been presented.
-
-11) How should flink:vkQueueSubmit behave if a command buffer uses an image
-from a ename:VK_ERROR_OUT_OF_DATE_KHR swapchain?
-
-*RESOLVED*: flink:vkQueueSubmit is expected to return the
-ename:VK_ERROR_DEVICE_LOST error.
-
-12) Can Vulkan provide any guarantee on the order of rendering, to enable
-beam chasing?
-
-*RESOLVED*: This could be achieved via use of render passes to ensure strip
-rendering.
-
-
-=== Version History
- * Revision 1, 2017-03-20 (Alon Or-bach)
-   - Internal revisions
diff --git a/registry/vulkan/appendices/VK_KHR_spirv_1_4.txt b/registry/vulkan/appendices/VK_KHR_spirv_1_4.txt
deleted file mode 100644
index a33f517..0000000
--- a/registry/vulkan/appendices/VK_KHR_spirv_1_4.txt
+++ /dev/null
@@ -1,119 +0,0 @@
-// Copyright 2018-2021 The Khronos Group, Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-include::{generated}/meta/{refprefix}VK_KHR_spirv_1_4.txt[]
-
-=== Other Extension Metadata
-
-*Last Modified Date*::
-    2019-04-01
-*IP Status*::
-    No known IP claims.
-*Interactions and External Dependencies*::
-  - Requires SPIR-V 1.4.
-  - Promoted to Vulkan 1.2 Core
-*Contributors*::
-  - Alexander Galazin, Arm
-  - David Neto, Google
-  - Jesse Hall, Google
-  - John Kessenich, Google
-  - Neil Henning, AMD
-  - Tom Olson, Arm
-
-=== Description
-
-This extension allows the use of SPIR-V 1.4 shader modules.
-SPIR-V 1.4's new features primarily make it an easier target for compilers
-from high-level languages, rather than exposing new hardware functionality.
-
-SPIR-V 1.4 incorporates features that are also available separately as
-extensions.
-SPIR-V 1.4 shader modules do not need to enable those extensions with the
-`OpExtension` opcode, since they are integral parts of SPIR-V 1.4.
-
-SPIR-V 1.4 introduces new floating point execution mode capabilities, also
-available via `SPV_KHR_float_controls`.
-Implementations are not required to support all of these new capabilities;
-support can be queried using
-slink:VkPhysicalDeviceFloatControlsPropertiesKHR from the
-`apiext:VK_KHR_shader_float_controls` extension.
-
-=== Promotion to Vulkan 1.2
-
-All functionality in this extension is included in core Vulkan 1.2, with the
-KHR suffix omitted.
-The original type, enum and command names are still available as aliases of
-the core functionality.
-
-include::{generated}/interfaces/VK_KHR_spirv_1_4.txt[]
-
-=== Issues
-
-1.
-Should we have an extension specific to this SPIR-V version, or add a
-version-generic query for SPIR-V version? SPIR-V 1.4 does not need any other
-API changes.
-
-*RESOLVED*: Just expose SPIR-V 1.4.
-
-Most new SPIR-V versions introduce optionally-required capabilities or have
-implementation-defined limits, and would need more API and specification
-changes specific to that version to make them available in Vulkan.
-ifdef::VK_VERSION_1_1[]
-For example, to support the subgroup capabilities added in SPIR-V 1.3
-required introducing slink:VkPhysicalDeviceSubgroupProperties to allow
-querying the supported group operation categories, maximum supported
-subgroup size, etc.
-endif::VK_VERSION_1_1[]
-While we could expose the parts of a new SPIR-V version that do not need
-accompanying changes generically, we will still end up writing extensions
-specific to each version for the remaining parts.
-Thus the generic mechanism will not reduce future spec-writing effort.
-In addition, making it clear which parts of a future version are supported
-by the generic mechanism and which cannot be used without specific support
-would be difficult to get right ahead of time.
-
-2.
-Can different stages of the same pipeline use shaders with different SPIR-V
-versions?
-
-*RESOLVED*: Yes.
-
-Mixing SPIR-V versions 1.0-1.3 in the same pipeline has not been disallowed,
-so it would be inconsistent to disallow mixing 1.4 with previous versions..
-SPIR-V 1.4 does not introduce anything that should cause new difficulties
-here.
-
-3.
-Must Vulkan extensions corresponding to SPIR-V extensions that were promoted
-to core in 1.4 be enabled in order to use that functionality in a SPIR-V 1.4
-module?
-
-*RESOLVED*: No, with caveats.
-
-The SPIR-V 1.4 module does not need to declare the SPIR-V extensions, since
-the functionality is now part of core, so there is no need to enable the
-Vulkan extension that allows SPIR-V modules to declare the SPIR-V extension.
-However, when the functionality that is now core in SPIR-V 1.4 is optionally
-supported, the query for support is provided by a Vulkan extension, and that
-query can only be used if the extension is enabled.
-
-This applies to any SPIR-V version; specifically for SPIR-V 1.4 this only
-applies to the functionality from `SPV_KHR_float_controls`, which was made
-available in Vulkan by `apiext:VK_KHR_shader_float_controls`.
-Even though the extension was promoted in SPIR-V 1.4, the capabilities are
-still optional in implementations that support `VK_KHR_spirv_1_4`.
-
-A SPIR-V 1.4 module does not need to enable `SPV_KHR_float_controls` in
-order to use the capabilities, so if the application has _a priori_
-knowledge that the implementation supports the capabilities, it does not
-need to enable `apiext:VK_KHR_shader_float_controls`.
-However, if it does not have this knowledge and has to query for support at
-runtime, it must enable `apiext:VK_KHR_shader_float_controls` in order to
-use slink:VkPhysicalDeviceFloatControlsPropertiesKHR.
-
-=== Version History
-
-  * Revision 1, 2019-04-01 (Jesse Hall)
-    - Internal draft versions
diff --git a/registry/vulkan/appendices/VK_KHR_storage_buffer_storage_class.txt b/registry/vulkan/appendices/VK_KHR_storage_buffer_storage_class.txt
deleted file mode 100644
index f5762e7..0000000
--- a/registry/vulkan/appendices/VK_KHR_storage_buffer_storage_class.txt
+++ /dev/null
@@ -1,40 +0,0 @@
-// Copyright 2017-2021 The Khronos Group, Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-include::{generated}/meta/{refprefix}VK_KHR_storage_buffer_storage_class.txt[]
-
-=== Other Extension Metadata
-
-*Last Modified Date*::
-    2017-09-05
-*IP Status*::
-    No known IP claims.
-*Interactions and External Dependencies*::
-  - This extension requires
-    {spirv}/KHR/SPV_KHR_storage_buffer_storage_class.html[`SPV_KHR_storage_buffer_storage_class`]
-  - Promoted to Vulkan 1.1 Core
-*Contributors*::
-  - Alexander Galazin, ARM
-  - David Neto, Google
-
-=== Description
-
-This extension adds support for the following SPIR-V extension in Vulkan:
-
-  * `SPV_KHR_storage_buffer_storage_class`
-
-This extension provides a new SPIR-V code:StorageBuffer storage class.
-A code:Block-decorated object in this class is equivalent to a
-code:BufferBlock-decorated object in the code:Uniform storage class.
-
-=== Promotion to Vulkan 1.1
-
-All functionality in this extension is included in core Vulkan 1.1.
-
-include::{generated}/interfaces/VK_KHR_storage_buffer_storage_class.txt[]
-
-=== Version History
-
-  * Revision 1, 2017-03-23 (Alexander Galazin)
-    - Initial draft
diff --git a/registry/vulkan/appendices/VK_KHR_surface.txt b/registry/vulkan/appendices/VK_KHR_surface.txt
deleted file mode 100644
index bac3657..0000000
--- a/registry/vulkan/appendices/VK_KHR_surface.txt
+++ /dev/null
@@ -1,226 +0,0 @@
-// Copyright 2014-2021 The Khronos Group, Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-include::{generated}/meta/{refprefix}VK_KHR_surface.txt[]
-
-=== Other Extension Metadata
-
-*Last Modified Date*::
-    2016-08-25
-*IP Status*::
-    No known IP claims.
-*Contributors*::
-  - Patrick Doane, Blizzard
-  - Ian Elliott, LunarG
-  - Jesse Hall, Google
-  - James Jones, NVIDIA
-  - David Mao, AMD
-  - Norbert Nopper, Freescale
-  - Alon Or-bach, Samsung
-  - Daniel Rakos, AMD
-  - Graham Sellers, AMD
-  - Jeff Vigil, Qualcomm
-  - Chia-I Wu, LunarG
-  - Jason Ekstrand, Intel
-
-=== Description
-
-The `VK_KHR_surface` extension is an instance extension.
-It introduces slink:VkSurfaceKHR objects, which abstract native platform
-surface or window objects for use with Vulkan.
-It also provides a way to determine whether a queue family in a physical
-device supports presenting to particular surface.
-
-Separate extensions for each platform provide the mechanisms for creating
-slink:VkSurfaceKHR objects, but once created they may be used in this and
-other platform-independent extensions, in particular the
-`apiext:VK_KHR_swapchain` extension.
-
-include::{generated}/interfaces/VK_KHR_surface.txt[]
-
-=== Examples
-
-[NOTE]
-.Note
-====
-The example code for the `VK_KHR_surface` and `apiext:VK_KHR_swapchain`
-extensions was removed from the appendix after revision 1.0.29.
-This WSI example code was ported to the cube demo that is shipped with the
-official Khronos SDK, and is being kept up-to-date in that location (see:
-https://github.com/KhronosGroup/Vulkan-Tools/blob/master/cube/cube.c).
-====
-
-=== Issues
-
-1) Should this extension include a method to query whether a physical device
-supports presenting to a specific window or native surface on a given
-platform?
-
-*RESOLVED*: Yes.
-Without this, applications would need to create a device instance to
-determine whether a particular window can be presented to.
-Knowing that a device supports presentation to a platform in general is not
-sufficient, as a single machine might support multiple seats, or instances
-of the platform that each use different underlying physical devices.
-Additionally, on some platforms, such as the X Window System, different
-drivers and devices might be used for different windows depending on which
-section of the desktop they exist on.
-
-2) Should the flink:vkGetPhysicalDeviceSurfaceCapabilitiesKHR,
-flink:vkGetPhysicalDeviceSurfaceFormatsKHR, and
-flink:vkGetPhysicalDeviceSurfacePresentModesKHR functions be in this
-extension and operate on physical devices, rather than being in
-`apiext:VK_KHR_swapchain` (i.e. device extension) and being dependent on
-slink:VkDevice?
-
-*RESOLVED*: Yes.
-While it might be useful to depend on sname:VkDevice (and therefore on
-enabled extensions and features) for the queries, Vulkan was released only
-with the slink:VkPhysicalDevice versions.
-Many cases can be resolved by a Valid Usage statement, and/or by a separate
-pname:pNext chain version of the query struct specific to a given extension
-or parameters, via extensible versions of the queries:
-ifdef::VK_EXT_full_screen_exclusive[flink:vkGetPhysicalDeviceSurfacePresentModes2EXT,]
-flink:vkGetPhysicalDeviceSurfaceCapabilities2KHR, and
-flink:vkGetPhysicalDeviceSurfaceFormats2KHR.
-
-3) Should Vulkan support Xlib or XCB as the API for accessing the X Window
-System platform?
-
-*RESOLVED*: Both.
-XCB is a more modern and efficient API, but Xlib usage is deeply ingrained
-in many applications and likely will remain in use for the foreseeable
-future.
-Not all drivers necessarily need to support both, but including both as
-options in the core specification will probably encourage support, which
-should in turn ease adoption of the Vulkan API in older codebases.
-Additionally, the performance improvements possible with XCB likely will not
-have a measurable impact on the performance of Vulkan presentation and other
-minimal window system interactions defined here.
-
-4) Should the GBM platform be included in the list of platform enums?
-
-*RESOLVED*: Deferred, and will be addressed with a platform-specific
-extension to be written in the future.
-
-=== Version History
-
-  * Revision 1, 2015-05-20 (James Jones)
-    - Initial draft, based on LunarG KHR spec, other KHR specs, patches
-      attached to bugs.
-
-  * Revision 2, 2015-05-22 (Ian Elliott)
-    - Created initial Description section.
-    - Removed query for whether a platform requires the use of a queue for
-      presentation, since it was decided that presentation will always be
-      modeled as being part of the queue.
-    - Fixed typos and other minor mistakes.
-
-  * Revision 3, 2015-05-26 (Ian Elliott)
-    - Improved the Description section.
-
-  * Revision 4, 2015-05-27 (James Jones)
-    - Fixed compilation errors in example code.
-
-  * Revision 5, 2015-06-01 (James Jones)
-    - Added issues 1 and 2 and made related spec updates.
-
-  * Revision 6, 2015-06-01 (James Jones)
-    - Merged the platform type mappings table previously removed from
-      VK_KHR_swapchain with the platform description table in this spec.
-    - Added issues 3 and 4 documenting choices made when building the
-      initial list of native platforms supported.
-
-  * Revision 7, 2015-06-11 (Ian Elliott)
-    - Updated table 1 per input from the KHR TSG.
-    - Updated issue 4 (GBM) per discussion with Daniel Stone.
-      He will create a platform-specific extension sometime in the future.
-
-  * Revision 8, 2015-06-17 (James Jones)
-    - Updated enum-extending values using new convention.
-    - Fixed the value of VK_SURFACE_PLATFORM_INFO_TYPE_SUPPORTED_KHR.
-
-  * Revision 9, 2015-06-17 (James Jones)
-    - Rebased on Vulkan API version 126.
-
-  * Revision 10, 2015-06-18 (James Jones)
-    - Marked issues 2 and 3 resolved.
-
-  * Revision 11, 2015-06-23 (Ian Elliott)
-    - Examples now show use of function pointers for extension functions.
-    - Eliminated extraneous whitespace.
-
-  * Revision 12, 2015-07-07 (Daniel Rakos)
-    - Added error section describing when each error is expected to be
-      reported.
-    - Replaced the term "`queue node index`" with "`queue family index`" in
-      the spec as that is the agreed term to be used in the latest version
-      of the core header and spec.
-    - Replaced bool32_t with VkBool32.
-
-  * Revision 13, 2015-08-06 (Daniel Rakos)
-    - Updated spec against latest core API header version.
-
-  * Revision 14, 2015-08-20 (Ian Elliott)
-    - Renamed this extension and all of its enumerations, types, functions,
-      etc.
-      This makes it compliant with the proposed standard for Vulkan
-      extensions.
-    - Switched from "`revision`" to "`version`", including use of the
-      VK_MAKE_VERSION macro in the header file.
-    - Did miscellaneous cleanup, etc.
-
-  * Revision 15, 2015-08-20 (Ian Elliott--porting a 2015-07-29 change from
-    James Jones)
-    - Moved the surface transform enums here from VK_WSI_swapchain so they
-      could be reused by VK_WSI_display.
-
-  * Revision 16, 2015-09-01 (James Jones)
-    - Restore single-field revision number.
-
-  * Revision 17, 2015-09-01 (James Jones)
-    - Fix example code compilation errors.
-
-  * Revision 18, 2015-09-26 (Jesse Hall)
-    - Replaced VkSurfaceDescriptionKHR with the VkSurfaceKHR object, which
-      is created via layered extensions.
-      Added VkDestroySurfaceKHR.
-
-  * Revision 19, 2015-09-28 (Jesse Hall)
-    - Renamed from VK_EXT_KHR_swapchain to VK_EXT_KHR_surface.
-
-  * Revision 20, 2015-09-30 (Jeff Vigil)
-    - Add error result VK_ERROR_SURFACE_LOST_KHR.
-
-  * Revision 21, 2015-10-15 (Daniel Rakos)
-    - Updated the resolution of issue #2 and include the surface capability
-      queries in this extension.
-    - Renamed SurfaceProperties to SurfaceCapabilities as it better reflects
-      that the values returned are the capabilities of the surface on a
-      particular device.
-    - Other minor cleanup and consistency changes.
-
-  * Revision 22, 2015-10-26 (Ian Elliott)
-    - Renamed from VK_EXT_KHR_surface to VK_KHR_surface.
-
-  * Revision 23, 2015-11-03 (Daniel Rakos)
-    - Added allocation callbacks to vkDestroySurfaceKHR.
-
-  * Revision 24, 2015-11-10 (Jesse Hall)
-    - Removed VkSurfaceTransformKHR.
-      Use VkSurfaceTransformFlagBitsKHR instead.
-    - Rename VkSurfaceCapabilitiesKHR member maxImageArraySize to
-      maxImageArrayLayers.
-
-  * Revision 25, 2016-01-14 (James Jones)
-    - Moved VK_ERROR_NATIVE_WINDOW_IN_USE_KHR from the
-      VK_KHR_android_surface to the VK_KHR_surface extension.
-
-  * 2016-08-23 (Ian Elliott)
-    - Update the example code, to not have so many characters per line, and
-      to split out a new example to show how to obtain function pointers.
-
-  * 2016-08-25 (Ian Elliott)
-    - A note was added at the beginning of the example code, stating that it
-      will be removed from future versions of the appendix.
diff --git a/registry/vulkan/appendices/VK_KHR_surface_protected_capabilities.txt b/registry/vulkan/appendices/VK_KHR_surface_protected_capabilities.txt
deleted file mode 100644
index 9e78018..0000000
--- a/registry/vulkan/appendices/VK_KHR_surface_protected_capabilities.txt
+++ /dev/null
@@ -1,44 +0,0 @@
-// Copyright 2017-2021 The Khronos Group, Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-include::{generated}/meta/{refprefix}VK_KHR_surface_protected_capabilities.txt[]
-
-=== Other Extension Metadata
-
-*Last Modified Date*::
-     2018-12-18
-*IP Status*::
-    No known IP claims.
-*Contributors*::
-  - Sandeep Shinde, NVIDIA
-  - James Jones, NVIDIA
-  - Daniel Koch, NVIDIA
-
-=== Description
-
-This extension extends slink:VkSurfaceCapabilities2KHR, providing
-applications a way to query whether swapchains can: be created with the
-ename:VK_SWAPCHAIN_CREATE_PROTECTED_BIT_KHR flag set.
-
-Vulkan 1.1 added (optional) support for protect memory and protected
-resources including buffers (ename:VK_BUFFER_CREATE_PROTECTED_BIT), images
-(ename:VK_IMAGE_CREATE_PROTECTED_BIT), and swapchains
-(ename:VK_SWAPCHAIN_CREATE_PROTECTED_BIT_KHR).
-However, on implementations which support multiple windowing systems, not
-all window systems may: be able to provide a protected display path.
-
-This extension provides a way to query if a protected swapchain created for
-a surface (and thus a specific windowing system) can: be displayed on
-screen.
-It extends the existing slink:VkSurfaceCapabilities2KHR structure with a new
-slink:VkSurfaceProtectedCapabilitiesKHR structure from which the application
-can: obtain information about support for protected swapchain creation
-through flink:vkGetPhysicalDeviceSurfaceCapabilities2KHR.
-
-include::{generated}/interfaces/VK_KHR_surface_protected_capabilities.txt[]
-
-=== Version History
-
- * Revision 1, 2018-12-18 (Sandeep Shinde, Daniel Koch)
-   - Internal revisions.
diff --git a/registry/vulkan/appendices/VK_KHR_swapchain.txt b/registry/vulkan/appendices/VK_KHR_swapchain.txt
deleted file mode 100644
index f489872..0000000
--- a/registry/vulkan/appendices/VK_KHR_swapchain.txt
+++ /dev/null
@@ -1,774 +0,0 @@
-// Copyright 2014-2021 The Khronos Group, Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-include::{generated}/meta/{refprefix}VK_KHR_swapchain.txt[]
-
-=== Other Extension Metadata
-
-*Last Modified Date*::
-    2017-10-06
-*IP Status*::
-    No known IP claims.
-*Interactions and External Dependencies*::
-  - Interacts with Vulkan 1.1
-*Contributors*::
-  - Patrick Doane, Blizzard
-  - Ian Elliott, LunarG
-  - Jesse Hall, Google
-  - Mathias Heyer, NVIDIA
-  - James Jones, NVIDIA
-  - David Mao, AMD
-  - Norbert Nopper, Freescale
-  - Alon Or-bach, Samsung
-  - Daniel Rakos, AMD
-  - Graham Sellers, AMD
-  - Jeff Vigil, Qualcomm
-  - Chia-I Wu, LunarG
-  - Jason Ekstrand, Intel
-  - Matthaeus G. Chajdas, AMD
-  - Ray Smith, ARM
-
-=== Description
-
-The `VK_KHR_swapchain` extension is the device-level companion to the
-`apiext:VK_KHR_surface` extension.
-It introduces slink:VkSwapchainKHR objects, which provide the ability to
-present rendering results to a surface.
-
-include::{generated}/interfaces/VK_KHR_swapchain.txt[]
-
-=== Issues
-
-1) Does this extension allow the application to specify the memory backing
-of the presentable images?
-
-*RESOLVED*: No.
-Unlike standard images, the implementation will allocate the memory backing
-of the presentable image.
-
-2) What operations are allowed on presentable images?
-
-*RESOLVED*: This is determined by the image usage flags specified when
-creating the presentable image's swapchain.
-
-3) Does this extension support MSAA presentable images?
-
-*RESOLVED*: No.
-Presentable images are always single-sampled.
-Multi-sampled rendering must use regular images.
-To present the rendering results the application must manually resolve the
-multi- sampled image to a single-sampled presentable image prior to
-presentation.
-
-4) Does this extension support stereo/multi-view presentable images?
-
-*RESOLVED*: Yes.
-The number of views associated with a presentable image is determined by the
-pname:imageArrayLayers specified when creating a swapchain.
-All presentable images in a given swapchain use the same array size.
-
-5) Are the layers of stereo presentable images half-sized?
-
-*RESOLVED*: No.
-The image extents always match those requested by the application.
-
-6) Do the "`present`" and "`acquire next image`" commands operate on a
-queue? If not, do they need to include explicit semaphore objects to
-interlock them with queue operations?
-
-*RESOLVED*: The present command operates on a queue.
-The image ownership operation it represents happens in order with other
-operations on the queue, so no explicit semaphore object is required to
-synchronize its actions.
-
-Applications may want to acquire the next image in separate threads from
-those in which they manage their queue, or in multiple threads.
-To make such usage easier, the acquire next image command takes a semaphore
-to signal as a method of explicit synchronization.
-The application must later queue a wait for this semaphore before queuing
-execution of any commands using the image.
-
-7) Does flink:vkAcquireNextImageKHR block if no images are available?
-
-*RESOLVED*: The command takes a timeout parameter.
-Special values for the timeout are 0, which makes the call a non-blocking
-operation, and code:UINT64_MAX, which blocks indefinitely.
-Values in between will block for up to the specified time.
-The call will return when an image becomes available or an error occurs.
-It may, but is not required to, return before the specified timeout expires
-if the swapchain becomes out of date.
-
-8) Can multiple presents be queued using one flink:vkQueuePresentKHR call?
-
-*RESOLVED*: Yes.
-slink:VkPresentInfoKHR contains a list of swapchains and corresponding image
-indices that will be presented.
-When supported, all presentations queued with a single
-flink:vkQueuePresentKHR call will be applied atomically as one operation.
-The same swapchain must not appear in the list more than once.
-Later extensions may provide applications stronger guarantees of atomicity
-for such present operations, and/or allow them to query whether atomic
-presentation of a particular group of swapchains is possible.
-
-9) How do the presentation and acquire next image functions notify the
-application the targeted surface has changed?
-
-*RESOLVED*: Two new result codes are introduced for this purpose:
-
-  * ename:VK_SUBOPTIMAL_KHR - Presentation will still succeed, subject to
-    the window resize behavior, but the swapchain is no longer configured
-    optimally for the surface it targets.
-    Applications should query updated surface information and recreate their
-    swapchain at the next convenient opportunity.
-  * ename:VK_ERROR_OUT_OF_DATE_KHR - Failure.
-    The swapchain is no longer compatible with the surface it targets.
-    The application must query updated surface information and recreate the
-    swapchain before presentation will succeed.
-
-These can be returned by both flink:vkAcquireNextImageKHR and
-flink:vkQueuePresentKHR.
-
-10) Does the flink:vkAcquireNextImageKHR command return a semaphore to the
-application via an output parameter, or accept a semaphore to signal from
-the application as an object handle parameter?
-
-*RESOLVED*: Accept a semaphore to signal as an object handle.
-This avoids the need to specify whether the application must destroy the
-semaphore or whether it is owned by the swapchain, and if the latter, what
-its lifetime is and whether it can be reused for other operations once it is
-received from flink:vkAcquireNextImageKHR.
-
-11) What types of swapchain queuing behavior should be exposed? Options
-include swap interval specification, mailbox/most recent vs. FIFO queue
-management, targeting specific vertical blank intervals or absolute times
-for a given present operation, and probably others.
-For some of these, whether they are specified at swapchain creation time or
-as per-present parameters needs to be decided as well.
-
-*RESOLVED*: The base swapchain extension will expose 3 possible behaviors
-(of which, FIFO will always be supported):
-
-  - Immediate present: Does not wait for vertical blanking period to update
-    the current image, likely resulting in visible tearing.
-    No internal queue is used.
-    Present requests are applied immediately.
-  - Mailbox queue: Waits for the next vertical blanking period to update the
-    current image.
-    No tearing should be observed.
-    An internal single-entry queue is used to hold pending presentation
-    requests.
-    If the queue is full when a new presentation request is received, the
-    new request replaces the existing entry, and any images associated with
-    the prior entry become available for reuse by the application.
-  - FIFO queue: Waits for the next vertical blanking period to update the
-    current image.
-    No tearing should be observed.
-    An internal queue containing [eq]#ptext:numSwapchainImages - 1# entries
-    is used to hold pending presentation requests.
-    New requests are appended to the end of the queue, and one request is
-    removed from the beginning of the queue and processed during each
-    vertical blanking period in which the queue is non-empty
-
-Not all surfaces will support all of these modes, so the modes supported
-will be returned using a surface information query.
-All surfaces must support the FIFO queue mode.
-Applications must choose one of these modes up front when creating a
-swapchain.
-Switching modes can be accomplished by recreating the swapchain.
-
-12) Can ename:VK_PRESENT_MODE_MAILBOX_KHR provide non-blocking guarantees
-for flink:vkAcquireNextImageKHR? If so, what is the proper criteria?
-
-*RESOLVED*: Yes.
-The difficulty is not immediately obvious here.
-Naively, if at least 3 images are requested, mailbox mode should always have
-an image available for the application if the application does not own any
-images when the call to flink:vkAcquireNextImageKHR was made.
-However, some presentation engines may have more than one "`current`" image,
-and would still need to block in some cases.
-The right requirement appears to be that if the application allocates the
-surface's minimum number of images + 1 then it is guaranteed non-blocking
-behavior when it does not currently own any images.
-
-13) Is there a way to create and initialize a new swapchain for a surface
-that has generated a ename:VK_SUBOPTIMAL_KHR return code while still using
-the old swapchain?
-
-*RESOLVED*: Not as part of this specification.
-This could be useful to allow the application to create an "`optimal`"
-replacement swapchain and rebuild all its command buffers using it in a
-background thread at a low priority while continuing to use the
-"`suboptimal`" swapchain in the main thread.
-It could probably use the same "`atomic replace`" semantics proposed for
-recreating direct-to-device swapchains without incurring a mode switch.
-However, after discussion, it was determined some platforms probably could
-not support concurrent swapchains for the same surface though, so this will
-be left out of the base KHR extensions.
-A future extension could add this for platforms where it is supported.
-
-14) Should there be a special value for
-slink:VkSurfaceCapabilitiesKHR::pname:maxImageCount to indicate there are no
-practical limits on the number of images in a swapchain?
-
-*RESOLVED*: Yes.
-There will often be cases where there is no practical limit to the number of
-images in a swapchain other than the amount of available resources (i.e.,
-memory) in the system.
-Trying to derive a hard limit from things like memory size is prone to
-failure.
-It is better in such cases to leave it to applications to figure such soft
-limits out via trial/failure iterations.
-
-15) Should there be a special value for
-slink:VkSurfaceCapabilitiesKHR::pname:currentExtent to indicate the size of
-the platform surface is undefined:?
-
-*RESOLVED*: Yes.
-On some platforms (Wayland, for example), the surface size is defined by the
-images presented to it rather than the other way around.
-
-16) Should there be a special value for
-slink:VkSurfaceCapabilitiesKHR::pname:maxImageExtent to indicate there is no
-practical limit on the surface size?
-
-*RESOLVED*: No.
-It seems unlikely such a system would exist.
-0 could be used to indicate the platform places no limits on the extents
-beyond those imposed by Vulkan for normal images, but this query could just
-as easily return those same limits, so a special "`unlimited`" value does
-not seem useful for this field.
-
-17) How should surface rotation and mirroring be exposed to applications?
-How do they specify rotation and mirroring transforms applied prior to
-presentation?
-
-*RESOLVED*: Applications can query both the supported and current transforms
-of a surface.
-Both are specified relative to the device's "`natural`" display rotation and
-direction.
-The supported transforms indicate which orientations the presentation engine
-accepts images in.
-For example, a presentation engine that does not support transforming
-surfaces as part of presentation, and which is presenting to a surface that
-is displayed with a 90-degree rotation, would return only one supported
-transform bit: ename:VK_SURFACE_TRANSFORM_ROTATE_90_BIT_KHR.
-Applications must transform their rendering by the transform they specify
-when creating the swapchain in pname:preTransform field.
-
-18) Can surfaces ever not support etext:VK_MIRROR_NONE? Can they support
-vertical and horizontal mirroring simultaneously? Relatedly, should
-etext:VK_MIRROR_NONE[_BIT] be zero, or bit one, and should applications be
-allowed to specify multiple pre and current mirror transform bits, or
-exactly one?
-
-*RESOLVED*: Since some platforms may not support presenting with a transform
-other than the native window's current transform, and prerotation/mirroring
-are specified relative to the device's natural rotation and direction,
-rather than relative to the surface's current rotation and direction, it is
-necessary to express lack of support for no mirroring.
-To allow this, the etext:MIRROR_NONE enum must occupy a bit in the flags.
-Since etext:MIRROR_NONE must be a bit in the bitmask rather than a bitmask
-with no values set, allowing more than one bit to be set in the bitmask
-would make it possible to describe undefined: transforms such as
-etext:VK_MIRROR_NONE_BIT | etext:VK_MIRROR_HORIZONTAL_BIT, or a transform
-that includes both "`no mirroring`" and "`horizontal mirroring`"
-simultaneously.
-Therefore, it is desirable to allow specifying all supported mirroring
-transforms using only one bit.
-The question then becomes, should there be a
-etext:VK_MIRROR_HORIZONTAL_AND_VERTICAL_BIT to represent a simultaneous
-horizontal and vertical mirror transform? However, such a transform is
-equivalent to a 180 degree rotation, so presentation engines and
-applications that wish to support or use such a transform can express it
-through rotation instead.
-Therefore, 3 exclusive bits are sufficient to express all needed mirroring
-transforms.
-
-19) Should support for sRGB be required?
-
-*RESOLVED*: In the advent of UHD and HDR display devices, proper color space
-information is vital to the display pipeline represented by the swapchain.
-The app can discover the supported format/color-space pairs and select a
-pair most suited to its rendering needs.
-Currently only the sRGB color space is supported, future extensions may
-provide support for more color spaces.
-See issues 23 and 24.
-
-20) Is there a mechanism to modify or replace an existing swapchain with one
-targeting the same surface?
-
-*RESOLVED*: Yes.
-This is described above in the text.
-
-21) Should there be a way to set prerotation and mirroring using native APIs
-when presenting using a Vulkan swapchain?
-
-*RESOLVED*: Yes.
-The transforms that can be expressed in this extension are a subset of those
-possible on native platforms.
-If a platform exposes a method to specify the transform of presented images
-for a given surface using native methods and exposes more transforms or
-other properties for surfaces than Vulkan supports, it might be impossible,
-difficult, or inconvenient to set some of those properties using Vulkan KHR
-extensions and some using the native interfaces.
-To avoid overwriting properties set using native commands when presenting
-using a Vulkan swapchain, the application can set the pretransform to
-"`inherit`", in which case the current native properties will be used, or if
-none are available, a platform-specific default will be used.
-Platforms that do not specify a reasonable default or do not provide native
-mechanisms to specify such transforms should not include the inherit bits in
-the pname:supportedTransforms bitmask they return in
-slink:VkSurfaceCapabilitiesKHR.
-
-22) Should the content of presentable images be clipped by objects obscuring
-their target surface?
-
-*RESOLVED*: Applications can choose which behavior they prefer.
-Allowing the content to be clipped could enable more efficient presentation
-methods on some platforms, but some applications might rely on the content
-of presentable images to perform techniques such as partial updates or
-motion blurs.
-
-23) What is the purpose of specifying a elink:VkColorSpaceKHR along with
-elink:VkFormat when creating a swapchain?
-
-*RESOLVED*: While Vulkan itself is color space agnostic (e.g. even the
-meaning of R, G, B and A can be freely defined by the rendering
-application), the swapchain eventually will have to present the images on a
-display device with specific color reproduction characteristics.
-If any color space transformations are necessary before an image can be
-displayed, the color space of the presented image must be known to the
-swapchain.
-A swapchain will only support a restricted set of color format and -space
-pairs.
-This set can be discovered via flink:vkGetPhysicalDeviceSurfaceFormatsKHR.
-As it can be expected that most display devices support the sRGB color
-space, at least one format/color-space pair has to be exposed, where the
-color space is ename:VK_COLOR_SPACE_SRGB_NONLINEAR_KHR.
-
-24) How are sRGB formats and the sRGB color space related?
-
-*RESOLVED*: While Vulkan exposes a number of SRGB texture formats, using
-such formats does not guarantee working in a specific color space.
-It merely means that the hardware can directly support applying the
-non-linear transfer functions defined by the sRGB standard color space when
-reading from or writing to images of those formats.
-Still, it is unlikely that a swapchain will expose a etext:*_SRGB format
-along with any color space other than
-ename:VK_COLOR_SPACE_SRGB_NONLINEAR_KHR.
-
-On the other hand, non-etext:*_SRGB formats will be very likely exposed in
-pair with a SRGB color space.
-This means, the hardware will not apply any transfer function when reading
-from or writing to such images, yet they will still be presented on a device
-with sRGB display characteristics.
-In this case the application is responsible for applying the transfer
-function, for instance by using shader math.
-
-25) How are the lifetimes of surfaces and swapchains targeting them related?
-
-*RESOLVED*: A surface must outlive any swapchains targeting it.
-A slink:VkSurfaceKHR owns the binding of the native window to the Vulkan
-driver.
-
-26) How can the client control the way the alpha component of swapchain
-images is treated by the presentation engine during compositing?
-
-*RESOLVED*: We should add new enum values to allow the client to negotiate
-with the presentation engine on how to treat image alpha values during the
-compositing process.
-Since not all platforms can practically control this through the Vulkan
-driver, a value of ename:VK_COMPOSITE_ALPHA_INHERIT_BIT_KHR is provided like
-for surface transforms.
-
-27) Is flink:vkCreateSwapchainKHR the right function to return
-ename:VK_ERROR_NATIVE_WINDOW_IN_USE_KHR, or should the various
-platform-specific slink:VkSurfaceKHR factory functions catch this error
-earlier?
-
-*RESOLVED*: For most platforms, the slink:VkSurfaceKHR structure is a simple
-container holding the data that identifies a native window or other object
-representing a surface on a particular platform.
-For the surface factory functions to return this error, they would likely
-need to register a reference on the native objects with the native display
-server somehow, and ensure no other such references exist.
-Surfaces were not intended to be that heavyweight.
-
-Swapchains are intended to be the objects that directly manipulate native
-windows and communicate with the native presentation mechanisms.
-Swapchains will already need to communicate with the native display server
-to negotiate allocation and/or presentation of presentable images for a
-native surface.
-Therefore, it makes more sense for swapchain creation to be the point at
-which native object exclusivity is enforced.
-Platforms may choose to enforce further restrictions on the number of
-slink:VkSurfaceKHR objects that may be created for the same native window if
-such a requirement makes sense on a particular platform, but a global
-requirement is only sensible at the swapchain level.
-
-=== Examples
-
-[NOTE]
-.Note
-====
-The example code for the `apiext:VK_KHR_surface` and `VK_KHR_swapchain`
-extensions was removed from the appendix after revision 1.0.29.
-This WSI example code was ported to the cube demo that is shipped with the
-official Khronos SDK, and is being kept up-to-date in that location (see:
-https://github.com/KhronosGroup/Vulkan-Tools/blob/master/cube/cube.c).
-====
-
-=== Version History
-
-  * Revision 1, 2015-05-20 (James Jones)
-    - Initial draft, based on LunarG KHR spec, other KHR specs, patches
-      attached to bugs.
-
-  * Revision 2, 2015-05-22 (Ian Elliott)
-    - Made many agreed-upon changes from 2015-05-21 KHR TSG meeting.
-      This includes using only a queue for presentation, and having an
-      explicit function to acquire the next image.
-    - Fixed typos and other minor mistakes.
-
-  * Revision 3, 2015-05-26 (Ian Elliott)
-    - Improved the Description section.
-    - Added or resolved issues that were found in improving the Description.
-      For example, pSurfaceDescription is used consistently, instead of
-      sometimes using pSurface.
-
-  * Revision 4, 2015-05-27 (James Jones)
-    - Fixed some grammatical errors and typos
-    - Filled in the description of imageUseFlags when creating a swapchain.
-    - Added a description of swapInterval.
-    - Replaced the paragraph describing the order of operations on a queue
-      for image ownership and presentation.
-
-  * Revision 5, 2015-05-27 (James Jones)
-    - Imported relevant issues from the (abandoned)
-      vk_wsi_persistent_swapchain_images extension.
-    - Added issues 6 and 7, regarding behavior of the acquire next image and
-      present commands with respect to queues.
-    - Updated spec language and examples to align with proposed resolutions
-      to issues 6 and 7.
-
-  * Revision 6, 2015-05-27 (James Jones)
-    - Added issue 8, regarding atomic presentation of multiple swapchains
-    - Updated spec language and examples to align with proposed resolution
-      to issue 8.
-
-  * Revision 7, 2015-05-27 (James Jones)
-    - Fixed compilation errors in example code, and made related spec fixes.
-
-  * Revision 8, 2015-05-27 (James Jones)
-    - Added issue 9, and the related VK_SUBOPTIMAL_KHR result code.
-    - Renamed VK_OUT_OF_DATE_KHR to VK_ERROR_OUT_OF_DATE_KHR.
-
-  * Revision 9, 2015-05-27 (James Jones)
-    - Added inline proposed resolutions (marked with [JRJ]) to some XXX
-      questions/issues.
-      These should be moved to the issues section in a subsequent update if
-      the proposals are adopted.
-
-  * Revision 10, 2015-05-28 (James Jones)
-    - Converted vkAcquireNextImageKHR back to a non-queue operation that
-      uses a VkSemaphore object for explicit synchronization.
-    - Added issue 10 to determine whether vkAcquireNextImageKHR generates or
-      returns semaphores, or whether it operates on a semaphore provided by
-      the application.
-
-  * Revision 11, 2015-05-28 (James Jones)
-    - Marked issues 6, 7, and 8 resolved.
-    - Renamed VkSurfaceCapabilityPropertiesKHR to VkSurfacePropertiesKHR to
-      better convey the mutable nature of the information it contains.
-
-  * Revision 12, 2015-05-28 (James Jones)
-    - Added issue 11 with a proposed resolution, and the related issue 12.
-    - Updated various sections of the spec to match the proposed resolution
-      to issue 11.
-
-  * Revision 13, 2015-06-01 (James Jones)
-    - Moved some structures to VK_EXT_KHR_swap_chain to resolve the
-      specification's issues 1 and 2.
-
-  * Revision 14, 2015-06-01 (James Jones)
-    - Added code for example 4 demonstrating how an application might make
-      use of the two different present and acquire next image KHR result
-      codes.
-    - Added issue 13.
-
-  * Revision 15, 2015-06-01 (James Jones)
-    - Added issues 14 - 16 and related spec language.
-    - Fixed some spelling errors.
-    - Added language describing the meaningful return values for
-      vkAcquireNextImageKHR and vkQueuePresentKHR.
-
-  * Revision 16, 2015-06-02 (James Jones)
-    - Added issues 17 and 18, as well as related spec language.
-    - Removed some erroneous text added by mistake in the last update.
-
-  * Revision 17, 2015-06-15 (Ian Elliott)
-    - Changed special value from "-1" to "0" so that the data types can be
-      unsigned.
-
-  * Revision 18, 2015-06-15 (Ian Elliott)
-    - Clarified the values of VkSurfacePropertiesKHR::minImageCount and the
-      timeout parameter of the vkAcquireNextImageKHR function.
-
-  * Revision 19, 2015-06-17 (James Jones)
-    - Misc.
-      cleanup.
-      Removed resolved inline issues and fixed typos.
-    - Fixed clarification of VkSurfacePropertiesKHR::minImageCount made in
-      version 18.
-    - Added a brief "Image Ownership" definition to the list of terms used
-      in the spec.
-
-  * Revision 20, 2015-06-17 (James Jones)
-    - Updated enum-extending values using new convention.
-
-  * Revision 21, 2015-06-17 (James Jones)
-    - Added language describing how to use
-      VK_IMAGE_LAYOUT_PRESENT_SOURCE_KHR.
-    - Cleaned up an XXX comment regarding the description of which queues
-      vkQueuePresentKHR can be used on.
-
-  * Revision 22, 2015-06-17 (James Jones)
-    - Rebased on Vulkan API version 126.
-
-  * Revision 23, 2015-06-18 (James Jones)
-    - Updated language for issue 12 to read as a proposed resolution.
-    - Marked issues 11, 12, 13, 16, and 17 resolved.
-    - Temporarily added links to the relevant bugs under the remaining
-      unresolved issues.
-    - Added issues 19 and 20 as well as proposed resolutions.
-
-  * Revision 24, 2015-06-19 (Ian Elliott)
-    - Changed special value for VkSurfacePropertiesKHR::currentExtent back
-      to "`-1`" from "`0`".
-      This value will never need to be unsigned, and "`0`" is actually a
-      legal value.
-
-  * Revision 25, 2015-06-23 (Ian Elliott)
-    - Examples now show use of function pointers for extension functions.
-    - Eliminated extraneous whitespace.
-
-  * Revision 26, 2015-06-25 (Ian Elliott)
-    - Resolved Issues 9 & 10 per KHR TSG meeting.
-
-  * Revision 27, 2015-06-25 (James Jones)
-    - Added oldSwapchain member to VkSwapchainCreateInfoKHR.
-
-  * Revision 28, 2015-06-25 (James Jones)
-    - Added the "`inherit`" bits to the rotation and mirroring flags and the
-      associated issue 21.
-
-  * Revision 29, 2015-06-25 (James Jones)
-    - Added the "`clipped`" flag to VkSwapchainCreateInfoKHR, and the
-      associated issue 22.
-    - Specified that presenting an image does not modify it.
-
-  * Revision 30, 2015-06-25 (James Jones)
-    - Added language to the spec that clarifies the behavior of
-      vkCreateSwapchainKHR() when the oldSwapchain field of
-      VkSwapchainCreateInfoKHR is not NULL.
-
-  * Revision 31, 2015-06-26 (Ian Elliott)
-    - Example of new VkSwapchainCreateInfoKHR members, "`oldSwapchain`" and
-      "`clipped`".
-    - Example of using VkSurfacePropertiesKHR::{min|max}ImageCount to set
-      VkSwapchainCreateInfoKHR::minImageCount.
-    - Rename vkGetSurfaceInfoKHR()'s 4th parameter to "`pDataSize`", for
-      consistency with other functions.
-    - Add macro with C-string name of extension (just to header file).
-
-  * Revision 32, 2015-06-26 (James Jones)
-    - Minor adjustments to the language describing the behavior of
-      "`oldSwapchain`"
-    - Fixed the version date on my previous two updates.
-
-  * Revision 33, 2015-06-26 (Jesse Hall)
-    - Add usage flags to VkSwapchainCreateInfoKHR
-
-  * Revision 34, 2015-06-26 (Ian Elliott)
-    - Rename vkQueuePresentKHR()'s 2nd parameter to "`pPresentInfo`", for
-      consistency with other functions.
-
-  * Revision 35, 2015-06-26 (Jason Ekstrand)
-    - Merged the VkRotationFlagBitsKHR and VkMirrorFlagBitsKHR enums into a
-      single VkSurfaceTransformFlagBitsKHR enum.
-
-  * Revision 36, 2015-06-26 (Jason Ekstrand)
-    - Added a VkSurfaceTransformKHR enum that is not a bitmask.
-      Each value in VkSurfaceTransformKHR corresponds directly to one of the
-      bits in VkSurfaceTransformFlagBitsKHR so transforming from one to the
-      other is easy.
-      Having a separate enum means that currentTransform and preTransform
-      are now unambiguous by definition.
-
-  * Revision 37, 2015-06-29 (Ian Elliott)
-    - Corrected one of the signatures of vkAcquireNextImageKHR, which had
-      the last two parameters switched from what it is elsewhere in the
-      specification and header files.
-
-  * Revision 38, 2015-06-30 (Ian Elliott)
-    - Corrected a typo in description of the vkGetSwapchainInfoKHR()
-      function.
-    - Corrected a typo in header file comment for VkPresentInfoKHR::sType.
-
-  * Revision 39, 2015-07-07 (Daniel Rakos)
-    - Added error section describing when each error is expected to be
-      reported.
-    - Replaced bool32_t with VkBool32.
-
-  * Revision 40, 2015-07-10 (Ian Elliott)
-    - Updated to work with version 138 of the `vulkan.h` header.
-      This includes declaring the VkSwapchainKHR type using the new
-      VK_DEFINE_NONDISP_HANDLE macro, and no longer extending VkObjectType
-      (which was eliminated).
-
-  * Revision 41 2015-07-09 (Mathias Heyer)
-    - Added color space language.
-
-  * Revision 42, 2015-07-10 (Daniel Rakos)
-    - Updated query mechanism to reflect the convention changes done in the
-      core spec.
-    - Removed "`queue`" from the name of
-      VK_STRUCTURE_TYPE_QUEUE_PRESENT_INFO_KHR to be consistent with the
-      established naming convention.
-    - Removed reference to the no longer existing VkObjectType enum.
-
-  * Revision 43, 2015-07-17 (Daniel Rakos)
-    - Added support for concurrent sharing of swapchain images across queue
-      families.
-    - Updated sample code based on recent changes
-
-  * Revision 44, 2015-07-27 (Ian Elliott)
-    - Noted that support for VK_PRESENT_MODE_FIFO_KHR is required.
-      That is ICDs may optionally support IMMEDIATE and MAILBOX, but must
-      support FIFO.
-
-  * Revision 45, 2015-08-07 (Ian Elliott)
-    - Corrected a typo in spec file (type and variable name had wrong case
-      for the imageColorSpace member of the VkSwapchainCreateInfoKHR
-      struct).
-    - Corrected a typo in header file (last parameter in
-      PFN_vkGetSurfacePropertiesKHR was missing "`KHR`" at the end of type:
-      VkSurfacePropertiesKHR).
-
-  * Revision 46, 2015-08-20 (Ian Elliott)
-    - Renamed this extension and all of its enumerations, types, functions,
-      etc.
-      This makes it compliant with the proposed standard for Vulkan
-      extensions.
-    - Switched from "`revision`" to "`version`", including use of the
-      VK_MAKE_VERSION macro in the header file.
-    - Made improvements to several descriptions.
-    - Changed the status of several issues from PROPOSED to RESOLVED,
-      leaving no unresolved issues.
-    - Resolved several TODOs, did miscellaneous cleanup, etc.
-
-  * Revision 47, 2015-08-20 (Ian Elliott--porting a 2015-07-29 change from
-    James Jones)
-    - Moved the surface transform enums to VK_WSI_swapchain so they could be
-      reused by VK_WSI_display.
-
-  * Revision 48, 2015-09-01 (James Jones)
-    - Various minor cleanups.
-
-  * Revision 49, 2015-09-01 (James Jones)
-    - Restore single-field revision number.
-
-  * Revision 50, 2015-09-01 (James Jones)
-    - Update Example #4 to include code that illustrates how to use the
-      oldSwapchain field.
-
-  * Revision 51, 2015-09-01 (James Jones)
-    - Fix example code compilation errors.
-
-  * Revision 52, 2015-09-08 (Matthaeus G. Chajdas)
-    - Corrected a typo.
-
-  * Revision 53, 2015-09-10 (Alon Or-bach)
-    - Removed underscore from SWAP_CHAIN left in
-      VK_STRUCTURE_TYPE_SWAPCHAIN_CREATE_INFO_KHR.
-
-  * Revision 54, 2015-09-11 (Jesse Hall)
-    - Described the execution and memory coherence requirements for image
-      transitions to and from VK_IMAGE_LAYOUT_PRESENT_SOURCE_KHR.
-
-  * Revision 55, 2015-09-11 (Ray Smith)
-    - Added errors for destroying and binding memory to presentable images
-
-  * Revision 56, 2015-09-18 (James Jones)
-    - Added fence argument to vkAcquireNextImageKHR
-    - Added example of how to meter a host thread based on presentation
-      rate.
-
-  * Revision 57, 2015-09-26 (Jesse Hall)
-    - Replace VkSurfaceDescriptionKHR with VkSurfaceKHR.
-    - Added issue 25 with agreed resolution.
-
-  * Revision 58, 2015-09-28 (Jesse Hall)
-    - Renamed from VK_EXT_KHR_device_swapchain to VK_EXT_KHR_swapchain.
-
-  * Revision 59, 2015-09-29 (Ian Elliott)
-    - Changed vkDestroySwapchainKHR() to return void.
-
-  * Revision 60, 2015-10-01 (Jeff Vigil)
-    - Added error result VK_ERROR_SURFACE_LOST_KHR.
-
-  * Revision 61, 2015-10-05 (Jason Ekstrand)
-    - Added the VkCompositeAlpha enum and corresponding structure fields.
-
-  * Revision 62, 2015-10-12 (Daniel Rakos)
-    - Added VK_PRESENT_MODE_FIFO_RELAXED_KHR.
-
-  * Revision 63, 2015-10-15 (Daniel Rakos)
-    - Moved surface capability queries to VK_EXT_KHR_surface.
-
-  * Revision 64, 2015-10-26 (Ian Elliott)
-    - Renamed from VK_EXT_KHR_swapchain to VK_KHR_swapchain.
-
-  * Revision 65, 2015-10-28 (Ian Elliott)
-    - Added optional pResult member to VkPresentInfoKHR, so that
-      per-swapchain results can be obtained from vkQueuePresentKHR().
-
-  * Revision 66, 2015-11-03 (Daniel Rakos)
-    - Added allocation callbacks to create and destroy functions.
-    - Updated resource transition language.
-    - Updated sample code.
-
-  * Revision 67, 2015-11-10 (Jesse Hall)
-    - Add reserved flags bitmask to VkSwapchainCreateInfoKHR.
-    - Modify naming and member ordering to match API style conventions, and
-      so the VkSwapchainCreateInfoKHR image property members mirror
-      corresponding VkImageCreateInfo members but with an 'image' prefix.
-    - Make VkPresentInfoKHR::pResults non-const; it is an output array
-      parameter.
-    - Make pPresentInfo parameter to vkQueuePresentKHR const.
-
-  * Revision 68, 2016-04-05 (Ian Elliott)
-    - Moved the "`validity`" include for vkAcquireNextImage to be in its
-      proper place, after the prototype and list of parameters.
-    - Clarified language about presentable images, including how they are
-      acquired, when applications can and cannot use them, etc.
-      As part of this, removed language about "`ownership`" of presentable
-      images, and replaced it with more-consistent language about
-      presentable images being "`acquired`" by the application.
-
-  * 2016-08-23 (Ian Elliott)
-    - Update the example code, to use the final API command names, to not
-      have so many characters per line, and to split out a new example to
-      show how to obtain function pointers.
-      This code is more similar to the LunarG "`cube`" demo program.
-
-  * 2016-08-25 (Ian Elliott)
-    - A note was added at the beginning of the example code, stating that it
-      will be removed from future versions of the appendix.
-
-  * Revision 69, 2017-09-07 (Tobias Hector)
-    - Added interactions with Vulkan 1.1
-
-  * Revision 70, 2017-10-06 (Ian Elliott)
-    - Corrected interactions with Vulkan 1.1
diff --git a/registry/vulkan/appendices/VK_KHR_swapchain_mutable_format.txt b/registry/vulkan/appendices/VK_KHR_swapchain_mutable_format.txt
deleted file mode 100644
index 338bebe..0000000
--- a/registry/vulkan/appendices/VK_KHR_swapchain_mutable_format.txt
+++ /dev/null
@@ -1,63 +0,0 @@
-// Copyright 2014-2021 The Khronos Group, Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-include::{generated}/meta/{refprefix}VK_KHR_swapchain_mutable_format.txt[]
-
-=== Other Extension Metadata
-
-*Last Modified Date*::
-    2018-03-28
-*IP Status*::
-    No known IP claims.
-*Contributors*::
-  - Jason Ekstrand, Intel
-  - Jan-Harald Fredriksen, ARM
-  - Jesse Hall, Google
-  - Daniel Rakos, AMD
-  - Ray Smith, ARM
-
-=== Description
-
-This extension allows processing of swapchain images as different formats to
-that used by the window system, which is particularly useful for switching
-between sRGB and linear RGB formats.
-
-It adds a new swapchain creation flag that enables creating image views from
-presentable images with a different format than the one used to create the
-swapchain.
-
-include::{generated}/interfaces/VK_KHR_swapchain_mutable_format.txt[]
-
-=== Issues
-
-1) Are there any new capabilities needed?
-
-*RESOLVED*: No.
-It is expected that all implementations exposing this extension support
-swapchain image format mutability.
-
-2) Do we need a separate etext:VK_SWAPCHAIN_CREATE_EXTENDED_USAGE_BIT_KHR?
-
-*RESOLVED*: No.
-This extension requires `VK_KHR_maintenance2` and presentable images of
-swapchains created with ename:VK_SWAPCHAIN_CREATE_MUTABLE_FORMAT_BIT_KHR are
-created internally in a way equivalent to specifying both
-ename:VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT and
-ename:VK_IMAGE_CREATE_EXTENDED_USAGE_BIT_KHR.
-
-3) Do we need a separate structure to allow specifying an image format list
-for swapchains?
-
-*RESOLVED*: No.
-We simply use the same slink:VkImageFormatListCreateInfoKHR structure
-introduced by `VK_KHR_image_format_list`.
-The structure is required to be included in the pname:pNext chain of
-slink:VkSwapchainCreateInfoKHR for swapchains created with
-ename:VK_SWAPCHAIN_CREATE_MUTABLE_FORMAT_BIT_KHR.
-
-
-=== Version History
-
- * Revision 1, 2018-03-28 (Daniel Rakos)
-   - Internal revisions.
diff --git a/registry/vulkan/appendices/VK_KHR_synchronization2.txt b/registry/vulkan/appendices/VK_KHR_synchronization2.txt
deleted file mode 100644
index 1b3282c..0000000
--- a/registry/vulkan/appendices/VK_KHR_synchronization2.txt
+++ /dev/null
@@ -1,96 +0,0 @@
-// Copyright (c) 2020 Khronos Group.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-include::{generated}/meta/{refprefix}VK_KHR_synchronization2.txt[]
-
-=== Other Extension Metadata
-
-*Last Modified Date*::
-    2020-12-03
-*Interactions and External Dependencies*::
-  - Interacts with `apiext:VK_KHR_create_renderpass2`
-*Contributors*::
-  - Tobias Hector
-
-
-=== Description
-
-This extension modifies the original core synchronization APIs to simplify
-the interface and improve usability of these APIs.
-It also adds new pipeline stage and access flag types that extend into the
-64-bit range, as we have run out within the 32-bit range.
-The new flags are identical to the old values within the 32-bit range, with
-new stages and bits beyond that.
-
-Pipeline stages and access flags are now specified together in memory
-barrier structures, making the connection between the two more obvious.
-Additionally, scoping the pipeline stages into the barrier structs allows
-the use of the etext:MEMORY_READ and etext:MEMORY_WRITE flags without
-sacrificing precision.
-The per-stage access flags should be used to disambiguate specific accesses
-in a given stage or set of stages - for instance, between uniform reads and
-sampling operations.
-
-Layout transitions have been simplified as well; rather than requiring a
-different set of layouts for depth/stencil/color attachments, there are
-generic ename:VK_IMAGE_LAYOUT_ATTACHMENT_OPTIMAL_KHR and
-ename:VK_IMAGE_LAYOUT_READ_ONLY_OPTIMAL_KHR layouts which are contextually
-applied based on the image format.
-For example, for a depth format image,
-ename:VK_IMAGE_LAYOUT_READ_ONLY_OPTIMAL_KHR is equivalent to
-ename:VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL_KHR.
-ename:VK_IMAGE_LAYOUT_READ_ONLY_OPTIMAL_KHR also functionally replaces
-ename:VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL.
-
-Events are now more efficient, because they include memory dependency
-information when you set them on the device.
-Previously, this information was only known when waiting on an event, so the
-dependencies could not be satisfied until the wait occurred.
-That sometimes meant stalling the pipeline when the wait occurred.
-The new API provides enough information for implementations to satisfy these
-dependencies in parallel with other tasks.
-
-Queue submission has been changed to wrap command buffers and semaphores in
-extensible structures, which incorporate changes from Vulkan 1.1,
-`apiext:VK_KHR_device_group`, and `apiext:VK_KHR_timeline_semaphore`.
-This also adds a pipeline stage to the semaphore signal operation, mirroring
-the existing pipeline stage specification for wait operations.
-
-Other miscellaneous changes include:
-
-  * Events can now be specified as interacting only with the device,
-    allowing more efficient access to the underlying object.
-  * Image memory barriers that do not perform an image layout transition can
-    be specified by setting pname:oldLayout equal to pname:newLayout.
-  ** E.g. the old and new layout can both be set to
-     ename:VK_IMAGE_LAYOUT_UNDEFINED, without discarding data in the image.
-  * Queue family ownership transfer parameters are simplified in some cases.
-  * Where two synchronization commands need to be matched up (queue transfer
-    operations, events), the dependency information specified in each place
-    must now match completely for consistency.
-  * Extensions with commands or functions with a tlink:VkPipelineStageFlags
-    or elink:VkPipelineStageFlagBits parameter have had those APIs replaced
-    with equivalents using tlink:VkPipelineStageFlags2KHR.
-  * The new event and barrier interfaces are now more extensible for future
-    changes.
-  * Relevant pipeline stage masks can now be specified as empty with the new
-    ename:VK_PIPELINE_STAGE_NONE_KHR and ename:VK_PIPELINE_STAGE_2_NONE_KHR
-    values.
-ifdef::VK_VERSION_1_2,VK_KHR_create_renderpass2[]
-  * slink:VkMemoryBarrier2KHR can be chained to slink:VkSubpassDependency2,
-    overriding the original 32-bit stage and access masks.
-endif::VK_VERSION_1_2,VK_KHR_create_renderpass2[]
-
-include::{generated}/interfaces/VK_KHR_synchronization2.txt[]
-
-=== Examples
-
-See
-https://github.com/KhronosGroup/Vulkan-Docs/wiki/Synchronization-Examples
-
-
-=== Version History
-
- * Revision 1, 2020-12-03 (Tobias Hector)
-   - Internal revisions
diff --git a/registry/vulkan/appendices/VK_KHR_timeline_semaphore.txt b/registry/vulkan/appendices/VK_KHR_timeline_semaphore.txt
deleted file mode 100644
index dfdaa64..0000000
--- a/registry/vulkan/appendices/VK_KHR_timeline_semaphore.txt
+++ /dev/null
@@ -1,150 +0,0 @@
-// Copyright 2016-2021 The Khronos Group, Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-include::{generated}/meta/{refprefix}VK_KHR_timeline_semaphore.txt[]
-
-=== Other Extension Metadata
-
-*Last Modified Date*::
-    2019-06-12
-*IP Status*::
-    No known IP claims.
-*Interactions and External Dependencies*::
-  - This extension interacts with
-    `apiext:VK_KHR_external_semaphore_capabilities`
-  - This extension interacts with `apiext:VK_KHR_external_semaphore`
-  - This extension interacts with `apiext:VK_KHR_external_semaphore_win32`
-  - Promoted to Vulkan 1.2 Core
-*Contributors*::
-  - Jeff Bolz, NVIDIA
-  - Yuriy O'Donnell, Epic Games
-  - Jason Ekstrand, Intel
-  - Jesse Hall, Google
-  - James Jones, NVIDIA
-  - Jeff Juliano, NVIDIA
-  - Daniel Rakos, AMD
-  - Ray Smith, Arm
-
-=== Description
-
-This extension introduces a new type of semaphore that has an integer
-payload identifying a point in a timeline.
-Such timeline semaphores support the following operations:
-
-  * Host query - A host operation that allows querying the payload of the
-    timeline semaphore.
-  * Host wait - A host operation that allows a blocking wait for a timeline
-    semaphore to reach a specified value.
-  * Host signal - A host operation that allows advancing the timeline
-    semaphore to a specified value.
-  * Device wait - A device operation that allows waiting for a timeline
-    semaphore to reach a specified value.
-  * Device signal - A device operation that allows advancing the timeline
-    semaphore to a specified value.
-
-=== Promotion to Vulkan 1.2
-
-All functionality in this extension is included in core Vulkan 1.2, with the
-KHR suffix omitted.
-The original type, enum and command names are still available as aliases of
-the core functionality.
-
-include::{generated}/interfaces/VK_KHR_timeline_semaphore.txt[]
-
-=== Issues
-
-1) Do we need a new object type for this?
-
-*RESOLVED*: No, we just introduce a new type of semaphore object, as
-`VK_KHR_external_semaphore_win32` already uses semaphores as the destination
-for importing D3D12 fence objects, which are semantically close/identical to
-the proposed synchronization primitive.
-
-2) What type of payload the new synchronization primitive has?
-
-*RESOLVED*: A 64-bit unsigned integer that can only be set to strictly
-increasing values by signal operations and is not changed by wait
-operations.
-
-3) Does the new synchronization primitive have the same signal-before-wait
-requirement as the existing semaphores do?
-
-*RESOLVED*: No.
-Timeline semaphores support signaling and waiting entirely asynchronously.
-It is the responsibility of the client to avoid deadlock.
-
-4) Does the new synchronization primitive allow resetting its payload?
-
-*RESOLVED*: No, allowing the payload value to "`go backwards`" is
-problematic.
-Applications looking for reset behavior should create a new instance of the
-sychronization primitive instead.
-
-5) How do we enable host waits on the synchronization primitive?
-
-*RESOLVED*: Both a non-blocking query of the current payload value of the
-synchronization primitive, and a blocking wait operation are provided.
-
-6) How do we enable device waits and signals on the synchronization
-primitive?
-
-*RESOLVED*: Similar to `VK_KHR_external_semaphore_win32`, this extension
-introduces a new structure that can be chained to slink:VkSubmitInfo to
-specify the values signaled semaphores should be set to, and the values
-waited semaphores need to reach.
-
-7) Can the new synchronization primitive be used to synchronize presentation
-and swapchain image acquisition operations?
-
-*RESOLVED*: Some implementations may have problems with supporting that
-directly, thus it is not allowed in this extension.
-
-8) Do we want to support external sharing of the new synchronization
-primitive type?
-
-*RESOLVED*: Yes.
-Timeline semaphore specific external sharing capabilities can be queried
-using flink:vkGetPhysicalDeviceExternalSemaphoreProperties by chaining the
-new slink:VkSemaphoreTypeCreateInfoKHR structure to its
-pname:pExternalSemaphoreInfo structure.
-This allows having a different set of external semaphore handle types
-supported for timeline semaphores vs binary semaphores.
-
-9) Do we need to add a host signal operation for the new synchronization
-primitive type?
-
-*RESOLVED*: Yes.
-This helps in situations where one host thread submits a workload but
-another host thread has the information on when the workload is ready to be
-executed.
-
-10) How should the new synchronization primitive interact with the ordering
-requirements of the original sname:VkSemaphore?
-
-*RESOLVED*: Prior to calling any command which may: cause a wait operation
-on a binary semaphore, the client must: ensure that the semaphore signal
-operation that has been submitted for execution and any semaphore signal
-operations on which it depends (if any) must: have also been submitted for
-execution.
-
-11) Should we have separate feature bits for different sub-features of
-timeline semaphores?
-
-*RESOLVED*: No.
-The only feature which cannot be supported universally is timeline semaphore
-import/export.
-For import/export, the client is already required to query available
-external handle types via
-flink:vkGetPhysicalDeviceExternalSemaphoreProperties and provide the
-semaphore type by adding a slink:VkSemaphoreTypeCreateInfoKHR structure to
-the pname:pNext chain of slink:VkPhysicalDeviceExternalSemaphoreInfo so no
-new feature bit is required.
-
-=== Version History
-
- * Revision 1, 2018-05-10 (Jason Ekstrand)
-   - Initial version
-
- * Revision 2, 2019-06-12 (Jason Ekstrand)
-   - Added an initialValue parameter to timeline semaphore creation
diff --git a/registry/vulkan/appendices/VK_KHR_uniform_buffer_standard_layout.txt b/registry/vulkan/appendices/VK_KHR_uniform_buffer_standard_layout.txt
deleted file mode 100644
index d5bb36f..0000000
--- a/registry/vulkan/appendices/VK_KHR_uniform_buffer_standard_layout.txt
+++ /dev/null
@@ -1,43 +0,0 @@
-// Copyright 2017-2021 The Khronos Group, Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-include::{generated}/meta/{refprefix}VK_KHR_uniform_buffer_standard_layout.txt[]
-
-=== Other Extension Metadata
-
-*Last Modified Date*::
-    2019-01-25
-*Interactions and External Dependencies*::
-  - Promoted to Vulkan 1.2 Core
-*Contributors*::
-  - Graeme Leese, Broadcom
-  - Jeff Bolz, NVIDIA
-  - Tobias Hector, AMD
-  - Jason Ekstrand, Intel
-  - Neil Henning, AMD
-
-=== Description
-
-This extension enables tighter array and struct packing to be used with
-uniform buffers.
-
-It modifies the alignment rules for uniform buffers, allowing for tighter
-packing of arrays and structures.
-This allows, for example, the std430 layout, as defined in
-https://www.khronos.org/registry/OpenGL/specs/gl/GLSLangSpec.4.60.pdf[GLSL]
-to be supported in uniform buffers.
-
-=== Promotion to Vulkan 1.2
-
-All functionality in this extension is included in core Vulkan 1.2, with the
-KHR suffix omitted.
-The original type, enum and command names are still available as aliases of
-the core functionality.
-
-include::{generated}/interfaces/VK_KHR_uniform_buffer_standard_layout.txt[]
-
-=== Version History
-
-  * Revision 1, 2019-01-25 (Graeme Leese)
-    - Initial draft
diff --git a/registry/vulkan/appendices/VK_KHR_variable_pointers.txt b/registry/vulkan/appendices/VK_KHR_variable_pointers.txt
deleted file mode 100644
index a21be10..0000000
--- a/registry/vulkan/appendices/VK_KHR_variable_pointers.txt
+++ /dev/null
@@ -1,83 +0,0 @@
-// Copyright 2016-2021 The Khronos Group, Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-include::{generated}/meta/{refprefix}VK_KHR_variable_pointers.txt[]
-
-=== Other Extension Metadata
-
-*Last Modified Date*::
-    2017-09-05
-*IP Status*::
-    No known IP claims.
-*Interactions and External Dependencies*::
-  - This extension requires
-    {spirv}/KHR/SPV_KHR_variable_pointers.html[`SPV_KHR_variable_pointers`]
-  - Promoted to Vulkan 1.1 Core
-*Contributors*::
-  - John Kessenich, Google
-  - Neil Henning, Codeplay
-  - David Neto, Google
-  - Daniel Koch, Nvidia
-  - Graeme Leese, Broadcom
-  - Weifeng Zhang, Qualcomm
-  - Stephen Clarke, Imagination Technologies
-  - Jason Ekstrand, Intel
-  - Jesse Hall, Google
-
-=== Description
-
-The `VK_KHR_variable_pointers` extension allows implementations to indicate
-their level of support for the `SPV_KHR_variable_pointers` SPIR-V extension.
-The SPIR-V extension allows shader modules to use invocation-private
-pointers into uniform and/or storage buffers, where the pointer values can
-be dynamic and non-uniform.
-
-The `SPV_KHR_variable_pointers` extension introduces two capabilities.
-The first, code:VariablePointersStorageBuffer, must: be supported by all
-implementations of this extension.
-The second, code:VariablePointers, is optional.
-
-=== Promotion to Vulkan 1.1
-
-All functionality in this extension is included in core Vulkan 1.1, with the
-KHR suffix omitted, however support for the
-<<features-variablePointersStorageBuffer,
-pname:variablePointersStorageBuffer>> feature is made optional.
-The original type, enum and command names are still available as aliases of
-the core functionality.
-
-include::{generated}/interfaces/VK_KHR_variable_pointers.txt[]
-
-=== New SPIR-V Capabilities
-
-  * <<spirvenv-capabilities-table-VariablePointers,VariablePointers>>
-  * <<spirvenv-capabilities-table-VariablePointersStorageBuffer,VariablePointersStorageBuffer>>
-
-=== Issues
-
-1) Do we need an optional property for the SPIR-V
-code:VariablePointersStorageBuffer capability or should it be mandatory when
-this extension is advertised?
-
-*RESOLVED*: Add it as a distinct feature, but make support mandatory.
-Adding it as a feature makes the extension easier to include in a future
-core API version.
-In the extension, the feature is mandatory, so that presence of the
-extension guarantees some functionality.
-When included in a core API version, the feature would be optional.
-
-2) Can support for these capabilities vary between shader stages?
-
-*RESOLVED*: No, if the capability is supported in any stage it must be
-supported in all stages.
-
-3) Should the capabilities be features or limits?
-
-*RESOLVED*: Features, primarily for consistency with other similar
-extensions.
-
-=== Version History
-
-  * Revision 1, 2017-03-14 (Jesse Hall and John Kessenich)
-    - Internal revisions
diff --git a/registry/vulkan/appendices/VK_KHR_video_decode_queue.txt b/registry/vulkan/appendices/VK_KHR_video_decode_queue.txt
deleted file mode 100644
index 2efad80..0000000
--- a/registry/vulkan/appendices/VK_KHR_video_decode_queue.txt
+++ /dev/null
@@ -1,34 +0,0 @@
-// Copyright 2018-2021 The Khronos Group Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-include::{generated}/meta/{refprefix}VK_KHR_video_decode_queue.txt[]
-
-=== Other Extension Metadata
-
-*Last Modified Date*::
-    2021-09-30
-*IP Status*::
-    No known IP claims.
-*Contributors*::
-  - Jake Beju, AMD
-  - Olivier Lapicque, NVIDIA
-  - Peter Fang, AMD
-  - Piers Daniell, NVIDIA
-  - Srinath Kumarapuram, NVIDIA
-  - Tony Zlatinski, NVIDIA
-
-include::{generated}/interfaces/VK_KHR_video_decode_queue.txt[]
-
-=== Version History
-
- * Revision 1, 2018-6-11 (Peter Fang)
-   - Initial draft
- * Revision 1.5, Nov 09 2018 (Tony Zlatinski)
-   - API Updates
- * Revision 1.6, Jan 08 2020 (Tony Zlatinski)
-   - API unify with the video_encode_queue spec
- * Revision 1.7, March 29 2021 (Tony Zlatinski)
-   - Spec and API updates.
- * Revision 2, September 30 2021 (Jon Leech)
-   - Add interaction with `apiext:VK_KHR_format_feature_flags2` to `vk.xml`
diff --git a/registry/vulkan/appendices/VK_KHR_video_encode_queue.txt b/registry/vulkan/appendices/VK_KHR_video_encode_queue.txt
deleted file mode 100644
index 424ca83..0000000
--- a/registry/vulkan/appendices/VK_KHR_video_encode_queue.txt
+++ /dev/null
@@ -1,40 +0,0 @@
-// Copyright 2018-2021 The Khronos Group Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-include::{generated}/meta/{refprefix}VK_KHR_video_encode_queue.txt[]
-
-=== Other Extension Metadata
-
-*Last Modified Date*::
-    2021-09-30
-*IP Status*::
-    No known IP claims.
-*Contributors*::
-  - Ahmed Abdelkhalek, AMD
-  - Damien Kessler, NVIDIA
-  - Daniel Rakos, AMD
-  - George Hao, AMD
-  - Jake Beju, AMD
-  - Peter Fang, AMD
-  - Piers Daniell, NVIDIA
-  - Srinath Kumarapuram, NVIDIA
-  - Thomas J. Meier, NVIDIA
-  - Tony Zlatinski, NVIDIA
-  - Yang Liu, AMD
-
-include::{generated}/interfaces/VK_KHR_video_encode_queue.txt[]
-
-=== Version History
-
-  * Revision 1, 2018-07-23 (Ahmed Abdelkhalek)
-    - Initial draft
-  * Revision 1.1, 10/29/2019 (Tony Zlatinski)
-    - Updated the reserved spec tokens and renamed VkVideoEncoderKHR to
-      VkVideoSessionKHR
-  * Revision 1.6, Jan 08 2020 (Tony Zlatinski)
-    - API unify with the video_decode_queue spec
-  * Revision 2, March 29 2021 (Tony Zlatinski)
-    - Spec and API updates.
-  * Revision 3, 2021-09-30 (Jon Leech)
-    - Add interaction with `apiext:VK_KHR_format_feature_flags2` to `vk.xml`
diff --git a/registry/vulkan/appendices/VK_KHR_video_queue.txt b/registry/vulkan/appendices/VK_KHR_video_queue.txt
deleted file mode 100755
index da78bd6..0000000
--- a/registry/vulkan/appendices/VK_KHR_video_queue.txt
+++ /dev/null
@@ -1,36 +0,0 @@
-// Copyright (c) 2018-2021 The Khronos Group Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-include::{generated}/meta/{refprefix}VK_KHR_video_queue.txt[]
-
-=== Other Extension Metadata
-
-*Last Modified Date*::
-    2021-03-29
-*IP Status*::
-    No known IP claims.
-*Contributors*::
-  - Ahmed Abdelkhalek, AMD
-  - George Hao, AMD
-  - Jake Beju, AMD
-  - Piers Daniell, NVIDIA
-  - Srinath Kumarapuram, NVIDIA
-  - Tobias Hector, AMD
-  - Tony Zlatinski, NVIDIA
-
-include::{generated}/interfaces/VK_KHR_video_queue.txt[]
-
-=== Version History
-
-  * Revision 0.1, 2019-11-21 (Tony Zlatinski)
-    - Initial draft
-  * Revision 0.2, 2019-11-27 (Tony Zlatinski)
-    - Make vulkan video core common between decode and encode
-  * Revision 1, March 29 2021 (Tony Zlatinski)
-    - Spec and API updates.
-  * Revision 2, August 1 2021 (Srinath Kumarapuram)
-   - Rename `VkVideoCapabilitiesFlagBitsKHR` to
-     `VkVideoCapabilityFlagBitsKHR` (along with the names of enumerants it
-     defines) and `VkVideoCapabilitiesFlagsKHR` to
-     `VkVideoCapabilityFlagsKHR`, following Vulkan naming conventions.
diff --git a/registry/vulkan/appendices/VK_KHR_vulkan_memory_model.txt b/registry/vulkan/appendices/VK_KHR_vulkan_memory_model.txt
deleted file mode 100644
index 7916099..0000000
--- a/registry/vulkan/appendices/VK_KHR_vulkan_memory_model.txt
+++ /dev/null
@@ -1,62 +0,0 @@
-// Copyright 2017-2021 The Khronos Group, Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-include::{generated}/meta/{refprefix}VK_KHR_vulkan_memory_model.txt[]
-
-=== Other Extension Metadata
-
-*Last Modified Date*::
-    2018-12-10
-*IP Status*::
-    No known IP claims.
-*Interactions and External Dependencies*::
-  - Promoted to Vulkan 1.2 Core
-  - This extension requires
-    {spirv}/KHR/SPV_KHR_vulkan_memory_model.html[`SPV_KHR_vulkan_memory_model`]
-*Contributors*::
-  - Jeff Bolz, NVIDIA
-  - Alan Baker, Google
-  - Tobias Hector, AMD
-  - David Neto, Google
-  - Robert Simpson, Qualcomm Technologies, Inc.
-  - Brian Sumner, AMD
-
-=== Description
-
-The `VK_KHR_vulkan_memory_model` extension allows use of the
-<<memory-model,Vulkan Memory Model>>, which formally defines how to
-synchronize memory accesses to the same memory locations performed by
-multiple shader invocations.
-
-[NOTE]
-.Note
-====
-Version 3 of the spec added a member
-(pname:vulkanMemoryModelAvailabilityVisibilityChains) to
-slink:VkPhysicalDeviceVulkanMemoryModelFeaturesKHR, which is an incompatible
-change from version 2.
-====
-
-=== Promotion to Vulkan 1.2
-
-All functionality in this extension is included in core Vulkan 1.2, with the
-KHR suffix omitted.
-However, if Vulkan 1.2 is supported and this extension is not, the
-code:vulkanMemoryModel capability is optional.
-The original type, enum and command names are still available as aliases of
-the core functionality.
-
-include::{generated}/interfaces/VK_KHR_vulkan_memory_model.txt[]
-
-=== New SPIR-V Capabilities
-
-  * <<spirvenv-capabilities-table-VulkanMemoryModel,code:VulkanMemoryModelKHR>>
-
-=== Version History
-
-  * Revision 1, 2018-06-24 (Jeff Bolz)
-    - Initial draft
-  * Revision 3, 2018-12-10 (Jeff Bolz)
-    - Add vulkanMemoryModelAvailabilityVisibilityChains member to the
-      VkPhysicalDeviceVulkanMemoryModelFeaturesKHR structure.
diff --git a/registry/vulkan/appendices/VK_KHR_wayland_surface.txt b/registry/vulkan/appendices/VK_KHR_wayland_surface.txt
deleted file mode 100644
index 0ff529a..0000000
--- a/registry/vulkan/appendices/VK_KHR_wayland_surface.txt
+++ /dev/null
@@ -1,92 +0,0 @@
-// Copyright 2014-2021 The Khronos Group, Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-include::{generated}/meta/{refprefix}VK_KHR_wayland_surface.txt[]
-
-=== Other Extension Metadata
-
-*Last Modified Date*::
-    2015-11-28
-*IP Status*::
-    No known IP claims.
-*Contributors*::
-  - Patrick Doane, Blizzard
-  - Jason Ekstrand, Intel
-  - Ian Elliott, LunarG
-  - Courtney Goeltzenleuchter, LunarG
-  - Jesse Hall, Google
-  - James Jones, NVIDIA
-  - Antoine Labour, Google
-  - Jon Leech, Khronos
-  - David Mao, AMD
-  - Norbert Nopper, Freescale
-  - Alon Or-bach, Samsung
-  - Daniel Rakos, AMD
-  - Graham Sellers, AMD
-  - Ray Smith, ARM
-  - Jeff Vigil, Qualcomm
-  - Chia-I Wu, LunarG
-
-=== Description
-
-The `VK_KHR_wayland_surface` extension is an instance extension.
-It provides a mechanism to create a slink:VkSurfaceKHR object (defined by
-the `apiext:VK_KHR_surface` extension) that refers to a Wayland
-code:wl_surface, as well as a query to determine support for rendering to a
-Wayland compositor.
-
-include::{generated}/interfaces/VK_KHR_wayland_surface.txt[]
-
-=== Issues
-
-1) Does Wayland need a way to query for compatibility between a particular
-physical device and a specific Wayland display? This would be a more general
-query than flink:vkGetPhysicalDeviceSurfaceSupportKHR: if the
-Wayland-specific query returned ename:VK_TRUE for a (slink:VkPhysicalDevice,
-`struct wl_display*`) pair, then the physical device could be assumed to
-support presentation to any slink:VkSurfaceKHR for surfaces on the display.
-
-*RESOLVED*: Yes.
-flink:vkGetPhysicalDeviceWaylandPresentationSupportKHR was added to address
-this issue.
-
-2) Should we require surfaces created with flink:vkCreateWaylandSurfaceKHR
-to support the ename:VK_PRESENT_MODE_MAILBOX_KHR present mode?
-
-*RESOLVED*: Yes.
-Wayland is an inherently mailbox window system and mailbox support is
-required for some Wayland compositor interactions to work as expected.
-While handling these interactions may be possible with
-ename:VK_PRESENT_MODE_FIFO_KHR, it is much more difficult to do without
-deadlock and requiring all Wayland applications to be able to support
-implementations which only support ename:VK_PRESENT_MODE_FIFO_KHR would be
-an onerous restriction on application developers.
-
-=== Version History
-
- * Revision 1, 2015-09-23 (Jesse Hall)
-   - Initial draft, based on the previous contents of VK_EXT_KHR_swapchain
-     (later renamed VK_EXT_KHR_surface).
-
- * Revision 2, 2015-10-02 (James Jones)
-   - Added vkGetPhysicalDeviceWaylandPresentationSupportKHR() to resolve
-     issue #1.
-   - Adjusted wording of issue #1 to match the agreed-upon solution.
-   - Renamed "`window`" parameters to "`surface`" to match Wayland
-     conventions.
-
- * Revision 3, 2015-10-26 (Ian Elliott)
-   - Renamed from VK_EXT_KHR_wayland_surface to VK_KHR_wayland_surface.
-
- * Revision 4, 2015-11-03 (Daniel Rakos)
-   - Added allocation callbacks to vkCreateWaylandSurfaceKHR.
-
- * Revision 5, 2015-11-28 (Daniel Rakos)
-   - Updated the surface create function to take a pCreateInfo structure.
-
- * Revision 6, 2017-02-08 (Jason Ekstrand)
-   - Added the requirement that implementations support
-     ename:VK_PRESENT_MODE_MAILBOX_KHR.
-   - Added wording about interactions between flink:vkQueuePresentKHR and
-     the Wayland requests sent to the compositor.
diff --git a/registry/vulkan/appendices/VK_KHR_win32_keyed_mutex.txt b/registry/vulkan/appendices/VK_KHR_win32_keyed_mutex.txt
deleted file mode 100644
index deddfe7..0000000
--- a/registry/vulkan/appendices/VK_KHR_win32_keyed_mutex.txt
+++ /dev/null
@@ -1,32 +0,0 @@
-// Copyright 2016-2021 The Khronos Group, Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-include::{generated}/meta/{refprefix}VK_KHR_win32_keyed_mutex.txt[]
-
-=== Other Extension Metadata
-
-*Last Modified Date*::
-    2016-10-21
-*IP Status*::
-    No known IP claims.
-*Contributors*::
-  - James Jones, NVIDIA
-  - Jeff Juliano, NVIDIA
-  - Carsten Rohde, NVIDIA
-
-=== Description
-
-Applications that wish to import Direct3D 11 memory objects into the Vulkan
-API may wish to use the native keyed mutex mechanism to synchronize access
-to the memory between Vulkan and Direct3D.
-This extension provides a way for an application to access the keyed mutex
-associated with an imported Vulkan memory object when submitting command
-buffers to a queue.
-
-include::{generated}/interfaces/VK_KHR_win32_keyed_mutex.txt[]
-
-=== Version History
-
-  * Revision 1, 2016-10-21 (James Jones)
-    - Initial revision
diff --git a/registry/vulkan/appendices/VK_KHR_win32_surface.txt b/registry/vulkan/appendices/VK_KHR_win32_surface.txt
deleted file mode 100644
index 5e62473..0000000
--- a/registry/vulkan/appendices/VK_KHR_win32_surface.txt
+++ /dev/null
@@ -1,122 +0,0 @@
-// Copyright 2014-2021 The Khronos Group, Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-include::{generated}/meta/{refprefix}VK_KHR_win32_surface.txt[]
-
-=== Other Extension Metadata
-
-*Last Modified Date*::
-    2017-04-24
-*IP Status*::
-    No known IP claims.
-*Contributors*::
-  - Patrick Doane, Blizzard
-  - Jason Ekstrand, Intel
-  - Ian Elliott, LunarG
-  - Courtney Goeltzenleuchter, LunarG
-  - Jesse Hall, Google
-  - James Jones, NVIDIA
-  - Antoine Labour, Google
-  - Jon Leech, Khronos
-  - David Mao, AMD
-  - Norbert Nopper, Freescale
-  - Alon Or-bach, Samsung
-  - Daniel Rakos, AMD
-  - Graham Sellers, AMD
-  - Ray Smith, ARM
-  - Jeff Vigil, Qualcomm
-  - Chia-I Wu, LunarG
-
-=== Description
-
-The `VK_KHR_win32_surface` extension is an instance extension.
-It provides a mechanism to create a slink:VkSurfaceKHR object (defined by
-the `apiext:VK_KHR_surface` extension) that refers to a Win32 code:HWND, as
-well as a query to determine support for rendering to the windows desktop.
-
-include::{generated}/interfaces/VK_KHR_win32_surface.txt[]
-
-=== Issues
-
-1) Does Win32 need a way to query for compatibility between a particular
-physical device and a specific screen? Compatibility between a physical
-device and a window generally only depends on what screen the window is on.
-However, there is not an obvious way to identify a screen without already
-having a window on the screen.
-
-*RESOLVED*: No.
-While it may be useful, there is not a clear way to do this on Win32.
-However, a method was added to query support for presenting to the windows
-desktop as a whole.
-
-2) If a native window object (code:HWND) is used by one graphics API, and
-then is later used by a different graphics API (one of which is Vulkan), can
-these uses interfere with each other?
-
-*RESOLVED*: Yes.
-
-Uses of a window object by multiple graphics APIs results in undefined:
-behavior.
-Such behavior may succeed when using one Vulkan implementation but fail when
-using a different Vulkan implementation.
-Potential failures include:
-
-  * Creating then destroying a flip presentation model DXGI swapchain on a
-    window object can prevent flink:vkCreateSwapchainKHR from succeeding on
-    the same window object.
-  * Creating then destroying a slink:VkSwapchainKHR on a window object can
-    prevent creation of a bitblt model DXGI swapchain on the same window
-    object.
-  * Creating then destroying a slink:VkSwapchainKHR on a window object can
-    effectively code:SetPixelFormat to a different format than the format
-    chosen by an OpenGL application.
-  * Creating then destroying a slink:VkSwapchainKHR on a window object on
-    one slink:VkPhysicalDevice can prevent flink:vkCreateSwapchainKHR from
-    succeeding on the same window object, but on a different
-    slink:VkPhysicalDevice that is associated with a different Vulkan ICD.
-
-In all cases the problem can be worked around by creating a new window
-object.
-
-Technical details include:
-
-  * Creating a DXGI swapchain over a window object can alter the object for
-    the remainder of its lifetime.
-    The alteration persists even after the DXGI swapchain has been
-    destroyed.
-    This alteration can make it impossible for a conformant Vulkan
-    implementation to create a slink:VkSwapchainKHR over the same window
-    object.
-    Mention of this alteration can be found in the remarks section of the
-    MSDN documentation for code:DXGI_SWAP_EFFECT.
-  * Calling GDI's code:SetPixelFormat (needed by OpenGL's WGL layer) on a
-    window object alters the object for the remainder of its lifetime.
-    The MSDN documentation for code:SetPixelFormat explains that a window
-    object's pixel format can be set only one time.
-  * Creating a slink:VkSwapchainKHR over a window object can alter the
-    object for its remaining lifetime.
-    Either of the above alterations may occur as a side effect of
-    flink:vkCreateSwapchainKHR.
-
-=== Version History
-
- * Revision 1, 2015-09-23 (Jesse Hall)
-   - Initial draft, based on the previous contents of VK_EXT_KHR_swapchain
-     (later renamed VK_EXT_KHR_surface).
-
- * Revision 2, 2015-10-02 (James Jones)
-   - Added presentation support query for win32 desktops.
-
- * Revision 3, 2015-10-26 (Ian Elliott)
-   - Renamed from VK_EXT_KHR_win32_surface to VK_KHR_win32_surface.
-
- * Revision 4, 2015-11-03 (Daniel Rakos)
-   - Added allocation callbacks to vkCreateWin32SurfaceKHR.
-
- * Revision 5, 2015-11-28 (Daniel Rakos)
-   - Updated the surface create function to take a pCreateInfo structure.
-
- * Revision 6, 2017-04-24 (Jeff Juliano)
-   - Add issue 2 addressing reuse of a native window object in a different
-     Graphics API, or by a different Vulkan ICD.
diff --git a/registry/vulkan/appendices/VK_KHR_workgroup_memory_explicit_layout.txt b/registry/vulkan/appendices/VK_KHR_workgroup_memory_explicit_layout.txt
deleted file mode 100644
index f9c3075..0000000
--- a/registry/vulkan/appendices/VK_KHR_workgroup_memory_explicit_layout.txt
+++ /dev/null
@@ -1,54 +0,0 @@
-// Copyright 2016-2021 The Khronos Group, Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-include::{generated}/meta/{refprefix}VK_KHR_workgroup_memory_explicit_layout.txt[]
-
-=== Other Extension Metadata
-
-*Last Modified Date*::
-    2020-06-01
-*IP Status*::
-    No known IP claims.
-*Interactions and External Dependencies*::
- - This extension requires
-   {spirv}/KHR/SPV_KHR_workgroup_memory_explicit_layout.html[`SPV_KHR_workgroup_memory_explicit_layout`]
-*Contributors*::
- - Caio Marcelo de Oliveira Filho, Intel
- - Jeff Bolz, NVIDIA
- - Graeme Leese, Broadcom
- - Jason Ekstrand, Intel
- - Daniel Koch, NVIDIA
-
-=== Description
-
-This extension adds Vulkan support for the
-{spirv}/KHR/SPV_KHR_workgroup_memory_explicit_layout.html[`SPV_KHR_workgroup_memory_explicit_layout`]
-SPIR-V extension, which allows shaders to explicitly define the layout of
-code:Workgroup storage class memory and create aliases between variables
-from that storage class in a compute shader.
-
-The aliasing feature allows different "`views`" on the same data, so the
-shader can bulk copy data from another storage class using one type (e.g. an
-array of large vectors), and then use the data with a more specific type.
-It also enables reducing the amount of workgroup memory consumed by allowing
-the shader to alias data whose lifetimes do not overlap.
-
-The explicit layout support and some form of aliasing is also required for
-layering OpenCL on top of Vulkan.
-
-include::{generated}/interfaces/VK_KHR_workgroup_memory_explicit_layout.txt[]
-
-=== New SPIR-V Capabilities
-
- * <<spirvenv-capabilities-table-WorkgroupMemoryExplicitLayoutKHR,
-   code:WorkgroupMemoryExplicitLayoutKHR>>
- * <<spirvenv-capabilities-table-WorkgroupMemoryExplicitLayout8BitAccessKHR,
-   code:WorkgroupMemoryExplicitLayout8BitAccessKHR>>
- * <<spirvenv-capabilities-table-WorkgroupMemoryExplicitLayout16BitAccessKHR,
-   code:WorkgroupMemoryExplicitLayout16BitAccessKHR>>
-
-=== Version History
-
- * Revision 1, 2020-06-01 (Caio Marcelo de Oliveira Filho)
-   - Initial version
diff --git a/registry/vulkan/appendices/VK_KHR_xcb_surface.txt b/registry/vulkan/appendices/VK_KHR_xcb_surface.txt
deleted file mode 100644
index 8849e25..0000000
--- a/registry/vulkan/appendices/VK_KHR_xcb_surface.txt
+++ /dev/null
@@ -1,78 +0,0 @@
-// Copyright 2014-2021 The Khronos Group, Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-include::{generated}/meta/{refprefix}VK_KHR_xcb_surface.txt[]
-
-=== Other Extension Metadata
-
-*Last Modified Date*::
-    2015-11-28
-*IP Status*::
-    No known IP claims.
-*Contributors*::
-  - Patrick Doane, Blizzard
-  - Jason Ekstrand, Intel
-  - Ian Elliott, LunarG
-  - Courtney Goeltzenleuchter, LunarG
-  - Jesse Hall, Google
-  - James Jones, NVIDIA
-  - Antoine Labour, Google
-  - Jon Leech, Khronos
-  - David Mao, AMD
-  - Norbert Nopper, Freescale
-  - Alon Or-bach, Samsung
-  - Daniel Rakos, AMD
-  - Graham Sellers, AMD
-  - Ray Smith, ARM
-  - Jeff Vigil, Qualcomm
-  - Chia-I Wu, LunarG
-
-=== Description
-
-The `VK_KHR_xcb_surface` extension is an instance extension.
-It provides a mechanism to create a slink:VkSurfaceKHR object (defined by
-the `apiext:VK_KHR_surface` extension) that refers to an X11 code:Window,
-using the XCB client-side library, as well as a query to determine support
-for rendering via XCB.
-
-include::{generated}/interfaces/VK_KHR_xcb_surface.txt[]
-
-=== Issues
-
-1) Does XCB need a way to query for compatibility between a particular
-physical device and a specific screen? This would be a more general query
-than flink:vkGetPhysicalDeviceSurfaceSupportKHR: If it returned
-ename:VK_TRUE, then the physical device could be assumed to support
-presentation to any window on that screen.
-
-*RESOLVED*: Yes, this is needed for toolkits that want to create a
-slink:VkDevice before creating a window.
-To ensure the query is reliable, it must be made against a particular X
-visual rather than the screen in general.
-
-=== Version History
-
- * Revision 1, 2015-09-23 (Jesse Hall)
-   - Initial draft, based on the previous contents of VK_EXT_KHR_swapchain
-     (later renamed VK_EXT_KHR_surface).
-
- * Revision 2, 2015-10-02 (James Jones)
-   - Added presentation support query for an (xcb_connection_t*,
-     xcb_visualid_t) pair.
-   - Removed "`root`" parameter from CreateXcbSurfaceKHR(), as it is
-     redundant when a window on the same screen is specified as well.
-   - Adjusted wording of issue #1 and added agreed upon resolution.
-
- * Revision 3, 2015-10-14 (Ian Elliott)
-   - Removed "`root`" parameter from CreateXcbSurfaceKHR() in one more
-     place.
-
- * Revision 4, 2015-10-26 (Ian Elliott)
-   - Renamed from VK_EXT_KHR_xcb_surface to VK_KHR_xcb_surface.
-
- * Revision 5, 2015-10-23 (Daniel Rakos)
-   - Added allocation callbacks to vkCreateXcbSurfaceKHR.
-
- * Revision 6, 2015-11-28 (Daniel Rakos)
-   - Updated the surface create function to take a pCreateInfo structure.
diff --git a/registry/vulkan/appendices/VK_KHR_xlib_surface.txt b/registry/vulkan/appendices/VK_KHR_xlib_surface.txt
deleted file mode 100644
index 4db3f96..0000000
--- a/registry/vulkan/appendices/VK_KHR_xlib_surface.txt
+++ /dev/null
@@ -1,78 +0,0 @@
-// Copyright 2014-2021 The Khronos Group, Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-include::{generated}/meta/{refprefix}VK_KHR_xlib_surface.txt[]
-
-=== Other Extension Metadata
-
-*Last Modified Date*::
-    2015-11-28
-*IP Status*::
-    No known IP claims.
-*Contributors*::
-  - Patrick Doane, Blizzard
-  - Jason Ekstrand, Intel
-  - Ian Elliott, LunarG
-  - Courtney Goeltzenleuchter, LunarG
-  - Jesse Hall, Google
-  - James Jones, NVIDIA
-  - Antoine Labour, Google
-  - Jon Leech, Khronos
-  - David Mao, AMD
-  - Norbert Nopper, Freescale
-  - Alon Or-bach, Samsung
-  - Daniel Rakos, AMD
-  - Graham Sellers, AMD
-  - Ray Smith, ARM
-  - Jeff Vigil, Qualcomm
-  - Chia-I Wu, LunarG
-
-=== Description
-
-The `VK_KHR_xlib_surface` extension is an instance extension.
-It provides a mechanism to create a slink:VkSurfaceKHR object (defined by
-the `apiext:VK_KHR_surface` extension) that refers to an X11 code:Window,
-using the Xlib client-side library, as well as a query to determine support
-for rendering via Xlib.
-
-include::{generated}/interfaces/VK_KHR_xlib_surface.txt[]
-
-=== Issues
-
-1) Does X11 need a way to query for compatibility between a particular
-physical device and a specific screen? This would be a more general query
-than flink:vkGetPhysicalDeviceSurfaceSupportKHR; if it returned
-ename:VK_TRUE, then the physical device could be assumed to support
-presentation to any window on that screen.
-
-*RESOLVED*: Yes, this is needed for toolkits that want to create a
-slink:VkDevice before creating a window.
-To ensure the query is reliable, it must be made against a particular X
-visual rather than the screen in general.
-
-=== Version History
-
- * Revision 1, 2015-09-23 (Jesse Hall)
-   - Initial draft, based on the previous contents of VK_EXT_KHR_swapchain
-     (later renamed VK_EXT_KHR_surface).
-
- * Revision 2, 2015-10-02 (James Jones)
-   - Added presentation support query for (Display*, VisualID) pair.
-   - Removed "`root`" parameter from CreateXlibSurfaceKHR(), as it is
-     redundant when a window on the same screen is specified as well.
-   - Added appropriate X errors.
-   - Adjusted wording of issue #1 and added agreed upon resolution.
-
- * Revision 3, 2015-10-14 (Ian Elliott)
-   - Renamed this extension from VK_EXT_KHR_x11_surface to
-     VK_EXT_KHR_xlib_surface.
-
- * Revision 4, 2015-10-26 (Ian Elliott)
-   - Renamed from VK_EXT_KHR_xlib_surface to VK_KHR_xlib_surface.
-
- * Revision 5, 2015-11-03 (Daniel Rakos)
-   - Added allocation callbacks to vkCreateXlibSurfaceKHR.
-
- * Revision 6, 2015-11-28 (Daniel Rakos)
-   - Updated the surface create function to take a pCreateInfo structure.
diff --git a/registry/vulkan/appendices/VK_KHR_zero_initialize_workgroup_memory.txt b/registry/vulkan/appendices/VK_KHR_zero_initialize_workgroup_memory.txt
deleted file mode 100644
index dd4ddf1..0000000
--- a/registry/vulkan/appendices/VK_KHR_zero_initialize_workgroup_memory.txt
+++ /dev/null
@@ -1,34 +0,0 @@
-// Copyright 2020-2021 The Khronos Group, Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-include::{generated}/meta/{refprefix}VK_KHR_zero_initialize_workgroup_memory.txt[]
-
-=== Other Extension Metadata
-
-*Last Modified Date*::
-    2020-11-18
-*IP Status*::
-    No known IP claims.
-*Interactions and External Dependencies*::
-    None
-*Contributors*::
-  - Alan Baker, Google
-  - Jeff Bolz, Nvidia
-  - Jason Ekstrand, Intel
-
-=== Description
-
-This extension allows the use of a null constant initializer on shader
-Workgroup memory variables, allowing implementations to expose any special
-hardware or instructions they may have.
-Zero initialization is commonly used by applications running untrusted
-content (e.g. web browsers) as way of defeating memory-scraping attacks.
-
-include::{generated}/interfaces/VK_KHR_zero_initialize_workgroup_memory.txt[]
-
-=== Version History
-
-  * Revision 1, 2020-11-18 (Alan Baker)
-    - Internal draft version
-
diff --git a/registry/vulkan/appendices/VK_MVK_ios_surface.txt b/registry/vulkan/appendices/VK_MVK_ios_surface.txt
deleted file mode 100644
index 19ad1ae..0000000
--- a/registry/vulkan/appendices/VK_MVK_ios_surface.txt
+++ /dev/null
@@ -1,44 +0,0 @@
-// Copyright (c) 2015-2018 The Brenwill Workshop Ltd.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-include::{generated}/meta/{refprefix}VK_MVK_ios_surface.txt[]
-
-=== Other Extension Metadata
-
-*Last Modified Date*::
-    2020-07-31
-*IP Status*::
-    No known IP claims.
-*Contributors*::
-  - Bill Hollings, The Brenwill Workshop Ltd.
-
-=== Description
-
-The `VK_MVK_ios_surface` extension is an instance extension.
-It provides a mechanism to create a slink:VkSurfaceKHR object (defined by
-the `apiext:VK_KHR_surface` extension) based on a code:UIView, the native
-surface type of iOS, which is underpinned by a basetype:CAMetalLayer, to
-support rendering to the surface using Apple's Metal framework.
-
-ifdef::VK_EXT_metal_surface[]
-=== Deprecation by `VK_EXT_metal_surface`
-
-The `VK_MVK_ios_surface` extension is considered deprecated and has been
-superseded by the `apiext:VK_EXT_metal_surface` extension.
-endif::VK_EXT_metal_surface[]
-
-include::{generated}/interfaces/VK_MVK_ios_surface.txt[]
-
-=== Version History
-
- * Revision 1, 2017-02-15 (Bill Hollings)
-   - Initial draft.
-
- * Revision 2, 2017-02-24 (Bill Hollings)
-   - Minor syntax fix to emphasize firm requirement for `UIView` to be
-     backed by a `CAMetalLayer`.
-
- * Revision 3, 2020-07-31 (Bill Hollings)
-   - Update documentation on requirements for UIView.
-   - Mark as deprecated by `VK_EXT_metal_surface`.
diff --git a/registry/vulkan/appendices/VK_MVK_macos_surface.txt b/registry/vulkan/appendices/VK_MVK_macos_surface.txt
deleted file mode 100644
index ab56253..0000000
--- a/registry/vulkan/appendices/VK_MVK_macos_surface.txt
+++ /dev/null
@@ -1,44 +0,0 @@
-// Copyright (c) 2015-2018 The Brenwill Workshop Ltd.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-include::{generated}/meta/{refprefix}VK_MVK_macos_surface.txt[]
-
-=== Other Extension Metadata
-
-*Last Modified Date*::
-    2020-07-31
-*IP Status*::
-    No known IP claims.
-*Contributors*::
-  - Bill Hollings, The Brenwill Workshop Ltd.
-
-=== Description
-
-The `VK_MVK_macos_surface` extension is an instance extension.
-It provides a mechanism to create a slink:VkSurfaceKHR object (defined by
-the `apiext:VK_KHR_surface` extension) based on an code:NSView, the native
-surface type of macOS, which is underpinned by a basetype:CAMetalLayer, to
-support rendering to the surface using Apple's Metal framework.
-
-ifdef::VK_EXT_metal_surface[]
-=== Deprecation by `VK_EXT_metal_surface`
-
-The `VK_MVK_macos_surface` extension is considered deprecated and has been
-superseded by the `apiext:VK_EXT_metal_surface` extension.
-endif::VK_EXT_metal_surface[]
-
-include::{generated}/interfaces/VK_MVK_macos_surface.txt[]
-
-=== Version History
-
- * Revision 1, 2017-02-15 (Bill Hollings)
-   - Initial draft.
-
- * Revision 2, 2017-02-24 (Bill Hollings)
-   - Minor syntax fix to emphasize firm requirement for `NSView` to be
-     backed by a `CAMetalLayer`.
-
- * Revision 3, 2020-07-31 (Bill Hollings)
-   - Update documentation on requirements for `NSView`.
-   - Mark as deprecated by `VK_EXT_metal_surface`.
diff --git a/registry/vulkan/appendices/VK_NN_vi_surface.txt b/registry/vulkan/appendices/VK_NN_vi_surface.txt
deleted file mode 100644
index fcd167d..0000000
--- a/registry/vulkan/appendices/VK_NN_vi_surface.txt
+++ /dev/null
@@ -1,52 +0,0 @@
-// Copyright (c) 2016-2020 Nintendo
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-include::{generated}/meta/{refprefix}VK_NN_vi_surface.txt[]
-
-=== Other Extension Metadata
-
-*Last Modified Date*::
-    2016-12-02
-*IP Status*::
-    No known IP claims.
-*Contributors*::
-  - Mathias Heyer, NVIDIA
-  - Michael Chock, NVIDIA
-  - Yasuhiro Yoshioka, Nintendo
-  - Daniel Koch, NVIDIA
-
-=== Description
-
-The `VK_NN_vi_surface` extension is an instance extension.
-It provides a mechanism to create a slink:VkSurfaceKHR object (defined by
-the `apiext:VK_KHR_surface` extension) associated with an
-code:nn::code:vi::code:Layer.
-
-include::{generated}/interfaces/VK_NN_vi_surface.txt[]
-
-=== Issues
-
-1) Does VI need a way to query for compatibility between a particular
-physical device (and queue family?) and a specific VI display?
-
-*RESOLVED*: No.
-It is currently always assumed that the device and display will always be
-compatible.
-
-2) slink:VkViSurfaceCreateInfoNN::pname:pWindow is intended to store an
-code:nn::code:vi::code:NativeWindowHandle, but its declared type is a bare
-code:void* to store the window handle.
-Why the discrepancy?
-
-*RESOLVED*: It is for C compatibility.
-The definition for the VI native window handle type is defined inside the
-code:nn::code:vi C++ namespace.
-This prevents its use in C source files.
-code:nn::code:vi::code:NativeWindowHandle is always defined to be
-code:void*, so this extension uses code:void* to match.
-
-=== Version History
-
- * Revision 1, 2016-12-2 (Michael Chock)
-   - Initial draft.
diff --git a/registry/vulkan/appendices/VK_NVX_binary_import.txt b/registry/vulkan/appendices/VK_NVX_binary_import.txt
deleted file mode 100644
index df14a57..0000000
--- a/registry/vulkan/appendices/VK_NVX_binary_import.txt
+++ /dev/null
@@ -1,41 +0,0 @@
-// Copyright (c) 2018-2021 NVIDIA Corporation
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-include::{generated}/meta/{refprefix}VK_NVX_binary_import.txt[]
-
-=== Other Extension Metadata
-
-*Last Modified Date*::
-    2021-04-09
-*Contributors*::
-  - Eric Werness, NVIDIA
-  - Liam Middlebrook, NVIDIA
-
-=== Description
-
-This extension allows applications to import CuBIN binaries and execute
-them.
-
-ifdef::EXTENSION_UNDEFINED[]
-include::{generated}/interfaces/VK_NVX_binary_import.txt[]
-endif::EXTENSION_UNDEFINED[]
-
-ifndef::EXTENSION_UNDEFINED[]
-// The anchor is added here as a landing place for a reference from
-// the autogenerated section of the features chapter, until spec
-// language is written.
-[[vkCmdCuLaunchKernelNVX]]
-[NOTE]
-.Note
-====
-There is currently no specification language written for this extension, so
-although it appears in the Vulkan headers, its interfaces are not summarized
-here.
-====
-endif::EXTENSION_UNDEFINED[]
-
-=== Version History
-
-  * Revision 1, 2021-04-09 (Eric Werness)
-    - Internal revisions
diff --git a/registry/vulkan/appendices/VK_NVX_image_view_handle.txt b/registry/vulkan/appendices/VK_NVX_image_view_handle.txt
deleted file mode 100644
index 16497a9..0000000
--- a/registry/vulkan/appendices/VK_NVX_image_view_handle.txt
+++ /dev/null
@@ -1,30 +0,0 @@
-// Copyright (c) 2018-2020 NVIDIA Corporation
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-include::{generated}/meta/{refprefix}VK_NVX_image_view_handle.txt[]
-
-=== Other Extension Metadata
-
-*Last Modified Date*::
-    2020-04-03
-*Contributors*::
-  - Eric Werness, NVIDIA
-  - Jeff Bolz, NVIDIA
-  - Daniel Koch, NVIDIA
-
-=== Description
-
-This extension allows applications to query an opaque handle from an image
-view for use as a sampled image or storage image.
-This provides no direct functionality itself.
-
-include::{generated}/interfaces/VK_NVX_image_view_handle.txt[]
-
-=== Version History
-
-  * Revision 2, 2020-04-03 (Piers Daniell)
-    - Add flink:vkGetImageViewAddressNVX
-
-  * Revision 1, 2018-12-07 (Eric Werness)
-    - Internal revisions
diff --git a/registry/vulkan/appendices/VK_NVX_multiview_per_view_attributes.txt b/registry/vulkan/appendices/VK_NVX_multiview_per_view_attributes.txt
deleted file mode 100644
index 376e07b..0000000
--- a/registry/vulkan/appendices/VK_NVX_multiview_per_view_attributes.txt
+++ /dev/null
@@ -1,95 +0,0 @@
-// Copyright (c) 2017-2020 NVIDIA Corporation
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-include::{generated}/meta/{refprefix}VK_NVX_multiview_per_view_attributes.txt[]
-
-=== Other Extension Metadata
-
-*Last Modified Date*::
-    2017-01-13
-*IP Status*::
-    No known IP claims.
-*Interactions and External Dependencies*::
-  - This extension requires
-    {spirv}/NV/SPV_NVX_multiview_per_view_attributes.html[`SPV_NVX_multiview_per_view_attributes`]
-  - This extension provides API support for
-    https://github.com/KhronosGroup/GLSL/blob/master/extensions/nvx/GL_NVX_multiview_per_view_attributes.txt[`GL_NVX_multiview_per_view_attributes`]
-  - This extension interacts with `apiext:VK_NV_viewport_array2`.
-*Contributors*::
-  - Jeff Bolz, NVIDIA
-  - Daniel Koch, NVIDIA
-
-=== Description
-
-This extension adds a new way to write shaders to be used with multiview
-subpasses, where the attributes for all views are written out by a single
-invocation of the
-<<pipeline-graphics-subsets-pre-rasterization,pre-rasterization shader
-stages>>.
-Related SPIR-V and GLSL extensions `SPV_NVX_multiview_per_view_attributes`
-and `GL_NVX_multiview_per_view_attributes` introduce per-view position and
-viewport mask attributes arrays, and this extension defines how those
-per-view attribute arrays are interpreted by Vulkan.
-Pipelines using per-view attributes may: only execute the
-<<pipeline-graphics-subsets-pre-rasterization,pre-rasterization shader
-stages>> once for all views rather than once per-view, which reduces
-redundant shading work.
-
-A subpass creation flag controls whether the subpass uses this extension.
-A subpass must: either exclusively use this extension or not use it at all.
-
-Some Vulkan implementations only support the position attribute varying
-between views in the X component.
-A subpass can declare via a second creation flag whether all pipelines
-compiled for this subpass will obey this restriction.
-
-Shaders that use the new per-view outputs (e.g. code:gl_PositionPerViewNV)
-must: also write the non-per-view output (code:gl_Position), and the values
-written must: be such that `gl_Position =
-gl_PositionPerViewNV[gl_ViewIndex]` for all views in the subpass.
-Implementations are free to either use the per-view outputs or the
-non-per-view outputs, whichever would be more efficient.
-
-If `apiext:VK_NV_viewport_array2` is not also supported and enabled, the
-per-view viewport mask must: not be used.
-
-include::{generated}/interfaces/VK_NVX_multiview_per_view_attributes.txt[]
-
-=== New Built-In Variables
-
-  * <<interfaces-builtin-variables-positionperview,code:PositionPerViewNV>>
-  * <<interfaces-builtin-variables-viewportmaskperview,code:ViewportMaskPerViewNV>>
-
-=== New SPIR-V Capabilities
-
-  * <<spirvenv-capabilities-table-PerViewAttributesNV,code:PerViewAttributesNV>>
-
-=== Examples
-
-[source,c]
----------------------------------------------------
-#version 450 core
-
-#extension GL_KHX_multiview : enable
-#extension GL_NVX_multiview_per_view_attributes : enable
-
-layout(location = 0) in vec4 position;
-layout(set = 0, binding = 0) uniform Block { mat4 mvpPerView[2]; } buf;
-
-void main()
-{
-    // Output both per-view positions and gl_Position as a function
-    // of gl_ViewIndex
-    gl_PositionPerViewNV[0] = buf.mvpPerView[0] * position;
-    gl_PositionPerViewNV[1] = buf.mvpPerView[1] * position;
-    gl_Position = buf.mvpPerView[gl_ViewIndex] * position;
-}
-
----------------------------------------------------
-
-
-=== Version History
-
- * Revision 1, 2017-01-13 (Jeff Bolz)
-   - Internal revisions
diff --git a/registry/vulkan/appendices/VK_NV_acquire_winrt_display.txt b/registry/vulkan/appendices/VK_NV_acquire_winrt_display.txt
deleted file mode 100644
index 4cf58fa..0000000
--- a/registry/vulkan/appendices/VK_NV_acquire_winrt_display.txt
+++ /dev/null
@@ -1,126 +0,0 @@
-// Copyright (c) 2020 NVIDIA Corporation
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-include::{generated}/meta/{refprefix}VK_NV_acquire_winrt_display.txt[]
-
-=== Other Extension Metadata
-
-*Last Modified Date*::
-    2020-09-29
-*IP Status*::
-    No known IP claims.
-*Contributors*::
-  - Jeff Juliano, NVIDIA
-
-=== Description
-
-This extension allows an application to take exclusive control of a display
-on Windows 10 provided that the display is not already controlled by a
-compositor.
-Examples of compositors include the Windows desktop compositor, other
-applications using this Vulkan extension, and applications that
-https://docs.microsoft.com/en-us/uwp/api/windows.devices.display.core.displaymanager.tryacquiretarget["`Acquire`"]
-a
-https://docs.microsoft.com/en-us/uwp/api/windows.devices.display.core.displaytarget["`DisplayTarget`"]
-using a https://docs.microsoft.com/en-us/uwp/api/["`WinRT`"] command such as
-https://docs.microsoft.com/en-us/uwp/api/windows.devices.display.core.displaymanager.tryacquiretarget["`winrt::Windows::Devices::Display::Core::DisplayManager.TryAcquireTarget()`"].
-
-When control is acquired the application has exclusive access to the display
-until control is released or the application terminates.
-An application's attempt to acquire is denied if a different application has
-already acquired the display.
-
-include::{generated}/interfaces/VK_NV_acquire_winrt_display.txt[]
-
-=== Issues
-
-1) What should the platform substring be for this extension:
-
-*RESOLVED*: The platform substring is "`Winrt`".
-
-The substring "`Winrt`" matches the fact that the OS API exposing the
-acquire and release functionality is called "`WinRT`".
-
-The substring "`Win32`" is wrong because the related "`WinRT`" API is
-explicitly *not* a "`Win32`" API.
-"`WinRT`" is a competing API family to the "`Win32`" API family.
-
-The substring "`Windows`" is suboptimal because there could be more than one
-relevant API on the Windows platform.
-There is preference to use the more-specific substring "`Winrt`".
-
-2) Should flink:vkAcquireWinrtDisplayNV take a winRT DisplayTarget, or a
-Vulkan display handle as input?
-
-*RESOLVED*: A Vulkan display handle.
-This matches the design of flink:vkAcquireXlibDisplayEXT.
-
-3) Should the acquire command be platform-independent named
-"`vkAcquireDisplayNV`", or platform-specific named
-"`vkAcquireWinrtDisplayNV`"?
-
-*RESOLVED*: Add a platform-specific command.
-
-The inputs to the Acquire command are all Vulkan types.
-None are WinRT types.
-This opens the possibility of the winrt extension defining a
-platform-independent acquire command.
-
-The X11 acquire command does need to accept a platform-specific parameter.
-This could be handled by adding to a platform-independent acquire command a
-params struct to which platform-dependent types can be chained by
-pname:pNext pointer.
-
-The prevailing opinion is that it would be odd to create a second
-platform-independent function that is used on the Windows 10 platform, but
-that is not used for the X11 platform.
-Since a Windows 10 platform-specific command is needed anyway for converting
-between vkDisplayKHR and platform-native handles, opinion was to create a
-platform-specific acquire function.
-
-4) Should the flink:vkGetWinrtDisplayNV parameter identifying a display be
-named "`deviceRelativeId`" or "`adapterRelativeId`"?
-
-*RESOLVED*: The WinRT name is "`AdapterRelativeId`".
-The name "`adapter`" is the Windows analog to a Vulkan "`physical device`".
-Vulkan already has precedent to use the name sname:deviceLUID for the
-concept that Windows APIs call "`AdapterLuid`".
-Keeping form with this precedent, the name "`deviceRelativeId`" is chosen.
-
-5) Does flink:vkAcquireWinrtDisplayNV cause the Windows desktop compositor
-to release a display?
-
-*RESOLVED*: No.
-flink:vkAcquireWinrtDisplayNV does not itself cause the Windows desktop
-compositor to release a display.
-This action must be performed outside of Vulkan.
-
-Beginning with Windows 10 version 2004 it is possible to cause the Windows
-desktop compositor to release a display by using the "`Advanced display
-settings`" sub-page of the "`Display settings`" control panel.
-See
-https://docs.microsoft.com/en-us/windows-hardware/drivers/display/specialized-monitors
-
-6) Where can one find additional information about custom compositors for
-Windows 10?
-
-*RESOLVED*: Relevant references are as follows.
-
-According to Microsoft's documentation on
-https://docs.microsoft.com/en-us/windows-hardware/drivers/display/specialized-monitors-compositor["building
-a custom compositor"], the ability to write a custom compositor is not a
-replacement for a fullscreen desktop window.
-The feature is for writing compositor apps that drive specialized hardware.
-
-Only certain editions of Windows 10 support custom compositors,
-https://docs.microsoft.com/en-us/windows-hardware/drivers/display/specialized-monitors#windows-10-version-2004["documented
-here"].
-The product type can be queried from Windows 10.
-See
-https://docs.microsoft.com/en-us/windows/win32/api/sysinfoapi/nf-sysinfoapi-getproductinfo
-
-=== Version History
-
- * Revision 1, 2020-09-29 (Jeff Juliano)
-   - Initial draft
diff --git a/registry/vulkan/appendices/VK_NV_clip_space_w_scaling.txt b/registry/vulkan/appendices/VK_NV_clip_space_w_scaling.txt
deleted file mode 100644
index 3f8cd26..0000000
--- a/registry/vulkan/appendices/VK_NV_clip_space_w_scaling.txt
+++ /dev/null
@@ -1,156 +0,0 @@
-// Copyright (c) 2017-2020 NVIDIA Corporation
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-include::{generated}/meta/{refprefix}VK_NV_clip_space_w_scaling.txt[]
-
-=== Other Extension Metadata
-
-*Last Modified Date*::
-    2017-02-15
-*Contributors*::
-  - Eric Werness, NVIDIA
-  - Kedarnath Thangudu, NVIDIA
-
-=== Description
-
-Virtual Reality (VR) applications often involve a post-processing step to
-apply a "`barrel`" distortion to the rendered image to correct the
-"`pincushion`" distortion introduced by the optics in a VR device.
-The barrel distorted image has lower resolution along the edges compared to
-the center.
-Since the original image is rendered at high resolution, which is uniform
-across the complete image, a lot of pixels towards the edges do not make it
-to the final post-processed image.
-
-This extension provides a mechanism to render VR scenes at a non-uniform
-resolution, in particular a resolution that falls linearly from the center
-towards the edges.
-This is achieved by scaling the [eq]#w# coordinate of the vertices in the
-clip space before perspective divide.
-The clip space [eq]#w# coordinate of the vertices can: be offset as of a
-function of [eq]#x# and [eq]#y# coordinates as follows:
-
-[eq]#w' = w {plus} Ax {plus} By#
-
-In the intended use case for viewport position scaling, an application
-should use a set of four viewports, one for each of the four quadrants of a
-Cartesian coordinate system.
-Each viewport is set to the dimension of the image, but is scissored to the
-quadrant it represents.
-The application should specify [eq]#A# and [eq]#B# coefficients of the
-[eq]#w#-scaling equation above, that have the same value, but different
-signs, for each of the viewports.
-The signs of [eq]#A# and [eq]#B# should match the signs of [eq]#x# and
-[eq]#y# for the quadrant that they represent such that the value of [eq]#w'#
-will always be greater than or equal to the original [eq]#w# value for the
-entire image.
-Since the offset to [eq]#w#, ([eq]#Ax {plus} By#), is always positive, and
-increases with the absolute values of [eq]#x# and [eq]#y#, the effective
-resolution will fall off linearly from the center of the image to its edges.
-
-include::{generated}/interfaces/VK_NV_clip_space_w_scaling.txt[]
-
-=== Issues
-
-1) Is the pipeline struct name too long?
-
-*RESOLVED*: It fits with the naming convention.
-
-2) Separate W scaling section or fold into coordinate transformations?
-
-*RESOLVED*: Leaving it as its own section for now.
-
-=== Examples
-
-[source,c++]
---------------------------------------
-
-VkViewport viewports[4];
-VkRect2D scissors[4];
-VkViewportWScalingNV scalings[4];
-
-for (int i = 0; i < 4; i++) {
-    int x = (i & 2) ? 0 : currentWindowWidth / 2;
-    int y = (i & 1) ? 0 : currentWindowHeight / 2;
-
-    viewports[i].x = 0;
-    viewports[i].y = 0;
-    viewports[i].width = currentWindowWidth;
-    viewports[i].height = currentWindowHeight;
-    viewports[i].minDepth = 0.0f;
-    viewports[i].maxDepth = 1.0f;
-
-    scissors[i].offset.x = x;
-    scissors[i].offset.y = y;
-    scissors[i].extent.width = currentWindowWidth/2;
-    scissors[i].extent.height = currentWindowHeight/2;
-
-    const float factor = 0.15;
-    scalings[i].xcoeff = ((i & 2) ? -1.0 : 1.0) * factor;
-    scalings[i].ycoeff = ((i & 1) ? -1.0 : 1.0) * factor;
-}
-
-VkPipelineViewportWScalingStateCreateInfoNV vpWScalingStateInfo = { VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_W_SCALING_STATE_CREATE_INFO_NV };
-
-vpWScalingStateInfo.viewportWScalingEnable = VK_TRUE;
-vpWScalingStateInfo.viewportCount = 4;
-vpWScalingStateInfo.pViewportWScalings = &scalings[0];
-
-VkPipelineViewportStateCreateInfo vpStateInfo = { VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_STATE_CREATE_INFO };
-vpStateInfo.viewportCount = 4;
-vpStateInfo.pViewports = &viewports[0];
-vpStateInfo.scissorCount = 4;
-vpStateInfo.pScissors = &scissors[0];
-vpStateInfo.pNext = &vpWScalingStateInfo;
-
---------------------------------------
-
-Example shader to read from a w-scaled texture:
-
-[source,c++]
---------------------------------------
-
-// Vertex Shader
-// Draw a triangle that covers the whole screen
-const vec4 positions[3] = vec4[3](vec4(-1, -1, 0, 1),
-                                  vec4( 3, -1, 0, 1),
-                                  vec4(-1,  3, 0, 1));
-out vec2 uv;
-void main()
-{
-    vec4 pos = positions[ gl_VertexID ];
-    gl_Position = pos;
-    uv = pos.xy;
-}
-
-// Fragment Shader
-uniform sampler2D tex;
-uniform float xcoeff;
-uniform float ycoeff;
-out vec4 Color;
-in vec2 uv;
-
-void main()
-{
-    // Handle uv as if upper right quadrant
-    vec2 uvabs = abs(uv);
-
-    // unscale: transform w-scaled image into an unscaled image
-    //   scale: transform unscaled image int a w-scaled image
-    float unscale = 1.0 / (1 + xcoeff * uvabs.x + xcoeff * uvabs.y);
-    //float scale = 1.0 / (1 - xcoeff * uvabs.x - xcoeff * uvabs.y);
-
-    vec2 P = vec2(unscale * uvabs.x, unscale * uvabs.y);
-
-    // Go back to the right quadrant
-    P *= sign(uv);
-
-    Color = texture(tex, P * 0.5 + 0.5);
-}
---------------------------------------
-
-=== Version History
-
- * Revision 1, 2017-02-15 (Eric Werness)
-   - Internal revisions
diff --git a/registry/vulkan/appendices/VK_NV_compute_shader_derivatives.txt b/registry/vulkan/appendices/VK_NV_compute_shader_derivatives.txt
deleted file mode 100644
index 668c4f0..0000000
--- a/registry/vulkan/appendices/VK_NV_compute_shader_derivatives.txt
+++ /dev/null
@@ -1,62 +0,0 @@
-// Copyright (c) 2018-2020 NVIDIA Corporation
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-include::{generated}/meta/{refprefix}VK_NV_compute_shader_derivatives.txt[]
-
-=== Other Extension Metadata
-
-*Last Modified Date*::
-    2018-07-19
-*IP Status*::
-    No known IP claims.
-*Interactions and External Dependencies*::
-  - This extension requires
-    {spirv}/NV/SPV_NV_compute_shader_derivatives.html[`SPV_NV_compute_shader_derivatives`]
-  - This extension provides API support for
-    https://github.com/KhronosGroup/GLSL/blob/master/extensions/nv/GLSL_NV_compute_shader_derivatives.txt[`GL_NV_compute_shader_derivatives`]
-*Contributors*::
-  - Pat Brown, NVIDIA
-
-=== Description
-
-This extension adds Vulkan support for the
-{spirv}/NV/SPV_NV_compute_shader_derivatives.html[`SPV_NV_compute_shader_derivatives`]
-SPIR-V extension.
-
-The SPIR-V extension provides two new execution modes, both of which allow
-compute shaders to use built-ins that evaluate compute derivatives
-explicitly or implicitly.
-Derivatives will be computed via differencing over a 2x2 group of shader
-invocations.
-The code:DerivativeGroupQuadsNV execution mode assembles shader invocations
-into 2x2 groups, where each group has x and y coordinates of the local
-invocation ID of the form (2m+{0,1}, 2n+{0,1}).
-The code:DerivativeGroupLinearNV execution mode assembles shader invocations
-into 2x2 groups, where each group has local invocation index values of the
-form 4m+{0,1,2,3}.
-
-include::{generated}/interfaces/VK_NV_compute_shader_derivatives.txt[]
-
-=== New SPIR-V Capability
-
-  * <<spirvenv-capabilities-table-ComputeDerivativeGroupQuadsNV,ComputeDerivativeGroupQuadsNV>>
-  * <<spirvenv-capabilities-table-ComputeDerivativeGroupLinearNV,ComputeDerivativeGroupLinearNV>>
-
-=== Issues
-
-(1) Should we specify that the groups of four shader invocations used for
-derivatives in a compute shader are the same groups of four invocations that
-form a "`quad`" in shader subgroups?
-
-*RESOLVED*: Yes.
-
-
-=== Examples
-
-None.
-
-=== Version History
-
- * Revision 1, 2018-07-19 (Pat Brown)
-   - Initial draft
diff --git a/registry/vulkan/appendices/VK_NV_cooperative_matrix.txt b/registry/vulkan/appendices/VK_NV_cooperative_matrix.txt
deleted file mode 100644
index dbae959..0000000
--- a/registry/vulkan/appendices/VK_NV_cooperative_matrix.txt
+++ /dev/null
@@ -1,62 +0,0 @@
-// Copyright (c) 2019-2020 NVIDIA Corporation
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-include::{generated}/meta/{refprefix}VK_NV_cooperative_matrix.txt[]
-
-=== Other Extension Metadata
-
-*Last Modified Date*::
-    2019-02-05
-*Interactions and External Dependencies*::
-  - This extension requires
-    {spirv}/NV/SPV_NV_cooperative_matrix.html[`SPV_NV_cooperative_matrix`]
-  - This extension provides API support for
-    https://github.com/KhronosGroup/GLSL/blob/master/extensions/nv/GLSL_NV_cooperative_matrix.txt[`GL_NV_cooperative_matrix`]
-*Contributors*::
-  - Jeff Bolz, NVIDIA
-  - Markus Tavenrath, NVIDIA
-  - Daniel Koch, NVIDIA
-
-=== Description
-
-This extension adds support for using cooperative matrix types in SPIR-V.
-Cooperative matrix types are medium-sized matrices that are primarily
-supported in compute shaders, where the storage for the matrix is spread
-across all invocations in some scope (usually a subgroup) and those
-invocations cooperate to efficiently perform matrix multiplies.
-
-Cooperative matrix types are defined by the
-{spirv}/NV/SPV_NV_cooperative_matrix.html[`SPV_NV_cooperative_matrix`]
-SPIR-V extension and can be used with the
-https://github.com/KhronosGroup/GLSL/blob/master/extensions/nv/GLSL_NV_cooperative_matrix.txt[`GL_NV_cooperative_matrix`]
-GLSL extension.
-
-This extension includes support for enumerating the matrix types and
-dimensions that are supported by the implementation.
-
-include::{generated}/interfaces/VK_NV_cooperative_matrix.txt[]
-
-=== New SPIR-V Capabilities
-
-  * <<spirvenv-capabilities-table-CooperativeMatrixNV,CooperativeMatrixNV>>
-
-=== Issues
-
-(1) What matrix properties will be supported in practice?
-
-*RESOLVED*: In NVIDIA's initial implementation, we will support:
-
-    * AType = BType = fp16 CType = DType = fp16 MxNxK = 16x8x16 scope =
-      Subgroup
-    * AType = BType = fp16 CType = DType = fp16 MxNxK = 16x8x8 scope =
-      Subgroup
-    * AType = BType = fp16 CType = DType = fp32 MxNxK = 16x8x16 scope =
-      Subgroup
-    * AType = BType = fp16 CType = DType = fp32 MxNxK = 16x8x8 scope =
-      Subgroup
-
-=== Version History
-
-  * Revision 1, 2019-02-05 (Jeff Bolz)
-    - Internal revisions
diff --git a/registry/vulkan/appendices/VK_NV_corner_sampled_image.txt b/registry/vulkan/appendices/VK_NV_corner_sampled_image.txt
deleted file mode 100644
index 551e132..0000000
--- a/registry/vulkan/appendices/VK_NV_corner_sampled_image.txt
+++ /dev/null
@@ -1,96 +0,0 @@
-// Copyright (c) 2018-2020 NVIDIA Corporation
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-include::{generated}/meta/{refprefix}VK_NV_corner_sampled_image.txt[]
-
-=== Other Extension Metadata
-
-*Last Modified Date*::
-    2018-08-13
-*Contributors*::
-  - Jeff Bolz, NVIDIA
-  - Pat Brown, NVIDIA
-  - Chris Lentini, NVIDIA
-
-=== Description
-
-This extension adds support for a new image organization, which this
-extension refers to as "`corner-sampled`" images.
-A corner-sampled image differs from a conventional image in the following
-ways:
-
-  * Texels are centered on integer coordinates.
-    See <<textures-unnormalized-to-integer, Unnormalized Texel Coordinate
-    Operations>>
-  * Normalized coordinates are scaled using [eq]#coord {times} (dim - 1)#
-    rather than [eq]#coord {times} dim#, where dim is the size of one
-    dimension of the image.
-    See <<textures-normalized-to-unnormalized, normalized texel coordinate
-    transform>>.
-  * Partial derivatives are scaled using [eq]#coord {times} (dim - 1)#
-    rather than [eq]#coord {times} dim#.
-    See <<textures-scale-factor,Scale Factor Operation>>.
-  * Calculation of the next higher lod size goes according to
-    [eq]#{lceil}dim / 2{rceil}# rather than [eq]#{lfloor}dim / 2{rfloor}#.
-    See <<resources-image-miplevel-sizing,Image Miplevel Sizing>>.
-  * The minimum level size is 2x2 for 2D images and 2x2x2 for 3D images.
-    See <<resources-image-miplevel-sizing,Image Miplevel Sizing>>.
-
-This image organization is designed to facilitate a system like Ptex with
-separate textures for each face of a subdivision or polygon mesh.
-Placing sample locations at pixel corners allows applications to maintain
-continuity between adjacent patches by duplicating values along shared
-edges.
-Additionally, using the modified mipmapping logic along with texture
-dimensions of the form [eq]#2^n^+1# allows continuity across shared edges
-even if the adjacent patches use different level-of-detail values.
-
-include::{generated}/interfaces/VK_NV_corner_sampled_image.txt[]
-
-=== Issues
-
-. What should this extension be named?
-+
---
-*DISCUSSION*: While naming this extension, we chose the most distinctive
-aspect of the image organization and referred to such images as
-"`corner-sampled images`".
-As a result, we decided to name the extension NV_corner_sampled_image.
---
-
-. Do we need a format feature flag so formats can advertise if they support corner-sampling?
-+
---
-*DISCUSSION*: Currently NVIDIA supports this for all 2D and 3D formats, but
-not for cube maps or depth-stencil formats.
-A format feature might be useful if other vendors would only support this on
-some formats.
---
-
-. Do integer texel coordinates have a different range for corner-sampled images?
-+
---
-*RESOLVED*: No, these are unchanged.
---
-
-. Do unnormalized sampler coordinates work with corner-sampled images? Are there any functional differences?
-+
---
-*RESOLVED*: Yes.
-Unnormalized coordinates are treated as already scaled for corner-sample
-usage.
---
-
-. Should we have a diagram in the "`Image Operations`" chapter demonstrating different texel sampling locations?
-+
---
-*UNRESOLVED*: Probaby, but later.
---
-
-=== Version History
-
-  * Revision 1, 2018-08-14 (Daniel Koch)
-    - Internal revisions
-  * Revision 2, 2018-08-14 (Daniel Koch)
-    - ???
diff --git a/registry/vulkan/appendices/VK_NV_coverage_reduction_mode.txt b/registry/vulkan/appendices/VK_NV_coverage_reduction_mode.txt
deleted file mode 100644
index 99f481c..0000000
--- a/registry/vulkan/appendices/VK_NV_coverage_reduction_mode.txt
+++ /dev/null
@@ -1,51 +0,0 @@
-// Copyright (c) 2019-2020 NVIDIA Corporation
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-include::{generated}/meta/{refprefix}VK_NV_coverage_reduction_mode.txt[]
-
-=== Other Extension Metadata
-
-*Last Modified Date*::
-  2019-01-29
-*Contributors*::
-  - Kedarnath Thangudu, NVIDIA
-  - Jeff Bolz, NVIDIA
-
-=== Description
-
-When using a framebuffer with mixed samples, a per-fragment coverage
-reduction operation is performed which generates color sample coverage from
-the pixel coverage.
-This extension defines the following modes to control how this reduction is
-performed.
-
-  * Merge: When there are more samples in the pixel coverage than color
-    samples, there is an implementation-dependent association of each pixel
-    coverage sample to a color sample.
-    In the merge mode, the color sample coverage is computed such that only
-    if any associated sample in the pixel coverage is covered, the color
-    sample is covered.
-    This is the default mode.
-
-  * Truncate: When there are more raster samples (N) than color samples(M),
-    there is one to one association of the first M raster samples to the M
-    color samples; other raster samples are ignored.
-
-When the number of raster samples is equal to the color samples, there is a
-one to one mapping between them in either of the above modes.
-
-The new command
-flink:vkGetPhysicalDeviceSupportedFramebufferMixedSamplesCombinationsNV can
-be used to query the various raster, color, depth/stencil sample count and
-reduction mode combinations that are supported by the implementation.
-This extension would allow an implementation to support the behavior of both
-`VK_NV_framebuffer_mixed_samples` and `VK_AMD_mixed_attachment_samples`
-extensions simultaneously.
-
-include::{generated}/interfaces/VK_NV_coverage_reduction_mode.txt[]
-
-=== Version History
-
-  * Revision 1, 2019-01-29 (Kedarnath Thangudu)
-    - Internal revisions
diff --git a/registry/vulkan/appendices/VK_NV_dedicated_allocation.txt b/registry/vulkan/appendices/VK_NV_dedicated_allocation.txt
deleted file mode 100644
index 943a96a..0000000
--- a/registry/vulkan/appendices/VK_NV_dedicated_allocation.txt
+++ /dev/null
@@ -1,110 +0,0 @@
-// Copyright (c) 2016-2020 NVIDIA Corporation
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-include::{generated}/meta/{refprefix}VK_NV_dedicated_allocation.txt[]
-
-=== Other Extension Metadata
-
-*Last Modified Date*::
-    2016-05-31
-*IP Status*::
-    No known IP claims.
-*Contributors*::
-  - Jeff Bolz, NVIDIA
-
-=== Description
-
-This extension allows device memory to be allocated for a particular buffer
-or image resource, which on some devices can significantly improve the
-performance of that resource.
-Normal device memory allocations must support memory aliasing and sparse
-binding, which could interfere with optimizations like framebuffer
-compression or efficient page table usage.
-This is important for render targets and very large resources, but need not
-(and probably should not) be used for smaller resources that can benefit
-from suballocation.
-
-This extension adds a few small structures to resource creation and memory
-allocation: a new structure that flags whether am image/buffer will have a
-dedicated allocation, and a structure indicating the image or buffer that an
-allocation will be bound to.
-
-include::{generated}/interfaces/VK_NV_dedicated_allocation.txt[]
-
-=== Examples
-
-[source,c++]
---------------------------------------
-
-    // Create an image with
-    // VkDedicatedAllocationImageCreateInfoNV::dedicatedAllocation
-    // set to VK_TRUE
-
-    VkDedicatedAllocationImageCreateInfoNV dedicatedImageInfo =
-    {
-        VK_STRUCTURE_TYPE_DEDICATED_ALLOCATION_IMAGE_CREATE_INFO_NV,            // sType
-        NULL,                                                                   // pNext
-        VK_TRUE,                                                                // dedicatedAllocation
-    };
-
-    VkImageCreateInfo imageCreateInfo =
-    {
-        VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO,    // sType
-        &dedicatedImageInfo                     // pNext
-        // Other members set as usual
-    };
-
-    VkImage image;
-    VkResult result = vkCreateImage(
-        device,
-        &imageCreateInfo,
-        NULL,                       // pAllocator
-        &image);
-
-    VkMemoryRequirements memoryRequirements;
-    vkGetImageMemoryRequirements(
-        device,
-        image,
-        &memoryRequirements);
-
-    // Allocate memory with VkDedicatedAllocationMemoryAllocateInfoNV::image
-    // pointing to the image we are allocating the memory for
-
-    VkDedicatedAllocationMemoryAllocateInfoNV dedicatedInfo =
-    {
-        VK_STRUCTURE_TYPE_DEDICATED_ALLOCATION_MEMORY_ALLOCATE_INFO_NV,             // sType
-        NULL,                                                                       // pNext
-        image,                                                                      // image
-        VK_NULL_HANDLE,                                                             // buffer
-    };
-
-    VkMemoryAllocateInfo memoryAllocateInfo =
-    {
-        VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO,                 // sType
-        &dedicatedInfo,                                         // pNext
-        memoryRequirements.size,                                // allocationSize
-        FindMemoryTypeIndex(memoryRequirements.memoryTypeBits), // memoryTypeIndex
-    };
-
-    VkDeviceMemory memory;
-    vkAllocateMemory(
-        device,
-        &memoryAllocateInfo,
-        NULL,                       // pAllocator
-        &memory);
-
-    // Bind the image to the memory
-
-    vkBindImageMemory(
-        device,
-        image,
-        memory,
-        0);
-
---------------------------------------
-
-=== Version History
-
- * Revision 1, 2016-05-31 (Jeff Bolz)
-   - Internal revisions
diff --git a/registry/vulkan/appendices/VK_NV_dedicated_allocation_image_aliasing.txt b/registry/vulkan/appendices/VK_NV_dedicated_allocation_image_aliasing.txt
deleted file mode 100644
index be89c9c..0000000
--- a/registry/vulkan/appendices/VK_NV_dedicated_allocation_image_aliasing.txt
+++ /dev/null
@@ -1,30 +0,0 @@
-// Copyright (c) 2019-2020 NVIDIA Corporation
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-include::{generated}/meta/{refprefix}VK_NV_dedicated_allocation_image_aliasing.txt[]
-
-=== Other Extension Metadata
-
-*Last Modified Date*::
-    2019-01-04
-*Contributors*::
-  - Nuno Subtil, NVIDIA
-  - Jeff Bolz, NVIDIA
-  - Eric Werness, NVIDIA
-  - Axel Gneiting, id Software
-
-=== Description
-
-This extension allows applications to alias images on dedicated allocations,
-subject to specific restrictions: the extent and the number of layers in the
-image being aliased must be smaller than or equal to those of the original
-image for which the allocation was created, and every other image parameter
-must match.
-
-include::{generated}/interfaces/VK_NV_dedicated_allocation_image_aliasing.txt[]
-
-=== Version History
-
-  * Revision 1, 2019-01-04 (Nuno Subtil)
-    - Internal revisions
diff --git a/registry/vulkan/appendices/VK_NV_device_diagnostic_checkpoints.txt b/registry/vulkan/appendices/VK_NV_device_diagnostic_checkpoints.txt
deleted file mode 100644
index 5153f1d..0000000
--- a/registry/vulkan/appendices/VK_NV_device_diagnostic_checkpoints.txt
+++ /dev/null
@@ -1,35 +0,0 @@
-// Copyright (c) 2018-2020 NVIDIA Corporation
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-include::{generated}/meta/{refprefix}VK_NV_device_diagnostic_checkpoints.txt[]
-
-=== Other Extension Metadata
-
-*Last Modified Date*::
-    2018-07-16
-*Contributors*::
-  - Oleg Kuznetsov, NVIDIA
-  - Alex Dunn, NVIDIA
-  - Jeff Bolz, NVIDIA
-  - Eric Werness, NVIDIA
-  - Daniel Koch, NVIDIA
-
-=== Description
-
-This extension allows applications to insert markers in the command stream
-and associate them with custom data.
-
-If a device lost error occurs, the application may: then query the
-implementation for the last markers to cross specific implementation-defined
-pipeline stages, in order to narrow down which commands were executing at
-the time and might have caused the failure.
-
-include::{generated}/interfaces/VK_NV_device_diagnostic_checkpoints.txt[]
-
-=== Version History
-
-  * Revision 1, 2018-07-16 (Nuno Subtil)
-    - Internal revisions
-  * Revision 2, 2018-07-16 (Nuno Subtil)
-    - ???
diff --git a/registry/vulkan/appendices/VK_NV_device_diagnostics_config.txt b/registry/vulkan/appendices/VK_NV_device_diagnostics_config.txt
deleted file mode 100644
index 1bd1d1c..0000000
--- a/registry/vulkan/appendices/VK_NV_device_diagnostics_config.txt
+++ /dev/null
@@ -1,26 +0,0 @@
-// Copyright (c) 2019-2020 NVIDIA Corporation
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-include::{generated}/meta/{refprefix}VK_NV_device_diagnostics_config.txt[]
-
-=== Other Extension Metadata
-
-*Last Modified Date*::
-  2019-12-15
-*Contributors*::
-  - Kedarnath Thangudu, NVIDIA
-  - Thomas Klein, NVIDIA
-
-=== Description
-
-Applications using Nvidia Nsight^(TM)^ Aftermath SDK for Vulkan to integrate
-device crash dumps into their error reporting mechanisms, may: use this
-extension to configure options related to device crash dump creation.
-
-include::{generated}/interfaces/VK_NV_device_diagnostics_config.txt[]
-
-=== Version History
-
-  * Revision 1, 2019-11-21 (Kedarnath Thangudu)
-    - Internal revisions
diff --git a/registry/vulkan/appendices/VK_NV_device_generated_commands.txt b/registry/vulkan/appendices/VK_NV_device_generated_commands.txt
deleted file mode 100644
index 101ff2e..0000000
--- a/registry/vulkan/appendices/VK_NV_device_generated_commands.txt
+++ /dev/null
@@ -1,326 +0,0 @@
-// Copyright (c) 2020 NVIDIA Corporation
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-include::{generated}/meta/{refprefix}VK_NV_device_generated_commands.txt[]
-
-=== Other Extension Metadata
-
-*Last Modified Date*::
-    2020-02-20
-*Interactions and External Dependencies*::
- - This extension requires Vulkan 1.1
- - This extension requires `VK_EXT_buffer_device_address` or
-   `VK_KHR_buffer_device_address` or Vulkan 1.2 for the ability to bind
-   vertex and index buffers on the device.
- - This extension interacts with `VK_NV_mesh_shader`.
-   If the latter extension is not supported, remove the command token to
-   initiate mesh tasks drawing in this extension.
-*Contributors*::
-  - Christoph Kubisch, NVIDIA
-  - Pierre Boudier, NVIDIA
-  - Jeff Bolz, NVIDIA
-  - Eric Werness, NVIDIA
-  - Yuriy O'Donnell, Epic Games
-  - Baldur Karlsson, Valve
-  - Mathias Schott, NVIDIA
-  - Tyson Smith, NVIDIA
-  - Ingo Esser, NVIDIA
-
-=== Description
-
-This extension allows the device to generate a number of critical graphics
-commands for command buffers.
-
-When rendering a large number of objects, the device can be leveraged to
-implement a number of critical functions, like updating matrices, or
-implementing occlusion culling, frustum culling, front to back sorting, etc.
-Implementing those on the device does not require any special extension,
-since an application is free to define its own data structures, and just
-process them using shaders.
-
-However, if the application desires to quickly kick off the rendering of the
-final stream of objects, then unextended Vulkan forces the application to
-read back the processed stream and issue graphics command from the host.
-For very large scenes, the synchronization overhead and cost to generate the
-command buffer can become the bottleneck.
-This extension allows an application to generate a device side stream of
-state changes and commands, and convert it efficiently into a command buffer
-without having to read it back to the host.
-
-Furthermore, it allows incremental changes to such command buffers by
-manipulating only partial sections of a command stream -- for example
-pipeline bindings.
-Unextended Vulkan requires re-creation of entire command buffers in such a
-scenario, or updates synchronized on the host.
-
-The intended usage for this extension is for the application to:
-
-  * create sname:VkBuffer objects and retrieve physical addresses from them
-    via flink:vkGetBufferDeviceAddressEXT
-  * create a graphics pipeline using
-    sname:VkGraphicsPipelineShaderGroupsCreateInfoNV for the ability to
-    change shaders on the device.
-  * create a slink:VkIndirectCommandsLayoutNV, which lists the
-    elink:VkIndirectCommandsTokenTypeNV it wants to dynamically execute as
-    an atomic command sequence.
-    This step likely involves some internal device code compilation, since
-    the intent is for the GPU to generate the command buffer in the
-    pipeline.
-  * fill the input stream buffers with the data for each of the inputs it
-    needs.
-    Each input is an array that will be filled with token-dependent data.
-  * set up a preprocess sname:VkBuffer that uses memory according to the
-    information retrieved via
-    flink:vkGetGeneratedCommandsMemoryRequirementsNV.
-  * optionally preprocess the generated content using
-    flink:vkCmdPreprocessGeneratedCommandsNV, for example on an asynchronous
-    compute queue, or for the purpose of re-using the data in multiple
-    executions.
-  * call flink:vkCmdExecuteGeneratedCommandsNV to create and execute the
-    actual device commands for all sequences based on the inputs provided.
-
-For each draw in a sequence, the following can be specified:
-
-  * a different shader group
-  * a number of vertex buffer bindings
-  * a different index buffer, with an optional dynamic offset and index type
-  * a number of different push constants
-  * a flag that encodes the primitive winding
-
-While the GPU can be faster than a CPU to generate the commands, it will not
-happen asynchronously to the device, therefore the primary use-case is
-generating "`less`" total work (occlusion culling, classification to use
-specialized shaders, etc.).
-
-include::{generated}/interfaces/VK_NV_device_generated_commands.txt[]
-
-=== Issues
-
-1) How to name this extension ?
-
-`VK_NV_device_generated_commands`
-
-As usual, one of the hardest issues ;)
-
-Alternatives: `VK_gpu_commands`, `VK_execute_commands`,
-`VK_device_commands`, `VK_device_execute_commands`, `VK_device_execute`,
-`VK_device_created_commands`, `VK_device_recorded_commands`,
-`VK_device_generated_commands` `VK_indirect_generated_commands`
-
-2) Should we use a serial stateful token stream or stateless sequence
-descriptions?
-
-Similarly to slink:VkPipeline, fixed layouts have the most likelihood to be
-cross-vendor adoptable.
-They also benefit from being processable in parallel.
-This is a different design choice compared to the serial command stream
-generated through `GL_NV_command_list`.
-
-3) How to name a sequence description?
-
-`VkIndirectCommandsLayout` as in the NVX extension predecessor.
-
-Alternative: `VkGeneratedCommandsLayout`
-
-4) Do we want to provide code:indirectCommands inputs with layout or at
-code:indirectCommands time?
-
-Separate layout from data as Vulkan does.
-Provide full flexibility for code:indirectCommands.
-
-5) Should the input be provided as SoA or AoS?
-
-Both ways are desireable.
-AoS can provide portability to other APIs and easier to setup, while SoA
-allows to update individual inputs in a cache-efficient manner, when others
-remain static.
-
-6) How do we make developers aware of the memory requirements of
-implementation-dependent data used for the generated commands?
-
-Make the API explicit and introduce a `preprocess` slink:VkBuffer.
-Developers have to allocate it using
-flink:vkGetGeneratedCommandsMemoryRequirementsNV.
-
-In the NVX version the requirements were hidden implicitly as part of the
-command buffer reservation process, however as the memory requirements can
-be substantial, we want to give developers the ability to budget the memory
-themselves.
-By lowering the `maxSequencesCount` the memory consumption can be reduced.
-Furthermore reuse of the memory is possible, for example for doing explicit
-preprocessing and execution in a ping-pong fashion.
-
-The actual buffer size is implementation-dependent and may be zero, i.e. not
-always required.
-
-When making use of Graphics Shader Groups, the programs should behave
-similar with regards to vertex inputs, clipping and culling outputs of the
-geometry stage, as well as sample shading behavior in fragment shaders, to
-reduce the amount of the worst-case memory approximation.
-
-7) Should we allow additional per-sequence dynamic state changes?
-
-Yes
-
-Introduced a lightweight indirect state flag
-elink:VkIndirectStateFlagBitsNV.
-So far only switching front face winding state is exposed.
-Especially in CAD/DCC mirrored transforms that require such changes are
-common, and similar flexibility is given in the ray tracing instance
-description.
-
-The flag could be extended further, for example to switch between
-primitive-lists or -strips, or make other state modifications.
-
-Furthermore, as new tokens can be added easily, future extension could add
-the ability to change any elink:VkDynamicState.
-
-8) How do we allow re-using already "`generated`" code:indirectCommands?
-
-Expose a `preprocessBuffer` to reuse implementation-dependencyFlags data.
-Set the `isPreprocessed` to true in flink:vkCmdExecuteGeneratedCommandsNV.
-
-9) Under which conditions is flink:vkCmdExecuteGeneratedCommandsNV legal?
-
-It behaves like a regular draw call command.
-
-10) Is flink:vkCmdPreprocessGeneratedCommandsNV copying the input data or
-referencing it?
-
-There are multiple implementations possible:
-
-  * one could have some emulation code that parses the inputs, and generates
-    an output command buffer, therefore copying the inputs.
-  * one could just reference the inputs, and have the processing done in
-    pipe at execution time.
-
-If the data is mandated to be copied, then it puts a penalty on
-implementation that could process the inputs directly in pipe.
-If the data is "`referenced`", then it allows both types of implementation.
-
-The inputs are "`referenced`", and must: not be modified after the call to
-flink:vkCmdExecuteGeneratedCommandsNV has completed.
-
-11) Which buffer usage flags are required for the buffers referenced by
-sname:VkGeneratedCommandsInfoNV ?
-
-Reuse existing ename:VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT
-
-  * slink:VkGeneratedCommandsInfoNV::pname:preprocessBuffer
-  * slink:VkGeneratedCommandsInfoNV::pname:sequencesCountBuffer
-  * slink:VkGeneratedCommandsInfoNV::pname:sequencesIndexBuffer
-  * slink:VkIndirectCommandsStreamNV::pname:buffer
-
-12) In which pipeline stage does the device generated command expansion
-happen?
-
-flink:vkCmdPreprocessGeneratedCommandsNV is treated as if it occurs in a
-separate logical pipeline from either graphics or compute, and that pipeline
-only includes ename:VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, a new stage
-ename:VK_PIPELINE_STAGE_COMMAND_PREPROCESS_BIT_NV, and
-ename:VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT.
-This new stage has two corresponding new access types,
-ename:VK_ACCESS_COMMAND_PREPROCESS_READ_BIT_NV and
-ename:VK_ACCESS_COMMAND_PREPROCESS_WRITE_BIT_NV, used to synchronize reading
-the buffer inputs and writing the preprocess memory output.
-
-The generated output written in the preprocess buffer memory by
-flink:vkCmdExecuteGeneratedCommandsNV is considered to be consumed by the
-ename:VK_PIPELINE_STAGE_DRAW_INDIRECT_BIT pipeline stage.
-
-Thus, to synchronize from writing the input buffers to preprocessing via
-flink:vkCmdPreprocessGeneratedCommandsNV, use:
-
-  * pname:dstStageMask = ename:VK_PIPELINE_STAGE_COMMAND_PREPROCESS_BIT_NV
-  * pname:dstAccessMask = ename:VK_ACCESS_COMMAND_PREPROCESS_READ_BIT_NV
-
-To synchronize from flink:vkCmdPreprocessGeneratedCommandsNV to executing
-the generated commands by flink:vkCmdExecuteGeneratedCommandsNV, use:
-
-  * pname:srcStageMask = ename:VK_PIPELINE_STAGE_COMMAND_PREPROCESS_BIT_NV
-  * pname:srcAccessMask = ename:VK_ACCESS_COMMAND_PREPROCESS_WRITE_BIT_NV
-  * pname:dstStageMask = ename:VK_PIPELINE_STAGE_DRAW_INDIRECT_BIT
-  * pname:dstAccessMask = ename:VK_ACCESS_INDIRECT_COMMAND_READ_BIT
-
-When flink:vkCmdExecuteGeneratedCommandsNV is used with a
-pname:isPreprocessed of `VK_FALSE`, the generated commands are implicitly
-preprocessed, therefore one only needs to synchronize the inputs via:
-
-  * pname:dstStageMask = ename:VK_PIPELINE_STAGE_DRAW_INDIRECT_BIT
-  * pname:dstAccessMask = ename:VK_ACCESS_INDIRECT_COMMAND_READ_BIT
-
-13) What if most token data is "`static`", but we frequently want to render
-a subsection?
-
-Added "`sequencesIndexBuffer`".
-This allows to easier sort and filter what should actually be executed.
-
-14) What are the changes compared to the previous NVX extension?
-
-  * Compute dispatch support was removed (was never implemented in drivers).
-    There are different approaches how dispatching from the device should
-    work, hence we defer this to a future extension.
-  * The `ObjectTableNVX` was replaced by using physical buffer addresses and
-    introducing Shader Groups for the graphics pipeline.
-  * Less state changes are possible overall, but the important operations
-    are still there (reduces complexity of implementation).
-  * The API was redesigned so all inputs must be passed at both
-    preprocessing and execution time (this was implicit in NVX, now it is
-    explicit)
-  * The reservation of intermediate command space is now mandatory and
-    explicit through a preprocess buffer.
-  * The elink:VkIndirectStateFlagBitsNV were introduced
-
-15) When porting from other APIs, their indirect buffers may use different
-    enums, for example for index buffer types.
-    How to solve this?
-
-Added "`pIndexTypeValues`" to map custom `uint32_t` values to corresponding
-ename:VkIndexType.
-
-16) Do we need more shader group state overrides?
-
-The NVX version allowed all PSO states to be different, however as the goal
-is not to replace all state setup, but focus on highly-frequent state
-changes for drawing lots of objects, we reduced the amount of state
-overrides.
-Especially VkPipelineLayout as well as VkRenderPass configuration should be
-left static, the rest is still open for discussion.
-
-The current focus is just to allow VertexInput changes as well as shaders,
-while all shader groups use the same shader stages.
-
-Too much flexibility will increase the test coverage requirement as well.
-However, further extensions could allow more dynamic state as well.
-
-17) Do we need more detailed physical device feature queries/enables?
-
-An EXT version would need detailed implementor feedback to come up with a
-good set of features.
-Please contact us if you are interested, we are happy to make more features
-optional, or add further restrictions to reduce the minimum feature set of
-an EXT.
-
-18) Is there an interaction with VK_KHR_pipeline_library planned?
-
-Yes, a future version of this extension will detail the interaction, once
-VK_KHR_pipeline_library is no longer provisional.
-
-=== Example Code
-
-Open-Source samples illustrating the usage of the extension can be found at
-the following location (may not yet exist at time of writing):
-
-https://github.com/nvpro-samples/vk_device_generated_cmds
-
-
-=== Version History
-
- * Revision 1, 2020-02-20 (Christoph Kubisch)
-   - Initial version
- * Revision 2, 2020-03-09 (Christoph Kubisch)
-   - Remove VK_EXT_debug_report interactions
- * Revision 3, 2020-03-09 (Christoph Kubisch)
-    - Fix naming VkPhysicalDeviceGenerated to
-      VkPhysicalDeviceDeviceGenerated
diff --git a/registry/vulkan/appendices/VK_NV_external_memory.txt b/registry/vulkan/appendices/VK_NV_external_memory.txt
deleted file mode 100644
index d7db4fe..0000000
--- a/registry/vulkan/appendices/VK_NV_external_memory.txt
+++ /dev/null
@@ -1,73 +0,0 @@
-// Copyright (c) 2016-2020 NVIDIA Corporation
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-include::{generated}/meta/{refprefix}VK_NV_external_memory.txt[]
-
-=== Other Extension Metadata
-
-*Last Modified Date*::
-    2016-08-19
-*IP Status*::
-    No known IP claims.
-*Contributors*::
-  - James Jones, NVIDIA
-  - Carsten Rohde, NVIDIA
-
-=== Description
-
-Applications may wish to export memory to other Vulkan instances or other
-APIs, or import memory from other Vulkan instances or other APIs to enable
-Vulkan workloads to be split up across application module, process, or API
-boundaries.
-This extension enables applications to create exportable Vulkan memory
-objects such that the underlying resources can be referenced outside the
-Vulkan instance that created them.
-
-include::{generated}/interfaces/VK_NV_external_memory.txt[]
-
-=== Issues
-
-1) If memory objects are shared between processes and APIs, is this
-considered aliasing according to the rules outlined in the
-<<resources-memory-aliasing,Memory Aliasing>> section?
-
-*RESOLVED*: Yes, but strict exceptions to the rules are added to allow some
-forms of aliasing in these cases.
-Further, other extensions may build upon these new aliasing rules to define
-specific support usage within Vulkan for imported native memory objects, or
-memory objects from other APIs.
-
-2) Are new image layouts or metadata required to specify image layouts and
-layout transitions compatible with non-Vulkan APIs, or with other instances
-of the same Vulkan driver?
-
-*RESOLVED*: No.
-Separate instances of the same Vulkan driver running on the same GPU should
-have identical internal layout semantics, so applictions have the tools they
-need to ensure views of images are consistent between the two instances.
-Other APIs will fall into two categories: Those that are Vulkan compatible
-(a term to be defined by subsequent interopability extensions), or Vulkan
-incompatible.
-When sharing images with Vulkan incompatible APIs, the Vulkan image must be
-transitioned to the ename:VK_IMAGE_LAYOUT_GENERAL layout before handing it
-off to the external API.
-
-Note this does not attempt to address cross-device transitions, nor
-transitions to engines on the same device which are not visible within the
-Vulkan API.
-Both of these are beyond the scope of this extension.
-
-=== Examples
-
-[source,c++]
-----------------------------------------
-
-    // TODO: Write some sample code here.
-
-----------------------------------------
-
-=== Version History
-
-  * Revision 1, 2016-08-19 (James Jones)
-    - Initial draft
diff --git a/registry/vulkan/appendices/VK_NV_external_memory_capabilities.txt b/registry/vulkan/appendices/VK_NV_external_memory_capabilities.txt
deleted file mode 100644
index bd9629d..0000000
--- a/registry/vulkan/appendices/VK_NV_external_memory_capabilities.txt
+++ /dev/null
@@ -1,65 +0,0 @@
-// Copyright (c) 2016-2020 NVIDIA Corporation
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-include::{generated}/meta/{refprefix}VK_NV_external_memory_capabilities.txt[]
-
-=== Other Extension Metadata
-
-*Last Modified Date*::
-    2016-08-19
-*IP Status*::
-    No known IP claims.
-*Interactions and External Dependencies*::
-  - Interacts with Vulkan 1.1.
-  - Interacts with `apiext:VK_KHR_dedicated_allocation`.
-  - Interacts with `apiext:VK_NV_dedicated_allocation`.
-*Contributors*::
-  - James Jones, NVIDIA
-
-=== Description
-
-Applications may wish to import memory from the Direct 3D API, or export
-memory to other Vulkan instances.
-This extension provides a set of capability queries that allow applications
-determine what types of win32 memory handles an implementation supports for
-a given set of use cases.
-
-include::{generated}/interfaces/VK_NV_external_memory_capabilities.txt[]
-
-=== Issues
-
-1) Why do so many external memory capabilities need to be queried on a
-per-memory-handle-type basis?
-
-*RESOLVED*: This is because some handle types are based on OS-native objects
-that have far more limited capabilities than the very generic Vulkan memory
-objects.
-Not all memory handle types can name memory objects that support 3D images,
-for example.
-Some handle types cannot even support the deferred image and memory binding
-behavior of Vulkan and require specifying the image when allocating or
-importing the memory object.
-
-2) Does the slink:VkExternalImageFormatPropertiesNV struct need to include a
-list of memory type bits that support the given handle type?
-
-*RESOLVED*: No.
-The memory types that do not support the handle types will simply be
-filtered out of the results returned by flink:vkGetImageMemoryRequirements
-when a set of handle types was specified at image creation time.
-
-3) Should the non-opaque handle types be moved to their own extension?
-
-*RESOLVED*: Perhaps.
-However, defining the handle type bits does very little and does not require
-any platform-specific types on its own, and it is easier to maintain the
-bitmask values in a single extension for now.
-Presumably more handle types could be added by separate extensions though,
-and it would be midly weird to have some platform-specific ones defined in
-the core spec and some in extensions
-
-=== Version History
-
- * Revision 1, 2016-08-19 (James Jones)
-   - Initial version
diff --git a/registry/vulkan/appendices/VK_NV_external_memory_rdma.txt b/registry/vulkan/appendices/VK_NV_external_memory_rdma.txt
deleted file mode 100644
index 761d7e5..0000000
--- a/registry/vulkan/appendices/VK_NV_external_memory_rdma.txt
+++ /dev/null
@@ -1,100 +0,0 @@
-// Copyright (c) 2016-2020 NVIDIA Corporation
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-include::{generated}/meta/{refprefix}VK_NV_external_memory_rdma.txt[]
-
-=== Other Extension Metadata
-
-*Last Modified Date*::
-    2021-04-19
-*IP Status*::
-    No known IP claims.
-*Contributors*::
-  - Carsten Rohde, NVIDIA
-
-=== Description
-
-This extension adds support for allocating memory which can be used for
-remote direct memory access (RDMA) from other devices.
-
-include::{generated}/interfaces/VK_NV_external_memory_rdma.txt[]
-
-=== Issues
-
-
-=== Examples
-
-[source,cpp]
-----
-
-VkPhysicalDeviceMemoryBudgetPropertiesEXT memoryBudgetProperties = { VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_BUDGET_PROPERTIES_EXT };
-VkPhysicalDeviceMemoryProperties2 memoryProperties2 = { VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_PROPERTIES_2, &memoryBudgetProperties };
-vkGetPhysicalDeviceMemoryProperties2(physicalDevice, &memoryProperties2);
-uint32_t heapIndex = (uint32_t)-1;
-for (uint32_t memoryType = 0; memoryType < memoryProperties2.memoryProperties.memoryTypeCount; memoryType++) {
-    if (memoryProperties2.memoryProperties.memoryTypes[memoryType].propertyFlags & VK_MEMORY_PROPERTY_RDMA_CAPABLE_BIT_NV) {
-        heapIndex = memoryProperties2.memoryProperties.memoryTypes[memoryType].heapIndex;
-        break;
-    }
-}
-if ((heapIndex == (uint32_t)-1) ||
-    (memoryBudgetProperties.heapBudget[heapIndex] < size)) {
-    return;
-}
-
-VkPhysicalDeviceExternalBufferInfo externalBufferInfo = { VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_BUFFER_INFO };
-externalBufferInfo.usage = VK_BUFFER_USAGE_TRANSFER_SRC_BIT | VK_BUFFER_USAGE_TRANSFER_DST_BIT;
-externalBufferInfo.handleType = VK_EXTERNAL_MEMORY_HANDLE_TYPE_RDMA_ADDRESS_BIT_NV;
-
-VkExternalBufferProperties externalBufferProperties = { VK_STRUCTURE_TYPE_EXTERNAL_BUFFER_PROPERTIES };
-vkGetPhysicalDeviceExternalBufferProperties(physicalDevice, &externalBufferInfo, &externalBufferProperties);
-
-if (!(externalBufferProperties.externalMemoryProperties.externalMemoryFeatures & VK_EXTERNAL_MEMORY_FEATURE_EXPORTABLE_BIT)) {
-    return;
-}
-
-VkExternalMemoryBufferCreateInfo externalMemoryBufferCreateInfo = { VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_BUFFER_CREATE_INFO };
-externalMemoryBufferCreateInfo.handleTypes = VK_EXTERNAL_MEMORY_HANDLE_TYPE_RDMA_ADDRESS_BIT_NV;
-
-VkBufferCreateInfo bufferCreateInfo = { VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO, &externalMemoryBufferCreateInfo };
-bufferCreateInfo.size = size;
-bufferCreateInfo.usage = VK_BUFFER_USAGE_TRANSFER_SRC_BIT | VK_BUFFER_USAGE_TRANSFER_DST_BIT;
-
-VkMemoryRequirements mem_reqs;
-vkCreateBuffer(device, &bufferCreateInfo, NULL, &buffer);
-vkGetBufferMemoryRequirements(device, buffer, &mem_reqs);
-
-VkExportMemoryAllocateInfo exportMemoryAllocateInfo = { VK_STRUCTURE_TYPE_EXPORT_MEMORY_ALLOCATE_INFO };
-exportMemoryAllocateInfo.handleTypes = VK_EXTERNAL_MEMORY_HANDLE_TYPE_RDMA_ADDRESS_BIT_NV;
-
-// Find memory type index
-uint32_t i = 0;
-for (; i < VK_MAX_MEMORY_TYPES; i++) {
-    if ((mem_reqs.memoryTypeBits & (1 << i)) &&
-        (memoryProperties.memoryTypes[i].propertyFlags & VK_MEMORY_PROPERTY_RDMA_CAPABLE_BIT_NV)) {
-        break;
-    }
-}
-
-VkMemoryAllocateInfo memAllocInfo = { VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO, &exportMemoryAllocateInfo };
-memAllocInfo.allocationSize = mem_reqs.size;
-memAllocInfo.memoryTypeIndex = i;
-
-vkAllocateMemory(device, &memAllocInfo, NULL, &mem);
-vkBindBufferMemory(device, buffer, mem, 0);
-
-VkMemoryGetRemoteAddressInfoNV getMemoryRemoteAddressInfo = { VK_STRUCTURE_TYPE_MEMORY_GET_REMOTE_ADDRESS_INFO_NV };
-getMemoryRemoteAddressInfo.memory = mem;
-getMemoryRemoteAddressInfo.handleType = VK_EXTERNAL_MEMORY_HANDLE_TYPE_RDMA_ADDRESS_BIT_NV;
-
-VkRemoteAddressNV rdmaAddress;
-vkGetMemoryRemoteAddressNV(device, &getMemoryRemoteAddressInfo, &rdmaAddress);
-// address returned in 'rdmaAddress' can be used by external devices to initiate RDMA transfers
-
-----
-
-=== Version History
-
-  * Revision 1, 2020-12-15 (Carsten Rohde)
-    - Internal revisions
diff --git a/registry/vulkan/appendices/VK_NV_external_memory_win32.txt b/registry/vulkan/appendices/VK_NV_external_memory_win32.txt
deleted file mode 100644
index febfc34..0000000
--- a/registry/vulkan/appendices/VK_NV_external_memory_win32.txt
+++ /dev/null
@@ -1,215 +0,0 @@
-// Copyright (c) 2016-2020 NVIDIA Corporation
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-include::{generated}/meta/{refprefix}VK_NV_external_memory_win32.txt[]
-
-=== Other Extension Metadata
-
-*Last Modified Date*::
-    2016-08-19
-*IP Status*::
-    No known IP claims.
-*Contributors*::
-  - James Jones, NVIDIA
-  - Carsten Rohde, NVIDIA
-
-=== Description
-
-Applications may wish to export memory to other Vulkan instances or other
-APIs, or import memory from other Vulkan instances or other APIs to enable
-Vulkan workloads to be split up across application module, process, or API
-boundaries.
-This extension enables win32 applications to export win32 handles from
-Vulkan memory objects such that the underlying resources can be referenced
-outside the Vulkan instance that created them, and import win32 handles
-created in the Direct3D API to Vulkan memory objects.
-
-include::{generated}/interfaces/VK_NV_external_memory_win32.txt[]
-
-=== Issues
-
-1) If memory objects are shared between processes and APIs, is this
-considered aliasing according to the rules outlined in the
-<<resources-memory-aliasing,Memory Aliasing>> section?
-
-*RESOLVED*: Yes, but strict exceptions to the rules are added to allow some
-forms of aliasing in these cases.
-Further, other extensions may build upon these new aliasing rules to define
-specific support usage within Vulkan for imported native memory objects, or
-memory objects from other APIs.
-
-2) Are new image layouts or metadata required to specify image layouts and
-layout transitions compatible with non-Vulkan APIs, or with other instances
-of the same Vulkan driver?
-
-*RESOLVED*: No.
-Separate instances of the same Vulkan driver running on the same GPU should
-have identical internal layout semantics, so applictions have the tools they
-need to ensure views of images are consistent between the two instances.
-Other APIs will fall into two categories: Those that are Vulkan compatible
-(a term to be defined by subsequent interopability extensions), or Vulkan
-incompatible.
-When sharing images with Vulkan incompatible APIs, the Vulkan image must be
-transitioned to the ename:VK_IMAGE_LAYOUT_GENERAL layout before handing it
-off to the external API.
-
-Note this does not attempt to address cross-device transitions, nor
-transitions to engines on the same device which are not visible within the
-Vulkan API.
-Both of these are beyond the scope of this extension.
-
-3) Do applications need to call code:CloseHandle() on the values returned
-from flink:vkGetMemoryWin32HandleNV when pname:handleType is
-ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_BIT_NV?
-
-*RESOLVED*: Yes, unless it is passed back in to another driver instance to
-import the object.
-A successful get call transfers ownership of the handle to the application,
-while an import transfers ownership to the associated driver.
-Destroying the memory object will not destroy the handle or the handle's
-reference to the underlying memory resource.
-
-=== Examples
-
-[source,c++]
---------------------------------------
-
-    //
-    // Create an exportable memory object and export an external
-    // handle from it.
-    //
-
-    // Pick an external format and handle type.
-    static const VkFormat format = VK_FORMAT_R8G8B8A8_UNORM;
-    static const VkExternalMemoryHandleTypeFlagsNV handleType =
-        VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_BIT_NV;
-
-    extern VkPhysicalDevice physicalDevice;
-    extern VkDevice device;
-
-    VkPhysicalDeviceMemoryProperties memoryProperties;
-    VkExternalImageFormatPropertiesNV properties;
-    VkExternalMemoryImageCreateInfoNV externalMemoryImageCreateInfo;
-    VkDedicatedAllocationImageCreateInfoNV dedicatedImageCreateInfo;
-    VkImageCreateInfo imageCreateInfo;
-    VkImage image;
-    VkMemoryRequirements imageMemoryRequirements;
-    uint32_t numMemoryTypes;
-    uint32_t memoryType;
-    VkExportMemoryAllocateInfoNV exportMemoryAllocateInfo;
-    VkDedicatedAllocationMemoryAllocateInfoNV dedicatedAllocationInfo;
-    VkMemoryAllocateInfo memoryAllocateInfo;
-    VkDeviceMemory memory;
-    VkResult result;
-    HANDLE memoryHnd;
-
-    // Figure out how many memory types the device supports
-    vkGetPhysicalDeviceMemoryProperties(physicalDevice,
-                                        &memoryProperties);
-    numMemoryTypes = memoryProperties.memoryTypeCount;
-
-    // Check the external handle type capabilities for the chosen format
-    // Exportable 2D image support with at least 1 mip level, 1 array
-    // layer, and VK_SAMPLE_COUNT_1_BIT using optimal tiling and supporting
-    // texturing and color rendering is required.
-    result = vkGetPhysicalDeviceExternalImageFormatPropertiesNV(
-        physicalDevice,
-        format,
-        VK_IMAGE_TYPE_2D,
-        VK_IMAGE_TILING_OPTIMAL,
-        VK_IMAGE_USAGE_SAMPLED_BIT |
-        VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT,
-        0,
-        handleType,
-        &properties);
-
-    if ((result != VK_SUCCESS) ||
-        !(properties.externalMemoryFeatures &
-          VK_EXTERNAL_MEMORY_FEATURE_EXPORTABLE_BIT_NV)) {
-        abort();
-    }
-
-    // Set up the external memory image creation info
-    memset(&externalMemoryImageCreateInfo,
-           0, sizeof(externalMemoryImageCreateInfo));
-    externalMemoryImageCreateInfo.sType =
-        VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_IMAGE_CREATE_INFO_NV;
-    externalMemoryImageCreateInfo.handleTypes = handleType;
-    if (properties.externalMemoryFeatures &
-        VK_EXTERNAL_MEMORY_FEATURE_DEDICATED_ONLY_BIT_NV) {
-        memset(&dedicatedImageCreateInfo, 0, sizeof(dedicatedImageCreateInfo));
-        dedicatedImageCreateInfo.sType =
-            VK_STRUCTURE_TYPE_DEDICATED_ALLOCATION_IMAGE_CREATE_INFO_NV;
-        dedicatedImageCreateInfo.dedicatedAllocation = VK_TRUE;
-        externalMemoryImageCreateInfo.pNext = &dedicatedImageCreateInfo;
-    }
-    // Set up the  core image creation info
-    memset(&imageCreateInfo, 0, sizeof(imageCreateInfo));
-    imageCreateInfo.sType = VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO;
-    imageCreateInfo.pNext = &externalMemoryImageCreateInfo;
-    imageCreateInfo.format = format;
-    imageCreateInfo.extent.width = 64;
-    imageCreateInfo.extent.height = 64;
-    imageCreateInfo.extent.depth = 1;
-    imageCreateInfo.mipLevels = 1;
-    imageCreateInfo.arrayLayers = 1;
-    imageCreateInfo.samples = VK_SAMPLE_COUNT_1_BIT;
-    imageCreateInfo.tiling = VK_IMAGE_TILING_OPTIMAL;
-    imageCreateInfo.usage = VK_IMAGE_USAGE_SAMPLED_BIT |
-        VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT;
-    imageCreateInfo.sharingMode = VK_SHARING_MODE_EXCLUSIVE;
-    imageCreateInfo.initialLayout = VK_IMAGE_LAYOUT_UNDEFINED;
-
-    vkCreateImage(device, &imageCreateInfo, NULL, &image);
-
-    vkGetImageMemoryRequirements(device,
-                                 image,
-                                 &imageMemoryRequirements);
-
-    // For simplicity, just pick the first compatible memory type.
-    for (memoryType = 0; memoryType < numMemoryTypes; memoryType++) {
-        if ((1 << memoryType) & imageMemoryRequirements.memoryTypeBits) {
-            break;
-        }
-    }
-
-    // At least one memory type must be supported given the prior external
-    // handle capability check.
-    assert(memoryType < numMemoryTypes);
-
-    // Allocate the external memory object.
-    memset(&exportMemoryAllocateInfo, 0, sizeof(exportMemoryAllocateInfo));
-    exportMemoryAllocateInfo.sType =
-        VK_STRUCTURE_TYPE_EXPORT_MEMORY_ALLOCATE_INFO_NV;
-    exportMemoryAllocateInfo.handleTypes = handleType;
-    if (properties.externalMemoryFeatures &
-        VK_EXTERNAL_MEMORY_FEATURE_DEDICATED_ONLY_BIT_NV) {
-        memset(&dedicatedAllocationInfo, 0, sizeof(dedicatedAllocationInfo));
-        dedicatedAllocationInfo.sType =
-            VK_STRUCTURE_TYPE_DEDICATED_ALLOCATION_MEMORY_ALLOCATE_INFO_NV;
-        dedicatedAllocationInfo.image = image;
-        exportMemoryAllocateInfo.pNext = &dedicatedAllocationInfo;
-    }
-    memset(&memoryAllocateInfo, 0, sizeof(memoryAllocateInfo));
-    memoryAllocateInfo.sType = VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO;
-    memoryAllocateInfo.pNext = &exportMemoryAllocateInfo;
-    memoryAllocateInfo.allocationSize = imageMemoryRequirements.size;
-    memoryAllocateInfo.memoryTypeIndex = memoryType;
-
-    vkAllocateMemory(device, &memoryAllocateInfo, NULL, &memory);
-
-    if (!(properties.externalMemoryFeatures &
-          VK_EXTERNAL_MEMORY_FEATURE_DEDICATED_ONLY_BIT_NV)) {
-        vkBindImageMemory(device, image, memory, 0);
-    }
-
-    // Get the external memory opaque FD handle
-    vkGetMemoryWin32HandleNV(device, memory, &memoryHnd);
-
---------------------------------------
-
-=== Version History
-
-  * Revision 1, 2016-08-11 (James Jones)
-    - Initial draft
diff --git a/registry/vulkan/appendices/VK_NV_fill_rectangle.txt b/registry/vulkan/appendices/VK_NV_fill_rectangle.txt
deleted file mode 100644
index ebc978a..0000000
--- a/registry/vulkan/appendices/VK_NV_fill_rectangle.txt
+++ /dev/null
@@ -1,29 +0,0 @@
-// Copyright (c) 2016-2020 NVIDIA Corporation
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-include::{generated}/meta/{refprefix}VK_NV_fill_rectangle.txt[]
-
-=== Other Extension Metadata
-
-*Last Modified Date*::
-    2017-05-22
-*Contributors*::
-  - Jeff Bolz, NVIDIA
-
-=== Description
-
-This extension adds a new elink:VkPolygonMode code:enum where a triangle is
-rasterized by computing and filling its axis-aligned screen-space bounding
-box, disregarding the actual triangle edges.
-This can be useful for drawing a rectangle without being split into two
-triangles with an internal edge.
-It is also useful to minimize the number of primitives that need to be
-drawn, particularly for a user interface.
-
-include::{generated}/interfaces/VK_NV_fill_rectangle.txt[]
-
-=== Version History
-
-  * Revision 1, 2017-05-22 (Jeff Bolz)
-    - Internal revisions
diff --git a/registry/vulkan/appendices/VK_NV_fragment_coverage_to_color.txt b/registry/vulkan/appendices/VK_NV_fragment_coverage_to_color.txt
deleted file mode 100644
index 1fd7254..0000000
--- a/registry/vulkan/appendices/VK_NV_fragment_coverage_to_color.txt
+++ /dev/null
@@ -1,34 +0,0 @@
-// Copyright (c) 2017-2020 NVIDIA Corporation
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-include::{generated}/meta/{refprefix}VK_NV_fragment_coverage_to_color.txt[]
-
-=== Other Extension Metadata
-
-*Last Modified Date*::
-    2017-05-21
-*Contributors*::
-  - Jeff Bolz, NVIDIA
-
-=== Description
-
-This extension allows the fragment coverage value, represented as an integer
-bitmask, to be substituted for a color output being written to a
-single-component color attachment with integer components (e.g.
-ename:VK_FORMAT_R8_UINT).
-The functionality provided by this extension is different from simply
-writing the code:SampleMask fragment shader output, in that the coverage
-value written to the framebuffer is taken after stencil test and depth test,
-as well as after fragment operations such as alpha-to-coverage.
-
-This functionality may be useful for deferred rendering algorithms, where
-the second pass needs to know which samples belong to which original
-fragments.
-
-include::{generated}/interfaces/VK_NV_fragment_coverage_to_color.txt[]
-
-=== Version History
-
-  * Revision 1, 2017-05-21 (Jeff Bolz)
-    - Internal revisions
diff --git a/registry/vulkan/appendices/VK_NV_fragment_shader_barycentric.txt b/registry/vulkan/appendices/VK_NV_fragment_shader_barycentric.txt
deleted file mode 100644
index b66d16b..0000000
--- a/registry/vulkan/appendices/VK_NV_fragment_shader_barycentric.txt
+++ /dev/null
@@ -1,118 +0,0 @@
-// Copyright (c) 2018-2020 NVIDIA Corporation
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-include::{generated}/meta/{refprefix}VK_NV_fragment_shader_barycentric.txt[]
-
-=== Other Extension Metadata
-
-*Last Modified Date*::
-    2018-08-03
-*IP Status*::
-    No known IP claims.
-*Interactions and External Dependencies*::
-  - This extension requires
-    {spirv}/NV/SPV_NV_fragment_shader_barycentric.html[`SPV_NV_fragment_shader_barycentric`]
-  - This extension provides API support for
-    https://github.com/KhronosGroup/GLSL/blob/master/extensions/nv/GLSL_NV_fragment_shader_barycentric.txt[`GL_NV_fragment_shader_barycentric`]
-*Contributors*::
-  - Pat Brown, NVIDIA
-  - Daniel Koch, NVIDIA
-
-=== Description
-
-This extension adds support for the following SPIR-V extension in Vulkan:
-
-  * {spirv}/NV/SPV_NV_fragment_shader_barycentric.html[`SPV_NV_fragment_shader_barycentric`]
-
-The extension provides access to three additional fragment shader variable
-decorations in SPIR-V:
-
-  * code:PerVertexNV, which indicates that a fragment shader input will not
-    have interpolated values, but instead must be accessed with an extra
-    array index that identifies one of the vertices of the primitive
-    producing the fragment
-  * code:BaryCoordNV, which indicates that the variable is a three-component
-    floating-point vector holding barycentric weights for the fragment
-    produced using perspective interpolation
-  * code:BaryCoordNoPerspNV, which indicates that the variable is a
-    three-component floating-point vector holding barycentric weights for
-    the fragment produced using linear interpolation
-
-When using GLSL source-based shader languages, the following variables from
-`GL_NV_fragment_shader_barycentric` maps to these SPIR-V built-in
-decorations:
-
-  * `in vec3 gl_BaryCoordNV;` -> code:BaryCoordNV
-  * `in vec3 gl_BaryCoordNoPerspNV;` -> code:BaryCoordNoPerspNV
-
-GLSL variables declared using the code:__pervertexNV GLSL qualifier are
-expected to be decorated with code:PerVertexNV in SPIR-V.
-
-include::{generated}/interfaces/VK_NV_fragment_shader_barycentric.txt[]
-
-=== New Built-In Variables
-
-  * <<interfaces-builtin-variables-barycoordnv,code:BaryCoordNV>>
-  * <<interfaces-builtin-variables-barycoordnoperspnv,code:BaryCoordNoPerspNV>>
-
-=== New SPIR-V Decorations
-
-  * <<shaders-interpolation-decorations-pervertexnv,code:PerVertexNV>>
-
-=== New SPIR-V Capabilities
-
-  * <<spirvenv-capabilities-table-FragmentBarycentricNV,code:FragmentBarycentricNV>>
-
-=== Issues
-
-(1) The AMD_shader_explicit_vertex_parameter extension provides similar
-    functionality.
-    Why write a new extension, and how is this extension different?
-
-*RESOLVED*: For the purposes of Vulkan/SPIR-V, we chose to implement a
-separate extension due to several functional differences.
-
-First, the hardware supporting this extension can provide a three-component
-barycentric weight vector for variables decorated with code:BaryCoordNV,
-while variables decorated with code:BaryCoordSmoothAMD provide only two
-components.
-In some cases, it may be more efficient to explicitly interpolate an
-attribute via:
-
-        float value = (baryCoordNV.x * v[0].attrib +
-                       baryCoordNV.y * v[1].attrib +
-                       baryCoordNV.z * v[2].attrib);
-
-instead of
-
-       float value = (baryCoordSmoothAMD.x * (v[0].attrib - v[2].attrib) +
-                      baryCoordSmoothAMD.y * (v[1].attrib - v[2].attrib) +
-                      v[2].attrib);
-
-Additionally, the semantics of the decoration code:BaryCoordPullModelAMD do
-not appear to map to anything supported by the initial hardware
-implementation of this extension.
-
-This extension provides a smaller number of decorations than the AMD
-extension, as we expect that shaders could derive variables decorated with
-things like code:BaryCoordNoPerspCentroidAMD with explicit attribute
-interpolation instructions.
-One other relevant difference is that explicit per-vertex attribute access
-using this extension does not require a constant vertex number.
-
-(2) Why do the built-in SPIR-V decorations for this extension include two
-separate built-ins code:BaryCoordNV and code:BaryCoordNoPerspNV when a "`no
-perspective`" variable could be decorated with code:BaryCoordNV and
-code:NoPerspective?
-
-*RESOLVED*: The SPIR-V extension for this feature chose to mirror the
-behavior of the GLSL extension, which provides two built-in variables.
-Additionally, it is not clear that its a good idea (or even legal) to have
-two variables using the "`same attribute`", but with different interpolation
-modifiers.
-
-=== Version History
-
-  * Revision 1, 2018-08-03 (Pat Brown)
-    - Internal revisions
diff --git a/registry/vulkan/appendices/VK_NV_fragment_shading_rate_enums.txt b/registry/vulkan/appendices/VK_NV_fragment_shading_rate_enums.txt
deleted file mode 100644
index 7469ece..0000000
--- a/registry/vulkan/appendices/VK_NV_fragment_shading_rate_enums.txt
+++ /dev/null
@@ -1,100 +0,0 @@
-// Copyright (c) 2020 NVIDIA Corporation
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-include::{generated}/meta/{refprefix}VK_NV_fragment_shading_rate_enums.txt[]
-
-=== Other Extension Metadata
-
-*Last Modified Date*::
-    2020-09-02
-
-*Contributors*::
-  - Pat Brown, NVIDIA
-  - Jeff Bolz, NVIDIA
-
-=== Description
-
-This extension builds on the fragment shading rate functionality provided by
-the VK_KHR_fragment_shading_rate extension, adding support for
-"`supersample`" fragment shading rates that trigger multiple fragment shader
-invocations per pixel as well as a "`no invocations`" shading rate that
-discards any portions of a primitive that would use that shading rate.
-
-include::{generated}/interfaces/VK_NV_fragment_shading_rate_enums.txt[]
-
-=== Issues
-
-. Why was this extension created?   How should it be named?
-+
---
-*RESOLVED*: The primary goal of this extension was to expose support for
-supersample and "`no invocations`" shading rates, which are supported by the
-VK_NV_shading_rate_image extension but not by VK_KHR_fragment_shading_rate.
-Because VK_KHR_fragment_shading_rate specifies the primitive shading rate
-using a fragment size in pixels, it lacks a good way to specify supersample
-rates.
-To deal with this, we defined enums covering shading rates supported by the
-KHR extension as well as the new shading rates and added structures and APIs
-accepting shading rate enums instead of fragment sizes.
-
-Since this extension adds two different types of shading rates, both
-expressed using enums, we chose the extension name
-VK_NV_fragment_shading_rate_enums.
---
-
-. Is this a standalone extension?
-+
---
-*RESOLVED*: No, this extension requires VK_KHR_fragment_shading_rate.
-In order to use the features of this extension, applications must enable the
-relevant features of KHR extension.
---
-
-. How are the shading rate enums used, and how were the enum values assigned?
-+
---
-*RESOLVED*: The shading rates supported by the enums in this extension are
-accepted as pipeline, primitive, and attachment shading rates and behave
-identically.
-For the shading rates also supported by the KHR extension, the values
-assigned to the corresponding enums are identical to the values already used
-for the primitive and attachment shading rates in the KHR extension.
-For those enums, bits 0 and 1 specify the base two logarithm of the fragment
-height and bits 2 and 3 specify the base two logarithm of the fragment
-width.
-For the new shading rates added by this extension, we chose to use 11
-through 14 (10 plus the base two logarithm of the invocation count) for the
-supersample rates and 15 for the "`no invocations`" rate.
-None of those values are supported as primitive or attachment shading rates
-by the KHR extension.
---
-
-. Between this extension, VK_KHR_fragment_shading_rate, and
-VK_NV_shading_rate_image, there are three different ways to specify shading
-rate state in a pipeline.
-How should we handle this?
-+
---
-*RESOLVED*: We do not allow the concurrent use of VK_NV_shading_rate_image
-and VK_KHR_fragment_shading_rate; it is an error to enable shading rate
-features from both extensions.
-But we do allow applications to enable this extension together with
-VK_KHR_fragment_shading_rate together.
-While we expect that applications will never attach pipeline CreateInfo
-structures for both this extension and the KHR extension concurrently,
-Vulkan does not have any precedent forbidding such behavior and instead
-typically treats a pipeline created without an extension-specific CreateInfo
-structure as equivalent to one containing default values specified by the
-extension.
-Rather than adding such a rule considering the presence or absence of our
-new CreateInfo structure, we instead included a pname:shadingRateType member
-to slink:VkPipelineFragmentShadingRateEnumStateCreateInfoNV that selects
-between using state specified by that structure and state specified by
-slink:VkPipelineFragmentShadingRateStateCreateInfoKHR.
---
-
-=== Version History
-
-  * Revision 1, 2020-09-02 (pbrown)
-    - Internal revisions
diff --git a/registry/vulkan/appendices/VK_NV_framebuffer_mixed_samples.txt b/registry/vulkan/appendices/VK_NV_framebuffer_mixed_samples.txt
deleted file mode 100644
index 12927a1..0000000
--- a/registry/vulkan/appendices/VK_NV_framebuffer_mixed_samples.txt
+++ /dev/null
@@ -1,61 +0,0 @@
-// Copyright (c) 2017-2020 NVIDIA Corporation
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-include::{generated}/meta/{refprefix}VK_NV_framebuffer_mixed_samples.txt[]
-
-=== Other Extension Metadata
-
-*Last Modified Date*::
-    2017-06-04
-*Contributors*::
-  - Jeff Bolz, NVIDIA
-
-=== Description
-
-This extension allows multisample rendering with a raster and depth/stencil
-sample count that is larger than the color sample count.
-Rasterization and the results of the depth and stencil tests together
-determine the portion of a pixel that is "`covered`".
-It can be useful to evaluate coverage at a higher frequency than color
-samples are stored.
-This coverage is then "`reduced`" to a collection of covered color samples,
-each having an opacity value corresponding to the fraction of the color
-sample covered.
-The opacity can optionally be blended into individual color samples.
-
-Rendering with fewer color samples than depth/stencil samples greatly
-reduces the amount of memory and bandwidth consumed by the color buffer.
-However, converting the coverage values into opacity introduces artifacts
-where triangles share edges and may: not be suitable for normal triangle
-mesh rendering.
-
-One expected use case for this functionality is Stencil-then-Cover path
-rendering (similar to the OpenGL GL_NV_path_rendering extension).
-The stencil step determines the coverage (in the stencil buffer) for an
-entire path at the higher sample frequency, and then the cover step draws
-the path into the lower frequency color buffer using the coverage
-information to antialias path edges.
-With this two-step process, internal edges are fully covered when
-antialiasing is applied and there is no corruption on these edges.
-
-The key features of this extension are:
-
-  * It allows render pass and framebuffer objects to be created where the
-    number of samples in the depth/stencil attachment in a subpass is a
-    multiple of the number of samples in the color attachments in the
-    subpass.
-  * A coverage reduction step is added to Fragment Operations which converts
-    a set of covered raster/depth/stencil samples to a set of color samples
-    that perform blending and color writes.
-    The coverage reduction step also includes an optional coverage
-    modulation step, multiplying color values by a fractional opacity
-    corresponding to the number of associated raster/depth/stencil samples
-    covered.
-
-include::{generated}/interfaces/VK_NV_framebuffer_mixed_samples.txt[]
-
-=== Version History
-
-  * Revision 1, 2017-06-04 (Jeff Bolz)
-    - Internal revisions
diff --git a/registry/vulkan/appendices/VK_NV_geometry_shader_passthrough.txt b/registry/vulkan/appendices/VK_NV_geometry_shader_passthrough.txt
deleted file mode 100644
index efb6654..0000000
--- a/registry/vulkan/appendices/VK_NV_geometry_shader_passthrough.txt
+++ /dev/null
@@ -1,168 +0,0 @@
-// Copyright (c) 2017-2020 NVIDIA Corporation
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-include::{generated}/meta/{refprefix}VK_NV_geometry_shader_passthrough.txt[]
-
-=== Other Extension Metadata
-
-*Last Modified Date*::
-    2017-02-15
-*Interactions and External Dependencies*::
-  - This extension requires
-    {spirv}/NV/SPV_NV_geometry_shader_passthrough.html[`SPV_NV_geometry_shader_passthrough`]
-  - This extension provides API support for
-    https://www.khronos.org/registry/OpenGL/extensions/NV/NV_geometry_shader_passthrough.txt[`GL_NV_geometry_shader_passthrough`]
-  - This extension requires the pname:geometryShader feature.
-*Contributors*::
-  - Piers Daniell, NVIDIA
-  - Jeff Bolz, NVIDIA
-
-=== Description
-
-This extension adds support for the following SPIR-V extension in Vulkan:
-
-  * `SPV_NV_geometry_shader_passthrough`
-
-Geometry shaders provide the ability for applications to process each
-primitive sent through the graphics pipeline using a programmable shader.
-However, one common use case treats them largely as a "`passthrough`".
-In this use case, the bulk of the geometry shader code simply copies inputs
-from each vertex of the input primitive to corresponding outputs in the
-vertices of the output primitive.
-Such shaders might also compute values for additional built-in or
-user-defined per-primitive attributes (e.g., code:Layer) to be assigned to
-all the vertices of the output primitive.
-
-This extension provides access to the code:PassthroughNV decoration under
-the code:GeometryShaderPassthroughNV capability.
-Adding this to a geometry shader input variable specifies that the values of
-this input are copied to the corresponding vertex of the output primitive.
-
-When using GLSL source-based shading languages, the code:passthrough layout
-qualifier from `GL_NV_geometry_shader_passthrough` maps to the
-code:PassthroughNV decoration.
-To use the code:passthrough layout, in GLSL the
-`GL_NV_geometry_shader_passthrough` extension must be enabled.
-Behaviour is described in the `GL_NV_geometry_shader_passthrough` extension
-specification.
-
-include::{generated}/interfaces/VK_NV_geometry_shader_passthrough.txt[]
-
-=== New Variable Decoration
-
-  * <<geometry-passthrough-passthrough,code:PassthroughNV>> in
-    <<geometry-passthrough,Geometry Shader Passthrough>>
-
-=== New SPIR-V Capabilities
-
-  * <<spirvenv-capabilities-table-GeometryShaderPassthroughNV,GeometryShaderPassthroughNV>>
-
-=== Issues
-
-1) Should we require or allow a passthrough geometry shader to specify the
-output layout qualifiers for the output primitive type and maximum vertex
-count in the SPIR-V?
-
-*RESOLVED*: Yes they should be required in the SPIR-V.
-Per GL_NV_geometry_shader_passthrough they are not permitted in the GLSL
-source shader, but SPIR-V is lower-level.
-It is straightforward for the GLSL compiler to infer them from the input
-primitive type and to explicitly emit them in the SPIR-V according to the
-following table.
-
-[options="header"]
-|====
-| Input Layout     | Implied Output Layout
-| points           | `layout(points, max_vertices=1)`
-| lines            | `layout(line_strip, max_vertices=2)`
-| triangles        | `layout(triangle_strip, max_vertices=3)`
-|====
-
-2) How does interface matching work with passthrough geometry shaders?
-
-*RESOLVED*: This is described in <<geometry-passthrough-interface,
-Passthrough Interface Matching>>.
-In GL when using passthough geometry shaders in separable mode, all inputs
-must also be explicitly assigned location layout qualifiers.
-In Vulkan all SPIR-V shader inputs (except built-ins) must also have
-location decorations specified.
-Redeclarations of built-in varables that add the passthrough layout
-qualifier are exempted from the rule requiring location assignment because
-built-in variables do not have locations and are matched by code:BuiltIn
-decoration.
-
-
-=== Sample Code
-
-Consider the following simple geometry shader in unextended GLSL:
-
-[source,c]
----------------------------------------------------
-layout(triangles) in;
-layout(triangle_strip) out;
-layout(max_vertices=3) out;
-
-in Inputs {
-    vec2 texcoord;
-    vec4 baseColor;
-} v_in[];
-out Outputs {
-    vec2 texcoord;
-    vec4 baseColor;
-};
-
-void main()
-{
-    int layer = compute_layer();
-    for (int i = 0; i < 3; i++) {
-        gl_Position = gl_in[i].gl_Position;
-        texcoord = v_in[i].texcoord;
-        baseColor = v_in[i].baseColor;
-        gl_Layer = layer;
-        EmitVertex();
-    }
-}
----------------------------------------------------
-
-In this shader, the inputs code:gl_Position, code:Inputs.texcoord, and
-code:Inputs.baseColor are simply copied from the input vertex to the
-corresponding output vertex.
-The only "`interesting`" work done by the geometry shader is computing and
-emitting a code:gl_Layer value for the primitive.
-
-The following geometry shader, using this extension, is equivalent:
-
-[source,c]
----------------------------------------------------
-#extension GL_NV_geometry_shader_passthrough : require
-
-layout(triangles) in;
-// No output primitive layout qualifiers required.
-
-// Redeclare gl_PerVertex to pass through "gl_Position".
-layout(passthrough) in gl_PerVertex {
-    vec4 gl_Position;
-} gl_in[];
-
-// Declare "Inputs" with "passthrough" to automatically copy members.
-layout(passthrough) in Inputs {
-    vec2 texcoord;
-    vec4 baseColor;
-} v_in[];
-
-// No output block declaration required.
-
-void main()
-{
-    // The shader simply computes and writes gl_Layer.  We do not
-    // loop over three vertices or call EmitVertex().
-    gl_Layer = compute_layer();
-}
----------------------------------------------------
-
-
-=== Version History
-
-  * Revision 1, 2017-02-15 (Daniel Koch)
-    - Internal revisions
diff --git a/registry/vulkan/appendices/VK_NV_glsl_shader.txt b/registry/vulkan/appendices/VK_NV_glsl_shader.txt
deleted file mode 100644
index 1e32997..0000000
--- a/registry/vulkan/appendices/VK_NV_glsl_shader.txt
+++ /dev/null
@@ -1,62 +0,0 @@
-// Copyright (c) 2016-2020 NVIDIA Corporation
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-include::{generated}/meta/{refprefix}VK_NV_glsl_shader.txt[]
-
-=== Other Extension Metadata
-
-*Last Modified Date*::
-    2016-02-14
-*IP Status*::
-    No known IP claims.
-*Contributors*::
-  - Piers Daniell, NVIDIA
-
-=== Description
-
-This extension allows GLSL shaders written to the `GL_KHR_vulkan_glsl`
-extension specification to be used instead of SPIR-V.
-The implementation will automatically detect whether the shader is SPIR-V or
-GLSL, and compile it appropriately.
-
-=== Deprecation
-
-Functionality in this extension is outside of the scope of Vulkan and is
-better served by a compiler library such as
-https://github.com/KhronosGroup/glslang[glslang].
-No new implementations will support this extension, so applications should:
-not use it.
-
-include::{generated}/interfaces/VK_NV_glsl_shader.txt[]
-
-=== Examples
-
-*Example 1*
-
-Passing in GLSL code
-
-[source,c++]
-----------------------------------------
-    char const vss[] =
-        "#version 450 core\n"
-        "layout(location = 0) in vec2 aVertex;\n"
-        "layout(location = 1) in vec4 aColor;\n"
-        "out vec4 vColor;\n"
-        "void main()\n"
-        "{\n"
-        "    vColor = aColor;\n"
-        "    gl_Position = vec4(aVertex, 0, 1);\n"
-        "}\n"
-    ;
-    VkShaderModuleCreateInfo vertexShaderInfo = { VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO };
-    vertexShaderInfo.codeSize = sizeof vss;
-    vertexShaderInfo.pCode = vss;
-    VkShaderModule vertexShader;
-    vkCreateShaderModule(device, &vertexShaderInfo, 0, &vertexShader);
-----------------------------------------
-
-=== Version History
-
- * Revision 1, 2016-02-14 (Piers Daniell)
-   - Initial draft
diff --git a/registry/vulkan/appendices/VK_NV_inherited_viewport_scissor.txt b/registry/vulkan/appendices/VK_NV_inherited_viewport_scissor.txt
deleted file mode 100644
index 06bef17..0000000
--- a/registry/vulkan/appendices/VK_NV_inherited_viewport_scissor.txt
+++ /dev/null
@@ -1,90 +0,0 @@
-// Copyright (c) 2020 NVIDIA Corporation
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-include::{generated}/meta/{refprefix}VK_NV_inherited_viewport_scissor.txt[]
-
-=== Other Extension Metadata
-
-*Last Modified Date*::
-    2021-02-04
-*Contributors*::
-  - David Zhao Akeley, NVIDIA
-  - Jeff Bolz, NVIDIA
-  - Piers Daniell, NVIDIA
-  - Christoph Kubisch, NVIDIA
-
-=== Description
-
-This extension adds the ability for a secondary command buffer to inherit
-the dynamic viewport and scissor state from a primary command buffer, or a
-previous secondary command buffer executed within the same
-flink:vkCmdExecuteCommands call.
-It addresses a frequent scenario in applications that deal with window
-resizing and want to improve utilization of re-usable secondary command
-buffers.
-The functionality is provided through
-slink:VkCommandBufferInheritanceViewportScissorInfoNV.
-Viewport inheritance is effectively limited to the 2D rectangle; secondary
-command buffers must re-specify the inherited depth range values.
-
-include::{generated}/interfaces/VK_NV_inherited_viewport_scissor.txt[]
-
-=== Issues
-
-(1) Why are viewport depth values configured in the
-slink:VkCommandBufferInheritanceViewportScissorInfoNV struct, rather than by
-a `vkCmd...` function?
---
-*DISCUSSION*:
-
-We considered both adding a new ftext:vkCmdSetViewportDepthNV function, and
-modifying flink:vkCmdSetViewport to ignore the pname:x, pname:y,
-pname:width, and pname:height values when called with a secondary command
-buffer that activates this extension.
-
-The primary design considerations for this extension are debuggability and
-easy integration into existing applications.
-The main issue with adding a new ftext:vkCmdSetViewportDepthNV function is
-reducing ease-of-integration.
-A new function pointer will have to be loaded, but more importantly, a new
-function would require changes to be supported in graphics debuggers; this
-would delay widespread adoption of the extension.
-
-The proposal to modify flink:vkCmdSetViewport would avoid these issues.
-However, we expect that the intent of applications using this extension is
-to have the viewport values used for drawing exactly match the inherited
-values; thus, it would be better for debuggability if no function for
-modifying the viewport depth alone is provided.
-By specifying viewport depth values when starting secondary command buffer
-recording, and requiring the specified depth values to match the inherited
-depth values, we allow for validation layers that flag depth changes as
-errors.
-
-This design also better matches the hardware model.
-In fact, there is no need to re-execute a depth-setting command.
-The graphics device retains the viewport depth state; it is the CPU-side
-state of slink:VkCommandBuffer that must be re-initialized.
---
-
-(2) Why are viewport depth values specified as a partial slink:VkViewport
-struct, rather than a leaner depth-only struct?
---
-*DISCUSSION*:
-
-We considered adding a new stext:VkViewportDepthNV struct containing only
-ptext:minDepth and ptext:maxDepth.
-However, as application developers would need to maintain both a
-`VK_NV_inherited_viewport_scissor` code path and a fallback code path (at
-least in the short term), we ultimately chose to continue using the existing
-slink:VkViewport structure.
-Doing so would allow application developers to reuse the same
-slink:VkViewport array for both code paths, rather than constructing
-separate stext:VkViewportDepthNV and slink:VkViewport arrays for each code
-path.
---
-
-=== Version History
-
-  * Revision 1, 2020-02-04 (David Zhao Akeley)
-    - Internal revisions
diff --git a/registry/vulkan/appendices/VK_NV_mesh_shader.txt b/registry/vulkan/appendices/VK_NV_mesh_shader.txt
deleted file mode 100644
index 8b0c408..0000000
--- a/registry/vulkan/appendices/VK_NV_mesh_shader.txt
+++ /dev/null
@@ -1,148 +0,0 @@
-// Copyright (c) 2018-2020 NVIDIA Corporation
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-include::{generated}/meta/{refprefix}VK_NV_mesh_shader.txt[]
-
-=== Other Extension Metadata
-
-*Last Modified Date*::
-    2018-07-19
-*Interactions and External Dependencies*::
-  - This extension requires
-    {spirv}/NV/SPV_NV_mesh_shader.html[`SPV_NV_mesh_shader`]
-  - This extension provides API support for
-    https://github.com/KhronosGroup/GLSL/blob/master/extensions/nv/GLSL_NV_mesh_shader.txt[`GLSL_NV_mesh_shader`]
-*Contributors*::
-  - Pat Brown, NVIDIA
-  - Jeff Bolz, NVIDIA
-  - Daniel Koch, NVIDIA
-  - Piers Daniell, NVIDIA
-  - Pierre Boudier, NVIDIA
-
-=== Description
-
-This extension provides a new mechanism allowing applications to generate
-collections of geometric primitives via programmable mesh shading.
-It is an alternative to the existing programmable primitive shading
-pipeline, which relied on generating input primitives by a fixed function
-assembler as well as fixed function vertex fetch.
-
-There are new programmable shader types -- the task and mesh shader -- to
-generate these collections to be processed by fixed-function primitive
-assembly and rasterization logic.
-When task and mesh shaders are dispatched, they replace the core
-<<pipeline-graphics-subsets-pre-rasterization,pre-rasterization stages>>,
-including vertex array attribute fetching, vertex shader processing,
-tessellation, and geometry shader processing.
-
-This extension also adds support for the following SPIR-V extension in
-Vulkan:
-
-  * {spirv}/NV/SPV_NV_mesh_shader.html[`SPV_NV_mesh_shader`]
-
-include::{generated}/interfaces/VK_NV_mesh_shader.txt[]
-
-=== New or Modified Built-In Variables
-
-  * <<interfaces-builtin-variables-taskcount,TaskCountNV>>
-  * <<interfaces-builtin-variables-primitivecount,PrimitiveCountNV>>
-  * <<interfaces-builtin-variables-primitiveindices,PrimitiveIndicesNV>>
-  * <<interfaces-builtin-variables-clipdistancepv,ClipDistancePerViewNV>>
-  * <<interfaces-builtin-variables-culldistancepv,CullDistancePerViewNV>>
-  * <<interfaces-builtin-variables-layerpv,LayerPerViewNV>>
-  * <<interfaces-builtin-variables-meshviewcount,MeshViewCountNV>>
-  * <<interfaces-builtin-variables-meshviewindices,MeshViewIndicesNV>>
-  * (modified)code:Position
-  * (modified)code:PointSize
-  * (modified)code:ClipDistance
-  * (modified)code:CullDistance
-  * (modified)code:PrimitiveId
-  * (modified)code:Layer
-  * (modified)code:ViewportIndex
-  * (modified)code:WorkgroupSize
-  * (modified)code:WorkgroupId
-  * (modified)code:LocalInvocationId
-  * (modified)code:GlobalInvocationId
-  * (modified)code:LocalInvocationIndex
-  * (modified)code:DrawIndex
-  * (modified)code:ViewportMaskNV
-  * (modified)code:PositionPerViewNV
-  * (modified)code:ViewportMaskPerViewNV
-
-=== New SPIR-V Capability
-
-  * <<spirvenv-capabilities-table-MeshShadingNV,MeshShadingNV>>
-
-=== Issues
-
-. How to name this extension?
-+
---
-*RESOLVED*: VK_NV_mesh_shader
-
-Other options considered:
-
-  * VK_NV_mesh_shading
-  * VK_NV_programmable_mesh_shading
-  * VK_NV_primitive_group_shading
-  * VK_NV_grouped_drawing
---
-
-. Do we need a new VkPrimitiveTopology?
-+
---
-*RESOLVED*: No.
-We skip the InputAssembler stage.
---
-
-. Should we allow Instancing?
-+
---
-*RESOLVED*: No.
-There is no fixed function input, other than the IDs.
-However, allow offsetting with a "`first`" value.
---
-
-. Should we use existing vkCmdDraw or introduce new functions?
-+
---
-*RESOLVED*: Introduce new functions.
-
-New functions make it easier to separate from "`programmable primitive
-shading`" chapter, less "`dual use`" language about existing functions
-having alternative behavior.
-The text around the existing "`draws`" is heavily based around emitting
-vertices.
---
-
-. If new functions, how to name?
-+
---
-*RESOLVED*: CmdDrawMeshTasks*
-
-Other options considered:
-
-  * CmdDrawMeshed
-  * CmdDrawTasked
-  * CmdDrawGrouped
---
-
-. Should VK_SHADER_STAGE_ALL_GRAPHICS be updated to include the new stages?
-+
---
-*RESOLVED*: No.
-If an application were to be recompiled with headers that include additional
-shader stage bits in VK_SHADER_STAGE_ALL_GRAPHICS, then the previously valid
-application would no longer be valid on implementations that do not support
-mesh or task shaders.
-This means the change would not be backwards compatible.
-It is too bad VkShaderStageFlagBits does not have a dedicated "`all
-supported graphics stages`" bit like VK_PIPELINE_STAGE_ALL_GRAPHICS_BIT,
-which would have avoided this problem.
---
-
-=== Version History
-
-  * Revision 1, 2018-07-19 (Christoph Kubisch, Daniel Koch)
-    - Internal revisions
diff --git a/registry/vulkan/appendices/VK_NV_ray_tracing.txt b/registry/vulkan/appendices/VK_NV_ray_tracing.txt
deleted file mode 100644
index f6ba2b4..0000000
--- a/registry/vulkan/appendices/VK_NV_ray_tracing.txt
+++ /dev/null
@@ -1,118 +0,0 @@
-// Copyright (c) 2018-2020 NVIDIA Corporation
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-include::{generated}/meta/{refprefix}VK_NV_ray_tracing.txt[]
-
-=== Other Extension Metadata
-
-*Last Modified Date*::
-    2018-11-20
-*Interactions and External Dependencies*::
-  - This extension requires
-    {spirv}/NV/SPV_NV_ray_tracing.html[`SPV_NV_ray_tracing`]
-  - This extension provides API support for
-    https://github.com/KhronosGroup/GLSL/blob/master/extensions/nv/GLSL_NV_ray_tracing.txt[`GL_NV_ray_tracing`]
-*Contributors*::
-  - Eric Werness, NVIDIA
-  - Ashwin Lele, NVIDIA
-  - Robert Stepinski, NVIDIA
-  - Nuno Subtil, NVIDIA
-  - Christoph Kubisch, NVIDIA
-  - Martin Stich, NVIDIA
-  - Daniel Koch, NVIDIA
-  - Jeff Bolz, NVIDIA
-  - Joshua Barczak, Intel
-  - Tobias Hector, AMD
-  - Henrik Rydgard, NVIDIA
-  - Pascal Gautron, NVIDIA
-
-=== Description
-
-Rasterization has been the dominant method to produce interactive graphics,
-but increasing performance of graphics hardware has made ray tracing a
-viable option for interactive rendering.
-Being able to integrate ray tracing with traditional rasterization makes it
-easier for applications to incrementally add ray traced effects to existing
-applications or to do hybrid approaches with rasterization for primary
-visibility and ray tracing for secondary queries.
-
-To enable ray tracing, this extension adds a few different categories of new
-functionality:
-
-  * Acceleration structure objects and build commands
-  * A new pipeline type with new shader domains
-  * An indirection table to link shader groups with acceleration structure
-    items
-
-This extension adds support for the following SPIR-V extension in Vulkan:
-
-  * `SPV_NV_ray_tracing`
-
-include::{generated}/interfaces/VK_NV_ray_tracing.txt[]
-
-=== New or Modified Built-In Variables
-
-  * <<interfaces-builtin-variables-launchid,code:LaunchIdNV>>
-  * <<interfaces-builtin-variables-launchsize,code:LaunchSizeNV>>
-  * <<interfaces-builtin-variables-worldrayorigin,code:WorldRayOriginNV>>
-  * <<interfaces-builtin-variables-worldraydirection,code:WorldRayDirectionNV>>
-  * <<interfaces-builtin-variables-objectrayorigin,code:ObjectRayOriginNV>>
-  * <<interfaces-builtin-variables-objectraydirection,code:ObjectRayDirectionNV>>
-  * <<interfaces-builtin-variables-raytmin,code:RayTminNV>>
-  * <<interfaces-builtin-variables-raytmax,code:RayTmaxNV>>
-  * <<interfaces-builtin-variables-instancecustomindex,code:InstanceCustomIndexNV>>
-  * <<interfaces-builtin-variables-instanceid,code:InstanceId>>
-  * <<interfaces-builtin-variables-objecttoworld,code:ObjectToWorldNV>>
-  * <<interfaces-builtin-variables-worldtoobject,code:WorldToObjectNV>>
-  * <<interfaces-builtin-variables-hitt,code:HitTNV>>
-  * <<interfaces-builtin-variables-hitkind,code:HitKindNV>>
-  * <<interfaces-builtin-variables-incomingrayflags,code:IncomingRayFlagsNV>>
-  * (modified)code:PrimitiveId
-
-=== New SPIR-V Capabilities
-
-  * <<spirvenv-capabilities-table-RayTracingNV,RayTracingNV>>
-
-=== Issues
-
-1) Are there issues?
-
-*RESOLVED*: Yes.
-
-=== Sample Code
-
-Example ray generation GLSL shader
-
-[source,c]
----------------------------------------------------
-#version 450 core
-#extension GL_NV_ray_tracing : require
-layout(set = 0, binding = 0, rgba8) uniform image2D image;
-layout(set = 0, binding = 1) uniform accelerationStructureNV as;
-layout(location = 0) rayPayloadNV float payload;
-
-void main()
-{
-   vec4 col = vec4(0, 0, 0, 1);
-
-   vec3 origin = vec3(float(gl_LaunchIDNV.x)/float(gl_LaunchSizeNV.x), float(gl_LaunchIDNV.y)/float(gl_LaunchSizeNV.y), 1.0);
-   vec3 dir = vec3(0.0, 0.0, -1.0);
-
-   traceNV(as, 0, 0xff, 0, 1, 0, origin, 0.0, dir, 1000.0, 0);
-
-   col.y = payload;
-
-   imageStore(image, ivec2(gl_LaunchIDNV.xy), col);
-}
----------------------------------------------------
-
-=== Version History
-
-  * Revision 1, 2018-09-11 (Robert Stepinski, Nuno Subtil, Eric Werness)
-    - Internal revisions
-  * Revision 2, 2018-10-19 (Eric Werness)
-    - rename to VK_NV_ray_tracing, add support for callables.
-    - too many updates to list
-  * Revision 3, 2018-11-20 (Daniel Koch)
-    - update to use InstanceId instead of InstanceIndex as implemented.
diff --git a/registry/vulkan/appendices/VK_NV_ray_tracing_motion_blur.txt b/registry/vulkan/appendices/VK_NV_ray_tracing_motion_blur.txt
deleted file mode 100755
index 3dd8d66..0000000
--- a/registry/vulkan/appendices/VK_NV_ray_tracing_motion_blur.txt
+++ /dev/null
@@ -1,62 +0,0 @@
-// Copyright (c) 2021 NVIDIA Corporation
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-include::{generated}/meta/{refprefix}VK_NV_ray_tracing_motion_blur.txt[]
-
-=== Other Extension Metadata
-
-*Last Modified Date*::
-    2021-06-16
-*Interactions and External Dependencies*::
-  - This extension requires
-    {spirv}/NV/SPV_NV_ray_tracing_motion_blur.html[`SPV_NV_ray_tracing_motion_blur`]
-  - This extension provides API support for
-    https://github.com/KhronosGroup/GLSL/blob/master/extensions/nv/GLSL_NV_ray_tracing_motion_blur.txt[`GL_NV_ray_tracing_motion_blur`]
-*Contributors*::
-  - Eric Werness, NVIDIA
-  - Ashwin Lele, NVIDIA
-
-=== Description
-
-Ray tracing support in the API provides an efficient mechanism to intersect
-rays against static geometry, but rendering algorithms often want to support
-motion, which is more efficiently supported with motion-specific algorithms.
-This extension adds a set of mechanisms to support fast tracing of moving
-geometry:
-
-  * A ray pipeline trace call which takes a time parameter
-  * Flags to enable motion support in an acceleration structure
-  * Support for time-varying vertex positions in a geometry
-  * Motion instances to move existing instances over time
-
-The motion represented here is parameterized across a normalized timestep
-between 0.0 and 1.0.
-A motion trace using code:OpTraceRayMotionNV provides a time within that
-normalized range to be used when intersecting that ray with geometry.
-The geometry can be provided with motion by a combination of adding a second
-vertex position for time of 1.0 using
-sname:VkAccelerationStructureGeometryMotionTrianglesDataNV and providing
-multiple transforms in the instance using
-sname:VkAccelerationStructureMotionInstanceNV.
-
-include::{generated}/interfaces/VK_NV_ray_tracing_motion_blur.txt[]
-
-=== Issues
-
-(1) What size is VkAccelerationStructureMotionInstanceNV?
---
- * Added a note on the structure size and made the stride explicit in the
-   language.
---
-
-(2) Allow arrayOfPointers for motion TLAS?
---
- * Yes, with a packed encoding to minimize the amount of data sent for
-   metadata.
---
-
-=== Version History
-
-  * Revision 1, 2020-06-16 (Eric Werness, Ashwin Lele)
-    - Initial external release
diff --git a/registry/vulkan/appendices/VK_NV_representative_fragment_test.txt b/registry/vulkan/appendices/VK_NV_representative_fragment_test.txt
deleted file mode 100644
index 52aca2a..0000000
--- a/registry/vulkan/appendices/VK_NV_representative_fragment_test.txt
+++ /dev/null
@@ -1,101 +0,0 @@
-// Copyright (c) 2018-2020 NVIDIA Corporation
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-include::{generated}/meta/{refprefix}VK_NV_representative_fragment_test.txt[]
-
-=== Other Extension Metadata
-
-*Last Modified Date*::
-    2018-09-13
-*Contributors*::
-  - Kedarnath Thangudu, NVIDIA
-  - Christoph Kubisch, NVIDIA
-  - Pierre Boudier, NVIDIA
-  - Pat Brown, NVIDIA
-  - Jeff Bolz, NVIDIA
-  - Eric Werness, NVIDIA
-
-=== Description
-
-This extension provides a new representative fragment test that allows
-implementations to reduce the amount of rasterization and fragment
-processing work performed for each point, line, or triangle primitive.
-For any primitive that produces one or more fragments that pass all other
-early fragment tests, the implementation is permitted to choose one or more
-"`representative`" fragments for processing and discard all other fragments.
-For draw calls rendering multiple points, lines, or triangles arranged in
-lists, strips, or fans, the representative fragment test is performed
-independently for each of those primitives.
-
-This extension is useful for applications that use an early render pass to
-determine the full set of primitives that would be visible in the final
-scene.
-In this render pass, such applications would set up a fragment shader that
-enables early fragment tests and writes to an image or shader storage buffer
-to record the ID of the primitive that generated the fragment.
-Without this extension, the shader would record the ID separately for each
-visible fragment of each primitive.
-With this extension, fewer stores will be performed, particularly for large
-primitives.
-
-The representative fragment test has no effect if early fragment tests are
-not enabled via the fragment shader.
-The set of fragments discarded by the representative fragment test is
-implementation-dependent and may vary from frame to frame.
-In some cases, the representative fragment test may not discard any
-fragments for a given primitive.
-
-include::{generated}/interfaces/VK_NV_representative_fragment_test.txt[]
-
-=== Issues
-
-(1) Is the representative fragment test guaranteed to have any effect?
-
-*RESOLVED*: No.
-As specified, we only guarantee that each primitive with at least one
-fragment that passes prior tests will have one fragment passing the
-representative fragment tests.
-We do not guarantee that any particular fragment will fail the test.
-
-In the initial implementation of this extension, the representative fragment
-test is treated as an optimization that may be completely disabled for some
-pipeline states.
-This feature was designed for a use case where the fragment shader records
-information on individual primitives using shader storage buffers or storage
-images, with no writes to color or depth buffers.
-
-(2) Will the set of fragments that pass the representative fragment test be
-repeatable if you draw the same scene over and over again?
-
-*RESOLVED*: No.
-The set of fragments that pass the representative fragment test is
-implementation-dependent and may vary due to the timing of operations
-performed by the GPU.
-
-(3) What happens if you enable the representative fragment test with writes
-to color and/or depth render targets enabled?
-
-*RESOLVED*: If writes to the color or depth buffer are enabled, they will be
-performed for any fragments that survive the relevant tests.
-Any fragments that fail the representative fragment test will not update
-color buffers.
-For the use cases intended for this feature, we do not expect color or depth
-writes to be enabled.
-
-(4) How do derivatives and automatic texture level of detail computations
-work with the representative fragment test enabled?
-
-*RESOLVED*: If a fragment shader uses derivative functions or texture
-lookups using automatic level of detail computation, derivatives will be
-computed identically whether or not the representative fragment test is
-enabled.
-For the use cases intended for this feature, we do not expect the use of
-derivatives in the fragment shader.
-
-=== Version History
-
-  * Revision 2, 2018-09-13 (pbrown)
-    - Add issues.
-  * Revision 1, 2018-08-22 (Kedarnath Thangudu)
-    - Internal Revisions
diff --git a/registry/vulkan/appendices/VK_NV_sample_mask_override_coverage.txt b/registry/vulkan/appendices/VK_NV_sample_mask_override_coverage.txt
deleted file mode 100644
index 33a424c..0000000
--- a/registry/vulkan/appendices/VK_NV_sample_mask_override_coverage.txt
+++ /dev/null
@@ -1,56 +0,0 @@
-// Copyright (c) 2016-2020 NVIDIA Corporation
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-include::{generated}/meta/{refprefix}VK_NV_sample_mask_override_coverage.txt[]
-
-=== Other Extension Metadata
-
-*Last Modified Date*::
-    2016-12-08
-*IP Status*::
-    No known IP claims.
-*Interactions and External Dependencies*::
-  - This extension requires
-    {spirv}/NV/SPV_NV_sample_mask_override_coverage.html[`SPV_NV_sample_mask_override_coverage`]
-  - This extension provides API support for
-    https://www.khronos.org/registry/OpenGL/extensions/NV/NV_sample_mask_override_coverage.txt[`GL_NV_sample_mask_override_coverage`]
-*Contributors*::
-  - Daniel Koch, NVIDIA
-  - Jeff Bolz, NVIDIA
-
-=== Description
-
-This extension adds support for the following SPIR-V extension in Vulkan:
-
-  * `SPV_NV_sample_mask_override_coverage`
-
-The extension provides access to the code:OverrideCoverageNV decoration
-under the code:SampleMaskOverrideCoverageNV capability.
-Adding this decoration to a variable with the code:SampleMask builtin
-decoration allows the shader to modify the coverage mask and affect which
-samples are used to process the fragment.
-
-When using GLSL source-based shader languages, the code:override_coverage
-layout qualifier from `GL_NV_sample_mask_override_coverage` maps to the
-code:OverrideCoverageNV decoration.
-To use the code:override_coverage layout qualifier in GLSL the
-`GL_NV_sample_mask_override_coverage` extension must be enabled.
-Behavior is described in the `GL_NV_sample_mask_override_coverage` extension
-spec.
-
-include::{generated}/interfaces/VK_NV_sample_mask_override_coverage.txt[]
-
-=== New Variable Decoration
-
-  * <<interfaces-builtin-variables-samplemask,OverrideCoverageNV in
-    SampleMask>>
-
-=== New SPIR-V Capabilities
-
-  * <<spirvenv-capabilities-table-SampleMaskOverrideCoverageNV,SampleMaskOverrideCoverageNV>>
-
-=== Version History
-
-  * Revision 1, 2016-12-08 (Piers Daniell)
-    - Internal revisions
diff --git a/registry/vulkan/appendices/VK_NV_scissor_exclusive.txt b/registry/vulkan/appendices/VK_NV_scissor_exclusive.txt
deleted file mode 100644
index 73ea920..0000000
--- a/registry/vulkan/appendices/VK_NV_scissor_exclusive.txt
+++ /dev/null
@@ -1,48 +0,0 @@
-// Copyright (c) 2018-2020 NVIDIA Corporation
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-include::{generated}/meta/{refprefix}VK_NV_scissor_exclusive.txt[]
-
-=== Other Extension Metadata
-
-*Last Modified Date*::
-    2018-07-31
-*IP Status*::
-    No known IP claims.
-*Interactions and External Dependencies*::
-    None
-*Contributors*::
-  - Pat Brown, NVIDIA
-  - Jeff Bolz, NVIDIA
-  - Piers Daniell, NVIDIA
-  - Daniel Koch, NVIDIA
-
-=== Description
-
-This extension adds support for an exclusive scissor test to Vulkan.
-The exclusive scissor test behaves like the scissor test, except that the
-exclusive scissor test fails for pixels inside the corresponding rectangle
-and passes for pixels outside the rectangle.
-If the same rectangle is used for both the scissor and exclusive scissor
-tests, the exclusive scissor test will pass if and only if the scissor test
-fails.
-
-include::{generated}/interfaces/VK_NV_scissor_exclusive.txt[]
-
-=== Issues
-
-1) For the scissor test, the viewport state must be created with a matching
-   number of scissor and viewport rectangles.
-   Should we have the same requirement for exclusive scissors?
-
-*RESOLVED*: For exclusive scissors, we relax this requirement and allow an
-exclusive scissor rectangle count that is either zero or equal to the number
-of viewport rectangles.
-If you pass in an exclusive scissor count of zero, the exclusive scissor
-test is treated as disabled.
-
-=== Version History
-
-  * Revision 1, 2018-07-31 (Pat Brown)
-    - Internal revisions
diff --git a/registry/vulkan/appendices/VK_NV_shader_image_footprint.txt b/registry/vulkan/appendices/VK_NV_shader_image_footprint.txt
deleted file mode 100644
index 48feca9..0000000
--- a/registry/vulkan/appendices/VK_NV_shader_image_footprint.txt
+++ /dev/null
@@ -1,218 +0,0 @@
-// Copyright (c) 2018-2020 NVIDIA Corporation
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-include::{generated}/meta/{refprefix}VK_NV_shader_image_footprint.txt[]
-
-=== Other Extension Metadata
-
-*Last Modified Date*::
-    2018-09-13
-*IP Status*::
-    No known IP claims.
-*Interactions and External Dependencies*::
-  - This extension requires
-    {spirv}/NV/SPV_NV_shader_image_footprint.html[`SPV_NV_shader_image_footprint`]
-  - This extension provides API support for
-    https://github.com/KhronosGroup/GLSL/blob/master/extensions/nv/GLSL_NV_shader_texture_footprint.txt[`GL_NV_shader_texture_footprint`]
-*Contributors*::
-  - Pat Brown, NVIDIA
-  - Chris Lentini, NVIDIA
-  - Daniel Koch, NVIDIA
-  - Jeff Bolz, NVIDIA
-
-=== Description
-
-This extension adds Vulkan support for the
-{spirv}/NV/SPV_NV_shader_image_footprint.html[`SPV_NV_shader_image_footprint`]
-SPIR-V extension.
-That SPIR-V extension provides a new instruction
-code:OpImageSampleFootprintNV allowing shaders to determine the set of
-texels that would be accessed by an equivalent filtered texture lookup.
-
-Instead of returning a filtered texture value, the instruction returns a
-structure that can be interpreted by shader code to determine the footprint
-of a filtered texture lookup.
-This structure includes integer values that identify a small neighborhood of
-texels in the image being accessed and a bitfield that indicates which
-texels in that neighborhood would be used.
-The structure also includes a bitfield where each bit identifies whether any
-texel in a small aligned block of texels would be fetched by the texture
-lookup.
-The size of each block is specified by an access _granularity_ provided by
-the shader.
-The minimum granularity supported by this extension is 2x2 (for 2D textures)
-and 2x2x2 (for 3D textures); the maximum granularity is 256x256 (for 2D
-textures) or 64x32x32 (for 3D textures).
-Each footprint query returns the footprint from a single texture level.
-When using minification filters that combine accesses from multiple mipmap
-levels, shaders must perform separate queries for the two levels accessed
-("`fine`" and "`coarse`").
-The footprint query also returns a flag indicating if the texture lookup
-would access texels from only one mipmap level or from two neighboring
-levels.
-
-This extension should be useful for multi-pass rendering operations that do
-an initial expensive rendering pass to produce a first image that is then
-used as a texture for a second pass.
-If the second pass ends up accessing only portions of the first image (e.g.,
-due to visbility), the work spent rendering the non-accessed portion of the
-first image was wasted.
-With this feature, an application can limit this waste using an initial pass
-over the geometry in the second image that performs a footprint query for
-each visible pixel to determine the set of pixels that it needs from the
-first image.
-This pass would accumulate an aggregate footprint of all visible pixels into
-a separate "`footprint image`" using shader atomics.
-Then, when rendering the first image, the application can kill all shading
-work for pixels not in this aggregate footprint.
-
-This extension has a number of limitations.
-The code:OpImageSampleFootprintNV instruction only supports for two- and
-three-dimensional textures.
-Footprint evaluation only supports the CLAMP_TO_EDGE wrap mode; results are
-undefined: for all other wrap modes.
-Only a limited set of granularity values and that set does not support
-separate coverage information for each texel in the original image.
-
-When using SPIR-V generated from the OpenGL Shading Language, the new
-instruction will be generated from code using the new
-code:textureFootprint*NV built-in functions from the
-`GL_NV_shader_texture_footprint` shading language extension.
-
-include::{generated}/interfaces/VK_NV_shader_image_footprint.txt[]
-
-=== New SPIR-V Capability
-
-  * <<spirvenv-capabilities-table-ImageFootprintNV,ImageFootprintNV>>
-
-=== Issues
-
-(1) The footprint returned by the SPIR-V instruction is a structure that
-    includes an anchor, an offset, and a mask that represents a 8x8 or 4x4x4
-    neighborhood of texel groups.
-    But the bits of the mask are not stored in simple pitch order.
-    Why is the footprint built this way?
-
-*RESOLVED*: We expect that applications using this feature will want to use
-a fixed granularity and accumulate coverage information from the returned
-footprints into an aggregate "`footprint image`" that tracks the portions of
-an image that would be needed by regular texture filtering.
-If an application is using a two-dimensional image with 4x4 pixel
-granularity, we expect that the footprint image will use 64-bit texels where
-each bit in an 8x8 array of bits corresponds to coverage for a 4x4 block in
-the original image.
-Texel (0,0) in the footprint image would correspond to texels (0,0) through
-(31,31) in the original image.
-
-In the usual case, the footprint for a single access will fully contained in
-a 32x32 aligned region of the original texture, which corresponds to a
-single 64-bit texel in the footprint image.
-In that case, the implementation will return an anchor coordinate pointing
-at the single footprint image texel, an offset vector of (0,0), and a mask
-whose bits are aligned with the bits in the footprint texel.
-For this case, the shader can simply atomically OR the mask bits into the
-contents of the footprint texel to accumulate footprint coverage.
-
-In the worst case, the footprint for a single access spans multiple 32x32
-aligned regions and may require updates to four separate footprint image
-texels.
-In this case, the implementation will return an anchor coordinate pointing
-at the lower right footprint image texel and an offset will identify how
-many "`columns`" and "`rows`" of the returned 8x8 mask correspond to
-footprint texels to the left and above the anchor texel.
-If the anchor is (2,3), the 64 bits of the returned mask are arranged
-spatially as follows, where each 4x4 block is assigned a bit number that
-matches its bit number in the footprint image texels:
-
-----
-    +-------------------------+-------------------------+
-    | -- -- -- -- -- -- -- -- | -- -- -- -- -- -- -- -- |
-    | -- -- -- -- -- -- -- -- | -- -- -- -- -- -- -- -- |
-    | -- -- -- -- -- -- -- -- | -- -- -- -- -- -- -- -- |
-    | -- -- -- -- -- -- -- -- | -- -- -- -- -- -- -- -- |
-    | -- -- -- -- -- -- -- -- | -- -- -- -- -- -- -- -- |
-    | -- -- -- -- -- -- 46 47 | 40 41 42 43 44 45 -- -- |
-    | -- -- -- -- -- -- 54 55 | 48 49 50 51 52 53 -- -- |
-    | -- -- -- -- -- -- 62 63 | 56 57 58 59 60 61 -- -- |
-    +-------------------------+-------------------------+
-    | -- -- -- -- -- -- 06 07 | 00 01 02 03 04 05 -- -- |
-    | -- -- -- -- -- -- 14 15 | 08 09 10 11 12 13 -- -- |
-    | -- -- -- -- -- -- 22 23 | 16 17 18 19 20 21 -- -- |
-    | -- -- -- -- -- -- 30 31 | 24 25 26 27 28 29 -- -- |
-    | -- -- -- -- -- -- 38 39 | 32 33 34 35 36 37 -- -- |
-    | -- -- -- -- -- -- -- -- | -- -- -- -- -- -- -- -- |
-    | -- -- -- -- -- -- -- -- | -- -- -- -- -- -- -- -- |
-    | -- -- -- -- -- -- -- -- | -- -- -- -- -- -- -- -- |
-    +-------------------------+-------------------------+
-----
-
-To accumulate coverage for each of the four footprint image texels, a shader
-can AND the returned mask with simple masks derived from the x and y offset
-values and then atomically OR the updated mask bits into the contents of the
-corresponding footprint texel.
-
-[source,c++]
-----
-    uint64_t returnedMask = (uint64_t(footprint.mask.x) | (uint64_t(footprint.mask.y) << 32));
-    uint64_t rightMask    = ((0xFF >> footprint.offset.x) * 0x0101010101010101UL);
-    uint64_t bottomMask   = 0xFFFFFFFFFFFFFFFFUL >> (8 * footprint.offset.y);
-    uint64_t bottomRight  = returnedMask & bottomMask & rightMask;
-    uint64_t bottomLeft   = returnedMask & bottomMask & (~rightMask);
-    uint64_t topRight     = returnedMask & (~bottomMask) & rightMask;
-    uint64_t topLeft      = returnedMask & (~bottomMask) & (~rightMask);
-----
-
-(2) What should an application do to ensure maximum performance when
-accumulating footprints into an aggregate footprint image?
-
-*RESOLVED*: We expect that the most common usage of this feature will be to
-accumulate aggregate footprint coverage, as described in the previous issue.
-Even if you ignore the anisotropic filtering case where the implementation
-may return a granularity larger than that requested by the caller, each
-shader invocation will need to use atomic functions to update up to four
-footprint image texels for each level of detail accessed.
-Having each active shader invocation perform multiple atomic operations can
-be expensive, particularly when neighboring invocations will want to update
-the same footprint image texels.
-
-Techniques can be used to reduce the number of atomic operations performed
-when accumulating coverage include:
-
-  * Have logic that detects returned footprints where all components of the
-    returned offset vector are zero.
-    In that case, the mask returned by the footprint function is guaranteed
-    to be aligned with the footprint image texels and affects only a single
-    footprint image texel.
-  * Have fragment shaders communicate using built-in functions from the
-    `VK_NV_shader_subgroup_partitioned` extension or other shader subgroup
-    extensions.
-    If you have multiple invocations in a subgroup that need to update the
-    same texel (x,y) in the footprint image, compute an aggregate footprint
-    mask across all invocations in the subgroup updating that texel and have
-    a single invocation perform an atomic operation using that aggregate
-    mask.
-  * When the returned footprint spans multiple texels in the footprint
-    image, each invocation need to perform four atomic operations.
-    In the previous issue, we had an example that computed separate masks
-    for "`topLeft`", "`topRight`", "`bottomLeft`", and "`bottomRight`".
-    When the invocations in a subgroup have good locality, it might be the
-    case the "`top left`" for some invocations might refer to footprint
-    image texel (10,10), while neighbors might have their "`top left`"
-    texels at (11,10), (10,11), and (11,11).
-    If you compute separate masks for even/odd x and y values instead of
-    left/right or top/bottom, the "`odd/odd`" mask for all invocations in
-    the subgroup hold coverage for footprint image texel (11,11), which can
-    be updated by a single atomic operation for the entire subgroup.
-
-=== Examples
-
-TBD
-
-=== Version History
-
- * Revision 2, 2018-09-13 (Pat Brown)
-   - Add issue (2) with performance tips.
-
- * Revision 1, 2018-08-12 (Pat Brown)
-   - Initial draft
diff --git a/registry/vulkan/appendices/VK_NV_shader_sm_builtins.txt b/registry/vulkan/appendices/VK_NV_shader_sm_builtins.txt
deleted file mode 100644
index 09e1ff1..0000000
--- a/registry/vulkan/appendices/VK_NV_shader_sm_builtins.txt
+++ /dev/null
@@ -1,68 +0,0 @@
-// Copyright (c) 2019-2020 NVIDIA Corporation
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-include::{generated}/meta/{refprefix}VK_NV_shader_sm_builtins.txt[]
-
-=== Other Extension Metadata
-
-*Last Modified Date*::
-    2019-05-28
-*Interactions and External Dependencies*::
- - This extension requires
-   {spirv}/NV/SPV_NV_shader_sm_builtins.html[`SPV_NV_shader_sm_builtins`].
- - This extension enables
-   https://github.com/KhronosGroup/GLSL/blob/master/extensions/nv/GLSL_NV_shader_sm_builtins.txt[`GL_NV_shader_sm_builtins`]
-   for GLSL source languages.
-*Contributors*::
-  - Jeff Bolz, NVIDIA
-  - Eric Werness, NVIDIA
-
-=== Description
-
-This extension provides the ability to determine device-specific properties
-on NVIDIA GPUs.
-It provides the number of streaming multiprocessors (SMs), the maximum
-number of warps (subgroups) that can run on an SM, and shader builtins to
-enable invocations to identify which SM and warp a shader invocation is
-executing on.
-
-This extension enables support for the SPIR-V code:ShaderSMBuiltinsNV
-capability.
-
-These properties and built-ins should: typically only be used for debugging
-purposes.
-
-include::{generated}/interfaces/VK_NV_shader_sm_builtins.txt[]
-
-=== New or Modified Built-In Variables
-
-  * <<interfaces-builtin-variables-warpspersmnv,code:WarpsPerSMNV>>
-  * <<interfaces-builtin-variables-smcountnv,code:SMCountNV>>
-  * <<interfaces-builtin-variables-warpidnv,code:WarpIDNV>>
-  * <<interfaces-builtin-variables-smidnv,code:SMIDNV>>
-
-=== New SPIR-V Capabilities
-
-  * <<spirvenv-capabilities-table-ShaderSMBuiltinsNV,code:ShaderSMBuiltinsNV>>
-
-=== Issues
-. What should we call this extension?
-+
---
-*RESOLVED*: `NV_shader_sm_builtins`.
-Other options considered included:
-
-  * `NV_shader_smid` - but SMID is really easy to typo/confuse as SIMD.
-  * `NV_shader_sm_info` - but *Info* is typically reserved for input
-    structures
-
---
-
-
-=== Version History
-
-  * Revision 1, 2019-05-28 (Daniel Koch)
-    - Internal revisions
-
-
diff --git a/registry/vulkan/appendices/VK_NV_shader_subgroup_partitioned.txt b/registry/vulkan/appendices/VK_NV_shader_subgroup_partitioned.txt
deleted file mode 100644
index a056356..0000000
--- a/registry/vulkan/appendices/VK_NV_shader_subgroup_partitioned.txt
+++ /dev/null
@@ -1,38 +0,0 @@
-// Copyright (c) 2018-2020 NVIDIA Corporation
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-include::{generated}/meta/{refprefix}VK_NV_shader_subgroup_partitioned.txt[]
-
-=== Other Extension Metadata
-
-*Last Modified Date*::
-    2018-03-17
-*Interactions and External Dependencies*::
-  - This extension requires
-    {spirv}/NV/SPV_NV_shader_subgroup_partitioned.html[`SPV_NV_shader_subgroup_partitioned`]
-  - This extension provides API support for
-    https://github.com/KhronosGroup/GLSL/blob/master/extensions/nv/GL_NV_shader_subgroup_partitioned.txt[`GL_NV_shader_subgroup_partitioned`]
-*Contributors*::
-  - Jeff Bolz, NVIDIA
-
-=== Description
-
-This extension enables support for a new class of
-<<shaders-group-operations, group operations>> on <<shaders-scope-subgroup,
-subgroups>> via the
-https://github.com/KhronosGroup/GLSL/blob/master/extensions/nv/GL_NV_shader_subgroup_partitioned.txt[`GL_NV_shader_subgroup_partitioned`]
-GLSL extension and
-{spirv}/NV/SPV_NV_shader_subgroup_partitioned.html[`SPV_NV_shader_subgroup_partitioned`]
-SPIR-V extension.
-Support for these new operations is advertised via the
-ename:VK_SUBGROUP_FEATURE_PARTITIONED_BIT_NV bit.
-
-This extension requires Vulkan 1.1, for general subgroup support.
-
-include::{generated}/interfaces/VK_NV_shader_subgroup_partitioned.txt[]
-
-=== Version History
-
-  * Revision 1, 2018-03-17 (Jeff Bolz)
-    - Internal revisions
diff --git a/registry/vulkan/appendices/VK_NV_shading_rate_image.txt b/registry/vulkan/appendices/VK_NV_shading_rate_image.txt
deleted file mode 100644
index dceb828..0000000
--- a/registry/vulkan/appendices/VK_NV_shading_rate_image.txt
+++ /dev/null
@@ -1,146 +0,0 @@
-// Copyright (c) 2018-2020 NVIDIA Corporation
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-include::{generated}/meta/{refprefix}VK_NV_shading_rate_image.txt[]
-
-=== Other Extension Metadata
-
-*Last Modified Date*::
-    2019-07-18
-*Interactions and External Dependencies*::
-  - This extension requires
-    {spirv}/NV/SPV_NV_shading_rate.html[`SPV_NV_shading_rate`]
-  - This extension provides API support for
-    https://github.com/KhronosGroup/GLSL/blob/master/extensions/nv/GLSL_NV_shading_rate_image.txt[`GL_NV_shading_rate_image`]
-*Contributors*::
-  - Pat Brown, NVIDIA
-  - Carsten Rohde, NVIDIA
-  - Jeff Bolz, NVIDIA
-  - Daniel Koch, NVIDIA
-  - Mathias Schott, NVIDIA
-  - Matthew Netsch, Qualcomm Technologies, Inc.
-
-=== Description
-
-This extension allows applications to use a variable shading rate when
-processing fragments of rasterized primitives.
-By default, Vulkan will spawn one fragment shader for each pixel covered by
-a primitive.
-In this extension, applications can bind a _shading rate image_ that can be
-used to vary the number of fragment shader invocations across the
-framebuffer.
-Some portions of the screen may be configured to spawn up to 16 fragment
-shaders for each pixel, while other portions may use a single fragment
-shader invocation for a 4x4 block of pixels.
-This can be useful for use cases like eye tracking, where the portion of the
-framebuffer that the user is looking at directly can be processed at high
-frequency, while distant corners of the image can be processed at lower
-frequency.
-Each texel in the shading rate image represents a fixed-size rectangle in
-the framebuffer, covering 16x16 pixels in the initial implementation of this
-extension.
-When rasterizing a primitive covering one of these rectangles, the Vulkan
-implementation reads a texel in the bound shading rate image and looks up
-the fetched value in a palette to determine a base shading rate.
-
-In addition to the API support controlling rasterization, this extension
-also adds Vulkan support for the
-{spirv}/NV/SPV_NV_shading_rate.html[`SPV_NV_shading_rate`] extension to
-SPIR-V.
-That extension provides two fragment shader variable decorations that allow
-fragment shaders to determine the shading rate used for processing the
-fragment:
-
-  * code:FragmentSizeNV, which indicates the width and height of the set of
-    pixels processed by the fragment shader.
-  * code:InvocationsPerPixel, which indicates the maximum number of fragment
-    shader invocations that could be spawned for the pixel(s) covered by the
-    fragment.
-
-When using SPIR-V in conjunction with the OpenGL Shading Language (GLSL),
-the fragment shader capabilities are provided by the
-`GL_NV_shading_rate_image` language extension and correspond to the built-in
-variables code:gl_FragmentSizeNV and code:gl_InvocationsPerPixelNV,
-respectively.
-
-include::{generated}/interfaces/VK_NV_shading_rate_image.txt[]
-
-=== Issues
-
-(1) When using shading rates specifying "`coarse`" fragments covering
-    multiple pixels, we will generate a combined coverage mask that combines
-    the coverage masks of all pixels covered by the fragment.
-    By default, these masks are combined in an implementation-dependent
-    order.
-    Should we provide a mechanism allowing applications to query or specify
-    an exact order?
-
-*RESOLVED*: Yes, this feature is useful for cases where most of the fragment
-shader can be evaluated once for an entire coarse fragment, but where some
-per-pixel computations are also required.
-For example, a per-pixel alpha test may want to kill all the samples for
-some pixels in a coarse fragment.
-This sort of test can be implemented using an output sample mask, but such a
-shader would need to know which bit in the mask corresponds to each sample
-in the coarse fragment.
-We are including a mechanism to allow aplications to specify the orders of
-coverage samples for each shading rate and sample count, either as static
-pipeline state or dynamically via a command buffer.
-This portion of the extension has its own feature bit.
-
-We will not be providing a query to determine the implementation-dependent
-default ordering.
-The thinking here is that if an application cares enough about the coarse
-fragment sample ordering to perform such a query, it could instead just set
-its own order, also using custom per-pixel sample locations if required.
-
-(2) For the pipeline stage
-ename:VK_PIPELINE_STAGE_SHADING_RATE_IMAGE_BIT_NV, should we specify a
-precise location in the pipeline the shading rate image is accessed (after
-geometry shading, but before the early fragment tests) or leave it
-under-specified in case there are other implementations that access the
-image in a different pipeline location?
-
-*RESOLVED* We are specifying the pipeline stage to be between the final
-<<pipeline-graphics-subsets-pre-rasterization,pre-rasterization shader
-stage>> (ename:VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT) and before the first
-stage used for fragment processing
-(ename:VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT), which seems to be the
-natural place to access the shading rate image.
-
-(3) How do centroid-sampled variables work with fragments larger than one
-pixel?
-
-*RESOLVED* For single-pixel fragments, fragment shader inputs decorated with
-code:Centroid are sampled at an implementation-dependent location in the
-intersection of the area of the primitive being rasterized and the area of
-the pixel that corresponds to the fragment.
-With multi-pixel fragments, we follow a similar pattern, using the
-intersection of the primitive and the *set* of pixels corresponding to the
-fragment.
-
-One important thing to keep in mind when using such "`coarse`" shading rates
-is that fragment attributes are sampled at the center of the fragment by
-default, regardless of the set of pixels/samples covered by the fragment.
-For fragments with a size of 4x4 pixels, this center location will be more
-than two pixels (1.5 * sqrt(2)) away from the center of the pixels at the
-corners of the fragment.
-When rendering a primitive that covers only a small part of a coarse
-fragment, sampling a color outside the primitive can produce overly bright
-or dark color values if the color values have a large gradient.
-To deal with this, an application can use centroid sampling on attributes
-where "`extrapolation`" artifacts can lead to overly bright or dark pixels.
-Note that this same problem also exists for multisampling with single-pixel
-fragments, but is less severe because it only affects certain samples of a
-pixel and such bright/dark samples may be averaged with other samples that
-do not have a similar problem.
-
-=== Version History
-
-  * Revision 3, 2019-07-18 (Mathias Schott)
-    - Fully list extension interfaces in this appendix.
-  * Revision 2, 2018-09-13 (Pat Brown)
-    - Miscellaneous edits preparing the specification for publication.
-  * Revision 1, 2018-08-08 (Pat Brown)
-    - Internal revisions
diff --git a/registry/vulkan/appendices/VK_NV_viewport_array2.txt b/registry/vulkan/appendices/VK_NV_viewport_array2.txt
deleted file mode 100644
index 1f74abf..0000000
--- a/registry/vulkan/appendices/VK_NV_viewport_array2.txt
+++ /dev/null
@@ -1,88 +0,0 @@
-// Copyright (c) 2017-2020 NVIDIA Corporation
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-include::{generated}/meta/{refprefix}VK_NV_viewport_array2.txt[]
-
-=== Other Extension Metadata
-
-*Last Modified Date*::
-    2017-02-15
-*Interactions and External Dependencies*::
-  - This extension requires
-    {spirv}/NV/SPV_NV_viewport_array2.html[`SPV_NV_viewport_array2`]
-  - This extension provides API support for
-    https://www.khronos.org/registry/OpenGL/extensions/NV/NV_viewport_array2.txt[`GL_NV_viewport_array2`]
-  - This extension requires the pname:geometryShader and pname:multiViewport
-    features.
-  - This extension interacts with the pname:tessellationShader feature.
-*Contributors*::
-  - Piers Daniell, NVIDIA
-  - Jeff Bolz, NVIDIA
-
-=== Description
-
-This extension adds support for the following SPIR-V extension in Vulkan:
-
-  * `SPV_NV_viewport_array2`
-
-which allows a single primitive to be broadcast to multiple viewports and/or
-multiple layers.
-A new shader built-in output code:ViewportMaskNV is provided, which allows a
-single primitive to be output to multiple viewports simultaneously.
-Also, a new SPIR-V decoration is added to control whether the effective
-viewport index is added into the variable decorated with the code:Layer
-built-in decoration.
-These capabilities allow a single primitive to be output to multiple layers
-simultaneously.
-
-This extension allows variables decorated with the code:Layer and
-code:ViewportIndex built-ins to be exported from vertex or tessellation
-shaders, using the code:ShaderViewportIndexLayerNV capability.
-
-This extension adds a new code:ViewportMaskNV built-in decoration that is
-available for output variables in vertex, tessellation evaluation, and
-geometry shaders, and a new code:ViewportRelativeNV decoration that can be
-added on variables decorated with code:Layer when using the
-code:ShaderViewportMaskNV capability.
-
-When using GLSL source-based shading languages, the code:gl_ViewportMask[]
-built-in output variable and code:viewport_relative layout qualifier from
-`GL_NV_viewport_array2` map to the code:ViewportMaskNV and
-code:ViewportRelativeNV decorations, respectively.
-Behaviour is described in the `GL_NV_viewport_array2` extension
-specificiation.
-
-ifdef::VK_EXT_shader_viewport_index_layer[]
-[NOTE]
-.Note
-====
-The code:ShaderViewportIndexLayerNV capability is equivalent to the
-code:ShaderViewportIndexLayerEXT capability added by
-`apiext:VK_EXT_shader_viewport_index_layer`.
-====
-endif::VK_EXT_shader_viewport_index_layer[]
-
-include::{generated}/interfaces/VK_NV_viewport_array2.txt[]
-
-=== New or Modified Built-In Variables
-
-  * (modified) <<interfaces-builtin-variables-layer,code:Layer>>
-  * (modified)
-    <<interfaces-builtin-variables-viewportindex,code:ViewportIndex>>
-  * <<interfaces-builtin-variables-viewportmask,code:ViewportMaskNV>>
-
-=== New Variable Decoration
-
-  * <<interfaces-builtin-variables-layer,code:ViewportRelativeNV in
-    code:Layer>>
-
-=== New SPIR-V Capabilities
-
-  * <<spirvenv-capabilities-table-ShaderViewportIndexLayerNV,code:ShaderViewportIndexLayerNV>>
-  * <<spirvenv-capabilities-table-ShaderViewportMaskNV,code:ShaderViewportMaskNV>>
-
-=== Version History
-
-  * Revision 1, 2017-02-15 (Daniel Koch)
-    - Internal revisions
diff --git a/registry/vulkan/appendices/VK_NV_viewport_swizzle.txt b/registry/vulkan/appendices/VK_NV_viewport_swizzle.txt
deleted file mode 100644
index d1b414d..0000000
--- a/registry/vulkan/appendices/VK_NV_viewport_swizzle.txt
+++ /dev/null
@@ -1,213 +0,0 @@
-// Copyright (c) 2016-2020 NVIDIA Corporation
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-include::{generated}/meta/{refprefix}VK_NV_viewport_swizzle.txt[]
-
-=== Other Extension Metadata
-
-*Last Modified Date*::
-    2016-12-22
-*Interactions and External Dependencies*::
-  - This extension requires pname:multiViewport and pname:geometryShader
-    features to be useful.
-*Contributors*::
-  - Daniel Koch, NVIDIA
-  - Jeff Bolz, NVIDIA
-
-=== Description
-
-This extension provides a new per-viewport swizzle that can modify the
-position of primitives sent to each viewport.
-New viewport swizzle state is added for each viewport, and a new position
-vector is computed for each vertex by selecting from and optionally negating
-any of the four components of the original position vector.
-
-This new viewport swizzle is useful for a number of algorithms, including
-single-pass cube map rendering (broadcasting a primitive to multiple faces
-and reorienting the vertex position for each face) and voxel rasterization.
-The per-viewport component remapping and negation provided by the swizzle
-allows application code to re-orient three-dimensional geometry with a view
-along any of the *X*, *Y*, or *Z* axes.
-If a perspective projection and depth buffering is required, [eq]#1/W#
-buffering should be used, as described in the single-pass cube map rendering
-example in the "`Issues`" section below.
-
-include::{generated}/interfaces/VK_NV_viewport_swizzle.txt[]
-
-=== Issues
-
-1) Where does viewport swizzling occur in the pipeline?
-
-*RESOLVED*: Despite being associated with the viewport, viewport swizzling
-must happen prior to the viewport transform.
-In particular, it needs to be performed before clipping and perspective
-division.
-
-The viewport mask expansion (`apiext:VK_NV_viewport_array2`) and the
-viewport swizzle could potentially be performed before or after transform
-feedback, but feeding back several viewports worth of primitives with
-different swizzles does not seem particularly useful.
-This specification applies the viewport mask and swizzle after transform
-feedback, and makes primitive queries only count each primitive once.
-
-2) Any interesting examples of how this extension,
-`apiext:VK_NV_viewport_array2`, and
-`apiext:VK_NV_geometry_shader_passthrough` can be used together in practice?
-
-*RESOLVED*: One interesting use case for this extension is for single-pass
-rendering to a cube map.
-In this example, the application would attach a cube map texture to a
-layered FBO where the six cube faces are treated as layers.
-Vertices are sent through the vertex shader without applying a projection
-matrix, where the code:gl_Position output is [eq]#(x,y,z,1)# and the center
-of the cube map is at [eq]#(0,0,0)#.
-With unextended Vulkan, one could have a conventional instanced geometry
-shader that looks something like the following:
-
-[source,c]
----------------------------------------------------
-layout(invocations = 6) in;     // separate invocation per face
-layout(triangles) in;
-layout(triangle_strip) out;
-layout(max_vertices = 3) out;
-
-in Inputs {
-vec2 texcoord;
-vec3 normal;
-vec4 baseColor;
-} v[];
-
-    out Outputs {
-    vec2 texcoord;
-    vec3 normal;
-    vec4 baseColor;
-    };
-
-    void main()
-    {
-    int face = gl_InvocationID;  // which face am I?
-
-    // Project gl_Position for each vertex onto the cube map face.
-    vec4 positions[3];
-    for (int i = 0; i < 3; i++) {
-        positions[i] = rotate(gl_in[i].gl_Position, face);
-    }
-
-    // If the primitive does not project onto this face, we are done.
-    if (shouldCull(positions)) {
-        return;
-    }
-
-    // Otherwise, emit a copy of the input primitive to the
-    // appropriate face (using gl_Layer).
-    for (int i = 0; i < 3; i++) {
-        gl_Layer = face;
-        gl_Position = positions[i];
-        texcoord = v[i].texcoord;
-        normal = v[i].normal;
-        baseColor = v[i].baseColor;
-        EmitVertex();
-    }
-}
----------------------------------------------------
-
-With passthrough geometry shaders, this can be done using a much simpler
-shader:
-
-[source,c]
----------------------------------------------------
-layout(triangles) in;
-layout(passthrough) in Inputs {
-    vec2 texcoord;
-    vec3 normal;
-    vec4 baseColor;
-}
-layout(passthrough) in gl_PerVertex {
-    vec4 gl_Position;
-} gl_in[];
-layout(viewport_relative) out int gl_Layer;
-
-void main()
-{
-    // Figure out which faces the primitive projects onto and
-    // generate a corresponding viewport mask.
-    uint mask = 0;
-    for (int i = 0; i < 6; i++) {
-        if (!shouldCull(face)) {
-        mask |= 1U << i;
-        }
-    }
-    gl_ViewportMask = mask;
-    gl_Layer = 0;
-}
----------------------------------------------------
-
-The application code is set up so that each of the six cube faces has a
-separate viewport (numbered 0 to 5).
-Each face also has a separate swizzle, programmed via the
-slink:VkPipelineViewportSwizzleStateCreateInfoNV pipeline state.
-The viewport swizzle feature performs the coordinate transformation handled
-by the code:rotate() function in the original shader.
-The code:viewport_relative layout qualifier says that the viewport number (0
-to 5) is added to the base code:gl_Layer value of 0 to determine which layer
-(cube face) the primitive should be sent to.
-
-Note that the use of the passed through input code:normal in this example
-suggests that the fragment shader in this example would perform an operation
-like per-fragment lighting.
-The viewport swizzle would transform the position to be face-relative, but
-code:normal would remain in the original coordinate system.
-It seems likely that the fragment shader in either version of the example
-would want to perform lighting in the original coordinate system.
-It would likely do this by reconstructing the position of the fragment in
-the original coordinate system using code:gl_FragCoord, a constant or
-uniform holding the size of the cube face, and the input
-code:gl_ViewportIndex (or code:gl_Layer), which identifies the cube face.
-Since the value of code:normal is in the original coordinate system, it
-would not need to be modified as part of this coordinate transformation.
-
-Note that while the code:rotate() operation in the regular geometry shader
-above could include an arbitrary post-rotation projection matrix, the
-viewport swizzle does not support arbitrary math.
-To get proper projection, [eq]#1/W# buffering should be used.
-To do this:
-
-  . Program the viewport swizzles to move the pre-projection [eq]#W# eye
-    coordinate (typically 1.0) into the [eq]#Z# coordinate of the swizzle
-    output and the eye coordinate component used for depth into the [eq]#W#
-    coordinate.
-    For example, the viewport corresponding to the [eq]#+Z# face might use a
-    swizzle of [eq]#(+X, -Y, +W, +Z)#.
-    The [eq]#Z# normalized device coordinate computed after swizzling would
-    then be [eq]#z'/w' = 1/Z~eye~#.
-  . On NVIDIA implementations supporting floating-point depth buffers with
-    values outside [eq]#[0,1]#, prevent unwanted near plane clipping by
-    enabling pname:depthClampEnable.
-    Ensure that the depth clamp does not mess up depth testing by
-    programming the depth range to very large values, such as
-    [eq]#pname:minDepthBounds=-z#, [eq]#pname:maxDepthBounds=+z#, where
-    [eq]#z = 2^127^#.
-    It should be possible to use IEEE infinity encodings also (`0xFF800000`
-    for `-INF`, `0x7F800000` for `+INF`).
-    Even when near/far clipping is disabled, primitives extending behind the
-    eye will still be clipped because one or more vertices will have a
-    negative [eq]#W# coordinate and fail [eq]#X#/[eq]#Y# clipping tests.
-+
---
-On other implementations, scale [eq]#X#, [eq]#Y#, and [eq]#Z# eye
-coordinates so that vertices on the near plane have a post-swizzle [eq]#W#
-coordinate of 1.0.
-For example, if the near plane is at [eq]#Z~eye~ = 1/256#, scale [eq]#X#,
-[eq]#Y#, and [eq]#Z# by 256.
---
-  . Adjust depth testing to reflect the fact that [eq]#1/W# values are large
-    near the eye and small away from the eye.
-    Clear the depth buffer to zero (infinitely far away) and use a depth
-    test of ename:VK_COMPARE_OP_GREATER instead of ename:VK_COMPARE_OP_LESS.
-
-
-=== Version History
-
-  * Revision 1, 2016-12-22 (Piers Daniell)
-    - Internal revisions
diff --git a/registry/vulkan/appendices/VK_NV_win32_keyed_mutex.txt b/registry/vulkan/appendices/VK_NV_win32_keyed_mutex.txt
deleted file mode 100644
index 549f914..0000000
--- a/registry/vulkan/appendices/VK_NV_win32_keyed_mutex.txt
+++ /dev/null
@@ -1,173 +0,0 @@
-// Copyright (c) 2016-2020 NVIDIA Corporation
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-include::{generated}/meta/{refprefix}VK_NV_win32_keyed_mutex.txt[]
-
-=== Other Extension Metadata
-
-*Last Modified Date*::
-    2016-08-19
-*IP Status*::
-    No known IP claims.
-*Contributors*::
-  - James Jones, NVIDIA
-  - Carsten Rohde, NVIDIA
-
-=== Description
-
-Applications that wish to import Direct3D 11 memory objects into the Vulkan
-API may wish to use the native keyed mutex mechanism to synchronize access
-to the memory between Vulkan and Direct3D.
-This extension provides a way for an application to access the keyed mutex
-associated with an imported Vulkan memory object when submitting command
-buffers to a queue.
-
-include::{generated}/interfaces/VK_NV_win32_keyed_mutex.txt[]
-
-=== Examples
-
-[source,c++]
-----------------------------------------
-
-    //
-    // Import a memory object from Direct3D 11, and synchronize
-    // access to it in Vulkan using keyed mutex objects.
-    //
-
-    extern VkPhysicalDevice physicalDevice;
-    extern VkDevice device;
-    extern HANDLE sharedNtHandle;
-
-    static const VkFormat format = VK_FORMAT_R8G8B8A8_UNORM;
-    static const VkExternalMemoryHandleTypeFlagsNV handleType =
-        VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_IMAGE_BIT_NV;
-
-    VkPhysicalDeviceMemoryProperties memoryProperties;
-    VkExternalImageFormatPropertiesNV properties;
-    VkExternalMemoryImageCreateInfoNV externalMemoryImageCreateInfo;
-    VkImageCreateInfo imageCreateInfo;
-    VkImage image;
-    VkMemoryRequirements imageMemoryRequirements;
-    uint32_t numMemoryTypes;
-    uint32_t memoryType;
-    VkImportMemoryWin32HandleInfoNV importMemoryInfo;
-    VkMemoryAllocateInfo memoryAllocateInfo;
-    VkDeviceMemory mem;
-    VkResult result;
-
-    // Figure out how many memory types the device supports
-    vkGetPhysicalDeviceMemoryProperties(physicalDevice,
-                                        &memoryProperties);
-    numMemoryTypes = memoryProperties.memoryTypeCount;
-
-    // Check the external handle type capabilities for the chosen format
-    // Importable 2D image support with at least 1 mip level, 1 array
-    // layer, and VK_SAMPLE_COUNT_1_BIT using optimal tiling and supporting
-    // texturing and color rendering is required.
-    result = vkGetPhysicalDeviceExternalImageFormatPropertiesNV(
-        physicalDevice,
-        format,
-        VK_IMAGE_TYPE_2D,
-        VK_IMAGE_TILING_OPTIMAL,
-        VK_IMAGE_USAGE_SAMPLED_BIT |
-        VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT,
-        0,
-        handleType,
-        &properties);
-
-    if ((result != VK_SUCCESS) ||
-        !(properties.externalMemoryFeatures &
-          VK_EXTERNAL_MEMORY_FEATURE_IMPORTABLE_BIT_NV)) {
-        abort();
-    }
-
-    // Set up the external memory image creation info
-    memset(&externalMemoryImageCreateInfo,
-           0, sizeof(externalMemoryImageCreateInfo));
-    externalMemoryImageCreateInfo.sType =
-        VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_IMAGE_CREATE_INFO_NV;
-    externalMemoryImageCreateInfo.handleTypes = handleType;
-    // Set up the  core image creation info
-    memset(&imageCreateInfo, 0, sizeof(imageCreateInfo));
-    imageCreateInfo.sType = VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO;
-    imageCreateInfo.pNext = &externalMemoryImageCreateInfo;
-    imageCreateInfo.format = format;
-    imageCreateInfo.extent.width = 64;
-    imageCreateInfo.extent.height = 64;
-    imageCreateInfo.extent.depth = 1;
-    imageCreateInfo.mipLevels = 1;
-    imageCreateInfo.arrayLayers = 1;
-    imageCreateInfo.samples = VK_SAMPLE_COUNT_1_BIT;
-    imageCreateInfo.tiling = VK_IMAGE_TILING_OPTIMAL;
-    imageCreateInfo.usage = VK_IMAGE_USAGE_SAMPLED_BIT |
-        VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT;
-    imageCreateInfo.sharingMode = VK_SHARING_MODE_EXCLUSIVE;
-    imageCreateInfo.initialLayout = VK_IMAGE_LAYOUT_UNDEFINED;
-
-    vkCreateImage(device, &imageCreateInfo, NULL, &image);
-    vkGetImageMemoryRequirements(device,
-                                 image,
-                                 &imageMemoryRequirements);
-
-    // For simplicity, just pick the first compatible memory type.
-    for (memoryType = 0; memoryType < numMemoryTypes; memoryType++) {
-        if ((1 << memoryType) & imageMemoryRequirements.memoryTypeBits) {
-            break;
-        }
-    }
-
-    // At least one memory type must be supported given the prior external
-    // handle capability check.
-    assert(memoryType < numMemoryTypes);
-
-    // Allocate the external memory object.
-    memset(&exportMemoryAllocateInfo, 0, sizeof(exportMemoryAllocateInfo));
-    exportMemoryAllocateInfo.sType =
-        VK_STRUCTURE_TYPE_EXPORT_MEMORY_ALLOCATE_INFO_NV;
-    importMemoryInfo.handleTypes = handleType;
-    importMemoryInfo.handle = sharedNtHandle;
-
-    memset(&memoryAllocateInfo, 0, sizeof(memoryAllocateInfo));
-    memoryAllocateInfo.sType = VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO;
-    memoryAllocateInfo.pNext = &exportMemoryAllocateInfo;
-    memoryAllocateInfo.allocationSize = imageMemoryRequirements.size;
-    memoryAllocateInfo.memoryTypeIndex = memoryType;
-
-    vkAllocateMemory(device, &memoryAllocateInfo, NULL, &mem);
-
-    vkBindImageMemory(device, image, mem, 0);
-
-    ...
-
-    const uint64_t acquireKey = 1;
-    const uint32_t timeout = INFINITE;
-    const uint64_t releaseKey = 2;
-
-    VkWin32KeyedMutexAcquireReleaseInfoNV keyedMutex =
-        { VK_STRUCTURE_TYPE_WIN32_KEYED_MUTEX_ACQUIRE_RELEASE_INFO_NV };
-    keyedMutex.acquireCount = 1;
-    keyedMutex.pAcquireSyncs = &mem;
-    keyedMutex.pAcquireKeys = &acquireKey;
-    keyedMutex.pAcquireTimeoutMilliseconds = &timeout;
-    keyedMutex.releaseCount = 1;
-    keyedMutex.pReleaseSyncs = &mem;
-    keyedMutex.pReleaseKeys = &releaseKey;
-
-    VkSubmitInfo submit_info = { VK_STRUCTURE_TYPE_SUBMIT_INFO, &keyedMutex };
-    submit_info.commandBufferCount = 1;
-    submit_info.pCommandBuffers = &cmd_buf;
-    vkQueueSubmit(queue, 1, &submit_info, VK_NULL_HANDLE);
-
-----------------------------------------
-
-=== Version History
-
-  * Revision 2, 2016-08-11 (James Jones)
-    - Updated sample code based on the NV external memory extensions.
-    - Renamed from NVX to NV extension.
-    - Added Overview and Description sections.
-    - Updated sample code to use the NV external memory extensions.
-
-  * Revision 1, 2016-06-14 (Carsten Rohde)
-    - Initial draft.
diff --git a/registry/vulkan/appendices/VK_QCOM_render_pass_shader_resolve.txt b/registry/vulkan/appendices/VK_QCOM_render_pass_shader_resolve.txt
deleted file mode 100644
index 12f5727..0000000
--- a/registry/vulkan/appendices/VK_QCOM_render_pass_shader_resolve.txt
+++ /dev/null
@@ -1,92 +0,0 @@
-// Copyright (c) 2019-2020 Qualcomm Technologies, Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-include::{generated}/meta/{refprefix}VK_QCOM_render_pass_shader_resolve.txt[]
-
-=== Other Extension Metadata
-
-*Last Modified Date*::
-    2019-11-07
-*IP Status*::
-    No known IP claims.
-*Interactions and External Dependencies*::
-    None.
-*Contributors*::
-  - Srihari Babu Alla, Qualcomm
-  - Bill Licea-Kane, Qualcomm
-  - Jeff Leger, Qualcomm
-
-=== Description
-
-This extension allows a shader resolve to replace fixed-function resolve.
-
-Fixed-function resolve is limited in function to simple filters of
-multisample buffers to a single sample buffer.
-
-Fixed-function resolve is more performance efficient and/or power efficient
-than shader resolve for such simple filters.
-
-Shader resolve allows a shader writer to create complex, non-linear
-filtering of a multisample buffer in the last subpass of a subpass
-dependency chain.
-
-This extension also provides a bit which can: be used to enlarge a sample
-region dependency to a fragment region dependency, so that a
-framebuffer-region dependency can: replace a framebuffer-global dependency
-in some cases.
-
-include::{generated}/interfaces/VK_QCOM_render_pass_shader_resolve.txt[]
-
-=== Issues
-
-1) Should this extension be named render_pass_shader_resolve?
-
-*RESOLVED* Yes.
-
-This is part of suite of small extensions to render pass.
-
-Following the style guide, instead of following VK_KHR_create_renderpass2.
-
-2) Should the VK_SAMPLE_COUNT_1_BIT be required for each pColorAttachment
-and the DepthStencilAttachent?
-
-*RESOLVED* No.
-
-While this may not be a common use case, and while most fixed-function
-resolve hardware has this limitation, there is little reason to require a
-shader resolve to resolve to a single sample buffer.
-
-3) Should a shader resolve subpass be the last subpass in a render pass?
-
-*RESOLVED* Yes.
-
-To be more specific, it should be the last subpass in a subpass dependency
-chain.
-
-4) Do we need the ename:VK_SUBPASS_DESCRIPTION_FRAGMENT_REGION_BIT_QCOM bit?
-
-*RESOLVED* Yes.
-
-This applies when an input attachment's sample count is equal to
-pname:rasterizationSamples.
-Further, if pname:sampleShading is enabled (explicitly or implicitly) then
-pname:minSampleShading must: equal 0.0.
-
-However, this bit may be set on any subpass, it is not restricted to a
-shader resolve subpass.
-
-=== Version History
-
-  * Revision 1, 2019-06-28 (wwlk)
-    - Initial draft
-  * Revision 2, 2019-11-06 (wwlk)
-    - General clean-up/spec updates
-    - Added issues
-  * Revision 3, 2019-11-07 (wwlk)
-    - Typos
-    - Additional issues
-    - Clarified that a shader resolve subpass is the last subpass in a
-      subpass dependency chain
-  * Revision 4, 2020-01-06 (wwlk)
-    - Change resolution of Issue 1 (_render_pass_, not _renderpass_)
diff --git a/registry/vulkan/appendices/VK_QCOM_render_pass_store_ops.txt b/registry/vulkan/appendices/VK_QCOM_render_pass_store_ops.txt
deleted file mode 100644
index 4097a43..0000000
--- a/registry/vulkan/appendices/VK_QCOM_render_pass_store_ops.txt
+++ /dev/null
@@ -1,50 +0,0 @@
-// Copyright (c) 2019-2020 Qualcomm Technologies, Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-include::{generated}/meta/{refprefix}VK_QCOM_render_pass_store_ops.txt[]
-
-=== Other Extension Metadata
-
-*Last Modified Date*::
-    2020-03-25
-*Contributors*::
-  - Bill Licea-Kane, Qualcomm Technologies, Inc.
-
-=== Description
-
-Renderpass attachments can: be read-only for the duration of a render pass.
-
-Examples include input attachments and depth attachments where depth tests
-are enabled but depth writes are not enabled.
-
-In such cases, there can: be no contents generated for an attachment within
-the render area.
-
-This extension adds a new elink:VkAttachmentStoreOp
-ename:VK_ATTACHMENT_STORE_OP_NONE_QCOM which specifies that the contents
-within the render area may: not be written to memory, but that the prior
-contents of the attachment in memory are preserved.
-However, if any contents were generated within the render area during
-rendering, the contents of the attachment will be undefined: inside the
-render area.
-
-[NOTE]
-.Note
-====
-The elink:VkAttachmentStoreOp ename:VK_ATTACHMENT_STORE_OP_STORE may: force
-an implementation to assume that the attachment was written and force an
-implementation to flush data to memory or to a higher level cache.
-The elink:VkAttachmentStoreOp ename:VK_ATTACHMENT_STORE_OP_NONE_QCOM may:
-allow an implementation to assume that the attachment was not written and
-allow an implementation to avoid such a flush..
-====
-
-include::{generated}/interfaces/VK_QCOM_render_pass_store_ops.txt[]
-
-=== Version History
-
- * Revision 1, 2019-12-20 (wwlk)
-   - Initial version
- * Revision 2, 2020-03-25 (wwlk)
-   - Minor renaming
diff --git a/registry/vulkan/appendices/VK_QCOM_render_pass_transform.txt b/registry/vulkan/appendices/VK_QCOM_render_pass_transform.txt
deleted file mode 100644
index 11c8624..0000000
--- a/registry/vulkan/appendices/VK_QCOM_render_pass_transform.txt
+++ /dev/null
@@ -1,174 +0,0 @@
-// Copyright (c) 2020 Qualcomm Technologies, Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-include::{generated}/meta/{refprefix}VK_QCOM_render_pass_transform.txt[]
-
-=== Other Extension Metadata
-
-*Last Modified Date*::
-    2021-03-09
-*Interactions and External Dependencies*::
-  - This extension requires `apiext:VK_KHR_swapchain`
-  - This extension interacts with `apiext:VK_EXT_fragment_density_map`
-  - This extension interacts with `apiext:VK_KHR_fragment_shading_rate`
-*Contributors*::
-  - Jeff Leger, Qualcomm Technologies, Inc.
-  - Brandon Light, Qualcomm Technologies, Inc.
-  - Matthew Netsch, Qualcomm Technologies, Inc.
-
-=== Description
-
-This extension provides a mechanism for applications to enable driver
-support for <<vertexpostproc-renderpass-transform, render pass transform>>.
-
-Mobile devices can be rotated and mobile applications need to render
-properly when a device is held in a landscape or portrait orientation.
-When the current orientation differs from the device's native orientation, a
-rotation is required so that the "`up`" direction of the rendered scene
-matches the current orientation.
-
-If the Display Processing Unit (DPU) doesnt natively support rotation, the
-Vulkan presentation engine can handle this rotation in a separate
-composition pass.
-Alternatively, the application can render frames "`pre-rotated`" to avoid
-this extra pass.
-The latter is preferred to reduce power consumption and achieve the best
-performance because it avoids tasking the GPU with extra work to perform the
-copy/rotate operation.
-
-Unlike OpenGL ES, the burden of pre-rotation in Vulkan falls on the
-application.
-To implement pre-rotation, applications render into swapchain images
-matching the device native aspect ratio of the display and "`pre-rotate`"
-the rendering content to match the device's current orientation.
-The burden is more than adjusting the Model View Projection (MVP) matrix in
-the vertex shader to account for rotation and aspect ratio.
-The coordinate systems of scissors, viewports, derivatives and several
-shader built-ins may need to be adapted to produce the correct result.
-
-It is difficult for some game engines to manage this burden; many chose to
-simply accept the performance/power overhead of performing rotation in the
-presentation engine.
-
-This extension allows applications to achieve the performance benefits of
-pre-rotated rendering by moving much of the above-mentioned burden to the
-graphics driver.
-The following is unchanged with this extension:
-
-  * Applications create a swapchain matching the native orientation of the
-    display.
-    Applications must also set the
-    slink:VkSwapchainCreateInfoKHR::pname:preTransform equal to the
-    pname:currentTransform as returned by
-    flink:vkGetPhysicalDeviceSurfaceCapabilitiesKHR.
-
-The following is changed with this extension:
-
-  * At flink:vkCmdBeginRenderPass, the application provides extension struct
-    slink:VkRenderPassTransformBeginInfoQCOM specifying the render pass
-    transform parameters.
-  * At flink:vkBeginCommandBuffer for secondary command buffers, the
-    application provides extension struct
-    slink:VkCommandBufferInheritanceRenderPassTransformInfoQCOM specifying
-    the render pass transform parameters.
-  * The pname:renderArea, viewports, scissors, and pname:fragmentSize are
-    all provided in the current (non-rotated) coordinate system.
-    The implementation will transform those into the native (rotated)
-    coordinate system.
-  * The implementation is responsible for transforming shader built-ins
-    (code:FragCoord, code:PointCoord, code:SamplePosition,
-    code:PrimitiveShadingRateKHR, interpolateAt(), dFdx, dFdy, fWidth) into
-    the rotated coordinate system.
-  * The implementation is responsible for transforming code:position to the
-    rotated coordinate system.
-
-include::{generated}/interfaces/VK_QCOM_render_pass_transform.txt[]
-
-=== Issues
-1) Some early Adreno drivers (October 2019 through March 2020) advertised
-support for this extension but expected VK_STRUCTURE_TYPE values different
-from those in the vukan headers.
-To cover all Adreno devices on the market, applications need to detect the
-driver version and use the appropriate VK_STRUCTURE_TYPE values from the
-table below.
-
-The driver version reported in VkPhysicalDeviceProperties.driverVersion is a
-code:uint32_t type.
-You can decode the code:uint32_t value into a major.minor.patch version as
-shown below:
-[source,c]
----------------------------------------------------
-uint32_t  major = ((driverVersion) >> 22);
-uint32_t  minor = ((driverVersion) >> 12) & 0x3ff);
-uint32_t  patch = ((driverVersion) & 0xfff);
----------------------------------------------------
-
-If the Adreno major.minor.patch version is greater than or equal to to
-512.469.0, then simply use the VK_STRUCTURE_TYPE values as defined in
-vulkan_core.h.
-If the version is less than or equal to to 512.468.0, then use the alternate
-values for the two VK_STRUCTURE_TYPEs in the table below.
-
-.fname:Adreno Driver Requirements
-[width="80%",options="header"]
-|====
-|    2+| Adreno Driver Version
-|                      | 512.468.0 and earlier  | 512.469.0 and later
-|VK_STRUCTURE_TYPE_ RENDER_PASS_TRANSFORM_BEGIN_INFO_QCOM                     | 1000282000 | 1000282001
-|VK_STRUCTURE_TYPE_ COMMAND_BUFFER_INHERITANCE_RENDER_PASS_TRANSFORM_INFO_QCOM| 1000282001 | 1000282000
-|====
-
-2) Should the extension support only rotations (e.g. 90, 180, 270-degrees),
-or also mirror transforms (e.g. vertical flips)? Mobile use-cases only
-require rotation.
-Other display systems such as projectors might require a flipped transform.
-
-*RESOLVED*: In this version of the extension, the functionality is
-restricted to 90, 180, and 270-degree rotations to address mobile use-cases.
-
-3) How does this extension interact with VK_EXT_fragment_density_map?
-
-*RESOLVED* Some implementations may not be able to support a render pass
-that enables both render pass transform and fragment density maps.
-For simplicity, this extension disallows enabling both features within a
-single render pass.
-
-4) What should this extension be named?
-
-We considered names such as "`rotated_rendering`", "`pre_rotation`" and
-others.
-Since the functionality is limited to a render pass, it seemed the name
-should include "`render_pass`".
-While the current extension is limited to rotations, it could be extended to
-other transforms (like mirror) in the future.
-
-*RESOLVED* The name "`render_pass_transform`" seems like the most accurate
-description of the introduced functionality.
-
-5) How does this extension interact with VK_KHR_fragment_shading_rate?
-
-*RESOLVED*: For the same reasons as issue 3, this extension disallows
-enabling both pname:pFragmentShadingRateAttachment and render pass transform
-within a single render pass.
-
-However, pipeline shading rate and primitive shading rate are supported, and
-their respective pname:fragmentSize and code:PrimitiveShadingRateKHR are
-provided in the current (non-rotated) coordinate system.
-The implementation is responsible for transforming them to the rotated
-coordinate system.
-
-The <<primsrast-fragment-shading-rate, set of supported shading rates>> may:
-be different per transform.
-Supported rates queried from
-flink:vkGetPhysicalDeviceFragmentShadingRatesKHR are in the native (rotated)
-coordinate system.
-This means that the application must: swap the x/y of the reported rates to
-get the set of rates supported for 90 and 270 degree rotation.
-
-
-=== Version History
-
-  * Revision 1, 2020-02-05 (Jeff Leger)
-  * Revision 2, 2021-03-09 (Matthew Netsch)
-    - Adds interactions with VK_KHR_fragment_shading_rate
diff --git a/registry/vulkan/appendices/VK_QCOM_rotated_copy_commands.txt b/registry/vulkan/appendices/VK_QCOM_rotated_copy_commands.txt
deleted file mode 100644
index b65d2b3..0000000
--- a/registry/vulkan/appendices/VK_QCOM_rotated_copy_commands.txt
+++ /dev/null
@@ -1,62 +0,0 @@
-// Copyright (c) 2020 Qualcomm Technologies, Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-include::{generated}/meta/{refprefix}VK_QCOM_rotated_copy_commands.txt[]
-
-=== Other Extension Metadata
-
-*Last Modified Date*::
-    2020-09-18
-*Interactions and External Dependencies*::
-  - None
-*Contributors*::
-  - Jeff Leger, Qualcomm Technologies, Inc.
-
-=== Description
-
-This extension extends adds an optional rotation transform to copy commands
-flink:vkCmdBlitImage2KHR, flink:vkCmdCopyImageToBuffer2KHR and
-flink:vkCmdCopyBufferToImage2KHR.
-When copying between two resources, where one resource contains rotated
-content and the other does not, a rotated copy may be desired.
-This extension may be used in combination with VK_QCOM_render_pass_transform
-which adds rotated render passes.
-
-This extension adds an extension structure to the following commands:
-vkCmdBlitImage2KHR, vkCmdCopyImageToBuffer2KHR and
-vkCmdCopyBufferToImage2KHR
-
-
-=== Issues
-
-1) What is an appropriate name for the added extension structure? The style
-guide says "`Structures which extend other structures through the
-pname:pNext chain should reflect the name of the base structure they
-extend.`", but in this case a single extension structure is used to extend
-three base structures (vkCmdBlitImage2KHR, vkCmdCopyImageToBuffer2KHR and
-vkCmdCopyBufferToImage2KHR).
-Creating three identical structures with unique names seemed undesirable.
-
-*RESOLVED*: Deviate from the style guide for extension structure naming.
-
-
-2) Should this extension add a rotation capability to vkCmdCopyImage2KHR?
-
-*RESOLVED*: No.
-Use of rotated vkCmdBlitImage2KHR can fully address this use-case.
-
-3) Should this extension add a rotation capability to vkCmdResolveImage2KHR?
-
-*RESOLVED* No.
-Use of vkCmdResolveImage2KHR is very slow and extremely bandwidth intensive
-on Qualcomm's GPU architecture and use of pResolveAttachments in
-vkRenderPass is the strongly preferred approach.
-Therefore, we choose not to introduce a rotation capability to
-vkCmdResolveImage2KHR.
-
-include::{generated}/interfaces/VK_QCOM_rotated_copy_commands.txt[]
-
-=== Version History
-
-  * Revision 1, 2020-09-19 (Jeff Leger)
diff --git a/registry/vulkan/appendices/VK_QNX_screen_surface.txt b/registry/vulkan/appendices/VK_QNX_screen_surface.txt
deleted file mode 100644
index 3241b58..0000000
--- a/registry/vulkan/appendices/VK_QNX_screen_surface.txt
+++ /dev/null
@@ -1,29 +0,0 @@
-// Copyright (c) 2021 BlackBerry Limited.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-include::{generated}/meta/{refprefix}VK_QNX_screen_surface.txt[]
-
-=== Other Extension Metadata
-
-*Last Modified Date*::
-    2021-01-11
-*IP Status*::
-    No known IP claims.
-*Contributors*::
-  - Mike Gorchak, BlackBerry Limited
-
-=== Description
-
-The `VK_QNX_screen_surface` extension is an instance extension.
-It provides a mechanism to create a slink:VkSurfaceKHR object (defined by
-the `apiext:VK_KHR_surface` extension) that refers to a QNX Screen
-code:window, as well as a query to determine support for rendering to a QNX
-Screen compositor.
-
-include::{generated}/interfaces/VK_QNX_screen_surface.txt[]
-
-=== Version History
-
- * Revision 1, 2021-01-11 (Mike Gorchak)
-   - Initial draft.
diff --git a/registry/vulkan/appendices/VK_VALVE_mutable_descriptor_type.txt b/registry/vulkan/appendices/VK_VALVE_mutable_descriptor_type.txt
deleted file mode 100644
index 3aa1cb3..0000000
--- a/registry/vulkan/appendices/VK_VALVE_mutable_descriptor_type.txt
+++ /dev/null
@@ -1,45 +0,0 @@
-// Copyright 2020-2021 The Khronos Group Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-include::{generated}/meta/{refprefix}VK_VALVE_mutable_descriptor_type.txt[]
-
-=== Other Extension Metadata
-
-*Last Modified Date*::
-    2020-12-02
-*IP Status*::
-    No known IP claims.
-*Contributors*::
-  - Joshua Ashton, Valve
-  - Hans-Kristian Arntzen, Valve
-
-=== Description
-
-This extension allows applications to reduce descriptor memory footprint by
-allowing a descriptor to be able to mutate to a given list of descriptor
-types depending on which descriptor types are written into, or copied into a
-descriptor set.
-
-The main use case this extension intends to address is descriptor indexing
-with ename:VK_DESCRIPTOR_BINDING_VARIABLE_DESCRIPTOR_COUNT_BIT where the
-descriptor types are completely generic, as this means applications can
-allocate one large descriptor set, rather than having one large descriptor
-set per descriptor type, which significantly bloats descriptor memory usage
-and causes performance issues.
-
-This extension also adds a mechanism to declare that a descriptor pool, and
-therefore the descriptor sets that are allocated from it, reside only in
-host memory; as such these descriptors can only be updated/copied, but not
-bound.
-
-These features together allow much more efficient emulation of the raw D3D12
-binding model.
-This extension is primarily intended to be useful for API layering efforts.
-
-include::{generated}/interfaces/VK_VALVE_mutable_descriptor_type.txt[]
-
-=== Version History
-
- * Revision 1, 2020-12-01 (Joshua Ashton, Hans-Kristian Arntzen)
-   - Initial specification, squashed from public draft.
diff --git a/registry/vulkan/appendices/boilerplate.txt b/registry/vulkan/appendices/boilerplate.txt
deleted file mode 100644
index fb11c8a..0000000
--- a/registry/vulkan/appendices/boilerplate.txt
+++ /dev/null
@@ -1,418 +0,0 @@
-// Copyright 2016-2021 The Khronos Group, Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-[appendix]
-[[boilerplate]]
-= API Boilerplate
-
-This appendix defines Vulkan API features that are infrastructure required
-for a complete functional description of Vulkan, but do not logically belong
-elsewhere in the Specification.
-
-
-[[boilerplate-headers]]
-== Vulkan Header Files
-
-Vulkan is defined as an API in the C99 language.
-Khronos provides a corresponding set of header files for applications using
-the API, which may be used in either C or C++ code.
-The interface descriptions in the specification are the same as the
-interfaces defined in these header files, and both are derived from the
-`vk.xml` XML API Registry, which is the canonical machine-readable
-description of the Vulkan API.
-The Registry, scripts used for processing it into various forms, and
-documentation of the registry schema are available as described at
-https://www.khronos.org/registry/vulkan/#apiregistry .
-
-Language bindings for other languages can be defined using the information
-in the Specification and the Registry.
-Khronos does not provide any such bindings, but third-party developers have
-created some additional bindings.
-
-
-[[boilerplate-vulkan-h]]
-=== Vulkan Combined API Header `{full_header}` (Informative)
-
-Applications normally will include the header `{full_header}`.
-In turn, `{full_header}` always includes the following headers:
-
-  * <<boilerplate-platform-macros,`vk_platform.h`>>, defining
-    platform-specific macros and headers.
-  * <<boilerplate-vulkan-core,`{core_header}`>>, defining APIs for the
-    Vulkan core and all registered extensions _other_ than
-    <<boilerplate-wsi-header, window system-specific>> and
-    <<boilerplate-provisional-header, provisional>> extensions, which are
-    included in separate header files.
-
-In addition, specific preprocessor macros defined at the time
-`{full_header}` is included cause header files for the corresponding window
-system-specific and provisional interfaces to be included, as described
-below.
-
-
-[[boilerplate-platform-macros]]
-=== Vulkan Platform-Specific Header `vk_platform.h` (Informative)
-
-Platform-specific macros and interfaces are defined in `vk_platform.h`.
-These macros are used to control platform-dependent behavior, and their
-exact definitions are under the control of specific platforms and Vulkan
-implementations.
-
-
-[[boilerplate-platform-specific-calling-conventions]]
-==== Platform-Specific Calling Conventions
-
-On many platforms the following macros are empty strings, causing platform-
-and compiler-specific default calling conventions to be used.
-
-[open,refpage='VKAPI_ATTR',desc='Vulkan function attribute macro',type='freeform',anchor='boilerplate-platform-specific-calling-conventions',xrefs='VKAPI_CALL VKAPI_PTR']
---
-dname:VKAPI_ATTR is a macro placed before the return type in Vulkan API
-function declarations.
-This macro controls calling conventions for C++11 and GCC/Clang-style
-compilers.
---
-
-[open,refpage='VKAPI_CALL',desc='Vulkan function calling conventions macro',type='freeform',anchor='boilerplate-platform-specific-calling-conventions',xrefs='VKAPI_ATTR VKAPI_PTR']
---
-dname:VKAPI_CALL is a macro placed after the return type in Vulkan API
-function declarations.
-This macro controls calling conventions for MSVC-style compilers.
---
-
-[open,refpage='VKAPI_PTR',desc='Vulkan function pointer calling conventions macro',type='freeform',anchor='boilerplate-platform-specific-calling-conventions',xrefs='VKAPI_ATTR VKAPI_CALL']
---
-dname:VKAPI_PTR is a macro placed between the '(' and '*' in Vulkan API
-function pointer declarations.
-This macro also controls calling conventions, and typically has the same
-definition as dname:VKAPI_ATTR or dname:VKAPI_CALL, depending on the
-compiler.
---
-
-With these macros, a Vulkan function declaration takes the form of:
-
-[source,c++]
-----------------------------------------
-VKAPI_ATTR <return_type> VKAPI_CALL <command_name>(<command_parameters>);
-----------------------------------------
-
-Additionally, a Vulkan function pointer type declaration takes the form of:
-
-[source,c++]
-----------------------------------------
-typedef <return_type> (VKAPI_PTR *PFN_<command_name>)(<command_parameters>);
-----------------------------------------
-
-
-[[boilerplate-platform-specific-header-control]]
-==== Platform-Specific Header Control
-
-[open,refpage='VK_NO_STDINT_H',desc='Control definition of <stdint.h> types',type='freeform',anchor='boilerplate-platform-specific-header-control']
---
-If the dname:VK_NO_STDINT_H macro is defined by the application at compile
-time, extended integer types used by the Vulkan API, such as code:uint8_t,
-must: also be defined by the application.
-Otherwise, the Vulkan headers will not compile.
-If dname:VK_NO_STDINT_H is not defined, the system `<stdint.h>` is used to
-define these types.
-There is a fallback path when Microsoft Visual Studio version 2008 and
-earlier versions are detected at compile time.
---
-
-[open,refpage='VK_NO_STDDEF_H',desc='Control definition of <stddef.h> types',type='freeform',anchor='boilerplate-platform-specific-header-control']
---
-If the dname:VK_NO_STDDEF_H macro is defined by the application at compile
-time, code:size_t, must: also be defined by the application.
-Otherwise, the Vulkan headers will not compile.
-If dname:VK_NO_STDDEF_H is not defined, the system `<stddef.h>` is used to
-define this type.
---
-
-
-[[boilerplate-vulkan-core]]
-=== Vulkan Core API Header `{core_header}`
-
-Applications that do not make use of window system-specific extensions may
-simply include `{core_header}` instead of `{full_header}`, although there is
-usually no reason to do so.
-In addition to the Vulkan API, `{core_header}` also defines a small number
-of C preprocessor macros that are described below.
-
-
-
-
-
-==== Vulkan Header File Version Number
-
-[open,refpage='VK_HEADER_VERSION',desc='Vulkan header file version number',type='defines']
---
-dname:VK_HEADER_VERSION is the version number of the `{core_header}` header.
-This value is kept synchronized with the patch version of the released
-Specification.
-
-include::{generated}/api/defines/VK_HEADER_VERSION.txt[]
---
-
-[open,refpage='VK_HEADER_VERSION_COMPLETE',desc='Vulkan header file complete version number',type='defines']
---
-dname:VK_HEADER_VERSION_COMPLETE is the complete version number of the
-`{core_header}` header, comprising the major, minor, and patch versions.
-The major/minor values are kept synchronized with the complete version of
-the released Specification.
-This value is intended for use by automated tools to identify exactly which
-version of the header was used during their generation.
-
-Applications should not use this value as their
-slink:VkApplicationInfo::pname:apiVersion.
-Instead applications should explicitly select a specific fixed major/minor
-API version using, for example, one of the dname:VK_API_VERSION_*_* values.
-
-include::{generated}/api/defines/VK_HEADER_VERSION_COMPLETE.txt[]
---
-
-[open,refpage='VK_API_VERSION',desc='Deprecated version number macro',type='defines']
---
-dname:VK_API_VERSION is now commented out of `{core_header}` and cannot: be
-used.
-
-include::{generated}/api/defines/VK_API_VERSION.txt[]
---
-
-
-==== Vulkan Handle Macros
-
-[open,refpage='VK_DEFINE_HANDLE',desc='Declare a dispatchable object handle',type='defines',xrefs='VkCommandBuffer VkDevice VkInstance VkPhysicalDevice VkQueue']
---
-dname:VK_DEFINE_HANDLE defines a <<fundamentals-objectmodel-overview,
-dispatchable handle>> type.
-
-include::{generated}/api/defines/VK_DEFINE_HANDLE.txt[]
-
-  * pname:object is the name of the resulting C type.
-
-The only dispatchable handle types are those related to device and instance
-management, such as slink:VkDevice.
---
-
-[open,refpage='VK_DEFINE_NON_DISPATCHABLE_HANDLE',desc='Declare a non-dispatchable object handle',type='defines',xrefs='VkBuffer']
---
-dname:VK_DEFINE_NON_DISPATCHABLE_HANDLE defines a
-<<fundamentals-objectmodel-overview, non-dispatchable handle>> type.
-
-include::{generated}/api/defines/VK_DEFINE_NON_DISPATCHABLE_HANDLE.txt[]
-
-  * pname:object is the name of the resulting C type.
-
-Most Vulkan handle types, such as slink:VkBuffer, are non-dispatchable.
-
-[NOTE]
-.Note
-====
-The `{core_header}` header allows the
-dname:VK_DEFINE_NON_DISPATCHABLE_HANDLE and dname:VK_NULL_HANDLE definitions
-to be overridden by the application.
-If dname:VK_DEFINE_NON_DISPATCHABLE_HANDLE is already defined when
-`{core_header}` is compiled, the default definitions for
-dname:VK_DEFINE_NON_DISPATCHABLE_HANDLE and dname:VK_NULL_HANDLE are
-skipped.
-This allows the application to define a binary-compatible custom handle
-which may: provide more type-safety or other features needed by the
-application.
-Applications must: not define handles in a way that is not binary compatible
-- where binary compatibility is platform dependent.
-====
---
-
-[open,refpage='VK_NULL_HANDLE',desc='Reserved non-valid object handle',type='defines']
---
-dname:VK_NULL_HANDLE is a reserved value representing a non-valid object
-handle.
-It may be passed to and returned from Vulkan commands only when
-<<fundamentals-validusage-handles, specifically allowed>>.
-
-include::{generated}/api/defines/VK_NULL_HANDLE.txt[]
---
-
-[open,refpage='VK_USE_64_BIT_PTR_DEFINES',desc='Defines whether non-dispatchable handles are a 64-bit pointer type or a 64-bit unsigned integer type',type='defines']
---
-dname:VK_USE_64_BIT_PTR_DEFINES defines whether the default non-dispatchable
-handles are declared using either a 64-bit pointer type or a 64-bit unsigned
-integer type.
-
-dname:VK_USE_64_BIT_PTR_DEFINES is set to '1' to use a 64-bit pointer type
-or any other value to use a 64-bit unsigned integer type.
-
-include::{generated}/api/defines/VK_USE_64_BIT_PTR_DEFINES.txt[]
-
-[NOTE]
-.Note
-====
-The `{core_header}` header allows the dname:VK_USE_64_BIT_PTR_DEFINES
-definition to be overridden by the application.
-This allows the application to select either a 64-bit pointer type or a
-64-bit unsigned integer type for non-dispatchable handles in the case where
-the predefined preprocessor check does not identify the desired
-configuration.
-====
-
---
-
-[[boilerplate-wsi-header]]
-== Window System-Specific Header Control (Informative)
-
-[open,refpage='WSIheaders',desc='Control inclusion of window system interface extensions',type='freeform',anchor='boilerplate-wsi-header',xrefs='provisional-headers']
---
-To use a Vulkan extension supporting a platform-specific window system,
-header files for that window systems must: be included at compile time, or
-platform-specific types must: be forward-declared.
-The Vulkan header files cannot determine whether or not an external header
-is available at compile time, so platform-specific extensions are provided
-in separate headers from the core API and platform-independent extensions,
-allowing applications to decide which ones should be defined and how the
-external headers are included.
-
-Extensions dependent on particular sets of platform headers, or that
-forward-declare platform-specific types, are declared in a header named for
-that platform.
-Before including these platform-specific Vulkan headers, applications must:
-include both `{core_header}` and any external native headers the platform
-extensions depend on.
-
-As a convenience for applications that do not need the flexibility of
-separate platform-specific Vulkan headers, `{full_header}` includes
-`{core_header}`, and then conditionally includes platform-specific Vulkan
-headers and the external headers they depend on.
-Applications control which platform-specific headers are included by
-#defining macros before including `{full_header}`.
-
-The correspondence between platform-specific extensions, external headers
-they require, the platform-specific header which declares them, and the
-preprocessor macros which enable inclusion by `{full_header}` are shown in
-the <<boilerplate-wsi-header-table,following table>>.
-
-[[boilerplate-wsi-header-table]]
-.Window System Extensions and Headers
-[options="header"]
-|====
-| Extension Name                     | Window System Name | Platform-specific Header | Required External Headers      | Controlling `{full_header}` Macro
-| `apiext:VK_KHR_android_surface`       | Android            | `vulkan_android.h`       | None                           | dname:VK_USE_PLATFORM_ANDROID_KHR
-| `apiext:VK_KHR_wayland_surface`       | Wayland            | `vulkan_wayland.h`       | `<wayland-client.h>`           | dname:VK_USE_PLATFORM_WAYLAND_KHR
-| `apiext:VK_KHR_win32_surface`,
-  `apiext:VK_KHR_external_memory_win32`,
-  `apiext:VK_KHR_win32_keyed_mutex`,
-  `apiext:VK_KHR_external_semaphore_win32`,
-  `apiext:VK_KHR_external_fence_win32`,
-ifdef::VK_NV_external_memory_win32[]
-  `apiext:VK_NV_external_memory_win32`,
-endif::VK_NV_external_memory_win32[]
-ifdef::VK_NV_win32_keyed_mutex[]
-  `apiext:VK_NV_win32_keyed_mutex`
-endif::VK_NV_win32_keyed_mutex[]
-                                     | Microsoft Windows      | `vulkan_win32.h`         | `<windows.h>`                  | dname:VK_USE_PLATFORM_WIN32_KHR
-| `apiext:VK_KHR_xcb_surface`           | X11 Xcb                | `vulkan_xcb.h`           | `<xcb/xcb.h>`                  | dname:VK_USE_PLATFORM_XCB_KHR
-| `apiext:VK_KHR_xlib_surface`          | X11 Xlib               | `vulkan_xlib.h`          | `<X11/Xlib.h>`                 | dname:VK_USE_PLATFORM_XLIB_KHR
-ifdef::VK_EXT_directfb_surface[]
-| `apiext:VK_EXT_directfb_surface`      | DirectFB               | `vulkan_directfb.h`      | `<directfb/directfb.h>`        | dname:VK_USE_PLATFORM_DIRECTFB_EXT
-endif::VK_EXT_directfb_surface[]
-ifdef::VK_EXT_acquire_xlib_display[]
-| `apiext:VK_EXT_acquire_xlib_display`  | X11 XRAndR             | `vulkan_xlib_xrandr.h`   | `<X11/Xlib.h>`,
-                                                                                           `<X11/extensions{wbro}/Xrandr.h>`    | dname:VK_USE_PLATFORM_XLIB_XRANDR_EXT
-endif::VK_EXT_acquire_xlib_display[]
-ifdef::VK_GGP_stream_descriptor_surface[]
-| `apiext:VK_GGP_stream_descriptor_surface`,
-  `apiext:VK_GGP_frame_token`
-                                     | Google Games Platform | `vulkan_ggp.h`        | <ggp_c/vulkan_types.h>         | dname:VK_USE_PLATFORM_GGP
-endif::VK_GGP_stream_descriptor_surface[]
-ifdef::VK_MVK_ios_surface[]
-| `apiext:VK_MVK_ios_surface`           | iOS                    | `vulkan_ios.h`           | None                           | dname:VK_USE_PLATFORM_IOS_MVK
-endif::VK_MVK_ios_surface[]
-ifdef::VK_MVK_macos_surface[]
-| `apiext:VK_MVK_macos_surface`         | macOS                  | `vulkan_macos.h`         | None                           | dname:VK_USE_PLATFORM_MACOS_MVK
-endif::VK_MVK_macos_surface[]
-ifdef::VK_NN_vi_surface[]
-| `apiext:VK_NN_vi_surface`             | VI                     | `vulkan_vi.h`            | None                           | dname:VK_USE_PLATFORM_VI_NN
-endif::VK_NN_vi_surface[]
-ifdef::VK_FUCHSIA_imagepipe_surface[]
-| `apiext:VK_FUCHSIA_imagepipe_surface` | Fuchsia                | `vulkan_fuchsia.h`       | `<zircon/types.h>`             | dname:VK_USE_PLATFORM_FUCHSIA
-endif::VK_FUCHSIA_imagepipe_surface[]
-ifdef::VK_EXT_metal_surface[]
-| `apiext:VK_EXT_metal_surface`         | Metal on CoreAnimation | `vulkan_metal.h`         | None                           | dname:VK_USE_PLATFORM_METAL_EXT
-endif::VK_EXT_metal_surface[]
-ifdef::VK_QNX_screen_surface[]
-| `apiext:VK_QNX_screen_surface`        | QNX Screen             | `vulkan_screen.h`        | `<screen/screen.h>`            | dname:VK_USE_PLATFORM_SCREEN_QNX
-endif::VK_QNX_screen_surface[]
-|====
-
-[NOTE]
-.Note
-====
-This section describes the purpose of the headers independently of the
-specific underlying functionality of the window system extensions
-themselves.
-Each extension name will only link to a description of that extension when
-viewing a specification built with that extension included.
-====
---
-
-
-[[boilerplate-provisional-header]]
-== Provisional Extension Header Control (Informative)
-
-[open,refpage='provisional-headers',desc='Control inclusion of provisional extensions',type='freeform',alias='VK_ENABLE_BETA_EXTENSIONS',anchor='boilerplate-provisional-header',xrefs='WSIheaders']
---
-_Provisional_ extensions should: not be used in production applications.
-The functionality defined by such extensions may: change in ways that break
-backwards compatibility between revisions, and before final release of a
-non-provisional version of that extension.
-
-Provisional extensions are defined in a separate _provisional header_,
-`vulkan_beta.h`, allowing applications to decide whether or not to include
-them.
-The mechanism is similar to <<boilerplate-wsi-header, window system-specific
-headers>>: before including `vulkan_beta.h`, applications must: include
-`{core_header}`.
-
-[NOTE]
-.Note
-====
-Sometimes a provisional extension will include a subset of its interfaces in
-`{core_header}`.
-This may occur if the provisional extension is promoted from an existing
-vendor or EXT extension and some of the existing interfaces are defined as
-aliases of the provisional extension interfaces.
-All other interfaces of that provisional extension which are not aliased
-will be included in `vulkan_beta.h`.
-====
-
-As a convenience for applications, `{full_header}` conditionally includes
-`vulkan_beta.h`.
-Applications can: control inclusion of `vulkan_beta.h` by #defining the
-macro etext:VK_ENABLE_BETA_EXTENSIONS before including `{full_header}`.
-
-[NOTE]
-.Note
-====
-Starting in version 1.2.171 of the Specification, all provisional enumerants
-are protected by the macro etext:VK_ENABLE_BETA_EXTENSIONS.
-Applications needing to use provisional extensions must always define this
-macro, even if they are explicitly including `vulkan_beta.h`.
-This is a minor change to behavior, affecting only provisional extensions.
-====
-
-[NOTE]
-.Note
-====
-This section describes the purpose of the provisional header independently
-of the specific provisional extensions which are contained in that header at
-any given time.
-The extension appendices for provisional extensions note their provisional
-status, and link back to this section for more information.
-Provisional extensions are intended to provide early access for
-bleeding-edge developers, with the understanding that extension interfaces
-may change in response to developer feedback.
-Provisional extensions are very likely to eventually be updated and released
-as non-provisional extensions, but there is no guarantee this will happen,
-or how long it will take if it does happen.
-====
---
diff --git a/registry/vulkan/appendices/compressedtex.txt b/registry/vulkan/appendices/compressedtex.txt
deleted file mode 100644
index 89e51e8..0000000
--- a/registry/vulkan/appendices/compressedtex.txt
+++ /dev/null
@@ -1,213 +0,0 @@
-// Copyright 2015-2021 The Khronos Group, Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-[appendix]
-[[compressed_image_formats]]
-= Compressed Image Formats
-
-The compressed texture formats used by Vulkan are described in the
-specifically identified sections of the <<data-format,Khronos Data Format
-Specification>>, version 1.3.
-
-Unless otherwise described, the quantities encoded in these compressed
-formats are treated as normalized, unsigned values.
-
-Those formats listed as sRGB-encoded have in-memory representations of
-[eq]#R#, [eq]#G# and [eq]#B# components which are nonlinearly-encoded as
-[eq]#R'#, [eq]#G'#, and [eq]#B'#; any alpha component is unchanged.
-As part of filtering, the nonlinear [eq]#R'#, [eq]#G'#, and [eq]#B'# values
-are converted to linear [eq]#R#, [eq]#G#, and [eq]#B# components; any alpha
-component is unchanged.
-The conversion between linear and nonlinear encoding is performed as
-described in the "`KHR_DF_TRANSFER_SRGB`" section of the Khronos Data Format
-Specification.
-
-<<<
-
-[[appendix-compressedtex-bc]]
-== Block-Compressed Image Formats
-
-BC1, BC2 and BC3 formats are described in "`S3TC Compressed Texture Image
-Formats`" chapter of the <<data-format,Khronos Data Format Specification>>.
-BC4 and BC5 are described in the "`RGTC Compressed Texture Image Formats`"
-chapter.
-BC6H and BC7 are described in the "`BPTC Compressed Texture Image Formats`"
-chapter.
-
-.Mapping of Vulkan BC formats to descriptions
-[width="90%",options="header",cols="5,4"]
-|====
-| elink:VkFormat | <<data-format,Khronos Data Format Specification>> description
-2+^| Formats described in the "`S3TC Compressed Texture Image Formats`" chapter
-| ename:VK_FORMAT_BC1_RGB_UNORM_BLOCK |BC1 with no alpha
-| ename:VK_FORMAT_BC1_RGB_SRGB_BLOCK  |BC1 with no alpha, sRGB-encoded
-| ename:VK_FORMAT_BC1_RGBA_UNORM_BLOCK|BC1 with alpha
-| ename:VK_FORMAT_BC1_RGBA_SRGB_BLOCK |BC1 with alpha, sRGB-encoded
-| ename:VK_FORMAT_BC2_UNORM_BLOCK     |BC2
-| ename:VK_FORMAT_BC2_SRGB_BLOCK      |BC2, sRGB-encoded
-| ename:VK_FORMAT_BC3_UNORM_BLOCK     |BC3
-| ename:VK_FORMAT_BC3_SRGB_BLOCK      |BC3, sRGB-encoded
-2+^| Formats described in the "`RGTC Compressed Texture Image Formats`" chapter
-| ename:VK_FORMAT_BC4_UNORM_BLOCK     |BC4 unsigned
-| ename:VK_FORMAT_BC4_SNORM_BLOCK     |BC4 signed
-| ename:VK_FORMAT_BC5_UNORM_BLOCK     |BC5 unsigned
-| ename:VK_FORMAT_BC5_SNORM_BLOCK     |BC5 signed
-2+^| Formats described in the "`BPTC Compressed Texture Image Formats`" chapter
-| ename:VK_FORMAT_BC6H_UFLOAT_BLOCK   |BC6H (unsigned version)
-| ename:VK_FORMAT_BC6H_SFLOAT_BLOCK   |BC6H (signed version)
-| ename:VK_FORMAT_BC7_UNORM_BLOCK     |BC7
-| ename:VK_FORMAT_BC7_SRGB_BLOCK      |BC7, sRGB-encoded
-|====
-
-<<<
-
-[[appendix-compressedtex-etc2]]
-== ETC Compressed Image Formats
-
-The following formats are described in the "`ETC2 Compressed Texture Image
-Formats`" chapter of the <<data-format,Khronos Data Format Specification>>.
-
-.Mapping of Vulkan ETC formats to descriptions
-[options="header",cols="1,1"]
-|====
-| elink:VkFormat | <<data-format,Khronos Data Format Specification>> description
-| ename:VK_FORMAT_ETC2_R8G8B8_UNORM_BLOCK     |RGB ETC2
-| ename:VK_FORMAT_ETC2_R8G8B8_SRGB_BLOCK      |RGB ETC2 with sRGB encoding
-| ename:VK_FORMAT_ETC2_R8G8B8A1_UNORM_BLOCK   |RGB ETC2 with punch-through alpha
-| ename:VK_FORMAT_ETC2_R8G8B8A1_SRGB_BLOCK    |RGB ETC2 with punch-through alpha and sRGB
-| ename:VK_FORMAT_ETC2_R8G8B8A8_UNORM_BLOCK   |RGBA ETC2
-| ename:VK_FORMAT_ETC2_R8G8B8A8_SRGB_BLOCK    |RGBA ETC2 with sRGB encoding
-| ename:VK_FORMAT_EAC_R11_UNORM_BLOCK         |Unsigned R11 EAC
-| ename:VK_FORMAT_EAC_R11_SNORM_BLOCK         |Signed R11 EAC
-| ename:VK_FORMAT_EAC_R11G11_UNORM_BLOCK      |Unsigned RG11 EAC
-| ename:VK_FORMAT_EAC_R11G11_SNORM_BLOCK      |Signed RG11 EAC
-|====
-
-<<<
-
-[[appendix-compressedtex-astc]]
-== ASTC Compressed Image Formats
-
-ASTC formats are described in the "`ASTC Compressed Texture Image Formats`"
-chapter of the <<data-format,Khronos Data Format Specification>>.
-
-.Mapping of Vulkan ASTC formats to descriptions
-[width="90%",options="header",cols="55%,20%,25%"]
-|====
-| elink:VkFormat ^| Compressed texel block dimensions ^| Requested mode
-| ename:VK_FORMAT_ASTC_4x4_UNORM_BLOCK        ^|[eq]#4 {times} 4#   ^|Linear LDR
-| ename:VK_FORMAT_ASTC_4x4_SRGB_BLOCK         ^|[eq]#4 {times} 4#   ^|sRGB
-| ename:VK_FORMAT_ASTC_5x4_UNORM_BLOCK        ^|[eq]#5 {times} 4#   ^|Linear LDR
-| ename:VK_FORMAT_ASTC_5x4_SRGB_BLOCK         ^|[eq]#5 {times} 4#   ^|sRGB
-| ename:VK_FORMAT_ASTC_5x5_UNORM_BLOCK        ^|[eq]#5 {times} 5#   ^|Linear LDR
-| ename:VK_FORMAT_ASTC_5x5_SRGB_BLOCK         ^|[eq]#5 {times} 5#   ^|sRGB
-| ename:VK_FORMAT_ASTC_6x5_UNORM_BLOCK        ^|[eq]#6 {times} 5#   ^|Linear LDR
-| ename:VK_FORMAT_ASTC_6x5_SRGB_BLOCK         ^|[eq]#6 {times} 5#   ^|sRGB
-| ename:VK_FORMAT_ASTC_6x6_UNORM_BLOCK        ^|[eq]#6 {times} 6#   ^|Linear LDR
-| ename:VK_FORMAT_ASTC_6x6_SRGB_BLOCK         ^|[eq]#6 {times} 6#   ^|sRGB
-| ename:VK_FORMAT_ASTC_8x5_UNORM_BLOCK        ^|[eq]#8 {times} 5#   ^|Linear LDR
-| ename:VK_FORMAT_ASTC_8x5_SRGB_BLOCK         ^|[eq]#8 {times} 5#   ^|sRGB
-| ename:VK_FORMAT_ASTC_8x6_UNORM_BLOCK        ^|[eq]#8 {times} 6#   ^|Linear LDR
-| ename:VK_FORMAT_ASTC_8x6_SRGB_BLOCK         ^|[eq]#8 {times} 6#   ^|sRGB
-| ename:VK_FORMAT_ASTC_8x8_UNORM_BLOCK        ^|[eq]#8 {times} 8#   ^|Linear LDR
-| ename:VK_FORMAT_ASTC_8x8_SRGB_BLOCK         ^|[eq]#8 {times} 8#   ^|sRGB
-| ename:VK_FORMAT_ASTC_10x5_UNORM_BLOCK       ^|[eq]#10 {times} 5#  ^|Linear LDR
-| ename:VK_FORMAT_ASTC_10x5_SRGB_BLOCK        ^|[eq]#10 {times} 5#  ^|sRGB
-| ename:VK_FORMAT_ASTC_10x6_UNORM_BLOCK       ^|[eq]#10 {times} 6#  ^|Linear LDR
-| ename:VK_FORMAT_ASTC_10x6_SRGB_BLOCK        ^|[eq]#10 {times} 6#  ^|sRGB
-| ename:VK_FORMAT_ASTC_10x8_UNORM_BLOCK       ^|[eq]#10 {times} 8#  ^|Linear LDR
-| ename:VK_FORMAT_ASTC_10x8_SRGB_BLOCK        ^|[eq]#10 {times} 8#  ^|sRGB
-| ename:VK_FORMAT_ASTC_10x10_UNORM_BLOCK      ^|[eq]#10 {times} 10# ^|Linear LDR
-| ename:VK_FORMAT_ASTC_10x10_SRGB_BLOCK       ^|[eq]#10 {times} 10# ^|sRGB
-| ename:VK_FORMAT_ASTC_12x10_UNORM_BLOCK      ^|[eq]#12 {times} 10# ^|Linear LDR
-| ename:VK_FORMAT_ASTC_12x10_SRGB_BLOCK       ^|[eq]#12 {times} 10# ^|sRGB
-| ename:VK_FORMAT_ASTC_12x12_UNORM_BLOCK      ^|[eq]#12 {times} 12# ^|Linear LDR
-| ename:VK_FORMAT_ASTC_12x12_SRGB_BLOCK       ^|[eq]#12 {times} 12# ^|sRGB
-ifdef::VK_EXT_texture_compression_astc_hdr[]
-| ename:VK_FORMAT_ASTC_4x4_SFLOAT_BLOCK_EXT   ^|[eq]#4 {times} 4#   ^|HDR
-| ename:VK_FORMAT_ASTC_5x4_SFLOAT_BLOCK_EXT   ^|[eq]#5 {times} 4#   ^|HDR
-| ename:VK_FORMAT_ASTC_5x5_SFLOAT_BLOCK_EXT   ^|[eq]#5 {times} 5#   ^|HDR
-| ename:VK_FORMAT_ASTC_6x5_SFLOAT_BLOCK_EXT   ^|[eq]#6 {times} 5#   ^|HDR
-| ename:VK_FORMAT_ASTC_6x6_SFLOAT_BLOCK_EXT   ^|[eq]#6 {times} 6#   ^|HDR
-| ename:VK_FORMAT_ASTC_8x5_SFLOAT_BLOCK_EXT   ^|[eq]#8 {times} 5#   ^|HDR
-| ename:VK_FORMAT_ASTC_8x6_SFLOAT_BLOCK_EXT   ^|[eq]#8 {times} 6#   ^|HDR
-| ename:VK_FORMAT_ASTC_8x8_SFLOAT_BLOCK_EXT   ^|[eq]#8 {times} 8#   ^|HDR
-| ename:VK_FORMAT_ASTC_10x5_SFLOAT_BLOCK_EXT  ^|[eq]#10 {times} 5#  ^|HDR
-| ename:VK_FORMAT_ASTC_10x6_SFLOAT_BLOCK_EXT  ^|[eq]#10 {times} 6#  ^|HDR
-| ename:VK_FORMAT_ASTC_10x8_SFLOAT_BLOCK_EXT  ^|[eq]#10 {times} 8#  ^|HDR
-| ename:VK_FORMAT_ASTC_10x10_SFLOAT_BLOCK_EXT ^|[eq]#10 {times} 10# ^|HDR
-| ename:VK_FORMAT_ASTC_12x10_SFLOAT_BLOCK_EXT ^|[eq]#12 {times} 10# ^|HDR
-| ename:VK_FORMAT_ASTC_12x12_SFLOAT_BLOCK_EXT ^|[eq]#12 {times} 12# ^|HDR
-endif::VK_EXT_texture_compression_astc_hdr[]
-|====
-
-ifndef::VK_EXT_texture_compression_astc_hdr[]
-ASTC textures containing any HDR blocks should: not be passed into the API
-using an sRGB or UNORM texture format.
-endif::VK_EXT_texture_compression_astc_hdr[]
-ifdef::VK_EXT_texture_compression_astc_hdr[]
-ASTC textures containing HDR block encodings should: be passed to the API
-using an ASTC SFLOAT texture format.
-endif::VK_EXT_texture_compression_astc_hdr[]
-
-[NOTE]
-.Note
-====
-An HDR block in a texture passed using a LDR UNORM format will return the
-appropriate ASTC error color if the implementation supports only the ASTC
-LDR profile, but may result in either the error color or a decompressed HDR
-color if the implementation supports HDR decoding.
-====
-
-ifdef::VK_EXT_astc_decode_mode[]
-
-=== ASTC decode mode
-
-If the `VK_EXT_astc_decode_mode` extension is enabled, the decode mode is
-determined as follows:
-
-.Mapping of Vulkan ASTC decoding format to ASTC decoding modes
-[width="75%",options="header",cols="75%,25%"]
-|====
-| elink:VkFormat ^| Decoding mode
-| ename:VK_FORMAT_R16G16B16A16_SFLOAT    ^| decode_float16
-| ename:VK_FORMAT_R8G8B8A8_UNORM         ^| decode_unorm8
-| ename:VK_FORMAT_E5B9G9R9_UFLOAT_PACK32 ^| decode_rgb9e5
-|====
-
-Otherwise, the ASTC decode mode is decode_float16.
-
-Note that an implementation may: use HDR mode when linear LDR mode is
-requested unless the decode mode is decode_unorm8.
-endif::VK_EXT_astc_decode_mode[]
-ifndef::VK_EXT_astc_decode_mode[]
-The ASTC decode mode is decode_float16.
-
-Note that an implementation may: use HDR mode when linear LDR mode is
-requested.
-endif::VK_EXT_astc_decode_mode[]
-
-ifdef::VK_IMG_format_pvrtc[]
-<<<
-
-[[appendix-compressedtex-pvrtc]]
-== PVRTC Compressed Image Formats
-
-PVRTC formats are described in the "`PVRTC Compressed Texture Image
-Formats`" chapter of the <<data-format,Khronos Data Format Specification>>.
-
-.Mapping of Vulkan PVRTC formats to descriptions
-[width="75%",options="header",cols="63%,15%,22%"]
-|====
-| elink:VkFormat ^| Compressed texel block dimensions ^| sRGB-encoded
-| ename:VK_FORMAT_PVRTC1_2BPP_UNORM_BLOCK_IMG  ^|[eq]#8 {times} 4# ^|No
-| ename:VK_FORMAT_PVRTC1_4BPP_UNORM_BLOCK_IMG  ^|[eq]#4 {times} 4# ^|No
-| ename:VK_FORMAT_PVRTC2_2BPP_UNORM_BLOCK_IMG  ^|[eq]#8 {times} 4# ^|No
-| ename:VK_FORMAT_PVRTC2_4BPP_UNORM_BLOCK_IMG  ^|[eq]#4 {times} 4# ^|No
-| ename:VK_FORMAT_PVRTC1_2BPP_SRGB_BLOCK_IMG   ^|[eq]#8 {times} 4# ^|Yes
-| ename:VK_FORMAT_PVRTC1_4BPP_SRGB_BLOCK_IMG   ^|[eq]#4 {times} 4# ^|Yes
-| ename:VK_FORMAT_PVRTC2_2BPP_SRGB_BLOCK_IMG   ^|[eq]#8 {times} 4# ^|Yes
-| ename:VK_FORMAT_PVRTC2_4BPP_SRGB_BLOCK_IMG   ^|[eq]#4 {times} 4# ^|Yes
-|====
-endif::VK_IMG_format_pvrtc[]
diff --git a/registry/vulkan/appendices/credits.txt b/registry/vulkan/appendices/credits.txt
deleted file mode 100644
index 17d41bb..0000000
--- a/registry/vulkan/appendices/credits.txt
+++ /dev/null
@@ -1,293 +0,0 @@
-// Copyright 2015-2021 The Khronos Group, Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-[appendix]
-[[credits]]
-= Credits (Informative)
-
-Vulkan 1.2 is the result of contributions from many people and companies
-participating in the Khronos Vulkan Working Group, as well as input from the
-Vulkan Advisory Panel.
-
-Members of the Working Group, including the company that they represented at
-the time of their most recent contribution, are listed in the following
-section.
-Some specific contributions made by individuals are listed together with
-their name.
-
-
-== Working Group Contributors to Vulkan
-
-  * Aaron Greig, Codeplay Software Ltd.
-    (version 1.1)
-  * Aaron Hagan, AMD (version 1.1)
-  * Adam Jackson, Red Hat (versions 1.0, 1.1)
-  * Adam Śmigielski, Mobica (version 1.0)
-  * Aidan Fabius, Core Avionics & Industrial Inc.
-    (version 1.2)
-  * Alan Baker, Google (versions 1.1, 1.2)
-  * Alan Ward, Google (versions 1.1, 1.2)
-  * Alejandro Piñeiro, Igalia (version 1.1)
-  * Alex Bourd, Qualcomm Technologies, Inc.
-    (versions 1.0, 1.1)
-  * Alex Crabb, Caster Communications (version 1.2)
-  * Alex Walters, Imagination Technologies (version 1.2)
-  * Alexander Galazin, Arm (versions 1.0, 1.1, 1.2)
-  * Allen Hux, Intel (version 1.0)
-  * Alon Or-bach, Samsung Electronics (versions 1.0, 1.1, 1.2) (WSI
-    technical sub-group chair)
-  * Anastasia Stulova, Arm (version 1.2)
-  * Andreas Vasilakis, Think Silicon (version 1.2)
-  * Andres Gomez, Igalia (version 1.1)
-  * Andrew Cox, Samsung Electronics (version 1.0)
-  * Andrew Garrard, Samsung Electronics (versions 1.0, 1.1, 1.2) (format
-    wrangler)
-  * Andrew Poole, Samsung Electronics (version 1.0)
-  * Andrew Rafter, Samsung Electronics (version 1.0)
-  * Andrew Richards, Codeplay Software Ltd.
-    (version 1.0)
-  * Andrew Woloszyn, Google (versions 1.0, 1.1)
-  * Ann Thorsnes, Khronos (version 1.2)
-  * Antoine Labour, Google (versions 1.0, 1.1)
-  * Aras Pranckevičius, Unity Technologies (version 1.0)
-  * Ashwin Kolhe, NVIDIA (version 1.0)
-  * Baldur Karlsson, Independent (versions 1.1, 1.2)
-  * Barthold Lichtenbelt, NVIDIA (version 1.1)
-  * Bas Nieuwenhuizen, Google (versions 1.1, 1.2)
-  * Ben Bowman, Imagination Technologies (version 1.0)
-  * Benj Lipchak, Unknown (version 1.0)
-  * Bill Hollings, Brenwill (versions 1.0, 1.1, 1.2)
-  * Bill Licea-Kane, Qualcomm Technologies, Inc.
-    (versions 1.0, 1.1)
-  * Blaine Kohl, Khronos (version 1.2)
-  * Boris Zanin, Mobica (version 1.2)
-  * Brent E. Insko, Intel (version 1.0)
-  * Brian Ellis, Qualcomm Technologies, Inc.
-    (version 1.0)
-  * Brian Paul, VMware (version 1.2)
-  * Caio Marcelo de Oliveira Filho, Intel (version 1.2)
-  * Cass Everitt, Oculus VR (versions 1.0, 1.1)
-  * Cemil Azizoglu, Canonical (version 1.0)
-  * Chad Versace, Google (versions 1.0, 1.1, 1.2)
-  * Chang-Hyo Yu, Samsung Electronics (version 1.0)
-  * Chia-I Wu, LunarG (version 1.0)
-  * Chris Frascati, Qualcomm Technologies, Inc.
-    (version 1.0)
-  * Christophe Riccio, Unity Technologies (versions 1.0, 1.1)
-  * Cody Northrop, LunarG (version 1.0)
-  * Colin Riley, AMD (version 1.1)
-  * Cort Stratton, Google (versions 1.1, 1.2)
-  * Courtney Goeltzenleuchter, Google (versions 1.0, 1.1)
-  * Craig Davies, Huawei (version 1.2)
-  * Dae Kim, Imagination Technologies (version 1.1)
-  * Damien Leone, NVIDIA (version 1.0)
-  * Dan Baker, Oxide Games (versions 1.0, 1.1)
-  * Dan Ginsburg, Valve Software (versions 1.0, 1.1, 1.2)
-  * Daniel Johnston, Intel (versions 1.0, 1.1)
-  * Daniel Koch, NVIDIA (versions 1.0, 1.1, 1.2)
-  * Daniel Rakos, AMD (versions 1.0, 1.1, 1.2)
-  * Daniel Stone, Collabora (versions 1.1, 1.2)
-  * Daniel Vetter, Intel (version 1.2)
-  * David Airlie, Red Hat (versions 1.0, 1.1, 1.2)
-  * David Mao, AMD (versions 1.0, 1.2)
-  * David Miller, Miller & Mattson (versions 1.0, 1.1) (Vulkan reference
-    card)
-  * David Neto, Google (versions 1.0, 1.1, 1.2)
-  * David Wilkinson, AMD (version 1.2)
-  * David Yu, Pixar (version 1.0)
-  * Dejan Mircevski, Google (version 1.1)
-  * Dominik Witczak, AMD (versions 1.0, 1.1)
-  * Donald Scorgie, Imagination Technologies (version 1.2)
-  * Dzmitry Malyshau, Mozilla (versions 1.1, 1.2)
-  * Ed Hutchins, Oculus (version 1.2)
-  * Emily Stearns, Khronos (version 1.2)
-  * Frank (LingJun) Chen, Qualcomm Technologies, Inc.
-    (version 1.0)
-  * Fred Liao, Mediatek (version 1.0)
-  * Gabe Dagani, Freescale (version 1.0)
-  * Gabor Sines, AMD (version 1.2)
-  * Graeme Leese, Broadcom (versions 1.0, 1.1, 1.2)
-  * Graham Connor, Imagination Technologies (version 1.0)
-  * Graham Sellers, AMD (versions 1.0, 1.1)
-  * Greg Fischer, LunarG (version 1.1)
-  * Hai Nguyen, Google (version 1.2)
-  * Hans-Kristian Arntzen, Arm (versions 1.1, 1.2)
-  * Henri Verbeet, Codeweavers (version 1.2)
-  * Hwanyong Lee, Kyungpook National University (version 1.0)
-  * Iago Toral, Igalia (versions 1.1, 1.2)
-  * Ian Elliott, Google (versions 1.0, 1.1, 1.2)
-  * Ian Romanick, Intel (versions 1.0, 1.1)
-  * James Hughes, Oculus VR (version 1.0)
-  * James Jones, NVIDIA (versions 1.0, 1.1, 1.2)
-  * James Riordon, Khronos (version 1.2)
-  * Jan Hermes, Continental Corporation (versions 1.0, 1.1)
-  * Jan-Harald Fredriksen, Arm (versions 1.0, 1.1, 1.2)
-  * Jason Ekstrand, Intel (versions 1.0, 1.1, 1.2)
-  * Jean-François Roy, Google (versions 1.1, 1.2)
-  * Jeff Bolz, NVIDIA (versions 1.0, 1.1, 1.2)
-  * Jeff Juliano, NVIDIA (versions 1.0, 1.1, 1.2)
-  * Jeff Leger, Qualcomm Technologies, Inc.
-    (version 1.1)
-  * Jeff Vigil, Samsung Electronics (versions 1.0, 1.1, 1.2)
-  * Jens Owen, Google (versions 1.0, 1.1)
-  * Jeremy Hayes, LunarG (version 1.0)
-  * Jesse Barker, Unity Technologies (versions 1.0, 1.1, 1.2)
-  * Jesse Hall, Google (versions 1.0, 1.1, 1.2)
-  * Joe Davis, Samsung Electronics (version 1.1)
-  * Johannes van Waveren, Oculus VR (versions 1.0, 1.1)
-  * John Kessenich, Google (versions 1.0, 1.1, 1.2) (SPIR-V and GLSL for
-    Vulkan specification author)
-  * John McDonald, Valve Software (versions 1.0, 1.1, 1.2)
-  * John Zulauf, LunarG (versions 1.1, 1.2)
-  * Jon Ashburn, LunarG (version 1.0)
-  * Jon Leech, Independent (versions 1.0, 1.1, 1.2) (XML toolchain,
-    normative language, release wrangler)
-  * Jonas Gustavsson, Samsung Electronics (versions 1.0, 1.1)
-  * Jonas Meyer, Epic Games (version 1.2)
-  * Jonathan Hamilton, Imagination Technologies (version 1.0)
-  * Jordan Justen, Intel (version 1.1)
-  * Jungwoo Kim, Samsung Electronics (versions 1.0, 1.1)
-  * Jörg Wagner, Arm (version 1.1)
-  * Kalle Raita, Google (version 1.1)
-  * Karen Ghavam, LunarG (versions 1.1, 1.2)
-  * Karl Schultz, LunarG (versions 1.1, 1.2)
-  * Kathleen Mattson, Khronos (versions 1.0, 1.1, 1.2)
-  * Kaye Mason, Google (version 1.2)
-  * Keith Packard, Valve (version 1.2)
-  * Kenneth Benzie, Codeplay Software Ltd.
-    (versions 1.0, 1.1)
-  * Kenneth Russell, Google (version 1.1)
-  * Kerch Holt, NVIDIA (versions 1.0, 1.1)
-  * Kevin O'Neil, AMD (version 1.1)
-  * Kris Rose, Khronos (version 1.2)
-  * Kristian Kristensen, Intel (versions 1.0, 1.1)
-  * Krzysztof Iwanicki, Samsung Electronics (version 1.0)
-  * Larry Seiler, Intel (version 1.0)
-  * Lauri Ilola, Nokia (version 1.1)
-  * Lei Zhang, Google (version 1.2)
-  * Lenny Komow, LunarG (versions 1.1, 1.2)
-  * Lionel Landwerlin, Intel (versions 1.1, 1.2)
-  * Liz Maitral, Khronos (version 1.2)
-  * Lutz Latta, Lucasfilm (version 1.0)
-  * Maciej Jesionowski, AMD (version 1.1)
-  * Mais Alnasser, AMD (version 1.1)
-  * Marcin Rogucki, Mobica (version 1.1)
-  * Maria Rovatsou, Codeplay Software Ltd.
-    (version 1.0)
-  * Mark Callow, Independent (versions 1.0, 1.1, 1.2)
-  * Mark Kilgard, NVIDIA (versions 1.1, 1.2)
-  * Mark Lobodzinski, LunarG (versions 1.0, 1.1, 1.2)
-  * Mark Young, LunarG (version 1.1)
-  * Markus Tavenrath, NVIDIA (version 1.1)
-  * Mateusz Przybylski, Intel (version 1.0)
-  * Mathias Heyer, NVIDIA (versions 1.0, 1.1)
-  * Mathias Schott, NVIDIA (versions 1.0, 1.1)
-  * Matt Netsch, Qualcomm Technologies, Inc.
-    (version 1.1)
-  * Matthäus Chajdas, AMD (versions 1.1, 1.2)
-  * Maurice Ribble, Qualcomm Technologies, Inc.
-    (versions 1.0, 1.1)
-  * Maxim Lukyanov, Samsung Electronics (version 1.0)
-  * Michael Lentine, Google (version 1.0)
-  * Michael O'Hara, AMD (version 1.1)
-  * Michael Phillip, Samsung Electronics (version 1.2)
-  * Michael Wong, Codeplay Software Ltd.
-    (version 1.1)
-  * Michael Worcester, Imagination Technologies (versions 1.0, 1.1)
-  * Michal Pietrasiuk, Intel (version 1.0)
-  * Mika Isojarvi, Google (versions 1.0, 1.1)
-  * Mike Schuchardt, LunarG (versions 1.1, 1.2)
-  * Mike Stroyan, LunarG (version 1.0)
-  * Mike Weiblen, LunarG (versions 1.1, 1.2)
-  * Minyoung Son, Samsung Electronics (version 1.0)
-  * Mitch Singer, AMD (versions 1.0, 1.1, 1.2)
-  * Mythri Venugopal, Samsung Electronics (version 1.0)
-  * Naveen Leekha, Google (version 1.0)
-  * Neil Henning, AMD (versions 1.0, 1.1, 1.2)
-  * Neil Hickey, Arm (version 1.2)
-  * Neil Trevett, NVIDIA (versions 1.0, 1.1, 1.2)
-  * Nick Penwarden, Epic Games (version 1.0)
-  * Nicolai Hähnle, AMD (version 1.1)
-  * Niklas Smedberg, Unity Technologies (version 1.0)
-  * Norbert Nopper, Independent (versions 1.0, 1.1)
-  * Nuno Subtil, NVIDIA (versions 1.1, 1.2)
-  * Pat Brown, NVIDIA (version 1.0)
-  * Patrick Cozzi, Independent (version 1.1)
-  * Patrick Doane, Blizzard Entertainment (version 1.0)
-  * Peter Lohrmann, AMD (versions 1.0, 1.2)
-  * Petros Bantolas, Imagination Technologies (version 1.1)
-  * Pierre Boudier, NVIDIA (versions 1.0, 1.1, 1.2)
-  * Pierre-Loup Griffais, Valve Software (versions 1.0, 1.1, 1.2)
-  * Piers Daniell, NVIDIA (versions 1.0, 1.1, 1.2)
-  * Piotr Bialecki, Intel (version 1.0)
-  * Prabindh Sundareson, Samsung Electronics (version 1.0)
-  * Pyry Haulos, Google (versions 1.0, 1.1) (Vulkan conformance test
-    subcommittee chair)
-  * Rajeev Rao, Qualcomm (version 1.2)
-  * Ralph Potter, Codeplay Software Ltd.
-    (versions 1.1, 1.2)
-  * Ray Smith, Arm (versions 1.0, 1.1, 1.2)
-  * Richard Huddy, Samsung Electronics (version 1.2)
-  * Rob Barris, NVIDIA (version 1.1)
-  * Rob Stepinski, Transgaming (version 1.0)
-  * Robert Simpson, Qualcomm Technologies, Inc.
-    (versions 1.0, 1.1)
-  * Rolando Caloca Olivares, Epic Games (versions 1.0, 1.1, 1.2)
-  * Roy Ju, Mediatek (version 1.0)
-  * Rufus Hamade, Imagination Technologies (version 1.0)
-  * Ruihao Zhang, Qualcomm Technologies, Inc.
-    (versions 1.1, 1.2)
-  * Sean Ellis, Arm (version 1.0)
-  * Sean Harmer, KDAB Group (versions 1.0, 1.1)
-  * Shannon Woods, Google (versions 1.0, 1.1, 1.2)
-  * Slawomir Cygan, Intel (versions 1.0, 1.1)
-  * Slawomir Grajewski, Intel (versions 1.0, 1.1)
-  * Sorel Bosan, AMD (version 1.1)
-  * Spencer Fricke, Samsung Electronics (version 1.2)
-  * Stefanus Du Toit, Google (version 1.0)
-  * Stephen Huang, Mediatek (version 1.1)
-  * Steve Hill, Broadcom (versions 1.0, 1.2)
-  * Steve Viggers, Core Avionics & Industrial Inc.
-    (versions 1.0, 1.2)
-  * Stuart Smith, Imagination Technologies (versions 1.0, 1.1, 1.2)
-  * Tilmann Scheller, Samsung Electronics (version 1.1)
-  * Tim Foley, Intel (version 1.0)
-  * Timo Suoranta, AMD (version 1.0)
-  * Timothy Lottes, AMD (versions 1.0, 1.1)
-  * Tobias Hector, AMD (versions 1.0, 1.1, 1.2) (validity language and
-    toolchain)
-  * Tobin Ehlis, LunarG (version 1.0)
-  * Tom Olson, Arm (versions 1.0, 1.1, 1.2) (Working Group chair)
-  * Tomasz Bednarz, Independent (version 1.1)
-  * Tomasz Kubale, Intel (version 1.0)
-  * Tony Barbour, LunarG (versions 1.0, 1.1, 1.2)
-  * Victor Eruhimov, Unknown (version 1.1)
-  * Vincent Hindriksen, StreamHPC (version 1.2)
-  * Wayne Lister, Imagination Technologies (version 1.0)
-  * Wolfgang Engel, Unknown (version 1.1)
-  * Yanjun Zhang, VeriSilicon (versions 1.0, 1.1, 1.2)
-
-
-== Other Credits
-
-The Vulkan Advisory Panel members provided important real-world usage
-information and advice that helped guide design decisions.
-
-The wider Vulkan community have provided useful feedback, questions and
-specification changes that have helped improve the quality of the
-Specification via
-link:https://github.com/KhronosGroup/Vulkan-Docs/graphs/contributors[GitHub].
-
-Administrative support to the Working Group for Vulkan 1.1 and 1.2 was
-provided by Khronos staff including Angela Cheng, Ann Thorsnes, Blaine Kohl,
-Dominic Agoro-Ombaka, Emily Stearns, Jeff Phillips, Lisie Aartsen, and Liz
-Maitral; and by Alex Crabb of Caster Communications.
-
-Administrative support for Vulkan 1.0 was provided by Andrew Riegel,
-Elizabeth Riegel, Glenn Fredericks, Kathleen Mattson and Michelle Clark of
-Gold Standard Group.
-
-Technical support was provided by James Riordon, webmaster of Khronos.org
-and OpenGL.org.
-
diff --git a/registry/vulkan/appendices/extensions.txt b/registry/vulkan/appendices/extensions.txt
deleted file mode 100644
index 449b054..0000000
--- a/registry/vulkan/appendices/extensions.txt
+++ /dev/null
@@ -1,63 +0,0 @@
-// Copyright 2015-2021 The Khronos Group, Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-[appendix]
-
-[[extensions]]
-= Layers & Extensions (Informative)
-
-Extensions to the Vulkan API can: be defined by authors, groups of authors,
-and the Khronos Vulkan Working Group.
-In order not to compromise the readability of the Vulkan Specification, the
-core Specification does not incorporate most extensions.
-The online Registry of extensions is available at URL
-
-https://www.khronos.org/registry/vulkan/
-
-and allows generating versions of the Specification incorporating different
-extensions.
-
-Most of the content previously in this appendix does not specify *use* of
-specific Vulkan extensions and layers, but rather specifies the processes by
-which extensions and layers are created.
-As of version 1.0.21 of the Vulkan Specification, this content has been
-migrated to the <<vulkan-styleguide, Vulkan Documentation and Extensions>>
-document.
-Authors creating extensions and layers must: follow the mandatory procedures
-in that document.
-
-The remainder of this appendix documents a set of extensions chosen when
-this document was built.
-Versions of the Specification published in the Registry include:
-
-  * Core API + mandatory extensions required of all Vulkan implementations.
-  * Core API + all registered and published Khronos (`KHR`) extensions.
-  * Core API + all registered and published extensions.
-
-Extensions are grouped as Khronos `KHR`, multivendor `EXT`, and then
-alphabetically by author ID.
-Within each group, extensions are listed in alphabetical order by their
-name.
-
-[NOTE]
-.Note
-====
-As of the initial Vulkan 1.1 public release, the `KHX` author ID is no
-longer used.
-All `KHX` extensions have been promoted to `KHR` status.
-Previously, this author ID was used to indicate that an extension was
-experimental, and is being considered for standardization in future `KHR` or
-core Vulkan API versions.
-We no longer use this mechanism for exposing experimental functionality.
-
-Some vendors may use an alternate author ID ending in `X` for some of their
-extensions.
-The exact meaning of such an author ID is defined by each vendor, and may
-not be equivalent to `KHX`, but it is likely to indicate a lesser degree of
-interface stability than a non-`X` extension from the same vendor.
-====
-
-include::{generated}/meta/current_extensions_appendix.txt[]
-include::{generated}/meta/provisional_extensions_appendix.txt[]
-include::{generated}/meta/deprecated_extensions_appendix.txt[]
diff --git a/registry/vulkan/appendices/glossary.txt b/registry/vulkan/appendices/glossary.txt
deleted file mode 100644
index 9a5d1b6..0000000
--- a/registry/vulkan/appendices/glossary.txt
+++ /dev/null
@@ -1,1838 +0,0 @@
-// Copyright 2015-2021 The Khronos Group, Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-// The asciidoc [glossary] template cannot contain subsections.
-// The abbreviations and prefixes probably belong in the upcoming
-// API/extension-writing-guidelines appendix, anyway.
-
-[appendix]
-[[lexicon]]
-= Lexicon
-
-This appendix defines terms, abbreviations, and API prefixes used in the
-Specification.
-
-
-[[glossary]]
-== Glossary
-
-The terms defined in this section are used consistently throughout the
-Specification and may be used with or without capitalization.
-
-Accessible (Descriptor Binding)::
-    A descriptor binding is accessible to a shader stage if that stage is
-    included in the pname:stageFlags of the descriptor binding.
-    Descriptors using that binding can: only be used by stages in which they
-    are accessible.
-
-Acquire Operation (Resource)::
-    An operation that acquires ownership of an image subresource or buffer
-    range.
-
-ifdef::VK_VALVE_mutable_descriptor_type[]
-Active (Descriptor Type)::
-    When a descriptor with _mutable_ type is updated with
-    flink:vkUpdateDescriptorSets, the active descriptor type changes.
-    When the descriptor is consumed by shaders, it is the active descriptor
-    type which determines validity, i.e.
-    sname:VkDescriptorSetLayoutBinding::pname:descriptorType is replaced
-    with the active descriptor type.
-    A mismatch in active descriptor type and consumption by shader is
-    considered an undefined: descriptor.
-endif::VK_VALVE_mutable_descriptor_type[]
-
-ifdef::VK_EXT_transform_feedback[]
-Active (Transform Feedback)::
-    Transform feedback is made active after
-    flink:vkCmdBeginTransformFeedbackEXT executes and remains active until
-    flink:vkCmdEndTransformFeedbackEXT executes.
-    While transform feedback is active, data written to variables in the
-    output interface of the last
-    <<pipeline-graphics-subsets-pre-rasterization,pre-rasterization shader
-    stage>> of the graphics pipeline are captured to the bound transform
-    feedback buffers if those variables are decorated for transform
-    feedback.
-endif::VK_EXT_transform_feedback[]
-
-Adjacent Vertex::
-    A vertex in an adjacency primitive topology that is not part of a given
-    primitive, but is accessible in geometry shaders.
-
-ifdef::VK_NV_ray_tracing,VK_KHR_acceleration_structure[]
-Active Object (Ray Tracing)::
-    A primitive or instance in a ray tracing acceleration structure which
-    has a corresponding ID, and is not _inactive_ (meaning that it is
-    visible to rays).
-endif::VK_NV_ray_tracing,VK_KHR_acceleration_structure[]
-
-ifdef::VK_EXT_blend_operation_advanced[]
-Advanced Blend Operation::
-    Blending performed using one of the blend operation enums introduced by
-    the `apiext:VK_EXT_blend_operation_advanced` extension.
-    See <<framebuffer-blend-advanced, Advanced Blending Operations>>.
-endif::VK_EXT_blend_operation_advanced[]
-
-Alias (API type/command)::
-    An identical definition of another API type/command with the same
-    behavior but a different name.
-
-Aliased Range (Memory)::
-    A range of a device memory allocation that is bound to multiple
-    resources simultaneously.
-
-Allocation Scope::
-    An association of a host memory allocation to a parent object or
-    command, where the allocation's lifetime ends before or at the same time
-    as the parent object is freed or destroyed, or during the parent
-    command.
-
-Aspect (Image)::
-    An image may: contain multiple kinds, or aspects, of data for each
-    pixel, where each aspect is used in a particular way by the pipeline and
-    may: be stored differently or separately from other aspects.
-    For example, the color components of an image format make up the color
-    aspect of the image, and may: be used as a framebuffer color attachment.
-    Some operations, like depth testing, operate only on specific aspects of
-    an image.
-
-Attachment (Render Pass)::
-    A zero-based integer index name used in render pass creation to refer to
-    a framebuffer attachment that is accessed by one or more subpasses.
-    The index also refers to an attachment description which includes
-    information about the properties of the image view that will later be
-    attached.
-
-Availability Operation::
-    An operation that causes the values generated by specified memory write
-    accesses to become available for future access.
-
-Available::
-    A state of values written to memory that allows them to be made visible.
-
-ifdef::VK_NV_ray_tracing,VK_KHR_acceleration_structure[]
-Axis-aligned Bounding Box::
-    A box bounding a region in space defined by extents along each axis and
-    thus representing a box where each edge is aligned to one of the major
-    axes.
-endif::VK_NV_ray_tracing,VK_KHR_acceleration_structure[]
-
-Back-Facing::
-    See Facingness.
-
-Batch::
-    A single structure submitted to a queue as part of a
-    <<devsandqueues-submission, queue submission command>>, describing a set
-    of queue operations to execute.
-
-Backwards Compatibility::
-    A given version of the API is backwards compatible with an earlier
-    version if an application, relying only on valid behavior and
-    functionality defined by the earlier specification, is able to correctly
-    run against each version without any modification.
-    This assumes no active attempt by that application to not run when it
-    detects a different version.
-
-Binary Semaphore::
-    A semaphore with a boolean payload indicating whether the semaphore is
-    signaled or unsignaled.
-    Represented by a slink:VkSemaphore object
-ifdef::VK_VERSION_1_2,VK_KHR_timeline_semaphore[]
-    created with a semaphore type of ename:VK_SEMAPHORE_TYPE_BINARY
-endif::VK_VERSION_1_2,VK_KHR_timeline_semaphore[]
-    .
-
-Binding (Memory)::
-    An association established between a range of a resource object and a
-    range of a memory object.
-    These associations determine the memory locations affected by operations
-    performed on elements of a resource object.
-    Memory bindings are established using the flink:vkBindBufferMemory
-    command for non-sparse buffer objects, using the flink:vkBindImageMemory
-    command for non-sparse image objects, and using the
-    flink:vkQueueBindSparse command for sparse resources.
-
-Blend Constant::
-    Four floating point (RGBA) values used as an input to blending.
-
-Blending::
-    Arithmetic operations between a fragment color value and a value in a
-    color attachment that produce a final color value to be written to the
-    attachment.
-
-Buffer::
-    A resource that represents a linear array of data in device memory.
-    Represented by a slink:VkBuffer object.
-
-ifdef::VK_VERSION_1_2,VK_EXT_buffer_device_address,VK_KHR_buffer_device_address[]
-Buffer Device Address::
-    A 64-bit value used in a shader to access buffer memory through the
-    code:PhysicalStorageBuffer storage class.
-endif::VK_VERSION_1_2,VK_EXT_buffer_device_address,VK_KHR_buffer_device_address[]
-
-Buffer View::
-    An object that represents a range of a specific buffer, and state that
-    controls how the contents are interpreted.
-    Represented by a slink:VkBufferView object.
-
-Built-In Variable::
-    A variable decorated in a shader, where the decoration makes the
-    variable take values provided by the execution environment or values
-    that are generated by fixed-function pipeline stages.
-
-Built-In Interface Block::
-    A block defined in a shader that contains only variables decorated with
-    built-in decorations, and is used to match against other shader stages.
-
-Clip Coordinates::
-    The homogeneous coordinate space that vertex positions (code:Position
-    decoration) are written in by
-    <<pipeline-graphics-subsets-pre-rasterization,pre-rasterization shader
-    stages>>.
-
-Clip Distance::
-    A built-in output from
-    <<pipeline-graphics-subsets-pre-rasterization,pre-rasterization shader
-    stages>> that defines a clip half-space against which the primitive is
-    clipped.
-
-Clip Volume::
-    The intersection of the view volume with all clip half-spaces.
-
-Color Attachment::
-    A subpass attachment point, or image view, that is the target of
-    fragment color outputs and blending.
-
-ifdef::VK_AMD_shader_fragment_mask[]
-Color Fragment::
-    A unique color value within a pixel of a multisampled color image.
-    The _fragment mask_ will contain indices to the _color fragment_.
-endif::VK_AMD_shader_fragment_mask[]
-
-Color Renderable Format::
-    A elink:VkFormat where ename:VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT is
-    set in one of the following, depending on the image's tiling:
-    * slink:VkFormatProperties::pname:linearTilingFeatures
-    * slink:VkFormatProperties::pname:optimalTilingFeatures
-ifdef::VK_EXT_image_drm_format_modifier[]
-    * slink:VkDrmFormatModifierPropertiesEXT::pname:drmFormatModifierTilingFeatures
-endif::VK_EXT_image_drm_format_modifier[]
-
-Combined Image Sampler::
-    A descriptor type that includes both a sampled image and a sampler.
-
-Command Buffer::
-    An object that records commands to be submitted to a queue.
-    Represented by a slink:VkCommandBuffer object.
-
-Command Pool::
-    An object that command buffer memory is allocated from, and that owns
-    that memory.
-    Command pools aid multithreaded performance by enabling different
-    threads to use different allocators, without internal synchronization on
-    each use.
-    Represented by a slink:VkCommandPool object.
-
-Compatible Allocator::
-    When allocators are compatible, allocations from each allocator can: be
-    freed by the other allocator.
-
-Compatible Image Formats::
-    When formats are compatible, images created with one of the formats can:
-    have image views created from it using any of the compatible formats.
-    Also see _Size-Compatible Image Formats_.
-
-Compatible Queues::
-    Queues within a queue family.
-    Compatible queues have identical properties.
-
-Complete Mipmap Chain::
-    The entire set of miplevels that can be provided for an image, from the
-    largest application specified miplevel size down to the _minimum
-    miplevel size_.
-    See <<resources-image-miplevel-sizing, Image Miplevel Sizing>>.
-
-ifdef::VK_KHR_deferred_host_operations[]
-Completed Operation::
-    A deferred operation whose corresponding command has been executed to
-    completion.
-    See <<deferred-host-operations, Deferred Host Operations>>
-endif::VK_KHR_deferred_host_operations[]
-
-Component (Format)::
-    A distinct part of a format.
-    Color components are represented with `R`, `G`, `B`, and `A`.
-    Depth and stencil components are represented with `D` and `S`.
-    Formats can: have multiple instances of the same component.
-    Some formats have other notations such as `E` or `X` which are not
-    considered a component of the format.
-
-Compressed Texel Block::
-    An element of an image having a block-compressed format, comprising a
-    rectangular block of texel values that are encoded as a single value in
-    memory.
-    Compressed texel blocks of a particular block-compressed format have a
-    corresponding width, height, and depth that define the dimensions of
-    these elements in units of texels, and a size in bytes of the encoding
-    in memory.
-
-Constant Integral Expressions::
-    A SPIR-V constant instruction whose type is code:OpTypeInt.
-    See _Constant Instruction_ in section 2.2.1 "`Instructions`" of the
-    <<spirv-spec,Khronos SPIR-V Specification>>.
-
-ifdef::VK_NV_cooperative_matrix[]
-Cooperative Matrix::
-    A SPIR-V type where the storage for and computations performed on the
-    matrix are spread across a set of invocations such as a subgroup.
-endif::VK_NV_cooperative_matrix[]
-
-ifdef::VK_NV_corner_sampled_image[]
-Corner-Sampled Image::
-    A slink:VkImage where unnormalized texel coordinates are centered on
-    integer values instead of half-integer values.
-    Specified by setting the ename:VK_IMAGE_CREATE_CORNER_SAMPLED_BIT_NV bit
-    on slink:VkImageCreateInfo::pname:flags at image creation.
-endif::VK_NV_corner_sampled_image[]
-
-Coverage Index::
-    The index of a sample in the coverage mask.
-
-Coverage Mask::
-    A bitfield associated with a fragment representing the samples that were
-    determined to be covered based on the result of rasterization, and then
-    subsequently modified by fragment operations or the fragment shader.
-
-Cull Distance::
-    A built-in output from
-    <<pipeline-graphics-subsets-pre-rasterization,pre-rasterization shader
-    stages>> that defines a cull half-space where the primitive is rejected
-    if all vertices have a negative value for the same cull distance.
-
-Cull Volume::
-    The intersection of the view volume with all cull half-spaces.
-
-Decoration (SPIR-V)::
-    Auxiliary information such as built-in variables, stream numbers,
-    invariance, interpolation type, relaxed precision, etc., added to
-    variables or structure-type members through decorations.
-
-ifdef::VK_KHR_deferred_host_operations[]
-Deferrable Command::
-    A command which allows deferred execution of host-side work.
-    See <<deferred-host-operations,Deferred Host Operations>>.
-
-Deferrable Operation::
-    A single logical item of host-side work which can be deferred.
-    Represented by the slink:VkDeferredOperationKHR object.
-    See <<deferred-host-operations,Deferred Host Operations>>.
-endif::VK_KHR_deferred_host_operations[]
-
-Deprecated (feature)::
-    A feature is deprecated if it is no longer recommended as the correct or
-    best way to achieve its intended purpose.
-
-Depth/Stencil Attachment::
-    A subpass attachment point, or image view, that is the target of depth
-    and/or stencil test operations and writes.
-
-Depth/Stencil Format::
-    A elink:VkFormat that includes depth and/or stencil components.
-
-Depth/Stencil Image (or ImageView)::
-    A slink:VkImage (or slink:VkImageView) with a depth/stencil format.
-
-ifdef::VK_VERSION_1_2,VK_KHR_depth_stencil_resolve[]
-Depth/Stencil Resolve Attachment::
-    A subpass attachment point, or image view, that is the target of a
-    multisample resolve operation from the corresponding depth/stencil
-    attachment at the end of the subpass.
-endif::VK_VERSION_1_2,VK_KHR_depth_stencil_resolve[]
-
-Derivative Group::
-    A set of fragment
-ifdef::VK_NV_compute_shader_derivatives[]
-    or compute
-endif::VK_NV_compute_shader_derivatives[]
-    shader invocations that cooperate to compute derivatives, including
-    implicit derivatives for sampled image operations.
-
-Descriptor::
-    Information about a resource or resource view written into a descriptor
-    set that is used to access the resource or view from a shader.
-
-Descriptor Binding::
-    An entry in a descriptor set layout corresponding to zero or more
-    descriptors of a single descriptor type in a set.
-    Defined by a slink:VkDescriptorSetLayoutBinding structure.
-
-Descriptor Pool::
-    An object that descriptor sets are allocated from, and that owns the
-    storage of those descriptor sets.
-    Descriptor pools aid multithreaded performance by enabling different
-    threads to use different allocators, without internal synchronization on
-    each use.
-    Represented by a slink:VkDescriptorPool object.
-
-Descriptor Set::
-    An object that resource descriptors are written into via the API, and
-    that can: be bound to a command buffer such that the descriptors
-    contained within it can: be accessed from shaders.
-    Represented by a slink:VkDescriptorSet object.
-
-Descriptor Set Layout::
-    An object that defines the set of resources (types and counts) and their
-    relative arrangement (in the binding namespace) within a descriptor set.
-    Used when allocating descriptor sets and when creating pipeline layouts.
-    Represented by a slink:VkDescriptorSetLayout object.
-
-Device::
-    The processor(s) and execution environment that perform tasks requested
-    by the application via the Vulkan API.
-
-ifdef::VK_VERSION_1_1,VK_KHR_device_group_creation[]
-Device Group::
-    A set of physical devices that support accessing each other's memory and
-    recording a single command buffer that can: be executed on all the
-    physical devices.
-
-Device Index::
-    A zero-based integer that identifies one physical device from a logical
-    device.
-    A device index is valid if it is less than the number of physical
-    devices in the logical device.
-
-Device Mask::
-    A bitmask where each bit represents one device index.
-    A device mask value is valid if every bit that is set in the mask is at
-    a bit position that is less than the number of physical devices in the
-    logical device.
-endif::VK_VERSION_1_1,VK_KHR_device_group_creation[]
-
-Device Memory::
-    Memory accessible to the device.
-    Represented by a slink:VkDeviceMemory object.
-
-Device-Level Command::
-    Any command that is dispatched from a logical device, or from a child
-    object of a logical device.
-
-Device-Level Functionality::
-    All device-level commands and objects, and their structures, enumerated
-    types, and enumerants.
-
-Device-Level Object::
-    Logical device objects and their child objects.
-    For example, slink:VkDevice, slink:VkQueue, and slink:VkCommandBuffer
-    objects are device-level objects.
-
-Device-Local Memory::
-    Memory that is connected to the device, and may: be more performant for
-    device access than host-local memory.
-
-Direct Drawing Commands::
-    _Drawing commands_ that take all their parameters as direct arguments to
-    the command (and not sourced via structures in buffer memory as the
-    _indirect drawing commands_).
-    Includes
-ifdef::VK_EXT_multi_draw[]
-    flink:vkCmdDrawMultiIndexedEXT, flink:vkCmdDrawMultiEXT,
-endif::VK_EXT_multi_draw[]
-ifdef::VK_NV_mesh_shader[]
-    flink:vkCmdDrawMeshTasksNV,
-endif::VK_NV_mesh_shader[]
-    flink:vkCmdDraw, and flink:vkCmdDrawIndexed.
-
-ifdef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
-Disjoint::
-    _Disjoint planes_ are _image planes_ to which memory is bound
-    independently. +
-    A _disjoint image_ consists of multiple _disjoint planes_, and is
-    created with the ename:VK_IMAGE_CREATE_DISJOINT_BIT bit set.
-endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
-
-Dispatchable Command::
-    A non-global command.
-    The first argument to each dispatchable command is a dispatchable handle
-    type.
-
-Dispatchable Handle::
-    A handle of a pointer handle type which may: be used by layers as part
-    of intercepting API commands.
-
-Dispatching Commands::
-    Commands that provoke work using a compute pipeline.
-    Includes flink:vkCmdDispatch and flink:vkCmdDispatchIndirect.
-
-Drawing Commands::
-    Commands that provoke work using a graphics pipeline.
-    Includes flink:vkCmdDraw, flink:vkCmdDrawIndexed,
-ifdef::VK_VERSION_1_2[]
-    flink:vkCmdDrawIndirectCount, flink:vkCmdDrawIndexedIndirectCount,
-endif::VK_VERSION_1_2[]
-ifdef::VK_KHR_draw_indirect_count[]
-    flink:vkCmdDrawIndirectCountKHR, flink:vkCmdDrawIndexedIndirectCountKHR,
-endif::VK_KHR_draw_indirect_count[]
-ifdef::VK_AMD_draw_indirect_count[]
-    flink:vkCmdDrawIndirectCountAMD, flink:vkCmdDrawIndexedIndirectCountAMD,
-endif::VK_AMD_draw_indirect_count[]
-ifdef::VK_EXT_multi_draw[]
-    flink:vkCmdDrawMultiIndexedEXT, flink:vkCmdDrawMultiEXT,
-endif::VK_EXT_multi_draw[]
-ifdef::VK_NV_mesh_shader[]
-    flink:vkCmdDrawMeshTasksNV, flink:vkCmdDrawMeshTasksIndirectNV,
-    flink:vkCmdDrawMeshTasksIndirectCountNV,
-endif::VK_NV_mesh_shader[]
-    flink:vkCmdDrawIndirect, and flink:vkCmdDrawIndexedIndirect.
-
-Duration (Command)::
-    The _duration_ of a Vulkan command refers to the interval between
-    calling the command and its return to the caller.
-
-Dynamic Storage Buffer::
-    A storage buffer whose offset is specified each time the storage buffer
-    is bound to a command buffer via a descriptor set.
-
-Dynamic Uniform Buffer::
-    A uniform buffer whose offset is specified each time the uniform buffer
-    is bound to a command buffer via a descriptor set.
-
-Dynamically Uniform::
-    See _Dynamically Uniform_ in section 2.2 "`Terms`" of the
-    <<spirv-spec,Khronos SPIR-V Specification>>.
-
-Element::
-    Arrays are composed of multiple elements, where each element exists at a
-    unique index within that array.
-    Used primarily to describe data passed to or returned from the Vulkan
-    API.
-
-Explicitly-Enabled Layer::
-    A layer enabled by the application by adding it to the enabled layer
-    list in flink:vkCreateInstance or flink:vkCreateDevice.
-
-Event::
-    A synchronization primitive that is signaled when execution of previous
-    commands completes through a specified set of pipeline stages.
-    Events can be waited on by the device and polled by the host.
-    Represented by a slink:VkEvent object.
-
-Executable State (Command Buffer)::
-    A command buffer that has ended recording commands and can: be executed.
-    See also Initial State and Recording State.
-
-Execution Dependency::
-    A dependency that guarantees that certain pipeline stages`' work for a
-    first set of commands has completed execution before certain pipeline
-    stages`' work for a second set of commands begins execution.
-    This is accomplished via pipeline barriers, subpass dependencies,
-    events, or implicit ordering operations.
-
-Execution Dependency Chain::
-    A sequence of execution dependencies that transitively act as a single
-    execution dependency.
-
-ifdef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
-Explicit chroma reconstruction::
-    An implementation of sampler {YCbCr} conversion which reconstructs
-    reduced-resolution chroma samples to luma resolution and then separately
-    performs texture sample interpolation.
-    This is distinct from an implicit implementation, which incorporates
-    chroma sample reconstruction into texture sample interpolation.
-endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
-
-Extension Scope::
-    The set of objects and commands that can: be affected by an extension.
-    Extensions are either device scope or instance scope.
-
-Extending Structure::
-    A structure type which may appear in the _pname:pNext chain_ of another
-    structure, extending the functionality of the other structure.
-    Extending structures may be defined by either core API versions or
-    extensions.
-
-ifdef::VK_VERSION_1_1,VK_KHR_external_memory_capabilities,VK_KHR_external_semaphore_capabilities,VK_KHR_external_fence_capabilities[]
-External Handle::
-    A resource handle which has meaning outside of a specific Vulkan device
-    or its parent instance.
-    External handles may: be used to share resources between multiple Vulkan
-    devices in different instances, or between Vulkan and other APIs.
-    Some external handle types correspond to platform-defined handles, in
-    which case the resource may: outlive any particular Vulkan device or
-    instance and may: be transferred between processes, or otherwise
-    manipulated via functionality defined by the platform for that handle
-    type.
-endif::VK_VERSION_1_1,VK_KHR_external_memory_capabilities,VK_KHR_external_semaphore_capabilities,VK_KHR_external_fence_capabilities[]
-
-External synchronization::
-    A type of synchronization required: of the application, where parameters
-    defined to be externally synchronized must: not be used simultaneously
-    in multiple threads.
-
-Facingness (Polygon)::
-    A classification of a polygon as either front-facing or back-facing,
-    depending on the orientation (winding order) of its vertices.
-
-Facingness (Fragment)::
-    A fragment is either front-facing or back-facing, depending on the
-    primitive it was generated from.
-    If the primitive was a polygon (regardless of polygon mode), the
-    fragment inherits the facingness of the polygon.
-    All other fragments are front-facing.
-
-Fence::
-    A synchronization primitive that is signaled when a set of batches or
-    sparse binding operations complete execution on a queue.
-    Fences can: be waited on by the host.
-    Represented by a slink:VkFence object.
-
-Flat Shading::
-    A property of a vertex attribute that causes the value from a single
-    vertex (the provoking vertex) to be used for all vertices in a
-    primitive, and for interpolation of that attribute to return that single
-    value unaltered.
-
-Format Features::
-    A set of features from elink:VkFormatFeatureFlagBits that a
-    elink:VkFormat is capable of using for various commands.
-    The list is determined by factors such as elink:VkImageTiling.
-
-Fragment::
-    A rectangular framebuffer region with associated data produced by
-    <<primsrast,rasterization>> and processed by <<fragops,fragment
-    operations>> including the fragment shader.
-
-[[glossary-fragment-area]]
-Fragment Area::
-    The width and height, in pixels, of a fragment.
-
-ifdef::VK_EXT_fragment_density_map[]
-[[glossary-fragment-density]]
-Fragment Density::
-    The ratio of fragments per framebuffer area in the x and y direction.
-
-[[glossary-fragment-density-texel-size]]
-Fragment Density Texel Size::
-    The [eq]#(w,h)# framebuffer region in pixels that each texel in a
-    fragment density map applies to.
-endif::VK_EXT_fragment_density_map[]
-
-Fragment Input Attachment Interface::
-    Variables with code:UniformConstant storage class and a decoration of
-    code:InputAttachmentIndex that are statically used by a fragment
-    shader's entry point, which receive values from input attachments.
-
-ifdef::VK_AMD_shader_fragment_mask[]
-Fragment Mask::
-    A lookup table that associates color samples with color fragment values.
-endif::VK_AMD_shader_fragment_mask[]
-
-Fragment Output Interface::
-    A fragment shader entry point's variables with code:Output storage
-    class, which output to color and/or depth/stencil attachments.
-
-Framebuffer::
-    A collection of image views and a set of dimensions that, in conjunction
-    with a render pass, define the inputs and outputs used by drawing
-    commands.
-    Represented by a slink:VkFramebuffer object.
-
-Framebuffer Attachment::
-    One of the image views used in a framebuffer.
-
-Framebuffer Coordinates::
-    A coordinate system in which adjacent pixels`' coordinates differ by 1
-    in x and/or y, with [eq]#(0,0)# in the upper left corner and pixel
-    centers at half-integers.
-
-Framebuffer-Space::
-    Operating with respect to framebuffer coordinates.
-
-Framebuffer-Local::
-    A framebuffer-local dependency guarantees that only for a single
-    framebuffer region, the first set of operations happens-before the
-    second set of operations.
-
-Framebuffer-Global::
-    A framebuffer-global dependency guarantees that for all framebuffer
-    regions, the first set of operations happens-before the second set of
-    operations.
-
-Framebuffer Region::
-    A framebuffer region is a set of sample (x, y, layer, sample)
-    coordinates that is a subset of the entire framebuffer.
-
-Front-Facing::
-    See Facingness.
-
-Full Compatibility::
-    A given version of the API is fully compatible with another version if
-    an application, relying only on valid behavior and functionality defined
-    by either of those specifications, is able to correctly run against each
-    version without any modification.
-    This assumes no active attempt by that application to not run when it
-    detects a different version.
-
-Global Command::
-    A Vulkan command for which the first argument is not a dispatchable
-    handle type.
-
-Global Workgroup::
-    A collection of local workgroups dispatched by a single dispatching
-ifdef::VK_NV_mesh_shader[or single mesh task drawing]
-    command.
-
-Handle::
-    An opaque integer or pointer value used to refer to a Vulkan object.
-    Each object type has a unique handle type.
-
-Happen-after, happens-after::
-    A transitive, irreflexive and antisymmetric ordering relation between
-    operations.
-    An execution dependency with a source of *A* and a destination of *B*
-    enforces that *B* happens-after *A*.
-    The inverse relation of happens-before.
-
-Happen-before, happens-before::
-    A transitive, irreflexive and antisymmetric ordering relation between
-    operations.
-    An execution dependency with a source of *A* and a destination of *B*
-    enforces that *A* happens-before *B*.
-    The inverse relation of happens-after.
-
-Helper Invocation::
-    A fragment shader invocation that is created solely for the purposes of
-    evaluating derivatives for use in non-helper fragment shader
-    invocations, and which does not have side effects.
-
-Host::
-    The processor(s) and execution environment that the application runs on,
-    and that the Vulkan API is exposed on.
-
-Host Mapped Device Memory::
-    Device memory that is mapped for host access using flink:vkMapMemory.
-
-ifdef::VK_EXT_external_memory_host[]
-Host Mapped Foreign Memory::
-    Memory owned by a foreign device that is mapped for host access.
-endif::VK_EXT_external_memory_host[]
-
-Host Memory::
-    Memory not accessible to the device, used to store implementation data
-    structures.
-
-Host-Accessible Subresource::
-    A buffer, or a linear image subresource in either the
-    ename:VK_IMAGE_LAYOUT_PREINITIALIZED or ename:VK_IMAGE_LAYOUT_GENERAL
-    layout.
-    Host-accessible subresources have a well-defined addressing scheme which
-    can be used by the host.
-
-Host-Local Memory::
-    Memory that is not local to the device, and may: be less performant for
-    device access than device-local memory.
-
-Host-Visible Memory::
-    Device memory that can: be mapped on the host and can: be read and
-    written by the host.
-
-Identically Defined Objects::
-    Objects of the same type where all arguments to their creation or
-    allocation functions, with the exception of pname:pAllocator, are +
-    . Vulkan handles which refer to the same object or
-    . identical scalar or enumeration values or
-    . Host pointers which point to an array of values or structures which
-      also satisfy these three constraints.
-
-Image::
-    A resource that represents a multi-dimensional formatted interpretation
-    of device memory.
-    Represented by a slink:VkImage object.
-
-Image Subresource::
-    A specific mipmap level and layer of an image.
-
-Image Subresource Range::
-    A set of image subresources that are contiguous mipmap levels and
-    layers.
-
-Image View::
-    An object that represents an image subresource range of a specific
-    image, and state that controls how the contents are interpreted.
-    Represented by a slink:VkImageView object.
-
-Immutable Sampler::
-    A sampler descriptor provided at descriptor set layout creation time,
-    and that is used for that binding in all descriptor sets allocated from
-    the layout, and cannot be changed.
-
-ifdef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
-Implicit chroma reconstruction::
-    An implementation of sampler {YCbCr} conversion which reconstructs the
-    reduced-resolution chroma samples directly at the sample point, as part
-    of the normal texture sampling operation.
-    This is distinct from an _explicit chroma reconstruction_
-    implementation, which reconstructs the reduced-resolution chroma samples
-    to the resolution of the luma samples, then filters the result as part
-    of texture sample interpolation.
-endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
-
-Implicitly-Enabled Layer::
-    A layer enabled by a loader-defined mechanism outside the Vulkan API,
-    rather than explicitly by the application during instance or device
-    creation.
-
-ifdef::VK_NV_ray_tracing,VK_KHR_acceleration_structure[]
-Inactive Object (Ray Tracing)::
-    A primitive or instance in a ray tracing acceleration structure which
-    has a corresponding ID, but which will never report an intersection with
-    any ray.
-endif::VK_NV_ray_tracing,VK_KHR_acceleration_structure[]
-
-Index Buffer::
-    A buffer bound via flink:vkCmdBindIndexBuffer which is the source of
-    index values used to fetch vertex attributes for a
-    flink:vkCmdDrawIndexed or flink:vkCmdDrawIndexedIndirect command.
-
-Indexed Drawing Commands::
-    _Drawing commands_ which use an _index buffer_ as the source of index
-    values used to fetch vertex attributes for a drawing command.
-    Includes flink:vkCmdDrawIndexed,
-ifdef::VK_VERSION_1_2[]
-    flink:vkCmdDrawIndexedIndirectCount,
-endif::VK_VERSION_1_2[]
-ifdef::VK_KHR_draw_indirect_count[]
-    flink:vkCmdDrawIndexedIndirectCountKHR,
-endif::VK_KHR_draw_indirect_count[]
-ifdef::VK_AMD_draw_indirect_count[]
-    flink:vkCmdDrawIndexedIndirectCountAMD,
-endif::VK_AMD_draw_indirect_count[]
-ifdef::VK_EXT_multi_draw[]
-    flink:vkCmdDrawMultiIndexedEXT,
-endif::VK_EXT_multi_draw[]
-    and flink:vkCmdDrawIndexedIndirect.
-
-Indirect Commands::
-    Drawing or dispatching commands that source some of their parameters
-    from structures in buffer memory.
-    Includes flink:vkCmdDrawIndirect, flink:vkCmdDrawIndexedIndirect,
-ifdef::VK_VERSION_1_2[]
-    flink:vkCmdDrawIndirectCount, flink:vkCmdDrawIndexedIndirectCount,
-endif::VK_VERSION_1_2[]
-ifdef::VK_KHR_draw_indirect_count[]
-    flink:vkCmdDrawIndirectCountKHR, flink:vkCmdDrawIndexedIndirectCountKHR,
-endif::VK_KHR_draw_indirect_count[]
-ifdef::VK_AMD_draw_indirect_count[]
-    flink:vkCmdDrawIndirectCountAMD, flink:vkCmdDrawIndexedIndirectCountAMD,
-endif::VK_AMD_draw_indirect_count[]
-ifdef::VK_NV_mesh_shader[]
-    flink:vkCmdDrawMeshTasksIndirectNV,
-    flink:vkCmdDrawMeshTasksIndirectCountNV,
-endif::VK_NV_mesh_shader[]
-    and flink:vkCmdDispatchIndirect.
-
-ifdef::VK_NV_device_generated_commands[]
-Indirect Commands Layout::
-    A definition of a sequence of commands, that are generated on the device
-    via flink:vkCmdPreprocessGeneratedCommandsNV and
-    flink:vkCmdExecuteGeneratedCommandsNV.
-    Each sequence is comprised of multiple
-    elink:VkIndirectCommandsTokenTypeNV, which represent a subset of
-    traditional command buffer commands.
-    Represented as slink:VkIndirectCommandsLayoutNV.
-endif::VK_NV_device_generated_commands[]
-
-Indirect Drawing Commands::
-    _Drawing commands_ that source some of their parameters from structures
-    in buffer memory.
-    Includes flink:vkCmdDrawIndirect,
-ifdef::VK_VERSION_1_2[]
-    flink:vkCmdDrawIndirectCount, flink:vkCmdDrawIndexedIndirectCount,
-endif::VK_VERSION_1_2[]
-ifdef::VK_KHR_draw_indirect_count[]
-    flink:vkCmdDrawIndirectCountKHR, flink:vkCmdDrawIndexedIndirectCountKHR,
-endif::VK_KHR_draw_indirect_count[]
-ifdef::VK_AMD_draw_indirect_count[]
-    flink:vkCmdDrawIndirectCountAMD, flink:vkCmdDrawIndexedIndirectCountAMD,
-endif::VK_AMD_draw_indirect_count[]
-ifdef::VK_NV_mesh_shader[]
-    flink:vkCmdDrawMeshTasksIndirectNV,
-    flink:vkCmdDrawMeshTasksIndirectCountNV,
-endif::VK_NV_mesh_shader[]
-    and flink:vkCmdDrawIndexedIndirect.
-
-Initial State (Command Buffer)::
-    A command buffer that has not begun recording commands.
-    See also Recording State and Executable State.
-
-ifdef::VK_EXT_inline_uniform_block[]
-Inline Uniform Block::
-    A descriptor type that represents uniform data stored directly in
-    descriptor sets, and supports read-only access in a shader.
-endif::VK_EXT_inline_uniform_block[]
-
-Input Attachment::
-    A descriptor type that represents an image view, and supports unfiltered
-    read-only access in a shader, only at the fragment's location in the
-    view.
-
-Instance::
-    The top-level Vulkan object, which represents the application's
-    connection to the implementation.
-    Represented by a slink:VkInstance object.
-
-Instance-Level Command::
-    Any command that is dispatched from an instance, or from a child object
-    of an instance, except for physical devices and their children.
-
-Instance-Level Functionality::
-    All instance-level commands and objects, and their structures,
-    enumerated types, and enumerants.
-
-Instance-Level Object::
-    High-level Vulkan objects, which are not physical devices, nor children
-    of physical devices.
-    For example, slink:VkInstance is an instance-level object.
-
-ifdef::VK_VERSION_1_1,VK_KHR_device_group[]
-Instance (Memory)::
-    In a logical device representing more than one physical device, some
-    device memory allocations have the requested amount of memory allocated
-    multiple times, once for each physical device in a device mask.
-    Each such replicated allocation is an instance of the device memory.
-
-Instance (Resource)::
-    In a logical device representing more than one physical device, buffer
-    and image resources exist on all physical devices but can: be bound to
-    memory differently on each.
-    Each such replicated resource is an instance of the resource.
-endif::VK_VERSION_1_1,VK_KHR_device_group[]
-
-Internal Synchronization::
-    A type of synchronization required: of the implementation, where
-    parameters not defined to be externally synchronized may: require
-    internal mutexing to avoid multithreaded race conditions.
-
-Invocation (Shader)::
-    A single execution of an entry point in a SPIR-V module.
-    For example, a single vertex's execution of a vertex shader or a single
-    fragment's execution of a fragment shader.
-
-Invocation Group::
-    A set of shader invocations that are executed in parallel and that must:
-    execute the same control flow path in order for control flow to be
-    considered dynamically uniform.
-
-ifdef::VK_KHR_ray_tracing_pipeline,VK_NV_ray_tracing[]
-Invocation Repack Instruction::
-    A ray tracing shader call <<ray-tracing-repack,instruction>> where the
-    implementation may: change the set of invocations that are executing.
-endif::VK_KHR_ray_tracing_pipeline,VK_NV_ray_tracing[]
-
-ifdef::VK_KHR_deferred_host_operations[]
-Join (Deferred Host Operations)::
-    The act of instructing a thread to participate in the execution of a
-    deferred operation.
-    See <<deferred-host-operations, Deferred Host Operations>>.
-endif::VK_KHR_deferred_host_operations[]
-
-[[glossary-linear-resource]]
-Linear Resource::
-+
---
-A resource is _linear_ if it is one of the following:
-
-  * a slink:VkBuffer
-  * a slink:VkImage created with ename:VK_IMAGE_TILING_LINEAR
-ifdef::VK_EXT_image_drm_format_modifier[]
-  * a slink:VkImage created with
-    ename:VK_IMAGE_TILING_DRM_FORMAT_MODIFIER_EXT and whose
-    <<glossary-drm-format-modifier,Linux DRM format modifier>> is
-    code:DRM_FORMAT_MOD_LINEAR
-endif::VK_EXT_image_drm_format_modifier[]
-ifdef::VK_NV_ray_tracing[]
-  * a slink:VkAccelerationStructureNV
-endif::VK_NV_ray_tracing[]
-ifdef::VK_KHR_acceleration_structure[]
-
-Because a slink:VkAccelerationStructureKHR resource does not have memory
-bound to it directly, it is considered neither linear nor non-linear.
-However, the slink:VkBuffer on which a slink:VkAccelerationStructureKHR
-resource is placed is a linear resource.
-endif::VK_KHR_acceleration_structure[]
-
-A resource is _non-linear_ if it is one of the following:
-
-  * a slink:VkImage created with ename:VK_IMAGE_TILING_OPTIMAL
-ifdef::VK_EXT_image_drm_format_modifier[]
-  * a slink:VkImage created with
-    ename:VK_IMAGE_TILING_DRM_FORMAT_MODIFIER_EXT and whose
-    <<glossary-drm-format-modifier,Linux DRM format modifier>> is not
-    code:DRM_FORMAT_MOD_LINEAR
-endif::VK_EXT_image_drm_format_modifier[]
---
-
-ifdef::VK_EXT_image_drm_format_modifier[]
-[[glossary-drm-format-modifier,Linux DRM format modifier]]
-Linux DRM Format Modifier::
-    A 64-bit, vendor-prefixed, semi-opaque unsigned integer describing
-    vendor-specific details of an image's memory layout.
-    In Linux graphics APIs, _modifiers_ are commonly used to specify the
-    memory layout of externally shared images.
-    An image has a _modifier_ if and only if it is created with pname:tiling
-    equal to ename:VK_IMAGE_TILING_DRM_FORMAT_MODIFIER_EXT.
-    For more details, refer to the appendix for extension
-    `apiext:VK_EXT_image_drm_format_modifier`.
-endif::VK_EXT_image_drm_format_modifier[]
-
-Local Workgroup::
-    A collection of compute shader invocations invoked by a single
-    dispatching command, which share data via code:WorkgroupLocal variables
-    and can synchronize with each other.
-
-Logical Device::
-    An object that represents the application's interface to the physical
-    device.
-    The logical device is the parent of most Vulkan objects.
-    Represented by a slink:VkDevice object.
-
-Logical Operation::
-    Bitwise operations between a fragment color value and a value in a color
-    attachment, that produce a final color value to be written to the
-    attachment.
-
-Lost Device::
-    A state that a logical device may: be in as a result of unrecoverable
-    implementation errors, or other exceptional conditions.
-
-Mappable::
-    See Host-Visible Memory.
-
-Memory Dependency::
-    A memory dependency is an execution dependency which includes
-    availability and visibility operations such that:
-
-  * The first set of operations happens-before the availability operation
-  * The availability operation happens-before the visibility operation
-  * The visibility operation happens-before the second set of operations
-
-Memory Domain::
-    A memory domain is an abstract place to which memory writes are made
-    available by availability operations and memory domain operations.
-    The memory domains correspond to the set of agents that the write can:
-    then be made visible to.
-    The memory domains are _host_, _device_, _shader_, _workgroup instance_
-    (for workgroup instance there is a unique domain for each compute
-    workgroup) and _subgroup instance_ (for subgroup instance there is a
-    unique domain for each subgroup).
-
-Memory Domain Operation::
-    An operation that makes the writes that are available to one memory
-    domain available to another memory domain.
-
-Memory Heap::
-    A region of memory from which device memory allocations can: be made.
-
-Memory Type::
-    An index used to select a set of memory properties (e.g. mappable,
-    cached) for a device memory allocation.
-
-ifdef::VK_NV_mesh_shader[]
-Mesh Shading Pipeline::
-    A graphics pipeline where the primitives are assembled explicitly in the
-    shader stages.
-    In contrast to the primitive shading pipeline where input primitives are
-    assembled by fixed function processing.
-endif::VK_NV_mesh_shader[]
-
-ifdef::VK_NV_mesh_shader[]
-Mesh Tasks Drawing Commands::
-    _Drawing commands_ which create shader invocations organized in
-    workgroups for drawing mesh tasks.
-    Includes flink:vkCmdDrawMeshTasksNV, flink:vkCmdDrawMeshTasksIndirectNV,
-    and flink:vkCmdDrawMeshTasksIndirectCountNV.
-endif::VK_NV_mesh_shader[]
-
-Minimum Miplevel Size::
-    The smallest size that is permitted for a miplevel.
-    For conventional images this is 1x1x1.
-ifdef::VK_NV_corner_sampled_image[]
-    For corner-sampled images, this is 2x2x2.
-endif::VK_NV_corner_sampled_image[]
-    See <<resources-image-miplevel-sizing, Image Miplevel Sizing>>.
-
-Mip Tail Region::
-    The set of mipmap levels of a sparse residency texture that are too
-    small to fill a sparse block, and that must: all be bound to memory
-    collectively and opaquely.
-
-ifdef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
-Multi-planar::
-    A _multi-planar format_ (or "`planar format`") is an image format
-    consisting of more than one _plane_, identifiable with a etext:_2PLANE
-    or etext:_3PLANE component to the format name and listed in
-    <<formats-requiring-sampler-ycbcr-conversion>>.
-    A _multi-planar image_ (or "`planar image`") is an image of a
-    multi-planar format.
-endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
-
-Non-Dispatchable Handle::
-    A handle of an integer handle type.
-    Handle values may: not be unique, even for two objects of the same type.
-
-Non-Indexed Drawing Commands::
-    _Drawing commands_ for which the vertex attributes are sourced in linear
-    order from the vertex input attributes for a drawing command (i.e. they
-    do not use an _index buffer_).
-    Includes flink:vkCmdDraw,
-ifdef::VK_VERSION_1_2[]
-    flink:vkCmdDrawIndirectCount,
-endif::VK_VERSION_1_2[]
-ifdef::VK_KHR_draw_indirect_count[]
-    flink:vkCmdDrawIndirectCountKHR,
-endif::VK_KHR_draw_indirect_count[]
-ifdef::VK_AMD_draw_indirect_count[]
-    flink:vkCmdDrawIndirectCountAMD,
-endif::VK_AMD_draw_indirect_count[]
-ifdef::VK_EXT_multi_draw[]
-    flink:vkCmdDrawMultiEXT,
-endif::VK_EXT_multi_draw[]
-    and flink:vkCmdDrawIndirect.
-
-Normalized::
-    A value that is interpreted as being in the range [eq]#[0,1]# as a
-    result of being implicitly divided by some other value.
-
-Normalized Device Coordinates::
-    A coordinate space after perspective division is applied to clip
-    coordinates, and before the viewport transformation converts to
-    framebuffer coordinates.
-
-Obsoleted (feature)::
-    A feature is obsolete if it can no longer be used.
-
-ifdef::VK_VERSION_1_2,VK_KHR_buffer_device_address[]
-Opaque Capture Address::
-    A 64-bit value representing the device address of a buffer or memory
-    object that is expected to be used by trace capture/replay tools in
-    combination with the
-    <<features-bufferDeviceAddress,bufferDeviceAddress>> feature.
-endif::VK_VERSION_1_2,VK_KHR_buffer_device_address[]
-
-Overlapped Range (Aliased Range)::
-    The aliased range of a device memory allocation that intersects a given
-    image subresource of an image or range of a buffer.
-
-Ownership (Resource)::
-    If an entity (e.g. a queue family) has ownership of a resource, access
-    to that resource is well-defined for access by that entity.
-
-Packed Format::
-    A format whose components are stored as a single texel block in memory,
-    with their relative locations defined within that element.
-
-ifdef::VK_NV_geometry_shader_passthrough[]
-Passthrough Geometry Shader::
-    A geometry shader which uses the code:PassthroughNV decoration on a
-    variable in its input interface.
-    Output primitives in a passthrough geometry shader always have the same
-    topology as the input primitive and are not produced by emitting
-    vertices.
-endif::VK_NV_geometry_shader_passthrough[]
-
-ifdef::VK_VERSION_1_1,VK_KHR_external_semaphore,VK_KHR_external_fence[]
-Payload::
-    Importable or exportable reference to the internal data of an object in
-    Vulkan.
-endif::VK_VERSION_1_1,VK_KHR_external_semaphore,VK_KHR_external_fence[]
-
-ifdef::VK_NV_mesh_shader[]
-Per-View::
-    A variable that has an array of values which are output, one for each
-    view that is being generated.
-    A mesh shader which uses the code:PerViewNV decoration on a variable in
-    its output interface.
-endif::VK_NV_mesh_shader[]
-
-ifdef::VK_VERSION_1_1,VK_KHR_device_group[]
-Peer Memory::
-    An instance of memory corresponding to a different physical device than
-    the physical device performing the memory access, in a logical device
-    that represents multiple physical devices.
-endif::VK_VERSION_1_1,VK_KHR_device_group[]
-
-Physical Device::
-    An object that represents a single device in the system.
-    Represented by a slink:VkPhysicalDevice object.
-
-Physical-Device-Level Command::
-    Any command that is dispatched from a physical device.
-
-Physical-Device-Level Functionality::
-    All physical-device-level commands and objects, and their structures,
-    enumerated types, and enumerants.
-
-Physical-Device-Level Object::
-    Physical device objects.
-    For example, slink:VkPhysicalDevice is a physical-device-level object.
-
-Pipeline::
-    An object that controls how graphics or compute work is executed on the
-    device.
-    A pipeline includes one or more shaders, as well as state controlling
-    any non-programmable stages of the pipeline.
-    Represented by a slink:VkPipeline object.
-
-Pipeline Barrier::
-    An execution and/or memory dependency recorded as an explicit command in
-    a command buffer, that forms a dependency between the previous and
-    subsequent commands.
-
-Pipeline Cache::
-    An object that can: be used to collect and retrieve information from
-    pipelines as they are created, and can: be populated with previously
-    retrieved information in order to accelerate pipeline creation.
-    Represented by a slink:VkPipelineCache object.
-
-Pipeline Layout::
-    An object that defines the set of resources (via a collection of
-    descriptor set layouts) and push constants used by pipelines that are
-    created using the layout.
-    Used when creating a pipeline and when binding descriptor sets and
-    setting push constant values.
-    Represented by a slink:VkPipelineLayout object.
-
-ifdef::VK_KHR_pipeline_library[]
-Pipeline Library::
-    A pipeline that cannot be directly used, instead defining a set of
-    shaders and shader groups which will be <<pipeline-library,linked into
-    other pipelines>>.
-endif::VK_KHR_pipeline_library[]
-
-Pipeline Stage::
-    A logically independent execution unit that performs some of the
-    operations defined by an action command.
-
-ifdef::VK_KHR_ray_tracing_pipeline,VK_NV_ray_tracing[]
-Pipeline Trace Ray Instruction::
-    A ray tracing instruction which traces a ray into an acceleration
-    structure when using ray tracing pipelines.
-    One of
-ifdef::VK_NV_ray_tracing[code:OpTraceNV,]
-ifdef::VK_NV_ray_tracing_motion_blur[code:OpTraceRayMotionNV, code:OpTraceMotionNV,]
-ifdef::VK_KHR_ray_tracing_pipeline[code:OpTraceRayKHR]
-    .
-endif::VK_KHR_ray_tracing_pipeline,VK_NV_ray_tracing[]
-
-pname:pNext Chain::
-    A set of structures <<fundamentals-validusage-pNext,chained together>>
-    through their ptext:pNext members.
-
-ifdef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
-Planar::
-    See _multi-planar_.
-
-Plane::
-    An _image plane_ is part of the representation of an image, containing a
-    subset of the color components required to represent the texels in the
-    image and with a contiguous mapping of coordinates to bound memory.
-    Most images consist only of a single plane, but some formats spread the
-    components across multiple image planes.
-    The host-accessible properties of each image plane are accessed in a
-    linear layout using flink:vkGetImageSubresourceLayout.
-    If a multi-planar image is created with the
-    ename:VK_IMAGE_CREATE_DISJOINT_BIT bit set, the image is described as
-    _disjoint_, and its planes are therefore bound to memory independently.
-endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
-
-Point Sampling (Rasterization)::
-    A rule that determines whether a fragment sample location is covered by
-    a polygon primitive by testing whether the sample location is in the
-    interior of the polygon in framebuffer-space, or on the boundary of the
-    polygon according to the tie-breaking rules.
-
-Potential Format Features::
-    The union of all elink:VkFormatFeatureFlagBits that the implementation
-    supports for a specified elink:VkFormat, over all supported image
-    tilings.
-ifdef::VK_ANDROID_external_memory_android_hardware_buffer[]
-    For <<memory-external-android-hardware-buffer-external-formats,external
-    formats>> the elink:VkFormatFeatureFlagBits is provided by the
-    implementation.
-endif::VK_ANDROID_external_memory_android_hardware_buffer[]
-
-Pre-rasterization::
-    Operations that execute before <<primsrast,rasterization>>, and any
-    state associated with those operations.
-
-ifdef::VK_KHR_swapchain[]
-Presentable image::
-    A sname:VkImage object obtained from a sname:VkSwapchainKHR used to
-    present to a sname:VkSurfaceKHR object.
-endif::VK_KHR_swapchain[]
-
-Preserve Attachment::
-    One of a list of attachments in a subpass description that is not read
-    or written by the subpass, but that is read or written on earlier and
-    later subpasses and whose contents must: be preserved through this
-    subpass.
-
-Primary Command Buffer::
-    A command buffer that can: execute secondary command buffers, and can:
-    be submitted directly to a queue.
-
-ifdef::VK_NV_mesh_shader[]
-Primitive Shading Pipeline::
-    A graphics pipeline where input primitives are assembled by fixed
-    function processing.
-    It is the counterpart to mesh shading.
-endif::VK_NV_mesh_shader[]
-
-Primitive Topology::
-    State that controls how vertices are assembled into primitives, e.g. as
-    lists of triangles, strips of lines, etc..
-
-Promoted (feature)::
-    A feature from an older extension is considered promoted if it is made
-    available as part of a new core version or newer extension with wider
-    support.
-
-ifdef::VK_VERSION_1_1[]
-Protected Buffer::
-    A buffer to which protected device memory can: be bound.
-
-Protected-capable Device Queue::
-    A device queue to which protected command buffers can: be submitted.
-
-Protected Command Buffer::
-    A command buffer which can: be submitted to a protected-capable device
-    queue.
-
-Protected Device Memory::
-    Device memory which can: be visible to the device but must: not be
-    visible to the host.
-
-Protected Image::
-    An image to which protected device memory can: be bound.
-endif::VK_VERSION_1_1[]
-
-Provisional::
-    A feature is released provisionally in order to get wider feedback on
-    the functionality before it is finalized.
-    Provisional features may change in ways that break backwards
-    compatibility, and thus are not recommended for use in production
-    applications.
-
-Provoking Vertex::
-    The vertex in a primitive from which flat shaded attribute values are
-    taken.
-    This is generally the "`first`" vertex in the primitive, and depends on
-    the primitive topology.
-
-Push Constants::
-    A small bank of values writable via the API and accessible in shaders.
-    Push constants allow the application to set values used in shaders
-    without creating buffers or modifying and binding descriptor sets for
-    each update.
-
-Push Constant Interface::
-    The set of variables with code:PushConstant storage class that are
-    statically used by a shader entry point, and which receive values from
-    push constant commands.
-
-ifdef::VK_KHR_push_descriptor[]
-Push Descriptors::
-    Descriptors that are written directly into a command buffer rather than
-    into a descriptor set.
-    Push descriptors allow the application to set descriptors used in
-    shaders without allocating or modifying descriptor sets for each update.
-endif::VK_KHR_push_descriptor[]
-
-ifdef::VK_VERSION_1_1,VK_KHR_descriptor_update_template[]
-Descriptor Update Template::
-    An object that specifies a mapping from descriptor update information in
-    host memory to elements in a descriptor set, which helps enable more
-    efficient descriptor set updates.
-
-endif::VK_VERSION_1_1,VK_KHR_descriptor_update_template[]
-
-Query Pool::
-    An object containing a number of query entries and their associated
-    state and results.
-    Represented by a slink:VkQueryPool object.
-
-Queue::
-    An object that executes command buffers and sparse binding operations on
-    a device.
-    Represented by a slink:VkQueue object.
-
-Queue Family::
-    A set of queues that have common properties and support the same
-    functionality, as advertised in slink:VkQueueFamilyProperties.
-
-Queue Operation::
-    A unit of work to be executed by a specific queue on a device, submitted
-    via a <<devsandqueues-submission, queue submission command>>.
-    Each queue submission command details the specific queue operations that
-    occur as a result of calling that command.
-    Queue operations typically include work that is specific to each
-    command, and synchronization tasks.
-
-Queue Submission::
-    Zero or more batches and an optional fence to be signaled, passed to a
-    command for execution on a queue.
-    See the <<devsandqueues-submission, Devices and Queues chapter>> for
-    more information.
-
-ifdef::VK_KHR_ray_tracing_pipeline,VK_NV_ray_tracing[]
-Ray Tracing Command::
-    Commands that provoke work using a ray tracing pipeline.
-    Includes
-ifdef::VK_NV_ray_tracing[flink:vkCmdTraceRaysNV,]
-ifdef::VK_KHR_ray_tracing_pipeline[flink:vkCmdTraceRaysKHR, and flink:vkCmdTraceRaysIndirectKHR]
-    .
-endif::VK_KHR_ray_tracing_pipeline,VK_NV_ray_tracing[]
-
-Recording State (Command Buffer)::
-    A command buffer that is ready to record commands.
-    See also Initial State and Executable State.
-
-Release Operation (Resource)::
-    An operation that releases ownership of an image subresource or buffer
-    range.
-
-Render Pass::
-    An object that represents a set of framebuffer attachments and phases of
-    rendering using those attachments.
-    Represented by a slink:VkRenderPass object.
-
-Render Pass Instance::
-    A use of a render pass in a command buffer.
-
-Required Extensions::
-    Extensions that must: be enabled alongside extensions dependent on them
-    (see <<extendingvulkan-extensions-extensiondependencies, Extension
-    Dependencies>>).
-
-Reset (Command Buffer)::
-    Resetting a command buffer discards any previously recorded commands and
-    puts a command buffer in the initial state.
-
-Residency Code::
-    An integer value returned by sparse image instructions, indicating
-    whether any sparse unbound texels were accessed.
-
-Resolve Attachment::
-    A subpass attachment point, or image view, that is the target of a
-    multisample resolve operation from the corresponding color attachment at
-    the end of the subpass.
-
-ifdef::VK_KHR_swapchain[]
-Retired Swapchain::
-    A swapchain that has been used as the pname:oldSwapchain parameter to
-    flink:vkCreateSwapchainKHR.
-    Images cannot be acquired from a retired swapchain, however images that
-    were acquired (but not presented) before the swapchain was retired can:
-    be presented.
-endif::VK_KHR_swapchain[]
-
-Sample Index::
-    The index of a sample within a <<primsrast-multisampling-coverage-mask,
-    single set of samples>>.
-
-Sample Shading::
-    Invoking the fragment shader multiple times per fragment, with the
-    covered samples partitioned among the invocations.
-
-Sampled Image::
-    A descriptor type that represents an image view, and supports filtered
-    (sampled) and unfiltered read-only access in a shader.
-
-Sampler::
-    An object containing state that controls how sampled image data is
-    sampled (or filtered) when accessed in a shader.
-    Also a descriptor type describing the object.
-    Represented by a slink:VkSampler object.
-
-Secondary Command Buffer::
-    A command buffer that can: be executed by a primary command buffer, and
-    must: not be submitted directly to a queue.
-
-Self-Dependency::
-    A subpass dependency from a subpass to itself, i.e. with
-    pname:srcSubpass equal to pname:dstSubpass.
-    A self-dependency is not automatically performed during a render pass
-    instance, rather a subset of it can: be performed via
-    flink:vkCmdPipelineBarrier during the subpass.
-
-Semaphore::
-    A synchronization primitive that supports signal and wait operations,
-    and can: be used to synchronize operations within a queue or across
-    queues.
-    Represented by a slink:VkSemaphore object.
-
-Shader::
-    Instructions selected (via an entry point) from a shader module, which
-    are executed in a shader stage.
-
-ifdef::VK_KHR_ray_tracing_pipeline,VK_NV_ray_tracing[]
-Shader Call::
-    An <<ray-tracing-shader-call,instruction>> which may: cause execution to
-    continue in a different shader stage.
-endif::VK_KHR_ray_tracing_pipeline,VK_NV_ray_tracing[]
-
-Shader Code::
-    A stream of instructions used to describe the operation of a shader.
-
-ifdef::VK_NV_device_generated_commands,VK_NV_ray_tracing,VK_KHR_ray_tracing_pipeline[]
-Shader Group::
-    A set of Shader Stages that are part of a slink:VkPipeline which
-    contains multiple of such sets.
-    This allows the device to make use of all the shader groups from the
-    bound pipeline independently.
-endif::VK_NV_device_generated_commands,VK_NV_ray_tracing,VK_KHR_ray_tracing_pipeline[]
-
-Shader Module::
-    A collection of shader code, potentially including several functions and
-    entry points, that is used to create shaders in pipelines.
-    Represented by a slink:VkShaderModule object.
-
-Shader Stage::
-    A stage of the graphics or compute pipeline that executes shader code.
-
-ifdef::VK_KHR_fragment_shading_rate,VK_NV_shading_rate_image[]
-[[glossary-shading-rate]]
-Shading Rate::
-    The ratio of the number of fragment shader invocations generated in a
-    fully covered framebuffer region to the size (in pixels) of that region.
-endif::VK_KHR_fragment_shading_rate,VK_NV_shading_rate_image[]
-
-ifdef::VK_NV_shading_rate_image[]
-[[glossary-shading-rate-image]]
-Shading Rate Image::
-    An image used to establish the shading rate for a framebuffer region,
-    where each pixel controls the shading rate for a corresponding
-    framebuffer region.
-endif::VK_NV_shading_rate_image[]
-
-ifdef::VK_KHR_shared_presentable_image[]
-Shared presentable image::
-    A presentable image created from a swapchain with elink:VkPresentModeKHR
-    set to either ename:VK_PRESENT_MODE_SHARED_DEMAND_REFRESH_KHR or
-    ename:VK_PRESENT_MODE_SHARED_CONTINUOUS_REFRESH_KHR.
-endif::VK_KHR_shared_presentable_image[]
-
-Side Effect::
-    A store to memory or atomic operation on memory from a shader
-    invocation.
-
-ifdef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
-Single-plane format::
-    A format that is not _multi-planar_.
-endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
-
-Size-Compatible Image Formats::
-    When a compressed image format and an uncompressed image format are
-    size-compatible, it means that the texel block size of the uncompressed
-    format must: equal the texel block size of the compressed format.
-
-Sparse Block::
-    An element of a sparse resource that can be independently bound to
-    memory.
-    Sparse blocks of a particular sparse resource have a corresponding size
-    in bytes that they use in the bound memory.
-
-Sparse Image Block::
-    A sparse block in a sparse partially-resident image.
-    In addition to the sparse block size in bytes, sparse image blocks have
-    a corresponding width, height, and depth that define the dimensions of
-    these elements in units of texels or compressed texel blocks, the latter
-    being used in case of sparse images having a block-compressed format.
-
-Sparse Unbound Texel::
-    A texel read from a region of a sparse texture that does not have memory
-    bound to it.
-
-ifdef::VK_NV_ray_tracing_motion_blur[]
-SRT::
-   A decomposition of a spatial transform separating out scale, rotation,
-   and translation which has better linear interpolation properties for
-   representing motion.
-endif::VK_NV_ray_tracing_motion_blur[]
-
-Static Use::
-    An object in a shader is statically used by a shader entry point if any
-    function in the entry point's call tree contains an instruction using
-    the object.
-    Static use is used to constrain the set of descriptors used by a shader
-    entry point.
-
-Storage Buffer::
-    A descriptor type that represents a buffer, and supports reads, writes,
-    and atomics in a shader.
-
-Storage Image::
-    A descriptor type that represents an image view, and supports unfiltered
-    loads, stores, and atomics in a shader.
-
-Storage Texel Buffer::
-    A descriptor type that represents a buffer view, and supports
-    unfiltered, formatted reads, writes, and atomics in a shader.
-
-ifdef::VK_VERSION_1_1,VK_EXT_shader_subgroup_vote[]
-Subgroup::
-    A set of shader invocations that can: synchronize and share data with
-    each other efficiently.
-    In compute shaders, the _local workgroup_ is a superset of the subgroup.
-endif::VK_VERSION_1_1,VK_EXT_shader_subgroup_vote[]
-
-ifdef::VK_VERSION_1_1,VK_EXT_shader_subgroup_ballot[]
-Subgroup Mask::
-    A bitmask for all invocations in the current subgroup with one bit per
-    invocation, starting with the least significant bit in the first vector
-    component, continuing to the last bit (less than code:SubgroupSize) in
-    the last required vector component.
-endif::VK_VERSION_1_1,VK_EXT_shader_subgroup_ballot[]
-
-Subpass::
-    A phase of rendering within a render pass, that reads and writes a
-    subset of the attachments.
-
-Subpass Dependency::
-    An execution and/or memory dependency between two subpasses described as
-    part of render pass creation, and automatically performed between
-    subpasses in a render pass instance.
-    A subpass dependency limits the overlap of execution of the pair of
-    subpasses, and can: provide guarantees of memory coherence between
-    accesses in the subpasses.
-
-Subpass Description::
-    Lists of attachment indices for input attachments, color attachments,
-    depth/stencil attachment, resolve attachments,
-ifdef::VK_VERSION_1_2,VK_KHR_depth_stencil_resolve[]
-    depth/stencil resolve,
-endif::VK_VERSION_1_2,VK_KHR_depth_stencil_resolve[]
-    and preserve attachments used by the subpass in a render pass.
-
-Subset (Self-Dependency)::
-    A subset of a self-dependency is a pipeline barrier performed during the
-    subpass of the self-dependency, and whose stage masks and access masks
-    each contain a subset of the bits set in the identically named mask in
-    the self-dependency.
-
-Texel Block::
-    A single addressable element of an image with an uncompressed
-    elink:VkFormat, or a single compressed block of an image with a
-    compressed elink:VkFormat.
-
-Texel Block Size::
-    The size (in bytes) used to store a texel block of a compressed or
-    uncompressed image.
-
-Texel Coordinate System::
-    One of three coordinate systems (normalized, unnormalized, integer) that
-    define how texel coordinates are interpreted in an image or a specific
-    mipmap level of an image.
-
-ifdef::VK_VERSION_1_2,VK_KHR_timeline_semaphore[]
-Timeline Semaphore::
-    A semaphore with a strictly increasing 64-bit unsigned integer payload
-    indicating whether the semaphore is signaled with respect to a
-    particular reference value.
-    Represented by a slink:VkSemaphore object created with a semaphore type
-    of ename:VK_SEMAPHORE_TYPE_TIMELINE.
-endif::VK_VERSION_1_2,VK_KHR_timeline_semaphore[]
-
-Uniform Texel Buffer::
-    A descriptor type that represents a buffer view, and supports
-    unfiltered, formatted, read-only access in a shader.
-
-Uniform Buffer::
-    A descriptor type that represents a buffer, and supports read-only
-    access in a shader.
-
-Units in the Last Place (ULP)::
-    A measure of floating-point error loosely defined as the smallest
-    representable step in a floating-point format near a given value.
-    For the precise definition see <<spirvenv-precision-operation, Precision
-    and Operation of SPIR-V instructions>> or Jean-Michel Muller, "`On the
-    definition of ulp(x)`", RR-5504, INRIA.
-    Other sources may also use the term "`unit of least precision`".
-
-Unnormalized::
-    A value that is interpreted according to its conventional
-    interpretation, and is not normalized.
-
-ifdef::VK_VERSION_1_1[]
-Unprotected Buffer::
-    A buffer to which unprotected device memory can: be bound.
-
-Unprotected Command Buffer::
-    A command buffer which can: be submitted to an unprotected device queue
-    or a protected-capable device queue.
-
-Unprotected Device Memory::
-    Device memory which can: be visible to the device and can: be visible to
-    the host.
-
-Unprotected Image::
-    An image to which unprotected device memory can: be bound.
-endif::VK_VERSION_1_1[]
-
-User-Defined Variable Interface::
-    A shader entry point's variables with code:Input or code:Output storage
-    class that are not built-in variables.
-
-Vertex Input Attribute::
-    A graphics pipeline resource that produces input values for the vertex
-    shader by reading data from a vertex input binding and converting it to
-    the attribute's format.
-
-ifdef::VK_EXT_transform_feedback[]
-Vertex Stream::
-    A vertex stream is where the last
-    <<pipeline-graphics-subsets-pre-rasterization,pre-rasterization shader
-    stages>> outputs vertex data, which then goes to the rasterizer, is
-    captured to a transform feedback buffer, or both.
-    Geometry shaders can: emit primitives to multiple independent vertex
-    streams.
-    Each vertex emitted by the geometry shader is directed at one of the
-    vertex streams.
-endif::VK_EXT_transform_feedback[]
-
-ifdef::VK_EXT_validation_cache[]
-Validation Cache::
-    An object that can: be used to collect and retrieve validation results
-    from the validation layers, and can: be populated with previously
-    retrieved results in order to accelerate the validation process.
-    Represented by a slink:VkValidationCacheEXT object.
-endif::VK_EXT_validation_cache[]
-
-Vertex Input Binding::
-    A graphics pipeline resource that is bound to a buffer and includes
-    state that affects addressing calculations within that buffer.
-
-Vertex Input Interface::
-    A vertex shader entry point's variables with code:Input storage class,
-    which receive values from vertex input attributes.
-
-ifdef::VK_VERSION_1_1,VK_KHR_multiview[]
-View Mask::
-    When multiview is enabled, a view mask is a property of a subpass
-    controlling which views the rendering commands are broadcast to.
-endif::VK_VERSION_1_1,VK_KHR_multiview[]
-
-View Volume::
-    A subspace in homogeneous coordinates, corresponding to post-projection
-    x and y values between -1 and +1, and z values between 0 and +1.
-
-Viewport Transformation::
-    A transformation from normalized device coordinates to framebuffer
-    coordinates, based on a viewport rectangle and depth range.
-
-Visibility Operation::
-    An operation that causes available values to become visible to specified
-    memory accesses.
-
-Visible::
-    A state of values written to memory that allows them to be accessed by a
-    set of operations.
-
-// To be added per issue 18:
-// Current State <<fundamentals-queueoperation>>
-// Barycentric Coordinates <<primsrast-polygons-basic>>
-// Internal Allocations <<memory-host-allocation-scope>>
-// Unavailable, Available <<queries-operation>> - NB: this clashes with available/visible in terms of memory
-// Signaled, Unsignaled <<synchronization-semaphores>> <<synchronization-fences>>
-// Interior Vertices <<tessellation-tessellator-spacing>>
-// Inner Vertices <<tessellation-triangle-tessellation>> <<tessellation-quad-tessellation>>
-// Isolines <<tessellation-isoline-tessellation>>
-// Binding Range <<sparsemem-memory-binding>>
-
-
-[[lexicon-common-abbreviations]]
-== Common Abbreviations
-
-The abbreviations and acronyms defined in this section are sometimes used in
-the Specification and the API where they are considered clear and
-commonplace.
-
-Src::
-    Source
-
-Dst::
-    Destination
-
-Min::
-    Minimum
-
-Max::
-    Maximum
-
-Rect::
-    Rectangle
-
-Info::
-    Information
-
-LOD::
-    Level of Detail
-
-ID::
-    Identifier
-
-UUID::
-    Universally Unique Identifier
-
-Op::
-    Operation
-
-R::
-    Red color component
-
-G::
-    Green color component
-
-B::
-    Blue color component
-
-A::
-    Alpha color component
-
-RTZ::
-    Round towards zero
-
-RTE::
-    Round to nearest even
-
-
-[[lexicon-prefixes]]
-== Prefixes
-
-Prefixes are used in the API to denote specific semantic meaning of Vulkan
-names, or as a label to avoid name clashes, and are explained here:
-
-VK/Vk/vk::
-    Vulkan namespace +
-    All types, commands, enumerants and defines in this specification are
-    prefixed with these two characters.
-
-PFN/pfn::
-    Function Pointer +
-    Denotes that a type is a function pointer, or that a variable is of a
-    pointer type.
-
-p::
-    Pointer +
-    Variable is a pointer.
-
-vkCmd::
-    Commands that record commands in command buffers +
-    These API commands do not result in immediate processing on the device.
-    Instead, they record the requested action in a command buffer for
-    execution when the command buffer is submitted to a queue.
-
-s::
-    Structure +
-    Used to denote the etext:VK_STRUCTURE_TYPE* member of each structure in
-    pname:sType
diff --git a/registry/vulkan/appendices/invariance.txt b/registry/vulkan/appendices/invariance.txt
deleted file mode 100644
index 647a5f9..0000000
--- a/registry/vulkan/appendices/invariance.txt
+++ /dev/null
@@ -1,241 +0,0 @@
-// Copyright 2015-2021 The Khronos Group, Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-[appendix]
-[[invariance]]
-= Invariance
-
-The Vulkan specification is not pixel exact.
-It therefore does not guarantee an exact match between images produced by
-different Vulkan implementations.
-However, the specification does specify exact matches, in some cases, for
-images produced by the same implementation.
-The purpose of this appendix is to identify and provide justification for
-those cases that require exact matches.
-
-== Repeatability
-
-The obvious and most fundamental case is repeated issuance of a series of
-Vulkan commands.
-For any given Vulkan and framebuffer state vector, and for any Vulkan
-command, the resulting Vulkan and framebuffer state must: be identical
-whenever the command is executed on that initial Vulkan and framebuffer
-state.
-This repeatability requirement does not apply when using shaders containing
-side effects (image and buffer variable stores and atomic operations),
-because these memory operations are not guaranteed to be processed in a
-defined order.
-
-ifdef::VK_AMD_rasterization_order[]
-The repeatability requirement does not apply for rendering done using a
-graphics pipeline that uses ename:VK_RASTERIZATION_ORDER_RELAXED_AMD.
-endif::VK_AMD_rasterization_order[]
-
-One purpose of repeatability is avoidance of visual artifacts when a
-double-buffered scene is redrawn.
-If rendering is not repeatable, swapping between two buffers rendered with
-the same command sequence may: result in visible changes in the image.
-Such false motion is distracting to the viewer.
-Another reason for repeatability is testability.
-
-Repeatability, while important, is a weak requirement.
-Given only repeatability as a requirement, two scenes rendered with one
-(small) polygon changed in position might differ at every pixel.
-Such a difference, while within the law of repeatability, is certainly not
-within its spirit.
-Additional invariance rules are desirable to ensure useful operation.
-
-
-== Multi-pass Algorithms
-
-Invariance is necessary for a whole set of useful multi-pass algorithms.
-Such algorithms render multiple times, each time with a different Vulkan
-mode vector, to eventually produce a result in the framebuffer.
-Examples of these algorithms include:
-
-  * "`Erasing`" a primitive from the framebuffer by redrawing it, either in
-    a different color or using the XOR logical operation.
-  * Using stencil operations to compute capping planes.
-
-
-== Invariance Rules
-
-For a given Vulkan device:
-
-*Rule 1* _For any given Vulkan and framebuffer state vector, and for any
-given Vulkan command, the resulting Vulkan and framebuffer state must: be
-identical each time the command is executed on that initial Vulkan and
-framebuffer state._
-
-*Rule 2* _Changes to the following state values have no side effects (the
-use of any other state value is not affected by the change):_
-
-*Required:*
-
-  * _Color and depth/stencil attachment contents_
-  * _Scissor parameters (other than enable)_
-  * _Write masks (color, depth, stencil)_
-  * _Clear values (color, depth, stencil)_
-
-*Strongly suggested:*
-
-  * _Stencil parameters (other than enable)_
-  * _Depth test parameters (other than enable)_
-  * _Blend parameters (other than enable)_
-  * _Logical operation parameters (other than enable)_
-
-*Corollary 1* _Fragment generation is invariant with respect to the state
-values listed in Rule 2._
-
-*Rule 3* _The arithmetic of each per-fragment operation is invariant except
-with respect to parameters that directly control it._
-
-*Corollary 2* _Images rendered into different color attachments of the same
-framebuffer, either simultaneously or separately using the same command
-sequence, are pixel identical._
-
-*Rule 4* _Identical pipelines will produce the same result when run multiple
-times with the same input.
-The wording "`Identical pipelines`" means slink:VkPipeline objects that have
-been created with identical SPIR-V binaries and identical state, which are
-then used by commands executed using the same Vulkan state vector.
-Invariance is relaxed for shaders with side effects, such as performing
-stores or atomics._
-
-*Rule 5* _All fragment shaders that either conditionally or unconditionally
-assign_ code:FragCoord.z _to_ code:FragDepth _are depth-invariant with
-respect to each other, for those fragments where the assignment to_
-code:FragDepth _actually is done._
-
-If a sequence of Vulkan commands specifies primitives to be rendered with
-shaders containing side effects (image and buffer variable stores and atomic
-operations), invariance rules are relaxed.
-In particular, rule 1, corollary 2, and rule 4 do not apply in the presence
-of shader side effects.
-
-The following weaker versions of rules 1 and 4 apply to Vulkan commands
-involving shader side effects:
-
-*Rule 6* _For any given Vulkan and framebuffer state vector, and for any
-given Vulkan command, the contents of any framebuffer state not directly or
-indirectly affected by results of shader image or buffer variable stores or
-atomic operations must: be identical each time the command is executed on
-that initial Vulkan and framebuffer state._
-
-*Rule 7* _Identical pipelines will produce the same result when run multiple
-times with the same input as long as:_
-
-  * _shader invocations do not use image atomic operations;_
-  * _no framebuffer memory is written to more than once by image stores,
-    unless all such stores write the same value; and_
-  * _no shader invocation, or other operation performed to process the
-    sequence of commands, reads memory written to by an image store._
-
-
-[NOTE]
-.Note
-====
-The OpenGL specification has the following invariance rule: Consider a
-primitive p' obtained by translating a primitive p through an offset (x, y)
-in window coordinates, where x and y are integers.
-As long as neither p' nor p is clipped, it must: be the case that each
-fragment f' produced from p' is identical to a corresponding fragment f from
-p except that the center of f' is offset by (x, y) from the center of f.
-
-This rule does not apply to Vulkan and is an intentional difference from
-OpenGL.
-====
-
-When any sequence of Vulkan commands triggers shader invocations that
-perform image stores or atomic operations, and subsequent Vulkan commands
-read the memory written by those shader invocations, these operations must:
-be explicitly synchronized.
-
-
-== Tessellation Invariance
-
-When using a pipeline containing tessellation evaluation shaders, the
-fixed-function tessellation primitive generator consumes the input patch
-specified by an application and emits a new set of primitives.
-The following invariance rules are intended to provide repeatability
-guarantees.
-Additionally, they are intended to allow an application with a carefully
-crafted tessellation evaluation shader to ensure that the sets of triangles
-generated for two adjacent patches have identical vertices along shared
-patch edges, avoiding "`cracks`" caused by minor differences in the
-positions of vertices along shared edges.
-
-*Rule 1* _When processing two patches with identical outer and inner
-tessellation levels, the tessellation primitive generator will emit an
-identical set of point, line, or triangle primitives as long as the pipeline
-used to process the patch primitives has tessellation evaluation shaders
-specifying the same tessellation mode, spacing, vertex order, and point mode
-decorations.
-Two sets of primitives are considered identical if and only if they contain
-the same number and type of primitives and the generated tessellation
-coordinates for the vertex numbered m of the primitive numbered n are
-identical for all values of m and n._
-
-*Rule 2* _The set of vertices generated along the outer edge of the
-subdivided primitive in triangle and quad tessellation, and the tessellation
-coordinates of each, depend only on the corresponding outer tessellation
-level and the spacing decorations in the tessellation shaders of the
-pipeline._
-
-*Rule 3* _The set of vertices generated when subdividing any outer primitive
-edge is always symmetric.
-For triangle tessellation, if the subdivision generates a vertex with
-tessellation coordinates of the form (0, x, 1-x), (x, 0, 1-x), or (x, 1-x,
-0), it will also generate a vertex with coordinates of exactly (0, 1-x, x),
-(1-x, 0, x), or (1-x, x, 0), respectively.
-For quad tessellation, if the subdivision generates a vertex with
-coordinates of (x, 0) or (0, x), it will also generate a vertex with
-coordinates of exactly (1-x, 0) or (0, 1-x), respectively.
-For isoline tessellation, if it generates vertices at (0, x) and (1, x)
-where x is not zero, it will also generate vertices at exactly (0, 1-x) and
-(1, 1-x), respectively._
-
-*Rule 4* _The set of vertices generated when subdividing outer edges in
-triangular and quad tessellation must: be independent of the specific edge
-subdivided, given identical outer tessellation levels and spacing.
-For example, if vertices at (x, 1 - x, 0) and (1-x, x, 0) are generated when
-subdividing the w = 0 edge in triangular tessellation, vertices must: be
-generated at (x, 0, 1-x) and (1-x, 0, x) when subdividing an otherwise
-identical v = 0 edge.
-For quad tessellation, if vertices at (x, 0) and (1-x, 0) are generated when
-subdividing the v = 0 edge, vertices must: be generated at (0, x) and (0,
-1-x) when subdividing an otherwise identical u = 0 edge._
-
-*Rule 5* _When processing two patches that are identical in all respects
-enumerated in rule 1 except for vertex order, the set of triangles generated
-for triangle and quad tessellation must: be identical except for vertex and
-triangle order.
-For each triangle n1 produced by processing the first patch, there must: be
-a triangle n2 produced when processing the second patch each of whose
-vertices has the same tessellation coordinates as one of the vertices in
-n1._
-
-*Rule 6* _When processing two patches that are identical in all respects
-enumerated in rule 1 other than matching outer tessellation levels and/or
-vertex order, the set of interior triangles generated for triangle and quad
-tessellation must: be identical in all respects except for vertex and
-triangle order.
-For each interior triangle n1 produced by processing the first patch, there
-must: be a triangle n2 produced when processing the second patch each of
-whose vertices has the same tessellation coordinates as one of the vertices
-in n1.
-A triangle produced by the tessellator is considered an interior triangle if
-none of its vertices lie on an outer edge of the subdivided primitive._
-
-*Rule 7* _For quad and triangle tessellation, the set of triangles
-connecting an inner and outer edge depends only on the inner and outer
-tessellation levels corresponding to that edge and the spacing decorations._
-
-*Rule 8* _The value of all defined components of_ code:TessCoord _will be in
-the range [0, 1].
-Additionally, for any defined component x of_ code:TessCoord, _the results
-of computing 1.0-x in a tessellation evaluation shader will be exact.
-If any floating-point values in the range [0, 1] fail to satisfy this
-property, such values must: not be used as tessellation coordinate
-components._
diff --git a/registry/vulkan/appendices/memorymodel.txt b/registry/vulkan/appendices/memorymodel.txt
deleted file mode 100644
index d67ab3d..0000000
--- a/registry/vulkan/appendices/memorymodel.txt
+++ /dev/null
@@ -1,1207 +0,0 @@
-// Copyright 2017-2021 The Khronos Group, Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-[appendix]
-[[memory-model]]
-= Memory Model
-
-
-[[memory-model-agent]]
-== Agent
-
-_Operation_ is a general term for any task that is executed on the system.
-
-[NOTE]
-.Note
-====
-An operation is by definition something that is executed.
-Thus if an instruction is skipped due to control flow, it does not
-constitute an operation.
-====
-
-Each operation is executed by a particular _agent_.
-Possible agents include each shader invocation, each host thread, and each
-fixed-function stage of the pipeline.
-
-
-[[memory-model-memory-location]]
-== Memory Location
-
-A _memory location_ identifies unique storage for 8 bits of data.
-Memory operations access a _set of memory locations_ consisting of one or
-more memory locations at a time, e.g. an operation accessing a 32-bit
-integer in memory would read/write a set of four memory locations.
-Memory operations that access whole aggregates may: access any padding bytes
-between elements or members, but no padding bytes at the end of the
-aggregate.
-Two sets of memory locations _overlap_ if the intersection of their sets of
-memory locations is non-empty.
-A memory operation must: not affect memory at a memory location not within
-its set of memory locations.
-
-Memory locations for buffers and images are explicitly allocated in
-slink:VkDeviceMemory objects, and are implicitly allocated for SPIR-V
-variables in each shader invocation.
-
-ifdef::VK_KHR_workgroup_memory_explicit_layout[]
-Variables with code:Workgroup storage class that point to a block-decorated
-type share a set of memory locations.
-endif::VK_KHR_workgroup_memory_explicit_layout[]
-
-
-[[memory-model-allocation]]
-== Allocation
-
-The values stored in newly allocated memory locations are determined by a
-SPIR-V variable's initializer, if present, or else are undefined:.
-At the time an allocation is created there have been no
-<<memory-model-memory-operation,memory operations>> to any of its memory
-locations.
-The initialization is not considered to be a memory operation.
-
-[NOTE]
-.Note
-====
-For tessellation control shader output variables, a consequence of
-initialization not being considered a memory operation is that some
-implementations may need to insert a barrier between the initialization of
-the output variables and any reads of those variables.
-====
-
-
-[[memory-model-memory-operation]]
-== Memory Operation
-
-For an operation A and memory location M:
-
-  * [[memory-model-access-read]] A _reads_ M if and only if the data stored
-    in M is an input to A.
-  * [[memory-model-access-write]] A _writes_ M if and only if the data
-    output from A is stored to M.
-  * [[memory-model-access-access]] A _accesses_ M if and only if it either
-    reads or writes (or both) M.
-
-[NOTE]
-.Note
-====
-A write whose value is the same as what was already in those memory
-locations is still considered to be a write and has all the same effects.
-====
-
-
-[[memory-model-references]]
-== Reference
-
-A _reference_ is an object that a particular agent can: use to access a set
-of memory locations.
-On the host, a reference is a host virtual address.
-On the device, a reference is:
-
-  * The descriptor that a variable is bound to, for variables in Image,
-    Uniform, or StorageBuffer storage classes.
-    If the variable is an array (or array of arrays, etc.) then each element
-    of the array may: be a unique reference.
-ifdef::VK_VERSION_1_2,VK_EXT_buffer_device_address,VK_KHR_buffer_device_address[]
-  * The address range for a buffer in code:PhysicalStorageBuffer storage
-    class, where the base of the address range is queried with
-ifndef::VK_VERSION_1_2,VK_KHR_buffer_device_address[]
-    flink:vkGetBufferDeviceAddressEXT
-endif::VK_VERSION_1_2,VK_KHR_buffer_device_address[]
-ifdef::VK_VERSION_1_2,VK_KHR_buffer_device_address[]
-    flink:vkGetBufferDeviceAddress
-endif::VK_VERSION_1_2,VK_KHR_buffer_device_address[]
-    and the length of the range is the size of the buffer.
-endif::VK_VERSION_1_2,VK_EXT_buffer_device_address,VK_KHR_buffer_device_address[]
-ifdef::VK_KHR_workgroup_memory_explicit_layout[]
-   * A single common reference for all variables with code:Workgroup storage
-     class that point to a block-decorated type.
-   * The variable itself for non-block-decorated type variables in
-     code:Workgroup storage class.
-endif::VK_KHR_workgroup_memory_explicit_layout[]
-   * The variable itself for variables in other storage classes.
-
-Two memory accesses through distinct references may: require availability
-and visibility operations as defined
-<<memory-model-location-ordered,below>>.
-
-
-[[memory-model-program-order]]
-== Program-Order
-
-A _dynamic instance_ of an instruction is defined in SPIR-V
-(https://www.khronos.org/registry/spir-v/specs/unified1/SPIRV.html#DynamicInstance)
-as a way of referring to a particular execution of a static instruction.
-Program-order is an ordering on dynamic instances of instructions executed
-by a single shader invocation:
-
-  * (Basic block): If instructions A and B are in the same basic block, and
-    A is listed in the module before B, then the n'th dynamic instance of A
-    is program-ordered before the n'th dynamic instance of B.
-  * (Branch): The dynamic instance of a branch or switch instruction is
-    program-ordered before the dynamic instance of the OpLabel instruction
-    to which it transfers control.
-  * (Call entry): The dynamic instance of an code:OpFunctionCall instruction
-    is program-ordered before the dynamic instances of the
-    code:OpFunctionParameter instructions and the body of the called
-    function.
-  * (Call exit): The dynamic instance of the instruction following an
-    code:OpFunctionCall instruction is program-ordered after the dynamic
-    instance of the return instruction executed by the called function.
-  * (Transitive Closure): If dynamic instance A of any instruction is
-    program-ordered before dynamic instance B of any instruction and B is
-    program-ordered before dynamic instance C of any instruction then A is
-    program-ordered before C.
-  * (Complete definition): No other dynamic instances are program-ordered.
-
-For instructions executed on the host, the source language defines the
-program-order relation (e.g. as "`sequenced-before`").
-
-
-ifdef::VK_KHR_ray_tracing_pipeline,VK_NV_ray_tracing[]
-[[shader-call-related]]
-== Shader Call Related
-
-Shader-call-related is an equivalence relation on invocations defined as the
-symmetric and transitive closure of:
-
-  * A is shader-call-related to B if A is created by an
-    <<ray-tracing-repack,invocation repack>> instruction executed by B.
-
-
-[[shader-call-order]]
-== Shader Call Order
-
-Shader-call-order is a partial order on dynamic instances of instructions
-executed by invocations that are shader-call-related:
-
-  * (Program order): If dynamic instance A is program-ordered before B, then
-    A is shader-call-ordered before B.
-  * (Shader call entry): If A is a dynamic instance of an
-    <<ray-tracing-repack,invocation repack>> instruction and B is a dynamic
-    instance executed by an invocation that is created by A, then A is
-    shader-call-ordered before B.
-  * (Shader call exit): If A is a dynamic instance of an
-    <<ray-tracing-repack,invocation repack>> instruction, B is the next
-    dynamic instance executed by the same invocation, and C is a dynamic
-    instance executed by an invocation that is created by A, then C is
-    shader-call-ordered before B.
-  * (Transitive closure): If A is shader-call-ordered-before B and B is
-    shader-call-ordered-before C, then A is shader-call-ordered-before C.
-  * (Complete definition): No other dynamic instances are
-    shader-call-ordered.
-endif::VK_KHR_ray_tracing_pipeline,VK_NV_ray_tracing[]
-
-
-[[memory-model-scope]]
-== Scope
-
-Atomic and barrier instructions include scopes which identify sets of shader
-invocations that must: obey the requested ordering and atomicity rules of
-the operation, as defined below.
-
-The various scopes are described in detail in <<shaders-scope, the Shaders
-chapter>>.
-
-
-[[memory-model-atomic-operation]]
-== Atomic Operation
-
-An _atomic operation_ on the device is any SPIR-V operation whose name
-begins with code:OpAtomic.
-An atomic operation on the host is any operation performed with an
-std::atomic typed object.
-
-Each atomic operation has a memory <<memory-model-scope,scope>> and a
-<<memory-model-memory-semantics,semantics>>.
-Informally, the scope determines which other agents it is atomic with
-respect to, and the <<memory-model-memory-semantics,semantics>> constrains
-its ordering against other memory accesses.
-Device atomic operations have explicit scopes and semantics.
-Each host atomic operation implicitly uses the code:CrossDevice scope, and
-uses a memory semantics equivalent to a C++ std::memory_order value of
-relaxed, acquire, release, acq_rel, or seq_cst.
-
-Two atomic operations A and B are _potentially-mutually-ordered_ if and only
-if all of the following are true:
-
-  * They access the same set of memory locations.
-  * They use the same reference.
-  * A is in the instance of B's memory scope.
-  * B is in the instance of A's memory scope.
-  * A and B are not the same operation (irreflexive).
-
-Two atomic operations A and B are _mutually-ordered_ if and only if they are
-potentially-mutually-ordered and any of the following are true:
-
-  * A and B are both device operations.
-  * A and B are both host operations.
-  * A is a device operation, B is a host operation, and the implementation
-    supports concurrent host- and device-atomics.
-
-[NOTE]
-.Note
-====
-If two atomic operations are not mutually-ordered, and if their sets of
-memory locations overlap, then each must: be synchronized against the other
-as if they were non-atomic operations.
-====
-
-
-[[memory-model-scoped-modification-order]]
-== Scoped Modification Order
-
-For a given atomic write A, all atomic writes that are mutually-ordered with
-A occur in an order known as A's _scoped modification order_.
-A's scoped modification order relates no other operations.
-
-[NOTE]
-.Note
-====
-Invocations outside the instance of A's memory scope may: observe the values
-at A's set of memory locations becoming visible to it in an order that
-disagrees with the scoped modification order.
-====
-
-[NOTE]
-.Note
-====
-It is valid to have non-atomic operations or atomics in a different scope
-instance to the same set of memory locations, as long as they are
-synchronized against each other as if they were non-atomic (if they are not,
-it is treated as a <<memory-model-access-data-race,data race>>).
-That means this definition of A's scoped modification order could include
-atomic operations that occur much later, after intervening non-atomics.
-That is a bit non-intuitive, but it helps to keep this definition simple and
-non-circular.
-====
-
-
-[[memory-model-memory-semantics]]
-== Memory Semantics
-
-Non-atomic memory operations, by default, may: be observed by one agent in a
-different order than they were written by another agent.
-
-Atomics and some synchronization operations include _memory semantics_,
-which are flags that constrain the order in which other memory accesses
-(including non-atomic memory accesses and
-<<memory-model-availability-visibility,availability and visibility
-operations>>) performed by the same agent can: be observed by other agents,
-or can: observe accesses by other agents.
-
-Device instructions that include semantics are code:OpAtomic*,
-code:OpControlBarrier, code:OpMemoryBarrier, and code:OpMemoryNamedBarrier.
-Host instructions that include semantics are some std::atomic methods and
-memory fences.
-
-SPIR-V supports the following memory semantics:
-
-  * Relaxed: No constraints on order of other memory accesses.
-  * Acquire: A memory read with this semantic performs an _acquire
-    operation_.
-    A memory barrier with this semantic is an _acquire barrier_.
-  * Release: A memory write with this semantic performs a _release
-    operation_.
-    A memory barrier with this semantic is a _release barrier_.
-  * AcquireRelease: A memory read-modify-write operation with this semantic
-    performs both an acquire operation and a release operation, and inherits
-    the limitations on ordering from both of those operations.
-    A memory barrier with this semantic is both a release and acquire
-    barrier.
-
-[NOTE]
-.Note
-====
-SPIR-V does not support "`consume`" semantics on the device.
-====
-
-The memory semantics operand also includes _storage class semantics_ which
-indicate which storage classes are constrained by the synchronization.
-SPIR-V storage class semantics include:
-
-  * UniformMemory
-  * WorkgroupMemory
-  * ImageMemory
-  * OutputMemory
-
-Each SPIR-V memory operation accesses a single storage class.
-Semantics in synchronization operations can include a combination of storage
-classes.
-
-The UniformMemory storage class semantic applies to accesses to memory in
-the
-ifdef::VK_VERSION_1_2,VK_EXT_buffer_device_address,VK_KHR_buffer_device_address[]
-PhysicalStorageBuffer,
-endif::VK_VERSION_1_2,VK_EXT_buffer_device_address,VK_KHR_buffer_device_address[]
-ifdef::VK_KHR_ray_tracing_pipeline,VK_NV_ray_tracing[]
-code:ShaderRecordBufferKHR,
-endif::VK_KHR_ray_tracing_pipeline,VK_NV_ray_tracing[]
-Uniform and StorageBuffer storage classes.
-The WorkgroupMemory storage class semantic applies to accesses to memory in
-the Workgroup storage class.
-The ImageMemory storage class semantic applies to accesses to memory in the
-Image storage class.
-The OutputMemory storage class semantic applies to accesses to memory in the
-Output storage class.
-
-[NOTE]
-.Note
-====
-Informally, these constraints limit how memory operations can be reordered,
-and these limits apply not only to the order of accesses as performed in the
-agent that executes the instruction, but also to the order the effects of
-writes become visible to all other agents within the same instance of the
-instruction's memory scope.
-====
-
-[NOTE]
-.Note
-====
-Release and acquire operations in different threads can: act as
-synchronization operations, to guarantee that writes that happened before
-the release are visible after the acquire.
-(This is not a formal definition, just an Informative forward reference.)
-====
-
-[NOTE]
-.Note
-====
-The OutputMemory storage class semantic is only useful in tessellation
-control shaders, which is the only execution model where output variables
-are shared between invocations.
-====
-
-The memory semantics operand can: also include availability and visibility
-flags, which apply availability and visibility operations as described in
-<<memory-model-availability-visibility,availability and visibility>>.
-The availability/visibility flags are:
-
-  * MakeAvailable: Semantics must: be Release or AcquireRelease.
-    Performs an availability operation before the release operation or
-    barrier.
-  * MakeVisible: Semantics must: be Acquire or AcquireRelease.
-    Performs a visibility operation after the acquire operation or barrier.
-
-The specifics of these operations are defined in
-<<memory-model-availability-visibility-semantics,Availability and Visibility
-Semantics>>.
-
-Host atomic operations may: support a different list of memory semantics and
-synchronization operations, depending on the host architecture and source
-language.
-
-
-[[memory-model-release-sequence]]
-== Release Sequence
-
-After an atomic operation A performs a release operation on a set of memory
-locations M, the _release sequence headed by A_ is the longest continuous
-subsequence of A's scoped modification order that consists of:
-
-  * the atomic operation A as its first element
-  * atomic read-modify-write operations on M by any agent
-
-[NOTE]
-.Note
-====
-The atomics in the last bullet must: be mutually-ordered with A by virtue of
-being in A's scoped modification order.
-====
-
-[NOTE]
-.Note
-====
-This intentionally omits "`atomic writes to M performed by the same agent
-that performed A`", which is present in the corresponding C++ definition.
-====
-
-
-[[memory-model-synchronizes-with]]
-== Synchronizes-With
-
-_Synchronizes-with_ is a relation between operations, where each operation
-is either an atomic operation or a memory barrier (aka fence on the host).
-
-If A and B are atomic operations, then A synchronizes-with B if and only if
-all of the following are true:
-
-  * A performs a release operation
-  * B performs an acquire operation
-  * A and B are mutually-ordered
-  * B reads a value written by A or by an operation in the release sequence
-    headed by A
-
-code:OpControlBarrier, code:OpMemoryBarrier, and code:OpMemoryNamedBarrier
-are _memory barrier_ instructions in SPIR-V.
-
-If A is a release barrier and B is an atomic operation that performs an
-acquire operation, then A synchronizes-with B if and only if all of the
-following are true:
-
-  * there exists an atomic write X (with any memory semantics)
-  * A is program-ordered before X
-  * X and B are mutually-ordered
-  * B reads a value written by X or by an operation in the release sequence
-    headed by X
-  ** If X is relaxed, it is still considered to head a hypothetical release
-     sequence for this rule
-  * A and B are in the instance of each other's memory scopes
-  * X's storage class is in A's semantics.
-
-If A is an atomic operation that performs a release operation and B is an
-acquire barrier, then A synchronizes-with B if and only if all of the
-following are true:
-
-  * there exists an atomic read X (with any memory semantics)
-  * X is program-ordered before B
-  * X and A are mutually-ordered
-  * X reads a value written by A or by an operation in the release sequence
-    headed by A
-  * A and B are in the instance of each other's memory scopes
-  * X's storage class is in B's semantics.
-
-If A is a release barrier and B is an acquire barrier, then A
-synchronizes-with B if all of the following are true:
-
-  * there exists an atomic write X (with any memory semantics)
-  * A is program-ordered before X
-  * there exists an atomic read Y (with any memory semantics)
-  * Y is program-ordered before B
-  * X and Y are mutually-ordered
-  * Y reads the value written by X or by an operation in the release
-    sequence headed by X
-  ** If X is relaxed, it is still considered to head a hypothetical release
-     sequence for this rule
-  * A and B are in the instance of each other's memory scopes
-  * X's and Y's storage class is in A's and B's semantics.
-  ** NOTE: X and Y must have the same storage class, because they are
-     mutually ordered.
-
-If A is a release barrier, B is an acquire barrier, and C is a control
-barrier (where A can: equal C, and B can: equal C), then A synchronizes-with
-B if all of the following are true:
-
-  * A is program-ordered before (or equals) C
-  * C is program-ordered before (or equals) B
-  * A and B are in the instance of each other's memory scopes
-  * A and B are in the instance of C's execution scope
-
-[NOTE]
-.Note
-====
-This is similar to the barrier-barrier synchronization above, but with a
-control barrier filling the role of the relaxed atomics.
-====
-
-ifdef::VK_EXT_fragment_shader_interlock[]
-
-Let F be an ordering of fragment shader invocations, such that invocation
-F~1~ is ordered before invocation F~2~ if and only if F~1~ and F~2~ overlap
-as described in <<shaders-scope-fragment-interlock,Fragment Shader
-Interlock>> and F~1~ executes the interlocked code before F~2~.
-
-If A is an code:OpEndInvocationInterlockEXT instruction and B is an
-code:OpBeginInvocationInterlockEXT instruction, then A synchronizes-with B
-if the agent that executes A is ordered before the agent that executes B in
-F. A and B are both considered to have code:FragmentInterlock memory scope
-and semantics of UniformMemory and ImageMemory, and A is considered to have
-Release semantics and B is considered to have Acquire semantics.
-
-[NOTE]
-.Note
-====
-code:OpBeginInvocationInterlockEXT and code:OpBeginInvocationInterlockEXT do
-not perform implicit availability or visibility operations.
-Usually, shaders using fragment shader interlock will declare the relevant
-resources as `coherent` to get implicit
-<<memory-model-instruction-av-vis,per-instruction availability and
-visibility operations>>.
-====
-
-endif::VK_EXT_fragment_shader_interlock[]
-
-ifdef::VK_KHR_ray_tracing_pipeline,VK_NV_ray_tracing[]
-If A is a release barrier and B is an acquire barrier, then A
-synchronizes-with B if all of the following are true:
-
-  * A is shader-call-ordered-before B
-  * A and B are in the instance of each other's memory scopes
-
-endif::VK_KHR_ray_tracing_pipeline,VK_NV_ray_tracing[]
-
-No other release and acquire barriers synchronize-with each other.
-
-
-[[memory-model-system-synchronizes-with]]
-== System-Synchronizes-With
-
-_System-synchronizes-with_ is a relation between arbitrary operations on the
-device or host.
-Certain operations system-synchronize-with each other, which informally
-means the first operation occurs before the second and that the
-synchronization is performed without using application-visible memory
-accesses.
-
-If there is an <<synchronization-dependencies-execution,execution
-dependency>> between two operations A and B, then the operation in the first
-synchronization scope system-synchronizes-with the operation in the second
-synchronization scope.
-
-[NOTE]
-.Note
-====
-This covers all Vulkan synchronization primitives, including device
-operations executing before a synchronization primitive is signaled, wait
-operations happening before subsequent device operations, signal operations
-happening before host operations that wait on them, and host operations
-happening before flink:vkQueueSubmit.
-The list is spread throughout the synchronization chapter, and is not
-repeated here.
-====
-
-System-synchronizes-with implicitly includes all storage class semantics and
-has code:CrossDevice scope.
-
-If A system-synchronizes-with B, we also say A is
-_system-synchronized-before_ B and B is _system-synchronized-after_ A.
-
-
-[[memory-model-non-private]]
-== Private vs. Non-Private
-
-By default, non-atomic memory operations are treated as _private_, meaning
-such a memory operation is not intended to be used for communication with
-other agents.
-Memory operations with the NonPrivatePointer/NonPrivateTexel bit set are
-treated as _non-private_, and are intended to be used for communication with
-other agents.
-
-More precisely, for private memory operations to be
-<<memory-model-location-ordered,Location-Ordered>> between distinct agents
-requires using system-synchronizes-with rather than shader-based
-synchronization.
-Non-private memory operations still obey program-order.
-
-Atomic operations are always considered non-private.
-
-
-[[memory-model-inter-thread-happens-before]]
-== Inter-Thread-Happens-Before
-
-Let SC be a non-empty set of storage class semantics.
-Then (using template syntax) operation A _inter-thread-happens-before_<SC>
-operation B if and only if any of the following is true:
-
-  * A system-synchronizes-with B
-  * A synchronizes-with B, and both A and B have all of SC in their
-    semantics
-  * A is an operation on memory in a storage class in SC or that has all of
-    SC in its semantics, B is a release barrier or release atomic with all
-    of SC in its semantics, and A is program-ordered before B
-  * A is an acquire barrier or acquire atomic with all of SC in its
-    semantics, B is an operation on memory in a storage class in SC or that
-    has all of SC in its semantics, and A is program-ordered before B
-  * A and B are both host operations and A inter-thread-happens-before B as
-    defined in the host language specification
-  * A inter-thread-happens-before<SC> some X and X
-    inter-thread-happens-before<SC> B
-
-
-[[memory-model-happens-before]]
-== Happens-Before
-
-Operation A _happens-before_ operation B if and only if any of the following
-is true:
-
-  * A is program-ordered before B
-  * A inter-thread-happens-before<SC> B for some set of storage classes SC
-
-_Happens-after_ is defined similarly.
-
-[NOTE]
-.Note
-====
-Unlike C++, happens-before is not always sufficient for a write to be
-visible to a read.
-Additional <<memory-model-availability-visibility,availability and
-visibility>> operations may: be required for writes to be
-<<memory-model-visible-to,visible-to>> other memory accesses.
-====
-
-[NOTE]
-.Note
-====
-Happens-before is not transitive, but each of program-order and
-inter-thread-happens-before<SC> are transitive.
-These can be thought of as covering the "`single-threaded`" case and the
-"`multi-threaded`" case, and it is not necessary (and not valid) to form
-chains between the two.
-====
-
-
-[[memory-model-availability-visibility]]
-== Availability and Visibility
-
-_Availability_ and _visibility_ are states of a write operation, which
-(informally) track how far the write has permeated the system, i.e. which
-agents and references are able to observe the write.
-Availability state is per _memory domain_.
-Visibility state is per (agent,reference) pair.
-Availability and visibility states are per-memory location for each write.
-
-Memory domains are named according to the agents whose memory accesses use
-the domain.
-Domains used by shader invocations are organized hierarchically into
-multiple smaller memory domains which correspond to the different
-<<shaders-scope, scopes>>.
-Each memory domain is considered the _dual_ of a scope, and vice versa.
-The memory domains defined in Vulkan include:
-
-  * _host_ - accessible by host agents
-  * _device_ - accessible by all device agents for a particular device
-  * _shader_ - accessible by shader agents for a particular device,
-    corresponding to the code:Device scope
-  * _queue family instance_ - accessible by shader agents in a single queue
-    family, corresponding to the code:QueueFamily scope.
-ifdef::VK_EXT_fragment_shader_interlock[]
-  * _fragment interlock instance_ - accessible by fragment shader agents
-    that <<shaders-scope-fragment-interlock,overlap>>, corresponding to the
-    code:FragmentInterlock scope.
-endif::VK_EXT_fragment_shader_interlock[]
-ifdef::VK_KHR_ray_tracing_pipeline[]
-  * _shader call instance_ - accessible by shader agents that are
-    <<shader-call-related,shader-call-related>>, corresponding to the
-    code:ShaderCallKHR scope.
-endif::VK_KHR_ray_tracing_pipeline[]
-  * _workgroup instance_ - accessible by shader agents in the same
-    workgroup, corresponding to the code:Workgroup scope.
-  * _subgroup instance_ - accessible by shader agents in the same subgroup,
-    corresponding to the code:Subgroup scope.
-
-The memory domains are nested in the order listed above,
-ifdef::VK_KHR_ray_tracing_pipeline[]
-except for shader call instance domain,
-endif::VK_KHR_ray_tracing_pipeline[]
-with memory domains later in the list nested in the domains earlier in the
-list.
-ifdef::VK_KHR_ray_tracing_pipeline[]
-The shader call instance domain is at an implementation-dependent location
-in the list, and is nested according to that location.
-The shader call instance domain is not broader than the queue family
-instance domain.
-endif::VK_KHR_ray_tracing_pipeline[]
-
-[NOTE]
-.Note
-====
-Memory domains do not correspond to storage classes or device-local and
-host-local slink:VkDeviceMemory allocations, rather they indicate whether a
-write can be made visible only to agents in the same subgroup, same
-workgroup,
-ifdef::VK_EXT_fragment_shader_interlock[]
-overlapping fragment shader invocation,
-endif::VK_EXT_fragment_shader_interlock[]
-ifdef::VK_KHR_ray_tracing_pipeline[]
-shader-call-related ray tracing invocation,
-endif::VK_KHR_ray_tracing_pipeline[]
-in any shader invocation, or anywhere on the device, or host.
-The shader, queue family instance,
-ifdef::VK_EXT_fragment_shader_interlock[]
-fragment interlock instance,
-endif::VK_EXT_fragment_shader_interlock[]
-ifdef::VK_KHR_ray_tracing_pipeline[]
-shader call instance,
-endif::VK_KHR_ray_tracing_pipeline[]
-workgroup instance, and subgroup instance domains are only used for
-shader-based availability/visibility operatons, in other cases writes can be
-made available from/visible to the shader via the device domain.
-====
-
-_Availability operations_, _visibility operations_, and _memory domain
-operations_ alter the state of the write operations that happen-before them,
-and which are included in their _source scope_ to be available or visible to
-their _destination scope_.
-
-  * For an availability operation, the source scope is a set of
-    (agent,reference,memory location) tuples, and the destination scope is a
-    set of memory domains.
-  * For a memory domain operation, the source scope is a memory domain and
-    the destination scope is a memory domain.
-  * For a visibility operation, the source scope is a set of memory domains
-    and the destination scope is a set of (agent,reference,memory location)
-    tuples.
-
-How the scopes are determined depends on the specific operation.
-Availability and memory domain operations expand the set of memory domains
-to which the write is available.
-Visibility operations expand the set of (agent,reference,memory location)
-tuples to which the write is visible.
-
-Recall that availability and visibility states are per-memory location, and
-let W be a write operation to one or more locations performed by agent A via
-reference R. Let L be one of the locations written.
-(W,L) (the write W to L), is initially not available to any memory domain
-and only visible to (A,R,L).
-An availability operation AV that happens-after W and that includes (A,R,L)
-in its source scope makes (W,L) _available_ to the memory domains in its
-destination scope.
-
-A memory domain operation DOM that happens-after AV and for which (W,L) is
-available in the source scope makes (W,L) available in the destination
-memory domain.
-
-A visibility operation VIS that happens-after AV (or DOM) and for which
-(W,L) is available in any domain in the source scope makes (W,L) _visible_
-to all (agent,reference,L) tuples included in its destination scope.
-
-If write W~2~ happens-after W, and their sets of memory locations overlap,
-then W will not be available/visible to all agents/references for those
-memory locations that overlap (and future AV/DOM/VIS ops cannot revive W's
-write to those locations).
-
-Availability, memory domain, and visibility operations are treated like
-other non-atomic memory accesses for the purpose of
-<<memory-model-memory-semantics,memory semantics>>, meaning they can be
-ordered by release-acquire sequences or memory barriers.
-
-An _availability chain_ is a sequence of availability operations to
-increasingly broad memory domains, where element N+1 of the chain is
-performed in the dual scope instance of the destination memory domain of
-element N and element N happens-before element N+1.
-An example is an availability operation with destination scope of the
-workgroup instance domain that happens-before an availability operation to
-the shader domain performed by an invocation in the same workgroup.
-An availability chain AVC that happens-after W and that includes (A,R,L) in
-the source scope makes (W,L) _available_ to the memory domains in its final
-destination scope.
-An availability chain with a single element is just the availability
-operation.
-
-Similarly, a _visibility chain_ is a sequence of visibility operations from
-increasingly narrow memory domains, where element N of the chain is
-performed in the dual scope instance of the source memory domain of element
-N+1 and element N happens-before element N+1.
-An example is a visibility operation with source scope of the shader domain
-that happens-before a visibility operation with source scope of the
-workgroup instance domain performed by an invocation in the same workgroup.
-A visibility chain VISC that happens-after AVC (or DOM) and for which (W,L)
-is available in any domain in the source scope makes (W,L) _visible_ to all
-(agent,reference,L) tuples included in its final destination scope.
-A visibility chain with a single element is just the visibility operation.
-
-
-[[memory-model-vulkan-availability-visibility]]
-== Availability, Visibility, and Domain Operations
-
-The following operations generate availability, visibility, and domain
-operations.
-When multiple availability/visibility/domain operations are described, they
-are system-synchronized-with each other in the order listed.
-
-An operation that performs a <<synchronization-dependencies-memory,memory
-dependency>> generates:
-
-  * If the source access mask includes ename:VK_ACCESS_HOST_WRITE_BIT, then
-    the dependency includes a memory domain operation from host domain to
-    device domain.
-  * An availability operation with source scope of all writes in the first
-    <<synchronization-dependencies-access-scopes,access scope>> of the
-    dependency and a destination scope of the device domain.
-  * A visibility operation with source scope of the device domain and
-    destination scope of the second access scope of the dependency.
-  * If the destination access mask includes ename:VK_ACCESS_HOST_READ_BIT or
-    ename:VK_ACCESS_HOST_WRITE_BIT, then the dependency includes a memory
-    domain operation from device domain to host domain.
-
-flink:vkFlushMappedMemoryRanges performs an availability operation, with a
-source scope of (agents,references) = (all host threads, all mapped memory
-ranges passed to the command), and destination scope of the host domain.
-
-flink:vkInvalidateMappedMemoryRanges performs a visibility operation, with a
-source scope of the host domain and a destination scope of
-(agents,references) = (all host threads, all mapped memory ranges passed to
-the command).
-
-flink:vkQueueSubmit performs a memory domain operation from host to device,
-and a visibility operation with source scope of the device domain and
-destination scope of all agents and references on the device.
-
-
-[[memory-model-availability-visibility-semantics]]
-== Availability and Visibility Semantics
-
-A memory barrier or atomic operation via agent A that includes MakeAvailable
-in its semantics performs an availability operation whose source scope
-includes agent A and all references in the storage classes in that
-instruction's storage class semantics, and all memory locations, and whose
-destination scope is a set of memory domains selected as specified below.
-The implicit availability operation is program-ordered between the barrier
-or atomic and all other operations program-ordered before the barrier or
-atomic.
-
-A memory barrier or atomic operation via agent A that includes MakeVisible
-in its semantics performs a visibility operation whose source scope is a set
-of memory domains selected as specified below, and whose destination scope
-includes agent A and all references in the storage classes in that
-instruction's storage class semantics, and all memory locations.
-The implicit visibility operation is program-ordered between the barrier or
-atomic and all other operations program-ordered after the barrier or atomic.
-
-The memory domains are selected based on the memory scope of the instruction
-as follows:
-
-  * code:Device scope uses the shader domain
-  * code:QueueFamily scope uses the queue family instance domain
-ifdef::VK_EXT_fragment_shader_interlock[]
-  * code:FragmentInterlock scope uses the fragment interlock instance domain
-endif::VK_EXT_fragment_shader_interlock[]
-ifdef::VK_KHR_ray_tracing_pipeline[]
-  * code:ShaderCallKHR scope uses the shader call instance domain
-endif::VK_KHR_ray_tracing_pipeline[]
-  * code:Workgroup scope uses the workgroup instance domain
-  * code:Subgroup uses the subgroup instance domain
-  * code:Invocation perform no availability/visibility operations.
-
-When an availability operation performed by an agent A includes a memory
-domain D in its destination scope, where D corresponds to scope instance S,
-it also includes the memory domains that correspond to each smaller scope
-instance S' that is a subset of S and that includes A. Similarly for
-visibility operations.
-
-
-[[memory-model-instruction-av-vis]]
-== Per-Instruction Availability and Visibility Semantics
-
-A memory write instruction that includes MakePointerAvailable, or an image
-write instruction that includes MakeTexelAvailable, performs an availability
-operation whose source scope includes the agent and reference used to
-perform the write and the memory locations written by the instruction, and
-whose destination scope is a set of memory domains selected by the Scope
-operand specified in <<memory-model-availability-visibility-semantics,
-Availability and Visibility Semantics>>.
-The implicit availability operation is program-ordered between the write and
-all other operations program-ordered after the write.
-
-A memory read instruction that includes MakePointerVisible, or an image read
-instruction that includes MakeTexelVisible, performs a visibility operation
-whose source scope is a set of memory domains selected by the Scope operand
-as specified in <<memory-model-availability-visibility-semantics,
-Availability and Visibility Semantics>>, and whose destination scope
-includes the agent and reference used to perform the read and the memory
-locations read by the instruction.
-The implicit visibility operation is program-ordered between read and all
-other operations program-ordered before the read.
-
-[NOTE]
-.Note
-====
-Although reads with per-instruction visibility only perform visibility ops
-from the shader or
-ifdef::VK_EXT_fragment_shader_interlock[]
-fragment interlock instance or
-endif::VK_EXT_fragment_shader_interlock[]
-ifdef::VK_KHR_ray_tracing_pipeline[]
-shader call instance or
-endif::VK_KHR_ray_tracing_pipeline[]
-workgroup instance or subgroup instance domain, they will also see writes
-that were made visible via the device domain, i.e. those writes previously
-performed by non-shader agents and made visible via API commands.
-====
-
-[NOTE]
-.Note
-====
-It is expected that all invocations in a subgroup execute on the same
-processor with the same path to memory, and thus availability and visibility
-operations with subgroup scope can be expected to be "`free`".
-====
-
-
-[[memory-model-location-ordered]]
-== Location-Ordered
-
-Let X and Y be memory accesses to overlapping sets of memory locations M,
-where X != Y. Let (A~X~,R~X~) be the agent and reference used for X, and
-(A~Y~,R~Y~) be the agent and reference used for Y. For now, let "`->`"
-denote happens-before and "`->^rcpo^`" denote the reflexive closure of
-program-ordered before.
-
-If D~1~ and D~2~ are different memory domains, then let DOM(D~1~,D~2~) be a
-memory domain operation from D~1~ to D~2~.
-Otherwise, let DOM(D,D) be a placeholder such that X->DOM(D,D)->Y if and
-only if X->Y.
-
-X is _location-ordered_ before Y for a location L in M if and only if any of
-the following is true:
-
-  * A~X~ == A~Y~ and R~X~ == R~Y~ and X->Y
-  ** NOTE: this case means no availability/visibility ops are required when
-     it is the same (agent,reference).
-
-  * X is a read, both X and Y are non-private, and X->Y
-  * X is a read, and X (transitively) system-synchronizes with Y
-
-  * If R~X~ == R~Y~ and A~X~ and A~Y~ access a common memory domain D (e.g.
-    are in the same workgroup instance if D is the workgroup instance
-    domain), and both X and Y are non-private:
-  ** X is a write, Y is a write, AVC(A~X~,R~X~,D,L) is an availability chain
-     making (X,L) available to domain D, and X->^rcpo^AVC(A~X~,R~X~,D,L)->Y
-  ** X is a write, Y is a read, AVC(A~X~,R~X~,D,L) is an availability chain
-     making (X,L) available to domain D, VISC(A~Y~,R~Y~,D,L) is a visibility
-     chain making writes to L available in domain D visible to Y, and
-     X->^rcpo^AVC(A~X~,R~X~,D,L)->VISC(A~Y~,R~Y~,D,L)->^rcpo^Y
-  ** If
-     slink:VkPhysicalDeviceVulkanMemoryModelFeatures::pname:vulkanMemoryModelAvailabilityVisibilityChains
-     is ename:VK_FALSE, then AVC and VISC must: each only have a single
-     element in the chain, in each sub-bullet above.
-
-  * Let D~X~ and D~Y~ each be either the device domain or the host domain,
-    depending on whether A~X~ and A~Y~ execute on the device or host:
-  ** X is a write and Y is a write, and
-     X->AV(A~X~,R~X~,D~X~,L)->DOM(D~X~,D~Y~)->Y
-  ** X is a write and Y is a read, and
-     X->AV(A~X~,R~X~,D~X~,L)->DOM(D~X~,D~Y~)->VIS(A~Y~,R~Y~,D~Y~,L)->Y
-
-[NOTE]
-.Note
-====
-The final bullet (synchronization through device/host domain) requires
-API-level synchronization operations, since the device/host domains are not
-accessible via shader instructions.
-And "`device domain`" is not to be confused with "`device scope`", which
-synchronizes through the "`shader domain`".
-====
-
-
-[[memory-model-access-data-race]]
-== Data Race
-
-Let X and Y be operations that access overlapping sets of memory locations
-M, where X != Y, and at least one of X and Y is a write, and X and Y are not
-mutually-ordered atomic operations.
-If there does not exist a location-ordered relation between X and Y for each
-location in M, then there is a _data race_.
-
-Applications must: ensure that no data races occur during the execution of
-their application.
-
-[NOTE]
-.Note
-====
-Data races can only occur due to instructions that are actually executed.
-For example, an instruction skipped due to control flow must not contribute
-to a data race.
-====
-
-
-[[memory-model-visible-to]]
-== Visible-To
-
-Let X be a write and Y be a read whose sets of memory locations overlap, and
-let M be the set of memory locations that overlap.
-Let M~2~ be a non-empty subset of M. Then X is _visible-to_ Y for memory
-locations M~2~ if and only if all of the following are true:
-
-  * X is location-ordered before Y for each location L in M~2~.
-  * There does not exist another write Z to any location L in M~2~ such that
-    X is location-ordered before Z for location L and Z is location-ordered
-    before Y for location L.
-
-If X is visible-to Y, then Y reads the value written by X for locations
-M~2~.
-
-[NOTE]
-.Note
-====
-It is possible for there to be a write between X and Y that overwrites a
-subset of the memory locations, but the remaining memory locations (M~2~)
-will still be visible-to Y.
-====
-
-
-[[memory-model-acyclicity]]
-== Acyclicity
-
-_Reads-from_ is a relation between operations, where the first operation is
-a write, the second operation is a read, and the second operation reads the
-value written by the first operation.
-_From-reads_ is a relation between operations, where the first operation is
-a read, the second operation is a write, and the first operation reads a
-value written earlier than the second operation in the second operation's
-scoped modification order (or the first operation reads from the initial
-value, and the second operation is any write to the same locations).
-
-Then the implementation must: guarantee that no cycles exist in the union of
-the following relations:
-
-  * location-ordered
-  * scoped modification order (over all atomic writes)
-  * reads-from
-  * from-reads
-
-[NOTE]
-.Note
-====
-This is a "`consistency`" axiom, which informally guarantees that sequences
-of operations cannot violate causality.
-====
-
-
-[[memory-model-scoped-modification-order-coherence]]
-=== Scoped Modification Order Coherence
-
-Let A and B be mutually-ordered atomic operations, where A is
-location-ordered before B. Then the following rules are a consequence of
-acyclicity:
-
-  * If A and B are both reads and A does not read the initial value, then
-    the write that A takes its value from must: be earlier in its own scoped
-    modification order than (or the same as) the write that B takes its
-    value from (no cycles between location-order, reads-from, and
-    from-reads).
-  * If A is a read and B is a write and A does not read the initial value,
-    then A must: take its value from a write earlier than B in B's scoped
-    modification order (no cycles between location-order, scope modification
-    order, and reads-from).
-  * If A is a write and B is a read, then B must: take its value from A or a
-    write later than A in A's scoped modification order (no cycles between
-    location-order, scoped modification order, and from-reads).
-  * If A and B are both writes, then A must: be earlier than B in A's scoped
-    modification order (no cycles between location-order and scoped
-    modification order).
-  * If A is a write and B is a read-modify-write and B reads the value
-    written by A, then B comes immediately after A in A's scoped
-    modification order (no cycles between scoped modification order and
-    from-reads).
-
-
-[[memory-model-shader-io]]
-== Shader I/O
-
-If a shader invocation A in a shader stage other than code:Vertex performs a
-memory read operation X from an object in storage class
-ifdef::VK_KHR_ray_tracing_pipeline,VK_NV_ray_tracing[]
-code:CallableDataKHR, code:IncomingCallableDataKHR, code:RayPayloadKHR,
-code:HitAttributeKHR, code:IncomingRayPayloadKHR, or
-endif::VK_KHR_ray_tracing_pipeline,VK_NV_ray_tracing[]
-code:Input, then X is system-synchronized-after all writes to the
-corresponding
-ifdef::VK_KHR_ray_tracing_pipeline,VK_NV_ray_tracing[]
-code:CallableDataKHR, code:IncomingCallableDataKHR, code:RayPayloadKHR,
-code:HitAttributeKHR, code:IncomingRayPayloadKHR, or
-endif::VK_KHR_ray_tracing_pipeline,VK_NV_ray_tracing[]
-code:Output storage variable(s) in the shader invocation(s) that contribute
-to generating invocation A, and those writes are all visible-to X.
-
-[NOTE]
-.Note
-====
-It is not necessary for the upstream shader invocations to have completed
-execution, they only need to have generated the output that is being read.
-====
-
-
-[[memory-model-deallocation]]
-== Deallocation
-
-A call to flink:vkFreeMemory must: happen-after all memory operations on all
-memory locations in that slink:VkDeviceMemory object.
-
-[NOTE]
-.Note
-====
-Normally, device memory operations in a given queue are synchronized with
-flink:vkFreeMemory by having a host thread wait on a fence signalled by that
-queue, and the wait happens-before the call to flink:vkFreeMemory on the
-host.
-====
-
-The deallocation of SPIR-V variables is managed by the system and
-happens-after all operations on those variables.
-
-
-[[memory-model-informative-descriptions]]
-== Descriptions (Informative)
-
-This subsection offers more easily understandable consequences of the memory
-model for app/compiler developers.
-
-Let SC be the storage class(es) specified by a release or acquire operation
-or barrier.
-
-  * An atomic write with release semantics must not be reordered against any
-    read or write to SC that is program-ordered before it (regardless of the
-    storage class the atomic is in).
-
-  * An atomic read with acquire semantics must not be reordered against any
-    read or write to SC that is program-ordered after it (regardless of the
-    storage class the atomic is in).
-
-  * Any write to SC program-ordered after a release barrier must not be
-    reordered against any read or write to SC program-ordered before that
-    barrier.
-
-  * Any read from SC program-ordered before an acquire barrier must not be
-    reordered against any read or write to SC program-ordered after the
-    barrier.
-
-A control barrier (even if it has no memory semantics) must not be reordered
-against any memory barriers.
-
-This memory model allows memory accesses with and without availability and
-visibility operations, as well as atomic operations, all to be performed on
-the same memory location.
-This is critical to allow it to reason about memory that is reused in
-multiple ways, e.g. across the lifetime of different shader invocations or
-draw calls.
-While GLSL (and legacy SPIR-V) applies the "`coherent`" decoration to
-variables (for historical reasons), this model treats each memory access
-instruction as having optional implicit availability/visibility operations.
-GLSL to SPIR-V compilers should map all (non-atomic) operations on a
-coherent variable to Make{Pointer,Texel}{Available}{Visible} flags in this
-model.
-
-Atomic operations implicitly have availability/visibility operations, and
-the scope of those operations is taken from the atomic operation's scope.
-
-
-[[memory-model-tessellation-output-ordering]]
-== Tessellation Output Ordering
-
-For SPIR-V that uses the Vulkan Memory Model, the code:OutputMemory storage
-class is used to synchronize accesses to tessellation control output
-variables.
-For legacy SPIR-V that does not enable the Vulkan Memory Model via
-code:OpMemoryModel, tessellation outputs can be ordered using a control
-barrier with no particular memory scope or semantics, as defined below.
-
-Let X and Y be memory operations performed by shader invocations A~X~ and
-A~Y~.
-Operation X is _tessellation-output-ordered_ before operation Y if and only
-if all of the following are true:
-
-  * There is a dynamic instance of an code:OpControlBarrier instruction C
-    such that X is program-ordered before C in A~X~ and C is program-ordered
-    before Y in A~Y~.
-  * A~X~ and A~Y~ are in the same instance of C's execution scope.
-
-If shader invocations A~X~ and A~Y~ in the code:TessellationControl
-execution model execute memory operations X and Y, respectively, on the
-code:Output storage class, and X is tessellation-output-ordered before Y
-with a scope of code:Workgroup, then X is location-ordered before Y, and if
-X is a write and Y is a read then X is visible-to Y.
-
-
-ifdef::VK_NV_cooperative_matrix[]
-
-[[memory-model-cooperative-matrix]]
-== Cooperative Matrix Memory Access
-
-For each dynamic instance of a cooperative matrix load or store instruction
-(code:OpCooperativeMatrixLoadNV or code:OpCooperativeMatrixStoreNV), a
-single implementation-dependent invocation within the instance of the
-matrix's scope performs a non-atomic load or store (respectively) to each
-memory location that is defined to be accessed by the instruction.
-
-endif::VK_NV_cooperative_matrix[]
diff --git a/registry/vulkan/appendices/spirvenv.txt b/registry/vulkan/appendices/spirvenv.txt
deleted file mode 100755
index b259bf1..0000000
--- a/registry/vulkan/appendices/spirvenv.txt
+++ /dev/null
@@ -1,1775 +0,0 @@
-// Copyright 2015-2021 The Khronos Group, Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-[appendix]
-[[spirvenv]]
-= Vulkan Environment for SPIR-V
-
-Shaders for Vulkan are defined by the <<spirv-spec,Khronos SPIR-V
-Specification>> as well as the <<spirv-extended,Khronos SPIR-V Extended
-Instructions for GLSL>> Specification.
-This appendix defines additional SPIR-V requirements applying to Vulkan
-shaders.
-
-== Versions and Formats
-
-A Vulkan
-ifdef::VK_VERSION_1_2[]
-1.2 implementation must: support the 1.0, 1.1, 1.2, 1.3, 1.4, and 1.5
-versions
-endif::VK_VERSION_1_2[]
-ifndef::VK_VERSION_1_2[]
-ifdef::VK_VERSION_1_1[]
-1.1 implementation must: support the 1.0, 1.1, 1.2, and 1.3 versions
-endif::VK_VERSION_1_1[]
-ifndef::VK_VERSION_1_1[]
-1.0 implementation must: support the 1.0 version
-endif::VK_VERSION_1_1[]
-endif::VK_VERSION_1_2[]
-of SPIR-V and the 1.0 version of the SPIR-V Extended Instructions for GLSL.
-ifndef::VK_VERSION_1_2[]
-ifdef::VK_KHR_spirv_1_4[]
-If the `apiext:VK_KHR_spirv_1_4` extension is enabled, the implementation
-must: additionally support the 1.4 version of SPIR-V.
-endif::VK_KHR_spirv_1_4[]
-endif::VK_VERSION_1_2[]
-
-A SPIR-V module passed into flink:vkCreateShaderModule is interpreted as a
-series of 32-bit words in host endianness, with literal strings packed as
-described in section 2.2 of the SPIR-V Specification.
-The first few words of the SPIR-V module must: be a magic number and a
-SPIR-V version number, as described in section 2.3 of the SPIR-V
-Specification.
-
-
-[[spirvenv-capabilities]]
-== Capabilities
-
-The <<spirvenv-capabilities-table,table below>> lists the set of SPIR-V
-capabilities that may: be supported in Vulkan implementations.
-The application must: not use any of these capabilities in SPIR-V passed to
-flink:vkCreateShaderModule unless one of the following conditions is met for
-the slink:VkDevice specified in the pname:device parameter of
-flink:vkCreateShaderModule:
-
-* The corresponding field in the table is blank.
-* Any corresponding Vulkan feature is enabled.
-* Any corresponding Vulkan extension is enabled.
-* Any corresponding Vulkan property is supported.
-* The corresponding core version is supported (as returned by
-  slink:VkPhysicalDeviceProperties::pname:apiVersion).
-
-:captableindent: {nbsp} {nbsp} {nbsp} {nbsp} {nbsp} {nbsp} {nbsp} {nbsp}
-[[spirvenv-capabilities-table]]
-.List of SPIR-V Capabilities and corresponding Vulkan features, extensions, or core version
-[options="header"]
-|====
-| SPIR-V code:OpCapability +
-  {captableindent} Vulkan feature, extension, or core version
-include::{generated}/spirvcap/captable.txt[]
-|====
-
-The application must: not pass a SPIR-V module containing any of the
-following to flink:vkCreateShaderModule:
-
-  * any code:OpCapability not listed above,
-  * an unsupported capability, or
-  * a capability which corresponds to a Vulkan feature or extension which
-    has not been enabled.
-
-
-[[spirvenv-extensions]]
-=== SPIR-V Extensions
-
-The <<spirvenv-extensions-table,following table>> lists SPIR-V extensions
-that implementations may: support.
-The application must: not pass a SPIR-V module to flink:vkCreateShaderModule
-that uses the following SPIR-V extensions unless one of the following
-conditions is met for the slink:VkDevice specified in the pname:device
-parameter of flink:vkCreateShaderModule:
-
-* Any corresponding Vulkan extension is enabled.
-* The corresponding core version is supported (as returned by
-  slink:VkPhysicalDeviceProperties::pname:apiVersion).
-
-[[spirvenv-extensions-table]]
-.List of SPIR-V Extensions and corresponding Vulkan extensions or core version
-[options="header"]
-|====
-| SPIR-V code:OpExtension +
-  {captableindent} Vulkan extension or core version
-include::{generated}/spirvcap/exttable.txt[]
-|====
-
-
-[[spirvenv-module-validation]]
-== Validation Rules within a Module
-
-A SPIR-V module passed to flink:vkCreateShaderModule must: conform to the
-following rules:
-
-
-[[spirvenv-module-validation-standalone]]
-=== Standalone SPIR-V Validation
-
-[open,refpage='StandaloneSpirv',desc='Standalone SPIR-V Validation',type='spirv']
---
-:refpage: StandaloneSpirv
-
-The following rules can: be validated with only the SPIR-V module itself.
-They do not depend on knowledge of the implementation and its capabilities
-or knowledge of runtime information, such as enabled features.
-
-.Valid Usage
-****
-// NOTE: Do not conditionalize the "standalone" VUs.
-// Write as though all extensions were enabled.
-// Add any needed conditional logic to the runtime section if needed.
-  * [[VUID-{refpage}-None-04633]]
-    Every entry point must: have no return value and accept no arguments
-  * [[VUID-{refpage}-None-04634]]
-    The static function-call graph for an entry point must: not contain
-    cycles; that is, static recursion is not allowed
-  * [[VUID-{refpage}-None-04635]]
-    The *Logical* or *PhysicalStorageBuffer64* addressing model must: be
-    selected
-  * [[VUID-{refpage}-None-04636]]
-    *Scope* for execution must: be limited to *Workgroup* or *Subgroup*
-  * [[VUID-{refpage}-None-04637]]
-    If the *Scope* for execution is *Workgroup*, then it must: only be used
-    in the task, mesh, tessellation control, or compute execution models
-  * [[VUID-{refpage}-None-04638]]
-    *Scope* for memory must: be limited to *Device*, *QueueFamily*,
-    *Workgroup*, *ShaderCallKHR*, *Subgroup*, or *Invocation*
-  * [[VUID-{refpage}-None-04639]]
-    If the *Scope* for memory is *Workgroup*, then it must: only be used in
-    the task, mesh, or compute execution models
-  * [[VUID-{refpage}-None-04640]]
-    If the *Scope* for memory is *ShaderCallKHR*, then it must: only be used
-    in ray generation, intersection, closest hit, any-hit, miss, and
-    callable execution models
-  * [[VUID-{refpage}-None-04641]]
-    If the *Scope* for memory is *Invocation*, then memory semantics must:
-    be *None*
-ifdef::VK_VERSION_1_1[]
-  * [[VUID-{refpage}-None-04642]]
-    *Scope* for <<shaders-group-operations,group operations>> must: be
-    limited to *Subgroup*
-endif::VK_VERSION_1_1[]
-  * [[VUID-{refpage}-None-04643]]
-    *Storage Class* must: be limited to *UniformConstant*, *Input*,
-    *Uniform*, *Output*, *Workgroup*, *Private*, *Function*, *PushConstant*,
-    *Image*, *StorageBuffer*, *RayPayloadKHR*, *IncomingRayPayloadKHR*,
-    *HitAttributeKHR*, *CallableDataKHR*, *IncomingCallableDataKHR*,
-    *ShaderRecordBufferKHR*, or *PhysicalStorageBuffer*
-  * [[VUID-{refpage}-None-04644]]
-    If the *Storage Class* is *Output*, then it must: not be used in the
-    *GlCompute*, *RayGenerationKHR*, *IntersectionKHR*, *AnyHitKHR*,
-    *ClosestHitKHR*, *MissKHR*, or *CallableKHR* execution models
-  * [[VUID-{refpage}-None-04645]]
-    If the *Storage Class* is *Workgroup*, then it must: only be used in the
-    task, mesh, or compute execution models
-  * [[VUID-{refpage}-OpAtomicStore-04730]]
-    code:OpAtomicStore must: not use *Acquire*, *AcquireRelease*, or
-    *SequentiallyConsistent* memory semantics
-  * [[VUID-{refpage}-OpAtomicLoad-04731]]
-    code:OpAtomicLoad must: not use *Release*, *AcquireRelease*, or
-    *SequentiallyConsistent* memory semantics
-  * [[VUID-{refpage}-OpMemoryBarrier-04732]]
-    code:OpMemoryBarrier must: use one of *Acquire*, *Release*,
-    *AcquireRelease*, or *SequentiallyConsistent* memory semantics
-  * [[VUID-{refpage}-OpMemoryBarrier-04733]]
-    code:OpMemoryBarrier must: include at least one storage class
-  * [[VUID-{refpage}-OpControlBarrier-04650]]
-    If the semantics for code:OpControlBarrier includes one of *Acquire*,
-    *Release*, *AcquireRelease*, or *SequentiallyConsistent* memory
-    semantics, then it must: include at least one storage class
-  * [[VUID-{refpage}-OpVariable-04651]]
-    Any code:OpVariable with an code:Initializer operand must: have
-    *Output*, *Private*, *Function*, or *Workgroup* as its *Storage Class*
-    operand
-  * [[VUID-{refpage}-OpVariable-04734]]
-    Any code:OpVariable with an code:Initializer operand and *Workgroup* as
-    its *Storage Class* operand must: use code:OpConstantNull as the
-    initializer
-  * [[VUID-{refpage}-OpReadClockKHR-04652]]
-    *Scope* for code:OpReadClockKHR must: be limited to *Subgroup* or
-    *Device*
-  * [[VUID-{refpage}-OriginLowerLeft-04653]]
-    The code:OriginLowerLeft execution mode must: not be used; fragment
-    entry points must: declare code:OriginUpperLeft
-  * [[VUID-{refpage}-PixelCenterInteger-04654]]
-    The code:PixelCenterInteger execution mode must: not be used (pixels are
-    always centered at half-integer coordinates)
-  * [[VUID-{refpage}-UniformConstant-04655]]
-    Any variable in the code:UniformConstant storage class must: be typed as
-    either code:OpTypeImage, code:OpTypeSampler, code:OpTypeSampledImage,
-    code:OpTypeAccelerationStructureKHR, or an array of one of these types
-  * [[VUID-{refpage}-OpTypeImage-04656]]
-    code:OpTypeImage must: declare a scalar 32-bit float, 64-bit integer, or
-    32-bit integer type for the "`Sampled Type`" (code:RelaxedPrecision can:
-    be applied to a sampling instruction and to the variable holding the
-    result of a sampling instruction)
-  * [[VUID-{refpage}-OpTypeImage-04657]]
-    code:OpTypeImage must: have a "`Sampled`" operand of 1 (sampled image)
-    or 2 (storage image)
-  * [[VUID-{refpage}-Image-04965]]
-    The converted bit width, signedness, and numeric type of the code:Image
-    code:Format operand of an code:OpTypeImage must: match the code:Sampled
-    code:Type, as defined in <<spirvenv-format-type-matching>>
-  * [[VUID-{refpage}-OpImageTexelPointer-04658]]
-    If an code:OpImageTexelPointer is used in an atomic operation, the image
-    type of the code:image parameter to code:OpImageTexelPointer must: have
-    an image format of code:R64i, code:R64ui, code:R32f, code:R32i, or
-    code:R32ui
-  * [[VUID-{refpage}-OpImageQuerySizeLod-04659]]
-    code:OpImageQuerySizeLod, code:OpImageQueryLod, and
-    code:OpImageQueryLevels must: only consume an "`Image`" operand whose
-    type has its "`Sampled`" operand set to 1
-  * [[VUID-{refpage}-OpTypeImage-06214]]
-    An code:OpTypeImage with a "`Dim`" operand of code:SubpassData must:
-    have an "`Arrayed`" operand of 0 (non-arrayed) and a "`Sampled`" operand
-    of 2 (storage image)
-  * [[VUID-{refpage}-SubpassData-04660]]
-    The [eq]#(u,v)# coordinates used for a code:SubpassData must: be the
-    <id> of a constant vector [eq]#(0,0)#, or if a layer coordinate is used,
-    must: be a vector that was formed with constant 0 for the [eq]#u# and
-    [eq]#v# components
-  * [[VUID-{refpage}-OpTypeImage-04661]]
-    Objects of types code:OpTypeImage, code:OpTypeSampler,
-    code:OpTypeSampledImage, and arrays of these types must: not be stored
-    to or modified
-  * [[VUID-{refpage}-Offset-04662]]
-    Any image operation must: use at most one of the code:Offset,
-    code:ConstOffset, and code:ConstOffsets image operands
-  * [[VUID-{refpage}-Offset-04663]]
-    Image operand code:Offset must: only be used with code:OpImage*Gather
-    instructions
-  * [[VUID-{refpage}-Offset-04865]]
-    Any image instruction which uses an code:Offset, code:ConstOffset, or
-    code:ConstOffsets image operand, must only consume a "`Sampled Image`"
-    operand whose type has its "`Sampled`" operand set to 1
-  * [[VUID-{refpage}-OpImageGather-04664]]
-    The "`Component`" operand of code:OpImageGather, and
-    code:OpImageSparseGather must: be the <id> of a constant instruction
-  * [[VUID-{refpage}-OpImage-04777]]
-    code:OpImage*Dref must: not consume an image whose `Dim` is 3D
-  * [[VUID-{refpage}-OpTypeAccelerationStructureKHR-04665]]
-     Objects of types code:OpTypeAccelerationStructureKHR and arrays of this
-     type must: not be stored to or modified
-  * [[VUID-{refpage}-OpReportIntersectionKHR-04666]]
-    The value of the "`Hit Kind`" operand of code:OpReportIntersectionKHR
-    must: be in the range [eq]#[0,127]#
-  * [[VUID-{refpage}-None-04667]]
-    Structure types must: not contain opaque types
-  * [[VUID-{refpage}-BuiltIn-04668]]
-    Any code:BuiltIn decoration not listed in
-    <<interfaces-builtin-variables>> must: not be used
-  * [[VUID-{refpage}-Location-04915]]
-    The code:Location or code:Component decorations must: not be used with
-    code:BuiltIn
-  * [[VUID-{refpage}-Location-04916]]
-    The code:Location decorations must: be used on
-    <<interfaces-iointerfaces-user,user-defined variables>>
-  * [[VUID-{refpage}-Location-04917]]
-    The code:Location decorations must: be used on an code:OpVariable with a
-    structure type that is not a block
-  * [[VUID-{refpage}-Location-04918]]
-    The code:Location decorations must: not be used on the members of
-    code:OpVariable with a structure type that is decorated with
-    code:Location
-  * [[VUID-{refpage}-Location-04919]]
-    The code:Location decorations must: be used on each member of
-    code:OpVariable with a structure type that is a block not decorated with
-    code:Location
-  * [[VUID-{refpage}-Component-04920]]
-    The code:Component decoration value must: not be greater than 3
-  * [[VUID-{refpage}-Component-04921]]
-    If the code:Component decoration is used on an code:OpVariable that has
-    a code:OpTypeVector type with a code:Component code:Type with a
-    code:Width that is less than or equal to 32, the sum of its
-    code:Component code:Count and the code:Component decoration value must:
-    be less than 4
-  * [[VUID-{refpage}-Component-04922]]
-    If the code:Component decoration is used on an code:OpVariable that has
-    a code:OpTypeVector type with a code:Component code:Type with a
-    code:Width that is equal to 64, the sum of two times its code:Component
-    code:Count and the code:Component decoration value must: be less than 4
-  * [[VUID-{refpage}-Component-04923]]
-    The code:Component decorations value must: not be 1 or 3 for scalar or
-    two-component 64-bit data types
-  * [[VUID-{refpage}-Component-04924]]
-    The code:Component decorations must: not used with any type that is not
-    a scalar or vector
-  * [[VUID-{refpage}-GLSLShared-04669]]
-    The code:GLSLShared and code:GLSLPacked decorations must: not be used
-  * [[VUID-{refpage}-Flat-04670]]
-    The code:Flat, code:NoPerspective, code:Sample, and code:Centroid
-    decorations must: only be used on variables with the code:Output or
-    code:Input storage class
-  * [[VUID-{refpage}-Flat-06201]]
-    The code:Flat, code:NoPerspective, code:Sample, and code:Centroid
-    decorations must: not be used on variables with the code:Output storage
-    class in a fragment shader
-  * [[VUID-{refpage}-Flat-06202]]
-    The code:Flat, code:NoPerspective, code:Sample, and code:Centroid
-    decorations must: not be used on variables with the code:Input storage
-    class in a vertex shader
-  * [[VUID-{refpage}-Flat-04744]]
-    Any variable with integer or double-precision floating-point type and
-    with code:Input storage class in a fragment shader, must: be decorated
-    code:Flat
-  * [[VUID-{refpage}-ViewportRelativeNV-04672]]
-    The code:ViewportRelativeNV decoration must: only be used on a variable
-    decorated with code:Layer in the vertex, tessellation evaluation, or
-    geometry shader stages
-  * [[VUID-{refpage}-ViewportRelativeNV-04673]]
-    The code:ViewportRelativeNV decoration must: not be used unless a
-    variable decorated with one of code:ViewportIndex or code:ViewportMaskNV
-    is also statically used by the same code:OpEntryPoint
-  * [[VUID-{refpage}-ViewportMaskNV-04674]]
-    The code:ViewportMaskNV and code:ViewportIndex decorations must: not
-    both be statically used by one or more code:OpEntryPoint's that form the
-    <<pipeline-graphics-subsets-pre-rasterization,pre-rasterization shader
-    stages>> of a graphics pipeline
-  * [[VUID-{refpage}-FPRoundingMode-04675]]
-    Rounding modes other than round-to-nearest-even and round-towards-zero
-    must: not be used for the code:FPRoundingMode decoration
-  * [[VUID-{refpage}-FPRoundingMode-04676]]
-    The code:FPRoundingMode decoration must: only be used for a width-only
-    conversion instruction whose only uses are code:Object operands of
-    code:OpStore instructions storing through a pointer to a 16-bit
-    floating-point object in the code:StorageBuffer,
-    code:PhysicalStorageBuffer, code:Uniform, or code:Output storage class
-  * [[VUID-{refpage}-Invariant-04677]]
-    Variables decorated with code:Invariant and variables with structure
-    types that have any members decorated with code:Invariant must: be in
-    the code:Output or code:Input storage class, code:Invariant used on an
-    code:Input storage class variable or structure member has no effect
-  * [[VUID-{refpage}-VulkanMemoryModel-04678]]
-    [[builtin-volatile-semantics]] If the code:VulkanMemoryModel capability
-    is not declared, the code:Volatile decoration must: be used on any
-    variable declaration that includes one of the code:SMIDNV,
-    code:WarpIDNV, code:SubgroupSize, code:SubgroupLocalInvocationId,
-    code:SubgroupEqMask, code:SubgroupGeMask, code:SubgroupGtMask,
-    code:SubgroupLeMask, or code:SubgroupLtMask code:BuiltIn decorations
-    when used in the ray generation, closest hit, miss, intersection, or
-    callable shaders, or with the code:RayTmaxKHR code:Builtin decoration
-    when used in an intersection shader
-  * [[VUID-{refpage}-VulkanMemoryModel-04679]]
-    If the code:VulkanMemoryModel capability is declared, the code:OpLoad
-    instruction must: use the code:Volatile memory semantics when it
-    accesses into any variable that includes one of the code:SMIDNV,
-    code:WarpIDNV, code:SubgroupSize, code:SubgroupLocalInvocationId,
-    code:SubgroupEqMask, code:SubgroupGeMask, code:SubgroupGtMask,
-    code:SubgroupLeMask, or code:SubgroupLtMask code:BuiltIn decorations
-    when used in the ray generation, closest hit, miss, intersection, or
-    callable shaders, or with the code:RayTmaxKHR code:Builtin decoration
-    when used in an intersection shader
-  * [[VUID-{refpage}-OpTypeRuntimeArray-04680]]
-     code:OpTypeRuntimeArray must: only be used for the last member of an
-     code:OpTypeStruct that is in the code:StorageBuffer or
-     code:PhysicalStorageBuffer storage class decorated as code:Block, or
-     that is in the code:Uniform storage class decorated as code:BufferBlock
-  * [[VUID-{refpage}-Function-04681]]
-    A type _T_ that is an array sized with a specialization constant must:
-    neither be, nor be contained in, the type _T2_ of a variable _V_, unless
-    either: a) _T_ is equal to _T2_, b) _V_ is declared in the
-    code:Function, or code:Private storage classes, c) _V_ is a non-Block
-    variable in the code:Workgroup storage class, or d) _V_ is an interface
-    variable with an additional level of arrayness,
-    <<interfaces-iointerfaces-matching, as described in interface
-    matching>>, and _T_ is the member type of the array type _T2_
-  * [[VUID-{refpage}-OpControlBarrier-04682]]
-    If code:OpControlBarrier is used in ray generation, intersection,
-    any-hit, closest hit, miss, fragment, vertex, tessellation evaluation,
-    or geometry shaders, the execution Scope must: be code:Subgroup
-  * [[VUID-{refpage}-LocalSize-06426]]
-    For each compute shader entry point, either a code:LocalSize or
-    code:LocalSizeId execution mode, or an object decorated with the
-    code:WorkgroupSize decoration must: be specified
-  * [[VUID-{refpage}-DerivativeGroupQuadsNV-04684]]
-    For compute shaders using the code:DerivativeGroupQuadsNV execution
-    mode, the first two dimensions of the local workgroup size must: be a
-    multiple of two
-  * [[VUID-{refpage}-DerivativeGroupLinearNV-04778]]
-    For compute shaders using the code:DerivativeGroupLinearNV execution
-    mode, the product of the dimensions of the local workgroup size must: be
-    a multiple of four
-  * [[VUID-{refpage}-OpGroupNonUniformBallotBitCount-04685]]
-    If code:OpGroupNonUniformBallotBitCount is used, the group operation
-    must: be limited to *Reduce*, *InclusiveScan*, or *ExclusiveScan*
-  * [[VUID-{refpage}-None-04686]]
-    The _Pointer_ operand of all atomic instructions must: have a *Storage
-    Class* limited to *Uniform*, *Workgroup*, *Image*, *StorageBuffer*, or
-    *PhysicalStorageBuffer*
-  * [[VUID-{refpage}-Offset-04687]]
-    Output variables or block members decorated with code:Offset that have a
-    64-bit type, or a composite type containing a 64-bit type, must: specify
-    an code:Offset value aligned to a 8 byte boundary
-  * [[VUID-{refpage}-Offset-04689]]
-    The size of any output block containing any member decorated with
-    code:Offset that is a 64-bit type must: be a multiple of 8
-  * [[VUID-{refpage}-Offset-04690]]
-    The first member of an output block that specifies a code:Offset
-    decoration must: specify a code:Offset value that is aligned to an 8
-    byte boundary if that block contains any member decorated with
-    code:Offset and is a 64-bit type
-  * [[VUID-{refpage}-Offset-04691]]
-    Output variables or block members decorated with code:Offset that have a
-    32-bit type, or a composite type contains a 32-bit type, must: specify
-    an code:Offset value aligned to a 4 byte boundary
-  * [[VUID-{refpage}-Offset-04692]]
-    Output variables, blocks or block members decorated with code:Offset
-    must: only contain base types that have components that are either
-    32-bit or 64-bit in size
-  * [[VUID-{refpage}-Offset-04716]]
-    Only variables or block members in the output interface decorated with
-    code:Offset can: be captured for transform feedback, and those variables
-    or block members must: also be decorated with code:XfbBuffer and
-    code:XfbStride, or inherit code:XfbBuffer and code:XfbStride decorations
-    from a block containing them
-  * [[VUID-{refpage}-XfbBuffer-04693]]
-    All variables or block members in the output interface of the entry
-    point being compiled decorated with a specific code:XfbBuffer value
-    must: all be decorated with identical code:XfbStride values
-  * [[VUID-{refpage}-Stream-04694]]
-    If any variables or block members in the output interface of the entry
-    point being compiled are decorated with code:Stream, then all variables
-    belonging to the same code:XfbBuffer must: specify the same code:Stream
-    value
-  * [[VUID-{refpage}-XfbBuffer-04696]]
-    For any two variables or block members in the output interface of the
-    entry point being compiled with the same code:XfbBuffer value, the
-    ranges determined by the code:Offset decoration and the size of the type
-    must: not overlap
-  * [[VUID-{refpage}-XfbBuffer-04697]]
-    All block members in the output interface of the entry point being
-    compiled that are in the same block and have a declared or inherited
-    code:XfbBuffer decoration must: specify the same code:XfbBuffer value
-  * [[VUID-{refpage}-RayPayloadKHR-04698]]
-    code:RayPayloadKHR storage class must: only be used in ray generation,
-    closest hit or miss shaders
-  * [[VUID-{refpage}-IncomingRayPayloadKHR-04699]]
-    code:IncomingRayPayloadKHR storage class must: only be used in closest
-    hit, any-hit, or miss shaders
-  * [[VUID-{refpage}-IncomingRayPayloadKHR-04700]]
-    There must: be at most one variable with the code:IncomingRayPayloadKHR
-    storage class in the input interface of an entry point
-  * [[VUID-{refpage}-HitAttributeKHR-04701]]
-    code:HitAttributeKHR storage class must: only be used in intersection,
-    any-hit, or closest hit shaders
-  * [[VUID-{refpage}-HitAttributeKHR-04702]]
-    There must: be at most one variable with the code:HitAttributeKHR
-    storage class in the input interface of an entry point
-  * [[VUID-{refpage}-HitAttributeKHR-04703]]
-    A variable with code:HitAttributeKHR storage class must: only be written
-    to in an intersection shader
-  * [[VUID-{refpage}-CallableDataKHR-04704]]
-    code:CallableDataKHR storage class must: only be used in ray generation,
-    closest hit, miss, and callable shaders
-  * [[VUID-{refpage}-IncomingCallableDataKHR-04705]]
-    code:IncomingCallableDataKHR storage class must: only be used in
-    callable shaders
-  * [[VUID-{refpage}-IncomingCallableDataKHR-04706]]
-    There must: be at most one variable with the
-    code:IncomingCallableDataKHR storage class in the input interface of an
-    entry point
-  * [[VUID-{refpage}-Base-04707]]
-    The code:Base operand of code:OpPtrAccessChain must: point to one of the
-    following: *Workgroup*, if code:VariablePointers is enabled;
-    *StorageBuffer*, if code:VariablePointers or
-    code:VariablePointersStorageBuffer is enabled; *PhysicalStorageBuffer*,
-    if the code:PhysicalStorageBuffer64 addressing model is enabled
-  * [[VUID-{refpage}-PhysicalStorageBuffer64-04708]]
-    If the code:PhysicalStorageBuffer64 addressing model is enabled, all
-    instructions that support memory access operands and that use a physical
-    pointer must: include the code:Aligned operand
-  * [[VUID-{refpage}-PhysicalStorageBuffer64-04709]]
-    If the code:PhysicalStorageBuffer64 addressing model is enabled, any
-    access chain instruction that accesses into a code:RowMajor matrix must:
-    only be used as the code:Pointer operand to code:OpLoad or code:OpStore
-  * [[VUID-{refpage}-PhysicalStorageBuffer64-04710]]
-    If the code:PhysicalStorageBuffer64 addressing model is enabled,
-    code:OpConvertUToPtr and code:OpConvertPtrToU must: use an integer type
-    whose code:Width is 64
-  * [[VUID-{refpage}-OpTypeForwardPointer-04711]]
-    code:OpTypeForwardPointer must: have a storage class of
-    code:PhysicalStorageBuffer
-  * [[VUID-{refpage}-None-04745]]
-    All variables with a storage class of *PushConstant* declared as an
-    array must: only be accessed by dynamically uniform indices
-  * [[VUID-{refpage}-Result-04780]]
-    The code:Result code:Type operand of any code:OpImageRead or
-    code:OpImageSparseRead instruction must: be a vector of four components
-  * [[VUID-{refpage}-Base-04781]]
-    The code:Base operand of any code:OpBitCount, code:OpBitReverse,
-    code:OpBitFieldInsert, code:OpBitFieldSExtract, or
-    code:OpBitFieldUExtract instruction must: be a 32-bit integer scalar or
-    a vector of 32-bit integers
-****
---
-
-[[spirvenv-module-validation-runtime]]
-=== Runtime SPIR-V Validation
-
-[open,refpage='RuntimeSpirv',desc='Runtime SPIR-V Validation',type='spirv']
---
-:refpage: RuntimeSpirv
-
-The following rules must: be validated at runtime.
-These rules depend on knowledge of the implementation and its capabilities
-and knowledge of runtime information, such as enabled features.
-
-.Valid Usage
-****
-ifdef::VK_VERSION_1_2,VK_KHR_vulkan_memory_model[]
-  * [[VUID-{refpage}-vulkanMemoryModel-06265]]
-    If <<features-vulkanMemoryModel,pname:vulkanMemoryModel>> is enabled and
-    <<features-vulkanMemoryModelDeviceScope,pname:vulkanMemoryModelDeviceScope>>
-    is not enabled, *Device* memory scope must: not be used.
-endif::VK_VERSION_1_2,VK_KHR_vulkan_memory_model[]
-ifdef::VK_VERSION_1_2,VK_KHR_vulkan_memory_model[]
-  * [[VUID-{refpage}-vulkanMemoryModel-06266]]
-    If <<features-vulkanMemoryModel,pname:vulkanMemoryModel>> is not
-    enabled, *QueueFamily* memory scope must: not be used.
-endif::VK_VERSION_1_2,VK_KHR_vulkan_memory_model[]
-ifdef::VK_KHR_shader_clock[]
-  * [[VUID-{refpage}-shaderSubgroupClock-06267]]
-    If <<features-shaderSubgroupClock,pname:shaderSubgroupClock>> is not
-    enabled, the code:Subgroup scope must: not be used for
-    code:OpReadClockKHR.
-  * [[VUID-{refpage}-shaderDeviceClock-06268]]
-    If <<features-shaderDeviceClock,pname:shaderDeviceClock>> is not
-    enabled, the code:Device scope must: not be used for
-    code:OpReadClockKHR.
-endif::VK_KHR_shader_clock[]
-ifndef::VK_KHR_format_feature_flags2[]
-  * [[VUID-{refpage}-OpTypeImage-06269]]
-    If
-    <<features-shaderStorageImageWriteWithoutFormat,shaderStorageImageWriteWithoutFormat>>
-    is not enabled, any variable created with a "`Type`" of code:OpTypeImage
-    that has a "`Sampled`" operand of 2 and an "`Image Format`" operand of
-    code:Unknown must: be decorated with code:NonWritable.
-  * [[VUID-{refpage}-OpTypeImage-06270]]
-    If
-    <<features-shaderStorageImageReadWithoutFormat,shaderStorageImageReadWithoutFormat>>
-    is not enabled, any variable created with a "`Type`" of code:OpTypeImage
-    that has a "`Sampled`" operand of 2 and an "`Image Format`" operand of
-    code:Unknown must: be decorated with code:NonReadable.
-  * [[VUID-{refpage}-BuiltIn-06271]]
-    Any code:BuiltIn decoration that corresponds only to Vulkan features or
-endif::VK_KHR_format_feature_flags2[]
-    extensions that have not been enabled must: not be used.
-  * [[VUID-{refpage}-Location-06272]]
-    The sum of code:Location and the number of locations the variable it
-    decorates consumes must: be less than or equal to the value for the
-    matching {ExecutionModel} defined in <<interfaces-iointerfaces-limits>>
-  * [[VUID-{refpage}-Fragment-06427]]
-    When blending is enabled and one of the dual source blend modes is in
-    use, the maximum number of output attachments written to in the
-    code:Fragment {ExecutionModel} must: be less than or equal to
-    <<limits-maxFragmentDualSrcAttachments,pname:maxFragmentDualSrcAttachments>>
-  * [[VUID-{refpage}-Location-06428]]
-    The maximum number of storage buffers, storage images, and output
-    code:Location decorated color attachments written to in the
-    code:Fragment {ExecutionModel} must: be less than or equal to
-    <<limits-maxFragmentCombinedOutputResources,pname:maxFragmentCombinedOutputResources>>
-ifdef::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
-  * [[VUID-{refpage}-OpTypeRuntimeArray-06273]]
-    code:OpTypeRuntimeArray must: only be used for an array of variables
-    with storage class code:Uniform, code:StorageBuffer, or
-    code:UniformConstant, or for the outermost dimension of an array of
-    arrays of such variables if the
-    <<features-runtimeDescriptorArray,runtimeDescriptorArray>> feature is
-    enabled,
-  * [[VUID-{refpage}-NonUniform-06274]]
-    If an instruction loads from or stores to a resource (including atomics
-    and image instructions) and the resource descriptor being accessed is
-    not dynamically uniform, then the operand corresponding to that resource
-    (e.g. the pointer or sampled image operand) must: be decorated with
-    code:NonUniform.
-endif::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
-ifdef::VK_VERSION_1_1[]
-ifdef::VK_VERSION_1_2,VK_KHR_shader_subgroup_extended_types[]
-  * [[VUID-{refpage}-None-06275]]
-    <<features-subgroup-extended-types,shaderSubgroupExtendedTypes>> must:
-    be enabled for <<shaders-group-operations,group operations>> to use
-    8-bit integer, 16-bit integer, 64-bit integer, 16-bit floating-point,
-    and vectors of these types
-endif::VK_VERSION_1_2,VK_KHR_shader_subgroup_extended_types[]
-endif::VK_VERSION_1_1[]
-ifdef::VK_VERSION_1_2[]
-  * [[VUID-{refpage}-subgroupBroadcastDynamicId-06276]]
-    If
-    <<features-subgroupBroadcastDynamicId,code:subgroupBroadcastDynamicId>>
-    is ename:VK_TRUE, and the shader module version is 1.5 or higher, the
-    "`Index`" for code:OpGroupNonUniformQuadBroadcast must: be dynamically
-    uniform within the derivative group.
-    Otherwise, "`Index`" must: be a constant.
-  * [[VUID-{refpage}-subgroupBroadcastDynamicId-06277]]
-    If
-    <<features-subgroupBroadcastDynamicId,code:subgroupBroadcastDynamicId>>
-    is ename:VK_TRUE, and the shader module version is 1.5 or higher, the
-    "`Id`" for code:OpGroupNonUniformBroadcast must: be dynamically uniform
-    within the subgroup.
-    Otherwise, "`Id`" must: be a constant.
-endif::VK_VERSION_1_2[]
-ifdef::VK_KHR_shader_atomic_int64[]
-  * [[VUID-{refpage}-None-06278]]
-    <<features-shaderBufferInt64Atomics,shaderBufferInt64Atomics>> must: be
-    enabled for 64-bit integer atomic operations to be supported on a
-    _Pointer_ with a *Storage Class* of *StorageBuffer* or *Uniform*.
-  * [[VUID-{refpage}-None-06279]]
-    <<features-shaderSharedInt64Atomics,shaderSharedInt64Atomics>> must: be
-    enabled for 64-bit integer atomic operations to be supported on a
-    _Pointer_ with a *Storage Class* of *Workgroup*.
-endif::VK_KHR_shader_atomic_int64[]
-ifdef::VK_EXT_shader_atomic_float[]
-ifndef::VK_EXT_shader_atomic_float2[]
-  * [[VUID-{refpage}-None-06280]]
-    <<features-shaderBufferFloat32Atomics,shaderBufferFloat32Atomics>>, or
-    <<features-shaderBufferFloat32AtomicAdd,shaderBufferFloat32AtomicAdd>>,
-    or <<features-shaderBufferFloat64Atomics,shaderBufferFloat64Atomics>>,
-    or
-    <<features-shaderBufferFloat64AtomicAdd,shaderBufferFloat64AtomicAdd>>
-    must: be enabled for floating-point atomic operations to be supported on
-    a _Pointer_ with a *Storage Class* of *StorageBuffer*.
-  * [[VUID-{refpage}-None-06281]]
-    <<features-shaderSharedFloat32Atomics,shaderSharedFloat32Atomics>>, or
-    <<features-shaderSharedFloat32AtomicAdd,shaderSharedFloat32AtomicAdd>>,
-    or <<features-shaderSharedFloat64Atomics,shaderSharedFloat64Atomics>>,
-    or
-    <<features-shaderSharedFloat64AtomicAdd,shaderSharedFloat64AtomicAdd>>
-    must: be enabled for floating-point atomic operations to be supported on
-    a _Pointer_ with a *Storage Class* of *Workgroup*.
-  * [[VUID-{refpage}-None-06282]]
-    <<features-shaderImageFloat32Atomics,shaderImageFloat32Atomics>> or
-    <<features-shaderImageFloat32AtomicAdd,shaderImageFloat32AtomicAdd>>
-    must: be enabled for 32-bit floating-point atomic operations to be
-    supported on a _Pointer_ with a *Storage Class* of *Image*.
-  * [[VUID-{refpage}-None-06283]]
-    <<features-sparseImageFloat32Atomics,sparseImageFloat32Atomics>> or
-    <<features-sparseImageFloat32AtomicAdd,sparseImageFloat32AtomicAdd>>
-    must: be enabled for 32-bit floating-point atomics to be supported on
-    sparse images.
-endif::VK_EXT_shader_atomic_float2[]
-endif::VK_EXT_shader_atomic_float[]
-ifdef::VK_EXT_shader_atomic_float2[]
-  * [[VUID-{refpage}-None-06284]]
-    <<features-shaderBufferFloat32Atomics,shaderBufferFloat32Atomics>>, or
-    <<features-shaderBufferFloat32AtomicAdd,shaderBufferFloat32AtomicAdd>>,
-    or <<features-shaderBufferFloat64Atomics,shaderBufferFloat64Atomics>>,
-    or
-    <<features-shaderBufferFloat64AtomicAdd,shaderBufferFloat64AtomicAdd>>,
-    or
-    <<features-shaderBufferFloat16AtomicMinMax,shaderBufferFloat16Atomics>>,
-    or
-    <<features-shaderBufferFloat16AtomicMinMax,shaderBufferFloat16AtomicAdd>>,
-    or
-    <<features-shaderBufferFloat16AtomicMinMax,shaderBufferFloat16AtomicMinMax>>,
-    or
-    <<features-shaderBufferFloat32AtomicMinMax,shaderBufferFloat32AtomicMinMax>>,
-    or
-    <<features-shaderBufferFloat64AtomicMinMax,shaderBufferFloat64AtomicMinMax>>
-    must: be enabled for floating-point atomic operations to be supported on
-    a _Pointer_ with a *Storage Class* of *StorageBuffer*.
-  * [[VUID-{refpage}-None-06285]]
-    <<features-shaderSharedFloat32Atomics,shaderSharedFloat32Atomics>>, or
-    <<features-shaderSharedFloat32AtomicAdd,shaderSharedFloat32AtomicAdd>>,
-    or <<features-shaderSharedFloat64Atomics,shaderSharedFloat64Atomics>>,
-    or
-    <<features-shaderSharedFloat64AtomicAdd,shaderSharedFloat64AtomicAdd>>,
-    or
-    <<features-shaderBufferFloat16AtomicMinMax,shaderSharedFloat16Atomics>>,
-    or
-    <<features-shaderBufferFloat16AtomicMinMax,shaderSharedFloat16AtomicAdd>>,
-    or
-    <<features-shaderBufferFloat16AtomicMinMax,shaderSharedFloat16AtomicMinMax>>,
-    or
-    <<features-shaderSharedFloat32AtomicMinMax,shaderSharedFloat32AtomicMinMax>>,
-    or
-    <<features-shaderSharedFloat64AtomicMinMax,shaderSharedFloat64AtomicMinMax>>
-    must: be enabled for floating-point atomic operations to be supported on
-    a _Pointer_ with a *Storage Class* of *Workgroup*.
-  * [[VUID-{refpage}-None-06286]]
-    <<features-shaderImageFloat32Atomics,shaderImageFloat32Atomics>>, or
-    <<features-shaderImageFloat32AtomicAdd,shaderImageFloat32AtomicAdd>>, or
-    <<features-shaderImageFloat32AtomicMinMax,shaderImageFloat32AtomicMinMax>>
-    must: be enabled for 32-bit floating-point atomic operations to be
-    supported on a _Pointer_ with a *Storage Class* of *Image*.
-  * [[VUID-{refpage}-None-06287]]
-    <<features-sparseImageFloat32Atomics,sparseImageFloat32Atomics>>, or
-    <<features-sparseImageFloat32AtomicAdd,sparseImageFloat32AtomicAdd>>, or
-    <<features-sparseImageFloat32AtomicMinMax,sparseImageFloat32AtomicMinMax>>
-    must: be enabled for 32-bit floating-point atomics to be supported on
-    sparse images.
-endif::VK_EXT_shader_atomic_float2[]
-ifdef::VK_EXT_shader_image_atomic_int64[]
-  * [[VUID-{refpage}-None-06288]]
-    <<features-shaderImageInt64Atomics,shaderImageInt64Atomics>> must: be
-    enabled for 64-bit integer atomic operations to be supported on a
-    _Pointer_ with a *Storage Class* of *Image*.
-endif::VK_EXT_shader_image_atomic_int64[]
-ifdef::VK_VERSION_1_2,VK_KHR_shader_float_controls[]
-  * [[VUID-{refpage}-denormBehaviorIndependence-06289]]
-    If
-    <<features-denormBehaviorIndependence,pname:denormBehaviorIndependence>>
-    is ename:VK_SHADER_FLOAT_CONTROLS_INDEPENDENCE_32_BIT_ONLY, then the
-    entry point must: use the same denormals execution mode for both 16-bit
-    and 64-bit floating-point types.
-  * [[VUID-{refpage}-denormBehaviorIndependence-06290]]
-    If
-    <<features-denormBehaviorIndependence,pname:denormBehaviorIndependence>>
-    is ename:VK_SHADER_FLOAT_CONTROLS_INDEPENDENCE_NONE, then the entry
-    point must: use the same denormals execution mode for all floating-point
-    types.
-  * [[VUID-{refpage}-roundingModeIndependence-06291]]
-    If <<features-roundingModeIndependence,pname:roundingModeIndependence>>
-    is ename:VK_SHADER_FLOAT_CONTROLS_INDEPENDENCE_32_BIT_ONLY, then the
-    entry point must: use the same rounding execution mode for both 16-bit
-    and 64-bit floating-point types.
-  * [[VUID-{refpage}-roundingModeIndependence-06292]]
-    If <<features-roundingModeIndependence,pname:roundingModeIndependence>>
-    is ename:VK_SHADER_FLOAT_CONTROLS_INDEPENDENCE_NONE, then the entry
-    point must: use the same rounding execution mode for all floating-point
-    types.
-  * [[VUID-{refpage}-shaderSignedZeroInfNanPreserveFloat16-06293]]
-    If
-    <<limits-shaderSignedZeroInfNanPreserveFloat16,pname:shaderSignedZeroInfNanPreserveFloat16>>
-    is ename:VK_FALSE, then code:SignedZeroInfNanPreserve for 16-bit
-    floating-point type must: not be used.
-  * [[VUID-{refpage}-shaderSignedZeroInfNanPreserveFloat32-06294]]
-    If
-    <<limits-shaderSignedZeroInfNanPreserveFloat32,pname:shaderSignedZeroInfNanPreserveFloat32>>
-    is ename:VK_FALSE, then code:SignedZeroInfNanPreserve for 32-bit
-    floating-point type must: not be used.
-  * [[VUID-{refpage}-shaderSignedZeroInfNanPreserveFloat64-06295]]
-    If
-    <<limits-shaderSignedZeroInfNanPreserveFloat64,pname:shaderSignedZeroInfNanPreserveFloat64>>
-    is ename:VK_FALSE, then code:SignedZeroInfNanPreserve for 64-bit
-    floating-point type must: not be used.
-  * [[VUID-{refpage}-shaderDenormPreserveFloat16-06296]]
-    If
-    <<limits-shaderDenormPreserveFloat16,pname:shaderDenormPreserveFloat16>>
-    is ename:VK_FALSE, then code:DenormPreserve for 16-bit floating-point
-    type must: not be used.
-  * [[VUID-{refpage}-shaderDenormPreserveFloat32-06297]]
-    If
-    <<limits-shaderDenormPreserveFloat32,pname:shaderDenormPreserveFloat32>>
-    is ename:VK_FALSE, then code:DenormPreserve for 32-bit floating-point
-    type must: not be used.
-  * [[VUID-{refpage}-shaderDenormPreserveFloat64-06298]]
-    If
-    <<limits-shaderDenormPreserveFloat64,pname:shaderDenormPreserveFloat64>>
-    is ename:VK_FALSE, then code:DenormPreserve for 64-bit floating-point
-    type must: not be used.
-  * [[VUID-{refpage}-shaderDenormFlushToZeroFloat16-06299]]
-    If
-    <<limits-shaderDenormFlushToZeroFloat16,pname:shaderDenormFlushToZeroFloat16>>
-    is ename:VK_FALSE, then code:DenormFlushToZero for 16-bit floating-point
-    type must: not be used.
-  * [[VUID-{refpage}-shaderDenormFlushToZeroFloat32-06300]]
-    If
-    <<limits-shaderDenormFlushToZeroFloat32,pname:shaderDenormFlushToZeroFloat32>>
-    is ename:VK_FALSE, then code:DenormFlushToZero for 32-bit floating-point
-    type must: not be used.
-  * [[VUID-{refpage}-shaderDenormFlushToZeroFloat64-06301]]
-    If
-    <<limits-shaderDenormFlushToZeroFloat64,pname:shaderDenormFlushToZeroFloat64>>
-    is ename:VK_FALSE, then code:DenormFlushToZero for 64-bit floating-point
-    type must: not be used.
-  * [[VUID-{refpage}-shaderRoundingModeRTEFloat16-06302]]
-    If
-    <<limits-shaderRoundingModeRTEFloat16,pname:shaderRoundingModeRTEFloat16>>
-    is ename:VK_FALSE, then code:RoundingModeRTE for 16-bit floating-point
-    type must: not be used.
-  * [[VUID-{refpage}-shaderRoundingModeRTEFloat32-06303]]
-    If
-    <<limits-shaderRoundingModeRTEFloat32,pname:shaderRoundingModeRTEFloat32>>
-    is ename:VK_FALSE, then code:RoundingModeRTE for 32-bit floating-point
-    type must: not be used.
-  * [[VUID-{refpage}-shaderRoundingModeRTEFloat64-06304]]
-    If
-    <<limits-shaderRoundingModeRTEFloat64,pname:shaderRoundingModeRTEFloat64>>
-    is ename:VK_FALSE, then code:RoundingModeRTE for 64-bit floating-point
-    type must: not be used.
-  * [[VUID-{refpage}-shaderRoundingModeRTZFloat16-06305]]
-    If
-    <<limits-shaderRoundingModeRTZFloat16,pname:shaderRoundingModeRTZFloat16>>
-    is ename:VK_FALSE, then code:RoundingModeRTZ for 16-bit floating-point
-    type must: not be used.
-  * [[VUID-{refpage}-shaderRoundingModeRTZFloat32-06306]]
-    If
-    <<limits-shaderRoundingModeRTZFloat32,pname:shaderRoundingModeRTZFloat32>>
-    is ename:VK_FALSE, then code:RoundingModeRTZ for 32-bit floating-point
-    type must: not be used.
-  * [[VUID-{refpage}-shaderRoundingModeRTZFloat64-06307]]
-    If
-    <<limits-shaderRoundingModeRTZFloat64,pname:shaderRoundingModeRTZFloat64>>
-    is ename:VK_FALSE, then code:RoundingModeRTZ for 64-bit floating-point
-    type must: not be used.
-endif::VK_VERSION_1_2,VK_KHR_shader_float_controls[]
-ifdef::VK_EXT_transform_feedback[]
-  * [[VUID-{refpage}-Offset-06308]]
-    The code:Offset plus size of the type of each variable, in the output
-    interface of the entry point being compiled, decorated with
-    code:XfbBuffer must: not be greater than
-    sname:VkPhysicalDeviceTransformFeedbackPropertiesEXT::pname:maxTransformFeedbackBufferDataSize
-  * [[VUID-{refpage}-XfbBuffer-06309]]
-    For any given code:XfbBuffer value, define the buffer data size to be
-    smallest number of bytes such that, for all outputs decorated with the
-    same code:XfbBuffer value, the size of the output interface variable
-    plus the code:Offset is less than or equal to the buffer data size.
-    For a given code:Stream, the sum of all the buffer data sizes for all
-    buffers writing to that stream the must: not exceed
-    sname:VkPhysicalDeviceTransformFeedbackPropertiesEXT::pname:maxTransformFeedbackStreamDataSize
-  * [[VUID-{refpage}-OpEmitStreamVertex-06310]]
-    The Stream value to code:OpEmitStreamVertex and
-    code:OpEndStreamPrimitive must: be less than
-    sname:VkPhysicalDeviceTransformFeedbackPropertiesEXT::pname:maxTransformFeedbackStreams
-  * [[VUID-{refpage}-transformFeedbackStreamsLinesTriangles-06311]]
-    If the geometry shader emits to more than one vertex stream and
-    sname:VkPhysicalDeviceTransformFeedbackPropertiesEXT::pname:transformFeedbackStreamsLinesTriangles
-    is ename:VK_FALSE, then execution mode must: be code:OutputPoints
-  * [[VUID-{refpage}-Stream-06312]]
-    The stream number value to code:Stream must: be less than
-    sname:VkPhysicalDeviceTransformFeedbackPropertiesEXT::pname:maxTransformFeedbackStreams
-  * [[VUID-{refpage}-XfbStride-06313]]
-    The XFB Stride value to code:XfbStride must: be less than or equal to
-    sname:VkPhysicalDeviceTransformFeedbackPropertiesEXT::pname:maxTransformFeedbackBufferDataStride
-endif::VK_EXT_transform_feedback[]
-ifdef::VK_VERSION_1_2,VK_EXT_buffer_device_address,VK_KHR_buffer_device_address[]
-  * [[VUID-{refpage}-PhysicalStorageBuffer64-06314]]
-    If the code:PhysicalStorageBuffer64 addressing model is enabled any load
-    or store through a physical pointer type must: be aligned to a multiple
-    of the size of the largest scalar type in the pointed-to type.
-  * [[VUID-{refpage}-PhysicalStorageBuffer64-06315]]
-    If the code:PhysicalStorageBuffer64 addressing model is enabled the
-    pointer value of a memory access instruction must: be at least as
-    aligned as specified by the code:Aligned memory access operand.
-endif::VK_VERSION_1_2,VK_EXT_buffer_device_address,VK_KHR_buffer_device_address[]
-ifdef::VK_NV_cooperative_matrix[]
-  * [[VUID-{refpage}-OpTypeCooperativeMatrixNV-06316]]
-    For code:OpTypeCooperativeMatrixNV, the component type, scope, number of
-    rows, and number of columns must: match one of the matrices in any of
-    the supported slink:VkCooperativeMatrixPropertiesNV.
-  * [[VUID-{refpage}-OpCooperativeMatrixMulAddNV-06317]]
-    For code:OpCooperativeMatrixMulAddNV, the type of code:A must: have
-    slink:VkCooperativeMatrixPropertiesNV::pname:MSize rows and
-    slink:VkCooperativeMatrixPropertiesNV::pname:KSize columns and have a
-    component type that matches
-    slink:VkCooperativeMatrixPropertiesNV::pname:AType.
-  * [[VUID-{refpage}-OpCooperativeMatrixMulAddNV-06318]]
-    For code:OpCooperativeMatrixMulAddNV, the type of code:B must: have
-    slink:VkCooperativeMatrixPropertiesNV::pname:KSize rows and
-    slink:VkCooperativeMatrixPropertiesNV::pname:NSize columns and have a
-    component type that matches
-    slink:VkCooperativeMatrixPropertiesNV::pname:BType.
-  * [[VUID-{refpage}-OpCooperativeMatrixMulAddNV-06319]]
-    For code:OpCooperativeMatrixMulAddNV, the type of code:C must: have
-    slink:VkCooperativeMatrixPropertiesNV::pname:MSize rows and
-    slink:VkCooperativeMatrixPropertiesNV::pname:NSize columns and have a
-    component type that matches
-    slink:VkCooperativeMatrixPropertiesNV::pname:CType.
-  * [[VUID-{refpage}-OpCooperativeMatrixMulAddNV-06320]]
-    For code:OpCooperativeMatrixMulAddNV, the type of code:Result must: have
-    slink:VkCooperativeMatrixPropertiesNV::pname:MSize rows and
-    slink:VkCooperativeMatrixPropertiesNV::pname:NSize columns and have a
-    component type that matches
-    slink:VkCooperativeMatrixPropertiesNV::pname:DType.
-  * [[VUID-{refpage}-OpCooperativeMatrixMulAddNV-06321]]
-    For code:OpCooperativeMatrixMulAddNV, the type of code:A, code:B,
-    code:C, and code:Result must: all have a scope of pname:scope.
-  * [[VUID-{refpage}-OpTypeCooperativeMatrixNV-06322]]
-    code:OpTypeCooperativeMatrixNV and code:OpCooperativeMatrix*
-    instructions must: not be used in shader stages not included in
-    slink:VkPhysicalDeviceCooperativeMatrixPropertiesNV::pname:cooperativeMatrixSupportedStages.
-endif::VK_NV_cooperative_matrix[]
-  * [[VUID-{refpage}-DescriptorSet-06323]]
-    code:DescriptorSet and code:Binding decorations must: obey the
-    constraints on storage class, type, and descriptor type described in
-    <<interfaces-resources-setandbinding,DescriptorSet and Binding
-    Assignment>>
-ifdef::VK_NV_cooperative_matrix[]
-  * [[VUID-{refpage}-OpCooperativeMatrixLoadNV-06324]]
-    For code:OpCooperativeMatrixLoadNV and code:OpCooperativeMatrixStoreNV
-    instructions, the code:Pointer and code:Stride operands must: be aligned
-    to at least the lesser of 16 bytes or the natural alignment of a row or
-    column (depending on code:ColumnMajor) of the matrix (where the natural
-    alignment is the number of columns/rows multiplied by the component
-    size).
-endif::VK_NV_cooperative_matrix[]
-ifdef::VK_KHR_portability_subset[]
-  * [[VUID-{refpage}-shaderSampleRateInterpolationFunctions-06325]]
-    If the `apiext:VK_KHR_portability_subset` extension is enabled, and
-    slink:VkPhysicalDevicePortabilitySubsetFeaturesKHR::pname:shaderSampleRateInterpolationFunctions
-    is ename:VK_FALSE, then `GLSL.std.450` fragment interpolation functions
-    are not supported by the implementation and code:OpCapability must: not
-    be set to code:InterpolationFunction.
-  * [[VUID-{refpage}-tessellationShader-06326]]
-    If <<features-tessellationShader,pname:tessellationShader>> is enabled,
-    and the `apiext:VK_KHR_portability_subset` extension is enabled, and
-    slink:VkPhysicalDevicePortabilitySubsetFeaturesKHR::pname:tessellationIsolines
-    is ename:VK_FALSE, then code:OpExecutionMode must: not be set to
-    code:IsoLines.
-  * [[VUID-{refpage}-tessellationShader-06327]]
-    If <<features-tessellationShader,pname:tessellationShader>> is enabled,
-    and the `apiext:VK_KHR_portability_subset` extension is enabled, and
-    slink:VkPhysicalDevicePortabilitySubsetFeaturesKHR::pname:tessellationPointMode
-    is ename:VK_FALSE, then code:OpExecutionMode must: not be set to
-    code:PointMode.
-endif::VK_KHR_portability_subset[]
-ifdef::VK_KHR_8bit_storage[]
-  * [[VUID-{refpage}-storageBuffer8BitAccess-06328]]
-    If <<features-storageBuffer8BitAccess,pname:storageBuffer8BitAccess>> is
-    ename:VK_FALSE, then objects containing an 8-bit integer element must:
-    not have storage class of *StorageBuffer*, *ShaderRecordBufferKHR*, or
-    *PhysicalStorageBuffer*.
-  * [[VUID-{refpage}-uniformAndStorageBuffer8BitAccess-06329]]
-    If
-    <<features-uniformAndStorageBuffer8BitAccess,pname:uniformAndStorageBuffer8BitAccess>>
-    is ename:VK_FALSE, then objects in the *Uniform* storage class with the
-    *Block* decoration must: not have an 8-bit integer member.
-  * [[VUID-{refpage}-storagePushConstant8-06330]]
-    If <<features-storagePushConstant8,pname:storagePushConstant8>> is
-    ename:VK_FALSE, then objects containing an 8-bit integer element must:
-    not have storage class of *PushConstant*.
-endif::VK_KHR_8bit_storage[]
-ifdef::VK_KHR_16bit_storage[]
-  * [[VUID-{refpage}-storageBuffer16BitAccess-06331]]
-    If <<features-storageBuffer16BitAccess,pname:storageBuffer16BitAccess>>
-    is ename:VK_FALSE, then objects containing 16-bit integer or 16-bit
-    floating-point elements must: not have storage class of *StorageBuffer*,
-    *ShaderRecordBufferKHR*, or *PhysicalStorageBuffer*.
-  * [[VUID-{refpage}-uniformAndStorageBuffer16BitAccess-06332]]
-    If
-    <<features-uniformAndStorageBuffer16BitAccess,pname:uniformAndStorageBuffer16BitAccess>>
-    is ename:VK_FALSE, then objects in the *Uniform* storage class with the
-    *Block* decoration must: not have 16-bit integer or 16-bit
-    floating-point members.
-  * [[VUID-{refpage}-storagePushConstant16-06333]]
-    If <<features-storagePushConstant16,pname:storagePushConstant16>> is
-    ename:VK_FALSE, then objects containing 16-bit integer or 16-bit
-    floating-point elements must: not have storage class of *PushConstant*.
-  * [[VUID-{refpage}-storageInputOutput16-06334]]
-    If <<features-storageInputOutput16,pname:storageInputOutput16>> is
-    ename:VK_FALSE, then objects containing 16-bit integer or 16-bit
-    floating-point elements must: not have storage class of *Input* or
-    *Output*.
-endif::VK_KHR_16bit_storage[]
-ifdef::VK_EXT_shader_atomic_float[]
-ifndef::VK_EXT_shader_atomic_float2[]
-  * [[VUID-{refpage}-None-06335]]
-    <<features-shaderBufferFloat32Atomics,shaderBufferFloat32Atomics>>, or
-    <<features-shaderBufferFloat32AtomicAdd,shaderBufferFloat32AtomicAdd>>,
-    or <<features-shaderSharedFloat32Atomics,shaderSharedFloat32Atomics>>,
-    or
-    <<features-shaderSharedFloat32AtomicAdd,shaderSharedFloat32AtomicAdd>>,
-    or <<features-shaderImageFloat32Atomics,shaderImageFloat32Atomics>>, or
-    <<features-shaderImageFloat32AtomicAdd,shaderImageFloat32AtomicAdd>>
-    must: be enabled for 32-bit floating point atomic operations
-  * [[VUID-{refpage}-None-06336]]
-    <<features-shaderBufferFloat64Atomics,shaderBufferFloat64Atomics>>, or
-    <<features-shaderBufferFloat64AtomicAdd,shaderBufferFloat64AtomicAdd>>,
-    or <<features-shaderSharedFloat64Atomics,shaderSharedFloat64Atomics>>,
-    or
-    <<features-shaderSharedFloat64AtomicAdd,shaderSharedFloat64AtomicAdd>>
-    must: be enabled for 64-bit floating point atomic operations
-endif::VK_EXT_shader_atomic_float2[]
-endif::VK_EXT_shader_atomic_float[]
-ifdef::VK_EXT_shader_atomic_float2[]
-  * [[VUID-{refpage}-None-06337]]
-    <<features-shaderBufferFloat16Atomics,shaderBufferFloat16Atomics>>, or
-    <<features-shaderBufferFloat16AtomicAdd,shaderBufferFloat16AtomicAdd>>,
-    or
-    <<features-shaderBufferFloat16AtomicMinMax,shaderBufferFloat16AtomicMinMax>>,
-    or <<features-shaderSharedFloat16Atomics,shaderSharedFloat16Atomics>>,
-    or
-    <<features-shaderSharedFloat16AtomicAdd,shaderSharedFloat16AtomicAdd>>,
-    or
-    <<features-shaderSharedFloat16AtomicMinMax,shaderSharedFloat16AtomicMinMax>>
-    must: be enabled for 16-bit floating point atomic operations
-  * [[VUID-{refpage}-None-06338]]
-    <<features-shaderBufferFloat32Atomics,shaderBufferFloat32Atomics>>, or
-    <<features-shaderBufferFloat32AtomicAdd,shaderBufferFloat32AtomicAdd>>,
-    or <<features-shaderSharedFloat32Atomics,shaderSharedFloat32Atomics>>,
-    or
-    <<features-shaderSharedFloat32AtomicAdd,shaderSharedFloat32AtomicAdd>>,
-    or <<features-shaderImageFloat32Atomics,shaderImageFloat32Atomics>>, or
-    <<features-shaderImageFloat32AtomicAdd,shaderImageFloat32AtomicAdd>> or
-    <<features-shaderBufferFloat32AtomicMinMax,shaderBufferFloat32AtomicMinMax>>,
-    or
-    <<features-shaderSharedFloat32AtomicMinMax,shaderSharedFloat32AtomicMinMax>>,
-    or
-    <<features-shaderImageFloat32AtomicMinMax,shaderImageFloat32AtomicMinMax>>
-    must: be enabled for 32-bit floating point atomic operations
-  * [[VUID-{refpage}-None-06339]]
-    <<features-shaderBufferFloat64Atomics,shaderBufferFloat64Atomics>>, or
-    <<features-shaderBufferFloat64AtomicAdd,shaderBufferFloat64AtomicAdd>>,
-    or <<features-shaderSharedFloat64Atomics,shaderSharedFloat64Atomics>>,
-    or
-    <<features-shaderSharedFloat64AtomicAdd,shaderSharedFloat64AtomicAdd>>,
-    or
-    <<features-shaderBufferFloat64AtomicMinMax,shaderBufferFloat64AtomicMinMax>>,
-    or
-    <<features-shaderSharedFloat64AtomicMinMax,shaderSharedFloat64AtomicMinMax>>,
-    must: be enabled for 64-bit floating point atomic operations
-endif::VK_EXT_shader_atomic_float2[]
-  * [[VUID-{refpage}-NonWritable-06340]]
-    If <<features-fragmentStoresAndAtomics, fragmentStoresAndAtomics>> is
-    not enabled, then all storage image, storage texel buffer, and storage
-    buffer variables in the fragment stage must: be decorated with the
-    code:NonWritable decoration.
-  * [[VUID-{refpage}-NonWritable-06341]]
-    If <<features-vertexPipelineStoresAndAtomics,
-    vertexPipelineStoresAndAtomics>> is not enabled, then all storage image,
-    storage texel buffer, and storage buffer variables in the vertex,
-    tessellation, and geometry stages must: be decorated with the
-    code:NonWritable decoration.
-  * [[VUID-{refpage}-None-06342]]
-    If <<limits-subgroupQuadOperationsInAllStages,
-    subgroupQuadOperationsInAllStages>> is ename:VK_FALSE, then
-    <<features-subgroup-quad,quad subgroup operations>> must: not be used
-    except for in fragment and compute stages.
-ifdef::VK_VERSION_1_1[]
-  * [[VUID-{refpage}-None-06343]]
-    <<shaders-group-operations,Group operations>> with
-    <<shaders-scope-subgroup, subgroup scope>> must: not be used if the
-    shader stage is not in <<limits-subgroupSupportedStages,
-    subgroupSupportedStages>>.
-endif::VK_VERSION_1_1[]
-  * [[VUID-{refpage}-Offset-06344]]
-    The first element of the code:Offset operand of code:InterpolateAtOffset
-    must: be greater than or equal to:
-    {empty}:: [eq]#frag~width~ {times} <<limits-minInterpolationOffset,
-              pname:minInterpolationOffset>>#
-+
-where [eq]#frag~width~# is the width of the current fragment in pixels.
-  * [[VUID-{refpage}-Offset-06345]]
-    The first element of the code:Offset operand of code:InterpolateAtOffset
-    must: be less than or equal to:
-    {empty}:: [eq]#frag~width~ {times} (<<limits-maxInterpolationOffset,
-              pname:maxInterpolationOffset>> {plus} ULP ) - ULP#
-+
-where [eq]#frag~width~# is the width of the current fragment in pixels and
-[eq]#ULP = 1 /
-2^<<limits-subPixelInterpolationOffsetBits,pname:subPixelInterpolationOffsetBits>>^#.
-  * [[VUID-{refpage}-Offset-06346]]
-    The second element of the code:Offset operand of
-    code:InterpolateAtOffset must: be greater than or equal to:
-    {empty}:: [eq]#frag~height~ {times} <<limits-minInterpolationOffset,
-              pname:minInterpolationOffset>>#
-+
-where [eq]#frag~height~# is the height of the current fragment in pixels.
-  * [[VUID-{refpage}-Offset-06347]]
-    The second element of the code:Offset operand of
-    code:InterpolateAtOffset must: be less than or equal to:
-    {empty}:: [eq]#frag~height~ {times} (<<limits-maxInterpolationOffset,
-              pname:maxInterpolationOffset>> {plus} ULP ) - ULP#
-+
-where [eq]#frag~height~# is the height of the current fragment in pixels and
-[eq]#ULP = 1 /
-2^<<limits-subPixelInterpolationOffsetBits,pname:subPixelInterpolationOffsetBits>>^#.
-
-ifdef::VK_KHR_ray_query[]
-  * [[VUID-{refpage}-OpRayQueryInitializeKHR-06348]]
-    For code:OpRayQueryInitializeKHR instructions, all components of the
-    code:RayOrigin and code:RayDirection operands must: be finite
-    floating-point values.
-  * [[VUID-{refpage}-OpRayQueryInitializeKHR-06349]]
-    For code:OpRayQueryInitializeKHR instructions, the code:RayTmin and
-    code:RayTmax operands must: be non-negative floating-point values.
-  * [[VUID-{refpage}-OpRayQueryInitializeKHR-06350]]
-    For code:OpRayQueryInitializeKHR instructions, the code:RayTmin operand
-    must: be less than or equal to the code:RayTmax operand.
-  * [[VUID-{refpage}-OpRayQueryInitializeKHR-06351]]
-    For code:OpRayQueryInitializeKHR instructions, code:RayOrigin,
-    code:RayDirection, code:RayTmin, and code:RayTmax operands must: not
-    contain NaNs.
-  * [[VUID-{refpage}-OpRayQueryInitializeKHR-06352]]
-    For code:OpRayQueryInitializeKHR instructions, code:Acceleration
-    code:Structure must: be an acceleration structure built as a
-    <<acceleration-structure-top-level, top-level acceleration structure>>.
-  * [[VUID-{refpage}-OpRayQueryGenerateIntersectionKHR-06353]]
-    For code:OpRayQueryGenerateIntersectionKHR instructions, code:Hit code:T
-    must: satisfy the condition [eq]##code:RayTmin {leq} code:Hit code:T
-    {leq} code:RayTmax##, where code:RayTmin is equal to the value returned
-    by code:OpRayQueryGetRayTMinKHR with the same ray query object, and
-    code:RayTmax is equal to the value of code:OpRayQueryGetIntersectionTKHR
-    for the current committed intersection with the same ray query object.
-ifdef::VK_NV_ray_tracing_motion_blur[]
-  * [[VUID-{refpage}-OpRayQueryGenerateIntersectionKHR-06354]]
-    For code:OpRayQueryGenerateIntersectionKHR instructions,
-    code:Acceleration code:Structure must: not be built with
-    ename:VK_BUILD_ACCELERATION_STRUCTURE_MOTION_BIT_NV in pname:flags.
-endif::VK_NV_ray_tracing_motion_blur[]
-endif::VK_KHR_ray_query[]
-ifdef::VK_KHR_ray_tracing_pipeline[]
-  * [[VUID-{refpage}-OpTraceRayKHR-06355]]
-    For code:OpTraceRayKHR instructions, all components of the
-    code:RayOrigin and code:RayDirection operands must: be finite
-    floating-point values.
-  * [[VUID-{refpage}-OpTraceRayKHR-06356]]
-    For code:OpTraceRayKHR instructions, the code:RayTmin and code:RayTmax
-    operands must: be non-negative floating-point values.
-  * [[VUID-{refpage}-OpTraceRayKHR-06357]]
-    For code:OpTraceRayKHR instructions, the code:RayTmin operand must: be
-    less than or equal to the code:RayTmax operand.
-  * [[VUID-{refpage}-OpTraceRayKHR-06358]]
-    For code:OpTraceRayKHR instructions, code:RayOrigin, code:RayDirection,
-    code:RayTmin, and code:RayTmax operands must: not contain NaNs.
-  * [[VUID-{refpage}-OpTraceRayKHR-06359]]
-    For code:OpTraceRayKHR instructions, code:Acceleration code:Structure
-    must: be an acceleration structure built as a
-    <<acceleration-structure-top-level, top-level acceleration structure>>.
-endif::VK_KHR_ray_tracing_pipeline[]
-ifdef::VK_NV_ray_tracing_motion_blur[]
-  * [[VUID-{refpage}-OpTraceRayKHR-06360]]
-    For code:OpTraceRayKHR instructions, if code:Acceleration code:Structure
-    was built with ename:VK_BUILD_ACCELERATION_STRUCTURE_MOTION_BIT_NV in
-    pname:flags, the pipeline must: have been created with
-    ename:VK_PIPELINE_CREATE_RAY_TRACING_ALLOW_MOTION_BIT_NV set
-  * [[VUID-{refpage}-OpTraceRayMotionNV-06361]]
-    For code:OpTraceRayMotionNV instructions, all components of the
-    code:RayOrigin and code:RayDirection operands must: be finite
-    floating-point values.
-  * [[VUID-{refpage}-OpTraceRayMotionNV-06362]]
-    For code:OpTraceRayMotionNV instructions, the code:RayTmin and
-    code:RayTmax operands must: be non-negative floating-point values.
-  * [[VUID-{refpage}-OpTraceRayMotionNV-06363]]
-    For code:OpTraceRayMotionNV instructions, the code:RayTmin operand must:
-    be less than or equal to the code:RayTmax operand.
-  * [[VUID-{refpage}-OpTraceRayMotionNV-06364]]
-    For code:OpTraceRayMotionNV instructions, code:RayOrigin,
-    code:RayDirection, code:RayTmin, and code:RayTmax operands must: not
-    contain NaNs.
-  * [[VUID-{refpage}-OpTraceRayMotionNV-06365]]
-    For code:OpTraceRayMotionNV instructions, code:Acceleration
-    code:Structure must: be an acceleration structure built as a
-    <<acceleration-structure-top-level, top-level acceleration structure>>
-    with ename:VK_BUILD_ACCELERATION_STRUCTURE_MOTION_BIT_NV in pname:flags
-  * [[VUID-{refpage}-OpTraceRayMotionNV-06366]]
-    For code:OpTraceRayMotionNV instructions the code:time operand must: be
-    between 0.0 and 1.0
-  * [[VUID-{refpage}-OpTraceRayMotionNV-06367]]
-    For code:OpTraceRayMotionNV instructions the pipeline must: have been
-    created with ename:VK_PIPELINE_CREATE_RAY_TRACING_ALLOW_MOTION_BIT_NV
-    set
-endif::VK_NV_ray_tracing_motion_blur[]
-  * [[VUID-{refpage}-x-06429]]
-    The pname:x size in code:LocalSize or code:LocalSizeId must: be less
-    than or equal to
-    sname:VkPhysicalDeviceLimits::pname:maxComputeWorkGroupSize[0]
-  * [[VUID-{refpage}-y-06430]]
-    The pname:y size in code:LocalSize or code:LocalSizeId must: be less
-    than or equal to
-    sname:VkPhysicalDeviceLimits::pname:maxComputeWorkGroupSize[1]
-  * [[VUID-{refpage}-z-06431]]
-    The pname:z size in code:LocalSize or code:LocalSizeId must: be less
-    than or equal to
-    sname:VkPhysicalDeviceLimits::pname:maxComputeWorkGroupSize[2]
-  * [[VUID-{refpage}-x-06432]]
-    The product of pname:x size, pname:y size, and pname:z size in
-    code:LocalSize or code:LocalSizeId must: be less than or equal to
-    sname:VkPhysicalDeviceLimits::pname:maxComputeWorkGroupInvocations
-ifndef::VK_KHR_maintenance4[]
-  * [[VUID-{refpage}-LocalSizeId-06433]]
-    The execution mode code:LocalSizeId must: not be used
-endif::VK_KHR_maintenance4[]
-ifdef::VK_KHR_maintenance4[]
-  * [[VUID-{refpage}-LocalSizeId-06434]]
-    if execution mode code:LocalSizeId is used, <<features-maintenance4,
-    pname:maintenance4>> must: be enabled
-endif::VK_KHR_maintenance4[]
-ifdef::VK_KHR_zero_initialize_workgroup_memory[]
-  * [[VUID-{refpage}-shaderZeroInitializeWorkgroupMemory-06372]]
-    If
-    <<features-shaderZeroInitializeWorkgroupMemory,pname:shaderZeroInitializeWorkgroupMemory>>
-    is not enabled, any code:OpVariable with *Workgroup* as its *Storage
-    Class* must: not have an code:Initializer operand
-endif::VK_KHR_zero_initialize_workgroup_memory[]
-ifndef::VK_KHR_zero_initialize_workgroup_memory[]
-  * [[VUID-{refpage}-OpVariable-06373]]
-    Any code:OpVariable with *Workgroup* as its *Storage Class* must: not
-    have an code:Initializer operand
-endif::VK_KHR_zero_initialize_workgroup_memory[]
-ifdef::VK_KHR_workgroup_memory_explicit_layout[]
-  * [[VUID-{refpage}-workgroupMemoryExplicitLayout8BitAccess-06374]]
-    If
-    <<features-workgroupMemoryExplicitLayout8BitAccess,pname:workgroupMemoryExplicitLayout8BitAccess>>
-    is ename:VK_FALSE, objects in the code:Workgroup storage class with the
-    code:Block decoration must: not contain 8-bit integer members.
-  * [[VUID-{refpage}-workgroupMemoryExplicitLayout16BitAccess-06375]]
-    If
-    <<features-workgroupMemoryExplicitLayout16BitAccess,pname:workgroupMemoryExplicitLayout16BitAccess>>
-    is ename:VK_FALSE, objects in the code:Workgroup storage class with the
-    code:Block decoration must: not contain 16-bit integer or 16-bit
-    floating-point members.
-endif::VK_KHR_workgroup_memory_explicit_layout[]
-  * [[VUID-{refpage}-OpImage-06376]]
-    If an code:OpImage*Gather operation has an image operand of code:Offset,
-    code:ConstOffset, or code:ConstOffsets the offset value must: be greater
-    than or equal to <<limits-minTexelGatherOffset,minTexelGatherOffset>>
-  * [[VUID-{refpage}-OpImage-06377]]
-    If an code:OpImage*Gather operation has an image operand of code:Offset,
-    code:ConstOffset, or code:ConstOffsets the offset value must: be less
-    than or equal to <<limits-maxTexelGatherOffset,maxTexelGatherOffset>>
-  * [[VUID-{refpage}-OpImageSample-06435]]
-    If an code:OpImageSample* or code:OpImageFetch* operation has an image
-    operand of code:ConstOffset then the offset value must: be greater than
-    or equal to <<limits-minTexelOffset,minTexelOffset>>
-  * [[VUID-{refpage}-OpImageSample-06436]]
-    If an code:OpImageSample* or code:OpImageFetch* operation has an image
-    operand of code:ConstOffset then the offset value must: be less than or
-    equal to <<limits-maxTexelOffset,maxTexelOffset>>
-ifdef::VK_QCOM_render_pass_shader_resolve[]
-  * [[VUID-{refpage}-SampleRateShading-06378]]
-    If the subpass description contains
-    ename:VK_SUBPASS_DESCRIPTION_FRAGMENT_REGION_BIT_QCOM, then the SPIR-V
-    fragment shader Capability code:SampleRateShading must: not be enabled.
-endif::VK_QCOM_render_pass_shader_resolve[]
-ifdef::VK_KHR_shader_subgroup_uniform_control_flow[]
-  * [[VUID-{refpage}-SubgroupUniformControlFlowKHR-06379]]
-    The execution mode code:SubgroupUniformControlFlowKHR must: not be
-    applied to an entry point unless
-    <<features-shaderSubgroupUniformControlFlow,
-    pname:shaderSubgroupUniformControlFlow>> is enabled and the
-    corresponding shader stage bit is set in subgroup
-    <<limits-subgroup-supportedStages, pname:supportedStages>> and the entry
-    point does not execute any <<ray-tracing-repack,_invocation repack
-    instructions_>>.
-endif::VK_KHR_shader_subgroup_uniform_control_flow[]
-****
---
-
-[[spirvenv-precision-operation]]
-== Precision and Operation of SPIR-V Instructions
-
-The following rules apply to half, single, and double-precision floating
-point instructions:
-
-  * Positive and negative infinities and positive and negative zeros are
-    generated as dictated by <<ieee-754,IEEE 754>>, but subject to the
-    precisions allowed in the following table.
-  * Dividing a non-zero by a zero results in the appropriately signed
-    <<ieee-754,IEEE 754>> infinity.
-  * Signaling [eq]##NaN##s are not required to be generated and exceptions
-    are never raised.
-    Signaling [eq]##NaN## may: be converted to quiet [eq]##NaN##s values by
-    any floating point instruction.
-  * By default, the implementation may: perform optimizations on half,
-    single, or double-precision floating-point instructions that ignore sign
-    of a zero, or assume that arguments and results are not NaNs or
-    infinities.
-ifdef::VK_VERSION_1_2,VK_KHR_shader_float_controls[]
-    If the entry point is declared with the code:SignedZeroInfNanPreserve
-    execution mode, then NaNs, infinities, and the sign of zero must: not be
-    ignored.
-  ** The following core SPIR-V instructions must: respect the
-     code:SignedZeroInfNanPreserve execution mode: code:OpPhi,
-     code:OpSelect, code:OpReturnValue, code:OpVectorExtractDynamic,
-     code:OpVectorInsertDynamic, code:OpVectorShuffle,
-     code:OpCompositeConstruct, code:OpCompositeExtract,
-     code:OpCompositeInsert, code:OpCopyObject, code:OpTranspose,
-     code:OpFConvert, code:OpFNegate, code:OpFAdd, code:OpFSub, code:OpFMul,
-     code:OpStore.
-     This execution mode must: also be respected by code:OpLoad except for
-     loads from the code:Input storage class in the fragment shader stage
-     with the floating-point result type.
-     Other SPIR-V instructions may: also respect the
-     code:SignedZeroInfNanPreserve execution mode.
-endif::VK_VERSION_1_2,VK_KHR_shader_float_controls[]
-  * The following instructions must: not flush denormalized values:
-    code:OpConstant, code:OpConstantComposite, code:OpSpecConstant,
-    code:OpSpecConstantComposite, code:OpLoad, code:OpStore, code:OpBitcast,
-    code:OpPhi, code:OpSelect, code:OpFunctionCall, code:OpReturnValue,
-    code:OpVectorExtractDynamic, code:OpVectorInsertDynamic,
-    code:OpVectorShuffle, code:OpCompositeConstruct,
-    code:OpCompositeExtract, code:OpCompositeInsert, code:OpCopyMemory,
-    code:OpCopyObject.
-ifndef::VK_VERSION_1_2,VK_KHR_shader_float_controls[]
-  * Any denormalized value input into a shader or potentially generated by
-    any instruction in a shader (except those listed above) may: be flushed
-    to 0.
-  * The rounding mode cannot: be set, and results will be
-    <<spirvenv-correctly-rounded, correctly rounded>>, as described below.
-  * [eq]##NaN##s may: not be generated.
-    Instructions that operate on a [eq]#NaN# may: not result in a [eq]#NaN#.
-endif::VK_VERSION_1_2,VK_KHR_shader_float_controls[]
-ifdef::VK_VERSION_1_2,VK_KHR_shader_float_controls[]
-  * Denormalized values are supported.
-  ** By default, any half, single, or double-precision denormalized value
-     input into a shader or potentially generated by any instruction (except
-     those listed above) or any extended instructions for GLSL in a shader
-     may: be flushed to zero.
-  ** If the entry point is declared with the code:DenormFlushToZero
-     execution mode then for the affected instuctions the denormalized
-     result must: be flushed to zero and the denormalized operands may: be
-     flushed to zero.
-     Denormalized values obtained via unpacking an integer into a vector of
-     values with smaller bit width and interpreting those values as
-     floating-point numbers must: be flushed to zero.
-  ** The following core SPIR-V instructions must: respect the
-     code:DenormFlushToZero execution mode: code:OpSpecConstantOp (with
-     opcode code:OpFConvert), code:OpFConvert, code:OpFNegate, code:OpFAdd,
-     code:OpFSub, code:OpFMul, code:OpFDiv, code:OpFRem, code:OpFMod,
-     code:OpVectorTimesScalar, code:OpMatrixTimesScalar,
-     code:OpVectorTimesMatrix, code:OpMatrixTimesVector,
-     code:OpMatrixTimesMatrix, code:OpOuterProduct, code:OpDot; and the
-     following extended instructions for GLSL: code:Round, code:RoundEven,
-     code:Trunc, code:FAbs, code:Floor, code:Ceil, code:Fract, code:Radians,
-     code:Degrees, code:Sin, code:Cos, code:Tan, code:Asin, code:Acos,
-     code:Atan, code:Sinh, code:Cosh, code:Tanh, code:Asinh, code:Acosh,
-     code:Atanh, code:Atan2, code:Pow, code:Exp, code:Log, code:Exp2,
-     code:Log2, code:Sqrt, code:InverseSqrt, code:Determinant,
-     code:MatrixInverse, code:Modf, code:ModfStruct, code:FMin, code:FMax,
-     code:FClamp, code:FMix, code:Step, code:SmoothStep, code:Fma,
-     code:UnpackHalf2x16, code:UnpackDouble2x32, code:Length, code:Distance,
-     code:Cross, code:Normalize, code:FaceForward, code:Reflect,
-     code:Refract, code:NMin, code:NMax, code:NClamp.
-     Other SPIR-V instructions (except those excluded above) may: also flush
-     denormalized values.
-  ** The following core SPIR-V instructions must: respect the
-     code:DenormPreserve execution mode: code:OpTranspose,
-     code:OpSpecConstantOp, code:OpFConvert, code:OpFNegate, code:OpFAdd,
-     code:OpFSub, code:OpFMul, code:OpVectorTimesScalar,
-     code:OpMatrixTimesScalar, code:OpVectorTimesMatrix,
-     code:OpMatrixTimesVector, code:OpMatrixTimesMatrix,
-     code:OpOuterProduct, code:OpDot, code:OpFOrdEqual, code:OpFUnordEqual,
-     code:OpFOrdNotEqual, code:OpFUnordNotEqual, code:OpFOrdLessThan,
-     code:OpFUnordLessThan, code:OpFOrdGreaterThan,
-     code:OpFUnordGreaterThan, code:OpFOrdLessThanEqual,
-     code:OpFUnordLessThanEqual, code:OpFOrdGreaterThanEqual,
-     code:OpFUnordGreaterThanEqual; and the following extended instructions
-     for GLSL: code:FAbs, code:FSign, code:Radians, code:Degrees, code:FMin,
-     code:FMax, code:FClamp, code:FMix, code:Fma, code:PackHalf2x16,
-     code:PackDouble2x32, code:UnpackHalf2x16, code:UnpackDouble2x32,
-     code:NMin, code:NMax, code:NClamp.
-     Other SPIR-V instructions may: also preserve denorm values.
-endif::VK_VERSION_1_2,VK_KHR_shader_float_controls[]
-
-The precision of double-precision instructions is at least that of single
-precision.
-
-The precision of operations is defined either in terms of rounding, as an
-error bound in ULP, or as inherited from a formula as follows.
-
-[[spirvenv-correctly-rounded]]
-.Correctly Rounded
-Operations described as "`correctly rounded`" will return the infinitely
-precise result, [eq]#x#, rounded so as to be representable in
-floating-point.
-ifdef::VK_VERSION_1_2,VK_KHR_shader_float_controls[]
-The rounding mode is not specified, unless the entry point is declared with
-the code:RoundingModeRTE or the code:RoundingModeRTZ execution mode.
-These execution modes affect only correctly rounded SPIR-V instructions.
-These execution modes do not affect code:OpQuantizeToF16.
-If the rounding mode is not specified then this rounding is implementation
-specific, subject to the following rules.
-endif::VK_VERSION_1_2,VK_KHR_shader_float_controls[]
-ifndef::VK_VERSION_1_2,VK_KHR_shader_float_controls[]
-The rounding mode used is not defined but must: obey the following rules.
-endif::VK_VERSION_1_2,VK_KHR_shader_float_controls[]
-If [eq]#x# is exactly representable then [eq]#x# will be returned.
-Otherwise, either the floating-point value closest to and no less than
-[eq]#x# or the value closest to and no greater than [eq]#x# will be
-returned.
-
-.ULP
-Where an error bound of [eq]#n# ULP (units in the last place) is given, for
-an operation with infinitely precise result #x# the value returned must: be
-in the range [eq]#[x - n {times} ulp(x), x {plus} n {times} ulp(x)]#.
-The function [eq]#ulp(x)# is defined as follows:
-
-  {empty}:: If there exist non-equal floating-point numbers #a# and #b# such
-    that [eq]#a {leq} x {leq} b# then [eq]#ulp(x)# is the minimum possible
-    distance between such numbers, latexmath:[ulp(x) = \mathrm{min}_{a,b} |
-    b - a |].
-    If such numbers do not exist then [eq]#ulp(x)# is defined to be the
-    difference between the two finite floating-point numbers nearest to
-    [eq]#x#.
-
-Where the range of allowed return values includes any value of magnitude
-larger than that of the largest representable finite floating-point number,
-operations may:, additionally, return either an infinity of the appropriate
-sign or the finite number with the largest magnitude of the appropriate
-sign.
-If the infinitely precise result of the operation is not mathematically
-defined then the value returned is undefined:.
-
-.Inherited From ...
-Where an operation's precision is described as being inherited from a
-formula, the result returned must: be at least as accurate as the result of
-computing an approximation to [eq]#x# using a formula equivalent to the
-given formula applied to the supplied inputs.
-Specifically, the formula given may be transformed using the mathematical
-associativity, commutativity and distributivity of the operators involved to
-yield an equivalent formula.
-The SPIR-V precision rules, when applied to each such formula and the given
-input values, define a range of permitted values.
-If [eq]#NaN# is one of the permitted values then the operation may return
-any result, otherwise let the largest permitted value in any of the ranges
-be [eq]#F~max~# and the smallest be [eq]#F~min~#.
-The operation must: return a value in the range [eq]#[x - E, x {plus} E]#
-where latexmath:[E = \mathrm{max} \left( | x - F_{\mathrm{min}} |, | x -
-F_{\mathrm{max}} | \right) ].
-ifdef::VK_VERSION_1_2,VK_KHR_shader_float_controls[]
-If the entry point is declared with the code:DenormFlushToZero execution
-mode, then any intermediate denormal value(s) while evaluating the formula
-may: be flushed to zero.
-Denormal final results must: be flushed to zero.
-If the entry point is declared with the code:DenormPreserve execution mode,
-then denormals must: be preserved throughout the formula.
-endif::VK_VERSION_1_2,VK_KHR_shader_float_controls[]
-
-ifdef::VK_VERSION_1_2,VK_KHR_shader_float16_int8[]
-For half- (16 bit) and single- (32 bit) precision instructions, precisions
-are required: to be at least as follows:
-
-.Precision of core SPIR-V Instructions
-[options="header", cols=",,"]
-|====
-| Instruction
- | Single precision, unless decorated with RelaxedPrecision | Half precision
-| code:OpFAdd
-2+| Correctly rounded.
-| code:OpFSub
-2+| Correctly rounded.
-| code:OpFMul, code:OpVectorTimesScalar, code:OpMatrixTimesScalar
-2+| Correctly rounded.
-| code:OpDot(x, y)
-2+a| Inherited from latexmath:[\sum_{i = 0}^{n - 1} x_{i} \times y_{i}].
-| code:OpFOrdEqual, code:OpFUnordEqual
-2+| Correct result.
-| code:OpFOrdLessThan, code:OpFUnordLessThan
-2+| Correct result.
-| code:OpFOrdGreaterThan, code:OpFUnordGreaterThan
-2+| Correct result.
-| code:OpFOrdLessThanEqual, code:OpFUnordLessThanEqual
-2+| Correct result.
-| code:OpFOrdGreaterThanEqual, code:OpFUnordGreaterThanEqual
-2+| Correct result.
-| code:OpFDiv(x,y)
- | 2.5 ULP for [eq]#{vert}y{vert}# in the range [2^-126^, 2^126^].   | 2.5 ULP for [eq]#{vert}y{vert}# in the range [2^-14^, 2^14^].
-| code:OpFRem(x,y)
-2+| Inherited from [eq]#x - y {times} trunc(x/y)#.
-| code:OpFMod(x,y)
-2+| Inherited from [eq]#x - y {times} floor(x/y)#.
-| conversions between types
-2+| Correctly rounded.
-|====
-
-[NOTE]
-.Note
-====
-The code:OpFRem and code:OpFMod instructions use cheap approximations of
-remainder, and the error can be large due to the discontinuity in trunc()
-and floor().
-This can produce mathematically unexpected results in some cases, such as
-FMod(x,x) computing x rather than 0, and can also cause the result to have a
-different sign than the infinitely precise result.
-====
-
-.Precision of GLSL.std.450 Instructions
-[options="header", cols=",,"]
-|====
-|Instruction
-  | Single precision, unless decorated with RelaxedPrecision | Half precision
-| code:fma()
-2+| Inherited from code:OpFMul followed by code:OpFAdd.
-| code:exp(x),  code:exp2(x)
- a| latexmath:[3 + 2 \times \vert x \vert] ULP.             a| latexmath:[1 + 2 \times \vert x \vert] ULP.
-| code:log(),  code:log2()
- a| 3 ULP outside the range latexmath:[[0.5, 2.0\]]. Absolute error < latexmath:[2^{-21}] inside the range latexmath:[[0.5, 2.0\]].
- a| 3 ULP outside the range latexmath:[[0.5, 2.0\]]. Absolute error < latexmath:[2^{-7}] inside the range latexmath:[[0.5, 2.0\]].
-| code:pow(x, y)
-2+| Inherited from code:exp2(y {times} code:log2(x)).
-| code:sqrt()
-2+| Inherited from 1.0 / code:inversesqrt().
-| code:inversesqrt()
-2+| 2 ULP.
-| code:radians(x)
-2+a| Inherited from latexmath:[x \times \frac{\pi}{180}].
-| code:degrees(x)
-2+a| Inherited from latexmath:[x \times \frac{180}{\pi}].
-| code:sin()
-  a| Absolute error latexmath:[\leq 2^{-11}] inside the range latexmath:[[-\pi, \pi\]]. a| Absolute error latexmath:[\leq 2^{-7}] inside the range latexmath:[[-\pi, \pi\]].
-| code:cos()
-  a| Absolute error latexmath:[\leq 2^{-11}] inside the range latexmath:[[-\pi, \pi\]]. a| Absolute error latexmath:[\leq 2^{-7}] inside the range latexmath:[[-\pi, \pi\]].
-| code:tan()
-2+a| Inherited from latexmath:[\frac{\sin()}{\cos()}].
-| code:asin(x)
-2+a| Inherited from latexmath:[\mathrm{atan2}(x, sqrt(1.0 - x \times x))].
-| code:acos(x)
-2+a| Inherited from latexmath:[\mathrm{atan2}(sqrt(1.0 - x \times x), x)].
-| code:atan(), code:atan2()
-   | 4096 ULP                                                      | 5 ULP.
-| code:sinh(x)
-2+a| Inherited from latexmath:[(\exp(x) - \exp(-x)) \times 0.5].
-| code:cosh(x)
-2+a| Inherited from latexmath:[(\exp(x) + \exp(-x)) \times 0.5].
-| code:tanh()
-2+a| Inherited from latexmath:[\frac{\sinh()}{\cosh()}].
-| code:asinh(x)
-2+a| Inherited from latexmath:[\log(x + sqrt(x \times x + 1.0))].
-| code:acosh(x)
-2+a| Inherited from latexmath:[\log(x + sqrt(x \times x - 1.0))].
-| code:atanh(x)
-2+a| Inherited from latexmath:[\log(\frac{1.0 + x}{1.0 - x}) \times 0.5].
-| code:frexp()
-2+| Correctly rounded.
-| code:ldexp()
-2+| Correctly rounded.
-| code:length(x)
-2+a| Inherited from latexmath:[sqrt(dot(x, x))].
-| code:distance(x, y)
-2+a| Inherited from latexmath:[length(x - y)].
-| code:cross()
-2+| Inherited from [eq]#code:OpFSub(code:OpFMul, code:OpFMul)#.
-| code:normalize(x)
-2+a| Inherited from latexmath:[\frac{x}{length(x)}].
-| code:faceforward(N, I, NRef)
-2+| Inherited from [eq]#code:dot(NRef, I) < 0.0 ? N : -N#.
-| code:reflect(x, y)
-2+| Inherited from [eq]#x - 2.0 {times} code:dot(y, x) {times} y#.
-| code:refract(I, N, eta)
-2+| Inherited from [eq]#k < 0.0 ? 0.0 : eta {times} I - (eta {times} code:dot(N, I) {plus} code:sqrt(k)) {times} N#, where [eq]#k = 1 - eta {times} eta {times} (1.0 - code:dot(N, I) {times} code:dot(N, I))#.
-| code:round
-2+| Correctly rounded.
-| code:roundEven
-2+| Correctly rounded.
-| code:trunc
-2+| Correctly rounded.
-| code:fabs
-2+| Correctly rounded.
-| code:fsign
-2+| Correctly rounded.
-| code:floor
-2+| Correctly rounded.
-| code:ceil
-2+| Correctly rounded.
-| code:fract
-2+| Correctly rounded.
-| code:modf
-2+| Correctly rounded.
-| code:fmin
-2+| Correctly rounded.
-| code:fmax
-2+| Correctly rounded.
-| code:fclamp
-2+| Correctly rounded.
-| code:fmix(x, y, a)
-2+a| Inherited from latexmath:[x \times (1.0 - a) + y \times a].
-| code:step
-2+| Correctly rounded.
-| code:smoothStep(edge0, edge1, x)
-2+a| Inherited from latexmath:[t \times t \times (3.0 - 2.0 \times t)],
-where latexmath:[t = clamp(\frac{x - edge0}{edge1 - edge0}, 0.0, 1.0)].
-| code:nmin
-2+| Correctly rounded.
-| code:nmax
-2+| Correctly rounded.
-| code:nclamp
-2+| Correctly rounded.
-|====
-endif::VK_VERSION_1_2,VK_KHR_shader_float16_int8[]
-
-ifndef::VK_VERSION_1_2,VK_KHR_shader_float16_int8[]
-For single precision (32 bit) instructions, precisions are required: to be
-at least as follows, unless decorated with RelaxedPrecision:
-
-.Precision of core SPIR-V Instructions
-[options="header"]
-|====
-| Instruction                                                     | Precision
-| code:OpFAdd                                                     | Correctly rounded.
-| code:OpFSub                                                     | Correctly rounded.
-| code:OpFMul, code:OpVectorTimesScalar, code:OpMatrixTimesScalar | Correctly rounded.
-| code:OpFOrdEqual, code:OpFUnordEqual                            | Correct result.
-| code:OpFOrdLessThan, code:OpFUnordLessThan                      | Correct result.
-| code:OpFOrdGreaterThan, code:OpFUnordGreaterThan                | Correct result.
-| code:OpFOrdLessThanEqual, code:OpFUnordLessThanEqual            | Correct result.
-| code:OpFOrdGreaterThanEqual, code:OpFUnordGreaterThanEqual      | Correct result.
-| code:OpFDiv(x,y)                                                | 2.5 ULP for [eq]#{vert}y{vert}# in the range [2^-126^, 2^126^].
-| conversions between types                                       | Correctly rounded.
-|====
-
-.Precision of GLSL.std.450 Instructions
-[options="header"]
-|====
-|Instruction                 | Precision
-| code:fma()                 | Inherited from code:OpFMul followed by code:OpFAdd.
-| code:exp(x),  code:exp2(x) | [eq]#3 {plus} 2 {times} {vert}x{vert}# ULP.
-| code:log(),  code:log2()   | 3 ULP outside the range [eq]#[0.5, 2.0]#. Absolute error < [eq]#2^-21^# inside the range [eq]#[0.5, 2.0]#.
-| code:pow(x, y)             | Inherited from code:exp2(y {times} code:log2(x)).
-| code:sqrt()                | Inherited from 1.0 / code:inversesqrt().
-| code:inversesqrt()         | 2 ULP.
-|====
-endif::VK_VERSION_1_2,VK_KHR_shader_float16_int8[]
-
-GLSL.std.450 extended instructions specifically defined in terms of the
-above instructions inherit the above errors.
-GLSL.std.450 extended instructions not listed above and not defined in terms
-of the above have undefined: precision.
-
-For the code:OpSRem and code:OpSMod instructions, if either operand is
-negative the result is undefined:.
-
-[NOTE]
-.Note
-====
-While the code:OpSRem and code:OpSMod instructions are supported by the
-Vulkan environment, they require non-negative values and thus do not enable
-additional functionality beyond what code:OpUMod provides.
-====
-
-ifdef::VK_NV_cooperative_matrix[]
-code:OpCooperativeMatrixMulAddNV performs its operations in an
-implementation-dependent order and internal precision.
-endif::VK_NV_cooperative_matrix[]
-
-[[spirvenv-image-signedness]]
-== Signedness of SPIR-V Image Accesses
-
-SPIR-V associates a signedness with all integer image accesses.
-This is required in certain parts of the SPIR-V and the Vulkan image access
-pipeline to ensure defined results.
-The signedness is determined from a combination of the access instruction's
-code:Image code:Operands and the underlying image's code:Sampled code:Type
-as follows:
-
- 1. If the instruction's code:Image code:Operands contains the
-    code:SignExtend operand then the access is signed.
- 2. If the instruction's code:Image code:Operands contains the
-    code:ZeroExtend operand then the access is unsigned.
- 3. Otherwise, the image accesses signedness matches that of the
-    code:Sampled code:Type of the code:OpTypeImage being accessed.
-
-[[spirvenv-format-type-matching]]
-== Image Format and Type Matching
-
-When specifying the code:Image code:Format of an code:OpTypeImage, the
-converted bit width and type, as shown in the table below, must: match the
-code:Sampled code:Type.
-The signedness must: match the <<spirvenv-image-signedness,signedness of any
-access>> to the image.
-
-[NOTE]
-.Note
-====
-Formatted accesses are always converted from a shader readable type to the
-resource's format or vice versa via <<textures-format-conversion>> for reads
-and <<textures-output-format-conversion>> for writes.
-As such, the bit width and format below do not necessarily match 1:1 with
-what might be expected for some formats.
-====
-
-For a given code:Image code:Format, the code:Sampled code:Type must: be the
-type described in the _Type_ column of the below table, with its
-code:Literal code:Width set to that in the _Bit Width_ column.
-Every access that is made to the image must: have a signedness equal to that
-in the _Signedness_ column (where applicable).
-
-[options="autowidth"]
-|===
-| Image Format       | Type                 | Bit Width | Signedness
-
-| code:Unknown       | Any                  | Any       | Any
-| code:Rgba32f   .20+| code:OpTypeFloat .20+| 32    .20+| N/A
-| code:Rg32f
-| code:R32f
-| code:Rgba16f
-| code:Rg16f
-| code:R16f
-| code:Rgba16
-| code:Rg16
-| code:R16
-| code:Rgba16Snorm
-| code:Rg16Snorm
-| code:R16Snorm
-| code:Rgb10A2
-| code:R11fG11fB10f
-| code:Rgba8
-| code:Rg8
-| code:R8
-| code:Rgba8Snorm
-| code:Rg8Snorm
-| code:R8Snorm
-| code:Rgba32i   .19+| code:OpTypeInt   .19+| 32     .9+| 1
-| code:Rg32i
-| code:R32i
-| code:Rgba16i
-| code:Rg16i
-| code:R16i
-| code:Rgba8i
-| code:Rg8i
-| code:R8i
-| code:Rgba32ui                                     .10+| 0
-| code:Rg32ui
-| code:R32ui
-| code:Rgba16ui
-| code:Rg16ui
-| code:R16ui
-| code:Rgb10a2ui
-| code:Rgba8ui
-| code:Rg8ui
-| code:R8ui
-| code:R64i       .2+| code:OpTypeInt    .2+| 64        | 1
-| code:R64ui                                            | 0
-|===
-
-[[spirvenv-image-formats]]
-== Compatibility Between SPIR-V Image Formats And Vulkan Formats
-
-SPIR-V code:Image code:Format values are compatible with elink:VkFormat
-values as defined below:
-
-.SPIR-V and Vulkan Image Format Compatibility
-[cols="2*", options="header"]
-|====
-|SPIR-V Image Format    |Compatible Vulkan Format
-|code:Unknown           |Any
-|code:Rgba32f           |ename:VK_FORMAT_R32G32B32A32_SFLOAT
-|code:Rgba16f           |ename:VK_FORMAT_R16G16B16A16_SFLOAT
-|code:R32f              |ename:VK_FORMAT_R32_SFLOAT
-|code:Rgba8             |ename:VK_FORMAT_R8G8B8A8_UNORM
-|code:Rgba8Snorm        |ename:VK_FORMAT_R8G8B8A8_SNORM
-|code:Rg32f             |ename:VK_FORMAT_R32G32_SFLOAT
-|code:Rg16f             |ename:VK_FORMAT_R16G16_SFLOAT
-|code:R11fG11fB10f      |ename:VK_FORMAT_B10G11R11_UFLOAT_PACK32
-|code:R16f              |ename:VK_FORMAT_R16_SFLOAT
-|code:Rgba16            |ename:VK_FORMAT_R16G16B16A16_UNORM
-|code:Rgb10A2           |ename:VK_FORMAT_A2B10G10R10_UNORM_PACK32
-|code:Rg16              |ename:VK_FORMAT_R16G16_UNORM
-|code:Rg8               |ename:VK_FORMAT_R8G8_UNORM
-|code:R16               |ename:VK_FORMAT_R16_UNORM
-|code:R8                |ename:VK_FORMAT_R8_UNORM
-|code:Rgba16Snorm       |ename:VK_FORMAT_R16G16B16A16_SNORM
-|code:Rg16Snorm         |ename:VK_FORMAT_R16G16_SNORM
-|code:Rg8Snorm          |ename:VK_FORMAT_R8G8_SNORM
-|code:R16Snorm          |ename:VK_FORMAT_R16_SNORM
-|code:R8Snorm           |ename:VK_FORMAT_R8_SNORM
-|code:Rgba32i           |ename:VK_FORMAT_R32G32B32A32_SINT
-|code:Rgba16i           |ename:VK_FORMAT_R16G16B16A16_SINT
-|code:Rgba8i            |ename:VK_FORMAT_R8G8B8A8_SINT
-|code:R32i              |ename:VK_FORMAT_R32_SINT
-|code:Rg32i             |ename:VK_FORMAT_R32G32_SINT
-|code:Rg16i             |ename:VK_FORMAT_R16G16_SINT
-|code:Rg8i              |ename:VK_FORMAT_R8G8_SINT
-|code:R16i              |ename:VK_FORMAT_R16_SINT
-|code:R8i               |ename:VK_FORMAT_R8_SINT
-|code:Rgba32ui          |ename:VK_FORMAT_R32G32B32A32_UINT
-|code:Rgba16ui          |ename:VK_FORMAT_R16G16B16A16_UINT
-|code:Rgba8ui           |ename:VK_FORMAT_R8G8B8A8_UINT
-|code:R32ui             |ename:VK_FORMAT_R32_UINT
-|code:Rgb10a2ui         |ename:VK_FORMAT_A2B10G10R10_UINT_PACK32
-|code:Rg32ui            |ename:VK_FORMAT_R32G32_UINT
-|code:Rg16ui            |ename:VK_FORMAT_R16G16_UINT
-|code:Rg8ui             |ename:VK_FORMAT_R8G8_UINT
-|code:R16ui             |ename:VK_FORMAT_R16_UINT
-|code:R8ui              |ename:VK_FORMAT_R8_UINT
-|code:R64i              |ename:VK_FORMAT_R64_SINT
-|code:R64ui             |ename:VK_FORMAT_R64_UINT
-|====
diff --git a/registry/vulkan/appendices/versions.txt b/registry/vulkan/appendices/versions.txt
deleted file mode 100644
index 14ffc87..0000000
--- a/registry/vulkan/appendices/versions.txt
+++ /dev/null
@@ -1,311 +0,0 @@
-// Copyright 2015-2021 The Khronos Group, Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-[appendix]
-
-[[versions]]
-= Core Revisions (Informative)
-
-New minor versions of the Vulkan API are defined periodically by the Khronos
-Vulkan Working Group.
-These consist of some amount of additional functionality added to the core
-API, potentially including both new functionality and functionality
-<<extendingvulkan-compatibility-promotion,promoted>> from extensions.
-
-ifdef::VK_VERSION_1_1[]
-It is possible to build the specification for earlier versions, but to aid
-readability of the latest versions, this appendix gives an overview of the
-changes as compared to earlier versions.
-endif::VK_VERSION_1_1[]
-
-
-ifdef::VK_VERSION_1_2[]
-[[versions-1.2]]
-== Version 1.2
-
-// Unfortunately we can't include titles in an open refpage block, so this
-// is a refpage-specific alternate form of the section.
-ifdef::isrefpage[]
-[open,refpage='VK_VERSION_1_2',desc='Vulkan version 1.2',type='feature',anchor='versions-1.2',xrefs='VK_VERSION_1_0 VK_VERSION_1_1']
---
-Vulkan Version 1.2 <<extendingvulkan-compatibility-promotion,promoted>> a
-number of key extensions into the core API:
-
-include::{generated}/meta/promoted_extensions_VK_VERSION_1_2.txt[]
-
-All differences in behavior between these extensions and the corresponding
-Vulkan 1.2 functionality are summarized in the <<versions-1.2-promotions,
-Vulkan 1.2 specification appendix>>.
-
-include::{generated}/interfaces/VK_VERSION_1_2.txt[]
---
-endif::isrefpage[]
-
-// This is the spec-specific form of the section
-[[versions-1.2-promotions]]
-Vulkan Version 1.2 <<extendingvulkan-compatibility-promotion,promoted>> a
-number of key extensions into the core API:
-
-include::{generated}/meta/promoted_extensions_VK_VERSION_1_2.txt[]
-
-All differences in behavior between these extensions and the corresponding
-Vulkan 1.2 functionality are summarized below.
-
-=== Differences relative to `VK_KHR_8bit_storage`
-
-If the `apiext:VK_KHR_8bit_storage` extension is not supported, support for
-the SPIR-V <<features-storageBuffer8BitAccess,
-code:StorageBuffer8BitAccess>> capability in shader modules is optional.
-Support for this feature is defined by
-slink:VkPhysicalDeviceVulkan12Features::pname:storageBuffer8BitAccess when
-queried via flink:vkGetPhysicalDeviceFeatures2.
-
-=== Differences relative to `VK_KHR_draw_indirect_count`
-
-If the `apiext:VK_KHR_draw_indirect_count` extension is not supported,
-support for the entry points flink:vkCmdDrawIndirectCount and
-flink:vkCmdDrawIndexedIndirectCount is optional.
-Support for this feature is defined by
-slink:VkPhysicalDeviceVulkan12Features::pname:drawIndirectCount when queried
-via flink:vkGetPhysicalDeviceFeatures2.
-
-=== Differences relative to `VK_KHR_sampler_mirror_clamp_to_edge`
-
-If the `apiext:VK_KHR_sampler_mirror_clamp_to_edge` extension is not
-supported, support for the elink:VkSamplerAddressMode
-ename:VK_SAMPLER_ADDRESS_MODE_MIRROR_CLAMP_TO_EDGE is optional.
-Support for this feature is defined by
-slink:VkPhysicalDeviceVulkan12Features::pname:samplerMirrorClampToEdge when
-queried via flink:vkGetPhysicalDeviceFeatures2.
-
-=== Differences relative to `VK_EXT_descriptor_indexing`
-
-If the `apiext:VK_EXT_descriptor_indexing` extension is not supported,
-support for the <<features-descriptorIndexing,descriptorIndexing>> feature
-is optional.
-Support for this feature is defined by
-slink:VkPhysicalDeviceVulkan12Features::pname:descriptorIndexing when
-queried via flink:vkGetPhysicalDeviceFeatures2.
-
-=== Differences relative to `VK_EXT_scalar_block_layout`
-
-If the `apiext:VK_EXT_scalar_block_layout` extension is not supported,
-support for the <<features-scalarBlockLayout,scalarBlockLayout>> feature is
-optional.
-Support for this feature is defined by
-slink:VkPhysicalDeviceVulkan12Features::pname:scalarBlockLayout when queried
-via flink:vkGetPhysicalDeviceFeatures2.
-
-=== Differences relative to `VK_EXT_shader_viewport_index_layer`
-
-If the `apiext:VK_EXT_shader_viewport_index_layer` extension is not
-supported, support for the code:ShaderViewportIndexLayerEXT SPIR-V
-capability is optional.
-Support for this feature is defined by
-slink:VkPhysicalDeviceVulkan12Features::pname:shaderOutputViewportIndex and
-slink:VkPhysicalDeviceVulkan12Features::pname:shaderOutputLayer when queried
-via flink:vkGetPhysicalDeviceFeatures2.
-
-=== Differences relative to `VK_KHR_buffer_device_address`
-
-If the `apiext:VK_KHR_buffer_device_address` extension is not supported,
-support for the <<features-bufferDeviceAddress,bufferDeviceAddress>> feature
-is optional.
-Support for this feature is defined by
-slink:VkPhysicalDeviceVulkan12Features::pname:bufferDeviceAddress when
-queried via flink:vkGetPhysicalDeviceFeatures2.
-
-=== Differences relative to `VK_KHR_shader_atomic_int64`
-
-If the `apiext:VK_KHR_shader_atomic_int64` extension is not supported,
-support for the
-<<features-shaderBufferInt64Atomics,shaderBufferInt64Atomics>> feature is
-optional.
-Support for this feature is defined by
-slink:VkPhysicalDeviceVulkan12Features::pname:shaderBufferInt64Atomics when
-queried via flink:vkGetPhysicalDeviceFeatures2.
-
-=== Differences relative to `VK_KHR_shader_float16_int8`
-
-If the `apiext:VK_KHR_shader_float16_int8` extension is not supported,
-support for the <<features-shaderFloat16, pname:shaderFloat16>> and
-<<features-shaderInt8, pname:shaderInt8>> features is optional.
-Support for these features are defined by
-slink:VkPhysicalDeviceVulkan12Features::pname:shaderFloat16 and
-slink:VkPhysicalDeviceVulkan12Features::pname:shaderInt8 when queried via
-flink:vkGetPhysicalDeviceFeatures2.
-
-=== Differences relative to `VK_KHR_vulkan_memory_model`
-
-If the `apiext:VK_KHR_vulkan_memory_model` extension is not supported,
-support for the <<features-vulkanMemoryModel,vulkanMemoryModel>> feature is
-optional.
-Support for this feature is defined by
-slink:VkPhysicalDeviceVulkan12Features::pname:vulkanMemoryModel when queried
-via flink:vkGetPhysicalDeviceFeatures2.
-
-=== Additional Vulkan 1.2 Feature Support
-
-[[versions-1.2-new-features]]
-In addition to the promoted extensions described above, Vulkan 1.2 added
-support for:
-
-  * SPIR-V version 1.4.
-  * SPIR-V version 1.5.
-  * The <<features-samplerMirrorClampToEdge,samplerMirrorClampToEdge>>
-    feature which indicates whether the implementation supports the
-    ename:VK_SAMPLER_ADDRESS_MODE_MIRROR_CLAMP_TO_EDGE sampler address mode.
-  * The
-    <<spirvenv-capabilities-table-ShaderNonUniform,code:ShaderNonUniform>>
-    capability in SPIR-V version 1.5.
-  * The <<features-shaderOutputViewportIndex,shaderOutputViewportIndex>>
-    feature which indicates that the
-    <<spirvenv-capabilities-table-ShaderViewportIndex,code:ShaderViewportIndex>>
-    capability can be used.
-  * The <<features-shaderOutputLayer,shaderOutputLayer>> feature which
-    indicates that the
-    <<spirvenv-capabilities-table-ShaderLayer,code:ShaderLayer>> capability
-    can be used.
-  * The <<features-subgroupBroadcastDynamicId,subgroupBroadcastDynamicId>>
-    feature which allows the "`Id`" operand of
-    code:OpGroupNonUniformBroadcast to be dynamically uniform within a
-    subgroup, and the "`Index`" operand of
-    code:OpGroupNonUniformQuadBroadcast to be dynamically uniform within a
-    derivative group, in shader modules of version 1.5 or higher.
-  * The <<features-drawIndirectCount,drawIndirectCount>> feature which
-    indicates whether the flink:vkCmdDrawIndirectCount and
-    flink:vkCmdDrawIndexedIndirectCount functions can be used.
-  * The <<features-descriptorIndexing,descriptorIndexing>> feature which
-    indicates the implementation supports the minimum number of descriptor
-    indexing features as defined in the <<features-requirements,Feature
-    Requirements>> section.
-  * The <<features-samplerFilterMinmax,samplerFilterMinmax>> feature which
-    indicates whether the implementation supports the minimum number of
-    image formats that support the
-    ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_MINMAX_BIT feature bit as
-    defined by the
-    <<limits-filterMinmaxSingleComponentFormats-minimum-requirements,pname:filterMinmaxSingleComponentFormats>>
-    property minimum requirements.
-  * The
-    <<limits-framebufferIntegerColorSampleCounts,framebufferIntegerColorSampleCounts>>
-    limit which indicates the color sample counts that are supported for all
-    framebuffer color attachments with integer formats.
-
-include::{generated}/interfaces/VK_VERSION_1_2.txt[]
-
-endif::VK_VERSION_1_2[]
-
-
-ifdef::VK_VERSION_1_1[]
-[[versions-1.1]]
-== Version 1.1
-
-// Unfortunately we can't include titles in an open refpage block, so this
-// is a refpage-specific alternate form of the section.
-ifdef::isrefpage[]
-[open,refpage='VK_VERSION_1_1',desc='Vulkan version 1.1',type='feature',anchor='versions-1.1',xrefs='VK_VERSION_1_0 VK_VERSION_1_2']
---
-Vulkan Version 1.1 <<extendingvulkan-compatibility-promotion,promoted>> a
-number of key extensions into the core API:
-
-include::{generated}/meta/promoted_extensions_VK_VERSION_1_1.txt[]
-
-All differences in behavior between these extensions and the corresponding
-Vulkan 1.1 functionality are summarized in the <<versions-1.1-promotions,
-Vulkan 1.1 specification appendix>>.
-
-include::{generated}/interfaces/VK_VERSION_1_1.txt[]
---
-endif::isrefpage[]
-
-// This is the spec-specific form of the section
-[[versions-1.1-promotions]]
-Vulkan Version 1.1 <<extendingvulkan-compatibility-promotion,promoted>> a
-number of key extensions into the core API:
-
-include::{generated}/meta/promoted_extensions_VK_VERSION_1_1.txt[]
-
-All differences in behavior between these extensions and the corresponding
-Vulkan 1.1 functionality are summarized below.
-
-=== Differences relative to `VK_KHR_16bit_storage`
-
-If the `apiext:VK_KHR_16bit_storage` extension is not supported, support for
-the <<features-storageBuffer16BitAccess, pname:storageBuffer16BitAccess>>
-feature is optional.
-Support for this feature is defined by
-slink:VkPhysicalDevice16BitStorageFeatures::pname:storageBuffer16BitAccess
-ifdef::VK_VERSION_1_2[]
-or slink:VkPhysicalDeviceVulkan11Features::pname:storageBuffer16BitAccess
-endif::VK_VERSION_1_2[]
-when queried via flink:vkGetPhysicalDeviceFeatures2.
-
-=== Differences relative to `VK_KHR_sampler_ycbcr_conversion`
-
-If the `apiext:VK_KHR_sampler_ycbcr_conversion` extension is not supported,
-support for the
-<<features-samplerYcbcrConversion,pname:samplerYcbcrConversion>> feature is
-optional.
-Support for this feature is defined by
-slink:VkPhysicalDeviceSamplerYcbcrConversionFeatures::pname:samplerYcbcrConversion
-ifdef::VK_VERSION_1_2[]
-or slink:VkPhysicalDeviceVulkan11Features::pname:samplerYcbcrConversion
-endif::VK_VERSION_1_2[]
-when queried via flink:vkGetPhysicalDeviceFeatures2.
-
-=== Differences relative to `VK_KHR_shader_draw_parameters`
-
-If the `apiext:VK_KHR_shader_draw_parameters` extension is not supported,
-support for the
-{spirv}/KHR/SPV_KHR_shader_draw_parameters.html[`SPV_KHR_shader_draw_parameters`]
-SPIR-V extension is optional.
-Support for this feature is defined by
-slink:VkPhysicalDeviceShaderDrawParametersFeatures::pname:shaderDrawParameters
-ifdef::VK_VERSION_1_2[]
-or slink:VkPhysicalDeviceVulkan11Features::pname:shaderDrawParameters
-endif::VK_VERSION_1_2[]
-when queried via flink:vkGetPhysicalDeviceFeatures2.
-
-=== Differences relative to `VK_KHR_variable_pointers`
-
-If the `apiext:VK_KHR_variable_pointers` extension is not supported, support
-for the <<features-variablePointersStorageBuffer,
-pname:variablePointersStorageBuffer>> feature is optional.
-Support for this feature is defined by
-slink:VkPhysicalDeviceVariablePointersFeatures::pname:variablePointersStorageBuffer
-ifdef::VK_VERSION_1_2[]
-or
-slink:VkPhysicalDeviceVulkan11Features::pname:variablePointersStorageBuffer
-endif::VK_VERSION_1_2[]
-when queried via flink:vkGetPhysicalDeviceFeatures2.
-
-=== Additional Vulkan 1.1 Feature Support
-
-[[versions-1.1-new-features]]
-In addition to the promoted extensions described above, Vulkan 1.1 added
-support for:
-
-  * The <<shaders-group-operations, group operations>> and
-    <<shaders-scope-subgroup, subgroup scope>>.
-  * The <<memory-protected-memory, protected memory>> feature.
-  * A new command to enumerate the instance version:
-    flink:vkEnumerateInstanceVersion.
-  * The slink:VkPhysicalDeviceShaderDrawParametersFeatures feature query
-    struct (where the `apiext:VK_KHR_shader_draw_parameters` extension did
-    not have one).
-
-include::{generated}/interfaces/VK_VERSION_1_1.txt[]
-
-endif::VK_VERSION_1_1[]
-
-
-[[versions-1.0]]
-== Version 1.0
-
-[open,refpage='VK_VERSION_1_0',desc='Vulkan version 1.0',type='feature',anchor='versions-1.0',xrefs='VK_VERSION_1_1 VK_VERSION_1_2']
---
-Vulkan Version 1.0 was the initial release of the Vulkan API.
-
-include::{generated}/interfaces/VK_VERSION_1_0.txt[]
---
diff --git a/registry/vulkan/chapters/VK_AMD_buffer_marker/copies.txt b/registry/vulkan/chapters/VK_AMD_buffer_marker/copies.txt
deleted file mode 100644
index bf4011e..0000000
--- a/registry/vulkan/chapters/VK_AMD_buffer_marker/copies.txt
+++ /dev/null
@@ -1,158 +0,0 @@
-// Copyright (c) 2018-2020 Advanced Micro Devices, Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-[[copies-buffer-markers]]
-== Buffer Markers
-
-ifdef::VK_KHR_synchronization2[]
-
-[open,refpage='vkCmdWriteBufferMarker2AMD',desc='Execute a pipelined write of a marker value into a buffer',type='protos']
---
-:refpage: vkCmdWriteBufferMarker2AMD
-
-To write a 32-bit marker value into a buffer as a pipelined operation, call:
-
-include::{generated}/api/protos/vkCmdWriteBufferMarker2AMD.txt[]
-
-  * pname:commandBuffer is the command buffer into which the command will be
-    recorded.
-  * pname:stage specifies the pipeline stage whose completion triggers the
-    marker write.
-  * pname:dstBuffer is the buffer where the marker will be written.
-  * pname:dstOffset is the byte offset into the buffer where the marker will
-    be written.
-  * pname:marker is the 32-bit value of the marker.
-
-The command will write the 32-bit marker value into the buffer only after
-all preceding commands have finished executing up to at least the specified
-pipeline stage.
-This includes the completion of other preceding
-fname:vkCmdWriteBufferMarker2AMD commands so long as their specified
-pipeline stages occur either at the same time or earlier than this command's
-specified pname:stage.
-
-While consecutive buffer marker writes with the same pname:stage parameter
-implicitly complete in submission order, memory and execution dependencies
-between buffer marker writes and other operations must: still be explicitly
-ordered using synchronization commands.
-The access scope for buffer marker writes falls under the
-ename:VK_ACCESS_TRANSFER_WRITE_BIT, and the pipeline stages for identifying
-the synchronization scope must: include both pname:stage and
-ename:VK_PIPELINE_STAGE_TRANSFER_BIT.
-
-[NOTE]
-.Note
-====
-Similar to fname:vkCmdWriteTimestamp2KHR, if an implementation is unable to
-write a marker at any specific pipeline stage, it may: instead do so at any
-logically later stage.
-====
-
-[NOTE]
-.Note
-====
-Implementations may: only support a limited number of pipelined marker write
-operations in flight at a given time.
-Thus an excessive number of marker write operations may: degrade command
-execution performance.
-====
-
-.Valid Usage
-****
-:stageMaskName: stage
-include::{chapters}/commonvalidity/stage_mask_2_common.txt[]
-  * [[VUID-vkCmdWriteBufferMarker2AMD-synchronization2-03893]]
-    The <<features-synchronization2, pname:synchronization2>> feature must:
-    be enabled
-  * [[VUID-vkCmdWriteBufferMarker2AMD-stage-03894]]
-    pname:stage must: include only a single pipeline stage
-  * [[VUID-vkCmdWriteBufferMarker2AMD-stage-03895]]
-    pname:stage must: include only stages that are valid for the queue
-    family that was used to create the command pool that pname:commandBuffer
-    was allocated from
-  * [[VUID-vkCmdWriteBufferMarker2AMD-dstOffset-03896]]
-    pname:dstOffset must: be less than or equal to the size of
-    pname:dstBuffer minus `4`
-  * [[VUID-vkCmdWriteBufferMarker2AMD-dstBuffer-03897]]
-    pname:dstBuffer must: have been created with the
-    ename:VK_BUFFER_USAGE_TRANSFER_DST_BIT usage flag
-  * [[VUID-vkCmdWriteBufferMarker2AMD-dstBuffer-03898]]
-    If pname:dstBuffer is non-sparse then it must: be bound completely and
-    contiguously to a single sname:VkDeviceMemory object
-  * [[VUID-vkCmdWriteBufferMarker2AMD-dstOffset-03899]]
-    pname:dstOffset must: be a multiple of `4`
-****
-
-include::{generated}/validity/protos/vkCmdWriteBufferMarker2AMD.txt[]
---
-endif::VK_KHR_synchronization2[]
-
-[open,refpage='vkCmdWriteBufferMarkerAMD',desc='Execute a pipelined write of a marker value into a buffer',type='protos']
---
-:refpage: vkCmdWriteBufferMarkerAMD
-
-To write a 32-bit marker value into a buffer as a pipelined operation, call:
-
-include::{generated}/api/protos/vkCmdWriteBufferMarkerAMD.txt[]
-
-  * pname:commandBuffer is the command buffer into which the command will be
-    recorded.
-  * pname:pipelineStage is a elink:VkPipelineStageFlagBits value specifying
-    the pipeline stage whose completion triggers the marker write.
-  * pname:dstBuffer is the buffer where the marker will be written to.
-  * pname:dstOffset is the byte offset into the buffer where the marker will
-    be written to.
-  * pname:marker is the 32-bit value of the marker.
-
-The command will write the 32-bit marker value into the buffer only after
-all preceding commands have finished executing up to at least the specified
-pipeline stage.
-This includes the completion of other preceding
-fname:vkCmdWriteBufferMarkerAMD commands so long as their specified pipeline
-stages occur either at the same time or earlier than this command's
-specified pname:pipelineStage.
-
-While consecutive buffer marker writes with the same pname:pipelineStage
-parameter are implicitly complete in submission order, memory and execution
-dependencies between buffer marker writes and other operations must still be
-explicitly ordered using synchronization commands.
-The access scope for buffer marker writes falls under the
-ename:VK_ACCESS_TRANSFER_WRITE_BIT, and the pipeline stages for identifying
-the synchronization scope must: include both pname:pipelineStage and
-ename:VK_PIPELINE_STAGE_TRANSFER_BIT.
-
-[NOTE]
-.Note
-====
-Similar to fname:vkCmdWriteTimestamp, if an implementation is unable to
-write a marker at any specific pipeline stage, it may: instead do so at any
-logically later stage.
-====
-
-[NOTE]
-.Note
-====
-Implementations may: only support a limited number of pipelined marker write
-operations in flight at a given time, thus excessive number of marker write
-operations may: degrade command execution performance.
-====
-
-.Valid Usage
-****
-include::{chapters}/commonvalidity/pipeline_stage_common.txt[]
-  * [[VUID-vkCmdWriteBufferMarkerAMD-dstOffset-01798]]
-    pname:dstOffset must: be less than or equal to the size of
-    pname:dstBuffer minus `4`
-  * [[VUID-vkCmdWriteBufferMarkerAMD-dstBuffer-01799]]
-    pname:dstBuffer must: have been created with
-    ename:VK_BUFFER_USAGE_TRANSFER_DST_BIT usage flag
-  * [[VUID-vkCmdWriteBufferMarkerAMD-dstBuffer-01800]]
-    If pname:dstBuffer is non-sparse then it must: be bound completely and
-    contiguously to a single sname:VkDeviceMemory object
-  * [[VUID-vkCmdWriteBufferMarkerAMD-dstOffset-01801]]
-    pname:dstOffset must: be a multiple of `4`
-****
-
-include::{generated}/validity/protos/vkCmdWriteBufferMarkerAMD.txt[]
---
diff --git a/registry/vulkan/chapters/VK_AMD_pipeline_compiler_control.txt b/registry/vulkan/chapters/VK_AMD_pipeline_compiler_control.txt
deleted file mode 100644
index 2edf1e4..0000000
--- a/registry/vulkan/chapters/VK_AMD_pipeline_compiler_control.txt
+++ /dev/null
@@ -1,43 +0,0 @@
-// Copyright (c) 2019-2020 Advanced Micro Devices, Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-// This section is included inside the Pipelines chapter (pipelines.txt)
-
-[[pipelines-compiler-control]]
-== Pipeline Compiler Control
-
-[open,refpage='VkPipelineCompilerControlCreateInfoAMD',desc='Structure used to pass compilation control flags to a pipeline',type='structs']
---
-The compilation of a pipeline can: be tuned by adding a
-sname:VkPipelineCompilerControlCreateInfoAMD structure to the pname:pNext
-chain of slink:VkGraphicsPipelineCreateInfo or
-slink:VkComputePipelineCreateInfo.
-
-include::{generated}/api/structs/VkPipelineCompilerControlCreateInfoAMD.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:compilerControlFlags is a bitmask of
-    elink:VkPipelineCompilerControlFlagBitsAMD affecting how the pipeline
-    will be compiled.
-
-include::{generated}/validity/structs/VkPipelineCompilerControlCreateInfoAMD.txt[]
---
-
-[open,refpage='VkPipelineCompilerControlFlagBitsAMD',desc='Enum specifying available compilation control flags',type='enums']
---
-There are currently no available flags for this extension; flags will be
-added by future versions of this extension.
-
-include::{generated}/api/enums/VkPipelineCompilerControlFlagBitsAMD.txt[]
---
-
-[open,refpage='VkPipelineCompilerControlFlagsAMD',desc='Bitmask of VkPipelineCompilerControlFlagBitsAMD',type='flags']
---
-include::{generated}/api/flags/VkPipelineCompilerControlFlagsAMD.txt[]
-
-tname:VkPipelineCompilerControlFlagsAMD is a bitmask type for setting a mask
-of zero or more elink:VkPipelineCompilerControlFlagBitsAMD.
---
diff --git a/registry/vulkan/chapters/VK_AMD_shader_info.txt b/registry/vulkan/chapters/VK_AMD_shader_info.txt
deleted file mode 100644
index 527db55..0000000
--- a/registry/vulkan/chapters/VK_AMD_shader_info.txt
+++ /dev/null
@@ -1,136 +0,0 @@
-// Copyright (c) 2018-2020 Advanced Micro Devices, Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-// This section is included inside the Pipelines chapter (pipelines.txt)
-
-[open,refpage='vkGetShaderInfoAMD',desc='Get information about a shader in a pipeline',type='protos']
---
-Information about a particular shader that has been compiled as part of a
-pipeline object can be extracted by calling:
-
-include::{generated}/api/protos/vkGetShaderInfoAMD.txt[]
-
-  * pname:device is the device that created pname:pipeline.
-  * pname:pipeline is the target of the query.
-  * pname:shaderStage is a elink:VkShaderStageFlagBits specifying the
-    particular shader within the pipeline about which information is being
-    queried.
-  * pname:infoType describes what kind of information is being queried.
-  * pname:pInfoSize is a pointer to a value related to the amount of data
-    the query returns, as described below.
-  * pname:pInfo is either `NULL` or a pointer to a buffer.
-
-If pname:pInfo is `NULL`, then the maximum size of the information that can:
-be retrieved about the shader, in bytes, is returned in pname:pInfoSize.
-Otherwise, pname:pInfoSize must: point to a variable set by the user to the
-size of the buffer, in bytes, pointed to by pname:pInfo, and on return the
-variable is overwritten with the amount of data actually written to
-pname:pInfo.
-If pname:pInfoSize is less than the maximum size that can: be retrieved by
-the pipeline cache, then at most pname:pInfoSize bytes will be written to
-pname:pInfo, and ename:VK_INCOMPLETE will be returned, instead of
-ename:VK_SUCCESS, to indicate that not all required of the pipeline cache
-was returned.
-
-Not all information is available for every shader and implementations may
-not support all kinds of information for any shader.
-When a certain type of information is unavailable, the function returns
-ename:VK_ERROR_FEATURE_NOT_PRESENT.
-
-If information is successfully and fully queried, the function will return
-ename:VK_SUCCESS.
-
-For pname:infoType ename:VK_SHADER_INFO_TYPE_STATISTICS_AMD, a
-sname:VkShaderStatisticsInfoAMD structure will be written to the buffer
-pointed to by pname:pInfo.
-This structure will be populated with statistics regarding the physical
-device resources used by that shader along with other miscellaneous
-information and is described in further detail below.
-
-For pname:infoType ename:VK_SHADER_INFO_TYPE_DISASSEMBLY_AMD, pname:pInfo is
-a pointer to a UTF-8 null-terminated string containing human-readable
-disassembly.
-The exact formatting and contents of the disassembly string are
-vendor-specific.
-
-The formatting and contents of all other types of information, including
-pname:infoType ename:VK_SHADER_INFO_TYPE_BINARY_AMD, are left to the vendor
-and are not further specified by this extension.
-
-include::{generated}/validity/protos/vkGetShaderInfoAMD.txt[]
---
-
-[open,refpage='VkShaderInfoTypeAMD',desc='Enum specifying which type of shader information to query',type='enums']
---
-Possible values of flink:vkGetShaderInfoAMD::pname:infoType, specifying the
-information being queried from a shader, are:
-
-include::{generated}/api/enums/VkShaderInfoTypeAMD.txt[]
-
-  * ename:VK_SHADER_INFO_TYPE_STATISTICS_AMD specifies that device resources
-    used by a shader will be queried.
-  * ename:VK_SHADER_INFO_TYPE_BINARY_AMD specifies that
-    implementation-specific information will be queried.
-  * ename:VK_SHADER_INFO_TYPE_DISASSEMBLY_AMD specifies that human-readable
-    dissassembly of a shader.
---
-
-[open,refpage='VkShaderStatisticsInfoAMD',desc='Statistical information about a particular shader within a pipeline',type='structs']
---
-The sname:VkShaderStatisticsInfoAMD structure is defined as:
-
-include::{generated}/api/structs/VkShaderStatisticsInfoAMD.txt[]
-
-  * pname:shaderStageMask are the combination of logical shader stages
-    contained within this shader.
-  * pname:resourceUsage is a slink:VkShaderResourceUsageAMD structure
-    describing internal physical device resources used by this shader.
-  * pname:numPhysicalVgprs is the maximum number of vector instruction
-    general-purpose registers (VGPRs) available to the physical device.
-  * pname:numPhysicalSgprs is the maximum number of scalar instruction
-    general-purpose registers (SGPRs) available to the physical device.
-  * pname:numAvailableVgprs is the maximum limit of VGPRs made available to
-    the shader compiler.
-  * pname:numAvailableSgprs is the maximum limit of SGPRs made available to
-    the shader compiler.
-  * pname:computeWorkGroupSize is the local workgroup size of this shader in
-    { X, Y, Z } dimensions.
-
-Some implementations may merge multiple logical shader stages together in a
-single shader.
-In such cases, pname:shaderStageMask will contain a bitmask of all of the
-stages that are active within that shader.
-Consequently, if specifying those stages as input to
-flink:vkGetShaderInfoAMD, the same output information may: be returned for
-all such shader stage queries.
-
-The number of available VGPRs and SGPRs (pname:numAvailableVgprs and
-pname:numAvailableSgprs respectively) are the shader-addressable subset of
-physical registers that is given as a limit to the compiler for register
-assignment.
-These values may: further be limited by implementations due to performance
-optimizations where register pressure is a bottleneck.
-
-include::{generated}/validity/structs/VkShaderStatisticsInfoAMD.txt[]
---
-
-[open,refpage='VkShaderResourceUsageAMD',desc='Resource usage information about a particular shader within a pipeline',type='structs']
---
-The sname:VkShaderResourceUsageAMD structure is defined as:
-
-include::{generated}/api/structs/VkShaderResourceUsageAMD.txt[]
-
-  * pname:numUsedVgprs is the number of vector instruction general-purpose
-    registers used by this shader.
-  * pname:numUsedSgprs is the number of scalar instruction general-purpose
-    registers used by this shader.
-  * pname:ldsSizePerLocalWorkGroup is the maximum local data store size per
-    work group in bytes.
-  * pname:ldsUsageSizeInBytes is the LDS usage size in bytes per work group
-    by this shader.
-  * pname:scratchMemUsageInBytes is the scratch memory usage in bytes by
-    this shader.
-
-include::{generated}/validity/structs/VkShaderResourceUsageAMD.txt[]
---
diff --git a/registry/vulkan/chapters/VK_EXT_acquire_drm_display/acquire_drm_display.txt b/registry/vulkan/chapters/VK_EXT_acquire_drm_display/acquire_drm_display.txt
deleted file mode 100644
index 2df66f1..0000000
--- a/registry/vulkan/chapters/VK_EXT_acquire_drm_display/acquire_drm_display.txt
+++ /dev/null
@@ -1,62 +0,0 @@
-// Copyright 2018-2021 The Khronos Group, Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-[open,refpage='vkAcquireDrmDisplayEXT',desc='Acquire access to a VkDisplayKHR using DRM',type='protos']
---
-To acquire permission to directly a display in Vulkan from the Direct
-Rendering Manager (DRM) interface, call:
-
-include::{generated}/api/protos/vkAcquireDrmDisplayEXT.txt[]
-
-  * pname:physicalDevice The physical device the display is on.
-  * pname:drmFd DRM primary file descriptor.
-  * pname:display The display the caller wishes Vulkan to control.
-
-All permissions necessary to control the display are granted to the Vulkan
-instance associated with the provided pname:physicalDevice until the display
-is either released or the connector is unplugged.
-The provided pname:drmFd must correspond to the one owned by the
-pname:physicalDevice.
-If not, the error code ename:VK_ERROR_UNKNOWN must be returned.
-The DRM FD must have DRM master permissions.
-If any error is encountered during the acquisition of the display, the call
-must return the error code ename:VK_ERROR_INITIALIZATION_FAILED.
-
-The provided DRM fd should not be closed before the display is released,
-attempting to do it may result in undefined: behaviour.
-
-include::{generated}/validity/protos/vkAcquireDrmDisplayEXT.txt[]
---
-
-[open,refpage='vkGetDrmDisplayEXT',desc='Query the VkDisplayKHR corresponding to a DRM connector ID',type='protos']
---
-Before acquiring a display from the DRM interface, the caller may want to
-select a specific sname:VkDisplayKHR handle by identifying it using a
-pname:connectorId.
-To do so, call:
-
-include::{generated}/api/protos/vkGetDrmDisplayEXT.txt[]
-
-  * pname:physicalDevice The physical device to query the display from.
-  * pname:drmFd DRM primary file descriptor.
-  * pname:connectorId Identifier of the specified DRM connector.
-  * pname:display The corresponding slink:VkDisplayKHR handle will be
-    returned here.
-
-If there is no slink:VkDisplayKHR corresponding to the pname:connectorId on
-the pname:physicalDevice, the returning pname:display must be set to
-dlink:VK_NULL_HANDLE.
-The provided pname:drmFd must correspond to the one owned by the
-pname:physicalDevice.
-If not, the error code ename:VK_ERROR_UNKNOWN must be returned.
-Master permissions are not required, because the file descriptor is just
-used for information gathering purposes.
-The given pname:connectorId must be a resource owned by the provided
-pname:drmFd.
-If not, the error code ename:VK_ERROR_UNKNOWN must be returned.
-If any error is encountered during the identification of the display, the
-call must return the error code ename:VK_ERROR_INITIALIZATION_FAILED.
-
-include::{generated}/validity/protos/vkGetDrmDisplayEXT.txt[]
---
diff --git a/registry/vulkan/chapters/VK_EXT_acquire_xlib_display/acquire_xlib_display.txt b/registry/vulkan/chapters/VK_EXT_acquire_xlib_display/acquire_xlib_display.txt
deleted file mode 100644
index 535547e..0000000
--- a/registry/vulkan/chapters/VK_EXT_acquire_xlib_display/acquire_xlib_display.txt
+++ /dev/null
@@ -1,61 +0,0 @@
-// Copyright 2018-2021 The Khronos Group, Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-[open,refpage='vkAcquireXlibDisplayEXT',desc='Acquire access to a VkDisplayKHR using Xlib',type='protos']
---
-To acquire permission to directly access a display in Vulkan from an X11
-server, call:
-
-include::{generated}/api/protos/vkAcquireXlibDisplayEXT.txt[]
-
-  * pname:physicalDevice The physical device the display is on.
-  * pname:dpy A connection to the X11 server that currently owns
-    pname:display.
-  * pname:display The display the caller wishes to control in Vulkan.
-
-All permissions necessary to control the display are granted to the Vulkan
-instance associated with pname:physicalDevice until the display is released
-or the X11 connection specified by pname:dpy is terminated.
-Permission to access the display may: be temporarily revoked during periods
-when the X11 server from which control was acquired itself loses access to
-pname:display.
-During such periods, operations which require access to the display must:
-fail with an approriate error code.
-If the X11 server associated with pname:dpy does not own pname:display, or
-if permission to access it has already been acquired by another entity, the
-call must: return the error code ename:VK_ERROR_INITIALIZATION_FAILED.
-
-[NOTE]
-.Note
-====
-One example of when an X11 server loses access to a display is when it loses
-ownership of its virtual terminal.
-====
-
-include::{generated}/validity/protos/vkAcquireXlibDisplayEXT.txt[]
---
-
-[open,refpage='vkGetRandROutputDisplayEXT',desc='Query the VkDisplayKHR corresponding to an X11 RandR Output',type='protos']
---
-When acquiring displays from an X11 server, an application may also wish to
-enumerate and identify them using a native handle rather than a
-sname:VkDisplayKHR handle.
-To determine the sname:VkDisplayKHR handle corresponding to an X11 RandR
-Output, call:
-
-include::{generated}/api/protos/vkGetRandROutputDisplayEXT.txt[]
-
-  * pname:physicalDevice The physical device to query the display handle on.
-  * pname:dpy A connection to the X11 server from which pname:rrOutput was
-    queried.
-  * pname:rrOutput An X11 RandR output ID.
-  * pname:pDisplay The corresponding slink:VkDisplayKHR handle will be
-    returned here.
-
-If there is no slink:VkDisplayKHR corresponding to pname:rrOutput on
-pname:physicalDevice, dlink:VK_NULL_HANDLE must: be returned in
-pname:pDisplay.
-
-include::{generated}/validity/protos/vkGetRandROutputDisplayEXT.txt[]
---
diff --git a/registry/vulkan/chapters/VK_EXT_blend_operation_advanced/advanced_blend.txt b/registry/vulkan/chapters/VK_EXT_blend_operation_advanced/advanced_blend.txt
deleted file mode 100644
index 9182914..0000000
--- a/registry/vulkan/chapters/VK_EXT_blend_operation_advanced/advanced_blend.txt
+++ /dev/null
@@ -1,819 +0,0 @@
-// Copyright 2018-2021 The Khronos Group, Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-[[framebuffer-blend-advanced]]
-=== Advanced Blend Operations
-
-The _advanced blend operations_ are those listed in tables
-<<framebuffer-blend-advanced-fxyz-modes,f/X/Y/Z Advanced Blend Operations>>,
-<<framebuffer-blend-advanced-hsl-modes,Hue-Saturation-Luminosity Advanced
-Blend Operations>>, and
-<<framebuffer-blend-advanced-additional-rgb,Additional RGB Blend
-Operations>>.
-
-[open,refpage='VkPipelineColorBlendAdvancedStateCreateInfoEXT',desc='Structure specifying parameters that affect advanced blend operations',type='structs']
---
-If the pname:pNext chain of slink:VkPipelineColorBlendStateCreateInfo
-includes a sname:VkPipelineColorBlendAdvancedStateCreateInfoEXT structure,
-then that structure includes parameters that affect advanced blend
-operations.
-
-The sname:VkPipelineColorBlendAdvancedStateCreateInfoEXT structure is
-defined as:
-
-include::{generated}/api/structs/VkPipelineColorBlendAdvancedStateCreateInfoEXT.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:srcPremultiplied specifies whether the source color of the blend
-    operation is treated as premultiplied.
-  * pname:dstPremultiplied specifies whether the destination color of the
-    blend operation is treated as premultiplied.
-  * pname:blendOverlap is a elink:VkBlendOverlapEXT value specifying how the
-    source and destination sample's coverage is correlated.
-
-If this structure is not present, pname:srcPremultiplied and
-pname:dstPremultiplied are both considered to be ename:VK_TRUE, and
-pname:blendOverlap is considered to be
-ename:VK_BLEND_OVERLAP_UNCORRELATED_EXT.
-
-.Valid Usage
-****
-  * [[VUID-VkPipelineColorBlendAdvancedStateCreateInfoEXT-srcPremultiplied-01424]]
-    If the <<limits-advancedBlendNonPremultipliedSrcColor,non-premultiplied
-    source color>> property is not supported, pname:srcPremultiplied must:
-    be ename:VK_TRUE
-  * [[VUID-VkPipelineColorBlendAdvancedStateCreateInfoEXT-dstPremultiplied-01425]]
-    If the <<limits-advancedBlendNonPremultipliedDstColor,non-premultiplied
-    destination color>> property is not supported, pname:dstPremultiplied
-    must: be ename:VK_TRUE
-  * [[VUID-VkPipelineColorBlendAdvancedStateCreateInfoEXT-blendOverlap-01426]]
-    If the <<limits-advancedBlendCorrelatedOverlap,correlated overlap>>
-    property is not supported, pname:blendOverlap must: be
-    ename:VK_BLEND_OVERLAP_UNCORRELATED_EXT
-****
-
-include::{generated}/validity/structs/VkPipelineColorBlendAdvancedStateCreateInfoEXT.txt[]
---
-
-When using one of the operations in table
-<<framebuffer-blend-advanced-fxyz-modes,f/X/Y/Z Advanced Blend Operations>>
-or <<framebuffer-blend-advanced-hsl-modes,Hue-Saturation-Luminosity Advanced
-Blend Operations>>, blending is performed according to the following
-equations:
-
-[latexmath]
-+++++++++++++++++++
-\begin{aligned}
-  R & = & f(R_s',R_d')*p_0(A_s,A_d) & + & Y*R_s'*p_1(A_s,A_d) & + & Z*R_d'*p_2(A_s,A_d) \\
-  G & = & f(G_s',G_d')*p_0(A_s,A_d) & + & Y*G_s'*p_1(A_s,A_d) & + & Z*G_d'*p_2(A_s,A_d) \\
-  B & = & f(B_s',B_d')*p_0(A_s,A_d) & + & Y*B_s'*p_1(A_s,A_d) & + & Z*B_d'*p_2(A_s,A_d) \\
-  A & = &            X*p_0(A_s,A_d) & + &      Y*p_1(A_s,A_d) & + &      Z*p_2(A_s,A_d)
-\end{aligned}
-+++++++++++++++++++
-
-where the function f and terms X, Y, and Z are specified in the table.
-The R, G, and B components of the source color used for blending are derived
-according to pname:srcPremultiplied.
-If pname:srcPremultiplied is set to ename:VK_TRUE, the fragment color
-components are considered to have been premultiplied by the A component
-prior to blending.
-The base source color [eq]#(R~s~',G~s~',B~s~')# is obtained by dividing
-through by the A component:
-
-[latexmath]
-+++++++++++++++++++
-\begin{aligned}
-  (R_s', G_s', B_s') & =
-  \begin{cases}
-    (0, 0, 0)                    & A_s = 0 \\
-    (\frac{R_s}{A_s}, \frac{G_s}{A_s}, \frac{B_s}{A_s})  & \text{otherwise}
-  \end{cases}
-\end{aligned}
-+++++++++++++++++++
-
-If pname:srcPremultiplied is ename:VK_FALSE, the fragment color components
-are used as the base color:
-
-[latexmath]
-+++++++++++++++++++
-\begin{aligned}
-  (R_s', G_s', B_s') & = (R_s, G_s, B_s)
-\end{aligned}
-+++++++++++++++++++
-
-The R, G, and B components of the destination color used for blending are
-derived according to pname:dstPremultiplied.
-If pname:dstPremultiplied is set to ename:VK_TRUE, the destination
-components are considered to have been premultiplied by the A component
-prior to blending.
-The base destination color [eq]#(R~d~',G~d~',B~d~')# is obtained by dividing
-through by the A component:
-
-[latexmath]
-+++++++++++++++++++
-\begin{aligned}
-  (R_d', G_d', B_d') & =
-  \begin{cases}
-    (0, 0, 0)                    & A_d = 0 \\
-    (\frac{R_d}{A_d}, \frac{G_d}{A_d}, \frac{B_d}{A_d})  & \text{otherwise}
-  \end{cases}
-\end{aligned}
-+++++++++++++++++++
-
-If pname:dstPremultiplied is ename:VK_FALSE, the destination color
-components are used as the base color:
-
-[latexmath]
-+++++++++++++++++++
-\begin{aligned}
-  (R_d', G_d', B_d') & = (R_d, G_d, B_d)
-\end{aligned}
-+++++++++++++++++++
-
-When blending using advanced blend operations, we expect that the R, G, and
-B components of premultiplied source and destination color inputs be stored
-as the product of non-premultiplied R, G, and B component values and the A
-component of the color.
-If any R, G, or B component of a premultiplied input color is non-zero and
-the A component is zero, the color is considered ill-formed, and the
-corresponding component of the blend result is undefined:.
-
-All of the advanced blend operation formulas in this chapter compute the
-result as a premultiplied color.
-If pname:dstPremultiplied is ename:VK_FALSE, that result color's R, G, and B
-components are divided by the A component before being written to the
-framebuffer.
-If any R, G, or B component of the color is non-zero and the A component is
-zero, the result is considered ill-formed, and the corresponding component
-of the blend result is undefined:.
-If all components are zero, that value is unchanged.
-
-If the A component of any input or result color is less than zero, the color
-is considered ill-formed, and all components of the blend result are
-undefined:.
-
-[open,refpage='VkBlendOverlapEXT',desc='Enumerant specifying the blend overlap parameter',type='enums']
---
-The weighting functions [eq]#p~0~#, [eq]#p~1~#, and [eq]#p~2~# are defined
-in table <<framebuffer-blend-advanced-overlap-modes,Advanced Blend Overlap
-Modes>>.
-In these functions, the A components of the source and destination colors
-are taken to indicate the portion of the pixel covered by the fragment
-(source) and the fragments previously accumulated in the pixel
-(destination).
-The functions [eq]#p~0~#, [eq]#p~1~#, and [eq]#p~2~# approximate the
-relative portion of the pixel covered by the intersection of the source and
-destination, covered only by the source, and covered only by the
-destination, respectively.
-
-Possible values of
-slink:VkPipelineColorBlendAdvancedStateCreateInfoEXT::pname:blendOverlap,
-specifying the blend overlap functions, are:
-
-include::{generated}/api/enums/VkBlendOverlapEXT.txt[]
-
-  * ename:VK_BLEND_OVERLAP_UNCORRELATED_EXT specifies that there is no
-    correlation between the source and destination coverage.
-  * ename:VK_BLEND_OVERLAP_CONJOINT_EXT specifies that the source and
-    destination coverage are considered to have maximal overlap.
-  * ename:VK_BLEND_OVERLAP_DISJOINT_EXT specifies that the source and
-    destination coverage are considered to have minimal overlap.
-
-[[framebuffer-blend-advanced-overlap-modes]]
-.Advanced Blend Overlap Modes
-[width="80%",options="header"]
-|====
-| Overlap Mode                              | Weighting Equations
-| ename:VK_BLEND_OVERLAP_UNCORRELATED_EXT  a|
-[latexmath]
-++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-                                              \begin{aligned}
-                                                p_0(A_s,A_d) & = A_sA_d \\
-                                                p_1(A_s,A_d) & = A_s(1-A_d) \\
-                                                p_2(A_s,A_d) & = A_d(1-A_s) \\
-                                              \end{aligned}
-++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-| ename:VK_BLEND_OVERLAP_CONJOINT_EXT      a|
-[latexmath]
-++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-                                              \begin{aligned}
-                                                p_0(A_s,A_d) & = min(A_s,A_d) \\
-                                                p_1(A_s,A_d) & = max(A_s-A_d,0) \\
-                                                p_2(A_s,A_d) & = max(A_d-A_s,0) \\
-                                              \end{aligned}
-++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-| ename:VK_BLEND_OVERLAP_DISJOINT_EXT      a|
-[latexmath]
-++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-                                              \begin{aligned}
-                                                p_0(A_s,A_d) & = max(A_s+A_d-1,0) \\
-                                                p_1(A_s,A_d) & = min(A_s,1-A_d) \\
-                                                p_2(A_s,A_d) & = min(A_d,1-A_s) \\
-                                              \end{aligned}
-++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-|====
---
-
-[[framebuffer-blend-advanced-fxyz-modes]]
-.f/X/Y/Z Advanced Blend Operations
-[width="80%",options="header"]
-|====
-| Mode                                      | Blend Coefficients
-| ename:VK_BLEND_OP_ZERO_EXT               a|
-[latexmath]
-++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-                                              \begin{aligned}
-                                                (X,Y,Z) & = (0,0,0) \\
-                                                f(C_s,C_d) & = 0
-                                              \end{aligned}
-++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-
-| ename:VK_BLEND_OP_SRC_EXT                a|
-[latexmath]
-++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-                                              \begin{aligned}
-                                                (X,Y,Z) & = (1,1,0) \\
-                                                f(C_s,C_d) & = C_s
-                                              \end{aligned}
-++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-| ename:VK_BLEND_OP_DST_EXT                a|
-[latexmath]
-++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-                                              \begin{aligned}
-                                                (X,Y,Z) & = (1,0,1) \\
-                                                f(C_s,C_d) & = C_d
-                                              \end{aligned}
-++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-| ename:VK_BLEND_OP_SRC_OVER_EXT           a|
-[latexmath]
-++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-                                              \begin{aligned}
-                                                (X,Y,Z) & = (1,1,1) \\
-                                                f(C_s,C_d) & = C_s
-                                              \end{aligned}
-++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-| ename:VK_BLEND_OP_DST_OVER_EXT           a|
-[latexmath]
-++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-                                              \begin{aligned}
-                                                (X,Y,Z) & = (1,1,1) \\
-                                                f(C_s,C_d) & = C_d
-                                              \end{aligned}
-++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-| ename:VK_BLEND_OP_SRC_IN_EXT             a|
-[latexmath]
-++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-                                              \begin{aligned}
-                                                (X,Y,Z) & = (1,0,0) \\
-                                                f(C_s,C_d) & = C_s
-                                              \end{aligned}
-++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-| ename:VK_BLEND_OP_DST_IN_EXT             a|
-[latexmath]
-++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-                                              \begin{aligned}
-                                                (X,Y,Z) & = (1,0,0) \\
-                                                f(C_s,C_d) & = C_d
-                                              \end{aligned}
-++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-| ename:VK_BLEND_OP_SRC_OUT_EXT            a|
-[latexmath]
-++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-                                              \begin{aligned}
-                                                (X,Y,Z) & = (0,1,0) \\
-                                                f(C_s,C_d) & = 0
-                                              \end{aligned}
-++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-| ename:VK_BLEND_OP_DST_OUT_EXT            a|
-[latexmath]
-++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-                                              \begin{aligned}
-                                                (X,Y,Z) & = (0,0,1) \\
-                                                f(C_s,C_d) & = 0
-                                              \end{aligned}
-++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-| ename:VK_BLEND_OP_SRC_ATOP_EXT           a|
-[latexmath]
-++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-                                              \begin{aligned}
-                                                (X,Y,Z) & = (1,0,1) \\
-                                                f(C_s,C_d) & = C_s
-                                              \end{aligned}
-++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-| ename:VK_BLEND_OP_DST_ATOP_EXT           a|
-[latexmath]
-++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-                                              \begin{aligned}
-                                                (X,Y,Z) & = (1,1,0) \\
-                                                f(C_s,C_d) & = C_d
-                                              \end{aligned}
-++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-| ename:VK_BLEND_OP_XOR_EXT                a|
-[latexmath]
-++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-                                              \begin{aligned}
-                                                (X,Y,Z) & = (0,1,1) \\
-                                                f(C_s,C_d) & = 0
-                                              \end{aligned}
-++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-| ename:VK_BLEND_OP_MULTIPLY_EXT           a|
-[latexmath]
-++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-                                              \begin{aligned}
-                                                (X,Y,Z) & = (1,1,1) \\
-                                                f(C_s,C_d) & = C_sC_d
-                                              \end{aligned}
-++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-| ename:VK_BLEND_OP_SCREEN_EXT             a|
-[latexmath]
-++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-                                              \begin{aligned}
-                                                (X,Y,Z) & = (1,1,1) \\
-                                                f(C_s,C_d) & = C_s+C_d-C_sC_d
-                                              \end{aligned}
-++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-
-| ename:VK_BLEND_OP_OVERLAY_EXT            a|
-[latexmath]
-++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-                                              \begin{aligned}
-                                                (X,Y,Z) & = (1,1,1) \\
-                                                f(C_s,C_d) & =
-                                                \begin{cases}
-                                                    2 C_sC_d            & C_d \leq 0.5 \\
-                                                    1-2 (1-C_s)(1-C_d)  & \text{otherwise}
-                                                \end{cases}
-                                              \end{aligned}
-++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-| ename:VK_BLEND_OP_DARKEN_EXT             a|
-[latexmath]
-++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-                                              \begin{aligned}
-                                                (X,Y,Z) & = (1,1,1) \\
-                                                f(C_s,C_d) & = min(C_s,C_d)
-                                              \end{aligned}
-++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-| ename:VK_BLEND_OP_LIGHTEN_EXT            a|
-[latexmath]
-++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-                                              \begin{aligned}
-                                                (X,Y,Z) & = (1,1,1) \\
-                                                f(C_s,C_d) & = max(C_s,C_d)
-                                              \end{aligned}
-++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-| ename:VK_BLEND_OP_COLORDODGE_EXT         a|
-[latexmath]
-++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-                                              \begin{aligned}
-                                                (X,Y,Z) & = (1,1,1) \\
-                                                f(C_s,C_d) & =
-                                                \begin{cases}
-                                                  0                         & C_d \leq 0 \\
-                                                  min(1,\frac{C_d}{1-C_s})  & C_d \gt 0 \text{ and } C_s \lt 1 \\
-                                                  1                         & C_d \gt 0 \text{ and } C_s \geq 1
-                                                \end{cases}
-                                              \end{aligned}
-++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-| ename:VK_BLEND_OP_COLORBURN_EXT          a|
-[latexmath]
-++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-                                              \begin{aligned}
-                                                (X,Y,Z) & = (1,1,1) \\
-                                                f(C_s,C_d) & =
-                                                \begin{cases}
-                                                  1                             & C_d \geq 1 \\
-                                                  1 - min(1,\frac{1-C_d}{C_s})  & C_d \lt 1 \text{ and } C_s \gt 0 \\
-                                                  0                             & C_d \lt 1 \text{ and } C_s \leq 0
-                                                \end{cases}
-                                              \end{aligned}
-++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-| ename:VK_BLEND_OP_HARDLIGHT_EXT          a|
-[latexmath]
-++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-                                              \begin{aligned}
-                                                (X,Y,Z) & = (1,1,1) \\
-                                                f(C_s,C_d) & =
-                                                \begin{cases}
-                                                    2 C_sC_d            & C_s \leq 0.5 \\
-                                                    1-2 (1-C_s)(1-C_d)  & \text{otherwise}
-                                                \end{cases}
-                                              \end{aligned}
-++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-| ename:VK_BLEND_OP_SOFTLIGHT_EXT          a|
-[latexmath]
-++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-                                              \begin{aligned}
-                                                (X,Y,Z) & = (1,1,1) \\
-                                                f(C_s,C_d) & =
-                                                \begin{cases}
-                                                  C_d-(1-2 C_s)C_d(1-C_d)               & C_s \leq 0.5 \\
-                                                  C_d+(2 C_s-1)C_d((16 C_d-12)C_d+3)    & C_s \gt 0.5 \text{ and } C_d \leq 0.25 \\
-                                                  C_d+(2 C_s-1)(\sqrt{C_d}-C_d)         & C_s \gt 0.5 \text{ and } C_d \gt 0.25
-                                                \end{cases}
-                                              \end{aligned}
-++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-| ename:VK_BLEND_OP_DIFFERENCE_EXT         a|
-[latexmath]
-++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-                                              \begin{aligned}
-                                                (X,Y,Z) & = (1,1,1) \\
-                                                f(C_s,C_d) & = \lvert C_d-C_s \rvert
-                                              \end{aligned}
-++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-| ename:VK_BLEND_OP_EXCLUSION_EXT          a|
-[latexmath]
-++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-                                              \begin{aligned}
-                                                (X,Y,Z) & = (1,1,1) \\
-                                                f(C_s,C_d) & = C_s+C_d-2C_sC_d
-                                              \end{aligned}
-++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-| ename:VK_BLEND_OP_INVERT_EXT             a|
-[latexmath]
-++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-                                              \begin{aligned}
-                                                (X,Y,Z) & = (1,0,1) \\
-                                                f(C_s,C_d) & = 1-C_d
-                                              \end{aligned}
-++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-| ename:VK_BLEND_OP_INVERT_RGB_EXT         a|
-[latexmath]
-++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-                                              \begin{aligned}
-                                                (X,Y,Z) & = (1,0,1) \\
-                                                f(C_s,C_d) & = C_s(1-C_d)
-                                              \end{aligned}
-++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-| ename:VK_BLEND_OP_LINEARDODGE_EXT        a|
-[latexmath]
-++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-                                              \begin{aligned}
-                                                (X,Y,Z) & = (1,1,1) \\
-                                                f(C_s,C_d) & =
-                                                \begin{cases}
-                                                  C_s+C_d           & C_s+C_d \leq 1 \\
-                                                  1                 & \text{otherwise}
-                                                \end{cases}
-                                              \end{aligned}
-++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-| ename:VK_BLEND_OP_LINEARBURN_EXT         a|
-[latexmath]
-++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-                                              \begin{aligned}
-                                                (X,Y,Z) & = (1,1,1) \\
-                                                f(C_s,C_d) & =
-                                                \begin{cases}
-                                                  C_s+C_d-1         & C_s+C_d \gt 1 \\
-                                                  0                 & \text{otherwise}
-                                                \end{cases}
-                                              \end{aligned}
-++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-| ename:VK_BLEND_OP_VIVIDLIGHT_EXT         a|
-[latexmath]
-++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-                                              \begin{aligned}
-                                                (X,Y,Z) & = (1,1,1) \\
-                                                f(C_s,C_d) & =
-                                                \begin{cases}
-                                                  1-min(1,\frac{1-C_d}{2C_s})   & 0  \lt  C_s  \lt  0.5 \\
-                                                  0                             & C_s  \leq  0 \\
-                                                  min(1,\frac{C_d}{2(1-C_s)})   & 0.5  \leq  C_s  \lt  1 \\
-                                                  1                             & C_s  \geq  1
-                                                \end{cases}
-                                              \end{aligned}
-++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-| ename:VK_BLEND_OP_LINEARLIGHT_EXT        a|
-[latexmath]
-++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-                                              \begin{aligned}
-                                                (X,Y,Z) & = (1,1,1) \\
-                                                f(C_s,C_d) & =
-                                                \begin{cases}
-                                                  1                         & 2C_s+C_d \gt 2 \\
-                                                  2C_s+C_d-1                & 1  \lt  2C_s+C_d  \leq  2 \\
-                                                  0                         & 2C_s+C_d \leq 1
-                                                \end{cases}
-                                              \end{aligned}
-++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-| ename:VK_BLEND_OP_PINLIGHT_EXT           a|
-[latexmath]
-++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-                                              \begin{aligned}
-                                                (X,Y,Z) & = (1,1,1) \\
-                                                f(C_s,C_d) & =
-                                                \begin{cases}
-                                                  0                         & 2C_s-1 \gt C_d \text{ and } C_s \lt 0.5 \\
-                                                  2C_s-1                    & 2C_s-1 \gt C_d \text{ and } C_s \geq 0.5 \\
-                                                  2C_s                      & 2C_s-1 \leq C_d \text{ and } C_s \lt 0.5C_d \\
-                                                  C_d                       & 2C_s-1 \leq C_d \text{ and } C_s \geq 0.5C_d
-                                                \end{cases}
-                                              \end{aligned}
-++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-| ename:VK_BLEND_OP_HARDMIX_EXT            a|
-[latexmath]
-++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-                                              \begin{aligned}
-                                                (X,Y,Z) & = (1,1,1) \\
-                                                f(C_s,C_d) & =
-                                                \begin{cases}
-                                                  0             & C_s+C_d \lt 1 \\
-                                                  1             & \text{otherwise}
-                                                \end{cases}
-                                              \end{aligned}
-++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-|====
-
-
-When using one of the HSL blend operations in table
-<<framebuffer-blend-advanced-hsl-modes,Hue-Saturation-Luminosity Advanced
-Blend Operations>> as the blend operation, the RGB color components produced
-by the function f are effectively obtained by converting both the
-non-premultiplied source and destination colors to the HSL (hue, saturation,
-luminosity) color space, generating a new HSL color by selecting H, S, and L
-components from the source or destination according to the blend operation,
-and then converting the result back to RGB.
-In the equations below, a blended RGB color is produced according to the
-following pseudocode:
-
-[source,c++]
-----------------------------------------
-  float minv3(vec3 c) {
-    return min(min(c.r, c.g), c.b);
-  }
-  float maxv3(vec3 c) {
-    return max(max(c.r, c.g), c.b);
-  }
-  float lumv3(vec3 c) {
-    return dot(c, vec3(0.30, 0.59, 0.11));
-  }
-  float satv3(vec3 c) {
-    return maxv3(c) - minv3(c);
-  }
-
-  // If any color components are outside [0,1], adjust the color to
-  // get the components in range.
-  vec3 ClipColor(vec3 color) {
-    float lum = lumv3(color);
-    float mincol = minv3(color);
-    float maxcol = maxv3(color);
-    if (mincol < 0.0) {
-      color = lum + ((color-lum)*lum) / (lum-mincol);
-    }
-    if (maxcol > 1.0) {
-      color = lum + ((color-lum)*(1-lum)) / (maxcol-lum);
-    }
-    return color;
-  }
-
-  // Take the base RGB color <cbase> and override its luminosity
-  // with that of the RGB color <clum>.
-  vec3 SetLum(vec3 cbase, vec3 clum) {
-    float lbase = lumv3(cbase);
-    float llum = lumv3(clum);
-    float ldiff = llum - lbase;
-    vec3 color = cbase + vec3(ldiff);
-    return ClipColor(color);
-  }
-
-  // Take the base RGB color <cbase> and override its saturation with
-  // that of the RGB color <csat>.  The override the luminosity of the
-  // result with that of the RGB color <clum>.
-  vec3 SetLumSat(vec3 cbase, vec3 csat, vec3 clum)
-  {
-    float minbase = minv3(cbase);
-    float sbase = satv3(cbase);
-    float ssat = satv3(csat);
-    vec3 color;
-    if (sbase > 0) {
-      // Equivalent (modulo rounding errors) to setting the
-      // smallest (R,G,B) component to 0, the largest to <ssat>,
-      // and interpolating the "middle" component based on its
-      // original value relative to the smallest/largest.
-      color = (cbase - minbase) * ssat / sbase;
-    } else {
-      color = vec3(0.0);
-    }
-    return SetLum(color, clum);
-  }
-----------------------------------------
-
-[[framebuffer-blend-advanced-hsl-modes]]
-.Hue-Saturation-Luminosity Advanced Blend Operations
-[width="80%",options="header"]
-|====
-| Mode                                      | Result
-| ename:VK_BLEND_OP_HSL_HUE_EXT            a|
-[latexmath]
-++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-                                              \begin{aligned}
-                                                (X,Y,Z) & = (1,1,1) \\
-                                                f(C_s,C_d) & = SetLumSat(C_s,C_d,C_d)
-                                              \end{aligned}
-++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-| ename:VK_BLEND_OP_HSL_SATURATION_EXT     a|
-[latexmath]
-++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-                                              \begin{aligned}
-                                                (X,Y,Z) & = (1,1,1) \\
-                                                f(C_s,C_d) & = SetLumSat(C_d,C_s,C_d)
-                                              \end{aligned}
-++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-| ename:VK_BLEND_OP_HSL_COLOR_EXT          a|
-[latexmath]
-++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-                                              \begin{aligned}
-                                                (X,Y,Z) & = (1,1,1) \\
-                                                f(C_s,C_d) & = SetLum(C_s,C_d)
-                                              \end{aligned}
-++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-| ename:VK_BLEND_OP_HSL_LUMINOSITY_EXT     a|
-[latexmath]
-++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-                                              \begin{aligned}
-                                                (X,Y,Z) & = (1,1,1) \\
-                                                f(C_s,C_d) & = SetLum(C_d,C_s)
-                                              \end{aligned}
-++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-|====
-
-
-When using one of the operations in table
-<<framebuffer-blend-advanced-additional-rgb,Additional RGB Blend
-Operations>> as the blend operation, the source and destination colors used
-by these blending operations are interpreted according to
-pname:srcPremultiplied and pname:dstPremultiplied.
-The blending operations below are evaluated where the RGB source and
-destination color components are both considered to have been premultiplied
-by the corresponding A component.
-
-[latexmath]
-+++++++++++++++++++
-\begin{aligned}
-  (R_s', G_s', B_s') & =
-  \begin{cases}
-    (R_s, G_s, B_s)                     & \text{if srcPremultiplied is VK\_TRUE} \\
-    (R_sA_s, G_sA_s, B_sA_s)            & \text{if srcPremultiplied is VK\_FALSE}
-  \end{cases} \\
-  (R_d', G_d', B_d') & =
-  \begin{cases}
-    (R_d, G_d, B_d)                     & \text{if dstPremultiplied is VK\_TRUE} \\
-    (R_dA_d, G_dA_d, B_dA_d)            & \text{if dstPremultiplied is VK\_FALSE}
-  \end{cases}
-\end{aligned}
-+++++++++++++++++++
-
-[[framebuffer-blend-advanced-additional-rgb]]
-.Additional RGB Blend Operations
-[width="80%",options="header"]
-|====
-| Mode                                      | Result
-| ename:VK_BLEND_OP_PLUS_EXT               a|
-[latexmath]
-++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-                                              \begin{aligned}
-                                                (R,G,B,A) = ( & R_s'+R_d', \\
-                                                              & G_s'+G_d', \\
-                                                              & B_s'+B_d', \\
-                                                              & A_s+A_d)
-                                              \end{aligned}
-++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-| ename:VK_BLEND_OP_PLUS_CLAMPED_EXT       a|
-[latexmath]
-++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-                                              \begin{aligned}
-                                                (R,G,B,A) = ( & min(1,R_s'+R_d'), \\
-                                                              & min(1,G_s'+G_d'), \\
-                                                              & min(1,B_s'+B_d'), \\
-                                                              & min(1,A_s+A_d))
-                                              \end{aligned}
-++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-| ename:VK_BLEND_OP_PLUS_CLAMPED_ALPHA_EXT a|
-[latexmath]
-++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-                                              \begin{aligned}
-                                                (R,G,B,A) = ( & min(min(1,A_s+A_d),R_s'+R_d'), \\
-                                                              & min(min(1,A_s+A_d),G_s'+G_d'), \\
-                                                              & min(min(1,A_s+A_d),B_s'+B_d'), \\
-                                                              & min(1,A_s+A_d))
-                                              \end{aligned}
-++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-| ename:VK_BLEND_OP_PLUS_DARKER_EXT        a|
-[latexmath]
-++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-                                              \begin{aligned}
-                                                (R,G,B,A) = ( & max(0,min(1,A_s+A_d)-((A_s-R_s')+(A_d-R_d'))), \\
-                                                              & max(0,min(1,A_s+A_d)-((A_s-G_s')+(A_d-G_d'))), \\
-                                                              & max(0,min(1,A_s+A_d)-((A_s-B_s')+(A_d-B_d'))), \\
-                                                              & min(1,A_s+A_d))
-                                              \end{aligned}
-++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-| ename:VK_BLEND_OP_MINUS_EXT              a|
-[latexmath]
-++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-                                              \begin{aligned}
-                                                (R,G,B,A) = ( & R_d'-R_s', \\
-                                                              & G_d'-G_s', \\
-                                                              & B_d'-B_s', \\
-                                                              & A_d-A_s)
-                                              \end{aligned}
-++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-| ename:VK_BLEND_OP_MINUS_CLAMPED_EXT      a|
-[latexmath]
-++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-                                              \begin{aligned}
-                                                (R,G,B,A) = ( & max(0,R_d'-R_s'), \\
-                                                              & max(0,G_d'-G_s'), \\
-                                                              & max(0,B_d'-B_s'), \\
-                                                              & max(0,A_d-A_s))
-                                              \end{aligned}
-++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-| ename:VK_BLEND_OP_CONTRAST_EXT           a|
-[latexmath]
-++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-                                              \begin{aligned}
-                                                (R,G,B,A) = ( & \frac{A_d}{2} + 2(R_d'-\frac{A_d}{2})(R_s'-\frac{A_s}{2}), \\
-                                                              & \frac{A_d}{2} + 2(G_d'-\frac{A_d}{2})(G_s'-\frac{A_s}{2}), \\
-                                                              & \frac{A_d}{2} + 2(B_d'-\frac{A_d}{2})(B_s'-\frac{A_s}{2}), \\
-                                                              & A_d)
-                                              \end{aligned}
-++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-| ename:VK_BLEND_OP_INVERT_OVG_EXT         a|
-[latexmath]
-++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-                                              \begin{aligned}
-                                                (R,G,B,A) = ( & A_s(1-R_d') + (1-A_s)R_d', \\
-                                                              & A_s(1-G_d') + (1-A_s)G_d', \\
-                                                              & A_s(1-B_d') + (1-A_s)B_d', \\
-                                                              & A_s+A_d-A_sA_d)
-                                              \end{aligned}
-++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-| ename:VK_BLEND_OP_RED_EXT                a|
-[latexmath]
-++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-                                              \begin{aligned}
-                                                (R,G,B,A) & = (R_s', G_d', B_d', A_d)
-                                              \end{aligned}
-++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-| ename:VK_BLEND_OP_GREEN_EXT              a|
-[latexmath]
-++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-                                              \begin{aligned}
-                                                (R,G,B,A) & = (R_d', G_s', B_d', A_d)
-                                              \end{aligned}
-++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-| ename:VK_BLEND_OP_BLUE_EXT               a|
-[latexmath]
-++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-                                              \begin{aligned}
-                                                (R,G,B,A) & = (R_d', G_d', B_s', A_d)
-                                              \end{aligned}
-++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-|====
diff --git a/registry/vulkan/chapters/VK_EXT_debug_marker.txt b/registry/vulkan/chapters/VK_EXT_debug_marker.txt
deleted file mode 100644
index 105da2c..0000000
--- a/registry/vulkan/chapters/VK_EXT_debug_marker.txt
+++ /dev/null
@@ -1,224 +0,0 @@
-// Copyright 2018-2021 The Khronos Group, Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-// This section is included inside the Debugging chapter (debugging.txt)
-
-[[debugging-debug-markers]]
-== Debug Markers
-
-Debug markers provide a flexible way for debugging and validation layers to
-receive annotation and debug information.
-
-The <<debugging-object-annotation,Object Annotation>> section describes how
-to associate a name or binary data with a Vulkan object.
-
-The <<debugging-command-buffer-markers,Command Buffer Markers>> section
-describes how to associate logical elements of the scene with commands in
-the command buffer.
-
-
-[[debugging-object-annotation]]
-=== Object Annotation
-
-The commands in this section allow application developers to associate
-user-defined information with Vulkan objects at will.
-
-[open,refpage='vkDebugMarkerSetObjectNameEXT',desc='Give a user-friendly name to an object',type='protos']
---
-An object can be given a user-friendly name by calling:
-
-include::{generated}/api/protos/vkDebugMarkerSetObjectNameEXT.txt[]
-
-  * pname:device is the device that created the object.
-  * pname:pNameInfo is a pointer to a slink:VkDebugMarkerObjectNameInfoEXT
-    structure specifying the parameters of the name to set on the object.
-
-include::{generated}/validity/protos/vkDebugMarkerSetObjectNameEXT.txt[]
---
-
-[open,refpage='VkDebugMarkerObjectNameInfoEXT',desc='Specify parameters of a name to give to an object',type='structs']
---
-The sname:VkDebugMarkerObjectNameInfoEXT structure is defined as:
-
-include::{generated}/api/structs/VkDebugMarkerObjectNameInfoEXT.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:objectType is a elink:VkDebugReportObjectTypeEXT specifying the
-    type of the object to be named.
-  * pname:object is the object to be named.
-  * pname:pObjectName is a null-terminated UTF-8 string specifying the name
-    to apply to pname:object.
-
-Applications may: change the name associated with an object simply by
-calling fname:vkDebugMarkerSetObjectNameEXT again with a new string.
-To remove a previously set name, pname:pObjectName should: be set to an
-empty string.
-
-.Valid Usage
-****
-  * [[VUID-VkDebugMarkerObjectNameInfoEXT-objectType-01490]]
-    pname:objectType must: not be
-    ename:VK_DEBUG_REPORT_OBJECT_TYPE_UNKNOWN_EXT
-  * [[VUID-VkDebugMarkerObjectNameInfoEXT-object-01491]]
-    pname:object must: not be dlink:VK_NULL_HANDLE
-  * [[VUID-VkDebugMarkerObjectNameInfoEXT-object-01492]]
-    pname:object must: be a Vulkan object of the type associated with
-    pname:objectType as defined in <<debug-report-object-types>>
-****
-
-include::{generated}/validity/structs/VkDebugMarkerObjectNameInfoEXT.txt[]
---
-
-[open,refpage='vkDebugMarkerSetObjectTagEXT',desc='Attach arbitrary data to an object',type='protos']
---
-In addition to setting a name for an object, debugging and validation layers
-may have uses for additional binary data on a per-object basis that has no
-other place in the Vulkan API.
-For example, a sname:VkShaderModule could have additional debugging data
-attached to it to aid in offline shader tracing.
-To attach data to an object, call:
-
-include::{generated}/api/protos/vkDebugMarkerSetObjectTagEXT.txt[]
-
-  * pname:device is the device that created the object.
-  * pname:pTagInfo is a pointer to a slink:VkDebugMarkerObjectTagInfoEXT
-    structure specifying the parameters of the tag to attach to the object.
-
-include::{generated}/validity/protos/vkDebugMarkerSetObjectTagEXT.txt[]
---
-
-[open,refpage='VkDebugMarkerObjectTagInfoEXT',desc='Specify parameters of a tag to attach to an object',type='structs']
---
-The sname:VkDebugMarkerObjectTagInfoEXT structure is defined as:
-
-include::{generated}/api/structs/VkDebugMarkerObjectTagInfoEXT.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:objectType is a elink:VkDebugReportObjectTypeEXT specifying the
-    type of the object to be named.
-  * pname:object is the object to be tagged.
-  * pname:tagName is a numerical identifier of the tag.
-  * pname:tagSize is the number of bytes of data to attach to the object.
-  * pname:pTag is a pointer to an array of pname:tagSize bytes containing
-    the data to be associated with the object.
-
-The pname:tagName parameter gives a name or identifier to the type of data
-being tagged.
-This can be used by debugging layers to easily filter for only data that can
-be used by that implementation.
-
-.Valid Usage
-****
-  * [[VUID-VkDebugMarkerObjectTagInfoEXT-objectType-01493]]
-    pname:objectType must: not be
-    ename:VK_DEBUG_REPORT_OBJECT_TYPE_UNKNOWN_EXT
-  * [[VUID-VkDebugMarkerObjectTagInfoEXT-object-01494]]
-    pname:object must: not be dlink:VK_NULL_HANDLE
-  * [[VUID-VkDebugMarkerObjectTagInfoEXT-object-01495]]
-    pname:object must: be a Vulkan object of the type associated with
-    pname:objectType as defined in <<debug-report-object-types>>
-****
-
-include::{generated}/validity/structs/VkDebugMarkerObjectTagInfoEXT.txt[]
---
-
-
-[[debugging-command-buffer-markers]]
-=== Command Buffer Markers
-
-Typical Vulkan applications will submit many command buffers in each frame,
-with each command buffer containing a large number of individual commands.
-Being able to logically annotate regions of command buffers that belong
-together as well as hierarchically subdivide the frame is important to a
-developer's ability to navigate the commands viewed holistically.
-
-The marker commands fname:vkCmdDebugMarkerBeginEXT and
-fname:vkCmdDebugMarkerEndEXT define regions of a series of commands that are
-grouped together, and they can be nested to create a hierarchy.
-The fname:vkCmdDebugMarkerInsertEXT command allows insertion of a single
-label within a command buffer.
-
-[open,refpage='vkCmdDebugMarkerBeginEXT',desc='Open a command buffer marker region',type='protos']
---
-A marker region can be opened by calling:
-
-include::{generated}/api/protos/vkCmdDebugMarkerBeginEXT.txt[]
-
-  * pname:commandBuffer is the command buffer into which the command is
-    recorded.
-  * pname:pMarkerInfo is a pointer to a slink:VkDebugMarkerMarkerInfoEXT
-    structure specifying the parameters of the marker region to open.
-
-include::{generated}/validity/protos/vkCmdDebugMarkerBeginEXT.txt[]
---
-
-[open,refpage='VkDebugMarkerMarkerInfoEXT',desc='Specify parameters of a command buffer marker region',type='structs']
---
-The sname:VkDebugMarkerMarkerInfoEXT structure is defined as:
-
-include::{generated}/api/structs/VkDebugMarkerMarkerInfoEXT.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:pMarkerName is a pointer to a null-terminated UTF-8 string
-    containing the name of the marker.
-  * pname:color is an optional: RGBA color value that can be associated with
-    the marker.
-    A particular implementation may: choose to ignore this color value.
-    The values contain RGBA values in order, in the range 0.0 to 1.0.
-    If all elements in pname:color are set to 0.0 then it is ignored.
-
-include::{generated}/validity/structs/VkDebugMarkerMarkerInfoEXT.txt[]
---
-
-[open,refpage='vkCmdDebugMarkerEndEXT',desc='Close a command buffer marker region',type='protos']
---
-A marker region can be closed by calling:
-
-include::{generated}/api/protos/vkCmdDebugMarkerEndEXT.txt[]
-
-  * pname:commandBuffer is the command buffer into which the command is
-    recorded.
-
-An application may: open a marker region in one command buffer and close it
-in another, or otherwise split marker regions across multiple command
-buffers or multiple queue submissions.
-When viewed from the linear series of submissions to a single queue, the
-calls to fname:vkCmdDebugMarkerBeginEXT and fname:vkCmdDebugMarkerEndEXT
-must: be matched and balanced.
-
-.Valid Usage
-****
-  * [[VUID-vkCmdDebugMarkerEndEXT-commandBuffer-01239]]
-    There must: be an outstanding flink:vkCmdDebugMarkerBeginEXT command
-    prior to the fname:vkCmdDebugMarkerEndEXT on the queue that
-    pname:commandBuffer is submitted to
-  * [[VUID-vkCmdDebugMarkerEndEXT-commandBuffer-01240]]
-    If pname:commandBuffer is a secondary command buffer, there must: be an
-    outstanding flink:vkCmdDebugMarkerBeginEXT command recorded to
-    pname:commandBuffer that has not previously been ended by a call to
-    flink:vkCmdDebugMarkerEndEXT
-****
-
-include::{generated}/validity/protos/vkCmdDebugMarkerEndEXT.txt[]
---
-
-[open,refpage='vkCmdDebugMarkerInsertEXT',desc='Insert a marker label into a command buffer',type='protos']
---
-A single marker label can be inserted into a command buffer by calling:
-
-include::{generated}/api/protos/vkCmdDebugMarkerInsertEXT.txt[]
-
-  * pname:commandBuffer is the command buffer into which the command is
-    recorded.
-  * pname:pMarkerInfo is a pointer to a slink:VkDebugMarkerMarkerInfoEXT
-    structure specifying the parameters of the marker to insert.
-
-include::{generated}/validity/protos/vkCmdDebugMarkerInsertEXT.txt[]
---
diff --git a/registry/vulkan/chapters/VK_EXT_debug_report.txt b/registry/vulkan/chapters/VK_EXT_debug_report.txt
deleted file mode 100644
index 7d507dc..0000000
--- a/registry/vulkan/chapters/VK_EXT_debug_report.txt
+++ /dev/null
@@ -1,297 +0,0 @@
-// Copyright 2018-2021 The Khronos Group, Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-// This section is included inside the Debugging chapter (debugging.txt)
-
-[[debugging-debug-report-callbacks]]
-== Debug Report Callbacks
-
-[open,refpage='VkDebugReportCallbackEXT',desc='Opaque handle to a debug report callback object',type='handles']
---
-Debug report callbacks are represented by sname:VkDebugReportCallbackEXT
-handles:
-
-include::{generated}/api/handles/VkDebugReportCallbackEXT.txt[]
---
-
-[open,refpage='vkCreateDebugReportCallbackEXT',desc='Create a debug report callback object',type='protos']
---
-Debug report callbacks give more detailed feedback on the application's use
-of Vulkan when events of interest occur.
-
-To register a debug report callback, an application uses
-flink:vkCreateDebugReportCallbackEXT.
-
-include::{generated}/api/protos/vkCreateDebugReportCallbackEXT.txt[]
-
-  * pname:instance is the instance the callback will be logged on.
-  * pname:pCreateInfo is a pointer to a
-    slink:VkDebugReportCallbackCreateInfoEXT structure defining the
-    conditions under which this callback will be called.
-  * pname:pAllocator controls host memory allocation as described in the
-    <<memory-allocation, Memory Allocation>> chapter.
-  * pname:pCallback is a pointer to a slink:VkDebugReportCallbackEXT handle
-    in which the created object is returned.
-
-include::{generated}/validity/protos/vkCreateDebugReportCallbackEXT.txt[]
---
-
-[open,refpage='VkDebugReportCallbackCreateInfoEXT',desc='Structure specifying parameters of a newly created debug report callback',type='structs']
---
-The definition of slink:VkDebugReportCallbackCreateInfoEXT is:
-
-include::{generated}/api/structs/VkDebugReportCallbackCreateInfoEXT.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:flags is a bitmask of elink:VkDebugReportFlagBitsEXT specifying
-    which event(s) will cause this callback to be called.
-  * pname:pfnCallback is the application callback function to call.
-  * pname:pUserData is user data to be passed to the callback.
-
-For each sname:VkDebugReportCallbackEXT that is created the
-sname:VkDebugReportCallbackCreateInfoEXT::pname:flags determine when that
-sname:VkDebugReportCallbackCreateInfoEXT::pname:pfnCallback is called.
-When an event happens, the implementation will do a bitwise AND of the
-event's elink:VkDebugReportFlagBitsEXT flags to each
-sname:VkDebugReportCallbackEXT object's flags.
-For each non-zero result the corresponding callback will be called.
-The callback will come directly from the component that detected the event,
-unless some other layer intercepts the calls for its own purposes (filter
-them in a different way, log to a system error log, etc.).
-
-An application may: receive multiple callbacks if multiple
-sname:VkDebugReportCallbackEXT objects were created.
-A callback will always be executed in the same thread as the originating
-Vulkan call.
-
-A callback may be called from multiple threads simultaneously (if the
-application is making Vulkan calls from multiple threads).
-
-include::{generated}/validity/structs/VkDebugReportCallbackCreateInfoEXT.txt[]
---
-
-[open,refpage='VkDebugReportFlagBitsEXT',desc='Bitmask specifying events which cause a debug report callback',type='enums']
---
-Bits which can: be set in
-slink:VkDebugReportCallbackCreateInfoEXT::pname:flags, specifying events
-which cause a debug report, are:
-
-include::{generated}/api/enums/VkDebugReportFlagBitsEXT.txt[]
-
-  * ename:VK_DEBUG_REPORT_ERROR_BIT_EXT specifies that the application has
-    violated a valid usage condition of the specification.
-  * ename:VK_DEBUG_REPORT_WARNING_BIT_EXT specifies use of Vulkan that may:
-    expose an app bug.
-    Such cases may not be immediately harmful, such as a fragment shader
-    outputting to a location with no attachment.
-    Other cases may: point to behavior that is almost certainly bad when
-    unintended such as using an image whose memory has not been filled.
-    In general if you see a warning but you know that the behavior is
-    intended/desired, then simply ignore the warning.
-  * ename:VK_DEBUG_REPORT_PERFORMANCE_WARNING_BIT_EXT specifies a
-    potentially non-optimal use of Vulkan, e.g. using
-    flink:vkCmdClearColorImage when setting
-    slink:VkAttachmentDescription::pname:loadOp to
-    ename:VK_ATTACHMENT_LOAD_OP_CLEAR would have worked.
-  * ename:VK_DEBUG_REPORT_INFORMATION_BIT_EXT specifies an informational
-    message such as resource details that may be handy when debugging an
-    application.
-  * ename:VK_DEBUG_REPORT_DEBUG_BIT_EXT specifies diagnostic information
-    from the implementation and layers.
---
-
-[open,refpage='VkDebugReportFlagsEXT',desc='Bitmask of VkDebugReportFlagBitsEXT',type='flags']
---
-include::{generated}/api/flags/VkDebugReportFlagsEXT.txt[]
-
-tname:VkDebugReportFlagsEXT is a bitmask type for setting a mask of zero or
-more elink:VkDebugReportFlagBitsEXT.
---
-
-[open,refpage='PFN_vkDebugReportCallbackEXT',desc='Application-defined debug report callback function',type='funcpointers']
---
-The prototype for the
-slink:VkDebugReportCallbackCreateInfoEXT::pname:pfnCallback function
-implemented by the application is:
-
-include::{generated}/api/funcpointers/PFN_vkDebugReportCallbackEXT.txt[]
-
-  * pname:flags specifies the elink:VkDebugReportFlagBitsEXT that triggered
-    this callback.
-  * pname:objectType is a elink:VkDebugReportObjectTypeEXT value specifying
-    the type of object being used or created at the time the event was
-    triggered.
-  * pname:object is the object where the issue was detected.
-    If pname:objectType is ename:VK_DEBUG_REPORT_OBJECT_TYPE_UNKNOWN_EXT,
-    pname:object is undefined:.
-  * pname:location is a component (layer, driver, loader) defined value
-    specifying the _location_ of the trigger.
-    This is an optional: value.
-  * pname:messageCode is a layer-defined value indicating what test
-    triggered this callback.
-  * pname:pLayerPrefix is a null-terminated string that is an abbreviation
-    of the name of the component making the callback.
-    pname:pLayerPrefix is only valid for the duration of the callback.
-  * pname:pMessage is a null-terminated string detailing the trigger
-    conditions.
-    pname:pMessage is only valid for the duration of the callback.
-  * pname:pUserData is the user data given when the
-    slink:VkDebugReportCallbackEXT was created.
-
-The callback must: not call fname:vkDestroyDebugReportCallbackEXT.
-
-The callback returns a basetype:VkBool32, which is interpreted in a
-layer-specified manner.
-The application should: always return ename:VK_FALSE.
-The ename:VK_TRUE value is reserved for use in layer development.
-
-pname:object must: be a Vulkan object or dlink:VK_NULL_HANDLE.
-If pname:objectType is not ename:VK_DEBUG_REPORT_OBJECT_TYPE_UNKNOWN_EXT and
-pname:object is not dlink:VK_NULL_HANDLE, pname:object must: be a Vulkan
-object of the corresponding type associated with pname:objectType as defined
-in <<debug-report-object-types>>.
---
-
-[open,refpage='VkDebugReportObjectTypeEXT',desc='Specify the type of an object handle',type='enums']
---
-Possible values passed to the pname:objectType parameter of the callback
-function specified by
-slink:VkDebugReportCallbackCreateInfoEXT::pname:pfnCallback, specifying the
-type of object handle being reported, are:
-
-include::{generated}/api/enums/VkDebugReportObjectTypeEXT.txt[]
-
-[[debug-report-object-types]]
-.`VkDebugReportObjectTypeEXT` and Vulkan Handle Relationship
-[width="80%",cols="<35,<23",options="header"]
-|====
-| elink:VkDebugReportObjectTypeEXT                            | Vulkan Handle Type
-| ename:VK_DEBUG_REPORT_OBJECT_TYPE_UNKNOWN_EXT               | Unknown/Undefined Handle
-| ename:VK_DEBUG_REPORT_OBJECT_TYPE_INSTANCE_EXT              | slink:VkInstance
-| ename:VK_DEBUG_REPORT_OBJECT_TYPE_PHYSICAL_DEVICE_EXT       | slink:VkPhysicalDevice
-| ename:VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_EXT                | slink:VkDevice
-| ename:VK_DEBUG_REPORT_OBJECT_TYPE_QUEUE_EXT                 | slink:VkQueue
-| ename:VK_DEBUG_REPORT_OBJECT_TYPE_SEMAPHORE_EXT             | slink:VkSemaphore
-| ename:VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_BUFFER_EXT        | slink:VkCommandBuffer
-| ename:VK_DEBUG_REPORT_OBJECT_TYPE_FENCE_EXT                 | slink:VkFence
-| ename:VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_MEMORY_EXT         | slink:VkDeviceMemory
-| ename:VK_DEBUG_REPORT_OBJECT_TYPE_BUFFER_EXT                | slink:VkBuffer
-| ename:VK_DEBUG_REPORT_OBJECT_TYPE_IMAGE_EXT                 | slink:VkImage
-| ename:VK_DEBUG_REPORT_OBJECT_TYPE_EVENT_EXT                 | slink:VkEvent
-| ename:VK_DEBUG_REPORT_OBJECT_TYPE_QUERY_POOL_EXT            | slink:VkQueryPool
-| ename:VK_DEBUG_REPORT_OBJECT_TYPE_BUFFER_VIEW_EXT           | slink:VkBufferView
-| ename:VK_DEBUG_REPORT_OBJECT_TYPE_IMAGE_VIEW_EXT            | slink:VkImageView
-| ename:VK_DEBUG_REPORT_OBJECT_TYPE_SHADER_MODULE_EXT         | slink:VkShaderModule
-| ename:VK_DEBUG_REPORT_OBJECT_TYPE_PIPELINE_CACHE_EXT        | slink:VkPipelineCache
-| ename:VK_DEBUG_REPORT_OBJECT_TYPE_PIPELINE_LAYOUT_EXT       | slink:VkPipelineLayout
-| ename:VK_DEBUG_REPORT_OBJECT_TYPE_RENDER_PASS_EXT           | slink:VkRenderPass
-| ename:VK_DEBUG_REPORT_OBJECT_TYPE_PIPELINE_EXT              | slink:VkPipeline
-| ename:VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_SET_LAYOUT_EXT | slink:VkDescriptorSetLayout
-| ename:VK_DEBUG_REPORT_OBJECT_TYPE_SAMPLER_EXT               | slink:VkSampler
-| ename:VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_POOL_EXT       | slink:VkDescriptorPool
-| ename:VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_SET_EXT        | slink:VkDescriptorSet
-| ename:VK_DEBUG_REPORT_OBJECT_TYPE_FRAMEBUFFER_EXT           | slink:VkFramebuffer
-| ename:VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_POOL_EXT          | slink:VkCommandPool
-ifdef::VK_KHR_surface[]
-| ename:VK_DEBUG_REPORT_OBJECT_TYPE_SURFACE_KHR_EXT           | slink:VkSurfaceKHR
-endif::VK_KHR_surface[]
-ifdef::VK_KHR_surface[]
-| ename:VK_DEBUG_REPORT_OBJECT_TYPE_SWAPCHAIN_KHR_EXT         | slink:VkSwapchainKHR
-endif::VK_KHR_surface[]
-| ename:VK_DEBUG_REPORT_OBJECT_TYPE_DEBUG_REPORT_CALLBACK_EXT_EXT | slink:VkDebugReportCallbackEXT
-ifdef::VK_KHR_display[]
-| ename:VK_DEBUG_REPORT_OBJECT_TYPE_DISPLAY_KHR_EXT           | slink:VkDisplayKHR
-| ename:VK_DEBUG_REPORT_OBJECT_TYPE_DISPLAY_MODE_KHR_EXT      | slink:VkDisplayModeKHR
-endif::VK_KHR_display[]
-ifndef::VK_VERSION_1_1[]
-ifdef::VK_VERSION_1_1,VK_KHR_descriptor_update_template[]
-| ename:VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_UPDATE_TEMPLATE_KHR_EXT | slink:VkDescriptorUpdateTemplate
-endif::VK_VERSION_1_1,VK_KHR_descriptor_update_template[]
-endif::VK_VERSION_1_1[]
-ifdef::VK_VERSION_1_1[]
-| ename:VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_UPDATE_TEMPLATE_EXT | slink:VkDescriptorUpdateTemplate
-endif::VK_VERSION_1_1[]
-|====
-
-[NOTE]
-.Note
-====
-The primary expected use of ename:VK_ERROR_VALIDATION_FAILED_EXT is for
-validation layer testing.
-It is not expected that an application would see this error code during
-normal use of the validation layers.
-====
---
-
-[open,refpage='vkDebugReportMessageEXT',desc='Inject a message into a debug stream',type='protos']
---
-To inject its own messages into the debug stream, call:
-
-include::{generated}/api/protos/vkDebugReportMessageEXT.txt[]
-
-  * pname:instance is the debug stream's slink:VkInstance.
-  * pname:flags specifies the elink:VkDebugReportFlagBitsEXT classification
-    of this event/message.
-  * pname:objectType is a elink:VkDebugReportObjectTypeEXT specifying the
-    type of object being used or created at the time the event was
-    triggered.
-  * pname:object is the object where the issue was detected.
-    pname:object can: be dlink:VK_NULL_HANDLE if there is no object
-    associated with the event.
-  * pname:location is an application defined value.
-  * pname:messageCode is an application defined value.
-  * pname:pLayerPrefix is the abbreviation of the component making this
-    event/message.
-  * pname:pMessage is a null-terminated string detailing the trigger
-    conditions.
-
-The call will propagate through the layers and generate callback(s) as
-indicated by the message's flags.
-The parameters are passed on to the callback in addition to the
-pname:pUserData value that was defined at the time the callback was
-registered.
-
-.Valid Usage
-****
-  * [[VUID-vkDebugReportMessageEXT-object-01241]]
-    pname:object must: be a Vulkan object or dlink:VK_NULL_HANDLE
-  * [[VUID-vkDebugReportMessageEXT-objectType-01498]]
-    If pname:objectType is not ename:VK_DEBUG_REPORT_OBJECT_TYPE_UNKNOWN_EXT
-    and pname:object is not dlink:VK_NULL_HANDLE, pname:object must: be a
-    Vulkan object of the corresponding type associated with pname:objectType
-    as defined in <<debug-report-object-types>>
-****
-
-include::{generated}/validity/protos/vkDebugReportMessageEXT.txt[]
---
-
-[open,refpage='vkDestroyDebugReportCallbackEXT',desc='Destroy a debug report callback object',type='protos']
---
-To destroy a sname:VkDebugReportCallbackEXT object, call:
-
-include::{generated}/api/protos/vkDestroyDebugReportCallbackEXT.txt[]
-
-  * pname:instance is the instance where the callback was created.
-  * pname:callback is the slink:VkDebugReportCallbackEXT object to destroy.
-    pname:callback is an externally synchronized object and must: not be
-    used on more than one thread at a time.
-    This means that fname:vkDestroyDebugReportCallbackEXT must: not be
-    called when a callback is active.
-  * pname:pAllocator controls host memory allocation as described in the
-    <<memory-allocation, Memory Allocation>> chapter.
-
-.Valid Usage
-****
-  * [[VUID-vkDestroyDebugReportCallbackEXT-instance-01242]]
-    If sname:VkAllocationCallbacks were provided when pname:callback was
-    created, a compatible set of callbacks must: be provided here
-  * [[VUID-vkDestroyDebugReportCallbackEXT-instance-01243]]
-    If no sname:VkAllocationCallbacks were provided when pname:callback was
-    created, pname:pAllocator must: be `NULL`
-****
-
-include::{generated}/validity/protos/vkDestroyDebugReportCallbackEXT.txt[]
---
diff --git a/registry/vulkan/chapters/VK_EXT_debug_utils.txt b/registry/vulkan/chapters/VK_EXT_debug_utils.txt
deleted file mode 100644
index b3f7ba3..0000000
--- a/registry/vulkan/chapters/VK_EXT_debug_utils.txt
+++ /dev/null
@@ -1,722 +0,0 @@
-// Copyright 2018-2021 The Khronos Group, Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-[[debugging-debug-utils]]
-== Debug Utilities
-
-Vulkan provides flexible debugging utilities for debugging an application.
-
-The <<debugging-object-debug-annotation,Object Debug Annotation>> section
-describes how to associate either a name or binary data with a specific
-Vulkan object.
-
-The <<debugging-queue-labels,Queue Labels>> section describes how to
-annotate and group the work submitted to a queue.
-
-The <<debugging-command-buffer-labels,Command Buffer Labels>> section
-describes how to associate logical elements of the scene with commands in a
-slink:VkCommandBuffer.
-
-The <<debugging-debug-messengers,Debug Messengers>> section describes how to
-create debug messenger objects associated with an application supplied
-callback to capture debug messages from a variety of Vulkan components.
-
-
-[[debugging-object-debug-annotation]]
-=== Object Debug Annotation
-
-It can be useful for an application to provide its own content relative to a
-specific Vulkan object.
-The following commands allow application developers to associate
-user-defined information with Vulkan objects.
-
-
-[[debugging-object-naming]]
-==== Object Naming
-
-An object can be provided a user-defined name by calling
-fname:vkSetDebugUtilsObjectNameEXT as defined below.
-
-[open,refpage='vkSetDebugUtilsObjectNameEXT',desc='Give a user-friendly name to an object',type='protos']
---
-include::{generated}/api/protos/vkSetDebugUtilsObjectNameEXT.txt[]
-
-  * pname:device is the device that created the object.
-  * pname:pNameInfo is a pointer to a slink:VkDebugUtilsObjectNameInfoEXT
-    structure specifying parameters of the name to set on the object.
-
-.Valid Usage
-****
-  * [[VUID-vkSetDebugUtilsObjectNameEXT-pNameInfo-02587]]
-    pname:pNameInfo->objectType must: not be ename:VK_OBJECT_TYPE_UNKNOWN
-  * [[VUID-vkSetDebugUtilsObjectNameEXT-pNameInfo-02588]]
-    pname:pNameInfo->objectHandle must: not be dlink:VK_NULL_HANDLE
-****
-
-include::{generated}/validity/protos/vkSetDebugUtilsObjectNameEXT.txt[]
---
-
-[open,refpage='VkDebugUtilsObjectNameInfoEXT',desc='Specify parameters of a name to give to an object',type='structs']
---
-The sname:VkDebugUtilsObjectNameInfoEXT structure is defined as:
-
-include::{generated}/api/structs/VkDebugUtilsObjectNameInfoEXT.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:objectType is a elink:VkObjectType specifying the type of the
-    object to be named.
-  * pname:objectHandle is the object to be named.
-  * pname:pObjectName is either `NULL` or a null-terminated UTF-8 string
-    specifying the name to apply to pname:objectHandle.
-
-Applications may: change the name associated with an object simply by
-calling fname:vkSetDebugUtilsObjectNameEXT again with a new string.
-If pname:pObjectName is either `NULL` or an empty string, then any
-previously set name is removed.
-
-.Valid Usage
-****
-  * [[VUID-VkDebugUtilsObjectNameInfoEXT-objectType-02589]]
-    If pname:objectType is ename:VK_OBJECT_TYPE_UNKNOWN, pname:objectHandle
-    must: not be dlink:VK_NULL_HANDLE
-  * [[VUID-VkDebugUtilsObjectNameInfoEXT-objectType-02590]]
-    If pname:objectType is not ename:VK_OBJECT_TYPE_UNKNOWN,
-    pname:objectHandle must: be dlink:VK_NULL_HANDLE or a valid Vulkan
-    handle of the type associated with pname:objectType as defined in the
-    <<debugging-object-types, `VkObjectType` and Vulkan Handle
-    Relationship>> table
-****
-
-include::{generated}/validity/structs/VkDebugUtilsObjectNameInfoEXT.txt[]
---
-
-
-[[debugging-object-data-association]]
-==== Object Data Association
-
-In addition to setting a name for an object, debugging and validation layers
-may: have uses for additional binary data on a per-object basis that have no
-other place in the Vulkan API.
-
-For example, a sname:VkShaderModule could have additional debugging data
-attached to it to aid in offline shader tracing.
-
-Additional data can be attached to an object by calling
-fname:vkSetDebugUtilsObjectTagEXT as defined below.
-
-[open,refpage='vkSetDebugUtilsObjectTagEXT',desc='Attach arbitrary data to an object',type='protos']
---
-include::{generated}/api/protos/vkSetDebugUtilsObjectTagEXT.txt[]
-
-  * pname:device is the device that created the object.
-  * pname:pTagInfo is a pointer to a slink:VkDebugUtilsObjectTagInfoEXT
-    structure specifying parameters of the tag to attach to the object.
-
-include::{generated}/validity/protos/vkSetDebugUtilsObjectTagEXT.txt[]
---
-
-[open,refpage='VkDebugUtilsObjectTagInfoEXT',desc='Specify parameters of a tag to attach to an object',type='structs']
---
-The sname:VkDebugUtilsObjectTagInfoEXT structure is defined as:
-
-include::{generated}/api/structs/VkDebugUtilsObjectTagInfoEXT.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:objectType is a elink:VkObjectType specifying the type of the
-    object to be named.
-  * pname:objectHandle is the object to be tagged.
-  * pname:tagName is a numerical identifier of the tag.
-  * pname:tagSize is the number of bytes of data to attach to the object.
-  * pname:pTag is a pointer to an array of pname:tagSize bytes containing
-    the data to be associated with the object.
-
-The pname:tagName parameter gives a name or identifier to the type of data
-being tagged.
-This can be used by debugging layers to easily filter for only data that can
-be used by that implementation.
-
-.Valid Usage
-****
-  * [[VUID-VkDebugUtilsObjectTagInfoEXT-objectType-01908]]
-    pname:objectType must: not be ename:VK_OBJECT_TYPE_UNKNOWN
-  * [[VUID-VkDebugUtilsObjectTagInfoEXT-objectHandle-01910]]
-    pname:objectHandle must: be a valid Vulkan handle of the type associated
-    with pname:objectType as defined in the <<debugging-object-types,
-    `VkObjectType` and Vulkan Handle Relationship>> table
-****
-
-include::{generated}/validity/structs/VkDebugUtilsObjectTagInfoEXT.txt[]
---
-
-
-[[debugging-queue-labels]]
-=== Queue Labels
-
-All Vulkan work must be submitted using queues.
-It is possible for an application to use multiple queues, each containing
-multiple command buffers, when performing work.
-It can be useful to identify which queue, or even where in a queue,
-something has occurred.
-
-To begin identifying a region using a debug label inside a queue, you may
-use the flink:vkQueueBeginDebugUtilsLabelEXT command.
-
-Then, when the region of interest has passed, you may end the label region
-using flink:vkQueueEndDebugUtilsLabelEXT.
-
-Additionally, a single debug label may be inserted at any time using
-flink:vkQueueInsertDebugUtilsLabelEXT.
-
-[open,refpage='vkQueueBeginDebugUtilsLabelEXT',desc='Open a queue debug label region',type='protos']
---
-A queue debug label region is opened by calling:
-
-include::{generated}/api/protos/vkQueueBeginDebugUtilsLabelEXT.txt[]
-
-  * pname:queue is the queue in which to start a debug label region.
-  * pname:pLabelInfo is a pointer to a slink:VkDebugUtilsLabelEXT structure
-    specifying parameters of the label region to open.
-
-include::{generated}/validity/protos/vkQueueBeginDebugUtilsLabelEXT.txt[]
---
-
-[open,refpage='VkDebugUtilsLabelEXT',desc='Specify parameters of a label region',type='structs']
---
-The sname:VkDebugUtilsLabelEXT structure is defined as:
-
-include::{generated}/api/structs/VkDebugUtilsLabelEXT.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:pLabelName is a pointer to a null-terminated UTF-8 string
-    containing the name of the label.
-  * pname:color is an optional RGBA color value that can be associated with
-    the label.
-    A particular implementation may: choose to ignore this color value.
-    The values contain RGBA values in order, in the range 0.0 to 1.0.
-    If all elements in pname:color are set to 0.0 then it is ignored.
-
-include::{generated}/validity/structs/VkDebugUtilsLabelEXT.txt[]
---
-
-[open,refpage='vkQueueEndDebugUtilsLabelEXT',desc='Close a queue debug label region',type='protos']
---
-A queue debug label region is closed by calling:
-
-include::{generated}/api/protos/vkQueueEndDebugUtilsLabelEXT.txt[]
-
-  * pname:queue is the queue in which a debug label region should be closed.
-
-The calls to flink:vkQueueBeginDebugUtilsLabelEXT and
-flink:vkQueueEndDebugUtilsLabelEXT must: be matched and balanced.
-
-.Valid Usage
-****
-  * [[VUID-vkQueueEndDebugUtilsLabelEXT-None-01911]]
-    There must: be an outstanding fname:vkQueueBeginDebugUtilsLabelEXT
-    command prior to the fname:vkQueueEndDebugUtilsLabelEXT on the queue
-****
-
-include::{generated}/validity/protos/vkQueueEndDebugUtilsLabelEXT.txt[]
---
-
-[open,refpage='vkQueueInsertDebugUtilsLabelEXT',desc='Insert a label into a queue',type='protos']
---
-A single label can be inserted into a queue by calling:
-
-include::{generated}/api/protos/vkQueueInsertDebugUtilsLabelEXT.txt[]
-
-  * pname:queue is the queue into which a debug label will be inserted.
-  * pname:pLabelInfo is a pointer to a slink:VkDebugUtilsLabelEXT structure
-    specifying parameters of the label to insert.
-
-include::{generated}/validity/protos/vkQueueInsertDebugUtilsLabelEXT.txt[]
---
-
-
-[[debugging-command-buffer-labels]]
-=== Command Buffer Labels
-
-Typical Vulkan applications will submit many command buffers in each frame,
-with each command buffer containing a large number of individual commands.
-Being able to logically annotate regions of command buffers that belong
-together as well as hierarchically subdivide the frame is important to a
-developer's ability to navigate the commands viewed holistically.
-
-To identify the beginning of a debug label region in a command buffer,
-flink:vkCmdBeginDebugUtilsLabelEXT can: be used as defined below.
-
-To indicate the end of a debug label region in a command buffer,
-flink:vkCmdEndDebugUtilsLabelEXT can: be used.
-
-To insert a single command buffer debug label inside of a command buffer,
-flink:vkCmdInsertDebugUtilsLabelEXT can: be used as defined below.
-
-[open,refpage='vkCmdBeginDebugUtilsLabelEXT',desc='Open a command buffer debug label region',type='protos']
---
-A command buffer debug label region can be opened by calling:
-
-include::{generated}/api/protos/vkCmdBeginDebugUtilsLabelEXT.txt[]
-
-  * pname:commandBuffer is the command buffer into which the command is
-    recorded.
-  * pname:pLabelInfo is a pointer to a slink:VkDebugUtilsLabelEXT structure
-    specifying parameters of the label region to open.
-
-include::{generated}/validity/protos/vkCmdBeginDebugUtilsLabelEXT.txt[]
---
-
-[open,refpage='vkCmdEndDebugUtilsLabelEXT',desc='Close a command buffer label region',type='protos']
---
-A command buffer label region can be closed by calling:
-
-include::{generated}/api/protos/vkCmdEndDebugUtilsLabelEXT.txt[]
-
-  * pname:commandBuffer is the command buffer into which the command is
-    recorded.
-
-An application may: open a debug label region in one command buffer and
-close it in another, or otherwise split debug label regions across multiple
-command buffers or multiple queue submissions.
-When viewed from the linear series of submissions to a single queue, the
-calls to flink:vkCmdBeginDebugUtilsLabelEXT and
-flink:vkCmdEndDebugUtilsLabelEXT must: be matched and balanced.
-
-There can: be problems reporting command buffer debug labels during the
-recording process because command buffers may: be recorded out of sequence
-with the resulting execution order.
-Since the recording order may: be different, a solitary command buffer may:
-have an inconsistent view of the debug label regions by itself.
-Therefore, if an issue occurs during the recording of a command buffer, and
-the environment requires returning debug labels, the implementation may:
-return only those labels it is aware of.
-This is true even if the implementation is aware of only the debug labels
-within the command buffer being actively recorded.
-
-
-.Valid Usage
-****
-  * [[VUID-vkCmdEndDebugUtilsLabelEXT-commandBuffer-01912]]
-    There must: be an outstanding fname:vkCmdBeginDebugUtilsLabelEXT command
-    prior to the fname:vkCmdEndDebugUtilsLabelEXT on the queue that
-    pname:commandBuffer is submitted to
-  * [[VUID-vkCmdEndDebugUtilsLabelEXT-commandBuffer-01913]]
-    If pname:commandBuffer is a secondary command buffer, there must: be an
-    outstanding fname:vkCmdBeginDebugUtilsLabelEXT command recorded to
-    pname:commandBuffer that has not previously been ended by a call to
-    fname:vkCmdEndDebugUtilsLabelEXT
-****
-
-include::{generated}/validity/protos/vkCmdEndDebugUtilsLabelEXT.txt[]
---
-
-[open,refpage='vkCmdInsertDebugUtilsLabelEXT',desc='Insert a label into a command buffer',type='protos']
---
-A single debug label can be inserted into a command buffer by calling:
-
-include::{generated}/api/protos/vkCmdInsertDebugUtilsLabelEXT.txt[]
-
-  * pname:commandBuffer is the command buffer into which the command is
-    recorded.
-  * pname:pInfo is a pointer to a slink:VkDebugUtilsLabelEXT structure
-    specifying parameters of the label to insert.
-
-include::{generated}/validity/protos/vkCmdInsertDebugUtilsLabelEXT.txt[]
---
-
-
-[[debugging-debug-messengers]]
-=== Debug Messengers
-
-Vulkan allows an application to register multiple callbacks with any Vulkan
-component wishing to report debug information.
-Some callbacks may log the information to a file, others may cause a debug
-break point or other application defined behavior.
-A primary producer of callback messages are the validation layers.
-An application can: register callbacks even when no validation layers are
-enabled, but they will only be called for the Vulkan loader and, if
-implemented, other layer and driver events.
-
-[open,refpage='VkDebugUtilsMessengerEXT',desc='Opaque handle to a debug messenger object',type='handles']
---
-A sname:VkDebugUtilsMessengerEXT is a messenger object which handles passing
-along debug messages to a provided debug callback.
-
-include::{generated}/api/handles/VkDebugUtilsMessengerEXT.txt[]
-
-The debug messenger will provide detailed feedback on the application's use
-of Vulkan when events of interest occur.
-When an event of interest does occur, the debug messenger will submit a
-debug message to the debug callback that was provided during its creation.
-Additionally, the debug messenger is responsible with filtering out debug
-messages that the callback is not interested in and will only provide
-desired debug messages.
---
-
-[open,refpage='vkCreateDebugUtilsMessengerEXT',desc='Create a debug messenger object',type='protos']
---
-A debug messenger triggers a debug callback with a debug message when an
-event of interest occurs.
-To create a debug messenger which will trigger a debug callback, call:
-
-include::{generated}/api/protos/vkCreateDebugUtilsMessengerEXT.txt[]
-
-  * pname:instance is the instance the messenger will be used with.
-  * pname:pCreateInfo is a pointer to a
-    slink:VkDebugUtilsMessengerCreateInfoEXT structure containing the
-    callback pointer, as well as defining conditions under which this
-    messenger will trigger the callback.
-  * pname:pAllocator controls host memory allocation as described in the
-    <<memory-allocation, Memory Allocation>> chapter.
-  * pname:pMessenger is a pointer to a slink:VkDebugUtilsMessengerEXT handle
-    in which the created object is returned.
-
-include::{generated}/validity/protos/vkCreateDebugUtilsMessengerEXT.txt[]
-
-The application must: ensure that flink:vkCreateDebugUtilsMessengerEXT is
-not executed in parallel with any Vulkan command that is also called with
-pname:instance or child of pname:instance as the dispatchable argument.
---
-
-[open,refpage='VkDebugUtilsMessengerCreateInfoEXT',desc='Structure specifying parameters of a newly created debug messenger',type='structs']
---
-The definition of sname:VkDebugUtilsMessengerCreateInfoEXT is:
-
-include::{generated}/api/structs/VkDebugUtilsMessengerCreateInfoEXT.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:flags is `0` and is reserved for future use.
-  * pname:messageSeverity is a bitmask of
-    elink:VkDebugUtilsMessageSeverityFlagBitsEXT specifying which severity
-    of event(s) will cause this callback to be called.
-  * pname:messageType is a bitmask of
-    elink:VkDebugUtilsMessageTypeFlagBitsEXT specifying which type of
-    event(s) will cause this callback to be called.
-  * pname:pfnUserCallback is the application callback function to call.
-  * pname:pUserData is user data to be passed to the callback.
-
-For each sname:VkDebugUtilsMessengerEXT that is created the
-sname:VkDebugUtilsMessengerCreateInfoEXT::pname:messageSeverity and
-sname:VkDebugUtilsMessengerCreateInfoEXT::pname:messageType determine when
-that sname:VkDebugUtilsMessengerCreateInfoEXT::pname:pfnUserCallback is
-called.
-The process to determine if the user's pname:pfnUserCallback is triggered
-when an event occurs is as follows:
-
-  . The implementation will perform a bitwise AND of the event's
-    elink:VkDebugUtilsMessageSeverityFlagBitsEXT with the
-    pname:messageSeverity provided during creation of the
-    slink:VkDebugUtilsMessengerEXT object.
-  .. If the value is 0, the message is skipped.
-  . The implementation will perform bitwise AND of the event's
-    elink:VkDebugUtilsMessageTypeFlagBitsEXT with the pname:messageType
-    provided during the creation of the slink:VkDebugUtilsMessengerEXT
-    object.
-  .. If the value is 0, the message is skipped.
-  . The callback will trigger a debug message for the current event
-
-The callback will come directly from the component that detected the event,
-unless some other layer intercepts the calls for its own purposes (filter
-them in a different way, log to a system error log, etc.).
-
-An application can: receive multiple callbacks if multiple
-sname:VkDebugUtilsMessengerEXT objects are created.
-A callback will always be executed in the same thread as the originating
-Vulkan call.
-
-A callback can: be called from multiple threads simultaneously (if the
-application is making Vulkan calls from multiple threads).
-
-.Valid Usage
-****
-  * [[VUID-VkDebugUtilsMessengerCreateInfoEXT-pfnUserCallback-01914]]
-    pname:pfnUserCallback must: be a valid
-    tlink:PFN_vkDebugUtilsMessengerCallbackEXT
-****
-
-include::{generated}/validity/structs/VkDebugUtilsMessengerCreateInfoEXT.txt[]
---
-
-[open,refpage='VkDebugUtilsMessengerCreateFlagsEXT',desc='Reserved for future use',type='flags']
---
-include::{generated}/api/flags/VkDebugUtilsMessengerCreateFlagsEXT.txt[]
-
-tname:VkDebugUtilsMessengerCreateFlagsEXT is a bitmask type for setting a
-mask, but is currently reserved for future use.
---
-
-[open,refpage='VkDebugUtilsMessageSeverityFlagBitsEXT',desc='Bitmask specifying which severities of events cause a debug messenger callback',type='enums']
---
-Bits which can: be set in
-slink:VkDebugUtilsMessengerCreateInfoEXT::pname:messageSeverity, specifying
-event severities which cause a debug messenger to call the callback, are:
-
-include::{generated}/api/enums/VkDebugUtilsMessageSeverityFlagBitsEXT.txt[]
-
-  * ename:VK_DEBUG_UTILS_MESSAGE_SEVERITY_VERBOSE_BIT_EXT specifies the most
-    verbose output indicating all diagnostic messages from the Vulkan
-    loader, layers, and drivers should be captured.
-  * ename:VK_DEBUG_UTILS_MESSAGE_SEVERITY_INFO_BIT_EXT specifies an
-    informational message such as resource details that may be handy when
-    debugging an application.
-  * ename:VK_DEBUG_UTILS_MESSAGE_SEVERITY_WARNING_BIT_EXT specifies use of
-    Vulkan that may: expose an app bug.
-    Such cases may not be immediately harmful, such as a fragment shader
-    outputting to a location with no attachment.
-    Other cases may: point to behavior that is almost certainly bad when
-    unintended such as using an image whose memory has not been filled.
-    In general if you see a warning but you know that the behavior is
-    intended/desired, then simply ignore the warning.
-  * ename:VK_DEBUG_UTILS_MESSAGE_SEVERITY_ERROR_BIT_EXT specifies that the
-    application has violated a valid usage condition of the specification.
-
-[NOTE]
-.Note
-====
-The values of elink:VkDebugUtilsMessageSeverityFlagBitsEXT are sorted based
-on severity.
-The higher the flag value, the more severe the message.
-This allows for simple boolean operation comparisons when looking at
-elink:VkDebugUtilsMessageSeverityFlagBitsEXT values.
-
-For example:
-
-[source,c++]
-~~~~
-    if (messageSeverity >= VK_DEBUG_UTILS_MESSAGE_SEVERITY_WARNING_BIT_EXT) {
-        // Do something for warnings and errors
-    }
-~~~~
-
-In addition, space has been left between the enums to allow for later
-addition of new severities in between the existing values.
-====
---
-
-[open,refpage='VkDebugUtilsMessageSeverityFlagsEXT',desc='Bitmask of VkDebugUtilsMessageSeverityFlagBitsEXT',type='flags']
---
-include::{generated}/api/flags/VkDebugUtilsMessageSeverityFlagsEXT.txt[]
-
-tname:VkDebugUtilsMessageSeverityFlagsEXT is a bitmask type for setting a
-mask of zero or more elink:VkDebugUtilsMessageSeverityFlagBitsEXT.
---
-
-[open,refpage='VkDebugUtilsMessageTypeFlagBitsEXT',desc='Bitmask specifying which types of events cause a debug messenger callback',type='enums']
---
-Bits which can: be set in
-slink:VkDebugUtilsMessengerCreateInfoEXT::pname:messageType, specifying
-event types which cause a debug messenger to call the callback, are:
-
-include::{generated}/api/enums/VkDebugUtilsMessageTypeFlagBitsEXT.txt[]
-
-  * ename:VK_DEBUG_UTILS_MESSAGE_TYPE_GENERAL_BIT_EXT specifies that some
-    general event has occurred.
-    This is typically a non-specification, non-performance event.
-  * ename:VK_DEBUG_UTILS_MESSAGE_TYPE_VALIDATION_BIT_EXT specifies that
-    something has occurred during validation against the Vulkan
-    specification that may indicate invalid behavior.
-  * ename:VK_DEBUG_UTILS_MESSAGE_TYPE_PERFORMANCE_BIT_EXT specifies a
-    potentially non-optimal use of Vulkan, e.g. using
-    flink:vkCmdClearColorImage when setting
-    slink:VkAttachmentDescription::pname:loadOp to
-    ename:VK_ATTACHMENT_LOAD_OP_CLEAR would have worked.
---
-
-[open,refpage='VkDebugUtilsMessageTypeFlagsEXT',desc='Bitmask of VkDebugUtilsMessageTypeFlagBitsEXT',type='flags']
---
-include::{generated}/api/flags/VkDebugUtilsMessageTypeFlagsEXT.txt[]
-
-tname:VkDebugUtilsMessageTypeFlagsEXT is a bitmask type for setting a mask
-of zero or more elink:VkDebugUtilsMessageTypeFlagBitsEXT.
---
-
-[open,refpage='PFN_vkDebugUtilsMessengerCallbackEXT',desc='Application-defined debug messenger callback function',type='funcpointers']
---
-The prototype for the
-slink:VkDebugUtilsMessengerCreateInfoEXT::pname:pfnUserCallback function
-implemented by the application is:
-
-include::{generated}/api/funcpointers/PFN_vkDebugUtilsMessengerCallbackEXT.txt[]
-
-  * pname:messageSeverity specifies the
-    elink:VkDebugUtilsMessageSeverityFlagBitsEXT that triggered this
-    callback.
-  * pname:messageTypes is a bitmask of
-    elink:VkDebugUtilsMessageTypeFlagBitsEXT specifying which type of
-    event(s) triggered this callback.
-  * pname:pCallbackData contains all the callback related data in the
-    slink:VkDebugUtilsMessengerCallbackDataEXT structure.
-  * pname:pUserData is the user data provided when the
-    slink:VkDebugUtilsMessengerEXT was created.
-
-The callback returns a basetype:VkBool32, which is interpreted in a
-layer-specified manner.
-The application should: always return ename:VK_FALSE.
-The ename:VK_TRUE value is reserved for use in layer development.
-
-.Valid Usage
-****
-  * [[VUID-PFN_vkDebugUtilsMessengerCallbackEXT-None-04769]]
-    The callback must: not make calls to any Vulkan commands
-****
---
-
-[open,refpage='VkDebugUtilsMessengerCallbackDataEXT',desc='Structure specifying parameters returned to the callback',type='structs']
---
-The definition of sname:VkDebugUtilsMessengerCallbackDataEXT is:
-
-include::{generated}/api/structs/VkDebugUtilsMessengerCallbackDataEXT.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:flags is `0` and is reserved for future use.
-  * pname:pMessageIdName is a null-terminated string that identifies the
-    particular message ID that is associated with the provided message.
-    If the message corresponds to a validation layer message, then this
-    string may contain the portion of the Vulkan specification that is
-    believed to have been violated.
-  * pname:messageIdNumber is the ID number of the triggering message.
-    If the message corresponds to a validation layer message, then this
-    number is related to the internal number associated with the message
-    being triggered.
-  * pname:pMessage is a null-terminated string detailing the trigger
-    conditions.
-  * pname:queueLabelCount is a count of items contained in the
-    pname:pQueueLabels array.
-  * pname:pQueueLabels is `NULL` or a pointer to an array of
-    slink:VkDebugUtilsLabelEXT active in the current sname:VkQueue at the
-    time the callback was triggered.
-    Refer to <<debugging-queue-labels,Queue Labels>> for more information.
-  * pname:cmdBufLabelCount is a count of items contained in the
-    pname:pCmdBufLabels array.
-  * pname:pCmdBufLabels is `NULL` or a pointer to an array of
-    slink:VkDebugUtilsLabelEXT active in the current sname:VkCommandBuffer
-    at the time the callback was triggered.
-    Refer to <<debugging-command-buffer-labels, Command Buffer Labels>> for
-    more information.
-  * pname:objectCount is a count of items contained in the pname:pObjects
-    array.
-  * pname:pObjects is a pointer to an array of
-    slink:VkDebugUtilsObjectNameInfoEXT objects related to the detected
-    issue.
-    The array is roughly in order or importance, but the 0th element is
-    always guaranteed to be the most important object for this message.
-
-[NOTE]
-.Note
-====
-This structure should only be considered valid during the lifetime of the
-triggered callback.
-====
-
-Since adding queue and command buffer labels behaves like pushing and
-popping onto a stack, the order of both pname:pQueueLabels and
-pname:pCmdBufLabels is based on the order the labels were defined.
-The result is that the first label in either pname:pQueueLabels or
-pname:pCmdBufLabels will be the first defined (and therefore the oldest)
-while the last label in each list will be the most recent.
-
-[NOTE]
-.Note
-====
-pname:pQueueLabels will only be non-`NULL` if one of the objects in
-pname:pObjects can be related directly to a defined sname:VkQueue which has
-had one or more labels associated with it.
-
-Likewise, pname:pCmdBufLabels will only be non-`NULL` if one of the objects
-in pname:pObjects can be related directly to a defined sname:VkCommandBuffer
-which has had one or more labels associated with it.
-Additionally, while command buffer labels allow for beginning and ending
-across different command buffers, the debug messaging framework cannot:
-guarantee that labels in pname:pCmdBufLables will contain those defined
-outside of the associated command buffer.
-This is partially due to the fact that the association of one command buffer
-with another may not have been defined at the time the debug message is
-triggered.
-====
-
-include::{generated}/validity/structs/VkDebugUtilsMessengerCallbackDataEXT.txt[]
---
-
-[open,refpage='VkDebugUtilsMessengerCallbackDataFlagsEXT',desc='Reserved for future use',type='flags']
---
-include::{generated}/api/flags/VkDebugUtilsMessengerCallbackDataFlagsEXT.txt[]
-
-tname:VkDebugUtilsMessengerCallbackDataFlagsEXT is a bitmask type for
-setting a mask, but is currently reserved for future use.
---
-
-[open,refpage='vkSubmitDebugUtilsMessageEXT',desc='Inject a message into a debug stream',type='protos']
---
-There may be times that a user wishes to intentionally submit a debug
-message.
-To do this, call:
-
-include::{generated}/api/protos/vkSubmitDebugUtilsMessageEXT.txt[]
-
-  * pname:instance is the debug stream's slink:VkInstance.
-  * pname:messageSeverity is a elink:VkDebugUtilsMessageSeverityFlagBitsEXT
-    value specifying the severity of this event/message.
-  * pname:messageTypes is a bitmask of
-    elink:VkDebugUtilsMessageTypeFlagBitsEXT specifying which type of
-    event(s) to identify with this message.
-  * pname:pCallbackData contains all the callback related data in the
-    slink:VkDebugUtilsMessengerCallbackDataEXT structure.
-
-The call will propagate through the layers and generate callback(s) as
-indicated by the message's flags.
-The parameters are passed on to the callback in addition to the
-pname:pUserData value that was defined at the time the messenger was
-registered.
-
-.Valid Usage
-****
-  * [[VUID-vkSubmitDebugUtilsMessageEXT-objectType-02591]]
-    The pname:objectType member of each element of
-    pname:pCallbackData->pObjects must: not be ename:VK_OBJECT_TYPE_UNKNOWN
-****
-
-include::{generated}/validity/protos/vkSubmitDebugUtilsMessageEXT.txt[]
---
-
-[open,refpage='vkDestroyDebugUtilsMessengerEXT',desc='Destroy a debug messenger object',type='protos']
---
-To destroy a sname:VkDebugUtilsMessengerEXT object, call:
-
-include::{generated}/api/protos/vkDestroyDebugUtilsMessengerEXT.txt[]
-
-  * pname:instance is the instance where the callback was created.
-  * pname:messenger is the slink:VkDebugUtilsMessengerEXT object to destroy.
-    pname:messenger is an externally synchronized object and must: not be
-    used on more than one thread at a time.
-    This means that fname:vkDestroyDebugUtilsMessengerEXT must: not be
-    called when a callback is active.
-  * pname:pAllocator controls host memory allocation as described in the
-    <<memory-allocation, Memory Allocation>> chapter.
-
-.Valid Usage
-****
-  * [[VUID-vkDestroyDebugUtilsMessengerEXT-messenger-01915]]
-    If sname:VkAllocationCallbacks were provided when pname:messenger was
-    created, a compatible set of callbacks must: be provided here
-  * [[VUID-vkDestroyDebugUtilsMessengerEXT-messenger-01916]]
-    If no sname:VkAllocationCallbacks were provided when pname:messenger was
-    created, pname:pAllocator must: be `NULL`
-****
-
-include::{generated}/validity/protos/vkDestroyDebugUtilsMessengerEXT.txt[]
-
-The application must: ensure that flink:vkDestroyDebugUtilsMessengerEXT is
-not executed in parallel with any Vulkan command that is also called with
-pname:instance or child of pname:instance as the dispatchable argument.
---
-
diff --git a/registry/vulkan/chapters/VK_EXT_direct_mode_display/acquire_release_displays.txt b/registry/vulkan/chapters/VK_EXT_direct_mode_display/acquire_release_displays.txt
deleted file mode 100644
index 932254c..0000000
--- a/registry/vulkan/chapters/VK_EXT_direct_mode_display/acquire_release_displays.txt
+++ /dev/null
@@ -1,35 +0,0 @@
-// Copyright 2018-2021 The Khronos Group, Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-==== Acquiring and Releasing Displays
-
-On some platforms, access to displays is limited to a single process or
-native driver instance.
-On such platforms, some or all of the displays may not be available to
-Vulkan if they are already in use by a native windowing system or other
-application.
-
-ifdef::VK_EXT_acquire_xlib_display[]
-include::{chapters}/VK_EXT_acquire_xlib_display/acquire_xlib_display.txt[]
-endif::VK_EXT_acquire_xlib_display[]
-
-ifdef::VK_NV_acquire_winrt_display[]
-include::{chapters}/VK_NV_acquire_winrt_display/acquire_winrt_display.txt[]
-endif::VK_NV_acquire_winrt_display[]
-
-ifdef::VK_EXT_acquire_drm_display[]
-include::{chapters}/VK_EXT_acquire_drm_display/acquire_drm_display.txt[]
-endif::VK_EXT_acquire_drm_display[]
-
-[open,refpage='vkReleaseDisplayEXT',desc='Release access to an acquired VkDisplayKHR',type='protos']
---
-To release a previously acquired display, call:
-
-include::{generated}/api/protos/vkReleaseDisplayEXT.txt[]
-
-  * pname:physicalDevice The physical device the display is on.
-  * pname:display The display to release control of.
-
-include::{generated}/validity/protos/vkReleaseDisplayEXT.txt[]
---
diff --git a/registry/vulkan/chapters/VK_EXT_directfb_surface/platformCreateSurface_directfb.txt b/registry/vulkan/chapters/VK_EXT_directfb_surface/platformCreateSurface_directfb.txt
deleted file mode 100644
index 5b2188a..0000000
--- a/registry/vulkan/chapters/VK_EXT_directfb_surface/platformCreateSurface_directfb.txt
+++ /dev/null
@@ -1,61 +0,0 @@
-// Copyright 2014-2021 The Khronos Group, Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-[[platformCreateSurface_directfb,platformCreateSurface_directfb]]
-
-=== DirectFB Platform
-
-[open,refpage='vkCreateDirectFBSurfaceEXT',desc='Create a slink:VkSurfaceKHR object for a DirectFB surface',type='protos']
---
-To create a sname:VkSurfaceKHR object for a DirectFB surface, call:
-
-include::{generated}/api/protos/vkCreateDirectFBSurfaceEXT.txt[]
-
-  * pname:instance is the instance to associate the surface with.
-  * pname:pCreateInfo is a pointer to a sname:VkDirectFBSurfaceCreateInfoEXT
-    structure containing parameters affecting the creation of the surface
-    object.
-  * pname:pAllocator is the allocator used for host memory allocated for the
-    surface object when there is no more specific allocator available (see
-    <<memory-allocation,Memory Allocation>>).
-  * pname:pSurface is a pointer to a slink:VkSurfaceKHR handle in which the
-    created surface object is returned.
-
-include::{generated}/validity/protos/vkCreateDirectFBSurfaceEXT.txt[]
---
-
-[open,refpage='VkDirectFBSurfaceCreateInfoEXT',desc='Structure specifying parameters of a newly created DirectFB surface object',type='structs']
---
-The sname:VkDirectFBSurfaceCreateInfoEXT structure is defined as:
-
-include::{generated}/api/structs/VkDirectFBSurfaceCreateInfoEXT.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:flags is reserved for future use.
-  * pname:dfb is a pointer to the code:IDirectFB main interface of DirectFB.
-  * pname:surface is a pointer to a code:IDirectFBSurface surface interface.
-
-.Valid Usage
-****
-  * [[VUID-VkDirectFBSurfaceCreateInfoEXT-dfb-04117]]
-    pname:dfb must: point to a valid DirectFB code:IDirectFB
-  * [[VUID-VkDirectFBSurfaceCreateInfoEXT-surface-04118]]
-    pname:surface must: point to a valid DirectFB code:IDirectFBSurface
-****
-
-include::{generated}/validity/structs/VkDirectFBSurfaceCreateInfoEXT.txt[]
---
-
-With DirectFB, pname:minImageExtent, pname:maxImageExtent, and
-pname:currentExtent must: always equal the surface size.
-
-[open,refpage='VkDirectFBSurfaceCreateFlagsEXT',desc='Reserved for future use',type='flags']
---
-include::{generated}/api/flags/VkDirectFBSurfaceCreateFlagsEXT.txt[]
-
-tname:VkDirectFBSurfaceCreateFlagsEXT is a bitmask type for setting a mask,
-but is currently reserved for future use.
---
diff --git a/registry/vulkan/chapters/VK_EXT_directfb_surface/platformQuerySupport_directfb.txt b/registry/vulkan/chapters/VK_EXT_directfb_surface/platformQuerySupport_directfb.txt
deleted file mode 100644
index 1e1ddb3..0000000
--- a/registry/vulkan/chapters/VK_EXT_directfb_surface/platformQuerySupport_directfb.txt
+++ /dev/null
@@ -1,32 +0,0 @@
-// Copyright 2014-2021 The Khronos Group, Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-[[platformQuerySupport_directfb,platformQuerySupport_directfb]]
-
-=== DirectFB Platform
-
-[open,refpage='vkGetPhysicalDeviceDirectFBPresentationSupportEXT',desc='Query physical device for presentation with DirectFB',type='protos']
---
-To determine whether a queue family of a physical device supports
-presentation with DirectFB library, call:
-
-include::{generated}/api/protos/vkGetPhysicalDeviceDirectFBPresentationSupportEXT.txt[]
-
-  * pname:physicalDevice is the physical device.
-  * pname:queueFamilyIndex is the queue family index.
-  * pname:dfb is a pointer to the code:IDirectFB main interface of DirectFB.
-
-This platform-specific function can: be called prior to creating a surface.
-
-.Valid Usage
-****
-  * [[VUID-vkGetPhysicalDeviceDirectFBPresentationSupportEXT-queueFamilyIndex-04119]]
-    pname:queueFamilyIndex must: be less than
-    pname:pQueueFamilyPropertyCount returned by
-    fname:vkGetPhysicalDeviceQueueFamilyProperties for the given
-    pname:physicalDevice
-****
-
-include::{generated}/validity/protos/vkGetPhysicalDeviceDirectFBPresentationSupportEXT.txt[]
---
diff --git a/registry/vulkan/chapters/VK_EXT_display_control/display_control.txt b/registry/vulkan/chapters/VK_EXT_display_control/display_control.txt
deleted file mode 100644
index 3fb7bf8..0000000
--- a/registry/vulkan/chapters/VK_EXT_display_control/display_control.txt
+++ /dev/null
@@ -1,53 +0,0 @@
-// Copyright 2018-2021 The Khronos Group, Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-=== Display Control
-
-[open,refpage='vkDisplayPowerControlEXT',desc='Set the power state of a display',type='protos']
---
-To set the power state of a display, call:
-
-include::{generated}/api/protos/vkDisplayPowerControlEXT.txt[]
-
-  * pname:device is a logical device associated with pname:display.
-  * pname:display is the display whose power state is modified.
-  * pname:pDisplayPowerInfo is a pointer to a slink:VkDisplayPowerInfoEXT
-    structure specifying the new power state of pname:display.
-
-include::{generated}/validity/protos/vkDisplayPowerControlEXT.txt[]
---
-
-[open,refpage='VkDisplayPowerInfoEXT',desc='Describe the power state of a display',type='structs']
---
-The sname:VkDisplayPowerInfoEXT structure is defined as:
-
-include::{generated}/api/structs/VkDisplayPowerInfoEXT.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:powerState is a elink:VkDisplayPowerStateEXT value specifying the
-    new power state of the display.
-
-include::{generated}/validity/structs/VkDisplayPowerInfoEXT.txt[]
---
-
-[open,refpage='VkDisplayPowerStateEXT',desc='Possible power states for a display',type='enums']
---
-
-Possible values of slink:VkDisplayPowerInfoEXT::pname:powerState, specifying
-the new power state of a display, are:
-
-include::{generated}/api/enums/VkDisplayPowerStateEXT.txt[]
-
-  * ename:VK_DISPLAY_POWER_STATE_OFF_EXT specifies that the display is
-    powered down.
-  * ename:VK_DISPLAY_POWER_STATE_SUSPEND_EXT specifies that the display is
-    put into a low power mode, from which it may: be able to transition back
-    to ename:VK_DISPLAY_POWER_STATE_ON_EXT more quickly than if it were in
-    ename:VK_DISPLAY_POWER_STATE_OFF_EXT.
-    This state may: be the same as ename:VK_DISPLAY_POWER_STATE_OFF_EXT.
-  * ename:VK_DISPLAY_POWER_STATE_ON_EXT specifies that the display is
-    powered on.
---
diff --git a/registry/vulkan/chapters/VK_EXT_display_control/fence_events.txt b/registry/vulkan/chapters/VK_EXT_display_control/fence_events.txt
deleted file mode 100644
index 1c82ad7..0000000
--- a/registry/vulkan/chapters/VK_EXT_display_control/fence_events.txt
+++ /dev/null
@@ -1,102 +0,0 @@
-// Copyright 2018-2021 The Khronos Group, Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-=== Alternate Methods to Signal Fences
-
-Besides submitting a fence to a queue as part of a
-<<devsandqueues-submission, queue submission>> command, a fence may: also be
-signaled when a particular event occurs on a device or display.
-
-[open,refpage='vkRegisterDeviceEventEXT',desc='Signal a fence when a device event occurs',type='protos']
---
-To create a fence that will be signaled when an event occurs on a device,
-call:
-
-include::{generated}/api/protos/vkRegisterDeviceEventEXT.txt[]
-
-  * pname:device is a logical device on which the event may: occur.
-  * pname:pDeviceEventInfo is a pointer to a slink:VkDeviceEventInfoEXT
-    structure describing the event of interest to the application.
-  * pname:pAllocator controls host memory allocation as described in the
-    <<memory-allocation, Memory Allocation>> chapter.
-  * pname:pFence is a pointer to a handle in which the resulting fence
-    object is returned.
-
-include::{generated}/validity/protos/vkRegisterDeviceEventEXT.txt[]
---
-
-[open,refpage='VkDeviceEventInfoEXT',desc='Describe a device event to create',type='structs']
---
-The sname:VkDeviceEventInfoEXT structure is defined as:
-
-include::{generated}/api/structs/VkDeviceEventInfoEXT.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:device is a elink:VkDeviceEventTypeEXT value specifying when the
-    fence will be signaled.
-
-include::{generated}/validity/structs/VkDeviceEventInfoEXT.txt[]
---
-
-[open,refpage='VkDeviceEventTypeEXT',desc='Events that can occur on a device object',type='enums']
---
-Possible values of slink:VkDeviceEventInfoEXT::pname:device, specifying when
-a fence will be signaled, are:
-
-include::{generated}/api/enums/VkDeviceEventTypeEXT.txt[]
-
-  * ename:VK_DEVICE_EVENT_TYPE_DISPLAY_HOTPLUG_EXT specifies that the fence
-    is signaled when a display is plugged into or unplugged from the
-    specified device.
-    Applications can: use this notification to determine when they need to
-    re-enumerate the available displays on a device.
---
-
-[open,refpage='vkRegisterDisplayEventEXT',desc='Signal a fence when a display event occurs',type='protos']
---
-To create a fence that will be signaled when an event occurs on a
-slink:VkDisplayKHR object, call:
-
-include::{generated}/api/protos/vkRegisterDisplayEventEXT.txt[]
-
-  * pname:device is a logical device associated with pname:display
-  * pname:display is the display on which the event may: occur.
-  * pname:pDisplayEventInfo is a pointer to a slink:VkDisplayEventInfoEXT
-    structure describing the event of interest to the application.
-  * pname:pAllocator controls host memory allocation as described in the
-    <<memory-allocation, Memory Allocation>> chapter.
-  * pname:pFence is a pointer to a handle in which the resulting fence
-    object is returned.
-
-include::{generated}/validity/protos/vkRegisterDisplayEventEXT.txt[]
---
-
-[open,refpage='VkDisplayEventInfoEXT',desc='Describe a display event to create',type='structs']
---
-The sname:VkDisplayEventInfoEXT structure is defined as:
-
-include::{generated}/api/structs/VkDisplayEventInfoEXT.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:displayEvent is a elink:VkDisplayEventTypeEXT specifying when the
-    fence will be signaled.
-
-include::{generated}/validity/structs/VkDisplayEventInfoEXT.txt[]
---
-
-[open,refpage='VkDisplayEventTypeEXT',desc='Events that can occur on a display object',type='enums']
---
-Possible values of slink:VkDisplayEventInfoEXT::pname:displayEvent,
-specifying when a fence will be signaled, are:
-
-include::{generated}/api/enums/VkDisplayEventTypeEXT.txt[]
-
-  * ename:VK_DISPLAY_EVENT_TYPE_FIRST_PIXEL_OUT_EXT specifies that the fence
-    is signaled when the first pixel of the next display refresh cycle
-    leaves the display engine for the display.
---
diff --git a/registry/vulkan/chapters/VK_EXT_display_control/swapchain_counters.txt b/registry/vulkan/chapters/VK_EXT_display_control/swapchain_counters.txt
deleted file mode 100644
index 0c37461..0000000
--- a/registry/vulkan/chapters/VK_EXT_display_control/swapchain_counters.txt
+++ /dev/null
@@ -1,56 +0,0 @@
-// Copyright 2018-2021 The Khronos Group, Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-[open,refpage='VkSwapchainCounterCreateInfoEXT',desc='Specify the surface counters desired',type='structs']
---
-To enable surface counters when creating a swapchain, add a
-sname:VkSwapchainCounterCreateInfoEXT structure to the pname:pNext chain of
-slink:VkSwapchainCreateInfoKHR.
-sname:VkSwapchainCounterCreateInfoEXT is defined as:
-
-include::{generated}/api/structs/VkSwapchainCounterCreateInfoEXT.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:surfaceCounters is a bitmask of elink:VkSurfaceCounterFlagBitsEXT
-    specifying surface counters to enable for the swapchain.
-
-.Valid Usage
-****
-  * [[VUID-VkSwapchainCounterCreateInfoEXT-surfaceCounters-01244]]
-    The bits in pname:surfaceCounters must: be supported by
-    slink:VkSwapchainCreateInfoKHR::pname:surface, as reported by
-    flink:vkGetPhysicalDeviceSurfaceCapabilities2EXT
-****
-
-include::{generated}/validity/structs/VkSwapchainCounterCreateInfoEXT.txt[]
---
-
-[open,refpage='vkGetSwapchainCounterEXT',desc='Query the current value of a surface counter',type='protos']
---
-The requested counters become active when the first presentation command for
-the associated swapchain is processed by the presentation engine.
-To query the value of an active counter, use:
-
-include::{generated}/api/protos/vkGetSwapchainCounterEXT.txt[]
-
-  * pname:device is the slink:VkDevice associated with pname:swapchain.
-  * pname:swapchain is the swapchain from which to query the counter value.
-  * pname:counter is a elink:VkSurfaceCounterFlagBitsEXT value specifying
-    the counter to query.
-  * pname:pCounterValue will return the current value of the counter.
-
-If a counter is not available because the swapchain is out of date, the
-implementation may: return ename:VK_ERROR_OUT_OF_DATE_KHR.
-
-.Valid Usage
-****
-  * [[VUID-vkGetSwapchainCounterEXT-swapchain-01245]]
-    One or more present commands on pname:swapchain must: have been
-    processed by the presentation engine
-****
-
-include::{generated}/validity/protos/vkGetSwapchainCounterEXT.txt[]
---
diff --git a/registry/vulkan/chapters/VK_EXT_display_surface_counter/surface_capabilities.txt b/registry/vulkan/chapters/VK_EXT_display_surface_counter/surface_capabilities.txt
deleted file mode 100644
index da45577..0000000
--- a/registry/vulkan/chapters/VK_EXT_display_surface_counter/surface_capabilities.txt
+++ /dev/null
@@ -1,78 +0,0 @@
-// Copyright 2018-2021 The Khronos Group, Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-[open,refpage='vkGetPhysicalDeviceSurfaceCapabilities2EXT',desc='Query surface capabilities',type='protos']
---
-To query the basic capabilities of a surface, needed in order to create a
-swapchain, call:
-
-include::{generated}/api/protos/vkGetPhysicalDeviceSurfaceCapabilities2EXT.txt[]
-
-  * pname:physicalDevice is the physical device that will be associated with
-    the swapchain to be created, as described for
-    flink:vkCreateSwapchainKHR.
-  * pname:surface is the surface that will be associated with the swapchain.
-  * pname:pSurfaceCapabilities is a pointer to a
-    slink:VkSurfaceCapabilities2EXT structure in which the capabilities are
-    returned.
-
-fname:vkGetPhysicalDeviceSurfaceCapabilities2EXT behaves similarly to
-flink:vkGetPhysicalDeviceSurfaceCapabilitiesKHR, with the ability to return
-extended information by adding extending structures to the pname:pNext chain
-of its pname:pSurfaceCapabilities parameter.
-
-.Valid Usage
-****
-include::{chapters}/commonvalidity/surface_physical_device_common.txt[]
-****
-
-include::{generated}/validity/protos/vkGetPhysicalDeviceSurfaceCapabilities2EXT.txt[]
---
-
-[open,refpage='VkSurfaceCapabilities2EXT',desc='Structure describing capabilities of a surface',type='structs']
---
-The sname:VkSurfaceCapabilities2EXT structure is defined as:
-
-include::{generated}/api/structs/VkSurfaceCapabilities2EXT.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-include::{chapters}/VK_KHR_surface/wsi.txt[tag=surface_capabilities_members]
-  * pname:supportedSurfaceCounters is a bitmask of
-    elink:VkSurfaceCounterFlagBitsEXT indicating the supported surface
-    counter types.
-
-.Valid Usage
-****
-  * [[VUID-VkSurfaceCapabilities2EXT-supportedSurfaceCounters-01246]]
-    pname:supportedSurfaceCounters must: not include
-    ename:VK_SURFACE_COUNTER_VBLANK_BIT_EXT unless the surface queried is a
-    <<wsi-display-surfaces,display surface>>
-****
-
-include::{generated}/validity/structs/VkSurfaceCapabilities2EXT.txt[]
---
-
-[open,refpage='VkSurfaceCounterFlagBitsEXT',desc='Surface-relative counter types',type='enums']
---
-Bits which can: be set in
-slink:VkSurfaceCapabilities2EXT::pname:supportedSurfaceCounters, indicating
-supported surface counter types, are:
-
-include::{generated}/api/enums/VkSurfaceCounterFlagBitsEXT.txt[]
-
-  * ename:VK_SURFACE_COUNTER_VBLANK_BIT_EXT specifies a counter incrementing
-    once every time a vertical blanking period occurs on the display
-    associated with the surface.
---
-
-[open,refpage='VkSurfaceCounterFlagsEXT',desc='Bitmask of VkSurfaceCounterFlagBitsEXT',type='flags']
---
-include::{generated}/api/flags/VkSurfaceCounterFlagsEXT.txt[]
-
-tname:VkSurfaceCounterFlagsEXT is a bitmask type for setting a mask of zero
-or more elink:VkSurfaceCounterFlagBitsEXT.
---
-
diff --git a/registry/vulkan/chapters/VK_EXT_hdr_metadata.txt b/registry/vulkan/chapters/VK_EXT_hdr_metadata.txt
deleted file mode 100644
index d90103f..0000000
--- a/registry/vulkan/chapters/VK_EXT_hdr_metadata.txt
+++ /dev/null
@@ -1,79 +0,0 @@
-// Copyright 2018-2021 The Khronos Group, Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-// This section is included inside VK_KHR_swapchain
-
-== Hdr Metadata
-
-To improve color reproduction of content it is useful to have information
-that can be used to better reproduce the colors as seen on the reference
-monitor.
-That information can be provided to an implementation by calling
-fname:vkSetHdrMetadataEXT.
-The metadata will be applied to the specified sname:VkSwapchainKHR objects
-at the next fname:vkQueuePresentKHR call using that sname:VkSwapchainKHR
-object.
-The metadata will persist until a subsequent fname:vkSetHdrMetadataEXT
-changes it.
-The definitions below are from the associated SMPTE 2086, CTA 861.3 and CIE
-15:2004 specifications.
-
-The definition of fname:vkSetHdrMetadataEXT is:
-
-[open,refpage='vkSetHdrMetadataEXT',desc='Set Hdr metadata',type='protos']
---
-include::{generated}/api/protos/vkSetHdrMetadataEXT.txt[]
-
-  * pname:device is the logical device where the swapchain(s) were created.
-  * pname:swapchainCount is the number of swapchains included in
-    pname:pSwapchains.
-  * pname:pSwapchains is a pointer to an array of pname:swapchainCount
-    slink:VkSwapchainKHR handles.
-  * pname:pMetadata is a pointer to an array of pname:swapchainCount
-    slink:VkHdrMetadataEXT structures.
-
-include::{generated}/validity/protos/vkSetHdrMetadataEXT.txt[]
---
-
-[open,refpage='VkXYColorEXT',desc='Specify X,Y chromaticity coordinates',type='structs']
---
-include::{generated}/api/structs/VkXYColorEXT.txt[]
-Chromaticity coordinates x and y are as specified in CIE 15:2004
-"`Calculation of chromaticity coordinates`" (Section 7.3) and are limited to
-between 0 and 1 for real colors for the reference monitor.
-
---
-
-[open,refpage='VkHdrMetadataEXT',desc='Specify Hdr metadata',type='structs']
---
-include::{generated}/api/structs/VkHdrMetadataEXT.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:displayPrimaryRed is the reference monitor's red primary in
-    chromaticity coordinates
-  * pname:displayPrimaryGreen is the reference monitor's green primary in
-    chromaticity coordinates
-  * pname:displayPrimaryBlue is the reference monitor's blue primary in
-    chromaticity coordinates
-  * pname:whitePoint is the reference monitor's white-point in chromaticity
-    coordinates
-  * pname:maxLuminance is the maximum luminance of the reference monitor in
-    nits
-  * pname:minLuminance is the minimum luminance of the reference monitor in
-    nits
-  * pname:maxContentLightLevel is content's maximum luminance in nits
-  * pname:maxFrameAverageLightLevel is the maximum frame average light level
-    in nits
-
-include::{generated}/validity/structs/VkHdrMetadataEXT.txt[]
-
-[NOTE]
-.Note
-====
-The validity and use of this data is outside the scope of Vulkan.
-====
-
---
diff --git a/registry/vulkan/chapters/VK_EXT_headless_surface/headless.txt b/registry/vulkan/chapters/VK_EXT_headless_surface/headless.txt
deleted file mode 100644
index 0f8aa60..0000000
--- a/registry/vulkan/chapters/VK_EXT_headless_surface/headless.txt
+++ /dev/null
@@ -1,71 +0,0 @@
-// Copyright 2017-2021 The Khronos Group, Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-[[headless,headless]]
-
-=== Presenting to headless surfaces
-
-Vulkan rendering can be presented to a headless surface, where the
-presentation operation is a no-op producing no externally-visible result.
-
-[NOTE]
-.Note
-====
-Because there is no real presentation target, the headless presentation
-engine may be extended to impose an arbitrary or customisable set of
-restrictions and features.
-This makes it a useful portable test target for applications targeting a
-wide range of presentation engines where the actual target presentation
-engines might be scarce, unavailable or otherwise undesirable or
-inconvenient to use for general Vulkan application development.
-
-The usual surface query mechanisms must be used to determine the actual
-restrictions and features of the implementation.
-====
-
-[open,refpage='vkCreateHeadlessSurfaceEXT',desc='Create a headless slink:VkSurfaceKHR object',type='protos']
---
-To create a headless sname:VkSurfaceKHR object, call:
-
-include::{generated}/api/protos/vkCreateHeadlessSurfaceEXT.txt[]
-
-  * pname:instance is the instance to associate the surface with.
-  * pname:pCreateInfo is a pointer to a slink:VkHeadlessSurfaceCreateInfoEXT
-    structure containing parameters affecting the creation of the surface
-    object.
-  * pname:pAllocator is the allocator used for host memory allocated for the
-    surface object when there is no more specific allocator available (see
-    <<memory-allocation,Memory Allocation>>).
-  * pname:pSurface is a pointer to a sname:VkSurfaceKHR handle in which the
-    created surface object is returned.
-
-include::{generated}/validity/protos/vkCreateHeadlessSurfaceEXT.txt[]
---
-
-[open,refpage='VkHeadlessSurfaceCreateInfoEXT',desc='Structure specifying parameters of a newly created headless surface object',type='structs']
---
-The sname:VkHeadlessSurfaceCreateInfoEXT structure is defined as:
-
-include::{generated}/api/structs/VkHeadlessSurfaceCreateInfoEXT.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:flags is reserved for future use.
-
-include::{generated}/validity/structs/VkHeadlessSurfaceCreateInfoEXT.txt[]
---
-
-For headless surfaces, pname:currentExtent is the reserved value
-[eq]#(0xFFFFFFFF, 0xFFFFFFFF)#.
-Whatever the application sets a swapchain's pname:imageExtent to will be the
-size of the surface, after the first image is presented.
-
-[open,refpage='VkHeadlessSurfaceCreateFlagsEXT',desc='Reserved for future use',type='flags']
---
-include::{generated}/api/flags/VkHeadlessSurfaceCreateFlagsEXT.txt[]
-
-tname:VkHeadlessSurfaceCreateFlagsEXT is a bitmask type for setting a mask,
-but is currently reserved for future use.
---
diff --git a/registry/vulkan/chapters/VK_EXT_metal_surface/platformCreateSurface_metal.txt b/registry/vulkan/chapters/VK_EXT_metal_surface/platformCreateSurface_metal.txt
deleted file mode 100644
index d7309a6..0000000
--- a/registry/vulkan/chapters/VK_EXT_metal_surface/platformCreateSurface_metal.txt
+++ /dev/null
@@ -1,61 +0,0 @@
-// Copyright 2018-2021 The Khronos Group, Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-[[platformCreateSurface_metal,platformCreateSurface_metal]]
-
-=== Metal Platform
-
-[open,refpage='vkCreateMetalSurfaceEXT',desc='Create a VkSurfaceKHR object for CAMetalLayer',type='protos']
---
-To create a sname:VkSurfaceKHR object for a basetype:CAMetalLayer, call:
-
-include::{generated}/api/protos/vkCreateMetalSurfaceEXT.txt[]
-
-  * pname:instance is the instance with which to associate the surface.
-  * pname:pCreateInfo is a pointer to a slink:VkMetalSurfaceCreateInfoEXT
-    structure specifying parameters affecting the creation of the surface
-    object.
-  * pname:pAllocator is the allocator used for host memory allocated for the
-    surface object when there is no more specific allocator available (see
-    <<memory-allocation,Memory Allocation>>).
-  * pname:pSurface is a pointer to a sname:VkSurfaceKHR handle in which the
-    created surface object is returned.
-
-include::{generated}/validity/protos/vkCreateMetalSurfaceEXT.txt[]
---
-
-[open,refpage='VkMetalSurfaceCreateInfoEXT',desc='Structure specifying parameters of a newly created Metal surface object',type='structs']
---
-The slink:VkMetalSurfaceCreateInfoEXT structure is defined as:
-
-include::{generated}/api/structs/VkMetalSurfaceCreateInfoEXT.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:flags is reserved for future use.
-  * pname:pLayer is a reference to a basetype:CAMetalLayer object
-    representing a renderable surface.
-
-include::{generated}/validity/structs/VkMetalSurfaceCreateInfoEXT.txt[]
---
-
-[open,refpage='CAMetalLayer',desc='CoreAnimation native layer type for Metal',type='basetypes']
---
-To remove an unnecessary compile-time dependency, an incomplete type
-definition of basetype:CAMetalLayer is provided in the Vulkan headers:
-
-include::{generated}/api/basetypes/CAMetalLayer.txt[]
-
-The actual basetype:CAMetalLayer type is defined in the QuartzCore
-framework.
---
-
-[open,refpage='VkMetalSurfaceCreateFlagsEXT',desc='Reserved for future use',type='flags']
---
-include::{generated}/api/flags/VkMetalSurfaceCreateFlagsEXT.txt[]
-
-tname:VkMetalSurfaceCreateFlagsEXT is a bitmask type for setting a mask, but
-is currently reserved for future use.
---
diff --git a/registry/vulkan/chapters/VK_EXT_metal_surface/platformQuerySupport_metal.txt b/registry/vulkan/chapters/VK_EXT_metal_surface/platformQuerySupport_metal.txt
deleted file mode 100644
index a7a2271..0000000
--- a/registry/vulkan/chapters/VK_EXT_metal_surface/platformQuerySupport_metal.txt
+++ /dev/null
@@ -1,11 +0,0 @@
-// Copyright 2018-2021 The Khronos Group, Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-[[platformQuerySupport_metal,platformQuerySupport_metal]]
-
-=== Metal Platform
-
-On Apple platforms with Metal support, all physical devices and queue
-families must: be capable of presentation with any layer.
-As a result there is no Apple-specific query for these capabilities.
diff --git a/registry/vulkan/chapters/VK_EXT_pipeline_creation_feedback/pipelines.txt b/registry/vulkan/chapters/VK_EXT_pipeline_creation_feedback/pipelines.txt
deleted file mode 100644
index 1aca88d..0000000
--- a/registry/vulkan/chapters/VK_EXT_pipeline_creation_feedback/pipelines.txt
+++ /dev/null
@@ -1,174 +0,0 @@
-// Copyright 2014-2021 The Khronos Group, Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-// This section is included inside the Pipelines chapter (pipelines.txt)
-
-[[pipelines-creation-feedback]]
-== Pipeline Creation Feedback
-
-[open,refpage='VkPipelineCreationFeedbackCreateInfoEXT',desc='Request for feedback about the creation of a pipeline',type='structs',xrefs='VkGraphicsPipelineCreateInfo VkComputePipelineCreateInfo VkRayTracingPipelineCreateInfoNV VkRayTracingPipelineCreateInfoKHR VkPipelineCreationFeedbackEXT']
---
-Feedback about the creation of a particular pipeline object can: be obtained
-by adding a sname:VkPipelineCreationFeedbackCreateInfoEXT structure to the
-pname:pNext chain of slink:VkGraphicsPipelineCreateInfo,
-ifdef::VK_KHR_ray_tracing_pipeline[slink:VkRayTracingPipelineCreateInfoKHR,]
-ifdef::VK_NV_ray_tracing[slink:VkRayTracingPipelineCreateInfoNV,]
-or slink:VkComputePipelineCreateInfo.
-The sname:VkPipelineCreationFeedbackCreateInfoEXT structure is defined as:
-
-include::{generated}/api/structs/VkPipelineCreationFeedbackCreateInfoEXT.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:pPipelineCreationFeedback is a pointer to a
-    slink:VkPipelineCreationFeedbackEXT structure.
-  * pname:pipelineStageCreationFeedbackCount is the number of elements in
-    pname:pPipelineStageCreationFeedbacks.
-  * pname:pPipelineStageCreationFeedbacks is a pointer to an array of
-    pname:pipelineStageCreationFeedbackCount
-    slink:VkPipelineCreationFeedbackEXT structures.
-
-An implementation should: write pipeline creation feedback to
-pname:pPipelineCreationFeedback and may: write pipeline stage creation
-feedback to pname:pPipelineStageCreationFeedbacks.
-An implementation must: set or clear the
-ename:VK_PIPELINE_CREATION_FEEDBACK_VALID_BIT_EXT in
-slink:VkPipelineCreationFeedbackEXT::pname:flags for
-pname:pPipelineCreationFeedback and every element of
-pname:pPipelineStageCreationFeedbacks.
-
-[NOTE]
-.Note
-====
-One common scenario for an implementation to skip per-stage feedback is when
-ename:VK_PIPELINE_CREATION_FEEDBACK_APPLICATION_PIPELINE_CACHE_HIT_BIT_EXT
-is set in pname:pPipelineCreationFeedback.
-====
-
-When chained to
-ifdef::VK_KHR_ray_tracing_pipeline[slink:VkRayTracingPipelineCreateInfoKHR,]
-ifdef::VK_NV_ray_tracing[slink:VkRayTracingPipelineCreateInfoNV,]
-ifdef::VK_NV_ray_tracing,VK_KHR_ray_tracing_pipeline[or]
-slink:VkGraphicsPipelineCreateInfo, the `i` element of
-pname:pPipelineStageCreationFeedbacks corresponds to the `i` element of
-ifdef::VK_KHR_ray_tracing_pipeline[slink:VkRayTracingPipelineCreateInfoKHR::pname:pStages,]
-ifdef::VK_NV_ray_tracing[slink:VkRayTracingPipelineCreateInfoNV::pname:pStages,]
-ifdef::VK_NV_ray_tracing,VK_KHR_ray_tracing_pipeline[or]
-slink:VkGraphicsPipelineCreateInfo::pname:pStages.
-When chained to slink:VkComputePipelineCreateInfo, the first element of
-pname:pPipelineStageCreationFeedbacks corresponds to
-slink:VkComputePipelineCreateInfo::pname:stage.
-
-.Valid Usage
-****
-  * [[VUID-VkPipelineCreationFeedbackCreateInfoEXT-pipelineStageCreationFeedbackCount-02668]]
-    When chained to slink:VkGraphicsPipelineCreateInfo,
-    slink:VkPipelineCreationFeedbackEXT::pname:pipelineStageCreationFeedbackCount
-    must: equal slink:VkGraphicsPipelineCreateInfo::pname:stageCount
-  * [[VUID-VkPipelineCreationFeedbackCreateInfoEXT-pipelineStageCreationFeedbackCount-02669]]
-    When chained to slink:VkComputePipelineCreateInfo,
-    slink:VkPipelineCreationFeedbackEXT::pname:pipelineStageCreationFeedbackCount
-    must: equal 1
-ifdef::VK_KHR_ray_tracing_pipeline[]
-  * [[VUID-VkPipelineCreationFeedbackCreateInfoEXT-pipelineStageCreationFeedbackCount-02670]]
-    When chained to slink:VkRayTracingPipelineCreateInfoKHR,
-    slink:VkPipelineCreationFeedbackEXT::pname:pipelineStageCreationFeedbackCount
-    must: equal slink:VkRayTracingPipelineCreateInfoKHR::pname:stageCount
-endif::VK_KHR_ray_tracing_pipeline[]
-ifdef::VK_NV_ray_tracing[]
-  * [[VUID-VkPipelineCreationFeedbackCreateInfoEXT-pipelineStageCreationFeedbackCount-02969]]
-    When chained to slink:VkRayTracingPipelineCreateInfoNV,
-    slink:VkPipelineCreationFeedbackEXT::pname:pipelineStageCreationFeedbackCount
-    must: equal slink:VkRayTracingPipelineCreateInfoNV::pname:stageCount
-endif::VK_NV_ray_tracing[]
-****
-
-include::{generated}/validity/structs/VkPipelineCreationFeedbackCreateInfoEXT.txt[]
---
-
-[open,refpage='VkPipelineCreationFeedbackEXT',desc='Feedback about the creation of a pipeline or pipeline stage',type='structs',xrefs='VkPipelineCreationFeedbackCreateInfoEXT VkPipelineCreationFeedbackFlagBitsEXT']
---
-The sname:VkPipelineCreationFeedbackEXT structure is defined as:
-
-include::{generated}/api/structs/VkPipelineCreationFeedbackEXT.txt[]
-
-  * pname:flags is a bitmask of elink:VkPipelineCreationFeedbackFlagBitsEXT
-    providing feedback about the creation of a pipeline or of a pipeline
-    stage.
-  * pname:duration is the duration spent creating a pipeline or pipeline
-    stage in nanoseconds.
-
-If the ename:VK_PIPELINE_CREATION_FEEDBACK_VALID_BIT_EXT is not set in
-pname:flags, an implementation must: not set any other bits in pname:flags,
-and the values of all other sname:VkPipelineCreationFeedbackEXT data members
-are undefined:.
-
-include::{generated}/validity/structs/VkPipelineCreationFeedbackEXT.txt[]
---
-
-[open,refpage='VkPipelineCreationFeedbackFlagBitsEXT',desc='Bitmask specifying pipeline or pipeline stage creation feedback',type='enums',xrefs='VkPipelineCreationFeedbackCreateInfoEXT VkPipelineCreationFeedbackEXT']
---
-Possible values of the pname:flags member of
-slink:VkPipelineCreationFeedbackEXT are:
-
-include::{generated}/api/enums/VkPipelineCreationFeedbackFlagBitsEXT.txt[]
-
-  * ename:VK_PIPELINE_CREATION_FEEDBACK_VALID_BIT_EXT indicates that the
-    feedback information is valid.
-  * ename:VK_PIPELINE_CREATION_FEEDBACK_APPLICATION_PIPELINE_CACHE_HIT_BIT_EXT
-    indicates that a readily usable pipeline or pipeline stage was found in
-    the pname:pipelineCache specified by the application in the pipeline
-    creation command.
-+
-An implementation should: set the
-ename:VK_PIPELINE_CREATION_FEEDBACK_APPLICATION_PIPELINE_CACHE_HIT_BIT_EXT
-bit if it was able to avoid the large majority of pipeline or pipeline stage
-creation work by using the pname:pipelineCache parameter of
-flink:vkCreateGraphicsPipelines,
-ifdef::VK_KHR_ray_tracing_pipeline[flink:vkCreateRayTracingPipelinesKHR,]
-ifdef::VK_NV_ray_tracing[flink:vkCreateRayTracingPipelinesNV,]
-or flink:vkCreateComputePipelines.
-When an implementation sets this bit for the entire pipeline, it may: leave
-it unset for any stage.
-+
-[NOTE]
-.Note
-====
-Implementations are encouraged to provide a meaningful signal to
-applications using this bit.
-The intention is to communicate to the application that the pipeline or
-pipeline stage was created "as fast as it gets" using the pipeline cache
-provided by the application.
-If an implementation uses an internal cache, it is discouraged from setting
-this bit as the feedback would be unactionable.
-====
-
-  * ename:VK_PIPELINE_CREATION_FEEDBACK_BASE_PIPELINE_ACCELERATION_BIT_EXT
-    indicates that the base pipeline specified by the
-    pname:basePipelineHandle or pname:basePipelineIndex member of the
-    stext:Vk*PipelineCreateInfo structure was used to accelerate the
-    creation of the pipeline.
-+
-An implementation should: set the
-ename:VK_PIPELINE_CREATION_FEEDBACK_BASE_PIPELINE_ACCELERATION_BIT_EXT bit
-if it was able to avoid a significant amount of work by using the base
-pipeline.
-+
-[NOTE]
-.Note
-====
-While "significant amount of work" is subjective, implementations are
-encouraged to provide a meaningful signal to applications using this bit.
-For example, a 1% reduction in duration may not warrant setting this bit,
-while a 50% reduction would.
-====
---
-
-[open,refpage='VkPipelineCreationFeedbackFlagsEXT',desc='Bitmask of VkPipelineCreationFeedbackFlagBitsEXT',type='flags',xrefs='VkPipelineCreationFeedbackEXT VkPipelineCreationFeedbackFlagBitsEXT']
---
-include::{generated}/api/flags/VkPipelineCreationFeedbackFlagsEXT.txt[]
-
-tname:VkPipelineCreationFeedbackFlagsEXT is a bitmask type for providing
-zero or more elink:VkPipelineCreationFeedbackFlagBitsEXT.
---
diff --git a/registry/vulkan/chapters/VK_EXT_private_data.txt b/registry/vulkan/chapters/VK_EXT_private_data.txt
deleted file mode 100644
index 9b012dc..0000000
--- a/registry/vulkan/chapters/VK_EXT_private_data.txt
+++ /dev/null
@@ -1,171 +0,0 @@
-// Copyright 2020-2021 The Khronos Group, Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-[[private-data]]
-= Private Data
-
-The private data extension provides a way for users to associate arbitrary
-user defined data with Vulkan objects.
-This association is accomplished by storing 64-bit unsigned integers of user
-defined data in private data slots.
-
-An application can: reserve private data slots at device creation.
-To reserve private data slots, insert a
-slink:VkDevicePrivateDataCreateInfoEXT in the pname:pNext chain in
-slink:VkDeviceCreateInfo before device creation.
-Multiple slink:VkDevicePrivateDataCreateInfoEXT structures can: be chained
-together, and the sum of the requested slots will be reserved.
-This is an exception to the specified valid usage for
-<<fundamentals-validusage-pNext,structure pointer chains>>.
-Reserving slots in this manner is not strictly necessary but it may: improve
-performance.
-
-[open,refpage='VkPrivateDataSlotEXT',desc='Opaque handle to a private data slot object',type='handles']
---
-Private data slots are represented by sname:VkPrivateDataSlotEXT handles:
-
-include::{generated}/api/handles/VkPrivateDataSlotEXT.txt[]
---
-
-[open,refpage='vkCreatePrivateDataSlotEXT',desc='Create a slot for private data storage',type='protos']
---
-To create a private data slot, call:
-
-include::{generated}/api/protos/vkCreatePrivateDataSlotEXT.txt[]
-
-  * pname:device is the logical device associated with the creation of the
-    object(s) holding the private data slot.
-  * pname:pCreateInfo is a pointer to a sname:VkPrivateDataSlotCreateInfoEXT
-  * pname:pAllocator controls host memory allocation as described in the
-    <<memory-allocation, Memory Allocation>> chapter.
-  * pname:pPrivateDataSlot is a pointer to a slink:VkPrivateDataSlotEXT
-    handle in which the resulting private data slot is returned
-
-.Valid Usage
-****
-  * [[VUID-vkCreatePrivateDataSlotEXT-privateData-04564]]
-    The <<features-privateData,pname:privateData>> feature must: be enabled
-****
-
-include::{generated}/validity/protos/vkCreatePrivateDataSlotEXT.txt[]
---
-
-[open,refpage='VkPrivateDataSlotCreateInfoEXT',desc='Structure specifying the parameters of private data slot construction',type='structs']
---
-The sname:VkPrivateDataSlotCreateInfoEXT structure is defined as:
-
-include::{generated}/api/structs/VkPrivateDataSlotCreateInfoEXT.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:flags is a bitmask of tlink:VkPrivateDataSlotCreateFlagsEXT
-    specifying additional parameters of the new private data slot
-
-include::{generated}/validity/structs/VkPrivateDataSlotCreateInfoEXT.txt[]
---
-
-[open,refpage='VkPrivateDataSlotCreateFlagBitsEXT',desc='Bitmask specifying additional parameters for private data slot creation',type='enums']
---
-include::{generated}/api/enums/VkPrivateDataSlotCreateFlagBitsEXT.txt[]
---
-
-[open,refpage='VkPrivateDataSlotCreateFlagsEXT',desc='Bitmask of VkPrivateDataSlotCreateFlagBitsEXT',type='flags']
---
-include::{generated}/api/flags/VkPrivateDataSlotCreateFlagsEXT.txt[]
-
-tname:VkPrivateDataSlotCreateFlagsEXT is a bitmask type for setting a mask
-of zero or more elink:VkPrivateDataSlotCreateFlagBitsEXT.
---
-
-[open,refpage='vkDestroyPrivateDataSlotEXT',desc='Destroy a private data slot',type='protos']
---
-To destroy a private data slot, call:
-
-include::{generated}/api/protos/vkDestroyPrivateDataSlotEXT.txt[]
-
-  * pname:device is the logical device associated with the creation of the
-    object(s) holding the private data slot.
-  * pname:pAllocator controls host memory allocation as described in the
-    <<memory-allocation, Memory Allocation>> chapter.
-  * pname:privateDataSlot is the private data slot to destroy.
-
-.Valid Usage
-****
-  * [[VUID-vkDestroyPrivateDataSlotEXT-privateDataSlot-04062]]
-    If sname:VkAllocationCallbacks were provided when pname:privateDataSlot
-    was created, a compatible set of callbacks must: be provided here
-  * [[VUID-vkDestroyPrivateDataSlotEXT-privateDataSlot-04063]]
-    If no sname:VkAllocationCallbacks were provided when
-    pname:privateDataSlot was created, pname:pAllocator must: be `NULL`
-****
-
-include::{generated}/validity/protos/vkDestroyPrivateDataSlotEXT.txt[]
---
-
-[open,refpage='vkSetPrivateDataEXT',desc='Associate data with a Vulkan object',type='protos']
---
-To store user defined data in a slot associated with a Vulkan object, call:
-
-include::{generated}/api/protos/vkSetPrivateDataEXT.txt[]
-
-  * pname:device is the device that created the object.
-  * pname:objectType is a elink:VkObjectType specifying the type of object
-    to associate data with.
-  * pname:objectHandle is a handle to the object to associate data with.
-  * pname:privateDataSlot is a handle to a slink:VkPrivateDataSlotEXT
-    specifying location of private data storage.
-  * pname:data is user defined data to associate the object with.
-    This data will be stored at pname:privateDataSlot.
-
-.Valid Usage
-****
-  * [[VUID-vkSetPrivateDataEXT-objectHandle-04016]]
-    pname:objectHandle must: be pname:device or a child of pname:device
-  * [[VUID-vkSetPrivateDataEXT-objectHandle-04017]]
-    pname:objectHandle must: be a valid handle to an object of type
-    pname:objectType
-****
-
-include::{generated}/validity/protos/vkSetPrivateDataEXT.txt[]
---
-
-[open,refpage='vkGetPrivateDataEXT',desc='Retrieve data associated with a Vulkan object',type='protos']
---
-To retrieve user defined data from a slot associated with a Vulkan object,
-call:
-
-include::{generated}/api/protos/vkGetPrivateDataEXT.txt[]
-
-  * pname:device is the device that created the object
-  * pname:objectType is a elink:VkObjectType specifying the type of object
-    data is associated with.
-  * pname:objectHandle is a handle to the object data is associated with.
-  * pname:privateDataSlot is a handle to a slink:VkPrivateDataSlotEXT
-    specifying location of private data pointer storage.
-  * pname:pData is a pointer to specify where user data is returned.
-    `0` will be written in the absence of a previous call to
-    fname:vkSetPrivateDataEXT using the object specified by
-    pname:objectHandle.
-
-[NOTE]
-.Note
-====
-Due to platform details on Android, implementations might not be able to
-reliably return `0` from calls to fname:vkGetPrivateDataEXT for
-slink:VkSwapchainKHR objects on which fname:vkSetPrivateDataEXT has not
-previously been called.
-This erratum is exclusive to the Android platform and objects of type
-slink:VkSwapchainKHR.
-====
-
-.Valid Usage
-****
-  * [[VUID-vkGetPrivateDataEXT-objectType-04018]]
-    pname:objectType must: be ename:VK_OBJECT_TYPE_DEVICE, or an object type
-    whose parent is slink:VkDevice
-****
-
-include::{generated}/validity/protos/vkGetPrivateDataEXT.txt[]
---
diff --git a/registry/vulkan/chapters/VK_EXT_validation_cache/shader-module-validation-cache.txt b/registry/vulkan/chapters/VK_EXT_validation_cache/shader-module-validation-cache.txt
deleted file mode 100644
index 5e4d579..0000000
--- a/registry/vulkan/chapters/VK_EXT_validation_cache/shader-module-validation-cache.txt
+++ /dev/null
@@ -1,25 +0,0 @@
-// Copyright 2018-2021 The Khronos Group, Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-[open,refpage='VkShaderModuleValidationCacheCreateInfoEXT',desc='Specify validation cache to use during shader module creation',type='structs']
---
-To use a slink:VkValidationCacheEXT to cache shader validation results, add
-a slink:VkShaderModuleValidationCacheCreateInfoEXT structure to the
-pname:pNext chain of the slink:VkShaderModuleCreateInfo structure,
-specifying the cache object to use.
-
-The sname:VkShaderModuleValidationCacheCreateInfoEXT struct is defined as:
-
-include::{generated}/api/structs/VkShaderModuleValidationCacheCreateInfoEXT.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:validationCache is the validation cache object from which the
-    results of prior validation attempts will be written, and to which new
-    validation results for this slink:VkShaderModule will be written (if not
-    already present).
-
-include::{generated}/validity/structs/VkShaderModuleValidationCacheCreateInfoEXT.txt[]
---
diff --git a/registry/vulkan/chapters/VK_EXT_validation_features.txt b/registry/vulkan/chapters/VK_EXT_validation_features.txt
deleted file mode 100644
index b002a48..0000000
--- a/registry/vulkan/chapters/VK_EXT_validation_features.txt
+++ /dev/null
@@ -1,135 +0,0 @@
-// Copyright 2018-2021 The Khronos Group, Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-[open,refpage='VkValidationFeaturesEXT',desc='Specify validation features to enable or disable for a Vulkan instance',type='structs']
---
-When creating a Vulkan instance for which you wish to enable or disable
-specific validation features, add a slink:VkValidationFeaturesEXT structure
-to the pname:pNext chain of the slink:VkInstanceCreateInfo structure,
-specifying the features to be enabled or disabled.
-
-include::{generated}/api/structs/VkValidationFeaturesEXT.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:enabledValidationFeatureCount is the number of features to enable.
-  * pname:pEnabledValidationFeatures is a pointer to an array of
-    elink:VkValidationFeatureEnableEXT values specifying the validation
-    features to be enabled.
-  * pname:disabledValidationFeatureCount is the number of features to
-    disable.
-  * pname:pDisabledValidationFeatures is a pointer to an array of
-    elink:VkValidationFeatureDisableEXT values specifying the validation
-    features to be disabled.
-
-.Valid Usage
-****
-  * [[VUID-VkValidationFeaturesEXT-pEnabledValidationFeatures-02967]]
-    If the pname:pEnabledValidationFeatures array contains
-    ename:VK_VALIDATION_FEATURE_ENABLE_GPU_ASSISTED_RESERVE_BINDING_SLOT_EXT,
-    then it must: also contain
-    ename:VK_VALIDATION_FEATURE_ENABLE_GPU_ASSISTED_EXT
-  * [[VUID-VkValidationFeaturesEXT-pEnabledValidationFeatures-02968]]
-    If the pname:pEnabledValidationFeatures array contains
-    ename:VK_VALIDATION_FEATURE_ENABLE_DEBUG_PRINTF_EXT, then it must: not
-    contain ename:VK_VALIDATION_FEATURE_ENABLE_GPU_ASSISTED_EXT
-****
-
-include::{generated}/validity/structs/VkValidationFeaturesEXT.txt[]
---
-
-[open,refpage='VkValidationFeatureEnableEXT',desc='Specify validation features to enable',type='enums']
---
-Possible values of elements of the
-slink:VkValidationFeaturesEXT::pname:pEnabledValidationFeatures array,
-specifying validation features to be enabled, are:
-
-include::{generated}/api/enums/VkValidationFeatureEnableEXT.txt[]
-
-  * ename:VK_VALIDATION_FEATURE_ENABLE_GPU_ASSISTED_EXT specifies that
-    GPU-assisted validation is enabled.
-    Activating this feature instruments shader programs to generate
-    additional diagnostic data.
-    This feature is disabled by default.
-  * ename:VK_VALIDATION_FEATURE_ENABLE_GPU_ASSISTED_RESERVE_BINDING_SLOT_EXT
-    specifies that the validation layers reserve a descriptor set binding
-    slot for their own use.
-    The layer reports a value for
-    slink:VkPhysicalDeviceLimits::pname:maxBoundDescriptorSets that is one
-    less than the value reported by the device.
-    If the device supports the binding of only one descriptor set, the
-    validation layer does not perform GPU-assisted validation.
-    This feature is disabled by default.
-  * ename:VK_VALIDATION_FEATURE_ENABLE_BEST_PRACTICES_EXT specifies that
-    Vulkan best-practices validation is enabled.
-    Activating this feature enables the output of warnings related to common
-    misuse of the API, but which are not explicitly prohibited by the
-    specification.
-    This feature is disabled by default.
-  * ename:VK_VALIDATION_FEATURE_ENABLE_DEBUG_PRINTF_EXT specifies that the
-    layers will process code:debugPrintfEXT operations in shaders and send
-    the resulting output to the debug callback.
-    This feature is disabled by default.
-  * ename:VK_VALIDATION_FEATURE_ENABLE_SYNCHRONIZATION_VALIDATION_EXT
-    specifies that Vulkan synchronization validation is enabled.
-    This feature reports resource access conflicts due to missing or
-    incorrect synchronization operations between actions (Draw, Copy,
-    Dispatch, Blit) reading or writing the same regions of memory.
-    This feature is disabled by default.
---
-
-[open,refpage='VkValidationFeatureDisableEXT',desc='Specify validation features to disable',type='enums']
---
-Possible values of elements of the
-slink:VkValidationFeaturesEXT::pname:pDisabledValidationFeatures array,
-specifying validation features to be disabled, are:
-
-include::{generated}/api/enums/VkValidationFeatureDisableEXT.txt[]
-
-  * ename:VK_VALIDATION_FEATURE_DISABLE_ALL_EXT specifies that all
-    validation checks are disabled.
-  * ename:VK_VALIDATION_FEATURE_DISABLE_SHADERS_EXT specifies that shader
-    validation is disabled.
-    This feature is enabled by default.
-  * ename:VK_VALIDATION_FEATURE_DISABLE_THREAD_SAFETY_EXT specifies that
-    thread safety validation is disabled.
-    This feature is enabled by default.
-  * ename:VK_VALIDATION_FEATURE_DISABLE_API_PARAMETERS_EXT specifies that
-    stateless parameter validation is disabled.
-    This feature is enabled by default.
-  * ename:VK_VALIDATION_FEATURE_DISABLE_OBJECT_LIFETIMES_EXT specifies that
-    object lifetime validation is disabled.
-    This feature is enabled by default.
-  * ename:VK_VALIDATION_FEATURE_DISABLE_CORE_CHECKS_EXT specifies that core
-    validation checks are disabled.
-    This feature is enabled by default.
-    If this feature is disabled, the shader validation and GPU-assisted
-    validation features are also disabled.
-  * ename:VK_VALIDATION_FEATURE_DISABLE_UNIQUE_HANDLES_EXT specifies that
-    protection against duplicate non-dispatchable object handles is
-    disabled.
-    This feature is enabled by default.
-  * ename:VK_VALIDATION_FEATURE_DISABLE_SHADER_VALIDATION_CACHE_EXT
-    specifies that there will be no caching of shader validation results and
-    every shader will be validated on every application execution.
-    Shader validation caching is enabled by default.
---
-
-[NOTE]
-.Note
-====
-Disabling checks such as parameter validation and object lifetime validation
-prevents the reporting of error conditions that can cause other validation
-checks to behave incorrectly or crash.
-Some validation checks assume that their inputs are already valid and do not
-always revalidate them.
-====
-
-[NOTE]
-.Note
-====
-The `apiext:VK_EXT_validation_features` extension subsumes all the
-functionality provided in the `apiext:VK_EXT_validation_flags` extension.
-====
diff --git a/registry/vulkan/chapters/VK_EXT_validation_flags.txt b/registry/vulkan/chapters/VK_EXT_validation_flags.txt
deleted file mode 100644
index ccd1ce6..0000000
--- a/registry/vulkan/chapters/VK_EXT_validation_flags.txt
+++ /dev/null
@@ -1,37 +0,0 @@
-// Copyright 2018-2021 The Khronos Group, Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-[open,refpage='VkValidationFlagsEXT',desc='Specify validation checks to disable for a Vulkan instance',type='structs']
---
-When creating a Vulkan instance for which you wish to disable validation
-checks, add a slink:VkValidationFlagsEXT structure to the pname:pNext chain
-of the slink:VkInstanceCreateInfo structure, specifying the checks to be
-disabled.
-
-include::{generated}/api/structs/VkValidationFlagsEXT.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:disabledValidationCheckCount is the number of checks to disable.
-  * pname:pDisabledValidationChecks is a pointer to an array of
-    elink:VkValidationCheckEXT values specifying the validation checks to be
-    disabled.
-
-include::{generated}/validity/structs/VkValidationFlagsEXT.txt[]
---
-
-[open,refpage='VkValidationCheckEXT',desc='Specify validation checks to disable',type='enums']
---
-Possible values of elements of the
-slink:VkValidationFlagsEXT::pname:pDisabledValidationChecks array,
-specifying validation checks to be disabled, are:
-
-include::{generated}/api/enums/VkValidationCheckEXT.txt[]
-
-  * ename:VK_VALIDATION_CHECK_ALL_EXT specifies that all validation checks
-    are disabled.
-  * ename:VK_VALIDATION_CHECK_SHADERS_EXT specifies that shader validation
-    is disabled.
---
diff --git a/registry/vulkan/chapters/VK_FUCHSIA_external_memory/device_memory.txt b/registry/vulkan/chapters/VK_FUCHSIA_external_memory/device_memory.txt
deleted file mode 100644
index 3b53034..0000000
--- a/registry/vulkan/chapters/VK_FUCHSIA_external_memory/device_memory.txt
+++ /dev/null
@@ -1,169 +0,0 @@
-// Copyright (c) 2021 Google Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-[[fuchsia-external-memory]]
-=== Fuchsia External Memory
-
-On Fuchsia, when allocating memory that may: be imported from another
-device, process or Vulkan instance, add a
-slink:VkImportMemoryZirconHandleInfoFUCHSIA structure to the pname:pNext
-chain of the slink:VkMemoryAllocateInfo structure.
-
-External memory on Fuchsia is imported and exported using VMO handles of
-type code:zx_handle_t.
-VMO handles to external memory are canonically obtained from Fuchsia's
-Sysmem service or from syscalls such as sname:zx_vmo_create().
-VMO handles for import can also be obtained by exporting them from another
-Vulkan instance as described in <<exporting-fuchsia-device-memory,exporting
-fuchsia device memory>>.
-
-Importing VMO handles to the Vulkan instance transfers ownership of the
-handle to the instance from the application.
-The application must: not perform any operations on the handle after
-successful import.
-
-Applications can: import the same underlying memory into multiple instances
-of Vulkan, into the same instance from which it was exported, and multiple
-times into a given Vulkan instance.
-In all cases, each import operation must: create a distinct
-sname:VkDeviceMemory object.
-
-
-[[importing-fuchsia-external-memory]]
-==== Importing Fuchsia External Memory
-
-[open,refpage='VkImportMemoryZirconHandleInfoFUCHSIA',desc='Structure specifying import parameters for Zircon handle to external memory',type='structs']
---
-The sname:VkImportMemoryZirconHandleInfoFUCHSIA structure is defined as:
-
-include::{generated}/api/structs/VkImportMemoryZirconHandleInfoFUCHSIA.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:handleType is a elink:VkExternalMemoryHandleTypeFlagBits value
-    specifying the type of pname:handle.
-  * pname:handle is a code:zx_handle_t (Zircon) handle to the external
-    memory.
-
-.Valid Usage
-****
-  * [[VUID-VkImportMemoryZirconHandleInfoFUCHSIA-handleType-04771]]
-    pname:handleType must: be
-    ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_ZIRCON_VMO_BIT_FUCHSIA
-  * [[VUID-VkImportMemoryZirconHandleInfoFUCHSIA-handle-04772]]
-    pname:handle must be a valid VMO handle
-****
-
-include::{generated}/validity/structs/VkImportMemoryZirconHandleInfoFUCHSIA.txt[]
---
-
-[open,refpage='vkGetMemoryZirconHandlePropertiesFUCHSIA',desc='Get a Zircon handle properties for an external memory object',type='protos']
---
-To obtain the memoryTypeIndex for the slink:VkMemoryAllocateInfo structure,
-call fname:vkGetMemoryZirconHandlePropertiesFUCHSIA:
-
-include::{generated}/api/protos/vkGetMemoryZirconHandlePropertiesFUCHSIA.txt[]
-
-  * pname:device is the slink:VkDevice.
-  * pname:handleType is a elink:VkExternalMemoryHandleTypeFlagBits value
-    specifying the type of pname:zirconHandle
-  * pname:zirconHandle is a code:zx_handle_t (Zircon) handle to the external
-    resource.
-  * pname:pMemoryZirconHandleProperties is a pointer to a
-    slink:VkMemoryZirconHandlePropertiesFUCHSIA structure in which the
-    result will be stored.
-
-.Valid Usage
-****
-  * [[VUID-vkGetMemoryZirconHandlePropertiesFUCHSIA-handleType-04773]]
-    pname:handleType must: be
-    ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_ZIRCON_VMO_BIT_FUCHSIA
-  * [[VUID-vkGetMemoryZirconHandlePropertiesFUCHSIA-zirconHandle-04774]]
-    pname:zirconHandle must reference a valid VMO
-****
-
-include::{generated}/validity/protos/vkGetMemoryZirconHandlePropertiesFUCHSIA.txt[]
---
-
-[open,refpage='VkMemoryZirconHandlePropertiesFUCHSIA',desc='Structure specifying Zircon handle compatible external memory',type='structs']
---
-The sname:VkMemoryZirconHandlePropertiesFUCHSIA structure is defined as:
-
-include::{generated}/api/structs/VkMemoryZirconHandlePropertiesFUCHSIA.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:memoryTypeBits a bitmask containing one bit set for every memory
-    type which the specified handle can be imported as.
-
-include::{generated}/validity/structs/VkMemoryZirconHandlePropertiesFUCHSIA.txt[]
---
-
-With pname:pMemoryZirconHandleProperties now successfully populated by
-flink:vkGetMemoryZirconHandlePropertiesFUCHSIA, assign the
-slink:VkMemoryAllocateInfo memoryTypeIndex field to a memory type which has
-a bit set in the slink:VkMemoryZirconHandlePropertiesFUCHSIA memoryTypeBits
-field.
-
-
-[[exporting-fuchsia-device-memory]]
-==== Exporting Fuchsia Device Memory
-Similar to importing, exporting a VMO handle from Vulkan transfers ownership
-of the handle from the Vulkan instance to the application.
-The application is responsible for closing the handle with
-code:zx_handle_close() when it is no longer in use.
-
-
-[open,refpage='vkGetMemoryZirconHandleFUCHSIA',desc='Get a Zircon handle for an external memory object',type='protos']
---
-To export device memory as a Zircon handle that can be used by another
-instance, device, or process, the handle to the slink:VkDeviceMemory must be
-retrieved using flink:vkGetMemoryZirconHandleFUCHSIA:
-
-include::{generated}/api/protos/vkGetMemoryZirconHandleFUCHSIA.txt[]
-
-  * pname:device is the slink:VkDevice.
-  * pname:pGetZirconHandleInfo is a pointer to a
-    slink:VkMemoryGetZirconHandleInfoFUCHSIA structure.
-  * pname:pZirconHandle is a pointer to a code:zx_handle_t which holds the
-    resulting Zircon handle.
-
-include::{generated}/validity/protos/vkGetMemoryZirconHandleFUCHSIA.txt[]
---
-
-[open,refpage='VkMemoryGetZirconHandleInfoFUCHSIA',desc='Structure specifying export parameters for Zircon handle to device memory',type='structs']
---
-sname:VkMemoryGetZirconHandleInfoFUCHSIA is defined as:
-
-include::{generated}/api/structs/VkMemoryGetZirconHandleInfoFUCHSIA.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:memory the slink:VkDeviceMemory being exported.
-  * pname:handleType is a elink:VkExternalMemoryHandleTypeFlagBits value
-    specifying the type of the handle pointed to by
-    flink:vkGetMemoryZirconHandleFUCHSIA::pname:pZirconHandle.
-
-.Valid Usage
-****
-  * [[VUID-VkMemoryGetZirconHandleInfoFUCHSIA-handleType-04775]]
-    pname:handleType must: be
-    ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_ZIRCON_VMO_BIT_FUCHSIA
-  * [[VUID-VkMemoryGetZirconHandleInfoFUCHSIA-handleType-04776]]
-    pname:handleType must: have been included in the sname:handleTypes field
-    of the sname:VkExportMemoryAllocateInfo structure when the external
-    memory was allocated
-****
-
-include::{generated}/validity/structs/VkMemoryGetZirconHandleInfoFUCHSIA.txt[]
---
-
-With the result pname:pZirconHandle now obtained, the memory properties for
-the handle can be retrieved using
-flink:vkGetMemoryZirconHandlePropertiesFUCHSIA as documented above
-substituting the dereferenced, retrieved pname:pZirconHandle in for the
-pname:zirconHandle argument.
diff --git a/registry/vulkan/chapters/VK_FUCHSIA_imagepipe_surface/platformCreateSurface_imagepipe.txt b/registry/vulkan/chapters/VK_FUCHSIA_imagepipe_surface/platformCreateSurface_imagepipe.txt
deleted file mode 100644
index c3552e3..0000000
--- a/registry/vulkan/chapters/VK_FUCHSIA_imagepipe_surface/platformCreateSurface_imagepipe.txt
+++ /dev/null
@@ -1,60 +0,0 @@
-// Copyright 2014-2021 The Khronos Group, Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-[[platformCreateSurface_imagepipe,platformCreateSurface_imagepipe]]
-
-=== Fuchsia Platform
-
-[open,refpage='vkCreateImagePipeSurfaceFUCHSIA',desc='Create a slink:VkSurfaceKHR object for a Fuchsia ImagePipe',type='protos']
---
-To create a sname:VkSurfaceKHR object for a Fuchsia ImagePipe, call:
-
-include::{generated}/api/protos/vkCreateImagePipeSurfaceFUCHSIA.txt[]
-
-  * pname:instance is the instance to associate with the surface.
-  * pname:pCreateInfo is a pointer to a
-    slink:VkImagePipeSurfaceCreateInfoFUCHSIA structure containing
-    parameters affecting the creation of the surface object.
-  * pname:pAllocator is the allocator used for host memory allocated for the
-    surface object when there is no more specific allocator available (see
-    <<memory-allocation,Memory Allocation>>).
-  * pname:pSurface is a pointer to a slink:VkSurfaceKHR handle in which the
-    created surface object is returned.
-
-include::{generated}/validity/protos/vkCreateImagePipeSurfaceFUCHSIA.txt[]
---
-
-[open,refpage='VkImagePipeSurfaceCreateInfoFUCHSIA',desc='Structure specifying parameters of a newly created ImagePipe surface object',type='structs']
---
-The sname:VkImagePipeSurfaceCreateInfoFUCHSIA structure is defined as:
-
-include::{generated}/api/structs/VkImagePipeSurfaceCreateInfoFUCHSIA.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:flags is reserved for future use.
-  * pname:imagePipeHandle is a code:zx_handle_t referring to the ImagePipe
-    to associate with the surface.
-
-.Valid Usage
-****
-  * [[VUID-VkImagePipeSurfaceCreateInfoFUCHSIA-imagePipeHandle-04863]]
-    pname:imagePipeHandle must: be a valid code:zx_handle_t
-****
-
-include::{generated}/validity/structs/VkImagePipeSurfaceCreateInfoFUCHSIA.txt[]
---
-
-On Fuchsia, the surface pname:currentExtent is the special value
-[eq]#(0xFFFFFFFF, 0xFFFFFFFF)#, indicating that the surface size will be
-determined by the extent of a swapchain targeting the surface.
-
-[open,refpage='VkImagePipeSurfaceCreateFlagsFUCHSIA',desc='Reserved for future use',type='flags']
---
-include::{generated}/api/flags/VkImagePipeSurfaceCreateFlagsFUCHSIA.txt[]
-
-tname:VkImagePipeSurfaceCreateFlagsFUCHSIA is a bitmask type for setting a
-mask, but is currently reserved for future use.
---
diff --git a/registry/vulkan/chapters/VK_FUCHSIA_imagepipe_surface/platformQuerySupport_imagepipe.txt b/registry/vulkan/chapters/VK_FUCHSIA_imagepipe_surface/platformQuerySupport_imagepipe.txt
deleted file mode 100644
index 5b58373..0000000
--- a/registry/vulkan/chapters/VK_FUCHSIA_imagepipe_surface/platformQuerySupport_imagepipe.txt
+++ /dev/null
@@ -1,12 +0,0 @@
-// Copyright 2014-2021 The Khronos Group, Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-[[platformQuerySupport_fuchsia,platformQuerySupport_fuchsia]]
-
-=== Fuchsia Platform
-
-On Fuchsia, all physical devices and queue families must: be capable of
-presentation with any ImagePipe.
-As a result there is no Fuchsia-specific query for these capabilities.
-
diff --git a/registry/vulkan/chapters/VK_GGP_frame_token.txt b/registry/vulkan/chapters/VK_GGP_frame_token.txt
deleted file mode 100644
index 591ee21..0000000
--- a/registry/vulkan/chapters/VK_GGP_frame_token.txt
+++ /dev/null
@@ -1,28 +0,0 @@
-// Copyright 2015-2021 The Khronos Group, Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-[open,refpage='VkPresentFrameTokenGGP',desc='The Google Games Platform frame token',type='structs']
---
-When the `apiext:VK_GGP_frame_token` extension is enabled, a Google Games
-Platform frame token can: be specified when presenting an image to a
-swapchain by adding a sname:VkPresentFrameTokenGGP structure to the
-pname:pNext chain of the sname:VkPresentInfoKHR structure.
-
-The sname:VkPresentFrameTokenGGP structure is defined as:
-
-include::{generated}/api/structs/VkPresentFrameTokenGGP.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:frameToken is the Google Games Platform frame token.
-
-.Valid Usage
-****
-  * [[VUID-VkPresentFrameTokenGGP-frameToken-02680]]
-    pname:frameToken must: be a valid code:GgpFrameToken
-****
-
-include::{generated}/validity/structs/VkPresentFrameTokenGGP.txt[]
---
diff --git a/registry/vulkan/chapters/VK_GGP_stream_descriptor_surface/platformCreateSurface_streamdescriptor.txt b/registry/vulkan/chapters/VK_GGP_stream_descriptor_surface/platformCreateSurface_streamdescriptor.txt
deleted file mode 100644
index adeb98c..0000000
--- a/registry/vulkan/chapters/VK_GGP_stream_descriptor_surface/platformCreateSurface_streamdescriptor.txt
+++ /dev/null
@@ -1,72 +0,0 @@
-// Copyright 2014-2021 The Khronos Group, Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-[[platformCreateSurface_streamdescriptor,platformCreateSurface_streamdescriptor]]
-=== Google Games Platform
-
-[open,refpage='vkCreateStreamDescriptorSurfaceGGP',desc='Create a slink:VkSurfaceKHR object for a Google Games Platform stream',type='protos']
---
-To create a sname:VkSurfaceKHR object for a Google Games Platform stream
-descriptor, call:
-
-include::{generated}/api/protos/vkCreateStreamDescriptorSurfaceGGP.txt[]
-
-  * pname:instance is the instance to associate with the surface.
-  * pname:pCreateInfo is a pointer to a
-    sname:VkStreamDescriptorSurfaceCreateInfoGGP structure containing
-    parameters that affect the creation of the surface object.
-  * pname:pAllocator is the allocator used for host memory allocated for the
-    surface object when there is no more specific allocator available (see
-    <<memory-allocation,Memory Allocation>>).
-  * pname:pSurface is a pointer to a slink:VkSurfaceKHR handle in which the
-    created surface object is returned.
-
-include::{generated}/validity/protos/vkCreateStreamDescriptorSurfaceGGP.txt[]
---
-
-[open,refpage='VkStreamDescriptorSurfaceCreateInfoGGP',desc='Structure specifying parameters of a newly created Google Games Platform stream surface object',type='structs']
---
-The sname:VkStreamDescriptorSurfaceCreateInfoGGP structure is defined as:
-
-include::{generated}/api/structs/VkStreamDescriptorSurfaceCreateInfoGGP.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:flags is reserved for future use.
-  * pname:streamDescriptor is a code:GgpStreamDescriptor referring to the
-    GGP stream descriptor to associate with the surface.
-
-.Valid Usage
-****
-  * [[VUID-VkStreamDescriptorSurfaceCreateInfoGGP-streamDescriptor-02681]]
-    pname:streamDescriptor must: be a valid code:GgpStreamDescriptor
-****
-
-include::{generated}/validity/structs/VkStreamDescriptorSurfaceCreateInfoGGP.txt[]
---
-
-On Google Games Platform, the surface extents are dynamic.
-The pname:minImageExtent will never be greater than 1080p and the
-pname:maxImageExtent will never be less than 1080p.
-The pname:currentExtent will reflect the current optimal resolution.
-
-ifdef::VK_KHR_swapchain[]
-Applications are expected to choose an appropriate size for the swapchain’s
-pname:imageExtent, within the bounds of the surface.
-Using the surface's pname:currentExtent will offer the best performance and
-quality.
-When a swapchain's pname:imageExtent does not match the surface's
-pname:currentExtent, the presentable images are scaled to the surface's
-dimensions during presentation if possible and ename:VK_SUBOPTIMAL_KHR is
-returned, otherwise presentation fails with ename:VK_ERROR_OUT_OF_DATE_KHR.
-endif::VK_KHR_swapchain[]
-
-[open,refpage='VkStreamDescriptorSurfaceCreateFlagsGGP',desc='Reserved for future use',type='flags']
---
-include::{generated}/api/flags/VkStreamDescriptorSurfaceCreateFlagsGGP.txt[]
-
-tname:VkStreamDescriptorSurfaceCreateFlagsGGP is a bitmask type for setting
-a mask, but is currently reserved for future use.
---
diff --git a/registry/vulkan/chapters/VK_GGP_stream_descriptor_surface/platformQuerySupport_streamdescriptor.txt b/registry/vulkan/chapters/VK_GGP_stream_descriptor_surface/platformQuerySupport_streamdescriptor.txt
deleted file mode 100644
index 4270756..0000000
--- a/registry/vulkan/chapters/VK_GGP_stream_descriptor_surface/platformQuerySupport_streamdescriptor.txt
+++ /dev/null
@@ -1,12 +0,0 @@
-// Copyright 2014-2021 The Khronos Group, Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-[[platformQuerySupport_streamdescriptor,platformQuerySupport_streamdescriptor]]
-=== Google Games Platform
-
-On Google Games Platform, all physical devices and queue families with the
-ename:VK_QUEUE_GRAPHICS_BIT or ename:VK_QUEUE_COMPUTE_BIT capabilities must:
-be capable of presentation with any Google Games Platform stream descriptor.
-As a result, there is no query specific to Google Games Platform for these
-capabilities.
diff --git a/registry/vulkan/chapters/VK_GOOGLE_display_timing/PresentTimeInfo.txt b/registry/vulkan/chapters/VK_GOOGLE_display_timing/PresentTimeInfo.txt
deleted file mode 100644
index 062abbe..0000000
--- a/registry/vulkan/chapters/VK_GOOGLE_display_timing/PresentTimeInfo.txt
+++ /dev/null
@@ -1,69 +0,0 @@
-// Copyright (c) 2018-2020 Google LLC
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-
-[open,refpage='VkPresentTimesInfoGOOGLE',desc='The earliest time each image should be presented',type='structs']
---
-When the `apiext:VK_GOOGLE_display_timing` extension is enabled, additional
-fields can: be specified that allow an application to specify the earliest
-time that an image should be displayed.
-This allows an application to avoid stutter that is caused by an image being
-displayed earlier than planned.
-Such stuttering can occur with both fixed and variable-refresh-rate
-displays, because stuttering occurs when the geometry is not correctly
-positioned for when the image is displayed.
-An application can: instruct the presentation engine that an image should
-not be displayed earlier than a specified time by adding a
-sname:VkPresentTimesInfoGOOGLE structure to the pname:pNext chain of the
-sname:VkPresentInfoKHR structure.
-
-The sname:VkPresentTimesInfoGOOGLE structure is defined as:
-
-include::{generated}/api/structs/VkPresentTimesInfoGOOGLE.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:swapchainCount is the number of swapchains being presented to by
-    this command.
-  * pname:pTimes is `NULL` or a pointer to an array of
-    sname:VkPresentTimeGOOGLE elements with pname:swapchainCount entries.
-    If not `NULL`, each element of pname:pTimes contains the earliest time
-    to present the image corresponding to the entry in the
-    sname:VkPresentInfoKHR::pname:pImageIndices array.
-
-.Valid Usage
-****
-  * [[VUID-VkPresentTimesInfoGOOGLE-swapchainCount-01247]]
-    pname:swapchainCount must: be the same value as
-    sname:VkPresentInfoKHR::pname:swapchainCount, where
-    sname:VkPresentInfoKHR is included in the pname:pNext chain of this
-    sname:VkPresentTimesInfoGOOGLE structure
-****
-
-include::{generated}/validity/structs/VkPresentTimesInfoGOOGLE.txt[]
---
-
-[open,refpage='VkPresentTimeGOOGLE',desc='The earliest time image should be presented',type='structs']
---
-The sname:VkPresentTimeGOOGLE structure is defined as:
-
-include::{generated}/api/structs/VkPresentTimeGOOGLE.txt[]
-
-  * pname:presentID is an application-provided identification value, that
-    can: be used with the results of
-    flink:vkGetPastPresentationTimingGOOGLE, in order to uniquely identify
-    this present.
-    In order to be useful to the application, it should: be unique within
-    some period of time that is meaningful to the application.
-  * pname:desiredPresentTime specifies that the image given should: not be
-    displayed to the user any earlier than this time.
-    pname:desiredPresentTime is a time in nanoseconds, relative to a
-    monotonically-increasing clock (e.g. `CLOCK_MONOTONIC` (see
-    clock_gettime(2)) on Android and Linux).
-    A value of zero specifies that the presentation engine may: display the
-    image at any time.
-    This is useful when the application desires to provide pname:presentID,
-    but does not need a specific pname:desiredPresentTime.
---
diff --git a/registry/vulkan/chapters/VK_GOOGLE_display_timing/queries.txt b/registry/vulkan/chapters/VK_GOOGLE_display_timing/queries.txt
deleted file mode 100644
index 97a9548..0000000
--- a/registry/vulkan/chapters/VK_GOOGLE_display_timing/queries.txt
+++ /dev/null
@@ -1,260 +0,0 @@
-// Copyright (c) 2016-2018 Google LLC.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-== Display Timing Queries
-
-Traditional game and real-time-animation applications frequently use
-ename:VK_PRESENT_MODE_FIFO_KHR so that presentable images are updated during
-the vertical blanking period of a given refresh cycle (RC) of the
-presentation engine's display.
-This avoids the visual anomaly known as tearing.
-
-However, synchronizing the presentation of images with the RC does not
-prevent all forms of visual anomalies.
-Stuttering occurs when the geometry for each presentable image is not
-accurately positioned for when that image will be displayed.
-The geometry may appear to move too little some RCs, and too much for
-others.
-Sometimes the animation appears to freeze, when the same image is used for
-more than one RC.
-
-In order to minimize stuttering, an application needs to correctly position
-their geometry for when the presentable image will be displayed to the user.
-To accomplish this, applications need various timing information about the
-presentation engine's display.
-They need to know when presentable images were actually presented, and when
-they could have been presented.
-Applications also need to tell the presentation engine to display an image
-no sooner than a given time.
-This can allow the application's animation to look smooth to the user, with
-no stuttering.
-The `VK_GOOGLE_display_timing` extension allows an application to satisfy
-these needs.
-
-The presentation engine's display typically refreshes the pixels that are
-displayed to the user on a periodic basis.
-The period may be fixed or variable.
-In many cases, the presentation engine is associated with fixed refresh rate
-(FRR) display technology, with a fixed refresh rate (RR, e.g. 60Hz).
-In some cases, the presentation engine is associated with variable refresh
-rate (VRR) display technology, where each refresh cycle (RC) can vary in
-length.
-This extension treats VRR displays as if they are FRR.
-
-[open,refpage='vkGetRefreshCycleDurationGOOGLE',desc='Obtain the RC duration of the PE\'s display',type='protos']
---
-To query the duration of a refresh cycle (RC) for the presentation engine's
-display, call:
-
-include::{generated}/api/protos/vkGetRefreshCycleDurationGOOGLE.txt[]
-
-  * pname:device is the device associated with pname:swapchain.
-  * pname:swapchain is the swapchain to obtain the refresh duration for.
-  * pname:pDisplayTimingProperties is a pointer to a
-    sname:VkRefreshCycleDurationGOOGLE structure.
-
-include::{generated}/validity/protos/vkGetRefreshCycleDurationGOOGLE.txt[]
---
-
-[open,refpage='VkRefreshCycleDurationGOOGLE',desc='Structure containing the RC duration of a display',type='structs']
---
-The sname:VkRefreshCycleDurationGOOGLE structure is defined as:
-
-include::{generated}/api/structs/VkRefreshCycleDurationGOOGLE.txt[]
-
-  * pname:refreshDuration is the number of nanoseconds from the start of one
-    refresh cycle to the next.
-
-include::{generated}/validity/structs/VkRefreshCycleDurationGOOGLE.txt[]
---
-
-[NOTE]
-.Note
-====
-The rate at which an application renders and presents new images is known as
-the image present rate (IPR, aka frame rate).
-The inverse of IPR, or the duration between each image present, is the image
-present duration (IPD).
-In order to provide a smooth, stutter-free animation, an application will
-want its IPD to be a multiple of pname:refreshDuration.
-For example, if a display has a 60Hz refresh rate, pname:refreshDuration
-will be a value in nanoseconds that is approximately equal to 16.67ms.
-In such a case, an application will want an IPD of 16.67ms (1X multiplier of
-pname:refreshDuration), or 33.33ms (2X multiplier of pname:refreshDuration),
-or 50.0ms (3X multiplier of pname:refreshDuration), etc.
-
-In order to determine a target IPD for a display (i.e. a multiple of
-pname:refreshDuration), an application needs to determine when its images
-are actually displayed.
-Let's say that an application has an initial target IPD of 16.67ms (1X
-multiplier of pname:refreshDuration).
-It will therefore position the geometry of a new image 16.67ms later than
-the previous image.
-Let's say that this application is running on slower hardware, so that it
-actually takes 20ms to render each new image.
-This will create visual anomalies, because the images will not be displayed
-to the user every 16.67ms, nor every 20ms.
-In this case, it is better for the application to adjust its target IPD to
-33.33ms (i.e. a 2X multiplier of pname:refreshDuration), and tell the
-presentation engine to not present images any sooner than every 33.33ms.
-This will allow the geometry to be correctly positioned for each presentable
-image.
-
-Adjustments to an application's IPD may be needed because different views of
-an application's geometry can take different amounts of time to render.
-For example, looking at the sky may take less time to render than looking at
-multiple, complex items in a room.
-In general, it is good to not frequently change IPD, as that can cause
-visual anomalies.
-Adjustments to a larger IPD because of late images should happen quickly,
-but adjustments to a smaller IPD should only happen if the
-pname:actualPresentTime and pname:earliestPresentTime members of the
-slink:VkPastPresentationTimingGOOGLE structure are consistently different,
-and if pname:presentMargin is consistently large, over multiple images.
-====
-
-[open,refpage='vkGetPastPresentationTimingGOOGLE',desc='Obtain timing of a previously-presented image',type='protos']
---
-The implementation will maintain a limited amount of history of timing
-information about previous presents.
-Because of the asynchronous nature of the presentation engine, the timing
-information for a given flink:vkQueuePresentKHR command will become
-available some time later.
-These time values can be asynchronously queried, and will be returned if
-available.
-All time values are in nanoseconds, relative to a monotonically-increasing
-clock (e.g. `CLOCK_MONOTONIC` (see clock_gettime(2)) on Android and Linux).
-
-To asynchronously query the presentation engine, for newly-available timing
-information about one or more previous presents to a given swapchain, call:
-
-include::{generated}/api/protos/vkGetPastPresentationTimingGOOGLE.txt[]
-
-  * pname:device is the device associated with pname:swapchain.
-  * pname:swapchain is the swapchain to obtain presentation timing
-    information duration for.
-  * pname:pPresentationTimingCount is a pointer to an integer related to the
-    number of sname:VkPastPresentationTimingGOOGLE structures to query, as
-    described below.
-  * pname:pPresentationTimings is either `NULL` or a pointer to an array of
-    sname:VkPastPresentationTimingGOOGLE structures.
-
-If pname:pPresentationTimings is `NULL`, then the number of newly-available
-timing records for the given pname:swapchain is returned in
-pname:pPresentationTimingCount.
-Otherwise, pname:pPresentationTimingCount must: point to a variable set by
-the user to the number of elements in the pname:pPresentationTimings array,
-and on return the variable is overwritten with the number of structures
-actually written to pname:pPresentationTimings.
-If the value of pname:pPresentationTimingCount is less than the number of
-newly-available timing records, at most pname:pPresentationTimingCount
-structures will be written, and ename:VK_INCOMPLETE will be returned instead
-of ename:VK_SUCCESS, to indicate that not all the available timing records
-were returned.
-
-include::{generated}/validity/protos/vkGetPastPresentationTimingGOOGLE.txt[]
---
-
-[open,refpage='VkPastPresentationTimingGOOGLE',desc='Structure containing timing information about a previously-presented image',type='structs']
---
-The sname:VkPastPresentationTimingGOOGLE structure is defined as:
-
-include::{generated}/api/structs/VkPastPresentationTimingGOOGLE.txt[]
-
-  * pname:presentID is an application-provided value that was given to a
-    previous fname:vkQueuePresentKHR command via
-    slink:VkPresentTimeGOOGLE::pname:presentID (see below).
-    It can: be used to uniquely identify a previous present with the
-    flink:vkQueuePresentKHR command.
-  * pname:desiredPresentTime is an application-provided value that was given
-    to a previous flink:vkQueuePresentKHR command via
-    slink:VkPresentTimeGOOGLE::pname:desiredPresentTime.
-    If non-zero, it was used by the application to indicate that an image
-    not be presented any sooner than pname:desiredPresentTime.
-  * pname:actualPresentTime is the time when the image of the
-    pname:swapchain was actually displayed.
-  * pname:earliestPresentTime is the time when the image of the
-    pname:swapchain could have been displayed.
-    This may: differ from pname:actualPresentTime if the application
-    requested that the image be presented no sooner than
-    slink:VkPresentTimeGOOGLE::pname:desiredPresentTime.
-  * pname:presentMargin is an indication of how early the
-    fname:vkQueuePresentKHR command was processed compared to how soon it
-    needed to be processed, and still be presented at
-    pname:earliestPresentTime.
-
-The results for a given pname:swapchain and pname:presentID are only
-returned once from fname:vkGetPastPresentationTimingGOOGLE.
-
-The application can: use the sname:VkPastPresentationTimingGOOGLE values to
-occasionally adjust its timing.
-For example, if pname:actualPresentTime is later than expected (e.g. one
-pname:refreshDuration late), the application may increase its target IPD to
-a higher multiple of pname:refreshDuration (e.g. decrease its frame rate
-from 60Hz to 30Hz).
-If pname:actualPresentTime and pname:earliestPresentTime are consistently
-different, and if pname:presentMargin is consistently large enough, the
-application may decrease its target IPD to a smaller multiple of
-pname:refreshDuration (e.g. increase its frame rate from 30Hz to 60Hz).
-If pname:actualPresentTime and pname:earliestPresentTime are same, and if
-pname:presentMargin is consistently high, the application may delay the
-start of its input-render-present loop in order to decrease the latency
-between user input and the corresponding present (always leaving some margin
-in case a new image takes longer to render than the previous image).
-An application that desires its target IPD to always be the same as
-pname:refreshDuration, can also adjust features until
-pname:actualPresentTime is never late and pname:presentMargin is
-satisfactory.
---
-
-The full `apiext:VK_GOOGLE_display_timing` extension semantics are described
-for swapchains created with ename:VK_PRESENT_MODE_FIFO_KHR.
-For example, non-zero values of
-sname:VkPresentTimeGOOGLE::pname:desiredPresentTime must: be honored, and
-fname:vkGetPastPresentationTimingGOOGLE should: return a
-sname:VkPastPresentationTimingGOOGLE structure with valid values for all
-images presented with fname:vkQueuePresentKHR.
-The semantics for other present modes are as follows:
-
-  * ename:VK_PRESENT_MODE_IMMEDIATE_KHR.
-    The presentation engine may: ignore non-zero values of
-    sname:VkPresentTimeGOOGLE::pname:desiredPresentTime in favor of
-    presenting immediately.
-    The value of
-    sname:VkPastPresentationTimingGOOGLE::pname:earliestPresentTime must: be
-    the same as
-    sname:VkPastPresentationTimingGOOGLE::pname:actualPresentTime, which
-    should: be when the presentation engine displayed the image.
-  * ename:VK_PRESENT_MODE_MAILBOX_KHR.
-    The intention of using this present mode with this extension is to
-    handle cases where an image is presented late, and the next image is
-    presented soon enough to replace it at the next vertical blanking
-    period.
-    For images that are displayed to the user, the value of
-    sname:VkPastPresentationTimingGOOGLE::pname:actualPresentTime must: be
-    when the image was displayed.
-    For images that are not displayed to the user,
-    fname:vkGetPastPresentationTimingGOOGLE may: not return a
-    sname:VkPastPresentationTimingGOOGLE structure, or it may: return a
-    sname:VkPastPresentationTimingGOOGLE structure with the value of zero
-    for both sname:VkPastPresentationTimingGOOGLE::pname:actualPresentTime
-    and sname:VkPastPresentationTimingGOOGLE::pname:earliestPresentTime.
-    It is possible that an application can: submit images with
-    sname:VkPresentTimeGOOGLE::pname:desiredPresentTime values such that new
-    images may: not be displayed.
-    For example, if sname:VkPresentTimeGOOGLE::pname:desiredPresentTime is
-    far enough in the future that an image is not presented before
-    fname:vkQueuePresentKHR is called to present another image, the first
-    image will not be displayed to the user.
-    If the application continues to do that, the presentation may: not
-    display new images.
-  * ename:VK_PRESENT_MODE_FIFO_RELAXED_KHR.
-    For images that are presented in time to be displayed at the next
-    vertical blanking period, the semantics are identical as for
-    ename:VK_PRESENT_MODE_FIFO_RELAXED_KHR.
-    For images that are presented late, and are displayed after the start of
-    the vertical blanking period (i.e. with tearing), the values of
-    sname:VkPastPresentationTimingGOOGLE may: be treated as if the image was
-    displayed at the start of the vertical blanking period, or may: be
-    treated the same as for ename:VK_PRESENT_MODE_IMMEDIATE_KHR.
diff --git a/registry/vulkan/chapters/VK_INTEL_performance_query/queries.txt b/registry/vulkan/chapters/VK_INTEL_performance_query/queries.txt
deleted file mode 100644
index 1b750a8..0000000
--- a/registry/vulkan/chapters/VK_INTEL_performance_query/queries.txt
+++ /dev/null
@@ -1,380 +0,0 @@
-// Copyright (c) 2018-2020 Intel Corporation
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-ifdef::VK_INTEL_performance_query[]
-[[queries-performance-intel]]
-== Intel performance queries
-
-Intel performance queries allow an application to capture performance data
-for a set of commands.
-Performance queries are used in a similar way than other types of queries.
-A main difference with existing queries is that the resulting data should be
-handed over to a library capabable to produce human readable results rather
-than being read directly by an application.
-
-[open,refpage='vkInitializePerformanceApiINTEL',desc='Initialize a device for performance queries',type='protos']
---
-Prior to creating a performance query pool, initialize the device for
-performance queries with the call:
-
-include::{generated}/api/protos/vkInitializePerformanceApiINTEL.txt[]
-
-  * pname:device is the logical device used for the queries.
-  * pname:pInitializeInfo is a pointer to a
-    slink:VkInitializePerformanceApiInfoINTEL structure specifying
-    initialization parameters.
-
-include::{generated}/validity/protos/vkInitializePerformanceApiINTEL.txt[]
---
-
-[open,refpage='VkInitializePerformanceApiInfoINTEL',desc='Structure specifying parameters of initialize of the device',type='structs']
---
-The sname:VkInitializePerformanceApiInfoINTEL structure is defined as :
-
-include::{generated}/api/structs/VkInitializePerformanceApiInfoINTEL.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:pUserData is a pointer for application data.
-
-include::{generated}/validity/structs/VkInitializePerformanceApiInfoINTEL.txt[]
---
-
-[open,refpage='vkUninitializePerformanceApiINTEL',desc='Uninitialize a device for performance queries',type='protos']
---
-Once performance query operations have completed, uninitalize the device for
-performance queries with the call:
-
-include::{generated}/api/protos/vkUninitializePerformanceApiINTEL.txt[]
-
-  * pname:device is the logical device used for the queries.
-
-include::{generated}/validity/protos/vkUninitializePerformanceApiINTEL.txt[]
---
-
-[open,refpage='vkGetPerformanceParameterINTEL',desc='Query performance capabilities of the device',type='protos']
---
-Some performance query features of a device can be discovered with the call:
-
-include::{generated}/api/protos/vkGetPerformanceParameterINTEL.txt[]
-
-  * pname:device is the logical device to query.
-  * pname:parameter is the parameter to query.
-  * pname:pValue is a pointer to a slink:VkPerformanceValueINTEL structure
-    in which the type and value of the parameter are returned.
-
-include::{generated}/validity/protos/vkGetPerformanceParameterINTEL.txt[]
---
-
-[open,refpage='VkPerformanceParameterTypeINTEL',desc='Parameters that can be queried',type='enums']
---
-Possible values of flink:vkGetPerformanceParameterINTEL::pname:parameter,
-specifying a performance query feature, are:
-
-include::{generated}/api/enums/VkPerformanceParameterTypeINTEL.txt[]
-
-  * ename:VK_PERFORMANCE_PARAMETER_TYPE_HW_COUNTERS_SUPPORTED_INTEL has a
-    boolean result which tells whether hardware counters can be captured.
-  * ename:VK_PERFORMANCE_PARAMETER_TYPE_STREAM_MARKER_VALID_BITS_INTEL has a
-    32 bits integer result which tells how many bits can be written into the
-    sname:VkPerformanceValueINTEL value.
---
-
-[open,refpage='VkPerformanceValueINTEL',desc='Container for value and types of parameters that can be queried',type='structs']
---
-The sname:VkPerformanceValueINTEL structure is defined as:
-
-include::{generated}/api/structs/VkPerformanceValueINTEL.txt[]
-
-  * pname:type is a elink:VkPerformanceValueTypeINTEL value specifying the
-    type of the returned data.
-  * pname:data is a slink:VkPerformanceValueDataINTEL union specifying the
-    value of the returned data.
-
-include::{generated}/validity/structs/VkPerformanceValueINTEL.txt[]
---
-
-[open,refpage='VkPerformanceValueTypeINTEL',desc='Type of the parameters that can be queried',type='enums']
---
-Possible values of slink:VkPerformanceValueINTEL::pname:type, specifying the
-type of the data returned in slink:VkPerformanceValueINTEL::pname:data, are:
-
-  * ename:VK_PERFORMANCE_VALUE_TYPE_UINT32_INTEL specifies that unsigned
-    32-bit integer data is returned in pname:data.value32.
-  * ename:VK_PERFORMANCE_VALUE_TYPE_UINT64_INTEL specifies that unsigned
-    64-bit integer data is returned in pname:data.value64.
-  * ename:VK_PERFORMANCE_VALUE_TYPE_FLOAT_INTEL specifies that
-    floating-point data is returned in pname:data.valueFloat.
-  * ename:VK_PERFORMANCE_VALUE_TYPE_BOOL_INTEL specifies that
-    basetype:Bool32 data is returned in pname:data.valueBool.
-  * ename:VK_PERFORMANCE_VALUE_TYPE_STRING_INTEL specifies that a pointer to
-    a null-terminated UTF-8 string is returned in pname:data.valueString.
-    The pointer is valid for the lifetime of the pname:device parameter
-    passed to flink:vkGetPerformanceParameterINTEL.
-
-include::{generated}/api/enums/VkPerformanceValueTypeINTEL.txt[]
---
-
-[open,refpage='VkPerformanceValueDataINTEL',desc='Values returned for the parameters',type='structs']
---
-The sname:VkPerformanceValueDataINTEL union is defined as:
-
-include::{generated}/api/structs/VkPerformanceValueDataINTEL.txt[]
-
-  * pname:data.value32 represents 32-bit integer data.
-  * pname:data.value64 represents 64-bit integer data.
-  * pname:data.valueFloat represents floating-point data.
-  * pname:data.valueBool represents basetype:Bool32 data.
-  * pname:data.valueString represents a pointer to a null-terminated UTF-8
-    string.
-
-The correct member of the union is determined by the associated
-elink:VkPerformanceValueTypeINTEL value.
-
-include::{generated}/validity/structs/VkPerformanceValueDataINTEL.txt[]
---
-
-[open,refpage='VkQueryPoolPerformanceQueryCreateInfoINTEL',desc='Structure specifying parameters to create a pool of performance queries',type='structs',alias='VkQueryPoolCreateInfoINTEL']
---
-The sname:VkQueryPoolPerformanceQueryCreateInfoINTEL structure is defined
-as:
-
-include::{generated}/api/structs/VkQueryPoolPerformanceQueryCreateInfoINTEL.txt[]
-
-include::{generated}/api/structs/VkQueryPoolCreateInfoINTEL.txt[]
-
-To create a pool for Intel performance queries, set
-slink:VkQueryPoolCreateInfo::pname:queryType to
-ename:VK_QUERY_TYPE_PERFORMANCE_QUERY_INTEL and add a
-sname:VkQueryPoolPerformanceQueryCreateInfoINTEL structure to the
-pname:pNext chain of the slink:VkQueryPoolCreateInfo structure.
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:performanceCountersSampling describe how performance queries
-    should be captured.
-
-include::{generated}/validity/structs/VkQueryPoolPerformanceQueryCreateInfoINTEL.txt[]
---
-
-[open,refpage='VkQueryPoolSamplingModeINTEL',desc='Enum specifying how performance queries should be captured',type='enums']
---
-Possible values of
-slink:VkQueryPoolPerformanceQueryCreateInfoINTEL::pname:performanceCountersSampling
-are:
-
-include::{generated}/api/enums/VkQueryPoolSamplingModeINTEL.txt[]
-
-  * ename:VK_QUERY_POOL_SAMPLING_MODE_MANUAL_INTEL is the default mode in
-    which the application calls flink:vkCmdBeginQuery and
-    flink:vkCmdEndQuery to record performance data.
---
-
-[open,refpage='vkCmdSetPerformanceMarkerINTEL',desc='Markers',type='protos']
---
-To help associate query results with a particular point at which an
-application emitted commands, markers can be set into the command buffers
-with the call:
-
-include::{generated}/api/protos/vkCmdSetPerformanceMarkerINTEL.txt[]
-
-The last marker set onto a command buffer before the end of a query will be
-part of the query result.
-
-include::{generated}/validity/protos/vkCmdSetPerformanceMarkerINTEL.txt[]
---
-
-[open,refpage='VkPerformanceMarkerInfoINTEL',desc='Structure specifying performance markers',type='structs']
---
-The sname:VkPerformanceMarkerInfoINTEL structure is defined as:
-
-include::{generated}/api/structs/VkPerformanceMarkerInfoINTEL.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:marker is the marker value that will be recorded into the opaque
-    query results.
-
-include::{generated}/validity/structs/VkPerformanceMarkerInfoINTEL.txt[]
---
-
-[open,refpage='vkCmdSetPerformanceStreamMarkerINTEL',desc='Markers',type='protos']
---
-When monitoring the behavior of an application wihtin the dataset generated
-by the entire set of applications running on the system, it is useful to
-identify draw calls within a potentially huge amount of performance data.
-To do so, application can generate stream markers that will be used to trace
-back a particular draw call with a particular performance data item.
-
-include::{generated}/api/protos/vkCmdSetPerformanceStreamMarkerINTEL.txt[]
-
-include::{generated}/validity/protos/vkCmdSetPerformanceStreamMarkerINTEL.txt[]
---
-
-[open,refpage='VkPerformanceStreamMarkerInfoINTEL',desc='Structure specifying stream performance markers',type='structs']
---
-The sname:VkPerformanceStreamMarkerInfoINTEL structure is defined as:
-
-include::{generated}/api/structs/VkPerformanceStreamMarkerInfoINTEL.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:marker is the marker value that will be recorded into the reports
-    consumed by an external application.
-
-.Valid Usage
-****
-  * [[VUID-VkPerformanceStreamMarkerInfoINTEL-marker-02735]]
-    The value written by the application into pname:marker must: only used
-    the valid bits as reported by flink:vkGetPerformanceParameterINTEL with
-    the ename:VK_PERFORMANCE_PARAMETER_TYPE_STREAM_MARKER_VALID_BITS_INTEL
-****
-
-include::{generated}/validity/structs/VkPerformanceStreamMarkerInfoINTEL.txt[]
---
-
-[open,refpage='vkCmdSetPerformanceOverrideINTEL',desc='Performance override settings',type='protos']
---
-Some applications might want measure the effect of a set of commands with a
-different settings.
-It is possible to override a particular settings using :
-
-include::{generated}/api/protos/vkCmdSetPerformanceOverrideINTEL.txt[]
-
-  * pname:commandBuffer is the command buffer where the override takes
-    place.
-  * pname:pOverrideInfo is a pointer to a
-    slink:VkPerformanceOverrideInfoINTEL structure selecting the parameter
-    to override.
-
-.Valid Usage
-****
-  * [[VUID-vkCmdSetPerformanceOverrideINTEL-pOverrideInfo-02736]]
-    pname:pOverrideInfo must: not be used with a
-    elink:VkPerformanceOverrideTypeINTEL that is not reported available by
-    fname:vkGetPerformanceParameterINTEL
-****
-
-include::{generated}/validity/protos/vkCmdSetPerformanceOverrideINTEL.txt[]
---
-
-[open,refpage='VkPerformanceOverrideInfoINTEL',desc='Performance override information',type='structs']
---
-The sname:VkPerformanceOverrideInfoINTEL structure is defined as:
-
-include::{generated}/api/structs/VkPerformanceOverrideInfoINTEL.txt[]
-
-  * pname:type is the particular elink:VkPerformanceOverrideTypeINTEL to
-    set.
-  * pname:enable defines whether the override is enabled.
-  * pname:parameter is a potential required parameter for the override.
-
-include::{generated}/validity/structs/VkPerformanceOverrideInfoINTEL.txt[]
---
-
-[open,refpage='VkPerformanceOverrideTypeINTEL',desc='Performance override type',type='enums']
---
-Possible values of slink:VkPerformanceOverrideInfoINTEL::pname:type,
-specifying performance override types, are:
-
-include::{generated}/api/enums/VkPerformanceOverrideTypeINTEL.txt[]
-
-  * ename:VK_PERFORMANCE_OVERRIDE_TYPE_NULL_HARDWARE_INTEL turns all
-    rendering operations into noop.
-  * ename:VK_PERFORMANCE_OVERRIDE_TYPE_FLUSH_GPU_CACHES_INTEL stalls the
-    stream of commands until all previously emitted commands have completed
-    and all caches been flushed and invalidated.
---
-
-[open,refpage='VkPerformanceConfigurationINTEL',desc='Device configuration for performance queries',type='handles']
---
-Before submitting command buffers containing performance queries commands to
-a device queue, the application must acquire and set a performance query
-configuration.
-The configuration can be released once all command buffers containing
-performance query commands are not in a pending state.
-
-include::{generated}/api/handles/VkPerformanceConfigurationINTEL.txt[]
---
-
-[open,refpage='vkAcquirePerformanceConfigurationINTEL',desc='Acquire the performance query capability',type='protos']
---
-To acquire a device performance configuration, call:
-
-include::{generated}/api/protos/vkAcquirePerformanceConfigurationINTEL.txt[]
-
-  * pname:device is the logical device that the performance query commands
-    will be submitted to.
-  * pname:pAcquireInfo is a pointer to a
-    slink:VkPerformanceConfigurationAcquireInfoINTEL structure, specifying
-    the performance configuration to acquire.
-  * pname:pConfiguration is a pointer to a
-    sname:VkPerformanceConfigurationINTEL handle in which the resulting
-    configuration object is returned.
-
-include::{generated}/validity/protos/vkAcquirePerformanceConfigurationINTEL.txt[]
---
-
-[open,refpage='VkPerformanceConfigurationAcquireInfoINTEL',desc='Acquire a configuration to capture performance data',type='structs']
---
-The sname:VkPerformanceConfigurationAcquireInfoINTEL structure is defined
-as:
-
-include::{generated}/api/structs/VkPerformanceConfigurationAcquireInfoINTEL.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:type is one of the elink:VkPerformanceConfigurationTypeINTEL type
-    of performance configuration that will be acquired.
-
-include::{generated}/validity/structs/VkPerformanceConfigurationAcquireInfoINTEL.txt[]
---
-
-[open,refpage='VkPerformanceConfigurationTypeINTEL',desc='Type of performance configuration',type='enums']
---
-Possible values of
-slink:VkPerformanceConfigurationAcquireInfoINTEL::pname:type, specifying
-performance configuration types, are:
-
-include::{generated}/api/enums/VkPerformanceConfigurationTypeINTEL.txt[]
---
-
-[open,refpage='vkQueueSetPerformanceConfigurationINTEL',desc='Set a performance query',type='protos']
---
-To set a performance configuration, call:
-
-include::{generated}/api/protos/vkQueueSetPerformanceConfigurationINTEL.txt[]
-
-  * pname:queue is the queue on which the configuration will be used.
-  * pname:configuration is the configuration to use.
-
-include::{generated}/validity/protos/vkQueueSetPerformanceConfigurationINTEL.txt[]
---
-
-[open,refpage='vkReleasePerformanceConfigurationINTEL',desc='Release a configuration to capture performance data',type='protos']
---
-To release a device performance configuration, call:
-
-include::{generated}/api/protos/vkReleasePerformanceConfigurationINTEL.txt[]
-
-  * pname:device is the device associated to the configuration object to
-    release.
-  * pname:configuration is the configuration object to release.
-
-.Valid Usage
-****
-  * [[VUID-vkReleasePerformanceConfigurationINTEL-configuration-02737]]
-    pname:configuration must: not be released before all command buffers
-    submitted while the configuration was set are in
-    <<commandbuffers-lifecycle, pending state>>
-****
-
-include::{generated}/validity/protos/vkReleasePerformanceConfigurationINTEL.txt[]
---
-endif::VK_INTEL_performance_query[]
diff --git a/registry/vulkan/chapters/VK_KHR_android_surface/platformCreateSurface_android.txt b/registry/vulkan/chapters/VK_KHR_android_surface/platformCreateSurface_android.txt
deleted file mode 100644
index 33783ef..0000000
--- a/registry/vulkan/chapters/VK_KHR_android_surface/platformCreateSurface_android.txt
+++ /dev/null
@@ -1,91 +0,0 @@
-// Copyright 2014-2021 The Khronos Group, Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-[[platformCreateSurface_android,platformCreateSurface_android]]
-=== Android Platform
-
-[open,refpage='vkCreateAndroidSurfaceKHR',desc='Create a slink:VkSurfaceKHR object for an Android native window',type='protos']
---
-To create a sname:VkSurfaceKHR object for an Android native window, call:
-
-include::{generated}/api/protos/vkCreateAndroidSurfaceKHR.txt[]
-
-  * pname:instance is the instance to associate the surface with.
-  * pname:pCreateInfo is a pointer to a sname:VkAndroidSurfaceCreateInfoKHR
-    structure containing parameters affecting the creation of the surface
-    object.
-  * pname:pAllocator is the allocator used for host memory allocated for the
-    surface object when there is no more specific allocator available (see
-    <<memory-allocation,Memory Allocation>>).
-  * pname:pSurface is a pointer to a slink:VkSurfaceKHR handle in which the
-    created surface object is returned.
-
-During the lifetime of a surface created using a particular
-basetype:ANativeWindow handle any attempts to create another surface for the
-same basetype:ANativeWindow and any attempts to connect to the same
-basetype:ANativeWindow through other platform mechanisms will fail.
-
-[NOTE]
-.Note
-====
-In particular, only one sname:VkSurfaceKHR can: exist at a time for a given
-window.
-Similarly, a native window cannot: be used by both a sname:VkSurfaceKHR and
-code:EGLSurface simultaneously.
-====
-
-If successful, fname:vkCreateAndroidSurfaceKHR increments the
-basetype:ANativeWindow's reference count, and fname:vkDestroySurfaceKHR will
-decrement it.
-
-On Android, when a swapchain's pname:imageExtent does not match the
-surface's pname:currentExtent, the presentable images will be scaled to the
-surface's dimensions during presentation.
-pname:minImageExtent is [eq]#(1,1)#, and pname:maxImageExtent is the maximum
-image size supported by the consumer.
-For the system compositor, pname:currentExtent is the window size (i.e. the
-consumer's preferred size).
-
-include::{generated}/validity/protos/vkCreateAndroidSurfaceKHR.txt[]
---
-
-[open,refpage='VkAndroidSurfaceCreateInfoKHR',desc='Structure specifying parameters of a newly created Android surface object',type='structs']
---
-The sname:VkAndroidSurfaceCreateInfoKHR structure is defined as:
-
-include::{generated}/api/structs/VkAndroidSurfaceCreateInfoKHR.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:flags is reserved for future use.
-  * pname:window is a pointer to the basetype:ANativeWindow to associate the
-    surface with.
-
-.Valid Usage
-****
-  * [[VUID-VkAndroidSurfaceCreateInfoKHR-window-01248]]
-    pname:window must: point to a valid Android basetype:ANativeWindow
-****
-
-include::{generated}/validity/structs/VkAndroidSurfaceCreateInfoKHR.txt[]
---
-
-[open,refpage='ANativeWindow',desc='Android native window type',type='basetypes']
---
-To remove an unnecessary compile-time dependency, an incomplete type
-definition of basetype:ANativeWindow is provided in the Vulkan headers:
-
-include::{generated}/api/basetypes/ANativeWindow.txt[]
-
-The actual basetype:ANativeWindow type is defined in Android NDK headers.
---
-
-[open,refpage='VkAndroidSurfaceCreateFlagsKHR',desc='Reserved for future use',type='flags']
---
-include::{generated}/api/flags/VkAndroidSurfaceCreateFlagsKHR.txt[]
-
-tname:VkAndroidSurfaceCreateFlagsKHR is a bitmask type for setting a mask,
-but is currently reserved for future use.
---
diff --git a/registry/vulkan/chapters/VK_KHR_android_surface/platformQuerySupport_android.txt b/registry/vulkan/chapters/VK_KHR_android_surface/platformQuerySupport_android.txt
deleted file mode 100644
index 02fda23..0000000
--- a/registry/vulkan/chapters/VK_KHR_android_surface/platformQuerySupport_android.txt
+++ /dev/null
@@ -1,11 +0,0 @@
-// Copyright 2018-2021 The Khronos Group, Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-[[platformQuerySupport_android,platformQuerySupport_android]]
-=== Android Platform
-
-On Android, all physical devices and queue families must: be capable of
-presentation with any native window.
-As a result there is no Android-specific query for these capabilities.
-
diff --git a/registry/vulkan/chapters/VK_KHR_deferred_host_operations/deferred_host_operations.txt b/registry/vulkan/chapters/VK_KHR_deferred_host_operations/deferred_host_operations.txt
deleted file mode 100644
index ba20ec6..0000000
--- a/registry/vulkan/chapters/VK_KHR_deferred_host_operations/deferred_host_operations.txt
+++ /dev/null
@@ -1,270 +0,0 @@
-// Copyright 2014-2021 The Khronos Group, Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-[[deferred-host-operations]]
-= Deferred Host Operations
-
-Certain Vulkan commands are inherently expensive for the host CPU to
-execute.
-It is often desirable to offload such work onto background threads, and to
-parallelize the work across multiple CPUs.
-The concept of _deferred operations_ allows applications and drivers to
-coordinate the execution of expensive host commands using an
-application-managed thread pool.
-
-The `apiext:VK_KHR_deferred_host_operations` extension defines the
-infrastructure and usage patterns for _deferrable commands_, but does not
-specify any commands as deferrable.
-This is left to additional dependant extensions.
-Commands must: not be deferred unless the deferral is specifically allowed
-by another extension which depends on
-`apiext:VK_KHR_deferred_host_operations`.
-This specification will refer to such extensions as _deferral extensions_.
-
-
-[[deferred-host-operations-requesting]]
-== Requesting Deferral
-
-When an application requests an operation deferral, the implementation may:
-defer the operation.
-When deferral is requested and the implementation defers any operation, the
-implementation must: return ename:VK_OPERATION_DEFERRED_KHR as the success
-code if no errors occurred.
-When deferral is requested, the implementation should: defer the operation
-when the workload is significant, however if the implementation chooses not
-to defer any of the requested operations and instead executes all of them
-immediately, the implementation must: return
-ename:VK_OPERATION_NOT_DEFERRED_KHR as the success code if no errors
-occurred.
-
-A deferred operation is created _complete_ with an initial result value of
-ename:VK_SUCCESS.
-The deferred operation becomes _pending_ when an operation has been
-successfully deferred with that deferred operation object.
-
-A deferred operation is considered pending until the deferred operation
-completes.
-A pending deferred operation becomes _complete_ when it has been fully
-executed by one or more threads.
-Pending deferred operations will never complete until they are _joined_ by
-an application thread, using flink:vkDeferredOperationJoinKHR.
-Applications can: join multiple threads to the same deferred operation,
-enabling concurrent execution of subtasks within that operation.
-
-The application can: query the status of a slink:VkDeferredOperationKHR
-using the flink:vkGetDeferredOperationMaxConcurrencyKHR or
-flink:vkGetDeferredOperationResultKHR commands.
-
-Parameters to the command requesting a deferred operation may: be accessed
-at any time until the deferred operation enters the pending state.
-While a deferred operation is pending:
-
-  * Externally synchronized parameters must: not be accessed.
-  * Pointer parameters must: not be modified (e.g. reallocated/freed).
-  * The contents of pointer parameters which may: be read by the command
-    must: not be modified.
-  * The contents of pointer parameters which may: be written by the command
-    must: not be read.
-  * Vulkan object parameters must: not be passed as externally synchronized
-    parameters to any other command.
-
-When the deferred operation is complete, the application should: call
-flink:vkGetDeferredOperationResultKHR to obtain the elink:VkResult
-indicating success or failure of the operation.
-The elink:VkResult value returned will be one of the values that the command
-requesting the deferred operation is able to return.
-Writes to output parameters of the requesting command will happen-before the
-deferred operation is complete.
-
-
-== Deferred Host Operations API
-
-[open,refpage='VkDeferredOperationKHR',desc='A deferred operation',type='handles']
---
-The sname:VkDeferredOperationKHR handle is defined as:
-
-include::{generated}/api/handles/VkDeferredOperationKHR.txt[]
-
-This handle refers to a tracking structure which manages the execution state
-for a deferred command.
---
-
-[open,refpage='vkCreateDeferredOperationKHR',desc='Create a deferred operation handle',type='protos']
---
-:refpage: vkCreateDeferredOperationKHR
-
-To construct the tracking object for a deferred command, call:
-
-include::{generated}/api/protos/vkCreateDeferredOperationKHR.txt[]
-
-  * pname:device is the device which owns pname:operation.
-  * pname:pAllocator controls host memory allocation as described in the
-    <<memory-allocation,Memory Allocation>> chapter.
-  * pname:pDeferredOperation is a pointer to a handle in which the created
-    slink:VkDeferredOperationKHR is returned.
-
-include::{generated}/validity/protos/vkCreateDeferredOperationKHR.txt[]
---
-
-[open,refpage='vkDeferredOperationJoinKHR',desc='Assign a thread to a deferred operation',type='protos']
---
-:refpage: vkDeferredOperationJoinKHR
-
-To assign a thread to a deferred operation, call:
-
-include::{generated}/api/protos/vkDeferredOperationJoinKHR.txt[]
-
-  * pname:device is the device which owns pname:operation.
-  * pname:operation is the deferred operation that the calling thread should
-    work on.
-
-The fname:vkDeferredOperationJoinKHR command will execute a portion of the
-deferred operation on the calling thread.
-
-The return value will be one of the following:
-
-  * A return value of ename:VK_SUCCESS indicates that pname:operation is
-    complete.
-    The application should: use flink:vkGetDeferredOperationResultKHR to
-    retrieve the result of pname:operation.
-  * A return value of ename:VK_THREAD_DONE_KHR indicates that the deferred
-    operation is not complete, but there is no work remaining to assign to
-    threads.
-    Future calls to flink:vkDeferredOperationJoinKHR are not necessary and
-    will simply harm performance.
-    This situation may: occur when other threads executing
-    flink:vkDeferredOperationJoinKHR are about to complete pname:operation,
-    and the implementation is unable to partition the workload any further.
-  * A return value of ename:VK_THREAD_IDLE_KHR indicates that the deferred
-    operation is not complete, and there is no work for the thread to do at
-    the time of the call.
-    This situation may: occur if the operation encounters a temporary
-    reduction in parallelism.
-    By returning ename:VK_THREAD_IDLE_KHR, the implementation is signaling
-    that it expects that more opportunities for parallelism will emerge as
-    execution progresses, and that future calls to
-    flink:vkDeferredOperationJoinKHR can: be beneficial.
-    In the meantime, the application can: perform other work on the calling
-    thread.
-
-Implementations must: guarantee forward progress by enforcing the following
-invariants:
-
-  1. If only one thread has invoked flink:vkDeferredOperationJoinKHR on a
-     given operation, that thread must: execute the operation to completion
-     and return ename:VK_SUCCESS.
-  2. If multiple threads have concurrently invoked
-     flink:vkDeferredOperationJoinKHR on the same operation, then at least
-     one of them must: complete the operation and return ename:VK_SUCCESS.
-
-include::{generated}/validity/protos/vkDeferredOperationJoinKHR.txt[]
---
-
-[open,refpage='vkDestroyDeferredOperationKHR',desc='Destroy a deferred operation handle',type='protos']
---
-:refpage: vkDestroyDeferredOperationKHR
-
-When a deferred operation is completed, the application can: destroy the
-tracking object by calling:
-
-include::{generated}/api/protos/vkDestroyDeferredOperationKHR.txt[]
-
-  * pname:device is the device which owns pname:operation.
-  * pname:operation is the completed operation to be destroyed.
-  * pname:pAllocator controls host memory allocation as described in the
-    <<memory-allocation,Memory Allocation>> chapter.
-
-.Valid Usage
-****
-  * [[VUID-vkDestroyDeferredOperationKHR-operation-03434]]
-    If sname:VkAllocationCallbacks were provided when pname:operation was
-    created, a compatible set of callbacks must: be provided here
-  * [[VUID-vkDestroyDeferredOperationKHR-operation-03435]]
-    If no sname:VkAllocationCallbacks were provided when pname:operation was
-    created, pname:pAllocator must: be `NULL`
-  * [[VUID-vkDestroyDeferredOperationKHR-operation-03436]]
-    pname:operation must: be completed
-****
-include::{generated}/validity/protos/vkDestroyDeferredOperationKHR.txt[]
---
-
-[open,refpage='vkGetDeferredOperationMaxConcurrencyKHR',desc='Query the maximum concurrency on a deferred operation',type='protos']
---
-:refpage: vkGetDeferredOperationMaxConcurrencyKHR
-
-To query the number of additional threads that can usefully be joined to a
-deferred operation, call:
-
-include::{generated}/api/protos/vkGetDeferredOperationMaxConcurrencyKHR.txt[]
-
-  * pname:device is the device which owns pname:operation.
-  * pname:operation is the deferred operation to be queried.
-
-The returned value is the maximum number of threads that can usefully
-execute a deferred operation concurrently, reported for the state of the
-deferred operation at the point this command is called.
-This value is intended to be used to better schedule work onto available
-threads.
-Applications can: join any number of threads to the deferred operation and
-expect it to eventually complete, though excessive joins may: return
-ename:VK_THREAD_DONE_KHR immediately, performing no useful work.
-
-If pname:operation is complete,
-fname:vkGetDeferredOperationMaxConcurrencyKHR returns zero.
-
-If pname:operation is currently joined to any threads, the value returned by
-this command may: immediately be out of date.
-
-If pname:operation is pending, implementations must: not return zero unless
-at least one thread is currently executing flink:vkDeferredOperationJoinKHR
-on pname:operation.
-If there are such threads, the implementation should: return an estimate of
-the number of additional threads which it could profitably use.
-
-Implementations may: return [eq]#2^32^-1# to indicate that the maximum
-concurrency is unknown and cannot be easily derived.
-Implementations may: return values larger than the maximum concurrency
-available on the host CPU.
-In these situations, an application should: clamp the return value rather
-than oversubscribing the machine.
-
-[NOTE]
-.Note
-====
-The recommended usage pattern for applications is to query this value once,
-after deferral, and schedule no more than the specified number of threads to
-join the operation.
-Each time a joined thread receives ename:VK_THREAD_IDLE_KHR, the application
-should schedule an additional join at some point in the future, but is not
-required to do so.
-====
-
-include::{generated}/validity/protos/vkGetDeferredOperationMaxConcurrencyKHR.txt[]
---
-
-[open,refpage='vkGetDeferredOperationResultKHR',desc='Query the result of a deferred operation',type='protos']
---
-:refpage: vkGetDeferredOperationResultKHR
-
-The fname:vkGetDeferredOperationResultKHR function is defined as:
-
-include::{generated}/api/protos/vkGetDeferredOperationResultKHR.txt[]
-
-  * pname:device is the device which owns pname:operation.
-  * pname:operation is the operation whose deferred result is being queried.
-
-If no command has been deferred on pname:operation,
-fname:vkGetDeferredOperationResultKHR returns ename:VK_SUCCESS.
-
-If the deferred operation is pending, fname:vkGetDeferredOperationResultKHR
-returns ename:VK_NOT_READY.
-
-If the deferred operation is complete, it returns the appropriate return
-value from the original command.
-This value must: be one of the elink:VkResult values which could have been
-returned by the original command if the operation had not been deferred.
-
-include::{generated}/validity/protos/vkGetDeferredOperationResultKHR.txt[]
---
-
diff --git a/registry/vulkan/chapters/VK_KHR_display/display.txt b/registry/vulkan/chapters/VK_KHR_display/display.txt
deleted file mode 100644
index ad9433c..0000000
--- a/registry/vulkan/chapters/VK_KHR_display/display.txt
+++ /dev/null
@@ -1,740 +0,0 @@
-// Copyright 2014-2021 The Khronos Group, Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-[[display,display]]
-== Presenting Directly to Display Devices
-
-In some environments applications can: also present Vulkan rendering
-directly to display devices without using an intermediate windowing system.
-This can: be useful for embedded applications, or implementing the
-rendering/presentation backend of a windowing system using Vulkan.
-The `VK_KHR_display` extension provides the functionality necessary to
-enumerate display devices and create sname:VkSurfaceKHR objects that target
-displays.
-
-
-=== Display Enumeration
-
-[open,refpage='VkDisplayKHR',desc='Opaque handle to a display object',type='handles']
---
-Displays are represented by sname:VkDisplayKHR handles:
-
-include::{generated}/api/handles/VkDisplayKHR.txt[]
---
-
-[open,refpage='vkGetPhysicalDeviceDisplayPropertiesKHR',desc='Query information about the available displays',type='protos']
---
-Various functions are provided for enumerating the available display devices
-present on a Vulkan physical device.
-To query information about the available displays, call:
-
-include::{generated}/api/protos/vkGetPhysicalDeviceDisplayPropertiesKHR.txt[]
-
-  * pname:physicalDevice is a physical device.
-  * pname:pPropertyCount is a pointer to an integer related to the number of
-    display devices available or queried, as described below.
-  * pname:pProperties is either `NULL` or a pointer to an array of
-    sname:VkDisplayPropertiesKHR structures.
-
-If pname:pProperties is `NULL`, then the number of display devices available
-for pname:physicalDevice is returned in pname:pPropertyCount.
-Otherwise, pname:pPropertyCount must: point to a variable set by the user to
-the number of elements in the pname:pProperties array, and on return the
-variable is overwritten with the number of structures actually written to
-pname:pProperties.
-If the value of pname:pPropertyCount is less than the number of display
-devices for pname:physicalDevice, at most pname:pPropertyCount structures
-will be written, and ename:VK_INCOMPLETE will be returned instead of
-ename:VK_SUCCESS, to indicate that not all the available properties were
-returned.
-
-include::{generated}/validity/protos/vkGetPhysicalDeviceDisplayPropertiesKHR.txt[]
---
-
-[open,refpage='VkDisplayPropertiesKHR',desc='Structure describing an available display device',type='structs']
---
-The sname:VkDisplayPropertiesKHR structure is defined as:
-
-include::{generated}/api/structs/VkDisplayPropertiesKHR.txt[]
-
-  * pname:display is a handle that is used to refer to the display described
-    here.
-    This handle will be valid for the lifetime of the Vulkan instance.
-  * pname:displayName is `NULL` or a pointer to a null-terminated UTF-8
-    string containing the name of the display.
-    Generally, this will be the name provided by the display's EDID.
-    If `NULL`, no suitable name is available.
-    If not `NULL`, the string pointed to must: remain accessible and
-    unmodified as long as pname:display is valid.
-  * pname:physicalDimensions describes the physical width and height of the
-    visible portion of the display, in millimeters.
-  * pname:physicalResolution describes the physical, native, or preferred
-    resolution of the display.
-
-[NOTE]
-.Note
-====
-For devices which have no natural value to return here, implementations
-should: return the maximum resolution supported.
-====
-
-  * pname:supportedTransforms is a bitmask of
-    elink:VkSurfaceTransformFlagBitsKHR describing which transforms are
-    supported by this display.
-  * pname:planeReorderPossible tells whether the planes on this display can:
-    have their z order changed.
-    If this is ename:VK_TRUE, the application can: re-arrange the planes on
-    this display in any order relative to each other.
-  * pname:persistentContent tells whether the display supports
-    self-refresh/internal buffering.
-    If this is true, the application can: submit persistent present
-    operations on swapchains created against this display.
-
-[NOTE]
-.Note
-====
-Persistent presents may: have higher latency, and may: use less power when
-the screen content is updated infrequently, or when only a portion of the
-screen needs to be updated in most frames.
-====
-
-include::{generated}/validity/structs/VkDisplayPropertiesKHR.txt[]
---
-
-ifdef::VK_KHR_get_display_properties2[]
-[open,refpage='vkGetPhysicalDeviceDisplayProperties2KHR',desc='Query information about the available displays',type='protos']
---
-To query information about the available displays, call:
-
-include::{generated}/api/protos/vkGetPhysicalDeviceDisplayProperties2KHR.txt[]
-
-  * pname:physicalDevice is a physical device.
-  * pname:pPropertyCount is a pointer to an integer related to the number of
-    display devices available or queried, as described below.
-  * pname:pProperties is either `NULL` or a pointer to an array of
-    sname:VkDisplayProperties2KHR structures.
-
-fname:vkGetPhysicalDeviceDisplayProperties2KHR behaves similarly to
-flink:vkGetPhysicalDeviceDisplayPropertiesKHR, with the ability to return
-extended information via chained output structures.
-
-include::{generated}/validity/protos/vkGetPhysicalDeviceDisplayProperties2KHR.txt[]
---
-
-[open,refpage='VkDisplayProperties2KHR',desc='Structure describing an available display device',type='structs']
---
-The sname:VkDisplayProperties2KHR structure is defined as:
-
-include::{generated}/api/structs/VkDisplayProperties2KHR.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:displayProperties is a slink:VkDisplayPropertiesKHR structure.
-
-include::{generated}/validity/structs/VkDisplayProperties2KHR.txt[]
---
-endif::VK_KHR_get_display_properties2[]
-
-ifdef::VK_EXT_direct_mode_display[]
-include::{chapters}/VK_EXT_direct_mode_display/acquire_release_displays.txt[]
-endif::VK_EXT_direct_mode_display[]
-
-
-==== Display Planes
-
-[open,refpage='vkGetPhysicalDeviceDisplayPlanePropertiesKHR',desc='Query the plane properties',type='protos']
---
-Images are presented to individual planes on a display.
-Devices must: support at least one plane on each display.
-Planes can: be stacked and blended to composite multiple images on one
-display.
-Devices may: support only a fixed stacking order and fixed mapping between
-planes and displays, or they may: allow arbitrary application specified
-stacking orders and mappings between planes and displays.
-To query the properties of device display planes, call:
-
-include::{generated}/api/protos/vkGetPhysicalDeviceDisplayPlanePropertiesKHR.txt[]
-
-  * pname:physicalDevice is a physical device.
-  * pname:pPropertyCount is a pointer to an integer related to the number of
-    display planes available or queried, as described below.
-  * pname:pProperties is either `NULL` or a pointer to an array of
-    sname:VkDisplayPlanePropertiesKHR structures.
-
-If pname:pProperties is `NULL`, then the number of display planes available
-for pname:physicalDevice is returned in pname:pPropertyCount.
-Otherwise, pname:pPropertyCount must: point to a variable set by the user to
-the number of elements in the pname:pProperties array, and on return the
-variable is overwritten with the number of structures actually written to
-pname:pProperties.
-If the value of pname:pPropertyCount is less than the number of display
-planes for pname:physicalDevice, at most pname:pPropertyCount structures
-will be written.
-
-include::{generated}/validity/protos/vkGetPhysicalDeviceDisplayPlanePropertiesKHR.txt[]
---
-
-[open,refpage='VkDisplayPlanePropertiesKHR',desc='Structure describing display plane properties',type='structs']
---
-The sname:VkDisplayPlanePropertiesKHR structure is defined as:
-
-include::{generated}/api/structs/VkDisplayPlanePropertiesKHR.txt[]
-
-  * pname:currentDisplay is the handle of the display the plane is currently
-    associated with.
-    If the plane is not currently attached to any displays, this will be
-    dlink:VK_NULL_HANDLE.
-  * pname:currentStackIndex is the current z-order of the plane.
-    This will be between 0 and the value returned by
-    fname:vkGetPhysicalDeviceDisplayPlanePropertiesKHR in
-    pname:pPropertyCount.
-
-include::{generated}/validity/structs/VkDisplayPlanePropertiesKHR.txt[]
---
-
-ifdef::VK_KHR_get_display_properties2[]
-[open,refpage='vkGetPhysicalDeviceDisplayPlaneProperties2KHR',desc='Query information about the available display planes.',type='protos']
---
-To query the properties of a device's display planes, call:
-
-include::{generated}/api/protos/vkGetPhysicalDeviceDisplayPlaneProperties2KHR.txt[]
-
-  * pname:physicalDevice is a physical device.
-  * pname:pPropertyCount is a pointer to an integer related to the number of
-    display planes available or queried, as described below.
-  * pname:pProperties is either `NULL` or a pointer to an array of
-    sname:VkDisplayPlaneProperties2KHR structures.
-
-fname:vkGetPhysicalDeviceDisplayPlaneProperties2KHR behaves similarly to
-flink:vkGetPhysicalDeviceDisplayPlanePropertiesKHR, with the ability to
-return extended information via chained output structures.
-
-include::{generated}/validity/protos/vkGetPhysicalDeviceDisplayPlaneProperties2KHR.txt[]
---
-
-[open,refpage='VkDisplayPlaneProperties2KHR',desc='Structure describing an available display plane',type='structs']
---
-The sname:VkDisplayPlaneProperties2KHR structure is defined as:
-
-include::{generated}/api/structs/VkDisplayPlaneProperties2KHR.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:displayPlaneProperties is a slink:VkDisplayPlanePropertiesKHR
-    structure.
-
-include::{generated}/validity/structs/VkDisplayPlaneProperties2KHR.txt[]
---
-endif::VK_KHR_get_display_properties2[]
-
-[open,refpage='vkGetDisplayPlaneSupportedDisplaysKHR',desc='Query the list of displays a plane supports',type='protos']
---
-To determine which displays a plane is usable with, call
-
-include::{generated}/api/protos/vkGetDisplayPlaneSupportedDisplaysKHR.txt[]
-
-  * pname:physicalDevice is a physical device.
-  * pname:planeIndex is the plane which the application wishes to use, and
-    must: be in the range [eq]#[0, physical device plane count - 1]#.
-  * pname:pDisplayCount is a pointer to an integer related to the number of
-    displays available or queried, as described below.
-  * pname:pDisplays is either `NULL` or a pointer to an array of
-    sname:VkDisplayKHR handles.
-
-If pname:pDisplays is `NULL`, then the number of displays usable with the
-specified pname:planeIndex for pname:physicalDevice is returned in
-pname:pDisplayCount.
-Otherwise, pname:pDisplayCount must: point to a variable set by the user to
-the number of elements in the pname:pDisplays array, and on return the
-variable is overwritten with the number of handles actually written to
-pname:pDisplays.
-If the value of pname:pDisplayCount is less than the number of usable
-display-plane pairs for pname:physicalDevice, at most pname:pDisplayCount
-handles will be written, and ename:VK_INCOMPLETE will be returned instead of
-ename:VK_SUCCESS, to indicate that not all the available pairs were
-returned.
-
-.Valid Usage
-****
-  * [[VUID-vkGetDisplayPlaneSupportedDisplaysKHR-planeIndex-01249]]
-    pname:planeIndex must: be less than the number of display planes
-    supported by the device as determined by calling
-    fname:vkGetPhysicalDeviceDisplayPlanePropertiesKHR
-****
-
-include::{generated}/validity/protos/vkGetDisplayPlaneSupportedDisplaysKHR.txt[]
---
-
-Additional properties of displays are queried using specialized query
-functions.
-
-
-==== Display Modes
-
-[open,refpage='VkDisplayModeKHR',desc='Opaque handle to a display mode object',type='handles']
---
-Display modes are represented by sname:VkDisplayModeKHR handles:
-
-include::{generated}/api/handles/VkDisplayModeKHR.txt[]
---
-
-[open,refpage='vkGetDisplayModePropertiesKHR',desc='Query the set of mode properties supported by the display',type='protos']
---
-Each display has one or more supported modes associated with it by default.
-These built-in modes are queried by calling:
-
-include::{generated}/api/protos/vkGetDisplayModePropertiesKHR.txt[]
-
-  * pname:physicalDevice is the physical device associated with
-    pname:display.
-  * pname:display is the display to query.
-  * pname:pPropertyCount is a pointer to an integer related to the number of
-    display modes available or queried, as described below.
-  * pname:pProperties is either `NULL` or a pointer to an array of
-    sname:VkDisplayModePropertiesKHR structures.
-
-If pname:pProperties is `NULL`, then the number of display modes available
-on the specified pname:display for pname:physicalDevice is returned in
-pname:pPropertyCount.
-Otherwise, pname:pPropertyCount must: point to a variable set by the user to
-the number of elements in the pname:pProperties array, and on return the
-variable is overwritten with the number of structures actually written to
-pname:pProperties.
-If the value of pname:pPropertyCount is less than the number of display
-modes for pname:physicalDevice, at most pname:pPropertyCount structures will
-be written, and ename:VK_INCOMPLETE will be returned instead of
-ename:VK_SUCCESS, to indicate that not all the available display modes were
-returned.
-
-include::{generated}/validity/protos/vkGetDisplayModePropertiesKHR.txt[]
---
-
-[open,refpage='VkDisplayModePropertiesKHR',desc='Structure describing display mode properties',type='structs']
---
-The sname:VkDisplayModePropertiesKHR structure is defined as:
-
-include::{generated}/api/structs/VkDisplayModePropertiesKHR.txt[]
-
-  * pname:displayMode is a handle to the display mode described in this
-    structure.
-    This handle will be valid for the lifetime of the Vulkan instance.
-  * pname:parameters is a slink:VkDisplayModeParametersKHR structure
-    describing the display parameters associated with pname:displayMode.
-
-include::{generated}/validity/structs/VkDisplayModePropertiesKHR.txt[]
---
-
-[open,refpage='VkDisplayModeCreateFlagsKHR',desc='Reserved for future use',type='flags']
---
-include::{generated}/api/flags/VkDisplayModeCreateFlagsKHR.txt[]
-
-tname:VkDisplayModeCreateFlagsKHR is a bitmask type for setting a mask, but
-is currently reserved for future use.
---
-
-ifdef::VK_KHR_get_display_properties2[]
-[open,refpage='vkGetDisplayModeProperties2KHR',desc='Query information about the available display modes.',type='protos']
---
-To query the properties of a device's built-in display modes, call:
-
-include::{generated}/api/protos/vkGetDisplayModeProperties2KHR.txt[]
-
-  * pname:physicalDevice is the physical device associated with
-    pname:display.
-  * pname:display is the display to query.
-  * pname:pPropertyCount is a pointer to an integer related to the number of
-    display modes available or queried, as described below.
-  * pname:pProperties is either `NULL` or a pointer to an array of
-    sname:VkDisplayModeProperties2KHR structures.
-
-fname:vkGetDisplayModeProperties2KHR behaves similarly to
-flink:vkGetDisplayModePropertiesKHR, with the ability to return extended
-information via chained output structures.
-
-include::{generated}/validity/protos/vkGetDisplayModeProperties2KHR.txt[]
---
-
-[open,refpage='VkDisplayModeProperties2KHR',desc='Structure describing an available display mode',type='structs']
---
-The sname:VkDisplayModeProperties2KHR structure is defined as:
-
-include::{generated}/api/structs/VkDisplayModeProperties2KHR.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:displayModeProperties is a slink:VkDisplayModePropertiesKHR
-    structure.
-
-include::{generated}/validity/structs/VkDisplayModeProperties2KHR.txt[]
---
-endif::VK_KHR_get_display_properties2[]
-
-[open,refpage='VkDisplayModeParametersKHR',desc='Structure describing display parameters associated with a display mode',type='structs']
---
-The sname:VkDisplayModeParametersKHR structure is defined as:
-
-include::{generated}/api/structs/VkDisplayModeParametersKHR.txt[]
-
-  * pname:visibleRegion is the 2D extents of the visible region.
-  * pname:refreshRate is a code:uint32_t that is the number of times the
-    display is refreshed each second multiplied by 1000.
-
-[NOTE]
-.Note
-====
-For example, a 60Hz display mode would report a pname:refreshRate of 60,000.
-====
-
-.Valid Usage
-****
-  * [[VUID-VkDisplayModeParametersKHR-width-01990]]
-    The pname:width member of pname:visibleRegion must: be greater than `0`
-  * [[VUID-VkDisplayModeParametersKHR-height-01991]]
-    The pname:height member of pname:visibleRegion must: be greater than `0`
-  * [[VUID-VkDisplayModeParametersKHR-refreshRate-01992]]
-    pname:refreshRate must: be greater than `0`
-****
-
-include::{generated}/validity/structs/VkDisplayModeParametersKHR.txt[]
---
-
-[open,refpage='vkCreateDisplayModeKHR',desc='Create a display mode',type='protos']
---
-Additional modes may: also be created by calling:
-
-include::{generated}/api/protos/vkCreateDisplayModeKHR.txt[]
-
-  * pname:physicalDevice is the physical device associated with
-    pname:display.
-  * pname:display is the display to create an additional mode for.
-  * pname:pCreateInfo is a pointer to a slink:VkDisplayModeCreateInfoKHR
-    structure describing the new mode to create.
-  * pname:pAllocator is the allocator used for host memory allocated for the
-    display mode object when there is no more specific allocator available
-    (see <<memory-allocation,Memory Allocation>>).
-  * pname:pMode is a pointer to a slink:VkDisplayModeKHR handle in which the
-    mode created is returned.
-
-include::{generated}/validity/protos/vkCreateDisplayModeKHR.txt[]
---
-
-[open,refpage='VkDisplayModeCreateInfoKHR',desc='Structure specifying parameters of a newly created display mode object',type='structs']
---
-The sname:VkDisplayModeCreateInfoKHR structure is defined as:
-
-include::{generated}/api/structs/VkDisplayModeCreateInfoKHR.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:flags is reserved for future use, and must: be zero.
-  * pname:parameters is a slink:VkDisplayModeParametersKHR structure
-    describing the display parameters to use in creating the new mode.
-    If the parameters are not compatible with the specified display, the
-    implementation must: return ename:VK_ERROR_INITIALIZATION_FAILED.
-
-include::{generated}/validity/structs/VkDisplayModeCreateInfoKHR.txt[]
---
-
-[open,refpage='vkGetDisplayPlaneCapabilitiesKHR',desc='Query capabilities of a mode and plane combination',type='protos']
---
-Applications that wish to present directly to a display must: select which
-layer, or "`plane`" of the display they wish to target, and a mode to use
-with the display.
-Each display supports at least one plane.
-The capabilities of a given mode and plane combination are determined by
-calling:
-
-include::{generated}/api/protos/vkGetDisplayPlaneCapabilitiesKHR.txt[]
-
-  * pname:physicalDevice is the physical device associated with the display
-    specified by pname:mode
-  * pname:mode is the display mode the application intends to program when
-    using the specified plane.
-    Note this parameter also implicitly specifies a display.
-  * pname:planeIndex is the plane which the application intends to use with
-    the display, and is less than the number of display planes supported by
-    the device.
-  * pname:pCapabilities is a pointer to a
-    slink:VkDisplayPlaneCapabilitiesKHR structure in which the capabilities
-    are returned.
-
-include::{generated}/validity/protos/vkGetDisplayPlaneCapabilitiesKHR.txt[]
---
-
-[open,refpage='VkDisplayPlaneCapabilitiesKHR',desc='Structure describing capabilities of a mode and plane combination',type='structs']
---
-The sname:VkDisplayPlaneCapabilitiesKHR structure is defined as:
-
-include::{generated}/api/structs/VkDisplayPlaneCapabilitiesKHR.txt[]
-
-  * pname:supportedAlpha is a bitmask of
-    elink:VkDisplayPlaneAlphaFlagBitsKHR describing the supported alpha
-    blending modes.
-  * pname:minSrcPosition is the minimum source rectangle offset supported by
-    this plane using the specified mode.
-  * pname:maxSrcPosition is the maximum source rectangle offset supported by
-    this plane using the specified mode.
-    The pname:x and pname:y components of pname:maxSrcPosition must: each be
-    greater than or equal to the pname:x and pname:y components of
-    pname:minSrcPosition, respectively.
-  * pname:minSrcExtent is the minimum source rectangle size supported by
-    this plane using the specified mode.
-  * pname:maxSrcExtent is the maximum source rectangle size supported by
-    this plane using the specified mode.
-  * pname:minDstPosition, pname:maxDstPosition, pname:minDstExtent,
-    pname:maxDstExtent all have similar semantics to their corresponding
-    ptext:*Src* equivalents, but apply to the output region within the mode
-    rather than the input region within the source image.
-    Unlike the ptext:*Src* offsets, pname:minDstPosition and
-    pname:maxDstPosition may: contain negative values.
-
-The minimum and maximum position and extent fields describe the
-implementation limits, if any, as they apply to the specified display mode
-and plane.
-Vendors may: support displaying a subset of a swapchain's presentable images
-on the specified display plane.
-This is expressed by returning pname:minSrcPosition, pname:maxSrcPosition,
-pname:minSrcExtent, and pname:maxSrcExtent values that indicate a range of
-possible positions and sizes which may: be used to specify the region within
-the presentable images that source pixels will be read from when creating a
-swapchain on the specified display mode and plane.
-
-Vendors may: also support mapping the presentable images`' content to a
-subset or superset of the visible region in the specified display mode.
-This is expressed by returning pname:minDstPosition, pname:maxDstPosition,
-pname:minDstExtent and pname:maxDstExtent values that indicate a range of
-possible positions and sizes which may: be used to describe the region
-within the display mode that the source pixels will be mapped to.
-
-Other vendors may: support only a 1-1 mapping between pixels in the
-presentable images and the display mode.
-This may: be indicated by returning [eq]#(0,0)# for pname:minSrcPosition,
-pname:maxSrcPosition, pname:minDstPosition, and pname:maxDstPosition, and
-(display mode width, display mode height) for pname:minSrcExtent,
-pname:maxSrcExtent, pname:minDstExtent, and pname:maxDstExtent.
-
-The value pname:supportedAlpha must: contain at least one valid
-elink:VkDisplayPlaneAlphaFlagBitsKHR bit.
-
-These values indicate the limits of the implementation's individual fields.
-Not all combinations of values within the offset and extent ranges returned
-in sname:VkDisplayPlaneCapabilitiesKHR are guaranteed to be supported.
-Presentation requests specifying unsupported combinations may: fail.
-
-include::{generated}/validity/structs/VkDisplayPlaneCapabilitiesKHR.txt[]
---
-
-ifdef::VK_KHR_get_display_properties2[]
-[open,refpage='vkGetDisplayPlaneCapabilities2KHR',desc='Query capabilities of a mode and plane combination',type='protos']
---
-To query the capabilities of a given mode and plane combination, call:
-
-include::{generated}/api/protos/vkGetDisplayPlaneCapabilities2KHR.txt[]
-
-  * pname:physicalDevice is the physical device associated with
-    pname:pDisplayPlaneInfo.
-  * pname:pDisplayPlaneInfo is a pointer to a slink:VkDisplayPlaneInfo2KHR
-    structure describing the plane and mode.
-  * pname:pCapabilities is a pointer to a
-    slink:VkDisplayPlaneCapabilities2KHR structure in which the capabilities
-    are returned.
-
-fname:vkGetDisplayPlaneCapabilities2KHR behaves similarly to
-flink:vkGetDisplayPlaneCapabilitiesKHR, with the ability to specify extended
-inputs via chained input structures, and to return extended information via
-chained output structures.
-
-include::{generated}/validity/protos/vkGetDisplayPlaneCapabilities2KHR.txt[]
---
-
-[open,refpage='VkDisplayPlaneInfo2KHR',desc='Structure defining the intended configuration of a display plane',type='structs']
---
-The sname:VkDisplayPlaneInfo2KHR structure is defined as:
-
-include::{generated}/api/structs/VkDisplayPlaneInfo2KHR.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:mode is the display mode the application intends to program when
-    using the specified plane.
-
-[NOTE]
-.Note
-====
-This parameter also implicitly specifies a display.
-====
-
-  * pname:planeIndex is the plane which the application intends to use with
-    the display.
-
-The members of sname:VkDisplayPlaneInfo2KHR correspond to the arguments to
-flink:vkGetDisplayPlaneCapabilitiesKHR, with pname:sType and pname:pNext
-added for extensibility.
-
-include::{generated}/validity/structs/VkDisplayPlaneInfo2KHR.txt[]
---
-
-[open,refpage='VkDisplayPlaneCapabilities2KHR',desc='Structure describing the capabilities of a mode and plane combination',type='structs']
---
-The sname:VkDisplayPlaneCapabilities2KHR structure is defined as:
-
-include::{generated}/api/structs/VkDisplayPlaneCapabilities2KHR.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:capabilities is a slink:VkDisplayPlaneCapabilitiesKHR structure.
-
-include::{generated}/validity/structs/VkDisplayPlaneCapabilities2KHR.txt[]
---
-endif::VK_KHR_get_display_properties2[]
-
-ifdef::VK_EXT_display_control[]
-include::{chapters}/VK_EXT_display_control/display_control.txt[]
-endif::VK_EXT_display_control[]
-
-
-[[wsi-display-surfaces]]
-=== Display Surfaces
-
-[open,refpage='vkCreateDisplayPlaneSurfaceKHR',desc='Create a slink:VkSurfaceKHR structure representing a display plane and mode',type='protos']
---
-A complete display configuration includes a mode, one or more display planes
-and any parameters describing their behavior, and parameters describing some
-aspects of the images associated with those planes.
-Display surfaces describe the configuration of a single plane within a
-complete display configuration.
-To create a sname:VkSurfaceKHR object for a display plane, call:
-
-include::{generated}/api/protos/vkCreateDisplayPlaneSurfaceKHR.txt[]
-
-  * pname:instance is the instance corresponding to the physical device the
-    targeted display is on.
-  * pname:pCreateInfo is a pointer to a slink:VkDisplaySurfaceCreateInfoKHR
-    structure specifying which mode, plane, and other parameters to use, as
-    described below.
-  * pname:pAllocator is the allocator used for host memory allocated for the
-    surface object when there is no more specific allocator available (see
-    <<memory-allocation,Memory Allocation>>).
-  * pname:pSurface is a pointer to a slink:VkSurfaceKHR handle in which the
-    created surface is returned.
-
-include::{generated}/validity/protos/vkCreateDisplayPlaneSurfaceKHR.txt[]
---
-
-[open,refpage='VkDisplaySurfaceCreateInfoKHR',desc='Structure specifying parameters of a newly created display plane surface object',type='structs']
---
-The sname:VkDisplaySurfaceCreateInfoKHR structure is defined as:
-
-include::{generated}/api/structs/VkDisplaySurfaceCreateInfoKHR.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:flags is reserved for future use, and must: be zero.
-  * pname:displayMode is a slink:VkDisplayModeKHR handle specifying the mode
-    to use when displaying this surface.
-  * pname:planeIndex is the plane on which this surface appears.
-  * pname:planeStackIndex is the z-order of the plane.
-  * pname:transform is a elink:VkSurfaceTransformFlagBitsKHR value
-    specifying the transformation to apply to images as part of the scanout
-    operation.
-  * pname:globalAlpha is the global alpha value.
-    This value is ignored if pname:alphaMode is not
-    ename:VK_DISPLAY_PLANE_ALPHA_GLOBAL_BIT_KHR.
-  * pname:alphaMode is a elink:VkDisplayPlaneAlphaFlagBitsKHR value
-    specifying the type of alpha blending to use.
-  * pname:imageExtent is the size of the presentable images to use with the
-    surface.
-
-[NOTE]
-.Note
-====
-Creating a display surface must: not modify the state of the displays,
-planes, or other resources it names.
-For example, it must: not apply the specified mode to be set on the
-associated display.
-Application of display configuration occurs as a side effect of presenting
-to a display surface.
-====
-
-.Valid Usage
-****
-  * [[VUID-VkDisplaySurfaceCreateInfoKHR-planeIndex-01252]]
-    pname:planeIndex must: be less than the number of display planes
-    supported by the device as determined by calling
-    fname:vkGetPhysicalDeviceDisplayPlanePropertiesKHR
-  * [[VUID-VkDisplaySurfaceCreateInfoKHR-planeReorderPossible-01253]]
-    If the pname:planeReorderPossible member of the
-    sname:VkDisplayPropertiesKHR structure returned by
-    fname:vkGetPhysicalDeviceDisplayPropertiesKHR for the display
-    corresponding to pname:displayMode is ename:VK_TRUE then
-    pname:planeStackIndex must: be less than the number of display planes
-    supported by the device as determined by calling
-    fname:vkGetPhysicalDeviceDisplayPlanePropertiesKHR; otherwise
-    pname:planeStackIndex must: equal the pname:currentStackIndex member of
-    sname:VkDisplayPlanePropertiesKHR returned by
-    fname:vkGetPhysicalDeviceDisplayPlanePropertiesKHR for the display plane
-    corresponding to pname:displayMode
-  * [[VUID-VkDisplaySurfaceCreateInfoKHR-alphaMode-01254]]
-    If pname:alphaMode is ename:VK_DISPLAY_PLANE_ALPHA_GLOBAL_BIT_KHR then
-    pname:globalAlpha must: be between `0` and `1`, inclusive
-  * [[VUID-VkDisplaySurfaceCreateInfoKHR-alphaMode-01255]]
-    pname:alphaMode must: be one of the bits present in the
-    pname:supportedAlpha member of sname:VkDisplayPlaneCapabilitiesKHR for
-    the display plane corresponding to pname:displayMode
-  * [[VUID-VkDisplaySurfaceCreateInfoKHR-width-01256]]
-    The pname:width and pname:height members of pname:imageExtent must: be
-    less than or equal to
-    slink:VkPhysicalDeviceLimits::pname:maxImageDimension2D
-****
-
-include::{generated}/validity/structs/VkDisplaySurfaceCreateInfoKHR.txt[]
---
-
-[open,refpage='VkDisplaySurfaceCreateFlagsKHR',desc='Reserved for future use',type='flags']
---
-include::{generated}/api/flags/VkDisplaySurfaceCreateFlagsKHR.txt[]
-
-tname:VkDisplaySurfaceCreateFlagsKHR is a bitmask type for setting a mask,
-but is currently reserved for future use.
---
-
-[open,refpage='VkDisplayPlaneAlphaFlagBitsKHR',desc='Alpha blending type',type='enums']
---
-Possible values of slink:VkDisplaySurfaceCreateInfoKHR::pname:alphaMode,
-specifying the type of alpha blending to use on a display, are:
-
-include::{generated}/api/enums/VkDisplayPlaneAlphaFlagBitsKHR.txt[]
-
-  * ename:VK_DISPLAY_PLANE_ALPHA_OPAQUE_BIT_KHR specifies that the source
-    image will be treated as opaque.
-  * ename:VK_DISPLAY_PLANE_ALPHA_GLOBAL_BIT_KHR specifies that a global
-    alpha value must: be specified that will be applied to all pixels in the
-    source image.
-  * ename:VK_DISPLAY_PLANE_ALPHA_PER_PIXEL_BIT_KHR specifies that the alpha
-    value will be determined by the alpha component of the source image's
-    pixels.
-    If the source format contains no alpha values, no blending will be
-    applied.
-    The source alpha values are not premultiplied into the source image's
-    other color components.
-  * ename:VK_DISPLAY_PLANE_ALPHA_PER_PIXEL_PREMULTIPLIED_BIT_KHR is
-    equivalent to ename:VK_DISPLAY_PLANE_ALPHA_PER_PIXEL_BIT_KHR, except the
-    source alpha values are assumed to be premultiplied into the source
-    image's other color components.
---
-
-[open,refpage='VkDisplayPlaneAlphaFlagsKHR',desc='Bitmask of VkDisplayPlaneAlphaFlagBitsKHR',type='flags']
---
-include::{generated}/api/flags/VkDisplayPlaneAlphaFlagsKHR.txt[]
-
-tname:VkDisplayPlaneAlphaFlagsKHR is a bitmask type for setting a mask of
-zero or more elink:VkDisplayPlaneAlphaFlagBitsKHR.
---
diff --git a/registry/vulkan/chapters/VK_KHR_display_swapchain/create_shared_swapchains.txt b/registry/vulkan/chapters/VK_KHR_display_swapchain/create_shared_swapchains.txt
deleted file mode 100644
index 9175147..0000000
--- a/registry/vulkan/chapters/VK_KHR_display_swapchain/create_shared_swapchains.txt
+++ /dev/null
@@ -1,42 +0,0 @@
-// Copyright 2014-2021 The Khronos Group, Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-[[create_shared_swapchains,create_shared_swapchains]]
-
-[open,refpage='vkCreateSharedSwapchainsKHR',desc='Create multiple swapchains that share presentable images',type='protos']
---
-When the `VK_KHR_display_swapchain` extension is enabled, multiple
-swapchains that share presentable images are created by calling:
-
-include::{generated}/api/protos/vkCreateSharedSwapchainsKHR.txt[]
-
-  * pname:device is the device to create the swapchains for.
-  * pname:swapchainCount is the number of swapchains to create.
-  * pname:pCreateInfos is a pointer to an array of
-    slink:VkSwapchainCreateInfoKHR structures specifying the parameters of
-    the created swapchains.
-  * pname:pAllocator is the allocator used for host memory allocated for the
-    swapchain objects when there is no more specific allocator available
-    (see <<memory-allocation,Memory Allocation>>).
-  * pname:pSwapchains is a pointer to an array of slink:VkSwapchainKHR
-    handles in which the created swapchain objects will be returned.
-
-fname:vkCreateSharedSwapchainsKHR is similar to flink:vkCreateSwapchainKHR,
-except that it takes an array of slink:VkSwapchainCreateInfoKHR structures,
-and returns an array of swapchain objects.
-
-The swapchain creation parameters that affect the properties and number of
-presentable images must: match between all the swapchains.
-If the displays used by any of the swapchains do not use the same
-presentable image layout or are incompatible in a way that prevents sharing
-images, swapchain creation will fail with the result code
-ename:VK_ERROR_INCOMPATIBLE_DISPLAY_KHR.
-If any error occurs, no swapchains will be created.
-Images presented to multiple swapchains must: be re-acquired from all of
-them before transitioning away from ename:VK_IMAGE_LAYOUT_PRESENT_SRC_KHR.
-After destroying one or more of the swapchains, the remaining swapchains and
-the presentable images can: continue to be used.
-
-include::{generated}/validity/protos/vkCreateSharedSwapchainsKHR.txt[]
---
diff --git a/registry/vulkan/chapters/VK_KHR_display_swapchain/destroy_swapchain_interactions.txt b/registry/vulkan/chapters/VK_KHR_display_swapchain/destroy_swapchain_interactions.txt
deleted file mode 100644
index d809a65..0000000
--- a/registry/vulkan/chapters/VK_KHR_display_swapchain/destroy_swapchain_interactions.txt
+++ /dev/null
@@ -1,11 +0,0 @@
-// Copyright 2018-2021 The Khronos Group, Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-When a swapchain associated with a display surface is destroyed, if the
-image most recently presented to the display surface is from the swapchain
-being destroyed, then either any display resources modified by presenting
-images from any swapchain associated with the display surface must: be
-reverted by the implementation to their state prior to the first present
-performed on one of these swapchains, or such resources must: be left in
-their current state.
diff --git a/registry/vulkan/chapters/VK_KHR_display_swapchain/display_swapchain_present.txt b/registry/vulkan/chapters/VK_KHR_display_swapchain/display_swapchain_present.txt
deleted file mode 100644
index ddf10e4..0000000
--- a/registry/vulkan/chapters/VK_KHR_display_swapchain/display_swapchain_present.txt
+++ /dev/null
@@ -1,68 +0,0 @@
-// Copyright 2014-2021 The Khronos Group, Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-[[display_swapchain_present,display_swapchain_present]]
-When the `VK_KHR_display_swapchain` extension is enabled additional fields
-can: be specified when presenting an image to a swapchain by setting
-slink:VkPresentInfoKHR::pname:pNext to point to a
-slink:VkDisplayPresentInfoKHR structure.
-
-[open,refpage='VkDisplayPresentInfoKHR',desc='Structure describing parameters of a queue presentation to a swapchain',type='structs']
---
-
-The sname:VkDisplayPresentInfoKHR structure is defined as:
-
-include::{generated}/api/structs/VkDisplayPresentInfoKHR.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:srcRect is a rectangular region of pixels to present.
-    It must: be a subset of the image being presented.
-    If sname:VkDisplayPresentInfoKHR is not specified, this region will be
-    assumed to be the entire presentable image.
-  * pname:dstRect is a rectangular region within the visible region of the
-    swapchain's display mode.
-    If sname:VkDisplayPresentInfoKHR is not specified, this region will be
-    assumed to be the entire visible region of the swapchain's mode.
-    If the specified rectangle is a subset of the display mode's visible
-    region, content from display planes below the swapchain's plane will be
-    visible outside the rectangle.
-    If there are no planes below the swapchain's, the area outside the
-    specified rectangle will be black.
-    If portions of the specified rectangle are outside of the display's
-    visible region, pixels mapping only to those portions of the rectangle
-    will be discarded.
-  * pname:persistent: If this is ename:VK_TRUE, the display engine will
-    enable buffered mode on displays that support it.
-    This allows the display engine to stop sending content to the display
-    until a new image is presented.
-    The display will instead maintain a copy of the last presented image.
-    This allows less power to be used, but may: increase presentation
-    latency.
-    If sname:VkDisplayPresentInfoKHR is not specified, persistent mode will
-    not be used.
-
-If the extent of the pname:srcRect and pname:dstRect are not equal, the
-presented pixels will be scaled accordingly.
-
-.Valid Usage
-****
-  * [[VUID-VkDisplayPresentInfoKHR-srcRect-01257]]
-    pname:srcRect must: specify a rectangular region that is a subset of the
-    image being presented
-  * [[VUID-VkDisplayPresentInfoKHR-dstRect-01258]]
-    pname:dstRect must: specify a rectangular region that is a subset of the
-    pname:visibleRegion parameter of the display mode the swapchain being
-    presented uses
-  * [[VUID-VkDisplayPresentInfoKHR-persistentContent-01259]]
-    If the pname:persistentContent member of the
-    sname:VkDisplayPropertiesKHR structure returned by
-    fname:vkGetPhysicalDeviceDisplayPropertiesKHR for the display the
-    present operation targets is ename:VK_FALSE, then pname:persistent must:
-    be ename:VK_FALSE
-****
-
-include::{generated}/validity/structs/VkDisplayPresentInfoKHR.txt[]
---
diff --git a/registry/vulkan/chapters/VK_KHR_display_swapchain/queue_present_interactions.txt b/registry/vulkan/chapters/VK_KHR_display_swapchain/queue_present_interactions.txt
deleted file mode 100644
index 2901a7f..0000000
--- a/registry/vulkan/chapters/VK_KHR_display_swapchain/queue_present_interactions.txt
+++ /dev/null
@@ -1,9 +0,0 @@
-// Copyright 2018-2021 The Khronos Group, Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-If an image is presented to a swapchain created from a display surface, the
-mode of the associated display will be updated, if necessary, to match the
-mode specified when creating the display surface.
-The mode switch and presentation of the specified image will be performed as
-one atomic operation.
diff --git a/registry/vulkan/chapters/VK_KHR_incremental_present/wsi.txt b/registry/vulkan/chapters/VK_KHR_incremental_present/wsi.txt
deleted file mode 100644
index 923c85a..0000000
--- a/registry/vulkan/chapters/VK_KHR_incremental_present/wsi.txt
+++ /dev/null
@@ -1,104 +0,0 @@
-// Copyright 2014-2021 The Khronos Group, Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-[open,refpage='VkPresentRegionsKHR',desc='Structure hint of rectangular regions changed by vkQueuePresentKHR',type='structs']
---
-When the `VK_KHR_incremental_present` extension is enabled, additional
-fields can: be specified that allow an application to specify that only
-certain rectangular regions of the presentable images of a swapchain are
-changed.
-This is an optimization hint that a presentation engine may: use to only
-update the region of a surface that is actually changing.
-The application still must: ensure that all pixels of a presented image
-contain the desired values, in case the presentation engine ignores this
-hint.
-An application can: provide this hint by adding a sname:VkPresentRegionsKHR
-structure to the pname:pNext chain of the sname:VkPresentInfoKHR structure.
-
-The sname:VkPresentRegionsKHR structure is defined as:
-
-include::{generated}/api/structs/VkPresentRegionsKHR.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:swapchainCount is the number of swapchains being presented to by
-    this command.
-  * pname:pRegions is `NULL` or a pointer to an array of
-    sname:VkPresentRegionKHR elements with pname:swapchainCount entries.
-    If not `NULL`, each element of pname:pRegions contains the region that
-    has changed since the last present to the swapchain in the corresponding
-    entry in the sname:VkPresentInfoKHR::pname:pSwapchains array.
-
-.Valid Usage
-****
-  * [[VUID-VkPresentRegionsKHR-swapchainCount-01260]]
-    pname:swapchainCount must: be the same value as
-    sname:VkPresentInfoKHR::pname:swapchainCount, where
-    sname:VkPresentInfoKHR is included in the pname:pNext chain of this
-    sname:VkPresentRegionsKHR structure
-****
-
-include::{generated}/validity/structs/VkPresentRegionsKHR.txt[]
---
-
-[open,refpage='VkPresentRegionKHR',desc='Structure containing rectangular region changed by vkQueuePresentKHR for a given VkImage',type='structs']
---
-For a given image and swapchain, the region to present is specified by the
-sname:VkPresentRegionKHR structure, which is defined as:
-
-include::{generated}/api/structs/VkPresentRegionKHR.txt[]
-
-  * pname:rectangleCount is the number of rectangles in pname:pRectangles,
-    or zero if the entire image has changed and should be presented.
-  * pname:pRectangles is either `NULL` or a pointer to an array of
-    sname:VkRectLayerKHR structures.
-    The sname:VkRectLayerKHR structure is the framebuffer coordinates, plus
-    layer, of a portion of a presentable image that has changed and must: be
-    presented.
-    If non-`NULL`, each entry in pname:pRectangles is a rectangle of the
-    given image that has changed since the last image was presented to the
-    given swapchain.
-    The rectangles must: be specified relative to
-    slink:VkSurfaceCapabilitiesKHR::pname:currentTransform, regardless of
-    the swapchain's pname:preTransform.
-    The presentation engine will apply the pname:preTransform transformation
-    to the rectangles, along with any further transformation it applies to
-    the image content.
-
-include::{generated}/validity/structs/VkPresentRegionKHR.txt[]
---
-
-[open,refpage='VkRectLayerKHR',desc='Structure containing a rectangle, including layer, changed by vkQueuePresentKHR for a given VkImage',type='structs']
---
-The sname:VkRectLayerKHR structure is defined as:
-
-include::{generated}/api/structs/VkRectLayerKHR.txt[]
-
-  * pname:offset is the origin of the rectangle, in pixels.
-  * pname:extent is the size of the rectangle, in pixels.
-  * pname:layer is the layer of the image.
-    For images with only one layer, the value of pname:layer must: be 0.
-
-Some platforms allow the size of a surface to change, and then scale the
-pixels of the image to fit the surface.
-sname:VkRectLayerKHR specifies pixels of the swapchain's image(s), which
-will be constant for the life of the swapchain.
-
-.Valid Usage
-****
-  * [[VUID-VkRectLayerKHR-offset-04864]]
-    The sum of pname:offset and pname:extent, after being transformed
-    according to the pname:preTransform member of the
-    slink:VkSwapchainCreateInfoKHR structure, must: be no greater than the
-    pname:imageExtent member of the slink:VkSwapchainCreateInfoKHR structure
-    passed to flink:vkCreateSwapchainKHR
-  * [[VUID-VkRectLayerKHR-layer-01262]]
-    pname:layer must: be less than the pname:imageArrayLayers member of the
-    slink:VkSwapchainCreateInfoKHR structure passed to
-    flink:vkCreateSwapchainKHR
-****
-
-include::{generated}/validity/structs/VkRectLayerKHR.txt[]
---
diff --git a/registry/vulkan/chapters/VK_KHR_performance_query/features.txt b/registry/vulkan/chapters/VK_KHR_performance_query/features.txt
deleted file mode 100644
index d9f920e..0000000
--- a/registry/vulkan/chapters/VK_KHR_performance_query/features.txt
+++ /dev/null
@@ -1,31 +0,0 @@
-// Copyright 2019-2021 The Khronos Group, Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-[open,refpage='VkPhysicalDevicePerformanceQueryFeaturesKHR',desc='Structure describing performance query support for an implementation',type='structs']
---
-The sname:VkPhysicalDevicePerformanceQueryFeaturesKHR structure is defined
-as:
-
-include::{generated}/api/structs/VkPhysicalDevicePerformanceQueryFeaturesKHR.txt[]
-
-This structure describes the following features:
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-// tag::VK_KHR_performance_query-features[]
-  * [[features-performanceCounterQueryPools]]
-    pname:performanceCounterQueryPools indicates whether the implementation
-    supports performance counter query pools.
-  * [[features-performanceCounterMultipleQueryPools]]
-    pname:performanceCounterMultipleQueryPools indicates whether the
-    implementation supports using multiple performance query pools in a
-    primary command buffer and secondary command buffers executed within it.
-// end::VK_KHR_performance_query-features[]
-
-:refpage: VkPhysicalDevicePerformanceQueryFeaturesKHR
-include::{chapters}/features.txt[tag=features]
-
-include::{generated}/validity/structs/VkPhysicalDevicePerformanceQueryFeaturesKHR.txt[]
---
diff --git a/registry/vulkan/chapters/VK_KHR_performance_query/props.txt b/registry/vulkan/chapters/VK_KHR_performance_query/props.txt
deleted file mode 100644
index 7d2ebae..0000000
--- a/registry/vulkan/chapters/VK_KHR_performance_query/props.txt
+++ /dev/null
@@ -1,22 +0,0 @@
-// Copyright 2019-2021 The Khronos Group, Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-[open,refpage='VkPhysicalDevicePerformanceQueryPropertiesKHR',desc='Structure describing performance query properties for an implementation',type='structs']
---
-The sname:VkPhysicalDevicePerformanceQueryPropertiesKHR structure is defined
-as:
-
-include::{generated}/api/structs/VkPhysicalDevicePerformanceQueryPropertiesKHR.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:allowCommandBufferQueryCopies is ename:VK_TRUE if the performance
-    query pools are allowed to be used with flink:vkCmdCopyQueryPoolResults.
-
-:refpage: VkPhysicalDevicePerformanceQueryPropertiesKHR
-include::{chapters}/limits.txt[tag=limits_desc]
-
-include::{generated}/validity/structs/VkPhysicalDevicePerformanceQueryPropertiesKHR.txt[]
---
diff --git a/registry/vulkan/chapters/VK_KHR_performance_query/queriesperformance.txt b/registry/vulkan/chapters/VK_KHR_performance_query/queriesperformance.txt
deleted file mode 100644
index e834628..0000000
--- a/registry/vulkan/chapters/VK_KHR_performance_query/queriesperformance.txt
+++ /dev/null
@@ -1,144 +0,0 @@
-// Copyright 2019-2021 The Khronos Group, Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-[[queries-performance]]
-== Performance Queries
-
-_Performance queries_ provide applications with a mechanism for getting
-performance counter information about the execution of command buffers,
-render passes, and commands.
-
-Each queue family advertises the performance counters that can: be queried
-on a queue of that family via a call to
-flink:vkEnumeratePhysicalDeviceQueueFamilyPerformanceQueryCountersKHR.
-Implementations may: limit access to performance counters based on platform
-requirements or only to specialized drivers for development purposes.
-
-[NOTE]
-.Note
-====
-This may include no performance counters being enumerated, or a reduced set.
-Please refer to platform-specific documentation for guidance on any such
-restrictions.
-====
-
-Performance queries use the existing flink:vkCmdBeginQuery and
-flink:vkCmdEndQuery to control what command buffers, render passes, or
-commands to get performance information for.
-
-Implementations may: require multiple passes where the command buffer,
-render passes, or commands being recorded are the same and are executed on
-the same queue to record performance counter data.
-This is achieved by submitting the same batch and providing a
-slink:VkPerformanceQuerySubmitInfoKHR structure containing a counter pass
-index.
-The number of passes required for a given performance query pool can: be
-queried via a call to
-flink:vkGetPhysicalDeviceQueueFamilyPerformanceQueryPassesKHR.
-
-[NOTE]
-.Note
-====
-Command buffers created with
-ename:VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT must: not be re-submitted.
-Changing command buffer usage bits may: affect performance.
-To avoid this, the application should: re-record any command buffers with
-the ename:VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT when multiple counter
-passes are required.
-====
-
-Performance counter results from a performance query pool can: be obtained
-with the command flink:vkGetQueryPoolResults.
-
-[open,refpage='VkPerformanceCounterResultKHR',desc='Union containing a performance counter result',type='structs']
---
-Performance query results are returned in an array of
-sname:VkPerformanceCounterResultKHR unions containing the data associated
-with each counter in the query, stored in the same order as the counters
-supplied in pname:pCounterIndices when creating the performance query.
-The slink:VkPerformanceCounterKHR::pname:unit enumeration specifies how to
-parse the counter data.
-
-include::{generated}/api/structs/VkPerformanceCounterResultKHR.txt[]
---
-
-
-[[profiling-lock]]
-=== Profiling Lock
-
-[open,refpage='vkAcquireProfilingLockKHR',desc='Acquires the profiling lock',type='protos']
---
-To record and submit a command buffer that contains a performance query pool
-the profiling lock must: be held.
-The profiling lock must: be acquired prior to any call to
-flink:vkBeginCommandBuffer that will be using a performance query pool.
-The profiling lock must: be held while any command buffer that contains a
-performance query pool is in the _recording_, _executable_, or _pending
-state_.
-To acquire the profiling lock, call:
-
-include::{generated}/api/protos/vkAcquireProfilingLockKHR.txt[]
-
-  * pname:device is the logical device to profile.
-  * pname:pInfo is a pointer to a sname:VkAcquireProfilingLockInfoKHR
-    structure which contains information about how the profiling is to be
-    acquired.
-
-Implementations may: allow multiple actors to hold the profiling lock
-concurrently.
-
-include::{generated}/validity/protos/vkAcquireProfilingLockKHR.txt[]
---
-
-[open,refpage='VkAcquireProfilingLockInfoKHR',desc='Structure specifying parameters to acquire the profiling lock',type='structs']
---
-The sname:VkAcquireProfilingLockInfoKHR structure is defined as:
-
-include::{generated}/api/structs/VkAcquireProfilingLockInfoKHR.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:flags is reserved for future use.
-  * pname:timeout indicates how long the function waits, in nanoseconds, if
-    the profiling lock is not available.
-
-include::{generated}/validity/structs/VkAcquireProfilingLockInfoKHR.txt[]
-
-If pname:timeout is 0, fname:vkAcquireProfilingLockKHR will not block while
-attempting to acquire the profling lock.
-If pname:timeout is code:UINT64_MAX, the function will not return until the
-profiling lock was acquired.
---
-
-[open,refpage='VkAcquireProfilingLockFlagBitsKHR',desc='Reserved for future use',type='enums']
---
-include::{generated}/api/enums/VkAcquireProfilingLockFlagBitsKHR.txt[]
---
-
-[open,refpage='VkAcquireProfilingLockFlagsKHR',desc='Reserved for future use',type='flags']
---
-include::{generated}/api/flags/VkAcquireProfilingLockFlagsKHR.txt[]
-
-tlink:VkAcquireProfilingLockFlagsKHR is a bitmask type for setting a mask,
-but is currently reserved for future use.
---
-
-[open,refpage='vkReleaseProfilingLockKHR',desc='Releases the profiling lock',type='protos']
---
-To release the profiling lock, call:
-
-include::{generated}/api/protos/vkReleaseProfilingLockKHR.txt[]
-
-  * pname:device is the logical device to cease profiling on.
-
-.Valid Usage
-****
-  * [[VUID-vkReleaseProfilingLockKHR-device-03235]]
-    The profiling lock of pname:device must: have been held via a previous
-    successful call to flink:vkAcquireProfilingLockKHR
-****
-
-include::{generated}/validity/protos/vkReleaseProfilingLockKHR.txt[]
---
diff --git a/registry/vulkan/chapters/VK_KHR_performance_query/querycreateinfo.txt b/registry/vulkan/chapters/VK_KHR_performance_query/querycreateinfo.txt
deleted file mode 100644
index 31edc16..0000000
--- a/registry/vulkan/chapters/VK_KHR_performance_query/querycreateinfo.txt
+++ /dev/null
@@ -1,63 +0,0 @@
-// Copyright 2019-2021 The Khronos Group, Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-[open,refpage='VkQueryPoolPerformanceCreateInfoKHR',desc='Structure specifying parameters of a newly created performance query pool',type='structs']
---
-The sname:VkQueryPoolPerformanceCreateInfoKHR structure is defined as:
-
-include::{generated}/api/structs/VkQueryPoolPerformanceCreateInfoKHR.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:queueFamilyIndex is the queue family index to create this
-    performance query pool for.
-  * pname:counterIndexCount is the length of the pname:pCounterIndices
-    array.
-  * pname:pCounterIndices is a pointer to an array of indices into the
-    flink:vkEnumeratePhysicalDeviceQueueFamilyPerformanceQueryCountersKHR::pname:pCounters
-    to enable in this performance query pool.
-
-.Valid Usage
-****
-  * [[VUID-VkQueryPoolPerformanceCreateInfoKHR-queueFamilyIndex-03236]]
-    pname:queueFamilyIndex must: be a valid queue family index of the device
-  * [[VUID-VkQueryPoolPerformanceCreateInfoKHR-performanceCounterQueryPools-03237]]
-    The <<features-performanceCounterQueryPools,
-    pname:performanceCounterQueryPools>> feature must: be enabled
-  * [[VUID-VkQueryPoolPerformanceCreateInfoKHR-pCounterIndices-03321]]
-    Each element of pname:pCounterIndices must: be in the range of counters
-    reported by
-    fname:vkEnumeratePhysicalDeviceQueueFamilyPerformanceQueryCountersKHR
-    for the queue family specified in pname:queueFamilyIndex
-****
-
-include::{generated}/validity/structs/VkQueryPoolPerformanceCreateInfoKHR.txt[]
---
-
-[open,refpage='vkGetPhysicalDeviceQueueFamilyPerformanceQueryPassesKHR',desc='Reports the number of passes require for a performance query pool type',type='protos']
---
-To query the number of passes required to query a performance query pool on
-a physical device, call:
-
-include::{generated}/api/protos/vkGetPhysicalDeviceQueueFamilyPerformanceQueryPassesKHR.txt[]
-
-  * pname:physicalDevice is the handle to the physical device whose queue
-    family performance query counter properties will be queried.
-  * pname:pPerformanceQueryCreateInfo is a pointer to a
-    sname:VkQueryPoolPerformanceCreateInfoKHR of the performance query that
-    is to be created.
-  * pname:pNumPasses is a pointer to an integer related to the number of
-    passes required to query the performance query pool, as described below.
-
-The pname:pPerformanceQueryCreateInfo member
-sname:VkQueryPoolPerformanceCreateInfoKHR::pname:queueFamilyIndex must: be a
-queue family of pname:physicalDevice.
-The number of passes required to capture the counters specified in the
-pname:pPerformanceQueryCreateInfo member
-sname:VkQueryPoolPerformanceCreateInfoKHR::pname:pCounters is returned in
-pname:pNumPasses.
-
-include::{generated}/validity/protos/vkGetPhysicalDeviceQueueFamilyPerformanceQueryPassesKHR.txt[]
---
diff --git a/registry/vulkan/chapters/VK_KHR_performance_query/queuefamily.txt b/registry/vulkan/chapters/VK_KHR_performance_query/queuefamily.txt
deleted file mode 100644
index f96548c..0000000
--- a/registry/vulkan/chapters/VK_KHR_performance_query/queuefamily.txt
+++ /dev/null
@@ -1,183 +0,0 @@
-// Copyright 2019-2021 The Khronos Group, Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-[open,refpage='vkEnumeratePhysicalDeviceQueueFamilyPerformanceQueryCountersKHR',desc='Reports properties of the performance query counters available on a queue family of a device',type='protos']
---
-To enumerate the performance query counters available on a queue family of a
-physical device, call:
-
-include::{generated}/api/protos/vkEnumeratePhysicalDeviceQueueFamilyPerformanceQueryCountersKHR.txt[]
-
-  * pname:physicalDevice is the handle to the physical device whose queue
-    family performance query counter properties will be queried.
-  * pname:queueFamilyIndex is the index into the queue family of the
-    physical device we want to get properties for.
-  * pname:pCounterCount is a pointer to an integer related to the number of
-    counters available or queried, as described below.
-  * pname:pCounters is either `NULL` or a pointer to an array of
-    slink:VkPerformanceCounterKHR structures.
-  * pname:pCounterDescriptions is either `NULL` or a pointer to an array of
-    slink:VkPerformanceCounterDescriptionKHR structures.
-
-If pname:pCounters is `NULL` and pname:pCounterDescriptions is `NULL`, then
-the number of counters available is returned in pname:pCounterCount.
-Otherwise, pname:pCounterCount must: point to a variable set by the user to
-the number of elements in the pname:pCounters, pname:pCounterDescriptions,
-or both arrays and on return the variable is overwritten with the number of
-structures actually written out.
-If pname:pCounterCount is less than the number of counters available, at
-most pname:pCounterCount structures will be written, and ename:VK_INCOMPLETE
-will be returned instead of ename:VK_SUCCESS, to indicate that not all the
-available counters were returned.
-
-include::{generated}/validity/protos/vkEnumeratePhysicalDeviceQueueFamilyPerformanceQueryCountersKHR.txt[]
---
-
-[open,refpage='VkPerformanceCounterKHR',desc='Structure providing information about a counter',type='structs']
---
-The sname:VkPerformanceCounterKHR structure is defined as:
-
-include::{generated}/api/structs/VkPerformanceCounterKHR.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:unit is a elink:VkPerformanceCounterUnitKHR specifying the unit
-    that the counter data will record.
-  * pname:scope is a elink:VkPerformanceCounterScopeKHR specifying the scope
-    that the counter belongs to.
-  * pname:storage is a elink:VkPerformanceCounterStorageKHR specifying the
-    storage type that the counter's data uses.
-  * pname:uuid is an array of size ename:VK_UUID_SIZE, containing 8-bit
-    values that represent a universally unique identifier for the counter of
-    the physical device.
-
-include::{generated}/validity/structs/VkPerformanceCounterKHR.txt[]
---
-
-[open,refpage='VkPerformanceCounterUnitKHR',desc='Supported counter unit types',type='enums']
---
-Performance counters have an associated unit.
-This unit describes how to interpret the performance counter result.
-
-The performance counter unit types which may: be returned in
-slink:VkPerformanceCounterKHR::pname:unit are:
-
-include::{generated}/api/enums/VkPerformanceCounterUnitKHR.txt[]
-
-  * ename:VK_PERFORMANCE_COUNTER_UNIT_GENERIC_KHR - the performance counter
-    unit is a generic data point.
-  * ename:VK_PERFORMANCE_COUNTER_UNIT_PERCENTAGE_KHR - the performance
-    counter unit is a percentage (%).
-  * ename:VK_PERFORMANCE_COUNTER_UNIT_NANOSECONDS_KHR - the performance
-    counter unit is a value of nanoseconds (ns).
-  * ename:VK_PERFORMANCE_COUNTER_UNIT_BYTES_KHR - the performance counter
-    unit is a value of bytes.
-  * ename:VK_PERFORMANCE_COUNTER_UNIT_BYTES_PER_SECOND_KHR - the performance
-    counter unit is a value of bytes/s.
-  * ename:VK_PERFORMANCE_COUNTER_UNIT_KELVIN_KHR - the performance counter
-    unit is a temperature reported in Kelvin.
-  * ename:VK_PERFORMANCE_COUNTER_UNIT_WATTS_KHR - the performance counter
-    unit is a value of watts (W).
-  * ename:VK_PERFORMANCE_COUNTER_UNIT_VOLTS_KHR - the performance counter
-    unit is a value of volts (V).
-  * ename:VK_PERFORMANCE_COUNTER_UNIT_AMPS_KHR - the performance counter
-    unit is a value of amps (A).
-  * ename:VK_PERFORMANCE_COUNTER_UNIT_HERTZ_KHR - the performance counter
-    unit is a value of hertz (Hz).
-  * ename:VK_PERFORMANCE_COUNTER_UNIT_CYCLES_KHR - the performance counter
-    unit is a value of cycles.
---
-
-[open,refpage='VkPerformanceCounterScopeKHR',desc='Supported counter scope types',type='enums']
---
-Performance counters have an associated scope.
-This scope describes the granularity of a performance counter.
-
-The performance counter scope types which may: be returned in
-slink:VkPerformanceCounterKHR::pname:scope are:
-
-include::{generated}/api/enums/VkPerformanceCounterScopeKHR.txt[]
-
-  * ename:VK_PERFORMANCE_COUNTER_SCOPE_COMMAND_BUFFER_KHR - the performance
-    counter scope is a single complete command buffer.
-  * ename:VK_PERFORMANCE_COUNTER_SCOPE_RENDER_PASS_KHR - the performance
-    counter scope is zero or more complete render passes.
-    The performance query containing the performance counter must: begin and
-    end outside a render pass instance.
-  * ename:VK_PERFORMANCE_COUNTER_SCOPE_COMMAND_KHR - the performance counter
-    scope is zero or more commands.
---
-
-[open,refpage='VkPerformanceCounterStorageKHR',desc='Supported counter storage types',type='enums']
---
-Performance counters have an associated storage.
-This storage describes the payload of a counter result.
-
-The performance counter storage types which may: be returned in
-slink:VkPerformanceCounterKHR::pname:storage are:
-
-include::{generated}/api/enums/VkPerformanceCounterStorageKHR.txt[]
-
-  * ename:VK_PERFORMANCE_COUNTER_STORAGE_INT32_KHR - the performance counter
-    storage is a 32-bit signed integer.
-  * ename:VK_PERFORMANCE_COUNTER_STORAGE_INT64_KHR - the performance counter
-    storage is a 64-bit signed integer.
-  * ename:VK_PERFORMANCE_COUNTER_STORAGE_UINT32_KHR - the performance
-    counter storage is a 32-bit unsigned integer.
-  * ename:VK_PERFORMANCE_COUNTER_STORAGE_UINT64_KHR - the performance
-    counter storage is a 64-bit unsigned integer.
-  * ename:VK_PERFORMANCE_COUNTER_STORAGE_FLOAT32_KHR - the performance
-    counter storage is a 32-bit floating-point.
-  * ename:VK_PERFORMANCE_COUNTER_STORAGE_FLOAT64_KHR - the performance
-    counter storage is a 64-bit floating-point.
---
-
-[open,refpage='VkPerformanceCounterDescriptionKHR',desc='Structure providing more detailed information about a counter',type='structs']
---
-The sname:VkPerformanceCounterDescriptionKHR structure is defined as:
-
-include::{generated}/api/structs/VkPerformanceCounterDescriptionKHR.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:flags is a bitmask of
-    elink:VkPerformanceCounterDescriptionFlagBitsKHR indicating the usage
-    behavior for the counter.
-  * pname:name is an array of size ename:VK_MAX_DESCRIPTION_SIZE, containing
-    a null-terminated UTF-8 string specifying the name of the counter.
-  * pname:category is an array of size ename:VK_MAX_DESCRIPTION_SIZE,
-    containing a null-terminated UTF-8 string specifying the category of the
-    counter.
-  * pname:description is an array of size ename:VK_MAX_DESCRIPTION_SIZE,
-    containing a null-terminated UTF-8 string specifying the description of
-    the counter.
-
-include::{generated}/validity/structs/VkPerformanceCounterDescriptionKHR.txt[]
---
-
-[open,refpage='VkPerformanceCounterDescriptionFlagBitsKHR',desc='Bitmask specifying usage behavior for a counter',type='enums']
---
-Bits which can: be set in
-slink:VkPerformanceCounterDescriptionKHR::pname:flags to specify usage
-behavior for a performance counter are:
-
-include::{generated}/api/enums/VkPerformanceCounterDescriptionFlagBitsKHR.txt[]
-
-  * ename:VK_PERFORMANCE_COUNTER_DESCRIPTION_PERFORMANCE_IMPACTING_BIT_KHR
-    specifies that recording the counter may: have a noticeable performance
-    impact.
-  * ename:VK_PERFORMANCE_COUNTER_DESCRIPTION_CONCURRENTLY_IMPACTED_BIT_KHR
-    specifies that concurrently recording the counter while other submitted
-    command buffers are running may: impact the accuracy of the recording.
---
-
-[open,refpage='VkPerformanceCounterDescriptionFlagsKHR',desc='Bitmask of VkPerformanceCounterDescriptionFlagBitsKHR',type='flags']
---
-include::{generated}/api/flags/VkPerformanceCounterDescriptionFlagsKHR.txt[]
-
-tlink:VkPerformanceCounterDescriptionFlagsKHR is a bitmask type for setting
-a mask of zero or more elink:VkPerformanceCounterDescriptionFlagBitsKHR.
---
diff --git a/registry/vulkan/chapters/VK_KHR_pipeline_executable_properties/pipelines.txt b/registry/vulkan/chapters/VK_KHR_pipeline_executable_properties/pipelines.txt
deleted file mode 100644
index ce01b17..0000000
--- a/registry/vulkan/chapters/VK_KHR_pipeline_executable_properties/pipelines.txt
+++ /dev/null
@@ -1,335 +0,0 @@
-// Copyright 2019-2021 The Khronos Group, Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-// This section is included inside the Pipelines chapter (pipelines.txt)
-
-[open,refpage='vkGetPipelineExecutablePropertiesKHR',desc='Get the executables associated with a pipeline',type='protos']
---
-When a pipeline is created, its state and shaders are compiled into zero or
-more device-specific executables, which are used when executing commands
-against that pipeline.
-To query the properties of these pipeline executables, call:
-
-include::{generated}/api/protos/vkGetPipelineExecutablePropertiesKHR.txt[]
-
-  * pname:device is the device that created the pipeline.
-  * pname:pPipelineInfo describes the pipeline being queried.
-  * pname:pExecutableCount is a pointer to an integer related to the number
-    of pipeline executables available or queried, as described below.
-  * pname:pProperties is either `NULL` or a pointer to an array of
-    slink:VkPipelineExecutablePropertiesKHR structures.
-
-If pname:pProperties is `NULL`, then the number of pipeline executables
-associated with the pipeline is returned in pname:pExecutableCount.
-Otherwise, pname:pExecutableCount must: point to a variable set by the user
-to the number of elements in the pname:pProperties array, and on return the
-variable is overwritten with the number of structures actually written to
-pname:pProperties.
-If pname:pExecutableCount is less than the number of pipeline executables
-associated with the pipeline, at most pname:pExecutableCount structures will
-be written, and ename:VK_INCOMPLETE will be returned instead of
-ename:VK_SUCCESS, to indicate that not all the available properties were
-returned.
-
-.Valid Usage
-****
-  * [[VUID-vkGetPipelineExecutablePropertiesKHR-pipelineExecutableInfo-03270]]
-    <<features-pipelineExecutableInfo, pname:pipelineExecutableInfo>> must:
-    be enabled
-  * [[VUID-vkGetPipelineExecutablePropertiesKHR-pipeline-03271]]
-    pname:pipeline member of pname:pPipelineInfo must: have been created
-    with pname:device
-****
-
-include::{generated}/validity/protos/vkGetPipelineExecutablePropertiesKHR.txt[]
---
-
-[open,refpage='VkPipelineInfoKHR',desc='Structure describing a pipeline',type='structs']
---
-The sname:VkPipelineInfoKHR structure is defined as:
-
-include::{generated}/api/structs/VkPipelineInfoKHR.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:pipeline is a sname:VkPipeline handle.
-
-include::{generated}/validity/structs/VkPipelineInfoKHR.txt[]
---
-
-[open,refpage='VkPipelineExecutablePropertiesKHR',desc='Structure describing a pipeline executable',type='structs']
---
-The sname:VkPipelineExecutablePropertiesKHR structure is defined as:
-
-include::{generated}/api/structs/VkPipelineExecutablePropertiesKHR.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:stages is a bitmask of zero or more elink:VkShaderStageFlagBits
-    indicating which shader stages (if any) were principally used as inputs
-    to compile this pipeline executable.
-  * pname:name is an array of ename:VK_MAX_DESCRIPTION_SIZE code:char
-    containing a null-terminated UTF-8 string which is a short human
-    readable name for this pipeline executable.
-  * pname:description is an array of ename:VK_MAX_DESCRIPTION_SIZE code:char
-    containing a null-terminated UTF-8 string which is a human readable
-    description for this pipeline executable.
-  * pname:subgroupSize is the subgroup size with which this pipeline
-    executable is dispatched.
-
-Not all implementations have a 1:1 mapping between shader stages and
-pipeline executables and some implementations may: reduce a given shader
-stage to fixed function hardware programming such that no pipeline
-executable is available.
-No guarantees are provided about the mapping between shader stages and
-pipeline executables and pname:stages should: be considered a best effort
-hint.
-Because the application cannot: rely on the pname:stages field to provide an
-exact description, pname:name and pname:description provide a human readable
-name and description which more accurately describes the given pipeline
-executable.
-
-include::{generated}/validity/structs/VkPipelineExecutablePropertiesKHR.txt[]
---
-
-[open,refpage='vkGetPipelineExecutableStatisticsKHR',desc='Get compile time statistics associated with a pipeline executable',type='protos']
---
-Each pipeline executable may: have a set of statistics associated with it
-that are generated by the pipeline compilation process.
-These statistics may: include things such as instruction counts, amount of
-spilling (if any), maximum number of simultaneous threads, or anything else
-which may: aid developers in evaluating the expected performance of a
-shader.
-To query the compile-time statistics associated with a pipeline executable,
-call:
-
-include::{generated}/api/protos/vkGetPipelineExecutableStatisticsKHR.txt[]
-
-  * pname:device is the device that created the pipeline.
-  * pname:pExecutableInfo describes the pipeline executable being queried.
-  * pname:pStatisticCount is a pointer to an integer related to the number
-    of statistics available or queried, as described below.
-  * pname:pStatistics is either `NULL` or a pointer to an array of
-    slink:VkPipelineExecutableStatisticKHR structures.
-
-If pname:pStatistics is `NULL`, then the number of statistics associated
-with the pipeline executable is returned in pname:pStatisticCount.
-Otherwise, pname:pStatisticCount must: point to a variable set by the user
-to the number of elements in the pname:pStatistics array, and on return the
-variable is overwritten with the number of structures actually written to
-pname:pStatistics.
-If pname:pStatisticCount is less than the number of statistics associated
-with the pipeline executable, at most pname:pStatisticCount structures will
-be written, and ename:VK_INCOMPLETE will be returned instead of
-ename:VK_SUCCESS, to indicate that not all the available statistics were
-returned.
-
-.Valid Usage
-****
-  * [[VUID-vkGetPipelineExecutableStatisticsKHR-pipelineExecutableInfo-03272]]
-    <<features-pipelineExecutableInfo, pname:pipelineExecutableInfo>> must:
-    be enabled
-  * [[VUID-vkGetPipelineExecutableStatisticsKHR-pipeline-03273]]
-    pname:pipeline member of pname:pExecutableInfo must: have been created
-    with pname:device
-  * [[VUID-vkGetPipelineExecutableStatisticsKHR-pipeline-03274]]
-    pname:pipeline member of pname:pExecutableInfo must: have been created
-    with ename:VK_PIPELINE_CREATE_CAPTURE_STATISTICS_BIT_KHR
-****
-
-include::{generated}/validity/protos/vkGetPipelineExecutableStatisticsKHR.txt[]
---
-
-[open,refpage='VkPipelineExecutableInfoKHR',desc='Structure describing a pipeline executable to query for associated statistics or internal representations',type='structs']
---
-The sname:VkPipelineExecutableInfoKHR structure is defined as:
-
-include::{generated}/api/structs/VkPipelineExecutableInfoKHR.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:pipeline is the pipeline to query.
-  * pname:executableIndex is the index of the pipeline executable to query
-    in the array of executable properties returned by
-    flink:vkGetPipelineExecutablePropertiesKHR.
-
-.Valid Usage
-****
-  * [[VUID-VkPipelineExecutableInfoKHR-executableIndex-03275]]
-    pname:executableIndex must: be less than the number of pipeline
-    executables associated with pname:pipeline as returned in the
-    pname:pExecutableCount parameter of
-    fname:vkGetPipelineExecutablePropertiesKHR
-****
-
-include::{generated}/validity/structs/VkPipelineExecutableInfoKHR.txt[]
---
-
-[open,refpage='VkPipelineExecutableStatisticKHR',desc='Structure describing a compile-time pipeline executable statistic',type='structs']
---
-The sname:VkPipelineExecutableStatisticKHR structure is defined as:
-
-include::{generated}/api/structs/VkPipelineExecutableStatisticKHR.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:name is an array of ename:VK_MAX_DESCRIPTION_SIZE code:char
-    containing a null-terminated UTF-8 string which is a short human
-    readable name for this statistic.
-  * pname:description is an array of ename:VK_MAX_DESCRIPTION_SIZE code:char
-    containing a null-terminated UTF-8 string which is a human readable
-    description for this statistic.
-  * pname:format is a elink:VkPipelineExecutableStatisticFormatKHR value
-    specifying the format of the data found in pname:value.
-  * pname:value is the value of this statistic.
-
-include::{generated}/validity/structs/VkPipelineExecutableStatisticKHR.txt[]
---
-
-[open,refpage='VkPipelineExecutableStatisticFormatKHR',desc='Enum describing a pipeline executable statistic's data format',type='enums']
---
-The ename:VkPipelineExecutableStatisticFormatKHR enum is defined as:
-
-include::{generated}/api/enums/VkPipelineExecutableStatisticFormatKHR.txt[]
-
-  * ename:VK_PIPELINE_EXECUTABLE_STATISTIC_FORMAT_BOOL32_KHR specifies that
-    the statistic is returned as a 32-bit boolean value which must: be
-    either ename:VK_TRUE or ename:VK_FALSE and should: be read from the
-    fname:b32 field of sname:VkPipelineExecutableStatisticValueKHR.
-  * ename:VK_PIPELINE_EXECUTABLE_STATISTIC_FORMAT_INT64_KHR specifies that
-    the statistic is returned as a signed 64-bit integer and should: be read
-    from the fname:i64 field of sname:VkPipelineExecutableStatisticValueKHR.
-  * ename:VK_PIPELINE_EXECUTABLE_STATISTIC_FORMAT_UINT64_KHR specifies that
-    the statistic is returned as an unsigned 64-bit integer and should: be
-    read from the fname:u64 field of
-    sname:VkPipelineExecutableStatisticValueKHR.
-  * ename:VK_PIPELINE_EXECUTABLE_STATISTIC_FORMAT_FLOAT64_KHR specifies that
-    the statistic is returned as a 64-bit floating-point value and should:
-    be read from the fname:f64 field of
-    sname:VkPipelineExecutableStatisticValueKHR.
---
-
-[open,refpage='VkPipelineExecutableStatisticValueKHR',desc='A union describing a pipeline executable statistic's value',type='structs']
---
-The sname:VkPipelineExecutableStatisticValueKHR union is defined as:
-
-include::{generated}/api/structs/VkPipelineExecutableStatisticValueKHR.txt[]
-
-  * pname:b32 is the 32-bit boolean value if the
-    ename:VkPipelineExecutableStatisticFormatKHR is
-    ename:VK_PIPELINE_EXECUTABLE_STATISTIC_FORMAT_BOOL32_KHR.
-  * pname:i64 is the signed 64-bit integer value if the
-    ename:VkPipelineExecutableStatisticFormatKHR is
-    ename:VK_PIPELINE_EXECUTABLE_STATISTIC_FORMAT_INT64_KHR.
-  * pname:u64 is the unsigned 64-bit integer value if the
-    ename:VkPipelineExecutableStatisticFormatKHR is
-    ename:VK_PIPELINE_EXECUTABLE_STATISTIC_FORMAT_UINT64_KHR.
-  * pname:f64 is the 64-bit floating-point value if the
-    ename:VkPipelineExecutableStatisticFormatKHR is
-    ename:VK_PIPELINE_EXECUTABLE_STATISTIC_FORMAT_FLOAT64_KHR.
-
-include::{generated}/validity/structs/VkPipelineExecutableStatisticValueKHR.txt[]
---
-
-[open,refpage='vkGetPipelineExecutableInternalRepresentationsKHR',desc='Get internal representations of the pipeline executable',type='protos']
---
-Each pipeline executable may: have one or more text or binary internal
-representations associated with it which are generated as part of the
-compile process.
-These may: include the final shader assembly, a binary form of the compiled
-shader, or the shader compiler's internal representation at any number of
-intermediate compile steps.
-To query the internal representations associated with a pipeline executable,
-call:
-
-include::{generated}/api/protos/vkGetPipelineExecutableInternalRepresentationsKHR.txt[]
-
-  * pname:device is the device that created the pipeline.
-  * pname:pExecutableInfo describes the pipeline executable being queried.
-  * pname:pInternalRepresentationCount is a pointer to an integer related to
-    the number of internal representations available or queried, as
-    described below.
-  * pname:pInternalRepresentations is either `NULL` or a pointer to an array
-    of slink:VkPipelineExecutableInternalRepresentationKHR structures.
-
-If pname:pInternalRepresentations is `NULL`, then the number of internal
-representations associated with the pipeline executable is returned in
-pname:pInternalRepresentationCount.
-Otherwise, pname:pInternalRepresentationCount must: point to a variable set
-by the user to the number of elements in the pname:pInternalRepresentations
-array, and on return the variable is overwritten with the number of
-structures actually written to pname:pInternalRepresentations.
-If pname:pInternalRepresentationCount is less than the number of internal
-representations associated with the pipeline executable, at most
-pname:pInternalRepresentationCount structures will be written, and
-ename:VK_INCOMPLETE will be returned instead of ename:VK_SUCCESS, to
-indicate that not all the available representations were returned.
-
-While the details of the internal representations remain
-implementation-dependent, the implementation should: order the internal
-representations in the order in which they occur in the compiled pipeline
-with the final shader assembly (if any) last.
-
-.Valid Usage
-****
-  * [[VUID-vkGetPipelineExecutableInternalRepresentationsKHR-pipelineExecutableInfo-03276]]
-    <<features-pipelineExecutableInfo, pname:pipelineExecutableInfo>> must:
-    be enabled
-  * [[VUID-vkGetPipelineExecutableInternalRepresentationsKHR-pipeline-03277]]
-    pname:pipeline member of pname:pExecutableInfo must: have been created
-    with pname:device
-  * [[VUID-vkGetPipelineExecutableInternalRepresentationsKHR-pipeline-03278]]
-    pname:pipeline member of pname:pExecutableInfo must: have been created
-    with ename:VK_PIPELINE_CREATE_CAPTURE_INTERNAL_REPRESENTATIONS_BIT_KHR
-****
-
-include::{generated}/validity/protos/vkGetPipelineExecutableInternalRepresentationsKHR.txt[]
---
-
-[open,refpage='VkPipelineExecutableInternalRepresentationKHR',desc='Structure describing the textual form of a pipeline executable internal representation',type='structs']
---
-The sname:VkPipelineExecutableInternalRepresentationKHR structure is defined
-as:
-
-include::{generated}/api/structs/VkPipelineExecutableInternalRepresentationKHR.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:name is an array of ename:VK_MAX_DESCRIPTION_SIZE code:char
-    containing a null-terminated UTF-8 string which is a short human
-    readable name for this internal representation.
-  * pname:description is an array of ename:VK_MAX_DESCRIPTION_SIZE code:char
-    containing a null-terminated UTF-8 string which is a human readable
-    description for this internal representation.
-  * pname:isText specifies whether the returned data is text or opaque data.
-    If pname:isText is ename:VK_TRUE then the data returned in pname:pData
-    is text and is guaranteed to be a null-terminated UTF-8 string.
-  * pname:dataSize is an integer related to the size, in bytes, of the
-    internal representation's data, as described below.
-  * pname:pData is either `NULL` or a pointer to a block of data into which
-    the implementation will write the internal representation.
-
-If pname:pData is `NULL`, then the size, in bytes, of the internal
-representation data is returned in pname:dataSize.
-Otherwise, pname:dataSize must be the size of the buffer, in bytes, pointed
-to by pname:pData and on return pname:dataSize is overwritten with the
-number of bytes of data actually written to pname:pData including any
-trailing null character.
-If pname:dataSize is less than the size, in bytes, of the internal
-representation's data, at most pname:dataSize bytes of data will be written
-to pname:pData, and ename:VK_INCOMPLETE will be returned instead of
-ename:VK_SUCCESS, to indicate that not all the available representation was
-returned.
-
-If pname:isText is ename:VK_TRUE and pname:pData is not `NULL` and
-pname:dataSize is not zero, the last byte written to pname:pData will be a
-null character.
-
-include::{generated}/validity/structs/VkPipelineExecutableInternalRepresentationKHR.txt[]
---
diff --git a/registry/vulkan/chapters/VK_KHR_present_wait/WaitForPresent.txt b/registry/vulkan/chapters/VK_KHR_present_wait/WaitForPresent.txt
deleted file mode 100644
index ba09b5b..0000000
--- a/registry/vulkan/chapters/VK_KHR_present_wait/WaitForPresent.txt
+++ /dev/null
@@ -1,68 +0,0 @@
-// Copyright 2019-2021 The Khronos Group, Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-[open,refpage='vkWaitForPresentKHR',desc='Wait for presentation',type='protos']
---
-When the <<features-presentWait, pname:presentWait>> feature is enabled, an
-application can: wait for an image to be presented to the user by first
-specifying a presentId for the target presentation by adding a
-sname:VkPresentIdKHR structure to the pname:pNext chain of the
-slink:VkPresentInfoKHR structure and then waiting for that presentation to
-complete by calling:
-
-include::{generated}/api/protos/vkWaitForPresentKHR.txt[]
-
-  * pname:device is the device associated with pname:swapchain.
-  * pname:swapchain is the non-retired swapchain on which an image was
-    queued for presentation.
-  * pname:presentId is the presentation presentId to wait for.
-  * pname:timeout is the timeout period in units of nanoseconds.
-    pname:timeout is adjusted to the closest value allowed by the
-    implementation-dependent timeout accuracy, which may: be substantially
-    longer than one nanosecond, and may: be longer than the requested
-    period.
-
-fname:vkWaitForPresentKHR waits for the presentId associated with
-pname:swapchain to be increased in value so that it is at least equal to
-pname:presentId.
-
-For ename:VK_PRESENT_MODE_MAILBOX_KHR (or other present mode where images
-may be replaced in the presentation queue) any wait of this type associated
-with such an image must: be signaled no later than a wait associated with
-the replacing image would be signaled.
-
-When the presentation has completed, the presentId associated with the
-related pname:pSwapchains entry will be increased in value so that it is at
-least equal to the value provided in the sname:VkPresentIdKHR structure.
-
-There is no requirement for any precise timing relationship between the
-presentation of the image to the user and the update of the presentId value,
-but implementations should: make this as close as possible to the
-presentation of the first pixel in the new image to the user.
-
-The call to fname:vkWaitForPresentKHR will block until either the presentId
-associated with pname:swapchain is greater than or equal to pname:presentId,
-or pname:timeout nanoseconds passes.
-When the swapchain becomes OUT_OF_DATE, the call will either return
-ename:VK_SUCCESS (if the image was delivered to the presentation engine and
-may have been presented to the user) or will return early with status
-ename:VK_ERROR_OUT_OF_DATE_KHR (if the image was not presented to the user).
-
-As an exception to the normal rules for objects which are externally
-synchronized, the pname:swapchain passed to fname:vkWaitForPresentKHR may:
-be simultaneously used by other threads in calls to functions other than
-flink:vkDestroySwapchainKHR.
-Access to the swapchain data associated with this extension must: be atomic
-within the implementation.
-
-.Valid Usage
-****
-  * [[VUID-vkWaitForPresentKHR-swapchain-04997]]
-    pname:swapchain must: not be in the retired state
-  * [[VUID-vkWaitForPresentKHR-presentWait-06234]]
-    The <<features-presentWait, pname:presentWait>> feature must: be enabled
-****
-
-include::{generated}/validity/protos/vkWaitForPresentKHR.txt[]
---
diff --git a/registry/vulkan/chapters/VK_KHR_present_wait/present_wait.txt b/registry/vulkan/chapters/VK_KHR_present_wait/present_wait.txt
deleted file mode 100644
index 21f1f93..0000000
--- a/registry/vulkan/chapters/VK_KHR_present_wait/present_wait.txt
+++ /dev/null
@@ -1,36 +0,0 @@
-// Copyright 2018-2021 The Khronos Group, Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-[[present-wait]]
-== Present Wait
-
-Applications wanting to control the pacing of the application by monitoring
-when presentation processes have completed to limit the number of
-outstanding images queued for presentation, need to have a method of being
-signaled during the presentation process.
-
-ifdef::VK_GOOGLE_display_timing,VK_KHR_present_timing[]
-Using
-ifdef::VK_KHR_present_timing[]
-the `VK_KHR_present_timing` extension
-ifdef::VK_GOOGLE_display_timing[or]
-endif::VK_KHR_present_timing[]
-ifdef::VK_GOOGLE_display_timing[]
-the `VK_GOOGLE_display_timing` extension
-endif::VK_GOOGLE_display_timing[]
-applications can discover when images were presented, but only
-asynchronously.
-endif::VK_GOOGLE_display_timing,VK_KHR_present_timing[]
-
-Providing a mechanism which allows applications to block, waiting for a
-specific step of the presentation process to complete allows them to control
-the amount of outstanding work (and hence the potential lag in responding to
-user input or changes in the rendering environment).
-
-The `apiext:VK_KHR_present_wait` extension allows applications to tell the
-presentation engine at the flink:vkQueuePresentKHR call that it plans on
-waiting for presentation by passing a slink:VkPresentIdKHR structure.
-The pname:presentId passed in that structure may then be passed to a future
-flink:vkWaitForPresentKHR call to cause the application to block until that
-presentation is finished.
diff --git a/registry/vulkan/chapters/VK_KHR_shared_presentable_image/wsi.txt b/registry/vulkan/chapters/VK_KHR_shared_presentable_image/wsi.txt
deleted file mode 100644
index 4718b2f..0000000
--- a/registry/vulkan/chapters/VK_KHR_shared_presentable_image/wsi.txt
+++ /dev/null
@@ -1,81 +0,0 @@
-// Copyright 2014-2021 The Khronos Group, Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-If a swapchain is created with pname:presentMode set to either
-ename:VK_PRESENT_MODE_SHARED_DEMAND_REFRESH_KHR or
-ename:VK_PRESENT_MODE_SHARED_CONTINUOUS_REFRESH_KHR, a single presentable
-image can: be acquired, referred to as a shared presentable image.
-A shared presentable image may: be concurrently accessed by the application
-and the presentation engine, without transitioning the image's layout after
-it is initially presented.
-
-  * With ename:VK_PRESENT_MODE_SHARED_DEMAND_REFRESH_KHR, the presentation
-    engine is only required to update to the latest contents of a shared
-    presentable image after a present.
-    The application must: call fname:vkQueuePresentKHR to guarantee an
-    update.
-    However, the presentation engine may: update from it at any time.
-  * With ename:VK_PRESENT_MODE_SHARED_CONTINUOUS_REFRESH_KHR, the
-    presentation engine will automatically present the latest contents of a
-    shared presentable image during every refresh cycle.
-    The application is only required to make one initial call to
-    fname:vkQueuePresentKHR, after which the presentation engine will update
-    from it without any need for further present calls.
-    The application can: indicate the image contents have been updated by
-    calling fname:vkQueuePresentKHR, but this does not guarantee the timing
-    of when updates will occur.
-
-The presentation engine may: access a shared presentable image at any time
-after it is first presented.
-To avoid tearing, an application should: coordinate access with the
-presentation engine.
-This requires presentation engine timing information through
-platform-specific mechanisms and ensuring that color attachment writes are
-made available during the portion of the presentation engine’s refresh cycle
-they are intended for.
-
-[NOTE]
-.Note
-====
-The `VK_KHR_shared_presentable_image` extension does not provide
-functionality for determining the timing of the presentation engine's
-refresh cycles.
-====
-
-[open,refpage='vkGetSwapchainStatusKHR',desc='Get a swapchain\'s status',type='protos']
---
-In order to query a swapchain's status when rendering to a shared
-presentable image, call:
-include::{generated}/api/protos/vkGetSwapchainStatusKHR.txt[]
-
-  * pname:device is the device associated with pname:swapchain.
-  * pname:swapchain is the swapchain to query.
-
-include::{generated}/validity/protos/vkGetSwapchainStatusKHR.txt[]
---
-
-The possible return values for fname:vkGetSwapchainStatusKHR should: be
-interpreted as follows:
-
-  * ename:VK_SUCCESS specifies the presentation engine is presenting the
-    contents of the shared presentable image, as per the swapchain's
-    elink:VkPresentModeKHR.
-  * ename:VK_SUBOPTIMAL_KHR the swapchain no longer matches the surface
-    properties exactly, but the presentation engine is presenting the
-    contents of the shared presentable image, as per the swapchain's
-    elink:VkPresentModeKHR.
-  * ename:VK_ERROR_OUT_OF_DATE_KHR the surface has changed in such a way
-    that it is no longer compatible with the swapchain.
-  * ename:VK_ERROR_SURFACE_LOST_KHR the surface is no longer available.
-
-[NOTE]
-.Note
-====
-The swapchain state may: be cached by implementations, so applications
-should: regularly call fname:vkGetSwapchainStatusKHR when using a swapchain
-with elink:VkPresentModeKHR set to
-ename:VK_PRESENT_MODE_SHARED_CONTINUOUS_REFRESH_KHR.
-====
-
-
diff --git a/registry/vulkan/chapters/VK_KHR_surface/wsi.txt b/registry/vulkan/chapters/VK_KHR_surface/wsi.txt
deleted file mode 100644
index f140c15..0000000
--- a/registry/vulkan/chapters/VK_KHR_surface/wsi.txt
+++ /dev/null
@@ -1,1538 +0,0 @@
-// Copyright 2014-2021 The Khronos Group, Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-[[wsi]]
-= Window System Integration (WSI)
-
-This chapter discusses the window system integration (WSI) between the
-Vulkan API and the various forms of displaying the results of rendering to a
-user.
-Since the Vulkan API can: be used without displaying results, WSI is
-provided through the use of optional Vulkan extensions.
-This chapter provides an overview of WSI.
-See the appendix for additional details of each WSI extension, including
-which extensions must: be enabled in order to use each of the functions
-described in this chapter.
-
-
-== WSI Platform
-
-A platform is an abstraction for a window system, OS, etc.
-Some examples include MS Windows, Android, and Wayland.
-The Vulkan API may: be integrated in a unique manner for each platform.
-
-The Vulkan API does not define any type of platform object.
-Platform-specific WSI extensions are defined, each containing
-platform-specific functions for using WSI.
-Use of these extensions is guarded by preprocessor symbols as defined in the
-<<boilerplate-wsi-header,Window System-Specific Header Control>> appendix.
-
-In order for an application to be compiled to use WSI with a given platform,
-it must either:
-
-  * `#define` the appropriate preprocessor symbol prior to including the
-    `{full_header}` header file, or
-  * include `{core_header}` and any native platform headers, followed by the
-    appropriate platform-specific header.
-
-The preprocessor symbols and platform-specific headers are defined in the
-<<boilerplate-wsi-header-table, Window System Extensions and Headers>>
-table.
-
-Each platform-specific extension is an instance extension.
-The application must: enable instance extensions with fname:vkCreateInstance
-before using them.
-
-
-== WSI Surface
-
-[open,refpage='VkSurfaceKHR',desc='Opaque handle to a surface object',type='handles']
---
-Native platform surface or window objects are abstracted by surface objects,
-which are represented by sname:VkSurfaceKHR handles:
-
-include::{generated}/api/handles/VkSurfaceKHR.txt[]
-
-The `VK_KHR_surface` extension declares the sname:VkSurfaceKHR object, and
-provides a function for destroying sname:VkSurfaceKHR objects.
-Separate platform-specific extensions each provide a function for creating a
-sname:VkSurfaceKHR object for the respective platform.
-From the application's perspective this is an opaque handle, just like the
-handles of other Vulkan objects.
-
-ifdef::implementation-guide[]
-[NOTE]
-.Note
-====
-On certain platforms, the Vulkan loader and ICDs may: have conventions that
-treat the handle as a pointer to a structure containing the
-platform-specific information about the surface.
-This will be described in the documentation for the loader-ICD interface,
-and in the `vk_icd.h` header file of the LoaderAndTools source-code
-repository.
-This does not affect the loader-layer interface; layers may: wrap
-sname:VkSurfaceKHR objects.
-====
-endif::implementation-guide[]
---
-
-ifdef::editing-notes[]
-[NOTE]
-.editing-note
-====
-TODO: Consider replacing the above note editing note with a pointer to the
-loader specification, when it exists.
-However, the information is not relevant to users of the API nor does it
-affect conformance of a Vulkan implementation.
-====
-endif::editing-notes[]
-
-ifdef::VK_KHR_android_surface[]
-include::{chapters}/VK_KHR_android_surface/platformCreateSurface_android.txt[]
-endif::VK_KHR_android_surface[]
-
-ifdef::VK_KHR_wayland_surface[]
-include::{chapters}/VK_KHR_wayland_surface/platformCreateSurface_wayland.txt[]
-endif::VK_KHR_wayland_surface[]
-
-ifdef::VK_KHR_win32_surface[]
-include::{chapters}/VK_KHR_win32_surface/platformCreateSurface_win32.txt[]
-endif::VK_KHR_win32_surface[]
-
-ifdef::VK_KHR_xcb_surface[]
-include::{chapters}/VK_KHR_xcb_surface/platformCreateSurface_xcb.txt[]
-endif::VK_KHR_xcb_surface[]
-
-ifdef::VK_KHR_xlib_surface[]
-include::{chapters}/VK_KHR_xlib_surface/platformCreateSurface_xlib.txt[]
-endif::VK_KHR_xlib_surface[]
-
-ifdef::VK_EXT_directfb_surface[]
-include::{chapters}/VK_EXT_directfb_surface/platformCreateSurface_directfb.txt[]
-endif::VK_EXT_directfb_surface[]
-
-ifdef::VK_FUCHSIA_imagepipe_surface[]
-include::{chapters}/VK_FUCHSIA_imagepipe_surface/platformCreateSurface_imagepipe.txt[]
-endif::VK_FUCHSIA_imagepipe_surface[]
-
-ifdef::VK_GGP_stream_descriptor_surface[]
-include::{chapters}/VK_GGP_stream_descriptor_surface/platformCreateSurface_streamdescriptor.txt[]
-endif::VK_GGP_stream_descriptor_surface[]
-
-ifdef::VK_MVK_ios_surface[]
-include::{chapters}/VK_MVK_ios_surface/platformCreateSurface_ios.txt[]
-endif::VK_MVK_ios_surface[]
-
-ifdef::VK_MVK_macos_surface[]
-include::{chapters}/VK_MVK_macos_surface/platformCreateSurface_macos.txt[]
-endif::VK_MVK_macos_surface[]
-
-ifdef::VK_NN_vi_surface[]
-include::{chapters}/VK_NN_vi_surface/platformCreateSurface_vi.txt[]
-endif::VK_NN_vi_surface[]
-
-ifdef::VK_EXT_metal_surface[]
-include::{chapters}/VK_EXT_metal_surface/platformCreateSurface_metal.txt[]
-endif::VK_EXT_metal_surface[]
-
-ifdef::VK_QNX_screen_surface[]
-include::{chapters}/VK_QNX_screen_surface/platformCreateSurface_screen.txt[]
-endif::VK_QNX_screen_surface[]
-
-=== Platform-Independent Information
-
-Once created, sname:VkSurfaceKHR objects can: be used in this and other
-extensions, in particular the `apiext:VK_KHR_swapchain` extension.
-
-Several WSI functions return ename:VK_ERROR_SURFACE_LOST_KHR if the surface
-becomes no longer available.
-After such an error, the surface (and any child swapchain, if one exists)
-should: be destroyed, as there is no way to restore them to a not-lost
-state.
-Applications may: attempt to create a new sname:VkSurfaceKHR using the same
-native platform window object, but whether such re-creation will succeed is
-platform-dependent and may: depend on the reason the surface became
-unavailable.
-A lost surface does not otherwise cause devices to be
-<<devsandqueues-lost-device,lost>>.
-
-[open,refpage='vkDestroySurfaceKHR',desc='Destroy a VkSurfaceKHR object',type='protos']
---
-To destroy a sname:VkSurfaceKHR object, call:
-
-include::{generated}/api/protos/vkDestroySurfaceKHR.txt[]
-
-  * pname:instance is the instance used to create the surface.
-  * pname:surface is the surface to destroy.
-  * pname:pAllocator is the allocator used for host memory allocated for the
-    surface object when there is no more specific allocator available (see
-    <<memory-allocation,Memory Allocation>>).
-
-Destroying a sname:VkSurfaceKHR merely severs the connection between Vulkan
-and the native surface, and does not imply destroying the native surface,
-closing a window, or similar behavior.
-
-.Valid Usage
-****
-  * [[VUID-vkDestroySurfaceKHR-surface-01266]]
-    All sname:VkSwapchainKHR objects created for pname:surface must: have
-    been destroyed prior to destroying pname:surface
-  * [[VUID-vkDestroySurfaceKHR-surface-01267]]
-    If sname:VkAllocationCallbacks were provided when pname:surface was
-    created, a compatible set of callbacks must: be provided here
-  * [[VUID-vkDestroySurfaceKHR-surface-01268]]
-    If no sname:VkAllocationCallbacks were provided when pname:surface was
-    created, pname:pAllocator must: be `NULL`
-****
-
-include::{generated}/validity/protos/vkDestroySurfaceKHR.txt[]
---
-
-ifdef::VK_KHR_display[]
-include::{chapters}/VK_KHR_display/display.txt[]
-endif::VK_KHR_display[]
-
-ifdef::VK_EXT_headless_surface[]
-include::{chapters}/VK_EXT_headless_surface/headless.txt[]
-endif::VK_EXT_headless_surface[]
-
-
-== Querying for WSI Support
-
-Not all physical devices will include WSI support.
-Within a physical device, not all queue families will support presentation.
-WSI support and compatibility can: be determined in a platform-neutral
-manner (which determines support for presentation to a particular surface
-object) and additionally may: be determined in platform-specific manners
-(which determine support for presentation on the specified physical device
-but do not guarantee support for presentation to a particular surface
-object).
-
-[open,refpage='vkGetPhysicalDeviceSurfaceSupportKHR',desc='Query if presentation is supported',type='protos']
---
-To determine whether a queue family of a physical device supports
-presentation to a given surface, call:
-
-include::{generated}/api/protos/vkGetPhysicalDeviceSurfaceSupportKHR.txt[]
-
-  * pname:physicalDevice is the physical device.
-  * pname:queueFamilyIndex is the queue family.
-  * pname:surface is the surface.
-  * pname:pSupported is a pointer to a basetype:VkBool32, which is set to
-    ename:VK_TRUE to indicate support, and ename:VK_FALSE otherwise.
-
-.Valid Usage
-****
-  * [[VUID-vkGetPhysicalDeviceSurfaceSupportKHR-queueFamilyIndex-01269]]
-    pname:queueFamilyIndex must: be less than
-    pname:pQueueFamilyPropertyCount returned by
-    fname:vkGetPhysicalDeviceQueueFamilyProperties for the given
-    pname:physicalDevice
-****
-
-include::{generated}/validity/protos/vkGetPhysicalDeviceSurfaceSupportKHR.txt[]
---
-
-ifdef::VK_KHR_android_surface[]
-include::{chapters}/VK_KHR_android_surface/platformQuerySupport_android.txt[]
-endif::VK_KHR_android_surface[]
-
-ifdef::VK_KHR_wayland_surface[]
-include::{chapters}/VK_KHR_wayland_surface/platformQuerySupport_wayland.txt[]
-endif::VK_KHR_wayland_surface[]
-
-ifdef::VK_KHR_win32_surface[]
-include::{chapters}/VK_KHR_win32_surface/platformQuerySupport_win32.txt[]
-endif::VK_KHR_win32_surface[]
-
-ifdef::VK_KHR_xcb_surface[]
-include::{chapters}/VK_KHR_xcb_surface/platformQuerySupport_xcb.txt[]
-endif::VK_KHR_xcb_surface[]
-
-ifdef::VK_KHR_xlib_surface[]
-include::{chapters}/VK_KHR_xlib_surface/platformQuerySupport_xlib.txt[]
-endif::VK_KHR_xlib_surface[]
-
-ifdef::VK_EXT_directfb_surface[]
-include::{chapters}/VK_EXT_directfb_surface/platformQuerySupport_directfb.txt[]
-endif::VK_EXT_directfb_surface[]
-
-ifdef::VK_FUCHSIA_imagepipe_surface[]
-include::{chapters}/VK_FUCHSIA_imagepipe_surface/platformQuerySupport_imagepipe.txt[]
-endif::VK_FUCHSIA_imagepipe_surface[]
-
-ifdef::VK_GGP_stream_descriptor_surface[]
-include::{chapters}/VK_GGP_stream_descriptor_surface/platformQuerySupport_streamdescriptor.txt[]
-endif::VK_GGP_stream_descriptor_surface[]
-
-ifdef::VK_MVK_ios_surface[]
-include::{chapters}/VK_MVK_ios_surface/platformQuerySupport_ios.txt[]
-endif::VK_MVK_ios_surface[]
-
-ifdef::VK_MVK_macos_surface[]
-include::{chapters}/VK_MVK_macos_surface/platformQuerySupport_macos.txt[]
-endif::VK_MVK_macos_surface[]
-
-ifdef::VK_NN_vi_surface[]
-include::{chapters}/VK_NN_vi_surface/platformQuerySupport_vi.txt[]
-endif::VK_NN_vi_surface[]
-
-ifdef::VK_QNX_screen_surface[]
-include::{chapters}/VK_QNX_screen_surface/platformQuerySupport_screen.txt[]
-endif::VK_QNX_screen_surface[]
-
-== Surface Queries
-
-The capabilities of a swapchain targeting a surface are the intersection of
-the capabilities of the WSI platform, the native window or display, and the
-physical device.
-The resulting capabilities can: be obtained with the queries listed below in
-this section.
-
-[NOTE]
-.Note
-====
-In addition to the surface capabilities as obtained by surface queries
-below, swapchain images are also subject to ordinary image creation limits
-as reported by flink:vkGetPhysicalDeviceImageFormatProperties.
-As an application is instructed by the appropriate Valid Usage sections,
-both the surface capabilities and the image creation limits have to be
-satisfied whenever swapchain images are created.
-====
-
-
-=== Surface Capabilities
-
-[open,refpage='vkGetPhysicalDeviceSurfaceCapabilitiesKHR',desc='Query surface capabilities',type='protos']
---
-:refpage: vkGetPhysicalDeviceSurfaceCapabilitiesKHR
-
-To query the basic capabilities of a surface, needed in order to create a
-swapchain, call:
-
-include::{generated}/api/protos/vkGetPhysicalDeviceSurfaceCapabilitiesKHR.txt[]
-
-  * pname:physicalDevice is the physical device that will be associated with
-    the swapchain to be created, as described for
-    flink:vkCreateSwapchainKHR.
-  * pname:surface is the surface that will be associated with the swapchain.
-  * pname:pSurfaceCapabilities is a pointer to a
-    slink:VkSurfaceCapabilitiesKHR structure in which the capabilities are
-    returned.
-
-.Valid Usage
-****
-include::{chapters}/commonvalidity/surface_physical_device_common.txt[]
-****
-
-include::{generated}/validity/protos/vkGetPhysicalDeviceSurfaceCapabilitiesKHR.txt[]
---
-
-[open,refpage='VkSurfaceCapabilitiesKHR',desc='Structure describing capabilities of a surface',type='structs']
---
-The sname:VkSurfaceCapabilitiesKHR structure is defined as:
-
-include::{generated}/api/structs/VkSurfaceCapabilitiesKHR.txt[]
-
-// These members are defined identically in VkSurfaceCapabilities2EXT, an
-// extendable structure version of this query, so they are just reused from
-// here.
-
-// tag::surface_capabilities_members[]
-  * pname:minImageCount is the minimum number of images the specified device
-    supports for a swapchain created for the surface, and will be at least
-    one.
-  * pname:maxImageCount is the maximum number of images the specified device
-    supports for a swapchain created for the surface, and will be either 0,
-    or greater than or equal to pname:minImageCount.
-    A value of 0 means that there is no limit on the number of images,
-    though there may: be limits related to the total amount of memory used
-    by presentable images.
-  * pname:currentExtent is the current width and height of the surface, or
-    the special value [eq]#(0xFFFFFFFF, 0xFFFFFFFF)# indicating that the
-    surface size will be determined by the extent of a swapchain targeting
-    the surface.
-  * pname:minImageExtent contains the smallest valid swapchain extent for
-    the surface on the specified device.
-    The pname:width and pname:height of the extent will each be less than or
-    equal to the corresponding pname:width and pname:height of
-    pname:currentExtent, unless pname:currentExtent has the special value
-    described above.
-  * pname:maxImageExtent contains the largest valid swapchain extent for the
-    surface on the specified device.
-    The pname:width and pname:height of the extent will each be greater than
-    or equal to the corresponding pname:width and pname:height of
-    pname:minImageExtent.
-    The pname:width and pname:height of the extent will each be greater than
-    or equal to the corresponding pname:width and pname:height of
-    pname:currentExtent, unless pname:currentExtent has the special value
-    described above.
-  * pname:maxImageArrayLayers is the maximum number of layers presentable
-    images can: have for a swapchain created for this device and surface,
-    and will be at least one.
-  * pname:supportedTransforms is a bitmask of
-    elink:VkSurfaceTransformFlagBitsKHR indicating the presentation
-    transforms supported for the surface on the specified device.
-    At least one bit will be set.
-  * pname:currentTransform is elink:VkSurfaceTransformFlagBitsKHR value
-    indicating the surface's current transform relative to the presentation
-    engine's natural orientation.
-  * pname:supportedCompositeAlpha is a bitmask of
-    elink:VkCompositeAlphaFlagBitsKHR, representing the alpha compositing
-    modes supported by the presentation engine for the surface on the
-    specified device, and at least one bit will be set.
-    Opaque composition can: be achieved in any alpha compositing mode by
-    either using an image format that has no alpha component, or by ensuring
-    that all pixels in the presentable images have an alpha value of 1.0.
-  * pname:supportedUsageFlags is a bitmask of elink:VkImageUsageFlagBits
-    representing the ways the application can: use the presentable images of
-    a swapchain created
-ifdef::VK_KHR_shared_presentable_image[]
-    with elink:VkPresentModeKHR set to ename:VK_PRESENT_MODE_IMMEDIATE_KHR,
-    ename:VK_PRESENT_MODE_MAILBOX_KHR, ename:VK_PRESENT_MODE_FIFO_KHR or
-    ename:VK_PRESENT_MODE_FIFO_RELAXED_KHR
-endif::VK_KHR_shared_presentable_image[]
-    for the surface on the specified device.
-    ename:VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT must: be included in the set.
-    Implementations may: support additional usages.
-// end::surface_capabilities_members[]
-
-ifdef::VK_KHR_shared_presentable_image[]
-[NOTE]
-.Note
-====
-Supported usage flags of a presentable image when using
-ename:VK_PRESENT_MODE_SHARED_DEMAND_REFRESH_KHR or
-ename:VK_PRESENT_MODE_SHARED_CONTINUOUS_REFRESH_KHR presentation mode are
-provided by
-slink:VkSharedPresentSurfaceCapabilitiesKHR::pname:sharedPresentSupportedUsageFlags.
-====
-endif::VK_KHR_shared_presentable_image[]
-
-[NOTE]
-.Note
-====
-Formulas such as [eq]#min(N, pname:maxImageCount)# are not correct, since
-pname:maxImageCount may: be zero.
-====
-
-include::{generated}/validity/structs/VkSurfaceCapabilitiesKHR.txt[]
---
-
-ifdef::VK_KHR_get_surface_capabilities2[]
-[open,refpage='vkGetPhysicalDeviceSurfaceCapabilities2KHR',desc='Reports capabilities of a surface on a physical device',type='protos']
---
-:refpage: vkGetPhysicalDeviceSurfaceCapabilities2KHR
-
-To query the basic capabilities of a surface defined by the core or
-extensions, call:
-
-include::{generated}/api/protos/vkGetPhysicalDeviceSurfaceCapabilities2KHR.txt[]
-
-  * pname:physicalDevice is the physical device that will be associated with
-    the swapchain to be created, as described for
-    flink:vkCreateSwapchainKHR.
-  * pname:pSurfaceInfo is a pointer to a
-    slink:VkPhysicalDeviceSurfaceInfo2KHR structure describing the surface
-    and other fixed parameters that would be consumed by
-    flink:vkCreateSwapchainKHR.
-  * pname:pSurfaceCapabilities is a pointer to a
-    slink:VkSurfaceCapabilities2KHR structure in which the capabilities are
-    returned.
-
-fname:vkGetPhysicalDeviceSurfaceCapabilities2KHR behaves similarly to
-flink:vkGetPhysicalDeviceSurfaceCapabilitiesKHR, with the ability to specify
-extended inputs via chained input structures, and to return extended
-information via chained output structures.
-
-ifdef::VK_EXT_full_screen_exclusive+VK_KHR_win32_surface[]
-.Valid Usage
-****
-include::{chapters}/commonvalidity/surface_info_physical_device_common.txt[]
-  * [[VUID-vkGetPhysicalDeviceSurfaceCapabilities2KHR-pNext-02671]]
-    If a slink:VkSurfaceCapabilitiesFullScreenExclusiveEXT structure is
-    included in the pname:pNext chain of pname:pSurfaceCapabilities, a
-    slink:VkSurfaceFullScreenExclusiveWin32InfoEXT structure must: be
-    included in the pname:pNext chain of pname:pSurfaceInfo
-****
-endif::VK_EXT_full_screen_exclusive+VK_KHR_win32_surface[]
-
-include::{generated}/validity/protos/vkGetPhysicalDeviceSurfaceCapabilities2KHR.txt[]
---
-
-[open,refpage='VkPhysicalDeviceSurfaceInfo2KHR',desc='Structure specifying a surface and related swapchain creation parameters',type='structs']
---
-The sname:VkPhysicalDeviceSurfaceInfo2KHR structure is defined as:
-
-include::{generated}/api/structs/VkPhysicalDeviceSurfaceInfo2KHR.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:surface is the surface that will be associated with the swapchain.
-
-The members of sname:VkPhysicalDeviceSurfaceInfo2KHR correspond to the
-arguments to flink:vkGetPhysicalDeviceSurfaceCapabilitiesKHR, with
-pname:sType and pname:pNext added for extensibility.
-
-ifdef::VK_EXT_full_screen_exclusive[]
-Additional capabilities of a surface may: be available to swapchains created
-with different full-screen exclusive settings - particularly if exclusive
-full-screen access is application controlled.
-These additional capabilities can: be queried by adding a
-slink:VkSurfaceFullScreenExclusiveInfoEXT structure to the pname:pNext chain
-of this structure when used to query surface properties.
-ifdef::VK_KHR_win32_surface[]
-Additionally, for Win32 surfaces with application controlled exclusive
-full-screen access, chaining a
-slink:VkSurfaceFullScreenExclusiveWin32InfoEXT structure may: also report
-additional surface capabilities.
-endif::VK_KHR_win32_surface[]
-These additional capabilities only apply to swapchains created with the same
-parameters included in the pname:pNext chain of
-slink:VkSwapchainCreateInfoKHR.
-endif::VK_EXT_full_screen_exclusive[]
-
-ifdef::VK_KHR_win32_surface+VK_EXT_full_screen_exclusive[]
-.Valid Usage
-****
-  * [[VUID-VkPhysicalDeviceSurfaceInfo2KHR-pNext-02672]]
-    If the pname:pNext chain includes a
-    slink:VkSurfaceFullScreenExclusiveInfoEXT structure with its
-    pname:fullScreenExclusive member set to
-    ename:VK_FULL_SCREEN_EXCLUSIVE_APPLICATION_CONTROLLED_EXT, and
-    pname:surface was created using flink:vkCreateWin32SurfaceKHR, a
-    slink:VkSurfaceFullScreenExclusiveWin32InfoEXT structure must: be
-    included in the pname:pNext chain
-****
-endif::VK_KHR_win32_surface+VK_EXT_full_screen_exclusive[]
-
-include::{generated}/validity/structs/VkPhysicalDeviceSurfaceInfo2KHR.txt[]
---
-
-ifdef::VK_EXT_full_screen_exclusive[]
-[open,refpage='VkSurfaceFullScreenExclusiveInfoEXT',desc='Structure specifying the preferred full-screen transition behavior',type='structs']
---
-If the pname:pNext chain of slink:VkSwapchainCreateInfoKHR includes a
-sname:VkSurfaceFullScreenExclusiveInfoEXT structure, then that structure
-specifies the application's preferred full-screen transition behavior.
-
-The sname:VkSurfaceFullScreenExclusiveInfoEXT structure is defined as:
-
-include::{generated}/api/structs/VkSurfaceFullScreenExclusiveInfoEXT.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:fullScreenExclusive is a elink:VkFullScreenExclusiveEXT value
-    specifying the preferred full-screen transition behavior.
-
-If this structure is not present, pname:fullScreenExclusive is considered to
-be ename:VK_FULL_SCREEN_EXCLUSIVE_DEFAULT_EXT.
-
-include::{generated}/validity/structs/VkSurfaceFullScreenExclusiveInfoEXT.txt[]
---
-
-[open,refpage='VkFullScreenExclusiveEXT',desc='Hint values an application can specify affecting full-screen transition behavior',type='enums']
---
-Possible values of
-sname:VkSurfaceFullScreenExclusiveInfoEXT::pname:fullScreenExclusive are:
-
-include::{generated}/api/enums/VkFullScreenExclusiveEXT.txt[]
-
-  * ename:VK_FULL_SCREEN_EXCLUSIVE_DEFAULT_EXT indicates the implementation
-    should: determine the appropriate full-screen method by whatever means
-    it deems appropriate.
-  * ename:VK_FULL_SCREEN_EXCLUSIVE_ALLOWED_EXT indicates the implementation
-    may: use full-screen exclusive mechanisms when available.
-    Such mechanisms may: result in better performance and/or the
-    availability of different presentation capabilities, but may: require a
-    more disruptive transition during swapchain initialization, first
-    presentation and/or destruction.
-  * ename:VK_FULL_SCREEN_EXCLUSIVE_DISALLOWED_EXT indicates the
-    implementation should: avoid using full-screen mechanisms which rely on
-    disruptive transitions.
-  * ename:VK_FULL_SCREEN_EXCLUSIVE_APPLICATION_CONTROLLED_EXT indicates the
-    application will manage full-screen exclusive mode by using the
-    flink:vkAcquireFullScreenExclusiveModeEXT and
-    flink:vkReleaseFullScreenExclusiveModeEXT commands.
---
-
-ifdef::VK_KHR_win32_surface[]
-[open,refpage='VkSurfaceFullScreenExclusiveWin32InfoEXT',desc='Structure specifying additional creation parameters specific to Win32 fullscreen exclusive mode',type='structs']
---
-The sname:VkSurfaceFullScreenExclusiveWin32InfoEXT structure is defined as:
-
-include::{generated}/api/structs/VkSurfaceFullScreenExclusiveWin32InfoEXT.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:hmonitor is the Win32 code:HMONITOR handle identifying the display
-    to create the surface with.
-
-[NOTE]
-.Note
-====
-If pname:hmonitor is invalidated (e.g. the monitor is unplugged) during the
-lifetime of a swapchain created with this structure, operations on that
-swapchain will return ename:VK_ERROR_OUT_OF_DATE_KHR.
-====
-
-[NOTE]
-.Note
-====
-It is the responsibility of the application to change the display settings
-of the targeted Win32 display using the appropriate platform APIs.
-Such changes may: alter the surface capabilities reported for the created
-surface.
-====
-
-.Valid Usage
-****
-  * [[VUID-VkSurfaceFullScreenExclusiveWin32InfoEXT-hmonitor-02673]]
-    pname:hmonitor must: be a valid code:HMONITOR
-****
-
-include::{generated}/validity/structs/VkSurfaceFullScreenExclusiveWin32InfoEXT.txt[]
---
-endif::VK_KHR_win32_surface[]
-endif::VK_EXT_full_screen_exclusive[]
-
-[open,refpage='VkSurfaceCapabilities2KHR',desc='Structure describing capabilities of a surface',type='structs']
---
-The sname:VkSurfaceCapabilities2KHR structure is defined as:
-
-include::{generated}/api/structs/VkSurfaceCapabilities2KHR.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:surfaceCapabilities is a slink:VkSurfaceCapabilitiesKHR structure
-    describing the capabilities of the specified surface.
-
-include::{generated}/validity/structs/VkSurfaceCapabilities2KHR.txt[]
---
-
-ifdef::VK_KHR_surface_protected_capabilities[]
-[open,refpage='VkSurfaceProtectedCapabilitiesKHR',desc='Structure describing capability of a surface to be protected',type='structs']
---
-An application queries if a protected slink:VkSurfaceKHR is displayable on a
-specific windowing system using sname:VkSurfaceProtectedCapabilitiesKHR,
-which can: be passed in pname:pNext parameter of
-sname:VkSurfaceCapabilities2KHR.
-
-The sname:VkSurfaceProtectedCapabilitiesKHR structure is defined as:
-
-include::{generated}/api/structs/VkSurfaceProtectedCapabilitiesKHR.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:supportsProtected specifies whether a protected swapchain created
-    from slink:VkPhysicalDeviceSurfaceInfo2KHR::pname:surface for a
-    particular windowing system can: be displayed on screen or not.
-    If pname:supportsProtected is ename:VK_TRUE, then creation of swapchains
-    with the ename:VK_SWAPCHAIN_CREATE_PROTECTED_BIT_KHR flag set must: be
-    supported for pname:surface.
-
-
-include::{generated}/validity/structs/VkSurfaceProtectedCapabilitiesKHR.txt[]
---
-endif::VK_KHR_surface_protected_capabilities[]
-
-ifdef::VK_KHR_shared_presentable_image[]
-[open,refpage='VkSharedPresentSurfaceCapabilitiesKHR',desc='Structure describing capabilities of a surface for shared presentation',type='structs']
---
-The sname:VkSharedPresentSurfaceCapabilitiesKHR structure is defined as:
-
-include::{generated}/api/structs/VkSharedPresentSurfaceCapabilitiesKHR.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:sharedPresentSupportedUsageFlags is a bitmask of
-    elink:VkImageUsageFlagBits representing the ways the application can:
-    use the shared presentable image from a swapchain created with
-    elink:VkPresentModeKHR set to
-    ename:VK_PRESENT_MODE_SHARED_DEMAND_REFRESH_KHR or
-    ename:VK_PRESENT_MODE_SHARED_CONTINUOUS_REFRESH_KHR for the surface on
-    the specified device.
-    ename:VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT must: be included in the set
-    but implementations may: support additional usages.
-
-include::{generated}/validity/structs/VkSharedPresentSurfaceCapabilitiesKHR.txt[]
---
-endif::VK_KHR_shared_presentable_image[]
-
-ifdef::VK_AMD_display_native_hdr[]
-[open,refpage='VkDisplayNativeHdrSurfaceCapabilitiesAMD',desc='Structure describing display native HDR specific capabilities of a surface',type='structs']
---
-The sname:VkDisplayNativeHdrSurfaceCapabilitiesAMD structure is defined as:
-
-include::{generated}/api/structs/VkDisplayNativeHdrSurfaceCapabilitiesAMD.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:localDimmingSupport specifies whether the surface supports local
-    dimming.
-    If this is ename:VK_TRUE, slink:VkSwapchainDisplayNativeHdrCreateInfoAMD
-    can: be used to explicitly enable or disable local dimming for the
-    surface.
-    Local dimming may also be overriden by flink:vkSetLocalDimmingAMD during
-    the lifetime of the swapchain.
-
-include::{generated}/validity/structs/VkDisplayNativeHdrSurfaceCapabilitiesAMD.txt[]
---
-endif::VK_AMD_display_native_hdr[]
-
-ifdef::VK_EXT_full_screen_exclusive[]
-[open,refpage='VkSurfaceCapabilitiesFullScreenExclusiveEXT',desc='Structure describing full screen exclusive capabilities of a surface',type='structs']
---
-The sname:VkSurfaceCapabilitiesFullScreenExclusiveEXT structure is defined
-as:
-
-include::{generated}/api/structs/VkSurfaceCapabilitiesFullScreenExclusiveEXT.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:fullScreenExclusiveControlSupported is a boolean describing
-    whether the surface is able to make use of exclusive full-screen access.
-
-This structure can: be included in the pname:pNext chain of
-slink:VkSurfaceCapabilities2KHR to determine support for exclusive
-full-screen access.
-If pname:fullScreenExclusiveSupported is ename:VK_FALSE, it indicates that
-exclusive full-screen access is not obtainable for this surface.
-
-Applications must: not attempt to create swapchains with
-ename:VK_FULL_SCREEN_EXCLUSIVE_APPLICATION_CONTROLLED_EXT set if
-pname:fullScreenExclusiveSupported is ename:VK_FALSE.
-
-include::{generated}/validity/structs/VkSurfaceCapabilitiesFullScreenExclusiveEXT.txt[]
---
-endif::VK_EXT_full_screen_exclusive[]
-endif::VK_KHR_get_surface_capabilities2[]
-
-ifdef::VK_EXT_display_surface_counter[]
-include::{chapters}/VK_EXT_display_surface_counter/surface_capabilities.txt[]
-endif::VK_EXT_display_surface_counter[]
-
-[open,refpage='VkSurfaceTransformFlagBitsKHR',desc='Presentation transforms supported on a device',type='enums']
---
-Bits which may: be set in
-slink:VkSurfaceCapabilitiesKHR::pname:supportedTransforms indicating the
-presentation transforms supported for the surface on the specified device,
-and possible values of
-slink:VkSurfaceCapabilitiesKHR::pname:currentTransform indicating the
-surface's current transform relative to the presentation engine's natural
-orientation, are:
-
-include::{generated}/api/enums/VkSurfaceTransformFlagBitsKHR.txt[]
-
-  * ename:VK_SURFACE_TRANSFORM_IDENTITY_BIT_KHR specifies that image content
-    is presented without being transformed.
-  * ename:VK_SURFACE_TRANSFORM_ROTATE_90_BIT_KHR specifies that image
-    content is rotated 90 degrees clockwise.
-  * ename:VK_SURFACE_TRANSFORM_ROTATE_180_BIT_KHR specifies that image
-    content is rotated 180 degrees clockwise.
-  * ename:VK_SURFACE_TRANSFORM_ROTATE_270_BIT_KHR specifies that image
-    content is rotated 270 degrees clockwise.
-  * ename:VK_SURFACE_TRANSFORM_HORIZONTAL_MIRROR_BIT_KHR specifies that
-    image content is mirrored horizontally.
-  * ename:VK_SURFACE_TRANSFORM_HORIZONTAL_MIRROR_ROTATE_90_BIT_KHR specifies
-    that image content is mirrored horizontally, then rotated 90 degrees
-    clockwise.
-  * ename:VK_SURFACE_TRANSFORM_HORIZONTAL_MIRROR_ROTATE_180_BIT_KHR
-    specifies that image content is mirrored horizontally, then rotated 180
-    degrees clockwise.
-  * ename:VK_SURFACE_TRANSFORM_HORIZONTAL_MIRROR_ROTATE_270_BIT_KHR
-    specifies that image content is mirrored horizontally, then rotated 270
-    degrees clockwise.
-  * ename:VK_SURFACE_TRANSFORM_INHERIT_BIT_KHR specifies that the
-    presentation transform is not specified, and is instead determined by
-    platform-specific considerations and mechanisms outside Vulkan.
---
-
-[open,refpage='VkSurfaceTransformFlagsKHR',desc='Bitmask of VkSurfaceTransformFlagBitsKHR',type='flags']
---
-include::{generated}/api/flags/VkSurfaceTransformFlagsKHR.txt[]
-
-tname:VkSurfaceTransformFlagsKHR is a bitmask type for setting a mask of
-zero or more elink:VkSurfaceTransformFlagBitsKHR.
---
-
-[open,refpage='VkCompositeAlphaFlagBitsKHR',desc='Alpha compositing modes supported on a device',type='enums']
---
-The pname:supportedCompositeAlpha member is of type
-elink:VkCompositeAlphaFlagBitsKHR, which contains the following values:
-
-include::{generated}/api/enums/VkCompositeAlphaFlagBitsKHR.txt[]
-
-These values are described as follows:
-
-  * ename:VK_COMPOSITE_ALPHA_OPAQUE_BIT_KHR: The alpha component, if it
-    exists, of the images is ignored in the compositing process.
-    Instead, the image is treated as if it has a constant alpha of 1.0.
-  * ename:VK_COMPOSITE_ALPHA_PRE_MULTIPLIED_BIT_KHR: The alpha component, if
-    it exists, of the images is respected in the compositing process.
-    The non-alpha components of the image are expected to already be
-    multiplied by the alpha component by the application.
-  * ename:VK_COMPOSITE_ALPHA_POST_MULTIPLIED_BIT_KHR: The alpha component,
-    if it exists, of the images is respected in the compositing process.
-    The non-alpha components of the image are not expected to already be
-    multiplied by the alpha component by the application; instead, the
-    compositor will multiply the non-alpha components of the image by the
-    alpha component during compositing.
-  * ename:VK_COMPOSITE_ALPHA_INHERIT_BIT_KHR: The way in which the
-    presentation engine treats the alpha component in the images is unknown
-    to the Vulkan API.
-    Instead, the application is responsible for setting the composite alpha
-    blending mode using native window system commands.
-    If the application does not set the blending mode using native window
-    system commands, then a platform-specific default will be used.
---
-
-[open,refpage='VkCompositeAlphaFlagsKHR',desc='Bitmask of VkCompositeAlphaFlagBitsKHR',type='flags']
---
-include::{generated}/api/flags/VkCompositeAlphaFlagsKHR.txt[]
-
-tname:VkCompositeAlphaFlagsKHR is a bitmask type for setting a mask of zero
-or more elink:VkCompositeAlphaFlagBitsKHR.
---
-
-
-=== Surface Format Support
-
-[open,refpage='vkGetPhysicalDeviceSurfaceFormatsKHR',desc='Query color formats supported by surface',type='protos']
---
-:refpage: vkGetPhysicalDeviceSurfaceFormatsKHR
-
-To query the supported swapchain format-color space pairs for a surface,
-call:
-
-include::{generated}/api/protos/vkGetPhysicalDeviceSurfaceFormatsKHR.txt[]
-
-  * pname:physicalDevice is the physical device that will be associated with
-    the swapchain to be created, as described for
-    flink:vkCreateSwapchainKHR.
-  * pname:surface is the surface that will be associated with the swapchain.
-  * pname:pSurfaceFormatCount is a pointer to an integer related to the
-    number of format pairs available or queried, as described below.
-  * pname:pSurfaceFormats is either `NULL` or a pointer to an array of
-    sname:VkSurfaceFormatKHR structures.
-
-If pname:pSurfaceFormats is `NULL`, then the number of format pairs
-supported for the given pname:surface is returned in
-pname:pSurfaceFormatCount.
-Otherwise, pname:pSurfaceFormatCount must: point to a variable set by the
-user to the number of elements in the pname:pSurfaceFormats array, and on
-return the variable is overwritten with the number of structures actually
-written to pname:pSurfaceFormats.
-If the value of pname:pSurfaceFormatCount is less than the number of format
-pairs supported, at most pname:pSurfaceFormatCount structures will be
-written, and ename:VK_INCOMPLETE will be returned instead of
-ename:VK_SUCCESS, to indicate that not all the available format pairs were
-returned.
-
-The number of format pairs supported must: be greater than or equal to 1.
-pname:pSurfaceFormats must: not contain an entry whose value for
-pname:format is ename:VK_FORMAT_UNDEFINED.
-
-If pname:pSurfaceFormats includes an entry whose value for pname:colorSpace
-is ename:VK_COLOR_SPACE_SRGB_NONLINEAR_KHR and whose value for pname:format
-is a UNORM (or SRGB) format and the corresponding SRGB (or UNORM) format is
-a color renderable format for ename:VK_IMAGE_TILING_OPTIMAL, then
-pname:pSurfaceFormats must: also contain an entry with the same value for
-pname:colorSpace and pname:format equal to the corresponding SRGB (or UNORM)
-format.
-
-.Valid Usage
-****
-include::{chapters}/commonvalidity/surface_physical_device_common.txt[]
-****
-
-include::{generated}/validity/protos/vkGetPhysicalDeviceSurfaceFormatsKHR.txt[]
---
-
-[open,refpage='VkSurfaceFormatKHR',desc='Structure describing a supported swapchain format-color space pair',type='structs']
---
-The sname:VkSurfaceFormatKHR structure is defined as:
-
-include::{generated}/api/structs/VkSurfaceFormatKHR.txt[]
-
-  * pname:format is a elink:VkFormat that is compatible with the specified
-    surface.
-  * pname:colorSpace is a presentation elink:VkColorSpaceKHR that is
-    compatible with the surface.
-
-include::{generated}/validity/structs/VkSurfaceFormatKHR.txt[]
---
-
-ifdef::VK_KHR_get_surface_capabilities2[]
-[open,refpage='vkGetPhysicalDeviceSurfaceFormats2KHR',desc='Query color formats supported by surface',type='protos']
---
-:refpage: vkGetPhysicalDeviceSurfaceFormats2KHR
-
-To query the supported swapchain format tuples for a surface, call:
-
-include::{generated}/api/protos/vkGetPhysicalDeviceSurfaceFormats2KHR.txt[]
-
-  * pname:physicalDevice is the physical device that will be associated with
-    the swapchain to be created, as described for
-    flink:vkCreateSwapchainKHR.
-  * pname:pSurfaceInfo is a pointer to a
-    slink:VkPhysicalDeviceSurfaceInfo2KHR structure describing the surface
-    and other fixed parameters that would be consumed by
-    flink:vkCreateSwapchainKHR.
-  * pname:pSurfaceFormatCount is a pointer to an integer related to the
-    number of format tuples available or queried, as described below.
-  * pname:pSurfaceFormats is either `NULL` or a pointer to an array of
-    slink:VkSurfaceFormat2KHR structures.
-
-flink:vkGetPhysicalDeviceSurfaceFormats2KHR behaves similarly to
-flink:vkGetPhysicalDeviceSurfaceFormatsKHR, with the ability to be extended
-via pname:pNext chains.
-
-If pname:pSurfaceFormats is `NULL`, then the number of format tuples
-supported for the given pname:surface is returned in
-pname:pSurfaceFormatCount.
-Otherwise, pname:pSurfaceFormatCount must: point to a variable set by the
-user to the number of elements in the pname:pSurfaceFormats array, and on
-return the variable is overwritten with the number of structures actually
-written to pname:pSurfaceFormats.
-If the value of pname:pSurfaceFormatCount is less than the number of format
-tuples supported, at most pname:pSurfaceFormatCount structures will be
-written, and ename:VK_INCOMPLETE will be returned instead of
-ename:VK_SUCCESS, to indicate that not all the available values were
-returned.
-
-.Valid Usage
-****
-include::{chapters}/commonvalidity/surface_info_physical_device_common.txt[]
-****
-
-include::{generated}/validity/protos/vkGetPhysicalDeviceSurfaceFormats2KHR.txt[]
---
-
-[open,refpage='VkSurfaceFormat2KHR',desc='Structure describing a supported swapchain format tuple',type='structs']
---
-The sname:VkSurfaceFormat2KHR structure is defined as:
-
-include::{generated}/api/structs/VkSurfaceFormat2KHR.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:surfaceFormat is a slink:VkSurfaceFormatKHR structure describing a
-    format-color space pair that is compatible with the specified surface.
-
-include::{generated}/validity/structs/VkSurfaceFormat2KHR.txt[]
---
-endif::VK_KHR_get_surface_capabilities2[]
-
-While the pname:format of a presentable image refers to the encoding of each
-pixel, the pname:colorSpace determines how the presentation engine
-interprets the pixel values.
-A color space in this document refers to a specific color space (defined by
-the chromaticities of its primaries and a white point in CIE Lab), and a
-transfer function that is applied before storing or transmitting color data
-in the given color space.
-
-[open,refpage='VkColorSpaceKHR',desc='Supported color space of the presentation engine',type='enums']
---
-Possible values of slink:VkSurfaceFormatKHR::pname:colorSpace, specifying
-supported color spaces of a presentation engine, are:
-
-include::{generated}/api/enums/VkColorSpaceKHR.txt[]
-
-  * ename:VK_COLOR_SPACE_SRGB_NONLINEAR_KHR specifies support for the sRGB
-    color space.
-ifdef::VK_EXT_swapchain_colorspace[]
-  * ename:VK_COLOR_SPACE_DISPLAY_P3_NONLINEAR_EXT specifies support for the
-    Display-P3 color space to be displayed using an sRGB-like EOTF (defined
-    below).
-  * ename:VK_COLOR_SPACE_EXTENDED_SRGB_LINEAR_EXT specifies support for the
-    extended sRGB color space to be displayed using a linear EOTF.
-  * ename:VK_COLOR_SPACE_EXTENDED_SRGB_NONLINEAR_EXT specifies support for
-    the extended sRGB color space to be displayed using an sRGB EOTF.
-  * ename:VK_COLOR_SPACE_DISPLAY_P3_LINEAR_EXT specifies support for the
-    Display-P3 color space to be displayed using a linear EOTF.
-  * ename:VK_COLOR_SPACE_DCI_P3_NONLINEAR_EXT specifies support for the
-    DCI-P3 color space to be displayed using the DCI-P3 EOTF.
-    Note that values in such an image are interpreted as XYZ encoded color
-    data by the presentation engine.
-  * ename:VK_COLOR_SPACE_BT709_LINEAR_EXT specifies support for the BT709
-    color space to be displayed using a linear EOTF.
-  * ename:VK_COLOR_SPACE_BT709_NONLINEAR_EXT specifies support for the BT709
-    color space to be displayed using the SMPTE 170M EOTF.
-  * ename:VK_COLOR_SPACE_BT2020_LINEAR_EXT specifies support for the BT2020
-    color space to be displayed using a linear EOTF.
-  * ename:VK_COLOR_SPACE_HDR10_ST2084_EXT specifies support for the HDR10
-    (BT2020 color) space to be displayed using the SMPTE ST2084 Perceptual
-    Quantizer (PQ) EOTF.
-  * ename:VK_COLOR_SPACE_DOLBYVISION_EXT specifies support for the Dolby
-    Vision (BT2020 color space), proprietary encoding, to be displayed using
-    the SMPTE ST2084 EOTF.
-  * ename:VK_COLOR_SPACE_HDR10_HLG_EXT specifies support for the HDR10
-    (BT2020 color space) to be displayed using the Hybrid Log Gamma (HLG)
-    EOTF.
-  * ename:VK_COLOR_SPACE_ADOBERGB_LINEAR_EXT specifies support for the
-    AdobeRGB color space to be displayed using a linear EOTF.
-  * ename:VK_COLOR_SPACE_ADOBERGB_NONLINEAR_EXT specifies support for the
-    AdobeRGB color space to be displayed using the Gamma 2.2 EOTF.
-  * ename:VK_COLOR_SPACE_PASS_THROUGH_EXT specifies that color components
-    are used "`as is`".
-    This is intended to allow applications to supply data for color spaces
-    not described here.
-ifdef::VK_AMD_display_native_hdr[]
-  * ename:VK_COLOR_SPACE_DISPLAY_NATIVE_AMD specifies support for the
-    display's native color space.
-    This matches the color space expectations of AMD's FreeSync2 standard,
-    for displays supporting it.
-endif::VK_AMD_display_native_hdr[]
-
-[NOTE]
-.Note
-====
-In the initial release of the `VK_KHR_surface` and `apiext:VK_KHR_swapchain`
-extensions, the token ename:VK_COLORSPACE_SRGB_NONLINEAR_KHR was used.
-Starting in the 2016-05-13 updates to the extension branches, matching
-release 1.0.13 of the core API specification,
-ename:VK_COLOR_SPACE_SRGB_NONLINEAR_KHR is used instead for consistency with
-Vulkan naming rules.
-The older enum is still available for backwards compatibility.
-====
-
-[NOTE]
-.Note
-====
-In older versions of this extension
-ename:VK_COLOR_SPACE_DISPLAY_P3_LINEAR_EXT was misnamed
-ename:VK_COLOR_SPACE_DCI_P3_LINEAR_EXT.
-This has been updated to indicate that it uses RGB color encoding, not XYZ.
-The old name is deprecated but is maintained for backwards compatibility.
-====
-
-The color components of non-linear color space swap chain images must: have
-had the appropriate transfer function applied.
-The color space selected for the swap chain image will not affect the
-processing of data written into the image by the implementation.
-Vulkan requires that all implementations support the sRGB transfer function
-by use of an SRGB pixel format.
-Other transfer functions, such as SMPTE 170M or SMPTE2084, can: be performed
-by the application shader.
-This extension defines enums for elink:VkColorSpaceKHR that correspond to
-the following color spaces:
-
-[[VK_EXT_swapchain_colorspace-table]]
-.Color Spaces and Attributes
-[options="header"]
-|====
-| Name           | Red Primary  | Green Primary | Blue Primary | White-point          | Transfer function
-| DCI-P3         | 1.000, 0.000 | 0.000, 1.000  | 0.000, 0.000 | 0.3333, 0.3333       | DCI P3
-| Display-P3     | 0.680, 0.320 | 0.265, 0.690  | 0.150, 0.060 | 0.3127, 0.3290 (D65) | Display-P3
-| BT709          | 0.640, 0.330 | 0.300, 0.600  | 0.150, 0.060 | 0.3127, 0.3290 (D65) | ITU (SMPTE 170M)
-| sRGB           | 0.640, 0.330 | 0.300, 0.600  | 0.150, 0.060 | 0.3127, 0.3290 (D65) | sRGB
-| extended sRGB  | 0.640, 0.330 | 0.300, 0.600  | 0.150, 0.060 | 0.3127, 0.3290 (D65) | extended sRGB
-| HDR10_ST2084   | 0.708, 0.292 | 0.170, 0.797  | 0.131, 0.046 | 0.3127, 0.3290 (D65) | ST2084 PQ
-| DOLBYVISION    | 0.708, 0.292 | 0.170, 0.797  | 0.131, 0.046 | 0.3127, 0.3290 (D65) | ST2084 PQ
-| HDR10_HLG      | 0.708, 0.292 | 0.170, 0.797  | 0.131, 0.046 | 0.3127, 0.3290 (D65) | HLG
-| AdobeRGB       | 0.640, 0.330 | 0.210, 0.710  | 0.150, 0.060 | 0.3127, 0.3290 (D65) | AdobeRGB
-|====
-
-The transfer functions are described in the "`Transfer Functions`" chapter
-of the <<data-format,Khronos Data Format Specification>>.
-
-Except Display-P3 OETF, which is:
-
-[latexmath]
-+++++++++++++++++++
-\begin{aligned}
-E & =
-  \begin{cases}
-    1.055 \times L^{1 \over 2.4} - 0.055 & \text{for}\  0.0030186 \leq L \leq 1 \\
-    12.92 \times L                       & \text{for}\  0 \leq L < 0.0030186
-  \end{cases}
-\end{aligned}
-+++++++++++++++++++
-
-where [eq]#L# is the linear value of a color component and [eq]#E# is the
-encoded value (as stored in the image in memory).
-
-[NOTE]
-.Note
-====
-For most uses, the sRGB OETF is equivalent.
-====
-endif::VK_EXT_swapchain_colorspace[]
---
-
-
-=== Surface Presentation Mode Support
-
-[open,refpage='vkGetPhysicalDeviceSurfacePresentModesKHR',desc='Query supported presentation modes',type='protos']
---
-:refpage: vkGetPhysicalDeviceSurfacePresentModesKHR
-
-To query the supported presentation modes for a surface, call:
-
-include::{generated}/api/protos/vkGetPhysicalDeviceSurfacePresentModesKHR.txt[]
-
-  * pname:physicalDevice is the physical device that will be associated with
-    the swapchain to be created, as described for
-    flink:vkCreateSwapchainKHR.
-  * pname:surface is the surface that will be associated with the swapchain.
-  * pname:pPresentModeCount is a pointer to an integer related to the number
-    of presentation modes available or queried, as described below.
-  * pname:pPresentModes is either `NULL` or a pointer to an array of
-    elink:VkPresentModeKHR values, indicating the supported presentation
-    modes.
-
-If pname:pPresentModes is `NULL`, then the number of presentation modes
-supported for the given pname:surface is returned in
-pname:pPresentModeCount.
-Otherwise, pname:pPresentModeCount must: point to a variable set by the user
-to the number of elements in the pname:pPresentModes array, and on return
-the variable is overwritten with the number of values actually written to
-pname:pPresentModes.
-If the value of pname:pPresentModeCount is less than the number of
-presentation modes supported, at most pname:pPresentModeCount values will be
-written, and ename:VK_INCOMPLETE will be returned instead of
-ename:VK_SUCCESS, to indicate that not all the available modes were
-returned.
-
-.Valid Usage
-****
-include::{chapters}/commonvalidity/surface_physical_device_common.txt[]
-****
-
-include::{generated}/validity/protos/vkGetPhysicalDeviceSurfacePresentModesKHR.txt[]
---
-
-ifdef::VK_EXT_full_screen_exclusive[]
-[open,refpage='vkGetPhysicalDeviceSurfacePresentModes2EXT',desc='Query supported presentation modes',type='protos']
---
-:refpage: vkGetPhysicalDeviceSurfacePresentModes2EXT
-
-Alternatively, to query the supported presentation modes for a surface
-combined with select other fixed swapchain creation parameters, call:
-
-include::{generated}/api/protos/vkGetPhysicalDeviceSurfacePresentModes2EXT.txt[]
-
-  * pname:physicalDevice is the physical device that will be associated with
-    the swapchain to be created, as described for
-    flink:vkCreateSwapchainKHR.
-  * pname:pSurfaceInfo is a pointer to a
-    slink:VkPhysicalDeviceSurfaceInfo2KHR structure describing the surface
-    and other fixed parameters that would be consumed by
-    flink:vkCreateSwapchainKHR.
-  * pname:pPresentModeCount is a pointer to an integer related to the number
-    of presentation modes available or queried, as described below.
-  * pname:pPresentModes is either `NULL` or a pointer to an array of
-    elink:VkPresentModeKHR values, indicating the supported presentation
-    modes.
-
-fname:vkGetPhysicalDeviceSurfacePresentModes2EXT behaves similarly to
-flink:vkGetPhysicalDeviceSurfacePresentModesKHR, with the ability to specify
-extended inputs via chained input structures.
-
-.Valid Usage
-****
-include::{chapters}/commonvalidity/surface_info_physical_device_common.txt[]
-****
-
-include::{generated}/validity/protos/vkGetPhysicalDeviceSurfacePresentModes2EXT.txt[]
---
-endif::VK_EXT_full_screen_exclusive[]
-
-[open,refpage='VkPresentModeKHR',desc='Presentation mode supported for a surface',type='enums']
---
-Possible values of elements of the
-flink:vkGetPhysicalDeviceSurfacePresentModesKHR::pname:pPresentModes array,
-indicating the supported presentation modes for a surface, are:
-
-include::{generated}/api/enums/VkPresentModeKHR.txt[]
-
-  * ename:VK_PRESENT_MODE_IMMEDIATE_KHR specifies that the presentation
-    engine does not wait for a vertical blanking period to update the
-    current image, meaning this mode may: result in visible tearing.
-    No internal queuing of presentation requests is needed, as the requests
-    are applied immediately.
-  * ename:VK_PRESENT_MODE_MAILBOX_KHR specifies that the presentation engine
-    waits for the next vertical blanking period to update the current image.
-    Tearing cannot: be observed.
-    An internal single-entry queue is used to hold pending presentation
-    requests.
-    If the queue is full when a new presentation request is received, the
-    new request replaces the existing entry, and any images associated with
-    the prior entry become available for re-use by the application.
-    One request is removed from the queue and processed during each vertical
-    blanking period in which the queue is non-empty.
-  * ename:VK_PRESENT_MODE_FIFO_KHR specifies that the presentation engine
-    waits for the next vertical blanking period to update the current image.
-    Tearing cannot: be observed.
-    An internal queue is used to hold pending presentation requests.
-    New requests are appended to the end of the queue, and one request is
-    removed from the beginning of the queue and processed during each
-    vertical blanking period in which the queue is non-empty.
-    This is the only value of pname:presentMode that is required: to be
-    supported.
-  * ename:VK_PRESENT_MODE_FIFO_RELAXED_KHR specifies that the presentation
-    engine generally waits for the next vertical blanking period to update
-    the current image.
-    If a vertical blanking period has already passed since the last update
-    of the current image then the presentation engine does not wait for
-    another vertical blanking period for the update, meaning this mode may:
-    result in visible tearing in this case.
-    This mode is useful for reducing visual stutter with an application that
-    will mostly present a new image before the next vertical blanking
-    period, but may occasionally be late, and present a new image just after
-    the next vertical blanking period.
-    An internal queue is used to hold pending presentation requests.
-    New requests are appended to the end of the queue, and one request is
-    removed from the beginning of the queue and processed during or after
-    each vertical blanking period in which the queue is non-empty.
-ifdef::VK_KHR_shared_presentable_image[]
-  * ename:VK_PRESENT_MODE_SHARED_DEMAND_REFRESH_KHR specifies that the
-    presentation engine and application have concurrent access to a single
-    image, which is referred to as a _shared presentable image_.
-    The presentation engine is only required to update the current image
-    after a new presentation request is received.
-    Therefore the application must: make a presentation request whenever an
-    update is required.
-    However, the presentation engine may: update the current image at any
-    point, meaning this mode may: result in visible tearing.
-  * ename:VK_PRESENT_MODE_SHARED_CONTINUOUS_REFRESH_KHR specifies that the
-    presentation engine and application have concurrent access to a single
-    image, which is referred to as a _shared presentable image_.
-    The presentation engine periodically updates the current image on its
-    regular refresh cycle.
-    The application is only required to make one initial presentation
-    request, after which the presentation engine must: update the current
-    image without any need for further presentation requests.
-    The application can: indicate the image contents have been updated by
-    making a presentation request, but this does not guarantee the timing of
-    when it will be updated.
-    This mode may: result in visible tearing if rendering to the image is
-    not timed correctly.
-
-The supported elink:VkImageUsageFlagBits of the presentable images of a
-swapchain created for a surface may: differ depending on the presentation
-mode, and can be determined as per the table below:
-
-.Presentable image usage queries
-[width="100%",cols="<50%,<50%",options="header"]
-|====
-| Presentation mode                                   | Image usage flags
-| ename:VK_PRESENT_MODE_IMMEDIATE_KHR                 | slink:VkSurfaceCapabilitiesKHR::pname:supportedUsageFlags
-| ename:VK_PRESENT_MODE_MAILBOX_KHR                   | slink:VkSurfaceCapabilitiesKHR::pname:supportedUsageFlags
-| ename:VK_PRESENT_MODE_FIFO_KHR                      | slink:VkSurfaceCapabilitiesKHR::pname:supportedUsageFlags
-| ename:VK_PRESENT_MODE_FIFO_RELAXED_KHR              | slink:VkSurfaceCapabilitiesKHR::pname:supportedUsageFlags
-| ename:VK_PRESENT_MODE_SHARED_DEMAND_REFRESH_KHR     | slink:VkSharedPresentSurfaceCapabilitiesKHR::pname:sharedPresentSupportedUsageFlags
-| ename:VK_PRESENT_MODE_SHARED_CONTINUOUS_REFRESH_KHR | slink:VkSharedPresentSurfaceCapabilitiesKHR::pname:sharedPresentSupportedUsageFlags
-|====
-endif::VK_KHR_shared_presentable_image[]
-
-[NOTE]
-.Note
-====
-For reference, the mode indicated by ename:VK_PRESENT_MODE_FIFO_KHR is
-equivalent to the behavior of {wgl|glX|egl}SwapBuffers with a swap interval
-of 1, while the mode indicated by ename:VK_PRESENT_MODE_FIFO_RELAXED_KHR is
-equivalent to the behavior of {wgl|glX}SwapBuffers with a swap interval of
--1 (from the {WGL|GLX}_EXT_swap_control_tear extensions).
-====
---
-
-ifdef::VK_EXT_full_screen_exclusive[]
-== Full Screen Exclusive Control
-
-Swapchains created with pname:fullScreenExclusive set to
-ename:VK_FULL_SCREEN_EXCLUSIVE_APPLICATION_CONTROLLED_EXT must: acquire and
-release exclusive full-screen access explicitly, using the following
-commands.
-
-[open,refpage='vkAcquireFullScreenExclusiveModeEXT',desc='Acquire full-screen exclusive mode for a swapchain',type='protos']
---
-To acquire exclusive full-screen access for a swapchain, call:
-
-include::{generated}/api/protos/vkAcquireFullScreenExclusiveModeEXT.txt[]
-
-  * pname:device is the device associated with pname:swapchain.
-  * pname:swapchain is the swapchain to acquire exclusive full-screen access
-    for.
-
-.Valid Usage
-****
-  * [[VUID-vkAcquireFullScreenExclusiveModeEXT-swapchain-02674]]
-    pname:swapchain must: not be in the retired state
-  * [[VUID-vkAcquireFullScreenExclusiveModeEXT-swapchain-02675]]
-    pname:swapchain must: be a swapchain created with a
-    slink:VkSurfaceFullScreenExclusiveInfoEXT structure, with
-    pname:fullScreenExclusive set to
-    ename:VK_FULL_SCREEN_EXCLUSIVE_APPLICATION_CONTROLLED_EXT
-  * [[VUID-vkAcquireFullScreenExclusiveModeEXT-swapchain-02676]]
-    pname:swapchain must: not currently have exclusive full-screen access
-****
-
-A return value of ename:VK_SUCCESS indicates that the pname:swapchain
-successfully acquired exclusive full-screen access.
-The swapchain will retain this exclusivity until either the application
-releases exclusive full-screen access with
-flink:vkReleaseFullScreenExclusiveModeEXT, destroys the swapchain, or if any
-of the swapchain commands return
-ename:VK_ERROR_FULL_SCREEN_EXCLUSIVE_MODE_LOST_EXT indicating that the mode
-was lost because of platform-specific changes.
-
-If the swapchain was unable to acquire exclusive full-screen access to the
-display then ename:VK_ERROR_INITIALIZATION_FAILED is returned.
-An application can: attempt to acquire exclusive full-screen access again
-for the same swapchain even if this command fails, or if
-ename:VK_ERROR_FULL_SCREEN_EXCLUSIVE_MODE_LOST_EXT has been returned by a
-swapchain command.
-
-include::{generated}/validity/protos/vkAcquireFullScreenExclusiveModeEXT.txt[]
---
-
-[open,refpage='vkReleaseFullScreenExclusiveModeEXT',desc='Release full-screen exclusive mode from a swapchain',type='protos']
---
-To release exclusive full-screen access from a swapchain, call:
-
-include::{generated}/api/protos/vkReleaseFullScreenExclusiveModeEXT.txt[]
-
-  * pname:device is the device associated with pname:swapchain.
-  * pname:swapchain is the swapchain to release exclusive full-screen access
-    from.
-
-[NOTE]
-.Note
-====
-Applications will not be able to present to pname:swapchain after this call
-until exclusive full-screen access is reacquired.
-This is usually useful to handle when an application is minimised or
-otherwise intends to stop presenting for a time.
-====
-
-.Valid Usage
-****
-  * [[VUID-vkReleaseFullScreenExclusiveModeEXT-swapchain-02677]]
-    pname:swapchain must: not be in the retired state
-  * [[VUID-vkReleaseFullScreenExclusiveModeEXT-swapchain-02678]]
-    pname:swapchain must: be a swapchain created with a
-    slink:VkSurfaceFullScreenExclusiveInfoEXT structure, with
-    pname:fullScreenExclusive set to
-    ename:VK_FULL_SCREEN_EXCLUSIVE_APPLICATION_CONTROLLED_EXT
-****
---
-endif::VK_EXT_full_screen_exclusive[]
-
-
-ifdef::VK_KHR_swapchain[]
-ifdef::VK_VERSION_1_1,VK_KHR_device_group[]
-== Device Group Queries
-
-[open,refpage='vkGetDeviceGroupPresentCapabilitiesKHR',desc='Query present capabilities from other physical devices',type='protos']
---
-A logical device that represents multiple physical devices may: support
-presenting from images on more than one physical device, or combining images
-from multiple physical devices.
-
-To query these capabilities, call:
-
-include::{generated}/api/protos/vkGetDeviceGroupPresentCapabilitiesKHR.txt[]
-
-  * pname:device is the logical device.
-  * pname:pDeviceGroupPresentCapabilities is a pointer to a
-    slink:VkDeviceGroupPresentCapabilitiesKHR structure in which the
-    device's capabilities are returned.
-
-include::{generated}/validity/protos/vkGetDeviceGroupPresentCapabilitiesKHR.txt[]
---
-
-[open,refpage='VkDeviceGroupPresentCapabilitiesKHR',desc='Present capabilities from other physical devices',type='structs']
---
-The sname:VkDeviceGroupPresentCapabilitiesKHR structure is defined as:
-
-include::{generated}/api/structs/VkDeviceGroupPresentCapabilitiesKHR.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:presentMask is an array of ename:VK_MAX_DEVICE_GROUP_SIZE
-    code:uint32_t masks, where the mask at element [eq]#i# is non-zero if
-    physical device [eq]#i# has a presentation engine, and where bit [eq]#j#
-    is set in element [eq]#i# if physical device [eq]#i# can: present
-    swapchain images from physical device [eq]#j#.
-    If element [eq]#i# is non-zero, then bit [eq]#i# must: be set.
-  * pname:modes is a bitmask of elink:VkDeviceGroupPresentModeFlagBitsKHR
-    indicating which device group presentation modes are supported.
-
-pname:modes always has ename:VK_DEVICE_GROUP_PRESENT_MODE_LOCAL_BIT_KHR set.
-
-The present mode flags are also used when presenting an image, in
-slink:VkDeviceGroupPresentInfoKHR::pname:mode.
-
-If a device group only includes a single physical device, then pname:modes
-must: equal ename:VK_DEVICE_GROUP_PRESENT_MODE_LOCAL_BIT_KHR.
-
-include::{generated}/validity/structs/VkDeviceGroupPresentCapabilitiesKHR.txt[]
---
-
-
-[open,refpage='VkDeviceGroupPresentModeFlagBitsKHR',desc='Bitmask specifying supported device group present modes',type='enums']
---
-Bits which may: be set in
-slink:VkDeviceGroupPresentCapabilitiesKHR::pname:modes to indicate which
-device group presentation modes are supported are:
-
-include::{generated}/api/enums/VkDeviceGroupPresentModeFlagBitsKHR.txt[]
-
-  * ename:VK_DEVICE_GROUP_PRESENT_MODE_LOCAL_BIT_KHR specifies that any
-    physical device with a presentation engine can: present its own
-    swapchain images.
-  * ename:VK_DEVICE_GROUP_PRESENT_MODE_REMOTE_BIT_KHR specifies that any
-    physical device with a presentation engine can: present swapchain images
-    from any physical device in its pname:presentMask.
-  * ename:VK_DEVICE_GROUP_PRESENT_MODE_SUM_BIT_KHR specifies that any
-    physical device with a presentation engine can: present the sum of
-    swapchain images from any physical devices in its pname:presentMask.
-  * ename:VK_DEVICE_GROUP_PRESENT_MODE_LOCAL_MULTI_DEVICE_BIT_KHR specifies
-    that multiple physical devices with a presentation engine can: each
-    present their own swapchain images.
---
-
-[open,refpage='VkDeviceGroupPresentModeFlagsKHR',desc='Bitmask of VkDeviceGroupPresentModeFlagBitsKHR',type='flags']
---
-include::{generated}/api/flags/VkDeviceGroupPresentModeFlagsKHR.txt[]
-
-tname:VkDeviceGroupPresentModeFlagsKHR is a bitmask type for setting a mask
-of zero or more elink:VkDeviceGroupPresentModeFlagBitsKHR.
---
-
-[open,refpage='vkGetDeviceGroupSurfacePresentModesKHR',desc='Query present capabilities for a surface',type='protos']
---
-Some surfaces may: not be capable of using all the device group present
-modes.
-
-To query the supported device group present modes for a particular surface,
-call:
-
-include::{generated}/api/protos/vkGetDeviceGroupSurfacePresentModesKHR.txt[]
-
-  * pname:device is the logical device.
-  * pname:surface is the surface.
-  * pname:pModes is a pointer to a tlink:VkDeviceGroupPresentModeFlagsKHR in
-    which the supported device group present modes for the surface are
-    returned.
-
-The modes returned by this command are not invariant, and may: change in
-response to the surface being moved, resized, or occluded.
-These modes must: be a subset of the modes returned by
-flink:vkGetDeviceGroupPresentCapabilitiesKHR.
-
-.Valid Usage
-****
-  * [[VUID-vkGetDeviceGroupSurfacePresentModesKHR-surface-06212]]
-    pname:surface must: be supported by all physical devices associated with
-    pname:device, as reported by flink:vkGetPhysicalDeviceSurfaceSupportKHR
-    or an equivalent platform-specific mechanism
-****
-
-include::{generated}/validity/protos/vkGetDeviceGroupSurfacePresentModesKHR.txt[]
---
-
-ifdef::VK_EXT_full_screen_exclusive[]
-[open,refpage='vkGetDeviceGroupSurfacePresentModes2EXT',desc='Query device group present capabilities for a surface',type='protos']
---
-Alternatively, to query the supported device group presentation modes for a
-surface combined with select other fixed swapchain creation parameters,
-call:
-
-include::{generated}/api/protos/vkGetDeviceGroupSurfacePresentModes2EXT.txt[]
-
-  * pname:device is the logical device.
-  * pname:pSurfaceInfo is a pointer to a
-    slink:VkPhysicalDeviceSurfaceInfo2KHR structure describing the surface
-    and other fixed parameters that would be consumed by
-    flink:vkCreateSwapchainKHR.
-  * pname:pModes is a pointer to a tlink:VkDeviceGroupPresentModeFlagsKHR in
-    which the supported device group present modes for the surface are
-    returned.
-
-fname:vkGetDeviceGroupSurfacePresentModes2EXT behaves similarly to
-flink:vkGetDeviceGroupSurfacePresentModesKHR, with the ability to specify
-extended inputs via chained input structures.
-
-.Valid Usage
-****
-  * [[VUID-vkGetDeviceGroupSurfacePresentModes2EXT-pSurfaceInfo-06213]]
-    pname:pSurfaceInfo->surface must: be supported by all physical devices
-    associated with pname:device, as reported by
-    flink:vkGetPhysicalDeviceSurfaceSupportKHR or an equivalent
-    platform-specific mechanism
-****
-
-include::{generated}/validity/protos/vkGetDeviceGroupSurfacePresentModes2EXT.txt[]
---
-endif::VK_EXT_full_screen_exclusive[]
-
-[open,refpage='vkGetPhysicalDevicePresentRectanglesKHR',desc='Query present rectangles for a surface on a physical device',type='protos']
---
-:refpage: vkGetPhysicalDevicePresentRectanglesKHR
-
-When using ename:VK_DEVICE_GROUP_PRESENT_MODE_LOCAL_MULTI_DEVICE_BIT_KHR,
-the application may: need to know which regions of the surface are used when
-presenting locally on each physical device.
-Presentation of swapchain images to this surface need only have valid
-contents in the regions returned by this command.
-
-To query a set of rectangles used in presentation on the physical device,
-call:
-
-include::{generated}/api/protos/vkGetPhysicalDevicePresentRectanglesKHR.txt[]
-
-  * pname:physicalDevice is the physical device.
-  * pname:surface is the surface.
-  * pname:pRectCount is a pointer to an integer related to the number of
-    rectangles available or queried, as described below.
-  * pname:pRects is either `NULL` or a pointer to an array of slink:VkRect2D
-    structures.
-
-If pname:pRects is `NULL`, then the number of rectangles used when
-presenting the given pname:surface is returned in pname:pRectCount.
-Otherwise, pname:pRectCount must: point to a variable set by the user to the
-number of elements in the pname:pRects array, and on return the variable is
-overwritten with the number of structures actually written to pname:pRects.
-If the value of pname:pRectCount is less than the number of rectangles, at
-most pname:pRectCount structures will be written, and ename:VK_INCOMPLETE
-will be returned instead of ename:VK_SUCCESS, to indicate that not all the
-available rectangles were returned.
-
-The values returned by this command are not invariant, and may: change in
-response to the surface being moved, resized, or occluded.
-
-The rectangles returned by this command must: not overlap.
-
-.Valid Usage
-****
-include::{chapters}/commonvalidity/surface_physical_device_common.txt[]
-****
-
-include::{generated}/validity/protos/vkGetPhysicalDevicePresentRectanglesKHR.txt[]
---
-endif::VK_VERSION_1_1,VK_KHR_device_group[]
-
-ifdef::VK_GOOGLE_display_timing[]
-include::{chapters}/VK_GOOGLE_display_timing/queries.txt[]
-endif::VK_GOOGLE_display_timing[]
-
-ifdef::VK_KHR_present_wait[]
-include::{chapters}/VK_KHR_present_wait/present_wait.txt[]
-endif::VK_KHR_present_wait[]
-
-include::{chapters}/VK_KHR_swapchain/wsi.txt[]
-endif::VK_KHR_swapchain[]
diff --git a/registry/vulkan/chapters/VK_KHR_swapchain/PresentId.txt b/registry/vulkan/chapters/VK_KHR_swapchain/PresentId.txt
deleted file mode 100644
index 9b57bcc..0000000
--- a/registry/vulkan/chapters/VK_KHR_swapchain/PresentId.txt
+++ /dev/null
@@ -1,68 +0,0 @@
-// Copyright 2019-2021 The Khronos Group, Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-[open,refpage='VkPresentIdKHR',desc='The list of presentation identifiers',type='structs']
---
-The sname:VkPresentIdKHR structure is defined as:
-
-include::{generated}/api/structs/VkPresentIdKHR.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:swapchainCount is the number of swapchains being presented to the
-    fname:vkQueuePresentKHR command.
-  * pname:pPresentIds is `NULL` or a pointer to an array of uint64_t with
-    pname:swapchainCount entries.
-    If not `NULL`, each non-zero value in pname:pPresentIds specifies the
-    present id to be associated with the presentation of the swapchain with
-    the same index in the flink:vkQueuePresentKHR call.
-
-For applications to be able to reference specific presentation events queued
-by a call to fname:vkQueuePresentKHR, an identifier needs to be associated
-with them.
-When the <<features-presentId, pname:presentId>> feature is enabled,
-applications can: include the sname:VkPresentIdKHR structure in the
-pname:pNext chain of the slink:VkPresentInfoKHR structure to supply
-identifiers.
-
-Each sname:VkSwapchainKHR has a presentId associated with it.
-This value is initially set to zero when the sname:VkSwapchainKHR is
-created.
-
-When a sname:VkPresentIdKHR structure with a non-NULL pname:pPresentIds is
-included in the pname:pNext chain of a slink:VkPresentInfoKHR structure,
-each pname:pSwapchains entry has a presentId associated in the
-pname:pPresentIds array at the same index as the swapchain in the
-pname:pSwapchains array.
-If this presentId is non-zero, then the application can: later use this
-value to refer to that image presentation.
-A value of zero indicates that this presentation has no associated
-presentId.
-A non-zero presentId must: be greater than any non-zero presentId passed
-previously by the application for the same swapchain.
-
-There is no requirement for any precise timing relationship between the
-presentation of the image to the user and the update of the presentId value,
-but implementations should: make this as close as possible to the
-presentation of the first pixel in the new image to the user.
-
-.Valid Usage
-****
-  * [[VUID-VkPresentIdKHR-swapchainCount-04998]]
-    pname:swapchainCount must: be the same value as
-    sname:VkPresentInfoKHR::pname:swapchainCount, where this
-    sname:VkPresentIdKHR is in the pname:pNext chain of the
-    sname:VkPresentInfoKHR structure
-  * [[VUID-VkPresentIdKHR-presentIds-04999]]
-    Each pname:presentIds entry must: be greater than any previous
-    pname:presentIds entry passed for the associated pname:pSwapchains entry
-****
-
-include::{generated}/validity/structs/VkPresentIdKHR.txt[]
---
-
-ifdef::VK_KHR_present_wait[]
-include::../VK_KHR_present_wait/WaitForPresent.txt[]
-endif::VK_KHR_present_wait[]
diff --git a/registry/vulkan/chapters/VK_KHR_swapchain/wsi.txt b/registry/vulkan/chapters/VK_KHR_swapchain/wsi.txt
deleted file mode 100644
index 64b5160..0000000
--- a/registry/vulkan/chapters/VK_KHR_swapchain/wsi.txt
+++ /dev/null
@@ -1,1506 +0,0 @@
-// Copyright 2014-2021 The Khronos Group, Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-== WSI Swapchain
-
-[open,refpage='VkSwapchainKHR',desc='Opaque handle to a swapchain object',type='handles']
---
-A swapchain object (a.k.a.
-swapchain) provides the ability to present rendering results to a surface.
-Swapchain objects are represented by sname:VkSwapchainKHR handles:
-
-include::{generated}/api/handles/VkSwapchainKHR.txt[]
-
-A swapchain is an abstraction for an array of presentable images that are
-associated with a surface.
-The presentable images are represented by sname:VkImage objects created by
-the platform.
-One image (which can: be an array image for multiview/stereoscopic-3D
-surfaces) is displayed at a time, but multiple images can: be queued for
-presentation.
-An application renders to the image, and then queues the image for
-presentation to the surface.
-
-A native window cannot: be associated with more than one non-retired
-swapchain at a time.
-Further, swapchains cannot: be created for native windows that have a
-non-Vulkan graphics API surface associated with them.
-
-[NOTE]
-.Note
-====
-The presentation engine is an abstraction for the platform's compositor or
-display engine.
-
-The presentation engine may: be synchronous or asynchronous with respect to
-the application and/or logical device.
-
-Some implementations may: use the device's graphics queue or dedicated
-presentation hardware to perform presentation.
-====
-
-The presentable images of a swapchain are owned by the presentation engine.
-An application can: acquire use of a presentable image from the presentation
-engine.
-Use of a presentable image must: occur only after the image is returned by
-fname:vkAcquireNextImageKHR, and before it is released by
-fname:vkQueuePresentKHR.
-This includes transitioning the image layout and rendering commands.
-
-An application can: acquire use of a presentable image with
-fname:vkAcquireNextImageKHR.
-After acquiring a presentable image and before modifying it, the application
-must: use a synchronization primitive to ensure that the presentation engine
-has finished reading from the image.
-The application can: then transition the image's layout, queue rendering
-commands to it, etc.
-Finally, the application presents the image with fname:vkQueuePresentKHR,
-which releases the acquisition of the image.
-
-The presentation engine controls the order in which presentable images are
-acquired for use by the application.
-
-[NOTE]
-.Note
-====
-This allows the platform to handle situations which require out-of-order
-return of images after presentation.
-At the same time, it allows the application to generate command buffers
-referencing all of the images in the swapchain at initialization time,
-rather than in its main loop.
-====
---
-
-How this all works is described below.
-
-ifdef::VK_KHR_shared_presentable_image[]
-include::{chapters}/VK_KHR_shared_presentable_image/wsi.txt[]
-endif::VK_KHR_shared_presentable_image[]
-
-[open,refpage='vkCreateSwapchainKHR',desc='Create a swapchain',type='protos']
---
-To create a swapchain, call:
-
-include::{generated}/api/protos/vkCreateSwapchainKHR.txt[]
-
-  * pname:device is the device to create the swapchain for.
-  * pname:pCreateInfo is a pointer to a slink:VkSwapchainCreateInfoKHR
-    structure specifying the parameters of the created swapchain.
-  * pname:pAllocator is the allocator used for host memory allocated for the
-    swapchain object when there is no more specific allocator available (see
-    <<memory-allocation,Memory Allocation>>).
-  * pname:pSwapchain is a pointer to a slink:VkSwapchainKHR handle in which
-    the created swapchain object will be returned.
-
-ifdef::VK_EXT_full_screen_exclusive[]
-If the pname:oldSwapchain parameter of pname:pCreateInfo is a valid
-swapchain, which has exclusive full-screen access, that access is released
-from pname:oldSwapchain.
-If the command succeeds in this case, the newly created swapchain will
-automatically acquire exclusive full-screen access from pname:oldSwapchain.
-
-[NOTE]
-.Note
-====
-This implicit transfer is intended to avoid exiting and entering full-screen
-exclusive mode, which may otherwise cause unwanted visual updates to the
-display.
-====
-
-In some cases, swapchain creation may: fail if exclusive full-screen mode is
-requested for application control, but for some implementation-specific
-reason exclusive full-screen access is unavailable for the particular
-combination of parameters provided.
-If this occurs, ename:VK_ERROR_INITIALIZATION_FAILED will be returned.
-
-[NOTE]
-.Note
-====
-In particular, it will fail if the pname:imageExtent member of
-pname:pCreateInfo does not match the extents of the monitor.
-ifdef::VK_KHR_win32_surface[]
-Other reasons for failure may include the app not being set as high-dpi
-aware, or if the physical device and monitor are not compatible in this
-mode.
-endif::VK_KHR_win32_surface[]
-====
-
-endif::VK_EXT_full_screen_exclusive[]
-
-ifdef::VK_NV_acquire_winrt_display[]
-When the slink:VkSurfaceKHR in slink:VkSwapchainCreateInfoKHR is a display
-surface, then the slink:VkDisplayModeKHR in display surface's
-slink:VkDisplaySurfaceCreateInfoKHR is associated with a particular
-slink:VkDisplayKHR.
-Swapchain creation may: fail if that slink:VkDisplayKHR is not acquired by
-the application.
-In this scenario ename:VK_ERROR_INITIALIZATION_FAILED is returned.
-endif::VK_NV_acquire_winrt_display[]
-
-include::{generated}/validity/protos/vkCreateSwapchainKHR.txt[]
---
-
-[open,refpage='VkSwapchainCreateInfoKHR',desc='Structure specifying parameters of a newly created swapchain object',type='structs']
---
-The sname:VkSwapchainCreateInfoKHR structure is defined as:
-
-include::{generated}/api/structs/VkSwapchainCreateInfoKHR.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:flags is a bitmask of elink:VkSwapchainCreateFlagBitsKHR
-    indicating parameters of the swapchain creation.
-  * pname:surface is the surface onto which the swapchain will present
-    images.
-    If the creation succeeds, the swapchain becomes associated with
-    pname:surface.
-  * pname:minImageCount is the minimum number of presentable images that the
-    application needs.
-    The implementation will either create the swapchain with at least that
-    many images, or it will fail to create the swapchain.
-  * pname:imageFormat is a elink:VkFormat value specifying the format the
-    swapchain image(s) will be created with.
-  * pname:imageColorSpace is a elink:VkColorSpaceKHR value specifying the
-    way the swapchain interprets image data.
-  * pname:imageExtent is the size (in pixels) of the swapchain image(s).
-    The behavior is platform-dependent if the image extent does not match
-    the surface's pname:currentExtent as returned by
-    fname:vkGetPhysicalDeviceSurfaceCapabilitiesKHR.
-+
-[NOTE]
-.Note
-====
-On some platforms, it is normal that pname:maxImageExtent may: become `(0,
-0)`, for example when the window is minimized.
-In such a case, it is not possible to create a swapchain due to the Valid
-Usage requirements.
-====
-  * pname:imageArrayLayers is the number of views in a multiview/stereo
-    surface.
-    For non-stereoscopic-3D applications, this value is 1.
-  * pname:imageUsage is a bitmask of elink:VkImageUsageFlagBits describing
-    the intended usage of the (acquired) swapchain images.
-  * pname:imageSharingMode is the sharing mode used for the image(s) of the
-    swapchain.
-  * pname:queueFamilyIndexCount is the number of queue families having
-    access to the image(s) of the swapchain when pname:imageSharingMode is
-    ename:VK_SHARING_MODE_CONCURRENT.
-  * pname:pQueueFamilyIndices is a pointer to an array of queue family
-    indices having access to the images(s) of the swapchain when
-    pname:imageSharingMode is ename:VK_SHARING_MODE_CONCURRENT.
-  * pname:preTransform is a elink:VkSurfaceTransformFlagBitsKHR value
-    describing the transform, relative to the presentation engine's natural
-    orientation, applied to the image content prior to presentation.
-    If it does not match the pname:currentTransform value returned by
-    fname:vkGetPhysicalDeviceSurfaceCapabilitiesKHR, the presentation engine
-    will transform the image content as part of the presentation operation.
-  * pname:compositeAlpha is a elink:VkCompositeAlphaFlagBitsKHR value
-    indicating the alpha compositing mode to use when this surface is
-    composited together with other surfaces on certain window systems.
-  * pname:presentMode is the presentation mode the swapchain will use.
-    A swapchain's present mode determines how incoming present requests will
-    be processed and queued internally.
-  * pname:clipped specifies whether the Vulkan implementation is allowed to
-    discard rendering operations that affect regions of the surface that are
-    not visible.
-  ** If set to ename:VK_TRUE, the presentable images associated with the
-     swapchain may: not own all of their pixels.
-     Pixels in the presentable images that correspond to regions of the
-     target surface obscured by another window on the desktop, or subject to
-     some other clipping mechanism will have undefined: content when read
-     back.
-     Fragment shaders may: not execute for these pixels, and thus any side
-     effects they would have had will not occur.
-     Setting ename:VK_TRUE does not guarantee any clipping will occur, but
-     allows more efficient presentation methods to be used on some
-     platforms.
-  ** If set to ename:VK_FALSE, presentable images associated with the
-     swapchain will own all of the pixels they contain.
-+
-[NOTE]
-.Note
-====
-Applications should: set this value to ename:VK_TRUE if they do not expect
-to read back the content of presentable images before presenting them or
-after reacquiring them, and if their fragment shaders do not have any side
-effects that require them to run for all pixels in the presentable image.
-====
-  * pname:oldSwapchain is dlink:VK_NULL_HANDLE, or the existing non-retired
-    swapchain currently associated with pname:surface.
-    Providing a valid pname:oldSwapchain may: aid in the resource reuse, and
-    also allows the application to still present any images that are already
-    acquired from it.
-
-Upon calling fname:vkCreateSwapchainKHR with an pname:oldSwapchain that is
-not dlink:VK_NULL_HANDLE, pname:oldSwapchain is retired -- even if creation
-of the new swapchain fails.
-The new swapchain is created in the non-retired state whether or not
-pname:oldSwapchain is dlink:VK_NULL_HANDLE.
-
-Upon calling fname:vkCreateSwapchainKHR with an pname:oldSwapchain that is
-not dlink:VK_NULL_HANDLE, any images from pname:oldSwapchain that are not
-acquired by the application may: be freed by the implementation, which may:
-occur even if creation of the new swapchain fails.
-The application can: destroy pname:oldSwapchain to free all memory
-associated with pname:oldSwapchain.
-
-[NOTE]
-.Note
-====
-Multiple retired swapchains can: be associated with the same
-sname:VkSurfaceKHR through multiple uses of pname:oldSwapchain that
-outnumber calls to flink:vkDestroySwapchainKHR.
-
-After pname:oldSwapchain is retired, the application can: pass to
-flink:vkQueuePresentKHR any images it had already acquired from
-pname:oldSwapchain.
-E.g., an application may present an image from the old swapchain before an
-image from the new swapchain is ready to be presented.
-As usual, flink:vkQueuePresentKHR may: fail if pname:oldSwapchain has
-entered a state that causes ename:VK_ERROR_OUT_OF_DATE_KHR to be returned.
-
-ifdef::VK_KHR_shared_presentable_image[]
-The application can: continue to use a shared presentable image obtained
-from pname:oldSwapchain until a presentable image is acquired from the new
-swapchain, as long as it has not entered a state that causes it to return
-ename:VK_ERROR_OUT_OF_DATE_KHR.
-endif::VK_KHR_shared_presentable_image[]
-====
-
-.Valid Usage
-****
-  * [[VUID-VkSwapchainCreateInfoKHR-surface-01270]]
-    pname:surface must: be a surface that is supported by the device as
-    determined using flink:vkGetPhysicalDeviceSurfaceSupportKHR
-ifndef::VK_KHR_shared_presentable_image[]
-  * [[VUID-VkSwapchainCreateInfoKHR-minImageCount-01271]]
-    pname:minImageCount must: be greater than or equal to the value returned
-    in the pname:minImageCount member of the sname:VkSurfaceCapabilitiesKHR
-    structure returned by flink:vkGetPhysicalDeviceSurfaceCapabilitiesKHR
-    for the surface
-endif::VK_KHR_shared_presentable_image[]
-  * [[VUID-VkSwapchainCreateInfoKHR-minImageCount-01272]]
-    pname:minImageCount must: be less than or equal to the value returned in
-    the pname:maxImageCount member of the sname:VkSurfaceCapabilitiesKHR
-    structure returned by fname:vkGetPhysicalDeviceSurfaceCapabilitiesKHR
-    for the surface if the returned pname:maxImageCount is not zero
-ifdef::VK_KHR_shared_presentable_image[]
-  * [[VUID-VkSwapchainCreateInfoKHR-presentMode-02839]]
-    If pname:presentMode is not
-    ename:VK_PRESENT_MODE_SHARED_DEMAND_REFRESH_KHR nor
-    ename:VK_PRESENT_MODE_SHARED_CONTINUOUS_REFRESH_KHR, then
-    pname:minImageCount must: be greater than or equal to the value returned
-    in the pname:minImageCount member of the sname:VkSurfaceCapabilitiesKHR
-    structure returned by flink:vkGetPhysicalDeviceSurfaceCapabilitiesKHR
-    for the surface
-  * [[VUID-VkSwapchainCreateInfoKHR-minImageCount-01383]]
-    pname:minImageCount must: be `1` if pname:presentMode is either
-    ename:VK_PRESENT_MODE_SHARED_DEMAND_REFRESH_KHR or
-    ename:VK_PRESENT_MODE_SHARED_CONTINUOUS_REFRESH_KHR
-endif::VK_KHR_shared_presentable_image[]
-  * [[VUID-VkSwapchainCreateInfoKHR-imageFormat-01273]]
-    pname:imageFormat and pname:imageColorSpace must: match the pname:format
-    and pname:colorSpace members, respectively, of one of the
-    sname:VkSurfaceFormatKHR structures returned by
-    fname:vkGetPhysicalDeviceSurfaceFormatsKHR for the surface
-  * [[VUID-VkSwapchainCreateInfoKHR-imageExtent-01274]]
-    pname:imageExtent must: be between pname:minImageExtent and
-    pname:maxImageExtent, inclusive, where pname:minImageExtent and
-    pname:maxImageExtent are members of the sname:VkSurfaceCapabilitiesKHR
-    structure returned by fname:vkGetPhysicalDeviceSurfaceCapabilitiesKHR
-    for the surface
-  * [[VUID-VkSwapchainCreateInfoKHR-imageExtent-01689]]
-    pname:imageExtent members pname:width and pname:height must: both be
-    non-zero
-  * [[VUID-VkSwapchainCreateInfoKHR-imageArrayLayers-01275]]
-    pname:imageArrayLayers must: be greater than `0` and less than or equal
-    to the pname:maxImageArrayLayers member of the
-    sname:VkSurfaceCapabilitiesKHR structure returned by
-    fname:vkGetPhysicalDeviceSurfaceCapabilitiesKHR for the surface
-ifndef::VK_KHR_shared_presentable_image[]
-  * [[VUID-VkSwapchainCreateInfoKHR-imageUsage-01276]]
-    pname:imageUsage must: be a subset of the supported usage flags present
-    in the pname:supportedUsageFlags member of the
-    sname:VkSurfaceCapabilitiesKHR structure returned by
-    fname:vkGetPhysicalDeviceSurfaceCapabilitiesKHR for the surface
-endif::VK_KHR_shared_presentable_image[]
-ifdef::VK_KHR_shared_presentable_image[]
-  * [[VUID-VkSwapchainCreateInfoKHR-presentMode-01427]]
-    If pname:presentMode is ename:VK_PRESENT_MODE_IMMEDIATE_KHR,
-    ename:VK_PRESENT_MODE_MAILBOX_KHR, ename:VK_PRESENT_MODE_FIFO_KHR or
-    ename:VK_PRESENT_MODE_FIFO_RELAXED_KHR, pname:imageUsage must: be a
-    subset of the supported usage flags present in the
-    pname:supportedUsageFlags member of the slink:VkSurfaceCapabilitiesKHR
-    structure returned by flink:vkGetPhysicalDeviceSurfaceCapabilitiesKHR
-    for pname:surface
-  * [[VUID-VkSwapchainCreateInfoKHR-imageUsage-01384]]
-    If pname:presentMode is ename:VK_PRESENT_MODE_SHARED_DEMAND_REFRESH_KHR
-    or ename:VK_PRESENT_MODE_SHARED_CONTINUOUS_REFRESH_KHR, pname:imageUsage
-    must: be a subset of the supported usage flags present in the
-    pname:sharedPresentSupportedUsageFlags member of the
-    slink:VkSharedPresentSurfaceCapabilitiesKHR structure returned by
-    flink:vkGetPhysicalDeviceSurfaceCapabilities2KHR for pname:surface
-endif::VK_KHR_shared_presentable_image[]
-  * [[VUID-VkSwapchainCreateInfoKHR-imageSharingMode-01277]]
-    If pname:imageSharingMode is ename:VK_SHARING_MODE_CONCURRENT,
-    pname:pQueueFamilyIndices must: be a valid pointer to an array of
-    pname:queueFamilyIndexCount code:uint32_t values
-  * [[VUID-VkSwapchainCreateInfoKHR-imageSharingMode-01278]]
-    If pname:imageSharingMode is ename:VK_SHARING_MODE_CONCURRENT,
-    pname:queueFamilyIndexCount must: be greater than `1`
-ifndef::VK_VERSION_1_1,VK_KHR_get_physical_device_properties2[]
-  * [[VUID-VkSwapchainCreateInfoKHR-imageSharingMode-01393]]
-    If pname:imageSharingMode is ename:VK_SHARING_MODE_CONCURRENT, each
-    element of pname:pQueueFamilyIndices must: be unique and must: be less
-    than pname:pQueueFamilyPropertyCount returned by
-    flink:vkGetPhysicalDeviceQueueFamilyProperties for the
-    pname:physicalDevice that was used to create pname:device
-endif::VK_VERSION_1_1,VK_KHR_get_physical_device_properties2[]
-ifdef::VK_VERSION_1_1,VK_KHR_get_physical_device_properties2[]
-  * [[VUID-VkSwapchainCreateInfoKHR-imageSharingMode-01428]]
-    If pname:imageSharingMode is ename:VK_SHARING_MODE_CONCURRENT, each
-    element of pname:pQueueFamilyIndices must: be unique and must: be less
-    than pname:pQueueFamilyPropertyCount returned by either
-    flink:vkGetPhysicalDeviceQueueFamilyProperties or
-    flink:vkGetPhysicalDeviceQueueFamilyProperties2 for the
-    pname:physicalDevice that was used to create pname:device
-endif::VK_VERSION_1_1,VK_KHR_get_physical_device_properties2[]
-  * [[VUID-VkSwapchainCreateInfoKHR-preTransform-01279]]
-    pname:preTransform must: be one of the bits present in the
-    pname:supportedTransforms member of the sname:VkSurfaceCapabilitiesKHR
-    structure returned by fname:vkGetPhysicalDeviceSurfaceCapabilitiesKHR
-    for the surface
-  * [[VUID-VkSwapchainCreateInfoKHR-compositeAlpha-01280]]
-    pname:compositeAlpha must: be one of the bits present in the
-    pname:supportedCompositeAlpha member of the
-    sname:VkSurfaceCapabilitiesKHR structure returned by
-    fname:vkGetPhysicalDeviceSurfaceCapabilitiesKHR for the surface
-  * [[VUID-VkSwapchainCreateInfoKHR-presentMode-01281]]
-    pname:presentMode must: be one of the elink:VkPresentModeKHR values
-    returned by fname:vkGetPhysicalDeviceSurfacePresentModesKHR for the
-    surface
-ifdef::VK_VERSION_1_1,VK_KHR_device_group[]
-  * [[VUID-VkSwapchainCreateInfoKHR-physicalDeviceCount-01429]]
-    If the logical device was created with
-    slink:VkDeviceGroupDeviceCreateInfo::pname:physicalDeviceCount equal to
-    1, pname:flags must: not contain
-    ename:VK_SWAPCHAIN_CREATE_SPLIT_INSTANCE_BIND_REGIONS_BIT_KHR
-endif::VK_VERSION_1_1,VK_KHR_device_group[]
-  * [[VUID-VkSwapchainCreateInfoKHR-oldSwapchain-01933]]
-    If pname:oldSwapchain is not dlink:VK_NULL_HANDLE, pname:oldSwapchain
-    must: be a non-retired swapchain associated with native window referred
-    to by pname:surface
-  * [[VUID-VkSwapchainCreateInfoKHR-imageFormat-01778]]
-    The <<swapchain-wsi-image-create-info, implied image creation
-    parameters>> of the swapchain must: be supported as reported by
-    flink:vkGetPhysicalDeviceImageFormatProperties
-ifdef::VK_KHR_swapchain_mutable_format[]
-  * [[VUID-VkSwapchainCreateInfoKHR-flags-03168]]
-    If pname:flags contains ename:VK_SWAPCHAIN_CREATE_MUTABLE_FORMAT_BIT_KHR
-    then the pname:pNext chain must: include a
-    slink:VkImageFormatListCreateInfo structure with a pname:viewFormatCount
-    greater than zero and pname:pViewFormats must: have an element equal to
-    pname:imageFormat
-  * [[VUID-VkSwapchainCreateInfoKHR-pNext-04099]]
-    If a slink:VkImageFormatListCreateInfo structure was included in the
-    pname:pNext chain and
-    slink:VkImageFormatListCreateInfo::pname:viewFormatCount is not zero
-    then all of the formats in
-    slink:VkImageFormatListCreateInfo::pname:pViewFormats must: be
-    compatible with the pname:format as described in the
-    <<formats-compatibility,compatibility table>>
-  * [[VUID-VkSwapchainCreateInfoKHR-flags-04100]]
-    If pname:flags does not contain
-    ename:VK_SWAPCHAIN_CREATE_MUTABLE_FORMAT_BIT_KHR and the pname:pNext
-    chain include a slink:VkImageFormatListCreateInfo structure then
-    slink:VkImageFormatListCreateInfo::pname:viewFormatCount must: be `0` or
-    `1`
-endif::VK_KHR_swapchain_mutable_format[]
-ifdef::VK_KHR_surface_protected_capabilities[]
-  * [[VUID-VkSwapchainCreateInfoKHR-flags-03187]]
-    If pname:flags contains ename:VK_SWAPCHAIN_CREATE_PROTECTED_BIT_KHR,
-    then sname:VkSurfaceProtectedCapabilitiesKHR::pname:supportsProtected
-    must: be ename:VK_TRUE in the slink:VkSurfaceProtectedCapabilitiesKHR
-    structure returned by flink:vkGetPhysicalDeviceSurfaceCapabilities2KHR
-    for pname:surface
-endif::VK_KHR_surface_protected_capabilities[]
-ifdef::VK_EXT_full_screen_exclusive+VK_KHR_win32_surface[]
-  * [[VUID-VkSwapchainCreateInfoKHR-pNext-02679]]
-    If the pname:pNext chain includes a
-    slink:VkSurfaceFullScreenExclusiveInfoEXT structure with its
-    pname:fullScreenExclusive member set to
-    ename:VK_FULL_SCREEN_EXCLUSIVE_APPLICATION_CONTROLLED_EXT, and
-    pname:surface was created using flink:vkCreateWin32SurfaceKHR, a
-    slink:VkSurfaceFullScreenExclusiveWin32InfoEXT structure must: be
-    included in the pname:pNext chain
-endif::VK_EXT_full_screen_exclusive+VK_KHR_win32_surface[]
-****
-
-include::{generated}/validity/structs/VkSwapchainCreateInfoKHR.txt[]
---
-
-[open,refpage='VkSwapchainCreateFlagBitsKHR',desc='Bitmask controlling swapchain creation',type='enums']
---
-Bits which can: be set in slink:VkSwapchainCreateInfoKHR::pname:flags,
-specifying parameters of swapchain creation, are:
-
-include::{generated}/api/enums/VkSwapchainCreateFlagBitsKHR.txt[]
-
-ifdef::VK_VERSION_1_1,VK_KHR_device_group[]
-  * ename:VK_SWAPCHAIN_CREATE_SPLIT_INSTANCE_BIND_REGIONS_BIT_KHR specifies
-    that images created from the swapchain (i.e. with the pname:swapchain
-    member of slink:VkImageSwapchainCreateInfoKHR set to this swapchain's
-    handle) must: use ename:VK_IMAGE_CREATE_SPLIT_INSTANCE_BIND_REGIONS_BIT.
-endif::VK_VERSION_1_1,VK_KHR_device_group[]
-ifdef::VK_VERSION_1_1[]
-  * ename:VK_SWAPCHAIN_CREATE_PROTECTED_BIT_KHR specifies that images
-    created from the swapchain are protected images.
-endif::VK_VERSION_1_1[]
-ifdef::VK_KHR_swapchain_mutable_format[]
-  * ename:VK_SWAPCHAIN_CREATE_MUTABLE_FORMAT_BIT_KHR specifies that the
-    images of the swapchain can: be used to create a sname:VkImageView with
-    a different format than what the swapchain was created with.
-    The list of allowed image view formats is specified by adding a
-    slink:VkImageFormatListCreateInfo structure to the pname:pNext chain of
-    slink:VkSwapchainCreateInfoKHR.
-    In addition, this flag also specifies that the swapchain can: be created
-    with usage flags that are not supported for the format the swapchain is
-    created with but are supported for at least one of the allowed image
-    view formats.
-endif::VK_KHR_swapchain_mutable_format[]
---
-
-[open,refpage='VkSwapchainCreateFlagsKHR',desc='Bitmask of VkSwapchainCreateFlagBitsKHR',type='flags']
---
-include::{generated}/api/flags/VkSwapchainCreateFlagsKHR.txt[]
-
-tname:VkSwapchainCreateFlagsKHR is a bitmask type for setting a mask of zero
-or more elink:VkSwapchainCreateFlagBitsKHR.
---
-
-ifdef::VK_VERSION_1_1,VK_KHR_device_group[]
-[open,refpage='VkDeviceGroupSwapchainCreateInfoKHR',desc='Structure specifying parameters of a newly created swapchain object',type='structs']
---
-If the pname:pNext chain of slink:VkSwapchainCreateInfoKHR includes a
-sname:VkDeviceGroupSwapchainCreateInfoKHR structure, then that structure
-includes a set of device group present modes that the swapchain can: be used
-with.
-
-The sname:VkDeviceGroupSwapchainCreateInfoKHR structure is defined as:
-
-include::{generated}/api/structs/VkDeviceGroupSwapchainCreateInfoKHR.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:modes is a bitfield of modes that the swapchain can: be used with.
-
-If this structure is not present, pname:modes is considered to be
-ename:VK_DEVICE_GROUP_PRESENT_MODE_LOCAL_BIT_KHR.
-
-include::{generated}/validity/structs/VkDeviceGroupSwapchainCreateInfoKHR.txt[]
---
-endif::VK_VERSION_1_1,VK_KHR_device_group[]
-
-ifdef::VK_AMD_display_native_hdr[]
-[open,refpage='VkSwapchainDisplayNativeHdrCreateInfoAMD',desc='Structure specifying display native HDR parameters of a newly created swapchain object',type='structs']
---
-If the pname:pNext chain of slink:VkSwapchainCreateInfoKHR includes a
-sname:VkSwapchainDisplayNativeHdrCreateInfoAMD structure, then that
-structure includes additional swapchain creation parameters specific to
-display native HDR support.
-
-The sname:VkSwapchainDisplayNativeHdrCreateInfoAMD structure is defined as:
-
-include::{generated}/api/structs/VkSwapchainDisplayNativeHdrCreateInfoAMD.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:localDimmingEnable specifies whether local dimming is enabled for
-    the swapchain.
-
-If the pname:pNext chain of slink:VkSwapchainCreateInfoKHR does not include
-this structure, the default value for pname:localDimmingEnable is
-ename:VK_TRUE, meaning local dimming is initially enabled for the swapchain.
-
-include::{generated}/validity/structs/VkSwapchainDisplayNativeHdrCreateInfoAMD.txt[]
-
-.Valid Usage
-****
-  * [[VUID-VkSwapchainDisplayNativeHdrCreateInfoAMD-localDimmingEnable-04449]]
-    It is only valid to set pname:localDimmingEnable to ename:VK_TRUE if
-    slink:VkDisplayNativeHdrSurfaceCapabilitiesAMD::pname:localDimmingSupport
-    is supported
-****
---
-
-[open,refpage='vkSetLocalDimmingAMD',desc='Set Local Dimming',type='protos']
---
-The local dimming HDR setting may also be changed over the life of a
-swapchain by calling:
-
-include::{generated}/api/protos/vkSetLocalDimmingAMD.txt[]
-
-  * pname:device is the device associated with pname:swapChain.
-  * pname:swapChain handle to enable local dimming.
-  * pname:localDimmingEnable specifies whether local dimming is enabled for
-    the swapchain.
-
-include::{generated}/validity/protos/vkSetLocalDimmingAMD.txt[]
-
-.Valid Usage
-****
-  * [[VUID-vkSetLocalDimmingAMD-localDimmingSupport-04618]]
-    slink:VkDisplayNativeHdrSurfaceCapabilitiesAMD::pname:localDimmingSupport
-    must: be supported
-****
---
-endif::VK_AMD_display_native_hdr[]
-
-ifdef::VK_EXT_full_screen_exclusive[]
---
-
-If the pname:pNext chain of slink:VkSwapchainCreateInfoKHR includes a
-slink:VkSurfaceFullScreenExclusiveInfoEXT structure, then that structure
-specifies the application's preferred full-screen presentation behavior.
-If this structure is not present, pname:fullScreenExclusive is considered to
-be ename:VK_FULL_SCREEN_EXCLUSIVE_DEFAULT_EXT.
-
---
-
-endif::VK_EXT_full_screen_exclusive[]
-
-ifdef::VK_EXT_display_control[]
-include::{chapters}/VK_EXT_display_control/swapchain_counters.txt[]
-endif::VK_EXT_display_control[]
-
-As mentioned above, if fname:vkCreateSwapchainKHR succeeds, it will return a
-handle to a swapchain containing an array of at least pname:minImageCount
-presentable images.
-
-While acquired by the application, presentable images can: be used in any
-way that equivalent non-presentable images can: be used.
-A presentable image is equivalent to a non-presentable image created with
-the following slink:VkImageCreateInfo parameters:
-
-[[swapchain-wsi-image-create-info]]
-[options="header"]
-|====
-| sname:VkImageCreateInfo Field | Value
-ifndef::VK_VERSION_1_1,VK_KHR_device_group,VK_KHR_swapchain_mutable_format[]
-| pname:flags                   | 0
-endif::VK_VERSION_1_1,VK_KHR_device_group,VK_KHR_swapchain_mutable_format[]
-ifdef::VK_VERSION_1_1,VK_KHR_device_group,VK_KHR_swapchain_mutable_format[]
-| pname:flags                   |
-ifdef::VK_VERSION_1_1,VK_KHR_device_group[]
-ename:VK_IMAGE_CREATE_SPLIT_INSTANCE_BIND_REGIONS_BIT is set if
-ename:VK_SWAPCHAIN_CREATE_SPLIT_INSTANCE_BIND_REGIONS_BIT_KHR is set
-
-endif::VK_VERSION_1_1,VK_KHR_device_group[]
-ifdef::VK_VERSION_1_1[]
-ename:VK_IMAGE_CREATE_PROTECTED_BIT is set if
-ename:VK_SWAPCHAIN_CREATE_PROTECTED_BIT_KHR is set
-
-endif::VK_VERSION_1_1[]
-ifdef::VK_KHR_swapchain_mutable_format[]
-ename:VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT and
-ename:VK_IMAGE_CREATE_EXTENDED_USAGE_BIT_KHR are both set if
-ename:VK_SWAPCHAIN_CREATE_MUTABLE_FORMAT_BIT_KHR is set
-
-endif::VK_KHR_swapchain_mutable_format[]
-all other bits are unset
-endif::VK_VERSION_1_1,VK_KHR_device_group,VK_KHR_swapchain_mutable_format[]
-| pname:imageType               | ename:VK_IMAGE_TYPE_2D
-| pname:format                  | pname:pCreateInfo->imageFormat
-| pname:extent                  | {pname:pCreateInfo->imageExtent.width, pname:pCreateInfo->imageExtent.height, `1`}
-| pname:mipLevels               | 1
-| pname:arrayLayers             | pname:pCreateInfo->imageArrayLayers
-| pname:samples                 | ename:VK_SAMPLE_COUNT_1_BIT
-| pname:tiling                  | ename:VK_IMAGE_TILING_OPTIMAL
-| pname:usage                   | pname:pCreateInfo->imageUsage
-| pname:sharingMode             | pname:pCreateInfo->imageSharingMode
-| pname:queueFamilyIndexCount   | pname:pCreateInfo->queueFamilyIndexCount
-| pname:pQueueFamilyIndices     | pname:pCreateInfo->pQueueFamilyIndices
-| pname:initialLayout           | ename:VK_IMAGE_LAYOUT_UNDEFINED
-|====
-
-The pname:surface must: not be destroyed until after the swapchain is
-destroyed.
-
-If pname:oldSwapchain is dlink:VK_NULL_HANDLE, and the native window
-referred to by pname:surface is already associated with a Vulkan swapchain,
-ename:VK_ERROR_NATIVE_WINDOW_IN_USE_KHR must: be returned.
-
-If the native window referred to by pname:surface is already associated with
-a non-Vulkan graphics API surface, ename:VK_ERROR_NATIVE_WINDOW_IN_USE_KHR
-must: be returned.
-
-The native window referred to by pname:surface must: not become associated
-with a non-Vulkan graphics API surface before all associated Vulkan
-swapchains have been destroyed.
-
-Like core functions, several WSI functions, including
-fname:vkCreateSwapchainKHR return ename:VK_ERROR_DEVICE_LOST if the logical
-device was lost.
-See <<devsandqueues-lost-device,Lost Device>>.
-As with most core objects, sname:VkSwapchainKHR is a child of the device and
-is affected by the lost state; it must: be destroyed before destroying the
-sname:VkDevice.
-However, sname:VkSurfaceKHR is not a child of any sname:VkDevice and is not
-otherwise affected by the lost device.
-After successfully recreating a sname:VkDevice, the same sname:VkSurfaceKHR
-can: be used to create a new sname:VkSwapchainKHR, provided the previous one
-was destroyed.
-
-[NOTE]
-.Note
-====
-As mentioned in <<devsandqueues-lost-device,Lost Device>>, after a lost
-device event, the sname:VkPhysicalDevice may: also be lost.
-If other sname:VkPhysicalDevice are available, they can: be used together
-with the same sname:VkSurfaceKHR to create the new sname:VkSwapchainKHR,
-however the application must: query the surface capabilities again, because
-they may: differ on a per-physical device basis.
-====
-
-[open,refpage='vkDestroySwapchainKHR',desc='Destroy a swapchain object',type='protos']
---
-To destroy a swapchain object call:
-
-include::{generated}/api/protos/vkDestroySwapchainKHR.txt[]
-
-  * pname:device is the slink:VkDevice associated with pname:swapchain.
-  * pname:swapchain is the swapchain to destroy.
-  * pname:pAllocator is the allocator used for host memory allocated for the
-    swapchain object when there is no more specific allocator available (see
-    <<memory-allocation,Memory Allocation>>).
-
-The application must: not destroy a swapchain until after completion of all
-outstanding operations on images that were acquired from the swapchain.
-pname:swapchain and all associated sname:VkImage handles are destroyed, and
-must: not be acquired or used any more by the application.
-The memory of each sname:VkImage will only be freed after that image is no
-longer used by the presentation engine.
-For example, if one image of the swapchain is being displayed in a window,
-the memory for that image may: not be freed until the window is destroyed,
-or another swapchain is created for the window.
-Destroying the swapchain does not invalidate the parent sname:VkSurfaceKHR,
-and a new swapchain can: be created with it.
-
-ifdef::VK_KHR_display_swapchain[]
-include::{chapters}/VK_KHR_display_swapchain/destroy_swapchain_interactions.txt[]
-endif::VK_KHR_display_swapchain[]
-
-ifdef::VK_EXT_full_screen_exclusive[]
-If pname:swapchain has exclusive full-screen access, it is released before
-the swapchain is destroyed.
-endif::VK_EXT_full_screen_exclusive[]
-
-.Valid Usage
-****
-  * [[VUID-vkDestroySwapchainKHR-swapchain-01282]]
-    All uses of presentable images acquired from pname:swapchain must: have
-    completed execution
-  * [[VUID-vkDestroySwapchainKHR-swapchain-01283]]
-    If sname:VkAllocationCallbacks were provided when pname:swapchain was
-    created, a compatible set of callbacks must: be provided here
-  * [[VUID-vkDestroySwapchainKHR-swapchain-01284]]
-    If no sname:VkAllocationCallbacks were provided when pname:swapchain was
-    created, pname:pAllocator must: be `NULL`
-****
-
-include::{generated}/validity/protos/vkDestroySwapchainKHR.txt[]
---
-
-ifdef::VK_KHR_display_swapchain[]
-include::{chapters}/VK_KHR_display_swapchain/create_shared_swapchains.txt[]
-endif::VK_KHR_display_swapchain[]
-
-[open,refpage='vkGetSwapchainImagesKHR',desc='Obtain the array of presentable images associated with a swapchain',type='protos']
---
-To obtain the array of presentable images associated with a swapchain, call:
-
-include::{generated}/api/protos/vkGetSwapchainImagesKHR.txt[]
-
-  * pname:device is the device associated with pname:swapchain.
-  * pname:swapchain is the swapchain to query.
-  * pname:pSwapchainImageCount is a pointer to an integer related to the
-    number of presentable images available or queried, as described below.
-  * pname:pSwapchainImages is either `NULL` or a pointer to an array of
-    sname:VkImage handles.
-
-If pname:pSwapchainImages is `NULL`, then the number of presentable images
-for pname:swapchain is returned in pname:pSwapchainImageCount.
-Otherwise, pname:pSwapchainImageCount must: point to a variable set by the
-user to the number of elements in the pname:pSwapchainImages array, and on
-return the variable is overwritten with the number of structures actually
-written to pname:pSwapchainImages.
-If the value of pname:pSwapchainImageCount is less than the number of
-presentable images for pname:swapchain, at most pname:pSwapchainImageCount
-structures will be written, and ename:VK_INCOMPLETE will be returned instead
-of ename:VK_SUCCESS, to indicate that not all the available presentable
-images were returned.
-
-include::{generated}/validity/protos/vkGetSwapchainImagesKHR.txt[]
---
-
-[NOTE]
-.Note
-====
-By knowing all presentable images used in the swapchain, the application
-can: create command buffers that reference these images prior to entering
-its main rendering loop.
-====
-
-Images returned by flink:vkGetSwapchainImagesKHR are fully backed by memory
-before they are passed to the application.
-All presentable images are initially in the ename:VK_IMAGE_LAYOUT_UNDEFINED
-layout, thus before using presentable images, the application must:
-transition them to a valid layout for the intended use.
-
-Further, the lifetime of presentable images is controlled by the
-implementation, so applications must: not destroy a presentable image.
-See flink:vkDestroySwapchainKHR for further details on the lifetime of
-presentable images.
-
-ifdef::VK_VERSION_1_1,VK_KHR_device_group[]
-
-Images can: also be created by using flink:vkCreateImage with
-slink:VkImageSwapchainCreateInfoKHR and bound to swapchain memory using
-flink:vkBindImageMemory2KHR with slink:VkBindImageMemorySwapchainInfoKHR.
-These images can: be used anywhere swapchain images are used, and are useful
-in logical devices with multiple physical devices to create peer memory
-bindings of swapchain memory.
-These images and bindings have no effect on what memory is presented.
-Unlike images retrieved from fname:vkGetSwapchainImagesKHR, these images
-must: be destroyed with flink:vkDestroyImage.
-
-endif::VK_VERSION_1_1,VK_KHR_device_group[]
-
-[open,refpage='vkAcquireNextImageKHR',desc='Retrieve the index of the next available presentable image',type='protos']
---
-To acquire an available presentable image to use, and retrieve the index of
-that image, call:
-
-include::{generated}/api/protos/vkAcquireNextImageKHR.txt[]
-
-  * pname:device is the device associated with pname:swapchain.
-  * pname:swapchain is the non-retired swapchain from which an image is
-    being acquired.
-  * pname:timeout specifies how long the function waits, in nanoseconds, if
-    no image is available.
-  * pname:semaphore is dlink:VK_NULL_HANDLE or a semaphore to signal.
-  * pname:fence is dlink:VK_NULL_HANDLE or a fence to signal.
-  * pname:pImageIndex is a pointer to a code:uint32_t in which the index of
-    the next image to use (i.e. an index into the array of images returned
-    by fname:vkGetSwapchainImagesKHR) is returned.
-
-.Valid Usage
-****
-  * [[VUID-vkAcquireNextImageKHR-swapchain-01285]]
-    pname:swapchain must: not be in the retired state
-  * [[VUID-vkAcquireNextImageKHR-semaphore-01286]]
-    If pname:semaphore is not dlink:VK_NULL_HANDLE it must: be unsignaled
-  * [[VUID-vkAcquireNextImageKHR-semaphore-01779]]
-    If pname:semaphore is not dlink:VK_NULL_HANDLE it must: not have any
-    uncompleted signal or wait operations pending
-  * [[VUID-vkAcquireNextImageKHR-fence-01287]]
-    If pname:fence is not dlink:VK_NULL_HANDLE it must: be unsignaled and
-    must: not be associated with any other queue command that has not yet
-    completed execution on that queue
-  * [[VUID-vkAcquireNextImageKHR-semaphore-01780]]
-    pname:semaphore and pname:fence must: not both be equal to
-    dlink:VK_NULL_HANDLE
-  * [[VUID-vkAcquireNextImageKHR-swapchain-01802]]
-    If the number of currently acquired images is greater than the
-    difference between the number of images in pname:swapchain and the value
-    of slink:VkSurfaceCapabilitiesKHR::pname:minImageCount as returned by a
-    call to flink:vkGetPhysicalDeviceSurfaceCapabilities2KHR with the
-    pname:surface used to create pname:swapchain, pname:timeout must: not be
-    code:UINT64_MAX
-ifdef::VK_VERSION_1_2,VK_KHR_timeline_semaphore[]
-  * [[VUID-vkAcquireNextImageKHR-semaphore-03265]]
-    pname:semaphore must: have a elink:VkSemaphoreType of
-    ename:VK_SEMAPHORE_TYPE_BINARY
-endif::VK_VERSION_1_2,VK_KHR_timeline_semaphore[]
-****
-
-include::{generated}/validity/protos/vkAcquireNextImageKHR.txt[]
---
-
-When successful, fname:vkAcquireNextImageKHR acquires a presentable image
-from pname:swapchain that an application can: use, and sets
-pname:pImageIndex to the index of that image within the swapchain.
-The presentation engine may: not have finished reading from the image at the
-time it is acquired, so the application must: use pname:semaphore and/or
-pname:fence to ensure that the image layout and contents are not modified
-until the presentation engine reads have completed.
-If pname:semaphore is not dlink:VK_NULL_HANDLE, the application may assume
-that, once fname:vkAcquireNextImageKHR returns, the semaphore signal
-operation referenced by pname:semaphore has been submitted for execution.
-The order in which images are acquired is implementation-dependent, and may:
-be different than the order the images were presented.
-
-If pname:timeout is zero, then fname:vkAcquireNextImageKHR does not wait,
-and will either successfully acquire an image, or fail and return
-ename:VK_NOT_READY if no image is available.
-
-If the specified timeout period expires before an image is acquired,
-fname:vkAcquireNextImageKHR returns ename:VK_TIMEOUT.
-If pname:timeout is code:UINT64_MAX, the timeout period is treated as
-infinite, and fname:vkAcquireNextImageKHR will block until an image is
-acquired or an error occurs.
-
-fname:vkAcquireNextImageKHR should: not be called if the number of images
-that the application has currently acquired is greater than the difference
-between the number of images in pname:swapchain and the value of
-slink:VkSurfaceCapabilitiesKHR::pname:minImageCount.
-If fname:vkAcquireNextImageKHR is called when the number of images that the
-application has currently acquired is less or equal than the difference
-between the number of images in pname:swapchain and the value of
-slink:VkSurfaceCapabilitiesKHR::pname:minImageCount,
-fname:vkAcquireNextImageKHR must: return in finite time with an allowed
-ename:VkResult code.
-
-[NOTE]
-.Note
-====
-Returning a result in finite time guarantees that the implementation cannot
-deadlock an application, or suspend its execution indefinitely with correct
-API usage.
-Acquiring too many images at once may block indefinitely, which is covered
-by valid usage when attempting to use code:UINT64_MAX.
-For example, a scenario here is when a compositor holds on to images which
-are currently being presented, and there are not any vacant images left to
-be acquired.
-====
-
-If an image is acquired successfully, fname:vkAcquireNextImageKHR must:
-either return ename:VK_SUCCESS or ename:VK_SUBOPTIMAL_KHR.
-The implementation may: return ename:VK_SUBOPTIMAL_KHR if the swapchain no
-longer matches the surface properties exactly, but can: still be used for
-presentation.
-
-[NOTE]
-.Note
-====
-ename:VK_SUBOPTIMAL_KHR may: happen, for example, if the platform surface
-has been resized but the platform is able to scale the presented images to
-the new size to produce valid surface updates.
-It is up to the application to decide whether it prefers to continue using
-the current swapchain in this state, or to re-create the swapchain to better
-match the platform surface properties.
-====
-
-If the swapchain images no longer match native surface properties, either
-ename:VK_SUBOPTIMAL_KHR or ename:VK_ERROR_OUT_OF_DATE_KHR must: be returned.
-If ename:VK_ERROR_OUT_OF_DATE_KHR is returned, no image is acquired and
-attempts to present previously acquired images to the swapchain will also
-fail with ename:VK_ERROR_OUT_OF_DATE_KHR.
-Applications need to create a new swapchain for the surface to continue
-presenting if ename:VK_ERROR_OUT_OF_DATE_KHR is returned.
-
-If device loss occurs (see <<devsandqueues-lost-device,Lost Device>>) before
-the timeout has expired, fname:vkAcquireNextImageKHR must: return in finite
-time with either one of the allowed success codes, or
-ename:VK_ERROR_DEVICE_LOST.
-
-If pname:semaphore is not dlink:VK_NULL_HANDLE, the semaphore must: be
-unsignaled, with no signal or wait operations pending.
-It will become signaled when the application can: use the image.
-
-[NOTE]
-.Note
-====
-Use of pname:semaphore allows rendering operations to be recorded and
-submitted before the presentation engine has completed its use of the image.
-====
-
-If pname:fence is not equal to dlink:VK_NULL_HANDLE, the fence must: be
-unsignaled, with no signal operations pending.
-It will become signaled when the application can: use the image.
-
-[NOTE]
-.Note
-====
-Applications should: not rely on fname:vkAcquireNextImageKHR blocking in
-order to meter their rendering speed.
-The implementation may: return from this function immediately regardless of
-how many presentation requests are queued, and regardless of when queued
-presentation requests will complete relative to the call.
-Instead, applications can: use pname:fence to meter their frame generation
-work to match the presentation rate.
-====
-
-An application must: wait until either the pname:semaphore or pname:fence is
-signaled before accessing the image's data.
-
-[NOTE]
-.Note
-====
-When the presentable image will be accessed by some stage [eq]#S#, the
-recommended idiom for ensuring correct synchronization is:
-
-  * The slink:VkSubmitInfo used to submit the image layout transition for
-    execution includes fname:vkAcquireNextImageKHR::pname:semaphore in its
-    pname:pWaitSemaphores member, with the corresponding element of
-    pname:pWaitDstStageMask including [eq]#S#.
-  * The <<synchronization, synchronization command>> that performs any
-    necessary image layout transition includes [eq]#S# in both the
-    pname:srcStageMask and pname:dstStageMask.
-====
-
-After a successful return, the image indicated by pname:pImageIndex and its
-data will be unmodified compared to when it was presented.
-
-[NOTE]
-.Note
-====
-Exclusive ownership of presentable images corresponding to a swapchain
-created with ename:VK_SHARING_MODE_EXCLUSIVE as defined in
-<<resources-sharing,Resource Sharing>> is not altered by a call to
-fname:vkAcquireNextImageKHR.
-That means upon the first acquisition from such a swapchain presentable
-images are not owned by any queue family, while at subsequent acquisitions
-the presentable images remain owned by the queue family the image was
-previously presented on.
-====
-
-The possible return values for fname:vkAcquireNextImageKHR depend on the
-pname:timeout provided:
-
-  * ename:VK_SUCCESS is returned if an image became available.
-  * ename:VK_ERROR_SURFACE_LOST_KHR is returned if the surface becomes no
-    longer available.
-  * ename:VK_NOT_READY is returned if pname:timeout is zero and no image was
-    available.
-  * ename:VK_TIMEOUT is returned if pname:timeout is greater than zero and
-    less than code:UINT64_MAX, and no image became available within the time
-    allowed.
-  * ename:VK_SUBOPTIMAL_KHR is returned if an image became available, and
-    the swapchain no longer matches the surface properties exactly, but can:
-    still be used to present to the surface successfully.
-
-[NOTE]
-.Note
-====
-This may: happen, for example, if the platform surface has been resized but
-the platform is able to scale the presented images to the new size to
-produce valid surface updates.
-It is up to the application to decide whether it prefers to continue using
-the current swapchain indefinitely or temporarily in this state, or to
-re-create the swapchain to better match the platform surface properties.
-====
-
-  * ename:VK_ERROR_OUT_OF_DATE_KHR is returned if the surface has changed in
-    such a way that it is no longer compatible with the swapchain, and
-    further presentation requests using the swapchain will fail.
-    Applications must: query the new surface properties and recreate their
-    swapchain if they wish to continue presenting to the surface.
-
-If the native surface and presented image sizes no longer match,
-presentation may: fail.
-If presentation does succeed, the mapping from the presented image to the
-native surface is implementation-defined.
-It is the application's responsibility to detect surface size changes and
-react appropriately.
-If presentation fails because of a mismatch in the surface and presented
-image sizes, a ename:VK_ERROR_OUT_OF_DATE_KHR error will be returned.
-
-[NOTE]
-.Note
-====
-For example, consider a 4x3 window/surface that gets resized to be 3x4
-(taller than wider).
-On some window systems, the portion of the window/surface that was
-previously and still is visible (the 3x3 part) will contain the same
-contents as before, while the remaining parts of the window will have
-undefined: contents.
-Other window systems may: squash/stretch the image to fill the new window
-size without any undefined: contents, or apply some other mapping.
-====
-
-ifdef::VK_VERSION_1_1,VK_KHR_device_group[]
-[open,refpage='vkAcquireNextImage2KHR',desc='Retrieve the index of the next available presentable image',type='protos']
---
-To acquire an available presentable image to use, and retrieve the index of
-that image, call:
-
-include::{generated}/api/protos/vkAcquireNextImage2KHR.txt[]
-
-  * pname:device is the device associated with pname:swapchain.
-  * pname:pAcquireInfo is a pointer to a slink:VkAcquireNextImageInfoKHR
-    structure containing parameters of the acquire.
-  * pname:pImageIndex is a pointer to a code:uint32_t that is set to the
-    index of the next image to use.
-
-.Valid Usage
-****
-  * [[VUID-vkAcquireNextImage2KHR-swapchain-01803]]
-    If the number of currently acquired images is greater than the
-    difference between the number of images in the pname:swapchain member of
-    pname:pAcquireInfo and the value of
-    slink:VkSurfaceCapabilitiesKHR::pname:minImageCount as returned by a
-    call to flink:vkGetPhysicalDeviceSurfaceCapabilities2KHR with the
-    pname:surface used to create pname:swapchain, the pname:timeout member
-    of pname:pAcquireInfo must: not be code:UINT64_MAX
-****
-
-include::{generated}/validity/protos/vkAcquireNextImage2KHR.txt[]
---
-
-[open,refpage='VkAcquireNextImageInfoKHR',desc='Structure specifying parameters of the acquire',type='structs']
---
-The sname:VkAcquireNextImageInfoKHR structure is defined as:
-
-include::{generated}/api/structs/VkAcquireNextImageInfoKHR.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:swapchain is a non-retired swapchain from which an image is
-    acquired.
-  * pname:timeout specifies how long the function waits, in nanoseconds, if
-    no image is available.
-  * pname:semaphore is dlink:VK_NULL_HANDLE or a semaphore to signal.
-  * pname:fence is dlink:VK_NULL_HANDLE or a fence to signal.
-  * pname:deviceMask is a mask of physical devices for which the swapchain
-    image will be ready to use when the semaphore or fence is signaled.
-
-If flink:vkAcquireNextImageKHR is used, the device mask is considered to
-include all physical devices in the logical device.
-
-[NOTE]
-.Note
-====
-flink:vkAcquireNextImage2KHR signals at most one semaphore, even if the
-application requests waiting for multiple physical devices to be ready via
-the pname:deviceMask.
-However, only a single physical device can: wait on that semaphore, since
-the semaphore becomes unsignaled when the wait succeeds.
-For other physical devices to wait for the image to be ready, it is
-necessary for the application to submit semaphore signal operation(s) to
-that first physical device to signal additional semaphore(s) after the wait
-succeeds, which the other physical device(s) can: wait upon.
-====
-
-.Valid Usage
-****
-  * [[VUID-VkAcquireNextImageInfoKHR-swapchain-01675]]
-    pname:swapchain must: not be in the retired state
-  * [[VUID-VkAcquireNextImageInfoKHR-semaphore-01288]]
-    If pname:semaphore is not dlink:VK_NULL_HANDLE it must: be unsignaled
-  * [[VUID-VkAcquireNextImageInfoKHR-semaphore-01781]]
-    If pname:semaphore is not dlink:VK_NULL_HANDLE it must: not have any
-    uncompleted signal or wait operations pending
-  * [[VUID-VkAcquireNextImageInfoKHR-fence-01289]]
-    If pname:fence is not dlink:VK_NULL_HANDLE it must: be unsignaled and
-    must: not be associated with any other queue command that has not yet
-    completed execution on that queue
-  * [[VUID-VkAcquireNextImageInfoKHR-semaphore-01782]]
-    pname:semaphore and pname:fence must: not both be equal to
-    dlink:VK_NULL_HANDLE
-  * [[VUID-VkAcquireNextImageInfoKHR-deviceMask-01290]]
-    pname:deviceMask must: be a valid device mask
-  * [[VUID-VkAcquireNextImageInfoKHR-deviceMask-01291]]
-    pname:deviceMask must: not be zero
-ifdef::VK_VERSION_1_2,VK_KHR_timeline_semaphore[]
-  * [[VUID-VkAcquireNextImageInfoKHR-semaphore-03266]]
-    pname:semaphore must: have a elink:VkSemaphoreType of
-    ename:VK_SEMAPHORE_TYPE_BINARY
-endif::VK_VERSION_1_2,VK_KHR_timeline_semaphore[]
-****
-
-include::{generated}/validity/structs/VkAcquireNextImageInfoKHR.txt[]
---
-endif::VK_VERSION_1_1,VK_KHR_device_group[]
-
-[open,refpage='vkQueuePresentKHR',desc='Queue an image for presentation',type='protos']
---
-After queueing all rendering commands and transitioning the image to the
-correct layout, to queue an image for presentation, call:
-
-include::{generated}/api/protos/vkQueuePresentKHR.txt[]
-
-  * pname:queue is a queue that is capable of presentation to the target
-    surface's platform on the same device as the image's swapchain.
-  * pname:pPresentInfo is a pointer to a slink:VkPresentInfoKHR structure
-    specifying parameters of the presentation.
-
-.Note
-[NOTE]
-====
-There is no requirement for an application to present images in the same
-order that they were acquired - applications can arbitrarily present any
-image that is currently acquired.
-====
-
-.Valid Usage
-****
-  * [[VUID-vkQueuePresentKHR-pSwapchains-01292]]
-    Each element of pname:pSwapchains member of pname:pPresentInfo must: be
-    a swapchain that is created for a surface for which presentation is
-    supported from pname:queue as determined using a call to
-    fname:vkGetPhysicalDeviceSurfaceSupportKHR
-ifdef::VK_KHR_display_swapchain[]
-  * [[VUID-vkQueuePresentKHR-pSwapchains-01293]]
-    If more than one member of pname:pSwapchains was created from a display
-    surface, all display surfaces referenced that refer to the same display
-    must: use the same display mode
-endif::VK_KHR_display_swapchain[]
-  * [[VUID-vkQueuePresentKHR-pWaitSemaphores-01294]]
-    When a semaphore wait operation referring to a binary semaphore defined
-    by the elements of the pname:pWaitSemaphores member of
-    pname:pPresentInfo executes on pname:queue, there must: be no other
-    queues waiting on the same semaphore
-  * [[VUID-vkQueuePresentKHR-pWaitSemaphores-01295]]
-    All elements of the pname:pWaitSemaphores member of pname:pPresentInfo
-    must: be semaphores that are signaled, or have
-    <<synchronization-semaphores-signaling, semaphore signal operations>>
-    previously submitted for execution
-ifdef::VK_VERSION_1_2,VK_KHR_timeline_semaphore[]
-  * [[VUID-vkQueuePresentKHR-pWaitSemaphores-03267]]
-    All elements of the pname:pWaitSemaphores member of pname:pPresentInfo
-    must: be created with a elink:VkSemaphoreType of
-    ename:VK_SEMAPHORE_TYPE_BINARY
-  * [[VUID-vkQueuePresentKHR-pWaitSemaphores-03268]]
-    All elements of the pname:pWaitSemaphores member of pname:pPresentInfo
-    must: reference a semaphore signal operation that has been submitted for
-    execution and any semaphore signal operations on which it depends (if
-    any) must: have also been submitted for execution
-endif::VK_VERSION_1_2,VK_KHR_timeline_semaphore[]
-****
-
-Any writes to memory backing the images referenced by the
-pname:pImageIndices and pname:pSwapchains members of pname:pPresentInfo,
-that are available before flink:vkQueuePresentKHR is executed, are
-automatically made visible to the read access performed by the presentation
-engine.
-This automatic visibility operation for an image happens-after the semaphore
-signal operation, and happens-before the presentation engine accesses the
-image.
-
-Queueing an image for presentation defines a set of _queue operations_,
-including waiting on the semaphores and submitting a presentation request to
-the presentation engine.
-However, the scope of this set of queue operations does not include the
-actual processing of the image by the presentation engine.
-
-.Note
-[NOTE]
-====
-The origin of the native orientation of the surface coordinate system is not
-specified in the Vulkan specification; it depends on the platform.
-For most platforms the origin is by default upper-left, meaning the pixel of
-the presented slink:VkImage at coordinates [eq]#(0,0)# would appear at the
-upper left pixel of the platform surface (assuming
-ename:VK_SURFACE_TRANSFORM_IDENTITY_BIT_KHR, and the display standing the
-right way up).
-====
-
-If fname:vkQueuePresentKHR fails to enqueue the corresponding set of queue
-operations, it may: return ename:VK_ERROR_OUT_OF_HOST_MEMORY or
-ename:VK_ERROR_OUT_OF_DEVICE_MEMORY.
-If it does, the implementation must: ensure that the state and contents of
-any resources or synchronization primitives referenced is unaffected by the
-call or its failure.
-
-If fname:vkQueuePresentKHR fails in such a way that the implementation is
-unable to make that guarantee, the implementation must: return
-ename:VK_ERROR_DEVICE_LOST.
-
-However, if the presentation request is rejected by the presentation engine
-with an error ename:VK_ERROR_OUT_OF_DATE_KHR,
-ifdef::VK_EXT_full_screen_exclusive[]
-ename:VK_ERROR_FULL_SCREEN_EXCLUSIVE_MODE_LOST_EXT,
-endif::VK_EXT_full_screen_exclusive[]
-or ename:VK_ERROR_SURFACE_LOST_KHR, the set of queue operations are still
-considered to be enqueued and thus any semaphore wait operation specified in
-slink:VkPresentInfoKHR will execute when the corresponding queue operation
-is complete.
-
-Calls to fname:vkQueuePresentKHR may: block, but must: return in finite
-time.
-
-ifdef::VK_EXT_full_screen_exclusive[]
-If any pname:swapchain member of pname:pPresentInfo was created with
-ename:VK_FULL_SCREEN_EXCLUSIVE_APPLICATION_CONTROLLED_EXT,
-ename:VK_ERROR_FULL_SCREEN_EXCLUSIVE_MODE_LOST_EXT will be returned if that
-swapchain does not have exclusive full-screen access, possibly for
-implementation-specific reasons outside of the application's control.
-endif::VK_EXT_full_screen_exclusive[]
-
-include::{generated}/validity/protos/vkQueuePresentKHR.txt[]
---
-
-[open,refpage='VkPresentInfoKHR',desc='Structure describing parameters of a queue presentation',type='structs']
---
-The sname:VkPresentInfoKHR structure is defined as:
-
-include::{generated}/api/structs/VkPresentInfoKHR.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:waitSemaphoreCount is the number of semaphores to wait for before
-    issuing the present request.
-    The number may: be zero.
-  * pname:pWaitSemaphores is `NULL` or a pointer to an array of
-    slink:VkSemaphore objects with pname:waitSemaphoreCount entries, and
-    specifies the semaphores to wait for before issuing the present request.
-  * pname:swapchainCount is the number of swapchains being presented to by
-    this command.
-  * pname:pSwapchains is a pointer to an array of slink:VkSwapchainKHR
-    objects with pname:swapchainCount entries.
-    A given swapchain must: not appear in this list more than once.
-  * pname:pImageIndices is a pointer to an array of indices into the array
-    of each swapchain's presentable images, with pname:swapchainCount
-    entries.
-    Each entry in this array identifies the image to present on the
-    corresponding entry in the pname:pSwapchains array.
-  * pname:pResults is a pointer to an array of elink:VkResult typed elements
-    with pname:swapchainCount entries.
-    Applications that do not need per-swapchain results can: use `NULL` for
-    pname:pResults.
-    If non-`NULL`, each entry in pname:pResults will be set to the
-    elink:VkResult for presenting the swapchain corresponding to the same
-    index in pname:pSwapchains.
-
-Before an application can: present an image, the image's layout must: be
-transitioned to the ename:VK_IMAGE_LAYOUT_PRESENT_SRC_KHR
-ifdef::VK_KHR_shared_presentable_image[]
-layout, or for a shared presentable image the
-ename:VK_IMAGE_LAYOUT_SHARED_PRESENT_KHR
-endif::VK_KHR_shared_presentable_image[]
-layout.
-
-.Note
-[NOTE]
-====
-When transitioning the image to
-ifdef::VK_KHR_shared_presentable_image[]
-ename:VK_IMAGE_LAYOUT_SHARED_PRESENT_KHR or
-endif::VK_KHR_shared_presentable_image[]
-ename:VK_IMAGE_LAYOUT_PRESENT_SRC_KHR, there is no need to delay subsequent
-processing, or perform any visibility operations (as flink:vkQueuePresentKHR
-performs automatic visibility operations).
-To achieve this, the pname:dstAccessMask member of the
-slink:VkImageMemoryBarrier should: be set to `0`, and the pname:dstStageMask
-parameter should: be set to ename:VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT.
-====
-
-.Valid Usage
-****
-ifndef::VK_KHR_shared_presentable_image[]
-  * [[VUID-VkPresentInfoKHR-pImageIndices-01296]]
-    Each element of pname:pImageIndices must: be the index of a presentable
-    image acquired from the swapchain specified by the corresponding element
-    of the pname:pSwapchains array, and the presented image subresource
-    must: be in the ename:VK_IMAGE_LAYOUT_PRESENT_SRC_KHR layout at the time
-    the operation is executed on a sname:VkDevice
-endif::VK_KHR_shared_presentable_image[]
-ifdef::VK_KHR_shared_presentable_image[]
-  * [[VUID-VkPresentInfoKHR-pImageIndices-01430]]
-    Each element of pname:pImageIndices must: be the index of a presentable
-    image acquired from the swapchain specified by the corresponding element
-    of the pname:pSwapchains array, and the presented image subresource
-    must: be in the ename:VK_IMAGE_LAYOUT_PRESENT_SRC_KHR or
-    ename:VK_IMAGE_LAYOUT_SHARED_PRESENT_KHR layout at the time the
-    operation is executed on a sname:VkDevice
-endif::VK_KHR_shared_presentable_image[]
-ifdef::VK_KHR_present_id[]
-  * [[VUID-VkPresentInfoKHR-pNext-06235]]
-    If a slink:VkPresentIdKHR structure is included in the pname:pNext
-    chain, and the <<features-presentId, pname:presentId>> feature is not
-    enabled, each pname:presentIds entry in that structure must: be NULL
-endif::VK_KHR_present_id[]
-****
-
-include::{generated}/validity/structs/VkPresentInfoKHR.txt[]
---
-
-ifdef::VK_KHR_incremental_present[]
-include::{chapters}/VK_KHR_incremental_present/wsi.txt[]
-endif::VK_KHR_incremental_present[]
-
-ifdef::VK_KHR_display_swapchain[]
-include::{chapters}/VK_KHR_display_swapchain/display_swapchain_present.txt[]
-endif::VK_KHR_display_swapchain[]
-
-ifdef::VK_VERSION_1_1,VK_KHR_device_group[]
-[open,refpage='VkDeviceGroupPresentInfoKHR',desc='Mode and mask controlling which physical devices\' images are presented',type='structs']
---
-If the pname:pNext chain of slink:VkPresentInfoKHR includes a
-sname:VkDeviceGroupPresentInfoKHR structure, then that structure includes an
-array of device masks and a device group present mode.
-
-The sname:VkDeviceGroupPresentInfoKHR structure is defined as:
-
-include::{generated}/api/structs/VkDeviceGroupPresentInfoKHR.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:swapchainCount is zero or the number of elements in
-    pname:pDeviceMasks.
-  * pname:pDeviceMasks is a pointer to an array of device masks, one for
-    each element of slink:VkPresentInfoKHR::pSwapchains.
-  * pname:mode is a elink:VkDeviceGroupPresentModeFlagBitsKHR value
-    specifying the device group present mode that will be used for this
-    present.
-
-If pname:mode is ename:VK_DEVICE_GROUP_PRESENT_MODE_LOCAL_BIT_KHR, then each
-element of pname:pDeviceMasks selects which instance of the swapchain image
-is presented.
-Each element of pname:pDeviceMasks must: have exactly one bit set, and the
-corresponding physical device must: have a presentation engine as reported
-by slink:VkDeviceGroupPresentCapabilitiesKHR.
-
-If pname:mode is ename:VK_DEVICE_GROUP_PRESENT_MODE_REMOTE_BIT_KHR, then
-each element of pname:pDeviceMasks selects which instance of the swapchain
-image is presented.
-Each element of pname:pDeviceMasks must: have exactly one bit set, and some
-physical device in the logical device must: include that bit in its
-slink:VkDeviceGroupPresentCapabilitiesKHR::pname:presentMask.
-
-If pname:mode is ename:VK_DEVICE_GROUP_PRESENT_MODE_SUM_BIT_KHR, then each
-element of pname:pDeviceMasks selects which instances of the swapchain image
-are component-wise summed and the sum of those images is presented.
-If the sum in any component is outside the representable range, the value of
-that component is undefined:.
-Each element of pname:pDeviceMasks must: have a value for which all set bits
-are set in one of the elements of
-slink:VkDeviceGroupPresentCapabilitiesKHR::pname:presentMask.
-
-If pname:mode is
-ename:VK_DEVICE_GROUP_PRESENT_MODE_LOCAL_MULTI_DEVICE_BIT_KHR, then each
-element of pname:pDeviceMasks selects which instance(s) of the swapchain
-images are presented.
-For each bit set in each element of pname:pDeviceMasks, the corresponding
-physical device must: have a presentation engine as reported by
-slink:VkDeviceGroupPresentCapabilitiesKHR.
-
-If sname:VkDeviceGroupPresentInfoKHR is not provided or pname:swapchainCount
-is zero then the masks are considered to be `1`.
-If sname:VkDeviceGroupPresentInfoKHR is not provided, pname:mode is
-considered to be ename:VK_DEVICE_GROUP_PRESENT_MODE_LOCAL_BIT_KHR.
-
-.Valid Usage
-****
-  * [[VUID-VkDeviceGroupPresentInfoKHR-swapchainCount-01297]]
-    pname:swapchainCount must: equal `0` or
-    slink:VkPresentInfoKHR::pname:swapchainCount
-  * [[VUID-VkDeviceGroupPresentInfoKHR-mode-01298]]
-    If pname:mode is ename:VK_DEVICE_GROUP_PRESENT_MODE_LOCAL_BIT_KHR, then
-    each element of pname:pDeviceMasks must: have exactly one bit set, and
-    the corresponding element of
-    slink:VkDeviceGroupPresentCapabilitiesKHR::pname:presentMask must: be
-    non-zero
-  * [[VUID-VkDeviceGroupPresentInfoKHR-mode-01299]]
-    If pname:mode is ename:VK_DEVICE_GROUP_PRESENT_MODE_REMOTE_BIT_KHR, then
-    each element of pname:pDeviceMasks must: have exactly one bit set, and
-    some physical device in the logical device must: include that bit in its
-    slink:VkDeviceGroupPresentCapabilitiesKHR::pname:presentMask
-  * [[VUID-VkDeviceGroupPresentInfoKHR-mode-01300]]
-    If pname:mode is ename:VK_DEVICE_GROUP_PRESENT_MODE_SUM_BIT_KHR, then
-    each element of pname:pDeviceMasks must: have a value for which all set
-    bits are set in one of the elements of
-    slink:VkDeviceGroupPresentCapabilitiesKHR::pname:presentMask
-  * [[VUID-VkDeviceGroupPresentInfoKHR-mode-01301]]
-    If pname:mode is
-    ename:VK_DEVICE_GROUP_PRESENT_MODE_LOCAL_MULTI_DEVICE_BIT_KHR, then for
-    each bit set in each element of pname:pDeviceMasks, the corresponding
-    element of slink:VkDeviceGroupPresentCapabilitiesKHR::pname:presentMask
-    must: be non-zero
-  * [[VUID-VkDeviceGroupPresentInfoKHR-pDeviceMasks-01302]]
-    The value of each element of pname:pDeviceMasks must: be equal to the
-    device mask passed in slink:VkAcquireNextImageInfoKHR::pname:deviceMask
-    when the image index was last acquired
-  * [[VUID-VkDeviceGroupPresentInfoKHR-mode-01303]]
-    pname:mode must: have exactly one bit set, and that bit must: have been
-    included in slink:VkDeviceGroupSwapchainCreateInfoKHR::pname:modes
-****
-
-include::{generated}/validity/structs/VkDeviceGroupPresentInfoKHR.txt[]
---
-endif::VK_VERSION_1_1,VK_KHR_device_group[]
-
-ifdef::VK_GOOGLE_display_timing[]
-include::{chapters}/VK_GOOGLE_display_timing/PresentTimeInfo.txt[]
-endif::VK_GOOGLE_display_timing[]
-ifdef::VK_KHR_present_id[]
-include::PresentId.txt[]
-endif::VK_KHR_present_id[]
-
-ifdef::VK_GGP_frame_token[]
-include::{chapters}/VK_GGP_frame_token.txt[]
-endif::VK_GGP_frame_token[]
-
-fname:vkQueuePresentKHR, releases the acquisition of the images referenced
-by pname:imageIndices.
-The queue family corresponding to the queue fname:vkQueuePresentKHR is
-executed on must: have ownership of the presented images as defined in
-<<resources-sharing,Resource Sharing>>.
-fname:vkQueuePresentKHR does not alter the queue family ownership, but the
-presented images must: not be used again before they have been reacquired
-using fname:vkAcquireNextImageKHR.
-
-The processing of the presentation happens in issue order with other queue
-operations, but semaphores have to be used to ensure that prior rendering
-and other commands in the specified queue complete before the presentation
-begins.
-The presentation command itself does not delay processing of subsequent
-commands on the queue, however, presentation requests sent to a particular
-queue are always performed in order.
-Exact presentation timing is controlled by the semantics of the presentation
-engine and native platform in use.
-
-ifdef::VK_KHR_display_swapchain[]
-include::{chapters}/VK_KHR_display_swapchain/queue_present_interactions.txt[]
-endif::VK_KHR_display_swapchain[]
-
-The result codes ename:VK_ERROR_OUT_OF_DATE_KHR and ename:VK_SUBOPTIMAL_KHR
-have the same meaning when returned by fname:vkQueuePresentKHR as they do
-when returned by fname:vkAcquireNextImageKHR.
-If multiple swapchains are presented, the result code is determined applying
-the following rules in order:
-
-  * If the device is lost, ename:VK_ERROR_DEVICE_LOST is returned.
-  * If any of the target surfaces are no longer available the error
-    ename:VK_ERROR_SURFACE_LOST_KHR is returned.
-  * If any of the presents would have a result of
-    ename:VK_ERROR_OUT_OF_DATE_KHR if issued separately then
-    ename:VK_ERROR_OUT_OF_DATE_KHR is returned.
-ifdef::VK_EXT_full_screen_exclusive[]
-  * If any of the presents would have a result of
-    ename:VK_ERROR_FULL_SCREEN_EXCLUSIVE_MODE_LOST_EXT if issued separately
-    then ename:VK_ERROR_FULL_SCREEN_EXCLUSIVE_MODE_LOST_EXT is returned.
-endif::VK_EXT_full_screen_exclusive[]
-  * If any of the presents would have a result of ename:VK_SUBOPTIMAL_KHR if
-    issued separately then ename:VK_SUBOPTIMAL_KHR is returned.
-  * Otherwise ename:VK_SUCCESS is returned.
-
-Presentation is a read-only operation that will not affect the content of
-the presentable images.
-Upon reacquiring the image and transitioning it away from the
-ename:VK_IMAGE_LAYOUT_PRESENT_SRC_KHR layout, the contents will be the same
-as they were prior to transitioning the image to the present source layout
-and presenting it.
-However, if a mechanism other than Vulkan is used to modify the platform
-window associated with the swapchain, the content of all presentable images
-in the swapchain becomes undefined:.
-
-[NOTE]
-.Note
-====
-The application can: continue to present any acquired images from a retired
-swapchain as long as the swapchain has not entered a state that causes
-flink:vkQueuePresentKHR to return ename:VK_ERROR_OUT_OF_DATE_KHR.
-====
-
-ifdef::VK_EXT_hdr_metadata[]
-include::{chapters}/VK_EXT_hdr_metadata.txt[]
-endif::VK_EXT_hdr_metadata[]
diff --git a/registry/vulkan/chapters/VK_KHR_wayland_surface/platformCreateSurface_wayland.txt b/registry/vulkan/chapters/VK_KHR_wayland_surface/platformCreateSurface_wayland.txt
deleted file mode 100644
index 7f8b24a..0000000
--- a/registry/vulkan/chapters/VK_KHR_wayland_surface/platformCreateSurface_wayland.txt
+++ /dev/null
@@ -1,100 +0,0 @@
-// Copyright 2014-2021 The Khronos Group, Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-[[platformCreateSurface_wayland,platformCreateSurface_wayland]]
-=== Wayland Platform
-
-[open,refpage='vkCreateWaylandSurfaceKHR',desc='Create a slink:VkSurfaceKHR object for a Wayland window',type='protos']
---
-To create a sname:VkSurfaceKHR object for a Wayland surface, call:
-
-include::{generated}/api/protos/vkCreateWaylandSurfaceKHR.txt[]
-
-  * pname:instance is the instance to associate the surface with.
-  * pname:pCreateInfo is a pointer to a slink:VkWaylandSurfaceCreateInfoKHR
-    structure containing parameters affecting the creation of the surface
-    object.
-  * pname:pAllocator is the allocator used for host memory allocated for the
-    surface object when there is no more specific allocator available (see
-    <<memory-allocation,Memory Allocation>>).
-  * pname:pSurface is a pointer to a slink:VkSurfaceKHR handle in which the
-    created surface object is returned.
-
-include::{generated}/validity/protos/vkCreateWaylandSurfaceKHR.txt[]
---
-
-[open,refpage='VkWaylandSurfaceCreateInfoKHR',desc='Structure specifying parameters of a newly created Wayland surface object',type='structs']
---
-The sname:VkWaylandSurfaceCreateInfoKHR structure is defined as:
-
-include::{generated}/api/structs/VkWaylandSurfaceCreateInfoKHR.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:flags is reserved for future use.
-  * pname:display and pname:surface are pointers to the Wayland
-    code:wl_display and code:wl_surface to associate the surface with.
-
-.Valid Usage
-****
-  * [[VUID-VkWaylandSurfaceCreateInfoKHR-display-01304]]
-    pname:display must: point to a valid Wayland code:wl_display
-  * [[VUID-VkWaylandSurfaceCreateInfoKHR-surface-01305]]
-    pname:surface must: point to a valid Wayland code:wl_surface
-****
-
-include::{generated}/validity/structs/VkWaylandSurfaceCreateInfoKHR.txt[]
---
-
-On Wayland, pname:currentExtent is the special value [eq]#(0xFFFFFFFF,
-0xFFFFFFFF)#, indicating that the surface size will be determined by the
-extent of a swapchain targeting the surface.
-Whatever the application sets a swapchain's pname:imageExtent to will be the
-size of the window, after the first image is presented.
-pname:minImageExtent is [eq]#(1,1)#, and pname:maxImageExtent is the maximum
-supported surface size.
-Any calls to flink:vkGetPhysicalDeviceSurfacePresentModesKHR on a surface
-created with fname:vkCreateWaylandSurfaceKHR are required: to return
-ename:VK_PRESENT_MODE_MAILBOX_KHR as one of the valid present modes.
-
-Some Vulkan functions may: send protocol over the specified code:wl_display
-connection when using a swapchain or presentable images created from a
-sname:VkSurfaceKHR referring to a code:wl_surface.
-Applications must: therefore ensure that both the code:wl_display and the
-code:wl_surface remain valid for the lifetime of any sname:VkSwapchainKHR
-objects created from a particular code:wl_display and code:wl_surface.
-Also, calling flink:vkQueuePresentKHR will result in Vulkan sending
-code:wl_surface.commit requests to the underlying code:wl_surface of each
-sname:VkSwapchainKHR objects referenced by pname:pPresentInfo.
-If the swapchain is created with a present mode of
-ename:VK_PRESENT_MODE_MAILBOX_KHR or ename:VK_PRESENT_MODE_IMMEDIATE_KHR,
-then the corresponding code:wl_surface.attach, code:wl_surface.damage, and
-code:wl_surface.commit request must: be issued by the implementation during
-the call to flink:vkQueuePresentKHR and must: not be issued by the
-implementation outside of flink:vkQueuePresentKHR.
-This ensures that any Wayland requests sent by the client after the call to
-flink:vkQueuePresentKHR returns will be received by the compositor after the
-code:wl_surface.commit.
-Regardless of the mode of swapchain creation, a new code:wl_event_queue
-must: be created for each successful flink:vkCreateWaylandSurfaceKHR call,
-and every Wayland object created by the implementation must: be assigned to
-this event queue.
-If the platform provides Wayland 1.11 or greater, this must: be implemented
-by the use of Wayland proxy object wrappers, to avoid race conditions.
-
-If the application wishes to synchronize any window changes with a
-particular frame, such requests must: be sent to the Wayland display server
-prior to calling flink:vkQueuePresentKHR.
-For full control over interactions between Vulkan rendering and other
-Wayland protocol requests and events, a present mode of
-ename:VK_PRESENT_MODE_MAILBOX_KHR should: be used.
-
-[open,refpage='VkWaylandSurfaceCreateFlagsKHR',desc='Reserved for future use',type='flags']
---
-include::{generated}/api/flags/VkWaylandSurfaceCreateFlagsKHR.txt[]
-
-tname:VkWaylandSurfaceCreateFlagsKHR is a bitmask type for setting a mask,
-but is currently reserved for future use.
---
diff --git a/registry/vulkan/chapters/VK_KHR_wayland_surface/platformQuerySupport_wayland.txt b/registry/vulkan/chapters/VK_KHR_wayland_surface/platformQuerySupport_wayland.txt
deleted file mode 100644
index b86bb0c..0000000
--- a/registry/vulkan/chapters/VK_KHR_wayland_surface/platformQuerySupport_wayland.txt
+++ /dev/null
@@ -1,33 +0,0 @@
-// Copyright 2014-2021 The Khronos Group, Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-[[platformQuerySupport_walyand,platformQuerySupport_walyand]]
-
-=== Wayland Platform
-
-[open,refpage='vkGetPhysicalDeviceWaylandPresentationSupportKHR',desc='Query physical device for presentation to Wayland',type='protos']
---
-To determine whether a queue family of a physical device supports
-presentation to a Wayland compositor, call:
-
-include::{generated}/api/protos/vkGetPhysicalDeviceWaylandPresentationSupportKHR.txt[]
-
-  * pname:physicalDevice is the physical device.
-  * pname:queueFamilyIndex is the queue family index.
-  * pname:display is a pointer to the code:wl_display associated with a
-    Wayland compositor.
-
-This platform-specific function can: be called prior to creating a surface.
-
-.Valid Usage
-****
-  * [[VUID-vkGetPhysicalDeviceWaylandPresentationSupportKHR-queueFamilyIndex-01306]]
-    pname:queueFamilyIndex must: be less than
-    pname:pQueueFamilyPropertyCount returned by
-    fname:vkGetPhysicalDeviceQueueFamilyProperties for the given
-    pname:physicalDevice
-****
-
-include::{generated}/validity/protos/vkGetPhysicalDeviceWaylandPresentationSupportKHR.txt[]
---
diff --git a/registry/vulkan/chapters/VK_KHR_win32_surface/platformCreateSurface_win32.txt b/registry/vulkan/chapters/VK_KHR_win32_surface/platformCreateSurface_win32.txt
deleted file mode 100644
index c1c3701..0000000
--- a/registry/vulkan/chapters/VK_KHR_win32_surface/platformCreateSurface_win32.txt
+++ /dev/null
@@ -1,78 +0,0 @@
-// Copyright 2014-2021 The Khronos Group, Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-[[platformCreateSurface_win32,platformCreateSurface_win32]]
-
-=== Win32 Platform
-
-[open,refpage='vkCreateWin32SurfaceKHR',desc='Create a VkSurfaceKHR object for an Win32 native window',type='protos']
---
-To create a sname:VkSurfaceKHR object for a Win32 window, call:
-
-include::{generated}/api/protos/vkCreateWin32SurfaceKHR.txt[]
-
-  * pname:instance is the instance to associate the surface with.
-  * pname:pCreateInfo is a pointer to a sname:VkWin32SurfaceCreateInfoKHR
-    structure containing parameters affecting the creation of the surface
-    object.
-  * pname:pAllocator is the allocator used for host memory allocated for the
-    surface object when there is no more specific allocator available (see
-    <<memory-allocation,Memory Allocation>>).
-  * pname:pSurface is a pointer to a slink:VkSurfaceKHR handle in which the
-    created surface object is returned.
-
-include::{generated}/validity/protos/vkCreateWin32SurfaceKHR.txt[]
---
-
-[open,refpage='VkWin32SurfaceCreateInfoKHR',desc='Structure specifying parameters of a newly created Win32 surface object',type='structs']
---
-The sname:VkWin32SurfaceCreateInfoKHR structure is defined as:
-
-include::{generated}/api/structs/VkWin32SurfaceCreateInfoKHR.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:flags is reserved for future use.
-  * pname:hinstance is the Win32 code:HINSTANCE for the window to associate
-    the surface with.
-  * pname:hwnd is the Win32 code:HWND for the window to associate the
-    surface with.
-
-.Valid Usage
-****
-  * [[VUID-VkWin32SurfaceCreateInfoKHR-hinstance-01307]]
-    pname:hinstance must: be a valid Win32 code:HINSTANCE
-  * [[VUID-VkWin32SurfaceCreateInfoKHR-hwnd-01308]]
-    pname:hwnd must: be a valid Win32 code:HWND
-****
-
-include::{generated}/validity/structs/VkWin32SurfaceCreateInfoKHR.txt[]
---
-
-With Win32, pname:minImageExtent, pname:maxImageExtent, and
-pname:currentExtent must: always equal the window size.
-
-The pname:currentExtent of a Win32 surface must: have both pname:width and
-pname:height greater than 0, or both of them 0.
-
-[NOTE]
-.Note
-====
-Due to above restrictions, it is only possible to create a new swapchain on
-this platform with pname:imageExtent being equal to the current size of the
-window.
-
-The window size may: become [eq]#(0, 0)# on this platform (e.g. when the
-window is minimized), and so a swapchain cannot: be created until the size
-changes.
-====
-
-[open,refpage='VkWin32SurfaceCreateFlagsKHR',desc='Reserved for future use',type='flags']
---
-include::{generated}/api/flags/VkWin32SurfaceCreateFlagsKHR.txt[]
-
-tname:VkWin32SurfaceCreateFlagsKHR is a bitmask type for setting a mask, but
-is currently reserved for future use.
---
diff --git a/registry/vulkan/chapters/VK_KHR_win32_surface/platformQuerySupport_win32.txt b/registry/vulkan/chapters/VK_KHR_win32_surface/platformQuerySupport_win32.txt
deleted file mode 100644
index b6a4478..0000000
--- a/registry/vulkan/chapters/VK_KHR_win32_surface/platformQuerySupport_win32.txt
+++ /dev/null
@@ -1,30 +0,0 @@
-// Copyright 2014-2021 The Khronos Group, Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-[[platformQuerySupport_win32,platformQuerySupport_win32]]
-=== Win32 Platform
-
-[open,refpage='vkGetPhysicalDeviceWin32PresentationSupportKHR',desc='Query queue family support for presentation on a Win32 display',type='protos']
---
-To determine whether a queue family of a physical device supports
-presentation to the Microsoft Windows desktop, call:
-
-include::{generated}/api/protos/vkGetPhysicalDeviceWin32PresentationSupportKHR.txt[]
-
-  * pname:physicalDevice is the physical device.
-  * pname:queueFamilyIndex is the queue family index.
-
-This platform-specific function can: be called prior to creating a surface.
-
-.Valid Usage
-****
-  * [[VUID-vkGetPhysicalDeviceWin32PresentationSupportKHR-queueFamilyIndex-01309]]
-    pname:queueFamilyIndex must: be less than
-    pname:pQueueFamilyPropertyCount returned by
-    fname:vkGetPhysicalDeviceQueueFamilyProperties for the given
-    pname:physicalDevice
-****
-
-include::{generated}/validity/protos/vkGetPhysicalDeviceWin32PresentationSupportKHR.txt[]
---
diff --git a/registry/vulkan/chapters/VK_KHR_xcb_surface/platformCreateSurface_xcb.txt b/registry/vulkan/chapters/VK_KHR_xcb_surface/platformCreateSurface_xcb.txt
deleted file mode 100644
index 63fd10a..0000000
--- a/registry/vulkan/chapters/VK_KHR_xcb_surface/platformCreateSurface_xcb.txt
+++ /dev/null
@@ -1,92 +0,0 @@
-// Copyright 2014-2021 The Khronos Group, Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-[[platformCreateSurface_xcb,platformCreateSurface_xcb]]
-=== XCB Platform
-
-[open,refpage='vkCreateXcbSurfaceKHR',desc='Create a slink:VkSurfaceKHR object for a X11 window, using the XCB client-side library',type='protos']
---
-To create a sname:VkSurfaceKHR object for an X11 window, using the XCB
-client-side library, call:
-
-include::{generated}/api/protos/vkCreateXcbSurfaceKHR.txt[]
-
-  * pname:instance is the instance to associate the surface with.
-  * pname:pCreateInfo is a pointer to a sname:VkXcbSurfaceCreateInfoKHR
-    structure containing parameters affecting the creation of the surface
-    object.
-  * pname:pAllocator is the allocator used for host memory allocated for the
-    surface object when there is no more specific allocator available (see
-    <<memory-allocation,Memory Allocation>>).
-  * pname:pSurface is a pointer to a slink:VkSurfaceKHR handle in which the
-    created surface object is returned.
-
-include::{generated}/validity/protos/vkCreateXcbSurfaceKHR.txt[]
---
-
-[open,refpage='VkXcbSurfaceCreateInfoKHR',desc='Structure specifying parameters of a newly created Xcb surface object',type='structs']
---
-The sname:VkXcbSurfaceCreateInfoKHR structure is defined as:
-
-include::{generated}/api/structs/VkXcbSurfaceCreateInfoKHR.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:flags is reserved for future use.
-  * pname:connection is a pointer to an code:xcb_connection_t to the X
-    server.
-  * pname:window is the code:xcb_window_t for the X11 window to associate
-    the surface with.
-
-.Valid Usage
-****
-  * [[VUID-VkXcbSurfaceCreateInfoKHR-connection-01310]]
-    pname:connection must: point to a valid X11 code:xcb_connection_t
-  * [[VUID-VkXcbSurfaceCreateInfoKHR-window-01311]]
-    pname:window must: be a valid X11 code:xcb_window_t
-****
-
-include::{generated}/validity/structs/VkXcbSurfaceCreateInfoKHR.txt[]
---
-
-With Xcb, pname:minImageExtent, pname:maxImageExtent, and
-pname:currentExtent must: always equal the window size.
-
-The pname:currentExtent of an Xcb surface must: have both pname:width and
-pname:height greater than 0, or both of them 0.
-
-[NOTE]
-.Note
-====
-Due to above restrictions, it is only possible to create a new swapchain on
-this platform with pname:imageExtent being equal to the current size of the
-window.
-
-The window size may: become [eq]#(0, 0)# on this platform (e.g. when the
-window is minimized), and so a swapchain cannot: be created until the size
-changes.
-====
-
-Some Vulkan functions may: send protocol over the specified xcb connection
-when using a swapchain or presentable images created from a
-slink:VkSurfaceKHR referring to an xcb window.
-Applications must: therefore ensure the xcb connection is available to
-Vulkan for the duration of any functions that manipulate such swapchains or
-their presentable images, and any functions that build or queue command
-buffers that operate on such presentable images.
-Specifically, applications using Vulkan with xcb-based swapchains must:
-
-  * Avoid holding a server grab on an xcb connection while waiting for
-    Vulkan operations to complete using a swapchain derived from a different
-    xcb connection referring to the same X server instance.
-    Failing to do so may: result in deadlock.
-
-[open,refpage='VkXcbSurfaceCreateFlagsKHR',desc='Reserved for future use',type='flags']
---
-include::{generated}/api/flags/VkXcbSurfaceCreateFlagsKHR.txt[]
-
-tname:VkXcbSurfaceCreateFlagsKHR is a bitmask type for setting a mask, but
-is currently reserved for future use.
---
diff --git a/registry/vulkan/chapters/VK_KHR_xcb_surface/platformQuerySupport_xcb.txt b/registry/vulkan/chapters/VK_KHR_xcb_surface/platformQuerySupport_xcb.txt
deleted file mode 100644
index d56a635..0000000
--- a/registry/vulkan/chapters/VK_KHR_xcb_surface/platformQuerySupport_xcb.txt
+++ /dev/null
@@ -1,33 +0,0 @@
-// Copyright 2014-2021 The Khronos Group, Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-[[platformQuerySupport_xcb,platformQuerySupport_xcb]]
-=== XCB Platform
-
-[open,refpage='vkGetPhysicalDeviceXcbPresentationSupportKHR',desc='Query physical device for presentation to X11 server using XCB',type='protos']
---
-To determine whether a queue family of a physical device supports
-presentation to an X11 server, using the XCB client-side library, call:
-
-include::{generated}/api/protos/vkGetPhysicalDeviceXcbPresentationSupportKHR.txt[]
-
-  * pname:physicalDevice is the physical device.
-  * pname:queueFamilyIndex is the queue family index.
-  * pname:connection is a pointer to an code:xcb_connection_t to the X
-    server.
-  * pname:visual_id is an X11 visual (code:xcb_visualid_t).
-
-This platform-specific function can: be called prior to creating a surface.
-
-.Valid Usage
-****
-  * [[VUID-vkGetPhysicalDeviceXcbPresentationSupportKHR-queueFamilyIndex-01312]]
-    pname:queueFamilyIndex must: be less than
-    pname:pQueueFamilyPropertyCount returned by
-    fname:vkGetPhysicalDeviceQueueFamilyProperties for the given
-    pname:physicalDevice
-****
-
-include::{generated}/validity/protos/vkGetPhysicalDeviceXcbPresentationSupportKHR.txt[]
---
diff --git a/registry/vulkan/chapters/VK_KHR_xlib_surface/platformCreateSurface_xlib.txt b/registry/vulkan/chapters/VK_KHR_xlib_surface/platformCreateSurface_xlib.txt
deleted file mode 100644
index 2f2ecd4..0000000
--- a/registry/vulkan/chapters/VK_KHR_xlib_surface/platformCreateSurface_xlib.txt
+++ /dev/null
@@ -1,96 +0,0 @@
-// Copyright 2014-2021 The Khronos Group, Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-[[platformCreateSurface_xlib,platformCreateSurface_xlib]]
-=== Xlib Platform
-
-[open,refpage='vkCreateXlibSurfaceKHR',desc='Create a slink:VkSurfaceKHR object for an X11 window, using the Xlib client-side library',type='protos']
---
-To create a sname:VkSurfaceKHR object for an X11 window, using the Xlib
-client-side library, call:
-
-include::{generated}/api/protos/vkCreateXlibSurfaceKHR.txt[]
-
-  * pname:instance is the instance to associate the surface with.
-  * pname:pCreateInfo is a pointer to a sname:VkXlibSurfaceCreateInfoKHR
-    structure containing the parameters affecting the creation of the
-    surface object.
-  * pname:pAllocator is the allocator used for host memory allocated for the
-    surface object when there is no more specific allocator available (see
-    <<memory-allocation,Memory Allocation>>).
-  * pname:pSurface is a pointer to a slink:VkSurfaceKHR handle in which the
-    created surface object is returned.
-
-include::{generated}/validity/protos/vkCreateXlibSurfaceKHR.txt[]
---
-
-[open,refpage='VkXlibSurfaceCreateInfoKHR',desc='Structure specifying parameters of a newly created Xlib surface object',type='structs']
---
-
-The sname:VkXlibSurfaceCreateInfoKHR structure is defined as:
-
-include::{generated}/api/structs/VkXlibSurfaceCreateInfoKHR.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:flags is reserved for future use.
-  * pname:dpy is a pointer to an Xlib code:Display connection to the X
-    server.
-  * pname:window is an Xlib code:Window to associate the surface with.
-
-.Valid Usage
-****
-  * [[VUID-VkXlibSurfaceCreateInfoKHR-dpy-01313]]
-    pname:dpy must: point to a valid Xlib code:Display
-  * [[VUID-VkXlibSurfaceCreateInfoKHR-window-01314]]
-    pname:window must: be a valid Xlib code:Window
-****
-
-include::{generated}/validity/structs/VkXlibSurfaceCreateInfoKHR.txt[]
---
-
-With Xlib, pname:minImageExtent, pname:maxImageExtent, and
-pname:currentExtent must: always equal the window size.
-
-The pname:currentExtent of an Xlib surface must: have both pname:width and
-pname:height greater than 0, or both of them 0.
-
-[NOTE]
-.Note
-====
-Due to above restrictions, it is only possible to create a new swapchain on
-this platform with pname:imageExtent being equal to the current size of the
-window.
-
-The window size may: become [eq]#(0, 0)# on this platform (e.g. when the
-window is minimized), and so a swapchain cannot: be created until the size
-changes.
-====
-
-Some Vulkan functions may: send protocol over the specified Xlib
-code:Display connection when using a swapchain or presentable images created
-from a slink:VkSurfaceKHR referring to an Xlib window.
-Applications must: therefore ensure the display connection is available to
-Vulkan for the duration of any functions that manipulate such swapchains or
-their presentable images, and any functions that build or queue command
-buffers that operate on such presentable images.
-Specifically, applications using Vulkan with Xlib-based swapchains must:
-
-  * Avoid holding a server grab on a display connection while waiting for
-    Vulkan operations to complete using a swapchain derived from a different
-    display connection referring to the same X server instance.
-    Failing to do so may: result in deadlock.
-
-Some implementations may require threads to implement some presentation
-modes so applications must: call code:XInitThreads() before calling any
-other Xlib functions.
-
-[open,refpage='VkXlibSurfaceCreateFlagsKHR',desc='Reserved for future use',type='flags']
---
-include::{generated}/api/flags/VkXlibSurfaceCreateFlagsKHR.txt[]
-
-tname:VkXlibSurfaceCreateFlagsKHR is a bitmask type for setting a mask, but
-is currently reserved for future use.
---
diff --git a/registry/vulkan/chapters/VK_KHR_xlib_surface/platformQuerySupport_xlib.txt b/registry/vulkan/chapters/VK_KHR_xlib_surface/platformQuerySupport_xlib.txt
deleted file mode 100644
index 6e97e54..0000000
--- a/registry/vulkan/chapters/VK_KHR_xlib_surface/platformQuerySupport_xlib.txt
+++ /dev/null
@@ -1,32 +0,0 @@
-// Copyright 2014-2021 The Khronos Group, Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-[[platformQuerySupport_xlib,platformQuerySupport_xlib]]
-=== Xlib Platform
-
-[open,refpage='vkGetPhysicalDeviceXlibPresentationSupportKHR',desc='Query physical device for presentation to X11 server using Xlib',type='protos']
---
-To determine whether a queue family of a physical device supports
-presentation to an X11 server, using the Xlib client-side library, call:
-
-include::{generated}/api/protos/vkGetPhysicalDeviceXlibPresentationSupportKHR.txt[]
-
-  * pname:physicalDevice is the physical device.
-  * pname:queueFamilyIndex is the queue family index.
-  * pname:dpy is a pointer to an Xlib code:Display connection to the server.
-  * pname:visualId is an X11 visual (code:VisualID).
-
-This platform-specific function can: be called prior to creating a surface.
-
-.Valid Usage
-****
-  * [[VUID-vkGetPhysicalDeviceXlibPresentationSupportKHR-queueFamilyIndex-01315]]
-    pname:queueFamilyIndex must: be less than
-    pname:pQueueFamilyPropertyCount returned by
-    fname:vkGetPhysicalDeviceQueueFamilyProperties for the given
-    pname:physicalDevice
-****
-
-include::{generated}/validity/protos/vkGetPhysicalDeviceXlibPresentationSupportKHR.txt[]
---
diff --git a/registry/vulkan/chapters/VK_MVK_ios_surface/platformCreateSurface_ios.txt b/registry/vulkan/chapters/VK_MVK_ios_surface/platformCreateSurface_ios.txt
deleted file mode 100644
index a6d5db5..0000000
--- a/registry/vulkan/chapters/VK_MVK_ios_surface/platformCreateSurface_ios.txt
+++ /dev/null
@@ -1,71 +0,0 @@
-// Copyright (c) 2018-2020 The Brenwill Workshop Ltd.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-[[platformCreateSurface_ios,platformCreateSurface_ios]]
-=== iOS Platform
-
-[open,refpage='vkCreateIOSSurfaceMVK',desc='Create a VkSurfaceKHR object for an iOS UIView',type='protos']
---
-To create a sname:VkSurfaceKHR object for an iOS code:UIView or
-basetype:CAMetalLayer, call:
-
-include::{generated}/api/protos/vkCreateIOSSurfaceMVK.txt[]
-
-ifdef::VK_EXT_metal_surface[]
-[NOTE]
-.Note
-====
-The `vkCreateIOSSurfaceMVK` function is considered deprecated and has been
-superseded by flink:vkCreateMetalSurfaceEXT from the
-`apiext:VK_EXT_metal_surface` extension.
-====
-endif::VK_EXT_metal_surface[]
-
-  * pname:instance is the instance with which to associate the surface.
-  * pname:pCreateInfo is a pointer to a slink:VkIOSSurfaceCreateInfoMVK
-    structure containing parameters affecting the creation of the surface
-    object.
-  * pname:pAllocator is the allocator used for host memory allocated for the
-    surface object when there is no more specific allocator available (see
-    <<memory-allocation,Memory Allocation>>).
-  * pname:pSurface is a pointer to a slink:VkSurfaceKHR handle in which the
-    created surface object is returned.
-
-include::{generated}/validity/protos/vkCreateIOSSurfaceMVK.txt[]
---
-
-[open,refpage='VkIOSSurfaceCreateInfoMVK',desc='Structure specifying parameters of a newly created iOS surface object',type='structs']
---
-The slink:VkIOSSurfaceCreateInfoMVK structure is defined as:
-
-include::{generated}/api/structs/VkIOSSurfaceCreateInfoMVK.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:flags is reserved for future use.
-  * pname:pView is a reference to either a basetype:CAMetalLayer object or a
-    code:UIView object.
-
-.Valid Usage
-****
-  * [[VUID-VkIOSSurfaceCreateInfoMVK-pView-04143]]
-    If pname:pView is a basetype:CAMetalLayer object, it must: be a valid
-    basetype:CAMetalLayer
-  * [[VUID-VkIOSSurfaceCreateInfoMVK-pView-01316]]
-    If pname:pView is a code:UIView object, it must: be a valid code:UIView,
-    must: be backed by a code:CALayer object of type basetype:CAMetalLayer,
-    and flink:vkCreateIOSSurfaceMVK must: be called on the main thread
-****
-
-include::{generated}/validity/structs/VkIOSSurfaceCreateInfoMVK.txt[]
---
-
-[open,refpage='VkIOSSurfaceCreateFlagsMVK',desc='Reserved for future use',type='flags']
---
-include::{generated}/api/flags/VkIOSSurfaceCreateFlagsMVK.txt[]
-
-tname:VkIOSSurfaceCreateFlagsMVK is a bitmask type for setting a mask, but
-is currently reserved for future use.
---
diff --git a/registry/vulkan/chapters/VK_MVK_ios_surface/platformQuerySupport_ios.txt b/registry/vulkan/chapters/VK_MVK_ios_surface/platformQuerySupport_ios.txt
deleted file mode 100644
index 18ba39d..0000000
--- a/registry/vulkan/chapters/VK_MVK_ios_surface/platformQuerySupport_ios.txt
+++ /dev/null
@@ -1,10 +0,0 @@
-// Copyright (c) 2018-2020 The Brenwill Workshop Ltd.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-[[platformQuerySupport_ios,platformQuerySupport_ios]]
-=== iOS Platform
-
-On iOS, all physical devices and queue families must: be capable of
-presentation with any layer.
-As a result there is no iOS-specific query for these capabilities.
diff --git a/registry/vulkan/chapters/VK_MVK_macos_surface/platformCreateSurface_macos.txt b/registry/vulkan/chapters/VK_MVK_macos_surface/platformCreateSurface_macos.txt
deleted file mode 100644
index 2e16e68..0000000
--- a/registry/vulkan/chapters/VK_MVK_macos_surface/platformCreateSurface_macos.txt
+++ /dev/null
@@ -1,72 +0,0 @@
-// Copyright (c) 2018-2020 The Brenwill Workshop Ltd.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-[[platformCreateSurface_macos,platformCreateSurface_macos]]
-=== macOS Platform
-
-[open,refpage='vkCreateMacOSSurfaceMVK',desc='Create a VkSurfaceKHR object for a macOS NSView',type='protos']
---
-To create a sname:VkSurfaceKHR object for a macOS code:NSView or
-basetype:CAMetalLayer, call:
-
-include::{generated}/api/protos/vkCreateMacOSSurfaceMVK.txt[]
-
-ifdef::VK_EXT_metal_surface[]
-[NOTE]
-.Note
-====
-The `vkCreateMacOSSurfaceMVK` function is considered deprecated and has been
-superseded by flink:vkCreateMetalSurfaceEXT from the
-`apiext:VK_EXT_metal_surface` extension.
-====
-endif::VK_EXT_metal_surface[]
-
-  * pname:instance is the instance with which to associate the surface.
-  * pname:pCreateInfo is a pointer to a slink:VkMacOSSurfaceCreateInfoMVK
-    structure containing parameters affecting the creation of the surface
-    object.
-  * pname:pAllocator is the allocator used for host memory allocated for the
-    surface object when there is no more specific allocator available (see
-    <<memory-allocation,Memory Allocation>>).
-  * pname:pSurface is a pointer to a slink:VkSurfaceKHR handle in which the
-    created surface object is returned.
-
-include::{generated}/validity/protos/vkCreateMacOSSurfaceMVK.txt[]
---
-
-[open,refpage='VkMacOSSurfaceCreateInfoMVK',desc='Structure specifying parameters of a newly created macOS surface object',type='structs']
---
-The slink:VkMacOSSurfaceCreateInfoMVK structure is defined as:
-
-include::{generated}/api/structs/VkMacOSSurfaceCreateInfoMVK.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:flags is reserved for future use.
-  * pname:pView is a reference to either a basetype:CAMetalLayer object or
-    an code:NSView object.
-
-.Valid Usage
-****
-  * [[VUID-VkMacOSSurfaceCreateInfoMVK-pView-04144]]
-    If pname:pView is a basetype:CAMetalLayer object, it must: be a valid
-    basetype:CAMetalLayer
-  * [[VUID-VkMacOSSurfaceCreateInfoMVK-pView-01317]]
-    If pname:pView is an code:NSView object, it must: be a valid
-    code:NSView, must: be backed by a code:CALayer object of type
-    basetype:CAMetalLayer, and flink:vkCreateMacOSSurfaceMVK must: be called
-    on the main thread
-****
-
-include::{generated}/validity/structs/VkMacOSSurfaceCreateInfoMVK.txt[]
---
-
-[open,refpage='VkMacOSSurfaceCreateFlagsMVK',desc='Reserved for future use',type='flags']
---
-include::{generated}/api/flags/VkMacOSSurfaceCreateFlagsMVK.txt[]
-
-tname:VkMacOSSurfaceCreateFlagsMVK is a bitmask type for setting a mask, but
-is currently reserved for future use.
---
diff --git a/registry/vulkan/chapters/VK_MVK_macos_surface/platformQuerySupport_macos.txt b/registry/vulkan/chapters/VK_MVK_macos_surface/platformQuerySupport_macos.txt
deleted file mode 100644
index 32f9fa7..0000000
--- a/registry/vulkan/chapters/VK_MVK_macos_surface/platformQuerySupport_macos.txt
+++ /dev/null
@@ -1,10 +0,0 @@
-// Copyright (c) 2018-2020 The Brenwill Workshop Ltd.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-[[platformQuerySupport_macos,platformQuerySupport_macos]]
-=== macOS Platform
-
-On macOS, all physical devices and queue families must: be capable of
-presentation with any layer.
-As a result there is no macOS-specific query for these capabilities.
diff --git a/registry/vulkan/chapters/VK_NN_vi_surface/platformCreateSurface_vi.txt b/registry/vulkan/chapters/VK_NN_vi_surface/platformCreateSurface_vi.txt
deleted file mode 100644
index 97ed676..0000000
--- a/registry/vulkan/chapters/VK_NN_vi_surface/platformCreateSurface_vi.txt
+++ /dev/null
@@ -1,73 +0,0 @@
-// Copyright (c) 2018-2020 Nintendo
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-[[platformCreateSurface_vi,platformCreateSurface_vi]]
-=== VI Platform
-
-[open,refpage='vkCreateViSurfaceNN',desc='Create a slink:VkSurfaceKHR object for a VI layer',type='protos']
---
-To create a sname:VkSurfaceKHR object for an code:nn::code:vi::code:Layer,
-query the layer's native handle using
-code:nn::code:vi::code:GetNativeWindow, and then call:
-
-include::{generated}/api/protos/vkCreateViSurfaceNN.txt[]
-
-  * pname:instance is the instance with which to associate the surface.
-  * pname:pCreateInfo is a pointer to a sname:VkViSurfaceCreateInfoNN
-    structure containing parameters affecting the creation of the surface
-    object.
-  * pname:pAllocator is the allocator used for host memory allocated for the
-    surface object when there is no more specific allocator available (see
-    <<memory-allocation,Memory Allocation>>).
-  * pname:pSurface is a pointer to a slink:VkSurfaceKHR handle in which the
-    created surface object is returned.
-
-During the lifetime of a surface created using a particular
-code:nn::code:vi::code:NativeWindowHandle, applications must: not attempt to
-create another surface for the same code:nn::code:vi::code:Layer or attempt
-to connect to the same code:nn::code:vi::code:Layer through other platform
-mechanisms.
-
-If the native window is created with a specified size, pname:currentExtent
-will reflect that size.
-In this case, applications should use the same size for the swapchain's
-pname:imageExtent.
-Otherwise, the pname:currentExtent will have the special value
-[eq]#(0xFFFFFFFF, 0xFFFFFFFF)#, indicating that applications are expected to
-choose an appropriate size for the swapchain's pname:imageExtent (e.g., by
-matching the result of a call to
-code:nn::code:vi::code:GetDisplayResolution).
-
-include::{generated}/validity/protos/vkCreateViSurfaceNN.txt[]
---
-
-[open,refpage='VkViSurfaceCreateInfoNN',desc='Structure specifying parameters of a newly created VI surface object',type='structs']
---
-The sname:VkViSurfaceCreateInfoNN structure is defined as:
-
-include::{generated}/api/structs/VkViSurfaceCreateInfoNN.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:flags is reserved for future use.
-  * pname:window is the code:nn::code:vi::code:NativeWindowHandle for the
-    code:nn::code:vi::code:Layer with which to associate the surface.
-
-.Valid Usage
-****
-  * [[VUID-VkViSurfaceCreateInfoNN-window-01318]]
-    pname:window must: be a valid code:nn::code:vi::code:NativeWindowHandle
-****
-
-include::{generated}/validity/structs/VkViSurfaceCreateInfoNN.txt[]
---
-
-[open,refpage='VkViSurfaceCreateFlagsNN',desc='Reserved for future use',type='flags']
---
-include::{generated}/api/flags/VkViSurfaceCreateFlagsNN.txt[]
-
-tname:VkViSurfaceCreateFlagsNN is a bitmask type for setting a mask, but is
-currently reserved for future use.
---
diff --git a/registry/vulkan/chapters/VK_NN_vi_surface/platformQuerySupport_vi.txt b/registry/vulkan/chapters/VK_NN_vi_surface/platformQuerySupport_vi.txt
deleted file mode 100644
index bfaf3eb..0000000
--- a/registry/vulkan/chapters/VK_NN_vi_surface/platformQuerySupport_vi.txt
+++ /dev/null
@@ -1,11 +0,0 @@
-// Copyright (c) 2018-2020 Nintendo
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-[[platformQuerySupport_vi,platformQuerySupport_vi]]
-=== VI Platform
-
-On VI, all physical devices and queue families must: be capable of
-presentation with any layer.
-As a result there is no VI-specific query for these capabilities.
-
diff --git a/registry/vulkan/chapters/VK_NV_acquire_winrt_display/acquire_winrt_display.txt b/registry/vulkan/chapters/VK_NV_acquire_winrt_display/acquire_winrt_display.txt
deleted file mode 100644
index ea0d0ba..0000000
--- a/registry/vulkan/chapters/VK_NV_acquire_winrt_display/acquire_winrt_display.txt
+++ /dev/null
@@ -1,90 +0,0 @@
-// Copyright (c) 2020 NVIDIA Corporation
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-[open,refpage='vkAcquireWinrtDisplayNV',desc='Acquire access to a VkDisplayKHR',type='protos']
---
-To acquire permission to directly access a display in Vulkan on Windows 10,
-call:
-
-include::{generated}/api/protos/vkAcquireWinrtDisplayNV.txt[]
-
-  * pname:physicalDevice The physical device the display is on.
-  * pname:display The display the caller wishes to control in Vulkan.
-
-All permissions necessary to control the display are granted to the Vulkan
-instance associated with pname:physicalDevice until the display is released
-or the application is terminated.
-Permission to access the display may: be revoked by events that cause
-Windows 10 itself to lose access to pname:display.
-If this has happened, operations which require access to the display must:
-fail with an appropriate error code.
-If permission to access pname:display has already been acquired by another
-entity, the call must: return the error code
-ename:VK_ERROR_INITIALIZATION_FAILED.
-
-[NOTE]
-.Note
-====
-The Vulkan instance acquires control of a
-https://docs.microsoft.com/en-us/uwp/api/windows.devices.display.core.displaytarget["`winrt::Windows::Devices::Display::Core::DisplayTarget`"]
-by performing an operation equivalent to
-https://docs.microsoft.com/en-us/uwp/api/windows.devices.display.core.displaymanager.tryacquiretarget["`winrt::Windows::Devices::Display::Core::DisplayManager.TryAcquireTarget()`"]
-on the "`DisplayTarget`".
-====
-
-[NOTE]
-.Note
-====
-One example of when Windows 10 loses access to a display is when the display
-is hot-unplugged.
-====
-
-[NOTE]
-.Note
-====
-One example of when a display has already been acquired by another entity is
-when the Windows desktop compositor (DWM) is in control of the display.
-Beginning with Windows 10 version 2004 it is possible to cause DWM to
-release a display by using the "`Advanced display settings`" sub-page of the
-"`Display settings`" control panel.
-flink:vkAcquireWinrtDisplayNV does not itself cause DWM to release a
-display; this action must be performed outside of Vulkan.
-====
-
-include::{generated}/validity/protos/vkAcquireWinrtDisplayNV.txt[]
---
-
-[open,refpage='vkGetWinrtDisplayNV',desc='Query the VkDisplayKHR corresponding to a WinRT DisplayTarget',type='protos']
---
-When acquiring displays on Windows 10, an application may also wish to
-enumerate and identify them using a native handle rather than a
-sname:VkDisplayKHR handle.
-
-To determine the sname:VkDisplayKHR handle corresponding to a
-https://docs.microsoft.com/en-us/uwp/api/windows.devices.display.core.displaytarget["`winrt::Windows::Devices::Display::Core::DisplayTarget`"],
-call:
-
-include::{generated}/api/protos/vkGetWinrtDisplayNV.txt[]
-
-  * pname:physicalDevice The physical device on which to query the display
-    handle.
-  * pname:deviceRelativeId The value of the
-    https://docs.microsoft.com/en-us/uwp/api/windows.devices.display.core.displaytarget.adapterrelativeid["`AdapterRelativeId`"]
-    property of a
-    https://docs.microsoft.com/en-us/uwp/api/windows.devices.display.core.displaytarget["`DisplayTarget`"]
-    that is enumerated by a
-    https://docs.microsoft.com/en-us/uwp/api/windows.devices.display.core.displayadapter["`DisplayAdapter`"]
-    with an
-    https://docs.microsoft.com/en-us/uwp/api/windows.devices.display.core.displayadapter.id["`Id`"]
-    property matching the pname:deviceLUID property of a
-    slink:VkPhysicalDeviceIDProperties for pname:physicalDevice.
-  * pname:pDisplay The corresponding slink:VkDisplayKHR handle will be
-    returned here.
-
-If there is no slink:VkDisplayKHR corresponding to pname:deviceRelativeId on
-pname:physicalDevice, dlink:VK_NULL_HANDLE must: be returned in
-pname:pDisplay.
-
-include::{generated}/validity/protos/vkGetWinrtDisplayNV.txt[]
---
diff --git a/registry/vulkan/chapters/VK_NV_clip_space_w_scaling/vertexpostproc.txt b/registry/vulkan/chapters/VK_NV_clip_space_w_scaling/vertexpostproc.txt
deleted file mode 100644
index 5d8a551..0000000
--- a/registry/vulkan/chapters/VK_NV_clip_space_w_scaling/vertexpostproc.txt
+++ /dev/null
@@ -1,95 +0,0 @@
-// Copyright (c) 2018-2020 NVIDIA Corporation
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-[[vertexpostproc-viewportwscaling]]
-== Controlling Viewport W Scaling
-
-If viewport *W* scaling is enabled, the *W* component of the clip coordinate
-is modified by the provided coefficients from the corresponding viewport as
-follows.
-
-  {empty}:: [eq]#w~c~' = x~coeff~ x~c~ {plus} y~coeff~ y~c~ {plus} w~c~#
-
-[open,refpage='VkPipelineViewportWScalingStateCreateInfoNV',desc='Structure specifying parameters of a newly created pipeline viewport W scaling state',type='structs']
---
-The sname:VkPipelineViewportWScalingStateCreateInfoNV structure is defined
-as:
-
-include::{generated}/api/structs/VkPipelineViewportWScalingStateCreateInfoNV.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:viewportWScalingEnable controls whether viewport *W* scaling is
-    enabled.
-  * pname:viewportCount is the number of viewports used by *W* scaling, and
-    must: match the number of viewports in the pipeline if viewport *W*
-    scaling is enabled.
-  * pname:pViewportWScalings is a pointer to an array of
-    sname:VkViewportWScalingNV structures defining the *W* scaling
-    parameters for the corresponding viewports.
-    If the viewport *W* scaling state is dynamic, this member is ignored.
-
-include::{generated}/validity/structs/VkPipelineViewportWScalingStateCreateInfoNV.txt[]
---
-
-The sname:VkPipelineViewportWScalingStateCreateInfoNV state is set by adding
-this structure to the pname:pNext chain of a
-sname:VkPipelineViewportStateCreateInfo structure and setting the graphics
-pipeline state with flink:vkCreateGraphicsPipelines.
-
-[open,refpage='vkCmdSetViewportWScalingNV',desc='Set the viewport W scaling dynamically for a command buffer',type='protos']
---
-To <<pipelines-dynamic-state, dynamically set>> the viewport *W* scaling
-parameters, call:
-
-include::{generated}/api/protos/vkCmdSetViewportWScalingNV.txt[]
-
-  * pname:commandBuffer is the command buffer into which the command will be
-    recorded.
-  * pname:firstViewport is the index of the first viewport whose parameters
-    are updated by the command.
-  * pname:viewportCount is the number of viewports whose parameters are
-    updated by the command.
-  * pname:pViewportWScalings is a pointer to an array of
-    slink:VkViewportWScalingNV structures specifying viewport parameters.
-
-The viewport parameters taken from element [eq]#i# of
-pname:pViewportWScalings replace the current state for the viewport index
-[eq]#pname:firstViewport {plus} i#, for [eq]#i# in [eq]#[0,
-pname:viewportCount)#.
-
-This command sets the viewport *W* scaling for subsequent drawing commands
-when the graphics pipeline is created with
-ename:VK_DYNAMIC_STATE_VIEWPORT_W_SCALING_NV set in
-slink:VkPipelineDynamicStateCreateInfo::pname:pDynamicStates.
-Otherwise, this state is specified by the
-slink:VkPipelineViewportWScalingStateCreateInfoNV::pname:pViewportWScalings
-values used to create the currently active pipeline.
-
-.Valid Usage
-****
-  * [[VUID-vkCmdSetViewportWScalingNV-firstViewport-01324]]
-    The sum of pname:firstViewport and pname:viewportCount must: be between
-    `1` and slink:VkPhysicalDeviceLimits::pname:maxViewports, inclusive
-****
-
-include::{generated}/validity/protos/vkCmdSetViewportWScalingNV.txt[]
---
-
-Both slink:VkPipelineViewportWScalingStateCreateInfoNV and
-flink:vkCmdSetViewportWScalingNV use sname:VkViewportWScalingNV to set the
-viewport transformation parameters.
-
-[open,refpage='VkViewportWScalingNV',desc='Structure specifying a viewport',type='structs']
---
-The sname:VkViewportWScalingNV structure is defined as:
-
-include::{generated}/api/structs/VkViewportWScalingNV.txt[]
-
-  * pname:xcoeff and pname:ycoeff are the viewport's W scaling factor for x
-    and y respectively.
-
-include::{generated}/validity/structs/VkViewportWScalingNV.txt[]
---
diff --git a/registry/vulkan/chapters/VK_NV_device_diagnostic_checkpoints/device_diagnostic_checkpoints.txt b/registry/vulkan/chapters/VK_NV_device_diagnostic_checkpoints/device_diagnostic_checkpoints.txt
deleted file mode 100644
index 2cd4914..0000000
--- a/registry/vulkan/chapters/VK_NV_device_diagnostic_checkpoints/device_diagnostic_checkpoints.txt
+++ /dev/null
@@ -1,150 +0,0 @@
-// Copyright (c) 2018-2020 NVIDIA Corporation
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-== Device Loss Debugging
-
-
-[[device-diagnostic-checkpoints]]
-=== Device Diagnostic Checkpoints
-
-Device execution progress can: be tracked for the purposes of debugging a
-device loss by annotating the command stream with application-defined
-diagnostic checkpoints.
-
-[open,refpage='vkCmdSetCheckpointNV',desc='Insert diagnostic checkpoint in command stream',type='protos']
---
-Device diagnostic checkpoints are inserted into the command stream by
-calling flink:vkCmdSetCheckpointNV.
-
-include::{generated}/api/protos/vkCmdSetCheckpointNV.txt[]
-
-  * pname:commandBuffer is the command buffer that will receive the marker
-  * pname:pCheckpointMarker is an opaque application-provided value that
-    will be associated with the checkpoint.
-
-include::{generated}/validity/protos/vkCmdSetCheckpointNV.txt[]
---
-
-Note that pname:pCheckpointMarker is treated as an opaque value.
-It does not need to be a valid pointer and will not be dereferenced by the
-implementation.
-
-ifdef::VK_KHR_synchronization2[]
-[open,refpage='vkGetQueueCheckpointData2NV',desc='Retrieve diagnostic checkpoint data',type='protos']
---
-If the device encounters an error during execution, the implementation will
-return a ename:VK_ERROR_DEVICE_LOST error to the application at some point
-during host execution.
-When this happens, the application can: call
-flink:vkGetQueueCheckpointData2NV to retrieve information on the most recent
-diagnostic checkpoints that were executed by the device.
-
-include::{generated}/api/protos/vkGetQueueCheckpointData2NV.txt[]
-
-  * pname:queue is the slink:VkQueue object the caller would like to
-    retrieve checkpoint data for
-  * pname:pCheckpointDataCount is a pointer to an integer related to the
-    number of checkpoint markers available or queried, as described below.
-  * pname:pCheckpointData is either `NULL` or a pointer to an array of
-    sname:VkCheckpointData2NV structures.
-
-If pname:pCheckpointData is `NULL`, then the number of checkpoint markers
-available is returned in pname:pCheckpointDataCount.
-Otherwise, pname:pCheckpointDataCount must: point to a variable set by the
-user to the number of elements in the pname:pCheckpointData array, and on
-return the variable is overwritten with the number of structures actually
-written to pname:pCheckpointData.
-
-If pname:pCheckpointDataCount is less than the number of checkpoint markers
-available, at most pname:pCheckpointDataCount structures will be written.
-
-.Valid Usage
-****
-  * [[VUID-vkGetQueueCheckpointData2NV-queue-03892]]
-    The device that pname:queue belongs to must: be in the lost state
-****
-
-include::{generated}/validity/protos/vkGetQueueCheckpointData2NV.txt[]
---
-
-[open,refpage='VkCheckpointData2NV',desc='Return structure for command buffer checkpoint data',type='structs']
---
-The slink:VkCheckpointData2NV structure is defined as:
-
-include::{generated}/api/structs/VkCheckpointData2NV.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:stage indicates a single pipeline stage which the checkpoint
-    marker data refers to.
-  * pname:pCheckpointMarker contains the value of the last checkpoint marker
-    executed in the stage that pname:stage refers to.
-
-include::{generated}/validity/structs/VkCheckpointData2NV.txt[]
-
-The stages at which a checkpoint marker can: be executed are
-implementation-defined and can: be queried by calling
-flink:vkGetPhysicalDeviceQueueFamilyProperties2.
---
-endif::VK_KHR_synchronization2[]
-
-[open,refpage='vkGetQueueCheckpointDataNV',desc='Retrieve diagnostic checkpoint data',type='protos']
---
-If the device encounters an error during execution, the implementation will
-return a ename:VK_ERROR_DEVICE_LOST error to the application at a certain
-point during host execution.
-When this happens, the application can: call
-flink:vkGetQueueCheckpointDataNV to retrieve information on the most recent
-diagnostic checkpoints that were executed by the device.
-
-include::{generated}/api/protos/vkGetQueueCheckpointDataNV.txt[]
-
-  * pname:queue is the slink:VkQueue object the caller would like to
-    retrieve checkpoint data for
-  * pname:pCheckpointDataCount is a pointer to an integer related to the
-    number of checkpoint markers available or queried, as described below.
-  * pname:pCheckpointData is either `NULL` or a pointer to an array of
-    sname:VkCheckpointDataNV structures.
-
-If pname:pCheckpointData is `NULL`, then the number of checkpoint markers
-available is returned in pname:pCheckpointDataCount.
-
-Otherwise, pname:pCheckpointDataCount must: point to a variable set by the
-user to the number of elements in the pname:pCheckpointData array, and on
-return the variable is overwritten with the number of structures actually
-written to pname:pCheckpointData.
-
-If pname:pCheckpointDataCount is less than the number of checkpoint markers
-available, at most pname:pCheckpointDataCount structures will be written.
-
-.Valid Usage
-****
-  * [[VUID-vkGetQueueCheckpointDataNV-queue-02025]]
-    The device that pname:queue belongs to must: be in the lost state
-****
-
-include::{generated}/validity/protos/vkGetQueueCheckpointDataNV.txt[]
---
-
-[open,refpage='VkCheckpointDataNV',desc='Return structure for command buffer checkpoint data',type='structs']
---
-The slink:VkCheckpointDataNV structure is defined as:
-
-include::{generated}/api/structs/VkCheckpointDataNV.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:stage is a ename:VkPipelineStageFlagBits value specifying which
-    pipeline stage the checkpoint marker data refers to.
-  * pname:pCheckpointMarker contains the value of the last checkpoint marker
-    executed in the stage that pname:stage refers to.
-
-The stages at which a checkpoint marker can: be executed are
-implementation-defined and can: be queried by calling
-flink:vkGetPhysicalDeviceQueueFamilyProperties2.
-
-include::{generated}/validity/structs/VkCheckpointDataNV.txt[]
---
diff --git a/registry/vulkan/chapters/VK_NV_device_diagnostic_checkpoints/queue_checkpoint_properties.txt b/registry/vulkan/chapters/VK_NV_device_diagnostic_checkpoints/queue_checkpoint_properties.txt
deleted file mode 100644
index b2d62d3..0000000
--- a/registry/vulkan/chapters/VK_NV_device_diagnostic_checkpoints/queue_checkpoint_properties.txt
+++ /dev/null
@@ -1,43 +0,0 @@
-// Copyright (c) 2018-2020 NVIDIA Corporation
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-ifdef::VK_KHR_synchronization2[]
-[open,refpage='VkQueueFamilyCheckpointProperties2NV',desc='Return structure for queue family checkpoint information query',type='structs']
---
-The slink:VkQueueFamilyCheckpointProperties2NV structure is defined as:
-
-include::{generated}/api/structs/VkQueueFamilyCheckpointProperties2NV.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:checkpointExecutionStageMask is a mask indicating which pipeline
-    stages the implementation can execute checkpoint markers in.
-
-Additional queue family information can be queried by setting
-slink:VkQueueFamilyProperties2::pname:pNext to point to a
-sname:VkQueueFamilyCheckpointProperties2NV structure.
-
-include::{generated}/validity/structs/VkQueueFamilyCheckpointProperties2NV.txt[]
---
-endif::VK_KHR_synchronization2[]
-
-[open,refpage='VkQueueFamilyCheckpointPropertiesNV',desc='Return structure for queue family checkpoint information query',type='structs']
---
-The slink:VkQueueFamilyCheckpointPropertiesNV structure is defined as:
-
-include::{generated}/api/structs/VkQueueFamilyCheckpointPropertiesNV.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:checkpointExecutionStageMask is a mask indicating which pipeline
-    stages the implementation can execute checkpoint markers in.
-
-Additional queue family information can be queried by setting
-slink:VkQueueFamilyProperties2::pname:pNext to point to a
-sname:VkQueueFamilyCheckpointPropertiesNV structure.
-
-include::{generated}/validity/structs/VkQueueFamilyCheckpointPropertiesNV.txt[]
---
diff --git a/registry/vulkan/chapters/VK_NV_device_generated_commands/cmdProcessAllSequences.txt b/registry/vulkan/chapters/VK_NV_device_generated_commands/cmdProcessAllSequences.txt
deleted file mode 100644
index cfbc2cb..0000000
--- a/registry/vulkan/chapters/VK_NV_device_generated_commands/cmdProcessAllSequences.txt
+++ /dev/null
@@ -1,25 +0,0 @@
-// Copyright (c) 2020 NVIDIA Corporation
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-[source,c]
----------------------------------------------------
-void cmdProcessAllSequences(cmd, pipeline, indirectCommandsLayout, pIndirectCommandsTokens, sequencesCount, indexbuffer, indexbufferOffset)
-{
-  for (s = 0; s < sequencesCount; s++)
-  {
-    sUsed = s;
-
-    if (indirectCommandsLayout.flags & VK_INDIRECT_COMMANDS_LAYOUT_USAGE_INDEXED_SEQUENCES_BIT_NV) {
-      sUsed = indexbuffer.load_uint32( sUsed * sizeof(uint32_t) + indexbufferOffset);
-    }
-
-    if (indirectCommandsLayout.flags & VK_INDIRECT_COMMANDS_LAYOUT_USAGE_UNORDERED_SEQUENCES_BIT_NV) {
-      sUsed = incoherent_implementation_dependent_permutation[ sUsed ];
-    }
-
-    cmdProcessSequence( cmd, pipeline, indirectCommandsLayout, pIndirectCommandsTokens, sUsed );
-  }
-}
----------------------------------------------------
-
diff --git a/registry/vulkan/chapters/VK_NV_device_generated_commands/generatedcommands.txt b/registry/vulkan/chapters/VK_NV_device_generated_commands/generatedcommands.txt
deleted file mode 100644
index c680456..0000000
--- a/registry/vulkan/chapters/VK_NV_device_generated_commands/generatedcommands.txt
+++ /dev/null
@@ -1,35 +0,0 @@
-// Copyright (c) 2019-2020 NVIDIA Corporation
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-[[device-generated-commands]]
-= Device-Generated Commands
-
-This chapter discusses the generation of command buffer content on the
-device, for which these principle steps are to be taken:
-
-  * Define via sname:VkIndirectCommandsLayoutNV the sequence of commands
-    which should be generated.
-  * Optionally make use of <<graphics-shadergroups, device-bindable Shader
-    Groups>>.
-  * Retrieve device addresses by flink:vkGetBufferDeviceAddressEXT for
-    setting buffers on the device.
-  * Fill one or more sname:VkBuffer with the appropriate content that gets
-    interpreted by sname:VkIndirectCommandsLayoutNV.
-  * Create a `preprocess` sname:VkBuffer using the allocation information
-    from flink:vkGetGeneratedCommandsMemoryRequirementsNV.
-  * Optionally preprocess the input data using
-    flink:vkCmdPreprocessGeneratedCommandsNV in a separate action.
-  * Generate and execute the actual commands via
-    flink:vkCmdExecuteGeneratedCommandsNV passing all required data.
-
-flink:vkCmdPreprocessGeneratedCommandsNV executes in a separate logical
-pipeline from either graphics or compute.
-When preprocessing commands in a separate step they must: be explicitly
-synchronized against the command execution.
-When not preprocessing, the preprocessing is automatically synchronized
-against the command execution.
-
-include::indirectcommands.txt[]
-
-include::generation.txt[]
diff --git a/registry/vulkan/chapters/VK_NV_device_generated_commands/generation.txt b/registry/vulkan/chapters/VK_NV_device_generated_commands/generation.txt
deleted file mode 100644
index 6574dd3..0000000
--- a/registry/vulkan/chapters/VK_NV_device_generated_commands/generation.txt
+++ /dev/null
@@ -1,291 +0,0 @@
-// Copyright (c) 2019-2020 NVIDIA Corporation
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-== Indirect Commands Generation And Execution
-
-[open,refpage='vkGetGeneratedCommandsMemoryRequirementsNV',desc='Retrieve the buffer allocation requirements for generated commands',type='protos']
---
-The generation of commands on the device requires a `preprocess` buffer.
-To retrieve the memory size and alignment requirements of a particular
-execution state call:
-
-include::{generated}/api/protos/vkGetGeneratedCommandsMemoryRequirementsNV.txt[]
-
-  * pname:device is the logical device that owns the buffer.
-  * pname:pInfo is a pointer to a
-    sname:VkGeneratedCommandsMemoryRequirementsInfoNV structure containing
-    parameters required for the memory requirements query.
-  * pname:pMemoryRequirements is a pointer to a slink:VkMemoryRequirements2
-    structure in which the memory requirements of the buffer object are
-    returned.
-
-.Valid Usage
-****
-  * [[VUID-vkGetGeneratedCommandsMemoryRequirementsNV-deviceGeneratedCommands-02906]]
-    The <<features-deviceGeneratedCommands,
-    sname:VkPhysicalDeviceDeviceGeneratedCommandsFeaturesNV::pname:deviceGeneratedCommands>>
-    feature must: be enabled
-****
-
-include::{generated}/validity/protos/vkGetGeneratedCommandsMemoryRequirementsNV.txt[]
---
-
-[open,refpage='VkGeneratedCommandsMemoryRequirementsInfoNV',desc='Structure specifying parameters for the reservation of preprocess buffer space',type='structs']
---
-include::{generated}/api/structs/VkGeneratedCommandsMemoryRequirementsInfoNV.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:pipelineBindPoint is the elink:VkPipelineBindPoint of the
-    pname:pipeline that this buffer memory is intended to be used with
-    during the execution.
-  * pname:pipeline is the slink:VkPipeline that this buffer memory is
-    intended to be used with during the execution.
-  * pname:indirectCommandsLayout is the slink:VkIndirectCommandsLayoutNV
-    that this buffer memory is intended to be used with.
-  * pname:maxSequencesCount is the maximum number of sequences that this
-    buffer memory in combination with the other state provided can: be used
-    with.
-
-.Valid Usage
-****
-  * [[VUID-VkGeneratedCommandsMemoryRequirementsInfoNV-maxSequencesCount-02907]]
-    pname:maxSequencesCount must: be less or equal to
-    slink:VkPhysicalDeviceDeviceGeneratedCommandsPropertiesNV::pname:maxIndirectSequenceCount
-****
-
-include::{generated}/validity/structs/VkGeneratedCommandsMemoryRequirementsInfoNV.txt[]
---
-
-[open,refpage='vkCmdExecuteGeneratedCommandsNV',desc='Generate and execute commands on the device',type='protos']
---
-:refpage: vkCmdExecuteGeneratedCommandsNV
-
-The actual generation of commands as well as their execution on the device
-is handled as single action with:
-
-include::{generated}/api/protos/vkCmdExecuteGeneratedCommandsNV.txt[]
-
-  * pname:commandBuffer is the command buffer into which the command is
-    recorded.
-  * pname:isPreprocessed represents whether the input data has already been
-    preprocessed on the device.
-    If it is ename:VK_FALSE this command will implicitly trigger the
-    preprocessing step, otherwise not.
-  * pname:pGeneratedCommandsInfo is a pointer to a
-    slink:VkGeneratedCommandsInfoNV structure containing parameters
-    affecting the generation of commands.
-
-.Valid Usage
-****
-include::{chapters}/commonvalidity/draw_common.txt[]
-include::{chapters}/commonvalidity/draw_vertex_binding.txt[]
-ifdef::VK_VERSION_1_1[]
-  * [[VUID-vkCmdExecuteGeneratedCommandsNV-commandBuffer-02970]]
-    pname:commandBuffer must: not be a protected command buffer
-endif::VK_VERSION_1_1[]
-  * [[VUID-vkCmdExecuteGeneratedCommandsNV-isPreprocessed-02908]]
-    If pname:isPreprocessed is ename:VK_TRUE then
-    flink:vkCmdPreprocessGeneratedCommandsNV must: have already been
-    executed on the device, using the same pname:pGeneratedCommandsInfo
-    content as well as the content of the input buffers it references (all
-    except slink:VkGeneratedCommandsInfoNV::pname:preprocessBuffer).
-    Furthermore pname:pGeneratedCommandsInfo`s pname:indirectCommandsLayout
-    must: have been created with the
-    ename:VK_INDIRECT_COMMANDS_LAYOUT_USAGE_EXPLICIT_PREPROCESS_BIT_NV bit
-    set
-  * [[VUID-vkCmdExecuteGeneratedCommandsNV-pipeline-02909]]
-    sname:VkGeneratedCommandsInfoNV::pname:pipeline must: match the current
-    bound pipeline at
-    sname:VkGeneratedCommandsInfoNV::pname:pipelineBindPoint
-ifdef::VK_EXT_transform_feedback[]
-  * [[VUID-vkCmdExecuteGeneratedCommandsNV-None-02910]]
-    Transform feedback must: not be active
-endif::VK_EXT_transform_feedback[]
-  * [[VUID-vkCmdExecuteGeneratedCommandsNV-deviceGeneratedCommands-02911]]
-    The <<features-deviceGeneratedCommands,
-    sname:VkPhysicalDeviceDeviceGeneratedCommandsFeaturesNV::pname:deviceGeneratedCommands>>
-    feature must: be enabled
-****
-
-include::{generated}/validity/protos/vkCmdExecuteGeneratedCommandsNV.txt[]
---
-
-[open,refpage='VkGeneratedCommandsInfoNV',desc='Structure specifying parameters for the generation of commands',type='structs']
---
-include::{generated}/api/structs/VkGeneratedCommandsInfoNV.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:pipelineBindPoint is the elink:VkPipelineBindPoint used for the
-    pname:pipeline.
-  * pname:pipeline is the slink:VkPipeline used in the generation and
-    execution process.
-  * pname:indirectCommandsLayout is the slink:VkIndirectCommandsLayoutNV
-    that provides the command sequence to generate.
-  * pname:streamCount defines the number of input streams
-  * pname:pStreams is a pointer to an array of pname:streamCount
-    slink:VkIndirectCommandsStreamNV structures providing the input data for
-    the tokens used in pname:indirectCommandsLayout.
-  * pname:sequencesCount is the maximum number of sequences to reserve.
-    If pname:sequencesCountBuffer is dlink:VK_NULL_HANDLE, this is also the
-    actual number of sequences generated.
-  * pname:preprocessBuffer is the slink:VkBuffer that is used for
-    preprocessing the input data for execution.
-    If this structure is used with flink:vkCmdExecuteGeneratedCommandsNV
-    with its pname:isPreprocessed set to `VK_TRUE`, then the preprocessing
-    step is skipped and data is only read from this buffer.
-  * pname:preprocessOffset is the byte offset into pname:preprocessBuffer
-    where the preprocessed data is stored.
-  * pname:preprocessSize is the maximum byte size within the
-    pname:preprocessBuffer after the pname:preprocessOffset that is
-    available for preprocessing.
-  * pname:sequencesCountBuffer is a sname:VkBuffer in which the actual
-    number of sequences is provided as single code:uint32_t value.
-  * pname:sequencesCountOffset is the byte offset into
-    pname:sequencesCountBuffer where the count value is stored.
-  * pname:sequencesIndexBuffer is a sname:VkBuffer that encodes the used
-    sequence indices as code:uint32_t array.
-  * pname:sequencesIndexOffset is the byte offset into
-    pname:sequencesIndexBuffer where the index values start.
-
-.Valid Usage
-****
-  * [[VUID-VkGeneratedCommandsInfoNV-pipeline-02912]]
-    The provided pname:pipeline must: match the pipeline bound at execution
-    time
-  * [[VUID-VkGeneratedCommandsInfoNV-indirectCommandsLayout-02913]]
-    If the pname:indirectCommandsLayout uses a token of
-    ename:VK_INDIRECT_COMMANDS_TOKEN_TYPE_SHADER_GROUP_NV, then the
-    pname:pipeline must: have been created with multiple shader groups
-  * [[VUID-VkGeneratedCommandsInfoNV-indirectCommandsLayout-02914]]
-    If the pname:indirectCommandsLayout uses a token of
-    ename:VK_INDIRECT_COMMANDS_TOKEN_TYPE_SHADER_GROUP_NV, then the
-    pname:pipeline must: have been created with
-    ename:VK_PIPELINE_CREATE_INDIRECT_BINDABLE_BIT_NV set in
-    sname:VkGraphicsPipelineCreateInfo::pname:flags
-  * [[VUID-VkGeneratedCommandsInfoNV-indirectCommandsLayout-02915]]
-    If the pname:indirectCommandsLayout uses a token of
-    ename:VK_INDIRECT_COMMANDS_TOKEN_TYPE_PUSH_CONSTANT_NV, then the
-    pname:pipeline`s sname:VkPipelineLayout must: match the
-    slink:VkIndirectCommandsLayoutTokenNV::pname:pushconstantPipelineLayout
-  * [[VUID-VkGeneratedCommandsInfoNV-streamCount-02916]]
-    pname:streamCount must: match the pname:indirectCommandsLayout's
-    pname:streamCount
-  * [[VUID-VkGeneratedCommandsInfoNV-sequencesCount-02917]]
-    pname:sequencesCount must: be less or equal to
-    slink:VkPhysicalDeviceDeviceGeneratedCommandsPropertiesNV::pname:maxIndirectSequenceCount
-    and
-    slink:VkGeneratedCommandsMemoryRequirementsInfoNV::pname:maxSequencesCount
-    that was used to determine the pname:preprocessSize
-  * [[VUID-VkGeneratedCommandsInfoNV-preprocessBuffer-02918]]
-    pname:preprocessBuffer must: have the
-    ename:VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT bit set in its usage flag
-  * [[VUID-VkGeneratedCommandsInfoNV-preprocessOffset-02919]]
-    pname:preprocessOffset must: be aligned to
-    slink:VkPhysicalDeviceDeviceGeneratedCommandsPropertiesNV::pname:minIndirectCommandsBufferOffsetAlignment
-  * [[VUID-VkGeneratedCommandsInfoNV-preprocessBuffer-02971]]
-    If pname:preprocessBuffer is non-sparse then it must: be bound
-    completely and contiguously to a single sname:VkDeviceMemory object
-  * [[VUID-VkGeneratedCommandsInfoNV-preprocessSize-02920]]
-    pname:preprocessSize must: be at least equal to the memory requirement`s
-    size returned by flink:vkGetGeneratedCommandsMemoryRequirementsNV using
-    the matching inputs (pname:indirectCommandsLayout, ...) as within this
-    structure
-  * [[VUID-VkGeneratedCommandsInfoNV-sequencesCountBuffer-02921]]
-    pname:sequencesCountBuffer can: be set if the actual used count of
-    sequences is sourced from the provided buffer.
-    In that case the pname:sequencesCount serves as upper bound
-  * [[VUID-VkGeneratedCommandsInfoNV-sequencesCountBuffer-02922]]
-    If pname:sequencesCountBuffer is not dlink:VK_NULL_HANDLE, its usage
-    flag must: have the ename:VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT bit set
-  * [[VUID-VkGeneratedCommandsInfoNV-sequencesCountBuffer-02923]]
-    If pname:sequencesCountBuffer is not dlink:VK_NULL_HANDLE,
-    pname:sequencesCountOffset must: be aligned to
-    sname:VkPhysicalDeviceDeviceGeneratedCommandsPropertiesNV::pname:minSequencesCountBufferOffsetAlignment
-  * [[VUID-VkGeneratedCommandsInfoNV-sequencesCountBuffer-02972]]
-    If pname:sequencesCountBuffer is not dlink:VK_NULL_HANDLE and is
-    non-sparse then it must: be bound completely and contiguously to a
-    single sname:VkDeviceMemory object
-  * [[VUID-VkGeneratedCommandsInfoNV-sequencesIndexBuffer-02924]]
-    If pname:indirectCommandsLayout's
-    ename:VK_INDIRECT_COMMANDS_LAYOUT_USAGE_INDEXED_SEQUENCES_BIT_NV is set,
-    pname:sequencesIndexBuffer must: be set otherwise it must: be
-    dlink:VK_NULL_HANDLE
-  * [[VUID-VkGeneratedCommandsInfoNV-sequencesIndexBuffer-02925]]
-    If pname:sequencesIndexBuffer is not dlink:VK_NULL_HANDLE, its usage
-    flag must: have the ename:VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT bit set
-  * [[VUID-VkGeneratedCommandsInfoNV-sequencesIndexBuffer-02926]]
-    If pname:sequencesIndexBuffer is not dlink:VK_NULL_HANDLE,
-    pname:sequencesIndexOffset must: be aligned to
-    sname:VkPhysicalDeviceDeviceGeneratedCommandsPropertiesNV::pname:minSequencesIndexBufferOffsetAlignment
-  * [[VUID-VkGeneratedCommandsInfoNV-sequencesIndexBuffer-02973]]
-    If pname:sequencesIndexBuffer is not dlink:VK_NULL_HANDLE and is
-    non-sparse then it must: be bound completely and contiguously to a
-    single sname:VkDeviceMemory object
-****
-
-include::{generated}/validity/structs/VkGeneratedCommandsInfoNV.txt[]
---
-
-Referencing the functions defined in <<indirectmdslayout>>,
-fname:vkCmdExecuteGeneratedCommandsNV behaves as:
-
-[source,c]
----------------------------------------------------
-uint32_t sequencesCount = sequencesCountBuffer ?
-      min(maxSequencesCount, sequencesCountBuffer.load_uint32(sequencesCountOffset) :
-      maxSequencesCount;
-
-
-cmdProcessAllSequences(commandBuffer, pipeline,
-                       indirectCommandsLayout, pIndirectCommandsStreams,
-                       sequencesCount,
-                       sequencesIndexBuffer, sequencesIndexOffset);
-
-// The stateful commands within indirectCommandsLayout will not
-// affect the state of subsequent commands in the target
-// command buffer (cmd)
----------------------------------------------------
-
-[NOTE]
-.Note
-====
-It is important to note that the values of all state related to the
-pname:pipelineBindPoint used are undefined: after this command.
-====
-
-[open,refpage='vkCmdPreprocessGeneratedCommandsNV',desc='Performs preprocessing for generated commands',type='protos']
---
-Commands can: be preprocessed prior execution using the following command:
-
-include::{generated}/api/protos/vkCmdPreprocessGeneratedCommandsNV.txt[]
-
-  * pname:commandBuffer is the command buffer which does the preprocessing.
-  * pname:pGeneratedCommandsInfo is a pointer to a
-    slink:VkGeneratedCommandsInfoNV structure containing parameters
-    affecting the preprocessing step.
-
-.Valid Usage
-****
-ifdef::VK_VERSION_1_1[]
-  * [[VUID-vkCmdPreprocessGeneratedCommandsNV-commandBuffer-02974]]
-    pname:commandBuffer must: not be a protected command buffer
-endif::VK_VERSION_1_1[]
-  * [[VUID-vkCmdPreprocessGeneratedCommandsNV-pGeneratedCommandsInfo-02927]]
-    pname:pGeneratedCommandsInfo`s pname:indirectCommandsLayout must: have
-    been created with the
-    ename:VK_INDIRECT_COMMANDS_LAYOUT_USAGE_EXPLICIT_PREPROCESS_BIT_NV bit
-    set
-  * [[VUID-vkCmdPreprocessGeneratedCommandsNV-deviceGeneratedCommands-02928]]
-    The <<features-deviceGeneratedCommands,
-    sname:VkPhysicalDeviceDeviceGeneratedCommandsFeaturesNV::pname:deviceGeneratedCommands>>
-    feature must: be enabled
-****
-
-include::{generated}/validity/protos/vkCmdPreprocessGeneratedCommandsNV.txt[]
---
-
diff --git a/registry/vulkan/chapters/VK_NV_device_generated_commands/indirectcommands.txt b/registry/vulkan/chapters/VK_NV_device_generated_commands/indirectcommands.txt
deleted file mode 100644
index e188d2e..0000000
--- a/registry/vulkan/chapters/VK_NV_device_generated_commands/indirectcommands.txt
+++ /dev/null
@@ -1,621 +0,0 @@
-// Copyright (c) 2019-2020 NVIDIA Corporation
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-[[indirectmdslayout]]
-== Indirect Commands Layout
-
-[open,refpage='VkIndirectCommandsLayoutNV',desc='Opaque handle to an indirect commands layout object',type='handles']
---
-The device-side command generation happens through an iterative processing
-of an atomic sequence comprised of command tokens, which are represented by:
-
-include::{generated}/api/handles/VkIndirectCommandsLayoutNV.txt[]
---
-
-
-=== Creation and Deletion
-
-[open,refpage='vkCreateIndirectCommandsLayoutNV',desc='Create an indirect command layout object',type='protos']
---
-Indirect command layouts are created by:
-
-include::{generated}/api/protos/vkCreateIndirectCommandsLayoutNV.txt[]
-
-  * pname:device is the logical device that creates the indirect command
-    layout.
-  * pname:pCreateInfo is a pointer to a
-    sname:VkIndirectCommandsLayoutCreateInfoNV structure containing
-    parameters affecting creation of the indirect command layout.
-  * pname:pAllocator controls host memory allocation as described in the
-    <<memory-allocation, Memory Allocation>> chapter.
-  * pname:pIndirectCommandsLayout is a pointer to a
-    sname:VkIndirectCommandsLayoutNV handle in which the resulting indirect
-    command layout is returned.
-
-.Valid Usage
-****
-  * [[VUID-vkCreateIndirectCommandsLayoutNV-deviceGeneratedCommands-02929]]
-    The <<features-deviceGeneratedCommands,
-    sname:VkPhysicalDeviceDeviceGeneratedCommandsFeaturesNV::pname:deviceGeneratedCommands>>
-    feature must: be enabled
-****
-
-include::{generated}/validity/protos/vkCreateIndirectCommandsLayoutNV.txt[]
---
-
-[open,refpage='VkIndirectCommandsLayoutCreateInfoNV',desc='Structure specifying the parameters of a newly created indirect commands layout object',type='structs']
---
-The sname:VkIndirectCommandsLayoutCreateInfoNV structure is defined as:
-
-include::{generated}/api/structs/VkIndirectCommandsLayoutCreateInfoNV.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:pipelineBindPoint is the elink:VkPipelineBindPoint that this
-    layout targets.
-  * pname:flags is a bitmask of
-    elink:VkIndirectCommandsLayoutUsageFlagBitsNV specifying usage hints of
-    this layout.
-  * pname:tokenCount is the length of the individual command sequence.
-  * pname:pTokens is an array describing each command token in detail.
-    See elink:VkIndirectCommandsTokenTypeNV and
-    slink:VkIndirectCommandsLayoutTokenNV below for details.
-  * pname:streamCount is the number of streams used to provide the token
-    inputs.
-  * pname:pStreamStrides is an array defining the byte stride for each input
-    stream.
-
-The following code illustrates some of the flags:
-
-[source,c]
-~~~~
-void cmdProcessAllSequences(cmd, pipeline, indirectCommandsLayout, pIndirectCommandsTokens, sequencesCount, indexbuffer, indexbufferOffset)
-{
-  for (s = 0; s < sequencesCount; s++)
-  {
-    sUsed = s;
-
-    if (indirectCommandsLayout.flags & VK_INDIRECT_COMMANDS_LAYOUT_USAGE_INDEXED_SEQUENCES_BIT_NV) {
-      sUsed = indexbuffer.load_uint32( sUsed * sizeof(uint32_t) + indexbufferOffset);
-    }
-
-    if (indirectCommandsLayout.flags & VK_INDIRECT_COMMANDS_LAYOUT_USAGE_UNORDERED_SEQUENCES_BIT_NV) {
-      sUsed = incoherent_implementation_dependent_permutation[ sUsed ];
-    }
-
-    cmdProcessSequence( cmd, pipeline, indirectCommandsLayout, pIndirectCommandsTokens, sUsed );
-  }
-}
-~~~~
-
-.Valid Usage
-****
-  * [[VUID-VkIndirectCommandsLayoutCreateInfoNV-pipelineBindPoint-02930]]
-    The pname:pipelineBindPoint must: be
-    ename:VK_PIPELINE_BIND_POINT_GRAPHICS
-  * [[VUID-VkIndirectCommandsLayoutCreateInfoNV-tokenCount-02931]]
-    pname:tokenCount must: be greater than `0` and less than or equal to
-    sname:VkPhysicalDeviceDeviceGeneratedCommandsPropertiesNV::pname:maxIndirectCommandsTokenCount
-  * [[VUID-VkIndirectCommandsLayoutCreateInfoNV-pTokens-02932]]
-    If pname:pTokens contains an entry of
-    ename:VK_INDIRECT_COMMANDS_TOKEN_TYPE_SHADER_GROUP_NV it must: be the
-    first element of the array and there must: be only a single element of
-    such token type
-  * [[VUID-VkIndirectCommandsLayoutCreateInfoNV-pTokens-02933]]
-    If pname:pTokens contains an entry of
-    ename:VK_INDIRECT_COMMANDS_TOKEN_TYPE_STATE_FLAGS_NV there must: be only
-    a single element of such token type
-  * [[VUID-VkIndirectCommandsLayoutCreateInfoNV-pTokens-02934]]
-    All state tokens in pname:pTokens must: occur prior work provoking
-    tokens (ename:VK_INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_NV,
-    ename:VK_INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_INDEXED_NV,
-    ename:VK_INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_TASKS_NV)
-  * [[VUID-VkIndirectCommandsLayoutCreateInfoNV-pTokens-02935]]
-    The content of pname:pTokens must: include one single work provoking
-    token that is compatible with the pname:pipelineBindPoint
-  * [[VUID-VkIndirectCommandsLayoutCreateInfoNV-streamCount-02936]]
-    pname:streamCount must: be greater than `0` and less or equal to
-    sname:VkPhysicalDeviceDeviceGeneratedCommandsPropertiesNV::pname:maxIndirectCommandsStreamCount
-  * [[VUID-VkIndirectCommandsLayoutCreateInfoNV-pStreamStrides-02937]]
-    each element of pname:pStreamStrides must: be greater than `0`and less
-    than or equal to
-    sname:VkPhysicalDeviceDeviceGeneratedCommandsPropertiesNV::pname:maxIndirectCommandsStreamStride.
-    Furthermore the alignment of each token input must: be ensured
-****
-
-include::{generated}/validity/structs/VkIndirectCommandsLayoutCreateInfoNV.txt[]
---
-
-[open,refpage='VkIndirectCommandsLayoutUsageFlagBitsNV',desc='Bitmask specifying allowed usage of an indirect commands layout',type='enums']
---
-Bits which can: be set in
-slink:VkIndirectCommandsLayoutCreateInfoNV::pname:flags, specifying usage
-hints of an indirect command layout, are:
-
-include::{generated}/api/enums/VkIndirectCommandsLayoutUsageFlagBitsNV.txt[]
-
-  * ename:VK_INDIRECT_COMMANDS_LAYOUT_USAGE_EXPLICIT_PREPROCESS_BIT_NV
-    specifies that the layout is always used with the manual preprocessing
-    step through calling flink:vkCmdPreprocessGeneratedCommandsNV and
-    executed by flink:vkCmdExecuteGeneratedCommandsNV with `isPreprocessed`
-    set to ename:VK_TRUE.
-  * ename:VK_INDIRECT_COMMANDS_LAYOUT_USAGE_INDEXED_SEQUENCES_BIT_NV
-    specifies that the input data for the sequences is not implicitly
-    indexed from 0..sequencesUsed but a user provided sname:VkBuffer
-    encoding the index is provided.
-  * ename:VK_INDIRECT_COMMANDS_LAYOUT_USAGE_UNORDERED_SEQUENCES_BIT_NV
-    specifies that the processing of sequences can: happen at an
-    implementation-dependent order, which is not: guaranteed to be coherent
-    using the same input data.
---
-
-[open,refpage='VkIndirectCommandsLayoutUsageFlagsNV',desc='Bitmask of VkIndirectCommandsLayoutUsageFlagBitsNV',type='flags']
---
-include::{generated}/api/flags/VkIndirectCommandsLayoutUsageFlagsNV.txt[]
-
-tname:VkIndirectCommandsLayoutUsageFlagsNV is a bitmask type for setting a
-mask of zero or more elink:VkIndirectCommandsLayoutUsageFlagBitsNV.
---
-
-[open,refpage='vkDestroyIndirectCommandsLayoutNV',desc='Destroy an indirect commands layout',type='protos']
---
-Indirect command layouts are destroyed by:
-
-include::{generated}/api/protos/vkDestroyIndirectCommandsLayoutNV.txt[]
-
-  * pname:device is the logical device that destroys the layout.
-  * pname:indirectCommandsLayout is the layout to destroy.
-  * pname:pAllocator controls host memory allocation as described in the
-    <<memory-allocation, Memory Allocation>> chapter.
-
-.Valid Usage
-****
-  * [[VUID-vkDestroyIndirectCommandsLayoutNV-indirectCommandsLayout-02938]]
-    All submitted commands that refer to pname:indirectCommandsLayout must:
-    have completed execution
-  * [[VUID-vkDestroyIndirectCommandsLayoutNV-indirectCommandsLayout-02939]]
-    If sname:VkAllocationCallbacks were provided when
-    pname:indirectCommandsLayout was created, a compatible set of callbacks
-    must: be provided here
-  * [[VUID-vkDestroyIndirectCommandsLayoutNV-indirectCommandsLayout-02940]]
-    If no sname:VkAllocationCallbacks were provided when
-    pname:indirectCommandsLayout was created, pname:pAllocator must: be
-    `NULL`
-  * [[VUID-vkDestroyIndirectCommandsLayoutNV-deviceGeneratedCommands-02941]]
-    The <<features-deviceGeneratedCommands,
-    sname:VkPhysicalDeviceDeviceGeneratedCommandsFeaturesNV::pname:deviceGeneratedCommands>>
-    feature must: be enabled
-****
-
-include::{generated}/validity/protos/vkDestroyIndirectCommandsLayoutNV.txt[]
---
-
-
-=== Token Input Streams
-
-[open,refpage='VkIndirectCommandsStreamNV',desc='Structure specifying input streams for generated command tokens',type='structs']
---
-The sname:VkIndirectCommandsStreamNV structure specifies the input data for
-one or more tokens at processing time.
-
-include::{generated}/api/structs/VkIndirectCommandsStreamNV.txt[]
-
-  * pname:buffer specifies the slink:VkBuffer storing the functional
-    arguments for each sequence.
-    These arguments can: be written by the device.
-  * pname:offset specified an offset into pname:buffer where the arguments
-    start.
-
-.Valid Usage
-****
-  * [[VUID-VkIndirectCommandsStreamNV-buffer-02942]]
-    The pname:buffer's usage flag must: have the
-    ename:VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT bit set
-  * [[VUID-VkIndirectCommandsStreamNV-offset-02943]]
-    The pname:offset must: be aligned to
-    sname:VkPhysicalDeviceDeviceGeneratedCommandsPropertiesNV::pname:minIndirectCommandsBufferOffsetAlignment
-  * [[VUID-VkIndirectCommandsStreamNV-buffer-02975]]
-    If pname:buffer is non-sparse then it must: be bound completely and
-    contiguously to a single sname:VkDeviceMemory object
-****
-
-include::{generated}/validity/structs/VkIndirectCommandsStreamNV.txt[]
---
-
-The input streams can: contain raw `uint32_t` values, existing indirect
-commands such as:
-
-* slink:VkDrawIndirectCommand
-* slink:VkDrawIndexedIndirectCommand
-ifdef::VK_NV_mesh_shader[]
-* slink:VkDrawMeshTasksIndirectCommandNV
-endif::VK_NV_mesh_shader[]
-
-or additional commands as listed below.
-How the data is used is described in the next section.
-
-[open,refpage='VkBindShaderGroupIndirectCommandNV',desc='Structure specifying input data for a single shader group command token',type='structs']
---
-The sname:VkBindShaderGroupIndirectCommandNV structure specifies the input
-data for the ename:VK_INDIRECT_COMMANDS_TOKEN_TYPE_SHADER_GROUP_NV token.
-
-include::{generated}/api/structs/VkBindShaderGroupIndirectCommandNV.txt[]
-
-  * pname:index specifies which shader group of the current bound graphics
-    pipeline is used.
-
-.Valid Usage
-****
-  * [[VUID-VkBindShaderGroupIndirectCommandNV-None-02944]]
-    The current bound graphics pipeline, as well as the pipelines it may
-    reference, must: have been created with
-    ename:VK_PIPELINE_CREATE_INDIRECT_BINDABLE_BIT_NV
-  * [[VUID-VkBindShaderGroupIndirectCommandNV-index-02945]]
-    The pname:index must: be within range of the accessible shader groups of
-    the current bound graphics pipeline.
-    See flink:vkCmdBindPipelineShaderGroupNV for further details
-****
-
-include::{generated}/validity/structs/VkBindShaderGroupIndirectCommandNV.txt[]
---
-
-[open,refpage='VkBindIndexBufferIndirectCommandNV',desc='Structure specifying input data for a single index buffer command token',type='structs']
---
-The sname:VkBindIndexBufferIndirectCommandNV structure specifies the input
-data for the ename:VK_INDIRECT_COMMANDS_TOKEN_TYPE_INDEX_BUFFER_NV token.
-
-include::{generated}/api/structs/VkBindIndexBufferIndirectCommandNV.txt[]
-
-  * pname:bufferAddress specifies a physical address of the slink:VkBuffer
-    used as index buffer.
-  * pname:size is the byte size range which is available for this operation
-    from the provided address.
-  * pname:indexType is a elink:VkIndexType value specifying how indices are
-    treated.
-    Instead of the Vulkan enum values, a custom `uint32_t` value can: be
-    mapped to an elink:VkIndexType by specifying the
-    sname:VkIndirectCommandsLayoutTokenNV::pname:pIndexTypes and
-    sname:VkIndirectCommandsLayoutTokenNV::pname:pIndexTypeValues arrays.
-
-.Valid Usage
-****
-  * [[VUID-VkBindIndexBufferIndirectCommandNV-None-02946]]
-    The buffer's usage flag from which the address was acquired must: have
-    the ename:VK_BUFFER_USAGE_INDEX_BUFFER_BIT bit set
-  * [[VUID-VkBindIndexBufferIndirectCommandNV-bufferAddress-02947]]
-    The pname:bufferAddress must: be aligned to the pname:indexType used
-  * [[VUID-VkBindIndexBufferIndirectCommandNV-None-02948]]
-    Each element of the buffer from which the address was acquired and that
-    is non-sparse must: be bound completely and contiguously to a single
-    sname:VkDeviceMemory object
-****
-
-include::{generated}/validity/structs/VkBindIndexBufferIndirectCommandNV.txt[]
---
-
-[open,refpage='VkBindVertexBufferIndirectCommandNV',desc='Structure specifying input data for a single vertex buffer command token',type='structs']
---
-The sname:VkBindVertexBufferIndirectCommandNV structure specifies the input
-data for the ename:VK_INDIRECT_COMMANDS_TOKEN_TYPE_VERTEX_BUFFER_NV token.
-
-include::{generated}/api/structs/VkBindVertexBufferIndirectCommandNV.txt[]
-
-  * pname:bufferAddress specifies a physical address of the slink:VkBuffer
-    used as vertex input binding.
-  * pname:size is the byte size range which is available for this operation
-    from the provided address.
-  * pname:stride is the byte size stride for this vertex input binding as in
-    sname:VkVertexInputBindingDescription::pname:stride.
-    It is only used if
-    sname:VkIndirectCommandsLayoutTokenNV::pname:vertexDynamicStride was
-    set, otherwise the stride is inherited from the current bound graphics
-    pipeline.
-
-.Valid Usage
-****
-  * [[VUID-VkBindVertexBufferIndirectCommandNV-None-02949]]
-    The buffer's usage flag from which the address was acquired must: have
-    the ename:VK_BUFFER_USAGE_VERTEX_BUFFER_BIT bit set
-  * [[VUID-VkBindVertexBufferIndirectCommandNV-None-02950]]
-    Each element of the buffer from which the address was acquired and that
-    is non-sparse must: be bound completely and contiguously to a single
-    sname:VkDeviceMemory object
-****
-
-include::{generated}/validity/structs/VkBindVertexBufferIndirectCommandNV.txt[]
---
-
-[open,refpage='VkSetStateFlagsIndirectCommandNV',desc='Structure specifying input data for a single state flag command token',type='structs']
---
-The sname:VkSetStateFlagsIndirectCommandNV structure specifies the input
-data for the ename:VK_INDIRECT_COMMANDS_TOKEN_TYPE_STATE_FLAGS_NV token.
-Which state is changed depends on the elink:VkIndirectStateFlagBitsNV
-specified at sname:VkIndirectCommandsLayoutNV creation time.
-
-include::{generated}/api/structs/VkSetStateFlagsIndirectCommandNV.txt[]
-
-  * pname:data encodes packed state that this command alters.
-  ** Bit `0`: If set represents ename:VK_FRONT_FACE_CLOCKWISE, otherwise
-     ename:VK_FRONT_FACE_COUNTER_CLOCKWISE
-
-include::{generated}/validity/structs/VkSetStateFlagsIndirectCommandNV.txt[]
---
-
-[open,refpage='VkIndirectStateFlagBitsNV',desc='Bitmask specifiying state that can be altered on the device',type='enums']
---
-A subset of the graphics pipeline state can: be altered using indirect state
-flags:
-
-include::{generated}/api/enums/VkIndirectStateFlagBitsNV.txt[]
-
-* ename:VK_INDIRECT_STATE_FLAG_FRONTFACE_BIT_NV allows to toggle the
-  elink:VkFrontFace rasterization state for subsequent draw operations.
---
-
-[open,refpage='VkIndirectStateFlagsNV',desc='Bitmask of VkIndirectStateFlagBitsNV',type='flags']
---
-include::{generated}/api/flags/VkIndirectStateFlagsNV.txt[]
-
-tname:VkIndirectStateFlagsNV is a bitmask type for setting a mask of zero or
-more elink:VkIndirectStateFlagBitsNV.
---
-
-
-=== Tokenized Command Processing
-
-The processing is in principle illustrated below:
-
-[source,c]
----------------------------------------------------
-void cmdProcessSequence(cmd, pipeline, indirectCommandsLayout, pIndirectCommandsStreams, s)
-{
-  for (t = 0; t < indirectCommandsLayout.tokenCount; t++)
-  {
-    uint32_t stream  = indirectCommandsLayout.pTokens[t].stream;
-    uint32_t offset  = indirectCommandsLayout.pTokens[t].offset;
-    uint32_t stride  = indirectCommandsLayout.pStreamStrides[stream];
-    stream            = pIndirectCommandsStreams[stream];
-    const void* input = stream.buffer.pointer( stream.offset + stride * s + offset )
-
-    // further details later
-    indirectCommandsLayout.pTokens[t].command (cmd, pipeline, input, s);
-  }
-}
-
-void cmdProcessAllSequences(cmd, pipeline, indirectCommandsLayout, pIndirectCommandsStreams, sequencesCount)
-{
-  for (s = 0; s < sequencesCount; s++)
-  {
-    cmdProcessSequence(cmd, pipeline, indirectCommandsLayout, pIndirectCommandsStreams, s);
-  }
-}
----------------------------------------------------
-
-The processing of each sequence is considered stateless, therefore all state
-changes must: occur prior work provoking commands within the sequence.
-A single sequence is strictly targeting the elink:VkPipelineBindPoint it was
-created with.
-
-The primary input data for each token is provided through sname:VkBuffer
-content at preprocessing using flink:vkCmdPreprocessGeneratedCommandsNV or
-execution time using flink:vkCmdExecuteGeneratedCommandsNV, however some
-functional arguments, for example binding sets, are specified at layout
-creation time.
-The input size is different for each token.
-
-[open,refpage='VkIndirectCommandsTokenTypeNV',desc='Enum specifying token commands',type='enums']
---
-Possible values of those elements of the
-slink:VkIndirectCommandsLayoutCreateInfoNV::pname:pTokens array which
-specify command tokens (other elements of the array specify command
-parameters) are:
-
-include::{generated}/api/enums/VkIndirectCommandsTokenTypeNV.txt[]
-
-.Supported indirect command tokens
-[width="80%",cols="67%,33%",options="header",align="center"]
-|====
-|Token type                                                 | Equivalent command
-|ename:VK_INDIRECT_COMMANDS_TOKEN_TYPE_SHADER_GROUP_NV      | flink:vkCmdBindPipelineShaderGroupNV
-|ename:VK_INDIRECT_COMMANDS_TOKEN_TYPE_STATE_FLAGS_NV       | -
-|ename:VK_INDIRECT_COMMANDS_TOKEN_TYPE_INDEX_BUFFER_NV      | flink:vkCmdBindIndexBuffer
-|ename:VK_INDIRECT_COMMANDS_TOKEN_TYPE_VERTEX_BUFFER_NV     | flink:vkCmdBindVertexBuffers
-|ename:VK_INDIRECT_COMMANDS_TOKEN_TYPE_PUSH_CONSTANT_NV     | flink:vkCmdPushConstants
-|ename:VK_INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_INDEXED_NV      | flink:vkCmdDrawIndexedIndirect
-|ename:VK_INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_NV              | flink:vkCmdDrawIndirect
-ifdef::VK_NV_mesh_shader[]
-|ename:VK_INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_TASKS_NV        | flink:vkCmdDrawMeshTasksIndirectNV
-endif::VK_NV_mesh_shader[]
-|====
---
-
-[open,refpage='VkIndirectCommandsLayoutTokenNV',desc='Struct specifying the details of an indirect command layout token',type='structs']
---
-The sname:VkIndirectCommandsLayoutTokenNV structure specifies details to the
-function arguments that need to be known at layout creation time:
-
-include::{generated}/api/structs/VkIndirectCommandsLayoutTokenNV.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:tokenType specifies the token command type.
-  * pname:stream is the index of the input stream that contains the token
-    argument data.
-  * pname:offset is a relative starting offset within the input stream
-    memory for the token argument data.
-  * pname:vertexBindingUnit is used for the vertex buffer binding command.
-  * pname:vertexDynamicStride sets if the vertex buffer stride is provided
-    by the binding command rather than the current bound graphics pipeline
-    state.
-  * pname:pushconstantPipelineLayout is the sname:VkPipelineLayout used for
-    the push constant command.
-  * pname:pushconstantShaderStageFlags are the shader stage flags used for
-    the push constant command.
-  * pname:pushconstantOffset is the offset used for the push constant
-    command.
-  * pname:pushconstantSize is the size used for the push constant command.
-  * pname:indirectStateFlags are the active states for the state flag
-    command.
-  * pname:indexTypeCount is the optional size of the pname:pIndexTypes and
-    pname:pIndexTypeValues array pairings.
-    If not zero, it allows to register a custom `uint32_t` value to be
-    treated as specific ename:VkIndexType.
-  * pname:pIndexTypes is the used ename:VkIndexType for the corresponding
-    `uint32_t` value entry in pname:pIndexTypeValues.
-
-.Valid Usage
-****
-  * [[VUID-VkIndirectCommandsLayoutTokenNV-stream-02951]]
-    pname:stream must: be smaller than
-    sname:VkIndirectCommandsLayoutCreateInfoNV::pname:streamCount
-  * [[VUID-VkIndirectCommandsLayoutTokenNV-offset-02952]]
-    pname:offset must: be less than or equal to
-    sname:VkPhysicalDeviceDeviceGeneratedCommandsPropertiesNV::pname:maxIndirectCommandsTokenOffset
-  * [[VUID-VkIndirectCommandsLayoutTokenNV-tokenType-02976]]
-    If pname:tokenType is
-    ename:VK_INDIRECT_COMMANDS_TOKEN_TYPE_VERTEX_BUFFER_NV,
-    pname:vertexBindingUnit must: stay within device supported limits for
-    the appropriate commands
-  * [[VUID-VkIndirectCommandsLayoutTokenNV-tokenType-02977]]
-    If pname:tokenType is
-    ename:VK_INDIRECT_COMMANDS_TOKEN_TYPE_PUSH_CONSTANT_NV,
-    pname:pushconstantPipelineLayout must: be valid
-  * [[VUID-VkIndirectCommandsLayoutTokenNV-tokenType-02978]]
-    If pname:tokenType is
-    ename:VK_INDIRECT_COMMANDS_TOKEN_TYPE_PUSH_CONSTANT_NV,
-    pname:pushconstantOffset must: be a multiple of `4`
-  * [[VUID-VkIndirectCommandsLayoutTokenNV-tokenType-02979]]
-    If pname:tokenType is
-    ename:VK_INDIRECT_COMMANDS_TOKEN_TYPE_PUSH_CONSTANT_NV,
-    pname:pushconstantSize must: be a multiple of `4`
-  * [[VUID-VkIndirectCommandsLayoutTokenNV-tokenType-02980]]
-    If pname:tokenType is
-    ename:VK_INDIRECT_COMMANDS_TOKEN_TYPE_PUSH_CONSTANT_NV,
-    pname:pushconstantOffset must: be less than
-    sname:VkPhysicalDeviceLimits::pname:maxPushConstantsSize
-  * [[VUID-VkIndirectCommandsLayoutTokenNV-tokenType-02981]]
-    If pname:tokenType is
-    ename:VK_INDIRECT_COMMANDS_TOKEN_TYPE_PUSH_CONSTANT_NV,
-    pname:pushconstantSize must: be less than or equal to
-    sname:VkPhysicalDeviceLimits::pname:maxPushConstantsSize minus
-    pname:pushconstantOffset
-  * [[VUID-VkIndirectCommandsLayoutTokenNV-tokenType-02982]]
-    If pname:tokenType is
-    ename:VK_INDIRECT_COMMANDS_TOKEN_TYPE_PUSH_CONSTANT_NV, for each byte in
-    the range specified by pname:pushconstantOffset and
-    pname:pushconstantSize and for each shader stage in
-    pname:pushconstantShaderStageFlags, there must: be a push constant range
-    in pname:pushconstantPipelineLayout that includes that byte and that
-    stage
-  * [[VUID-VkIndirectCommandsLayoutTokenNV-tokenType-02983]]
-    If pname:tokenType is
-    ename:VK_INDIRECT_COMMANDS_TOKEN_TYPE_PUSH_CONSTANT_NV, for each byte in
-    the range specified by pname:pushconstantOffset and
-    pname:pushconstantSize and for each push constant range that overlaps
-    that byte, pname:pushconstantShaderStageFlags must: include all stages
-    in that push constant range's
-    slink:VkPushConstantRange::pname:stageFlags
-  * [[VUID-VkIndirectCommandsLayoutTokenNV-tokenType-02984]]
-    If pname:tokenType is
-    ename:VK_INDIRECT_COMMANDS_TOKEN_TYPE_STATE_FLAGS_NV,
-    pname:indirectStateFlags must: not be `0`
-****
-
-include::{generated}/validity/structs/VkIndirectCommandsLayoutTokenNV.txt[]
---
-
-The following code provides detailed information on how an individual
-sequence is processed.
-For valid usage, all restrictions from the regular commands apply.
-
-[source,c]
----------------------------------------------------
-void cmdProcessSequence(cmd, pipeline, indirectCommandsLayout, pIndirectCommandsStreams, s)
-{
-  for (uint32_t t = 0; t < indirectCommandsLayout.tokenCount; t++){
-    token = indirectCommandsLayout.pTokens[t];
-
-    uint32_t stride   = indirectCommandsLayout.pStreamStrides[token.stream];
-    stream            = pIndirectCommandsStreams[token.stream];
-    uint32_t offset   = stream.offset + stride * s + token.offset;
-    const void* input = stream.buffer.pointer( offset )
-
-    switch(input.type){
-    VK_INDIRECT_COMMANDS_TOKEN_TYPE_SHADER_GROUP_NV:
-      VkBindShaderGroupIndirectCommandNV* bind = input;
-
-      vkCmdBindPipelineShaderGroupNV(cmd, indirectCommandsLayout.pipelineBindPoint,
-        pipeline, bind->groupIndex);
-    break;
-
-    VK_INDIRECT_COMMANDS_TOKEN_TYPE_STATE_FLAGS_NV:
-      VkSetStateFlagsIndirectCommandNV* state = input;
-
-      if (token.indirectStateFlags & VK_INDIRECT_STATE_FLAG_FRONTFACE_BIT_NV){
-        if (state.data & (1 << 0)){
-          set VK_FRONT_FACE_CLOCKWISE;
-        } else {
-          set VK_FRONT_FACE_COUNTER_CLOCKWISE;
-        }
-      }
-    break;
-
-    VK_INDIRECT_COMMANDS_TOKEN_TYPE_PUSH_CONSTANT_NV:
-      uint32_t* data = input;
-
-      vkCmdPushConstants(cmd,
-        token.pushconstantPipelineLayout
-        token.pushconstantStageFlags,
-        token.pushconstantOffset,
-        token.pushconstantSize, data);
-    break;
-
-    VK_INDIRECT_COMMANDS_TOKEN_TYPE_INDEX_BUFFER_NV:
-      VkBindIndexBufferIndirectCommandNV* data = input;
-
-      // the indexType may optionally be remapped
-      // from a custom uint32_t value, via
-      // VkIndirectCommandsLayoutTokenNV::pIndexTypeValues
-
-      vkCmdBindIndexBuffer(cmd,
-        deriveBuffer(data->bufferAddress),
-        deriveOffset(data->bufferAddress),
-        data->indexType);
-    break;
-
-    VK_INDIRECT_COMMANDS_TOKEN_TYPE_VERTEX_BUFFER_NV:
-      VkBindVertexBufferIndirectCommandNV* data = input;
-
-      // if token.vertexDynamicStride is VK_TRUE
-      // then the stride for this binding is set
-      // using data->stride as well
-
-      vkCmdBindVertexBuffers(cmd,
-        token.vertexBindingUnit, 1,
-        &deriveBuffer(data->bufferAddress),
-        &deriveOffset(data->bufferAddress));
-    break;
-
-    VK_INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_INDEXED_NV:
-      vkCmdDrawIndexedIndirect(cmd,
-        stream.buffer, offset, 1, 0);
-    break;
-
-    VK_INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_NV:
-      vkCmdDrawIndirect(cmd,
-        stream.buffer,
-        offset, 1, 0);
-    break;
-
-    // only available if VK_NV_mesh_shader is supported
-    VK_INDIRECT_COMMANDS_TOKEN_TYPE_DISPATCH_NV:
-      vkCmdDrawMeshTasksIndirectNV(cmd,
-        stream.buffer, offset, 1, 0);
-    break;
-    }
-  }
-}
----------------------------------------------------
diff --git a/registry/vulkan/chapters/VK_NV_external_memory/allocate_memory.txt b/registry/vulkan/chapters/VK_NV_external_memory/allocate_memory.txt
deleted file mode 100644
index 317fa5a..0000000
--- a/registry/vulkan/chapters/VK_NV_external_memory/allocate_memory.txt
+++ /dev/null
@@ -1,27 +0,0 @@
-// Copyright (c) 2018-2020 NVIDIA Corporation
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-When allocating memory that may: be exported to another process or Vulkan
-instance, add a slink:VkExportMemoryAllocateInfoNV structure to the
-pname:pNext chain of the slink:VkMemoryAllocateInfo structure, specifying
-the handle types that may: be exported.
-
-[open,refpage='VkExportMemoryAllocateInfoNV',desc='Specify memory handle types that may be exported',type='structs']
---
-The slink:VkExportMemoryAllocateInfoNV structure is defined as:
-
-include::{generated}/api/structs/VkExportMemoryAllocateInfoNV.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:handleTypes is a bitmask of
-    elink:VkExternalMemoryHandleTypeFlagBitsNV specifying one or more memory
-    handle types that may: be exported.
-    Multiple handle types may: be requested for the same allocation as long
-    as they are compatible, as reported by
-    flink:vkGetPhysicalDeviceExternalImageFormatPropertiesNV.
-
-include::{generated}/validity/structs/VkExportMemoryAllocateInfoNV.txt[]
---
diff --git a/registry/vulkan/chapters/VK_NV_external_memory_capabilities/external_image_format.txt b/registry/vulkan/chapters/VK_NV_external_memory_capabilities/external_image_format.txt
deleted file mode 100644
index 156187e..0000000
--- a/registry/vulkan/chapters/VK_NV_external_memory_capabilities/external_image_format.txt
+++ /dev/null
@@ -1,96 +0,0 @@
-// Copyright (c) 2018-2020 NVIDIA Corporation
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-[open,refpage='vkGetPhysicalDeviceExternalImageFormatPropertiesNV',desc='Determine image capabilities compatible with external memory handle types',type='protos']
---
-To determine the image capabilities compatible with an external memory
-handle type, call:
-
-include::{generated}/api/protos/vkGetPhysicalDeviceExternalImageFormatPropertiesNV.txt[]
-
-  * pname:physicalDevice is the physical device from which to query the
-    image capabilities
-  * pname:format is the image format, corresponding to
-    slink:VkImageCreateInfo::pname:format.
-  * pname:type is the image type, corresponding to
-    slink:VkImageCreateInfo::pname:imageType.
-  * pname:tiling is the image tiling, corresponding to
-    slink:VkImageCreateInfo::pname:tiling.
-  * pname:usage is the intended usage of the image, corresponding to
-    slink:VkImageCreateInfo::pname:usage.
-  * pname:flags is a bitmask describing additional parameters of the image,
-    corresponding to slink:VkImageCreateInfo::pname:flags.
-  * pname:externalHandleType is either one of the bits from
-    elink:VkExternalMemoryHandleTypeFlagBitsNV, or 0.
-  * pname:pExternalImageFormatProperties is a pointer to a
-    slink:VkExternalImageFormatPropertiesNV structure in which capabilities
-    are returned.
-
-If pname:externalHandleType is 0,
-pname:pExternalImageFormatProperties->imageFormatProperties will return the
-same values as a call to flink:vkGetPhysicalDeviceImageFormatProperties, and
-the other members of pname:pExternalImageFormatProperties will all be 0.
-Otherwise, they are filled in as described for
-slink:VkExternalImageFormatPropertiesNV.
-
-include::{generated}/validity/protos/vkGetPhysicalDeviceExternalImageFormatPropertiesNV.txt[]
---
-
-[open,refpage='VkExternalImageFormatPropertiesNV',desc='Structure specifying external image format properties',type='structs']
---
-The sname:VkExternalImageFormatPropertiesNV structure is defined as:
-
-include::{generated}/api/structs/VkExternalImageFormatPropertiesNV.txt[]
-
-  * pname:imageFormatProperties will be filled in as when calling
-    flink:vkGetPhysicalDeviceImageFormatProperties, but the values returned
-    may: vary depending on the external handle type requested.
-  * pname:externalMemoryFeatures is a bitmask of
-    elink:VkExternalMemoryFeatureFlagBitsNV, indicating properties of the
-    external memory handle type
-    (flink:vkGetPhysicalDeviceExternalImageFormatPropertiesNV::pname:externalHandleType)
-    being queried, or 0 if the external memory handle type is 0.
-  * pname:exportFromImportedHandleTypes is a bitmask of
-    elink:VkExternalMemoryHandleTypeFlagBitsNV containing a bit set for
-    every external handle type that may: be used to create memory from which
-    the handles of the type specified in
-    flink:vkGetPhysicalDeviceExternalImageFormatPropertiesNV::pname:externalHandleType
-    can: be exported, or 0 if the external memory handle type is 0.
-  * pname:compatibleHandleTypes is a bitmask of
-    elink:VkExternalMemoryHandleTypeFlagBitsNV containing a bit set for
-    every external handle type that may: be specified simultaneously with
-    the handle type specified by
-    flink:vkGetPhysicalDeviceExternalImageFormatPropertiesNV::pname:externalHandleType
-    when calling flink:vkAllocateMemory, or 0 if the external memory handle
-    type is 0.
-    pname:compatibleHandleTypes will always contain
-    flink:vkGetPhysicalDeviceExternalImageFormatPropertiesNV::pname:externalHandleType
-
-include::{generated}/validity/structs/VkExternalImageFormatPropertiesNV.txt[]
---
-
-[open,refpage='VkExternalMemoryFeatureFlagBitsNV',desc='Bitmask specifying external memory features',type='enums',xrefs='vkGetPhysicalDeviceExternalImageFormatPropertiesNV VkExternalImageFormatPropertiesNV']
---
-Bits which can: be set in
-slink:VkExternalImageFormatPropertiesNV::pname:externalMemoryFeatures,
-indicating properties of the external memory handle type, are:
-
-include::{generated}/api/enums/VkExternalMemoryFeatureFlagBitsNV.txt[]
-
-  * ename:VK_EXTERNAL_MEMORY_FEATURE_DEDICATED_ONLY_BIT_NV specifies that
-    external memory of the specified type must: be created as a dedicated
-    allocation when used in the manner specified.
-  * ename:VK_EXTERNAL_MEMORY_FEATURE_EXPORTABLE_BIT_NV specifies that the
-    implementation supports exporting handles of the specified type.
-  * ename:VK_EXTERNAL_MEMORY_FEATURE_IMPORTABLE_BIT_NV specifies that the
-    implementation supports importing handles of the specified type.
---
-
-[open,refpage='VkExternalMemoryFeatureFlagsNV',desc='Bitmask of VkExternalMemoryFeatureFlagBitsNV',type='flags']
---
-include::{generated}/api/flags/VkExternalMemoryFeatureFlagsNV.txt[]
-
-tname:VkExternalMemoryFeatureFlagsNV is a bitmask type for setting a mask of
-zero or more elink:VkExternalMemoryFeatureFlagBitsNV.
---
diff --git a/registry/vulkan/chapters/VK_NV_external_memory_win32/get_handle_win32.txt b/registry/vulkan/chapters/VK_NV_external_memory_win32/get_handle_win32.txt
deleted file mode 100644
index 8871f5c..0000000
--- a/registry/vulkan/chapters/VK_NV_external_memory_win32/get_handle_win32.txt
+++ /dev/null
@@ -1,31 +0,0 @@
-// Copyright (c) 2018-2020 NVIDIA Corporation
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-[open,refpage='vkGetMemoryWin32HandleNV',desc='Retrieve Win32 handle to a device memory object',type='protos']
---
-To retrieve the handle corresponding to a device memory object created with
-slink:VkExportMemoryAllocateInfoNV::pname:handleTypes set to include
-ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_BIT_NV or
-ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT_NV, call:
-
-include::{generated}/api/protos/vkGetMemoryWin32HandleNV.txt[]
-
-  * pname:device is the logical device that owns the memory.
-  * pname:memory is the slink:VkDeviceMemory object.
-  * pname:handleType is a bitmask of
-    elink:VkExternalMemoryHandleTypeFlagBitsNV containing a single bit
-    specifying the type of handle requested.
-  * pname:handle is a pointer to a Windows code:HANDLE in which the handle
-    is returned.
-
-.Valid Usage
-****
-  * [[VUID-vkGetMemoryWin32HandleNV-handleType-01326]]
-    pname:handleType must: be a flag specified in
-    slink:VkExportMemoryAllocateInfoNV::pname:handleTypes when allocating
-    pname:memory
-****
-
-include::{generated}/validity/protos/vkGetMemoryWin32HandleNV.txt[]
---
diff --git a/registry/vulkan/chapters/VK_NV_external_memory_win32/handle_permissions.txt b/registry/vulkan/chapters/VK_NV_external_memory_win32/handle_permissions.txt
deleted file mode 100644
index 3eed85c..0000000
--- a/registry/vulkan/chapters/VK_NV_external_memory_win32/handle_permissions.txt
+++ /dev/null
@@ -1,36 +0,0 @@
-// Copyright (c) 2018-2020 NVIDIA Corporation
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-[open,refpage='VkExportMemoryWin32HandleInfoNV',desc='Specify security attributes and access rights for Win32 memory handles',type='structs']
---
-When slink:VkExportMemoryAllocateInfoNV::pname:handleTypes includes
-ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_BIT_NV, add a
-sname:VkExportMemoryWin32HandleInfoNV structure to the pname:pNext chain of
-the slink:VkExportMemoryAllocateInfoNV structure to specify security
-attributes and access rights for the memory object's external handle.
-
-The sname:VkExportMemoryWin32HandleInfoNV structure is defined as:
-
-include::{generated}/api/structs/VkExportMemoryWin32HandleInfoNV.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:pAttributes is a pointer to a Windows code:SECURITY_ATTRIBUTES
-    structure specifying security attributes of the handle.
-  * pname:dwAccess is a code:DWORD specifying access rights of the handle.
-
-If this structure is not present, or if pname:pAttributes is set to `NULL`,
-default security descriptor values will be used, and child processes created
-by the application will not inherit the handle, as described in the MSDN
-documentation for "`Synchronization Object Security and Access Rights`"^1^.
-Further, if the structure is not present, the access rights will be
-
-code:DXGI_SHARED_RESOURCE_READ | code:DXGI_SHARED_RESOURCE_WRITE
-
-1::
-    https://docs.microsoft.com/en-us/windows/win32/sync/synchronization-object-security-and-access-rights
-
-include::{generated}/validity/structs/VkExportMemoryWin32HandleInfoNV.txt[]
---
diff --git a/registry/vulkan/chapters/VK_NV_external_memory_win32/import_memory_win32.txt b/registry/vulkan/chapters/VK_NV_external_memory_win32/import_memory_win32.txt
deleted file mode 100644
index 679081f..0000000
--- a/registry/vulkan/chapters/VK_NV_external_memory_win32/import_memory_win32.txt
+++ /dev/null
@@ -1,77 +0,0 @@
-// Copyright (c) 2018-2020 NVIDIA Corporation
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-[open,refpage='VkImportMemoryWin32HandleInfoNV',desc='Import Win32 memory created on the same physical device',type='structs']
---
-To import memory created on the same physical device but outside of the
-current Vulkan instance, add a slink:VkImportMemoryWin32HandleInfoNV
-structure to the pname:pNext chain of the slink:VkMemoryAllocateInfo
-structure, specifying a handle to and the type of the memory.
-
-The sname:VkImportMemoryWin32HandleInfoNV structure is defined as:
-
-include::{generated}/api/structs/VkImportMemoryWin32HandleInfoNV.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:handleType is `0` or a elink:VkExternalMemoryHandleTypeFlagBitsNV
-    value specifying the type of memory handle in pname:handle.
-  * pname:handle is a Windows code:HANDLE referring to the memory.
-
-If pname:handleType is `0`, this structure is ignored by consumers of the
-slink:VkMemoryAllocateInfo structure it is chained from.
-
-.Valid Usage
-****
-  * [[VUID-VkImportMemoryWin32HandleInfoNV-handleType-01327]]
-    pname:handleType must: not have more than one bit set
-  * [[VUID-VkImportMemoryWin32HandleInfoNV-handle-01328]]
-    pname:handle must: be a valid handle to memory, obtained as specified by
-    pname:handleType
-****
-
-include::{generated}/validity/structs/VkImportMemoryWin32HandleInfoNV.txt[]
---
-Bits which can: be set in pname:handleType are:
-
-[open,refpage='VkExternalMemoryHandleTypeFlagBitsNV',desc='Bitmask specifying external memory handle types',type='enums']
---
-Possible values of slink:VkImportMemoryWin32HandleInfoNV::pname:handleType,
-specifying the type of an external memory handle, are:
-
-include::{generated}/api/enums/VkExternalMemoryHandleTypeFlagBitsNV.txt[]
-
-  * ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT_NV specifies a
-    handle to memory returned by flink:vkGetMemoryWin32HandleNV.
-  * ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_BIT_NV specifies a
-    handle to memory returned by flink:vkGetMemoryWin32HandleNV, or one
-    duplicated from such a handle using `DuplicateHandle()`.
-  * ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_IMAGE_BIT_NV specifies a
-    valid NT handle to memory returned by
-    `IDXGIResource1::CreateSharedHandle`, or a handle duplicated from such a
-    handle using `DuplicateHandle()`.
-  * ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_IMAGE_KMT_BIT_NV specifies a
-    handle to memory returned by `IDXGIResource::GetSharedHandle()`.
-
-ifdef::editing-notes[]
-[NOTE]
-.editing-note
-====
-(Jon) If additional (non-Win32) bits are added to the possible memory types,
-this type should move to the `apiext:VK_NV_external_memory_capabilities`
-section, and each bit would then be protected by ifdefs for the extension it
-is defined by.
-====
-endif::editing-notes[]
---
-
-[open,refpage='VkExternalMemoryHandleTypeFlagsNV',desc='Bitmask of VkExternalMemoryHandleTypeFlagBitsNV',type='flags']
---
-include::{generated}/api/flags/VkExternalMemoryHandleTypeFlagsNV.txt[]
-
-tname:VkExternalMemoryHandleTypeFlagsNV is a bitmask type for setting a mask
-of zero or more elink:VkExternalMemoryHandleTypeFlagBitsNV.
---
-
diff --git a/registry/vulkan/chapters/VK_NV_mesh_shader/drawing.txt b/registry/vulkan/chapters/VK_NV_mesh_shader/drawing.txt
deleted file mode 100644
index 857638d..0000000
--- a/registry/vulkan/chapters/VK_NV_mesh_shader/drawing.txt
+++ /dev/null
@@ -1,173 +0,0 @@
-// Copyright (c) 2018-2020 NVIDIA Corporation
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-[[drawing-mesh-shading]]
-== Programmable Mesh Shading
-
-In this drawing approach, primitives are assembled by the mesh shader stage.
-<<mesh, Mesh shading>> operates similarly to <<dispatch, dispatching
-compute>> as the shaders make use of workgroups.
-
-
-[open,refpage='vkCmdDrawMeshTasksNV',desc='Draw mesh task work items',type='protos']
---
-:refpage: vkCmdDrawMeshTasksNV
-
-To record a draw that uses the mesh pipeline, call:
-
-include::{generated}/api/protos/vkCmdDrawMeshTasksNV.txt[]
-
-  * pname:commandBuffer is the command buffer into which the command will be
-    recorded.
-  * pname:taskCount is the number of local workgroups to dispatch in the X
-    dimension.
-    Y and Z dimension are implicitly set to one.
-  * pname:firstTask is the X component of the first workgroup ID.
-
-When the command is executed, a global workgroup consisting of
-pname:taskCount local workgroups is assembled.
-
-.Valid Usage
-****
-include::{chapters}/commonvalidity/draw_common.txt[]
-  * [[VUID-vkCmdDrawMeshTasksNV-taskCount-02119]]
-    pname:taskCount must: be less than or equal to
-    sname:VkPhysicalDeviceMeshShaderPropertiesNV::pname:maxDrawMeshTasksCount
-****
-
-include::{generated}/validity/protos/vkCmdDrawMeshTasksNV.txt[]
---
-
-[open,refpage='vkCmdDrawMeshTasksIndirectNV',desc='Issue an indirect mesh tasks draw into a command buffer',type='protos']
---
-:refpage: vkCmdDrawMeshTasksIndirectNV
-
-To record an indirect mesh tasks draw, call:
-
-include::{generated}/api/protos/vkCmdDrawMeshTasksIndirectNV.txt[]
-
-  * pname:commandBuffer is the command buffer into which the command is
-    recorded.
-  * pname:buffer is the buffer containing draw parameters.
-  * pname:offset is the byte offset into pname:buffer where parameters
-    begin.
-  * pname:drawCount is the number of draws to execute, and can: be zero.
-  * pname:stride is the byte stride between successive sets of draw
-    parameters.
-
-fname:vkCmdDrawMeshTasksIndirectNV behaves similarly to
-flink:vkCmdDrawMeshTasksNV except that the parameters are read by the device
-from a buffer during execution.
-pname:drawCount draws are executed by the command, with parameters taken
-from pname:buffer starting at pname:offset and increasing by pname:stride
-bytes for each successive draw.
-The parameters of each draw are encoded in an array of
-slink:VkDrawMeshTasksIndirectCommandNV structures.
-If pname:drawCount is less than or equal to one, pname:stride is ignored.
-
-.Valid Usage
-****
-include::{chapters}/commonvalidity/draw_common.txt[]
-include::{chapters}/commonvalidity/draw_dispatch_indirect_common.txt[]
-include::{chapters}/commonvalidity/draw_indirect_drawcount.txt[]
-  * [[VUID-vkCmdDrawMeshTasksIndirectNV-drawCount-02146]]
-    If pname:drawCount is greater than `1`, pname:stride must: be a multiple
-    of `4` and must: be greater than or equal to
-    code:sizeof(sname:VkDrawMeshTasksIndirectCommandNV)
-  * [[VUID-vkCmdDrawMeshTasksIndirectNV-drawCount-02156]]
-    If pname:drawCount is equal to `1`, [eq]#(pname:offset {plus}
-    code:sizeof(slink:VkDrawMeshTasksIndirectCommandNV))# must: be less than
-    or equal to the size of pname:buffer
-  * [[VUID-vkCmdDrawMeshTasksIndirectNV-drawCount-02157]]
-    If pname:drawCount is greater than `1`, [eq]#(pname:stride {times}
-    (pname:drawCount - 1) {plus} pname:offset {plus}
-    code:sizeof(slink:VkDrawMeshTasksIndirectCommandNV))# must: be less than
-    or equal to the size of pname:buffer
-****
-
-include::{generated}/validity/protos/vkCmdDrawMeshTasksIndirectNV.txt[]
---
-
-[open,refpage='VkDrawMeshTasksIndirectCommandNV',desc='Structure specifying a mesh tasks draw indirect command',type='structs',xrefs='vkCmdDrawMeshTasksIndirectNV']
---
-The sname:VkDrawMeshTasksIndirectCommandNV structure is defined as:
-
-include::{generated}/api/structs/VkDrawMeshTasksIndirectCommandNV.txt[]
-
-  * pname:taskCount is the number of local workgroups to dispatch in the X
-    dimension.
-    Y and Z dimension are implicitly set to one.
-  * pname:firstTask is the X component of the first workgroup ID.
-
-The members of sname:VkDrawMeshTasksIndirectCommandNV have the same meaning
-as the similarly named parameters of flink:vkCmdDrawMeshTasksNV.
-
-.Valid Usage
-****
-  * [[VUID-VkDrawMeshTasksIndirectCommandNV-taskCount-02175]]
-    pname:taskCount must: be less than or equal to
-    sname:VkPhysicalDeviceMeshShaderPropertiesNV::pname:maxDrawMeshTasksCount
-****
-
-include::{generated}/validity/structs/VkDrawMeshTasksIndirectCommandNV.txt[]
---
-
-[open,refpage='vkCmdDrawMeshTasksIndirectCountNV',desc='Perform an indirect mesh tasks draw with the draw count sourced from a buffer',type='protos']
---
-:refpage: vkCmdDrawMeshTasksIndirectCountNV
-
-To record an indirect mesh tasks draw with the draw count sourced from a
-buffer, call:
-
-include::{generated}/api/protos/vkCmdDrawMeshTasksIndirectCountNV.txt[]
-
-  * pname:commandBuffer is the command buffer into which the command is
-    recorded.
-  * pname:buffer is the buffer containing draw parameters.
-  * pname:offset is the byte offset into pname:buffer where parameters
-    begin.
-  * pname:countBuffer is the buffer containing the draw count.
-  * pname:countBufferOffset is the byte offset into pname:countBuffer where
-    the draw count begins.
-  * pname:maxDrawCount specifies the maximum number of draws that will be
-    executed.
-    The actual number of executed draw calls is the minimum of the count
-    specified in pname:countBuffer and pname:maxDrawCount.
-  * pname:stride is the byte stride between successive sets of draw
-    parameters.
-
-fname:vkCmdDrawMeshTasksIndirectCountNV behaves similarly to
-flink:vkCmdDrawMeshTasksIndirectNV except that the draw count is read by the
-device from a buffer during execution.
-The command will read an unsigned 32-bit integer from pname:countBuffer
-located at pname:countBufferOffset and use this as the draw count.
-
-.Valid Usage
-****
-include::{chapters}/commonvalidity/draw_common.txt[]
-include::{chapters}/commonvalidity/draw_dispatch_indirect_common.txt[]
-include::{chapters}/commonvalidity/draw_indirect_count_common.txt[]
-  * [[VUID-vkCmdDrawMeshTasksIndirectCountNV-stride-02182]]
-    pname:stride must: be a multiple of `4` and must: be greater than or
-    equal to code:sizeof(sname:VkDrawMeshTasksIndirectCommandNV)
-  * [[VUID-vkCmdDrawMeshTasksIndirectCountNV-maxDrawCount-02183]]
-    If pname:maxDrawCount is greater than or equal to `1`,
-    [eq]#(pname:stride {times} (pname:maxDrawCount - 1) {plus} pname:offset
-    {plus} code:sizeof(sname:VkDrawMeshTasksIndirectCommandNV))# must: be
-    less than or equal to the size of pname:buffer
-  * [[VUID-vkCmdDrawMeshTasksIndirectCountNV-countBuffer-02191]]
-    If the count stored in pname:countBuffer is equal to `1`,
-    [eq]#(pname:offset {plus}
-    code:sizeof(sname:VkDrawMeshTasksIndirectCommandNV))# must: be less than
-    or equal to the size of pname:buffer
-  * [[VUID-vkCmdDrawMeshTasksIndirectCountNV-countBuffer-02192]]
-    If the count stored in pname:countBuffer is greater than `1`,
-    [eq]#(pname:stride {times} (pname:drawCount - 1) {plus} pname:offset
-    {plus} code:sizeof(sname:VkDrawMeshTasksIndirectCommandNV))# must: be
-    less than or equal to the size of pname:buffer
-****
-
-include::{generated}/validity/protos/vkCmdDrawMeshTasksIndirectCountNV.txt[]
-
---
diff --git a/registry/vulkan/chapters/VK_NV_mesh_shader/mesh.txt b/registry/vulkan/chapters/VK_NV_mesh_shader/mesh.txt
deleted file mode 100644
index 4a2cf8c..0000000
--- a/registry/vulkan/chapters/VK_NV_mesh_shader/mesh.txt
+++ /dev/null
@@ -1,132 +0,0 @@
-// Copyright (c) 2018-2020 NVIDIA Corporation
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-[[mesh]]
-= Mesh Shading
-
-<<shaders-task,Task>> and <<shaders-mesh,mesh shaders>> operate in
-workgroups to produce a collection of primitives that will be processed by
-subsequent stages of the graphics pipeline.
-
-Work on the mesh pipeline is initiated by the application
-<<drawing-mesh-shading,drawing>> a set of mesh tasks organized in global
-workgroups.
-If the optional task shader is active, each workgroup triggers the execution
-of task shader invocations that will create a new set of mesh workgroups
-upon completion.
-Each of these created workgroups, or each of the original workgroups if no
-task shader is present, triggers the execution of mesh shader invocations.
-
-Each mesh shader workgroup emits zero or more output primitives along with
-the group of vertices and their associated data required for each output
-primitive.
-
-
-[[mesh-task-input]]
-== Task Shader Input
-For every workgroup issued via the drawing commands a group of task shader
-invocations is executed.
-There are no inputs other than the builtin workgroup identifiers.
-
-
-[[mesh-task-output]]
-== Task Shader Output
-The task shader can emit zero or more mesh workgroups to be generated using
-the <<interfaces-builtin-variables,built-in variable>> code:TaskCountNV.
-This value must: be less than or equal to
-sname:VkPhysicalDeviceMeshShaderPropertiesNV::pname:maxTaskOutputCount.
-
-It can also output user-defined data that is passed as input to all mesh
-shader invocations that the task creates.
-These outputs are decorated as code:PerTaskNV.
-
-
-[[mesh-generation]]
-== Mesh Generation
-If a task shader exists, the mesh assembler creates a variable amount of
-mesh workgroups depending on each task's output.
-If there is no task shader, the drawing commands emit the mesh shader
-invocations directly.
-
-
-[[mesh-input]]
-== Mesh Shader Input
-The only inputs available to the mesh shader are variables identifying the
-specific workgroup and invocation and, if applicable, any outputs written as
-code:PerTaskNV by the task shader that spawned the mesh shader's workgroup.
-The mesh shader can operate without a task shader as well.
-
-
-[[mesh-output]]
-== Mesh Shader Output Primitives
-
-A mesh shader generates primitives in one of three output modes: points,
-lines, or triangles.
-The primitive mode is specified in the shader using an code:OpExecutionMode
-instruction with the code:OutputPoints, code:OutputLinesNV, or
-code:OutputTrianglesNV modes, respectively.
-Each mesh shader must: include exactly one output primitive mode.
-
-The maximum output vertex count is specified as a literal in the shader
-using an code:OpExecutionMode instruction with the mode set to
-code:OutputVertices and must: be less than or equal to
-sname:VkPhysicalDeviceMeshShaderPropertiesNV::pname:maxMeshOutputVertices.
-
-The maximum output primitive count is specified as a literal in the shader
-using an code:OpExecutionMode instruction with the mode set to
-code:OutputPrimitivesNV and must: be less than or equal to
-sname:VkPhysicalDeviceMeshShaderPropertiesNV::pname:maxMeshOutputPrimitives.
-
-The number of primitives output by the mesh shader is provided via writing
-to the <<interfaces-builtin-variables,built-in variable>>
-code:PrimitiveCountNV and must: be less than or equal to the maximum output
-primitive count specified in the shader.
-A variable decorated with code:PrimitiveIndicesNV is an output array of
-local index values into the vertex output arrays from which primitives are
-assembled according to the output primitive type.
-These resulting primitives are then further processed as described in
-<<primsrast>>.
-
-
-[[mesh-output-perview]]
-== Mesh Shader Per-View Outputs
-
-The mesh shader outputs decorated with the code:PositionPerViewNV,
-code:ClipDistancePerViewNV, code:CullDistancePerViewNV, code:LayerPerViewNV,
-and code:ViewportMaskPerViewNV built-in decorations are the per-view
-versions of the single-view variables with equivalent names (that is
-code:Position, code:ClipDistance, code:CullDistance, code:Layer, and
-code:ViewportMaskNV, respectively).
-If a shader statically assigns a value to any element of a per-view array it
-must: not statically assign a value to the equivalent single-view variable.
-
-Each of these outputs is considered arrayed, with separate values for each
-view.
-The view number is used to index the first dimension of these arrays.
-
-The second dimension of the code:ClipDistancePerViewNV, and
-code:CullDistancePerViewNV arrays have the same requirements as the
-code:ClipDistance, and code:CullDistance arrays.
-
-If a mesh shader output is _per-view_, the corresponding fragment shader
-input is taken from the element of the per-view output array that
-corresponds to the view that is currently being processed by the fragment
-shader.
-
-
-[[mesh-ordering]]
-== Mesh Shader Primitive Ordering
-
-Following guarantees are provided for the relative ordering of primitives
-produced by a mesh shader, as they pertain to <<drawing-primitive-order,
-primitive order>>.
-
-  * When a task shader is used, mesh workgroups spawned from lower tasks
-    will be ordered prior those workgroups from subsequent tasks.
-  * All output primitives generated from a given mesh workgroup are passed
-    to subsequent pipeline stages before any output primitives generated
-    from subsequent input workgroups.
-  * All output primitives within a mesh workgroup, will be generated in the
-    ordering provided by the builtin primitive indexbuffer (from low address
-    to high address).
diff --git a/registry/vulkan/chapters/VK_NV_win32_keyed_mutex/keyed_mutex_submit.txt b/registry/vulkan/chapters/VK_NV_win32_keyed_mutex/keyed_mutex_submit.txt
deleted file mode 100644
index 2b74ba3..0000000
--- a/registry/vulkan/chapters/VK_NV_win32_keyed_mutex/keyed_mutex_submit.txt
+++ /dev/null
@@ -1,44 +0,0 @@
-// Copyright (c) 2018-2020 NVIDIA Corporation
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-[open,refpage='VkWin32KeyedMutexAcquireReleaseInfoNV',desc='Use Windows keyex mutex mechanism to synchronize work',type='structs']
---
-When submitting work that operates on memory imported from a Direct3D 11
-resource to a queue, the keyed mutex mechanism may: be used in addition to
-Vulkan semaphores to synchronize the work.
-Keyed mutexes are a property of a properly created shareable Direct3D 11
-resource.
-They can: only be used if the imported resource was created with the
-etext:D3D11_RESOURCE_MISC_SHARED_KEYEDMUTEX flag.
-
-To acquire keyed mutexes before submitted work and/or release them after,
-add a slink:VkWin32KeyedMutexAcquireReleaseInfoNV structure to the
-pname:pNext chain of the slink:VkSubmitInfo structure.
-
-The sname:VkWin32KeyedMutexAcquireReleaseInfoNV structure is defined as:
-
-include::{generated}/api/structs/VkWin32KeyedMutexAcquireReleaseInfoNV.txt[]
-
-  * pname:acquireCount is the number of entries in the pname:pAcquireSyncs,
-    pname:pAcquireKeys, and pname:pAcquireTimeoutMilliseconds arrays.
-  * pname:pAcquireSyncs is a pointer to an array of slink:VkDeviceMemory
-    objects which were imported from Direct3D 11 resources.
-  * pname:pAcquireKeys is a pointer to an array of mutex key values to wait
-    for prior to beginning the submitted work.
-    Entries refer to the keyed mutex associated with the corresponding
-    entries in pname:pAcquireSyncs.
-  * pname:pAcquireTimeoutMilliseconds is a pointer to an array of timeout
-    values, in millisecond units, for each acquire specified in
-    pname:pAcquireKeys.
-  * pname:releaseCount is the number of entries in the pname:pReleaseSyncs
-    and pname:pReleaseKeys arrays.
-  * pname:pReleaseSyncs is a pointer to an array of slink:VkDeviceMemory
-    objects which were imported from Direct3D 11 resources.
-  * pname:pReleaseKeys is a pointer to an array of mutex key values to set
-    when the submitted work has completed.
-    Entries refer to the keyed mutex associated with the corresponding
-    entries in pname:pReleaseSyncs.
-
-include::{generated}/validity/structs/VkWin32KeyedMutexAcquireReleaseInfoNV.txt[]
---
diff --git a/registry/vulkan/chapters/VK_QCOM_rotated_copies/rotated_addressing_blits.txt b/registry/vulkan/chapters/VK_QCOM_rotated_copies/rotated_addressing_blits.txt
deleted file mode 100644
index fbccc49..0000000
--- a/registry/vulkan/chapters/VK_QCOM_rotated_copies/rotated_addressing_blits.txt
+++ /dev/null
@@ -1,90 +0,0 @@
-// Copyright (c) 2020 Qualcomm Technologies Incorporated
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-[[copies-images-scaling-rotation]]
-=== Image Blits with Scaling and Rotation
-
-When slink:VkCopyCommandTransformInfoQCOM is in the pname:pNext chain of
-slink:VkImageBlit2KHR, the specified region is rotated during the blit.
-The following description of rotated addressing replaces the description in
-flink:vkCmdBlitImage.
-
-The following code computes rotation of normalized coordinates.
-
-[source,c]
----------------------------------------------------
-// rotation of normalized coordinates
-VkOffset2D RotateNormUV(VkOffset2D in, VkSurfaceTransformFlagBitsKHR flags)
-{
-    VkOffset2D output;
-    switch (flags)
-    {
-        case VK_SURFACE_TRANSFORM_IDENTITY_BIT_KHR:
-            out.x = in.x;
-            out.y = in.y;
-            break;
-        case VK_SURFACE_TRANSFORM_ROTATE_90_BIT_KHR:
-            out.x = in.y;
-            out.y = 1.0 - in.x;
-            break;
-        case VK_SURFACE_TRANSFORM_ROTATE_180_BIT_KHR:
-            out.x = 1.0 - in.x;
-            out.y = 1.0 - in.y;
-            break;
-        case VK_SURFACE_TRANSFORM_ROTATE_270_BIT_KHR:
-            out.x = 1.0 - in.y;
-            out.y = in.x;
-            break;
-    }
-    return out;
-}
-
----------------------------------------------------
-
-  * For each destination texel, the integer coordinate of that texel is
-    converted to an unnormalized texture coordinate, using the effective
-    inverse of the equations described in
-    <<textures-unnormalized-to-integer, unnormalized to integer
-    conversion>>:
-  {empty}:: [eq]#u~base~ = i {plus} {onehalf}#
-  {empty}:: [eq]#v~base~ = j {plus} {onehalf}#
-  {empty}:: [eq]#w~base~ = k {plus} {onehalf}#
-  * These base coordinates are then offset by the first destination offset:
-  {empty}:: [eq]#u~offset~ = u~base~ - x~dst0~#
-  {empty}:: [eq]#v~offset~ = v~base~ - y~dst0~#
-  {empty}:: [eq]#w~offset~ = w~base~ - z~dst0~#
-  {empty}:: [eq]#a~offset~ = a - pname:baseArrayCount~dst~#
-
-  * The UV destination coordinates are scaled by the destination region,
-    rotated, and scaled by the source region.
-  {empty}:: [eq]#u~dest_scaled~ = u~offset~ / (x~dst1~ - x~dst0~)#
-  {empty}:: [eq]#v~dest_scaled~ = v~offset~ / (y~dst1~ - y~dst0~)#
-  {empty}:: [eq]#(u~src_scaled~, v~src_scaled~) =
-            code:RotateNormUV(u~dest_scaled~, v~dest_scaled~,
-            pname:transform)#
-  {empty}:: [eq]#u~scaled~ = u~src_scaled~ * (x~Src1~ - x~Src0~)#
-  {empty}:: [eq]#v~scaled~ = v~src_scaled~ * (y~Src1~ - y~Src0~)#
-
-  * The W coordinate is unaffected by rotation.
-    The scale is determined from the ratio of source and destination
-    regions, and applied to the offset coordinate:
-  {empty}:: [eq]#scale~w~ = (z~Src1~ - z~Src0~) / (z~dst1~ - z~dst0~)#
-  {empty}:: [eq]#w~scaled~ = w~offset~ * scale~w~#
-
-
-  * Finally the source offset is added to the scaled source coordinates, to
-    determine the final unnormalized coordinates used to sample from
-    pname:srcImage:
-  {empty}:: [eq]#u = u~scaled~ {plus} x~Src0~#
-  {empty}:: [eq]#v = v~scaled~ {plus} y~Src0~#
-  {empty}:: [eq]#w = w~scaled~ {plus} z~Src0~#
-  {empty}:: [eq]#q = pname:mipLevel#
-  {empty}:: [eq]#a = a~offset~ {plus} pname:baseArrayCount~src~#
-
-These coordinates are used to sample from the source image as described for
-<<textures, Image Operations>>, with the filter mode equal to that of
-pname:filter; a mipmap mode of ename:VK_SAMPLER_MIPMAP_MODE_NEAREST; and an
-address mode of ename:VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE.
-Implementations must: clamp at the edge of the source image, and may:
-additionally clamp to the edge of the source region.
diff --git a/registry/vulkan/chapters/VK_QCOM_rotated_copies/rotated_addressing_copies.txt b/registry/vulkan/chapters/VK_QCOM_rotated_copies/rotated_addressing_copies.txt
deleted file mode 100644
index 7e13f21..0000000
--- a/registry/vulkan/chapters/VK_QCOM_rotated_copies/rotated_addressing_copies.txt
+++ /dev/null
@@ -1,89 +0,0 @@
-// Copyright (c) 2020 Qualcomm Technologies Incorporated
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-
-[[copies-buffers-images-rotation-addressing]]
-=== Buffer and Image Addressing with Rotation
-
-When slink:VkCopyCommandTransformInfoQCOM is in the pname:pNext chain of
-slink:VkBufferImageCopy2KHR, a _rotated copy_ is specified.
-For both flink:vkCmdCopyImageToBuffer2KHR and
-flink:vkCmdCopyBufferToImage2KHR, a rotation is applied to the region used
-for image accesses, but a non-rotated region is used for buffer accesses.
-In the case of rotated flink:vkCmdCopyImageToBuffer2KHR, the source image
-region is rotated.
-In the case of rotated flink:vkCmdCopyBufferToImage2KHR, the destination
-image region is rotated.
-
-For a _rotated copy_, the following description of rotated addressing
-replaces the description in <<copies-buffers-images-addressing,Buffer and
-Image Addressing>>.
-
-The following code computes rotation of unnormalized coordinates.
-[source,c]
----------------------------------------------------
-// Forward rotation of unnormalized coordinates
-VkOffset2D RotateUV(VkOffset2D in, VkSurfaceTransformFlagBitsKHR flags)
-{
-    VkOffset2D output;
-    switch (flags)
-    {
-        case VK_SURFACE_TRANSFORM_IDENTITY_BIT_KHR:
-            out.x = in.x;
-            out.y = in.y;
-            break;
-        case VK_SURFACE_TRANSFORM_ROTATE_90_BIT_KHR:
-            out.x = -in.y;
-            out.y = in.x;
-            break;
-        case VK_SURFACE_TRANSFORM_ROTATE_180_BIT_KHR:
-            out.x = -in.x;
-            out.y = -in.y;
-            break;
-        case VK_SURFACE_TRANSFORM_ROTATE_270_BIT_KHR:
-            out.x = in.y;
-            out.y = -in.x;
-            break;
-    }
-    return out;
-}
----------------------------------------------------
-
-Pseudocode for image/buffer addressing of uncompressed formats with rotation
-is:
-
-[source,c]
----------------------------------------------------
-rowLength = region->bufferRowLength;
-if (rowLength == 0)
-    rowLength = region->imageExtent.width;
-
-imageHeight = region->bufferImageHeight;
-if (imageHeight == 0)
-    imageHeight = region->imageExtent.height;
-
-texelBlockSize = <texel block size of the format of the src/dstImage>;
-
-// Buffer addressing is unaffected by rotation:
-address of (x,y,z) = region->bufferOffset + (((z * imageHeight) + y) * rowLength + x) * texelBlockSize;
-
-// When copying from buffer to image, the source buffer coordinates x,y,z range from (0,0,0) to
-// region->imageExtent.{width,height,depth}.  The source extent is rotated by the specified
-// VK_SURFACE_TRANSFORM, centered on the imageOffset, to define a rotated destination region.
-// For each source buffer texel with coordinates (x,y) the rotated destination image texel has
-// coordinates (x',y') defined as:
-(x',y')= RotateUV(x,y) + ImageOffset.{x,y}
-
-// When copying from image to buffer, the the destination buffer coordinates x,y,z range from (0,0,0) to
-// region->imageExtent.{width,height,depth}.  The destination extent is rotated by the specified
-//  VK_SURFACE_TRANSFORM, centered on the imageOffset, to define a rotated source region.  For each destination
-// buffer texel with coordinates (x,y) the rotated source image texel has coordinates (x',y') defined as:
-(x',y')= RotateUV(x,y) + ImageOffset.{x,y}
-
----------------------------------------------------
-
-Note that pname:imageOffset does not affect addressing calculations for
-buffer memory.
-Instead, pname:bufferOffset can: be used to select the starting address in
-buffer memory.
diff --git a/registry/vulkan/chapters/VK_QNX_screen_surface/platformCreateSurface_screen.txt b/registry/vulkan/chapters/VK_QNX_screen_surface/platformCreateSurface_screen.txt
deleted file mode 100644
index af41fd8..0000000
--- a/registry/vulkan/chapters/VK_QNX_screen_surface/platformCreateSurface_screen.txt
+++ /dev/null
@@ -1,59 +0,0 @@
-// Copyright (c) 2021 BlackBerry Limited.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-[[platformCreateSurface_screen,platformCreateSurface_screen]]
-=== QNX Screen Platform
-
-[open,refpage='vkCreateScreenSurfaceQNX',desc='Create a slink:VkSurfaceKHR object for a QNX Screen window',type='protos']
---
-To create a sname:VkSurfaceKHR object for a QNX Screen surface, call:
-
-include::{generated}/api/protos/vkCreateScreenSurfaceQNX.txt[]
-
-  * pname:instance is the instance to associate the surface with.
-  * pname:pCreateInfo is a pointer to a slink:VkScreenSurfaceCreateInfoQNX
-    structure containing parameters affecting the creation of the surface
-    object.
-  * pname:pAllocator is the allocator used for host memory allocated for the
-    surface object when there is no more specific allocator available (see
-    <<memory-allocation,Memory Allocation>>).
-  * pname:pSurface is a pointer to a slink:VkSurfaceKHR handle in which the
-    created surface object is returned.
-
-include::{generated}/validity/protos/vkCreateScreenSurfaceQNX.txt[]
---
-
-[open,refpage='VkScreenSurfaceCreateInfoQNX',desc='Structure specifying parameters of a newly created QNX Screen surface object',type='structs']
---
-The sname:VkScreenSurfaceCreateInfoQNX structure is defined as:
-
-include::{generated}/api/structs/VkScreenSurfaceCreateInfoQNX.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:flags is reserved for future use.
-  * pname:context and pname:window are QNX Screen code:context and
-    code:window to associate the surface with.
-
-.Valid Usage
-****
-  * [[VUID-VkScreenSurfaceCreateInfoQNX-context-04741]]
-    pname:context must: point to a valid QNX Screen code:struct
-    _screen_context
-  * [[VUID-VkScreenSurfaceCreateInfoQNX-window-04742]]
-    pname:window must: point to a valid QNX Screen code:struct
-    _screen_window
-****
-
-include::{generated}/validity/structs/VkScreenSurfaceCreateInfoQNX.txt[]
---
-
-[open,refpage='VkScreenSurfaceCreateFlagsQNX',desc='Reserved for future use',type='flags']
---
-include::{generated}/api/flags/VkScreenSurfaceCreateFlagsQNX.txt[]
-
-tname:VkScreenSurfaceCreateFlagsQNX is a bitmask type for setting a mask,
-but is currently reserved for future use.
---
diff --git a/registry/vulkan/chapters/VK_QNX_screen_surface/platformQuerySupport_screen.txt b/registry/vulkan/chapters/VK_QNX_screen_surface/platformQuerySupport_screen.txt
deleted file mode 100644
index 9da7a27..0000000
--- a/registry/vulkan/chapters/VK_QNX_screen_surface/platformQuerySupport_screen.txt
+++ /dev/null
@@ -1,31 +0,0 @@
-// Copyright (c) 2021 BlackBerry Limited.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-[[platformQuerySupport_screen,platformQuerySupport_screen]]
-=== QNX Screen Platform
-
-[open,refpage='vkGetPhysicalDeviceScreenPresentationSupportQNX',desc='Query physical device for presentation to QNX Screen',type='protos']
---
-To determine whether a queue family of a physical device supports
-presentation to a QNX Screen compositor, call:
-
-include::{generated}/api/protos/vkGetPhysicalDeviceScreenPresentationSupportQNX.txt[]
-
-  * pname:physicalDevice is the physical device.
-  * pname:queueFamilyIndex is the queue family index.
-  * pname:window is the QNX Screen code:window object.
-
-This platform-specific function can: be called prior to creating a surface.
-
-.Valid Usage
-****
-  * [[VUID-vkGetPhysicalDeviceScreenPresentationSupportQNX-queueFamilyIndex-04743]]
-    pname:queueFamilyIndex must: be less than
-    pname:pQueueFamilyPropertyCount returned by
-    fname:vkGetPhysicalDeviceQueueFamilyProperties for the given
-    pname:physicalDevice
-****
-
-include::{generated}/validity/protos/vkGetPhysicalDeviceScreenPresentationSupportQNX.txt[]
---
diff --git a/registry/vulkan/chapters/accelstructures.txt b/registry/vulkan/chapters/accelstructures.txt
deleted file mode 100755
index a01f655..0000000
--- a/registry/vulkan/chapters/accelstructures.txt
+++ /dev/null
@@ -1,2356 +0,0 @@
-// Copyright 2020-2021 The Khronos Group, Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-[[acceleration-structure]]
-= Acceleration Structures
-
-
-[[acceleration-structure-def]]
-== Acceleration Structures
-
-_Acceleration structures_ are data structures used by the implementation to
-efficiently manage scene geometry as it is <<ray-traversal, traversed during
-a ray tracing query>>.
-The application is responsible for managing acceleration structure objects
-(see <<resources-acceleration-structures,Acceleration Structures>>),
-including allocation, destruction, executing builds or updates, and
-synchronizing resources used during ray tracing queries.
-
-There are two types of acceleration structures, _top level acceleration
-structures_ and _bottom level acceleration structures_.
-
-An acceleration structure is considered to be constructed if an
-<<acceleration-structure-building,acceleration structure build command>> or
-<<acceleration-structure-copying,copy command>> has been executed with the
-given acceleration structure as the destination.
-
-[[fig-accelstruct]]
-image::{images}/accelstruct.svg[align="center",title="Acceleration Structure",opts="{imageopts}"]
-
-.Caption
-****
-The diagram shows the relationship between top and bottom level acceleration
-structures.
-****
-
-
-[[acceleration-structure-geometry]]
-=== Geometry
-
-_Geometries_ refer to a triangle or axis-aligned bounding box.
-
-
-[[acceleration-structure-top-level]]
-=== Top Level Acceleration Structures
-
-Opaque acceleration structure for an array of instances.
-The descriptor or device address referencing this is the starting point for
-traversal.
-
-The top level acceleration structure takes a reference to any bottom level
-acceleration structure referenced by its instances.
-Those bottom level acceleration structure objects must: be valid when the
-top level acceleration structure is accessed.
-
-
-[[acceleration-structure-bottom-level]]
-=== Bottom Level Acceleration Structures
-
-Opaque acceleration structure for an array of geometries.
-
-
-[[acceleration-structure-update]]
-=== Acceleration Structure Update Rules
-
-The API defines two types of operations to produce acceleration structures
-from geometry:
-
-  * A _build_ operation is used to construct an acceleration structure.
-  * An _update_ operation is used to modify an existing acceleration
-    structure.
-
-An update operation imposes certain constraints on the input, in exchange
-for considerably faster execution.
-When performing an update, the application is required to provide a full
-description of the acceleration structure, but is prohibited from changing
-anything other than instance definitions, transform matrices, and vertex or
-AABB positions.
-All other aspects of the description must: exactly match the one from the
-original build.
-
-More precisely, the application must: not use an update operation to do any
-of the following:
-
-  * Change primitives or instances from _active_ to _inactive_ (as defined
-    in <<acceleration-structure-inactive-prims>>).
-  * Change the index or vertex formats of triangle geometry.
-  * Change triangle geometry transform pointers from null to non-null or
-    vice versa.
-  * Change the number of geometries or instances in the structure.
-  * Change the geometry flags for any geometry in the structure.
-  * Change the number of vertices or primitives for any geometry in the
-    structure.
-
-
-[[acceleration-structure-inactive-prims]]
-=== Inactive Primitives and Instances
-
-Acceleration structures allow the use of particular input values to signal
-_inactive_ primitives or instances.
-
-An _inactive_ triangle is one for which the first (X) component of each
-vertex is NaN.
-If any other vertex component is NaN, and the first is not, the behavior is
-undefined:.
-If the vertex format does not have a NaN representation, then all triangles
-are considered active.
-
-An _inactive_ instance is one whose acceleration structure handle is
-dlink:VK_NULL_HANDLE.
-
-An _inactive_ AABB is one for which the minimum X coordinate is NaN.
-If any other component is NaN, and the first is not, the behavior is
-undefined:.
-
-In the above definitions, "NaN" refers to any type of NaN.
-Signaling, non-signaling, quiet, loud, or otherwise.
-
-An inactive object is considered invisible to all rays, and should: not be
-represented in the acceleration structure.
-Implementations should: ensure that the presence of inactive objects does
-not seriously degrade traversal performance.
-
-Inactive objects are counted in the auto-generated index sequences which are
-provided to shaders via code:InstanceId and code:PrimitiveId SPIR-V
-decorations.
-This allows objects in the scene to change freely between the active and
-inactive states, without affecting the layout of any arrays which are being
-indexed using the ID values.
-
-Any transition between the active and inactive states requires a full
-acceleration structure rebuild.
-Applications must: not perform an acceleration structure update where an
-object is active in the source acceleration structure but would be inactive
-in the destination, or vice versa.
-
-
-[[acceleration-structure-building]]
-=== Building Acceleration Structures
-
-ifdef::VK_NV_ray_tracing[]
-[open,refpage='vkCmdBuildAccelerationStructureNV',desc='Build an acceleration structure',type='protos']
---
-:refpage: vkCmdBuildAccelerationStructureNV
-
-To build an acceleration structure call:
-
-include::{generated}/api/protos/vkCmdBuildAccelerationStructureNV.txt[]
-
-  * pname:commandBuffer is the command buffer into which the command will be
-    recorded.
-  * pname:pInfo contains the shared information for the acceleration
-    structure's structure.
-  * pname:instanceData is the buffer containing an array of
-    slink:VkAccelerationStructureInstanceKHR structures defining
-    acceleration structures.
-    This parameter must: be `NULL` for bottom level acceleration structures.
-  * pname:instanceOffset is the offset in bytes (relative to the start of
-    pname:instanceData) at which the instance data is located.
-  * pname:update specifies whether to update the pname:dst acceleration
-    structure with the data in pname:src.
-  * pname:dst is a pointer to the target acceleration structure for the
-    build.
-  * pname:src is a pointer to an existing acceleration structure that is to
-    be used to update the pname:dst acceleration structure.
-  * pname:scratch is the slink:VkBuffer that will be used as scratch memory
-    for the build.
-  * pname:scratchOffset is the offset in bytes relative to the start of
-    pname:scratch that will be used as a scratch memory.
-
-Accesses to pname:dst, pname:src, and pname:scratch must: be
-<<synchronization-dependencies,synchronized>> with the
-ename:VK_PIPELINE_STAGE_ACCELERATION_STRUCTURE_BUILD_BIT_KHR
-<<synchronization-pipeline-stages, pipeline stage>> and an
-<<synchronization-access-types, access type>> of
-ename:VK_ACCESS_ACCELERATION_STRUCTURE_READ_BIT_KHR or
-ename:VK_ACCESS_ACCELERATION_STRUCTURE_WRITE_BIT_KHR.
-
-.Valid Usage
-****
-  * [[VUID-vkCmdBuildAccelerationStructureNV-geometryCount-02241]]
-    pname:geometryCount must: be less than or equal to
-    slink:VkPhysicalDeviceRayTracingPropertiesNV::pname:maxGeometryCount
-  * [[VUID-vkCmdBuildAccelerationStructureNV-dst-02488]]
-    pname:dst must: have been created with compatible
-    slink:VkAccelerationStructureInfoNV where
-    slink:VkAccelerationStructureInfoNV::pname:type and
-    slink:VkAccelerationStructureInfoNV::pname:flags are identical,
-    slink:VkAccelerationStructureInfoNV::pname:instanceCount and
-    slink:VkAccelerationStructureInfoNV::pname:geometryCount for pname:dst
-    are greater than or equal to the build size and each geometry in
-    slink:VkAccelerationStructureInfoNV::pname:pGeometries for pname:dst has
-    greater than or equal to the number of vertices, indices, and AABBs
-  * [[VUID-vkCmdBuildAccelerationStructureNV-update-02489]]
-    If pname:update is ename:VK_TRUE, pname:src must: not be
-    dlink:VK_NULL_HANDLE
-  * [[VUID-vkCmdBuildAccelerationStructureNV-update-02490]]
-    If pname:update is ename:VK_TRUE, pname:src must: have previously been
-    constructed with
-    ename:VK_BUILD_ACCELERATION_STRUCTURE_ALLOW_UPDATE_BIT_NV set in
-    slink:VkAccelerationStructureInfoNV::pname:flags in the original build
-  * [[VUID-vkCmdBuildAccelerationStructureNV-update-02491]]
-    If pname:update is ename:VK_FALSE, the pname:size member of the
-    slink:VkMemoryRequirements structure returned from a call to
-    flink:vkGetAccelerationStructureMemoryRequirementsNV with
-    slink:VkAccelerationStructureMemoryRequirementsInfoNV::pname:accelerationStructure
-    set to pname:dst and
-    slink:VkAccelerationStructureMemoryRequirementsInfoNV::pname:type set to
-    ename:VK_ACCELERATION_STRUCTURE_MEMORY_REQUIREMENTS_TYPE_BUILD_SCRATCH_NV
-    must: be less than or equal to the size of pname:scratch minus
-    pname:scratchOffset
-  * [[VUID-vkCmdBuildAccelerationStructureNV-update-02492]]
-    If pname:update is ename:VK_TRUE, the pname:size member of the
-    slink:VkMemoryRequirements structure returned from a call to
-    flink:vkGetAccelerationStructureMemoryRequirementsNV with
-    slink:VkAccelerationStructureMemoryRequirementsInfoNV::pname:accelerationStructure
-    set to pname:dst and
-    slink:VkAccelerationStructureMemoryRequirementsInfoNV::pname:type set to
-    ename:VK_ACCELERATION_STRUCTURE_MEMORY_REQUIREMENTS_TYPE_UPDATE_SCRATCH_NV
-    must: be less than or equal to the size of pname:scratch minus
-    pname:scratchOffset
-  * [[VUID-vkCmdBuildAccelerationStructureNV-scratch-03522]]
-    pname:scratch must: have been created with
-    ename:VK_BUFFER_USAGE_RAY_TRACING_BIT_NV usage flag
-  * [[VUID-vkCmdBuildAccelerationStructureNV-instanceData-03523]]
-    If pname:instanceData is not dlink:VK_NULL_HANDLE, pname:instanceData
-    must: have been created with ename:VK_BUFFER_USAGE_RAY_TRACING_BIT_NV
-    usage flag
-  * [[VUID-vkCmdBuildAccelerationStructureNV-accelerationStructureReference-03786]]
-    Each
-    slink:VkAccelerationStructureInstanceKHR::pname:accelerationStructureReference
-    value in pname:instanceData must: be a valid device address containing a
-    value obtained from flink:vkGetAccelerationStructureHandleNV
-  * [[VUID-vkCmdBuildAccelerationStructureNV-update-03524]]
-    If pname:update is ename:VK_TRUE, then objects that were previously
-    active must: not be made inactive as per
-    <<acceleration-structure-inactive-prims>>
-  * [[VUID-vkCmdBuildAccelerationStructureNV-update-03525]]
-    If pname:update is ename:VK_TRUE, then objects that were previously
-    inactive must: not be made active as per
-    <<acceleration-structure-inactive-prims>>
-  * [[VUID-vkCmdBuildAccelerationStructureNV-update-03526]]
-    If pname:update is ename:VK_TRUE, the pname:src and pname:dst objects
-    must: either be the same object or not have any
-    <<resources-memory-aliasing, memory aliasing>>
-
-****
-
-include::{generated}/validity/protos/vkCmdBuildAccelerationStructureNV.txt[]
---
-endif::VK_NV_ray_tracing[]
-
-ifdef::VK_KHR_acceleration_structure[]
-[open,refpage='vkCmdBuildAccelerationStructuresKHR',desc='Build an acceleration structure',type='protos']
---
-:refpage: vkCmdBuildAccelerationStructuresKHR
-:maxinstancecheck: pname:ppBuildRangeInfos[i][j].pname:primitiveCount
-
-To build acceleration structures call:
-
-include::{generated}/api/protos/vkCmdBuildAccelerationStructuresKHR.txt[]
-
-  * pname:commandBuffer is the command buffer into which the command will be
-    recorded.
-  * pname:infoCount is the number of acceleration structures to build.
-    It specifies the number of the pname:pInfos structures and
-    pname:ppBuildRangeInfos pointers that must: be provided.
-  * pname:pInfos is a pointer to an array of pname:infoCount
-    slink:VkAccelerationStructureBuildGeometryInfoKHR structures defining
-    the geometry used to build each acceleration structure.
-  * pname:ppBuildRangeInfos is a pointer to an array of pname:infoCount
-    pointers to arrays of slink:VkAccelerationStructureBuildRangeInfoKHR
-    structures.
-    Each pname:ppBuildRangeInfos[i] is a pointer to an array of
-    pname:pInfos[i].pname:geometryCount
-    slink:VkAccelerationStructureBuildRangeInfoKHR structures defining
-    dynamic offsets to the addresses where geometry data is stored, as
-    defined by pname:pInfos[i].
-
-The fname:vkCmdBuildAccelerationStructuresKHR command provides the ability
-to initiate multiple acceleration structures builds, however there is no
-ordering or synchronization implied between any of the individual
-acceleration structure builds.
-
-[NOTE]
-.Note
-====
-This means that an application cannot: build a top-level acceleration
-structure in the same flink:vkCmdBuildAccelerationStructuresKHR call as the
-associated bottom-level or instance acceleration structures are being built.
-There also cannot: be any memory aliasing between any acceleration structure
-memories or scratch memories being used by any of the builds.
-====
-
-[[acceleration-structure-scratch]]
-Accesses to the acceleration structure scratch buffers as identified by the
-slink:VkAccelerationStructureBuildGeometryInfoKHR::pname:scratchData buffer
-device addresses must: be <<synchronization-dependencies,synchronized>> with
-the ename:VK_PIPELINE_STAGE_ACCELERATION_STRUCTURE_BUILD_BIT_KHR
-<<synchronization-pipeline-stages, pipeline stage>> and an
-<<synchronization-access-types, access type>> of
-ename:VK_ACCESS_ACCELERATION_STRUCTURE_READ_BIT_KHR or
-ename:VK_ACCESS_ACCELERATION_STRUCTURE_WRITE_BIT_KHR.
-Similarly for accesses to each
-slink:VkAccelerationStructureBuildGeometryInfoKHR::pname:srcAccelerationStructure
-and
-slink:VkAccelerationStructureBuildGeometryInfoKHR::pname:dstAccelerationStructure.
-
-Accesses to other input buffers as identified by any used values of
-ifdef::VK_NV_ray_tracing_motion_blur[]
-slink:VkAccelerationStructureGeometryMotionTrianglesDataNV::pname:vertexData,
-endif::VK_NV_ray_tracing_motion_blur[]
-slink:VkAccelerationStructureGeometryTrianglesDataKHR::pname:vertexData,
-slink:VkAccelerationStructureGeometryTrianglesDataKHR::pname:indexData,
-slink:VkAccelerationStructureGeometryTrianglesDataKHR::pname:transformData,
-slink:VkAccelerationStructureGeometryAabbsDataKHR::pname:data, and
-slink:VkAccelerationStructureGeometryInstancesDataKHR::pname:data must: be
-<<synchronization-dependencies,synchronized>> with the
-ename:VK_PIPELINE_STAGE_ACCELERATION_STRUCTURE_BUILD_BIT_KHR
-<<synchronization-pipeline-stages, pipeline stage>> and an
-<<synchronization-access-types, access type>> of
-ename:VK_ACCESS_SHADER_READ_BIT.
-
-
-.Valid Usage
-****
-include::{chapters}/commonvalidity/build_acceleration_structure_common.txt[]
-include::{chapters}/commonvalidity/build_acceleration_structure_device_common.txt[]
-include::{chapters}/commonvalidity/build_acceleration_structure_nonindirect_common.txt[]
-****
-
-include::{generated}/validity/protos/vkCmdBuildAccelerationStructuresKHR.txt[]
---
-
-[open,refpage='vkCmdBuildAccelerationStructuresIndirectKHR',desc='Build an acceleration structure with some parameters provided on the device',type='protos']
---
-:refpage: vkCmdBuildAccelerationStructuresIndirectKHR
-:maxinstancecheck: pname:ppMaxPrimitiveCounts[i][j]
-
-To build acceleration structures with some parameters sourced on the device
-call:
-
-include::{generated}/api/protos/vkCmdBuildAccelerationStructuresIndirectKHR.txt[]
-
-  * pname:commandBuffer is the command buffer into which the command will be
-    recorded.
-  * pname:infoCount is the number of acceleration structures to build.
-  * pname:pInfos is a pointer to an array of pname:infoCount
-    slink:VkAccelerationStructureBuildGeometryInfoKHR structures defining
-    the geometry used to build each acceleration structure.
-  * pname:pIndirectDeviceAddresses is a pointer to an array of
-    pname:infoCount buffer device addresses which point to
-    pname:pInfos[i].pname:geometryCount
-    slink:VkAccelerationStructureBuildRangeInfoKHR structures defining
-    dynamic offsets to the addresses where geometry data is stored, as
-    defined by pname:pInfos[i].
-  * pname:pIndirectStrides is a pointer to an array of pname:infoCount byte
-    strides between elements of pname:pIndirectDeviceAddresses.
-  * pname:ppMaxPrimitiveCounts is a pointer to an array of pname:infoCount
-    pointers to arrays of pname:pInfos[i].pname:geometryCount values
-    indicating the maximum number of primitives that will be built by this
-    command for each geometry.
-
-Accesses to acceleration structures, scratch buffers, vertex buffers, index
-buffers, and instance buffers must be synchronized as with
-<<acceleration-structure-scratch,vkCmdBuildAccelerationStructuresKHR>>.
-
-Accesses to any element of pname:pIndirectDeviceAddresses must: be
-<<synchronization-dependencies,synchronized>> with the
-ename:VK_PIPELINE_STAGE_ACCELERATION_STRUCTURE_BUILD_BIT_KHR
-<<synchronization-pipeline-stages, pipeline stage>> and an
-<<synchronization-access-types, access type>> of
-ename:VK_ACCESS_INDIRECT_COMMAND_READ_BIT.
-
-
-.Valid Usage
-****
-include::{chapters}/commonvalidity/build_acceleration_structure_common.txt[]
-include::{chapters}/commonvalidity/build_acceleration_structure_device_common.txt[]
-  * [[VUID-vkCmdBuildAccelerationStructuresIndirectKHR-pIndirectDeviceAddresses-03645]]
-    For any element of pname:pIndirectDeviceAddresses, if the buffer from
-    which it was queried is non-sparse then it must: be bound completely and
-    contiguously to a single slink:VkDeviceMemory object
-  * [[VUID-vkCmdBuildAccelerationStructuresIndirectKHR-pIndirectDeviceAddresses-03646]]
-    For any element of pname:pIndirectDeviceAddresses[i], all device
-    addresses between pname:pIndirectDeviceAddresses[i] and
-    [eq]#pname:pIndirectDeviceAddresses[i] {plus}
-    (pname:pInfos[i].pname:geometryCount {times} pname:pIndirectStrides[i]) -
-    1# must: be in the buffer device address range of the same buffer
-  * [[VUID-vkCmdBuildAccelerationStructuresIndirectKHR-pIndirectDeviceAddresses-03647]]
-    For any element of pname:pIndirectDeviceAddresses, the buffer from which
-    it was queried must: have been created with the
-    ename:VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT bit set
-  * [[VUID-vkCmdBuildAccelerationStructuresIndirectKHR-pIndirectDeviceAddresses-03648]]
-    Each element of pname:pIndirectDeviceAddresses must: be a multiple of
-    `4`
-  * [[VUID-vkCmdBuildAccelerationStructuresIndirectKHR-pIndirectStrides-03787]]
-    Each element of pname:pIndirectStrides must: be a multiple of `4`
-  * [[VUID-vkCmdBuildAccelerationStructuresIndirectKHR-commandBuffer-03649]]
-    pname:commandBuffer must: not be a protected command buffer
-  * [[VUID-vkCmdBuildAccelerationStructuresIndirectKHR-accelerationStructureIndirectBuild-03650]]
-    The <<features-accelerationStructureIndirectBuild,
-    sname:VkPhysicalDeviceAccelerationStructureFeaturesKHR::pname:accelerationStructureIndirectBuild>>
-    feature must: be enabled
-  * [[VUID-vkCmdBuildAccelerationStructuresIndirectKHR-pIndirectDeviceAddresses-03651]]
-    Each slink:VkAccelerationStructureBuildRangeInfoKHR structure referenced
-    by any element of pname:pIndirectDeviceAddresses must: be a valid
-    slink:VkAccelerationStructureBuildRangeInfoKHR structure
-  * [[VUID-vkCmdBuildAccelerationStructuresIndirectKHR-pInfos-03652]]
-    pname:pInfos[i].pname:dstAccelerationStructure must: have been created
-    with a value of slink:VkAccelerationStructureCreateInfoKHR::pname:size
-    greater than or equal to the memory size required by the build
-    operation, as returned by flink:vkGetAccelerationStructureBuildSizesKHR
-    with [eq]#pname:pBuildInfo = pname:pInfos[i]# and
-    [eq]#pname:pMaxPrimitiveCounts = pname:ppMaxPrimitiveCounts[i]#
-  * [[VUID-vkCmdBuildAccelerationStructuresIndirectKHR-ppMaxPrimitiveCounts-03653]]
-    Each pname:ppMaxPrimitiveCounts[i][j] must: be greater than or equal to
-    the the pname:primitiveCount value specified by the
-    slink:VkAccelerationStructureBuildRangeInfoKHR structure located at
-    [eq]#pname:pIndirectDeviceAddresses[i] {plus} (code:j {times}
-    pname:pIndirectStrides[i])#
-****
-
-include::{generated}/validity/protos/vkCmdBuildAccelerationStructuresIndirectKHR.txt[]
---
-
-
-[open,refpage='VkAccelerationStructureBuildGeometryInfoKHR',desc='Structure specifying the geometry data used to build an acceleration structure',type='structs']
---
-:refpage: VkAccelerationStructureBuildGeometryInfoKHR
-
-The sname:VkAccelerationStructureBuildGeometryInfoKHR structure is defined
-as:
-
-include::{generated}/api/structs/VkAccelerationStructureBuildGeometryInfoKHR.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:type is a elink:VkAccelerationStructureTypeKHR value specifying
-    the type of acceleration structure being built.
-  * pname:flags is a bitmask of
-    elink:VkBuildAccelerationStructureFlagBitsKHR specifying additional
-    parameters of the acceleration structure.
-  * pname:mode is a elink:VkBuildAccelerationStructureModeKHR value
-    specifying the type of operation to perform.
-  * pname:srcAccelerationStructure is a pointer to an existing acceleration
-    structure that is to be used to update the pname:dst acceleration
-    structure when pname:mode is
-    ename:VK_BUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR.
-  * pname:dstAccelerationStructure is a pointer to the target acceleration
-    structure for the build.
-  * pname:geometryCount specifies the number of geometries that will be
-    built into pname:dstAccelerationStructure.
-  * pname:pGeometries is a pointer to an array of
-    slink:VkAccelerationStructureGeometryKHR structures.
-  * pname:ppGeometries is a pointer to an array of pointers to
-    slink:VkAccelerationStructureGeometryKHR structures.
-  * pname:scratchData is the device or host address to memory that will be
-    used as scratch memory for the build.
-
-Only one of pname:pGeometries or pname:ppGeometries can: be a valid pointer,
-the other must: be `NULL`.
-Each element of the non-`NULL` array describes the data used to build each
-acceleration structure geometry.
-
-ifdef::VK_KHR_ray_tracing_pipeline,VK_KHR_ray_query[]
-[[acceleration-structure-geometry-index]]
-The index of each element of the pname:pGeometries or pname:ppGeometries
-members of slink:VkAccelerationStructureBuildGeometryInfoKHR is used as the
-_geometry index_ during ray traversal.
-ifdef::VK_KHR_ray_tracing_pipeline[]
-The geometry index is available in ray shaders via the
-<<interfaces-builtin-variables-raygeometryindex,code:RayGeometryIndexKHR
-built-in>>, and is <<shader-binding-table-hit-shader-indexing, used to
-determine hit and intersection shaders executed during traversal>>.
-endif::VK_KHR_ray_tracing_pipeline[]
-ifdef::VK_KHR_ray_query[]
-The geometry index is available to ray queries via the
-code:OpRayQueryGetIntersectionGeometryIndexKHR instruction.
-endif::VK_KHR_ray_query[]
-endif::VK_KHR_ray_tracing_pipeline,VK_KHR_ray_query[]
-
-ifdef::VK_NV_ray_tracing_motion_blur[]
-[[acceleration-structure-motion-instances]]
-Setting ename:VK_BUILD_ACCELERATION_STRUCTURE_MOTION_BIT_NV in pname:flags
-indicates that this build is a motion top level acceleration structure.
-A motion top level uses instances of format
-slink:VkAccelerationStructureMotionInstanceNV if
-slink:VkAccelerationStructureGeometryInstancesDataKHR::pname:arrayOfPointers
-is ename:VK_FALSE.
-
-If
-slink:VkAccelerationStructureGeometryInstancesDataKHR::pname:arrayOfPointers
-is ename:VK_TRUE, the pointer for any given element of the array of instance
-pointers consists of 4 bits of
-ename:VkAccelerationStructureMotionInstanceTypeNV in the low 4 bits of the
-pointer identifying the type of structure at the pointer.
-The device address accessed is the value in the array with the low 4 bits
-set to zero.
-The structure at the pointer is one of
-slink:VkAccelerationStructureInstanceKHR,
-slink:VkAccelerationStructureMatrixMotionInstanceNV or
-slink:VkAccelerationStructureSRTMotionInstanceNV, depending on the type
-value encoded in the low 4 bits.
-
-A top level acceleration structure with either motion instances or vertex
-motion in its instances must: set
-ename:VK_BUILD_ACCELERATION_STRUCTURE_MOTION_BIT_NV in pname:flags.
-endif::VK_NV_ray_tracing_motion_blur[]
-
-Members pname:srcAccelerationStructure and pname:dstAccelerationStructure
-may: be the same or different for an update operation (when pname:mode is
-ename:VK_BUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR).
-If they are the same, the update happens in-place.
-Otherwise, the target acceleration structure is updated and the source is
-not modified.
-
-.Valid Usage
-****
-  * [[VUID-VkAccelerationStructureBuildGeometryInfoKHR-type-03654]]
-    pname:type must: not be ename:VK_ACCELERATION_STRUCTURE_TYPE_GENERIC_KHR
-  * [[VUID-VkAccelerationStructureBuildGeometryInfoKHR-pGeometries-03788]]
-    Only one of pname:pGeometries or pname:ppGeometries can: be a valid
-    pointer, the other must: be `NULL`
-  * [[VUID-VkAccelerationStructureBuildGeometryInfoKHR-type-03789]]
-    If pname:type is ename:VK_ACCELERATION_STRUCTURE_TYPE_TOP_LEVEL_KHR, the
-    pname:geometryType member of elements of either pname:pGeometries or
-    pname:ppGeometries must: be ename:VK_GEOMETRY_TYPE_INSTANCES_KHR
-  * [[VUID-VkAccelerationStructureBuildGeometryInfoKHR-type-03790]]
-    If pname:type is ename:VK_ACCELERATION_STRUCTURE_TYPE_TOP_LEVEL_KHR,
-    pname:geometryCount must: be `1`
-  * [[VUID-VkAccelerationStructureBuildGeometryInfoKHR-type-03791]]
-    If pname:type is ename:VK_ACCELERATION_STRUCTURE_TYPE_BOTTOM_LEVEL_KHR
-    the pname:geometryType member of elements of either pname:pGeometries or
-    pname:ppGeometries must: not be ename:VK_GEOMETRY_TYPE_INSTANCES_KHR
-  * [[VUID-VkAccelerationStructureBuildGeometryInfoKHR-type-03792]]
-    If pname:type is ename:VK_ACCELERATION_STRUCTURE_TYPE_BOTTOM_LEVEL_KHR
-    then the pname:geometryType member of each geometry in either
-    pname:pGeometries or pname:ppGeometries must: be the same
-  * [[VUID-VkAccelerationStructureBuildGeometryInfoKHR-type-03793]]
-    If pname:type is ename:VK_ACCELERATION_STRUCTURE_TYPE_BOTTOM_LEVEL_KHR
-    then pname:geometryCount must: be less than or equal to
-    slink:VkPhysicalDeviceAccelerationStructurePropertiesKHR::pname:maxGeometryCount
-  * [[VUID-VkAccelerationStructureBuildGeometryInfoKHR-type-03794]]
-    If pname:type is ename:VK_ACCELERATION_STRUCTURE_TYPE_BOTTOM_LEVEL_KHR
-    and the pname:geometryType member of either pname:pGeometries or
-    pname:ppGeometries is ename:VK_GEOMETRY_TYPE_AABBS_KHR, the total number
-    of AABBs in all geometries must: be less than or equal to
-    slink:VkPhysicalDeviceAccelerationStructurePropertiesKHR::pname:maxPrimitiveCount
-  * [[VUID-VkAccelerationStructureBuildGeometryInfoKHR-type-03795]]
-    If pname:type is ename:VK_ACCELERATION_STRUCTURE_TYPE_BOTTOM_LEVEL_KHR
-    and the pname:geometryType member of either pname:pGeometries or
-    pname:ppGeometries is ename:VK_GEOMETRY_TYPE_TRIANGLES_KHR, the total
-    number of triangles in all geometries must: be less than or equal to
-    slink:VkPhysicalDeviceAccelerationStructurePropertiesKHR::pname:maxPrimitiveCount
-  * [[VUID-VkAccelerationStructureBuildGeometryInfoKHR-flags-03796]]
-    If pname:flags has the
-    ename:VK_BUILD_ACCELERATION_STRUCTURE_PREFER_FAST_TRACE_BIT_KHR bit set,
-    then it must: not have the
-    ename:VK_BUILD_ACCELERATION_STRUCTURE_PREFER_FAST_BUILD_BIT_KHR bit set
-ifdef::VK_NV_ray_tracing_motion_blur[]
-  * [[VUID-VkAccelerationStructureBuildGeometryInfoKHR-dstAccelerationStructure-04927]]
-    If pname:dstAccelerationStructure was created with
-    ename:VK_ACCELERATION_STRUCTURE_CREATE_MOTION_BIT_NV set in
-    slink:VkAccelerationStructureCreateInfoKHR::pname:flags,
-    ename:VK_BUILD_ACCELERATION_STRUCTURE_MOTION_BIT_NV must: be set in
-    pname:flags
-  * [[VUID-VkAccelerationStructureBuildGeometryInfoKHR-flags-04928]]
-    If ename:VK_BUILD_ACCELERATION_STRUCTURE_MOTION_BIT_NV is set in
-    pname:flags, pname:dstAccelerationStructure must: have been created with
-    ename:VK_ACCELERATION_STRUCTURE_CREATE_MOTION_BIT_NV set in
-    slink:VkAccelerationStructureCreateInfoKHR::pname:flags
-  * [[VUID-VkAccelerationStructureBuildGeometryInfoKHR-flags-04929]]
-    If ename:VK_BUILD_ACCELERATION_STRUCTURE_MOTION_BIT_NV is set in
-    pname:flags, pname:type must: not be
-    ename:VK_ACCELERATION_STRUCTURE_TYPE_GENERIC_KHR
-endif::VK_NV_ray_tracing_motion_blur[]
-****
-include::{generated}/validity/structs/VkAccelerationStructureBuildGeometryInfoKHR.txt[]
---
-
-[open,refpage='VkBuildAccelerationStructureModeKHR',desc='Enum specifying the type of build operation to perform',type='enums']
---
-:refpage: VkBuildAccelerationStructureModeKHR
-
-The ename:VkBuildAccelerationStructureModeKHR enumeration is defined as:
-
-include::{generated}/api/enums/VkBuildAccelerationStructureModeKHR.txt[]
-
-  * ename:VK_BUILD_ACCELERATION_STRUCTURE_MODE_BUILD_KHR specifies that the
-    destination acceleration structure will be built using the specified
-    geometries.
-  * ename:VK_BUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR specifies that the
-    destination acceleration structure will be built using data in a source
-    acceleration structure, updated by the specified geometries.
---
-
-[open,refpage='VkDeviceOrHostAddressKHR',desc='Union specifying a device or host address',type='structs']
---
-:refpage: VkDeviceOrHostAddressKHR
-
-The sname:VkDeviceOrHostAddressKHR union is defined as:
-
-include::{generated}/api/structs/VkDeviceOrHostAddressKHR.txt[]
-
-  * pname:deviceAddress is a buffer device address as returned by the
-    flink:vkGetBufferDeviceAddressKHR command.
-  * pname:hostAddress is a host memory address.
-
-include::{generated}/validity/structs/VkDeviceOrHostAddressKHR.txt[]
---
-
-[open,refpage='VkDeviceOrHostAddressConstKHR',desc='Union specifying a const device or host address',type='structs']
---
-:refpage: VkDeviceOrHostAddressConstKHR
-
-The sname:VkDeviceOrHostAddressConstKHR union is defined as:
-
-include::{generated}/api/structs/VkDeviceOrHostAddressConstKHR.txt[]
-
-  * pname:deviceAddress is a buffer device address as returned by the
-    flink:vkGetBufferDeviceAddressKHR command.
-  * pname:hostAddress is a const host memory address.
-
-include::{generated}/validity/structs/VkDeviceOrHostAddressConstKHR.txt[]
---
-
-[open,refpage='VkAccelerationStructureGeometryKHR',desc='Structure specifying geometries to be built into an acceleration structure',type='structs']
---
-:refpage: VkAccelerationStructureGeometryKHR
-
-The sname:VkAccelerationStructureGeometryKHR structure is defined as:
-
-include::{generated}/api/structs/VkAccelerationStructureGeometryKHR.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:geometryType describes which type of geometry this
-    sname:VkAccelerationStructureGeometryKHR refers to.
-  * pname:geometry is a slink:VkAccelerationStructureGeometryDataKHR union
-    describing the geometry data for the relevant geometry type.
-  * pname:flags is a bitmask of elink:VkGeometryFlagBitsKHR values
-    describing additional properties of how the geometry should be built.
-
-include::{generated}/validity/structs/VkAccelerationStructureGeometryKHR.txt[]
---
-
-[open,refpage='VkAccelerationStructureGeometryDataKHR',desc='Union specifying acceleration structure geometry data',type='structs']
---
-:refpage: VkAccelerationStructureGeometryDataKHR
-
-The sname:VkAccelerationStructureGeometryDataKHR union is defined as:
-
-include::{generated}/api/structs/VkAccelerationStructureGeometryDataKHR.txt[]
-
-  * pname:triangles is a
-    slink:VkAccelerationStructureGeometryTrianglesDataKHR structure.
-  * pname:aabbs is a slink:VkAccelerationStructureGeometryAabbsDataKHR
-    struture.
-  * pname:instances is a
-    slink:VkAccelerationStructureGeometryInstancesDataKHR structure.
-
-include::{generated}/validity/structs/VkAccelerationStructureGeometryDataKHR.txt[]
---
-
-[open,refpage='VkAccelerationStructureGeometryTrianglesDataKHR',desc='Structure specifying a triangle geometry in a bottom-level acceleration structure',type='structs']
---
-:refpage: VkAccelerationStructureGeometryTrianglesDataKHR
-
-The sname:VkAccelerationStructureGeometryTrianglesDataKHR structure is
-defined as:
-
-include::{generated}/api/structs/VkAccelerationStructureGeometryTrianglesDataKHR.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:vertexFormat is the elink:VkFormat of each vertex element.
-  * pname:vertexData is a device or host address to memory containing vertex
-    data for this geometry.
-  * pname:maxVertex is the highest index of a vertex that will be addressed
-    by a build command using this structure.
-  * pname:vertexStride is the stride in bytes between each vertex.
-  * pname:indexType is the elink:VkIndexType of each index element.
-  * pname:indexData is a device or host address to memory containing index
-    data for this geometry.
-  * pname:transformData is a device or host address to memory containing an
-    optional reference to a slink:VkTransformMatrixKHR structure that
-    describes a transformation from the space in which the vertices in this
-    geometry are described to the space in which the acceleration structure
-    is defined.
-
-[NOTE]
-.Note
-====
-Unlike the stride for vertex buffers in
-slink:VkVertexInputBindingDescription for graphics pipelines which must not
-exceed pname:maxVertexInputBindingStride, pname:vertexStride for
-acceleration structure geometry is instead restricted to being a 32-bit
-value.
-====
-
-.Valid Usage
-****
-  * [[VUID-VkAccelerationStructureGeometryTrianglesDataKHR-vertexStride-03735]]
-    pname:vertexStride must: be a multiple of the size in bytes of the
-    smallest component of pname:vertexFormat
-  * [[VUID-VkAccelerationStructureGeometryTrianglesDataKHR-vertexStride-03819]]
-    pname:vertexStride must: be less than or equal to [eq]#2^32^-1#
-  * [[VUID-VkAccelerationStructureGeometryTrianglesDataKHR-vertexFormat-03797]]
-    pname:vertexFormat must: support the
-    ename:VK_FORMAT_FEATURE_ACCELERATION_STRUCTURE_VERTEX_BUFFER_BIT_KHR in
-    slink:VkFormatProperties::pname:bufferFeatures as returned by
-    flink:vkGetPhysicalDeviceFormatProperties2
-  * [[VUID-VkAccelerationStructureGeometryTrianglesDataKHR-indexType-03798]]
-    pname:indexType must: be ename:VK_INDEX_TYPE_UINT16,
-    ename:VK_INDEX_TYPE_UINT32, or ename:VK_INDEX_TYPE_NONE_KHR
-****
-
-include::{generated}/validity/structs/VkAccelerationStructureGeometryTrianglesDataKHR.txt[]
---
-
-ifdef::VK_NV_ray_tracing_motion_blur[]
-[open,refpage='VkAccelerationStructureGeometryMotionTrianglesDataNV',desc='Structure specifying vertex motion in a bottom-level acceleration structure',type='structs']
---
-:refpage: VkAccelerationStructureGeometryMotionTrianglesDataNV
-
-The sname:VkAccelerationStructureGeometryMotionTrianglesDataNV structure is
-defined as:
-
-include::{generated}/api/structs/VkAccelerationStructureGeometryMotionTrianglesDataNV.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:vertexData is a pointer to vertex data for this geometry at time
-    1.0
-
-If sname:VkAccelerationStructureGeometryMotionTrianglesDataNV is included in
-the pname:pNext chain of a
-slink:VkAccelerationStructureGeometryTrianglesDataKHR structure, the basic
-vertex positions are used for the position of the triangles in the geometry
-at time 0.0 and the pname:vertexData in
-sname:VkAccelerationStructureGeometryMotionTrianglesDataNV is used for the
-vertex positions at time 1.0, with positions linearly interpolated at
-intermediate times.
-
-Indexing for sname:VkAccelerationStructureGeometryMotionTrianglesDataNV
-pname:vertexData is equivalent to the basic vertex position data.
-
-include::{generated}/validity/structs/VkAccelerationStructureGeometryMotionTrianglesDataNV.txt[]
---
-endif::VK_NV_ray_tracing_motion_blur[]
-endif::VK_KHR_acceleration_structure[]
-
-[open,refpage='VkTransformMatrixKHR',desc='Structure specifying a 3x4 affine transformation matrix',type='structs',alias='VkTransformMatrixNV']
---
-:refpage: VkTransformMatrixKHR
-
-The sname:VkTransformMatrixKHR structure is defined as:
-
-include::{generated}/api/structs/VkTransformMatrixKHR.txt[]
-
-ifdef::VK_NV_ray_tracing[]
-or the equivalent
-
-include::{generated}/api/structs/VkTransformMatrixNV.txt[]
-endif::VK_NV_ray_tracing[]
-
-  * pname:matrix is a 3x4 row-major affine transformation matrix.
-
-include::{generated}/validity/structs/VkTransformMatrixKHR.txt[]
-
-.Valid Usage
-****
-  * [[VUID-VkTransformMatrixKHR-matrix-03799]]
-    The first three columns of pname:matrix must: define an invertible 3x3
-    matrix
-****
---
-
-ifdef::VK_KHR_acceleration_structure[]
-[open,refpage='VkAccelerationStructureGeometryAabbsDataKHR',desc='Structure specifying axis-aligned bounding box geometry in a bottom-level acceleration structure',type='structs']
---
-:refpage: VkAccelerationStructureGeometryAabbsDataKHR
-
-The sname:VkAccelerationStructureGeometryAabbsDataKHR structure is defined
-as:
-
-include::{generated}/api/structs/VkAccelerationStructureGeometryAabbsDataKHR.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:data is a device or host address to memory containing
-    slink:VkAabbPositionsKHR structures containing position data for each
-    axis-aligned bounding box in the geometry.
-  * pname:stride is the stride in bytes between each entry in pname:data.
-    The stride must: be a multiple of `8`.
-
-.Valid Usage
-****
-  * [[VUID-VkAccelerationStructureGeometryAabbsDataKHR-stride-03545]]
-    pname:stride must: be a multiple of `8`
-  * [[VUID-VkAccelerationStructureGeometryAabbsDataKHR-stride-03820]]
-    pname:stride must: be less than or equal to [eq]#2^32^-1#
-****
-
-include::{generated}/validity/structs/VkAccelerationStructureGeometryAabbsDataKHR.txt[]
---
-endif::VK_KHR_acceleration_structure[]
-
-[open,refpage='VkAabbPositionsKHR',desc='Structure specifying two opposing corners of an axis-aligned bounding box',type='structs',alias='VkAabbPositionsNV']
---
-:refpage: VkAabbPositionsKHR
-
-The sname:VkAabbPositionsKHR structure is defined as:
-
-include::{generated}/api/structs/VkAabbPositionsKHR.txt[]
-
-ifdef::VK_NV_ray_tracing[]
-or the equivalent
-
-include::{generated}/api/structs/VkAabbPositionsNV.txt[]
-endif::VK_NV_ray_tracing[]
-
-
-  * pname:minX is the x position of one opposing corner of a bounding box.
-  * pname:minY is the y position of one opposing corner of a bounding box.
-  * pname:minZ is the z position of one opposing corner of a bounding box.
-  * pname:maxX is the x position of the other opposing corner of a bounding
-    box.
-  * pname:maxY is the y position of the other opposing corner of a bounding
-    box.
-  * pname:maxZ is the z position of the other opposing corner of a bounding
-    box.
-
-.Valid Usage
-****
-  * [[VUID-VkAabbPositionsKHR-minX-03546]]
-    pname:minX must: be less than or equal to pname:maxX
-  * [[VUID-VkAabbPositionsKHR-minY-03547]]
-    pname:minY must: be less than or equal to pname:maxY
-  * [[VUID-VkAabbPositionsKHR-minZ-03548]]
-    pname:minZ must: be less than or equal to pname:maxZ
-****
-
-include::{generated}/validity/structs/VkAabbPositionsKHR.txt[]
---
-
-ifdef::VK_KHR_acceleration_structure[]
-[open,refpage='VkAccelerationStructureGeometryInstancesDataKHR',desc='Structure specifying a geometry consisting of instances of other acceleration structures',type='structs']
---
-:refpage: VkAccelerationStructureGeometryInstancesDataKHR
-
-The sname:VkAccelerationStructureGeometryInstancesDataKHR structure is
-defined as:
-
-include::{generated}/api/structs/VkAccelerationStructureGeometryInstancesDataKHR.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:arrayOfPointers specifies whether pname:data is used as an array
-    of addresses or just an array.
-  * pname:data is either the address of an array of device or host addresses
-    referencing individual slink:VkAccelerationStructureInstanceKHR
-    structures
-ifdef::VK_NV_ray_tracing_motion_blur[]
-    or packed motion instance information as described in
-    <<acceleration-structure-motion-instances, motion instances>>
-endif::VK_NV_ray_tracing_motion_blur[]
-    if pname:arrayOfPointers is ename:VK_TRUE, or the address of an array of
-    slink:VkAccelerationStructureInstanceKHR
-ifdef::VK_NV_ray_tracing_motion_blur[]
-    or slink:VkAccelerationStructureMotionInstanceNV
-endif::VK_NV_ray_tracing_motion_blur[]
-    structures.
-    Addresses and slink:VkAccelerationStructureInstanceKHR structures are
-    tightly packed.
-ifdef::VK_NV_ray_tracing_motion_blur[]
-    slink:VkAccelerationStructureMotionInstanceNV structures have a stride
-    of 160 bytes.
-endif::VK_NV_ray_tracing_motion_blur[]
-
-include::{generated}/validity/structs/VkAccelerationStructureGeometryInstancesDataKHR.txt[]
---
-endif::VK_KHR_acceleration_structure[]
-
-[open,refpage='VkAccelerationStructureInstanceKHR',desc='Structure specifying a single acceleration structure instance for building into an acceleration structure geometry',type='structs',alias='VkAccelerationStructureInstanceNV']
---
-:refpage: VkAccelerationStructureInstanceKHR
-
-_Acceleration structure instances_ can: be built into top-level acceleration
-structures.
-Each acceleration structure instance is a separate entry in the top-level
-acceleration structure which includes all the geometry of a bottom-level
-acceleration structure at a transformed location.
-Multiple instances can: point to the same bottom level acceleration
-structure.
-
-An acceleration structure instance is defined by the structure:
-
-include::{generated}/api/structs/VkAccelerationStructureInstanceKHR.txt[]
-
-ifdef::VK_NV_ray_tracing[]
-or the equivalent
-
-include::{generated}/api/structs/VkAccelerationStructureInstanceNV.txt[]
-endif::VK_NV_ray_tracing[]
-
-  * pname:transform is a slink:VkTransformMatrixKHR structure describing a
-    transformation to be applied to the acceleration structure.
-  * pname:instanceCustomIndex is a 24-bit user-specified index value
-    accessible to ray shaders in the code:InstanceCustomIndexKHR built-in.
-  * pname:mask is an 8-bit visibility mask for the geometry.
-    The instance may: only be hit if `Cull Mask & instance.mask != 0`
-  * pname:instanceShaderBindingTableRecordOffset is a 24-bit offset used in
-    calculating the hit shader binding table index.
-  * pname:flags is an 8-bit mask of elink:VkGeometryInstanceFlagBitsKHR
-    values to apply to this instance.
-  * pname:accelerationStructureReference is either:
-  ** a device address containing the value obtained from
-ifdef::VK_KHR_acceleration_structure[flink:vkGetAccelerationStructureDeviceAddressKHR]
-ifdef::VK_KHR_acceleration_structure+VK_NV_ray_tracing[or]
-ifdef::VK_NV_ray_tracing[flink:vkGetAccelerationStructureHandleNV]
-     (used by device operations which reference acceleration structures) or,
-  ** a slink:VkAccelerationStructureKHR object (used by host operations
-     which reference acceleration structures).
-
-The C language specification does not define the ordering of bit-fields, but
-in practice, this struct produces the correct layout with existing
-compilers.
-The intended bit pattern is for the following:
-
-  * pname:instanceCustomIndex and pname:mask occupy the same memory as if a
-    single code:uint32_t was specified in their place
-  ** pname:instanceCustomIndex occupies the 24 least significant bits of
-     that memory
-  ** pname:mask occupies the 8 most significant bits of that memory
-  * pname:instanceShaderBindingTableRecordOffset and pname:flags occupy the
-    same memory as if a single code:uint32_t was specified in their place
-  ** pname:instanceShaderBindingTableRecordOffset occupies the 24 least
-     significant bits of that memory
-  ** pname:flags occupies the 8 most significant bits of that memory
-
-If a compiler produces code that diverges from that pattern, applications
-must: employ another method to set values according to the correct bit
-pattern.
-
-include::{generated}/validity/structs/VkAccelerationStructureInstanceKHR.txt[]
---
-
-[open,refpage='VkGeometryInstanceFlagBitsKHR',desc='Instance flag bits',type='enums',alias='VkGeometryInstanceFlagBitsNV']
---
-:refpage: VkGeometryInstanceFlagBitsKHR
-
-Possible values of pname:flags in the instance modifying the behavior of
-that instance are:
-
-include::{generated}/api/enums/VkGeometryInstanceFlagBitsKHR.txt[]
-
-ifdef::VK_NV_ray_tracing[]
-or the equivalent
-
-include::{generated}/api/enums/VkGeometryInstanceFlagBitsNV.txt[]
-endif::VK_NV_ray_tracing[]
-
-  * ename:VK_GEOMETRY_INSTANCE_TRIANGLE_FACING_CULL_DISABLE_BIT_KHR disables
-    face culling for this instance.
-  * ename:VK_GEOMETRY_INSTANCE_TRIANGLE_FLIP_FACING_BIT_KHR indicates that
-    the <<ray-traversal-culling-face, facing determination>> for geometry in
-    this instance is inverted.
-    Because the facing is determined in object space, an instance transform
-    does not change the winding, but a geometry transform does.
-  * ename:VK_GEOMETRY_INSTANCE_FORCE_OPAQUE_BIT_KHR causes this instance to
-    act as though ename:VK_GEOMETRY_OPAQUE_BIT_KHR were specified on all
-    geometries referenced by this instance.
-    This behavior can: be overridden by the SPIR-V code:NoOpaqueKHR ray
-    flag.
-  * ename:VK_GEOMETRY_INSTANCE_FORCE_NO_OPAQUE_BIT_KHR causes this instance
-    to act as though ename:VK_GEOMETRY_OPAQUE_BIT_KHR were not specified on
-    all geometries referenced by this instance.
-    This behavior can: be overridden by the SPIR-V code:OpaqueKHR ray flag.
-
-ename:VK_GEOMETRY_INSTANCE_FORCE_NO_OPAQUE_BIT_KHR and
-ename:VK_GEOMETRY_INSTANCE_FORCE_OPAQUE_BIT_KHR must: not be used in the
-same flag.
---
-
-[open,refpage='VkGeometryInstanceFlagsKHR',desc='Bitmask of VkGeometryInstanceFlagBitsKHR',type='flags',alias='VkGeometryInstanceFlagsNV']
---
-:refpage: VkGeometryInstanceFlagsKHR
-
-include::{generated}/api/flags/VkGeometryInstanceFlagsKHR.txt[]
-
-ifdef::VK_NV_ray_tracing[]
-or the equivalent
-
-include::{generated}/api/flags/VkGeometryInstanceFlagsNV.txt[]
-endif::VK_NV_ray_tracing[]
-
-tname:VkGeometryInstanceFlagsKHR is a bitmask type for setting a mask of
-zero or more elink:VkGeometryInstanceFlagBitsKHR.
---
-
-ifdef::VK_NV_ray_tracing_motion_blur[]
-[open,refpage='VkAccelerationStructureMotionInstanceNV',desc='Structure specifying a single acceleration structure motion instance for building into an acceleration structure geometry',type='structs']
---
-:refpage: VkAccelerationStructureMotionInstanceNV
-
-_Acceleration structure motion instances_ can: be built into top-level
-acceleration structures.
-Each acceleration structure instance is a separate entry in the top-level
-acceleration structure which includes all the geometry of a bottom-level
-acceleration structure at a transformed location including a type of motion
-and parameters to determine the motion of the instance over time.
-
-An acceleration structure motion instance is defined by the structure:
-
-include::{generated}/api/structs/VkAccelerationStructureMotionInstanceNV.txt[]
-
-  * pname:type is a elink:VkAccelerationStructureMotionInstanceTypeNV
-    enumerant identifying which type of motion instance this is and which
-    type of the union is valid.
-  * pname:flags is currently unused, but is required to keep natural
-    alignment of pname:data.
-  * pname:data is a slink:VkAccelerationStructureMotionInstanceDataNV
-    containing motion instance data for this instance.
-
-[NOTE]
-.Note
-====
-If writing this other than with a standard C compiler, note that the final
-structure should be 152 bytes in size.
-====
-
-include::{generated}/validity/structs/VkAccelerationStructureMotionInstanceNV.txt[]
---
-
-[open,refpage='VkAccelerationStructureMotionInstanceDataNV',desc='Union specifying a acceleration structure motion instance data for building into an acceleration structure geometry',type='structs']
---
-:refpage: VkAccelerationStructureMotionInstanceDataNV
-
-Acceleration structure motion instance is defined by the union:
-
-include::{generated}/api/structs/VkAccelerationStructureMotionInstanceDataNV.txt[]
-
-  * pname:staticInstance is a slink:VkAccelerationStructureInstanceKHR
-    structure containing data for a static instance.
-  * pname:matrixMotionInstance is a
-    slink:VkAccelerationStructureMatrixMotionInstanceNV structure containing
-    data for a matrix motion instance.
-  * pname:srtMotionInstance is a
-    slink:VkAccelerationStructureSRTMotionInstanceNV structure containing
-    data for an SRT motion instance.
-
-include::{generated}/validity/structs/VkAccelerationStructureMotionInstanceDataNV.txt[]
---
-
-[open,refpage='VkAccelerationStructureMotionInstanceFlagsNV',desc='Reserved for future use',type='flags']
---
-include::{generated}/api/flags/VkAccelerationStructureMotionInstanceFlagsNV.txt[]
-
-tname:VkAccelerationStructureMotionInstanceFlagsNV is a bitmask type for
-setting a mask, but is currently reserved for future use.
---
-
-[open,refpage='VkAccelerationStructureMotionInstanceTypeNV',desc='Enum specifying a type of acceleration structure motion instance data for building into an acceleration structure geometry',type='enums']
---
-:refpage: VkAccelerationStructureMotionInstanceTypeNV
-
-The ename:VkAccelerationStructureMotionInstanceTypeNV enumeration is defined
-as:
-
-include::{generated}/api/enums/VkAccelerationStructureMotionInstanceTypeNV.txt[]
-
-  * ename:VK_ACCELERATION_STRUCTURE_MOTION_INSTANCE_TYPE_STATIC_NV specifies
-    that the instance is a static instance with no instance motion.
-  * ename:VK_ACCELERATION_STRUCTURE_MOTION_INSTANCE_TYPE_MATRIX_MOTION_NV
-    specifies that the instance is a motion instance with motion specified
-    by interpolation between two matrices.
-  * ename:VK_ACCELERATION_STRUCTURE_MOTION_INSTANCE_TYPE_SRT_MOTION_NV
-    specifies that the instance is a motion instance with motion specified
-    by interpolation in the SRT decomposition.
---
-
-[open,refpage='VkAccelerationStructureMatrixMotionInstanceNV',desc='Structure specifying a single acceleration structure matrix motion instance for building into an acceleration structure geometry',type='structs']
---
-:refpage: VkAccelerationStructureMatrixMotionInstanceNV
-
-An acceleration structure matrix motion instance is defined by the
-structure:
-
-include::{generated}/api/structs/VkAccelerationStructureMatrixMotionInstanceNV.txt[]
-
-  * pname:transformT0 is a slink:VkTransformMatrixKHR structure describing a
-    transformation to be applied to the acceleration structure at time 0.
-  * pname:transformT1 is a slink:VkTransformMatrixKHR structure describing a
-    transformation to be applied to the acceleration structure at time 1.
-  * pname:instanceCustomIndex is a 24-bit user-specified index value
-    accessible to ray shaders in the code:InstanceCustomIndexKHR built-in.
-  * pname:mask is an 8-bit visibility mask for the geometry.
-    The instance may: only be hit if `Cull Mask & instance.mask != 0`
-  * pname:instanceShaderBindingTableRecordOffset is a 24-bit offset used in
-    calculating the hit shader binding table index.
-  * pname:flags is an 8-bit mask of elink:VkGeometryInstanceFlagBitsKHR
-    values to apply to this instance.
-  * pname:accelerationStructureReference is either:
-  ** a device address containing the value obtained from
-ifdef::VK_KHR_acceleration_structure[flink:vkGetAccelerationStructureDeviceAddressKHR]
-ifdef::VK_KHR_acceleration_structure+VK_NV_ray_tracing[or]
-ifdef::VK_NV_ray_tracing[flink:vkGetAccelerationStructureHandleNV]
-     (used by device operations which reference acceleration structures) or,
-  ** a slink:VkAccelerationStructureKHR object (used by host operations
-     which reference acceleration structures).
-
-The C language specification does not define the ordering of bit-fields, but
-in practice, this struct produces the correct layout with existing
-compilers.
-The intended bit pattern is for the following:
-
-  * pname:instanceCustomIndex and pname:mask occupy the same memory as if a
-    single code:uint32_t was specified in their place
-  ** pname:instanceCustomIndex occupies the 24 least significant bits of
-     that memory
-  ** pname:mask occupies the 8 most significant bits of that memory
-  * pname:instanceShaderBindingTableRecordOffset and pname:flags occupy the
-    same memory as if a single code:uint32_t was specified in their place
-  ** pname:instanceShaderBindingTableRecordOffset occupies the 24 least
-     significant bits of that memory
-  ** pname:flags occupies the 8 most significant bits of that memory
-
-If a compiler produces code that diverges from that pattern, applications
-must: employ another method to set values according to the correct bit
-pattern.
-
-The transform for a matrix motion instance at a point in time is derived by
-component-wise linear interpolation of the two transforms.
-That is, for a code:time in [0,1] the resulting transform is
-
-  {empty}:: [eq]#pname:transformT0 {times} (1 - code:time) {plus}
-            pname:transformT1 {times} code:time#
-
-include::{generated}/validity/structs/VkAccelerationStructureMatrixMotionInstanceNV.txt[]
---
-
-[open,refpage='VkAccelerationStructureSRTMotionInstanceNV',desc='Structure specifying a single acceleration structure SRT motion instance for building into an acceleration structure geometry',type='structs']
---
-:refpage: VkAccelerationStructureSRTMotionInstanceNV
-
-An acceleration structure SRT motion instance is defined by the structure:
-
-include::{generated}/api/structs/VkAccelerationStructureSRTMotionInstanceNV.txt[]
-
-  * pname:transformT0 is a slink:VkSRTDataNV structure describing a
-    transformation to be applied to the acceleration structure at time 0.
-  * pname:transformT1 is a slink:VkSRTDataNV structure describing a
-    transformation to be applied to the acceleration structure at time 1.
-  * pname:instanceCustomIndex is a 24-bit user-specified index value
-    accessible to ray shaders in the code:InstanceCustomIndexKHR built-in.
-  * pname:mask is an 8-bit visibility mask for the geometry.
-    The instance may: only be hit if `Cull Mask & instance.mask != 0`
-  * pname:instanceShaderBindingTableRecordOffset is a 24-bit offset used in
-    calculating the hit shader binding table index.
-  * pname:flags is an 8-bit mask of elink:VkGeometryInstanceFlagBitsKHR
-    values to apply to this instance.
-  * pname:accelerationStructureReference is either:
-  ** a device address containing the value obtained from
-ifdef::VK_KHR_acceleration_structure[flink:vkGetAccelerationStructureDeviceAddressKHR]
-ifdef::VK_KHR_acceleration_structure+VK_NV_ray_tracing[or]
-ifdef::VK_NV_ray_tracing[flink:vkGetAccelerationStructureHandleNV]
-     (used by device operations which reference acceleration structures) or,
-  ** a slink:VkAccelerationStructureKHR object (used by host operations
-     which reference acceleration structures).
-
-The C language specification does not define the ordering of bit-fields, but
-in practice, this struct produces the correct layout with existing
-compilers.
-The intended bit pattern is for the following:
-
-  * pname:instanceCustomIndex and pname:mask occupy the same memory as if a
-    single code:uint32_t was specified in their place
-  ** pname:instanceCustomIndex occupies the 24 least significant bits of
-     that memory
-  ** pname:mask occupies the 8 most significant bits of that memory
-  * pname:instanceShaderBindingTableRecordOffset and pname:flags occupy the
-    same memory as if a single code:uint32_t was specified in their place
-  ** pname:instanceShaderBindingTableRecordOffset occupies the 24 least
-     significant bits of that memory
-  ** pname:flags occupies the 8 most significant bits of that memory
-
-If a compiler produces code that diverges from that pattern, applications
-must: employ another method to set values according to the correct bit
-pattern.
-
-The transform for a SRT motion instance at a point in time is derived from
-component-wise linear interpolation of the two SRT transforms.
-That is, for a code:time in [0,1] the resulting transform is
-
-  {empty}:: [eq]#pname:transformT0 {times} (1 - code:time) {plus}
-            pname:transformT1 {times} code:time#
-
-include::{generated}/validity/structs/VkAccelerationStructureSRTMotionInstanceNV.txt[]
---
-
-[open,refpage='VkSRTDataNV',desc='Structure specifying a transform in SRT decomposition',type='structs']
---
-:refpage: VkSRTDataNV
-
-An acceleration structure SRT transform is defined by the structure:
-
-include::{generated}/api/structs/VkSRTDataNV.txt[]
-
-  * pname:sx is the x component of the scale of the transform
-  * pname:a is one component of the shear for the transform
-  * pname:b is one component of the shear for the transform
-  * pname:pvx is the x component of the pivot point of the transform
-  * pname:sy is the y component of the scale of the transform
-  * pname:c is one component of the shear for the transform
-  * pname:pvy is the y component of the pivot point of the transform
-  * pname:sz is the z component of the scale of the transform
-  * pname:pvz is the z component of the pivot point of the transform
-  * pname:qx is the x component of the rotation quaternion
-  * pname:qy is the y component of the rotation quaternion
-  * pname:qz is the z component of the rotation quaternion
-  * pname:qw is the w component of the rotation quaternion
-  * pname:tx is the x component of the post-rotation translation
-  * pname:ty is the y component of the post-rotation translation
-  * pname:tz is the z component of the post-rotation translation
-
-This transform decomposition consists of three elements.
-The first is a matrix S, consisting of a scale, shear, and translation,
-usually used to define the pivot point of the following rotation.
-This matrix is constructed from the parameters above by:
-
-[latexmath]
-++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-S =
-\left(
-    \begin{matrix}
-        sx & a  & b  & pvx \\
-        0  & sy & c  & pvy \\
-        0  & 0  & sz & pvz
-    \end{matrix}
-\right)
-++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-The rotation quaternion is defined as:
-
-  {empty}:: [eq]#code:R = [ pname:qx, pname:qy, pname:qz, pname:qw ]#
-
-This is a rotation around a conceptual normalized axis [eq]#[ ax, ay, az ]#
-of amount code:theta such that:
-
-  {empty}:: [eq]#[ pname:qx, pname:qy, pname:qz ] = sin(code:theta/2)
-            {times} [ code:ax, code:ay, code:az ]#
-
-and
-
-  {empty}:: [eq]#pname:qw = cos(code:theta/2)#
-
-Finally, the transform has a translation T constructed from the parameters
-above by:
-
-[latexmath]
-++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-T =
-\left(
-    \begin{matrix}
-        1 & 0 & 0 & tx \\
-        0 & 1 & 0 & ty \\
-        0 & 0 & 1 & tz
-    \end{matrix}
-\right)
-++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-The effective derived transform is then given by
-
-  {empty}:: [eq]#code:T {times} code:R {times} code:S#
-
-include::{generated}/validity/structs/VkSRTDataNV.txt[]
---
-endif::VK_NV_ray_tracing_motion_blur[]
-
-ifdef::VK_KHR_acceleration_structure[]
-[open,refpage='VkAccelerationStructureBuildRangeInfoKHR',desc='Structure specifying build offsets and counts for acceleration structure builds',type='structs']
---
-:refpage: VkAccelerationStructureBuildOffsetInfoKHR
-
-sname:VkAccelerationStructureBuildRangeInfoKHR is defined as:
-
-include::{generated}/api/structs/VkAccelerationStructureBuildRangeInfoKHR.txt[]
-
-  * pname:primitiveCount defines the number of primitives for a
-    corresponding acceleration structure geometry.
-  * pname:primitiveOffset defines an offset in bytes into the memory where
-    primitive data is defined.
-  * pname:firstVertex is the index of the first vertex to build from for
-    triangle geometry.
-  * pname:transformOffset defines an offset in bytes into the memory where a
-    transform matrix is defined.
-
-The primitive count and primitive offset are interpreted differently
-depending on the elink:VkGeometryTypeKHR used:
-
-  * For geometries of type ename:VK_GEOMETRY_TYPE_TRIANGLES_KHR,
-    pname:primitiveCount is the number of triangles to be built, where each
-    triangle is treated as 3 vertices.
-  ** If the geometry uses indices, [eq]#pname:primitiveCount {times} 3#
-     indices are consumed from
-     slink:VkAccelerationStructureGeometryTrianglesDataKHR::pname:indexData,
-     starting at an offset of pname:primitiveOffset.
-     The value of pname:firstVertex is added to the index values before
-     fetching vertices.
-  ** If the geometry does not use indices, [eq]#pname:primitiveCount {times}
-     3# vertices are consumed from
-     slink:VkAccelerationStructureGeometryTrianglesDataKHR::pname:vertexData,
-     starting at an offset of [eq]#pname:primitiveOffset {plus}
-     slink:VkAccelerationStructureGeometryTrianglesDataKHR::pname:vertexStride
-     {times} pname:firstVertex#.
-  ** If
-     slink:VkAccelerationStructureGeometryTrianglesDataKHR::pname:transformData
-     is not `NULL`, a single slink:VkTransformMatrixKHR structure is
-     consumed from
-     slink:VkAccelerationStructureGeometryTrianglesDataKHR::pname:transformData,
-     at an offset of pname:transformOffset.
-     This matrix describes a transformation from the space in which the
-     vertices for all triangles in this geometry are described to the space
-     in which the acceleration structure is defined.
-  * For geometries of type ename:VK_GEOMETRY_TYPE_AABBS_KHR,
-    pname:primitiveCount is the number of axis-aligned bounding boxes.
-    pname:primitiveCount slink:VkAabbPositionsKHR structures are consumed
-    from slink:VkAccelerationStructureGeometryAabbsDataKHR::pname:data,
-    starting at an offset of pname:primitiveOffset.
-  * For geometries of type ename:VK_GEOMETRY_TYPE_INSTANCES_KHR,
-    pname:primitiveCount is the number of acceleration structures.
-    pname:primitiveCount slink:VkAccelerationStructureInstanceKHR
-ifdef::VK_NV_ray_tracing_motion_blur[]
-    or slink:VkAccelerationStructureMotionInstanceNV
-endif::VK_NV_ray_tracing_motion_blur[]
-    structures are consumed from
-    slink:VkAccelerationStructureGeometryInstancesDataKHR::pname:data,
-    starting at an offset of pname:primitiveOffset.
-
-.Valid Usage
-****
-  * [[VUID-VkAccelerationStructureBuildRangeInfoKHR-primitiveOffset-03656]]
-    For geometries of type ename:VK_GEOMETRY_TYPE_TRIANGLES_KHR, if the
-    geometry uses indices, the offset pname:primitiveOffset from
-    slink:VkAccelerationStructureGeometryTrianglesDataKHR::pname:indexData
-    must: be a multiple of the element size of
-    slink:VkAccelerationStructureGeometryTrianglesDataKHR::pname:indexType
-  * [[VUID-VkAccelerationStructureBuildRangeInfoKHR-primitiveOffset-03657]]
-    For geometries of type ename:VK_GEOMETRY_TYPE_TRIANGLES_KHR, if the
-    geometry does not use indices, the offset pname:primitiveOffset from
-    slink:VkAccelerationStructureGeometryTrianglesDataKHR::pname:vertexData
-    must: be a multiple of the component size of
-    slink:VkAccelerationStructureGeometryTrianglesDataKHR::pname:vertexFormat
-  * [[VUID-VkAccelerationStructureBuildRangeInfoKHR-transformOffset-03658]]
-    For geometries of type ename:VK_GEOMETRY_TYPE_TRIANGLES_KHR, the offset
-    pname:transformOffset from
-    slink:VkAccelerationStructureGeometryTrianglesDataKHR::pname:transformData
-    must: be a multiple of 16
-  * [[VUID-VkAccelerationStructureBuildRangeInfoKHR-primitiveOffset-03659]]
-    For geometries of type ename:VK_GEOMETRY_TYPE_AABBS_KHR, the offset
-    pname:primitiveOffset from
-    slink:VkAccelerationStructureGeometryAabbsDataKHR::pname:data must: be a
-    multiple of 8
-  * [[VUID-VkAccelerationStructureBuildRangeInfoKHR-primitiveOffset-03660]]
-    For geometries of type ename:VK_GEOMETRY_TYPE_INSTANCES_KHR, the offset
-    pname:primitiveOffset from
-    slink:VkAccelerationStructureGeometryInstancesDataKHR::pname:data must:
-    be a multiple of 16
-****
-
-include::{generated}/validity/structs/VkAccelerationStructureBuildRangeInfoKHR.txt[]
---
-endif::VK_KHR_acceleration_structure[]
-
-
-[[acceleration-structure-copying]]
-=== Copying Acceleration Structures
-
-An additional command exists for copying acceleration structures without
-updating their contents.
-The acceleration structure object can: be compacted in order to improve
-performance.
-Before copying, an application must: query the size of the resulting
-acceleration structure.
-
-[open,refpage='vkCmdWriteAccelerationStructuresPropertiesKHR',desc='Write acceleration structure result parameters to query results.',type='protos']
---
-:refpage: vkCmdWriteAccelerationStructuresPropertiesKHR
-
-To query acceleration structure size parameters call:
-
-ifdef::VK_KHR_acceleration_structure[]
-include::{generated}/api/protos/vkCmdWriteAccelerationStructuresPropertiesKHR.txt[]
-endif::VK_KHR_acceleration_structure[]
-
-  * pname:commandBuffer is the command buffer into which the command will be
-    recorded.
-  * pname:accelerationStructureCount is the count of acceleration structures
-    for which to query the property.
-  * pname:pAccelerationStructures is a pointer to an array of existing
-    previously built acceleration structures.
-  * pname:queryType is a elink:VkQueryType value specifying the type of
-    queries managed by the pool.
-  * pname:queryPool is the query pool that will manage the results of the
-    query.
-  * pname:firstQuery is the first query index within the query pool that
-    will contain the pname:accelerationStructureCount number of results.
-
-Accesses to any of the acceleration structures listed in
-pname:pAccelerationStructures must: be <<synchronization-dependencies,
-synchronized>> with the
-ename:VK_PIPELINE_STAGE_ACCELERATION_STRUCTURE_BUILD_BIT_KHR
-<<synchronization-pipeline-stages, pipeline stage>> and an
-<<synchronization-access-types, access type>> of
-ename:VK_ACCESS_ACCELERATION_STRUCTURE_READ_BIT_KHR.
-
-  * If pname:queryType is
-    ename:VK_QUERY_TYPE_ACCELERATION_STRUCTURE_COMPACTED_SIZE_KHR, then the
-    value written out is the number of bytes required by a compacted
-    acceleration structure.
-  * If pname:queryType is
-    ename:VK_QUERY_TYPE_ACCELERATION_STRUCTURE_SERIALIZATION_SIZE_KHR, then
-    the value written out is the number of bytes required by a serialized
-    acceleration structure.
-
-.Valid Usage
-****
-  * [[VUID-vkCmdWriteAccelerationStructuresPropertiesKHR-queryPool-02493]]
-    pname:queryPool must: have been created with a pname:queryType matching
-    pname:queryType
-  * [[VUID-vkCmdWriteAccelerationStructuresPropertiesKHR-queryPool-02494]]
-    The queries identified by pname:queryPool and pname:firstQuery must: be
-    _unavailable_
-  * [[VUID-vkCmdWriteAccelerationStructuresPropertiesKHR-buffer-03736]]
-    The pname:buffer used to create each acceleration structure in
-    pname:pAccelerationStructures must: be bound to device memory
-  * [[VUID-vkCmdWriteAccelerationStructuresPropertiesKHR-query-04880]]
-    The sum of pname:query plus pname:accelerationStructureCount must: be
-    less than or equal to the number of queries in pname:queryPool
-include::{chapters}/commonvalidity/write_acceleration_structure_properties_common.txt[]
-****
-
-include::{generated}/validity/protos/vkCmdWriteAccelerationStructuresPropertiesKHR.txt[]
---
-
-ifdef::VK_NV_ray_tracing[]
-[open,refpage='vkCmdWriteAccelerationStructuresPropertiesNV',desc='Write acceleration structure result parameters to query results.',type='protos']
---
-:refpage: vkCmdWriteAccelerationStructuresPropertiesNV
-
-To query acceleration structure size parameters call:
-
-include::{generated}/api/protos/vkCmdWriteAccelerationStructuresPropertiesNV.txt[]
-
-
-  * pname:commandBuffer is the command buffer into which the command will be
-    recorded.
-  * pname:accelerationStructureCount is the count of acceleration structures
-    for which to query the property.
-  * pname:pAccelerationStructures is a pointer to an array of existing
-    previously built acceleration structures.
-  * pname:queryType is a elink:VkQueryType value specifying the type of
-    queries managed by the pool.
-  * pname:queryPool is the query pool that will manage the results of the
-    query.
-  * pname:firstQuery is the first query index within the query pool that
-    will contain the pname:accelerationStructureCount number of results.
-
-Accesses to any of the acceleration structures listed in
-pname:pAccelerationStructures must: be <<synchronization-dependencies,
-synchronized>> with the
-ename:VK_PIPELINE_STAGE_ACCELERATION_STRUCTURE_BUILD_BIT_KHR
-<<synchronization-pipeline-stages, pipeline stage>> and an
-<<synchronization-access-types, access type>> of
-ename:VK_ACCESS_ACCELERATION_STRUCTURE_READ_BIT_KHR.
-
-.Valid Usage
-****
-  * [[VUID-vkCmdWriteAccelerationStructuresPropertiesNV-queryPool-03755]]
-    pname:queryPool must: have been created with a pname:queryType matching
-    pname:queryType
-  * [[VUID-vkCmdWriteAccelerationStructuresPropertiesNV-queryPool-03756]]
-    The queries identified by pname:queryPool and pname:firstQuery must: be
-    _unavailable_
-  * [[VUID-vkCmdWriteAccelerationStructuresPropertiesNV-accelerationStructure-03757]]
-    pname:accelerationStructure must: be bound completely and contiguously
-    to a single sname:VkDeviceMemory object via
-    flink:vkBindAccelerationStructureMemoryNV
-  * [[VUID-vkCmdWriteAccelerationStructuresPropertiesNV-pAccelerationStructures-04958]]
-    All acceleration structures in pname:pAccelerationStructures must: have
-    been built prior to the execution of this command
-  * [[VUID-vkCmdWriteAccelerationStructuresPropertiesNV-pAccelerationStructures-06215]]
-    All acceleration structures in pname:pAccelerationStructures must: have
-    been built with
-    ename:VK_BUILD_ACCELERATION_STRUCTURE_ALLOW_COMPACTION_BIT_KHR if
-    pname:queryType is
-    ename:VK_QUERY_TYPE_ACCELERATION_STRUCTURE_COMPACTED_SIZE_NV
-  * [[VUID-vkCmdWriteAccelerationStructuresPropertiesNV-queryType-06216]]
-    pname:queryType must: be
-    ename:VK_QUERY_TYPE_ACCELERATION_STRUCTURE_COMPACTED_SIZE_NV
-****
-
-include::{generated}/validity/protos/vkCmdWriteAccelerationStructuresPropertiesNV.txt[]
---
-
-[open,refpage='vkCmdCopyAccelerationStructureNV',desc='Copy an acceleration structure',type='protos']
---
-:refpage: vkCmdCopyAccelerationStructureNV
-
-To copy an acceleration structure call:
-
-include::{generated}/api/protos/vkCmdCopyAccelerationStructureNV.txt[]
-
-  * pname:commandBuffer is the command buffer into which the command will be
-    recorded.
-  * pname:dst is the target acceleration structure for the copy.
-  * pname:src is the source acceleration structure for the copy.
-  * pname:mode is a elink:VkCopyAccelerationStructureModeKHR value
-    specifying additional operations to perform during the copy.
-
-Accesses to pname:src and pname:dst must: be <<synchronization-dependencies,
-synchronized>> with the
-ename:VK_PIPELINE_STAGE_ACCELERATION_STRUCTURE_BUILD_BIT_KHR
-<<synchronization-pipeline-stages, pipeline stage>> and an
-<<synchronization-access-types, access type>> of
-ename:VK_ACCESS_ACCELERATION_STRUCTURE_READ_BIT_KHR or
-ename:VK_ACCESS_ACCELERATION_STRUCTURE_WRITE_BIT_KHR as appropriate.
-
-.Valid Usage
-****
-include::{chapters}/commonvalidity/copy_acceleration_structure_common.txt[]
-****
-
-include::{generated}/validity/protos/vkCmdCopyAccelerationStructureNV.txt[]
---
-endif::VK_NV_ray_tracing[]
-
-ifdef::VK_KHR_acceleration_structure[]
-[open,refpage='vkCmdCopyAccelerationStructureKHR',desc='Copy an acceleration structure',type='protos']
---
-:refpage: vkCmdCopyAccelerationStructureKHR
-
-To copy an acceleration structure call:
-
-include::{generated}/api/protos/vkCmdCopyAccelerationStructureKHR.txt[]
-
-  * pname:commandBuffer is the command buffer into which the command will be
-    recorded.
-  * pname:pInfo is a pointer to a slink:VkCopyAccelerationStructureInfoKHR
-    structure defining the copy operation.
-
-This command copies the pname:pInfo->src acceleration structure to the
-pname:pInfo->dst acceleration structure in the manner specified by
-pname:pInfo->mode.
-
-Accesses to pname:pInfo->src and pname:pInfo->dst must: be
-<<synchronization-dependencies, synchronized>> with the
-ename:VK_PIPELINE_STAGE_ACCELERATION_STRUCTURE_BUILD_BIT_KHR
-<<synchronization-pipeline-stages, pipeline stage>> and an
-<<synchronization-access-types, access type>> of
-ename:VK_ACCESS_ACCELERATION_STRUCTURE_READ_BIT_KHR or
-ename:VK_ACCESS_ACCELERATION_STRUCTURE_WRITE_BIT_KHR as appropriate.
-
-.Valid Usage
-****
-  * [[VUID-vkCmdCopyAccelerationStructureKHR-buffer-03737]]
-    The pname:buffer used to create pname:pInfo->src must: be bound to
-    device memory
-  * [[VUID-vkCmdCopyAccelerationStructureKHR-buffer-03738]]
-    The pname:buffer used to create pname:pInfo->dst must: be bound to
-    device memory
-****
-
-include::{generated}/validity/protos/vkCmdCopyAccelerationStructureKHR.txt[]
---
-
-[open,refpage='VkCopyAccelerationStructureInfoKHR',desc='Parameters for copying an acceleration structure',type='structs']
---
-:refpage: VkCopyAccelerationStructureInfoKHR
-
-The sname:VkCopyAccelerationStructureInfoKHR structure is defined as:
-
-include::{generated}/api/structs/VkCopyAccelerationStructureInfoKHR.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:src is the source acceleration structure for the copy.
-  * pname:dst is the target acceleration structure for the copy.
-  * pname:mode is a elink:VkCopyAccelerationStructureModeKHR value that
-    specifies additional operations to perform during the copy.
-
-.Valid Usage
-****
-include::{chapters}/commonvalidity/copy_acceleration_structure_common.txt[]
-****
-
-include::{generated}/validity/structs/VkCopyAccelerationStructureInfoKHR.txt[]
---
-endif::VK_KHR_acceleration_structure[]
-
-[open,refpage='VkCopyAccelerationStructureModeKHR',desc='Acceleration structure copy mode',type='enums',alias='VkCopyAccelerationStructureModeNV']
---
-:refpage: VkCopyAccelerationStructureModeKHR
-
-Possible values of pname:mode specifying additional operations to perform
-during the copy, are:
-
-include::{generated}/api/enums/VkCopyAccelerationStructureModeKHR.txt[]
-
-ifdef::VK_NV_ray_tracing[]
-or the equivalent
-
-include::{generated}/api/enums/VkCopyAccelerationStructureModeNV.txt[]
-endif::VK_NV_ray_tracing[]
-
-  * ename:VK_COPY_ACCELERATION_STRUCTURE_MODE_CLONE_KHR creates a direct
-    copy of the acceleration structure specified in pname:src into the one
-    specified by pname:dst.
-    The pname:dst acceleration structure must: have been created with the
-    same parameters as pname:src.
-    If pname:src contains references to other acceleration structures,
-    pname:dst will reference the same acceleration structures.
-  * ename:VK_COPY_ACCELERATION_STRUCTURE_MODE_COMPACT_KHR creates a more
-    compact version of an acceleration structure pname:src into pname:dst.
-    The acceleration structure pname:dst must: have been created with a size
-    at least as large as that returned by
-    flink:vkCmdWriteAccelerationStructuresPropertiesKHR
-ifdef::VK_KHR_acceleration_structure[]
-    or flink:vkWriteAccelerationStructuresPropertiesKHR
-endif::VK_KHR_acceleration_structure[]
-    after the build of the acceleration structure specified by pname:src.
-    If pname:src contains references to other acceleration structures,
-    pname:dst will reference the same acceleration structures.
-  * ename:VK_COPY_ACCELERATION_STRUCTURE_MODE_SERIALIZE_KHR serializes the
-    acceleration structure to a semi-opaque format which can be reloaded on
-    a compatible implementation.
-  * ename:VK_COPY_ACCELERATION_STRUCTURE_MODE_DESERIALIZE_KHR deserializes
-    the semi-opaque serialization format in the buffer to the acceleration
-    structure.
---
-
-[open,refpage='vkCmdCopyAccelerationStructureToMemoryKHR',desc='Copy an acceleration structure to device memory',type='protos']
---
-:refpage: vkCmdCopyAccelerationStructureToMemoryKHR
-
-To copy an acceleration structure to device memory call:
-
-include::{generated}/api/protos/vkCmdCopyAccelerationStructureToMemoryKHR.txt[]
-
-  * pname:commandBuffer is the command buffer into which the command will be
-    recorded.
-  * pname:pInfo is an a pointer to a
-    slink:VkCopyAccelerationStructureToMemoryInfoKHR structure defining the
-    copy operation.
-
-Accesses to pname:pInfo->src must: be <<synchronization-dependencies,
-synchronized>> with the
-ename:VK_PIPELINE_STAGE_ACCELERATION_STRUCTURE_BUILD_BIT_KHR
-<<synchronization-pipeline-stages, pipeline stage>> and an
-<<synchronization-access-types, access type>> of
-ename:VK_ACCESS_ACCELERATION_STRUCTURE_READ_BIT_KHR.
-Accesses to the buffer indicated by pname:pInfo->dst.deviceAddress must: be
-synchronized with the
-ename:VK_PIPELINE_STAGE_ACCELERATION_STRUCTURE_BUILD_BIT_KHR pipeline stage
-and an access type of ename:VK_ACCESS_TRANSFER_WRITE_BIT.
-
-This command produces the same results as
-flink:vkCopyAccelerationStructureToMemoryKHR, but writes its result to a
-device address, and is executed on the device rather than the host.
-The output may: not necessarily be bit-for-bit identical, but it can be
-equally used by either flink:vkCmdCopyMemoryToAccelerationStructureKHR or
-flink:vkCopyMemoryToAccelerationStructureKHR.
-
-The defined header structure for the serialized data consists of:
-
-  * ename:VK_UUID_SIZE bytes of data matching
-    sname:VkPhysicalDeviceIDProperties::pname:driverUUID
-  * ename:VK_UUID_SIZE bytes of data identifying the compatibility for
-    comparison using flink:vkGetDeviceAccelerationStructureCompatibilityKHR
-  * A 64-bit integer of the total size matching the value queried using
-    ename:VK_QUERY_TYPE_ACCELERATION_STRUCTURE_SERIALIZATION_SIZE_KHR
-  * A 64-bit integer of the deserialized size to be passed in to
-    sname:VkAccelerationStructureCreateInfoKHR::pname:size
-  * A 64-bit integer of the count of the number of acceleration structure
-    handles following.
-    This will be zero for a bottom-level acceleration structure.
-    For top-level acceleration structures this number is
-    implementation-dependent; the number of and ordering of the handles may
-    not match the instance descriptions which were used to build the
-    acceleration structure.
-
-The corresponding handles matching the values returned by
-ifdef::VK_KHR_acceleration_structure[flink:vkGetAccelerationStructureDeviceAddressKHR]
-ifdef::VK_KHR_acceleration_structure+VK_NV_ray_tracing[or]
-ifdef::VK_NV_ray_tracing[flink:vkGetAccelerationStructureHandleNV]
-are tightly packed in the buffer following the count.
-The application is expected to store a mapping between those handles and the
-original application-generated bottom-level acceleration structures to
-provide when deserializing.
-The serialized data is written to the buffer (or read from the buffer)
-according to the host endianness.
-
-.Valid Usage
-****
-  * [[VUID-vkCmdCopyAccelerationStructureToMemoryKHR-pInfo-03739]]
-    pname:pInfo->dst.deviceAddress must: be a valid device address for a
-    buffer bound to device memory
-  * [[VUID-vkCmdCopyAccelerationStructureToMemoryKHR-pInfo-03740]]
-    pname:pInfo->dst.deviceAddress must: be aligned to `256` bytes
-  * [[VUID-vkCmdCopyAccelerationStructureToMemoryKHR-pInfo-03741]]
-    If the buffer pointed to by pname:pInfo->dst.deviceAddress is non-sparse
-    then it must: be bound completely and contiguously to a single
-    slink:VkDeviceMemory object
-  * [[VUID-vkCmdCopyAccelerationStructureToMemoryKHR-None-03559]]
-    The pname:buffer used to create pname:pInfo->src must: be bound to
-    device memory
-****
-
-include::{generated}/validity/protos/vkCmdCopyAccelerationStructureToMemoryKHR.txt[]
---
-
-[open,refpage='VkCopyAccelerationStructureToMemoryInfoKHR',desc='Parameters for serializing an acceleration structure',type='structs']
---
-:refpage: VkCopyAccelerationStructureToMemoryInfoKHR
-
-include::{generated}/api/structs/VkCopyAccelerationStructureToMemoryInfoKHR.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:src is the source acceleration structure for the copy
-  * pname:dst is the device or host address to memory which is the target
-    for the copy
-  * pname:mode is a elink:VkCopyAccelerationStructureModeKHR value that
-    specifies additional operations to perform during the copy.
-
-.Valid Usage
-****
-  * [[VUID-VkCopyAccelerationStructureToMemoryInfoKHR-src-04959]]
-    The source acceleration structure pname:src must: have been constructed
-    prior to the execution of this command
-  * [[VUID-VkCopyAccelerationStructureToMemoryInfoKHR-dst-03561]]
-    The memory pointed to by pname:dst must: be at least as large as the
-    serialization size of pname:src, as reported by
-    flink:vkWriteAccelerationStructuresPropertiesKHR or
-    flink:vkCmdWriteAccelerationStructuresPropertiesKHR with a query type of
-    ename:VK_QUERY_TYPE_ACCELERATION_STRUCTURE_SERIALIZATION_SIZE_KHR
-  * [[VUID-VkCopyAccelerationStructureToMemoryInfoKHR-mode-03412]]
-    pname:mode must: be
-    ename:VK_COPY_ACCELERATION_STRUCTURE_MODE_SERIALIZE_KHR
-****
-
-include::{generated}/validity/structs/VkCopyAccelerationStructureToMemoryInfoKHR.txt[]
---
-
-[open,refpage='vkCmdCopyMemoryToAccelerationStructureKHR',desc='Copy device memory to an acceleration structure',type='protos']
---
-:refpage: vkCmdCopyMemoryToAccelerationStructureKHR
-
-To copy device memory to an acceleration structure call:
-
-include::{generated}/api/protos/vkCmdCopyMemoryToAccelerationStructureKHR.txt[]
-
-  * pname:commandBuffer is the command buffer into which the command will be
-    recorded.
-  * pname:pInfo is a pointer to a
-    slink:VkCopyMemoryToAccelerationStructureInfoKHR structure defining the
-    copy operation.
-
-Accesses to pname:pInfo->dst must: be <<synchronization-dependencies,
-synchronized>> with the
-ename:VK_PIPELINE_STAGE_ACCELERATION_STRUCTURE_BUILD_BIT_KHR
-<<synchronization-pipeline-stages, pipeline stage>> and an
-<<synchronization-access-types, access type>> of
-ename:VK_ACCESS_ACCELERATION_STRUCTURE_WRITE_BIT_KHR.
-Accesses to the buffer indicated by pname:pInfo->src.deviceAddress must: be
-synchronized with the
-ename:VK_PIPELINE_STAGE_ACCELERATION_STRUCTURE_BUILD_BIT_KHR pipeline stage
-and an access type of ename:VK_ACCESS_TRANSFER_READ_BIT.
-
-This command can accept acceleration structures produced by either
-flink:vkCmdCopyAccelerationStructureToMemoryKHR or
-flink:vkCopyAccelerationStructureToMemoryKHR.
-
-The structure provided as input to deserialize is as described in
-flink:vkCmdCopyAccelerationStructureToMemoryKHR, with any acceleration
-structure handles filled in with the newly-queried handles to bottom level
-acceleration structures created before deserialization.
-These do not need to be built at deserialize time, but must: be created.
-
-.Valid Usage
-****
-  * [[VUID-vkCmdCopyMemoryToAccelerationStructureKHR-pInfo-03742]]
-    pname:pInfo->src.deviceAddress must: be a valid device address for a
-    buffer bound to device memory
-  * [[VUID-vkCmdCopyMemoryToAccelerationStructureKHR-pInfo-03743]]
-    pname:pInfo->src.deviceAddress must: be aligned to `256` bytes
-  * [[VUID-vkCmdCopyMemoryToAccelerationStructureKHR-pInfo-03744]]
-    If the buffer pointed to by pname:pInfo->src.deviceAddress is non-sparse
-    then it must: be bound completely and contiguously to a single
-    slink:VkDeviceMemory object
-  * [[VUID-vkCmdCopyMemoryToAccelerationStructureKHR-buffer-03745]]
-    The pname:buffer used to create pname:pInfo->dst must: be bound to
-    device memory
-****
-
-include::{generated}/validity/protos/vkCmdCopyMemoryToAccelerationStructureKHR.txt[]
---
-
-[open,refpage='VkCopyMemoryToAccelerationStructureInfoKHR',desc='Parameters for deserializing an acceleration structure',type='structs']
---
-:refpage: VkCopyMemoryToAccelerationStructureInfoKHR
-
-The sname:VkCopyMemoryToAccelerationStructureInfoKHR structure is defined
-as:
-
-include::{generated}/api/structs/VkCopyMemoryToAccelerationStructureInfoKHR.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:src is the device or host address to memory containing the source
-    data for the copy.
-  * pname:dst is the target acceleration structure for the copy.
-  * pname:mode is a elink:VkCopyAccelerationStructureModeKHR value that
-    specifies additional operations to perform during the copy.
-
-.Valid Usage
-****
-  * [[VUID-VkCopyMemoryToAccelerationStructureInfoKHR-src-04960]]
-    The source memory pointed to by pname:src must: contain data previously
-    serialized using flink:vkCmdCopyAccelerationStructureToMemoryKHR,
-    potentially modified to relocate acceleration structure references as
-    described in that command
-  * [[VUID-VkCopyMemoryToAccelerationStructureInfoKHR-mode-03413]]
-    pname:mode must: be
-    ename:VK_COPY_ACCELERATION_STRUCTURE_MODE_DESERIALIZE_KHR
-  * [[VUID-VkCopyMemoryToAccelerationStructureInfoKHR-pInfo-03414]]
-    The data in pname:src must: have a format compatible with the
-    destination physical device as returned by
-    flink:vkGetDeviceAccelerationStructureCompatibilityKHR
-  * [[VUID-VkCopyMemoryToAccelerationStructureInfoKHR-dst-03746]]
-    pname:dst must: have been created with a pname:size greater than or
-    equal to that used to serialize the data in pname:src
-****
-
-include::{generated}/validity/structs/VkCopyMemoryToAccelerationStructureInfoKHR.txt[]
---
-
-[open,refpage='vkGetDeviceAccelerationStructureCompatibilityKHR',desc='Check if a serialized acceleration structure is compatible with the current device',type='protos']
---
-:refpage: vkGetDeviceAccelerationStructureCompatibilityKHR
-
-To check if a serialized acceleration structure is compatible with the
-current device call:
-
-include::{generated}/api/protos/vkGetDeviceAccelerationStructureCompatibilityKHR.txt[]
-
-  * pname:device is the device to check the version against.
-  * pname:pVersionInfo is a pointer to a
-    slink:VkAccelerationStructureVersionInfoKHR structure specifying version
-    information to check against the device.
-  * pname:pCompatibility is a pointer to a
-    elink:VkAccelerationStructureCompatibilityKHR value in which
-    compatibility information is returned.
-
-.Valid Usage
-****
-// TBD
-  * [[VUID-vkGetDeviceAccelerationStructureCompatibilityKHR-rayTracingPipeline-03661]]
-    The <<features-rayTracingPipeline, pname:rayTracingPipeline>> or
-    <<features-rayQuery, pname:rayQuery>> feature must: be enabled
-****
-
-include::{generated}/validity/protos/vkGetDeviceAccelerationStructureCompatibilityKHR.txt[]
---
-
-[open,refpage='VkAccelerationStructureVersionInfoKHR',desc='Acceleration structure version information',type='structs']
---
-:refpage: VkAccelerationStructureVersionKHR
-
-The sname:VkAccelerationStructureVersionInfoKHR structure is defined as:
-
-include::{generated}/api/structs/VkAccelerationStructureVersionInfoKHR.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:pVersionData is a pointer to the version header of an acceleration
-    structure as defined in flink:vkCmdCopyAccelerationStructureToMemoryKHR
-
-[NOTE]
-.Note
-====
-pname:pVersionData is a _pointer_ to an array of 2*ename:VK_UUID_SIZE
-code:uint8_t values instead of two ename:VK_UUID_SIZE arrays as the expected
-use case for this member is to be pointed at the header of an previously
-serialized acceleration structure (via
-flink:vkCmdCopyAccelerationStructureToMemoryKHR or
-flink:vkCopyAccelerationStructureToMemoryKHR) that is loaded in memory.
-Using arrays would necessitate extra memory copies of the UUIDs.
-====
-
-include::{generated}/validity/structs/VkAccelerationStructureVersionInfoKHR.txt[]
---
-
-[open,refpage='VkAccelerationStructureCompatibilityKHR',desc='Acceleration structure compatibility',type='enums']
---
-Possible values of pname:pCompatibility returned by
-flink:vkGetDeviceAccelerationStructureCompatibilityKHR are:
-
-include::{generated}/api/enums/VkAccelerationStructureCompatibilityKHR.txt[]
-
-  * ename:VK_ACCELERATION_STRUCTURE_COMPATIBILITY_COMPATIBLE_KHR if the
-    pname:pVersionData version acceleration structure is compatible with
-    pname:device.
-  * ename:VK_ACCELERATION_STRUCTURE_COMPATIBILITY_INCOMPATIBLE_KHR if the
-    pname:pVersionData version acceleration structure is not compatible with
-    pname:device.
---
-
-
-[[host-acceleration-structure]]
-== Host Acceleration Structure Operations
-
-Implementations are also required to provide host implementations of the
-acceleration structure operations if the
-<<features-accelerationStructureHostCommands,pname:accelerationStructureHostCommands>>
-feature is enabled:
-
-  * flink:vkBuildAccelerationStructuresKHR corresponding to
-    flink:vkCmdBuildAccelerationStructuresKHR
-  * flink:vkCopyAccelerationStructureKHR corresponding to
-    flink:vkCmdCopyAccelerationStructureKHR
-  * flink:vkCopyAccelerationStructureToMemoryKHR corresponding to
-    flink:vkCmdCopyAccelerationStructureToMemoryKHR
-  * flink:vkCopyMemoryToAccelerationStructureKHR corresponding to
-    flink:vkCmdCopyMemoryToAccelerationStructureKHR
-  * flink:vkWriteAccelerationStructuresPropertiesKHR corresponding to
-    flink:vkCmdWriteAccelerationStructuresPropertiesKHR
-
-These commands are functionally equivalent to their device counterparts,
-except that they are executed on the host timeline, rather than being
-enqueued into command buffers.
-
-All acceleration structures used by the host commands must: be bound to
-host-visible memory, and all input data for acceleration structure builds
-must: be referenced using host addresses instead of device addresses.
-Applications are not required to map acceleration structure memory when
-using the host commands.
-
-
-[NOTE]
-.Note
-====
-The flink:vkBuildAccelerationStructuresKHR and
-flink:vkCmdBuildAccelerationStructuresKHR may: use different algorithms, and
-thus are not required to produce identical structures.
-The structures produced by these two commands may: exhibit different memory
-footprints or traversal performance, but should strive to be similar where
-possible.
-
-Apart from these details, the host and device operations are interchangable.
-For example, an application can: use flink:vkBuildAccelerationStructuresKHR
-to build a structure, compact it on the device using
-flink:vkCmdCopyAccelerationStructureKHR, and serialize the result using
-flink:vkCopyAccelerationStructureToMemoryKHR.
-====
-
-[NOTE]
-.Note
-====
-For efficient execution, acceleration structures manipulated using these
-commands should always be bound to host cached memory, as the implementation
-may need to repeatedly read and write this memory during the execution of
-the command.
-====
-
-[open,refpage='vkBuildAccelerationStructuresKHR',desc='Build an acceleration structure on the host',type='protos']
---
-:refpage: vkBuildAccelerationStructuresKHR
-:maxinstancecheck: pname:ppBuildRangeInfos[i][j].pname:primitiveCount
-
-To build acceleration structures on the host, call:
-
-include::{generated}/api/protos/vkBuildAccelerationStructuresKHR.txt[]
-
-  * pname:device is the sname:VkDevice for which the acceleration structures
-    are being built.
-  * pname:deferredOperation is an optional slink:VkDeferredOperationKHR to
-    <<deferred-host-operations-requesting, request deferral>> for this
-    command.
-  * pname:infoCount is the number of acceleration structures to build.
-    It specifies the number of the pname:pInfos structures and
-    pname:ppBuildRangeInfos pointers that must: be provided.
-  * pname:pInfos is a pointer to an array of pname:infoCount
-    slink:VkAccelerationStructureBuildGeometryInfoKHR structures defining
-    the geometry used to build each acceleration structure.
-  * pname:ppBuildRangeInfos is a pointer to an array of pname:infoCount
-    pointers to arrays of slink:VkAccelerationStructureBuildRangeInfoKHR
-    structures.
-    Each pname:ppBuildRangeInfos[i] is a pointer to an array of
-    pname:pInfos[i].pname:geometryCount
-    slink:VkAccelerationStructureBuildRangeInfoKHR structures defining
-    dynamic offsets to the addresses where geometry data is stored, as
-    defined by pname:pInfos[i].
-
-This command fulfills the same task as
-flink:vkCmdBuildAccelerationStructuresKHR but is executed by the host.
-
-The fname:vkBuildAccelerationStructuresKHR command provides the ability to
-initiate multiple acceleration structures builds, however there is no
-ordering or synchronization implied between any of the individual
-acceleration structure builds.
-
-[NOTE]
-.Note
-====
-This means that an application cannot: build a top-level acceleration
-structure in the same flink:vkBuildAccelerationStructuresKHR call as the
-associated bottom-level or instance acceleration structures are being built.
-There also cannot: be any memory aliasing between any acceleration structure
-memories or scratch memories being used by any of the builds.
-====
-
-.Valid Usage
-****
-include::{chapters}/commonvalidity/build_acceleration_structure_common.txt[]
-include::{chapters}/commonvalidity/build_acceleration_structure_nonindirect_common.txt[]
-include::{chapters}/commonvalidity/deferred_operations_common.txt[]
-  * [[VUID-vkBuildAccelerationStructuresKHR-pInfos-03722]]
-    For each element of pname:pInfos, the pname:buffer used to create its
-    pname:dstAccelerationStructure member must: be bound to host-visible
-    device memory
-  * [[VUID-vkBuildAccelerationStructuresKHR-pInfos-03723]]
-    For each element of pname:pInfos, if its pname:mode member is
-    ename:VK_BUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR the pname:buffer
-    used to create its pname:srcAccelerationStructure member must: be bound
-    to host-visible device memory
-  * [[VUID-vkBuildAccelerationStructuresKHR-pInfos-03724]]
-    For each element of pname:pInfos, the pname:buffer used to create each
-    acceleration structure referenced by the pname:geometry.instances.data
-    member of any element of pname:pGeometries or pname:ppGeometries with a
-    pname:geometryType of ename:VK_GEOMETRY_TYPE_INSTANCES_KHR must: be
-    bound to host-visible device memory
-  * [[VUID-vkBuildAccelerationStructuresKHR-accelerationStructureHostCommands-03581]]
-    The <<features-accelerationStructureHostCommands,
-    sname:VkPhysicalDeviceAccelerationStructureFeaturesKHR::pname:accelerationStructureHostCommands>>
-    feature must: be enabled
-  * [[VUID-vkBuildAccelerationStructuresKHR-pInfos-03725]]
-    If pname:pInfos[i].pname:mode is
-    ename:VK_BUILD_ACCELERATION_STRUCTURE_MODE_BUILD_KHR, all addresses
-    between pname:pInfos[i].pname:scratchData.hostAddress and
-    pname:pInfos[i].pname:scratchData.hostAddress + N - 1 must: be valid
-    host memory, where N is given by the pname:buildScratchSize member of
-    the slink:VkAccelerationStructureBuildSizesInfoKHR structure returned
-    from a call to flink:vkGetAccelerationStructureBuildSizesKHR with an
-    identical slink:VkAccelerationStructureBuildGeometryInfoKHR structure
-    and primitive count
-  * [[VUID-vkBuildAccelerationStructuresKHR-pInfos-03726]]
-    If pname:pInfos[i].pname:mode is
-    ename:VK_BUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR, all addresses
-    between pname:pInfos[i].pname:scratchData.hostAddress and
-    pname:pInfos[i].pname:scratchData.hostAddress + N - 1 must: be valid
-    host memory, where N is given by the pname:updateScratchSize member of
-    the slink:VkAccelerationStructureBuildSizesInfoKHR structure returned
-    from a call to flink:vkGetAccelerationStructureBuildSizesKHR with an
-    identical slink:VkAccelerationStructureBuildGeometryInfoKHR structure
-    and primitive count
-  * [[VUID-vkBuildAccelerationStructuresKHR-pInfos-03771]]
-    For any element of pname:pInfos[i].pname:pGeometries or
-    pname:pInfos[i].pname:ppGeometries with a pname:geometryType of
-    ename:VK_GEOMETRY_TYPE_TRIANGLES_KHR,
-    pname:geometry.triangles.vertexData.hostAddress must: be a valid host
-    address
-  * [[VUID-vkBuildAccelerationStructuresKHR-pInfos-03772]]
-    For any element of pname:pInfos[i].pname:pGeometries or
-    pname:pInfos[i].pname:ppGeometries with a pname:geometryType of
-    ename:VK_GEOMETRY_TYPE_TRIANGLES_KHR, if
-    pname:geometry.triangles.indexType is not ename:VK_INDEX_TYPE_NONE_KHR,
-    pname:geometry.triangles.indexData.hostAddress must: be a valid host
-    address
-  * [[VUID-vkBuildAccelerationStructuresKHR-pInfos-03773]]
-    For any element of pname:pInfos[i].pname:pGeometries or
-    pname:pInfos[i].pname:ppGeometries with a pname:geometryType of
-    ename:VK_GEOMETRY_TYPE_TRIANGLES_KHR, if
-    pname:geometry.triangles.transformData.hostAddress is not `0`, it must:
-    be a valid host address
-  * [[VUID-vkBuildAccelerationStructuresKHR-pInfos-03774]]
-    For any element of pname:pInfos[i].pname:pGeometries or
-    pname:pInfos[i].pname:ppGeometries with a pname:geometryType of
-    ename:VK_GEOMETRY_TYPE_AABBS_KHR, pname:geometry.aabbs.data.hostAddress
-    must: be a valid host address
-ifdef::VK_KHR_device_group,VK_VERSION_1_1[]
-  * [[VUID-vkBuildAccelerationStructuresKHR-pInfos-03775]]
-    For each element of pname:pInfos, the pname:buffer used to create its
-    pname:dstAccelerationStructure member must: be bound to memory that was
-    not allocated with multiple instances
-  * [[VUID-vkBuildAccelerationStructuresKHR-pInfos-03776]]
-    For each element of pname:pInfos, if its pname:mode member is
-    ename:VK_BUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR the pname:buffer
-    used to create its pname:srcAccelerationStructure member must: be bound
-    to memory that was not allocated with multiple instances
-  * [[VUID-vkBuildAccelerationStructuresKHR-pInfos-03777]]
-    For each element of pname:pInfos, the pname:buffer used to create each
-    acceleration structure referenced by the pname:geometry.instances.data
-    member of any element of pname:pGeometries or pname:ppGeometries with a
-    pname:geometryType of ename:VK_GEOMETRY_TYPE_INSTANCES_KHR must: be
-    bound to memory that was not allocated with multiple instances
-endif::VK_KHR_device_group,VK_VERSION_1_1[]
-  * [[VUID-vkBuildAccelerationStructuresKHR-pInfos-03778]]
-    For any element of pname:pInfos[i].pname:pGeometries or
-    pname:pInfos[i].pname:ppGeometries with a pname:geometryType of
-    ename:VK_GEOMETRY_TYPE_INSTANCES_KHR,
-    pname:geometry.instances.data.hostAddress must: be a valid host address
-  * [[VUID-vkBuildAccelerationStructuresKHR-pInfos-03779]]
-    For any element of pname:pInfos[i].pname:pGeometries or
-    pname:pInfos[i].pname:ppGeometries with a pname:geometryType of
-    ename:VK_GEOMETRY_TYPE_INSTANCES_KHR, each
-    slink:VkAccelerationStructureInstanceKHR::pname:accelerationStructureReference
-    value in pname:geometry.instances.data.hostAddress must be a valid
-    slink:VkAccelerationStructureKHR object
-ifdef::VK_NV_ray_tracing_motion_blur[]
-  * [[VUID-vkBuildAccelerationStructuresKHR-pInfos-04930]]
-    For any element of pname:pInfos[i].pname:pGeometries or
-    pname:pInfos[i].pname:ppGeometries with a pname:geometryType of
-    ename:VK_GEOMETRY_TYPE_INSTANCES_KHR with
-    ename:VK_BUILD_ACCELERATION_STRUCTURE_MOTION_BIT_NV set, each
-    pname:accelerationStructureReference in any structure in
-    slink:VkAccelerationStructureMotionInstanceNV value in
-    pname:geometry.instances.data.hostAddress must be a valid
-    slink:VkAccelerationStructureKHR object
-endif::VK_NV_ray_tracing_motion_blur[]
-****
-
-include::{generated}/validity/protos/vkBuildAccelerationStructuresKHR.txt[]
---
-
-[open,refpage='vkCopyAccelerationStructureKHR',desc='Copy an acceleration structure on the host',type='protos']
---
-:refpage: vkCopyAccelerationStructureKHR
-
-To copy or compact an acceleration structure on the host, call:
-
-include::{generated}/api/protos/vkCopyAccelerationStructureKHR.txt[]
-
-  * pname:device is the device which owns the acceleration structures.
-  * pname:deferredOperation is an optional slink:VkDeferredOperationKHR to
-    <<deferred-host-operations-requesting, request deferral>> for this
-    command.
-  * pname:pInfo is a pointer to a slink:VkCopyAccelerationStructureInfoKHR
-    structure defining the copy operation.
-
-This command fulfills the same task as
-flink:vkCmdCopyAccelerationStructureKHR but is executed by the host.
-
-.Valid Usage
-****
-include::{chapters}/commonvalidity/deferred_operations_common.txt[]
-  * [[VUID-vkCopyAccelerationStructureKHR-buffer-03727]]
-    The pname:buffer used to create pname:pInfo->src must: be bound to
-    host-visible device memory
-  * [[VUID-vkCopyAccelerationStructureKHR-buffer-03728]]
-    The pname:buffer used to create pname:pInfo->dst must: be bound to
-    host-visible device memory
-  * [[VUID-vkCopyAccelerationStructureKHR-accelerationStructureHostCommands-03582]]
-    The <<features-accelerationStructureHostCommands,
-    sname:VkPhysicalDeviceAccelerationStructureFeaturesKHR::pname:accelerationStructureHostCommands>>
-    feature must: be enabled
-ifdef::VK_KHR_device_group,VK_VERSION_1_1[]
-  * [[VUID-vkCopyAccelerationStructureKHR-buffer-03780]]
-    The pname:buffer used to create pname:pInfo->src must: be bound to
-    memory that was not allocated with multiple instances
-  * [[VUID-vkCopyAccelerationStructureKHR-buffer-03781]]
-    The pname:buffer used to create pname:pInfo->dst must: be bound to
-    memory that was not allocated with multiple instances
-endif::VK_KHR_device_group,VK_VERSION_1_1[]
-****
-
-include::{generated}/validity/protos/vkCopyAccelerationStructureKHR.txt[]
---
-
-[open,refpage='vkCopyMemoryToAccelerationStructureKHR',desc='Deserialize an acceleration structure on the host',type='protos']
---
-:refpage: vkCopyMemoryToAccelerationStructureKHR
-
-To copy host accessible memory to an acceleration structure, call:
-
-include::{generated}/api/protos/vkCopyMemoryToAccelerationStructureKHR.txt[]
-
-  * pname:device is the device which owns pname:pInfo->dst.
-  * pname:deferredOperation is an optional slink:VkDeferredOperationKHR to
-    <<deferred-host-operations-requesting, request deferral>> for this
-    command.
-  * pname:pInfo is a pointer to a
-    slink:VkCopyMemoryToAccelerationStructureInfoKHR structure defining the
-    copy operation.
-
-This command fulfills the same task as
-flink:vkCmdCopyMemoryToAccelerationStructureKHR but is executed by the host.
-
-This command can accept acceleration structures produced by either
-flink:vkCmdCopyAccelerationStructureToMemoryKHR or
-flink:vkCopyAccelerationStructureToMemoryKHR.
-
-.Valid Usage
-****
-include::{chapters}/commonvalidity/deferred_operations_common.txt[]
-  * [[VUID-vkCopyMemoryToAccelerationStructureKHR-pInfo-03729]]
-    pname:pInfo->src.hostAddress must: be a valid host pointer
-  * [[VUID-vkCopyMemoryToAccelerationStructureKHR-pInfo-03750]]
-    pname:pInfo->src.hostAddress must: be aligned to 16 bytes
-  * [[VUID-vkCopyMemoryToAccelerationStructureKHR-buffer-03730]]
-    The pname:buffer used to create pname:pInfo->dst must: be bound to
-    host-visible device memory
-  * [[VUID-vkCopyMemoryToAccelerationStructureKHR-accelerationStructureHostCommands-03583]]
-    The <<features-accelerationStructureHostCommands,
-    sname:VkPhysicalDeviceAccelerationStructureFeaturesKHR::pname:accelerationStructureHostCommands>>
-    feature must: be enabled
-ifdef::VK_KHR_device_group,VK_VERSION_1_1[]
-  * [[VUID-vkCopyMemoryToAccelerationStructureKHR-buffer-03782]]
-    The pname:buffer used to create pname:pInfo->dst must: be bound to
-    memory that was not allocated with multiple instances
-endif::VK_KHR_device_group,VK_VERSION_1_1[]
-****
-
-include::{generated}/validity/protos/vkCopyMemoryToAccelerationStructureKHR.txt[]
---
-
-[open,refpage='vkCopyAccelerationStructureToMemoryKHR',desc='Serialize an acceleration structure on the host',type='protos']
---
-:refpage: vkCopyAccelerationStructureToMemoryKHR
-
-To copy an acceleration structure to host accessible memory, call:
-
-include::{generated}/api/protos/vkCopyAccelerationStructureToMemoryKHR.txt[]
-
-  * pname:device is the device which owns pname:pInfo->src.
-  * pname:deferredOperation is an optional slink:VkDeferredOperationKHR to
-    <<deferred-host-operations-requesting, request deferral>> for this
-    command.
-  * pname:pInfo is a pointer to a
-    slink:VkCopyAccelerationStructureToMemoryInfoKHR structure defining the
-    copy operation.
-
-This command fulfills the same task as
-flink:vkCmdCopyAccelerationStructureToMemoryKHR but is executed by the host.
-
-This command produces the same results as
-flink:vkCmdCopyAccelerationStructureToMemoryKHR, but writes its result
-directly to a host pointer, and is executed on the host rather than the
-device.
-The output may: not necessarily be bit-for-bit identical, but it can be
-equally used by either flink:vkCmdCopyMemoryToAccelerationStructureKHR or
-flink:vkCopyMemoryToAccelerationStructureKHR.
-
-.Valid Usage
-****
-include::{chapters}/commonvalidity/deferred_operations_common.txt[]
-  * [[VUID-vkCopyAccelerationStructureToMemoryKHR-buffer-03731]]
-    The pname:buffer used to create pname:pInfo->src must: be bound to
-    host-visible device memory
-  * [[VUID-vkCopyAccelerationStructureToMemoryKHR-pInfo-03732]]
-    pname:pInfo->dst.hostAddress must: be a valid host pointer
-  * [[VUID-vkCopyAccelerationStructureToMemoryKHR-pInfo-03751]]
-    pname:pInfo->dst.hostAddress must: be aligned to 16 bytes
-  * [[VUID-vkCopyAccelerationStructureToMemoryKHR-accelerationStructureHostCommands-03584]]
-    The <<features-accelerationStructureHostCommands,
-    sname:VkPhysicalDeviceAccelerationStructureFeaturesKHR::pname:accelerationStructureHostCommands>>
-    feature must: be enabled
-ifdef::VK_KHR_device_group,VK_VERSION_1_1[]
-  * [[VUID-vkCopyAccelerationStructureToMemoryKHR-buffer-03783]]
-    The pname:buffer used to create pname:pInfo->src must: be bound to
-    memory that was not allocated with multiple instances
-endif::VK_KHR_device_group,VK_VERSION_1_1[]
-****
-
-include::{generated}/validity/protos/vkCopyAccelerationStructureToMemoryKHR.txt[]
---
-
-[open,refpage='vkWriteAccelerationStructuresPropertiesKHR',desc='Query acceleration structure meta-data on the host',type='protos']
---
-:refpage: vkWriteAccelerationStructuresPropertiesKHR
-
-To query acceleration structure size parameters on the host, call:
-
-include::{generated}/api/protos/vkWriteAccelerationStructuresPropertiesKHR.txt[]
-
-  * pname:device is the device which owns the acceleration structures in
-    pname:pAccelerationStructures.
-  * pname:accelerationStructureCount is the count of acceleration structures
-    for which to query the property.
-  * pname:pAccelerationStructures is a pointer to an array of existing
-    previously built acceleration structures.
-  * pname:queryType is a elink:VkQueryType value specifying the property to
-    be queried.
-  * pname:dataSize is the size in bytes of the buffer pointed to by
-    pname:pData.
-  * pname:pData is a pointer to a user-allocated buffer where the results
-    will be written.
-  * pname:stride is the stride in bytes between results for individual
-    queries within pname:pData.
-
-This command fulfills the same task as
-flink:vkCmdWriteAccelerationStructuresPropertiesKHR but is executed by the
-host.
-
-.Valid Usage
-****
-include::{chapters}/commonvalidity/write_acceleration_structure_properties_common.txt[]
-  * [[VUID-vkWriteAccelerationStructuresPropertiesKHR-queryType-03448]]
-    If pname:queryType is
-    ename:VK_QUERY_TYPE_ACCELERATION_STRUCTURE_COMPACTED_SIZE_KHR, then
-    pname:stride must: be a multiple of the size of basetype:VkDeviceSize
-  * [[VUID-vkWriteAccelerationStructuresPropertiesKHR-queryType-03449]]
-    If pname:queryType is
-    ename:VK_QUERY_TYPE_ACCELERATION_STRUCTURE_COMPACTED_SIZE_KHR, then
-    pname:data must: point to a basetype:VkDeviceSize
-  * [[VUID-vkWriteAccelerationStructuresPropertiesKHR-queryType-03450]]
-    If pname:queryType is
-    ename:VK_QUERY_TYPE_ACCELERATION_STRUCTURE_SERIALIZATION_SIZE_KHR, then
-    pname:stride must: be a multiple of the size of basetype:VkDeviceSize
-  * [[VUID-vkWriteAccelerationStructuresPropertiesKHR-queryType-03451]]
-    If pname:queryType is
-    ename:VK_QUERY_TYPE_ACCELERATION_STRUCTURE_SERIALIZATION_SIZE_KHR, then
-    pname:data must: point to a basetype:VkDeviceSize
-  * [[VUID-vkWriteAccelerationStructuresPropertiesKHR-dataSize-03452]]
-    pname:dataSize must: be greater than or equal to
-    [eq]#pname:accelerationStructureCount*pname:stride#
-  * [[VUID-vkWriteAccelerationStructuresPropertiesKHR-buffer-03733]]
-    The pname:buffer used to create each acceleration structure in
-    pname:pAccelerationStructures must: be bound to host-visible device
-    memory
-  * [[VUID-vkWriteAccelerationStructuresPropertiesKHR-accelerationStructureHostCommands-03585]]
-    The <<features-accelerationStructureHostCommands,
-    sname:VkPhysicalDeviceAccelerationStructureFeaturesKHR::pname:accelerationStructureHostCommands>>
-    feature must: be enabled
-ifdef::VK_KHR_device_group,VK_VERSION_1_1[]
-  * [[VUID-vkWriteAccelerationStructuresPropertiesKHR-buffer-03784]]
-    The pname:buffer used to create each acceleration structure in
-    pname:pAccelerationStructures must: be bound to memory that was not
-    allocated with multiple instances
-endif::VK_KHR_device_group,VK_VERSION_1_1[]
-****
-
-include::{generated}/validity/protos/vkWriteAccelerationStructuresPropertiesKHR.txt[]
---
diff --git a/registry/vulkan/chapters/capabilities.txt b/registry/vulkan/chapters/capabilities.txt
deleted file mode 100644
index 3628f74..0000000
--- a/registry/vulkan/chapters/capabilities.txt
+++ /dev/null
@@ -1,1610 +0,0 @@
-// Copyright 2015-2021 The Khronos Group, Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-[[capabilities]]
-= Additional Capabilities
-
-This chapter describes additional capabilities beyond the minimum
-capabilities described in the <<limits,Limits>> and <<formats,Formats>>
-chapters, including:
-
-  * <<capabilities-image, Additional Image Capabilities>>
-ifdef::VK_VERSION_1_1,VK_KHR_external_memory_capabilities[]
-  * <<capabilities-buffer, Additional Buffer Capabilities>>
-endif::VK_VERSION_1_1,VK_KHR_external_memory_capabilities[]
-ifdef::VK_VERSION_1_1,VK_KHR_external_semaphore_capabilities[]
-  * <<capabilities-semaphore, Optional Semaphore Capabilities>>
-endif::VK_VERSION_1_1,VK_KHR_external_semaphore_capabilities[]
-ifdef::VK_VERSION_1_1,VK_KHR_external_fence_capabilities[]
-  * <<capabilities-fence, Optional Fence Capabilities>>
-endif::VK_VERSION_1_1,VK_KHR_external_fence_capabilities[]
-ifdef::VK_EXT_calibrated_timestamps[]
-  * <<features-timestamp-calibration, Timestamp Calibration Capabilities>>
-endif::VK_EXT_calibrated_timestamps[]
-
-
-[[capabilities-image]]
-== Additional Image Capabilities
-
-Additional image capabilities, such as larger dimensions or additional
-sample counts for certain image types, or additional capabilities for
-_linear_ tiling format images, are described in this section.
-
-[open,refpage='vkGetPhysicalDeviceImageFormatProperties',desc='Lists physical device\'s image format capabilities',type='protos']
---
-To query additional capabilities specific to image types, call:
-
-include::{generated}/api/protos/vkGetPhysicalDeviceImageFormatProperties.txt[]
-
-  * pname:physicalDevice is the physical device from which to query the
-    image capabilities.
-  * pname:format is a elink:VkFormat value specifying the image format,
-    corresponding to slink:VkImageCreateInfo::pname:format.
-  * pname:type is a elink:VkImageType value specifying the image type,
-    corresponding to slink:VkImageCreateInfo::pname:imageType.
-  * pname:tiling is a elink:VkImageTiling value specifying the image tiling,
-    corresponding to slink:VkImageCreateInfo::pname:tiling.
-  * pname:usage is a bitmask of elink:VkImageUsageFlagBits specifying the
-    intended usage of the image, corresponding to
-    slink:VkImageCreateInfo::pname:usage.
-  * pname:flags is a bitmask of elink:VkImageCreateFlagBits specifying
-    additional parameters of the image, corresponding to
-    slink:VkImageCreateInfo::pname:flags.
-  * pname:pImageFormatProperties is a pointer to a
-    slink:VkImageFormatProperties structure in which capabilities are
-    returned.
-
-The pname:format, pname:type, pname:tiling, pname:usage, and pname:flags
-parameters correspond to parameters that would be consumed by
-flink:vkCreateImage (as members of slink:VkImageCreateInfo).
-
-If pname:format is not a supported image format, or if the combination of
-pname:format, pname:type, pname:tiling, pname:usage, and pname:flags is not
-supported for images, then fname:vkGetPhysicalDeviceImageFormatProperties
-returns ename:VK_ERROR_FORMAT_NOT_SUPPORTED.
-
-The limitations on an image format that are reported by
-fname:vkGetPhysicalDeviceImageFormatProperties have the following property:
-if code:usage1 and code:usage2 of type tlink:VkImageUsageFlags are such that
-the bits set in code:usage1 are a subset of the bits set in code:usage2, and
-code:flags1 and code:flags2 of type tlink:VkImageCreateFlags are such that
-the bits set in code:flags1 are a subset of the bits set in code:flags2,
-then the limitations for code:usage1 and code:flags1 must: be no more strict
-than the limitations for code:usage2 and code:flags2, for all values of
-pname:format, pname:type, and pname:tiling.
-
-ifdef::VK_EXT_image_drm_format_modifier[]
-.Valid Usage
-****
-  * [[VUID-vkGetPhysicalDeviceImageFormatProperties-tiling-02248]]
-    pname:tiling must: not be ename:VK_IMAGE_TILING_DRM_FORMAT_MODIFIER_EXT.
-    (Use flink:vkGetPhysicalDeviceImageFormatProperties2 instead)
-****
-endif::VK_EXT_image_drm_format_modifier[]
-
-include::{generated}/validity/protos/vkGetPhysicalDeviceImageFormatProperties.txt[]
---
-
-[open,refpage='VkImageFormatProperties',desc='Structure specifying an image format properties',type='structs']
---
-The sname:VkImageFormatProperties structure is defined as:
-
-include::{generated}/api/structs/VkImageFormatProperties.txt[]
-
-  * pname:maxExtent are the maximum image dimensions.
-    See the <<features-extentperimagetype,Allowed Extent Values>> section
-    below for how these values are constrained by pname:type.
-  * pname:maxMipLevels is the maximum number of mipmap levels.
-    pname:maxMipLevels must: be equal to the number of levels in the
-    complete mipmap chain based on the [eq]#pname:maxExtent.width#,
-    [eq]#pname:maxExtent.height#, and [eq]#pname:maxExtent.depth#, except
-    when one of the following conditions is true, in which case it may:
-    instead be `1`:
-  ** fname:vkGetPhysicalDeviceImageFormatProperties::pname:tiling was
-     ename:VK_IMAGE_TILING_LINEAR
-ifdef::VK_EXT_image_drm_format_modifier[]
-  ** slink:VkPhysicalDeviceImageFormatInfo2::pname:tiling was
-     ename:VK_IMAGE_TILING_DRM_FORMAT_MODIFIER_EXT
-endif::VK_EXT_image_drm_format_modifier[]
-ifdef::VK_VERSION_1_1,VK_KHR_external_memory_capabilities[]
-  ** the slink:VkPhysicalDeviceImageFormatInfo2::pname:pNext chain included
-     a slink:VkPhysicalDeviceExternalImageFormatInfo structure with a handle
-     type included in the pname:handleTypes member for which mipmap image
-     support is not required
-endif::VK_VERSION_1_1,VK_KHR_external_memory_capabilities[]
-ifdef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
-  ** image pname:format is one of the
-    <<formats-requiring-sampler-ycbcr-conversion, formats that require a
-    sampler Y'C~B~C~R~ conversion>>
-endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
-ifdef::VK_EXT_fragment_density_map[]
-  ** pname:flags contains ename:VK_IMAGE_CREATE_SUBSAMPLED_BIT_EXT
-endif::VK_EXT_fragment_density_map[]
-  * pname:maxArrayLayers is the maximum number of array layers.
-    pname:maxArrayLayers must: be no less than
-    slink:VkPhysicalDeviceLimits::pname:maxImageArrayLayers, except when one
-    of the following conditions is true, in which case it may: instead be
-    `1`:
-  ** pname:tiling is ename:VK_IMAGE_TILING_LINEAR
-  ** pname:tiling is ename:VK_IMAGE_TILING_OPTIMAL and pname:type is
-     ename:VK_IMAGE_TYPE_3D
-ifdef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
-  ** pname:format is one of the
-    <<formats-requiring-sampler-ycbcr-conversion, formats that require a
-    sampler Y'C~B~C~R~ conversion>>
-endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
-ifdef::VK_EXT_image_drm_format_modifier[]
-  * If pname:tiling is ename:VK_IMAGE_TILING_DRM_FORMAT_MODIFIER_EXT, then
-    pname:maxArrayLayers must: not be 0.
-endif::VK_EXT_image_drm_format_modifier[]
-  * pname:sampleCounts is a bitmask of elink:VkSampleCountFlagBits
-    specifying all the supported sample counts for this image as described
-    <<features-supported-sample-counts, below>>.
-  * pname:maxResourceSize is an upper bound on the total image size in
-    bytes, inclusive of all image subresources.
-    Implementations may: have an address space limit on total size of a
-    resource, which is advertised by this property.
-    pname:maxResourceSize must: be at least 2^31^.
-
-[NOTE]
-.Note
-====
-There is no mechanism to query the size of an image before creating it, to
-compare that size against pname:maxResourceSize.
-If an application attempts to create an image that exceeds this limit, the
-creation will fail and flink:vkCreateImage will return
-ename:VK_ERROR_OUT_OF_DEVICE_MEMORY.
-While the advertised limit must: be at least 2^31^, it may: not be possible
-to create an image that approaches that size, particularly for
-ename:VK_IMAGE_TYPE_1D.
-====
-
-If the combination of parameters to
-fname:vkGetPhysicalDeviceImageFormatProperties is not supported by the
-implementation for use in flink:vkCreateImage, then all members of
-sname:VkImageFormatProperties will be filled with zero.
-
-[NOTE]
-.Note
-====
-Filling sname:VkImageFormatProperties with zero for unsupported formats is
-an exception to the usual rule that output structures have undefined:
-contents on error.
-This exception was unintentional, but is preserved for backwards
-compatibility.
-====
-
-include::{generated}/validity/structs/VkImageFormatProperties.txt[]
---
-
-ifdef::VK_NV_external_memory_capabilities[]
-include::./VK_NV_external_memory_capabilities/external_image_format.txt[]
-endif::VK_NV_external_memory_capabilities[]
-
-ifdef::VK_VERSION_1_1,VK_KHR_get_physical_device_properties2[]
-
-[open,refpage='vkGetPhysicalDeviceImageFormatProperties2',desc='Lists physical device\'s image format capabilities',type='protos']
---
-To query additional capabilities specific to image types, call:
-
-ifdef::VK_VERSION_1_1[]
-include::{generated}/api/protos/vkGetPhysicalDeviceImageFormatProperties2.txt[]
-endif::VK_VERSION_1_1[]
-
-ifdef::VK_VERSION_1_1+VK_KHR_get_physical_device_properties2[or the equivalent command]
-
-ifdef::VK_KHR_get_physical_device_properties2[]
-include::{generated}/api/protos/vkGetPhysicalDeviceImageFormatProperties2KHR.txt[]
-endif::VK_KHR_get_physical_device_properties2[]
-
-  * pname:physicalDevice is the physical device from which to query the
-    image capabilities.
-  * pname:pImageFormatInfo is a pointer to a
-    slink:VkPhysicalDeviceImageFormatInfo2 structure describing the
-    parameters that would be consumed by flink:vkCreateImage.
-  * pname:pImageFormatProperties is a pointer to a
-    slink:VkImageFormatProperties2 structure in which capabilities are
-    returned.
-
-fname:vkGetPhysicalDeviceImageFormatProperties2 behaves similarly to
-flink:vkGetPhysicalDeviceImageFormatProperties, with the ability to return
-extended information in a pname:pNext chain of output structures.
-
-ifdef::VK_ANDROID_external_memory_android_hardware_buffer[]
-.Valid Usage
-****
-  * [[VUID-vkGetPhysicalDeviceImageFormatProperties2-pNext-01868]]
-    If the pname:pNext chain of pname:pImageFormatProperties includes a
-    slink:VkAndroidHardwareBufferUsageANDROID structure, the pname:pNext
-    chain of pname:pImageFormatInfo must: include a
-    slink:VkPhysicalDeviceExternalImageFormatInfo structure with
-    pname:handleType set to
-    ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_ANDROID_HARDWARE_BUFFER_BIT_ANDROID
-****
-endif::VK_ANDROID_external_memory_android_hardware_buffer[]
-
-include::{generated}/validity/protos/vkGetPhysicalDeviceImageFormatProperties2.txt[]
---
-
-[open,refpage='VkPhysicalDeviceImageFormatInfo2',desc='Structure specifying image creation parameters',type='structs']
---
-The sname:VkPhysicalDeviceImageFormatInfo2 structure is defined as:
-
-include::{generated}/api/structs/VkPhysicalDeviceImageFormatInfo2.txt[]
-
-ifdef::VK_KHR_get_physical_device_properties2[]
-or the equivalent
-
-include::{generated}/api/structs/VkPhysicalDeviceImageFormatInfo2KHR.txt[]
-endif::VK_KHR_get_physical_device_properties2[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-    The pname:pNext chain of sname:VkPhysicalDeviceImageFormatInfo2 is used
-    to provide additional image parameters to
-    fname:vkGetPhysicalDeviceImageFormatProperties2.
-  * pname:format is a elink:VkFormat value indicating the image format,
-    corresponding to slink:VkImageCreateInfo::pname:format.
-  * pname:type is a elink:VkImageType value indicating the image type,
-    corresponding to slink:VkImageCreateInfo::pname:imageType.
-  * pname:tiling is a elink:VkImageTiling value indicating the image tiling,
-    corresponding to slink:VkImageCreateInfo::pname:tiling.
-  * pname:usage is a bitmask of elink:VkImageUsageFlagBits indicating the
-    intended usage of the image, corresponding to
-    slink:VkImageCreateInfo::pname:usage.
-  * pname:flags is a bitmask of elink:VkImageCreateFlagBits indicating
-    additional parameters of the image, corresponding to
-    slink:VkImageCreateInfo::pname:flags.
-
-The members of sname:VkPhysicalDeviceImageFormatInfo2 correspond to the
-arguments to flink:vkGetPhysicalDeviceImageFormatProperties, with
-pname:sType and pname:pNext added for extensibility.
-
-ifdef::VK_EXT_image_drm_format_modifier[]
-.Valid Usage
-****
-  * [[VUID-VkPhysicalDeviceImageFormatInfo2-tiling-02249]]
-    pname:tiling must: be ename:VK_IMAGE_TILING_DRM_FORMAT_MODIFIER_EXT if
-    and only if the pname:pNext chain includes
-    slink:VkPhysicalDeviceImageDrmFormatModifierInfoEXT
-  * [[VUID-VkPhysicalDeviceImageFormatInfo2-tiling-02313]]
-    If pname:tiling is ename:VK_IMAGE_TILING_DRM_FORMAT_MODIFIER_EXT and
-    pname:flags contains ename:VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT, then the
-    pname:pNext chain must: include a slink:VkImageFormatListCreateInfo
-    structure with non-zero pname:viewFormatCount
-****
-endif::VK_EXT_image_drm_format_modifier[]
-
-include::{generated}/validity/structs/VkPhysicalDeviceImageFormatInfo2.txt[]
---
-
-[open,refpage='VkImageFormatProperties2',desc='Structure specifying an image format properties',type='structs']
---
-The sname:VkImageFormatProperties2 structure is defined as:
-
-include::{generated}/api/structs/VkImageFormatProperties2.txt[]
-
-ifdef::VK_KHR_get_physical_device_properties2[]
-or the equivalent
-
-include::{generated}/api/structs/VkImageFormatProperties2KHR.txt[]
-endif::VK_KHR_get_physical_device_properties2[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-    The pname:pNext chain of sname:VkImageFormatProperties2 is used to allow
-    the specification of additional capabilities to be returned from
-    fname:vkGetPhysicalDeviceImageFormatProperties2.
-  * pname:imageFormatProperties is a slink:VkImageFormatProperties structure
-    in which capabilities are returned.
-
-If the combination of parameters to
-fname:vkGetPhysicalDeviceImageFormatProperties2 is not supported by the
-implementation for use in flink:vkCreateImage, then all members of
-pname:imageFormatProperties will be filled with zero.
-
-[NOTE]
-.Note
-====
-Filling pname:imageFormatProperties with zero for unsupported formats is an
-exception to the usual rule that output structures have undefined: contents
-on error.
-This exception was unintentional, but is preserved for backwards
-compatibility.
-This exeption only applies to pname:imageFormatProperties, not pname:sType,
-pname:pNext, or any structures chained from pname:pNext.
-====
-
-include::{generated}/validity/structs/VkImageFormatProperties2.txt[]
---
-
-ifdef::VK_AMD_texture_gather_bias_lod[]
-[open,refpage='VkTextureLODGatherFormatPropertiesAMD',desc='Structure informing whether or not texture gather bias/LOD functionality is supported for a given image format and a given physical device.',type='structs']
---
-To determine if texture gather functions that take explicit LOD and/or bias
-argument values can: be used with a given image format, add a
-slink:VkTextureLODGatherFormatPropertiesAMD structure to the pname:pNext
-chain of the slink:VkImageFormatProperties2 structure in a call to
-fname:vkGetPhysicalDeviceImageFormatProperties2.
-
-The sname:VkTextureLODGatherFormatPropertiesAMD structure is defined as:
-
-include::{generated}/api/structs/VkTextureLODGatherFormatPropertiesAMD.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:supportsTextureGatherLODBiasAMD tells if the image format can be
-    used with texture gather bias/LOD functions, as introduced by the
-    `apiext:VK_AMD_texture_gather_bias_lod` extension.
-    This field is set by the implementation.
-    User-specified value is ignored.
-
-include::{generated}/validity/structs/VkTextureLODGatherFormatPropertiesAMD.txt[]
---
-endif::VK_AMD_texture_gather_bias_lod[]
-
-ifdef::VK_VERSION_1_1,VK_KHR_external_memory_capabilities[]
-[open,refpage='VkPhysicalDeviceExternalImageFormatInfo',desc='Structure specifying external image creation parameters',type='structs']
---
-To determine the image capabilities compatible with an external memory
-handle type, add a slink:VkPhysicalDeviceExternalImageFormatInfo structure
-to the pname:pNext chain of the slink:VkPhysicalDeviceImageFormatInfo2
-structure and a sname:VkExternalImageFormatProperties structure to the
-pname:pNext chain of the slink:VkImageFormatProperties2 structure.
-
-The sname:VkPhysicalDeviceExternalImageFormatInfo structure is defined as:
-
-include::{generated}/api/structs/VkPhysicalDeviceExternalImageFormatInfo.txt[]
-
-ifdef::VK_KHR_external_memory_capabilities[]
-or the equivalent
-
-include::{generated}/api/structs/VkPhysicalDeviceExternalImageFormatInfoKHR.txt[]
-endif::VK_KHR_external_memory_capabilities[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:handleType is a elink:VkExternalMemoryHandleTypeFlagBits value
-    specifying the memory handle type that will be used with the memory
-    associated with the image.
-
-If pname:handleType is 0, flink:vkGetPhysicalDeviceImageFormatProperties2
-will behave as if slink:VkPhysicalDeviceExternalImageFormatInfo was not
-present, and slink:VkExternalImageFormatProperties will be ignored.
-
-If pname:handleType is not compatible with the pname:format, pname:type,
-pname:tiling, pname:usage, and pname:flags specified in
-slink:VkPhysicalDeviceImageFormatInfo2, then
-flink:vkGetPhysicalDeviceImageFormatProperties2 returns
-ename:VK_ERROR_FORMAT_NOT_SUPPORTED.
-
-include::{generated}/validity/structs/VkPhysicalDeviceExternalImageFormatInfo.txt[]
---
-
-[open,refpage='VkExternalMemoryHandleTypeFlagBits',desc='Bit specifying external memory handle types',type='enums']
---
-Possible values of
-slink:VkPhysicalDeviceExternalImageFormatInfo::pname:handleType, specifying
-an external memory handle type, are:
-
-include::{generated}/api/enums/VkExternalMemoryHandleTypeFlagBits.txt[]
-
-ifdef::VK_KHR_external_memory_capabilities[]
-or the equivalent
-
-include::{generated}/api/enums/VkExternalMemoryHandleTypeFlagBitsKHR.txt[]
-endif::VK_KHR_external_memory_capabilities[]
-
-  * ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_FD_BIT specifies a POSIX
-    file descriptor handle that has only limited valid usage outside of
-    Vulkan and other compatible APIs.
-    It must: be compatible with the POSIX system calls code:dup, code:dup2,
-    code:close, and the non-standard system call code:dup3.
-    Additionally, it must: be transportable over a socket using an
-    code:SCM_RIGHTS control message.
-    It owns a reference to the underlying memory resource represented by its
-    Vulkan memory object.
-  * ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_BIT specifies an NT
-    handle that has only limited valid usage outside of Vulkan and other
-    compatible APIs.
-    It must: be compatible with the functions code:DuplicateHandle,
-    code:CloseHandle, code:CompareObjectHandles, code:GetHandleInformation,
-    and code:SetHandleInformation.
-    It owns a reference to the underlying memory resource represented by its
-    Vulkan memory object.
-  * ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT specifies a
-    global share handle that has only limited valid usage outside of Vulkan
-    and other compatible APIs.
-    It is not compatible with any native APIs.
-    It does not own a reference to the underlying memory resource
-    represented by its Vulkan memory object, and will therefore become
-    invalid when all Vulkan memory objects associated with it are destroyed.
-  * ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_BIT specifies an NT
-    handle returned by code:IDXGIResource1::code:CreateSharedHandle
-    referring to a Direct3D 10 or 11 texture resource.
-    It owns a reference to the memory used by the Direct3D resource.
-  * ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_KMT_BIT specifies a
-    global share handle returned by code:IDXGIResource::code:GetSharedHandle
-    referring to a Direct3D 10 or 11 texture resource.
-    It does not own a reference to the underlying Direct3D resource, and
-    will therefore become invalid when all Vulkan memory objects and
-    Direct3D resources associated with it are destroyed.
-  * ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_HEAP_BIT specifies an NT
-    handle returned by code:ID3D12Device::code:CreateSharedHandle referring
-    to a Direct3D 12 heap resource.
-    It owns a reference to the resources used by the Direct3D heap.
-  * ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_RESOURCE_BIT specifies an NT
-    handle returned by code:ID3D12Device::code:CreateSharedHandle referring
-    to a Direct3D 12 committed resource.
-    It owns a reference to the memory used by the Direct3D resource.
-ifdef::VK_EXT_external_memory_host[]
-  * ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_HOST_ALLOCATION_BIT_EXT specifies a
-    host pointer returned by a host memory allocation command.
-    It does not own a reference to the underlying memory resource, and will
-    therefore become invalid if the host memory is freed.
-  * ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_HOST_MAPPED_FOREIGN_MEMORY_BIT_EXT
-    specifies a host pointer to _host mapped foreign memory_.
-    It does not own a reference to the underlying memory resource, and will
-    therefore become invalid if the foreign memory is unmapped or otherwise
-    becomes no longer available.
-endif::VK_EXT_external_memory_host[]
-ifdef::VK_EXT_external_memory_dma_buf[]
-  * ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_DMA_BUF_BIT_EXT is a file
-    descriptor for a Linux dma_buf.
-    It owns a reference to the underlying memory resource represented by its
-    Vulkan memory object.
-endif::VK_EXT_external_memory_dma_buf[]
-ifdef::VK_ANDROID_external_memory_android_hardware_buffer[]
-  * ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_ANDROID_HARDWARE_BUFFER_BIT_ANDROID
-    specifies an basetype:AHardwareBuffer object defined by the Android NDK.
-    See <<memory-external-android-hardware-buffer,Android Hardware Buffers>>
-    for more details of this handle type.
-endif::VK_ANDROID_external_memory_android_hardware_buffer[]
-ifdef::VK_FUCHSIA_external_memory[]
-  * ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_ZIRCON_VMO_BIT_FUCHSIA is a Zircon
-    handle to a virtual memory object.
-endif::VK_FUCHSIA_external_memory[]
-ifdef::VK_NV_external_memory_rdma[]
-  * ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_RDMA_ADDRESS_BIT_NV is a handle to
-    an allocation accessible by remote devices.
-    It owns a reference to the underlying memory resource represented by its
-    Vulkan memory object.
-endif::VK_NV_external_memory_rdma[]
-
-<<<
-
-Some external memory handle types can only be shared within the same
-underlying physical device and/or the same driver version, as defined in the
-following table:
-
-[[external-memory-handle-types-compatibility]]
-.External memory handle types compatibility
-|====
-| Handle type | sname:VkPhysicalDeviceIDProperties{wbro}::pname:driverUUID | sname:VkPhysicalDeviceIDProperties{wbro}::pname:deviceUUID
-| ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_FD_BIT | Must match | Must match
-| ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_BIT | Must match | Must match
-| ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT | Must match | Must match
-| ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_BIT | Must match | Must match
-| ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_KMT_BIT | Must match | Must match
-| ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_HEAP_BIT | Must match | Must match
-| ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_RESOURCE_BIT | Must match | Must match
-ifdef::VK_EXT_external_memory_host[]
-| ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_HOST_ALLOCATION_BIT_EXT | No restriction | No restriction
-| ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_HOST_MAPPED_FOREIGN_MEMORY_BIT_EXT | No restriction | No restriction
-endif::VK_EXT_external_memory_host[]
-ifdef::VK_EXT_external_memory_dma_buf[]
-| ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_DMA_BUF_BIT_EXT | No restriction | No restriction
-endif::VK_EXT_external_memory_dma_buf[]
-ifdef::VK_ANDROID_external_memory_android_hardware_buffer[]
-| ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_ANDROID_HARDWARE_BUFFER_BIT_ANDROID | No restriction | No restriction
-endif::VK_ANDROID_external_memory_android_hardware_buffer[]
-ifdef::VK_FUCHSIA_external_memory[]
-| ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_ZIRCON_VMO_BIT_FUCHSIA | No restriction | No restriction
-endif::VK_FUCHSIA_external_memory[]
-ifdef::VK_NV_external_memory_rdma[]
-| ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_RDMA_ADDRESS_BIT_NV | No restriction | No restriction
-endif::VK_NV_external_memory_rdma[]
-|====
-
-ifdef::VK_EXT_external_memory_host[]
-[NOTE]
-.Note
-====
-The above table does not restrict the drivers and devices with which
-ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_HOST_ALLOCATION_BIT_EXT and
-ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_HOST_MAPPED_FOREIGN_MEMORY_BIT_EXT may:
-be shared, as these handle types inherently mean memory that does not come
-from the same device, as they import memory from the host or a foreign
-device, respectively.
-====
-endif::VK_EXT_external_memory_host[]
-
-ifdef::VK_EXT_external_memory_dma_buf[]
-[NOTE]
-.Note
-====
-Even though the above table does not restrict the drivers and devices with
-which ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_DMA_BUF_BIT_EXT may: be shared,
-query mechanisms exist in the Vulkan API that prevent the import of
-incompatible dma-bufs (such as flink:vkGetMemoryFdPropertiesKHR) and that
-prevent incompatible usage of dma-bufs (such as
-slink:VkPhysicalDeviceExternalBufferInfo and
-slink:VkPhysicalDeviceExternalImageFormatInfo).
-====
-endif::VK_EXT_external_memory_dma_buf[]
---
-
-[open,refpage='VkExternalMemoryHandleTypeFlags',desc='Bitmask of VkExternalMemoryHandleTypeFlagBits',type='flags']
---
-include::{generated}/api/flags/VkExternalMemoryHandleTypeFlags.txt[]
-
-ifdef::VK_KHR_external_memory_capabilities[]
-or the equivalent
-
-include::{generated}/api/flags/VkExternalMemoryHandleTypeFlagsKHR.txt[]
-endif::VK_KHR_external_memory_capabilities[]
-
-tname:VkExternalMemoryHandleTypeFlags is a bitmask type for setting a mask
-of zero or more elink:VkExternalMemoryHandleTypeFlagBits.
---
-
-[open,refpage='VkExternalImageFormatProperties',desc='Structure specifying supported external handle properties',type='structs']
---
-The sname:VkExternalImageFormatProperties structure is defined as:
-
-include::{generated}/api/structs/VkExternalImageFormatProperties.txt[]
-
-ifdef::VK_KHR_external_memory_capabilities[]
-or the equivalent
-
-include::{generated}/api/structs/VkExternalImageFormatPropertiesKHR.txt[]
-endif::VK_KHR_external_memory_capabilities[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:externalMemoryProperties is a slink:VkExternalMemoryProperties
-    structure specifying various capabilities of the external handle type
-    when used with the specified image creation parameters.
-
-include::{generated}/validity/structs/VkExternalImageFormatProperties.txt[]
---
-
-[open,refpage='VkExternalMemoryProperties',desc='Structure specifying external memory handle type capabilities',type='structs']
---
-The sname:VkExternalMemoryProperties structure is defined as:
-
-include::{generated}/api/structs/VkExternalMemoryProperties.txt[]
-
-ifdef::VK_KHR_external_memory_capabilities[]
-or the equivalent
-
-include::{generated}/api/structs/VkExternalMemoryPropertiesKHR.txt[]
-endif::VK_KHR_external_memory_capabilities[]
-
-  * pname:externalMemoryFeatures is a bitmask of
-    elink:VkExternalMemoryFeatureFlagBits specifying the features of
-    pname:handleType.
-  * pname:exportFromImportedHandleTypes is a bitmask of
-    elink:VkExternalMemoryHandleTypeFlagBits specifying which types of
-    imported handle pname:handleType can: be exported from.
-  * pname:compatibleHandleTypes is a bitmask of
-    elink:VkExternalMemoryHandleTypeFlagBits specifying handle types which
-    can: be specified at the same time as pname:handleType when creating an
-    image compatible with external memory.
-
-pname:compatibleHandleTypes must: include at least pname:handleType.
-Inclusion of a handle type in pname:compatibleHandleTypes does not imply the
-values returned in slink:VkImageFormatProperties2 will be the same when
-slink:VkPhysicalDeviceExternalImageFormatInfo::pname:handleType is set to
-that type.
-The application is responsible for querying the capabilities of all handle
-types intended for concurrent use in a single image and intersecting them to
-obtain the compatible set of capabilities.
-
-include::{generated}/validity/structs/VkExternalMemoryProperties.txt[]
---
-
-[open,refpage='VkExternalMemoryFeatureFlagBits',desc='Bitmask specifying features of an external memory handle type',type='enums']
---
-Bits which may: be set in
-slink:VkExternalMemoryProperties::pname:externalMemoryFeatures, specifying
-features of an external memory handle type, are:
-
-include::{generated}/api/enums/VkExternalMemoryFeatureFlagBits.txt[]
-
-ifdef::VK_KHR_external_memory_capabilities[]
-or the equivalent
-
-include::{generated}/api/enums/VkExternalMemoryFeatureFlagBitsKHR.txt[]
-endif::VK_KHR_external_memory_capabilities[]
-
-  * ename:VK_EXTERNAL_MEMORY_FEATURE_DEDICATED_ONLY_BIT specifies that
-    images or buffers created with the specified parameters and handle type
-    must: use the mechanisms defined by slink:VkMemoryDedicatedRequirements
-    and slink:VkMemoryDedicatedAllocateInfo to create (or import) a
-    dedicated allocation for the image or buffer.
-  * ename:VK_EXTERNAL_MEMORY_FEATURE_EXPORTABLE_BIT specifies that handles
-    of this type can: be exported from Vulkan memory objects.
-  * ename:VK_EXTERNAL_MEMORY_FEATURE_IMPORTABLE_BIT specifies that handles
-    of this type can: be imported as Vulkan memory objects.
-
-Because their semantics in external APIs roughly align with that of an image
-or buffer with a dedicated allocation in Vulkan, implementations are
-required: to report ename:VK_EXTERNAL_MEMORY_FEATURE_DEDICATED_ONLY_BIT for
-the following external handle types:
-
-  * ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_BIT
-  * ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_KMT_BIT
-  * ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_RESOURCE_BIT
-ifdef::VK_ANDROID_external_memory_android_hardware_buffer[]
-  * ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_ANDROID_HARDWARE_BUFFER_BIT_ANDROID
-    for images only
-endif::VK_ANDROID_external_memory_android_hardware_buffer[]
-
-ifdef::VK_ANDROID_external_memory_android_hardware_buffer[]
-Implementations must: not report
-ename:VK_EXTERNAL_MEMORY_FEATURE_DEDICATED_ONLY_BIT for buffers with
-external handle type
-ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_ANDROID_HARDWARE_BUFFER_BIT_ANDROID.
-endif::VK_ANDROID_external_memory_android_hardware_buffer[]
-ifdef::VK_EXT_external_memory_host[]
-Implementations must: not report
-ename:VK_EXTERNAL_MEMORY_FEATURE_DEDICATED_ONLY_BIT for images or buffers
-with external handle type
-ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_HOST_ALLOCATION_BIT_EXT, or
-ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_HOST_MAPPED_FOREIGN_MEMORY_BIT_EXT.
-endif::VK_EXT_external_memory_host[]
-
---
-
-[open,refpage='VkExternalMemoryFeatureFlags',desc='Bitmask of VkExternalMemoryFeatureFlagBits',type='flags']
---
-include::{generated}/api/flags/VkExternalMemoryFeatureFlags.txt[]
-
-ifdef::VK_KHR_external_memory_capabilities[]
-or the equivalent
-
-include::{generated}/api/flags/VkExternalMemoryFeatureFlagsKHR.txt[]
-endif::VK_KHR_external_memory_capabilities[]
-
-tname:VkExternalMemoryFeatureFlags is a bitmask type for setting a mask of
-zero or more elink:VkExternalMemoryFeatureFlagBits.
---
-
-endif::VK_VERSION_1_1,VK_KHR_external_memory_capabilities[]
-
-ifdef::VK_EXT_image_drm_format_modifier[]
-[open,refpage='VkPhysicalDeviceImageDrmFormatModifierInfoEXT',desc='Structure specifying a DRM format modifier as image creation parameter',type='structs']
---
-To query the image capabilities that are compatible with a
-<<glossary-drm-format-modifier,Linux DRM format modifier>>, set
-slink:VkPhysicalDeviceImageFormatInfo2::pname:tiling to
-ename:VK_IMAGE_TILING_DRM_FORMAT_MODIFIER_EXT and add a
-slink:VkPhysicalDeviceImageDrmFormatModifierInfoEXT structure to the
-pname:pNext chain of slink:VkPhysicalDeviceImageFormatInfo2.
-
-The slink:VkPhysicalDeviceImageDrmFormatModifierInfoEXT structure is defined
-as:
-
-include::{generated}/api/structs/VkPhysicalDeviceImageDrmFormatModifierInfoEXT.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:drmFormatModifier is the image's _Linux DRM format modifier_,
-    corresponding to
-    slink:VkImageDrmFormatModifierExplicitCreateInfoEXT::pname:modifier or
-    to slink:VkImageDrmFormatModifierListCreateInfoEXT::pname:pModifiers.
-  * pname:sharingMode specifies how the image will be accessed by multiple
-    queue families.
-  * pname:queueFamilyIndexCount is the number of entries in the
-    pname:pQueueFamilyIndices array.
-  * pname:pQueueFamilyIndices is a pointer to an array of queue families
-    that will access the image.
-    It is ignored if pname:sharingMode is not
-    ename:VK_SHARING_MODE_CONCURRENT.
-
-If the pname:drmFormatModifier is incompatible with the parameters specified
-in slink:VkPhysicalDeviceImageFormatInfo2 and its pname:pNext chain, then
-flink:vkGetPhysicalDeviceImageFormatProperties2 returns
-ename:VK_ERROR_FORMAT_NOT_SUPPORTED.
-The implementation must: support the query of any pname:drmFormatModifier,
-including unknown and invalid modifier values.
-
-.Valid Usage
-****
-  * [[VUID-VkPhysicalDeviceImageDrmFormatModifierInfoEXT-sharingMode-02314]]
-    If pname:sharingMode is ename:VK_SHARING_MODE_CONCURRENT, then
-    pname:pQueueFamilyIndices must: be a valid pointer to an array of
-    pname:queueFamilyIndexCount code:uint32_t values
-  * [[VUID-VkPhysicalDeviceImageDrmFormatModifierInfoEXT-sharingMode-02315]]
-    If pname:sharingMode is ename:VK_SHARING_MODE_CONCURRENT, then
-    pname:queueFamilyIndexCount must: be greater than `1`
-  * [[VUID-VkPhysicalDeviceImageDrmFormatModifierInfoEXT-sharingMode-02316]]
-    If pname:sharingMode is ename:VK_SHARING_MODE_CONCURRENT, each element
-    of pname:pQueueFamilyIndices must: be unique and must: be less than the
-    pname:pQueueFamilyPropertyCount returned by
-    flink:vkGetPhysicalDeviceQueueFamilyProperties2 for the
-    pname:physicalDevice that was used to create pname:device
-****
-
-include::{generated}/validity/structs/VkPhysicalDeviceImageDrmFormatModifierInfoEXT.txt[]
---
-endif::VK_EXT_image_drm_format_modifier[]
-
-ifdef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
-
-[open,refpage='VkSamplerYcbcrConversionImageFormatProperties',desc='Structure specifying combined image sampler descriptor count for multi-planar images',type='structs']
---
-To determine the number of combined image samplers required to support a
-multi-planar format, add slink:VkSamplerYcbcrConversionImageFormatProperties
-to the pname:pNext chain of the slink:VkImageFormatProperties2 structure in
-a call to fname:vkGetPhysicalDeviceImageFormatProperties2.
-
-The sname:VkSamplerYcbcrConversionImageFormatProperties structure is defined
-as:
-
-include::{generated}/api/structs/VkSamplerYcbcrConversionImageFormatProperties.txt[]
-
-ifdef::VK_KHR_sampler_ycbcr_conversion[]
-or the equivalent
-
-include::{generated}/api/structs/VkSamplerYcbcrConversionImageFormatPropertiesKHR.txt[]
-endif::VK_KHR_sampler_ycbcr_conversion[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:combinedImageSamplerDescriptorCount is the number of combined
-    image sampler descriptors that the implementation uses to access the
-    format.
-
-include::{generated}/validity/structs/VkSamplerYcbcrConversionImageFormatProperties.txt[]
---
-
-pname:combinedImageSamplerDescriptorCount is a number between 1 and the
-number of planes in the format.
-A descriptor set layout binding with immutable {YCbCr} conversion samplers
-will have a maximum pname:combinedImageSamplerDescriptorCount which is the
-maximum across all formats supported by its samplers of the
-pname:combinedImageSamplerDescriptorCount for each format.
-Descriptor sets with that layout will internally use that maximum
-pname:combinedImageSamplerDescriptorCount descriptors for each descriptor in
-the binding.
-This expanded number of descriptors will be consumed from the descriptor
-pool when a descriptor set is allocated, and counts towards the
-pname:maxDescriptorSetSamplers, pname:maxDescriptorSetSampledImages,
-pname:maxPerStageDescriptorSamplers, and
-pname:maxPerStageDescriptorSampledImages limits.
-
-.Note
-[NOTE]
-====
-All descriptors in a binding use the same maximum
-pname:combinedImageSamplerDescriptorCount descriptors to allow
-implementations to use a uniform stride for dynamic indexing of the
-descriptors in the binding.
-
-For example, consider a descriptor set layout binding with two descriptors
-and immutable samplers for multi-planar formats that have
-sname:VkSamplerYcbcrConversionImageFormatProperties::pname:combinedImageSamplerDescriptorCount
-values of `2` and `3` respectively.
-There are two descriptors in the binding and the maximum
-pname:combinedImageSamplerDescriptorCount is `3`, so descriptor sets with
-this layout consume `6` descriptors from the descriptor pool.
-To create a descriptor pool that allows allocating four descriptor sets with
-this layout, pname:descriptorCount must be at least `24`.
-====
-
-endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
-
-ifdef::VK_ANDROID_external_memory_android_hardware_buffer[]
-
-[open,refpage='VkAndroidHardwareBufferUsageANDROID',desc='Struct containing Android hardware buffer usage flags',type='structs']
---
-To obtain optimal Android hardware buffer usage flags for specific image
-creation parameters, add a sname:VkAndroidHardwareBufferUsageANDROID
-structure to the pname:pNext chain of a slink:VkImageFormatProperties2
-structure passed to flink:vkGetPhysicalDeviceImageFormatProperties2.
-This structure is defined as:
-
-include::{generated}/api/structs/VkAndroidHardwareBufferUsageANDROID.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:androidHardwareBufferUsage returns the Android hardware buffer
-    usage flags.
-
-The pname:androidHardwareBufferUsage field must: include Android hardware
-buffer usage flags listed in the
-<<memory-external-android-hardware-buffer-usage,AHardwareBuffer Usage
-Equivalence>> table when the corresponding Vulkan image usage or image
-creation flags are included in the pname:usage or pname:flags fields of
-slink:VkPhysicalDeviceImageFormatInfo2.
-It must: include at least one GPU usage flag
-(code:AHARDWAREBUFFER_USAGE_GPU_*), even if none of the corresponding Vulkan
-usages or flags are requested.
-
-.Note
-[NOTE]
-====
-Requiring at least one GPU usage flag ensures that Android hardware buffer
-memory will be allocated in a memory pool accessible to the Vulkan
-implementation, and that specializing the memory layout based on usage flags
-does not prevent it from being compatible with Vulkan.
-Implementations may: avoid unnecessary restrictions caused by this
-requirement by using vendor usage flags to indicate that only the Vulkan
-uses indicated in slink:VkImageFormatProperties2 are required.
-====
-
-include::{generated}/validity/structs/VkAndroidHardwareBufferUsageANDROID.txt[]
---
-
-endif::VK_ANDROID_external_memory_android_hardware_buffer[]
-
-ifdef::VK_EXT_filter_cubic[]
-
-
-
-To determine if cubic filtering can be used with a given image format and a
-given image view type add a
-slink:VkPhysicalDeviceImageViewImageFormatInfoEXT structure to the
-pname:pNext chain of the slink:VkPhysicalDeviceImageFormatInfo2 structure,
-and a slink:VkFilterCubicImageViewImageFormatPropertiesEXT structure to the
-pname:pNext chain of the slink:VkImageFormatProperties2 structure.
-
-[open,refpage='VkPhysicalDeviceImageViewImageFormatInfoEXT',desc='Structure for providing image view type',type='structs']
---
-The sname:VkPhysicalDeviceImageViewImageFormatInfoEXT structure is defined
-as:
-
-include::{generated}/api/structs/VkPhysicalDeviceImageViewImageFormatInfoEXT.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:imageViewType is a elink:VkImageViewType value specifying the type
-    of the image view.
-
-include::{generated}/validity/structs/VkPhysicalDeviceImageViewImageFormatInfoEXT.txt[]
---
-
-[open,refpage='VkFilterCubicImageViewImageFormatPropertiesEXT',desc='Structure for querying cubic filtering capabilities of an image view type',type='structs']
---
-The sname:VkFilterCubicImageViewImageFormatPropertiesEXT structure is
-defined as:
-
-include::{generated}/api/structs/VkFilterCubicImageViewImageFormatPropertiesEXT.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:filterCubic tells if image format, image type and image view type
-    can: be used with cubic filtering.
-    This field is set by the implementation.
-    User-specified value is ignored.
-  * pname:filterCubicMinmax tells if image format, image type and image view
-    type can: be used with cubic filtering and minmax filtering.
-    This field is set by the implementation.
-    User-specified value is ignored.
-
-include::{generated}/validity/structs/VkFilterCubicImageViewImageFormatPropertiesEXT.txt[]
-
-.Valid Usage
-****
-  * [[VUID-VkFilterCubicImageViewImageFormatPropertiesEXT-pNext-02627]]
-    If the pname:pNext chain of the slink:VkImageFormatProperties2 structure
-    includes a slink:VkFilterCubicImageViewImageFormatPropertiesEXT
-    structure, the pname:pNext chain of the
-    slink:VkPhysicalDeviceImageFormatInfo2 structure must: include a
-    slink:VkPhysicalDeviceImageViewImageFormatInfoEXT structure with an
-    pname:imageViewType that is compatible with pname:imageType
-****
---
-
-endif::VK_EXT_filter_cubic[]
-
-endif::VK_VERSION_1_1,VK_KHR_get_physical_device_properties2[]
-
-
-[[features-supported-sample-counts]]
-=== Supported Sample Counts
-fname:vkGetPhysicalDeviceImageFormatProperties returns a bitmask of
-elink:VkSampleCountFlagBits in pname:sampleCounts specifying the supported
-sample counts for the image parameters.
-
-pname:sampleCounts will be set to ename:VK_SAMPLE_COUNT_1_BIT if at least
-one of the following conditions is true:
-
-  * pname:tiling is ename:VK_IMAGE_TILING_LINEAR
-  * pname:type is not ename:VK_IMAGE_TYPE_2D
-  * pname:flags contains ename:VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT
-  * Neither the ename:VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT flag nor the
-    ename:VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT flag in
-    sname:VkFormatProperties::pname:optimalTilingFeatures returned by
-    flink:vkGetPhysicalDeviceFormatProperties is set
-ifdef::VK_VERSION_1_1,VK_KHR_external_memory_capabilities[]
-  * slink:VkPhysicalDeviceExternalImageFormatInfo::pname:handleType is an
-    external handle type for which multisampled image support is not
-    required.
-endif::VK_VERSION_1_1,VK_KHR_external_memory_capabilities[]
-ifdef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
-  * pname:format is one of the <<formats-requiring-sampler-ycbcr-conversion,
-    formats that require a sampler Y'C~B~C~R~ conversion>>
-endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
-ifdef::VK_KHR_fragment_shading_rate,VK_NV_shading_rate_image[]
-  * pname:usage contains
-    ename:VK_IMAGE_USAGE_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR
-endif::VK_KHR_fragment_shading_rate,VK_NV_shading_rate_image[]
-ifdef::VK_EXT_fragment_density_map[]
-  * pname:usage contains ename:VK_IMAGE_USAGE_FRAGMENT_DENSITY_MAP_BIT_EXT
-endif::VK_EXT_fragment_density_map[]
-
-Otherwise, the bits set in pname:sampleCounts will be the sample counts
-supported for the specified values of pname:usage and pname:format.
-For each bit set in pname:usage, the supported sample counts relate to the
-limits in sname:VkPhysicalDeviceLimits as follows:
-
-  * If pname:usage includes ename:VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT and
-    pname:format is a floating- or fixed-point color format, a superset of
-    sname:VkPhysicalDeviceLimits::pname:framebufferColorSampleCounts
-ifdef::VK_VERSION_1_2[]
-  * If pname:usage includes ename:VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT and
-    pname:format is an integer format, a superset of
-    sname:VkPhysicalDeviceVulkan12Properties::pname:framebufferIntegerColorSampleCounts
-endif::VK_VERSION_1_2[]
-  * If pname:usage includes
-    ename:VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT, and pname:format
-    includes a depth aspect, a superset of
-    sname:VkPhysicalDeviceLimits::pname:framebufferDepthSampleCounts
-  * If pname:usage includes
-    ename:VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT, and pname:format
-    includes a stencil aspect, a superset of
-    sname:VkPhysicalDeviceLimits::pname:framebufferStencilSampleCounts
-  * If pname:usage includes ename:VK_IMAGE_USAGE_SAMPLED_BIT, and
-    pname:format includes a color aspect, a superset of
-    sname:VkPhysicalDeviceLimits::pname:sampledImageColorSampleCounts
-  * If pname:usage includes ename:VK_IMAGE_USAGE_SAMPLED_BIT, and
-    pname:format includes a depth aspect, a superset of
-    sname:VkPhysicalDeviceLimits::pname:sampledImageDepthSampleCounts
-  * If pname:usage includes ename:VK_IMAGE_USAGE_SAMPLED_BIT, and
-    pname:format is an integer format, a superset of
-    sname:VkPhysicalDeviceLimits::pname:sampledImageIntegerSampleCounts
-  * If pname:usage includes ename:VK_IMAGE_USAGE_STORAGE_BIT, a superset of
-    sname:VkPhysicalDeviceLimits::pname:storageImageSampleCounts
-
-If multiple bits are set in pname:usage, pname:sampleCounts will be the
-intersection of the per-usage values described above.
-
-If none of the bits described above are set in pname:usage, then there is no
-corresponding limit in sname:VkPhysicalDeviceLimits.
-In this case, pname:sampleCounts must: include at least
-ename:VK_SAMPLE_COUNT_1_BIT.
-
-
-[[features-extentperimagetype]]
-=== Allowed Extent Values Based On Image Type
-
-Implementations may: support extent values larger than the <<limits-minmax,
-required minimum/maximum values>> for certain types of images.
-slink:VkImageFormatProperties::pname:maxExtent for each type is subject to
-the constraints below.
-
-[NOTE]
-.Note
-====
-Implementations must: support images with dimensions up to the
-<<limits-minmax, required minimum/maximum values>> for all types of images.
-It follows that the query for additional capabilities must: return extent
-values that are at least as large as the required values.
-====
-
-For ename:VK_IMAGE_TYPE_1D:
-
-  * [eq]#pname:maxExtent.width {geq}
-    slink:VkPhysicalDeviceLimits::pname:maxImageDimension1D#
-  * [eq]#pname:maxExtent.height = 1#
-  * [eq]#pname:maxExtent.depth = 1#
-
-For ename:VK_IMAGE_TYPE_2D when pname:flags does not contain
-ename:VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT:
-
-  * [eq]#pname:maxExtent.width {geq}
-    slink:VkPhysicalDeviceLimits::pname:maxImageDimension2D#
-  * [eq]#pname:maxExtent.height {geq}
-    slink:VkPhysicalDeviceLimits::pname:maxImageDimension2D#
-  * [eq]#pname:maxExtent.depth = 1#
-
-For ename:VK_IMAGE_TYPE_2D when pname:flags contains
-ename:VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT:
-
-  * [eq]#pname:maxExtent.width {geq}
-    slink:VkPhysicalDeviceLimits::pname:maxImageDimensionCube#
-  * [eq]#pname:maxExtent.height {geq}
-    slink:VkPhysicalDeviceLimits::pname:maxImageDimensionCube#
-  * [eq]#pname:maxExtent.depth = 1#
-
-For ename:VK_IMAGE_TYPE_3D:
-
-  * [eq]#pname:maxExtent.width {geq}
-    slink:VkPhysicalDeviceLimits::pname:maxImageDimension3D#
-  * [eq]#pname:maxExtent.height {geq}
-    slink:VkPhysicalDeviceLimits::pname:maxImageDimension3D#
-  * [eq]#pname:maxExtent.depth {geq}
-    slink:VkPhysicalDeviceLimits::pname:maxImageDimension3D#
-
-
-ifdef::VK_VERSION_1_1,VK_KHR_external_memory_capabilities[]
-[[capabilities-buffer]]
-== Additional Buffer Capabilities
-
-[open,refpage='vkGetPhysicalDeviceExternalBufferProperties',desc='Query external handle types supported by buffers',type='protos']
---
-To query the external handle types supported by buffers, call:
-
-ifdef::VK_VERSION_1_1[]
-include::{generated}/api/protos/vkGetPhysicalDeviceExternalBufferProperties.txt[]
-endif::VK_VERSION_1_1[]
-
-ifdef::VK_VERSION_1_1+VK_KHR_external_memory_capabilities[or the equivalent command]
-
-ifdef::VK_KHR_external_memory_capabilities[]
-include::{generated}/api/protos/vkGetPhysicalDeviceExternalBufferPropertiesKHR.txt[]
-endif::VK_KHR_external_memory_capabilities[]
-
-  * pname:physicalDevice is the physical device from which to query the
-    buffer capabilities.
-  * pname:pExternalBufferInfo is a pointer to a
-    slink:VkPhysicalDeviceExternalBufferInfo structure describing the
-    parameters that would be consumed by flink:vkCreateBuffer.
-  * pname:pExternalBufferProperties is a pointer to a
-    slink:VkExternalBufferProperties structure in which capabilities are
-    returned.
-
-include::{generated}/validity/protos/vkGetPhysicalDeviceExternalBufferProperties.txt[]
---
-
-[open,refpage='VkPhysicalDeviceExternalBufferInfo',desc='Structure specifying buffer creation parameters',type='structs']
---
-The sname:VkPhysicalDeviceExternalBufferInfo structure is defined as:
-
-include::{generated}/api/structs/VkPhysicalDeviceExternalBufferInfo.txt[]
-
-ifdef::VK_KHR_external_memory_capabilities[]
-or the equivalent
-
-include::{generated}/api/structs/VkPhysicalDeviceExternalBufferInfoKHR.txt[]
-endif::VK_KHR_external_memory_capabilities[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:flags is a bitmask of elink:VkBufferCreateFlagBits describing
-    additional parameters of the buffer, corresponding to
-    slink:VkBufferCreateInfo::pname:flags.
-  * pname:usage is a bitmask of elink:VkBufferUsageFlagBits describing the
-    intended usage of the buffer, corresponding to
-    slink:VkBufferCreateInfo::pname:usage.
-  * pname:handleType is a elink:VkExternalMemoryHandleTypeFlagBits value
-    specifying the memory handle type that will be used with the memory
-    associated with the buffer.
-
-include::{generated}/validity/structs/VkPhysicalDeviceExternalBufferInfo.txt[]
---
-
-[open,refpage='VkExternalBufferProperties',desc='Structure specifying supported external handle capabilities',type='structs']
---
-The sname:VkExternalBufferProperties structure is defined as:
-
-include::{generated}/api/structs/VkExternalBufferProperties.txt[]
-
-ifdef::VK_KHR_external_memory_capabilities[]
-or the equivalent
-
-include::{generated}/api/structs/VkExternalBufferPropertiesKHR.txt[]
-endif::VK_KHR_external_memory_capabilities[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:externalMemoryProperties is a slink:VkExternalMemoryProperties
-    structure specifying various capabilities of the external handle type
-    when used with the specified buffer creation parameters.
-
-include::{generated}/validity/structs/VkExternalBufferProperties.txt[]
---
-endif::VK_VERSION_1_1,VK_KHR_external_memory_capabilities[]
-
-
-ifdef::VK_VERSION_1_1,VK_KHR_external_semaphore_capabilities[]
-[[capabilities-semaphore]]
-== Optional Semaphore Capabilities
-
-[open,refpage='vkGetPhysicalDeviceExternalSemaphoreProperties',desc='Function for querying external semaphore handle capabilities.',type='protos']
---
-Semaphores may: support import and export of their
-<<synchronization-semaphores-payloads, payload>> to external handles.
-To query the external handle types supported by semaphores, call:
-
-ifdef::VK_VERSION_1_1[]
-include::{generated}/api/protos/vkGetPhysicalDeviceExternalSemaphoreProperties.txt[]
-endif::VK_VERSION_1_1[]
-
-ifdef::VK_VERSION_1_1+VK_KHR_external_semaphore_capabilities[or the equivalent command]
-
-ifdef::VK_KHR_external_semaphore_capabilities[]
-include::{generated}/api/protos/vkGetPhysicalDeviceExternalSemaphorePropertiesKHR.txt[]
-endif::VK_KHR_external_semaphore_capabilities[]
-
-  * pname:physicalDevice is the physical device from which to query the
-    semaphore capabilities.
-  * pname:pExternalSemaphoreInfo is a pointer to a
-    slink:VkPhysicalDeviceExternalSemaphoreInfo structure describing the
-    parameters that would be consumed by flink:vkCreateSemaphore.
-  * pname:pExternalSemaphoreProperties is a pointer to a
-    slink:VkExternalSemaphoreProperties structure in which capabilities are
-    returned.
-
-include::{generated}/validity/protos/vkGetPhysicalDeviceExternalSemaphoreProperties.txt[]
---
-
-[open,refpage='VkPhysicalDeviceExternalSemaphoreInfo',desc='Structure specifying semaphore creation parameters.',type='structs']
---
-The sname:VkPhysicalDeviceExternalSemaphoreInfo structure is defined as:
-
-include::{generated}/api/structs/VkPhysicalDeviceExternalSemaphoreInfo.txt[]
-
-ifdef::VK_KHR_external_semaphore_capabilities[]
-or the equivalent
-
-include::{generated}/api/structs/VkPhysicalDeviceExternalSemaphoreInfoKHR.txt[]
-endif::VK_KHR_external_semaphore_capabilities[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:handleType is a elink:VkExternalSemaphoreHandleTypeFlagBits value
-    specifying the external semaphore handle type for which capabilities
-    will be returned.
-
-include::{generated}/validity/structs/VkPhysicalDeviceExternalSemaphoreInfo.txt[]
---
-
-[open,refpage='VkExternalSemaphoreHandleTypeFlagBits',desc='Bitmask of valid external semaphore handle types',type='enums']
---
-Bits which may: be set in
-slink:VkPhysicalDeviceExternalSemaphoreInfo::pname:handleType, specifying an
-external semaphore handle type, are:
-
-include::{generated}/api/enums/VkExternalSemaphoreHandleTypeFlagBits.txt[]
-
-ifdef::VK_KHR_external_semaphore_capabilities[]
-or the equivalent
-
-include::{generated}/api/enums/VkExternalSemaphoreHandleTypeFlagBitsKHR.txt[]
-endif::VK_KHR_external_semaphore_capabilities[]
-
-  * ename:VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_FD_BIT specifies a POSIX
-    file descriptor handle that has only limited valid usage outside of
-    Vulkan and other compatible APIs.
-    It must: be compatible with the POSIX system calls code:dup, code:dup2,
-    code:close, and the non-standard system call code:dup3.
-    Additionally, it must: be transportable over a socket using an
-    code:SCM_RIGHTS control message.
-    It owns a reference to the underlying synchronization primitive
-    represented by its Vulkan semaphore object.
-  * ename:VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_BIT specifies an NT
-    handle that has only limited valid usage outside of Vulkan and other
-    compatible APIs.
-    It must: be compatible with the functions code:DuplicateHandle,
-    code:CloseHandle, code:CompareObjectHandles, code:GetHandleInformation,
-    and code:SetHandleInformation.
-    It owns a reference to the underlying synchronization primitive
-    represented by its Vulkan semaphore object.
-  * ename:VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT specifies a
-    global share handle that has only limited valid usage outside of Vulkan
-    and other compatible APIs.
-    It is not compatible with any native APIs.
-    It does not own a reference to the underlying synchronization primitive
-    represented by its Vulkan semaphore object, and will therefore become
-    invalid when all Vulkan semaphore objects associated with it are
-    destroyed.
-  * ename:VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_D3D12_FENCE_BIT specifies an NT
-    handle returned by code:ID3D12Device::code:CreateSharedHandle referring
-    to a Direct3D 12 fence, or code:ID3D11Device5::code:CreateFence
-    referring to a Direct3D 11 fence.
-    It owns a reference to the underlying synchronization primitive
-    associated with the Direct3D fence.
-  * ename:VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_D3D11_FENCE_BIT is an alias of
-    ename:VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_D3D12_FENCE_BIT with the same
-    meaning.
-    It is provided for convenience and code clarity when interacting with
-    D3D11 fences.
-  * ename:VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_SYNC_FD_BIT specifies a POSIX
-    file descriptor handle to a Linux Sync File or Android Fence object.
-    It can be used with any native API accepting a valid sync file or fence
-    as input.
-    It owns a reference to the underlying synchronization primitive
-    associated with the file descriptor.
-    Implementations which support importing this handle type must: accept
-    any type of sync or fence FD supported by the native system they are
-    running on.
-ifdef::VK_FUCHSIA_external_semaphore[]
-  * ename:VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_ZIRCON_EVENT_BIT_FUCHSIA
-    specifies a handle to a Zircon event object.
-    It can be used with any native API that accepts a Zircon event handle.
-    Zircon event handles are created with code:ZX_RIGHTS_BASIC and
-    code:ZX_RIGHTS_SIGNAL rights.
-    Vulkan on Fuchsia uses only the ZX_EVENT_SIGNALED bit when signaling or
-    waiting.
-endif::VK_FUCHSIA_external_semaphore[]
-
-[NOTE]
-.Note
-====
-Handles of type ename:VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_SYNC_FD_BIT
-generated by the implementation may represent either Linux Sync Files or
-Android Fences at the implementation's discretion.
-Applications should: only use operations defined for both types of file
-descriptors, unless they know via means external to Vulkan the type of the
-file descriptor, or are prepared to deal with the system-defined operation
-failures resulting from using the wrong type.
-====
-
-<<<
-
-Some external semaphore handle types can only be shared within the same
-underlying physical device and/or the same driver version, as defined in the
-following table:
-
-[[external-semaphore-handle-types-compatibility]]
-.External semaphore handle types compatibility
-|====
-| Handle type | sname:VkPhysicalDeviceIDProperties{wbro}::pname:driverUUID | sname:VkPhysicalDeviceIDProperties{wbro}::pname:deviceUUID
-| ename:VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_FD_BIT | Must match | Must match
-| ename:VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_BIT | Must match | Must match
-| ename:VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT | Must match | Must match
-| ename:VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_D3D12_FENCE_BIT | Must match | Must match
-| ename:VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_SYNC_FD_BIT | No restriction | No restriction
-| ename:VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_ZIRCON_EVENT_BIT_FUCHSIA | No restriction | No restriction
-|====
---
-
-[open,refpage='VkExternalSemaphoreHandleTypeFlags',desc='Bitmask of VkExternalSemaphoreHandleTypeFlagBits',type='flags']
---
-include::{generated}/api/flags/VkExternalSemaphoreHandleTypeFlags.txt[]
-
-ifdef::VK_KHR_external_semaphore_capabilities[]
-or the equivalent
-
-include::{generated}/api/flags/VkExternalSemaphoreHandleTypeFlagsKHR.txt[]
-endif::VK_KHR_external_semaphore_capabilities[]
-
-tname:VkExternalSemaphoreHandleTypeFlags is a bitmask type for setting a
-mask of zero or more elink:VkExternalSemaphoreHandleTypeFlagBits.
---
-
-[open,refpage='VkExternalSemaphoreProperties',desc='Structure describing supported external semaphore handle features',type='structs']
---
-The sname:VkExternalSemaphoreProperties structure is defined as:
-
-include::{generated}/api/structs/VkExternalSemaphoreProperties.txt[]
-
-ifdef::VK_KHR_external_semaphore_capabilities[]
-or the equivalent
-
-include::{generated}/api/structs/VkExternalSemaphorePropertiesKHR.txt[]
-endif::VK_KHR_external_semaphore_capabilities[]
-
-  * pname:sType is the type of this structure
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:exportFromImportedHandleTypes is a bitmask of
-    elink:VkExternalSemaphoreHandleTypeFlagBits specifying which types of
-    imported handle pname:handleType can: be exported from.
-  * pname:compatibleHandleTypes is a bitmask of
-    elink:VkExternalSemaphoreHandleTypeFlagBits specifying handle types
-    which can: be specified at the same time as pname:handleType when
-    creating a semaphore.
-  * pname:externalSemaphoreFeatures is a bitmask of
-    elink:VkExternalSemaphoreFeatureFlagBits describing the features of
-    pname:handleType.
-
-If pname:handleType is not supported by the implementation, then
-slink:VkExternalSemaphoreProperties::pname:externalSemaphoreFeatures will be
-set to zero.
-
-include::{generated}/validity/structs/VkExternalSemaphoreProperties.txt[]
---
-
-[open,refpage='VkExternalSemaphoreFeatureFlagBits',desc='Bitfield describing features of an external semaphore handle type',type='enums']
---
-Possible values of
-slink:VkExternalSemaphoreProperties::pname:externalSemaphoreFeatures,
-specifying the features of an external semaphore handle type, are:
-
-include::{generated}/api/enums/VkExternalSemaphoreFeatureFlagBits.txt[]
-
-ifdef::VK_KHR_external_semaphore_capabilities[]
-or the equivalent
-
-include::{generated}/api/enums/VkExternalSemaphoreFeatureFlagBitsKHR.txt[]
-endif::VK_KHR_external_semaphore_capabilities[]
-
-  * ename:VK_EXTERNAL_SEMAPHORE_FEATURE_EXPORTABLE_BIT specifies that
-    handles of this type can: be exported from Vulkan semaphore objects.
-  * ename:VK_EXTERNAL_SEMAPHORE_FEATURE_IMPORTABLE_BIT specifies that
-    handles of this type can: be imported as Vulkan semaphore objects.
---
-
-[open,refpage='VkExternalSemaphoreFeatureFlags',desc='Bitmask of VkExternalSemaphoreFeatureFlagBitsKHR',type='flags']
---
-include::{generated}/api/flags/VkExternalSemaphoreFeatureFlags.txt[]
-
-ifdef::VK_KHR_external_semaphore_capabilities[]
-or the equivalent
-
-include::{generated}/api/flags/VkExternalSemaphoreFeatureFlagsKHR.txt[]
-endif::VK_KHR_external_semaphore_capabilities[]
-
-tname:VkExternalSemaphoreFeatureFlags is a bitmask type for setting a mask
-of zero or more elink:VkExternalSemaphoreFeatureFlagBits.
---
-endif::VK_VERSION_1_1,VK_KHR_external_semaphore_capabilities[]
-
-
-ifdef::VK_VERSION_1_1,VK_KHR_external_fence_capabilities[]
-[[capabilities-fence]]
-== Optional Fence Capabilities
-
-[open,refpage='vkGetPhysicalDeviceExternalFenceProperties',desc='Function for querying external fence handle capabilities.',type='protos']
---
-Fences may: support import and export of their
-<<synchronization-fences-payloads, payload>> to external handles.
-To query the external handle types supported by fences, call:
-
-ifdef::VK_VERSION_1_1[]
-include::{generated}/api/protos/vkGetPhysicalDeviceExternalFenceProperties.txt[]
-endif::VK_VERSION_1_1[]
-
-ifdef::VK_VERSION_1_1+VK_KHR_external_fence_capabilities[or the equivalent command]
-
-ifdef::VK_KHR_external_fence_capabilities[]
-include::{generated}/api/protos/vkGetPhysicalDeviceExternalFencePropertiesKHR.txt[]
-endif::VK_KHR_external_fence_capabilities[]
-
-  * pname:physicalDevice is the physical device from which to query the
-    fence capabilities.
-  * pname:pExternalFenceInfo is a pointer to a
-    slink:VkPhysicalDeviceExternalFenceInfo structure describing the
-    parameters that would be consumed by flink:vkCreateFence.
-  * pname:pExternalFenceProperties is a pointer to a
-    slink:VkExternalFenceProperties structure in which capabilities are
-    returned.
-
-include::{generated}/validity/protos/vkGetPhysicalDeviceExternalFenceProperties.txt[]
---
-
-[open,refpage='VkPhysicalDeviceExternalFenceInfo',desc='Structure specifying fence creation parameters.',type='structs']
---
-The sname:VkPhysicalDeviceExternalFenceInfo structure is defined as:
-
-include::{generated}/api/structs/VkPhysicalDeviceExternalFenceInfo.txt[]
-
-ifdef::VK_KHR_external_fence_capabilities[]
-or the equivalent
-
-include::{generated}/api/structs/VkPhysicalDeviceExternalFenceInfoKHR.txt[]
-endif::VK_KHR_external_fence_capabilities[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:handleType is a elink:VkExternalFenceHandleTypeFlagBits value
-    specifying an external fence handle type for which capabilities will be
-    returned.
-
-[NOTE]
-.Note
-====
-Handles of type ename:VK_EXTERNAL_FENCE_HANDLE_TYPE_SYNC_FD_BIT generated by
-the implementation may represent either Linux Sync Files or Android Fences
-at the implementation's discretion.
-Applications should: only use operations defined for both types of file
-descriptors, unless they know via means external to Vulkan the type of the
-file descriptor, or are prepared to deal with the system-defined operation
-failures resulting from using the wrong type.
-====
-
-include::{generated}/validity/structs/VkPhysicalDeviceExternalFenceInfo.txt[]
---
-
-[open,refpage='VkExternalFenceHandleTypeFlagBits',desc='Bitmask of valid external fence handle types',type='enums']
---
-Bits which may: be set in
-slink:VkPhysicalDeviceExternalFenceInfo::pname:handleType, and in the
-pname:exportFromImportedHandleTypes and pname:compatibleHandleTypes members
-of slink:VkExternalFenceProperties, to indicate external fence handle types,
-are:
-
-include::{generated}/api/enums/VkExternalFenceHandleTypeFlagBits.txt[]
-
-ifdef::VK_KHR_external_fence_capabilities[]
-or the equivalent
-
-include::{generated}/api/enums/VkExternalFenceHandleTypeFlagBitsKHR.txt[]
-endif::VK_KHR_external_fence_capabilities[]
-
-  * ename:VK_EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_FD_BIT specifies a POSIX file
-    descriptor handle that has only limited valid usage outside of Vulkan
-    and other compatible APIs.
-    It must: be compatible with the POSIX system calls code:dup, code:dup2,
-    code:close, and the non-standard system call code:dup3.
-    Additionally, it must: be transportable over a socket using an
-    code:SCM_RIGHTS control message.
-    It owns a reference to the underlying synchronization primitive
-    represented by its Vulkan fence object.
-  * ename:VK_EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_WIN32_BIT specifies an NT
-    handle that has only limited valid usage outside of Vulkan and other
-    compatible APIs.
-    It must: be compatible with the functions code:DuplicateHandle,
-    code:CloseHandle, code:CompareObjectHandles, code:GetHandleInformation,
-    and code:SetHandleInformation.
-    It owns a reference to the underlying synchronization primitive
-    represented by its Vulkan fence object.
-  * ename:VK_EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT specifies a
-    global share handle that has only limited valid usage outside of Vulkan
-    and other compatible APIs.
-    It is not compatible with any native APIs.
-    It does not own a reference to the underlying synchronization primitive
-    represented by its Vulkan fence object, and will therefore become
-    invalid when all Vulkan fence objects associated with it are destroyed.
-  * ename:VK_EXTERNAL_FENCE_HANDLE_TYPE_SYNC_FD_BIT specifies a POSIX file
-    descriptor handle to a Linux Sync File or Android Fence.
-    It can be used with any native API accepting a valid sync file or fence
-    as input.
-    It owns a reference to the underlying synchronization primitive
-    associated with the file descriptor.
-    Implementations which support importing this handle type must: accept
-    any type of sync or fence FD supported by the native system they are
-    running on.
-
-<<<
-
-Some external fence handle types can only be shared within the same
-underlying physical device and/or the same driver version, as defined in the
-following table:
-
-[[external-fence-handle-types-compatibility]]
-.External fence handle types compatibility
-|====
-| Handle type | sname:VkPhysicalDeviceIDProperties{wbro}::pname:driverUUID | sname:VkPhysicalDeviceIDProperties{wbro}::pname:deviceUUID
-| ename:VK_EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_FD_BIT | Must match | Must match
-| ename:VK_EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_WIN32_BIT | Must match | Must match
-| ename:VK_EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT | Must match | Must match
-| ename:VK_EXTERNAL_FENCE_HANDLE_TYPE_SYNC_FD_BIT | No restriction | No restriction
-|====
---
-
-[open,refpage='VkExternalFenceHandleTypeFlags',desc='Bitmask of VkExternalFenceHandleTypeFlagBits',type='flags']
---
-include::{generated}/api/flags/VkExternalFenceHandleTypeFlags.txt[]
-
-ifdef::VK_KHR_external_fence_capabilities[]
-or the equivalent
-
-include::{generated}/api/flags/VkExternalFenceHandleTypeFlagsKHR.txt[]
-endif::VK_KHR_external_fence_capabilities[]
-
-tname:VkExternalFenceHandleTypeFlags is a bitmask type for setting a mask of
-zero or more elink:VkExternalFenceHandleTypeFlagBits.
---
-
-[open,refpage='VkExternalFenceProperties',desc='Structure describing supported external fence handle features',type='structs']
---
-The sname:VkExternalFenceProperties structure is defined as:
-
-include::{generated}/api/structs/VkExternalFenceProperties.txt[]
-
-ifdef::VK_KHR_external_fence_capabilities[]
-or the equivalent
-
-include::{generated}/api/structs/VkExternalFencePropertiesKHR.txt[]
-endif::VK_KHR_external_fence_capabilities[]
-
-  * pname:exportFromImportedHandleTypes is a bitmask of
-    elink:VkExternalFenceHandleTypeFlagBits indicating which types of
-    imported handle pname:handleType can: be exported from.
-  * pname:compatibleHandleTypes is a bitmask of
-    elink:VkExternalFenceHandleTypeFlagBits specifying handle types which
-    can: be specified at the same time as pname:handleType when creating a
-    fence.
-  * pname:externalFenceFeatures is a bitmask of
-    elink:VkExternalFenceFeatureFlagBits indicating the features of
-    pname:handleType.
-
-If pname:handleType is not supported by the implementation, then
-slink:VkExternalFenceProperties::pname:externalFenceFeatures will be set to
-zero.
-
-include::{generated}/validity/structs/VkExternalFenceProperties.txt[]
---
-
-[open,refpage='VkExternalFenceFeatureFlagBits',desc='Bitfield describing features of an external fence handle type',type='enums']
---
-Bits which may: be set in
-slink:VkExternalFenceProperties::pname:externalFenceFeatures, indicating
-features of a fence external handle type, are:
-
-include::{generated}/api/enums/VkExternalFenceFeatureFlagBits.txt[]
-
-ifdef::VK_KHR_external_fence_capabilities[]
-or the equivalent
-
-include::{generated}/api/enums/VkExternalFenceFeatureFlagBitsKHR.txt[]
-endif::VK_KHR_external_fence_capabilities[]
-
-  * ename:VK_EXTERNAL_FENCE_FEATURE_EXPORTABLE_BIT specifies handles of this
-    type can: be exported from Vulkan fence objects.
-  * ename:VK_EXTERNAL_FENCE_FEATURE_IMPORTABLE_BIT specifies handles of this
-    type can: be imported to Vulkan fence objects.
---
-
-[open,refpage='VkExternalFenceFeatureFlags',desc='Bitmask of VkExternalFenceFeatureFlagBits',type='flags']
---
-include::{generated}/api/flags/VkExternalFenceFeatureFlags.txt[]
-
-ifdef::VK_KHR_external_fence_capabilities[]
-or the equivalent
-
-include::{generated}/api/flags/VkExternalFenceFeatureFlagsKHR.txt[]
-endif::VK_KHR_external_fence_capabilities[]
-
-tname:VkExternalFenceFeatureFlags is a bitmask type for setting a mask of
-zero or more elink:VkExternalFenceFeatureFlagBits.
---
-endif::VK_VERSION_1_1,VK_KHR_external_fence_capabilities[]
-
-
-ifdef::VK_EXT_calibrated_timestamps[]
-[[features-timestamp-calibration]]
-== Timestamp Calibration Capabilities
-
-[open,refpage='vkGetPhysicalDeviceCalibrateableTimeDomainsEXT',desc='Query calibrateable time domains',type='protos']
---
-To query the set of time domains for which a physical device supports
-timestamp calibration, call:
-
-include::{generated}/api/protos/vkGetPhysicalDeviceCalibrateableTimeDomainsEXT.txt[]
-
-  * pname:physicalDevice is the physical device from which to query the set
-    of calibrateable time domains.
-  * pname:pTimeDomainCount is a pointer to an integer related to the number
-    of calibrateable time domains available or queried, as described below.
-  * pname:pTimeDomains is either `NULL` or a pointer to an array of
-    elink:VkTimeDomainEXT values, indicating the supported calibrateable
-    time domains.
-
-If pname:pTimeDomains is `NULL`, then the number of calibrateable time
-domains supported for the given pname:physicalDevice is returned in
-pname:pTimeDomainCount.
-Otherwise, pname:pTimeDomainCount must: point to a variable set by the user
-to the number of elements in the pname:pTimeDomains array, and on return the
-variable is overwritten with the number of values actually written to
-pname:pTimeDomains.
-If the value of pname:pTimeDomainCount is less than the number of
-calibrateable time domains supported, at most pname:pTimeDomainCount values
-will be written to pname:pTimeDomains, and ename:VK_INCOMPLETE will be
-returned instead of ename:VK_SUCCESS, to indicate that not all the available
-time domains were returned.
-
-include::{generated}/validity/protos/vkGetPhysicalDeviceCalibrateableTimeDomainsEXT.txt[]
---
-endif::VK_EXT_calibrated_timestamps[]
diff --git a/registry/vulkan/chapters/clears.txt b/registry/vulkan/chapters/clears.txt
deleted file mode 100644
index c1d399b..0000000
--- a/registry/vulkan/chapters/clears.txt
+++ /dev/null
@@ -1,654 +0,0 @@
-// Copyright 2015-2021 The Khronos Group, Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-[[clears]]
-= Clear Commands
-
-
-[[clears-outside]]
-== Clearing Images Outside A Render Pass Instance
-
-Color and depth/stencil images can: be cleared outside a render pass
-instance using flink:vkCmdClearColorImage or
-flink:vkCmdClearDepthStencilImage, respectively.
-These commands are only allowed outside of a render pass instance.
-
-[open,refpage='vkCmdClearColorImage',desc='Clear regions of a color image',type='protos']
---
-To clear one or more subranges of a color image, call:
-
-include::{generated}/api/protos/vkCmdClearColorImage.txt[]
-
-  * pname:commandBuffer is the command buffer into which the command will be
-    recorded.
-  * pname:image is the image to be cleared.
-  * pname:imageLayout specifies the current layout of the image subresource
-    ranges to be cleared, and must: be
-ifdef::VK_KHR_shared_presentable_image[]
-    ename:VK_IMAGE_LAYOUT_SHARED_PRESENT_KHR,
-endif::VK_KHR_shared_presentable_image[]
-    ename:VK_IMAGE_LAYOUT_GENERAL or
-    ename:VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL.
-  * pname:pColor is a pointer to a slink:VkClearColorValue structure
-    containing the values that the image subresource ranges will be cleared
-    to (see <<clears-values>> below).
-  * pname:rangeCount is the number of image subresource range structures in
-    pname:pRanges.
-  * pname:pRanges is a pointer to an array of slink:VkImageSubresourceRange
-    structures describing a range of mipmap levels, array layers, and
-    aspects to be cleared, as described in <<resources-image-views,Image
-    Views>>.
-
-Each specified range in pname:pRanges is cleared to the value specified by
-pname:pColor.
-
-.Valid Usage
-****
-ifdef::VK_VERSION_1_1,VK_KHR_maintenance1[]
-  * [[VUID-vkCmdClearColorImage-image-01993]]
-    The <<resources-image-format-features,format features>> of pname:image
-    must: contain ename:VK_FORMAT_FEATURE_TRANSFER_DST_BIT
-endif::VK_VERSION_1_1,VK_KHR_maintenance1[]
-  * [[VUID-vkCmdClearColorImage-image-00002]]
-    pname:image must: have been created with
-    ename:VK_IMAGE_USAGE_TRANSFER_DST_BIT usage flag
-ifdef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
-  * [[VUID-vkCmdClearColorImage-image-01545]]
-    pname:image must: not use any of the
-    <<formats-requiring-sampler-ycbcr-conversion, formats that require a
-    sampler Y'C~B~C~R~ conversion>>
-endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
-  * [[VUID-vkCmdClearColorImage-image-00003]]
-    If pname:image is non-sparse then it must: be bound completely and
-    contiguously to a single sname:VkDeviceMemory object
-  * [[VUID-vkCmdClearColorImage-imageLayout-00004]]
-    pname:imageLayout must: specify the layout of the image subresource
-    ranges of pname:image specified in pname:pRanges at the time this
-    command is executed on a sname:VkDevice
-ifndef::VK_KHR_shared_presentable_image[]
-  * [[VUID-vkCmdClearColorImage-imageLayout-00005]]
-    pname:imageLayout must: be ename:VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL or
-    ename:VK_IMAGE_LAYOUT_GENERAL
-endif::VK_KHR_shared_presentable_image[]
-ifdef::VK_KHR_shared_presentable_image[]
-  * [[VUID-vkCmdClearColorImage-imageLayout-01394]]
-    pname:imageLayout must: be ename:VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL,
-    ename:VK_IMAGE_LAYOUT_GENERAL, or
-    ename:VK_IMAGE_LAYOUT_SHARED_PRESENT_KHR
-endif::VK_KHR_shared_presentable_image[]
-  * [[VUID-vkCmdClearColorImage-aspectMask-02498]]
-    The slink:VkImageSubresourceRange::pname:aspectMask members of the
-    elements of the pname:pRanges array must: each only include
-    ename:VK_IMAGE_ASPECT_COLOR_BIT
-  * [[VUID-vkCmdClearColorImage-baseMipLevel-01470]]
-    The slink:VkImageSubresourceRange::pname:baseMipLevel members of the
-    elements of the pname:pRanges array must: each be less than the
-    pname:mipLevels specified in slink:VkImageCreateInfo when pname:image
-    was created
-  * [[VUID-vkCmdClearColorImage-pRanges-01692]]
-    For each slink:VkImageSubresourceRange element of pname:pRanges, if the
-    pname:levelCount member is not ename:VK_REMAINING_MIP_LEVELS, then
-    [eq]#pname:baseMipLevel {plus} pname:levelCount# must: be less than the
-    pname:mipLevels specified in slink:VkImageCreateInfo when pname:image
-    was created
-  * [[VUID-vkCmdClearColorImage-baseArrayLayer-01472]]
-    The slink:VkImageSubresourceRange::pname:baseArrayLayer members of the
-    elements of the pname:pRanges array must: each be less than the
-    pname:arrayLayers specified in slink:VkImageCreateInfo when pname:image
-    was created
-  * [[VUID-vkCmdClearColorImage-pRanges-01693]]
-    For each slink:VkImageSubresourceRange element of pname:pRanges, if the
-    pname:layerCount member is not ename:VK_REMAINING_ARRAY_LAYERS, then
-    [eq]#pname:baseArrayLayer {plus} pname:layerCount# must: be less than
-    the pname:arrayLayers specified in slink:VkImageCreateInfo when
-    pname:image was created
-  * [[VUID-vkCmdClearColorImage-image-00007]]
-    pname:image must: not have a compressed or depth/stencil format
-  * [[VUID-vkCmdClearColorImage-pColor-04961]]
-    pname:pColor must: be a valid pointer to a slink:VkClearColorValue union
-ifdef::VK_VERSION_1_1[]
-  * [[VUID-vkCmdClearColorImage-commandBuffer-01805]]
-    If pname:commandBuffer is an unprotected command buffer and
-    <<limits-protectedNoFault, pname:protectedNoFault>> is not supported,
-    pname:image must: not be a protected image
-  * [[VUID-vkCmdClearColorImage-commandBuffer-01806]]
-    If pname:commandBuffer is a protected command buffer and
-    <<limits-protectedNoFault, pname:protectedNoFault>> is not supported,
-    must: not be an unprotected image
-endif::VK_VERSION_1_1[]
-****
-
-include::{generated}/validity/protos/vkCmdClearColorImage.txt[]
---
-
-[open,refpage='vkCmdClearDepthStencilImage',desc='Fill regions of a combined depth/stencil image',type='protos']
---
-To clear one or more subranges of a depth/stencil image, call:
-
-include::{generated}/api/protos/vkCmdClearDepthStencilImage.txt[]
-
-  * pname:commandBuffer is the command buffer into which the command will be
-    recorded.
-  * pname:image is the image to be cleared.
-  * pname:imageLayout specifies the current layout of the image subresource
-    ranges to be cleared, and must: be ename:VK_IMAGE_LAYOUT_GENERAL or
-    ename:VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL.
-  * pname:pDepthStencil is a pointer to a slink:VkClearDepthStencilValue
-    structure containing the values that the depth and stencil image
-    subresource ranges will be cleared to (see <<clears-values>> below).
-  * pname:rangeCount is the number of image subresource range structures in
-    pname:pRanges.
-  * pname:pRanges is a pointer to an array of slink:VkImageSubresourceRange
-    structures describing a range of mipmap levels, array layers, and
-    aspects to be cleared, as described in <<resources-image-views,Image
-    Views>>.
-
-.Valid Usage
-****
-ifdef::VK_VERSION_1_1,VK_KHR_maintenance1[]
-  * [[VUID-vkCmdClearDepthStencilImage-image-01994]]
-    The <<resources-image-format-features,format features>> of pname:image
-    must: contain ename:VK_FORMAT_FEATURE_TRANSFER_DST_BIT
-endif::VK_VERSION_1_1,VK_KHR_maintenance1[]
-ifndef::VK_VERSION_1_2,VK_EXT_separate_stencil_usage[]
-  * [[VUID-vkCmdClearDepthStencilImage-image-00009]]
-    pname:image must: have been created with
-    ename:VK_IMAGE_USAGE_TRANSFER_DST_BIT usage flag
-endif::VK_VERSION_1_2,VK_EXT_separate_stencil_usage[]
-ifdef::VK_VERSION_1_2,VK_EXT_separate_stencil_usage[]
-  * [[VUID-vkCmdClearDepthStencilImage-pRanges-02658]]
-    If the pname:aspect member of any element of pname:pRanges includes
-    ename:VK_IMAGE_ASPECT_STENCIL_BIT, and pname:image was created with
-    <<VkImageStencilUsageCreateInfo,separate stencil usage>>,
-    ename:VK_IMAGE_USAGE_TRANSFER_DST_BIT must: have been included in the
-    slink:VkImageStencilUsageCreateInfo::pname:stencilUsage used to create
-    pname:image
-  * [[VUID-vkCmdClearDepthStencilImage-pRanges-02659]]
-    If the pname:aspect member of any element of pname:pRanges includes
-    ename:VK_IMAGE_ASPECT_STENCIL_BIT, and pname:image was not created with
-    <<VkImageStencilUsageCreateInfo,separate stencil usage>>,
-    ename:VK_IMAGE_USAGE_TRANSFER_DST_BIT must: have been included in the
-    slink:VkImageCreateInfo::pname:usage used to create pname:image
-  * [[VUID-vkCmdClearDepthStencilImage-pRanges-02660]]
-    If the pname:aspect member of any element of pname:pRanges includes
-    ename:VK_IMAGE_ASPECT_DEPTH_BIT, ename:VK_IMAGE_USAGE_TRANSFER_DST_BIT
-    must: have been included in the slink:VkImageCreateInfo::pname:usage
-    used to create pname:image
-endif::VK_VERSION_1_2,VK_EXT_separate_stencil_usage[]
-  * [[VUID-vkCmdClearDepthStencilImage-image-00010]]
-    If pname:image is non-sparse then it must: be bound completely and
-    contiguously to a single sname:VkDeviceMemory object
-  * [[VUID-vkCmdClearDepthStencilImage-imageLayout-00011]]
-    pname:imageLayout must: specify the layout of the image subresource
-    ranges of pname:image specified in pname:pRanges at the time this
-    command is executed on a sname:VkDevice
-  * [[VUID-vkCmdClearDepthStencilImage-imageLayout-00012]]
-    pname:imageLayout must: be either of
-    ename:VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL or
-    ename:VK_IMAGE_LAYOUT_GENERAL
-  * [[VUID-vkCmdClearDepthStencilImage-aspectMask-02824]]
-    The slink:VkImageSubresourceRange::pname:aspectMask member of each
-    element of the pname:pRanges array must: not include bits other than
-    ename:VK_IMAGE_ASPECT_DEPTH_BIT or ename:VK_IMAGE_ASPECT_STENCIL_BIT
-  * [[VUID-vkCmdClearDepthStencilImage-image-02825]]
-    If the pname:image's format does not have a stencil component, then the
-    slink:VkImageSubresourceRange::pname:aspectMask member of each element
-    of the pname:pRanges array must: not include the
-    ename:VK_IMAGE_ASPECT_STENCIL_BIT bit
-  * [[VUID-vkCmdClearDepthStencilImage-image-02826]]
-    If the pname:image's format does not have a depth component, then the
-    slink:VkImageSubresourceRange::pname:aspectMask member of each element
-    of the pname:pRanges array must: not include the
-    ename:VK_IMAGE_ASPECT_DEPTH_BIT bit
-  * [[VUID-vkCmdClearDepthStencilImage-baseMipLevel-01474]]
-    The slink:VkImageSubresourceRange::pname:baseMipLevel members of the
-    elements of the pname:pRanges array must: each be less than the
-    pname:mipLevels specified in slink:VkImageCreateInfo when pname:image
-    was created
-  * [[VUID-vkCmdClearDepthStencilImage-pRanges-01694]]
-    For each slink:VkImageSubresourceRange element of pname:pRanges, if the
-    pname:levelCount member is not ename:VK_REMAINING_MIP_LEVELS, then
-    [eq]#pname:baseMipLevel {plus} pname:levelCount# must: be less than the
-    pname:mipLevels specified in slink:VkImageCreateInfo when pname:image
-    was created
-  * [[VUID-vkCmdClearDepthStencilImage-baseArrayLayer-01476]]
-    The slink:VkImageSubresourceRange::pname:baseArrayLayer members of the
-    elements of the pname:pRanges array must: each be less than the
-    pname:arrayLayers specified in slink:VkImageCreateInfo when pname:image
-    was created
-  * [[VUID-vkCmdClearDepthStencilImage-pRanges-01695]]
-    For each slink:VkImageSubresourceRange element of pname:pRanges, if the
-    pname:layerCount member is not ename:VK_REMAINING_ARRAY_LAYERS, then
-    [eq]#pname:baseArrayLayer {plus} pname:layerCount# must: be less than
-    the pname:arrayLayers specified in slink:VkImageCreateInfo when
-    pname:image was created
-  * [[VUID-vkCmdClearDepthStencilImage-image-00014]]
-    pname:image must: have a depth/stencil format
-ifdef::VK_VERSION_1_1[]
-  * [[VUID-vkCmdClearDepthStencilImage-commandBuffer-01807]]
-    If pname:commandBuffer is an unprotected command buffer and
-    <<limits-protectedNoFault, pname:protectedNoFault>> is not supported,
-    pname:image must: not be a protected image
-  * [[VUID-vkCmdClearDepthStencilImage-commandBuffer-01808]]
-    If pname:commandBuffer is a protected command buffer and
-    <<limits-protectedNoFault, pname:protectedNoFault>> is not supported,
-    pname:image must: not be an unprotected image
-endif::VK_VERSION_1_1[]
-****
-
-include::{generated}/validity/protos/vkCmdClearDepthStencilImage.txt[]
---
-
-Clears outside render pass instances are treated as transfer operations for
-the purposes of memory barriers.
-
-
-[[clears-inside]]
-== Clearing Images Inside A Render Pass Instance
-
-[open,refpage='vkCmdClearAttachments',desc='Clear regions within bound framebuffer attachments',type='protos']
---
-To clear one or more regions of color and depth/stencil attachments inside a
-render pass instance, call:
-
-include::{generated}/api/protos/vkCmdClearAttachments.txt[]
-
-  * pname:commandBuffer is the command buffer into which the command will be
-    recorded.
-  * pname:attachmentCount is the number of entries in the pname:pAttachments
-    array.
-  * pname:pAttachments is a pointer to an array of slink:VkClearAttachment
-    structures defining the attachments to clear and the clear values to
-    use.
-    If any attachment index to be cleared is not backed by an image view,
-    then the clear has no effect.
-  * pname:rectCount is the number of entries in the pname:pRects array.
-  * pname:pRects is a pointer to an array of slink:VkClearRect structures
-    defining regions within each selected attachment to clear.
-
-ifdef::VK_EXT_fragment_density_map[]
-If the render pass has a <<renderpass-fragmentdensitymapattachment,fragment
-density map attachment>>, clears follow the
-<<fragmentdensitymapops,operations of fragment density maps>> as if each
-clear region was a primitive which generates fragments.
-The clear color is applied to all pixels inside each fragment's area
-regardless if the pixels lie outside of the clear region.
-Clears may: have a different set of supported fragment areas than draws.
-endif::VK_EXT_fragment_density_map[]
-
-Unlike other <<clears,clear commands>>, flink:vkCmdClearAttachments executes
-as a drawing command, rather than a transfer command, with writes performed
-by it executing in <<primsrast-order, rasterization order>>.
-Clears to color attachments are executed as color attachment writes, by the
-ename:VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT stage.
-Clears to depth/stencil attachments are executed as <<fragops-depth, depth
-writes>> and <<fragops-stencil, writes>> by the
-ename:VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT and
-ename:VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT stages.
-
-fname:vkCmdClearAttachments is not affected by the bound pipeline state.
-
-[NOTE]
-.Note
-====
-It's generally advised that attachments are cleared by using the
-ename:VK_ATTACHMENT_LOAD_OP_CLEAR load operation at the start of rendering,
-which will be more efficient on some implementations.
-====
-
-.Valid Usage
-****
-  * [[VUID-vkCmdClearAttachments-aspectMask-02501]]
-    If the pname:aspectMask member of any element of pname:pAttachments
-    contains ename:VK_IMAGE_ASPECT_COLOR_BIT, then the pname:colorAttachment
-    member of that element must: either refer to a color attachment which is
-    ename:VK_ATTACHMENT_UNUSED, or must: be a valid color attachment
-  * [[VUID-vkCmdClearAttachments-aspectMask-02502]]
-    If the pname:aspectMask member of any element of pname:pAttachments
-    contains ename:VK_IMAGE_ASPECT_DEPTH_BIT, then the current subpass'
-    depth/stencil attachment must: either be ename:VK_ATTACHMENT_UNUSED, or
-    must: have a depth component
-  * [[VUID-vkCmdClearAttachments-aspectMask-02503]]
-    If the pname:aspectMask member of any element of pname:pAttachments
-    contains ename:VK_IMAGE_ASPECT_STENCIL_BIT, then the current subpass'
-    depth/stencil attachment must: either be ename:VK_ATTACHMENT_UNUSED, or
-    must: have a stencil component
-  * [[VUID-vkCmdClearAttachments-rect-02682]]
-    The pname:rect member of each element of pname:pRects must: have an
-    pname:extent.width greater than `0`
-  * [[VUID-vkCmdClearAttachments-rect-02683]]
-    The pname:rect member of each element of pname:pRects must: have an
-    pname:extent.height greater than `0`
-  * [[VUID-vkCmdClearAttachments-pRects-00016]]
-    The rectangular region specified by each element of pname:pRects must:
-    be contained within the render area of the current render pass instance
-  * [[VUID-vkCmdClearAttachments-pRects-00017]]
-    The layers specified by each element of pname:pRects must: be contained
-    within every attachment that pname:pAttachments refers to
-  * [[VUID-vkCmdClearAttachments-layerCount-01934]]
-    The pname:layerCount member of each element of pname:pRects must: not be
-    `0`
-ifdef::VK_VERSION_1_1[]
-  * [[VUID-vkCmdClearAttachments-commandBuffer-02504]]
-    If pname:commandBuffer is an unprotected command buffer and
-    <<limits-protectedNoFault, pname:protectedNoFault>> is not supported,
-    each attachment to be cleared must: not be a protected image
-  * [[VUID-vkCmdClearAttachments-commandBuffer-02505]]
-    If pname:commandBuffer is a protected command buffer and
-    <<limits-protectedNoFault, pname:protectedNoFault>> is not supported,
-    each attachment to be cleared must: not be an unprotected image
-endif::VK_VERSION_1_1[]
-ifdef::VK_VERSION_1_1,VK_KHR_multiview[]
-  * [[VUID-vkCmdClearAttachments-baseArrayLayer-00018]]
-    If the render pass instance this is recorded in uses multiview, then
-    pname:baseArrayLayer must: be zero and pname:layerCount must: be one
-endif::VK_VERSION_1_1,VK_KHR_multiview[]
-****
-
-include::{generated}/validity/protos/vkCmdClearAttachments.txt[]
---
-
-[open,refpage='VkClearRect',desc='Structure specifying a clear rectangle',type='structs']
---
-The sname:VkClearRect structure is defined as:
-
-include::{generated}/api/structs/VkClearRect.txt[]
-
-  * pname:rect is the two-dimensional region to be cleared.
-  * pname:baseArrayLayer is the first layer to be cleared.
-  * pname:layerCount is the number of layers to clear.
-
-The layers [eq]#[pname:baseArrayLayer, pname:baseArrayLayer {plus}
-pname:layerCount)# counting from the base layer of the attachment image view
-are cleared.
-
-include::{generated}/validity/structs/VkClearRect.txt[]
---
-
-[open,refpage='VkClearAttachment',desc='Structure specifying a clear attachment',type='structs']
---
-The sname:VkClearAttachment structure is defined as:
-
-include::{generated}/api/structs/VkClearAttachment.txt[]
-
-  * pname:aspectMask is a mask selecting the color, depth and/or stencil
-    aspects of the attachment to be cleared.
-  * pname:colorAttachment is only meaningful if
-    ename:VK_IMAGE_ASPECT_COLOR_BIT is set in pname:aspectMask, in which
-    case it is an index into the currently bound color attachments.
-  * pname:clearValue is the color or depth/stencil value to clear the
-    attachment to, as described in <<clears-values,Clear Values>> below.
-
-.Valid Usage
-****
-  * [[VUID-VkClearAttachment-aspectMask-00019]]
-    If pname:aspectMask includes ename:VK_IMAGE_ASPECT_COLOR_BIT, it must:
-    not include ename:VK_IMAGE_ASPECT_DEPTH_BIT or
-    ename:VK_IMAGE_ASPECT_STENCIL_BIT
-  * [[VUID-VkClearAttachment-aspectMask-00020]]
-    pname:aspectMask must: not include ename:VK_IMAGE_ASPECT_METADATA_BIT
-ifdef::VK_EXT_image_drm_format_modifier[]
-  * [[VUID-VkClearAttachment-aspectMask-02246]]
-    pname:aspectMask must: not include
-    `VK_IMAGE_ASPECT_MEMORY_PLANE__{ibit}__BIT_EXT` for any index _i_
-endif::VK_EXT_image_drm_format_modifier[]
-  * [[VUID-VkClearAttachment-clearValue-00021]]
-    pname:clearValue must: be a valid sname:VkClearValue union
-****
-
-include::{generated}/validity/structs/VkClearAttachment.txt[]
---
-
-
-[[clears-values]]
-== Clear Values
-
-[open,refpage='VkClearColorValue',desc='Structure specifying a clear color value',type='structs']
---
-The sname:VkClearColorValue structure is defined as:
-
-include::{generated}/api/structs/VkClearColorValue.txt[]
-
-  * pname:float32 are the color clear values when the format of the image or
-    attachment is one of the formats in the <<formats-numericformat>> table
-    other than signed integer (etext:SINT) or unsigned integer (etext:UINT).
-    Floating point values are automatically converted to the format of the
-    image, with the clear value being treated as linear if the image is
-    sRGB.
-  * pname:int32 are the color clear values when the format of the image or
-    attachment is signed integer (etext:SINT).
-    Signed integer values are converted to the format of the image by
-    casting to the smaller type (with negative 32-bit values mapping to
-    negative values in the smaller type).
-    If the integer clear value is not representable in the target type (e.g.
-    would overflow in conversion to that type), the clear value is
-    undefined:.
-  * pname:uint32 are the color clear values when the format of the image or
-    attachment is unsigned integer (etext:UINT).
-    Unsigned integer values are converted to the format of the image by
-    casting to the integer type with fewer bits.
-
-The four array elements of the clear color map to R, G, B, and A components
-of image formats, in order.
-
-If the image has more than one sample, the same value is written to all
-samples for any pixels being cleared.
-
-include::{generated}/validity/structs/VkClearColorValue.txt[]
---
-
-[open,refpage='VkClearDepthStencilValue',desc='Structure specifying a clear depth stencil value',type='structs']
---
-The sname:VkClearDepthStencilValue structure is defined as:
-
-include::{generated}/api/structs/VkClearDepthStencilValue.txt[]
-
-  * pname:depth is the clear value for the depth aspect of the depth/stencil
-    attachment.
-    It is a floating-point value which is automatically converted to the
-    attachment's format.
-  * pname:stencil is the clear value for the stencil aspect of the
-    depth/stencil attachment.
-    It is a 32-bit integer value which is converted to the attachment's
-    format by taking the appropriate number of LSBs.
-
-.Valid Usage
-****
-ifdef::VK_EXT_depth_range_unrestricted[]
-  * [[VUID-VkClearDepthStencilValue-depth-00022]]
-    Unless the `apiext:VK_EXT_depth_range_unrestricted` extension is enabled
-    pname:depth must: be between `0.0` and `1.0`, inclusive
-endif::VK_EXT_depth_range_unrestricted[]
-ifndef::VK_EXT_depth_range_unrestricted[]
-  * [[VUID-VkClearDepthStencilValue-depth-02506]]
-    pname:depth must: be between `0.0` and `1.0`, inclusive
-endif::VK_EXT_depth_range_unrestricted[]
-****
-
-include::{generated}/validity/structs/VkClearDepthStencilValue.txt[]
---
-
-[open,refpage='VkClearValue',desc='Structure specifying a clear value',type='structs']
---
-The sname:VkClearValue union is defined as:
-
-include::{generated}/api/structs/VkClearValue.txt[]
-
-  * pname:color specifies the color image clear values to use when clearing
-    a color image or attachment.
-  * pname:depthStencil specifies the depth and stencil clear values to use
-    when clearing a depth/stencil image or attachment.
-
-This union is used where part of the API requires either color or
-depth/stencil clear values, depending on the attachment, and defines the
-initial clear values in the slink:VkRenderPassBeginInfo structure.
-
-include::{generated}/validity/structs/VkClearValue.txt[]
---
-
-
-[[clears-filling-buffers]]
-== Filling Buffers
-
-[open,refpage='vkCmdFillBuffer',desc='Fill a region of a buffer with a fixed value',type='protos']
---
-To clear buffer data, call:
-
-include::{generated}/api/protos/vkCmdFillBuffer.txt[]
-
-  * pname:commandBuffer is the command buffer into which the command will be
-    recorded.
-  * pname:dstBuffer is the buffer to be filled.
-  * pname:dstOffset is the byte offset into the buffer at which to start
-    filling, and must: be a multiple of 4.
-  * pname:size is the number of bytes to fill, and must: be either a
-    multiple of 4, or ename:VK_WHOLE_SIZE to fill the range from
-    pname:offset to the end of the buffer.
-    If ename:VK_WHOLE_SIZE is used and the remaining size of the buffer is
-    not a multiple of 4, then the nearest smaller multiple is used.
-  * pname:data is the 4-byte word written repeatedly to the buffer to fill
-    pname:size bytes of data.
-    The data word is written to memory according to the host endianness.
-
-fname:vkCmdFillBuffer is treated as "`transfer`" operation for the purposes
-of synchronization barriers.
-The ename:VK_BUFFER_USAGE_TRANSFER_DST_BIT must: be specified in pname:usage
-of slink:VkBufferCreateInfo in order for the buffer to be compatible with
-fname:vkCmdFillBuffer.
-
-.Valid Usage
-****
-  * [[VUID-vkCmdFillBuffer-dstOffset-00024]]
-    pname:dstOffset must: be less than the size of pname:dstBuffer
-  * [[VUID-vkCmdFillBuffer-dstOffset-00025]]
-    pname:dstOffset must: be a multiple of `4`
-  * [[VUID-vkCmdFillBuffer-size-00026]]
-    If pname:size is not equal to ename:VK_WHOLE_SIZE, pname:size must: be
-    greater than `0`
-  * [[VUID-vkCmdFillBuffer-size-00027]]
-    If pname:size is not equal to ename:VK_WHOLE_SIZE, pname:size must: be
-    less than or equal to the size of pname:dstBuffer minus pname:dstOffset
-  * [[VUID-vkCmdFillBuffer-size-00028]]
-    If pname:size is not equal to ename:VK_WHOLE_SIZE, pname:size must: be a
-    multiple of `4`
-  * [[VUID-vkCmdFillBuffer-dstBuffer-00029]]
-    pname:dstBuffer must: have been created with
-    ename:VK_BUFFER_USAGE_TRANSFER_DST_BIT usage flag
-ifndef::VK_VERSION_1_1,VK_KHR_maintenance1[]
-  * [[VUID-vkCmdFillBuffer-commandBuffer-00030]]
-    The sname:VkCommandPool that pname:commandBuffer was allocated from
-    must: support graphics or compute operations
-endif::VK_VERSION_1_1,VK_KHR_maintenance1[]
-  * [[VUID-vkCmdFillBuffer-dstBuffer-00031]]
-    If pname:dstBuffer is non-sparse then it must: be bound completely and
-    contiguously to a single sname:VkDeviceMemory object
-ifdef::VK_VERSION_1_1[]
-  * [[VUID-vkCmdFillBuffer-commandBuffer-01811]]
-    If pname:commandBuffer is an unprotected command buffer and
-    <<limits-protectedNoFault, pname:protectedNoFault>> is not supported,
-    pname:dstBuffer must: not be a protected buffer
-  * [[VUID-vkCmdFillBuffer-commandBuffer-01812]]
-    If pname:commandBuffer is a protected command buffer and
-    <<limits-protectedNoFault, pname:protectedNoFault>> is not supported,
-    pname:dstBuffer must: not be an unprotected buffer
-endif::VK_VERSION_1_1[]
-****
-
-include::{generated}/validity/protos/vkCmdFillBuffer.txt[]
---
-
-
-[[clears-updating-buffers]]
-== Updating Buffers
-
-[open,refpage='vkCmdUpdateBuffer',desc='Update a buffer\'s contents from host memory',type='protos']
---
-To update buffer data inline in a command buffer, call:
-
-include::{generated}/api/protos/vkCmdUpdateBuffer.txt[]
-
-  * pname:commandBuffer is the command buffer into which the command will be
-    recorded.
-  * pname:dstBuffer is a handle to the buffer to be updated.
-  * pname:dstOffset is the byte offset into the buffer to start updating,
-    and must: be a multiple of 4.
-  * pname:dataSize is the number of bytes to update, and must: be a multiple
-    of 4.
-  * pname:pData is a pointer to the source data for the buffer update, and
-    must: be at least pname:dataSize bytes in size.
-
-pname:dataSize must: be less than or equal to 65536 bytes.
-For larger updates, applications can: use buffer to buffer
-<<copies-buffers,copies>>.
-
-[NOTE]
-.Note
-====
-Buffer updates performed with fname:vkCmdUpdateBuffer first copy the data
-into command buffer memory when the command is recorded (which requires
-additional storage and may incur an additional allocation), and then copy
-the data from the command buffer into pname:dstBuffer when the command is
-executed on a device.
-
-The additional cost of this functionality compared to <<copies-buffers,
-buffer to buffer copies>> means it is only recommended for very small
-amounts of data, and is why it is limited to only 65536 bytes.
-
-Applications can: work around this by issuing multiple
-fname:vkCmdUpdateBuffer commands to different ranges of the same buffer, but
-it is strongly recommended that they should: not.
-====
-
-The source data is copied from the user pointer to the command buffer when
-the command is called.
-
-fname:vkCmdUpdateBuffer is only allowed outside of a render pass.
-This command is treated as "`transfer`" operation, for the purposes of
-synchronization barriers.
-The ename:VK_BUFFER_USAGE_TRANSFER_DST_BIT must: be specified in pname:usage
-of slink:VkBufferCreateInfo in order for the buffer to be compatible with
-fname:vkCmdUpdateBuffer.
-
-.Valid Usage
-****
-  * [[VUID-vkCmdUpdateBuffer-dstOffset-00032]]
-    pname:dstOffset must: be less than the size of pname:dstBuffer
-  * [[VUID-vkCmdUpdateBuffer-dataSize-00033]]
-    pname:dataSize must: be less than or equal to the size of
-    pname:dstBuffer minus pname:dstOffset
-  * [[VUID-vkCmdUpdateBuffer-dstBuffer-00034]]
-    pname:dstBuffer must: have been created with
-    ename:VK_BUFFER_USAGE_TRANSFER_DST_BIT usage flag
-  * [[VUID-vkCmdUpdateBuffer-dstBuffer-00035]]
-    If pname:dstBuffer is non-sparse then it must: be bound completely and
-    contiguously to a single sname:VkDeviceMemory object
-  * [[VUID-vkCmdUpdateBuffer-dstOffset-00036]]
-    pname:dstOffset must: be a multiple of `4`
-  * [[VUID-vkCmdUpdateBuffer-dataSize-00037]]
-    pname:dataSize must: be less than or equal to `65536`
-  * [[VUID-vkCmdUpdateBuffer-dataSize-00038]]
-    pname:dataSize must: be a multiple of `4`
-ifdef::VK_VERSION_1_1[]
-  * [[VUID-vkCmdUpdateBuffer-commandBuffer-01813]]
-    If pname:commandBuffer is an unprotected command buffer and
-    <<limits-protectedNoFault, pname:protectedNoFault>> is not supported,
-    pname:dstBuffer must: not be a protected buffer
-  * [[VUID-vkCmdUpdateBuffer-commandBuffer-01814]]
-    If pname:commandBuffer is a protected command buffer and
-    <<limits-protectedNoFault, pname:protectedNoFault>> is not supported,
-    pname:dstBuffer must: not be an unprotected buffer
-endif::VK_VERSION_1_1[]
-****
-
-include::{generated}/validity/protos/vkCmdUpdateBuffer.txt[]
---
-
-[NOTE]
-.Note
-====
-The pname:pData parameter was of type code:uint32_t* instead of code:void*
-prior to version 1.0.19 of the Specification and dlink:VK_HEADER_VERSION 19
-of the <<boilerplate-headers,Vulkan Header Files>>.
-This was a historical anomaly, as the source data may be of other types.
-====
diff --git a/registry/vulkan/chapters/cmdbuffers.txt b/registry/vulkan/chapters/cmdbuffers.txt
deleted file mode 100644
index 5642d49..0000000
--- a/registry/vulkan/chapters/cmdbuffers.txt
+++ /dev/null
@@ -1,2764 +0,0 @@
-// Copyright 2015-2021 The Khronos Group, Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-[[commandbuffers]]
-= Command Buffers
-
-[open,refpage='VkCommandBuffer',desc='Opaque handle to a command buffer object',type='handles']
---
-Command buffers are objects used to record commands which can: be
-subsequently submitted to a device queue for execution.
-There are two levels of command buffers - _primary command buffers_, which
-can: execute secondary command buffers, and which are submitted to queues,
-and _secondary command buffers_, which can: be executed by primary command
-buffers, and which are not directly submitted to queues.
-
-Command buffers are represented by sname:VkCommandBuffer handles:
-
-include::{generated}/api/handles/VkCommandBuffer.txt[]
---
-
-Recorded commands include commands to bind pipelines and descriptor sets to
-the command buffer, commands to modify dynamic state, commands to draw (for
-graphics rendering), commands to dispatch (for compute), commands to execute
-secondary command buffers (for primary command buffers only), commands to
-copy buffers and images, and other commands.
-
-[[commandbuffers-statereset]]
-Each command buffer manages state independently of other command buffers.
-There is no inheritance of state across primary and secondary command
-buffers, or between secondary command buffers.
-When a command buffer begins recording, all state in that command buffer is
-undefined:.
-When secondary command buffer(s) are recorded to execute on a primary
-command buffer, the secondary command buffer inherits no state from the
-primary command buffer, and all state of the primary command buffer is
-undefined: after an execute secondary command buffer command is recorded.
-There is one exception to this rule - if the primary command buffer is
-inside a render pass instance, then the render pass and subpass state is not
-disturbed by executing secondary command buffers.
-For state dependent commands (such as draws and dispatches), any state
-consumed by those commands must: not be undefined:.
-
-ifdef::VK_NV_inherited_viewport_scissor[]
-slink:VkCommandBufferInheritanceViewportScissorInfoNV defines an exception
-allowing limited inheritance of dynamic viewport and scissor state.
-endif::VK_NV_inherited_viewport_scissor[]
-
-Unless otherwise specified, and without explicit synchronization, the
-various commands submitted to a queue via command buffers may: execute in
-arbitrary order relative to each other, and/or concurrently.
-Also, the memory side effects of those commands may: not be directly visible
-to other commands without explicit memory dependencies.
-This is true within a command buffer, and across command buffers submitted
-to a given queue.
-See <<synchronization, the synchronization chapter>> for information on
-<<synchronization-implicit, implicit>> and explicit synchronization between
-commands.
-
-
-[[commandbuffers-lifecycle]]
-== Command Buffer Lifecycle
-
-Each command buffer is always in one of the following states:
-
-Initial::
-    When a command buffer is <<vkAllocateCommandBuffers, allocated>>, it is
-    in the _initial state_.
-    Some commands are able to _reset_ a command buffer (or a set of command
-    buffers) back to this state from any of the executable, recording or
-    invalid state.
-    Command buffers in the initial state can: only be moved to the recording
-    state, or freed.
-Recording::
-    flink:vkBeginCommandBuffer changes the state of a command buffer from
-    the initial state to the _recording state_.
-    Once a command buffer is in the recording state, ftext:vkCmd* commands
-    can: be used to record to the command buffer.
-Executable::
-    flink:vkEndCommandBuffer ends the recording of a command buffer, and
-    moves it from the recording state to the _executable state_.
-    Executable command buffers can: be <<commandbuffers-submission,
-    submitted>>, reset, or <<commandbuffers-secondary, recorded to another
-    command buffer>>.
-Pending::
-    <<commandbuffers-submission, Queue submission>> of a command buffer
-    changes the state of a command buffer from the executable state to the
-    _pending state_.
-    Whilst in the pending state, applications must: not attempt to modify
-    the command buffer in any way - as the device may: be processing the
-    commands recorded to it.
-    Once execution of a command buffer completes, the command buffer either
-    reverts back to the _executable state_, or if it was recorded with
-    ename:VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT, it moves to the
-    _invalid state_.
-    A <<synchronization, synchronization>> command should: be used to detect
-    when this occurs.
-Invalid::
-    Some operations, such as <<fundamentals-objectmodel-lifetime-cmdbuffers,
-    modifying or deleting a resource>> that was used in a command recorded
-    to a command buffer, will transition the state of that command buffer
-    into the _invalid state_.
-    Command buffers in the invalid state can: only be reset or freed.
-
-[[commandbuffer-lifecycle-diagram]]
-image::{images}/commandbuffer_lifecycle.svg[title="Lifecycle of a command buffer",align="center",opts="{imageopts}"]
-
-Any given command that operates on a command buffer has its own requirements
-on what state a command buffer must: be in, which are detailed in the valid
-usage constraints for that command.
-
-Resetting a command buffer is an operation that discards any previously
-recorded commands and puts a command buffer in the _initial state_.
-Resetting occurs as a result of flink:vkResetCommandBuffer or
-flink:vkResetCommandPool, or as part of flink:vkBeginCommandBuffer (which
-additionally puts the command buffer in the _recording state_).
-
-<<commandbuffers-secondary, Secondary command buffers>> can: be recorded to
-a primary command buffer via flink:vkCmdExecuteCommands.
-This partially ties the lifecycle of the two command buffers together - if
-the primary is submitted to a queue, both the primary and any secondaries
-recorded to it move to the _pending state_.
-Once execution of the primary completes, so it does for any secondary
-recorded within it.
-After all executions of each command buffer complete, they each move to
-their appropriate completion state (either to the _executable state_ or the
-_invalid state_, as specified above).
-
-If a secondary moves to the _invalid state_ or the _initial state_, then all
-primary buffers it is recorded in move to the _invalid state_.
-A primary moving to any other state does not affect the state of a secondary
-recorded in it.
-
-[NOTE]
-.Note
-====
-Resetting or freeing a primary command buffer removes the lifecycle linkage
-to all secondary command buffers that were recorded into it.
-====
-
-
-[[commandbuffers-pools]]
-== Command Pools
-
-[open,refpage='VkCommandPool',desc='Opaque handle to a command pool object',type='handles']
---
-Command pools are opaque objects that command buffer memory is allocated
-from, and which allow the implementation to amortize the cost of resource
-creation across multiple command buffers.
-Command pools are externally synchronized, meaning that a command pool must:
-not be used concurrently in multiple threads.
-That includes use via recording commands on any command buffers allocated
-from the pool, as well as operations that allocate, free, and reset command
-buffers or the pool itself.
-
-Command pools are represented by sname:VkCommandPool handles:
-
-include::{generated}/api/handles/VkCommandPool.txt[]
---
-
-[open,refpage='vkCreateCommandPool',desc='Create a new command pool object',type='protos']
---
-To create a command pool, call:
-
-include::{generated}/api/protos/vkCreateCommandPool.txt[]
-
-  * pname:device is the logical device that creates the command pool.
-  * pname:pCreateInfo is a pointer to a slink:VkCommandPoolCreateInfo
-    structure specifying the state of the command pool object.
-  * pname:pAllocator controls host memory allocation as described in the
-    <<memory-allocation, Memory Allocation>> chapter.
-  * pname:pCommandPool is a pointer to a slink:VkCommandPool handle in which
-    the created pool is returned.
-
-.Valid Usage
-****
-  * [[VUID-vkCreateCommandPool-queueFamilyIndex-01937]]
-    pname:pCreateInfo->queueFamilyIndex must: be the index of a queue family
-    available in the logical device pname:device
-****
-
-include::{generated}/validity/protos/vkCreateCommandPool.txt[]
---
-
-[open,refpage='VkCommandPoolCreateInfo',desc='Structure specifying parameters of a newly created command pool',type='structs']
---
-The sname:VkCommandPoolCreateInfo structure is defined as:
-
-include::{generated}/api/structs/VkCommandPoolCreateInfo.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:flags is a bitmask of elink:VkCommandPoolCreateFlagBits indicating
-    usage behavior for the pool and command buffers allocated from it.
-  * pname:queueFamilyIndex designates a queue family as described in section
-    <<devsandqueues-queueprops,Queue Family Properties>>.
-    All command buffers allocated from this command pool must: be submitted
-    on queues from the same queue family.
-
-.Valid Usage
-****
-ifdef::VK_VERSION_1_1[]
-  * [[VUID-VkCommandPoolCreateInfo-flags-02860]]
-    If the protected memory feature is not enabled, the
-    ename:VK_COMMAND_POOL_CREATE_PROTECTED_BIT bit of pname:flags must: not
-    be set
-endif::VK_VERSION_1_1[]
-****
-
-include::{generated}/validity/structs/VkCommandPoolCreateInfo.txt[]
---
-
-[open,refpage='VkCommandPoolCreateFlagBits',desc='Bitmask specifying usage behavior for a command pool',type='enums']
---
-Bits which can: be set in slink:VkCommandPoolCreateInfo::pname:flags to
-specify usage behavior for a command pool are:
-
-include::{generated}/api/enums/VkCommandPoolCreateFlagBits.txt[]
-
-  * ename:VK_COMMAND_POOL_CREATE_TRANSIENT_BIT specifies that command
-    buffers allocated from the pool will be short-lived, meaning that they
-    will be reset or freed in a relatively short timeframe.
-    This flag may: be used by the implementation to control memory
-    allocation behavior within the pool.
-  * ename:VK_COMMAND_POOL_CREATE_RESET_COMMAND_BUFFER_BIT allows any command
-    buffer allocated from a pool to be individually reset to the
-    <<commandbuffers-lifecycle, initial state>>; either by calling
-    flink:vkResetCommandBuffer, or via the implicit reset when calling
-    flink:vkBeginCommandBuffer.
-    If this flag is not set on a pool, then fname:vkResetCommandBuffer must:
-    not be called for any command buffer allocated from that pool.
-ifdef::VK_VERSION_1_1[]
-  * ename:VK_COMMAND_POOL_CREATE_PROTECTED_BIT specifies that command
-    buffers allocated from the pool are protected command buffers.
-endif::VK_VERSION_1_1[]
---
-
-[open,refpage='VkCommandPoolCreateFlags',desc='Bitmask of VkCommandPoolCreateFlagBits',type='flags']
---
-include::{generated}/api/flags/VkCommandPoolCreateFlags.txt[]
-
-tname:VkCommandPoolCreateFlags is a bitmask type for setting a mask of zero
-or more elink:VkCommandPoolCreateFlagBits.
---
-
-ifdef::VK_VERSION_1_1,VK_KHR_maintenance1[]
-[open,refpage='vkTrimCommandPool',desc='Trim a command pool',type='protos']
---
-To trim a command pool, call:
-
-ifdef::VK_VERSION_1_1[]
-include::{generated}/api/protos/vkTrimCommandPool.txt[]
-endif::VK_VERSION_1_1[]
-
-ifdef::VK_VERSION_1_1+VK_KHR_maintenance1[or the equivalent command]
-
-ifdef::VK_KHR_maintenance1[]
-include::{generated}/api/protos/vkTrimCommandPoolKHR.txt[]
-endif::VK_KHR_maintenance1[]
-
-  * pname:device is the logical device that owns the command pool.
-  * pname:commandPool is the command pool to trim.
-  * pname:flags is reserved for future use.
-
-Trimming a command pool recycles unused memory from the command pool back to
-the system.
-Command buffers allocated from the pool are not affected by the command.
-
-[NOTE]
-.Note
-====
-This command provides applications with some control over the internal
-memory allocations used by command pools.
-
-Unused memory normally arises from command buffers that have been recorded
-and later reset, such that they are no longer using the memory.
-On reset, a command buffer can return memory to its command pool, but the
-only way to release memory from a command pool to the system requires
-calling flink:vkResetCommandPool, which cannot be executed while any command
-buffers from that pool are still in use.
-Subsequent recording operations into command buffers will re-use this memory
-but since total memory requirements fluctuate over time, unused memory can
-accumulate.
-
-In this situation, trimming a command pool may: be useful to return unused
-memory back to the system, returning the total outstanding memory allocated
-by the pool back to a more "`average`" value.
-
-Implementations utilize many internal allocation strategies that make it
-impossible to guarantee that all unused memory is released back to the
-system.
-For instance, an implementation of a command pool may: involve allocating
-memory in bulk from the system and sub-allocating from that memory.
-In such an implementation any live command buffer that holds a reference to
-a bulk allocation would prevent that allocation from being freed, even if
-only a small proportion of the bulk allocation is in use.
-
-In most cases trimming will result in a reduction in allocated but unused
-memory, but it does not guarantee the "`ideal`" behavior.
-
-Trimming may: be an expensive operation, and should: not be called
-frequently.
-Trimming should: be treated as a way to relieve memory pressure after
-application-known points when there exists enough unused memory that the
-cost of trimming is "`worth`" it.
-====
-
-include::{generated}/validity/protos/vkTrimCommandPool.txt[]
---
-
-[open,refpage='VkCommandPoolTrimFlags',desc='Reserved for future use',type='flags']
---
-include::{generated}/api/flags/VkCommandPoolTrimFlags.txt[]
-
-ifdef::VK_KHR_maintenance1[]
-or the equivalent
-
-include::{generated}/api/flags/VkCommandPoolTrimFlagsKHR.txt[]
-endif::VK_KHR_maintenance1[]
-
-tname:VkCommandPoolTrimFlags is a bitmask type for setting a mask, but is
-currently reserved for future use.
---
-endif::VK_VERSION_1_1,VK_KHR_maintenance1[]
-
-[open,refpage='vkResetCommandPool',desc='Reset a command pool',type='protos']
---
-To reset a command pool, call:
-
-include::{generated}/api/protos/vkResetCommandPool.txt[]
-
-  * pname:device is the logical device that owns the command pool.
-  * pname:commandPool is the command pool to reset.
-  * pname:flags is a bitmask of elink:VkCommandPoolResetFlagBits controlling
-    the reset operation.
-
-Resetting a command pool recycles all of the resources from all of the
-command buffers allocated from the command pool back to the command pool.
-All command buffers that have been allocated from the command pool are put
-in the <<commandbuffers-lifecycle, initial state>>.
-
-Any primary command buffer allocated from another slink:VkCommandPool that
-is in the <<commandbuffers-lifecycle, recording or executable state>> and
-has a secondary command buffer allocated from pname:commandPool recorded
-into it, becomes <<commandbuffers-lifecycle, invalid>>.
-
-.Valid Usage
-****
-  * [[VUID-vkResetCommandPool-commandPool-00040]]
-    All sname:VkCommandBuffer objects allocated from pname:commandPool must:
-    not be in the <<commandbuffers-lifecycle, pending state>>
-****
-
-include::{generated}/validity/protos/vkResetCommandPool.txt[]
---
-
-[open,refpage='VkCommandPoolResetFlagBits',desc='Bitmask controlling behavior of a command pool reset',type='enums']
---
-Bits which can: be set in flink:vkResetCommandPool::pname:flags to control
-the reset operation are:
-
-include::{generated}/api/enums/VkCommandPoolResetFlagBits.txt[]
-
-  * ename:VK_COMMAND_POOL_RESET_RELEASE_RESOURCES_BIT specifies that
-    resetting a command pool recycles all of the resources from the command
-    pool back to the system.
---
-
-[open,refpage='VkCommandPoolResetFlags',desc='Bitmask of VkCommandPoolResetFlagBits',type='flags']
---
-include::{generated}/api/flags/VkCommandPoolResetFlags.txt[]
-
-tname:VkCommandPoolResetFlags is a bitmask type for setting a mask of zero
-or more elink:VkCommandPoolResetFlagBits.
---
-
-[open,refpage='vkDestroyCommandPool',desc='Destroy a command pool object',type='protos']
---
-To destroy a command pool, call:
-
-include::{generated}/api/protos/vkDestroyCommandPool.txt[]
-
-  * pname:device is the logical device that destroys the command pool.
-  * pname:commandPool is the handle of the command pool to destroy.
-  * pname:pAllocator controls host memory allocation as described in the
-    <<memory-allocation, Memory Allocation>> chapter.
-
-When a pool is destroyed, all command buffers allocated from the pool are
-<<vkFreeCommandBuffers, freed>>.
-
-Any primary command buffer allocated from another slink:VkCommandPool that
-is in the <<commandbuffers-lifecycle, recording or executable state>> and
-has a secondary command buffer allocated from pname:commandPool recorded
-into it, becomes <<commandbuffers-lifecycle, invalid>>.
-
-.Valid Usage
-****
-  * [[VUID-vkDestroyCommandPool-commandPool-00041]]
-    All sname:VkCommandBuffer objects allocated from pname:commandPool must:
-    not be in the <<commandbuffers-lifecycle, pending state>>
-  * [[VUID-vkDestroyCommandPool-commandPool-00042]]
-    If sname:VkAllocationCallbacks were provided when pname:commandPool was
-    created, a compatible set of callbacks must: be provided here
-  * [[VUID-vkDestroyCommandPool-commandPool-00043]]
-    If no sname:VkAllocationCallbacks were provided when pname:commandPool
-    was created, pname:pAllocator must: be `NULL`
-****
-
-include::{generated}/validity/protos/vkDestroyCommandPool.txt[]
---
-
-
-[[commandbuffer-allocation]]
-== Command Buffer Allocation and Management
-
-[open,refpage='vkAllocateCommandBuffers',desc='Allocate command buffers from an existing command pool',type='protos']
---
-To allocate command buffers, call:
-
-include::{generated}/api/protos/vkAllocateCommandBuffers.txt[]
-
-  * pname:device is the logical device that owns the command pool.
-  * pname:pAllocateInfo is a pointer to a sname:VkCommandBufferAllocateInfo
-    structure describing parameters of the allocation.
-  * pname:pCommandBuffers is a pointer to an array of slink:VkCommandBuffer
-    handles in which the resulting command buffer objects are returned.
-    The array must: be at least the length specified by the
-    pname:commandBufferCount member of pname:pAllocateInfo.
-    Each allocated command buffer begins in the initial state.
-
-ifdef::VK_VERSION_1_1,VK_KHR_maintenance1[]
-fname:vkAllocateCommandBuffers can: be used to allocate multiple command
-buffers.
-If the allocation of any of those command buffers fails, the implementation
-must: free all successfully allocated command buffer objects from this
-command, set all entries of the pname:pCommandBuffers array to `NULL` and
-return the error.
-
-[NOTE]
-.Note
-====
-Filling pname:pCommandBuffers with `NULL` values on failure is an exception
-to the default error behavior that output parameters will have undefined:
-contents.
-====
-
-endif::VK_VERSION_1_1,VK_KHR_maintenance1[]
-
-When command buffers are first allocated, they are in the
-<<commandbuffers-lifecycle, initial state>>.
-
-include::{generated}/validity/protos/vkAllocateCommandBuffers.txt[]
---
-
-[open,refpage='VkCommandBufferAllocateInfo',desc='Structure specifying the allocation parameters for command buffer object',type='structs']
---
-The sname:VkCommandBufferAllocateInfo structure is defined as:
-
-include::{generated}/api/structs/VkCommandBufferAllocateInfo.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:commandPool is the command pool from which the command buffers are
-    allocated.
-  * pname:level is a elink:VkCommandBufferLevel value specifying the command
-    buffer level.
-  * pname:commandBufferCount is the number of command buffers to allocate
-    from the pool.
-
-include::{generated}/validity/structs/VkCommandBufferAllocateInfo.txt[]
---
-
-[open,refpage='VkCommandBufferLevel',desc='Enumerant specifying a command buffer level',type='enums']
---
-Possible values of slink:VkCommandBufferAllocateInfo::pname:level,
-specifying the command buffer level, are:
-
-include::{generated}/api/enums/VkCommandBufferLevel.txt[]
-
-  * ename:VK_COMMAND_BUFFER_LEVEL_PRIMARY specifies a primary command
-    buffer.
-  * ename:VK_COMMAND_BUFFER_LEVEL_SECONDARY specifies a secondary command
-    buffer.
---
-
-[open,refpage='vkResetCommandBuffer',desc='Reset a command buffer to the initial state',type='protos']
---
-To reset a command buffer, call:
-
-include::{generated}/api/protos/vkResetCommandBuffer.txt[]
-
-  * pname:commandBuffer is the command buffer to reset.
-    The command buffer can: be in any state other than
-    <<commandbuffers-lifecycle, pending>>, and is moved into the
-    <<commandbuffers-lifecycle, initial state>>.
-  * pname:flags is a bitmask of elink:VkCommandBufferResetFlagBits
-    controlling the reset operation.
-
-Any primary command buffer that is in the <<commandbuffers-lifecycle,
-recording or executable state>> and has pname:commandBuffer recorded into
-it, becomes <<commandbuffers-lifecycle, invalid>>.
-
-.Valid Usage
-****
-  * [[VUID-vkResetCommandBuffer-commandBuffer-00045]]
-    pname:commandBuffer must: not be in the <<commandbuffers-lifecycle,
-    pending state>>
-  * [[VUID-vkResetCommandBuffer-commandBuffer-00046]]
-    pname:commandBuffer must: have been allocated from a pool that was
-    created with the ename:VK_COMMAND_POOL_CREATE_RESET_COMMAND_BUFFER_BIT
-****
-
-include::{generated}/validity/protos/vkResetCommandBuffer.txt[]
---
-
-[open,refpage='VkCommandBufferResetFlagBits',desc='Bitmask controlling behavior of a command buffer reset',type='enums']
---
-Bits which can: be set in flink:vkResetCommandBuffer::pname:flags to control
-the reset operation are:
-
-include::{generated}/api/enums/VkCommandBufferResetFlagBits.txt[]
-
-  * ename:VK_COMMAND_BUFFER_RESET_RELEASE_RESOURCES_BIT specifies that most
-    or all memory resources currently owned by the command buffer should: be
-    returned to the parent command pool.
-    If this flag is not set, then the command buffer may: hold onto memory
-    resources and reuse them when recording commands.
-    pname:commandBuffer is moved to the <<commandbuffers-lifecycle, initial
-    state>>.
---
-
-[open,refpage='VkCommandBufferResetFlags',desc='Bitmask of VkCommandBufferResetFlagBits',type='flags']
---
-include::{generated}/api/flags/VkCommandBufferResetFlags.txt[]
-
-tname:VkCommandBufferResetFlags is a bitmask type for setting a mask of zero
-or more elink:VkCommandBufferResetFlagBits.
---
-
-[open,refpage='vkFreeCommandBuffers',desc='Free command buffers',type='protos']
---
-To free command buffers, call:
-
-include::{generated}/api/protos/vkFreeCommandBuffers.txt[]
-
-  * pname:device is the logical device that owns the command pool.
-  * pname:commandPool is the command pool from which the command buffers
-    were allocated.
-  * pname:commandBufferCount is the length of the pname:pCommandBuffers
-    array.
-  * pname:pCommandBuffers is a pointer to an array of handles of command
-    buffers to free.
-
-Any primary command buffer that is in the <<commandbuffers-lifecycle,
-recording or executable state>> and has any element of pname:pCommandBuffers
-recorded into it, becomes <<commandbuffers-lifecycle, invalid>>.
-
-.Valid Usage
-****
-  * [[VUID-vkFreeCommandBuffers-pCommandBuffers-00047]]
-    All elements of pname:pCommandBuffers must: not be in the
-    <<commandbuffers-lifecycle, pending state>>
-  * [[VUID-vkFreeCommandBuffers-pCommandBuffers-00048]]
-    pname:pCommandBuffers must: be a valid pointer to an array of
-    pname:commandBufferCount sname:VkCommandBuffer handles, each element of
-    which must: either be a valid handle or `NULL`
-****
-
-include::{generated}/validity/protos/vkFreeCommandBuffers.txt[]
---
-
-
-[[commandbuffers-recording]]
-== Command Buffer Recording
-
-[open,refpage='vkBeginCommandBuffer',desc='Start recording a command buffer',type='protos']
---
-To begin recording a command buffer, call:
-
-include::{generated}/api/protos/vkBeginCommandBuffer.txt[]
-
-  * pname:commandBuffer is the handle of the command buffer which is to be
-    put in the recording state.
-  * pname:pBeginInfo is a pointer to a slink:VkCommandBufferBeginInfo
-    structure defining additional information about how the command buffer
-    begins recording.
-
-.Valid Usage
-****
-  * [[VUID-vkBeginCommandBuffer-commandBuffer-00049]]
-    pname:commandBuffer must: not be in the <<commandbuffers-lifecycle,
-    recording or pending state>>
-  * [[VUID-vkBeginCommandBuffer-commandBuffer-00050]]
-    If pname:commandBuffer was allocated from a slink:VkCommandPool which
-    did not have the ename:VK_COMMAND_POOL_CREATE_RESET_COMMAND_BUFFER_BIT
-    flag set, pname:commandBuffer must: be in the
-    <<commandbuffers-lifecycle, initial state>>
-  * [[VUID-vkBeginCommandBuffer-commandBuffer-00051]]
-    If pname:commandBuffer is a secondary command buffer, the
-    pname:pInheritanceInfo member of pname:pBeginInfo must: be a valid
-    sname:VkCommandBufferInheritanceInfo structure
-  * [[VUID-vkBeginCommandBuffer-commandBuffer-00052]]
-    If pname:commandBuffer is a secondary command buffer and either the
-    pname:occlusionQueryEnable member of the pname:pInheritanceInfo member
-    of pname:pBeginInfo is ename:VK_FALSE, or the precise occlusion queries
-    feature is not enabled, then
-    pname:pBeginInfo->pInheritanceInfo->queryFlags must: not contain
-    ename:VK_QUERY_CONTROL_PRECISE_BIT
-  * [[VUID-vkBeginCommandBuffer-commandBuffer-02840]]
-    If pname:commandBuffer is a primary command buffer, then
-    pname:pBeginInfo->flags must: not set both the
-    ename:VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT and the
-    ename:VK_COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT flags
-****
-
-include::{generated}/validity/protos/vkBeginCommandBuffer.txt[]
---
-
-[open,refpage='VkCommandBufferBeginInfo',desc='Structure specifying a command buffer begin operation',type='structs']
---
-The sname:VkCommandBufferBeginInfo structure is defined as:
-
-include::{generated}/api/structs/VkCommandBufferBeginInfo.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:flags is a bitmask of elink:VkCommandBufferUsageFlagBits
-    specifying usage behavior for the command buffer.
-  * pname:pInheritanceInfo is a pointer to a
-    sname:VkCommandBufferInheritanceInfo structure, used if
-    pname:commandBuffer is a secondary command buffer.
-    If this is a primary command buffer, then this value is ignored.
-
-.Valid Usage
-****
-ifndef::VK_KHR_dynamic_rendering[]
-  * [[VUID-VkCommandBufferBeginInfo-flags-00053]]
-    If pname:flags contains
-    ename:VK_COMMAND_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT, the
-    pname:renderPass member of pname:pInheritanceInfo must: be a valid
-    sname:VkRenderPass
-  * [[VUID-VkCommandBufferBeginInfo-flags-00054]]
-    If pname:flags contains
-    ename:VK_COMMAND_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT, the
-    pname:subpass member of pname:pInheritanceInfo must: be a valid subpass
-    index within the pname:renderPass member of pname:pInheritanceInfo
-endif::VK_KHR_dynamic_rendering[]
-  * [[VUID-VkCommandBufferBeginInfo-flags-00055]]
-    If pname:flags contains
-    ename:VK_COMMAND_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT, the
-    pname:framebuffer member of pname:pInheritanceInfo must: be either
-    dlink:VK_NULL_HANDLE, or a valid sname:VkFramebuffer that is compatible
-    with the pname:renderPass member of pname:pInheritanceInfo
-ifdef::VK_KHR_dynamic_rendering[]
-  * [[VUID-VkCommandBufferBeginInfo-flags-06000]]
-    If pname:flags contains
-    ename:VK_COMMAND_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT and the
-    pname:renderPass member of pname:pInheritanceInfo is not
-    dlink:VK_NULL_HANDLE, pname:renderPass must: be a valid
-    sname:VkRenderPass
-  * [[VUID-VkCommandBufferBeginInfo-flags-06001]]
-    If pname:flags contains
-    ename:VK_COMMAND_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT and the
-    pname:renderPass member of pname:pInheritanceInfo is not
-    dlink:VK_NULL_HANDLE, the pname:subpass member of pname:pInheritanceInfo
-    must: be a valid subpass index within the pname:renderPass member of
-    pname:pInheritanceInfo
-  * [[VUID-VkCommandBufferBeginInfo-flags-06002]]
-    If pname:flags contains
-    ename:VK_COMMAND_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT and the
-    pname:renderPass member of pname:pInheritanceInfo is
-    dlink:VK_NULL_HANDLE, the pname:pNext chain of pname:pInheritanceInfo
-    must: include a slink:VkCommandBufferInheritanceRenderingInfoKHR
-    structure
-ifdef::VK_AMD_mixed_attachment_samples,VK_NV_framebuffer_mixed_samples[]
-  * [[VUID-VkCommandBufferBeginInfo-flags-06003]]
-    If pname:flags contains
-    ename:VK_COMMAND_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT, the
-    pname:renderPass member of pname:pInheritanceInfo is
-    dlink:VK_NULL_HANDLE, and the pname:pNext chain of
-    pname:pInheritanceInfo includes a slink:VkAttachmentSampleCountInfoAMD
-    or slink:VkAttachmentSampleCountInfoNV structure, the
-    pname:colorAttachmentCount member of that structure must: be equal to
-    the value of
-    slink:VkCommandBufferInheritanceRenderingInfoKHR::pname:colorAttachmentCount
-endif::VK_AMD_mixed_attachment_samples,VK_NV_framebuffer_mixed_samples[]
-endif::VK_KHR_dynamic_rendering[]
-****
-
-include::{generated}/validity/structs/VkCommandBufferBeginInfo.txt[]
---
-
-[open,refpage='VkCommandBufferUsageFlagBits',desc='Bitmask specifying usage behavior for command buffer',type='enums']
---
-Bits which can: be set in slink:VkCommandBufferBeginInfo::pname:flags to
-specify usage behavior for a command buffer are:
-
-include::{generated}/api/enums/VkCommandBufferUsageFlagBits.txt[]
-
-  * ename:VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT specifies that each
-    recording of the command buffer will only be submitted once, and the
-    command buffer will be reset and recorded again between each submission.
-  * ename:VK_COMMAND_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT specifies that a
-    secondary command buffer is considered to be entirely inside a render
-    pass.
-    If this is a primary command buffer, then this bit is ignored.
-  * ename:VK_COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT specifies that a
-    command buffer can: be resubmitted to a queue while it is in the
-    _pending state_, and recorded into multiple primary command buffers.
---
-
-[open,refpage='VkCommandBufferUsageFlags',desc='Bitmask of VkCommandBufferUsageFlagBits',type='flags']
---
-include::{generated}/api/flags/VkCommandBufferUsageFlags.txt[]
-
-tname:VkCommandBufferUsageFlags is a bitmask type for setting a mask of zero
-or more elink:VkCommandBufferUsageFlagBits.
---
-
-[open,refpage='VkCommandBufferInheritanceInfo',desc='Structure specifying command buffer inheritance information',type='structs']
---
-If the command buffer is a secondary command buffer, then the
-sname:VkCommandBufferInheritanceInfo structure defines any state that will
-be inherited from the primary command buffer:
-
-include::{generated}/api/structs/VkCommandBufferInheritanceInfo.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:renderPass is a slink:VkRenderPass object defining which render
-    passes the sname:VkCommandBuffer will be <<renderpass-compatibility,
-    compatible>> with and can: be executed within.
-  * pname:subpass is the index of the subpass within the render pass
-    instance that the sname:VkCommandBuffer will be executed within.
-  * pname:framebuffer can: refer to the slink:VkFramebuffer object that the
-    sname:VkCommandBuffer will be rendering to if it is executed within a
-    render pass instance.
-    It can: be dlink:VK_NULL_HANDLE if the framebuffer is not known.
-+
-[NOTE]
-.Note
-====
-Specifying the exact framebuffer that the secondary command buffer will be
-executed with may: result in better performance at command buffer execution
-time.
-====
-  * pname:occlusionQueryEnable specifies whether the command buffer can: be
-    executed while an occlusion query is active in the primary command
-    buffer.
-    If this is ename:VK_TRUE, then this command buffer can: be executed
-    whether the primary command buffer has an occlusion query active or not.
-    If this is ename:VK_FALSE, then the primary command buffer must: not
-    have an occlusion query active.
-  * pname:queryFlags specifies the query flags that can: be used by an
-    active occlusion query in the primary command buffer when this secondary
-    command buffer is executed.
-    If this value includes the ename:VK_QUERY_CONTROL_PRECISE_BIT bit, then
-    the active query can: return boolean results or actual sample counts.
-    If this bit is not set, then the active query must: not use the
-    ename:VK_QUERY_CONTROL_PRECISE_BIT bit.
-  * pname:pipelineStatistics is a bitmask of
-    elink:VkQueryPipelineStatisticFlagBits specifying the set of pipeline
-    statistics that can: be counted by an active query in the primary
-    command buffer when this secondary command buffer is executed.
-    If this value includes a given bit, then this command buffer can: be
-    executed whether the primary command buffer has a pipeline statistics
-    query active that includes this bit or not.
-    If this value excludes a given bit, then the active pipeline statistics
-    query must: not be from a query pool that counts that statistic.
-
-If the slink:VkCommandBuffer will not be executed within a render pass
-instance,
-ifdef::VK_KHR_dynamic_rendering[]
-or if the render pass instance was begun with flink:vkCmdBeginRenderingKHR,
-endif::VK_KHR_dynamic_rendering[]
-pname:renderPass, pname:subpass, and pname:framebuffer are ignored.
-
-.Valid Usage
-****
-  * [[VUID-VkCommandBufferInheritanceInfo-occlusionQueryEnable-00056]]
-    If the <<features-inheritedQueries,inherited queries>> feature is not
-    enabled, pname:occlusionQueryEnable must: be ename:VK_FALSE
-  * [[VUID-VkCommandBufferInheritanceInfo-queryFlags-00057]]
-    If the <<features-inheritedQueries,inherited queries>> feature is
-    enabled, pname:queryFlags must: be a valid combination of
-    elink:VkQueryControlFlagBits values
-  * [[VUID-VkCommandBufferInheritanceInfo-queryFlags-02788]]
-    If the <<features-inheritedQueries,inherited queries>> feature is not
-    enabled, pname:queryFlags must: be code:0
-  * [[VUID-VkCommandBufferInheritanceInfo-pipelineStatistics-02789]]
-    If the <<features-pipelineStatisticsQuery,pipeline statistics queries>>
-    feature is enabled, pname:pipelineStatistics must: be a valid
-    combination of elink:VkQueryPipelineStatisticFlagBits values
-  * [[VUID-VkCommandBufferInheritanceInfo-pipelineStatistics-00058]]
-    If the <<features-pipelineStatisticsQuery,pipeline statistics queries>>
-    feature is not enabled, pname:pipelineStatistics must: be code:0
-****
-
-include::{generated}/validity/structs/VkCommandBufferInheritanceInfo.txt[]
---
-
-[NOTE]
-.Note
-====
-On some implementations, not using the
-ename:VK_COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT bit enables command
-buffers to be patched in-place if needed, rather than creating a copy of the
-command buffer.
-====
-
-If a command buffer is in the <<commandbuffers-lifecycle, invalid, or
-executable state>>, and the command buffer was allocated from a command pool
-with the ename:VK_COMMAND_POOL_CREATE_RESET_COMMAND_BUFFER_BIT flag set,
-then fname:vkBeginCommandBuffer implicitly resets the command buffer,
-behaving as if fname:vkResetCommandBuffer had been called with
-ename:VK_COMMAND_BUFFER_RESET_RELEASE_RESOURCES_BIT not set.
-After the implicit reset, pname:commandBuffer is moved to the
-<<commandbuffers-lifecycle, recording state>>.
-
-ifdef::VK_EXT_conditional_rendering[]
-[open,refpage='VkCommandBufferInheritanceConditionalRenderingInfoEXT',desc='Structure specifying command buffer inheritance information',type='structs']
---
-If the pname:pNext chain of slink:VkCommandBufferInheritanceInfo includes a
-sname:VkCommandBufferInheritanceConditionalRenderingInfoEXT structure, then
-that structure controls whether a command buffer can: be executed while
-conditional rendering is <<active-conditional-rendering,active>> in the
-primary command buffer.
-
-The sname:VkCommandBufferInheritanceConditionalRenderingInfoEXT structure is
-defined as:
-
-include::{generated}/api/structs/VkCommandBufferInheritanceConditionalRenderingInfoEXT.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:conditionalRenderingEnable specifies whether the command buffer
-    can: be executed while conditional rendering is active in the primary
-    command buffer.
-    If this is ename:VK_TRUE, then this command buffer can: be executed
-    whether the primary command buffer has active conditional rendering or
-    not.
-    If this is ename:VK_FALSE, then the primary command buffer must: not
-    have conditional rendering active.
-
-If this structure is not present, the behavior is as if
-pname:conditionalRenderingEnable is ename:VK_FALSE.
-
-.Valid Usage
-****
-  * [[VUID-VkCommandBufferInheritanceConditionalRenderingInfoEXT-conditionalRenderingEnable-01977]]
-    If the <<features-inheritedConditionalRendering, inherited conditional
-    rendering>> feature is not enabled, pname:conditionalRenderingEnable
-    must: be ename:VK_FALSE
-****
-
-include::{generated}/validity/structs/VkCommandBufferInheritanceConditionalRenderingInfoEXT.txt[]
---
-endif::VK_EXT_conditional_rendering[]
-
-ifdef::VK_QCOM_render_pass_transform[]
-[open,refpage='VkCommandBufferInheritanceRenderPassTransformInfoQCOM',desc='Structure describing transformed render pass parameters command buffer',type='structs']
---
-
-To begin recording a secondary command buffer compatible with execution
-inside a render pass using <<vertexpostproc-renderpass-transform, render
-pass transform>>, add the
-slink:VkCommandBufferInheritanceRenderPassTransformInfoQCOM to the
-pname:pNext chain of slink:VkCommandBufferInheritanceInfo structure passed
-to the flink:vkBeginCommandBuffer command specifying the parameters for
-transformed rasterization.
-
-The sname:VkCommandBufferInheritanceRenderPassTransformInfoQCOM structure is
-defined as:
-
-include::{generated}/api/structs/VkCommandBufferInheritanceRenderPassTransformInfoQCOM.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:transform is a elink:VkSurfaceTransformFlagBitsKHR value
-    describing the transform to be applied to the render pass.
-  * pname:renderArea is the render area that is affected by the command
-    buffer.
-
-When the secondary is recorded to execute within a render pass instance
-using flink:vkCmdExecuteCommands, the render pass transform parameters of
-the secondary command buffer must: be consistent with the render pass
-transform parameters specified for the render pass instance.
-In particular, the pname:transform and pname:renderArea for command buffer
-must: be identical to the pname:transform and pname:renderArea of the render
-pass instance.
-
-.Valid Usage
-****
-  * [[VUID-VkCommandBufferInheritanceRenderPassTransformInfoQCOM-transform-02864]]
-    pname:transform must: be ename:VK_SURFACE_TRANSFORM_IDENTITY_BIT_KHR,
-    ename:VK_SURFACE_TRANSFORM_ROTATE_90_BIT_KHR,
-    ename:VK_SURFACE_TRANSFORM_ROTATE_180_BIT_KHR, or
-    ename:VK_SURFACE_TRANSFORM_ROTATE_270_BIT_KHR
-****
-
-include::{generated}/validity/structs/VkCommandBufferInheritanceRenderPassTransformInfoQCOM.txt[]
---
-endif::VK_QCOM_render_pass_transform[]
-
-ifdef::VK_NV_inherited_viewport_scissor[]
-[open,refpage='VkCommandBufferInheritanceViewportScissorInfoNV',desc='Structure specifying command buffer inheritance information',type='structs']
---
-The sname:VkCommandBufferInheritanceViewportScissorInfoNV structure is
-defined as:
-
-include::{generated}/api/structs/VkCommandBufferInheritanceViewportScissorInfoNV.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:viewportScissor2D specifies whether the listed dynamic state is
-    inherited.
-  * pname:viewportDepthCount specifies the maximum number of viewports to
-    inherit.
-    When pname:viewportScissor2D is ename:VK_FALSE, the behavior is as if
-    this value is zero.
-  * pname:pViewportDepths is a pointer to a slink:VkViewport structure
-    specifying the expected depth range for each inherited viewport.
-
-If the pname:pNext chain of slink:VkCommandBufferInheritanceInfo includes a
-sname:VkCommandBufferInheritanceViewportScissorInfoNV structure, then that
-structure controls whether a command buffer can: inherit the following state
-from other command buffers:
-
-  * ename:VK_DYNAMIC_STATE_SCISSOR
-ifdef::VK_EXT_extended_dynamic_state[]
-  * ename:VK_DYNAMIC_STATE_SCISSOR_WITH_COUNT_EXT
-endif::VK_EXT_extended_dynamic_state[]
-ifdef::VK_EXT_discard_rectangles[]
-  * ename:VK_DYNAMIC_STATE_DISCARD_RECTANGLE_EXT
-endif::VK_EXT_discard_rectangles[]
-
-as well as the following state, with restrictions on inherited depth values
-and viewport count:
-
-  * ename:VK_DYNAMIC_STATE_VIEWPORT
-ifdef::VK_EXT_extended_dynamic_state[]
-  * ename:VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT
-endif::VK_EXT_extended_dynamic_state[]
-
-If pname:viewportScissor2D is ename:VK_FALSE, then the command buffer does
-not inherit the listed dynamic state, and should: set this state itself.
-If this structure is not present, the behavior is as if
-pname:viewportScissor2D is ename:VK_FALSE.
-
-If pname:viewportScissor2D is ename:VK_TRUE, then the listed dynamic state
-is inherited, and the command buffer must: not set this
-ifndef::VK_EXT_extended_dynamic_state[state.]
-ifdef::VK_EXT_extended_dynamic_state[]
-state, except that the viewport and scissor count may: be set by binding a
-graphics pipeline that does not specify this state as dynamic.
-
-[NOTE]
-.Note
-====
-Due to this restriction, applications should: ensure either all or none of
-the graphics pipelines bound in this secondary command buffer use dynamic
-viewport/scissor counts.
-====
-endif::VK_EXT_extended_dynamic_state[]
-
-When the command buffer is executed as part of a the execution of a
-flink:vkCmdExecuteCommands command, the inherited state (if enabled) is
-determined by the following procedure, performed separately for each dynamic
-state, and separately for each value for dynamic state that consists of
-multiple values (e.g. multiple viewports).
-
-  * With [eq]#i# being the index of the executed command buffer in the
-    pname:pCommandBuffers array of flink:vkCmdExecuteCommands, if [eq]#i >
-    0# and any secondary command buffer from index [eq]#0# to [eq]#i-1#
-    modifies the state, the inherited state is provisionally set to the
-    final value set by the last such secondary command buffer.
-    Binding a graphics pipeline that defines the state statically is
-    equivalent to setting the state to an undefined: value.
-  * Otherwise, the tentatative inherited state is that of the primary
-    command buffer at the point the flink:vkCmdExecuteCommands command was
-    recorded; if the state is undefined:, then so is the provisional
-    inherited state.
-  * If the provisional inherited state is an undefined: value, then the
-    state is not inherited.
-  * If the provisional inherited state is a viewport, with [eq]#n# being its
-    viewport index, then if [eq]#n {geq} pname:viewportDepthCount#, or if
-    either slink:VkViewport::pname:minDepth or
-    slink:VkViewport::pname:maxDepth are not equal to the respective values
-    of the [eq]#n^th^# element of pname:pViewportDepths, then the state is
-    not inherited.
-  * If the provisional inherited state passes both checks, then it becomes
-    the actual inherited state.
-
-[NOTE]
-.Note
-====
-There is no support for inheriting dynamic state from a secondary command
-buffer executed as part of a different `vkCmdExecuteCommands` command.
-====
-
-.Valid Usage
-****
-  * [[VUID-VkCommandBufferInheritanceViewportScissorInfoNV-viewportScissor2D-04782]]
-    If the <<features-inheritedViewportScissor2D, inherited viewport
-    scissor>> feature is not enabled, pname:viewportScissor2D must: be
-    ename:VK_FALSE
-  * [[VUID-VkCommandBufferInheritanceViewportScissorInfoNV-viewportScissor2D-04783]]
-    If the <<features-multiViewport,multiple viewports>> feature is not
-    enabled and pname:viewportScissor2D is ename:VK_TRUE, then
-    pname:viewportDepthCount must: be `1`
-  * [[VUID-VkCommandBufferInheritanceViewportScissorInfoNV-viewportScissor2D-04784]]
-    If pname:viewportScissor2D is ename:VK_TRUE, then
-    pname:viewportDepthCount must: be greater than `0`
-  * [[VUID-VkCommandBufferInheritanceViewportScissorInfoNV-viewportScissor2D-04785]]
-    If pname:viewportScissor2D is ename:VK_TRUE, then pname:pViewportDepths
-    must: be a valid pointer to an array of `viewportDepthCount` valid
-    sname:VkViewport structures, except any requirements on `x`, `y`,
-    `width`, and `height` do not apply
-  * [[VUID-VkCommandBufferInheritanceViewportScissorInfoNV-viewportScissor2D-04786]]
-    If pname:viewportScissor2D is ename:VK_TRUE, then the command buffer
-    must: be recorded with the
-    ename:VK_COMMAND_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT
-****
-
-include::{generated}/validity/structs/VkCommandBufferInheritanceViewportScissorInfoNV.txt[]
---
-endif::VK_NV_inherited_viewport_scissor[]
-
-ifdef::VK_KHR_dynamic_rendering[]
-[open,refpage='VkCommandBufferInheritanceRenderingInfoKHR',desc='Structure specifying command buffer inheritance info for dynamic render pass instances',type='structs']
---
-
-The sname:VkCommandBufferInheritanceRenderingInfoKHR structure is defined
-as:
-
-include::{generated}/api/structs/VkCommandBufferInheritanceRenderingInfoKHR.txt[]
-
-  * pname:sType is the type of this structure
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure
-  * pname:flags is a bitmask of elink:VkRenderingFlagBitsKHR used by the
-    render pass instance.
-  * pname:viewMask is the view mask used for rendering.
-  * pname:colorAttachmentCount is the number of color attachments specified
-    in the render pass instance.
-  * pname:pColorAttachmentFormats is an array of elink:VkFormat values
-    defining the format of color attachments.
-  * pname:depthAttachmentFormat is a elink:VkFormat value defining the
-    format of the depth attachment.
-  * pname:stencilAttachmentFormat is a elink:VkFormat value defining the
-    format of the stencil attachment.
-  * pname:rasterizationSamples is a elink:VkSampleCountFlagBits specifying
-    the number of samples used in rasterization.
-
-If the pname:pNext chain of slink:VkCommandBufferInheritanceInfo includes a
-sname:VkCommandBufferInheritanceRenderingInfoKHR structure, then that
-structure controls parameters of dynamic render pass instances that the
-slink:VkCommandBuffer can: be executed within.
-If slink:VkCommandBufferInheritanceInfo::pname:renderPass is not
-dlink:VK_NULL_HANDLE, or
-ename:VK_COMMAND_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT is not specified in
-slink:VkCommandBufferBeginInfo::pname:flags, parameters of this structure
-are ignored.
-
-If pname:colorAttachmentCount is `0` and the
-<<features-variableMultisampleRate,pname:variableMultisampleRate>> feature
-is enabled, pname:rasterizationSamples is ignored.
-
-If pname:depthAttachmentFormat, pname:stencilAttachmentFormat, or any
-element of pname:pColorAttachmentFormats is ename:VK_FORMAT_UNDEFINED, it
-indicates that the corresponding attachment is unused within the render
-pass.
-
-.Valid Usage
-****
-  * [[VUID-VkCommandBufferInheritanceRenderingInfoKHR-colorAttachmentCount-06004]]
-    If pname:colorAttachmentCount is not `0`, pname:rasterizationSamples
-    must: be a valid elink:VkSampleCountFlagBits value
-  * [[VUID-VkCommandBufferInheritanceRenderingInfoKHR-variableMultisampleRate-06005]]
-    If the
-    <<features-variableMultisampleRate,pname:variableMultisampleRate>>
-    feature is not enabled, pname:rasterizationSamples must: be a valid
-    elink:VkSampleCountFlagBits value
-  * [[VUID-VkCommandBufferInheritanceRenderingInfoKHR-pColorAttachmentFormats-06006]]
-    If any element of pname:pColorAttachmentFormats is not
-    ename:VK_FORMAT_UNDEFINED, it must: be a format with
-    <<potential-format-features, potential format features>> that include
-    ename:VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT
-  * [[VUID-VkCommandBufferInheritanceRenderingInfoKHR-depthAttachmentFormat-06007]]
-    If pname:depthAttachmentFormat is not ename:VK_FORMAT_UNDEFINED, it
-    must: be a format with <<potential-format-features, potential format
-    features>> that include
-    ename:VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT
-  * [[VUID-VkCommandBufferInheritanceRenderingInfoKHR-stencilAttachmentFormat-06199]]
-    If pname:stencilAttachmentFormat is not ename:VK_FORMAT_UNDEFINED, it
-    must: be a format with <<potential-format-features, potential format
-    features>> that include
-    ename:VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT
-  * [[VUID-VkCommandBufferInheritanceRenderingInfoKHR-depthAttachmentFormat-06200]]
-    If pname:depthAttachmentFormat is not ename:VK_FORMAT_UNDEFINED and
-    pname:stencilAttachmentFormat is not ename:VK_FORMAT_UNDEFINED,
-    pname:depthAttachmentFormat must: equal pname:stencilAttachmentFormat
-  * [[VUID-VkCommandBufferInheritanceRenderingInfoKHR-multiview-06008]]
-    If the <<features-multiview,pname:multiview>> feature is not enabled,
-    pname:viewMask must: be `0`
-ifdef::VK_VERSION_1_1,VK_KHR_multiview[]
-  * [[VUID-VkCommandBufferInheritanceRenderingInfoKHR-viewMask-06009]]
-    The index of the most significant bit in pname:viewMask must: be less
-    than <<limits-maxMultiviewViewCount,pname:maxMultiviewViewCount>>
-endif::VK_VERSION_1_1,VK_KHR_multiview[]
-****
-
-include::{generated}/validity/structs/VkCommandBufferInheritanceRenderingInfoKHR.txt[]
---
-
-ifdef::VK_AMD_mixed_attachment_samples,VK_NV_framebuffer_mixed_samples[]
-[open,refpage='VkAttachmentSampleCountInfoAMD',desc='Structure specifying command buffer inheritance info for dynamic render pass instances',type='structs',alias='VkAttachmentSampleCountInfoNV']
---
-
-The
-ifdef::VK_AMD_mixed_attachment_samples[sname:VkAttachmentSampleCountInfoAMD]
-ifdef::VK_AMD_mixed_attachment_samples+VK_NV_framebuffer_mixed_samples[or]
-ifdef::VK_NV_framebuffer_mixed_samples[sname:VkAttachmentSampleCountInfoNV]
-structure is defined as:
-
-ifdef::VK_AMD_mixed_attachment_samples[]
-include::{generated}/api/structs/VkAttachmentSampleCountInfoAMD.txt[]
-endif::VK_AMD_mixed_attachment_samples[]
-
-ifdef::VK_AMD_mixed_attachment_samples+VK_NV_framebuffer_mixed_samples[or the equivalent]
-
-ifdef::VK_NV_framebuffer_mixed_samples[]
-include::{generated}/api/structs/VkAttachmentSampleCountInfoNV.txt[]
-endif::VK_NV_framebuffer_mixed_samples[]
-
-  * pname:sType is the type of this structure
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure
-  * pname:colorAttachmentCount is the number of color attachments specified
-    in a render pass instance.
-  * pname:pColorAttachmentSamples is an array of elink:VkSampleCountFlagBits
-    values defining the sample count of color attachments.
-  * pname:depthStencilAttachmentSamples is a elink:VkSampleCountFlagBits
-    value defining the sample count of a depth/stencil attachment.
-
-If slink:VkCommandBufferInheritanceInfo::pname:renderPass is
-dlink:VK_NULL_HANDLE, ename:VK_COMMAND_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT
-is specified in slink:VkCommandBufferBeginInfo::pname:flags, and the
-pname:pNext chain of slink:VkCommandBufferInheritanceInfo includes
-sname:VkAttachmentSampleCountInfoAMD, then this structure defines the sample
-counts of each attachment within the render pass instance.
-If sname:VkAttachmentSampleCountInfoAMD is not included, the value of
-slink:VkCommandBufferInheritanceRenderingInfoKHR::pname:rasterizationSamples
-is used as the sample count for each attachment.
-If slink:VkCommandBufferInheritanceInfo::pname:renderPass is not
-dlink:VK_NULL_HANDLE, or
-ename:VK_COMMAND_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT is not specified in
-slink:VkCommandBufferBeginInfo::pname:flags, parameters of this structure
-are ignored.
-
-sname:VkAttachmentSampleCountInfoAMD can: also be included in the
-pname:pNext chain of slink:VkGraphicsPipelineCreateInfo.
-When a graphics pipeline is created without a slink:VkRenderPass, if this
-structure is present in the pname:pNext chain of
-slink:VkGraphicsPipelineCreateInfo, it specifies the sample count of
-attachments used for rendering.
-If this structure is not specified, and the pipeline does not include a
-slink:VkRenderPass, the value of
-slink:VkPipelineMultisampleStateCreateInfo::pname:rasterizationSamples is
-used as the sample count for each attachment.
-If a graphics pipeline is created with a valid slink:VkRenderPass,
-parameters of this structure are ignored.
-
-include::{generated}/validity/structs/VkAttachmentSampleCountInfoAMD.txt[]
---
-endif::VK_AMD_mixed_attachment_samples,VK_NV_framebuffer_mixed_samples[]
-
-endif::VK_KHR_dynamic_rendering[]
-
-Once recording starts, an application records a sequence of commands
-(ftext:vkCmd*) to set state in the command buffer, draw, dispatch, and other
-commands.
-
-ifdef::VK_NV_device_generated_commands[]
-Several commands can also be recorded indirectly from sname:VkBuffer
-content, see <<device-generated-commands>>.
-endif::VK_NV_device_generated_commands[]
-
-[open,refpage='vkEndCommandBuffer',desc='Finish recording a command buffer',type='protos']
---
-To complete recording of a command buffer, call:
-
-include::{generated}/api/protos/vkEndCommandBuffer.txt[]
-
-  * pname:commandBuffer is the command buffer to complete recording.
-
-If there was an error during recording, the application will be notified by
-an unsuccessful return code returned by fname:vkEndCommandBuffer.
-If the application wishes to further use the command buffer, the command
-buffer must: be reset.
-
-The command buffer must: have been in the <<commandbuffers-lifecycle,
-recording state>>, and is moved to the <<commandbuffers-lifecycle,
-executable state>>.
-
-.Valid Usage
-****
-  * [[VUID-vkEndCommandBuffer-commandBuffer-00059]]
-    pname:commandBuffer must: be in the <<commandbuffers-lifecycle,
-    recording state>>
-  * [[VUID-vkEndCommandBuffer-commandBuffer-00060]]
-    If pname:commandBuffer is a primary command buffer, there must: not be
-    an active render pass instance
-  * [[VUID-vkEndCommandBuffer-commandBuffer-00061]]
-    All queries made <<queries-operation-active,active>> during the
-    recording of pname:commandBuffer must: have been made inactive
-ifdef::VK_EXT_conditional_rendering[]
-  * [[VUID-vkEndCommandBuffer-None-01978]]
-    Conditional rendering must: not be
-    <<active-conditional-rendering,active>>
-endif::VK_EXT_conditional_rendering[]
-ifdef::VK_EXT_debug_utils[]
-  * [[VUID-vkEndCommandBuffer-commandBuffer-01815]]
-    If pname:commandBuffer is a secondary command buffer, there must: not be
-    an outstanding flink:vkCmdBeginDebugUtilsLabelEXT command recorded to
-    pname:commandBuffer that has not previously been ended by a call to
-    flink:vkCmdEndDebugUtilsLabelEXT
-endif::VK_EXT_debug_utils[]
-ifdef::VK_EXT_debug_marker[]
-  * [[VUID-vkEndCommandBuffer-commandBuffer-00062]]
-    If pname:commandBuffer is a secondary command buffer, there must: not be
-    an outstanding flink:vkCmdDebugMarkerBeginEXT command recorded to
-    pname:commandBuffer that has not previously been ended by a call to
-    flink:vkCmdDebugMarkerEndEXT
-endif::VK_EXT_debug_marker[]
-****
-
-include::{generated}/validity/protos/vkEndCommandBuffer.txt[]
---
-
-When a command buffer is in the executable state, it can: be submitted to a
-queue for execution.
-
-
-[[commandbuffers-submission]]
-== Command Buffer Submission
-
-[NOTE]
-.Note
-====
-Submission can be a high overhead operation, and applications should:
-attempt to batch work together into as few calls to fname:vkQueueSubmit
-ifdef::VK_KHR_synchronization2[]
-or fname:vkQueueSubmit2KHR
-endif::VK_KHR_synchronization2[]
-as possible.
-====
-
-ifdef::VK_KHR_synchronization2[]
-[open,refpage='vkQueueSubmit2KHR',desc='Submits command buffers to a queue',type='protos']
---
-To submit command buffers to a queue, call:
-
-include::{generated}/api/protos/vkQueueSubmit2KHR.txt[]
-
-  * pname:queue is the queue that the command buffers will be submitted to.
-  * pname:submitCount is the number of elements in the pname:pSubmits array.
-  * pname:pSubmits is a pointer to an array of slink:VkSubmitInfo2KHR
-    structures, each specifying a command buffer submission batch.
-  * pname:fence is an optional: handle to a fence to be signaled once all
-    submitted command buffers have completed execution.
-    If pname:fence is not dlink:VK_NULL_HANDLE, it defines a
-    <<synchronization-fences-signaling, fence signal operation>>.
-
-fname:vkQueueSubmit2KHR is a <<devsandqueues-submission,queue submission
-command>>, with each batch defined by an element of pname:pSubmits.
-
-Semaphore operations submitted with flink:vkQueueSubmit2KHR have additional
-ordering constraints compared to other submission commands, with
-dependencies involving previous and subsequent queue operations.
-Information about these additional constraints can be found in the
-<<synchronization-semaphores, semaphore>> section of <<synchronization, the
-synchronization chapter>>.
-
-If any command buffer submitted to this queue is in the
-<<commandbuffers-lifecycle, executable state>>, it is moved to the
-<<commandbuffers-lifecycle, pending state>>.
-Once execution of all submissions of a command buffer complete, it moves
-from the <<commandbuffers-lifecycle, pending state>>, back to the
-<<commandbuffers-lifecycle, executable state>>.
-If a command buffer was recorded with the
-ename:VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT flag, it instead moves
-back to the <<commandbuffers-lifecycle, invalid state>>.
-
-If fname:vkQueueSubmit2KHR fails, it may: return
-ename:VK_ERROR_OUT_OF_HOST_MEMORY or ename:VK_ERROR_OUT_OF_DEVICE_MEMORY.
-If it does, the implementation must: ensure that the state and contents of
-any resources or synchronization primitives referenced by the submitted
-command buffers and any semaphores referenced by pname:pSubmits is
-unaffected by the call or its failure.
-If fname:vkQueueSubmit2KHR fails in such a way that the implementation is
-unable to make that guarantee, the implementation must: return
-ename:VK_ERROR_DEVICE_LOST.
-See <<devsandqueues-lost-device,Lost Device>>.
-
-.Valid Usage
-****
-  * [[VUID-vkQueueSubmit2KHR-fence-04894]]
-    If pname:fence is not dlink:VK_NULL_HANDLE, pname:fence must: be
-    unsignaled
-  * [[VUID-vkQueueSubmit2KHR-fence-04895]]
-    If pname:fence is not dlink:VK_NULL_HANDLE, pname:fence must: not be
-    associated with any other queue command that has not yet completed
-    execution on that queue
-  * [[VUID-vkQueueSubmit2KHR-synchronization2-03866]]
-    The <<features-synchronization2, pname:synchronization2>> feature must:
-    be enabled
-  * [[VUID-vkQueueSubmit2KHR-commandBuffer-03867]]
-    If a command recorded into the pname:commandBuffer member of any element
-    of the pname:pCommandBufferInfos member of any element of pname:pSubmits
-    referenced an slink:VkEvent, that event must: not be referenced by a
-    command that has been submitted to another queue and is still in the
-    _pending state_
-  * [[VUID-vkQueueSubmit2KHR-semaphore-03868]]
-    The pname:semaphore member of any binary semaphore element of the
-    pname:pSignalSemaphoreInfos member of any element of pname:pSubmits
-    must: be unsignaled when the semaphore signal operation it defines is
-    executed on the device
-  * [[VUID-vkQueueSubmit2KHR-stageMask-03869]]
-    The pname:stageMask member of any element of the
-    pname:pSignalSemaphoreInfos member of any element of pname:pSubmits
-    must: only include pipeline stages that are supported by the queue
-    family which pname:queue belongs to
-  * [[VUID-vkQueueSubmit2KHR-stageMask-03870]]
-    The pname:stageMask member of any element of the
-    pname:pWaitSemaphoreInfos member of any element of pname:pSubmits must:
-    only include pipeline stages that are supported by the queue family
-    which pname:queue belongs to
-  * [[VUID-vkQueueSubmit2KHR-semaphore-03871]]
-    When a semaphore wait operation for a binary semaphore is executed, as
-    defined by the pname:semaphore member of any element of the
-    pname:pWaitSemaphoreInfos member of any element of pname:pSubmits, there
-    must: be no other queues waiting on the same semaphore
-  * [[VUID-vkQueueSubmit2KHR-semaphore-03872]]
-    The pname:semaphore member of any element of the
-    pname:pWaitSemaphoreInfos member of any element of pname:pSubmits must:
-    be semaphores that are signaled, or have
-    <<synchronization-semaphores-signaling, semaphore signal operations>>
-    previously submitted for execution
-ifdef::VK_KHR_timeline_semaphore[]
-  * [[VUID-vkQueueSubmit2KHR-semaphore-03873]]
-    Any pname:semaphore member of any element of the
-    pname:pWaitSemaphoreInfos member of any element of pname:pSubmits that
-    was created with a elink:VkSemaphoreTypeKHR of
-    ename:VK_SEMAPHORE_TYPE_BINARY_KHR must: reference a semaphore signal
-    operation that has been submitted for execution and any semaphore signal
-    operations on which it depends (if any) must: have also been submitted
-    for execution
-endif::VK_KHR_timeline_semaphore[]
-  * [[VUID-vkQueueSubmit2KHR-commandBuffer-03874]]
-    The pname:commandBuffer member of any element of the
-    pname:pCommandBufferInfos member of any element of pname:pSubmits must:
-    be in the <<commandbuffers-lifecycle, pending or executable state>>
-  * [[VUID-vkQueueSubmit2KHR-commandBuffer-03875]]
-    If a command recorded into the pname:commandBuffer member of any element
-    of the pname:pCommandBufferInfos member of any element of pname:pSubmits
-    was not recorded with the
-    ename:VK_COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT, it must: not be in
-    the <<commandbuffers-lifecycle, pending state>>
-  * [[VUID-vkQueueSubmit2KHR-commandBuffer-03876]]
-    Any <<commandbuffers-secondary, secondary command buffers recorded>>
-    into the pname:commandBuffer member of any element of the
-    pname:pCommandBufferInfos member of any element of pname:pSubmits must:
-    be in the <<commandbuffers-lifecycle, pending or executable state>>
-  * [[VUID-vkQueueSubmit2KHR-commandBuffer-03877]]
-    If any <<commandbuffers-secondary, secondary command buffers recorded>>
-    into the pname:commandBuffer member of any element of the
-    pname:pCommandBufferInfos member of any element of pname:pSubmits was
-    not recorded with the
-    ename:VK_COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT, it must: not be in
-    the <<commandbuffers-lifecycle, pending state>>
-  * [[VUID-vkQueueSubmit2KHR-commandBuffer-03878]]
-    The pname:commandBuffer member of any element of the
-    pname:pCommandBufferInfos member of any element of pname:pSubmits must:
-    have been allocated from a sname:VkCommandPool that was created for the
-    same queue family pname:queue belongs to
-  * [[VUID-vkQueueSubmit2KHR-commandBuffer-03879]]
-    If a command recorded into the pname:commandBuffer member of any element
-    of the pname:pCommandBufferInfos member of any element of pname:pSubmits
-    includes a <<synchronization-queue-transfers-acquire, Queue Family
-    Transfer Acquire Operation>>, there must: exist a previously submitted
-    <<synchronization-queue-transfers-release, Queue Family Transfer Release
-    Operation>> on a queue in the queue family identified by the acquire
-    operation, with parameters matching the acquire operation as defined in
-    the definition of such <<synchronization-queue-transfers-acquire,
-    acquire operations>>, and which happens before the acquire operation
-ifdef::VK_KHR_performance_query[]
-  * [[VUID-vkQueueSubmit2KHR-commandBuffer-03880]]
-    If a command recorded into the pname:commandBuffer member of any element
-    of the pname:pCommandBufferInfos member of any element of pname:pSubmits
-    was a flink:vkCmdBeginQuery whose pname:queryPool was created with a
-    pname:queryType of ename:VK_QUERY_TYPE_PERFORMANCE_QUERY_KHR, the
-    <<profiling-lock, profiling lock>> must: have been held continuously on
-    the sname:VkDevice that pname:queue was retrieved from, throughout
-    recording of those command buffers
-endif::VK_KHR_performance_query[]
-ifdef::VK_VERSION_1_1[]
-  * [[VUID-vkQueueSubmit2KHR-queue-06447]]
-    If pname:queue was not created with
-    ename:VK_DEVICE_QUEUE_CREATE_PROTECTED_BIT, the pname:flags member of
-    any element of pname:pSubmits must: not include
-    ename:VK_SUBMIT_PROTECTED_BIT_KHR
-endif::VK_VERSION_1_1[]
-****
-
-include::{generated}/validity/protos/vkQueueSubmit2KHR.txt[]
---
-
-[open,refpage='VkSubmitInfo2KHR',desc='Structure specifying a queue submit operation',type='structs']
---
-The sname:VkSubmitInfo2KHR structure is defined as:
-
-include::{generated}/api/structs/VkSubmitInfo2KHR.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:flags is a bitmask of elink:VkSubmitFlagBitsKHR.
-  * pname:waitSemaphoreInfoCount is the number of elements in
-    pname:pWaitSemaphoreInfos.
-  * pname:pWaitSemaphoreInfos is a pointer to an array of
-    slink:VkSemaphoreSubmitInfoKHR structures defining
-    <<synchronization-semaphores-waiting, semaphore wait operations>>.
-  * pname:commandBufferInfoCount is the number of elements in
-    pname:pCommandBufferInfos and the number of command buffers to execute
-    in the batch.
-  * pname:pCommandBufferInfos is a pointer to an array of
-    slink:VkCommandBufferSubmitInfoKHR structures describing command buffers
-    to execute in the batch.
-  * pname:signalSemaphoreInfoCount is the number of elements in
-    pname:pSignalSemaphoreInfos.
-  * pname:pSignalSemaphoreInfos is a pointer to an array of
-    slink:VkSemaphoreSubmitInfoKHR describing
-    <<synchronization-semaphores-signaling, semaphore signal operations>>.
-
-.Valid Usage
-****
-ifdef::VK_KHR_timeline_semaphore[]
-  * [[VUID-VkSubmitInfo2KHR-semaphore-03881]]
-    If the same semaphore is used as the pname:semaphore member of both an
-    element of pname:pSignalSemaphoreInfos and pname:pWaitSemaphoreInfos,
-    and that semaphore is a timeline semaphore, the pname:value member of
-    the pname:pSignalSemaphoreInfos element must: be greater than the
-    pname:value member of the pname:pWaitSemaphoreInfos element
-  * [[VUID-VkSubmitInfo2KHR-semaphore-03882]]
-    If the pname:semaphore member of any element of
-    pname:pSignalSemaphoreInfos is a timeline semaphore, the pname:value
-    member of that element must: have a value greater than the current value
-    of the semaphore when the <<synchronization-semaphores-signaling,
-    semaphore signal operation>> is executed
-  * [[VUID-VkSubmitInfo2KHR-semaphore-03883]]
-    If the pname:semaphore member of any element of
-    pname:pSignalSemaphoreInfos is a timeline semaphore, the pname:value
-    member of that element must: have a value which does not differ from the
-    current value of the semaphore or the value of any outstanding semaphore
-    wait or signal operation on that semaphore by more than
-    <<limits-maxTimelineSemaphoreValueDifference,
-    pname:maxTimelineSemaphoreValueDifference>>
-  * [[VUID-VkSubmitInfo2KHR-semaphore-03884]]
-    If the pname:semaphore member of any element of
-    pname:pWaitSemaphoreInfos is a timeline semaphore, the pname:value
-    member of that element must: have a value which does not differ from the
-    current value of the semaphore or the value of any outstanding semaphore
-    wait or signal operation on that semaphore by more than
-    <<limits-maxTimelineSemaphoreValueDifference,
-    pname:maxTimelineSemaphoreValueDifference>>
-endif::VK_KHR_timeline_semaphore[]
-ifdef::VK_VERSION_1_1[]
-  * [[VUID-VkSubmitInfo2KHR-flags-03886]]
-    If pname:flags includes ename:VK_SUBMIT_PROTECTED_BIT_KHR, all elements
-    of pname:pCommandBuffers must: be protected command buffers
-  * [[VUID-VkSubmitInfo2KHR-flags-03887]]
-    If pname:flags does not include ename:VK_SUBMIT_PROTECTED_BIT_KHR, each
-    element of pname:pCommandBuffers must: not be a protected command buffer
-endif::VK_VERSION_1_1[]
-ifdef::VK_KHR_dynamic_rendering[]
-  * [[VUID-VkSubmitInfo2KHR-commandBuffer-06192]]
-    If any pname:commandBuffer member of an element of
-    pname:pCommandBufferInfos contains any <<renderpass-suspension,resumed
-    render pass instances>>, they must: be suspended by a render pass
-    instance earlier in submission order within pname:pCommandBufferInfos
-  * [[VUID-VkSubmitInfo2KHR-commandBuffer-06010]]
-    If any pname:commandBuffer member of an element of
-    pname:pCommandBufferInfos contains any <<renderpass-suspension,suspended
-    render pass instances>>, they must: be resumed by a render pass instance
-    later in submission order within pname:pCommandBufferInfos
-  * [[VUID-VkSubmitInfo2KHR-commandBuffer-06011]]
-    If any pname:commandBuffer member of an element of
-    pname:pCommandBufferInfos contains any <<renderpass-suspension,suspended
-    render pass instances>>, there must: be no action or synchronization
-    commands between that render pass instance and the render pass instance
-    that resumes it
-  * [[VUID-VkSubmitInfo2KHR-commandBuffer-06012]]
-    If any pname:commandBuffer member of an element of
-    pname:pCommandBufferInfos contains any <<renderpass-suspension,suspended
-    render pass instances>>, there must: be no render pass instances between
-    that render pass instance and the render pass instance that resumes it
-ifdef::VK_EXT_sample_locations[]
-  * [[VUID-VkSubmitInfo2KHR-variableSampleLocations-06013]]
-    If the <<limits-variableSampleLocations, pname:variableSampleLocations>>
-    limit is not supported, and any pname:commandBuffer member of an element
-    of pname:pCommandBufferInfos contains any
-    <<renderpass-suspension,suspended render pass instances>>, where a
-    graphics pipeline has been bound, any pipelines bound in the render pass
-    instance that resumes it, or any subsequent render pass instances that
-    resume from that one and so on, must: use the same sample locations
-endif::VK_EXT_sample_locations[]
-endif::VK_KHR_dynamic_rendering[]
-****
-
-include::{generated}/validity/structs/VkSubmitInfo2KHR.txt[]
---
-
-[open,refpage='VkSubmitFlagBitsKHR',desc='Bitmask specifying behavior of a submission',type='enums']
---
-Bits which can: be set in slink:VkSubmitInfo2KHR::pname:flags to specify
-submission behavior are:
-
-include::{generated}/api/enums/VkSubmitFlagBitsKHR.txt[]
-
-  * ename:VK_SUBMIT_PROTECTED_BIT_KHR specifies that this batch is a
-    protected submission.
---
-
-[open,refpage='VkSubmitFlagsKHR',desc='Bitmask of VkSubmitFlagBitsKHR',type='flags']
---
-include::{generated}/api/flags/VkSubmitFlagsKHR.txt[]
-
-tname:VkSubmitFlagsKHR is a bitmask type for setting a mask of zero or more
-elink:VkSubmitFlagBitsKHR.
---
-
-[open,refpage='VkSemaphoreSubmitInfoKHR',desc='Structure specifying a semaphore signal or wait operation',type='structs']
---
-:refpage: VkSemaphoreSubmitInfoKHR
-
-The sname:VkSemaphoreSubmitInfoKHR structure is defined as:
-
-include::{generated}/api/structs/VkSemaphoreSubmitInfoKHR.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:semaphore is a slink:VkSemaphore affected by this operation.
-  * pname:value is
-ifdef::VK_KHR_timeline_semaphore[]
-    either the value used to signal pname:semaphore or the value waited on
-    by pname:semaphore, if pname:semaphore is a timeline semaphore.
-    Otherwise it is
-endif::VK_KHR_timeline_semaphore[]
-    ignored.
-  * pname:stageMask is a tlink:VkPipelineStageFlags2KHR mask of pipeline
-    stages which limit the first synchronization scope of a semaphore signal
-    operation, or second synchronization scope of a semaphore wait operation
-    as described in the <<synchronization-semaphores-waiting, semaphore wait
-    operation>> and <<synchronization-semaphores-signaling, semaphore signal
-    operation>> sections of <<synchronization, the synchronization
-    chapter>>.
-  * pname:deviceIndex is the index of the device within a device group that
-    executes the semaphore wait or signal operation.
-
-Whether this structure defines a semaphore wait or signal operation is
-defined by how it is used.
-
-.Valid Usage
-****
-:stageMaskName: stageMask
-include::{chapters}/commonvalidity/stage_mask_2_common.txt[]
-  * [[VUID-VkSemaphoreSubmitInfoKHR-device-03888]]
-    If the pname:device that pname:semaphore was created on is not a device
-    group, pname:deviceIndex must: be `0`
-ifdef::VK_KHR_device_group_creation,VK_VERSION_1_1[]
-  * [[VUID-VkSemaphoreSubmitInfoKHR-device-03889]]
-    If the pname:device that pname:semaphore was created on is a device
-    group, pname:deviceIndex must: be a valid device index
-endif::VK_KHR_device_group_creation,VK_VERSION_1_1[]
-****
-
-include::{generated}/validity/structs/VkSemaphoreSubmitInfoKHR.txt[]
---
-
-[open,refpage='VkCommandBufferSubmitInfoKHR',desc='Structure specifying a command buffer submission',type='structs']
---
-The sname:VkCommandBufferSubmitInfoKHR structure is defined as:
-
-include::{generated}/api/structs/VkCommandBufferSubmitInfoKHR.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:commandBuffer is a slink:VkCommandBuffer to be submitted for
-    execution.
-  * pname:deviceMask is a bitmask indicating which devices in a device group
-    execute the command buffer.
-    A pname:deviceMask of `0` is equivalent to setting all bits
-    corresponding to valid devices in the group to `1`.
-
-.Valid Usage
-****
-  * [[VUID-VkCommandBufferSubmitInfoKHR-commandBuffer-03890]]
-    pname:commandBuffer must: not have been allocated with
-    ename:VK_COMMAND_BUFFER_LEVEL_SECONDARY
-ifdef::VK_KHR_device_group_creation,VK_VERSION_1_1[]
-  * [[VUID-VkCommandBufferSubmitInfoKHR-deviceMask-03891]]
-    If pname:deviceMask is not `0`, it must: be a valid device mask
-endif::VK_KHR_device_group_creation,VK_VERSION_1_1[]
-****
-
-include::{generated}/validity/structs/VkCommandBufferSubmitInfoKHR.txt[]
---
-endif::VK_KHR_synchronization2[]
-
-[open,refpage='vkQueueSubmit',desc='Submits a sequence of semaphores or command buffers to a queue',type='protos']
---
-To submit command buffers to a queue, call:
-
-include::{generated}/api/protos/vkQueueSubmit.txt[]
-
-  * pname:queue is the queue that the command buffers will be submitted to.
-  * pname:submitCount is the number of elements in the pname:pSubmits array.
-  * pname:pSubmits is a pointer to an array of slink:VkSubmitInfo
-    structures, each specifying a command buffer submission batch.
-  * pname:fence is an optional: handle to a fence to be signaled once all
-    submitted command buffers have completed execution.
-    If pname:fence is not dlink:VK_NULL_HANDLE, it defines a
-    <<synchronization-fences-signaling, fence signal operation>>.
-
-fname:vkQueueSubmit is a <<devsandqueues-submission,queue submission
-command>>, with each batch defined by an element of pname:pSubmits.
-Batches begin execution in the order they appear in pname:pSubmits, but may:
-complete out of order.
-
-Fence and semaphore operations submitted with flink:vkQueueSubmit have
-additional ordering constraints compared to other submission commands, with
-dependencies involving previous and subsequent queue operations.
-Information about these additional constraints can be found in the
-<<synchronization-semaphores, semaphore>> and <<synchronization-fences,
-fence>> sections of <<synchronization, the synchronization chapter>>.
-
-Details on the interaction of pname:pWaitDstStageMask with synchronization
-are described in the <<synchronization-semaphores-waiting, semaphore wait
-operation>> section of <<synchronization, the synchronization chapter>>.
-
-The order that batches appear in pname:pSubmits is used to determine
-<<synchronization-submission-order, submission order>>, and thus all the
-<<synchronization-implicit, implicit ordering guarantees>> that respect it.
-Other than these implicit ordering guarantees and any <<synchronization,
-explicit synchronization primitives>>, these batches may: overlap or
-otherwise execute out of order.
-
-If any command buffer submitted to this queue is in the
-<<commandbuffers-lifecycle, executable state>>, it is moved to the
-<<commandbuffers-lifecycle, pending state>>.
-Once execution of all submissions of a command buffer complete, it moves
-from the <<commandbuffers-lifecycle, pending state>>, back to the
-<<commandbuffers-lifecycle, executable state>>.
-If a command buffer was recorded with the
-ename:VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT flag, it instead moves to
-the <<commandbuffers-lifecycle, invalid state>>.
-
-If fname:vkQueueSubmit fails, it may: return
-ename:VK_ERROR_OUT_OF_HOST_MEMORY or ename:VK_ERROR_OUT_OF_DEVICE_MEMORY.
-If it does, the implementation must: ensure that the state and contents of
-any resources or synchronization primitives referenced by the submitted
-command buffers and any semaphores referenced by pname:pSubmits is
-unaffected by the call or its failure.
-If fname:vkQueueSubmit fails in such a way that the implementation is unable
-to make that guarantee, the implementation must: return
-ename:VK_ERROR_DEVICE_LOST.
-See <<devsandqueues-lost-device,Lost Device>>.
-
-.Valid Usage
-****
-  * [[VUID-vkQueueSubmit-fence-00063]]
-    If pname:fence is not dlink:VK_NULL_HANDLE, pname:fence must: be
-    unsignaled
-  * [[VUID-vkQueueSubmit-fence-00064]]
-    If pname:fence is not dlink:VK_NULL_HANDLE, pname:fence must: not be
-    associated with any other queue command that has not yet completed
-    execution on that queue
-  * [[VUID-vkQueueSubmit-pCommandBuffers-00065]]
-    Any calls to flink:vkCmdSetEvent, flink:vkCmdResetEvent or
-    flink:vkCmdWaitEvents that have been recorded into any of the command
-    buffer elements of the pname:pCommandBuffers member of any element of
-    pname:pSubmits, must: not reference any slink:VkEvent that is referenced
-    by any of those commands in a command buffer that has been submitted to
-    another queue and is still in the _pending state_
-  * [[VUID-vkQueueSubmit-pWaitDstStageMask-00066]]
-    Any stage flag included in any element of the pname:pWaitDstStageMask
-    member of any element of pname:pSubmits must: be a pipeline stage
-    supported by one of the capabilities of pname:queue, as specified in the
-    <<synchronization-pipeline-stages-supported, table of supported pipeline
-    stages>>
-  * [[VUID-vkQueueSubmit-pSignalSemaphores-00067]]
-    Each binary semaphore element of the pname:pSignalSemaphores member of
-    any element of pname:pSubmits must: be unsignaled when the semaphore
-    signal operation it defines is executed on the device
-  * [[VUID-vkQueueSubmit-pWaitSemaphores-00068]]
-    When a semaphore wait operation referring to a binary semaphore defined
-    by any element of the pname:pWaitSemaphores member of any element of
-    pname:pSubmits executes on pname:queue, there must: be no other queues
-    waiting on the same semaphore
-ifndef::VK_KHR_timeline_semaphore[]
-  * [[VUID-vkQueueSubmit-pWaitSemaphores-00069]]
-    All elements of the pname:pWaitSemaphores member of all elements of
-    pname:pSubmits must: be semaphores that are signaled, or have
-    <<synchronization-semaphores-signaling, semaphore signal operations>>
-    previously submitted for execution
-endif::VK_KHR_timeline_semaphore[]
-ifdef::VK_VERSION_1_2,VK_KHR_timeline_semaphore[]
-  * [[VUID-vkQueueSubmit-pWaitSemaphores-03238]]
-    All elements of the pname:pWaitSemaphores member of all elements of
-    pname:pSubmits created with a elink:VkSemaphoreType of
-    ename:VK_SEMAPHORE_TYPE_BINARY must: reference a semaphore signal
-    operation that has been submitted for execution and any semaphore signal
-    operations on which it depends (if any) must: have also been submitted
-    for execution
-endif::VK_VERSION_1_2,VK_KHR_timeline_semaphore[]
-  * [[VUID-vkQueueSubmit-pCommandBuffers-00070]]
-    Each element of the pname:pCommandBuffers member of each element of
-    pname:pSubmits must: be in the <<commandbuffers-lifecycle, pending or
-    executable state>>
-  * [[VUID-vkQueueSubmit-pCommandBuffers-00071]]
-    If any element of the pname:pCommandBuffers member of any element of
-    pname:pSubmits was not recorded with the
-    ename:VK_COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT, it must: not be in
-    the <<commandbuffers-lifecycle, pending state>>
-  * [[VUID-vkQueueSubmit-pCommandBuffers-00072]]
-    Any <<commandbuffers-secondary, secondary command buffers recorded>>
-    into any element of the pname:pCommandBuffers member of any element of
-    pname:pSubmits must: be in the <<commandbuffers-lifecycle, pending or
-    executable state>>
-  * [[VUID-vkQueueSubmit-pCommandBuffers-00073]]
-    If any <<commandbuffers-secondary, secondary command buffers recorded>>
-    into any element of the pname:pCommandBuffers member of any element of
-    pname:pSubmits was not recorded with the
-    ename:VK_COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT, it must: not be in
-    the <<commandbuffers-lifecycle, pending state>>
-  * [[VUID-vkQueueSubmit-pCommandBuffers-00074]]
-    Each element of the pname:pCommandBuffers member of each element of
-    pname:pSubmits must: have been allocated from a sname:VkCommandPool that
-    was created for the same queue family pname:queue belongs to
-  * [[VUID-vkQueueSubmit-pSubmits-02207]]
-    If any element of pname:pSubmits->pCommandBuffers includes a
-    <<synchronization-queue-transfers-acquire, Queue Family Transfer Acquire
-    Operation>>, there must: exist a previously submitted
-    <<synchronization-queue-transfers-release, Queue Family Transfer Release
-    Operation>> on a queue in the queue family identified by the acquire
-    operation, with parameters matching the acquire operation as defined in
-    the definition of such <<synchronization-queue-transfers-acquire,
-    acquire operations>>, and which happens-before the acquire operation
-ifdef::VK_KHR_performance_query[]
-  * [[VUID-vkQueueSubmit-pCommandBuffers-03220]]
-    If a command recorded into any element of pname:pCommandBuffers was a
-    flink:vkCmdBeginQuery whose pname:queryPool was created with a
-    pname:queryType of ename:VK_QUERY_TYPE_PERFORMANCE_QUERY_KHR, the
-    <<profiling-lock, profiling lock>> must: have been held continuously on
-    the sname:VkDevice that pname:queue was retrieved from, throughout
-    recording of those command buffers
-endif::VK_KHR_performance_query[]
-  * [[VUID-vkQueueSubmit-pSubmits-02808]]
-    Any resource created with ename:VK_SHARING_MODE_EXCLUSIVE that is read
-    by an operation specified by pname:pSubmits must: not be owned by any
-    queue family other than the one which pname:queue belongs to, at the
-    time it is executed
-  * [[VUID-vkQueueSubmit-pSubmits-04626]]
-    Any resource created with ename:VK_SHARING_MODE_CONCURRENT that is
-    accessed by an operation specified by pname:pSubmits must: have included
-    the queue family of pname:queue at resource creation time
-ifdef::VK_VERSION_1_1[]
-  * [[VUID-vkQueueSubmit-queue-06448]]
-    If pname:queue was not created with
-    ename:VK_DEVICE_QUEUE_CREATE_PROTECTED_BIT, there must: be no element of
-    pname:pSubmits that includes an slink:VkProtectedSubmitInfo structure in
-    its pname:pNext chain with pname:protectedSubmit equal to ename:VK_TRUE
-endif::VK_VERSION_1_1[]
-****
-
-include::{generated}/validity/protos/vkQueueSubmit.txt[]
---
-
-[open,refpage='VkSubmitInfo',desc='Structure specifying a queue submit operation',type='structs']
---
-The sname:VkSubmitInfo structure is defined as:
-
-include::{generated}/api/structs/VkSubmitInfo.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:waitSemaphoreCount is the number of semaphores upon which to wait
-    before executing the command buffers for the batch.
-  * pname:pWaitSemaphores is a pointer to an array of slink:VkSemaphore
-    handles upon which to wait before the command buffers for this batch
-    begin execution.
-    If semaphores to wait on are provided, they define a
-    <<synchronization-semaphores-waiting, semaphore wait operation>>.
-  * pname:pWaitDstStageMask is a pointer to an array of pipeline stages at
-    which each corresponding semaphore wait will occur.
-  * pname:commandBufferCount is the number of command buffers to execute in
-    the batch.
-  * pname:pCommandBuffers is a pointer to an array of slink:VkCommandBuffer
-    handles to execute in the batch.
-  * pname:signalSemaphoreCount is the number of semaphores to be signaled
-    once the commands specified in pname:pCommandBuffers have completed
-    execution.
-  * pname:pSignalSemaphores is a pointer to an array of slink:VkSemaphore
-    handles which will be signaled when the command buffers for this batch
-    have completed execution.
-    If semaphores to be signaled are provided, they define a
-    <<synchronization-semaphores-signaling, semaphore signal operation>>.
-
-The order that command buffers appear in pname:pCommandBuffers is used to
-determine <<synchronization-submission-order, submission order>>, and thus
-all the <<synchronization-implicit, implicit ordering guarantees>> that
-respect it.
-Other than these implicit ordering guarantees and any <<synchronization,
-explicit synchronization primitives>>, these command buffers may: overlap or
-otherwise execute out of order.
-
-
-.Valid Usage
-****
-  * [[VUID-VkSubmitInfo-pCommandBuffers-00075]]
-    Each element of pname:pCommandBuffers must: not have been allocated with
-    ename:VK_COMMAND_BUFFER_LEVEL_SECONDARY
-  * [[VUID-VkSubmitInfo-pWaitDstStageMask-00076]]
-    If the <<features-geometryShader,geometry shaders>> feature is not
-    enabled, each element of pname:pWaitDstStageMask must: not contain
-    ename:VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT
-  * [[VUID-VkSubmitInfo-pWaitDstStageMask-00077]]
-    If the <<features-tessellationShader,tessellation shaders>> feature is
-    not enabled, each element of pname:pWaitDstStageMask must: not contain
-    ename:VK_PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT or
-    ename:VK_PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT
-  * [[VUID-VkSubmitInfo-pWaitDstStageMask-00078]]
-    Each element of pname:pWaitDstStageMask must: not include
-    ename:VK_PIPELINE_STAGE_HOST_BIT
-ifdef::VK_VERSION_1_2,VK_KHR_timeline_semaphore[]
-  * [[VUID-VkSubmitInfo-pWaitSemaphores-03239]]
-    If any element of pname:pWaitSemaphores or pname:pSignalSemaphores was
-    created with a elink:VkSemaphoreType of
-    ename:VK_SEMAPHORE_TYPE_TIMELINE, then the pname:pNext chain must:
-    include a slink:VkTimelineSemaphoreSubmitInfo structure
-  * [[VUID-VkSubmitInfo-pNext-03240]]
-    If the pname:pNext chain of this structure includes a
-    slink:VkTimelineSemaphoreSubmitInfo structure and any element of
-    pname:pWaitSemaphores was created with a elink:VkSemaphoreType of
-    ename:VK_SEMAPHORE_TYPE_TIMELINE, then its pname:waitSemaphoreValueCount
-    member must: equal pname:waitSemaphoreCount
-  * [[VUID-VkSubmitInfo-pNext-03241]]
-    If the pname:pNext chain of this structure includes a
-    slink:VkTimelineSemaphoreSubmitInfo structure and any element of
-    pname:pSignalSemaphores was created with a elink:VkSemaphoreType of
-    ename:VK_SEMAPHORE_TYPE_TIMELINE, then its
-    pname:signalSemaphoreValueCount member must: equal
-    pname:signalSemaphoreCount
-  * [[VUID-VkSubmitInfo-pSignalSemaphores-03242]]
-    For each element of pname:pSignalSemaphores created with a
-    elink:VkSemaphoreType of ename:VK_SEMAPHORE_TYPE_TIMELINE the
-    corresponding element of
-    slink:VkTimelineSemaphoreSubmitInfo::pname:pSignalSemaphoreValues must:
-    have a value greater than the current value of the semaphore when the
-    <<synchronization-semaphores-signaling,semaphore signal operation>> is
-    executed
-  * [[VUID-VkSubmitInfo-pWaitSemaphores-03243]]
-    For each element of pname:pWaitSemaphores created with a
-    elink:VkSemaphoreType of ename:VK_SEMAPHORE_TYPE_TIMELINE the
-    corresponding element of
-    slink:VkTimelineSemaphoreSubmitInfo::pname:pWaitSemaphoreValues must:
-    have a value which does not differ from the current value of the
-    semaphore or the value of any outstanding semaphore wait or signal
-    operation on that semaphore by more than
-    <<limits-maxTimelineSemaphoreValueDifference,
-    pname:maxTimelineSemaphoreValueDifference>>
-  * [[VUID-VkSubmitInfo-pSignalSemaphores-03244]]
-    For each element of pname:pSignalSemaphores created with a
-    elink:VkSemaphoreType of ename:VK_SEMAPHORE_TYPE_TIMELINE the
-    corresponding element of
-    slink:VkTimelineSemaphoreSubmitInfo::pname:pSignalSemaphoreValues must:
-    have a value which does not differ from the current value of the
-    semaphore or the value of any outstanding semaphore wait or signal
-    operation on that semaphore by more than
-    <<limits-maxTimelineSemaphoreValueDifference,
-    pname:maxTimelineSemaphoreValueDifference>>
-endif::VK_VERSION_1_2,VK_KHR_timeline_semaphore[]
-ifdef::VK_NV_mesh_shader[]
-  * [[VUID-VkSubmitInfo-pWaitDstStageMask-02089]]
-    If the <<features-meshShader,mesh shaders>> feature is not enabled, each
-    element of pname:pWaitDstStageMask must: not contain
-    ename:VK_PIPELINE_STAGE_MESH_SHADER_BIT_NV
-  * [[VUID-VkSubmitInfo-pWaitDstStageMask-02090]]
-    If the <<features-taskShader,task shaders>> feature is not enabled, each
-    element of pname:pWaitDstStageMask must: not contain
-    ename:VK_PIPELINE_STAGE_TASK_SHADER_BIT_NV
-endif::VK_NV_mesh_shader[]
-ifdef::VK_VERSION_1_1[]
-  * [[VUID-VkSubmitInfo-pNext-04120]]
-    If the pname:pNext chain of this structure does not include a
-    sname:VkProtectedSubmitInfo structure with pname:protectedSubmit set to
-    ename:VK_TRUE, then each element of the pname:pCommandBuffers array
-    must: be an unprotected command buffer
-  * [[VUID-VkSubmitInfo-pNext-04148]]
-    If the pname:pNext chain of this structure includes a
-    sname:VkProtectedSubmitInfo structure with pname:protectedSubmit set to
-    ename:VK_TRUE, then each element of the pname:pCommandBuffers array
-    must: be a protected command buffer
-endif::VK_VERSION_1_1[]
-ifdef::VK_KHR_dynamic_rendering[]
-  * [[VUID-VkSubmitInfo-pCommandBuffers-06193]]
-    If pname:pCommandBuffers contains any <<renderpass-suspension,resumed
-    render pass instances>>, they must: be suspended by a render pass
-    instance earlier in submission order within pname:pCommandBuffers
-  * [[VUID-VkSubmitInfo-pCommandBuffers-06014]]
-    If pname:pCommandBuffers contains any <<renderpass-suspension,suspended
-    render pass instances>>, they must: be resumed by a render pass instance
-    later in submission order within pname:pCommandBuffers
-  * [[VUID-VkSubmitInfo-pCommandBuffers-06015]]
-    If pname:pCommandBuffers contains any <<renderpass-suspension,suspended
-    render pass instances>>, there must: be no action or synchronization
-    commands between that render pass instance and the render pass instance
-    that resumes it
-  * [[VUID-VkSubmitInfo-pCommandBuffers-06016]]
-    If pname:pCommandBuffers contains any <<renderpass-suspension,suspended
-    render pass instances>>, there must: be no render pass instances between
-    that render pass instance and the render pass instance that resumes it
-ifdef::VK_EXT_sample_locations[]
-  * [[VUID-VkSubmitInfo-variableSampleLocations-06017]]
-    If the <<limits-variableSampleLocations, pname:variableSampleLocations>>
-    limit is not supported, and any element of pname:pCommandBuffers
-    contains any <<renderpass-suspension,suspended render pass instances>>,
-    where a graphics pipeline has been bound, any pipelines bound in the
-    render pass instance that resumes it, or any subsequent render pass
-    instances that resume from that one and so on, must: use the same sample
-    locations
-endif::VK_EXT_sample_locations[]
-endif::VK_KHR_dynamic_rendering[]
-****
-
-include::{generated}/validity/structs/VkSubmitInfo.txt[]
---
-
-ifdef::VK_VERSION_1_2,VK_KHR_timeline_semaphore[]
-[open,refpage='VkTimelineSemaphoreSubmitInfo',desc='Structure specifying signal and wait values for timeline semaphores',type='structs',alias='VkTimelineSemaphoreSubmitInfoKHR']
---
-To specify the values to use when waiting for and signaling semaphores
-created with a elink:VkSemaphoreType of ename:VK_SEMAPHORE_TYPE_TIMELINE,
-add a slink:VkTimelineSemaphoreSubmitInfo structure to the pname:pNext chain
-of the slink:VkSubmitInfo structure when using flink:vkQueueSubmit or the
-slink:VkBindSparseInfo structure when using flink:vkQueueBindSparse.
-The sname:VkTimelineSemaphoreSubmitInfo structure is defined as:
-
-include::{generated}/api/structs/VkTimelineSemaphoreSubmitInfo.txt[]
-
-ifdef::VK_KHR_timeline_semaphore[]
-or the equivalent
-
-include::{generated}/api/structs/VkTimelineSemaphoreSubmitInfoKHR.txt[]
-endif::VK_KHR_timeline_semaphore[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:waitSemaphoreValueCount is the number of semaphore wait values
-    specified in pname:pWaitSemaphoreValues.
-  * pname:pWaitSemaphoreValues is a pointer to an array of
-    pname:waitSemaphoreValueCount values for the corresponding semaphores in
-    slink:VkSubmitInfo::pname:pWaitSemaphores to wait for.
-  * pname:signalSemaphoreValueCount is the number of semaphore signal values
-    specified in pname:pSignalSemaphoreValues.
-  * pname:pSignalSemaphoreValues is a pointer to an array
-    pname:signalSemaphoreValueCount values for the corresponding semaphores
-    in slink:VkSubmitInfo::pname:pSignalSemaphores to set when signaled.
-
-If the semaphore in slink:VkSubmitInfo::pname:pWaitSemaphores or
-slink:VkSubmitInfo::pname:pSignalSemaphores corresponding to an entry in
-pname:pWaitSemaphoreValues or pname:pSignalSemaphoreValues respectively was
-not created with a elink:VkSemaphoreType of
-ename:VK_SEMAPHORE_TYPE_TIMELINE, the implementation must: ignore the value
-in the pname:pWaitSemaphoreValues or pname:pSignalSemaphoreValues entry.
-
-include::{generated}/validity/structs/VkTimelineSemaphoreSubmitInfo.txt[]
---
-endif::VK_VERSION_1_2,VK_KHR_timeline_semaphore[]
-
-ifdef::VK_KHR_external_semaphore_win32[]
-[open,refpage='VkD3D12FenceSubmitInfoKHR',desc='Structure specifying values for Direct3D 12 fence-backed semaphores',type='structs']
---
-To specify the values to use when waiting for and signaling semaphores whose
-<<synchronization-semaphores-importing,current payload>> refers to a
-Direct3D 12 fence, add a slink:VkD3D12FenceSubmitInfoKHR structure to the
-pname:pNext chain of the slink:VkSubmitInfo structure.
-The sname:VkD3D12FenceSubmitInfoKHR structure is defined as:
-
-include::{generated}/api/structs/VkD3D12FenceSubmitInfoKHR.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:waitSemaphoreValuesCount is the number of semaphore wait values
-    specified in pname:pWaitSemaphoreValues.
-  * pname:pWaitSemaphoreValues is a pointer to an array of
-    pname:waitSemaphoreValuesCount values for the corresponding semaphores
-    in slink:VkSubmitInfo::pname:pWaitSemaphores to wait for.
-  * pname:signalSemaphoreValuesCount is the number of semaphore signal
-    values specified in pname:pSignalSemaphoreValues.
-  * pname:pSignalSemaphoreValues is a pointer to an array of
-    pname:signalSemaphoreValuesCount values for the corresponding semaphores
-    in slink:VkSubmitInfo::pname:pSignalSemaphores to set when signaled.
-
-If the semaphore in slink:VkSubmitInfo::pname:pWaitSemaphores or
-slink:VkSubmitInfo::pname:pSignalSemaphores corresponding to an entry in
-pname:pWaitSemaphoreValues or pname:pSignalSemaphoreValues respectively does
-not currently have a <<synchronization-semaphores-payloads, payload>>
-referring to a Direct3D 12 fence, the implementation must: ignore the value
-in the pname:pWaitSemaphoreValues or pname:pSignalSemaphoreValues entry.
-
-ifdef::VK_VERSION_1_2,VK_KHR_timeline_semaphore[]
-[NOTE]
-.Note
-====
-As the introduction of the external semaphore handle type
-ename:VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_D3D12_FENCE_BIT predates that of
-timeline semaphores, support for importing semaphore payloads from external
-handles of that type into semaphores created (implicitly or explicitly) with
-a elink:VkSemaphoreType of ename:VK_SEMAPHORE_TYPE_BINARY is preserved for
-backwards compatibility.
-However, applications should: prefer importing such handle types into
-semaphores created with a elink:VkSemaphoreType of
-ename:VK_SEMAPHORE_TYPE_TIMELINE, and use the
-slink:VkTimelineSemaphoreSubmitInfo structure instead of the
-sname:VkD3D12FenceSubmitInfoKHR structure to specify the values to use when
-waiting for and signaling such semaphores.
-====
-endif::VK_VERSION_1_2,VK_KHR_timeline_semaphore[]
-
-.Valid Usage
-****
-  * [[VUID-VkD3D12FenceSubmitInfoKHR-waitSemaphoreValuesCount-00079]]
-    pname:waitSemaphoreValuesCount must: be the same value as
-    sname:VkSubmitInfo::pname:waitSemaphoreCount, where sname:VkSubmitInfo
-    is in the pname:pNext chain of this sname:VkD3D12FenceSubmitInfoKHR
-    structure
-  * [[VUID-VkD3D12FenceSubmitInfoKHR-signalSemaphoreValuesCount-00080]]
-    pname:signalSemaphoreValuesCount must: be the same value as
-    sname:VkSubmitInfo::pname:signalSemaphoreCount, where sname:VkSubmitInfo
-    is in the pname:pNext chain of this sname:VkD3D12FenceSubmitInfoKHR
-    structure
-****
-
-include::{generated}/validity/structs/VkD3D12FenceSubmitInfoKHR.txt[]
---
-endif::VK_KHR_external_semaphore_win32[]
-
-ifdef::VK_KHR_win32_keyed_mutex[]
-[open,refpage='VkWin32KeyedMutexAcquireReleaseInfoKHR',desc='Use the Windows keyed mutex mechanism to synchronize work',type='structs']
---
-When submitting work that operates on memory imported from a Direct3D 11
-resource to a queue, the keyed mutex mechanism may: be used in addition to
-Vulkan semaphores to synchronize the work.
-Keyed mutexes are a property of a properly created shareable Direct3D 11
-resource.
-They can: only be used if the imported resource was created with the
-etext:D3D11_RESOURCE_MISC_SHARED_KEYEDMUTEX flag.
-
-To acquire keyed mutexes before submitted work and/or release them after,
-add a slink:VkWin32KeyedMutexAcquireReleaseInfoKHR structure to the
-pname:pNext chain of the slink:VkSubmitInfo structure.
-
-The sname:VkWin32KeyedMutexAcquireReleaseInfoKHR structure is defined as:
-
-include::{generated}/api/structs/VkWin32KeyedMutexAcquireReleaseInfoKHR.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:acquireCount is the number of entries in the pname:pAcquireSyncs,
-    pname:pAcquireKeys, and pname:pAcquireTimeouts arrays.
-  * pname:pAcquireSyncs is a pointer to an array of slink:VkDeviceMemory
-    objects which were imported from Direct3D 11 resources.
-  * pname:pAcquireKeys is a pointer to an array of mutex key values to wait
-    for prior to beginning the submitted work.
-    Entries refer to the keyed mutex associated with the corresponding
-    entries in pname:pAcquireSyncs.
-  * pname:pAcquireTimeouts is a pointer to an array of timeout values, in
-    millisecond units, for each acquire specified in pname:pAcquireKeys.
-  * pname:releaseCount is the number of entries in the pname:pReleaseSyncs
-    and pname:pReleaseKeys arrays.
-  * pname:pReleaseSyncs is a pointer to an array of slink:VkDeviceMemory
-    objects which were imported from Direct3D 11 resources.
-  * pname:pReleaseKeys is a pointer to an array of mutex key values to set
-    when the submitted work has completed.
-    Entries refer to the keyed mutex associated with the corresponding
-    entries in pname:pReleaseSyncs.
-
-.Valid Usage
-****
-  * [[VUID-VkWin32KeyedMutexAcquireReleaseInfoKHR-pAcquireSyncs-00081]]
-    Each member of pname:pAcquireSyncs and pname:pReleaseSyncs must: be a
-    device memory object imported by setting
-    slink:VkImportMemoryWin32HandleInfoKHR::pname:handleType to
-    ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_BIT or
-    ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_KMT_BIT
-****
-
-include::{generated}/validity/structs/VkWin32KeyedMutexAcquireReleaseInfoKHR.txt[]
---
-endif::VK_KHR_win32_keyed_mutex[]
-
-ifdef::VK_NV_win32_keyed_mutex[]
-include::VK_NV_win32_keyed_mutex/keyed_mutex_submit.txt[]
-endif::VK_NV_win32_keyed_mutex[]
-
-ifdef::VK_VERSION_1_1[]
-[open,refpage='VkProtectedSubmitInfo',desc='Structure indicating whether the submission is protected',type='structs']
---
-If the pname:pNext chain of slink:VkSubmitInfo includes a
-sname:VkProtectedSubmitInfo structure, then the structure indicates whether
-the batch is protected.
-The sname:VkProtectedSubmitInfo structure is defined as:
-
-include::{generated}/api/structs/VkProtectedSubmitInfo.txt[]
-
-  * pname:protectedSubmit specifies whether the batch is protected.
-    If pname:protectedSubmit is ename:VK_TRUE, the batch is protected.
-    If pname:protectedSubmit is ename:VK_FALSE, the batch is unprotected.
-    If the sname:VkSubmitInfo::pname:pNext chain does not include this
-    structure, the batch is unprotected.
-
-include::{generated}/validity/structs/VkProtectedSubmitInfo.txt[]
---
-endif::VK_VERSION_1_1[]
-
-ifdef::VK_VERSION_1_1,VK_KHR_device_group[]
-[open,refpage='VkDeviceGroupSubmitInfo',desc='Structure indicating which physical devices execute semaphore operations and command buffers',type='structs']
---
-
-If the pname:pNext chain of slink:VkSubmitInfo includes a
-sname:VkDeviceGroupSubmitInfo structure, then that structure includes device
-indices and masks specifying which physical devices execute semaphore
-operations and command buffers.
-
-The sname:VkDeviceGroupSubmitInfo structure is defined as:
-
-include::{generated}/api/structs/VkDeviceGroupSubmitInfo.txt[]
-
-ifdef::VK_KHR_device_group[]
-or the equivalent
-
-include::{generated}/api/structs/VkDeviceGroupSubmitInfoKHR.txt[]
-endif::VK_KHR_device_group[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:waitSemaphoreCount is the number of elements in the
-    pname:pWaitSemaphoreDeviceIndices array.
-  * pname:pWaitSemaphoreDeviceIndices is a pointer to an array of
-    pname:waitSemaphoreCount device indices indicating which physical device
-    executes the semaphore wait operation in the corresponding element of
-    slink:VkSubmitInfo::pname:pWaitSemaphores.
-  * pname:commandBufferCount is the number of elements in the
-    pname:pCommandBufferDeviceMasks array.
-  * pname:pCommandBufferDeviceMasks is a pointer to an array of
-    pname:commandBufferCount device masks indicating which physical devices
-    execute the command buffer in the corresponding element of
-    slink:VkSubmitInfo::pname:pCommandBuffers.
-    A physical device executes the command buffer if the corresponding bit
-    is set in the mask.
-  * pname:signalSemaphoreCount is the number of elements in the
-    pname:pSignalSemaphoreDeviceIndices array.
-  * pname:pSignalSemaphoreDeviceIndices is a pointer to an array of
-    pname:signalSemaphoreCount device indices indicating which physical
-    device executes the semaphore signal operation in the corresponding
-    element of slink:VkSubmitInfo::pname:pSignalSemaphores.
-
-If this structure is not present, semaphore operations and command buffers
-execute on device index zero.
-
-.Valid Usage
-****
-  * [[VUID-VkDeviceGroupSubmitInfo-waitSemaphoreCount-00082]]
-    pname:waitSemaphoreCount must: equal
-    slink:VkSubmitInfo::pname:waitSemaphoreCount
-  * [[VUID-VkDeviceGroupSubmitInfo-commandBufferCount-00083]]
-    pname:commandBufferCount must: equal
-    slink:VkSubmitInfo::pname:commandBufferCount
-  * [[VUID-VkDeviceGroupSubmitInfo-signalSemaphoreCount-00084]]
-    pname:signalSemaphoreCount must: equal
-    slink:VkSubmitInfo::pname:signalSemaphoreCount
-  * [[VUID-VkDeviceGroupSubmitInfo-pWaitSemaphoreDeviceIndices-00085]]
-    All elements of pname:pWaitSemaphoreDeviceIndices and
-    pname:pSignalSemaphoreDeviceIndices must: be valid device indices
-  * [[VUID-VkDeviceGroupSubmitInfo-pCommandBufferDeviceMasks-00086]]
-    All elements of pname:pCommandBufferDeviceMasks must: be valid device
-    masks
-****
-
-include::{generated}/validity/structs/VkDeviceGroupSubmitInfo.txt[]
---
-endif::VK_VERSION_1_1,VK_KHR_device_group[]
-
-ifdef::VK_KHR_performance_query[]
-If the pname:pNext chain of slink:VkSubmitInfo includes a
-slink:VkPerformanceQuerySubmitInfoKHR structure, then the structure
-indicates which counter pass is active for the batch in that submit.
-
-[open,refpage='VkPerformanceQuerySubmitInfoKHR',desc='Structure indicating which counter pass index is active for performance queries',type='structs']
---
-The sname:VkPerformanceQuerySubmitInfoKHR structure is defined as:
-
-include::{generated}/api/structs/VkPerformanceQuerySubmitInfoKHR.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:counterPassIndex specifies which counter pass index is active.
-
-If the sname:VkSubmitInfo::pname:pNext chain does not include this
-structure, the batch defaults to use counter pass index 0.
-
-.Valid Usage
-****
-  * [[VUID-VkPerformanceQuerySubmitInfoKHR-counterPassIndex-03221]]
-    pname:counterPassIndex must: be less than the number of counter passes
-    required by any queries within the batch.
-    The required number of counter passes for a performance query is
-    obtained by calling
-    flink:vkGetPhysicalDeviceQueueFamilyPerformanceQueryPassesKHR
-****
-
-include::{generated}/validity/structs/VkPerformanceQuerySubmitInfoKHR.txt[]
---
-endif::VK_KHR_performance_query[]
-
-
-[[commandbuffers-submission-progress]]
-== Queue Forward Progress
-
-When using binary semaphores, the application must: ensure that command
-buffer submissions will be able to complete without any subsequent
-operations by the application on any queue.
-After any call to fname:vkQueueSubmit (or other queue operation), for every
-queued wait on a semaphore
-ifdef::VK_VERSION_1_2,VK_KHR_timeline_semaphore[]
-created with a elink:VkSemaphoreType of ename:VK_SEMAPHORE_TYPE_BINARY
-endif::VK_VERSION_1_2,VK_KHR_timeline_semaphore[]
-there must: be a prior signal of that semaphore that will not be consumed by
-a different wait on the semaphore.
-
-ifdef::VK_VERSION_1_2,VK_KHR_timeline_semaphore[]
-When using timeline semaphores, wait-before-signal behavior is well-defined
-and applications can: submit work via fname:vkQueueSubmit which defines a
-<<synchronization-semaphores-waiting, timeline semaphore wait operation>>
-before submitting a corresponding <<synchronization-semaphores-signaling,
-semaphore signal operation>>.
-For each <<synchronization-semaphores-waiting, timeline semaphore wait
-operation>> defined by a call to fname:vkQueueSubmit, the application must:
-ensure that a corresponding <<synchronization-semaphores-signaling,
-semaphore signal operation>> is executed before forward progress can be
-made.
-endif::VK_VERSION_1_2,VK_KHR_timeline_semaphore[]
-
-Command buffers in the submission can: include flink:vkCmdWaitEvents
-commands that wait on events that will not be signaled by earlier commands
-in the queue.
-Such events must: be signaled by the application using flink:vkSetEvent, and
-the fname:vkCmdWaitEvents commands that wait upon them must: not be inside a
-render pass instance.
-The event must: be set before the flink:vkCmdWaitEvents command is executed.
-
-[NOTE]
-.Note
-====
-Implementations may have some tolerance for waiting on events to be set, but
-this is defined outside of the scope of Vulkan.
-====
-
-
-[[commandbuffers-secondary]]
-== Secondary Command Buffer Execution
-
-[open,refpage='vkCmdExecuteCommands',desc='Execute a secondary command buffer from a primary command buffer',type='protos']
---
-A secondary command buffer must: not be directly submitted to a queue.
-Instead, secondary command buffers are recorded to execute as part of a
-primary command buffer with the command:
-
-include::{generated}/api/protos/vkCmdExecuteCommands.txt[]
-
-  * pname:commandBuffer is a handle to a primary command buffer that the
-    secondary command buffers are executed in.
-  * pname:commandBufferCount is the length of the pname:pCommandBuffers
-    array.
-  * pname:pCommandBuffers is a pointer to an array of
-    pname:commandBufferCount secondary command buffer handles, which are
-    recorded to execute in the primary command buffer in the order they are
-    listed in the array.
-
-If any element of pname:pCommandBuffers was not recorded with the
-ename:VK_COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT flag, and it was recorded
-into any other primary command buffer which is currently in the
-<<commandbuffers-lifecycle, executable or recording state>>, that primary
-command buffer becomes <<commandbuffers-lifecycle, invalid>>.
-
-.Valid Usage
-****
-  * [[VUID-vkCmdExecuteCommands-pCommandBuffers-00088]]
-    Each element of pname:pCommandBuffers must: have been allocated with a
-    pname:level of ename:VK_COMMAND_BUFFER_LEVEL_SECONDARY
-  * [[VUID-vkCmdExecuteCommands-pCommandBuffers-00089]]
-    Each element of pname:pCommandBuffers must: be in the
-    <<commandbuffers-lifecycle, pending or executable state>>
-  * [[VUID-vkCmdExecuteCommands-pCommandBuffers-00091]]
-    If any element of pname:pCommandBuffers was not recorded with the
-    ename:VK_COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT flag, it must: not be
-    in the <<commandbuffers-lifecycle, pending state>>
-  * [[VUID-vkCmdExecuteCommands-pCommandBuffers-00092]]
-    If any element of pname:pCommandBuffers was not recorded with the
-    ename:VK_COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT flag, it must: not
-    have already been recorded to pname:commandBuffer
-  * [[VUID-vkCmdExecuteCommands-pCommandBuffers-00093]]
-    If any element of pname:pCommandBuffers was not recorded with the
-    ename:VK_COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT flag, it must: not
-    appear more than once in pname:pCommandBuffers
-  * [[VUID-vkCmdExecuteCommands-pCommandBuffers-00094]]
-    Each element of pname:pCommandBuffers must: have been allocated from a
-    sname:VkCommandPool that was created for the same queue family as the
-    sname:VkCommandPool from which pname:commandBuffer was allocated
-  * [[VUID-vkCmdExecuteCommands-pCommandBuffers-00096]]
-    If fname:vkCmdExecuteCommands is being called within a render pass
-    instance, each element of pname:pCommandBuffers must: have been recorded
-    with the ename:VK_COMMAND_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT
-  * [[VUID-vkCmdExecuteCommands-pCommandBuffers-00099]]
-    If fname:vkCmdExecuteCommands is being called within a render pass
-    instance, and any element of pname:pCommandBuffers was recorded with
-    slink:VkCommandBufferInheritanceInfo::pname:framebuffer not equal to
-    dlink:VK_NULL_HANDLE, that sname:VkFramebuffer must: match the
-    sname:VkFramebuffer used in the current render pass instance
-  * [[VUID-vkCmdExecuteCommands-contents-06018]]
-    If fname:vkCmdExecuteCommands is being called within a render pass
-    instance begun with flink:vkCmdBeginRenderPass, its pname:contents
-    parameter must: have been set to
-    ename:VK_SUBPASS_CONTENTS_SECONDARY_COMMAND_BUFFERS
-  * [[VUID-vkCmdExecuteCommands-pCommandBuffers-06019]]
-    If fname:vkCmdExecuteCommands is being called within a render pass
-    instance begun with flink:vkCmdBeginRenderPass, each element of
-    pname:pCommandBuffers must: have been recorded with
-    slink:VkCommandBufferInheritanceInfo::pname:subpass set to the index of
-    the subpass which the given command buffer will be executed in
-  * [[VUID-vkCmdExecuteCommands-pBeginInfo-06020]]
-    If fname:vkCmdExecuteCommands is being called within a render pass
-    instance begun with flink:vkCmdBeginRenderPass, the render passes
-    specified in the pname:pBeginInfo->pInheritanceInfo->renderPass members
-    of the flink:vkBeginCommandBuffer commands used to begin recording each
-    element of pname:pCommandBuffers must: be
-    <<renderpass-compatibility,compatible>> with the current render pass
-ifndef::VK_KHR_dynamic_rendering[]
-  * [[VUID-vkCmdExecuteCommands-contents-00095]]
-    If fname:vkCmdExecuteCommands is being called within a render pass
-    instance, that render pass instance must: have been begun with the
-    pname:contents parameter of fname:vkCmdBeginRenderPass set to
-    ename:VK_SUBPASS_CONTENTS_SECONDARY_COMMAND_BUFFERS
-  * [[VUID-vkCmdExecuteCommands-pCommandBuffers-00097]]
-    If fname:vkCmdExecuteCommands is being called within a render pass
-    instance, each element of pname:pCommandBuffers must: have been recorded
-    with sname:VkCommandBufferInheritanceInfo::pname:subpass set to the
-    index of the subpass which the given command buffer will be executed in
-  * [[VUID-vkCmdExecuteCommands-pInheritanceInfo-00098]]
-    If fname:vkCmdExecuteCommands is being called within a render pass
-    instance, the render passes specified in the
-    pname:pBeginInfo->pInheritanceInfo->renderPass members of the
-    flink:vkBeginCommandBuffer commands used to begin recording each element
-    of pname:pCommandBuffers must: be
-    <<renderpass-compatibility,compatible>> with the current render pass
-endif::VK_KHR_dynamic_rendering[]
-ifdef::VK_QCOM_render_pass_transform[]
-  * [[VUID-vkCmdExecuteCommands-pNext-02865]]
-    If fname:vkCmdExecuteCommands is being called within a render pass
-    instance that included slink:VkRenderPassTransformBeginInfoQCOM in the
-    pname:pNext chain of slink:VkRenderPassBeginInfo, then each element of
-    pname:pCommandBuffers must: have been recorded with
-    slink:VkCommandBufferInheritanceRenderPassTransformInfoQCOM in the
-    pname:pNext chain of slink:VkCommandBufferBeginInfo
-  * [[VUID-vkCmdExecuteCommands-pNext-02866]]
-    If fname:vkCmdExecuteCommands is being called within a render pass
-    instance that included slink:VkRenderPassTransformBeginInfoQCOM in the
-    pname:pNext chain of slink:VkRenderPassBeginInfo, then each element of
-    pname:pCommandBuffers must: have been recorded with
-    slink:VkCommandBufferInheritanceRenderPassTransformInfoQCOM::pname:transform
-    identical to slink:VkRenderPassTransformBeginInfoQCOM::pname:transform
-  * [[VUID-vkCmdExecuteCommands-pNext-02867]]
-    If fname:vkCmdExecuteCommands is being called within a render pass
-    instance that included slink:VkRenderPassTransformBeginInfoQCOM in the
-    pname:pNext chain of slink:VkRenderPassBeginInfo, then each element of
-    pname:pCommandBuffers must: have been recorded with
-    slink:VkCommandBufferInheritanceRenderPassTransformInfoQCOM::pname:renderArea
-    identical to slink:VkRenderPassBeginInfo::pname:renderArea
-endif::VK_QCOM_render_pass_transform[]
-  * [[VUID-vkCmdExecuteCommands-pCommandBuffers-00100]]
-    If fname:vkCmdExecuteCommands is not being called within a render pass
-    instance, each element of pname:pCommandBuffers must: not have been
-    recorded with the ename:VK_COMMAND_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT
-  * [[VUID-vkCmdExecuteCommands-commandBuffer-00101]]
-    If the <<features-inheritedQueries,inherited queries>> feature is not
-    enabled, pname:commandBuffer must: not have any queries
-    <<queries-operation-active,active>>
-  * [[VUID-vkCmdExecuteCommands-commandBuffer-00102]]
-    If pname:commandBuffer has a ename:VK_QUERY_TYPE_OCCLUSION query
-    <<queries-operation-active,active>>, then each element of
-    pname:pCommandBuffers must: have been recorded with
-    sname:VkCommandBufferInheritanceInfo::pname:occlusionQueryEnable set to
-    ename:VK_TRUE
-  * [[VUID-vkCmdExecuteCommands-commandBuffer-00103]]
-    If pname:commandBuffer has a ename:VK_QUERY_TYPE_OCCLUSION query
-    <<queries-operation-active,active>>, then each element of
-    pname:pCommandBuffers must: have been recorded with
-    sname:VkCommandBufferInheritanceInfo::pname:queryFlags having all bits
-    set that are set for the query
-  * [[VUID-vkCmdExecuteCommands-commandBuffer-00104]]
-    If pname:commandBuffer has a ename:VK_QUERY_TYPE_PIPELINE_STATISTICS
-    query <<queries-operation-active,active>>, then each element of
-    pname:pCommandBuffers must: have been recorded with
-    sname:VkCommandBufferInheritanceInfo::pname:pipelineStatistics having
-    all bits set that are set in the sname:VkQueryPool the query uses
-  * [[VUID-vkCmdExecuteCommands-pCommandBuffers-00105]]
-    Each element of pname:pCommandBuffers must: not begin any query types
-    that are <<queries-operation-active,active>> in pname:commandBuffer
-ifdef::VK_VERSION_1_1[]
-  * [[VUID-vkCmdExecuteCommands-commandBuffer-01820]]
-    If pname:commandBuffer is a protected command buffer and
-    <<limits-protectedNoFault, pname:protectedNoFault>> is not supported,
-    each element of pname:pCommandBuffers must: be a protected command
-    buffer
-  * [[VUID-vkCmdExecuteCommands-commandBuffer-01821]]
-    If pname:commandBuffer is an unprotected command buffer and
-    <<limits-protectedNoFault, pname:protectedNoFault>> is not supported,
-    each element of pname:pCommandBuffers must: be an unprotected command
-    buffer
-endif::VK_VERSION_1_1[]
-ifdef::VK_EXT_transform_feedback[]
-  * [[VUID-vkCmdExecuteCommands-None-02286]]
-    This command must: not be recorded when transform feedback is active
-endif::VK_EXT_transform_feedback[]
-ifdef::VK_KHR_dynamic_rendering[]
-  * [[VUID-vkCmdExecuteCommands-pCommandBuffers-06021]]
-    If pname:pCommandBuffers contains any <<renderpass-suspension,suspended
-    render pass instances>>, there must: be no action or synchronization
-    commands between that render pass instance and any render pass instance
-    that resumes it
-  * [[VUID-vkCmdExecuteCommands-pCommandBuffers-06022]]
-    If pname:pCommandBuffers contains any <<renderpass-suspension,suspended
-    render pass instances>>, there must: be no render pass instances between
-    that render pass instance and any render pass instance that resumes it
-ifdef::VK_EXT_sample_locations[]
-  * [[VUID-vkCmdExecuteCommands-variableSampleLocations-06023]]
-    If the <<limits-variableSampleLocations, pname:variableSampleLocations>>
-    limit is not supported, and any element of pname:pCommandBuffers
-    contains any <<renderpass-suspension,suspended render pass instances>>,
-    where a graphics pipeline has been bound, any pipelines bound in the
-    render pass instance that resumes it, or any subsequent render pass
-    instances that resume from that one and so on, must: use the same sample
-    locations
-endif::VK_EXT_sample_locations[]
-  * [[VUID-vkCmdExecuteCommands-flags-06024]]
-    If fname:vkCmdExecuteCommands is being called within a render pass
-    instance begun with flink:vkCmdBeginRenderingKHR, its
-    slink:VkRenderingInfoKHR::pname:flags parameter must: have included
-    ename:VK_RENDERING_CONTENTS_SECONDARY_COMMAND_BUFFERS_BIT_KHR
-  * [[VUID-vkCmdExecuteCommands-pBeginInfo-06025]]
-    If fname:vkCmdExecuteCommands is being called within a render pass
-    instance begun with flink:vkCmdBeginRenderingKHR, the render passes
-    specified in the pname:pBeginInfo->pInheritanceInfo->renderPass members
-    of the flink:vkBeginCommandBuffer commands used to begin recording each
-    element of pname:pCommandBuffers must: be dlink:VK_NULL_HANDLE
-  * [[VUID-vkCmdExecuteCommands-flags-06026]]
-    If fname:vkCmdExecuteCommands is being called within a render pass
-    instance begun with flink:vkCmdBeginRenderingKHR, the pname:flags member
-    of the slink:VkCommandBufferInheritanceRenderingInfoKHR structure
-    included in the pname:pNext chain of
-    slink:VkCommandBufferBeginInfo::pname:pInheritanceInfo used to begin
-    recording each element of pname:pCommandBuffers must: be equal to the
-    slink:VkRenderingInfoKHR::pname:flags parameter to
-    flink:vkCmdBeginRenderingKHR, excluding
-    ename:VK_RENDERING_CONTENTS_SECONDARY_COMMAND_BUFFERS_BIT_KHR
-  * [[VUID-vkCmdExecuteCommands-colorAttachmentCount-06027]]
-    If fname:vkCmdExecuteCommands is being called within a render pass
-    instance begun with flink:vkCmdBeginRenderingKHR, the
-    pname:colorAttachmentCount member of the
-    slink:VkCommandBufferInheritanceRenderingInfoKHR structure included in
-    the pname:pNext chain of
-    slink:VkCommandBufferBeginInfo::pname:pInheritanceInfo used to begin
-    recording each element of pname:pCommandBuffers must: be equal to the
-    slink:VkRenderingInfoKHR::pname:colorAttachmentCount parameter to
-    flink:vkCmdBeginRenderingKHR
-  * [[VUID-vkCmdExecuteCommands-imageView-06028]]
-    If fname:vkCmdExecuteCommands is being called within a render pass
-    instance begun with flink:vkCmdBeginRenderingKHR, if the pname:imageView
-    member of an element of the
-    slink:VkRenderingInfoKHR::pname:pColorAttachments parameter to
-    flink:vkCmdBeginRenderingKHR is not dlink:VK_NULL_HANDLE, the
-    corresponding element of the pname:pColorAttachmentFormats member of the
-    slink:VkCommandBufferInheritanceRenderingInfoKHR structure included in
-    the pname:pNext chain of
-    slink:VkCommandBufferBeginInfo::pname:pInheritanceInfo used to begin
-    recording each element of pname:pCommandBuffers must: be equal to the
-    format used to create that image view
-  * [[VUID-vkCmdExecuteCommands-pDepthAttachment-06029]]
-    If fname:vkCmdExecuteCommands is being called within a render pass
-    instance begun with flink:vkCmdBeginRenderingKHR, if the
-    slink:VkRenderingInfoKHR::pname:pDepthAttachment->imageView parameter to
-    flink:vkCmdBeginRenderingKHR is not dlink:VK_NULL_HANDLE, the value of
-    the pname:depthAttachmentFormat member of the
-    slink:VkCommandBufferInheritanceRenderingInfoKHR structure included in
-    the pname:pNext chain of
-    slink:VkCommandBufferBeginInfo::pname:pInheritanceInfo used to begin
-    recording each element of pname:pCommandBuffers must: be equal to the
-    format used to create that image view
-  * [[VUID-vkCmdExecuteCommands-pStencilAttachment-06030]]
-    If fname:vkCmdExecuteCommands is being called within a render pass
-    instance begun with flink:vkCmdBeginRenderingKHR, if the
-    slink:VkRenderingInfoKHR::pname:pStencilAttachment->imageView parameter
-    to flink:vkCmdBeginRenderingKHR is not dlink:VK_NULL_HANDLE, the value
-    of the pname:stencilAttachmentFormat member of the
-    slink:VkCommandBufferInheritanceRenderingInfoKHR structure included in
-    the pname:pNext chain of
-    slink:VkCommandBufferBeginInfo::pname:pInheritanceInfo used to begin
-    recording each element of pname:pCommandBuffers must: be equal to the
-    format used to create that image view
-ifdef::VK_KHR_multiview,VK_VERSION_1_1[]
-  * [[VUID-vkCmdExecuteCommands-viewMask-06031]]
-    If fname:vkCmdExecuteCommands is being called within a render pass
-    instance begun with flink:vkCmdBeginRenderingKHR, the pname:viewMask
-    member of the slink:VkCommandBufferInheritanceRenderingInfoKHR structure
-    included in the pname:pNext chain of
-    slink:VkCommandBufferBeginInfo::pname:pInheritanceInfo used to begin
-    recording each element of pname:pCommandBuffers must: be equal to the
-    slink:VkRenderingInfoKHR::pname:viewMask parameter to
-    flink:vkCmdBeginRenderingKHR
-endif::VK_KHR_multiview,VK_VERSION_1_1[]
-ifdef::VK_AMD_mixed_attachment_samples,VK_NV_framebuffer_mixed_samples[]
-  * [[VUID-vkCmdExecuteCommands-pNext-06032]]
-    If fname:vkCmdExecuteCommands is being called within a render pass
-    instance begun with flink:vkCmdBeginRenderingKHR and the pname:pNext
-    chain of slink:VkCommandBufferInheritanceInfo includes a
-    slink:VkAttachmentSampleCountInfoAMD or
-    slink:VkAttachmentSampleCountInfoNV structure, if the pname:imageView
-    member of an element of the
-    slink:VkRenderingInfoKHR::pname:pColorAttachments parameter to
-    flink:vkCmdBeginRenderingKHR is not dlink:VK_NULL_HANDLE, the
-    corresponding element of the pname:pColorAttachmentSamples member of the
-    slink:VkAttachmentSampleCountInfoAMD or
-    slink:VkAttachmentSampleCountInfoNV structure included in the
-    pname:pNext chain of
-    slink:VkCommandBufferBeginInfo::pname:pInheritanceInfo used to begin
-    recording each element of pname:pCommandBuffers must: be equal to the
-    sample count used to create that image view
-  * [[VUID-vkCmdExecuteCommands-pNext-06033]]
-    If fname:vkCmdExecuteCommands is being called within a render pass
-    instance begun with flink:vkCmdBeginRenderingKHR and the pname:pNext
-    chain of slink:VkCommandBufferInheritanceInfo includes a
-    slink:VkAttachmentSampleCountInfoAMD or
-    slink:VkAttachmentSampleCountInfoNV structure, if the
-    slink:VkRenderingInfoKHR::pname:pDepthAttachment->imageView parameter to
-    flink:vkCmdBeginRenderingKHR is not dlink:VK_NULL_HANDLE, the value of
-    the pname:depthStencilAttachmentSamples member of the
-    slink:VkAttachmentSampleCountInfoAMD or
-    slink:VkAttachmentSampleCountInfoNV structure included in the
-    pname:pNext chain of
-    slink:VkCommandBufferBeginInfo::pname:pInheritanceInfo used to begin
-    recording each element of pname:pCommandBuffers must: be equal to the
-    sample count used to create that image view
-  * [[VUID-vkCmdExecuteCommands-pNext-06034]]
-    If fname:vkCmdExecuteCommands is being called within a render pass
-    instance begun with flink:vkCmdBeginRenderingKHR and the pname:pNext
-    chain of slink:VkCommandBufferInheritanceInfo includes a
-    slink:VkAttachmentSampleCountInfoAMD or
-    slink:VkAttachmentSampleCountInfoNV structure, if the
-    slink:VkRenderingInfoKHR::pname:pStencilAttachment->imageView parameter
-    to flink:vkCmdBeginRenderingKHR is not dlink:VK_NULL_HANDLE, the value
-    of the pname:depthStencilAttachmentSamples member of the
-    slink:VkAttachmentSampleCountInfoAMD or
-    slink:VkAttachmentSampleCountInfoNV structure included in the
-    pname:pNext chain of
-    slink:VkCommandBufferBeginInfo::pname:pInheritanceInfo used to begin
-    recording each element of pname:pCommandBuffers must: be equal to the
-    sample count used to create that image view
-  * [[VUID-vkCmdExecuteCommands-pNext-06035]]
-    If fname:vkCmdExecuteCommands is being called within a render pass
-    instance begun with flink:vkCmdBeginRenderingKHR and the pname:pNext
-    chain of slink:VkCommandBufferInheritanceInfo does not include a
-    slink:VkAttachmentSampleCountInfoAMD or
-    slink:VkAttachmentSampleCountInfoNV structure, if the pname:imageView
-    member of an element of the
-    slink:VkRenderingInfoKHR::pname:pColorAttachments parameter to
-    flink:vkCmdBeginRenderingKHR is not dlink:VK_NULL_HANDLE, the value of
-    slink:VkCommandBufferInheritanceRenderingInfoKHR::pname:rasterizationSamples
-    must: be equal to the sample count used to create that image view
-  * [[VUID-vkCmdExecuteCommands-pNext-06036]]
-    If fname:vkCmdExecuteCommands is being called within a render pass
-    instance begun with flink:vkCmdBeginRenderingKHR and the pname:pNext
-    chain of slink:VkCommandBufferInheritanceInfo does not include a
-    slink:VkAttachmentSampleCountInfoAMD or
-    slink:VkAttachmentSampleCountInfoNV structure, if the
-    slink:VkRenderingInfoKHR::pname:pDepthAttachment->imageView parameter to
-    flink:vkCmdBeginRenderingKHR is not dlink:VK_NULL_HANDLE, the value of
-    slink:VkCommandBufferInheritanceRenderingInfoKHR::pname:rasterizationSamples
-    must: be equal to the sample count used to create that image view
-  * [[VUID-vkCmdExecuteCommands-pNext-06037]]
-    If fname:vkCmdExecuteCommands is being called within a render pass
-    instance begun with flink:vkCmdBeginRenderingKHR and the pname:pNext
-    chain of slink:VkCommandBufferInheritanceInfo does not include a
-    slink:VkAttachmentSampleCountInfoAMD or
-    slink:VkAttachmentSampleCountInfoNV structure, if the
-    slink:VkRenderingInfoKHR::pname:pStencilAttachment->imageView parameter
-    to flink:vkCmdBeginRenderingKHR is not dlink:VK_NULL_HANDLE, the value
-    of
-    slink:VkCommandBufferInheritanceRenderingInfoKHR::pname:rasterizationSamples
-    must: be equal to the sample count used to create that image view
-endif::VK_AMD_mixed_attachment_samples,VK_NV_framebuffer_mixed_samples[]
-endif::VK_KHR_dynamic_rendering[]
-****
-
-include::{generated}/validity/protos/vkCmdExecuteCommands.txt[]
---
-
-ifdef::VK_VERSION_1_1,VK_KHR_device_group[]
-[[commandbuffers-devicemask]]
-== Command Buffer Device Mask
-
-Each command buffer has a piece of state storing the current device mask of
-the command buffer.
-This mask controls which physical devices within the logical device all
-subsequent commands will execute on, including state-setting commands,
-action commands, and synchronization commands.
-
-ifndef::VK_NV_scissor_exclusive[]
-Scissor
-endif::VK_NV_scissor_exclusive[]
-ifdef::VK_NV_scissor_exclusive[]
-Scissor, exclusive scissor,
-endif::VK_NV_scissor_exclusive[]
-and viewport state
-ifdef::VK_EXT_extended_dynamic_state[]
-(excluding the count of each)
-endif::VK_EXT_extended_dynamic_state[]
-can: be set to different values on each physical device (only when set as
-dynamic state), and each physical device will render using its local copy of
-the state.
-Other state is shared between physical devices, such that all physical
-devices use the most recently set values for the state.
-However, when recording an action command that uses a piece of state, the
-most recent command that set that state must: have included all physical
-devices that execute the action command in its current device mask.
-
-The command buffer's device mask is orthogonal to the
-pname:pCommandBufferDeviceMasks member of slink:VkDeviceGroupSubmitInfo.
-Commands only execute on a physical device if the device index is set in
-both device masks.
-
-[open,refpage='VkDeviceGroupCommandBufferBeginInfo',desc='Set the initial device mask for a command buffer',type='structs']
---
-If the pname:pNext chain of slink:VkCommandBufferBeginInfo includes a
-sname:VkDeviceGroupCommandBufferBeginInfo structure, then that structure
-includes an initial device mask for the command buffer.
-
-The sname:VkDeviceGroupCommandBufferBeginInfo structure is defined as:
-
-include::{generated}/api/structs/VkDeviceGroupCommandBufferBeginInfo.txt[]
-
-ifdef::VK_KHR_device_group[]
-or the equivalent
-
-include::{generated}/api/structs/VkDeviceGroupCommandBufferBeginInfoKHR.txt[]
-endif::VK_KHR_device_group[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:deviceMask is the initial value of the command buffer's device
-    mask.
-
-The initial device mask also acts as an upper bound on the set of devices
-that can: ever be in the device mask in the command buffer.
-
-If this structure is not present, the initial value of a command buffer's
-device mask is set to include all physical devices in the logical device
-when the command buffer begins recording.
-
-.Valid Usage
-****
-  * [[VUID-VkDeviceGroupCommandBufferBeginInfo-deviceMask-00106]]
-    pname:deviceMask must: be a valid device mask value
-  * [[VUID-VkDeviceGroupCommandBufferBeginInfo-deviceMask-00107]]
-    pname:deviceMask must: not be zero
-****
-
-include::{generated}/validity/structs/VkDeviceGroupCommandBufferBeginInfo.txt[]
---
-
-[open,refpage='vkCmdSetDeviceMask',desc='Modify device mask of a command buffer',type='protos']
---
-To update the current device mask of a command buffer, call:
-
-ifdef::VK_VERSION_1_1[]
-include::{generated}/api/protos/vkCmdSetDeviceMask.txt[]
-endif::VK_VERSION_1_1[]
-
-ifdef::VK_VERSION_1_1+VK_KHR_device_group[or the equivalent command]
-
-ifdef::VK_KHR_device_group[]
-include::{generated}/api/protos/vkCmdSetDeviceMaskKHR.txt[]
-endif::VK_KHR_device_group[]
-
-  * pname:commandBuffer is command buffer whose current device mask is
-    modified.
-  * pname:deviceMask is the new value of the current device mask.
-
-pname:deviceMask is used to filter out subsequent commands from executing on
-all physical devices whose bit indices are not set in the mask, except
-commands beginning a render pass instance, commands transitioning to the
-next subpass in the render pass instance, and commands ending a render pass
-instance, which always execute on the set of physical devices whose bit
-indices are included in the pname:deviceMask member of the
-slink:VkDeviceGroupRenderPassBeginInfo structure passed to the command
-beginning the corresponding render pass instance.
-
-.Valid Usage
-****
-  * [[VUID-vkCmdSetDeviceMask-deviceMask-00108]]
-    pname:deviceMask must: be a valid device mask value
-  * [[VUID-vkCmdSetDeviceMask-deviceMask-00109]]
-    pname:deviceMask must: not be zero
-  * [[VUID-vkCmdSetDeviceMask-deviceMask-00110]]
-    pname:deviceMask must: not include any set bits that were not in the
-    slink:VkDeviceGroupCommandBufferBeginInfo::pname:deviceMask value when
-    the command buffer began recording
-  * [[VUID-vkCmdSetDeviceMask-deviceMask-00111]]
-    If fname:vkCmdSetDeviceMask is called inside a render pass instance,
-    pname:deviceMask must: not include any set bits that were not in the
-    slink:VkDeviceGroupRenderPassBeginInfo::pname:deviceMask value when the
-    render pass instance began recording
-****
-
-include::{generated}/validity/protos/vkCmdSetDeviceMask.txt[]
---
-endif::VK_VERSION_1_1,VK_KHR_device_group[]
diff --git a/registry/vulkan/chapters/commonvalidity/access_mask_2_common.txt b/registry/vulkan/chapters/commonvalidity/access_mask_2_common.txt
deleted file mode 100644
index ab3e8c9..0000000
--- a/registry/vulkan/chapters/commonvalidity/access_mask_2_common.txt
+++ /dev/null
@@ -1,275 +0,0 @@
-// Copyright 2020-2021 The Khronos Group Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-// Common Valid Usage
-// Common to structs taking VkPipelineStageFlags2KHR and VkAccessFlags2KHR parameters to define scopes
-// Set "stageMaskName" and "accessMaskName" attribute to the name of the stage and access mask to validate
-  * [[VUID-{refpage}-{accessMaskName}-03900]]
-    If pname:{accessMaskName} includes
-    ename:VK_ACCESS_2_INDIRECT_COMMAND_READ_BIT_KHR, pname:{stageMaskName}
-    must: include ename:VK_PIPELINE_STAGE_2_DRAW_INDIRECT_BIT_KHR,
-    ename:VK_PIPELINE_STAGE_2_ACCELERATION_STRUCTURE_BUILD_BIT_KHR,
-    ename:VK_PIPELINE_STAGE_2_ALL_GRAPHICS_BIT_KHR, or
-    ename:VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT_KHR
-  * [[VUID-{refpage}-{accessMaskName}-03901]]
-    If pname:{accessMaskName} includes ename:VK_ACCESS_2_INDEX_READ_BIT_KHR,
-    pname:{stageMaskName} must: include
-    ename:VK_PIPELINE_STAGE_2_INDEX_INPUT_BIT_KHR,
-    ename:VK_PIPELINE_STAGE_2_VERTEX_INPUT_BIT_KHR,
-    ename:VK_PIPELINE_STAGE_2_ALL_GRAPHICS_BIT_KHR, or
-    ename:VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT_KHR
-  * [[VUID-{refpage}-{accessMaskName}-03902]]
-    If pname:{accessMaskName} includes
-    ename:VK_ACCESS_2_VERTEX_ATTRIBUTE_READ_BIT_KHR, pname:{stageMaskName}
-    must: include ename:VK_PIPELINE_STAGE_2_VERTEX_ATTRIBUTE_INPUT_BIT_KHR,
-    ename:VK_PIPELINE_STAGE_2_VERTEX_INPUT_BIT_KHR,
-    ename:VK_PIPELINE_STAGE_2_ALL_GRAPHICS_BIT_KHR, or
-    ename:VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT_KHR
-  * [[VUID-{refpage}-{accessMaskName}-03903]]
-    If pname:{accessMaskName} includes
-    ename:VK_ACCESS_2_INPUT_ATTACHMENT_READ_BIT_KHR, pname:{stageMaskName}
-    must: include ename:VK_PIPELINE_STAGE_2_FRAGMENT_SHADER_BIT_KHR,
-    ename:VK_PIPELINE_STAGE_2_SUBPASS_SHADING_BIT_HUAWEI,
-    ename:VK_PIPELINE_STAGE_2_ALL_GRAPHICS_BIT_KHR, or
-    ename:VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT_KHR
-  * [[VUID-{refpage}-{accessMaskName}-03904]]
-    If pname:{accessMaskName} includes
-    ename:VK_ACCESS_2_UNIFORM_READ_BIT_KHR, pname:{stageMaskName} must:
-    include ename:VK_PIPELINE_STAGE_2_ALL_GRAPHICS_BIT_KHR,
-    ename:VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT_KHR, or one of the
-    etext:VK_PIPELINE_STAGE_*_SHADER_BIT stages
-  * [[VUID-{refpage}-{accessMaskName}-03905]]
-    If pname:{accessMaskName} includes
-    ename:VK_ACCESS_2_SHADER_SAMPLED_READ_BIT_KHR, pname:{stageMaskName}
-    must: include ename:VK_PIPELINE_STAGE_2_ALL_GRAPHICS_BIT_KHR,
-    ename:VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT_KHR, or one of the
-    etext:VK_PIPELINE_STAGE_*_SHADER_BIT stages
-  * [[VUID-{refpage}-{accessMaskName}-03906]]
-    If pname:{accessMaskName} includes
-    ename:VK_ACCESS_2_SHADER_STORAGE_READ_BIT_KHR, pname:{stageMaskName}
-    must: include ename:VK_PIPELINE_STAGE_2_ALL_GRAPHICS_BIT_KHR,
-    ename:VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT_KHR, or one of the
-    etext:VK_PIPELINE_STAGE_*_SHADER_BIT stages
-  * [[VUID-{refpage}-{accessMaskName}-03907]]
-    If pname:{accessMaskName} includes
-    ename:VK_ACCESS_2_SHADER_STORAGE_WRITE_BIT_KHR, pname:{stageMaskName}
-    must: include ename:VK_PIPELINE_STAGE_2_ALL_GRAPHICS_BIT_KHR,
-    ename:VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT_KHR, or one of the
-    etext:VK_PIPELINE_STAGE_*_SHADER_BIT stages
-  * [[VUID-{refpage}-{accessMaskName}-03908]]
-    If pname:{accessMaskName} includes
-    ename:VK_ACCESS_2_SHADER_READ_BIT_KHR, pname:{stageMaskName} must:
-    include ename:VK_PIPELINE_STAGE_2_ALL_GRAPHICS_BIT_KHR,
-    ename:VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT_KHR,
-    ename:VK_PIPELINE_STAGE_2_ACCELERATION_STRUCTURE_BUILD_BIT_KHR, or one
-    of the etext:VK_PIPELINE_STAGE_*_SHADER_BIT stages
-  * [[VUID-{refpage}-{accessMaskName}-03909]]
-    If pname:{accessMaskName} includes
-    ename:VK_ACCESS_2_SHADER_WRITE_BIT_KHR, pname:{stageMaskName} must:
-    include ename:VK_PIPELINE_STAGE_2_ALL_GRAPHICS_BIT_KHR,
-    ename:VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT_KHR, or one of the
-    etext:VK_PIPELINE_STAGE_*_SHADER_BIT stages
-  * [[VUID-{refpage}-{accessMaskName}-03910]]
-    If pname:{accessMaskName} includes
-    ename:VK_ACCESS_2_COLOR_ATTACHMENT_READ_BIT_KHR, pname:{stageMaskName}
-    must: include ename:VK_PIPELINE_STAGE_2_COLOR_ATTACHMENT_OUTPUT_BIT_KHR
-    ename:VK_PIPELINE_STAGE_2_ALL_GRAPHICS_BIT_KHR, or
-    ename:VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT_KHR
-  * [[VUID-{refpage}-{accessMaskName}-03911]]
-    If pname:{accessMaskName} includes
-    ename:VK_ACCESS_2_COLOR_ATTACHMENT_WRITE_BIT_KHR, pname:{stageMaskName}
-    must: include ename:VK_PIPELINE_STAGE_2_COLOR_ATTACHMENT_OUTPUT_BIT_KHR
-    ename:VK_PIPELINE_STAGE_2_ALL_GRAPHICS_BIT_KHR, or
-    ename:VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT_KHR
-  * [[VUID-{refpage}-{accessMaskName}-03912]]
-    If pname:{accessMaskName} includes
-    ename:VK_ACCESS_2_DEPTH_STENCIL_ATTACHMENT_READ_BIT_KHR,
-    pname:{stageMaskName} must: include
-    ename:VK_PIPELINE_STAGE_2_EARLY_FRAGMENT_TESTS_BIT_KHR,
-    ename:VK_PIPELINE_STAGE_2_LATE_FRAGMENT_TESTS_BIT_KHR,
-    ename:VK_PIPELINE_STAGE_2_ALL_GRAPHICS_BIT_KHR, or
-    ename:VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT_KHR
-  * [[VUID-{refpage}-{accessMaskName}-03913]]
-    If pname:{accessMaskName} includes
-    ename:VK_ACCESS_2_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT_KHR,
-    pname:{stageMaskName} must: include
-    ename:VK_PIPELINE_STAGE_2_EARLY_FRAGMENT_TESTS_BIT_KHR,
-    ename:VK_PIPELINE_STAGE_2_LATE_FRAGMENT_TESTS_BIT_KHR,
-    ename:VK_PIPELINE_STAGE_2_ALL_GRAPHICS_BIT_KHR, or
-    ename:VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT_KHR
-  * [[VUID-{refpage}-{accessMaskName}-03914]]
-    If pname:{accessMaskName} includes
-    ename:VK_ACCESS_2_TRANSFER_READ_BIT_KHR, pname:{stageMaskName} must:
-    include ename:VK_PIPELINE_STAGE_2_COPY_BIT_KHR,
-    ename:VK_PIPELINE_STAGE_2_BLIT_BIT_KHR,
-    ename:VK_PIPELINE_STAGE_2_RESOLVE_BIT_KHR,
-    ename:VK_PIPELINE_STAGE_2_ALL_TRANSFER_BIT_KHR,
-    ename:VK_PIPELINE_STAGE_2_ACCELERATION_STRUCTURE_BUILD_BIT_KHR, or
-    ename:VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT_KHR
-  * [[VUID-{refpage}-{accessMaskName}-03915]]
-    If pname:{accessMaskName} includes
-    ename:VK_ACCESS_2_TRANSFER_WRITE_BIT_KHR, pname:{stageMaskName} must:
-    include ename:VK_PIPELINE_STAGE_2_COPY_BIT_KHR,
-    ename:VK_PIPELINE_STAGE_2_BLIT_BIT_KHR,
-    ename:VK_PIPELINE_STAGE_2_RESOLVE_BIT_KHR,
-    ename:VK_PIPELINE_STAGE_2_CLEAR_BIT_KHR,
-    ename:VK_PIPELINE_STAGE_2_ALL_TRANSFER_BIT_KHR,
-    ename:VK_PIPELINE_STAGE_2_ACCELERATION_STRUCTURE_BUILD_BIT_KHR, or
-    ename:VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT_KHR
-  * [[VUID-{refpage}-{accessMaskName}-03916]]
-    If pname:{accessMaskName} includes ename:VK_ACCESS_2_HOST_READ_BIT_KHR,
-    pname:{stageMaskName} must: include
-    ename:VK_PIPELINE_STAGE_2_HOST_BIT_KHR
-  * [[VUID-{refpage}-{accessMaskName}-03917]]
-    If pname:{accessMaskName} includes ename:VK_ACCESS_2_HOST_WRITE_BIT_KHR,
-    pname:{stageMaskName} must: include
-    ename:VK_PIPELINE_STAGE_2_HOST_BIT_KHR
-ifdef::VK_EXT_conditional_rendering[]
-  * [[VUID-{refpage}-{accessMaskName}-03918]]
-    If pname:{accessMaskName} includes
-    ename:VK_ACCESS_2_CONDITIONAL_RENDERING_READ_BIT_EXT,
-    pname:{stageMaskName} must: include
-    ename:VK_PIPELINE_STAGE_2_CONDITIONAL_RENDERING_BIT_EXT,
-    ename:VK_PIPELINE_STAGE_2_ALL_GRAPHICS_BIT_KHR, or
-    ename:VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT_KHR
-endif::VK_EXT_conditional_rendering[]
-ifdef::VK_EXT_fragment_density_map[]
-  * [[VUID-{refpage}-{accessMaskName}-03919]]
-    If pname:{accessMaskName} includes
-    ename:VK_ACCESS_2_FRAGMENT_DENSITY_MAP_READ_BIT_EXT,
-    pname:{stageMaskName} must: include
-    ename:VK_PIPELINE_STAGE_2_FRAGMENT_DENSITY_PROCESS_BIT_EXT,
-    ename:VK_PIPELINE_STAGE_2_ALL_GRAPHICS_BIT_KHR, or
-    ename:VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT_KHR
-endif::VK_EXT_fragment_density_map[]
-ifdef::VK_EXT_transform_feedback[]
-  * [[VUID-{refpage}-{accessMaskName}-03920]]
-    If pname:{accessMaskName} includes
-    ename:VK_ACCESS_2_TRANSFORM_FEEDBACK_WRITE_BIT_EXT,
-    pname:{stageMaskName} must: include
-    ename:VK_PIPELINE_STAGE_2_TRANSFORM_FEEDBACK_BIT_EXT,
-    ename:VK_PIPELINE_STAGE_2_ALL_GRAPHICS_BIT_KHR, or
-    ename:VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT_KHR
-  * [[VUID-{refpage}-{accessMaskName}-04747]]
-    If pname:{accessMaskName} includes
-    ename:VK_ACCESS_2_TRANSFORM_FEEDBACK_COUNTER_READ_BIT_EXT,
-    pname:{stageMaskName} must: include
-    ename:VK_PIPELINE_STAGE_2_DRAW_INDIRECT_BIT_KHR,
-    ename:VK_PIPELINE_STAGE_2_TRANSFORM_FEEDBACK_BIT_EXT,
-    ename:VK_PIPELINE_STAGE_2_ALL_GRAPHICS_BIT_KHR, or
-    ename:VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT_KHR
-  * [[VUID-{refpage}-{accessMaskName}-03922]]
-    If pname:{accessMaskName} includes
-    ename:VK_ACCESS_2_TRANSFORM_FEEDBACK_COUNTER_WRITE_BIT_EXT,
-    pname:{stageMaskName} must: include
-    ename:VK_PIPELINE_STAGE_2_TRANSFORM_FEEDBACK_BIT_EXT,
-    ename:VK_PIPELINE_STAGE_2_ALL_GRAPHICS_BIT_KHR, or
-    ename:VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT_KHR
-endif::VK_EXT_transform_feedback[]
-ifdef::VK_NV_shading_rate_image[]
-  * [[VUID-{refpage}-{accessMaskName}-03923]]
-    If pname:{accessMaskName} includes
-    ename:VK_ACCESS_2_SHADING_RATE_IMAGE_READ_BIT_NV, pname:{stageMaskName}
-    must: include ename:VK_PIPELINE_STAGE_2_SHADING_RATE_IMAGE_BIT_NV,
-    ename:VK_PIPELINE_STAGE_2_ALL_GRAPHICS_BIT_KHR, or
-    ename:VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT_KHR
-endif::VK_NV_shading_rate_image[]
-ifdef::VK_HUAWEI_invocation_mask[]
-  * [[VUID-{refpage}-{accessMaskName}-04994]]
-    If pname:{accessMaskName} includes
-    ename:VK_ACCESS_2_INVOCATION_MASK_READ_BIT_HUAWEI, pname:{stageMaskName}
-    must: include ename:VK_PIPELINE_STAGE_2_INVOCATION_MASK_BIT_HUAWEI
-endif::VK_HUAWEI_invocation_mask[]
-ifdef::VK_NV_device_generated_commands[]
-  * [[VUID-{refpage}-{accessMaskName}-03924]]
-    If pname:{accessMaskName} includes
-    ename:VK_ACCESS_2_COMMAND_PREPROCESS_READ_BIT_NV, pname:{stageMaskName}
-    must: include ename:VK_PIPELINE_STAGE_2_COMMAND_PREPROCESS_BIT_NV or
-    ename:VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT_KHR
-  * [[VUID-{refpage}-{accessMaskName}-03925]]
-    If pname:{accessMaskName} includes
-    ename:VK_ACCESS_2_COMMAND_PREPROCESS_WRITE_BIT_NV, pname:{stageMaskName}
-    must: include ename:VK_PIPELINE_STAGE_2_COMMAND_PREPROCESS_BIT_NV or
-    ename:VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT_KHR
-endif::VK_NV_device_generated_commands[]
-ifdef::VK_EXT_blend_operation_advanced[]
-  * [[VUID-{refpage}-{accessMaskName}-03926]]
-    If pname:{accessMaskName} includes
-    ename:VK_ACCESS_2_COLOR_ATTACHMENT_READ_NONCOHERENT_BIT_EXT,
-    pname:{stageMaskName} must: include
-    ename:VK_PIPELINE_STAGE_2_COLOR_ATTACHMENT_OUTPUT_BIT_KHR
-    ename:VK_PIPELINE_STAGE_2_ALL_GRAPHICS_BIT_KHR, or
-    ename:VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT_KHR
-endif::VK_EXT_blend_operation_advanced[]
-ifdef::VK_KHR_acceleration_structure,VK_NV_ray_tracing[]
-  * [[VUID-{refpage}-{accessMaskName}-03927]]
-    If pname:{accessMaskName} includes
-    ename:VK_ACCESS_2_ACCELERATION_STRUCTURE_READ_BIT_KHR,
-    pname:{stageMaskName} must: include
-    ename:VK_PIPELINE_STAGE_2_ACCELERATION_STRUCTURE_BUILD_BIT_KHR,
-    ename:VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT_KHR, or one of the
-    etext:VK_PIPELINE_STAGE_*_SHADER_BIT stages
-  * [[VUID-{refpage}-{accessMaskName}-03928]]
-    If pname:{accessMaskName} includes
-    ename:VK_ACCESS_2_ACCELERATION_STRUCTURE_WRITE_BIT_KHR,
-    pname:{stageMaskName} must: include
-    ename:VK_PIPELINE_STAGE_2_ACCELERATION_STRUCTURE_BUILD_BIT_KHR or
-    ename:VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT_KHR
-ifndef::VK_KHR_ray_query[]
-ifdef::VK_KHR_ray_tracing_pipeline,VK_NV_ray_tracing[]
-  * [[VUID-{refpage}-{accessMaskName}-06254]]
-    If pname:{accessMaskName} includes
-    ename:VK_ACCESS_2_ACCELERATION_STRUCTURE_READ_BIT_KHR,
-    pname:{stageMaskName} must: not include any of the
-    etext:VK_PIPELINE_STAGE_*_SHADER_BIT stages except
-    ename:VK_PIPELINE_STAGE_2_RAY_TRACING_SHADER_BIT_KHR
-endif::VK_KHR_ray_tracing_pipeline,VK_NV_ray_tracing[]
-ifndef::VK_KHR_ray_tracing_pipeline,VK_NV_ray_tracing[]
-  * [[VUID-{refpage}-{accessMaskName}-06255]]
-    If pname:{accessMaskName} includes
-    ename:VK_ACCESS_2_ACCELERATION_STRUCTURE_READ_BIT_KHR,
-    pname:{stageMaskName} must: not include any of the
-    etext:VK_PIPELINE_STAGE_*_SHADER_BIT stages
-endif::VK_KHR_ray_tracing_pipeline,VK_NV_ray_tracing[]
-endif::VK_KHR_ray_query[]
-ifdef::VK_KHR_ray_query[]
-ifdef::VK_KHR_ray_tracing_pipeline,VK_NV_ray_tracing[]
-  * [[VUID-{refpage}-{accessMaskName}-06256]]
-    If <<features-rayQuery,pname:rayQuery>> is not enabled and
-    pname:{accessMaskName} includes
-    ename:VK_ACCESS_2_ACCELERATION_STRUCTURE_READ_BIT_KHR,
-    pname:{stageMaskName} must: not include any of the
-    etext:VK_PIPELINE_STAGE_*_SHADER_BIT stages except
-    ename:VK_PIPELINE_STAGE_2_RAY_TRACING_SHADER_BIT_KHR
-endif::VK_KHR_ray_tracing_pipeline,VK_NV_ray_tracing[]
-ifndef::VK_KHR_ray_tracing_pipeline,VK_NV_ray_tracing[]
-  * [[VUID-{refpage}-{accessMaskName}-06257]]
-    If <<features-rayQuery,pname:rayQuery>> is not enabled and
-    pname:{accessMaskName} includes
-    ename:VK_ACCESS_2_ACCELERATION_STRUCTURE_READ_BIT_KHR,
-    pname:{stageMaskName} must: not include any of the
-    etext:VK_PIPELINE_STAGE_*_SHADER_BIT stages
-endif::VK_KHR_ray_tracing_pipeline,VK_NV_ray_tracing[]
-endif::VK_KHR_ray_query[]
-endif::VK_KHR_acceleration_structure,VK_NV_ray_tracing[]
-ifdef::VK_KHR_video_decode_queue[]
-  * [[VUID-{refpage}-{accessMaskName}-04858]]
-    If pname:{accessMaskName} includes
-    ename:VK_ACCESS_2_VIDEO_DECODE_READ_BIT_KHR, pname:{stageMaskName} must:
-    include ename:VK_PIPELINE_STAGE_2_VIDEO_DECODE_BIT_KHR
-  * [[VUID-{refpage}-{accessMaskName}-04859]]
-    If pname:{accessMaskName} includes
-    ename:VK_ACCESS_2_VIDEO_DECODE_WRITE_BIT_KHR, pname:{stageMaskName}
-    must: include ename:VK_PIPELINE_STAGE_2_VIDEO_DECODE_BIT_KHR
-endif::VK_KHR_video_decode_queue[]
-ifdef::VK_KHR_video_encode_queue[]
-  * [[VUID-{refpage}-{accessMaskName}-04860]]
-    If pname:{accessMaskName} includes
-    ename:VK_ACCESS_2_VIDEO_ENCODE_READ_BIT_KHR, pname:{stageMaskName} must:
-    include ename:VK_PIPELINE_STAGE_2_VIDEO_ENCODE_BIT_KHR
-  * [[VUID-{refpage}-{accessMaskName}-04861]]
-    If pname:{accessMaskName} includes
-    ename:VK_ACCESS_2_VIDEO_ENCODE_WRITE_BIT_KHR, pname:{stageMaskName}
-    must: include ename:VK_PIPELINE_STAGE_2_VIDEO_ENCODE_BIT_KHR
-endif::VK_KHR_video_encode_queue[]
-// Common Valid Usage
diff --git a/registry/vulkan/chapters/commonvalidity/bind_buffer_common.txt b/registry/vulkan/chapters/commonvalidity/bind_buffer_common.txt
deleted file mode 100644
index 87fc821..0000000
--- a/registry/vulkan/chapters/commonvalidity/bind_buffer_common.txt
+++ /dev/null
@@ -1,121 +0,0 @@
-// Copyright 2020-2021 The Khronos Group Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-// Common Valid Usage
-// Common to binding any memory to a buffer
-  * [[VUID-{refpage}-buffer-01029]]
-    pname:buffer must: not already be backed by a memory object
-  * [[VUID-{refpage}-buffer-01030]]
-    pname:buffer must: not have been created with any sparse memory binding
-    flags
-  * [[VUID-{refpage}-memoryOffset-01031]]
-    pname:memoryOffset must: be less than the size of pname:memory
-  * [[VUID-{refpage}-memory-01035]]
-    pname:memory must: have been allocated using one of the memory types
-    allowed in the pname:memoryTypeBits member of the
-    sname:VkMemoryRequirements structure returned from a call to
-    fname:vkGetBufferMemoryRequirements with pname:buffer
-  * [[VUID-{refpage}-memoryOffset-01036]]
-    pname:memoryOffset must: be an integer multiple of the pname:alignment
-    member of the sname:VkMemoryRequirements structure returned from a call
-    to fname:vkGetBufferMemoryRequirements with pname:buffer
-  * [[VUID-{refpage}-size-01037]]
-    The pname:size member of the sname:VkMemoryRequirements structure
-    returned from a call to fname:vkGetBufferMemoryRequirements with
-    pname:buffer must: be less than or equal to the size of pname:memory
-    minus pname:memoryOffset
-ifdef::VK_VERSION_1_1,VK_KHR_dedicated_allocation[]
-  * [[VUID-{refpage}-buffer-01444]]
-    If pname:buffer requires a dedicated allocation (as reported by
-    flink:vkGetBufferMemoryRequirements2 in
-    slink:VkMemoryDedicatedRequirements::pname:requiresDedicatedAllocation
-    for pname:buffer), pname:memory must: have been allocated with
-    slink:VkMemoryDedicatedAllocateInfo::pname:buffer equal to pname:buffer
-  * [[VUID-{refpage}-memory-01508]]
-    If the sname:VkMemoryAllocateInfo provided when pname:memory was
-    allocated included a slink:VkMemoryDedicatedAllocateInfo structure in
-    its pname:pNext chain, and
-    slink:VkMemoryDedicatedAllocateInfo::pname:buffer was not
-    dlink:VK_NULL_HANDLE, then pname:buffer must: equal
-    slink:VkMemoryDedicatedAllocateInfo::pname:buffer, and
-    pname:memoryOffset must: be zero
-endif::VK_VERSION_1_1,VK_KHR_dedicated_allocation[]
-ifdef::VK_VERSION_1_1[]
-  * [[VUID-{refpage}-None-01898]]
-    If pname:buffer was created with the
-    ename:VK_BUFFER_CREATE_PROTECTED_BIT bit set, the buffer must: be bound
-    to a memory object allocated with a memory type that reports
-    ename:VK_MEMORY_PROPERTY_PROTECTED_BIT
-  * [[VUID-{refpage}-None-01899]]
-    If pname:buffer was created with the
-    ename:VK_BUFFER_CREATE_PROTECTED_BIT bit not set, the buffer must: not
-    be bound to a memory object allocated with a memory type that reports
-    ename:VK_MEMORY_PROPERTY_PROTECTED_BIT
-endif::VK_VERSION_1_1[]
-ifdef::VK_NV_dedicated_allocation[]
-  * [[VUID-{refpage}-buffer-01038]]
-    If pname:buffer was created with
-    slink:VkDedicatedAllocationBufferCreateInfoNV::pname:dedicatedAllocation
-    equal to ename:VK_TRUE, pname:memory must: have been allocated with
-    slink:VkDedicatedAllocationMemoryAllocateInfoNV::pname:buffer equal to a
-    buffer handle created with identical creation parameters to pname:buffer
-    and pname:memoryOffset must: be zero
-ifndef::VK_VERSION_1_1,VK_KHR_dedicated_allocation[]
-  * [[VUID-{refpage}-buffer-01039]]
-    If pname:buffer was not created with
-    slink:VkDedicatedAllocationBufferCreateInfoNV::pname:dedicatedAllocation
-    equal to ename:VK_TRUE, pname:memory must: not have been allocated
-    dedicated for a specific buffer or image
-endif::VK_VERSION_1_1,VK_KHR_dedicated_allocation[]
-endif::VK_NV_dedicated_allocation[]
-ifdef::VK_VERSION_1_1,VK_KHR_external_memory[]
-  * [[VUID-{refpage}-memory-02726]]
-    If the value of slink:VkExportMemoryAllocateInfo::pname:handleTypes used
-    to allocate pname:memory is not `0`, it must: include at least one of
-    the handles set in
-    slink:VkExternalMemoryBufferCreateInfo::pname:handleTypes when
-    pname:buffer was created
-ifndef::VK_ANDROID_external_memory_android_hardware_buffer[]
-  * [[VUID-{refpage}-memory-02727]]
-    If pname:memory was allocated by a memory import operation, the external
-    handle type of the imported memory must: also have been set in
-    slink:VkExternalMemoryBufferCreateInfo::pname:handleTypes when
-    pname:buffer was created
-endif::VK_ANDROID_external_memory_android_hardware_buffer[]
-ifdef::VK_ANDROID_external_memory_android_hardware_buffer[]
-  * [[VUID-{refpage}-memory-02985]]
-    If pname:memory was allocated by a memory import operation, that is not
-    slink:VkImportAndroidHardwareBufferInfoANDROID with a non-`NULL`
-    pname:buffer value, the external handle type of the imported memory
-    must: also have been set in
-    slink:VkExternalMemoryBufferCreateInfo::pname:handleTypes when
-    pname:buffer was created
-  * [[VUID-{refpage}-memory-02986]]
-    If pname:memory was allocated with the
-    slink:VkImportAndroidHardwareBufferInfoANDROID memory import operation
-    with a non-`NULL` pname:buffer value,
-    ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_ANDROID_HARDWARE_BUFFER_BIT_ANDROID
-    must: also have been set in
-    slink:VkExternalMemoryBufferCreateInfo::pname:handleTypes when
-    pname:buffer was created
-endif::VK_ANDROID_external_memory_android_hardware_buffer[]
-endif::VK_VERSION_1_1,VK_KHR_external_memory[]
-ifdef::VK_VERSION_1_2,VK_KHR_buffer_device_address[]
-  * [[VUID-{refpage}-bufferDeviceAddress-03339]]
-    If the
-    slink:VkPhysicalDeviceBufferDeviceAddressFeatures::pname:bufferDeviceAddress
-    feature is enabled and pname:buffer was created with the
-    ename:VK_BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT bit set, pname:memory
-    must: have been allocated with the
-    ename:VK_MEMORY_ALLOCATE_DEVICE_ADDRESS_BIT bit set
-endif::VK_VERSION_1_2,VK_KHR_buffer_device_address[]
-ifdef::VK_FUCHSIA_buffer_collection[]
-  * [[VUID-{refpage}-buffer-06408]]
-    If pname:buffer was created with
-    slink:VkBufferCollectionBufferCreateInfoFUCHSIA chained to
-    slink:VkBufferCreateInfo::pname:pNext, pname:memory must: be allocated
-    with a slink:VkImportMemoryBufferCollectionFUCHSIA chained to
-    slink:VkMemoryAllocateInfo::pname:pNext
-endif::VK_FUCHSIA_buffer_collection[]
-// Common Valid Usage
diff --git a/registry/vulkan/chapters/commonvalidity/bind_image_common.txt b/registry/vulkan/chapters/commonvalidity/bind_image_common.txt
deleted file mode 100644
index f8ca307..0000000
--- a/registry/vulkan/chapters/commonvalidity/bind_image_common.txt
+++ /dev/null
@@ -1,117 +0,0 @@
-// Copyright 2020-2021 The Khronos Group Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-// Common Valid Usage
-// Common to binding any memory to an image
-  * [[VUID-{refpage}-image-01044]]
-    pname:image must: not already be backed by a memory object
-  * [[VUID-{refpage}-image-01045]]
-    pname:image must: not have been created with any sparse memory binding
-    flags
-  * [[VUID-{refpage}-memoryOffset-01046]]
-    pname:memoryOffset must: be less than the size of pname:memory
-ifdef::VK_VERSION_1_1,VK_KHR_dedicated_allocation[]
-  * [[VUID-{refpage}-image-01445]]
-    If pname:image requires a dedicated allocation (as reported by
-    flink:vkGetImageMemoryRequirements2 in
-    slink:VkMemoryDedicatedRequirements::pname:requiresDedicatedAllocation
-    for pname:image), pname:memory must: have been created with
-    slink:VkMemoryDedicatedAllocateInfo::pname:image equal to pname:image
-ifndef::VK_NV_dedicated_allocation_image_aliasing[]
-  * [[VUID-{refpage}-memory-01509]]
-    If the sname:VkMemoryAllocateInfo provided when pname:memory was
-    allocated included a slink:VkMemoryDedicatedAllocateInfo structure in
-    its pname:pNext chain, and
-    slink:VkMemoryDedicatedAllocateInfo::pname:image was not
-    dlink:VK_NULL_HANDLE, then pname:image must: equal
-    slink:VkMemoryDedicatedAllocateInfo::pname:image and pname:memoryOffset
-    must: be zero
-endif::VK_NV_dedicated_allocation_image_aliasing[]
-ifdef::VK_NV_dedicated_allocation_image_aliasing[]
-  * [[VUID-{refpage}-memory-02628]]
-    If the <<features-dedicatedAllocationImageAliasing,dedicated allocation
-    image aliasing>> feature is not enabled, and the
-    sname:VkMemoryAllocateInfo provided when pname:memory was allocated
-    included a slink:VkMemoryDedicatedAllocateInfo structure in its
-    pname:pNext chain, and slink:VkMemoryDedicatedAllocateInfo::pname:image
-    was not dlink:VK_NULL_HANDLE, then pname:image must: equal
-    slink:VkMemoryDedicatedAllocateInfo::pname:image and pname:memoryOffset
-    must: be zero
-  * [[VUID-{refpage}-memory-02629]]
-    If the <<features-dedicatedAllocationImageAliasing,dedicated allocation
-    image aliasing>> feature is enabled, and the sname:VkMemoryAllocateInfo
-    provided when pname:memory was allocated included a
-    slink:VkMemoryDedicatedAllocateInfo structure in its pname:pNext chain,
-    and slink:VkMemoryDedicatedAllocateInfo::pname:image was not
-    dlink:VK_NULL_HANDLE, then pname:memoryOffset must: be zero, and
-    pname:image must: be either equal to
-    slink:VkMemoryDedicatedAllocateInfo::pname:image or an image that was
-    created using the same parameters in slink:VkImageCreateInfo, with the
-    exception that pname:extent and pname:arrayLayers may: differ subject to
-    the following restrictions: every dimension in the pname:extent
-    parameter of the image being bound must: be equal to or smaller than the
-    original image for which the allocation was created; and the
-    pname:arrayLayers parameter of the image being bound must: be equal to
-    or smaller than the original image for which the allocation was created
-endif::VK_NV_dedicated_allocation_image_aliasing[]
-endif::VK_VERSION_1_1,VK_KHR_dedicated_allocation[]
-ifdef::VK_VERSION_1_1[]
-  * [[VUID-{refpage}-None-01901]]
-    If image was created with the ename:VK_IMAGE_CREATE_PROTECTED_BIT bit
-    set, the image must: be bound to a memory object allocated with a memory
-    type that reports ename:VK_MEMORY_PROPERTY_PROTECTED_BIT
-  * [[VUID-{refpage}-None-01902]]
-    If image was created with the ename:VK_IMAGE_CREATE_PROTECTED_BIT bit
-    not set, the image must: not be bound to a memory object created with a
-    memory type that reports ename:VK_MEMORY_PROPERTY_PROTECTED_BIT
-endif::VK_VERSION_1_1[]
-ifdef::VK_NV_dedicated_allocation[]
-  * [[VUID-{refpage}-image-01050]]
-    If pname:image was created with
-    slink:VkDedicatedAllocationImageCreateInfoNV::pname:dedicatedAllocation
-    equal to ename:VK_TRUE, pname:memory must: have been created with
-    slink:VkDedicatedAllocationMemoryAllocateInfoNV::pname:image equal to an
-    image handle created with identical creation parameters to pname:image
-    and pname:memoryOffset must: be zero
-ifndef::VK_VERSION_1_1,VK_KHR_dedicated_allocation[]
-  * [[VUID-{refpage}-image-01051]]
-    If pname:image was not created with
-    slink:VkDedicatedAllocationImageCreateInfoNV::pname:dedicatedAllocation
-    equal to ename:VK_TRUE, pname:memory must: not have been allocated
-    dedicated for a specific buffer or image
-endif::VK_VERSION_1_1,VK_KHR_dedicated_allocation[]
-endif::VK_NV_dedicated_allocation[]
-ifdef::VK_VERSION_1_1,VK_KHR_external_memory[]
-  * [[VUID-{refpage}-memory-02728]]
-    If the value of slink:VkExportMemoryAllocateInfo::pname:handleTypes used
-    to allocate pname:memory is not `0`, it must: include at least one of
-    the handles set in
-    slink:VkExternalMemoryImageCreateInfo::pname:handleTypes when
-    pname:image was created
-ifndef::VK_ANDROID_external_memory_android_hardware_buffer[]
-  * [[VUID-{refpage}-memory-02729]]
-    If pname:memory was created by a memory import operation, the external
-    handle type of the imported memory must: also have been set in
-    slink:VkExternalMemoryImageCreateInfo::pname:handleTypes when
-    pname:image was created
-endif::VK_ANDROID_external_memory_android_hardware_buffer[]
-ifdef::VK_ANDROID_external_memory_android_hardware_buffer[]
-  * [[VUID-{refpage}-memory-02989]]
-    If pname:memory was created by a memory import operation, that is not
-    slink:VkImportAndroidHardwareBufferInfoANDROID with a non-`NULL`
-    pname:buffer value, the external handle type of the imported memory
-    must: also have been set in
-    slink:VkExternalMemoryImageCreateInfo::pname:handleTypes when
-    pname:image was created
-  * [[VUID-{refpage}-memory-02990]]
-    If pname:memory was created with the
-    slink:VkImportAndroidHardwareBufferInfoANDROID memory import operation
-    with a non-`NULL` pname:buffer value,
-    ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_ANDROID_HARDWARE_BUFFER_BIT_ANDROID
-    must: also have been set in
-    slink:VkExternalMemoryImageCreateInfo::pname:handleTypes when
-    pname:image was created
-endif::VK_ANDROID_external_memory_android_hardware_buffer[]
-endif::VK_VERSION_1_1,VK_KHR_external_memory[]
-// Common Valid Usage
diff --git a/registry/vulkan/chapters/commonvalidity/blit_image_command_buffer_common.txt b/registry/vulkan/chapters/commonvalidity/blit_image_command_buffer_common.txt
deleted file mode 100644
index 2aaa924..0000000
--- a/registry/vulkan/chapters/commonvalidity/blit_image_command_buffer_common.txt
+++ /dev/null
@@ -1,21 +0,0 @@
-// Copyright 2020-2021 The Khronos Group Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-// Common Valid Usage
-// Common to VkCmdBlitImage* command buffer
-ifdef::VK_VERSION_1_1[]
-  * [[VUID-{refpage}-commandBuffer-01834]]
-    If pname:commandBuffer is an unprotected command buffer and
-    <<limits-protectedNoFault, pname:protectedNoFault>> is not supported,
-    pname:srcImage must: not be a protected image
-  * [[VUID-{refpage}-commandBuffer-01835]]
-    If pname:commandBuffer is an unprotected command buffer and
-    <<limits-protectedNoFault, pname:protectedNoFault>> is not supported,
-    pname:dstImage must: not be a protected image
-  * [[VUID-{refpage}-commandBuffer-01836]]
-    If pname:commandBuffer is a protected command buffer and
-    <<limits-protectedNoFault, pname:protectedNoFault>> is not supported,
-    pname:dstImage must: not be an unprotected image
-endif::VK_VERSION_1_1[]
-// Common Valid Usage
diff --git a/registry/vulkan/chapters/commonvalidity/blit_image_common.txt b/registry/vulkan/chapters/commonvalidity/blit_image_common.txt
deleted file mode 100644
index 8b75131..0000000
--- a/registry/vulkan/chapters/commonvalidity/blit_image_common.txt
+++ /dev/null
@@ -1,194 +0,0 @@
-// Copyright 2020-2021 The Khronos Group Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-// Common Valid Usage
-// Common to VkCmdBlitImage* commands
-  * [[VUID-{refpage}-pRegions-00215]]
-    The source region specified by each element of pname:pRegions must: be a
-    region that is contained within pname:srcImage
-  * [[VUID-{refpage}-pRegions-00216]]
-    The destination region specified by each element of pname:pRegions must:
-    be a region that is contained within pname:dstImage
-  * [[VUID-{refpage}-pRegions-00217]]
-    The union of all destination regions, specified by the elements of
-    pname:pRegions, must: not overlap in memory with any texel that may: be
-    sampled during the blit operation
-  * [[VUID-{refpage}-srcImage-01999]]
-    The <<resources-image-format-features,format features>> of
-    pname:srcImage must: contain ename:VK_FORMAT_FEATURE_BLIT_SRC_BIT
-ifdef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
-  * [[VUID-{refpage}-srcImage-06421]]
-    pname:srcImage must: not use a
-    <<formats-requiring-sampler-ycbcr-conversion, format that requires a
-    sampler Y'C~B~C~R~ conversion>>
-endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
-  * [[VUID-{refpage}-srcImage-00219]]
-    pname:srcImage must: have been created with
-    ename:VK_IMAGE_USAGE_TRANSFER_SRC_BIT usage flag
-  * [[VUID-{refpage}-srcImage-00220]]
-    If pname:srcImage is non-sparse then it must: be bound completely and
-    contiguously to a single sname:VkDeviceMemory object
-  * [[VUID-{refpage}-srcImageLayout-00221]]
-    pname:srcImageLayout must: specify the layout of the image subresources
-    of pname:srcImage specified in pname:pRegions at the time this command
-    is executed on a sname:VkDevice
-ifndef::VK_KHR_shared_presentable_image[]
-  * [[VUID-{refpage}-srcImageLayout-00222]]
-    pname:srcImageLayout must: be ename:VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL
-    or ename:VK_IMAGE_LAYOUT_GENERAL
-endif::VK_KHR_shared_presentable_image[]
-ifdef::VK_KHR_shared_presentable_image[]
-  * [[VUID-{refpage}-srcImageLayout-01398]]
-    pname:srcImageLayout must: be ename:VK_IMAGE_LAYOUT_SHARED_PRESENT_KHR,
-    ename:VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL or
-    ename:VK_IMAGE_LAYOUT_GENERAL
-endif::VK_KHR_shared_presentable_image[]
-  * [[VUID-{refpage}-dstImage-02000]]
-    The <<resources-image-format-features,format features>> of
-    pname:dstImage must: contain ename:VK_FORMAT_FEATURE_BLIT_DST_BIT
-ifdef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
-  * [[VUID-{refpage}-dstImage-06422]]
-    pname:dstImage must: not use a
-    <<formats-requiring-sampler-ycbcr-conversion, format that requires a
-    sampler Y'C~B~C~R~ conversion>>
-endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
-  * [[VUID-{refpage}-dstImage-00224]]
-    pname:dstImage must: have been created with
-    ename:VK_IMAGE_USAGE_TRANSFER_DST_BIT usage flag
-  * [[VUID-{refpage}-dstImage-00225]]
-    If pname:dstImage is non-sparse then it must: be bound completely and
-    contiguously to a single sname:VkDeviceMemory object
-  * [[VUID-{refpage}-dstImageLayout-00226]]
-    pname:dstImageLayout must: specify the layout of the image subresources
-    of pname:dstImage specified in pname:pRegions at the time this command
-    is executed on a sname:VkDevice
-ifndef::VK_KHR_shared_presentable_image[]
-  * [[VUID-{refpage}-dstImageLayout-00227]]
-    pname:dstImageLayout must: be ename:VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL
-    or ename:VK_IMAGE_LAYOUT_GENERAL
-endif::VK_KHR_shared_presentable_image[]
-ifdef::VK_KHR_shared_presentable_image[]
-  * [[VUID-{refpage}-dstImageLayout-01399]]
-    pname:dstImageLayout must: be ename:VK_IMAGE_LAYOUT_SHARED_PRESENT_KHR,
-    ename:VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL or
-    ename:VK_IMAGE_LAYOUT_GENERAL
-endif::VK_KHR_shared_presentable_image[]
-  * [[VUID-{refpage}-srcImage-00229]]
-    If either of pname:srcImage or pname:dstImage was created with a signed
-    integer elink:VkFormat, the other must: also have been created with a
-    signed integer elink:VkFormat
-  * [[VUID-{refpage}-srcImage-00230]]
-    If either of pname:srcImage or pname:dstImage was created with an
-    unsigned integer elink:VkFormat, the other must: also have been created
-    with an unsigned integer elink:VkFormat
-  * [[VUID-{refpage}-srcImage-00231]]
-    If either of pname:srcImage or pname:dstImage was created with a
-    depth/stencil format, the other must: have exactly the same format
-  * [[VUID-{refpage}-srcImage-00232]]
-    If pname:srcImage was created with a depth/stencil format, pname:filter
-    must: be ename:VK_FILTER_NEAREST
-  * [[VUID-{refpage}-srcImage-00233]]
-    pname:srcImage must: have been created with a pname:samples value of
-    ename:VK_SAMPLE_COUNT_1_BIT
-  * [[VUID-{refpage}-dstImage-00234]]
-    pname:dstImage must: have been created with a pname:samples value of
-    ename:VK_SAMPLE_COUNT_1_BIT
-  * [[VUID-{refpage}-filter-02001]]
-    If pname:filter is ename:VK_FILTER_LINEAR, then the
-    <<resources-image-format-features,format features>> of pname:srcImage
-    must: contain ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT
-ifdef::VK_IMG_filter_cubic,VK_EXT_filter_cubic[]
-  * [[VUID-{refpage}-filter-02002]]
-    If pname:filter is ename:VK_FILTER_CUBIC_EXT, then the
-    <<resources-image-format-features,format features>> of pname:srcImage
-    must: contain ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_EXT
-  * [[VUID-{refpage}-filter-00237]]
-    If pname:filter is ename:VK_FILTER_CUBIC_EXT, pname:srcImage must: be of
-    type ename:VK_IMAGE_TYPE_2D
-endif::VK_IMG_filter_cubic,VK_EXT_filter_cubic[]
-  * [[VUID-{refpage}-srcSubresource-01705]]
-    The pname:srcSubresource.mipLevel member of each element of
-    pname:pRegions must: be less than the pname:mipLevels specified in
-    slink:VkImageCreateInfo when pname:srcImage was created
-  * [[VUID-{refpage}-dstSubresource-01706]]
-    The pname:dstSubresource.mipLevel member of each element of
-    pname:pRegions must: be less than the pname:mipLevels specified in
-    slink:VkImageCreateInfo when pname:dstImage was created
-  * [[VUID-{refpage}-srcSubresource-01707]]
-    The [eq]#pname:srcSubresource.baseArrayLayer {plus}
-    pname:srcSubresource.layerCount# of each element of pname:pRegions must:
-    be less than or equal to the pname:arrayLayers specified in
-    slink:VkImageCreateInfo when pname:srcImage was created
-  * [[VUID-{refpage}-dstSubresource-01708]]
-    The [eq]#pname:dstSubresource.baseArrayLayer {plus}
-    pname:dstSubresource.layerCount# of each element of pname:pRegions must:
-    be less than or equal to the pname:arrayLayers specified in
-    slink:VkImageCreateInfo when pname:dstImage was created
-ifdef::VK_EXT_fragment_density_map[]
-  * [[VUID-{refpage}-dstImage-02545]]
-    pname:dstImage and pname:srcImage must: not have been created with
-    pname:flags containing ename:VK_IMAGE_CREATE_SUBSAMPLED_BIT_EXT
-endif::VK_EXT_fragment_density_map[]
-// Common Valid Usage
-  * [[VUID-{refpage}-srcImage-00240]]
-    If either pname:srcImage or pname:dstImage is of type
-    ename:VK_IMAGE_TYPE_3D, then for each element of pname:pRegions,
-    pname:srcSubresource.baseArrayLayer and
-    pname:dstSubresource.baseArrayLayer must: each be `0`, and
-    pname:srcSubresource.layerCount and pname:dstSubresource.layerCount
-    must: each be `1`
-  * [[VUID-{refpage}-aspectMask-00241]]
-    For each element of pname:pRegions, pname:srcSubresource.aspectMask
-    must: specify aspects present in pname:srcImage
-  * [[VUID-{refpage}-aspectMask-00242]]
-    For each element of pname:pRegions, pname:dstSubresource.aspectMask
-    must: specify aspects present in pname:dstImage
-  * [[VUID-{refpage}-srcOffset-00243]]
-    For each element of pname:pRegions, pname:srcOffsets[0].x and
-    pname:srcOffsets[1].x must: both be greater than or equal to `0` and
-    less than or equal to the width of the specified pname:srcSubresource of
-    pname:srcImage
-  * [[VUID-{refpage}-srcOffset-00244]]
-    For each element of pname:pRegions, pname:srcOffsets[0].y and
-    pname:srcOffsets[1].y must: both be greater than or equal to `0` and
-    less than or equal to the height of the specified pname:srcSubresource
-    of pname:srcImage
-  * [[VUID-{refpage}-srcImage-00245]]
-    If pname:srcImage is of type ename:VK_IMAGE_TYPE_1D, then for each
-    element of pname:pRegions, pname:srcOffsets[0].y must: be `0` and
-    pname:srcOffsets[1].y must: be `1`
-  * [[VUID-{refpage}-srcOffset-00246]]
-    For each element of pname:pRegions, pname:srcOffsets[0].z and
-    pname:srcOffsets[1].z must: both be greater than or equal to `0` and
-    less than or equal to the depth of the specified pname:srcSubresource of
-    pname:srcImage
-  * [[VUID-{refpage}-srcImage-00247]]
-    If pname:srcImage is of type ename:VK_IMAGE_TYPE_1D or
-    ename:VK_IMAGE_TYPE_2D, then for each element of pname:pRegions,
-    pname:srcOffsets[0].z must: be `0` and pname:srcOffsets[1].z must: be
-    `1`
-  * [[VUID-{refpage}-dstOffset-00248]]
-    For each element of pname:pRegions, pname:dstOffsets[0].x and
-    pname:dstOffsets[1].x must: both be greater than or equal to `0` and
-    less than or equal to the width of the specified pname:dstSubresource of
-    pname:dstImage
-  * [[VUID-{refpage}-dstOffset-00249]]
-    For each element of pname:pRegions, pname:dstOffsets[0].y and
-    pname:dstOffsets[1].y must: both be greater than or equal to `0` and
-    less than or equal to the height of the specified pname:dstSubresource
-    of pname:dstImage
-  * [[VUID-{refpage}-dstImage-00250]]
-    If pname:dstImage is of type ename:VK_IMAGE_TYPE_1D, then for each
-    element of pname:pRegions, pname:dstOffsets[0].y must: be `0` and
-    pname:dstOffsets[1].y must: be `1`
-  * [[VUID-{refpage}-dstOffset-00251]]
-    For each element of pname:pRegions, pname:dstOffsets[0].z and
-    pname:dstOffsets[1].z must: both be greater than or equal to `0` and
-    less than or equal to the depth of the specified pname:dstSubresource of
-    pname:dstImage
-  * [[VUID-{refpage}-dstImage-00252]]
-    If pname:dstImage is of type ename:VK_IMAGE_TYPE_1D or
-    ename:VK_IMAGE_TYPE_2D, then for each element of pname:pRegions,
-    pname:dstOffsets[0].z must: be `0` and pname:dstOffsets[1].z must: be
-    `1`
diff --git a/registry/vulkan/chapters/commonvalidity/buffer_copy_common.txt b/registry/vulkan/chapters/commonvalidity/buffer_copy_common.txt
deleted file mode 100644
index baf66ca..0000000
--- a/registry/vulkan/chapters/commonvalidity/buffer_copy_common.txt
+++ /dev/null
@@ -1,9 +0,0 @@
-// Copyright 2020-2021 The Khronos Group Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-// Common Valid Usage
-// Common to VkBufferCopy* struct
-  * [[VUID-{refpage}-size-01988]]
-    The pname:size must: be greater than `0`
-// Common Valid Usage
diff --git a/registry/vulkan/chapters/commonvalidity/buffer_image_copy_common.txt b/registry/vulkan/chapters/commonvalidity/buffer_image_copy_common.txt
deleted file mode 100644
index ae3b174..0000000
--- a/registry/vulkan/chapters/commonvalidity/buffer_image_copy_common.txt
+++ /dev/null
@@ -1,16 +0,0 @@
-// Copyright 2020-2021 The Khronos Group Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-// Common Valid Usage
-// Common to VkBufferImageCopy* struct
-  * [[VUID-{refpage}-bufferRowLength-00195]]
-    pname:bufferRowLength must: be `0`, or greater than or equal to the
-    pname:width member of pname:imageExtent
-  * [[VUID-{refpage}-bufferImageHeight-00196]]
-    pname:bufferImageHeight must: be `0`, or greater than or equal to the
-    pname:height member of pname:imageExtent
-  * [[VUID-{refpage}-aspectMask-00212]]
-    The pname:aspectMask member of pname:imageSubresource must: only have a
-    single bit set
-// Common Valid Usage
diff --git a/registry/vulkan/chapters/commonvalidity/buffer_memory_barrier_common.txt b/registry/vulkan/chapters/commonvalidity/buffer_memory_barrier_common.txt
deleted file mode 100644
index 5539cd9..0000000
--- a/registry/vulkan/chapters/commonvalidity/buffer_memory_barrier_common.txt
+++ /dev/null
@@ -1,46 +0,0 @@
-// Copyright 2019-2021 The Khronos Group Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-// Common Valid Usage
-// Common to VkBufferMemoryBarrier* structs
-  * [[VUID-{refpage}-offset-01187]]
-    pname:offset must: be less than the size of pname:buffer
-  * [[VUID-{refpage}-size-01188]]
-    If pname:size is not equal to ename:VK_WHOLE_SIZE, pname:size must: be
-    greater than `0`
-  * [[VUID-{refpage}-size-01189]]
-    If pname:size is not equal to ename:VK_WHOLE_SIZE, pname:size must: be
-    less than or equal to than the size of pname:buffer minus pname:offset
-  * [[VUID-{refpage}-buffer-01931]]
-    If pname:buffer is non-sparse then it must: be bound completely and
-    contiguously to a single sname:VkDeviceMemory object
-ifndef::VK_VERSION_1_1,VK_KHR_external_memory[]
-  * [[VUID-{refpage}-buffer-04086]]
-    If pname:buffer was created with a sharing mode of
-    ename:VK_SHARING_MODE_EXCLUSIVE, and pname:srcQueueFamilyIndex and
-    pname:dstQueueFamilyIndex are not equal, pname:srcQueueFamilyIndex and
-    pname:dstQueueFamilyIndex must: be valid queue families
-endif::VK_VERSION_1_1,VK_KHR_external_memory[]
-ifdef::VK_VERSION_1_1,VK_KHR_external_memory[]
-  * [[VUID-{refpage}-srcQueueFamilyIndex-04087]]
-    If pname:srcQueueFamilyIndex is not equal to pname:dstQueueFamilyIndex,
-    at least one must: not be a special queue family reserved for external
-    memory ownership transfers, as described in
-    <<synchronization-queue-transfers>>
-  * [[VUID-{refpage}-buffer-04088]]
-    If pname:buffer was created with a sharing mode of
-    ename:VK_SHARING_MODE_CONCURRENT, pname:srcQueueFamilyIndex and
-    pname:dstQueueFamilyIndex are not equal, and one of
-    pname:srcQueueFamilyIndex and pname:dstQueueFamilyIndex is one of the
-    special queue family values reserved for external memory transfers, the
-    other must: be ename:VK_QUEUE_FAMILY_IGNORED
-  * [[VUID-{refpage}-buffer-04089]]
-    If pname:buffer was created with a sharing mode of
-    ename:VK_SHARING_MODE_EXCLUSIVE, and pname:srcQueueFamilyIndex and
-    pname:dstQueueFamilyIndex are not equal, pname:srcQueueFamilyIndex and
-    pname:dstQueueFamilyIndex must: both be valid queue families, or one of
-    the special queue family values reserved for external memory transfers,
-    as described in <<synchronization-queue-transfers>>
-endif::VK_VERSION_1_1,VK_KHR_external_memory[]
-// Common Valid Usage
diff --git a/registry/vulkan/chapters/commonvalidity/build_acceleration_structure_common.txt b/registry/vulkan/chapters/commonvalidity/build_acceleration_structure_common.txt
deleted file mode 100644
index 7c0c4ac..0000000
--- a/registry/vulkan/chapters/commonvalidity/build_acceleration_structure_common.txt
+++ /dev/null
@@ -1,209 +0,0 @@
-// Copyright 2019-2021 The Khronos Group Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-// Common Valid Usage
-// Common to acceleration structure build commands
-  * [[VUID-{refpage}-mode-04628]]
-    The pname:mode member of each element of pname:pInfos must: be a valid
-    elink:VkBuildAccelerationStructureModeKHR value
-  * [[VUID-{refpage}-srcAccelerationStructure-04629]]
-    If the pname:srcAccelerationStructure member of any element of
-    pname:pInfos is not dlink:VK_NULL_HANDLE, the
-    pname:srcAccelerationStructure member must: be a valid
-    slink:VkAccelerationStructureKHR handle
-  * [[VUID-{refpage}-pInfos-04630]]
-    For each element of pname:pInfos, if its pname:mode member is
-    ename:VK_BUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR, its
-    pname:srcAccelerationStructure member must: not be dlink:VK_NULL_HANDLE
-  * [[VUID-{refpage}-pInfos-03403]]
-    The pname:srcAccelerationStructure member of any element of pname:pInfos
-    must: not be the same acceleration structure as the
-    pname:dstAccelerationStructure member of any other element of
-    pname:pInfos
-  * [[VUID-{refpage}-dstAccelerationStructure-03698]]
-    The pname:dstAccelerationStructure member of any element of pname:pInfos
-    must: not be the same acceleration structure as the
-    pname:dstAccelerationStructure member of any other element of
-    pname:pInfos
-  * [[VUID-{refpage}-dstAccelerationStructure-03800]]
-    The pname:dstAccelerationStructure member of any element of pname:pInfos
-    must: be a valid slink:VkAccelerationStructureKHR handle
-  * [[VUID-{refpage}-pInfos-03699]]
-    For each element of pname:pInfos, if its pname:type member is
-    ename:VK_ACCELERATION_STRUCTURE_TYPE_TOP_LEVEL_KHR, its
-    pname:dstAccelerationStructure member must: have been created with a
-    value of slink:VkAccelerationStructureCreateInfoKHR::pname:type equal to
-    either ename:VK_ACCELERATION_STRUCTURE_TYPE_TOP_LEVEL_KHR or
-    ename:VK_ACCELERATION_STRUCTURE_TYPE_GENERIC_KHR
-  * [[VUID-{refpage}-pInfos-03700]]
-    For each element of pname:pInfos, if its pname:type member is
-    ename:VK_ACCELERATION_STRUCTURE_TYPE_BOTTOM_LEVEL_KHR, its
-    pname:dstAccelerationStructure member must: have been created with a
-    value of slink:VkAccelerationStructureCreateInfoKHR::pname:type equal to
-    either ename:VK_ACCELERATION_STRUCTURE_TYPE_BOTTOM_LEVEL_KHR or
-    ename:VK_ACCELERATION_STRUCTURE_TYPE_GENERIC_KHR
-  * [[VUID-{refpage}-pInfos-03663]]
-    For each element of pname:pInfos, if its pname:mode member is
-    ename:VK_BUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR,
-    <<acceleration-structure-inactive-prims,inactive primitives>> in its
-    pname:srcAccelerationStructure member must: not be made active
-  * [[VUID-{refpage}-pInfos-03664]]
-    For each element of pname:pInfos, if its pname:mode member is
-    ename:VK_BUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR, active primitives
-    in its pname:srcAccelerationStructure member must: not be made
-    <<acceleration-structure-inactive-prims,inactive>>
-  * [[VUID-{refpage}-None-03407]]
-    The pname:dstAccelerationStructure member of any element of pname:pInfos
-    must: not be referenced by the pname:geometry.instances.data member of
-    any element of pname:pGeometries or pname:ppGeometries with a
-    pname:geometryType of ename:VK_GEOMETRY_TYPE_INSTANCES_KHR in any other
-    element of pname:pInfos
-  * [[VUID-{refpage}-dstAccelerationStructure-03701]]
-    The range of memory backing the pname:dstAccelerationStructure member of
-    any element of pname:pInfos that is accessed by this command must: not
-    overlap the memory backing the pname:srcAccelerationStructure member of
-    any other element of pname:pInfos with a pname:mode equal to
-    ename:VK_BUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR, which is accessed
-    by this command
-  * [[VUID-{refpage}-dstAccelerationStructure-03702]]
-    The range of memory backing the pname:dstAccelerationStructure member of
-    any element of pname:pInfos that is accessed by this command must: not
-    overlap the memory backing the pname:dstAccelerationStructure member of
-    any other element of pname:pInfos, which is accessed by this command
-  * [[VUID-{refpage}-dstAccelerationStructure-03703]]
-    The range of memory backing the pname:dstAccelerationStructure member of
-    any element of pname:pInfos that is accessed by this command must: not
-    overlap the memory backing the pname:scratchData member of any element
-    of pname:pInfos (including the same element), which is accessed by this
-    command
-  * [[VUID-{refpage}-scratchData-03704]]
-    The range of memory backing the pname:scratchData member of any element
-    of pname:pInfos that is accessed by this command must: not overlap the
-    memory backing the pname:scratchData member of any other element of
-    pname:pInfos, which is accessed by this command
-  * [[VUID-{refpage}-scratchData-03705]]
-    The range of memory backing the pname:scratchData member of any element
-    of pname:pInfos that is accessed by this command must: not overlap the
-    memory backing the pname:srcAccelerationStructure member of any element
-    of pname:pInfos with a pname:mode equal to
-    ename:VK_BUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR (including the
-    same element), which is accessed by this command
-  * [[VUID-{refpage}-dstAccelerationStructure-03706]]
-    The range of memory backing the pname:dstAccelerationStructure member of
-    any element of pname:pInfos that is accessed by this command must: not
-    overlap the memory backing any acceleration structure referenced by the
-    pname:geometry.instances.data member of any element of pname:pGeometries
-    or pname:ppGeometries with a pname:geometryType of
-    ename:VK_GEOMETRY_TYPE_INSTANCES_KHR in any other element of
-    pname:pInfos, which is accessed by this command
-  * [[VUID-{refpage}-pInfos-03667]]
-    For each element of pname:pInfos, if its pname:mode member is
-    ename:VK_BUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR, its
-    pname:srcAccelerationStructure member must: have previously been
-    constructed with
-    ename:VK_BUILD_ACCELERATION_STRUCTURE_ALLOW_UPDATE_BIT_KHR set in
-    slink:VkAccelerationStructureBuildGeometryInfoKHR::pname:flags in the
-    build
-  * [[VUID-{refpage}-pInfos-03668]]
-    For each element of pname:pInfos, if its pname:mode member is
-    ename:VK_BUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR, its
-    pname:srcAccelerationStructure and pname:dstAccelerationStructure
-    members must: either be the same slink:VkAccelerationStructureKHR, or
-    not have any <<resources-memory-aliasing, memory aliasing>>
-  * [[VUID-{refpage}-pInfos-03758]]
-    For each element of pname:pInfos, if its pname:mode member is
-    ename:VK_BUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR, its
-    pname:geometryCount member must: have the same value which was specified
-    when pname:srcAccelerationStructure was last built
-  * [[VUID-{refpage}-pInfos-03759]]
-    For each element of pname:pInfos, if its pname:mode member is
-    ename:VK_BUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR, its pname:flags
-    member must: have the same value which was specified when
-    pname:srcAccelerationStructure was last built
-  * [[VUID-{refpage}-pInfos-03760]]
-    For each element of pname:pInfos, if its pname:mode member is
-    ename:VK_BUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR, its pname:type
-    member must: have the same value which was specified when
-    pname:srcAccelerationStructure was last built
-  * [[VUID-{refpage}-pInfos-03761]]
-    For each element of pname:pInfos, if its pname:mode member is
-    ename:VK_BUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR, then for each
-    sname:VkAccelerationStructureGeometryKHR structure referred to by its
-    pname:pGeometries or pname:ppGeometries members, its pname:geometryType
-    member must: have the same value which was specified when
-    pname:srcAccelerationStructure was last built
-  * [[VUID-{refpage}-pInfos-03762]]
-    For each element of pname:pInfos, if its pname:mode member is
-    ename:VK_BUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR, then for each
-    sname:VkAccelerationStructureGeometryKHR structure referred to by its
-    pname:pGeometries or pname:ppGeometries members, its pname:flags member
-    must: have the same value which was specified when
-    pname:srcAccelerationStructure was last built
-  * [[VUID-{refpage}-pInfos-03763]]
-    For each element of pname:pInfos, if its pname:mode member is
-    ename:VK_BUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR, then for each
-    sname:VkAccelerationStructureGeometryKHR structure referred to by its
-    pname:pGeometries or pname:ppGeometries members, if pname:geometryType
-    is ename:VK_GEOMETRY_TYPE_TRIANGLES_KHR, its
-    pname:geometry.triangles.vertexFormat member must: have the same value
-    which was specified when pname:srcAccelerationStructure was last built
-  * [[VUID-{refpage}-pInfos-03764]]
-    For each element of pname:pInfos, if its pname:mode member is
-    ename:VK_BUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR, then for each
-    sname:VkAccelerationStructureGeometryKHR structure referred to by its
-    pname:pGeometries or pname:ppGeometries members, if pname:geometryType
-    is ename:VK_GEOMETRY_TYPE_TRIANGLES_KHR, its
-    pname:geometry.triangles.maxVertex member must: have the same value
-    which was specified when pname:srcAccelerationStructure was last built
-  * [[VUID-{refpage}-pInfos-03765]]
-    For each element of pname:pInfos, if its pname:mode member is
-    ename:VK_BUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR, then for each
-    sname:VkAccelerationStructureGeometryKHR structure referred to by its
-    pname:pGeometries or pname:ppGeometries members, if pname:geometryType
-    is ename:VK_GEOMETRY_TYPE_TRIANGLES_KHR, its
-    pname:geometry.triangles.indexType member must: have the same value
-    which was specified when pname:srcAccelerationStructure was last built
-  * [[VUID-{refpage}-pInfos-03766]]
-    For each element of pname:pInfos, if its pname:mode member is
-    ename:VK_BUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR, then for each
-    sname:VkAccelerationStructureGeometryKHR structure referred to by its
-    pname:pGeometries or pname:ppGeometries members, if pname:geometryType
-    is ename:VK_GEOMETRY_TYPE_TRIANGLES_KHR, if its
-    pname:geometry.triangles.transformData address was `NULL` when
-    pname:srcAccelerationStructure was last built, then it must: be `NULL`
-  * [[VUID-{refpage}-pInfos-03767]]
-    For each element of pname:pInfos, if its pname:mode member is
-    ename:VK_BUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR, then for each
-    sname:VkAccelerationStructureGeometryKHR structure referred to by its
-    pname:pGeometries or pname:ppGeometries members, if pname:geometryType
-    is ename:VK_GEOMETRY_TYPE_TRIANGLES_KHR, if its
-    pname:geometry.triangles.transformData address was not `NULL` when
-    pname:srcAccelerationStructure was last built, then it must: not be
-    `NULL`
-  * [[VUID-{refpage}-pInfos-03768]]
-    For each element of pname:pInfos, if its pname:mode member is
-    ename:VK_BUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR, then for each
-    sname:VkAccelerationStructureGeometryKHR structure referred to by its
-    pname:pGeometries or pname:ppGeometries members, if pname:geometryType
-    is ename:VK_GEOMETRY_TYPE_TRIANGLES_KHR, and
-    pname:geometry.triangles.indexType is not ename:VK_INDEX_TYPE_NONE_KHR,
-    then the value of each index referenced must: be the same as the
-    corresponding index value when pname:srcAccelerationStructure was last
-    built
-  * [[VUID-{refpage}-primitiveCount-03769]]
-    For each sname:VkAccelerationStructureBuildRangeInfoKHR referenced by
-    this command, its pname:primitiveCount member must: have the same value
-    which was specified when pname:srcAccelerationStructure was last built
-  * [[VUID-{refpage}-firstVertex-03770]]
-    For each sname:VkAccelerationStructureBuildRangeInfoKHR referenced by
-    this command, if the corresponding geometry uses indices, its
-    pname:firstVertex member must: have the same value which was specified
-    when pname:srcAccelerationStructure was last built
-  * [[VUID-{refpage}-pInfos-03801]]
-    For each element of pname:pInfos[i].pname:pGeometries or
-    pname:pInfos[i].pname:ppGeometries with a pname:geometryType of
-    ename:VK_GEOMETRY_TYPE_INSTANCES_KHR, the corresponding
-    {maxinstancecheck} must: be less than or equal to
-    slink:VkPhysicalDeviceAccelerationStructurePropertiesKHR::pname:maxInstanceCount
-// Common Valid Usage
diff --git a/registry/vulkan/chapters/commonvalidity/build_acceleration_structure_device_common.txt b/registry/vulkan/chapters/commonvalidity/build_acceleration_structure_device_common.txt
deleted file mode 100644
index 0ac8963..0000000
--- a/registry/vulkan/chapters/commonvalidity/build_acceleration_structure_device_common.txt
+++ /dev/null
@@ -1,189 +0,0 @@
-// Copyright 2019-2021 The Khronos Group Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-// Common Valid Usage
-// Common to acceleration structure build commands executed on the device
-  * [[VUID-{refpage}-pInfos-03707]]
-    For each element of pname:pInfos, the pname:buffer used to create its
-    pname:dstAccelerationStructure member must: be bound to device memory
-  * [[VUID-{refpage}-pInfos-03708]]
-    For each element of pname:pInfos, if its pname:mode member is
-    ename:VK_BUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR the pname:buffer
-    used to create its pname:srcAccelerationStructure member must: be bound
-    to device memory
-  * [[VUID-{refpage}-pInfos-03709]]
-    For each element of pname:pInfos, the pname:buffer used to create each
-    acceleration structure referenced by the pname:geometry.instances.data
-    member of any element of pname:pGeometries or pname:ppGeometries with a
-    pname:geometryType of ename:VK_GEOMETRY_TYPE_INSTANCES_KHR must: be
-    bound to device memory
-  * [[VUID-{refpage}-pInfos-03671]]
-    If pname:pInfos[i].pname:mode is
-    ename:VK_BUILD_ACCELERATION_STRUCTURE_MODE_BUILD_KHR, all addresses
-    between pname:pInfos[i].pname:scratchData.deviceAddress and
-    pname:pInfos[i].pname:scratchData.deviceAddress {plus} N - 1 must: be in
-    the buffer device address range of the same buffer, where N is given by
-    the pname:buildScratchSize member of the
-    slink:VkAccelerationStructureBuildSizesInfoKHR structure returned from a
-    call to flink:vkGetAccelerationStructureBuildSizesKHR with an identical
-    slink:VkAccelerationStructureBuildGeometryInfoKHR structure and
-    primitive count
-  * [[VUID-{refpage}-pInfos-03672]]
-    If pname:pInfos[i].pname:mode is
-    ename:VK_BUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR, all addresses
-    between pname:pInfos[i].pname:scratchData.deviceAddress and
-    pname:pInfos[i].pname:scratchData.deviceAddress {plus} N - 1 must: be in
-    the buffer device address range of the same buffer, where N is given by
-    the pname:updateScratchSize member of the
-    slink:VkAccelerationStructureBuildSizesInfoKHR structure returned from a
-    call to flink:vkGetAccelerationStructureBuildSizesKHR with an identical
-    slink:VkAccelerationStructureBuildGeometryInfoKHR structure and
-    primitive count
-  * [[VUID-{refpage}-geometry-03673]]
-    The buffers from which the buffer device addresses for all of the
-    pname:geometry.triangles.vertexData, pname:geometry.triangles.indexData,
-    pname:geometry.triangles.transformData, pname:geometry.aabbs.data, and
-    pname:geometry.instances.data members of all
-    pname:pInfos[i].pname:pGeometries and pname:pInfos[i].pname:ppGeometries
-    are queried must: have been created with the
-    ename:VK_BUFFER_USAGE_ACCELERATION_STRUCTURE_BUILD_INPUT_READ_ONLY_BIT_KHR
-    usage flag
-  * [[VUID-{refpage}-pInfos-03674]]
-    The buffer from which the buffer device address
-    pname:pInfos[i].pname:scratchData.deviceAddress is queried must: have
-    been created with ename:VK_BUFFER_USAGE_STORAGE_BUFFER_BIT usage flag
-  * [[VUID-{refpage}-pInfos-03802]]
-    For each element of pname:pInfos, its pname:scratchData.deviceAddress
-    member must: be a valid device address obtained from
-    flink:vkGetBufferDeviceAddress
-  * [[VUID-{refpage}-pInfos-03803]]
-    For each element of pname:pInfos, if pname:scratchData.deviceAddress is
-    the address of a non-sparse buffer then it must: be bound completely and
-    contiguously to a single slink:VkDeviceMemory object
-  * [[VUID-{refpage}-pInfos-03710]]
-    For each element of pname:pInfos, its pname:scratchData.deviceAddress
-    member must: be a multiple of
-    slink:VkPhysicalDeviceAccelerationStructurePropertiesKHR::pname:minAccelerationStructureScratchOffsetAlignment
-  * [[VUID-{refpage}-pInfos-03804]]
-    For any element of pname:pInfos[i].pname:pGeometries or
-    pname:pInfos[i].pname:ppGeometries with a pname:geometryType of
-    ename:VK_GEOMETRY_TYPE_TRIANGLES_KHR,
-    pname:geometry.triangles.vertexData.deviceAddress must: be a valid
-    device address obtained from flink:vkGetBufferDeviceAddress
-  * [[VUID-{refpage}-pInfos-03805]]
-    For any element of pname:pInfos[i].pname:pGeometries or
-    pname:pInfos[i].pname:ppGeometries with a pname:geometryType of
-    ename:VK_GEOMETRY_TYPE_TRIANGLES_KHR, if
-    pname:geometry.triangles.vertexData.deviceAddress is the address of a
-    non-sparse buffer then it must: be bound completely and contiguously to
-    a single slink:VkDeviceMemory object
-  * [[VUID-{refpage}-pInfos-03711]]
-    For any element of pname:pInfos[i].pname:pGeometries or
-    pname:pInfos[i].pname:ppGeometries with a pname:geometryType of
-    ename:VK_GEOMETRY_TYPE_TRIANGLES_KHR,
-    pname:geometry.triangles.vertexData.deviceAddress must: be aligned to
-    the size in bytes of the smallest component of the format in
-    pname:vertexFormat
-  * [[VUID-{refpage}-pInfos-03806]]
-    For any element of pname:pInfos[i].pname:pGeometries or
-    pname:pInfos[i].pname:ppGeometries with a pname:geometryType of
-    ename:VK_GEOMETRY_TYPE_TRIANGLES_KHR, if
-    pname:geometry.triangles.indexType is not ename:VK_INDEX_TYPE_NONE_KHR,
-    pname:geometry.triangles.indexData.deviceAddress must: be a valid device
-    address obtained from flink:vkGetBufferDeviceAddress
-  * [[VUID-{refpage}-pInfos-03807]]
-    For any element of pname:pInfos[i].pname:pGeometries or
-    pname:pInfos[i].pname:ppGeometries with a pname:geometryType of
-    ename:VK_GEOMETRY_TYPE_TRIANGLES_KHR, if
-    pname:geometry.triangles.indexType is not ename:VK_INDEX_TYPE_NONE_KHR,
-    if pname:geometry.triangles.indexData.deviceAddress is the address of a
-    non-sparse buffer then it must: be bound completely and contiguously to
-    a single slink:VkDeviceMemory object
-  * [[VUID-{refpage}-pInfos-03712]]
-    For any element of pname:pInfos[i].pname:pGeometries or
-    pname:pInfos[i].pname:ppGeometries with a pname:geometryType of
-    ename:VK_GEOMETRY_TYPE_TRIANGLES_KHR, and with
-    pname:geometry.triangles.indexType not equal to
-    ename:VK_INDEX_TYPE_NONE_KHR,
-    pname:geometry.triangles.indexData.deviceAddress must: be aligned to the
-    size in bytes of the type in pname:indexType
-  * [[VUID-{refpage}-pInfos-03808]]
-    For any element of pname:pInfos[i].pname:pGeometries or
-    pname:pInfos[i].pname:ppGeometries with a pname:geometryType of
-    ename:VK_GEOMETRY_TYPE_TRIANGLES_KHR, if
-    pname:geometry.triangles.transformData.deviceAddress is not `0`, it
-    must: be a valid device address obtained from
-    flink:vkGetBufferDeviceAddress
-  * [[VUID-{refpage}-pInfos-03809]]
-    For any element of pname:pInfos[i].pname:pGeometries or
-    pname:pInfos[i].pname:ppGeometries with a pname:geometryType of
-    ename:VK_GEOMETRY_TYPE_TRIANGLES_KHR, if
-    pname:geometry.triangles.transformData.deviceAddress is the address of a
-    non-sparse buffer then it must: be bound completely and contiguously to
-    a single slink:VkDeviceMemory object
-  * [[VUID-{refpage}-pInfos-03810]]
-    For any element of pname:pInfos[i].pname:pGeometries or
-    pname:pInfos[i].pname:ppGeometries with a pname:geometryType of
-    ename:VK_GEOMETRY_TYPE_TRIANGLES_KHR, if
-    pname:geometry.triangles.transformData.deviceAddress is not `0`, it
-    must: be aligned to `16` bytes
-  * [[VUID-{refpage}-pInfos-03811]]
-    For any element of pname:pInfos[i].pname:pGeometries or
-    pname:pInfos[i].pname:ppGeometries with a pname:geometryType of
-    ename:VK_GEOMETRY_TYPE_AABBS_KHR,
-    pname:geometry.aabbs.data.deviceAddress must: be a valid device address
-    obtained from flink:vkGetBufferDeviceAddress
-  * [[VUID-{refpage}-pInfos-03812]]
-    For any element of pname:pInfos[i].pname:pGeometries or
-    pname:pInfos[i].pname:ppGeometries with a pname:geometryType of
-    ename:VK_GEOMETRY_TYPE_AABBS_KHR, if
-    pname:geometry.aabbs.data.deviceAddress is the address of a non-sparse
-    buffer then it must: be bound completely and contiguously to a single
-    slink:VkDeviceMemory object
-  * [[VUID-{refpage}-pInfos-03714]]
-    For any element of pname:pInfos[i].pname:pGeometries or
-    pname:pInfos[i].pname:ppGeometries with a pname:geometryType of
-    ename:VK_GEOMETRY_TYPE_AABBS_KHR,
-    pname:geometry.aabbs.data.deviceAddress must: be aligned to `8` bytes
-  * [[VUID-{refpage}-pInfos-03715]]
-    For any element of pname:pInfos[i].pname:pGeometries or
-    pname:pInfos[i].pname:ppGeometries with a pname:geometryType of
-    ename:VK_GEOMETRY_TYPE_INSTANCES_KHR, if pname:geometry.arrayOfPointers
-    is ename:VK_FALSE, pname:geometry.instances.data.deviceAddress must: be
-    aligned to `16` bytes
-  * [[VUID-{refpage}-pInfos-03716]]
-    For any element of pname:pInfos[i].pname:pGeometries or
-    pname:pInfos[i].pname:ppGeometries with a pname:geometryType of
-    ename:VK_GEOMETRY_TYPE_INSTANCES_KHR, if pname:geometry.arrayOfPointers
-    is ename:VK_TRUE, pname:geometry.instances.data.deviceAddress must: be
-    aligned to `8` bytes
-  * [[VUID-{refpage}-pInfos-03717]]
-    For any element of pname:pInfos[i].pname:pGeometries or
-    pname:pInfos[i].pname:ppGeometries with a pname:geometryType of
-    ename:VK_GEOMETRY_TYPE_INSTANCES_KHR, if pname:geometry.arrayOfPointers
-    is ename:VK_TRUE, each element of
-    pname:geometry.instances.data.deviceAddress in device memory must: be
-    aligned to `16` bytes
-  * [[VUID-{refpage}-pInfos-03813]]
-    For any element of pname:pInfos[i].pname:pGeometries or
-    pname:pInfos[i].pname:ppGeometries with a pname:geometryType of
-    ename:VK_GEOMETRY_TYPE_INSTANCES_KHR,
-    pname:geometry.instances.data.deviceAddress must: be a valid device
-    address obtained from flink:vkGetBufferDeviceAddress
-  * [[VUID-{refpage}-pInfos-03814]]
-    For any element of pname:pInfos[i].pname:pGeometries or
-    pname:pInfos[i].pname:ppGeometries with a pname:geometryType of
-    ename:VK_GEOMETRY_TYPE_INSTANCES_KHR, if
-    pname:geometry.instances.data.deviceAddress is the address of a
-    non-sparse buffer then it must: be bound completely and contiguously to
-    a single slink:VkDeviceMemory object
-  * [[VUID-{refpage}-pInfos-03815]]
-    For any element of pname:pInfos[i].pname:pGeometries or
-    pname:pInfos[i].pname:ppGeometries with a pname:geometryType of
-    ename:VK_GEOMETRY_TYPE_INSTANCES_KHR, each
-    slink:VkAccelerationStructureInstanceKHR::pname:accelerationStructureReference
-    value in pname:geometry.instances.data.deviceAddress must: be a valid
-    device address containing a value obtained from
-    flink:vkGetAccelerationStructureDeviceAddressKHR
-// Common Valid Usage
diff --git a/registry/vulkan/chapters/commonvalidity/build_acceleration_structure_nonindirect_common.txt b/registry/vulkan/chapters/commonvalidity/build_acceleration_structure_nonindirect_common.txt
deleted file mode 100644
index 52f7878..0000000
--- a/registry/vulkan/chapters/commonvalidity/build_acceleration_structure_nonindirect_common.txt
+++ /dev/null
@@ -1,21 +0,0 @@
-// Copyright 2019-2021 The Khronos Group Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-// Common Valid Usage
-// Common to acceleration structure build commands
-  * [[VUID-{refpage}-pInfos-03675]]
-    For each pname:pInfos[i], pname:dstAccelerationStructure must: have been
-    created with a value of
-    slink:VkAccelerationStructureCreateInfoKHR::pname:size greater than or
-    equal to the memory size required by the build operation, as returned by
-    flink:vkGetAccelerationStructureBuildSizesKHR with [eq]#pname:pBuildInfo
-    = pname:pInfos[i]# and with each element of the
-    pname:pMaxPrimitiveCounts array greater than or equal to the equivalent
-    pname:ppBuildRangeInfos[i][j].pname:primitiveCount values for code:j in
-    [eq]#[0,pname:pInfos[i].pname:geometryCount)#
-  * [[VUID-{refpage}-ppBuildRangeInfos-03676]]
-    Each element of pname:ppBuildRangeInfos[i] must: be a valid pointer to
-    an array of pname:pInfos[i].pname:geometryCount
-    sname:VkAccelerationStructureBuildRangeInfoKHR structures
-// Common Valid Usage
diff --git a/registry/vulkan/chapters/commonvalidity/copy_acceleration_structure_common.txt b/registry/vulkan/chapters/commonvalidity/copy_acceleration_structure_common.txt
deleted file mode 100644
index cfa7eb8..0000000
--- a/registry/vulkan/chapters/commonvalidity/copy_acceleration_structure_common.txt
+++ /dev/null
@@ -1,25 +0,0 @@
-// Copyright 2019-2021 The Khronos Group Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-// Common Valid Usage
-// Common to acceleration structure copy commands
-  * [[VUID-{refpage}-mode-03410]]
-    pname:mode must: be
-    ename:VK_COPY_ACCELERATION_STRUCTURE_MODE_COMPACT_KHR or
-    ename:VK_COPY_ACCELERATION_STRUCTURE_MODE_CLONE_KHR
-  * [[VUID-{refpage}-src-04963]]
-    The source acceleration structure pname:src must: have been constructed
-    prior to the execution of this command
-  * [[VUID-{refpage}-src-03411]]
-    If pname:mode is ename:VK_COPY_ACCELERATION_STRUCTURE_MODE_COMPACT_KHR,
-    pname:src must: have been constructed with
-    ename:VK_BUILD_ACCELERATION_STRUCTURE_ALLOW_COMPACTION_BIT_KHR in the
-    build
-  * [[VUID-{refpage}-buffer-03718]]
-    The pname:buffer used to create pname:src must: be bound to device
-    memory
-  * [[VUID-{refpage}-buffer-03719]]
-    The pname:buffer used to create pname:dst must: be bound to device
-    memory
-// Common Valid Usage
diff --git a/registry/vulkan/chapters/commonvalidity/copy_buffer_command_buffer_common.txt b/registry/vulkan/chapters/commonvalidity/copy_buffer_command_buffer_common.txt
deleted file mode 100644
index 5826e44..0000000
--- a/registry/vulkan/chapters/commonvalidity/copy_buffer_command_buffer_common.txt
+++ /dev/null
@@ -1,21 +0,0 @@
-// Copyright 2020-2021 The Khronos Group Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-// Common Valid Usage
-// Common to VkCmdCopyBuffer* command buffer
-ifdef::VK_VERSION_1_1[]
-  * [[VUID-{refpage}-commandBuffer-01822]]
-    If pname:commandBuffer is an unprotected command buffer and
-    <<limits-protectedNoFault, pname:protectedNoFault>> is not supported,
-    pname:srcBuffer must: not be a protected buffer
-  * [[VUID-{refpage}-commandBuffer-01823]]
-    If pname:commandBuffer is an unprotected command buffer and
-    <<limits-protectedNoFault, pname:protectedNoFault>> is not supported,
-    pname:dstBuffer must: not be a protected buffer
-  * [[VUID-{refpage}-commandBuffer-01824]]
-    If pname:commandBuffer is a protected command buffer and
-    <<limits-protectedNoFault, pname:protectedNoFault>> is not supported,
-    pname:dstBuffer must: not be an unprotected buffer
-endif::VK_VERSION_1_1[]
-// Common Valid Usage
diff --git a/registry/vulkan/chapters/commonvalidity/copy_buffer_common.txt b/registry/vulkan/chapters/commonvalidity/copy_buffer_common.txt
deleted file mode 100644
index 3d367f5..0000000
--- a/registry/vulkan/chapters/commonvalidity/copy_buffer_common.txt
+++ /dev/null
@@ -1,35 +0,0 @@
-// Copyright 2020-2021 The Khronos Group Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-// Common Valid Usage
-// Common to VkCmdCopyBuffer* commands
-  * [[VUID-{refpage}-srcOffset-00113]]
-    The pname:srcOffset member of each element of pname:pRegions must: be
-    less than the size of pname:srcBuffer
-  * [[VUID-{refpage}-dstOffset-00114]]
-    The pname:dstOffset member of each element of pname:pRegions must: be
-    less than the size of pname:dstBuffer
-  * [[VUID-{refpage}-size-00115]]
-    The pname:size member of each element of pname:pRegions must: be less
-    than or equal to the size of pname:srcBuffer minus pname:srcOffset
-  * [[VUID-{refpage}-size-00116]]
-    The pname:size member of each element of pname:pRegions must: be less
-    than or equal to the size of pname:dstBuffer minus pname:dstOffset
-  * [[VUID-{refpage}-pRegions-00117]]
-    The union of the source regions, and the union of the destination
-    regions, specified by the elements of pname:pRegions, must: not overlap
-    in memory
-  * [[VUID-{refpage}-srcBuffer-00118]]
-    pname:srcBuffer must: have been created with
-    ename:VK_BUFFER_USAGE_TRANSFER_SRC_BIT usage flag
-  * [[VUID-{refpage}-srcBuffer-00119]]
-    If pname:srcBuffer is non-sparse then it must: be bound completely and
-    contiguously to a single sname:VkDeviceMemory object
-  * [[VUID-{refpage}-dstBuffer-00120]]
-    pname:dstBuffer must: have been created with
-    ename:VK_BUFFER_USAGE_TRANSFER_DST_BIT usage flag
-  * [[VUID-{refpage}-dstBuffer-00121]]
-    If pname:dstBuffer is non-sparse then it must: be bound completely and
-    contiguously to a single sname:VkDeviceMemory object
-// Common Valid Usage
diff --git a/registry/vulkan/chapters/commonvalidity/copy_buffer_to_image_command_buffer_common.txt b/registry/vulkan/chapters/commonvalidity/copy_buffer_to_image_command_buffer_common.txt
deleted file mode 100644
index 7c9f305..0000000
--- a/registry/vulkan/chapters/commonvalidity/copy_buffer_to_image_command_buffer_common.txt
+++ /dev/null
@@ -1,21 +0,0 @@
-// Copyright 2020-2021 The Khronos Group Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-// Common Valid Usage
-// Common to VkCmdCopyBufferToImage* command buffer
-ifdef::VK_VERSION_1_1[]
-  * [[VUID-{refpage}-commandBuffer-01828]]
-    If pname:commandBuffer is an unprotected command buffer and
-    <<limits-protectedNoFault, pname:protectedNoFault>> is not supported,
-    pname:srcBuffer must: not be a protected buffer
-  * [[VUID-{refpage}-commandBuffer-01829]]
-    If pname:commandBuffer is an unprotected command buffer and
-    <<limits-protectedNoFault, pname:protectedNoFault>> is not supported,
-    pname:dstImage must: not be a protected image
-  * [[VUID-{refpage}-commandBuffer-01830]]
-    If pname:commandBuffer is a protected command buffer and
-    <<limits-protectedNoFault, pname:protectedNoFault>> is not supported,
-    pname:dstImage must: not be an unprotected image
-endif::VK_VERSION_1_1[]
-// Common Valid Usage
diff --git a/registry/vulkan/chapters/commonvalidity/copy_buffer_to_image_common.txt b/registry/vulkan/chapters/commonvalidity/copy_buffer_to_image_common.txt
deleted file mode 100644
index d755095..0000000
--- a/registry/vulkan/chapters/commonvalidity/copy_buffer_to_image_common.txt
+++ /dev/null
@@ -1,82 +0,0 @@
-// Copyright 2020-2021 The Khronos Group Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-// Common Valid Usage
-// Common to VkCmdCopyBufferToImage* commands
-  * [[VUID-{refpage}-pRegions-00171]]
-    pname:srcBuffer must: be large enough to contain all buffer locations
-    that are accessed according to <<copies-buffers-images-addressing,Buffer
-    and Image Addressing>>, for each element of pname:pRegions
-  * [[VUID-{refpage}-pRegions-00173]]
-    The union of all source regions, and the union of all destination
-    regions, specified by the elements of pname:pRegions, must: not overlap
-    in memory
-  * [[VUID-{refpage}-srcBuffer-00174]]
-    pname:srcBuffer must: have been created with
-    ename:VK_BUFFER_USAGE_TRANSFER_SRC_BIT usage flag
-ifdef::VK_VERSION_1_1,VK_KHR_maintenance1[]
-  * [[VUID-{refpage}-dstImage-01997]]
-    The <<resources-image-format-features,format features>> of
-    pname:dstImage must: contain ename:VK_FORMAT_FEATURE_TRANSFER_DST_BIT
-endif::VK_VERSION_1_1,VK_KHR_maintenance1[]
-  * [[VUID-{refpage}-srcBuffer-00176]]
-    If pname:srcBuffer is non-sparse then it must: be bound completely and
-    contiguously to a single sname:VkDeviceMemory object
-  * [[VUID-{refpage}-dstImage-00177]]
-    pname:dstImage must: have been created with
-    ename:VK_IMAGE_USAGE_TRANSFER_DST_BIT usage flag
-  * [[VUID-{refpage}-dstImage-00178]]
-    If pname:dstImage is non-sparse then it must: be bound completely and
-    contiguously to a single sname:VkDeviceMemory object
-  * [[VUID-{refpage}-dstImage-00179]]
-    pname:dstImage must: have a sample count equal to
-    ename:VK_SAMPLE_COUNT_1_BIT
-  * [[VUID-{refpage}-dstImageLayout-00180]]
-    pname:dstImageLayout must: specify the layout of the image subresources
-    of pname:dstImage specified in pname:pRegions at the time this command
-    is executed on a sname:VkDevice
-ifndef::VK_KHR_shared_presentable_image[]
-  * [[VUID-{refpage}-dstImageLayout-00181]]
-    pname:dstImageLayout must: be ename:VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL
-    or ename:VK_IMAGE_LAYOUT_GENERAL
-endif::VK_KHR_shared_presentable_image[]
-ifdef::VK_KHR_shared_presentable_image[]
-  * [[VUID-{refpage}-dstImageLayout-01396]]
-    pname:dstImageLayout must: be
-    ename:VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL,
-    ename:VK_IMAGE_LAYOUT_GENERAL, or
-    ename:VK_IMAGE_LAYOUT_SHARED_PRESENT_KHR
-endif::VK_KHR_shared_presentable_image[]
-  * [[VUID-{refpage}-imageSubresource-01701]]
-    The pname:imageSubresource.mipLevel member of each element of
-    pname:pRegions must: be less than the pname:mipLevels specified in
-    slink:VkImageCreateInfo when pname:dstImage was created
-  * [[VUID-{refpage}-imageSubresource-01702]]
-    The [eq]#pname:imageSubresource.baseArrayLayer {plus}
-    pname:imageSubresource.layerCount# of each element of pname:pRegions
-    must: be less than or equal to the pname:arrayLayers specified in
-    slink:VkImageCreateInfo when pname:dstImage was created
-  * [[VUID-{refpage}-imageOffset-01793]]
-    The pname:imageOffset and pname:imageExtent members of each element of
-    pname:pRegions must: respect the image transfer granularity requirements
-    of pname:commandBuffer's command pool's queue family, as described in
-    slink:VkQueueFamilyProperties
-ifdef::VK_EXT_fragment_density_map[]
-  * [[VUID-{refpage}-dstImage-02543]]
-    pname:dstImage must: not have been created with pname:flags containing
-    ename:VK_IMAGE_CREATE_SUBSAMPLED_BIT_EXT
-endif::VK_EXT_fragment_density_map[]
-ifndef::VK_EXT_depth_range_unrestricted[]
-  * [[VUID-{refpage}-None-00214]]
-    For each element of pname:pRegions whose pname:imageSubresource contains
-    a depth aspect, the data in pname:srcBuffer must: be in the range
-    [eq]#[0,1]#
-endif::VK_EXT_depth_range_unrestricted[]
-  * [[VUID-{refpage}-commandBuffer-04477]]
-    If the queue family used to create the slink:VkCommandPool which
-    pname:commandBuffer was allocated from does not support
-    ename:VK_QUEUE_GRAPHICS_BIT, for each element of pname:pRegions, the
-    pname:aspectMask member of pname:imageSubresource must: not be
-    ename:VK_IMAGE_ASPECT_DEPTH_BIT or ename:VK_IMAGE_ASPECT_STENCIL_BIT
-// Common Valid Usage
diff --git a/registry/vulkan/chapters/commonvalidity/copy_bufferimage_to_imagebuffer_common.txt b/registry/vulkan/chapters/commonvalidity/copy_bufferimage_to_imagebuffer_common.txt
deleted file mode 100644
index ce6d0f7..0000000
--- a/registry/vulkan/chapters/commonvalidity/copy_bufferimage_to_imagebuffer_common.txt
+++ /dev/null
@@ -1,114 +0,0 @@
-// Copyright 2020-2021 The Khronos Group Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-// Common Valid Usage
-// Common to commands copying from images to buffers, or buffers to images
-// This relies on an additional attribute {imageparam} set by the command
-// which includes this file, specifying the name of the source or
-// destination image.
-
-ifndef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
-  * [[VUID-{refpage}-bufferOffset-00193]]
-    If {imageparam} does not have a depth/stencil format, then for each
-    element of pname:pRegions, pname:bufferOffset must: be a multiple of the
-    format's texel block size
-endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
-ifdef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
-  * [[VUID-{refpage}-bufferOffset-01558]]
-    If {imageparam} does not have either a depth/stencil or a
-    <<formats-requiring-sampler-ycbcr-conversion,multi-planar format>>, then
-    for each element of pname:pRegions, pname:bufferOffset must: be a
-    multiple of the format's texel block size
-  * [[VUID-{refpage}-bufferOffset-01559]]
-    If {imageparam} has a
-    <<formats-requiring-sampler-ycbcr-conversion,multi-planar format>>, then
-    for each element of pname:pRegions, pname:bufferOffset must: be a
-    multiple of the element size of the compatible format for the format and
-    the pname:aspectMask of the pname:imageSubresource as defined in
-    <<formats-compatible-planes>>
-endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
-  * [[VUID-{refpage}-srcImage-00199]]
-    If {imageparam} is of type ename:VK_IMAGE_TYPE_1D, then for each element
-    of pname:pRegions, pname:imageOffset.y must: be `0` and
-    pname:imageExtent.height must: be `1`
-  * [[VUID-{refpage}-imageOffset-00200]]
-    For each element of pname:pRegions, pname:imageOffset.z and
-    [eq]#(pname:imageExtent.depth {plus} pname:imageOffset.z)# must: both be
-    greater than or equal to `0` and less than or equal to the depth of the
-    specified pname:imageSubresource of {imageparam}
-  * [[VUID-{refpage}-srcImage-00201]]
-    If {imageparam} is of type ename:VK_IMAGE_TYPE_1D or
-    ename:VK_IMAGE_TYPE_2D, then for each element of pname:pRegions,
-    pname:imageOffset.z must: be `0` and pname:imageExtent.depth must: be
-    `1`
-  * [[VUID-{refpage}-bufferRowLength-00203]]
-    If {imageparam} is a <<blocked-image, blocked image>>, for each element
-    of pname:pRegions, pname:bufferRowLength must: be a multiple of the
-    compressed texel block width
-  * [[VUID-{refpage}-bufferImageHeight-00204]]
-    If {imageparam} is a <<blocked-image, blocked image>>, for each element
-    of pname:pRegions, pname:bufferImageHeight must: be a multiple of the
-    compressed texel block height
-  * [[VUID-{refpage}-imageOffset-00205]]
-    If {imageparam} is a <<blocked-image, blocked image>>, for each element
-    of pname:pRegions, all members of pname:imageOffset must: be a multiple
-    of the corresponding dimensions of the compressed texel block
-  * [[VUID-{refpage}-bufferOffset-00206]]
-    If {imageparam} is a <<blocked-image, blocked image>>, for each element
-    of pname:pRegions, pname:bufferOffset must: be a multiple of the
-    compressed texel block size in bytes
-  * [[VUID-{refpage}-imageExtent-00207]]
-    If {imageparam} is a <<blocked-image, blocked image>>, for each element
-    of pname:pRegions, pname:imageExtent.width must: be a multiple of the
-    compressed texel block width or [eq]#(pname:imageExtent.width {plus}
-    pname:imageOffset.x)# must: equal the width of the specified
-    pname:imageSubresource of {imageparam}
-  * [[VUID-{refpage}-imageExtent-00208]]
-    If {imageparam} is a <<blocked-image, blocked image>>, for each element
-    of pname:pRegions, pname:imageExtent.height must: be a multiple of the
-    compressed texel block height or [eq]#(pname:imageExtent.height {plus}
-    pname:imageOffset.y)# must: equal the height of the specified
-    pname:imageSubresource of {imageparam}
-  * [[VUID-{refpage}-imageExtent-00209]]
-    If {imageparam} is a <<blocked-image, blocked image>>, for each element
-    of pname:pRegions, pname:imageExtent.depth must: be a multiple of the
-    compressed texel block depth or [eq]#(pname:imageExtent.depth {plus}
-    pname:imageOffset.z)# must: equal the depth of the specified
-    pname:imageSubresource of {imageparam}
-  * [[VUID-{refpage}-aspectMask-00211]]
-    For each element of pname:pRegions, pname:imageSubresource.aspectMask
-    must: specify aspects present in {imageparam}
-ifdef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
-  * [[VUID-{refpage}-aspectMask-01560]]
-    If {imageparam} has a
-    <<formats-requiring-sampler-ycbcr-conversion,multi-planar format>>, then
-    for each element of pname:pRegions, pname:imageSubresource.aspectMask
-    must: be ename:VK_IMAGE_ASPECT_PLANE_0_BIT,
-    ename:VK_IMAGE_ASPECT_PLANE_1_BIT, or ename:VK_IMAGE_ASPECT_PLANE_2_BIT
-    (with ename:VK_IMAGE_ASPECT_PLANE_2_BIT valid only for image formats
-    with three planes)
-endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
-  * [[VUID-{refpage}-baseArrayLayer-00213]]
-    If {imageparam} is of type ename:VK_IMAGE_TYPE_3D, for each element of
-    pname:pRegions, pname:imageSubresource.baseArrayLayer must: be `0` and
-    pname:imageSubresource.layerCount must: be `1`
-  * [[VUID-{refpage}-pRegions-04725]]
-    If {imageparam} is not a <<blocked-image, blocked image>>, for each
-    element of pname:pRegions, pname:bufferRowLength multiplied by the texel
-    block size of {imageparam} must: be less than or equal to [eq]#2^31^-1#
-  * [[VUID-{refpage}-pRegions-04726]]
-    If {imageparam} is a <<blocked-image, blocked image>>, for each element
-    of pname:pRegions, pname:bufferRowLength divided by the compressed texel
-    block width and then multiplied by the texel block size of {imageparam}
-    must: be less than or equal to [eq]#2^31^-1#
-  * [[VUID-{refpage}-commandBuffer-04052]]
-    If the queue family used to create the slink:VkCommandPool which
-    pname:commandBuffer was allocated from does not support
-    ename:VK_QUEUE_GRAPHICS_BIT or ename:VK_QUEUE_COMPUTE_BIT, the
-    pname:bufferOffset member of any element of pname:pRegions must: be a
-    multiple of `4`
-  * [[VUID-{refpage}-srcImage-04053]]
-    If {imageparam} has a depth/stencil format, the pname:bufferOffset
-    member of any element of pname:pRegions must: be a multiple of `4`
-// Common Valid Usage
diff --git a/registry/vulkan/chapters/commonvalidity/copy_image_command_buffer_common.txt b/registry/vulkan/chapters/commonvalidity/copy_image_command_buffer_common.txt
deleted file mode 100644
index c4cef5b..0000000
--- a/registry/vulkan/chapters/commonvalidity/copy_image_command_buffer_common.txt
+++ /dev/null
@@ -1,21 +0,0 @@
-// Copyright 2020-2021 The Khronos Group Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-// Common Valid Usage
-// Common to VkCmdCopyImage* command buffer
-ifdef::VK_VERSION_1_1[]
-  * [[VUID-{refpage}-commandBuffer-01825]]
-    If pname:commandBuffer is an unprotected command buffer and
-    <<limits-protectedNoFault, pname:protectedNoFault>> is not supported,
-    pname:srcImage must: not be a protected image
-  * [[VUID-{refpage}-commandBuffer-01826]]
-    If pname:commandBuffer is an unprotected command buffer and
-    <<limits-protectedNoFault, pname:protectedNoFault>> is not supported,
-    pname:dstImage must: not be a protected image
-  * [[VUID-{refpage}-commandBuffer-01827]]
-    If pname:commandBuffer is a protected command buffer and
-    <<limits-protectedNoFault, pname:protectedNoFault>> is not supported,
-    pname:dstImage must: not be an unprotected image
-endif::VK_VERSION_1_1[]
-// Common Valid Usage
diff --git a/registry/vulkan/chapters/commonvalidity/copy_image_common.txt b/registry/vulkan/chapters/commonvalidity/copy_image_common.txt
deleted file mode 100644
index d8d4fca..0000000
--- a/registry/vulkan/chapters/commonvalidity/copy_image_common.txt
+++ /dev/null
@@ -1,322 +0,0 @@
-// Copyright 2020-2021 The Khronos Group Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-// Common Valid Usage
-// Common to VkCmdCopyImage* commands
-  * [[VUID-{refpage}-pRegions-00124]]
-    The union of all source regions, and the union of all destination
-    regions, specified by the elements of pname:pRegions, must: not overlap
-    in memory
-ifdef::VK_VERSION_1_1,VK_KHR_maintenance1[]
-  * [[VUID-{refpage}-srcImage-01995]]
-    The <<resources-image-format-features,format features>> of
-    pname:srcImage must: contain ename:VK_FORMAT_FEATURE_TRANSFER_SRC_BIT
-endif::VK_VERSION_1_1,VK_KHR_maintenance1[]
-  * [[VUID-{refpage}-srcImage-00126]]
-    pname:srcImage must: have been created with
-    ename:VK_IMAGE_USAGE_TRANSFER_SRC_BIT usage flag
-ifndef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
-  * [[VUID-{refpage}-srcImage-00127]]
-    If pname:srcImage is non-sparse then it must: be bound completely and
-    contiguously to a single sname:VkDeviceMemory object
-endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
-ifdef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
-  * [[VUID-{refpage}-srcImage-01546]]
-    If pname:srcImage is non-sparse then the image or _disjoint_ plane to be
-    copied must: be bound completely and contiguously to a single
-    sname:VkDeviceMemory object
-endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
-  * [[VUID-{refpage}-srcImageLayout-00128]]
-    pname:srcImageLayout must: specify the layout of the image subresources
-    of pname:srcImage specified in pname:pRegions at the time this command
-    is executed on a sname:VkDevice
-ifndef::VK_KHR_shared_presentable_image[]
-  * [[VUID-{refpage}-srcImageLayout-00129]]
-    pname:srcImageLayout must: be ename:VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL
-    or ename:VK_IMAGE_LAYOUT_GENERAL
-endif::VK_KHR_shared_presentable_image[]
-ifdef::VK_KHR_shared_presentable_image[]
-  * [[VUID-{refpage}-srcImageLayout-01917]]
-    pname:srcImageLayout must: be
-    ename:VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL,
-    ename:VK_IMAGE_LAYOUT_GENERAL, or
-    ename:VK_IMAGE_LAYOUT_SHARED_PRESENT_KHR
-endif::VK_KHR_shared_presentable_image[]
-ifdef::VK_VERSION_1_1,VK_KHR_maintenance1[]
-  * [[VUID-{refpage}-dstImage-01996]]
-    The <<resources-image-format-features,format features>> of
-    pname:dstImage must: contain ename:VK_FORMAT_FEATURE_TRANSFER_DST_BIT
-endif::VK_VERSION_1_1,VK_KHR_maintenance1[]
-  * [[VUID-{refpage}-dstImage-00131]]
-    pname:dstImage must: have been created with
-    ename:VK_IMAGE_USAGE_TRANSFER_DST_BIT usage flag
-ifndef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
-  * [[VUID-{refpage}-dstImage-00132]]
-    If pname:dstImage is non-sparse then it must: be bound completely and
-    contiguously to a single sname:VkDeviceMemory object
-endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
-ifdef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
-  * [[VUID-{refpage}-dstImage-01547]]
-    If pname:dstImage is non-sparse then the image or _disjoint_ plane that
-    is the destination of the copy must: be bound completely and
-    contiguously to a single sname:VkDeviceMemory object
-endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
-  * [[VUID-{refpage}-dstImageLayout-00133]]
-    pname:dstImageLayout must: specify the layout of the image subresources
-    of pname:dstImage specified in pname:pRegions at the time this command
-    is executed on a sname:VkDevice
-ifndef::VK_KHR_shared_presentable_image[]
-  * [[VUID-{refpage}-dstImageLayout-00134]]
-    pname:dstImageLayout must: be ename:VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL
-    or ename:VK_IMAGE_LAYOUT_GENERAL
-endif::VK_KHR_shared_presentable_image[]
-ifdef::VK_KHR_shared_presentable_image[]
-  * [[VUID-{refpage}-dstImageLayout-01395]]
-    pname:dstImageLayout must: be
-    ename:VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL,
-    ename:VK_IMAGE_LAYOUT_GENERAL, or
-    ename:VK_IMAGE_LAYOUT_SHARED_PRESENT_KHR
-endif::VK_KHR_shared_presentable_image[]
-ifndef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
-  * [[VUID-{refpage}-srcImage-00135]]
-    The elink:VkFormat of each of pname:srcImage and pname:dstImage must: be
-    compatible, as defined <<copies-images-format-compatibility, above>>
-endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
-ifdef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
-  * [[VUID-{refpage}-srcImage-01548]]
-    If the elink:VkFormat of each of pname:srcImage and pname:dstImage is
-    not a <<formats-requiring-sampler-ycbcr-conversion,_multi-planar
-    format_>>, the elink:VkFormat of each of pname:srcImage and
-    pname:dstImage must: be compatible, as defined
-    <<copies-images-format-compatibility, above>>
-  * [[VUID-{refpage}-None-01549]]
-    In a copy to or from a plane of a
-    <<formats-requiring-sampler-ycbcr-conversion,multi-planar image>>, the
-    elink:VkFormat of the image and plane must: be compatible according to
-    <<formats-compatible-planes,the description of compatible planes>> for
-    the plane being copied
-endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
-  * [[VUID-{refpage}-srcImage-00136]]
-    The sample count of pname:srcImage and pname:dstImage must: match
-  * [[VUID-{refpage}-srcSubresource-01696]]
-    The pname:srcSubresource.mipLevel member of each element of
-    pname:pRegions must: be less than the pname:mipLevels specified in
-    slink:VkImageCreateInfo when pname:srcImage was created
-  * [[VUID-{refpage}-dstSubresource-01697]]
-    The pname:dstSubresource.mipLevel member of each element of
-    pname:pRegions must: be less than the pname:mipLevels specified in
-    slink:VkImageCreateInfo when pname:dstImage was created
-  * [[VUID-{refpage}-srcSubresource-01698]]
-    The [eq]#pname:srcSubresource.baseArrayLayer {plus}
-    pname:srcSubresource.layerCount# of each element of pname:pRegions must:
-    be less than or equal to the pname:arrayLayers specified in
-    slink:VkImageCreateInfo when pname:srcImage was created
-  * [[VUID-{refpage}-dstSubresource-01699]]
-    The [eq]#pname:dstSubresource.baseArrayLayer {plus}
-    pname:dstSubresource.layerCount# of each element of pname:pRegions must:
-    be less than or equal to the pname:arrayLayers specified in
-    slink:VkImageCreateInfo when pname:dstImage was created
-  * [[VUID-{refpage}-srcOffset-01783]]
-    The pname:srcOffset and pname:extent members of each element of
-    pname:pRegions must: respect the image transfer granularity requirements
-    of pname:commandBuffer's command pool's queue family, as described in
-    slink:VkQueueFamilyProperties
-  * [[VUID-{refpage}-dstOffset-01784]]
-    The pname:dstOffset and pname:extent members of each element of
-    pname:pRegions must: respect the image transfer granularity requirements
-    of pname:commandBuffer's command pool's queue family, as described in
-    slink:VkQueueFamilyProperties
-ifdef::VK_EXT_fragment_density_map[]
-  * [[VUID-{refpage}-dstImage-02542]]
-    pname:dstImage and pname:srcImage must: not have been created with
-    pname:flags containing ename:VK_IMAGE_CREATE_SUBSAMPLED_BIT_EXT
-endif::VK_EXT_fragment_density_map[]
-// The remaining common VU used to be in image_copy_common.txt and have been
-// rewritten to apply to the calling command rather than the structure
-// parameter(s) of that command.
-ifdef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
-  * [[VUID-{refpage}-srcImage-01551]]
-    If neither pname:srcImage nor pname:dstImage has a
-    <<formats-requiring-sampler-ycbcr-conversion, multi-planar image
-    format>> then for each element of pname:pRegions,
-    pname:srcSubresource.aspectMask and pname:dstSubresource.aspectMask
-    must: match
-  * [[VUID-{refpage}-srcImage-01552]]
-    If pname:srcImage has a elink:VkFormat with
-    <<formats-requiring-sampler-ycbcr-conversion,two planes>> then for each
-    element of pname:pRegions, pname:srcSubresource.aspectMask must: be
-    ename:VK_IMAGE_ASPECT_PLANE_0_BIT or ename:VK_IMAGE_ASPECT_PLANE_1_BIT
-  * [[VUID-{refpage}-srcImage-01553]]
-    If pname:srcImage has a elink:VkFormat with
-    <<formats-requiring-sampler-ycbcr-conversion,three planes>> then for
-    each element of pname:pRegions, pname:srcSubresource.aspectMask must: be
-    ename:VK_IMAGE_ASPECT_PLANE_0_BIT, ename:VK_IMAGE_ASPECT_PLANE_1_BIT, or
-    ename:VK_IMAGE_ASPECT_PLANE_2_BIT
-  * [[VUID-{refpage}-dstImage-01554]]
-    If pname:dstImage has a elink:VkFormat with
-    <<formats-requiring-sampler-ycbcr-conversion,two planes>> then for each
-    element of pname:pRegions, pname:dstSubresource.aspectMask must: be
-    ename:VK_IMAGE_ASPECT_PLANE_0_BIT or ename:VK_IMAGE_ASPECT_PLANE_1_BIT
-  * [[VUID-{refpage}-dstImage-01555]]
-    If pname:dstImage has a elink:VkFormat with
-    <<formats-requiring-sampler-ycbcr-conversion,three planes>> then for
-    each element of pname:pRegions, pname:dstSubresource.aspectMask must: be
-    ename:VK_IMAGE_ASPECT_PLANE_0_BIT, ename:VK_IMAGE_ASPECT_PLANE_1_BIT, or
-    ename:VK_IMAGE_ASPECT_PLANE_2_BIT
-  * [[VUID-{refpage}-srcImage-01556]]
-    If pname:srcImage has a
-    <<formats-requiring-sampler-ycbcr-conversion,multi-planar image format>>
-    and the pname:dstImage does not have a multi-planar image format, then
-    for each element of pname:pRegions, pname:dstSubresource.aspectMask
-    must: be ename:VK_IMAGE_ASPECT_COLOR_BIT
-  * [[VUID-{refpage}-dstImage-01557]]
-    If pname:dstImage has a
-    <<formats-requiring-sampler-ycbcr-conversion,multi-planar image format>>
-    and the pname:srcImage does not have a multi-planar image format, then
-    for each element of pname:pRegions, pname:srcSubresource.aspectMask
-    must: be ename:VK_IMAGE_ASPECT_COLOR_BIT
-endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
-ifndef::VK_VERSION_1_1,VK_KHR_maintenance1[]
-  * [[VUID-{refpage}-srcImage-00139]]
-    If either pname:srcImage or pname:dstImage is of type
-    ename:VK_IMAGE_TYPE_3D, then for each element of pname:pRegions,
-    pname:srcSubresource.baseArrayLayer and
-    pname:dstSubresource.baseArrayLayer must: each be `0`, and
-    pname:srcSubresource.layerCount and pname:dstSubresource.layerCount
-    must: each be `1`
-endif::VK_VERSION_1_1,VK_KHR_maintenance1[]
-ifdef::VK_VERSION_1_1,VK_KHR_maintenance1[]
-  * [[VUID-{refpage}-srcImage-04443]]
-    If pname:srcImage is of type ename:VK_IMAGE_TYPE_3D, then for each
-    element of pname:pRegions, pname:srcSubresource.baseArrayLayer must: be
-    `0` and pname:srcSubresource.layerCount must: be `1`
-  * [[VUID-{refpage}-dstImage-04444]]
-    If pname:dstImage is of type ename:VK_IMAGE_TYPE_3D, then for each
-    element of pname:pRegions, pname:dstSubresource.baseArrayLayer must: be
-    `0` and pname:dstSubresource.layerCount must: be `1`
-endif::VK_VERSION_1_1,VK_KHR_maintenance1[]
-  * [[VUID-{refpage}-aspectMask-00142]]
-    For each element of pname:pRegions, pname:srcSubresource.aspectMask
-    must: specify aspects present in pname:srcImage
-  * [[VUID-{refpage}-aspectMask-00143]]
-    For each element of pname:pRegions, pname:dstSubresource.aspectMask
-    must: specify aspects present in pname:dstImage
-  * [[VUID-{refpage}-srcOffset-00144]]
-    For each element of pname:pRegions, pname:srcOffset.x and
-    [eq]#(pname:extent.width {plus} pname:srcOffset.x)# must: both be
-    greater than or equal to `0` and less than or equal to the width of the
-    specified pname:srcSubresource of pname:srcImage
-  * [[VUID-{refpage}-srcOffset-00145]]
-    For each element of pname:pRegions, pname:srcOffset.y and
-    [eq]#(pname:extent.height {plus} pname:srcOffset.y)# must: both be
-    greater than or equal to `0` and less than or equal to the height of the
-    specified pname:srcSubresource of pname:srcImage
-  * [[VUID-{refpage}-srcImage-00146]]
-    If pname:srcImage is of type ename:VK_IMAGE_TYPE_1D, then for each
-    element of pname:pRegions, pname:srcOffset.y must: be `0` and
-    pname:extent.height must: be `1`
-  * [[VUID-{refpage}-srcOffset-00147]]
-    For each element of pname:pRegions, pname:srcOffset.z and
-    [eq]#(pname:extent.depth {plus} pname:srcOffset.z)# must: both be
-    greater than or equal to `0` and less than or equal to the depth of the
-    specified pname:srcSubresource of pname:srcImage
-  * [[VUID-{refpage}-srcImage-01785]]
-    If pname:srcImage is of type ename:VK_IMAGE_TYPE_1D, then for each
-    element of pname:pRegions, pname:srcOffset.z must: be `0` and
-    pname:extent.depth must: be `1`
-  * [[VUID-{refpage}-dstImage-01786]]
-    If pname:dstImage is of type ename:VK_IMAGE_TYPE_1D, then for each
-    element of pname:pRegions, pname:dstOffset.z must: be `0` and
-    pname:extent.depth must: be `1`
-  * [[VUID-{refpage}-srcImage-01787]]
-    If pname:srcImage is of type ename:VK_IMAGE_TYPE_2D, then for each
-    element of pname:pRegions, pname:srcOffset.z must: be `0`
-  * [[VUID-{refpage}-dstImage-01788]]
-    If pname:dstImage is of type ename:VK_IMAGE_TYPE_2D, then for each
-    element of pname:pRegions, pname:dstOffset.z must: be `0`
-ifndef::VK_VERSION_1_1,VK_KHR_maintenance1[]
-  * [[VUID-{refpage}-srcImage-01789]]
-    If pname:srcImage or pname:dstImage is of type ename:VK_IMAGE_TYPE_2D,
-    then for each element of pname:pRegions, pname:extent.depth must: be `1`
-endif::VK_VERSION_1_1,VK_KHR_maintenance1[]
-ifdef::VK_VERSION_1_1,VK_KHR_maintenance1[]
-  * [[VUID-{refpage}-srcImage-01790]]
-    If pname:srcImage and pname:dstImage are both of type
-    ename:VK_IMAGE_TYPE_2D, then for each element of pname:pRegions,
-    pname:extent.depth must: be `1`
-  * [[VUID-{refpage}-srcImage-01791]]
-    If pname:srcImage is of type ename:VK_IMAGE_TYPE_2D, and pname:dstImage
-    is of type ename:VK_IMAGE_TYPE_3D, then for each element of
-    pname:pRegions, pname:extent.depth must: equal
-    pname:srcSubresource.layerCount
-  * [[VUID-{refpage}-dstImage-01792]]
-    If pname:dstImage is of type ename:VK_IMAGE_TYPE_2D, and pname:srcImage
-    is of type ename:VK_IMAGE_TYPE_3D, then for each element of
-    pname:pRegions, pname:extent.depth must: equal
-    pname:dstSubresource.layerCount
-endif::VK_VERSION_1_1,VK_KHR_maintenance1[]
-  * [[VUID-{refpage}-dstOffset-00150]]
-    For each element of pname:pRegions, pname:dstOffset.x and
-    [eq]#(pname:extent.width {plus} pname:dstOffset.x)# must: both be
-    greater than or equal to `0` and less than or equal to the width of the
-    specified pname:dstSubresource of pname:dstImage
-  * [[VUID-{refpage}-dstOffset-00151]]
-    For each element of pname:pRegions, pname:dstOffset.y and
-    [eq]#(pname:extent.height {plus} pname:dstOffset.y)# must: both be
-    greater than or equal to `0` and less than or equal to the height of the
-    specified pname:dstSubresource of pname:dstImage
-  * [[VUID-{refpage}-dstImage-00152]]
-    If pname:dstImage is of type ename:VK_IMAGE_TYPE_1D, then for each
-    element of pname:pRegions, pname:dstOffset.y must: be `0` and
-    pname:extent.height must: be `1`
-  * [[VUID-{refpage}-dstOffset-00153]]
-    For each element of pname:pRegions, pname:dstOffset.z and
-    [eq]#(pname:extent.depth {plus} pname:dstOffset.z)# must: both be
-    greater than or equal to `0` and less than or equal to the depth of the
-    specified pname:dstSubresource of pname:dstImage
-  * [[VUID-{refpage}-srcImage-01727]]
-    If pname:srcImage is a <<blocked-image, blocked image>>, then for each
-    element of pname:pRegions, all members of pname:srcOffset must: be a
-    multiple of the corresponding dimensions of the compressed texel block
-  * [[VUID-{refpage}-srcImage-01728]]
-    If pname:srcImage is a <<blocked-image, blocked image>>, then for each
-    element of pname:pRegions, pname:extent.width must: be a multiple of the
-    compressed texel block width or [eq]#(pname:extent.width {plus}
-    pname:srcOffset.x)# must: equal the width of the specified
-    pname:srcSubresource of pname:srcImage
-  * [[VUID-{refpage}-srcImage-01729]]
-    If pname:srcImage is a <<blocked-image, blocked image>>, then for each
-    element of pname:pRegions, pname:extent.height must: be a multiple of
-    the compressed texel block height or [eq]#(pname:extent.height {plus}
-    pname:srcOffset.y)# must: equal the height of the specified
-    pname:srcSubresource of pname:srcImage
-  * [[VUID-{refpage}-srcImage-01730]]
-    If pname:srcImage is a <<blocked-image, blocked image>>, then for each
-    element of pname:pRegions, pname:extent.depth must: be a multiple of the
-    compressed texel block depth or [eq]#(pname:extent.depth {plus}
-    pname:srcOffset.z)# must: equal the depth of the specified
-    pname:srcSubresource of pname:srcImage
-  * [[VUID-{refpage}-dstImage-01731]]
-    If pname:dstImage is a <<blocked-image, blocked image>>, then for each
-    element of pname:pRegions, all members of pname:dstOffset must: be a
-    multiple of the corresponding dimensions of the compressed texel block
-  * [[VUID-{refpage}-dstImage-01732]]
-    If pname:dstImage is a <<blocked-image, blocked image>>, then for each
-    element of pname:pRegions, pname:extent.width must: be a multiple of the
-    compressed texel block width or [eq]#(pname:extent.width {plus}
-    pname:dstOffset.x)# must: equal the width of the specified
-    pname:dstSubresource of pname:dstImage
-  * [[VUID-{refpage}-dstImage-01733]]
-    If pname:dstImage is a <<blocked-image, blocked image>>, then for each
-    element of pname:pRegions, pname:extent.height must: be a multiple of
-    the compressed texel block height or [eq]#(pname:extent.height {plus}
-    pname:dstOffset.y)# must: equal the height of the specified
-    pname:dstSubresource of pname:dstImage
-  * [[VUID-{refpage}-dstImage-01734]]
-    If pname:dstImage is a <<blocked-image, blocked image>>, then for each
-    element of pname:pRegions, pname:extent.depth must: be a multiple of the
-    compressed texel block depth or [eq]#(pname:extent.depth {plus}
-    pname:dstOffset.z)# must: equal the depth of the specified
-    pname:dstSubresource of pname:dstImage
-// Common Valid Usage
diff --git a/registry/vulkan/chapters/commonvalidity/copy_image_to_buffer_command_buffer_common.txt b/registry/vulkan/chapters/commonvalidity/copy_image_to_buffer_command_buffer_common.txt
deleted file mode 100644
index d549a77..0000000
--- a/registry/vulkan/chapters/commonvalidity/copy_image_to_buffer_command_buffer_common.txt
+++ /dev/null
@@ -1,22 +0,0 @@
-// Copyright 2020-2021 The Khronos Group Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-// Common Valid Usage
-// Common to VkCmdCopyImageToBuffer* command buffer
-ifdef::VK_VERSION_1_1[]
-  * [[VUID-{refpage}-commandBuffer-01831]]
-    If pname:commandBuffer is an unprotected command buffer and
-    <<limits-protectedNoFault, pname:protectedNoFault>> is not supported,
-    pname:srcImage must: not be a protected image
-  * [[VUID-{refpage}-commandBuffer-01832]]
-    If pname:commandBuffer is an unprotected command buffer and
-    <<limits-protectedNoFault, pname:protectedNoFault>> is not supported,
-    pname:dstBuffer must: not be a protected buffer
-  * [[VUID-{refpage}-commandBuffer-01833]]
-    If pname:commandBuffer is a protected command buffer and
-    <<limits-protectedNoFault, pname:protectedNoFault>> is not supported,
-    pname:dstBuffer must: not be an unprotected buffer
-endif::VK_VERSION_1_1[]
-
-// Common Valid Usage
diff --git a/registry/vulkan/chapters/commonvalidity/copy_image_to_buffer_common.txt b/registry/vulkan/chapters/commonvalidity/copy_image_to_buffer_common.txt
deleted file mode 100644
index 8387efc..0000000
--- a/registry/vulkan/chapters/commonvalidity/copy_image_to_buffer_common.txt
+++ /dev/null
@@ -1,70 +0,0 @@
-// Copyright 2020-2021 The Khronos Group Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-// Common Valid Usage
-// Common to VkCmdCopyImageToBuffer* commands
-  * [[VUID-{refpage}-pRegions-00183]]
-    pname:dstBuffer must: be large enough to contain all buffer locations
-    that are accessed according to <<copies-buffers-images-addressing,Buffer
-    and Image Addressing>>, for each element of pname:pRegions
-  * [[VUID-{refpage}-pRegions-00184]]
-    The union of all source regions, and the union of all destination
-    regions, specified by the elements of pname:pRegions, must: not overlap
-    in memory
-  * [[VUID-{refpage}-srcImage-00186]]
-    pname:srcImage must: have been created with
-    ename:VK_IMAGE_USAGE_TRANSFER_SRC_BIT usage flag
-ifdef::VK_VERSION_1_1,VK_KHR_maintenance1[]
-  * [[VUID-{refpage}-srcImage-01998]]
-    The <<resources-image-format-features,format features>> of
-    pname:srcImage must: contain ename:VK_FORMAT_FEATURE_TRANSFER_SRC_BIT
-endif::VK_VERSION_1_1,VK_KHR_maintenance1[]
-  * [[VUID-{refpage}-srcImage-00187]]
-    If pname:srcImage is non-sparse then it must: be bound completely and
-    contiguously to a single sname:VkDeviceMemory object
-  * [[VUID-{refpage}-dstBuffer-00191]]
-    pname:dstBuffer must: have been created with
-    ename:VK_BUFFER_USAGE_TRANSFER_DST_BIT usage flag
-  * [[VUID-{refpage}-dstBuffer-00192]]
-    If pname:dstBuffer is non-sparse then it must: be bound completely and
-    contiguously to a single sname:VkDeviceMemory object
-  * [[VUID-{refpage}-srcImage-00188]]
-    pname:srcImage must: have a sample count equal to
-    ename:VK_SAMPLE_COUNT_1_BIT
-  * [[VUID-{refpage}-srcImageLayout-00189]]
-    pname:srcImageLayout must: specify the layout of the image subresources
-    of pname:srcImage specified in pname:pRegions at the time this command
-    is executed on a sname:VkDevice
-ifndef::VK_KHR_shared_presentable_image[]
-  * [[VUID-{refpage}-srcImageLayout-00190]]
-    pname:srcImageLayout must: be ename:VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL
-    or ename:VK_IMAGE_LAYOUT_GENERAL
-endif::VK_KHR_shared_presentable_image[]
-ifdef::VK_KHR_shared_presentable_image[]
-  * [[VUID-{refpage}-srcImageLayout-01397]]
-    pname:srcImageLayout must: be
-    ename:VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL,
-    ename:VK_IMAGE_LAYOUT_GENERAL, or
-    ename:VK_IMAGE_LAYOUT_SHARED_PRESENT_KHR
-endif::VK_KHR_shared_presentable_image[]
-  * [[VUID-{refpage}-imageSubresource-01703]]
-    The pname:imageSubresource.mipLevel member of each element of
-    pname:pRegions must: be less than the pname:mipLevels specified in
-    slink:VkImageCreateInfo when pname:srcImage was created
-  * [[VUID-{refpage}-imageSubresource-01704]]
-    The [eq]#pname:imageSubresource.baseArrayLayer {plus}
-    pname:imageSubresource.layerCount# of each element of pname:pRegions
-    must: be less than or equal to the pname:arrayLayers specified in
-    slink:VkImageCreateInfo when pname:srcImage was created
-  * [[VUID-{refpage}-imageOffset-01794]]
-    The pname:imageOffset and pname:imageExtent members of each element of
-    pname:pRegions must: respect the image transfer granularity requirements
-    of pname:commandBuffer's command pool's queue family, as described in
-    slink:VkQueueFamilyProperties
-ifdef::VK_EXT_fragment_density_map[]
-  * [[VUID-{refpage}-srcImage-02544]]
-    pname:srcImage must: not have been created with pname:flags containing
-    ename:VK_IMAGE_CREATE_SUBSAMPLED_BIT_EXT
-endif::VK_EXT_fragment_density_map[]
-// Common Valid Usage
diff --git a/registry/vulkan/chapters/commonvalidity/create_ray_tracing_pipelines_common.txt b/registry/vulkan/chapters/commonvalidity/create_ray_tracing_pipelines_common.txt
deleted file mode 100644
index 8b06ca4..0000000
--- a/registry/vulkan/chapters/commonvalidity/create_ray_tracing_pipelines_common.txt
+++ /dev/null
@@ -1,30 +0,0 @@
-// Copyright 2019-2021 The Khronos Group Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-// Common Valid Usage
-// common to CreateRayTracingPipelines
-  * [[VUID-{refpage}-flags-03415]]
-    If the pname:flags member of any element of pname:pCreateInfos contains
-    the ename:VK_PIPELINE_CREATE_DERIVATIVE_BIT flag, and the
-    pname:basePipelineIndex member of that same element is not `-1`,
-    pname:basePipelineIndex must: be less than the index into
-    pname:pCreateInfos that corresponds to that element
-  * [[VUID-{refpage}-flags-03416]]
-    If the pname:flags member of any element of pname:pCreateInfos contains
-    the ename:VK_PIPELINE_CREATE_DERIVATIVE_BIT flag, the base pipeline
-    must: have been created with the
-    ename:VK_PIPELINE_CREATE_ALLOW_DERIVATIVES_BIT flag set
-ifdef::VK_VERSION_1_1,VK_KHR_device_group[]
-  * [[VUID-{refpage}-flags-03816]]
-    pname:flags must: not contain the ename:VK_PIPELINE_CREATE_DISPATCH_BASE
-    flag
-endif::VK_VERSION_1_1,VK_KHR_device_group[]
-ifdef::VK_EXT_pipeline_creation_cache_control[]
-  * [[VUID-{refpage}-pipelineCache-02903]]
-    If pname:pipelineCache was created with
-    ename:VK_PIPELINE_CACHE_CREATE_EXTERNALLY_SYNCHRONIZED_BIT_EXT, host
-    access to pname:pipelineCache must: be
-    <<fundamentals-threadingbehavior,externally synchronized>>
-endif::VK_EXT_pipeline_creation_cache_control[]
-// Common Valid Usage
diff --git a/registry/vulkan/chapters/commonvalidity/deferred_operations_common.txt b/registry/vulkan/chapters/commonvalidity/deferred_operations_common.txt
deleted file mode 100644
index b5fe7ad..0000000
--- a/registry/vulkan/chapters/commonvalidity/deferred_operations_common.txt
+++ /dev/null
@@ -1,13 +0,0 @@
-// Copyright 2019-2021 The Khronos Group Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-// Common Valid Usage
-// Common to commands including a deferredOperation parameter
-  * [[VUID-{refpage}-deferredOperation-03677]]
-    If pname:deferredOperation is not dlink:VK_NULL_HANDLE, it must: be a
-    valid slink:VkDeferredOperationKHR object
-  * [[VUID-{refpage}-deferredOperation-03678]]
-    Any previous deferred operation that was associated with
-    pname:deferredOperation must: be complete
-// Common Valid Usage
diff --git a/registry/vulkan/chapters/commonvalidity/draw_common.txt b/registry/vulkan/chapters/commonvalidity/draw_common.txt
deleted file mode 100644
index 55361ae..0000000
--- a/registry/vulkan/chapters/commonvalidity/draw_common.txt
+++ /dev/null
@@ -1,415 +0,0 @@
-// Copyright 2019-2021 The Khronos Group Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-// Common Valid Usage
-// Common to all drawing commands
-include::draw_dispatch_common.txt[]
-  * [[VUID-{refpage}-renderPass-02684]]
-    The current render pass must: be <<renderpass-compatibility,compatible>>
-    with the pname:renderPass member of the
-    sname:VkGraphicsPipelineCreateInfo structure specified when creating the
-    sname:VkPipeline bound to ename:VK_PIPELINE_BIND_POINT_GRAPHICS
-  * [[VUID-{refpage}-subpass-02685]]
-    The subpass index of the current render pass must: be equal to the
-    pname:subpass member of the sname:VkGraphicsPipelineCreateInfo structure
-    specified when creating the sname:VkPipeline bound to
-    ename:VK_PIPELINE_BIND_POINT_GRAPHICS
-  * [[VUID-{refpage}-None-02686]]
-    Every input attachment used by the current subpass must: be bound to the
-    pipeline via a descriptor set
-  * [[VUID-{refpage}-None-04584]]
-    Image subresources used as attachments in the current render pass must:
-    not be accessed in any way other than as an attachment by this command,
-    except for cases involving read-only access to depth/stencil attachments
-    as described in the <<renderpass-attachment-nonattachment, Render Pass>>
-    chapter
-ifdef::VK_VERSION_1_1,VK_KHR_multiview[]
-  * [[VUID-{refpage}-maxMultiviewInstanceIndex-02688]]
-    If the draw is recorded in a render pass instance with multiview
-    enabled, the maximum instance index must: be less than or equal to
-    slink:VkPhysicalDeviceMultiviewProperties::pname:maxMultiviewInstanceIndex
-endif::VK_VERSION_1_1,VK_KHR_multiview[]
-ifdef::VK_EXT_sample_locations[]
-  * [[VUID-{refpage}-sampleLocationsEnable-02689]]
-    If the bound graphics pipeline was created with
-    slink:VkPipelineSampleLocationsStateCreateInfoEXT::pname:sampleLocationsEnable
-    set to ename:VK_TRUE and the current subpass has a depth/stencil
-    attachment, then that attachment must: have been created with the
-    ename:VK_IMAGE_CREATE_SAMPLE_LOCATIONS_COMPATIBLE_DEPTH_BIT_EXT bit set
-endif::VK_EXT_sample_locations[]
-ifdef::VK_EXT_extended_dynamic_state[]
-  * [[VUID-{refpage}-viewportCount-03417]]
-    If the bound graphics pipeline state was created with the
-    ename:VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT dynamic state enabled,
-    but not the ename:VK_DYNAMIC_STATE_SCISSOR_WITH_COUNT_EXT dynamic state
-    enabled, then flink:vkCmdSetViewportWithCountEXT must: have been called
-    in the current command buffer prior to this drawing command, and the
-    pname:viewportCount parameter of fname:vkCmdSetViewportWithCountEXT
-    must: match the
-    sname:VkPipelineViewportStateCreateInfo::pname:scissorCount of the
-    pipeline
-  * [[VUID-{refpage}-scissorCount-03418]]
-    If the bound graphics pipeline state was created with the
-    ename:VK_DYNAMIC_STATE_SCISSOR_WITH_COUNT_EXT dynamic state enabled, but
-    not the ename:VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT dynamic state
-    enabled, then flink:vkCmdSetScissorWithCountEXT must: have been called
-    in the current command buffer prior to this drawing command, and the
-    pname:scissorCount parameter of fname:vkCmdSetScissorWithCountEXT must:
-    match the sname:VkPipelineViewportStateCreateInfo::pname:viewportCount
-    of the pipeline
-  * [[VUID-{refpage}-viewportCount-03419]]
-    If the bound graphics pipeline state was created with both the
-    ename:VK_DYNAMIC_STATE_SCISSOR_WITH_COUNT_EXT and
-    ename:VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT dynamic states enabled
-    then both flink:vkCmdSetViewportWithCountEXT and
-    flink:vkCmdSetScissorWithCountEXT must: have been called in the current
-    command buffer prior to this drawing command, and the
-    pname:viewportCount parameter of fname:vkCmdSetViewportWithCountEXT
-    must: match the pname:scissorCount parameter of
-    fname:vkCmdSetScissorWithCountEXT
-ifdef::VK_NV_clip_space_w_scaling[]
-  * [[VUID-{refpage}-viewportCount-04137]]
-    If the bound graphics pipeline state was created with the
-    ename:VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT dynamic state enabled,
-    but not the ename:VK_DYNAMIC_STATE_VIEWPORT_W_SCALING_NV dynamic state
-    enabled, then the bound graphics pipeline must: have been created with
-    slink:VkPipelineViewportWScalingStateCreateInfoNV::pname:viewportCount
-    greater or equal to the pname:viewportCount parameter in the last call
-    to flink:vkCmdSetViewportWithCountEXT
-  * [[VUID-{refpage}-viewportCount-04138]]
-    If the bound graphics pipeline state was created with the
-    ename:VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT and
-    ename:VK_DYNAMIC_STATE_VIEWPORT_W_SCALING_NV dynamic states enabled then
-    the pname:viewportCount parameter in the last call to
-    flink:vkCmdSetViewportWScalingNV must: be greater than or equal to the
-    pname:viewportCount parameter in the last call to
-    flink:vkCmdSetViewportWithCountEXT
-endif::VK_NV_clip_space_w_scaling[]
-ifdef::VK_NV_shading_rate_image[]
-  * [[VUID-{refpage}-viewportCount-04139]]
-    If the bound graphics pipeline state was created with the
-    ename:VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT dynamic state enabled,
-    but not the ename:VK_DYNAMIC_STATE_VIEWPORT_SHADING_RATE_PALETTE_NV
-    dynamic state enabled, then the bound graphics pipeline must: have been
-    created with
-    slink:VkPipelineViewportShadingRateImageStateCreateInfoNV::pname:viewportCount
-    greater or equal to the pname:viewportCount parameter in the last call
-    to flink:vkCmdSetViewportWithCountEXT
-  * [[VUID-{refpage}-viewportCount-04140]]
-    If the bound graphics pipeline state was created with the
-    ename:VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT and
-    ename:VK_DYNAMIC_STATE_VIEWPORT_SHADING_RATE_PALETTE_NV dynamic states
-    enabled then the pname:viewportCount parameter in the last call to
-    flink:vkCmdSetViewportShadingRatePaletteNV must: be greater than or
-    equal to the pname:viewportCount parameter in the last call to
-    flink:vkCmdSetViewportWithCountEXT
-endif::VK_NV_shading_rate_image[]
-ifdef::VK_NV_viewport_swizzle[]
-  * [[VUID-{refpage}-VkPipelineVieportCreateInfo-04141]]
-    If the bound graphics pipeline state was created with the
-    ename:VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT dynamic state enabled and
-    a slink:VkPipelineViewportSwizzleStateCreateInfoNV structure chained
-    from pname:VkPipelineVieportCreateInfo, then the bound graphics pipeline
-    must: have been created with
-    slink:VkPipelineViewportSwizzleStateCreateInfoNV::pname:viewportCount
-    greater or equal to the pname:viewportCount parameter in the last call
-    to flink:vkCmdSetViewportWithCountEXT
-endif::VK_NV_viewport_swizzle[]
-ifdef::VK_NV_scissor_exclusive[]
-  * [[VUID-{refpage}-VkPipelineVieportCreateInfo-04142]]
-    If the bound graphics pipeline state was created with the
-    ename:VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT dynamic state enabled and
-    a slink:VkPipelineViewportExclusiveScissorStateCreateInfoNV structure
-    chained from pname:VkPipelineVieportCreateInfo, then the bound graphics
-    pipeline must: have been created with
-    slink:VkPipelineViewportExclusiveScissorStateCreateInfoNV::pname:exclusiveScissorCount
-    greater or equal to the pname:viewportCount parameter in the last call
-    to flink:vkCmdSetViewportWithCountEXT
-endif::VK_NV_scissor_exclusive[]
-  * [[VUID-{refpage}-primitiveTopology-03420]]
-    If the bound graphics pipeline state was created with the
-    ename:VK_DYNAMIC_STATE_PRIMITIVE_TOPOLOGY_EXT dynamic state enabled then
-    flink:vkCmdSetPrimitiveTopologyEXT must: have been called in the current
-    command buffer prior to this drawing command, and the
-    pname:primitiveTopology parameter of fname:vkCmdSetPrimitiveTopologyEXT
-    must: be of the same <<drawing-primitive-topology-class, topology
-    class>> as the pipeline
-    slink:VkPipelineInputAssemblyStateCreateInfo::pname:topology state
-endif::VK_EXT_extended_dynamic_state[]
-ifdef::VK_EXT_extended_dynamic_state2[]
-  * [[VUID-{refpage}-None-04875]]
-    If the bound graphics pipeline state was created with the
-    ename:VK_DYNAMIC_STATE_PATCH_CONTROL_POINTS_EXT dynamic state enabled
-    then flink:vkCmdSetPatchControlPointsEXT must: have been called in the
-    current command buffer prior to this drawing command
-  * [[VUID-{refpage}-None-04876]]
-    If the bound graphics pipeline state was created with the
-    ename:VK_DYNAMIC_STATE_RASTERIZER_DISCARD_ENABLE_EXT dynamic state
-    enabled then flink:vkCmdSetRasterizerDiscardEnableEXT must: have been
-    called in the current command buffer prior to this drawing command
-  * [[VUID-{refpage}-None-04877]]
-    If the bound graphics pipeline state was created with the
-    ename:VK_DYNAMIC_STATE_DEPTH_BIAS_ENABLE_EXT dynamic state enabled then
-    flink:vkCmdSetDepthBiasEnableEXT must: have been called in the current
-    command buffer prior to this drawing command
-  * [[VUID-{refpage}-logicOp-04878]]
-    If the bound graphics pipeline state was created with the
-    ename:VK_DYNAMIC_STATE_LOGIC_OP_EXT dynamic state enabled then
-    flink:vkCmdSetLogicOpEXT must: have been called in the current command
-    buffer prior to this drawing command and the pname:logicOp must: be a
-    valid elink:VkLogicOp value
-  * [[VUID-{refpage}-None-04879]]
-    If the bound graphics pipeline state was created with the
-    ename:VK_DYNAMIC_STATE_PRIMITIVE_RESTART_ENABLE_EXT dynamic state
-    enabled then flink:vkCmdSetPrimitiveRestartEnableEXT must: have been
-    called in the current command buffer prior to this drawing command
-endif::VK_EXT_extended_dynamic_state2[]
-ifdef::VK_KHR_fragment_shading_rate+VK_EXT_extended_dynamic_state[]
-  * [[VUID-{refpage}-primitiveFragmentShadingRateWithMultipleViewports-04552]]
-    If the <<limits-primitiveFragmentShadingRateWithMultipleViewports,
-    pname:primitiveFragmentShadingRateWithMultipleViewports>> limit is not
-    supported, the bound graphics pipeline was created with the
-    ename:VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT dynamic state enabled,
-    and any of the shader stages of the bound graphics pipeline write to the
-    code:PrimitiveShadingRateKHR built-in, then
-    flink:vkCmdSetViewportWithCountEXT must: have been called in the current
-    command buffer prior to this drawing command, and the
-    pname:viewportCount parameter of fname:vkCmdSetViewportWithCountEXT
-    must: be `1`
-endif::VK_KHR_fragment_shading_rate+VK_EXT_extended_dynamic_state[]
-  * [[VUID-{refpage}-blendEnable-04727]]
-    If rasterization is not disabled in the bound graphics pipeline, then
-    for each color attachment in the subpass, if the corresponding image
-    view's <<resources-image-view-format-features,format features>> do not
-    contain ename:VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT, then the
-    pname:blendEnable member of the corresponding element of the
-    pname:pAttachments member of pname:pColorBlendState must: be
-    ename:VK_FALSE
-  * [[VUID-{refpage}-rasterizationSamples-04740]]
-    If rasterization is not disabled in the bound graphics pipeline, and
-    neither the `apiext:VK_AMD_mixed_attachment_samples` nor the
-    `apiext:VK_NV_framebuffer_mixed_samples` extensions are enabled, then
-    slink:VkPipelineMultisampleStateCreateInfo::pname:rasterizationSamples
-    must: be the same as the current subpass color and/or depth/stencil
-    attachments
-ifdef::VK_EXT_extended_dynamic_state[]
-ifdef::VK_EXT_vertex_input_dynamic_state[]
-  * [[VUID-{refpage}-None-04912]]
-    If the bound graphics pipeline was created with both the
-    ename:VK_DYNAMIC_STATE_VERTEX_INPUT_EXT and
-    ename:VK_DYNAMIC_STATE_VERTEX_INPUT_BINDING_STRIDE_EXT dynamic states
-    enabled, then flink:vkCmdSetVertexInputEXT must: have been called in the
-    current command buffer prior to this draw command
-  * [[VUID-{refpage}-pStrides-04913]]
-    If the bound graphics pipeline was created with the
-    ename:VK_DYNAMIC_STATE_VERTEX_INPUT_BINDING_STRIDE_EXT dynamic state
-    enabled, but not the ename:VK_DYNAMIC_STATE_VERTEX_INPUT_EXT dynamic
-    state enabled, then flink:vkCmdBindVertexBuffers2EXT must: have been
-    called in the current command buffer prior to this draw command, and the
-    pname:pStrides parameter of flink:vkCmdBindVertexBuffers2EXT must: not
-    be `NULL`
-endif::VK_EXT_vertex_input_dynamic_state[]
-ifndef::VK_EXT_vertex_input_dynamic_state[]
-  * [[VUID-{refpage}-pStrides-04884]]
-    If the bound graphics pipeline was created with the
-    ename:VK_DYNAMIC_STATE_VERTEX_INPUT_BINDING_STRIDE_EXT dynamic state
-    enabled, then flink:vkCmdBindVertexBuffers2EXT must: have been called in
-    the current command buffer prior to this drawing command, and the
-    pname:pStrides parameter of flink:vkCmdBindVertexBuffers2EXT must: not
-    be `NULL`
-endif::VK_EXT_vertex_input_dynamic_state[]
-endif::VK_EXT_extended_dynamic_state[]
-ifdef::VK_EXT_vertex_input_dynamic_state[]
-  * [[VUID-{refpage}-None-04914]]
-    If the bound graphics pipeline state was created with the
-    ename:VK_DYNAMIC_STATE_VERTEX_INPUT_EXT dynamic state enabled, then
-    flink:vkCmdSetVertexInputEXT must: have been called in the current
-    command buffer prior to this draw command
-endif::VK_EXT_vertex_input_dynamic_state[]
-ifdef::VK_KHR_dynamic_rendering[]
-  * [[VUID-{refpage}-imageView-06172]]
-    If the current render pass instance was begun with
-    flink:vkCmdBeginRenderingKHR, the pname:imageView member of
-    pname:pDepthAttachment is not dlink:VK_NULL_HANDLE, and the pname:layout
-    member of pname:pDepthAttachment is
-    ename:VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL, this command
-    must: not write any values to the depth attachment
-  * [[VUID-{refpage}-imageView-06173]]
-    If the current render pass instance was begun with
-    flink:vkCmdBeginRenderingKHR, the pname:imageView member of
-    pname:pStencilAttachment is not dlink:VK_NULL_HANDLE, and the
-    pname:layout member of pname:pStencilAttachment is
-    ename:VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL, this command
-    must: not write any values to the stencil attachment
-ifdef::VK_VERSION_1_1,VK_KHR_maintenance2[]
-  * [[VUID-{refpage}-imageView-06174]]
-    If the current render pass instance was begun with
-    flink:vkCmdBeginRenderingKHR, the pname:imageView member of
-    pname:pDepthAttachment is not dlink:VK_NULL_HANDLE, and the pname:layout
-    member of pname:pDepthAttachment is
-    ename:VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_OPTIMAL, this
-    command must: not write any values to the depth attachment
-  * [[VUID-{refpage}-imageView-06175]]
-    If the current render pass instance was begun with
-    flink:vkCmdBeginRenderingKHR, the pname:imageView member of
-    pname:pStencilAttachment is not dlink:VK_NULL_HANDLE, and the
-    pname:layout member of pname:pStencilAttachment is
-    ename:VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_OPTIMAL, this
-    command must: not write any values to the stencil attachment
-endif::VK_VERSION_1_1,VK_KHR_maintenance2[]
-ifdef::VK_VERSION_1_2,VK_KHR_separate_depth_stencil_layouts[]
-  * [[VUID-{refpage}-imageView-06176]]
-    If the current render pass instance was begun with
-    flink:vkCmdBeginRenderingKHR, the pname:imageView member of
-    pname:pDepthAttachment is not dlink:VK_NULL_HANDLE, and the pname:layout
-    member of pname:pDepthAttachment is
-    ename:VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL, this command must: not
-    write any values to the depth attachment
-  * [[VUID-{refpage}-imageView-06177]]
-    If the current render pass instance was begun with
-    flink:vkCmdBeginRenderingKHR, the pname:imageView member of
-    pname:pStencilAttachment is not dlink:VK_NULL_HANDLE, and the
-    pname:layout member of pname:pStencilAttachment is
-    ename:VK_IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL, this command must: not
-    write any values to the stencil attachment
-endif::VK_VERSION_1_2,VK_KHR_separate_depth_stencil_layouts[]
-  * [[VUID-{refpage}-viewMask-06178]]
-    If the current render pass instance was begun with
-    flink:vkCmdBeginRenderingKHR, the currently bound graphics pipeline
-    must: have been created with a
-    slink:VkPipelineRenderingCreateInfoKHR::pname:viewMask equal to
-    slink:VkRenderingInfoKHR::pname:viewMask
-  * [[VUID-{refpage}-colorAttachmentCount-06179]]
-    If the current render pass instance was begun with
-    flink:vkCmdBeginRenderingKHR, the currently bound graphics pipeline
-    must: have been created with a
-    slink:VkPipelineRenderingCreateInfoKHR::pname:colorAttachmentCount equal
-    to slink:VkRenderingInfoKHR::pname:colorAttachmentCount
-  * [[VUID-{refpage}-colorAttachmentCount-06180]]
-    If the current render pass instance was begun with
-    flink:vkCmdBeginRenderingKHR and
-    slink:VkRenderingInfoKHR::pname:colorAttachmentCount greater than `0`,
-    then each element of the
-    slink:VkRenderingInfoKHR::pname:pColorAttachments array with a
-    pname:imageView not equal to dlink:VK_NULL_HANDLE must: have been
-    created with a elink:VkFormat equal to the corresponding element of
-    slink:VkPipelineRenderingCreateInfoKHR::pname:pColorAttachmentFormats
-    used to create the currently bound graphics pipeline
-  * [[VUID-{refpage}-pDepthAttachment-06181]]
-    If the current render pass instance was begun with
-    flink:vkCmdBeginRenderingKHR and
-    slink:VkRenderingInfoKHR::pname:pDepthAttachment->pname:imageView was
-    not dlink:VK_NULL_HANDLE, the value of
-    slink:VkPipelineRenderingCreateInfoKHR::pname:depthAttachmentFormat used
-    to create the currently bound graphics pipeline must: be equal to the
-    elink:VkFormat used to create
-    slink:VkRenderingInfoKHR::pname:pDepthAttachment->pname:imageView
-  * [[VUID-{refpage}-pStencilAttachment-06182]]
-    If the current render pass instance was begun with
-    flink:vkCmdBeginRenderingKHR and
-    slink:VkRenderingInfoKHR::pname:pStencilAttachment->pname:imageView was
-    not dlink:VK_NULL_HANDLE, the value of
-    slink:VkPipelineRenderingCreateInfoKHR::pname:stencilAttachmentFormat
-    used to create the currently bound graphics pipeline must: be equal to
-    the elink:VkFormat used to create
-    slink:VkRenderingInfoKHR::pname:pStencilAttachment->pname:imageView
-ifdef::VK_KHR_fragment_shading_rate[]
-  * [[VUID-{refpage}-imageView-06183]]
-    If the current render pass instance was begun with
-    flink:vkCmdBeginRenderingKHR and
-    slink:VkRenderingFragmentShadingRateAttachmentInfoKHR::pname:imageView
-    was not dlink:VK_NULL_HANDLE, the currently bound graphics pipeline
-    must: have been created with
-    ename:VK_PIPELINE_RASTERIZATION_STATE_CREATE_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR
-endif::VK_KHR_fragment_shading_rate[]
-ifdef::VK_EXT_fragment_density_map[]
-  * [[VUID-{refpage}-imageView-06184]]
-    If the current render pass instance was begun with
-    flink:vkCmdBeginRenderingKHR and
-    slink:VkRenderingFragmentDensityMapAttachmentInfoEXT::pname:imageView
-    was not dlink:VK_NULL_HANDLE, the currently bound graphics pipeline
-    must: have been created with
-    ename:VK_PIPELINE_RASTERIZATION_STATE_CREATE_FRAGMENT_DENSITY_MAP_ATTACHMENT_BIT_EXT
-endif::VK_EXT_fragment_density_map[]
-ifdef::VK_AMD_mixed_attachment_samples,VK_NV_framebuffer_mixed_samples[]
-  * [[VUID-{refpage}-colorAttachmentCount-06185]]
-    If the currently bound pipeline was created with a
-    slink:VkAttachmentSampleCountInfoAMD or
-    slink:VkAttachmentSampleCountInfoNV structure, and the current render
-    pass instance was begun with flink:vkCmdBeginRenderingKHR with a
-    slink:VkRenderingInfoKHR::pname:colorAttachmentCount parameter greater
-    than `0`, then each element of the
-    slink:VkRenderingInfoKHR::pname:pColorAttachments array with a
-    pname:imageView not equal to dlink:VK_NULL_HANDLE must: have been
-    created with a sample count equal to the corresponding element of the
-    pname:pColorAttachmentSamples member of
-    slink:VkAttachmentSampleCountInfoAMD or
-    slink:VkAttachmentSampleCountInfoNV used to create the currently bound
-    graphics pipeline
-  * [[VUID-{refpage}-pDepthAttachment-06186]]
-    If the current render pass instance was begun with
-    flink:vkCmdBeginRenderingKHR, the currently bound pipeline was created
-    with a slink:VkAttachmentSampleCountInfoAMD or
-    slink:VkAttachmentSampleCountInfoNV structure, and
-    slink:VkRenderingInfoKHR::pname:pDepthAttachment->pname:imageView was
-    not dlink:VK_NULL_HANDLE, the value of the
-    pname:depthStencilAttachmentSamples member of
-    slink:VkAttachmentSampleCountInfoAMD or
-    slink:VkAttachmentSampleCountInfoNV used to create the currently bound
-    graphics pipeline must: be equal to the sample count used to create
-    slink:VkRenderingInfoKHR::pname:pDepthAttachment->pname:imageView
-  * [[VUID-{refpage}-pStencilAttachment-06187]]
-    If the current render pass instance was begun with
-    flink:vkCmdBeginRenderingKHR, the currently bound pipeline was created
-    with a slink:VkAttachmentSampleCountInfoAMD or
-    slink:VkAttachmentSampleCountInfoNV structure, and
-    slink:VkRenderingInfoKHR::pname:pStencilAttachment->pname:imageView was
-    not dlink:VK_NULL_HANDLE, the value of the
-    pname:depthStencilAttachmentSamples member of
-    slink:VkAttachmentSampleCountInfoAMD or
-    slink:VkAttachmentSampleCountInfoNV used to create the currently bound
-    graphics pipeline must: be equal to the sample count used to create
-    slink:VkRenderingInfoKHR::pname:pStencilAttachment->pname:imageView
-  * [[VUID-{refpage}-colorAttachmentCount-06188]]
-    If the currently bound pipeline was created without a
-    slink:VkAttachmentSampleCountInfoAMD or
-    slink:VkAttachmentSampleCountInfoNV structure, and the current render
-    pass instance was begun with flink:vkCmdBeginRenderingKHR with a
-    slink:VkRenderingInfoKHR::pname:colorAttachmentCount parameter greater
-    than `0`, then each element of the
-    slink:VkRenderingInfoKHR::pname:pColorAttachments array with a
-    pname:imageView not equal to dlink:VK_NULL_HANDLE must: have been
-    created with a sample count equal to the value of
-    slink:VkPipelineMultisampleStateCreateInfo::pname:rasterizationSamples
-    used to create the currently bound graphics pipeline
-  * [[VUID-{refpage}-pDepthAttachment-06189]]
-    If the current render pass instance was begun with
-    flink:vkCmdBeginRenderingKHR, the currently bound pipeline was created
-    without a slink:VkAttachmentSampleCountInfoAMD or
-    slink:VkAttachmentSampleCountInfoNV structure, and
-    slink:VkRenderingInfoKHR::pname:pDepthAttachment->pname:imageView was
-    not dlink:VK_NULL_HANDLE, the value of
-    slink:VkPipelineMultisampleStateCreateInfo::pname:rasterizationSamples
-    used to create the currently bound graphics pipeline must: be equal to
-    the sample count used to create
-    slink:VkRenderingInfoKHR::pname:pDepthAttachment->pname:imageView
-  * [[VUID-{refpage}-pStencilAttachment-06190]]
-    If the current render pass instance was begun with
-    flink:vkCmdBeginRenderingKHR, the currently bound pipeline was created
-    without a slink:VkAttachmentSampleCountInfoAMD or
-    slink:VkAttachmentSampleCountInfoNV structure, and
-    slink:VkRenderingInfoKHR::pname:pStencilAttachment->pname:imageView was
-    not dlink:VK_NULL_HANDLE, the value of
-    slink:VkPipelineMultisampleStateCreateInfo::pname:rasterizationSamples
-    used to create the currently bound graphics pipeline must: be equal to
-    the sample count used to create
-    slink:VkRenderingInfoKHR::pname:pStencilAttachment->pname:imageView
-  * [[VUID-{refpage}-renderPass-06198]]
-    If the current render pass instance was begun with
-    flink:vkCmdBeginRenderingKHR, the currently bound pipeline must: have
-    been created with a slink:VkGraphicsPipelineCreateInfo::pname:renderPass
-    equal to dlink:VK_NULL_HANDLE
-endif::VK_AMD_mixed_attachment_samples,VK_NV_framebuffer_mixed_samples[]
-endif::VK_KHR_dynamic_rendering[]
-// Common Valid Usage
diff --git a/registry/vulkan/chapters/commonvalidity/draw_dispatch_common.txt b/registry/vulkan/chapters/commonvalidity/draw_dispatch_common.txt
deleted file mode 100644
index 6146953..0000000
--- a/registry/vulkan/chapters/commonvalidity/draw_dispatch_common.txt
+++ /dev/null
@@ -1,208 +0,0 @@
-// Copyright 2019-2021 The Khronos Group Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-// Common Valid Usage
-// Common to all dispatch and drawing commands
-  * [[VUID-{refpage}-magFilter-04553]]
-    If a slink:VkSampler created with pname:magFilter or pname:minFilter
-    equal to ename:VK_FILTER_LINEAR and pname:compareEnable equal to
-    ename:VK_FALSE is used to sample a slink:VkImageView as a result of this
-    command, then the image view's
-    <<resources-image-view-format-features,format features>> must: contain
-    ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT
-  * [[VUID-{refpage}-mipmapMode-04770]]
-    If a slink:VkSampler created with pname:mipmapMode equal to
-    ename:VK_SAMPLER_MIPMAP_MODE_LINEAR and pname:compareEnable equal to
-    ename:VK_FALSE is used to sample a slink:VkImageView as a result of this
-    command, then the image view's
-    <<resources-image-view-format-features,format features>> must: contain
-    ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT
-  * [[VUID-{refpage}-None-02691]]
-    If a sname:VkImageView is accessed using atomic operations as a result
-    of this command, then the image view's
-    <<resources-image-view-format-features,format features>> must: contain
-    ename:VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT
-ifdef::VK_IMG_filter_cubic,VK_EXT_filter_cubic[]
-  * [[VUID-{refpage}-None-02692]]
-    If a sname:VkImageView is sampled with ename:VK_FILTER_CUBIC_EXT as a
-    result of this command, then the image view's
-    <<resources-image-view-format-features,format features>> must: contain
-    ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_EXT
-ifndef::VK_EXT_filter_cubic[]
-  * [[VUID-{refpage}-None-02693]]
-    Any slink:VkImageView being sampled with ename:VK_FILTER_CUBIC_EXT as a
-    result of this command must: not have a elink:VkImageViewType of
-    ename:VK_IMAGE_VIEW_TYPE_3D, ename:VK_IMAGE_VIEW_TYPE_CUBE, or
-    ename:VK_IMAGE_VIEW_TYPE_CUBE_ARRAY
-endif::VK_EXT_filter_cubic[]
-ifdef::VK_EXT_filter_cubic[]
-  * [[VUID-{refpage}-filterCubic-02694]]
-    Any slink:VkImageView being sampled with ename:VK_FILTER_CUBIC_EXT as a
-    result of this command must: have a elink:VkImageViewType and format
-    that supports cubic filtering, as specified by
-    sname:VkFilterCubicImageViewImageFormatPropertiesEXT::pname:filterCubic
-    returned by fname:vkGetPhysicalDeviceImageFormatProperties2
-  * [[VUID-{refpage}-filterCubicMinmax-02695]]
-    Any slink:VkImageView being sampled with ename:VK_FILTER_CUBIC_EXT with
-    a reduction mode of either ename:VK_SAMPLER_REDUCTION_MODE_MIN or
-    ename:VK_SAMPLER_REDUCTION_MODE_MAX as a result of this command must:
-    have a elink:VkImageViewType and format that supports cubic filtering
-    together with minmax filtering, as specified by
-    sname:VkFilterCubicImageViewImageFormatPropertiesEXT::pname:filterCubicMinmax
-    returned by fname:vkGetPhysicalDeviceImageFormatProperties2
-endif::VK_EXT_filter_cubic[]
-endif::VK_IMG_filter_cubic,VK_EXT_filter_cubic[]
-ifdef::VK_NV_corner_sampled_image[]
-  * [[VUID-{refpage}-flags-02696]]
-    Any slink:VkImage created with a slink:VkImageCreateInfo::pname:flags
-    containing ename:VK_IMAGE_CREATE_CORNER_SAMPLED_BIT_NV sampled as a
-    result of this command must: only be sampled using a
-    elink:VkSamplerAddressMode of
-    ename:VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE
-endif::VK_NV_corner_sampled_image[]
-ifdef::VK_KHR_format_feature_flags2[]
-  * [[VUID-{refpage}-OpTypeImage-06423]]
-    Any slink:VkImageView or slink:VkBufferView being written as a storage
-    image or storage texel buffer where the image format field of the
-    code:OpTypeImage is code:Unknown must: have image format features that
-    support ename:VK_FORMAT_FEATURE_2_STORAGE_WRITE_WITHOUT_FORMAT_BIT_KHR
-  * [[VUID-{refpage}-OpTypeImage-06424]]
-    Any slink:VkImageView or slink:VkBufferView being read as a storage
-    image or storage texel buffer where the image format field of the
-    code:OpTypeImage is code:Unknown must: have image format features that
-    support ename:VK_FORMAT_FEATURE_2_STORAGE_READ_WITHOUT_FORMAT_BIT_KHR
-endif::VK_KHR_format_feature_flags2[]
-  * [[VUID-{refpage}-None-02697]]
-    For each set _n_ that is statically used by the sname:VkPipeline bound
-    to the pipeline bind point used by this command, a descriptor set must:
-    have been bound to _n_ at the same pipeline bind point, with a
-    sname:VkPipelineLayout that is compatible for set _n_, with the
-    sname:VkPipelineLayout used to create the current sname:VkPipeline, as
-    described in <<descriptorsets-compatibility>>
-ifndef::VK_KHR_maintenance4[]
-  * [[VUID-{refpage}-None-02698]]
-    For each push constant that is statically used by the sname:VkPipeline
-    bound to the pipeline bind point used by this command, a push constant
-    value must: have been set for the same pipeline bind point, with a
-    sname:VkPipelineLayout that is compatible for push constants, with the
-    sname:VkPipelineLayout used to create the current sname:VkPipeline, as
-    described in <<descriptorsets-compatibility>>
-endif::VK_KHR_maintenance4[]
-ifdef::VK_KHR_maintenance4[]
-  * [[VUID-{refpage}-maintenance4-06425]]
-    If the <<features-maintenance4, pname:maintenance4>> feature is not
-    enabled, then for each push constant that is statically used by the
-    sname:VkPipeline bound to the pipeline bind point used by this command,
-    a push constant value must: have been set for the same pipeline bind
-    point, with a sname:VkPipelineLayout that is compatible for push
-    constants, with the sname:VkPipelineLayout used to create the current
-    sname:VkPipeline, as described in <<descriptorsets-compatibility>>
-endif::VK_KHR_maintenance4[]
-  * [[VUID-{refpage}-None-02699]]
-    Descriptors in each bound descriptor set, specified via
-    fname:vkCmdBindDescriptorSets, must: be valid if they are statically
-    used by the sname:VkPipeline bound to the pipeline bind point used by
-    this command
-  * [[VUID-{refpage}-None-02700]]
-    A valid pipeline must: be bound to the pipeline bind point used by this
-    command
-  * [[VUID-{refpage}-commandBuffer-02701]]
-    If the sname:VkPipeline object bound to the pipeline bind point used by
-    this command requires any dynamic state, that state must: have been set
-    or inherited (if the `apiext:VK_NV_inherited_viewport_scissor` extension
-    is enabled) for pname:commandBuffer, and done so after any previously
-    bound pipeline with the corresponding state not specified as dynamic
-  * [[VUID-{refpage}-None-02859]]
-    There must: not have been any calls to dynamic state setting commands
-    for any state not specified as dynamic in the sname:VkPipeline object
-    bound to the pipeline bind point used by this command, since that
-    pipeline was bound
-  * [[VUID-{refpage}-None-02702]]
-    If the sname:VkPipeline object bound to the pipeline bind point used by
-    this command accesses a sname:VkSampler object that uses unnormalized
-    coordinates, that sampler must: not be used to sample from any
-    sname:VkImage with a sname:VkImageView of the type
-    ename:VK_IMAGE_VIEW_TYPE_3D, ename:VK_IMAGE_VIEW_TYPE_CUBE,
-    ename:VK_IMAGE_VIEW_TYPE_1D_ARRAY, ename:VK_IMAGE_VIEW_TYPE_2D_ARRAY or
-    ename:VK_IMAGE_VIEW_TYPE_CUBE_ARRAY, in any shader stage
-  * [[VUID-{refpage}-None-02703]]
-    If the sname:VkPipeline object bound to the pipeline bind point used by
-    this command accesses a sname:VkSampler object that uses unnormalized
-    coordinates, that sampler must: not be used with any of the SPIR-V
-    `OpImageSample*` or `OpImageSparseSample*` instructions with
-    code:ImplicitLod, code:Dref or code:Proj in their name, in any shader
-    stage
-  * [[VUID-{refpage}-None-02704]]
-    If the sname:VkPipeline object bound to the pipeline bind point used by
-    this command accesses a sname:VkSampler object that uses unnormalized
-    coordinates, that sampler must: not be used with any of the SPIR-V
-    `OpImageSample*` or `OpImageSparseSample*` instructions that includes a
-    LOD bias or any offset values, in any shader stage
-  * [[VUID-{refpage}-None-02705]]
-    If the <<features-robustBufferAccess,robust buffer access>> feature is
-    not enabled, and if the sname:VkPipeline object bound to the pipeline
-    bind point used by this command accesses a uniform buffer, it must: not
-    access values outside of the range of the buffer as specified in the
-    descriptor set bound to the same pipeline bind point
-  * [[VUID-{refpage}-None-02706]]
-    If the <<features-robustBufferAccess,robust buffer access>> feature is
-    not enabled, and if the sname:VkPipeline object bound to the pipeline
-    bind point used by this command accesses a storage buffer, it must: not
-    access values outside of the range of the buffer as specified in the
-    descriptor set bound to the same pipeline bind point
-ifdef::VK_VERSION_1_1[]
-  * [[VUID-{refpage}-commandBuffer-02707]]
-    If pname:commandBuffer is an unprotected command buffer and
-    <<limits-protectedNoFault, pname:protectedNoFault>> is not supported,
-    any resource accessed by the slink:VkPipeline object bound to the
-    pipeline bind point used by this command must: not be a protected
-    resource
-endif::VK_VERSION_1_1[]
-  * [[VUID-{refpage}-None-04115]]
-    If a slink:VkImageView is accessed using code:OpImageWrite as a result
-    of this command, then the code:Type of the code:Texel operand of that
-    instruction must: have at least as many components as the image view's
-    format
-  * [[VUID-{refpage}-OpImageWrite-04469]]
-    If a slink:VkBufferView is accessed using code:OpImageWrite as a result
-    of this command, then the code:Type of the code:Texel operand of that
-    instruction must: have at least as many components as the buffer view's
-    format
-ifdef::VK_EXT_shader_image_atomic_int64[]
-  * [[VUID-{refpage}-SampledType-04470]]
-    If a slink:VkImageView with a elink:VkFormat that has a 64-bit component
-    width is accessed as a result of this command, the code:SampledType of
-    the code:OpTypeImage operand of that instruction must: have a code:Width
-    of 64
-  * [[VUID-{refpage}-SampledType-04471]]
-    If a slink:VkImageView with a elink:VkFormat that has a component width
-    less than 64-bit is accessed as a result of this command, the
-    code:SampledType of the code:OpTypeImage operand of that instruction
-    must: have a code:Width of 32
-  * [[VUID-{refpage}-SampledType-04472]]
-    If a slink:VkBufferView with a elink:VkFormat that has a 64-bit
-    component width is accessed as a result of this command, the
-    code:SampledType of the code:OpTypeImage operand of that instruction
-    must: have a code:Width of 64
-  * [[VUID-{refpage}-SampledType-04473]]
-    If a slink:VkBufferView with a elink:VkFormat that has a component width
-    less than 64-bit is accessed as a result of this command, the
-    code:SampledType of the code:OpTypeImage operand of that instruction
-    must: have a code:Width of 32
-  * [[VUID-{refpage}-sparseImageInt64Atomics-04474]]
-    If the
-    <<features-sparseImageInt64Atomics,pname:sparseImageInt64Atomics>>
-    feature is not enabled, slink:VkImage objects created with the
-    ename:VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT flag must: not be accessed by
-    atomic instructions through an code:OpTypeImage with a code:SampledType
-    with a code:Width of 64 by this command
-  * [[VUID-{refpage}-sparseImageInt64Atomics-04475]]
-    If the
-    <<features-sparseImageInt64Atomics,pname:sparseImageInt64Atomics>>
-    feature is not enabled, slink:VkBuffer objects created with the
-    ename:VK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT flag must: not be accessed
-    by atomic instructions through an code:OpTypeImage with a
-    code:SampledType with a code:Width of 64 by this command
-endif::VK_EXT_shader_image_atomic_int64[]
-// Common Valid Usage
diff --git a/registry/vulkan/chapters/commonvalidity/draw_dispatch_indirect_common.txt b/registry/vulkan/chapters/commonvalidity/draw_dispatch_indirect_common.txt
deleted file mode 100644
index 106f24a..0000000
--- a/registry/vulkan/chapters/commonvalidity/draw_dispatch_indirect_common.txt
+++ /dev/null
@@ -1,19 +0,0 @@
-// Copyright 2019-2021 The Khronos Group Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-// Common Valid Usage
-// Common to indirect drawing commands
-  * [[VUID-{refpage}-buffer-02708]]
-    If pname:buffer is non-sparse then it must: be bound completely and
-    contiguously to a single sname:VkDeviceMemory object
-  * [[VUID-{refpage}-buffer-02709]]
-    pname:buffer must: have been created with the
-    ename:VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT bit set
-  * [[VUID-{refpage}-offset-02710]]
-    pname:offset must: be a multiple of `4`
-ifdef::VK_VERSION_1_1[]
-  * [[VUID-{refpage}-commandBuffer-02711]]
-    pname:commandBuffer must: not be a protected command buffer
-endif::VK_VERSION_1_1[]
-// Common Valid Usage
diff --git a/registry/vulkan/chapters/commonvalidity/draw_dispatch_nonindirect_common.txt b/registry/vulkan/chapters/commonvalidity/draw_dispatch_nonindirect_common.txt
deleted file mode 100644
index ca8a562..0000000
--- a/registry/vulkan/chapters/commonvalidity/draw_dispatch_nonindirect_common.txt
+++ /dev/null
@@ -1,26 +0,0 @@
-// Copyright 2019-2021 The Khronos Group Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-// Common Valid Usage
-// Common to non-indirect drawing commands
-ifdef::VK_VERSION_1_1[]
-  * [[VUID-{refpage}-commandBuffer-02712]]
-    If pname:commandBuffer is a protected command buffer and
-    <<limits-protectedNoFault, pname:protectedNoFault>> is not supported,
-    any resource written to by the sname:VkPipeline object bound to the
-    pipeline bind point used by this command must: not be an unprotected
-    resource
-  * [[VUID-{refpage}-commandBuffer-02713]]
-    If pname:commandBuffer is a protected command buffer and
-    <<limits-protectedNoFault, pname:protectedNoFault>> is not supported,
-    pipeline stages other than the framebuffer-space and compute stages in
-    the sname:VkPipeline object bound to the pipeline bind point used by
-    this command must: not write to any resource
-  * [[VUID-{refpage}-commandBuffer-04617]]
-    If any of the shader stages of the sname:VkPipeline bound to the
-    pipeline bind point used by this command uses the
-    <<spirvenv-capabilities-table-RayQueryKHR,RayQueryKHR>> capability, then
-    pname:commandBuffer must: not be a protected command buffer
-endif::VK_VERSION_1_1[]
-// Common Valid Usage
diff --git a/registry/vulkan/chapters/commonvalidity/draw_indirect_count_common.txt b/registry/vulkan/chapters/commonvalidity/draw_indirect_count_common.txt
deleted file mode 100644
index 0bde71c..0000000
--- a/registry/vulkan/chapters/commonvalidity/draw_indirect_count_common.txt
+++ /dev/null
@@ -1,26 +0,0 @@
-// Copyright 2019-2021 The Khronos Group Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-// Common Valid Usage
-// Common to indirect drawing commands with a pname:countBuffer parameter
-  * [[VUID-{refpage}-countBuffer-02714]]
-    If pname:countBuffer is non-sparse then it must: be bound completely and
-    contiguously to a single sname:VkDeviceMemory object
-  * [[VUID-{refpage}-countBuffer-02715]]
-    pname:countBuffer must: have been created with the
-    ename:VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT bit set
-  * [[VUID-{refpage}-countBufferOffset-02716]]
-    pname:countBufferOffset must: be a multiple of `4`
-  * [[VUID-{refpage}-countBuffer-02717]]
-    The count stored in pname:countBuffer must: be less than or equal to
-    sname:VkPhysicalDeviceLimits::pname:maxDrawIndirectCount
-  * [[VUID-{refpage}-countBufferOffset-04129]]
-    [eq]#(pname:countBufferOffset {plus} code:sizeof(uint32_t))# must: be
-    less than or equal to the size of pname:countBuffer
-ifdef::VK_VERSION_1_2[]
-  * [[VUID-{refpage}-None-04445]]
-    If <<features-drawIndirectCount,drawIndirectCount>> is not enabled this
-    function must: not be used
-endif::VK_VERSION_1_2[]
-// Common Valid Usage
diff --git a/registry/vulkan/chapters/commonvalidity/draw_indirect_drawcount.txt b/registry/vulkan/chapters/commonvalidity/draw_indirect_drawcount.txt
deleted file mode 100644
index ffcec87..0000000
--- a/registry/vulkan/chapters/commonvalidity/draw_indirect_drawcount.txt
+++ /dev/null
@@ -1,13 +0,0 @@
-// Copyright 2019-2021 The Khronos Group Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-// Common Valid Usage
-// Common to indirect drawing commands with a pname:drawCount parameter
-  * [[VUID-{refpage}-drawCount-02718]]
-    If the <<features-multiDrawIndirect,multi-draw indirect>> feature is not
-    enabled, pname:drawCount must: be `0` or `1`
-  * [[VUID-{refpage}-drawCount-02719]]
-    pname:drawCount must: be less than or equal to
-    sname:VkPhysicalDeviceLimits::pname:maxDrawIndirectCount
-// Common Valid Usage
diff --git a/registry/vulkan/chapters/commonvalidity/draw_vertex_binding.txt b/registry/vulkan/chapters/commonvalidity/draw_vertex_binding.txt
deleted file mode 100644
index 7f57278..0000000
--- a/registry/vulkan/chapters/commonvalidity/draw_vertex_binding.txt
+++ /dev/null
@@ -1,20 +0,0 @@
-// Copyright 2019-2021 The Khronos Group Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-// Common Valid Usage
-// Common to drawing commands that consume vertex binding state
-  * [[VUID-{refpage}-None-04007]]
-    All vertex input bindings accessed via vertex input variables declared
-    in the vertex shader entry point's interface must: have either valid or
-    dlink:VK_NULL_HANDLE buffers bound
-  * [[VUID-{refpage}-None-04008]]
-    If the <<features-nullDescriptor,nullDescriptor>> feature is not
-    enabled, all vertex input bindings accessed via vertex input variables
-    declared in the vertex shader entry point's interface must: not be
-    dlink:VK_NULL_HANDLE
-  * [[VUID-{refpage}-None-02721]]
-    For a given vertex buffer binding, any attribute data fetched must: be
-    entirely contained within the corresponding vertex buffer binding, as
-    described in <<fxvertex-input>>
-// Common Valid Usage
diff --git a/registry/vulkan/chapters/commonvalidity/fine_sync_commands_common.txt b/registry/vulkan/chapters/commonvalidity/fine_sync_commands_common.txt
deleted file mode 100644
index 99b3351..0000000
--- a/registry/vulkan/chapters/commonvalidity/fine_sync_commands_common.txt
+++ /dev/null
@@ -1,59 +0,0 @@
-// Copyright 2019-2021 The Khronos Group Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-// Common Valid Usage
-// Common to vkCmdPipelineBarrier and vkCmdWaitEvents
-  * [[VUID-{refpage}-srcAccessMask-02815]]
-    The pname:srcAccessMask member of each element of pname:pMemoryBarriers
-    must: only include access flags that are supported by one or more of the
-    pipeline stages in pname:srcStageMask, as specified in the
-    <<synchronization-access-types-supported, table of supported access
-    types>>
-  * [[VUID-{refpage}-dstAccessMask-02816]]
-    The pname:dstAccessMask member of each element of pname:pMemoryBarriers
-    must: only include access flags that are supported by one or more of the
-    pipeline stages in pname:dstStageMask, as specified in the
-    <<synchronization-access-types-supported, table of supported access
-    types>>
-  * [[VUID-{refpage}-pBufferMemoryBarriers-02817]]
-    For any element of pname:pBufferMemoryBarriers, if its
-    pname:srcQueueFamilyIndex and pname:dstQueueFamilyIndex members are
-    equal, or if its pname:srcQueueFamilyIndex is the queue family index
-    that was used to create the command pool that pname:commandBuffer was
-    allocated from, then its pname:srcAccessMask member must: only contain
-    access flags that are supported by one or more of the pipeline stages in
-    pname:srcStageMask, as specified in the
-    <<synchronization-access-types-supported, table of supported access
-    types>>
-  * [[VUID-{refpage}-pBufferMemoryBarriers-02818]]
-    For any element of pname:pBufferMemoryBarriers, if its
-    pname:srcQueueFamilyIndex and pname:dstQueueFamilyIndex members are
-    equal, or if its pname:dstQueueFamilyIndex is the queue family index
-    that was used to create the command pool that pname:commandBuffer was
-    allocated from, then its pname:dstAccessMask member must: only contain
-    access flags that are supported by one or more of the pipeline stages in
-    pname:dstStageMask, as specified in the
-    <<synchronization-access-types-supported, table of supported access
-    types>>
-  * [[VUID-{refpage}-pImageMemoryBarriers-02819]]
-    For any element of pname:pImageMemoryBarriers, if its
-    pname:srcQueueFamilyIndex and pname:dstQueueFamilyIndex members are
-    equal, or if its pname:srcQueueFamilyIndex is the queue family index
-    that was used to create the command pool that pname:commandBuffer was
-    allocated from, then its pname:srcAccessMask member must: only contain
-    access flags that are supported by one or more of the pipeline stages in
-    pname:srcStageMask, as specified in the
-    <<synchronization-access-types-supported, table of supported access
-    types>>
-  * [[VUID-{refpage}-pImageMemoryBarriers-02820]]
-    For any element of pname:pImageMemoryBarriers, if its
-    pname:srcQueueFamilyIndex and pname:dstQueueFamilyIndex members are
-    equal, or if its pname:dstQueueFamilyIndex is the queue family index
-    that was used to create the command pool that pname:commandBuffer was
-    allocated from, then its pname:dstAccessMask member must: only contain
-    access flags that are supported by one or more of the pipeline stages in
-    pname:dstStageMask, as specified in the
-    <<synchronization-access-types-supported, table of supported access
-    types>>
-// Common Valid Usage
diff --git a/registry/vulkan/chapters/commonvalidity/image_blit_common.txt b/registry/vulkan/chapters/commonvalidity/image_blit_common.txt
deleted file mode 100644
index fb9c864..0000000
--- a/registry/vulkan/chapters/commonvalidity/image_blit_common.txt
+++ /dev/null
@@ -1,13 +0,0 @@
-// Copyright 2020-2021 The Khronos Group Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-// Common Valid Usage
-// Common to VkImageBlit* structures
-  * [[VUID-{refpage}-aspectMask-00238]]
-    The pname:aspectMask member of pname:srcSubresource and
-    pname:dstSubresource must: match
-  * [[VUID-{refpage}-layerCount-00239]]
-    The pname:layerCount member of pname:srcSubresource and
-    pname:dstSubresource must: match
-// Common Valid Usage
diff --git a/registry/vulkan/chapters/commonvalidity/image_copy_common.txt b/registry/vulkan/chapters/commonvalidity/image_copy_common.txt
deleted file mode 100644
index f48646e..0000000
--- a/registry/vulkan/chapters/commonvalidity/image_copy_common.txt
+++ /dev/null
@@ -1,24 +0,0 @@
-// Copyright 2020-2021 The Khronos Group Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-// Common Valid Usage
-// Common to VkImageCopy* struct
-ifndef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
-  * [[VUID-{refpage}-aspectMask-00137]]
-    The pname:aspectMask member of pname:srcSubresource and
-    pname:dstSubresource must: match
-endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
-ifndef::VK_VERSION_1_1,VK_KHR_maintenance1[]
-  * [[VUID-{refpage}-layerCount-00138]]
-    The pname:layerCount member of pname:srcSubresource and
-    pname:dstSubresource must: match
-endif::VK_VERSION_1_1,VK_KHR_maintenance1[]
-ifdef::VK_VERSION_1_1,VK_KHR_maintenance1[]
-  * [[VUID-{refpage}-extent-00140]]
-    The number of slices of the pname:extent (for 3D) or layers of the
-    pname:srcSubresource (for non-3D) must: match the number of slices of
-    the pname:extent (for 3D) or layers of the pname:dstSubresource (for
-    non-3D)
-endif::VK_VERSION_1_1,VK_KHR_maintenance1[]
-// Common Valid Usage
diff --git a/registry/vulkan/chapters/commonvalidity/image_memory_barrier_common.txt b/registry/vulkan/chapters/commonvalidity/image_memory_barrier_common.txt
deleted file mode 100644
index d56ce88..0000000
--- a/registry/vulkan/chapters/commonvalidity/image_memory_barrier_common.txt
+++ /dev/null
@@ -1,263 +0,0 @@
-// Copyright 2019-2021 The Khronos Group Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-// Common Valid Usage
-// Common to VkImageMemoryBarrier* structs
-  * [[VUID-{refpage}-subresourceRange-01486]]
-    pname:subresourceRange.baseMipLevel must: be less than the
-    pname:mipLevels specified in slink:VkImageCreateInfo when pname:image
-    was created
-  * [[VUID-{refpage}-subresourceRange-01724]]
-    If pname:subresourceRange.levelCount is not
-    ename:VK_REMAINING_MIP_LEVELS, [eq]#pname:subresourceRange.baseMipLevel
-    {plus} pname:subresourceRange.levelCount# must: be less than or equal to
-    the pname:mipLevels specified in slink:VkImageCreateInfo when
-    pname:image was created
-  * [[VUID-{refpage}-subresourceRange-01488]]
-    pname:subresourceRange.baseArrayLayer must: be less than the
-    pname:arrayLayers specified in slink:VkImageCreateInfo when pname:image
-    was created
-  * [[VUID-{refpage}-subresourceRange-01725]]
-    If pname:subresourceRange.layerCount is not
-    ename:VK_REMAINING_ARRAY_LAYERS,
-    [eq]#pname:subresourceRange.baseArrayLayer {plus}
-    pname:subresourceRange.layerCount# must: be less than or equal to the
-    pname:arrayLayers specified in slink:VkImageCreateInfo when pname:image
-    was created
-  * [[VUID-{refpage}-image-01932]]
-    If pname:image is non-sparse then it must: be bound completely and
-    contiguously to a single sname:VkDeviceMemory object
-  * [[VUID-{refpage}-oldLayout-01208]]
-    If pname:srcQueueFamilyIndex and pname:dstQueueFamilyIndex define a
-    <<synchronization-queue-transfers, queue family ownership transfer>> or
-    pname:oldLayout and pname:newLayout define an
-    <<synchronization-image-layout-transitions, image layout transition>>,
-    and pname:oldLayout or pname:newLayout is
-    ename:VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL then pname:image must:
-    have been created with ename:VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT
-  * [[VUID-{refpage}-oldLayout-01209]]
-    If pname:srcQueueFamilyIndex and pname:dstQueueFamilyIndex define a
-    <<synchronization-queue-transfers, queue family ownership transfer>> or
-    pname:oldLayout and pname:newLayout define an
-    <<synchronization-image-layout-transitions, image layout transition>>,
-    and pname:oldLayout or pname:newLayout is
-    ename:VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL then pname:image
-    must: have been created with
-    ename:VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT
-  * [[VUID-{refpage}-oldLayout-01210]]
-    If pname:srcQueueFamilyIndex and pname:dstQueueFamilyIndex define a
-    <<synchronization-queue-transfers, queue family ownership transfer>> or
-    pname:oldLayout and pname:newLayout define an
-    <<synchronization-image-layout-transitions, image layout transition>>,
-    and pname:oldLayout or pname:newLayout is
-    ename:VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL then pname:image
-    must: have been created with
-    ename:VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT
-  * [[VUID-{refpage}-oldLayout-01211]]
-    If pname:srcQueueFamilyIndex and pname:dstQueueFamilyIndex define a
-    <<synchronization-queue-transfers, queue family ownership transfer>> or
-    pname:oldLayout and pname:newLayout define an
-    <<synchronization-image-layout-transitions, image layout transition>>,
-    and pname:oldLayout or pname:newLayout is
-    ename:VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL then pname:image must:
-    have been created with ename:VK_IMAGE_USAGE_SAMPLED_BIT or
-    ename:VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT
-  * [[VUID-{refpage}-oldLayout-01212]]
-    If pname:srcQueueFamilyIndex and pname:dstQueueFamilyIndex define a
-    <<synchronization-queue-transfers, queue family ownership transfer>> or
-    pname:oldLayout and pname:newLayout define an
-    <<synchronization-image-layout-transitions, image layout transition>>,
-    and pname:oldLayout or pname:newLayout is
-    ename:VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL then pname:image must: have
-    been created with ename:VK_IMAGE_USAGE_TRANSFER_SRC_BIT
-  * [[VUID-{refpage}-oldLayout-01213]]
-    If pname:srcQueueFamilyIndex and pname:dstQueueFamilyIndex define a
-    <<synchronization-queue-transfers, queue family ownership transfer>> or
-    pname:oldLayout and pname:newLayout define an
-    <<synchronization-image-layout-transitions, image layout transition>>,
-    and pname:oldLayout or pname:newLayout is
-    ename:VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL then pname:image must: have
-    been created with ename:VK_IMAGE_USAGE_TRANSFER_DST_BIT
-  * [[VUID-{refpage}-oldLayout-01197]]
-    If pname:srcQueueFamilyIndex and pname:dstQueueFamilyIndex define a
-    <<synchronization-queue-transfers, queue family ownership transfer>> or
-    pname:oldLayout and pname:newLayout define an
-    <<synchronization-image-layout-transitions, image layout transition>>,
-    pname:oldLayout must: be ename:VK_IMAGE_LAYOUT_UNDEFINED or the current
-    layout of the image subresources affected by the barrier
-  * [[VUID-{refpage}-newLayout-01198]]
-    If pname:srcQueueFamilyIndex and pname:dstQueueFamilyIndex define a
-    <<synchronization-queue-transfers, queue family ownership transfer>> or
-    pname:oldLayout and pname:newLayout define an
-    <<synchronization-image-layout-transitions, image layout transition>>,
-    pname:newLayout must: not be ename:VK_IMAGE_LAYOUT_UNDEFINED or
-    ename:VK_IMAGE_LAYOUT_PREINITIALIZED
-ifdef::VK_VERSION_1_1,VK_KHR_maintenance2[]
-  * [[VUID-{refpage}-oldLayout-01658]]
-    If pname:srcQueueFamilyIndex and pname:dstQueueFamilyIndex define a
-    <<synchronization-queue-transfers, queue family ownership transfer>> or
-    pname:oldLayout and pname:newLayout define an
-    <<synchronization-image-layout-transitions, image layout transition>>,
-    and pname:oldLayout or pname:newLayout is
-    ename:VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_OPTIMAL then
-    pname:image must: have been created with
-    ename:VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT
-  * [[VUID-{refpage}-oldLayout-01659]]
-    If pname:srcQueueFamilyIndex and pname:dstQueueFamilyIndex define a
-    <<synchronization-queue-transfers, queue family ownership transfer>> or
-    pname:oldLayout and pname:newLayout define an
-    <<synchronization-image-layout-transitions, image layout transition>>,
-    and pname:oldLayout or pname:newLayout is
-    ename:VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_OPTIMAL then
-    pname:image must: have been created with
-    ename:VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT
-endif::VK_VERSION_1_1,VK_KHR_maintenance2[]
-ifdef::VK_VERSION_1_2,VK_EXT_separate_depth_stencil_layouts[]
-  * [[VUID-{refpage}-srcQueueFamilyIndex-04065]]
-    If pname:srcQueueFamilyIndex and pname:dstQueueFamilyIndex define a
-    <<synchronization-queue-transfers, queue family ownership transfer>> or
-    pname:oldLayout and pname:newLayout define an
-    <<synchronization-image-layout-transitions, image layout transition>>,
-    and pname:oldLayout or pname:newLayout is
-    ename:VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL then pname:image must:
-    have been created with at least one of
-    ename:VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT,
-    ename:VK_IMAGE_USAGE_SAMPLED_BIT, or
-    ename:VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT
-  * [[VUID-{refpage}-srcQueueFamilyIndex-04066]]
-    If pname:srcQueueFamilyIndex and pname:dstQueueFamilyIndex define a
-    <<synchronization-queue-transfers, queue family ownership transfer>> or
-    pname:oldLayout and pname:newLayout define an
-    <<synchronization-image-layout-transitions, image layout transition>>,
-    and pname:oldLayout or pname:newLayout is
-    ename:VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL then pname:image must:
-    have been created with ename:VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT
-    set
-  * [[VUID-{refpage}-srcQueueFamilyIndex-04067]]
-    If pname:srcQueueFamilyIndex and pname:dstQueueFamilyIndex define a
-    <<synchronization-queue-transfers, queue family ownership transfer>> or
-    pname:oldLayout and pname:newLayout define an
-    <<synchronization-image-layout-transitions, image layout transition>>,
-    and pname:oldLayout or pname:newLayout is
-    ename:VK_IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL then pname:image must:
-    have been created with at least one of
-    ename:VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT,
-    ename:VK_IMAGE_USAGE_SAMPLED_BIT, or
-    ename:VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT
-  * [[VUID-{refpage}-srcQueueFamilyIndex-04068]]
-    If pname:srcQueueFamilyIndex and pname:dstQueueFamilyIndex define a
-    <<synchronization-queue-transfers, queue family ownership transfer>> or
-    pname:oldLayout and pname:newLayout define an
-    <<synchronization-image-layout-transitions, image layout transition>>,
-    and pname:oldLayout or pname:newLayout is
-    ename:VK_IMAGE_LAYOUT_STENCIL_ATTACHMENT_OPTIMAL then pname:image must:
-    have been created with ename:VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT
-    set
-endif::VK_VERSION_1_2,VK_EXT_separate_depth_stencil_layouts[]
-ifdef::VK_KHR_synchronization2[]
-  * [[VUID-{refpage}-srcQueueFamilyIndex-03938]]
-    If pname:srcQueueFamilyIndex and pname:dstQueueFamilyIndex define a
-    <<synchronization-queue-transfers, queue family ownership transfer>> or
-    pname:oldLayout and pname:newLayout define an
-    <<synchronization-image-layout-transitions, image layout transition>>,
-    and pname:oldLayout or pname:newLayout is
-    ename:VK_IMAGE_LAYOUT_ATTACHMENT_OPTIMAL_KHR, pname:image must: have
-    been created with ename:VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT or
-    ename:VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT
-  * [[VUID-{refpage}-srcQueueFamilyIndex-03939]]
-    If pname:srcQueueFamilyIndex and pname:dstQueueFamilyIndex define a
-    <<synchronization-queue-transfers, queue family ownership transfer>> or
-    pname:oldLayout and pname:newLayout define an
-    <<synchronization-image-layout-transitions, image layout transition>>,
-    and pname:oldLayout or pname:newLayout is
-    ename:VK_IMAGE_LAYOUT_READ_ONLY_OPTIMAL_KHR, pname:image must: have been
-    created with at least one of
-    ename:VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT,
-    ename:VK_IMAGE_USAGE_SAMPLED_BIT, or
-    ename:VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT
-endif::VK_KHR_synchronization2[]
-ifdef::VK_KHR_fragment_shading_rate,VK_NV_shading_rate_image[]
-  * [[VUID-{refpage}-oldLayout-02088]]
-    If pname:srcQueueFamilyIndex and pname:dstQueueFamilyIndex define a
-    <<synchronization-queue-transfers, queue family ownership transfer>> or
-    pname:oldLayout and pname:newLayout define an
-    <<synchronization-image-layout-transitions, image layout transition>>,
-    and pname:oldLayout or pname:newLayout is
-    ename:VK_IMAGE_LAYOUT_FRAGMENT_SHADING_RATE_ATTACHMENT_OPTIMAL_KHR then
-    pname:image must: have been created with
-    ename:VK_IMAGE_USAGE_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR set
-endif::VK_KHR_fragment_shading_rate,VK_NV_shading_rate_image[]
-ifndef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
-  * [[VUID-{refpage}-image-02902]]
-    If pname:image has a color format, then the pname:aspectMask member of
-    pname:subresourceRange must: be ename:VK_IMAGE_ASPECT_COLOR_BIT
-endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
-ifdef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
-  * [[VUID-{refpage}-image-01671]]
-    If pname:image has a single-plane color format or is not _disjoint_,
-    then the pname:aspectMask member of pname:subresourceRange must: be
-    ename:VK_IMAGE_ASPECT_COLOR_BIT
-  * [[VUID-{refpage}-image-01672]]
-    If pname:image has a multi-planar format and the image is _disjoint_,
-    then the pname:aspectMask member of pname:subresourceRange must: include
-    either at least one of ename:VK_IMAGE_ASPECT_PLANE_0_BIT,
-    ename:VK_IMAGE_ASPECT_PLANE_1_BIT, and
-    ename:VK_IMAGE_ASPECT_PLANE_2_BIT; or must: include
-    ename:VK_IMAGE_ASPECT_COLOR_BIT
-  * [[VUID-{refpage}-image-01673]]
-    If pname:image has a multi-planar format with only two planes, then the
-    pname:aspectMask member of pname:subresourceRange must: not include
-    ename:VK_IMAGE_ASPECT_PLANE_2_BIT
-endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
-ifndef::VK_VERSION_1_2,VK_KHR_separate_depth_stencil_layouts[]
-  * [[VUID-{refpage}-image-01207]]
-    If pname:image has a depth/stencil format with both depth and stencil
-    components, then the pname:aspectMask member of pname:subresourceRange
-    must: include both ename:VK_IMAGE_ASPECT_DEPTH_BIT and
-    ename:VK_IMAGE_ASPECT_STENCIL_BIT
-endif::VK_VERSION_1_2,VK_KHR_separate_depth_stencil_layouts[]
-ifdef::VK_VERSION_1_2,VK_KHR_separate_depth_stencil_layouts[]
-  * [[VUID-{refpage}-image-03319]]
-    If pname:image has a depth/stencil format with both depth and stencil
-    and the <<features-separateDepthStencilLayouts,
-    separateDepthStencilLayouts>> feature is enabled, then the
-    pname:aspectMask member of pname:subresourceRange must: include either
-    or both ename:VK_IMAGE_ASPECT_DEPTH_BIT and
-    ename:VK_IMAGE_ASPECT_STENCIL_BIT
-  * [[VUID-{refpage}-image-03320]]
-    If pname:image has a depth/stencil format with both depth and stencil
-    and the <<features-separateDepthStencilLayouts,
-    separateDepthStencilLayouts>> feature is not enabled, then the
-    pname:aspectMask member of pname:subresourceRange must: include both
-    ename:VK_IMAGE_ASPECT_DEPTH_BIT and ename:VK_IMAGE_ASPECT_STENCIL_BIT
-endif::VK_VERSION_1_2,VK_KHR_separate_depth_stencil_layouts[]
-ifndef::VK_VERSION_1_1,VK_KHR_external_memory[]
-  * [[VUID-{refpage}-image-04069]]
-    If pname:image was created with a sharing mode of
-    ename:VK_SHARING_MODE_EXCLUSIVE, and pname:srcQueueFamilyIndex and
-    pname:dstQueueFamilyIndex are not equal, pname:srcQueueFamilyIndex and
-    pname:dstQueueFamilyIndex must: be valid queue families
-endif::VK_VERSION_1_1,VK_KHR_external_memory[]
-ifdef::VK_VERSION_1_1,VK_KHR_external_memory[]
-  * [[VUID-{refpage}-srcQueueFamilyIndex-04070]]
-    If pname:srcQueueFamilyIndex is not equal to pname:dstQueueFamilyIndex,
-    at least one must: not be a special queue family reserved for external
-    memory ownership transfers, as described in
-    <<synchronization-queue-transfers>>
-  * [[VUID-{refpage}-image-04071]]
-    If pname:image was created with a sharing mode of
-    ename:VK_SHARING_MODE_CONCURRENT, pname:srcQueueFamilyIndex and
-    pname:dstQueueFamilyIndex are not equal, and one of
-    pname:srcQueueFamilyIndex and pname:dstQueueFamilyIndex is one of the
-    special queue family values reserved for external memory transfers, the
-    other must: be ename:VK_QUEUE_FAMILY_IGNORED
-  * [[VUID-{refpage}-image-04072]]
-    If pname:image was created with a sharing mode of
-    ename:VK_SHARING_MODE_EXCLUSIVE, and pname:srcQueueFamilyIndex and
-    pname:dstQueueFamilyIndex are not equal, pname:srcQueueFamilyIndex and
-    pname:dstQueueFamilyIndex must: both be valid queue families, or one of
-    the special queue family values reserved for external memory transfers,
-    as described in <<synchronization-queue-transfers>>
-endif::VK_VERSION_1_1,VK_KHR_external_memory[]
-// Common Valid Usage
diff --git a/registry/vulkan/chapters/commonvalidity/image_resolve_common.txt b/registry/vulkan/chapters/commonvalidity/image_resolve_common.txt
deleted file mode 100644
index 9223b55..0000000
--- a/registry/vulkan/chapters/commonvalidity/image_resolve_common.txt
+++ /dev/null
@@ -1,13 +0,0 @@
-// Copyright 2020-2021 The Khronos Group Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-// Common Valid Usage
-// Common to VkImageResolve* struct
-  * [[VUID-{refpage}-aspectMask-00266]]
-    The pname:aspectMask member of pname:srcSubresource and
-    pname:dstSubresource must: only contain ename:VK_IMAGE_ASPECT_COLOR_BIT
-  * [[VUID-{refpage}-layerCount-00267]]
-    The pname:layerCount member of pname:srcSubresource and
-    pname:dstSubresource must: match
-// Common Valid Usage
diff --git a/registry/vulkan/chapters/commonvalidity/performance_query_begin_common.txt b/registry/vulkan/chapters/commonvalidity/performance_query_begin_common.txt
deleted file mode 100644
index 8b0e9d5..0000000
--- a/registry/vulkan/chapters/commonvalidity/performance_query_begin_common.txt
+++ /dev/null
@@ -1,41 +0,0 @@
-// Copyright 2019-2021 The Khronos Group Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-// Common Valid Usage
-// Common to all drawing commands
-ifdef::VK_KHR_performance_query[]
-  * [[VUID-{refpage}-queryPool-03223]]
-    If pname:queryPool was created with a pname:queryType of
-    ename:VK_QUERY_TYPE_PERFORMANCE_QUERY_KHR, the <<profiling-lock,
-    profiling lock>> must: have been held before flink:vkBeginCommandBuffer
-    was called on pname:commandBuffer
-  * [[VUID-{refpage}-queryPool-03224]]
-    If pname:queryPool was created with a pname:queryType of
-    ename:VK_QUERY_TYPE_PERFORMANCE_QUERY_KHR and one of the counters used
-    to create pname:queryPool was
-    ename:VK_PERFORMANCE_COUNTER_SCOPE_COMMAND_BUFFER_KHR, the query begin
-    must: be the first recorded command in pname:commandBuffer
-  * [[VUID-{refpage}-queryPool-03225]]
-    If pname:queryPool was created with a pname:queryType of
-    ename:VK_QUERY_TYPE_PERFORMANCE_QUERY_KHR and one of the counters used
-    to create pname:queryPool was
-    ename:VK_PERFORMANCE_COUNTER_SCOPE_RENDER_PASS_KHR, the begin command
-    must: not be recorded within a render pass instance
-  * [[VUID-{refpage}-queryPool-03226]]
-    If pname:queryPool was created with a pname:queryType of
-    ename:VK_QUERY_TYPE_PERFORMANCE_QUERY_KHR and another query pool with a
-    pname:queryType ename:VK_QUERY_TYPE_PERFORMANCE_QUERY_KHR has been used
-    within pname:commandBuffer, its parent primary command buffer or
-    secondary command buffer recorded within the same parent primary command
-    buffer as pname:commandBuffer, the
-    <<features-performanceCounterMultipleQueryPools,pname:performanceCounterMultipleQueryPools>>
-    feature must: be enabled
-  * [[VUID-{refpage}-None-02863]]
-    If pname:queryPool was created with a pname:queryType of
-    ename:VK_QUERY_TYPE_PERFORMANCE_QUERY_KHR, this command must: not be
-    recorded in a command buffer that, either directly or through secondary
-    command buffers, also contains a fname:vkCmdResetQueryPool command
-    affecting the same query
-endif::VK_KHR_performance_query[]
-// Common Valid Usage
diff --git a/registry/vulkan/chapters/commonvalidity/pipeline_barrier_common.txt b/registry/vulkan/chapters/commonvalidity/pipeline_barrier_common.txt
deleted file mode 100644
index bcf7755..0000000
--- a/registry/vulkan/chapters/commonvalidity/pipeline_barrier_common.txt
+++ /dev/null
@@ -1,42 +0,0 @@
-// Copyright 2019-2021 The Khronos Group Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-// Common Valid Usage
-// Common to vkCmdPipelineBarrier* commands
-  * [[VUID-{refpage}-pDependencies-02285]]
-    If fname:{refpage} is called within a render pass instance, the render
-    pass must: have been created with at least one slink:VkSubpassDependency
-    instance in sname:VkRenderPassCreateInfo::pname:pDependencies that
-    expresses a dependency from the current subpass to itself, with
-    <<synchronization-dependencies-scopes, synchronization scopes>> and
-    <<synchronization-dependencies-access-scopes, access scopes>> that are
-    all supersets of the scopes defined in this command
-  * [[VUID-{refpage}-bufferMemoryBarrierCount-01178]]
-    If fname:{refpage} is called within a render pass instance, it must: not
-    include any buffer memory barriers
-  * [[VUID-{refpage}-image-04073]]
-    If fname:{refpage} is called within a render pass instance, the
-    pname:image member of any image memory barrier included in this command
-    must: be an attachment used in the current subpass both as an input
-    attachment, and as either a color or depth/stencil attachment
-  * [[VUID-{refpage}-oldLayout-01181]]
-    If fname:{refpage} is called within a render pass instance, the
-    pname:oldLayout and pname:newLayout members of any image memory barrier
-    included in this command must: be equal
-  * [[VUID-{refpage}-srcQueueFamilyIndex-01182]]
-    If fname:{refpage} is called within a render pass instance, the
-    pname:srcQueueFamilyIndex and pname:dstQueueFamilyIndex members of any
-    image memory barrier included in this command must: be equal
-ifdef::VK_VERSION_1_1,VK_KHR_multiview[]
-  * [[VUID-{refpage}-dependencyFlags-01186]]
-    If fname:{refpage} is called outside of a render pass instance,
-    ename:VK_DEPENDENCY_VIEW_LOCAL_BIT must: not be included in the
-    dependency flags
-endif::VK_VERSION_1_1,VK_KHR_multiview[]
-ifdef::VK_KHR_dynamic_rendering[]
-  * [[VUID-{refpage}-None-06191]]
-    If fname:{refpage} is called within a render pass instance, the render
-    pass must: not have been started with flink:vkCmdBeginRenderingKHR
-endif::VK_KHR_dynamic_rendering[]
-// Common Valid Usage
diff --git a/registry/vulkan/chapters/commonvalidity/pipeline_stage_common.txt b/registry/vulkan/chapters/commonvalidity/pipeline_stage_common.txt
deleted file mode 100644
index 0982cd8..0000000
--- a/registry/vulkan/chapters/commonvalidity/pipeline_stage_common.txt
+++ /dev/null
@@ -1,52 +0,0 @@
-// Copyright 2019-2021 The Khronos Group Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-// Common Valid Usage
-// Common to VkPipelineStageFlagBits parameters
-  * [[VUID-{refpage}-pipelineStage-04074]]
-    pname:pipelineStage must: be a
-    <<synchronization-pipeline-stages-supported,valid stage>> for the queue
-    family that was used to create the command pool that pname:commandBuffer
-    was allocated from
-  * [[VUID-{refpage}-pipelineStage-04075]]
-    If the <<features-geometryShader,geometry shaders>> feature is not
-    enabled, pname:pipelineStage must: not be
-    ename:VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT
-  * [[VUID-{refpage}-pipelineStage-04076]]
-    If the <<features-tessellationShader,tessellation shaders>> feature is
-    not enabled, pname:pipelineStage must: not be
-    ename:VK_PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT or
-    ename:VK_PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT
-ifdef::VK_EXT_conditional_rendering[]
-  * [[VUID-{refpage}-pipelineStage-04077]]
-    If the <<features-conditionalRendering,conditional rendering>> feature
-    is not enabled, pname:pipelineStage must: not be
-    ename:VK_PIPELINE_STAGE_CONDITIONAL_RENDERING_BIT_EXT
-endif::VK_EXT_conditional_rendering[]
-ifdef::VK_EXT_fragment_density_map[]
-  * [[VUID-{refpage}-pipelineStage-04078]]
-    If the <<features-fragmentDensityMap,fragment density map>> feature is
-    not enabled, pname:pipelineStage must: not be
-    ename:VK_PIPELINE_STAGE_FRAGMENT_DENSITY_PROCESS_BIT_EXT
-endif::VK_EXT_fragment_density_map[]
-ifdef::VK_EXT_transform_feedback[]
-  * [[VUID-{refpage}-pipelineStage-04079]]
-    If the <<features-transformFeedback,transform feedback>> feature is not
-    enabled, pname:pipelineStage must: not be
-    ename:VK_PIPELINE_STAGE_TRANSFORM_FEEDBACK_BIT_EXT
-endif::VK_EXT_transform_feedback[]
-ifdef::VK_NV_mesh_shader[]
-  * [[VUID-{refpage}-pipelineStage-04080]]
-    If the <<features-meshShader,mesh shaders>> feature is not enabled,
-    pname:pipelineStage must: not be
-    ename:VK_PIPELINE_STAGE_MESH_SHADER_BIT_NV or
-    ename:VK_PIPELINE_STAGE_TASK_SHADER_BIT_NV
-endif::VK_NV_mesh_shader[]
-ifdef::VK_NV_shading_rate_image[]
-  * [[VUID-{refpage}-pipelineStage-04081]]
-    If the <<features-shadingRateImage,shading rate image>> feature is not
-    enabled, pname:pipelineStage must: not be
-    ename:VK_PIPELINE_STAGE_SHADING_RATE_IMAGE_BIT_NV
-endif::VK_NV_shading_rate_image[]
-// Common Valid Usage
diff --git a/registry/vulkan/chapters/commonvalidity/query_begin_common.txt b/registry/vulkan/chapters/commonvalidity/query_begin_common.txt
deleted file mode 100644
index 9a22ffa..0000000
--- a/registry/vulkan/chapters/commonvalidity/query_begin_common.txt
+++ /dev/null
@@ -1,63 +0,0 @@
-// Copyright 2019-2021 The Khronos Group Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-// Common Valid Usage
-// Common to vkCmdBeginQuery* commands
-  * [[VUID-{refpage}-None-00807]]
-    All queries used by the command must: be unavailable
-  * [[VUID-{refpage}-queryType-02804]]
-    The pname:queryType used to create pname:queryPool must: not be
-    ename:VK_QUERY_TYPE_TIMESTAMP
-ifdef::VK_KHR_acceleration_structure[]
-  * [[VUID-{refpage}-queryType-04728]]
-    The pname:queryType used to create pname:queryPool must: not be
-    ename:VK_QUERY_TYPE_ACCELERATION_STRUCTURE_COMPACTED_SIZE_KHR or
-    ename:VK_QUERY_TYPE_ACCELERATION_STRUCTURE_SERIALIZATION_SIZE_KHR
-endif::VK_KHR_acceleration_structure[]
-ifdef::VK_NV_ray_tracing[]
-  * [[VUID-{refpage}-queryType-04729]]
-    The pname:queryType used to create pname:queryPool must: not be
-    ename:VK_QUERY_TYPE_ACCELERATION_STRUCTURE_COMPACTED_SIZE_NV
-endif::VK_NV_ray_tracing[]
-  * [[VUID-{refpage}-queryType-00800]]
-    If the <<features-occlusionQueryPrecise,precise occlusion queries>>
-    feature is not enabled, or the pname:queryType used to create
-    pname:queryPool was not ename:VK_QUERY_TYPE_OCCLUSION, pname:flags must:
-    not contain ename:VK_QUERY_CONTROL_PRECISE_BIT
-  * [[VUID-{refpage}-query-00802]]
-    pname:query must: be less than the number of queries in pname:queryPool
-  * [[VUID-{refpage}-queryType-00803]]
-    If the pname:queryType used to create pname:queryPool was
-    ename:VK_QUERY_TYPE_OCCLUSION, the sname:VkCommandPool that
-    pname:commandBuffer was allocated from must: support graphics operations
-  * [[VUID-{refpage}-queryType-00804]]
-    If the pname:queryType used to create pname:queryPool was
-    ename:VK_QUERY_TYPE_PIPELINE_STATISTICS and any of the
-    pname:pipelineStatistics indicate graphics operations, the
-    sname:VkCommandPool that pname:commandBuffer was allocated from must:
-    support graphics operations
-  * [[VUID-{refpage}-queryType-00805]]
-    If the pname:queryType used to create pname:queryPool was
-    ename:VK_QUERY_TYPE_PIPELINE_STATISTICS and any of the
-    pname:pipelineStatistics indicate compute operations, the
-    sname:VkCommandPool that pname:commandBuffer was allocated from must:
-    support compute operations
-ifdef::VK_VERSION_1_1[]
-  * [[VUID-{refpage}-commandBuffer-01885]]
-    pname:commandBuffer must: not be a protected command buffer
-endif::VK_VERSION_1_1[]
-ifdef::VK_VERSION_1_1,VK_KHR_multiview[]
-  * [[VUID-{refpage}-query-00808]]
-    If called within a render pass instance, the sum of pname:query and the
-    number of bits set in the current subpass's view mask must: be less than
-    or equal to the number of queries in pname:queryPool
-endif::VK_VERSION_1_1,VK_KHR_multiview[]
-ifdef::VK_KHR_video_encode_queue[]
-  * [[VUID-{refpage}-queryType-04862]]
-    If the pname:queryType used to create pname:queryPool was
-    ename:VK_QUERY_TYPE_VIDEO_ENCODE_BITSTREAM_BUFFER_RANGE_KHR the
-    sname:VkCommandPool that pname:commandBuffer was allocated from must:
-    support <<video-encode-operations, video encode operations>>
-endif::VK_KHR_video_encode_queue[]
-// Common Valid Usage
diff --git a/registry/vulkan/chapters/commonvalidity/ray_tracing_pipeline_create_info_common.txt b/registry/vulkan/chapters/commonvalidity/ray_tracing_pipeline_create_info_common.txt
deleted file mode 100644
index 6d3b2df..0000000
--- a/registry/vulkan/chapters/commonvalidity/ray_tracing_pipeline_create_info_common.txt
+++ /dev/null
@@ -1,50 +0,0 @@
-// Copyright 2019-2021 The Khronos Group Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-// Common Valid Usage
-// common to VkRayTracingPipelineCreateInfo* structures
-  * [[VUID-{refpage}-flags-03421]]
-    If pname:flags contains the ename:VK_PIPELINE_CREATE_DERIVATIVE_BIT
-    flag, and pname:basePipelineIndex is `-1`, pname:basePipelineHandle
-    must: be a valid handle to a ray tracing sname:VkPipeline
-  * [[VUID-{refpage}-flags-03422]]
-    If pname:flags contains the ename:VK_PIPELINE_CREATE_DERIVATIVE_BIT
-    flag, and pname:basePipelineHandle is dlink:VK_NULL_HANDLE,
-    pname:basePipelineIndex must: be a valid index into the calling
-    command's pname:pCreateInfos parameter
-  * [[VUID-{refpage}-flags-03423]]
-    If pname:flags contains the ename:VK_PIPELINE_CREATE_DERIVATIVE_BIT
-    flag, and pname:basePipelineIndex is not `-1`, pname:basePipelineHandle
-    must: be dlink:VK_NULL_HANDLE
-  * [[VUID-{refpage}-flags-03424]]
-    If pname:flags contains the ename:VK_PIPELINE_CREATE_DERIVATIVE_BIT
-    flag, and pname:basePipelineHandle is not dlink:VK_NULL_HANDLE,
-    pname:basePipelineIndex must: be `-1`
-  * [[VUID-{refpage}-pStages-03426]]
-    The shader code for the entry points identified by pname:pStages, and
-    the rest of the state identified by this structure must: adhere to the
-    pipeline linking rules described in the <<interfaces,Shader Interfaces>>
-    chapter
-  * [[VUID-{refpage}-layout-03427]]
-    pname:layout must: be
-    <<descriptorsets-pipelinelayout-consistency,consistent>> with all
-    shaders specified in pname:pStages
-  * [[VUID-{refpage}-layout-03428]]
-    The number of resources in pname:layout accessible to each shader stage
-    that is used by the pipeline must: be less than or equal to
-    slink:VkPhysicalDeviceLimits::pname:maxPerStageResources
-ifdef::VK_NV_device_generated_commands[]
-  * [[VUID-{refpage}-flags-02904]]
-    pname:flags must: not include
-    ename:VK_PIPELINE_CREATE_INDIRECT_BINDABLE_BIT_NV
-endif::VK_NV_device_generated_commands[]
-ifdef::VK_EXT_pipeline_creation_cache_control[]
-  * [[VUID-{refpage}-pipelineCreationCacheControl-02905]]
-    If the <<features-pipelineCreationCacheControl,
-    pname:pipelineCreationCacheControl>> feature is not enabled, pname:flags
-    must: not include
-    ename:VK_PIPELINE_CREATE_FAIL_ON_PIPELINE_COMPILE_REQUIRED_BIT_EXT or
-    ename:VK_PIPELINE_CREATE_EARLY_RETURN_ON_FAILURE_BIT_EXT
-endif::VK_EXT_pipeline_creation_cache_control[]
-// Common Valid Usage
diff --git a/registry/vulkan/chapters/commonvalidity/resolve_image_command_buffer_common.txt b/registry/vulkan/chapters/commonvalidity/resolve_image_command_buffer_common.txt
deleted file mode 100644
index 5c8c27b..0000000
--- a/registry/vulkan/chapters/commonvalidity/resolve_image_command_buffer_common.txt
+++ /dev/null
@@ -1,21 +0,0 @@
-// Copyright 2020-2021 The Khronos Group Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-// Common Valid Usage
-// Common to VkCmdResolveImage* command buffer
-ifdef::VK_VERSION_1_1[]
-  * [[VUID-{refpage}-commandBuffer-01837]]
-    If pname:commandBuffer is an unprotected command buffer and
-    <<limits-protectedNoFault, pname:protectedNoFault>> is not supported,
-    pname:srcImage must: not be a protected image
-  * [[VUID-{refpage}-commandBuffer-01838]]
-    If pname:commandBuffer is an unprotected command buffer and
-    <<limits-protectedNoFault, pname:protectedNoFault>> is not supported,
-    pname:dstImage must: not be a protected image
-  * [[VUID-{refpage}-commandBuffer-01839]]
-    If pname:commandBuffer is a protected command buffer and
-    <<limits-protectedNoFault, pname:protectedNoFault>> is not supported,
-    pname:dstImage must: not be an unprotected image
-endif::VK_VERSION_1_1[]
-// Common Valid Usage
diff --git a/registry/vulkan/chapters/commonvalidity/resolve_image_common.txt b/registry/vulkan/chapters/commonvalidity/resolve_image_common.txt
deleted file mode 100644
index 34aba94..0000000
--- a/registry/vulkan/chapters/commonvalidity/resolve_image_common.txt
+++ /dev/null
@@ -1,139 +0,0 @@
-// Copyright 2020-2021 The Khronos Group Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-// Common Valid Usage
-// Common to VkCmdResolveImage* commands
-  * [[VUID-{refpage}-pRegions-00255]]
-    The union of all source regions, and the union of all destination
-    regions, specified by the elements of pname:pRegions, must: not overlap
-    in memory
-  * [[VUID-{refpage}-srcImage-00256]]
-    If pname:srcImage is non-sparse then it must: be bound completely and
-    contiguously to a single sname:VkDeviceMemory object
-  * [[VUID-{refpage}-srcImage-00257]]
-    pname:srcImage must: have a sample count equal to any valid sample count
-    value other than ename:VK_SAMPLE_COUNT_1_BIT
-  * [[VUID-{refpage}-dstImage-00258]]
-    If pname:dstImage is non-sparse then it must: be bound completely and
-    contiguously to a single sname:VkDeviceMemory object
-  * [[VUID-{refpage}-dstImage-00259]]
-    pname:dstImage must: have a sample count equal to
-    ename:VK_SAMPLE_COUNT_1_BIT
-  * [[VUID-{refpage}-srcImageLayout-00260]]
-    pname:srcImageLayout must: specify the layout of the image subresources
-    of pname:srcImage specified in pname:pRegions at the time this command
-    is executed on a sname:VkDevice
-ifndef::VK_KHR_shared_presentable_image[]
-  * [[VUID-{refpage}-srcImageLayout-00261]]
-    pname:srcImageLayout must: be ename:VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL
-    or ename:VK_IMAGE_LAYOUT_GENERAL
-endif::VK_KHR_shared_presentable_image[]
-ifdef::VK_KHR_shared_presentable_image[]
-  * [[VUID-{refpage}-srcImageLayout-01400]]
-    pname:srcImageLayout must: be ename:VK_IMAGE_LAYOUT_SHARED_PRESENT_KHR,
-    ename:VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL or
-    ename:VK_IMAGE_LAYOUT_GENERAL
-endif::VK_KHR_shared_presentable_image[]
-  * [[VUID-{refpage}-dstImageLayout-00262]]
-    pname:dstImageLayout must: specify the layout of the image subresources
-    of pname:dstImage specified in pname:pRegions at the time this command
-    is executed on a sname:VkDevice
-ifndef::VK_KHR_shared_presentable_image[]
-  * [[VUID-{refpage}-dstImageLayout-00263]]
-    pname:dstImageLayout must: be ename:VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL
-    or ename:VK_IMAGE_LAYOUT_GENERAL
-endif::VK_KHR_shared_presentable_image[]
-ifdef::VK_KHR_shared_presentable_image[]
-  * [[VUID-{refpage}-dstImageLayout-01401]]
-    pname:dstImageLayout must: be ename:VK_IMAGE_LAYOUT_SHARED_PRESENT_KHR,
-    ename:VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL or
-    ename:VK_IMAGE_LAYOUT_GENERAL
-endif::VK_KHR_shared_presentable_image[]
-  * [[VUID-{refpage}-dstImage-02003]]
-    The <<resources-image-format-features,format features>> of
-    pname:dstImage must: contain
-    ename:VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT
-  * [[VUID-{refpage}-srcImage-01386]]
-    pname:srcImage and pname:dstImage must: have been created with the same
-    image format
-  * [[VUID-{refpage}-srcSubresource-01709]]
-    The pname:srcSubresource.mipLevel member of each element of
-    pname:pRegions must: be less than the pname:mipLevels specified in
-    slink:VkImageCreateInfo when pname:srcImage was created
-  * [[VUID-{refpage}-dstSubresource-01710]]
-    The pname:dstSubresource.mipLevel member of each element of
-    pname:pRegions must: be less than the pname:mipLevels specified in
-    slink:VkImageCreateInfo when pname:dstImage was created
-  * [[VUID-{refpage}-srcSubresource-01711]]
-    The [eq]#pname:srcSubresource.baseArrayLayer {plus}
-    pname:srcSubresource.layerCount# of each element of pname:pRegions must:
-    be less than or equal to the pname:arrayLayers specified in
-    slink:VkImageCreateInfo when pname:srcImage was created
-  * [[VUID-{refpage}-dstSubresource-01712]]
-    The [eq]#pname:dstSubresource.baseArrayLayer {plus}
-    pname:dstSubresource.layerCount# of each element of pname:pRegions must:
-    be less than or equal to the pname:arrayLayers specified in
-    slink:VkImageCreateInfo when pname:dstImage was created
-ifdef::VK_EXT_fragment_density_map[]
-  * [[VUID-{refpage}-dstImage-02546]]
-    pname:dstImage and pname:srcImage must: not have been created with
-    pname:flags containing ename:VK_IMAGE_CREATE_SUBSAMPLED_BIT_EXT
-endif::VK_EXT_fragment_density_map[]
-  * [[VUID-{refpage}-srcImage-04446]]
-    If either pname:srcImage or pname:dstImage are of type
-    ename:VK_IMAGE_TYPE_3D, then for each element of pname:pRegions,
-    pname:srcSubresource.baseArrayLayer must: be `0` and
-    pname:srcSubresource.layerCount must: be `1`
-  * [[VUID-{refpage}-srcImage-04447]]
-    If either pname:srcImage or pname:dstImage are of type
-    ename:VK_IMAGE_TYPE_3D, then for each element of pname:pRegions,
-    pname:dstSubresource.baseArrayLayer must: be `0` and
-    pname:dstSubresource.layerCount must: be `1`
-  * [[VUID-{refpage}-srcOffset-00269]]
-    For each element of pname:pRegions, pname:srcOffset.x and
-    [eq]#(pname:extent.width {plus} pname:srcOffset.x)# must: both be
-    greater than or equal to `0` and less than or equal to the width of the
-    specified pname:srcSubresource of pname:srcImage
-  * [[VUID-{refpage}-srcOffset-00270]]
-    For each element of pname:pRegions, pname:srcOffset.y and
-    [eq]#(pname:extent.height {plus} pname:srcOffset.y)# must: both be
-    greater than or equal to `0` and less than or equal to the height of the
-    specified pname:srcSubresource of pname:srcImage
-  * [[VUID-{refpage}-srcImage-00271]]
-    If pname:srcImage is of type ename:VK_IMAGE_TYPE_1D, then for each
-    element of pname:pRegions, pname:srcOffset.y must: be `0` and
-    pname:extent.height must: be `1`
-  * [[VUID-{refpage}-srcOffset-00272]]
-    For each element of pname:pRegions, pname:srcOffset.z and
-    [eq]#(pname:extent.depth {plus} pname:srcOffset.z)# must: both be
-    greater than or equal to `0` and less than or equal to the depth of the
-    specified pname:srcSubresource of pname:srcImage
-  * [[VUID-{refpage}-srcImage-00273]]
-    If pname:srcImage is of type ename:VK_IMAGE_TYPE_1D or
-    ename:VK_IMAGE_TYPE_2D, then for each element of pname:pRegions,
-    pname:srcOffset.z must: be `0` and pname:extent.depth must: be `1`
-  * [[VUID-{refpage}-dstOffset-00274]]
-    For each element of pname:pRegions, pname:dstOffset.x and
-    [eq]#(pname:extent.width {plus} pname:dstOffset.x)# must: both be
-    greater than or equal to `0` and less than or equal to the width of the
-    specified pname:dstSubresource of pname:dstImage
-  * [[VUID-{refpage}-dstOffset-00275]]
-    For each element of pname:pRegions, pname:dstOffset.y and
-    [eq]#(pname:extent.height {plus} pname:dstOffset.y)# must: both be
-    greater than or equal to `0` and less than or equal to the height of the
-    specified pname:dstSubresource of pname:dstImage
-  * [[VUID-{refpage}-dstImage-00276]]
-    If pname:dstImage is of type ename:VK_IMAGE_TYPE_1D, then for each
-    element of pname:pRegions, pname:dstOffset.y must: be `0` and
-    pname:extent.height must: be `1`
-  * [[VUID-{refpage}-dstOffset-00277]]
-    For each element of pname:pRegions, pname:dstOffset.z and
-    [eq]#(pname:extent.depth {plus} pname:dstOffset.z)# must: both be
-    greater than or equal to `0` and less than or equal to the depth of the
-    specified pname:dstSubresource of pname:dstImage
-  * [[VUID-{refpage}-dstImage-00278]]
-    If pname:dstImage is of type ename:VK_IMAGE_TYPE_1D or
-    ename:VK_IMAGE_TYPE_2D, then for each element of pname:pRegions,
-    pname:dstOffset.z must: be `0` and pname:extent.depth must: be `1`
-// Common Valid Usage
diff --git a/registry/vulkan/chapters/commonvalidity/stage_mask_2_common.txt b/registry/vulkan/chapters/commonvalidity/stage_mask_2_common.txt
deleted file mode 100644
index 92ec1c5..0000000
--- a/registry/vulkan/chapters/commonvalidity/stage_mask_2_common.txt
+++ /dev/null
@@ -1,63 +0,0 @@
-// Copyright 2020-2021 The Khronos Group Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-// Common Valid Usage
-// Common to VkPipelineStageFlags2KHR parameters
-// Set "stageMaskName" attribute to the name of the stage mask to validate
-  * [[VUID-{refpage}-{stageMaskName}-03929]]
-    If the <<features-geometryShader,geometry shaders>> feature is not
-    enabled, pname:{stageMaskName} must: not contain
-    ename:VK_PIPELINE_STAGE_2_GEOMETRY_SHADER_BIT_KHR
-  * [[VUID-{refpage}-{stageMaskName}-03930]]
-    If the <<features-tessellationShader,tessellation shaders>> feature is
-    not enabled, pname:{stageMaskName} must: not contain
-    ename:VK_PIPELINE_STAGE_2_TESSELLATION_CONTROL_SHADER_BIT_KHR or
-    ename:VK_PIPELINE_STAGE_2_TESSELLATION_EVALUATION_SHADER_BIT_KHR
-ifdef::VK_EXT_conditional_rendering[]
-  * [[VUID-{refpage}-{stageMaskName}-03931]]
-    If the <<features-conditionalRendering,conditional rendering>> feature
-    is not enabled, pname:{stageMaskName} must: not contain
-    ename:VK_PIPELINE_STAGE_2_CONDITIONAL_RENDERING_BIT_EXT
-endif::VK_EXT_conditional_rendering[]
-ifdef::VK_EXT_fragment_density_map[]
-  * [[VUID-{refpage}-{stageMaskName}-03932]]
-    If the <<features-fragmentDensityMap,fragment density map>> feature is
-    not enabled, pname:{stageMaskName} must: not contain
-    ename:VK_PIPELINE_STAGE_2_FRAGMENT_DENSITY_PROCESS_BIT_EXT
-endif::VK_EXT_fragment_density_map[]
-ifdef::VK_EXT_transform_feedback[]
-  * [[VUID-{refpage}-{stageMaskName}-03933]]
-    If the <<features-transformFeedback,transform feedback>> feature is not
-    enabled, pname:{stageMaskName} must: not contain
-    ename:VK_PIPELINE_STAGE_2_TRANSFORM_FEEDBACK_BIT_EXT
-endif::VK_EXT_transform_feedback[]
-ifdef::VK_NV_mesh_shader[]
-  * [[VUID-{refpage}-{stageMaskName}-03934]]
-    If the <<features-meshShader,mesh shaders>> feature is not enabled,
-    pname:{stageMaskName} must: not contain
-    ename:VK_PIPELINE_STAGE_2_MESH_SHADER_BIT_NV
-  * [[VUID-{refpage}-{stageMaskName}-03935]]
-    If the <<features-taskShader,task shaders>> feature is not enabled,
-    pname:{stageMaskName} must: not contain
-    ename:VK_PIPELINE_STAGE_2_TASK_SHADER_BIT_NV
-endif::VK_NV_mesh_shader[]
-ifdef::VK_NV_shading_rate_image[]
-  * [[VUID-{refpage}-{stageMaskName}-04956]]
-    If the <<features-shadingRateImage,shading rate image>> feature is not
-    enabled, pname:{stageMaskName} must: not contain
-    ename:VK_PIPELINE_STAGE_2_SHADING_RATE_IMAGE_BIT_NV
-endif::VK_NV_shading_rate_image[]
-ifdef::VK_HUAWEI_subpass_shading[]
-  * [[VUID-{refpage}-{stageMaskName}-04957]]
-    If the <<features-subpassShading,subpass shading>> feature is not
-    enabled, pname:{stageMaskName} must: not contain
-    ename:VK_PIPELINE_STAGE_2_SUBPASS_SHADING_BIT_HUAWEI
-endif::VK_HUAWEI_subpass_shading[]
-ifdef::VK_HUAWEI_invocation_mask[]
-  * [[VUID-{refpage}-{stageMaskName}-04995]]
-    If the <<features-invocationMask, invocation mask image>> feature is not
-    enabled, pname:{stageMaskName} must: not contain
-    ename:VK_PIPELINE_STAGE_2_INVOCATION_MASK_BIT_HUAWEI
-endif::VK_HUAWEI_invocation_mask[]
-// Common Valid Usage
diff --git a/registry/vulkan/chapters/commonvalidity/stage_mask_common.txt b/registry/vulkan/chapters/commonvalidity/stage_mask_common.txt
deleted file mode 100644
index 599f6ff..0000000
--- a/registry/vulkan/chapters/commonvalidity/stage_mask_common.txt
+++ /dev/null
@@ -1,68 +0,0 @@
-// Copyright 2019-2021 The Khronos Group Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-// Common Valid Usage
-// Common to VkPipelineStageFlags parameters
-// Set "stageMaskName" attribute to the name of the stage mask to validate
-  * [[VUID-{refpage}-{stageMaskName}-04090]]
-    If the <<features-geometryShader,geometry shaders>> feature is not
-    enabled, pname:{stageMaskName} must: not contain
-    ename:VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT
-  * [[VUID-{refpage}-{stageMaskName}-04091]]
-    If the <<features-tessellationShader,tessellation shaders>> feature is
-    not enabled, pname:{stageMaskName} must: not contain
-    ename:VK_PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT or
-    ename:VK_PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT
-ifdef::VK_EXT_conditional_rendering[]
-  * [[VUID-{refpage}-{stageMaskName}-04092]]
-    If the <<features-conditionalRendering,conditional rendering>> feature
-    is not enabled, pname:{stageMaskName} must: not contain
-    ename:VK_PIPELINE_STAGE_CONDITIONAL_RENDERING_BIT_EXT
-endif::VK_EXT_conditional_rendering[]
-ifdef::VK_EXT_fragment_density_map[]
-  * [[VUID-{refpage}-{stageMaskName}-04093]]
-    If the <<features-fragmentDensityMap,fragment density map>> feature is
-    not enabled, pname:{stageMaskName} must: not contain
-    ename:VK_PIPELINE_STAGE_FRAGMENT_DENSITY_PROCESS_BIT_EXT
-endif::VK_EXT_fragment_density_map[]
-ifdef::VK_EXT_transform_feedback[]
-  * [[VUID-{refpage}-{stageMaskName}-04094]]
-    If the <<features-transformFeedback,transform feedback>> feature is not
-    enabled, pname:{stageMaskName} must: not contain
-    ename:VK_PIPELINE_STAGE_TRANSFORM_FEEDBACK_BIT_EXT
-endif::VK_EXT_transform_feedback[]
-ifdef::VK_NV_mesh_shader[]
-  * [[VUID-{refpage}-{stageMaskName}-04095]]
-    If the <<features-meshShader,mesh shaders>> feature is not enabled,
-    pname:{stageMaskName} must: not contain
-    ename:VK_PIPELINE_STAGE_MESH_SHADER_BIT_NV
-  * [[VUID-{refpage}-{stageMaskName}-04096]]
-    If the <<features-taskShader,task shaders>> feature is not enabled,
-    pname:{stageMaskName} must: not contain
-    ename:VK_PIPELINE_STAGE_TASK_SHADER_BIT_NV
-endif::VK_NV_mesh_shader[]
-ifdef::VK_NV_shading_rate_image[]
-  * [[VUID-{refpage}-{stageMaskName}-04097]]
-    If the <<features-shadingRateImage,shading rate image>> feature is not
-    enabled, pname:{stageMaskName} must: not contain
-    ename:VK_PIPELINE_STAGE_SHADING_RATE_IMAGE_BIT_NV
-endif::VK_NV_shading_rate_image[]
-  * [[VUID-{refpage}-{stageMaskName}-04098]]
-    Any pipeline stage included in pname:{stageMaskName} must: be supported
-    by the capabilities of the queue family specified by the
-    pname:queueFamilyIndex member of the slink:VkCommandPoolCreateInfo
-    structure that was used to create the sname:VkCommandPool that
-    pname:commandBuffer was allocated from, as specified in the
-    <<synchronization-pipeline-stages-supported, table of supported pipeline
-    stages>>
-ifdef::VK_KHR_synchronization2[]
-  * [[VUID-{refpage}-{stageMaskName}-03937]]
-    If the <<features-synchronization2, pname:synchronization2>> feature is
-    not enabled, pname:{stageMaskName} must: not be `0`
-endif::VK_KHR_synchronization2[]
-ifndef::VK_KHR_synchronization2[]
-  * [[VUID-{refpage}-{stageMaskName}-04996]]
-    pname:{stageMaskName} must: not be `0`
-endif::VK_KHR_synchronization2[]
-// Common Valid Usage
diff --git a/registry/vulkan/chapters/commonvalidity/surface_info_physical_device_common.txt b/registry/vulkan/chapters/commonvalidity/surface_info_physical_device_common.txt
deleted file mode 100644
index 1cbb30c..0000000
--- a/registry/vulkan/chapters/commonvalidity/surface_info_physical_device_common.txt
+++ /dev/null
@@ -1,14 +0,0 @@
-// Copyright 2019-2021 The Khronos Group Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-// Common Valid Usage
-// Common to all VkPhysicalDevice commands accepting a
-// VkPhysicalDeviceSurfaceInfo2KHR param
-
-  * [[VUID-{refpage}-pSurfaceInfo-06210]]
-    pname:pSurfaceInfo->surface must: be supported by pname:physicalDevice,
-    as reported by flink:vkGetPhysicalDeviceSurfaceSupportKHR or an
-    equivalent platform-specific mechanism
-
-// Common Valid Usage
diff --git a/registry/vulkan/chapters/commonvalidity/surface_physical_device_common.txt b/registry/vulkan/chapters/commonvalidity/surface_physical_device_common.txt
deleted file mode 100644
index 882d713..0000000
--- a/registry/vulkan/chapters/commonvalidity/surface_physical_device_common.txt
+++ /dev/null
@@ -1,13 +0,0 @@
-// Copyright 2019-2021 The Khronos Group Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-// Common Valid Usage
-// Common to all VkPhysicalDevice commands accepting a VkSurfaceKHR param
-
-  * [[VUID-{refpage}-surface-06211]]
-    pname:surface must: be supported by pname:physicalDevice, as reported by
-    flink:vkGetPhysicalDeviceSurfaceSupportKHR or an equivalent
-    platform-specific mechanism
-
-// Common Valid Usage
diff --git a/registry/vulkan/chapters/commonvalidity/trace_rays_common.txt b/registry/vulkan/chapters/commonvalidity/trace_rays_common.txt
deleted file mode 100644
index 10286eb..0000000
--- a/registry/vulkan/chapters/commonvalidity/trace_rays_common.txt
+++ /dev/null
@@ -1,13 +0,0 @@
-// Copyright 2019-2021 The Khronos Group Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-// Common Valid Usage
-// Common to trace rays commands
-
-include::{chapters}/commonvalidity/draw_dispatch_common.txt[]
-  * [[VUID-{refpage}-None-03429]]
-    Any shader group handle referenced by this call must: have been queried
-    from the currently bound ray tracing pipeline
-
-// Common Valid Usage
diff --git a/registry/vulkan/chapters/commonvalidity/trace_rays_common_khr.txt b/registry/vulkan/chapters/commonvalidity/trace_rays_common_khr.txt
deleted file mode 100644
index b93a116..0000000
--- a/registry/vulkan/chapters/commonvalidity/trace_rays_common_khr.txt
+++ /dev/null
@@ -1,135 +0,0 @@
-// Copyright 2019-2021 The Khronos Group Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-// Common Valid Usage
-// Common to KHR trace rays commands
-
-  * [[VUID-{refpage}-maxPipelineRayRecursionDepth-03679]]
-    This command must: not cause a shader call instruction to be executed
-    from a shader invocation with a <<ray-tracing-recursion-depth, recursion
-    depth>> greater than the value of pname:maxPipelineRayRecursionDepth
-    used to create the bound ray tracing pipeline
-  * [[VUID-{refpage}-pRayGenShaderBindingTable-03680]]
-    If the buffer from which pname:pRayGenShaderBindingTable->deviceAddress
-    was queried is non-sparse then it must: be bound completely and
-    contiguously to a single sname:VkDeviceMemory object
-  * [[VUID-{refpage}-pRayGenShaderBindingTable-03681]]
-    The buffer from which the pname:pRayGenShaderBindingTable->deviceAddress
-    is queried must: have been created with the
-    ename:VK_BUFFER_USAGE_SHADER_BINDING_TABLE_BIT_KHR usage flag
-  * [[VUID-{refpage}-pRayGenShaderBindingTable-03682]]
-    pname:pRayGenShaderBindingTable->deviceAddress must: be a multiple of
-    sname:VkPhysicalDeviceRayTracingPipelinePropertiesKHR::pname:shaderGroupBaseAlignment
-  * [[VUID-{refpage}-size-04023]]
-    The pname:size member of pname:pRayGenShaderBindingTable must: be equal
-    to its pname:stride member
-  * [[VUID-{refpage}-pMissShaderBindingTable-03683]]
-    If the buffer from which pname:pMissShaderBindingTable->deviceAddress
-    was queried is non-sparse then it must: be bound completely and
-    contiguously to a single sname:VkDeviceMemory object
-  * [[VUID-{refpage}-pMissShaderBindingTable-03684]]
-    The buffer from which the pname:pMissShaderBindingTable->deviceAddress
-    is queried must: have been created with the
-    ename:VK_BUFFER_USAGE_SHADER_BINDING_TABLE_BIT_KHR usage flag
-  * [[VUID-{refpage}-pMissShaderBindingTable-03685]]
-    pname:pMissShaderBindingTable->deviceAddress must: be a multiple of
-    sname:VkPhysicalDeviceRayTracingPipelinePropertiesKHR::pname:shaderGroupBaseAlignment
-  * [[VUID-{refpage}-stride-03686]]
-    The pname:stride member of pname:pMissShaderBindingTable must: be a
-    multiple of
-    sname:VkPhysicalDeviceRayTracingPipelinePropertiesKHR::pname:shaderGroupHandleAlignment
-  * [[VUID-{refpage}-stride-04029]]
-    The pname:stride member of pname:pMissShaderBindingTable must: be less
-    than or equal to
-    sname:VkPhysicalDeviceRayTracingPipelinePropertiesKHR::pname:maxShaderGroupStride
-  * [[VUID-{refpage}-pHitShaderBindingTable-03687]]
-    If the buffer from which pname:pHitShaderBindingTable->deviceAddress was
-    queried is non-sparse then it must: be bound completely and contiguously
-    to a single sname:VkDeviceMemory object
-  * [[VUID-{refpage}-pHitShaderBindingTable-03688]]
-    The buffer from which the pname:pHitShaderBindingTable->deviceAddress is
-    queried must: have been created with the
-    ename:VK_BUFFER_USAGE_SHADER_BINDING_TABLE_BIT_KHR usage flag
-  * [[VUID-{refpage}-pHitShaderBindingTable-03689]]
-    pname:pHitShaderBindingTable->deviceAddress must: be a multiple of
-    sname:VkPhysicalDeviceRayTracingPipelinePropertiesKHR::pname:shaderGroupBaseAlignment
-  * [[VUID-{refpage}-stride-03690]]
-    The pname:stride member of pname:pHitShaderBindingTable must: be a
-    multiple of
-    sname:VkPhysicalDeviceRayTracingPipelinePropertiesKHR::pname:shaderGroupHandleAlignment
-  * [[VUID-{refpage}-stride-04035]]
-    The pname:stride member of pname:pHitShaderBindingTable must: be less
-    than or equal to
-    sname:VkPhysicalDeviceRayTracingPipelinePropertiesKHR::pname:maxShaderGroupStride
-  * [[VUID-{refpage}-pCallableShaderBindingTable-03691]]
-    If the buffer from which
-    pname:pCallableShaderBindingTable->deviceAddress was queried is
-    non-sparse then it must: be bound completely and contiguously to a
-    single sname:VkDeviceMemory object
-  * [[VUID-{refpage}-pCallableShaderBindingTable-03692]]
-    The buffer from which the
-    pname:pCallableShaderBindingTable->deviceAddress is queried must: have
-    been created with the ename:VK_BUFFER_USAGE_SHADER_BINDING_TABLE_BIT_KHR
-    usage flag
-  * [[VUID-{refpage}-pCallableShaderBindingTable-03693]]
-    pname:pCallableShaderBindingTable->deviceAddress must: be a multiple of
-    sname:VkPhysicalDeviceRayTracingPipelinePropertiesKHR::pname:shaderGroupBaseAlignment
-  * [[VUID-{refpage}-stride-03694]]
-    The pname:stride member of pname:pCallableShaderBindingTable must: be a
-    multiple of
-    sname:VkPhysicalDeviceRayTracingPipelinePropertiesKHR::pname:shaderGroupHandleAlignment
-  * [[VUID-{refpage}-stride-04041]]
-    The pname:stride member of pname:pCallableShaderBindingTable must: be
-    less than or equal to
-    sname:VkPhysicalDeviceRayTracingPipelinePropertiesKHR::pname:maxShaderGroupStride
-  * [[VUID-{refpage}-flags-03696]]
-    If the currently bound ray tracing pipeline was created with pname:flags
-    that included
-    ename:VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_CLOSEST_HIT_SHADERS_BIT_KHR,
-    the pname:deviceAddress member of pname:pHitShaderBindingTable must: not
-    be zero
-  * [[VUID-{refpage}-flags-03697]]
-    If the currently bound ray tracing pipeline was created with pname:flags
-    that included
-    ename:VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_INTERSECTION_SHADERS_BIT_KHR,
-    the pname:deviceAddress member of pname:pHitShaderBindingTable must: not
-    be zero
-  * [[VUID-{refpage}-flags-03511]]
-    If the currently bound ray tracing pipeline was created with pname:flags
-    that included
-    ename:VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_MISS_SHADERS_BIT_KHR, the
-    shader group handle identified by pname:pMissShaderBindingTable must:
-    not be set to zero
-  * [[VUID-{refpage}-flags-03512]]
-    If the currently bound ray tracing pipeline was created with pname:flags
-    that included
-    ename:VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_ANY_HIT_SHADERS_BIT_KHR,
-    entries in pname:pHitShaderBindingTable accessed as a result of this
-    command in order to execute an any-hit shader must: not be set to zero
-  * [[VUID-{refpage}-flags-03513]]
-    If the currently bound ray tracing pipeline was created with pname:flags
-    that included
-    ename:VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_CLOSEST_HIT_SHADERS_BIT_KHR,
-    entries in pname:pHitShaderBindingTable accessed as a result of this
-    command in order to execute a closest hit shader must: not be set to
-    zero
-  * [[VUID-{refpage}-flags-03514]]
-    If the currently bound ray tracing pipeline was created with pname:flags
-    that included
-    ename:VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_INTERSECTION_SHADERS_BIT_KHR,
-    entries in pname:pHitShaderBindingTable accessed as a result of this
-    command in order to execute an intersection shader must: not be set to
-    zero
-  * [[VUID-{refpage}-pHitShaderBindingTable-04735]]
-    Any non-zero hit shader group entries in pname:pHitShaderBindingTable
-    accessed by this call from a geometry with a pname:geometryType of
-    ename:VK_GEOMETRY_TYPE_TRIANGLES_KHR must: have been created with
-    ename:VK_RAY_TRACING_SHADER_GROUP_TYPE_TRIANGLES_HIT_GROUP_KHR
-  * [[VUID-{refpage}-pHitShaderBindingTable-04736]]
-    Any non-zero hit shader group entries in pname:pHitShaderBindingTable
-    accessed by this call from a geometry with a pname:geometryType of
-    ename:VK_GEOMETRY_TYPE_AABBS_KHR must: have been created with
-    ename:VK_RAY_TRACING_SHADER_GROUP_TYPE_PROCEDURAL_HIT_GROUP_KHR
-
-// Common Valid Usage
diff --git a/registry/vulkan/chapters/commonvalidity/write_acceleration_structure_properties_common.txt b/registry/vulkan/chapters/commonvalidity/write_acceleration_structure_properties_common.txt
deleted file mode 100644
index 0874521..0000000
--- a/registry/vulkan/chapters/commonvalidity/write_acceleration_structure_properties_common.txt
+++ /dev/null
@@ -1,20 +0,0 @@
-// Copyright 2019-2021 The Khronos Group Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-// Common Valid Usage
-// Common to acceleration structure property query
-  * [[VUID-{refpage}-pAccelerationStructures-04964]]
-    All acceleration structures in pname:pAccelerationStructures must: have
-    been built prior to the execution of this command
-  * [[VUID-{refpage}-accelerationStructures-03431]]
-    All acceleration structures in pname:pAccelerationStructures must: have
-    been built with
-    ename:VK_BUILD_ACCELERATION_STRUCTURE_ALLOW_COMPACTION_BIT_KHR if
-    pname:queryType is
-    ename:VK_QUERY_TYPE_ACCELERATION_STRUCTURE_COMPACTED_SIZE_KHR
-  * [[VUID-{refpage}-queryType-03432]]
-    pname:queryType must: be
-    ename:VK_QUERY_TYPE_ACCELERATION_STRUCTURE_COMPACTED_SIZE_KHR or
-    ename:VK_QUERY_TYPE_ACCELERATION_STRUCTURE_SERIALIZATION_SIZE_KHR
-// Common Valid Usage
diff --git a/registry/vulkan/chapters/copies.txt b/registry/vulkan/chapters/copies.txt
deleted file mode 100644
index 662d638..0000000
--- a/registry/vulkan/chapters/copies.txt
+++ /dev/null
@@ -1,1639 +0,0 @@
-// Copyright 2015-2021 The Khronos Group, Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-[[copies]]
-= Copy Commands
-
-An application can: copy buffer and image data using several methods
-depending on the type of data transfer.
-Data can: be copied between buffer objects with
-ifdef::VK_KHR_copy_commands2[]
-fname:vkCmdCopyBuffer2KHR and
-endif::VK_KHR_copy_commands2[]
-fname:vkCmdCopyBuffer and a portion of an image can: be copied to another
-image with
-ifdef::VK_KHR_copy_commands2[]
-fname:vkCmdCopyImage2KHR and
-endif::VK_KHR_copy_commands2[]
-fname:vkCmdCopyImage.
-Image data can: also be copied to and from buffer memory using
-ifndef::VK_KHR_copy_commands2[]
-fname:vkCmdCopyImageToBuffer and fname:vkCmdCopyBufferToImage.
-endif::VK_KHR_copy_commands2[]
-ifdef::VK_KHR_copy_commands2[]
-fname:vkCmdCopyImageToBuffer2KHR, fname:vkCmdCopyImageToBuffer,
-fname:vkCmdCopyBufferToImage2KHR, and fname:vkCmdCopyBufferToImage.
-endif::VK_KHR_copy_commands2[]
-Image data can: be blitted (with or without scaling and filtering) with
-ifdef::VK_KHR_copy_commands2[]
-fname:vkCmdBlitImage2KHR and
-endif::VK_KHR_copy_commands2[]
-fname:vkCmdBlitImage.
-Multisampled images can: be resolved to a non-multisampled image with
-ifdef::VK_KHR_copy_commands2[]
-fname:vkCmdResolveImage2KHR and
-endif::VK_KHR_copy_commands2[]
-fname:vkCmdResolveImage.
-
-
-== Common Operation
-
-The following valid usage rules apply to all copy commands:
-
-  * Copy commands must: be recorded outside of a render pass instance.
-  * The set of all bytes bound to all the source regions must: not overlap
-    the set of all bytes bound to the destination regions.
-  * The set of all bytes bound to each destination region must: not overlap
-    the set of all bytes bound to another destination region.
-  * Copy regions must: be non-empty.
-  * Regions must: not extend outside the bounds of the buffer or image
-    level, except that regions of compressed images can: extend as far as
-    the dimension of the image level rounded up to a complete compressed
-    texel block.
-  * Source image subresources must: be in either the
-    ename:VK_IMAGE_LAYOUT_GENERAL or
-    ename:VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL layout.
-    Destination image subresources must: be in the
-ifdef::VK_KHR_shared_presentable_image[]
-    ename:VK_IMAGE_LAYOUT_SHARED_PRESENT_KHR,
-endif::VK_KHR_shared_presentable_image[]
-    ename:VK_IMAGE_LAYOUT_GENERAL or
-    ename:VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL layout.
-    As a consequence, if an image subresource is used as both source and
-    destination of a copy, it must: be in the ename:VK_IMAGE_LAYOUT_GENERAL
-    layout.
-ifdef::VK_VERSION_1_1,VK_KHR_maintenance1[]
-  * Source images must: have ename:VK_FORMAT_FEATURE_TRANSFER_SRC_BIT in
-    their <<resources-image-format-features,format features>>.
-  * Destination images must: have ename:VK_FORMAT_FEATURE_TRANSFER_DST_BIT
-    in their <<resources-image-format-features,format features>>.
-endif::VK_VERSION_1_1,VK_KHR_maintenance1[]
-  * Source buffers must: have been created with the
-    ename:VK_BUFFER_USAGE_TRANSFER_SRC_BIT usage bit enabled and destination
-    buffers must: have been created with the
-    ename:VK_BUFFER_USAGE_TRANSFER_DST_BIT usage bit enabled.
-ifndef::VK_VERSION_1_2+VK_EXT_separate_stencil_usage[]
-  * Source images must: have been created with
-    ename:VK_IMAGE_USAGE_TRANSFER_SRC_BIT set in
-    slink:VkImageCreateInfo::pname:usage
-  * Destination images must: have been created with
-    ename:VK_IMAGE_USAGE_TRANSFER_DST_BIT set in
-    slink:VkImageCreateInfo::pname:usage
-endif::VK_VERSION_1_2+VK_EXT_separate_stencil_usage[]
-ifdef::VK_VERSION_1_2,VK_EXT_separate_stencil_usage[]
-  * If the stencil aspect of source image is accessed, and the source image
-    was not created with <<VkImageStencilUsageCreateInfo,separate stencil
-    usage>>, the source image must: have been created with
-    ename:VK_IMAGE_USAGE_TRANSFER_SRC_BIT set in
-    slink:VkImageCreateInfo::pname:usage
-  * If the stencil aspect of destination image is accessed, and the
-    destination image was not created with
-    <<VkImageStencilUsageCreateInfo,separate stencil usage>>, the
-    destination image must: have been created with
-    ename:VK_IMAGE_USAGE_TRANSFER_DST_BIT set in
-    slink:VkImageCreateInfo::pname:usage
-  * If the stencil aspect of source image is accessed, and the source image
-    was created with <<VkImageStencilUsageCreateInfo,separate stencil
-    usage>>, the source image must: have been created with
-    ename:VK_IMAGE_USAGE_TRANSFER_SRC_BIT set in
-    slink:VkImageStencilUsageCreateInfo::pname:stencilUsage
-  * If the stencil aspect of destination image is accessed, and the
-    destination image was created with
-    <<VkImageStencilUsageCreateInfo,separate stencil usage>>, the
-    destination image must: have been created with
-    ename:VK_IMAGE_USAGE_TRANSFER_DST_BIT set in
-    slink:VkImageStencilUsageCreateInfo::pname:stencilUsage
-  * If non-stencil aspects of a source image are accessed, the source image
-    must: have been created with ename:VK_IMAGE_USAGE_TRANSFER_SRC_BIT set
-    in slink:VkImageCreateInfo::pname:usage
-  * If non-stencil aspects of a destination image are accessed, the
-    destination image must: have been created with
-    ename:VK_IMAGE_USAGE_TRANSFER_DST_BIT set in
-    slink:VkImageCreateInfo::pname:usage
-endif::VK_VERSION_1_2,VK_EXT_separate_stencil_usage[]
-
-All copy commands are treated as "`transfer`" operations for the purposes of
-synchronization barriers.
-
-All copy commands that have a source format with an X component in its
-format description read undefined: values from those bits.
-
-All copy commands that have a destination format with an X component in its
-format description write undefined: values to those bits.
-
-
-[[copies-buffers]]
-== Copying Data Between Buffers
-
-[open,refpage='vkCmdCopyBuffer',desc='Copy data between buffer regions',type='protos']
---
-:refpage: vkCmdCopyBuffer
-
-To copy data between buffer objects, call:
-
-include::{generated}/api/protos/vkCmdCopyBuffer.txt[]
-
-  * pname:commandBuffer is the command buffer into which the command will be
-    recorded.
-  * pname:srcBuffer is the source buffer.
-  * pname:dstBuffer is the destination buffer.
-  * pname:regionCount is the number of regions to copy.
-  * pname:pRegions is a pointer to an array of slink:VkBufferCopy structures
-    specifying the regions to copy.
-
-Each region in pname:pRegions is copied from the source buffer to the same
-region of the destination buffer.
-pname:srcBuffer and pname:dstBuffer can: be the same buffer or alias the
-same memory, but the resulting values are undefined: if the copy regions
-overlap in memory.
-
-.Valid Usage
-****
-include::{chapters}/commonvalidity/copy_buffer_command_buffer_common.txt[]
-include::{chapters}/commonvalidity/copy_buffer_common.txt[]
-****
-
-include::{generated}/validity/protos/vkCmdCopyBuffer.txt[]
---
-
-[open,refpage='VkBufferCopy',desc='Structure specifying a buffer copy operation',type='structs']
---
-:refpage: VkBufferCopy
-
-The sname:VkBufferCopy structure is defined as:
-
-include::{generated}/api/structs/VkBufferCopy.txt[]
-
-  * pname:srcOffset is the starting offset in bytes from the start of
-    pname:srcBuffer.
-  * pname:dstOffset is the starting offset in bytes from the start of
-    pname:dstBuffer.
-  * pname:size is the number of bytes to copy.
-
-.Valid Usage
-****
-include::{chapters}/commonvalidity/buffer_copy_common.txt[]
-****
-
-include::{generated}/validity/structs/VkBufferCopy.txt[]
---
-
-ifdef::VK_KHR_copy_commands2[]
-
-A more extensible version of the copy buffer command is defined below.
-
-[open,refpage='vkCmdCopyBuffer2KHR',desc='Copy data between buffer regions',type='protos']
---
-:refpage: vkCmdCopyBuffer2KHR
-
-To copy data between buffer objects, call:
-
-include::{generated}/api/protos/vkCmdCopyBuffer2KHR.txt[]
-
-  * pname:commandBuffer is the command buffer into which the command will be
-    recorded.
-  * pname:pCopyBufferInfo is a pointer to a slink:VkCopyBufferInfo2KHR
-    structure describing the copy parameters.
-
-This command is functionally identical to flink:vkCmdCopyBuffer, but
-includes extensible sub-structures that include pname:sType and pname:pNext
-parameters, allowing them to be more easily extended.
-
-.Valid Usage
-****
-include::{chapters}/commonvalidity/copy_buffer_command_buffer_common.txt[]
-****
-
-include::{generated}/validity/protos/vkCmdCopyBuffer2KHR.txt[]
---
-
-[open,refpage='VkCopyBufferInfo2KHR',desc='Structure specifying parameters of a buffer copy command',type='structs']
---
-:refpage: VkCopyBufferInfo2KHR
-
-The sname:VkCopyBufferInfo2KHR structure is defined as:
-
-include::{generated}/api/structs/VkCopyBufferInfo2KHR.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:srcBuffer is the source buffer.
-  * pname:dstBuffer is the destination buffer.
-  * pname:regionCount is the number of regions to copy.
-  * pname:pRegions is a pointer to an array of slink:VkBufferCopy2KHR
-    structures specifying the regions to copy.
-
-Members defined by this structure with the same name as parameters in
-flink:vkCmdCopyBuffer have the identical effect to those parameters; the
-child structure slink:VkBufferCopy2KHR is a variant of slink:VkBufferCopy
-which includes pname:sType and pname:pNext parameters, allowing it to be
-extended.
-
-.Valid Usage
-****
-include::{chapters}/commonvalidity/copy_buffer_common.txt[]
-****
-
-include::{generated}/validity/structs/VkCopyBufferInfo2KHR.txt[]
---
-
-[open,refpage='VkBufferCopy2KHR',desc='Structure specifying a buffer copy operation',type='structs']
---
-:refpage: VkBufferCopy2KHR
-
-The sname:VkBufferCopy2KHR structure is defined as:
-
-include::{generated}/api/structs/VkBufferCopy2KHR.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:srcOffset is the starting offset in bytes from the start of
-    pname:srcBuffer.
-  * pname:dstOffset is the starting offset in bytes from the start of
-    pname:dstBuffer.
-  * pname:size is the number of bytes to copy.
-
-.Valid Usage
-****
-include::{chapters}/commonvalidity/buffer_copy_common.txt[]
-****
-
-include::{generated}/validity/structs/VkBufferCopy2KHR.txt[]
---
-
-endif::VK_KHR_copy_commands2[]
-
-
-[[copies-images]]
-== Copying Data Between Images
-
-fname:vkCmdCopyImage performs image copies in a similar manner to a host
-memcpy.
-It does not perform general-purpose conversions such as scaling, resizing,
-blending, color-space conversion, or format conversions.
-Rather, it simply copies raw image data.
-fname:vkCmdCopyImage can: copy between images with different formats,
-provided the formats are compatible as defined below.
-
-[open,refpage='vkCmdCopyImage',desc='Copy data between images',type='protos']
---
-:refpage: vkCmdCopyImage
-
-To copy data between image objects, call:
-
-include::{generated}/api/protos/vkCmdCopyImage.txt[]
-
-  * pname:commandBuffer is the command buffer into which the command will be
-    recorded.
-  * pname:srcImage is the source image.
-  * pname:srcImageLayout is the current layout of the source image
-    subresource.
-  * pname:dstImage is the destination image.
-  * pname:dstImageLayout is the current layout of the destination image
-    subresource.
-  * pname:regionCount is the number of regions to copy.
-  * pname:pRegions is a pointer to an array of slink:VkImageCopy structures
-    specifying the regions to copy.
-
-Each region in pname:pRegions is copied from the source image to the same
-region of the destination image.
-pname:srcImage and pname:dstImage can: be the same image or alias the same
-memory.
-
-[[copies-images-format-compatibility]]
-The formats of pname:srcImage and pname:dstImage must: be compatible.
-Formats are compatible if they share the same class, as shown in the
-<<formats-compatibility,Compatible Formats>> table.
-Depth/stencil formats must: match exactly.
-
-ifdef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
-If either pname:srcImage or pname:dstImage has a
-<<formats-requiring-sampler-ycbcr-conversion, _multi-planar_ format>>,
-regions of each plane to be copied must: be specified separately using the
-pname:srcSubresource and pname:dstSubresource members of the
-slink:VkImageCopy structure.
-In this case, the pname:aspectMask of the pname:srcSubresource or
-pname:dstSubresource that refers to the multi-planar image must: be
-ename:VK_IMAGE_ASPECT_PLANE_0_BIT, ename:VK_IMAGE_ASPECT_PLANE_1_BIT, or
-ename:VK_IMAGE_ASPECT_PLANE_2_BIT.
-For the purposes of fname:vkCmdCopyImage, each plane of a multi-planar image
-is treated as having the format listed in <<formats-compatible-planes>> for
-the plane identified by the pname:aspectMask of the corresponding
-subresource.
-This applies both to elink:VkFormat and to coordinates used in the copy,
-which correspond to texels in the _plane_ rather than how these texels map
-to coordinates in the image as a whole.
-
-[NOTE]
-.Note
-====
-For example, the ename:VK_IMAGE_ASPECT_PLANE_1_BIT plane of a
-ename:VK_FORMAT_G8_B8R8_2PLANE_420_UNORM image is compatible with an image
-of format ename:VK_FORMAT_R8G8_UNORM and (less usefully) with the
-ename:VK_IMAGE_ASPECT_PLANE_0_BIT plane of an image of format
-ename:VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_420_UNORM_3PACK16, as each texel is
-2 bytes in size.
-====
-endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
-
-[[copies-images-format-size-compatibility]]
-fname:vkCmdCopyImage allows copying between _size-compatible_ compressed and
-uncompressed internal formats.
-Formats are size-compatible if the texel block size of the uncompressed
-format is equal to the texel block size of the compressed format.
-Such a copy does not perform on-the-fly compression or decompression.
-When copying from an uncompressed format to a compressed format, each texel
-of uncompressed data of the source image is copied as a raw value to the
-corresponding compressed texel block of the destination image.
-When copying from a compressed format to an uncompressed format, each
-compressed texel block of the source image is copied as a raw value to the
-corresponding texel of uncompressed data in the destination image.
-Thus, for example, it is legal to copy between a 128-bit uncompressed format
-and a compressed format which has a 128-bit sized compressed texel block
-representing 4{times}4 texels (using 8 bits per texel), or between a 64-bit
-uncompressed format and a compressed format which has a 64-bit sized
-compressed texel block representing 4{times}4 texels (using 4 bits per
-texel).
-
-When copying between compressed and uncompressed formats the pname:extent
-members represent the texel dimensions of the source image and not the
-destination.
-When copying from a compressed image to an uncompressed image the image
-texel dimensions written to the uncompressed image will be source extent
-divided by the compressed texel block dimensions.
-When copying from an uncompressed image to a compressed image the image
-texel dimensions written to the compressed image will be the source extent
-multiplied by the compressed texel block dimensions.
-In both cases the number of bytes read and the number of bytes written will
-be identical.
-
-Copying to or from block-compressed images is typically done in multiples of
-the compressed texel block size.
-For this reason the pname:extent must: be a multiple of the compressed texel
-block dimension.
-There is one exception to this rule which is required: to handle compressed
-images created with dimensions that are not a multiple of the compressed
-texel block dimensions: if the pname:srcImage is compressed, then:
-
-  * If pname:extent.width is not a multiple of the compressed texel block
-    width, then [eq]#(pname:extent.width {plus} pname:srcOffset.x)# must:
-    equal the image subresource width.
-  * If pname:extent.height is not a multiple of the compressed texel block
-    height, then [eq]#(pname:extent.height {plus} pname:srcOffset.y)# must:
-    equal the image subresource height.
-  * If pname:extent.depth is not a multiple of the compressed texel block
-    depth, then [eq]#(pname:extent.depth {plus} pname:srcOffset.z)# must:
-    equal the image subresource depth.
-
-Similarly, if the pname:dstImage is compressed, then:
-
-  * If pname:extent.width is not a multiple of the compressed texel block
-    width, then [eq]#(pname:extent.width {plus} pname:dstOffset.x)# must:
-    equal the image subresource width.
-  * If pname:extent.height is not a multiple of the compressed texel block
-    height, then [eq]#(pname:extent.height {plus} pname:dstOffset.y)# must:
-    equal the image subresource height.
-  * If pname:extent.depth is not a multiple of the compressed texel block
-    depth, then [eq]#(pname:extent.depth {plus} pname:dstOffset.z)# must:
-    equal the image subresource depth.
-
-This allows the last compressed texel block of the image in each
-non-multiple dimension to be included as a source or destination of the
-copy.
-
-ifdef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
-"`etext:_422`" image formats that are not
-<<formats-requiring-sampler-ycbcr-conversion,_multi-planar_>> are treated as
-having a 2{times}1 compressed texel block for the purposes of these rules.
-endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
-
-fname:vkCmdCopyImage can: be used to copy image data between multisample
-images, but both images must: have the same number of samples.
-
-.Valid Usage
-****
-include::{chapters}/commonvalidity/copy_image_command_buffer_common.txt[]
-include::{chapters}/commonvalidity/copy_image_common.txt[]
-****
-
-include::{generated}/validity/protos/vkCmdCopyImage.txt[]
---
-
-[open,refpage='VkImageCopy',desc='Structure specifying an image copy operation',type='structs']
---
-:refpage: VkImageCopy
-
-The sname:VkImageCopy structure is defined as:
-
-include::{generated}/api/structs/VkImageCopy.txt[]
-
-  * pname:srcSubresource and pname:dstSubresource are
-    slink:VkImageSubresourceLayers structures specifying the image
-    subresources of the images used for the source and destination image
-    data, respectively.
-  * pname:srcOffset and pname:dstOffset select the initial pname:x, pname:y,
-    and pname:z offsets in texels of the sub-regions of the source and
-    destination image data.
-  * pname:extent is the size in texels of the image to copy in pname:width,
-    pname:height and pname:depth.
-
-ifdef::VK_VERSION_1_1,VK_KHR_maintenance1[]
-For ename:VK_IMAGE_TYPE_3D images, copies are performed slice by slice
-starting with the pname:z member of the pname:srcOffset or pname:dstOffset,
-and copying pname:depth slices.
-For images with multiple layers, copies are performed layer by layer
-starting with the pname:baseArrayLayer member of the pname:srcSubresource or
-pname:dstSubresource and copying pname:layerCount layers.
-Image data can: be copied between images with different image types.
-If one image is ename:VK_IMAGE_TYPE_3D and the other image is
-ename:VK_IMAGE_TYPE_2D with multiple layers, then each slice is copied to or
-from a different layer.
-endif::VK_VERSION_1_1,VK_KHR_maintenance1[]
-ifndef::VK_VERSION_1_1,VK_KHR_maintenance1[]
-Copies are done layer by layer starting with pname:baseArrayLayer member of
-pname:srcSubresource for the source and pname:dstSubresource for the
-destination.
-pname:layerCount layers are copied to the destination image.
-endif::VK_VERSION_1_1,VK_KHR_maintenance1[]
-
-ifdef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
-Copies involving a <<formats-requiring-sampler-ycbcr-conversion,
-multi-planar image format>> specify the region to be copied in terms of the
-_plane_ to be copied, not the coordinates of the multi-planar image.
-This means that copies accessing the R/B planes of "`etext:_422`" format
-images must: fit the copied region within half the pname:width of the parent
-image, and that copies accessing the R/B planes of "`etext:_420`" format
-images must: fit the copied region within half the pname:width and
-pname:height of the parent image.
-endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
-
-.Valid Usage
-****
-include::{chapters}/commonvalidity/image_copy_common.txt[]
-****
-
-include::{generated}/validity/structs/VkImageCopy.txt[]
---
-
-[open,refpage='VkImageSubresourceLayers',desc='Structure specifying an image subresource layers',type='structs']
---
-
-The sname:VkImageSubresourceLayers structure is defined as:
-
-include::{generated}/api/structs/VkImageSubresourceLayers.txt[]
-
-  * pname:aspectMask is a combination of elink:VkImageAspectFlagBits,
-    selecting the color, depth and/or stencil aspects to be copied.
-  * pname:mipLevel is the mipmap level to copy
-  * pname:baseArrayLayer and pname:layerCount are the starting layer and
-    number of layers to copy.
-
-.Valid Usage
-****
-  * [[VUID-VkImageSubresourceLayers-aspectMask-00167]]
-    If pname:aspectMask contains ename:VK_IMAGE_ASPECT_COLOR_BIT, it must:
-    not contain either of ename:VK_IMAGE_ASPECT_DEPTH_BIT or
-    ename:VK_IMAGE_ASPECT_STENCIL_BIT
-  * [[VUID-VkImageSubresourceLayers-aspectMask-00168]]
-    pname:aspectMask must: not contain ename:VK_IMAGE_ASPECT_METADATA_BIT
-ifdef::VK_EXT_image_drm_format_modifier[]
-  * [[VUID-VkImageSubresourceLayers-aspectMask-02247]]
-    pname:aspectMask must: not include
-    `VK_IMAGE_ASPECT_MEMORY_PLANE__{ibit}__BIT_EXT` for any index _i_
-endif::VK_EXT_image_drm_format_modifier[]
-  * [[VUID-VkImageSubresourceLayers-layerCount-01700]]
-    pname:layerCount must: be greater than 0
-****
-
-include::{generated}/validity/structs/VkImageSubresourceLayers.txt[]
---
-
-ifdef::VK_KHR_copy_commands2[]
-
-A more extensible version of the copy image command is defined below.
-
-[open,refpage='vkCmdCopyImage2KHR',desc='Copy data between images',type='protos']
---
-:refpage: vkCmdCopyImage2KHR
-
-To copy data between image objects, call:
-
-include::{generated}/api/protos/vkCmdCopyImage2KHR.txt[]
-
-  * pname:commandBuffer is the command buffer into which the command will be
-    recorded.
-  * pname:pCopyImageInfo is a pointer to a slink:VkCopyImageInfo2KHR
-    structure describing the copy parameters.
-
-This command is functionally identical to flink:vkCmdCopyImage, but includes
-extensible sub-structures that include pname:sType and pname:pNext
-parameters, allowing them to be more easily extended.
-
-.Valid Usage
-****
-include::{chapters}/commonvalidity/copy_image_command_buffer_common.txt[]
-****
-
-include::{generated}/validity/protos/vkCmdCopyImage2KHR.txt[]
---
-
-
-[open,refpage='VkCopyImageInfo2KHR',desc='Structure specifying parameters of an image copy command',type='structs']
---
-:refpage: VkCopyImageInfo2KHR
-
-The sname:VkCopyImageInfo2KHR structure is defined as:
-
-include::{generated}/api/structs/VkCopyImageInfo2KHR.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:srcImage is the source image.
-  * pname:srcImageLayout is the current layout of the source image
-    subresource.
-  * pname:dstImage is the destination image.
-  * pname:dstImageLayout is the current layout of the destination image
-    subresource.
-  * pname:regionCount is the number of regions to copy.
-  * pname:pRegions is a pointer to an array of slink:VkImageCopy2KHR
-    structures specifying the regions to copy.
-
-
-.Valid Usage
-****
-include::{chapters}/commonvalidity/copy_image_common.txt[]
-****
-
-include::{generated}/validity/structs/VkCopyImageInfo2KHR.txt[]
---
-
-[open,refpage='VkImageCopy2KHR',desc='Structure specifying an image copy operation',type='structs']
---
-:refpage: VkImageCopy2KHR
-
-The sname:VkImageCopy2KHR structure is defined as:
-
-include::{generated}/api/structs/VkImageCopy2KHR.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:srcSubresource and pname:dstSubresource are
-    slink:VkImageSubresourceLayers structures specifying the image
-    subresources of the images used for the source and destination image
-    data, respectively.
-  * pname:srcOffset and pname:dstOffset select the initial pname:x, pname:y,
-    and pname:z offsets in texels of the sub-regions of the source and
-    destination image data.
-  * pname:extent is the size in texels of the image to copy in pname:width,
-    pname:height and pname:depth.
-
-.Valid Usage
-****
-include::{chapters}/commonvalidity/image_copy_common.txt[]
-****
-
-include::{generated}/validity/structs/VkImageCopy2KHR.txt[]
---
-
-endif::VK_KHR_copy_commands2[]
-
-
-[[copies-buffers-images]]
-== Copying Data Between Buffers and Images
-
-[open,refpage='vkCmdCopyBufferToImage',desc='Copy data from a buffer into an image',type='protos']
---
-:refpage: vkCmdCopyBufferToImage
-:imageparam: pname:dstImage
-
-To copy data from a buffer object to an image object, call:
-
-include::{generated}/api/protos/vkCmdCopyBufferToImage.txt[]
-
-  * pname:commandBuffer is the command buffer into which the command will be
-    recorded.
-  * pname:srcBuffer is the source buffer.
-  * pname:dstImage is the destination image.
-  * pname:dstImageLayout is the layout of the destination image subresources
-    for the copy.
-  * pname:regionCount is the number of regions to copy.
-  * pname:pRegions is a pointer to an array of slink:VkBufferImageCopy
-    structures specifying the regions to copy.
-
-Each region in pname:pRegions is copied from the specified region of the
-source buffer to the specified region of the destination image.
-
-ifdef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
-If pname:dstImage has a
-<<formats-requiring-sampler-ycbcr-conversion,multi-planar format>>, regions
-of each plane to be a target of a copy must: be specified separately using
-the pname:pRegions member of the slink:VkBufferImageCopy structure.
-In this case, the pname:aspectMask of pname:imageSubresource must: be
-ename:VK_IMAGE_ASPECT_PLANE_0_BIT, ename:VK_IMAGE_ASPECT_PLANE_1_BIT, or
-ename:VK_IMAGE_ASPECT_PLANE_2_BIT.
-For the purposes of fname:vkCmdCopyBufferToImage, each plane of a
-multi-planar image is treated as having the format listed in
-<<formats-compatible-planes>> for the plane identified by the
-pname:aspectMask of the corresponding subresource.
-This applies both to elink:VkFormat and to coordinates used in the copy,
-which correspond to texels in the _plane_ rather than how these texels map
-to coordinates in the image as a whole.
-endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
-
-.Valid Usage
-****
-include::{chapters}/commonvalidity/copy_buffer_to_image_command_buffer_common.txt[]
-  * [[VUID-vkCmdCopyBufferToImage-pRegions-06217]]
-    The image region specified by each element of pname:pRegions must: be
-    contained within the specified pname:imageSubresource of pname:dstImage
-include::{chapters}/commonvalidity/copy_buffer_to_image_common.txt[]
-  * [[VUID-vkCmdCopyBufferToImage-pRegions-06218]]
-    For each element of pname:pRegions, pname:imageOffset.x and
-    [eq]#(pname:imageExtent.width {plus} pname:imageOffset.x)# must: both be
-    greater than or equal to `0` and less than or equal to the width of the
-    specified pname:imageSubresource of pname:dstImage
-  * [[VUID-vkCmdCopyBufferToImage-pRegions-06219]]
-    For each element of pname:pRegions, pname:imageOffset.y and
-    [eq]#(pname:imageExtent.height {plus} pname:imageOffset.y)# must: both
-    be greater than or equal to `0` and less than or equal to the height of
-    the specified pname:imageSubresource of pname:dstImage
-include::{chapters}/commonvalidity/copy_bufferimage_to_imagebuffer_common.txt[]
-****
-
-include::{generated}/validity/protos/vkCmdCopyBufferToImage.txt[]
---
-
-[open,refpage='vkCmdCopyImageToBuffer',desc='Copy image data into a buffer',type='protos']
---
-:refpage: vkCmdCopyImageToBuffer
-:imageparam: pname:srcImage
-
-To copy data from an image object to a buffer object, call:
-
-include::{generated}/api/protos/vkCmdCopyImageToBuffer.txt[]
-
-  * pname:commandBuffer is the command buffer into which the command will be
-    recorded.
-  * pname:srcImage is the source image.
-  * pname:srcImageLayout is the layout of the source image subresources for
-    the copy.
-  * pname:dstBuffer is the destination buffer.
-  * pname:regionCount is the number of regions to copy.
-  * pname:pRegions is a pointer to an array of slink:VkBufferImageCopy
-    structures specifying the regions to copy.
-
-Each region in pname:pRegions is copied from the specified region of the
-source image to the specified region of the destination buffer.
-
-ifdef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
-If pname:srcImage has a <<formats-requiring-sampler-ycbcr-conversion,
-multi-planar format>>, regions of each plane to be a source of a copy must:
-be specified separately using the pname:pRegions member of the
-slink:VkBufferImageCopy structure.
-In this case, the pname:aspectMask of pname:imageSubresource must: be
-ename:VK_IMAGE_ASPECT_PLANE_0_BIT, ename:VK_IMAGE_ASPECT_PLANE_1_BIT, or
-ename:VK_IMAGE_ASPECT_PLANE_2_BIT.
-For the purposes of fname:vkCmdCopyBufferToImage, each plane of a
-multi-planar image is treated as having the format listed in
-<<formats-compatible-planes>> for the plane identified by the
-pname:aspectMask of the corresponding subresource.
-This applies both to elink:VkFormat and to coordinates used in the copy,
-which correspond to texels in the _plane_ rather than how these texels map
-to coordinates in the image as a whole.
-endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
-
-.Valid Usage
-****
-include::{chapters}/commonvalidity/copy_image_to_buffer_command_buffer_common.txt[]
-  * [[VUID-vkCmdCopyImageToBuffer-pRegions-06220]]
-    The image region specified by each element of pname:pRegions must: be
-    contained within the specified pname:imageSubresource of pname:srcImage
-include::{chapters}/commonvalidity/copy_image_to_buffer_common.txt[]
-  * [[VUID-vkCmdCopyImageToBuffer-pRegions-06221]]
-    For each element of pname:pRegions, pname:imageOffset.x and
-    [eq]#(pname:imageExtent.width {plus} pname:imageOffset.x)# must: both be
-    greater than or equal to `0` and less than or equal to the width of the
-    specified pname:imageSubresource of pname:srcImage
-  * [[VUID-vkCmdCopyImageToBuffer-pRegions-06222]]
-    For each element of pname:pRegions, pname:imageOffset.y and
-    [eq]#(imageExtent.height {plus} pname:imageOffset.y)# must: both be
-    greater than or equal to `0` and less than or equal to the height of the
-    specified pname:imageSubresource of pname:srcImage
-include::{chapters}/commonvalidity/copy_bufferimage_to_imagebuffer_common.txt[]
-****
-
-include::{generated}/validity/protos/vkCmdCopyImageToBuffer.txt[]
---
-
-[open,refpage='VkBufferImageCopy',desc='Structure specifying a buffer image copy operation',type='structs']
---
-:refpage: VkBufferImageCopy
-
-For both flink:vkCmdCopyBufferToImage and flink:vkCmdCopyImageToBuffer, each
-element of pname:pRegions is a structure defined as:
-
-include::{generated}/api/structs/VkBufferImageCopy.txt[]
-
-  * pname:bufferOffset is the offset in bytes from the start of the buffer
-    object where the image data is copied from or to.
-  * pname:bufferRowLength and pname:bufferImageHeight specify in texels a
-    subregion of a larger two- or three-dimensional image in buffer memory,
-    and control the addressing calculations.
-    If either of these values is zero, that aspect of the buffer memory is
-    considered to be tightly packed according to the pname:imageExtent.
-  * pname:imageSubresource is a slink:VkImageSubresourceLayers used to
-    specify the specific image subresources of the image used for the source
-    or destination image data.
-  * pname:imageOffset selects the initial pname:x, pname:y, pname:z offsets
-    in texels of the sub-region of the source or destination image data.
-  * pname:imageExtent is the size in texels of the image to copy in
-    pname:width, pname:height and pname:depth.
-
-When copying to or from a depth or stencil aspect, the data in buffer memory
-uses a layout that is a (mostly) tightly packed representation of the depth
-or stencil data.
-Specifically:
-
-  * data copied to or from the stencil aspect of any depth/stencil format is
-    tightly packed with one ename:VK_FORMAT_S8_UINT value per texel.
-  * data copied to or from the depth aspect of a ename:VK_FORMAT_D16_UNORM
-    or ename:VK_FORMAT_D16_UNORM_S8_UINT format is tightly packed with one
-    ename:VK_FORMAT_D16_UNORM value per texel.
-  * data copied to or from the depth aspect of a ename:VK_FORMAT_D32_SFLOAT
-    or ename:VK_FORMAT_D32_SFLOAT_S8_UINT format is tightly packed with one
-    ename:VK_FORMAT_D32_SFLOAT value per texel.
-  * data copied to or from the depth aspect of a
-    ename:VK_FORMAT_X8_D24_UNORM_PACK32 or ename:VK_FORMAT_D24_UNORM_S8_UINT
-    format is packed with one 32-bit word per texel with the D24 value in
-    the LSBs of the word, and undefined: values in the eight MSBs.
-
-[NOTE]
-.Note
-====
-To copy both the depth and stencil aspects of a depth/stencil format, two
-entries in pname:pRegions can: be used, where one specifies the depth aspect
-in pname:imageSubresource, and the other specifies the stencil aspect.
-====
-
-Because depth or stencil aspect buffer to image copies may: require format
-conversions on some implementations, they are not supported on queues that
-do not support graphics.
-
-When copying to a depth aspect,
-ifdef::VK_EXT_depth_range_unrestricted[]
-and the `apiext:VK_EXT_depth_range_unrestricted` extension is not enabled,
-endif::VK_EXT_depth_range_unrestricted[]
-the data in buffer memory must: be in the range [eq]#[0,1]#, or the
-resulting values are undefined:.
-
-Copies are done layer by layer starting with image layer
-pname:baseArrayLayer member of pname:imageSubresource.
-pname:layerCount layers are copied from the source image or to the
-destination image.
-
-[[blocked-image]]
-For purpose of valid usage statements here and in related copy commands, a
-_blocked image_ is defined as:
-
-ifdef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
-  * an image with a _single-plane_, "`etext:_422`" format, which is treated
-    as a format with a 2 {times} 1 compressed texel block, or
-endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
-  * a compressed image.
-
-.Valid Usage
-****
-include::{chapters}/commonvalidity/buffer_image_copy_common.txt[]
-****
-
-include::{generated}/validity/structs/VkBufferImageCopy.txt[]
---
-
-ifdef::VK_KHR_copy_commands2[]
-
-More extensible versions of the commands to copy between buffers and images
-are defined below.
-
-[open,refpage='vkCmdCopyBufferToImage2KHR',desc='Copy data from a buffer into an image',type='protos']
---
-:refpage: vkCmdCopyBufferToImage2KHR
-
-To copy data from a buffer object to an image object, call:
-
-include::{generated}/api/protos/vkCmdCopyBufferToImage2KHR.txt[]
-
-  * pname:commandBuffer is the command buffer into which the command will be
-    recorded.
-  * pname:pCopyBufferToImageInfo is a pointer to a
-    slink:VkCopyBufferToImageInfo2KHR structure describing the copy
-    parameters.
-
-This command is functionally identical to flink:vkCmdCopyBufferToImage, but
-includes extensible sub-structures that include pname:sType and pname:pNext
-parameters, allowing them to be more easily extended.
-
-.Valid Usage
-****
-include::{chapters}/commonvalidity/copy_buffer_to_image_command_buffer_common.txt[]
-****
-
-include::{generated}/validity/protos/vkCmdCopyBufferToImage2KHR.txt[]
---
-
-[open,refpage='VkCopyBufferToImageInfo2KHR',desc='Structure specifying parameters of a buffer to image copy command',type='structs']
---
-:refpage: VkCopyBufferToImageInfo2KHR
-:imageparam: pname:dstImage
-
-The sname:VkCopyBufferToImageInfo2KHR structure is defined as:
-
-include::{generated}/api/structs/VkCopyBufferToImageInfo2KHR.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:srcBuffer is the source buffer.
-  * pname:dstImage is the destination image.
-  * pname:dstImageLayout is the layout of the destination image subresources
-    for the copy.
-  * pname:regionCount is the number of regions to copy.
-  * pname:pRegions is a pointer to an array of slink:VkBufferImageCopy2KHR
-    structures specifying the regions to copy.
-
-.Valid Usage
-****
-ifndef::VK_QCOM_rotated_copy_commands[]
-  * [[VUID-VkCopyBufferToImageInfo2KHR-pRegions-00172]]
-    The image region specified by each element of pname:pRegions must: be
-    contained within the specified pname:imageSubresource of pname:dstImage
-endif::VK_QCOM_rotated_copy_commands[]
-ifdef::VK_QCOM_rotated_copy_commands[]
-  * [[VUID-VkCopyBufferToImageInfo2KHR-pRegions-04565]]
-    If the image region specified by each element of pname:pRegions does not
-    contain slink:VkCopyCommandTransformInfoQCOM in its pname:pNext chain,
-    it must: be a region that is contained within the specified
-    pname:imageSubresource of pname:dstImage
-  * [[VUID-VkCopyBufferToImageInfo2KHR-pRegions-04554]]
-    If the image region specified by each element of pname:pRegions contains
-    slink:VkCopyCommandTransformInfoQCOM in its pname:pNext chain, the
-    rotated destination region as described in
-    <<copies-buffers-images-rotation-addressing>> must: be contained within
-    pname:dstImage
-  * [[VUID-VkCopyBufferToImageInfo2KHR-pRegions-04555]]
-    If any element of pname:pRegions contains
-    slink:VkCopyCommandTransformInfoQCOM in its pname:pNext chain, then
-    pname:dstImage must: not be a <<blocked-image,blocked image>>
-  * [[VUID-VkCopyBufferToImageInfo2KHR-pRegions-06203]]
-    If any element of pname:pRegions contains
-    slink:VkCopyCommandTransformInfoQCOM in its pname:pNext chain, then
-    pname:dstImage must: be of type ename:VK_IMAGE_TYPE_2D
-  * [[VUID-VkCopyBufferToImageInfo2KHR-pRegions-06204]]
-    If any element of pname:pRegions contains
-    slink:VkCopyCommandTransformInfoQCOM in its pname:pNext chain, then
-    pname:dstImage must: not have a
-    <<formats-requiring-sampler-ycbcr-conversion, multi-planar format>>
-endif::VK_QCOM_rotated_copy_commands[]
-include::{chapters}/commonvalidity/copy_buffer_to_image_common.txt[]
-  * [[VUID-VkCopyBufferToImageInfo2KHR-pRegions-06223]]
-    For each element of pname:pRegions not containing
-    sname:VkCopyCommandTransformInfoQCOM in its pname:pNext chain,
-    pname:imageOffset.x and [eq]#(pname:imageExtent.width {plus}
-    pname:imageOffset.x)# must: both be greater than or equal to `0` and
-    less than or equal to the width of the specified pname:imageSubresource
-    of pname:dstImage
-  * [[VUID-VkCopyBufferToImageInfo2KHR-pRegions-06224]]
-    For each element of pname:pRegions not containing
-    sname:VkCopyCommandTransformInfoQCOM in its pname:pNext chain,
-    pname:imageOffset.y and [eq]#(pname:imageExtent.height {plus}
-    pname:imageOffset.y)# must: both be greater than or equal to `0` and
-    less than or equal to the height of the specified pname:imageSubresource
-    of pname:dstImage
-include::{chapters}/commonvalidity/copy_bufferimage_to_imagebuffer_common.txt[]
-****
-
-include::{generated}/validity/structs/VkCopyBufferToImageInfo2KHR.txt[]
---
-
-[open,refpage='vkCmdCopyImageToBuffer2KHR',desc='Copy image data into a buffer',type='protos']
---
-:refpage: vkCmdCopyImageToBuffer2KHR
-:imageparam: pname:srcImage
-
-To copy data from an image object to a buffer object, call:
-
-include::{generated}/api/protos/vkCmdCopyImageToBuffer2KHR.txt[]
-
-  * pname:commandBuffer is the command buffer into which the command will be
-    recorded.
-  * pname:pCopyImageToBufferInfo is a pointer to a
-    slink:VkCopyImageToBufferInfo2KHR structure describing the copy
-    parameters.
-
-This command is functionally identical to flink:vkCmdCopyImageToBuffer, but
-includes extensible sub-structures that include pname:sType and pname:pNext
-parameters, allowing them to be more easily extended.
-
-
-.Valid Usage
-****
-include::{chapters}/commonvalidity/copy_image_to_buffer_command_buffer_common.txt[]
-****
-
-include::{generated}/validity/protos/vkCmdCopyImageToBuffer2KHR.txt[]
---
-
-[open,refpage='VkCopyImageToBufferInfo2KHR',desc='Structure specifying parameters of an image to buffer copy command',type='structs']
---
-:refpage: VkCopyImageToBufferInfo2KHR
-
-The sname:VkCopyImageToBufferInfo2KHR structure is defined as:
-
-include::{generated}/api/structs/VkCopyImageToBufferInfo2KHR.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:srcImage is the source image.
-  * pname:srcImageLayout is the layout of the source image subresources for
-    the copy.
-  * pname:dstBuffer is the destination buffer.
-  * pname:regionCount is the number of regions to copy.
-  * pname:pRegions is a pointer to an array of slink:VkBufferImageCopy2KHR
-    structures specifying the regions to copy.
-
-.Valid Usage
-****
-ifndef::VK_QCOM_rotated_copy_commands[]
-  * [[VUID-VkCopyImageToBufferInfo2KHR-pRegions-00182]]
-    The image region specified by each element of pname:pRegions must: be
-    contained within the specified pname:imageSubresource of pname:srcImage
-endif::VK_QCOM_rotated_copy_commands[]
-ifdef::VK_QCOM_rotated_copy_commands[]
-  * [[VUID-VkCopyImageToBufferInfo2KHR-pRegions-04566]]
-    If the image region specified by each element of pname:pRegions does not
-    contain slink:VkCopyCommandTransformInfoQCOM in its pname:pNext chain,
-    it must: be contained within the specified pname:imageSubresource of
-    pname:srcImage
-  * [[VUID-VkCopyImageToBufferInfo2KHR-pRegions-04557]]
-    If the image region specified by each element of pname:pRegions contains
-    slink:VkCopyCommandTransformInfoQCOM in its pname:pNext chain, the
-    rotated source region as described in
-    <<copies-buffers-images-rotation-addressing>> must: be contained within
-    pname:srcImage
-  * [[VUID-VkCopyImageToBufferInfo2KHR-pRegions-04558]]
-    If any element of pname:pRegions contains
-    slink:VkCopyCommandTransformInfoQCOM in its pname:pNext chain, then
-    pname:srcImage must: not be a <<blocked-image,blocked image>>
-  * [[VUID-VkCopyImageToBufferInfo2KHR-pRegions-06205]]
-    If any element of pname:pRegions contains
-    slink:VkCopyCommandTransformInfoQCOM in its pname:pNext chain, then
-    pname:srcImage must: be of type ename:VK_IMAGE_TYPE_2D
-  * [[VUID-VkCopyImageToBufferInfo2KHR-pRegions-06206]]
-    If any element of pname:pRegions contains
-    slink:VkCopyCommandTransformInfoQCOM in its pname:pNext chain, then
-    pname:srcImage must: not have a
-    <<formats-requiring-sampler-ycbcr-conversion, multi-planar format>>
-endif::VK_QCOM_rotated_copy_commands[]
-include::{chapters}/commonvalidity/copy_image_to_buffer_common.txt[]
-  * [[VUID-VkCopyImageToBufferInfo2KHR-imageOffset-00197]]
-    For each element of pname:pRegions not containing
-    sname:VkCopyCommandTransformInfoQCOM in its pname:pNext chain,
-    pname:imageOffset.x and [eq]#(pname:imageExtent.width {plus}
-    pname:imageOffset.x)# must: both be greater than or equal to `0` and
-    less than or equal to the width of the specified pname:imageSubresource
-    of pname:srcImage
-  * [[VUID-VkCopyImageToBufferInfo2KHR-imageOffset-00198]]
-    For each element of pname:pRegions not containing
-    sname:VkCopyCommandTransformInfoQCOM in its pname:pNext chain,
-    pname:imageOffset.y and [eq]#(pname:imageExtent.height {plus}
-    pname:imageOffset.y)# must: both be greater than or equal to `0` and
-    less than or equal to the height of the specified pname:imageSubresource
-    of pname:srcImage
-include::{chapters}/commonvalidity/copy_bufferimage_to_imagebuffer_common.txt[]
-****
-
-include::{generated}/validity/structs/VkCopyImageToBufferInfo2KHR.txt[]
---
-
-[open,refpage='VkBufferImageCopy2KHR',desc='Structure specifying a buffer image copy operation',type='structs']
---
-:refpage: VkBufferImageCopy2KHR
-
-For both flink:vkCmdCopyBufferToImage2KHR and
-flink:vkCmdCopyImageToBuffer2KHR, each element of pname:pRegions is a
-structure defined as:
-
-include::{generated}/api/structs/VkBufferImageCopy2KHR.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:bufferOffset is the offset in bytes from the start of the buffer
-    object where the image data is copied from or to.
-  * pname:bufferRowLength and pname:bufferImageHeight specify in texels a
-    subregion of a larger two- or three-dimensional image in buffer memory,
-    and control the addressing calculations.
-    If either of these values is zero, that aspect of the buffer memory is
-    considered to be tightly packed according to the pname:imageExtent.
-  * pname:imageSubresource is a slink:VkImageSubresourceLayers used to
-    specify the specific image subresources of the image used for the source
-    or destination image data.
-  * pname:imageOffset selects the initial pname:x, pname:y, pname:z offsets
-    in texels of the sub-region of the source or destination image data.
-  * pname:imageExtent is the size in texels of the image to copy in
-    pname:width, pname:height and pname:depth.
-
-This structure is functionally identical to slink:VkBufferImageCopy, but
-adds pname:sType and pname:pNext parameters, allowing it to be more easily
-extended.
-
-.Valid Usage
-****
-include::{chapters}/commonvalidity/buffer_image_copy_common.txt[]
-****
-
-include::{generated}/validity/structs/VkBufferImageCopy2KHR.txt[]
---
-endif::VK_KHR_copy_commands2[]
-
-ifdef::VK_QCOM_rotated_copy_commands[]
-For both flink:vkCmdCopyBufferToImage2KHR and
-flink:vkCmdCopyImageToBuffer2KHR, each region copied can include a rotation.
-To specify a region with rotation, add the
-slink:VkCopyCommandTransformInfoQCOM to the pname:pNext chain of
-slink:VkBufferImageCopy2KHR.
-When a rotation is specified, <<copies-buffers-images-rotation-addressing,
-Buffer and Image Addressing with Rotation>> specifies how coordinates of
-texels in the source region are rotated by pname:transform to produce texel
-coordinates in the destination region.
-When rotation is specified, the source and destination images must: each be
-2D images.
-They must: not be <<blocked-image,blocked images>> or have a
-<<formats-requiring-sampler-ycbcr-conversion, multi-planar format>>.
-
-[open,refpage='VkCopyCommandTransformInfoQCOM',desc='Structure describing transform parameters of rotated copy command',type='structs']
---
-The sname:VkRenderPassTransformBeginInfoQCOM structure is defined as:
-
-include::{generated}/api/structs/VkCopyCommandTransformInfoQCOM.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:transform is a elink:VkSurfaceTransformFlagBitsKHR value
-    describing the transform to be applied.
-
-.Valid Usage
-****
-  * [[VUID-VkCopyCommandTransformInfoQCOM-transform-04560]]
-    pname:transform must: be ename:VK_SURFACE_TRANSFORM_IDENTITY_BIT_KHR,
-    ename:VK_SURFACE_TRANSFORM_ROTATE_90_BIT_KHR,
-    ename:VK_SURFACE_TRANSFORM_ROTATE_180_BIT_KHR, or
-    ename:VK_SURFACE_TRANSFORM_ROTATE_270_BIT_KHR
-****
-
-include::{generated}/validity/structs/VkCopyCommandTransformInfoQCOM.txt[]
---
-
-endif::VK_QCOM_rotated_copy_commands[]
-
-
-[[copies-buffers-images-addressing]]
-=== Buffer and Image Addressing
-
-Pseudocode for image/buffer addressing of uncompressed formats is:
-
-[source,c]
----------------------------------------------------
-rowLength = region->bufferRowLength;
-if (rowLength == 0)
-    rowLength = region->imageExtent.width;
-
-imageHeight = region->bufferImageHeight;
-if (imageHeight == 0)
-    imageHeight = region->imageExtent.height;
-
-texelBlockSize = <texel block size of the format of the src/dstImage>;
-
-address of (x,y,z) = region->bufferOffset + (((z * imageHeight) + y) * rowLength + x) * texelBlockSize;
-
-where x,y,z range from (0,0,0) to region->imageExtent.{width,height,depth}.
----------------------------------------------------
-
-Note that pname:imageOffset does not affect addressing calculations for
-buffer memory.
-Instead, pname:bufferOffset can: be used to select the starting address in
-buffer memory.
-
-For block-compressed formats, all parameters are still specified in texels
-rather than compressed texel blocks, but the addressing math operates on
-whole compressed texel blocks.
-Pseudocode for compressed copy addressing is:
-
-[source,c]
----------------------------------------------------
-rowLength = region->bufferRowLength;
-if (rowLength == 0)
-    rowLength = region->imageExtent.width;
-
-imageHeight = region->bufferImageHeight;
-if (imageHeight == 0)
-    imageHeight = region->imageExtent.height;
-
-compressedTexelBlockSizeInBytes = <compressed texel block size taken from the src/dstImage>;
-rowLength = (rowLength + compressedTexelBlockWidth - 1) / compressedTexelBlockWidth;
-imageHeight = (imageHeight + compressedTexelBlockHeight - 1) / compressedTexelBlockHeight;
-
-address of (x,y,z) = region->bufferOffset + (((z * imageHeight) + y) * rowLength + x) * compressedTexelBlockSizeInBytes;
-
-where x,y,z range from (0,0,0) to region->imageExtent.{width/compressedTexelBlockWidth,height/compressedTexelBlockHeight,depth/compressedTexelBlockDepth}.
----------------------------------------------------
-
-Copying to or from block-compressed images is typically done in multiples of
-the compressed texel block size.
-For this reason the pname:imageExtent must: be a multiple of the compressed
-texel block dimension.
-There is one exception to this rule which is required: to handle compressed
-images created with dimensions that are not a multiple of the compressed
-texel block dimensions:
-
-  * If pname:imageExtent.width is not a multiple of the compressed texel
-    block width, then [eq]#(pname:imageExtent.width {plus}
-    pname:imageOffset.x)# must: equal the image subresource width.
-  * If pname:imageExtent.height is not a multiple of the compressed texel
-    block height, then [eq]#(pname:imageExtent.height {plus}
-    pname:imageOffset.y)# must: equal the image subresource height.
-  * If pname:imageExtent.depth is not a multiple of the compressed texel
-    block depth, then [eq]#(pname:imageExtent.depth {plus}
-    pname:imageOffset.z)# must: equal the image subresource depth.
-
-This allows the last compressed texel block of the image in each
-non-multiple dimension to be included as a source or destination of the
-copy.
-
-ifdef::VK_QCOM_rotated_copy_commands[]
-include::VK_QCOM_rotated_copies/rotated_addressing_copies.txt[]
-endif::VK_QCOM_rotated_copy_commands[]
-
-
-[[copies-imagescaling]]
-== Image Copies with Scaling
-
-[open,refpage='vkCmdBlitImage',desc='Copy regions of an image, potentially performing format conversion,',type='protos']
---
-:refpage: vkCmdBlitImage
-
-To copy regions of a source image into a destination image, potentially
-performing format conversion, arbitrary scaling, and filtering, call:
-
-include::{generated}/api/protos/vkCmdBlitImage.txt[]
-
-  * pname:commandBuffer is the command buffer into which the command will be
-    recorded.
-  * pname:srcImage is the source image.
-  * pname:srcImageLayout is the layout of the source image subresources for
-    the blit.
-  * pname:dstImage is the destination image.
-  * pname:dstImageLayout is the layout of the destination image subresources
-    for the blit.
-  * pname:regionCount is the number of regions to blit.
-  * pname:pRegions is a pointer to an array of slink:VkImageBlit structures
-    specifying the regions to blit.
-  * pname:filter is a elink:VkFilter specifying the filter to apply if the
-    blits require scaling.
-
-fname:vkCmdBlitImage must: not be used for multisampled source or
-destination images.
-Use flink:vkCmdResolveImage for this purpose.
-
-As the sizes of the source and destination extents can: differ in any
-dimension, texels in the source extent are scaled and filtered to the
-destination extent.
-Scaling occurs via the following operations:
-
-  * For each destination texel, the integer coordinate of that texel is
-    converted to an unnormalized texture coordinate, using the effective
-    inverse of the equations described in
-    <<textures-unnormalized-to-integer, unnormalized to integer
-    conversion>>:
-  {empty}:: [eq]#u~base~ = i {plus} {onehalf}#
-  {empty}:: [eq]#v~base~ = j {plus} {onehalf}#
-  {empty}:: [eq]#w~base~ = k {plus} {onehalf}#
-  * These base coordinates are then offset by the first destination offset:
-  {empty}:: [eq]#u~offset~ = u~base~ - x~dst0~#
-  {empty}:: [eq]#v~offset~ = v~base~ - y~dst0~#
-  {empty}:: [eq]#w~offset~ = w~base~ - z~dst0~#
-  {empty}:: [eq]#a~offset~ = a - pname:baseArrayCount~dst~#
-  * The scale is determined from the source and destination regions, and
-    applied to the offset coordinates:
-  {empty}:: [eq]#scale~u~ = (x~src1~ - x~src0~) / (x~dst1~ - x~dst0~)#
-  {empty}:: [eq]#scale~v~ = (y~src1~ - y~src0~) / (y~dst1~ - y~dst0~)#
-  {empty}:: [eq]#scale~w~ = (z~src1~ - z~src0~) / (z~dst1~ - z~dst0~)#
-  {empty}:: [eq]#u~scaled~ = u~offset~ {times} scale~u~#
-  {empty}:: [eq]#v~scaled~ = v~offset~ {times} scale~v~#
-  {empty}:: [eq]#w~scaled~ = w~offset~ {times} scale~w~#
-  * Finally the source offset is added to the scaled coordinates, to
-    determine the final unnormalized coordinates used to sample from
-    pname:srcImage:
-  {empty}:: [eq]#u = u~scaled~ {plus} x~src0~#
-  {empty}:: [eq]#v = v~scaled~ {plus} y~src0~#
-  {empty}:: [eq]#w = w~scaled~ {plus} z~src0~#
-  {empty}:: [eq]#q = pname:mipLevel#
-  {empty}:: [eq]#a = a~offset~ {plus} pname:baseArrayCount~src~#
-
-These coordinates are used to sample from the source image, as described in
-<<textures, Image Operations chapter>>, with the filter mode equal to that
-of pname:filter, a mipmap mode of ename:VK_SAMPLER_MIPMAP_MODE_NEAREST and
-an address mode of ename:VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE.
-Implementations must: clamp at the edge of the source image, and may:
-additionally clamp to the edge of the source region.
-
-[NOTE]
-.Note
-====
-Due to allowable rounding errors in the generation of the source texture
-coordinates, it is not always possible to guarantee exactly which source
-texels will be sampled for a given blit.
-As rounding errors are implementation-dependent, the exact results of a
-blitting operation are also implementation-dependent.
-====
-
-Blits are done layer by layer starting with the pname:baseArrayLayer member
-of pname:srcSubresource for the source and pname:dstSubresource for the
-destination.
-pname:layerCount layers are blitted to the destination image.
-
-When blitting 3D textures, slices in the destination region bounded by
-pname:dstOffsets[0].z and pname:dstOffsets[1].z are sampled from slices in
-the source region bounded by pname:srcOffsets[0].z and
-pname:srcOffsets[1].z.
-If the pname:filter parameter is ename:VK_FILTER_LINEAR then the value
-sampled from the source image is taken by doing linear filtering using the
-interpolated *z* coordinate represented by *w* in the previous equations.
-If the pname:filter parameter is ename:VK_FILTER_NEAREST then the value
-sampled from the source image is taken from the single nearest slice, with
-an implementation-dependent arithmetic rounding mode.
-
-The following filtering and conversion rules apply:
-
-  * Integer formats can: only be converted to other integer formats with the
-    same signedness.
-  * No format conversion is supported between depth/stencil images.
-    The formats must: match.
-  * Format conversions on unorm, snorm, unscaled and packed float formats of
-    the copied aspect of the image are performed by first converting the
-    pixels to float values.
-  * For sRGB source formats, nonlinear RGB values are converted to linear
-    representation prior to filtering.
-  * After filtering, the float values are first clamped and then cast to the
-    destination image format.
-    In case of sRGB destination format, linear RGB values are converted to
-    nonlinear representation before writing the pixel to the image.
-
-Signed and unsigned integers are converted by first clamping to the
-representable range of the destination format, then casting the value.
-
-.Valid Usage
-****
-include::{chapters}/commonvalidity/blit_image_command_buffer_common.txt[]
-include::{chapters}/commonvalidity/blit_image_common.txt[]
-****
-
-include::{generated}/validity/protos/vkCmdBlitImage.txt[]
---
-
-[open,refpage='VkImageBlit',desc='Structure specifying an image blit operation',type='structs']
---
-:refpage: VkImageBlit
-
-The sname:VkImageBlit structure is defined as:
-
-include::{generated}/api/structs/VkImageBlit.txt[]
-
-  * pname:srcSubresource is the subresource to blit from.
-  * pname:srcOffsets is a pointer to an array of two slink:VkOffset3D
-    structures specifying the bounds of the source region within
-    pname:srcSubresource.
-  * pname:dstSubresource is the subresource to blit into.
-  * pname:dstOffsets is a pointer to an array of two slink:VkOffset3D
-    structures specifying the bounds of the destination region within
-    pname:dstSubresource.
-
-For each element of the pname:pRegions array, a blit operation is performed
-for the specified source and destination regions.
-
-.Valid Usage
-****
-include::{chapters}/commonvalidity/image_blit_common.txt[]
-****
-
-include::{generated}/validity/structs/VkImageBlit.txt[]
---
-
-ifdef::VK_KHR_copy_commands2[]
-
-A more extensible version of the blit image command is defined below.
-
-[open,refpage='vkCmdBlitImage2KHR',desc='Copy regions of an image, potentially performing format conversion,',type='protos']
---
-:refpage: vkCmdBlitImage2KHR
-
-To copy regions of a source image into a destination image, potentially
-performing format conversion, arbitrary scaling, and filtering, call:
-
-include::{generated}/api/protos/vkCmdBlitImage2KHR.txt[]
-
-  * pname:commandBuffer is the command buffer into which the command will be
-    recorded.
-  * pname:pBlitImageInfo is a pointer to a slink:VkBlitImageInfo2KHR
-    structure describing the blit parameters.
-
-This command is functionally identical to flink:vkCmdBlitImage, but includes
-extensible sub-structures that include pname:sType and pname:pNext
-parameters, allowing them to be more easily extended.
-
-.Valid Usage
-****
-include::{chapters}/commonvalidity/blit_image_command_buffer_common.txt[]
-****
-
-include::{generated}/validity/protos/vkCmdBlitImage2KHR.txt[]
---
-
-[open,refpage='VkBlitImageInfo2KHR',desc='Structure specifying parameters of blit image command',type='structs']
---
-:refpage: VkBlitImageInfo2KHR
-
-The sname:VkBlitImageInfo2KHR structure is defined as:
-
-include::{generated}/api/structs/VkBlitImageInfo2KHR.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:srcImage is the source image.
-  * pname:srcImageLayout is the layout of the source image subresources for
-    the blit.
-  * pname:dstImage is the destination image.
-  * pname:dstImageLayout is the layout of the destination image subresources
-    for the blit.
-  * pname:regionCount is the number of regions to blit.
-  * pname:pRegions is a pointer to an array of slink:VkImageBlit2KHR
-    structures specifying the regions to blit.
-  * pname:filter is a elink:VkFilter specifying the filter to apply if the
-    blits require scaling.
-
-.Valid Usage
-****
-include::{chapters}/commonvalidity/blit_image_common.txt[]
-ifdef::VK_QCOM_rotated_copy_commands[]
-  * [[VUID-VkBlitImageInfo2KHR-pRegions-04561]]
-    If any element of pname:pRegions contains
-    slink:VkCopyCommandTransformInfoQCOM in its pname:pNext chain, then
-    pname:srcImage and pname:dstImage must: not be block-compressed images
-  * [[VUID-VkBlitImageInfo2KHR-pRegions-06207]]
-    If any element of pname:pRegions contains
-    slink:VkCopyCommandTransformInfoQCOM in its pname:pNext chain, then
-    pname:srcImage must: be of type ename:VK_IMAGE_TYPE_2D
-  * [[VUID-VkBlitImageInfo2KHR-pRegions-06208]]
-    If any element of pname:pRegions contains
-    slink:VkCopyCommandTransformInfoQCOM in its pname:pNext chain, then
-    pname:srcImage must: not have a
-    <<formats-requiring-sampler-ycbcr-conversion, multi-planar format>>
-endif::VK_QCOM_rotated_copy_commands[]
-****
-
-include::{generated}/validity/structs/VkBlitImageInfo2KHR.txt[]
---
-
-[open,refpage='VkImageBlit2KHR',desc='Structure specifying an image blit operation',type='structs']
---
-:refpage: VkImageBlit2KHR
-
-The sname:VkImageBlit2KHR structure is defined as:
-
-include::{generated}/api/structs/VkImageBlit2KHR.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:srcSubresource is the subresource to blit from.
-  * pname:srcOffsets is a pointer to an array of two slink:VkOffset3D
-    structures specifying the bounds of the source region within
-    pname:srcSubresource.
-  * pname:dstSubresource is the subresource to blit into.
-  * pname:dstOffsets is a pointer to an array of two slink:VkOffset3D
-    structures specifying the bounds of the destination region within
-    pname:dstSubresource.
-
-For each element of the pname:pRegions array, a blit operation is performed
-for the specified source and destination regions.
-
-.Valid Usage
-****
-include::{chapters}/commonvalidity/image_blit_common.txt[]
-****
-
-include::{generated}/validity/structs/VkImageBlit2KHR.txt[]
---
-
-ifdef::VK_QCOM_rotated_copy_commands[]
-For flink:vkCmdBlitImage2KHR, each region copied can include a rotation.
-To specify a rotated region, add slink:VkCopyCommandTransformInfoQCOM to the
-pname:pNext chain of slink:VkImageBlit2KHR.
-For each region with a rotation specified,
-<<copies-images-scaling-rotation,Image Blits with Scaling and Rotation>>
-specifies how coordinates are rotated prior to sampling from the source
-image.
-When rotation is specified, the source and destination images must: each be
-2D images.
-They must: not be <<blocked-image,blocked images>> or have a
-<<formats-requiring-sampler-ycbcr-conversion, multi-planar format>>.
-endif::VK_QCOM_rotated_copy_commands[]
-
-endif::VK_KHR_copy_commands2[]
-
-ifdef::VK_QCOM_rotated_copy_commands[]
-include::VK_QCOM_rotated_copies/rotated_addressing_blits.txt[]
-endif::VK_QCOM_rotated_copy_commands[]
-
-
-[[copies-resolve]]
-== Resolving Multisample Images
-
-[open,refpage='vkCmdResolveImage',desc='Resolve regions of an image',type='protos']
---
-:refpage: vkCmdResolveImage
-
-To resolve a multisample color image to a non-multisample color image, call:
-
-include::{generated}/api/protos/vkCmdResolveImage.txt[]
-
-  * pname:commandBuffer is the command buffer into which the command will be
-    recorded.
-  * pname:srcImage is the source image.
-  * pname:srcImageLayout is the layout of the source image subresources for
-    the resolve.
-  * pname:dstImage is the destination image.
-  * pname:dstImageLayout is the layout of the destination image subresources
-    for the resolve.
-  * pname:regionCount is the number of regions to resolve.
-  * pname:pRegions is a pointer to an array of slink:VkImageResolve
-    structures specifying the regions to resolve.
-
-During the resolve the samples corresponding to each pixel location in the
-source are converted to a single sample before being written to the
-destination.
-If the source formats are floating-point or normalized types, the sample
-values for each pixel are resolved in an implementation-dependent manner.
-If the source formats are integer types, a single sample's value is selected
-for each pixel.
-
-pname:srcOffset and pname:dstOffset select the initial pname:x, pname:y, and
-pname:z offsets in texels of the sub-regions of the source and destination
-image data.
-pname:extent is the size in texels of the source image to resolve in
-pname:width, pname:height and pname:depth.
-Each element of pname:pRegions must: be a region that is contained within
-its corresponding image.
-
-Resolves are done layer by layer starting with pname:baseArrayLayer member
-of pname:srcSubresource for the source and pname:dstSubresource for the
-destination.
-pname:layerCount layers are resolved to the destination image.
-
-.Valid Usage
-****
-include::{chapters}/commonvalidity/resolve_image_command_buffer_common.txt[]
-include::{chapters}/commonvalidity/resolve_image_common.txt[]
-****
-
-include::{generated}/validity/protos/vkCmdResolveImage.txt[]
---
-
-[open,refpage='VkImageResolve',desc='Structure specifying an image resolve operation',type='structs']
---
-:refpage: VkImageResolve
-
-The sname:VkImageResolve structure is defined as:
-
-include::{generated}/api/structs/VkImageResolve.txt[]
-
-  * pname:srcSubresource and pname:dstSubresource are
-    slink:VkImageSubresourceLayers structures specifying the image
-    subresources of the images used for the source and destination image
-    data, respectively.
-    Resolve of depth/stencil images is not supported.
-  * pname:srcOffset and pname:dstOffset select the initial pname:x, pname:y,
-    and pname:z offsets in texels of the sub-regions of the source and
-    destination image data.
-  * pname:extent is the size in texels of the source image to resolve in
-    pname:width, pname:height and pname:depth.
-
-.Valid Usage
-****
-include::{chapters}/commonvalidity/image_resolve_common.txt[]
-****
-
-include::{generated}/validity/structs/VkImageResolve.txt[]
---
-
-ifdef::VK_AMD_buffer_marker[]
-include::VK_AMD_buffer_marker/copies.txt[]
-endif::VK_AMD_buffer_marker[]
-
-ifdef::VK_KHR_copy_commands2[]
-
-A more extensible version of the resolve image command is defined below.
-
-[open,refpage='vkCmdResolveImage2KHR',desc='Resolve regions of an image',type='protos']
---
-:refpage: vkCmdResolveImage2KHR
-
-To resolve a multisample image to a non-multisample image, call:
-
-include::{generated}/api/protos/vkCmdResolveImage2KHR.txt[]
-
-  * pname:commandBuffer is the command buffer into which the command will be
-    recorded.
-  * pname:pResolveImageInfo is a pointer to a slink:VkResolveImageInfo2KHR
-    structure describing the resolve parameters.
-
-This command is functionally identical to flink:vkCmdResolveImage, but
-includes extensible sub-structures that include pname:sType and pname:pNext
-parameters, allowing them to be more easily extended.
-
-
-.Valid Usage
-****
-include::{chapters}/commonvalidity/resolve_image_command_buffer_common.txt[]
-****
-
-include::{generated}/validity/protos/vkCmdResolveImage2KHR.txt[]
---
-
-[open,refpage='VkResolveImageInfo2KHR',desc='Structure specifying parameters of resolve image command',type='structs']
---
-:refpage: VkResolveImageInfo2KHR
-
-The sname:VkResolveImageInfo2KHR structure is defined as:
-
-include::{generated}/api/structs/VkResolveImageInfo2KHR.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:srcImage is the source image.
-  * pname:srcImageLayout is the layout of the source image subresources for
-    the resolve.
-  * pname:dstImage is the destination image.
-  * pname:dstImageLayout is the layout of the destination image subresources
-    for the resolve.
-  * pname:regionCount is the number of regions to resolve.
-  * pname:pRegions is a pointer to an array of slink:VkImageResolve2KHR
-    structures specifying the regions to resolve.
-
-.Valid Usage
-****
-include::{chapters}/commonvalidity/resolve_image_common.txt[]
-****
-
-include::{generated}/validity/structs/VkResolveImageInfo2KHR.txt[]
---
-
-[open,refpage='VkImageResolve2KHR',desc='Structure specifying an image resolve operation',type='structs']
---
-:refpage: VkImageResolve2KHR
-
-The sname:VkImageResolve2KHR structure is defined as:
-
-include::{generated}/api/structs/VkImageResolve2KHR.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:srcSubresource and pname:dstSubresource are
-    slink:VkImageSubresourceLayers structures specifying the image
-    subresources of the images used for the source and destination image
-    data, respectively.
-    Resolve of depth/stencil images is not supported.
-  * pname:srcOffset and pname:dstOffset select the initial pname:x, pname:y,
-    and pname:z offsets in texels of the sub-regions of the source and
-    destination image data.
-  * pname:extent is the size in texels of the source image to resolve in
-    pname:width, pname:height and pname:depth.
-
-.Valid Usage
-****
-include::{chapters}/commonvalidity/image_resolve_common.txt[]
-****
-
-include::{generated}/validity/structs/VkImageResolve2KHR.txt[]
---
-
-endif::VK_KHR_copy_commands2[]
diff --git a/registry/vulkan/chapters/debugging.txt b/registry/vulkan/chapters/debugging.txt
deleted file mode 100644
index cfeba6c..0000000
--- a/registry/vulkan/chapters/debugging.txt
+++ /dev/null
@@ -1,234 +0,0 @@
-// Copyright 2015-2021 The Khronos Group Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-= Debugging
-
-To aid developers in tracking down errors in the application's use of
-Vulkan, particularly in combination with an external debugger or profiler,
-_debugging extensions_ may be available.
-
-[open,refpage='VkObjectType',desc='Specify an enumeration to track object handle types',type='enums']
---
-The elink:VkObjectType enumeration defines values, each of which corresponds
-to a specific Vulkan handle type.
-These values can: be used to associate debug information with a particular
-type of object through one or more extensions.
-
-include::{generated}/api/enums/VkObjectType.txt[]
-
-[[debugging-object-types]]
-.`VkObjectType` and Vulkan Handle Relationship
-[width="80%",cols="<35,<23",options="header"]
-|====
-| elink:VkObjectType                         | Vulkan Handle Type
-| ename:VK_OBJECT_TYPE_UNKNOWN               | Unknown/Undefined Handle
-| ename:VK_OBJECT_TYPE_INSTANCE              | slink:VkInstance
-| ename:VK_OBJECT_TYPE_PHYSICAL_DEVICE       | slink:VkPhysicalDevice
-| ename:VK_OBJECT_TYPE_DEVICE                | slink:VkDevice
-| ename:VK_OBJECT_TYPE_QUEUE                 | slink:VkQueue
-| ename:VK_OBJECT_TYPE_SEMAPHORE             | slink:VkSemaphore
-| ename:VK_OBJECT_TYPE_COMMAND_BUFFER        | slink:VkCommandBuffer
-| ename:VK_OBJECT_TYPE_FENCE                 | slink:VkFence
-| ename:VK_OBJECT_TYPE_DEVICE_MEMORY         | slink:VkDeviceMemory
-| ename:VK_OBJECT_TYPE_BUFFER                | slink:VkBuffer
-| ename:VK_OBJECT_TYPE_IMAGE                 | slink:VkImage
-| ename:VK_OBJECT_TYPE_EVENT                 | slink:VkEvent
-| ename:VK_OBJECT_TYPE_QUERY_POOL            | slink:VkQueryPool
-| ename:VK_OBJECT_TYPE_BUFFER_VIEW           | slink:VkBufferView
-| ename:VK_OBJECT_TYPE_IMAGE_VIEW            | slink:VkImageView
-| ename:VK_OBJECT_TYPE_SHADER_MODULE         | slink:VkShaderModule
-| ename:VK_OBJECT_TYPE_PIPELINE_CACHE        | slink:VkPipelineCache
-| ename:VK_OBJECT_TYPE_PIPELINE_LAYOUT       | slink:VkPipelineLayout
-| ename:VK_OBJECT_TYPE_RENDER_PASS           | slink:VkRenderPass
-| ename:VK_OBJECT_TYPE_PIPELINE              | slink:VkPipeline
-| ename:VK_OBJECT_TYPE_DESCRIPTOR_SET_LAYOUT | slink:VkDescriptorSetLayout
-| ename:VK_OBJECT_TYPE_SAMPLER               | slink:VkSampler
-| ename:VK_OBJECT_TYPE_DESCRIPTOR_POOL       | slink:VkDescriptorPool
-| ename:VK_OBJECT_TYPE_DESCRIPTOR_SET        | slink:VkDescriptorSet
-| ename:VK_OBJECT_TYPE_FRAMEBUFFER           | slink:VkFramebuffer
-| ename:VK_OBJECT_TYPE_COMMAND_POOL          | slink:VkCommandPool
-ifdef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
-| ename:VK_OBJECT_TYPE_SAMPLER_YCBCR_CONVERSION | slink:VkSamplerYcbcrConversion
-endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
-ifdef::VK_VERSION_1_1,VK_KHR_descriptor_update_template[]
-| ename:VK_OBJECT_TYPE_DESCRIPTOR_UPDATE_TEMPLATE | slink:VkDescriptorUpdateTemplate
-endif::VK_VERSION_1_1,VK_KHR_descriptor_update_template[]
-ifdef::VK_KHR_surface[]
-| ename:VK_OBJECT_TYPE_SURFACE_KHR           | slink:VkSurfaceKHR
-endif::VK_KHR_surface[]
-ifdef::VK_KHR_swapchain[]
-| ename:VK_OBJECT_TYPE_SWAPCHAIN_KHR         | slink:VkSwapchainKHR
-endif::VK_KHR_swapchain[]
-ifdef::VK_KHR_display[]
-| ename:VK_OBJECT_TYPE_DISPLAY_KHR           | slink:VkDisplayKHR
-| ename:VK_OBJECT_TYPE_DISPLAY_MODE_KHR      | slink:VkDisplayModeKHR
-endif::VK_KHR_display[]
-ifdef::VK_EXT_debug_report[]
-| ename:VK_OBJECT_TYPE_DEBUG_REPORT_CALLBACK_EXT | slink:VkDebugReportCallbackEXT
-endif::VK_EXT_debug_report[]
-ifdef::VK_NV_device_generated_commands[]
-| ename:VK_OBJECT_TYPE_INDIRECT_COMMANDS_LAYOUT_NV | slink:VkIndirectCommandsLayoutNV
-endif::VK_NV_device_generated_commands[]
-ifdef::VK_EXT_debug_utils[]
-| ename:VK_OBJECT_TYPE_DEBUG_UTILS_MESSENGER_EXT | slink:VkDebugUtilsMessengerEXT
-endif::VK_EXT_debug_utils[]
-ifdef::VK_EXT_validation_cache[]
-| ename:VK_OBJECT_TYPE_VALIDATION_CACHE_EXT | slink:VkValidationCacheEXT
-endif::VK_EXT_validation_cache[]
-ifdef::VK_NV_ray_tracing[]
-| ename:VK_OBJECT_TYPE_ACCELERATION_STRUCTURE_NV | slink:VkAccelerationStructureNV
-endif::VK_NV_ray_tracing[]
-ifdef::VK_KHR_acceleration_structure[]
-| ename:VK_OBJECT_TYPE_ACCELERATION_STRUCTURE_KHR | slink:VkAccelerationStructureKHR
-endif::VK_KHR_acceleration_structure[]
-ifdef::VK_INTEL_performance_query[]
-| ename:VK_OBJECT_TYPE_PERFORMANCE_CONFIGURATION_INTEL | slink:VkPerformanceConfigurationINTEL
-endif::VK_INTEL_performance_query[]
-ifdef::VK_KHR_deferred_host_operations[]
-| ename:VK_OBJECT_TYPE_DEFERRED_OPERATION_KHR | slink:VkDeferredOperationKHR
-endif::VK_KHR_deferred_host_operations[]
-ifdef::VK_EXT_private_data[]
-| ename:VK_OBJECT_TYPE_PRIVATE_DATA_SLOT_EXT | slink:VkPrivateDataSlotEXT
-endif::VK_EXT_private_data[]
-|====
---
-
-If this Specification was generated with any such extensions included, they
-will be described in the remainder of this chapter.
-
-ifdef::VK_EXT_debug_utils[]
-include::VK_EXT_debug_utils.txt[]
-endif::VK_EXT_debug_utils[]
-
-ifdef::VK_EXT_debug_marker[]
-include::VK_EXT_debug_marker.txt[]
-endif::VK_EXT_debug_marker[]
-
-ifdef::VK_EXT_debug_report[]
-include::VK_EXT_debug_report.txt[]
-endif::VK_EXT_debug_report[]
-
-ifdef::VK_NV_device_diagnostic_checkpoints[]
-include::VK_NV_device_diagnostic_checkpoints/device_diagnostic_checkpoints.txt[]
-endif::VK_NV_device_diagnostic_checkpoints[]
-
-
-ifdef::VK_EXT_tooling_info[]
-[[debugging-tooling-info]]
-== Active Tooling Information
-
-[open,refpage='vkGetPhysicalDeviceToolPropertiesEXT',desc='Reports properties of tools active on the specified physical device',type='protos']
---
-Information about tools providing debugging, profiling, or similar services,
-active for a given physical device, can be obtained by calling:
-
-include::{generated}/api/protos/vkGetPhysicalDeviceToolPropertiesEXT.txt[]
-
-  * pname:physicalDevice is the handle to the physical device to query for
-    active tools.
-  * pname:pToolCount is a pointer to an integer describing the number of
-    tools active on pname:physicalDevice.
-  * pname:pToolProperties is either `NULL` or a pointer to an array of
-    slink:VkPhysicalDeviceToolPropertiesEXT structures.
-
-If pname:pToolProperties is `NULL`, then the number of tools currently
-active on pname:physicalDevice is returned in pname:pToolCount.
-Otherwise, pname:pToolCount must: point to a variable set by the user to the
-number of elements in the pname:pToolProperties array, and on return the
-variable is overwritten with the number of structures actually written to
-pname:pToolProperties.
-If pname:pToolCount is less than the number of currently active tools, at
-most pname:pToolCount structures will be written.
-
-The count and properties of active tools may: change in response to events
-outside the scope of the specification.
-An application should: assume these properties might change at any given
-time.
-
-include::{generated}/validity/protos/vkGetPhysicalDeviceToolPropertiesEXT.txt[]
---
-
-[open,refpage='VkPhysicalDeviceToolPropertiesEXT',desc='Structure providing information about an active tool',type='structs']
---
-The slink:VkPhysicalDeviceToolPropertiesEXT structure is defined as:
-
-include::{generated}/api/structs/VkPhysicalDeviceToolPropertiesEXT.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:name is a null-terminated UTF-8 string containing the name of the
-    tool.
-  * pname:version is a null-terminated UTF-8 string containing the version
-    of the tool.
-  * pname:purposes is a bitmask of elink:VkToolPurposeFlagBitsEXT which is
-    populated with purposes supported by the tool.
-  * pname:description is a null-terminated UTF-8 string containing a
-    description of the tool.
-  * pname:layer is a null-terminated UTF-8 string that contains the name of
-    the layer implementing the tool, if the tool is implemented in a layer -
-    otherwise it may: be an empty string.
-
-include::{generated}/validity/structs/VkPhysicalDeviceToolPropertiesEXT.txt[]
---
-
-[open,refpage='VkToolPurposeFlagBitsEXT',desc='Bitmask specifying the purposes of an active tool',type='enums']
---
-Bits which can: be set in slink:VkDeviceQueueCreateInfo::pname:purposes
-specifying the purposes of an active tool are:
-
-include::{generated}/api/enums/VkToolPurposeFlagBitsEXT.txt[]
-
-  * ename:VK_TOOL_PURPOSE_VALIDATION_BIT_EXT specifies that the tool
-    provides validation of API usage.
-  * ename:VK_TOOL_PURPOSE_PROFILING_BIT_EXT specifies that the tool provides
-    profiling of API usage.
-  * ename:VK_TOOL_PURPOSE_TRACING_BIT_EXT specifies that the tool is
-    capturing data about the application's API usage, including anything
-    from simple logging to capturing data for later replay.
-  * ename:VK_TOOL_PURPOSE_ADDITIONAL_FEATURES_BIT_EXT specifies that the
-    tool provides additional API features/extensions on top of the
-    underlying implementation.
-  * ename:VK_TOOL_PURPOSE_MODIFYING_FEATURES_BIT_EXT specifies that the tool
-    modifies the API features/limits/extensions presented to the
-    application.
-ifdef::VK_EXT_debug_report,VK_EXT_debug_utils[]
-  * ename:VK_TOOL_PURPOSE_DEBUG_REPORTING_BIT_EXT specifies that the tool
-    reports additional information to the application via callbacks
-    specified by
-ifdef::VK_EXT_debug_report[]
-    flink:vkCreateDebugReportCallbackEXT
-endif::VK_EXT_debug_report[]
-ifdef::VK_EXT_debug_report+VK_EXT_debug_utils[]
-    or
-endif::VK_EXT_debug_report+VK_EXT_debug_utils[]
-ifdef::VK_EXT_debug_utils[]
-    flink:vkCreateDebugUtilsMessengerEXT
-endif::VK_EXT_debug_utils[]
-endif::VK_EXT_debug_report,VK_EXT_debug_utils[]
-ifdef::VK_EXT_debug_marker,VK_EXT_debug_utils[]
-  * ename:VK_TOOL_PURPOSE_DEBUG_MARKERS_BIT_EXT specifies that the tool
-    consumes
-ifdef::VK_EXT_debug_marker[]
-    <<debugging-debug-markers,debug markers>>
-endif::VK_EXT_debug_marker[]
-ifdef::VK_EXT_debug_marker+VK_EXT_debug_utils[]
-    or
-endif::VK_EXT_debug_marker+VK_EXT_debug_utils[]
-ifdef::VK_EXT_debug_utils[]
-    <<debugging-object-debug-annotation,object debug annotation>>,
-    <<debugging-queue-labels, queue labels>>, or
-    <<debugging-command-buffer-labels, command buffer labels>>
-endif::VK_EXT_debug_utils[]
-endif::VK_EXT_debug_marker,VK_EXT_debug_utils[]
---
-
-[open,refpage='VkToolPurposeFlagsEXT',desc='Bitmask of VkToolPurposeFlagBitsEXT',type='flags']
---
-include::{generated}/api/flags/VkToolPurposeFlagsEXT.txt[]
-
-tlink:VkToolPurposeFlagsEXT is a bitmask type for setting a mask of zero or
-more elink:VkToolPurposeFlagBitsEXT.
---
-endif::VK_EXT_tooling_info[]
diff --git a/registry/vulkan/chapters/descriptorsets.txt b/registry/vulkan/chapters/descriptorsets.txt
deleted file mode 100644
index e47d128..0000000
--- a/registry/vulkan/chapters/descriptorsets.txt
+++ /dev/null
@@ -1,4835 +0,0 @@
-// Copyright 2015-2021 The Khronos Group, Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-[[descriptorsets]]
-= Resource Descriptors
-
-A _descriptor_ is an opaque data structure representing a shader resource
-such as a buffer, buffer view, image view, sampler, or combined image
-sampler.
-Descriptors are organised into _descriptor sets_, which are bound during
-command recording for use in subsequent drawing commands.
-The arrangement of content in each descriptor set is determined by a
-_descriptor set layout_, which determines what descriptors can be stored
-within it.
-The sequence of descriptor set layouts that can: be used by a pipeline is
-specified in a _pipeline layout_.
-Each pipeline object can: use up to pname:maxBoundDescriptorSets (see
-<<limits, Limits>>) descriptor sets.
-
-Shaders access resources via variables decorated with a descriptor set and
-binding number that link them to a descriptor in a descriptor set.
-The shader interface mapping to bound descriptor sets is described in the
-<<interfaces-resources, Shader Resource Interface>> section.
-
-ifdef::VK_VERSION_1_2,VK_EXT_buffer_device_address,VK_KHR_buffer_device_address[]
-Shaders can: also access buffers without going through descriptors by using
-<<descriptorsets-physical-storage-buffer,Physical Storage Buffer Access>> to
-access them through 64-bit addresses.
-endif::VK_VERSION_1_2,VK_EXT_buffer_device_address,VK_KHR_buffer_device_address[]
-
-
-[[descriptorsets-types]]
-== Descriptor Types
-
-There are a number of different types of descriptor supported by Vulkan,
-corresponding to different resources or usage.
-The following sections describe the API definitions of each descriptor type.
-The mapping of each type to SPIR-V is listed in the
-<<interfaces-resources-correspondence, Shader Resource and Descriptor Type
-Correspondence>> and <<interfaces-resources-storage-class-correspondence,
-Shader Resource and Storage Class Correspondence>> tables in the
-<<interfaces, Shader Interfaces>> chapter.
-
-
-[[descriptorsets-storageimage]]
-=== Storage Image
-
-A _storage image_ (ename:VK_DESCRIPTOR_TYPE_STORAGE_IMAGE) is a descriptor
-type associated with an <<resources-images, image resource>> via an
-<<resources-image-views, image view>> that load, store, and atomic
-operations can: be performed on.
-
-Storage image loads are supported in all shader stages for image views whose
-<<resources-image-view-format-features,format features>> contain
-<<formats-properties,ename:VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT>>.
-
-Stores to storage images are supported in compute shaders for image views
-whose <<resources-image-view-format-features,format features>> contain
-<<formats-properties,ename:VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT>>.
-
-Atomic operations on storage images are supported in compute shaders for
-image views whose <<resources-image-view-format-features,format features>>
-contain
-<<formats-properties,ename:VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT>>.
-
-When the <<features-fragmentStoresAndAtomics,
-pname:fragmentStoresAndAtomics>> feature is enabled, stores and atomic
-operations are also supported for storage images in fragment shaders with
-the same set of image formats as supported in compute shaders.
-When the <<features-vertexPipelineStoresAndAtomics,
-pname:vertexPipelineStoresAndAtomics>> feature is enabled, stores and atomic
-operations are also supported in vertex, tessellation, and geometry shaders
-with the same set of image formats as supported in compute shaders.
-
-The image subresources for a storage image must: be in the
-ifdef::VK_KHR_shared_presentable_image[]
-ename:VK_IMAGE_LAYOUT_SHARED_PRESENT_KHR or
-endif::VK_KHR_shared_presentable_image[]
-ename:VK_IMAGE_LAYOUT_GENERAL layout in order to access its data in a
-shader.
-
-
-[[descriptorsets-sampler]]
-=== Sampler
-
-A _sampler descriptor_ (ename:VK_DESCRIPTOR_TYPE_SAMPLER) is a descriptor
-type associated with a <<samplers,sampler>> object, used to control the
-behavior of <<textures,sampling operations>> performed on a
-<<descriptorsets-sampledimage, sampled image>>.
-
-
-[[descriptorsets-sampledimage]]
-=== Sampled Image
-
-A _sampled image_ (ename:VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE) is a descriptor
-type associated with an <<resources-images, image resource>> via an
-<<resources-image-views, image view>> that <<textures,sampling operations>>
-can: be performed on.
-
-Shaders combine a sampled image variable and a sampler variable to perform
-sampling operations.
-
-Sampled images are supported in all shader stages for image views whose
-<<resources-image-view-format-features,format features>> contain
-<<formats-properties,ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT>>.
-
-The image subresources for a sampled image must: be in the
-ifdef::VK_KHR_shared_presentable_image[]
-ename:VK_IMAGE_LAYOUT_SHARED_PRESENT_KHR,
-endif::VK_KHR_shared_presentable_image[]
-ifdef::VK_VERSION_1_1,VK_KHR_maintenance2[]
-ename:VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_OPTIMAL,
-ename:VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_OPTIMAL,
-endif::VK_VERSION_1_1,VK_KHR_maintenance2[]
-ifdef::VK_VERSION_1_2,VK_KHR_separate_depth_stencil_layouts[]
-ename:VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL,
-ename:VK_IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL,
-endif::VK_VERSION_1_2,VK_KHR_separate_depth_stencil_layouts[]
-ename:VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL,
-ename:VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL, or
-ename:VK_IMAGE_LAYOUT_GENERAL layout in order to access its data in a
-shader.
-
-
-[[descriptorsets-combinedimagesampler]]
-=== Combined Image Sampler
-
-A _combined image sampler_ (ename:VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER)
-is a single descriptor type associated with both a <<samplers,sampler>> and
-an <<resources-images,image resource>>, combining both a
-<<descriptorsets-sampler,sampler>> and <<descriptorsets-sampledimage,
-sampled image>> descriptor into a single descriptor.
-
-ifdef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
-If the descriptor refers to a sampler that performs
-ifndef::VK_EXT_fragment_density_map[]
-<<samplers-YCbCr-conversion,{YCbCr} conversion>>,
-endif::VK_EXT_fragment_density_map[]
-ifdef::VK_EXT_fragment_density_map[]
-<<samplers-YCbCr-conversion,{YCbCr} conversion>> or samples a
-<<samplers-subsamplesampler,subsampled image>>,
-endif::VK_EXT_fragment_density_map[]
-the sampler must: only be used to sample the image in the same descriptor.
-Otherwise, the
-endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
-ifndef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
-ifndef::VK_EXT_fragment_density_map[]
-The
-endif::VK_EXT_fragment_density_map[]
-ifdef::VK_EXT_fragment_density_map[]
-If the descriptor refers to a sampler that samples a
-<<samplers-subsamplesampler,subsampled image>>, the sampler must: only be
-used to sample the image in the same descriptor.
-Otherwise, the
-endif::VK_EXT_fragment_density_map[]
-endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
-sampler and image in this type of descriptor can: be used freely with any
-other samplers and images.
-
-The image subresources for a combined image sampler must: be in the
-ifdef::VK_KHR_shared_presentable_image[]
-ename:VK_IMAGE_LAYOUT_SHARED_PRESENT_KHR,
-endif::VK_KHR_shared_presentable_image[]
-ifdef::VK_VERSION_1_1,VK_KHR_maintenance2[]
-ename:VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_OPTIMAL,
-ename:VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_OPTIMAL,
-endif::VK_VERSION_1_1,VK_KHR_maintenance2[]
-ifdef::VK_VERSION_1_2,VK_KHR_separate_depth_stencil_layouts[]
-ename:VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL,
-ename:VK_IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL,
-endif::VK_VERSION_1_2,VK_KHR_separate_depth_stencil_layouts[]
-ename:VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL,
-ename:VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL, or
-ename:VK_IMAGE_LAYOUT_GENERAL layout in order to access its data in a
-shader.
-
-[NOTE]
-.Note
-====
-On some implementations, it may: be more efficient to sample from an image
-using a combination of sampler and sampled image that are stored together in
-the descriptor set in a combined descriptor.
-====
-
-
-[[descriptorsets-uniformtexelbuffer]]
-=== Uniform Texel Buffer
-
-A _uniform texel buffer_ (ename:VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER) is
-a descriptor type associated with a <<resources-buffers,buffer resource>>
-via a <<resources-buffer-views, buffer view>> that <<textures,formatted load
-operations>> can: be performed on.
-
-Uniform texel buffers define a tightly-packed 1-dimensional linear array of
-texels, with texels going through format conversion when read in a shader in
-the same way as they are for an image.
-
-Load operations from uniform texel buffers are supported in all shader
-stages for image formats which report support for the
-<<formats-properties,ename:VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT>>
-feature bit via flink:vkGetPhysicalDeviceFormatProperties in
-slink:VkFormatProperties::pname:bufferFeatures.
-
-
-[[descriptorsets-storagetexelbuffer]]
-=== Storage Texel Buffer
-
-A _storage texel buffer_ (ename:VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER) is
-a descriptor type associated with a <<resources-buffers,buffer resource>>
-via a <<resources-buffer-views, buffer view>> that <<textures,formatted
-load, store, and atomic operations>> can: be performed on.
-
-Storage texel buffers define a tightly-packed 1-dimensional linear array of
-texels, with texels going through format conversion when read in a shader in
-the same way as they are for an image.
-Unlike <<descriptorsets-uniformtexelbuffer,uniform texel buffers>>, these
-buffers can also be written to in the same way as for
-<<descriptorsets-storageimage, storage images>>.
-
-Storage texel buffer loads are supported in all shader stages for texel
-buffer formats which report support for the
-<<formats-properties,ename:VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT>>
-feature bit via flink:vkGetPhysicalDeviceFormatProperties in
-slink:VkFormatProperties::pname:bufferFeatures.
-
-Stores to storage texel buffers are supported in compute shaders for texel
-buffer formats which report support for the
-ename:VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT feature via
-flink:vkGetPhysicalDeviceFormatProperties in
-slink:VkFormatProperties::pname:bufferFeatures.
-
-Atomic operations on storage texel buffers are supported in compute shaders
-for texel buffer formats which report support for the
-<<formats-properties,ename:VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT>>
-feature via flink:vkGetPhysicalDeviceFormatProperties in
-slink:VkFormatProperties::pname:bufferFeatures.
-
-When the <<features-fragmentStoresAndAtomics,
-pname:fragmentStoresAndAtomics>> feature is enabled, stores and atomic
-operations are also supported for storage texel buffers in fragment shaders
-with the same set of texel buffer formats as supported in compute shaders.
-When the <<features-vertexPipelineStoresAndAtomics,
-pname:vertexPipelineStoresAndAtomics>> feature is enabled, stores and atomic
-operations are also supported in vertex, tessellation, and geometry shaders
-with the same set of texel buffer formats as supported in compute shaders.
-
-
-[[descriptorsets-storagebuffer]]
-=== Storage Buffer
-
-A _storage buffer_ (ename:VK_DESCRIPTOR_TYPE_STORAGE_BUFFER) is a descriptor
-type associated with a <<resources-buffers,buffer resource>> directly,
-described in a shader as a structure with various members that load, store,
-and atomic operations can: be performed on.
-
-[NOTE]
-.Note
-====
-Atomic operations can: only be performed on members of certain types as
-defined in the <<spirvenv, SPIR-V environment appendix>>.
-====
-
-
-[[descriptorsets-uniformbuffer]]
-=== Uniform Buffer
-
-A _uniform buffer_ (ename:VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER) is a descriptor
-type associated with a <<resources-buffers,buffer resource>> directly,
-described in a shader as a structure with various members that load
-operations can: be performed on.
-
-
-[[descriptorsets-uniformbufferdynamic]]
-=== Dynamic Uniform Buffer
-
-A _dynamic uniform buffer_ (ename:VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC)
-is almost identical to a <<descriptorsets-uniformbuffer, uniform buffer>>,
-and differs only in how the offset into the buffer is specified.
-The base offset calculated by the slink:VkDescriptorBufferInfo when
-initially <<descriptorsets-updates, updating the descriptor set>> is added
-to a <<descriptorsets-binding-dynamicoffsets, dynamic offset>> when binding
-the descriptor set.
-
-
-[[descriptorsets-storagebufferdynamic]]
-=== Dynamic Storage Buffer
-
-A _dynamic storage buffer_ (ename:VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC)
-is almost identical to a <<descriptorsets-storagebuffer, storage buffer>>,
-and differs only in how the offset into the buffer is specified.
-The base offset calculated by the slink:VkDescriptorBufferInfo when
-initially <<descriptorsets-updates, updating the descriptor set>> is added
-to a <<descriptorsets-binding-dynamicoffsets, dynamic offset>> when binding
-the descriptor set.
-
-
-ifdef::VK_EXT_inline_uniform_block[]
-
-[[descriptorsets-inlineuniformblock]]
-=== Inline Uniform Block
-
-An _inline uniform block_
-(ename:VK_DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK_EXT) is almost identical to a
-<<descriptorsets-uniformbuffer, uniform buffer>>, and differs only in taking
-its storage directly from the encompassing descriptor set instead of being
-backed by buffer memory.
-It is typically used to access a small set of constant data that does not
-require the additional flexibility provided by the indirection enabled when
-using a uniform buffer where the descriptor and the referenced buffer memory
-are decoupled.
-Compared to push constants, they allow reusing the same set of constant data
-across multiple disjoint sets of drawing and dispatching commands.
-
-Inline uniform block descriptors cannot: be aggregated into arrays.
-Instead, the array size specified for an inline uniform block descriptor
-binding specifies the binding's capacity in bytes.
-
-endif::VK_EXT_inline_uniform_block[]
-
-
-[[descriptorsets-inputattachment]]
-=== Input Attachment
-
-An _input attachment_ (ename:VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT) is a
-descriptor type associated with an <<resources-images, image resource>> via
-an <<resources-image-views, image view>> that can: be used for
-<<synchronization-framebuffer-regions,framebuffer local>> load operations in
-fragment shaders.
-
-All image formats that are supported for color attachments
-(ename:VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT) or depth/stencil attachments
-(ename:VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT) for a given image
-tiling mode are also supported for input attachments.
-
-The image subresources for an input attachment must: be in a
-<<attachment-type-imagelayout, valid image layout>> in order to access its
-data in a shader.
-
-ifdef::VK_NV_ray_tracing,VK_KHR_acceleration_structure[]
-[[descriptorsets-accelerationstructure]]
-=== Acceleration Structure
-
-An _acceleration structure_ (
-ifdef::VK_KHR_acceleration_structure[ename:VK_DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_KHR]
-ifdef::VK_KHR_acceleration_structure+VK_NV_ray_tracing[or]
-ifdef::VK_NV_ray_tracing[ename:VK_DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_NV]
-) is a descriptor type that is used to retrieve scene geometry from within
-shaders that are used for ray traversal.
-Shaders have read-only access to the memory.
-endif::VK_NV_ray_tracing,VK_KHR_acceleration_structure[]
-
-ifdef::VK_VALVE_mutable_descriptor_type[]
-[[descriptorsets-mutable]]
-=== Mutable
-
-A descriptor of _mutable_ (ename:VK_DESCRIPTOR_TYPE_MUTABLE_VALVE) type
-indicates that this descriptor can: mutate to any of the descriptor types
-given in the
-slink:VkMutableDescriptorTypeCreateInfoVALVE::pname:pDescriptorTypes list of
-descriptor types in the pname:pNext chain of
-slink:VkDescriptorSetLayoutCreateInfo for this binding.
-At any point, each individual descriptor of mutable type has an active
-descriptor type.
-The active descriptor type can: be any one of the declared types in
-pname:pDescriptorTypes.
-Additionally, a mutable descriptor's active descriptor type can: be of the
-ename:VK_DESCRIPTOR_TYPE_MUTABLE_VALVE type, which is the initial active
-descriptor type.
-The active descriptor type can: change when the descriptor is updated.
-When a descriptor is consumed by binding a descriptor set, the active
-descriptor type is considered, not ename:VK_DESCRIPTOR_TYPE_MUTABLE_VALVE.
-
-An active descriptor type of ename:VK_DESCRIPTOR_TYPE_MUTABLE_VALVE is
-considered an undefined: descriptor.
-If a descriptor is consumed where the active descriptor type does not match
-what the shader expects, the descriptor is considered an undefined:
-descriptor.
-
-[NOTE]
-.Note
-====
-To find which descriptor types are supported as
-ename:VK_DESCRIPTOR_TYPE_MUTABLE_VALVE, the application can: use
-flink:vkGetDescriptorSetLayoutSupport with an
-ename:VK_DESCRIPTOR_TYPE_MUTABLE_VALVE binding, with the list of descriptor
-types to query in the
-slink:VkMutableDescriptorTypeCreateInfoVALVE::pname:pDescriptorTypes array
-for that binding.
-====
-
-[NOTE]
-.Note
-====
-The intention of a mutable descriptor type is that implementations allocate
-N bytes per descriptor, where N is determined by the maximum descriptor size
-for a given descriptor binding.
-Implementations are not expected to keep track of the active descriptor
-type, and it should be considered a C-like union type.
-
-A mutable descriptor type is not considered as efficient in terms of
-run-time performance as using a non-mutable descriptor type, and
-applications are not encouraged to use them outside API layering efforts.
-Mutable descriptor types can be more efficient if the alternative is using
-many different descriptors to emulate mutable descriptor types.
-====
-
-endif::VK_VALVE_mutable_descriptor_type[]
-
-[[descriptorsets-sets]]
-== Descriptor Sets
-
-Descriptors are grouped together into descriptor set objects.
-A descriptor set object is an opaque object containing storage for a set of
-descriptors, where the types and number of descriptors is defined by a
-descriptor set layout.
-The layout object may: be used to define the association of each descriptor
-binding with memory or other implementation resources.
-The layout is used both for determining the resources that need to be
-associated with the descriptor set, and determining the interface between
-shader stages and shader resources.
-
-
-[[descriptorsets-setlayout]]
-=== Descriptor Set Layout
-
-[open,refpage='VkDescriptorSetLayout',desc='Opaque handle to a descriptor set layout object',type='handles']
---
-A descriptor set layout object is defined by an array of zero or more
-descriptor bindings.
-Each individual descriptor binding is specified by a descriptor type, a
-count (array size) of the number of descriptors in the binding, a set of
-shader stages that can: access the binding, and (if using immutable
-samplers) an array of sampler descriptors.
-
-Descriptor set layout objects are represented by sname:VkDescriptorSetLayout
-handles:
-
-include::{generated}/api/handles/VkDescriptorSetLayout.txt[]
---
-
-[open,refpage='vkCreateDescriptorSetLayout',desc='Create a new descriptor set layout',type='protos']
---
-To create descriptor set layout objects, call:
-
-include::{generated}/api/protos/vkCreateDescriptorSetLayout.txt[]
-
-  * pname:device is the logical device that creates the descriptor set
-    layout.
-  * pname:pCreateInfo is a pointer to a
-    slink:VkDescriptorSetLayoutCreateInfo structure specifying the state of
-    the descriptor set layout object.
-  * pname:pAllocator controls host memory allocation as described in the
-    <<memory-allocation, Memory Allocation>> chapter.
-  * pname:pSetLayout is a pointer to a slink:VkDescriptorSetLayout handle in
-    which the resulting descriptor set layout object is returned.
-
-include::{generated}/validity/protos/vkCreateDescriptorSetLayout.txt[]
---
-
-[open,refpage='VkDescriptorSetLayoutCreateInfo',desc='Structure specifying parameters of a newly created descriptor set layout',type='structs']
---
-Information about the descriptor set layout is passed in a
-sname:VkDescriptorSetLayoutCreateInfo structure:
-
-include::{generated}/api/structs/VkDescriptorSetLayoutCreateInfo.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:flags is a bitmask
-ifdef::VK_KHR_push_descriptor[]
-    of elink:VkDescriptorSetLayoutCreateFlagBits
-endif::VK_KHR_push_descriptor[]
-    specifying options for descriptor set layout creation.
-  * pname:bindingCount is the number of elements in pname:pBindings.
-  * pname:pBindings is a pointer to an array of
-    slink:VkDescriptorSetLayoutBinding structures.
-
-.Valid Usage
-****
-  * [[VUID-VkDescriptorSetLayoutCreateInfo-binding-00279]]
-    The slink:VkDescriptorSetLayoutBinding::pname:binding members of the
-    elements of the pname:pBindings array must: each have different values
-ifdef::VK_KHR_push_descriptor[]
-  * [[VUID-VkDescriptorSetLayoutCreateInfo-flags-00280]]
-    If pname:flags contains
-    ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_PUSH_DESCRIPTOR_BIT_KHR, then all
-    elements of pname:pBindings must: not have a pname:descriptorType of
-    ename:VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC or
-    ename:VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC
-ifdef::VK_EXT_inline_uniform_block[]
-  * [[VUID-VkDescriptorSetLayoutCreateInfo-flags-02208]]
-    If pname:flags contains
-    ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_PUSH_DESCRIPTOR_BIT_KHR, then all
-    elements of pname:pBindings must: not have a pname:descriptorType of
-    ename:VK_DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK_EXT
-endif::VK_EXT_inline_uniform_block[]
-  * [[VUID-VkDescriptorSetLayoutCreateInfo-flags-00281]]
-    If pname:flags contains
-    ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_PUSH_DESCRIPTOR_BIT_KHR, then the
-    total number of elements of all bindings must: be less than or equal to
-    slink:VkPhysicalDevicePushDescriptorPropertiesKHR::pname:maxPushDescriptors
-ifdef::VK_VALVE_mutable_descriptor_type[]
-  * [[VUID-VkDescriptorSetLayoutCreateInfo-flags-04590]]
-    If pname:flags contains
-    ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_PUSH_DESCRIPTOR_BIT_KHR,
-    pname:flags must: not contain
-    ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_HOST_ONLY_POOL_BIT_VALVE
-  * [[VUID-VkDescriptorSetLayoutCreateInfo-flags-04591]]
-    If pname:flags contains
-    ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_PUSH_DESCRIPTOR_BIT_KHR,
-    pname:pBindings must: not have a pname:descriptorType of
-    ename:VK_DESCRIPTOR_TYPE_MUTABLE_VALVE
-endif::VK_VALVE_mutable_descriptor_type[]
-endif::VK_KHR_push_descriptor[]
-ifdef::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
-  * [[VUID-VkDescriptorSetLayoutCreateInfo-flags-03000]]
-    If any binding has the ename:VK_DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT
-    bit set, pname:flags must: include
-    ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT
-  * [[VUID-VkDescriptorSetLayoutCreateInfo-descriptorType-03001]]
-    If any binding has the ename:VK_DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT
-    bit set, then all bindings must: not have pname:descriptorType of
-    ename:VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC or
-    ename:VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC
-ifdef::VK_VALVE_mutable_descriptor_type[]
-  * [[VUID-VkDescriptorSetLayoutCreateInfo-flags-04592]]
-    If pname:flags contains
-    ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT,
-    pname:flags must: not contain
-    ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_HOST_ONLY_POOL_BIT_VALVE
-endif::VK_VALVE_mutable_descriptor_type[]
-endif::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
-ifdef::VK_VALVE_mutable_descriptor_type[]
-  * [[VUID-VkDescriptorSetLayoutCreateInfo-descriptorType-04593]]
-    If any binding has a pname:descriptorType of
-    ename:VK_DESCRIPTOR_TYPE_MUTABLE_VALVE, then a
-    slink:VkMutableDescriptorTypeCreateInfoVALVE must: be present in the
-    pname:pNext chain
-  * [[VUID-VkDescriptorSetLayoutCreateInfo-descriptorType-04594]]
-    If a binding has a pname:descriptorType value of
-    ename:VK_DESCRIPTOR_TYPE_MUTABLE_VALVE, then sname:pImmutableSamplers
-    must: be `NULL`
-  * [[VUID-VkDescriptorSetLayoutCreateInfo-mutableDescriptorType-04595]]
-    If
-    slink:VkPhysicalDeviceMutableDescriptorTypeFeaturesVALVE::pname:mutableDescriptorType
-    is not enabled, pname:pBindings must: not contain a pname:descriptorType
-    of ename:VK_DESCRIPTOR_TYPE_MUTABLE_VALVE
-  * [[VUID-VkDescriptorSetLayoutCreateInfo-flags-04596]]
-    If pname:flags contains
-    ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_HOST_ONLY_POOL_BIT_VALVE,
-    slink:VkPhysicalDeviceMutableDescriptorTypeFeaturesVALVE::pname:mutableDescriptorType
-    must: be enabled
-endif::VK_VALVE_mutable_descriptor_type[]
-****
-
-include::{generated}/validity/structs/VkDescriptorSetLayoutCreateInfo.txt[]
---
-
-ifdef::VK_VALVE_mutable_descriptor_type[]
-
-[open,refpage='VkMutableDescriptorTypeCreateInfoVALVE',desc='Structure describing the list of possible active descriptor types for mutable type descriptors',type='structs']
---
-Information about the possible descriptor types for mutable descriptor types
-is passed in a sname:VkMutableDescriptorTypeCreateInfoVALVE structure as a
-pname:pNext to a slink:VkDescriptorSetLayoutCreateInfo structure or a
-slink:VkDescriptorPoolCreateInfo structure.
-
-The sname:VkMutableDescriptorTypeCreateInfoVALVE structure is defined as:
-
-include::{generated}/api/structs/VkMutableDescriptorTypeCreateInfoVALVE.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:mutableDescriptorTypeListCount is the number of elements in
-    pname:pMutableDescriptorTypeLists.
-  * pname:pMutableDescriptorTypeLists is a pointer to an array of
-    sname:VkMutableDescriptorTypeListVALVE structures.
-
-If pname:mutableDescriptorTypeListCount is zero or if this structure is not
-included in the pname:pNext chain, the
-slink:VkMutableDescriptorTypeListVALVE for each element is considered to be
-zero or `NULL` for each member.
-Otherwise, the descriptor set layout binding at
-slink:VkDescriptorSetLayoutCreateInfo::pname:pBindings[i] uses the
-descriptor type lists in
-slink:VkMutableDescriptorTypeCreateInfoVALVE::pname:pMutableDescriptorTypeLists[i].
-
-include::{generated}/validity/structs/VkMutableDescriptorTypeCreateInfoVALVE.txt[]
---
-
-[open,refpage='VkMutableDescriptorTypeListVALVE',desc='Structure describing descriptor types that a given descriptor may mutate to',type='structs']
---
-The list of potential descriptor types a given mutable descriptor can:
-mutate to is passed in a sname:VkMutableDescriptorTypeListVALVE structure.
-
-The sname:VkMutableDescriptorTypeListVALVE structure is defined as:
-
-include::{generated}/api/structs/VkMutableDescriptorTypeListVALVE.txt[]
-
-  * pname:descriptorTypeCount is the number of elements in
-    pname:pDescriptorTypes.
-  * pname:pDescriptorTypes is `NULL` or a pointer to an array of
-    pname:descriptorTypeCount elink:VkDescriptorType values which define
-    which descriptor types a given binding may mutate to.
-
-.Valid Usage
-****
-  * [[VUID-VkMutableDescriptorTypeListVALVE-descriptorTypeCount-04597]]
-    pname:descriptorTypeCount must: not be `0` if the corresponding binding
-    is of ename:VK_DESCRIPTOR_TYPE_MUTABLE_VALVE
-  * [[VUID-VkMutableDescriptorTypeListVALVE-pDescriptorTypes-04598]]
-    pname:pDescriptorTypes must: be a valid pointer to an array of
-    pname:descriptorTypeCount valid, unique elink:VkDescriptorType values if
-    the given binding is of ename:VK_DESCRIPTOR_TYPE_MUTABLE_VALVE type
-  * [[VUID-VkMutableDescriptorTypeListVALVE-descriptorTypeCount-04599]]
-    pname:descriptorTypeCount must: be `0` if the corresponding binding is
-    not of ename:VK_DESCRIPTOR_TYPE_MUTABLE_VALVE
-  * [[VUID-VkMutableDescriptorTypeListVALVE-pDescriptorTypes-04600]]
-    pname:pDescriptorTypes must: not contain
-    ename:VK_DESCRIPTOR_TYPE_MUTABLE_VALVE
-  * [[VUID-VkMutableDescriptorTypeListVALVE-pDescriptorTypes-04601]]
-    pname:pDescriptorTypes must: not contain
-    ename:VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC
-  * [[VUID-VkMutableDescriptorTypeListVALVE-pDescriptorTypes-04602]]
-    pname:pDescriptorTypes must: not contain
-    ename:VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC
-ifdef::VK_EXT_inline_uniform_block[]
-  * [[VUID-VkMutableDescriptorTypeListVALVE-pDescriptorTypes-04603]]
-    pname:pDescriptorTypes must: not contain
-    ename:VK_DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK_EXT
-endif::VK_EXT_inline_uniform_block[]
-****
-
-include::{generated}/validity/structs/VkMutableDescriptorTypeListVALVE.txt[]
---
-
-endif::VK_VALVE_mutable_descriptor_type[]
-
-[open,refpage='VkDescriptorSetLayoutCreateFlagBits',desc='Bitmask specifying descriptor set layout properties',type='enums']
---
-Bits which can: be set in slink:VkDescriptorSetLayoutCreateInfo::pname:flags
-to specify options for descriptor set layout are:
-
-include::{generated}/api/enums/VkDescriptorSetLayoutCreateFlagBits.txt[]
-
-ifdef::VK_KHR_push_descriptor[]
-  * ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_PUSH_DESCRIPTOR_BIT_KHR specifies
-    that descriptor sets must: not be allocated using this layout, and
-    descriptors are instead pushed by flink:vkCmdPushDescriptorSetKHR.
-endif::VK_KHR_push_descriptor[]
-ifdef::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
-// Jon - "UpdateAfterBind" is a vague reference, should be more precise /
-// link to the right specification area
-  * ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT
-    specifies that descriptor sets using this layout must: be allocated from
-    a descriptor pool created with the
-    ename:VK_DESCRIPTOR_POOL_CREATE_UPDATE_AFTER_BIND_BIT bit set.
-    Descriptor set layouts created with this bit set have alternate limits
-    for the maximum number of descriptors per-stage and per-pipeline layout.
-    The non-UpdateAfterBind limits only count descriptors in sets created
-    without this flag.
-    The UpdateAfterBind limits count all descriptors, but the limits may: be
-    higher than the non-UpdateAfterBind limits.
-endif::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
-ifdef::VK_VALVE_mutable_descriptor_type[]
-  * ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_HOST_ONLY_POOL_BIT_VALVE specifies
-    that descriptor sets using this layout must: be allocated from a
-    descriptor pool created with the
-    ename:VK_DESCRIPTOR_POOL_CREATE_HOST_ONLY_BIT_VALVE bit set.
-    Descriptor set layouts created with this bit have no expressable limit
-    for maximum number of descriptors per-stage.
-    Host descriptor sets are limited only by available host memory, but may:
-    be limited for implementation specific reasons.
-ifdef::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
-    Implementations may: limit the number of supported descriptors to
-    UpdateAfterBind limits or non-UpdateAfterBind limits, whichever is
-    larger.
-endif::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
-ifndef::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
-    Implementations may: limit the number of supported descriptors to
-    non-UpdateAfterBind limits.
-endif::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
-endif::VK_VALVE_mutable_descriptor_type[]
-
-ifndef::VK_KHR_push_descriptor[]
-[NOTE]
-.Note
-====
-All bits for this type are defined by extensions, and none of those
-extensions are enabled in this build of the specification.
-====
-endif::VK_KHR_push_descriptor[]
---
-
-[open,refpage='VkDescriptorSetLayoutCreateFlags',desc='Bitmask of VkDescriptorSetLayoutCreateFlagBits',type='flags']
---
-include::{generated}/api/flags/VkDescriptorSetLayoutCreateFlags.txt[]
-
-tname:VkDescriptorSetLayoutCreateFlags is a bitmask type for setting a mask
-of zero or more elink:VkDescriptorSetLayoutCreateFlagBits.
---
-
-[open,refpage='VkDescriptorSetLayoutBinding',desc='Structure specifying a descriptor set layout binding',type='structs']
---
-The sname:VkDescriptorSetLayoutBinding structure is defined as:
-
-include::{generated}/api/structs/VkDescriptorSetLayoutBinding.txt[]
-
-  * pname:binding is the binding number of this entry and corresponds to a
-    resource of the same binding number in the shader stages.
-  * pname:descriptorType is a elink:VkDescriptorType specifying which type
-    of resource descriptors are used for this binding.
-  * pname:descriptorCount is the number of descriptors contained in the
-    binding, accessed in a shader as an
-ifndef::VK_EXT_inline_uniform_block[array.]
-ifdef::VK_EXT_inline_uniform_block[]
-    array, except if pname:descriptorType is
-    ename:VK_DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK_EXT in which case
-    pname:descriptorCount is the size in bytes of the inline uniform block.
-endif::VK_EXT_inline_uniform_block[]
-    If pname:descriptorCount is zero this binding entry is reserved and the
-    resource must: not be accessed from any stage via this binding within
-    any pipeline using the set layout.
-  * pname:stageFlags member is a bitmask of elink:VkShaderStageFlagBits
-    specifying which pipeline shader stages can: access a resource for this
-    binding.
-    ename:VK_SHADER_STAGE_ALL is a shorthand specifying that all defined
-    shader stages, including any additional stages defined by extensions,
-    can: access the resource.
-+
-If a shader stage is not included in pname:stageFlags, then a resource must:
-not be accessed from that stage via this binding within any pipeline using
-the set layout.
-Other than input attachments which are limited to the fragment shader, there
-are no limitations on what combinations of stages can: use a descriptor
-binding, and in particular a binding can: be used by both graphics stages
-and the compute stage.
-
-  * pname:pImmutableSamplers affects initialization of samplers.
-    If pname:descriptorType specifies a ename:VK_DESCRIPTOR_TYPE_SAMPLER or
-    ename:VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER type descriptor, then
-    pname:pImmutableSamplers can: be used to initialize a set of _immutable
-    samplers_.
-    Immutable samplers are permanently bound into the set layout and must:
-    not be changed; updating a ename:VK_DESCRIPTOR_TYPE_SAMPLER descriptor
-    with immutable samplers is not allowed and updates to a
-    ename:VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER descriptor with
-    immutable samplers does not modify the samplers (the image views are
-    updated, but the sampler updates are ignored).
-    If pname:pImmutableSamplers is not `NULL`, then it is a pointer to an
-    array of sampler handles that will be copied into the set layout and
-    used for the corresponding binding.
-    Only the sampler handles are copied; the sampler objects must: not be
-    destroyed before the final use of the set layout and any descriptor
-    pools and sets created using it.
-    If pname:pImmutableSamplers is `NULL`, then the sampler slots are
-    dynamic and sampler handles must: be bound into descriptor sets using
-    this layout.
-    If pname:descriptorType is not one of these descriptor types, then
-    pname:pImmutableSamplers is ignored.
-
-The above layout definition allows the descriptor bindings to be specified
-sparsely such that not all binding numbers between 0 and the maximum binding
-number need to be specified in the pname:pBindings array.
-Bindings that are not specified have a pname:descriptorCount and
-pname:stageFlags of zero, and the value of pname:descriptorType is
-undefined:.
-However, all binding numbers between 0 and the maximum binding number in the
-slink:VkDescriptorSetLayoutCreateInfo::pname:pBindings array may: consume
-memory in the descriptor set layout even if not all descriptor bindings are
-used, though it should: not consume additional memory from the descriptor
-pool.
-
-[NOTE]
-.Note
-====
-The maximum binding number specified should: be as compact as possible to
-avoid wasted memory.
-====
-
-.Valid Usage
-****
-  * [[VUID-VkDescriptorSetLayoutBinding-descriptorType-00282]]
-    If pname:descriptorType is ename:VK_DESCRIPTOR_TYPE_SAMPLER or
-    ename:VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, and
-    pname:descriptorCount is not `0` and pname:pImmutableSamplers is not
-    `NULL`, pname:pImmutableSamplers must: be a valid pointer to an array of
-    pname:descriptorCount valid sname:VkSampler handles
-ifdef::VK_EXT_inline_uniform_block[]
-  * [[VUID-VkDescriptorSetLayoutBinding-descriptorType-04604]]
-    If the <<features-inlineUniformBlock,inlineUniformBlock>> feature is not
-    enabled, pname:descriptorType must: not be
-    ename:VK_DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK_EXT
-  * [[VUID-VkDescriptorSetLayoutBinding-descriptorType-02209]]
-    If pname:descriptorType is
-    ename:VK_DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK_EXT then
-    pname:descriptorCount must: be a multiple of `4`
-  * [[VUID-VkDescriptorSetLayoutBinding-descriptorType-02210]]
-    If pname:descriptorType is
-    ename:VK_DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK_EXT then
-    pname:descriptorCount must: be less than or equal to
-    sname:VkPhysicalDeviceInlineUniformBlockPropertiesEXT::pname:maxInlineUniformBlockSize
-endif::VK_EXT_inline_uniform_block[]
-  * [[VUID-VkDescriptorSetLayoutBinding-descriptorCount-00283]]
-    If pname:descriptorCount is not `0`, pname:stageFlags must: be a valid
-    combination of elink:VkShaderStageFlagBits values
-  * [[VUID-VkDescriptorSetLayoutBinding-descriptorType-01510]]
-    If pname:descriptorType is ename:VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT and
-    pname:descriptorCount is not `0`, then pname:stageFlags must: be `0` or
-    ename:VK_SHADER_STAGE_FRAGMENT_BIT
-ifdef::VK_EXT_custom_border_color[]
-  * [[VUID-VkDescriptorSetLayoutBinding-pImmutableSamplers-04009]]
-    The sampler objects indicated by pname:pImmutableSamplers must: not have
-    a pname:borderColor with one of the values
-    ename:VK_BORDER_COLOR_FLOAT_CUSTOM_EXT or
-    ename:VK_BORDER_COLOR_INT_CUSTOM_EXT
-endif::VK_EXT_custom_border_color[]
-ifdef::VK_VALVE_mutable_descriptor_type[]
-  * [[VUID-VkDescriptorSetLayoutBinding-descriptorType-04605]]
-    If pname:descriptorType is ename:VK_DESCRIPTOR_TYPE_MUTABLE_VALVE, then
-    sname:pImmutableSamplers must: be `NULL`
-endif::VK_VALVE_mutable_descriptor_type[]
-****
-
-include::{generated}/validity/structs/VkDescriptorSetLayoutBinding.txt[]
---
-
-ifdef::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
-[open,refpage='VkDescriptorSetLayoutBindingFlagsCreateInfo',desc='Structure specifying creation flags for descriptor set layout bindings',type='structs',alias='VkDescriptorSetLayoutBindingFlagsCreateInfoEXT']
---
-If the pname:pNext chain of a slink:VkDescriptorSetLayoutCreateInfo
-structure includes a slink:VkDescriptorSetLayoutBindingFlagsCreateInfo
-structure, then that structure includes an array of flags, one for each
-descriptor set layout binding.
-
-The slink:VkDescriptorSetLayoutBindingFlagsCreateInfo structure is defined
-as:
-
-include::{generated}/api/structs/VkDescriptorSetLayoutBindingFlagsCreateInfo.txt[]
-
-ifdef::VK_EXT_descriptor_indexing[]
-or the equivalent
-
-include::{generated}/api/structs/VkDescriptorSetLayoutBindingFlagsCreateInfoEXT.txt[]
-endif::VK_EXT_descriptor_indexing[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:bindingCount is zero or the number of elements in
-    pname:pBindingFlags.
-  * pname:pBindingFlags is a pointer to an array of
-    tlink:VkDescriptorBindingFlags bitfields, one for each descriptor set
-    layout binding.
-
-If pname:bindingCount is zero or if this structure is not included in the
-pname:pNext chain, the tlink:VkDescriptorBindingFlags for each descriptor
-set layout binding is considered to be zero.
-Otherwise, the descriptor set layout binding at
-slink:VkDescriptorSetLayoutCreateInfo::pname:pBindings[i] uses the flags in
-pname:pBindingFlags[i].
-
-.Valid Usage
-****
-  * [[VUID-VkDescriptorSetLayoutBindingFlagsCreateInfo-bindingCount-03002]]
-    If pname:bindingCount is not zero, pname:bindingCount must: equal
-    slink:VkDescriptorSetLayoutCreateInfo::pname:bindingCount
-ifdef::VK_KHR_push_descriptor[]
-  * [[VUID-VkDescriptorSetLayoutBindingFlagsCreateInfo-flags-03003]]
-    If slink:VkDescriptorSetLayoutCreateInfo::pname:flags includes
-    ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_PUSH_DESCRIPTOR_BIT_KHR, then all
-    elements of pname:pBindingFlags must: not include
-    ename:VK_DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT,
-    ename:VK_DESCRIPTOR_BINDING_UPDATE_UNUSED_WHILE_PENDING_BIT, or
-    ename:VK_DESCRIPTOR_BINDING_VARIABLE_DESCRIPTOR_COUNT_BIT
-endif::VK_KHR_push_descriptor[]
-  * [[VUID-VkDescriptorSetLayoutBindingFlagsCreateInfo-pBindingFlags-03004]]
-    If an element of pname:pBindingFlags includes
-    ename:VK_DESCRIPTOR_BINDING_VARIABLE_DESCRIPTOR_COUNT_BIT, then all
-    other elements of slink:VkDescriptorSetLayoutCreateInfo::pname:pBindings
-    must: have a smaller value of pname:binding
-  * [[VUID-VkDescriptorSetLayoutBindingFlagsCreateInfo-descriptorBindingUniformBufferUpdateAfterBind-03005]]
-    If
-    slink:VkPhysicalDeviceDescriptorIndexingFeatures::pname:descriptorBindingUniformBufferUpdateAfterBind
-    is not enabled, all bindings with descriptor type
-    ename:VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER must: not use
-    ename:VK_DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT
-  * [[VUID-VkDescriptorSetLayoutBindingFlagsCreateInfo-descriptorBindingSampledImageUpdateAfterBind-03006]]
-    If
-    slink:VkPhysicalDeviceDescriptorIndexingFeatures::pname:descriptorBindingSampledImageUpdateAfterBind
-    is not enabled, all bindings with descriptor type
-    ename:VK_DESCRIPTOR_TYPE_SAMPLER,
-    ename:VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, or
-    ename:VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE must: not use
-    ename:VK_DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT
-  * [[VUID-VkDescriptorSetLayoutBindingFlagsCreateInfo-descriptorBindingStorageImageUpdateAfterBind-03007]]
-    If
-    slink:VkPhysicalDeviceDescriptorIndexingFeatures::pname:descriptorBindingStorageImageUpdateAfterBind
-    is not enabled, all bindings with descriptor type
-    ename:VK_DESCRIPTOR_TYPE_STORAGE_IMAGE must: not use
-    ename:VK_DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT
-  * [[VUID-VkDescriptorSetLayoutBindingFlagsCreateInfo-descriptorBindingStorageBufferUpdateAfterBind-03008]]
-    If
-    slink:VkPhysicalDeviceDescriptorIndexingFeatures::pname:descriptorBindingStorageBufferUpdateAfterBind
-    is not enabled, all bindings with descriptor type
-    ename:VK_DESCRIPTOR_TYPE_STORAGE_BUFFER must: not use
-    ename:VK_DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT
-  * [[VUID-VkDescriptorSetLayoutBindingFlagsCreateInfo-descriptorBindingUniformTexelBufferUpdateAfterBind-03009]]
-    If
-    slink:VkPhysicalDeviceDescriptorIndexingFeatures::pname:descriptorBindingUniformTexelBufferUpdateAfterBind
-    is not enabled, all bindings with descriptor type
-    ename:VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER must: not use
-    ename:VK_DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT
-  * [[VUID-VkDescriptorSetLayoutBindingFlagsCreateInfo-descriptorBindingStorageTexelBufferUpdateAfterBind-03010]]
-    If
-    slink:VkPhysicalDeviceDescriptorIndexingFeatures::pname:descriptorBindingStorageTexelBufferUpdateAfterBind
-    is not enabled, all bindings with descriptor type
-    ename:VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER must: not use
-    ename:VK_DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT
-ifdef::VK_EXT_inline_uniform_block[]
-  * [[VUID-VkDescriptorSetLayoutBindingFlagsCreateInfo-descriptorBindingInlineUniformBlockUpdateAfterBind-02211]]
-    If
-    slink:VkPhysicalDeviceInlineUniformBlockFeaturesEXT::pname:descriptorBindingInlineUniformBlockUpdateAfterBind
-    is not enabled, all bindings with descriptor type
-    ename:VK_DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK_EXT must: not use
-    ename:VK_DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT
-endif::VK_EXT_inline_uniform_block[]
-ifdef::VK_KHR_acceleration_structure[]
-  * [[VUID-VkDescriptorSetLayoutBindingFlagsCreateInfo-descriptorBindingAccelerationStructureUpdateAfterBind-03570]]
-    If
-    slink:VkPhysicalDeviceAccelerationStructureFeaturesKHR::pname:descriptorBindingAccelerationStructureUpdateAfterBind
-    is not enabled, all bindings with descriptor type
-    ename:VK_DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_KHR or
-    ename:VK_DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_NV must: not use
-    ename:VK_DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT
-endif::VK_KHR_acceleration_structure[]
-  * [[VUID-VkDescriptorSetLayoutBindingFlagsCreateInfo-None-03011]]
-    All bindings with descriptor type
-    ename:VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT,
-    ename:VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC, or
-    ename:VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC must: not use
-    ename:VK_DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT
-  * [[VUID-VkDescriptorSetLayoutBindingFlagsCreateInfo-descriptorBindingUpdateUnusedWhilePending-03012]]
-    If
-    slink:VkPhysicalDeviceDescriptorIndexingFeatures::pname:descriptorBindingUpdateUnusedWhilePending
-    is not enabled, all elements of pname:pBindingFlags must: not include
-    ename:VK_DESCRIPTOR_BINDING_UPDATE_UNUSED_WHILE_PENDING_BIT
-  * [[VUID-VkDescriptorSetLayoutBindingFlagsCreateInfo-descriptorBindingPartiallyBound-03013]]
-    If
-    slink:VkPhysicalDeviceDescriptorIndexingFeatures::pname:descriptorBindingPartiallyBound
-    is not enabled, all elements of pname:pBindingFlags must: not include
-    ename:VK_DESCRIPTOR_BINDING_PARTIALLY_BOUND_BIT
-  * [[VUID-VkDescriptorSetLayoutBindingFlagsCreateInfo-descriptorBindingVariableDescriptorCount-03014]]
-    If
-    slink:VkPhysicalDeviceDescriptorIndexingFeatures::pname:descriptorBindingVariableDescriptorCount
-    is not enabled, all elements of pname:pBindingFlags must: not include
-    ename:VK_DESCRIPTOR_BINDING_VARIABLE_DESCRIPTOR_COUNT_BIT
-  * [[VUID-VkDescriptorSetLayoutBindingFlagsCreateInfo-pBindingFlags-03015]]
-    If an element of pname:pBindingFlags includes
-    ename:VK_DESCRIPTOR_BINDING_VARIABLE_DESCRIPTOR_COUNT_BIT, that
-    element's pname:descriptorType must: not be
-    ename:VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC or
-    ename:VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC
-****
-
-include::{generated}/validity/structs/VkDescriptorSetLayoutBindingFlagsCreateInfo.txt[]
---
-
-[open,refpage='VkDescriptorBindingFlagBits',desc='Bitmask specifying descriptor set layout binding properties',type='enums',alias='VkDescriptorBindingFlagBitsEXT']
---
-Bits which can: be set in each element of
-slink:VkDescriptorSetLayoutBindingFlagsCreateInfo::pname:pBindingFlags to
-specify options for the corresponding descriptor set layout binding are:
-
-include::{generated}/api/enums/VkDescriptorBindingFlagBits.txt[]
-
-ifdef::VK_EXT_descriptor_indexing[]
-or the equivalent
-
-include::{generated}/api/enums/VkDescriptorBindingFlagBitsEXT.txt[]
-endif::VK_EXT_descriptor_indexing[]
-
-  * ename:VK_DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT indicates that if
-    descriptors in this binding are updated between when the descriptor set
-    is bound in a command buffer and when that command buffer is submitted
-    to a queue, then the submission will use the most recently set
-    descriptors for this binding and the updates do not invalidate the
-    command buffer.
-    Descriptor bindings created with this flag are also partially exempt
-    from the external synchronization requirement in
-ifdef::VK_KHR_descriptor_update_template[]
-    flink:vkUpdateDescriptorSetWithTemplateKHR and
-endif::VK_KHR_descriptor_update_template[]
-    flink:vkUpdateDescriptorSets.
-    Multiple descriptors with this flag set can: be updated concurrently in
-    different threads, though the same descriptor must: not be updated
-    concurrently by two threads.
-    Descriptors with this flag set can: be updated concurrently with the set
-    being bound to a command buffer in another thread, but not concurrently
-    with the set being reset or freed.
-  * ename:VK_DESCRIPTOR_BINDING_PARTIALLY_BOUND_BIT indicates that
-    descriptors in this binding that are not _dynamically used_ need not
-    contain valid descriptors at the time the descriptors are consumed.
-    A descriptor is dynamically used if any shader invocation executes an
-    instruction that performs any memory access using the descriptor.
-  * ename:VK_DESCRIPTOR_BINDING_UPDATE_UNUSED_WHILE_PENDING_BIT indicates
-    that descriptors in this binding can: be updated after a command buffer
-    has bound this descriptor set, or while a command buffer that uses this
-    descriptor set is pending execution, as long as the descriptors that are
-    updated are not used by those command buffers.
-    If ename:VK_DESCRIPTOR_BINDING_PARTIALLY_BOUND_BIT is also set, then
-    descriptors can: be updated as long as they are not dynamically used by
-    any shader invocations.
-    If ename:VK_DESCRIPTOR_BINDING_PARTIALLY_BOUND_BIT is not set, then
-    descriptors can: be updated as long as they are not statically used by
-    any shader invocations.
-  * ename:VK_DESCRIPTOR_BINDING_VARIABLE_DESCRIPTOR_COUNT_BIT indicates that
-    this descriptor binding has a variable size that will be specified when
-    a descriptor set is allocated using this layout.
-    The value of pname:descriptorCount is treated as an upper bound on the
-    size of the binding.
-    This must: only be used for the last binding in the descriptor set
-    layout (i.e. the binding with the largest value of pname:binding).
-    For the purposes of counting against limits such as
-    pname:maxDescriptorSet* and pname:maxPerStageDescriptor*, the full value
-    of pname:descriptorCount is
-ifndef::VK_EXT_inline_uniform_block[counted.]
-ifdef::VK_EXT_inline_uniform_block[]
-    counted, except for descriptor bindings with a descriptor type of
-    ename:VK_DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK_EXT where
-    pname:descriptorCount specifies the upper bound on the byte size of the
-    binding, thus it counts against the <<limits-maxInlineUniformBlockSize,
-    pname:maxInlineUniformBlockSize>> limit instead.
-endif::VK_EXT_inline_uniform_block[]
-
-[NOTE]
-.Note
-====
-Note that while ename:VK_DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT and
-ename:VK_DESCRIPTOR_BINDING_UPDATE_UNUSED_WHILE_PENDING_BIT both involve
-updates to descriptor sets after they are bound,
-ename:VK_DESCRIPTOR_BINDING_UPDATE_UNUSED_WHILE_PENDING_BIT is a weaker
-requirement since it is only about descriptors that are not used, whereas
-ename:VK_DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT requires the
-implementation to observe updates to descriptors that are used.
-====
---
-
-[open,refpage='VkDescriptorBindingFlags',desc='Bitmask of VkDescriptorBindingFlagBits',type='flags',alias='VkDescriptorBindingFlagsEXT']
---
-include::{generated}/api/flags/VkDescriptorBindingFlags.txt[]
-
-ifdef::VK_EXT_descriptor_indexing[]
-or the equivalent
-
-include::{generated}/api/flags/VkDescriptorBindingFlagsEXT.txt[]
-endif::VK_EXT_descriptor_indexing[]
-
-tname:VkDescriptorBindingFlags is a bitmask type for setting a mask of zero
-or more elink:VkDescriptorBindingFlagBits.
---
-endif::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
-
-ifdef::VK_VERSION_1_1,VK_KHR_maintenance3[]
-[open,refpage='vkGetDescriptorSetLayoutSupport',desc='Query whether a descriptor set layout can be created',type='protos']
---
-To query information about whether a descriptor set layout can: be created,
-call:
-
-ifdef::VK_VERSION_1_1[]
-include::{generated}/api/protos/vkGetDescriptorSetLayoutSupport.txt[]
-endif::VK_VERSION_1_1[]
-
-ifdef::VK_VERSION_1_1+VK_KHR_maintenance3[or the equivalent command]
-
-ifdef::VK_KHR_maintenance3[]
-include::{generated}/api/protos/vkGetDescriptorSetLayoutSupportKHR.txt[]
-endif::VK_KHR_maintenance3[]
-
-  * pname:device is the logical device that would create the descriptor set
-    layout.
-  * pname:pCreateInfo is a pointer to a
-    slink:VkDescriptorSetLayoutCreateInfo structure specifying the state of
-    the descriptor set layout object.
-  * pname:pSupport is a pointer to a slink:VkDescriptorSetLayoutSupport
-    structure, in which information about support for the descriptor set
-    layout object is returned.
-
-Some implementations have limitations on what fits in a descriptor set which
-are not easily expressible in terms of existing limits like
-pname:maxDescriptorSet*, for example if all descriptor types share a limited
-space in memory but each descriptor is a different size or alignment.
-This command returns information about whether a descriptor set satisfies
-this limit.
-If the descriptor set layout satisfies the
-slink:VkPhysicalDeviceMaintenance3Properties::pname:maxPerSetDescriptors
-limit, this command is guaranteed to return ename:VK_TRUE in
-slink:VkDescriptorSetLayoutSupport::pname:supported.
-If the descriptor set layout exceeds the
-slink:VkPhysicalDeviceMaintenance3Properties::pname:maxPerSetDescriptors
-limit, whether the descriptor set layout is supported is
-implementation-dependent and may: depend on whether the descriptor sizes and
-alignments cause the layout to exceed an internal limit.
-
-This command does not consider other limits such as
-pname:maxPerStageDescriptor*, and so a descriptor set layout that is
-supported according to this command must: still satisfy the pipeline layout
-limits such as pname:maxPerStageDescriptor* in order to be used in a
-pipeline layout.
-
-[NOTE]
-.Note
-====
-This is a sname:VkDevice query rather than sname:VkPhysicalDevice because
-the answer may: depend on enabled features.
-====
-
-include::{generated}/validity/protos/vkGetDescriptorSetLayoutSupport.txt[]
---
-
-[open,refpage='VkDescriptorSetLayoutSupport',desc='Structure returning information about whether a descriptor set layout can be supported',type='structs']
---
-Information about support for the descriptor set layout is returned in a
-sname:VkDescriptorSetLayoutSupport structure:
-
-include::{generated}/api/structs/VkDescriptorSetLayoutSupport.txt[]
-
-ifdef::VK_KHR_maintenance3[]
-or the equivalent
-
-include::{generated}/api/structs/VkDescriptorSetLayoutSupportKHR.txt[]
-endif::VK_KHR_maintenance3[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:supported specifies whether the descriptor set layout can: be
-    created.
-
-pname:supported is set to ename:VK_TRUE if the descriptor set can: be
-created, or else is set to ename:VK_FALSE.
-
-include::{generated}/validity/structs/VkDescriptorSetLayoutSupport.txt[]
---
-endif::VK_VERSION_1_1,VK_KHR_maintenance3[]
-
-ifdef::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
-[open,refpage='VkDescriptorSetVariableDescriptorCountLayoutSupport',desc='Structure returning information about whether a descriptor set layout can be supported',type='structs',alias='VkDescriptorSetVariableDescriptorCountLayoutSupportEXT']
---
-If the pname:pNext chain of a slink:VkDescriptorSetLayoutSupport structure
-includes a sname:VkDescriptorSetVariableDescriptorCountLayoutSupport
-structure, then that structure returns additional information about whether
-the descriptor set layout is supported.
-
-include::{generated}/api/structs/VkDescriptorSetVariableDescriptorCountLayoutSupport.txt[]
-
-ifdef::VK_EXT_descriptor_indexing[]
-or the equivalent
-
-include::{generated}/api/structs/VkDescriptorSetVariableDescriptorCountLayoutSupportEXT.txt[]
-endif::VK_EXT_descriptor_indexing[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:maxVariableDescriptorCount indicates the maximum number of
-    descriptors supported in the highest numbered binding of the layout, if
-    that binding is variable-sized.
-ifdef::VK_EXT_inline_uniform_block[]
-    If the highest numbered binding of the layout has a descriptor type of
-    ename:VK_DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK_EXT then
-    pname:maxVariableDescriptorCount indicates the maximum byte size
-    supported for the binding, if that binding is variable-sized.
-endif::VK_EXT_inline_uniform_block[]
-
-If the slink:VkDescriptorSetLayoutCreateInfo structure specified in
-flink:vkGetDescriptorSetLayoutSupport::pname:pCreateInfo includes a
-variable-sized descriptor, then pname:supported is determined assuming the
-requested size of the variable-sized descriptor, and
-pname:maxVariableDescriptorCount is set to the maximum size of that
-descriptor that can: be successfully created (which is greater than or equal
-to the requested size passed in).
-If the slink:VkDescriptorSetLayoutCreateInfo structure does not include a
-variable-sized descriptor, or if the
-slink:VkPhysicalDeviceDescriptorIndexingFeatures::pname:descriptorBindingVariableDescriptorCount
-feature is not enabled, then pname:maxVariableDescriptorCount is set to
-zero.
-For the purposes of this command, a variable-sized descriptor binding with a
-pname:descriptorCount of zero is treated as if the pname:descriptorCount is
-one, and thus the binding is not ignored and the maximum descriptor count
-will be returned.
-If the layout is not supported, then the value written to
-pname:maxVariableDescriptorCount is undefined:.
-
-include::{generated}/validity/structs/VkDescriptorSetVariableDescriptorCountLayoutSupport.txt[]
---
-endif::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
-
-The following examples show a shader snippet using two descriptor sets, and
-application code that creates corresponding descriptor set layouts.
-
-.GLSL example
-[source,glsl]
----------------------------------------------------
-//
-// binding to a single sampled image descriptor in set 0
-//
-layout (set=0, binding=0) uniform texture2D mySampledImage;
-
-//
-// binding to an array of sampled image descriptors in set 0
-//
-layout (set=0, binding=1) uniform texture2D myArrayOfSampledImages[12];
-
-//
-// binding to a single uniform buffer descriptor in set 1
-//
-layout (set=1, binding=0) uniform myUniformBuffer
-{
-    vec4 myElement[32];
-};
----------------------------------------------------
-
-.SPIR-V example
-[source,spirv]
----------------------------------------------------
-               ...
-          %1 = OpExtInstImport "GLSL.std.450"
-               ...
-               OpName %9 "mySampledImage"
-               OpName %14 "myArrayOfSampledImages"
-               OpName %18 "myUniformBuffer"
-               OpMemberName %18 0 "myElement"
-               OpName %20 ""
-               OpDecorate %9 DescriptorSet 0
-               OpDecorate %9 Binding 0
-               OpDecorate %14 DescriptorSet 0
-               OpDecorate %14 Binding 1
-               OpDecorate %17 ArrayStride 16
-               OpMemberDecorate %18 0 Offset 0
-               OpDecorate %18 Block
-               OpDecorate %20 DescriptorSet 1
-               OpDecorate %20 Binding 0
-          %2 = OpTypeVoid
-          %3 = OpTypeFunction %2
-          %6 = OpTypeFloat 32
-          %7 = OpTypeImage %6 2D 0 0 0 1 Unknown
-          %8 = OpTypePointer UniformConstant %7
-          %9 = OpVariable %8 UniformConstant
-         %10 = OpTypeInt 32 0
-         %11 = OpConstant %10 12
-         %12 = OpTypeArray %7 %11
-         %13 = OpTypePointer UniformConstant %12
-         %14 = OpVariable %13 UniformConstant
-         %15 = OpTypeVector %6 4
-         %16 = OpConstant %10 32
-         %17 = OpTypeArray %15 %16
-         %18 = OpTypeStruct %17
-         %19 = OpTypePointer Uniform %18
-         %20 = OpVariable %19 Uniform
-               ...
----------------------------------------------------
-
-.API example
-[source,c++]
----------------------------------------------------
-VkResult myResult;
-
-const VkDescriptorSetLayoutBinding myDescriptorSetLayoutBinding[] =
-{
-    // binding to a single image descriptor
-    {
-        0,                                      // binding
-        VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE,       // descriptorType
-        1,                                      // descriptorCount
-        VK_SHADER_STAGE_FRAGMENT_BIT,           // stageFlags
-        NULL                                    // pImmutableSamplers
-    },
-
-    // binding to an array of image descriptors
-    {
-        1,                                      // binding
-        VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE,       // descriptorType
-        12,                                     // descriptorCount
-        VK_SHADER_STAGE_FRAGMENT_BIT,           // stageFlags
-        NULL                                    // pImmutableSamplers
-    },
-
-    // binding to a single uniform buffer descriptor
-    {
-        0,                                      // binding
-        VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER,      // descriptorType
-        1,                                      // descriptorCount
-        VK_SHADER_STAGE_FRAGMENT_BIT,           // stageFlags
-        NULL                                    // pImmutableSamplers
-    }
-};
-
-const VkDescriptorSetLayoutCreateInfo myDescriptorSetLayoutCreateInfo[] =
-{
-    // Information for first descriptor set with two descriptor bindings
-    {
-        VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO,    // sType
-        NULL,                                                   // pNext
-        0,                                                      // flags
-        2,                                                      // bindingCount
-        &myDescriptorSetLayoutBinding[0]                        // pBindings
-    },
-
-    // Information for second descriptor set with one descriptor binding
-    {
-        VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO,    // sType
-        NULL,                                                   // pNext
-        0,                                                      // flags
-        1,                                                      // bindingCount
-        &myDescriptorSetLayoutBinding[2]                        // pBindings
-    }
-};
-
-VkDescriptorSetLayout myDescriptorSetLayout[2];
-
-//
-// Create first descriptor set layout
-//
-myResult = vkCreateDescriptorSetLayout(
-    myDevice,
-    &myDescriptorSetLayoutCreateInfo[0],
-    NULL,
-    &myDescriptorSetLayout[0]);
-
-//
-// Create second descriptor set layout
-//
-myResult = vkCreateDescriptorSetLayout(
-    myDevice,
-    &myDescriptorSetLayoutCreateInfo[1],
-    NULL,
-    &myDescriptorSetLayout[1]);
----------------------------------------------------
-
-[open,refpage='vkDestroyDescriptorSetLayout',desc='Destroy a descriptor set layout object',type='protos']
---
-To destroy a descriptor set layout, call:
-
-include::{generated}/api/protos/vkDestroyDescriptorSetLayout.txt[]
-
-  * pname:device is the logical device that destroys the descriptor set
-    layout.
-  * pname:descriptorSetLayout is the descriptor set layout to destroy.
-  * pname:pAllocator controls host memory allocation as described in the
-    <<memory-allocation, Memory Allocation>> chapter.
-
-.Valid Usage
-****
-  * [[VUID-vkDestroyDescriptorSetLayout-descriptorSetLayout-00284]]
-    If sname:VkAllocationCallbacks were provided when
-    pname:descriptorSetLayout was created, a compatible set of callbacks
-    must: be provided here
-  * [[VUID-vkDestroyDescriptorSetLayout-descriptorSetLayout-00285]]
-    If no sname:VkAllocationCallbacks were provided when
-    pname:descriptorSetLayout was created, pname:pAllocator must: be `NULL`
-****
-
-include::{generated}/validity/protos/vkDestroyDescriptorSetLayout.txt[]
---
-
-
-[[descriptorsets-pipelinelayout]]
-=== Pipeline Layouts
-
-[open,refpage='VkPipelineLayout',desc='Opaque handle to a pipeline layout object',type='handles']
---
-Access to descriptor sets from a pipeline is accomplished through a
-_pipeline layout_.
-Zero or more descriptor set layouts and zero or more push constant ranges
-are combined to form a pipeline layout object describing the complete set of
-resources that can: be accessed by a pipeline.
-The pipeline layout represents a sequence of descriptor sets with each
-having a specific layout.
-This sequence of layouts is used to determine the interface between shader
-stages and shader resources.
-Each pipeline is created using a pipeline layout.
-
-Pipeline layout objects are represented by sname:VkPipelineLayout handles:
-
-include::{generated}/api/handles/VkPipelineLayout.txt[]
---
-
-[open,refpage='vkCreatePipelineLayout',desc='Creates a new pipeline layout object',type='protos']
---
-To create a pipeline layout, call:
-
-include::{generated}/api/protos/vkCreatePipelineLayout.txt[]
-
-  * pname:device is the logical device that creates the pipeline layout.
-  * pname:pCreateInfo is a pointer to a slink:VkPipelineLayoutCreateInfo
-    structure specifying the state of the pipeline layout object.
-  * pname:pAllocator controls host memory allocation as described in the
-    <<memory-allocation, Memory Allocation>> chapter.
-  * pname:pPipelineLayout is a pointer to a slink:VkPipelineLayout handle in
-    which the resulting pipeline layout object is returned.
-
-include::{generated}/validity/protos/vkCreatePipelineLayout.txt[]
---
-
-[open,refpage='VkPipelineLayoutCreateInfo',desc='Structure specifying the parameters of a newly created pipeline layout object',type='structs']
---
-The slink:VkPipelineLayoutCreateInfo structure is defined as:
-
-include::{generated}/api/structs/VkPipelineLayoutCreateInfo.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:flags is reserved for future use.
-  * pname:setLayoutCount is the number of descriptor sets included in the
-    pipeline layout.
-  * pname:pSetLayouts is a pointer to an array of
-    sname:VkDescriptorSetLayout objects.
-  * pname:pushConstantRangeCount is the number of push constant ranges
-    included in the pipeline layout.
-  * pname:pPushConstantRanges is a pointer to an array of
-    sname:VkPushConstantRange structures defining a set of push constant
-    ranges for use in a single pipeline layout.
-    In addition to descriptor set layouts, a pipeline layout also describes
-    how many push constants can: be accessed by each stage of the pipeline.
-+
-[NOTE]
-.Note
-====
-Push constants represent a high speed path to modify constant data in
-pipelines that is expected to outperform memory-backed resource updates.
-====
-
-.Valid Usage
-****
-  * [[VUID-VkPipelineLayoutCreateInfo-setLayoutCount-00286]]
-    pname:setLayoutCount must: be less than or equal to
-    sname:VkPhysicalDeviceLimits::pname:maxBoundDescriptorSets
-ifndef::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
-  * [[VUID-VkPipelineLayoutCreateInfo-pSetLayouts-00287]]
-    The total number of descriptors of the type
-    ename:VK_DESCRIPTOR_TYPE_SAMPLER and
-    ename:VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER accessible to any shader
-    stage across all elements of pname:pSetLayouts must: be less than or
-    equal to
-    sname:VkPhysicalDeviceLimits::pname:maxPerStageDescriptorSamplers
-  * [[VUID-VkPipelineLayoutCreateInfo-pSetLayouts-00288]]
-    The total number of descriptors of the type
-    ename:VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER and
-    ename:VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC accessible to any shader
-    stage across all elements of pname:pSetLayouts must: be less than or
-    equal to
-    sname:VkPhysicalDeviceLimits::pname:maxPerStageDescriptorUniformBuffers
-  * [[VUID-VkPipelineLayoutCreateInfo-pSetLayouts-00289]]
-    The total number of descriptors of the type
-    ename:VK_DESCRIPTOR_TYPE_STORAGE_BUFFER and
-    ename:VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC accessible to any shader
-    stage across all elements of pname:pSetLayouts must: be less than or
-    equal to
-    sname:VkPhysicalDeviceLimits::pname:maxPerStageDescriptorStorageBuffers
-  * [[VUID-VkPipelineLayoutCreateInfo-pSetLayouts-00290]]
-    The total number of descriptors of the type
-    ename:VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER,
-    ename:VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE, and
-    ename:VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER accessible to any shader
-    stage across all elements of pname:pSetLayouts must: be less than or
-    equal to
-    sname:VkPhysicalDeviceLimits::pname:maxPerStageDescriptorSampledImages
-  * [[VUID-VkPipelineLayoutCreateInfo-pSetLayouts-00291]]
-    The total number of descriptors of the type
-    ename:VK_DESCRIPTOR_TYPE_STORAGE_IMAGE, and
-    ename:VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER accessible to any shader
-    stage across all elements of pname:pSetLayouts must: be less than or
-    equal to
-    sname:VkPhysicalDeviceLimits::pname:maxPerStageDescriptorStorageImages
-  * [[VUID-VkPipelineLayoutCreateInfo-pSetLayouts-01676]]
-    The total number of descriptors of the type
-    ename:VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT accessible to any given shader
-    stage across all elements of pname:pSetLayouts must: be less than or
-    equal to
-    sname:VkPhysicalDeviceLimits::pname:maxPerStageDescriptorInputAttachments
-ifdef::VK_EXT_inline_uniform_block[]
-  * [[VUID-VkPipelineLayoutCreateInfo-descriptorType-02212]]
-    The total number of bindings with a pname:descriptorType of
-    ename:VK_DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK_EXT accessible to any
-    given shader stage across all elements of pname:pSetLayouts must: be
-    less than or equal to
-    sname:VkPhysicalDeviceInlineUniformBlockPropertiesEXT::pname:maxPerStageDescriptorInlineUniformBlocks
-endif::VK_EXT_inline_uniform_block[]
-  * [[VUID-VkPipelineLayoutCreateInfo-pSetLayouts-01677]]
-    The total number of descriptors of the type
-    ename:VK_DESCRIPTOR_TYPE_SAMPLER and
-    ename:VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER accessible across all
-    shader stages and across all elements of pname:pSetLayouts must: be less
-    than or equal to
-    sname:VkPhysicalDeviceLimits::pname:maxDescriptorSetSamplers
-  * [[VUID-VkPipelineLayoutCreateInfo-pSetLayouts-01678]]
-    The total number of descriptors of the type
-    ename:VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER accessible across all shader
-    stages and across all elements of pname:pSetLayouts must: be less than
-    or equal to
-    sname:VkPhysicalDeviceLimits::pname:maxDescriptorSetUniformBuffers
-  * [[VUID-VkPipelineLayoutCreateInfo-pSetLayouts-01679]]
-    The total number of descriptors of the type
-    ename:VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC accessible across all
-    shader stages and across all elements of pname:pSetLayouts must: be less
-    than or equal to
-    sname:VkPhysicalDeviceLimits::pname:maxDescriptorSetUniformBuffersDynamic
-  * [[VUID-VkPipelineLayoutCreateInfo-pSetLayouts-01680]]
-    The total number of descriptors of the type
-    ename:VK_DESCRIPTOR_TYPE_STORAGE_BUFFER accessible across all shader
-    stages and across all elements of pname:pSetLayouts must: be less than
-    or equal to
-    sname:VkPhysicalDeviceLimits::pname:maxDescriptorSetStorageBuffers
-  * [[VUID-VkPipelineLayoutCreateInfo-pSetLayouts-01681]]
-    The total number of descriptors of the type
-    ename:VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC accessible across all
-    shader stages and across all elements of pname:pSetLayouts must: be less
-    than or equal to
-    sname:VkPhysicalDeviceLimits::pname:maxDescriptorSetStorageBuffersDynamic
-  * [[VUID-VkPipelineLayoutCreateInfo-pSetLayouts-01682]]
-    The total number of descriptors of the type
-    ename:VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER,
-    ename:VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE, and
-    ename:VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER accessible across all
-    shader stages and across all elements of pname:pSetLayouts must: be less
-    than or equal to
-    sname:VkPhysicalDeviceLimits::pname:maxDescriptorSetSampledImages
-  * [[VUID-VkPipelineLayoutCreateInfo-pSetLayouts-01683]]
-    The total number of descriptors of the type
-    ename:VK_DESCRIPTOR_TYPE_STORAGE_IMAGE, and
-    ename:VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER accessible across all
-    shader stages and across all elements of pname:pSetLayouts must: be less
-    than or equal to
-    sname:VkPhysicalDeviceLimits::pname:maxDescriptorSetStorageImages
-  * [[VUID-VkPipelineLayoutCreateInfo-pSetLayouts-01684]]
-    The total number of descriptors of the type
-    ename:VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT accessible across all shader
-    stages and across all elements of pname:pSetLayouts must: be less than
-    or equal to
-    sname:VkPhysicalDeviceLimits::pname:maxDescriptorSetInputAttachments
-ifdef::VK_EXT_inline_uniform_block[]
-  * [[VUID-VkPipelineLayoutCreateInfo-descriptorType-02213]]
-    The total number of bindings with a pname:descriptorType of
-    ename:VK_DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK_EXT accessible across all
-    shader stages and across all elements of pname:pSetLayouts must: be less
-    than or equal to
-    sname:VkPhysicalDeviceInlineUniformBlockPropertiesEXT::pname:maxDescriptorSetInlineUniformBlocks
-endif::VK_EXT_inline_uniform_block[]
-endif::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
-ifdef::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
-  * [[VUID-VkPipelineLayoutCreateInfo-descriptorType-03016]]
-    The total number of descriptors in descriptor set layouts created
-    without the
-    ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT bit set
-    with a pname:descriptorType of ename:VK_DESCRIPTOR_TYPE_SAMPLER and
-    ename:VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER accessible to any given
-    shader stage across all elements of pname:pSetLayouts must: be less than
-    or equal to
-    sname:VkPhysicalDeviceLimits::pname:maxPerStageDescriptorSamplers
-  * [[VUID-VkPipelineLayoutCreateInfo-descriptorType-03017]]
-    The total number of descriptors in descriptor set layouts created
-    without the
-    ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT bit set
-    with a pname:descriptorType of ename:VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER
-    and ename:VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC accessible to any
-    given shader stage across all elements of pname:pSetLayouts must: be
-    less than or equal to
-    sname:VkPhysicalDeviceLimits::pname:maxPerStageDescriptorUniformBuffers
-  * [[VUID-VkPipelineLayoutCreateInfo-descriptorType-03018]]
-    The total number of descriptors in descriptor set layouts created
-    without the
-    ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT bit set
-    with a pname:descriptorType of ename:VK_DESCRIPTOR_TYPE_STORAGE_BUFFER
-    and ename:VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC accessible to any
-    given shader stage across all elements of pname:pSetLayouts must: be
-    less than or equal to
-    sname:VkPhysicalDeviceLimits::pname:maxPerStageDescriptorStorageBuffers
-  * [[VUID-VkPipelineLayoutCreateInfo-descriptorType-03019]]
-    The total number of descriptors in descriptor set layouts created
-    without the
-    ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT bit set
-    with a pname:descriptorType of
-    ename:VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER,
-    ename:VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE, and
-    ename:VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER accessible to any given
-    shader stage across all elements of pname:pSetLayouts must: be less than
-    or equal to
-    sname:VkPhysicalDeviceLimits::pname:maxPerStageDescriptorSampledImages
-  * [[VUID-VkPipelineLayoutCreateInfo-descriptorType-03020]]
-    The total number of descriptors in descriptor set layouts created
-    without the
-    ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT bit set
-    with a pname:descriptorType of ename:VK_DESCRIPTOR_TYPE_STORAGE_IMAGE,
-    and ename:VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER accessible to any
-    given shader stage across all elements of pname:pSetLayouts must: be
-    less than or equal to
-    sname:VkPhysicalDeviceLimits::pname:maxPerStageDescriptorStorageImages
-  * [[VUID-VkPipelineLayoutCreateInfo-descriptorType-03021]]
-    The total number of descriptors in descriptor set layouts created
-    without the
-    ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT bit set
-    with a pname:descriptorType of ename:VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT
-    accessible to any given shader stage across all elements of
-    pname:pSetLayouts must: be less than or equal to
-    sname:VkPhysicalDeviceLimits::pname:maxPerStageDescriptorInputAttachments
-ifdef::VK_EXT_inline_uniform_block[]
-  * [[VUID-VkPipelineLayoutCreateInfo-descriptorType-02214]]
-    The total number of bindings in descriptor set layouts created without
-    the ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT bit
-    set with a pname:descriptorType of
-    ename:VK_DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK_EXT accessible to any
-    given shader stage across all elements of pname:pSetLayouts must: be
-    less than or equal to
-    sname:VkPhysicalDeviceInlineUniformBlockPropertiesEXT::pname:maxPerStageDescriptorInlineUniformBlocks
-endif::VK_EXT_inline_uniform_block[]
-  * [[VUID-VkPipelineLayoutCreateInfo-descriptorType-03022]]
-    The total number of descriptors with a pname:descriptorType of
-    ename:VK_DESCRIPTOR_TYPE_SAMPLER and
-    ename:VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER accessible to any given
-    shader stage across all elements of pname:pSetLayouts must: be less than
-    or equal to
-    sname:VkPhysicalDeviceDescriptorIndexingProperties::pname:maxPerStageDescriptorUpdateAfterBindSamplers
-  * [[VUID-VkPipelineLayoutCreateInfo-descriptorType-03023]]
-    The total number of descriptors with a pname:descriptorType of
-    ename:VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER and
-    ename:VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC accessible to any given
-    shader stage across all elements of pname:pSetLayouts must: be less than
-    or equal to
-    sname:VkPhysicalDeviceDescriptorIndexingProperties::pname:maxPerStageDescriptorUpdateAfterBindUniformBuffers
-  * [[VUID-VkPipelineLayoutCreateInfo-descriptorType-03024]]
-    The total number of descriptors with a pname:descriptorType of
-    ename:VK_DESCRIPTOR_TYPE_STORAGE_BUFFER and
-    ename:VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC accessible to any given
-    shader stage across all elements of pname:pSetLayouts must: be less than
-    or equal to
-    sname:VkPhysicalDeviceDescriptorIndexingProperties::pname:maxPerStageDescriptorUpdateAfterBindStorageBuffers
-  * [[VUID-VkPipelineLayoutCreateInfo-descriptorType-03025]]
-    The total number of descriptors with a pname:descriptorType of
-    ename:VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER,
-    ename:VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE, and
-    ename:VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER accessible to any given
-    shader stage across all elements of pname:pSetLayouts must: be less than
-    or equal to
-    sname:VkPhysicalDeviceDescriptorIndexingProperties::pname:maxPerStageDescriptorUpdateAfterBindSampledImages
-  * [[VUID-VkPipelineLayoutCreateInfo-descriptorType-03026]]
-    The total number of descriptors with a pname:descriptorType of
-    ename:VK_DESCRIPTOR_TYPE_STORAGE_IMAGE, and
-    ename:VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER accessible to any given
-    shader stage across all elements of pname:pSetLayouts must: be less than
-    or equal to
-    sname:VkPhysicalDeviceDescriptorIndexingProperties::pname:maxPerStageDescriptorUpdateAfterBindStorageImages
-  * [[VUID-VkPipelineLayoutCreateInfo-descriptorType-03027]]
-    The total number of descriptors with a pname:descriptorType of
-    ename:VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT accessible to any given shader
-    stage across all elements of pname:pSetLayouts must: be less than or
-    equal to
-    sname:VkPhysicalDeviceDescriptorIndexingProperties::pname:maxPerStageDescriptorUpdateAfterBindInputAttachments
-ifdef::VK_EXT_inline_uniform_block[]
-  * [[VUID-VkPipelineLayoutCreateInfo-descriptorType-02215]]
-    The total number of bindings with a pname:descriptorType of
-    ename:VK_DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK_EXT accessible to any
-    given shader stage across all elements of pname:pSetLayouts must: be
-    less than or equal to
-    sname:VkPhysicalDeviceInlineUniformBlockPropertiesEXT::pname:maxPerStageDescriptorUpdateAfterBindInlineUniformBlocks
-endif::VK_EXT_inline_uniform_block[]
-  * [[VUID-VkPipelineLayoutCreateInfo-descriptorType-03028]]
-    The total number of descriptors in descriptor set layouts created
-    without the
-    ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT bit set
-    with a pname:descriptorType of ename:VK_DESCRIPTOR_TYPE_SAMPLER and
-    ename:VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER accessible across all
-    shader stages and across all elements of pname:pSetLayouts must: be less
-    than or equal to
-    sname:VkPhysicalDeviceLimits::pname:maxDescriptorSetSamplers
-  * [[VUID-VkPipelineLayoutCreateInfo-descriptorType-03029]]
-    The total number of descriptors in descriptor set layouts created
-    without the
-    ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT bit set
-    with a pname:descriptorType of ename:VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER
-    accessible across all shader stages and across all elements of
-    pname:pSetLayouts must: be less than or equal to
-    sname:VkPhysicalDeviceLimits::pname:maxDescriptorSetUniformBuffers
-  * [[VUID-VkPipelineLayoutCreateInfo-descriptorType-03030]]
-    The total number of descriptors in descriptor set layouts created
-    without the
-    ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT bit set
-    with a pname:descriptorType of
-    ename:VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC accessible across all
-    shader stages and across all elements of pname:pSetLayouts must: be less
-    than or equal to
-    sname:VkPhysicalDeviceLimits::pname:maxDescriptorSetUniformBuffersDynamic
-  * [[VUID-VkPipelineLayoutCreateInfo-descriptorType-03031]]
-    The total number of descriptors in descriptor set layouts created
-    without the
-    ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT bit set
-    with a pname:descriptorType of ename:VK_DESCRIPTOR_TYPE_STORAGE_BUFFER
-    accessible across all shader stages and across all elements of
-    pname:pSetLayouts must: be less than or equal to
-    sname:VkPhysicalDeviceLimits::pname:maxDescriptorSetStorageBuffers
-  * [[VUID-VkPipelineLayoutCreateInfo-descriptorType-03032]]
-    The total number of descriptors in descriptor set layouts created
-    without the
-    ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT bit set
-    with a pname:descriptorType of
-    ename:VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC accessible across all
-    shader stages and across all elements of pname:pSetLayouts must: be less
-    than or equal to
-    sname:VkPhysicalDeviceLimits::pname:maxDescriptorSetStorageBuffersDynamic
-  * [[VUID-VkPipelineLayoutCreateInfo-descriptorType-03033]]
-    The total number of descriptors in descriptor set layouts created
-    without the
-    ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT bit set
-    with a pname:descriptorType of
-    ename:VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER,
-    ename:VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE, and
-    ename:VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER accessible across all
-    shader stages and across all elements of pname:pSetLayouts must: be less
-    than or equal to
-    sname:VkPhysicalDeviceLimits::pname:maxDescriptorSetSampledImages
-  * [[VUID-VkPipelineLayoutCreateInfo-descriptorType-03034]]
-    The total number of descriptors in descriptor set layouts created
-    without the
-    ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT bit set
-    with a pname:descriptorType of ename:VK_DESCRIPTOR_TYPE_STORAGE_IMAGE,
-    and ename:VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER accessible across all
-    shader stages and across all elements of pname:pSetLayouts must: be less
-    than or equal to
-    sname:VkPhysicalDeviceLimits::pname:maxDescriptorSetStorageImages
-  * [[VUID-VkPipelineLayoutCreateInfo-descriptorType-03035]]
-    The total number of descriptors in descriptor set layouts created
-    without the
-    ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT bit set
-    with a pname:descriptorType of ename:VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT
-    accessible across all shader stages and across all elements of
-    pname:pSetLayouts must: be less than or equal to
-    sname:VkPhysicalDeviceLimits::pname:maxDescriptorSetInputAttachments
-ifdef::VK_EXT_inline_uniform_block[]
-  * [[VUID-VkPipelineLayoutCreateInfo-descriptorType-02216]]
-    The total number of bindings in descriptor set layouts created without
-    the ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT bit
-    set with a pname:descriptorType of
-    ename:VK_DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK_EXT accessible across all
-    shader stages and across all elements of pname:pSetLayouts must: be less
-    than or equal to
-    sname:VkPhysicalDeviceInlineUniformBlockPropertiesEXT::pname:maxDescriptorSetInlineUniformBlocks
-endif::VK_EXT_inline_uniform_block[]
-  * [[VUID-VkPipelineLayoutCreateInfo-pSetLayouts-03036]]
-    The total number of descriptors of the type
-    ename:VK_DESCRIPTOR_TYPE_SAMPLER and
-    ename:VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER accessible across all
-    shader stages and across all elements of pname:pSetLayouts must: be less
-    than or equal to
-    sname:VkPhysicalDeviceDescriptorIndexingProperties::pname:maxDescriptorSetUpdateAfterBindSamplers
-  * [[VUID-VkPipelineLayoutCreateInfo-pSetLayouts-03037]]
-    The total number of descriptors of the type
-    ename:VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER accessible across all shader
-    stages and across all elements of pname:pSetLayouts must: be less than
-    or equal to
-    sname:VkPhysicalDeviceDescriptorIndexingProperties::pname:maxDescriptorSetUpdateAfterBindUniformBuffers
-  * [[VUID-VkPipelineLayoutCreateInfo-pSetLayouts-03038]]
-    The total number of descriptors of the type
-    ename:VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC accessible across all
-    shader stages and across all elements of pname:pSetLayouts must: be less
-    than or equal to
-    sname:VkPhysicalDeviceDescriptorIndexingProperties::pname:maxDescriptorSetUpdateAfterBindUniformBuffersDynamic
-  * [[VUID-VkPipelineLayoutCreateInfo-pSetLayouts-03039]]
-    The total number of descriptors of the type
-    ename:VK_DESCRIPTOR_TYPE_STORAGE_BUFFER accessible across all shader
-    stages and across all elements of pname:pSetLayouts must: be less than
-    or equal to
-    sname:VkPhysicalDeviceDescriptorIndexingProperties::pname:maxDescriptorSetUpdateAfterBindStorageBuffers
-  * [[VUID-VkPipelineLayoutCreateInfo-pSetLayouts-03040]]
-    The total number of descriptors of the type
-    ename:VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC accessible across all
-    shader stages and across all elements of pname:pSetLayouts must: be less
-    than or equal to
-    sname:VkPhysicalDeviceDescriptorIndexingProperties::pname:maxDescriptorSetUpdateAfterBindStorageBuffersDynamic
-  * [[VUID-VkPipelineLayoutCreateInfo-pSetLayouts-03041]]
-    The total number of descriptors of the type
-    ename:VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER,
-    ename:VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE, and
-    ename:VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER accessible across all
-    shader stages and across all elements of pname:pSetLayouts must: be less
-    than or equal to
-    sname:VkPhysicalDeviceDescriptorIndexingProperties::pname:maxDescriptorSetUpdateAfterBindSampledImages
-  * [[VUID-VkPipelineLayoutCreateInfo-pSetLayouts-03042]]
-    The total number of descriptors of the type
-    ename:VK_DESCRIPTOR_TYPE_STORAGE_IMAGE, and
-    ename:VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER accessible across all
-    shader stages and across all elements of pname:pSetLayouts must: be less
-    than or equal to
-    sname:VkPhysicalDeviceDescriptorIndexingProperties::pname:maxDescriptorSetUpdateAfterBindStorageImages
-  * [[VUID-VkPipelineLayoutCreateInfo-pSetLayouts-03043]]
-    The total number of descriptors of the type
-    ename:VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT accessible across all shader
-    stages and across all elements of pname:pSetLayouts must: be less than
-    or equal to
-    sname:VkPhysicalDeviceDescriptorIndexingProperties::pname:maxDescriptorSetUpdateAfterBindInputAttachments
-ifdef::VK_EXT_inline_uniform_block[]
-  * [[VUID-VkPipelineLayoutCreateInfo-descriptorType-02217]]
-    The total number of bindings with a pname:descriptorType of
-    ename:VK_DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK_EXT accessible across all
-    shader stages and across all elements of pname:pSetLayouts must: be less
-    than or equal to
-    sname:VkPhysicalDeviceInlineUniformBlockPropertiesEXT::pname:maxDescriptorSetUpdateAfterBindInlineUniformBlocks
-endif::VK_EXT_inline_uniform_block[]
-endif::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
-  * [[VUID-VkPipelineLayoutCreateInfo-pPushConstantRanges-00292]]
-    Any two elements of pname:pPushConstantRanges must: not include the same
-    stage in pname:stageFlags
-ifdef::VK_KHR_push_descriptor[]
-  * [[VUID-VkPipelineLayoutCreateInfo-pSetLayouts-00293]]
-    pname:pSetLayouts must: not contain more than one descriptor set layout
-    that was created with
-    ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_PUSH_DESCRIPTOR_BIT_KHR set
-endif::VK_KHR_push_descriptor[]
-ifdef::VK_KHR_acceleration_structure[]
-  * [[VUID-VkPipelineLayoutCreateInfo-descriptorType-03571]]
-    The total number of bindings in descriptor set layouts created without
-    the ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT bit
-    set with a pname:descriptorType of
-    ename:VK_DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_KHR accessible to any
-    given shader stage across all elements of pname:pSetLayouts must: be
-    less than or equal to
-    slink:VkPhysicalDeviceAccelerationStructurePropertiesKHR::pname:maxPerStageDescriptorAccelerationStructures
-  * [[VUID-VkPipelineLayoutCreateInfo-descriptorType-03572]]
-    The total number of bindings with a pname:descriptorType of
-    ename:VK_DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_KHR accessible to any
-    given shader stage across all elements of pname:pSetLayouts must: be
-    less than or equal to
-    slink:VkPhysicalDeviceAccelerationStructurePropertiesKHR::pname:maxPerStageDescriptorUpdateAfterBindAccelerationStructures
-  * [[VUID-VkPipelineLayoutCreateInfo-descriptorType-03573]]
-    The total number of bindings in descriptor set layouts created without
-    the ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT bit
-    set with a pname:descriptorType of
-    ename:VK_DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_KHR accessible across
-    all shader stages and across all elements of pname:pSetLayouts must: be
-    less than or equal to
-    slink:VkPhysicalDeviceAccelerationStructurePropertiesKHR::pname:maxDescriptorSetAccelerationStructures
-  * [[VUID-VkPipelineLayoutCreateInfo-descriptorType-03574]]
-    The total number of bindings with a pname:descriptorType of
-    ename:VK_DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_KHR accessible across
-    all shader stages and across all elements of pname:pSetLayouts must: be
-    less than or equal to
-    slink:VkPhysicalDeviceAccelerationStructurePropertiesKHR::pname:maxDescriptorSetUpdateAfterBindAccelerationStructures
-endif::VK_KHR_acceleration_structure[]
-ifdef::VK_NV_ray_tracing[]
-  * [[VUID-VkPipelineLayoutCreateInfo-descriptorType-02381]]
-    The total number of bindings with a pname:descriptorType of
-    ename:VK_DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_NV accessible across all
-    shader stages and across all elements of pname:pSetLayouts must: be less
-    than or equal to
-    slink:VkPhysicalDeviceRayTracingPropertiesNV::pname:maxDescriptorSetAccelerationStructures
-endif::VK_NV_ray_tracing[]
-ifdef::VK_EXT_fragment_density_map2[]
-  * [[VUID-VkPipelineLayoutCreateInfo-pImmutableSamplers-03566]]
-    The total number of pname:pImmutableSamplers created with pname:flags
-    containing ename:VK_SAMPLER_CREATE_SUBSAMPLED_BIT_EXT or
-    ename:VK_SAMPLER_CREATE_SUBSAMPLED_COARSE_RECONSTRUCTION_BIT_EXT across
-    all shader stages and across all elements of pname:pSetLayouts must: be
-    less than or equal to
-    <<limits-maxDescriptorSetSubsampledSamplers,sname:VkPhysicalDeviceFragmentDensityMap2PropertiesEXT::pname:maxDescriptorSetSubsampledSamplers>>
-endif::VK_EXT_fragment_density_map2[]
-ifdef::VK_VALVE_mutable_descriptor_type[]
-  * [[VUID-VkPipelineLayoutCreateInfo-pSetLayouts-04606]]
-    Any element of pname:pSetLayouts must: not have been created with the
-    ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_HOST_ONLY_POOL_BIT_VALVE bit set
-endif::VK_VALVE_mutable_descriptor_type[]
-****
-
-include::{generated}/validity/structs/VkPipelineLayoutCreateInfo.txt[]
---
-
-[open,refpage='VkPipelineLayoutCreateFlags',desc='Reserved for future use',type='flags']
---
-include::{generated}/api/flags/VkPipelineLayoutCreateFlags.txt[]
-
-tname:VkPipelineLayoutCreateFlags is a bitmask type for setting a mask, but
-is currently reserved for future use.
---
-
-[open,refpage='VkPushConstantRange',desc='Structure specifying a push constant range',type='structs']
---
-The sname:VkPushConstantRange structure is defined as:
-
-include::{generated}/api/structs/VkPushConstantRange.txt[]
-
-  * pname:stageFlags is a set of stage flags describing the shader stages
-    that will access a range of push constants.
-    If a particular stage is not included in the range, then accessing
-    members of that range of push constants from the corresponding shader
-    stage will return undefined: values.
-  * pname:offset and pname:size are the start offset and size, respectively,
-    consumed by the range.
-    Both pname:offset and pname:size are in units of bytes and must: be a
-    multiple of 4.
-    The layout of the push constant variables is specified in the shader.
-
-.Valid Usage
-****
-  * [[VUID-VkPushConstantRange-offset-00294]]
-    pname:offset must: be less than
-    sname:VkPhysicalDeviceLimits::pname:maxPushConstantsSize
-  * [[VUID-VkPushConstantRange-offset-00295]]
-    pname:offset must: be a multiple of `4`
-  * [[VUID-VkPushConstantRange-size-00296]]
-    pname:size must: be greater than `0`
-  * [[VUID-VkPushConstantRange-size-00297]]
-    pname:size must: be a multiple of `4`
-  * [[VUID-VkPushConstantRange-size-00298]]
-    pname:size must: be less than or equal to
-    sname:VkPhysicalDeviceLimits::pname:maxPushConstantsSize minus
-    pname:offset
-****
-
-include::{generated}/validity/structs/VkPushConstantRange.txt[]
---
-
-Once created, pipeline layouts are used as part of pipeline creation (see
-<<pipelines, Pipelines>>), as part of binding descriptor sets (see
-<<descriptorsets-binding, Descriptor Set Binding>>), and as part of setting
-push constants (see <<descriptorsets-push-constants, Push Constant
-Updates>>).
-Pipeline creation accepts a pipeline layout as input, and the layout may: be
-used to map (set, binding, arrayElement) tuples to implementation resources
-or memory locations within a descriptor set.
-The assignment of implementation resources depends only on the bindings
-defined in the descriptor sets that comprise the pipeline layout, and not on
-any shader source.
-
-[[descriptorsets-pipelinelayout-consistency]]
-All resource variables <<shaders-staticuse,statically used>> in all shaders
-in a pipeline must: be declared with a (set,binding,arrayElement) that
-exists in the corresponding descriptor set layout and is of an appropriate
-descriptor type and includes the set of shader stages it is used by in
-pname:stageFlags.
-The pipeline layout can: include entries that are not used by a particular
-pipeline, or that are dead-code eliminated from any of the shaders.
-The pipeline layout allows the application to provide a consistent set of
-bindings across multiple pipeline compiles, which enables those pipelines to
-be compiled in a way that the implementation may: cheaply switch pipelines
-without reprogramming the bindings.
-
-Similarly, the push constant block declared in each shader (if present)
-must: only place variables at offsets that are each included in a push
-constant range with pname:stageFlags including the bit corresponding to the
-shader stage that uses it.
-The pipeline layout can: include ranges or portions of ranges that are not
-used by a particular pipeline, or for which the variables have been
-dead-code eliminated from any of the shaders.
-
-There is a limit on the total number of resources of each type that can: be
-included in bindings in all descriptor set layouts in a pipeline layout as
-shown in <<descriptorsets-pipelinelayout-limits,Pipeline Layout Resource
-Limits>>.
-The "`Total Resources Available`" column gives the limit on the number of
-each type of resource that can: be included in bindings in all descriptor
-sets in the pipeline layout.
-Some resource types count against multiple limits.
-Additionally, there are limits on the total number of each type of resource
-that can: be used in any pipeline stage as described in
-<<interfaces-resources-limits,Shader Resource Limits>>.
-
-[[descriptorsets-pipelinelayout-limits]]
-.Pipeline Layout Resource Limits
-[width="80%",cols="<37,<22",options="header"]
-|====
-| Total Resources Available | Resource Types
-.2+<.^| pname:maxDescriptorSetSamplers
-ifdef::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
-or pname:maxDescriptorSetUpdateAfterBindSamplers
-endif::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
-            | sampler           | combined image sampler
-.3+<.^| pname:maxDescriptorSetSampledImages
-ifdef::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
-or pname:maxDescriptorSetUpdateAfterBindSampledImages
-endif::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
-            | sampled image     | combined image sampler | uniform texel buffer
-.2+<.^| pname:maxDescriptorSetStorageImages
-ifdef::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
-or pname:maxDescriptorSetUpdateAfterBindStorageImages
-endif::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
-            | storage image     | storage texel buffer
-.2+<.^| pname:maxDescriptorSetUniformBuffers
-ifdef::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
-or pname:maxDescriptorSetUpdateAfterBindUniformBuffers
-endif::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
-            | uniform buffer    | uniform buffer dynamic
-| pname:maxDescriptorSetUniformBuffersDynamic
-ifdef::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
-or pname:maxDescriptorSetUpdateAfterBindUniformBuffersDynamic
-endif::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
-            | uniform buffer dynamic
-.2+<.^| pname:maxDescriptorSetStorageBuffers
-ifdef::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
-or pname:maxDescriptorSetUpdateAfterBindStorageBuffers
-endif::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
-            | storage buffer    | storage buffer dynamic
-| pname:maxDescriptorSetStorageBuffersDynamic
-ifdef::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
-or pname:maxDescriptorSetUpdateAfterBindStorageBuffersDynamic
-endif::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
-            | storage buffer dynamic
-| pname:maxDescriptorSetInputAttachments
-ifdef::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
-or pname:maxDescriptorSetUpdateAfterBindInputAttachments
-endif::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
-            | input attachment
-ifdef::VK_EXT_inline_uniform_block[]
-| pname:maxDescriptorSetInlineUniformBlocks
-ifdef::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
-or pname:maxDescriptorSetUpdateAfterBindInlineUniformBlocks
-endif::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
-            | inline uniform block
-endif::VK_EXT_inline_uniform_block[]
-ifdef::VK_NV_ray_tracing,VK_KHR_acceleration_structure[]
-| pname:maxDescriptorSetAccelerationStructures
-ifdef::VK_KHR_acceleration_structure[]
-or pname:maxDescriptorSetUpdateAfterBindAccelerationStructures
-endif::VK_KHR_acceleration_structure[]
-            | acceleration structure
-endif::VK_NV_ray_tracing,VK_KHR_acceleration_structure[]
-|====
-
-
-[open,refpage='vkDestroyPipelineLayout',desc='Destroy a pipeline layout object',type='protos']
---
-To destroy a pipeline layout, call:
-
-include::{generated}/api/protos/vkDestroyPipelineLayout.txt[]
-
-  * pname:device is the logical device that destroys the pipeline layout.
-  * pname:pipelineLayout is the pipeline layout to destroy.
-  * pname:pAllocator controls host memory allocation as described in the
-    <<memory-allocation, Memory Allocation>> chapter.
-
-.Valid Usage
-****
-  * [[VUID-vkDestroyPipelineLayout-pipelineLayout-00299]]
-    If sname:VkAllocationCallbacks were provided when pname:pipelineLayout
-    was created, a compatible set of callbacks must: be provided here
-  * [[VUID-vkDestroyPipelineLayout-pipelineLayout-00300]]
-    If no sname:VkAllocationCallbacks were provided when
-    pname:pipelineLayout was created, pname:pAllocator must: be `NULL`
-  * [[VUID-vkDestroyPipelineLayout-pipelineLayout-02004]]
-    pname:pipelineLayout must: not have been passed to any ftext:vkCmd*
-    command for any command buffers that are still in the
-    <<commandbuffers-lifecycle, recording state>> when
-    fname:vkDestroyPipelineLayout is called
-****
-
-include::{generated}/validity/protos/vkDestroyPipelineLayout.txt[]
---
-
-
-[[descriptorsets-compatibility]]
-==== Pipeline Layout Compatibility
-
-Two pipeline layouts are defined to be "`compatible for
-<<descriptorsets-push-constants, push constants>>`" if they were created
-with identical push constant ranges.
-Two pipeline layouts are defined to be "`compatible for set N`" if they were
-created with _identically defined_ descriptor set layouts for sets zero
-through N, and if they were created with identical push constant ranges.
-
-When binding a descriptor set (see <<descriptorsets-binding, Descriptor Set
-Binding>>) to set number N, if the previously bound descriptor sets for sets
-zero through N-1 were all bound using compatible pipeline layouts, then
-performing this binding does not disturb any of the lower numbered sets.
-If, additionally, the previously bound descriptor set for set N was bound
-using a pipeline layout compatible for set N, then the bindings in sets
-numbered greater than N are also not disturbed.
-
-Similarly, when binding a pipeline, the pipeline can: correctly access any
-previously bound descriptor sets which were bound with compatible pipeline
-layouts, as long as all lower numbered sets were also bound with compatible
-layouts.
-
-Layout compatibility means that descriptor sets can: be bound to a command
-buffer for use by any pipeline created with a compatible pipeline layout,
-and without having bound a particular pipeline first.
-It also means that descriptor sets can: remain valid across a pipeline
-change, and the same resources will be accessible to the newly bound
-pipeline.
-
-ifdef::implementation-guide[]
-.Implementor's Note
-****
-A consequence of layout compatibility is that when the implementation
-compiles a pipeline layout and maps pipeline resources to implementation
-resources, the mechanism for set N should: only be a function of sets
-[0..N].
-****
-endif::implementation-guide[]
-
-
-[NOTE]
-.Note
-====
-Place the least frequently changing descriptor sets near the start of the
-pipeline layout, and place the descriptor sets representing the most
-frequently changing resources near the end.
-When pipelines are switched, only the descriptor set bindings that have been
-invalidated will need to be updated and the remainder of the descriptor set
-bindings will remain in place.
-====
-
-The maximum number of descriptor sets that can: be bound to a pipeline
-layout is queried from physical device properties (see
-pname:maxBoundDescriptorSets in <<limits, Limits>>).
-
-.API example
-[source,c++]
----------------------------------------------------
-const VkDescriptorSetLayout layouts[] = { layout1, layout2 };
-
-const VkPushConstantRange ranges[] =
-{
-    {
-        VK_SHADER_STAGE_VERTEX_BIT,    // stageFlags
-        0,                             // offset
-        4                              // size
-    },
-
-    {
-        VK_SHADER_STAGE_FRAGMENT_BIT,  // stageFlags
-        4,                             // offset
-        4                              // size
-    },
-};
-
-const VkPipelineLayoutCreateInfo createInfo =
-{
-    VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO,  // sType
-    NULL,                                           // pNext
-    0,                                              // flags
-    2,                                              // setLayoutCount
-    layouts,                                        // pSetLayouts
-    2,                                              // pushConstantRangeCount
-    ranges                                          // pPushConstantRanges
-};
-
-VkPipelineLayout myPipelineLayout;
-myResult = vkCreatePipelineLayout(
-    myDevice,
-    &createInfo,
-    NULL,
-    &myPipelineLayout);
----------------------------------------------------
-
-
-[[descriptorsets-allocation]]
-=== Allocation of Descriptor Sets
-
-[open,refpage='VkDescriptorPool',desc='Opaque handle to a descriptor pool object',type='handles']
---
-A _descriptor pool_ maintains a pool of descriptors, from which descriptor
-sets are allocated.
-Descriptor pools are externally synchronized, meaning that the application
-must: not allocate and/or free descriptor sets from the same pool in
-multiple threads simultaneously.
-
-Descriptor pools are represented by sname:VkDescriptorPool handles:
-
-include::{generated}/api/handles/VkDescriptorPool.txt[]
-
---
-
-[open,refpage='vkCreateDescriptorPool',desc='Creates a descriptor pool object',type='protos']
---
-To create a descriptor pool object, call:
-
-include::{generated}/api/protos/vkCreateDescriptorPool.txt[]
-
-  * pname:device is the logical device that creates the descriptor pool.
-  * pname:pCreateInfo is a pointer to a slink:VkDescriptorPoolCreateInfo
-    structure specifying the state of the descriptor pool object.
-  * pname:pAllocator controls host memory allocation as described in the
-    <<memory-allocation, Memory Allocation>> chapter.
-  * pname:pDescriptorPool is a pointer to a slink:VkDescriptorPool handle in
-    which the resulting descriptor pool object is returned.
-
-The created descriptor pool is returned in pname:pDescriptorPool.
-
-include::{generated}/validity/protos/vkCreateDescriptorPool.txt[]
---
-
-[open,refpage='VkDescriptorPoolCreateInfo',desc='Structure specifying parameters of a newly created descriptor pool',type='structs']
---
-Additional information about the pool is passed in a
-sname:VkDescriptorPoolCreateInfo structure:
-
-include::{generated}/api/structs/VkDescriptorPoolCreateInfo.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:flags is a bitmask of elink:VkDescriptorPoolCreateFlagBits
-    specifying certain supported operations on the pool.
-  * pname:maxSets is the maximum number of descriptor sets that can: be
-    allocated from the pool.
-  * pname:poolSizeCount is the number of elements in pname:pPoolSizes.
-  * pname:pPoolSizes is a pointer to an array of slink:VkDescriptorPoolSize
-    structures, each containing a descriptor type and number of descriptors
-    of that type to be allocated in the pool.
-
-If multiple sname:VkDescriptorPoolSize structures containing the same
-descriptor type appear in the pname:pPoolSizes array then the pool will be
-created with enough storage for the total number of descriptors of each
-type.
-
-Fragmentation of a descriptor pool is possible and may: lead to descriptor
-set allocation failures.
-A failure due to fragmentation is defined as failing a descriptor set
-allocation despite the sum of all outstanding descriptor set allocations
-from the pool plus the requested allocation requiring no more than the total
-number of descriptors requested at pool creation.
-Implementations provide certain guarantees of when fragmentation must: not
-cause allocation failure, as described below.
-
-If a descriptor pool has not had any descriptor sets freed since it was
-created or most recently reset then fragmentation must: not cause an
-allocation failure (note that this is always the case for a pool created
-without the ename:VK_DESCRIPTOR_POOL_CREATE_FREE_DESCRIPTOR_SET_BIT bit
-set).
-Additionally, if all sets allocated from the pool since it was created or
-most recently reset use the same number of descriptors (of each type) and
-the requested allocation also uses that same number of descriptors (of each
-type), then fragmentation must: not cause an allocation failure.
-
-If an allocation failure occurs due to fragmentation, an application can:
-create an additional descriptor pool to perform further descriptor set
-allocations.
-
-ifdef::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
-If pname:flags has the ename:VK_DESCRIPTOR_POOL_CREATE_UPDATE_AFTER_BIND_BIT
-bit set, descriptor pool creation may: fail with the error
-ename:VK_ERROR_FRAGMENTATION if the total number of descriptors across all
-pools (including this one) created with this bit set exceeds
-pname:maxUpdateAfterBindDescriptorsInAllPools, or if fragmentation of the
-underlying hardware resources occurs.
-endif::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
-
-ifdef::VK_VALVE_mutable_descriptor_type[]
-If a pname:pPoolSizes[i]::pname:type is
-ename:VK_DESCRIPTOR_TYPE_MUTABLE_VALVE, a
-slink:VkMutableDescriptorTypeCreateInfoVALVE struct in the pname:pNext chain
-can: be used to specify which mutable descriptor types can: be allocated
-from the pool.
-If present in the pname:pNext chain,
-slink:VkMutableDescriptorTypeCreateInfoVALVE::pname:pMutableDescriptorTypeLists[i]
-specifies which kind of ename:VK_DESCRIPTOR_TYPE_MUTABLE_VALVE descriptors
-can: be allocated from this pool entry.
-If slink:VkMutableDescriptorTypeCreateInfoVALVE does not exist in the
-pname:pNext chain, or
-slink:VkMutableDescriptorTypeCreateInfoVALVE::pname:pMutableDescriptorTypeLists[i]
-is out of range, the descriptor pool allocates enough memory to be able to
-allocate a ename:VK_DESCRIPTOR_TYPE_MUTABLE_VALVE descriptor with any
-supported elink:VkDescriptorType as a mutable descriptor.
-A mutable descriptor can: be allocated from a pool entry if the type list in
-slink:VkDescriptorSetLayoutCreateInfo is a subset of the type list declared
-in the descriptor pool, or if the pool entry is created without a descriptor
-type list.
-Multiple pname:pPoolSizes entries with
-ename:VK_DESCRIPTOR_TYPE_MUTABLE_VALVE can: be declared.
-When multiple such pool entries are present in pname:pPoolSizes, they
-specify sets of supported descriptor types which either fully overlap,
-partially overlap, or are disjoint.
-Two sets fully overlap if the sets of supported descriptor types are equal.
-If the sets are not disjoint they partially overlap.
-A pool entry without a sname:VkMutableDescriptorTypeListVALVE assigned to it
-is considered to partially overlap any other pool entry which has a
-sname:VkMutableDescriptorTypeListVALVE assigned to it.
-The application must: ensure that partial overlap does not exist in
-pname:pPoolSizes.
-
-[NOTE]
-.Note
-====
-The requirement of no partial overlap is intended to resolve ambiguity for
-validation as there is no confusion which pname:pPoolSizes entries will be
-allocated from.
-An implementation is not expected to depend on this requirement.
-====
-endif::VK_VALVE_mutable_descriptor_type[]
-
-.Valid Usage
-****
-  * [[VUID-VkDescriptorPoolCreateInfo-maxSets-00301]]
-    pname:maxSets must: be greater than `0`
-ifdef::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
-ifdef::VK_VALVE_mutable_descriptor_type[]
-  * [[VUID-VkDescriptorPoolCreateInfo-flags-04607]]
-    If pname:flags has the
-    ename:VK_DESCRIPTOR_POOL_CREATE_HOST_ONLY_BIT_VALVE bit set, then the
-    ename:VK_DESCRIPTOR_POOL_CREATE_UPDATE_AFTER_BIND_BIT bit must: not be
-    set
-endif::VK_VALVE_mutable_descriptor_type[]
-endif::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
-ifdef::VK_VALVE_mutable_descriptor_type[]
-  * [[VUID-VkDescriptorPoolCreateInfo-mutableDescriptorType-04608]]
-    If
-    slink:VkPhysicalDeviceMutableDescriptorTypeFeaturesVALVE::pname:mutableDescriptorType
-    is not enabled, pname:pPoolSizes must: not contain a
-    pname:descriptorType of ename:VK_DESCRIPTOR_TYPE_MUTABLE_VALVE
-  * [[VUID-VkDescriptorPoolCreateInfo-flags-04609]]
-    If pname:flags has the
-    ename:VK_DESCRIPTOR_POOL_CREATE_HOST_ONLY_BIT_VALVE bit set,
-    slink:VkPhysicalDeviceMutableDescriptorTypeFeaturesVALVE::pname:mutableDescriptorType
-    must: be enabled
-  * [[VUID-VkDescriptorPoolCreateInfo-pPoolSizes-04787]]
-    If pname:pPoolSizes contains a pname:descriptorType of
-    ename:VK_DESCRIPTOR_TYPE_MUTABLE_VALVE, any other
-    ename:VK_DESCRIPTOR_TYPE_MUTABLE_VALVE element in pname:pPoolSizes must:
-    not have sets of supported descriptor types which partially overlap
-endif::VK_VALVE_mutable_descriptor_type[]
-****
-
-include::{generated}/validity/structs/VkDescriptorPoolCreateInfo.txt[]
---
-
-ifdef::VK_EXT_inline_uniform_block[]
-[open,refpage='VkDescriptorPoolInlineUniformBlockCreateInfoEXT',desc='Structure specifying the maximum number of inline uniform block bindings of a newly created descriptor pool',type='structs']
---
-In order to be able to allocate descriptor sets having
-<<descriptorsets-inlineuniformblock, inline uniform block>> bindings the
-descriptor pool must: be created with specifying the inline uniform block
-binding capacity of the descriptor pool, in addition to the total inline
-uniform data capacity in bytes which is specified through a
-slink:VkDescriptorPoolSize structure with a pname:descriptorType value of
-ename:VK_DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK_EXT.
-This can: be done by adding a
-sname:VkDescriptorPoolInlineUniformBlockCreateInfoEXT structure to the
-pname:pNext chain of slink:VkDescriptorPoolCreateInfo.
-
-The sname:VkDescriptorPoolInlineUniformBlockCreateInfoEXT structure is
-defined as:
-
-include::{generated}/api/structs/VkDescriptorPoolInlineUniformBlockCreateInfoEXT.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:maxInlineUniformBlockBindings is the number of inline uniform
-    block bindings to allocate.
-
-include::{generated}/validity/structs/VkDescriptorPoolInlineUniformBlockCreateInfoEXT.txt[]
---
-endif::VK_EXT_inline_uniform_block[]
-
-[open,refpage='VkDescriptorPoolCreateFlagBits',desc='Bitmask specifying certain supported operations on a descriptor pool',type='enums']
---
-Bits which can: be set in slink:VkDescriptorPoolCreateInfo::pname:flags to
-enable operations on a descriptor pool are:
-
-include::{generated}/api/enums/VkDescriptorPoolCreateFlagBits.txt[]
-
-  * ename:VK_DESCRIPTOR_POOL_CREATE_FREE_DESCRIPTOR_SET_BIT specifies that
-    descriptor sets can: return their individual allocations to the pool,
-    i.e. all of flink:vkAllocateDescriptorSets, flink:vkFreeDescriptorSets,
-    and flink:vkResetDescriptorPool are allowed.
-    Otherwise, descriptor sets allocated from the pool must: not be
-    individually freed back to the pool, i.e. only
-    flink:vkAllocateDescriptorSets and flink:vkResetDescriptorPool are
-    allowed.
-ifdef::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
-  * ename:VK_DESCRIPTOR_POOL_CREATE_UPDATE_AFTER_BIND_BIT specifies that
-    descriptor sets allocated from this pool can: include bindings with the
-    ename:VK_DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT bit set.
-    It is valid to allocate descriptor sets that have bindings that do not
-    set the ename:VK_DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT bit from a
-    pool that has ename:VK_DESCRIPTOR_POOL_CREATE_UPDATE_AFTER_BIND_BIT set.
-endif::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
-ifdef::VK_VALVE_mutable_descriptor_type[]
-  * ename:VK_DESCRIPTOR_POOL_CREATE_HOST_ONLY_BIT_VALVE specifies that this
-    descriptor pool and the descriptor sets allocated from it reside
-    entirely in host memory and cannot be bound.
-    Descriptor sets allocated from this pool are partially exempt from the
-    external synchronization requirement in
-ifdef::VK_KHR_descriptor_update_template[]
-    flink:vkUpdateDescriptorSetWithTemplateKHR and
-endif::VK_KHR_descriptor_update_template[]
-    flink:vkUpdateDescriptorSets.
-    Descriptor sets and their descriptors can be updated concurrently in
-    different threads, though the same descriptor must: not be updated
-    concurrently by two threads.
-endif::VK_VALVE_mutable_descriptor_type[]
---
-
-[open,refpage='VkDescriptorPoolCreateFlags',desc='Bitmask of VkDescriptorPoolCreateFlagBits',type='flags']
---
-include::{generated}/api/flags/VkDescriptorPoolCreateFlags.txt[]
-
-tname:VkDescriptorPoolCreateFlags is a bitmask type for setting a mask of
-zero or more elink:VkDescriptorPoolCreateFlagBits.
---
-
-[open,refpage='VkDescriptorPoolSize',desc='Structure specifying descriptor pool size',type='structs']
---
-The sname:VkDescriptorPoolSize structure is defined as:
-
-include::{generated}/api/structs/VkDescriptorPoolSize.txt[]
-
-  * pname:type is the type of descriptor.
-  * pname:descriptorCount is the number of descriptors of that type to
-    allocate.
-ifdef::VK_EXT_inline_uniform_block[]
-    If pname:type is ename:VK_DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK_EXT then
-    pname:descriptorCount is the number of bytes to allocate for descriptors
-    of this type.
-endif::VK_EXT_inline_uniform_block[]
-
-ifdef::VK_VULKAN_1_1,VK_KHR_sampler_ycbcr_conversion[]
-[NOTE]
-.Note
-====
-When creating a descriptor pool that will contain descriptors for combined
-image samplers of multi-planar formats, an application needs to account for
-non-trivial descriptor consumption when choosing the pname:descriptorCount
-value, as indicated by
-slink:VkSamplerYcbcrConversionImageFormatProperties::pname:combinedImageSamplerDescriptorCount.
-====
-endif::VK_VULKAN_1_1,VK_KHR_sampler_ycbcr_conversion[]
-
-.Valid Usage
-****
-  * [[VUID-VkDescriptorPoolSize-descriptorCount-00302]]
-    pname:descriptorCount must: be greater than `0`
-ifdef::VK_EXT_inline_uniform_block[]
-  * [[VUID-VkDescriptorPoolSize-type-02218]]
-    If pname:type is ename:VK_DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK_EXT then
-    pname:descriptorCount must: be a multiple of `4`
-endif::VK_EXT_inline_uniform_block[]
-****
-
-include::{generated}/validity/structs/VkDescriptorPoolSize.txt[]
---
-
-[open,refpage='vkDestroyDescriptorPool',desc='Destroy a descriptor pool object',type='protos']
---
-To destroy a descriptor pool, call:
-
-include::{generated}/api/protos/vkDestroyDescriptorPool.txt[]
-
-  * pname:device is the logical device that destroys the descriptor pool.
-  * pname:descriptorPool is the descriptor pool to destroy.
-  * pname:pAllocator controls host memory allocation as described in the
-    <<memory-allocation, Memory Allocation>> chapter.
-
-When a pool is destroyed, all descriptor sets allocated from the pool are
-implicitly freed and become invalid.
-Descriptor sets allocated from a given pool do not need to be freed before
-destroying that descriptor pool.
-
-.Valid Usage
-****
-  * [[VUID-vkDestroyDescriptorPool-descriptorPool-00303]]
-    All submitted commands that refer to pname:descriptorPool (via any
-    allocated descriptor sets) must: have completed execution
-  * [[VUID-vkDestroyDescriptorPool-descriptorPool-00304]]
-    If sname:VkAllocationCallbacks were provided when pname:descriptorPool
-    was created, a compatible set of callbacks must: be provided here
-  * [[VUID-vkDestroyDescriptorPool-descriptorPool-00305]]
-    If no sname:VkAllocationCallbacks were provided when
-    pname:descriptorPool was created, pname:pAllocator must: be `NULL`
-****
-
-include::{generated}/validity/protos/vkDestroyDescriptorPool.txt[]
---
-
-[open,refpage='VkDescriptorSet',desc='Opaque handle to a descriptor set object',type='handles']
---
-Descriptor sets are allocated from descriptor pool objects, and are
-represented by sname:VkDescriptorSet handles:
-
-include::{generated}/api/handles/VkDescriptorSet.txt[]
---
-
-[open,refpage='vkAllocateDescriptorSets',desc='Allocate one or more descriptor sets',type='protos']
---
-To allocate descriptor sets from a descriptor pool, call:
-
-include::{generated}/api/protos/vkAllocateDescriptorSets.txt[]
-
-  * pname:device is the logical device that owns the descriptor pool.
-  * pname:pAllocateInfo is a pointer to a slink:VkDescriptorSetAllocateInfo
-    structure describing parameters of the allocation.
-  * pname:pDescriptorSets is a pointer to an array of slink:VkDescriptorSet
-    handles in which the resulting descriptor set objects are returned.
-
-The allocated descriptor sets are returned in pname:pDescriptorSets.
-
-When a descriptor set is allocated, the initial state is largely
-uninitialized and all descriptors are undefined:.
-Descriptors also become undefined: if the underlying resource is destroyed.
-Descriptor sets containing undefined: descriptors can: still be bound and
-used, subject to the following conditions:
-
-ifdef::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
-  * For descriptor set bindings created with the
-    ename:VK_DESCRIPTOR_BINDING_PARTIALLY_BOUND_BIT bit set, all descriptors
-    in that binding that are dynamically used must: have been populated
-    before the descriptor set is <<descriptorsets-binding,consumed>>.
-  * For descriptor set bindings created without the
-    ename:VK_DESCRIPTOR_BINDING_PARTIALLY_BOUND_BIT bit set, all descriptors
-    in that binding that are statically used must: have been populated
-    before the descriptor set is <<descriptorsets-binding,consumed>>.
-endif::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
-ifndef::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
-  * Descriptors that are <<shaders-staticuse,statically used>> must: have
-    been populated before the descriptor set is
-    <<descriptorsets-binding,consumed>>.
-endif::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
-ifdef::VK_EXT_inline_uniform_block[]
-  * Descriptor bindings with descriptor type of
-    ename:VK_DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK_EXT can: be undefined:
-    when the descriptor set is <<descriptorsets-binding,consumed>>; though
-    values in that block will be undefined:.
-endif::VK_EXT_inline_uniform_block[]
-  * Entries that are not used by a pipeline can: have undefined:
-    descriptors.
-
-ifdef::VK_VERSION_1_1,VK_KHR_maintenance1[]
-If a call to fname:vkAllocateDescriptorSets would cause the total number of
-descriptor sets allocated from the pool to exceed the value of
-slink:VkDescriptorPoolCreateInfo::pname:maxSets used to create
-pname:pAllocateInfo->descriptorPool, then the allocation may: fail due to
-lack of space in the descriptor pool.
-Similarly, the allocation may: fail due to lack of space if the call to
-fname:vkAllocateDescriptorSets would cause the number of any given
-descriptor type to exceed the sum of all the pname:descriptorCount members
-of each element of slink:VkDescriptorPoolCreateInfo::pname:pPoolSizes with a
-pname:type equal to that type.
-
-ifdef::VK_EXT_inline_uniform_block[]
-Additionally, the allocation may: also fail if a call to
-fname:vkAllocateDescriptorSets would cause the total number of inline
-uniform block bindings allocated from the pool to exceed the value of
-slink:VkDescriptorPoolInlineUniformBlockCreateInfoEXT::pname:maxInlineUniformBlockBindings
-used to create the descriptor pool.
-endif::VK_EXT_inline_uniform_block[]
-
-If the allocation fails due to no more space in the descriptor pool, and not
-because of system or device memory exhaustion, then
-ename:VK_ERROR_OUT_OF_POOL_MEMORY must: be returned.
-endif::VK_VERSION_1_1,VK_KHR_maintenance1[]
-
-ifndef::VK_VERSION_1_1,VK_KHR_maintenance2[]
-If an allocation fails due to fragmentation, an indeterminate error is
-returned with an unspecified error code.
-Any returned error other than
-ifdef::VK_VERSION_1_1,VK_KHR_maintenance1[]
-ename:VK_ERROR_OUT_OF_POOL_MEMORY or
-endif::VK_VERSION_1_1,VK_KHR_maintenance1[]
-ename:VK_ERROR_FRAGMENTED_POOL does not imply its usual meaning:
-applications should: assume that the allocation failed due to fragmentation,
-and create a new descriptor pool.
-endif::VK_VERSION_1_1,VK_KHR_maintenance2[]
-
-ifdef::VK_VERSION_1_1,VK_KHR_maintenance1[]
-fname:vkAllocateDescriptorSets can: be used to create multiple descriptor
-sets.
-If the creation of any of those descriptor sets fails, then the
-implementation must: destroy all successfully created descriptor set objects
-from this command, set all entries of the pname:pDescriptorSets array to
-dlink:VK_NULL_HANDLE and return the error.
-endif::VK_VERSION_1_1,VK_KHR_maintenance1[]
-
-ifndef::VK_VERSION_1_1,VK_KHR_maintenance2[]
-[NOTE]
-.Note
-====
-Applications should: check for a negative return value when allocating new
-descriptor sets, assume that any error
-ifdef::VK_VERSION_1_1,VK_KHR_maintenance1[]
-other than ename:VK_ERROR_OUT_OF_POOL_MEMORY
-endif::VK_VERSION_1_1,VK_KHR_maintenance1[]
-effectively means ename:VK_ERROR_FRAGMENTED_POOL, and try to create a new
-descriptor pool.
-If ename:VK_ERROR_FRAGMENTED_POOL is the actual return value, it adds
-certainty to that decision.
-
-The reason for this is that ename:VK_ERROR_FRAGMENTED_POOL was only added in
-a later version of the 1.0 specification, and so drivers may: return other
-errors if they were written against earlier versions.
-To ensure full compatibility with earlier patch versions, these other errors
-are allowed.
-====
-endif::VK_VERSION_1_1,VK_KHR_maintenance2[]
-
-include::{generated}/validity/protos/vkAllocateDescriptorSets.txt[]
---
-
-[open,refpage='VkDescriptorSetAllocateInfo',desc='Structure specifying the allocation parameters for descriptor sets',type='structs']
---
-The sname:VkDescriptorSetAllocateInfo structure is defined as:
-
-include::{generated}/api/structs/VkDescriptorSetAllocateInfo.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:descriptorPool is the pool which the sets will be allocated from.
-  * pname:descriptorSetCount determines the number of descriptor sets to be
-    allocated from the pool.
-  * pname:pSetLayouts is a pointer to an array of descriptor set layouts,
-    with each member specifying how the corresponding descriptor set is
-    allocated.
-
-.Valid Usage
-****
-ifndef::VK_VERSION_1_1,VK_KHR_maintenance1[]
-  * [[VUID-VkDescriptorSetAllocateInfo-descriptorSetCount-00306]]
-    pname:descriptorSetCount must: not be greater than the number of sets
-    that are currently available for allocation in pname:descriptorPool
-  * [[VUID-VkDescriptorSetAllocateInfo-descriptorPool-00307]]
-    pname:descriptorPool must: have enough free descriptor capacity
-    remaining to allocate the descriptor sets of the specified layouts
-endif::VK_VERSION_1_1,VK_KHR_maintenance1[]
-ifdef::VK_KHR_push_descriptor[]
-  * [[VUID-VkDescriptorSetAllocateInfo-pSetLayouts-00308]]
-    Each element of pname:pSetLayouts must: not have been created with
-    ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_PUSH_DESCRIPTOR_BIT_KHR set
-endif::VK_KHR_push_descriptor[]
-ifdef::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
-  * [[VUID-VkDescriptorSetAllocateInfo-pSetLayouts-03044]]
-    If any element of pname:pSetLayouts was created with the
-    ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT bit
-    set, pname:descriptorPool must: have been created with the
-    ename:VK_DESCRIPTOR_POOL_CREATE_UPDATE_AFTER_BIND_BIT flag set
-endif::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
-ifdef::VK_VALVE_mutable_descriptor_type[]
-  * [[VUID-VkDescriptorSetAllocateInfo-pSetLayouts-04610]]
-    If any element of pname:pSetLayouts was created with the
-    ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_HOST_ONLY_POOL_BIT_VALVE bit set,
-    pname:descriptorPool must: have been created with the
-    ename:VK_DESCRIPTOR_POOL_CREATE_HOST_ONLY_BIT_VALVE flag set
-endif::VK_VALVE_mutable_descriptor_type[]
-****
-
-include::{generated}/validity/structs/VkDescriptorSetAllocateInfo.txt[]
---
-
-ifdef::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
-[open,refpage='VkDescriptorSetVariableDescriptorCountAllocateInfo',desc='Structure specifying additional allocation parameters for descriptor sets',type='structs',alias='VkDescriptorSetVariableDescriptorCountAllocateInfoEXT']
---
-If the pname:pNext chain of a slink:VkDescriptorSetAllocateInfo structure
-includes a sname:VkDescriptorSetVariableDescriptorCountAllocateInfo
-structure, then that structure includes an array of descriptor counts for
-variable descriptor count bindings, one for each descriptor set being
-allocated.
-
-The sname:VkDescriptorSetVariableDescriptorCountAllocateInfo structure is
-defined as:
-
-include::{generated}/api/structs/VkDescriptorSetVariableDescriptorCountAllocateInfo.txt[]
-
-ifdef::VK_EXT_descriptor_indexing[]
-or the equivalent
-
-include::{generated}/api/structs/VkDescriptorSetVariableDescriptorCountAllocateInfoEXT.txt[]
-endif::VK_EXT_descriptor_indexing[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:descriptorSetCount is zero or the number of elements in
-    pname:pDescriptorCounts.
-  * pname:pDescriptorCounts is a pointer to an array of descriptor counts,
-    with each member specifying the number of descriptors in a variable
-    descriptor count binding in the corresponding descriptor set being
-    allocated.
-
-If pname:descriptorSetCount is zero or this structure is not included in the
-pname:pNext chain, then the variable lengths are considered to be zero.
-Otherwise, pname:pDescriptorCounts[i] is the number of descriptors in the
-variable count descriptor binding in the corresponding descriptor set
-layout.
-ifdef::VK_EXT_inline_uniform_block[]
-If the variable count descriptor binding in the corresponding descriptor set
-layout has a descriptor type of
-ename:VK_DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK_EXT then
-pname:pDescriptorCounts[i] specifies the binding's capacity in bytes.
-endif::VK_EXT_inline_uniform_block[]
-If slink:VkDescriptorSetAllocateInfo::pname:pSetLayouts[i] does not include
-a variable count descriptor binding, then pname:pDescriptorCounts[i] is
-ignored.
-
-.Valid Usage
-****
-  * [[VUID-VkDescriptorSetVariableDescriptorCountAllocateInfo-descriptorSetCount-03045]]
-    If pname:descriptorSetCount is not zero, pname:descriptorSetCount must:
-    equal slink:VkDescriptorSetAllocateInfo::pname:descriptorSetCount
-  * [[VUID-VkDescriptorSetVariableDescriptorCountAllocateInfo-pSetLayouts-03046]]
-    If slink:VkDescriptorSetAllocateInfo::pname:pSetLayouts[i] has a
-    variable descriptor count binding, then pname:pDescriptorCounts[i] must:
-    be less than or equal to the descriptor count specified for that binding
-    when the descriptor set layout was created
-****
-
-include::{generated}/validity/structs/VkDescriptorSetVariableDescriptorCountAllocateInfo.txt[]
---
-endif::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
-
-[open,refpage='vkFreeDescriptorSets',desc='Free one or more descriptor sets',type='protos']
---
-To free allocated descriptor sets, call:
-
-include::{generated}/api/protos/vkFreeDescriptorSets.txt[]
-
-  * pname:device is the logical device that owns the descriptor pool.
-  * pname:descriptorPool is the descriptor pool from which the descriptor
-    sets were allocated.
-  * pname:descriptorSetCount is the number of elements in the
-    pname:pDescriptorSets array.
-  * pname:pDescriptorSets is a pointer to an array of handles to
-    slink:VkDescriptorSet objects.
-
-After calling fname:vkFreeDescriptorSets, all descriptor sets in
-pname:pDescriptorSets are invalid.
-
-.Valid Usage
-****
-  * [[VUID-vkFreeDescriptorSets-pDescriptorSets-00309]]
-    All submitted commands that refer to any element of
-    pname:pDescriptorSets must: have completed execution
-  * [[VUID-vkFreeDescriptorSets-pDescriptorSets-00310]]
-    pname:pDescriptorSets must: be a valid pointer to an array of
-    pname:descriptorSetCount sname:VkDescriptorSet handles, each element of
-    which must: either be a valid handle or dlink:VK_NULL_HANDLE
-  * [[VUID-vkFreeDescriptorSets-descriptorPool-00312]]
-    pname:descriptorPool must: have been created with the
-    ename:VK_DESCRIPTOR_POOL_CREATE_FREE_DESCRIPTOR_SET_BIT flag
-****
-
-include::{generated}/validity/protos/vkFreeDescriptorSets.txt[]
---
-
-[open,refpage='vkResetDescriptorPool',desc='Resets a descriptor pool object',type='protos']
---
-To return all descriptor sets allocated from a given pool to the pool,
-rather than freeing individual descriptor sets, call:
-
-include::{generated}/api/protos/vkResetDescriptorPool.txt[]
-
-  * pname:device is the logical device that owns the descriptor pool.
-  * pname:descriptorPool is the descriptor pool to be reset.
-  * pname:flags is reserved for future use.
-
-Resetting a descriptor pool recycles all of the resources from all of the
-descriptor sets allocated from the descriptor pool back to the descriptor
-pool, and the descriptor sets are implicitly freed.
-
-.Valid Usage
-****
-  * [[VUID-vkResetDescriptorPool-descriptorPool-00313]]
-    All uses of pname:descriptorPool (via any allocated descriptor sets)
-    must: have completed execution
-****
-
-include::{generated}/validity/protos/vkResetDescriptorPool.txt[]
---
-
-[open,refpage='VkDescriptorPoolResetFlags',desc='Reserved for future use',type='flags']
---
-include::{generated}/api/flags/VkDescriptorPoolResetFlags.txt[]
-
-tname:VkDescriptorPoolResetFlags is a bitmask type for setting a mask, but
-is currently reserved for future use.
---
-
-
-[[descriptorsets-updates]]
-=== Descriptor Set Updates
-
-[open,refpage='vkUpdateDescriptorSets',desc='Update the contents of a descriptor set object',type='protos']
---
-Once allocated, descriptor sets can: be updated with a combination of write
-and copy operations.
-To update descriptor sets, call:
-
-include::{generated}/api/protos/vkUpdateDescriptorSets.txt[]
-
-  * pname:device is the logical device that updates the descriptor sets.
-  * pname:descriptorWriteCount is the number of elements in the
-    pname:pDescriptorWrites array.
-  * pname:pDescriptorWrites is a pointer to an array of
-    slink:VkWriteDescriptorSet structures describing the descriptor sets to
-    write to.
-  * pname:descriptorCopyCount is the number of elements in the
-    pname:pDescriptorCopies array.
-  * pname:pDescriptorCopies is a pointer to an array of
-    slink:VkCopyDescriptorSet structures describing the descriptor sets to
-    copy between.
-
-The operations described by pname:pDescriptorWrites are performed first,
-followed by the operations described by pname:pDescriptorCopies.
-Within each array, the operations are performed in the order they appear in
-the array.
-
-Each element in the pname:pDescriptorWrites array describes an operation
-updating the descriptor set using descriptors for resources specified in the
-structure.
-
-Each element in the pname:pDescriptorCopies array is a
-slink:VkCopyDescriptorSet structure describing an operation copying
-descriptors between sets.
-
-If the pname:dstSet member of any element of pname:pDescriptorWrites or
-pname:pDescriptorCopies is bound, accessed, or modified by any command that
-was recorded to a command buffer which is currently in the
-<<commandbuffers-lifecycle, recording or executable state>>,
-ifdef::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
-and any of the descriptor bindings that are updated were not created with
-the ename:VK_DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT or
-ename:VK_DESCRIPTOR_BINDING_UPDATE_UNUSED_WHILE_PENDING_BIT bits set,
-endif::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
-that command buffer becomes <<commandbuffers-lifecycle, invalid>>.
-
-.Valid Usage
-****
-  * [[VUID-vkUpdateDescriptorSets-pDescriptorWrites-06236]]
-    For each element [eq]#i# where
-    pname:pDescriptorWrites[i].pname:descriptorType is
-    ename:VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER or
-    ename:VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER, elements of the
-    pname:pTexelBufferView member of pname:pDescriptorWrites[i] must: have
-    been created on pname:device
-  * [[VUID-vkUpdateDescriptorSets-pDescriptorWrites-06237]]
-    For each element [eq]#i# where
-    pname:pDescriptorWrites[i].pname:descriptorType is
-    ename:VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER,
-    ename:VK_DESCRIPTOR_TYPE_STORAGE_BUFFER,
-    ename:VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC, or
-    ename:VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC, the pname:buffer member
-    of any element of the pname:pBufferInfo member of
-    pname:pDescriptorWrites[i] must: have been created on pname:device
-  * [[VUID-vkUpdateDescriptorSets-pDescriptorWrites-06238]]
-    For each element [eq]#i# where
-    pname:pDescriptorWrites[i].pname:descriptorType is
-    ename:VK_DESCRIPTOR_TYPE_SAMPLER or
-    ename:VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, and pname:dstSet was
-    not allocated with a layout that included immutable samplers for
-    pname:dstBinding with pname:descriptorType, the pname:sampler member of
-    any element of the pname:pImageInfo member of pname:pDescriptorWrites[i]
-    must: have been created on pname:device
-  * [[VUID-vkUpdateDescriptorSets-pDescriptorWrites-06239]]
-    For each element [eq]#i# where
-    pname:pDescriptorWrites[i].pname:descriptorType is
-    ename:VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE,
-    ename:VK_DESCRIPTOR_TYPE_STORAGE_IMAGE,
-    ename:VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT, or
-    ename:VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER the pname:imageView
-    member of any element of pname:pDescriptorWrites[i] must: have been
-    created on pname:device
-ifdef::VK_KHR_acceleration_structure[]
-  * [[VUID-vkUpdateDescriptorSets-pDescriptorWrites-06240]]
-    For each element [eq]#i# where
-    pname:pDescriptorWrites[i].pname:descriptorType is
-    ename:VK_DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_KHR, elements of the
-    pname:pAccelerationStructures member of a
-    slink:VkWriteDescriptorSetAccelerationStructureKHR structure in the
-    pname:pNext chain of pname:pDescriptorWrites[i] must: have been created
-    on pname:device
-endif::VK_KHR_acceleration_structure[]
-ifdef::VK_NV_ray_tracing[]
-  * [[VUID-vkUpdateDescriptorSets-pDescriptorWrites-06241]]
-    For each element [eq]#i# where
-    pname:pDescriptorWrites[i].pname:descriptorType is
-    ename:VK_DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_NV, elements of the
-    pname:pAccelerationStructures member of a
-    slink:VkWriteDescriptorSetAccelerationStructureNV structure in the
-    pname:pNext chain of pname:pDescriptorWrites[i] must: have been created
-    on pname:device
-endif::VK_NV_ray_tracing[]
-ifndef::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
-  * [[VUID-vkUpdateDescriptorSets-dstSet-00314]]
-    The pname:dstSet member of each element of pname:pDescriptorWrites or
-    pname:pDescriptorCopies must: not be used by any command that was
-    recorded to a command buffer which is in the <<commandbuffers-lifecycle,
-    pending state>>
-endif::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
-ifdef::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
-  * [[VUID-vkUpdateDescriptorSets-None-03047]]
-    Descriptor bindings updated by this command which were created without
-    the ename:VK_DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT or
-    ename:VK_DESCRIPTOR_BINDING_UPDATE_UNUSED_WHILE_PENDING_BIT bits set
-    must: not be used by any command that was recorded to a command buffer
-    which is in the <<commandbuffers-lifecycle,pending state>>
-endif::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
-****
-
-include::{generated}/validity/protos/vkUpdateDescriptorSets.txt[]
---
-
-[open,refpage='VkWriteDescriptorSet',desc='Structure specifying the parameters of a descriptor set write operation',type='structs']
---
-The sname:VkWriteDescriptorSet structure is defined as:
-
-include::{generated}/api/structs/VkWriteDescriptorSet.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:dstSet is the destination descriptor set to update.
-  * pname:dstBinding is the descriptor binding within that set.
-  * pname:dstArrayElement is the starting element in that array.
-ifdef::VK_EXT_inline_uniform_block[]
-    If the descriptor binding identified by pname:dstSet and
-    pname:dstBinding has a descriptor type of
-    ename:VK_DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK_EXT then
-    pname:dstArrayElement specifies the starting byte offset within the
-    binding.
-endif::VK_EXT_inline_uniform_block[]
-  * pname:descriptorCount is the number of descriptors to update.
-ifdef::VK_EXT_inline_uniform_block[]
-    If the descriptor binding identified by pname:dstSet and
-    pname:dstBinding has a descriptor type of
-    ename:VK_DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK_EXT, then
-    pname:descriptorCount specifies the number of bytes to update.
-    Otherwise,
-endif::VK_EXT_inline_uniform_block[]
-    pname:descriptorCount is one of
-  ** the number of elements in pname:pImageInfo
-  ** the number of elements in pname:pBufferInfo
-  ** the number of elements in pname:pTexelBufferView
-ifdef::VK_EXT_inline_uniform_block[]
-  ** a value matching the pname:dataSize member of a
-     slink:VkWriteDescriptorSetInlineUniformBlockEXT structure in the
-     pname:pNext chain
-endif::VK_EXT_inline_uniform_block[]
-ifdef::VK_NV_ray_tracing,VK_KHR_acceleration_structure[]
-  ** a value matching the pname:accelerationStructureCount of a
-     slink:VkWriteDescriptorSetAccelerationStructureKHR structure in the
-     pname:pNext chain
-endif::VK_NV_ray_tracing,VK_KHR_acceleration_structure[]
-  * pname:descriptorType is a elink:VkDescriptorType specifying the type of
-    each descriptor in pname:pImageInfo, pname:pBufferInfo, or
-    pname:pTexelBufferView, as described below.
-ifdef::VK_VALVE_mutable_descriptor_type[]
-    If sname:VkDescriptorSetLayoutBinding for pname:dstSet at
-    pname:dstBinding is not equal to ename:VK_DESCRIPTOR_TYPE_MUTABLE_VALVE,
-    pname:descriptorType must:
-endif::VK_VALVE_mutable_descriptor_type[]
-ifndef::VK_VALVE_mutable_descriptor_type[]
-    It must:
-endif::VK_VALVE_mutable_descriptor_type[]
-    be the same type as that specified in sname:VkDescriptorSetLayoutBinding
-    for pname:dstSet at pname:dstBinding.
-    The type of the descriptor also controls which array the descriptors are
-    taken from.
-  * pname:pImageInfo is a pointer to an array of slink:VkDescriptorImageInfo
-    structures or is ignored, as described below.
-  * pname:pBufferInfo is a pointer to an array of
-    slink:VkDescriptorBufferInfo structures or is ignored, as described
-    below.
-  * pname:pTexelBufferView is a pointer to an array of slink:VkBufferView
-    handles as described in the <<resources-buffer-views,Buffer Views>>
-    section or is ignored, as described below.
-
-Only one of pname:pImageInfo, pname:pBufferInfo, or pname:pTexelBufferView
-members is used according to the descriptor type specified in the
-pname:descriptorType member of the containing sname:VkWriteDescriptorSet
-structure,
-ifdef::VK_EXT_inline_uniform_block[]
-or none of them in case pname:descriptorType is
-ename:VK_DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK_EXT, in which case the source
-data for the descriptor writes is taken from the
-slink:VkWriteDescriptorSetInlineUniformBlockEXT structure included in the
-pname:pNext chain of sname:VkWriteDescriptorSet,
-endif::VK_EXT_inline_uniform_block[]
-ifdef::VK_KHR_acceleration_structure[]
-or if pname:descriptorType is
-ename:VK_DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_KHR, in which case the
-source data for the descriptor writes is taken from the
-slink:VkWriteDescriptorSetAccelerationStructureKHR structure in the
-pname:pNext chain of sname:VkWriteDescriptorSet,
-endif::VK_KHR_acceleration_structure[]
-ifdef::VK_NV_ray_tracing[]
-or if pname:descriptorType is
-ename:VK_DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_NV, in which case the source
-data for the descriptor writes is taken from the
-slink:VkWriteDescriptorSetAccelerationStructureNV structure in the
-pname:pNext chain of sname:VkWriteDescriptorSet,
-endif::VK_NV_ray_tracing[]
-as specified below.
-
-ifdef::VK_EXT_robustness2[]
-If the <<features-nullDescriptor,nullDescriptor>> feature is enabled, the
-buffer,
-ifdef::VK_KHR_acceleration_structure[]
-acceleration structure,
-endif::VK_KHR_acceleration_structure[]
-imageView, or bufferView can: be dlink:VK_NULL_HANDLE.
-Loads from a null descriptor return zero values and stores and atomics to a
-null descriptor are discarded.
-ifdef::VK_KHR_acceleration_structure[]
-A null acceleration structure descriptor results in the miss shader being
-invoked.
-endif::VK_KHR_acceleration_structure[]
-endif::VK_EXT_robustness2[]
-
-ifdef::VK_VALVE_mutable_descriptor_type[]
-If the destination descriptor is a mutable descriptor, the active descriptor
-type for the destination descriptor becomes pname:descriptorType.
-endif::VK_VALVE_mutable_descriptor_type[]
-
-[[descriptorsets-updates-consecutive, consecutive binding updates]]
-If the pname:dstBinding has fewer than pname:descriptorCount array elements
-remaining starting from pname:dstArrayElement, then the remainder will be
-used to update the subsequent binding - [eq]#pname:dstBinding+1# starting at
-array element zero.
-If a binding has a pname:descriptorCount of zero, it is skipped.
-This behavior applies recursively, with the update affecting consecutive
-bindings as needed to update all pname:descriptorCount descriptors.
-Consecutive bindings must: have identical elink:VkDescriptorType,
-tlink:VkShaderStageFlags,
-ifdef::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
-elink:VkDescriptorBindingFlagBits,
-endif::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
-and immutable samplers references.
-
-ifdef::VK_EXT_inline_uniform_block[]
-[NOTE]
-.Note
-====
-The same behavior applies to bindings with a descriptor type of
-ename:VK_DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK_EXT where
-pname:descriptorCount specifies the number of bytes to update while
-pname:dstArrayElement specifies the starting byte offset, thus in this case
-if the pname:dstBinding has a smaller byte size than the sum of
-pname:dstArrayElement and pname:descriptorCount, then the remainder will be
-used to update the subsequent binding - [eq]#pname:dstBinding+1# starting at
-offset zero.
-This falls out as a special case of the above rule.
-====
-endif::VK_EXT_inline_uniform_block[]
-
-.Valid Usage
-****
-  * [[VUID-VkWriteDescriptorSet-dstBinding-00315]]
-    pname:dstBinding must: be less than or equal to the maximum value of
-    pname:binding of all slink:VkDescriptorSetLayoutBinding structures
-    specified when pname:dstSet's descriptor set layout was created
-  * [[VUID-VkWriteDescriptorSet-dstBinding-00316]]
-    pname:dstBinding must: be a binding with a non-zero
-    pname:descriptorCount
-  * [[VUID-VkWriteDescriptorSet-descriptorCount-00317]]
-    All consecutive bindings updated via a single sname:VkWriteDescriptorSet
-    structure, except those with a pname:descriptorCount of zero, must: have
-    identical pname:descriptorType and pname:stageFlags
-  * [[VUID-VkWriteDescriptorSet-descriptorCount-00318]]
-    All consecutive bindings updated via a single sname:VkWriteDescriptorSet
-    structure, except those with a pname:descriptorCount of zero, must: all
-    either use immutable samplers or must: all not use immutable samplers
-  * [[VUID-VkWriteDescriptorSet-descriptorType-00319]]
-    pname:descriptorType must: match the type of pname:dstBinding within
-    pname:dstSet
-  * [[VUID-VkWriteDescriptorSet-dstSet-00320]]
-    pname:dstSet must: be a valid slink:VkDescriptorSet handle
-  * [[VUID-VkWriteDescriptorSet-dstArrayElement-00321]]
-    The sum of pname:dstArrayElement and pname:descriptorCount must: be less
-    than or equal to the number of array elements in the descriptor set
-    binding specified by pname:dstBinding, and all applicable consecutive
-    bindings, as described by <<descriptorsets-updates-consecutive>>
-ifdef::VK_EXT_inline_uniform_block[]
-  * [[VUID-VkWriteDescriptorSet-descriptorType-02219]]
-    If pname:descriptorType is
-    ename:VK_DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK_EXT, pname:dstArrayElement
-    must: be an integer multiple of `4`
-  * [[VUID-VkWriteDescriptorSet-descriptorType-02220]]
-    If pname:descriptorType is
-    ename:VK_DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK_EXT, pname:descriptorCount
-    must: be an integer multiple of `4`
-endif::VK_EXT_inline_uniform_block[]
-  * [[VUID-VkWriteDescriptorSet-descriptorType-00322]]
-    If pname:descriptorType is ename:VK_DESCRIPTOR_TYPE_SAMPLER,
-    ename:VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER,
-    ename:VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE,
-    ename:VK_DESCRIPTOR_TYPE_STORAGE_IMAGE, or
-    ename:VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT, pname:pImageInfo must: be a
-    valid pointer to an array of pname:descriptorCount valid
-    sname:VkDescriptorImageInfo structures
-  * [[VUID-VkWriteDescriptorSet-descriptorType-02994]]
-    If pname:descriptorType is ename:VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER
-    or ename:VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER, each element of
-    pname:pTexelBufferView must: be either a valid sname:VkBufferView handle
-    or dlink:VK_NULL_HANDLE
-  * [[VUID-VkWriteDescriptorSet-descriptorType-02995]]
-    If pname:descriptorType is ename:VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER
-    or ename:VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER and the
-    <<features-nullDescriptor,nullDescriptor>> feature is not enabled, each
-    element of pname:pTexelBufferView must: not be dlink:VK_NULL_HANDLE
-  * [[VUID-VkWriteDescriptorSet-descriptorType-00324]]
-    If pname:descriptorType is ename:VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER,
-    ename:VK_DESCRIPTOR_TYPE_STORAGE_BUFFER,
-    ename:VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC, or
-    ename:VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC, pname:pBufferInfo must:
-    be a valid pointer to an array of pname:descriptorCount valid
-    sname:VkDescriptorBufferInfo structures
-  * [[VUID-VkWriteDescriptorSet-descriptorType-00325]]
-    If pname:descriptorType is ename:VK_DESCRIPTOR_TYPE_SAMPLER or
-    ename:VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, and pname:dstSet was
-    not allocated with a layout that included immutable samplers for
-    pname:dstBinding with pname:descriptorType, the pname:sampler member of
-    each element of pname:pImageInfo must: be a valid sname:VkSampler object
-  * [[VUID-VkWriteDescriptorSet-descriptorType-02996]]
-    If pname:descriptorType is
-    ename:VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER,
-    ename:VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE,
-    ename:VK_DESCRIPTOR_TYPE_STORAGE_IMAGE, or
-    ename:VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT, the pname:imageView member of
-    each element of pname:pImageInfo must: be either a valid
-    sname:VkImageView handle or dlink:VK_NULL_HANDLE
-  * [[VUID-VkWriteDescriptorSet-descriptorType-02997]]
-    If pname:descriptorType is
-    ename:VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER,
-    ename:VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE,
-    ename:VK_DESCRIPTOR_TYPE_STORAGE_IMAGE, or
-    ename:VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT and the
-    <<features-nullDescriptor,nullDescriptor>> feature is not enabled, the
-    pname:imageView member of each element of pname:pImageInfo must: not be
-    dlink:VK_NULL_HANDLE
-ifdef::VK_EXT_inline_uniform_block[]
-  * [[VUID-VkWriteDescriptorSet-descriptorType-02221]]
-    If pname:descriptorType is
-    ename:VK_DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK_EXT, the pname:pNext chain
-    must: include a slink:VkWriteDescriptorSetInlineUniformBlockEXT
-    structure whose pname:dataSize member equals pname:descriptorCount
-endif::VK_EXT_inline_uniform_block[]
-ifdef::VK_KHR_acceleration_structure[]
-  * [[VUID-VkWriteDescriptorSet-descriptorType-02382]]
-    If pname:descriptorType is
-    ename:VK_DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_KHR, the pname:pNext
-    chain must: include a slink:VkWriteDescriptorSetAccelerationStructureKHR
-    structure whose pname:accelerationStructureCount member equals
-    pname:descriptorCount
-endif::VK_KHR_acceleration_structure[]
-ifdef::VK_NV_ray_tracing[]
-  * [[VUID-VkWriteDescriptorSet-descriptorType-03817]]
-    If pname:descriptorType is
-    ename:VK_DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_NV, the pname:pNext
-    chain must: include a slink:VkWriteDescriptorSetAccelerationStructureNV
-    structure whose pname:accelerationStructureCount member equals
-    pname:descriptorCount
-endif::VK_NV_ray_tracing[]
-ifdef::VK_VULKAN_1_1,VK_KHR_sampler_ycbcr_conversion[]
-  * [[VUID-VkWriteDescriptorSet-descriptorType-01946]]
-    If pname:descriptorType is ename:VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE, then
-    the pname:imageView member of each pname:pImageInfo element must: have
-    been created without a sname:VkSamplerYcbcrConversionInfo structure in
-    its pname:pNext chain
-  * [[VUID-VkWriteDescriptorSet-descriptorType-02738]]
-    If pname:descriptorType is
-    ename:VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, and if any element of
-    pname:pImageInfo has a pname:imageView member that was created with a
-    sname:VkSamplerYcbcrConversionInfo structure in its pname:pNext chain,
-    then pname:dstSet must: have been allocated with a layout that included
-    immutable samplers for pname:dstBinding, and the corresponding immutable
-    sampler must: have been created with an _identically defined_
-    sname:VkSamplerYcbcrConversionInfo object
-  * [[VUID-VkWriteDescriptorSet-descriptorType-01948]]
-    If pname:descriptorType is
-    ename:VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, and pname:dstSet was
-    allocated with a layout that included immutable samplers for
-    pname:dstBinding, then the pname:imageView member of each element of
-    pname:pImageInfo which corresponds to an immutable sampler that enables
-    <<samplers-YCbCr-conversion,sampler {YCbCr} conversion>> must: have been
-    created with a sname:VkSamplerYcbcrConversionInfo structure in its
-    pname:pNext chain with an _identically defined_
-    sname:VkSamplerYcbcrConversionInfo to the corresponding immutable
-    sampler
-endif::VK_VULKAN_1_1,VK_KHR_sampler_ycbcr_conversion[]
-  * [[VUID-VkWriteDescriptorSet-descriptorType-00327]]
-    If pname:descriptorType is ename:VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER or
-    ename:VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC, the pname:offset member
-    of each element of pname:pBufferInfo must: be a multiple of
-    sname:VkPhysicalDeviceLimits::pname:minUniformBufferOffsetAlignment
-  * [[VUID-VkWriteDescriptorSet-descriptorType-00328]]
-    If pname:descriptorType is ename:VK_DESCRIPTOR_TYPE_STORAGE_BUFFER or
-    ename:VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC, the pname:offset member
-    of each element of pname:pBufferInfo must: be a multiple of
-    sname:VkPhysicalDeviceLimits::pname:minStorageBufferOffsetAlignment
-  * [[VUID-VkWriteDescriptorSet-descriptorType-00329]]
-    If pname:descriptorType is ename:VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER,
-    ename:VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC,
-    ename:VK_DESCRIPTOR_TYPE_STORAGE_BUFFER, or
-    ename:VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC, and the pname:buffer
-    member of any element of pname:pBufferInfo is the handle of a non-sparse
-    buffer, then that buffer must: be bound completely and contiguously to a
-    single sname:VkDeviceMemory object
-  * [[VUID-VkWriteDescriptorSet-descriptorType-00330]]
-    If pname:descriptorType is ename:VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER or
-    ename:VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC, the pname:buffer member
-    of each element of pname:pBufferInfo must: have been created with
-    ename:VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT set
-  * [[VUID-VkWriteDescriptorSet-descriptorType-00331]]
-    If pname:descriptorType is ename:VK_DESCRIPTOR_TYPE_STORAGE_BUFFER or
-    ename:VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC, the pname:buffer member
-    of each element of pname:pBufferInfo must: have been created with
-    ename:VK_BUFFER_USAGE_STORAGE_BUFFER_BIT set
-  * [[VUID-VkWriteDescriptorSet-descriptorType-00332]]
-    If pname:descriptorType is ename:VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER or
-    ename:VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC, the pname:range member
-    of each element of pname:pBufferInfo, or the effective range if
-    pname:range is ename:VK_WHOLE_SIZE, must: be less than or equal to
-    sname:VkPhysicalDeviceLimits::pname:maxUniformBufferRange
-  * [[VUID-VkWriteDescriptorSet-descriptorType-00333]]
-    If pname:descriptorType is ename:VK_DESCRIPTOR_TYPE_STORAGE_BUFFER or
-    ename:VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC, the pname:range member
-    of each element of pname:pBufferInfo, or the effective range if
-    pname:range is ename:VK_WHOLE_SIZE, must: be less than or equal to
-    sname:VkPhysicalDeviceLimits::pname:maxStorageBufferRange
-  * [[VUID-VkWriteDescriptorSet-descriptorType-00334]]
-    If pname:descriptorType is
-    ename:VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER, the sname:VkBuffer that
-    each element of pname:pTexelBufferView was created from must: have been
-    created with ename:VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT set
-  * [[VUID-VkWriteDescriptorSet-descriptorType-00335]]
-    If pname:descriptorType is
-    ename:VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER, the sname:VkBuffer that
-    each element of pname:pTexelBufferView was created from must: have been
-    created with ename:VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT set
-  * [[VUID-VkWriteDescriptorSet-descriptorType-00336]]
-    If pname:descriptorType is ename:VK_DESCRIPTOR_TYPE_STORAGE_IMAGE or
-    ename:VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT, the pname:imageView member of
-    each element of pname:pImageInfo must: have been created with the
-    identity swizzle
-  * [[VUID-VkWriteDescriptorSet-descriptorType-00337]]
-    If pname:descriptorType is ename:VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE or
-    ename:VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, the pname:imageView
-    member of each element of pname:pImageInfo must: have been created with
-    ename:VK_IMAGE_USAGE_SAMPLED_BIT set
-  * [[VUID-VkWriteDescriptorSet-descriptorType-04149]]
-    If pname:descriptorType is ename:VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE the
-    pname:imageLayout member of each element of pname:pImageInfo must: be a
-    member of the list given in <<descriptorsets-sampledimage, Sampled
-    Image>>
-  * [[VUID-VkWriteDescriptorSet-descriptorType-04150]]
-    If pname:descriptorType is
-    ename:VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER the pname:imageLayout
-    member of each element of pname:pImageInfo must: be a member of the list
-    given in <<descriptorsets-combinedimagesampler, Combined Image Sampler>>
-  * [[VUID-VkWriteDescriptorSet-descriptorType-04151]]
-    If pname:descriptorType is ename:VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT the
-    pname:imageLayout member of each element of pname:pImageInfo must: be a
-    member of the list given in <<descriptorsets-inputattachment, Input
-    Attachment>>
-  * [[VUID-VkWriteDescriptorSet-descriptorType-04152]]
-    If pname:descriptorType is ename:VK_DESCRIPTOR_TYPE_STORAGE_IMAGE the
-    pname:imageLayout member of each element of pname:pImageInfo must: be a
-    member of the list given in <<descriptorsets-storageimage, Storage
-    Image>>
-  * [[VUID-VkWriteDescriptorSet-descriptorType-00338]]
-    If pname:descriptorType is ename:VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT,
-    the pname:imageView member of each element of pname:pImageInfo must:
-    have been created with ename:VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT set
-  * [[VUID-VkWriteDescriptorSet-descriptorType-00339]]
-    If pname:descriptorType is ename:VK_DESCRIPTOR_TYPE_STORAGE_IMAGE, the
-    pname:imageView member of each element of pname:pImageInfo must: have
-    been created with ename:VK_IMAGE_USAGE_STORAGE_BIT set
-  * [[VUID-VkWriteDescriptorSet-descriptorType-02752]]
-    If pname:descriptorType is ename:VK_DESCRIPTOR_TYPE_SAMPLER, then
-    pname:dstSet must: not have been allocated with a layout that included
-    immutable samplers for pname:dstBinding
-ifdef::VK_VALVE_mutable_descriptor_type[]
-  * [[VUID-VkWriteDescriptorSet-dstSet-04611]]
-    If the sname:VkDescriptorSetLayoutBinding for pname:dstSet at
-    pname:dstBinding is ename:VK_DESCRIPTOR_TYPE_MUTABLE_VALVE, the new
-    active descriptor type pname:descriptorType must: exist in the
-    corresponding pname:pMutableDescriptorTypeLists list for
-    pname:dstBinding
-endif::VK_VALVE_mutable_descriptor_type[]
-****
-
-include::{generated}/validity/structs/VkWriteDescriptorSet.txt[]
---
-
-[open,refpage='VkDescriptorType',desc='Specifies the type of a descriptor in a descriptor set',type='enums']
---
-The type of descriptors in a descriptor set is specified by
-slink:VkWriteDescriptorSet::pname:descriptorType, which must: be one of the
-values:
-
-include::{generated}/api/enums/VkDescriptorType.txt[]
-
-  * ename:VK_DESCRIPTOR_TYPE_SAMPLER specifies a <<descriptorsets-sampler,
-    sampler descriptor>>.
-  * ename:VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER specifies a
-    <<descriptorsets-combinedimagesampler, combined image sampler
-    descriptor>>.
-  * ename:VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE specifies a
-    <<descriptorsets-sampledimage, sampled image descriptor>>.
-  * ename:VK_DESCRIPTOR_TYPE_STORAGE_IMAGE specifies a
-    <<descriptorsets-storageimage, storage image descriptor>>.
-  * ename:VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER specifies a
-    <<descriptorsets-uniformtexelbuffer, uniform texel buffer descriptor>>.
-  * ename:VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER specifies a
-    <<descriptorsets-storagetexelbuffer, storage texel buffer descriptor>>.
-  * ename:VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER specifies a
-    <<descriptorsets-uniformbuffer, uniform buffer descriptor>>.
-  * ename:VK_DESCRIPTOR_TYPE_STORAGE_BUFFER specifies a
-    <<descriptorsets-storagebuffer, storage buffer descriptor>>.
-  * ename:VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC specifies a
-    <<descriptorsets-uniformbufferdynamic, dynamic uniform buffer
-    descriptor>>.
-  * ename:VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC specifies a
-    <<descriptorsets-storagebufferdynamic, dynamic storage buffer
-    descriptor>>.
-  * ename:VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT specifies an
-    <<descriptorsets-inputattachment, input attachment descriptor>>.
-ifdef::VK_EXT_inline_uniform_block[]
-  * ename:VK_DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK_EXT specifies an
-    <<descriptorsets-inlineuniformblock, inline uniform block>>.
-endif::VK_EXT_inline_uniform_block[]
-ifdef::VK_VALVE_mutable_descriptor_type[]
-  * ename:VK_DESCRIPTOR_TYPE_MUTABLE_VALVE specifies a
-    <<descriptorsets-mutable, descriptor of mutable type>>.
-endif::VK_VALVE_mutable_descriptor_type[]
-
-When a descriptor set is updated via elements of slink:VkWriteDescriptorSet,
-members of pname:pImageInfo, pname:pBufferInfo and pname:pTexelBufferView
-are only accessed by the implementation when they correspond to descriptor
-type being defined - otherwise they are ignored.
-The members accessed are as follows for each descriptor type:
-
-  * For ename:VK_DESCRIPTOR_TYPE_SAMPLER, only the pname:sampler member of
-    each element of slink:VkWriteDescriptorSet::pname:pImageInfo is
-    accessed.
-  * For ename:VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE,
-    ename:VK_DESCRIPTOR_TYPE_STORAGE_IMAGE, or
-    ename:VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT, only the pname:imageView and
-    pname:imageLayout members of each element of
-    slink:VkWriteDescriptorSet::pname:pImageInfo are accessed.
-  * For ename:VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, all members of each
-    element of slink:VkWriteDescriptorSet::pname:pImageInfo are accessed.
-  * For ename:VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER,
-    ename:VK_DESCRIPTOR_TYPE_STORAGE_BUFFER,
-    ename:VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC, or
-    ename:VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC, all members of each
-    element of slink:VkWriteDescriptorSet::pname:pBufferInfo are accessed.
-  * For ename:VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER or
-    ename:VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER, each element of
-    slink:VkWriteDescriptorSet::pname:pTexelBufferView is accessed.
-
-ifdef::VK_EXT_inline_uniform_block[]
-When updating descriptors with a pname:descriptorType of
-ename:VK_DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK_EXT, none of the
-pname:pImageInfo, pname:pBufferInfo, or pname:pTexelBufferView members are
-accessed, instead the source data of the descriptor update operation is
-taken from the slink:VkWriteDescriptorSetInlineUniformBlockEXT structure in
-the pname:pNext chain of sname:VkWriteDescriptorSet.
-endif::VK_EXT_inline_uniform_block[]
-ifdef::VK_KHR_acceleration_structure[]
-When updating descriptors with a pname:descriptorType of
-ename:VK_DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_KHR, none of the
-pname:pImageInfo, pname:pBufferInfo, or pname:pTexelBufferView members are
-accessed, instead the source data of the descriptor update operation is
-taken from the slink:VkWriteDescriptorSetAccelerationStructureKHR structure
-in the pname:pNext chain of sname:VkWriteDescriptorSet.
-endif::VK_KHR_acceleration_structure[]
-ifdef::VK_NV_ray_tracing[]
-When updating descriptors with a pname:descriptorType of
-ename:VK_DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_NV, none of the
-pname:pImageInfo, pname:pBufferInfo, or pname:pTexelBufferView members are
-accessed, instead the source data of the descriptor update operation is
-taken from the slink:VkWriteDescriptorSetAccelerationStructureNV structure
-in the pname:pNext chain of sname:VkWriteDescriptorSet.
-endif::VK_NV_ray_tracing[]
---
-
-[open,refpage='VkDescriptorBufferInfo',desc='Structure specifying descriptor buffer information',type='structs']
---
-The sname:VkDescriptorBufferInfo structure is defined as:
-
-include::{generated}/api/structs/VkDescriptorBufferInfo.txt[]
-
-  * pname:buffer is
-ifdef::VK_EXT_robustness2[]
-dlink:VK_NULL_HANDLE or
-endif::VK_EXT_robustness2[]
-the buffer resource.
-  * pname:offset is the offset in bytes from the start of pname:buffer.
-    Access to buffer memory via this descriptor uses addressing that is
-    relative to this starting offset.
-  * pname:range is the size in bytes that is used for this descriptor
-    update, or ename:VK_WHOLE_SIZE to use the range from pname:offset to the
-    end of the buffer.
-
-[NOTE]
-.Note
-====
-When setting pname:range to ename:VK_WHOLE_SIZE, the effective range must:
-not be larger than the maximum range for the descriptor type
-(<<limits-maxUniformBufferRange, pname:maxUniformBufferRange>> or
-<<limits-maxStorageBufferRange, pname:maxStorageBufferRange>>).
-This means that ename:VK_WHOLE_SIZE is not typically useful in the common
-case where uniform buffer descriptors are suballocated from a buffer that is
-much larger than pname:maxUniformBufferRange.
-====
-
-For ename:VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC and
-ename:VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC descriptor types,
-pname:offset is the base offset from which the dynamic offset is applied and
-pname:range is the static size used for all dynamic offsets.
-
-.Valid Usage
-****
-  * [[VUID-VkDescriptorBufferInfo-offset-00340]]
-    pname:offset must: be less than the size of pname:buffer
-  * [[VUID-VkDescriptorBufferInfo-range-00341]]
-    If pname:range is not equal to ename:VK_WHOLE_SIZE, pname:range must: be
-    greater than `0`
-  * [[VUID-VkDescriptorBufferInfo-range-00342]]
-    If pname:range is not equal to ename:VK_WHOLE_SIZE, pname:range must: be
-    less than or equal to the size of pname:buffer minus pname:offset
-  * [[VUID-VkDescriptorBufferInfo-buffer-02998]]
-    If the <<features-nullDescriptor,nullDescriptor>> feature is not
-    enabled, pname:buffer must: not be dlink:VK_NULL_HANDLE
-ifdef::VK_EXT_robustness2[]
-  * [[VUID-VkDescriptorBufferInfo-buffer-02999]]
-    If pname:buffer is dlink:VK_NULL_HANDLE, pname:offset must: be zero and
-    pname:range must: be ename:VK_WHOLE_SIZE
-endif::VK_EXT_robustness2[]
-****
-
-include::{generated}/validity/structs/VkDescriptorBufferInfo.txt[]
---
-
-[open,refpage='VkDescriptorImageInfo',desc='Structure specifying descriptor image information',type='structs']
---
-The sname:VkDescriptorImageInfo structure is defined as:
-
-include::{generated}/api/structs/VkDescriptorImageInfo.txt[]
-
-  * pname:sampler is a sampler handle, and is used in descriptor updates for
-    types ename:VK_DESCRIPTOR_TYPE_SAMPLER and
-    ename:VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER if the binding being
-    updated does not use immutable samplers.
-  * pname:imageView is
-ifdef::VK_EXT_robustness2[]
-    dlink:VK_NULL_HANDLE or
-endif::VK_EXT_robustness2[]
-    an image view handle, and is used in descriptor updates for types
-    ename:VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE,
-    ename:VK_DESCRIPTOR_TYPE_STORAGE_IMAGE,
-    ename:VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, and
-    ename:VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT.
-  * pname:imageLayout is the layout that the image subresources accessible
-    from pname:imageView will be in at the time this descriptor is accessed.
-    pname:imageLayout is used in descriptor updates for types
-    ename:VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE,
-    ename:VK_DESCRIPTOR_TYPE_STORAGE_IMAGE,
-    ename:VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, and
-    ename:VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT.
-
-Members of sname:VkDescriptorImageInfo that are not used in an update (as
-described above) are ignored.
-
-.Valid Usage
-****
-ifdef::VK_VERSION_1_1,VK_KHR_maintenance1[]
-  * [[VUID-VkDescriptorImageInfo-imageView-00343]]
-    pname:imageView must: not be 2D or 2D array image view created from a 3D
-    image
-endif::VK_VERSION_1_1,VK_KHR_maintenance1[]
-  * [[VUID-VkDescriptorImageInfo-imageView-01976]]
-    If pname:imageView is created from a depth/stencil image, the
-    pname:aspectMask used to create the pname:imageView must: include either
-    ename:VK_IMAGE_ASPECT_DEPTH_BIT or ename:VK_IMAGE_ASPECT_STENCIL_BIT but
-    not both
-  * [[VUID-VkDescriptorImageInfo-imageLayout-00344]]
-    pname:imageLayout must: match the actual elink:VkImageLayout of each
-    subresource accessible from pname:imageView at the time this descriptor
-    is accessed as defined by the <<resources-image-layouts-matching-rule,
-    image layout matching rules>>
-ifdef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
-  * [[VUID-VkDescriptorImageInfo-sampler-01564]]
-    If pname:sampler is used and the elink:VkFormat of the image is a
-    <<formats-requiring-sampler-ycbcr-conversion,multi-planar format>>, the
-    image must: have been created with
-    ename:VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT, and the pname:aspectMask of
-    the pname:imageView must: be ename:VK_IMAGE_ASPECT_PLANE_0_BIT,
-    ename:VK_IMAGE_ASPECT_PLANE_1_BIT or (for three-plane formats only)
-    ename:VK_IMAGE_ASPECT_PLANE_2_BIT
-endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
-ifdef::VK_KHR_portability_subset[]
-  * [[VUID-VkDescriptorImageInfo-mutableComparisonSamplers-04450]]
-    If the `apiext:VK_KHR_portability_subset` extension is enabled, and
-    slink:VkPhysicalDevicePortabilitySubsetFeaturesKHR::pname:mutableComparisonSamplers
-    is ename:VK_FALSE, then pname:sampler must: have been created with
-    slink:VkSamplerCreateInfo::pname:compareEnable set to ename:VK_FALSE
-endif::VK_KHR_portability_subset[]
-****
-
-
-include::{generated}/validity/structs/VkDescriptorImageInfo.txt[]
---
-
-ifdef::VK_EXT_inline_uniform_block[]
-[open,refpage='VkWriteDescriptorSetInlineUniformBlockEXT',desc='Structure specifying inline uniform block data',type='structs']
---
-If the pname:descriptorType member of slink:VkWriteDescriptorSet is
-ename:VK_DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK_EXT then the data to write to
-the descriptor set is specified through a
-sname:VkWriteDescriptorSetInlineUniformBlockEXT structure included in the
-pname:pNext chain of sname:VkWriteDescriptorSet.
-
-The sname:VkWriteDescriptorSetInlineUniformBlockEXT structure is defined as:
-
-include::{generated}/api/structs/VkWriteDescriptorSetInlineUniformBlockEXT.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:dataSize is the number of bytes of inline uniform block data
-    pointed to by pname:pData.
-  * pname:pData is a pointer to pname:dataSize number of bytes of data to
-    write to the inline uniform block.
-
-.Valid Usage
-****
-  * [[VUID-VkWriteDescriptorSetInlineUniformBlockEXT-dataSize-02222]]
-    pname:dataSize must: be an integer multiple of `4`
-****
-
-include::{generated}/validity/structs/VkWriteDescriptorSetInlineUniformBlockEXT.txt[]
---
-endif::VK_EXT_inline_uniform_block[]
-
-ifdef::VK_KHR_acceleration_structure[]
-[open,refpage='VkWriteDescriptorSetAccelerationStructureKHR',desc='Structure specifying acceleration structure descriptor information',type='structs']
---
-:refpage: VkWriteDescriptorSetAccelerationStructureKHR
-
-The sname:VkWriteDescriptorSetAccelerationStructureKHR structure is defined
-as:
-
-include::{generated}/api/structs/VkWriteDescriptorSetAccelerationStructureKHR.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:accelerationStructureCount is the number of elements in
-    pname:pAccelerationStructures.
-  * pname:pAccelerationStructures is a pointer to an array of
-    slink:VkAccelerationStructureKHR structures specifying the acceleration
-    structures to update.
-
-.Valid Usage
-****
-  * [[VUID-VkWriteDescriptorSetAccelerationStructureKHR-accelerationStructureCount-02236]]
-    pname:accelerationStructureCount must: be equal to pname:descriptorCount
-    in the extended structure
-  * [[VUID-VkWriteDescriptorSetAccelerationStructureKHR-pAccelerationStructures-03579]]
-    Each acceleration structure in pname:pAccelerationStructures must: have
-    been created with a pname:type of
-    ename:VK_ACCELERATION_STRUCTURE_TYPE_TOP_LEVEL_KHR or
-    ename:VK_ACCELERATION_STRUCTURE_TYPE_GENERIC_KHR
-  * [[VUID-VkWriteDescriptorSetAccelerationStructureKHR-pAccelerationStructures-03580]]
-    If the <<features-nullDescriptor,nullDescriptor>> feature is not
-    enabled, each element of pname:pAccelerationStructures must: not be
-    dlink:VK_NULL_HANDLE
-****
-
-include::{generated}/validity/structs/VkWriteDescriptorSetAccelerationStructureKHR.txt[]
---
-endif::VK_KHR_acceleration_structure[]
-
-ifdef::VK_NV_ray_tracing[]
-[open,refpage='VkWriteDescriptorSetAccelerationStructureNV',desc='Structure specifying acceleration structure descriptor information',type='structs']
---
-:refpage: VkWriteDescriptorSetAccelerationStructureNV
-
-The sname:VkWriteDescriptorSetAccelerationStructureNV structure is defined
-as:
-
-include::{generated}/api/structs/VkWriteDescriptorSetAccelerationStructureNV.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:accelerationStructureCount is the number of elements in
-    pname:pAccelerationStructures.
-  * pname:pAccelerationStructures is a pointer to an array of
-    slink:VkAccelerationStructureNV structures specifying the acceleration
-    structures to update.
-
-.Valid Usage
-****
-  * [[VUID-VkWriteDescriptorSetAccelerationStructureNV-accelerationStructureCount-03747]]
-    pname:accelerationStructureCount must: be equal to pname:descriptorCount
-    in the extended structure
-  * [[VUID-VkWriteDescriptorSetAccelerationStructureNV-pAccelerationStructures-03748]]
-    Each acceleration structure in pname:pAccelerationStructures must: have
-    been created with ename:VK_ACCELERATION_STRUCTURE_TYPE_TOP_LEVEL_KHR
-  * [[VUID-VkWriteDescriptorSetAccelerationStructureNV-pAccelerationStructures-03749]]
-    If the <<features-nullDescriptor,nullDescriptor>> feature is not
-    enabled, each member of pname:pAccelerationStructures must: not be
-    dlink:VK_NULL_HANDLE
-****
-
-include::{generated}/validity/structs/VkWriteDescriptorSetAccelerationStructureNV.txt[]
---
-endif::VK_NV_ray_tracing[]
-
-[open,refpage='VkCopyDescriptorSet',desc='Structure specifying a copy descriptor set operation',type='structs']
---
-The sname:VkCopyDescriptorSet structure is defined as:
-
-include::{generated}/api/structs/VkCopyDescriptorSet.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:srcSet, pname:srcBinding, and pname:srcArrayElement are the source
-    set, binding, and array element, respectively.
-ifdef::VK_EXT_inline_uniform_block[]
-    If the descriptor binding identified by pname:srcSet and
-    pname:srcBinding has a descriptor type of
-    ename:VK_DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK_EXT then
-    pname:srcArrayElement specifies the starting byte offset within the
-    binding to copy from.
-endif::VK_EXT_inline_uniform_block[]
-  * pname:dstSet, pname:dstBinding, and pname:dstArrayElement are the
-    destination set, binding, and array element, respectively.
-ifdef::VK_EXT_inline_uniform_block[]
-    If the descriptor binding identified by pname:dstSet and
-    pname:dstBinding has a descriptor type of
-    ename:VK_DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK_EXT then
-    pname:dstArrayElement specifies the starting byte offset within the
-    binding to copy to.
-endif::VK_EXT_inline_uniform_block[]
-  * pname:descriptorCount is the number of descriptors to copy from the
-    source to destination.
-    If pname:descriptorCount is greater than the number of remaining array
-    elements in the source or destination binding, those affect consecutive
-    bindings in a manner similar to slink:VkWriteDescriptorSet above.
-ifdef::VK_EXT_inline_uniform_block[]
-    If the descriptor binding identified by pname:srcSet and
-    pname:srcBinding has a descriptor type of
-    ename:VK_DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK_EXT then
-    pname:descriptorCount specifies the number of bytes to copy and the
-    remaining array elements in the source or destination binding refer to
-    the remaining number of bytes in those.
-endif::VK_EXT_inline_uniform_block[]
-
-ifdef::VK_VALVE_mutable_descriptor_type[]
-If the sname:VkDescriptorSetLayoutBinding for pname:dstBinding is
-ename:VK_DESCRIPTOR_TYPE_MUTABLE_VALVE and pname:srcBinding is not
-ename:VK_DESCRIPTOR_TYPE_MUTABLE_VALVE, the new active descriptor type
-becomes the descriptor type of pname:srcBinding.
-If both sname:VkDescriptorSetLayoutBinding for pname:srcBinding and
-pname:dstBinding are ename:VK_DESCRIPTOR_TYPE_MUTABLE_VALVE, the active
-descriptor type in each source descriptor is copied into the corresponding
-destination descriptor.
-The active descriptor type can: be different for each source descriptor.
-
-[NOTE]
-.Note
-====
-The intention is that copies to and from mutable descriptors is a simple
-memcpy.
-Copies between non-mutable and mutable descriptors are expected to require
-one memcpy per descriptor to handle the difference in size, but this use
-case with more than one pname:descriptorCount is considered rare.
-====
-endif::VK_VALVE_mutable_descriptor_type[]
-
-.Valid Usage
-****
-  * [[VUID-VkCopyDescriptorSet-srcBinding-00345]]
-    pname:srcBinding must: be a valid binding within pname:srcSet
-  * [[VUID-VkCopyDescriptorSet-srcArrayElement-00346]]
-    The sum of pname:srcArrayElement and pname:descriptorCount must: be less
-    than or equal to the number of array elements in the descriptor set
-    binding specified by pname:srcBinding, and all applicable consecutive
-    bindings, as described by <<descriptorsets-updates-consecutive>>
-  * [[VUID-VkCopyDescriptorSet-dstBinding-00347]]
-    pname:dstBinding must: be a valid binding within pname:dstSet
-  * [[VUID-VkCopyDescriptorSet-dstArrayElement-00348]]
-    The sum of pname:dstArrayElement and pname:descriptorCount must: be less
-    than or equal to the number of array elements in the descriptor set
-    binding specified by pname:dstBinding, and all applicable consecutive
-    bindings, as described by <<descriptorsets-updates-consecutive>>
-  * [[VUID-VkCopyDescriptorSet-dstBinding-02632]]
-    The type of pname:dstBinding within pname:dstSet must: be equal to the
-    type of pname:srcBinding within pname:srcSet
-  * [[VUID-VkCopyDescriptorSet-srcSet-00349]]
-    If pname:srcSet is equal to pname:dstSet, then the source and
-    destination ranges of descriptors must: not overlap, where the ranges
-    may: include array elements from consecutive bindings as described by
-    <<descriptorsets-updates-consecutive>>
-ifdef::VK_EXT_inline_uniform_block[]
-  * [[VUID-VkCopyDescriptorSet-srcBinding-02223]]
-    If the descriptor type of the descriptor set binding specified by
-    pname:srcBinding is ename:VK_DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK_EXT,
-    pname:srcArrayElement must: be an integer multiple of `4`
-  * [[VUID-VkCopyDescriptorSet-dstBinding-02224]]
-    If the descriptor type of the descriptor set binding specified by
-    pname:dstBinding is ename:VK_DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK_EXT,
-    pname:dstArrayElement must: be an integer multiple of `4`
-  * [[VUID-VkCopyDescriptorSet-srcBinding-02225]]
-    If the descriptor type of the descriptor set binding specified by either
-    pname:srcBinding or pname:dstBinding is
-    ename:VK_DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK_EXT, pname:descriptorCount
-    must: be an integer multiple of `4`
-endif::VK_EXT_inline_uniform_block[]
-ifdef::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
-  * [[VUID-VkCopyDescriptorSet-srcSet-01918]]
-    If pname:srcSet's layout was created with the
-    ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT flag
-    set, then pname:dstSet's layout must: also have been created with the
-    ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT flag
-    set
-ifdef::VK_VALVE_mutable_descriptor_type[]
-  * [[VUID-VkCopyDescriptorSet-srcSet-04885]]
-    If pname:srcSet's layout was created with neither
-    ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT nor
-    ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_HOST_ONLY_POOL_BIT_VALVE flags
-    set, then pname:dstSet's layout must: have been created without the
-    ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT flag
-    set
-endif::VK_VALVE_mutable_descriptor_type[]
-ifndef::VK_VALVE_mutable_descriptor_type[]
-  * [[VUID-VkCopyDescriptorSet-srcSet-04886]]
-    If pname:srcSet's layout was created without the
-    ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT flag
-    set, then pname:dstSet's layout must: also have been created without the
-    ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT flag
-    set
-endif::VK_VALVE_mutable_descriptor_type[]
-  * [[VUID-VkCopyDescriptorSet-srcSet-01920]]
-    If the descriptor pool from which pname:srcSet was allocated was created
-    with the ename:VK_DESCRIPTOR_POOL_CREATE_UPDATE_AFTER_BIND_BIT flag set,
-    then the descriptor pool from which pname:dstSet was allocated must:
-    also have been created with the
-    ename:VK_DESCRIPTOR_POOL_CREATE_UPDATE_AFTER_BIND_BIT flag set
-ifdef::VK_VALVE_mutable_descriptor_type[]
-  * [[VUID-VkCopyDescriptorSet-srcSet-04887]]
-    If the descriptor pool from which pname:srcSet was allocated was created
-    with neither ename:VK_DESCRIPTOR_POOL_CREATE_UPDATE_AFTER_BIND_BIT nor
-    ename:VK_DESCRIPTOR_POOL_CREATE_HOST_ONLY_BIT_VALVE flags set, then the
-    descriptor pool from which pname:dstSet was allocated must: have been
-    created without the
-    ename:VK_DESCRIPTOR_POOL_CREATE_UPDATE_AFTER_BIND_BIT flag set
-endif::VK_VALVE_mutable_descriptor_type[]
-ifndef::VK_VALVE_mutable_descriptor_type[]
-  * [[VUID-VkCopyDescriptorSet-srcSet-04888]]
-    If the descriptor pool from which pname:srcSet was allocated was created
-    without the ename:VK_DESCRIPTOR_POOL_CREATE_UPDATE_AFTER_BIND_BIT flag
-    set, then the descriptor pool from which pname:dstSet was allocated
-    must: also have been created without the
-    ename:VK_DESCRIPTOR_POOL_CREATE_UPDATE_AFTER_BIND_BIT flag set
-endif::VK_VALVE_mutable_descriptor_type[]
-endif::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
-  * [[VUID-VkCopyDescriptorSet-dstBinding-02753]]
-    If the descriptor type of the descriptor set binding specified by
-    pname:dstBinding is ename:VK_DESCRIPTOR_TYPE_SAMPLER, then pname:dstSet
-    must: not have been allocated with a layout that included immutable
-    samplers for pname:dstBinding
-ifdef::VK_VALVE_mutable_descriptor_type[]
-  * [[VUID-VkCopyDescriptorSet-dstSet-04612]]
-    If sname:VkDescriptorSetLayoutBinding for pname:dstSet at
-    pname:dstBinding is ename:VK_DESCRIPTOR_TYPE_MUTABLE_VALVE, the new
-    active descriptor type must: exist in the corresponding
-    pname:pMutableDescriptorTypeLists list for pname:dstBinding if the new
-    active descriptor type is not ename:VK_DESCRIPTOR_TYPE_MUTABLE_VALVE
-  * [[VUID-VkCopyDescriptorSet-srcSet-04613]]
-    If sname:VkDescriptorSetLayoutBinding for pname:srcSet at
-    pname:srcBinding is ename:VK_DESCRIPTOR_TYPE_MUTABLE_VALVE and the
-    sname:VkDescriptorSetLayoutBinding for pname:dstSet at pname:dstBinding
-    is not ename:VK_DESCRIPTOR_TYPE_MUTABLE_VALVE, the active descriptor
-    type for the source descriptor must: match the descriptor type of
-    pname:dstBinding
-  * [[VUID-VkCopyDescriptorSet-dstSet-04614]]
-    If sname:VkDescriptorSetLayoutBinding for pname:dstSet at
-    pname:dstBinding is ename:VK_DESCRIPTOR_TYPE_MUTABLE_VALVE, and the new
-    active descriptor type is ename:VK_DESCRIPTOR_TYPE_MUTABLE_VALVE, the
-    pname:pMutableDescriptorTypeLists for pname:srcBinding and
-    pname:dstBinding must: match exactly
-endif::VK_VALVE_mutable_descriptor_type[]
-****
-
-include::{generated}/validity/structs/VkCopyDescriptorSet.txt[]
---
-
-
-ifdef::VK_VERSION_1_1,VK_KHR_descriptor_update_template[]
-[[descriptorsets-updates-with-template]]
-=== Descriptor Update Templates
-
-[open,refpage='VkDescriptorUpdateTemplate',desc='Opaque handle to a descriptor update template',type='handles']
---
-A descriptor update template specifies a mapping from descriptor update
-information in host memory to descriptors in a descriptor set.
-It is designed to avoid passing redundant information to the driver when
-frequently updating the same set of descriptors in descriptor sets.
-
-Descriptor update template objects are represented by
-sname:VkDescriptorUpdateTemplate handles:
-
-include::{generated}/api/handles/VkDescriptorUpdateTemplate.txt[]
-
-ifdef::VK_KHR_descriptor_update_template[]
-or the equivalent
-
-include::{generated}/api/handles/VkDescriptorUpdateTemplateKHR.txt[]
-endif::VK_KHR_descriptor_update_template[]
---
-
-
-=== Descriptor Set Updates with Templates
-
-[open,refpage='vkCreateDescriptorUpdateTemplate',desc='Create a new descriptor update template',type='protos']
---
-Updating a large sname:VkDescriptorSet array can: be an expensive operation
-since an application must: specify one slink:VkWriteDescriptorSet structure
-for each descriptor or descriptor array to update, each of which
-re-specifies the same state when updating the same descriptor in multiple
-descriptor sets.
-For cases when an application wishes to update the same set of descriptors
-in multiple descriptor sets allocated using the same
-sname:VkDescriptorSetLayout, flink:vkUpdateDescriptorSetWithTemplate can: be
-used as a replacement for flink:vkUpdateDescriptorSets.
-
-sname:VkDescriptorUpdateTemplate allows implementations to convert a set of
-descriptor update operations on a single descriptor set to an internal
-format that, in conjunction with flink:vkUpdateDescriptorSetWithTemplate
-ifdef::VK_KHR_push_descriptor[]
-or flink:vkCmdPushDescriptorSetWithTemplateKHR
-endif::VK_KHR_push_descriptor[]
-, can: be more efficient compared to calling flink:vkUpdateDescriptorSets
-ifdef::VK_KHR_push_descriptor[]
-or flink:vkCmdPushDescriptorSetKHR
-endif::VK_KHR_push_descriptor[]
-.
-The descriptors themselves are not specified in the
-sname:VkDescriptorUpdateTemplate, rather, offsets into an application
-provided pointer to host memory are specified, which are combined with a
-pointer passed to flink:vkUpdateDescriptorSetWithTemplate
-ifdef::VK_KHR_push_descriptor[]
-or flink:vkCmdPushDescriptorSetWithTemplateKHR
-endif::VK_KHR_push_descriptor[]
-.
-This allows large batches of updates to be executed without having to
-convert application data structures into a strictly-defined Vulkan data
-structure.
-
-To create a descriptor update template, call:
-
-ifdef::VK_VERSION_1_1[]
-include::{generated}/api/protos/vkCreateDescriptorUpdateTemplate.txt[]
-endif::VK_VERSION_1_1[]
-
-ifdef::VK_VERSION_1_1+VK_KHR_descriptor_update_template[or the equivalent command]
-
-ifdef::VK_KHR_descriptor_update_template[]
-include::{generated}/api/protos/vkCreateDescriptorUpdateTemplateKHR.txt[]
-endif::VK_KHR_descriptor_update_template[]
-
-  * pname:device is the logical device that creates the descriptor update
-    template.
-  * pname:pCreateInfo is a pointer to a
-    slink:VkDescriptorUpdateTemplateCreateInfo structure specifying the set
-    of descriptors to update with a single call to
-ifdef::VK_KHR_push_descriptor[]
-    flink:vkCmdPushDescriptorSetWithTemplateKHR or
-endif::VK_KHR_push_descriptor[]
-    flink:vkUpdateDescriptorSetWithTemplate.
-  * pname:pAllocator controls host memory allocation as described in the
-    <<memory-allocation, Memory Allocation>> chapter.
-  * pname:pDescriptorUpdateTemplate is a pointer to a
-    sname:VkDescriptorUpdateTemplate handle in which the resulting
-    descriptor update template object is returned.
-
-include::{generated}/validity/protos/vkCreateDescriptorUpdateTemplate.txt[]
---
-
-[open,refpage='VkDescriptorUpdateTemplateCreateInfo',desc='Structure specifying parameters of a newly created descriptor update template',type='structs']
---
-The slink:VkDescriptorUpdateTemplateCreateInfo structure is defined as:
-include::{generated}/api/structs/VkDescriptorUpdateTemplateCreateInfo.txt[]
-
-ifdef::VK_KHR_descriptor_update_template[]
-or the equivalent
-
-include::{generated}/api/structs/VkDescriptorUpdateTemplateCreateInfoKHR.txt[]
-endif::VK_KHR_descriptor_update_template[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:flags is reserved for future use.
-  * pname:descriptorUpdateEntryCount is the number of elements in the
-    pname:pDescriptorUpdateEntries array.
-  * pname:pDescriptorUpdateEntries is a pointer to an array of
-    slink:VkDescriptorUpdateTemplateEntry structures describing the
-    descriptors to be updated by the descriptor update template.
-  * pname:templateType Specifies the type of the descriptor update template.
-    If set to ename:VK_DESCRIPTOR_UPDATE_TEMPLATE_TYPE_DESCRIPTOR_SET it
-    can: only be used to update descriptor sets with a fixed
-    pname:descriptorSetLayout.
-ifdef::VK_KHR_push_descriptor[]
-    If set to ename:VK_DESCRIPTOR_UPDATE_TEMPLATE_TYPE_PUSH_DESCRIPTORS_KHR
-    it can: only be used to push descriptor sets using the provided
-    pname:pipelineBindPoint, pname:pipelineLayout, and pname:set number.
-endif::VK_KHR_push_descriptor[]
-  * pname:descriptorSetLayout is the descriptor set layout used to build the
-    descriptor update template.
-    All descriptor sets which are going to be updated through the newly
-    created descriptor update template must: be created with a layout that
-    matches (is the same as, or defined identically to) this layout.
-    This parameter is ignored if pname:templateType is not
-    ename:VK_DESCRIPTOR_UPDATE_TEMPLATE_TYPE_DESCRIPTOR_SET.
-ifdef::VK_KHR_push_descriptor[]
-  * pname:pipelineBindPoint is a elink:VkPipelineBindPoint indicating the
-    type of the pipeline that will use the descriptors.
-    This parameter is ignored if pname:templateType is not
-    ename:VK_DESCRIPTOR_UPDATE_TEMPLATE_TYPE_PUSH_DESCRIPTORS_KHR
-  * pname:pipelineLayout is a slink:VkPipelineLayout object used to program
-    the bindings.
-    This parameter is ignored if pname:templateType is not
-    ename:VK_DESCRIPTOR_UPDATE_TEMPLATE_TYPE_PUSH_DESCRIPTORS_KHR
-  * pname:set is the set number of the descriptor set in the pipeline layout
-    that will be updated.
-    This parameter is ignored if pname:templateType is not
-    ename:VK_DESCRIPTOR_UPDATE_TEMPLATE_TYPE_PUSH_DESCRIPTORS_KHR
-endif::VK_KHR_push_descriptor[]
-ifndef::VK_KHR_push_descriptor[]
-  * pname:pipelineBindPoint is reserved for future use and is ignored
-  * pname:pipelineLayout is reserved for future use and is ignored
-  * pname:set is reserved for future use and is ignored
-endif::VK_KHR_push_descriptor[]
-
-.Valid Usage
-****
-  * [[VUID-VkDescriptorUpdateTemplateCreateInfo-templateType-00350]]
-    If pname:templateType is
-    ename:VK_DESCRIPTOR_UPDATE_TEMPLATE_TYPE_DESCRIPTOR_SET,
-    pname:descriptorSetLayout must: be a valid sname:VkDescriptorSetLayout
-    handle
-ifdef::VK_KHR_push_descriptor[]
-  * [[VUID-VkDescriptorUpdateTemplateCreateInfo-templateType-00351]]
-    If pname:templateType is
-    ename:VK_DESCRIPTOR_UPDATE_TEMPLATE_TYPE_PUSH_DESCRIPTORS_KHR,
-    pname:pipelineBindPoint must: be a valid elink:VkPipelineBindPoint value
-  * [[VUID-VkDescriptorUpdateTemplateCreateInfo-templateType-00352]]
-    If pname:templateType is
-    ename:VK_DESCRIPTOR_UPDATE_TEMPLATE_TYPE_PUSH_DESCRIPTORS_KHR,
-    pname:pipelineLayout must: be a valid sname:VkPipelineLayout handle
-  * [[VUID-VkDescriptorUpdateTemplateCreateInfo-templateType-00353]]
-    If pname:templateType is
-    ename:VK_DESCRIPTOR_UPDATE_TEMPLATE_TYPE_PUSH_DESCRIPTORS_KHR, pname:set
-    must: be the unique set number in the pipeline layout that uses a
-    descriptor set layout that was created with
-    ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_PUSH_DESCRIPTOR_BIT_KHR
-endif::VK_KHR_push_descriptor[]
-ifdef::VK_VALVE_mutable_descriptor_type[]
-  * [[VUID-VkDescriptorUpdateTemplateCreateInfo-templateType-04615]]
-    If pname:templateType is
-    ename:VK_DESCRIPTOR_UPDATE_TEMPLATE_TYPE_DESCRIPTOR_SET,
-    pname:descriptorSetLayout must: not contain a binding with type
-    ename:VK_DESCRIPTOR_TYPE_MUTABLE_VALVE
-endif::VK_VALVE_mutable_descriptor_type[]
-****
-
-
-include::{generated}/validity/structs/VkDescriptorUpdateTemplateCreateInfo.txt[]
---
-
-[open,refpage='VkDescriptorUpdateTemplateCreateFlags',desc='Reserved for future use',type='flags']
---
-include::{generated}/api/flags/VkDescriptorUpdateTemplateCreateFlags.txt[]
-
-ifdef::VK_KHR_descriptor_update_template[]
-or the equivalent
-
-include::{generated}/api/flags/VkDescriptorUpdateTemplateCreateFlagsKHR.txt[]
-endif::VK_KHR_descriptor_update_template[]
-
-tname:VkDescriptorUpdateTemplateCreateFlags is a bitmask type for setting a
-mask, but is currently reserved for future use.
---
-
-[open,refpage='VkDescriptorUpdateTemplateType',desc='Indicates the valid usage of the descriptor update template',type='enums']
---
-The descriptor update template type is determined by the
-slink:VkDescriptorUpdateTemplateCreateInfo::pname:templateType property,
-which takes the following values:
-
-include::{generated}/api/enums/VkDescriptorUpdateTemplateType.txt[]
-
-ifdef::VK_KHR_descriptor_update_template[]
-or the equivalent
-
-include::{generated}/api/enums/VkDescriptorUpdateTemplateTypeKHR.txt[]
-endif::VK_KHR_descriptor_update_template[]
-
-  * ename:VK_DESCRIPTOR_UPDATE_TEMPLATE_TYPE_DESCRIPTOR_SET specifies that
-    the descriptor update template will be used for descriptor set updates
-    only.
-ifdef::VK_KHR_push_descriptor[]
-  * ename:VK_DESCRIPTOR_UPDATE_TEMPLATE_TYPE_PUSH_DESCRIPTORS_KHR specifies
-    that the descriptor update template will be used for push descriptor
-    updates only.
-endif::VK_KHR_push_descriptor[]
---
-
-
-[open,refpage='VkDescriptorUpdateTemplateEntry',desc='Describes a single descriptor update of the descriptor update template',type='structs']
---
-The sname:VkDescriptorUpdateTemplateEntry structure is defined as:
-include::{generated}/api/structs/VkDescriptorUpdateTemplateEntry.txt[]
-
-ifdef::VK_KHR_descriptor_update_template[]
-or the equivalent
-
-include::{generated}/api/structs/VkDescriptorUpdateTemplateEntryKHR.txt[]
-endif::VK_KHR_descriptor_update_template[]
-
-  * pname:dstBinding is the descriptor binding to update when using this
-    descriptor update template.
-  * pname:dstArrayElement is the starting element in the array belonging to
-    pname:dstBinding.
-ifdef::VK_EXT_inline_uniform_block[]
-    If the descriptor binding identified by pname:dstBinding has a
-    descriptor type of ename:VK_DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK_EXT
-    then pname:dstArrayElement specifies the starting byte offset to update.
-endif::VK_EXT_inline_uniform_block[]
-  * pname:descriptorCount is the number of descriptors to update.
-    If pname:descriptorCount is greater than the number of remaining array
-    elements in the destination binding, those affect consecutive bindings
-    in a manner similar to slink:VkWriteDescriptorSet above.
-ifdef::VK_EXT_inline_uniform_block[]
-    If the descriptor binding identified by pname:dstBinding has a
-    descriptor type of ename:VK_DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK_EXT
-    then pname:descriptorCount specifies the number of bytes to update and
-    the remaining array elements in the destination binding refer to the
-    remaining number of bytes in it.
-endif::VK_EXT_inline_uniform_block[]
-  * pname:descriptorType is a elink:VkDescriptorType specifying the type of
-    the descriptor.
-  * pname:offset is the offset in bytes of the first binding in the raw data
-    structure.
-  * pname:stride is the stride in bytes between two consecutive array
-    elements of the descriptor update informations in the raw data
-    structure.
-    The actual pointer ptr for each array element j of update entry i is
-    computed using the following formula:
-+
-[source,c++]
-~~~~
-    const char *ptr = (const char *)pData + pDescriptorUpdateEntries[i].offset + j * pDescriptorUpdateEntries[i].stride
-~~~~
-+
-The stride is useful in case the bindings are stored in structs along with
-other data.
-ifdef::VK_EXT_inline_uniform_block[]
-If pname:descriptorType is ename:VK_DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK_EXT
-then the value of pname:stride is ignored and the stride is assumed to be
-`1`, i.e. the descriptor update information for them is always specified as
-a contiguous range.
-endif::VK_EXT_inline_uniform_block[]
-
-.Valid Usage
-****
-  * [[VUID-VkDescriptorUpdateTemplateEntry-dstBinding-00354]]
-    pname:dstBinding must: be a valid binding in the descriptor set layout
-    implicitly specified when using a descriptor update template to update
-    descriptors
-  * [[VUID-VkDescriptorUpdateTemplateEntry-dstArrayElement-00355]]
-    pname:dstArrayElement and pname:descriptorCount must: be less than or
-    equal to the number of array elements in the descriptor set binding
-    implicitly specified when using a descriptor update template to update
-    descriptors, and all applicable consecutive bindings, as described by
-    <<descriptorsets-updates-consecutive>>
-ifdef::VK_EXT_inline_uniform_block[]
-  * [[VUID-VkDescriptorUpdateTemplateEntry-descriptor-02226]]
-    If pname:descriptor type is
-    ename:VK_DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK_EXT, pname:dstArrayElement
-    must: be an integer multiple of `4`
-  * [[VUID-VkDescriptorUpdateTemplateEntry-descriptor-02227]]
-    If pname:descriptor type is
-    ename:VK_DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK_EXT, pname:descriptorCount
-    must: be an integer multiple of `4`
-endif::VK_EXT_inline_uniform_block[]
-****
-
-include::{generated}/validity/structs/VkDescriptorUpdateTemplateEntry.txt[]
---
-
-[open,refpage='vkDestroyDescriptorUpdateTemplate',desc='Destroy a descriptor update template object',type='protos']
---
-To destroy a descriptor update template, call:
-
-ifdef::VK_VERSION_1_1[]
-include::{generated}/api/protos/vkDestroyDescriptorUpdateTemplate.txt[]
-endif::VK_VERSION_1_1[]
-
-ifdef::VK_VERSION_1_1+VK_KHR_descriptor_update_template[or the equivalent command]
-
-ifdef::VK_KHR_descriptor_update_template[]
-include::{generated}/api/protos/vkDestroyDescriptorUpdateTemplateKHR.txt[]
-endif::VK_KHR_descriptor_update_template[]
-
-  * pname:device is the logical device that has been used to create the
-    descriptor update template
-  * pname:descriptorUpdateTemplate is the descriptor update template to
-    destroy.
-  * pname:pAllocator controls host memory allocation as described in the
-    <<memory-allocation, Memory Allocation>> chapter.
-
-.Valid Usage
-****
-  * [[VUID-vkDestroyDescriptorUpdateTemplate-descriptorSetLayout-00356]]
-    If sname:VkAllocationCallbacks were provided when
-    pname:descriptorUpdateTemplate was created, a compatible set of
-    callbacks must: be provided here
-  * [[VUID-vkDestroyDescriptorUpdateTemplate-descriptorSetLayout-00357]]
-    If no sname:VkAllocationCallbacks were provided when
-    pname:descriptorUpdateTemplate was created, pname:pAllocator must: be
-    `NULL`
-****
-
-include::{generated}/validity/protos/vkDestroyDescriptorUpdateTemplate.txt[]
---
-
-[open,refpage='vkUpdateDescriptorSetWithTemplate',desc='Update the contents of a descriptor set object using an update template',type='protos']
---
-Once a sname:VkDescriptorUpdateTemplate has been created, descriptor sets
-can: be updated by calling:
-
-ifdef::VK_VERSION_1_1[]
-include::{generated}/api/protos/vkUpdateDescriptorSetWithTemplate.txt[]
-endif::VK_VERSION_1_1[]
-
-ifdef::VK_VERSION_1_1+VK_KHR_descriptor_update_template[or the equivalent command]
-
-ifdef::VK_KHR_descriptor_update_template[]
-include::{generated}/api/protos/vkUpdateDescriptorSetWithTemplateKHR.txt[]
-endif::VK_KHR_descriptor_update_template[]
-
-  * pname:device is the logical device that updates the descriptor set.
-  * pname:descriptorSet is the descriptor set to update
-  * pname:descriptorUpdateTemplate is a slink:VkDescriptorUpdateTemplate
-    object specifying the update mapping between pname:pData and the
-    descriptor set to update.
-  * pname:pData is a pointer to memory containing one or more
-    slink:VkDescriptorImageInfo, slink:VkDescriptorBufferInfo, or
-    slink:VkBufferView structures
-ifdef::VK_KHR_acceleration_structure[or slink:VkAccelerationStructureKHR]
-ifdef::VK_NV_ray_tracing[or slink:VkAccelerationStructureNV]
-ifdef::VK_NV_ray_tracing,VK_KHR_acceleration_structure[handles]
-    used to write the descriptors.
-
-.Valid Usage
-****
-  * [[VUID-vkUpdateDescriptorSetWithTemplate-pData-01685]]
-    pname:pData must: be a valid pointer to a memory containing one or more
-    valid instances of slink:VkDescriptorImageInfo,
-    slink:VkDescriptorBufferInfo, or slink:VkBufferView in a layout defined
-    by pname:descriptorUpdateTemplate when it was created with
-    flink:vkCreateDescriptorUpdateTemplate
-****
-
-include::{generated}/validity/protos/vkUpdateDescriptorSetWithTemplate.txt[]
-
-.API example
-[source,c++]
-~~~~
-struct AppBufferView {
-    VkBufferView bufferView;
-    uint32_t     applicationRelatedInformation;
-};
-
-struct AppDataStructure
-{
-    VkDescriptorImageInfo  imageInfo;          // a single image info
-    VkDescriptorBufferInfo bufferInfoArray[3]; // 3 buffer infos in an array
-    AppBufferView          bufferView[2];      // An application defined structure containing a bufferView
-    // ... some more application related data
-};
-
-const VkDescriptorUpdateTemplateEntry descriptorUpdateTemplateEntries[] =
-{
-    // binding to a single image descriptor
-    {
-        0,                                           // binding
-        0,                                           // dstArrayElement
-        1,                                           // descriptorCount
-        VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER,   // descriptorType
-        offsetof(AppDataStructure, imageInfo),       // offset
-        0                                            // stride is not required if descriptorCount is 1
-    },
-
-    // binding to an array of buffer descriptors
-    {
-        1,                                           // binding
-        0,                                           // dstArrayElement
-        3,                                           // descriptorCount
-        VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER,           // descriptorType
-        offsetof(AppDataStructure, bufferInfoArray), // offset
-        sizeof(VkDescriptorBufferInfo)               // stride, descriptor buffer infos are compact
-    },
-
-    // binding to an array of buffer views
-    {
-        2,                                           // binding
-        0,                                           // dstArrayElement
-        2,                                           // descriptorCount
-        VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER,     // descriptorType
-        offsetof(AppDataStructure, bufferView) +
-          offsetof(AppBufferView, bufferView),       // offset
-        sizeof(AppBufferView)                        // stride, bufferViews do not have to be compact
-    },
-};
-
-// create a descriptor update template for descriptor set updates
-const VkDescriptorUpdateTemplateCreateInfo createInfo =
-{
-    VK_STRUCTURE_TYPE_DESCRIPTOR_UPDATE_TEMPLATE_CREATE_INFO,  // sType
-    NULL,                                                      // pNext
-    0,                                                         // flags
-    3,                                                         // descriptorUpdateEntryCount
-    descriptorUpdateTemplateEntries,                           // pDescriptorUpdateEntries
-    VK_DESCRIPTOR_UPDATE_TEMPLATE_TYPE_DESCRIPTOR_SET,         // templateType
-    myLayout,                                                  // descriptorSetLayout
-    0,                                                         // pipelineBindPoint, ignored by given templateType
-    0,                                                         // pipelineLayout, ignored by given templateType
-    0,                                                         // set, ignored by given templateType
-};
-
-VkDescriptorUpdateTemplate myDescriptorUpdateTemplate;
-myResult = vkCreateDescriptorUpdateTemplate(
-    myDevice,
-    &createInfo,
-    NULL,
-    &myDescriptorUpdateTemplate);
-
-AppDataStructure appData;
-
-// fill appData here or cache it in your engine
-vkUpdateDescriptorSetWithTemplate(myDevice, myDescriptorSet, myDescriptorUpdateTemplate, &appData);
-~~~~
---
-endif::VK_VERSION_1_1,VK_KHR_descriptor_update_template[]
-
-
-[[descriptorsets-binding]]
-=== Descriptor Set Binding
-
-[open,refpage='vkCmdBindDescriptorSets',desc='Binds descriptor sets to a command buffer',type='protos']
---
-To bind one or more descriptor sets to a command buffer, call:
-
-include::{generated}/api/protos/vkCmdBindDescriptorSets.txt[]
-
-  * pname:commandBuffer is the command buffer that the descriptor sets will
-    be bound to.
-  * pname:pipelineBindPoint is a elink:VkPipelineBindPoint indicating the
-    type of the pipeline that will use the descriptors.
-    There is a separate set of bind points for each pipeline type, so
-    binding one does not disturb the others.
-  * pname:layout is a slink:VkPipelineLayout object used to program the
-    bindings.
-  * pname:firstSet is the set number of the first descriptor set to be
-    bound.
-  * pname:descriptorSetCount is the number of elements in the
-    pname:pDescriptorSets array.
-  * pname:pDescriptorSets is a pointer to an array of handles to
-    slink:VkDescriptorSet objects describing the descriptor sets to bind to.
-  * pname:dynamicOffsetCount is the number of dynamic offsets in the
-    pname:pDynamicOffsets array.
-  * pname:pDynamicOffsets is a pointer to an array of code:uint32_t values
-    specifying dynamic offsets.
-
-fname:vkCmdBindDescriptorSets causes the sets numbered [pname:firstSet..
-pname:firstSet+pname:descriptorSetCount-1] to use the bindings stored in
-pname:pDescriptorSets[0..descriptorSetCount-1] for subsequent
-<<pipeline-bindpoint-commands, bound pipeline commands>> set by
-pname:pipelineBindPoint.
-Any bindings that were previously applied via these sets are no longer
-valid.
-
-Once bound, a descriptor set affects rendering of subsequent commands that
-interact with the given pipeline type in the command buffer until either a
-different set is bound to the same set number, or the set is disturbed as
-described in <<descriptorsets-compatibility, Pipeline Layout
-Compatibility>>.
-
-A compatible descriptor set must: be bound for all set numbers that any
-shaders in a pipeline access, at the time that a drawing or dispatching
-command is recorded to execute using that pipeline.
-However, if none of the shaders in a pipeline statically use any bindings
-with a particular set number, then no descriptor set need be bound for that
-set number, even if the pipeline layout includes a non-trivial descriptor
-set layout for that set number.
-
-[[descriptorsets-binding-dynamicoffsets]]
-If any of the sets being bound include dynamic uniform or storage buffers,
-then pname:pDynamicOffsets includes one element for each array element in
-each dynamic descriptor type binding in each set.
-Values are taken from pname:pDynamicOffsets in an order such that all
-entries for set N come before set N+1; within a set, entries are ordered by
-the binding numbers in the descriptor set layouts; and within a binding
-array, elements are in order.
-pname:dynamicOffsetCount must: equal the total number of dynamic descriptors
-in the sets being bound.
-
-The effective offset used for dynamic uniform and storage buffer bindings is
-the sum of the relative offset taken from pname:pDynamicOffsets, and the
-base address of the buffer plus base offset in the descriptor set.
-The range of the dynamic uniform and storage buffer bindings is the buffer
-range as specified in the descriptor set.
-
-Each of the pname:pDescriptorSets must: be compatible with the pipeline
-layout specified by pname:layout.
-The layout used to program the bindings must: also be compatible with the
-pipeline used in subsequent <<pipeline-bindpoint-commands, bound pipeline
-commands>> with that pipeline type, as defined in the
-<<descriptorsets-compatibility, Pipeline Layout Compatibility>> section.
-
-The descriptor set contents bound by a call to fname:vkCmdBindDescriptorSets
-may: be consumed at the following times:
-
-ifdef::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
-  * For descriptor bindings created with the
-    ename:VK_DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT bit set, the contents
-    may: be consumed when the command buffer is submitted to a queue, or
-    during shader execution of the resulting draws and dispatches, or any
-    time in between.
-    Otherwise,
-endif::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
-  * during host execution of the command, or during shader execution of the
-    resulting draws and dispatches, or any time in between.
-
-Thus, the contents of a descriptor set binding must: not be altered
-(overwritten by an update command, or freed) between the first point in time
-that it may: be consumed, and when the command completes executing on the
-queue.
-
-The contents of pname:pDynamicOffsets are consumed immediately during
-execution of fname:vkCmdBindDescriptorSets.
-Once all pending uses have completed, it is legal to update and reuse a
-descriptor set.
-
-.Valid Usage
-****
-  * [[VUID-vkCmdBindDescriptorSets-pDescriptorSets-00358]]
-    Each element of pname:pDescriptorSets must: have been allocated with a
-    sname:VkDescriptorSetLayout that matches (is the same as, or identically
-    defined as) the sname:VkDescriptorSetLayout at set _n_ in pname:layout,
-    where _n_ is the sum of pname:firstSet and the index into
-    pname:pDescriptorSets
-  * [[VUID-vkCmdBindDescriptorSets-dynamicOffsetCount-00359]]
-    pname:dynamicOffsetCount must: be equal to the total number of dynamic
-    descriptors in pname:pDescriptorSets
-  * [[VUID-vkCmdBindDescriptorSets-firstSet-00360]]
-    The sum of pname:firstSet and pname:descriptorSetCount must: be less
-    than or equal to slink:VkPipelineLayoutCreateInfo::pname:setLayoutCount
-    provided when pname:layout was created
-  * [[VUID-vkCmdBindDescriptorSets-pipelineBindPoint-00361]]
-    pname:pipelineBindPoint must: be supported by the pname:commandBuffer's
-    parent sname:VkCommandPool's queue family
-  * [[VUID-vkCmdBindDescriptorSets-pDynamicOffsets-01971]]
-    Each element of pname:pDynamicOffsets which corresponds to a descriptor
-    binding with type ename:VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC must:
-    be a multiple of
-    sname:VkPhysicalDeviceLimits::pname:minUniformBufferOffsetAlignment
-  * [[VUID-vkCmdBindDescriptorSets-pDynamicOffsets-01972]]
-    Each element of pname:pDynamicOffsets which corresponds to a descriptor
-    binding with type ename:VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC must:
-    be a multiple of
-    sname:VkPhysicalDeviceLimits::pname:minStorageBufferOffsetAlignment
-  * [[VUID-vkCmdBindDescriptorSets-pDescriptorSets-01979]]
-    For each dynamic uniform or storage buffer binding in
-    pname:pDescriptorSets, the sum of the effective offset, as defined
-    above, and the range of the binding must: be less than or equal to the
-    size of the buffer
-ifdef::VK_VALVE_mutable_descriptor_type[]
-  * [[VUID-vkCmdBindDescriptorSets-pDescriptorSets-04616]]
-    Each element of pname:pDescriptorSets must: not have been allocated from
-    a sname:VkDescriptorPool with the
-    ename:VK_DESCRIPTOR_POOL_CREATE_HOST_ONLY_BIT_VALVE flag set
-endif::VK_VALVE_mutable_descriptor_type[]
-****
-
-include::{generated}/validity/protos/vkCmdBindDescriptorSets.txt[]
---
-
-
-ifdef::VK_KHR_push_descriptor[]
-[[descriptorsets-push-descriptors]]
-=== Push Descriptor Updates
-
-[open,refpage='vkCmdPushDescriptorSetKHR',desc='Pushes descriptor updates into a command buffer',type='protos']
---
-In addition to allocating descriptor sets and binding them to a command
-buffer, an application can: record descriptor updates into the command
-buffer.
-
-To push descriptor updates into a command buffer, call:
-
-include::{generated}/api/protos/vkCmdPushDescriptorSetKHR.txt[]
-
-  * pname:commandBuffer is the command buffer that the descriptors will be
-    recorded in.
-  * pname:pipelineBindPoint is a elink:VkPipelineBindPoint indicating the
-    type of the pipeline that will use the descriptors.
-    There is a separate set of push descriptor bindings for each pipeline
-    type, so binding one does not disturb the others.
-  * pname:layout is a slink:VkPipelineLayout object used to program the
-    bindings.
-  * pname:set is the set number of the descriptor set in the pipeline layout
-    that will be updated.
-  * pname:descriptorWriteCount is the number of elements in the
-    pname:pDescriptorWrites array.
-  * pname:pDescriptorWrites is a pointer to an array of
-    slink:VkWriteDescriptorSet structures describing the descriptors to be
-    updated.
-
-_Push descriptors_ are a small bank of descriptors whose storage is
-internally managed by the command buffer rather than being written into a
-descriptor set and later bound to a command buffer.
-Push descriptors allow for incremental updates of descriptors without
-managing the lifetime of descriptor sets.
-
-When a command buffer begins recording, all push descriptors are undefined:.
-Push descriptors can: be updated incrementally and cause shaders to use the
-updated descriptors for subsequent <<pipeline-bindpoint-commands, bound
-pipeline commands>> with the pipeline type set by pname:pipelineBindPoint
-until the descriptor is overwritten, or else until the set is disturbed as
-described in <<descriptorsets-compatibility, Pipeline Layout
-Compatibility>>.
-When the set is disturbed or push descriptors with a different descriptor
-set layout are set, all push descriptors are undefined:.
-
-Push descriptors that are <<shaders-staticuse,statically used>> by a
-pipeline must: not be undefined: at the time that a drawing or dispatching
-command is recorded to execute using that pipeline.
-This includes immutable sampler descriptors, which must: be pushed before
-they are accessed by a pipeline (the immutable samplers are pushed, rather
-than the samplers in pname:pDescriptorWrites).
-Push descriptors that are not statically used can: remain undefined:.
-
-Push descriptors do not use dynamic offsets.
-Instead, the corresponding non-dynamic descriptor types can: be used and the
-pname:offset member of slink:VkDescriptorBufferInfo can: be changed each
-time the descriptor is written.
-
-Each element of pname:pDescriptorWrites is interpreted as in
-slink:VkWriteDescriptorSet, except the pname:dstSet member is ignored.
-
-To push an immutable sampler, use a slink:VkWriteDescriptorSet with
-pname:dstBinding and pname:dstArrayElement selecting the immutable sampler's
-binding.
-If the descriptor type is ename:VK_DESCRIPTOR_TYPE_SAMPLER, the
-pname:pImageInfo parameter is ignored and the immutable sampler is taken
-from the push descriptor set layout in the pipeline layout.
-If the descriptor type is ename:VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER,
-the pname:sampler member of the pname:pImageInfo parameter is ignored and
-the immutable sampler is taken from the push descriptor set layout in the
-pipeline layout.
-
-.Valid Usage
-****
-  * [[VUID-vkCmdPushDescriptorSetKHR-pipelineBindPoint-00363]]
-    pname:pipelineBindPoint must: be supported by the pname:commandBuffer's
-    parent sname:VkCommandPool's queue family
-  * [[VUID-vkCmdPushDescriptorSetKHR-set-00364]]
-    pname:set must: be less than
-    slink:VkPipelineLayoutCreateInfo::pname:setLayoutCount provided when
-    pname:layout was created
-  * [[VUID-vkCmdPushDescriptorSetKHR-set-00365]]
-    pname:set must: be the unique set number in the pipeline layout that
-    uses a descriptor set layout that was created with
-    ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_PUSH_DESCRIPTOR_BIT_KHR
-****
-
-include::{generated}/validity/protos/vkCmdPushDescriptorSetKHR.txt[]
-
---
-
-
-ifdef::VK_VERSION_1_1,VK_KHR_descriptor_update_template[]
-=== Push Descriptor Updates with Descriptor Update Templates
-
-[open,refpage='vkCmdPushDescriptorSetWithTemplateKHR',desc='Pushes descriptor updates into a command buffer using a descriptor update template',type='protos']
---
-It is also possible to use a descriptor update template to specify the push
-descriptors to update.
-To do so, call:
-
-include::{generated}/api/protos/vkCmdPushDescriptorSetWithTemplateKHR.txt[]
-
-  * pname:commandBuffer is the command buffer that the descriptors will be
-    recorded in.
-  * pname:descriptorUpdateTemplate is a descriptor update template defining
-    how to interpret the descriptor information in pname:pData.
-  * pname:layout is a slink:VkPipelineLayout object used to program the
-    bindings.
-    It must: be compatible with the layout used to create the
-    pname:descriptorUpdateTemplate handle.
-  * pname:set is the set number of the descriptor set in the pipeline layout
-    that will be updated.
-    This must: be the same number used to create the
-    pname:descriptorUpdateTemplate handle.
-  * pname:pData is a pointer to memory containing descriptors for the
-    templated update.
-
-.Valid Usage
-****
-  * [[VUID-vkCmdPushDescriptorSetWithTemplateKHR-commandBuffer-00366]]
-    The pname:pipelineBindPoint specified during the creation of the
-    descriptor update template must: be supported by the
-    pname:commandBuffer's parent sname:VkCommandPool's queue family
-  * [[VUID-vkCmdPushDescriptorSetWithTemplateKHR-pData-01686]]
-    pname:pData must: be a valid pointer to a memory containing one or more
-    valid instances of slink:VkDescriptorImageInfo,
-    slink:VkDescriptorBufferInfo, or slink:VkBufferView in a layout defined
-    by pname:descriptorUpdateTemplate when it was created with
-    flink:vkCreateDescriptorUpdateTemplate
-****
-
-include::{generated}/validity/protos/vkCmdPushDescriptorSetWithTemplateKHR.txt[]
-
-.API example
-[source,c++]
-~~~~
-
-struct AppDataStructure
-{
-    VkDescriptorImageInfo  imageInfo;          // a single image info
-    // ... some more application related data
-};
-
-const VkDescriptorUpdateTemplateEntry descriptorUpdateTemplateEntries[] =
-{
-    // binding to a single image descriptor
-    {
-        0,                                           // binding
-        0,                                           // dstArrayElement
-        1,                                           // descriptorCount
-        VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER,   // descriptorType
-        offsetof(AppDataStructure, imageInfo),       // offset
-        0                                            // stride is not required if descriptorCount is 1
-    }
-};
-
-// create a descriptor update template for push descriptor set updates
-const VkDescriptorUpdateTemplateCreateInfo createInfo =
-{
-    VK_STRUCTURE_TYPE_DESCRIPTOR_UPDATE_TEMPLATE_CREATE_INFO,  // sType
-    NULL,                                                      // pNext
-    0,                                                         // flags
-    1,                                                         // descriptorUpdateEntryCount
-    descriptorUpdateTemplateEntries,                           // pDescriptorUpdateEntries
-    VK_DESCRIPTOR_UPDATE_TEMPLATE_TYPE_PUSH_DESCRIPTORS_KHR,   // templateType
-    0,                                                         // descriptorSetLayout, ignored by given templateType
-    VK_PIPELINE_BIND_POINT_GRAPHICS,                           // pipelineBindPoint
-    myPipelineLayout,                                          // pipelineLayout
-    0,                                                         // set
-};
-
-VkDescriptorUpdateTemplate myDescriptorUpdateTemplate;
-myResult = vkCreateDescriptorUpdateTemplate(
-    myDevice,
-    &createInfo,
-    NULL,
-    &myDescriptorUpdateTemplate);
-
-AppDataStructure appData;
-// fill appData here or cache it in your engine
-vkCmdPushDescriptorSetWithTemplateKHR(myCmdBuffer, myDescriptorUpdateTemplate, myPipelineLayout, 0,&appData);
-~~~~
---
-endif::VK_VERSION_1_1,VK_KHR_descriptor_update_template[]
-endif::VK_KHR_push_descriptor[]
-
-
-[[descriptorsets-push-constants]]
-=== Push Constant Updates
-
-As described above in section <<descriptorsets-pipelinelayout, Pipeline
-Layouts>>, the pipeline layout defines shader push constants which are
-updated via Vulkan commands rather than via writes to memory or copy
-commands.
-
-[NOTE]
-.Note
-====
-Push constants represent a high speed path to modify constant data in
-pipelines that is expected to outperform memory-backed resource updates.
-====
-
-[open,refpage='vkCmdPushConstants',desc='Update the values of push constants',type='protos']
---
-To update push constants, call:
-
-include::{generated}/api/protos/vkCmdPushConstants.txt[]
-
-  * pname:commandBuffer is the command buffer in which the push constant
-    update will be recorded.
-  * pname:layout is the pipeline layout used to program the push constant
-    updates.
-  * pname:stageFlags is a bitmask of elink:VkShaderStageFlagBits specifying
-    the shader stages that will use the push constants in the updated range.
-  * pname:offset is the start offset of the push constant range to update,
-    in units of bytes.
-  * pname:size is the size of the push constant range to update, in units of
-    bytes.
-  * pname:pValues is a pointer to an array of pname:size bytes containing
-    the new push constant values.
-
-When a command buffer begins recording, all push constant values are
-undefined:.
-ifdef::VK_KHR_maintenance4[]
-Reads of undefined: push constant values by the executing shader return
-undefined: values.
-endif::VK_KHR_maintenance4[]
-
-Push constant values can: be updated incrementally, causing shader stages in
-pname:stageFlags to read the new data from pname:pValues for push constants
-modified by this command, while still reading the previous data for push
-constants not modified by this command.
-When a <<pipeline-bindpoint-commands, bound pipeline command>> is issued,
-the bound pipeline's layout must: be compatible with the layouts used to set
-the values of all push constants in the pipeline layout's push constant
-ranges, as described in <<descriptorsets-compatibility,Pipeline Layout
-Compatibility>>.
-Binding a pipeline with a layout that is not compatible with the push
-constant layout does not disturb the push constant values.
-
-[NOTE]
-.Note
-====
-As pname:stageFlags needs to include all flags the relevant push constant
-ranges were created with, any flags that are not supported by the queue
-family that the slink:VkCommandPool used to allocate pname:commandBuffer was
-created on are ignored.
-====
-
-.Valid Usage
-****
-  * [[VUID-vkCmdPushConstants-offset-01795]]
-    For each byte in the range specified by pname:offset and pname:size and
-    for each shader stage in pname:stageFlags, there must: be a push
-    constant range in pname:layout that includes that byte and that stage
-  * [[VUID-vkCmdPushConstants-offset-01796]]
-    For each byte in the range specified by pname:offset and pname:size and
-    for each push constant range that overlaps that byte, pname:stageFlags
-    must: include all stages in that push constant range's
-    slink:VkPushConstantRange::pname:stageFlags
-  * [[VUID-vkCmdPushConstants-offset-00368]]
-    pname:offset must: be a multiple of `4`
-  * [[VUID-vkCmdPushConstants-size-00369]]
-    pname:size must: be a multiple of `4`
-  * [[VUID-vkCmdPushConstants-offset-00370]]
-    pname:offset must: be less than
-    sname:VkPhysicalDeviceLimits::pname:maxPushConstantsSize
-  * [[VUID-vkCmdPushConstants-size-00371]]
-    pname:size must: be less than or equal to
-    sname:VkPhysicalDeviceLimits::pname:maxPushConstantsSize minus
-    pname:offset
-****
-
-include::{generated}/validity/protos/vkCmdPushConstants.txt[]
---
-
-
-ifdef::VK_VERSION_1_2,VK_EXT_buffer_device_address,VK_KHR_buffer_device_address[]
-[[descriptorsets-physical-storage-buffer]]
-== Physical Storage Buffer Access
-
-[open,refpage='vkGetBufferDeviceAddress',desc='Query an address of a buffer',type='protos',alias='vkGetBufferDeviceAddressKHR']
---
-To query a 64-bit buffer device address value through which buffer memory
-can: be accessed in a shader, call:
-
-ifdef::VK_VERSION_1_2[]
-include::{generated}/api/protos/vkGetBufferDeviceAddress.txt[]
-endif::VK_VERSION_1_2[]
-
-ifdef::VK_VERSION_1_2+VK_KHR_buffer_device_address[or the equivalent command]
-
-ifdef::VK_KHR_buffer_device_address[]
-include::{generated}/api/protos/vkGetBufferDeviceAddressKHR.txt[]
-endif::VK_KHR_buffer_device_address[]
-
-// @Jon: 3-way conditional logic here is wrong
-
-ifdef::VK_EXT_buffer_device_address[]
-or the equivalent command
-
-include::{generated}/api/protos/vkGetBufferDeviceAddressEXT.txt[]
-endif::VK_EXT_buffer_device_address[]
-
-  * pname:device is the logical device that the buffer was created on.
-  * pname:pInfo is a pointer to a slink:VkBufferDeviceAddressInfo structure
-    specifying the buffer to retrieve an address for.
-
-The 64-bit return value is an address of the start of pname:pInfo->buffer.
-The address range starting at this value and whose size is the size of the
-buffer can: be used in a shader to access the memory bound to that buffer,
-using the
-ifdef::VK_VERSION_1_2,VK_KHR_buffer_device_address[]
-`SPV_KHR_physical_storage_buffer` extension
-ifdef::VK_EXT_buffer_device_address[or the equivalent]
-endif::VK_VERSION_1_2,VK_KHR_buffer_device_address[]
-ifdef::VK_EXT_buffer_device_address[]
-`SPV_EXT_physical_storage_buffer` extension
-endif::VK_EXT_buffer_device_address[]
-and the code:PhysicalStorageBuffer storage class.
-For example, this value can: be stored in a uniform buffer, and the shader
-can: read the value from the uniform buffer and use it to do a dependent
-read/write to this buffer.
-A value of zero is reserved as a "`null`" pointer and must: not be returned
-as a valid buffer device address.
-All loads, stores, and atomics in a shader through
-code:PhysicalStorageBuffer pointers must: access addresses in the address
-range of some buffer.
-
-If the buffer was created with a non-zero value of
-ifdef::VK_VERSION_1_2,VK_KHR_buffer_device_address[]
-slink:VkBufferOpaqueCaptureAddressCreateInfo::pname:opaqueCaptureAddress
-ifdef::VK_EXT_buffer_device_address[or]
-endif::VK_VERSION_1_2,VK_KHR_buffer_device_address[]
-ifdef::VK_EXT_buffer_device_address[]
-slink:VkBufferDeviceAddressCreateInfoEXT::pname:deviceAddress
-endif::VK_EXT_buffer_device_address[]
-the return value will be the same address that was returned at capture time.
-
-.Valid Usage
-****
-  * [[VUID-vkGetBufferDeviceAddress-bufferDeviceAddress-03324]]
-    The <<features-bufferDeviceAddress,bufferDeviceAddress>> or
-    <<features-bufferDeviceAddressEXT,sname:VkPhysicalDeviceBufferDeviceAddressFeaturesEXT::pname:bufferDeviceAddress>>
-    feature must: be enabled
-  * [[VUID-vkGetBufferDeviceAddress-device-03325]]
-    If pname:device was created with multiple physical devices, then the
-    <<features-bufferDeviceAddressMultiDevice,bufferDeviceAddressMultiDevice>>
-    or
-    <<features-bufferDeviceAddressMultiDeviceEXT,sname:VkPhysicalDeviceBufferDeviceAddressFeaturesEXT::pname:bufferDeviceAddressMultiDevice>>
-    feature must: be enabled
-****
-
-include::{generated}/validity/protos/vkGetBufferDeviceAddress.txt[]
---
-
-[open,refpage='VkBufferDeviceAddressInfo',desc='Structure specifying the buffer to query an address for',type='structs',alias='VkBufferDeviceAddressInfoKHR,VkBufferDeviceAddressInfoEXT']
---
-The sname:VkBufferDeviceAddressInfo structure is defined as:
-
-include::{generated}/api/structs/VkBufferDeviceAddressInfo.txt[]
-
-ifdef::VK_KHR_buffer_device_address[]
-or the equivalent
-
-include::{generated}/api/structs/VkBufferDeviceAddressInfoKHR.txt[]
-endif::VK_KHR_buffer_device_address[]
-
-// @Jon: three-way conditional logic is broken
-ifdef::VK_EXT_buffer_device_address[]
-or the equivalent
-
-include::{generated}/api/structs/VkBufferDeviceAddressInfoEXT.txt[]
-endif::VK_EXT_buffer_device_address[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:buffer specifies the buffer whose address is being queried.
-
-.Valid Usage
-****
-  * [[VUID-VkBufferDeviceAddressInfo-buffer-02600]]
-    If pname:buffer is non-sparse and was not created with the
-    ename:VK_BUFFER_CREATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT flag, then it
-    must: be bound completely and contiguously to a single
-    sname:VkDeviceMemory object
-  * [[VUID-VkBufferDeviceAddressInfo-buffer-02601]]
-    pname:buffer must: have been created with
-    ename:VK_BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT
-****
-
-include::{generated}/validity/structs/VkBufferDeviceAddressInfo.txt[]
---
-endif::VK_VERSION_1_2,VK_EXT_buffer_device_address,VK_KHR_buffer_device_address[]
-
-ifdef::VK_VERSION_1_2,VK_KHR_buffer_device_address[]
-[open,refpage='vkGetBufferOpaqueCaptureAddress',desc='Query an opaque capture address of a buffer',type='protos',alias='vkGetBufferOpaqueCaptureAddressKHR']
---
-To query a 64-bit buffer opaque capture address, call:
-
-ifdef::VK_VERSION_1_2[]
-include::{generated}/api/protos/vkGetBufferOpaqueCaptureAddress.txt[]
-endif::VK_VERSION_1_2[]
-
-ifdef::VK_VERSION_1_2+VK_KHR_buffer_device_address[or the equivalent command]
-
-ifdef::VK_KHR_buffer_device_address[]
-include::{generated}/api/protos/vkGetBufferOpaqueCaptureAddressKHR.txt[]
-endif::VK_KHR_buffer_device_address[]
-
-  * pname:device is the logical device that the buffer was created on.
-  * pname:pInfo is a pointer to a slink:VkBufferDeviceAddressInfo structure
-    specifying the buffer to retrieve an address for.
-
-The 64-bit return value is an opaque capture address of the start of
-pname:pInfo->buffer.
-
-If the buffer was created with a non-zero value of
-slink:VkBufferOpaqueCaptureAddressCreateInfo::pname:opaqueCaptureAddress the
-return value must: be the same address.
-
-.Valid Usage
-****
-  * [[VUID-vkGetBufferOpaqueCaptureAddress-None-03326]]
-    The <<features-bufferDeviceAddress,bufferDeviceAddress>> feature must:
-    be enabled
-  * [[VUID-vkGetBufferOpaqueCaptureAddress-device-03327]]
-    If pname:device was created with multiple physical devices, then the
-    <<features-bufferDeviceAddressMultiDevice,bufferDeviceAddressMultiDevice>>
-    feature must: be enabled
-****
-
-include::{generated}/validity/protos/vkGetBufferOpaqueCaptureAddress.txt[]
---
-endif::VK_VERSION_1_2,VK_KHR_buffer_device_address[]
diff --git a/registry/vulkan/chapters/devsandqueues.txt b/registry/vulkan/chapters/devsandqueues.txt
deleted file mode 100644
index 1051739..0000000
--- a/registry/vulkan/chapters/devsandqueues.txt
+++ /dev/null
@@ -1,2578 +0,0 @@
-// Copyright 2015-2021 The Khronos Group, Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-[[devsandqueues]]
-= Devices and Queues
-
-Once Vulkan is initialized, devices and queues are the primary objects used
-to interact with a Vulkan implementation.
-
-[open,refpage='VkPhysicalDevice',desc='Opaque handle to a physical device object',type='handles']
---
-Vulkan separates the concept of _physical_ and _logical_ devices.
-A physical device usually represents a single complete implementation of
-Vulkan (excluding instance-level functionality) available to the host, of
-which there are a finite number.
-A logical device represents an instance of that implementation with its own
-state and resources independent of other logical devices.
-
-Physical devices are represented by sname:VkPhysicalDevice handles:
-
-include::{generated}/api/handles/VkPhysicalDevice.txt[]
---
-
-
-[[devsandqueues-physical-device-enumeration]]
-== Physical Devices
-
-[open,refpage='vkEnumeratePhysicalDevices',desc='Enumerates the physical devices accessible to a Vulkan instance',type='protos']
---
-To retrieve a list of physical device objects representing the physical
-devices installed in the system, call:
-
-include::{generated}/api/protos/vkEnumeratePhysicalDevices.txt[]
-
-  * pname:instance is a handle to a Vulkan instance previously created with
-    flink:vkCreateInstance.
-  * pname:pPhysicalDeviceCount is a pointer to an integer related to the
-    number of physical devices available or queried, as described below.
-  * pname:pPhysicalDevices is either `NULL` or a pointer to an array of
-    sname:VkPhysicalDevice handles.
-
-If pname:pPhysicalDevices is `NULL`, then the number of physical devices
-available is returned in pname:pPhysicalDeviceCount.
-Otherwise, pname:pPhysicalDeviceCount must: point to a variable set by the
-user to the number of elements in the pname:pPhysicalDevices array, and on
-return the variable is overwritten with the number of handles actually
-written to pname:pPhysicalDevices.
-If pname:pPhysicalDeviceCount is less than the number of physical devices
-available, at most pname:pPhysicalDeviceCount structures will be written,
-and ename:VK_INCOMPLETE will be returned instead of ename:VK_SUCCESS, to
-indicate that not all the available physical devices were returned.
-
-include::{generated}/validity/protos/vkEnumeratePhysicalDevices.txt[]
---
-
-[open,refpage='vkGetPhysicalDeviceProperties',desc='Returns properties of a physical device',type='protos']
---
-To query general properties of physical devices once enumerated, call:
-
-include::{generated}/api/protos/vkGetPhysicalDeviceProperties.txt[]
-
-  * pname:physicalDevice is the handle to the physical device whose
-    properties will be queried.
-  * pname:pProperties is a pointer to a slink:VkPhysicalDeviceProperties
-    structure in which properties are returned.
-
-include::{generated}/validity/protos/vkGetPhysicalDeviceProperties.txt[]
---
-
-[open,refpage='VkPhysicalDeviceProperties',desc='Structure specifying physical device properties',type='structs']
---
-The sname:VkPhysicalDeviceProperties structure is defined as:
-
-include::{generated}/api/structs/VkPhysicalDeviceProperties.txt[]
-
-  * pname:apiVersion is the version of Vulkan supported by the device,
-    encoded as described in <<extendingvulkan-coreversions-versionnumbers>>.
-  * pname:driverVersion is the vendor-specified version of the driver.
-  * pname:vendorID is a unique identifier for the _vendor_ (see below) of
-    the physical device.
-  * pname:deviceID is a unique identifier for the physical device among
-    devices available from the vendor.
-  * pname:deviceType is a elink:VkPhysicalDeviceType specifying the type of
-    device.
-  * pname:deviceName is an array of ename:VK_MAX_PHYSICAL_DEVICE_NAME_SIZE
-    code:char containing a null-terminated UTF-8 string which is the name of
-    the device.
-  * pname:pipelineCacheUUID is an array of ename:VK_UUID_SIZE code:uint8_t
-    values representing a universally unique identifier for the device.
-  * pname:limits is the slink:VkPhysicalDeviceLimits structure specifying
-    device-specific limits of the physical device.
-    See <<limits,Limits>> for details.
-  * pname:sparseProperties is the slink:VkPhysicalDeviceSparseProperties
-    structure specifying various sparse related properties of the physical
-    device.
-    See <<sparsememory-physicalprops,Sparse Properties>> for details.
-
-ifdef::VK_VERSION_1_1[]
-[NOTE]
-.Note
-====
-The value of pname:apiVersion may: be different than the version returned by
-flink:vkEnumerateInstanceVersion; either higher or lower.
-In such cases, the application must: not use functionality that exceeds the
-version of Vulkan associated with a given object.
-The pname:pApiVersion parameter returned by flink:vkEnumerateInstanceVersion
-is the version associated with a slink:VkInstance and its children, except
-for a slink:VkPhysicalDevice and its children.
-sname:VkPhysicalDeviceProperties::pname:apiVersion is the version associated
-with a slink:VkPhysicalDevice and its children.
-====
-endif::VK_VERSION_1_1[]
-
-[NOTE]
-.Note
-====
-The encoding of pname:driverVersion is implementation-defined.
-It may: not use the same encoding as pname:apiVersion.
-Applications should follow information from the _vendor_ on how to extract
-the version information from pname:driverVersion.
-====
-
-The pname:vendorID and pname:deviceID fields are provided to allow
-applications to adapt to device characteristics that are not adequately
-exposed by other Vulkan queries.
-
-[NOTE]
-.Note
-====
-These may: include performance profiles, hardware errata, or other
-characteristics.
-====
-
-The _vendor_ identified by pname:vendorID is the entity responsible for the
-most salient characteristics of the underlying implementation of the
-slink:VkPhysicalDevice being queried.
-
-[NOTE]
-.Note
-====
-For example, in the case of a discrete GPU implementation, this should: be
-the GPU chipset vendor.
-In the case of a hardware accelerator integrated into a system-on-chip
-(SoC), this should: be the supplier of the silicon IP used to create the
-accelerator.
-====
-
-If the vendor has a https://pcisig.com/membership/member-companies[PCI
-vendor ID], the low 16 bits of pname:vendorID must: contain that PCI vendor
-ID, and the remaining bits must: be set to zero.
-Otherwise, the value returned must: be a valid Khronos vendor ID, obtained
-as described in the <<vulkan-styleguide,Vulkan Documentation and Extensions:
-Procedures and Conventions>> document in the section "`Registering a Vendor
-ID with Khronos`".
-Khronos vendor IDs are allocated starting at 0x10000, to distinguish them
-from the PCI vendor ID namespace.
-Khronos vendor IDs are symbolically defined in the elink:VkVendorId type.
-
-The vendor is also responsible for the value returned in pname:deviceID.
-If the implementation is driven primarily by a https://pcisig.com/[PCI
-device] with a https://pcisig.com/[PCI device ID], the low 16 bits of
-pname:deviceID must: contain that PCI device ID, and the remaining bits
-must: be set to zero.
-Otherwise, the choice of what values to return may: be dictated by operating
-system or platform policies - but should: uniquely identify both the device
-version and any major configuration options (for example, core count in the
-case of multicore devices).
-
-[NOTE]
-.Note
-====
-The same device ID should: be used for all physical implementations of that
-device version and configuration.
-For example, all uses of a specific silicon IP GPU version and configuration
-should: use the same device ID, even if those uses occur in different SoCs.
-====
-
-include::{generated}/validity/structs/VkPhysicalDeviceProperties.txt[]
---
-
-[open,refpage='VkVendorId',desc='Khronos vendor IDs',type='enums']
---
-Khronos vendor IDs which may: be returned in
-slink:VkPhysicalDeviceProperties::pname:vendorID are:
-
-include::{generated}/api/enums/VkVendorId.txt[]
-
-[NOTE]
-.Note
-====
-Khronos vendor IDs may be allocated by vendors at any time.
-Only the latest canonical versions of this Specification, of the
-corresponding `vk.xml` API Registry, and of the corresponding
-`{core_header}` header file must: contain all reserved Khronos vendor IDs.
-
-Only Khronos vendor IDs are given symbolic names at present.
-PCI vendor IDs returned by the implementation can be looked up in the
-PCI-SIG database.
-====
---
-
-[open,refpage='VK_MAX_PHYSICAL_DEVICE_NAME_SIZE',desc='Length of a physical device name string',type='consts']
---
-ename:VK_MAX_PHYSICAL_DEVICE_NAME_SIZE is the length in code:char values of
-an array containing a physical device name string, as returned in
-slink:VkPhysicalDeviceProperties::deviceName.
-
-include::{generated}/api/enums/VK_MAX_PHYSICAL_DEVICE_NAME_SIZE.txt[]
---
-
-[open,refpage='VkPhysicalDeviceType',desc='Supported physical device types',type='enums']
---
-The physical device types which may: be returned in
-slink:VkPhysicalDeviceProperties::pname:deviceType are:
-
-include::{generated}/api/enums/VkPhysicalDeviceType.txt[]
-
-  * ename:VK_PHYSICAL_DEVICE_TYPE_OTHER - the device does not match any
-    other available types.
-  * ename:VK_PHYSICAL_DEVICE_TYPE_INTEGRATED_GPU - the device is typically
-    one embedded in or tightly coupled with the host.
-  * ename:VK_PHYSICAL_DEVICE_TYPE_DISCRETE_GPU - the device is typically a
-    separate processor connected to the host via an interlink.
-  * ename:VK_PHYSICAL_DEVICE_TYPE_VIRTUAL_GPU - the device is typically a
-    virtual node in a virtualization environment.
-  * ename:VK_PHYSICAL_DEVICE_TYPE_CPU - the device is typically running on
-    the same processors as the host.
-
-The physical device type is advertised for informational purposes only, and
-does not directly affect the operation of the system.
-However, the device type may: correlate with other advertised properties or
-capabilities of the system, such as how many memory heaps there are.
---
-
-ifdef::VK_VERSION_1_1,VK_KHR_get_physical_device_properties2[]
-[open,refpage='vkGetPhysicalDeviceProperties2',desc='Returns properties of a physical device',type='protos']
---
-To query general properties of physical devices once enumerated, call:
-
-ifdef::VK_VERSION_1_1[]
-include::{generated}/api/protos/vkGetPhysicalDeviceProperties2.txt[]
-endif::VK_VERSION_1_1[]
-
-ifdef::VK_VERSION_1_1+VK_KHR_get_physical_device_properties2[or the equivalent command]
-
-ifdef::VK_KHR_get_physical_device_properties2[]
-include::{generated}/api/protos/vkGetPhysicalDeviceProperties2KHR.txt[]
-endif::VK_KHR_get_physical_device_properties2[]
-
-  * pname:physicalDevice is the handle to the physical device whose
-    properties will be queried.
-  * pname:pProperties is a pointer to a slink:VkPhysicalDeviceProperties2
-    structure in which properties are returned.
-
-Each structure in pname:pProperties and its pname:pNext chain contains
-members corresponding to implementation-dependent properties, behaviors, or
-limits.
-fname:vkGetPhysicalDeviceProperties2 fills in each member to specify the
-corresponding value for the implementation.
-
-include::{generated}/validity/protos/vkGetPhysicalDeviceProperties2.txt[]
---
-
-[open,refpage='VkPhysicalDeviceProperties2',desc='Structure specifying physical device properties',type='structs']
---
-The sname:VkPhysicalDeviceProperties2 structure is defined as:
-
-include::{generated}/api/structs/VkPhysicalDeviceProperties2.txt[]
-
-ifdef::VK_KHR_get_physical_device_properties2[]
-or the equivalent
-
-include::{generated}/api/structs/VkPhysicalDeviceProperties2KHR.txt[]
-endif::VK_KHR_get_physical_device_properties2[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:properties is a slink:VkPhysicalDeviceProperties structure
-    describing properties of the physical device.
-    This structure is written with the same values as if it were written by
-    flink:vkGetPhysicalDeviceProperties.
-
-The pname:pNext chain of this structure is used to extend the structure with
-properties defined by extensions.
-
-include::{generated}/validity/structs/VkPhysicalDeviceProperties2.txt[]
---
-
-ifdef::VK_VERSION_1_2[]
-[open,refpage='VkPhysicalDeviceVulkan11Properties',desc='Structure specifying physical device properties for functionality promoted to Vulkan 1.1',type='structs']
---
-The sname:VkPhysicalDeviceVulkan11Properties structure is defined as:
-
-include::{generated}/api/structs/VkPhysicalDeviceVulkan11Properties.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-
-:anchor-prefix:
-include::{chapters}/devsandqueues.txt[tag=VK_KHR_external_memory_capabilities-properties]
-  * [[{anchor-prefix}limits-subgroup-size]] pname:subgroupSize is the
-    default number of invocations in each subgroup.
-    pname:subgroupSize is at least 1 if any of the physical device's queues
-    support ename:VK_QUEUE_GRAPHICS_BIT or ename:VK_QUEUE_COMPUTE_BIT.
-    pname:subgroupSize is a power-of-two.
-  * [[{anchor-prefix}limits-subgroupSupportedStages]]
-    pname:subgroupSupportedStages is a bitfield of
-    elink:VkShaderStageFlagBits describing the shader stages that
-    <<shaders-group-operations, group operations>> with
-    <<shaders-scope-subgroup, subgroup scope>> are supported in.
-    pname:subgroupSupportedStages will have the
-    ename:VK_SHADER_STAGE_COMPUTE_BIT bit set if any of the physical
-    device's queues support ename:VK_QUEUE_COMPUTE_BIT.
-  * pname:subgroupSupportedOperations is a bitmask of
-    elink:VkSubgroupFeatureFlagBits specifying the sets of
-    <<shaders-group-operations, group operations>> with
-    <<shaders-scope-subgroup, subgroup scope>> supported on this device.
-    pname:subgroupSupportedOperations will have the
-    ename:VK_SUBGROUP_FEATURE_BASIC_BIT bit set if any of the physical
-    device's queues support ename:VK_QUEUE_GRAPHICS_BIT or
-    ename:VK_QUEUE_COMPUTE_BIT.
-  * [[{anchor-prefix}limits-subgroupQuadOperationsInAllStages]]
-    pname:subgroupQuadOperationsInAllStages is a boolean specifying whether
-    <<shaders-quad-operations,quad group operations>> are available in all
-    stages, or are restricted to fragment and compute stages.
-include::{chapters}/limits.txt[tag=VK_KHR_maintenance2-properties]
-include::{chapters}/limits.txt[tag=VK_KHR_multiview-properties]
-include::{chapters}/limits.txt[tag=VK_KHR_protected_memory-properties]
-include::{chapters}/limits.txt[tag=VK_KHR_maintenance3-properties]
-
-:refpage: VkPhysicalDeviceVulkan11Properties
-include::{chapters}/limits.txt[tag=limits_desc]
-
-These properties correspond to Vulkan 1.1 functionality.
-
-The members of sname:VkPhysicalDeviceVulkan11Properties have the same values
-as the corresponding members of slink:VkPhysicalDeviceIDProperties,
-slink:VkPhysicalDeviceSubgroupProperties,
-slink:VkPhysicalDevicePointClippingProperties,
-slink:VkPhysicalDeviceMultiviewProperties,
-slink:VkPhysicalDeviceProtectedMemoryProperties, and
-slink:VkPhysicalDeviceMaintenance3Properties.
-
-include::{generated}/validity/structs/VkPhysicalDeviceVulkan11Properties.txt[]
---
-
-[open,refpage='VkPhysicalDeviceVulkan12Properties',desc='Structure specifying physical device properties for functionality promoted to Vulkan 1.2',type='structs']
---
-The sname:VkPhysicalDeviceVulkan12Properties structure is defined as:
-
-include::{generated}/api/structs/VkPhysicalDeviceVulkan12Properties.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-
-:anchor-prefix:
-include::{chapters}/devsandqueues.txt[tag=VK_KHR_driver_properties-properties]
-include::{chapters}/limits.txt[tag=VK_KHR_shader_float_controls-properties]
-include::{chapters}/limits.txt[tag=VK_EXT_descriptor_indexing-properties]
-include::{chapters}/limits.txt[tag=VK_KHR_depth_stencil_resolve-properties]
-include::{chapters}/limits.txt[tag=VK_EXT_sampler_filter_minmax-properties]
-include::{chapters}/limits.txt[tag=VK_KHR_timeline_semaphore-properties]
-  * [[limits-framebufferIntegerColorSampleCounts]]
-    pname:framebufferIntegerColorSampleCounts is a bitmask of
-    elink:VkSampleCountFlagBits indicating the color sample counts that are
-    supported for all framebuffer color attachments with integer formats.
-
-:refpage: VkPhysicalDeviceVulkan12Properties
-include::{chapters}/limits.txt[tag=limits_desc]
-
-These properties correspond to Vulkan 1.2 functionality.
-
-The members of sname:VkPhysicalDeviceVulkan12Properties must: have the same
-values as the corresponding members of
-slink:VkPhysicalDeviceDriverProperties,
-slink:VkPhysicalDeviceFloatControlsProperties,
-slink:VkPhysicalDeviceDescriptorIndexingProperties,
-slink:VkPhysicalDeviceDepthStencilResolveProperties,
-slink:VkPhysicalDeviceSamplerFilterMinmaxProperties, and
-slink:VkPhysicalDeviceTimelineSemaphoreProperties.
-
-include::{generated}/validity/structs/VkPhysicalDeviceVulkan12Properties.txt[]
---
-endif::VK_VERSION_1_2[]
-
-ifdef::VK_VERSION_1_1,VK_KHR_external_memory_capabilities,VK_KHR_external_semaphore_capabilities,VK_KHR_external_fence_capabilities[]
-[open,refpage='VkPhysicalDeviceIDProperties',desc='Structure specifying IDs related to the physical device',type='structs']
---
-The sname:VkPhysicalDeviceIDProperties structure is defined as:
-
-include::{generated}/api/structs/VkPhysicalDeviceIDProperties.txt[]
-
-ifdef::VK_KHR_external_memory_capabilities[]
-or the equivalent
-
-include::{generated}/api/structs/VkPhysicalDeviceIDPropertiesKHR.txt[]
-endif::VK_KHR_external_memory_capabilities[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-
-// Must have preceding whitespace
-ifdef::VK_VERSION_1_2[:anchor-prefix: extension-]
-ifndef::VK_VERSION_1_2[:anchor-prefix:]
-// tag::VK_KHR_external_memory_capabilities-properties[]
-  * pname:deviceUUID is an array of ename:VK_UUID_SIZE code:uint8_t values
-    representing a universally unique identifier for the device.
-  * pname:driverUUID is an array of ename:VK_UUID_SIZE code:uint8_t values
-    representing a universally unique identifier for the driver build in use
-    by the device.
-  * pname:deviceLUID is an array of ename:VK_LUID_SIZE code:uint8_t values
-    representing a locally unique identifier for the device.
-  * pname:deviceNodeMask is a code:uint32_t bitfield identifying the node
-    within a linked device adapter corresponding to the device.
-  * pname:deviceLUIDValid is a boolean value that will be ename:VK_TRUE if
-    pname:deviceLUID contains a valid LUID and pname:deviceNodeMask contains
-    a valid node mask, and ename:VK_FALSE if they do not.
-// end::VK_KHR_external_memory_capabilities-properties[]
-
-:refpage: VkPhysicalDeviceIDProperties
-include::{chapters}/limits.txt[tag=limits_desc]
-
-pname:deviceUUID must: be immutable for a given device across instances,
-processes, driver APIs, driver versions, and system reboots.
-
-Applications can: compare the pname:driverUUID value across instance and
-process boundaries, and can: make similar queries in external APIs to
-determine whether they are capable of sharing memory objects and resources
-using them with the device.
-
-pname:deviceUUID and/or pname:driverUUID must: be used to determine whether
-a particular external object can be shared between driver components, where
-such a restriction exists as defined in the compatibility table for the
-particular object type:
-
-ifdef::VK_VERSION_1_1,VK_KHR_external_memory_capabilities[]
-  * <<external-memory-handle-types-compatibility,External memory handle
-    types compatibility>>
-endif::VK_VERSION_1_1,VK_KHR_external_memory_capabilities[]
-ifdef::VK_VERSION_1_1,VK_KHR_external_semaphore_capabilities[]
-  * <<external-semaphore-handle-types-compatibility,External semaphore
-    handle types compatibility>>
-endif::VK_VERSION_1_1,VK_KHR_external_semaphore_capabilities[]
-ifdef::VK_VERSION_1_1,VK_KHR_external_fence_capabilities[]
-  * <<external-fence-handle-types-compatibility,External fence handle types
-    compatibility>>
-endif::VK_VERSION_1_1,VK_KHR_external_fence_capabilities[]
-
-If pname:deviceLUIDValid is ename:VK_FALSE, the values of pname:deviceLUID
-and pname:deviceNodeMask are undefined:.
-If pname:deviceLUIDValid is ename:VK_TRUE and Vulkan is running on the
-Windows operating system, the contents of pname:deviceLUID can: be cast to
-an code:LUID object and must: be equal to the locally unique identifier of a
-code:IDXGIAdapter1 object that corresponds to pname:physicalDevice.
-If pname:deviceLUIDValid is ename:VK_TRUE, pname:deviceNodeMask must:
-contain exactly one bit.
-If Vulkan is running on an operating system that supports the Direct3D 12
-API and pname:physicalDevice corresponds to an individual device in a linked
-device adapter, pname:deviceNodeMask identifies the Direct3D 12 node
-corresponding to pname:physicalDevice.
-Otherwise, pname:deviceNodeMask must: be `1`.
-
-[NOTE]
-.Note
-====
-Although they have identical descriptions,
-slink:VkPhysicalDeviceIDProperties::pname:deviceUUID may differ from
-slink:VkPhysicalDeviceProperties2::pname:pipelineCacheUUID.
-The former is intended to identify and correlate devices across API and
-driver boundaries, while the latter is used to identify a compatible device
-and driver combination to use when serializing and de-serializing pipeline
-state.
-
-Implementations should: return pname:deviceUUID values which are likely to
-be unique even in the presence of multiple Vulkan implementations (such as a
-GPU driver and a software renderer; two drivers for different GPUs; or the
-same Vulkan driver running on two logically different devices).
-
-Khronos' conformance testing can not guarantee that pname:deviceUUID values
-are actually unique, so implementors should make their own best efforts to
-ensure this.
-In particular, hard-coded pname:deviceUUID values, especially all-`0` bits,
-should: never be used.
-
-A combination of values unique to the vendor, the driver, and the hardware
-environment can be used to provide a pname:deviceUUID which is unique to a
-high degree of certainty.
-Some possible inputs to such a computation are:
-
-  * Information reported by flink:vkGetPhysicalDeviceProperties
-  * PCI device ID (if defined)
-  * PCI bus ID, or similar system configuration information.
-  * Driver binary checksums.
-====
-
-
-[NOTE]
-.Note
-====
-While slink:VkPhysicalDeviceIDProperties::pname:deviceUUID is specified to
-remain consistent across driver versions and system reboots, it is not
-intended to be usable as a serializable persistent identifier for a device.
-It may change when a device is physically added to, removed from, or moved
-to a different connector in a system while that system is powered down.
-Further, there is no reasonable way to verify with conformance testing that
-a given device retains the same UUID in a given system across all driver
-versions supported in that system.
-While implementations should make every effort to report consistent device
-UUIDs across driver versions, applications should avoid relying on the
-persistence of this value for uses other than identifying compatible devices
-for external object sharing purposes.
-====
-
-include::{generated}/validity/structs/VkPhysicalDeviceIDProperties.txt[]
---
-
-[open,refpage='VK_UUID_SIZE',desc='Length of a universally unique device or driver build identifier',type='consts']
---
-ename:VK_UUID_SIZE is the length in code:uint8_t values of an array
-containing a universally unique device or driver build identifier, as
-returned in slink:VkPhysicalDeviceIDProperties::deviceUUID and
-slink:VkPhysicalDeviceIDProperties::driverUUID.
-
-include::{generated}/api/enums/VK_UUID_SIZE.txt[]
---
-
-[open,refpage='VK_LUID_SIZE',desc='Length of a locally unique device identifier',type='consts']
---
-ename:VK_LUID_SIZE is the length in code:uint8_t values of an array
-containing a locally unique device identifier, as returned in
-slink:VkPhysicalDeviceIDProperties::deviceLUID.
-
-include::{generated}/api/enums/VK_LUID_SIZE.txt[]
-
-ifdef::VK_KHR_external_memory_capabilities,VK_KHR_external_semaphore_capabilities,VK_KHR_external_fence_capabilities[]
-or the equivalent
-
-include::{generated}/api/enums/VK_LUID_SIZE_KHR.txt[]
-endif::VK_KHR_external_memory_capabilities,VK_KHR_external_semaphore_capabilities,VK_KHR_external_fence_capabilities[]
---
-endif::VK_VERSION_1_1,VK_KHR_external_memory_capabilities,VK_KHR_external_semaphore_capabilities,VK_KHR_external_fence_capabilities[]
-
-ifdef::VK_VERSION_1_2,VK_KHR_driver_properties[]
-[open,refpage='VkPhysicalDeviceDriverProperties',desc='Structure containing driver identification information',type='structs',alias='VkPhysicalDeviceDriverPropertiesKHR']
---
-The sname:VkPhysicalDeviceDriverProperties structure is defined as:
-
-include::{generated}/api/structs/VkPhysicalDeviceDriverProperties.txt[]
-
-ifdef::VK_KHR_driver_properties[]
-or the equivalent
-
-include::{generated}/api/structs/VkPhysicalDeviceDriverPropertiesKHR.txt[]
-endif::VK_KHR_driver_properties[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-
-// Must have preceding whitespace
-ifdef::VK_VERSION_1_2[:anchor-prefix: extension-]
-ifndef::VK_VERSION_1_2[:anchor-prefix:]
-// tag::VK_KHR_driver_properties-properties[]
-  * pname:driverID is a unique identifier for the driver of the physical
-    device.
-  * pname:driverName is an array of ename:VK_MAX_DRIVER_NAME_SIZE code:char
-    containing a null-terminated UTF-8 string which is the name of the
-    driver.
-  * pname:driverInfo is an array of ename:VK_MAX_DRIVER_INFO_SIZE code:char
-    containing a null-terminated UTF-8 string with additional information
-    about the driver.
-  * pname:conformanceVersion is the version of the Vulkan conformance test
-    this driver is conformant against (see slink:VkConformanceVersion).
-// end::VK_KHR_driver_properties-properties[]
-
-:refpage: VkPhysicalDeviceDriverProperties
-include::{chapters}/limits.txt[tag=limits_desc]
-
-These are properties of the driver corresponding to a physical device.
-
-pname:driverID must: be immutable for a given driver across instances,
-processes, driver versions, and system reboots.
-
-include::{generated}/validity/structs/VkPhysicalDeviceDriverProperties.txt[]
---
-
-[open,refpage='VkDriverId',desc='Khronos driver IDs',type='enums',alias='VkDriverIdKHR']
---
-Khronos driver IDs which may: be returned in
-slink:VkPhysicalDeviceDriverProperties::pname:driverID are:
-
-include::{generated}/api/enums/VkDriverId.txt[]
-
-ifdef::VK_KHR_driver_properties[]
-or the equivalent
-
-include::{generated}/api/enums/VkDriverIdKHR.txt[]
-endif::VK_KHR_driver_properties[]
-
-[NOTE]
-.Note
-====
-Khronos driver IDs may be allocated by vendors at any time.
-There may be multiple driver IDs for the same vendor, representing different
-drivers (for e.g. different platforms, proprietary or open source, etc.).
-Only the latest canonical versions of this Specification, of the
-corresponding `vk.xml` API Registry, and of the corresponding
-`{core_header}` header file must: contain all reserved Khronos driver IDs.
-
-Only driver IDs registered with Khronos are given symbolic names.
-There may: be unregistered driver IDs returned.
-====
---
-
-[open,refpage='VK_MAX_DRIVER_NAME_SIZE',desc='Maximum length of a physical device driver name string',type='consts']
---
-ename:VK_MAX_DRIVER_NAME_SIZE is the length in code:char values of an array
-containing a driver name string, as returned in
-slink:VkPhysicalDeviceDriverProperties::driverName.
-
-include::{generated}/api/enums/VK_MAX_DRIVER_NAME_SIZE.txt[]
-
-ifdef::VK_KHR_driver_properties[]
-or the equivalent
-
-include::{generated}/api/enums/VK_MAX_DRIVER_NAME_SIZE_KHR.txt[]
-endif::VK_KHR_driver_properties[]
---
-
-[open,refpage='VK_MAX_DRIVER_INFO_SIZE',desc='Length of a physical device driver information string',type='consts']
---
-ename:VK_MAX_DRIVER_INFO_SIZE is the length in code:char values of an array
-containing a driver information string, as returned in
-slink:VkPhysicalDeviceDriverProperties::driverInfo.
-
-include::{generated}/api/enums/VK_MAX_DRIVER_INFO_SIZE.txt[]
-
-ifdef::VK_KHR_driver_properties[]
-or the equivalent
-
-include::{generated}/api/enums/VK_MAX_DRIVER_INFO_SIZE_KHR.txt[]
-endif::VK_KHR_driver_properties[]
---
-
-[open,refpage='VkConformanceVersion',desc='Structure containing the conformance test suite version the implementation is compliant with',type='structs',alias='VkConformanceVersionKHR']
---
-The conformance test suite version an implementation is compliant with is
-described with the sname:VkConformanceVersion structure:
-
-include::{generated}/api/structs/VkConformanceVersion.txt[]
-
-ifdef::VK_KHR_driver_properties[]
-or the equivalent
-
-include::{generated}/api/structs/VkConformanceVersionKHR.txt[]
-endif::VK_KHR_driver_properties[]
-
-  * pname:major is the major version number of the conformance test suite.
-  * pname:minor is the minor version number of the conformance test suite.
-  * pname:subminor is the subminor version number of the conformance test
-    suite.
-  * pname:patch is the patch version number of the conformance test suite.
-
-include::{generated}/validity/structs/VkConformanceVersion.txt[]
---
-endif::VK_VERSION_1_2,VK_KHR_driver_properties[]
-
-ifdef::VK_EXT_pci_bus_info[]
-[open,refpage='VkPhysicalDevicePCIBusInfoPropertiesEXT',desc='Structure containing PCI bus information of a physical device',type='structs']
---
-The sname:VkPhysicalDevicePCIBusInfoPropertiesEXT structure is defined as:
-
-include::{generated}/api/structs/VkPhysicalDevicePCIBusInfoPropertiesEXT.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:pciDomain is the PCI bus domain.
-  * pname:pciBus is the PCI bus identifier.
-  * pname:pciDevice is the PCI device identifier.
-  * pname:pciFunction is the PCI device function identifier.
-
-:refpage: VkPhysicalDevicePCIBusInfoPropertiesEXT
-include::{chapters}/limits.txt[tag=limits_desc]
-
-These are properties of the PCI bus information of a physical device.
-
-include::{generated}/validity/structs/VkPhysicalDevicePCIBusInfoPropertiesEXT.txt[]
---
-endif::VK_EXT_pci_bus_info[]
-
-ifdef::VK_EXT_physical_device_drm[]
-[open,refpage='VkPhysicalDeviceDrmPropertiesEXT',desc='Structure containing DRM information of a physical device',type='structs']
---
-The sname:VkPhysicalDeviceDrmPropertiesEXT structure is defined as:
-
-include::{generated}/api/structs/VkPhysicalDeviceDrmPropertiesEXT.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:hasPrimary is a boolean indicating whether the physical device has
-    a DRM primary node.
-  * pname:hasRender is a boolean indicating whether the physical device has
-    a DRM render node.
-  * pname:primaryMajor is the DRM primary node major number, if any.
-  * pname:primaryMinor is the DRM primary node minor number, if any.
-  * pname:renderMajor is the DRM render node major number, if any.
-  * pname:renderMinor is the DRM render node minor number, if any.
-
-:refpage: VkPhysicalDeviceDrmPropertiesEXT
-include::{chapters}/limits.txt[tag=limits_desc]
-
-These are properties of the DRM information of a physical device.
-
-include::{generated}/validity/structs/VkPhysicalDeviceDrmPropertiesEXT.txt[]
---
-endif::VK_EXT_physical_device_drm[]
-endif::VK_VERSION_1_1,VK_KHR_get_physical_device_properties2[]
-
-ifdef::VK_KHR_shader_integer_dot_product[]
-[open,refpage='VkPhysicalDeviceShaderIntegerDotProductPropertiesKHR',desc='Structure containing information about integer dot product support for a physical device',type='structs']
---
-The sname:VkPhysicalDeviceShaderIntegerDotProductPropertiesKHR structure is
-defined as:
-
-include::{generated}/api/structs/VkPhysicalDeviceShaderIntegerDotProductPropertiesKHR.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:integerDotProduct8BitUnsignedAccelerated is a boolean that will be
-    ename:VK_TRUE if the support for 8-bit unsigned dot product operations
-    using the code:OpUDotKHR SPIR-V instruction is accelerated
-    <<devsandqueues-integer-dot-product-accelerated,as defined below>>.
-  * pname:integerDotProduct8BitSignedAccelerated is a boolean that will be
-    ename:VK_TRUE if the support for 8-bit signed dot product operations
-    using the code:OpSDotKHR SPIR-V instruction is accelerated
-    <<devsandqueues-integer-dot-product-accelerated,as defined below>>.
-  * pname:integerDotProduct8BitMixedSignednessAccelerated is a boolean that
-    will be ename:VK_TRUE if the support for 8-bit mixed signedness dot
-    product operations using the code:OpSUDotKHR SPIR-V instruction is
-    accelerated <<devsandqueues-integer-dot-product-accelerated,as defined
-    below>>.
-  * pname:integerDotProduct4x8BitPackedUnsignedAccelerated is a boolean that
-    will be ename:VK_TRUE if the support for 8-bit unsigned dot product
-    operations from operands packed into 32-bit integers using the
-    code:OpUDotKHR SPIR-V instruction is accelerated
-    <<devsandqueues-integer-dot-product-accelerated,as defined below>>.
-  * pname:integerDotProduct4x8BitPackedSignedAccelerated is a boolean that
-    will be ename:VK_TRUE if the support for 8-bit signed dot product
-    operations from operands packed into 32-bit integers using the
-    code:OpSDotKHR SPIR-V instruction is accelerated
-    <<devsandqueues-integer-dot-product-accelerated,as defined below>>.
-  * pname:integerDotProduct4x8BitPackedMixedSignednessAccelerated is a
-    boolean that will be ename:VK_TRUE if the support for 8-bit mixed
-    signedness dot product operations from operands packed into 32-bit
-    integers using the code:OpSUDotKHR SPIR-V instruction is accelerated
-    <<devsandqueues-integer-dot-product-accelerated,as defined below>>.
-  * pname:integerDotProduct16BitUnsignedAccelerated is a boolean that will
-    be ename:VK_TRUE if the support for 16-bit unsigned dot product
-    operations using the code:OpUDotKHR SPIR-V instruction is accelerated
-    <<devsandqueues-integer-dot-product-accelerated,as defined below>>.
-  * pname:integerDotProduct16BitSignedAccelerated is a boolean that will be
-    ename:VK_TRUE if the support for 16-bit signed dot product operations
-    using the code:OpSDotKHR SPIR-V instruction is accelerated
-    <<devsandqueues-integer-dot-product-accelerated,as defined below>>.
-  * pname:integerDotProduct16BitMixedSignednessAccelerated is a boolean that
-    will be ename:VK_TRUE if the support for 16-bit mixed signedness dot
-    product operations using the code:OpSUDotKHR SPIR-V instruction is
-    accelerated <<devsandqueues-integer-dot-product-accelerated,as defined
-    below>>.
-  * pname:integerDotProduct32BitUnsignedAccelerated is a boolean that will
-    be ename:VK_TRUE if the support for 32-bit unsigned dot product
-    operations using the code:OpUDotKHR SPIR-V instruction is accelerated
-    <<devsandqueues-integer-dot-product-accelerated,as defined below>>.
-  * pname:integerDotProduct32BitSignedAccelerated is a boolean that will be
-    ename:VK_TRUE if the support for 32-bit signed dot product operations
-    using the code:OpSDotKHR SPIR-V instruction is accelerated
-    <<devsandqueues-integer-dot-product-accelerated,as defined below>>.
-  * pname:integerDotProduct32BitMixedSignednessAccelerated is a boolean that
-    will be ename:VK_TRUE if the support for 32-bit mixed signedness dot
-    product operations using the code:OpSUDotKHR SPIR-V instruction is
-    accelerated <<devsandqueues-integer-dot-product-accelerated,as defined
-    below>>.
-  * pname:integerDotProduct64BitUnsignedAccelerated is a boolean that will
-    be ename:VK_TRUE if the support for 64-bit unsigned dot product
-    operations using the code:OpUDotKHR SPIR-V instruction is accelerated
-    <<devsandqueues-integer-dot-product-accelerated,as defined below>>.
-  * pname:integerDotProduct64BitSignedAccelerated is a boolean that will be
-    ename:VK_TRUE if the support for 64-bit signed dot product operations
-    using the code:OpSDotKHR SPIR-V instruction is accelerated
-    <<devsandqueues-integer-dot-product-accelerated,as defined below>>.
-  * pname:integerDotProduct64BitMixedSignednessAccelerated is a boolean that
-    will be ename:VK_TRUE if the support for 64-bit mixed signedness dot
-    product operations using the code:OpSUDotKHR SPIR-V instruction is
-    accelerated <<devsandqueues-integer-dot-product-accelerated,as defined
-    below>>.
-  * pname:integerDotProductAccumulatingSaturating8BitUnsignedAccelerated is
-    a boolean that will be ename:VK_TRUE if the support for 8-bit unsigned
-    accumulating saturating dot product operations using the
-    code:OpUDotAccSatKHR SPIR-V instruction is accelerated
-    <<devsandqueues-integer-dot-product-accelerated,as defined below>>.
-  * pname:integerDotProductAccumulatingSaturating8BitSignedAccelerated is a
-    boolean that will be ename:VK_TRUE if the support for 8-bit signed
-    accumulating saturating dot product operations using the
-    code:OpSDotAccSatKHR SPIR-V instruction is accelerated
-    <<devsandqueues-integer-dot-product-accelerated,as defined below>>.
-  * pname:integerDotProductAccumulatingSaturating8BitMixedSignednessAccelerated
-    is a boolean that will be ename:VK_TRUE if the support for 8-bit mixed
-    signedness accumulating saturating dot product operations using the
-    code:OpSUDotAccSatKHR SPIR-V instruction is accelerated
-    <<devsandqueues-integer-dot-product-accelerated,as defined below>>.
-  * pname:integerDotProductAccumulatingSaturating4x8BitPackedUnsignedAccelerated
-    is a boolean that will be ename:VK_TRUE if the support for 8-bit
-    unsigned accumulating saturating dot product operations from operands
-    packed into 32-bit integers using the code:OpUDotAccSatKHR SPIR-V
-    instruction is accelerated
-    <<devsandqueues-integer-dot-product-accelerated,as defined below>>.
-  * pname:integerDotProductAccumulatingSaturating4x8BitPackedSignedAccelerated
-    is a boolean that will be ename:VK_TRUE if the support for 8-bit signed
-    accumulating saturating dot product operations from operands packed into
-    32-bit integers using the code:OpSDotAccSatKHR SPIR-V instruction is
-    accelerated <<devsandqueues-integer-dot-product-accelerated,as defined
-    below>>.
-  * pname:integerDotProductAccumulatingSaturating4x8BitPackedMixedSignednessAccelerated
-    is a boolean that will be ename:VK_TRUE if the support for 8-bit mixed
-    signedness accumulating saturating dot product operations from operands
-    packed into 32-bit integers using the code:OpSUDotAccSatKHR SPIR-V
-    instruction is accelerated
-    <<devsandqueues-integer-dot-product-accelerated,as defined below>>.
-  * pname:integerDotProductAccumulatingSaturating16BitUnsignedAccelerated is
-    a boolean that will be ename:VK_TRUE if the support for 16-bit unsigned
-    accumulating saturating dot product operations using the
-    code:OpUDotAccSatKHR SPIR-V instruction is accelerated
-    <<devsandqueues-integer-dot-product-accelerated,as defined below>>.
-  * pname:integerDotProductAccumulatingSaturating16BitSignedAccelerated is a
-    boolean that will be ename:VK_TRUE if the support for 16-bit signed
-    accumulating saturating dot product operations using the
-    code:OpSDotAccSatKHR SPIR-V instruction is accelerated
-    <<devsandqueues-integer-dot-product-accelerated,as defined below>>.
-  * pname:integerDotProductAccumulatingSaturating16BitMixedSignednessAccelerated
-    is a boolean that will be ename:VK_TRUE if the support for 16-bit mixed
-    signedness accumulating saturating dot product operations using the
-    code:OpSUDotAccSatKHR SPIR-V instruction is accelerated
-    <<devsandqueues-integer-dot-product-accelerated,as defined below>>.
-  * pname:integerDotProductAccumulatingSaturating32BitUnsignedAccelerated is
-    a boolean that will be ename:VK_TRUE if the support for 32-bit unsigned
-    accumulating saturating dot product operations using the
-    code:OpUDotAccSatKHR SPIR-V instruction is accelerated
-    <<devsandqueues-integer-dot-product-accelerated,as defined below>>.
-  * pname:integerDotProductAccumulatingSaturating32BitSignedAccelerated is a
-    boolean that will be ename:VK_TRUE if the support for 32-bit signed
-    accumulating saturating dot product operations using the
-    code:OpSDotAccSatKHR SPIR-V instruction is accelerated
-    <<devsandqueues-integer-dot-product-accelerated,as defined below>>.
-  * pname:integerDotProductAccumulatingSaturating32BitMixedSignednessAccelerated
-    is a boolean that will be ename:VK_TRUE if the support for 32-bit mixed
-    signedness accumulating saturating dot product operations using the
-    code:OpSUDotAccSatKHR SPIR-V instruction is accelerated
-    <<devsandqueues-integer-dot-product-accelerated,as defined below>>.
-  * pname:integerDotProductAccumulatingSaturating64BitUnsignedAccelerated is
-    a boolean that will be ename:VK_TRUE if the support for 64-bit unsigned
-    accumulating saturating dot product operations using the
-    code:OpUDotAccSatKHR SPIR-V instruction is accelerated
-    <<devsandqueues-integer-dot-product-accelerated,as defined below>>.
-  * pname:integerDotProductAccumulatingSaturating64BitSignedAccelerated is a
-    boolean that will be ename:VK_TRUE if the support for 64-bit signed
-    accumulating saturating dot product operations using the
-    code:OpSDotAccSatKHR SPIR-V instruction is accelerated
-    <<devsandqueues-integer-dot-product-accelerated,as defined below>>.
-  * pname:integerDotProductAccumulatingSaturating64BitMixedSignednessAccelerated
-    is a boolean that will be ename:VK_TRUE if the support for 64-bit mixed
-    signedness accumulating saturating dot product operations using the
-    code:OpSUDotAccSatKHR SPIR-V instruction is accelerated
-    <<devsandqueues-integer-dot-product-accelerated,as defined below>>.
-
-:refpage: VkPhysicalDeviceShaderIntegerDotProductPropertiesKHR
-include::{chapters}/limits.txt[tag=limits_desc]
-
-These are properties of the integer dot product acceleration information of
-a physical device.
-
-[[devsandqueues-integer-dot-product-accelerated]]
-[NOTE]
-.Note
-====
-A dot product operation is deemed accelerated if its implementation provides
-a performance advantage over application-provided code composed from
-elementary instructions and/or other dot product instructions, either
-because the implementation uses optimized machine code sequences whose
-generation from application-provided code cannot be guaranteed or because it
-uses hardware features that cannot otherwise be targeted from
-application-provided code.
-====
-
-include::{generated}/validity/structs/VkPhysicalDeviceShaderIntegerDotProductPropertiesKHR.txt[]
---
-endif::VK_KHR_shader_integer_dot_product[]
-
-[open,refpage='vkGetPhysicalDeviceQueueFamilyProperties',desc='Reports properties of the queues of the specified physical device',type='protos']
---
-To query properties of queues available on a physical device, call:
-
-include::{generated}/api/protos/vkGetPhysicalDeviceQueueFamilyProperties.txt[]
-
-  * pname:physicalDevice is the handle to the physical device whose
-    properties will be queried.
-  * pname:pQueueFamilyPropertyCount is a pointer to an integer related to
-    the number of queue families available or queried, as described below.
-  * pname:pQueueFamilyProperties is either `NULL` or a pointer to an array
-    of slink:VkQueueFamilyProperties structures.
-
-If pname:pQueueFamilyProperties is `NULL`, then the number of queue families
-available is returned in pname:pQueueFamilyPropertyCount.
-Implementations must: support at least one queue family.
-Otherwise, pname:pQueueFamilyPropertyCount must: point to a variable set by
-the user to the number of elements in the pname:pQueueFamilyProperties
-array, and on return the variable is overwritten with the number of
-structures actually written to pname:pQueueFamilyProperties.
-If pname:pQueueFamilyPropertyCount is less than the number of queue families
-available, at most pname:pQueueFamilyPropertyCount structures will be
-written.
-
-include::{generated}/validity/protos/vkGetPhysicalDeviceQueueFamilyProperties.txt[]
---
-
-[open,refpage='VkQueueFamilyProperties',desc='Structure providing information about a queue family',type='structs']
---
-The sname:VkQueueFamilyProperties structure is defined as:
-
-include::{generated}/api/structs/VkQueueFamilyProperties.txt[]
-
-  * pname:queueFlags is a bitmask of elink:VkQueueFlagBits indicating
-    capabilities of the queues in this queue family.
-  * pname:queueCount is the unsigned integer count of queues in this queue
-    family.
-    Each queue family must: support at least one queue.
-  * pname:timestampValidBits is the unsigned integer count of meaningful
-    bits in the timestamps written via
-ifdef::VK_KHR_synchronization2[]
-    flink:vkCmdWriteTimestamp2KHR or
-endif::VK_KHR_synchronization2[]
-    flink:vkCmdWriteTimestamp.
-    The valid range for the count is 36..64 bits, or a value of 0,
-    indicating no support for timestamps.
-    Bits outside the valid range are guaranteed to be zeros.
-  * pname:minImageTransferGranularity is the minimum granularity supported
-    for image transfer operations on the queues in this queue family.
-
-The value returned in pname:minImageTransferGranularity has a unit of
-compressed texel blocks for images having a block-compressed format, and a
-unit of texels otherwise.
-
-Possible values of pname:minImageTransferGranularity are:
-
-  * [eq]#(0,0,0)# specifies that only whole mip levels must: be transferred
-    using the image transfer operations on the corresponding queues.
-    In this case, the following restrictions apply to all offset and extent
-    parameters of image transfer operations:
-  ** The pname:x, pname:y, and pname:z members of a slink:VkOffset3D
-     parameter must: always be zero.
-  ** The pname:width, pname:height, and pname:depth members of a
-     slink:VkExtent3D parameter must: always match the width, height, and
-     depth of the image subresource corresponding to the parameter,
-     respectively.
-  * [eq]#(A~x~, A~y~, A~z~)# where [eq]#A~x~#, [eq]#A~y~#, and [eq]#A~z~#
-    are all integer powers of two.
-    In this case the following restrictions apply to all image transfer
-    operations:
-  ** pname:x, pname:y, and pname:z of a slink:VkOffset3D parameter must: be
-     integer multiples of [eq]#A~x~#, [eq]#A~y~#, and [eq]#A~z~#,
-     respectively.
-  ** pname:width of a slink:VkExtent3D parameter must: be an integer
-     multiple of [eq]#A~x~#, or else [eq]#pname:x {plus} pname:width# must:
-     equal the width of the image subresource corresponding to the
-     parameter.
-  ** pname:height of a slink:VkExtent3D parameter must: be an integer
-     multiple of [eq]#A~y~#, or else [eq]#pname:y {plus} pname:height# must:
-     equal the height of the image subresource corresponding to the
-     parameter.
-  ** pname:depth of a slink:VkExtent3D parameter must: be an integer
-     multiple of [eq]#A~z~#, or else [eq]#pname:z {plus} pname:depth# must:
-     equal the depth of the image subresource corresponding to the
-     parameter.
-  ** If the format of the image corresponding to the parameters is one of
-     the block-compressed formats then for the purposes of the above
-     calculations the granularity must: be scaled up by the compressed texel
-     block dimensions.
-
-Queues supporting graphics and/or compute operations must: report
-[eq]#(1,1,1)# in pname:minImageTransferGranularity, meaning that there are
-no additional restrictions on the granularity of image transfer operations
-for these queues.
-Other queues supporting image transfer operations are only required: to
-support whole mip level transfers, thus pname:minImageTransferGranularity
-for queues belonging to such queue families may: be [eq]#(0,0,0)#.
-
-The <<memory-device,Device Memory>> section describes memory properties
-queried from the physical device.
-
-For physical device feature queries see the <<features, Features>> chapter.
-
-include::{generated}/validity/structs/VkQueueFamilyProperties.txt[]
---
-
-[open,refpage='VkQueueFlagBits',desc='Bitmask specifying capabilities of queues in a queue family',type='enums']
---
-Bits which may: be set in slink:VkQueueFamilyProperties::pname:queueFlags
-indicating capabilities of queues in a queue family are:
-
-include::{generated}/api/enums/VkQueueFlagBits.txt[]
-
-  * ename:VK_QUEUE_GRAPHICS_BIT specifies that queues in this queue family
-    support graphics operations.
-  * ename:VK_QUEUE_COMPUTE_BIT specifies that queues in this queue family
-    support compute operations.
-  * ename:VK_QUEUE_TRANSFER_BIT specifies that queues in this queue family
-    support transfer operations.
-  * ename:VK_QUEUE_SPARSE_BINDING_BIT specifies that queues in this queue
-    family support sparse memory management operations (see
-    <<sparsememory,Sparse Resources>>).
-    If any of the sparse resource features are enabled, then at least one
-    queue family must: support this bit.
-ifdef::VK_KHR_video_decode_queue[]
-  * ename:VK_QUEUE_VIDEO_DECODE_BIT_KHR specifies that queues in this queue
-    family support Video Decode operations.
-endif::VK_KHR_video_decode_queue[]
-ifdef::VK_KHR_video_encode_queue[]
-  * ename:VK_QUEUE_VIDEO_ENCODE_BIT_KHR specifies that queues in this queue
-    family support Video Encode operations.
-endif::VK_KHR_video_encode_queue[]
-ifdef::VK_VERSION_1_1[]
-  * ename:VK_QUEUE_PROTECTED_BIT specifies that queues in this queue family
-    support the ename:VK_DEVICE_QUEUE_CREATE_PROTECTED_BIT bit.
-    (see <<memory-protected-memory,Protected Memory>>).
-    If the physical device supports the pname:protectedMemory feature, at
-    least one of its queue families must: support this bit.
-endif::VK_VERSION_1_1[]
-
-If an implementation exposes any queue family that supports graphics
-operations, at least one queue family of at least one physical device
-exposed by the implementation must: support both graphics and compute
-operations.
-
-ifdef::VK_VERSION_1_1[]
-Furthermore, if the protected memory physical device feature is supported,
-then at least one queue family of at least one physical device exposed by
-the implementation must: support graphics operations, compute operations,
-and protected memory operations.
-endif::VK_VERSION_1_1[]
-
-[NOTE]
-.Note
-====
-All commands that are allowed on a queue that supports transfer operations
-are also allowed on a queue that supports either graphics or compute
-operations.
-Thus, if the capabilities of a queue family include
-ename:VK_QUEUE_GRAPHICS_BIT or ename:VK_QUEUE_COMPUTE_BIT, then reporting
-the ename:VK_QUEUE_TRANSFER_BIT capability separately for that queue family
-is optional:.
-====
-
-For further details see <<devsandqueues-queues,Queues>>.
---
-
-[open,refpage='VkQueueFlags',desc='Bitmask of VkQueueFlagBits',type='flags']
---
-include::{generated}/api/flags/VkQueueFlags.txt[]
-
-tname:VkQueueFlags is a bitmask type for setting a mask of zero or more
-elink:VkQueueFlagBits.
---
-
-ifdef::VK_VERSION_1_1,VK_KHR_get_physical_device_properties2[]
-[open,refpage='vkGetPhysicalDeviceQueueFamilyProperties2',desc='Reports properties of the queues of the specified physical device',type='protos']
---
-To query properties of queues available on a physical device, call:
-
-ifdef::VK_VERSION_1_1[]
-include::{generated}/api/protos/vkGetPhysicalDeviceQueueFamilyProperties2.txt[]
-endif::VK_VERSION_1_1[]
-
-ifdef::VK_VERSION_1_1+VK_KHR_get_physical_device_properties2[or the equivalent command]
-
-ifdef::VK_KHR_get_physical_device_properties2[]
-include::{generated}/api/protos/vkGetPhysicalDeviceQueueFamilyProperties2KHR.txt[]
-endif::VK_KHR_get_physical_device_properties2[]
-
-  * pname:physicalDevice is the handle to the physical device whose
-    properties will be queried.
-  * pname:pQueueFamilyPropertyCount is a pointer to an integer related to
-    the number of queue families available or queried, as described in
-    flink:vkGetPhysicalDeviceQueueFamilyProperties.
-  * pname:pQueueFamilyProperties is either `NULL` or a pointer to an array
-    of slink:VkQueueFamilyProperties2 structures.
-
-fname:vkGetPhysicalDeviceQueueFamilyProperties2 behaves similarly to
-flink:vkGetPhysicalDeviceQueueFamilyProperties, with the ability to return
-extended information in a pname:pNext chain of output structures.
-
-include::{generated}/validity/protos/vkGetPhysicalDeviceQueueFamilyProperties2.txt[]
---
-
-[open,refpage='VkQueueFamilyProperties2',desc='Structure providing information about a queue family',type='structs']
---
-The sname:VkQueueFamilyProperties2 structure is defined as:
-
-include::{generated}/api/structs/VkQueueFamilyProperties2.txt[]
-
-ifdef::VK_KHR_get_physical_device_properties2[]
-or the equivalent
-
-include::{generated}/api/structs/VkQueueFamilyProperties2KHR.txt[]
-endif::VK_KHR_get_physical_device_properties2[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:queueFamilyProperties is a slink:VkQueueFamilyProperties structure
-    which is populated with the same values as in
-    flink:vkGetPhysicalDeviceQueueFamilyProperties.
-
-include::{generated}/validity/structs/VkQueueFamilyProperties2.txt[]
---
-
-ifdef::VK_EXT_global_priority_query[]
-
-[open,refpage='VkQueueFamilyGlobalPriorityPropertiesEXT',desc='Return structure for queue family global priority information query',type='structs']
---
-
-The definition of slink:VkQueueFamilyGlobalPriorityPropertiesEXT is:
-
-include::{generated}/api/structs/VkQueueFamilyGlobalPriorityPropertiesEXT.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:priorityCount is the number of supported global queue priorities
-    in this queue family, and it must: be greater than 0.
-  * pname:priorities is an array of ename:VK_MAX_GLOBAL_PRIORITY_SIZE_EXT
-    elink:VkQueueGlobalPriorityEXT enums representing all supported global
-    queue priorities in this queue family.
-    The first pname:priorityCount elements of the array will be valid.
-
-The valid elements of pname:priorities must: not contain any duplicate
-values.
-
-The valid elements of pname:priorities must: be a continuous sequence of
-elink:VkQueueGlobalPriorityEXT enums in the ascending order.
-
-[NOTE]
-.Note
-====
-For example, returning pname:priorityCount as 3 with supported
-pname:priorities as ename:VK_QUEUE_GLOBAL_PRIORITY_LOW_EXT,
-ename:VK_QUEUE_GLOBAL_PRIORITY_MEDIUM_EXT and
-ename:VK_QUEUE_GLOBAL_PRIORITY_REALTIME_EXT is not allowed.
-====
-
-include::{generated}/validity/structs/VkQueueFamilyGlobalPriorityPropertiesEXT.txt[]
-
---
-
-endif::VK_EXT_global_priority_query[]
-
-ifdef::VK_NV_device_diagnostic_checkpoints[]
-include::VK_NV_device_diagnostic_checkpoints/queue_checkpoint_properties.txt[]
-endif::VK_NV_device_diagnostic_checkpoints[]
-
-endif::VK_VERSION_1_1,VK_KHR_get_physical_device_properties2[]
-
-ifdef::VK_KHR_performance_query[]
-include::VK_KHR_performance_query/queuefamily.txt[]
-endif::VK_KHR_performance_query[]
-
-
-[[devsandqueues-devices]]
-== Devices
-
-Device objects represent logical connections to physical devices.
-Each device exposes a number of _queue families_ each having one or more
-_queues_.
-All queues in a queue family support the same operations.
-
-As described in <<devsandqueues-physical-device-enumeration,Physical
-Devices>>, a Vulkan application will first query for all physical devices in
-a system.
-Each physical device can: then be queried for its capabilities, including
-its queue and queue family properties.
-Once an acceptable physical device is identified, an application will create
-a corresponding logical device.
-The created logical device is then the primary interface to the physical
-device.
-
-How to enumerate the physical devices in a system and query those physical
-devices for their queue family properties is described in the
-<<devsandqueues-physical-device-enumeration, Physical Device Enumeration>>
-section above.
-
-ifdef::VK_VERSION_1_1,VK_KHR_device_group_creation[]
-
-A single logical device can: be created from multiple physical devices, if
-those physical devices belong to the same device group.
-A _device group_ is a set of physical devices that support accessing each
-other's memory and recording a single command buffer that can: be executed
-on all the physical devices.
-Device groups are enumerated by calling
-flink:vkEnumeratePhysicalDeviceGroups, and a logical device is created from
-a subset of the physical devices in a device group by passing the physical
-devices through slink:VkDeviceGroupDeviceCreateInfo.
-For two physical devices to be in the same device group, they must: support
-identical extensions, features, and properties.
-
-[NOTE]
-.Note
-====
-Physical devices in the same device group must: be so similar because there
-are no rules for how different features/properties would interact.
-They must: return the same values for nearly every invariant
-ftext:vkGetPhysicalDevice* feature, property, capability, etc., but could
-potentially differ for certain queries based on things like having a
-different display connected, or a different compositor.
-The specification does not attempt to enumerate which state is in each
-category, because such a list would quickly become out of date.
-====
-
-[open,refpage='vkEnumeratePhysicalDeviceGroups',desc='Enumerates groups of physical devices that can be used to create a single logical device',type='protos']
---
-To retrieve a list of the device groups present in the system, call:
-
-ifdef::VK_VERSION_1_1[]
-include::{generated}/api/protos/vkEnumeratePhysicalDeviceGroups.txt[]
-endif::VK_VERSION_1_1[]
-
-ifdef::VK_VERSION_1_1+VK_KHR_device_group_creation[or the equivalent command]
-
-ifdef::VK_KHR_device_group_creation[]
-include::{generated}/api/protos/vkEnumeratePhysicalDeviceGroupsKHR.txt[]
-endif::VK_KHR_device_group_creation[]
-
-  * pname:instance is a handle to a Vulkan instance previously created with
-    flink:vkCreateInstance.
-  * pname:pPhysicalDeviceGroupCount is a pointer to an integer related to
-    the number of device groups available or queried, as described below.
-  * pname:pPhysicalDeviceGroupProperties is either `NULL` or a pointer to an
-    array of slink:VkPhysicalDeviceGroupProperties structures.
-
-If pname:pPhysicalDeviceGroupProperties is `NULL`, then the number of device
-groups available is returned in pname:pPhysicalDeviceGroupCount.
-Otherwise, pname:pPhysicalDeviceGroupCount must: point to a variable set by
-the user to the number of elements in the
-pname:pPhysicalDeviceGroupProperties array, and on return the variable is
-overwritten with the number of structures actually written to
-pname:pPhysicalDeviceGroupProperties.
-If pname:pPhysicalDeviceGroupCount is less than the number of device groups
-available, at most pname:pPhysicalDeviceGroupCount structures will be
-written, and ename:VK_INCOMPLETE will be returned instead of
-ename:VK_SUCCESS, to indicate that not all the available device groups were
-returned.
-
-Every physical device must: be in exactly one device group.
-
-include::{generated}/validity/protos/vkEnumeratePhysicalDeviceGroups.txt[]
---
-
-[open,refpage='VkPhysicalDeviceGroupProperties',desc='Structure specifying physical device group properties',type='structs']
---
-The sname:VkPhysicalDeviceGroupProperties structure is defined as:
-
-include::{generated}/api/structs/VkPhysicalDeviceGroupProperties.txt[]
-
-ifdef::VK_KHR_device_group_creation[]
-or the equivalent
-
-include::{generated}/api/structs/VkPhysicalDeviceGroupPropertiesKHR.txt[]
-endif::VK_KHR_device_group_creation[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:physicalDeviceCount is the number of physical devices in the
-    group.
-  * pname:physicalDevices is an array of ename:VK_MAX_DEVICE_GROUP_SIZE
-    slink:VkPhysicalDevice handles representing all physical devices in the
-    group.
-    The first pname:physicalDeviceCount elements of the array will be valid.
-  * pname:subsetAllocation specifies whether logical devices created from
-    the group support allocating device memory on a subset of devices, via
-    the pname:deviceMask member of the slink:VkMemoryAllocateFlagsInfo.
-    If this is ename:VK_FALSE, then all device memory allocations are made
-    across all physical devices in the group.
-    If pname:physicalDeviceCount is `1`, then pname:subsetAllocation must:
-    be ename:VK_FALSE.
-
-include::{generated}/validity/structs/VkPhysicalDeviceGroupProperties.txt[]
---
-
-[open,refpage='VK_MAX_DEVICE_GROUP_SIZE',desc='Length of a physical device handle array',type='consts']
---
-ename:VK_MAX_DEVICE_GROUP_SIZE is the length of an array containing
-slink:VkPhysicalDevice handle values representing all physical devices in a
-group, as returned in
-slink:VkPhysicalDeviceGroupProperties::physicalDevices.
-
-include::{generated}/api/enums/VK_MAX_DEVICE_GROUP_SIZE.txt[]
-
-ifdef::VK_KHR_device_group_creation[]
-or the equivalent
-
-include::{generated}/api/enums/VK_MAX_DEVICE_GROUP_SIZE_KHR.txt[]
-endif::VK_KHR_device_group_creation[]
---
-endif::VK_VERSION_1_1,VK_KHR_device_group_creation[]
-
-
-[[devsandqueues-device-creation]]
-=== Device Creation
-
-[open,refpage='VkDevice',desc='Opaque handle to a device object',type='handles']
---
-Logical devices are represented by sname:VkDevice handles:
-
-include::{generated}/api/handles/VkDevice.txt[]
---
-
-[open,refpage='vkCreateDevice',desc='Create a new device instance',type='protos']
---
-A logical device is created as a _connection_ to a physical device.
-To create a logical device, call:
-
-include::{generated}/api/protos/vkCreateDevice.txt[]
-
-  * pname:physicalDevice must: be one of the device handles returned from a
-    call to fname:vkEnumeratePhysicalDevices (see
-    <<devsandqueues-physical-device-enumeration, Physical Device
-    Enumeration>>).
-  * pname:pCreateInfo is a pointer to a slink:VkDeviceCreateInfo structure
-    containing information about how to create the device.
-  * pname:pAllocator controls host memory allocation as described in the
-    <<memory-allocation, Memory Allocation>> chapter.
-  * pname:pDevice is a pointer to a handle in which the created
-    slink:VkDevice is returned.
-
-fname:vkCreateDevice verifies that extensions and features requested in the
-pname:ppEnabledExtensionNames and pname:pEnabledFeatures members of
-pname:pCreateInfo, respectively, are supported by the implementation.
-If any requested extension is not supported, fname:vkCreateDevice must:
-return ename:VK_ERROR_EXTENSION_NOT_PRESENT.
-If any requested feature is not supported, fname:vkCreateDevice must: return
-ename:VK_ERROR_FEATURE_NOT_PRESENT.
-Support for extensions can: be checked before creating a device by querying
-flink:vkEnumerateDeviceExtensionProperties.
-Support for features can: similarly be checked by querying
-flink:vkGetPhysicalDeviceFeatures.
-
-After verifying and enabling the extensions the sname:VkDevice object is
-created and returned to the application.
-
-Multiple logical devices can: be created from the same physical device.
-Logical device creation may: fail due to lack of device-specific resources
-(in addition to other errors).
-If that occurs, fname:vkCreateDevice will return
-ename:VK_ERROR_TOO_MANY_OBJECTS.
-
-.Valid Usage
-****
-  * [[VUID-vkCreateDevice-ppEnabledExtensionNames-01387]]
-    All <<extendingvulkan-extensions-extensiondependencies, required device
-    extensions>> for each extension in the
-    slink:VkDeviceCreateInfo::pname:ppEnabledExtensionNames list must: also
-    be present in that list
-****
-
-include::{generated}/validity/protos/vkCreateDevice.txt[]
---
-
-[open,refpage='VkDeviceCreateInfo',desc='Structure specifying parameters of a newly created device',type='structs']
---
-The sname:VkDeviceCreateInfo structure is defined as:
-
-include::{generated}/api/structs/VkDeviceCreateInfo.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:flags is reserved for future use.
-  * pname:queueCreateInfoCount is the unsigned integer size of the
-    pname:pQueueCreateInfos array.
-    Refer to the <<devsandqueues-queue-creation,Queue Creation>> section
-    below for further details.
-  * pname:pQueueCreateInfos is a pointer to an array of
-    slink:VkDeviceQueueCreateInfo structures describing the queues that are
-    requested to be created along with the logical device.
-    Refer to the <<devsandqueues-queue-creation,Queue Creation>> section
-    below for further details.
-  * pname:enabledLayerCount is deprecated and ignored.
-  * pname:ppEnabledLayerNames is deprecated and ignored.
-    See <<extendingvulkan-layers-devicelayerdeprecation>>.
-  * pname:enabledExtensionCount is the number of device extensions to
-    enable.
-  * pname:ppEnabledExtensionNames is a pointer to an array of
-    pname:enabledExtensionCount null-terminated UTF-8 strings containing the
-    names of extensions to enable for the created device.
-    See the <<extendingvulkan-extensions>> section for further details.
-  * pname:pEnabledFeatures is `NULL` or a pointer to a
-    slink:VkPhysicalDeviceFeatures structure containing boolean indicators
-    of all the features to be enabled.
-    Refer to the <<features,Features>> section for further details.
-
-.Valid Usage
-****
-ifndef::VK_VERSION_1_1[]
-  * [[VUID-VkDeviceCreateInfo-queueFamilyIndex-00372]]
-    The pname:queueFamilyIndex member of each element of
-    pname:pQueueCreateInfos must: be unique within pname:pQueueCreateInfos
-endif::VK_VERSION_1_1[]
-ifdef::VK_VERSION_1_1[]
-  * [[VUID-VkDeviceCreateInfo-queueFamilyIndex-02802]]
-    The pname:queueFamilyIndex member of each element of
-    pname:pQueueCreateInfos must: be unique within pname:pQueueCreateInfos,
-    except that two members can share the same pname:queueFamilyIndex if one
-    is a protected-capable queue and one is not a protected-capable queue
-endif::VK_VERSION_1_1[]
-ifdef::VK_VERSION_1_1,VK_KHR_get_physical_device_properties2[]
-  * [[VUID-VkDeviceCreateInfo-pNext-00373]]
-    If the pname:pNext chain includes a slink:VkPhysicalDeviceFeatures2
-    structure, then pname:pEnabledFeatures must: be `NULL`
-endif::VK_VERSION_1_1,VK_KHR_get_physical_device_properties2[]
-ifdef::VK_AMD_negative_viewport_height[]
-ifdef::VK_VERSION_1_1[]
-  * [[VUID-VkDeviceCreateInfo-ppEnabledExtensionNames-01840]]
-    pname:ppEnabledExtensionNames must: not contain
-    `apiext:VK_AMD_negative_viewport_height`
-endif::VK_VERSION_1_1[]
-ifndef::VK_VERSION_1_1[]
-ifdef::VK_KHR_maintenance1[]
-  * [[VUID-VkDeviceCreateInfo-ppEnabledExtensionNames-00374]]
-    pname:ppEnabledExtensionNames must: not contain both
-    `apiext:VK_KHR_maintenance1` and
-    `apiext:VK_AMD_negative_viewport_height`
-endif::VK_KHR_maintenance1[]
-endif::VK_VERSION_1_1[]
-endif::VK_AMD_negative_viewport_height[]
-ifdef::VK_EXT_buffer_device_address+VK_KHR_buffer_device_address[]
-  * [[VUID-VkDeviceCreateInfo-ppEnabledExtensionNames-03328]]
-    pname:ppEnabledExtensionNames must: not contain both
-    `apiext:VK_KHR_buffer_device_address` and
-    `apiext:VK_EXT_buffer_device_address`
-endif::VK_EXT_buffer_device_address+VK_KHR_buffer_device_address[]
-ifdef::VK_VERSION_1_2[]
-ifdef::VK_EXT_buffer_device_address[]
-  * [[VUID-VkDeviceCreateInfo-pNext-04748]]
-    if the pname:pNext chain includes a
-    slink:VkPhysicalDeviceVulkan12Features structure and
-    slink:VkPhysicalDeviceVulkan12Features::pname:bufferDeviceAddress is
-    ename:VK_TRUE, pname:ppEnabledExtensionNames must: not contain
-    `apiext:VK_EXT_buffer_device_address`
-endif::VK_EXT_buffer_device_address[]
-  * [[VUID-VkDeviceCreateInfo-pNext-02829]]
-    If the pname:pNext chain includes a
-    slink:VkPhysicalDeviceVulkan11Features structure, then it must: not
-    include a slink:VkPhysicalDevice16BitStorageFeatures,
-    slink:VkPhysicalDeviceMultiviewFeatures,
-    slink:VkPhysicalDeviceVariablePointersFeatures,
-    slink:VkPhysicalDeviceProtectedMemoryFeatures,
-    slink:VkPhysicalDeviceSamplerYcbcrConversionFeatures, or
-    slink:VkPhysicalDeviceShaderDrawParametersFeatures structure
-  * [[VUID-VkDeviceCreateInfo-pNext-02830]]
-    If the pname:pNext chain includes a
-    slink:VkPhysicalDeviceVulkan12Features structure, then it must: not
-    include a slink:VkPhysicalDevice8BitStorageFeatures,
-    slink:VkPhysicalDeviceShaderAtomicInt64Features,
-    slink:VkPhysicalDeviceShaderFloat16Int8Features,
-    slink:VkPhysicalDeviceDescriptorIndexingFeatures,
-    slink:VkPhysicalDeviceScalarBlockLayoutFeatures,
-    slink:VkPhysicalDeviceImagelessFramebufferFeatures,
-    slink:VkPhysicalDeviceUniformBufferStandardLayoutFeatures,
-    slink:VkPhysicalDeviceShaderSubgroupExtendedTypesFeatures,
-    slink:VkPhysicalDeviceSeparateDepthStencilLayoutsFeatures,
-    slink:VkPhysicalDeviceHostQueryResetFeatures,
-    slink:VkPhysicalDeviceTimelineSemaphoreFeatures,
-    slink:VkPhysicalDeviceBufferDeviceAddressFeatures, or
-    slink:VkPhysicalDeviceVulkanMemoryModelFeatures structure
-ifdef::VK_KHR_shader_draw_parameters[]
-  * [[VUID-VkDeviceCreateInfo-ppEnabledExtensions-04476]]
-    If pname:ppEnabledExtensions contains `"VK_KHR_shader_draw_parameters"`
-    and the pname:pNext chain includes a
-    slink:VkPhysicalDeviceVulkan11Features structure, then
-    sname:VkPhysicalDeviceVulkan11Features::pname:shaderDrawParameters must:
-    be ename:VK_TRUE
-endif::VK_KHR_shader_draw_parameters[]
-ifdef::VK_KHR_draw_indirect_count[]
-  * [[VUID-VkDeviceCreateInfo-ppEnabledExtensions-02831]]
-    If pname:ppEnabledExtensions contains `"VK_KHR_draw_indirect_count"` and
-    the pname:pNext chain includes a slink:VkPhysicalDeviceVulkan12Features
-    structure, then
-    sname:VkPhysicalDeviceVulkan12Features::pname:drawIndirectCount must: be
-    ename:VK_TRUE
-endif::VK_KHR_draw_indirect_count[]
-ifdef::VK_KHR_sampler_mirror_clamp_to_edge[]
-  * [[VUID-VkDeviceCreateInfo-ppEnabledExtensions-02832]]
-    If pname:ppEnabledExtensions contains
-    `"VK_KHR_sampler_mirror_clamp_to_edge"` and the pname:pNext chain
-    includes a slink:VkPhysicalDeviceVulkan12Features structure, then
-    sname:VkPhysicalDeviceVulkan12Features::pname:samplerMirrorClampToEdge
-    must: be ename:VK_TRUE
-endif::VK_KHR_sampler_mirror_clamp_to_edge[]
-ifdef::VK_EXT_descriptor_indexing[]
-  * [[VUID-VkDeviceCreateInfo-ppEnabledExtensions-02833]]
-    If pname:ppEnabledExtensions contains `"VK_EXT_descriptor_indexing"` and
-    the pname:pNext chain includes a slink:VkPhysicalDeviceVulkan12Features
-    structure, then
-    sname:VkPhysicalDeviceVulkan12Features::pname:descriptorIndexing must:
-    be ename:VK_TRUE
-endif::VK_EXT_descriptor_indexing[]
-ifdef::VK_EXT_sampler_filter_minmax[]
-  * [[VUID-VkDeviceCreateInfo-ppEnabledExtensions-02834]]
-    If pname:ppEnabledExtensions contains `"VK_EXT_sampler_filter_minmax"`
-    and the pname:pNext chain includes a
-    slink:VkPhysicalDeviceVulkan12Features structure, then
-    sname:VkPhysicalDeviceVulkan12Features::pname:samplerFilterMinmax must:
-    be ename:VK_TRUE
-endif::VK_EXT_sampler_filter_minmax[]
-ifdef::VK_EXT_shader_viewport_index_layer[]
-  * [[VUID-VkDeviceCreateInfo-ppEnabledExtensions-02835]]
-    If pname:ppEnabledExtensions contains
-    `"VK_EXT_shader_viewport_index_layer"` and the pname:pNext chain
-    includes a slink:VkPhysicalDeviceVulkan12Features structure, then
-    sname:VkPhysicalDeviceVulkan12Features::pname:shaderOutputViewportIndex
-    and sname:VkPhysicalDeviceVulkan12Features::pname:shaderOutputLayer
-    must: both be ename:VK_TRUE
-endif::VK_EXT_shader_viewport_index_layer[]
-endif::VK_VERSION_1_2[]
-ifdef::VK_KHR_portability_subset[]
-  * [[VUID-VkDeviceCreateInfo-pProperties-04451]]
-    If the `apiext:VK_KHR_portability_subset` extension is included in
-    pname:pProperties of flink:vkEnumerateDeviceExtensionProperties,
-    pname:ppEnabledExtensions must: include "VK_KHR_portability_subset"
-endif::VK_KHR_portability_subset[]
-ifdef::VK_KHR_fragment_shading_rate,VK_NV_shading_rate_image[]
-  * [[VUID-VkDeviceCreateInfo-shadingRateImage-04478]]
-    If <<features-shadingRateImage,pname:shadingRateImage>> is enabled,
-    <<features-pipelineFragmentShadingRate,
-    pname:pipelineFragmentShadingRate>> must: not be enabled
-  * [[VUID-VkDeviceCreateInfo-shadingRateImage-04479]]
-    If <<features-shadingRateImage,pname:shadingRateImage>> is enabled,
-    <<features-primitiveFragmentShadingRate,
-    pname:primitiveFragmentShadingRate>> must: not be enabled
-  * [[VUID-VkDeviceCreateInfo-shadingRateImage-04480]]
-    If <<features-shadingRateImage,pname:shadingRateImage>> is enabled,
-    <<features-attachmentFragmentShadingRate,
-    pname:attachmentFragmentShadingRate>> must: not be enabled
-endif::VK_KHR_fragment_shading_rate,VK_NV_shading_rate_image[]
-ifdef::VK_KHR_fragment_shading_rate,VK_EXT_fragment_density_map[]
-  * [[VUID-VkDeviceCreateInfo-fragmentDensityMap-04481]]
-    If <<features-fragmentDensityMap,pname:fragmentDensityMap>> is enabled,
-    <<features-pipelineFragmentShadingRate,
-    pname:pipelineFragmentShadingRate>> must: not be enabled
-  * [[VUID-VkDeviceCreateInfo-fragmentDensityMap-04482]]
-    If <<features-fragmentDensityMap,pname:fragmentDensityMap>> is enabled,
-    <<features-primitiveFragmentShadingRate,
-    pname:primitiveFragmentShadingRate>> must: not be enabled
-  * [[VUID-VkDeviceCreateInfo-fragmentDensityMap-04483]]
-    If <<features-fragmentDensityMap,pname:fragmentDensityMap>> is enabled,
-    <<features-attachmentFragmentShadingRate,
-    pname:attachmentFragmentShadingRate>> must: not be enabled
-endif::VK_KHR_fragment_shading_rate,VK_EXT_fragment_density_map[]
-ifdef::VK_EXT_shader_image_atomic_int64[]
-  * [[VUID-VkDeviceCreateInfo-None-04896]]
-    If <<features-sparseImageInt64Atomics, pname:sparseImageInt64Atomics>>
-    is enabled, <<features-shaderImageInt64Atomics,
-    pname:shaderImageInt64Atomics>> must: be enabled
-endif::VK_EXT_shader_image_atomic_int64[]
-ifdef::VK_EXT_shader_atomic_float[]
-  * [[VUID-VkDeviceCreateInfo-None-04897]]
-    If <<features-sparseImageFloat32Atomics,
-    pname:sparseImageFloat32Atomics>> is enabled,
-    <<features-shaderImageFloat32Atomics, pname:shaderImageFloat32Atomics>>
-    must: be enabled
-  * [[VUID-VkDeviceCreateInfo-None-04898]]
-    If <<features-sparseImageFloat32AtomicAdd,
-    pname:sparseImageFloat32AtomicAdd>> is enabled,
-    <<features-shaderImageFloat32AtomicAdd,
-    pname:shaderImageFloat32AtomicAdd>> must: be enabled
-endif::VK_EXT_shader_atomic_float[]
-ifdef::VK_EXT_shader_atomic_float2[]
-  * [[VUID-VkDeviceCreateInfo-sparseImageFloat32AtomicMinMax-04975]]
-    If <<features-sparseImageFloat32AtomicMinMax,
-    pname:sparseImageFloat32AtomicMinMax>> is enabled,
-    <<features-shaderImageFloat32AtomicMinMax,
-    pname:shaderImageFloat32AtomicMinMax>> must: be enabled
-endif::VK_EXT_shader_atomic_float2[]
-****
-
-include::{generated}/validity/structs/VkDeviceCreateInfo.txt[]
---
-
-[open,refpage='VkDeviceCreateFlags',desc='Reserved for future use',type='flags']
---
-include::{generated}/api/flags/VkDeviceCreateFlags.txt[]
-
-tname:VkDeviceCreateFlags is a bitmask type for setting a mask, but is
-currently reserved for future use.
---
-
-ifdef::VK_VERSION_1_1,VK_KHR_device_group_creation[]
-[open,refpage='VkDeviceGroupDeviceCreateInfo',desc='Create a logical device from multiple physical devices',type='structs']
---
-A logical device can: be created that connects to one or more physical
-devices by adding a sname:VkDeviceGroupDeviceCreateInfo structure to the
-pname:pNext chain of slink:VkDeviceCreateInfo.
-The sname:VkDeviceGroupDeviceCreateInfo structure is defined as:
-
-include::{generated}/api/structs/VkDeviceGroupDeviceCreateInfo.txt[]
-
-ifdef::VK_KHR_device_group_creation[]
-or the equivalent
-
-include::{generated}/api/structs/VkDeviceGroupDeviceCreateInfoKHR.txt[]
-endif::VK_KHR_device_group_creation[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:physicalDeviceCount is the number of elements in the
-    pname:pPhysicalDevices array.
-  * pname:pPhysicalDevices is a pointer to an array of physical device
-    handles belonging to the same device group.
-
-The elements of the pname:pPhysicalDevices array are an ordered list of the
-physical devices that the logical device represents.
-These must: be a subset of a single device group, and need not be in the
-same order as they were enumerated.
-The order of the physical devices in the pname:pPhysicalDevices array
-determines the _device index_ of each physical device, with element [eq]#i#
-being assigned a device index of [eq]#i#.
-Certain commands and structures refer to one or more physical devices by
-using device indices or _device masks_ formed using device indices.
-
-A logical device created without using sname:VkDeviceGroupDeviceCreateInfo,
-or with pname:physicalDeviceCount equal to zero, is equivalent to a
-pname:physicalDeviceCount of one and pname:pPhysicalDevices pointing to the
-pname:physicalDevice parameter to flink:vkCreateDevice.
-In particular, the device index of that physical device is zero.
-
-.Valid Usage
-****
-  * [[VUID-VkDeviceGroupDeviceCreateInfo-pPhysicalDevices-00375]]
-    Each element of pname:pPhysicalDevices must: be unique
-  * [[VUID-VkDeviceGroupDeviceCreateInfo-pPhysicalDevices-00376]]
-    All elements of pname:pPhysicalDevices must: be in the same device group
-    as enumerated by flink:vkEnumeratePhysicalDeviceGroups
-  * [[VUID-VkDeviceGroupDeviceCreateInfo-physicalDeviceCount-00377]]
-    If pname:physicalDeviceCount is not `0`, the pname:physicalDevice
-    parameter of flink:vkCreateDevice must: be an element of
-    pname:pPhysicalDevices
-****
-
-include::{generated}/validity/structs/VkDeviceGroupDeviceCreateInfo.txt[]
---
-endif::VK_VERSION_1_1,VK_KHR_device_group_creation[]
-
-ifdef::VK_AMD_memory_overallocation_behavior[]
-[open,refpage='VkDeviceMemoryOverallocationCreateInfoAMD',desc='Specify memory overallocation behavior for a Vulkan device',type='structs']
---
-To specify whether device memory allocation is allowed beyond the size
-reported by slink:VkPhysicalDeviceMemoryProperties, add a
-slink:VkDeviceMemoryOverallocationCreateInfoAMD structure to the pname:pNext
-chain of the slink:VkDeviceCreateInfo structure.
-If this structure is not specified, it is as if the
-ename:VK_MEMORY_OVERALLOCATION_BEHAVIOR_DEFAULT_AMD value is used.
-
-include::{generated}/api/structs/VkDeviceMemoryOverallocationCreateInfoAMD.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:overallocationBehavior is the desired overallocation behavior.
-
-include::{generated}/validity/structs/VkDeviceMemoryOverallocationCreateInfoAMD.txt[]
---
-
-[open,refpage='VkMemoryOverallocationBehaviorAMD',desc='Specify memory overallocation behavior',type='enums']
---
-Possible values for
-slink:VkDeviceMemoryOverallocationCreateInfoAMD::pname:overallocationBehavior
-include:
-
-include::{generated}/api/enums/VkMemoryOverallocationBehaviorAMD.txt[]
-
-  * ename:VK_MEMORY_OVERALLOCATION_BEHAVIOR_DEFAULT_AMD lets the
-    implementation decide if overallocation is allowed.
-  * ename:VK_MEMORY_OVERALLOCATION_BEHAVIOR_ALLOWED_AMD specifies
-    overallocation is allowed if platform permits.
-  * ename:VK_MEMORY_OVERALLOCATION_BEHAVIOR_DISALLOWED_AMD specifies the
-    application is not allowed to allocate device memory beyond the heap
-    sizes reported by slink:VkPhysicalDeviceMemoryProperties.
-    Allocations that are not explicitly made by the application within the
-    scope of the Vulkan instance are not accounted for.
---
-endif::VK_AMD_memory_overallocation_behavior[]
-
-ifdef::VK_NV_device_diagnostics_config[]
-[open,refpage='VkDeviceDiagnosticsConfigCreateInfoNV',desc='Specify diagnostics config for a Vulkan device',type='structs']
---
-When using the Nsight^(TM)^ Aftermath SDK, to configure how device crash
-dumps are created, add a slink:VkDeviceDiagnosticsConfigCreateInfoNV
-structure to the pname:pNext chain of the slink:VkDeviceCreateInfo
-structure.
-
-include::{generated}/api/structs/VkDeviceDiagnosticsConfigCreateInfoNV.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:flags is a bitmask of elink:VkDeviceDiagnosticsConfigFlagBitsNV
-    specifying addtional parameters for configuring diagnostic tools.
-
-include::{generated}/validity/structs/VkDeviceDiagnosticsConfigCreateInfoNV.txt[]
---
-
-[open,refpage='VkDeviceDiagnosticsConfigFlagBitsNV',desc='Bitmask specifying diagnostics flags',type='enums']
---
-Bits which can: be set in
-slink:VkDeviceDiagnosticsConfigCreateInfoNV::pname:flags include:
-
-include::{generated}/api/enums/VkDeviceDiagnosticsConfigFlagBitsNV.txt[]
-
-  * ename:VK_DEVICE_DIAGNOSTICS_CONFIG_ENABLE_SHADER_DEBUG_INFO_BIT_NV
-    enables the generation of debug information for shaders.
-  * ename:VK_DEVICE_DIAGNOSTICS_CONFIG_ENABLE_RESOURCE_TRACKING_BIT_NV
-    enables driver side tracking of resources (images, buffers, etc.) used
-    to augment the device fault information.
-  * ename:VK_DEVICE_DIAGNOSTICS_CONFIG_ENABLE_AUTOMATIC_CHECKPOINTS_BIT_NV
-    enables automatic insertion of <<device-diagnostic-checkpoints,
-    diagnostic checkpoints>> for draw calls, dispatches,
-ifdef::VK_NV_ray_tracing[]
-    trace rays,
-endif::VK_NV_ray_tracing[]
-    and copies.
-    The CPU call stack at the time of the command will be associated as the
-    marker data for the automatically inserted checkpoints.
---
-
-[open,refpage='VkDeviceDiagnosticsConfigFlagsNV',desc='Bitmask of VkDeviceDiagnosticsConfigFlagBitsNV',type='flags']
---
-include::{generated}/api/flags/VkDeviceDiagnosticsConfigFlagsNV.txt[]
-
-tname:VkDeviceDiagnosticsConfigFlagsNV is a bitmask type for setting a mask
-of zero or more elink:VkDeviceDiagnosticsConfigFlagBitsNV.
---
-endif::VK_NV_device_diagnostics_config[]
-
-ifdef::VK_EXT_device_memory_report[]
-[open,refpage='VkDeviceDeviceMemoryReportCreateInfoEXT',desc='Register device memory report callbacks for a Vulkan device',type='structs']
---
-To register callbacks for underlying device memory events of type
-elink:VkDeviceMemoryReportEventTypeEXT, add one or multiple
-slink:VkDeviceDeviceMemoryReportCreateInfoEXT structures to the pname:pNext
-chain of the slink:VkDeviceCreateInfo structure.
-
-include::{generated}/api/structs/VkDeviceDeviceMemoryReportCreateInfoEXT.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:flags is 0 and reserved for future use.
-  * pname:pfnUserCallback is the application callback function to call.
-  * pname:pUserData is user data to be passed to the callback.
-
-The callback may: be called from multiple threads simultaneously.
-
-The callback must: be called only once by the implementation when a
-elink:VkDeviceMemoryReportEventTypeEXT event occurs.
-
-[NOTE]
-.Note
-====
-The callback could be called from a background thread other than the thread
-calling the Vulkan commands.
-====
-
-include::{generated}/validity/structs/VkDeviceDeviceMemoryReportCreateInfoEXT.txt[]
---
-
-[open,refpage='PFN_vkDeviceMemoryReportCallbackEXT',desc='Application-defined device memory report callback function',type='funcpointers']
---
-The prototype for the
-slink:VkDeviceDeviceMemoryReportCreateInfoEXT::pname:pfnUserCallback
-function implemented by the application is:
-
-include::{generated}/api/funcpointers/PFN_vkDeviceMemoryReportCallbackEXT.txt[]
-
-  * pname:pCallbackData contains all the callback related data in the
-    slink:VkDeviceMemoryReportCallbackDataEXT structure.
-  * pname:pUserData is the user data provided when the
-    slink:VkDeviceDeviceMemoryReportCreateInfoEXT was created.
-
-The callback must: not make calls to any Vulkan commands.
---
-
-[open,refpage='VkDeviceMemoryReportCallbackDataEXT',desc='Structure specifying parameters returned to the callback',type='structs']
---
-The definition of sname:VkDeviceMemoryReportCallbackDataEXT is:
-
-include::{generated}/api/structs/VkDeviceMemoryReportCallbackDataEXT.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:flags is 0 and reserved for future use.
-  * pname:type is a elink:VkDeviceMemoryReportEventTypeEXT type specifying
-    the type of event reported in this
-    sname:VkDeviceMemoryReportCallbackDataEXT structure.
-  * pname:memoryObjectId is the unique id for the underlying memory object
-    as described below.
-  * pname:size is the size of the memory object in bytes.
-    If pname:type is ename:VK_DEVICE_MEMORY_REPORT_EVENT_TYPE_ALLOCATE_EXT,
-    ename:VK_DEVICE_MEMORY_REPORT_EVENT_TYPE_IMPORT_EXT or
-    ename:VK_DEVICE_MEMORY_REPORT_EVENT_TYPE_ALLOCATION_FAILED_EXT,
-    pname:size is a valid basetype:VkDeviceSize value.
-    Otherwise, pname:size is undefined:.
-  * pname:objectType is a elink:VkObjectType value specifying the type of
-    the object associated with this device memory report event.
-    If pname:type is ename:VK_DEVICE_MEMORY_REPORT_EVENT_TYPE_ALLOCATE_EXT,
-    ename:VK_DEVICE_MEMORY_REPORT_EVENT_TYPE_FREE_EXT,
-    ename:VK_DEVICE_MEMORY_REPORT_EVENT_TYPE_IMPORT_EXT,
-    ename:VK_DEVICE_MEMORY_REPORT_EVENT_TYPE_UNIMPORT_EXT or
-    ename:VK_DEVICE_MEMORY_REPORT_EVENT_TYPE_ALLOCATION_FAILED_EXT,
-    pname:objectType is a valid elink:VkObjectType enum.
-    Otherwise, pname:objectType is undefined:.
-  * pname:objectHandle is the object this device memory report event is
-    attributed to.
-    If pname:type is ename:VK_DEVICE_MEMORY_REPORT_EVENT_TYPE_ALLOCATE_EXT,
-    ename:VK_DEVICE_MEMORY_REPORT_EVENT_TYPE_FREE_EXT,
-    ename:VK_DEVICE_MEMORY_REPORT_EVENT_TYPE_IMPORT_EXT or
-    ename:VK_DEVICE_MEMORY_REPORT_EVENT_TYPE_UNIMPORT_EXT,
-    pname:objectHandle is a valid Vulkan handle of the type associated with
-    pname:objectType as defined in the <<debugging-object-types,
-    `VkObjectType` and Vulkan Handle Relationship>> table.
-    Otherwise, pname:objectHandle is undefined:.
-  * pname:heapIndex describes which memory heap this device memory
-    allocation is made from.
-    If pname:type is ename:VK_DEVICE_MEMORY_REPORT_EVENT_TYPE_ALLOCATE_EXT
-    or ename:VK_DEVICE_MEMORY_REPORT_EVENT_TYPE_ALLOCATION_FAILED_EXT,
-    pname:heapIndex corresponds to one of the valid heaps from the
-    slink:VkPhysicalDeviceMemoryProperties structure.
-    Otherwise, pname:heapIndex is undefined:.
-
-pname:memoryObjectId is used to avoid double-counting on the same memory
-object.
-
-If an internally-allocated device memory object or a slink:VkDeviceMemory
-cannot: be exported, pname:memoryObjectId must: be unique in the
-slink:VkDevice.
-
-If an internally-allocated device memory object or a slink:VkDeviceMemory
-supports being exported, pname:memoryObjectId must: be unique system wide.
-
-If an internal device memory object or a slink:VkDeviceMemory is backed by
-an imported external memory object, pname:memoryObjectId must: be unique
-system wide.
-
-ifdef::implementation-guide[]
-.Implementor's Note
-****
-If the heap backing an internally-allocated device memory cannot: be used to
-back slink:VkDeviceMemory, implementations can: advertise that heap with no
-types.
-****
-endif::implementation-guide[]
-
-[NOTE]
-.Note
-====
-This structure should only be considered valid during the lifetime of the
-triggered callback.
-
-For ename:VK_DEVICE_MEMORY_REPORT_EVENT_TYPE_ALLOCATE_EXT and
-ename:VK_DEVICE_MEMORY_REPORT_EVENT_TYPE_IMPORT_EXT events,
-pname:objectHandle usually will not yet exist when the application or tool
-receives the callback.
-pname:objectHandle will only exist when the create or allocate call that
-triggered the event returns, and if the allocation or import ends up failing
-pname:objectHandle will not ever exist.
-====
-
-include::{generated}/validity/structs/VkDeviceMemoryReportCallbackDataEXT.txt[]
---
-
-[open,refpage='VkDeviceMemoryReportFlagsEXT',desc='Reserved for future use',type='flags']
---
-include::{generated}/api/flags/VkDeviceMemoryReportFlagsEXT.txt[]
-
-tname:VkDeviceMemoryReportFlagsEXT is a bitmask type for setting a mask, but
-is currently reserved for future use.
---
-
-[open,refpage='VkDeviceMemoryReportEventTypeEXT',desc='Events that can occur on a device memory object',type='enums']
---
-Possible values of slink:VkDeviceMemoryReportCallbackDataEXT::pname:type,
-specifying event types which cause the device driver to call the callback,
-are:
-
-include::{generated}/api/enums/VkDeviceMemoryReportEventTypeEXT.txt[]
-
-  * ename:VK_DEVICE_MEMORY_REPORT_EVENT_TYPE_ALLOCATE_EXT specifies this
-    event corresponds to the allocation of an internal device memory object
-    or a slink:VkDeviceMemory.
-  * ename:VK_DEVICE_MEMORY_REPORT_EVENT_TYPE_FREE_EXT specifies this event
-    corresponds to the deallocation of an internally-allocated device memory
-    object or a slink:VkDeviceMemory.
-  * ename:VK_DEVICE_MEMORY_REPORT_EVENT_TYPE_IMPORT_EXT specifies this event
-    corresponds to the import of an external memory object.
-  * ename:VK_DEVICE_MEMORY_REPORT_EVENT_TYPE_UNIMPORT_EXT specifies this
-    event is the release of an imported external memory object.
-  * ename:VK_DEVICE_MEMORY_REPORT_EVENT_TYPE_ALLOCATION_FAILED_EXT specifies
-    this event corresponds to the failed allocation of an internal device
-    memory object or a slink:VkDeviceMemory.
---
-endif::VK_EXT_device_memory_report[]
-
-ifdef::VK_EXT_private_data[]
-[open,refpage='VkDevicePrivateDataCreateInfoEXT',desc='Reserve private data slots',type='structs']
---
-To reserve private data storage slots, add a
-slink:VkDevicePrivateDataCreateInfoEXT structure to the pname:pNext chain of
-the slink:VkDeviceCreateInfo structure.
-Reserving slots in this manner is not strictly necessary, but doing so may:
-improve performance.
-
-include::{generated}/api/structs/VkDevicePrivateDataCreateInfoEXT.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:privateDataSlotRequestCount is the amount of slots to reserve.
-
-include::{generated}/validity/structs/VkDevicePrivateDataCreateInfoEXT.txt[]
---
-endif::VK_EXT_private_data[]
-
-
-[[devsandqueues-use]]
-=== Device Use
-
-The following is a high-level list of sname:VkDevice uses along with
-references on where to find more information:
-
-  * Creation of queues.
-    See the <<devsandqueues-queues,Queues>> section below for further
-    details.
-  * Creation and tracking of various synchronization constructs.
-    See <<synchronization,Synchronization and Cache Control>> for further
-    details.
-  * Allocating, freeing, and managing memory.
-    See <<memory,Memory Allocation>> and <<resources,Resource Creation>> for
-    further details.
-  * Creation and destruction of command buffers and command buffer pools.
-    See <<commandbuffers,Command Buffers>> for further details.
-  * Creation, destruction, and management of graphics state.
-    See <<pipelines,Pipelines>> and <<descriptorsets,Resource Descriptors>>,
-    among others, for further details.
-
-
-[[devsandqueues-lost-device]]
-=== Lost Device
-
-A logical device may: become _lost_ for a number of implementation-specific
-reasons, indicating that pending and future command execution may: fail and
-cause resources and backing memory to become undefined:.
-
-[NOTE]
-.Note
-====
-Typical reasons for device loss will include things like execution timing
-out (to prevent denial of service), power management events, platform
-resource management, implementation errors.
-
-Applications not adhering to <<fundamentals-validusage, valid usage>> may
-also result in device loss being reported, however this is not guaranteed.
-Even if device loss is reported, the system may be in an unrecoverable
-state, and further usage of the API is still considered invalid.
-====
-
-When this happens, certain commands will return ename:VK_ERROR_DEVICE_LOST.
-After any such event, the logical device is considered _lost_.
-It is not possible to reset the logical device to a non-lost state, however
-the lost state is specific to a logical device (sname:VkDevice), and the
-corresponding physical device (sname:VkPhysicalDevice) may: be otherwise
-unaffected.
-
-In some cases, the physical device may: also be lost, and attempting to
-create a new logical device will fail, returning ename:VK_ERROR_DEVICE_LOST.
-This is usually indicative of a problem with the underlying implementation,
-or its connection to the host.
-If the physical device has not been lost, and a new logical device is
-successfully created from that physical device, it must: be in the non-lost
-state.
-
-[NOTE]
-.Note
-====
-Whilst logical device loss may: be recoverable, in the case of physical
-device loss, it is unlikely that an application will be able to recover
-unless additional, unaffected physical devices exist on the system.
-The error is largely informational and intended only to inform the user that
-a platform issue has occurred, and should: be investigated further.
-For example, underlying hardware may: have developed a fault or become
-physically disconnected from the rest of the system.
-In many cases, physical device loss may: cause other more serious issues
-such as the operating system crashing; in which case it may: not be reported
-via the Vulkan API.
-====
-
-When a device is lost, its child objects are not implicitly destroyed and
-their handles are still valid.
-Those objects must: still be destroyed before their parents or the device
-can: be destroyed (see the <<fundamentals-objectmodel-lifetime,Object
-Lifetime>> section).
-The host address space corresponding to device memory mapped using
-flink:vkMapMemory is still valid, and host memory accesses to these mapped
-regions are still valid, but the contents are undefined:.
-It is still legal to call any API command on the device and child objects.
-
-Once a device is lost, command execution may: fail, and commands that return
-a elink:VkResult may: return ename:VK_ERROR_DEVICE_LOST.
-Commands that do not allow runtime errors must: still operate correctly for
-valid usage and, if applicable, return valid data.
-
-Commands that wait indefinitely for device execution (namely
-flink:vkDeviceWaitIdle, flink:vkQueueWaitIdle, flink:vkWaitForFences
-ifdef::VK_KHR_swapchain[]
-or flink:vkAcquireNextImageKHR
-endif::VK_KHR_swapchain[]
-with a maximum pname:timeout, and flink:vkGetQueryPoolResults with the
-ename:VK_QUERY_RESULT_WAIT_BIT bit set in pname:flags) must: return in
-finite time even in the case of a lost device, and return either
-ename:VK_SUCCESS or ename:VK_ERROR_DEVICE_LOST.
-For any command that may: return ename:VK_ERROR_DEVICE_LOST, for the purpose
-of determining whether a command buffer is in the
-<<commandbuffers-lifecycle, pending state>>, or whether resources are
-considered in-use by the device, a return value of
-ename:VK_ERROR_DEVICE_LOST is equivalent to ename:VK_SUCCESS.
-
-ifdef::VK_VERSION_1_1,VK_KHR_external_memory[]
-
-The content of any external memory objects that have been exported from or
-imported to a lost device become undefined:.
-Objects on other logical devices or in other APIs which are associated with
-the same underlying memory resource as the external memory objects on the
-lost device are unaffected other than their content becoming undefined:.
-The layout of subresources of images on other logical devices that are bound
-to sname:VkDeviceMemory objects associated with the same underlying memory
-resources as external memory objects on the lost device becomes
-ename:VK_IMAGE_LAYOUT_UNDEFINED.
-
-endif::VK_VERSION_1_1,VK_KHR_external_memory[]
-
-ifdef::VK_VERSION_1_1,VK_KHR_external_semaphore[]
-
-The state of sname:VkSemaphore objects on other logical devices created by
-<<synchronization-semaphores-importing,importing a semaphore payload>> with
-temporary permanence which was exported from the lost device is undefined:.
-The state of sname:VkSemaphore objects on other logical devices that
-permanently share a semaphore payload with a sname:VkSemaphore object on the
-lost device is undefined:, and remains undefined: following any subsequent
-signal operations.
-Implementations must: ensure pending and subsequently submitted wait
-operations on such semaphores behave as defined in
-<<synchronization-semaphores-waiting-state,Semaphore State Requirements For
-Wait Operations>> for external semaphores not in a valid state for a wait
-operation.
-
-endif::VK_VERSION_1_1,VK_KHR_external_semaphore[]
-
-ifdef::editing-notes[]
-[NOTE]
-.editing-note
-====
-TODO (piman) - I do not think we are very clear about what "`in-use by the
-device`" means.
-====
-endif::editing-notes[]
-
-
-[[devsandqueues-destruction]]
-=== Device Destruction
-
-[open,refpage='vkDestroyDevice',desc='Destroy a logical device',type='protos']
---
-To destroy a device, call:
-
-include::{generated}/api/protos/vkDestroyDevice.txt[]
-
-  * pname:device is the logical device to destroy.
-  * pname:pAllocator controls host memory allocation as described in the
-    <<memory-allocation, Memory Allocation>> chapter.
-
-To ensure that no work is active on the device, flink:vkDeviceWaitIdle can:
-be used to gate the destruction of the device.
-Prior to destroying a device, an application is responsible for
-destroying/freeing any Vulkan objects that were created using that device as
-the first parameter of the corresponding ftext:vkCreate* or
-ftext:vkAllocate* command.
-
-[NOTE]
-.Note
-====
-The lifetime of each of these objects is bound by the lifetime of the
-sname:VkDevice object.
-Therefore, to avoid resource leaks, it is critical that an application
-explicitly free all of these resources prior to calling
-fname:vkDestroyDevice.
-====
-
-.Valid Usage
-****
-  * [[VUID-vkDestroyDevice-device-00378]]
-    All child objects created on pname:device must: have been destroyed
-    prior to destroying pname:device
-  * [[VUID-vkDestroyDevice-device-00379]]
-    If sname:VkAllocationCallbacks were provided when pname:device was
-    created, a compatible set of callbacks must: be provided here
-  * [[VUID-vkDestroyDevice-device-00380]]
-    If no sname:VkAllocationCallbacks were provided when pname:device was
-    created, pname:pAllocator must: be `NULL`
-****
-
-include::{generated}/validity/protos/vkDestroyDevice.txt[]
---
-
-
-[[devsandqueues-queues]]
-== Queues
-
-
-[[devsandqueues-queueprops]]
-=== Queue Family Properties
-
-As discussed in the <<devsandqueues-physical-device-enumeration,Physical
-Device Enumeration>> section above, the
-flink:vkGetPhysicalDeviceQueueFamilyProperties command is used to retrieve
-details about the queue families and queues supported by a device.
-
-Each index in the pname:pQueueFamilyProperties array returned by
-flink:vkGetPhysicalDeviceQueueFamilyProperties describes a unique queue
-family on that physical device.
-These indices are used when creating queues, and they correspond directly
-with the pname:queueFamilyIndex that is passed to the flink:vkCreateDevice
-command via the slink:VkDeviceQueueCreateInfo structure as described in the
-<<devsandqueues-queue-creation,Queue Creation>> section below.
-
-Grouping of queue families within a physical device is
-implementation-dependent.
-
-[NOTE]
-.Note
-====
-The general expectation is that a physical device groups all queues of
-matching capabilities into a single family.
-However, while implementations should: do this, it is possible that a
-physical device may: return two separate queue families with the same
-capabilities.
-====
-
-Once an application has identified a physical device with the queue(s) that
-it desires to use, it will create those queues in conjunction with a logical
-device.
-This is described in the following section.
-
-
-[[devsandqueues-queue-creation]]
-=== Queue Creation
-
-[open,refpage='VkQueue',desc='Opaque handle to a queue object',type='handles']
---
-Creating a logical device also creates the queues associated with that
-device.
-The queues to create are described by a set of slink:VkDeviceQueueCreateInfo
-structures that are passed to flink:vkCreateDevice in
-pname:pQueueCreateInfos.
-
-Queues are represented by sname:VkQueue handles:
-
-include::{generated}/api/handles/VkQueue.txt[]
---
-
-[open,refpage='VkDeviceQueueCreateInfo',desc='Structure specifying parameters of a newly created device queue',type='structs']
---
-The sname:VkDeviceQueueCreateInfo structure is defined as:
-
-include::{generated}/api/structs/VkDeviceQueueCreateInfo.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-ifndef::VK_VERSION_1_1[]
-  * pname:flags is reserved for future use.
-endif::VK_VERSION_1_1[]
-ifdef::VK_VERSION_1_1[]
-  * pname:flags is a bitmask indicating behavior of the queue.
-endif::VK_VERSION_1_1[]
-  * pname:queueFamilyIndex is an unsigned integer indicating the index of
-    the queue family in which to create the queue on this device.
-    This index corresponds to the index of an element of the
-    pname:pQueueFamilyProperties array that was returned by
-    fname:vkGetPhysicalDeviceQueueFamilyProperties.
-  * pname:queueCount is an unsigned integer specifying the number of queues
-    to create in the queue family indicated by pname:queueFamilyIndex.
-  * pname:pQueuePriorities is a pointer to an array of pname:queueCount
-    normalized floating point values, specifying priorities of work that
-    will be submitted to each created queue.
-    See <<devsandqueues-priority,Queue Priority>> for more information.
-
-.Valid Usage
-****
-  * [[VUID-VkDeviceQueueCreateInfo-queueFamilyIndex-00381]]
-    pname:queueFamilyIndex must: be less than
-    pname:pQueueFamilyPropertyCount returned by
-    fname:vkGetPhysicalDeviceQueueFamilyProperties
-  * [[VUID-VkDeviceQueueCreateInfo-queueCount-00382]]
-    pname:queueCount must: be less than or equal to the pname:queueCount
-    member of the sname:VkQueueFamilyProperties structure, as returned by
-    fname:vkGetPhysicalDeviceQueueFamilyProperties in the
-    pname:pQueueFamilyProperties[queueFamilyIndex]
-  * [[VUID-VkDeviceQueueCreateInfo-pQueuePriorities-00383]]
-    Each element of pname:pQueuePriorities must: be between `0.0` and `1.0`
-    inclusive
-ifdef::VK_VERSION_1_1[]
-  * [[VUID-VkDeviceQueueCreateInfo-flags-02861]]
-    If the <<features-protectedMemory, protected memory>> feature is not
-    enabled, the ename:VK_DEVICE_QUEUE_CREATE_PROTECTED_BIT bit of
-    pname:flags must: not be set
-  * [[VUID-VkDeviceQueueCreateInfo-flags-06449]]
-    If pname:flags includes ename:VK_DEVICE_QUEUE_CREATE_PROTECTED_BIT,
-    pname:queueFamilyIndex must: be the index of a queue family that
-    includes the ename:VK_QUEUE_PROTECTED_BIT capability
-endif::VK_VERSION_1_1[]
-****
-
-include::{generated}/validity/structs/VkDeviceQueueCreateInfo.txt[]
---
-
-ifdef::VK_VERSION_1_1[]
-[open,refpage='VkDeviceQueueCreateFlagBits',desc='Bitmask specifying behavior of the queue',type='enums']
---
-Bits which can: be set in slink:VkDeviceQueueCreateInfo::pname:flags to
-specify usage behavior of the queue are:
-
-include::{generated}/api/enums/VkDeviceQueueCreateFlagBits.txt[]
-
-  * ename:VK_DEVICE_QUEUE_CREATE_PROTECTED_BIT specifies that the device
-    queue is a protected-capable queue.
---
-endif::VK_VERSION_1_1[]
-
-[open,refpage='VkDeviceQueueCreateFlags',desc='Bitmask of VkDeviceQueueCreateFlagBits',type='flags']
---
-include::{generated}/api/flags/VkDeviceQueueCreateFlags.txt[]
-
-ifndef::VK_VERSION_1_1[]
-tname:VkDeviceQueueCreateFlags is a bitmask type for setting a mask, but is
-currently reserved for future use.
-endif::VK_VERSION_1_1[]
-ifdef::VK_VERSION_1_1[]
-tname:VkDeviceQueueCreateFlags is a bitmask type for setting a mask of zero
-or more elink:VkDeviceQueueCreateFlagBits.
-endif::VK_VERSION_1_1[]
---
-
-ifdef::VK_EXT_global_priority[]
-[open,refpage='VkDeviceQueueGlobalPriorityCreateInfoEXT',desc='Specify a system wide priority',type='structs']
---
-A queue can: be created with a system-wide priority by adding a
-sname:VkDeviceQueueGlobalPriorityCreateInfoEXT structure to the pname:pNext
-chain of slink:VkDeviceQueueCreateInfo.
-
-The sname:VkDeviceQueueGlobalPriorityCreateInfoEXT structure is defined as:
-
-include::{generated}/api/structs/VkDeviceQueueGlobalPriorityCreateInfoEXT.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:globalPriority is the system-wide priority associated to this
-    queue as specified by elink:VkQueueGlobalPriorityEXT
-
-A queue created without specifying
-sname:VkDeviceQueueGlobalPriorityCreateInfoEXT will default to
-ename:VK_QUEUE_GLOBAL_PRIORITY_MEDIUM_EXT.
-
-include::{generated}/validity/structs/VkDeviceQueueGlobalPriorityCreateInfoEXT.txt[]
---
-
-[open,refpage='VkQueueGlobalPriorityEXT',desc='Values specifying a system-wide queue priority',type='enums']
---
-Possible values of
-slink:VkDeviceQueueGlobalPriorityCreateInfoEXT::pname:globalPriority,
-specifying a system-wide priority level are:
-
-include::{generated}/api/enums/VkQueueGlobalPriorityEXT.txt[]
-
-Priority values are sorted in ascending order.
-A comparison operation on the enum values can be used to determine the
-priority order.
-
-  * ename:VK_QUEUE_GLOBAL_PRIORITY_LOW_EXT is below the system default.
-    Useful for non-interactive tasks.
-  * ename:VK_QUEUE_GLOBAL_PRIORITY_MEDIUM_EXT is the system default
-    priority.
-  * ename:VK_QUEUE_GLOBAL_PRIORITY_HIGH_EXT is above the system default.
-  * ename:VK_QUEUE_GLOBAL_PRIORITY_REALTIME_EXT is the highest priority.
-    Useful for critical tasks.
---
-
-Queues with higher system priority may: be allotted more processing time
-than queues with lower priority.
-An implementation may: allow a higher-priority queue to starve a
-lower-priority queue until the higher-priority queue has no further commands
-to execute.
-
-Priorities imply no ordering or scheduling constraints.
-
-No specific guarantees are made about higher priority queues receiving more
-processing time or better quality of service than lower priority queues.
-
-The global priority level of a queue takes precedence over the per-process
-queue priority (slink:VkDeviceQueueCreateInfo::pname:pQueuePriorities).
-
-Abuse of this feature may: result in starving the rest of the system of
-implementation resources.
-Therefore, the driver implementation may: deny requests to acquire a
-priority above the default priority
-(ename:VK_QUEUE_GLOBAL_PRIORITY_MEDIUM_EXT) if the caller does not have
-sufficient privileges.
-In this scenario ename:VK_ERROR_NOT_PERMITTED_EXT is returned.
-
-The driver implementation may: fail the queue allocation request if
-resources required to complete the operation have been exhausted (either by
-the same process or a different process).
-In this scenario ename:VK_ERROR_INITIALIZATION_FAILED is returned.
-
-ifdef::VK_EXT_global_priority_query[]
-If the <<features-globalPriorityQuery, pname:globalPriorityQuery>> feature
-is enabled and the requested global priority is not reported via
-slink:VkQueueFamilyGlobalPriorityPropertiesEXT, the driver implementation
-must: fail the queue creation.
-In this scenario, ename:VK_ERROR_INITIALIZATION_FAILED is returned.
-endif::VK_EXT_global_priority_query[]
-endif::VK_EXT_global_priority[]
-
-[open,refpage='vkGetDeviceQueue',desc='Get a queue handle from a device',type='protos']
---
-To retrieve a handle to a slink:VkQueue object, call:
-
-include::{generated}/api/protos/vkGetDeviceQueue.txt[]
-
-  * pname:device is the logical device that owns the queue.
-  * pname:queueFamilyIndex is the index of the queue family to which the
-    queue belongs.
-  * pname:queueIndex is the index within this queue family of the queue to
-    retrieve.
-  * pname:pQueue is a pointer to a slink:VkQueue object that will be filled
-    with the handle for the requested queue.
-
-ifdef::VK_VERSION_1_1[]
-fname:vkGetDeviceQueue must: only be used to get queues that were created
-with the pname:flags parameter of slink:VkDeviceQueueCreateInfo set to zero.
-To get queues that were created with a non-zero pname:flags parameter use
-flink:vkGetDeviceQueue2.
-endif::VK_VERSION_1_1[]
-
-.Valid Usage
-****
-  * [[VUID-vkGetDeviceQueue-queueFamilyIndex-00384]]
-    pname:queueFamilyIndex must: be one of the queue family indices
-    specified when pname:device was created, via the
-    slink:VkDeviceQueueCreateInfo structure
-  * [[VUID-vkGetDeviceQueue-queueIndex-00385]]
-    pname:queueIndex must: be less than the value of
-    slink:VkDeviceQueueCreateInfo::pname:queueCount for the queue family
-    indicated by pname:queueFamilyIndex when pname:device was created
-  * [[VUID-vkGetDeviceQueue-flags-01841]]
-    slink:VkDeviceQueueCreateInfo::pname:flags must: have been set to zero
-    when pname:device was created
-****
-
-include::{generated}/validity/protos/vkGetDeviceQueue.txt[]
---
-
-ifdef::VK_VERSION_1_1[]
-[open,refpage='vkGetDeviceQueue2',desc='Get a queue handle from a device',type='protos']
---
-To retrieve a handle to a slink:VkQueue object with specific
-tlink:VkDeviceQueueCreateFlags creation flags, call:
-
-include::{generated}/api/protos/vkGetDeviceQueue2.txt[]
-
-  * pname:device is the logical device that owns the queue.
-  * pname:pQueueInfo is a pointer to a slink:VkDeviceQueueInfo2 structure,
-    describing parameters of the device queue to be retrieved.
-  * pname:pQueue is a pointer to a slink:VkQueue object that will be filled
-    with the handle for the requested queue.
-
-include::{generated}/validity/protos/vkGetDeviceQueue2.txt[]
---
-
-[open,refpage='VkDeviceQueueInfo2',desc='Structure specifying the parameters used for device queue creation',type='structs']
---
-The sname:VkDeviceQueueInfo2 structure is defined as:
-
-include::{generated}/api/structs/VkDeviceQueueInfo2.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-    The pname:pNext chain of sname:VkDeviceQueueInfo2 can: be used to
-    provide additional device queue parameters to fname:vkGetDeviceQueue2.
-  * pname:flags is a tlink:VkDeviceQueueCreateFlags value indicating the
-    flags used to create the device queue.
-  * pname:queueFamilyIndex is the index of the queue family to which the
-    queue belongs.
-  * pname:queueIndex is the index within this queue family of the queue to
-    retrieve.
-
-The queue returned by fname:vkGetDeviceQueue2 must: have the same
-pname:flags value from this structure as that used at device creation time
-in a slink:VkDeviceQueueCreateInfo structure.
-If no matching pname:flags were specified at device creation time, then the
-handle returned in pname:pQueue must: be `NULL`.
-
-.Valid Usage
-****
-  * [[VUID-VkDeviceQueueInfo2-queueFamilyIndex-01842]]
-    pname:queueFamilyIndex must: be one of the queue family indices
-    specified when pname:device was created, via the
-    slink:VkDeviceQueueCreateInfo structure
-  * [[VUID-VkDeviceQueueInfo2-flags-06225]]
-    pname:flags must: be equal to slink:VkDeviceQueueCreateInfo::pname:flags
-    for a slink:VkDeviceQueueCreateInfo structure for the queue family
-    indicated by pname:queueFamilyIndex when pname:device was created
-  * [[VUID-VkDeviceQueueInfo2-queueIndex-01843]]
-    pname:queueIndex must: be less than
-    slink:VkDeviceQueueCreateInfo::pname:queueCount for the corresponding
-    queue family and flags indicated by pname:queueFamilyIndex and
-    pname:flags when pname:device was created
-****
-
-include::{generated}/validity/structs/VkDeviceQueueInfo2.txt[]
---
-endif::VK_VERSION_1_1[]
-
-
-[[devsandqueues-index]]
-=== Queue Family Index
-
-The queue family index is used in multiple places in Vulkan in order to tie
-operations to a specific family of queues.
-
-When retrieving a handle to the queue via fname:vkGetDeviceQueue, the queue
-family index is used to select which queue family to retrieve the
-sname:VkQueue handle from as described in the previous section.
-
-When creating a sname:VkCommandPool object (see
-<<commandbuffers-pools,Command Pools>>), a queue family index is specified
-in the slink:VkCommandPoolCreateInfo structure.
-Command buffers from this pool can: only be submitted on queues
-corresponding to this queue family.
-
-When creating sname:VkImage (see <<resources-images,Images>>) and
-sname:VkBuffer (see <<resources-buffers,Buffers>>) resources, a set of queue
-families is included in the slink:VkImageCreateInfo and
-slink:VkBufferCreateInfo structures to specify the queue families that can:
-access the resource.
-
-When inserting a slink:VkBufferMemoryBarrier or slink:VkImageMemoryBarrier
-(see <<synchronization-pipeline-barriers>>), a source and destination queue
-family index is specified to allow the ownership of a buffer or image to be
-transferred from one queue family to another.
-See the <<resources-sharing,Resource Sharing>> section for details.
-
-
-[[devsandqueues-priority]]
-=== Queue Priority
-
-Each queue is assigned a priority, as set in the
-slink:VkDeviceQueueCreateInfo structures when creating the device.
-The priority of each queue is a normalized floating point value between 0.0
-and 1.0, which is then translated to a discrete priority level by the
-implementation.
-Higher values indicate a higher priority, with 0.0 being the lowest priority
-and 1.0 being the highest.
-
-Within the same device, queues with higher priority may: be allotted more
-processing time than queues with lower priority.
-The implementation makes no guarantees with regards to ordering or
-scheduling among queues with the same priority, other than the constraints
-defined by any <<synchronization, explicit synchronization primitives>>.
-The implementation makes no guarantees with regards to queues across
-different devices.
-
-An implementation may: allow a higher-priority queue to starve a
-lower-priority queue on the same sname:VkDevice until the higher-priority
-queue has no further commands to execute.
-The relationship of queue priorities must: not cause queues on one
-sname:VkDevice to starve queues on another sname:VkDevice.
-
-No specific guarantees are made about higher priority queues receiving more
-processing time or better quality of service than lower priority queues.
-
-
-[[devsandqueues-submission]]
-=== Queue Submission
-
-Work is submitted to a queue via _queue submission_ commands such as
-ifdef::VK_KHR_synchronization2[]
-flink:vkQueueSubmit2KHR or
-endif::VK_KHR_synchronization2[]
-flink:vkQueueSubmit.
-Queue submission commands define a set of _queue operations_ to be executed
-by the underlying physical device, including synchronization with semaphores
-and fences.
-
-Submission commands take as parameters a target queue, zero or more
-_batches_ of work, and an optional: fence to signal upon completion.
-Each batch consists of three distinct parts:
-
-  . Zero or more semaphores to wait on before execution of the rest of the
-    batch.
-  ** If present, these describe a <<synchronization-semaphores-waiting,
-     semaphore wait operation>>.
-  . Zero or more work items to execute.
-  ** If present, these describe a _queue operation_ matching the work
-     described.
-  . Zero or more semaphores to signal upon completion of the work items.
-  ** If present, these describe a <<synchronization-semaphores-signaling,
-     semaphore signal operation>>.
-
-If a fence is present in a queue submission, it describes a
-<<synchronization-fences-signaling, fence signal operation>>.
-
-All work described by a queue submission command must: be submitted to the
-queue before the command returns.
-
-
-[[devsandqueues-sparsebinding]]
-==== Sparse Memory Binding
-
-In Vulkan it is possible to sparsely bind memory to buffers and images as
-described in the <<sparsememory,Sparse Resource>> chapter.
-Sparse memory binding is a queue operation.
-A queue whose flags include the ename:VK_QUEUE_SPARSE_BINDING_BIT must: be
-able to support the mapping of a virtual address to a physical address on
-the device.
-This causes an update to the page table mappings on the device.
-This update must: be synchronized on a queue to avoid corrupting page table
-mappings during execution of graphics commands.
-By binding the sparse memory resources on queues, all commands that are
-dependent on the updated bindings are synchronized to only execute after the
-binding is updated.
-See the <<synchronization,Synchronization and Cache Control>> chapter for
-how this synchronization is accomplished.
-
-
-[[devsandqueues-queuedestruction]]
-=== Queue Destruction
-
-Queues are created along with a logical device during fname:vkCreateDevice.
-All queues associated with a logical device are destroyed when
-fname:vkDestroyDevice is called on that device.
diff --git a/registry/vulkan/chapters/dispatch.txt b/registry/vulkan/chapters/dispatch.txt
deleted file mode 100644
index a5b247b..0000000
--- a/registry/vulkan/chapters/dispatch.txt
+++ /dev/null
@@ -1,229 +0,0 @@
-// Copyright 2015-2021 The Khronos Group, Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-[[dispatch]]
-= Dispatching Commands
-
-_Dispatching commands_ (commands with ftext:Dispatch in the name) provoke
-work in a compute pipeline.
-Dispatching commands are recorded into a command buffer and when executed by
-a queue, will produce work which executes according to the bound compute
-pipeline.
-A compute pipeline must: be bound to a command buffer before any dispatching
-commands are recorded in that command buffer.
-
-[open,refpage='vkCmdDispatch',desc='Dispatch compute work items',type='protos']
---
-:refpage: vkCmdDispatch
-
-To record a dispatch, call:
-
-include::{generated}/api/protos/vkCmdDispatch.txt[]
-
-  * pname:commandBuffer is the command buffer into which the command will be
-    recorded.
-  * pname:groupCountX is the number of local workgroups to dispatch in the X
-    dimension.
-  * pname:groupCountY is the number of local workgroups to dispatch in the Y
-    dimension.
-  * pname:groupCountZ is the number of local workgroups to dispatch in the Z
-    dimension.
-
-When the command is executed, a global workgroup consisting of
-[eq]#pname:groupCountX {times} pname:groupCountY {times} pname:groupCountZ#
-local workgroups is assembled.
-
-.Valid Usage
-****
-include::{chapters}/commonvalidity/draw_dispatch_common.txt[]
-include::{chapters}/commonvalidity/draw_dispatch_nonindirect_common.txt[]
-  * [[VUID-vkCmdDispatch-groupCountX-00386]]
-    pname:groupCountX must: be less than or equal to
-    sname:VkPhysicalDeviceLimits::pname:maxComputeWorkGroupCount[0]
-  * [[VUID-vkCmdDispatch-groupCountY-00387]]
-    pname:groupCountY must: be less than or equal to
-    sname:VkPhysicalDeviceLimits::pname:maxComputeWorkGroupCount[1]
-  * [[VUID-vkCmdDispatch-groupCountZ-00388]]
-    pname:groupCountZ must: be less than or equal to
-    sname:VkPhysicalDeviceLimits::pname:maxComputeWorkGroupCount[2]
-****
-
-include::{generated}/validity/protos/vkCmdDispatch.txt[]
---
-
-[open,refpage='vkCmdDispatchIndirect',desc='Dispatch compute work items with indirect parameters',type='protos']
---
-:refpage: vkCmdDispatchIndirect
-
-To record an indirect dispatching command, call:
-
-include::{generated}/api/protos/vkCmdDispatchIndirect.txt[]
-
-  * pname:commandBuffer is the command buffer into which the command will be
-    recorded.
-  * pname:buffer is the buffer containing dispatch parameters.
-  * pname:offset is the byte offset into pname:buffer where parameters
-    begin.
-
-fname:vkCmdDispatchIndirect behaves similarly to flink:vkCmdDispatch except
-that the parameters are read by the device from a buffer during execution.
-The parameters of the dispatch are encoded in a
-slink:VkDispatchIndirectCommand structure taken from pname:buffer starting
-at pname:offset.
-
-.Valid Usage
-****
-include::{chapters}/commonvalidity/draw_dispatch_common.txt[]
-include::{chapters}/commonvalidity/draw_dispatch_indirect_common.txt[]
-  * [[VUID-vkCmdDispatchIndirect-offset-00407]]
-    The sum of pname:offset and the size of sname:VkDispatchIndirectCommand
-    must: be less than or equal to the size of pname:buffer
-****
-
-include::{generated}/validity/protos/vkCmdDispatchIndirect.txt[]
---
-
-[open,refpage='VkDispatchIndirectCommand',desc='Structure specifying a indirect dispatching command',type='structs',xrefs='vkCmdDispatchIndirect']
---
-The sname:VkDispatchIndirectCommand structure is defined as:
-
-include::{generated}/api/structs/VkDispatchIndirectCommand.txt[]
-
-  * pname:x is the number of local workgroups to dispatch in the X
-    dimension.
-  * pname:y is the number of local workgroups to dispatch in the Y
-    dimension.
-  * pname:z is the number of local workgroups to dispatch in the Z
-    dimension.
-
-The members of sname:VkDispatchIndirectCommand have the same meaning as the
-corresponding parameters of flink:vkCmdDispatch.
-
-.Valid Usage
-****
-  * [[VUID-VkDispatchIndirectCommand-x-00417]]
-    pname:x must: be less than or equal to
-    sname:VkPhysicalDeviceLimits::pname:maxComputeWorkGroupCount[0]
-  * [[VUID-VkDispatchIndirectCommand-y-00418]]
-    pname:y must: be less than or equal to
-    sname:VkPhysicalDeviceLimits::pname:maxComputeWorkGroupCount[1]
-  * [[VUID-VkDispatchIndirectCommand-z-00419]]
-    pname:z must: be less than or equal to
-    sname:VkPhysicalDeviceLimits::pname:maxComputeWorkGroupCount[2]
-****
-
-include::{generated}/validity/structs/VkDispatchIndirectCommand.txt[]
---
-
-ifdef::VK_VERSION_1_1,VK_KHR_device_group[]
-[open,refpage='vkCmdDispatchBase',desc='Dispatch compute work items with non-zero base values for the workgroup IDs',type='protos']
---
-:refpage: vkCmdDispatchBase
-
-To record a dispatch using non-zero base values for the components of
-code:WorkgroupId, call:
-
-ifdef::VK_VERSION_1_1[]
-include::{generated}/api/protos/vkCmdDispatchBase.txt[]
-endif::VK_VERSION_1_1[]
-
-ifdef::VK_VERSION_1_1+VK_KHR_device_group[or the equivalent command]
-
-ifdef::VK_KHR_device_group[]
-include::{generated}/api/protos/vkCmdDispatchBaseKHR.txt[]
-endif::VK_KHR_device_group[]
-
-  * pname:commandBuffer is the command buffer into which the command will be
-    recorded.
-  * pname:baseGroupX is the start value for the X component of
-    code:WorkgroupId.
-  * pname:baseGroupY is the start value for the Y component of
-    code:WorkgroupId.
-  * pname:baseGroupZ is the start value for the Z component of
-    code:WorkgroupId.
-  * pname:groupCountX is the number of local workgroups to dispatch in the X
-    dimension.
-  * pname:groupCountY is the number of local workgroups to dispatch in the Y
-    dimension.
-  * pname:groupCountZ is the number of local workgroups to dispatch in the Z
-    dimension.
-
-When the command is executed, a global workgroup consisting of
-[eq]#pname:groupCountX {times} pname:groupCountY {times} pname:groupCountZ#
-local workgroups is assembled, with code:WorkgroupId values ranging from
-[eq]#[ptext:baseGroup*, ptext:baseGroup* {plus} ptext:groupCount*)# in each
-component.
-flink:vkCmdDispatch is equivalent to
-`vkCmdDispatchBase(0,0,0,groupCountX,groupCountY,groupCountZ)`.
-
-.Valid Usage
-****
-include::{chapters}/commonvalidity/draw_dispatch_common.txt[]
-include::{chapters}/commonvalidity/draw_dispatch_nonindirect_common.txt[]
-  * [[VUID-vkCmdDispatchBase-baseGroupX-00421]]
-    pname:baseGroupX must: be less than
-    sname:VkPhysicalDeviceLimits::pname:maxComputeWorkGroupCount[0]
-  * [[VUID-vkCmdDispatchBase-baseGroupX-00422]]
-    pname:baseGroupY must: be less than
-    sname:VkPhysicalDeviceLimits::pname:maxComputeWorkGroupCount[1]
-  * [[VUID-vkCmdDispatchBase-baseGroupZ-00423]]
-    pname:baseGroupZ must: be less than
-    sname:VkPhysicalDeviceLimits::pname:maxComputeWorkGroupCount[2]
-  * [[VUID-vkCmdDispatchBase-groupCountX-00424]]
-    pname:groupCountX must: be less than or equal to
-    sname:VkPhysicalDeviceLimits::pname:maxComputeWorkGroupCount[0] minus
-    pname:baseGroupX
-  * [[VUID-vkCmdDispatchBase-groupCountY-00425]]
-    pname:groupCountY must: be less than or equal to
-    sname:VkPhysicalDeviceLimits::pname:maxComputeWorkGroupCount[1] minus
-    pname:baseGroupY
-  * [[VUID-vkCmdDispatchBase-groupCountZ-00426]]
-    pname:groupCountZ must: be less than or equal to
-    sname:VkPhysicalDeviceLimits::pname:maxComputeWorkGroupCount[2] minus
-    pname:baseGroupZ
-  * [[VUID-vkCmdDispatchBase-baseGroupX-00427]]
-    If any of pname:baseGroupX, pname:baseGroupY, or pname:baseGroupZ are
-    not zero, then the bound compute pipeline must: have been created with
-    the ename:VK_PIPELINE_CREATE_DISPATCH_BASE flag
-****
-
-include::{generated}/validity/protos/vkCmdDispatchBase.txt[]
---
-endif::VK_VERSION_1_1,VK_KHR_device_group[]
-
-ifdef::VK_HUAWEI_subpass_shading[]
-[open,refpage='vkCmdSubpassShadingHUAWEI',desc='Dispatch compute work items',type='protos']
---
-:refpage: vkCmdSubpassShadingHUAWEI
-
-A subpass shading dispatches a compute pipeline work with the work dimension
-of render area of the calling subpass and work groups are partitioned by
-specified work group size.
-Subpass operations like subpassLoad and subpassLoadMS are allowed to be
-used.
-
-To record a subpass shading, call:
-
-include::{generated}/api/protos/vkCmdSubpassShadingHUAWEI.txt[]
-
-  * pname:commandBuffer is the command buffer into which the command will be
-    recorded.
-
-When the command is executed, a global workgroup consisting of ceil (render
-area size / local workgroup size) local workgroups is assembled.
-
-.Valid Usage
-****
-include::{chapters}/commonvalidity/draw_dispatch_common.txt[]
-  * [[VUID-vkCmdSubpassShadingHUAWEI-None-04931]]
-    This command must be called in a subpass with bind point
-    ename:VK_PIPELINE_BIND_POINT_SUBPASS_SHADING_HUAWEI.
-    No draw commands can be called in the same subpass.
-    Only one flink:vkCmdSubpassShadingHUAWEI command can be called in a
-    subpass
-****
-
-include::{generated}/validity/protos/vkCmdSubpassShadingHUAWEI.txt[]
---
-endif::VK_HUAWEI_subpass_shading[]
diff --git a/registry/vulkan/chapters/drawing.txt b/registry/vulkan/chapters/drawing.txt
deleted file mode 100644
index 1a348a5..0000000
--- a/registry/vulkan/chapters/drawing.txt
+++ /dev/null
@@ -1,1705 +0,0 @@
-// Copyright 2015-2021 The Khronos Group, Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-[[drawing]]
-= Drawing Commands
-
-_Drawing commands_ (commands with ftext:Draw in the name) provoke work in a
-graphics pipeline.
-Drawing commands are recorded into a command buffer and when executed by a
-queue, will produce work which executes according to the bound graphics
-pipeline.
-A graphics pipeline must: be bound to a command buffer before any drawing
-commands are recorded in that command buffer.
-
-[open,refpage='VkPipelineInputAssemblyStateCreateInfo',desc='Structure specifying parameters of a newly created pipeline input assembly state',type='structs']
---
-ifdef::VK_NV_mesh_shader[]
-Drawing can be achieved in two modes:
-
-  * <<drawing-mesh-shading,Programmable Mesh Shading>>, the mesh shader
-    assembles primitives, or
-  * <<drawing-primitive-shading,Programmable Primitive Shading>>, the input
-    primitives are assembled
-
-as follows.
-endif::VK_NV_mesh_shader[]
-
-Each draw is made up of zero or more vertices and zero or more instances,
-which are processed by the device and result in the assembly of primitives.
-Primitives are assembled according to the pname:pInputAssemblyState member
-of the slink:VkGraphicsPipelineCreateInfo structure, which is of type
-sname:VkPipelineInputAssemblyStateCreateInfo:
-
-include::{generated}/api/structs/VkPipelineInputAssemblyStateCreateInfo.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:flags is reserved for future use.
-  * pname:topology is a elink:VkPrimitiveTopology defining the primitive
-    topology, as described below.
-  * pname:primitiveRestartEnable controls whether a special vertex index
-    value is treated as restarting the assembly of primitives.
-    This enable only applies to indexed draws (flink:vkCmdDrawIndexed,
-ifdef::VK_EXT_multi_draw[]
-    flink:vkCmdDrawMultiIndexedEXT,
-endif::VK_EXT_multi_draw[]
-    and flink:vkCmdDrawIndexedIndirect), and the special index value is
-    either 0xFFFFFFFF when the pname:indexType parameter of
-    fname:vkCmdBindIndexBuffer is equal to ename:VK_INDEX_TYPE_UINT32,
-ifdef::VK_EXT_index_type_uint8[]
-    0xFF when pname:indexType is equal to ename:VK_INDEX_TYPE_UINT8_EXT,
-endif::VK_EXT_index_type_uint8[]
-    or 0xFFFF when pname:indexType is equal to ename:VK_INDEX_TYPE_UINT16.
-ifndef::VK_EXT_primitive_topology_list_restart[]
-    Primitive restart is not allowed for "`list`" topologies.
-endif::VK_EXT_primitive_topology_list_restart[]
-ifdef::VK_EXT_primitive_topology_list_restart[]
-    Primitive restart is not allowed for "`list`" topologies, unless one of
-    the features
-    <<features-primitiveTopologyPatchListRestart,pname:primitiveTopologyPatchListRestart>>
-    (for ename:VK_PRIMITIVE_TOPOLOGY_PATCH_LIST) or
-    <<features-primitiveTopologyListRestart,pname:primitiveTopologyListRestart>>
-    (for all other list topologies) is enabled.
-endif::VK_EXT_primitive_topology_list_restart[]
-
-Restarting the assembly of primitives discards the most recent index values
-if those elements formed an incomplete primitive, and restarts the primitive
-assembly using the subsequent indices, but only assembling the immediately
-following element through the end of the originally specified elements.
-The primitive restart index value comparison is performed before adding the
-pname:vertexOffset value to the index value.
-
-.Valid Usage
-****
-ifndef::VK_EXT_primitive_topology_list_restart[]
-  * [[VUID-VkPipelineInputAssemblyStateCreateInfo-topology-00428]]
-    If pname:topology is ename:VK_PRIMITIVE_TOPOLOGY_POINT_LIST,
-    ename:VK_PRIMITIVE_TOPOLOGY_LINE_LIST,
-    ename:VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST,
-    ename:VK_PRIMITIVE_TOPOLOGY_LINE_LIST_WITH_ADJACENCY,
-    ename:VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST_WITH_ADJACENCY or
-    ename:VK_PRIMITIVE_TOPOLOGY_PATCH_LIST, pname:primitiveRestartEnable
-    must: be ename:VK_FALSE
-endif::VK_EXT_primitive_topology_list_restart[]
-ifdef::VK_EXT_primitive_topology_list_restart[]
-  * [[VUID-VkPipelineInputAssemblyStateCreateInfo-topology-06252]]
-    If pname:topology is ename:VK_PRIMITIVE_TOPOLOGY_POINT_LIST,
-    ename:VK_PRIMITIVE_TOPOLOGY_LINE_LIST,
-    ename:VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST,
-    ename:VK_PRIMITIVE_TOPOLOGY_LINE_LIST_WITH_ADJACENCY or
-    ename:VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST_WITH_ADJACENCY, and
-    pname:primitiveRestartEnable is ename:VK_TRUE, the
-    <<features-primitiveTopologyListRestart,pname:primitiveTopologyListRestart>>
-    feature must: be enabled
-  * [[VUID-VkPipelineInputAssemblyStateCreateInfo-topology-06253]]
-    If pname:topology is ename:VK_PRIMITIVE_TOPOLOGY_PATCH_LIST, and
-    pname:primitiveRestartEnable is ename:VK_TRUE, the
-    <<features-primitiveTopologyPatchListRestart,pname:primitiveTopologyPatchListRestart>>
-    feature must: be enabled
-endif::VK_EXT_primitive_topology_list_restart[]
-  * [[VUID-VkPipelineInputAssemblyStateCreateInfo-topology-00429]]
-    If the <<features-geometryShader,geometry shaders>> feature is not
-    enabled, pname:topology must: not be any of
-    ename:VK_PRIMITIVE_TOPOLOGY_LINE_LIST_WITH_ADJACENCY,
-    ename:VK_PRIMITIVE_TOPOLOGY_LINE_STRIP_WITH_ADJACENCY,
-    ename:VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST_WITH_ADJACENCY or
-    ename:VK_PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP_WITH_ADJACENCY
-  * [[VUID-VkPipelineInputAssemblyStateCreateInfo-topology-00430]]
-    If the <<features-tessellationShader,tessellation shaders>> feature is
-    not enabled, pname:topology must: not be
-    ename:VK_PRIMITIVE_TOPOLOGY_PATCH_LIST
-ifdef::VK_KHR_portability_subset[]
-  * [[VUID-VkPipelineInputAssemblyStateCreateInfo-triangleFans-04452]]
-    If the `apiext:VK_KHR_portability_subset` extension is enabled, and
-    slink:VkPhysicalDevicePortabilitySubsetFeaturesKHR::pname:triangleFans
-    is ename:VK_FALSE, pname:topology must: not be
-    ename:VK_PRIMITIVE_TOPOLOGY_TRIANGLE_FAN
-endif::VK_KHR_portability_subset[]
-****
-
-include::{generated}/validity/structs/VkPipelineInputAssemblyStateCreateInfo.txt[]
---
-
-[open,refpage='VkPipelineInputAssemblyStateCreateFlags',desc='Reserved for future use',type='flags']
---
-include::{generated}/api/flags/VkPipelineInputAssemblyStateCreateFlags.txt[]
-
-tname:VkPipelineInputAssemblyStateCreateFlags is a bitmask type for setting
-a mask, but is currently reserved for future use.
---
-
-ifdef::VK_EXT_extended_dynamic_state2[]
-[open,refpage='vkCmdSetPrimitiveRestartEnableEXT',desc='Set primitive assembly restart state dynamically for a command buffer',type='protos']
---
-To <<pipelines-dynamic-state, dynamically control>> whether a special vertex
-index value is treated as restarting the assembly of primitives, call:
-
-include::{generated}/api/protos/vkCmdSetPrimitiveRestartEnableEXT.txt[]
-
-  * pname:commandBuffer is the command buffer into which the command will be
-    recorded.
-  * pname:primitiveRestartEnable controls whether a special vertex index
-    value is treated as restarting the assembly of primitives.
-    It behaves in the same way as
-    sname:VkPipelineInputAssemblyStateCreateInfo::pname:primitiveRestartEnable
-
-This command sets the primitive restart enable for subsequent drawing
-commands when the graphics pipeline is created with
-ename:VK_DYNAMIC_STATE_PRIMITIVE_RESTART_ENABLE_EXT set in
-slink:VkPipelineDynamicStateCreateInfo::pname:pDynamicStates.
-Otherwise, this state is specified by the
-slink:VkPipelineInputAssemblyStateCreateInfo::pname:primitiveRestartEnable
-value used to create the currently active pipeline.
-
-.Valid Usage
-****
-  * [[VUID-vkCmdSetPrimitiveRestartEnableEXT-None-04866]]
-    The <<features-extendedDynamicState2, extendedDynamicState2>> feature
-    must: be enabled
-****
-
-include::{generated}/validity/protos/vkCmdSetPrimitiveRestartEnableEXT.txt[]
---
-endif::VK_EXT_extended_dynamic_state2[]
-
-
-[[drawing-primitive-topologies]]
-== Primitive Topologies
-
-_Primitive topology_ determines how consecutive vertices are organized into
-primitives, and determines the type of primitive that is used at the
-beginning of the graphics pipeline.
-The effective topology for later stages of the pipeline is altered by
-tessellation or geometry shading (if either is in use) and depends on the
-execution modes of those shaders.
-ifdef::VK_NV_mesh_shader[]
-In the case of mesh shading the only effective topology is defined by the
-execution mode of the mesh shader.
-endif::VK_NV_mesh_shader[]
-
-[open,refpage='VkPrimitiveTopology',desc='Supported primitive topologies',type='enums']
---
-The primitive topologies defined by elink:VkPrimitiveTopology are:
-
-include::{generated}/api/enums/VkPrimitiveTopology.txt[]
-
-  * ename:VK_PRIMITIVE_TOPOLOGY_POINT_LIST specifies a series of
-    <<drawing-point-lists,separate point primitives>>.
-  * ename:VK_PRIMITIVE_TOPOLOGY_LINE_LIST specifies a series of
-    <<drawing-line-lists,separate line primitives>>.
-  * ename:VK_PRIMITIVE_TOPOLOGY_LINE_STRIP specifies a series of
-    <<drawing-line-strips,connected line primitives>> with consecutive lines
-    sharing a vertex.
-  * ename:VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST specifies a series of
-    <<drawing-triangle-lists,separate triangle primitives>>.
-  * ename:VK_PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP specifies a series of
-    <<drawing-triangle-strips,connected triangle primitives>> with
-    consecutive triangles sharing an edge.
-  * ename:VK_PRIMITIVE_TOPOLOGY_TRIANGLE_FAN specifies a series of
-    <<drawing-triangle-fans,connected triangle primitives>> with all
-    triangles sharing a common vertex.
-ifdef::VK_KHR_portability_subset[]
-    If the `apiext:VK_KHR_portability_subset` extension is enabled, and
-    slink:VkPhysicalDevicePortabilitySubsetFeaturesKHR::pname:triangleFans
-    is ename:VK_FALSE, then triangle fans are not supported by the
-    implementation, and ename:VK_PRIMITIVE_TOPOLOGY_TRIANGLE_FAN must: not
-    be used.
-endif::VK_KHR_portability_subset[]
-  * ename:VK_PRIMITIVE_TOPOLOGY_LINE_LIST_WITH_ADJACENCY specifies a series
-    of <<drawing-line-lists-with-adjacency,separate line primitives with
-    adjacency>>.
-  * ename:VK_PRIMITIVE_TOPOLOGY_LINE_STRIP_WITH_ADJACENCY specifies a series
-    of <<drawing-line-strips-with-adjacency,connected line primitives with
-    adjacency>>, with consecutive primitives sharing three vertices.
-  * ename:VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST_WITH_ADJACENCY specifies a
-    series of <<drawing-triangle-lists-with-adjacency,separate triangle
-    primitives with adjacency>>.
-  * ename:VK_PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP_WITH_ADJACENCY specifies
-    <<drawing-triangle-strips-with-adjacency,connected triangle primitives
-    with adjacency>>, with consecutive triangles sharing an edge.
-  * ename:VK_PRIMITIVE_TOPOLOGY_PATCH_LIST specifies
-    <<drawing-patch-lists,separate patch primitives>>.
-
-Each primitive topology, and its construction from a list of vertices, is
-described in detail below with a supporting diagram, according to the
-following key:
-
-[cols="1,2,9"]
-|====
-^.^| image:{images}/primitive_topology_key_vertex.svg[pdfwidth=6pt,align="center",opts="{imageopts}"]
-.^| Vertex
-| A point in 3-dimensional space.
-  Positions chosen within the diagrams are arbitrary and for
-  illustration only.
-
-^.^| image:{images}/primitive_topology_key_vertex_number.svg[pdfwidth=6pt,align="center",opts="{imageopts}"]
-.^| Vertex Number
-| Sequence position of a vertex within the provided vertex data.
-
-^.^| image:{images}/primitive_topology_key_provoking_vertex.svg[pdfwidth=30pt,align="center",opts="{imageopts}"]
-.^| Provoking Vertex
-| Provoking vertex within the main primitive.
-  The tail is angled towards the relevant primitive.
-  Used in <<vertexpostproc-flatshading, flat shading>>.
-
-^.^| image:{images}/primitive_topology_key_edge.svg[pdfwidth=30pt,align="center",opts="{imageopts}"]
-.^| Primitive Edge
-| An edge connecting the points of a main primitive.
-
-^.^| image:{images}/primitive_topology_key_adjacency_edge.svg[pdfwidth=30pt,align="center",opts="{imageopts}"]
-.^| Adjacency Edge
-| Points connected by these lines do not contribute to a main primitive,
-  and are only accessible in a <<geometry,geometry shader>>.
-
-^.^| image:{images}/primitive_topology_key_winding_order.svg[pdfwidth=30pt,align="center",opts="{imageopts}"]
-.^| Winding Order
-| The relative order in which vertices are defined within a primitive,
-  used in the <<primsrast-polygons-basic,facing determination>>.
-  This ordering has no specific start or end point.
-|====
-
-The diagrams are supported with mathematical definitions where the vertices
-([eq]#v#) and primitives ([eq]#p#) are numbered starting from [eq]#0#;
-[eq]#v~0~# is the first vertex in the provided data and [eq]#p~0~# is the
-first primitive in the set of primitives defined by the vertices and
-topology.
---
-
-ifdef::VK_EXT_extended_dynamic_state[]
-[open,refpage='vkCmdSetPrimitiveTopologyEXT',desc='Set primitive topology state dynamically for a command buffer',type='protos']
---
-To <<pipelines-dynamic-state, dynamically set>> primitive topology, call:
-
-include::{generated}/api/protos/vkCmdSetPrimitiveTopologyEXT.txt[]
-
-  * pname:commandBuffer is the command buffer into which the command will be
-    recorded.
-  * pname:primitiveTopology specifies the primitive topology to use for
-    drawing.
-
-This command sets the primitive topology for subsequent drawing commands
-when the graphics pipeline is created with
-ename:VK_DYNAMIC_STATE_PRIMITIVE_TOPOLOGY_EXT set in
-slink:VkPipelineDynamicStateCreateInfo::pname:pDynamicStates.
-Otherwise, this state is specified by the
-slink:VkPipelineInputAssemblyStateCreateInfo::pname:topology value used to
-create the currently active pipeline.
-
-.Valid Usage
-****
-  * [[VUID-vkCmdSetPrimitiveTopologyEXT-None-03347]]
-    The <<features-extendedDynamicState, extendedDynamicState>> feature
-    must: be enabled
-****
-
-include::{generated}/validity/protos/vkCmdSetPrimitiveTopologyEXT.txt[]
---
-
-
-[[drawing-primitive-topology-class]]
-=== Topology Class
-
-The primitive topologies are grouped into the following topology classes:
-
-[[topology-classes]]
-.Topology classes
-[options="header"]
-|===
-| Topology Class  | Primitive Topology
-| Point           | ename:VK_PRIMITIVE_TOPOLOGY_POINT_LIST
-| Line            | ename:VK_PRIMITIVE_TOPOLOGY_LINE_LIST,
-                    ename:VK_PRIMITIVE_TOPOLOGY_LINE_STRIP,
-                    ename:VK_PRIMITIVE_TOPOLOGY_LINE_LIST_WITH_ADJACENCY,
-                    ename:VK_PRIMITIVE_TOPOLOGY_LINE_STRIP_WITH_ADJACENCY
-| Triangle        | ename:VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST,
-                    ename:VK_PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP,
-                    ename:VK_PRIMITIVE_TOPOLOGY_TRIANGLE_FAN,
-                    ename:VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST_WITH_ADJACENCY,
-                    ename:VK_PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP_WITH_ADJACENCY
-| Patch           | ename:VK_PRIMITIVE_TOPOLOGY_PATCH_LIST
-|===
-endif::VK_EXT_extended_dynamic_state[]
-
-
-[[drawing-point-lists]]
-=== Point Lists
-
-When the topology is ename:VK_PRIMITIVE_TOPOLOGY_POINT_LIST, each
-consecutive vertex defines a single point primitive, according to the
-equation:
-
-  {empty}:: [eq]#p~i~ = {v~i~}#
-
-As there is only one vertex, that vertex is the provoking vertex.
-The number of primitives generated is equal to [eq]#pname:vertexCount#.
-
-image::{images}/primitive_topology_point_list.svg[align="center",opts="{imageopts}"]
-
-
-[[drawing-line-lists]]
-=== Line Lists
-
-When the primitive topology is ename:VK_PRIMITIVE_TOPOLOGY_LINE_LIST, each
-consecutive pair of vertices defines a single line primitive, according to
-the equation:
-
-  {empty}:: [eq]#p~i~ = {v~2i~, v~2i+1~}#
-
-The number of primitives generated is equal to
-[eq]#{lfloor}pname:vertexCount/2{rfloor}#.
-
-ifdef::VK_EXT_provoking_vertex[]
-When the pname:provokingVertexMode is
-ename:VK_PROVOKING_VERTEX_MODE_FIRST_VERTEX_EXT, the
-endif::VK_EXT_provoking_vertex[]
-ifndef::VK_EXT_provoking_vertex[]
-The
-endif::VK_EXT_provoking_vertex[]
-provoking vertex for [eq]#p~i~# is [eq]#v~2i~#.
-
-image::{images}/primitive_topology_line_list.svg[align="center",opts="{imageopts}"]
-
-ifdef::VK_EXT_provoking_vertex[]
-When the pname:provokingVertexMode is
-ename:VK_PROVOKING_VERTEX_MODE_LAST_VERTEX_EXT, the provoking vertex for
-[eq]#p~i~# is [eq]#v~2i+1~#.
-
-image::{images}/primitive_topology_line_list_last.svg[align="center",opts="{imageopts}"]
-endif::VK_EXT_provoking_vertex[]
-
-
-[[drawing-line-strips]]
-=== Line Strips
-
-When the primitive topology is ename:VK_PRIMITIVE_TOPOLOGY_LINE_STRIP, one
-line primitive is defined by each vertex and the following vertex, according
-to the equation:
-
-  {empty}:: [eq]#p~i~ = {v~i~, v~i+1~}#
-
-The number of primitives generated is equal to
-[eq]#max(0,pname:vertexCount-1)#.
-
-ifdef::VK_EXT_provoking_vertex[]
-When the pname:provokingVertexMode is
-ename:VK_PROVOKING_VERTEX_MODE_FIRST_VERTEX_EXT, the
-endif::VK_EXT_provoking_vertex[]
-ifndef::VK_EXT_provoking_vertex[]
-The
-endif::VK_EXT_provoking_vertex[]
-provoking vertex for [eq]#p~i~# is [eq]#v~i~#.
-
-image::{images}/primitive_topology_line_strip.svg[align="center",opts="{imageopts}"]
-
-ifdef::VK_EXT_provoking_vertex[]
-When the pname:provokingVertexMode is
-ename:VK_PROVOKING_VERTEX_MODE_LAST_VERTEX_EXT, the provoking vertex for
-[eq]#p~i~# is [eq]#v~i+1~#.
-
-image::{images}/primitive_topology_line_strip_last.svg[align="center",opts="{imageopts}"]
-endif::VK_EXT_provoking_vertex[]
-
-
-[[drawing-triangle-lists]]
-=== Triangle Lists
-
-When the primitive topology is ename:VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST,
-each consecutive set of three vertices defines a single triangle primitive,
-according to the equation:
-
-  {empty}:: [eq]#p~i~ = {v~3i~, v~3i+1~, v~3i+2~}#
-
-The number of primitives generated is equal to
-[eq]#{lfloor}pname:vertexCount/3{rfloor}#.
-
-ifdef::VK_EXT_provoking_vertex[]
-When the pname:provokingVertexMode is
-ename:VK_PROVOKING_VERTEX_MODE_FIRST_VERTEX_EXT, the
-endif::VK_EXT_provoking_vertex[]
-ifndef::VK_EXT_provoking_vertex[]
-The
-endif::VK_EXT_provoking_vertex[]
-provoking vertex for [eq]#p~i~# is [eq]#v~3i~#.
-
-image::{images}/primitive_topology_triangle_list.svg[align="center",opts="{imageopts}"]
-
-ifdef::VK_EXT_provoking_vertex[]
-When the pname:provokingVertexMode is
-ename:VK_PROVOKING_VERTEX_MODE_LAST_VERTEX_EXT, the provoking vertex for
-[eq]#p~i~# is [eq]#v~3i+2~#.
-
-image::{images}/primitive_topology_triangle_list_last.svg[align="center",opts="{imageopts}"]
-endif::VK_EXT_provoking_vertex[]
-
-
-[[drawing-triangle-strips]]
-=== Triangle Strips
-
-When the primitive topology is ename:VK_PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP,
-one triangle primitive is defined by each vertex and the two vertices that
-follow it, according to the equation:
-
-  {empty}:: [eq]#p~i~ = {v~i~, v~i+(1+i%2)~, v~i+(2-i%2)~}#
-
-The number of primitives generated is equal to
-[eq]#max(0,pname:vertexCount-2)#.
-
-ifdef::VK_EXT_provoking_vertex[]
-When the pname:provokingVertexMode is
-ename:VK_PROVOKING_VERTEX_MODE_FIRST_VERTEX_EXT, the
-endif::VK_EXT_provoking_vertex[]
-ifndef::VK_EXT_provoking_vertex[]
-The
-endif::VK_EXT_provoking_vertex[]
-provoking vertex for [eq]#p~i~# is [eq]#v~i~#.
-
-image::{images}/primitive_topology_triangle_strip.svg[align="center",opts="{imageopts}"]
-
-ifdef::VK_EXT_provoking_vertex[]
-When the pname:provokingVertexMode is
-ename:VK_PROVOKING_VERTEX_MODE_LAST_VERTEX_EXT, the provoking vertex for
-[eq]#p~i~# is [eq]#v~i+2~#.
-
-image::{images}/primitive_topology_triangle_strip_last.svg[align="center",opts="{imageopts}"]
-endif::VK_EXT_provoking_vertex[]
-
-[NOTE]
-.Note
-====
-The ordering of the vertices in each successive triangle is reversed, so
-that the winding order is consistent throughout the strip.
-====
-
-
-[[drawing-triangle-fans]]
-=== Triangle Fans
-
-When the primitive topology is ename:VK_PRIMITIVE_TOPOLOGY_TRIANGLE_FAN,
-triangle primitives are defined around a shared common vertex, according to
-the equation:
-
-  {empty}:: [eq]#p~i~ = {v~i+1~, v~i+2~, v~0~}#
-
-The number of primitives generated is equal to
-[eq]#max(0,pname:vertexCount-2)#.
-
-ifdef::VK_EXT_provoking_vertex[]
-When the pname:provokingVertexMode is
-ename:VK_PROVOKING_VERTEX_MODE_FIRST_VERTEX_EXT, the
-endif::VK_EXT_provoking_vertex[]
-ifndef::VK_EXT_provoking_vertex[]
-The
-endif::VK_EXT_provoking_vertex[]
-provoking vertex for [eq]#p~i~# is [eq]#v~i+1~#.
-
-image::{images}/primitive_topology_triangle_fan.svg[align="center",opts="{imageopts}"]
-
-ifdef::VK_EXT_provoking_vertex[]
-When the pname:provokingVertexMode is
-ename:VK_PROVOKING_VERTEX_MODE_LAST_VERTEX_EXT, the provoking vertex for
-[eq]#p~i~# is [eq]#v~i+2~#.
-
-image::{images}/primitive_topology_triangle_fan_last.svg[align="center",opts="{imageopts}"]
-endif::VK_EXT_provoking_vertex[]
-
-ifdef::VK_KHR_portability_subset[]
-[NOTE]
-.Note
-====
-If the `apiext:VK_KHR_portability_subset` extension is enabled, and
-slink:VkPhysicalDevicePortabilitySubsetFeaturesKHR::pname:triangleFans is
-ename:VK_FALSE, then triangle fans are not supported by the implementation,
-and ename:VK_PRIMITIVE_TOPOLOGY_TRIANGLE_FAN must: not be used.
-====
-endif::VK_KHR_portability_subset[]
-
-
-[[drawing-line-lists-with-adjacency]]
-=== Line Lists With Adjacency
-
-When the primitive topology is
-ename:VK_PRIMITIVE_TOPOLOGY_LINE_LIST_WITH_ADJACENCY, each consecutive set
-of four vertices defines a single line primitive with adjacency, according
-to the equation:
-
-  {empty}:: [eq]#p~i~ = {v~4i~, v~4i+1~, v~4i+2~,v~4i+3~}#
-
-A line primitive is described by the second and third vertices of the total
-primitive, with the remaining two vertices only accessible in a
-<<geometry,geometry shader>>.
-
-The number of primitives generated is equal to
-[eq]#{lfloor}pname:vertexCount/4{rfloor}#.
-
-ifdef::VK_EXT_provoking_vertex[]
-When the pname:provokingVertexMode is
-ename:VK_PROVOKING_VERTEX_MODE_FIRST_VERTEX_EXT, the
-endif::VK_EXT_provoking_vertex[]
-ifndef::VK_EXT_provoking_vertex[]
-The
-endif::VK_EXT_provoking_vertex[]
-provoking vertex for [eq]#p~i~# is [eq]#v~4i+1~#.
-
-image::{images}/primitive_topology_line_list_with_adjacency.svg[align="center",opts="{imageopts}"]
-
-ifdef::VK_EXT_provoking_vertex[]
-When the pname:provokingVertexMode is
-ename:VK_PROVOKING_VERTEX_MODE_LAST_VERTEX_EXT, the provoking vertex for
-[eq]#p~i~# is [eq]#v~4i+2~#.
-
-image::{images}/primitive_topology_line_list_with_adjacency_last.svg[align="center",opts="{imageopts}"]
-endif::VK_EXT_provoking_vertex[]
-
-
-[[drawing-line-strips-with-adjacency]]
-=== Line Strips With Adjacency
-
-When the primitive topology is
-ename:VK_PRIMITIVE_TOPOLOGY_LINE_STRIP_WITH_ADJACENCY, one line primitive
-with adjacency is defined by each vertex and the following vertex, according
-to the equation:
-
-  {empty}:: [eq]#p~i~ = {v~i~, v~i+1~, v~i+2~, v~i+3~}#
-
-A line primitive is described by the second and third vertices of the total
-primitive, with the remaining two vertices only accessible in a
-<<geometry,geometry shader>>.
-
-The number of primitives generated is equal to
-[eq]#max(0,pname:vertexCount-3)#.
-
-ifdef::VK_EXT_provoking_vertex[]
-When the pname:provokingVertexMode is
-ename:VK_PROVOKING_VERTEX_MODE_FIRST_VERTEX_EXT, the
-endif::VK_EXT_provoking_vertex[]
-ifndef::VK_EXT_provoking_vertex[]
-The
-endif::VK_EXT_provoking_vertex[]
-provoking vertex for [eq]#p~i~# is [eq]#v~i+1~#.
-
-image::{images}/primitive_topology_line_strip_with_adjacency.svg[align="center",opts="{imageopts}"]
-
-ifdef::VK_EXT_provoking_vertex[]
-When the pname:provokingVertexMode is
-ename:VK_PROVOKING_VERTEX_MODE_LAST_VERTEX_EXT, the provoking vertex for
-[eq]#p~i~# is [eq]#v~i+2~#.
-
-image::{images}/primitive_topology_line_strip_with_adjacency_last.svg[align="center",opts="{imageopts}"]
-endif::VK_EXT_provoking_vertex[]
-
-
-[[drawing-triangle-lists-with-adjacency]]
-=== Triangle Lists With Adjacency
-
-When the primitive topology is
-ename:VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST_WITH_ADJACENCY, each consecutive
-set of six vertices defines a single triangle primitive with adjacency,
-according to the equations:
-
-  {empty}:: [eq]#p~i~ = {v~6i~, v~6i+1~, v~6i+2~, v~6i+3~, v~6i+4~,
-            v~6i+5~}#
-
-A triangle primitive is described by the first, third, and fifth vertices of
-the total primitive, with the remaining three vertices only accessible in a
-<<geometry,geometry shader>>.
-
-The number of primitives generated is equal to
-[eq]#{lfloor}pname:vertexCount/6{rfloor}#.
-
-ifdef::VK_EXT_provoking_vertex[]
-When the pname:provokingVertexMode is
-ename:VK_PROVOKING_VERTEX_MODE_FIRST_VERTEX_EXT, the
-endif::VK_EXT_provoking_vertex[]
-ifndef::VK_EXT_provoking_vertex[]
-The
-endif::VK_EXT_provoking_vertex[]
-provoking vertex for [eq]#p~i~# is [eq]#v~6i~#.
-
-image::{images}/primitive_topology_triangle_list_with_adjacency.svg[align="center",opts="{imageopts}"]
-
-ifdef::VK_EXT_provoking_vertex[]
-When the pname:provokingVertexMode is
-ename:VK_PROVOKING_VERTEX_MODE_LAST_VERTEX_EXT, the provoking vertex for
-[eq]#p~i~# is [eq]#v~6i+4~#.
-
-image::{images}/primitive_topology_triangle_list_with_adjacency_last.svg[align="center",opts="{imageopts}"]
-endif::VK_EXT_provoking_vertex[]
-
-
-[[drawing-triangle-strips-with-adjacency]]
-=== Triangle Strips With Adjacency
-
-When the primitive topology is
-ename:VK_PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP_WITH_ADJACENCY, one triangle
-primitive with adjacency is defined by each vertex and the following 5
-vertices.
-
-The number of primitives generated, [eq]#n#, is equal to [eq]#{lfloor}max(0,
-pname:vertexCount - 4)/2{rfloor}#.
-
-If [eq]#n=1#, the primitive is defined as:
-
-  {empty}:: [eq]#p = {v~0~, v~1~, v~2~, v~5~, v~4~, v~3~}#
-
-If [eq]#n>1#, the total primitive consists of different vertices according
-to where it is in the strip:
-
-  {empty}:: [eq]#p~i~ = {v~2i~, v~2i+1~, v~2i+2~, v~2i+6~, v~2i+4~,
-            v~2i+3~}# when [eq]#i=0#
-  {empty}:: [eq]#p~i~ = {v~2i~, v~2i+3~, v~2i+4~, v~2i+6~, v~2i+2~,
-            v~2i-2~}# when [eq]#i>0#, [eq]#i<n-1#, and [eq]#i%2=1#
-  {empty}:: [eq]#p~i~ = {v~2i~, v~2i-2~, v~2i+2~, v~2i+6~, v~2i+4~,
-            v~2i+3~}# when [eq]#i>0#, [eq]#i<n-1#, and [eq]#i%2=0#
-  {empty}:: [eq]#p~i~ = {v~2i~, v~2i+3~, v~2i+4~, v~2i+5~, v~2i+2~,
-            v~2i-2~}# when [eq]#i=n-1# and [eq]#i%2=1#
-  {empty}:: [eq]#p~i~ = {v~2i~, v~2i-2~, v~2i+2~, v~2i+5~, v~2i+4~,
-            v~2i+3~}# when [eq]#i=n-1# and [eq]#i%2=0#
-
-A triangle primitive is described by the first, third, and fifth vertices of
-the total primitive in all cases, with the remaining three vertices only
-accessible in a <<geometry,geometry shader>>.
-
-[NOTE]
-.Note
-====
-The ordering of the vertices in each successive triangle is altered so that
-the winding order is consistent throughout the strip.
-====
-
-ifdef::VK_EXT_provoking_vertex[]
-When the pname:provokingVertexMode is
-ename:VK_PROVOKING_VERTEX_MODE_FIRST_VERTEX_EXT, the
-endif::VK_EXT_provoking_vertex[]
-ifndef::VK_EXT_provoking_vertex[]
-The
-endif::VK_EXT_provoking_vertex[]
-provoking vertex for [eq]#p~i~# is always [eq]#v~2i~#.
-
-image::{images}/primitive_topology_triangle_strip_with_adjacency.svg[align="center",opts="{imageopts}"]
-
-ifdef::VK_EXT_provoking_vertex[]
-When the pname:provokingVertexMode is
-ename:VK_PROVOKING_VERTEX_MODE_LAST_VERTEX_EXT, the provoking vertex for
-[eq]#p~i~# is always [eq]#v~2i+4~#.
-
-image::{images}/primitive_topology_triangle_strip_with_adjacency_last.svg[align="center",opts="{imageopts}"]
-endif::VK_EXT_provoking_vertex[]
-
-
-[[drawing-patch-lists]]
-=== Patch Lists
-
-When the primitive topology is ename:VK_PRIMITIVE_TOPOLOGY_PATCH_LIST, each
-consecutive set of [eq]#m# vertices defines a single patch primitive,
-according to the equation:
-
-  {empty}:: [eq]#p~i~ = {v~mi~, v~mi+1~, ..., v~mi+(m-2)~, v~mi+(m-1)~}#
-
-where [eq]#m# is equal to
-slink:VkPipelineTessellationStateCreateInfo::pname:patchControlPoints.
-
-Patch lists are never passed to <<vertexpostproc, vertex post-processing>>,
-and as such no provoking vertex is defined for patch primitives.
-The number of primitives generated is equal to
-[eq]#{lfloor}pname:vertexCount/m{rfloor}#.
-
-The vertices comprising a patch have no implied geometry, and are used as
-inputs to tessellation shaders and the fixed-function tessellator to
-generate new point, line, or triangle primitives.
-
-
-[[drawing-primitive-order]]
-== Primitive Order
-
-Primitives generated by <<drawing, drawing commands>> progress through the
-stages of the <<synchronization-pipeline-graphics, graphics pipeline>> in
-_primitive order_.
-Primitive order is initially determined in the following way:
-
-  . Submission order determines the initial ordering
-  . For indirect drawing commands, the order in which accessed instances of
-    the slink:VkDrawIndirectCommand are stored in pname:buffer, from lower
-    indirect buffer addresses to higher addresses.
-  . If a drawing command includes multiple instances, the order in which
-    instances are executed, from lower numbered instances to higher.
-  . The order in which primitives are specified by a drawing command:
-  ** For non-indexed draws, from vertices with a lower numbered
-     code:vertexIndex to a higher numbered code:vertexIndex.
-  ** For indexed draws, vertices sourced from a lower index buffer addresses
-     to higher addresses.
-ifdef::VK_NV_mesh_shader[]
-  ** For draws using mesh shaders, the order is provided by <<mesh-ordering,
-     mesh shading>>.
-endif::VK_NV_mesh_shader[]
-
-Within this order implementations further sort primitives:
-
-[start=5]
-  . If tessellation shading is active, by an implementation-dependent order
-    of new primitives generated by <<tessellation-primitive-order,
-    tessellation>>.
-  . If geometry shading is active, by the order new primitives are generated
-    by <<geometry-ordering, geometry shading>>.
-  . If the <<primsrast-polygonmode,polygon mode>> is not
-    ename:VK_POLYGON_MODE_FILL,
-ifdef::VK_NV_fill_rectangle[]
-    or ename:VK_POLYGON_MODE_FILL_RECTANGLE_NV,
-endif::VK_NV_fill_rectangle[]
-    by an implementation-dependent ordering of the new primitives generated
-    within the original primitive.
-
-Primitive order is later used to define <<primsrast-order, rasterization
-order>>, which determines the order in which fragments output results to a
-framebuffer.
-
-
-[[drawing-primitive-shading]]
-== Programmable Primitive Shading
-
-Once primitives are assembled, they proceed to the vertex shading stage of
-the pipeline.
-If the draw includes multiple instances, then the set of primitives is sent
-to the vertex shading stage multiple times, once for each instance.
-
-It is implementation-dependent whether vertex shading occurs on vertices
-that are discarded as part of incomplete primitives, but if it does occur
-then it operates as if they were vertices in complete primitives and such
-invocations can: have side effects.
-
-Vertex shading receives two per-vertex inputs from the primitive assembly
-stage - the code:vertexIndex and the code:instanceIndex.
-How these values are generated is defined below, with each command.
-
-Drawing commands fall roughly into two categories:
-
-  * Non-indexed drawing commands present a sequential code:vertexIndex to
-    the vertex shader.
-    The sequential index is generated automatically by the device (see
-    <<fxvertex,Fixed-Function Vertex Processing>> for details on both
-    specifying the vertex attributes indexed by code:vertexIndex, as well as
-    binding vertex buffers containing those attributes to a command buffer).
-    These commands are:
-  ** flink:vkCmdDraw
-  ** flink:vkCmdDrawIndirect
-ifdef::VK_VERSION_1_2[]
-  ** flink:vkCmdDrawIndirectCount
-endif::VK_VERSION_1_2[]
-ifdef::VK_KHR_draw_indirect_count[]
-  ** flink:vkCmdDrawIndirectCountKHR
-endif::VK_KHR_draw_indirect_count[]
-ifdef::VK_AMD_draw_indirect_count[]
-  ** flink:vkCmdDrawIndirectCountAMD
-endif::VK_AMD_draw_indirect_count[]
-ifdef::VK_EXT_multi_draw[]
-  ** flink:vkCmdDrawMultiEXT
-endif::VK_EXT_multi_draw[]
-  * Indexed drawing commands read index values from an _index buffer_ and
-    use this to compute the code:vertexIndex value for the vertex shader.
-    These commands are:
-  ** flink:vkCmdDrawIndexed
-  ** flink:vkCmdDrawIndexedIndirect
-ifdef::VK_VERSION_1_2[]
-  ** flink:vkCmdDrawIndexedIndirectCount
-endif::VK_VERSION_1_2[]
-ifdef::VK_KHR_draw_indirect_count[]
-  ** flink:vkCmdDrawIndexedIndirectCountKHR
-endif::VK_KHR_draw_indirect_count[]
-ifdef::VK_AMD_draw_indirect_count[]
-  ** flink:vkCmdDrawIndexedIndirectCountAMD
-endif::VK_AMD_draw_indirect_count[]
-ifdef::VK_EXT_multi_draw[]
-  ** flink:vkCmdDrawMultiIndexedEXT
-endif::VK_EXT_multi_draw[]
-
-
-[open,refpage='vkCmdBindIndexBuffer',desc='Bind an index buffer to a command buffer',type='protos']
---
-To bind an index buffer to a command buffer, call:
-
-include::{generated}/api/protos/vkCmdBindIndexBuffer.txt[]
-
-  * pname:commandBuffer is the command buffer into which the command is
-    recorded.
-  * pname:buffer is the buffer being bound.
-  * pname:offset is the starting offset in bytes within pname:buffer used in
-    index buffer address calculations.
-  * pname:indexType is a elink:VkIndexType value specifying the size of the
-    indices.
-
-.Valid Usage
-****
-  * [[VUID-vkCmdBindIndexBuffer-offset-00431]]
-    pname:offset must: be less than the size of pname:buffer
-  * [[VUID-vkCmdBindIndexBuffer-offset-00432]]
-    The sum of pname:offset and the address of the range of
-    sname:VkDeviceMemory object that is backing pname:buffer, must: be a
-    multiple of the type indicated by pname:indexType
-  * [[VUID-vkCmdBindIndexBuffer-buffer-00433]]
-    pname:buffer must: have been created with the
-    ename:VK_BUFFER_USAGE_INDEX_BUFFER_BIT flag
-  * [[VUID-vkCmdBindIndexBuffer-buffer-00434]]
-    If pname:buffer is non-sparse then it must: be bound completely and
-    contiguously to a single sname:VkDeviceMemory object
-ifdef::VK_NV_ray_tracing,VK_KHR_acceleration_structure[]
-  * [[VUID-vkCmdBindIndexBuffer-indexType-02507]]
-    pname:indexType must: not be ename:VK_INDEX_TYPE_NONE_KHR
-endif::VK_NV_ray_tracing,VK_KHR_acceleration_structure[]
-ifdef::VK_EXT_index_type_uint8[]
-  * [[VUID-vkCmdBindIndexBuffer-indexType-02765]]
-    If pname:indexType is ename:VK_INDEX_TYPE_UINT8_EXT, the
-    <<features-indexTypeUint8,indexTypeUint8>> feature must: be enabled
-endif::VK_EXT_index_type_uint8[]
-****
-
-include::{generated}/validity/protos/vkCmdBindIndexBuffer.txt[]
---
-
-[open,refpage='VkIndexType',desc='Type of index buffer indices',type='enums']
---
-Possible values of flink:vkCmdBindIndexBuffer::pname:indexType, specifying
-the size of indices, are:
-
-include::{generated}/api/enums/VkIndexType.txt[]
-
-  * ename:VK_INDEX_TYPE_UINT16 specifies that indices are 16-bit unsigned
-    integer values.
-  * ename:VK_INDEX_TYPE_UINT32 specifies that indices are 32-bit unsigned
-    integer values.
-ifdef::VK_NV_ray_tracing,VK_KHR_acceleration_structure[]
-  * ename:VK_INDEX_TYPE_NONE_KHR specifies that no indices are provided.
-endif::VK_NV_ray_tracing,VK_KHR_acceleration_structure[]
-ifdef::VK_EXT_index_type_uint8[]
-  * ename:VK_INDEX_TYPE_UINT8_EXT specifies that indices are 8-bit unsigned
-    integer values.
-endif::VK_EXT_index_type_uint8[]
---
-
-The parameters for each drawing command are specified directly in the
-command or read from buffer memory, depending on the command.
-Drawing commands that source their parameters from buffer memory are known
-as _indirect_ drawing commands.
-
-All drawing commands interact with the <<features-robustBufferAccess, Robust
-Buffer Access>> feature.
-
-[open,refpage='vkCmdDraw',desc='Draw primitives',type='protos']
---
-:refpage: vkCmdDraw
-
-To record a non-indexed draw, call:
-
-include::{generated}/api/protos/vkCmdDraw.txt[]
-
-  * pname:commandBuffer is the command buffer into which the command is
-    recorded.
-  * pname:vertexCount is the number of vertices to draw.
-  * pname:instanceCount is the number of instances to draw.
-  * pname:firstVertex is the index of the first vertex to draw.
-  * pname:firstInstance is the instance ID of the first instance to draw.
-
-When the command is executed, primitives are assembled using the current
-primitive topology and pname:vertexCount consecutive vertex indices with the
-first code:vertexIndex value equal to pname:firstVertex.
-The primitives are drawn pname:instanceCount times with code:instanceIndex
-starting with pname:firstInstance and increasing sequentially for each
-instance.
-The assembled primitives execute the bound graphics pipeline.
-
-.Valid Usage
-****
-include::{chapters}/commonvalidity/draw_common.txt[]
-include::{chapters}/commonvalidity/draw_dispatch_nonindirect_common.txt[]
-include::{chapters}/commonvalidity/draw_vertex_binding.txt[]
-****
-
-include::{generated}/validity/protos/vkCmdDraw.txt[]
---
-
-[open,refpage='vkCmdDrawIndexed',desc='Draw primitives with indexed vertices',type='protos']
---
-:refpage: vkCmdDrawIndexed
-
-To record an indexed draw, call:
-
-include::{generated}/api/protos/vkCmdDrawIndexed.txt[]
-
-  * pname:commandBuffer is the command buffer into which the command is
-    recorded.
-  * pname:indexCount is the number of vertices to draw.
-  * pname:instanceCount is the number of instances to draw.
-  * pname:firstIndex is the base index within the index buffer.
-  * pname:vertexOffset is the value added to the vertex index before
-    indexing into the vertex buffer.
-  * pname:firstInstance is the instance ID of the first instance to draw.
-
-When the command is executed, primitives are assembled using the current
-primitive topology and pname:indexCount vertices whose indices are retrieved
-from the index buffer.
-The index buffer is treated as an array of tightly packed unsigned integers
-of size defined by the flink:vkCmdBindIndexBuffer::pname:indexType parameter
-with which the buffer was bound.
-
-The first vertex index is at an offset of [eq]#pname:firstIndex {times}
-code:indexSize {plus} pname:offset# within the bound index buffer, where
-pname:offset is the offset specified by fname:vkCmdBindIndexBuffer and
-code:indexSize is the byte size of the type specified by pname:indexType.
-Subsequent index values are retrieved from consecutive locations in the
-index buffer.
-Indices are first compared to the primitive restart value, then zero
-extended to 32 bits (if the code:indexType is
-ifdef::VK_EXT_index_type_uint8[]
-ename:VK_INDEX_TYPE_UINT8_EXT or
-endif::VK_EXT_index_type_uint8[]
-ename:VK_INDEX_TYPE_UINT16) and have pname:vertexOffset added to them,
-before being supplied as the code:vertexIndex value.
-
-The primitives are drawn pname:instanceCount times with code:instanceIndex
-starting with pname:firstInstance and increasing sequentially for each
-instance.
-The assembled primitives execute the bound graphics pipeline.
-
-.Valid Usage
-****
-include::{chapters}/commonvalidity/draw_common.txt[]
-include::{chapters}/commonvalidity/draw_dispatch_nonindirect_common.txt[]
-include::{chapters}/commonvalidity/draw_vertex_binding.txt[]
-  * [[VUID-vkCmdDrawIndexed-firstIndex-04932]]
-    [eq]#(code:indexSize {times} (pname:firstIndex {plus} pname:indexCount)
-    {plus} pname:offset)# must: be less than or equal to the size of the
-    bound index buffer, with code:indexSize being based on the type
-    specified by pname:indexType, where the index buffer, pname:indexType,
-    and pname:offset are specified via fname:vkCmdBindIndexBuffer
-****
-
-include::{generated}/validity/protos/vkCmdDrawIndexed.txt[]
---
-
-ifdef::VK_EXT_multi_draw[]
-[open,refpage='vkCmdDrawMultiEXT',desc='Draw primitives',type='protos']
---
-:refpage: vkCmdDrawMultiEXT
-
-To record an ordered sequence of drawing operations which have no state
-changes between them, call:
-
-include::{generated}/api/protos/vkCmdDrawMultiEXT.txt[]
-
-  * pname:commandBuffer is the command buffer into which the command is
-    recorded.
-  * pname:drawCount is the number of draws to execute, and can: be zero.
-  * pname:pVertexInfo is a pointer to an array of slink:VkMultiDrawInfoEXT
-    with vertex information to be drawn.
-  * pname:instanceCount is the number of instances to draw.
-  * pname:firstInstance is the instance ID of the first instance to draw.
-  * pname:stride is the byte stride between consecutive elements of
-    pname:pVertexInfo.
-
-pname:drawCount draws are executed with parameters taken from
-pname:pVertexInfo.
-The number of draw commands recorded is pname:drawCount, with each command
-reading, sequentially, a pname:firstVertex and a pname:vertexCount from
-pname:pVertexInfo.
-
-.Valid Usage
-****
-include::{chapters}/commonvalidity/draw_common.txt[]
-include::{chapters}/commonvalidity/draw_dispatch_nonindirect_common.txt[]
-include::{chapters}/commonvalidity/draw_vertex_binding.txt[]
-  * [[VUID-vkCmdDrawMultiEXT-None-04933]]
-    The <<features-multiDraw,multiDraw>> feature must: be enabled
-  * [[VUID-vkCmdDrawMultiEXT-drawCount-04934]]
-    pname:drawCount must: be less than
-    sname:VkPhysicalDeviceMultiDrawPropertiesEXT::pname:maxMultiDrawCount
-  * [[VUID-vkCmdDrawMultiEXT-drawCount-04935]]
-    If pname:drawCount is greater than zero, pname:pVertexInfo must: be a
-    valid pointer to memory containing one or more valid instances of
-    slink:VkMultiDrawInfoEXT structures
-  * [[VUID-vkCmdDrawMultiEXT-stride-04936]]
-    pname:stride must be a multiple of 4
-****
-
-include::{generated}/validity/protos/vkCmdDrawMultiEXT.txt[]
---
-
-[open,refpage='vkCmdDrawMultiIndexedEXT',desc='Draw primitives',type='protos']
---
-:refpage: vkCmdDrawMultiIndexedEXT
-
-To record an ordered sequence of indexed drawing operations which have no
-state changes between them, call:
-
-include::{generated}/api/protos/vkCmdDrawMultiIndexedEXT.txt[]
-
-  * pname:commandBuffer is the command buffer into which the command is
-    recorded.
-  * pname:drawCount is the number of draws to execute, and can: be zero.
-  * pname:pIndexInfo is a pointer to an array of
-    slink:VkMultiDrawIndexedInfoEXT with index information to be drawn.
-  * pname:instanceCount is the number of instances to draw.
-  * pname:firstInstance is the instance ID of the first instance to draw.
-  * pname:stride is the byte stride between consecutive elements of
-    pname:pIndexInfo.
-  * pname:pVertexOffset is `NULL` or a pointer to the value added to the
-    vertex index before indexing into the vertex buffer.
-    When specified, sname:VkMultiDrawIndexedInfoEXT::pname:offset is
-    ignored.
-
-pname:drawCount indexed draws are executed with parameters taken from
-pname:pIndexInfo.
-The number of draw commands recorded is pname:drawCount, with each command
-reading, sequentially, a pname:firstIndex and an pname:indexCount from
-pname:pIndexInfo.
-If pname:pVertexOffset is `NULL`, a pname:vertexOffset is also read from
-pname:pIndexInfo, otherwise the value from dereferencing pname:pVertexOffset
-is used.
-
-.Valid Usage
-****
-include::{chapters}/commonvalidity/draw_common.txt[]
-include::{chapters}/commonvalidity/draw_dispatch_nonindirect_common.txt[]
-include::{chapters}/commonvalidity/draw_vertex_binding.txt[]
-  * [[VUID-vkCmdDrawMultiIndexedEXT-None-04937]]
-    The <<features-multiDraw,multiDraw>> feature must: be enabled
-  * [[VUID-vkCmdDrawMultiIndexedEXT-firstIndex-04938]]
-    [eq]#(code:indexSize {times} (pname:firstIndex {plus} pname:indexCount)
-    {plus} pname:offset)# must: be less than or equal to the size of the
-    bound index buffer, with code:indexSize being based on the type
-    specified by pname:indexType, where the index buffer, pname:indexType,
-    and pname:offset are specified via fname:vkCmdBindIndexBuffer
-  * [[VUID-vkCmdDrawMultiIndexedEXT-drawCount-04939]]
-    pname:drawCount must: be less than
-    sname:VkPhysicalDeviceMultiDrawPropertiesEXT::pname:maxMultiDrawCount
-  * [[VUID-vkCmdDrawMultiIndexedEXT-drawCount-04940]]
-    If pname:drawCount is greater than zero, pname:pIndexInfo must: be a
-    valid pointer to memory containing one or more valid instances of
-    slink:VkMultiDrawIndexedInfoEXT structures
-  * [[VUID-vkCmdDrawMultiIndexedEXT-stride-04941]]
-    pname:stride must be a multiple of 4
-****
-
-include::{generated}/validity/protos/vkCmdDrawMultiIndexedEXT.txt[]
---
-
-[open,refpage='VkMultiDrawInfoEXT',desc='Structure specifying a multi-draw command',type='structs',xrefs='vkCmdDrawMultiEXT']
---
-
-The sname:VkMultiDrawInfoEXT structure is defined as:
-
-include::{generated}/api/structs/VkMultiDrawInfoEXT.txt[]
-
-  * pname:firstVertex is the first vertex to draw.
-  * pname:vertexCount is the number of vertices to draw.
-
-The members of sname:VkMultiDrawInfoEXT have the same meaning as the
-pname:firstVertex and pname:vertexCount parameters in flink:vkCmdDraw.
-
-include::{generated}/validity/structs/VkMultiDrawInfoEXT.txt[]
-
---
-
-[open,refpage='VkMultiDrawIndexedInfoEXT',desc='Structure specifying a multi-draw command',type='structs',xrefs='vkCmdDrawMultiIndexedEXT']
---
-
-The sname:VkMultiDrawIndexedInfoEXT structure is defined as:
-
-include::{generated}/api/structs/VkMultiDrawIndexedInfoEXT.txt[]
-
-  * pname:firstIndex is the first index to draw.
-  * pname:indexCount is the number of vertices to draw.
-  * pname:vertexOffset is the value added to the vertex index before
-    indexing into the vertex buffer for indexed multidraws.
-
-The pname:firstIndex, pname:indexCount, and pname:vertexOffset members of
-sname:VkMultiDrawIndexedInfoEXT have the same meaning as the
-pname:firstIndex, pname:indexCount, and pname:vertexOffset parameters,
-respectively, of flink:vkCmdDrawIndexed.
-
-include::{generated}/validity/structs/VkMultiDrawIndexedInfoEXT.txt[]
-
---
-endif::VK_EXT_multi_draw[]
-
-[open,refpage='vkCmdDrawIndirect',desc='Draw primitives with indirect parameters',type='protos']
---
-:refpage: vkCmdDrawIndirect
-
-To record a non-indexed indirect drawing command, call:
-
-include::{generated}/api/protos/vkCmdDrawIndirect.txt[]
-
-  * pname:commandBuffer is the command buffer into which the command is
-    recorded.
-  * pname:buffer is the buffer containing draw parameters.
-  * pname:offset is the byte offset into pname:buffer where parameters
-    begin.
-  * pname:drawCount is the number of draws to execute, and can: be zero.
-  * pname:stride is the byte stride between successive sets of draw
-    parameters.
-
-fname:vkCmdDrawIndirect behaves similarly to flink:vkCmdDraw except that the
-parameters are read by the device from a buffer during execution.
-pname:drawCount draws are executed by the command, with parameters taken
-from pname:buffer starting at pname:offset and increasing by pname:stride
-bytes for each successive draw.
-The parameters of each draw are encoded in an array of
-slink:VkDrawIndirectCommand structures.
-If pname:drawCount is less than or equal to one, pname:stride is ignored.
-
-.Valid Usage
-****
-include::{chapters}/commonvalidity/draw_common.txt[]
-include::{chapters}/commonvalidity/draw_vertex_binding.txt[]
-include::{chapters}/commonvalidity/draw_dispatch_indirect_common.txt[]
-include::{chapters}/commonvalidity/draw_indirect_drawcount.txt[]
-  * [[VUID-vkCmdDrawIndirect-firstInstance-00478]]
-    If the <<features-drawIndirectFirstInstance,drawIndirectFirstInstance>>
-    feature is not enabled, all the pname:firstInstance members of the
-    sname:VkDrawIndirectCommand structures accessed by this command must: be
-    code:0
-  * [[VUID-vkCmdDrawIndirect-drawCount-00476]]
-    If pname:drawCount is greater than `1`, pname:stride must: be a multiple
-    of `4` and must: be greater than or equal to
-    code:sizeof(sname:VkDrawIndirectCommand)
-  * [[VUID-vkCmdDrawIndirect-drawCount-00487]]
-    If pname:drawCount is equal to `1`, [eq]#(pname:offset {plus}
-    code:sizeof(slink:VkDrawIndirectCommand))# must: be less than or equal
-    to the size of pname:buffer
-  * [[VUID-vkCmdDrawIndirect-drawCount-00488]]
-    If pname:drawCount is greater than `1`, [eq]#(pname:stride {times}
-    (pname:drawCount - 1) {plus} pname:offset {plus}
-    code:sizeof(slink:VkDrawIndirectCommand))# must: be less than or equal
-    to the size of pname:buffer
-****
-
-include::{generated}/validity/protos/vkCmdDrawIndirect.txt[]
---
-
-[open,refpage='VkDrawIndirectCommand',desc='Structure specifying a indirect drawing command',type='structs',xrefs='vkCmdDrawIndirect']
---
-The sname:VkDrawIndirectCommand structure is defined as:
-
-include::{generated}/api/structs/VkDrawIndirectCommand.txt[]
-
-  * pname:vertexCount is the number of vertices to draw.
-  * pname:instanceCount is the number of instances to draw.
-  * pname:firstVertex is the index of the first vertex to draw.
-  * pname:firstInstance is the instance ID of the first instance to draw.
-
-The members of sname:VkDrawIndirectCommand have the same meaning as the
-similarly named parameters of flink:vkCmdDraw.
-
-.Valid Usage
-****
-  * [[VUID-VkDrawIndirectCommand-None-00500]]
-    For a given vertex buffer binding, any attribute data fetched must: be
-    entirely contained within the corresponding vertex buffer binding, as
-    described in <<fxvertex-input>>
-  * [[VUID-VkDrawIndirectCommand-firstInstance-00501]]
-    If the <<features-drawIndirectFirstInstance,drawIndirectFirstInstance>>
-    feature is not enabled, pname:firstInstance must: be code:0
-****
-
-include::{generated}/validity/structs/VkDrawIndirectCommand.txt[]
-
---
-
-ifdef::VK_VERSION_1_2,VK_KHR_draw_indirect_count[]
-[open,refpage='vkCmdDrawIndirectCount',desc='Draw primitives with indirect parameters and draw count',type='protos',alias='vkCmdDrawIndirectCountKHR vkCmdDrawIndirectCountAMD']
---
-:refpage: vkCmdDrawIndirectCount
-
-To record a non-indexed draw call with a draw call count sourced from a
-buffer, call:
-
-ifdef::VK_VERSION_1_2[]
-include::{generated}/api/protos/vkCmdDrawIndirectCount.txt[]
-endif::VK_VERSION_1_2[]
-
-// Jon: conditional logic on connective clauses with 3 forms of the command including VK_VERSION_1_2 needs work.
-ifdef::VK_VERSION_1_2+VK_KHR_draw_indirect_count[or the equivalent command]
-
-ifdef::VK_KHR_draw_indirect_count[]
-include::{generated}/api/protos/vkCmdDrawIndirectCountKHR.txt[]
-endif::VK_KHR_draw_indirect_count[]
-
-ifdef::VK_KHR_draw_indirect_count+VK_AMD_draw_indirect_count[or the equivalent command]
-
-ifdef::VK_AMD_draw_indirect_count[]
-include::{generated}/api/protos/vkCmdDrawIndirectCountAMD.txt[]
-endif::VK_AMD_draw_indirect_count[]
-
-  * pname:commandBuffer is the command buffer into which the command is
-    recorded.
-  * pname:buffer is the buffer containing draw parameters.
-  * pname:offset is the byte offset into pname:buffer where parameters
-    begin.
-  * pname:countBuffer is the buffer containing the draw count.
-  * pname:countBufferOffset is the byte offset into pname:countBuffer where
-    the draw count begins.
-  * pname:maxDrawCount specifies the maximum number of draws that will be
-    executed.
-    The actual number of executed draw calls is the minimum of the count
-    specified in pname:countBuffer and pname:maxDrawCount.
-  * pname:stride is the byte stride between successive sets of draw
-    parameters.
-
-fname:vkCmdDrawIndirectCount behaves similarly to flink:vkCmdDrawIndirect
-except that the draw count is read by the device from a buffer during
-execution.
-The command will read an unsigned 32-bit integer from pname:countBuffer
-located at pname:countBufferOffset and use this as the draw count.
-
-.Valid Usage
-****
-include::{chapters}/commonvalidity/draw_common.txt[]
-include::{chapters}/commonvalidity/draw_vertex_binding.txt[]
-include::{chapters}/commonvalidity/draw_dispatch_indirect_common.txt[]
-include::{chapters}/commonvalidity/draw_indirect_count_common.txt[]
-  * [[VUID-vkCmdDrawIndirectCount-stride-03110]]
-    pname:stride must: be a multiple of `4` and must: be greater than or
-    equal to sizeof(sname:VkDrawIndirectCommand)
-  * [[VUID-vkCmdDrawIndirectCount-maxDrawCount-03111]]
-    If pname:maxDrawCount is greater than or equal to `1`,
-    [eq]#(pname:stride {times} (pname:maxDrawCount - 1) {plus} pname:offset
-    {plus} sizeof(sname:VkDrawIndirectCommand))# must: be less than or equal
-    to the size of pname:buffer
-  * [[VUID-vkCmdDrawIndirectCount-countBuffer-03121]]
-    If the count stored in pname:countBuffer is equal to `1`,
-    [eq]#(pname:offset {plus} sizeof(sname:VkDrawIndirectCommand))# must: be
-    less than or equal to the size of pname:buffer
-  * [[VUID-vkCmdDrawIndirectCount-countBuffer-03122]]
-    If the count stored in pname:countBuffer is greater than `1`,
-    [eq]#(pname:stride {times} (pname:drawCount - 1) {plus} pname:offset
-    {plus} sizeof(sname:VkDrawIndirectCommand))# must: be less than or equal
-    to the size of pname:buffer
-****
-
-include::{generated}/validity/protos/vkCmdDrawIndirectCount.txt[]
-
---
-endif::VK_VERSION_1_2,VK_KHR_draw_indirect_count[]
-
-[open,refpage='vkCmdDrawIndexedIndirect',desc='Draw primitives with indirect parameters and indexed vertices',type='protos']
---
-:refpage: vkCmdDrawIndexedIndirect
-
-To record an indexed indirect drawing command, call:
-
-include::{generated}/api/protos/vkCmdDrawIndexedIndirect.txt[]
-
-  * pname:commandBuffer is the command buffer into which the command is
-    recorded.
-  * pname:buffer is the buffer containing draw parameters.
-  * pname:offset is the byte offset into pname:buffer where parameters
-    begin.
-  * pname:drawCount is the number of draws to execute, and can: be zero.
-  * pname:stride is the byte stride between successive sets of draw
-    parameters.
-
-fname:vkCmdDrawIndexedIndirect behaves similarly to flink:vkCmdDrawIndexed
-except that the parameters are read by the device from a buffer during
-execution.
-pname:drawCount draws are executed by the command, with parameters taken
-from pname:buffer starting at pname:offset and increasing by pname:stride
-bytes for each successive draw.
-The parameters of each draw are encoded in an array of
-slink:VkDrawIndexedIndirectCommand structures.
-If pname:drawCount is less than or equal to one, pname:stride is ignored.
-
-.Valid Usage
-****
-include::{chapters}/commonvalidity/draw_common.txt[]
-include::{chapters}/commonvalidity/draw_vertex_binding.txt[]
-include::{chapters}/commonvalidity/draw_dispatch_indirect_common.txt[]
-include::{chapters}/commonvalidity/draw_indirect_drawcount.txt[]
-  * [[VUID-vkCmdDrawIndexedIndirect-drawCount-00528]]
-    If pname:drawCount is greater than `1`, pname:stride must: be a multiple
-    of `4` and must: be greater than or equal to
-    code:sizeof(sname:VkDrawIndexedIndirectCommand)
-  * [[VUID-vkCmdDrawIndexedIndirect-firstInstance-00530]]
-    If the <<features-drawIndirectFirstInstance,drawIndirectFirstInstance>>
-    feature is not enabled, all the pname:firstInstance members of the
-    sname:VkDrawIndexedIndirectCommand structures accessed by this command
-    must: be code:0
-  * [[VUID-vkCmdDrawIndexedIndirect-drawCount-00539]]
-    If pname:drawCount is equal to `1`, [eq]#(pname:offset {plus}
-    code:sizeof(sname:VkDrawIndexedIndirectCommand))# must: be less than or
-    equal to the size of pname:buffer
-  * [[VUID-vkCmdDrawIndexedIndirect-drawCount-00540]]
-    If pname:drawCount is greater than `1`, [eq]#(pname:stride {times}
-    (pname:drawCount - 1) {plus} pname:offset {plus}
-    code:sizeof(sname:VkDrawIndexedIndirectCommand))# must: be less than or
-    equal to the size of pname:buffer
-****
-
-include::{generated}/validity/protos/vkCmdDrawIndexedIndirect.txt[]
---
-
-[open,refpage='VkDrawIndexedIndirectCommand',desc='Structure specifying a indexed indirect drawing command',type='structs',xrefs='vkCmdDrawIndexedIndirect']
---
-The sname:VkDrawIndexedIndirectCommand structure is defined as:
-
-include::{generated}/api/structs/VkDrawIndexedIndirectCommand.txt[]
-
-  * pname:indexCount is the number of vertices to draw.
-  * pname:instanceCount is the number of instances to draw.
-  * pname:firstIndex is the base index within the index buffer.
-  * pname:vertexOffset is the value added to the vertex index before
-    indexing into the vertex buffer.
-  * pname:firstInstance is the instance ID of the first instance to draw.
-
-The members of sname:VkDrawIndexedIndirectCommand have the same meaning as
-the similarly named parameters of flink:vkCmdDrawIndexed.
-
-.Valid Usage
-****
-  * [[VUID-VkDrawIndexedIndirectCommand-None-00552]]
-    For a given vertex buffer binding, any attribute data fetched must: be
-    entirely contained within the corresponding vertex buffer binding, as
-    described in <<fxvertex-input>>
-  * [[VUID-VkDrawIndexedIndirectCommand-indexSize-00553]]
-    [eq]#(code:indexSize {times} (pname:firstIndex {plus} pname:indexCount)
-    {plus} pname:offset)# must: be less than or equal to the size of the
-    bound index buffer, with code:indexSize being based on the type
-    specified by pname:indexType, where the index buffer, pname:indexType,
-    and pname:offset are specified via fname:vkCmdBindIndexBuffer
-  * [[VUID-VkDrawIndexedIndirectCommand-firstInstance-00554]]
-    If the <<features-drawIndirectFirstInstance,drawIndirectFirstInstance>>
-    feature is not enabled, pname:firstInstance must: be code:0
-****
-
-include::{generated}/validity/structs/VkDrawIndexedIndirectCommand.txt[]
---
-
-ifdef::VK_VERSION_1_2,VK_KHR_draw_indirect_count[]
-[open,refpage='vkCmdDrawIndexedIndirectCount',desc='Draw parameters with indirect parameters, indexed vertices, and draw count',type='protos',alias='vkCmdDrawIndexedIndirectCountKHR vkCmdDrawIndexedIndirectCountAMD']
---
-:refpage: vkCmdDrawIndexedIndirectCount
-
-To record an indexed draw call with a draw call count sourced from a buffer,
-call:
-
-ifdef::VK_VERSION_1_2[]
-include::{generated}/api/protos/vkCmdDrawIndexedIndirectCount.txt[]
-endif::VK_VERSION_1_2[]
-
-// Jon: conditional logic on connective clauses with 3 forms of the command including VK_VERSION_1_2 needs work.
-ifdef::VK_VERSION_1_2+VK_KHR_draw_indirect_count[or the equivalent command]
-
-ifdef::VK_KHR_draw_indirect_count[]
-include::{generated}/api/protos/vkCmdDrawIndexedIndirectCountKHR.txt[]
-endif::VK_KHR_draw_indirect_count[]
-
-ifdef::VK_KHR_draw_indirect_count+VK_AMD_draw_indirect_count[or the equivalent command]
-
-ifdef::VK_AMD_draw_indirect_count[]
-include::{generated}/api/protos/vkCmdDrawIndexedIndirectCountAMD.txt[]
-endif::VK_AMD_draw_indirect_count[]
-
-  * pname:commandBuffer is the command buffer into which the command is
-    recorded.
-  * pname:buffer is the buffer containing draw parameters.
-  * pname:offset is the byte offset into pname:buffer where parameters
-    begin.
-  * pname:countBuffer is the buffer containing the draw count.
-  * pname:countBufferOffset is the byte offset into pname:countBuffer where
-    the draw count begins.
-  * pname:maxDrawCount specifies the maximum number of draws that will be
-    executed.
-    The actual number of executed draw calls is the minimum of the count
-    specified in pname:countBuffer and pname:maxDrawCount.
-  * pname:stride is the byte stride between successive sets of draw
-    parameters.
-
-fname:vkCmdDrawIndexedIndirectCount behaves similarly to
-flink:vkCmdDrawIndexedIndirect except that the draw count is read by the
-device from a buffer during execution.
-The command will read an unsigned 32-bit integer from pname:countBuffer
-located at pname:countBufferOffset and use this as the draw count.
-
-.Valid Usage
-****
-include::{chapters}/commonvalidity/draw_common.txt[]
-include::{chapters}/commonvalidity/draw_vertex_binding.txt[]
-include::{chapters}/commonvalidity/draw_dispatch_indirect_common.txt[]
-include::{chapters}/commonvalidity/draw_indirect_count_common.txt[]
-  * [[VUID-vkCmdDrawIndexedIndirectCount-stride-03142]]
-    pname:stride must: be a multiple of `4` and must: be greater than or
-    equal to sizeof(sname:VkDrawIndexedIndirectCommand)
-  * [[VUID-vkCmdDrawIndexedIndirectCount-maxDrawCount-03143]]
-    If pname:maxDrawCount is greater than or equal to `1`,
-    [eq]#(pname:stride {times} (pname:maxDrawCount - 1) {plus} pname:offset
-    {plus} sizeof(sname:VkDrawIndexedIndirectCommand))# must: be less than
-    or equal to the size of pname:buffer
-  * [[VUID-vkCmdDrawIndexedIndirectCount-countBuffer-03153]]
-    If count stored in pname:countBuffer is equal to `1`, [eq]#(pname:offset
-    {plus} sizeof(sname:VkDrawIndexedIndirectCommand))# must: be less than
-    or equal to the size of pname:buffer
-  * [[VUID-vkCmdDrawIndexedIndirectCount-countBuffer-03154]]
-    If count stored in pname:countBuffer is greater than `1`,
-    [eq]#(pname:stride {times} (pname:drawCount - 1) {plus} pname:offset
-    {plus} sizeof(sname:VkDrawIndexedIndirectCommand))# must: be less than
-    or equal to the size of pname:buffer
-****
-
-include::{generated}/validity/protos/vkCmdDrawIndexedIndirectCount.txt[]
---
-endif::VK_VERSION_1_2,VK_KHR_draw_indirect_count[]
-
-
-ifdef::VK_EXT_transform_feedback[]
-[[drawing-transform-feedback]]
-=== Drawing Transform Feedback
-
-It is possible to draw vertex data that was previously captured during
-active <<vertexpostproc-transform-feedback,transform feedback>> by binding
-one or more of the transform feedback buffers as vertex buffers.
-A pipeline barrier is required between using the buffers as transform
-feedback buffers and vertex buffers to ensure all writes to the transform
-feedback buffers are visible when the data is read as vertex attributes.
-The source access is ename:VK_ACCESS_TRANSFORM_FEEDBACK_WRITE_BIT_EXT and
-the destination access is ename:VK_ACCESS_VERTEX_ATTRIBUTE_READ_BIT for the
-pipeline stages ename:VK_PIPELINE_STAGE_TRANSFORM_FEEDBACK_BIT_EXT and
-ename:VK_PIPELINE_STAGE_VERTEX_INPUT_BIT respectively.
-The value written to the counter buffer by
-flink:vkCmdEndTransformFeedbackEXT can: be used to determine the vertex
-count for the draw.
-A pipeline barrier is required between using the counter buffer for
-fname:vkCmdEndTransformFeedbackEXT and fname:vkCmdDrawIndirectByteCountEXT
-where the source access is
-ename:VK_ACCESS_TRANSFORM_FEEDBACK_COUNTER_WRITE_BIT_EXT and the destination
-access is ename:VK_ACCESS_INDIRECT_COMMAND_READ_BIT for the pipeline stages
-ename:VK_PIPELINE_STAGE_TRANSFORM_FEEDBACK_BIT_EXT and
-ename:VK_PIPELINE_STAGE_DRAW_INDIRECT_BIT respectively.
-
-[open,refpage='vkCmdDrawIndirectByteCountEXT',desc='Draw primitives with indirect parameters where the vertex count is derived from the counter byte value in the counter buffer',type='protos']
---
-:refpage: vkCmdDrawIndirectByteCountEXT
-
-To record a non-indexed draw call, where the vertex count is based on a byte
-count read from a buffer and the passed in vertex stride parameter, call:
-
-include::{generated}/api/protos/vkCmdDrawIndirectByteCountEXT.txt[]
-
-  * pname:commandBuffer is the command buffer into which the command is
-    recorded.
-  * pname:instanceCount is the number of instances to draw.
-  * pname:firstInstance is the instance ID of the first instance to draw.
-  * pname:counterBuffer is the buffer handle from where the byte count is
-    read.
-  * pname:counterBufferOffset is the offset into the buffer used to read the
-    byte count, which is used to calculate the vertex count for this draw
-    call.
-  * pname:counterOffset is subtracted from the byte count read from the
-    pname:counterBuffer at the pname:counterBufferOffset
-  * pname:vertexStride is the stride in bytes between each element of the
-    vertex data that is used to calculate the vertex count from the counter
-    value.
-    This value is typically the same value that was used in the graphics
-    pipeline state when the transform feedback was captured as the
-    code:XfbStride.
-
-When the command is executed, primitives are assembled in the same way as
-done with flink:vkCmdDraw except the pname:vertexCount is calculated based
-on the byte count read from pname:counterBuffer at offset
-pname:counterBufferOffset.
-The assembled primitives execute the bound graphics pipeline.
-
-The effective pname:vertexCount is calculated as follows:
-
-[source,c]
-~~~~
-const uint32_t * counterBufferPtr = (const uint8_t *)counterBuffer.address + counterBufferOffset;
-vertexCount = floor(max(0, (*counterBufferPtr - counterOffset)) / vertexStride);
-~~~~
-
-The effective pname:firstVertex is zero.
-
-.Valid Usage
-****
-include::{chapters}/commonvalidity/draw_common.txt[]
-include::{chapters}/commonvalidity/draw_vertex_binding.txt[]
-  * [[VUID-vkCmdDrawIndirectByteCountEXT-transformFeedback-02287]]
-    sname:VkPhysicalDeviceTransformFeedbackFeaturesEXT::pname:transformFeedback
-    must: be enabled
-  * [[VUID-vkCmdDrawIndirectByteCountEXT-transformFeedbackDraw-02288]]
-    The implementation must: support
-    sname:VkPhysicalDeviceTransformFeedbackPropertiesEXT::pname:transformFeedbackDraw
-  * [[VUID-vkCmdDrawIndirectByteCountEXT-vertexStride-02289]]
-    pname:vertexStride must: be greater than 0 and less than or equal to
-    slink:VkPhysicalDeviceLimits::pname:maxTransformFeedbackBufferDataStride
-  * [[VUID-vkCmdDrawIndirectByteCountEXT-counterBuffer-04567]]
-    If pname:counterBuffer is non-sparse then it must: be bound completely
-    and contiguously to a single sname:VkDeviceMemory object
-  * [[VUID-vkCmdDrawIndirectByteCountEXT-counterBuffer-02290]]
-    pname:counterBuffer must: have been created with the
-    ename:VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT bit set
-  * [[VUID-vkCmdDrawIndirectByteCountEXT-counterBufferOffset-04568]]
-    pname:counterBufferOffset must: be a multiple of `4`
-ifdef::VK_VERSION_1_1[]
-  * [[VUID-vkCmdDrawIndirectByteCountEXT-commandBuffer-02646]]
-    pname:commandBuffer must: not be a protected command buffer
-endif::VK_VERSION_1_1[]
-****
-
-include::{generated}/validity/protos/vkCmdDrawIndirectByteCountEXT.txt[]
---
-endif::VK_EXT_transform_feedback[]
-
-
-ifdef::VK_EXT_conditional_rendering[]
-[[drawing-conditional-rendering]]
-== Conditional Rendering
-
-Certain rendering commands can: be executed conditionally based on a value
-in buffer memory.
-These rendering commands are limited to <<drawing,drawing commands>>,
-<<dispatch,dispatching commands>>, and clearing attachments with
-flink:vkCmdClearAttachments within a conditional rendering block which is
-defined by commands flink:vkCmdBeginConditionalRenderingEXT and
-flink:vkCmdEndConditionalRenderingEXT.
-Other rendering commands remain unaffected by conditional rendering.
-
-[[active-conditional-rendering]]
-After beginning conditional rendering, it is considered _active_ within the
-command buffer it was called until it is ended with
-flink:vkCmdEndConditionalRenderingEXT.
-
-Conditional rendering must: begin and end in the same command buffer.
-When conditional rendering is active, a primary command buffer can: execute
-secondary command buffers if the <<features-inheritedConditionalRendering,
-inherited conditional rendering>> feature is enabled.
-For a secondary command buffer to be executed while conditional rendering is
-active in the primary command buffer, it must: set the
-pname:conditionalRenderingEnable flag of
-slink:VkCommandBufferInheritanceConditionalRenderingInfoEXT, as described in
-the <<commandbuffers-recording, Command Buffer Recording>> section.
-
-Conditional rendering must: also either begin and end inside the same
-subpass of a render pass instance, or must: both begin and end outside of a
-render pass instance (i.e. contain entire render pass instances).
-
-[open,refpage='vkCmdBeginConditionalRenderingEXT',desc='Define the beginning of a conditional rendering block',type='protos']
---
-To begin conditional rendering, call:
-
-include::{generated}/api/protos/vkCmdBeginConditionalRenderingEXT.txt[]
-
-  * pname:commandBuffer is the command buffer into which this command will
-    be recorded.
-  * pname:pConditionalRenderingBegin is a pointer to a
-    slink:VkConditionalRenderingBeginInfoEXT structure specifying parameters
-    of conditional rendering.
-
-.Valid Usage
-****
-  * [[VUID-vkCmdBeginConditionalRenderingEXT-None-01980]]
-    Conditional rendering must: not already be
-    <<active-conditional-rendering,active>>
-****
-
-include::{generated}/validity/protos/vkCmdBeginConditionalRenderingEXT.txt[]
---
-
-[open,refpage='VkConditionalRenderingBeginInfoEXT',desc='Structure specifying conditional rendering begin information',type='structs']
---
-The sname:VkConditionalRenderingBeginInfoEXT structure is defined as:
-
-include::{generated}/api/structs/VkConditionalRenderingBeginInfoEXT.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:buffer is a buffer containing the predicate for conditional
-    rendering.
-  * pname:offset is the byte offset into pname:buffer where the predicate is
-    located.
-  * pname:flags is a bitmask of tlink:VkConditionalRenderingFlagsEXT
-    specifying the behavior of conditional rendering.
-
-If the 32-bit value at pname:offset in pname:buffer memory is zero, then the
-rendering commands are discarded, otherwise they are executed as normal.
-If the value of the predicate in buffer memory changes while conditional
-rendering is active, the rendering commands may: be discarded in an
-implementation-dependent way.
-Some implementations may latch the value of the predicate upon beginning
-conditional rendering while others may read it before every rendering
-command.
-
-.Valid Usage
-****
-  * [[VUID-VkConditionalRenderingBeginInfoEXT-buffer-01981]]
-    If pname:buffer is non-sparse then it must: be bound completely and
-    contiguously to a single sname:VkDeviceMemory object
-  * [[VUID-VkConditionalRenderingBeginInfoEXT-buffer-01982]]
-    pname:buffer must: have been created with the
-    ename:VK_BUFFER_USAGE_CONDITIONAL_RENDERING_BIT_EXT bit set
-  * [[VUID-VkConditionalRenderingBeginInfoEXT-offset-01983]]
-    pname:offset must: be less than the size of pname:buffer by at least 32
-    bits
-  * [[VUID-VkConditionalRenderingBeginInfoEXT-offset-01984]]
-    pname:offset must: be a multiple of 4
-****
-
-include::{generated}/validity/structs/VkConditionalRenderingBeginInfoEXT.txt[]
-
---
-
-[open,refpage='VkConditionalRenderingFlagBitsEXT',desc='Specify the behavior of conditional rendering',type='enums']
---
-Bits which can: be set in
-flink:vkCmdBeginConditionalRenderingEXT::pname:flags specifying the behavior
-of conditional rendering are:
-
-include::{generated}/api/enums/VkConditionalRenderingFlagBitsEXT.txt[]
-
-  * ename:VK_CONDITIONAL_RENDERING_INVERTED_BIT_EXT specifies the condition
-    used to determine whether to discard rendering commands or not.
-    That is, if the 32-bit predicate read from pname:buffer memory at
-    pname:offset is zero, the rendering commands are not discarded, and if
-    non zero, then they are discarded.
---
-
-[open,refpage='VkConditionalRenderingFlagsEXT',desc='Bitmask of VkConditionalRenderingFlagBitsEXT',type='flags']
---
-include::{generated}/api/flags/VkConditionalRenderingFlagsEXT.txt[]
-
-tname:VkConditionalRenderingFlagsEXT is a bitmask type for setting a mask of
-zero or more elink:VkConditionalRenderingFlagBitsEXT.
---
-
-[open,refpage='vkCmdEndConditionalRenderingEXT',desc='Define the end of a conditional rendering block',type='protos']
---
-To end conditional rendering, call:
-
-include::{generated}/api/protos/vkCmdEndConditionalRenderingEXT.txt[]
-
-  * pname:commandBuffer is the command buffer into which this command will
-    be recorded.
-
-Once ended, conditional rendering becomes inactive.
-
-.Valid Usage
-****
-  * [[VUID-vkCmdEndConditionalRenderingEXT-None-01985]]
-    Conditional rendering must: be <<active-conditional-rendering,active>>
-  * [[VUID-vkCmdEndConditionalRenderingEXT-None-01986]]
-    If conditional rendering was made
-    <<active-conditional-rendering,active>> outside of a render pass
-    instance, it must: not be ended inside a render pass instance
-  * [[VUID-vkCmdEndConditionalRenderingEXT-None-01987]]
-    If conditional rendering was made
-    <<active-conditional-rendering,active>> within a subpass it must: be
-    ended in the same subpass
-****
-
-include::{generated}/validity/protos/vkCmdEndConditionalRenderingEXT.txt[]
---
-endif::VK_EXT_conditional_rendering[]
-
-ifdef::VK_NV_mesh_shader[]
-include::VK_NV_mesh_shader/drawing.txt[]
-endif::VK_NV_mesh_shader[]
diff --git a/registry/vulkan/chapters/extensions.txt b/registry/vulkan/chapters/extensions.txt
deleted file mode 100644
index 3145960..0000000
--- a/registry/vulkan/chapters/extensions.txt
+++ /dev/null
@@ -1,942 +0,0 @@
-// Copyright 2015-2021 The Khronos Group, Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-[[extendingvulkan]]
-= Extending Vulkan
-
-New functionality may: be added to Vulkan via either new extensions or new
-versions of the core, or new versions of an extension in some cases.
-
-This chapter describes how Vulkan is versioned, how compatibility is
-affected between different versions, and compatibility rules that are
-followed by the Vulkan Working Group.
-
-
-[[extendingvulkan-instanceanddevicefunctionality]]
-== Instance and Device Functionality
-
-Commands that enumerate instance properties, or that accept a
-slink:VkInstance object as a parameter, are considered instance-level
-functionality.
-Commands
-ifdef::VK_VERSION_1_1,VK_KHR_get_physical_device_properties2[]
-that enumerate physical device properties, or
-endif::VK_VERSION_1_1,VK_KHR_get_physical_device_properties2[]
-that accept a slink:VkDevice object or any of a device's child objects as a
-parameter, are considered device-level functionality.
-
-ifdef::VK_VERSION_1_1[]
-[NOTE]
-.Note
-====
-Applications usually interface to Vulkan using a loader that implements only
-instance-level functionality, passing device-level functionality to
-implementations of the full Vulkan API on the system.
-In some circumstances, as these may be implemented independently, it is
-possible that the loader and device implementations on a given installation
-will support different versions.
-To allow for this and call out when it happens, the Vulkan specification
-enumerates device and instance level functionality separately - they have
-<<extendingvulkan-coreversions-queryingversionsupport,independent version
-queries>>.
-====
-endif::VK_VERSION_1_1[]
-
-ifdef::VK_VERSION_1_1,VK_KHR_get_physical_device_properties2[]
-[NOTE]
-.Note
-====
-Vulkan 1.0 initially specified new physical device enumeration functionality
-as instance-level, requiring it to be included in an instance extension.
-As the capabilities of device-level functionality require discovery via
-physical device enumeration, this led to the situation where many device
-extensions required an instance extension as well.
-To alleviate this extra work,
-`apiext:VK_KHR_get_physical_device_properties2` (and subsequently Vulkan
-1.1) redefined device-level functionality to include physical device
-enumeration.
-====
-endif::VK_VERSION_1_1,VK_KHR_get_physical_device_properties2[]
-
-
-[[extendingvulkan-coreversions]]
-== Core Versions
-
-The Vulkan Specification is regularly updated with bug fixes and
-clarifications.
-Occasionally new functionality is added to the core and at some point it is
-expected that there will be a desire to perform a large, breaking change to
-the API.
-In order to indicate to developers how and when these changes are made to
-the specification, and to provide a way to identify each set of changes, the
-Vulkan API maintains a version number.
-
-
-[[extendingvulkan-coreversions-versionnumbers]]
-=== Version Numbers
-
-The Vulkan version number comprises four parts indicating the variant,
-major, minor and patch version of the Vulkan API Specification.
-
-The _variant_ indicates the variant of the Vulkan API supported by the
-implementation.
-This is always 0 for the Vulkan API.
-
-[NOTE]
-.Note
-====
-A non-zero variant indicates the API is a variant of the Vulkan API and
-applications will typically need to be modified to run against it.
-The variant field was a later addition to the version number, added in
-version 1.2.175 of the Specification.
-As Vulkan uses variant 0, this change is fully backwards compatible with the
-previous version number format for Vulkan implementations.
-New version number macros have been added for this change and the old macros
-deprecated.
-For existing applications using the older format and macros, an
-implementation with non-zero variant will decode as a very high Vulkan
-version.
-The high version number should be detectable by applications performing
-suitable version checking.
-====
-
-The _major version_ indicates a significant change in the API, which will
-encompass a wholly new version of the specification.
-
-The _minor version_ indicates the incorporation of new functionality into
-the core specification.
-
-The _patch version_ indicates bug fixes, clarifications, and language
-improvements have been incorporated into the specification.
-
-Compatibility guarantees made about versions of the API sharing any of the
-same version numbers are documented in
-<<extendingvulkan-compatibility-coreversions>>
-
-The version number is used in several places in the API.
-In each such use, the version numbers are packed into a 32-bit integer as
-follows:
-
-  * The variant is a 3-bit integer packed into bits 31-29.
-  * The major version is a 7-bit integer packed into bits 28-22.
-  * The minor version number is a 10-bit integer packed into bits 21-12.
-  * The patch version number is a 12-bit integer packed into bits 11-0.
-
-[open,refpage='VK_API_VERSION_VARIANT',desc='Extract API variant number',type='defines']
---
-dname:VK_API_VERSION_VARIANT extracts the API variant number from a packed
-version number:
-
-include::{generated}/api/defines/VK_API_VERSION_VARIANT.txt[]
---
-
-[open,refpage='VK_API_VERSION_MAJOR',desc='Extract API major version number',type='defines']
---
-dname:VK_API_VERSION_MAJOR extracts the API major version number from a
-packed version number:
-
-include::{generated}/api/defines/VK_API_VERSION_MAJOR.txt[]
---
-
-[open,refpage='VK_VERSION_MAJOR',desc='Extract API major version number',type='defines']
---
-dname:VK_VERSION_MAJOR extracts the API major version number from a packed
-version number:
-
-include::{generated}/api/defines/VK_VERSION_MAJOR.txt[]
---
-
-[open,refpage='VK_API_VERSION_MINOR',desc='Extract API minor version number',type='defines']
---
-dname:VK_API_VERSION_MINOR extracts the API minor version number from a
-packed version number:
-
-include::{generated}/api/defines/VK_API_VERSION_MINOR.txt[]
---
-
-[open,refpage='VK_VERSION_MINOR',desc='Extract API minor version number',type='defines']
---
-dname:VK_VERSION_MINOR extracts the API minor version number from a packed
-version number:
-
-include::{generated}/api/defines/VK_VERSION_MINOR.txt[]
---
-
-[open,refpage='VK_API_VERSION_PATCH',desc='Extract API patch version number',type='defines']
---
-dname:VK_API_VERSION_PATCH extracts the API patch version number from a
-packed version number:
-
-include::{generated}/api/defines/VK_API_VERSION_PATCH.txt[]
---
-
-[open,refpage='VK_VERSION_PATCH',desc='Extract API patch version number',type='defines']
---
-dname:VK_VERSION_PATCH extracts the API patch version number from a packed
-version number:
-
-include::{generated}/api/defines/VK_VERSION_PATCH.txt[]
---
-
-[open,refpage='VK_MAKE_API_VERSION',desc='Construct an API version number',type='defines',xrefs='VkApplicationInfo vkCreateInstance']
---
-dname:VK_MAKE_API_VERSION constructs an API version number.
-
-include::{generated}/api/defines/VK_MAKE_API_VERSION.txt[]
-
-  * pname:variant is the variant number.
-  * pname:major is the major version number.
-  * pname:minor is the minor version number.
-  * pname:patch is the patch version number.
---
-
-[open,refpage='VK_MAKE_VERSION',desc='Construct an API version number',type='defines',xrefs='VkApplicationInfo vkCreateInstance']
---
-dname:VK_MAKE_VERSION constructs an API version number.
-
-include::{generated}/api/defines/VK_MAKE_VERSION.txt[]
-
-  * pname:major is the major version number.
-  * pname:minor is the minor version number.
-  * pname:patch is the patch version number.
---
-
-[open,refpage='VK_API_VERSION_1_0',desc='Return API version number for Vulkan 1.0',type='defines',xrefs='vkCreateInstance vkGetPhysicalDeviceProperties']
---
-dname:VK_API_VERSION_1_0 returns the API version number for Vulkan 1.0.0.
-
-include::{generated}/api/defines/VK_API_VERSION_1_0.txt[]
---
-
-ifdef::VK_VERSION_1_1[]
-[open,refpage='VK_API_VERSION_1_1',desc='Return API version number for Vulkan 1.1',type='defines',xrefs='vkCreateInstance vkGetPhysicalDeviceProperties']
---
-dname:VK_API_VERSION_1_1 returns the API version number for Vulkan 1.1.0.
-
-include::{generated}/api/defines/VK_API_VERSION_1_1.txt[]
---
-endif::VK_VERSION_1_1[]
-
-ifdef::VK_VERSION_1_2[]
-[open,refpage='VK_API_VERSION_1_2',desc='Return API version number for Vulkan 1.2',type='defines',xrefs='vkCreateInstance vkGetPhysicalDeviceProperties']
---
-dname:VK_API_VERSION_1_2 returns the API version number for Vulkan 1.2.0.
-
-include::{generated}/api/defines/VK_API_VERSION_1_2.txt[]
---
-endif::VK_VERSION_1_2[]
-
-
-[[extendingvulkan-coreversions-queryingversionsupport]]
-=== Querying Version Support
-
-ifndef::VK_VERSION_1_1[]
-[NOTE]
-.Note
-====
-In Vulkan 1.0, there is no mechanism to detect the separate versions of
-<<extendingvulkan-instanceanddevicefunctionality,instance-level and
-device-level functionality>> supported.
-However, the fname:vkEnumerateInstanceVersion command was added in Vulkan
-1.1 to determine the supported version of instance-level functionality -
-querying for this function via flink:vkGetInstanceProcAddr will return
-`NULL` on implementations that only support Vulkan 1.0 functionality.
-For more information on this, please refer to the Vulkan 1.1 specification.
-====
-endif::VK_VERSION_1_1[]
-
-ifdef::VK_VERSION_1_1[]
-The version of instance-level functionality can be queried by calling
-flink:vkEnumerateInstanceVersion.
-endif::VK_VERSION_1_1[]
-
-The version of device-level functionality can be queried by calling
-flink:vkGetPhysicalDeviceProperties
-ifdef::VK_VERSION_1_1,VK_KHR_get_physical_device_properties2[]
-or flink:vkGetPhysicalDeviceProperties2,
-endif::VK_VERSION_1_1,VK_KHR_get_physical_device_properties2[]
-and is returned in slink:VkPhysicalDeviceProperties::pname:apiVersion,
-encoded as described in <<extendingvulkan-coreversions-versionnumbers>>.
-
-
-[[extendingvulkan-layers]]
-== Layers
-
-When a layer is enabled, it inserts itself into the call chain for Vulkan
-commands the layer is interested in.
-Layers can: be used for a variety of tasks that extend the base behavior of
-Vulkan beyond what is required by the specification - such as call logging,
-tracing, validation, or providing additional extensions.
-
-[NOTE]
-.Note
-====
-For example, an implementation is not expected to check that the value of
-enums used by the application fall within allowed ranges.
-Instead, a validation layer would do those checks and flag issues.
-This avoids a performance penalty during production use of the application
-because those layers would not be enabled in production.
-====
-
-[NOTE]
-.Note
-====
-Vulkan layers may: wrap object handles (i.e. return a different handle value
-to the application than that generated by the implementation).
-This is generally discouraged, as it increases the probability of
-incompatibilities with new extensions.
-The validation layers wrap handles in order to track the proper use and
-destruction of each object.
-See the <<LoaderInterfaceArchitecture, "`Architecture of the Vulkan Loader
-Interfaces`">> document for additional information.
-====
-
-[open,refpage='vkEnumerateInstanceLayerProperties',desc='Returns up to requested number of global layer properties',type='protos']
---
-To query the available layers, call:
-
-include::{generated}/api/protos/vkEnumerateInstanceLayerProperties.txt[]
-
-  * pname:pPropertyCount is a pointer to an integer related to the number of
-    layer properties available or queried, as described below.
-  * pname:pProperties is either `NULL` or a pointer to an array of
-    slink:VkLayerProperties structures.
-
-If pname:pProperties is `NULL`, then the number of layer properties
-available is returned in pname:pPropertyCount.
-Otherwise, pname:pPropertyCount must: point to a variable set by the user to
-the number of elements in the pname:pProperties array, and on return the
-variable is overwritten with the number of structures actually written to
-pname:pProperties.
-If pname:pPropertyCount is less than the number of layer properties
-available, at most pname:pPropertyCount structures will be written, and
-ename:VK_INCOMPLETE will be returned instead of ename:VK_SUCCESS, to
-indicate that not all the available properties were returned.
-
-The list of available layers may change at any time due to actions outside
-of the Vulkan implementation, so two calls to
-fname:vkEnumerateInstanceLayerProperties with the same parameters may:
-return different results, or retrieve different pname:pPropertyCount values
-or pname:pProperties contents.
-Once an instance has been created, the layers enabled for that instance will
-continue to be enabled and valid for the lifetime of that instance, even if
-some of them become unavailable for future instances.
-
-include::{generated}/validity/protos/vkEnumerateInstanceLayerProperties.txt[]
---
-
-[open,refpage='VkLayerProperties',desc='Structure specifying layer properties',type='structs']
---
-The sname:VkLayerProperties structure is defined as:
-
-include::{generated}/api/structs/VkLayerProperties.txt[]
-
-  * pname:layerName is an array of ename:VK_MAX_EXTENSION_NAME_SIZE
-    code:char containing a null-terminated UTF-8 string which is the name of
-    the layer.
-    Use this name in the pname:ppEnabledLayerNames array passed in the
-    slink:VkInstanceCreateInfo structure to enable this layer for an
-    instance.
-  * pname:specVersion is the Vulkan version the layer was written to,
-    encoded as described in <<extendingvulkan-coreversions-versionnumbers>>.
-  * pname:implementationVersion is the version of this layer.
-    It is an integer, increasing with backward compatible changes.
-  * pname:description is an array of ename:VK_MAX_DESCRIPTION_SIZE code:char
-    containing a null-terminated UTF-8 string which provides additional
-    details that can: be used by the application to identify the layer.
-
-include::{generated}/validity/structs/VkLayerProperties.txt[]
---
-
-[open,refpage='VK_MAX_EXTENSION_NAME_SIZE',desc='Maximum length of a layer of extension name string',type='consts']
---
-ename:VK_MAX_EXTENSION_NAME_SIZE is the length in code:char values of an
-array containing a layer or extension name string, as returned in
-slink:VkLayerProperties::layerName,
-slink:VkExtensionProperties::extensionName, and other queries.
-
-include::{generated}/api/enums/VK_MAX_EXTENSION_NAME_SIZE.txt[]
---
-
-[open,refpage='VK_MAX_DESCRIPTION_SIZE',desc='Length of a driver name string',type='consts']
---
-ename:VK_MAX_DESCRIPTION_SIZE is the length in code:char values of an array
-containing a string with additional descriptive information about a query,
-as returned in slink:VkLayerProperties::description and other queries.
-
-include::{generated}/api/enums/VK_MAX_DESCRIPTION_SIZE.txt[]
---
-
-To enable a layer, the name of the layer should: be added to the
-pname:ppEnabledLayerNames member of slink:VkInstanceCreateInfo when creating
-a sname:VkInstance.
-
-Loader implementations may: provide mechanisms outside the Vulkan API for
-enabling specific layers.
-Layers enabled through such a mechanism are _implicitly enabled_, while
-layers enabled by including the layer name in the pname:ppEnabledLayerNames
-member of slink:VkInstanceCreateInfo are _explicitly enabled_.
-Implicitly enabled layers are loaded before explicitly enabled layers, such
-that implicitly enabled layers are closer to the application, and explicitly
-enabled layers are closer to the driver.
-Except where otherwise specified, implicitly enabled and explicitly enabled
-layers differ only in the way they are enabled, and the order in which they
-are loaded.
-Explicitly enabling a layer that is implicitly enabled results in this layer
-being loaded as an implicitly enabled layer; it has no additional effect.
-
-
-[[extendingvulkan-layers-devicelayerdeprecation]]
-=== Device Layer Deprecation
-
-Previous versions of this specification distinguished between instance and
-device layers.
-Instance layers were only able to intercept commands that operate on
-sname:VkInstance and sname:VkPhysicalDevice, except they were not able to
-intercept flink:vkCreateDevice.
-Device layers were enabled for individual devices when they were created,
-and could only intercept commands operating on that device or its child
-objects.
-
-Device-only layers are now deprecated, and this specification no longer
-distinguishes between instance and device layers.
-Layers are enabled during instance creation, and are able to intercept all
-commands operating on that instance or any of its child objects.
-At the time of deprecation there were no known device-only layers and no
-compelling reason to create one.
-
-In order to maintain compatibility with implementations released prior to
-device-layer deprecation, applications should: still enumerate and enable
-device layers.
-The behavior of fname:vkEnumerateDeviceLayerProperties and valid usage of
-the pname:ppEnabledLayerNames member of slink:VkDeviceCreateInfo maximizes
-compatibility with applications written to work with the previous
-requirements.
-
-[open,refpage='vkEnumerateDeviceLayerProperties',desc='Returns properties of available physical device layers',type='protos']
---
-To enumerate device layers, call:
-
-include::{generated}/api/protos/vkEnumerateDeviceLayerProperties.txt[]
-
-  * pname:pPropertyCount is a pointer to an integer related to the number of
-    layer properties available or queried.
-  * pname:pProperties is either `NULL` or a pointer to an array of
-    slink:VkLayerProperties structures.
-
-If pname:pProperties is `NULL`, then the number of layer properties
-available is returned in pname:pPropertyCount.
-Otherwise, pname:pPropertyCount must: point to a variable set by the user to
-the number of elements in the pname:pProperties array, and on return the
-variable is overwritten with the number of structures actually written to
-pname:pProperties.
-If pname:pPropertyCount is less than the number of layer properties
-available, at most pname:pPropertyCount structures will be written, and
-ename:VK_INCOMPLETE will be returned instead of ename:VK_SUCCESS, to
-indicate that not all the available properties were returned.
-
-The list of layers enumerated by fname:vkEnumerateDeviceLayerProperties
-must: be exactly the sequence of layers enabled for the instance.
-The members of sname:VkLayerProperties for each enumerated layer must: be
-the same as the properties when the layer was enumerated by
-fname:vkEnumerateInstanceLayerProperties.
-
-include::{generated}/validity/protos/vkEnumerateDeviceLayerProperties.txt[]
---
-
-The pname:ppEnabledLayerNames and pname:enabledLayerCount members of
-slink:VkDeviceCreateInfo are deprecated and their values must: be ignored by
-implementations.
-However, for compatibility, only an empty list of layers or a list that
-exactly matches the sequence enabled at instance creation time are valid,
-and validation layers should: issue diagnostics for other cases.
-
-Regardless of the enabled layer list provided in slink:VkDeviceCreateInfo,
-the sequence of layers active for a device will be exactly the sequence of
-layers enabled when the parent instance was created.
-
-
-[[extendingvulkan-extensions]]
-== Extensions
-
-Extensions may: define new Vulkan commands, structures, and enumerants.
-For compilation purposes, the interfaces defined by registered extensions,
-including new structures and enumerants as well as function pointer types
-for new commands, are defined in the Khronos-supplied `{core_header}`
-together with the core API.
-However, commands defined by extensions may: not be available for static
-linking - in which case function pointers to these commands should: be
-queried at runtime as described in <<initialization-functionpointers>>.
-Extensions may: be provided by layers as well as by a Vulkan implementation.
-
-Because extensions may: extend or change the behavior of the Vulkan API,
-extension authors should: add support for their extensions to the Khronos
-validation layers.
-This is especially important for new commands whose parameters have been
-wrapped by the validation layers.
-See the <<LoaderInterfaceArchitecture, "`Architecture of the Vulkan Loader
-Interfaces`">> document for additional information.
-
-[NOTE]
-.Note
-====
-To enable an instance extension, the name of the extension can: be added to
-the pname:ppEnabledExtensionNames member of slink:VkInstanceCreateInfo when
-creating a sname:VkInstance.
-
-To enable a device extension, the name of the extension can: be added to the
-pname:ppEnabledExtensionNames member of slink:VkDeviceCreateInfo when
-creating a sname:VkDevice.
-
-ifdef::VK_VERSION_1_1,VK_KHR_get_physical_device_properties2[]
-Physical-Device-Level functionality does not have any enabling mechanism and
-can: be used as long as the slink:VkPhysicalDevice supports the device
-extension as determined by flink:vkEnumerateDeviceExtensionProperties.
-endif::VK_VERSION_1_1,VK_KHR_get_physical_device_properties2[]
-
-Enabling an extension (with no further use of that extension) does not
-change the behavior of functionality exposed by the core Vulkan API or any
-other extension, other than making valid the use of the commands, enums and
-structures defined by that extension.
-
-Valid Usage sections for individual commands and structures do not currently
-contain which extensions have to be enabled in order to make their use
-valid, although they might do so in the future.
-It is defined only in the <<fundamentals-validusage-extensions>> section.
-====
-
-
-=== Instance Extensions
-
-Instance extensions add new
-<<extendingvulkan-instanceanddevicefunctionality,instance-level
-functionality>> to the API, outside of the core specification.
-
-[open,refpage='vkEnumerateInstanceExtensionProperties',desc='Returns up to requested number of global extension properties',type='protos']
---
-To query the available instance extensions, call:
-
-include::{generated}/api/protos/vkEnumerateInstanceExtensionProperties.txt[]
-
-  * pname:pLayerName is either `NULL` or a pointer to a null-terminated
-    UTF-8 string naming the layer to retrieve extensions from.
-  * pname:pPropertyCount is a pointer to an integer related to the number of
-    extension properties available or queried, as described below.
-  * pname:pProperties is either `NULL` or a pointer to an array of
-    slink:VkExtensionProperties structures.
-
-When pname:pLayerName parameter is `NULL`, only extensions provided by the
-Vulkan implementation or by implicitly enabled layers are returned.
-When pname:pLayerName is the name of a layer, the instance extensions
-provided by that layer are returned.
-
-If pname:pProperties is `NULL`, then the number of extensions properties
-available is returned in pname:pPropertyCount.
-Otherwise, pname:pPropertyCount must: point to a variable set by the user to
-the number of elements in the pname:pProperties array, and on return the
-variable is overwritten with the number of structures actually written to
-pname:pProperties.
-If pname:pPropertyCount is less than the number of extension properties
-available, at most pname:pPropertyCount structures will be written, and
-ename:VK_INCOMPLETE will be returned instead of ename:VK_SUCCESS, to
-indicate that not all the available properties were returned.
-
-Because the list of available layers may change externally between calls to
-flink:vkEnumerateInstanceExtensionProperties, two calls may retrieve
-different results if a pname:pLayerName is available in one call but not in
-another.
-The extensions supported by a layer may also change between two calls, e.g.
-if the layer implementation is replaced by a different version between those
-calls.
-
-Implementations must: not advertise any pair of extensions that cannot be
-enabled together due to behavioral differences, or any extension that cannot
-be enabled against the advertised version.
-
-include::{generated}/validity/protos/vkEnumerateInstanceExtensionProperties.txt[]
---
-
-
-=== Device Extensions
-
-Device extensions add new
-<<extendingvulkan-instanceanddevicefunctionality,device-level
-functionality>> to the API, outside of the core specification.
-
-[open,refpage='vkEnumerateDeviceExtensionProperties',desc='Returns properties of available physical device extensions',type='protos']
---
-To query the extensions available to a given physical device, call:
-
-include::{generated}/api/protos/vkEnumerateDeviceExtensionProperties.txt[]
-
-  * pname:physicalDevice is the physical device that will be queried.
-  * pname:pLayerName is either `NULL` or a pointer to a null-terminated
-    UTF-8 string naming the layer to retrieve extensions from.
-  * pname:pPropertyCount is a pointer to an integer related to the number of
-    extension properties available or queried, and is treated in the same
-    fashion as the
-    flink:vkEnumerateInstanceExtensionProperties::pname:pPropertyCount
-    parameter.
-  * pname:pProperties is either `NULL` or a pointer to an array of
-    slink:VkExtensionProperties structures.
-
-When pname:pLayerName parameter is `NULL`, only extensions provided by the
-Vulkan implementation or by implicitly enabled layers are returned.
-When pname:pLayerName is the name of a layer, the device extensions provided
-by that layer are returned.
-
-Implementations must: not advertise any pair of extensions that cannot be
-enabled together due to behavioral differences, or any extension that cannot
-be enabled against the advertised version.
-
-include::{generated}/validity/protos/vkEnumerateDeviceExtensionProperties.txt[]
---
-
-[open,refpage='VkExtensionProperties',desc='Structure specifying an extension properties',type='structs']
---
-The sname:VkExtensionProperties structure is defined as:
-
-include::{generated}/api/structs/VkExtensionProperties.txt[]
-
-  * pname:extensionName is an array of ename:VK_MAX_EXTENSION_NAME_SIZE
-    code:char containing a null-terminated UTF-8 string which is the name of
-    the extension.
-  * pname:specVersion is the version of this extension.
-    It is an integer, incremented with backward compatible changes.
-
-include::{generated}/validity/structs/VkExtensionProperties.txt[]
---
-
-
-[[extendingvulkan-extensions-extensiondependencies]]
-== Extension Dependencies
-
-Some extensions are dependent on other extensions, or on specific core API
-versions, to function.
-To enable extensions with dependencies, any _required extensions_ must: also
-be enabled through the same API mechanisms when creating an instance with
-flink:vkCreateInstance or a device with flink:vkCreateDevice.
-Each extension which has such dependencies documents them in the
-<<extensions, appendix summarizing that extension>>.
-
-If an extension is supported (as queried by
-flink:vkEnumerateInstanceExtensionProperties or
-flink:vkEnumerateDeviceExtensionProperties), then _required extensions_ of
-that extension must: also be supported for the same instance or physical
-device.
-
-Any device extension that has an instance extension dependency that is not
-enabled by flink:vkCreateInstance is considered to be unsupported, hence it
-must: not be returned by flink:vkEnumerateDeviceExtensionProperties for any
-slink:VkPhysicalDevice child of the instance.
-Instance extensions do not have dependencies on device extensions.
-
-If a required extension has been <<extendingvulkan-compatibility-promotion,
-promoted>> to another extension or to a core API version, then as a
-_general_ rule, the dependency is also satisfied by the promoted extension
-or core version.
-This will be true so long as any features required by the original extension
-are also required or enabled by the promoted extension or core version.
-However, in some cases an extension is promoted while making some of its
-features optional in the promoted extension or core version.
-In this case, the dependency may: not be satisfied.
-The only way to be certain is to look at the descriptions of the original
-dependency and the promoted version in the <<extensions, Layers &
-Extensions>> and <<versions, Core Revisions>> appendices.
-
-[NOTE]
-.Note
-====
-There is metadata in `vk.xml` describing some aspects of promotion,
-especially `requires`, `promotedto` and `deprecatedby` attributes of
-`<extension>` tags.
-However, the metadata does not yet fully describe this scenario.
-In the future, we may extend the XML schema to describe the full set of
-extensions and versions satisfying a dependency.
-====
-
-
-== Compatibility Guarantees (Informative)
-
-This section is marked as informal as there is no binding responsibility on
-implementations of the Vulkan API - these guarantees are however a contract
-between the Vulkan Working Group and developers using this Specification.
-
-
-[[extendingvulkan-compatibility-coreversions]]
-=== Core Versions
-
-Each of the <<extendingvulkan-coreversions,major, minor, and patch
-versions>> of the Vulkan specification provide different compatibility
-guarantees.
-
-
-==== Patch Versions
-
-A difference in the patch version indicates that a set of bug fixes or
-clarifications have been made to the Specification.
-Informative enums returned by Vulkan commands that will not affect the
-runtime behavior of a valid application may be added in a patch version
-(e.g. elink:VkVendorId).
-
-The specification's patch version is strictly increasing for a given major
-version of the specification; any change to a specification as described
-above will result in the patch version being increased by 1.
-Patch versions are applied to all minor versions, even if a given minor
-version is not affected by the provoking change.
-
-Specifications with different patch versions but the same major and minor
-version are _fully compatible_ with each other - such that a valid
-application written against one will work with an implementation of another.
-
-[NOTE]
-.Note
-====
-If a patch version includes a bug fix or clarification that could have a
-significant impact on developer expectations, these will be highlighted in
-the change log.
-Generally the Vulkan Working Group tries to avoid these kinds of changes,
-instead fixing them in either an extension or core version.
-====
-
-
-==== Minor Versions
-
-Changes in the minor version of the specification indicate that new
-functionality has been added to the core specification.
-This will usually include new interfaces in the header, and may: also
-include behavior changes and bug fixes.
-Core functionality may: be deprecated in a minor version, but will not be
-obsoleted or removed.
-
-The specification's minor version is strictly increasing for a given major
-version of the specification; any change to a specification as described
-above will result in the minor version being increased by 1.
-Changes that can be accommodated in a patch version will not increase the
-minor version.
-
-Specifications with a lower minor version are _backwards compatible_ with an
-implementation of a specification with a higher minor version for core
-functionality and extensions issued with the KHR vendor tag.
-Vendor and multi-vendor extensions are not guaranteed to remain functional
-across minor versions, though in general they are with few exceptions - see
-<<extendingvulkan-compatibility-obsoletion>> for more information.
-
-
-==== Major Versions
-
-A difference in the major version of specifications indicates a large set of
-changes which will likely include interface changes, behavioral changes,
-removal of <<extendingvulkan-compatibility-deprecation,deprecated
-functionality>>, and the modification, addition, or replacement of other
-functionality.
-
-The specification's major version is monotonically increasing; any change to
-the specification as described above will result in the major version being
-increased.
-Changes that can be accommodated in a patch or minor version will not
-increase the major version.
-
-The Vulkan Working Group intends to only issue a new major version of the
-Specification in order to realise significant improvements to the Vulkan API
-that will necessarily require breaking compatibility.
-
-A new major version will likely include a wholly new version of the
-specification to be issued - which could include an overhaul of the
-versioning semantics for the minor and patch versions.
-The patch and minor versions of a specification are therefore not meaningful
-across major versions.
-If a major version of the specification includes similar versioning
-semantics, it is expected that the patch and the minor version will be reset
-to 0 for that major version.
-
-
-[[extendingvulkan-compatibility-extensions]]
-=== Extensions
-
-A KHR extension must: be able to be enabled alongside any other KHR
-extension, and for any minor or patch version of the core Specification
-beyond the minimum version it requires.
-A multi-vendor extension should: be able to be enabled alongside any KHR
-extension or other multi-vendor extension, and for any minor or patch
-version of the core Specification beyond the minimum version it requires.
-A vendor extension should: be able to be enabled alongside any KHR
-extension, multi-vendor extension, or other vendor extension from the same
-vendor, and for any minor or patch version of the core Specification beyond
-the minimum version it requires.
-A vendor extension may: be able to be enabled alongside vendor extensions
-from another vendor.
-
-The one other exception to this is if a vendor or multi-vendor extension is
-<<extendingvulkan-compatibility-obsoletion, made obsolete>> by either a core
-version or another extension, which will be highlighted in the
-<<extensions,extension appendix>>.
-
-
-[[extendingvulkan-compatibility-promotion]]
-==== Promotion
-
-Extensions, or features of an extension, may: be promoted to a new
-<<versions,core version of the API>>, or a newer extension which an equal or
-greater number of implementors are in favour of.
-
-When extension functionality is promoted, minor changes may: be introduced,
-limited to the following:
-
-  * Naming
-  * Non-intrusive parameters changes
-  * <<features,Feature advertisement/enablement>>
-  * Combining structure parameters into larger structures
-  * Author ID suffixes changed or removed
-
-[NOTE]
-.Note
-====
-If extension functionality is promoted, there is no guarantee of direct
-compatibility, however it should require little effort to port code from the
-original feature to the promoted one.
-
-The Vulkan Working Group endeavours to ensure that larger changes are marked
-as either <<extendingvulkan-compatibility-deprecation, deprecated>> or
-<<extendingvulkan-compatibility-obsoletion, obsoleted>> as appropriate, and
-can do so retroactively if necessary.
-====
-
-Extensions that are promoted are listed as being promoted in their extension
-appendices, with reference to where they were promoted to.
-
-When an extension is promoted, any backwards compatibility aliases which
-exist in the extension will *not* be promoted.
-
-[NOTE]
-.Note
-====
-As a hypothetical example, if the `apiext:VK_KHR_surface` extension were
-promoted to part of a future core version, the
-ename:VK_COLOR_SPACE_SRGB_NONLINEAR_KHR token defined by that extension
-would be promoted to etext:VK_COLOR_SPACE_SRGB_NONLINEAR.
-However, the ename:VK_COLORSPACE_SRGB_NONLINEAR_KHR token aliases
-ename:VK_COLOR_SPACE_SRGB_NONLINEAR_KHR.
-The ename:VK_COLORSPACE_SRGB_NONLINEAR_KHR would not be promoted, because it
-is a backwards compatibility alias that exists only due to a naming mistake
-when the extension was initially published.
-====
-
-
-[[extendingvulkan-compatibility-deprecation]]
-==== Deprecation
-
-Extensions may: be marked as deprecated when the intended use cases either
-become irrelevant or can be solved in other ways.
-Generally, a new feature will become available to solve the use case in
-another extension or core version of the API, but it is not guaranteed.
-
-[NOTE]
-.Note
-====
-Features that are intended to replace deprecated functionality have no
-guarantees of compatibility, and applications may require drastic
-modification in order to make use of the new features.
-====
-
-Extensions that are deprecated are listed as being deprecated in their
-extension appendices, with an explanation of the deprecation and any
-features that are relevant.
-
-
-[[extendingvulkan-compatibility-obsoletion]]
-==== Obsoletion
-
-Occasionally, an extension will be marked as obsolete if a new version of
-the core API or a new extension is fundamentally incompatible with it.
-An obsoleted extension must: not be used with the extension or core version
-that obsoleted it.
-
-Extensions that are obsoleted are listed as being obsoleted in their
-extension appendices, with reference to what they were obsoleted by.
-
-
-[[extendingvulkan-compatibility-aliases]]
-==== Aliases
-
-When an extension is promoted or deprecated by a newer feature, some or all
-of its functionality may: be replicated into the newer feature.
-Rather than duplication of all the documentation and definitions, the
-specification instead identifies the identical commands and types as
-_aliases_ of one another.
-Each alias is mentioned together with the definition it aliases, with the
-older aliases marked as "`equivalents`".
-Each alias of the same command has identical behavior, and each alias of the
-same type has identical meaning - they can be used interchangeably in an
-application with no compatibility issues.
-
-[NOTE]
-.Note
-====
-For promoted types, the aliased extension type is semantically identical to
-the new core type.
-The C99 headers simply `typedef` the older aliases to the promoted types.
-
-For promoted command aliases, however, there are two separate entry point
-definitions, due to the fact that the C99 ABI has no way to alias command
-definitions without resorting to macros.
-Calling via either entry point definition will produce identical behavior
-within the bounds of the specification, and should still invoke the same
-entry point in the implementation.
-Debug tools may use separate entry points with different debug behavior; to
-write the appropriate command name to an output log, for instance.
-====
-
-
-[[extendingvulkan-compatibility-specialuse]]
-==== Special Use Extensions
-
-Some extensions exist only to support a specific purpose or specific class
-of application.
-These are referred to as "`special use extensions`".
-Use of these extensions in applications not meeting the special use criteria
-is not recommended.
-
-Special use cases are restricted, and only those defined below are used to
-describe extensions:
-
-// The attributes in the "Special Use" column are defined in
-// config/attribs.txt, and used in reference pages as well as here.
-// They define human-readable names for corresponding XML attribute values,
-// so specialuse="cadsupport" -> "CAD Support". They are used in the table
-// here and in the ExtensionMetaDocGenerator script that produces metadata
-// includes for extension appendices. When introducing a new special use,
-// the attribute and the table must both be extended.
-
-[[extendingvulkan-specialuse-table]]
-.Extension Special Use Cases
-[width="100%",options="header",cols="25%,15%,60%"]
-|====
-| Special Use    | XML Tag      | Full Description
-| {cadsupport}   | cadsupport
-    | Extension is intended to support specialized functionality used by
-      CAD/CAM applications.
-| {d3demulation} | d3demulation
-    | Extension is intended to support D3D emulation layers, and
-      applications ported from D3D, by adding functionality specific to D3D.
-| {devtools}     | devtools
-    | Extension is intended to support developer tools such as
-      capture-replay libraries.
-| {debugging}    | debugging
-    | Extension is intended for use by applications when debugging.
-| {glemulation}  | glemulation
-    | Extension is intended to support OpenGL and/or OpenGL ES emulation
-      layers, and applications ported from those APIs, by adding
-      functionality specific to those APIs.
-|====
-
-Special use extensions are identified in the metadata for each such
-extension in the <<extensions, Layers & Extensions>> appendix, using the
-name in the "`Special Use`" column above.
-
-Special use extensions are also identified in `vk.xml` with the short name
-in "`XML Tag`" column above, as described in the "`API Extensions
-(`extension` tag)`" section of the <<vulkan-registry, registry schema
-documentation>>.
-
diff --git a/registry/vulkan/chapters/features.txt b/registry/vulkan/chapters/features.txt
deleted file mode 100755
index 096264d..0000000
--- a/registry/vulkan/chapters/features.txt
+++ /dev/null
@@ -1,5061 +0,0 @@
-// Copyright 2015-2021 The Khronos Group, Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-// This text fragment is used many times in the Features chapter.
-ifdef::hidden[]
-// tag::features[]
-If the sname:{refpage} structure is included in the pname:pNext chain of the
-slink:VkPhysicalDeviceFeatures2 structure passed to
-flink:vkGetPhysicalDeviceFeatures2, it is filled in to indicate whether each
-corresponding feature is supported.
-sname:{refpage} can: also be used in the pname:pNext chain of
-slink:VkDeviceCreateInfo to selectively enable these features.
-// end::features[]
-endif::hidden[]
-
-
-[[features]]
-= Features
-
-_Features_ describe functionality which is not supported on all
-implementations.
-Features are properties of the physical device.
-Features are optional:, and must: be explicitly enabled before use.
-Support for features is reported and enabled on a per-feature basis.
-
-ifdef::VK_VERSION_1_1,VK_KHR_get_physical_device_properties2[]
-[NOTE]
-.Note
-====
-Features are reported via the basic slink:VkPhysicalDeviceFeatures
-structure, as well as the extensible structure
-sname:VkPhysicalDeviceFeatures2, which was added in the
-`apiext:VK_KHR_get_physical_device_properties2` extension and included in
-Vulkan 1.1.
-When new features are added in future Vulkan versions or extensions, each
-extension should: introduce one new feature structure, if needed.
-This structure can: be added to the pname:pNext chain of the
-sname:VkPhysicalDeviceFeatures2 structure.
-====
-endif::VK_VERSION_1_1,VK_KHR_get_physical_device_properties2[]
-
-For convenience, new core versions of Vulkan may: introduce new unified
-feature structures for features promoted from extensions.
-At the same time, the extension's original feature structure (if any) is
-also promoted to the core API, and is an alias of the extension's structure.
-This results in multiple names for the same feature: in the original
-extension's feature structure and the promoted structure alias, in the
-unified feature structure.
-When a feature was implicitly supported and enabled in the extension, but an
-explicit name was added during promotion, then the extension itself acts as
-an alias for the feature as listed in the table below.
-
-All aliases of the same feature in the core API must: be reported
-consistently: either all must: be reported as supported, or none of them.
-When a promoted extension is available, any corresponding feature aliases
-must: be supported.
-
-[[features-extension-aliases]]
-.Extension Feature Aliases
-
-[width="100%",options="header"]
-|====
-| Extension                                 | Feature(s)
-ifdef::VK_VERSION_1_2[]
-ifdef::VK_KHR_shader_draw_parameters[]
-| `apiext:VK_KHR_shader_draw_parameters`       | <<features-shaderDrawParameters,pname:shaderDrawParameters>>
-endif::VK_KHR_shader_draw_parameters[]
-ifdef::VK_KHR_draw_indirect_count[]
-| `apiext:VK_KHR_draw_indirect_count`          | <<features-drawIndirectCount,pname:drawIndirectCount>>
-endif::VK_KHR_draw_indirect_count[]
-ifdef::VK_KHR_sampler_mirror_clamp_to_edge[]
-| `apiext:VK_KHR_sampler_mirror_clamp_to_edge` | <<features-samplerMirrorClampToEdge,pname:samplerMirrorClampToEdge>>
-endif::VK_KHR_sampler_mirror_clamp_to_edge[]
-ifdef::VK_EXT_descriptor_indexing[]
-| `apiext:VK_EXT_descriptor_indexing`          | <<features-descriptorIndexing,pname:descriptorIndexing>>
-endif::VK_EXT_descriptor_indexing[]
-ifdef::VK_EXT_sampler_filter_minmax[]
-| `apiext:VK_EXT_sampler_filter_minmax`        | <<features-samplerFilterMinmax,pname:samplerFilterMinmax>>
-endif::VK_EXT_sampler_filter_minmax[]
-ifdef::VK_EXT_shader_viewport_index_layer[]
-| `apiext:VK_EXT_shader_viewport_index_layer`  | <<features-shaderOutputViewportIndex,pname:shaderOutputViewportIndex>>, <<features-shaderOutputLayer,pname:shaderOutputLayer>>
-endif::VK_EXT_shader_viewport_index_layer[]
-endif::VK_VERSION_1_2[]
-|====
-
-[open,refpage='vkGetPhysicalDeviceFeatures',desc='Reports capabilities of a physical device',type='protos']
---
-To query supported features, call:
-
-include::{generated}/api/protos/vkGetPhysicalDeviceFeatures.txt[]
-
-  * pname:physicalDevice is the physical device from which to query the
-    supported features.
-  * pname:pFeatures is a pointer to a slink:VkPhysicalDeviceFeatures
-    structure in which the physical device features are returned.
-    For each feature, a value of ename:VK_TRUE specifies that the feature is
-    supported on this physical device, and ename:VK_FALSE specifies that the
-    feature is not supported.
-
-include::{generated}/validity/protos/vkGetPhysicalDeviceFeatures.txt[]
---
-
-Fine-grained features used by a logical device must: be enabled at
-sname:VkDevice creation time.
-If a feature is enabled that the physical device does not support,
-sname:VkDevice creation will fail and return
-ename:VK_ERROR_FEATURE_NOT_PRESENT.
-
-The fine-grained features are enabled by passing a pointer to the
-sname:VkPhysicalDeviceFeatures structure via the pname:pEnabledFeatures
-member of the slink:VkDeviceCreateInfo structure that is passed into the
-fname:vkCreateDevice call.
-If a member of pname:pEnabledFeatures is set to ename:VK_TRUE or
-ename:VK_FALSE, then the device will be created with the indicated feature
-enabled or disabled, respectively.
-ifdef::VK_VERSION_1_1,VK_KHR_get_physical_device_properties2[]
-Features can: also be enabled by using the slink:VkPhysicalDeviceFeatures2
-structure.
-endif::VK_VERSION_1_1,VK_KHR_get_physical_device_properties2[]
-
-If an application wishes to enable all features supported by a device, it
-can: simply pass in the sname:VkPhysicalDeviceFeatures structure that was
-previously returned by fname:vkGetPhysicalDeviceFeatures.
-To disable an individual feature, the application can: set the desired
-member to ename:VK_FALSE in the same structure.
-Setting pname:pEnabledFeatures to `NULL`
-ifdef::VK_VERSION_1_1,VK_KHR_get_physical_device_properties2[]
-and not including a slink:VkPhysicalDeviceFeatures2 in the pname:pNext chain
-of slink:VkDeviceCreateInfo
-endif::VK_VERSION_1_1,VK_KHR_get_physical_device_properties2[]
-is equivalent to setting all members of the structure to ename:VK_FALSE.
-
-[NOTE]
-.Note
-====
-Some features, such as pname:robustBufferAccess, may: incur a runtime
-performance cost.
-Application writers should: carefully consider the implications of enabling
-all supported features.
-====
-
-ifdef::VK_VERSION_1_1,VK_KHR_get_physical_device_properties2[]
-[open,refpage='vkGetPhysicalDeviceFeatures2',desc='Reports capabilities of a physical device',type='protos']
---
-To query supported features defined by the core or extensions, call:
-
-ifdef::VK_VERSION_1_1[]
-include::{generated}/api/protos/vkGetPhysicalDeviceFeatures2.txt[]
-endif::VK_VERSION_1_1[]
-
-ifdef::VK_VERSION_1_1+VK_KHR_get_physical_device_properties2[or the equivalent command]
-
-ifdef::VK_KHR_get_physical_device_properties2[]
-include::{generated}/api/protos/vkGetPhysicalDeviceFeatures2KHR.txt[]
-endif::VK_KHR_get_physical_device_properties2[]
-
-  * pname:physicalDevice is the physical device from which to query the
-    supported features.
-  * pname:pFeatures is a pointer to a slink:VkPhysicalDeviceFeatures2
-    structure in which the physical device features are returned.
-
-Each structure in pname:pFeatures and its pname:pNext chain contains members
-corresponding to fine-grained features.
-fname:vkGetPhysicalDeviceFeatures2 writes each member to a boolean value
-indicating whether that feature is supported.
-
-include::{generated}/validity/protos/vkGetPhysicalDeviceFeatures2.txt[]
---
-
-[open,refpage='VkPhysicalDeviceFeatures2',desc='Structure describing the fine-grained features that can be supported by an implementation',type='structs']
---
-The sname:VkPhysicalDeviceFeatures2 structure is defined as:
-
-include::{generated}/api/structs/VkPhysicalDeviceFeatures2.txt[]
-
-ifdef::VK_KHR_get_physical_device_properties2[]
-or the equivalent
-
-include::{generated}/api/structs/VkPhysicalDeviceFeatures2KHR.txt[]
-endif::VK_KHR_get_physical_device_properties2[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:features is a slink:VkPhysicalDeviceFeatures structure describing
-    the fine-grained features of the Vulkan 1.0 API.
-
-The pname:pNext chain of this structure is used to extend the structure with
-features defined by extensions.
-This structure can: be used in flink:vkGetPhysicalDeviceFeatures2 or can: be
-included in the pname:pNext chain of a slink:VkDeviceCreateInfo structure,
-in which case it controls which features are enabled in the device in lieu
-of pname:pEnabledFeatures.
-
-include::{generated}/validity/structs/VkPhysicalDeviceFeatures2.txt[]
---
-endif::VK_VERSION_1_1,VK_KHR_get_physical_device_properties2[]
-
-[open,refpage='VkPhysicalDeviceFeatures',desc='Structure describing the fine-grained features that can be supported by an implementation',type='structs']
---
-The sname:VkPhysicalDeviceFeatures structure is defined as:
-
-include::{generated}/api/structs/VkPhysicalDeviceFeatures.txt[]
-
-This structure describes the following features:
-
-  * [[features-robustBufferAccess]] pname:robustBufferAccess specifies that
-    accesses to buffers are bounds-checked against the range of the buffer
-    descriptor (as determined by sname:VkDescriptorBufferInfo::pname:range,
-    slink:VkBufferViewCreateInfo::pname:range, or the size of the buffer).
-    Out of bounds accesses must: not cause application termination, and the
-    effects of shader loads, stores, and atomics must: conform to an
-    implementation-dependent behavior as described below.
-  ** A buffer access is considered to be out of bounds if any of the
-     following are true:
-  *** The pointer was formed by code:OpImageTexelPointer and the coordinate
-      is less than zero or greater than or equal to the number of whole
-      elements in the bound range.
-  *** The pointer was not formed by code:OpImageTexelPointer and the object
-      pointed to is not wholly contained within the bound range.
-ifdef::VK_VERSION_1_1,VK_KHR_variable_pointers[]
-      This includes accesses performed via _variable pointers_ where the
-      buffer descriptor being accessed cannot be statically determined.
-      Uninitialized pointers and pointers equal to code:OpConstantNull are
-      treated as pointing to a zero-sized object, so all accesses through
-      such pointers are considered to be out of bounds.
-endif::VK_VERSION_1_1,VK_KHR_variable_pointers[]
-ifdef::VK_VERSION_1_2,VK_EXT_buffer_device_address,VK_KHR_buffer_device_address[]
-      Buffer accesses through buffer device addresses are not
-      bounds-checked.
-endif::VK_VERSION_1_2,VK_EXT_buffer_device_address,VK_KHR_buffer_device_address[]
-ifdef::VK_NV_cooperative_matrix[]
-      If the
-      <<features-cooperativeMatrixRobustBufferAccess,pname:cooperativeMatrixRobustBufferAccess>>
-      feature is not enabled, then accesses using
-      code:OpCooperativeMatrixLoadNV and code:OpCooperativeMatrixStoreNV
-      may: not be bounds-checked.
-endif::VK_NV_cooperative_matrix[]
-+
-[NOTE]
-.Note
-====
-If a SPIR-V code:OpLoad instruction loads a structure and the tail end of
-the structure is out of bounds, then all members of the structure are
-considered out of bounds even if the members at the end are not statically
-used.
-====
-
-  *** If
-ifdef::VK_EXT_robustness2[]
-      <<features-robustBufferAccess2,pname:robustBufferAccess2>> is not
-      enabled and
-endif::VK_EXT_robustness2[]
-      any buffer access is determined to be out of bounds, then any other
-      access of the same type (load, store, or atomic) to the same buffer
-      that accesses an address less than 16 bytes away from the out of
-      bounds address may: also be considered out of bounds.
-  *** If the access is a load that reads from the same memory locations as a
-      prior store in the same shader invocation, with no other intervening
-      accesses to the same memory locations in that shader invocation, then
-      the result of the load may: be the value stored by the store
-      instruction, even if the access is out of bounds.
-      If the load is code:Volatile, then an out of bounds load must: return
-      the appropriate out of bounds value.
-ifdef::VK_EXT_robustness2[]
-  ** Accesses to descriptors written with a dlink:VK_NULL_HANDLE resource or
-     view are not considered to be out of bounds.
-     Instead, each type of descriptor access defines a specific behavior for
-     accesses to a null descriptor.
-endif::VK_EXT_robustness2[]
-  ** Out-of-bounds buffer loads will return any of the following values:
-ifdef::VK_EXT_robustness2[]
-  *** If the access is to a uniform buffer and
-      <<features-robustBufferAccess2,pname:robustBufferAccess2>> is enabled,
-      loads of offsets between the end of the descriptor range and the end
-      of the descriptor range rounded up to a multiple of
-      <<limits-robustUniformBufferAccessSizeAlignment,robustUniformBufferAccessSizeAlignment>>
-      bytes must: return either zero values or the contents of the memory at
-      the offset being loaded.
-      Loads of offsets past the descriptor range rounded up to a multiple of
-      <<limits-robustUniformBufferAccessSizeAlignment,robustUniformBufferAccessSizeAlignment>>
-      bytes must: return zero values.
-  *** If the access is to a storage buffer and
-      <<features-robustBufferAccess2,pname:robustBufferAccess2>> is enabled,
-      loads of offsets between the end of the descriptor range and the end
-      of the descriptor range rounded up to a multiple of
-      <<limits-robustStorageBufferAccessSizeAlignment,robustStorageBufferAccessSizeAlignment>>
-      bytes must: return either zero values or the contents of the memory at
-      the offset being loaded.
-      Loads of offsets past the descriptor range rounded up to a multiple of
-      <<limits-robustStorageBufferAccessSizeAlignment,robustStorageBufferAccessSizeAlignment>>
-      bytes must: return zero values.
-      Similarly, stores to addresses between the end of the descriptor range
-      and the end of the descriptor range rounded up to a multiple of
-      <<limits-robustStorageBufferAccessSizeAlignment,robustStorageBufferAccessSizeAlignment>>
-      bytes may: be discarded.
-  *** Non-atomic accesses to storage buffers that are a multiple of 32 bits
-      may: be decomposed into 32-bit accesses that are individually
-      bounds-checked.
-  *** If the access is to an index buffer and
-      <<features-robustBufferAccess2,pname:robustBufferAccess2>> is enabled,
-      zero values must: be returned.
-  *** If the access is to a uniform texel buffer or storage texel buffer and
-      <<features-robustBufferAccess2,pname:robustBufferAccess2>> is enabled,
-      zero values must: be returned, and then
-      <<textures-conversion-to-rgba,Conversion to RGBA>> is applied based on
-      the buffer view's format.
-endif::VK_EXT_robustness2[]
-  *** Values from anywhere within the memory range(s) bound to the buffer
-      (possibly including bytes of memory past the end of the buffer, up to
-      the end of the bound range).
-  *** Zero values, or [eq]#(0,0,0,x)# vectors for vector reads where x is a
-      valid value represented in the type of the vector components and may:
-      be any of:
-  **** 0, 1, or the maximum representable positive integer value, for signed
-       or unsigned integer components
-  **** 0.0 or 1.0, for floating-point components
-  ** Out-of-bounds writes may: modify values within the memory range(s)
-     bound to the buffer, but must: not modify any other memory.
-ifdef::VK_EXT_robustness2[]
-  *** If <<features-robustBufferAccess2,pname:robustBufferAccess2>> is
-      enabled, out of bounds writes must: not modify any memory.
-endif::VK_EXT_robustness2[]
-  ** Out-of-bounds atomics may: modify values within the memory range(s)
-     bound to the buffer, but must: not modify any other memory, and return
-     an undefined: value.
-ifdef::VK_EXT_robustness2[]
-  *** If <<features-robustBufferAccess2,pname:robustBufferAccess2>> is
-      enabled, out of bounds atomics must: not modify any memory, and return
-      an undefined: value.
-  ** If <<features-robustBufferAccess2,pname:robustBufferAccess2>> is
-     disabled, vertex
-endif::VK_EXT_robustness2[]
-ifndef::VK_EXT_robustness2[]
-  ** Vertex
-endif::VK_EXT_robustness2[]
-     input attributes are considered out of bounds if the offset of the
-     attribute in the bound vertex buffer range plus the size of the
-     attribute is greater than either:
-+
-  *** code:vertexBufferRangeSize, if [eq]#code:bindingStride == 0#; or
-  *** [eq]#(code:vertexBufferRangeSize - (code:vertexBufferRangeSize %
-      code:bindingStride))#
-+
-where code:vertexBufferRangeSize is the byte size of the memory range bound
-to the vertex buffer binding and code:bindingStride is the byte stride of
-the corresponding vertex input binding.
-Further, if any vertex input attribute using a specific vertex input binding
-is out of bounds, then all vertex input attributes using that vertex input
-binding for that vertex shader invocation are considered out of bounds.
-  *** If a vertex input attribute is out of bounds, it will be assigned one
-      of the following values:
-  **** Values from anywhere within the memory range(s) bound to the buffer,
-       converted according to the format of the attribute.
-  **** Zero values, format converted according to the format of the
-       attribute.
-  **** Zero values, or [eq]#(0,0,0,x)# vectors, as described above.
-ifdef::VK_EXT_robustness2[]
-  ** If <<features-robustBufferAccess2,pname:robustBufferAccess2>> is
-     enabled, vertex input attributes are considered out of bounds if the
-     offset of the attribute in the bound vertex buffer range plus the size
-     of the attribute is greater than the byte size of the memory range
-     bound to the vertex buffer binding.
-  *** If a vertex input attribute is out of bounds, the
-      <<fxvertex-input-extraction,raw data>> extracted are zero values, and
-      missing G, B, or A components are <<fxvertex-input-extraction,filled
-      with [eq]#(0,0,1)#>>.
-endif::VK_EXT_robustness2[]
-  ** If pname:robustBufferAccess is not enabled, applications must: not
-     perform out of bounds accesses.
-  * [[features-fullDrawIndexUint32]] pname:fullDrawIndexUint32 specifies the
-    full 32-bit range of indices is supported for indexed draw calls when
-    using a elink:VkIndexType of ename:VK_INDEX_TYPE_UINT32.
-    pname:maxDrawIndexedIndexValue is the maximum index value that may: be
-    used (aside from the primitive restart index, which is always 2^32^-1
-    when the elink:VkIndexType is ename:VK_INDEX_TYPE_UINT32).
-    If this feature is supported, pname:maxDrawIndexedIndexValue must: be
-    2^32^-1; otherwise it must: be no smaller than 2^24^-1.
-    See <<limits-maxDrawIndexedIndexValue,maxDrawIndexedIndexValue>>.
-  * [[features-imageCubeArray]] pname:imageCubeArray specifies whether image
-    views with a elink:VkImageViewType of
-    ename:VK_IMAGE_VIEW_TYPE_CUBE_ARRAY can: be created, and that the
-    corresponding code:SampledCubeArray and code:ImageCubeArray SPIR-V
-    capabilities can: be used in shader code.
-  * [[features-independentBlend]] pname:independentBlend specifies whether
-    the sname:VkPipelineColorBlendAttachmentState settings are controlled
-    independently per-attachment.
-    If this feature is not enabled, the
-    sname:VkPipelineColorBlendAttachmentState settings for all color
-    attachments must: be identical.
-    Otherwise, a different sname:VkPipelineColorBlendAttachmentState can: be
-    provided for each bound color attachment.
-  * [[features-geometryShader]] pname:geometryShader specifies whether
-    geometry shaders are supported.
-    If this feature is not enabled, the ename:VK_SHADER_STAGE_GEOMETRY_BIT
-    and ename:VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT enum values must: not be
-    used.
-    This also specifies whether shader modules can: declare the
-    code:Geometry capability.
-  * [[features-tessellationShader]] pname:tessellationShader specifies
-    whether tessellation control and evaluation shaders are supported.
-    If this feature is not enabled, the
-    ename:VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT,
-    ename:VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT,
-    ename:VK_PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT,
-    ename:VK_PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT, and
-    ename:VK_STRUCTURE_TYPE_PIPELINE_TESSELLATION_STATE_CREATE_INFO enum
-    values must: not be used.
-    This also specifies whether shader modules can: declare the
-    code:Tessellation capability.
-  * [[features-sampleRateShading]] pname:sampleRateShading specifies whether
-    <<primsrast-sampleshading,Sample Shading>> and multisample interpolation
-    are supported.
-    If this feature is not enabled, the pname:sampleShadingEnable member of
-    the slink:VkPipelineMultisampleStateCreateInfo structure must: be set to
-    ename:VK_FALSE and the pname:minSampleShading member is ignored.
-    This also specifies whether shader modules can: declare the
-    code:SampleRateShading capability.
-  * [[features-dualSrcBlend]] pname:dualSrcBlend specifies whether blend
-    operations which take two sources are supported.
-    If this feature is not enabled, the ename:VK_BLEND_FACTOR_SRC1_COLOR,
-    ename:VK_BLEND_FACTOR_ONE_MINUS_SRC1_COLOR,
-    ename:VK_BLEND_FACTOR_SRC1_ALPHA, and
-    ename:VK_BLEND_FACTOR_ONE_MINUS_SRC1_ALPHA enum values must: not be used
-    as source or destination blending factors.
-    See <<framebuffer-dsb>>.
-  * [[features-logicOp]] pname:logicOp specifies whether logic operations
-    are supported.
-    If this feature is not enabled, the pname:logicOpEnable member of the
-    slink:VkPipelineColorBlendStateCreateInfo structure must: be set to
-    ename:VK_FALSE, and the pname:logicOp member is ignored.
-  * [[features-multiDrawIndirect]] pname:multiDrawIndirect specifies whether
-    multiple draw indirect is supported.
-    If this feature is not enabled, the pname:drawCount parameter to the
-    fname:vkCmdDrawIndirect and fname:vkCmdDrawIndexedIndirect commands
-    must: be 0 or 1.
-    The pname:maxDrawIndirectCount member of the
-    sname:VkPhysicalDeviceLimits structure must: also be 1 if this feature
-    is not supported.
-    See <<limits-maxDrawIndirectCount,maxDrawIndirectCount>>.
-  * [[features-drawIndirectFirstInstance]] pname:drawIndirectFirstInstance
-    specifies whether indirect drawing calls support the pname:firstInstance
-    parameter.
-    If this feature is not enabled, the pname:firstInstance member of all
-    sname:VkDrawIndirectCommand and sname:VkDrawIndexedIndirectCommand
-    structures that are provided to the fname:vkCmdDrawIndirect and
-    fname:vkCmdDrawIndexedIndirect commands must: be 0.
-  * [[features-depthClamp]] pname:depthClamp specifies whether depth
-    clamping is supported.
-    If this feature is not enabled, the pname:depthClampEnable member of the
-    slink:VkPipelineRasterizationStateCreateInfo structure must: be set to
-    ename:VK_FALSE.
-    Otherwise, setting pname:depthClampEnable to ename:VK_TRUE will enable
-    depth clamping.
-  * [[features-depthBiasClamp]] pname:depthBiasClamp specifies whether depth
-    bias clamping is supported.
-    If this feature is not enabled, the pname:depthBiasClamp member of the
-    slink:VkPipelineRasterizationStateCreateInfo structure must: be set to
-    0.0 unless the ename:VK_DYNAMIC_STATE_DEPTH_BIAS dynamic state is
-    enabled, and the pname:depthBiasClamp parameter to
-    fname:vkCmdSetDepthBias must: be set to 0.0.
-  * [[features-fillModeNonSolid]] pname:fillModeNonSolid specifies whether
-    point and wireframe fill modes are supported.
-    If this feature is not enabled, the ename:VK_POLYGON_MODE_POINT and
-    ename:VK_POLYGON_MODE_LINE enum values must: not be used.
-  * [[features-depthBounds]] pname:depthBounds specifies whether depth
-    bounds tests are supported.
-    If this feature is not enabled, the pname:depthBoundsTestEnable member
-    of the slink:VkPipelineDepthStencilStateCreateInfo structure must: be
-    set to ename:VK_FALSE.
-    When pname:depthBoundsTestEnable is set to ename:VK_FALSE, the
-    pname:minDepthBounds and pname:maxDepthBounds members of the
-    slink:VkPipelineDepthStencilStateCreateInfo structure are ignored.
-  * [[features-wideLines]] pname:wideLines specifies whether lines with
-    width other than 1.0 are supported.
-    If this feature is not enabled, the pname:lineWidth member of the
-    slink:VkPipelineRasterizationStateCreateInfo structure must: be set to
-    1.0 unless the ename:VK_DYNAMIC_STATE_LINE_WIDTH dynamic state is
-    enabled, and the pname:lineWidth parameter to fname:vkCmdSetLineWidth
-    must: be set to 1.0.
-    When this feature is supported, the range and granularity of supported
-    line widths are indicated by the pname:lineWidthRange and
-    pname:lineWidthGranularity members of the sname:VkPhysicalDeviceLimits
-    structure, respectively.
-  * [[features-largePoints]] pname:largePoints specifies whether points with
-    size greater than 1.0 are supported.
-    If this feature is not enabled, only a point size of 1.0 written by a
-    shader is supported.
-    The range and granularity of supported point sizes are indicated by the
-    pname:pointSizeRange and pname:pointSizeGranularity members of the
-    sname:VkPhysicalDeviceLimits structure, respectively.
-  * [[features-alphaToOne]] pname:alphaToOne specifies whether the
-    implementation is able to replace the alpha value of the fragment shader
-    color output in the <<fragops-covg, Multisample Coverage>> fragment
-    operation.
-    If this feature is not enabled, then the pname:alphaToOneEnable member
-    of the slink:VkPipelineMultisampleStateCreateInfo structure must: be set
-    to ename:VK_FALSE.
-    Otherwise setting pname:alphaToOneEnable to ename:VK_TRUE will enable
-    alpha-to-one behavior.
-  * [[features-multiViewport]] pname:multiViewport specifies whether more
-    than one viewport is supported.
-    If this feature is not enabled:
-  ** The pname:viewportCount and pname:scissorCount members of the
-     slink:VkPipelineViewportStateCreateInfo structure must: be set to 1.
-  ** The pname:firstViewport and pname:viewportCount parameters to the
-     fname:vkCmdSetViewport command must: be set to 0 and 1, respectively.
-  ** The pname:firstScissor and pname:scissorCount parameters to the
-     fname:vkCmdSetScissor command must: be set to 0 and 1, respectively.
-ifdef::VK_NV_scissor_exclusive[]
-  ** The pname:exclusiveScissorCount member of the
-     slink:VkPipelineViewportExclusiveScissorStateCreateInfoNV structure
-     must: be set to 0 or 1.
-  ** The pname:firstExclusiveScissor and pname:exclusiveScissorCount
-     parameters to the fname:vkCmdSetExclusiveScissorNV command must: be set
-     to 0 and 1, respectively.
-endif::VK_NV_scissor_exclusive[]
-  * [[features-samplerAnisotropy]] pname:samplerAnisotropy specifies whether
-    anisotropic filtering is supported.
-    If this feature is not enabled, the pname:anisotropyEnable member of the
-    slink:VkSamplerCreateInfo structure must: be ename:VK_FALSE.
-  * [[features-textureCompressionETC2]] pname:textureCompressionETC2
-    specifies whether all of the ETC2 and EAC compressed texture formats are
-    supported.
-    If this feature is enabled, then the
-    ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT,
-    ename:VK_FORMAT_FEATURE_BLIT_SRC_BIT and
-    ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT features must:
-    be supported in pname:optimalTilingFeatures for the following formats:
-+
-  ** ename:VK_FORMAT_ETC2_R8G8B8_UNORM_BLOCK
-  ** ename:VK_FORMAT_ETC2_R8G8B8_SRGB_BLOCK
-  ** ename:VK_FORMAT_ETC2_R8G8B8A1_UNORM_BLOCK
-  ** ename:VK_FORMAT_ETC2_R8G8B8A1_SRGB_BLOCK
-  ** ename:VK_FORMAT_ETC2_R8G8B8A8_UNORM_BLOCK
-  ** ename:VK_FORMAT_ETC2_R8G8B8A8_SRGB_BLOCK
-  ** ename:VK_FORMAT_EAC_R11_UNORM_BLOCK
-  ** ename:VK_FORMAT_EAC_R11_SNORM_BLOCK
-  ** ename:VK_FORMAT_EAC_R11G11_UNORM_BLOCK
-  ** ename:VK_FORMAT_EAC_R11G11_SNORM_BLOCK
-+
-To query for additional properties, or if the feature is not enabled,
-flink:vkGetPhysicalDeviceFormatProperties and
-flink:vkGetPhysicalDeviceImageFormatProperties can: be used to check for
-supported properties of individual formats as normal.
-
-  * [[features-textureCompressionASTC_LDR]] pname:textureCompressionASTC_LDR
-    specifies whether all of the ASTC LDR compressed texture formats are
-    supported.
-    If this feature is enabled, then the
-    ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT,
-    ename:VK_FORMAT_FEATURE_BLIT_SRC_BIT and
-    ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT features must:
-    be supported in pname:optimalTilingFeatures for the following formats:
-+
-  ** ename:VK_FORMAT_ASTC_4x4_UNORM_BLOCK
-  ** ename:VK_FORMAT_ASTC_4x4_SRGB_BLOCK
-  ** ename:VK_FORMAT_ASTC_5x4_UNORM_BLOCK
-  ** ename:VK_FORMAT_ASTC_5x4_SRGB_BLOCK
-  ** ename:VK_FORMAT_ASTC_5x5_UNORM_BLOCK
-  ** ename:VK_FORMAT_ASTC_5x5_SRGB_BLOCK
-  ** ename:VK_FORMAT_ASTC_6x5_UNORM_BLOCK
-  ** ename:VK_FORMAT_ASTC_6x5_SRGB_BLOCK
-  ** ename:VK_FORMAT_ASTC_6x6_UNORM_BLOCK
-  ** ename:VK_FORMAT_ASTC_6x6_SRGB_BLOCK
-  ** ename:VK_FORMAT_ASTC_8x5_UNORM_BLOCK
-  ** ename:VK_FORMAT_ASTC_8x5_SRGB_BLOCK
-  ** ename:VK_FORMAT_ASTC_8x6_UNORM_BLOCK
-  ** ename:VK_FORMAT_ASTC_8x6_SRGB_BLOCK
-  ** ename:VK_FORMAT_ASTC_8x8_UNORM_BLOCK
-  ** ename:VK_FORMAT_ASTC_8x8_SRGB_BLOCK
-  ** ename:VK_FORMAT_ASTC_10x5_UNORM_BLOCK
-  ** ename:VK_FORMAT_ASTC_10x5_SRGB_BLOCK
-  ** ename:VK_FORMAT_ASTC_10x6_UNORM_BLOCK
-  ** ename:VK_FORMAT_ASTC_10x6_SRGB_BLOCK
-  ** ename:VK_FORMAT_ASTC_10x8_UNORM_BLOCK
-  ** ename:VK_FORMAT_ASTC_10x8_SRGB_BLOCK
-  ** ename:VK_FORMAT_ASTC_10x10_UNORM_BLOCK
-  ** ename:VK_FORMAT_ASTC_10x10_SRGB_BLOCK
-  ** ename:VK_FORMAT_ASTC_12x10_UNORM_BLOCK
-  ** ename:VK_FORMAT_ASTC_12x10_SRGB_BLOCK
-  ** ename:VK_FORMAT_ASTC_12x12_UNORM_BLOCK
-  ** ename:VK_FORMAT_ASTC_12x12_SRGB_BLOCK
-+
-To query for additional properties, or if the feature is not enabled,
-flink:vkGetPhysicalDeviceFormatProperties and
-flink:vkGetPhysicalDeviceImageFormatProperties can: be used to check for
-supported properties of individual formats as normal.
-
-  * [[features-textureCompressionBC]] pname:textureCompressionBC specifies
-    whether all of the BC compressed texture formats are supported.
-    If this feature is enabled, then the
-    ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT,
-    ename:VK_FORMAT_FEATURE_BLIT_SRC_BIT and
-    ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT features must:
-    be supported in pname:optimalTilingFeatures for the following formats:
-+
-  ** ename:VK_FORMAT_BC1_RGB_UNORM_BLOCK
-  ** ename:VK_FORMAT_BC1_RGB_SRGB_BLOCK
-  ** ename:VK_FORMAT_BC1_RGBA_UNORM_BLOCK
-  ** ename:VK_FORMAT_BC1_RGBA_SRGB_BLOCK
-  ** ename:VK_FORMAT_BC2_UNORM_BLOCK
-  ** ename:VK_FORMAT_BC2_SRGB_BLOCK
-  ** ename:VK_FORMAT_BC3_UNORM_BLOCK
-  ** ename:VK_FORMAT_BC3_SRGB_BLOCK
-  ** ename:VK_FORMAT_BC4_UNORM_BLOCK
-  ** ename:VK_FORMAT_BC4_SNORM_BLOCK
-  ** ename:VK_FORMAT_BC5_UNORM_BLOCK
-  ** ename:VK_FORMAT_BC5_SNORM_BLOCK
-  ** ename:VK_FORMAT_BC6H_UFLOAT_BLOCK
-  ** ename:VK_FORMAT_BC6H_SFLOAT_BLOCK
-  ** ename:VK_FORMAT_BC7_UNORM_BLOCK
-  ** ename:VK_FORMAT_BC7_SRGB_BLOCK
-+
-To query for additional properties, or if the feature is not enabled,
-flink:vkGetPhysicalDeviceFormatProperties and
-flink:vkGetPhysicalDeviceImageFormatProperties can: be used to check for
-supported properties of individual formats as normal.
-
-  * [[features-occlusionQueryPrecise]] pname:occlusionQueryPrecise specifies
-    whether occlusion queries returning actual sample counts are supported.
-    Occlusion queries are created in a sname:VkQueryPool by specifying the
-    pname:queryType of ename:VK_QUERY_TYPE_OCCLUSION in the
-    slink:VkQueryPoolCreateInfo structure which is passed to
-    fname:vkCreateQueryPool.
-    If this feature is enabled, queries of this type can: enable
-    ename:VK_QUERY_CONTROL_PRECISE_BIT in the pname:flags parameter to
-    fname:vkCmdBeginQuery.
-    If this feature is not supported, the implementation supports only
-    boolean occlusion queries.
-    When any samples are passed, boolean queries will return a non-zero
-    result value, otherwise a result value of zero is returned.
-    When this feature is enabled and ename:VK_QUERY_CONTROL_PRECISE_BIT is
-    set, occlusion queries will report the actual number of samples passed.
-  * [[features-pipelineStatisticsQuery]] pname:pipelineStatisticsQuery
-    specifies whether the pipeline statistics queries are supported.
-    If this feature is not enabled, queries of type
-    ename:VK_QUERY_TYPE_PIPELINE_STATISTICS cannot: be created, and none of
-    the elink:VkQueryPipelineStatisticFlagBits bits can: be set in the
-    pname:pipelineStatistics member of the slink:VkQueryPoolCreateInfo
-    structure.
-  * [[features-vertexPipelineStoresAndAtomics]]
-    pname:vertexPipelineStoresAndAtomics specifies whether storage buffers
-    and images support stores and atomic operations in the vertex,
-    tessellation, and geometry shader stages.
-    If this feature is not enabled, all storage image, storage texel buffer,
-    and storage buffer variables used by these stages in shader modules
-    must: be decorated with the code:NonWritable decoration (or the
-    code:readonly memory qualifier in GLSL).
-  * [[features-fragmentStoresAndAtomics]] pname:fragmentStoresAndAtomics
-    specifies whether storage buffers and images support stores and atomic
-    operations in the fragment shader stage.
-    If this feature is not enabled, all storage image, storage texel buffer,
-    and storage buffer variables used by the fragment stage in shader
-    modules must: be decorated with the code:NonWritable decoration (or the
-    code:readonly memory qualifier in GLSL).
-  * [[features-shaderTessellationAndGeometryPointSize]]
-    pname:shaderTessellationAndGeometryPointSize specifies whether the
-    code:PointSize built-in decoration is available in the tessellation
-    control, tessellation evaluation, and geometry shader stages.
-    If this feature is not enabled, members decorated with the
-    code:PointSize built-in decoration must: not be read from or written to
-    and all points written from a tessellation or geometry shader will have
-    a size of 1.0.
-    This also specifies whether shader modules can: declare the
-    code:TessellationPointSize capability for tessellation control and
-    evaluation shaders, or if the shader modules can: declare the
-    code:GeometryPointSize capability for geometry shaders.
-    An implementation supporting this feature must: also support one or both
-    of the <<features-tessellationShader,pname:tessellationShader>> or
-    <<features-geometryShader,pname:geometryShader>> features.
-  * [[features-shaderImageGatherExtended]] pname:shaderImageGatherExtended
-    specifies whether the extended set of image gather instructions are
-    available in shader code.
-    If this feature is not enabled, the code:OpImage*Gather instructions do
-    not support the code:Offset and code:ConstOffsets operands.
-    This also specifies whether shader modules can: declare the
-    code:ImageGatherExtended capability.
-  * [[features-shaderStorageImageExtendedFormats]]
-    pname:shaderStorageImageExtendedFormats specifies whether all the
-    "`storage image extended formats`" below are supported; if this feature
-    is supported, then the ename:VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT must:
-    be supported in pname:optimalTilingFeatures for the following formats:
-+
-  ** ename:VK_FORMAT_R16G16_SFLOAT
-  ** ename:VK_FORMAT_B10G11R11_UFLOAT_PACK32
-  ** ename:VK_FORMAT_R16_SFLOAT
-  ** ename:VK_FORMAT_R16G16B16A16_UNORM
-  ** ename:VK_FORMAT_A2B10G10R10_UNORM_PACK32
-  ** ename:VK_FORMAT_R16G16_UNORM
-  ** ename:VK_FORMAT_R8G8_UNORM
-  ** ename:VK_FORMAT_R16_UNORM
-  ** ename:VK_FORMAT_R8_UNORM
-  ** ename:VK_FORMAT_R16G16B16A16_SNORM
-  ** ename:VK_FORMAT_R16G16_SNORM
-  ** ename:VK_FORMAT_R8G8_SNORM
-  ** ename:VK_FORMAT_R16_SNORM
-  ** ename:VK_FORMAT_R8_SNORM
-  ** ename:VK_FORMAT_R16G16_SINT
-  ** ename:VK_FORMAT_R8G8_SINT
-  ** ename:VK_FORMAT_R16_SINT
-  ** ename:VK_FORMAT_R8_SINT
-  ** ename:VK_FORMAT_A2B10G10R10_UINT_PACK32
-  ** ename:VK_FORMAT_R16G16_UINT
-  ** ename:VK_FORMAT_R8G8_UINT
-  ** ename:VK_FORMAT_R16_UINT
-  ** ename:VK_FORMAT_R8_UINT
-+
-[NOTE]
-.Note
-====
-pname:shaderStorageImageExtendedFormats feature only adds a guarantee of
-format support, which is specified for the whole physical device.
-Therefore enabling or disabling the feature via flink:vkCreateDevice has no
-practical effect.
-
-To query for additional properties, or if the feature is not supported,
-flink:vkGetPhysicalDeviceFormatProperties and
-flink:vkGetPhysicalDeviceImageFormatProperties can: be used to check for
-supported properties of individual formats, as usual rules allow.
-
-ename:VK_FORMAT_R32G32_UINT, ename:VK_FORMAT_R32G32_SINT, and
-ename:VK_FORMAT_R32G32_SFLOAT from code:StorageImageExtendedFormats SPIR-V
-capability, are already covered by core Vulkan
-<<formats-mandatory-features-32bit,mandatory format support>>.
-====
-
-  * [[features-shaderStorageImageMultisample]]
-    pname:shaderStorageImageMultisample specifies whether multisampled
-    storage images are supported.
-    If this feature is not enabled, images that are created with a
-    pname:usage that includes ename:VK_IMAGE_USAGE_STORAGE_BIT must: be
-    created with pname:samples equal to ename:VK_SAMPLE_COUNT_1_BIT.
-    This also specifies whether shader modules can: declare the
-    code:StorageImageMultisample and code:ImageMSArray capabilities.
-  * [[features-shaderStorageImageReadWithoutFormat]]
-    pname:shaderStorageImageReadWithoutFormat specifies whether storage
-    images require a format qualifier to be specified when reading.
-ifdef::VK_KHR_format_feature_flags2[]
-    pname:shaderStorageImageReadWithoutFormat applies only to formats listed
-    in the <<formats-without-shader-storage-format,storage without format>>
-    list.
-endif::VK_KHR_format_feature_flags2[]
-  * [[features-shaderStorageImageWriteWithoutFormat]]
-    pname:shaderStorageImageWriteWithoutFormat specifies whether storage
-    images require a format qualifier to be specified when writing.
-ifdef::VK_KHR_format_feature_flags2[]
-    pname:shaderStorageImageWriteWithoutFormat applies only to formats
-    listed in the <<formats-without-shader-storage-format,storage without
-    format>> list.
-endif::VK_KHR_format_feature_flags2[]
-  * [[features-shaderUniformBufferArrayDynamicIndexing]]
-    pname:shaderUniformBufferArrayDynamicIndexing specifies whether arrays
-    of uniform buffers can: be indexed by _dynamically uniform_ integer
-    expressions in shader code.
-    If this feature is not enabled, resources with a descriptor type of
-    ename:VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER or
-    ename:VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC must: be indexed only by
-    constant integral expressions when aggregated into arrays in shader
-    code.
-    This also specifies whether shader modules can: declare the
-    code:UniformBufferArrayDynamicIndexing capability.
-  * [[features-shaderSampledImageArrayDynamicIndexing]]
-    pname:shaderSampledImageArrayDynamicIndexing specifies whether arrays of
-    samplers or sampled images can: be indexed by dynamically uniform
-    integer expressions in shader code.
-    If this feature is not enabled, resources with a descriptor type of
-    ename:VK_DESCRIPTOR_TYPE_SAMPLER,
-    ename:VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, or
-    ename:VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE must: be indexed only by constant
-    integral expressions when aggregated into arrays in shader code.
-    This also specifies whether shader modules can: declare the
-    code:SampledImageArrayDynamicIndexing capability.
-  * [[features-shaderStorageBufferArrayDynamicIndexing]]
-    pname:shaderStorageBufferArrayDynamicIndexing specifies whether arrays
-    of storage buffers can: be indexed by dynamically uniform integer
-    expressions in shader code.
-    If this feature is not enabled, resources with a descriptor type of
-    ename:VK_DESCRIPTOR_TYPE_STORAGE_BUFFER or
-    ename:VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC must: be indexed only by
-    constant integral expressions when aggregated into arrays in shader
-    code.
-    This also specifies whether shader modules can: declare the
-    code:StorageBufferArrayDynamicIndexing capability.
-  * [[features-shaderStorageImageArrayDynamicIndexing]]
-    pname:shaderStorageImageArrayDynamicIndexing specifies whether arrays of
-    storage images can: be indexed by dynamically uniform integer
-    expressions in shader code.
-    If this feature is not enabled, resources with a descriptor type of
-    ename:VK_DESCRIPTOR_TYPE_STORAGE_IMAGE must: be indexed only by constant
-    integral expressions when aggregated into arrays in shader code.
-    This also specifies whether shader modules can: declare the
-    code:StorageImageArrayDynamicIndexing capability.
-  * [[features-shaderClipDistance]] pname:shaderClipDistance specifies
-    whether clip distances are supported in shader code.
-    If this feature is not enabled, any members decorated with the
-    code:ClipDistance built-in decoration must: not be read from or written
-    to in shader modules.
-    This also specifies whether shader modules can: declare the
-    code:ClipDistance capability.
-  * [[features-shaderCullDistance]] pname:shaderCullDistance specifies
-    whether cull distances are supported in shader code.
-    If this feature is not enabled, any members decorated with the
-    code:CullDistance built-in decoration must: not be read from or written
-    to in shader modules.
-    This also specifies whether shader modules can: declare the
-    code:CullDistance capability.
-  * [[features-shaderFloat64]] pname:shaderFloat64 specifies whether 64-bit
-    floats (doubles) are supported in shader code.
-    If this feature is not enabled, 64-bit floating-point types must: not be
-    used in shader code.
-    This also specifies whether shader modules can: declare the code:Float64
-    capability.
-    Declaring and using 64-bit floats is enabled for all storage classes
-    that SPIR-V allows with the code:Float64 capability.
-  * [[features-shaderInt64]] pname:shaderInt64 specifies whether 64-bit
-    integers (signed and unsigned) are supported in shader code.
-    If this feature is not enabled, 64-bit integer types must: not be used
-    in shader code.
-    This also specifies whether shader modules can: declare the code:Int64
-    capability.
-    Declaring and using 64-bit integers is enabled for all storage classes
-    that SPIR-V allows with the code:Int64 capability.
-  * [[features-shaderInt16]] pname:shaderInt16 specifies whether 16-bit
-    integers (signed and unsigned) are supported in shader code.
-    If this feature is not enabled, 16-bit integer types must: not be used
-    in shader code.
-    This also specifies whether shader modules can: declare the code:Int16
-    capability.
-    However, this only enables a subset of the storage classes that SPIR-V
-    allows for the code:Int16 SPIR-V capability: Declaring and using 16-bit
-    integers in the code:Private,
-ifndef::VK_KHR_workgroup_memory_explicit_layout[]
-    code:Workgroup,
-endif::VK_KHR_workgroup_memory_explicit_layout[]
-ifdef::VK_KHR_workgroup_memory_explicit_layout[]
-    code:Workgroup (for non-Block variables),
-endif::VK_KHR_workgroup_memory_explicit_layout[]
-    and code:Function storage classes is enabled, while declaring them in
-    the interface storage classes (e.g., code:UniformConstant, code:Uniform,
-    code:StorageBuffer, code:Input, code:Output, and code:PushConstant) is
-    not enabled.
-  * [[features-shaderResourceResidency]] pname:shaderResourceResidency
-    specifies whether image operations that return resource residency
-    information are supported in shader code.
-    If this feature is not enabled, the code:OpImageSparse* instructions
-    must: not be used in shader code.
-    This also specifies whether shader modules can: declare the
-    code:SparseResidency capability.
-    The feature requires at least one of the ptext:sparseResidency* features
-    to be supported.
-  * [[features-shaderResourceMinLod]] pname:shaderResourceMinLod specifies
-    whether image operations specifying the minimum resource LOD are
-    supported in shader code.
-    If this feature is not enabled, the code:MinLod image operand must: not
-    be used in shader code.
-    This also specifies whether shader modules can: declare the code:MinLod
-    capability.
-  * [[features-sparseBinding]] pname:sparseBinding specifies whether
-    resource memory can: be managed at opaque sparse block level instead of
-    at the object level.
-    If this feature is not enabled, resource memory must: be bound only on a
-    per-object basis using the fname:vkBindBufferMemory and
-    fname:vkBindImageMemory commands.
-    In this case, buffers and images must: not be created with
-    ename:VK_BUFFER_CREATE_SPARSE_BINDING_BIT and
-    ename:VK_IMAGE_CREATE_SPARSE_BINDING_BIT set in the pname:flags member
-    of the slink:VkBufferCreateInfo and slink:VkImageCreateInfo structures,
-    respectively.
-    Otherwise resource memory can: be managed as described in
-    <<sparsememory-sparseresourcefeatures,Sparse Resource Features>>.
-  * [[features-sparseResidencyBuffer]] pname:sparseResidencyBuffer specifies
-    whether the device can: access partially resident buffers.
-    If this feature is not enabled, buffers must: not be created with
-    ename:VK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT set in the pname:flags
-    member of the slink:VkBufferCreateInfo structure.
-  * [[features-sparseResidencyImage2D]] pname:sparseResidencyImage2D
-    specifies whether the device can: access partially resident 2D images
-    with 1 sample per pixel.
-    If this feature is not enabled, images with an pname:imageType of
-    ename:VK_IMAGE_TYPE_2D and pname:samples set to
-    ename:VK_SAMPLE_COUNT_1_BIT must: not be created with
-    ename:VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT set in the pname:flags member
-    of the slink:VkImageCreateInfo structure.
-  * [[features-sparseResidencyImage3D]] pname:sparseResidencyImage3D
-    specifies whether the device can: access partially resident 3D images.
-    If this feature is not enabled, images with an pname:imageType of
-    ename:VK_IMAGE_TYPE_3D must: not be created with
-    ename:VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT set in the pname:flags member
-    of the slink:VkImageCreateInfo structure.
-  * [[features-sparseResidency2Samples]] pname:sparseResidency2Samples
-    specifies whether the physical device can: access partially resident 2D
-    images with 2 samples per pixel.
-    If this feature is not enabled, images with an pname:imageType of
-    ename:VK_IMAGE_TYPE_2D and pname:samples set to
-    ename:VK_SAMPLE_COUNT_2_BIT must: not be created with
-    ename:VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT set in the pname:flags member
-    of the slink:VkImageCreateInfo structure.
-  * [[features-sparseResidency4Samples]] pname:sparseResidency4Samples
-    specifies whether the physical device can: access partially resident 2D
-    images with 4 samples per pixel.
-    If this feature is not enabled, images with an pname:imageType of
-    ename:VK_IMAGE_TYPE_2D and pname:samples set to
-    ename:VK_SAMPLE_COUNT_4_BIT must: not be created with
-    ename:VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT set in the pname:flags member
-    of the slink:VkImageCreateInfo structure.
-  * [[features-sparseResidency8Samples]] pname:sparseResidency8Samples
-    specifies whether the physical device can: access partially resident 2D
-    images with 8 samples per pixel.
-    If this feature is not enabled, images with an pname:imageType of
-    ename:VK_IMAGE_TYPE_2D and pname:samples set to
-    ename:VK_SAMPLE_COUNT_8_BIT must: not be created with
-    ename:VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT set in the pname:flags member
-    of the slink:VkImageCreateInfo structure.
-  * [[features-sparseResidency16Samples]] pname:sparseResidency16Samples
-    specifies whether the physical device can: access partially resident 2D
-    images with 16 samples per pixel.
-    If this feature is not enabled, images with an pname:imageType of
-    ename:VK_IMAGE_TYPE_2D and pname:samples set to
-    ename:VK_SAMPLE_COUNT_16_BIT must: not be created with
-    ename:VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT set in the pname:flags member
-    of the slink:VkImageCreateInfo structure.
-  * [[features-sparseResidencyAliased]] pname:sparseResidencyAliased
-    specifies whether the physical device can: correctly access data aliased
-    into multiple locations.
-    If this feature is not enabled, the
-    ename:VK_BUFFER_CREATE_SPARSE_ALIASED_BIT and
-    ename:VK_IMAGE_CREATE_SPARSE_ALIASED_BIT enum values must: not be used
-    in pname:flags members of the slink:VkBufferCreateInfo and
-    slink:VkImageCreateInfo structures, respectively.
-  * [[features-variableMultisampleRate]] pname:variableMultisampleRate
-    specifies whether all pipelines that will be bound to a command buffer
-    during a <<renderpass-noattachments, subpass which uses no attachments>>
-    must: have the same value for
-    slink:VkPipelineMultisampleStateCreateInfo::pname:rasterizationSamples.
-    If set to ename:VK_TRUE, the implementation supports variable
-    multisample rates in a subpass which uses no attachments.
-    If set to ename:VK_FALSE, then all pipelines bound in such a subpass
-    must: have the same multisample rate.
-    This has no effect in situations where a subpass uses any attachments.
-  * [[features-inheritedQueries]] pname:inheritedQueries specifies whether a
-    secondary command buffer may: be executed while a query is active.
-
-include::{generated}/validity/structs/VkPhysicalDeviceFeatures.txt[]
---
-
-ifdef::VK_VERSION_1_2[]
-[open,refpage='VkPhysicalDeviceVulkan11Features',desc='Structure describing the Vulkan 1.1 features that can be supported by an implementation',type='structs']
---
-The sname:VkPhysicalDeviceVulkan11Features structure is defined as:
-
-include::{generated}/api/structs/VkPhysicalDeviceVulkan11Features.txt[]
-
-This structure describes the following features:
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-
-:anchor-prefix:
-include::{chapters}/features.txt[tag=VK_KHR_16bit_storage-features]
-include::{chapters}/features.txt[tag=VK_KHR_multiview-features]
-include::{chapters}/features.txt[tag=VK_KHR_variable_pointers-features]
-include::{chapters}/features.txt[tag=VK_KHR_protected_memory-features]
-include::{chapters}/features.txt[tag=VK_KHR_sampler_ycbcr_conversion-features]
-include::{chapters}/features.txt[tag=VK_KHR_shader_draw_parameters-features]
-
-:refpage: VkPhysicalDeviceVulkan11Features
-include::{chapters}/features.txt[tag=features]
-
-include::{generated}/validity/structs/VkPhysicalDeviceVulkan11Features.txt[]
---
-
-[open,refpage='VkPhysicalDeviceVulkan12Features',desc='Structure describing the Vulkan 1.2 features that can be supported by an implementation',type='structs']
---
-The sname:VkPhysicalDeviceVulkan12Features structure is defined as:
-
-include::{generated}/api/structs/VkPhysicalDeviceVulkan12Features.txt[]
-
-This structure describes the following features:
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-
-:anchor-prefix:
-  * [[features-samplerMirrorClampToEdge]] pname:samplerMirrorClampToEdge
-    indicates whether the implementation supports the
-    ename:VK_SAMPLER_ADDRESS_MODE_MIRROR_CLAMP_TO_EDGE sampler address mode.
-    If this feature is not enabled, the
-    ename:VK_SAMPLER_ADDRESS_MODE_MIRROR_CLAMP_TO_EDGE sampler address mode
-    must: not be used.
-  * [[features-drawIndirectCount]] pname:drawIndirectCount indicates whether
-    the implementation supports the flink:vkCmdDrawIndirectCount and
-    flink:vkCmdDrawIndexedIndirectCount functions.
-    If this feature is not enabled, these functions must: not be used.
-include::{chapters}/features.txt[tag=VK_KHR_8bit_storage-features]
-include::{chapters}/features.txt[tag=VK_KHR_shader_atomic_int64-features]
-include::{chapters}/features.txt[tag=VK_KHR_shader_float16_int8-features]
-  * [[features-descriptorIndexing]] pname:descriptorIndexing indicates
-    whether the implementation supports the minimum set of descriptor
-    indexing features as described in the <<features-requirements,Feature
-    Requirements>> section.
-    Enabling the pname:descriptorIndexing member when flink:vkCreateDevice
-    is called does not imply the other minimum descriptor indexing features
-    are also enabled.
-    Those other descriptor indexing features must: be enabled individually
-    as needed by the application.
-include::{chapters}/features.txt[tag=VK_EXT_descriptor_indexing-features]
-  * [[features-samplerFilterMinmax]] pname:samplerFilterMinmax indicates
-    whether the implementation supports a minimum set of required formats
-    supporting min/max filtering as defined by the
-    <<limits-filterMinmaxSingleComponentFormats-minimum-requirements,pname:filterMinmaxSingleComponentFormats>>
-    property minimum requirements.
-    If this feature is not enabled, then no slink:VkSamplerCreateInfo
-    pname:pNext chain can include a slink:VkSamplerReductionModeCreateInfo
-    structure.
-include::{chapters}/features.txt[tag=VK_EXT_scalar_block_layout-features]
-include::{chapters}/features.txt[tag=VK_KHR_imageless_framebuffer-features]
-include::{chapters}/features.txt[tag=VK_KHR_uniform_buffer_standard_layout-features]
-include::{chapters}/features.txt[tag=VK_KHR_shader_subgroup_extended_types-features]
-include::{chapters}/features.txt[tag=VK_KHR_separate_depth_stencil_layouts-features]
-include::{chapters}/features.txt[tag=VK_EXT_host_query_reset-features]
-include::{chapters}/features.txt[tag=VK_KHR_timeline_semaphore-features]
-include::{chapters}/features.txt[tag=VK_EXT_buffer_device_address-features]
-include::{chapters}/features.txt[tag=VK_KHR_vulkan_memory_model-features]
-  * [[features-shaderOutputViewportIndex]] pname:shaderOutputViewportIndex
-    indicates whether the implementation supports the
-    code:ShaderViewportIndex SPIR-V capability enabling variables decorated
-    with the code:ViewportIndex built-in to be exported from vertex or
-    tessellation evaluation shaders.
-    If this feature is not enabled, the code:ViewportIndex built-in
-    decoration must: not be used on outputs in vertex or tessellation
-    evaluation shaders.
-  * [[features-shaderOutputLayer]] pname:shaderOutputLayer indicates whether
-    the implementation supports the code:ShaderLayer SPIR-V capability
-    enabling variables decorated with the code:Layer built-in to be exported
-    from vertex or tessellation evaluation shaders.
-    If this feature is not enabled, the code:Layer built-in decoration must:
-    not be used on outputs in vertex or tessellation evaluation shaders.
-  * [[features-subgroupBroadcastDynamicId]] If
-    pname:subgroupBroadcastDynamicId is ename:VK_TRUE, the "`Id`" operand of
-    code:OpGroupNonUniformBroadcast can: be dynamically uniform within a
-    subgroup, and the "`Index`" operand of
-    code:OpGroupNonUniformQuadBroadcast can: be dynamically uniform within
-    the derivative group.
-    If it is ename:VK_FALSE, these operands must: be constants.
-
-:refpage: VkPhysicalDeviceVulkan12Features
-include::{chapters}/features.txt[tag=features]
-
-include::{generated}/validity/structs/VkPhysicalDeviceVulkan12Features.txt[]
---
-endif::VK_VERSION_1_2[]
-
-ifdef::VK_VERSION_1_1,VK_KHR_variable_pointers[]
-[open,refpage='VkPhysicalDeviceVariablePointersFeatures',desc='Structure describing variable pointers features that can be supported by an implementation',type='structs',alias='VkPhysicalDeviceVariablePointerFeatures VkPhysicalDeviceVariablePointersFeaturesKHR VkPhysicalDeviceVariablePointerFeaturesKHR']
---
-The sname:VkPhysicalDeviceVariablePointersFeatures structure is defined as:
-
-include::{generated}/api/structs/VkPhysicalDeviceVariablePointersFeatures.txt[]
-
-ifdef::VK_VERSION_1_1[]
-include::{generated}/api/structs/VkPhysicalDeviceVariablePointerFeatures.txt[]
-endif::VK_VERSION_1_1[]
-
-ifdef::VK_KHR_variable_pointers[]
-or the equivalent
-
-include::{generated}/api/structs/VkPhysicalDeviceVariablePointersFeaturesKHR.txt[]
-
-include::{generated}/api/structs/VkPhysicalDeviceVariablePointerFeaturesKHR.txt[]
-endif::VK_KHR_variable_pointers[]
-
-This structure describes the following features:
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-
-// Must have preceding whitespace
-ifdef::VK_VERSION_1_2[:anchor-prefix: extension-]
-ifndef::VK_VERSION_1_2[:anchor-prefix:]
-// tag::VK_KHR_variable_pointers-features[]
-  * [[{anchor-prefix}features-variablePointersStorageBuffer]]
-    pname:variablePointersStorageBuffer specifies whether the implementation
-    supports the SPIR-V code:VariablePointersStorageBuffer capability.
-    When this feature is not enabled, shader modules must: not declare the
-    `SPV_KHR_variable_pointers` extension or the
-    code:VariablePointersStorageBuffer capability.
-  * [[{anchor-prefix}features-variablePointers]] pname:variablePointers
-    specifies whether the implementation supports the SPIR-V
-    code:VariablePointers capability.
-    When this feature is not enabled, shader modules must: not declare the
-    code:VariablePointers capability.
-// end::VK_KHR_variable_pointers-features[]
-
-:refpage: VkPhysicalDeviceVariablePointersFeatures
-include::{chapters}/features.txt[tag=features]
-
-.Valid Usage
-****
-  * [[VUID-VkPhysicalDeviceVariablePointersFeatures-variablePointers-01431]]
-    If pname:variablePointers is enabled then
-    pname:variablePointersStorageBuffer must: also be enabled
-****
-
-include::{generated}/validity/structs/VkPhysicalDeviceVariablePointersFeatures.txt[]
---
-endif::VK_VERSION_1_1,VK_KHR_variable_pointers[]
-
-ifdef::VK_VERSION_1_1,VK_KHR_multiview[]
-[open,refpage='VkPhysicalDeviceMultiviewFeatures',desc='Structure describing multiview features that can be supported by an implementation',type='structs']
---
-The sname:VkPhysicalDeviceMultiviewFeatures structure is defined as:
-
-include::{generated}/api/structs/VkPhysicalDeviceMultiviewFeatures.txt[]
-
-ifdef::VK_KHR_multiview[]
-or the equivalent
-
-include::{generated}/api/structs/VkPhysicalDeviceMultiviewFeaturesKHR.txt[]
-endif::VK_KHR_multiview[]
-
-This structure describes the following features:
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-
-// Must have preceding whitespace
-ifdef::VK_VERSION_1_2[:anchor-prefix: extension-]
-ifndef::VK_VERSION_1_2[:anchor-prefix:]
-// tag::VK_KHR_multiview-features[]
-  * [[{anchor-prefix}features-multiview]] pname:multiview specifies whether
-    the implementation supports multiview rendering within a render pass.
-    If this feature is not enabled, the view mask of each subpass must:
-    always be zero.
-  * [[{anchor-prefix}features-multiview-gs]] pname:multiviewGeometryShader
-    specifies whether the implementation supports multiview rendering within
-    a render pass, with <<geometry,geometry shaders>>.
-    If this feature is not enabled, then a pipeline compiled against a
-    subpass with a non-zero view mask must: not include a geometry shader.
-  * [[{anchor-prefix}features-multiview-tess]]
-    pname:multiviewTessellationShader specifies whether the implementation
-    supports multiview rendering within a render pass, with
-    <<tessellation,tessellation shaders>>.
-    If this feature is not enabled, then a pipeline compiled against a
-    subpass with a non-zero view mask must: not include any tessellation
-    shaders.
-// end::VK_KHR_multiview-features[]
-
-:refpage: VkPhysicalDeviceMultiviewFeatures
-include::{chapters}/features.txt[tag=features]
-
-.Valid Usage
-****
-  * [[VUID-VkPhysicalDeviceMultiviewFeatures-multiviewGeometryShader-00580]]
-    If pname:multiviewGeometryShader is enabled then pname:multiview must:
-    also be enabled
-  * [[VUID-VkPhysicalDeviceMultiviewFeatures-multiviewTessellationShader-00581]]
-    If pname:multiviewTessellationShader is enabled then pname:multiview
-    must: also be enabled
-****
-
-include::{generated}/validity/structs/VkPhysicalDeviceMultiviewFeatures.txt[]
---
-endif::VK_VERSION_1_1,VK_KHR_multiview[]
-
-ifdef::VK_EXT_shader_atomic_float[]
-[open,refpage='VkPhysicalDeviceShaderAtomicFloatFeaturesEXT',desc='Structure describing features supported by VK_EXT_shader_atomic_float',type='structs']
---
-The slink:VkPhysicalDeviceShaderAtomicFloatFeaturesEXT structure is defined
-as:
-
-include::{generated}/api/structs/VkPhysicalDeviceShaderAtomicFloatFeaturesEXT.txt[]
-
-This structure describes the following features:
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-
-// tag::VK_EXT_shader_atomic_float-features[]
-  * [[features-shaderBufferFloat32Atomics]] pname:shaderBufferFloat32Atomics
-    indicates whether shaders can: perform 32-bit floating-point load, store
-    and exchange atomic operations on storage buffers.
-  * [[features-shaderBufferFloat32AtomicAdd]]
-    pname:shaderBufferFloat32AtomicAdd indicates whether shaders can:
-    perform 32-bit floating-point add atomic operations on storage buffers.
-  * [[features-shaderBufferFloat64Atomics]] pname:shaderBufferFloat64Atomics
-    indicates whether shaders can: perform 64-bit floating-point load, store
-    and exchange atomic operations on storage buffers.
-  * [[features-shaderBufferFloat64AtomicAdd]]
-    pname:shaderBufferFloat64AtomicAdd indicates whether shaders can:
-    perform 64-bit floating-point add atomic operations on storage buffers.
-  * [[features-shaderSharedFloat32Atomics]] pname:shaderSharedFloat32Atomics
-    indicates whether shaders can: perform 32-bit floating-point load, store
-    and exchange atomic operations on shared memory.
-  * [[features-shaderSharedFloat32AtomicAdd]]
-    pname:shaderSharedFloat32AtomicAdd indicates whether shaders can:
-    perform 32-bit floating-point add atomic operations on shared memory.
-  * [[features-shaderSharedFloat64Atomics]] pname:shaderSharedFloat64Atomics
-    indicates whether shaders can: perform 64-bit floating-point load, store
-    and exchange atomic operations on shared memory.
-  * [[features-shaderSharedFloat64AtomicAdd]]
-    pname:shaderSharedFloat64AtomicAdd indicates whether shaders can:
-    perform 64-bit floating-point add atomic operations on shared memory.
-  * [[features-shaderImageFloat32Atomics]] pname:shaderImageFloat32Atomics
-    indicates whether shaders can: perform 32-bit floating-point load, store
-    and exchange atomic image operations.
-  * [[features-shaderImageFloat32AtomicAdd]]
-    pname:shaderImageFloat32AtomicAdd indicates whether shaders can: perform
-    32-bit floating-point add atomic image operations.
-  * [[features-sparseImageFloat32Atomics]] pname:sparseImageFloat32Atomics
-    indicates whether 32-bit floating-point load, store and exchange atomic
-    operations can: be used on sparse images.
-  * [[features-sparseImageFloat32AtomicAdd]]
-    pname:sparseImageFloat32AtomicAdd indicates whether 32-bit
-    floating-point add atomic operations can: be used on sparse images.
-// end::VK_EXT_shader_atomic_float-features[]
-
-:refpage: VkPhysicalDeviceShaderAtomicFloatFeaturesEXT
-include::{chapters}/features.txt[tag=features]
-
-include::{generated}/validity/structs/VkPhysicalDeviceShaderAtomicFloatFeaturesEXT.txt[]
---
-endif::VK_EXT_shader_atomic_float[]
-
-ifdef::VK_EXT_shader_atomic_float2[]
-[open,refpage='VkPhysicalDeviceShaderAtomicFloat2FeaturesEXT',desc='Structure describing features supported by VK_EXT_shader_atomic_float2',type='structs']
---
-The slink:VkPhysicalDeviceShaderAtomicFloat2FeaturesEXT structure is defined
-as:
-
-include::{generated}/api/structs/VkPhysicalDeviceShaderAtomicFloat2FeaturesEXT.txt[]
-
-This structure describes the following features:
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-
-// tag::VK_EXT_shader_atomic_float2-features[]
-  * [[features-shaderBufferFloat16Atomics]] pname:shaderBufferFloat16Atomics
-    indicates whether shaders can: perform 16-bit floating-point load,
-    store, and exchange atomic operations on storage buffers.
-  * [[features-shaderBufferFloat16AtomicAdd]]
-    pname:shaderBufferFloat16AtomicAdd indicates whether shaders can:
-    perform 16-bit floating-point add atomic operations on storage buffers.
-  * [[features-shaderBufferFloat16AtomicMinMax]]
-    pname:shaderBufferFloat16AtomicMinMax indicates whether shaders can:
-    perform 16-bit floating-point min and max atomic operations on storage
-    buffers.
-  * [[features-shaderBufferFloat32AtomicMinMax]]
-    pname:shaderBufferFloat32AtomicMinMax indicates whether shaders can:
-    perform 32-bit floating-point min and max atomic operations on storage
-    buffers.
-  * [[features-shaderBufferFloat64AtomicMinMax]]
-    pname:shaderBufferFloat64AtomicMinMax indicates whether shaders can:
-    perform 64-bit floating-point min and max atomic operations on storage
-    buffers.
-  * [[features-shaderSharedFloat16Atomics]] pname:shaderSharedFloat16Atomics
-    indicates whether shaders can: perform 16-bit floating-point load, store
-    and exchange atomic operations on shared memory.
-  * [[features-shaderSharedFloat16AtomicAdd]]
-    pname:shaderSharedFloat16AtomicAdd indicates whether shaders can:
-    perform 16-bit floating-point add atomic operations on shared memory.
-  * [[features-shaderSharedFloat16AtomicMinMax]]
-    pname:shaderSharedFloat16AtomicMinMax indicates whether shaders can:
-    perform 16-bit floating-point min and max atomic operations on shared
-    memory.
-  * [[features-shaderSharedFloat32AtomicMinMax]]
-    pname:shaderSharedFloat32AtomicMinMax indicates whether shaders can:
-    perform 32-bit floating-point min and max atomic operations on shared
-    memory.
-  * [[features-shaderSharedFloat64AtomicMinMax]]
-    pname:shaderSharedFloat64AtomicMinMax indicates whether shaders can:
-    perform 64-bit floating-point min and max atomic operations on shared
-    memory.
-  * [[features-shaderImageFloat32AtomicMinMax]]
-    pname:shaderImageFloat32AtomicMinMax indicates whether shaders can:
-    perform 32-bit floating-point min and max atomic image operations.
-  * [[features-sparseImageFloat32AtomicMinMax]]
-    pname:sparseImageFloat32AtomicMinMax indicates whether 32-bit
-    floating-point min and max atomic operations can: be used on sparse
-    images.
-// end::VK_EXT_shader_atomic_float2-features[]
-
-:refpage: VkPhysicalDeviceShaderAtomicFloat2FeaturesEXT
-include::{chapters}/features.txt[tag=features]
-
-include::{generated}/validity/structs/VkPhysicalDeviceShaderAtomicFloat2FeaturesEXT.txt[]
---
-endif::VK_EXT_shader_atomic_float2[]
-
-ifdef::VK_VERSION_1_2,VK_KHR_shader_atomic_int64[]
-[open,refpage='VkPhysicalDeviceShaderAtomicInt64Features',desc='Structure describing features supported by VK_KHR_shader_atomic_int64',type='structs',alias='VkPhysicalDeviceShaderAtomicInt64FeaturesKHR']
---
-The slink:VkPhysicalDeviceShaderAtomicInt64Features structure is defined as:
-
-include::{generated}/api/structs/VkPhysicalDeviceShaderAtomicInt64Features.txt[]
-
-ifdef::VK_KHR_shader_atomic_int64[]
-or the equivalent
-
-include::{generated}/api/structs/VkPhysicalDeviceShaderAtomicInt64FeaturesKHR.txt[]
-endif::VK_KHR_shader_atomic_int64[]
-
-This structure describes the following features:
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-
-// Must have preceding whitespace
-ifdef::VK_VERSION_1_2[:anchor-prefix: extension-]
-ifndef::VK_VERSION_1_2[:anchor-prefix:]
-// tag::VK_KHR_shader_atomic_int64-features[]
-  * [[{anchor-prefix}features-shaderBufferInt64Atomics]]
-    pname:shaderBufferInt64Atomics indicates whether shaders can: perform
-    64-bit unsigned and signed integer atomic operations on buffers.
-  * [[{anchor-prefix}features-shaderSharedInt64Atomics]]
-    pname:shaderSharedInt64Atomics indicates whether shaders can: perform
-    64-bit unsigned and signed integer atomic operations on shared memory.
-// end::VK_KHR_shader_atomic_int64-features[]
-
-:refpage: VkPhysicalDeviceShaderAtomicInt64Features
-include::{chapters}/features.txt[tag=features]
-
-include::{generated}/validity/structs/VkPhysicalDeviceShaderAtomicInt64Features.txt[]
---
-endif::VK_VERSION_1_2,VK_KHR_shader_atomic_int64[]
-
-ifdef::VK_EXT_shader_image_atomic_int64[]
-[open,refpage='VkPhysicalDeviceShaderImageAtomicInt64FeaturesEXT',desc='Structure describing features supported by VK_EXT_shader_image_atomic_int64',type='structs']
---
-The slink:VkPhysicalDeviceShaderImageAtomicInt64FeaturesEXT structure is
-defined as:
-
-include::{generated}/api/structs/VkPhysicalDeviceShaderImageAtomicInt64FeaturesEXT.txt[]
-
-This structure describes the following features:
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * [[features-shaderImageInt64Atomics]] pname:shaderImageInt64Atomics
-    indicates whether shaders can: support 64-bit unsigned and signed
-    integer atomic operations on images.
-  * [[features-sparseImageInt64Atomics]] pname:sparseImageInt64Atomics
-    indicates whether 64-bit integer atomics can: be used on sparse images.
-
-:refpage: VkPhysicalDeviceShaderAtomicInt64FeaturesEXT
-include::{chapters}/features.txt[tag=features]
-
-include::{generated}/validity/structs/VkPhysicalDeviceShaderImageAtomicInt64FeaturesEXT.txt[]
---
-endif::VK_EXT_shader_image_atomic_int64[]
-
-ifdef::VK_VERSION_1_2,VK_KHR_8bit_storage[]
-[open,refpage='VkPhysicalDevice8BitStorageFeatures',desc='Structure describing features supported by VK_KHR_8bit_storage',type='structs',alias='VkPhysicalDevice8BitStorageFeaturesKHR']
---
-The slink:VkPhysicalDevice8BitStorageFeatures structure is defined as:
-
-include::{generated}/api/structs/VkPhysicalDevice8BitStorageFeatures.txt[]
-
-ifdef::VK_KHR_8bit_storage[]
-or the equivalent
-
-include::{generated}/api/structs/VkPhysicalDevice8BitStorageFeaturesKHR.txt[]
-endif::VK_KHR_8bit_storage[]
-
-This structure describes the following features:
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-
-// Must have preceding whitespace
-ifdef::VK_VERSION_1_2[:anchor-prefix: extension-]
-ifndef::VK_VERSION_1_2[:anchor-prefix:]
-// tag::VK_KHR_8bit_storage-features[]
-  * [[{anchor-prefix}features-storageBuffer8BitAccess]]
-    pname:storageBuffer8BitAccess indicates whether objects in the
-    code:StorageBuffer,
-ifdef::VK_KHR_ray_tracing_pipeline[code:ShaderRecordBufferKHR,]
-ifdef::VK_VERSION_1_2,VK_EXT_buffer_device_address,VK_KHR_buffer_device_address[]
-    or code:PhysicalStorageBuffer
-endif::VK_VERSION_1_2,VK_EXT_buffer_device_address,VK_KHR_buffer_device_address[]
-    storage class with the code:Block decoration can: have 8-bit integer
-    members.
-    If this feature is not enabled, 8-bit integer members must: not be used
-    in such objects.
-    This also indicates whether shader modules can: declare the
-    code:StorageBuffer8BitAccess capability.
-  * [[{anchor-prefix}features-uniformAndStorageBuffer8BitAccess]]
-    pname:uniformAndStorageBuffer8BitAccess indicates whether objects in the
-    code:Uniform storage class with the code:Block decoration can: have
-    8-bit integer members.
-    If this feature is not enabled, 8-bit integer members must: not be used
-    in such objects.
-    This also indicates whether shader modules can: declare the
-    code:UniformAndStorageBuffer8BitAccess capability.
-  * [[{anchor-prefix}features-storagePushConstant8]]
-    pname:storagePushConstant8 indicates whether objects in the
-    code:PushConstant storage class can: have 8-bit integer members.
-    If this feature is not enabled, 8-bit integer members must: not be used
-    in such objects.
-    This also indicates whether shader modules can: declare the
-    code:StoragePushConstant8 capability.
-// end::VK_KHR_8bit_storage-features[]
-
-:refpage: VkPhysicalDevice8BitStorageFeatures
-include::{chapters}/features.txt[tag=features]
-
-include::{generated}/validity/structs/VkPhysicalDevice8BitStorageFeatures.txt[]
---
-endif::VK_VERSION_1_2,VK_KHR_8bit_storage[]
-
-ifdef::VK_VERSION_1_1,VK_KHR_16bit_storage[]
-[open,refpage='VkPhysicalDevice16BitStorageFeatures',desc='Structure describing features supported by VK_KHR_16bit_storage',type='structs']
---
-The slink:VkPhysicalDevice16BitStorageFeatures structure is defined as:
-
-include::{generated}/api/structs/VkPhysicalDevice16BitStorageFeatures.txt[]
-
-ifdef::VK_KHR_16bit_storage[]
-or the equivalent
-
-include::{generated}/api/structs/VkPhysicalDevice16BitStorageFeaturesKHR.txt[]
-endif::VK_KHR_16bit_storage[]
-
-This structure describes the following features:
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-
-// Must have preceding whitespace
-ifdef::VK_VERSION_1_2[:anchor-prefix: extension-]
-ifndef::VK_VERSION_1_2[:anchor-prefix:]
-// tag::VK_KHR_16bit_storage-features[]
-  * [[{anchor-prefix}features-storageBuffer16BitAccess]]
-    pname:storageBuffer16BitAccess specifies whether objects in the
-    code:StorageBuffer,
-ifdef::VK_KHR_ray_tracing_pipeline[code:ShaderRecordBufferKHR,]
-ifdef::VK_VERSION_1_2,VK_EXT_buffer_device_address,VK_KHR_buffer_device_address[]
-    or code:PhysicalStorageBuffer
-endif::VK_VERSION_1_2,VK_EXT_buffer_device_address,VK_KHR_buffer_device_address[]
-    storage class with the code:Block decoration can: have 16-bit integer
-    and 16-bit floating-point members.
-    If this feature is not enabled, 16-bit integer or 16-bit floating-point
-    members must: not be used in such objects.
-    This also specifies whether shader modules can: declare the
-    code:StorageBuffer16BitAccess capability.
-  * [[{anchor-prefix}features-uniformAndStorageBuffer16BitAccess]]
-    pname:uniformAndStorageBuffer16BitAccess specifies whether objects in
-    the code:Uniform storage class with the code:Block decoration can: have
-    16-bit integer and 16-bit floating-point members.
-    If this feature is not enabled, 16-bit integer or 16-bit floating-point
-    members must: not be used in such objects.
-    This also specifies whether shader modules can: declare the
-    code:UniformAndStorageBuffer16BitAccess capability.
-  * [[{anchor-prefix}features-storagePushConstant16]]
-    pname:storagePushConstant16 specifies whether objects in the
-    code:PushConstant storage class can: have 16-bit integer and 16-bit
-    floating-point members.
-    If this feature is not enabled, 16-bit integer or floating-point members
-    must: not be used in such objects.
-    This also specifies whether shader modules can: declare the
-    code:StoragePushConstant16 capability.
-  * [[{anchor-prefix}features-storageInputOutput16]]
-    pname:storageInputOutput16 specifies whether objects in the code:Input
-    and code:Output storage classes can: have 16-bit integer and 16-bit
-    floating-point members.
-    If this feature is not enabled, 16-bit integer or 16-bit floating-point
-    members must: not be used in such objects.
-    This also specifies whether shader modules can: declare the
-    code:StorageInputOutput16 capability.
-// end::VK_KHR_16bit_storage-features[]
-
-:refpage: VkPhysicalDevice16BitStorageFeatures
-include::{chapters}/features.txt[tag=features]
-
-include::{generated}/validity/structs/VkPhysicalDevice16BitStorageFeatures.txt[]
---
-endif::VK_VERSION_1_1,VK_KHR_16bit_storage[]
-
-ifdef::VK_VERSION_1_2,VK_KHR_shader_float16_int8[]
-[open,refpage='VkPhysicalDeviceShaderFloat16Int8Features',desc='Structure describing features supported by VK_KHR_shader_float16_int8',type='structs',alias='VkPhysicalDeviceShaderFloat16Int8FeaturesKHR VkPhysicalDeviceFloat16Int8FeaturesKHR']
---
-The sname:VkPhysicalDeviceShaderFloat16Int8Features structure is defined as:
-
-include::{generated}/api/structs/VkPhysicalDeviceShaderFloat16Int8Features.txt[]
-
-ifdef::VK_KHR_shader_float16_int8[]
-or the equivalent
-
-include::{generated}/api/structs/VkPhysicalDeviceShaderFloat16Int8FeaturesKHR.txt[]
-
-include::{generated}/api/structs/VkPhysicalDeviceFloat16Int8FeaturesKHR.txt[]
-endif::VK_KHR_shader_float16_int8[]
-
-This structure describes the following features:
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-
-// Must have preceding whitespace
-ifdef::VK_VERSION_1_2[:anchor-prefix: extension-]
-ifndef::VK_VERSION_1_2[:anchor-prefix:]
-// tag::VK_KHR_shader_float16_int8-features[]
-  * [[{anchor-prefix}features-shaderFloat16]] pname:shaderFloat16 indicates
-    whether 16-bit floats (halfs) are supported in shader code.
-    This also indicates whether shader modules can: declare the code:Float16
-    capability.
-    However, this only enables a subset of the storage classes that SPIR-V
-    allows for the code:Float16 SPIR-V capability: Declaring and using
-    16-bit floats in the code:Private,
-ifndef::VK_KHR_workgroup_memory_explicit_layout[]
-    code:Workgroup,
-endif::VK_KHR_workgroup_memory_explicit_layout[]
-ifdef::VK_KHR_workgroup_memory_explicit_layout[]
-    code:Workgroup (for non-Block variables),
-endif::VK_KHR_workgroup_memory_explicit_layout[]
-    and code:Function storage classes is enabled, while declaring them in
-    the interface storage classes (e.g., code:UniformConstant, code:Uniform,
-    code:StorageBuffer, code:Input, code:Output, and code:PushConstant) is
-    not enabled.
-  * [[{anchor-prefix}features-shaderInt8]] pname:shaderInt8 indicates
-    whether 8-bit integers (signed and unsigned) are supported in shader
-    code.
-    This also indicates whether shader modules can: declare the code:Int8
-    capability.
-    However, this only enables a subset of the storage classes that SPIR-V
-    allows for the code:Int8 SPIR-V capability: Declaring and using 8-bit
-    integers in the code:Private,
-ifndef::VK_KHR_workgroup_memory_explicit_layout[]
-    code:Workgroup,
-endif::VK_KHR_workgroup_memory_explicit_layout[]
-ifdef::VK_KHR_workgroup_memory_explicit_layout[]
-    code:Workgroup (for non-Block variables),
-endif::VK_KHR_workgroup_memory_explicit_layout[]
-    and code:Function storage classes is enabled, while declaring them in
-    the interface storage classes (e.g., code:UniformConstant, code:Uniform,
-    code:StorageBuffer, code:Input, code:Output, and code:PushConstant) is
-    not enabled.
-// end::VK_KHR_shader_float16_int8-features[]
-
-:refpage: VkPhysicalDeviceShaderFloat16Int8Features
-include::{chapters}/features.txt[tag=features]
-
-include::{generated}/validity/structs/VkPhysicalDeviceShaderFloat16Int8Features.txt[]
---
-endif::VK_VERSION_1_2,VK_KHR_shader_float16_int8[]
-
-ifdef::VK_KHR_shader_clock[]
-[open,refpage='VkPhysicalDeviceShaderClockFeaturesKHR',desc='Structure describing features supported by VK_KHR_shader_clock',type='structs']
---
-The slink:VkPhysicalDeviceShaderClockFeaturesKHR structure is defined as:
-
-include::{generated}/api/structs/VkPhysicalDeviceShaderClockFeaturesKHR.txt[]
-
-This structure describes the following features:
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * [[features-shaderSubgroupClock]] pname:shaderSubgroupClock indicates
-    whether shaders can: perform code:Subgroup scoped clock reads.
-  * [[features-shaderDeviceClock]] pname:shaderDeviceClock indicates whether
-    shaders can: perform code:Device scoped clock reads.
-
-:refpage: VkPhysicalDeviceShaderClockFeaturesKHR
-include::{chapters}/features.txt[tag=features]
-
-include::{generated}/validity/structs/VkPhysicalDeviceShaderClockFeaturesKHR.txt[]
---
-endif::VK_KHR_shader_clock[]
-
-ifdef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
-[open,refpage='VkPhysicalDeviceSamplerYcbcrConversionFeatures',desc='Structure describing {YCbCr} conversion features that can be supported by an implementation',type='structs',alias='VkPhysicalDeviceSamplerYcbcrConversionFeaturesKHR']
---
-The sname:VkPhysicalDeviceSamplerYcbcrConversionFeatures structure is
-defined as:
-
-include::{generated}/api/structs/VkPhysicalDeviceSamplerYcbcrConversionFeatures.txt[]
-
-ifdef::VK_KHR_sampler_ycbcr_conversion[]
-or the equivalent
-
-include::{generated}/api/structs/VkPhysicalDeviceSamplerYcbcrConversionFeaturesKHR.txt[]
-endif::VK_KHR_sampler_ycbcr_conversion[]
-
-This structure describes the following feature:
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-
-// Must have preceding whitespace
-ifdef::VK_VERSION_1_2[:anchor-prefix: extension-]
-ifndef::VK_VERSION_1_2[:anchor-prefix:]
-// tag::VK_KHR_sampler_ycbcr_conversion-features[]
-  * [[{anchor-prefix}features-samplerYcbcrConversion]]
-    pname:samplerYcbcrConversion specifies whether the implementation
-    supports <<samplers-YCbCr-conversion,sampler {YCbCr} conversion>>.
-    If pname:samplerYcbcrConversion is ename:VK_FALSE, sampler {YCbCr}
-    conversion is not supported, and samplers using sampler {YCbCr}
-    conversion must: not be used.
-// end::VK_KHR_sampler_ycbcr_conversion-features[]
-
-:refpage: VkPhysicalDeviceSamplerYcbcrConversionFeatures
-include::{chapters}/features.txt[tag=features]
-
-include::{generated}/validity/structs/VkPhysicalDeviceSamplerYcbcrConversionFeatures.txt[]
---
-endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
-
-ifdef::VK_VERSION_1_1[]
-[open,refpage='VkPhysicalDeviceProtectedMemoryFeatures',desc='Structure describing protected memory features that can be supported by an implementation',type='structs']
---
-The sname:VkPhysicalDeviceProtectedMemoryFeatures structure is defined as:
-
-include::{generated}/api/structs/VkPhysicalDeviceProtectedMemoryFeatures.txt[]
-
-This structure describes the following feature:
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-
-// Must have preceding whitespace
-ifdef::VK_VERSION_1_2[:anchor-prefix: extension-]
-ifndef::VK_VERSION_1_2[:anchor-prefix:]
-// tag::VK_KHR_protected_memory-features[]
-  * [[{anchor-prefix}features-protectedMemory]] pname:protectedMemory
-    specifies whether protected memory is supported.
-// end::VK_KHR_protected_memory-features[]
-
-:refpage: VkPhysicalDeviceProtectedMemoryFeatures
-include::{chapters}/features.txt[tag=features]
-
-include::{generated}/validity/structs/VkPhysicalDeviceProtectedMemoryFeatures.txt[]
---
-endif::VK_VERSION_1_1[]
-
-ifdef::VK_EXT_blend_operation_advanced[]
-[open,refpage='VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT',desc='Structure describing advanced blending features that can be supported by an implementation',type='structs']
---
-The sname:VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT structure is
-defined as:
-
-include::{generated}/api/structs/VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT.txt[]
-
-This structure describes the following feature:
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * [[features-advancedBlendCoherentOperations]]
-    pname:advancedBlendCoherentOperations specifies whether blending using
-    <<framebuffer-blend-advanced,advanced blend operations>> is guaranteed
-    to execute atomically and in <<drawing-primitive-order, primitive
-    order>>.
-    If this is ename:VK_TRUE,
-    ename:VK_ACCESS_COLOR_ATTACHMENT_READ_NONCOHERENT_BIT_EXT is treated the
-    same as ename:VK_ACCESS_COLOR_ATTACHMENT_READ_BIT, and advanced blending
-    needs no additional synchronization over basic blending.
-    If this is ename:VK_FALSE, then memory dependencies are required to
-    guarantee order between two advanced blending operations that occur on
-    the same sample.
-
-:refpage: VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT
-include::{chapters}/features.txt[tag=features]
-
-include::{generated}/validity/structs/VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT.txt[]
---
-endif::VK_EXT_blend_operation_advanced[]
-
-ifdef::VK_EXT_conditional_rendering[]
-[open,refpage='VkPhysicalDeviceConditionalRenderingFeaturesEXT',desc='Structure describing if a secondary command buffer can be executed if conditional rendering is active in the primary command buffer',type='structs']
---
-The sname:VkPhysicalDeviceConditionalRenderingFeaturesEXT structure is
-defined as:
-
-include::{generated}/api/structs/VkPhysicalDeviceConditionalRenderingFeaturesEXT.txt[]
-
-This structure describes the following features:
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * [[features-conditionalRendering]] pname:conditionalRendering specifies
-    whether conditional rendering is supported.
-  * [[features-inheritedConditionalRendering]]
-    pname:inheritedConditionalRendering specifies whether a secondary
-    command buffer can: be executed while conditional rendering is active in
-    the primary command buffer.
-
-:refpage: VkPhysicalDeviceConditionalRenderingFeaturesEXT
-include::{chapters}/features.txt[tag=features]
-
-include::{generated}/validity/structs/VkPhysicalDeviceConditionalRenderingFeaturesEXT.txt[]
---
-endif::VK_EXT_conditional_rendering[]
-
-ifdef::VK_VERSION_1_1[]
-[open,refpage='VkPhysicalDeviceShaderDrawParametersFeatures',desc='Structure describing shader draw parameter features that can be supported by an implementation',type='structs',alias='VkPhysicalDeviceShaderDrawParameterFeatures']
---
-The sname:VkPhysicalDeviceShaderDrawParametersFeatures structure is defined
-as:
-
-include::{generated}/api/structs/VkPhysicalDeviceShaderDrawParametersFeatures.txt[]
-
-include::{generated}/api/structs/VkPhysicalDeviceShaderDrawParameterFeatures.txt[]
-
-This structure describes the following feature:
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-
-// Must have preceding whitespace
-ifdef::VK_VERSION_1_2[:anchor-prefix: extension-]
-ifndef::VK_VERSION_1_2[:anchor-prefix:]
-// tag::VK_KHR_shader_draw_parameters-features[]
-  * [[{anchor-prefix}features-shaderDrawParameters]]
-    pname:shaderDrawParameters specifies whether the implementation supports
-    the SPIR-V code:DrawParameters capability.
-    When this feature is not enabled, shader modules must: not declare the
-    `SPV_KHR_shader_draw_parameters` extension or the code:DrawParameters
-    capability.
-// end::VK_KHR_shader_draw_parameters-features[]
-
-:refpage: VkPhysicalDeviceShaderDrawParametersFeatures
-include::{chapters}/features.txt[tag=features]
-
-include::{generated}/validity/structs/VkPhysicalDeviceShaderDrawParametersFeatures.txt[]
---
-endif::VK_VERSION_1_1[]
-
-ifdef::VK_NV_mesh_shader[]
-[open,refpage='VkPhysicalDeviceMeshShaderFeaturesNV',desc='Structure describing mesh shading features that can be supported by an implementation',type='structs']
---
-The sname:VkPhysicalDeviceMeshShaderFeaturesNV structure is defined as:
-
-include::{generated}/api/structs/VkPhysicalDeviceMeshShaderFeaturesNV.txt[]
-
-This structure describes the following features:
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * [[features-taskShader]] pname:taskShader indicates whether the task
-    shader stage is supported.
-  * [[features-meshShader]] pname:meshShader indicates whether the mesh
-    shader stage is supported.
-
-:refpage: VkPhysicalDeviceMeshShaderFeaturesNV
-include::{chapters}/features.txt[tag=features]
-
-include::{generated}/validity/structs/VkPhysicalDeviceMeshShaderFeaturesNV.txt[]
---
-endif::VK_NV_mesh_shader[]
-
-ifdef::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
-[open,refpage='VkPhysicalDeviceDescriptorIndexingFeatures',desc='Structure describing descriptor indexing features that can be supported by an implementation',type='structs',alias='VkPhysicalDeviceDescriptorIndexingFeaturesEXT']
---
-The sname:VkPhysicalDeviceDescriptorIndexingFeatures structure is defined
-as:
-
-include::{generated}/api/structs/VkPhysicalDeviceDescriptorIndexingFeatures.txt[]
-
-ifdef::VK_EXT_descriptor_indexing[]
-or the equivalent
-
-include::{generated}/api/structs/VkPhysicalDeviceDescriptorIndexingFeaturesEXT.txt[]
-endif::VK_EXT_descriptor_indexing[]
-
-This structure describes the following features:
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-
-// Must have preceding whitespace
-ifdef::VK_VERSION_1_2[:anchor-prefix: extension-]
-ifndef::VK_VERSION_1_2[:anchor-prefix:]
-// tag::VK_EXT_descriptor_indexing-features[]
-  * [[{anchor-prefix}features-shaderInputAttachmentArrayDynamicIndexing]]
-    pname:shaderInputAttachmentArrayDynamicIndexing indicates whether arrays
-    of input attachments can: be indexed by dynamically uniform integer
-    expressions in shader code.
-    If this feature is not enabled, resources with a descriptor type of
-    ename:VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT must: be indexed only by
-    constant integral expressions when aggregated into arrays in shader
-    code.
-    This also indicates whether shader modules can: declare the
-    code:InputAttachmentArrayDynamicIndexing capability.
-  * [[{anchor-prefix}features-shaderUniformTexelBufferArrayDynamicIndexing]]
-    pname:shaderUniformTexelBufferArrayDynamicIndexing indicates whether
-    arrays of uniform texel buffers can: be indexed by dynamically uniform
-    integer expressions in shader code.
-    If this feature is not enabled, resources with a descriptor type of
-    ename:VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER must: be indexed only by
-    constant integral expressions when aggregated into arrays in shader
-    code.
-    This also indicates whether shader modules can: declare the
-    code:UniformTexelBufferArrayDynamicIndexing capability.
-  * [[{anchor-prefix}features-shaderStorageTexelBufferArrayDynamicIndexing]]
-    pname:shaderStorageTexelBufferArrayDynamicIndexing indicates whether
-    arrays of storage texel buffers can: be indexed by dynamically uniform
-    integer expressions in shader code.
-    If this feature is not enabled, resources with a descriptor type of
-    ename:VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER must: be indexed only by
-    constant integral expressions when aggregated into arrays in shader
-    code.
-    This also indicates whether shader modules can: declare the
-    code:StorageTexelBufferArrayDynamicIndexing capability.
-  * [[{anchor-prefix}features-shaderUniformBufferArrayNonUniformIndexing]]
-    pname:shaderUniformBufferArrayNonUniformIndexing indicates whether
-    arrays of uniform buffers can: be indexed by non-uniform integer
-    expressions in shader code.
-    If this feature is not enabled, resources with a descriptor type of
-    ename:VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER or
-    ename:VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC must: not be indexed by
-    non-uniform integer expressions when aggregated into arrays in shader
-    code.
-    This also indicates whether shader modules can: declare the
-    code:UniformBufferArrayNonUniformIndexing capability.
-  * [[{anchor-prefix}features-shaderSampledImageArrayNonUniformIndexing]]
-    pname:shaderSampledImageArrayNonUniformIndexing indicates whether arrays
-    of samplers or sampled images can: be indexed by non-uniform integer
-    expressions in shader code.
-    If this feature is not enabled, resources with a descriptor type of
-    ename:VK_DESCRIPTOR_TYPE_SAMPLER,
-    ename:VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, or
-    ename:VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE must: not be indexed by
-    non-uniform integer expressions when aggregated into arrays in shader
-    code.
-    This also indicates whether shader modules can: declare the
-    code:SampledImageArrayNonUniformIndexing capability.
-  * [[{anchor-prefix}features-shaderStorageBufferArrayNonUniformIndexing]]
-    pname:shaderStorageBufferArrayNonUniformIndexing indicates whether
-    arrays of storage buffers can: be indexed by non-uniform integer
-    expressions in shader code.
-    If this feature is not enabled, resources with a descriptor type of
-    ename:VK_DESCRIPTOR_TYPE_STORAGE_BUFFER or
-    ename:VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC must: not be indexed by
-    non-uniform integer expressions when aggregated into arrays in shader
-    code.
-    This also indicates whether shader modules can: declare the
-    code:StorageBufferArrayNonUniformIndexing capability.
-  * [[{anchor-prefix}features-shaderStorageImageArrayNonUniformIndexing]]
-    pname:shaderStorageImageArrayNonUniformIndexing indicates whether arrays
-    of storage images can: be indexed by non-uniform integer expressions in
-    shader code.
-    If this feature is not enabled, resources with a descriptor type of
-    ename:VK_DESCRIPTOR_TYPE_STORAGE_IMAGE must: not be indexed by
-    non-uniform integer expressions when aggregated into arrays in shader
-    code.
-    This also indicates whether shader modules can: declare the
-    code:StorageImageArrayNonUniformIndexing capability.
-  * [[{anchor-prefix}features-shaderInputAttachmentArrayNonUniformIndexing]]
-    pname:shaderInputAttachmentArrayNonUniformIndexing indicates whether
-    arrays of input attachments can: be indexed by non-uniform integer
-    expressions in shader code.
-    If this feature is not enabled, resources with a descriptor type of
-    ename:VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT must: not be indexed by
-    non-uniform integer expressions when aggregated into arrays in shader
-    code.
-    This also indicates whether shader modules can: declare the
-    code:InputAttachmentArrayNonUniformIndexing capability.
-  * [[{anchor-prefix}features-shaderUniformTexelBufferArrayNonUniformIndexing]]
-    pname:shaderUniformTexelBufferArrayNonUniformIndexing indicates whether
-    arrays of uniform texel buffers can: be indexed by non-uniform integer
-    expressions in shader code.
-    If this feature is not enabled, resources with a descriptor type of
-    ename:VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER must: not be indexed by
-    non-uniform integer expressions when aggregated into arrays in shader
-    code.
-    This also indicates whether shader modules can: declare the
-    code:UniformTexelBufferArrayNonUniformIndexing capability.
-  * [[{anchor-prefix}features-shaderStorageTexelBufferArrayNonUniformIndexing]]
-    pname:shaderStorageTexelBufferArrayNonUniformIndexing indicates whether
-    arrays of storage texel buffers can: be indexed by non-uniform integer
-    expressions in shader code.
-    If this feature is not enabled, resources with a descriptor type of
-    ename:VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER must: not be indexed by
-    non-uniform integer expressions when aggregated into arrays in shader
-    code.
-    This also indicates whether shader modules can: declare the
-    code:StorageTexelBufferArrayNonUniformIndexing capability.
-  * [[{anchor-prefix}features-descriptorBindingUniformBufferUpdateAfterBind]]
-    pname:descriptorBindingUniformBufferUpdateAfterBind indicates whether
-    the implementation supports updating uniform buffer descriptors after a
-    set is bound.
-    If this feature is not enabled,
-    ename:VK_DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT must: not be used with
-    ename:VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER.
-  * [[{anchor-prefix}features-descriptorBindingSampledImageUpdateAfterBind]]
-    pname:descriptorBindingSampledImageUpdateAfterBind indicates whether the
-    implementation supports updating sampled image descriptors after a set
-    is bound.
-    If this feature is not enabled,
-    ename:VK_DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT must: not be used with
-    ename:VK_DESCRIPTOR_TYPE_SAMPLER,
-    ename:VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, or
-    ename:VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE.
-  * [[{anchor-prefix}features-descriptorBindingStorageImageUpdateAfterBind]]
-    pname:descriptorBindingStorageImageUpdateAfterBind indicates whether the
-    implementation supports updating storage image descriptors after a set
-    is bound.
-    If this feature is not enabled,
-    ename:VK_DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT must: not be used with
-    ename:VK_DESCRIPTOR_TYPE_STORAGE_IMAGE.
-  * [[{anchor-prefix}features-descriptorBindingStorageBufferUpdateAfterBind]]
-    pname:descriptorBindingStorageBufferUpdateAfterBind indicates whether
-    the implementation supports updating storage buffer descriptors after a
-    set is bound.
-    If this feature is not enabled,
-    ename:VK_DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT must: not be used with
-    ename:VK_DESCRIPTOR_TYPE_STORAGE_BUFFER.
-  * [[{anchor-prefix}features-descriptorBindingUniformTexelBufferUpdateAfterBind]]
-    pname:descriptorBindingUniformTexelBufferUpdateAfterBind indicates
-    whether the implementation supports updating uniform texel buffer
-    descriptors after a set is bound.
-    If this feature is not enabled,
-    ename:VK_DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT must: not be used with
-    ename:VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER.
-  * [[{anchor-prefix}features-descriptorBindingStorageTexelBufferUpdateAfterBind]]
-    pname:descriptorBindingStorageTexelBufferUpdateAfterBind indicates
-    whether the implementation supports updating storage texel buffer
-    descriptors after a set is bound.
-    If this feature is not enabled,
-    ename:VK_DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT must: not be used with
-    ename:VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER.
-  * [[{anchor-prefix}features-descriptorBindingUpdateUnusedWhilePending]]
-    pname:descriptorBindingUpdateUnusedWhilePending indicates whether the
-    implementation supports updating descriptors while the set is in use.
-    If this feature is not enabled,
-    ename:VK_DESCRIPTOR_BINDING_UPDATE_UNUSED_WHILE_PENDING_BIT must: not be
-    used.
-  * [[{anchor-prefix}features-descriptorBindingPartiallyBound]]
-    pname:descriptorBindingPartiallyBound indicates whether the
-    implementation supports statically using a descriptor set binding in
-    which some descriptors are not valid.
-    If this feature is not enabled,
-    ename:VK_DESCRIPTOR_BINDING_PARTIALLY_BOUND_BIT must: not be used.
-  * [[{anchor-prefix}features-descriptorBindingVariableDescriptorCount]]
-    pname:descriptorBindingVariableDescriptorCount indicates whether the
-    implementation supports descriptor sets with a variable-sized last
-    binding.
-    If this feature is not enabled,
-    ename:VK_DESCRIPTOR_BINDING_VARIABLE_DESCRIPTOR_COUNT_BIT must: not be
-    used.
-  * [[{anchor-prefix}features-runtimeDescriptorArray]]
-    pname:runtimeDescriptorArray indicates whether the implementation
-    supports the SPIR-V code:RuntimeDescriptorArray capability.
-    If this feature is not enabled, descriptors must: not be declared in
-    runtime arrays.
-// end::VK_EXT_descriptor_indexing-features[]
-
-:refpage: VkPhysicalDeviceDescriptorIndexingFeatures
-include::{chapters}/features.txt[tag=features]
-
-include::{generated}/validity/structs/VkPhysicalDeviceDescriptorIndexingFeatures.txt[]
---
-endif::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
-
-ifdef::VK_EXT_vertex_attribute_divisor[]
-[open,refpage='VkPhysicalDeviceVertexAttributeDivisorFeaturesEXT',desc='Structure describing if fetching of vertex attribute may be repeated for instanced rendering',type='structs']
---
-The sname:VkPhysicalDeviceVertexAttributeDivisorFeaturesEXT structure is
-defined as:
-
-include::{generated}/api/structs/VkPhysicalDeviceVertexAttributeDivisorFeaturesEXT.txt[]
-
-This structure describes the following features:
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * [[features-vertexAttributeInstanceRateDivisor]]
-    pname:vertexAttributeInstanceRateDivisor specifies whether vertex
-    attribute fetching may be repeated in case of instanced rendering.
-  * [[features-vertexAttributeInstanceRateZeroDivisor]]
-    pname:vertexAttributeInstanceRateZeroDivisor specifies whether a zero
-    value for sname:VkVertexInputBindingDivisorDescriptionEXT::pname:divisor
-    is supported.
-
-:refpage: VkPhysicalDeviceVertexAttributeDivisorFeaturesEXT
-include::{chapters}/features.txt[tag=features]
-
-include::{generated}/validity/structs/VkPhysicalDeviceVertexAttributeDivisorFeaturesEXT.txt[]
---
-endif::VK_EXT_vertex_attribute_divisor[]
-
-ifdef::VK_EXT_astc_decode_mode[]
-[open,refpage='VkPhysicalDeviceASTCDecodeFeaturesEXT',desc='Structure describing ASTC decode mode features',type='structs']
---
-The sname:VkPhysicalDeviceASTCDecodeFeaturesEXT structure is defined as:
-
-include::{generated}/api/structs/VkPhysicalDeviceASTCDecodeFeaturesEXT.txt[]
-
-This structure describes the following feature:
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * [[features-astc-decodeModeSharedExponent]]
-    pname:decodeModeSharedExponent indicates whether the implementation
-    supports decoding ASTC compressed formats to
-    ename:VK_FORMAT_E5B9G9R9_UFLOAT_PACK32 internal precision.
-
-:refpage: VkPhysicalDeviceASTCDecodeFeaturesEXT
-include::{chapters}/features.txt[tag=features]
-
-include::{generated}/validity/structs/VkPhysicalDeviceASTCDecodeFeaturesEXT.txt[]
---
-endif::VK_EXT_astc_decode_mode[]
-
-ifdef::VK_EXT_transform_feedback[]
-[open,refpage='VkPhysicalDeviceTransformFeedbackFeaturesEXT',desc='Structure describing transform feedback features that can be supported by an implementation',type='structs']
---
-The sname:VkPhysicalDeviceTransformFeedbackFeaturesEXT structure is defined
-as:
-
-include::{generated}/api/structs/VkPhysicalDeviceTransformFeedbackFeaturesEXT.txt[]
-
-This structure describes the following features:
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * [[features-transformFeedback]] pname:transformFeedback indicates whether
-    the implementation supports transform feedback and shader modules can:
-    declare the code:TransformFeedback capability.
-  * [[features-geometryStreams]] pname:geometryStreams indicates whether the
-    implementation supports the code:GeometryStreams SPIR-V capability.
-
-:refpage: VkPhysicalDeviceTransformFeedbackFeaturesEXT
-include::{chapters}/features.txt[tag=features]
-
-include::{generated}/validity/structs/VkPhysicalDeviceTransformFeedbackFeaturesEXT.txt[]
---
-endif::VK_EXT_transform_feedback[]
-
-ifdef::VK_VERSION_1_2,VK_KHR_vulkan_memory_model[]
-[open,refpage='VkPhysicalDeviceVulkanMemoryModelFeatures',desc='Structure describing features supported by the memory model',type='structs']
---
-The sname:VkPhysicalDeviceVulkanMemoryModelFeatures structure is defined as:
-
-include::{generated}/api/structs/VkPhysicalDeviceVulkanMemoryModelFeatures.txt[]
-
-ifdef::VK_KHR_vulkan_memory_model[]
-or the equivalent
-
-include::{generated}/api/structs/VkPhysicalDeviceVulkanMemoryModelFeaturesKHR.txt[]
-endif::VK_KHR_vulkan_memory_model[]
-
-This structure describes the following features:
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-
-// Must have preceding whitespace
-ifdef::VK_VERSION_1_2[:anchor-prefix: extension-]
-ifndef::VK_VERSION_1_2[:anchor-prefix:]
-// tag::VK_KHR_vulkan_memory_model-features[]
-  * [[{anchor-prefix}features-vulkanMemoryModel]] pname:vulkanMemoryModel
-    indicates whether the Vulkan Memory Model is supported, as defined in
-    <<memory-model,Vulkan Memory Model>>.
-    This also indicates whether shader modules can: declare the
-    code:VulkanMemoryModel capability.
-  * [[{anchor-prefix}features-vulkanMemoryModelDeviceScope]]
-    pname:vulkanMemoryModelDeviceScope indicates whether the Vulkan Memory
-    Model can use code:Device scope synchronization.
-    This also indicates whether shader modules can: declare the
-    code:VulkanMemoryModelDeviceScope capability.
-  * [[{anchor-prefix}features-vulkanMemoryModelAvailabilityVisibilityChains]]
-    pname:vulkanMemoryModelAvailabilityVisibilityChains indicates whether
-    the Vulkan Memory Model can use <<memory-model-availability-visibility,
-    availability and visibility chains>> with more than one element.
-// end::VK_KHR_vulkan_memory_model-features[]
-
-:refpage: VkPhysicalDeviceVulkanMemoryModelFeaturesKHR
-include::{chapters}/features.txt[tag=features]
-
-include::{generated}/validity/structs/VkPhysicalDeviceVulkanMemoryModelFeatures.txt[]
---
-endif::VK_VERSION_1_2,VK_KHR_vulkan_memory_model[]
-
-ifdef::VK_EXT_inline_uniform_block[]
-[open,refpage='VkPhysicalDeviceInlineUniformBlockFeaturesEXT',desc='Structure describing inline uniform block features that can be supported by an implementation',type='structs']
---
-The sname:VkPhysicalDeviceInlineUniformBlockFeaturesEXT structure is defined
-as:
-
-include::{generated}/api/structs/VkPhysicalDeviceInlineUniformBlockFeaturesEXT.txt[]
-
-This structure describes the following features:
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * [[features-inlineUniformBlock]] pname:inlineUniformBlock indicates
-    whether the implementation supports inline uniform block descriptors.
-    If this feature is not enabled,
-    ename:VK_DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK_EXT must: not be used.
-  * [[features-descriptorBindingInlineUniformBlockUpdateAfterBind]]
-    pname:descriptorBindingInlineUniformBlockUpdateAfterBind
-ifndef::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
-    is ename:VK_FALSE and reserved for future use.
-endif::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
-ifdef::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
-    indicates whether the implementation supports updating inline uniform
-    block descriptors after a set is bound.
-    If this feature is not enabled,
-    ename:VK_DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT must: not be used with
-    ename:VK_DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK_EXT.
-endif::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
-
-:refpage: VkPhysicalDeviceInlineUniformBlockFeaturesEXT
-include::{chapters}/features.txt[tag=features]
-
-include::{generated}/validity/structs/VkPhysicalDeviceInlineUniformBlockFeaturesEXT.txt[]
---
-endif::VK_EXT_inline_uniform_block[]
-
-ifdef::VK_NV_representative_fragment_test[]
-[open,refpage='VkPhysicalDeviceRepresentativeFragmentTestFeaturesNV',desc='Structure describing the representative fragment test features that can be supported by an implementation',type='structs']
---
-The sname:VkPhysicalDeviceRepresentativeFragmentTestFeaturesNV structure is
-defined as:
-
-include::{generated}/api/structs/VkPhysicalDeviceRepresentativeFragmentTestFeaturesNV.txt[]
-
-This structure describes the following feature:
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * [[features-representativeFragmentTest]] pname:representativeFragmentTest
-    indicates whether the implementation supports the representative
-    fragment test.
-    See <<fragops-rep-frag-test, Representative Fragment Test>>.
-
-:refpage: VkPhysicalDeviceRepresentativeFragmentTestFeaturesNV
-include::{chapters}/features.txt[tag=features]
-
-include::{generated}/validity/structs/VkPhysicalDeviceRepresentativeFragmentTestFeaturesNV.txt[]
---
-endif::VK_NV_representative_fragment_test[]
-
-ifdef::VK_NV_scissor_exclusive[]
-[open,refpage='VkPhysicalDeviceExclusiveScissorFeaturesNV',desc='Structure describing exclusive scissor features that can be supported by an implementation',type='structs']
---
-The sname:VkPhysicalDeviceExclusiveScissorFeaturesNV structure is defined
-as:
-
-include::{generated}/api/structs/VkPhysicalDeviceExclusiveScissorFeaturesNV.txt[]
-
-This structure describes the following feature:
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * [[features-exclusiveScissor]] pname:exclusiveScissor indicates that the
-    implementation supports the exclusive scissor test.
-
-See <<fragops-exclusive-scissor,Exclusive Scissor Test>> for more
-information.
-
-:refpage: VkPhysicalDeviceExclusiveScissorFeaturesNV
-include::{chapters}/features.txt[tag=features]
-
-include::{generated}/validity/structs/VkPhysicalDeviceExclusiveScissorFeaturesNV.txt[]
---
-endif::VK_NV_scissor_exclusive[]
-
-ifdef::VK_NV_corner_sampled_image[]
-[open,refpage='VkPhysicalDeviceCornerSampledImageFeaturesNV',desc='Structure describing corner sampled image features that can be supported by an implementation',type='structs']
---
-The sname:VkPhysicalDeviceCornerSampledImageFeaturesNV structure is defined
-as:
-
-include::{generated}/api/structs/VkPhysicalDeviceCornerSampledImageFeaturesNV.txt[]
-
-This structure describes the following feature:
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * [[features-cornersampledimage]] pname:cornerSampledImage specifies
-    whether images can be created with a
-    slink:VkImageCreateInfo::pname:flags containing
-    ename:VK_IMAGE_CREATE_CORNER_SAMPLED_BIT_NV.
-    See <<resources-images-corner-sampled,Corner-Sampled Images>>.
-
-:refpage: VkPhysicalDeviceCornerSampledImageFeaturesNV
-include::{chapters}/features.txt[tag=features]
-
-include::{generated}/validity/structs/VkPhysicalDeviceCornerSampledImageFeaturesNV.txt[]
---
-endif::VK_NV_corner_sampled_image[]
-
-ifdef::VK_NV_compute_shader_derivatives[]
-[open,refpage='VkPhysicalDeviceComputeShaderDerivativesFeaturesNV',desc='Structure describing compute shader derivative features that can be supported by an implementation',type='structs']
---
-The sname:VkPhysicalDeviceComputeShaderDerivativesFeaturesNV structure is
-defined as:
-
-include::{generated}/api/structs/VkPhysicalDeviceComputeShaderDerivativesFeaturesNV.txt[]
-
-This structure describes the following features:
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * [[features-computeDerivativeGroupQuads]]
-    pname:computeDerivativeGroupQuads indicates that the implementation
-    supports the code:ComputeDerivativeGroupQuadsNV SPIR-V capability.
-  * [[features-computeDerivativeGroupLinear]]
-    pname:computeDerivativeGroupLinear indicates that the implementation
-    supports the code:ComputeDerivativeGroupLinearNV SPIR-V capability.
-
-See <<shaders-scope-quad, Quad shader scope>> for more information.
-
-:refpage: VkPhysicalDeviceComputeShaderDerivativesFeaturesNVfeatures.
-include::{chapters}/features.txt[tag=features]
-
-include::{generated}/validity/structs/VkPhysicalDeviceComputeShaderDerivativesFeaturesNV.txt[]
---
-endif::VK_NV_compute_shader_derivatives[]
-
-ifdef::VK_NV_fragment_shader_barycentric[]
-[open,refpage='VkPhysicalDeviceFragmentShaderBarycentricFeaturesNV',desc='Structure describing barycentric support in fragment shaders that can be supported by an implementation',type='structs']
---
-The sname:VkPhysicalDeviceFragmentShaderBarycentricFeaturesNV structure is
-defined as:
-
-include::{generated}/api/structs/VkPhysicalDeviceFragmentShaderBarycentricFeaturesNV.txt[]
-
-This structure describes the following feature:
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * [[features-fragmentShaderBarycentric]] pname:fragmentShaderBarycentric
-    indicates that the implementation supports the code:BaryCoordNV and
-    code:BaryCoordNoPerspNV SPIR-V fragment shader built-ins and supports
-    the code:PerVertexNV SPIR-V decoration on fragment shader input
-    variables.
-
-See <<primsrast-barycentric,Barycentric Interpolation>> for more
-information.
-
-:refpage: VkPhysicalDeviceFragmentShaderBarycentricFeaturesNV
-include::{chapters}/features.txt[tag=features]
-
-include::{generated}/validity/structs/VkPhysicalDeviceFragmentShaderBarycentricFeaturesNV.txt[]
---
-endif::VK_NV_fragment_shader_barycentric[]
-
-ifdef::VK_NV_shader_image_footprint[]
-[open,refpage='VkPhysicalDeviceShaderImageFootprintFeaturesNV',desc='Structure describing shader image footprint features that can be supported by an implementation',type='structs']
---
-The sname:VkPhysicalDeviceShaderImageFootprintFeaturesNV structure is
-defined as:
-
-include::{generated}/api/structs/VkPhysicalDeviceShaderImageFootprintFeaturesNV.txt[]
-
-This structure describes the following feature:
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * [[features-imageFootprint]] pname:imageFootprint specifies whether the
-    implementation supports the code:ImageFootprintNV SPIR-V capability.
-
-See <<textures-footprint,Texel Footprint Evaluation>> for more information.
-
-:refpage: VkPhysicalDeviceShaderImageFootprintFeaturesNV
-include::{chapters}/features.txt[tag=features]
-
-include::{generated}/validity/structs/VkPhysicalDeviceShaderImageFootprintFeaturesNV.txt[]
---
-endif::VK_NV_shader_image_footprint[]
-
-ifdef::VK_NV_shading_rate_image[]
-[open,refpage='VkPhysicalDeviceShadingRateImageFeaturesNV',desc='Structure describing shading rate image features that can be supported by an implementation',type='structs']
---
-The sname:VkPhysicalDeviceShadingRateImageFeaturesNV structure is defined
-as:
-
-include::{generated}/api/structs/VkPhysicalDeviceShadingRateImageFeaturesNV.txt[]
-
-This structure describes the following features:
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * [[features-shadingRateImage]] pname:shadingRateImage indicates that the
-    implementation supports the use of a shading rate image to derive an
-    effective shading rate for fragment processing.
-    It also indicates that the implementation supports the
-    code:ShadingRateNV SPIR-V execution mode.
-  * [[features-shadingRateCoarseSampleOrder]]
-    pname:shadingRateCoarseSampleOrder indicates that the implementation
-    supports a user-configurable ordering of coverage samples in fragments
-    larger than one pixel.
-
-See <<primsrast-shading-rate-image, Shading Rate Image>> for more
-information.
-
-:refpage: VkPhysicalDeviceShadingRateImageFeaturesNV
-include::{chapters}/features.txt[tag=features]
-
-include::{generated}/validity/structs/VkPhysicalDeviceShadingRateImageFeaturesNV.txt[]
---
-endif::VK_NV_shading_rate_image[]
-
-ifdef::VK_EXT_fragment_density_map[]
-[open,refpage='VkPhysicalDeviceFragmentDensityMapFeaturesEXT',desc='Structure describing fragment density map features that can be supported by an implementation',type='structs']
---
-The sname:VkPhysicalDeviceFragmentDensityMapFeaturesEXT structure is defined
-as:
-
-include::{generated}/api/structs/VkPhysicalDeviceFragmentDensityMapFeaturesEXT.txt[]
-
-This structure describes the following features:
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * [[features-fragmentDensityMap]] pname:fragmentDensityMap specifies
-    whether the implementation supports render passes with a fragment
-    density map attachment.
-    If this feature is not enabled and the pname:pNext chain of
-    slink:VkRenderPassCreateInfo includes a
-    slink:VkRenderPassFragmentDensityMapCreateInfoEXT structure,
-    pname:fragmentDensityMapAttachment must: be ename:VK_ATTACHMENT_UNUSED.
-  * [[features-fragmentDensityMapDynamic]] pname:fragmentDensityMapDynamic
-    specifies whether the implementation supports dynamic fragment density
-    map image views.
-    If this feature is not enabled,
-    ename:VK_IMAGE_VIEW_CREATE_FRAGMENT_DENSITY_MAP_DYNAMIC_BIT_EXT must:
-    not be included in slink:VkImageViewCreateInfo::pname:flags.
-  * [[features-fragmentDensityMapNonSubsampledImages]]
-    pname:fragmentDensityMapNonSubsampledImages specifies whether the
-    implementation supports regular non-subsampled image attachments with
-    fragment density map render passes.
-    If this feature is not enabled, render passes with a
-    <<renderpass-fragmentdensitymapattachment,fragment density map
-    attachment>> must: only have <<samplers-subsamplesampler,subsampled
-    attachments>> bound.
-
-:refpage: VkPhysicalDeviceFragmentDensityMapFeaturesEXT
-include::{chapters}/features.txt[tag=features]
-
-include::{generated}/validity/structs/VkPhysicalDeviceFragmentDensityMapFeaturesEXT.txt[]
---
-endif::VK_EXT_fragment_density_map[]
-
-ifdef::VK_EXT_fragment_density_map2[]
-[open,refpage='VkPhysicalDeviceFragmentDensityMap2FeaturesEXT',desc='Structure describing additional fragment density map features that can be supported by an implementation',type='structs']
---
-The sname:VkPhysicalDeviceFragmentDensityMap2FeaturesEXT structure is
-defined as:
-
-include::{generated}/api/structs/VkPhysicalDeviceFragmentDensityMap2FeaturesEXT.txt[]
-
-This structure describes the following features:
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * [[features-fragmentDensityMapDeferred]] pname:fragmentDensityMapDeferred
-    specifies whether the implementation supports deferred reads of fragment
-    density map image views.
-    If this feature is not enabled,
-    ename:VK_IMAGE_VIEW_CREATE_FRAGMENT_DENSITY_MAP_DEFERRED_BIT_EXT must:
-    not be included in sname:VkImageViewCreateInfo::pname:flags.
-
-:refpage: VkPhysicalDeviceFragmentDensityMap2FeaturesEXT
-include::{chapters}/features.txt[tag=features]
-
-include::{generated}/validity/structs/VkPhysicalDeviceFragmentDensityMap2FeaturesEXT.txt[]
---
-endif::VK_EXT_fragment_density_map2[]
-
-ifdef::VK_HUAWEI_invocation_mask[]
-[open,refpage='VkPhysicalDeviceInvocationMaskFeaturesHUAWEI',desc='Structure describing invocation mask features that can be supported by an implementation',type='structs']
---
-The sname:VkPhysicalDeviceInvocationMaskFeaturesHUAWEI structure is defined
-as:
-
-include::{generated}/api/structs/VkPhysicalDeviceInvocationMaskFeaturesHUAWEI.txt[]
-
-This structure describes the following features:
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * [[features-invocationMask]] pname:invocationMask indicates that the
-    implementation supports the use of an invocation mask image to optimize
-    the ray dispatch.
-
-:refpage: VkPhysicalDeviceInvocationMaskFeaturesHUAWEI
-include::{chapters}/features.txt[tag=features]
-
-include::{generated}/validity/structs/VkPhysicalDeviceInvocationMaskFeaturesHUAWEI.txt[]
---
-endif::VK_HUAWEI_invocation_mask[]
-
-ifdef::VK_VERSION_1_2,VK_EXT_scalar_block_layout[]
-[open,refpage='VkPhysicalDeviceScalarBlockLayoutFeatures',desc='Structure indicating support for scalar block layouts',type='structs',alias='VkPhysicalDeviceScalarBlockLayoutFeaturesEXT']
---
-The sname:VkPhysicalDeviceScalarBlockLayoutFeatures structure is defined as:
-
-include::{generated}/api/structs/VkPhysicalDeviceScalarBlockLayoutFeatures.txt[]
-
-ifdef::VK_EXT_scalar_block_layout[]
-or the equivalent
-
-include::{generated}/api/structs/VkPhysicalDeviceScalarBlockLayoutFeaturesEXT.txt[]
-endif::VK_EXT_scalar_block_layout[]
-
-This structure describes the following feature:
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-
-// Must have preceding whitespace
-ifdef::VK_VERSION_1_2[:anchor-prefix: extension-]
-ifndef::VK_VERSION_1_2[:anchor-prefix:]
-// tag::VK_EXT_scalar_block_layout-features[]
-  * [[{anchor-prefix}features-scalarBlockLayout]] pname:scalarBlockLayout
-    indicates that the implementation supports the layout of resource blocks
-    in shaders using <<interfaces-alignment-requirements, scalar
-    alignment>>.
-// end::VK_EXT_scalar_block_layout-features[]
-
-:refpage: VkPhysicalDeviceScalarBlockLayoutFeatures
-include::{chapters}/features.txt[tag=features]
-
-include::{generated}/validity/structs/VkPhysicalDeviceScalarBlockLayoutFeatures.txt[]
---
-endif::VK_VERSION_1_2,VK_EXT_scalar_block_layout[]
-
-ifdef::VK_VERSION_1_2,VK_KHR_uniform_buffer_standard_layout[]
-[open,refpage='VkPhysicalDeviceUniformBufferStandardLayoutFeatures',desc='Structure indicating support for std430-like packing in uniform buffers',type='structs',alias='VkPhysicalDeviceUniformBufferStandardLayoutFeaturesKHR']
---
-The sname:VkPhysicalDeviceUniformBufferStandardLayoutFeatures structure is
-defined as:
-
-include::{generated}/api/structs/VkPhysicalDeviceUniformBufferStandardLayoutFeatures.txt[]
-
-ifdef::VK_KHR_uniform_buffer_standard_layout[]
-or the equivalent
-
-include::{generated}/api/structs/VkPhysicalDeviceUniformBufferStandardLayoutFeaturesKHR.txt[]
-endif::VK_KHR_uniform_buffer_standard_layout[]
-
-This structure describes the following feature:
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-
-// Must have preceding whitespace
-ifdef::VK_VERSION_1_2[:anchor-prefix: extension-]
-ifndef::VK_VERSION_1_2[:anchor-prefix:]
-// tag::VK_KHR_uniform_buffer_standard_layout-features[]
-  * [[{anchor-prefix}features-uniformBufferStandardLayout]]
-    pname:uniformBufferStandardLayout indicates that the implementation
-    supports the same layouts for uniform buffers as for storage and other
-    kinds of buffers.
-    See <<interfaces-resources-standard-layout,Standard Buffer Layout>>.
-// end::VK_KHR_uniform_buffer_standard_layout-features[]
-
-:refpage: VkPhysicalDeviceUniformBufferStandardLayoutFeatures
-include::{chapters}/features.txt[tag=features]
-
-include::{generated}/validity/structs/VkPhysicalDeviceUniformBufferStandardLayoutFeatures.txt[]
---
-endif::VK_VERSION_1_2,VK_KHR_uniform_buffer_standard_layout[]
-
-ifdef::VK_EXT_depth_clip_enable[]
-[open,refpage='VkPhysicalDeviceDepthClipEnableFeaturesEXT',desc='Structure indicating support for explicit enable of depth clip',type='structs']
---
-The sname:VkPhysicalDeviceDepthClipEnableFeaturesEXT structure is defined
-as:
-
-include::{generated}/api/structs/VkPhysicalDeviceDepthClipEnableFeaturesEXT.txt[]
-
-This structure describes the following feature:
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * [[features-depthClipEnable]] pname:depthClipEnable indicates that the
-    implementation supports setting the depth clipping operation explicitly
-    via the slink:VkPipelineRasterizationDepthClipStateCreateInfoEXT
-    pipeline state.
-    Otherwise depth clipping is only enabled when
-    slink:VkPipelineRasterizationStateCreateInfo::pname:depthClampEnable is
-    set to ename:VK_FALSE.
-
-:refpage: VkPhysicalDeviceDepthClipEnableFeaturesEXT
-include::{chapters}/features.txt[tag=features]
-
-include::{generated}/validity/structs/VkPhysicalDeviceDepthClipEnableFeaturesEXT.txt[]
---
-endif::VK_EXT_depth_clip_enable[]
-
-ifdef::VK_EXT_memory_priority[]
-[open,refpage='VkPhysicalDeviceMemoryPriorityFeaturesEXT',desc='Structure describing memory priority features that can be supported by an implementation',type='structs']
---
-The sname:VkPhysicalDeviceMemoryPriorityFeaturesEXT structure is defined as:
-
-include::{generated}/api/structs/VkPhysicalDeviceMemoryPriorityFeaturesEXT.txt[]
-
-This structure describes the following feature:
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * [[features-memoryPriority]] pname:memoryPriority indicates that the
-    implementation supports memory priorities specified at memory allocation
-    time via slink:VkMemoryPriorityAllocateInfoEXT.
-
-:refpage: VkPhysicalDeviceMemoryPriorityFeaturesEXT
-include::{chapters}/features.txt[tag=features]
-
-include::{generated}/validity/structs/VkPhysicalDeviceMemoryPriorityFeaturesEXT.txt[]
---
-endif::VK_EXT_memory_priority[]
-
-ifdef::VK_VERSION_1_2,VK_KHR_buffer_device_address[]
-[open,refpage='VkPhysicalDeviceBufferDeviceAddressFeatures',desc='Structure describing buffer address features that can be supported by an implementation',type='structs',alias='VkPhysicalDeviceBufferDeviceAddressFeaturesKHR']
---
-The sname:VkPhysicalDeviceBufferDeviceAddressFeatures structure is defined
-as:
-
-include::{generated}/api/structs/VkPhysicalDeviceBufferDeviceAddressFeatures.txt[]
-
-ifdef::VK_KHR_buffer_device_address[]
-or the equivalent
-
-include::{generated}/api/structs/VkPhysicalDeviceBufferDeviceAddressFeaturesKHR.txt[]
-endif::VK_KHR_buffer_device_address[]
-
-This structure describes the following features:
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-
-// Must have preceding whitespace
-ifdef::VK_VERSION_1_2[:anchor-prefix: extension-]
-ifndef::VK_VERSION_1_2[:anchor-prefix:]
-// tag::VK_EXT_buffer_device_address-features[]
-  * [[{anchor-prefix}features-bufferDeviceAddress]]
-    pname:bufferDeviceAddress indicates that the implementation supports
-    accessing buffer memory in shaders as storage buffers via an address
-    queried from flink:vkGetBufferDeviceAddress.
-  * [[{anchor-prefix}features-bufferDeviceAddressCaptureReplay]]
-    pname:bufferDeviceAddressCaptureReplay indicates that the implementation
-    supports saving and reusing buffer and device addresses, e.g. for trace
-    capture and replay.
-  * [[{anchor-prefix}features-bufferDeviceAddressMultiDevice]]
-    pname:bufferDeviceAddressMultiDevice indicates that the implementation
-    supports the pname:bufferDeviceAddress
-ifndef::VK_KHR_ray_tracing_pipeline+VK_KHR_ray_query[feature]
-ifdef::VK_KHR_ray_tracing_pipeline[]
-ifndef::VK_KHR_ray_query[]
-    and pname:rayTracingPipeline features
-endif::VK_KHR_ray_query[]
-ifdef::VK_KHR_ray_query[]
-    , pname:rayTracingPipeline and pname:rayQuery features
-endif::VK_KHR_ray_query[]
-endif::VK_KHR_ray_tracing_pipeline[]
-ifndef::VK_KHR_ray_tracing_pipeline[]
-ifdef::VK_KHR_ray_query[]
-    and pname:rayQuery features
-endif::VK_KHR_ray_query[]
-endif::VK_KHR_ray_tracing_pipeline[]
-    for logical devices created with multiple physical devices.
-    If this feature is not supported, buffer
-ifdef::VK_KHR_acceleration_structure[]
-    and acceleration structure
-endif::VK_KHR_acceleration_structure[]
-    addresses must: not be queried on a logical device created with more
-    than one physical device.
-// end::VK_EXT_buffer_device_address-features[]
-
-[NOTE]
-.Note
-====
-pname:bufferDeviceAddressMultiDevice exists to allow certain legacy
-platforms to be able to support pname:bufferDeviceAddress without needing to
-support shared GPU virtual addresses for multi-device configurations.
-====
-
-See flink:vkGetBufferDeviceAddress for more information.
-
-:refpage: VkPhysicalDeviceBufferDeviceAddressFeatures
-include::{chapters}/features.txt[tag=features]
-
-include::{generated}/validity/structs/VkPhysicalDeviceBufferDeviceAddressFeatures.txt[]
---
-endif::VK_VERSION_1_2,VK_KHR_buffer_device_address[]
-
-ifdef::VK_EXT_buffer_device_address[]
-[open,refpage='VkPhysicalDeviceBufferDeviceAddressFeaturesEXT',desc='Structure describing buffer address features that can be supported by an implementation',type='structs',alias='VkPhysicalDeviceBufferAddressFeaturesEXT']
---
-The sname:VkPhysicalDeviceBufferDeviceAddressFeaturesEXT structure is
-defined as:
-
-include::{generated}/api/structs/VkPhysicalDeviceBufferDeviceAddressFeaturesEXT.txt[]
-
-include::{generated}/api/structs/VkPhysicalDeviceBufferAddressFeaturesEXT.txt[]
-
-This structure describes the following features:
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * [[features-bufferDeviceAddressEXT]] pname:bufferDeviceAddress indicates
-    that the implementation supports accessing buffer memory in shaders as
-    storage buffers via an address queried from
-    flink:vkGetBufferDeviceAddressEXT.
-  * [[features-bufferDeviceAddressCaptureReplayEXT]]
-    pname:bufferDeviceAddressCaptureReplay indicates that the implementation
-    supports saving and reusing buffer addresses, e.g. for trace capture and
-    replay.
-  * [[features-bufferDeviceAddressMultiDeviceEXT]]
-    pname:bufferDeviceAddressMultiDevice indicates that the implementation
-    supports the pname:bufferDeviceAddress feature for logical devices
-    created with multiple physical devices.
-    If this feature is not supported, buffer addresses must: not be queried
-    on a logical device created with more than one physical device.
-
-:refpage: VkPhysicalDeviceBufferDeviceAddressFeaturesEXT
-include::{chapters}/features.txt[tag=features]
-
-ifdef::VK_VERSION_1_2,VK_KHR_buffer_device_address[]
-[NOTE]
-.Note
-====
-The sname:VkPhysicalDeviceBufferDeviceAddressFeaturesEXT structure has the
-same members as the sname:VkPhysicalDeviceBufferDeviceAddressFeatures
-structure, but the functionality indicated by the members is expressed
-differently.
-The features indicated by the
-sname:VkPhysicalDeviceBufferDeviceAddressFeatures structure requires
-additional flags to be passed at memory allocation time, and the capture and
-replay mechanism is built around opaque capture addresses for buffer and
-memory objects.
-====
-endif::VK_VERSION_1_2,VK_KHR_buffer_device_address[]
-
-include::{generated}/validity/structs/VkPhysicalDeviceBufferDeviceAddressFeaturesEXT.txt[]
---
-endif::VK_EXT_buffer_device_address[]
-
-ifdef::VK_NV_dedicated_allocation_image_aliasing[]
-[open,refpage='VkPhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV',desc='Structure describing dedicated allocation image aliasing features that can be supported by an implementation',type='structs']
---
-The sname:VkPhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV
-structure is defined as:
-
-include::{generated}/api/structs/VkPhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV.txt[]
-
-This structure describes the following feature:
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * [[features-dedicatedAllocationImageAliasing]]
-    pname:dedicatedAllocationImageAliasing indicates that the implementation
-    supports aliasing of compatible image objects on a dedicated allocation.
-
-:refpage: VkPhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV
-include::{chapters}/features.txt[tag=features]
-
-include::{generated}/validity/structs/VkPhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV.txt[]
---
-endif::VK_NV_dedicated_allocation_image_aliasing[]
-
-ifdef::VK_VERSION_1_2,VK_KHR_imageless_framebuffer[]
-[open,refpage='VkPhysicalDeviceImagelessFramebufferFeatures',desc='Structure indicating support for imageless framebuffers',type='structs',alias='VkPhysicalDeviceImagelessFramebufferFeaturesKHR']
---
-The sname:VkPhysicalDeviceImagelessFramebufferFeatures structure is defined
-as:
-
-include::{generated}/api/structs/VkPhysicalDeviceImagelessFramebufferFeatures.txt[]
-
-ifdef::VK_KHR_imageless_framebuffer[]
-or the equivalent
-
-include::{generated}/api/structs/VkPhysicalDeviceImagelessFramebufferFeaturesKHR.txt[]
-endif::VK_KHR_imageless_framebuffer[]
-
-This structure describes the following feature:
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-
-// Must have preceding whitespace
-ifdef::VK_VERSION_1_2[:anchor-prefix: extension-]
-ifndef::VK_VERSION_1_2[:anchor-prefix:]
-// tag::VK_KHR_imageless_framebuffer-features[]
-  * [[{anchor-prefix}features-imagelessFramebuffer]]
-    pname:imagelessFramebuffer indicates that the implementation supports
-    specifying the image view for attachments at render pass begin time via
-    slink:VkRenderPassAttachmentBeginInfo.
-// end::VK_KHR_imageless_framebuffer-features[]
-
-:refpage: VkPhysicalDeviceImagelessFramebufferFeatures
-include::{chapters}/features.txt[tag=features]
-
-include::{generated}/validity/structs/VkPhysicalDeviceImagelessFramebufferFeatures.txt[]
---
-endif::VK_VERSION_1_2,VK_KHR_imageless_framebuffer[]
-
-ifdef::VK_EXT_fragment_shader_interlock[]
-[open,refpage='VkPhysicalDeviceFragmentShaderInterlockFeaturesEXT',desc='Structure describing fragment shader interlock features that can be supported by an implementation',type='structs']
---
-The sname:VkPhysicalDeviceFragmentShaderInterlockFeaturesEXT structure is
-defined as:
-
-include::{generated}/api/structs/VkPhysicalDeviceFragmentShaderInterlockFeaturesEXT.txt[]
-
-This structure describes the following features:
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * [[features-fragmentShaderSampleInterlock]]
-    pname:fragmentShaderSampleInterlock indicates that the implementation
-    supports the code:FragmentShaderSampleInterlockEXT SPIR-V capability.
-  * [[features-fragmentShaderPixelInterlock]]
-    pname:fragmentShaderPixelInterlock indicates that the implementation
-    supports the code:FragmentShaderPixelInterlockEXT SPIR-V capability.
-  * [[features-fragmentShaderShadingRateInterlock]]
-    pname:fragmentShaderShadingRateInterlock indicates that the
-    implementation supports the code:FragmentShaderShadingRateInterlockEXT
-    SPIR-V capability.
-
-:refpage: VkPhysicalDeviceFragmentShaderInterlockFeaturesEXT
-include::{chapters}/features.txt[tag=features]
-
-include::{generated}/validity/structs/VkPhysicalDeviceFragmentShaderInterlockFeaturesEXT.txt[]
---
-endif::VK_EXT_fragment_shader_interlock[]
-
-ifdef::VK_NV_cooperative_matrix[]
-[open,refpage='VkPhysicalDeviceCooperativeMatrixFeaturesNV',desc='Structure describing cooperative matrix features that can be supported by an implementation',type='structs']
---
-The sname:VkPhysicalDeviceCooperativeMatrixFeaturesNV structure is defined
-as:
-
-include::{generated}/api/structs/VkPhysicalDeviceCooperativeMatrixFeaturesNV.txt[]
-
-This structure describes the following features:
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * [[features-cooperativeMatrix]] pname:cooperativeMatrix indicates that
-    the implementation supports the code:CooperativeMatrixNV SPIR-V
-    capability.
-  * [[features-cooperativeMatrixRobustBufferAccess]]
-    pname:cooperativeMatrixRobustBufferAccess indicates that the
-    implementation supports robust buffer access for SPIR-V
-    code:OpCooperativeMatrixLoadNV and code:OpCooperativeMatrixStoreNV
-    instructions.
-
-:refpage: VkPhysicalDeviceCooperativeMatrixFeaturesNV
-include::{chapters}/features.txt[tag=features]
-
-include::{generated}/validity/structs/VkPhysicalDeviceCooperativeMatrixFeaturesNV.txt[]
---
-endif::VK_NV_cooperative_matrix[]
-
-ifdef::VK_EXT_ycbcr_image_arrays[]
-[open,refpage='VkPhysicalDeviceYcbcrImageArraysFeaturesEXT',desc='Structure describing extended {YCbCr} image creation features that can be supported by an implementation',type='structs']
---
-The sname:VkPhysicalDeviceYcbcrImageArraysFeaturesEXT structure is defined
-as:
-
-include::{generated}/api/structs/VkPhysicalDeviceYcbcrImageArraysFeaturesEXT.txt[]
-
-This structure describes the following feature:
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * [[features-ycbcrImageArrays]] pname:ycbcrImageArrays indicates that the
-    implementation supports creating images with a format that requires
-    <<formats-requiring-sampler-ycbcr-conversion, {YCbCr} conversion>> and
-    has multiple array layers.
-
-:refpage: VkPhysicalDeviceYcbcrImageArraysFeaturesEXT
-include::{chapters}/features.txt[tag=features]
-
-include::{generated}/validity/structs/VkPhysicalDeviceYcbcrImageArraysFeaturesEXT.txt[]
---
-endif::VK_EXT_ycbcr_image_arrays[]
-
-ifdef::VK_VERSION_1_1[]
-ifdef::VK_VERSION_1_2,VK_KHR_shader_subgroup_extended_types[]
-[open,refpage='VkPhysicalDeviceShaderSubgroupExtendedTypesFeatures',desc='Structure describing the extended types subgroups support feature for an implementation',type='structs',alias='VkPhysicalDeviceShaderSubgroupExtendedTypesFeaturesKHR']
---
-The sname:VkPhysicalDeviceShaderSubgroupExtendedTypesFeatures structure is
-defined as:
-
-include::{generated}/api/structs/VkPhysicalDeviceShaderSubgroupExtendedTypesFeatures.txt[]
-
-ifdef::VK_KHR_shader_subgroup_extended_types[]
-or the equivalent
-
-include::{generated}/api/structs/VkPhysicalDeviceShaderSubgroupExtendedTypesFeaturesKHR.txt[]
-endif::VK_KHR_shader_subgroup_extended_types[]
-
-This structure describes the following feature:
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-
-// Must have preceding whitespace
-ifdef::VK_VERSION_1_2[:anchor-prefix: extension-]
-ifndef::VK_VERSION_1_2[:anchor-prefix:]
-// tag::VK_KHR_shader_subgroup_extended_types-features[]
-  * [[{anchor-prefix}features-subgroup-extended-types]]
-    pname:shaderSubgroupExtendedTypes is a boolean that specifies whether
-    subgroup operations can use 8-bit integer, 16-bit integer, 64-bit
-    integer, 16-bit floating-point, and vectors of these types in
-    <<shaders-group-operations,group operations>> with
-    <<shaders-scope-subgroup, subgroup scope>>, if the implementation
-    supports the types.
-// end::VK_KHR_shader_subgroup_extended_types-features[]
-
-:refpage: VkPhysicalDeviceShaderSubgroupExtendedTypesFeatures
-include::{chapters}/features.txt[tag=features]
-
-include::{generated}/validity/structs/VkPhysicalDeviceShaderSubgroupExtendedTypesFeatures.txt[]
---
-endif::VK_VERSION_1_2,VK_KHR_shader_subgroup_extended_types[]
-endif::VK_VERSION_1_1[]
-
-ifdef::VK_VERSION_1_2,VK_EXT_host_query_reset[]
-[open,refpage='VkPhysicalDeviceHostQueryResetFeatures',desc='Structure describing whether queries can be reset from the host',type='structs',alias='VkPhysicalDeviceHostQueryResetFeaturesEXT']
---
-The sname:VkPhysicalDeviceHostQueryResetFeatures structure is defined as:
-
-include::{generated}/api/structs/VkPhysicalDeviceHostQueryResetFeatures.txt[]
-
-ifdef::VK_EXT_host_query_reset[]
-or the equivalent
-
-include::{generated}/api/structs/VkPhysicalDeviceHostQueryResetFeaturesEXT.txt[]
-endif::VK_EXT_host_query_reset[]
-
-This structure describes the following feature:
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-
-// Must have preceding whitespace
-ifdef::VK_VERSION_1_2[:anchor-prefix: extension-]
-ifndef::VK_VERSION_1_2[:anchor-prefix:]
-// tag::VK_EXT_host_query_reset-features[]
-  * [[{anchor-prefix}features-hostQueryReset]] pname:hostQueryReset
-    indicates that the implementation supports resetting queries from the
-    host with flink:vkResetQueryPool.
-// end::VK_EXT_host_query_reset-features[]
-
-:refpage: VkPhysicalDeviceHostQueryResetFeatures
-include::{chapters}/features.txt[tag=features]
-
-include::{generated}/validity/structs/VkPhysicalDeviceHostQueryResetFeatures.txt[]
---
-endif::VK_VERSION_1_2,VK_EXT_host_query_reset[]
-
-ifdef::VK_INTEL_shader_integer_functions2[]
-[open,refpage='VkPhysicalDeviceShaderIntegerFunctions2FeaturesINTEL',desc='Structure describing shader integer functions that can be supported by an implementation',type='structs']
---
-The sname:VkPhysicalDeviceShaderIntegerFunctions2FeaturesINTEL structure is
-defined as:
-
-include::{generated}/api/structs/VkPhysicalDeviceShaderIntegerFunctions2FeaturesINTEL.txt[]
-
-This structure describes the following feature:
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * [[features-shaderIntegerFunctions2]] pname:shaderIntegerFunctions2
-    indicates that the implementation supports the
-    code:IntegerFunctions2INTEL SPIR-V capability.
-
-:refpage: VkPhysicalDeviceShaderIntegerFunctions2FeaturesINTELfeatures.
-include::{chapters}/features.txt[tag=features]
-
-include::{generated}/validity/structs/VkPhysicalDeviceShaderIntegerFunctions2FeaturesINTEL.txt[]
---
-endif::VK_INTEL_shader_integer_functions2[]
-
-ifdef::VK_NV_coverage_reduction_mode[]
-[open,refpage='VkPhysicalDeviceCoverageReductionModeFeaturesNV',desc='Structure describing the coverage reduction mode features that can be supported by an implementation',type='structs']
---
-The sname:VkPhysicalDeviceCoverageReductionModeFeaturesNV structure is
-defined as:
-
-include::{generated}/api/structs/VkPhysicalDeviceCoverageReductionModeFeaturesNV.txt[]
-
-This structure describes the following feature:
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * [[features-coverageReductionMode]] pname:coverageReductionMode indicates
-    whether the implementation supports coverage reduction modes.
-    See <<fragops-coverage-reduction, Coverage Reduction>>.
-
-:refpage: VkPhysicalDeviceCoverageReductionModeFeaturesNV
-include::{chapters}/features.txt[tag=features]
-
-include::{generated}/validity/structs/VkPhysicalDeviceCoverageReductionModeFeaturesNV.txt[]
---
-endif::VK_NV_coverage_reduction_mode[]
-
-ifdef::VK_VERSION_1_2,VK_KHR_timeline_semaphore[]
-[open,refpage='VkPhysicalDeviceTimelineSemaphoreFeatures',desc='Structure describing timeline semaphore features that can be supported by an implementation',type='structs',alias='VkPhysicalDeviceTimelineSemaphoreFeaturesKHR']
---
-The sname:VkPhysicalDeviceTimelineSemaphoreFeatures structure is defined as:
-
-include::{generated}/api/structs/VkPhysicalDeviceTimelineSemaphoreFeatures.txt[]
-
-ifdef::VK_KHR_timeline_semaphore[]
-or the equivalent
-
-include::{generated}/api/structs/VkPhysicalDeviceTimelineSemaphoreFeaturesKHR.txt[]
-endif::VK_KHR_timeline_semaphore[]
-
-This structure describes the following feature:
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-
-// Must have preceding whitespace
-ifdef::VK_VERSION_1_2[:anchor-prefix: extension-]
-ifndef::VK_VERSION_1_2[:anchor-prefix:]
-// tag::VK_KHR_timeline_semaphore-features[]
-  * [[{anchor-prefix}features-timelineSemaphore]] pname:timelineSemaphore
-    indicates whether semaphores created with a elink:VkSemaphoreType of
-    ename:VK_SEMAPHORE_TYPE_TIMELINE are supported.
-// end::VK_KHR_timeline_semaphore-features[]
-
-:refpage: VkPhysicalDeviceTimelineSemaphoreFeatures
-include::{chapters}/features.txt[tag=features]
-
-include::{generated}/validity/structs/VkPhysicalDeviceTimelineSemaphoreFeatures.txt[]
---
-endif::VK_VERSION_1_2,VK_KHR_timeline_semaphore[]
-
-ifdef::VK_EXT_index_type_uint8[]
-[open,refpage='VkPhysicalDeviceIndexTypeUint8FeaturesEXT',desc='Structure describing whether uint8 index type can be used',type='structs']
---
-The sname:VkPhysicalDeviceIndexTypeUint8FeaturesEXT structure is defined as:
-
-include::{generated}/api/structs/VkPhysicalDeviceIndexTypeUint8FeaturesEXT.txt[]
-
-This structure describes the following feature:
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * [[features-indexTypeUint8]] pname:indexTypeUint8 indicates that
-    ename:VK_INDEX_TYPE_UINT8_EXT can be used with
-    flink:vkCmdBindIndexBuffer.
-
-:refpage: VkPhysicalDeviceIndexTypeUint8FeaturesEXT
-include::{chapters}/features.txt[tag=features]
-
-include::{generated}/validity/structs/VkPhysicalDeviceIndexTypeUint8FeaturesEXT.txt[]
---
-endif::VK_EXT_index_type_uint8[]
-
-ifdef::VK_EXT_primitive_topology_list_restart[]
-[open,refpage='VkPhysicalDevicePrimitiveTopologyListRestartFeaturesEXT',desc='Structure describing whether list type primitives can support primitive restart',type='structs']
---
-The sname:VkPhysicalDevicePrimitiveTopologyListRestartFeaturesEXT structure
-is defined as:
-
-include::{generated}/api/structs/VkPhysicalDevicePrimitiveTopologyListRestartFeaturesEXT.txt[]
-
-The members of the
-sname:VkPhysicalDevicePrimitiveTopologyListRestartFeaturesEXT structure
-describe the following features:
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * [[features-primitiveTopologyListRestart]]
-    pname:primitiveTopologyListRestart indicates that list type primitives,
-    ename:VK_PRIMITIVE_TOPOLOGY_POINT_LIST,
-    ename:VK_PRIMITIVE_TOPOLOGY_LINE_LIST,
-    ename:VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST,
-    ename:VK_PRIMITIVE_TOPOLOGY_LINE_LIST_WITH_ADJACENCY and
-    ename:VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST_WITH_ADJACENCY, can: use the
-    primitive restart index value in index buffers.
-  * [[features-primitiveTopologyPatchListRestart]]
-    pname:primitiveTopologyPatchListRestart indicates that the
-    ename:VK_PRIMITIVE_TOPOLOGY_PATCH_LIST topology can: use the primitive
-    restart index value in index buffers.
-
-:refpage: VkPhysicalDevicePrimitiveTopologyListRestartFeaturesEXT
-include::{chapters}/features.txt[tag=features]
-
-include::{generated}/validity/structs/VkPhysicalDevicePrimitiveTopologyListRestartFeaturesEXT.txt[]
---
-endif::VK_EXT_primitive_topology_list_restart[]
-
-ifdef::VK_NV_shader_sm_builtins[]
-[open,refpage='VkPhysicalDeviceShaderSMBuiltinsFeaturesNV',desc='Structure describing the shader SM Builtins features that can be supported by an implementation',type='structs']
---
-The sname:VkPhysicalDeviceShaderSMBuiltinsFeaturesNV structure is defined
-as:
-
-include::{generated}/api/structs/VkPhysicalDeviceShaderSMBuiltinsFeaturesNV.txt[]
-
-This structure describes the following feature:
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * [[features-shaderSMBuiltins]] pname:shaderSMBuiltins indicates whether
-    the implementation supports the SPIR-V code:ShaderSMBuiltinsNV
-    capability.
-
-:refpage: VkPhysicalDeviceShaderSMBuiltinsFeaturesNV
-include::{chapters}/features.txt[tag=features]
-
-include::{generated}/validity/structs/VkPhysicalDeviceShaderSMBuiltinsFeaturesNV.txt[]
---
-endif::VK_NV_shader_sm_builtins[]
-
-ifdef::VK_VERSION_1_2,VK_KHR_separate_depth_stencil_layouts[]
-[open,refpage='VkPhysicalDeviceSeparateDepthStencilLayoutsFeatures',desc='Structure describing whether the implementation can do depth and stencil image barriers separately',type='structs',alias='VkPhysicalDeviceSeparateDepthStencilLayoutsFeaturesKHR']
---
-The sname:VkPhysicalDeviceSeparateDepthStencilLayoutsFeatures structure is
-defined as:
-
-include::{generated}/api/structs/VkPhysicalDeviceSeparateDepthStencilLayoutsFeatures.txt[]
-
-ifdef::VK_KHR_separate_depth_stencil_layouts[]
-or the equivalent
-
-include::{generated}/api/structs/VkPhysicalDeviceSeparateDepthStencilLayoutsFeaturesKHR.txt[]
-endif::VK_KHR_separate_depth_stencil_layouts[]
-
-This structure describes the following feature:
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-
-// Must have preceding whitespace
-ifdef::VK_VERSION_1_2[:anchor-prefix: extension-]
-ifndef::VK_VERSION_1_2[:anchor-prefix:]
-// tag::VK_KHR_separate_depth_stencil_layouts-features[]
-  * [[{anchor-prefix}features-separateDepthStencilLayouts]]
-    pname:separateDepthStencilLayouts indicates whether the implementation
-    supports a sname:VkImageMemoryBarrier for a depth/stencil image with
-    only one of ename:VK_IMAGE_ASPECT_DEPTH_BIT or
-    ename:VK_IMAGE_ASPECT_STENCIL_BIT set, and whether
-    ename:VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL,
-    ename:VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL,
-    ename:VK_IMAGE_LAYOUT_STENCIL_ATTACHMENT_OPTIMAL, or
-    ename:VK_IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL can be used.
-// end::VK_KHR_separate_depth_stencil_layouts-features[]
-
-:refpage: VkPhysicalDeviceSeparateDepthStencilLayoutsFeatures
-include::{chapters}/features.txt[tag=features]
-
-include::{generated}/validity/structs/VkPhysicalDeviceSeparateDepthStencilLayoutsFeatures.txt[]
---
-endif::VK_VERSION_1_2,VK_KHR_separate_depth_stencil_layouts[]
-
-ifdef::VK_KHR_pipeline_executable_properties[]
-[open,refpage='VkPhysicalDevicePipelineExecutablePropertiesFeaturesKHR',desc='Structure describing whether pipeline executable properties are available',type='structs']
---
-The sname:VkPhysicalDevicePipelineExecutablePropertiesFeaturesKHR structure
-is defined as:
-
-include::{generated}/api/structs/VkPhysicalDevicePipelineExecutablePropertiesFeaturesKHR.txt[]
-
-This structure describes the following feature:
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * [[features-pipelineExecutableInfo]] pname:pipelineExecutableInfo
-    indicates that the implementation supports reporting properties and
-    statistics about the pipeline executables associated with a compiled
-    pipeline.
-
-:refpage: VkPhysicalDevicePipelineExecutablePropertiesFeaturesKHR
-include::{chapters}/features.txt[tag=features]
-
-include::{generated}/validity/structs/VkPhysicalDevicePipelineExecutablePropertiesFeaturesKHR.txt[]
---
-endif::VK_KHR_pipeline_executable_properties[]
-
-ifdef::VK_EXT_shader_demote_to_helper_invocation[]
-[open,refpage='VkPhysicalDeviceShaderDemoteToHelperInvocationFeaturesEXT',desc='Structure describing the shader demote to helper invocations features that can be supported by an implementation',type='structs']
---
-The sname:VkPhysicalDeviceShaderDemoteToHelperInvocationFeaturesEXT
-structure is defined as:
-
-include::{generated}/api/structs/VkPhysicalDeviceShaderDemoteToHelperInvocationFeaturesEXT.txt[]
-
-This structure describes the following feature:
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * [[features-shaderDemoteToHelperInvocation]]
-    pname:shaderDemoteToHelperInvocation indicates whether the
-    implementation supports the SPIR-V code:DemoteToHelperInvocationEXT
-    capability.
-
-:refpage: VkPhysicalDeviceShaderDemoteToHelperInvocationFeaturesEXT
-include::{chapters}/features.txt[tag=features]
-
-include::{generated}/validity/structs/VkPhysicalDeviceShaderDemoteToHelperInvocationFeaturesEXT.txt[]
---
-endif::VK_EXT_shader_demote_to_helper_invocation[]
-
-ifdef::VK_EXT_texel_buffer_alignment[]
-[open,refpage='VkPhysicalDeviceTexelBufferAlignmentFeaturesEXT',desc='Structure describing the texel buffer alignment features that can be supported by an implementation',type='structs']
---
-The sname:VkPhysicalDeviceTexelBufferAlignmentFeaturesEXT structure is
-defined as:
-
-include::{generated}/api/structs/VkPhysicalDeviceTexelBufferAlignmentFeaturesEXT.txt[]
-
-This structure describes the following feature:
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * [[features-texelBufferAlignment]] pname:texelBufferAlignment indicates
-    whether the implementation uses more specific alignment requirements
-    advertised in slink:VkPhysicalDeviceTexelBufferAlignmentPropertiesEXT
-    rather than
-    slink:VkPhysicalDeviceLimits::pname:minTexelBufferOffsetAlignment.
-
-:refpage: VkPhysicalDeviceTexelBufferAlignmentFeaturesEXT
-include::{chapters}/features.txt[tag=features]
-
-include::{generated}/validity/structs/VkPhysicalDeviceTexelBufferAlignmentFeaturesEXT.txt[]
---
-endif::VK_EXT_texel_buffer_alignment[]
-
-ifdef::VK_EXT_texture_compression_astc_hdr[]
-[open,refpage='VkPhysicalDeviceTextureCompressionASTCHDRFeaturesEXT',desc='Structure describing ASTC HDR features that can be supported by an implementation',type='structs']
---
-The sname:VkPhysicalDeviceTextureCompressionASTCHDRFeaturesEXT structure is
-defined as:
-
-include::{generated}/api/structs/VkPhysicalDeviceTextureCompressionASTCHDRFeaturesEXT.txt[]
-
-This structure describes the following feature:
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * [[features-textureCompressionASTC_HDR]] pname:textureCompressionASTC_HDR
-    indicates whether all of the ASTC HDR compressed texture formats are
-    supported.
-    If this feature is enabled, then the
-    ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT,
-    ename:VK_FORMAT_FEATURE_BLIT_SRC_BIT and
-    ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT features must:
-    be supported in pname:optimalTilingFeatures for the following formats:
-+
-  ** ename:VK_FORMAT_ASTC_4x4_SFLOAT_BLOCK_EXT
-  ** ename:VK_FORMAT_ASTC_5x4_SFLOAT_BLOCK_EXT
-  ** ename:VK_FORMAT_ASTC_5x5_SFLOAT_BLOCK_EXT
-  ** ename:VK_FORMAT_ASTC_6x5_SFLOAT_BLOCK_EXT
-  ** ename:VK_FORMAT_ASTC_6x6_SFLOAT_BLOCK_EXT
-  ** ename:VK_FORMAT_ASTC_8x5_SFLOAT_BLOCK_EXT
-  ** ename:VK_FORMAT_ASTC_8x6_SFLOAT_BLOCK_EXT
-  ** ename:VK_FORMAT_ASTC_8x8_SFLOAT_BLOCK_EXT
-  ** ename:VK_FORMAT_ASTC_10x5_SFLOAT_BLOCK_EXT
-  ** ename:VK_FORMAT_ASTC_10x6_SFLOAT_BLOCK_EXT
-  ** ename:VK_FORMAT_ASTC_10x8_SFLOAT_BLOCK_EXT
-  ** ename:VK_FORMAT_ASTC_10x10_SFLOAT_BLOCK_EXT
-  ** ename:VK_FORMAT_ASTC_12x10_SFLOAT_BLOCK_EXT
-  ** ename:VK_FORMAT_ASTC_12x12_SFLOAT_BLOCK_EXT
-+
-To query for additional properties, or if the feature is not enabled,
-flink:vkGetPhysicalDeviceFormatProperties and
-flink:vkGetPhysicalDeviceImageFormatProperties can: be used to check for
-supported properties of individual formats as normal.
-
-:refpage: VkPhysicalDeviceTextureCompressionASTCHDRFeaturesEXT
-include::{chapters}/features.txt[tag=features]
-
-include::{generated}/validity/structs/VkPhysicalDeviceTextureCompressionASTCHDRFeaturesEXT.txt[]
---
-endif::VK_EXT_texture_compression_astc_hdr[]
-
-ifdef::VK_EXT_line_rasterization[]
-[open,refpage='VkPhysicalDeviceLineRasterizationFeaturesEXT',desc='Structure describing the line rasterization features that can be supported by an implementation',type='structs']
---
-The sname:VkPhysicalDeviceLineRasterizationFeaturesEXT structure is defined
-as:
-
-include::{generated}/api/structs/VkPhysicalDeviceLineRasterizationFeaturesEXT.txt[]
-
-This structure describes the following features:
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * [[features-rectangularLines]] pname:rectangularLines indicates whether
-    the implementation supports <<primsrast-lines,rectangular line
-    rasterization>>.
-  * [[features-bresenhamLines]] pname:bresenhamLines indicates whether the
-    implementation supports <<primsrast-lines-bresenham,Bresenham-style line
-    rasterization>>.
-  * [[features-smoothLines]] pname:smoothLines indicates whether the
-    implementation supports <<primsrast-lines-smooth,smooth line
-    rasterization>>.
-  * [[features-stippledRectangularLines]] pname:stippledRectangularLines
-    indicates whether the implementation supports
-    <<primsrast-lines-stipple,stippled line rasterization>> with
-    ename:VK_LINE_RASTERIZATION_MODE_RECTANGULAR_EXT lines, or with
-    ename:VK_LINE_RASTERIZATION_MODE_DEFAULT_EXT lines if
-    slink:VkPhysicalDeviceLimits::pname:strictLines is ename:VK_TRUE.
-  * [[features-stippledBresenhamLines]] pname:stippledBresenhamLines
-    indicates whether the implementation supports
-    <<primsrast-lines-stipple,stippled line rasterization>> with
-    ename:VK_LINE_RASTERIZATION_MODE_BRESENHAM_EXT lines.
-  * [[features-stippledSmoothLines]] pname:stippledSmoothLines indicates
-    whether the implementation supports <<primsrast-lines-stipple,stippled
-    line rasterization>> with
-    ename:VK_LINE_RASTERIZATION_MODE_RECTANGULAR_SMOOTH_EXT lines.
-
-:refpage: VkPhysicalDeviceLineRasterizationFeaturesEXT
-include::{chapters}/features.txt[tag=features]
-
-include::{generated}/validity/structs/VkPhysicalDeviceLineRasterizationFeaturesEXT.txt[]
---
-endif::VK_EXT_line_rasterization[]
-
-ifdef::VK_EXT_subgroup_size_control[]
-[open,refpage='VkPhysicalDeviceSubgroupSizeControlFeaturesEXT',desc='Structure describing the subgroup size control features that can be supported by an implementation',type='structs']
---
-The sname:VkPhysicalDeviceSubgroupSizeControlFeaturesEXT structure is
-defined as:
-
-include::{generated}/api/structs/VkPhysicalDeviceSubgroupSizeControlFeaturesEXT.txt[]
-
-This structure describes the following features:
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * [[features-subgroupSizeControl]] pname:subgroupSizeControl indicates
-    whether the implementation supports controlling shader subgroup sizes
-    via the
-    ename:VK_PIPELINE_SHADER_STAGE_CREATE_ALLOW_VARYING_SUBGROUP_SIZE_BIT_EXT
-    flag and the
-    slink:VkPipelineShaderStageRequiredSubgroupSizeCreateInfoEXT structure.
-  * [[features-computeFullSubgroups]] pname:computeFullSubgroups indicates
-    whether the implementation supports requiring full subgroups in compute
-    shaders via the
-    ename:VK_PIPELINE_SHADER_STAGE_CREATE_REQUIRE_FULL_SUBGROUPS_BIT_EXT
-    flag.
-
-:refpage: VkPhysicalDeviceSubgroupSizeControlFeaturesEXT
-include::{chapters}/features.txt[tag=features]
-
-[NOTE]
-.Note
-====
-The sname:VkPhysicalDeviceSubgroupSizeControlFeaturesEXT structure was added
-in version 2 of the `apiext:VK_EXT_subgroup_size_control` extension.
-Version 1 implementations of this extension will not fill out the features
-structure but applications may assume that both pname:subgroupSizeControl
-and pname:computeFullSubgroups are supported if the extension is supported.
-(See also the <<features-requirements, Feature Requirements>> section.)
-Applications are advised to add a
-sname:VkPhysicalDeviceSubgroupSizeControlFeaturesEXT structure to the
-pname:pNext chain of slink:VkDeviceCreateInfo to enable the features
-regardless of the version of the extension supported by the implementation.
-If the implementation only supports version 1, it will safely ignore the
-sname:VkPhysicalDeviceSubgroupSizeControlFeaturesEXT structure.
-====
-
-include::{generated}/validity/structs/VkPhysicalDeviceSubgroupSizeControlFeaturesEXT.txt[]
---
-endif::VK_EXT_subgroup_size_control[]
-
-ifdef::VK_AMD_device_coherent_memory[]
-[open,refpage='VkPhysicalDeviceCoherentMemoryFeaturesAMD',desc='Structure describing whether device coherent memory can be supported by an implementation',type='structs']
---
-The sname:VkPhysicalDeviceCoherentMemoryFeaturesAMD structure is defined as:
-
-include::{generated}/api/structs/VkPhysicalDeviceCoherentMemoryFeaturesAMD.txt[]
-
-This structure describes the following feature:
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * [[features-deviceCoherentMemory]] pname:deviceCoherentMemory indicates
-    that the implementation supports <<VkMemoryPropertyFlagBits,device
-    coherent memory>>.
-
-:refpage: VkPhysicalDeviceCoherentMemoryFeaturesAMD
-include::{chapters}/features.txt[tag=features]
-
-include::{generated}/validity/structs/VkPhysicalDeviceCoherentMemoryFeaturesAMD.txt[]
---
-endif::VK_AMD_device_coherent_memory[]
-
-ifdef::VK_KHR_acceleration_structure[]
-[open,refpage='VkPhysicalDeviceAccelerationStructureFeaturesKHR',desc='Structure describing the acceleration structure features that can be supported by an implementation',type='structs']
---
-The sname:VkPhysicalDeviceAccelerationStructureFeaturesKHR structure is
-defined as:
-
-include::{generated}/api/structs/VkPhysicalDeviceAccelerationStructureFeaturesKHR.txt[]
-
-This structure describes the following features:
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * [[features-accelerationStructure]] pname:accelerationStructure indicates
-    whether the implementation supports the acceleration structure
-    functionality.
-    See <<acceleration-structure,Acceleration Structures>>.
-  * [[features-accelerationStructureCaptureReplay]]
-    pname:accelerationStructureCaptureReplay indicates whether the
-    implementation supports saving and reusing acceleration structure device
-    addresses, e.g. for trace capture and replay.
-  * [[features-accelerationStructureIndirectBuild]]
-    pname:accelerationStructureIndirectBuild indicates whether the
-    implementation supports indirect acceleration structure build commands,
-    e.g. flink:vkCmdBuildAccelerationStructuresIndirectKHR.
-  * [[features-accelerationStructureHostCommands]]
-    pname:accelerationStructureHostCommands indicates whether the
-    implementation supports host side acceleration structure commands, e.g.
-    flink:vkBuildAccelerationStructuresKHR,
-    flink:vkCopyAccelerationStructureKHR,
-    flink:vkCopyAccelerationStructureToMemoryKHR,
-    flink:vkCopyMemoryToAccelerationStructureKHR,
-    flink:vkWriteAccelerationStructuresPropertiesKHR.
-  * [[features-descriptorBindingAccelerationStructureUpdateAfterBind]]
-    pname:descriptorBindingAccelerationStructureUpdateAfterBind indicates
-    whether the implementation supports updating acceleration structure
-    descriptors after a set is bound.
-    If this feature is not enabled,
-    ename:VK_DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT must: not be used with
-    ename:VK_DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_KHR.
-
-:refpage: VkPhysicalDeviceAccelerationStructureFeaturesKHR
-include::{chapters}/features.txt[tag=features]
-
-include::{generated}/validity/structs/VkPhysicalDeviceAccelerationStructureFeaturesKHR.txt[]
---
-endif::VK_KHR_acceleration_structure[]
-
-ifdef::VK_KHR_ray_tracing_pipeline[]
-[open,refpage='VkPhysicalDeviceRayTracingPipelineFeaturesKHR',desc='Structure describing the ray tracing features that can be supported by an implementation',type='structs']
---
-The sname:VkPhysicalDeviceRayTracingPipelineFeaturesKHR structure is defined
-as:
-
-include::{generated}/api/structs/VkPhysicalDeviceRayTracingPipelineFeaturesKHR.txt[]
-
-This structure describes the following features:
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * [[features-rayTracingPipeline]] pname:rayTracingPipeline indicates
-    whether the implementation supports the ray tracing pipeline
-    functionality.
-    See <<ray-tracing,Ray Tracing>>.
-  * [[features-rayTracingPipelineShaderGroupHandleCaptureReplay]]
-    pname:rayTracingPipelineShaderGroupHandleCaptureReplay indicates whether
-    the implementation supports saving and reusing shader group handles,
-    e.g. for trace capture and replay.
-  * [[features-rayTracingPipelineShaderGroupHandleCaptureReplayMixed]]
-    pname:rayTracingPipelineShaderGroupHandleCaptureReplayMixed indicates
-    whether the implementation supports reuse of shader group handles being
-    arbitrarily mixed with creation of non-reused shader group handles.
-    If this is ename:VK_FALSE, all reused shader group handles must: be
-    specified before any non-reused handles may: be created.
-  * [[features-rayTracingPipelineTraceRaysIndirect]]
-    pname:rayTracingPipelineTraceRaysIndirect indicates whether the
-    implementation supports indirect ray tracing commands, e.g.
-    flink:vkCmdTraceRaysIndirectKHR.
-  * [[features-rayTraversalPrimitiveCulling]]
-    pname:rayTraversalPrimitiveCulling indicates whether the implementation
-    supports <<ray-traversal-culling-primitive, primitive culling during ray
-    traversal>>.
-
-:refpage: VkPhysicalDeviceRayTracingPipelineFeaturesKHR
-include::{chapters}/features.txt[tag=features]
-
-.Valid Usage
-****
-  * [[VUID-VkPhysicalDeviceRayTracingPipelineFeaturesKHR-rayTracingPipelineShaderGroupHandleCaptureReplayMixed-03575]]
-    If pname:rayTracingPipelineShaderGroupHandleCaptureReplayMixed is
-    ename:VK_TRUE, pname:rayTracingPipelineShaderGroupHandleCaptureReplay
-    must: also be ename:VK_TRUE
-****
-
-include::{generated}/validity/structs/VkPhysicalDeviceRayTracingPipelineFeaturesKHR.txt[]
---
-endif::VK_KHR_ray_tracing_pipeline[]
-
-ifdef::VK_KHR_ray_query[]
-[open,refpage='VkPhysicalDeviceRayQueryFeaturesKHR',desc='Structure describing the ray query features that can be supported by an implementation',type='structs']
---
-The sname:VkPhysicalDeviceRayQueryFeaturesKHR structure is defined as:
-
-include::{generated}/api/structs/VkPhysicalDeviceRayQueryFeaturesKHR.txt[]
-
-This structure describes the following feature:
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * [[features-rayQuery]] pname:rayQuery indicates whether the
-    implementation supports ray query (code:OpRayQueryProceedKHR)
-    functionality.
-
-:refpage: VkPhysicalDeviceRayQueryFeaturesKHR
-include::{chapters}/features.txt[tag=features]
-
-include::{generated}/validity/structs/VkPhysicalDeviceRayQueryFeaturesKHR.txt[]
---
-endif::VK_KHR_ray_query[]
-
-ifdef::VK_EXT_extended_dynamic_state[]
-[open,refpage='VkPhysicalDeviceExtendedDynamicStateFeaturesEXT',desc='Structure describing what extended dynamic state can be used',type='structs']
---
-The sname:VkPhysicalDeviceExtendedDynamicStateFeaturesEXT structure is
-defined as:
-
-include::{generated}/api/structs/VkPhysicalDeviceExtendedDynamicStateFeaturesEXT.txt[]
-
-This structure describes the following feature:
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * [[features-extendedDynamicState]] pname:extendedDynamicState indicates
-    that the implementation supports the following dynamic states:
-  ** ename:VK_DYNAMIC_STATE_CULL_MODE_EXT
-  ** ename:VK_DYNAMIC_STATE_FRONT_FACE_EXT
-  ** ename:VK_DYNAMIC_STATE_PRIMITIVE_TOPOLOGY_EXT
-  ** ename:VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT
-  ** ename:VK_DYNAMIC_STATE_SCISSOR_WITH_COUNT_EXT
-  ** ename:VK_DYNAMIC_STATE_VERTEX_INPUT_BINDING_STRIDE_EXT
-  ** ename:VK_DYNAMIC_STATE_DEPTH_TEST_ENABLE_EXT
-  ** ename:VK_DYNAMIC_STATE_DEPTH_WRITE_ENABLE_EXT
-  ** ename:VK_DYNAMIC_STATE_DEPTH_COMPARE_OP_EXT
-  ** ename:VK_DYNAMIC_STATE_DEPTH_BOUNDS_TEST_ENABLE_EXT
-  ** ename:VK_DYNAMIC_STATE_STENCIL_TEST_ENABLE_EXT
-  ** ename:VK_DYNAMIC_STATE_STENCIL_OP_EXT
-
-:refpage: VkPhysicalDeviceExtendedDynamicStateFeaturesEXT
-include::{chapters}/features.txt[tag=features]
-
-include::{generated}/validity/structs/VkPhysicalDeviceExtendedDynamicStateFeaturesEXT.txt[]
---
-endif::VK_EXT_extended_dynamic_state[]
-
-ifdef::VK_EXT_extended_dynamic_state2[]
-[open,refpage='VkPhysicalDeviceExtendedDynamicState2FeaturesEXT',desc='Structure describing what extended dynamic state can be used',type='structs']
---
-The sname:VkPhysicalDeviceExtendedDynamicState2FeaturesEXT structure is
-defined as:
-
-include::{generated}/api/structs/VkPhysicalDeviceExtendedDynamicState2FeaturesEXT.txt[]
-
-This structure describes the following features:
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * [[features-extendedDynamicState2]] pname:extendedDynamicState2 indicates
-    that the implementation supports the following dynamic states:
-  ** ename:VK_DYNAMIC_STATE_DEPTH_BIAS_ENABLE_EXT
-  ** ename:VK_DYNAMIC_STATE_PRIMITIVE_RESTART_ENABLE_EXT
-  ** ename:VK_DYNAMIC_STATE_RASTERIZER_DISCARD_ENABLE_EXT
-  * [[features-extendedDynamicState2LogicOp]]
-    pname:extendedDynamicState2LogicOp indicates that the implementation
-    supports the following dynamic state:
-  ** ename:VK_DYNAMIC_STATE_LOGIC_OP_EXT
-  * [[features-extendedDynamicState2PatchControlPoints]]
-    pname:extendedDynamicState2PatchControlPoints indicates that the
-    implementation supports the following dynamic state:
-  ** ename:VK_DYNAMIC_STATE_PATCH_CONTROL_POINTS_EXT
-
-:refpage: VkPhysicalDeviceExtendedDynamicState2FeaturesEXT
-include::{chapters}/features.txt[tag=features]
-
-include::{generated}/validity/structs/VkPhysicalDeviceExtendedDynamicState2FeaturesEXT.txt[]
---
-endif::VK_EXT_extended_dynamic_state2[]
-
-ifdef::VK_NV_device_generated_commands[]
-[open,refpage='VkPhysicalDeviceDeviceGeneratedCommandsFeaturesNV',desc='Structure describing the device-generated commands features that can be supported by an implementation',type='structs']
---
-The sname:VkPhysicalDeviceDeviceGeneratedCommandsFeaturesNV structure is
-defined as:
-
-include::{generated}/api/structs/VkPhysicalDeviceDeviceGeneratedCommandsFeaturesNV.txt[]
-
-This structure describes the following feature:
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * [[features-deviceGeneratedCommands]] pname:deviceGeneratedCommands
-    indicates whether the implementation supports functionality to generate
-    commands on the device.
-    See <<device-generated-commands,Device-Generated Commands>>.
-
-:refpage: VkPhysicalDeviceDeviceGeneratedCommandsFeaturesNV
-include::{chapters}/features.txt[tag=features]
-
-include::{generated}/validity/structs/VkPhysicalDeviceDeviceGeneratedCommandsFeaturesNV.txt[]
---
-endif::VK_NV_device_generated_commands[]
-
-ifdef::VK_NV_device_diagnostics_config[]
-[open,refpage='VkPhysicalDeviceDiagnosticsConfigFeaturesNV',desc='Structure describing the device-generated diagnostic configuration features that can be supported by an implementation',type='structs']
---
-The sname:VkPhysicalDeviceDiagnosticsConfigFeaturesNV structure is defined
-as:
-
-include::{generated}/api/structs/VkPhysicalDeviceDiagnosticsConfigFeaturesNV.txt[]
-
-This structure describes the following feature:
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * [[features-diagnosticsConfig]] pname:diagnosticsConfig indicates whether
-    the implementation supports the ability to configure diagnostic tools.
-
-:refpage: VkPhysicalDeviceDiagnosticsConfigFeaturesNV
-include::{chapters}/features.txt[tag=features]
-
-include::{generated}/validity/structs/VkPhysicalDeviceDiagnosticsConfigFeaturesNV.txt[]
---
-endif::VK_NV_device_diagnostics_config[]
-
-ifdef::VK_EXT_device_memory_report[]
-[open,refpage='VkPhysicalDeviceDeviceMemoryReportFeaturesEXT',desc='Structure describing whether device memory report callback can be supported by an implementation',type='structs']
---
-The sname:VkPhysicalDeviceDeviceMemoryReportFeaturesEXT structure is defined
-as:
-
-include::{generated}/api/structs/VkPhysicalDeviceDeviceMemoryReportFeaturesEXT.txt[]
-
-This structure describes the following feature:
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * [[features-deviceMemoryReport]] pname:deviceMemoryReport indicates
-    whether the implementation supports the ability to register device
-    memory report callbacks.
-
-:refpage: VkPhysicalDeviceDeviceMemoryReportFeaturesEXT
-include::{chapters}/features.txt[tag=features]
-
-include::{generated}/validity/structs/VkPhysicalDeviceDeviceMemoryReportFeaturesEXT.txt[]
---
-endif::VK_EXT_device_memory_report[]
-
-ifdef::VK_EXT_global_priority_query[]
-[open,refpage='VkPhysicalDeviceGlobalPriorityQueryFeaturesEXT',desc='Structure describing whether global priority query can be supported by an implementation',type='structs']
---
-The sname:VkPhysicalDeviceGlobalPriorityQueryFeaturesEXT structure is
-defined as:
-
-include::{generated}/api/structs/VkPhysicalDeviceGlobalPriorityQueryFeaturesEXT.txt[]
-
-The members of the sname:VkPhysicalDeviceGlobalPriorityQueryFeaturesEXT
-structure describe the following features:
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * [[features-globalPriorityQuery]] pname:globalPriorityQuery indicates
-    whether the implementation supports the ability to query global queue
-    priorities.
-
-:refpage: VkPhysicalDeviceGlobalPriorityQueryFeaturesEXT
-include::{chapters}/features.txt[tag=features]
-
-include::{generated}/validity/structs/VkPhysicalDeviceGlobalPriorityQueryFeaturesEXT.txt[]
---
-endif::VK_EXT_global_priority_query[]
-
-ifdef::VK_EXT_pipeline_creation_cache_control[]
-[open,refpage='VkPhysicalDevicePipelineCreationCacheControlFeaturesEXT',desc='Structure describing whether pipeline cache control can be supported by an implementation',type='structs']
---
-The sname:VkPhysicalDevicePipelineCreationCacheControlFeaturesEXT structure
-is defined as:
-
-include::{generated}/api/structs/VkPhysicalDevicePipelineCreationCacheControlFeaturesEXT.txt[]
-
-This structure describes the following feature:
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * [[features-pipelineCreationCacheControl]]
-    pname:pipelineCreationCacheControl indicates that the implementation
-    supports:
-  ** The following can: be used in stext:Vk*PipelineCreateInfo::pname:flags:
-  *** ename:VK_PIPELINE_CREATE_FAIL_ON_PIPELINE_COMPILE_REQUIRED_BIT_EXT
-  *** ename:VK_PIPELINE_CREATE_EARLY_RETURN_ON_FAILURE_BIT_EXT
-  ** The following can: be used in
-     slink:VkPipelineCacheCreateInfo::pname:flags:
-  *** ename:VK_PIPELINE_CACHE_CREATE_EXTERNALLY_SYNCHRONIZED_BIT_EXT
-
-:refpage: VkPhysicalDevicePipelineCreationCacheControlFeaturesEXT
-include::{chapters}/features.txt[tag=features]
-
-include::{generated}/validity/structs/VkPhysicalDevicePipelineCreationCacheControlFeaturesEXT.txt[]
---
-endif::VK_EXT_pipeline_creation_cache_control[]
-
-ifdef::VK_KHR_zero_initialize_workgroup_memory[]
-[open,refpage='VkPhysicalDeviceZeroInitializeWorkgroupMemoryFeaturesKHR',desc='Structure describing support for zero initialization of workgroup memory by an implementation',type='structs']
---
-The sname:VkPhysicalDeviceZeroInitializeWorkgroupMemoryFeaturesKHR structure
-is defined as:
-
-include::{generated}/api/structs/VkPhysicalDeviceZeroInitializeWorkgroupMemoryFeaturesKHR.txt[]
-
-This structure describes the following feature:
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * [[features-shaderZeroInitializeWorkgroupMemory]]
-    pname:shaderZeroInitializeWorkgroupMemory specifies whether the
-    implementation supports initializing a variable in Workgroup storage
-    class.
-
-:refpage: VkPhysicalDeviceZeroInitializeWorkgroupMemoryFeaturesKHR
-include::{chapters}/features.txt[tag=features]
-
-include::{generated}/validity/structs/VkPhysicalDeviceZeroInitializeWorkgroupMemoryFeaturesKHR.txt[]
---
-endif::VK_KHR_zero_initialize_workgroup_memory[]
-
-ifdef::VK_EXT_private_data[]
-[open,refpage='VkPhysicalDevicePrivateDataFeaturesEXT',desc='Structure specifying physical device support',type='structs']
---
-
-The sname:VkPhysicalDevicePrivateDataFeaturesEXT structure is defined as:
-
-include::{generated}/api/structs/VkPhysicalDevicePrivateDataFeaturesEXT.txt[]
-
-This structure describes the following feature:
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * [[features-privateData]] pname:privateData indicates whether the
-    implementation supports private data.
-    See <<private-data, Private Data>>.
-
-:refpage: VkPhysicalDevicePrivateDataFeaturesEXT
-include::{chapters}/features.txt[tag=features]
-
-include::{generated}/validity/structs/VkPhysicalDevicePrivateDataFeaturesEXT.txt[]
---
-endif::VK_EXT_private_data[]
-
-ifdef::VK_KHR_shader_subgroup_uniform_control_flow[]
-[open,refpage='VkPhysicalDeviceShaderSubgroupUniformControlFlowFeaturesKHR',desc='Structure describing support for shader subgroup uniform control flow by an implementation',type='structs']
---
-The sname:VkPhysicalDeviceShaderSubgroupUniformControlFlowFeaturesKHR
-structure is defined as:
-
-include::{generated}/api/structs/VkPhysicalDeviceShaderSubgroupUniformControlFlowFeaturesKHR.txt[]
-
-This structure describes the following feature:
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * [[features-shaderSubgroupUniformControlFlow]]
-    pname:shaderSubgroupUniformControlFlow specifies whether the
-    implementation supports the shader execution mode
-    code:SubgroupUniformControlFlowKHR
-
-:refpage: VkPhysicalDevicePrivateDataFeaturesEXT
-include::{chapters}/features.txt[tag=features]
-
-include::{generated}/validity/structs/VkPhysicalDeviceShaderSubgroupUniformControlFlowFeaturesKHR.txt[]
---
-endif::VK_KHR_shader_subgroup_uniform_control_flow[]
-
-ifdef::VK_EXT_robustness2[]
-[open,refpage='VkPhysicalDeviceRobustness2FeaturesEXT',desc='Structure describing the out-of-bounds behavior for an implementation',type='structs']
---
-The sname:VkPhysicalDeviceRobustness2FeaturesEXT structure is defined as:
-
-include::{generated}/api/structs/VkPhysicalDeviceRobustness2FeaturesEXT.txt[]
-
-This structure describes the following features:
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * [[features-robustBufferAccess2]] pname:robustBufferAccess2 indicates
-    whether buffer accesses are tightly bounds-checked against the range of
-    the descriptor.
-    Uniform buffers must: be bounds-checked to the range of the descriptor,
-    where the range is rounded up to a multiple of
-    <<limits-robustUniformBufferAccessSizeAlignment,robustUniformBufferAccessSizeAlignment>>.
-    Storage buffers must: be bounds-checked to the range of the descriptor,
-    where the range is rounded up to a multiple of
-    <<limits-robustStorageBufferAccessSizeAlignment,robustStorageBufferAccessSizeAlignment>>.
-    Out of bounds buffer loads will return zero values, and formatted loads
-    will have [eq]#(0,0,1)# values inserted for missing G, B, or A
-    components based on the format.
-  * [[features-robustImageAccess2]] pname:robustImageAccess2 indicates
-    whether image accesses are tightly bounds-checked against the dimensions
-    of the image view.
-    Out of bounds image loads will return zero values, with [eq]#(0,0,1)#
-    values <<textures-conversion-to-rgba,inserted for missing G, B, or A
-    components>> based on the format.
-  * [[features-nullDescriptor]] pname:nullDescriptor indicates whether
-    descriptors can: be written with a dlink:VK_NULL_HANDLE resource or
-    view, which are considered valid to access and act as if the descriptor
-    were bound to nothing.
-
-:refpage: VkPhysicalDeviceRobustness2FeaturesEXT
-include::{chapters}/features.txt[tag=features]
-
-.Valid Usage
-****
-  * [[VUID-VkPhysicalDeviceRobustness2FeaturesEXT-robustBufferAccess2-04000]]
-    If pname:robustBufferAccess2 is enabled then
-    <<features-robustBufferAccess, pname:robustBufferAccess>> must: also be
-    enabled
-****
-
-include::{generated}/validity/structs/VkPhysicalDeviceRobustness2FeaturesEXT.txt[]
---
-endif::VK_EXT_robustness2[]
-
-ifndef::VK_EXT_robustness2[]
-[[features-nullDescriptor]] nullDescriptor support requires the
-`apiext:VK_EXT_robustness2` extension.
-endif::VK_EXT_robustness2[]
-
-ifdef::VK_EXT_image_robustness[]
-[open,refpage='VkPhysicalDeviceImageRobustnessFeaturesEXT',desc='Structure describing the out-of-bounds behavior for an implementation',type='structs']
---
-The sname:VkPhysicalDeviceImageRobustnessFeaturesEXT structure is defined
-as:
-
-include::{generated}/api/structs/VkPhysicalDeviceImageRobustnessFeaturesEXT.txt[]
-
-This structure describes the following feature:
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * [[features-robustImageAccess]] pname:robustImageAccess indicates whether
-    image accesses are tightly bounds-checked against the dimensions of the
-    image view.
-    <<textures-input-validation,Invalid texels>> resulting from out of
-    bounds image loads will be replaced as described in
-    <<textures-texel-replacement,Texel Replacement>>, with either
-    [eq]#(0,0,1)# or [eq]#(0,0,0)# values inserted for missing G, B, or A
-    components based on the format.
-
-:refpage: VkPhysicalDeviceImageRobustnessFeaturesEXT
-include::{chapters}/features.txt[tag=features]
-
-include::{generated}/validity/structs/VkPhysicalDeviceImageRobustnessFeaturesEXT.txt[]
---
-endif::VK_EXT_image_robustness[]
-
-ifdef::VK_KHR_shader_terminate_invocation[]
-[open,refpage='VkPhysicalDeviceShaderTerminateInvocationFeaturesKHR',desc='Structure describing support for the SPIR-V code:SPV_KHR_terminate_invocation extension',type='structs']
---
-The sname:VkPhysicalDeviceShaderTerminateInvocationFeaturesKHR structure is
-defined as:
-
-include::{generated}/api/structs/VkPhysicalDeviceShaderTerminateInvocationFeaturesKHR.txt[]
-
-This structure describes the following feature:
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * [[features-shaderTerminateInvocation]] pname:shaderTerminateInvocation
-    specifies whether the implementation supports SPIR-V modules that use
-    the `SPV_KHR_terminate_invocation` extension.
-
-:refpage: VkPhysicalDeviceShaderTerminateInvocationFeaturesKHR
-include::{chapters}/features.txt[tag=features]
-
-include::{generated}/validity/structs/VkPhysicalDeviceShaderTerminateInvocationFeaturesKHR.txt[]
---
-endif::VK_KHR_shader_terminate_invocation[]
-
-ifdef::VK_EXT_custom_border_color[]
-[open,refpage='VkPhysicalDeviceCustomBorderColorFeaturesEXT',desc='Structure describing whether custom border colors can be supported by an implementation',type='structs']
---
-The sname:VkPhysicalDeviceCustomBorderColorFeaturesEXT structure is defined
-as:
-
-include::{generated}/api/structs/VkPhysicalDeviceCustomBorderColorFeaturesEXT.txt[]
-
-This structure describes the following features:
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * [[features-customBorderColors]] pname:customBorderColors indicates that
-    the implementation supports providing a pname:borderColor value with one
-    of the following values at sampler creation time:
-  ** ename:VK_BORDER_COLOR_FLOAT_CUSTOM_EXT
-  ** ename:VK_BORDER_COLOR_INT_CUSTOM_EXT
-  * [[features-customBorderColorWithoutFormat]]
-    pname:customBorderColorWithoutFormat indicates that explicit formats are
-    not required for custom border colors and the value of the pname:format
-    member of the slink:VkSamplerCustomBorderColorCreateInfoEXT structure
-    may: be ename:VK_FORMAT_UNDEFINED.
-    If this feature bit is not set, applications must: provide the
-    elink:VkFormat of the image view(s) being sampled by this sampler in the
-    pname:format member of the slink:VkSamplerCustomBorderColorCreateInfoEXT
-    structure.
-
-:refpage: VkPhysicalDeviceCustomBorderColorFeaturesEXT
-include::{chapters}/features.txt[tag=features]
-
-include::{generated}/validity/structs/VkPhysicalDeviceCustomBorderColorFeaturesEXT.txt[]
---
-endif::VK_EXT_custom_border_color[]
-
-ifdef::VK_EXT_border_color_swizzle[]
-[open,refpage='VkPhysicalDeviceBorderColorSwizzleFeaturesEXT',desc='Structure describing whether samplers with custom border colors require the component swizzle specified in order to have defined behavior',type='structs']
---
-The sname:VkPhysicalDeviceBorderColorSwizzleFeaturesEXT structure is defined
-as:
-
-include::{generated}/api/structs/VkPhysicalDeviceBorderColorSwizzleFeaturesEXT.txt[]
-
-This structure describes the following features:
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * [[features-borderColorSwizzle]] pname:borderColorSwizzle indicates that
-    defined values are returned by sampled image operations when used with a
-    sampler that uses a ename:VK_BORDER_COLOR_FLOAT_OPAQUE_BLACK,
-    ename:VK_BORDER_COLOR_INT_OPAQUE_BLACK,
-    ename:VK_BORDER_COLOR_FLOAT_CUSTOM_EXT, or
-    ename:VK_BORDER_COLOR_INT_CUSTOM_EXT pname:borderColor and an image view
-    that uses a non-<<resources-image-views-identity-mappings,identity
-    component mapping>>, when either pname:borderColorSwizzleFromImage is
-    enabled or the slink:VkSamplerBorderColorComponentMappingCreateInfoEXT
-    is specified.
-  * [[features-borderColorSwizzleFromImage]]
-    pname:borderColorSwizzleFromImage indicates that the implementation will
-    return the correct border color values from sampled image operations
-    under the conditions expressed above, without the application having to
-    specify the border color component mapping when creating the sampler
-    object.
-    If this feature bit is not set, applications can: chain a
-    slink:VkSamplerBorderColorComponentMappingCreateInfoEXT structure when
-    creating samplers for use with image views that do not have an
-    <<resources-image-views-identity-mappings,identity swizzle>> and, when
-    those samplers are combined with image views using the same component
-    mapping, sampled image operations that use opaque black or custom border
-    colors will return the correct border color values.
-
-:refpage: VkPhysicalDeviceBorderColorSwizzleFeaturesEXT
-include::{chapters}/features.txt[tag=features]
-
-include::{generated}/validity/structs/VkPhysicalDeviceBorderColorSwizzleFeaturesEXT.txt[]
---
-endif::VK_EXT_border_color_swizzle[]
-
-ifdef::VK_KHR_portability_subset[]
-[open,refpage='VkPhysicalDevicePortabilitySubsetFeaturesKHR',desc='Structure describing the features that may not be supported by an implementation of the Vulkan 1.0 Portability Subset',type='structs']
---
-The sname:VkPhysicalDevicePortabilitySubsetFeaturesKHR structure is defined
-as:
-
-include::{generated}/api/structs/VkPhysicalDevicePortabilitySubsetFeaturesKHR.txt[]
-
-This structure describes the following features:
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * [[features-constantAlphaColorBlendFactors]]
-    pname:constantAlphaColorBlendFactors indicates whether this
-    implementation supports constant _alpha_ <<framebuffer-blendfactors>>
-    used as source or destination _color_ <<framebuffer-blending>>.
-  * [[features-events]] pname:events indicates whether this implementation
-    supports synchronization using <<synchronization-events>>.
-  * [[features-imageViewFormatReinterpretation]]
-    pname:imageViewFormatReinterpretation indicates whether this
-    implementation supports a sname:VkImageView being created with a texel
-    format containing a different number of components, or a different
-    number of bits in each component, than the texel format of the
-    underlying sname:VkImage.
-  * [[features-imageViewFormatSwizzle]] pname:imageViewFormatSwizzle
-    indicates whether this implementation supports remapping format
-    components using slink:VkImageViewCreateInfo::pname:components.
-  * [[features-imageView2DOn3DImage]] pname:imageView2DOn3DImage indicates
-    whether this implementation supports a sname:VkImage being created with
-    the ename:VK_IMAGE_CREATE_2D_ARRAY_COMPATIBLE_BIT flag set, permitting a
-    2D or 2D array image view to be created on a 3D sname:VkImage.
-  * [[features-multisampleArrayImage]] pname:multisampleArrayImage indicates
-    whether this implementation supports a sname:VkImage being created as a
-    2D array with multiple samples per texel.
-  * [[features-mutableComparisonSamplers]] pname:mutableComparisonSamplers
-    indicates whether this implementation allows descriptors with comparison
-    samplers to be <<descriptorsets-updates, updated>>.
-  * [[features-pointPolygons]] pname:pointPolygons indicates whether this
-    implementation supports <<primsrast>> using a _point_
-    <<primsrast-polygonmode>>.
-  * [[features-samplerMipLodBias]] pname:samplerMipLodBias indicates whether
-    this implementation supports setting a <<samplers-mipLodBias, mipmap LOD
-    bias value>> when <<samplers, creating a sampler>>.
-  * [[features-separateStencilMaskRef]] pname:separateStencilMaskRef
-    indicates whether this implementation supports separate front and back
-    <<fragops-stencil>> reference values.
-  * [[features-shaderSampleRateInterpolationFunctions]]
-    pname:shaderSampleRateInterpolationFunctions indicates whether this
-    implementation supports fragment shaders which use the
-    <<spirvenv-capabilities-table-InterpolationFunction,
-    code:InterpolationFunction>> capability and the extended instructions
-    `InterpolateAtCentroid`, `InterpolateAtOffset`, and
-    `InterpolateAtSample` from the `GLSL.std.450` extended instruction set.
-    This member is only meaningful if the
-    <<features-sampleRateShading,sampleRateShading>> feature is supported.
-  * [[features-tessellationIsolines]] pname:tessellationIsolines indicates
-    whether this implementation supports
-    <<tessellation-isoline-tessellation, isoline output>> from the
-    <<tessellation>> stage of a graphics pipeline.
-    This member is only meaningful if
-    <<features-tessellationShader,tessellation shaders>> are supported.
-  * [[features-tessellationPointMode]] pname:tessellationPointMode indicates
-    whether this implementation supports <<tessellation-point-mode, point
-    output>> from the <<tessellation>> stage of a graphics pipeline.
-    This member is only meaningful if
-    <<features-tessellationShader,tessellation shaders>> are supported.
-  * [[features-triangleFans]] pname:triangleFans indicates whether this
-    implementation supports <<drawing-triangle-fans>> primitive topology.
-  * [[features-vertexAttributeAccessBeyondStride]]
-    pname:vertexAttributeAccessBeyondStride indicates whether this
-    implementation supports accessing a vertex input attribute beyond the
-    stride of the corresponding vertex input binding.
-
-:refpage: VkPhysicalDevicePortabilitySubsetFeaturesKHR
-include::{chapters}/features.txt[tag=features]
-
-include::{generated}/validity/structs/VkPhysicalDevicePortabilitySubsetFeaturesKHR.txt[]
---
-endif::VK_KHR_portability_subset[]
-
-ifdef::VK_KHR_performance_query[]
-include::VK_KHR_performance_query/features.txt[]
-endif::VK_KHR_performance_query[]
-
-ifdef::VK_EXT_4444_formats[]
-[open,refpage='VkPhysicalDevice4444FormatsFeaturesEXT',desc='Structure describing additional 4444 formats supported by an implementation',type='structs']
---
-The sname:VkPhysicalDevice4444FormatsFeaturesEXT structure is defined as:
-
-include::{generated}/api/structs/VkPhysicalDevice4444FormatsFeaturesEXT.txt[]
-
-This structure describes the following features:
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * [[features-formatA4R4G4B4]] pname:formatA4R4G4B4 indicates that the
-    implementation must: support using a elink:VkFormat of
-    ename:VK_FORMAT_A4R4G4B4_UNORM_PACK16_EXT with at least the following
-    elink:VkFormatFeatureFlagBits:
-  ** ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT
-  ** ename:VK_FORMAT_FEATURE_BLIT_SRC_BIT
-  ** ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT
-  * [[features-formatA4B4G4R4]] pname:formatA4B4G4R4 indicates that the
-    implementation must: support using a elink:VkFormat of
-    ename:VK_FORMAT_A4B4G4R4_UNORM_PACK16_EXT with at least the following
-    elink:VkFormatFeatureFlagBits:
-  ** ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT
-  ** ename:VK_FORMAT_FEATURE_BLIT_SRC_BIT
-  ** ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT
-
-:refpage: VkPhysicalDevice4444FormatsFeaturesEXT
-include::{chapters}/features.txt[tag=features]
-
-include::{generated}/validity/structs/VkPhysicalDevice4444FormatsFeaturesEXT.txt[]
---
-endif::VK_EXT_4444_formats[]
-
-ifdef::VK_VALVE_mutable_descriptor_type[]
-[open,refpage='VkPhysicalDeviceMutableDescriptorTypeFeaturesVALVE',desc='Structure describing whether the mutable descriptor type is supported',type='structs']
---
-The sname:VkPhysicalDeviceMutableDescriptorTypeFeaturesVALVE structure is
-defined as:
-
-include::{generated}/api/structs/VkPhysicalDeviceMutableDescriptorTypeFeaturesVALVE.txt[]
-
-This structure describes the following feature:
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * [[features-mutableDescriptorType]] pname:mutableDescriptorType indicates
-    that the implementation must: support using the elink:VkDescriptorType
-    of ename:VK_DESCRIPTOR_TYPE_MUTABLE_VALVE with at least the following
-    descriptor types, where any combination of the types must: be supported:
-  ** ename:VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE
-  ** ename:VK_DESCRIPTOR_TYPE_STORAGE_IMAGE
-  ** ename:VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER
-  ** ename:VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER
-  ** ename:VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER
-  ** ename:VK_DESCRIPTOR_TYPE_STORAGE_BUFFER
-
-  * Additionally, pname:mutableDescriptorType indicates that:
-ifdef::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
-  ** Non-uniform descriptor indexing must: be supported if all descriptor
-     types in a slink:VkMutableDescriptorTypeListVALVE for
-     ename:VK_DESCRIPTOR_TYPE_MUTABLE_VALVE have the corresponding
-     non-uniform indexing features enabled in
-     slink:VkPhysicalDeviceDescriptorIndexingFeatures.
-  ** ename:VK_DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT with
-     pname:descriptorType of ename:VK_DESCRIPTOR_TYPE_MUTABLE_VALVE relaxes
-     the list of required descriptor types to the descriptor types which
-     have the corresponding update-after-bind feature enabled in
-     slink:VkPhysicalDeviceDescriptorIndexingFeatures.
-endif::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
-  ** Dynamically uniform descriptor indexing must: be supported if all
-     descriptor types in a slink:VkMutableDescriptorTypeListVALVE for
-     ename:VK_DESCRIPTOR_TYPE_MUTABLE_VALVE have the corresponding dynamic
-     indexing features enabled.
-  ** ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_HOST_ONLY_POOL_BIT_VALVE must: be
-     supported.
-  ** ename:VK_DESCRIPTOR_POOL_CREATE_HOST_ONLY_BIT_VALVE must: be supported.
-
-:refpage: VkPhysicalDeviceMutableDescriptorTypeFeaturesVALVE
-include::{chapters}/features.txt[tag=features]
-
-include::{generated}/validity/structs/VkPhysicalDeviceMutableDescriptorTypeFeaturesVALVE.txt[]
---
-endif::VK_VALVE_mutable_descriptor_type[]
-
-ifdef::VK_KHR_workgroup_memory_explicit_layout[]
-[open,refpage='VkPhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR',desc='Structure describing the workgroup storage explicit layout features that can be supported by an implementation',type='structs']
---
-The sname:VkPhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR structure
-is defined as:
-
-include::{generated}/api/structs/VkPhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR.txt[]
-
-This structure describes the following features:
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * [[features-workgroupMemoryExplicitLayout]]
-    pname:workgroupMemoryExplicitLayout indicates whether the implementation
-    supports the SPIR-V code:WorkgroupMemoryExplicitLayoutKHR capability.
-  * [[features-workgroupMemoryExplicitLayoutScalarBlockLayout]]
-    pname:workgroupMemoryExplicitLayoutScalarBlockLayout indicates whether
-    the implementation supports scalar alignment for laying out Workgroup
-    Blocks.
-  * [[features-workgroupMemoryExplicitLayout8BitAccess]]
-    pname:workgroupMemoryExplicitLayout8BitAccess indicates whether objects
-    in the code:Workgroup storage class with the code:Block decoration can:
-    have 8-bit integer members.
-    If this feature is not enabled, 8-bit integer members must: not be used
-    in such objects.
-    This also indicates whether shader modules can: declare the
-    code:WorkgroupMemoryExplicitLayout8BitAccessKHR capability.
-  * [[features-workgroupMemoryExplicitLayout16BitAccess]]
-    pname:workgroupMemoryExplicitLayout16BitAccess indicates whether objects
-    in the code:Workgroup storage class with the code:Block decoration can:
-    have 16-bit integer and 16-bit floating-point members.
-    If this feature is not enabled, 16-bit integer or 16-bit floating-point
-    members must: not be used in such objects.
-    This also indicates whether shader modules can: declare the
-    code:WorkgroupMemoryExplicitLayout16BitAccessKHR capability.
-
-:refpage: VkPhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR
-include::{chapters}/features.txt[tag=features]
-
-include::{generated}/validity/structs/VkPhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR.txt[]
---
-endif::VK_KHR_workgroup_memory_explicit_layout[]
-
-ifdef::VK_KHR_synchronization2[]
-[open,refpage='VkPhysicalDeviceSynchronization2FeaturesKHR',desc='Structure describing whether the implementation supports v2 synchronization commands',type='structs']
---
-The sname:VkPhysicalDeviceSynchronization2FeaturesKHR structure is defined
-as:
-
-include::{generated}/api/structs/VkPhysicalDeviceSynchronization2FeaturesKHR.txt[]
-
-This structure describes the following feature:
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * [[features-synchronization2]] pname:synchronization2 indicates whether
-    the implementation supports the new set of synchronization commands
-    introduced in `apiext:VK_KHR_synchronization2`.
-
-:refpage: VkPhysicalDeviceSynchronization2FeaturesKHR
-include::{chapters}/features.txt[tag=features]
-
-include::{generated}/validity/structs/VkPhysicalDeviceSynchronization2FeaturesKHR.txt[]
---
-endif::VK_KHR_synchronization2[]
-
-ifdef::VK_EXT_vertex_input_dynamic_state[]
-[open,refpage='VkPhysicalDeviceVertexInputDynamicStateFeaturesEXT',desc='Structure describing whether the dynamic vertex input state can be used',type='structs']
---
-The sname:VkPhysicalDeviceVertexInputDynamicStateFeaturesEXT structure is
-defined as:
-
-include::{generated}/api/structs/VkPhysicalDeviceVertexInputDynamicStateFeaturesEXT.txt[]
-
-This structure describes the following feature:
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * [[features-vertexInputDynamicState]] pname:vertexInputDynamicState
-    indicates that the implementation supports the following dynamic states:
-  ** ename:VK_DYNAMIC_STATE_VERTEX_INPUT_EXT
-
-:refpage: VkPhysicalDeviceVertexInputDynamicStateFeaturesEXT
-include::{chapters}/features.txt[tag=features]
-
-include::{generated}/validity/structs/VkPhysicalDeviceVertexInputDynamicStateFeaturesEXT.txt[]
---
-endif::VK_EXT_vertex_input_dynamic_state[]
-
-ifdef::VK_KHR_fragment_shading_rate[]
-[open,refpage='VkPhysicalDeviceFragmentShadingRateFeaturesKHR',desc='Structure indicating support for variable rate fragment shading',type='structs']
---
-The sname:VkPhysicalDeviceFragmentShadingRateFeaturesKHR structure is
-defined as:
-
-include::{generated}/api/structs/VkPhysicalDeviceFragmentShadingRateFeaturesKHR.txt[]
-
-This structure describes the following features:
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * [[features-pipelineFragmentShadingRate]]
-    pname:pipelineFragmentShadingRate indicates that the implementation
-    supports the <<primsrast-fragment-shading-rate-pipeline, pipeline
-    fragment shading rate>>.
-  * [[features-primitiveFragmentShadingRate]]
-    pname:primitiveFragmentShadingRate indicates that the implementation
-    supports the <<primsrast-fragment-shading-rate-primitive, primitive
-    fragment shading rate>>.
-  * [[features-attachmentFragmentShadingRate]]
-    pname:attachmentFragmentShadingRate indicates that the implementation
-    supports the <<primsrast-fragment-shading-rate-attachment, attachment
-    fragment shading rate>>.
-
-:refpage: VkPhysicalDeviceFragmentShadingRateFeaturesKHR
-include::{chapters}/features.txt[tag=features]
-
-include::{generated}/validity/structs/VkPhysicalDeviceFragmentShadingRateFeaturesKHR.txt[]
---
-endif::VK_KHR_fragment_shading_rate[]
-
-ifdef::VK_NV_fragment_shading_rate_enums[]
-[open,refpage='VkPhysicalDeviceFragmentShadingRateEnumsFeaturesNV',desc='Structure indicating support for fragment shading rate enums',type='structs']
---
-The sname:VkPhysicalDeviceFragmentShadingRateEnumsFeaturesNV structure is
-defined as:
-
-include::{generated}/api/structs/VkPhysicalDeviceFragmentShadingRateEnumsFeaturesNV.txt[]
-
-This structure describes the following features:
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * [[features-fragmentShadingRateEnums]] pname:fragmentShadingRateEnums
-    indicates that the implementation supports specifying fragment shading
-    rates using the ename:VkFragmentShadingRateNV enumerated type.
-  * [[features-supersampleFragmentShadingRates]]
-    pname:supersampleFragmentShadingRates indicates that the implementation
-    supports fragment shading rate enum values indicating more than one
-    invocation per fragment.
-  * [[features-noInvocationFragmentShadingRates]]
-    pname:noInvocationFragmentShadingRates indicates that the implementation
-    supports a fragment shading rate enum value indicating that no fragment
-    shaders should be invoked when that shading rate is used.
-
-:refpage: VkPhysicalDeviceFragmentShadingRateEnumsFeaturesNV
-include::{chapters}/features.txt[tag=features]
-
-include::{generated}/validity/structs/VkPhysicalDeviceFragmentShadingRateEnumsFeaturesNV.txt[]
---
-endif::VK_NV_fragment_shading_rate_enums[]
-
-ifdef::VK_NV_inherited_viewport_scissor[]
-[open,refpage='VkPhysicalDeviceInheritedViewportScissorFeaturesNV',desc='Structure describing the viewport scissor inheritance behavior for an implementation',type='structs']
---
-The sname:VkPhysicalDeviceInheritedViewportScissorFeaturesNV structure is
-defined as:
-
-include::{generated}/api/structs/VkPhysicalDeviceInheritedViewportScissorFeaturesNV.txt[]
-
-This structure describes the following feature:
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-    * [[features-inheritedViewportScissor2D]]
-      pname:inheritedViewportScissor2D indicates whether secondary command
-      buffers can inherit most of the dynamic state affected by
-ifdef::VK_EXT_extended_dynamic_state[]
-      ename:VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT,
-      ename:VK_DYNAMIC_STATE_SCISSOR_WITH_COUNT_EXT,
-endif::VK_EXT_extended_dynamic_state[]
-ifdef::VK_EXT_discard_rectangles[]
-      ename:VK_DYNAMIC_STATE_DISCARD_RECTANGLE_EXT,
-endif::VK_EXT_discard_rectangles[]
-      ename:VK_DYNAMIC_STATE_VIEWPORT or ename:VK_DYNAMIC_STATE_SCISSOR,
-      from a primary command buffer.
-
-:refpage: VkPhysicalDeviceInheritedViewportScissorFeaturesNV
-include::{chapters}/features.txt[tag=features]
-
-include::{generated}/validity/structs/VkPhysicalDeviceInheritedViewportScissorFeaturesNV.txt[]
---
-endif::VK_NV_inherited_viewport_scissor[]
-
-ifdef::VK_EXT_ycbcr_2plane_444_formats[]
-[open,refpage='VkPhysicalDeviceYcbcr2Plane444FormatsFeaturesEXT',desc='Structure describing whether the implementation supports additional 2-plane 444 {YCbCr} formats',type='structs']
---
-The sname:VkPhysicalDeviceYcbcr2Plane444FormatsFeaturesEXT structure is
-defined as:
-
-include::{generated}/api/structs/VkPhysicalDeviceYcbcr2Plane444FormatsFeaturesEXT.txt[]
-
-This structure describes the following feature:
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * [[features-ycbcr2plane444Formats]] pname:ycbcr2plane444Formats indicates
-    that the implementation supports the following 2-plane 444 {YCbCr}
-    formats:
-    ** ename:VK_FORMAT_G8_B8R8_2PLANE_444_UNORM_EXT
-    ** ename:VK_FORMAT_G10X6_B10X6R10X6_2PLANE_444_UNORM_3PACK16_EXT
-    ** ename:VK_FORMAT_G12X4_B12X4R12X4_2PLANE_444_UNORM_3PACK16_EXT
-    ** ename:VK_FORMAT_G16_B16R16_2PLANE_444_UNORM_EXT
-
-:refpage: VkPhysicalDeviceYcbcr2Plane444FormatsFeaturesEXT
-include::{chapters}/features.txt[tag=features]
-
-include::{generated}/validity/structs/VkPhysicalDeviceYcbcr2Plane444FormatsFeaturesEXT.txt[]
---
-endif::VK_EXT_ycbcr_2plane_444_formats[]
-
-ifdef::VK_EXT_color_write_enable[]
-[open,refpage='VkPhysicalDeviceColorWriteEnableFeaturesEXT',desc='Structure describing whether writes to color attachments can be enabled and disabled dynamically',type='structs']
---
-The sname:VkPhysicalDeviceColorWriteEnableFeaturesEXT structure is defined
-as:
-
-include::{generated}/api/structs/VkPhysicalDeviceColorWriteEnableFeaturesEXT.txt[]
-
-This structure describes the following feature:
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * [[features-colorWriteEnable]] pname:colorWriteEnable indicates that the
-    implementation supports the dynamic state
-    ename:VK_DYNAMIC_STATE_COLOR_WRITE_ENABLE_EXT.
-
-:refpage: VkPhysicalDeviceColorWriteEnableFeaturesEXT
-include::{chapters}/features.txt[tag=features]
-
-include::{generated}/validity/structs/VkPhysicalDeviceColorWriteEnableFeaturesEXT.txt[]
---
-endif::VK_EXT_color_write_enable[]
-
-ifdef::VK_EXT_provoking_vertex[]
-[open,refpage='VkPhysicalDeviceProvokingVertexFeaturesEXT',desc='Structure describing the provoking vertex features that can be supported by an implementation',type='structs']
---
-The sname:VkPhysicalDeviceProvokingVertexFeaturesEXT structure is defined
-as:
-
-include::{generated}/api/structs/VkPhysicalDeviceProvokingVertexFeaturesEXT.txt[]
-
-This structure describes the following feature:
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * [[features-provokingVertexLast]] pname:provokingVertexLast indicates
-    whether the implementation supports the
-    ename:VK_PROVOKING_VERTEX_MODE_LAST_VERTEX_EXT
-    <<VkProvokingVertexModeEXT,provoking vertex mode>> for flat shading.
-  * [[features-transformFeedbackPreservesProvokingVertex]]
-    pname:transformFeedbackPreservesProvokingVertex indicates that the order
-    of vertices within each primitive written by transform feedback will
-    preserve the provoking vertex.
-    This does not apply to triangle fan primitives when
-    <<limits-transformFeedbackPreservesTriangleFanProvokingVertex,pname:transformFeedbackPreservesTriangleFanProvokingVertex>>
-    is ename:VK_FALSE.
-    pname:transformFeedbackPreservesProvokingVertex must: be ename:VK_FALSE
-    when the apiext:VK_EXT_transform_feedback extension is not supported.
-
-:refpage: VkPhysicalDeviceProvokingVertexFeaturesEXT
-include::{chapters}/features.txt[tag=features]
-
-ifdef::VK_EXT_transform_feedback[]
-When sname:VkPhysicalDeviceProvokingVertexFeaturesEXT is in the pname:pNext
-chain of slink:VkDeviceCreateInfo but the
-<<features-transformFeedback,transform feedback feature>> is not enabled,
-the value of pname:transformFeedbackPreservesProvokingVertex is ignored.
-endif::VK_EXT_transform_feedback[]
-
-include::{generated}/validity/structs/VkPhysicalDeviceProvokingVertexFeaturesEXT.txt[]
---
-endif::VK_EXT_provoking_vertex[]
-
-ifdef::VK_EXT_pageable_device_local_memory[]
-[open,refpage='VkPhysicalDevicePageableDeviceLocalMemoryFeaturesEXT',desc='Structure describing whether the implementation supports pageable device-local memory',type='structs']
---
-The sname:VkPhysicalDevicePageableDeviceLocalMemoryFeaturesEXT structure is
-defined as:
-
-include::{generated}/api/structs/VkPhysicalDevicePageableDeviceLocalMemoryFeaturesEXT.txt[]
-
-This structure describes the following feature:
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * [[features-pageableDeviceLocalMemory]] pname:pageableDeviceLocalMemory
-    indicates that the implementation supports pageable device-local memory
-    and may: transparently move device-local memory allocations to
-    host-local memory to better share device-local memory with other
-    applications.
-
-:refpage: VkPhysicalDevicePageableDeviceLocalMemoryFeaturesEXT
-include::{chapters}/features.txt[tag=features]
-
-include::{generated}/validity/structs/VkPhysicalDevicePageableDeviceLocalMemoryFeaturesEXT.txt[]
---
-endif::VK_EXT_pageable_device_local_memory[]
-
-ifdef::VK_EXT_multi_draw[]
-[open,refpage='VkPhysicalDeviceMultiDrawFeaturesEXT',desc='Structure describing whether the implementation supports multi draw functionality',type='structs']
---
-The sname:VkPhysicalDeviceMultiDrawFeaturesEXT structure is defined as:
-
-include::{generated}/api/structs/VkPhysicalDeviceMultiDrawFeaturesEXT.txt[]
-
-The members of the sname:VkPhysicalDeviceMultiDrawFeaturesEXT structure
-describe the following features:
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * [[features-multiDraw]] pname:multiDraw indicates that the implementation
-    supports flink:vkCmdDrawMultiEXT and flink:vkCmdDrawMultiIndexedEXT.
-
-:refpage: VkPhysicalDeviceMultiDrawFeaturesEXT
-include::{chapters}/features.txt[tag=features]
-
-include::{generated}/validity/structs/VkPhysicalDeviceMultiDrawFeaturesEXT.txt[]
---
-endif::VK_EXT_multi_draw[]
-
-ifdef::VK_NV_ray_tracing_motion_blur[]
-[open,refpage='VkPhysicalDeviceRayTracingMotionBlurFeaturesNV',desc='Structure describing the ray tracing motion blur features that can be supported by an implementation',type='structs']
---
-The sname:VkPhysicalDeviceRayTracingMotionBlurFeaturesNV structure is
-defined as:
-
-include::{generated}/api/structs/VkPhysicalDeviceRayTracingMotionBlurFeaturesNV.txt[]
-
-This structure describes the following feature:
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * [[features-rayTracingMotionBlur]] pname:rayTracingMotionBlur indicates
-    whether the implementation supports the motion blur feature.
-  * [[features-rayTracingMotionBlurPipelineTraceRaysIndirect]]
-    pname:rayTracingMotionBlurPipelineTraceRaysIndirect indicates whether
-    the implementation supports indirect ray tracing commands with the
-    motion blur feature enabled.
-
-:refpage: VkPhysicalDeviceRayTracingMotionBlurFeaturesNV
-include::{chapters}/features.txt[tag=features]
-
-include::{generated}/validity/structs/VkPhysicalDeviceRayTracingMotionBlurFeaturesNV.txt[]
---
-endif::VK_NV_ray_tracing_motion_blur[]
-
-ifdef::VK_HUAWEI_subpass_shading[]
-[open,refpage='VkPhysicalDeviceSubpassShadingFeaturesHUAWEI',desc='Structure describing whether subpass shading is enabled',type='structs']
---
-The sname:VkPhysicalDeviceSubpassShadingFeaturesHUAWEI structure is defined
-as:
-
-include::{generated}/api/structs/VkPhysicalDeviceSubpassShadingFeaturesHUAWEI.txt[]
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * [[features-subpassShading]] pname:subpassShading specifies whether
-    subpass shading is supported.
-
-:refpage: VkPhysicalDeviceSubpassShadingFeaturesHUAWEI
-include::{chapters}/features.txt[tag=features]
-
-include::{generated}/validity/structs/VkPhysicalDeviceSubpassShadingFeaturesHUAWEI.txt[]
---
-endif::VK_HUAWEI_subpass_shading[]
-
-ifdef::VK_NV_external_memory_rdma[]
-[open,refpage='VkPhysicalDeviceExternalMemoryRDMAFeaturesNV',desc='Structure describing the external memory RDMA features supported by the implementation',type='structs']
---
-The sname:VkPhysicalDeviceExternalMemoryRDMAFeaturesNV structure is defined
-as:
-
-include::{generated}/api/structs/VkPhysicalDeviceExternalMemoryRDMAFeaturesNV.txt[]
-
-This structure describes the following feature:
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * [[features-externalMemoryRDMA]] pname:externalMemoryRDMA indicates
-    whether the implementation has support for the
-    ename:VK_MEMORY_PROPERTY_RDMA_CAPABLE_BIT_NV memory property and the
-    ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_RDMA_ADDRESS_BIT_NV external memory
-    handle type.
-
-:refpage: VkPhysicalDeviceExternalMemoryRDMAFeaturesNV
-include::{chapters}/features.txt[tag=features]
-
-include::{generated}/validity/structs/VkPhysicalDeviceExternalMemoryRDMAFeaturesNV.txt[]
---
-endif::VK_NV_external_memory_rdma[]
-
-ifdef::VK_KHR_present_id[]
-[open,refpage='VkPhysicalDevicePresentIdFeaturesKHR',desc='Structure indicating support for present id',type='structs']
---
-The sname:VkPhysicalDevicePresentIdFeaturesKHR structure is defined as:
-
-include::{generated}/api/structs/VkPhysicalDevicePresentIdFeaturesKHR.txt[]
-
-This structure describes the following feature:
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * [[features-presentId]] pname:presentId indicates that the implementation
-    supports specifying present ID values in the sname:VkPresentIdKHR
-    extension to the sname:VkPresentInfoKHR struct.
-
-:refpage: VkPhysicalDevicePresentIdFeaturesKHR
-include::{chapters}/features.txt[tag=features]
-
-include::{generated}/validity/structs/VkPhysicalDevicePresentIdFeaturesKHR.txt[]
---
-endif::VK_KHR_present_id[]
-
-ifdef::VK_KHR_present_wait[]
-[open,refpage='VkPhysicalDevicePresentWaitFeaturesKHR',desc='Structure indicating support for present wait',type='structs']
---
-The sname:VkPhysicalDevicePresentWaitFeaturesKHR structure is defined as:
-
-include::{generated}/api/structs/VkPhysicalDevicePresentWaitFeaturesKHR.txt[]
-
-This structure describes the following feature:
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * [[features-presentWait]] pname:presentWait indicates that the
-    implementation supports fname:vkWaitForPresentKHR.
-
-:refpage: VkPhysicalDevicePresentWaitFeaturesKHR
-include::{chapters}/features.txt[tag=features]
-
-include::{generated}/validity/structs/VkPhysicalDevicePresentWaitFeaturesKHR.txt[]
---
-endif::VK_KHR_present_wait[]
-
-ifdef::VK_KHR_shader_integer_dot_product[]
-[open,refpage='VkPhysicalDeviceShaderIntegerDotProductFeaturesKHR',desc='Structure describing integer dot product features that can be supported by an implementation',type='structs']
---
-The sname:VkPhysicalDeviceShaderIntegerDotProductFeaturesKHR structure is
-defined as:
-
-include::{generated}/api/structs/VkPhysicalDeviceShaderIntegerDotProductFeaturesKHR.txt[]
-
-The members of the sname:VkPhysicalDeviceShaderIntegerDotProductFeaturesKHR
-structure describe the following features:
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * [[features-shaderIntegerDotProduct]] pname:shaderIntegerDotProduct
-    specifies whether shader modules can: declare the
-    code:DotProductInputAllKHR, code:DotProductInput4x8BitKHR,
-    code:DotProductInput4x8BitPackedKHR and code:DotProductKHR capabilities.
-
-:refpage: VkPhysicalDeviceShaderIntegerDotProductFeaturesKHR
-include::{chapters}/features.txt[tag=features]
-
-include::{generated}/validity/structs/VkPhysicalDeviceShaderIntegerDotProductFeaturesKHR.txt[]
---
-endif::VK_KHR_shader_integer_dot_product[]
-
-ifdef::VK_EXT_rgba10x6_formats[]
-[open,refpage='VkPhysicalDeviceRGBA10X6FormatsFeaturesEXT',desc='Structure describing whether rendering to VK_FORMAT_R10X6G10X6B10X6A10X6_UNORM_4PACK16 formats can be supported by an implementation',type='structs']
---
-The sname:VkPhysicalDeviceRGBA10X6FormatsFeaturesEXT structure is defined
-as:
-
-include::{generated}/api/structs/VkPhysicalDeviceRGBA10X6FormatsFeaturesEXT.txt[]
-
-The members of the sname:VkPhysicalDeviceRGBA10X6FormatsFeaturesEXT
-structure describe the following features:
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * [[features-formatRgba10x6WithoutYCbCrSampler]]
-    pname:formatRgba10x6WithoutYCbCrSampler indicates that
-    ename:VK_FORMAT_R10X6G10X6B10X6A10X6_UNORM_4PACK16 can: be used with a
-    sname:VkImageView with pname:subresourceRange.aspectMask equal to
-    ename:VK_IMAGE_ASPECT_COLOR_BIT without a <<samplers-YCbCr-conversion,
-    sampler {YCbCr} conversion>> enabled.
-
-:refpage: VkPhysicalDeviceRGBA10X6FormatsFeaturesEXT
-include::{chapters}/features.txt[tag=features]
-
-include::{generated}/validity/structs/VkPhysicalDeviceRGBA10X6FormatsFeaturesEXT.txt[]
---
-endif::VK_EXT_rgba10x6_formats[]
-
-ifdef::VK_KHR_maintenance4[]
-[open,refpage='VkPhysicalDeviceMaintenance4FeaturesKHR',desc='Structure describing whether the implementation supports maintenance4 functionality',type='structs']
---
-The sname:VkPhysicalDeviceMaintenance4FeaturesKHR structure is defined as:
-
-include::{generated}/api/structs/VkPhysicalDeviceMaintenance4FeaturesKHR.txt[]
-
-This structure describes the following features:
-
-  * [[features-maintenance4]] pname:maintenance4 indicates that the
-    implementation supports the following:
-  ** The application may: destroy a slink:VkPipelineLayout object
-     immediately after using it to create another object.
-  ** code:LocalSizeId can: be used as an alternative to code:LocalSize to
-     specify the local workgroup size with specialization constants.
-  ** Images created with identical creation parameters will always have the
-     same alignment requirements.
-  ** The size memory requirement of a buffer or image is never greater than
-     that of another buffer or image created with a greater or equal size.
-  ** Push constants do not have to be initialized before they are
-     dynamically accessed.
-  ** The interface matching rules allow a larger output vector to match with
-     a smaller input vector, with additional values being discarded.
-
-:refpage: VkPhysicalDeviceMaintenance4FeaturesKHR
-include::{chapters}/features.txt[tag=features]
-
-include::{generated}/validity/structs/VkPhysicalDeviceMaintenance4FeaturesKHR.txt[]
---
-endif::VK_KHR_maintenance4[]
-
-ifdef::VK_KHR_dynamic_rendering[]
-[open,refpage='VkPhysicalDeviceDynamicRenderingFeaturesKHR',desc='Structure indicating support for dynamic render pass instances',type='structs']
---
-The sname:VkPhysicalDeviceDynamicRenderingFeaturesKHR structure is defined
-as:
-
-include::{generated}/api/structs/VkPhysicalDeviceDynamicRenderingFeaturesKHR.txt[]
-
-The members of the sname:VkPhysicalDeviceDynamicRenderingFeaturesKHR
-structure describe the following features:
-
-  * [[features-dynamicRendering]] pname:dynamicRendering specifies that the
-    implementation supports dynamic render pass instances using the
-    flink:vkCmdBeginRenderingKHR command.
-
-:refpage: VkPhysicalDeviceDynamicRenderingFeaturesKHR
-include::{chapters}/features.txt[tag=features]
-
-include::{generated}/validity/structs/VkPhysicalDeviceDynamicRenderingFeaturesKHR.txt[]
---
-endif::VK_KHR_dynamic_rendering[]
-
-
-[[features-requirements]]
-== Feature Requirements
-
-All Vulkan graphics implementations must: support the following features:
-
-ifdef::VK_KHR_portability_subset[]
-  * <<features-robustBufferAccess, pname:robustBufferAccess>>, unless the
-    `apiext:VK_KHR_portability_subset` extension is enabled.
-endif::VK_KHR_portability_subset[]
-ifndef::VK_KHR_portability_subset[]
-  * <<features-robustBufferAccess, pname:robustBufferAccess>>
-endif::VK_KHR_portability_subset[]
-ifdef::VK_VERSION_1_1[]
-  * <<features-multiview, pname:multiview>>, if Vulkan 1.1 is supported.
-ifdef::VK_KHR_shader_draw_parameters[]
-  * <<features-shaderDrawParameters,pname:shaderDrawParameters>>, if the
-    `apiext:VK_KHR_shader_draw_parameters` extension is supported.
-endif::VK_KHR_shader_draw_parameters[]
-endif::VK_VERSION_1_1[]
-ifdef::VK_VERSION_1_2,VK_KHR_uniform_buffer_standard_layout[]
-  * <<features-uniformBufferStandardLayout,pname:uniformBufferStandardLayout>>,
-    if Vulkan 1.2 or the `apiext:VK_KHR_uniform_buffer_standard_layout`
-    extension is supported.
-endif::VK_VERSION_1_2,VK_KHR_uniform_buffer_standard_layout[]
-ifdef::VK_KHR_variable_pointers[]
-  * <<features-variablePointersStorageBuffer,
-    pname:variablePointersStorageBuffer>>, if the
-    `apiext:VK_KHR_variable_pointers` extension is supported.
-endif::VK_KHR_variable_pointers[]
-ifdef::VK_KHR_8bit_storage[]
-  * <<features-storageBuffer8BitAccess, pname:storageBuffer8BitAccess>>, if
-    the `apiext:VK_KHR_8bit_storage` extension is supported.
-endif::VK_KHR_8bit_storage[]
-ifdef::VK_VERSION_1_2,VK_KHR_8bit_storage[]
-  * <<features-storageBuffer8BitAccess, pname:StorageBuffer8BitAccess>>, if
-    <<features-uniformAndStorageBuffer8BitAccess,
-    pname:uniformAndStorageBuffer8BitAccess>> is enabled.
-endif::VK_VERSION_1_2,VK_KHR_8bit_storage[]
-ifdef::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
-  * If
-ifdef::VK_VERSION_1_2[the <<features-descriptorIndexing,descriptorIndexing>> feature is supported, or if]
-    the `apiext:VK_EXT_descriptor_indexing` extension is supported:
-  ** <<features-shaderSampledImageArrayDynamicIndexing,
-     pname:shaderSampledImageArrayDynamicIndexing>>
-  ** <<features-shaderStorageBufferArrayDynamicIndexing,
-     pname:shaderStorageBufferArrayDynamicIndexing>>
-  ** <<features-shaderUniformTexelBufferArrayDynamicIndexing,
-     pname:shaderUniformTexelBufferArrayDynamicIndexing>>
-  ** <<features-shaderStorageTexelBufferArrayDynamicIndexing,
-     pname:shaderStorageTexelBufferArrayDynamicIndexing>>
-  ** <<features-shaderSampledImageArrayNonUniformIndexing,
-     pname:shaderSampledImageArrayNonUniformIndexing>>
-  ** <<features-shaderStorageBufferArrayNonUniformIndexing,
-     pname:shaderStorageBufferArrayNonUniformIndexing>>
-  ** <<features-shaderUniformTexelBufferArrayNonUniformIndexing,
-     pname:shaderUniformTexelBufferArrayNonUniformIndexing>>
-  ** <<features-descriptorBindingSampledImageUpdateAfterBind,
-     pname:descriptorBindingSampledImageUpdateAfterBind>>
-  ** <<features-descriptorBindingStorageImageUpdateAfterBind,
-     pname:descriptorBindingStorageImageUpdateAfterBind>>
-  ** <<features-descriptorBindingStorageBufferUpdateAfterBind,
-     pname:descriptorBindingStorageBufferUpdateAfterBind>> (see also
-     <<limits-robustBufferAccessUpdateAfterBind,
-     pname:robustBufferAccessUpdateAfterBind>>)
-  ** <<features-descriptorBindingUniformTexelBufferUpdateAfterBind,
-     pname:descriptorBindingUniformTexelBufferUpdateAfterBind>> (see also
-     <<limits-robustBufferAccessUpdateAfterBind,
-     pname:robustBufferAccessUpdateAfterBind>>)
-  ** <<features-descriptorBindingStorageTexelBufferUpdateAfterBind,
-     pname:descriptorBindingStorageTexelBufferUpdateAfterBind>> (see also
-     <<limits-robustBufferAccessUpdateAfterBind,
-     pname:robustBufferAccessUpdateAfterBind>>)
-  ** <<features-descriptorBindingUpdateUnusedWhilePending,
-     pname:descriptorBindingUpdateUnusedWhilePending>>
-  ** <<features-descriptorBindingPartiallyBound,
-     pname:descriptorBindingPartiallyBound>>
-  ** <<features-runtimeDescriptorArray, pname:runtimeDescriptorArray>>
-endif::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
-ifdef::VK_EXT_inline_uniform_block[]
-  * <<features-inlineUniformBlock,pname:inlineUniformBlock>>, if the
-    `apiext:VK_EXT_inline_uniform_block` extension is supported.
-ifdef::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
-  * <<features-descriptorBindingInlineUniformBlockUpdateAfterBind,
-    pname:descriptorBindingInlineUniformBlockUpdateAfterBind>>, if the
-    `apiext:VK_EXT_inline_uniform_block` extension is supported; and if
-ifdef::VK_VERSION_1_2[the <<features-descriptorIndexing,pname:descriptorIndexing>> feature is supported, or]
-    the `apiext:VK_EXT_descriptor_indexing` extension is supported.
-endif::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
-endif::VK_EXT_inline_uniform_block[]
-ifdef::VK_EXT_scalar_block_layout[]
-  * <<features-scalarBlockLayout,pname:scalarBlockLayout>>, if the
-    `apiext:VK_EXT_scalar_block_layout` extension is supported.
-endif::VK_EXT_scalar_block_layout[]
-ifdef::VK_VERSION_1_2[]
-  * <<features-subgroupBroadcastDynamicId,
-    pname:subgroupBroadcastDynamicId>>, if Vulkan 1.2 is supported.
-endif::VK_VERSION_1_2[]
-ifdef::VK_VERSION_1_2+VK_KHR_sampler_mirror_clamp_to_edge[]
-  * <<features-samplerMirrorClampToEdge, pname:samplerMirrorClampToEdge>>,
-    if the `apiext:VK_KHR_sampler_mirror_clamp_to_edge` extension is
-    supported.
-endif::VK_VERSION_1_2+VK_KHR_sampler_mirror_clamp_to_edge[]
-ifdef::VK_VERSION_1_2+VK_KHR_draw_indirect_count[]
-  * <<features-drawIndirectCount, pname:drawIndirectCount>>, if the
-    `apiext:VK_KHR_draw_indirect_count` extension is supported.
-endif::VK_VERSION_1_2+VK_KHR_draw_indirect_count[]
-ifdef::VK_VERSION_1_2+VK_EXT_sampler_filter_minmax[]
-  * <<features-samplerFilterMinmax, pname:samplerFilterMinmax>>, if the
-    `apiext:VK_EXT_sampler_filter_minmax` extension is supported.
-endif::VK_VERSION_1_2+VK_EXT_sampler_filter_minmax[]
-ifdef::VK_VERSION_1_2+VK_EXT_shader_viewport_index_layer[]
-  * <<features-shaderOutputViewportIndex, pname:shaderOutputViewportIndex>>,
-    if the `apiext:VK_EXT_shader_viewport_index_layer` extension is
-    supported.
-  * <<features-shaderOutputLayer, pname:shaderOutputLayer>>, if the
-    `apiext:VK_EXT_shader_viewport_index_layer` extension is supported.
-endif::VK_VERSION_1_2+VK_EXT_shader_viewport_index_layer[]
-ifdef::VK_EXT_subgroup_size_control[]
-  * <<features-subgroupSizeControl, pname:subgroupSizeControl>>, if the
-    `apiext:VK_EXT_subgroup_size_control` extension is supported.
-  * <<features-computeFullSubgroups, pname:computeFullSubgroups>>, if the
-    `apiext:VK_EXT_subgroup_size_control` extension is supported.
-endif::VK_EXT_subgroup_size_control[]
-ifdef::VK_EXT_device_memory_report[]
-  * <<features-deviceMemoryReport, pname:deviceMemoryReport>>, if the
-    `apiext:VK_EXT_device_memory_report` extension is supported.
-endif::VK_EXT_device_memory_report[]
-ifdef::VK_EXT_global_priority_query[]
-  * <<features-globalPriorityQuery, pname:globalPriorityQuery>>, if the
-    `apiext:VK_EXT_global_priority_query` extension is supported.
-endif::VK_EXT_global_priority_query[]
-ifdef::VK_VERSION_1_2,VK_KHR_imageless_framebuffer[]
-  * <<features-imagelessFramebuffer, pname:imagelessFramebuffer>>, if Vulkan
-    1.2 or the `apiext:VK_KHR_imageless_framebuffer` extension is supported.
-endif::VK_VERSION_1_2,VK_KHR_imageless_framebuffer[]
-ifdef::VK_VERSION_1_2,VK_KHR_separate_depth_stencil_layouts[]
-  * <<features-separateDepthStencilLayouts,
-    pname:separateDepthStencilLayouts>>, if Vulkan 1.2 or the
-    `apiext:VK_KHR_separate_depth_stencil_layouts` extension is supported.
-endif::VK_VERSION_1_2,VK_KHR_separate_depth_stencil_layouts[]
-ifdef::VK_VERSION_1_2,VK_EXT_host_query_reset[]
-  * <<features-hostQueryReset, pname:hostQueryReset>>, if Vulkan 1.2 or the
-    `apiext:VK_EXT_host_query_reset` extension is supported.
-endif::VK_VERSION_1_2,VK_EXT_host_query_reset[]
-ifdef::VK_VERSION_1_2,VK_KHR_timeline_semaphore[]
-  * <<features-timelineSemaphore, pname:timelineSemaphore>>, if Vulkan 1.2
-    or the `apiext:VK_KHR_timeline_semaphore` extension is supported.
-endif::VK_VERSION_1_2,VK_KHR_timeline_semaphore[]
-ifdef::VK_KHR_acceleration_structure[]
-  * If the `apiext:VK_KHR_acceleration_structure` extension is supported:
-  ** <<features-accelerationStructure,pname:accelerationStructure>>
-  ** All the features required by
-ifdef::VK_VERSION_1_2[the <<features-descriptorIndexing,descriptorIndexing>> feature if Vulkan 1.2 is supported, or]
-     the `apiext:VK_EXT_descriptor_indexing` extension.
-  ** <<features-descriptorBindingAccelerationStructureUpdateAfterBind,
-     pname:descriptorBindingAccelerationStructureUpdateAfterBind>>
-  ** <<features-bufferDeviceAddress, pname:bufferDeviceAddress>> from
-ifdef::VK_VERSION_1_2[Vulkan 1.2 or]
-     the `apiext:VK_KHR_buffer_device_address` extension.
-endif::VK_KHR_acceleration_structure[]
-ifdef::VK_KHR_ray_tracing_pipeline[]
-  * If the `apiext:VK_KHR_ray_tracing_pipeline` extension is supported:
-  ** <<features-accelerationStructure,pname:accelerationStructure>> from
-     `apiext:VK_KHR_acceleration_structure`
-  ** <<features-rayTracingPipeline, pname:rayTracingPipeline>>
-  ** <<features-rayTracingPipelineTraceRaysIndirect,
-     pname:rayTracingPipelineTraceRaysIndirect>>
-  ** <<features-rayTraversalPrimitiveCulling,
-     pname:rayTraversalPrimitiveCulling>>, if <<features-rayQuery,
-     pname:rayQuery>> is supported from `apiext:VK_KHR_ray_query`
-  ** the `apiext:VK_KHR_pipeline_library` extension.
-endif::VK_KHR_ray_tracing_pipeline[]
-ifdef::VK_KHR_ray_query[]
-  * If the `apiext:VK_KHR_ray_query` extension is supported:
-  ** <<features-accelerationStructure,pname:accelerationStructure>> from
-     `apiext:VK_KHR_acceleration_structure`
-  ** <<features-rayQuery, pname:rayQuery>>
-endif::VK_KHR_ray_query[]
-ifdef::VK_EXT_pipeline_creation_cache_control[]
-  * <<features-pipelineCreationCacheControl,
-    pname:pipelineCreationCacheControl>>, if the
-    `apiext:VK_EXT_pipeline_creation_cache_control` extension is supported.
-endif::VK_EXT_pipeline_creation_cache_control[]
-ifdef::VK_VERSION_1_2,VK_KHR_shader_subgroup_extended_types[]
-  * <<features-subgroup-extended-types, pname:shaderSubgroupExtendedTypes>>,
-    if Vulkan 1.2 or the `apiext:VK_KHR_shader_subgroup_extended_types`
-    extension is supported.
-endif::VK_VERSION_1_2,VK_KHR_shader_subgroup_extended_types[]
-ifdef::VK_KHR_sampler_ycbcr_conversion[]
-  * <<features-samplerYcbcrConversion, pname:samplerYcbcrConversion>>, if
-    the `apiext:VK_KHR_sampler_ycbcr_conversion` extension is supported.
-endif::VK_KHR_sampler_ycbcr_conversion[]
-ifdef::VK_KHR_pipeline_executable_properties[]
-  * <<features-pipelineExecutableInfo, pname:pipelineExecutableInfo>>, if
-    the `apiext:VK_KHR_pipeline_executable_properties` extension is
-    supported.
-endif::VK_KHR_pipeline_executable_properties[]
-ifdef::VK_EXT_texture_compression_astc_hdr[]
-  * <<features-textureCompressionASTC_HDR,
-    pname:textureCompressionASTC_HDR>>, if the
-    `apiext:VK_EXT_texture_compression_astc_hdr` extension is supported.
-endif::VK_EXT_texture_compression_astc_hdr[]
-ifdef::VK_EXT_depth_clip_enable[]
-  * <<features-depthClipEnable, pname:depthClipEnable>>, if the
-    `apiext:VK_EXT_depth_clip_enable` extension is supported.
-endif::VK_EXT_depth_clip_enable[]
-ifdef::VK_EXT_memory_priority[]
-  * <<features-memoryPriority, pname:memoryPriority>>, if the
-    `apiext:VK_EXT_memory_priority` extension is supported.
-endif::VK_EXT_memory_priority[]
-ifdef::VK_EXT_ycbcr_image_arrays[]
-  * <<features-ycbcrImageArrays, pname:ycbcrImageArrays>>, if the
-    `apiext:VK_EXT_ycbcr_image_arrays` extension is supported.
-endif::VK_EXT_ycbcr_image_arrays[]
-ifdef::VK_EXT_index_type_uint8[]
-  * <<features-indexTypeUint8, pname:indexTypeUint8>>, if the
-    `apiext:VK_EXT_index_type_uint8` extension is supported.
-endif::VK_EXT_index_type_uint8[]
-ifdef::VK_EXT_primitive_topology_list_restart[]
-  * <<features-primitiveTopologyListRestart,
-    pname:primitiveTopologyListRestart>>, if the
-    `apiext:VK_EXT_primitive_topology_list_restart` extension is supported.
-endif::VK_EXT_primitive_topology_list_restart[]
-ifdef::VK_EXT_shader_demote_to_helper_invocation[]
-  * <<features-shaderDemoteToHelperInvocation,
-    pname:shaderDemoteToHelperInvocation>>, if the
-    `apiext:VK_EXT_shader_demote_to_helper_invocation` extension is
-    supported.
-endif::VK_EXT_shader_demote_to_helper_invocation[]
-ifdef::VK_EXT_texel_buffer_alignment[]
-  * <<features-texelBufferAlignment, pname:texelBufferAlignment>>, if the
-    `apiext:VK_EXT_texel_buffer_alignment` extension is supported.
-endif::VK_EXT_texel_buffer_alignment[]
-ifdef::VK_KHR_vulkan_memory_model[]
-  * <<features-vulkanMemoryModel, pname:vulkanMemoryModel>>, if the
-    `apiext:VK_KHR_vulkan_memory_model` extension is supported.
-endif::VK_KHR_vulkan_memory_model[]
-ifdef::VK_KHR_buffer_device_address[]
-  * <<features-bufferDeviceAddress, pname:bufferDeviceAddress>>, if the
-    `apiext:VK_KHR_buffer_device_address` extension is supported.
-endif::VK_KHR_buffer_device_address[]
-ifdef::VK_KHR_performance_query[]
-  * <<VkPhysicalDevicePerformanceQueryFeaturesKHR,
-    pname:performanceCounterQueryPools>>, if the
-    `apiext:VK_KHR_performance_query` extension is supported.
-endif::VK_KHR_performance_query[]
-ifdef::VK_EXT_transform_feedback[]
-  * <<features-transformFeedback, pname:transformFeedback>>, if the
-    `apiext:VK_EXT_transform_feedback` extension is supported.
-endif::VK_EXT_transform_feedback[]
-ifdef::VK_EXT_conditional_rendering[]
-  * <<features-conditionalRendering, pname:conditionalRendering>>, if the
-    `apiext:VK_EXT_conditional_rendering` extension is supported.
-endif::VK_EXT_conditional_rendering[]
-ifdef::VK_EXT_vertex_attribute_divisor[]
-  * <<features-vertexAttributeInstanceRateDivisor,
-    pname:vertexAttributeInstanceRateDivisor>>, if the
-    `apiext:VK_EXT_vertex_attribute_divisor` extension is supported.
-endif::VK_EXT_vertex_attribute_divisor[]
-ifdef::VK_EXT_fragment_density_map[]
-  * <<features-fragmentDensityMap, pname:fragmentDensityMap>>, if the
-    `apiext:VK_EXT_fragment_density_map` extension is supported.
-endif::VK_EXT_fragment_density_map[]
-ifdef::VK_KHR_shader_clock[]
-  * <<features-shaderSubgroupClock, pname:shaderSubgroupClock>>, if the
-    `apiext:VK_KHR_shader_clock` extension is supported.
-endif::VK_KHR_shader_clock[]
-ifdef::VK_KHR_shader_atomic_int64[]
-  * <<features-shaderBufferInt64Atomics, pname:shaderBufferInt64Atomics>>,
-    if the `apiext:VK_KHR_shader_atomic_int64` extension is supported.
-endif::VK_KHR_shader_atomic_int64[]
-ifdef::VK_VERSION_1_2,VK_KHR_shader_atomic_int64[]
-  * <<features-shaderInt64, pname:shaderInt64>>, if the
-    <<features-shaderSharedInt64Atomics, pname:shaderSharedInt64Atomics>> or
-    <<features-shaderBufferInt64Atomics, pname:shaderBufferInt64Atomics>>
-    features are supported.
-endif::VK_VERSION_1_2,VK_KHR_shader_atomic_int64[]
-ifdef::VK_KHR_shader_float16_int8[]
-  * <<features-shaderFloat16, pname:shaderFloat16>> or
-    <<features-shaderInt8, pname:shaderInt8>>, if the
-    `apiext:VK_KHR_shader_float16_int8` extension is supported.
-endif::VK_KHR_shader_float16_int8[]
-ifdef::VK_EXT_fragment_shader_interlock[]
-  * <<features-fragmentShaderSampleInterlock,
-    pname:fragmentShaderSampleInterlock>> or
-    <<features-fragmentShaderPixelInterlock,
-    pname:fragmentShaderPixelInterlock>> or
-    <<features-fragmentShaderShadingRateInterlock,
-    pname:fragmentShaderShadingRateInterlock>>, if the
-    `apiext:VK_EXT_fragment_shader_interlock` extension is supported.
-endif::VK_EXT_fragment_shader_interlock[]
-ifdef::VK_EXT_line_rasterization[]
-  * <<features-rectangularLines, pname:rectangularLines>> or
-    <<features-bresenhamLines, pname:bresenhamLines>> or
-    <<features-smoothLines, pname:smoothLines>> or
-    <<features-stippledRectangularLines, pname:stippledRectangularLines>> or
-    <<features-stippledBresenhamLines, pname:stippledBresenhamLines>> or
-    <<features-stippledSmoothLines, pname:stippledSmoothLines>>, if the
-    `apiext:VK_EXT_line_rasterization` extension is supported.
-endif::VK_EXT_line_rasterization[]
-ifdef::VK_KHR_16bit_storage[]
-  * <<features-storageBuffer16BitAccess, pname:storageBuffer16BitAccess>>,
-    if the `apiext:VK_KHR_16bit_storage` extension is supported.
-endif::VK_KHR_16bit_storage[]
-ifdef::VK_VERSION_1_1,VK_KHR_16bit_storage[]
-  * <<features-storageBuffer16BitAccess, pname:storageBuffer16BitAccess>>,
-    if <<features-uniformAndStorageBuffer16BitAccess,
-    pname:uniformAndStorageBuffer16BitAccess>> is enabled.
-endif::VK_VERSION_1_1,VK_KHR_16bit_storage[]
-ifdef::VK_EXT_image_robustness[]
-  * <<features-robustImageAccess, pname:robustImageAccess>>, if the
-    `apiext:VK_EXT_image_robustness` extension is supported.
-endif::VK_EXT_image_robustness[]
-ifdef::VK_EXT_4444_formats[]
-  * <<features-formatA4R4G4B4, pname:formatA4R4G4B4>>, if the
-    `apiext:VK_EXT_4444_formats` extension is supported.
-endif::VK_EXT_4444_formats[]
-ifdef::VK_VALVE_mutable_descriptor_type[]
-  * <<features-mutableDescriptorType, pname:mutableDescriptorType>>, if the
-    `apiext:VK_VALVE_mutable_descriptor_type` extension is supported.
-endif::VK_VALVE_mutable_descriptor_type[]
-ifdef::VK_EXT_shader_image_atomic_int64[]
-  * <<features-shaderInt64, pname:shaderInt64>> and
-    <<features-shaderImageInt64Atomics, pname:shaderImageInt64Atomics>>, if
-    the `apiext:VK_EXT_shader_image_atomic_int64` extension is supported.
-  * <<features-shaderImageInt64Atomics, pname:shaderImageInt64Atomics>>, if
-    the <<features-sparseImageInt64Atomics, pname:sparseImageInt64Atomics>>
-    feature is supported.
-endif::VK_EXT_shader_image_atomic_int64[]
-ifdef::VK_EXT_shader_atomic_float[]
-  * <<features-shaderImageFloat32Atomics, pname:shaderImageFloat32Atomics>>,
-    if the <<features-sparseImageFloat32Atomics,
-    pname:sparseImageFloat32Atomics>> feature is supported.
-  * <<features-shaderImageFloat32AtomicAdd,
-    pname:shaderImageFloat32AtomicAdd>>, if the
-    <<features-sparseImageFloat32AtomicAdd,
-    pname:sparseImageFloat32AtomicAdd>> feature is supported.
-endif::VK_EXT_shader_atomic_float[]
-ifdef::VK_KHR_fragment_shading_rate[]
-  * <<features-pipelineFragmentShadingRate,
-    pname:pipelineFragmentShadingRate>>, if the
-    `apiext:VK_KHR_fragment_shading_rate` extension is supported.
-endif::VK_KHR_fragment_shading_rate[]
-ifdef::VK_KHR_shader_terminate_invocation[]
-  * <<features-shaderTerminateInvocation, pname:shaderTerminateInvocation>>
-    if the `apiext:VK_KHR_shader_terminate_invocation` extension is
-    supported.
-endif::VK_KHR_shader_terminate_invocation[]
-ifdef::VK_KHR_zero_initialize_workgroup_memory[]
-  * <<features-shaderZeroInitializeWorkgroupMemory,
-    pname:shaderZeroInitializeWorkgroupMem>>, if the
-    `apiext:VK_KHR_zero_initialize_workgroup_memory` extension is supported.
-endif::VK_KHR_zero_initialize_workgroup_memory[]
-ifdef::VK_KHR_workgroup_memory_explicit_layout[]
-  * <<features-workgroupMemoryExplicitLayout,
-    pname:workgroupMemoryExplicitLayout>>, if the
-    `apiext:VK_KHR_workgroup_memory_explicit_layout` extension is supported.
-endif::VK_KHR_workgroup_memory_explicit_layout[]
-ifdef::VK_EXT_vertex_input_dynamic_state[]
-  * <<features-vertexInputDynamicState, pname:vertexInputDynamicState>>, if
-    the `apiext:VK_EXT_vertex_input_dynamic_state` extension is supported.
-endif::VK_EXT_vertex_input_dynamic_state[]
-ifdef::VK_KHR_synchronization2[]
-  * <<features-synchronization2, pname:synchronization2>> if the
-    `apiext:VK_KHR_synchronization2` extension is supported.
-endif::VK_KHR_synchronization2[]
-ifdef::VK_EXT_provoking_vertex[]
-  * <<features-provokingVertexLast, pname:provokingVertexLast>>, if the
-    `apiext:VK_EXT_provoking_vertex` extension is supported.
-endif::VK_EXT_provoking_vertex[]
-ifdef::VK_KHR_shader_subgroup_uniform_control_flow[]
-  * <<features-shaderSubgroupUniformControlFlow,
-    pname:shaderSubgroupUniformControlFlow>>, if the
-    `apiext:VK_KHR_shader_subgroup_uniform_control_flow` extension is
-    supported.
-endif::VK_KHR_shader_subgroup_uniform_control_flow[]
-ifdef::VK_EXT_border_color_swizzle[]
-  * <<features-borderColorSwizzle, pname:borderColorSwizzle>> if the
-    apiext:VK_EXT_border_color_swizzle extension is supported.
-endif::VK_EXT_border_color_swizzle[]
-ifdef::VK_EXT_multi_draw[]
-  * <<features-multiDraw, pname:multiDraw>>, if the
-    `apiext:VK_EXT_multi_draw` extension is supported.
-endif::VK_EXT_multi_draw[]
-ifdef::VK_EXT_shader_atomic_float2[]
-  * <<features-shaderImageFloat32AtomicMinMax,
-    pname:shaderImageFloat32AtomicMinMax>>, if the
-    <<features-sparseImageFloat32AtomicMinMax,
-    pname:sparseImageFloat32AtomicMinMax>> feature is supported.
-endif::VK_EXT_shader_atomic_float2[]
-ifdef::VK_KHR_present_id[]
-  * <<features-presentId, pname:presentId>>, if the
-    `apiext:VK_KHR_present_id` extension is supported.
-endif::VK_KHR_present_id[]
-ifdef::VK_KHR_present_wait[]
-  * <<features-presentWait, pname:presentWait>>, if the
-    `apiext:VK_KHR_present_wait` extension is supported.
-endif::VK_KHR_present_wait[]
-ifdef::VK_KHR_shader_integer_dot_product[]
-  * <<features-shaderIntegerDotProduct, pname:shaderIntegerDotProduct>> if
-    the `apiext:VK_KHR_shader_integer_dot_product` extension is supported.
-endif::VK_KHR_shader_integer_dot_product[]
-ifdef::VK_KHR_maintenance4[]
-  * <<features-maintenance4, pname:maintenance4>>, if the
-    `apiext:VK_KHR_maintenance4` extension is supported.
-endif::VK_KHR_maintenance4[]
-
-All other features defined in the Specification are optional:.
diff --git a/registry/vulkan/chapters/formats.txt b/registry/vulkan/chapters/formats.txt
deleted file mode 100644
index 3b3c7a3..0000000
--- a/registry/vulkan/chapters/formats.txt
+++ /dev/null
@@ -1,4008 +0,0 @@
-// Copyright 2015-2021 The Khronos Group, Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-[[formats]]
-= Formats
-
-Supported buffer and image formats may: vary across implementations.
-A minimum set of format features are guaranteed, but others must: be
-explicitly queried before use to ensure they are supported by the
-implementation.
-
-The features for the set of formats (elink:VkFormat) supported by the
-implementation are queried individually using the
-flink:vkGetPhysicalDeviceFormatProperties command.
-
-
-[[formats-definition]]
-== Format Definition
-
-[open,refpage='VkFormat',desc='Available image formats',type='enums']
---
-The following image formats can: be passed to, and may: be returned from
-Vulkan commands.
-The memory required to store each format is discussed with that format, and
-also summarized in the <<texel-block-size, Representation and Texel Block
-Size>> section and the <<formats-compatibility, Compatible formats>> table.
-
-include::{generated}/api/enums/VkFormat.txt[]
-
-  * ename:VK_FORMAT_UNDEFINED specifies that the format is not specified.
-  * ename:VK_FORMAT_R4G4_UNORM_PACK8 specifies a two-component, 8-bit packed
-    unsigned normalized format that has a 4-bit R component in bits 4..7,
-    and a 4-bit G component in bits 0..3.
-  * ename:VK_FORMAT_R4G4B4A4_UNORM_PACK16 specifies a four-component, 16-bit
-    packed unsigned normalized format that has a 4-bit R component in bits
-    12..15, a 4-bit G component in bits 8..11, a 4-bit B component in bits
-    4..7, and a 4-bit A component in bits 0..3.
-  * ename:VK_FORMAT_B4G4R4A4_UNORM_PACK16 specifies a four-component, 16-bit
-    packed unsigned normalized format that has a 4-bit B component in bits
-    12..15, a 4-bit G component in bits 8..11, a 4-bit R component in bits
-    4..7, and a 4-bit A component in bits 0..3.
-ifdef::VK_EXT_4444_formats[]
-  * ename:VK_FORMAT_A4R4G4B4_UNORM_PACK16_EXT specifies a four-component,
-    16-bit packed unsigned normalized format that has a 4-bit A component in
-    bits 12..15, a 4-bit R component in bits 8..11, a 4-bit G component in
-    bits 4..7, and a 4-bit B component in bits 0..3.
-  * ename:VK_FORMAT_A4B4G4R4_UNORM_PACK16_EXT specifies a four-component,
-    16-bit packed unsigned normalized format that has a 4-bit A component in
-    bits 12..15, a 4-bit B component in bits 8..11, a 4-bit G component in
-    bits 4..7, and a 4-bit R component in bits 0..3.
-endif::VK_EXT_4444_formats[]
-  * ename:VK_FORMAT_R5G6B5_UNORM_PACK16 specifies a three-component, 16-bit
-    packed unsigned normalized format that has a 5-bit R component in bits
-    11..15, a 6-bit G component in bits 5..10, and a 5-bit B component in
-    bits 0..4.
-  * ename:VK_FORMAT_B5G6R5_UNORM_PACK16 specifies a three-component, 16-bit
-    packed unsigned normalized format that has a 5-bit B component in bits
-    11..15, a 6-bit G component in bits 5..10, and a 5-bit R component in
-    bits 0..4.
-  * ename:VK_FORMAT_R5G5B5A1_UNORM_PACK16 specifies a four-component, 16-bit
-    packed unsigned normalized format that has a 5-bit R component in bits
-    11..15, a 5-bit G component in bits 6..10, a 5-bit B component in bits
-    1..5, and a 1-bit A component in bit 0.
-  * ename:VK_FORMAT_B5G5R5A1_UNORM_PACK16 specifies a four-component, 16-bit
-    packed unsigned normalized format that has a 5-bit B component in bits
-    11..15, a 5-bit G component in bits 6..10, a 5-bit R component in bits
-    1..5, and a 1-bit A component in bit 0.
-  * ename:VK_FORMAT_A1R5G5B5_UNORM_PACK16 specifies a four-component, 16-bit
-    packed unsigned normalized format that has a 1-bit A component in bit
-    15, a 5-bit R component in bits 10..14, a 5-bit G component in bits
-    5..9, and a 5-bit B component in bits 0..4.
-  * ename:VK_FORMAT_R8_UNORM specifies a one-component, 8-bit unsigned
-    normalized format that has a single 8-bit R component.
-  * ename:VK_FORMAT_R8_SNORM specifies a one-component, 8-bit signed
-    normalized format that has a single 8-bit R component.
-  * ename:VK_FORMAT_R8_USCALED specifies a one-component, 8-bit unsigned
-    scaled integer format that has a single 8-bit R component.
-  * ename:VK_FORMAT_R8_SSCALED specifies a one-component, 8-bit signed
-    scaled integer format that has a single 8-bit R component.
-  * ename:VK_FORMAT_R8_UINT specifies a one-component, 8-bit unsigned
-    integer format that has a single 8-bit R component.
-  * ename:VK_FORMAT_R8_SINT specifies a one-component, 8-bit signed integer
-    format that has a single 8-bit R component.
-  * ename:VK_FORMAT_R8_SRGB specifies a one-component, 8-bit unsigned
-    normalized format that has a single 8-bit R component stored with sRGB
-    nonlinear encoding.
-  * ename:VK_FORMAT_R8G8_UNORM specifies a two-component, 16-bit unsigned
-    normalized format that has an 8-bit R component in byte 0, and an 8-bit
-    G component in byte 1.
-  * ename:VK_FORMAT_R8G8_SNORM specifies a two-component, 16-bit signed
-    normalized format that has an 8-bit R component in byte 0, and an 8-bit
-    G component in byte 1.
-  * ename:VK_FORMAT_R8G8_USCALED specifies a two-component, 16-bit unsigned
-    scaled integer format that has an 8-bit R component in byte 0, and an
-    8-bit G component in byte 1.
-  * ename:VK_FORMAT_R8G8_SSCALED specifies a two-component, 16-bit signed
-    scaled integer format that has an 8-bit R component in byte 0, and an
-    8-bit G component in byte 1.
-  * ename:VK_FORMAT_R8G8_UINT specifies a two-component, 16-bit unsigned
-    integer format that has an 8-bit R component in byte 0, and an 8-bit G
-    component in byte 1.
-  * ename:VK_FORMAT_R8G8_SINT specifies a two-component, 16-bit signed
-    integer format that has an 8-bit R component in byte 0, and an 8-bit G
-    component in byte 1.
-  * ename:VK_FORMAT_R8G8_SRGB specifies a two-component, 16-bit unsigned
-    normalized format that has an 8-bit R component stored with sRGB
-    nonlinear encoding in byte 0, and an 8-bit G component stored with sRGB
-    nonlinear encoding in byte 1.
-  * ename:VK_FORMAT_R8G8B8_UNORM specifies a three-component, 24-bit
-    unsigned normalized format that has an 8-bit R component in byte 0, an
-    8-bit G component in byte 1, and an 8-bit B component in byte 2.
-  * ename:VK_FORMAT_R8G8B8_SNORM specifies a three-component, 24-bit signed
-    normalized format that has an 8-bit R component in byte 0, an 8-bit G
-    component in byte 1, and an 8-bit B component in byte 2.
-  * ename:VK_FORMAT_R8G8B8_USCALED specifies a three-component, 24-bit
-    unsigned scaled format that has an 8-bit R component in byte 0, an 8-bit
-    G component in byte 1, and an 8-bit B component in byte 2.
-  * ename:VK_FORMAT_R8G8B8_SSCALED specifies a three-component, 24-bit
-    signed scaled format that has an 8-bit R component in byte 0, an 8-bit G
-    component in byte 1, and an 8-bit B component in byte 2.
-  * ename:VK_FORMAT_R8G8B8_UINT specifies a three-component, 24-bit unsigned
-    integer format that has an 8-bit R component in byte 0, an 8-bit G
-    component in byte 1, and an 8-bit B component in byte 2.
-  * ename:VK_FORMAT_R8G8B8_SINT specifies a three-component, 24-bit signed
-    integer format that has an 8-bit R component in byte 0, an 8-bit G
-    component in byte 1, and an 8-bit B component in byte 2.
-  * ename:VK_FORMAT_R8G8B8_SRGB specifies a three-component, 24-bit unsigned
-    normalized format that has an 8-bit R component stored with sRGB
-    nonlinear encoding in byte 0, an 8-bit G component stored with sRGB
-    nonlinear encoding in byte 1, and an 8-bit B component stored with sRGB
-    nonlinear encoding in byte 2.
-  * ename:VK_FORMAT_B8G8R8_UNORM specifies a three-component, 24-bit
-    unsigned normalized format that has an 8-bit B component in byte 0, an
-    8-bit G component in byte 1, and an 8-bit R component in byte 2.
-  * ename:VK_FORMAT_B8G8R8_SNORM specifies a three-component, 24-bit signed
-    normalized format that has an 8-bit B component in byte 0, an 8-bit G
-    component in byte 1, and an 8-bit R component in byte 2.
-  * ename:VK_FORMAT_B8G8R8_USCALED specifies a three-component, 24-bit
-    unsigned scaled format that has an 8-bit B component in byte 0, an 8-bit
-    G component in byte 1, and an 8-bit R component in byte 2.
-  * ename:VK_FORMAT_B8G8R8_SSCALED specifies a three-component, 24-bit
-    signed scaled format that has an 8-bit B component in byte 0, an 8-bit G
-    component in byte 1, and an 8-bit R component in byte 2.
-  * ename:VK_FORMAT_B8G8R8_UINT specifies a three-component, 24-bit unsigned
-    integer format that has an 8-bit B component in byte 0, an 8-bit G
-    component in byte 1, and an 8-bit R component in byte 2.
-  * ename:VK_FORMAT_B8G8R8_SINT specifies a three-component, 24-bit signed
-    integer format that has an 8-bit B component in byte 0, an 8-bit G
-    component in byte 1, and an 8-bit R component in byte 2.
-  * ename:VK_FORMAT_B8G8R8_SRGB specifies a three-component, 24-bit unsigned
-    normalized format that has an 8-bit B component stored with sRGB
-    nonlinear encoding in byte 0, an 8-bit G component stored with sRGB
-    nonlinear encoding in byte 1, and an 8-bit R component stored with sRGB
-    nonlinear encoding in byte 2.
-  * ename:VK_FORMAT_R8G8B8A8_UNORM specifies a four-component, 32-bit
-    unsigned normalized format that has an 8-bit R component in byte 0, an
-    8-bit G component in byte 1, an 8-bit B component in byte 2, and an
-    8-bit A component in byte 3.
-  * ename:VK_FORMAT_R8G8B8A8_SNORM specifies a four-component, 32-bit signed
-    normalized format that has an 8-bit R component in byte 0, an 8-bit G
-    component in byte 1, an 8-bit B component in byte 2, and an 8-bit A
-    component in byte 3.
-  * ename:VK_FORMAT_R8G8B8A8_USCALED specifies a four-component, 32-bit
-    unsigned scaled format that has an 8-bit R component in byte 0, an 8-bit
-    G component in byte 1, an 8-bit B component in byte 2, and an 8-bit A
-    component in byte 3.
-  * ename:VK_FORMAT_R8G8B8A8_SSCALED specifies a four-component, 32-bit
-    signed scaled format that has an 8-bit R component in byte 0, an 8-bit G
-    component in byte 1, an 8-bit B component in byte 2, and an 8-bit A
-    component in byte 3.
-  * ename:VK_FORMAT_R8G8B8A8_UINT specifies a four-component, 32-bit
-    unsigned integer format that has an 8-bit R component in byte 0, an
-    8-bit G component in byte 1, an 8-bit B component in byte 2, and an
-    8-bit A component in byte 3.
-  * ename:VK_FORMAT_R8G8B8A8_SINT specifies a four-component, 32-bit signed
-    integer format that has an 8-bit R component in byte 0, an 8-bit G
-    component in byte 1, an 8-bit B component in byte 2, and an 8-bit A
-    component in byte 3.
-  * ename:VK_FORMAT_R8G8B8A8_SRGB specifies a four-component, 32-bit
-    unsigned normalized format that has an 8-bit R component stored with
-    sRGB nonlinear encoding in byte 0, an 8-bit G component stored with sRGB
-    nonlinear encoding in byte 1, an 8-bit B component stored with sRGB
-    nonlinear encoding in byte 2, and an 8-bit A component in byte 3.
-  * ename:VK_FORMAT_B8G8R8A8_UNORM specifies a four-component, 32-bit
-    unsigned normalized format that has an 8-bit B component in byte 0, an
-    8-bit G component in byte 1, an 8-bit R component in byte 2, and an
-    8-bit A component in byte 3.
-  * ename:VK_FORMAT_B8G8R8A8_SNORM specifies a four-component, 32-bit signed
-    normalized format that has an 8-bit B component in byte 0, an 8-bit G
-    component in byte 1, an 8-bit R component in byte 2, and an 8-bit A
-    component in byte 3.
-  * ename:VK_FORMAT_B8G8R8A8_USCALED specifies a four-component, 32-bit
-    unsigned scaled format that has an 8-bit B component in byte 0, an 8-bit
-    G component in byte 1, an 8-bit R component in byte 2, and an 8-bit A
-    component in byte 3.
-  * ename:VK_FORMAT_B8G8R8A8_SSCALED specifies a four-component, 32-bit
-    signed scaled format that has an 8-bit B component in byte 0, an 8-bit G
-    component in byte 1, an 8-bit R component in byte 2, and an 8-bit A
-    component in byte 3.
-  * ename:VK_FORMAT_B8G8R8A8_UINT specifies a four-component, 32-bit
-    unsigned integer format that has an 8-bit B component in byte 0, an
-    8-bit G component in byte 1, an 8-bit R component in byte 2, and an
-    8-bit A component in byte 3.
-  * ename:VK_FORMAT_B8G8R8A8_SINT specifies a four-component, 32-bit signed
-    integer format that has an 8-bit B component in byte 0, an 8-bit G
-    component in byte 1, an 8-bit R component in byte 2, and an 8-bit A
-    component in byte 3.
-  * ename:VK_FORMAT_B8G8R8A8_SRGB specifies a four-component, 32-bit
-    unsigned normalized format that has an 8-bit B component stored with
-    sRGB nonlinear encoding in byte 0, an 8-bit G component stored with sRGB
-    nonlinear encoding in byte 1, an 8-bit R component stored with sRGB
-    nonlinear encoding in byte 2, and an 8-bit A component in byte 3.
-  * ename:VK_FORMAT_A8B8G8R8_UNORM_PACK32 specifies a four-component, 32-bit
-    packed unsigned normalized format that has an 8-bit A component in bits
-    24..31, an 8-bit B component in bits 16..23, an 8-bit G component in
-    bits 8..15, and an 8-bit R component in bits 0..7.
-  * ename:VK_FORMAT_A8B8G8R8_SNORM_PACK32 specifies a four-component, 32-bit
-    packed signed normalized format that has an 8-bit A component in bits
-    24..31, an 8-bit B component in bits 16..23, an 8-bit G component in
-    bits 8..15, and an 8-bit R component in bits 0..7.
-  * ename:VK_FORMAT_A8B8G8R8_USCALED_PACK32 specifies a four-component,
-    32-bit packed unsigned scaled integer format that has an 8-bit A
-    component in bits 24..31, an 8-bit B component in bits 16..23, an 8-bit
-    G component in bits 8..15, and an 8-bit R component in bits 0..7.
-  * ename:VK_FORMAT_A8B8G8R8_SSCALED_PACK32 specifies a four-component,
-    32-bit packed signed scaled integer format that has an 8-bit A component
-    in bits 24..31, an 8-bit B component in bits 16..23, an 8-bit G
-    component in bits 8..15, and an 8-bit R component in bits 0..7.
-  * ename:VK_FORMAT_A8B8G8R8_UINT_PACK32 specifies a four-component, 32-bit
-    packed unsigned integer format that has an 8-bit A component in bits
-    24..31, an 8-bit B component in bits 16..23, an 8-bit G component in
-    bits 8..15, and an 8-bit R component in bits 0..7.
-  * ename:VK_FORMAT_A8B8G8R8_SINT_PACK32 specifies a four-component, 32-bit
-    packed signed integer format that has an 8-bit A component in bits
-    24..31, an 8-bit B component in bits 16..23, an 8-bit G component in
-    bits 8..15, and an 8-bit R component in bits 0..7.
-  * ename:VK_FORMAT_A8B8G8R8_SRGB_PACK32 specifies a four-component, 32-bit
-    packed unsigned normalized format that has an 8-bit A component in bits
-    24..31, an 8-bit B component stored with sRGB nonlinear encoding in bits
-    16..23, an 8-bit G component stored with sRGB nonlinear encoding in bits
-    8..15, and an 8-bit R component stored with sRGB nonlinear encoding in
-    bits 0..7.
-  * ename:VK_FORMAT_A2R10G10B10_UNORM_PACK32 specifies a four-component,
-    32-bit packed unsigned normalized format that has a 2-bit A component in
-    bits 30..31, a 10-bit R component in bits 20..29, a 10-bit G component
-    in bits 10..19, and a 10-bit B component in bits 0..9.
-  * ename:VK_FORMAT_A2R10G10B10_SNORM_PACK32 specifies a four-component,
-    32-bit packed signed normalized format that has a 2-bit A component in
-    bits 30..31, a 10-bit R component in bits 20..29, a 10-bit G component
-    in bits 10..19, and a 10-bit B component in bits 0..9.
-  * ename:VK_FORMAT_A2R10G10B10_USCALED_PACK32 specifies a four-component,
-    32-bit packed unsigned scaled integer format that has a 2-bit A
-    component in bits 30..31, a 10-bit R component in bits 20..29, a 10-bit
-    G component in bits 10..19, and a 10-bit B component in bits 0..9.
-  * ename:VK_FORMAT_A2R10G10B10_SSCALED_PACK32 specifies a four-component,
-    32-bit packed signed scaled integer format that has a 2-bit A component
-    in bits 30..31, a 10-bit R component in bits 20..29, a 10-bit G
-    component in bits 10..19, and a 10-bit B component in bits 0..9.
-  * ename:VK_FORMAT_A2R10G10B10_UINT_PACK32 specifies a four-component,
-    32-bit packed unsigned integer format that has a 2-bit A component in
-    bits 30..31, a 10-bit R component in bits 20..29, a 10-bit G component
-    in bits 10..19, and a 10-bit B component in bits 0..9.
-  * ename:VK_FORMAT_A2R10G10B10_SINT_PACK32 specifies a four-component,
-    32-bit packed signed integer format that has a 2-bit A component in bits
-    30..31, a 10-bit R component in bits 20..29, a 10-bit G component in
-    bits 10..19, and a 10-bit B component in bits 0..9.
-  * ename:VK_FORMAT_A2B10G10R10_UNORM_PACK32 specifies a four-component,
-    32-bit packed unsigned normalized format that has a 2-bit A component in
-    bits 30..31, a 10-bit B component in bits 20..29, a 10-bit G component
-    in bits 10..19, and a 10-bit R component in bits 0..9.
-  * ename:VK_FORMAT_A2B10G10R10_SNORM_PACK32 specifies a four-component,
-    32-bit packed signed normalized format that has a 2-bit A component in
-    bits 30..31, a 10-bit B component in bits 20..29, a 10-bit G component
-    in bits 10..19, and a 10-bit R component in bits 0..9.
-  * ename:VK_FORMAT_A2B10G10R10_USCALED_PACK32 specifies a four-component,
-    32-bit packed unsigned scaled integer format that has a 2-bit A
-    component in bits 30..31, a 10-bit B component in bits 20..29, a 10-bit
-    G component in bits 10..19, and a 10-bit R component in bits 0..9.
-  * ename:VK_FORMAT_A2B10G10R10_SSCALED_PACK32 specifies a four-component,
-    32-bit packed signed scaled integer format that has a 2-bit A component
-    in bits 30..31, a 10-bit B component in bits 20..29, a 10-bit G
-    component in bits 10..19, and a 10-bit R component in bits 0..9.
-  * ename:VK_FORMAT_A2B10G10R10_UINT_PACK32 specifies a four-component,
-    32-bit packed unsigned integer format that has a 2-bit A component in
-    bits 30..31, a 10-bit B component in bits 20..29, a 10-bit G component
-    in bits 10..19, and a 10-bit R component in bits 0..9.
-  * ename:VK_FORMAT_A2B10G10R10_SINT_PACK32 specifies a four-component,
-    32-bit packed signed integer format that has a 2-bit A component in bits
-    30..31, a 10-bit B component in bits 20..29, a 10-bit G component in
-    bits 10..19, and a 10-bit R component in bits 0..9.
-  * ename:VK_FORMAT_R16_UNORM specifies a one-component, 16-bit unsigned
-    normalized format that has a single 16-bit R component.
-  * ename:VK_FORMAT_R16_SNORM specifies a one-component, 16-bit signed
-    normalized format that has a single 16-bit R component.
-  * ename:VK_FORMAT_R16_USCALED specifies a one-component, 16-bit unsigned
-    scaled integer format that has a single 16-bit R component.
-  * ename:VK_FORMAT_R16_SSCALED specifies a one-component, 16-bit signed
-    scaled integer format that has a single 16-bit R component.
-  * ename:VK_FORMAT_R16_UINT specifies a one-component, 16-bit unsigned
-    integer format that has a single 16-bit R component.
-  * ename:VK_FORMAT_R16_SINT specifies a one-component, 16-bit signed
-    integer format that has a single 16-bit R component.
-  * ename:VK_FORMAT_R16_SFLOAT specifies a one-component, 16-bit signed
-    floating-point format that has a single 16-bit R component.
-  * ename:VK_FORMAT_R16G16_UNORM specifies a two-component, 32-bit unsigned
-    normalized format that has a 16-bit R component in bytes 0..1, and a
-    16-bit G component in bytes 2..3.
-  * ename:VK_FORMAT_R16G16_SNORM specifies a two-component, 32-bit signed
-    normalized format that has a 16-bit R component in bytes 0..1, and a
-    16-bit G component in bytes 2..3.
-  * ename:VK_FORMAT_R16G16_USCALED specifies a two-component, 32-bit
-    unsigned scaled integer format that has a 16-bit R component in bytes
-    0..1, and a 16-bit G component in bytes 2..3.
-  * ename:VK_FORMAT_R16G16_SSCALED specifies a two-component, 32-bit signed
-    scaled integer format that has a 16-bit R component in bytes 0..1, and a
-    16-bit G component in bytes 2..3.
-  * ename:VK_FORMAT_R16G16_UINT specifies a two-component, 32-bit unsigned
-    integer format that has a 16-bit R component in bytes 0..1, and a 16-bit
-    G component in bytes 2..3.
-  * ename:VK_FORMAT_R16G16_SINT specifies a two-component, 32-bit signed
-    integer format that has a 16-bit R component in bytes 0..1, and a 16-bit
-    G component in bytes 2..3.
-  * ename:VK_FORMAT_R16G16_SFLOAT specifies a two-component, 32-bit signed
-    floating-point format that has a 16-bit R component in bytes 0..1, and a
-    16-bit G component in bytes 2..3.
-  * ename:VK_FORMAT_R16G16B16_UNORM specifies a three-component, 48-bit
-    unsigned normalized format that has a 16-bit R component in bytes 0..1,
-    a 16-bit G component in bytes 2..3, and a 16-bit B component in bytes
-    4..5.
-  * ename:VK_FORMAT_R16G16B16_SNORM specifies a three-component, 48-bit
-    signed normalized format that has a 16-bit R component in bytes 0..1, a
-    16-bit G component in bytes 2..3, and a 16-bit B component in bytes
-    4..5.
-  * ename:VK_FORMAT_R16G16B16_USCALED specifies a three-component, 48-bit
-    unsigned scaled integer format that has a 16-bit R component in bytes
-    0..1, a 16-bit G component in bytes 2..3, and a 16-bit B component in
-    bytes 4..5.
-  * ename:VK_FORMAT_R16G16B16_SSCALED specifies a three-component, 48-bit
-    signed scaled integer format that has a 16-bit R component in bytes
-    0..1, a 16-bit G component in bytes 2..3, and a 16-bit B component in
-    bytes 4..5.
-  * ename:VK_FORMAT_R16G16B16_UINT specifies a three-component, 48-bit
-    unsigned integer format that has a 16-bit R component in bytes 0..1, a
-    16-bit G component in bytes 2..3, and a 16-bit B component in bytes
-    4..5.
-  * ename:VK_FORMAT_R16G16B16_SINT specifies a three-component, 48-bit
-    signed integer format that has a 16-bit R component in bytes 0..1, a
-    16-bit G component in bytes 2..3, and a 16-bit B component in bytes
-    4..5.
-  * ename:VK_FORMAT_R16G16B16_SFLOAT specifies a three-component, 48-bit
-    signed floating-point format that has a 16-bit R component in bytes
-    0..1, a 16-bit G component in bytes 2..3, and a 16-bit B component in
-    bytes 4..5.
-  * ename:VK_FORMAT_R16G16B16A16_UNORM specifies a four-component, 64-bit
-    unsigned normalized format that has a 16-bit R component in bytes 0..1,
-    a 16-bit G component in bytes 2..3, a 16-bit B component in bytes 4..5,
-    and a 16-bit A component in bytes 6..7.
-  * ename:VK_FORMAT_R16G16B16A16_SNORM specifies a four-component, 64-bit
-    signed normalized format that has a 16-bit R component in bytes 0..1, a
-    16-bit G component in bytes 2..3, a 16-bit B component in bytes 4..5,
-    and a 16-bit A component in bytes 6..7.
-  * ename:VK_FORMAT_R16G16B16A16_USCALED specifies a four-component, 64-bit
-    unsigned scaled integer format that has a 16-bit R component in bytes
-    0..1, a 16-bit G component in bytes 2..3, a 16-bit B component in bytes
-    4..5, and a 16-bit A component in bytes 6..7.
-  * ename:VK_FORMAT_R16G16B16A16_SSCALED specifies a four-component, 64-bit
-    signed scaled integer format that has a 16-bit R component in bytes
-    0..1, a 16-bit G component in bytes 2..3, a 16-bit B component in bytes
-    4..5, and a 16-bit A component in bytes 6..7.
-  * ename:VK_FORMAT_R16G16B16A16_UINT specifies a four-component, 64-bit
-    unsigned integer format that has a 16-bit R component in bytes 0..1, a
-    16-bit G component in bytes 2..3, a 16-bit B component in bytes 4..5,
-    and a 16-bit A component in bytes 6..7.
-  * ename:VK_FORMAT_R16G16B16A16_SINT specifies a four-component, 64-bit
-    signed integer format that has a 16-bit R component in bytes 0..1, a
-    16-bit G component in bytes 2..3, a 16-bit B component in bytes 4..5,
-    and a 16-bit A component in bytes 6..7.
-  * ename:VK_FORMAT_R16G16B16A16_SFLOAT specifies a four-component, 64-bit
-    signed floating-point format that has a 16-bit R component in bytes
-    0..1, a 16-bit G component in bytes 2..3, a 16-bit B component in bytes
-    4..5, and a 16-bit A component in bytes 6..7.
-  * ename:VK_FORMAT_R32_UINT specifies a one-component, 32-bit unsigned
-    integer format that has a single 32-bit R component.
-  * ename:VK_FORMAT_R32_SINT specifies a one-component, 32-bit signed
-    integer format that has a single 32-bit R component.
-  * ename:VK_FORMAT_R32_SFLOAT specifies a one-component, 32-bit signed
-    floating-point format that has a single 32-bit R component.
-  * ename:VK_FORMAT_R32G32_UINT specifies a two-component, 64-bit unsigned
-    integer format that has a 32-bit R component in bytes 0..3, and a 32-bit
-    G component in bytes 4..7.
-  * ename:VK_FORMAT_R32G32_SINT specifies a two-component, 64-bit signed
-    integer format that has a 32-bit R component in bytes 0..3, and a 32-bit
-    G component in bytes 4..7.
-  * ename:VK_FORMAT_R32G32_SFLOAT specifies a two-component, 64-bit signed
-    floating-point format that has a 32-bit R component in bytes 0..3, and a
-    32-bit G component in bytes 4..7.
-  * ename:VK_FORMAT_R32G32B32_UINT specifies a three-component, 96-bit
-    unsigned integer format that has a 32-bit R component in bytes 0..3, a
-    32-bit G component in bytes 4..7, and a 32-bit B component in bytes
-    8..11.
-  * ename:VK_FORMAT_R32G32B32_SINT specifies a three-component, 96-bit
-    signed integer format that has a 32-bit R component in bytes 0..3, a
-    32-bit G component in bytes 4..7, and a 32-bit B component in bytes
-    8..11.
-  * ename:VK_FORMAT_R32G32B32_SFLOAT specifies a three-component, 96-bit
-    signed floating-point format that has a 32-bit R component in bytes
-    0..3, a 32-bit G component in bytes 4..7, and a 32-bit B component in
-    bytes 8..11.
-  * ename:VK_FORMAT_R32G32B32A32_UINT specifies a four-component, 128-bit
-    unsigned integer format that has a 32-bit R component in bytes 0..3, a
-    32-bit G component in bytes 4..7, a 32-bit B component in bytes 8..11,
-    and a 32-bit A component in bytes 12..15.
-  * ename:VK_FORMAT_R32G32B32A32_SINT specifies a four-component, 128-bit
-    signed integer format that has a 32-bit R component in bytes 0..3, a
-    32-bit G component in bytes 4..7, a 32-bit B component in bytes 8..11,
-    and a 32-bit A component in bytes 12..15.
-  * ename:VK_FORMAT_R32G32B32A32_SFLOAT specifies a four-component, 128-bit
-    signed floating-point format that has a 32-bit R component in bytes
-    0..3, a 32-bit G component in bytes 4..7, a 32-bit B component in bytes
-    8..11, and a 32-bit A component in bytes 12..15.
-  * ename:VK_FORMAT_R64_UINT specifies a one-component, 64-bit unsigned
-    integer format that has a single 64-bit R component.
-  * ename:VK_FORMAT_R64_SINT specifies a one-component, 64-bit signed
-    integer format that has a single 64-bit R component.
-  * ename:VK_FORMAT_R64_SFLOAT specifies a one-component, 64-bit signed
-    floating-point format that has a single 64-bit R component.
-  * ename:VK_FORMAT_R64G64_UINT specifies a two-component, 128-bit unsigned
-    integer format that has a 64-bit R component in bytes 0..7, and a 64-bit
-    G component in bytes 8..15.
-  * ename:VK_FORMAT_R64G64_SINT specifies a two-component, 128-bit signed
-    integer format that has a 64-bit R component in bytes 0..7, and a 64-bit
-    G component in bytes 8..15.
-  * ename:VK_FORMAT_R64G64_SFLOAT specifies a two-component, 128-bit signed
-    floating-point format that has a 64-bit R component in bytes 0..7, and a
-    64-bit G component in bytes 8..15.
-  * ename:VK_FORMAT_R64G64B64_UINT specifies a three-component, 192-bit
-    unsigned integer format that has a 64-bit R component in bytes 0..7, a
-    64-bit G component in bytes 8..15, and a 64-bit B component in bytes
-    16..23.
-  * ename:VK_FORMAT_R64G64B64_SINT specifies a three-component, 192-bit
-    signed integer format that has a 64-bit R component in bytes 0..7, a
-    64-bit G component in bytes 8..15, and a 64-bit B component in bytes
-    16..23.
-  * ename:VK_FORMAT_R64G64B64_SFLOAT specifies a three-component, 192-bit
-    signed floating-point format that has a 64-bit R component in bytes
-    0..7, a 64-bit G component in bytes 8..15, and a 64-bit B component in
-    bytes 16..23.
-  * ename:VK_FORMAT_R64G64B64A64_UINT specifies a four-component, 256-bit
-    unsigned integer format that has a 64-bit R component in bytes 0..7, a
-    64-bit G component in bytes 8..15, a 64-bit B component in bytes 16..23,
-    and a 64-bit A component in bytes 24..31.
-  * ename:VK_FORMAT_R64G64B64A64_SINT specifies a four-component, 256-bit
-    signed integer format that has a 64-bit R component in bytes 0..7, a
-    64-bit G component in bytes 8..15, a 64-bit B component in bytes 16..23,
-    and a 64-bit A component in bytes 24..31.
-  * ename:VK_FORMAT_R64G64B64A64_SFLOAT specifies a four-component, 256-bit
-    signed floating-point format that has a 64-bit R component in bytes
-    0..7, a 64-bit G component in bytes 8..15, a 64-bit B component in bytes
-    16..23, and a 64-bit A component in bytes 24..31.
-  * ename:VK_FORMAT_B10G11R11_UFLOAT_PACK32 specifies a three-component,
-    32-bit packed unsigned floating-point format that has a 10-bit B
-    component in bits 22..31, an 11-bit G component in bits 11..21, an
-    11-bit R component in bits 0..10.
-    See <<fundamentals-fp10>> and <<fundamentals-fp11>>.
-  * ename:VK_FORMAT_E5B9G9R9_UFLOAT_PACK32 specifies a three-component,
-    32-bit packed unsigned floating-point format that has a 5-bit shared
-    exponent in bits 27..31, a 9-bit B component mantissa in bits 18..26, a
-    9-bit G component mantissa in bits 9..17, and a 9-bit R component
-    mantissa in bits 0..8.
-  * ename:VK_FORMAT_D16_UNORM specifies a one-component, 16-bit unsigned
-    normalized format that has a single 16-bit depth component.
-  * ename:VK_FORMAT_X8_D24_UNORM_PACK32 specifies a two-component, 32-bit
-    format that has 24 unsigned normalized bits in the depth component and,
-    optionally:, 8 bits that are unused.
-  * ename:VK_FORMAT_D32_SFLOAT specifies a one-component, 32-bit signed
-    floating-point format that has 32 bits in the depth component.
-  * ename:VK_FORMAT_S8_UINT specifies a one-component, 8-bit unsigned
-    integer format that has 8 bits in the stencil component.
-  * ename:VK_FORMAT_D16_UNORM_S8_UINT specifies a two-component, 24-bit
-    format that has 16 unsigned normalized bits in the depth component and 8
-    unsigned integer bits in the stencil component.
-  * ename:VK_FORMAT_D24_UNORM_S8_UINT specifies a two-component, 32-bit
-    packed format that has 8 unsigned integer bits in the stencil component,
-    and 24 unsigned normalized bits in the depth component.
-  * ename:VK_FORMAT_D32_SFLOAT_S8_UINT specifies a two-component format that
-    has 32 signed float bits in the depth component and 8 unsigned integer
-    bits in the stencil component.
-    There are optionally: 24 bits that are unused.
-  * ename:VK_FORMAT_BC1_RGB_UNORM_BLOCK specifies a three-component,
-    block-compressed format where each 64-bit compressed texel block encodes
-    a 4{times}4 rectangle of unsigned normalized RGB texel data.
-    This format has no alpha and is considered opaque.
-  * ename:VK_FORMAT_BC1_RGB_SRGB_BLOCK specifies a three-component,
-    block-compressed format where each 64-bit compressed texel block encodes
-    a 4{times}4 rectangle of unsigned normalized RGB texel data with sRGB
-    nonlinear encoding.
-    This format has no alpha and is considered opaque.
-  * ename:VK_FORMAT_BC1_RGBA_UNORM_BLOCK specifies a four-component,
-    block-compressed format where each 64-bit compressed texel block encodes
-    a 4{times}4 rectangle of unsigned normalized RGB texel data, and
-    provides 1 bit of alpha.
-  * ename:VK_FORMAT_BC1_RGBA_SRGB_BLOCK specifies a four-component,
-    block-compressed format where each 64-bit compressed texel block encodes
-    a 4{times}4 rectangle of unsigned normalized RGB texel data with sRGB
-    nonlinear encoding, and provides 1 bit of alpha.
-  * ename:VK_FORMAT_BC2_UNORM_BLOCK specifies a four-component,
-    block-compressed format where each 128-bit compressed texel block
-    encodes a 4{times}4 rectangle of unsigned normalized RGBA texel data
-    with the first 64 bits encoding alpha values followed by 64 bits
-    encoding RGB values.
-  * ename:VK_FORMAT_BC2_SRGB_BLOCK specifies a four-component,
-    block-compressed format where each 128-bit compressed texel block
-    encodes a 4{times}4 rectangle of unsigned normalized RGBA texel data
-    with the first 64 bits encoding alpha values followed by 64 bits
-    encoding RGB values with sRGB nonlinear encoding.
-  * ename:VK_FORMAT_BC3_UNORM_BLOCK specifies a four-component,
-    block-compressed format where each 128-bit compressed texel block
-    encodes a 4{times}4 rectangle of unsigned normalized RGBA texel data
-    with the first 64 bits encoding alpha values followed by 64 bits
-    encoding RGB values.
-  * ename:VK_FORMAT_BC3_SRGB_BLOCK specifies a four-component,
-    block-compressed format where each 128-bit compressed texel block
-    encodes a 4{times}4 rectangle of unsigned normalized RGBA texel data
-    with the first 64 bits encoding alpha values followed by 64 bits
-    encoding RGB values with sRGB nonlinear encoding.
-  * ename:VK_FORMAT_BC4_UNORM_BLOCK specifies a one-component,
-    block-compressed format where each 64-bit compressed texel block encodes
-    a 4{times}4 rectangle of unsigned normalized red texel data.
-  * ename:VK_FORMAT_BC4_SNORM_BLOCK specifies a one-component,
-    block-compressed format where each 64-bit compressed texel block encodes
-    a 4{times}4 rectangle of signed normalized red texel data.
-  * ename:VK_FORMAT_BC5_UNORM_BLOCK specifies a two-component,
-    block-compressed format where each 128-bit compressed texel block
-    encodes a 4{times}4 rectangle of unsigned normalized RG texel data with
-    the first 64 bits encoding red values followed by 64 bits encoding green
-    values.
-  * ename:VK_FORMAT_BC5_SNORM_BLOCK specifies a two-component,
-    block-compressed format where each 128-bit compressed texel block
-    encodes a 4{times}4 rectangle of signed normalized RG texel data with
-    the first 64 bits encoding red values followed by 64 bits encoding green
-    values.
-  * ename:VK_FORMAT_BC6H_UFLOAT_BLOCK specifies a three-component,
-    block-compressed format where each 128-bit compressed texel block
-    encodes a 4{times}4 rectangle of unsigned floating-point RGB texel data.
-  * ename:VK_FORMAT_BC6H_SFLOAT_BLOCK specifies a three-component,
-    block-compressed format where each 128-bit compressed texel block
-    encodes a 4{times}4 rectangle of signed floating-point RGB texel data.
-  * ename:VK_FORMAT_BC7_UNORM_BLOCK specifies a four-component,
-    block-compressed format where each 128-bit compressed texel block
-    encodes a 4{times}4 rectangle of unsigned normalized RGBA texel data.
-  * ename:VK_FORMAT_BC7_SRGB_BLOCK specifies a four-component,
-    block-compressed format where each 128-bit compressed texel block
-    encodes a 4{times}4 rectangle of unsigned normalized RGBA texel data
-    with sRGB nonlinear encoding applied to the RGB components.
-  * ename:VK_FORMAT_ETC2_R8G8B8_UNORM_BLOCK specifies a three-component,
-    ETC2 compressed format where each 64-bit compressed texel block encodes
-    a 4{times}4 rectangle of unsigned normalized RGB texel data.
-    This format has no alpha and is considered opaque.
-  * ename:VK_FORMAT_ETC2_R8G8B8_SRGB_BLOCK specifies a three-component, ETC2
-    compressed format where each 64-bit compressed texel block encodes a
-    4{times}4 rectangle of unsigned normalized RGB texel data with sRGB
-    nonlinear encoding.
-    This format has no alpha and is considered opaque.
-  * ename:VK_FORMAT_ETC2_R8G8B8A1_UNORM_BLOCK specifies a four-component,
-    ETC2 compressed format where each 64-bit compressed texel block encodes
-    a 4{times}4 rectangle of unsigned normalized RGB texel data, and
-    provides 1 bit of alpha.
-  * ename:VK_FORMAT_ETC2_R8G8B8A1_SRGB_BLOCK specifies a four-component,
-    ETC2 compressed format where each 64-bit compressed texel block encodes
-    a 4{times}4 rectangle of unsigned normalized RGB texel data with sRGB
-    nonlinear encoding, and provides 1 bit of alpha.
-  * ename:VK_FORMAT_ETC2_R8G8B8A8_UNORM_BLOCK specifies a four-component,
-    ETC2 compressed format where each 128-bit compressed texel block encodes
-    a 4{times}4 rectangle of unsigned normalized RGBA texel data with the
-    first 64 bits encoding alpha values followed by 64 bits encoding RGB
-    values.
-  * ename:VK_FORMAT_ETC2_R8G8B8A8_SRGB_BLOCK specifies a four-component,
-    ETC2 compressed format where each 128-bit compressed texel block encodes
-    a 4{times}4 rectangle of unsigned normalized RGBA texel data with the
-    first 64 bits encoding alpha values followed by 64 bits encoding RGB
-    values with sRGB nonlinear encoding applied.
-  * ename:VK_FORMAT_EAC_R11_UNORM_BLOCK specifies a one-component, ETC2
-    compressed format where each 64-bit compressed texel block encodes a
-    4{times}4 rectangle of unsigned normalized red texel data.
-  * ename:VK_FORMAT_EAC_R11_SNORM_BLOCK specifies a one-component, ETC2
-    compressed format where each 64-bit compressed texel block encodes a
-    4{times}4 rectangle of signed normalized red texel data.
-  * ename:VK_FORMAT_EAC_R11G11_UNORM_BLOCK specifies a two-component, ETC2
-    compressed format where each 128-bit compressed texel block encodes a
-    4{times}4 rectangle of unsigned normalized RG texel data with the first
-    64 bits encoding red values followed by 64 bits encoding green values.
-  * ename:VK_FORMAT_EAC_R11G11_SNORM_BLOCK specifies a two-component, ETC2
-    compressed format where each 128-bit compressed texel block encodes a
-    4{times}4 rectangle of signed normalized RG texel data with the first 64
-    bits encoding red values followed by 64 bits encoding green values.
-  * ename:VK_FORMAT_ASTC_4x4_UNORM_BLOCK specifies a four-component, ASTC
-    compressed format where each 128-bit compressed texel block encodes a
-    4{times}4 rectangle of unsigned normalized RGBA texel data.
-  * ename:VK_FORMAT_ASTC_4x4_SRGB_BLOCK specifies a four-component, ASTC
-    compressed format where each 128-bit compressed texel block encodes a
-    4{times}4 rectangle of unsigned normalized RGBA texel data with sRGB
-    nonlinear encoding applied to the RGB components.
-ifdef::VK_EXT_texture_compression_astc_hdr[]
-  * ename:VK_FORMAT_ASTC_4x4_SFLOAT_BLOCK_EXT specifies a four-component,
-    ASTC compressed format where each 128-bit compressed texel block encodes
-    a 4{times}4 rectangle of signed floating-point RGBA texel data.
-endif::VK_EXT_texture_compression_astc_hdr[]
-  * ename:VK_FORMAT_ASTC_5x4_UNORM_BLOCK specifies a four-component, ASTC
-    compressed format where each 128-bit compressed texel block encodes a
-    5{times}4 rectangle of unsigned normalized RGBA texel data.
-  * ename:VK_FORMAT_ASTC_5x4_SRGB_BLOCK specifies a four-component, ASTC
-    compressed format where each 128-bit compressed texel block encodes a
-    5{times}4 rectangle of unsigned normalized RGBA texel data with sRGB
-    nonlinear encoding applied to the RGB components.
-ifdef::VK_EXT_texture_compression_astc_hdr[]
-  * ename:VK_FORMAT_ASTC_5x4_SFLOAT_BLOCK_EXT specifies a four-component,
-    ASTC compressed format where each 128-bit compressed texel block encodes
-    a 5{times}4 rectangle of signed floating-point RGBA texel data.
-endif::VK_EXT_texture_compression_astc_hdr[]
-  * ename:VK_FORMAT_ASTC_5x5_UNORM_BLOCK specifies a four-component, ASTC
-    compressed format where each 128-bit compressed texel block encodes a
-    5{times}5 rectangle of unsigned normalized RGBA texel data.
-  * ename:VK_FORMAT_ASTC_5x5_SRGB_BLOCK specifies a four-component, ASTC
-    compressed format where each 128-bit compressed texel block encodes a
-    5{times}5 rectangle of unsigned normalized RGBA texel data with sRGB
-    nonlinear encoding applied to the RGB components.
-ifdef::VK_EXT_texture_compression_astc_hdr[]
-  * ename:VK_FORMAT_ASTC_5x5_SFLOAT_BLOCK_EXT specifies a four-component,
-    ASTC compressed format where each 128-bit compressed texel block encodes
-    a 5{times}5 rectangle of signed floating-point RGBA texel data.
-endif::VK_EXT_texture_compression_astc_hdr[]
-  * ename:VK_FORMAT_ASTC_6x5_UNORM_BLOCK specifies a four-component, ASTC
-    compressed format where each 128-bit compressed texel block encodes a
-    6{times}5 rectangle of unsigned normalized RGBA texel data.
-  * ename:VK_FORMAT_ASTC_6x5_SRGB_BLOCK specifies a four-component, ASTC
-    compressed format where each 128-bit compressed texel block encodes a
-    6{times}5 rectangle of unsigned normalized RGBA texel data with sRGB
-    nonlinear encoding applied to the RGB components.
-ifdef::VK_EXT_texture_compression_astc_hdr[]
-  * ename:VK_FORMAT_ASTC_6x5_SFLOAT_BLOCK_EXT specifies a four-component,
-    ASTC compressed format where each 128-bit compressed texel block encodes
-    a 6{times}5 rectangle of signed floating-point RGBA texel data.
-endif::VK_EXT_texture_compression_astc_hdr[]
-  * ename:VK_FORMAT_ASTC_6x6_UNORM_BLOCK specifies a four-component, ASTC
-    compressed format where each 128-bit compressed texel block encodes a
-    6{times}6 rectangle of unsigned normalized RGBA texel data.
-  * ename:VK_FORMAT_ASTC_6x6_SRGB_BLOCK specifies a four-component, ASTC
-    compressed format where each 128-bit compressed texel block encodes a
-    6{times}6 rectangle of unsigned normalized RGBA texel data with sRGB
-    nonlinear encoding applied to the RGB components.
-ifdef::VK_EXT_texture_compression_astc_hdr[]
-  * ename:VK_FORMAT_ASTC_6x6_SFLOAT_BLOCK_EXT specifies a four-component,
-    ASTC compressed format where each 128-bit compressed texel block encodes
-    a 6{times}6 rectangle of signed floating-point RGBA texel data.
-endif::VK_EXT_texture_compression_astc_hdr[]
-  * ename:VK_FORMAT_ASTC_8x5_UNORM_BLOCK specifies a four-component, ASTC
-    compressed format where each 128-bit compressed texel block encodes an
-    8{times}5 rectangle of unsigned normalized RGBA texel data.
-  * ename:VK_FORMAT_ASTC_8x5_SRGB_BLOCK specifies a four-component, ASTC
-    compressed format where each 128-bit compressed texel block encodes an
-    8{times}5 rectangle of unsigned normalized RGBA texel data with sRGB
-    nonlinear encoding applied to the RGB components.
-ifdef::VK_EXT_texture_compression_astc_hdr[]
-  * ename:VK_FORMAT_ASTC_8x5_SFLOAT_BLOCK_EXT specifies a four-component,
-    ASTC compressed format where each 128-bit compressed texel block encodes
-    a 8{times}5 rectangle of signed floating-point RGBA texel data.
-endif::VK_EXT_texture_compression_astc_hdr[]
-  * ename:VK_FORMAT_ASTC_8x6_UNORM_BLOCK specifies a four-component, ASTC
-    compressed format where each 128-bit compressed texel block encodes an
-    8{times}6 rectangle of unsigned normalized RGBA texel data.
-  * ename:VK_FORMAT_ASTC_8x6_SRGB_BLOCK specifies a four-component, ASTC
-    compressed format where each 128-bit compressed texel block encodes an
-    8{times}6 rectangle of unsigned normalized RGBA texel data with sRGB
-    nonlinear encoding applied to the RGB components.
-ifdef::VK_EXT_texture_compression_astc_hdr[]
-  * ename:VK_FORMAT_ASTC_8x6_SFLOAT_BLOCK_EXT specifies a four-component,
-    ASTC compressed format where each 128-bit compressed texel block encodes
-    a 8{times}6 rectangle of signed floating-point RGBA texel data.
-endif::VK_EXT_texture_compression_astc_hdr[]
-  * ename:VK_FORMAT_ASTC_8x8_UNORM_BLOCK specifies a four-component, ASTC
-    compressed format where each 128-bit compressed texel block encodes an
-    8{times}8 rectangle of unsigned normalized RGBA texel data.
-  * ename:VK_FORMAT_ASTC_8x8_SRGB_BLOCK specifies a four-component, ASTC
-    compressed format where each 128-bit compressed texel block encodes an
-    8{times}8 rectangle of unsigned normalized RGBA texel data with sRGB
-    nonlinear encoding applied to the RGB components.
-ifdef::VK_EXT_texture_compression_astc_hdr[]
-  * ename:VK_FORMAT_ASTC_8x8_SFLOAT_BLOCK_EXT specifies a four-component,
-    ASTC compressed format where each 128-bit compressed texel block encodes
-    a 8{times}8 rectangle of signed floating-point RGBA texel data.
-endif::VK_EXT_texture_compression_astc_hdr[]
-  * ename:VK_FORMAT_ASTC_10x5_UNORM_BLOCK specifies a four-component, ASTC
-    compressed format where each 128-bit compressed texel block encodes a
-    10{times}5 rectangle of unsigned normalized RGBA texel data.
-  * ename:VK_FORMAT_ASTC_10x5_SRGB_BLOCK specifies a four-component, ASTC
-    compressed format where each 128-bit compressed texel block encodes a
-    10{times}5 rectangle of unsigned normalized RGBA texel data with sRGB
-    nonlinear encoding applied to the RGB components.
-ifdef::VK_EXT_texture_compression_astc_hdr[]
-  * ename:VK_FORMAT_ASTC_10x5_SFLOAT_BLOCK_EXT specifies a four-component,
-    ASTC compressed format where each 128-bit compressed texel block encodes
-    a 10{times}5 rectangle of signed floating-point RGBA texel data.
-endif::VK_EXT_texture_compression_astc_hdr[]
-  * ename:VK_FORMAT_ASTC_10x6_UNORM_BLOCK specifies a four-component, ASTC
-    compressed format where each 128-bit compressed texel block encodes a
-    10{times}6 rectangle of unsigned normalized RGBA texel data.
-  * ename:VK_FORMAT_ASTC_10x6_SRGB_BLOCK specifies a four-component, ASTC
-    compressed format where each 128-bit compressed texel block encodes a
-    10{times}6 rectangle of unsigned normalized RGBA texel data with sRGB
-    nonlinear encoding applied to the RGB components.
-ifdef::VK_EXT_texture_compression_astc_hdr[]
-  * ename:VK_FORMAT_ASTC_10x6_SFLOAT_BLOCK_EXT specifies a four-component,
-    ASTC compressed format where each 128-bit compressed texel block encodes
-    a 10{times}6 rectangle of signed floating-point RGBA texel data.
-endif::VK_EXT_texture_compression_astc_hdr[]
-  * ename:VK_FORMAT_ASTC_10x8_UNORM_BLOCK specifies a four-component, ASTC
-    compressed format where each 128-bit compressed texel block encodes a
-    10{times}8 rectangle of unsigned normalized RGBA texel data.
-  * ename:VK_FORMAT_ASTC_10x8_SRGB_BLOCK specifies a four-component, ASTC
-    compressed format where each 128-bit compressed texel block encodes a
-    10{times}8 rectangle of unsigned normalized RGBA texel data with sRGB
-    nonlinear encoding applied to the RGB components.
-ifdef::VK_EXT_texture_compression_astc_hdr[]
-  * ename:VK_FORMAT_ASTC_10x8_SFLOAT_BLOCK_EXT specifies a four-component,
-    ASTC compressed format where each 128-bit compressed texel block encodes
-    a 10{times}8 rectangle of signed floating-point RGBA texel data.
-endif::VK_EXT_texture_compression_astc_hdr[]
-  * ename:VK_FORMAT_ASTC_10x10_UNORM_BLOCK specifies a four-component, ASTC
-    compressed format where each 128-bit compressed texel block encodes a
-    10{times}10 rectangle of unsigned normalized RGBA texel data.
-  * ename:VK_FORMAT_ASTC_10x10_SRGB_BLOCK specifies a four-component, ASTC
-    compressed format where each 128-bit compressed texel block encodes a
-    10{times}10 rectangle of unsigned normalized RGBA texel data with sRGB
-    nonlinear encoding applied to the RGB components.
-ifdef::VK_EXT_texture_compression_astc_hdr[]
-  * ename:VK_FORMAT_ASTC_10x10_SFLOAT_BLOCK_EXT specifies a four-component,
-    ASTC compressed format where each 128-bit compressed texel block encodes
-    a 10{times}10 rectangle of signed floating-point RGBA texel data.
-endif::VK_EXT_texture_compression_astc_hdr[]
-  * ename:VK_FORMAT_ASTC_12x10_UNORM_BLOCK specifies a four-component, ASTC
-    compressed format where each 128-bit compressed texel block encodes a
-    12{times}10 rectangle of unsigned normalized RGBA texel data.
-  * ename:VK_FORMAT_ASTC_12x10_SRGB_BLOCK specifies a four-component, ASTC
-    compressed format where each 128-bit compressed texel block encodes a
-    12{times}10 rectangle of unsigned normalized RGBA texel data with sRGB
-    nonlinear encoding applied to the RGB components.
-ifdef::VK_EXT_texture_compression_astc_hdr[]
-  * ename:VK_FORMAT_ASTC_12x10_SFLOAT_BLOCK_EXT specifies a four-component,
-    ASTC compressed format where each 128-bit compressed texel block encodes
-    a 12{times}10 rectangle of signed floating-point RGBA texel data.
-endif::VK_EXT_texture_compression_astc_hdr[]
-  * ename:VK_FORMAT_ASTC_12x12_UNORM_BLOCK specifies a four-component, ASTC
-    compressed format where each 128-bit compressed texel block encodes a
-    12{times}12 rectangle of unsigned normalized RGBA texel data.
-  * ename:VK_FORMAT_ASTC_12x12_SRGB_BLOCK specifies a four-component, ASTC
-    compressed format where each 128-bit compressed texel block encodes a
-    12{times}12 rectangle of unsigned normalized RGBA texel data with sRGB
-    nonlinear encoding applied to the RGB components.
-ifdef::VK_EXT_texture_compression_astc_hdr[]
-  * ename:VK_FORMAT_ASTC_12x12_SFLOAT_BLOCK_EXT specifies a four-component,
-    ASTC compressed format where each 128-bit compressed texel block encodes
-    a 12{times}12 rectangle of signed floating-point RGBA texel data.
-endif::VK_EXT_texture_compression_astc_hdr[]
-ifdef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
-  * ename:VK_FORMAT_G8B8G8R8_422_UNORM specifies a four-component, 32-bit
-    format containing a pair of G components, an R component, and a B
-    component, collectively encoding a 2{times}1 rectangle of unsigned
-    normalized RGB texel data.
-    One G value is present at each _i_ coordinate, with the B and R values
-    shared across both G values and thus recorded at half the horizontal
-    resolution of the image.
-    This format has an 8-bit G component for the even _i_ coordinate in byte
-    0, an 8-bit B component in byte 1, an 8-bit G component for the odd _i_
-    coordinate in byte 2, and an 8-bit R component in byte 3.
-    This format only supports images with a width that is a multiple of two.
-    For the purposes of the constraints on copy extents, this format is
-    treated as a compressed format with a 2{times}1 compressed texel block.
-  * ename:VK_FORMAT_B8G8R8G8_422_UNORM specifies a four-component, 32-bit
-    format containing a pair of G components, an R component, and a B
-    component, collectively encoding a 2{times}1 rectangle of unsigned
-    normalized RGB texel data.
-    One G value is present at each _i_ coordinate, with the B and R values
-    shared across both G values and thus recorded at half the horizontal
-    resolution of the image.
-    This format has an 8-bit B component in byte 0, an 8-bit G component for
-    the even _i_ coordinate in byte 1, an 8-bit R component in byte 2, and
-    an 8-bit G component for the odd _i_ coordinate in byte 3.
-    This format only supports images with a width that is a multiple of two.
-    For the purposes of the constraints on copy extents, this format is
-    treated as a compressed format with a 2{times}1 compressed texel block.
-  * ename:VK_FORMAT_G8_B8_R8_3PLANE_420_UNORM specifies an unsigned
-    normalized _multi-planar format_ that has an 8-bit G component in plane
-    0, an 8-bit B component in plane 1, and an 8-bit R component in plane 2.
-    The horizontal and vertical dimensions of the R and B planes are halved
-    relative to the image dimensions, and each R and B component is shared
-    with the G components for which latexmath:[\left\lfloor i_G \times 0.5
-    \right\rfloor = i_B = i_R] and latexmath:[\left\lfloor j_G \times 0.5
-    \right\rfloor = j_B = j_R].
-    The location of each plane when this image is in linear layout can be
-    determined via flink:vkGetImageSubresourceLayout, using
-    ename:VK_IMAGE_ASPECT_PLANE_0_BIT for the G plane,
-    ename:VK_IMAGE_ASPECT_PLANE_1_BIT for the B plane, and
-    ename:VK_IMAGE_ASPECT_PLANE_2_BIT for the R plane.
-    This format only supports images with a width and height that is a
-    multiple of two.
-  * ename:VK_FORMAT_G8_B8R8_2PLANE_420_UNORM specifies an unsigned
-    normalized _multi-planar format_ that has an 8-bit G component in plane
-    0, and a two-component, 16-bit BR plane 1 consisting of an 8-bit B
-    component in byte 0 and an 8-bit R component in byte 1.
-    The horizontal and vertical dimensions of the BR plane are halved
-    relative to the image dimensions, and each R and B value is shared with
-    the G components for which latexmath:[\left\lfloor i_G \times 0.5
-    \right\rfloor = i_B = i_R] and latexmath:[\left\lfloor j_G \times 0.5
-    \right\rfloor = j_B = j_R].
-    The location of each plane when this image is in linear layout can be
-    determined via flink:vkGetImageSubresourceLayout, using
-    ename:VK_IMAGE_ASPECT_PLANE_0_BIT for the G plane, and
-    ename:VK_IMAGE_ASPECT_PLANE_1_BIT for the BR plane.
-    This format only supports images with a width and height that is a
-    multiple of two.
-  * ename:VK_FORMAT_G8_B8_R8_3PLANE_422_UNORM specifies an unsigned
-    normalized _multi-planar format_ that has an 8-bit G component in plane
-    0, an 8-bit B component in plane 1, and an 8-bit R component in plane 2.
-    The horizontal dimension of the R and B plane is halved relative to the
-    image dimensions, and each R and B value is shared with the G components
-    for which latexmath:[\left\lfloor i_G \times 0.5 \right\rfloor = i_B =
-    i_R].
-    The location of each plane when this image is in linear layout can be
-    determined via flink:vkGetImageSubresourceLayout, using
-    ename:VK_IMAGE_ASPECT_PLANE_0_BIT for the G plane,
-    ename:VK_IMAGE_ASPECT_PLANE_1_BIT for the B plane, and
-    ename:VK_IMAGE_ASPECT_PLANE_2_BIT for the R plane.
-    This format only supports images with a width that is a multiple of two.
-  * ename:VK_FORMAT_G8_B8R8_2PLANE_422_UNORM specifies an unsigned
-    normalized _multi-planar format_ that has an 8-bit G component in plane
-    0, and a two-component, 16-bit BR plane 1 consisting of an 8-bit B
-    component in byte 0 and an 8-bit R component in byte 1.
-    The horizontal dimension of the BR plane is halved relative to the image
-    dimensions, and each R and B value is shared with the G components for
-    which latexmath:[\left\lfloor i_G \times 0.5 \right\rfloor = i_B = i_R].
-    The location of each plane when this image is in linear layout can be
-    determined via flink:vkGetImageSubresourceLayout, using
-    ename:VK_IMAGE_ASPECT_PLANE_0_BIT for the G plane, and
-    ename:VK_IMAGE_ASPECT_PLANE_1_BIT for the BR plane.
-    This format only supports images with a width that is a multiple of two.
-  * ename:VK_FORMAT_G8_B8_R8_3PLANE_444_UNORM specifies an unsigned
-    normalized _multi-planar format_ that has an 8-bit G component in plane
-    0, an 8-bit B component in plane 1, and an 8-bit R component in plane 2.
-    Each plane has the same dimensions and each R, G and B component
-    contributes to a single texel.
-    The location of each plane when this image is in linear layout can be
-    determined via flink:vkGetImageSubresourceLayout, using
-    ename:VK_IMAGE_ASPECT_PLANE_0_BIT for the G plane,
-    ename:VK_IMAGE_ASPECT_PLANE_1_BIT for the B plane, and
-    ename:VK_IMAGE_ASPECT_PLANE_2_BIT for the R plane.
-  * ename:VK_FORMAT_R10X6_UNORM_PACK16 specifies a one-component, 16-bit
-    unsigned normalized format that has a single 10-bit R component in the
-    top 10 bits of a 16-bit word, with the bottom 6 bits unused.
-  * ename:VK_FORMAT_R10X6G10X6_UNORM_2PACK16 specifies a two-component,
-    32-bit unsigned normalized format that has a 10-bit R component in the
-    top 10 bits of the word in bytes 0..1, and a 10-bit G component in the
-    top 10 bits of the word in bytes 2..3, with the bottom 6 bits of each
-    word unused.
-  * ename:VK_FORMAT_R10X6G10X6B10X6A10X6_UNORM_4PACK16 specifies a
-    four-component, 64-bit unsigned normalized format that has a 10-bit R
-    component in the top 10 bits of the word in bytes 0..1, a 10-bit G
-    component in the top 10 bits of the word in bytes 2..3, a 10-bit B
-    component in the top 10 bits of the word in bytes 4..5, and a 10-bit A
-    component in the top 10 bits of the word in bytes 6..7, with the bottom
-    6 bits of each word unused.
-  * ename:VK_FORMAT_G10X6B10X6G10X6R10X6_422_UNORM_4PACK16 specifies a
-    four-component, 64-bit format containing a pair of G components, an R
-    component, and a B component, collectively encoding a 2{times}1
-    rectangle of unsigned normalized RGB texel data.
-    One G value is present at each _i_ coordinate, with the B and R values
-    shared across both G values and thus recorded at half the horizontal
-    resolution of the image.
-    This format has a 10-bit G component for the even _i_ coordinate in the
-    top 10 bits of the word in bytes 0..1, a 10-bit B component in the top
-    10 bits of the word in bytes 2..3, a 10-bit G component for the odd _i_
-    coordinate in the top 10 bits of the word in bytes 4..5, and a 10-bit R
-    component in the top 10 bits of the word in bytes 6..7, with the bottom
-    6 bits of each word unused.
-    This format only supports images with a width that is a multiple of two.
-    For the purposes of the constraints on copy extents, this format is
-    treated as a compressed format with a 2{times}1 compressed texel block.
-  * ename:VK_FORMAT_B10X6G10X6R10X6G10X6_422_UNORM_4PACK16 specifies a
-    four-component, 64-bit format containing a pair of G components, an R
-    component, and a B component, collectively encoding a 2{times}1
-    rectangle of unsigned normalized RGB texel data.
-    One G value is present at each _i_ coordinate, with the B and R values
-    shared across both G values and thus recorded at half the horizontal
-    resolution of the image.
-    This format has a 10-bit B component in the top 10 bits of the word in
-    bytes 0..1, a 10-bit G component for the even _i_ coordinate in the top
-    10 bits of the word in bytes 2..3, a 10-bit R component in the top 10
-    bits of the word in bytes 4..5, and a 10-bit G component for the odd _i_
-    coordinate in the top 10 bits of the word in bytes 6..7, with the bottom
-    6 bits of each word unused.
-    This format only supports images with a width that is a multiple of two.
-    For the purposes of the constraints on copy extents, this format is
-    treated as a compressed format with a 2{times}1 compressed texel block.
-  * ename:VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_420_UNORM_3PACK16 specifies an
-    unsigned normalized _multi-planar format_ that has a 10-bit G component
-    in the top 10 bits of each 16-bit word of plane 0, a 10-bit B component
-    in the top 10 bits of each 16-bit word of plane 1, and a 10-bit R
-    component in the top 10 bits of each 16-bit word of plane 2, with the
-    bottom 6 bits of each word unused.
-    The horizontal and vertical dimensions of the R and B planes are halved
-    relative to the image dimensions, and each R and B component is shared
-    with the G components for which latexmath:[\left\lfloor i_G \times 0.5
-    \right\rfloor = i_B = i_R] and latexmath:[\left\lfloor j_G \times 0.5
-    \right\rfloor = j_B = j_R].
-    The location of each plane when this image is in linear layout can be
-    determined via flink:vkGetImageSubresourceLayout, using
-    ename:VK_IMAGE_ASPECT_PLANE_0_BIT for the G plane,
-    ename:VK_IMAGE_ASPECT_PLANE_1_BIT for the B plane, and
-    ename:VK_IMAGE_ASPECT_PLANE_2_BIT for the R plane.
-    This format only supports images with a width and height that is a
-    multiple of two.
-  * ename:VK_FORMAT_G10X6_B10X6R10X6_2PLANE_420_UNORM_3PACK16 specifies an
-    unsigned normalized _multi-planar format_ that has a 10-bit G component
-    in the top 10 bits of each 16-bit word of plane 0, and a two-component,
-    32-bit BR plane 1 consisting of a 10-bit B component in the top 10 bits
-    of the word in bytes 0..1, and a 10-bit R component in the top 10 bits
-    of the word in bytes 2..3, with the bottom 6 bits of each word unused.
-    The horizontal and vertical dimensions of the BR plane are halved
-    relative to the image dimensions, and each R and B value is shared with
-    the G components for which latexmath:[\left\lfloor i_G \times 0.5
-    \right\rfloor = i_B = i_R] and latexmath:[\left\lfloor j_G \times 0.5
-    \right\rfloor = j_B = j_R].
-    The location of each plane when this image is in linear layout can be
-    determined via flink:vkGetImageSubresourceLayout, using
-    ename:VK_IMAGE_ASPECT_PLANE_0_BIT for the G plane, and
-    ename:VK_IMAGE_ASPECT_PLANE_1_BIT for the BR plane.
-    This format only supports images with a width and height that is a
-    multiple of two.
-  * ename:VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_422_UNORM_3PACK16 specifies an
-    unsigned normalized _multi-planar format_ that has a 10-bit G component
-    in the top 10 bits of each 16-bit word of plane 0, a 10-bit B component
-    in the top 10 bits of each 16-bit word of plane 1, and a 10-bit R
-    component in the top 10 bits of each 16-bit word of plane 2, with the
-    bottom 6 bits of each word unused.
-    The horizontal dimension of the R and B plane is halved relative to the
-    image dimensions, and each R and B value is shared with the G components
-    for which latexmath:[\left\lfloor i_G \times 0.5 \right\rfloor = i_B =
-    i_R].
-    The location of each plane when this image is in linear layout can be
-    determined via flink:vkGetImageSubresourceLayout, using
-    ename:VK_IMAGE_ASPECT_PLANE_0_BIT for the G plane,
-    ename:VK_IMAGE_ASPECT_PLANE_1_BIT for the B plane, and
-    ename:VK_IMAGE_ASPECT_PLANE_2_BIT for the R plane.
-    This format only supports images with a width that is a multiple of two.
-  * ename:VK_FORMAT_G10X6_B10X6R10X6_2PLANE_422_UNORM_3PACK16 specifies an
-    unsigned normalized _multi-planar format_ that has a 10-bit G component
-    in the top 10 bits of each 16-bit word of plane 0, and a two-component,
-    32-bit BR plane 1 consisting of a 10-bit B component in the top 10 bits
-    of the word in bytes 0..1, and a 10-bit R component in the top 10 bits
-    of the word in bytes 2..3, with the bottom 6 bits of each word unused.
-    The horizontal dimension of the BR plane is halved relative to the image
-    dimensions, and each R and B value is shared with the G components for
-    which latexmath:[\left\lfloor i_G \times 0.5 \right\rfloor = i_B = i_R].
-    The location of each plane when this image is in linear layout can be
-    determined via flink:vkGetImageSubresourceLayout, using
-    ename:VK_IMAGE_ASPECT_PLANE_0_BIT for the G plane, and
-    ename:VK_IMAGE_ASPECT_PLANE_1_BIT for the BR plane.
-    This format only supports images with a width that is a multiple of two.
-  * ename:VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_444_UNORM_3PACK16 specifies an
-    unsigned normalized _multi-planar format_ that has a 10-bit G component
-    in the top 10 bits of each 16-bit word of plane 0, a 10-bit B component
-    in the top 10 bits of each 16-bit word of plane 1, and a 10-bit R
-    component in the top 10 bits of each 16-bit word of plane 2, with the
-    bottom 6 bits of each word unused.
-    Each plane has the same dimensions and each R, G and B component
-    contributes to a single texel.
-    The location of each plane when this image is in linear layout can be
-    determined via flink:vkGetImageSubresourceLayout, using
-    ename:VK_IMAGE_ASPECT_PLANE_0_BIT for the G plane,
-    ename:VK_IMAGE_ASPECT_PLANE_1_BIT for the B plane, and
-    ename:VK_IMAGE_ASPECT_PLANE_2_BIT for the R plane.
-  * ename:VK_FORMAT_R12X4_UNORM_PACK16 specifies a one-component, 16-bit
-    unsigned normalized format that has a single 12-bit R component in the
-    top 12 bits of a 16-bit word, with the bottom 4 bits unused.
-  * ename:VK_FORMAT_R12X4G12X4_UNORM_2PACK16 specifies a two-component,
-    32-bit unsigned normalized format that has a 12-bit R component in the
-    top 12 bits of the word in bytes 0..1, and a 12-bit G component in the
-    top 12 bits of the word in bytes 2..3, with the bottom 4 bits of each
-    word unused.
-  * ename:VK_FORMAT_R12X4G12X4B12X4A12X4_UNORM_4PACK16 specifies a
-    four-component, 64-bit unsigned normalized format that has a 12-bit R
-    component in the top 12 bits of the word in bytes 0..1, a 12-bit G
-    component in the top 12 bits of the word in bytes 2..3, a 12-bit B
-    component in the top 12 bits of the word in bytes 4..5, and a 12-bit A
-    component in the top 12 bits of the word in bytes 6..7, with the bottom
-    4 bits of each word unused.
-  * ename:VK_FORMAT_G12X4B12X4G12X4R12X4_422_UNORM_4PACK16 specifies a
-    four-component, 64-bit format containing a pair of G components, an R
-    component, and a B component, collectively encoding a 2{times}1
-    rectangle of unsigned normalized RGB texel data.
-    One G value is present at each _i_ coordinate, with the B and R values
-    shared across both G values and thus recorded at half the horizontal
-    resolution of the image.
-    This format has a 12-bit G component for the even _i_ coordinate in the
-    top 12 bits of the word in bytes 0..1, a 12-bit B component in the top
-    12 bits of the word in bytes 2..3, a 12-bit G component for the odd _i_
-    coordinate in the top 12 bits of the word in bytes 4..5, and a 12-bit R
-    component in the top 12 bits of the word in bytes 6..7, with the bottom
-    4 bits of each word unused.
-    This format only supports images with a width that is a multiple of two.
-    For the purposes of the constraints on copy extents, this format is
-    treated as a compressed format with a 2{times}1 compressed texel block.
-  * ename:VK_FORMAT_B12X4G12X4R12X4G12X4_422_UNORM_4PACK16 specifies a
-    four-component, 64-bit format containing a pair of G components, an R
-    component, and a B component, collectively encoding a 2{times}1
-    rectangle of unsigned normalized RGB texel data.
-    One G value is present at each _i_ coordinate, with the B and R values
-    shared across both G values and thus recorded at half the horizontal
-    resolution of the image.
-    This format has a 12-bit B component in the top 12 bits of the word in
-    bytes 0..1, a 12-bit G component for the even _i_ coordinate in the top
-    12 bits of the word in bytes 2..3, a 12-bit R component in the top 12
-    bits of the word in bytes 4..5, and a 12-bit G component for the odd _i_
-    coordinate in the top 12 bits of the word in bytes 6..7, with the bottom
-    4 bits of each word unused.
-    This format only supports images with a width that is a multiple of two.
-    For the purposes of the constraints on copy extents, this format is
-    treated as a compressed format with a 2{times}1 compressed texel block.
-  * ename:VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_420_UNORM_3PACK16 specifies an
-    unsigned normalized _multi-planar format_ that has a 12-bit G component
-    in the top 12 bits of each 16-bit word of plane 0, a 12-bit B component
-    in the top 12 bits of each 16-bit word of plane 1, and a 12-bit R
-    component in the top 12 bits of each 16-bit word of plane 2, with the
-    bottom 4 bits of each word unused.
-    The horizontal and vertical dimensions of the R and B planes are halved
-    relative to the image dimensions, and each R and B component is shared
-    with the G components for which latexmath:[\left\lfloor i_G \times 0.5
-    \right\rfloor = i_B = i_R] and latexmath:[\left\lfloor j_G \times 0.5
-    \right\rfloor = j_B = j_R].
-    The location of each plane when this image is in linear layout can be
-    determined via flink:vkGetImageSubresourceLayout, using
-    ename:VK_IMAGE_ASPECT_PLANE_0_BIT for the G plane,
-    ename:VK_IMAGE_ASPECT_PLANE_1_BIT for the B plane, and
-    ename:VK_IMAGE_ASPECT_PLANE_2_BIT for the R plane.
-    This format only supports images with a width and height that is a
-    multiple of two.
-  * ename:VK_FORMAT_G12X4_B12X4R12X4_2PLANE_420_UNORM_3PACK16 specifies an
-    unsigned normalized _multi-planar format_ that has a 12-bit G component
-    in the top 12 bits of each 16-bit word of plane 0, and a two-component,
-    32-bit BR plane 1 consisting of a 12-bit B component in the top 12 bits
-    of the word in bytes 0..1, and a 12-bit R component in the top 12 bits
-    of the word in bytes 2..3, with the bottom 4 bits of each word unused.
-    The horizontal and vertical dimensions of the BR plane are halved
-    relative to the image dimensions, and each R and B value is shared with
-    the G components for which latexmath:[\left\lfloor i_G \times 0.5
-    \right\rfloor = i_B = i_R] and latexmath:[\left\lfloor j_G \times 0.5
-    \right\rfloor = j_B = j_R].
-    The location of each plane when this image is in linear layout can be
-    determined via flink:vkGetImageSubresourceLayout, using
-    ename:VK_IMAGE_ASPECT_PLANE_0_BIT for the G plane, and
-    ename:VK_IMAGE_ASPECT_PLANE_1_BIT for the BR plane.
-    This format only supports images with a width and height that is a
-    multiple of two.
-  * ename:VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_422_UNORM_3PACK16 specifies an
-    unsigned normalized _multi-planar format_ that has a 12-bit G component
-    in the top 12 bits of each 16-bit word of plane 0, a 12-bit B component
-    in the top 12 bits of each 16-bit word of plane 1, and a 12-bit R
-    component in the top 12 bits of each 16-bit word of plane 2, with the
-    bottom 4 bits of each word unused.
-    The horizontal dimension of the R and B plane is halved relative to the
-    image dimensions, and each R and B value is shared with the G components
-    for which latexmath:[\left\lfloor i_G \times 0.5 \right\rfloor = i_B =
-    i_R].
-    The location of each plane when this image is in linear layout can be
-    determined via flink:vkGetImageSubresourceLayout, using
-    ename:VK_IMAGE_ASPECT_PLANE_0_BIT for the G plane,
-    ename:VK_IMAGE_ASPECT_PLANE_1_BIT for the B plane, and
-    ename:VK_IMAGE_ASPECT_PLANE_2_BIT for the R plane.
-    This format only supports images with a width that is a multiple of two.
-  * ename:VK_FORMAT_G12X4_B12X4R12X4_2PLANE_422_UNORM_3PACK16 specifies an
-    unsigned normalized _multi-planar format_ that has a 12-bit G component
-    in the top 12 bits of each 16-bit word of plane 0, and a two-component,
-    32-bit BR plane 1 consisting of a 12-bit B component in the top 12 bits
-    of the word in bytes 0..1, and a 12-bit R component in the top 12 bits
-    of the word in bytes 2..3, with the bottom 4 bits of each word unused.
-    The horizontal dimension of the BR plane is halved relative to the image
-    dimensions, and each R and B value is shared with the G components for
-    which latexmath:[\left\lfloor i_G \times 0.5 \right\rfloor = i_B = i_R].
-    The location of each plane when this image is in linear layout can be
-    determined via flink:vkGetImageSubresourceLayout, using
-    ename:VK_IMAGE_ASPECT_PLANE_0_BIT for the G plane, and
-    ename:VK_IMAGE_ASPECT_PLANE_1_BIT for the BR plane.
-    This format only supports images with a width that is a multiple of two.
-  * ename:VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_444_UNORM_3PACK16 specifies an
-    unsigned normalized _multi-planar format_ that has a 12-bit G component
-    in the top 12 bits of each 16-bit word of plane 0, a 12-bit B component
-    in the top 12 bits of each 16-bit word of plane 1, and a 12-bit R
-    component in the top 12 bits of each 16-bit word of plane 2, with the
-    bottom 4 bits of each word unused.
-    Each plane has the same dimensions and each R, G and B component
-    contributes to a single texel.
-    The location of each plane when this image is in linear layout can be
-    determined via flink:vkGetImageSubresourceLayout, using
-    ename:VK_IMAGE_ASPECT_PLANE_0_BIT for the G plane,
-    ename:VK_IMAGE_ASPECT_PLANE_1_BIT for the B plane, and
-    ename:VK_IMAGE_ASPECT_PLANE_2_BIT for the R plane.
-  * ename:VK_FORMAT_G16B16G16R16_422_UNORM specifies a four-component,
-    64-bit format containing a pair of G components, an R component, and a B
-    component, collectively encoding a 2{times}1 rectangle of unsigned
-    normalized RGB texel data.
-    One G value is present at each _i_ coordinate, with the B and R values
-    shared across both G values and thus recorded at half the horizontal
-    resolution of the image.
-    This format has a 16-bit G component for the even _i_ coordinate in the
-    word in bytes 0..1, a 16-bit B component in the word in bytes 2..3, a
-    16-bit G component for the odd _i_ coordinate in the word in bytes 4..5,
-    and a 16-bit R component in the word in bytes 6..7.
-    This format only supports images with a width that is a multiple of two.
-    For the purposes of the constraints on copy extents, this format is
-    treated as a compressed format with a 2{times}1 compressed texel block.
-  * ename:VK_FORMAT_B16G16R16G16_422_UNORM specifies a four-component,
-    64-bit format containing a pair of G components, an R component, and a B
-    component, collectively encoding a 2{times}1 rectangle of unsigned
-    normalized RGB texel data.
-    One G value is present at each _i_ coordinate, with the B and R values
-    shared across both G values and thus recorded at half the horizontal
-    resolution of the image.
-    This format has a 16-bit B component in the word in bytes 0..1, a 16-bit
-    G component for the even _i_ coordinate in the word in bytes 2..3, a
-    16-bit R component in the word in bytes 4..5, and a 16-bit G component
-    for the odd _i_ coordinate in the word in bytes 6..7.
-    This format only supports images with a width that is a multiple of two.
-    For the purposes of the constraints on copy extents, this format is
-    treated as a compressed format with a 2{times}1 compressed texel block.
-  * ename:VK_FORMAT_G16_B16_R16_3PLANE_420_UNORM specifies an unsigned
-    normalized _multi-planar format_ that has a 16-bit G component in each
-    16-bit word of plane 0, a 16-bit B component in each 16-bit word of
-    plane 1, and a 16-bit R component in each 16-bit word of plane 2.
-    The horizontal and vertical dimensions of the R and B planes are halved
-    relative to the image dimensions, and each R and B component is shared
-    with the G components for which latexmath:[\left\lfloor i_G \times 0.5
-    \right\rfloor = i_B = i_R] and latexmath:[\left\lfloor j_G \times 0.5
-    \right\rfloor = j_B = j_R].
-    The location of each plane when this image is in linear layout can be
-    determined via flink:vkGetImageSubresourceLayout, using
-    ename:VK_IMAGE_ASPECT_PLANE_0_BIT for the G plane,
-    ename:VK_IMAGE_ASPECT_PLANE_1_BIT for the B plane, and
-    ename:VK_IMAGE_ASPECT_PLANE_2_BIT for the R plane.
-    This format only supports images with a width and height that is a
-    multiple of two.
-  * ename:VK_FORMAT_G16_B16R16_2PLANE_420_UNORM specifies an unsigned
-    normalized _multi-planar format_ that has a 16-bit G component in each
-    16-bit word of plane 0, and a two-component, 32-bit BR plane 1
-    consisting of a 16-bit B component in the word in bytes 0..1, and a
-    16-bit R component in the word in bytes 2..3.
-    The horizontal and vertical dimensions of the BR plane are halved
-    relative to the image dimensions, and each R and B value is shared with
-    the G components for which latexmath:[\left\lfloor i_G \times 0.5
-    \right\rfloor = i_B = i_R] and latexmath:[\left\lfloor j_G \times 0.5
-    \right\rfloor = j_B = j_R].
-    The location of each plane when this image is in linear layout can be
-    determined via flink:vkGetImageSubresourceLayout, using
-    ename:VK_IMAGE_ASPECT_PLANE_0_BIT for the G plane, and
-    ename:VK_IMAGE_ASPECT_PLANE_1_BIT for the BR plane.
-    This format only supports images with a width and height that is a
-    multiple of two.
-  * ename:VK_FORMAT_G16_B16_R16_3PLANE_422_UNORM specifies an unsigned
-    normalized _multi-planar format_ that has a 16-bit G component in each
-    16-bit word of plane 0, a 16-bit B component in each 16-bit word of
-    plane 1, and a 16-bit R component in each 16-bit word of plane 2.
-    The horizontal dimension of the R and B plane is halved relative to the
-    image dimensions, and each R and B value is shared with the G components
-    for which latexmath:[\left\lfloor i_G \times 0.5 \right\rfloor = i_B =
-    i_R].
-    The location of each plane when this image is in linear layout can be
-    determined via flink:vkGetImageSubresourceLayout, using
-    ename:VK_IMAGE_ASPECT_PLANE_0_BIT for the G plane,
-    ename:VK_IMAGE_ASPECT_PLANE_1_BIT for the B plane, and
-    ename:VK_IMAGE_ASPECT_PLANE_2_BIT for the R plane.
-    This format only supports images with a width that is a multiple of two.
-  * ename:VK_FORMAT_G16_B16R16_2PLANE_422_UNORM specifies an unsigned
-    normalized _multi-planar format_ that has a 16-bit G component in each
-    16-bit word of plane 0, and a two-component, 32-bit BR plane 1
-    consisting of a 16-bit B component in the word in bytes 0..1, and a
-    16-bit R component in the word in bytes 2..3.
-    The horizontal dimension of the BR plane is halved relative to the image
-    dimensions, and each R and B value is shared with the G components for
-    which latexmath:[\left\lfloor i_G \times 0.5 \right\rfloor = i_B = i_R].
-    The location of each plane when this image is in linear layout can be
-    determined via flink:vkGetImageSubresourceLayout, using
-    ename:VK_IMAGE_ASPECT_PLANE_0_BIT for the G plane, and
-    ename:VK_IMAGE_ASPECT_PLANE_1_BIT for the BR plane.
-    This format only supports images with a width that is a multiple of two.
-  * ename:VK_FORMAT_G16_B16_R16_3PLANE_444_UNORM specifies an unsigned
-    normalized _multi-planar format_ that has a 16-bit G component in each
-    16-bit word of plane 0, a 16-bit B component in each 16-bit word of
-    plane 1, and a 16-bit R component in each 16-bit word of plane 2.
-    Each plane has the same dimensions and each R, G and B component
-    contributes to a single texel.
-    The location of each plane when this image is in linear layout can be
-    determined via flink:vkGetImageSubresourceLayout, using
-    ename:VK_IMAGE_ASPECT_PLANE_0_BIT for the G plane,
-    ename:VK_IMAGE_ASPECT_PLANE_1_BIT for the B plane, and
-    ename:VK_IMAGE_ASPECT_PLANE_2_BIT for the R plane.
-endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
-ifdef::VK_EXT_ycbcr_2plane_444_formats[]
-  * ename:VK_FORMAT_G8_B8R8_2PLANE_444_UNORM_EXT specifies an unsigned
-    normalized _multi-planar format_ that has an 8-bit G component in plane
-    0, and a two-component, 16-bit BR plane 1 consisting of an 8-bit B
-    component in byte 0 and an 8-bit R component in byte 1.
-    Both planes have the same dimensions and each R, G and B component
-    contributes to a single texel.
-    The location of each plane when this image is in linear layout can be
-    determined via flink:vkGetImageSubresourceLayout, using
-    ename:VK_IMAGE_ASPECT_PLANE_0_BIT for the G plane, and
-    ename:VK_IMAGE_ASPECT_PLANE_1_BIT for the BR plane.
-  * ename:VK_FORMAT_G10X6_B10X6R10X6_2PLANE_444_UNORM_3PACK16_EXT specifies
-    an unsigned normalized _multi-planar format_ that has a 10-bit G
-    component in the top 10 bits of each 16-bit word of plane 0, and a
-    two-component, 32-bit BR plane 1 consisting of a 10-bit B component in
-    the top 10 bits of the word in bytes 0..1, and a 10-bit R component in
-    the top 10 bits of the word in bytes 2..3, the bottom 6 bits of each
-    word unused.
-    Both planes have the same dimensions and each R, G and B component
-    contributes to a single texel.
-    The location of each plane when this image is in linear layout can be
-    determined via flink:vkGetImageSubresourceLayout, using
-    ename:VK_IMAGE_ASPECT_PLANE_0_BIT for the G plane, and
-    ename:VK_IMAGE_ASPECT_PLANE_1_BIT for the BR plane.
-  * ename:VK_FORMAT_G12X4_B12X4R12X4_2PLANE_444_UNORM_3PACK16_EXT specifies
-    an unsigned normalized _multi-planar format_ that has a 12-bit G
-    component in the top 12 bits of each 16-bit word of plane 0, and a
-    two-component, 32-bit BR plane 1 consisting of a 12-bit B component in
-    the top 12 bits of the word in bytes 0..1, and a 12-bit R component in
-    the top 12 bits of the word in bytes 2..3, the bottom 4 bits of each
-    word unused.
-    Both planes have the same dimensions and each R, G and B component
-    contributes to a single texel.
-    The location of each plane when this image is in linear layout can be
-    determined via flink:vkGetImageSubresourceLayout, using
-    ename:VK_IMAGE_ASPECT_PLANE_0_BIT for the G plane, and
-    ename:VK_IMAGE_ASPECT_PLANE_1_BIT for the BR plane.
-  * ename:VK_FORMAT_G16_B16R16_2PLANE_444_UNORM_EXT specifies an unsigned
-    normalized _multi-planar format_ that has a 16-bit G component in each
-    16-bit word of plane 0, and a two-component, 32-bit BR plane 1
-    consisting of a 16-bit B component in the word in bytes 0..1, and a
-    16-bit R component in the word in bytes 2..3.
-    Both planes have the same dimensions and each R, G and B component
-    contributes to a single texel.
-    The location of each plane when this image is in linear layout can be
-    determined via flink:vkGetImageSubresourceLayout, using
-    ename:VK_IMAGE_ASPECT_PLANE_0_BIT for the G plane, and
-    ename:VK_IMAGE_ASPECT_PLANE_1_BIT for the BR plane.
-endif::VK_EXT_ycbcr_2plane_444_formats[]
-ifdef::VK_IMG_format_pvrtc[]
-  * ename:VK_FORMAT_PVRTC1_2BPP_UNORM_BLOCK_IMG specifies a four-component,
-    PVRTC compressed format where each 64-bit compressed texel block encodes
-    an 8{times}4 rectangle of unsigned normalized RGBA texel data.
-  * ename:VK_FORMAT_PVRTC1_4BPP_UNORM_BLOCK_IMG specifies a four-component,
-    PVRTC compressed format where each 64-bit compressed texel block encodes
-    a 4{times}4 rectangle of unsigned normalized RGBA texel data.
-  * ename:VK_FORMAT_PVRTC2_2BPP_UNORM_BLOCK_IMG specifies a four-component,
-    PVRTC compressed format where each 64-bit compressed texel block encodes
-    an 8{times}4 rectangle of unsigned normalized RGBA texel data.
-  * ename:VK_FORMAT_PVRTC2_4BPP_UNORM_BLOCK_IMG specifies a four-component,
-    PVRTC compressed format where each 64-bit compressed texel block encodes
-    a 4{times}4 rectangle of unsigned normalized RGBA texel data.
-  * ename:VK_FORMAT_PVRTC1_2BPP_SRGB_BLOCK_IMG specifies a four-component,
-    PVRTC compressed format where each 64-bit compressed texel block encodes
-    an 8{times}4 rectangle of unsigned normalized RGBA texel data with sRGB
-    nonlinear encoding applied to the RGB components.
-  * ename:VK_FORMAT_PVRTC1_4BPP_SRGB_BLOCK_IMG specifies a four-component,
-    PVRTC compressed format where each 64-bit compressed texel block encodes
-    a 4{times}4 rectangle of unsigned normalized RGBA texel data with sRGB
-    nonlinear encoding applied to the RGB components.
-  * ename:VK_FORMAT_PVRTC2_2BPP_SRGB_BLOCK_IMG specifies a four-component,
-    PVRTC compressed format where each 64-bit compressed texel block encodes
-    an 8{times}4 rectangle of unsigned normalized RGBA texel data with sRGB
-    nonlinear encoding applied to the RGB components.
-  * ename:VK_FORMAT_PVRTC2_4BPP_SRGB_BLOCK_IMG specifies a four-component,
-    PVRTC compressed format where each 64-bit compressed texel block encodes
-    a 4{times}4 rectangle of unsigned normalized RGBA texel data with sRGB
-    nonlinear encoding applied to the RGB components.
-endif::VK_IMG_format_pvrtc[]
-
---
-
-
-ifdef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
-
-[[formats-compatible-planes]]
-=== Compatible formats of planes of multi-planar formats
-
-Individual planes of multi-planar formats are _compatible_ with single-plane
-formats if they occupy the same number of bits per texel block.
-In the following table, individual planes of a _multi-planar_ format are
-compatible with the format listed against the relevant plane index for that
-multi-planar format, and any format compatible with the listed single-plane
-format according to <<formats-compatibility-classes, Format Compatibility
-Classes>>.
-
-.Plane Format Compatibility Table
-[width="95%",cols="1,6,3,3",options="header"]
-|====
-^| Plane ^| Compatible format for plane ^| Width relative to the width _w_ of the plane with the largest dimensions ^| Height relative to the height _h_ of the plane with the largest dimensions
-4+| *ename:VK_FORMAT_G8_B8_R8_3PLANE_420_UNORM*
-^| 0     ^| ename:VK_FORMAT_R8_UNORM ^| w ^| h
-^| 1     ^| ename:VK_FORMAT_R8_UNORM ^| w/2 ^| h/2
-^| 2     ^| ename:VK_FORMAT_R8_UNORM ^| w/2 ^| h/2
-4+| *ename:VK_FORMAT_G8_B8R8_2PLANE_420_UNORM*
-^| 0     ^| ename:VK_FORMAT_R8_UNORM ^| w ^| h
-^| 1     ^| ename:VK_FORMAT_R8G8_UNORM ^| w/2 ^| h/2
-4+| *ename:VK_FORMAT_G8_B8_R8_3PLANE_422_UNORM*
-^| 0     ^| ename:VK_FORMAT_R8_UNORM ^| w ^| h
-^| 1     ^| ename:VK_FORMAT_R8_UNORM ^| w/2 ^| h
-^| 2     ^| ename:VK_FORMAT_R8_UNORM ^| w/2 ^| h
-4+| *ename:VK_FORMAT_G8_B8R8_2PLANE_422_UNORM*
-^| 0     ^| ename:VK_FORMAT_R8_UNORM ^| w ^| h
-^| 1     ^| ename:VK_FORMAT_R8G8_UNORM ^| w/2 ^| h
-4+| *ename:VK_FORMAT_G8_B8_R8_3PLANE_444_UNORM*
-^| 0     ^| ename:VK_FORMAT_R8_UNORM ^| w ^| h
-^| 1     ^| ename:VK_FORMAT_R8_UNORM ^| w ^| h
-^| 2     ^| ename:VK_FORMAT_R8_UNORM ^| w ^| h
-4+| *ename:VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_420_UNORM_3PACK16*
-^| 0     ^| ename:VK_FORMAT_R10X6_UNORM_PACK16 ^| w ^| h
-^| 1     ^| ename:VK_FORMAT_R10X6_UNORM_PACK16 ^| w/2 ^| h/2
-^| 2     ^| ename:VK_FORMAT_R10X6_UNORM_PACK16 ^| w/2 ^| h/2
-4+| *ename:VK_FORMAT_G10X6_B10X6R10X6_2PLANE_420_UNORM_3PACK16*
-^| 0     ^| ename:VK_FORMAT_R10X6_UNORM_PACK16 ^| w ^| h
-^| 1     ^| ename:VK_FORMAT_R10X6G10X6_UNORM_2PACK16 ^| w/2 ^| h/2
-4+| *ename:VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_422_UNORM_3PACK16*
-^| 0     ^| ename:VK_FORMAT_R10X6_UNORM_PACK16 ^| w ^| h
-^| 1     ^| ename:VK_FORMAT_R10X6_UNORM_PACK16 ^| w/2 ^| h
-^| 2     ^| ename:VK_FORMAT_R10X6_UNORM_PACK16 ^| w/2 ^| h
-4+| *ename:VK_FORMAT_G10X6_B10X6R10X6_2PLANE_422_UNORM_3PACK16*
-^| 0     ^| ename:VK_FORMAT_R10X6_UNORM_PACK16 ^| w ^| h
-^| 1     ^| ename:VK_FORMAT_R10X6G10X6_UNORM_2PACK16 ^| w/2 ^| h
-4+| *ename:VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_444_UNORM_3PACK16*
-^| 0     ^| ename:VK_FORMAT_R10X6_UNORM_PACK16 ^| w ^| h
-^| 1     ^| ename:VK_FORMAT_R10X6_UNORM_PACK16 ^| w ^| h
-^| 2     ^| ename:VK_FORMAT_R10X6_UNORM_PACK16 ^| w ^| h
-4+| *ename:VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_420_UNORM_3PACK16*
-^| 0     ^| ename:VK_FORMAT_R12X4_UNORM_PACK16 ^| w ^| h
-^| 1     ^| ename:VK_FORMAT_R12X4_UNORM_PACK16 ^| w/2 ^| h/2
-^| 2     ^| ename:VK_FORMAT_R12X4_UNORM_PACK16 ^| w/2 ^| h/2
-4+| *ename:VK_FORMAT_G12X4_B12X4R12X4_2PLANE_420_UNORM_3PACK16*
-^| 0     ^| ename:VK_FORMAT_R12X4_UNORM_PACK16 ^| w ^| h
-^| 1     ^| ename:VK_FORMAT_R12X4G12X4_UNORM_2PACK16 ^| w/2 ^| h/2
-4+| *ename:VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_422_UNORM_3PACK16*
-^| 0     ^| ename:VK_FORMAT_R12X4_UNORM_PACK16 ^| w ^| h
-^| 1     ^| ename:VK_FORMAT_R12X4_UNORM_PACK16 ^| w/2 ^| h
-^| 2     ^| ename:VK_FORMAT_R12X4_UNORM_PACK16 ^| w/2 ^| h
-4+| *ename:VK_FORMAT_G12X4_B12X4R12X4_2PLANE_422_UNORM_3PACK16*
-^| 0     ^| ename:VK_FORMAT_R12X4_UNORM_PACK16 ^| w ^| h
-^| 1     ^| ename:VK_FORMAT_R12X4G12X4_UNORM_2PACK16 ^| w/2 ^| h
-4+| *ename:VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_444_UNORM_3PACK16*
-^| 0     ^| ename:VK_FORMAT_R12X4_UNORM_PACK16 ^| w ^| h
-^| 1     ^| ename:VK_FORMAT_R12X4_UNORM_PACK16 ^| w ^| h
-^| 2     ^| ename:VK_FORMAT_R12X4_UNORM_PACK16 ^| w ^| h
-4+| *ename:VK_FORMAT_G16_B16_R16_3PLANE_420_UNORM*
-^| 0     ^| ename:VK_FORMAT_R16_UNORM ^| w ^| h
-^| 1     ^| ename:VK_FORMAT_R16_UNORM ^| w/2 ^| h/2
-^| 2     ^| ename:VK_FORMAT_R16_UNORM ^| w/2 ^| h/2
-4+| *ename:VK_FORMAT_G16_B16R16_2PLANE_420_UNORM*
-^| 0     ^| ename:VK_FORMAT_R16_UNORM ^| w ^| h
-^| 1     ^| ename:VK_FORMAT_R16G16_UNORM ^| w/2 ^| h/2
-4+| *ename:VK_FORMAT_G16_B16_R16_3PLANE_422_UNORM*
-^| 0     ^| ename:VK_FORMAT_R16_UNORM ^| w ^| h
-^| 1     ^| ename:VK_FORMAT_R16_UNORM ^| w/2 ^| h
-^| 2     ^| ename:VK_FORMAT_R16_UNORM ^| w/2 ^| h
-4+| *ename:VK_FORMAT_G16_B16R16_2PLANE_422_UNORM*
-^| 0     ^| ename:VK_FORMAT_R16_UNORM ^| w ^| h
-^| 1     ^| ename:VK_FORMAT_R16G16_UNORM ^| w/2 ^| h
-4+| *ename:VK_FORMAT_G16_B16_R16_3PLANE_444_UNORM*
-^| 0     ^| ename:VK_FORMAT_R16_UNORM ^| w ^| h
-^| 1     ^| ename:VK_FORMAT_R16_UNORM ^| w ^| h
-^| 2     ^| ename:VK_FORMAT_R16_UNORM ^| w ^| h
-ifdef::VK_EXT_ycbcr_2plane_444_formats[]
-4+| *ename:VK_FORMAT_G8_B8R8_2PLANE_444_UNORM_EXT*
-^| 0     ^| ename:VK_FORMAT_R8_UNORM   ^| w ^| h
-^| 1     ^| ename:VK_FORMAT_R8G8_UNORM ^| w ^| h
-4+| *ename:VK_FORMAT_G10X6_B10X6R10X6_2PLANE_444_UNORM_3PACK16_EXT*
-^| 0     ^| ename:VK_FORMAT_R10X6_UNORM_PACK16       ^| w ^| h
-^| 1     ^| ename:VK_FORMAT_R10X6G10X6_UNORM_2PACK16 ^| w ^| h
-4+| *ename:VK_FORMAT_G12X4_B12X4R12X4_2PLANE_444_UNORM_3PACK16_EXT*
-^| 0     ^| ename:VK_FORMAT_R12X4_UNORM_PACK16       ^| w ^| h
-^| 1     ^| ename:VK_FORMAT_R12X4G12X4_UNORM_2PACK16 ^| w ^| h
-4+| *ename:VK_FORMAT_G16_B16R16_2PLANE_444_UNORM_EXT*
-^| 0     ^| ename:VK_FORMAT_R16_UNORM    ^| w ^| h
-^| 1     ^| ename:VK_FORMAT_R16G16_UNORM ^| w ^| h
-endif::VK_EXT_ycbcr_2plane_444_formats[]
-|====
-
-endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
-
-
-[[formats-packed]]
-=== Packed Formats
-
-For the purposes of address alignment when accessing buffer memory
-containing vertex attribute or texel data, the following formats are
-considered _packed_ - components of the texels or attributes are stored in
-bitfields packed into one or more 8-, 16-, or 32-bit fundamental data type.
-
-  * <<formats-packed-8-bit,Packed into 8-bit data types>>:
-  ** ename:VK_FORMAT_R4G4_UNORM_PACK8
-  * <<formats-packed-16-bit,Packed into 16-bit data types>>:
-  ** ename:VK_FORMAT_R4G4B4A4_UNORM_PACK16
-  ** ename:VK_FORMAT_B4G4R4A4_UNORM_PACK16
-ifdef::VK_EXT_4444_formats[]
-  ** ename:VK_FORMAT_A4R4G4B4_UNORM_PACK16_EXT
-  ** ename:VK_FORMAT_A4B4G4R4_UNORM_PACK16_EXT
-endif::VK_EXT_4444_formats[]
-  ** ename:VK_FORMAT_R5G6B5_UNORM_PACK16
-  ** ename:VK_FORMAT_B5G6R5_UNORM_PACK16
-  ** ename:VK_FORMAT_R5G5B5A1_UNORM_PACK16
-  ** ename:VK_FORMAT_B5G5R5A1_UNORM_PACK16
-  ** ename:VK_FORMAT_A1R5G5B5_UNORM_PACK16
-ifdef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
-  ** ename:VK_FORMAT_R10X6_UNORM_PACK16
-  ** ename:VK_FORMAT_R12X4_UNORM_PACK16
-  ** ename:VK_FORMAT_R10X6G10X6_UNORM_2PACK16
-  ** ename:VK_FORMAT_R12X4G12X4_UNORM_2PACK16
-  ** ename:VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_420_UNORM_3PACK16
-  ** ename:VK_FORMAT_G10X6_B10X6R10X6_2PLANE_420_UNORM_3PACK16
-  ** ename:VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_422_UNORM_3PACK16
-  ** ename:VK_FORMAT_G10X6_B10X6R10X6_2PLANE_422_UNORM_3PACK16
-  ** ename:VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_444_UNORM_3PACK16
-  ** ename:VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_420_UNORM_3PACK16
-  ** ename:VK_FORMAT_G12X4_B12X4R12X4_2PLANE_420_UNORM_3PACK16
-  ** ename:VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_422_UNORM_3PACK16
-  ** ename:VK_FORMAT_G12X4_B12X4R12X4_2PLANE_422_UNORM_3PACK16
-  ** ename:VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_444_UNORM_3PACK16
-  ** ename:VK_FORMAT_G10X6_B10X6R10X6_2PLANE_444_UNORM_3PACK16_EXT
-  ** ename:VK_FORMAT_G12X4_B12X4R12X4_2PLANE_444_UNORM_3PACK16_EXT
-  ** ename:VK_FORMAT_R10X6G10X6B10X6A10X6_UNORM_4PACK16
-  ** ename:VK_FORMAT_G10X6B10X6G10X6R10X6_422_UNORM_4PACK16
-  ** ename:VK_FORMAT_B10X6G10X6R10X6G10X6_422_UNORM_4PACK16
-  ** ename:VK_FORMAT_R12X4G12X4B12X4A12X4_UNORM_4PACK16
-  ** ename:VK_FORMAT_G12X4B12X4G12X4R12X4_422_UNORM_4PACK16
-  ** ename:VK_FORMAT_B12X4G12X4R12X4G12X4_422_UNORM_4PACK16
-endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
-  * <<formats-packed-32-bit,Packed into 32-bit data types>>:
-  ** ename:VK_FORMAT_A8B8G8R8_UNORM_PACK32
-  ** ename:VK_FORMAT_A8B8G8R8_SNORM_PACK32
-  ** ename:VK_FORMAT_A8B8G8R8_USCALED_PACK32
-  ** ename:VK_FORMAT_A8B8G8R8_SSCALED_PACK32
-  ** ename:VK_FORMAT_A8B8G8R8_UINT_PACK32
-  ** ename:VK_FORMAT_A8B8G8R8_SINT_PACK32
-  ** ename:VK_FORMAT_A8B8G8R8_SRGB_PACK32
-  ** ename:VK_FORMAT_A2R10G10B10_UNORM_PACK32
-  ** ename:VK_FORMAT_A2R10G10B10_SNORM_PACK32
-  ** ename:VK_FORMAT_A2R10G10B10_USCALED_PACK32
-  ** ename:VK_FORMAT_A2R10G10B10_SSCALED_PACK32
-  ** ename:VK_FORMAT_A2R10G10B10_UINT_PACK32
-  ** ename:VK_FORMAT_A2R10G10B10_SINT_PACK32
-  ** ename:VK_FORMAT_A2B10G10R10_UNORM_PACK32
-  ** ename:VK_FORMAT_A2B10G10R10_SNORM_PACK32
-  ** ename:VK_FORMAT_A2B10G10R10_USCALED_PACK32
-  ** ename:VK_FORMAT_A2B10G10R10_SSCALED_PACK32
-  ** ename:VK_FORMAT_A2B10G10R10_UINT_PACK32
-  ** ename:VK_FORMAT_A2B10G10R10_SINT_PACK32
-  ** ename:VK_FORMAT_B10G11R11_UFLOAT_PACK32
-  ** ename:VK_FORMAT_E5B9G9R9_UFLOAT_PACK32
-  ** ename:VK_FORMAT_X8_D24_UNORM_PACK32
-
-
-=== Identification of Formats
-
-A "`format`" is represented by a single enum value.
-The name of a format is usually built up by using the following pattern:
-
-....
-    VK_FORMAT_{component-format|compression-scheme}_{numeric-format}
-....
-
-The component-format indicates either the size of the R, G, B, and A
-components (if they are present) in the case of a color format, or the size
-of the depth (D) and stencil (S) components (if they are present) in the
-case of a depth/stencil format (see below).
-An X indicates a component that is unused, but may: be present for padding.
-
-<<<
-
-[[formats-numericformat]]
-.Interpretation of Numeric Format
-[width="95%",cols="2,3,10",options="header"]
-|====
-| Numeric format | SPIR-V _Sampled Type_ | Description
-| etext:UNORM    | OpTypeFloat           | The components are unsigned normalized values in the range [eq]#[0,1]#
-| etext:SNORM    | OpTypeFloat           | The components are signed normalized values in the range [eq]#[-1,1]#
-| etext:USCALED  | OpTypeFloat           | The components are unsigned integer values that get converted to floating-point in the range [0,2^n^-1]
-| etext:SSCALED  | OpTypeFloat           | The components are signed integer values that get converted to floating-point in the range [-2^n-1^,2^n-1^-1]
-| etext:UINT     | OpTypeInt             | The components are unsigned integer values in the range [0,2^n^-1]
-| etext:SINT     | OpTypeInt             | The components are signed integer values in the range [-2^n-1^,2^n-1^-1]
-| etext:UFLOAT   | OpTypeFloat           | The components are unsigned floating-point numbers (used by packed, shared exponent, and some compressed formats)
-| etext:SFLOAT   | OpTypeFloat           | The components are signed floating-point numbers
-| etext:SRGB     | OpTypeFloat           | The R, G, and B components are unsigned normalized values that represent values using sRGB nonlinear encoding, while the A component (if one exists) is a regular unsigned normalized value
-3+| [eq]#n# is the number of bits in the component.
-|====
-
-The suffix etext:_PACKnn indicates that the format is packed into an
-underlying type with etext:nn bits.
-ifdef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
-The suffix etext:_mPACKnn is a short-hand that indicates that the format has
-etext:m groups of components (which may or may not be stored in separate
-_planes_) that are each packed into an underlying type with etext:nn bits.
-endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
-
-The suffix etext:_BLOCK indicates that the format is a block-compressed
-format, with the representation of multiple pixels encoded interdependently
-within a region.
-
-[[formats-compressionscheme]]
-.Interpretation of Compression Scheme
-[width="95%",cols="2,10",options="header"]
-|====
-| Compression scheme | Description
-| etext:BC           | Block Compression. See <<appendix-compressedtex-bc>>.
-| etext:ETC2         | Ericsson Texture Compression. See <<appendix-compressedtex-etc2>>.
-| etext:EAC          | ETC2 Alpha Compression. See <<appendix-compressedtex-etc2>>.
-| etext:ASTC         | Adaptive Scalable Texture Compression (LDR Profile). See <<appendix-compressedtex-astc>>.
-|====
-
-ifdef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
-For _multi-planar_ images, the components in separate _planes_ are separated
-by underscores, and the number of planes is indicated by the addition of a
-etext:_2PLANE or etext:_3PLANE suffix.
-Similarly, the separate aspects of depth-stencil formats are separated by
-underscores, although these are not considered separate planes.
-Formats are suffixed by etext:_422 to indicate that planes other than the
-first are reduced in size by a factor of two horizontally or that the R and
-B values appear at half the horizontal frequency of the G values, etext:_420
-to indicate that planes other than the first are reduced in size by a factor
-of two both horizontally and vertically, and etext:_444 for consistency to
-indicate that all three planes of a three-planar image are the same size.
-
-[NOTE]
-.Note
-====
-No common format has a single plane containing both R and B components but
-does not store these components at reduced horizontal resolution.
-====
-endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
-
-
-[[texel-block-size]]
-=== Representation and Texel Block Size
-
-Color formats must: be represented in memory in exactly the form indicated
-by the format's name.
-This means that promoting one format to another with more bits per component
-and/or additional components must: not occur for color formats.
-Depth/stencil formats have more relaxed requirements as discussed
-<<formats-depth-stencil,below>>.
-
-Each format has a _texel block size_, the number of bytes used to store one
-_texel block_ (a single addressable element of an uncompressed image, or a
-single compressed block of a compressed image).
-The texel block size for each format is shown in the
-<<formats-compatibility, Compatible formats>> table.
-
-The representation of non-packed formats is that the first component
-specified in the name of the format is in the lowest memory addresses and
-the last component specified is in the highest memory addresses.
-See <<formats-non-packed,Byte mappings for non-packed/compressed color
-formats>>.
-The in-memory ordering of bytes within a component is determined by the host
-endianness.
-
-[[formats-non-packed]]
-.Byte mappings for non-packed/compressed color formats
-[options="header",cols="16*1,10",width="100%"]
-|====
->|0 >|1 >|2 >|3 >|4 >|5 >|6 >|7 >|8 >|9 >|10 >|11 >|12 >|13 >|14 >|15 ^| {leftarrow} Byte
-^|R 16+>s|etext:VK_FORMAT_R8_*
-^|R ^|G 15+>s|etext:VK_FORMAT_R8G8_*
-^|R ^|G ^|B 14+>s|etext:VK_FORMAT_R8G8B8_*
-^|B ^|G ^|R 14+>s|etext:VK_FORMAT_B8G8R8_*
-^|R ^|G ^|B ^|A 13+>s|etext:VK_FORMAT_R8G8B8A8_*
-^|B ^|G ^|R ^|A 13+>s|etext:VK_FORMAT_B8G8R8A8_*
-ifdef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
-^|G~0~ ^|B ^|G~1~ ^|R 13+>s|ename:VK_FORMAT_G8B8G8R8_422_UNORM
-^|B ^|G~0~ ^|R ^|G~1~ 13+>s|ename:VK_FORMAT_B8G8R8G8_422_UNORM
-endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
-2+^|R 15+>s|etext:VK_FORMAT_R16_*
-2+^|R 2+^|G 13+>s|etext:VK_FORMAT_R16G16_*
-2+^|R 2+^|G 2+^|B 11+>s|etext:VK_FORMAT_R16G16B16_*
-2+^|R 2+^|G 2+^|B 2+^|A 9+>s|etext:VK_FORMAT_R16G16B16A16_*
-ifdef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
-2+^|G~0~ 2+^|B 2+^|G~1~ 2+^|R 9+>s|etext:VK_FORMAT_G10X6B10X6G10X6R10X6_4PACK16_422_UNORM
-etext:VK_FORMAT_G12X4B12X4G12X4R12X4_4PACK16_422_UNORM
-etext:VK_FORMAT_G16B16G16R16_UNORM
-2+^|B 2+^|G~0~ 2+^|R 2+^|G~1~ 9+>s|etext:VK_FORMAT_B10X6G10X6R10X6G10X6_4PACK16_422_UNORM
-etext:VK_FORMAT_B12X4G12X4R12X4G12X4_4PACK16_422_UNORM
-ename:VK_FORMAT_B16G16R16G16_422_UNORM
-endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
-4+^|R 13+>s|etext:VK_FORMAT_R32_*
-4+^|R 4+^|G 9+>s|etext:VK_FORMAT_R32G32_*
-4+^|R 4+^|G 4+^|B 5+>s|etext:VK_FORMAT_R32G32B32_*
-4+^|R 4+^|G 4+^|B 4+^|A >s|etext:VK_FORMAT_R32G32B32A32_*
-8+^|R 9+>s|etext:VK_FORMAT_R64_*
-8+^|R 8+^|G >s|etext:VK_FORMAT_R64G64_*
-17+^s|etext:VK_FORMAT_R64G64B64_* as etext:VK_FORMAT_R64G64_* but with B in bytes 16-23
-17+^s|etext:VK_FORMAT_R64G64B64A64_* as etext:VK_FORMAT_R64G64B64_* but with A in bytes 24-31
-|====
-
-Packed formats store multiple components within one underlying type.
-The bit representation is that the first component specified in the name of
-the format is in the most-significant bits and the last component specified
-is in the least-significant bits of the underlying type.
-The in-memory ordering of bytes comprising the underlying type is determined
-by the host endianness.
-
-[[formats-packed-8-bit]]
-.Bit mappings for packed 8-bit formats
-[options="header",cols="8*1",width="100%"]
-|====
-8+^h| Bit
->|~7~ >|~6~ >|~5~ >|~4~ >|~3~ >|~2~ >|~1~ >|~0~
-8+^h| ename:VK_FORMAT_R4G4_UNORM_PACK8
-4+^s|R 4+^s|G
-^| ~3~ ^| ~2~ ^| ~1~ ^| ~0~
-^| ~3~ ^| ~2~ ^| ~1~ ^| ~0~
-|====
-
-[[formats-packed-16-bit]]
-.Bit mappings for packed 16-bit formats
-[options="header",cols="16*1",width="100%"]
-|====
-16+^h| Bit
->|~15~ >|~14~ >|~13~ >|~12~ >|~11~ >|~10~ >|~9~ >|~8~ >|~7~ >|~6~ >|~5~ >|~4~ >|~3~ >|~2~ >|~1~ >|~0~
-16+^h|ename:VK_FORMAT_R4G4B4A4_UNORM_PACK16
-4+^s|R 4+^s|G 4+^s|B 4+^s|A
-^| ~3~ ^| ~2~ ^| ~1~ ^| ~0~
-^| ~3~ ^| ~2~ ^| ~1~ ^| ~0~
-^| ~3~ ^| ~2~ ^| ~1~ ^| ~0~
-^| ~3~ ^| ~2~ ^| ~1~ ^| ~0~
-16+^h|ename:VK_FORMAT_B4G4R4A4_UNORM_PACK16
-4+^s|B 4+^s|G 4+^s|R 4+^s|A
-^| ~3~ ^| ~2~ ^| ~1~ ^| ~0~
-^| ~3~ ^| ~2~ ^| ~1~ ^| ~0~
-^| ~3~ ^| ~2~ ^| ~1~ ^| ~0~
-^| ~3~ ^| ~2~ ^| ~1~ ^| ~0~
-ifdef::VK_EXT_4444_formats[]
-16+^h|ename:VK_FORMAT_A4R4G4B4_UNORM_PACK16_EXT
-4+^s|A 4+^s|R 4+^s|G 4+^s|B
-^| ~3~ ^| ~2~ ^| ~1~ ^| ~0~
-^| ~3~ ^| ~2~ ^| ~1~ ^| ~0~
-^| ~3~ ^| ~2~ ^| ~1~ ^| ~0~
-^| ~3~ ^| ~2~ ^| ~1~ ^| ~0~
-16+^h|ename:VK_FORMAT_A4B4G4R4_UNORM_PACK16_EXT
-4+^s|A 4+^s|B 4+^s|G 4+^s|R
-^| ~3~ ^| ~2~ ^| ~1~ ^| ~0~
-^| ~3~ ^| ~2~ ^| ~1~ ^| ~0~
-^| ~3~ ^| ~2~ ^| ~1~ ^| ~0~
-^| ~3~ ^| ~2~ ^| ~1~ ^| ~0~
-endif::VK_EXT_4444_formats[]
-16+^h|ename:VK_FORMAT_R5G6B5_UNORM_PACK16
-5+^s|R 6+^s|G 5+^s|B
-^| ~4~ ^| ~3~ ^| ~2~ ^| ~1~ ^| ~0~
-^| ~5~ ^| ~4~ ^| ~3~ ^| ~2~ ^| ~1~ ^| ~0~
-^| ~4~ ^| ~3~ ^| ~2~ ^| ~1~ ^| ~0~
-16+^h|ename:VK_FORMAT_B5G6R5_UNORM_PACK16
-5+^s|B 6+^s|G 5+^s|R
-^| ~4~ ^| ~3~ ^| ~2~ ^| ~1~ ^| ~0~
-^| ~5~ ^| ~4~ ^| ~3~ ^| ~2~ ^| ~1~ ^| ~0~
-^| ~4~ ^| ~3~ ^| ~2~ ^| ~1~ ^| ~0~
-16+^h|ename:VK_FORMAT_R5G5B5A1_UNORM_PACK16
-5+^s|R 5+^s|G 5+^s|B 1+^s|A
-^| ~4~ ^| ~3~ ^| ~2~ ^| ~1~ ^| ~0~
-^| ~4~ ^| ~3~ ^| ~2~ ^| ~1~ ^| ~0~
-^| ~4~ ^| ~3~ ^| ~2~ ^| ~1~ ^| ~0~
-^| ~0~
-16+^h|ename:VK_FORMAT_B5G5R5A1_UNORM_PACK16
-5+^s|B 5+^s|G 5+^s|R 1+^s|A
-^| ~4~ ^| ~3~ ^| ~2~ ^| ~1~ ^| ~0~
-^| ~4~ ^| ~3~ ^| ~2~ ^| ~1~ ^| ~0~
-^| ~4~ ^| ~3~ ^| ~2~ ^| ~1~ ^| ~0~
-^| ~0~
-16+^h|ename:VK_FORMAT_A1R5G5B5_UNORM_PACK16
-1+^s|A 5+^s|R 5+^s|G 5+^s|B
-^| ~0~
-^| ~4~ ^| ~3~ ^| ~2~ ^| ~1~ ^| ~0~
-^| ~4~ ^| ~3~ ^| ~2~ ^| ~1~ ^| ~0~
-^| ~4~ ^| ~3~ ^| ~2~ ^| ~1~ ^| ~0~
-ifdef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
-16+^h|ename:VK_FORMAT_R10X6_UNORM_PACK16
-10+^s|R 6+^s|X
-^| ~9~ ^| ~8~ ^| ~7~ ^| ~6~ ^| ~5~
-^| ~4~ ^| ~3~ ^| ~2~ ^| ~1~ ^| ~0~
-^| ~5~ ^| ~4~ ^| ~3~ ^| ~2~ ^| ~1~ ^| ~0~
-16+^h|ename:VK_FORMAT_R12X4_UNORM_PACK16
-12+^s|R 4+^s|X
-^| ~11~ ^| ~10~
-^| ~9~ ^| ~8~ ^| ~7~ ^| ~6~ ^| ~5~
-^| ~4~ ^| ~3~ ^| ~2~ ^| ~1~ ^| ~0~
-^| ~3~ ^| ~2~ ^| ~1~ ^| ~0~
-endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
-|====
-
-[[formats-packed-32-bit]]
-.Bit mappings for packed 32-bit formats
-[cols="32*1",options="header"]
-|====
-32+^h|Bit
->|~31~ >|~30~ >|~29~ >|~28~ >|~27~ >|~26~ >|~25~ >|~24~ >|~23~ >|~22~ >|~21~ >|~20~ >|~19~ >|~18~ >|~17~ >|~16~
->|~15~ >|~14~ >|~13~ >|~12~ >|~11~ >|~10~ >|~9~ >|~8~ >|~7~ >|~6~ >|~5~ >|~4~ >|~3~ >|~2~ >|~1~ >|~0~
-32+^h|etext:VK_FORMAT_A8B8G8R8_*_PACK32
-8+^s|A 8+^s|B 8+^s|G 8+^s|R
-^|~7~ ^|~6~ ^|~5~ ^|~4~
-^|~3~ ^|~2~ ^|~1~ ^|~0~
-^|~7~ ^|~6~ ^|~5~ ^|~4~
-^|~3~ ^|~2~ ^|~1~ ^|~0~
-^|~7~ ^|~6~ ^|~5~ ^|~4~
-^|~3~ ^|~2~ ^|~1~ ^|~0~
-^|~7~ ^|~6~ ^|~5~ ^|~4~
-^|~3~ ^|~2~ ^|~1~ ^|~0~
-32+^h|etext:VK_FORMAT_A2R10G10B10_*_PACK32
-2+^s|A 10+^s|R 10+^s|G 10+^s|B
-^|~1~ ^|~0~
-^|~9~ ^|~8~ ^|~7~ ^|~6~ ^|~5~
-^|~4~ ^|~3~ ^|~2~ ^|~1~ ^|~0~
-^|~9~ ^|~8~ ^|~7~ ^|~6~ ^|~5~
-^|~4~ ^|~3~ ^|~2~ ^|~1~ ^|~0~
-^|~9~ ^|~8~ ^|~7~ ^|~6~ ^|~5~
-^|~4~ ^|~3~ ^|~2~ ^|~1~ ^|~0~
-32+^h|etext:VK_FORMAT_A2B10G10R10_*_PACK32
-2+^s|A 10+^s|B 10+^s|G 10+^s|R
-^|~1~ ^|~0~
-^|~9~ ^|~8~ ^|~7~ ^|~6~ ^|~5~
-^|~4~ ^|~3~ ^|~2~ ^|~1~ ^|~0~
-^|~9~ ^|~8~ ^|~7~ ^|~6~ ^|~5~
-^|~4~ ^|~3~ ^|~2~ ^|~1~ ^|~0~
-^|~9~ ^|~8~ ^|~7~ ^|~6~ ^|~5~
-^|~4~ ^|~3~ ^|~2~ ^|~1~ ^|~0~
-32+^h|ename:VK_FORMAT_B10G11R11_UFLOAT_PACK32
-10+^s|B 11+^s|G 11+^s|R
-^|~9~ ^|~8~ ^|~7~ ^|~6~ ^|~5~
-^|~4~ ^|~3~ ^|~2~ ^|~1~ ^|~0~
-^|~10~ ^|~9~ ^|~8~ ^|~7~ ^|~6~ ^|~5~
-^|~4~ ^|~3~ ^|~2~ ^|~1~ ^|~0~
-^|~10~ ^|~9~ ^|~8~ ^|~7~ ^|~6~ ^|~5~
-^|~4~ ^|~3~ ^|~2~ ^|~1~ ^|~0~
-32+^h|ename:VK_FORMAT_E5B9G9R9_UFLOAT_PACK32
-5+^s|E 9+^s|B 9+^s|G 9+^s|R
-^|~4~ ^|~3~ ^|~2~ ^|~1~ ^|~0~
-^|~8~ ^|~7~ ^|~6~ ^|~5~
-^|~4~ ^|~3~ ^|~2~ ^|~1~ ^|~0~
-^|~8~ ^|~7~ ^|~6~ ^|~5~
-^|~4~ ^|~3~ ^|~2~ ^|~1~ ^|~0~
-^|~8~ ^|~7~ ^|~6~ ^|~5~
-^|~4~ ^|~3~ ^|~2~ ^|~1~ ^|~0~
-32+^h|ename:VK_FORMAT_X8_D24_UNORM_PACK32
-8+^s|X 24+^s|D
-^|~7~ ^|~6~ ^|~5~ ^|~4~
-^|~3~ ^|~2~ ^|~1~ ^|~0~
-^|~23~ ^|~22~ ^|~21~ ^|~20~
-^|~19~ ^|~18~ ^|~17~ ^|~16~
-^|~15~ ^|~14~ ^|~13~ ^|~12~
-^|~11~ ^|~10~ ^|~9~ ^|~8~
-^|~7~ ^|~6~ ^|~5~ ^|~4~
-^|~3~ ^|~2~ ^|~1~ ^|~0~
-|====
-
-
-[[formats-depth-stencil]]
-=== Depth/Stencil Formats
-
-Depth/stencil formats are considered opaque and need not be stored in the
-exact number of bits per texel or component ordering indicated by the format
-enum.
-However, implementations must: not substitute a different depth or stencil
-precision than that described in the format (e.g. D16 must: not be
-implemented as D24 or D32).
-
-
-[[formats-compatibility-classes]]
-=== Format Compatibility Classes
-
-Uncompressed color formats are _compatible_ with each other if they occupy
-the same number of bits per texel block.
-Compressed color formats are compatible with each other if the only
-difference between them is the numerical type of the uncompressed pixels
-(e.g. signed vs. unsigned, or SRGB vs. UNORM encoding).
-Each depth/stencil format is only compatible with itself.
-In the <<formats-compatibility,following>> table, all the formats in the
-same row are compatible.
-
-
-[[formats-compatibility]]
-.Compatible Formats
-[width="90%",cols="4,10",options="header"]
-|====
-| Class, Texel Block Size, # Texels/Block | Formats
-| 8-bit +
-  Block size 1 byte +
-  1 texel/block
-                  | ename:VK_FORMAT_R4G4_UNORM_PACK8, +
-                    ename:VK_FORMAT_R8_UNORM, +
-                    ename:VK_FORMAT_R8_SNORM, +
-                    ename:VK_FORMAT_R8_USCALED, +
-                    ename:VK_FORMAT_R8_SSCALED, +
-                    ename:VK_FORMAT_R8_UINT, +
-                    ename:VK_FORMAT_R8_SINT, +
-                    ename:VK_FORMAT_R8_SRGB
-| 16-bit +
-  Block size 2 bytes +
-  1 texel/block
-                  | ename:VK_FORMAT_R4G4B4A4_UNORM_PACK16, +
-                    ename:VK_FORMAT_B4G4R4A4_UNORM_PACK16, +
-ifdef::VK_EXT_4444_formats[]
-                    ename:VK_FORMAT_A4R4G4B4_UNORM_PACK16_EXT, +
-                    ename:VK_FORMAT_A4B4G4R4_UNORM_PACK16_EXT, +
-endif::VK_EXT_4444_formats[]
-                    ename:VK_FORMAT_R5G6B5_UNORM_PACK16, +
-                    ename:VK_FORMAT_B5G6R5_UNORM_PACK16, +
-                    ename:VK_FORMAT_R5G5B5A1_UNORM_PACK16, +
-                    ename:VK_FORMAT_B5G5R5A1_UNORM_PACK16, +
-                    ename:VK_FORMAT_A1R5G5B5_UNORM_PACK16, +
-                    ename:VK_FORMAT_R8G8_UNORM, +
-                    ename:VK_FORMAT_R8G8_SNORM, +
-                    ename:VK_FORMAT_R8G8_USCALED, +
-                    ename:VK_FORMAT_R8G8_SSCALED, +
-                    ename:VK_FORMAT_R8G8_UINT, +
-                    ename:VK_FORMAT_R8G8_SINT, +
-                    ename:VK_FORMAT_R8G8_SRGB, +
-                    ename:VK_FORMAT_R16_UNORM, +
-                    ename:VK_FORMAT_R16_SNORM, +
-                    ename:VK_FORMAT_R16_USCALED, +
-                    ename:VK_FORMAT_R16_SSCALED, +
-                    ename:VK_FORMAT_R16_UINT, +
-                    ename:VK_FORMAT_R16_SINT, +
-ifndef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
-                    ename:VK_FORMAT_R16_SFLOAT
-endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
-ifdef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
-                    ename:VK_FORMAT_R16_SFLOAT, +
-                    ename:VK_FORMAT_R10X6_UNORM_PACK16, +
-                    ename:VK_FORMAT_R12X4_UNORM_PACK16
-endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
-| 24-bit +
-  Block size 3 bytes +
-  1 texel/block
-                  | ename:VK_FORMAT_R8G8B8_UNORM, +
-                    ename:VK_FORMAT_R8G8B8_SNORM, +
-                    ename:VK_FORMAT_R8G8B8_USCALED, +
-                    ename:VK_FORMAT_R8G8B8_SSCALED, +
-                    ename:VK_FORMAT_R8G8B8_UINT, +
-                    ename:VK_FORMAT_R8G8B8_SINT, +
-                    ename:VK_FORMAT_R8G8B8_SRGB, +
-                    ename:VK_FORMAT_B8G8R8_UNORM, +
-                    ename:VK_FORMAT_B8G8R8_SNORM, +
-                    ename:VK_FORMAT_B8G8R8_USCALED, +
-                    ename:VK_FORMAT_B8G8R8_SSCALED, +
-                    ename:VK_FORMAT_B8G8R8_UINT, +
-                    ename:VK_FORMAT_B8G8R8_SINT, +
-                    ename:VK_FORMAT_B8G8R8_SRGB
-| 32-bit +
-  Block size 4 bytes +
-  1 texel/block
-                  | ename:VK_FORMAT_R8G8B8A8_UNORM, +
-                    ename:VK_FORMAT_R8G8B8A8_SNORM, +
-                    ename:VK_FORMAT_R8G8B8A8_USCALED, +
-                    ename:VK_FORMAT_R8G8B8A8_SSCALED, +
-                    ename:VK_FORMAT_R8G8B8A8_UINT, +
-                    ename:VK_FORMAT_R8G8B8A8_SINT, +
-                    ename:VK_FORMAT_R8G8B8A8_SRGB, +
-                    ename:VK_FORMAT_B8G8R8A8_UNORM, +
-                    ename:VK_FORMAT_B8G8R8A8_SNORM, +
-                    ename:VK_FORMAT_B8G8R8A8_USCALED, +
-                    ename:VK_FORMAT_B8G8R8A8_SSCALED, +
-                    ename:VK_FORMAT_B8G8R8A8_UINT, +
-                    ename:VK_FORMAT_B8G8R8A8_SINT, +
-                    ename:VK_FORMAT_B8G8R8A8_SRGB, +
-                    ename:VK_FORMAT_A8B8G8R8_UNORM_PACK32, +
-                    ename:VK_FORMAT_A8B8G8R8_SNORM_PACK32, +
-                    ename:VK_FORMAT_A8B8G8R8_USCALED_PACK32, +
-                    ename:VK_FORMAT_A8B8G8R8_SSCALED_PACK32, +
-                    ename:VK_FORMAT_A8B8G8R8_UINT_PACK32, +
-                    ename:VK_FORMAT_A8B8G8R8_SINT_PACK32, +
-                    ename:VK_FORMAT_A8B8G8R8_SRGB_PACK32, +
-                    ename:VK_FORMAT_A2R10G10B10_UNORM_PACK32, +
-                    ename:VK_FORMAT_A2R10G10B10_SNORM_PACK32, +
-                    ename:VK_FORMAT_A2R10G10B10_USCALED_PACK32, +
-                    ename:VK_FORMAT_A2R10G10B10_SSCALED_PACK32, +
-                    ename:VK_FORMAT_A2R10G10B10_UINT_PACK32, +
-                    ename:VK_FORMAT_A2R10G10B10_SINT_PACK32, +
-                    ename:VK_FORMAT_A2B10G10R10_UNORM_PACK32, +
-                    ename:VK_FORMAT_A2B10G10R10_SNORM_PACK32, +
-                    ename:VK_FORMAT_A2B10G10R10_USCALED_PACK32, +
-                    ename:VK_FORMAT_A2B10G10R10_SSCALED_PACK32, +
-                    ename:VK_FORMAT_A2B10G10R10_UINT_PACK32, +
-                    ename:VK_FORMAT_A2B10G10R10_SINT_PACK32, +
-                    ename:VK_FORMAT_R16G16_UNORM, +
-                    ename:VK_FORMAT_R16G16_SNORM, +
-                    ename:VK_FORMAT_R16G16_USCALED, +
-                    ename:VK_FORMAT_R16G16_SSCALED, +
-                    ename:VK_FORMAT_R16G16_UINT, +
-                    ename:VK_FORMAT_R16G16_SINT, +
-                    ename:VK_FORMAT_R16G16_SFLOAT, +
-                    ename:VK_FORMAT_R32_UINT, +
-                    ename:VK_FORMAT_R32_SINT, +
-                    ename:VK_FORMAT_R32_SFLOAT, +
-                    ename:VK_FORMAT_B10G11R11_UFLOAT_PACK32, +
-ifndef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
-                    ename:VK_FORMAT_E5B9G9R9_UFLOAT_PACK32
-endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
-ifdef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
-                    ename:VK_FORMAT_E5B9G9R9_UFLOAT_PACK32, +
-                    ename:VK_FORMAT_R10X6G10X6_UNORM_2PACK16, +
-                    ename:VK_FORMAT_R12X4G12X4_UNORM_2PACK16
-| 32-bit G8B8G8R8 +
-  Block size 4 bytes +
-  1 texel/block
-                  | ename:VK_FORMAT_G8B8G8R8_422_UNORM
-| 32-bit B8G8R8G8 +
-  Block size 4 bytes +
-  1 texel/block
-                  | ename:VK_FORMAT_B8G8R8G8_422_UNORM
-endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
-| 48-bit +
-  Block size 6 bytes +
-  1 texel/block
-                  | ename:VK_FORMAT_R16G16B16_UNORM, +
-                    ename:VK_FORMAT_R16G16B16_SNORM, +
-                    ename:VK_FORMAT_R16G16B16_USCALED, +
-                    ename:VK_FORMAT_R16G16B16_SSCALED, +
-                    ename:VK_FORMAT_R16G16B16_UINT, +
-                    ename:VK_FORMAT_R16G16B16_SINT, +
-                    ename:VK_FORMAT_R16G16B16_SFLOAT
-| 64-bit +
-  Block size 8 bytes +
-  1 texel/block
-                  | ename:VK_FORMAT_R16G16B16A16_UNORM, +
-                    ename:VK_FORMAT_R16G16B16A16_SNORM, +
-                    ename:VK_FORMAT_R16G16B16A16_USCALED, +
-                    ename:VK_FORMAT_R16G16B16A16_SSCALED, +
-                    ename:VK_FORMAT_R16G16B16A16_UINT, +
-                    ename:VK_FORMAT_R16G16B16A16_SINT, +
-                    ename:VK_FORMAT_R16G16B16A16_SFLOAT, +
-                    ename:VK_FORMAT_R32G32_UINT, +
-                    ename:VK_FORMAT_R32G32_SINT, +
-                    ename:VK_FORMAT_R32G32_SFLOAT, +
-                    ename:VK_FORMAT_R64_UINT, +
-                    ename:VK_FORMAT_R64_SINT, +
-                    ename:VK_FORMAT_R64_SFLOAT
-ifdef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
-| 64-bit R10G10B10A10 +
-  Block size 8 bytes +
-  1 texel/block
-                  | ename:VK_FORMAT_R10X6G10X6B10X6A10X6_UNORM_4PACK16
-| 64-bit G10B10G10R10 +
-  Block size 8 bytes +
-  1 texel/block
-                  | ename:VK_FORMAT_G10X6B10X6G10X6R10X6_422_UNORM_4PACK16
-| 64-bit B10G10R10G10 +
-  Block size 8 bytes +
-  1 texel/block
-                  | ename:VK_FORMAT_B10X6G10X6R10X6G10X6_422_UNORM_4PACK16
-| 64-bit R12G12B12A12 +
-  Block size 8 bytes +
-  1 texel/block
-                  | ename:VK_FORMAT_R12X4G12X4B12X4A12X4_UNORM_4PACK16
-| 64-bit G12B12G12R12 +
-  Block size 8 bytes +
-  1 texel/block
-                  | ename:VK_FORMAT_G12X4B12X4G12X4R12X4_422_UNORM_4PACK16
-| 64-bit B12G12R12G12 +
-  Block size 8 bytes +
-  1 texel/block
-                  | ename:VK_FORMAT_B12X4G12X4R12X4G12X4_422_UNORM_4PACK16
-| 64-bit G16B16G16R16 +
-  Block size 8 bytes +
-  1 texel/block
-                  | ename:VK_FORMAT_G16B16G16R16_422_UNORM
-| 64-bit B16G16R16G16 +
-  Block size 8 bytes +
-  1 texel/block
-                  | ename:VK_FORMAT_B16G16R16G16_422_UNORM
-endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
-| 96-bit +
-  Block size 12 bytes +
-  1 texel/block
-                  | ename:VK_FORMAT_R32G32B32_UINT, +
-                    ename:VK_FORMAT_R32G32B32_SINT, +
-                    ename:VK_FORMAT_R32G32B32_SFLOAT
-| 128-bit +
-  Block size 16 bytes +
-  1 texel/block
-                  | ename:VK_FORMAT_R32G32B32A32_UINT, +
-                    ename:VK_FORMAT_R32G32B32A32_SINT, +
-                    ename:VK_FORMAT_R32G32B32A32_SFLOAT, +
-                    ename:VK_FORMAT_R64G64_UINT, +
-                    ename:VK_FORMAT_R64G64_SINT, +
-                    ename:VK_FORMAT_R64G64_SFLOAT
-| 192-bit +
-  Block size 24 bytes +
-  1 texel/block
-                  | ename:VK_FORMAT_R64G64B64_UINT, +
-                    ename:VK_FORMAT_R64G64B64_SINT, +
-                    ename:VK_FORMAT_R64G64B64_SFLOAT
-| 256-bit +
-  Block size 32 bytes +
-  1 texel/block
-                  | ename:VK_FORMAT_R64G64B64A64_UINT, +
-                    ename:VK_FORMAT_R64G64B64A64_SINT, +
-                    ename:VK_FORMAT_R64G64B64A64_SFLOAT
-| BC1_RGB (64 bit) +
-  Block size 8 bytes +
-  16 texels/block
-                  | ename:VK_FORMAT_BC1_RGB_UNORM_BLOCK, +
-                    ename:VK_FORMAT_BC1_RGB_SRGB_BLOCK
-| BC1_RGBA (64 bit) +
-  Block size 8 bytes +
-  16 texels/block
-                  | ename:VK_FORMAT_BC1_RGBA_UNORM_BLOCK, +
-                    ename:VK_FORMAT_BC1_RGBA_SRGB_BLOCK
-| BC2 (128 bit) +
-  Block size 16 bytes +
-  16 texels/block
-                  | ename:VK_FORMAT_BC2_UNORM_BLOCK, +
-                    ename:VK_FORMAT_BC2_SRGB_BLOCK
-| BC3 (128 bit) +
-  Block size 16 bytes +
-  16 texels/block
-                  | ename:VK_FORMAT_BC3_UNORM_BLOCK, +
-                    ename:VK_FORMAT_BC3_SRGB_BLOCK
-| BC4 (64 bit) +
-  Block size 8 bytes +
-  16 texels/block
-                  | ename:VK_FORMAT_BC4_UNORM_BLOCK, +
-                    ename:VK_FORMAT_BC4_SNORM_BLOCK
-| BC5 (128 bit) +
-  Block size 16 bytes +
-  16 texels/block
-                  | ename:VK_FORMAT_BC5_UNORM_BLOCK, +
-                    ename:VK_FORMAT_BC5_SNORM_BLOCK
-| BC6H (128 bit) +
-  Block size 16 bytes +
-  16 texels/block
-                  | ename:VK_FORMAT_BC6H_UFLOAT_BLOCK, +
-                    ename:VK_FORMAT_BC6H_SFLOAT_BLOCK
-| BC7 (128 bit) +
-  Block size 16 bytes +
-  16 texels/block
-                  | ename:VK_FORMAT_BC7_UNORM_BLOCK, +
-                    ename:VK_FORMAT_BC7_SRGB_BLOCK
-| ETC2_RGB (64 bit) +
-  Block size 8 bytes +
-  16 texels/block
-                  | ename:VK_FORMAT_ETC2_R8G8B8_UNORM_BLOCK, +
-                    ename:VK_FORMAT_ETC2_R8G8B8_SRGB_BLOCK
-| ETC2_RGBA (64 bit) +
-  Block size 8 bytes +
-  16 texels/block
-                  | ename:VK_FORMAT_ETC2_R8G8B8A1_UNORM_BLOCK, +
-                    ename:VK_FORMAT_ETC2_R8G8B8A1_SRGB_BLOCK
-| ETC2_EAC_RGBA (64 bit) +
-  Block size 8 bytes +
-  16 texels/block
-                  | ename:VK_FORMAT_ETC2_R8G8B8A8_UNORM_BLOCK, +
-                    ename:VK_FORMAT_ETC2_R8G8B8A8_SRGB_BLOCK
-| EAC_R (64 bit) +
-  Block size 8 bytes +
-  16 texels/block
-                  | ename:VK_FORMAT_EAC_R11_UNORM_BLOCK, +
-                    ename:VK_FORMAT_EAC_R11_SNORM_BLOCK
-| EAC_RG (128 bit) +
-  Block size 16 bytes +
-  16 texels/block
-                  | ename:VK_FORMAT_EAC_R11G11_UNORM_BLOCK, +
-                    ename:VK_FORMAT_EAC_R11G11_SNORM_BLOCK
-| ASTC_4x4 (128 bit) +
-  Block size 16 bytes +
-  16 texels/block
-                  | ename:VK_FORMAT_ASTC_4x4_UNORM_BLOCK, +
-ifdef::VK_EXT_texture_compression_astc_hdr[]
-                    ename:VK_FORMAT_ASTC_4x4_SFLOAT_BLOCK_EXT, +
-endif::VK_EXT_texture_compression_astc_hdr[]
-                    ename:VK_FORMAT_ASTC_4x4_SRGB_BLOCK
-| ASTC_5x4 (128 bit) +
-  Block size 16 bytes +
-  20 texels/block
-                  | ename:VK_FORMAT_ASTC_5x4_UNORM_BLOCK, +
-ifdef::VK_EXT_texture_compression_astc_hdr[]
-                    ename:VK_FORMAT_ASTC_5x4_SFLOAT_BLOCK_EXT, +
-endif::VK_EXT_texture_compression_astc_hdr[]
-                    ename:VK_FORMAT_ASTC_5x4_SRGB_BLOCK
-| ASTC_5x5 (128 bit) +
-  Block size 16 bytes +
-  25 texels/block
-                  | ename:VK_FORMAT_ASTC_5x5_UNORM_BLOCK, +
-ifdef::VK_EXT_texture_compression_astc_hdr[]
-                    ename:VK_FORMAT_ASTC_5x5_SFLOAT_BLOCK_EXT, +
-endif::VK_EXT_texture_compression_astc_hdr[]
-                    ename:VK_FORMAT_ASTC_5x5_SRGB_BLOCK
-| ASTC_6x5 (128 bit) +
-  Block size 16 bytes +
-  30 texels/block
-                  | ename:VK_FORMAT_ASTC_6x5_UNORM_BLOCK, +
-ifdef::VK_EXT_texture_compression_astc_hdr[]
-                    ename:VK_FORMAT_ASTC_6x5_SFLOAT_BLOCK_EXT, +
-endif::VK_EXT_texture_compression_astc_hdr[]
-                    ename:VK_FORMAT_ASTC_6x5_SRGB_BLOCK
-| ASTC_6x6 (128 bit) +
-  Block size 16 bytes +
-  36 texels/block
-                  | ename:VK_FORMAT_ASTC_6x6_UNORM_BLOCK, +
-ifdef::VK_EXT_texture_compression_astc_hdr[]
-                    ename:VK_FORMAT_ASTC_6x6_SFLOAT_BLOCK_EXT, +
-endif::VK_EXT_texture_compression_astc_hdr[]
-                    ename:VK_FORMAT_ASTC_6x6_SRGB_BLOCK
-| ASTC_8x5 (128 bit) +
-  Block size 16 bytes +
-  40 texels/block
-                  | ename:VK_FORMAT_ASTC_8x5_UNORM_BLOCK, +
-ifdef::VK_EXT_texture_compression_astc_hdr[]
-                    ename:VK_FORMAT_ASTC_8x5_SFLOAT_BLOCK_EXT, +
-endif::VK_EXT_texture_compression_astc_hdr[]
-                    ename:VK_FORMAT_ASTC_8x5_SRGB_BLOCK
-| ASTC_8x6 (128 bit) +
-  Block size 16 bytes +
-  48 texels/block
-                  | ename:VK_FORMAT_ASTC_8x6_UNORM_BLOCK, +
-ifdef::VK_EXT_texture_compression_astc_hdr[]
-                    ename:VK_FORMAT_ASTC_8x6_SFLOAT_BLOCK_EXT, +
-endif::VK_EXT_texture_compression_astc_hdr[]
-                    ename:VK_FORMAT_ASTC_8x6_SRGB_BLOCK
-| ASTC_8x8 (128 bit) +
-  Block size 16 bytes +
-  64 texels/block
-                  | ename:VK_FORMAT_ASTC_8x8_UNORM_BLOCK, +
-ifdef::VK_EXT_texture_compression_astc_hdr[]
-                    ename:VK_FORMAT_ASTC_8x8_SFLOAT_BLOCK_EXT, +
-endif::VK_EXT_texture_compression_astc_hdr[]
-                    ename:VK_FORMAT_ASTC_8x8_SRGB_BLOCK
-| ASTC_10x5 (128 bit) +
-  Block size 16 bytes +
-  50 texels/block
-                  | ename:VK_FORMAT_ASTC_10x5_UNORM_BLOCK, +
-ifdef::VK_EXT_texture_compression_astc_hdr[]
-                    ename:VK_FORMAT_ASTC_10x5_SFLOAT_BLOCK_EXT, +
-endif::VK_EXT_texture_compression_astc_hdr[]
-                    ename:VK_FORMAT_ASTC_10x5_SRGB_BLOCK
-| ASTC_10x6 (128 bit) +
-  Block size 16 bytes +
-  60 texels/block
-                  | ename:VK_FORMAT_ASTC_10x6_UNORM_BLOCK, +
-ifdef::VK_EXT_texture_compression_astc_hdr[]
-                    ename:VK_FORMAT_ASTC_10x6_SFLOAT_BLOCK_EXT, +
-endif::VK_EXT_texture_compression_astc_hdr[]
-                    ename:VK_FORMAT_ASTC_10x6_SRGB_BLOCK
-| ASTC_10x8 (128 bit) +
-  Block size 16 bytes +
-  80 texels/block
-                  | ename:VK_FORMAT_ASTC_10x8_UNORM_BLOCK, +
-ifdef::VK_EXT_texture_compression_astc_hdr[]
-                    ename:VK_FORMAT_ASTC_10x8_SFLOAT_BLOCK_EXT, +
-endif::VK_EXT_texture_compression_astc_hdr[]
-                    ename:VK_FORMAT_ASTC_10x8_SRGB_BLOCK
-| ASTC_10x10 (128 bit) +
-  Block size 16 bytes +
-  100 texels/block
-                  | ename:VK_FORMAT_ASTC_10x10_UNORM_BLOCK, +
-ifdef::VK_EXT_texture_compression_astc_hdr[]
-                    ename:VK_FORMAT_ASTC_10x10_SFLOAT_BLOCK_EXT, +
-endif::VK_EXT_texture_compression_astc_hdr[]
-                    ename:VK_FORMAT_ASTC_10x10_SRGB_BLOCK
-| ASTC_12x10 (128 bit) +
-  Block size 16 bytes +
-  120 texels/block
-                  | ename:VK_FORMAT_ASTC_12x10_UNORM_BLOCK, +
-ifdef::VK_EXT_texture_compression_astc_hdr[]
-                    ename:VK_FORMAT_ASTC_12x10_SFLOAT_BLOCK_EXT, +
-endif::VK_EXT_texture_compression_astc_hdr[]
-                    ename:VK_FORMAT_ASTC_12x10_SRGB_BLOCK
-| ASTC_12x12 (128 bit) +
-  Block size 16 bytes +
-  144 texels/block
-                  | ename:VK_FORMAT_ASTC_12x12_UNORM_BLOCK, +
-ifdef::VK_EXT_texture_compression_astc_hdr[]
-                    ename:VK_FORMAT_ASTC_12x12_SFLOAT_BLOCK_EXT, +
-endif::VK_EXT_texture_compression_astc_hdr[]
-                    ename:VK_FORMAT_ASTC_12x12_SRGB_BLOCK
-| D16 (16 bit) +
-  Block size 2 bytes +
-  1 texel/block
-                  | ename:VK_FORMAT_D16_UNORM
-| D24 (32 bit) +
-  Block size 4 bytes +
-  1 texel/block
-                  | ename:VK_FORMAT_X8_D24_UNORM_PACK32
-| D32 (32 bit) +
-  Block size 4 bytes +
-  1 texel/block
-                  | ename:VK_FORMAT_D32_SFLOAT
-| S8 (8 bit) +
-  Block size 1 byte +
-  1 texel/block
-                  | ename:VK_FORMAT_S8_UINT
-| D16S8 (24 bit) +
-  Block size 3 bytes +
-  1 texel/block
-                  | ename:VK_FORMAT_D16_UNORM_S8_UINT
-| D24S8 (32 bit) +
-  Block size 4 bytes +
-  1 texel/block
-                  | ename:VK_FORMAT_D24_UNORM_S8_UINT
-| D32S8 (40 bit) +
-  Block size 5 bytes +
-  1 texel/block
-                  | ename:VK_FORMAT_D32_SFLOAT_S8_UINT
-ifdef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
-| 8-bit 3-plane 420 +
-  Block size (1,1,1) bytes +
-  1 texel/block
-                  | ename:VK_FORMAT_G8_B8_R8_3PLANE_420_UNORM
-| 8-bit 2-plane 420 +
-  Block size (1,2) bytes +
-  1 texel/block
-                  | ename:VK_FORMAT_G8_B8R8_2PLANE_420_UNORM
-| 8-bit 3-plane 422 +
-  Block size (1,1,1) bytes +
-  1 texel/block
-                  | ename:VK_FORMAT_G8_B8_R8_3PLANE_422_UNORM
-| 8-bit 2-plane 422 +
-  Block size (1,2) bytes +
-  1 texel/block
-                  | ename:VK_FORMAT_G8_B8R8_2PLANE_422_UNORM
-| 8-bit 3-plane 444 +
-  Block size (1,1,1) bytes +
-  1 texel/block
-                  | ename:VK_FORMAT_G8_B8_R8_3PLANE_444_UNORM
-| 10-bit 3-plane 420 +
-  Block size (2,2,2) bytes +
-  1 texel/block
-                  | ename:VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_420_UNORM_3PACK16
-| 10-bit 2-plane 420 +
-  Block size (2,4) bytes +
-  1 texel/block
-                  | ename:VK_FORMAT_G10X6_B10X6R10X6_2PLANE_420_UNORM_3PACK16
-| 10-bit 3-plane 422 +
-  Block size (2,2,2) bytes +
-  1 texel/block
-                  | ename:VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_422_UNORM_3PACK16
-| 10-bit 2-plane 422 +
-  Block size (2,2) bytes +
-  1 texel/block
-                  | ename:VK_FORMAT_G10X6_B10X6R10X6_2PLANE_422_UNORM_3PACK16
-| 10-bit 3-plane 444 +
-  Block size (2,2,2) bytes +
-  1 texel/block
-                  | ename:VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_444_UNORM_3PACK16
-| 12-bit 3-plane 420 +
-  Block size (2,2,2) bytes +
-  1 texel/block
-                  | ename:VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_420_UNORM_3PACK16
-| 12-bit 2-plane 420 +
-  Block size (2,4) bytes +
-  1 texel/block
-                  | ename:VK_FORMAT_G12X4_B12X4R12X4_2PLANE_420_UNORM_3PACK16
-| 12-bit 3-plane 422 +
-  Block size (2,2,2) bytes +
-  1 texel/block
-                  | ename:VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_422_UNORM_3PACK16
-| 12-bit 2-plane 422 +
-  Block size (2,4) bytes +
-  1 texel/block
-                  | ename:VK_FORMAT_G12X4_B12X4R12X4_2PLANE_422_UNORM_3PACK16
-| 12-bit 3-plane 444 +
-  Block size (2,2,2) bytes +
-  1 texel/block
-                  | ename:VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_444_UNORM_3PACK16
-| 16-bit 3-plane 420 +
-  Block size (2,2,2) bytes +
-  1 texel/block
-                  | ename:VK_FORMAT_G16_B16_R16_3PLANE_420_UNORM
-| 16-bit 2-plane 420 +
-  Block size (2,4) bytes +
-  1 texel/block
-                  | ename:VK_FORMAT_G16_B16R16_2PLANE_420_UNORM
-| 16-bit 3-plane 422 +
-  Block size (2,2,2) bytes +
-  1 texel/block
-                  | ename:VK_FORMAT_G16_B16_R16_3PLANE_422_UNORM
-| 16-bit 2-plane 422 +
-  Block size (2,4) bytes +
-  1 texel/block
-                  | ename:VK_FORMAT_G16_B16R16_2PLANE_422_UNORM
-| 16-bit 3-plane 444 +
-  Block size (2,2,2) bytes +
-  1 texel/block
-                  | ename:VK_FORMAT_G16_B16_R16_3PLANE_444_UNORM
-ifdef::VK_EXT_ycbcr_2plane_444_formats[]
-| 8-bit 2-plane 444 +
-  Block size (1,2) bytes +
-  1 texel/block
-                  | ename:VK_FORMAT_G8_B8R8_2PLANE_444_UNORM_EXT
-| 10-bit 2-plane 444 +
-  Block size (2,4) bytes +
-  1 texel/block
-                  | ename:VK_FORMAT_G10X6_B10X6R10X6_2PLANE_444_UNORM_3PACK16_EXT
-| 12-bit 2-plane 444 +
-  Block size (2,4) bytes +
-  1 texel/block
-                  | ename:VK_FORMAT_G12X4_B12X4R12X4_2PLANE_444_UNORM_3PACK16_EXT
-| 16-bit 2-plane 444 +
-  Block size (2,4) bytes +
-  1 texel/block
-                  | ename:VK_FORMAT_G16_B16R16_2PLANE_444_UNORM_EXT
-endif::VK_EXT_ycbcr_2plane_444_formats[]
-
-endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
-|====
-
-
-[[formats-properties]]
-== Format Properties
-
-[open,refpage='vkGetPhysicalDeviceFormatProperties',desc='Lists physical device\'s format capabilities',type='protos']
---
-To query supported format features which are properties of the physical
-device, call:
-
-include::{generated}/api/protos/vkGetPhysicalDeviceFormatProperties.txt[]
-
-  * pname:physicalDevice is the physical device from which to query the
-    format properties.
-  * pname:format is the format whose properties are queried.
-  * pname:pFormatProperties is a pointer to a slink:VkFormatProperties
-    structure in which physical device properties for pname:format are
-    returned.
-
-include::{generated}/validity/protos/vkGetPhysicalDeviceFormatProperties.txt[]
---
-
-[open,refpage='VkFormatProperties',desc='Structure specifying image format properties',type='structs']
---
-The sname:VkFormatProperties structure is defined as:
-
-include::{generated}/api/structs/VkFormatProperties.txt[]
-
-  * pname:linearTilingFeatures is a bitmask of elink:VkFormatFeatureFlagBits
-    specifying features supported by images created with a pname:tiling
-    parameter of ename:VK_IMAGE_TILING_LINEAR.
-  * pname:optimalTilingFeatures is a bitmask of
-    elink:VkFormatFeatureFlagBits specifying features supported by images
-    created with a pname:tiling parameter of ename:VK_IMAGE_TILING_OPTIMAL.
-  * pname:bufferFeatures is a bitmask of elink:VkFormatFeatureFlagBits
-    specifying features supported by buffers.
-
-[NOTE]
-.Note
-====
-ifndef::VK_VERSION_1_1,VK_KHR_maintenance1[]
-If no format feature flags are supported, then the only possible use would
-be image transfers - which alone are not useful.
-As such, if no format feature flags are supported, the format itself is not
-supported, and images of that format cannot be created.
-endif::VK_VERSION_1_1,VK_KHR_maintenance1[]
-ifdef::VK_VERSION_1_1,VK_KHR_maintenance1[]
-If no format feature flags are supported, the format itself is not
-supported, and images of that format cannot be created.
-endif::VK_VERSION_1_1,VK_KHR_maintenance1[]
-====
-
-If pname:format is a block-compressed format, then pname:bufferFeatures
-must: not support any features for the format.
-
-ifdef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
-If pname:format is not a multi-plane format then pname:linearTilingFeatures
-and pname:optimalTilingFeatures must: not contain
-ename:VK_FORMAT_FEATURE_DISJOINT_BIT.
-endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
-
-include::{generated}/validity/structs/VkFormatProperties.txt[]
---
-
-[open,refpage='VkFormatFeatureFlagBits',desc='Bitmask specifying features supported by a buffer',type='enums']
---
-Bits which can: be set in the slink:VkFormatProperties features
-pname:linearTilingFeatures, pname:optimalTilingFeatures,
-ifdef::VK_EXT_image_drm_format_modifier[]
-slink:VkDrmFormatModifierPropertiesEXT::pname:drmFormatModifierTilingFeatures,
-endif::VK_EXT_image_drm_format_modifier[]
-and pname:bufferFeatures are:
-
-include::{generated}/api/enums/VkFormatFeatureFlagBits.txt[]
-
-These values
-ifdef::VK_VERSION_1_1,VK_KHR_get_physical_device_properties2[]
-ifdef::VK_KHR_format_feature_flags2[]
-all have the same meaning as the equivalently named values for
-tlink:VkFormatFeatureFlags2KHR and
-endif::VK_KHR_format_feature_flags2[]
-endif::VK_VERSION_1_1,VK_KHR_get_physical_device_properties2[]
-may: be set in
-ifndef::VK_EXT_image_drm_format_modifier[]
-pname:linearTilingFeatures and pname:optimalTilingFeatures,
-endif::VK_EXT_image_drm_format_modifier[]
-ifdef::VK_EXT_image_drm_format_modifier[]
-pname:linearTilingFeatures, pname:optimalTilingFeatures, and
-slink:VkDrmFormatModifierPropertiesEXT::pname:drmFormatModifierTilingFeatures,
-endif::VK_EXT_image_drm_format_modifier[]
-specifying that the features are supported by <<VkImage,images>> or
-<<VkImageView,image views>>
-ifdef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
-or <<VkSamplerYcbcrConversion,sampler {YCbCr} conversion objects>>
-endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
-created with the queried
-flink:vkGetPhysicalDeviceFormatProperties::pname:format:
-
-  * ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT specifies that an image view
-    can: be <<descriptorsets-sampledimage, sampled from>>.
-  * ename:VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT specifies that an image view
-    can: be used as a <<descriptorsets-storageimage, storage image>>.
-  * ename:VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT specifies that an image
-    view can: be used as storage image that supports atomic operations.
-  * ename:VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT specifies that an image
-    view can: be used as a framebuffer color attachment and as an input
-    attachment.
-  * ename:VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT specifies that an
-    image view can: be used as a framebuffer color attachment that supports
-    blending and as an input attachment.
-  * ename:VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT specifies that an
-    image view can: be used as a framebuffer depth/stencil attachment and as
-    an input attachment.
-  * ename:VK_FORMAT_FEATURE_BLIT_SRC_BIT specifies that an image can: be
-    used as pname:srcImage for the
-ifndef::VK_KHR_copy_commands2[]
-    fname:vkCmdBlitImage command.
-endif::VK_KHR_copy_commands2[]
-ifdef::VK_KHR_copy_commands2[]
-    fname:vkCmdBlitImage2KHR and fname:vkCmdBlitImage commands.
-endif::VK_KHR_copy_commands2[]
-  * ename:VK_FORMAT_FEATURE_BLIT_DST_BIT specifies that an image can: be
-    used as pname:dstImage for the
-ifndef::VK_KHR_copy_commands2[]
-    fname:vkCmdBlitImage command.
-endif::VK_KHR_copy_commands2[]
-ifdef::VK_KHR_copy_commands2[]
-    fname:vkCmdBlitImage2KHR and fname:vkCmdBlitImage commands.
-endif::VK_KHR_copy_commands2[]
-  * ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT specifies that
-    if ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT is also set, an image view
-    can: be used with a sampler that has either of pname:magFilter or
-    pname:minFilter set to ename:VK_FILTER_LINEAR, or pname:mipmapMode set
-    to ename:VK_SAMPLER_MIPMAP_MODE_LINEAR.
-    If ename:VK_FORMAT_FEATURE_BLIT_SRC_BIT is also set, an image can be
-    used as the pname:srcImage to
-ifndef::VK_KHR_copy_commands2[]
-    fname:vkCmdBlitImage
-endif::VK_KHR_copy_commands2[]
-ifdef::VK_KHR_copy_commands2[]
-    fname:vkCmdBlitImage2KHR and fname:vkCmdBlitImage
-endif::VK_KHR_copy_commands2[]
-    with a pname:filter of ename:VK_FILTER_LINEAR.
-    This bit must: only be exposed for formats that also support the
-    ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT or
-    ename:VK_FORMAT_FEATURE_BLIT_SRC_BIT.
-+
-If the format being queried is a depth/stencil format, this bit only
-specifies that the depth aspect (not the stencil aspect) of an image of this
-format supports linear filtering, and that linear filtering of the depth
-aspect is supported whether depth compare is enabled in the sampler or not.
-Where depth comparison is supported it may: be linear filtered whether this
-bit is present or not, but where this bit is not present the filtered value
-may: be computed in an implementation-dependent manner which differs from
-the normal rules of linear filtering.
-The resulting value must: be in the range [eq]#[0,1]# and should: be
-proportional to, or a weighted average of, the number of comparison passes
-or failures.
-
-ifdef::VK_VERSION_1_1,VK_KHR_maintenance1[]
-  * ename:VK_FORMAT_FEATURE_TRANSFER_SRC_BIT specifies that an image can: be
-    used as a source image for <<copies, copy commands>>.
-  * ename:VK_FORMAT_FEATURE_TRANSFER_DST_BIT specifies that an image can: be
-    used as a destination image for <<copies, copy commands>> and <<clears,
-    clear commands>>.
-endif::VK_VERSION_1_1,VK_KHR_maintenance1[]
-ifdef::VK_VERSION_1_2,VK_EXT_sampler_filter_minmax[]
-  * ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_MINMAX_BIT specifies
-    sname:VkImage can: be used as a sampled image with a min or max
-    elink:VkSamplerReductionMode.
-    This bit must: only be exposed for formats that also support the
-    ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT.
-endif::VK_VERSION_1_2,VK_EXT_sampler_filter_minmax[]
-ifdef::VK_IMG_filter_cubic,VK_EXT_filter_cubic[]
-  * ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_EXT specifies
-    that sname:VkImage can: be used with a sampler that has either of
-    pname:magFilter or pname:minFilter set to ename:VK_FILTER_CUBIC_EXT, or
-    be the source image for a blit with pname:filter set to
-    ename:VK_FILTER_CUBIC_EXT.
-    This bit must: only be exposed for formats that also support the
-    ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT.
-    If the format being queried is a depth/stencil format, this only
-    specifies that the depth aspect is cubic filterable.
-endif::VK_IMG_filter_cubic,VK_EXT_filter_cubic[]
-ifdef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
-  * ename:VK_FORMAT_FEATURE_MIDPOINT_CHROMA_SAMPLES_BIT specifies that an
-    application can: define a <<samplers-YCbCr-conversion,sampler {YCbCr}
-    conversion>> using this format as a source, and that an image of this
-    format can: be used with a slink:VkSamplerYcbcrConversionCreateInfo
-    pname:xChromaOffset and/or pname:yChromaOffset of
-    ename:VK_CHROMA_LOCATION_MIDPOINT.
-    Otherwise both pname:xChromaOffset and pname:yChromaOffset must: be
-    ename:VK_CHROMA_LOCATION_COSITED_EVEN.
-    If a format does not incorporate chroma downsampling (it is not a
-    "`422`" or "`420`" format) but the implementation supports sampler
-    {YCbCr} conversion for this format, the implementation must: set
-    ename:VK_FORMAT_FEATURE_MIDPOINT_CHROMA_SAMPLES_BIT.
-  * ename:VK_FORMAT_FEATURE_COSITED_CHROMA_SAMPLES_BIT specifies that an
-    application can: define a <<samplers-YCbCr-conversion,sampler {YCbCr}
-    conversion>> using this format as a source, and that an image of this
-    format can: be used with a slink:VkSamplerYcbcrConversionCreateInfo
-    pname:xChromaOffset and/or pname:yChromaOffset of
-    ename:VK_CHROMA_LOCATION_COSITED_EVEN.
-    Otherwise both pname:xChromaOffset and pname:yChromaOffset must: be
-    ename:VK_CHROMA_LOCATION_MIDPOINT.
-    If neither ename:VK_FORMAT_FEATURE_COSITED_CHROMA_SAMPLES_BIT nor
-    ename:VK_FORMAT_FEATURE_MIDPOINT_CHROMA_SAMPLES_BIT is set, the
-    application must: not define a <<samplers-YCbCr-conversion,sampler
-    {YCbCr} conversion>> using this format as a source.
-  * ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_LINEAR_FILTER_BIT
-    specifies that an application can: define a
-    <<samplers-YCbCr-conversion,sampler {YCbCr} conversion>> using this
-    format as a source with pname:chromaFilter set to
-    ename:VK_FILTER_LINEAR.
-  * ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_SEPARATE_RECONSTRUCTION_FILTER_BIT
-    specifies that the format can have different chroma, min, and mag
-    filters.
-  * ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_BIT
-    specifies that reconstruction is explicit, as described in
-    <<textures-chroma-reconstruction>>.
-    If this bit is not present, reconstruction is implicit by default.
-  * ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_FORCEABLE_BIT
-    specifies that reconstruction can: be forcibly made explicit by setting
-    slink:VkSamplerYcbcrConversionCreateInfo::pname:forceExplicitReconstruction
-    to ename:VK_TRUE.
-    If the format being queried supports
-    ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_BIT
-    it must: also support
-    ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_FORCEABLE_BIT.
-  * ename:VK_FORMAT_FEATURE_DISJOINT_BIT specifies that a multi-planar image
-    can: have the ename:VK_IMAGE_CREATE_DISJOINT_BIT set during image
-    creation.
-    An implementation must: not set ename:VK_FORMAT_FEATURE_DISJOINT_BIT for
-    _single-plane formats_.
-endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
-ifdef::VK_EXT_fragment_density_map[]
-  * ename:VK_FORMAT_FEATURE_FRAGMENT_DENSITY_MAP_BIT_EXT specifies that an
-    image view can: be used as a
-    <<renderpass-fragmentdensitymapattachment,fragment density map
-    attachment>>.
-endif::VK_EXT_fragment_density_map[]
-ifdef::VK_KHR_fragment_shading_rate[]
-  * ename:VK_FORMAT_FEATURE_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR
-    specifies that an image view can: be used as a
-    <<primsrast-fragment-shading-rate-attachment, fragment shading rate
-    attachment>>.
-    An implementation must: not set this feature for formats with numeric
-    type other than etext:*UINT, or set it as a buffer feature.
-endif::VK_KHR_fragment_shading_rate[]
-ifdef::VK_KHR_video_decode_queue[]
-  * ename:VK_FORMAT_FEATURE_VIDEO_DECODE_OUTPUT_BIT_KHR specifies that an
-    image view with this format can: be used as an output for
-    <<video-decode-operations,video decode operations>>
-  * ename:VK_FORMAT_FEATURE_VIDEO_DECODE_DPB_BIT_KHR specifies that an image
-    view with this format can: be used as a DPB for
-    <<video-decode-operations,video decode operations>>
-endif::VK_KHR_video_decode_queue[]
-ifdef::VK_KHR_video_encode_queue[]
-  * ename:VK_FORMAT_FEATURE_VIDEO_ENCODE_INPUT_BIT_KHR specifies that an
-    image view with this format can: be used as an input to
-    <<video-encode-operations,video encode operations>>
-  * ename:VK_FORMAT_FEATURE_VIDEO_ENCODE_DPB_BIT_KHR specifies that an image
-    view with this format can: be used as a DPB for
-    <<video-encode-operations,video encode operations>>
-endif::VK_KHR_video_encode_queue[]
-
-[[buffer-compatible-format-features]]
-
-The following bits may: be set in pname:bufferFeatures, specifying that the
-features are supported by <<VkBuffer,buffers>> or <<VkBufferView,buffer
-views>> created with the queried
-flink:vkGetPhysicalDeviceFormatProperties::pname:format:
-
-  * ename:VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT specifies that the
-    format can: be used to create a buffer view that can: be bound to a
-    ename:VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER descriptor.
-  * ename:VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT specifies that the
-    format can: be used to create a buffer view that can: be bound to a
-    ename:VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER descriptor.
-  * ename:VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT specifies that
-    atomic operations are supported on
-    ename:VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER with this format.
-  * ename:VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT specifies that the format can:
-    be used as a vertex attribute format
-    (sname:VkVertexInputAttributeDescription::pname:format).
-ifdef::VK_KHR_acceleration_structure[]
-  * ename:VK_FORMAT_FEATURE_ACCELERATION_STRUCTURE_VERTEX_BUFFER_BIT_KHR
-    specifies that the format can: be used as the vertex format when
-    creating an <<acceleration-structure,acceleration structure>>
-    (sname:VkAccelerationStructureGeometryTrianglesDataKHR::pname:vertexFormat).
-    This format can: also be used as the vertex format in host memory when
-    doing <<host-acceleration-structure, host acceleration structure>>
-    builds.
-endif::VK_KHR_acceleration_structure[]
-
---
-
-[open,refpage='VkFormatFeatureFlags',desc='Bitmask of VkFormatFeatureFlagBits',type='flags']
---
-include::{generated}/api/flags/VkFormatFeatureFlags.txt[]
-
-tname:VkFormatFeatureFlags is a bitmask type for setting a mask of zero or
-more elink:VkFormatFeatureFlagBits.
---
-
-ifdef::VK_VERSION_1_1,VK_KHR_get_physical_device_properties2[]
-
-[open,refpage='vkGetPhysicalDeviceFormatProperties2',desc='Lists physical device\'s format capabilities',type='protos']
---
-To query supported format features which are properties of the physical
-device, call:
-
-ifdef::VK_VERSION_1_1[]
-include::{generated}/api/protos/vkGetPhysicalDeviceFormatProperties2.txt[]
-endif::VK_VERSION_1_1[]
-
-ifdef::VK_VERSION_1_1+VK_KHR_get_physical_device_properties2[or the equivalent command]
-
-ifdef::VK_KHR_get_physical_device_properties2[]
-include::{generated}/api/protos/vkGetPhysicalDeviceFormatProperties2KHR.txt[]
-endif::VK_KHR_get_physical_device_properties2[]
-
-  * pname:physicalDevice is the physical device from which to query the
-    format properties.
-  * pname:format is the format whose properties are queried.
-  * pname:pFormatProperties is a pointer to a slink:VkFormatProperties2
-    structure in which physical device properties for pname:format are
-    returned.
-
-fname:vkGetPhysicalDeviceFormatProperties2 behaves similarly to
-flink:vkGetPhysicalDeviceFormatProperties, with the ability to return
-extended information in a pname:pNext chain of output structures.
-
-include::{generated}/validity/protos/vkGetPhysicalDeviceFormatProperties2.txt[]
---
-
-[open,refpage='VkFormatProperties2',desc='Structure specifying image format properties',type='structs']
---
-The sname:VkFormatProperties2 structure is defined as:
-
-include::{generated}/api/structs/VkFormatProperties2.txt[]
-
-ifdef::VK_KHR_get_physical_device_properties2[]
-or the equivalent
-
-include::{generated}/api/structs/VkFormatProperties2KHR.txt[]
-endif::VK_KHR_get_physical_device_properties2[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:formatProperties is a slink:VkFormatProperties structure
-    describing features supported by the requested format.
-
-include::{generated}/validity/structs/VkFormatProperties2.txt[]
---
-
-ifdef::VK_EXT_image_drm_format_modifier[]
-[open,refpage='VkDrmFormatModifierPropertiesListEXT',desc='Structure specifying the list of DRM format modifiers supported for a format',type='structs']
---
-To obtain the list of <<glossary-drm-format-modifier,Linux DRM format
-modifiers>> compatible with a elink:VkFormat, add a
-slink:VkDrmFormatModifierPropertiesListEXT structure to the pname:pNext
-chain of slink:VkFormatProperties2.
-
-The slink:VkDrmFormatModifierPropertiesListEXT structure is defined as:
-
-include::{generated}/api/structs/VkDrmFormatModifierPropertiesListEXT.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:drmFormatModifierCount is an inout parameter related to the number
-    of modifiers compatible with the pname:format, as described below.
-  * pname:pDrmFormatModifierProperties is either `NULL` or a pointer to an
-    array of slink:VkDrmFormatModifierPropertiesEXT structures.
-
-If pname:pDrmFormatModifierProperties is `NULL`, then the function returns
-in pname:drmFormatModifierCount the number of modifiers compatible with the
-queried pname:format.
-Otherwise, the application must: set pname:drmFormatModifierCount to the
-length of the array pname:pDrmFormatModifierProperties; the function will
-write at most pname:drmFormatModifierCount elements to the array, and will
-return in pname:drmFormatModifierCount the number of elements written.
-
-Among the elements in array pname:pDrmFormatModifierProperties, each
-returned pname:drmFormatModifier must: be unique.
-
-include::{generated}/validity/structs/VkDrmFormatModifierPropertiesListEXT.txt[]
---
-
-[open,refpage='VkDrmFormatModifierPropertiesEXT',desc='Structure specifying properties of a format when combined with a DRM format modifier',type='structs']
---
-The slink:VkDrmFormatModifierPropertiesEXT structure describes properties of
-a elink:VkFormat when that format is combined with a
-<<glossary-drm-format-modifier,Linux DRM format modifier>>.
-These properties, like those of slink:VkFormatProperties2, are independent
-of any particular image.
-
-The slink:VkDrmFormatModifierPropertiesEXT structure is defined as:
-
-include::{generated}/api/structs/VkDrmFormatModifierPropertiesEXT.txt[]
-
-  * pname:drmFormatModifier is a _Linux DRM format modifier_.
-  * pname:drmFormatModifierPlaneCount is the number of _memory planes_ in
-    any image created with pname:format and pname:drmFormatModifier.
-    An image's _memory planecount_ is distinct from its _format planecount_,
-    as explained below.
-  * pname:drmFormatModifierTilingFeatures is a bitmask of
-    elink:VkFormatFeatureFlagBits that are supported by any image created
-    with pname:format and pname:drmFormatModifier.
-
-The returned pname:drmFormatModifierTilingFeatures must: contain at least
-one bit.
-
-The implementation must: not return etext:DRM_FORMAT_MOD_INVALID in
-pname:drmFormatModifier.
-
-An image's _memory planecount_ (as returned by
-pname:drmFormatModifierPlaneCount) is distinct from its _format planecount_
-(in the sense of <<formats-requiring-sampler-ycbcr-conversion,multi-planar>>
-{YCbCr} formats).
-In tlink:VkImageAspectFlags, each
-`VK_IMAGE_ASPECT_MEMORY_PLANE__{ibit}__BIT_EXT` represents a _memory plane_
-and each `VK_IMAGE_ASPECT_PLANE__{ibit}__BIT` a _format plane_.
-
-An image's set of _format planes_ is an ordered partition of the image's
-*content* into separable groups of format components.
-The ordered partition is encoded in the name of each elink:VkFormat.
-For example, ename:VK_FORMAT_G8_B8R8_2PLANE_420_UNORM contains two _format
-planes_; the first plane contains the green component and the second plane
-contains the blue component and red component.
-If the format name does not contain `PLANE`, then the format contains a
-single plane; for example, ename:VK_FORMAT_R8G8B8A8_UNORM.
-Some commands, such as flink:vkCmdCopyBufferToImage, do not operate on all
-format components in the image, but instead operate only on the _format
-planes_ explicitly chosen by the application and operate on each _format
-plane_ independently.
-
-An image's set of _memory planes_ is an ordered partition of the image's
-*memory* rather than the image's *content*.
-Each _memory plane_ is a contiguous range of memory.
-The union of an image's _memory planes_ is not necessarily contiguous.
-
-If an image is <<glossary-linear-resource,linear>>, then the partition is
-the same for _memory planes_ and for _format planes_.
-Therefore, if the returned pname:drmFormatModifier is
-code:DRM_FORMAT_MOD_LINEAR, then pname:drmFormatModifierPlaneCount must:
-equal the _format planecount_, and pname:drmFormatModifierTilingFeatures
-must: be identical to the
-slink:VkFormatProperties2::pname:linearTilingFeatures returned in the same
-pname:pNext chain.
-
-If an image is <<glossary-linear-resource,non-linear>>, then the partition
-of the image's *memory* into _memory planes_ is implementation-specific and
-may: be unrelated to the partition of the image's *content* into _format
-planes_.
-For example, consider an image whose pname:format is
-ename:VK_FORMAT_G8_B8_R8_3PLANE_420_UNORM, pname:tiling is
-ename:VK_IMAGE_TILING_DRM_FORMAT_MODIFIER_EXT, whose pname:drmFormatModifier
-is not code:DRM_FORMAT_MOD_LINEAR, and pname:flags lacks
-ename:VK_IMAGE_CREATE_DISJOINT_BIT.
-The image has 3 _format planes_, and commands such
-flink:vkCmdCopyBufferToImage act on each _format plane_ independently as if
-the data of each _format plane_ were separable from the data of the other
-planes.
-In a straightforward implementation, the implementation may: store the
-image's content in 3 adjacent _memory planes_ where each _memory plane_
-corresponds exactly to a _format plane_.
-However, the implementation may: also store the image's content in a single
-_memory plane_ where all format components are combined using an
-implementation-private block-compressed format; or the implementation may:
-store the image's content in a collection of 7 adjacent _memory planes_
-using an implementation-private sharding technique.
-Because the image is non-linear and non-disjoint, the implementation has
-much freedom when choosing the image's placement in memory.
-
-The _memory planecount_ applies to function parameters and structures only
-when the API specifies an explicit requirement on
-pname:drmFormatModifierPlaneCount.
-In all other cases, the _memory planecount_ is ignored.
-
-include::{generated}/validity/structs/VkDrmFormatModifierPropertiesEXT.txt[]
---
-
-ifdef::VK_KHR_format_feature_flags2[]
-[open,refpage='VkDrmFormatModifierPropertiesList2EXT',desc='Structure specifying the list of DRM format modifiers supported for a format',type='structs']
---
-The list of <<glossary-drm-format-modifier,Linux DRM format modifiers>>
-compatible with a elink:VkFormat can: be obtained by adding a
-slink:VkDrmFormatModifierPropertiesList2EXT structure to the pname:pNext
-chain of slink:VkFormatProperties2.
-
-The slink:VkDrmFormatModifierPropertiesList2EXT structure is defined as:
-
-include::{generated}/api/structs/VkDrmFormatModifierPropertiesList2EXT.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:drmFormatModifierCount is an inout parameter related to the number
-    of modifiers compatible with the pname:format, as described below.
-  * pname:pDrmFormatModifierProperties is either `NULL` or a pointer to an
-    array of slink:VkDrmFormatModifierProperties2EXT structures.
-
-If pname:pDrmFormatModifierProperties is `NULL`, the number of modifiers
-compatible with the queried pname:format is returned in
-pname:drmFormatModifierCount.
-Otherwise, the application must: set pname:drmFormatModifierCount to the
-length of the array pname:pDrmFormatModifierProperties; the function will
-write at most pname:drmFormatModifierCount elements to the array, and will
-return in pname:drmFormatModifierCount the number of elements written.
-
-Among the elements in array pname:pDrmFormatModifierProperties, each
-returned pname:drmFormatModifier must: be unique.
-
-Among the elements in array pname:pDrmFormatModifierProperties, the bits
-reported in pname:drmFormatModifierTilingFeatures must: include the bits
-reported in the corresponding element of
-sname:VkDrmFormatModifierPropertiesListEXT::pname:pDrmFormatModifierProperties.
-
-include::{generated}/validity/structs/VkDrmFormatModifierPropertiesList2EXT.txt[]
---
-
-[open,refpage='VkDrmFormatModifierProperties2EXT',desc='Structure specifying properties of a format when combined with a DRM format modifier',type='structs']
---
-The slink:VkDrmFormatModifierProperties2EXT structure describes properties
-of a elink:VkFormat when that format is combined with a
-<<glossary-drm-format-modifier,Linux DRM format modifier>>.
-These properties, like those of slink:VkFormatProperties2, are independent
-of any particular image.
-
-The slink:VkDrmFormatModifierPropertiesEXT structure is defined as:
-
-include::{generated}/api/structs/VkDrmFormatModifierProperties2EXT.txt[]
-
-  * pname:drmFormatModifier is a _Linux DRM format modifier_.
-  * pname:drmFormatModifierPlaneCount is the number of _memory planes_ in
-    any image created with pname:format and pname:drmFormatModifier.
-    An image's _memory planecount_ is distinct from its _format planecount_,
-    as explained below.
-  * pname:drmFormatModifierTilingFeatures is a bitmask of
-    elink:VkFormatFeatureFlagBits2KHR that are supported by any image
-    created with pname:format and pname:drmFormatModifier.
-include::{generated}/validity/structs/VkDrmFormatModifierProperties2EXT.txt[]
---
-endif::VK_KHR_format_feature_flags2[]
-endif::VK_EXT_image_drm_format_modifier[]
-
-ifdef::VK_KHR_format_feature_flags2[]
-[open,refpage='VkFormatProperties3KHR',desc='Structure specifying image format properties',type='structs']
---
-
-To query supported format extended features which are properties of the
-physical device, add slink:VkFormatProperties3KHR structure to the
-pname:pNext chain of slink:VkFormatProperties2.
-
-The slink:VkFormatProperties3KHR structure is defined as:
-
-include::{generated}/api/structs/VkFormatProperties3KHR.txt[]
-
-  * pname:linearTilingFeatures is a bitmask of
-    elink:VkFormatFeatureFlagBits2KHR specifying features supported by
-    images created with a pname:tiling parameter of
-    ename:VK_IMAGE_TILING_LINEAR.
-  * pname:optimalTilingFeatures is a bitmask of
-    elink:VkFormatFeatureFlagBits2KHR specifying features supported by
-    images created with a pname:tiling parameter of
-    ename:VK_IMAGE_TILING_OPTIMAL.
-  * pname:bufferFeatures is a bitmask of elink:VkFormatFeatureFlagBits2KHR
-    specifying features supported by buffers.
-
-The bits reported in pname:linearTilingFeatures, pname:optimalTilingFeatures
-and pname:bufferFeatures must: include the bits reported in the
-corresponding fields of sname:VkFormatProperties2::pname:formatProperties.
-
-include::{generated}/validity/structs/VkFormatProperties3KHR.txt[]
---
-
-[open,refpage='VkFormatFeatureFlagBits2KHR',desc='Bitmask specifying features supported by a buffer',type='enums']
---
-Bits which can: be set in the slink:VkFormatProperties3KHR features
-pname:linearTilingFeatures, pname:optimalTilingFeatures, and
-pname:bufferFeatures are:
-
-include::{generated}/api/enums/VkFormatFeatureFlagBits2KHR.txt[]
-
-The following bits may: be set in pname:linearTilingFeatures and
-pname:optimalTilingFeatures, specifying that the features are supported by
-<<VkImage,images>> or <<VkImageView,image views>>
-ifdef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
-or <<VkSamplerYcbcrConversion,sampler {YCbCr} conversion objects>>
-endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
-created with the queried
-flink:vkGetPhysicalDeviceFormatProperties2::pname:format:
-
-  * ename:VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_BIT_KHR specifies that an image
-    view can: be <<descriptorsets-sampledimage, sampled from>>.
-  * ename:VK_FORMAT_FEATURE_2_STORAGE_IMAGE_BIT_KHR specifies that an image
-    view can: be used as a <<descriptorsets-storageimage, storage image>>.
-  * ename:VK_FORMAT_FEATURE_2_STORAGE_IMAGE_ATOMIC_BIT_KHR specifies that an
-    image view can: be used as storage image that supports atomic
-    operations.
-  * ename:VK_FORMAT_FEATURE_2_COLOR_ATTACHMENT_BIT_KHR specifies that an
-    image view can: be used as a framebuffer color attachment and as an
-    input attachment.
-  * ename:VK_FORMAT_FEATURE_2_COLOR_ATTACHMENT_BLEND_BIT_KHR specifies that
-    an image view can: be used as a framebuffer color attachment that
-    supports blending and as an input attachment.
-  * ename:VK_FORMAT_FEATURE_2_DEPTH_STENCIL_ATTACHMENT_BIT_KHR specifies
-    that an image view can: be used as a framebuffer depth/stencil
-    attachment and as an input attachment.
-  * ename:VK_FORMAT_FEATURE_2_BLIT_SRC_BIT_KHR specifies that an image can:
-    be used as pname:srcImage for the
-ifndef::VK_KHR_copy_commands2[]
-    fname:vkCmdBlitImage command.
-endif::VK_KHR_copy_commands2[]
-ifdef::VK_KHR_copy_commands2[]
-    fname:vkCmdBlitImage2KHR and fname:vkCmdBlitImage commands.
-endif::VK_KHR_copy_commands2[]
-  * ename:VK_FORMAT_FEATURE_2_BLIT_DST_BIT_KHR specifies that an image can:
-    be used as pname:dstImage for the
-ifndef::VK_KHR_copy_commands2[]
-    fname:vkCmdBlitImage command.
-endif::VK_KHR_copy_commands2[]
-ifdef::VK_KHR_copy_commands2[]
-    fname:vkCmdBlitImage2KHR and fname:vkCmdBlitImage commands.
-endif::VK_KHR_copy_commands2[]
-  * ename:VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_FILTER_LINEAR_BIT_KHR specifies
-    that if ename:VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_BIT_KHR is also set, an
-    image view can: be used with a sampler that has either of
-    pname:magFilter or pname:minFilter set to ename:VK_FILTER_LINEAR, or
-    pname:mipmapMode set to ename:VK_SAMPLER_MIPMAP_MODE_LINEAR.
-    If ename:VK_FORMAT_FEATURE_2_BLIT_SRC_BIT_KHR is also set, an image can
-    be used as the pname:srcImage to
-ifndef::VK_KHR_copy_commands2[]
-    fname:vkCmdBlitImage
-endif::VK_KHR_copy_commands2[]
-ifdef::VK_KHR_copy_commands2[]
-    fname:vkCmdBlitImage2KHR and fname:vkCmdBlitImage
-endif::VK_KHR_copy_commands2[]
-    with a pname:filter of ename:VK_FILTER_LINEAR.
-    This bit must: only be exposed for formats that also support the
-    ename:VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_BIT_KHR or
-    ename:VK_FORMAT_FEATURE_2_BLIT_SRC_BIT_KHR.
-+
-If the format being queried is a depth/stencil format, this bit only
-specifies that the depth aspect (not the stencil aspect) of an image of this
-format supports linear filtering.
-Where depth comparison is supported it may: be linear filtered whether this
-bit is present or not, but where this bit is not present the filtered value
-may: be computed in an implementation-dependent manner which differs from
-the normal rules of linear filtering.
-The resulting value must: be in the range [eq]#[0,1]# and should: be
-proportional to, or a weighted average of, the number of comparison passes
-or failures.
-
-ifdef::VK_VERSION_1_1,VK_KHR_maintenance1[]
-  * ename:VK_FORMAT_FEATURE_2_TRANSFER_SRC_BIT_KHR specifies that an image
-    can: be used as a source image for <<copies, copy commands>>.
-  * ename:VK_FORMAT_FEATURE_2_TRANSFER_DST_BIT_KHR specifies that an image
-    can: be used as a destination image for <<copies, copy commands>> and
-    <<clears, clear commands>>.
-endif::VK_VERSION_1_1,VK_KHR_maintenance1[]
-ifdef::VK_VERSION_1_2,VK_EXT_sampler_filter_minmax[]
-  * ename:VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_FILTER_MINMAX_BIT_KHR specifies
-    sname:VkImage can: be used as a sampled image with a min or max
-    elink:VkSamplerReductionMode.
-    This bit must: only be exposed for formats that also support the
-    ename:VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_BIT_KHR.
-endif::VK_VERSION_1_2,VK_EXT_sampler_filter_minmax[]
-ifdef::VK_IMG_filter_cubic,VK_EXT_filter_cubic[]
-  * ename:VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_FILTER_CUBIC_BIT_EXT specifies
-    that sname:VkImage can: be used with a sampler that has either of
-    pname:magFilter or pname:minFilter set to ename:VK_FILTER_CUBIC_EXT, or
-    be the source image for a blit with pname:filter set to
-    ename:VK_FILTER_CUBIC_EXT.
-    This bit must: only be exposed for formats that also support the
-    ename:VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_BIT_KHR.
-    If the format being queried is a depth/stencil format, this only
-    specifies that the depth aspect is cubic filterable.
-endif::VK_IMG_filter_cubic,VK_EXT_filter_cubic[]
-ifdef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
-  * ename:VK_FORMAT_FEATURE_2_MIDPOINT_CHROMA_SAMPLES_BIT_KHR specifies that
-    an application can: define a <<samplers-YCbCr-conversion,sampler {YCbCr}
-    conversion>> using this format as a source, and that an image of this
-    format can: be used with a slink:VkSamplerYcbcrConversionCreateInfo
-    pname:xChromaOffset and/or pname:yChromaOffset of
-    ename:VK_CHROMA_LOCATION_MIDPOINT.
-    Otherwise both pname:xChromaOffset and pname:yChromaOffset must: be
-    ename:VK_CHROMA_LOCATION_COSITED_EVEN.
-    If a format does not incorporate chroma downsampling (it is not a
-    "`422`" or "`420`" format) but the implementation supports sampler
-    {YCbCr} conversion for this format, the implementation must: set
-    ename:VK_FORMAT_FEATURE_2_MIDPOINT_CHROMA_SAMPLES_BIT_KHR.
-  * ename:VK_FORMAT_FEATURE_2_COSITED_CHROMA_SAMPLES_BIT_KHR specifies that
-    an application can: define a <<samplers-YCbCr-conversion,sampler {YCbCr}
-    conversion>> using this format as a source, and that an image of this
-    format can: be used with a slink:VkSamplerYcbcrConversionCreateInfo
-    pname:xChromaOffset and/or pname:yChromaOffset of
-    ename:VK_CHROMA_LOCATION_COSITED_EVEN.
-    Otherwise both pname:xChromaOffset and pname:yChromaOffset must: be
-    ename:VK_CHROMA_LOCATION_MIDPOINT.
-    If neither ename:VK_FORMAT_FEATURE_2_COSITED_CHROMA_SAMPLES_BIT_KHR nor
-    ename:VK_FORMAT_FEATURE_2_MIDPOINT_CHROMA_SAMPLES_BIT_KHR is set, the
-    application must: not define a <<samplers-YCbCr-conversion,sampler
-    {YCbCr} conversion>> using this format as a source.
-  * ename:VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_YCBCR_CONVERSION_LINEAR_FILTER_BIT_KHR
-    specifies that an application can: define a
-    <<samplers-YCbCr-conversion,sampler {YCbCr} conversion>> using this
-    format as a source with pname:chromaFilter set to
-    ename:VK_FILTER_LINEAR.
-  * ename:VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_YCBCR_CONVERSION_SEPARATE_RECONSTRUCTION_FILTER_BIT_KHR
-    specifies that the format can have different chroma, min, and mag
-    filters.
-  * ename:VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_BIT_KHR
-    specifies that reconstruction is explicit, as described in
-    <<textures-chroma-reconstruction>>.
-    If this bit is not present, reconstruction is implicit by default.
-  * ename:VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_FORCEABLE_BIT_KHR
-    specifies that reconstruction can: be forcibly made explicit by setting
-    slink:VkSamplerYcbcrConversionCreateInfo::pname:forceExplicitReconstruction
-    to ename:VK_TRUE.
-    If the format being queried supports
-    ename:VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_BIT_KHR
-    it must: also support
-    ename:VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_FORCEABLE_BIT_KHR.
-  * ename:VK_FORMAT_FEATURE_2_DISJOINT_BIT_KHR specifies that a multi-planar
-    image can: have the ename:VK_IMAGE_CREATE_DISJOINT_BIT set during image
-    creation.
-    An implementation must: not set
-    ename:VK_FORMAT_FEATURE_2_DISJOINT_BIT_KHR for _single-plane formats_.
-endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
-ifdef::VK_EXT_fragment_density_map[]
-  * ename:VK_FORMAT_FEATURE_2_FRAGMENT_DENSITY_MAP_BIT_EXT specifies that an
-    image view can: be used as a
-    <<renderpass-fragmentdensitymapattachment,fragment density map
-    attachment>>.
-endif::VK_EXT_fragment_density_map[]
-ifdef::VK_KHR_fragment_shading_rate[]
-  * ename:VK_FORMAT_FEATURE_2_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR
-    specifies that an image view can: be used as a
-    <<primsrast-fragment-shading-rate-attachment, fragment shading rate
-    attachment>>.
-    An implementation must: not set this feature for formats with numeric
-    type other than etext:*UINT, or set it as a buffer feature.
-endif::VK_KHR_fragment_shading_rate[]
-ifdef::VK_KHR_video_decode_queue[]
-  * ename:VK_FORMAT_FEATURE_2_VIDEO_DECODE_OUTPUT_BIT_KHR specifies that an
-    image view with this format can: be used as an output for
-    <<video-decode-operations,video decode operations>>
-  * ename:VK_FORMAT_FEATURE_2_VIDEO_DECODE_DPB_BIT_KHR specifies that an
-    image view with this format can: be used as a DPB for
-    <<video-decode-operations,video decode operations>>
-endif::VK_KHR_video_decode_queue[]
-ifdef::VK_KHR_video_encode_queue[]
-  * ename:VK_FORMAT_FEATURE_2_VIDEO_ENCODE_INPUT_BIT_KHR specifies that an
-    image view with this format can: be used as an input to
-    <<video-encode-operations,video encode operations>>
-  * ename:VK_FORMAT_FEATURE_2_VIDEO_ENCODE_DPB_BIT_KHR specifies that an
-    image view with this format can: be used as a DPB for
-    <<video-encode-operations,video encode operations>>
-endif::VK_KHR_video_encode_queue[]
-  * ename:VK_FORMAT_FEATURE_2_STORAGE_READ_WITHOUT_FORMAT_BIT_KHR specifies
-    that image views created with this format can: be used as
-    <<descriptorsets-storageimage, storage images>> for read operations
-    without specifying a format.
-  * ename:VK_FORMAT_FEATURE_2_STORAGE_WRITE_WITHOUT_FORMAT_BIT_KHR specifies
-    that image views created with this format can: be used as
-    <<descriptorsets-storageimage, storage images>> for write operations
-    without specifying a format.
-  * ename:VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_DEPTH_COMPARISON_BIT_KHR
-    specifies that image views created with this format can: be used for
-    depth comparison performed by code:OpImage*Dref instructions.
-
-The following bits may: be set in pname:bufferFeatures, specifying that the
-features are supported by <<VkBuffer,buffers>> or <<VkBufferView,buffer
-views>> created with the queried
-flink:vkGetPhysicalDeviceFormatProperties2::pname:format:
-
-  * ename:VK_FORMAT_FEATURE_2_UNIFORM_TEXEL_BUFFER_BIT_KHR specifies that
-    the format can: be used to create a buffer view that can: be bound to a
-    ename:VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER descriptor.
-  * ename:VK_FORMAT_FEATURE_2_STORAGE_TEXEL_BUFFER_BIT_KHR specifies that
-    the format can: be used to create a buffer view that can: be bound to a
-    ename:VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER descriptor.
-  * ename:VK_FORMAT_FEATURE_2_STORAGE_TEXEL_BUFFER_ATOMIC_BIT_KHR specifies
-    that atomic operations are supported on
-    ename:VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER with this format.
-  * ename:VK_FORMAT_FEATURE_2_VERTEX_BUFFER_BIT_KHR specifies that the
-    format can: be used as a vertex attribute format
-    (sname:VkVertexInputAttributeDescription::pname:format).
-ifdef::VK_KHR_acceleration_structure[]
-  * ename:VK_FORMAT_FEATURE_2_ACCELERATION_STRUCTURE_VERTEX_BUFFER_BIT_KHR
-    specifies that the format can: be used as the vertex format when
-    creating an <<acceleration-structure,acceleration structure>>
-    (sname:VkAccelerationStructureGeometryTrianglesDataKHR::pname:vertexFormat).
-    This format can: also be used as the vertex format in host memory when
-    doing <<host-acceleration-structure, host acceleration structure>>
-    builds.
-endif::VK_KHR_acceleration_structure[]
---
-
-[open,refpage='VkFormatFeatureFlags2KHR',desc='Bitmask of VkFormatFeatureFlagBits2KHR',type='flags']
---
-include::{generated}/api/flags/VkFormatFeatureFlags2KHR.txt[]
-
-tname:VkFormatFeatureFlags2KHR is a bitmask type for setting a mask of zero
-or more elink:VkFormatFeatureFlagBits2KHR.
---
-endif::VK_KHR_format_feature_flags2[]
-endif::VK_VERSION_1_1,VK_KHR_get_physical_device_properties2[]
-
-
-[[potential-format-features]]
-=== Potential Format Features
-
-Some <<fundamentals-validusage,valid usage conditions>> depend on the format
-features supported by an slink:VkImage whose elink:VkImageTiling is unknown.
-In such cases the exact elink:VkFormatFeatureFlagBits supported by the
-slink:VkImage cannot be determined, so the valid usage conditions are
-expressed in terms of the _potential format features_ of the slink:VkImage
-format.
-
-The _potential format features_ of a elink:VkFormat are defined as follows:
-
-  * The union of elink:VkFormatFeatureFlagBits
-ifdef::VK_KHR_format_feature_flags2[]
-    and elink:VkFormatFeatureFlagBits2KHR,
-endif::VK_KHR_format_feature_flags2[]
-    supported when the elink:VkImageTiling is ename:VK_IMAGE_TILING_OPTIMAL
-ifdef::VK_EXT_image_drm_format_modifier[]
-    , ename:VK_IMAGE_TILING_DRM_FORMAT_MODIFIER_EXT,
-endif::VK_EXT_image_drm_format_modifier[]
-    or ename:VK_IMAGE_TILING_LINEAR
-ifdef::VK_ANDROID_external_memory_android_hardware_buffer[]
-    if elink:VkFormat is not ename:VK_FORMAT_UNDEFINED
-  * slink:VkAndroidHardwareBufferFormatPropertiesANDROID::pname:formatFeatures
-ifdef::VK_KHR_format_feature_flags2[]
-    and
-    slink:VkAndroidHardwareBufferFormatProperties2ANDROID::pname:formatFeatures
-endif::VK_KHR_format_feature_flags2[]
-    of a valid external format if elink:VkFormat is
-    ename:VK_FORMAT_UNDEFINED
-endif::VK_ANDROID_external_memory_android_hardware_buffer[]
-
-[[features-required-format-support]]
-== Required Format Support
-
-Implementations must: support at least the following set of features on the
-listed formats.
-For images, these features must: be supported for every elink:VkImageType
-(including arrayed and cube variants) unless otherwise noted.
-These features are supported on existing formats without needing to
-advertise an extension or needing to explicitly enable them.
-Support for additional functionality beyond the requirements listed here is
-queried using the flink:vkGetPhysicalDeviceFormatProperties command.
-
-[NOTE]
-.Note
-====
-Unless otherwise excluded below, the required formats are supported for all
-tlink:VkImageCreateFlags values as long as those flag values are otherwise
-allowed.
-====
-
-The following tables show which feature bits must: be supported for each
-format.
-ifdef::VK_VERSION_1_1,VK_KHR_maintenance1[]
-Formats that are required to support
-ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT must: also support
-ename:VK_FORMAT_FEATURE_TRANSFER_SRC_BIT and
-ename:VK_FORMAT_FEATURE_TRANSFER_DST_BIT.
-endif::VK_VERSION_1_1,VK_KHR_maintenance1[]
-
-.Key for format feature tables
-[width="70%",cols="1,10"]
-|====
-^|{sym1} | This feature must: be supported on the named format
-^|{sym2} | This feature must: be supported on at least some
-of the named formats, with more information in the table
-where the symbol appears
-^|{sym3} | This feature must: be supported with some caveats or
-preconditions, with more information in the table where the symbol appears
-|====
-
-.Feature bits in pname:optimalTilingFeatures
-[width="70%"]
-|====
-ifdef::VK_VERSION_1_1,VK_KHR_maintenance1[]
-|ename:VK_FORMAT_FEATURE_TRANSFER_SRC_BIT
-|ename:VK_FORMAT_FEATURE_TRANSFER_DST_BIT
-endif::VK_VERSION_1_1,VK_KHR_maintenance1[]
-|ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT
-|ename:VK_FORMAT_FEATURE_BLIT_SRC_BIT
-|ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT
-|ename:VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT
-|ename:VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT
-|ename:VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT
-|ename:VK_FORMAT_FEATURE_BLIT_DST_BIT
-|ename:VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT
-|ename:VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT
-ifdef::VK_VERSION_1_2,VK_EXT_sampler_filter_minmax[]
-|ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_MINMAX_BIT
-endif::VK_VERSION_1_2,VK_EXT_sampler_filter_minmax[]
-|====
-
-.Feature bits in pname:bufferFeatures
-[width="70%"]
-|====
-|ename:VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT
-|ename:VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT
-|ename:VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT
-|ename:VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT
-|====
-
-<<<
-
-[[formats-mandatory-features-subbyte]]
-.Mandatory format support: sub-byte components
-[width="100%",cols="12,^1,^1,^1,^1,^1,^1,^1,^1,^1,^1,^1,^1,^1",options="unbreakable"]
-|====
-13+>| ename:VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT .14+^.^| {downarrow}
-12+>| ename:VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT        .13+^.^| {downarrow}
-11+>| ename:VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT        .12+^.^| {downarrow}
-10+>| ename:VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT               .11+^.^| {downarrow}
-9+>| ename:VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT     .10+^.^| {downarrow}
-8+>| ename:VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT        .9+^.^| {downarrow}
-7+>| ename:VK_FORMAT_FEATURE_BLIT_DST_BIT                      .8+^.^| {downarrow}
-6+>| ename:VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT              .7+^.^| {downarrow}
-5+>| ename:VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT          .6+^.^| {downarrow}
-4+>| ename:VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT                 .5+^.^| {downarrow}
-3+>| ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT   .4+^.^| {downarrow}
-2+>| ename:VK_FORMAT_FEATURE_BLIT_SRC_BIT                      .3+^.^| {downarrow}
-1+>| ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT                 .2+^.^| {downarrow}
-s| Format
-| ename:VK_FORMAT_UNDEFINED                  |   |   |   |   |   |   |   |   |   |   |   |   |
-| ename:VK_FORMAT_R4G4_UNORM_PACK8           |   |   |   |   |   |   |   |   |   |   |   |   |
-| ename:VK_FORMAT_R4G4B4A4_UNORM_PACK16      |   |   |   |   |   |   |   |   |   |   |   |   |
-| ename:VK_FORMAT_B4G4R4A4_UNORM_PACK16      | {sym1} | {sym1} | {sym1} |   |   |   |   |   |   |   |   |   |
-| ename:VK_FORMAT_R5G6B5_UNORM_PACK16        | {sym1} | {sym1} | {sym1} |   |   | {sym1} | {sym1} | {sym1} |   |   |   |   |
-| ename:VK_FORMAT_B5G6R5_UNORM_PACK16        |   |   |   |   |   |   |   |   |   |   |   |   |
-| ename:VK_FORMAT_R5G5B5A1_UNORM_PACK16      |   |   |   |   |   |   |   |   |   |   |   |   |
-| ename:VK_FORMAT_B5G5R5A1_UNORM_PACK16      |   |   |   |   |   |   |   |   |   |   |   |   |
-| ename:VK_FORMAT_A1R5G5B5_UNORM_PACK16      | {sym1} | {sym1} | {sym1} |   |   | {sym1} | {sym1} | {sym1} |   |   |   |   |
-ifdef::VK_EXT_4444_formats[]
-| ename:VK_FORMAT_A4R4G4B4_UNORM_PACK16_EXT      | {sym2} | {sym2} | {sym2} |   |   |   |   |   |   |   |   |   |
-| ename:VK_FORMAT_A4B4G4R4_UNORM_PACK16_EXT      | {sym3} | {sym3} | {sym3} |   |   |   |   |   |   |   |   |   |
-14+| Format features marked {sym2} must: be supported for
-pname:optimalTilingFeatures if the sname:VkPhysicalDevice supports the
-slink:VkPhysicalDevice4444FormatsFeaturesEXT::pname:formatA4R4G4B4 feature.
-14+| Format features marked {sym3} must: be supported for
-pname:optimalTilingFeatures if the sname:VkPhysicalDevice supports the
-slink:VkPhysicalDevice4444FormatsFeaturesEXT::pname:formatA4B4G4R4 feature.
-endif::VK_EXT_4444_formats[]
-|====
-
-<<<
-
-[[formats-mandatory-features-2byte]]
-.Mandatory format support: 1-3 byte-sized components
-[width="100%",cols="12,^1,^1,^1,^1,^1,^1,^1,^1,^1,^1,^1,^1,^1",options="unbreakable"]
-|====
-13+>| ename:VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT .14+^.^| {downarrow}
-12+>| ename:VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT        .13+^.^| {downarrow}
-11+>| ename:VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT        .12+^.^| {downarrow}
-10+>| ename:VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT               .11+^.^| {downarrow}
-9+>| ename:VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT     .10+^.^| {downarrow}
-8+>| ename:VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT        .9+^.^| {downarrow}
-7+>| ename:VK_FORMAT_FEATURE_BLIT_DST_BIT                      .8+^.^| {downarrow}
-6+>| ename:VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT              .7+^.^| {downarrow}
-5+>| ename:VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT          .6+^.^| {downarrow}
-4+>| ename:VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT                 .5+^.^| {downarrow}
-3+>| ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT   .4+^.^| {downarrow}
-2+>| ename:VK_FORMAT_FEATURE_BLIT_SRC_BIT                      .3+^.^| {downarrow}
-1+>| ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT                 .2+^.^| {downarrow}
-s| Format
-| ename:VK_FORMAT_R8_UNORM                   | {sym1} | {sym1} | {sym1} | {sym3} |   | {sym1} | {sym1} | {sym1} |   | {sym1} | {sym1} |   |
-| ename:VK_FORMAT_R8_SNORM                   | {sym1} | {sym1} | {sym1} | {sym3} |   |        |        |        |   | {sym1} | {sym1} |   |
-| ename:VK_FORMAT_R8_USCALED                 |        |        |        |        |   |        |        |        |   |        |        |   |
-| ename:VK_FORMAT_R8_SSCALED                 |        |        |        |        |   |        |        |        |   |        |        |   |
-| ename:VK_FORMAT_R8_UINT                    | {sym1} | {sym1} |        | {sym3} |   | {sym1} | {sym1} |        |   | {sym1} | {sym1} |   |
-| ename:VK_FORMAT_R8_SINT                    | {sym1} | {sym1} |        | {sym3} |   | {sym1} | {sym1} |        |   | {sym1} | {sym1} |   |
-| ename:VK_FORMAT_R8_SRGB                    |        |        |        |        |   |        |        |        |   |        |        |   |
-| ename:VK_FORMAT_R8G8_UNORM                 | {sym1} | {sym1} | {sym1} | {sym3} |   | {sym1} | {sym1} | {sym1} |   | {sym1} | {sym1} |   |
-| ename:VK_FORMAT_R8G8_SNORM                 | {sym1} | {sym1} | {sym1} | {sym3} |   |        |        |        |   | {sym1} | {sym1} |   |
-| ename:VK_FORMAT_R8G8_USCALED               |        |        |        |        |   |        |        |        |   |        |        |   |
-| ename:VK_FORMAT_R8G8_SSCALED               |        |        |        |        |   |        |        |        |   |        |        |   |
-| ename:VK_FORMAT_R8G8_UINT                  | {sym1} | {sym1} |        | {sym3} |   | {sym1} | {sym1} |        |   | {sym1} | {sym1} |   |
-| ename:VK_FORMAT_R8G8_SINT                  | {sym1} | {sym1} |        | {sym3} |   | {sym1} | {sym1} |        |   | {sym1} | {sym1} |   |
-| ename:VK_FORMAT_R8G8_SRGB                  |        |        |        |        |   |        |        |        |   |        |        |   |
-| ename:VK_FORMAT_R8G8B8_UNORM               |        |        |        |        |   |        |        |        |   |        |        |   |
-| ename:VK_FORMAT_R8G8B8_SNORM               |        |        |        |        |   |        |        |        |   |        |        |   |
-| ename:VK_FORMAT_R8G8B8_USCALED             |        |        |        |        |   |        |        |        |   |        |        |   |
-| ename:VK_FORMAT_R8G8B8_SSCALED             |        |        |        |        |   |        |        |        |   |        |        |   |
-| ename:VK_FORMAT_R8G8B8_UINT                |        |        |        |        |   |        |        |        |   |        |        |   |
-| ename:VK_FORMAT_R8G8B8_SINT                |        |        |        |        |   |        |        |        |   |        |        |   |
-| ename:VK_FORMAT_R8G8B8_SRGB                |        |        |        |        |   |        |        |        |   |        |        |   |
-| ename:VK_FORMAT_B8G8R8_UNORM               |        |        |        |        |   |        |        |        |   |        |        |   |
-| ename:VK_FORMAT_B8G8R8_SNORM               |        |        |        |        |   |        |        |        |   |        |        |   |
-| ename:VK_FORMAT_B8G8R8_USCALED             |        |        |        |        |   |        |        |        |   |        |        |   |
-| ename:VK_FORMAT_B8G8R8_SSCALED             |        |        |        |        |   |        |        |        |   |        |        |   |
-| ename:VK_FORMAT_B8G8R8_UINT                |        |        |        |        |   |        |        |        |   |        |        |   |
-| ename:VK_FORMAT_B8G8R8_SINT                |        |        |        |        |   |        |        |        |   |        |        |   |
-| ename:VK_FORMAT_B8G8R8_SRGB                |        |        |        |        |   |        |        |        |   |        |        |   |
-14+| Format features marked with {sym3} must: be supported for
-pname:optimalTilingFeatures if the sname:VkPhysicalDevice supports the
-<<features-shaderStorageImageExtendedFormats,
-pname:shaderStorageImageExtendedFormats>> feature.
-|====
-
-<<<
-
-[[formats-mandatory-features-4byte]]
-.Mandatory format support: 4 byte-sized components
-[width="100%",cols="12,^1,^1,^1,^1,^1,^1,^1,^1,^1,^1,^1,^1,^1",options="unbreakable"]
-|====
-13+>| ename:VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT .14+^.^| {downarrow}
-12+>| ename:VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT        .13+^.^| {downarrow}
-11+>| ename:VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT        .12+^.^| {downarrow}
-10+>| ename:VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT               .11+^.^| {downarrow}
-9+>| ename:VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT     .10+^.^| {downarrow}
-8+>| ename:VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT        .9+^.^| {downarrow}
-7+>| ename:VK_FORMAT_FEATURE_BLIT_DST_BIT                      .8+^.^| {downarrow}
-6+>| ename:VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT              .7+^.^| {downarrow}
-5+>| ename:VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT          .6+^.^| {downarrow}
-4+>| ename:VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT                 .5+^.^| {downarrow}
-3+>| ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT   .4+^.^| {downarrow}
-2+>| ename:VK_FORMAT_FEATURE_BLIT_SRC_BIT                      .3+^.^| {downarrow}
-1+>| ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT                 .2+^.^| {downarrow}
-s| Format
-| ename:VK_FORMAT_R8G8B8A8_UNORM             | {sym1} | {sym1} | {sym1} | {sym1} |   | {sym1} | {sym1} | {sym1} |   | {sym1} | {sym1} | {sym1} |
-| ename:VK_FORMAT_R8G8B8A8_SNORM             | {sym1} | {sym1} | {sym1} | {sym1} |   |   |   |   |   | {sym1} | {sym1} | {sym1} |
-| ename:VK_FORMAT_R8G8B8A8_USCALED           |   |   |   |   |   |   |   |   |   |   |   |   |
-| ename:VK_FORMAT_R8G8B8A8_SSCALED           |   |   |   |   |   |   |   |   |   |   |   |   |
-| ename:VK_FORMAT_R8G8B8A8_UINT              | {sym1} | {sym1} |   | {sym1} |   | {sym1} | {sym1} |   |   | {sym1} | {sym1} | {sym1} |
-| ename:VK_FORMAT_R8G8B8A8_SINT              | {sym1} | {sym1} |   | {sym1} |   | {sym1} | {sym1} |   |   | {sym1} | {sym1} | {sym1} |
-| ename:VK_FORMAT_R8G8B8A8_SRGB              | {sym1} | {sym1} | {sym1} |   |   | {sym1} | {sym1} | {sym1} |   |   |   |   |
-| ename:VK_FORMAT_B8G8R8A8_UNORM             | {sym1} | {sym1} | {sym1} |   |   | {sym1} | {sym1} | {sym1} |   | {sym1} | {sym1} |   |
-| ename:VK_FORMAT_B8G8R8A8_SNORM             |   |   |   |   |   |   |   |   |   |   |   |   |
-| ename:VK_FORMAT_B8G8R8A8_USCALED           |   |   |   |   |   |   |   |   |   |   |   |   |
-| ename:VK_FORMAT_B8G8R8A8_SSCALED           |   |   |   |   |   |   |   |   |   |   |   |   |
-| ename:VK_FORMAT_B8G8R8A8_UINT              |   |   |   |   |   |   |   |   |   |   |   |   |
-| ename:VK_FORMAT_B8G8R8A8_SINT              |   |   |   |   |   |   |   |   |   |   |   |   |
-| ename:VK_FORMAT_B8G8R8A8_SRGB              | {sym1} | {sym1} | {sym1} |   |   | {sym1} | {sym1} | {sym1} |   |   |   |   |
-| ename:VK_FORMAT_A8B8G8R8_UNORM_PACK32      | {sym1} | {sym1} | {sym1} |   |   | {sym1} | {sym1} | {sym1} |   | {sym1} | {sym1} | {sym1} |
-| ename:VK_FORMAT_A8B8G8R8_SNORM_PACK32      | {sym1} | {sym1} | {sym1} |   |   |   |   |   |   | {sym1} | {sym1} | {sym1} |
-| ename:VK_FORMAT_A8B8G8R8_USCALED_PACK32    |   |   |   |   |   |   |   |   |   |   |   |   |
-| ename:VK_FORMAT_A8B8G8R8_SSCALED_PACK32    |   |   |   |   |   |   |   |   |   |   |   |   |
-| ename:VK_FORMAT_A8B8G8R8_UINT_PACK32       | {sym1} | {sym1} |   |   |   | {sym1} | {sym1} |   |   | {sym1} | {sym1} | {sym1} |
-| ename:VK_FORMAT_A8B8G8R8_SINT_PACK32       | {sym1} | {sym1} |   |   |   | {sym1} | {sym1} |   |   | {sym1} | {sym1} | {sym1} |
-| ename:VK_FORMAT_A8B8G8R8_SRGB_PACK32       | {sym1} | {sym1} | {sym1} |   |   | {sym1} | {sym1} | {sym1} |   |   |   |   |
-|====
-
-<<<
-
-[[formats-mandatory-features-10bit]]
-.Mandatory format support: 10- and 12-bit components
-[width="100%",cols="12,^1,^1,^1,^1,^1,^1,^1,^1,^1,^1,^1,^1,^1",options="unbreakable"]
-|====
-13+>| ename:VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT .14+^.^| {downarrow}
-12+>| ename:VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT        .13+^.^| {downarrow}
-11+>| ename:VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT        .12+^.^| {downarrow}
-10+>| ename:VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT               .11+^.^| {downarrow}
-9+>| ename:VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT     .10+^.^| {downarrow}
-8+>| ename:VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT        .9+^.^| {downarrow}
-7+>| ename:VK_FORMAT_FEATURE_BLIT_DST_BIT                      .8+^.^| {downarrow}
-6+>| ename:VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT              .7+^.^| {downarrow}
-5+>| ename:VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT          .6+^.^| {downarrow}
-4+>| ename:VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT                 .5+^.^| {downarrow}
-3+>| ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT   .4+^.^| {downarrow}
-2+>| ename:VK_FORMAT_FEATURE_BLIT_SRC_BIT                      .3+^.^| {downarrow}
-1+>| ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT                 .2+^.^| {downarrow}
-s| Format
-| ename:VK_FORMAT_A2R10G10B10_UNORM_PACK32   |        |        |        |        |   |        |        |        |   |        |        |   |
-| ename:VK_FORMAT_A2R10G10B10_SNORM_PACK32   |        |        |        |        |   |        |        |        |   |        |        |   |
-| ename:VK_FORMAT_A2R10G10B10_USCALED_PACK32 |        |        |        |        |   |        |        |        |   |        |        |   |
-| ename:VK_FORMAT_A2R10G10B10_SSCALED_PACK32 |        |        |        |        |   |        |        |        |   |        |        |   |
-| ename:VK_FORMAT_A2R10G10B10_UINT_PACK32    |        |        |        |        |   |        |        |        |   |        |        |   |
-| ename:VK_FORMAT_A2R10G10B10_SINT_PACK32    |        |        |        |        |   |        |        |        |   |        |        |   |
-| ename:VK_FORMAT_A2B10G10R10_UNORM_PACK32   | {sym1} | {sym1} | {sym1} | {sym3} |   | {sym1} | {sym1} | {sym1} |   | {sym1} | {sym1} |   |
-| ename:VK_FORMAT_A2B10G10R10_SNORM_PACK32   |        |        |        |        |   |        |        |        |   |        |        |   |
-| ename:VK_FORMAT_A2B10G10R10_USCALED_PACK32 |        |        |        |        |   |        |        |        |   |        |        |   |
-| ename:VK_FORMAT_A2B10G10R10_SSCALED_PACK32 |        |        |        |        |   |        |        |        |   |        |        |   |
-| ename:VK_FORMAT_A2B10G10R10_UINT_PACK32    | {sym1} | {sym1} |        | {sym3} |   | {sym1} | {sym1} |        |   |        | {sym1} |   |
-| ename:VK_FORMAT_A2B10G10R10_SINT_PACK32    |        |        |        |        |   |        |        |        |   |        |        |   |
-ifdef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
-| ename:VK_FORMAT_R10X6_UNORM_PACK16         |        |        |        |        |   |        |        |        |   |        |        |   |
-| ename:VK_FORMAT_R10X6G10X6_UNORM_2PACK16   |        |        |        |        |   |        |        |        |   |        |        |   |
-| ename:VK_FORMAT_R12X4_UNORM_PACK16         |        |        |        |        |   |        |        |        |   |        |        |   |
-| ename:VK_FORMAT_R12X4G12X4_UNORM_2PACK16   |        |        |        |        |   |        |        |        |   |        |        |   |
-endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
-14+| Format features marked with {sym3} must: be supported for
-pname:optimalTilingFeatures if the sname:VkPhysicalDevice supports the
-<<features-shaderStorageImageExtendedFormats,
-pname:shaderStorageImageExtendedFormats>> feature.
-|====
-
-<<<
-
-[[formats-mandatory-features-16bit]]
-.Mandatory format support: 16-bit components
-[width="100%",cols="12,^1,^1,^1,^1,^1,^1,^1,^1,^1,^1,^1,^1,^1",options="unbreakable"]
-|====
-13+>| ename:VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT .14+^.^| {downarrow}
-12+>| ename:VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT        .13+^.^| {downarrow}
-11+>| ename:VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT        .12+^.^| {downarrow}
-10+>| ename:VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT               .11+^.^| {downarrow}
-9+>| ename:VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT     .10+^.^| {downarrow}
-8+>| ename:VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT        .9+^.^| {downarrow}
-7+>| ename:VK_FORMAT_FEATURE_BLIT_DST_BIT                      .8+^.^| {downarrow}
-6+>| ename:VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT              .7+^.^| {downarrow}
-5+>| ename:VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT          .6+^.^| {downarrow}
-4+>| ename:VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT                 .5+^.^| {downarrow}
-3+>| ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT   .4+^.^| {downarrow}
-2+>| ename:VK_FORMAT_FEATURE_BLIT_SRC_BIT                      .3+^.^| {downarrow}
-1+>| ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT                 .2+^.^| {downarrow}
-s| Format
-| ename:VK_FORMAT_R16_UNORM                  |        |        |        | {sym3} |   |        |        |        |   | {sym1} |        |        |
-| ename:VK_FORMAT_R16_SNORM                  |        |        |        | {sym3} |   |        |        |        |   | {sym1} |        |        |
-| ename:VK_FORMAT_R16_USCALED                |        |        |        |        |   |        |        |        |   |        |        |        |
-| ename:VK_FORMAT_R16_SSCALED                |        |        |        |        |   |        |        |        |   |        |        |        |
-| ename:VK_FORMAT_R16_UINT                   | {sym1} | {sym1} |        | {sym3} |   | {sym1} | {sym1} |        |   | {sym1} | {sym1} |        |
-| ename:VK_FORMAT_R16_SINT                   | {sym1} | {sym1} |        | {sym3} |   | {sym1} | {sym1} |        |   | {sym1} | {sym1} |        |
-| ename:VK_FORMAT_R16_SFLOAT                 | {sym1} | {sym1} | {sym1} | {sym3} |   | {sym1} | {sym1} | {sym1} |   | {sym1} | {sym1} |        |
-| ename:VK_FORMAT_R16G16_UNORM               |        |        |        | {sym3} |   |        |        |        |   | {sym1} |        |        |
-| ename:VK_FORMAT_R16G16_SNORM               |        |        |        | {sym3} |   |        |        |        |   | {sym1} |        |        |
-| ename:VK_FORMAT_R16G16_USCALED             |        |        |        |        |   |        |        |        |   |        |        |        |
-| ename:VK_FORMAT_R16G16_SSCALED             |        |        |        |        |   |        |        |        |   |        |        |        |
-| ename:VK_FORMAT_R16G16_UINT                | {sym1} | {sym1} |        | {sym3} |   | {sym1} | {sym1} |        |   | {sym1} | {sym1} |        |
-| ename:VK_FORMAT_R16G16_SINT                | {sym1} | {sym1} |        | {sym3} |   | {sym1} | {sym1} |        |   | {sym1} | {sym1} |        |
-| ename:VK_FORMAT_R16G16_SFLOAT              | {sym1} | {sym1} | {sym1} | {sym3} |   | {sym1} | {sym1} | {sym1} |   | {sym1} | {sym1} |        |
-| ename:VK_FORMAT_R16G16B16_UNORM            |        |        |        |        |   |        |        |        |   |        |        |        |
-| ename:VK_FORMAT_R16G16B16_SNORM            |        |        |        |        |   |        |        |        |   |        |        |        |
-| ename:VK_FORMAT_R16G16B16_USCALED          |        |        |        |        |   |        |        |        |   |        |        |        |
-| ename:VK_FORMAT_R16G16B16_SSCALED          |        |        |        |        |   |        |        |        |   |        |        |        |
-| ename:VK_FORMAT_R16G16B16_UINT             |        |        |        |        |   |        |        |        |   |        |        |        |
-| ename:VK_FORMAT_R16G16B16_SINT             |        |        |        |        |   |        |        |        |   |        |        |        |
-| ename:VK_FORMAT_R16G16B16_SFLOAT           |        |        |        |        |   |        |        |        |   |        |        |        |
-| ename:VK_FORMAT_R16G16B16A16_UNORM         |        |        |        | {sym3} |   |        |        |        |   | {sym1} |        |        |
-| ename:VK_FORMAT_R16G16B16A16_SNORM         |        |        |        | {sym3} |   |        |        |        |   | {sym1} |        |        |
-| ename:VK_FORMAT_R16G16B16A16_USCALED       |        |        |        |        |   |        |        |        |   |        |        |        |
-| ename:VK_FORMAT_R16G16B16A16_SSCALED       |        |        |        |        |   |        |        |        |   |        |        |        |
-| ename:VK_FORMAT_R16G16B16A16_UINT          | {sym1} | {sym1} |        | {sym1} |   | {sym1} | {sym1} |        |   | {sym1} | {sym1} | {sym1} |
-| ename:VK_FORMAT_R16G16B16A16_SINT          | {sym1} | {sym1} |        | {sym1} |   | {sym1} | {sym1} |        |   | {sym1} | {sym1} | {sym1} |
-| ename:VK_FORMAT_R16G16B16A16_SFLOAT        | {sym1} | {sym1} | {sym1} | {sym1} |   | {sym1} | {sym1} | {sym1} |   | {sym1} | {sym1} | {sym1} |
-14+| Format features marked with {sym3} must: be supported for
-pname:optimalTilingFeatures if the sname:VkPhysicalDevice supports the
-<<features-shaderStorageImageExtendedFormats,
-pname:shaderStorageImageExtendedFormats>> feature.
-|====
-
-<<<
-
-[[formats-mandatory-features-32bit]]
-.Mandatory format support: 32-bit components
-[width="100%",cols="12,^1,^1,^1,^1,^1,^1,^1,^1,^1,^1,^1,^1,^1",options="unbreakable"]
-|====
-13+>| ename:VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT .14+^.^| {downarrow}
-12+>| ename:VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT        .13+^.^| {downarrow}
-11+>| ename:VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT        .12+^.^| {downarrow}
-10+>| ename:VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT               .11+^.^| {downarrow}
-9+>| ename:VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT     .10+^.^| {downarrow}
-8+>| ename:VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT        .9+^.^| {downarrow}
-7+>| ename:VK_FORMAT_FEATURE_BLIT_DST_BIT                      .8+^.^| {downarrow}
-6+>| ename:VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT              .7+^.^| {downarrow}
-5+>| ename:VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT          .6+^.^| {downarrow}
-4+>| ename:VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT                 .5+^.^| {downarrow}
-3+>| ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT   .4+^.^| {downarrow}
-2+>| ename:VK_FORMAT_FEATURE_BLIT_SRC_BIT                      .3+^.^| {downarrow}
-1+>| ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT                 .2+^.^| {downarrow}
-s| Format
-| ename:VK_FORMAT_R32_UINT                   | {sym1} | {sym1} |   | {sym1} | {sym1} | {sym1} | {sym1} |   |   | {sym1} | {sym1} | {sym1} | {sym1}
-| ename:VK_FORMAT_R32_SINT                   | {sym1} | {sym1} |   | {sym1} | {sym1} | {sym1} | {sym1} |   |   | {sym1} | {sym1} | {sym1} | {sym1}
-| ename:VK_FORMAT_R32_SFLOAT                 | {sym1} | {sym1} |   | {sym1} |   | {sym1} | {sym1} |   |   | {sym1} | {sym1} | {sym1} |
-| ename:VK_FORMAT_R32G32_UINT                | {sym1} | {sym1} |   | {sym1} |   | {sym1} | {sym1} |   |   | {sym1} | {sym1} | {sym1} |
-| ename:VK_FORMAT_R32G32_SINT                | {sym1} | {sym1} |   | {sym1} |   | {sym1} | {sym1} |   |   | {sym1} | {sym1} | {sym1} |
-| ename:VK_FORMAT_R32G32_SFLOAT              | {sym1} | {sym1} |   | {sym1} |   | {sym1} | {sym1} |   |   | {sym1} | {sym1} | {sym1} |
-| ename:VK_FORMAT_R32G32B32_UINT             |   |   |   |   |   |   |   |   |   | {sym1} |   |   |
-| ename:VK_FORMAT_R32G32B32_SINT             |   |   |   |   |   |   |   |   |   | {sym1} |   |   |
-| ename:VK_FORMAT_R32G32B32_SFLOAT           |   |   |   |   |   |   |   |   |   | {sym1} |   |   |
-| ename:VK_FORMAT_R32G32B32A32_UINT          | {sym1} | {sym1} |   | {sym1} |   | {sym1} | {sym1} |   |   | {sym1} | {sym1} | {sym1} |
-| ename:VK_FORMAT_R32G32B32A32_SINT          | {sym1} | {sym1} |   | {sym1} |   | {sym1} | {sym1} |   |   | {sym1} | {sym1} | {sym1} |
-| ename:VK_FORMAT_R32G32B32A32_SFLOAT        | {sym1} | {sym1} |   | {sym1} |   | {sym1} | {sym1} |   |   | {sym1} | {sym1} | {sym1} |
-ifdef::VK_EXT_shader_atomic_float[]
-14+|
-If the <<features-shaderImageFloat32Atomics, pname:shaderImageFloat32Atomics>>
-or the <<features-shaderImageFloat32AtomicAdd, pname:shaderImageFloat32AtomicAdd>>
-ifdef::VK_EXT_shader_atomic_float2[]
-or the <<features-shaderImageFloat32AtomicMinMax, pname:shaderImageFloat32AtomicMinMax>>
-endif::VK_EXT_shader_atomic_float2[]
-feature is supported, ename:VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT and
-ename:VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT must: be advertised in
-pname:optimalTilingFeatures for ename:VK_FORMAT_R32_SFLOAT.
-endif::VK_EXT_shader_atomic_float[]
-|====
-
-<<<
-
-[[formats-mandatory-features-64bit]]
-.Mandatory format support: 64-bit/uneven components
-[width="100%",cols="12,^1,^1,^1,^1,^1,^1,^1,^1,^1,^1,^1,^1,^1",options="unbreakable"]
-|====
-13+>| ename:VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT .14+^.^| {downarrow}
-12+>| ename:VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT        .13+^.^| {downarrow}
-11+>| ename:VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT        .12+^.^| {downarrow}
-10+>| ename:VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT               .11+^.^| {downarrow}
-9+>| ename:VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT     .10+^.^| {downarrow}
-8+>| ename:VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT        .9+^.^| {downarrow}
-7+>| ename:VK_FORMAT_FEATURE_BLIT_DST_BIT                      .8+^.^| {downarrow}
-6+>| ename:VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT              .7+^.^| {downarrow}
-5+>| ename:VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT          .6+^.^| {downarrow}
-4+>| ename:VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT                 .5+^.^| {downarrow}
-3+>| ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT   .4+^.^| {downarrow}
-2+>| ename:VK_FORMAT_FEATURE_BLIT_SRC_BIT                      .3+^.^| {downarrow}
-1+>| ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT                 .2+^.^| {downarrow}
-s| Format
-| ename:VK_FORMAT_R64_UINT                   |        |        |
-|
-ifdef::VK_EXT_shader_image_atomic_int64[{sym2}]
-|
-ifdef::VK_EXT_shader_image_atomic_int64[{sym2}]
-                                                                                     |   |   |   |   |   |        |   |
-| ename:VK_FORMAT_R64_SINT                   |        |        |
-|
-ifdef::VK_EXT_shader_image_atomic_int64[{sym2}]
-|
-ifdef::VK_EXT_shader_image_atomic_int64[{sym2}]
-                                                                                     |   |   |   |   |   |        |   |
-| ename:VK_FORMAT_R64_SFLOAT                 |        |        |        |        |   |   |   |   |   |   |        |   |
-| ename:VK_FORMAT_R64G64_UINT                |        |        |        |        |   |   |   |   |   |   |        |   |
-| ename:VK_FORMAT_R64G64_SINT                |        |        |        |        |   |   |   |   |   |   |        |   |
-| ename:VK_FORMAT_R64G64_SFLOAT              |        |        |        |        |   |   |   |   |   |   |        |   |
-| ename:VK_FORMAT_R64G64B64_UINT             |        |        |        |        |   |   |   |   |   |   |        |   |
-| ename:VK_FORMAT_R64G64B64_SINT             |        |        |        |        |   |   |   |   |   |   |        |   |
-| ename:VK_FORMAT_R64G64B64_SFLOAT           |        |        |        |        |   |   |   |   |   |   |        |   |
-| ename:VK_FORMAT_R64G64B64A64_UINT          |        |        |        |        |   |   |   |   |   |   |        |   |
-| ename:VK_FORMAT_R64G64B64A64_SINT          |        |        |        |        |   |   |   |   |   |   |        |   |
-| ename:VK_FORMAT_R64G64B64A64_SFLOAT        |        |        |        |        |   |   |   |   |   |   |        |   |
-| ename:VK_FORMAT_B10G11R11_UFLOAT_PACK32    | {sym1} | {sym1} | {sym1} | {sym3} |   |   |   |   |   |   | {sym1} |   |
-| ename:VK_FORMAT_E5B9G9R9_UFLOAT_PACK32     | {sym1} | {sym1} | {sym1} |        |   |   |   |   |   |   |        |   |
-14+| Format features marked with {sym3} must: be supported for
-pname:optimalTilingFeatures if the sname:VkPhysicalDevice supports the
-<<features-shaderStorageImageExtendedFormats,
-pname:shaderStorageImageExtendedFormats>> feature.
-ifdef::VK_EXT_shader_image_atomic_int64[]
-14+|
-If the <<features-shaderImageInt64Atomics, pname:shaderImageInt64Atomics>>
-feature is supported, ename:VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT and
-ename:VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT must: be advertised in
-pname:optimalTilingFeatures for both ename:VK_FORMAT_R64_UINT and
-ename:VK_FORMAT_R64_SINT.
-endif::VK_EXT_shader_image_atomic_int64[]
-|====
-
-<<<
-
-[[formats-mandatory-features-depth-stencil]]
-.Mandatory format support: depth/stencil with `VkImageType` ename:VK_IMAGE_TYPE_2D
-[width="100%",cols="12,^1,^1,^1,^1,^1,^1,^1,^1,^1,^1,^1,^1,^1",options="unbreakable"]
-|====
-13+>| ename:VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT .14+^.^| {downarrow}
-12+>| ename:VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT        .13+^.^| {downarrow}
-11+>| ename:VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT        .12+^.^| {downarrow}
-10+>| ename:VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT               .11+^.^| {downarrow}
-9+>| ename:VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT     .10+^.^| {downarrow}
-8+>| ename:VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT        .9+^.^| {downarrow}
-7+>| ename:VK_FORMAT_FEATURE_BLIT_DST_BIT                      .8+^.^| {downarrow}
-6+>| ename:VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT              .7+^.^| {downarrow}
-5+>| ename:VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT          .6+^.^| {downarrow}
-4+>| ename:VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT                 .5+^.^| {downarrow}
-3+>| ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT   .4+^.^| {downarrow}
-2+>| ename:VK_FORMAT_FEATURE_BLIT_SRC_BIT                      .3+^.^| {downarrow}
-1+>| ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT                 .2+^.^| {downarrow}
-s| Format
-| ename:VK_FORMAT_D16_UNORM                  | {sym1} | {sym1} |   |   |   |   |   |   | {sym1} |   |   |   |
-| ename:VK_FORMAT_X8_D24_UNORM_PACK32        |   |   |   |   |   |   |   |   | {sym2} |   |   |   |
-| ename:VK_FORMAT_D32_SFLOAT                 | {sym1} | {sym1} |   |   |   |   |   |   | {sym2} |   |   |   |
-| ename:VK_FORMAT_S8_UINT                    |   |   |   |   |   |   |   |   |   |   |   |   |
-| ename:VK_FORMAT_D16_UNORM_S8_UINT          |   |   |   |   |   |   |   |   |   |   |   |   |
-| ename:VK_FORMAT_D24_UNORM_S8_UINT          |   |   |   |   |   |   |   |   | {sym2} |   |   |   |
-| ename:VK_FORMAT_D32_SFLOAT_S8_UINT         |   |   |   |   |   |   |   |   | {sym2} |   |   |   |
-14+| ename:VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT feature must: be
-supported for at least one of ename:VK_FORMAT_X8_D24_UNORM_PACK32 and
-ename:VK_FORMAT_D32_SFLOAT, and must: be supported for at least one of
-ename:VK_FORMAT_D24_UNORM_S8_UINT and ename:VK_FORMAT_D32_SFLOAT_S8_UINT.
-|====
-
-<<<
-
-[[formats-mandatory-features-bcn]]
-.Mandatory format support: BC compressed formats with `VkImageType` ename:VK_IMAGE_TYPE_2D and ename:VK_IMAGE_TYPE_3D
-[width="100%",cols="12,^1,^1,^1,^1,^1,^1,^1,^1,^1,^1,^1,^1,^1",options="unbreakable"]
-|====
-13+>| ename:VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT .14+^.^| {downarrow}
-12+>| ename:VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT        .13+^.^| {downarrow}
-11+>| ename:VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT        .12+^.^| {downarrow}
-10+>| ename:VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT               .11+^.^| {downarrow}
-9+>| ename:VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT     .10+^.^| {downarrow}
-8+>| ename:VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT        .9+^.^| {downarrow}
-7+>| ename:VK_FORMAT_FEATURE_BLIT_DST_BIT                      .8+^.^| {downarrow}
-6+>| ename:VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT              .7+^.^| {downarrow}
-5+>| ename:VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT          .6+^.^| {downarrow}
-4+>| ename:VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT                 .5+^.^| {downarrow}
-3+>| ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT   .4+^.^| {downarrow}
-2+>| ename:VK_FORMAT_FEATURE_BLIT_SRC_BIT                      .3+^.^| {downarrow}
-1+>| ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT                 .2+^.^| {downarrow}
-s| Format
-| ename:VK_FORMAT_BC1_RGB_UNORM_BLOCK        | {sym2} | {sym2} | {sym2} |   |   |   |   |   |   |   |   |   |
-| ename:VK_FORMAT_BC1_RGB_SRGB_BLOCK         | {sym2} | {sym2} | {sym2} |   |   |   |   |   |   |   |   |   |
-| ename:VK_FORMAT_BC1_RGBA_UNORM_BLOCK       | {sym2} | {sym2} | {sym2} |   |   |   |   |   |   |   |   |   |
-| ename:VK_FORMAT_BC1_RGBA_SRGB_BLOCK        | {sym2} | {sym2} | {sym2} |   |   |   |   |   |   |   |   |   |
-| ename:VK_FORMAT_BC2_UNORM_BLOCK            | {sym2} | {sym2} | {sym2} |   |   |   |   |   |   |   |   |   |
-| ename:VK_FORMAT_BC2_SRGB_BLOCK             | {sym2} | {sym2} | {sym2} |   |   |   |   |   |   |   |   |   |
-| ename:VK_FORMAT_BC3_UNORM_BLOCK            | {sym2} | {sym2} | {sym2} |   |   |   |   |   |   |   |   |   |
-| ename:VK_FORMAT_BC3_SRGB_BLOCK             | {sym2} | {sym2} | {sym2} |   |   |   |   |   |   |   |   |   |
-| ename:VK_FORMAT_BC4_UNORM_BLOCK            | {sym2} | {sym2} | {sym2} |   |   |   |   |   |   |   |   |   |
-| ename:VK_FORMAT_BC4_SNORM_BLOCK            | {sym2} | {sym2} | {sym2} |   |   |   |   |   |   |   |   |   |
-| ename:VK_FORMAT_BC5_UNORM_BLOCK            | {sym2} | {sym2} | {sym2} |   |   |   |   |   |   |   |   |   |
-| ename:VK_FORMAT_BC5_SNORM_BLOCK            | {sym2} | {sym2} | {sym2} |   |   |   |   |   |   |   |   |   |
-| ename:VK_FORMAT_BC6H_UFLOAT_BLOCK          | {sym2} | {sym2} | {sym2} |   |   |   |   |   |   |   |   |   |
-| ename:VK_FORMAT_BC6H_SFLOAT_BLOCK          | {sym2} | {sym2} | {sym2} |   |   |   |   |   |   |   |   |   |
-| ename:VK_FORMAT_BC7_UNORM_BLOCK            | {sym2} | {sym2} | {sym2} |   |   |   |   |   |   |   |   |   |
-| ename:VK_FORMAT_BC7_SRGB_BLOCK             | {sym2} | {sym2} | {sym2} |   |   |   |   |   |   |   |   |   |
-14+| The ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT,
-ename:VK_FORMAT_FEATURE_BLIT_SRC_BIT and
-ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT features must: be
-supported in pname:optimalTilingFeatures for all the formats in at least
-one of: this table, <<formats-mandatory-features-etc>>, or
-<<formats-mandatory-features-astc>>.
-|====
-
-<<<
-
-[[formats-mandatory-features-etc]]
-.Mandatory format support: ETC2 and EAC compressed formats with `VkImageType` ename:VK_IMAGE_TYPE_2D
-[width="100%",cols="12,^1,^1,^1,^1,^1,^1,^1,^1,^1,^1,^1,^1,^1",options="unbreakable"]
-|====
-13+>| ename:VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT .14+^.^| {downarrow}
-12+>| ename:VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT        .13+^.^| {downarrow}
-11+>| ename:VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT        .12+^.^| {downarrow}
-10+>| ename:VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT               .11+^.^| {downarrow}
-9+>| ename:VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT     .10+^.^| {downarrow}
-8+>| ename:VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT        .9+^.^| {downarrow}
-7+>| ename:VK_FORMAT_FEATURE_BLIT_DST_BIT                      .8+^.^| {downarrow}
-6+>| ename:VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT              .7+^.^| {downarrow}
-5+>| ename:VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT          .6+^.^| {downarrow}
-4+>| ename:VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT                 .5+^.^| {downarrow}
-3+>| ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT   .4+^.^| {downarrow}
-2+>| ename:VK_FORMAT_FEATURE_BLIT_SRC_BIT                      .3+^.^| {downarrow}
-1+>| ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT                 .2+^.^| {downarrow}
-s| Format
-| ename:VK_FORMAT_ETC2_R8G8B8_UNORM_BLOCK    | {sym2} | {sym2} | {sym2} |   |   |   |   |   |   |   |   |   |
-| ename:VK_FORMAT_ETC2_R8G8B8_SRGB_BLOCK     | {sym2} | {sym2} | {sym2} |   |   |   |   |   |   |   |   |   |
-| ename:VK_FORMAT_ETC2_R8G8B8A1_UNORM_BLOCK  | {sym2} | {sym2} | {sym2} |   |   |   |   |   |   |   |   |   |
-| ename:VK_FORMAT_ETC2_R8G8B8A1_SRGB_BLOCK   | {sym2} | {sym2} | {sym2} |   |   |   |   |   |   |   |   |   |
-| ename:VK_FORMAT_ETC2_R8G8B8A8_UNORM_BLOCK  | {sym2} | {sym2} | {sym2} |   |   |   |   |   |   |   |   |   |
-| ename:VK_FORMAT_ETC2_R8G8B8A8_SRGB_BLOCK   | {sym2} | {sym2} | {sym2} |   |   |   |   |   |   |   |   |   |
-| ename:VK_FORMAT_EAC_R11_UNORM_BLOCK        | {sym2} | {sym2} | {sym2} |   |   |   |   |   |   |   |   |   |
-| ename:VK_FORMAT_EAC_R11_SNORM_BLOCK        | {sym2} | {sym2} | {sym2} |   |   |   |   |   |   |   |   |   |
-| ename:VK_FORMAT_EAC_R11G11_UNORM_BLOCK     | {sym2} | {sym2} | {sym2} |   |   |   |   |   |   |   |   |   |
-| ename:VK_FORMAT_EAC_R11G11_SNORM_BLOCK     | {sym2} | {sym2} | {sym2} |   |   |   |   |   |   |   |   |   |
-14+|The ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT,
-ename:VK_FORMAT_FEATURE_BLIT_SRC_BIT and
-ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT features must: be
-supported in pname:optimalTilingFeatures for all the formats in at least
-one of: this table, <<formats-mandatory-features-bcn>>, or
-<<formats-mandatory-features-astc>>.
-|====
-
-<<<
-
-[[formats-mandatory-features-astc]]
-.Mandatory format support: ASTC LDR compressed formats with `VkImageType` ename:VK_IMAGE_TYPE_2D
-[width="100%",cols="12,^1,^1,^1,^1,^1,^1,^1,^1,^1,^1,^1,^1,^1",options="unbreakable"]
-|====
-13+>| ename:VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT .14+^.^| {downarrow}
-12+>| ename:VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT        .13+^.^| {downarrow}
-11+>| ename:VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT        .12+^.^| {downarrow}
-10+>| ename:VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT               .11+^.^| {downarrow}
-9+>| ename:VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT     .10+^.^| {downarrow}
-8+>| ename:VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT        .9+^.^| {downarrow}
-7+>| ename:VK_FORMAT_FEATURE_BLIT_DST_BIT                      .8+^.^| {downarrow}
-6+>| ename:VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT              .7+^.^| {downarrow}
-5+>| ename:VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT          .6+^.^| {downarrow}
-4+>| ename:VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT                 .5+^.^| {downarrow}
-3+>| ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT   .4+^.^| {downarrow}
-2+>| ename:VK_FORMAT_FEATURE_BLIT_SRC_BIT                      .3+^.^| {downarrow}
-1+>| ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT                 .2+^.^| {downarrow}
-s| Format
-| ename:VK_FORMAT_ASTC_4x4_UNORM_BLOCK       | {sym2} | {sym2} | {sym2} |   |   |   |   |   |   |   |   |   |
-| ename:VK_FORMAT_ASTC_4x4_SRGB_BLOCK        | {sym2} | {sym2} | {sym2} |   |   |   |   |   |   |   |   |   |
-| ename:VK_FORMAT_ASTC_5x4_UNORM_BLOCK       | {sym2} | {sym2} | {sym2} |   |   |   |   |   |   |   |   |   |
-| ename:VK_FORMAT_ASTC_5x4_SRGB_BLOCK        | {sym2} | {sym2} | {sym2} |   |   |   |   |   |   |   |   |   |
-| ename:VK_FORMAT_ASTC_5x5_UNORM_BLOCK       | {sym2} | {sym2} | {sym2} |   |   |   |   |   |   |   |   |   |
-| ename:VK_FORMAT_ASTC_5x5_SRGB_BLOCK        | {sym2} | {sym2} | {sym2} |   |   |   |   |   |   |   |   |   |
-| ename:VK_FORMAT_ASTC_6x5_UNORM_BLOCK       | {sym2} | {sym2} | {sym2} |   |   |   |   |   |   |   |   |   |
-| ename:VK_FORMAT_ASTC_6x5_SRGB_BLOCK        | {sym2} | {sym2} | {sym2} |   |   |   |   |   |   |   |   |   |
-| ename:VK_FORMAT_ASTC_6x6_UNORM_BLOCK       | {sym2} | {sym2} | {sym2} |   |   |   |   |   |   |   |   |   |
-| ename:VK_FORMAT_ASTC_6x6_SRGB_BLOCK        | {sym2} | {sym2} | {sym2} |   |   |   |   |   |   |   |   |   |
-| ename:VK_FORMAT_ASTC_8x5_UNORM_BLOCK       | {sym2} | {sym2} | {sym2} |   |   |   |   |   |   |   |   |   |
-| ename:VK_FORMAT_ASTC_8x5_SRGB_BLOCK        | {sym2} | {sym2} | {sym2} |   |   |   |   |   |   |   |   |   |
-| ename:VK_FORMAT_ASTC_8x6_UNORM_BLOCK       | {sym2} | {sym2} | {sym2} |   |   |   |   |   |   |   |   |   |
-| ename:VK_FORMAT_ASTC_8x6_SRGB_BLOCK        | {sym2} | {sym2} | {sym2} |   |   |   |   |   |   |   |   |   |
-| ename:VK_FORMAT_ASTC_8x8_UNORM_BLOCK       | {sym2} | {sym2} | {sym2} |   |   |   |   |   |   |   |   |   |
-| ename:VK_FORMAT_ASTC_8x8_SRGB_BLOCK        | {sym2} | {sym2} | {sym2} |   |   |   |   |   |   |   |   |   |
-| ename:VK_FORMAT_ASTC_10x5_UNORM_BLOCK      | {sym2} | {sym2} | {sym2} |   |   |   |   |   |   |   |   |   |
-| ename:VK_FORMAT_ASTC_10x5_SRGB_BLOCK       | {sym2} | {sym2} | {sym2} |   |   |   |   |   |   |   |   |   |
-| ename:VK_FORMAT_ASTC_10x6_UNORM_BLOCK      | {sym2} | {sym2} | {sym2} |   |   |   |   |   |   |   |   |   |
-| ename:VK_FORMAT_ASTC_10x6_SRGB_BLOCK       | {sym2} | {sym2} | {sym2} |   |   |   |   |   |   |   |   |   |
-| ename:VK_FORMAT_ASTC_10x8_UNORM_BLOCK      | {sym2} | {sym2} | {sym2} |   |   |   |   |   |   |   |   |   |
-| ename:VK_FORMAT_ASTC_10x8_SRGB_BLOCK       | {sym2} | {sym2} | {sym2} |   |   |   |   |   |   |   |   |   |
-| ename:VK_FORMAT_ASTC_10x10_UNORM_BLOCK     | {sym2} | {sym2} | {sym2} |   |   |   |   |   |   |   |   |   |
-| ename:VK_FORMAT_ASTC_10x10_SRGB_BLOCK      | {sym2} | {sym2} | {sym2} |   |   |   |   |   |   |   |   |   |
-| ename:VK_FORMAT_ASTC_12x10_UNORM_BLOCK     | {sym2} | {sym2} | {sym2} |   |   |   |   |   |   |   |   |   |
-| ename:VK_FORMAT_ASTC_12x10_SRGB_BLOCK      | {sym2} | {sym2} | {sym2} |   |   |   |   |   |   |   |   |   |
-| ename:VK_FORMAT_ASTC_12x12_UNORM_BLOCK     | {sym2} | {sym2} | {sym2} |   |   |   |   |   |   |   |   |   |
-| ename:VK_FORMAT_ASTC_12x12_SRGB_BLOCK      | {sym2} | {sym2} | {sym2} |   |   |   |   |   |   |   |   |   |
-14+|The ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT,
-ename:VK_FORMAT_FEATURE_BLIT_SRC_BIT and
-ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT features must: be
-supported in pname:optimalTilingFeatures for all the formats in at least
-one of: this table, <<formats-mandatory-features-bcn>>, or
-<<formats-mandatory-features-etc>>.
-|====
-
-ifdef::VK_IMG_filter_cubic,VK_EXT_filter_cubic[]
-If cubic filtering is supported,
-ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_EXT must: be
-supported for the following image view types:
-
-  * ename:VK_IMAGE_VIEW_TYPE_2D
-  * ename:VK_IMAGE_VIEW_TYPE_2D_ARRAY
-
-for the following formats:
-
-  * ename:VK_FORMAT_R4G4_UNORM_PACK8
-  * ename:VK_FORMAT_R4G4B4A4_UNORM_PACK16
-  * ename:VK_FORMAT_B4G4R4A4_UNORM_PACK16
-  * ename:VK_FORMAT_R5G6B5_UNORM_PACK16
-  * ename:VK_FORMAT_B5G6R5_UNORM_PACK16
-  * ename:VK_FORMAT_R5G5B5A1_UNORM_PACK16
-  * ename:VK_FORMAT_B5G5R5A1_UNORM_PACK16
-  * ename:VK_FORMAT_A1R5G5B5_UNORM_PACK16
-  * ename:VK_FORMAT_R8_UNORM
-  * ename:VK_FORMAT_R8_SNORM
-  * ename:VK_FORMAT_R8_SRGB
-  * ename:VK_FORMAT_R8G8_UNORM
-  * ename:VK_FORMAT_R8G8_SNORM
-  * ename:VK_FORMAT_R8G8_SRGB
-  * ename:VK_FORMAT_R8G8B8_UNORM
-  * ename:VK_FORMAT_R8G8B8_SNORM
-  * ename:VK_FORMAT_R8G8B8_SRGB
-  * ename:VK_FORMAT_B8G8R8_UNORM
-  * ename:VK_FORMAT_B8G8R8_SNORM
-  * ename:VK_FORMAT_B8G8R8_SRGB
-  * ename:VK_FORMAT_R8G8B8A8_UNORM
-  * ename:VK_FORMAT_R8G8B8A8_SNORM
-  * ename:VK_FORMAT_R8G8B8A8_SRGB
-  * ename:VK_FORMAT_B8G8R8A8_UNORM
-  * ename:VK_FORMAT_B8G8R8A8_SNORM
-  * ename:VK_FORMAT_B8G8R8A8_SRGB
-  * ename:VK_FORMAT_A8B8G8R8_UNORM_PACK32
-  * ename:VK_FORMAT_A8B8G8R8_SNORM_PACK32
-  * ename:VK_FORMAT_A8B8G8R8_SRGB_PACK32
-
-If ETC compressed formats are supported,
-ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_EXT must: be
-supported for the following image view types:
-
-  * ename:VK_IMAGE_VIEW_TYPE_2D
-  * ename:VK_IMAGE_VIEW_TYPE_2D_ARRAY
-
-for the following additional formats:
-
-  * ename:VK_FORMAT_ETC2_R8G8B8_UNORM_BLOCK
-  * ename:VK_FORMAT_ETC2_R8G8B8_SRGB_BLOCK
-  * ename:VK_FORMAT_ETC2_R8G8B8A1_UNORM_BLOCK
-  * ename:VK_FORMAT_ETC2_R8G8B8A1_SRGB_BLOCK
-  * ename:VK_FORMAT_ETC2_R8G8B8A8_UNORM_BLOCK
-  * ename:VK_FORMAT_ETC2_R8G8B8A8_SRGB_BLOCK
-
-If cubic filtering is supported for any other formats, the following image
-view types must: be supported for those formats:
-
-  * ename:VK_IMAGE_VIEW_TYPE_2D
-  * ename:VK_IMAGE_VIEW_TYPE_2D_ARRAY
-
-endif::VK_IMG_filter_cubic,VK_EXT_filter_cubic[]
-
-ifdef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
-
-To be used with sname:VkImageView with pname:subresourceRange.aspectMask
-equal to ename:VK_IMAGE_ASPECT_COLOR_BIT, <<samplers-YCbCr-conversion,
-sampler {YCbCr} conversion>> must: be enabled for the following formats:
-
-[[formats-requiring-sampler-ycbcr-conversion]]
-.Formats requiring sampler {YCbCr} conversion for ename:VK_IMAGE_ASPECT_COLOR_BIT image views
-[width="100%",cols="18,^3,^1,^1,^1,^1,^1,^1,^1,^1,^1,^1",options="unbreakable"]
-|====
-11+>| ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_FORCEABLE_BIT  .11+^.^| {downarrow}
-10+>| ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_BIT            .10+^.^| {downarrow}
-9+>| ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_SEPARATE_RECONSTRUCTION_FILTER_BIT             .9+^.^| {downarrow}
-8+>| ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_LINEAR_FILTER_BIT                              .8+^.^| {downarrow}
-7+>| ename:VK_FORMAT_FEATURE_MIDPOINT_CHROMA_SAMPLES_BIT         .7+^.^| {downarrow}
-6+>| ename:VK_FORMAT_FEATURE_COSITED_CHROMA_SAMPLES_BIT          .6+^.^| {downarrow}
-5+>| ename:VK_FORMAT_FEATURE_TRANSFER_DST_BIT                    .5+^.^| {downarrow}
-4+>| ename:VK_FORMAT_FEATURE_TRANSFER_SRC_BIT                    .4+^.^| {downarrow}
-3+>| ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT                   .3+^.^| {downarrow}
-2+>| ename:VK_FORMAT_FEATURE_DISJOINT_BIT                        .2+^.^| {downarrow}
-s| Format                                                     s| Planes
-| ename:VK_FORMAT_G8B8G8R8_422_UNORM                           | 1 |  |        |        |        |        | | | | |
-| ename:VK_FORMAT_B8G8R8G8_422_UNORM                           | 1 |  |        |        |        |        | | | | |
-| ename:VK_FORMAT_G8_B8_R8_3PLANE_420_UNORM                    | 3 |  | {sym2} | {sym2} | {sym2} | {sym2} | | | | |
-| ename:VK_FORMAT_G8_B8R8_2PLANE_420_UNORM                     | 2 |  | {sym2} | {sym2} | {sym2} | {sym2} | | | | |
-| ename:VK_FORMAT_G8_B8_R8_3PLANE_422_UNORM                    | 3 |  |        |        |        |        | | | | |
-| ename:VK_FORMAT_G8_B8R8_2PLANE_422_UNORM                     | 2 |  |        |        |        |        | | | | |
-| ename:VK_FORMAT_G8_B8_R8_3PLANE_444_UNORM                    | 3 |  |        |        |        |        | | | | |
-ifdef::VK_EXT_rgba10x6_formats[]
-| ename:VK_FORMAT_R10X6G10X6B10X6A10X6_UNORM_4PACK16 {sym3}   | 1 |  |        |        |        |        | | | | |
-endif::VK_EXT_rgba10x6_formats[]
-ifndef::VK_EXT_rgba10x6_formats[]
- | ename:VK_FORMAT_R10X6G10X6B10X6A10X6_UNORM_4PACK16           | 1 |  |        |        |        |        | | | | |
-endif::VK_EXT_rgba10x6_formats[]
-| ename:VK_FORMAT_G10X6B10X6G10X6R10X6_422_UNORM_4PACK16       | 1 |  |        |        |        |        | | | | |
-| ename:VK_FORMAT_B10X6G10X6R10X6G10X6_422_UNORM_4PACK16       | 1 |  |        |        |        |        | | | | |
-| ename:VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_420_UNORM_3PACK16   | 3 |  |        |        |        |        | | | | |
-| ename:VK_FORMAT_G10X6_B10X6R10X6_2PLANE_420_UNORM_3PACK16    | 2 |  |        |        |        |        | | | | |
-| ename:VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_422_UNORM_3PACK16   | 3 |  |        |        |        |        | | | | |
-| ename:VK_FORMAT_G10X6_B10X6R10X6_2PLANE_422_UNORM_3PACK16    | 2 |  |        |        |        |        | | | | |
-| ename:VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_444_UNORM_3PACK16   | 3 |  |        |        |        |        | | | | |
-| ename:VK_FORMAT_R12X4G12X4B12X4A12X4_UNORM_4PACK16           | 1 |  |        |        |        |        | | | | |
-| ename:VK_FORMAT_G12X4B12X4G12X4R12X4_422_UNORM_4PACK16       | 1 |  |        |        |        |        | | | | |
-| ename:VK_FORMAT_B12X4G12X4R12X4G12X4_422_UNORM_4PACK16       | 1 |  |        |        |        |        | | | | |
-| ename:VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_420_UNORM_3PACK16   | 3 |  |        |        |        |        | | | | |
-| ename:VK_FORMAT_G12X4_B12X4R12X4_2PLANE_420_UNORM_3PACK16    | 2 |  |        |        |        |        | | | | |
-| ename:VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_422_UNORM_3PACK16   | 3 |  |        |        |        |        | | | | |
-| ename:VK_FORMAT_G12X4_B12X4R12X4_2PLANE_422_UNORM_3PACK16    | 2 |  |        |        |        |        | | | | |
-| ename:VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_444_UNORM_3PACK16   | 3 |  |        |        |        |        | | | | |
-| ename:VK_FORMAT_G16B16G16R16_422_UNORM                       | 1 |  |        |        |        |        | | | | |
-| ename:VK_FORMAT_B16G16R16G16_422_UNORM                       | 1 |  |        |        |        |        | | | | |
-| ename:VK_FORMAT_G16_B16_R16_3PLANE_420_UNORM                 | 3 |  |        |        |        |        | | | | |
-| ename:VK_FORMAT_G16_B16R16_2PLANE_420_UNORM                  | 2 |  |        |        |        |        | | | | |
-| ename:VK_FORMAT_G16_B16_R16_3PLANE_422_UNORM                 | 3 |  |        |        |        |        | | | | |
-| ename:VK_FORMAT_G16_B16R16_2PLANE_422_UNORM                  | 2 |  |        |        |        |        | | | | |
-| ename:VK_FORMAT_G16_B16_R16_3PLANE_444_UNORM                 | 3 |  |        |        |        |        | | | | |
-ifdef::VK_EXT_ycbcr_2plane_444_formats[]
-| ename:VK_FORMAT_G8_B8R8_2PLANE_444_UNORM_EXT                     | 2 |  |        |        |        |        | | | | |
-| ename:VK_FORMAT_G10X6_B10X6R10X6_2PLANE_444_UNORM_3PACK16_EXT    | 2 |  |        |        |        |        | | | | |
-| ename:VK_FORMAT_G12X4_B12X4R12X4_2PLANE_444_UNORM_3PACK16_EXT    | 2 |  |        |        |        |        | | | | |
-| ename:VK_FORMAT_G16_B16R16_2PLANE_444_UNORM_EXT                  | 2 |  |        |        |        |        | | | | |
-endif::VK_EXT_ycbcr_2plane_444_formats[]
-12+| Format features marked {sym2} must: be supported for
-pname:optimalTilingFeatures with elink:VkImageType
-ename:VK_IMAGE_TYPE_2D if the sname:VkPhysicalDevice supports the
-slink:VkPhysicalDeviceSamplerYcbcrConversionFeatures feature.
-ifdef::VK_EXT_rgba10x6_formats[]
-12+| Formats marked {sym3} do not require a sampler {YCbCr} conversion for
-ename:VK_IMAGE_ASPECT_COLOR_BIT image views if the
-slink:VkPhysicalDeviceRGBA10X6FormatsFeaturesEXT::pname:formatRgba10x6WithoutYCbCrSampler
-feature is enabled.
-endif::VK_EXT_rgba10x6_formats[]
-|====
-
-Implementations are not required to support the
-ename:VK_IMAGE_CREATE_SPARSE_BINDING_BIT,
-ename:VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT, or
-ename:VK_IMAGE_CREATE_SPARSE_ALIASED_BIT tlink:VkImageCreateFlags for the
-above formats that require <<samplers-YCbCr-conversion,sampler {YCbCr}
-conversion>>.
-To determine whether the implementation supports sparse image creation flags
-with these formats use flink:vkGetPhysicalDeviceImageFormatProperties or
-flink:vkGetPhysicalDeviceImageFormatProperties2.
-
-endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
-
-ifdef::VK_EXT_fragment_density_map[]
-ename:VK_FORMAT_FEATURE_FRAGMENT_DENSITY_MAP_BIT_EXT must: be supported for
-the following formats if the <<features-fragmentDensityMap,fragment density
-map feature>> is enabled:
-
-  * ename:VK_FORMAT_R8G8_UNORM
-endif::VK_EXT_fragment_density_map[]
-
-ifdef::VK_KHR_acceleration_structure[]
-ename:VK_FORMAT_FEATURE_ACCELERATION_STRUCTURE_VERTEX_BUFFER_BIT_KHR must:
-be supported in pname:bufferFeatures for the following formats if the
-<<features-accelerationStructure, pname:accelerationStructure>> feature is
-supported:
-
-  * ename:VK_FORMAT_R32G32_SFLOAT
-  * ename:VK_FORMAT_R32G32B32_SFLOAT
-  * ename:VK_FORMAT_R16G16_SFLOAT
-  * ename:VK_FORMAT_R16G16B16A16_SFLOAT
-  * ename:VK_FORMAT_R16G16_SNORM
-  * ename:VK_FORMAT_R16G16B16A16_SNORM
-endif::VK_KHR_acceleration_structure[]
-
-ifdef::VK_KHR_fragment_shading_rate[]
-ename:VK_FORMAT_FEATURE_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR must: be
-supported for the following formats if the
-<<features-attachmentFragmentShadingRate,
-pname:attachmentFragmentShadingRate feature>> is supported:
-
-  * ename:VK_FORMAT_R8_UINT
-endif::VK_KHR_fragment_shading_rate[]
-
-
-[[formats-without-shader-storage-format]]
-=== Formats without shader storage format
-
-The device-level features for using a storage image with an image format of
-code:Unknown,
-<<features-shaderStorageImageReadWithoutFormat,shaderStorageImageReadWithoutFormat>>
-and
-<<features-shaderStorageImageWriteWithoutFormat,shaderStorageImageWriteWithoutFormat>>,
-only apply to the following formats:
-
-  * ename:VK_FORMAT_R8G8B8A8_UNORM
-  * ename:VK_FORMAT_R8G8B8A8_SNORM
-  * ename:VK_FORMAT_R8G8B8A8_UINT
-  * ename:VK_FORMAT_R8G8B8A8_SINT
-  * ename:VK_FORMAT_R32_UINT
-  * ename:VK_FORMAT_R32_SINT
-  * ename:VK_FORMAT_R32_SFLOAT
-  * ename:VK_FORMAT_R32G32_UINT
-  * ename:VK_FORMAT_R32G32_SINT
-  * ename:VK_FORMAT_R32G32_SFLOAT
-  * ename:VK_FORMAT_R32G32B32A32_UINT
-  * ename:VK_FORMAT_R32G32B32A32_SINT
-  * ename:VK_FORMAT_R32G32B32A32_SFLOAT
-  * ename:VK_FORMAT_R16G16B16A16_UINT
-  * ename:VK_FORMAT_R16G16B16A16_SINT
-  * ename:VK_FORMAT_R16G16B16A16_SFLOAT
-  * ename:VK_FORMAT_R16G16_SFLOAT
-  * ename:VK_FORMAT_B10G11R11_UFLOAT_PACK32
-  * ename:VK_FORMAT_R16_SFLOAT
-  * ename:VK_FORMAT_R16G16B16A16_UNORM
-  * ename:VK_FORMAT_A2B10G10R10_UNORM_PACK32
-  * ename:VK_FORMAT_R16G16_UNORM
-  * ename:VK_FORMAT_R8G8_UNORM
-  * ename:VK_FORMAT_R16_UNORM
-  * ename:VK_FORMAT_R8_UNORM
-  * ename:VK_FORMAT_R16G16B16A16_SNORM
-  * ename:VK_FORMAT_R16G16_SNORM
-  * ename:VK_FORMAT_R8G8_SNORM
-  * ename:VK_FORMAT_R16_SNORM
-  * ename:VK_FORMAT_R8_SNORM
-  * ename:VK_FORMAT_R16G16_SINT
-  * ename:VK_FORMAT_R8G8_SINT
-  * ename:VK_FORMAT_R16_SINT
-  * ename:VK_FORMAT_R8_SINT
-  * ename:VK_FORMAT_A2B10G10R10_UINT_PACK32
-  * ename:VK_FORMAT_R16G16_UINT
-  * ename:VK_FORMAT_R8G8_UINT
-  * ename:VK_FORMAT_R16_UINT
-  * ename:VK_FORMAT_R8_UINT
-
-[NOTE]
-.Note
-====
-This list of formats is the union of required storage formats from
-<<features-required-format-support, Required Format Support>> section and
-formats listed in <<features-shaderStorageImageExtendedFormats,
-pname:shaderStorageImageExtendedFormats>>.
-====
-
-ifdef::VK_KHR_format_feature_flags2[]
-An implementation that supports ename:VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT
-for any format from the given list of formats and supports
-<<features-shaderStorageImageReadWithoutFormat,shaderStorageImageReadWithoutFormat>>
-must: support ename:VK_FORMAT_FEATURE_2_STORAGE_READ_WITHOUT_FORMAT_BIT_KHR
-for that same format if the `apiext:VK_KHR_format_feature_flags2` extension
-is supported.
-
-An implementation that supports ename:VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT
-for any format from the given list of formats and supports
-<<features-shaderStorageImageWriteWithoutFormat,shaderStorageImageWriteWithoutFormat>>
-must: support ename:VK_FORMAT_FEATURE_2_STORAGE_WRITE_WITHOUT_FORMAT_BIT_KHR
-for that same format if the `apiext:VK_KHR_format_feature_flags2` extension
-is supported.
-endif::VK_KHR_format_feature_flags2[]
-
-
-ifdef::VK_KHR_format_feature_flags2[]
-=== Depth comparison format support
-
-If the `apiext:VK_KHR_format_feature_flags2` extension is supported, a
-depth/stencil format with a depth component supporting
-ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT must: support
-ename:VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_DEPTH_COMPARISON_BIT_KHR.
-
-endif::VK_KHR_format_feature_flags2[]
diff --git a/registry/vulkan/chapters/fragmentdensitymapops.txt b/registry/vulkan/chapters/fragmentdensitymapops.txt
deleted file mode 100644
index e8a5f4c..0000000
--- a/registry/vulkan/chapters/fragmentdensitymapops.txt
+++ /dev/null
@@ -1,128 +0,0 @@
-// Copyright 2018-2021 The Khronos Group, Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-[[fragmentdensitymapops]]
-= Fragment Density Map Operations
-
-== Fragment Density Map Operations Overview
-
-When a fragment is generated in a render pass that has a fragment density
-map attachment, its area is determined by the properties of the local
-framebuffer region that the fragment occupies.
-The framebuffer is divided into a uniform grid of these local regions, and
-their fragment area property is derived from the density map with the
-following operations:
-
-  * <<fragmentdensitymap-fetch-density-value,Fetch density value>>
-  ** <<fragmentdensitymap-component-swizzle,Component swizzle>>
-  ** <<fragmentdensitymap-component-mapping,Component mapping>>
-  * <<fragmentdensitymap-conversion-to-fragment-area,Fragment area
-    conversion>>
-  ** <<fragmentdensitymap-fragment-area-filter,Fragment area filter>>
-  ** <<fragmentdensitymap-fragment-area-clamp,Fragment area clamp>>
-
-
-[[fragmentdensitymap-fetch-density-value]]
-== Fetch Density Value
-
-Each local framebuffer region at center coordinate [eq]#(x,y)# fetches a
-texel from the fragment density map at integer coordinates:
-
-  {empty}:: latexmath:[i =
-            \left\lfloor{\frac{x}{fragmentDensityTexelSize_{width}}}\right\rfloor]
-  {empty}:: latexmath:[j =
-            \left\lfloor{\frac{y}{fragmentDensityTexelSize_{height}}}\right\rfloor]
-
-Where the size of each region in the framebuffer is:
-
-  {empty}:: latexmath:[fragmentDensityTexelSize'_{width} =
-            {2^{\lceil{\log_2(\frac{framebuffer_{width}}{fragmentDensityMap_{width}})}\rceil}}]
-  {empty}:: latexmath:[fragmentDensityTexelSize'_{height} =
-            {2^{\lceil{\log_2(\frac{framebuffer_{height}}{fragmentDensityMap_{height}})}\rceil}}]
-
-This region is subject to the limits in
-sname:VkPhysicalDeviceFragmentDensityMapPropertiesEXT and therefore the
-final region size is clamped:
-
-  {empty}:: latexmath:[fragmentDensityTexelSize_{width} =
-            \mathbin{clamp}(fragmentDensityTexelSize'_{width},minFragmentDensityTexelSize_{width},maxFragmentDensityTexelSize_{width})]
-  {empty}:: latexmath:[fragmentDensityTexelSize_{height} =
-            \mathbin{clamp}(fragmentDensityTexelSize'_{height},minFragmentDensityTexelSize_{height},maxFragmentDensityTexelSize_{height})]
-
-When multiview is enabled for the render pass and the fragment density map
-attachment view was created with pname:layerCount greater than `1`, the
-density map layer that the texel is fetched from is:
-
-  {empty}:: latexmath:[layer = baseArrayLayer + ViewIndex]
-
-Otherwise:
-
-  {empty}:: latexmath:[layer = baseArrayLayer]
-
-The texel fetched from the density map at [eq]#(i,j,layer)# is next
-converted to density with the following operations.
-
-
-[[fragmentdensitymap-component-swizzle]]
-=== Component Swizzle
-
-The pname:components member of slink:VkImageViewCreateInfo is applied to the
-fetched texel as defined in <<textures-component-swizzle,Image component
-swizzle>>.
-
-
-[[fragmentdensitymap-component-mapping]]
-=== Component Mapping
-
-The swizzled texel's components are mapped to a density value:
-
-  {empty}:: latexmath:[densityValue_{xy} = (C'_{r},C'_{g})]
-
-
-[[fragmentdensitymap-conversion-to-fragment-area]]
-== Fragment Area Conversion
-
-Fragment area for the framebuffer region is undefined: if the density
-fetched is not a normalized floating-point value greater than `0.0`.
-Otherwise, the fetched fragment area for that region is derived as:
-
-  {empty}:: latexmath:[fragmentArea_{wh} = \frac{1.0}{densityValue_{xy}}]
-
-
-[[fragmentdensitymap-fragment-area-filter]]
-===  Fragment Area Filter
-
-Optionally, the implementation may: fetch additional density map texels in
-an implementation defined window around [eq]#(i,j)#.
-The texels follow the standard conversion steps up to and including
-<<fragmentdensitymap-conversion-to-fragment-area,fragment area conversion>>.
-
-A single fetched fragment area for the framebuffer region is chosen by the
-implementation and must: have an area between the _min_ and _max_ areas of
-the fetched set.
-
-
-[[fragmentdensitymap-fragment-area-clamp]]
-=== Fragment Area Clamp
-
-The implementation may: clamp the fetched fragment area to one that it
-supports.
-The clamped fragment area must: have a size less than or equal to the
-original fetched value.
-Implementations may: vary the supported set of fragment areas per
-framebuffer region.
-Fragment area [eq]#(1,1)# must: always be in the supported set.
-
-[NOTE]
-.Note
-====
-For example, if the fetched fragment area is [eq]#(1,4)# but the
-implementation only supports areas of [eq]#{(1,1),(2,2)}#, it could choose
-to clamp the area to [eq]#(2,2)# since it has the same size as [eq]#(1,4)#.
-While this would produce fragments that have lower quality strictly in the
-x-axis, the overall density is maintained.
-====
-
-The clamped fragment area is assigned to the corresponding framebuffer
-region.
diff --git a/registry/vulkan/chapters/fragops.txt b/registry/vulkan/chapters/fragops.txt
deleted file mode 100644
index 3d82836..0000000
--- a/registry/vulkan/chapters/fragops.txt
+++ /dev/null
@@ -1,1793 +0,0 @@
-// Copyright 2015-2021 The Khronos Group, Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-[[fragops]]
-= Fragment Operations
-
-Fragments produced by rasterization go through a number of operations to
-determine whether or how values produced by fragment shading are written to
-the framebuffer.
-
-The following fragment operations adhere to <<primsrast-order,rasterization
-order>>, and are typically performed in this order:
-
-ifdef::VK_EXT_discard_rectangles[]
-  . <<fragops-discard-rectangles,Discard rectangles test>>
-endif::VK_EXT_discard_rectangles[]
-  . <<fragops-scissor,Scissor test>>
-ifdef::VK_NV_scissor_exclusive[]
-  . <<fragops-exclusive-scissor,Exclusive scissor test>>
-endif::VK_NV_scissor_exclusive[]
-  . <<fragops-samplemask,Sample mask test>>
-  . Certain <<fragops-shader,Fragment shading>> operations:
-  ** <<fragops-shader-samplemask, Sample Mask Accesses>>
-  ** <<fragops-shader-depthreplacement, Depth Replacement>>
-ifdef::VK_EXT_shader_stencil_export[]
-  ** <<fragops-shader-stencilrefreplacement, Stencil Reference Replacement>>
-endif::VK_EXT_shader_stencil_export[]
-ifdef::VK_EXT_fragment_shader_interlock[]
-  ** <<fragops-shader-interlock, Interlocked Operations>>
-endif::VK_EXT_fragment_shader_interlock[]
-  . <<fragops-covg, Multisample coverage>>
-  . <<fragops-dbt, Depth bounds test>>
-  . <<fragops-stencil, Stencil test>>
-  . <<fragops-depth, Depth test>>
-ifdef::VK_NV_representative_fragment_test[]
-  . <<fragops-rep-frag-test, Representative fragment test>>
-endif::VK_NV_representative_fragment_test[]
-  . <<fragops-samplecount, Sample counting>>
-ifdef::VK_NV_fragment_coverage_to_color[]
-  . <<fragops-coverage-to-color, Coverage to color>>
-endif::VK_NV_fragment_coverage_to_color[]
-  . <<fragops-coverage-reduction, Coverage reduction>>
-ifdef::VK_NV_framebuffer_mixed_samples[]
-  . <<fragops-coverage-modulation, Coverage modulation>>
-endif::VK_NV_framebuffer_mixed_samples[]
-
-The <<primsrast-multisampling-coverage-mask, coverage mask>> generated by
-rasterization describes the initial coverage of each sample covered by the
-fragment.
-Fragment operations will update the coverage mask to add or subtract
-coverage where appropriate.
-If a fragment operation results in all bits of the coverage mask being `0`,
-the fragment is discarded, and no further operations are performed.
-Fragments can also be programmatically discarded in a fragment shader by
-executing one of
-
-ifdef::VK_KHR_shader_terminate_invocation[]
-  * code:OpTerminateInvocation
-endif::VK_KHR_shader_terminate_invocation[]
-ifdef::VK_EXT_shader_demote_to_helper_invocation[]
-  * code:OpDemoteToHelperInvocationEXT
-endif::VK_EXT_shader_demote_to_helper_invocation[]
-  * code:OpKill.
-
-When one of the fragment operations in this chapter is described as
-"`replacing`" a fragment shader output, that output is replaced
-unconditionally, even if no fragment shader previously wrote to that output.
-
-ifdef::VK_EXT_post_depth_coverage[]
-If the <<fragops-shader, fragment shader>> declares the
-code:PostDepthCoverage execution mode, the <<fragops-samplemask, sample mask
-test>> is instead performed after the <<fragops-depth, depth test>>.
-endif::VK_EXT_post_depth_coverage[]
-
-If the <<fragops-shader, fragment shader>> declares the
-code:EarlyFragmentTests execution mode, <<fragops-shader,fragment shading>>
-and <<fragops-covg, multisample coverage>> operations are instead performed
-after <<fragops-samplecount, sample counting>>.
-
-Once all fragment operations have completed, fragment shader outputs for
-covered color attachment samples pass through <<framebuffer, framebuffer
-operations>>.
-
-
-ifdef::VK_EXT_discard_rectangles[]
-[[fragops-discard-rectangles]]
-== Discard Rectangles Test
-
-The discard rectangle test compares the framebuffer coordinates
-[eq]#(x~f~,y~f~)# of each sample covered by a fragment against a set of
-_discard rectangles_.
-
-Each discard rectangle is defined by a slink:VkRect2D.
-These values are either set by the
-slink:VkPipelineDiscardRectangleStateCreateInfoEXT structure during pipeline
-creation, or dynamically by the flink:vkCmdSetDiscardRectangleEXT command.
-
-A given sample is considered inside a discard rectangle if the [eq]#x~f~# is
-in the range [eq]#[slink:VkRect2D::offset.x, slink:VkRect2D::offset.x {plus}
-slink:VkRect2D::extent.x)#, and [eq]#y~f~# is in the range
-[eq]#[slink:VkRect2D::offset.y, slink:VkRect2D::offset.y {plus}
-slink:VkRect2D::extent.y)#.
-If the test is set to be inclusive, samples that are not inside any of the
-discard rectangles will have their coverage set to `0`.
-If the test is set to be exclusive, samples that are inside any of the
-discard rectangles will have their coverage set to `0`.
-
-If no discard rectangles are specified, the coverage mask is unmodified by
-this operation.
-
-[open,refpage='VkPipelineDiscardRectangleStateCreateInfoEXT',desc='Structure specifying discard rectangle',type='structs']
---
-The sname:VkPipelineDiscardRectangleStateCreateInfoEXT structure is defined
-as:
-
-include::{generated}/api/structs/VkPipelineDiscardRectangleStateCreateInfoEXT.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:flags is reserved for future use.
-  * pname:discardRectangleMode is a elink:VkDiscardRectangleModeEXT value
-    determining whether the discard rectangle test is inclusive or
-    exclusive.
-  * pname:discardRectangleCount is the number of discard rectangles to use.
-  * pname:pDiscardRectangles is a pointer to an array of slink:VkRect2D
-    structures defining discard rectangles.
-
-If the ename:VK_DYNAMIC_STATE_DISCARD_RECTANGLE_EXT dynamic state is enabled
-for a pipeline, the pname:pDiscardRectangles member is ignored.
-
-When this structure is included in the pname:pNext chain of
-slink:VkGraphicsPipelineCreateInfo, it defines parameters of the discard
-rectangle test.
-If this structure is not included in the pname:pNext chain, it is equivalent
-to specifying this structure with a pname:discardRectangleCount of `0`.
-
-.Valid Usage
-****
-  * [[VUID-VkPipelineDiscardRectangleStateCreateInfoEXT-discardRectangleCount-00582]]
-    pname:discardRectangleCount must: be less than or equal to
-    sname:VkPhysicalDeviceDiscardRectanglePropertiesEXT::pname:maxDiscardRectangles
-****
-
-include::{generated}/validity/structs/VkPipelineDiscardRectangleStateCreateInfoEXT.txt[]
---
-
-[open,refpage='VkPipelineDiscardRectangleStateCreateFlagsEXT',desc='Reserved for future use',type='flags']
---
-include::{generated}/api/flags/VkPipelineDiscardRectangleStateCreateFlagsEXT.txt[]
-
-tname:VkPipelineDiscardRectangleStateCreateFlagsEXT is a bitmask type for
-setting a mask, but is currently reserved for future use.
---
-
-[open,refpage='VkDiscardRectangleModeEXT',desc='Specify the discard rectangle mode',type='enums']
---
-ename:VkDiscardRectangleModeEXT values are:
-
-include::{generated}/api/enums/VkDiscardRectangleModeEXT.txt[]
-
-  * ename:VK_DISCARD_RECTANGLE_MODE_INCLUSIVE_EXT specifies that the discard
-    rectangle test is inclusive.
-  * ename:VK_DISCARD_RECTANGLE_MODE_EXCLUSIVE_EXT specifies that the discard
-    rectangle test is exclusive.
---
-
-[open,refpage='vkCmdSetDiscardRectangleEXT',desc='Set discard rectangles dynamically for a command buffer',type='protos']
---
-To <<pipelines-dynamic-state, dynamically set>> the discard rectangles,
-call:
-
-include::{generated}/api/protos/vkCmdSetDiscardRectangleEXT.txt[]
-
-  * pname:commandBuffer is the command buffer into which the command will be
-    recorded.
-  * pname:firstDiscardRectangle is the index of the first discard rectangle
-    whose state is updated by the command.
-  * pname:discardRectangleCount is the number of discard rectangles whose
-    state are updated by the command.
-  * pname:pDiscardRectangles is a pointer to an array of slink:VkRect2D
-    structures specifying discard rectangles.
-
-The discard rectangle taken from element [eq]#i# of pname:pDiscardRectangles
-replace the current state for the discard rectangle at index
-[eq]#pname:firstDiscardRectangle {plus} i#, for [eq]#i# in [eq]#[0,
-pname:discardRectangleCount)#.
-
-This command sets the discard rectangles for subsequent drawing commands
-when the graphics pipeline is created with
-ename:VK_DYNAMIC_STATE_DISCARD_RECTANGLE_EXT set in
-slink:VkPipelineDynamicStateCreateInfo::pname:pDynamicStates.
-Otherwise, this state is specified by the
-slink:VkPipelineDiscardRectangleStateCreateInfoEXT::pname:pDiscardRectangles
-values used to create the currently active pipeline.
-
-.Valid Usage
-****
-  * [[VUID-vkCmdSetDiscardRectangleEXT-firstDiscardRectangle-00585]]
-    The sum of pname:firstDiscardRectangle and pname:discardRectangleCount
-    must: be less than or equal to
-    slink:VkPhysicalDeviceDiscardRectanglePropertiesEXT::pname:maxDiscardRectangles
-  * [[VUID-vkCmdSetDiscardRectangleEXT-x-00587]]
-    The pname:x and pname:y member of pname:offset in each slink:VkRect2D
-    element of pname:pDiscardRectangles must: be greater than or equal to
-    `0`
-  * [[VUID-vkCmdSetDiscardRectangleEXT-offset-00588]]
-    Evaluation of [eq]#(pname:offset.x {plus} pname:extent.width)# in each
-    slink:VkRect2D element of pname:pDiscardRectangles must: not cause a
-    signed integer addition overflow
-  * [[VUID-vkCmdSetDiscardRectangleEXT-offset-00589]]
-    Evaluation of [eq]#(pname:offset.y {plus} pname:extent.height)# in each
-    slink:VkRect2D element of pname:pDiscardRectangles must: not cause a
-    signed integer addition overflow
-ifdef::VK_NV_inherited_viewport_scissor[]
-  * [[VUID-vkCmdSetDiscardRectangleEXT-viewportScissor2D-04788]]
-    If this command is recorded in a secondary command buffer with
-    slink:VkCommandBufferInheritanceViewportScissorInfoNV::pname:viewportScissor2D
-    enabled, then this function must: not be called
-endif::VK_NV_inherited_viewport_scissor[]
-****
-
-include::{generated}/validity/protos/vkCmdSetDiscardRectangleEXT.txt[]
---
-endif::VK_EXT_discard_rectangles[]
-
-
-[[fragops-scissor]]
-== Scissor Test
-
-The scissor test compares the framebuffer coordinates [eq]#(x~f~,y~f~)# of
-each sample covered by a fragment against a _scissor rectangle_ at the index
-equal to the fragment's <<interfaces-builtin-variables-viewportindex,
-code:ViewportIndex>>.
-
-Each scissor rectangle is defined by a slink:VkRect2D.
-These values are either set by the slink:VkPipelineViewportStateCreateInfo
-structure during pipeline creation, or dynamically by the
-flink:vkCmdSetScissor command.
-
-A given sample is considered inside a scissor rectangle if [eq]#x~f~# is in
-the range [eq]#[slink:VkRect2D::offset.x, slink:VkRect2D::offset.x {plus}
-slink:VkRect2D::extent.x)#, and [eq]#y~f~# is in the range
-[eq]#[slink:VkRect2D::offset.y, slink:VkRect2D::offset.y {plus}
-slink:VkRect2D::extent.y)#.
-Samples with coordinates outside the scissor rectangle at the corresponding
-code:ViewportIndex will have their coverage set to `0`.
-
-ifdef::VK_QCOM_render_pass_transform[]
-If a render pass transform is enabled, the (pname:offset.x and
-pname:offset.y) and (pname:extent.width and pname:extent.height) values are
-transformed as described in <<vertexpostproc-renderpass-transform, render
-pass transform>> before participating in the scissor test.
-endif::VK_QCOM_render_pass_transform[]
-
-[open,refpage='vkCmdSetScissor',desc='Set scissor rectangles dynamically for a command buffer',type='protos']
---
-To <<pipelines-dynamic-state, dynamically set>> the scissor rectangles,
-call:
-
-include::{generated}/api/protos/vkCmdSetScissor.txt[]
-
-  * pname:commandBuffer is the command buffer into which the command will be
-    recorded.
-  * pname:firstScissor is the index of the first scissor whose state is
-    updated by the command.
-  * pname:scissorCount is the number of scissors whose rectangles are
-    updated by the command.
-  * pname:pScissors is a pointer to an array of slink:VkRect2D structures
-    defining scissor rectangles.
-
-The scissor rectangles taken from element [eq]#i# of pname:pScissors replace
-the current state for the scissor index [eq]#pname:firstScissor {plus} i#,
-for [eq]#i# in [eq]#[0, pname:scissorCount)#.
-
-This command sets the scissor rectangles for subsequent drawing commands
-when the graphics pipeline is created with ename:VK_DYNAMIC_STATE_SCISSOR
-set in slink:VkPipelineDynamicStateCreateInfo::pname:pDynamicStates.
-Otherwise, this state is specified by the
-slink:VkPipelineViewportStateCreateInfo::pname:pScissors values used to
-create the currently active pipeline.
-
-.Valid Usage
-****
-  * [[VUID-vkCmdSetScissor-firstScissor-00592]]
-    The sum of pname:firstScissor and pname:scissorCount must: be between
-    `1` and sname:VkPhysicalDeviceLimits::pname:maxViewports, inclusive
-  * [[VUID-vkCmdSetScissor-firstScissor-00593]]
-    If the <<features-multiViewport,multiple viewports>> feature is not
-    enabled, pname:firstScissor must: be `0`
-  * [[VUID-vkCmdSetScissor-scissorCount-00594]]
-    If the <<features-multiViewport,multiple viewports>> feature is not
-    enabled, pname:scissorCount must: be `1`
-  * [[VUID-vkCmdSetScissor-x-00595]]
-    The pname:x and pname:y members of pname:offset member of any element of
-    pname:pScissors must: be greater than or equal to `0`
-  * [[VUID-vkCmdSetScissor-offset-00596]]
-    Evaluation of [eq]#(pname:offset.x {plus} pname:extent.width)# must: not
-    cause a signed integer addition overflow for any element of
-    pname:pScissors
-  * [[VUID-vkCmdSetScissor-offset-00597]]
-    Evaluation of [eq]#(pname:offset.y {plus} pname:extent.height)# must:
-    not cause a signed integer addition overflow for any element of
-    pname:pScissors
-ifdef::VK_NV_inherited_viewport_scissor[]
-  * [[VUID-vkCmdSetScissor-viewportScissor2D-04789]]
-    If this command is recorded in a secondary command buffer with
-    slink:VkCommandBufferInheritanceViewportScissorInfoNV::pname:viewportScissor2D
-    enabled, then this function must: not be called
-endif::VK_NV_inherited_viewport_scissor[]
-****
-
-include::{generated}/validity/protos/vkCmdSetScissor.txt[]
---
-
-
-ifdef::VK_NV_scissor_exclusive[]
-[[fragops-exclusive-scissor]]
-== Exclusive Scissor Test
-
-The exclusive scissor test compares the framebuffer coordinates
-[eq]#(x~f~,y~f~)# of each sample covered by a fragment against an _exclusive
-scissor rectangle_ at the index equal to the fragment's
-<<interfaces-builtin-variables-viewportindex, code:ViewportIndex>>.
-
-Each exclusive scissor rectangle is defined by a slink:VkRect2D.
-These values are either set by the
-slink:VkPipelineViewportExclusiveScissorStateCreateInfoNV structure during
-pipeline creation, or dynamically by the flink:vkCmdSetExclusiveScissorNV
-command.
-
-A given sample is considered inside an exclusive scissor rectangle if
-[eq]#x~f~# is in the range [eq]#[slink:VkRect2D::offset.x,
-slink:VkRect2D::offset.x {plus} slink:VkRect2D::extent.x)#, and [eq]#y~f~#
-is in the range [eq]#[slink:VkRect2D::offset.y, slink:VkRect2D::offset.y
-{plus} slink:VkRect2D::extent.y)#.
-Samples with coordinates inside the exclusive scissor rectangle at the
-corresponding code:ViewportIndex will have their coverage set to `0`.
-
-If no exclusive scissor rectangles are specified, the coverage mask is
-unmodified by this operation.
-
-[open,refpage='VkPipelineViewportExclusiveScissorStateCreateInfoNV',desc='Structure specifying parameters controlling exclusive scissor testing',type='structs']
---
-The sname:VkPipelineViewportExclusiveScissorStateCreateInfoNV structure is
-defined as:
-
-include::{generated}/api/structs/VkPipelineViewportExclusiveScissorStateCreateInfoNV.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:exclusiveScissorCount is the number of exclusive scissor
-    rectangles.
-  * pname:pExclusiveScissors is a pointer to an array of slink:VkRect2D
-    structures defining exclusive scissor rectangles.
-
-If the ename:VK_DYNAMIC_STATE_EXCLUSIVE_SCISSOR_NV dynamic state is enabled
-for a pipeline, the pname:pExclusiveScissors member is ignored.
-
-When this structure is included in the pname:pNext chain of
-slink:VkGraphicsPipelineCreateInfo, it defines parameters of the exclusive
-scissor test.
-If this structure is not included in the pname:pNext chain, it is equivalent
-to specifying this structure with a pname:exclusiveScissorCount of `0`.
-
-.Valid Usage
-****
-  * [[VUID-VkPipelineViewportExclusiveScissorStateCreateInfoNV-exclusiveScissorCount-02027]]
-    If the <<features-multiViewport,multiple viewports>> feature is not
-    enabled, pname:exclusiveScissorCount must: be `0` or `1`
-  * [[VUID-VkPipelineViewportExclusiveScissorStateCreateInfoNV-exclusiveScissorCount-02028]]
-    pname:exclusiveScissorCount must: be less than or equal to
-    sname:VkPhysicalDeviceLimits::pname:maxViewports
-  * [[VUID-VkPipelineViewportExclusiveScissorStateCreateInfoNV-exclusiveScissorCount-02029]]
-    pname:exclusiveScissorCount must: be `0` or greater than or equal to the
-    pname:viewportCount member of slink:VkPipelineViewportStateCreateInfo
-
-****
-include::{generated}/validity/structs/VkPipelineViewportExclusiveScissorStateCreateInfoNV.txt[]
---
-
-[open,refpage='vkCmdSetExclusiveScissorNV',desc='Set exclusive scissor rectangles dynamically for a command buffer',type='protos']
---
-To <<pipelines-dynamic-state, dynamically set>> the exclusive scissor
-rectangles, call:
-
-include::{generated}/api/protos/vkCmdSetExclusiveScissorNV.txt[]
-
-  * pname:commandBuffer is the command buffer into which the command will be
-    recorded.
-  * pname:firstExclusiveScissor is the index of the first exclusive scissor
-    rectangle whose state is updated by the command.
-  * pname:exclusiveScissorCount is the number of exclusive scissor
-    rectangles updated by the command.
-  * pname:pExclusiveScissors is a pointer to an array of slink:VkRect2D
-    structures defining exclusive scissor rectangles.
-
-The scissor rectangles taken from element [eq]#i# of
-pname:pExclusiveScissors replace the current state for the scissor index
-[eq]#pname:firstExclusiveScissor {plus} i#, for [eq]#i# in [eq]#[0,
-pname:exclusiveScissorCount)#.
-
-This command sets the exclusive scissor rectangles for subsequent drawing
-commands when the graphics pipeline is created with
-ename:VK_DYNAMIC_STATE_EXCLUSIVE_SCISSOR_NV set in
-slink:VkPipelineDynamicStateCreateInfo::pname:pDynamicStates.
-Otherwise, this state is specified by the
-slink:VkPipelineViewportExclusiveScissorStateCreateInfoNV::pname:pExclusiveScissors
-values used to create the currently active pipeline.
-
-.Valid Usage
-****
-  * [[VUID-vkCmdSetExclusiveScissorNV-None-02031]]
-    The <<features-exclusiveScissor,exclusive scissor>> feature must: be
-    enabled
-  * [[VUID-vkCmdSetExclusiveScissorNV-firstExclusiveScissor-02034]]
-    The sum of pname:firstExclusiveScissor and pname:exclusiveScissorCount
-    must: be between `1` and
-    sname:VkPhysicalDeviceLimits::pname:maxViewports, inclusive
-  * [[VUID-vkCmdSetExclusiveScissorNV-firstExclusiveScissor-02035]]
-    If the <<features-multiViewport,multiple viewports>> feature is not
-    enabled, pname:firstExclusiveScissor must: be `0`
-  * [[VUID-vkCmdSetExclusiveScissorNV-exclusiveScissorCount-02036]]
-    If the <<features-multiViewport,multiple viewports>> feature is not
-    enabled, pname:exclusiveScissorCount must: be `1`
-  * [[VUID-vkCmdSetExclusiveScissorNV-x-02037]]
-    The pname:x and pname:y members of pname:offset in each member of
-    pname:pExclusiveScissors must: be greater than or equal to `0`
-  * [[VUID-vkCmdSetExclusiveScissorNV-offset-02038]]
-    Evaluation of [eq]#(pname:offset.x {plus} pname:extent.width)# for each
-    member of pname:pExclusiveScissors must: not cause a signed integer
-    addition overflow
-  * [[VUID-vkCmdSetExclusiveScissorNV-offset-02039]]
-    Evaluation of [eq]#(pname:offset.y {plus} pname:extent.height)# for each
-    member of pname:pExclusiveScissors must: not cause a signed integer
-    addition overflow
-****
-
-include::{generated}/validity/protos/vkCmdSetExclusiveScissorNV.txt[]
---
-endif::VK_NV_scissor_exclusive[]
-
-
-[[fragops-samplemask]]
-== Sample Mask Test
-
-The sample mask test compares the <<primsrast-multisampling-coverage-mask,
-coverage mask>> for a fragment with the _sample mask_ defined by
-slink:VkPipelineMultisampleStateCreateInfo::pname:pSampleMask.
-
-Each bit of the coverage mask is associated with a sample index as described
-in the <<primsrast-multisampling-coverage-mask, rasterization chapter>>.
-If the bit in slink:VkPipelineMultisampleStateCreateInfo::pname:pSampleMask
-which is associated with that same sample index is set to `0`, the coverage
-mask bit is set to `0`.
-
-
-[[fragops-shader]]
-== Fragment Shading
-
-<<shaders-fragment, Fragment shaders>> are invoked for each fragment, or as
-<<shaders-helper-invocations, helper invocations>>.
-
-Most operations in the fragment shader are not performed in
-<<primsrast-order, rasterization order>>, with exceptions called out in the
-following sections.
-
-For fragment shaders invoked by fragments, the following rules apply:
-
-  * A fragment shader must: not be executed if a <<fragops, fragment
-    operation>> that executes before fragment shading discards the fragment.
-  * A fragment shader may: not be executed if:
-  ** An implementation determines that another fragment shader, invoked by a
-     subsequent primitive in <<drawing-primitive-order, primitive order>>,
-     overwrites all results computed by the shader (including writes to
-     storage resources).
-  ** Any other <<fragops, fragment operation>> discards the fragment, and
-     the shader does not write to any storage resources.
-  * Otherwise, at least one fragment shader must: be executed.
-  ** If <<primsrast-sampleshading,sample shading>> is enabled and multiple
-     invocations per fragment are required:, additional invocations must: be
-     executed as specified.
-ifdef::VK_NV_shading_rate_image[]
-  ** If a <<primsrast-shading-rate-image,shading rate image>> is used and
-     multiple invocations per fragment are required:, additional invocations
-     must: be executed as specified.
-endif::VK_NV_shading_rate_image[]
-  ** Each covered sample must: be included in at least one fragment shader
-     invocation.
-
-
-[NOTE]
-.Note
-====
-Multiple fragment shader invocations may be executed for the same fragment
-for any number of implementation-dependent reasons.
-When there is more than one fragment shader invocation per fragment, the
-association of samples to invocations is implementation-dependent.
-Stores and atomics performed by these additional invocations have the normal
-effect.
-
-ifdef::VK_VERSION_1_1,VK_KHR_multiview[]
-For example, if the subpass includes multiple views in its view mask, a
-fragment shader may be invoked separately for each view.
-endif::VK_VERSION_1_1,VK_KHR_multiview[]
-
-ifdef::VK_EXT_fragment_density_map[]
-Similarly, if the render pass has a fragment density map attachment, more
-than one fragment shader invocation may be invoked for each covered sample.
-Such additional invocations are only produced if
-sname:VkPhysicalDeviceFragmentDensityMapPropertiesEXT::pname:fragmentDensityInvocations
-is ename:VK_TRUE.
-Implementations may generate these additional fragment shader invocations in
-order to make transitions between fragment areas with different fragment
-densities more smooth.
-endif::VK_EXT_fragment_density_map[]
-====
-
-
-[[fragops-shader-samplemask]]
-=== Sample Mask
-
-Reading from the <<interfaces-builtin-variables-samplemask,
-code:SampleMask>> built-in in the code:Input storage class will return the
-coverage mask for the current fragment as calculated by fragment operations
-that executed prior to fragment shading.
-
-If <<primsrast-sampleshading, sample shading>> is enabled, fragment shaders
-will only see values of `1` for samples being shaded - other bits will be
-`0`.
-
-Each bit of the coverage mask is associated with a sample index as described
-in the <<primsrast-multisampling-coverage-mask, rasterization chapter>>.
-If the bit in code:SampleMask which is associated with that same sample
-index is set to `0`, that coverage mask bit is set to `0`.
-
-Values written to the <<interfaces-builtin-variables-samplemask,
-code:SampleMask>> built-in in the code:Output storage class will be used by
-the <<fragops-covg, multisample coverage>> operation, with the same encoding
-as the input built-in.
-
-
-[[fragops-shader-depthreplacement]]
-=== Depth Replacement
-
-Writing to the <<interfaces-builtin-variables-fragdepth,code:FragDepth>>
-built-in will replace the fragment's calculated depth values for each sample
-in the input code:SampleMask.
-<<fragops-depth, Depth testing>> performed after the fragment shader for
-this fragment will use this new value as [eq]#z~f~#.
-
-
-ifdef::VK_EXT_shader_stencil_export[]
-[[fragops-shader-stencilrefreplacement]]
-=== Stencil Reference Replacement
-
-Writing to the
-<<interfaces-builtin-variables-fragdepth,code:FragStencilRefEXT>> built-in
-will replace the fragment's stencil reference value for each sample in the
-input code:SampleMask.
-<<fragops-stencil, Stencil testing>> performed after the fragment shader for
-this fragment will use this new value as [eq]#s~r~#.
-endif::VK_EXT_shader_stencil_export[]
-
-
-ifdef::VK_EXT_fragment_shader_interlock[]
-[[fragops-shader-interlock]]
-=== Interlocked Operations
-
-code:OpBeginInvocationInterlockEXT and code:OpEndInvocationInterlockEXT
-define a section of a fragment shader which imposes additional ordering
-constraints on operations performed within them.
-These operations are defined as _interlocked operations_.
-How interlocked operations are ordered against other fragment shader
-invocations depends on the specified execution modes.
-
-ifdef::VK_NV_shading_rate_image,VK_KHR_fragment_shading_rate[]
-If the code:ShadingRateInterlockOrderedEXT execution mode is specified, any
-interlocked operations in a fragment shader must: happen before interlocked
-operations in fragment shader invocations that execute later in
-<<primsrast-order, rasterization order>> and cover at least one sample in
-the same fragment area, and must: happen after interlocked operations in a
-fragment shader that executes earlier in <<primsrast-order, rasterization
-order>> and cover at least one sample in the same fragment area.
-
-If the code:ShadingRateInterlockUnorderedEXT execution mode is specified,
-any interlocked operations in a fragment shader must: happen before or after
-interlocked operations in fragment shader invocations that execute earlier
-or later in <<primsrast-order, rasterization order>> and cover at least one
-sample in the same fragment area.
-endif::VK_NV_shading_rate_image,VK_KHR_fragment_shading_rate[]
-
-If the code:PixelInterlockOrderedEXT execution mode is specified, any
-interlocked operations in a fragment shader must: happen before interlocked
-operations in fragment shader invocations that execute later in
-<<primsrast-order, rasterization order>> and cover at least one sample in
-the same pixel, and must: happen after interlocked operations in a fragment
-shader that executes earlier in <<primsrast-order, rasterization order>> and
-cover at least one sample in the same pixel.
-
-If the code:PixelInterlockUnorderedEXT execution mode is specified, any
-interlocked operations in a fragment shader must: happen before or after
-interlocked operations in fragment shader invocations that execute earlier
-or later in <<primsrast-order, rasterization order>> and cover at least one
-sample in the same pixel.
-
-If the code:SampleInterlockOrderedEXT execution mode is specified, any
-interlocked operations in a fragment shader must: happen before interlocked
-operations in fragment shader invocations that execute later in
-<<primsrast-order, rasterization order>> and cover at least one of the same
-samples, and must: happen after interlocked operations in a fragment shader
-that executes earlier in <<primsrast-order, rasterization order>> and cover
-at least one of the same samples.
-
-If the code:SampleInterlockUnorderedEXT execution mode is specified, any
-interlocked operations in a fragment shader must: happen before or after
-interlocked operations in fragment shader invocations that execute earlier
-or later in <<primsrast-order, rasterization order>> and cover at least one
-of the same samples.
-endif::VK_EXT_fragment_shader_interlock[]
-
-
-[[fragops-covg]]
-== Multisample Coverage
-
-If a fragment shader is active and its entry point's interface includes a
-built-in output variable decorated with code:SampleMask,
-ifdef::VK_NV_sample_mask_override_coverage[]
-but not code:OverrideCoverageNV,
-endif::VK_NV_sample_mask_override_coverage[]
-the coverage mask is code:ANDed with the bits of the code:SampleMask
-built-in to generate a new coverage mask.
-ifdef::VK_NV_sample_mask_override_coverage[]
-If the code:SampleMask built-in is also decorated with
-code:OverrideCoverageNV, the coverage mask is replaced with the mask bits
-set in the shader.
-endif::VK_NV_sample_mask_override_coverage[]
-If <<primsrast-sampleshading,sample shading>> is enabled, bits written to
-code:SampleMask corresponding to samples that are not being shaded by the
-fragment shader invocation are ignored.
-If no fragment shader is active, or if the active fragment shader does not
-include code:SampleMask in its interface, the coverage mask is not modified.
-
-Next, the fragment alpha value and coverage mask are modified based on the
-ifdef::VK_EXT_line_rasterization[]
-line coverage factor if the pname:lineRasterizationMode member of the
-slink:VkPipelineRasterizationStateCreateInfo structure is
-ename:VK_LINE_RASTERIZATION_MODE_RECTANGULAR_SMOOTH_EXT, and the
-endif::VK_EXT_line_rasterization[]
-pname:alphaToCoverageEnable and pname:alphaToOneEnable members of the
-slink:VkPipelineMultisampleStateCreateInfo structure.
-
-All alpha values in this section refer only to the alpha component of the
-fragment shader output that has a code:Location and code:Index decoration of
-zero (see the <<interfaces-fragmentoutput,Fragment Output Interface>>
-section).
-If that shader output has an integer or unsigned integer type, then these
-operations are skipped.
-
-ifdef::VK_EXT_line_rasterization[]
-If the pname:lineRasterizationMode member of the
-slink:VkPipelineRasterizationStateCreateInfo structure is
-ename:VK_LINE_RASTERIZATION_MODE_RECTANGULAR_SMOOTH_EXT and the fragment
-came from a line segment, then the alpha value is replaced by multiplying it
-by the coverage factor for the fragment computed during
-<<primsrast-lines-smooth,smooth line rasterization>>.
-endif::VK_EXT_line_rasterization[]
-
-If pname:alphaToCoverageEnable is enabled, a temporary coverage mask is
-generated where each bit is determined by the fragment's alpha value, which
-is ANDed with the fragment coverage mask.
-
-No specific algorithm is specified for converting the alpha value to a
-temporary coverage mask.
-It is intended that the number of 1's in this value be proportional to the
-alpha value (clamped to [eq]#[0,1]#), with all 1's corresponding to a value
-of 1.0 and all 0's corresponding to 0.0.
-The algorithm may: be different at different framebuffer coordinates.
-
-[NOTE]
-.Note
-====
-Using different algorithms at different framebuffer coordinates may: help to
-avoid artifacts caused by regular coverage sample locations.
-====
-
-Finally, if pname:alphaToOneEnable is enabled, each alpha value is replaced
-by the maximum representable alpha value for fixed-point color buffers, or
-by 1.0 for floating-point buffers.
-Otherwise, the alpha values are not changed.
-
-
-[[fragops-ds-state]]
-== Depth and Stencil Operations
-
-Pipeline state controlling the <<fragops-dbt,depth bounds tests>>,
-<<fragops-stencil,stencil test>>, and <<fragops-depth,depth test>> is
-specified through the members of the
-sname:VkPipelineDepthStencilStateCreateInfo structure.
-
-[open,refpage='VkPipelineDepthStencilStateCreateInfo',desc='Structure specifying parameters of a newly created pipeline depth stencil state',type='structs']
---
-The sname:VkPipelineDepthStencilStateCreateInfo structure is defined as:
-
-include::{generated}/api/structs/VkPipelineDepthStencilStateCreateInfo.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:flags is reserved for future use.
-  * pname:depthTestEnable controls whether <<fragops-depth,depth testing>>
-    is enabled.
-  * pname:depthWriteEnable controls whether <<fragops-depth-write,depth
-    writes>> are enabled when pname:depthTestEnable is ename:VK_TRUE.
-    Depth writes are always disabled when pname:depthTestEnable is
-    ename:VK_FALSE.
-  * pname:depthCompareOp is the comparison operator used in the
-    <<fragops-depth,depth test>>.
-  * pname:depthBoundsTestEnable controls whether <<fragops-dbt,depth bounds
-    testing>> is enabled.
-  * pname:stencilTestEnable controls whether <<fragops-stencil,stencil
-    testing>> is enabled.
-  * pname:front and pname:back control the parameters of the
-    <<fragops-stencil,stencil test>>.
-  * pname:minDepthBounds is the minimum depth bound used in the
-    <<fragops-dbt, depth bounds test>>.
-  * pname:maxDepthBounds is the maximum depth bound used in the
-    <<fragops-dbt, depth bounds test>>.
-
-.Valid Usage
-****
-  * [[VUID-VkPipelineDepthStencilStateCreateInfo-depthBoundsTestEnable-00598]]
-    If the <<features-depthBounds,depth bounds testing>> feature is not
-    enabled, pname:depthBoundsTestEnable must: be ename:VK_FALSE
-ifdef::VK_KHR_portability_subset[]
-  * [[VUID-VkPipelineDepthStencilStateCreateInfo-separateStencilMaskRef-04453]]
-    If the `apiext:VK_KHR_portability_subset` extension is enabled, and
-    slink:VkPhysicalDevicePortabilitySubsetFeaturesKHR::pname:separateStencilMaskRef
-    is ename:VK_FALSE, and the value of
-    slink:VkPipelineDepthStencilStateCreateInfo::pname:stencilTestEnable is
-    ename:VK_TRUE, and the value of
-    slink:VkPipelineRasterizationStateCreateInfo::pname:cullMode is
-    ename:VK_CULL_MODE_NONE, the value of pname:reference in each of the
-    slink:VkStencilOpState structs in pname:front and pname:back must: be
-    the same
-endif::VK_KHR_portability_subset[]
-****
-
-include::{generated}/validity/structs/VkPipelineDepthStencilStateCreateInfo.txt[]
---
-
-[open,refpage='VkPipelineDepthStencilStateCreateFlags',desc='Reserved for future use',type='flags']
---
-include::{generated}/api/flags/VkPipelineDepthStencilStateCreateFlags.txt[]
-
-tname:VkPipelineDepthStencilStateCreateFlags is a bitmask type for setting a
-mask, but is currently reserved for future use.
---
-
-
-[[fragops-dbt]]
-== Depth Bounds Test
-
-The depth bounds test compares the depth value [eq]#z~a~# in the
-depth/stencil attachment at each sample's framebuffer coordinates
-[eq]#(x~f~,y~f~)# and <<primsrast-multisampling-coverage-mask, sample
-index>> [eq]#i# against a set of _depth bounds_.
-
-The depth bounds are determined by two floating point values defining a
-minimum (pname:minDepthBounds) and maximum (pname:maxDepthBounds) depth
-value.
-These values are either set by the
-slink:VkPipelineDepthStencilStateCreateInfo structure during pipeline
-creation, or dynamically by
-ifdef::VK_EXT_extended_dynamic_state[]
-flink:vkCmdSetDepthBoundsTestEnableEXT and
-endif::VK_EXT_extended_dynamic_state[]
-flink:vkCmdSetDepthBounds.
-
-A given sample is considered within the depth bounds if [eq]#z~a~# is in the
-range [eq]#[pname:minDepthBounds,pname:maxDepthBounds]#.
-Samples with depth attachment values outside of the depth bounds will have
-their coverage set to `0`.
-
-If the depth bounds test is disabled, or if there is no depth attachment,
-the coverage mask is unmodified by this operation.
-
-ifdef::VK_EXT_extended_dynamic_state[]
-[open,refpage='vkCmdSetDepthBoundsTestEnableEXT',desc='Set depth bounds test enable dynamically for a command buffer',type='protos']
---
-To <<pipelines-dynamic-state, dynamically enable or disable>> the depth
-bounds test, call:
-
-include::{generated}/api/protos/vkCmdSetDepthBoundsTestEnableEXT.txt[]
-
-  * pname:commandBuffer is the command buffer into which the command will be
-    recorded.
-  * pname:depthBoundsTestEnable specifies if the depth bounds test is
-    enabled.
-
-This command sets the depth bounds enable for subsequent drawing commands
-when the graphics pipeline is created with
-ename:VK_DYNAMIC_STATE_DEPTH_BOUNDS_TEST_ENABLE_EXT set in
-slink:VkPipelineDynamicStateCreateInfo::pname:pDynamicStates.
-Otherwise, this state is specified by the
-slink:VkPipelineDepthStencilStateCreateInfo::pname:depthBoundsTestEnable
-value used to create the currently active pipeline.
-
-.Valid Usage
-****
-  * [[VUID-vkCmdSetDepthBoundsTestEnableEXT-None-03349]]
-    The <<features-extendedDynamicState, extendedDynamicState>> feature
-    must: be enabled
-****
-
-include::{generated}/validity/protos/vkCmdSetDepthBoundsTestEnableEXT.txt[]
---
-endif::VK_EXT_extended_dynamic_state[]
-
-[open,refpage='vkCmdSetDepthBounds',desc='Set depth bounds range dynamically for a command buffer',type='protos']
---
-To <<pipelines-dynamic-state, dynamically set>> the depth bounds range,
-call:
-
-include::{generated}/api/protos/vkCmdSetDepthBounds.txt[]
-
-  * pname:commandBuffer is the command buffer into which the command will be
-    recorded.
-  * pname:minDepthBounds is the minimum depth bound.
-  * pname:maxDepthBounds is the maximum depth bound.
-
-This command sets the depth bounds range for subsequent drawing commands
-when the graphics pipeline is created with
-ename:VK_DYNAMIC_STATE_DEPTH_BOUNDS set in
-slink:VkPipelineDynamicStateCreateInfo::pname:pDynamicStates.
-Otherwise, this state is specified by the
-slink:VkPipelineDepthStencilStateCreateInfo::pname:minDepthBounds and
-slink:VkPipelineDepthStencilStateCreateInfo::pname:maxDepthBounds values
-used to create the currently active pipeline.
-
-.Valid Usage
-****
-ifdef::VK_EXT_depth_range_unrestricted[]
-  * [[VUID-vkCmdSetDepthBounds-minDepthBounds-00600]]
-    Unless the `apiext:VK_EXT_depth_range_unrestricted` extension is enabled
-    pname:minDepthBounds must: be between `0.0` and `1.0`, inclusive
-endif::VK_EXT_depth_range_unrestricted[]
-ifndef::VK_EXT_depth_range_unrestricted[]
-  * [[VUID-vkCmdSetDepthBounds-minDepthBounds-02508]]
-    pname:minDepthBounds must: be between `0.0` and `1.0`, inclusive
-endif::VK_EXT_depth_range_unrestricted[]
-ifdef::VK_EXT_depth_range_unrestricted[]
-  * [[VUID-vkCmdSetDepthBounds-maxDepthBounds-00601]]
-    Unless the `apiext:VK_EXT_depth_range_unrestricted` extension is enabled
-    pname:maxDepthBounds must: be between `0.0` and `1.0`, inclusive
-endif::VK_EXT_depth_range_unrestricted[]
-ifndef::VK_EXT_depth_range_unrestricted[]
-  * [[VUID-vkCmdSetDepthBounds-maxDepthBounds-02509]]
-    pname:maxDepthBounds must: be between `0.0` and `1.0`, inclusive
-endif::VK_EXT_depth_range_unrestricted[]
-****
-
-include::{generated}/validity/protos/vkCmdSetDepthBounds.txt[]
---
-
-
-[[fragops-stencil]]
-== Stencil Test
-
-The stencil test compares the stencil attachment value [eq]#s~a~# in the
-depth/stencil attachment at each sample's framebuffer coordinates
-[eq]#(x~f~,y~f~)# and <<primsrast-multisampling-coverage-mask, sample
-index>> [eq]#i# against a _stencil reference value_.
-
-ifdef::VK_EXT_fragment_density_map[]
-If the render pass has a fragment density map attachment and the fragment
-covers multiple pixels, there is an implementation-dependent association of
-coverage samples to stencil attachment samples within the fragment.
-However, if all samples in the fragment are covered, and the stencil
-attachment value is updated as a result of this test, all stencil attachment
-samples will be updated.
-endif::VK_EXT_fragment_density_map[]
-
-If the stencil test is not enabled, as specified by
-ifdef::VK_EXT_extended_dynamic_state[]
-flink:vkCmdSetStencilTestEnableEXT or
-endif::VK_EXT_extended_dynamic_state[]
-slink:VkPipelineDepthStencilStateCreateInfo::pname:stencilTestEnable, or if
-there is no stencil attachment, the coverage mask is unmodified by this
-operation.
-
-The stencil test is controlled by one of two sets of stencil-related state,
-the front stencil state and the back stencil state.
-Stencil tests and writes use the back stencil state when processing
-fragments generated by <<primsrast-polygons-basic,back-facing>>
-<<primsrast-polygons,polygons>>, and the front stencil state when processing
-fragments generated by <<primsrast-polygons-basic,front-facing polygons>> or
-any other primitives.
-
-The comparison performed is based on the elink:VkCompareOp, compare mask
-[eq]#s~c~# , and stencil reference value [eq]#s~r~# of the relevant state
-set.
-The compare mask and stencil reference value are set by either the
-slink:VkPipelineDepthStencilStateCreateInfo structure during pipeline
-creation, or by the flink:vkCmdSetStencilCompareMask and
-flink:vkCmdSetStencilReference commands respectively.
-The compare operation is set by slink:VkStencilOpState::pname:compareOp
-during pipeline creation.
-
-The stencil reference and attachment values [eq]#s~r~# and [eq]#s~a~# are
-each independently combined with the compare mask [eq]#s~c~# using a logical
-code:AND operation to create masked reference and attachment values
-[eq]#s'~r~# and [eq]#s'~a~#.
-[eq]#s'~r~# and [eq]#s'~a~# are used as [eq]#A# and [eq]#B#, respectively,
-in the operation specified by elink:VkCompareOp.
-
-If the comparison evaluates to false, the coverage for the sample is set to
-`0`.
-
-A new stencil value [eq]#s~g~# is generated according to a stencil operation
-defined by elink:VkStencilOp parameters set by
-ifdef::VK_EXT_extended_dynamic_state[]
-flink:vkCmdSetStencilOpEXT or
-endif::VK_EXT_extended_dynamic_state[]
-slink:VkPipelineDepthStencilStateCreateInfo.
-If the stencil test fails, pname:failOp defines the stencil operation used.
-If the stencil test passes however, the stencil op used is based on the
-<<fragops-depth, depth test>> - if it passes,
-slink:VkPipelineDepthStencilStateCreateInfo::pname:passOp is used, otherwise
-slink:VkPipelineDepthStencilStateCreateInfo::pname:depthFailOp is used.
-
-The stencil attachment value [eq]#s~a~# is then updated with the generated
-stencil value [eq]#s~g~# according to the write mask [eq]#s~w~# defined by
-slink:VkPipelineDepthStencilStateCreateInfo::pname:writeMask as:
-
-  {empty}:: [eq]#s~a~ = (s~a~ & ¬s~w~) | (s~g~ & s~w~)#
-
-If there is no stencil attachment, no value is written.
-
-ifdef::VK_EXT_extended_dynamic_state[]
-
-[open,refpage='vkCmdSetStencilTestEnableEXT',desc='Set stencil test enable dynamically for a command buffer',type='protos']
---
-To <<pipelines-dynamic-state, dynamically enable or disable>> the stencil
-test, call:
-
-include::{generated}/api/protos/vkCmdSetStencilTestEnableEXT.txt[]
-
-  * pname:commandBuffer is the command buffer into which the command will be
-    recorded.
-  * pname:stencilTestEnable specifies if the stencil test is enabled.
-
-This command sets the stencil test enable for subsequent drawing commands
-when the graphics pipeline is created with
-ename:VK_DYNAMIC_STATE_STENCIL_TEST_ENABLE_EXT set in
-slink:VkPipelineDynamicStateCreateInfo::pname:pDynamicStates.
-Otherwise, this state is specified by the
-slink:VkPipelineDepthStencilStateCreateInfo::pname:stencilTestEnable value
-used to create the currently active pipeline.
-
-.Valid Usage
-****
-  * [[VUID-vkCmdSetStencilTestEnableEXT-None-03350]]
-    The <<features-extendedDynamicState, extendedDynamicState>> feature
-    must: be enabled
-****
-
-include::{generated}/validity/protos/vkCmdSetStencilTestEnableEXT.txt[]
---
-
-[open,refpage='vkCmdSetStencilOpEXT',desc='Set stencil operation dynamically for a command buffer',type='protos']
---
-To <<pipelines-dynamic-state, dynamically set>> the stencil operation, call:
-
-include::{generated}/api/protos/vkCmdSetStencilOpEXT.txt[]
-
-  * pname:commandBuffer is the command buffer into which the command will be
-    recorded.
-  * pname:faceMask is a bitmask of elink:VkStencilFaceFlagBits specifying
-    the set of stencil state for which to update the stencil operation.
-  * pname:failOp is a elink:VkStencilOp value specifying the action
-    performed on samples that fail the stencil test.
-  * pname:passOp is a elink:VkStencilOp value specifying the action
-    performed on samples that pass both the depth and stencil tests.
-  * pname:depthFailOp is a elink:VkStencilOp value specifying the action
-    performed on samples that pass the stencil test and fail the depth test.
-  * pname:compareOp is a elink:VkCompareOp value specifying the comparison
-    operator used in the stencil test.
-
-This command sets the stencil operation for subsequent drawing commands when
-the graphics pipeline is created with ename:VK_DYNAMIC_STATE_STENCIL_OP_EXT
-set in slink:VkPipelineDynamicStateCreateInfo::pname:pDynamicStates.
-Otherwise, this state is specified by the corresponding
-sname:VkPipelineDepthStencilStateCreateInfo::pname:failOp, pname:passOp,
-pname:depthFailOp, and pname:compareOp values used to create the currently
-active pipeline, for both front and back faces.
-
-.Valid Usage
-****
-  * [[VUID-vkCmdSetStencilOpEXT-None-03351]]
-    The <<features-extendedDynamicState, extendedDynamicState>> feature
-    must: be enabled
-****
-
-include::{generated}/validity/protos/vkCmdSetStencilOpEXT.txt[]
---
-
-endif::VK_EXT_extended_dynamic_state[]
-
-[open,refpage='VkStencilOpState',desc='Structure specifying stencil operation state',type='structs']
---
-The sname:VkStencilOpState structure is defined as:
-
-include::{generated}/api/structs/VkStencilOpState.txt[]
-
-  * pname:failOp is a elink:VkStencilOp value specifying the action
-    performed on samples that fail the stencil test.
-  * pname:passOp is a elink:VkStencilOp value specifying the action
-    performed on samples that pass both the depth and stencil tests.
-  * pname:depthFailOp is a elink:VkStencilOp value specifying the action
-    performed on samples that pass the stencil test and fail the depth test.
-  * pname:compareOp is a elink:VkCompareOp value specifying the comparison
-    operator used in the stencil test.
-  * pname:compareMask selects the bits of the unsigned integer stencil
-    values participating in the stencil test.
-  * pname:writeMask selects the bits of the unsigned integer stencil values
-    updated by the stencil test in the stencil framebuffer attachment.
-  * pname:reference is an integer reference value that is used in the
-    unsigned stencil comparison.
-
-include::{generated}/validity/structs/VkStencilOpState.txt[]
---
-
-[open,refpage='vkCmdSetStencilCompareMask',desc='Set stencil compare mask dynamically for a command buffer',type='protos']
---
-To <<pipelines-dynamic-state, dynamically set>> the stencil compare mask
-call:
-
-include::{generated}/api/protos/vkCmdSetStencilCompareMask.txt[]
-
-  * pname:commandBuffer is the command buffer into which the command will be
-    recorded.
-  * pname:faceMask is a bitmask of elink:VkStencilFaceFlagBits specifying
-    the set of stencil state for which to update the compare mask.
-  * pname:compareMask is the new value to use as the stencil compare mask.
-
-This command sets the stencil compare mask for subsequent drawing commands
-when the graphics pipeline is created with
-ename:VK_DYNAMIC_STATE_STENCIL_COMPARE_MASK set in
-slink:VkPipelineDynamicStateCreateInfo::pname:pDynamicStates.
-Otherwise, this state is specified by the
-slink:VkPipelineDepthStencilStateCreateInfo::pname:compareMask value used to
-create the currently active pipeline, for both front and back faces.
-
-include::{generated}/validity/protos/vkCmdSetStencilCompareMask.txt[]
---
-
-[open,refpage='VkStencilFaceFlagBits',desc='Bitmask specifying sets of stencil state for which to update the compare mask',type='enums']
---
-ename:VkStencilFaceFlagBits values are:
-
-include::{generated}/api/enums/VkStencilFaceFlagBits.txt[]
-
-  * ename:VK_STENCIL_FACE_FRONT_BIT specifies that only the front set of
-    stencil state is updated.
-  * ename:VK_STENCIL_FACE_BACK_BIT specifies that only the back set of
-    stencil state is updated.
-  * ename:VK_STENCIL_FACE_FRONT_AND_BACK is the combination of
-    ename:VK_STENCIL_FACE_FRONT_BIT and ename:VK_STENCIL_FACE_BACK_BIT, and
-    specifies that both sets of stencil state are updated.
-
---
-
-[open,refpage='VkStencilFaceFlags',desc='Bitmask of VkStencilFaceFlagBits',type='flags']
---
-include::{generated}/api/flags/VkStencilFaceFlags.txt[]
-
-tname:VkStencilFaceFlags is a bitmask type for setting a mask of zero or
-more elink:VkStencilFaceFlagBits.
---
-
-[open,refpage='vkCmdSetStencilWriteMask',desc='Set stencil write mask dynamically for a command buffer',type='protos']
---
-To <<pipelines-dynamic-state, dynamically set>> the stencil write mask,
-call:
-
-include::{generated}/api/protos/vkCmdSetStencilWriteMask.txt[]
-
-  * pname:commandBuffer is the command buffer into which the command will be
-    recorded.
-  * pname:faceMask is a bitmask of elink:VkStencilFaceFlagBits specifying
-    the set of stencil state for which to update the write mask, as
-    described above for flink:vkCmdSetStencilCompareMask.
-  * pname:writeMask is the new value to use as the stencil write mask.
-
-This command sets the stencil write mask for subsequent drawing commands
-when the graphics pipeline is created with
-ename:VK_DYNAMIC_STATE_STENCIL_WRITE_MASK set in
-slink:VkPipelineDynamicStateCreateInfo::pname:pDynamicStates.
-Otherwise, this state is specified by the
-slink:VkPipelineDepthStencilStateCreateInfo::pname:writeMask value used to
-create the currently active pipeline, for both front and back faces.
-
-include::{generated}/validity/protos/vkCmdSetStencilWriteMask.txt[]
---
-
-[open,refpage='vkCmdSetStencilReference',desc='Set stencil reference value dynamically for a command buffer',type='protos']
---
-To <<pipelines-dynamic-state, dynamically set>> the stencil reference value,
-call:
-
-include::{generated}/api/protos/vkCmdSetStencilReference.txt[]
-
-  * pname:commandBuffer is the command buffer into which the command will be
-    recorded.
-  * pname:faceMask is a bitmask of elink:VkStencilFaceFlagBits specifying
-    the set of stencil state for which to update the reference value, as
-    described above for flink:vkCmdSetStencilCompareMask.
-  * pname:reference is the new value to use as the stencil reference value.
-
-This command sets the stencil reference value for subsequent drawing
-commands when the graphics pipeline is created with
-ename:VK_DYNAMIC_STATE_STENCIL_REFERENCE set in
-slink:VkPipelineDynamicStateCreateInfo::pname:pDynamicStates.
-Otherwise, this state is specified by the
-slink:VkPipelineDepthStencilStateCreateInfo::pname:reference value used to
-create the currently active pipeline, for both front and back faces.
-
-include::{generated}/validity/protos/vkCmdSetStencilReference.txt[]
---
-
-[open,refpage='VkCompareOp',desc='Stencil comparison function',type='enums']
---
-Possible values of slink:VkStencilOpState::pname:compareOp, specifying the
-stencil comparison function, are:
-
-include::{generated}/api/enums/VkCompareOp.txt[]
-
-  * ename:VK_COMPARE_OP_NEVER specifies that the test evaluates to false.
-  * ename:VK_COMPARE_OP_LESS specifies that the test evaluates [eq]#A < B#.
-  * ename:VK_COMPARE_OP_EQUAL specifies that the test evaluates [eq]#A = B#.
-  * ename:VK_COMPARE_OP_LESS_OR_EQUAL specifies that the test evaluates
-    [eq]#A {leq} B#.
-  * ename:VK_COMPARE_OP_GREATER specifies that the test evaluates [eq]#A >
-    B#.
-  * ename:VK_COMPARE_OP_NOT_EQUAL specifies that the test evaluates [eq]#A
-    {neq} B#.
-  * ename:VK_COMPARE_OP_GREATER_OR_EQUAL specifies that the test evaluates
-    [eq]#A {geq} B#.
-  * ename:VK_COMPARE_OP_ALWAYS specifies that the test evaluates to true.
---
-
-[open,refpage='VkStencilOp',desc='Stencil comparison function',type='enums']
---
-Possible values of the pname:failOp, pname:passOp, and pname:depthFailOp
-members of slink:VkStencilOpState, specifying what happens to the stored
-stencil value if this or certain subsequent tests fail or pass, are:
-
-include::{generated}/api/enums/VkStencilOp.txt[]
-
-  * ename:VK_STENCIL_OP_KEEP keeps the current value.
-  * ename:VK_STENCIL_OP_ZERO sets the value to 0.
-  * ename:VK_STENCIL_OP_REPLACE sets the value to pname:reference.
-  * ename:VK_STENCIL_OP_INCREMENT_AND_CLAMP increments the current value and
-    clamps to the maximum representable unsigned value.
-  * ename:VK_STENCIL_OP_DECREMENT_AND_CLAMP decrements the current value and
-    clamps to 0.
-  * ename:VK_STENCIL_OP_INVERT bitwise-inverts the current value.
-  * ename:VK_STENCIL_OP_INCREMENT_AND_WRAP increments the current value and
-    wraps to 0 when the maximum value would have been exceeded.
-  * ename:VK_STENCIL_OP_DECREMENT_AND_WRAP decrements the current value and
-    wraps to the maximum possible value when the value would go below 0.
-
-For purposes of increment and decrement, the stencil bits are considered as
-an unsigned integer.
---
-
-
-[[fragops-depth]]
-== Depth Test
-
-The depth test compares the depth value [eq]#z~a~# in the depth/stencil
-attachment at each sample's framebuffer coordinates [eq]#(x~f~,y~f~)# and
-<<primsrast-multisampling-coverage-mask, sample index>> [eq]#i# against the
-sample's depth value [eq]#z~f~#.
-If there is no depth attachment then the depth test is skipped.
-
-ifdef::VK_EXT_fragment_density_map[]
-If the render pass has a fragment density map attachment and the fragment
-covers multiple pixels, there is an implementation-dependent association of
-rasterization samples to depth attachment samples within the fragment.
-However, if all samples in the fragment are covered, and the depth
-attachment value is updated as a result of this test, all depth attachment
-samples will be updated.
-endif::VK_EXT_fragment_density_map[]
-
-The depth test occurs in three stages, as detailed in the following
-sections.
-
-=== Depth Clamping and Range Adjustment
-
-If slink:VkPipelineRasterizationStateCreateInfo::pname:depthClampEnable is
-enabled, before the sample's [eq]#z~f~# is compared to [eq]#z~a~#,
-[eq]#z~f~# is clamped to [eq]#[min(n,f),max(n,f)]#, where [eq]#n# and
-[eq]#f# are the pname:minDepth and pname:maxDepth depth range values of the
-viewport used by this fragment, respectively.
-
-If depth clamping is not enabled and [eq]#z~f~# is not in the range [eq]#[0,
-1]#
-ifdef::VK_EXT_depth_range_unrestricted[]
-and either apiext:VK_EXT_depth_range_unrestricted is not enabled, or the
-depth attachment has a fixed-point format,
-endif::VK_EXT_depth_range_unrestricted[]
-then [eq]#z~f~# is undefined: following this step.
-
-
-=== Depth Comparison
-
-If the depth test is not enabled, as specified by
-ifdef::VK_EXT_extended_dynamic_state[]
-flink:vkCmdSetDepthTestEnableEXT or
-endif::VK_EXT_extended_dynamic_state[]
-slink:VkPipelineDepthStencilStateCreateInfo::pname:depthTestEnable, then
-this step is skipped.
-
-The comparison performed is based on the elink:VkCompareOp, set by
-ifdef::VK_EXT_extended_dynamic_state[]
-flink:vkCmdSetDepthCompareOpEXT or
-endif::VK_EXT_extended_dynamic_state[]
-slink:VkPipelineDepthStencilStateCreateInfo::pname:depthCompareOp during
-pipeline creation.
-[eq]#z~f~# and [eq]#z~a~# are used as [eq]#A# and [eq]#B#, respectively, in
-the operation specified by the elink:VkCompareOp.
-
-If the comparison evaluates to false, the coverage for the sample is set to
-`0`.
-
-
-[[fragops-depth-write]]
-=== Depth Buffer Writes
-
-If depth writes are enabled, as specified by
-ifdef::VK_EXT_extended_dynamic_state[]
-flink:vkCmdSetDepthWriteEnableEXT or
-endif::VK_EXT_extended_dynamic_state[]
-slink:VkPipelineDepthStencilStateCreateInfo::pname:depthWriteEnable, and the
-comparison evaluated to true, the depth attachment value [eq]#z~a~# is set
-to the sample's depth value [eq]#z~f~#.
-If there is no depth attachment, no value is written.
-
-
-
-ifdef::VK_EXT_extended_dynamic_state[]
-[open,refpage='vkCmdSetDepthTestEnableEXT',desc='Set depth test enable dynamically for a command buffer',type='protos']
---
-To <<pipelines-dynamic-state, dynamically enable or disable>> the depth
-test, call:
-
-include::{generated}/api/protos/vkCmdSetDepthTestEnableEXT.txt[]
-
-  * pname:commandBuffer is the command buffer into which the command will be
-    recorded.
-  * pname:depthTestEnable specifies if the depth test is enabled.
-
-This command sets the depth test enable for subsequent drawing commands when
-the graphics pipeline is created with
-ename:VK_DYNAMIC_STATE_DEPTH_TEST_ENABLE_EXT set in
-slink:VkPipelineDynamicStateCreateInfo::pname:pDynamicStates.
-Otherwise, this state is specified by the
-slink:VkPipelineDepthStencilStateCreateInfo::pname:depthTestEnable value
-used to create the currently active pipeline.
-
-.Valid Usage
-****
-  * [[VUID-vkCmdSetDepthTestEnableEXT-None-03352]]
-    The <<features-extendedDynamicState, extendedDynamicState>> feature
-    must: be enabled
-****
-
-include::{generated}/validity/protos/vkCmdSetDepthTestEnableEXT.txt[]
---
-
-[open,refpage='vkCmdSetDepthCompareOpEXT',desc='Set depth comparison operator dynamically for a command buffer',type='protos']
---
-To <<pipelines-dynamic-state, dynamically set>> the depth compare operator,
-call:
-
-include::{generated}/api/protos/vkCmdSetDepthCompareOpEXT.txt[]
-
-  * pname:commandBuffer is the command buffer into which the command will be
-    recorded.
-  * pname:depthCompareOp specifies the depth comparison operator.
-
-This command sets the depth comparison operator for subsequent drawing
-commands when the graphics pipeline is created with
-ename:VK_DYNAMIC_STATE_DEPTH_COMPARE_OP_EXT set in
-slink:VkPipelineDynamicStateCreateInfo::pname:pDynamicStates.
-Otherwise, this state is specified by the
-slink:VkPipelineDepthStencilStateCreateInfo::pname:depthCompareOp value used
-to create the currently active pipeline.
-
-.Valid Usage
-****
-  * [[VUID-vkCmdSetDepthCompareOpEXT-None-03353]]
-    The <<features-extendedDynamicState, extendedDynamicState>> feature
-    must: be enabled
-****
-
-include::{generated}/validity/protos/vkCmdSetDepthCompareOpEXT.txt[]
---
-
-[open,refpage='vkCmdSetDepthWriteEnableEXT',desc='Set depth write enable dynamically for a command buffer',type='protos']
---
-To <<pipelines-dynamic-state, dynamically set>> the depth write enable,
-call:
-
-include::{generated}/api/protos/vkCmdSetDepthWriteEnableEXT.txt[]
-
-  * pname:commandBuffer is the command buffer into which the command will be
-    recorded.
-  * pname:depthWriteEnable specifies if depth writes are enabled.
-
-This command sets the depth write enable for subsequent drawing commands
-when the graphics pipeline is created with
-ename:VK_DYNAMIC_STATE_DEPTH_WRITE_ENABLE_EXT set in
-slink:VkPipelineDynamicStateCreateInfo::pname:pDynamicStates.
-Otherwise, this state is specified by the
-slink:VkPipelineDepthStencilStateCreateInfo::pname:depthWriteEnable value
-used to create the currently active pipeline.
-
-.Valid Usage
-****
-  * [[VUID-vkCmdSetDepthWriteEnableEXT-None-03354]]
-    The <<features-extendedDynamicState, extendedDynamicState>> feature
-    must: be enabled
-****
-
-include::{generated}/validity/protos/vkCmdSetDepthWriteEnableEXT.txt[]
---
-endif::VK_EXT_extended_dynamic_state[]
-
-
-ifdef::VK_NV_representative_fragment_test[]
-[[fragops-rep-frag-test]]
-== Representative Fragment Test
-
-The representative fragment test allows implementations to reduce the amount
-of rasterization and fragment processing work performed for each point,
-line, or triangle primitive.
-For any primitive that produces one or more fragments that pass all prior
-early fragment tests, the implementation may: choose one or more
-"`representative`" fragments for processing and discard all other fragments.
-For draw calls rendering multiple points, lines, or triangles arranged in
-lists, strips, or fans, the representative fragment test is performed
-independently for each of those primitives.
-The set of fragments discarded by the representative fragment test is
-implementation-dependent.
-In some cases, the representative fragment test may not discard any
-fragments for a given primitive.
-
-[open,refpage='VkPipelineRepresentativeFragmentTestStateCreateInfoNV',desc='Structure specifying representative fragment test',type='structs']
---
-If the pname:pNext chain of slink:VkGraphicsPipelineCreateInfo includes a
-sname:VkPipelineRepresentativeFragmentTestStateCreateInfoNV structure, then
-that structure includes parameters that control the representative fragment
-test.
-
-The sname:VkPipelineRepresentativeFragmentTestStateCreateInfoNV structure is
-defined as:
-
-include::{generated}/api/structs/VkPipelineRepresentativeFragmentTestStateCreateInfoNV.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:representativeFragmentTestEnable controls whether the
-    representative fragment test is enabled.
-
-If this structure is not included in the pname:pNext chain,
-pname:representativeFragmentTestEnable is considered to be ename:VK_FALSE,
-and the representative fragment test is disabled.
-
-If the active fragment shader specifies the code:EarlyFragmentTests
-execution mode, the representative fragment shader test has no effect, even
-if enabled.
-
-include::{generated}/validity/structs/VkPipelineRepresentativeFragmentTestStateCreateInfoNV.txt[]
---
-
-endif::VK_NV_representative_fragment_test[]
-
-
-[[fragops-samplecount]]
-== Sample Counting
-
-Occlusion queries use query pool entries to track the number of samples that
-pass all the per-fragment tests.
-The mechanism of collecting an occlusion query value is described in
-<<queries-occlusion,Occlusion Queries>>.
-
-The occlusion query sample counter increments by one for each sample with a
-coverage value of 1 in each fragment that survives all the per-fragment
-tests, including scissor,
-ifdef::VK_NV_scissor_exclusive[]
-exclusive scissor,
-endif::VK_NV_scissor_exclusive[]
-sample mask, alpha to coverage, stencil, and depth tests.
-
-
-ifdef::VK_NV_fragment_coverage_to_color[]
-[[fragops-coverage-to-color]]
-== Fragment Coverage To Color
-
-[open,refpage='VkPipelineCoverageToColorStateCreateInfoNV',desc='Structure specifying whether fragment coverage replaces a color',type='structs']
---
-The sname:VkPipelineCoverageToColorStateCreateInfoNV structure is defined
-as:
-
-include::{generated}/api/structs/VkPipelineCoverageToColorStateCreateInfoNV.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:flags is reserved for future use.
-  * pname:coverageToColorEnable controls whether the fragment coverage value
-    replaces a fragment color output.
-  * pname:coverageToColorLocation controls which fragment shader color
-    output value is replaced.
-
-If the pname:pNext chain of slink:VkPipelineMultisampleStateCreateInfo
-includes a sname:VkPipelineCoverageToColorStateCreateInfoNV structure, then
-that structure controls whether the fragment coverage is substituted for a
-fragment color output and, if so, which output is replaced.
-
-If pname:coverageToColorEnable is ename:VK_TRUE, the
-<<primsrast-multisampling-coverage-mask, coverage mask>> replaces the first
-component of the color value corresponding to the fragment shader output
-location with code:Location equal to pname:coverageToColorLocation and
-code:Index equal to zero.
-If the color attachment format has fewer bits than the coverage mask, the
-low bits of the sample coverage mask are taken without any clamping.
-If the color attachment format has more bits than the coverage mask, the
-high bits of the sample coverage mask are filled with zeros.
-
-If pname:coverageToColorEnable is ename:VK_FALSE, these operations are
-skipped.
-If this structure is not included in the pname:pNext chain, it is as if
-pname:coverageToColorEnable is ename:VK_FALSE.
-
-.Valid Usage
-****
-  * [[VUID-VkPipelineCoverageToColorStateCreateInfoNV-coverageToColorEnable-01404]]
-    If pname:coverageToColorEnable is ename:VK_TRUE, then the render pass
-    subpass indicated by
-    slink:VkGraphicsPipelineCreateInfo::pname:renderPass and
-    slink:VkGraphicsPipelineCreateInfo::pname:subpass must: have a color
-    attachment at the location selected by pname:coverageToColorLocation,
-    with a elink:VkFormat of ename:VK_FORMAT_R8_UINT,
-    ename:VK_FORMAT_R8_SINT, ename:VK_FORMAT_R16_UINT,
-    ename:VK_FORMAT_R16_SINT, ename:VK_FORMAT_R32_UINT, or
-    ename:VK_FORMAT_R32_SINT
-****
-
-include::{generated}/validity/structs/VkPipelineCoverageToColorStateCreateInfoNV.txt[]
---
-
-[open,refpage='VkPipelineCoverageToColorStateCreateFlagsNV',desc='Reserved for future use',type='flags']
---
-include::{generated}/api/flags/VkPipelineCoverageToColorStateCreateFlagsNV.txt[]
-
-tname:VkPipelineCoverageToColorStateCreateFlagsNV is a bitmask type for
-setting a mask, but is currently reserved for future use.
---
-endif::VK_NV_fragment_coverage_to_color[]
-
-
-[[fragops-coverage-reduction]]
-== Coverage Reduction
-
-Coverage reduction takes the coverage information for a fragment and
-converts that to a boolean coverage value for each color sample in each
-pixel covered by the fragment.
-
-
-=== Pixel Coverage
-
-Coverage for each pixel is first extracted from the total fragment coverage
-mask.
-This consists of pname:rasterizationSamples unique coverage samples for each
-pixel in the fragment area, each with a unique
-<<primsrast-multisampling-coverage-mask, sample index>>.
-If the fragment only contains a single pixel, coverage for the pixel is
-equivalent to the fragment coverage.
-
-ifdef::VK_EXT_fragment_density_map[]
-If the render pass has a fragment density map attachment and the fragment
-covers multiple pixels, pixel coverage is generated in an
-implementation-dependent manner.
-If all samples in the fragment are covered, all samples will be covered in
-each pixel coverage.
-endif::VK_EXT_fragment_density_map[]
-
-ifdef::VK_NV_shading_rate_image[]
-If a <<primsrast-shading-rate-image,shading rate image>> is used, and the
-fragment covers multiple pixels, each pixel's coverage consists of the
-coverage samples corresponding to that pixel, and each sample retains its
-unique <<primsrast-multisampling-coverage-mask, sample index [eq]#i#>>.
-endif::VK_NV_shading_rate_image[]
-
-ifdef::VK_KHR_fragment_shading_rate[]
-If the <<primsrast-fragment-shading-rate, fragment shading rate>> is set,
-and the fragment covers multiple pixels, each pixel's coverage consists of
-the coverage samples with a <<primsrast-multisampling-coverage-mask-vrfs,
-pixel index>> matching that pixel, and each sample retains its unique
-<<primsrast-multisampling-coverage-mask, sample index [eq]#i#>>.
-endif::VK_KHR_fragment_shading_rate[]
-
-=== Color Sample Coverage
-
-Once pixel coverage is determined, coverage for each individual color sample
-corresponding to that pixel is determined.
-
-ifdef::VK_AMD_mixed_attachment_samples,VK_NV_framebuffer_mixed_samples,VK_NV_coverage_reduction_mode[If the]
-ifndef::VK_AMD_mixed_attachment_samples,VK_NV_framebuffer_mixed_samples,VK_NV_coverage_reduction_mode[The]
-number of pname:rasterizationSamples is identical to the number of samples
-in the color attachments.
-A color sample is covered if the pixel coverage sample with the same
-<<primsrast-multisampling-coverage-mask, sample index>> [eq]#i# is covered.
-
-ifdef::VK_AMD_mixed_attachment_samples,VK_NV_framebuffer_mixed_samples,VK_NV_coverage_reduction_mode[]
-Otherwise, the coverage for each color sample is computed from the pixel
-coverage as follows.
-endif::VK_AMD_mixed_attachment_samples,VK_NV_framebuffer_mixed_samples,VK_NV_coverage_reduction_mode[]
-
-ifdef::VK_AMD_mixed_attachment_samples[]
-If the `apiext:VK_AMD_mixed_attachment_samples` extension is enabled, for
-color samples present in the color attachments, a color sample is covered if
-the pixel coverage sample with the same
-<<primsrast-multisampling-coverage-mask, sample index>> [eq]#i# is covered;
-additional pixel coverage samples are discarded.
-endif::VK_AMD_mixed_attachment_samples[]
-
-ifdef::VK_NV_framebuffer_mixed_samples[]
-
-ifndef::VK_NV_coverage_reduction_mode[]
-When the `apiext:VK_NV_framebuffer_mixed_samples` extension is enabled, if
-the pipeline's
-slink:VkPipelineMultisampleStateCreateInfo::pname:rasterizationSamples is
-greater than the slink:VkAttachmentDescription::pname:samples of the color
-attachments in the subpass, each color sample will be associated with an
-implementation-dependent subset of samples in the pixel coverage.
-If any of those associated samples are covered, the color sample is covered.
-endif::VK_NV_coverage_reduction_mode[]
-
-ifdef::VK_NV_coverage_reduction_mode[]
-When the `apiext:VK_NV_coverage_reduction_mode` extension is enabled, the
-pipeline state controlling coverage reduction is specified through the
-members of the sname:VkPipelineCoverageReductionStateCreateInfoNV structure.
-
-[open,refpage='VkPipelineCoverageReductionStateCreateInfoNV',desc='Structure specifying parameters controlling coverage reduction',type='structs']
---
-The sname:VkPipelineCoverageReductionStateCreateInfoNV structure is defined
-as:
-
-include::{generated}/api/structs/VkPipelineCoverageReductionStateCreateInfoNV.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:flags is reserved for future use.
-  * pname:coverageReductionMode is a elink:VkCoverageReductionModeNV value
-    controlling how color sample coverage is generated from pixel coverage.
-
-If this structure is not included in the pname:pNext chain, or if the
-extension is not enabled, the default coverage reduction mode is inferred as
-follows:
-
-  * If the `apiext:VK_NV_framebuffer_mixed_samples` extension is enabled,
-    then it is as if the pname:coverageReductionMode is
-    ename:VK_COVERAGE_REDUCTION_MODE_MERGE_NV.
-  * If the `apiext:VK_AMD_mixed_attachment_samples` extension is enabled,
-    then it is as if the pname:coverageReductionMode is
-    ename:VK_COVERAGE_REDUCTION_MODE_TRUNCATE_NV.
-  * If both `apiext:VK_NV_framebuffer_mixed_samples` and
-    `apiext:VK_AMD_mixed_attachment_samples` are enabled, then the default
-    coverage reduction mode is implementation-dependent.
-
-include::{generated}/validity/structs/VkPipelineCoverageReductionStateCreateInfoNV.txt[]
---
-
-[open,refpage='VkPipelineCoverageReductionStateCreateFlagsNV',desc='Reserved for future use',type='flags']
---
-include::{generated}/api/flags/VkPipelineCoverageReductionStateCreateFlagsNV.txt[]
-
-tname:VkPipelineCoverageReductionStateCreateFlagsNV is a bitmask type for
-setting a mask, but is currently reserved for future use.
---
-
-[open,refpage='VkCoverageReductionModeNV',desc='Specify the coverage reduction mode',type='enums']
---
-Possible values of
-slink:VkPipelineCoverageReductionStateCreateInfoNV::pname:coverageReductionMode,
-specifying how color sample coverage is generated from pixel coverage, are:
-
-include::{generated}/api/enums/VkCoverageReductionModeNV.txt[]
-
-  * ename:VK_COVERAGE_REDUCTION_MODE_MERGE_NV specifies that each color
-    sample will be associated with an implementation-dependent subset of
-    samples in the pixel coverage.
-    If any of those associated samples are covered, the color sample is
-    covered.
-  * ename:VK_COVERAGE_REDUCTION_MODE_TRUNCATE_NV specifies that for color
-    samples present in the color attachments, a color sample is covered if
-    the pixel coverage sample with the same
-    <<primsrast-multisampling-coverage-mask, sample index>> [eq]#i# is
-    covered; other pixel coverage samples are discarded.
---
-
-[open,refpage='vkGetPhysicalDeviceSupportedFramebufferMixedSamplesCombinationsNV',desc='Query supported sample count combinations',type='protos']
---
-To query the set of mixed sample combinations of coverage reduction mode,
-rasterization samples and color, depth, stencil attachment sample counts
-that are supported by a physical device, call:
-
-include::{generated}/api/protos/vkGetPhysicalDeviceSupportedFramebufferMixedSamplesCombinationsNV.txt[]
-
-  * pname:physicalDevice is the physical device from which to query the set
-    of combinations.
-  * pname:pCombinationCount is a pointer to an integer related to the number
-    of combinations available or queried, as described below.
-  * pname:pCombinations is either `NULL` or a pointer to an array of
-    slink:VkFramebufferMixedSamplesCombinationNV values, indicating the
-    supported combinations of coverage reduction mode, rasterization
-    samples, and color, depth, stencil attachment sample counts.
-
-If pname:pCombinations is `NULL`, then the number of supported combinations
-for the given pname:physicalDevice is returned in pname:pCombinationCount.
-Otherwise, pname:pCombinationCount must: point to a variable set by the user
-to the number of elements in the pname:pCombinations array, and on return
-the variable is overwritten with the number of values actually written to
-pname:pCombinations.
-If the value of pname:pCombinationCount is less than the number of
-combinations supported for the given pname:physicalDevice, at most
-pname:pCombinationCount values will be written to pname:pCombinations, and
-ename:VK_INCOMPLETE will be returned instead of ename:VK_SUCCESS, to
-indicate that not all the supported values were returned.
-
-include::{generated}/validity/protos/vkGetPhysicalDeviceSupportedFramebufferMixedSamplesCombinationsNV.txt[]
---
-
-[open,refpage='VkFramebufferMixedSamplesCombinationNV',desc='Structure specifying a supported sample count combination',type='structs']
---
-The sname:VkFramebufferMixedSamplesCombinationNV structure is defined as:
-
-include::{generated}/api/structs/VkFramebufferMixedSamplesCombinationNV.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:coverageReductionMode is a elink:VkCoverageReductionModeNV value
-    specifying the coverage reduction mode.
-  * pname:rasterizationSamples is a elink:VkSampleCountFlagBits specifying
-    the number of rasterization samples in the supported combination.
-  * pname:depthStencilSamples specifies the number of samples in the depth
-    stencil attachment in the supported combination.
-    A value of 0 indicates the combination does not have a depth stencil
-    attachment.
-  * pname:colorSamples specifies the number of color samples in a color
-    attachment in the supported combination.
-    A value of 0 indicates the combination does not have a color attachment.
-
-include::{generated}/validity/structs/VkFramebufferMixedSamplesCombinationNV.txt[]
---
-endif::VK_NV_coverage_reduction_mode[]
-
-
-[[fragops-coverage-modulation]]
-=== Coverage Modulation
-
-[open,refpage='VkPipelineCoverageModulationStateCreateInfoNV',desc='Structure specifying parameters controlling coverage modulation',type='structs']
---
-As part of coverage reduction, fragment color values can: also be modulated
-(multiplied) by a value that is a function of fraction of covered
-rasterization samples associated with that color sample.
-
-Pipeline state controlling coverage modulation is specified through the
-members of the sname:VkPipelineCoverageModulationStateCreateInfoNV
-structure.
-
-The sname:VkPipelineCoverageModulationStateCreateInfoNV structure is defined
-as:
-
-include::{generated}/api/structs/VkPipelineCoverageModulationStateCreateInfoNV.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:flags is reserved for future use.
-  * pname:coverageModulationMode is a elink:VkCoverageModulationModeNV value
-    controlling which color components are modulated.
-  * pname:coverageModulationTableEnable controls whether the modulation
-    factor is looked up from a table in pname:pCoverageModulationTable.
-  * pname:coverageModulationTableCount is the number of elements in
-    pname:pCoverageModulationTable.
-  * pname:pCoverageModulationTable is a table of modulation factors
-    containing a value for each number of covered samples.
-
-If pname:coverageModulationTableEnable is ename:VK_FALSE, then for each
-color sample the associated bits of the pixel coverage are counted and
-divided by the number of associated bits to produce a modulation factor
-[eq]#R# in the range [eq]#(0,1]# (a value of zero would have been killed due
-to a color coverage of 0).
-Specifically:
-
-  * [eq]#N# = value of pname:rasterizationSamples
-  * [eq]#M# = value of slink:VkAttachmentDescription::pname:samples for any
-    color attachments
-  * [eq]#R = popcount(associated coverage bits) / (N / M)#
-
-If pname:coverageModulationTableEnable is ename:VK_TRUE, the value [eq]#R#
-is computed using a programmable lookup table.
-The lookup table has [eq]#N / M# elements, and the element of the table is
-selected by:
-
-  * [eq]#R = pname:pCoverageModulationTable[popcount(associated coverage
-    bits)-1]#
-
-Note that the table does not have an entry for [eq]#popcount(associated
-coverage bits) = 0#, because such samples would have been killed.
-
-The values of pname:pCoverageModulationTable may: be rounded to an
-implementation-dependent precision, which is at least as fine as [eq]#1 /
-N#, and clamped to [eq]#[0,1]#.
-
-For each color attachment with a floating point or normalized color format,
-each fragment output color value is replicated to [eq]#M# values which can:
-each be modulated (multiplied) by that color sample's associated value of
-[eq]#R#.
-Which components are modulated is controlled by
-pname:coverageModulationMode.
-
-If this structure is not included in the pname:pNext chain, it is as if
-pname:coverageModulationMode is ename:VK_COVERAGE_MODULATION_MODE_NONE_NV.
-
-ifdef::VK_NV_coverage_reduction_mode[]
-If the <<fragops-coverage-reduction, coverage reduction mode>> is
-ename:VK_COVERAGE_REDUCTION_MODE_TRUNCATE_NV, each color sample is
-associated with only a single coverage sample.
-In this case, it is as if pname:coverageModulationMode is
-ename:VK_COVERAGE_MODULATION_MODE_NONE_NV.
-endif::VK_NV_coverage_reduction_mode[]
-
-.Valid Usage
-****
-  * [[VUID-VkPipelineCoverageModulationStateCreateInfoNV-coverageModulationTableEnable-01405]]
-    If pname:coverageModulationTableEnable is ename:VK_TRUE,
-    pname:coverageModulationTableCount must: be equal to the number of
-    rasterization samples divided by the number of color samples in the
-    subpass
-****
-
-include::{generated}/validity/structs/VkPipelineCoverageModulationStateCreateInfoNV.txt[]
---
-
-[open,refpage='VkPipelineCoverageModulationStateCreateFlagsNV',desc='Reserved for future use',type='flags']
---
-include::{generated}/api/flags/VkPipelineCoverageModulationStateCreateFlagsNV.txt[]
-
-tname:VkPipelineCoverageModulationStateCreateFlagsNV is a bitmask type for
-setting a mask, but is currently reserved for future use.
---
-
-[open,refpage='VkCoverageModulationModeNV',desc='Specify the coverage modulation mode',type='enums']
---
-Possible values of
-slink:VkPipelineCoverageModulationStateCreateInfoNV::pname:coverageModulationMode,
-specifying which color components are modulated, are:
-
-include::{generated}/api/enums/VkCoverageModulationModeNV.txt[]
-
-  * ename:VK_COVERAGE_MODULATION_MODE_NONE_NV specifies that no components
-    are multiplied by the modulation factor.
-  * ename:VK_COVERAGE_MODULATION_MODE_RGB_NV specifies that the red, green,
-    and blue components are multiplied by the modulation factor.
-  * ename:VK_COVERAGE_MODULATION_MODE_ALPHA_NV specifies that the alpha
-    component is multiplied by the modulation factor.
-  * ename:VK_COVERAGE_MODULATION_MODE_RGBA_NV specifies that all components
-    are multiplied by the modulation factor.
---
-
-endif::VK_NV_framebuffer_mixed_samples[]
diff --git a/registry/vulkan/chapters/framebuffer.txt b/registry/vulkan/chapters/framebuffer.txt
deleted file mode 100644
index c0f0820..0000000
--- a/registry/vulkan/chapters/framebuffer.txt
+++ /dev/null
@@ -1,705 +0,0 @@
-// Copyright 2015-2021 The Khronos Group, Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-[[framebuffer]]
-= The Framebuffer
-
-
-[[framebuffer-blending]]
-== Blending
-
-Blending combines the incoming _source_ fragment's R, G, B, and A values
-with the _destination_ R, G, B, and A values of each sample stored in the
-framebuffer at the fragment's [eq]#(x~f~,y~f~)# location.
-Blending is performed for each color sample covered by the fragment, rather
-than just once for each fragment.
-
-Source and destination values are combined according to the
-<<framebuffer-blendoperations,blend operation>>, quadruplets of source and
-destination weighting factors determined by the <<framebuffer-blendfactors,
-blend factors>>, and a <<framebuffer-blendconstants,blend constant>>, to
-obtain a new set of R, G, B, and A values, as described below.
-
-Blending is computed and applied separately to each color attachment used by
-the subpass, with separate controls for each attachment.
-
-Prior to performing the blend operation, signed and unsigned normalized
-fixed-point color components undergo an implied conversion to floating-point
-as specified by <<fundamentals-fixedfpconv,Conversion from Normalized
-Fixed-Point to Floating-Point>>.
-Blending computations are treated as if carried out in floating-point, and
-basic blend operations are performed with a precision and dynamic range no
-lower than that used to represent destination components.
-ifdef::VK_EXT_blend_operation_advanced[]
-<<framebuffer-blend-advanced,Advanced blending operations>> are performed
-with a precision and dynamic range no lower than the smaller of that used to
-represent destination components or that used to represent 16-bit
-floating-point values.
-endif::VK_EXT_blend_operation_advanced[]
-
-[NOTE]
-.Note
-====
-Blending is only defined for floating-point, UNORM, SNORM, and sRGB formats.
-Within those formats, the implementation may only support blending on some
-subset of them.
-Which formats support blending is indicated by
-ename:VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT.
-====
-
-The pipeline blend state is included in the
-sname:VkPipelineColorBlendStateCreateInfo structure during graphics pipeline
-creation:
-
-[open,refpage='VkPipelineColorBlendStateCreateInfo',desc='Structure specifying parameters of a newly created pipeline color blend state',type='structs']
---
-The sname:VkPipelineColorBlendStateCreateInfo structure is defined as:
-
-include::{generated}/api/structs/VkPipelineColorBlendStateCreateInfo.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:flags is reserved for future use.
-  * pname:logicOpEnable controls whether to apply <<framebuffer-logicop,
-    Logical Operations>>.
-  * pname:logicOp selects which logical operation to apply.
-  * pname:attachmentCount is the number of
-    sname:VkPipelineColorBlendAttachmentState elements in
-    pname:pAttachments.
-  * pname:pAttachments is a pointer to an array of per target attachment
-    states.
-  * pname:blendConstants is a pointer to an array of four values used as the
-    R, G, B, and A components of the blend constant that are used in
-    blending, depending on the <<framebuffer-blendfactors,blend factor>>.
-
-Each element of the pname:pAttachments array is a
-slink:VkPipelineColorBlendAttachmentState structure specifying per-target
-blending state for each individual color attachment.
-If the <<features-independentBlend,independent blending>> feature is not
-enabled on the device, all slink:VkPipelineColorBlendAttachmentState
-elements in the pname:pAttachments array must: be identical.
-
-The value of pname:attachmentCount must: be greater than the index of all
-color attachments that are not ename:VK_ATTACHMENT_UNUSED in
-sname:VkSubpassDescription::pname:pColorAttachments
-ifdef::VK_VERSION_1_2,VK_KHR_create_renderpass2[]
-or sname:VkSubpassDescription2::pname:pColorAttachments
-endif::VK_VERSION_1_2,VK_KHR_create_renderpass2[]
-for the subpass in which this pipeline is used.
-
-.Valid Usage
-****
-  * [[VUID-VkPipelineColorBlendStateCreateInfo-pAttachments-00605]]
-    If the <<features-independentBlend,independent blending>> feature is not
-    enabled, all elements of pname:pAttachments must: be identical
-  * [[VUID-VkPipelineColorBlendStateCreateInfo-logicOpEnable-00606]]
-    If the <<features-logicOp,logic operations>> feature is not enabled,
-    pname:logicOpEnable must: be ename:VK_FALSE
-  * [[VUID-VkPipelineColorBlendStateCreateInfo-logicOpEnable-00607]]
-    If pname:logicOpEnable is ename:VK_TRUE, pname:logicOp must: be a valid
-    elink:VkLogicOp value
-****
-
-include::{generated}/validity/structs/VkPipelineColorBlendStateCreateInfo.txt[]
---
-
-[open,refpage='VkPipelineColorBlendStateCreateFlags',desc='Reserved for future use',type='flags']
---
-include::{generated}/api/flags/VkPipelineColorBlendStateCreateFlags.txt[]
-
-tname:VkPipelineColorBlendStateCreateFlags is a bitmask type for setting a
-mask, but is currently reserved for future use.
---
-
-[open,refpage='VkPipelineColorBlendAttachmentState',desc='Structure specifying a pipeline color blend attachment state',type='structs']
---
-The sname:VkPipelineColorBlendAttachmentState structure is defined as:
-
-include::{generated}/api/structs/VkPipelineColorBlendAttachmentState.txt[]
-
-  * pname:blendEnable controls whether blending is enabled for the
-    corresponding color attachment.
-    If blending is not enabled, the source fragment's color for that
-    attachment is passed through unmodified.
-  * pname:srcColorBlendFactor selects which blend factor is used to
-    determine the source factors [eq]#(S~r~,S~g~,S~b~)#.
-  * pname:dstColorBlendFactor selects which blend factor is used to
-    determine the destination factors [eq]#(D~r~,D~g~,D~b~)#.
-  * pname:colorBlendOp selects which blend operation is used to calculate
-    the RGB values to write to the color attachment.
-  * pname:srcAlphaBlendFactor selects which blend factor is used to
-    determine the source factor [eq]#S~a~#.
-  * pname:dstAlphaBlendFactor selects which blend factor is used to
-    determine the destination factor [eq]#D~a~#.
-  * pname:alphaBlendOp selects which blend operation is use to calculate the
-    alpha values to write to the color attachment.
-  * pname:colorWriteMask is a bitmask of elink:VkColorComponentFlagBits
-    specifying which of the R, G, B, and/or A components are enabled for
-    writing, as described for the <<framebuffer-color-write-mask,Color Write
-    Mask>>.
-
-.Valid Usage
-****
-  * [[VUID-VkPipelineColorBlendAttachmentState-srcColorBlendFactor-00608]]
-    If the <<features-dualSrcBlend,dual source blending>> feature is not
-    enabled, pname:srcColorBlendFactor must: not be
-    ename:VK_BLEND_FACTOR_SRC1_COLOR,
-    ename:VK_BLEND_FACTOR_ONE_MINUS_SRC1_COLOR,
-    ename:VK_BLEND_FACTOR_SRC1_ALPHA, or
-    ename:VK_BLEND_FACTOR_ONE_MINUS_SRC1_ALPHA
-  * [[VUID-VkPipelineColorBlendAttachmentState-dstColorBlendFactor-00609]]
-    If the <<features-dualSrcBlend,dual source blending>> feature is not
-    enabled, pname:dstColorBlendFactor must: not be
-    ename:VK_BLEND_FACTOR_SRC1_COLOR,
-    ename:VK_BLEND_FACTOR_ONE_MINUS_SRC1_COLOR,
-    ename:VK_BLEND_FACTOR_SRC1_ALPHA, or
-    ename:VK_BLEND_FACTOR_ONE_MINUS_SRC1_ALPHA
-  * [[VUID-VkPipelineColorBlendAttachmentState-srcAlphaBlendFactor-00610]]
-    If the <<features-dualSrcBlend,dual source blending>> feature is not
-    enabled, pname:srcAlphaBlendFactor must: not be
-    ename:VK_BLEND_FACTOR_SRC1_COLOR,
-    ename:VK_BLEND_FACTOR_ONE_MINUS_SRC1_COLOR,
-    ename:VK_BLEND_FACTOR_SRC1_ALPHA, or
-    ename:VK_BLEND_FACTOR_ONE_MINUS_SRC1_ALPHA
-  * [[VUID-VkPipelineColorBlendAttachmentState-dstAlphaBlendFactor-00611]]
-    If the <<features-dualSrcBlend,dual source blending>> feature is not
-    enabled, pname:dstAlphaBlendFactor must: not be
-    ename:VK_BLEND_FACTOR_SRC1_COLOR,
-    ename:VK_BLEND_FACTOR_ONE_MINUS_SRC1_COLOR,
-    ename:VK_BLEND_FACTOR_SRC1_ALPHA, or
-    ename:VK_BLEND_FACTOR_ONE_MINUS_SRC1_ALPHA
-ifdef::VK_EXT_blend_operation_advanced[]
-  * [[VUID-VkPipelineColorBlendAttachmentState-colorBlendOp-01406]]
-    If either of pname:colorBlendOp or pname:alphaBlendOp is an
-    <<framebuffer-blend-advanced,advanced blend operation>>, then
-    pname:colorBlendOp must: equal pname:alphaBlendOp
-  * [[VUID-VkPipelineColorBlendAttachmentState-advancedBlendIndependentBlend-01407]]
-    If
-    slink:VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT::pname:advancedBlendIndependentBlend
-    is ename:VK_FALSE and pname:colorBlendOp is an
-    <<framebuffer-blend-advanced,advanced blend operation>>, then
-    pname:colorBlendOp must: be the same for all attachments
-  * [[VUID-VkPipelineColorBlendAttachmentState-advancedBlendIndependentBlend-01408]]
-    If
-    slink:VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT::pname:advancedBlendIndependentBlend
-    is ename:VK_FALSE and pname:alphaBlendOp is an
-    <<framebuffer-blend-advanced,advanced blend operation>>, then
-    pname:alphaBlendOp must: be the same for all attachments
-  * [[VUID-VkPipelineColorBlendAttachmentState-advancedBlendAllOperations-01409]]
-    If
-    slink:VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT::pname:advancedBlendAllOperations
-    is ename:VK_FALSE, then pname:colorBlendOp must: not be
-    ename:VK_BLEND_OP_ZERO_EXT, ename:VK_BLEND_OP_SRC_EXT,
-    ename:VK_BLEND_OP_DST_EXT, ename:VK_BLEND_OP_SRC_OVER_EXT,
-    ename:VK_BLEND_OP_DST_OVER_EXT, ename:VK_BLEND_OP_SRC_IN_EXT,
-    ename:VK_BLEND_OP_DST_IN_EXT, ename:VK_BLEND_OP_SRC_OUT_EXT,
-    ename:VK_BLEND_OP_DST_OUT_EXT, ename:VK_BLEND_OP_SRC_ATOP_EXT,
-    ename:VK_BLEND_OP_DST_ATOP_EXT, ename:VK_BLEND_OP_XOR_EXT,
-    ename:VK_BLEND_OP_INVERT_EXT, ename:VK_BLEND_OP_INVERT_RGB_EXT,
-    ename:VK_BLEND_OP_LINEARDODGE_EXT, ename:VK_BLEND_OP_LINEARBURN_EXT,
-    ename:VK_BLEND_OP_VIVIDLIGHT_EXT, ename:VK_BLEND_OP_LINEARLIGHT_EXT,
-    ename:VK_BLEND_OP_PINLIGHT_EXT, ename:VK_BLEND_OP_HARDMIX_EXT,
-    ename:VK_BLEND_OP_PLUS_EXT, ename:VK_BLEND_OP_PLUS_CLAMPED_EXT,
-    ename:VK_BLEND_OP_PLUS_CLAMPED_ALPHA_EXT,
-    ename:VK_BLEND_OP_PLUS_DARKER_EXT, ename:VK_BLEND_OP_MINUS_EXT,
-    ename:VK_BLEND_OP_MINUS_CLAMPED_EXT, ename:VK_BLEND_OP_CONTRAST_EXT,
-    ename:VK_BLEND_OP_INVERT_OVG_EXT, ename:VK_BLEND_OP_RED_EXT,
-    ename:VK_BLEND_OP_GREEN_EXT, or ename:VK_BLEND_OP_BLUE_EXT
-  * [[VUID-VkPipelineColorBlendAttachmentState-colorBlendOp-01410]]
-    If pname:colorBlendOp or pname:alphaBlendOp is an
-    <<framebuffer-blend-advanced,advanced blend operation>>, then
-    pname:colorAttachmentCount of the subpass this pipeline is compiled
-    against must: be less than or equal to
-    slink:VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT::pname:advancedBlendMaxColorAttachments
-endif::VK_EXT_blend_operation_advanced[]
-ifdef::VK_KHR_portability_subset[]
-  * [[VUID-VkPipelineColorBlendAttachmentState-constantAlphaColorBlendFactors-04454]]
-    If the `apiext:VK_KHR_portability_subset` extension is enabled, and
-    slink:VkPhysicalDevicePortabilitySubsetFeaturesKHR::pname:constantAlphaColorBlendFactors
-    is ename:VK_FALSE, pname:srcColorBlendFactor must: not be
-    ename:VK_BLEND_FACTOR_CONSTANT_ALPHA or
-    ename:VK_BLEND_FACTOR_ONE_MINUS_CONSTANT_ALPHA
-  * [[VUID-VkPipelineColorBlendAttachmentState-constantAlphaColorBlendFactors-04455]]
-    If the `apiext:VK_KHR_portability_subset` extension is enabled, and
-    slink:VkPhysicalDevicePortabilitySubsetFeaturesKHR::pname:constantAlphaColorBlendFactors
-    is ename:VK_FALSE, pname:dstColorBlendFactor must: not be
-    ename:VK_BLEND_FACTOR_CONSTANT_ALPHA or
-    ename:VK_BLEND_FACTOR_ONE_MINUS_CONSTANT_ALPHA
-endif::VK_KHR_portability_subset[]
-****
-
-include::{generated}/validity/structs/VkPipelineColorBlendAttachmentState.txt[]
---
-
-
-[[framebuffer-blendfactors]]
-=== Blend Factors
-
-[open,refpage='VkBlendFactor',desc='Framebuffer blending factors',type='enums']
---
-The source and destination color and alpha blending factors are selected
-from the enum:
-
-include::{generated}/api/enums/VkBlendFactor.txt[]
-
-The semantics of the enum values are described in the table below:
-
-.Blend Factors
-[width="100%",options="header",align="center",cols="59%,28%,13%"]
-|====
-|elink:VkBlendFactor                            | RGB Blend Factors [eq]#(S~r~,S~g~,S~b~)# or [eq]#(D~r~,D~g~,D~b~)# | Alpha Blend Factor ([eq]#S~a~# or [eq]#D~a~#)
-|ename:VK_BLEND_FACTOR_ZERO                     | [eq]#(0,0,0)#                              | [eq]#0#
-|ename:VK_BLEND_FACTOR_ONE                      | [eq]#(1,1,1)#                              | [eq]#1#
-|ename:VK_BLEND_FACTOR_SRC_COLOR                | [eq]#(R~s0~,G~s0~,B~s0~)#                  | [eq]#A~s0~#
-|ename:VK_BLEND_FACTOR_ONE_MINUS_SRC_COLOR      | [eq]#(1-R~s0~,1-G~s0~,1-B~s0~)#            | [eq]#1-A~s0~#
-|ename:VK_BLEND_FACTOR_DST_COLOR                | [eq]#(R~d~,G~d~,B~d~)#                     | [eq]#A~d~#
-|ename:VK_BLEND_FACTOR_ONE_MINUS_DST_COLOR      | [eq]#(1-R~d~,1-G~d~,1-B~d~)#               | [eq]#1-A~d~#
-|ename:VK_BLEND_FACTOR_SRC_ALPHA                | [eq]#(A~s0~,A~s0~,A~s0~)#                  | [eq]#A~s0~#
-|ename:VK_BLEND_FACTOR_ONE_MINUS_SRC_ALPHA      | [eq]#(1-A~s0~,1-A~s0~,1-A~s0~)#            | [eq]#1-A~s0~#
-|ename:VK_BLEND_FACTOR_DST_ALPHA                | [eq]#(A~d~,A~d~,A~d~)#                     | [eq]#A~d~#
-|ename:VK_BLEND_FACTOR_ONE_MINUS_DST_ALPHA      | [eq]#(1-A~d~,1-A~d~,1-A~d~)#               | [eq]#1-A~d~#
-|ename:VK_BLEND_FACTOR_CONSTANT_COLOR           | [eq]#(R~c~,G~c~,B~c~)#                     | [eq]#A~c~#
-|ename:VK_BLEND_FACTOR_ONE_MINUS_CONSTANT_COLOR | [eq]#(1-R~c~,1-G~c~,1-B~c~)#               | [eq]#1-A~c~#
-|ename:VK_BLEND_FACTOR_CONSTANT_ALPHA           | [eq]#(A~c~,A~c~,A~c~)#                     | [eq]#A~c~#
-|ename:VK_BLEND_FACTOR_ONE_MINUS_CONSTANT_ALPHA | [eq]#(1-A~c~,1-A~c~,1-A~c~)#               | [eq]#1-A~c~#
-|ename:VK_BLEND_FACTOR_SRC_ALPHA_SATURATE       | [eq]#(f,f,f)#; [eq]#f = min(A~s0~,1-A~d~)# | [eq]#1#
-|ename:VK_BLEND_FACTOR_SRC1_COLOR               | [eq]#(R~s1~,G~s1~,B~s1~)#                  | [eq]#A~s1~#
-|ename:VK_BLEND_FACTOR_ONE_MINUS_SRC1_COLOR     | [eq]#(1-R~s1~,1-G~s1~,1-B~s1~)#            | [eq]#1-A~s1~#
-|ename:VK_BLEND_FACTOR_SRC1_ALPHA               | [eq]#(A~s1~,A~s1~,A~s1~)#                  | [eq]#A~s1~#
-|ename:VK_BLEND_FACTOR_ONE_MINUS_SRC1_ALPHA     | [eq]#(1-A~s1~,1-A~s1~,1-A~s1~)#            | [eq]#1-A~s1~#
-|====
-
-In this table, the following conventions are used:
-
-  * [eq]#R~s0~,G~s0~,B~s0~# and [eq]#A~s0~# represent the first source color
-    R, G, B, and A components, respectively, for the fragment output
-    location corresponding to the color attachment being blended.
-  * [eq]#R~s1~,G~s1~,B~s1~# and [eq]#A~s1~# represent the second source
-    color R, G, B, and A components, respectively, used in dual source
-    blending modes, for the fragment output location corresponding to the
-    color attachment being blended.
-  * [eq]#R~d~,G~d~,B~d~# and [eq]#A~d~# represent the R, G, B, and A
-    components of the destination color.
-    That is, the color currently in the corresponding color attachment for
-    this fragment/sample.
-  * [eq]#R~c~,G~c~,B~c~# and [eq]#A~c~# represent the blend constant R, G,
-    B, and A components, respectively.
---
-
-[open,refpage='vkCmdSetBlendConstants',desc='Set the values of blend constants',type='protos']
---
-To <<pipelines-dynamic-state, dynamically set and change>> the blend
-constants, call:
-
-include::{generated}/api/protos/vkCmdSetBlendConstants.txt[]
-
-  * pname:commandBuffer is the command buffer into which the command will be
-    recorded.
-  * pname:blendConstants is a pointer to an array of four values specifying
-    the [eq]#R~c~#, [eq]#G~c~#, [eq]#B~c~#, and [eq]#A~c~# components of the
-    blend constant color used in blending, depending on the
-    <<framebuffer-blendfactors,blend factor>>.
-
-[[framebuffer-blendconstants]]
-This command sets blend constants for subsequent drawing commands when the
-graphics pipeline is created with ename:VK_DYNAMIC_STATE_BLEND_CONSTANTS set
-in slink:VkPipelineDynamicStateCreateInfo::pname:pDynamicStates.
-Otherwise, this state is specified by the
-slink:VkPipelineColorBlendStateCreateInfo::pname:blendConstants values used
-to create the currently active pipeline.
-
-include::{generated}/validity/protos/vkCmdSetBlendConstants.txt[]
---
-
-
-[[framebuffer-dsb]]
-=== Dual-Source Blending
-
-Blend factors that use the secondary color input
-[eq]#(R~s1~,G~s1~,B~s1~,A~s1~)# (ename:VK_BLEND_FACTOR_SRC1_COLOR,
-ename:VK_BLEND_FACTOR_ONE_MINUS_SRC1_COLOR,
-ename:VK_BLEND_FACTOR_SRC1_ALPHA, and
-ename:VK_BLEND_FACTOR_ONE_MINUS_SRC1_ALPHA) may: consume implementation
-resources that could otherwise be used for rendering to multiple color
-attachments.
-Therefore, the number of color attachments that can: be used in a
-framebuffer may: be lower when using dual-source blending.
-
-Dual-source blending is only supported if the
-<<features-dualSrcBlend,pname:dualSrcBlend>> feature is enabled.
-
-The maximum number of color attachments that can: be used in a subpass when
-using dual-source blending functions is implementation-dependent and is
-reported as the pname:maxFragmentDualSrcAttachments member of
-sname:VkPhysicalDeviceLimits.
-
-When using a fragment shader with dual-source blending functions, the color
-outputs are bound to the first and second inputs of the blender using the
-code:Index decoration, as described in <<interfaces-fragmentoutput,Fragment
-Output Interface>>.
-If the second color input to the blender is not written in the shader, or if
-no output is bound to the second input of a blender, the result of the
-blending operation is not defined.
-
-
-[[framebuffer-blendoperations]]
-=== Blend Operations
-
-[open,refpage='VkBlendOp',desc='Framebuffer blending operations',type='enums']
---
-Once the source and destination blend factors have been selected, they along
-with the source and destination components are passed to the blending
-operations.
-RGB and alpha components can: use different operations.
-Possible values of elink:VkBlendOp, specifying the operations, are:
-
-include::{generated}/api/enums/VkBlendOp.txt[]
-
-<<<
-
-The semantics of the basic blend operations are described in the table
-below:
-
-.Basic Blend Operations
-[width="100%",cols="45%,30%,25%",options="header",align="center"]
-|====
-|elink:VkBlendOp                             | RGB Components                    | Alpha Component
-
-|ename:VK_BLEND_OP_ADD
-| [eq]#R = R~s0~ {times} S~r~ {plus} R~d~ {times} D~r~# +
-  [eq]#G = G~s0~ {times} S~g~ {plus} G~d~ {times} D~g~# +
-  [eq]#B = B~s0~ {times} S~b~ {plus} B~d~ {times} D~b~#
-| [eq]#A = A~s0~ {times} S~a~ {plus} A~d~ {times} D~a~#
-
-|ename:VK_BLEND_OP_SUBTRACT
-| [eq]#R = R~s0~ {times} S~r~ - R~d~ {times} D~r~# +
-  [eq]#G = G~s0~ {times} S~g~ - G~d~ {times} D~g~# +
-  [eq]#B = B~s0~ {times} S~b~ - B~d~ {times} D~b~#
-| [eq]#A = A~s0~ {times} S~a~ - A~d~ {times} D~a~#
-
-|ename:VK_BLEND_OP_REVERSE_SUBTRACT
-| [eq]#R = R~d~ {times} D~r~ - R~s0~ {times} S~r~# +
-  [eq]#G = G~d~ {times} D~g~ - G~s0~ {times} S~g~# +
-  [eq]#B = B~d~ {times} D~b~ - B~s0~ {times} S~b~#
-| [eq]#A = A~d~ {times} D~a~ - A~s0~ {times} S~a~#
-
-|ename:VK_BLEND_OP_MIN
-| [eq]#R = min(R~s0~,R~d~)# +
-  [eq]#G = min(G~s0~,G~d~)# +
-  [eq]#B = min(B~s0~,B~d~)#
-| [eq]#A = min(A~s0~,A~d~)#
-
-|ename:VK_BLEND_OP_MAX
-| [eq]#R = max(R~s0~,R~d~)# +
-  [eq]#G = max(G~s0~,G~d~)# +
-  [eq]#B = max(B~s0~,B~d~)#
-| [eq]#A = max(A~s0~,A~d~)#
-|====
-
-In this table, the following conventions are used:
-
-  * [eq]#R~s0~, G~s0~, B~s0~# and [eq]#A~s0~# represent the first source
-    color R, G, B, and A components, respectively.
-  * [eq]#R~d~, G~d~, B~d~# and [eq]#A~d~# represent the R, G, B, and A
-    components of the destination color.
-    That is, the color currently in the corresponding color attachment for
-    this fragment/sample.
-  * [eq]#S~r~, S~g~, S~b~# and [eq]#S~a~# represent the source blend factor
-    R, G, B, and A components, respectively.
-  * [eq]#D~r~, D~g~, D~b~# and [eq]#D~a~# represent the destination blend
-    factor R, G, B, and A components, respectively.
-
-The blending operation produces a new set of values [eq]#R, G, B# and
-[eq]#A#, which are written to the framebuffer attachment.
-If blending is not enabled for this attachment, then [eq]#R, G, B# and
-[eq]#A# are assigned [eq]#R~s0~, G~s0~, B~s0~# and [eq]#A~s0~#,
-respectively.
-
-If the color attachment is fixed-point, the components of the source and
-destination values and blend factors are each clamped to [eq]#[0,1]# or
-[eq]#[-1,1]# respectively for an unsigned normalized or signed normalized
-color attachment prior to evaluating the blend operations.
-If the color attachment is floating-point, no clamping occurs.
---
-
-If the numeric format of a framebuffer attachment uses sRGB encoding, the R,
-G, and B destination color values (after conversion from fixed-point to
-floating-point) are considered to be encoded for the sRGB color space and
-hence are linearized prior to their use in blending.
-Each R, G, and B component is converted from nonlinear to linear as
-described in the "`sRGB EOTF`" section of the <<data-format,Khronos Data
-Format Specification>>.
-If the format is not sRGB, no linearization is performed.
-
-If the numeric format of a framebuffer attachment uses sRGB encoding, then
-the final R, G and B values are converted into the nonlinear sRGB
-representation before being written to the framebuffer attachment as
-described in the "`sRGB EOTF^&#160;-1^`" section of the Khronos Data Format
-Specification.
-
-If the numeric format of a framebuffer color attachment is not sRGB encoded
-then the resulting [eq]#c~s~# values for R, G and B are unmodified.
-The value of A is never sRGB encoded.
-That is, the alpha component is always stored in memory as linear.
-
-If the framebuffer color attachment is ename:VK_ATTACHMENT_UNUSED, no writes
-are performed through that attachment.
-Writes are not performed to framebuffer color attachments greater than or
-equal to the sname:VkSubpassDescription::pname:colorAttachmentCount
-ifdef::VK_VERSION_1_2,VK_KHR_create_renderpass2[]
-or sname:VkSubpassDescription2::pname:colorAttachmentCount
-endif::VK_VERSION_1_2,VK_KHR_create_renderpass2[]
-value.
-
-ifdef::VK_EXT_blend_operation_advanced[]
-include::VK_EXT_blend_operation_advanced/advanced_blend.txt[]
-endif::VK_EXT_blend_operation_advanced[]
-
-
-[[framebuffer-logicop]]
-== Logical Operations
-
-The application can: enable a _logical operation_ between the fragment's
-color values and the existing value in the framebuffer attachment.
-This logical operation is applied prior to updating the framebuffer
-attachment.
-Logical operations are applied only for signed and unsigned integer and
-normalized integer framebuffers.
-Logical operations are not applied to floating-point or sRGB format color
-attachments.
-
-[open,refpage='VkLogicOp',desc='Framebuffer logical operations',type='enums']
---
-Logical operations are controlled by the pname:logicOpEnable and
-pname:logicOp members of slink:VkPipelineColorBlendStateCreateInfo.
-ifdef::VK_EXT_extended_dynamic_state2[]
-It can also be controlled by flink:vkCmdSetLogicOpEXT if graphics pipeline
-is created with ename:VK_DYNAMIC_STATE_LOGIC_OP_EXT set in
-slink:VkPipelineDynamicStateCreateInfo::pname:pDynamicStates.
-endif::VK_EXT_extended_dynamic_state2[]
-If pname:logicOpEnable is ename:VK_TRUE, then a logical operation selected
-by pname:logicOp is applied between each color attachment and the fragment's
-corresponding output value, and blending of all attachments is treated as if
-it were disabled.
-Any attachments using color formats for which logical operations are not
-supported simply pass through the color values unmodified.
-The logical operation is applied independently for each of the red, green,
-blue, and alpha components.
-The pname:logicOp is selected from the following operations:
-
-include::{generated}/api/enums/VkLogicOp.txt[]
-
-<<<
-
-The logical operations supported by Vulkan are summarized in the following
-table in which
-
-  * [eq]#{lnot}# is bitwise invert,
-  * [eq]#{land}# is bitwise and,
-  * [eq]#{lor}# is bitwise or,
-  * [eq]#{oplus}# is bitwise exclusive or,
-  * [eq]#s# is the fragment's [eq]#R~s0~, G~s0~, B~s0~# or [eq]#A~s0~#
-    component value for the fragment output corresponding to the color
-    attachment being updated, and
-  * [eq]#d# is the color attachment's [eq]#R, G, B# or [eq]#A# component
-    value:
-
-.Logical Operations
-[width="75%",options="header",align="center"]
-|====
-|Mode                            | Operation
-|ename:VK_LOGIC_OP_CLEAR         | [eq]#0#
-|ename:VK_LOGIC_OP_AND           | [eq]#s {land} d#
-|ename:VK_LOGIC_OP_AND_REVERSE   | [eq]#s {land} {lnot} d#
-|ename:VK_LOGIC_OP_COPY          | [eq]#s#
-|ename:VK_LOGIC_OP_AND_INVERTED  | [eq]#{lnot} s {land} d#
-|ename:VK_LOGIC_OP_NO_OP         | [eq]#d#
-|ename:VK_LOGIC_OP_XOR           | [eq]#s {oplus} d#
-|ename:VK_LOGIC_OP_OR            | [eq]#s {lor} d#
-|ename:VK_LOGIC_OP_NOR           | [eq]#{lnot} (s {lor} d)#
-|ename:VK_LOGIC_OP_EQUIVALENT    | [eq]#{lnot} (s {oplus} d)#
-|ename:VK_LOGIC_OP_INVERT        | [eq]#{lnot} d#
-|ename:VK_LOGIC_OP_OR_REVERSE    | [eq]#s {lor} {lnot} d#
-|ename:VK_LOGIC_OP_COPY_INVERTED | [eq]#{lnot} s#
-|ename:VK_LOGIC_OP_OR_INVERTED   | [eq]#{lnot} s {lor} d#
-|ename:VK_LOGIC_OP_NAND          | [eq]#{lnot} (s {land} d)#
-|ename:VK_LOGIC_OP_SET           | all 1s
-|====
-
-The result of the logical operation is then written to the color attachment
-as controlled by the component write mask, described in
-<<framebuffer-blendoperations,Blend Operations>>.
---
-
-ifdef::VK_EXT_extended_dynamic_state2[]
-[open,refpage='vkCmdSetLogicOpEXT',desc='Select which logical operation to apply for blend state dynamically for a command buffer',type='protos']
---
-To <<pipelines-dynamic-state, dynamically set>> the logical operation to
-apply for blend state, call:
-
-include::{generated}/api/protos/vkCmdSetLogicOpEXT.txt[]
-
-  * pname:commandBuffer is the command buffer into which the command will be
-    recorded.
-  * pname:logicOp specifies the logical operation to apply for blend state.
-
-This command sets the logical operation for blend state for subsequent
-drawing commands when the graphics pipeline is created with
-ename:VK_DYNAMIC_STATE_LOGIC_OP_EXT set in
-slink:VkPipelineDynamicStateCreateInfo::pname:pDynamicStates.
-Otherwise, this state is specified by the
-slink:VkPipelineColorBlendStateCreateInfo::pname:logicOp value used to
-create the currently active pipeline.
-
-.Valid Usage
-****
-  * [[VUID-vkCmdSetLogicOpEXT-None-04867]]
-    The <<features-extendedDynamicState2LogicOp,
-    extendedDynamicState2LogicOp>> feature must: be enabled
-****
-
-include::{generated}/validity/protos/vkCmdSetLogicOpEXT.txt[]
---
-endif::VK_EXT_extended_dynamic_state2[]
-
-
-[[framebuffer-color-write-mask]]
-== Color Write Mask
-
-[open,refpage='VkColorComponentFlagBits',desc='Bitmask controlling which components are written to the framebuffer',type='enums']
---
-Bits which can: be set in
-slink:VkPipelineColorBlendAttachmentState::pname:colorWriteMask to determine
-whether the final color values [eq]#R, G, B# and [eq]#A# are written to the
-framebuffer attachment are:
-
-include::{generated}/api/enums/VkColorComponentFlagBits.txt[]
-
-  * ename:VK_COLOR_COMPONENT_R_BIT specifies that the [eq]#R# value is
-    written to the color attachment for the appropriate sample.
-    Otherwise, the value in memory is unmodified.
-  * ename:VK_COLOR_COMPONENT_G_BIT specifies that the [eq]#G# value is
-    written to the color attachment for the appropriate sample.
-    Otherwise, the value in memory is unmodified.
-  * ename:VK_COLOR_COMPONENT_B_BIT specifies that the [eq]#B# value is
-    written to the color attachment for the appropriate sample.
-    Otherwise, the value in memory is unmodified.
-  * ename:VK_COLOR_COMPONENT_A_BIT specifies that the [eq]#A# value is
-    written to the color attachment for the appropriate sample.
-    Otherwise, the value in memory is unmodified.
-
-The color write mask operation is applied regardless of whether blending is
-enabled.
-
-ifdef::VK_EXT_color_write_enable[]
-The color write mask operation is applied only if
-<<framebuffer-color-write-enable,Color Write Enable>> is enabled for the
-respective attachment.
-Otherwise the color write mask is ignored and writes to all components of
-the attachment are disabled.
-endif::VK_EXT_color_write_enable[]
---
-
-[open,refpage='VkColorComponentFlags',desc='Bitmask of VkColorComponentFlagBits',type='flags']
---
-include::{generated}/api/flags/VkColorComponentFlags.txt[]
-
-tname:VkColorComponentFlags is a bitmask type for setting a mask of zero or
-more elink:VkColorComponentFlagBits.
---
-
-
-ifdef::VK_EXT_color_write_enable[]
-[[framebuffer-color-write-enable]]
-== Color Write Enable
-
-[open,refpage='VkPipelineColorWriteCreateInfoEXT',desc='Structure specifying color write state of a newly created pipeline',type='structs']
---
-The sname:VkPipelineColorWriteCreateInfoEXT structure is defined as:
-
-include::{generated}/api/structs/VkPipelineColorWriteCreateInfoEXT.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:attachmentCount is the number of basetype:VkBool32 elements in
-    pname:pColorWriteEnables.
-  * pname:pColorWriteEnables is a pointer to an array of per target
-    attachment boolean values specifying whether color writes are enabled
-    for the given attachment.
-
-When this structure is included in the pname:pNext chain of
-slink:VkPipelineColorBlendStateCreateInfo, it defines per-attachment color
-write state.
-If this structure is not included in the pname:pNext chain, it is equivalent
-to specifying this structure with pname:attachmentCount equal to the
-pname:attachmentCount member of slink:VkPipelineColorBlendStateCreateInfo,
-and pname:pColorWriteEnables pointing to an array of as many ename:VK_TRUE
-values.
-
-If the <<features-colorWriteEnable,colorWriteEnable>> feature is not enabled
-on the device, all basetype:VkBool32 elements in the
-pname:pColorWriteEnables array must: be ename:VK_TRUE.
-
-Color Write Enable interacts with the <<framebuffer-color-write-mask,Color
-Write Mask>> as follows:
-
-  * If pname:colorWriteEnable is ename:VK_TRUE, writes to the attachment are
-    determined by the pname:colorWriteMask.
-  * If pname:colorWriteEnable is ename:VK_FALSE, the pname:colorWriteMask is
-    ignored and writes to all components of the attachment are disabled.
-    This is equivalent to specifying a pname:colorWriteMask of 0.
-
-.Valid Usage
-****
-  * [[VUID-VkPipelineColorWriteCreateInfoEXT-pAttachments-04801]]
-    If the <<features-colorWriteEnable,colorWriteEnable>> feature is not
-    enabled, all elements of pname:pColorWriteEnables must: be ename:VK_TRUE
-  * [[VUID-VkPipelineColorWriteCreateInfoEXT-attachmentCount-04802]]
-    pname:attachmentCount must: be equal to the pname:attachmentCount member
-    of the sname:VkPipelineColorBlendStateCreateInfo structure specified
-    during pipeline creation
-****
-
-include::{generated}/validity/structs/VkPipelineColorWriteCreateInfoEXT.txt[]
---
-
-[open,refpage='vkCmdSetColorWriteEnableEXT',desc='Enable or disable writes to a color attachment dynamically for a command buffer',type='protos']
---
-To <<pipelines-dynamic-state, dynamically enable or disable>> writes to a
-color attachment, call:
-
-include::{generated}/api/protos/vkCmdSetColorWriteEnableEXT.txt[]
-
-  * pname:commandBuffer is the command buffer into which the command will be
-    recorded.
-  * pname:attachmentCount is the number of basetype:VkBool32 elements in
-    pname:pColorWriteEnables.
-  * pname:pColorWriteEnables is a pointer to an array of per target
-    attachment boolean values specifying whether color writes are enabled
-    for the given attachment.
-
-This command sets the color write enables for subsequent drawing commands
-when the graphics pipeline is created with
-ename:VK_DYNAMIC_STATE_COLOR_WRITE_ENABLE_EXT set in
-slink:VkPipelineDynamicStateCreateInfo::pname:pDynamicStates.
-Otherwise, this state is specified by the
-slink:VkPipelineColorWriteCreateInfoEXT::pname:pColorWriteEnables values
-used to create the currently active pipeline.
-
-.Valid Usage
-****
-  * [[VUID-vkCmdSetColorWriteEnableEXT-None-04803]]
-    The <<features-colorWriteEnable, colorWriteEnable>> feature must: be
-    enabled
-  * [[VUID-vkCmdSetColorWriteEnableEXT-attachmentCount-04804]]
-    pname:attachmentCount must: be equal to the pname:attachmentCount member
-    of the sname:VkPipelineColorBlendStateCreateInfo structure specified
-    during pipeline creation
-****
-
-include::{generated}/validity/protos/vkCmdSetColorWriteEnableEXT.txt[]
---
-endif::VK_EXT_color_write_enable[]
diff --git a/registry/vulkan/chapters/fundamentals.txt b/registry/vulkan/chapters/fundamentals.txt
deleted file mode 100644
index ba072a8..0000000
--- a/registry/vulkan/chapters/fundamentals.txt
+++ /dev/null
@@ -1,1641 +0,0 @@
-// Copyright 2015-2021 The Khronos Group, Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-[[fundamentals]]
-= Fundamentals
-
-This chapter introduces fundamental concepts including the Vulkan
-architecture and execution model, API syntax, queues, pipeline
-configurations, numeric representation, state and state queries, and the
-different types of objects and shaders.
-It provides a framework for interpreting more specific descriptions of
-commands and behavior in the remainder of the Specification.
-
-
-[[fundamentals-host-environment]]
-== Host and Device Environment
-
-The Vulkan Specification assumes and requires: the following properties of
-the host environment with respect to Vulkan implementations:
-
-  * The host must: have runtime support for 8, 16, 32 and 64-bit signed and
-    unsigned twos-complement integers, all addressable at the granularity of
-    their size in bytes.
-  * The host must: have runtime support for 32- and 64-bit floating-point
-    types satisfying the range and precision constraints in the
-    <<fundamentals-floatingpoint,Floating Point Computation>> section.
-  * The representation and endianness of these types on the host must: match
-    the representation and endianness of the same types on every physical
-    device supported.
-
-[NOTE]
-.Note
-====
-Since a variety of data types and structures in Vulkan may: be accessible by
-both host and physical device operations, the implementation should: be able
-to access such data efficiently in both paths in order to facilitate writing
-portable and performant applications.
-====
-
-[[fundamentals-execmodel]]
-== Execution Model
-
-This section outlines the execution model of a Vulkan system.
-
-Vulkan exposes one or more _devices_, each of which exposes one or more
-_queues_ which may: process work asynchronously to one another.
-The set of queues supported by a device is partitioned into _families_.
-Each family supports one or more types of functionality and may: contain
-multiple queues with similar characteristics.
-Queues within a single family are considered _compatible_ with one another,
-and work produced for a family of queues can: be executed on any queue
-within that family.
-This specification defines the following types of functionality that queues
-may: support:
-ifdef::VK_KHR_video_decode_queue[]
-video decode,
-endif::VK_KHR_video_decode_queue[]
-ifdef::VK_KHR_video_encode_queue[]
-video encode,
-endif::VK_KHR_video_encode_queue[]
-graphics, compute, transfer and sparse memory management.
-
-[NOTE]
-.Note
-====
-A single device may: report multiple similar queue families rather than, or
-as well as, reporting multiple members of one or more of those families.
-This indicates that while members of those families have similar
-capabilities, they are _not_ directly compatible with one another.
-====
-
-Device memory is explicitly managed by the application.
-Each device may: advertise one or more heaps, representing different areas
-of memory.
-Memory heaps are either device-local or host-local, but are always visible
-to the device.
-Further detail about memory heaps is exposed via memory types available on
-that heap.
-Examples of memory areas that may: be available on an implementation
-include:
-
-  * _device-local_ is memory that is physically connected to the device.
-  * _device-local, host visible_ is device-local memory that is visible to
-    the host.
-  * _host-local, host visible_ is memory that is local to the host and
-    visible to the device and host.
-
-On other architectures, there may: only be a single heap that can: be used
-for any purpose.
-
-
-[[fundamentals-queueoperation]]
-=== Queue Operation
-
-Vulkan queues provide an interface to the execution engines of a device.
-Commands for these execution engines are recorded into command buffers ahead
-of execution time, and then submitted to a queue for execution.
-Once submitted to a queue, command buffers will begin and complete execution
-without further application intervention, though the order of this execution
-is dependent on a number of <<synchronization, implicit and explicit
-ordering constraints>>.
-
-Work is submitted to queues using _queue submission commands_ that typically
-take the form ftext:vkQueue* (e.g. flink:vkQueueSubmit,
-flink:vkQueueBindSparse), and can: take a list of semaphores upon which to
-wait before work begins and a list of semaphores to signal once work has
-completed.
-The work itself, as well as signaling and waiting on the semaphores are all
-_queue operations_.
-Queue submission commands return control to the application once queue
-operations have been submitted - they do not wait for completion.
-
-There are no implicit ordering constraints between queue operations on
-different queues, or between queues and the host, so these may: operate in
-any order with respect to each other.
-Explicit ordering constraints between different queues or with the host can:
-be expressed with <<synchronization-semaphores,semaphores>> and
-<<synchronization-fences,fences>>.
-
-Command buffer submissions to a single queue respect
-<<synchronization-submission-order, submission order>> and other
-<<synchronization-implicit, implicit ordering guarantees>>, but otherwise
-may: overlap or execute out of order.
-Other types of batches and queue submissions against a single queue (e.g.
-<<sparsemem-memory-binding, sparse memory binding>>) have no implicit
-ordering constraints with any other queue submission or batch.
-Additional explicit ordering constraints between queue submissions and
-individual batches can be expressed with
-<<synchronization-semaphores,semaphores>> and
-<<synchronization-fences,fences>>.
-
-Before a fence or semaphore is signaled, it is guaranteed that any
-previously submitted queue operations have completed execution, and that
-memory writes from those queue operations are
-<<synchronization-dependencies-available-and-visible,available>> to future
-queue operations.
-Waiting on a signaled semaphore or fence guarantees that previous writes
-that are available are also
-<<synchronization-dependencies-available-and-visible,visible>> to subsequent
-commands.
-
-Command buffer boundaries, both between primary command buffers of the same
-or different batches or submissions as well as between primary and secondary
-command buffers, do not introduce any additional ordering constraints.
-In other words, submitting the set of command buffers (which can: include
-executing secondary command buffers) between any semaphore or fence
-operations execute the recorded commands as if they had all been recorded
-into a single primary command buffer, except that the current state is
-<<commandbuffers-statereset,reset>> on each boundary.
-Explicit ordering constraints can: be expressed with <<synchronization,
-explicit synchronization primitives>>.
-
-There are a few <<synchronization-implicit, implicit ordering guarantees>>
-between commands within a command buffer, but only covering a subset of
-execution.
-Additional explicit ordering constraints can be expressed with the various
-<<synchronization, explicit synchronization primitives>>.
-
-[NOTE]
-.Note
-====
-Implementations have significant freedom to overlap execution of work
-submitted to a queue, and this is common due to deep pipelining and
-parallelism in Vulkan devices.
-====
-
-[[fundamentals-queueoperation-command-types]]
-Commands recorded in command buffers either perform actions (draw, dispatch,
-clear, copy, query/timestamp operations, begin/end subpass operations), set
-state (bind pipelines, descriptor sets, and buffers, set dynamic state, push
-constants, set render pass/subpass state), or perform synchronization
-(set/wait events, pipeline barrier, render pass/subpass dependencies).
-Some commands perform more than one of these tasks.
-State setting commands update the _current state_ of the command buffer.
-Some commands that perform actions (e.g. draw/dispatch) do so based on the
-current state set cumulatively since the start of the command buffer.
-The work involved in performing action commands is often allowed to overlap
-or to be reordered, but doing so must: not alter the state to be used by
-each action command.
-In general, action commands are those commands that alter framebuffer
-attachments, read/write buffer or image memory, or write to query pools.
-
-Synchronization commands introduce explicit
-<<synchronization-dependencies,execution and memory dependencies>> between
-two sets of action commands, where the second set of commands depends on the
-first set of commands.
-These dependencies enforce both that the execution of certain
-<<synchronization-pipeline-stages, pipeline stages>> in the later set occurs
-after the execution of certain stages in the source set, and that the
-effects of <<synchronization-global-memory-barriers,memory accesses>>
-performed by certain pipeline stages occur in order and are visible to each
-other.
-When not enforced by an explicit dependency or <<synchronization-implicit,
-implicit ordering guarantees>>, action commands may: overlap execution or
-execute out of order, and may: not see the side effects of each other's
-memory accesses.
-
-
-[[fundamentals-objectmodel-overview]]
-== Object Model
-
-The devices, queues, and other entities in Vulkan are represented by Vulkan
-objects.
-At the API level, all objects are referred to by handles.
-There are two classes of handles, dispatchable and non-dispatchable.
-_Dispatchable_ handle types are a pointer to an opaque type.
-This pointer may: be used by layers as part of intercepting API commands,
-and thus each API command takes a dispatchable type as its first parameter.
-Each object of a dispatchable type must: have a unique handle value during
-its lifetime.
-
-_Non-dispatchable_ handle types are a 64-bit integer type whose meaning is
-implementation-dependent.
-ifdef::VK_EXT_private_data[]
-If the <<features-privateData,pname:privateData>> feature is enabled for a
-slink:VkDevice, each object of a non-dispatchable type created on that
-device must: have a handle value that is unique among objects created on
-that device, for the duration of the object's lifetime.
-Otherwise, non-dispatchable
-endif::VK_EXT_private_data[]
-ifndef::VK_EXT_private_data[Non-dispatchable]
-handles may: encode object information directly in the handle rather than
-acting as a reference to an underlying object, and thus may: not have unique
-handle values.
-If handle values are not unique, then destroying one such handle must: not
-cause identical handles of other types to become invalid, and must: not
-cause identical handles of the same type to become invalid if that handle
-value has been created more times than it has been destroyed.
-
-All objects created or allocated from a sname:VkDevice (i.e. with a
-sname:VkDevice as the first parameter) are private to that device, and must:
-not be used on other devices.
-
-
-[[fundamentals-objectmodel-lifetime]]
-=== Object Lifetime
-
-Objects are created or allocated by ftext:vkCreate* and ftext:vkAllocate*
-commands, respectively.
-Once an object is created or allocated, its "`structure`" is considered to
-be immutable, though the contents of certain object types is still free to
-change.
-Objects are destroyed or freed by ftext:vkDestroy* and ftext:vkFree*
-commands, respectively.
-
-Objects that are allocated (rather than created) take resources from an
-existing pool object or memory heap, and when freed return resources to that
-pool or heap.
-While object creation and destruction are generally expected to be
-low-frequency occurrences during runtime, allocating and freeing objects
-can: occur at high frequency.
-Pool objects help accommodate improved performance of the allocations and
-frees.
-
-It is an application's responsibility to track the lifetime of Vulkan
-objects, and not to destroy them while they are still in use.
-
-[[fundamentals-objectmodel-lifetime-acquire]]
-The ownership of application-owned memory is immediately acquired by any
-Vulkan command it is passed into.
-Ownership of such memory must: be released back to the application at the
-end of the duration of the command, so that the application can: alter or
-free this memory as soon as all the commands that acquired it have returned.
-
-The following object types are consumed when they are passed into a Vulkan
-command and not further accessed by the objects they are used to create.
-They must: not be destroyed in the duration of any API command they are
-passed into:
-
-  * sname:VkShaderModule
-  * sname:VkPipelineCache
-ifdef::VK_EXT_validation_cache[]
-  * sname:VkValidationCacheEXT
-endif::VK_EXT_validation_cache[]
-
-A sname:VkRenderPass
-ifdef::VK_KHR_maintenance4[]
-or sname:VkPipelineLayout
-endif::VK_KHR_maintenance4[]
-object passed as a parameter to create another object is not further
-accessed by that object after the duration of the command it is passed into.
-A sname:VkRenderPass used in a command buffer follows the rules described
-below.
-
-ifndef::VK_KHR_maintenance4[]
-A sname:VkPipelineLayout object must: not be destroyed while any command
-buffer that uses it is in the recording state.
-endif::VK_KHR_maintenance4[]
-
-sname:VkDescriptorSetLayout objects may: be accessed by commands that
-operate on descriptor sets allocated using that layout, and those descriptor
-sets must: not be updated with flink:vkUpdateDescriptorSets after the
-descriptor set layout has been destroyed.
-Otherwise, a sname:VkDescriptorSetLayout object passed as a parameter to
-create another object is not further accessed by that object after the
-duration of the command it is passed into.
-
-The application must: not destroy any other type of Vulkan object until all
-uses of that object by the device (such as via command buffer execution)
-have completed.
-
-[[fundamentals-objectmodel-lifetime-cmdbuffers]]
-The following Vulkan objects must: not be destroyed while any command
-buffers using the object are in the <<commandbuffers-lifecycle, pending
-state>>:
-
-  * sname:VkEvent
-  * sname:VkQueryPool
-  * sname:VkBuffer
-  * sname:VkBufferView
-  * sname:VkImage
-  * sname:VkImageView
-  * sname:VkPipeline
-  * sname:VkSampler
-ifdef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
-  * sname:VkSamplerYcbcrConversion
-endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
-  * sname:VkDescriptorPool
-  * sname:VkFramebuffer
-  * sname:VkRenderPass
-  * sname:VkCommandBuffer
-  * sname:VkCommandPool
-  * sname:VkDeviceMemory
-  * sname:VkDescriptorSet
-ifdef::VK_NV_device_generated_commands[]
-  * sname:VkIndirectCommandsLayoutNV
-endif::VK_NV_device_generated_commands[]
-ifdef::VK_NV_ray_tracing[]
-  * sname:VkAccelerationStructureNV
-endif::VK_NV_ray_tracing[]
-ifdef::VK_KHR_acceleration_structure[]
-  * sname:VkAccelerationStructureKHR
-endif::VK_KHR_acceleration_structure[]
-
-Destroying these objects will move any command buffers that are in the
-<<commandbuffers-lifecycle, recording or executable state>>, and are using
-those objects, to the <<commandbuffers-lifecycle, invalid state>>.
-
-The following Vulkan objects must: not be destroyed while any queue is
-executing commands that use the object:
-
-  * sname:VkFence
-  * sname:VkSemaphore
-  * sname:VkCommandBuffer
-  * sname:VkCommandPool
-
-In general, objects can: be destroyed or freed in any order, even if the
-object being freed is involved in the use of another object (e.g. use of a
-resource in a view, use of a view in a descriptor set,
-ifdef::VK_KHR_pipeline_library[]
-use of a <<pipeline-library,pipeline library>> in another pipeline,
-endif::VK_KHR_pipeline_library[]
-ifdef::VK_NV_device_generated_commands[]
-use of a <<graphics-shadergroups,referenced pipeline>> for additional
-graphics shader groups in another pipeline,
-endif::VK_NV_device_generated_commands[]
-ifdef::VK_KHR_acceleration_structure[]
-use of a <<acceleration-structure-bottom-level, bottom level acceleration
-structure>> in an instance referenced by a
-<<acceleration-structure-top-level, top level acceleration structure>>,
-endif::VK_KHR_acceleration_structure[]
-use of an object in a command buffer, binding of a memory allocation to a
-resource), as long as any object that uses the freed object is not further
-used in any way except to be destroyed or to be reset in such a way that it
-no longer uses the other object (such as resetting a command buffer).
-If the object has been reset, then it can: be used as if it never used the
-freed object.
-An exception to this is when there is a parent/child relationship between
-objects.
-In this case, the application must: not destroy a parent object before its
-children, except when the parent is explicitly defined to free its children
-when it is destroyed (e.g. for pool objects, as defined below).
-
-sname:VkCommandPool objects are parents of sname:VkCommandBuffer objects.
-sname:VkDescriptorPool objects are parents of sname:VkDescriptorSet objects.
-sname:VkDevice objects are parents of many object types (all that take a
-sname:VkDevice as a parameter to their creation).
-
-The following Vulkan objects have specific restrictions for when they can:
-be destroyed:
-
-  * sname:VkQueue objects cannot: be explicitly destroyed.
-    Instead, they are implicitly destroyed when the sname:VkDevice object
-    they are retrieved from is destroyed.
-  * Destroying a pool object implicitly frees all objects allocated from
-    that pool.
-    Specifically, destroying sname:VkCommandPool frees all
-    sname:VkCommandBuffer objects that were allocated from it, and
-    destroying sname:VkDescriptorPool frees all sname:VkDescriptorSet
-    objects that were allocated from it.
-  * sname:VkDevice objects can: be destroyed when all sname:VkQueue objects
-    retrieved from them are idle, and all objects created from them have
-    been destroyed.
-    This includes the following objects:
-  ** sname:VkFence
-  ** sname:VkSemaphore
-  ** sname:VkEvent
-  ** sname:VkQueryPool
-  ** sname:VkBuffer
-  ** sname:VkBufferView
-  ** sname:VkImage
-  ** sname:VkImageView
-  ** sname:VkShaderModule
-  ** sname:VkPipelineCache
-  ** sname:VkPipeline
-  ** sname:VkPipelineLayout
-  ** sname:VkSampler
-ifdef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
-  ** sname:VkSamplerYcbcrConversion
-endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
-  ** sname:VkDescriptorSetLayout
-  ** sname:VkDescriptorPool
-  ** sname:VkFramebuffer
-  ** sname:VkRenderPass
-  ** sname:VkCommandPool
-  ** sname:VkCommandBuffer
-  ** sname:VkDeviceMemory
-ifdef::VK_EXT_validation_cache[]
-  ** sname:VkValidationCacheEXT
-endif::VK_EXT_validation_cache[]
-ifdef::VK_NV_ray_tracing[]
-  ** sname:VkAccelerationStructureNV
-endif::VK_NV_ray_tracing[]
-ifdef::VK_KHR_acceleration_structure[]
-  ** sname:VkAccelerationStructureKHR
-endif::VK_KHR_acceleration_structure[]
-  * sname:VkPhysicalDevice objects cannot: be explicitly destroyed.
-    Instead, they are implicitly destroyed when the sname:VkInstance object
-    they are retrieved from is destroyed.
-  * sname:VkInstance objects can: be destroyed once all sname:VkDevice
-    objects created from any of its sname:VkPhysicalDevice objects have been
-    destroyed.
-
-ifdef::VK_VERSION_1_1,VK_KHR_external_memory_capabilities,VK_KHR_external_semaphore_capabilities,VK_KHR_external_fence_capabilities[]
-[[fundamentals-objectmodel-external]]
-=== External Object Handles
-
-As defined above, the scope of object handles created or allocated from a
-sname:VkDevice is limited to that logical device.
-Objects which are not in scope are said to be external.
-To bring an external object into scope, an external handle must: be exported
-from the object in the source scope and imported into the destination scope.
-
-[NOTE]
-.Note
-====
-The scope of external handles and their associated resources may: vary
-according to their type, but they can: generally be shared across process
-and API boundaries.
-====
-endif::VK_VERSION_1_1,VK_KHR_external_memory_capabilities,VK_KHR_external_semaphore_capabilities,VK_KHR_external_fence_capabilities[]
-
-
-[[fundamentals-abi]]
-== Application Binary Interface
-
-The mechanism by which Vulkan is made available to applications is platform-
-or implementation- defined.
-On many platforms the C interface described in this Specification is
-provided by a shared library.
-Since shared libraries can be changed independently of the applications that
-use them, they present particular compatibility challenges, and this
-Specification places some requirements on them.
-
-Shared library implementations must: use the default Application Binary
-Interface (ABI) of the standard C compiler for the platform, or provide
-customized API headers that cause application code to use the
-implementation's non-default ABI.
-An ABI in this context means the size, alignment, and layout of C data
-types; the procedure calling convention; and the naming convention for
-shared library symbols corresponding to C functions.
-Customizing the calling convention for a platform is usually accomplished by
-defining <<boilerplate-platform-specific-calling-conventions,calling
-convention macros>> appropriately in `vk_platform.h`.
-
-On platforms where Vulkan is provided as a shared library, library symbols
-beginning with "`vk`" and followed by a digit or uppercase letter are
-reserved for use by the implementation.
-Applications which use Vulkan must: not provide definitions of these
-symbols.
-This allows the Vulkan shared library to be updated with additional symbols
-for new API versions or extensions without causing symbol conflicts with
-existing applications.
-
-Shared library implementations should: provide library symbols for commands
-in the highest version of this Specification they support, and for
-ifdef::VK_KHR_surface[]
-<<wsi,Window System Integration>>
-endif::VK_KHR_surface[]
-ifndef::VK_KHR_surface[]
-Window System Integration
-endif::VK_KHR_surface[]
-extensions relevant to the platform.
-They may: also provide library symbols for commands defined by additional
-extensions.
-
-[NOTE]
-.Note
-====
-These requirements and recommendations are intended to allow implementors to
-take advantage of platform-specific conventions for SDKs, ABIs, library
-versioning mechanisms, etc.
-while still minimizing the code changes necessary to port applications or
-libraries between platforms.
-Platform vendors, or providers of the _de facto_ standard Vulkan shared
-library for a platform, are encouraged to document what symbols the shared
-library provides and how it will be versioned when new symbols are added.
-
-Applications should: only rely on shared library symbols for commands in the
-minimum core version required by the application.
-flink:vkGetInstanceProcAddr and flink:vkGetDeviceProcAddr should: be used to
-obtain function pointers for commands in core versions beyond the
-application's minimum required version.
-====
-
-
-[[fundamentals-commandsyntax]]
-== Command Syntax and Duration
-
-The Specification describes Vulkan commands as functions or procedures using
-C99 syntax.
-Language bindings for other languages such as C++ and JavaScript may: allow
-for stricter parameter passing, or object-oriented interfaces.
-
-Vulkan uses the standard C types for the base type of scalar parameters
-(e.g. types from `<stdint.h>`), with exceptions described below, or
-elsewhere in the text when appropriate:
-
-[open,refpage='VkBool32',desc='Vulkan boolean type',type='basetypes',xrefs='VK_TRUE VK_FALSE']
---
-basetype:VkBool32 represents boolean `True` and `False` values, since C does
-not have a sufficiently portable built-in boolean type:
-
-include::{generated}/api/basetypes/VkBool32.txt[]
-
-ename:VK_TRUE represents a boolean *True* (unsigned integer 1) value, and
-ename:VK_FALSE a boolean *False* (unsigned integer 0) value.
-
-All values returned from a Vulkan implementation in a basetype:VkBool32 will
-be either ename:VK_TRUE or ename:VK_FALSE.
-
-Applications must: not pass any other values than ename:VK_TRUE or
-ename:VK_FALSE into a Vulkan implementation where a basetype:VkBool32 is
-expected.
---
-
-[open,refpage='VK_TRUE',desc='Boolean true value',type='consts',xrefs='VkBool32 VK_FALSE']
---
-ename:VK_TRUE is a constant representing a basetype:VkBool32 *True* value.
-
-include::{generated}/api/enums/VK_TRUE.txt[]
---
-
-[open,refpage='VK_FALSE',desc='Boolean false value',type='consts',xrefs='VkBool32 VK_TRUE']
---
-ename:VK_FALSE is a constant representing a basetype:VkBool32 *False* value.
-
-include::{generated}/api/enums/VK_FALSE.txt[]
---
-
-
-[open,refpage='VkDeviceSize',desc='Vulkan device memory size and offsets',type='basetypes']
---
-basetype:VkDeviceSize represents device memory size and offset values:
-
-include::{generated}/api/basetypes/VkDeviceSize.txt[]
---
-
-ifdef::VK_VERSION_1_0,VK_EXT_buffer_device_address,VK_KHR_buffer_device_address[]
-[open,refpage='VkDeviceAddress',desc='Vulkan device address type',type='basetypes']
---
-basetype:VkDeviceAddress represents device buffer address values:
-
-include::{generated}/api/basetypes/VkDeviceAddress.txt[]
---
-endif::VK_VERSION_1_0,VK_EXT_buffer_device_address,VK_KHR_buffer_device_address[]
-
-Commands that create Vulkan objects are of the form ftext:vkCreate* and take
-stext:Vk*CreateInfo structures with the parameters needed to create the
-object.
-These Vulkan objects are destroyed with commands of the form
-ftext:vkDestroy*.
-
-The last in-parameter to each command that creates or destroys a Vulkan
-object is pname:pAllocator.
-The pname:pAllocator parameter can: be set to a non-`NULL` value such that
-allocations for the given object are delegated to an application provided
-callback; refer to the <<memory-allocation,Memory Allocation>> chapter for
-further details.
-
-Commands that allocate Vulkan objects owned by pool objects are of the form
-ftext:vkAllocate*, and take stext:Vk*AllocateInfo structures.
-These Vulkan objects are freed with commands of the form ftext:vkFree*.
-These objects do not take allocators; if host memory is needed, they will
-use the allocator that was specified when their parent pool was created.
-
-Commands are recorded into a command buffer by calling API commands of the
-form ftext:vkCmd*.
-Each such command may: have different restrictions on where it can: be used:
-in a primary and/or secondary command buffer, inside and/or outside a render
-pass, and in one or more of the supported queue types.
-These restrictions are documented together with the definition of each such
-command.
-
-The _duration_ of a Vulkan command refers to the interval between calling
-the command and its return to the caller.
-
-
-[[fundamentals-commandsyntax-results-lifetime]]
-=== Lifetime of Retrieved Results
-
-Information is retrieved from the implementation with commands of the form
-ftext:vkGet* and ftext:vkEnumerate*.
-
-Unless otherwise specified for an individual command, the results are
-_invariant_; that is, they will remain unchanged when retrieved again by
-calling the same command with the same parameters, so long as those
-parameters themselves all remain valid.
-
-
-[[fundamentals-threadingbehavior]]
-== Threading Behavior
-
-Vulkan is intended to provide scalable performance when used on multiple
-host threads.
-All commands support being called concurrently from multiple threads, but
-certain parameters, or components of parameters are defined to be
-_externally synchronized_.
-This means that the caller must: guarantee that no more than one thread is
-using such a parameter at a given time.
-
-More precisely, Vulkan commands use simple stores to update the state of
-Vulkan objects.
-A parameter declared as externally synchronized may: have its contents
-updated at any time during the host execution of the command.
-If two commands operate on the same object and at least one of the commands
-declares the object to be externally synchronized, then the caller must:
-guarantee not only that the commands do not execute simultaneously, but also
-that the two commands are separated by an appropriate memory barrier (if
-needed).
-
-[NOTE]
-.Note
-====
-Memory barriers are particularly relevant for hosts based on the ARM CPU
-architecture, which is more weakly ordered than many developers are
-accustomed to from x86/x64 programming.
-Fortunately, most higher-level synchronization primitives (like the pthread
-library) perform memory barriers as a part of mutual exclusion, so mutexing
-Vulkan objects via these primitives will have the desired effect.
-====
-
-Similarly the application must: avoid any potential data hazard of
-application-owned memory that has its
-<<fundamentals-objectmodel-lifetime-acquire,ownership temporarily acquired>>
-by a Vulkan command.
-While the ownership of application-owned memory remains acquired by a
-command the implementation may: read the memory at any point, and it may:
-write non-code:const qualified memory at any point.
-Parameters referring to non-code:const qualified application-owned memory
-are not marked explicitly as _externally synchronized_ in the Specification.
-
-ifdef::VK_KHR_deferred_host_operations[]
-If an application is using <<deferred-host-operations, deferred host
-operations>> in a command, and that operation is successfully deferred,
-object parameters and application-owned memory passed to that command may:
-be accessed at any time until the deferred operation is complete.
-endif::VK_KHR_deferred_host_operations[]
-
-Many object types are _immutable_, meaning the objects cannot: change once
-they have been created.
-These types of objects never need external synchronization, except that they
-must: not be destroyed while they are in use on another thread.
-In certain special cases mutable object parameters are internally
-synchronized, making external synchronization unnecessary.
-Any command parameters that are not labeled as externally synchronized are
-either not mutated by the command or are internally synchronized.
-Additionally, certain objects related to a command's parameters (e.g.
-command pools and descriptor pools) may: be affected by a command, and must:
-also be externally synchronized.
-These implicit parameters are documented as described below.
-
-Parameters of commands that are externally synchronized are listed below.
-
-include::{generated}/hostsynctable/parameters.txt[]
-
-ifdef::VK_EXT_pipeline_creation_cache_control[]
-For slink:VkPipelineCache objects created with pname:flags containing
-ename:VK_PIPELINE_CACHE_CREATE_EXTERNALLY_SYNCHRONIZED_BIT_EXT, the above
-table is extended with the pname:pipelineCache parameter to
-ftext:vkCreate*Pipelines being externally synchronized.
-endif::VK_EXT_pipeline_creation_cache_control[]
-
-There are also a few instances where a command can: take in a user allocated
-list whose contents are externally synchronized parameters.
-In these cases, the caller must: guarantee that at most one thread is using
-a given element within the list at a given time.
-These parameters are listed below.
-
-include::{generated}/hostsynctable/parameterlists.txt[]
-
-In addition, there are some implicit parameters that need to be externally
-synchronized.
-For example, all pname:commandBuffer parameters that need to be externally
-synchronized imply that the pname:commandPool that was passed in when
-creating that command buffer also needs to be externally synchronized.
-The implicit parameters and their associated object are listed below.
-
-include::{generated}/hostsynctable/implicit.txt[]
-
-
-[[fundamentals-validusage]]
-== Valid Usage
-
-// preserving old id for permalinking
-[[fundamentals-errors]]
-Valid usage defines a set of conditions which must: be met in order to
-achieve well-defined runtime behavior in an application.
-These conditions depend only on Vulkan state, and the parameters or objects
-whose usage is constrained by the condition.
-
-The core layer assumes applications are using the API correctly.
-Except as documented elsewhere in the Specification, the behavior of the
-core layer to an application using the API incorrectly is undefined:, and
-may: include program termination.
-However, implementations must: ensure that incorrect usage by an application
-does not affect the integrity of the operating system, the Vulkan
-implementation, or other Vulkan client applications in the system.
-In particular, any guarantees made by an operating system about whether
-memory from one process can: be visible to another process or not must: not
-be violated by a Vulkan implementation for *any memory allocation*.
-Vulkan implementations are not required: to make additional security or
-integrity guarantees beyond those provided by the OS unless explicitly
-directed by the application's use of a particular feature or extension.
-
-[NOTE]
-.Note
-====
-For instance, if an operating system guarantees that data in all its memory
-allocations are set to zero when newly allocated, the Vulkan implementation
-must: make the same guarantees for any allocations it controls (e.g.
-slink:VkDeviceMemory).
-
-Similarly, if an operating system guarantees that use-after-free of host
-allocations will not result in values written by another process becoming
-visible, the same guarantees must: be made by the Vulkan implementation for
-device memory.
-====
-
-ifdef::VK_VERSION_1_1[]
-If the <<features-protectedMemory, protected memory>> feature is supported,
-the implementation provides additional guarantees when invalid usage occurs
-to prevent values in protected memory from being accessed or inferred
-outside of protected operations, as described in
-<<memory-protected-access-rules>>.
-endif::VK_VERSION_1_1[]
-
-Some valid usage conditions have dependencies on runtime limits or feature
-availability.
-It is possible to validate these conditions against Vulkan's minimum
-supported values for these limits and features, or some subset of other
-known values.
-
-Valid usage conditions do not cover conditions where well-defined behavior
-(including returning an error code) exists.
-
-Valid usage conditions should: apply to the command or structure where
-complete information about the condition would be known during execution of
-an application.
-This is such that a validation layer or linter can: be written directly
-against these statements at the point they are specified.
-
-[NOTE]
-.Note
-====
-This does lead to some non-obvious places for valid usage statements.
-For instance, the valid values for a structure might depend on a separate
-value in the calling command.
-In this case, the structure itself will not reference this valid usage as it
-is impossible to determine validity from the structure that it is invalid -
-instead this valid usage would be attached to the calling command.
-
-Another example is draw state - the state setters are independent, and can
-cause a legitimately invalid state configuration between draw calls; so the
-valid usage statements are attached to the place where all state needs to be
-valid - at the drawing command.
-====
-
-Valid usage conditions are described in a block labelled "`Valid Usage`"
-following each command or structure they apply to.
-
-
-[[fundamentals-validation]]
-=== Usage Validation
-
-Vulkan is a layered API.
-The lowest layer is the core Vulkan layer, as defined by this Specification.
-The application can: use additional layers above the core for debugging,
-validation, and other purposes.
-
-One of the core principles of Vulkan is that building and submitting command
-buffers should: be highly efficient.
-Thus error checking and validation of state in the core layer is minimal,
-although more rigorous validation can: be enabled through the use of layers.
-
-Validation of correct API usage is left to validation layers.
-Applications should: be developed with validation layers enabled, to help
-catch and eliminate errors.
-Once validated, released applications should: not enable validation layers
-by default.
-
-
-[[fundamentals-implicit-validity]]
-=== Implicit Valid Usage
-
-Some valid usage conditions apply to all commands and structures in the API,
-unless explicitly denoted otherwise for a specific command or structure.
-These conditions are considered _implicit_, and are described in a block
-labelled "`Valid Usage (Implicit)`" following each command or structure they
-apply to.
-Implicit valid usage conditions are described in detail below.
-
-
-[[fundamentals-validusage-handles]]
-==== Valid Usage for Object Handles
-
-Any input parameter to a command that is an object handle must: be a valid
-object handle, unless otherwise specified.
-An object handle is valid if:
-
-  * It has been created or allocated by a previous, successful call to the
-    API.
-    Such calls are noted in the Specification.
-  * It has not been deleted or freed by a previous call to the API.
-    Such calls are noted in the Specification.
-  * Any objects used by that object, either as part of creation or
-    execution, must: also be valid.
-
-The reserved values dlink:VK_NULL_HANDLE and `NULL` can: be used in place of
-valid non-dispatchable handles and dispatchable handles, respectively, when
-_explicitly called out in the Specification_.
-Any command that creates an object successfully must: not return these
-values.
-It is valid to pass these values to ftext:vkDestroy* or ftext:vkFree*
-commands, which will silently ignore these values.
-
-
-[[fundamentals-validusage-pointers]]
-==== Valid Usage for Pointers
-
-Any parameter that is a pointer must: be a _valid pointer_ only if it is
-explicitly called out by a Valid Usage statement.
-
-A pointer is "`valid`" if it points at memory containing values of the
-number and type(s) expected by the command, and all fundamental types
-accessed through the pointer (e.g. as elements of an array or as members of
-a structure) satisfy the alignment requirements of the host processor.
-
-[[fundamentals-validusage-strings]]
-==== Valid Usage for Strings
-
-Any parameter that is a pointer to `char` must: be a finite sequence of
-values terminated by a null character, or if _explicitly called out in the
-Specification_, can: be `NULL`.
-
-
-[[fundamentals-validusage-enums]]
-==== Valid Usage for Enumerated Types
-
-Any parameter of an enumerated type must: be a valid enumerant for that
-type.
-A enumerant is valid if:
-
-  * The enumerant is defined as part of the enumerated type.
-  * The enumerant is not the special value (suffixed with
-    etext:_MAX_ENUM^1^) defined for the enumerated type.
-
-1::
-    This special value exists only to ensure that C `enum` types are 32 bits
-    in size.
-    It is not part of the API, and should: not be used by applications.
-
-Any enumerated type returned from a query command or otherwise output from
-Vulkan to the application must: not have a reserved value.
-Reserved values are values not defined by any extension for that enumerated
-type.
-
-[NOTE]
-.Note
-====
-This language is intended to accommodate cases such as "`hidden`" extensions
-known only to driver internals, or layers enabling extensions without
-knowledge of the application, without allowing return of values not defined
-by any extension.
-====
-
-[NOTE]
-.Note
-====
-Application developers are encouraged to be careful when using `switch`
-statements with Vulkan API enums.
-This is because new extensions can add new values to existing enums.
-Using a `default:` statement within a `switch` may avoid future compilation
-issues.
-
-ifdef::VK_VERSION_1_2[]
-This is particularly true for enums such as elink:VkDriverId, which may have
-values added that do not belong to a corresponding new extension.
-endif::VK_VERSION_1_2[]
-====
-
-
-[[fundamentals-validusage-flags]]
-==== Valid Usage for Flags
-
-[open,refpage='VkFlags',desc='Vulkan bitmasks',type='basetypes',xrefs='VkColorComponentFlags']
---
-A collection of flags is represented by a bitmask using the type
-basetype:VkFlags:
-
-include::{generated}/api/basetypes/VkFlags.txt[]
-
-Bitmasks are passed to many commands and structures to compactly represent
-options, but basetype:VkFlags is not used directly in the API.
-Instead, a etext:Vk*Flags type which is an alias of basetype:VkFlags, and
-whose name matches the corresponding etext:Vk*FlagBits that are valid for
-that type, is used.
-
-Any etext:Vk*Flags member or parameter used in the API as an input must: be
-a valid combination of bit flags.
-A valid combination is either zero or the bitwise OR of valid bit flags.
-A bit flag is valid if:
-
-  * The bit flag is defined as part of the etext:Vk*FlagBits type, where the
-    bits type is obtained by taking the flag type and replacing the trailing
-    etext:Flags with etext:FlagBits.
-    For example, a flag value of type tlink:VkColorComponentFlags must:
-    contain only bit flags defined by elink:VkColorComponentFlagBits.
-  * The flag is allowed in the context in which it is being used.
-    For example, in some cases, certain bit flags or combinations of bit
-    flags are mutually exclusive.
-
-Any etext:Vk*Flags member or parameter returned from a query command or
-otherwise output from Vulkan to the application may: contain bit flags
-undefined: in its corresponding etext:Vk*FlagBits type.
-An application cannot: rely on the state of these unspecified bits.
-
-Only the low-order 31 bits (bit positions zero through 30) are available for
-use as flag bits.
-
-[NOTE]
-.Note
-====
-This restriction is due to poorly defined behavior by C compilers given a C
-enumerant value of `0x80000000`.
-In some cases adding this enumerant value may increase the size of the
-underlying etext:Vk*FlagBits type, breaking the ABI.
-====
---
-
-
-
-[[fundamentals-validusage-sType]]
-==== Valid Usage for Structure Types
-
-Any parameter that is a structure containing a pname:sType member must: have
-a value of ptext:sType which is a valid elink:VkStructureType value matching
-the type of the structure.
-
-
-[[fundamentals-validusage-pNext]]
-==== Valid Usage for Structure Pointer Chains
-
-Any parameter that is a structure containing a `void*` ptext:pNext member
-must: have a value of pname:pNext that is either `NULL`, or is a pointer to
-a valid _extending structure_, containing ptext:sType and ptext:pNext
-members as described in the <<vulkan-styleguide,Vulkan Documentation and
-Extensions>> document in the section "`Extension Interactions`".
-The set of structures connected by ptext:pNext pointers is referred to as a
-_pname:pNext chain_.
-
-Each structure included in the pname:pNext chain must: be defined at runtime
-by either:
-
-  * a core version which is supported
-  * an extension which is enabled
-ifdef::VK_VERSION_1_1,VK_KHR_get_physical_device_properties2[]
-  * a supported device extension in the case of physical-device-level
-functionality added by the device extension
-endif::VK_VERSION_1_1,VK_KHR_get_physical_device_properties2[]
-
-Each type of extending structure must: not appear more than once in a
-ptext:pNext chain, including any
-<<extendingvulkan-compatibility-aliases,aliases>>.
-This general rule may be explicitly overridden for specific structures.
-
-Any component of the implementation (the loader, any enabled layers, and
-drivers) must: skip over, without processing (other than reading the
-pname:sType and pname:pNext members) any extending structures in the chain
-not defined by core versions or extensions supported by that component.
-
-As a convenience to implementations and layers needing to iterate through a
-structure pointer chain, the Vulkan API provides two _base structures_.
-These structures allow for some type safety, and can be used by Vulkan API
-functions that operate on generic inputs and outputs.
-
-[open,refpage='VkBaseInStructure',desc='Base structure for a read-only pointer chain',type='structs']
---
-The sname:VkBaseInStructure structure is defined as:
-
-include::{generated}/api/structs/VkBaseInStructure.txt[]
-
-  * pname:sType is the structure type of the structure being iterated
-    through.
-  * pname:pNext is `NULL` or a pointer to the next structure in a structure
-    chain.
-
-sname:VkBaseInStructure can be used to facilitate iterating through a
-read-only structure pointer chain.
---
-
-[open,refpage='VkBaseOutStructure',desc='Base structure for a read-only pointer chain',type='structs']
---
-The sname:VkBaseOutStructure structure is defined as:
-
-include::{generated}/api/structs/VkBaseOutStructure.txt[]
-
-  * pname:sType is the structure type of the structure being iterated
-    through.
-  * pname:pNext is `NULL` or a pointer to the next structure in a structure
-    chain.
-
-sname:VkBaseOutStructure can be used to facilitate iterating through a
-structure pointer chain that returns data back to the application.
---
-
-
-[[fundamentals-validusage-nested-structs]]
-==== Valid Usage for Nested Structures
-
-The above conditions also apply recursively to members of structures
-provided as input to a command, either as a direct argument to the command,
-or themselves a member of another structure.
-
-Specifics on valid usage of each command are covered in their individual
-sections.
-
-
-[[fundamentals-validusage-extensions]]
-==== Valid Usage for Extensions
-
-Instance-level functionality or behavior added by an <<extensions, instance
-extension>> to the API must: not be used unless that extension is supported
-by the instance as determined by
-flink:vkEnumerateInstanceExtensionProperties, and that extension is enabled
-in slink:VkInstanceCreateInfo.
-
-Physical-device-level functionality or behavior added by an <<extensions,
-instance extension>> to the API must: not be used unless that extension is
-supported by the instance as determined by
-flink:vkEnumerateInstanceExtensionProperties, and that extension is enabled
-in slink:VkInstanceCreateInfo.
-
-ifdef::VK_VERSION_1_1,VK_KHR_get_physical_device_properties2[]
-Physical-device-level functionality or behavior added by a <<extensions,
-device extension>> to the API must: not be used unless the conditions
-described in <<initialization-phys-dev-extensions, Extending Physical Device
-Core Functionality>> are met.
-endif::VK_VERSION_1_1,VK_KHR_get_physical_device_properties2[]
-
-Device functionality or behavior added by a <<extensions, device extension>>
-to the API must: not be used unless that extension is supported by the
-device as determined by flink:vkEnumerateDeviceExtensionProperties, and that
-extension is enabled in slink:VkDeviceCreateInfo.
-
-
-[[fundamentals-validusage-versions]]
-==== Valid Usage for Newer Core Versions
-
-ifdef::VK_VERSION_1_1[]
-
-Instance-level functionality or behavior added by a <<versions, new core
-version>> of the API must: not be used unless it is supported by the
-instance as determined by flink:vkEnumerateInstanceVersion and the specified
-version of slink:VkApplicationInfo::pname:apiVersion.
-
-endif::VK_VERSION_1_1[]
-
-Physical-device-level functionality or behavior added by a <<versions, new
-core version>> of the API must: not be used unless it is supported by the
-physical device as determined by
-slink:VkPhysicalDeviceProperties::pname:apiVersion and the specified version
-of slink:VkApplicationInfo::pname:apiVersion.
-
-Device-level functionality or behavior added by a <<versions, new core
-version>> of the API must: not be used unless it is supported by the device
-as determined by slink:VkPhysicalDeviceProperties::pname:apiVersion and the
-specified version of slink:VkApplicationInfo::pname:apiVersion.
-
-
-[[fundamentals-returncodes]]
-== `VkResult` Return Codes
-
-[open,refpage='VkResult',desc='Vulkan command return codes',type='enums']
---
-While the core Vulkan API is not designed to capture incorrect usage, some
-circumstances still require return codes.
-Commands in Vulkan return their status via return codes that are in one of
-two categories:
-
-  * Successful completion codes are returned when a command needs to
-    communicate success or status information.
-    All successful completion codes are non-negative values.
-  * Run time error codes are returned when a command needs to communicate a
-    failure that could only be detected at runtime.
-    All runtime error codes are negative values.
-
-All return codes in Vulkan are reported via elink:VkResult return values.
-The possible codes are:
-
-include::{generated}/api/enums/VkResult.txt[]
-
-[[fundamentals-successcodes]]
-.Success Codes
-  * ename:VK_SUCCESS Command successfully completed
-  * ename:VK_NOT_READY A fence or query has not yet completed
-  * ename:VK_TIMEOUT A wait operation has not completed in the specified
-    time
-  * ename:VK_EVENT_SET An event is signaled
-  * ename:VK_EVENT_RESET An event is unsignaled
-  * ename:VK_INCOMPLETE A return array was too small for the result
-ifdef::VK_KHR_swapchain[]
-  * ename:VK_SUBOPTIMAL_KHR A swapchain no longer matches the surface
-    properties exactly, but can: still be used to present to the surface
-    successfully.
-endif::VK_KHR_swapchain[]
-ifdef::VK_KHR_deferred_host_operations[]
-  * ename:VK_THREAD_IDLE_KHR A deferred operation is not complete but there
-    is currently no work for this thread to do at the time of this call.
-  * ename:VK_THREAD_DONE_KHR A deferred operation is not complete but there
-    is no work remaining to assign to additional threads.
-  * ename:VK_OPERATION_DEFERRED_KHR A deferred operation was requested and
-    at least some of the work was deferred.
-  * ename:VK_OPERATION_NOT_DEFERRED_KHR A deferred operation was requested
-    and no operations were deferred.
-endif::VK_KHR_deferred_host_operations[]
-ifdef::VK_EXT_pipeline_creation_cache_control[]
-  * ename:VK_PIPELINE_COMPILE_REQUIRED_EXT A requested pipeline creation
-    would have required compilation, but the application requested
-    compilation to not be performed.
-endif::VK_EXT_pipeline_creation_cache_control[]
-
-[[fundamentals-errorcodes]]
-.Error codes
-  * ename:VK_ERROR_OUT_OF_HOST_MEMORY A host memory allocation has failed.
-  * ename:VK_ERROR_OUT_OF_DEVICE_MEMORY A device memory allocation has
-    failed.
-  * ename:VK_ERROR_INITIALIZATION_FAILED Initialization of an object could
-    not be completed for implementation-specific reasons.
-  * ename:VK_ERROR_DEVICE_LOST The logical or physical device has been lost.
-    See <<devsandqueues-lost-device,Lost Device>>
-  * ename:VK_ERROR_MEMORY_MAP_FAILED Mapping of a memory object has failed.
-  * ename:VK_ERROR_LAYER_NOT_PRESENT A requested layer is not present or
-    could not be loaded.
-  * ename:VK_ERROR_EXTENSION_NOT_PRESENT A requested extension is not
-    supported.
-  * ename:VK_ERROR_FEATURE_NOT_PRESENT A requested feature is not supported.
-  * ename:VK_ERROR_INCOMPATIBLE_DRIVER The requested version of Vulkan is
-    not supported by the driver or is otherwise incompatible for
-    implementation-specific reasons.
-  * ename:VK_ERROR_TOO_MANY_OBJECTS Too many objects of the type have
-    already been created.
-  * ename:VK_ERROR_FORMAT_NOT_SUPPORTED A requested format is not supported
-    on this device.
-  * ename:VK_ERROR_FRAGMENTED_POOL A pool allocation has failed due to
-    fragmentation of the pool's memory.
-    This must: only be returned if no attempt to allocate host or device
-    memory was made to accommodate the new allocation.
-ifdef::VK_VERSION_1_1,VK_KHR_maintenance1[]
-    This should: be returned in preference to
-    ename:VK_ERROR_OUT_OF_POOL_MEMORY, but only if the implementation is
-    certain that the pool allocation failure was due to fragmentation.
-endif::VK_VERSION_1_1,VK_KHR_maintenance1[]
-ifdef::VK_KHR_surface[]
-  * ename:VK_ERROR_SURFACE_LOST_KHR A surface is no longer available.
-  * ename:VK_ERROR_NATIVE_WINDOW_IN_USE_KHR The requested window is already
-    in use by Vulkan or another API in a manner which prevents it from being
-    used again.
-endif::VK_KHR_surface[]
-ifdef::VK_KHR_swapchain[]
-  * ename:VK_ERROR_OUT_OF_DATE_KHR A surface has changed in such a way that
-    it is no longer compatible with the swapchain, and further presentation
-    requests using the swapchain will fail.
-    Applications must: query the new surface properties and recreate their
-    swapchain if they wish to continue presenting to the surface.
-endif::VK_KHR_swapchain[]
-ifdef::VK_KHR_display_swapchain[]
-  * ename:VK_ERROR_INCOMPATIBLE_DISPLAY_KHR The display used by a swapchain
-    does not use the same presentable image layout, or is incompatible in a
-    way that prevents sharing an image.
-endif::VK_KHR_display_swapchain[]
-ifdef::VK_NV_glsl_shader[]
-  * ename:VK_ERROR_INVALID_SHADER_NV One or more shaders failed to compile
-    or link.
-    More details are reported back to the application via
-    `apiext:VK_EXT_debug_report` if enabled.
-endif::VK_NV_glsl_shader[]
-ifdef::VK_VERSION_1_1,VK_KHR_maintenance1[]
-  * ename:VK_ERROR_OUT_OF_POOL_MEMORY A pool memory allocation has failed.
-    This must: only be returned if no attempt to allocate host or device
-    memory was made to accommodate the new allocation.
-    If the failure was definitely due to fragmentation of the pool,
-    ename:VK_ERROR_FRAGMENTED_POOL should: be returned instead.
-endif::VK_VERSION_1_1,VK_KHR_maintenance1[]
-ifdef::VK_VERSION_1_1,VK_KHR_external_memory,VK_KHR_external_semaphore,VK_KHR_external_fence[]
-  * ename:VK_ERROR_INVALID_EXTERNAL_HANDLE An external handle is not a valid
-    handle of the specified type.
-endif::VK_VERSION_1_1,VK_KHR_external_memory,VK_KHR_external_semaphore,VK_KHR_external_fence[]
-ifdef::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
-  * ename:VK_ERROR_FRAGMENTATION A descriptor pool creation has failed due
-    to fragmentation.
-endif::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
-ifdef::VK_EXT_buffer_device_address[]
-  * ename:VK_ERROR_INVALID_DEVICE_ADDRESS_EXT A buffer creation failed
-    because the requested address is not available.
-endif::VK_EXT_buffer_device_address[]
-ifdef::VK_VERSION_1_2,VK_EXT_buffer_device_address,VK_KHR_buffer_device_address[]
-  * ename:VK_ERROR_INVALID_OPAQUE_CAPTURE_ADDRESS A buffer creation
-ifdef::VK_VERSION_1_2,VK_KHR_buffer_device_address[]
-    or memory allocation
-endif::VK_VERSION_1_2,VK_KHR_buffer_device_address[]
-    failed because the requested address is not available.
-ifdef::VK_KHR_ray_tracing_pipeline[]
-    A shader group handle assignment failed because the requested shader
-    group handle information is no longer valid.
-endif::VK_KHR_ray_tracing_pipeline[]
-endif::VK_VERSION_1_2,VK_EXT_buffer_device_address,VK_KHR_buffer_device_address[]
-ifdef::VK_EXT_full_screen_exclusive[]
-  * ename:VK_ERROR_FULL_SCREEN_EXCLUSIVE_MODE_LOST_EXT An operation on a
-    swapchain created with
-    ename:VK_FULL_SCREEN_EXCLUSIVE_APPLICATION_CONTROLLED_EXT failed as it
-    did not have exlusive full-screen access.
-    This may: occur due to implementation-dependent reasons, outside of the
-    application's control.
-endif::VK_EXT_full_screen_exclusive[]
-  * ename:VK_ERROR_UNKNOWN An unknown error has occurred; either the
-    application has provided invalid input, or an implementation failure has
-    occurred.
-
-If a command returns a runtime error, unless otherwise specified any output
-parameters will have undefined: contents, except that if the output
-parameter is a structure with pname:sType and pname:pNext fields, those
-fields will be unmodified.
-Any structures chained from pname:pNext will also have undefined: contents,
-except that pname:sType and pname:pNext will be unmodified.
-
-etext:VK_ERROR_OUT_OF_*_MEMORY errors do not modify any currently existing
-Vulkan objects.
-Objects that have already been successfully created can: still be used by
-the application.
-
-[NOTE]
-.Note
-====
-As a general rule, ftext:Free, ftext:Release, and ftext:Reset commands do
-not return ename:VK_ERROR_OUT_OF_HOST_MEMORY, while any other command with a
-return code may: return it.
-Any exceptions from this rule are described for those commands.
-====
-
-ename:VK_ERROR_UNKNOWN will be returned by an implementation when an
-unexpected error occurs that cannot be attributed to valid behavior of the
-application and implementation.
-Under these conditions, it may: be returned from any command returning a
-elink:VkResult.
-
-[NOTE]
-.Note
-====
-ename:VK_ERROR_UNKNOWN is not expected to ever be returned if the
-application behavior is valid, and if the implementation is bug-free.
-If ename:VK_ERROR_UNKNOWN is received, the application should be checked
-against the latest validation layers to verify correct behavior as much as
-possible.
-If no issues are identified it could be an implementation issue, and the
-implementor should be contacted for support.
-====
-
-Performance-critical commands generally do not have return codes.
-If a runtime error occurs in such commands, the implementation will defer
-reporting the error until a specified point.
-For commands that record into command buffers (ftext:vkCmd*) runtime errors
-are reported by fname:vkEndCommandBuffer.
-
---
-
-
-[[fundamentals-numerics]]
-== Numeric Representation and Computation
-
-Implementations normally perform computations in floating-point, and must:
-meet the range and precision requirements defined under "`Floating-Point
-Computation`" below.
-
-These requirements only apply to computations performed in Vulkan operations
-outside of shader execution, such as texture image specification and
-sampling, and per-fragment operations.
-Range and precision requirements during shader execution differ and are
-specified by the <<spirvenv-precision-operation, Precision and Operation of
-SPIR-V Instructions>> section.
-
-In some cases, the representation and/or precision of operations is
-implicitly limited by the specified format of vertex or texel data consumed
-by Vulkan.
-Specific floating-point formats are described later in this section.
-
-
-[[fundamentals-floatingpoint]]
-=== Floating-Point Computation
-
-Most floating-point computation is performed in SPIR-V shader modules.
-The properties of computation within shaders are constrained as defined by
-the <<spirvenv-precision-operation, Precision and Operation of SPIR-V
-Instructions>> section.
-
-Some floating-point computation is performed outside of shaders, such as
-viewport and depth range calculations.
-For these computations, we do not specify how floating-point numbers are to
-be represented, or the details of how operations on them are performed, but
-only place minimal requirements on representation and precision as described
-in the remainder of this section.
-
-ifdef::editing-notes[]
-[NOTE]
-.editing-note
-====
-(Jon, Bug 14966) This is a rat's nest of complexity, both in terms of
-describing/enumerating places such computation may: take place (other than
-"`not shader code`") and in how implementations may: do it.
-We have consciously deferred the resolution of this issue to post-1.0, and
-in the meantime, the following language inherited from the OpenGL
-Specification is inserted as a placeholder.
-Hopefully it can: be tightened up considerably.
-====
-endif::editing-notes[]
-
-We require simply that numbers`' floating-point parts contain enough bits
-and that their exponent fields are large enough so that individual results
-of floating-point operations are accurate to about 1 part in 10^5^.
-The maximum representable magnitude for all floating-point values must: be
-at least 2^32^.
-
-  {empty}:: [eq]#x {times} 0 = 0 {times} x = 0# for any non-infinite and
-            non-[eq]#NaN# [eq]#x#.
-  {empty}:: [eq]#1 {times} x = x {times} 1 = x#.
-  {empty}:: [eq]#x {plus} 0 = 0 {plus} x = x#.
-  {empty}:: [eq]#0^0^ = 1#.
-
-Occasionally, further requirements will be specified.
-Most single-precision floating-point formats meet these requirements.
-
-The special values [eq]#Inf# and [eq]#-Inf# encode values with magnitudes
-too large to be represented; the special value [eq]#NaN# encodes "`Not A
-Number`" values resulting from undefined: arithmetic operations such as
-[eq]#0 / 0#.
-Implementations may: support [eq]#Inf# and [eq]#NaN# in their floating-point
-computations.
-
-
-[[fundamentals-fp-conversion]]
-=== Floating-Point Format Conversions
-
-When a value is converted to a defined floating-point representation, finite
-values falling between two representable finite values are rounded to one or
-the other.
-The rounding mode is not defined.
-Finite values whose magnitude is larger than that of any representable
-finite value may be rounded either to the closest representable finite value
-or to the appropriately signed infinity.
-For unsigned destination formats any negative values are converted to zero.
-Positive infinity is converted to positive infinity; negative infinity is
-converted to negative infinity in signed formats and to zero in unsigned
-formats; and any [eq]#NaN# is converted to a [eq]#NaN#.
-
-
-[[fundamentals-fp16]]
-=== 16-Bit Floating-Point Numbers
-
-16-bit floating point numbers are defined in the "`16-bit floating point
-numbers`" section of the <<data-format,Khronos Data Format Specification>>.
-
-
-[[fundamentals-fp11]]
-=== Unsigned 11-Bit Floating-Point Numbers
-
-Unsigned 11-bit floating point numbers are defined in the "`Unsigned 11-bit
-floating point numbers`" section of the <<data-format,Khronos Data Format
-Specification>>.
-
-
-[[fundamentals-fp10]]
-=== Unsigned 10-Bit Floating-Point Numbers
-
-Unsigned 10-bit floating point numbers are defined in the "`Unsigned 10-bit
-floating point numbers`" section of the <<data-format,Khronos Data Format
-Specification>>.
-
-
-[[fundamentals-general]]
-=== General Requirements
-
-Any representable floating-point value in the appropriate format is legal as
-input to a Vulkan command that requires floating-point data.
-The result of providing a value that is not a floating-point number to such
-a command is unspecified, but must: not lead to Vulkan interruption or
-termination.
-For example, providing a negative zero (where applicable) or a denormalized
-number to a Vulkan command must: yield deterministic results, while
-providing a [eq]#NaN# or [eq]#Inf# yields unspecified results.
-
-Some calculations require division.
-In such cases (including implied divisions performed by vector
-normalization), division by zero produces an unspecified result but must:
-not lead to Vulkan interruption or termination.
-
-
-[[fundamentals-fixedconv]]
-== Fixed-Point Data Conversions
-
-When generic vertex attributes and pixel color or depth _components_ are
-represented as integers, they are often (but not always) considered to be
-_normalized_.
-Normalized integer values are treated specially when being converted to and
-from floating-point values, and are usually referred to as _normalized
-fixed-point_.
-
-In the remainder of this section, [eq]#b# denotes the bit width of the
-fixed-point integer representation.
-When the integer is one of the types defined by the API, [eq]#b# is the bit
-width of that type.
-When the integer comes from an <<resources-images,image>> containing color
-or depth component texels, [eq]#b# is the number of bits allocated to that
-component in its <<formats,specified image format>>.
-
-The signed and unsigned fixed-point representations are assumed to be
-[eq]#b#-bit binary two's-complement integers and binary unsigned integers,
-respectively.
-
-
-[[fundamentals-fixedfpconv]]
-=== Conversion from Normalized Fixed-Point to Floating-Point
-
-Unsigned normalized fixed-point integers represent numbers in the range
-[eq]#[0,1]#.
-The conversion from an unsigned normalized fixed-point value [eq]#c# to the
-corresponding floating-point value [eq]#f# is defined as
-
-[latexmath]
-++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-f = { c \over { 2^b - 1 } }
-++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-Signed normalized fixed-point integers represent numbers in the range
-[eq]#[-1,1]#.
-The conversion from a signed normalized fixed-point value [eq]#c# to the
-corresponding floating-point value [eq]#f# is performed using
-
-[latexmath]
-++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-f = \max\left( {c \over {2^{b-1} - 1}}, -1.0 \right)
-++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-Only the range [eq]#[-2^b-1^ {plus} 1, 2^b-1^ - 1]# is used to represent
-signed fixed-point values in the range [eq]#[-1,1]#.
-For example, if [eq]#b = 8#, then the integer value [eq]#-127# corresponds
-to [eq]#-1.0# and the value 127 corresponds to [eq]#1.0#.
-This equation is used everywhere that signed normalized fixed-point values
-are converted to floating-point.
-
-Note that while zero is exactly expressible in this representation, one
-value ([eq]#-128# in the example) is outside the representable range, and
-implementations must: clamp it to [eq]#-1.0#.
-Where the value is subject to further processing by the implementation, e.g.
-during texture filtering, values less than [eq]#-1.0# may: be used but the
-result must: be clamped before the value is returned to shaders.
-
-
-[[fundamentals-fpfixedconv]]
-=== Conversion from Floating-Point to Normalized Fixed-Point
-
-The conversion from a floating-point value [eq]#f# to the corresponding
-unsigned normalized fixed-point value [eq]#c# is defined by first clamping
-[eq]#f# to the range [eq]#[0,1]#, then computing
-
-  {empty}:: [eq]#c = convertFloatToUint(f {times} (2^b^ - 1), b)#
-
-where [eq]#convertFloatToUint(r,b)# returns one of the two unsigned binary
-integer values with exactly [eq]#b# bits which are closest to the
-floating-point value [eq]#r#.
-Implementations should: round to nearest.
-If [eq]#r# is equal to an integer, then that integer value must: be
-returned.
-In particular, if [eq]#f# is equal to 0.0 or 1.0, then [eq]#c# must: be
-assigned 0 or [eq]#2^b^ - 1#, respectively.
-
-The conversion from a floating-point value [eq]#f# to the corresponding
-signed normalized fixed-point value [eq]#c# is performed by clamping [eq]#f#
-to the range [eq]#[-1,1]#, then computing
-
-  {empty}:: [eq]#c = convertFloatToInt(f {times} (2^b-1^ - 1), b)#
-
-where [eq]#convertFloatToInt(r,b)# returns one of the two signed
-two's-complement binary integer values with exactly [eq]#b# bits which are
-closest to the floating-point value [eq]#r#.
-Implementations should: round to nearest.
-If [eq]#r# is equal to an integer, then that integer value must: be
-returned.
-In particular, if [eq]#f# is equal to -1.0, 0.0, or 1.0, then [eq]#c# must:
-be assigned [eq]#-(2^b-1^ - 1)#, 0, or [eq]#2^b-1^ - 1#, respectively.
-
-This equation is used everywhere that floating-point values are converted to
-signed normalized fixed-point.
-
-
-[[fundamentals-common-objects]]
-== Common Object Types
-
-Some types of Vulkan objects are used in many different structures and
-command parameters, and are described here.
-These types include _offsets_, _extents_, and _rectangles_.
-
-
-=== Offsets
-
-Offsets are used to describe a pixel location within an image or
-framebuffer, as an (x,y) location for two-dimensional images, or an (x,y,z)
-location for three-dimensional images.
-
-[open,refpage='VkOffset2D',desc='Structure specifying a two-dimensional offset',type='structs']
---
-A two-dimensional offset is defined by the structure:
-
-include::{generated}/api/structs/VkOffset2D.txt[]
-
-  * pname:x is the x offset.
-  * pname:y is the y offset.
-
-include::{generated}/validity/structs/VkOffset2D.txt[]
---
-
-[open,refpage='VkOffset3D',desc='Structure specifying a three-dimensional offset',type='structs']
---
-A three-dimensional offset is defined by the structure:
-
-include::{generated}/api/structs/VkOffset3D.txt[]
-
-  * pname:x is the x offset.
-  * pname:y is the y offset.
-  * pname:z is the z offset.
-
-include::{generated}/validity/structs/VkOffset3D.txt[]
---
-
-
-=== Extents
-
-Extents are used to describe the size of a rectangular region of pixels
-within an image or framebuffer, as (width,height) for two-dimensional
-images, or as (width,height,depth) for three-dimensional images.
-
-[open,refpage='VkExtent2D',desc='Structure specifying a two-dimensional extent',type='structs']
---
-A two-dimensional extent is defined by the structure:
-
-include::{generated}/api/structs/VkExtent2D.txt[]
-
-  * pname:width is the width of the extent.
-  * pname:height is the height of the extent.
-
-include::{generated}/validity/structs/VkExtent2D.txt[]
---
-
-[open,refpage='VkExtent3D',desc='Structure specifying a three-dimensional extent',type='structs']
---
-A three-dimensional extent is defined by the structure:
-
-include::{generated}/api/structs/VkExtent3D.txt[]
-
-  * pname:width is the width of the extent.
-  * pname:height is the height of the extent.
-  * pname:depth is the depth of the extent.
-
-include::{generated}/validity/structs/VkExtent3D.txt[]
---
-
-
-=== Rectangles
-
-[open,refpage='VkRect2D',desc='Structure specifying a two-dimensional subregion',type='structs']
---
-Rectangles are used to describe a specified rectangular region of pixels
-within an image or framebuffer.
-Rectangles include both an offset and an extent of the same dimensionality,
-as described above.
-Two-dimensional rectangles are defined by the structure
-
-include::{generated}/api/structs/VkRect2D.txt[]
-
-  * pname:offset is a slink:VkOffset2D specifying the rectangle offset.
-  * pname:extent is a slink:VkExtent2D specifying the rectangle extent.
-
-include::{generated}/validity/structs/VkRect2D.txt[]
---
-
-
-// VkStructureType is pretty long,
-// so keep it as a last chapter section for readability.
-=== Structure Types
-
-[open,refpage='VkStructureType',desc='Vulkan structure types (pname:sType)',type='enums']
---
-Each value corresponds to a particular structure with a pname:sType member
-with a matching name.
-As a general rule, the name of each elink:VkStructureType value is obtained
-by taking the name of the structure, stripping the leading etext:Vk,
-prefixing each capital letter with etext:_, converting the entire resulting
-string to upper case, and prefixing it with etext:VK_STRUCTURE_TYPE_.
-For example, structures of type slink:VkImageCreateInfo correspond to a
-elink:VkStructureType of ename:VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO, and thus
-its pname:sType member must: equal that when it is passed to the API.
-
-The values ename:VK_STRUCTURE_TYPE_LOADER_INSTANCE_CREATE_INFO and
-ename:VK_STRUCTURE_TYPE_LOADER_DEVICE_CREATE_INFO are reserved for internal
-use by the loader, and do not have corresponding Vulkan structures in this
-Specification.
-
-Structure types supported by the Vulkan API include:
-
-include::{generated}/api/enums/VkStructureType.txt[]
---
diff --git a/registry/vulkan/chapters/fxvertex.txt b/registry/vulkan/chapters/fxvertex.txt
deleted file mode 100644
index 9cecf97..0000000
--- a/registry/vulkan/chapters/fxvertex.txt
+++ /dev/null
@@ -1,925 +0,0 @@
-// Copyright 2015-2021 The Khronos Group, Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-[[fxvertex]]
-= Fixed-Function Vertex Processing
-
-Vertex fetching is controlled via configurable state, as a logically
-distinct graphics pipeline stage.
-
-
-[[fxvertex-attrib]]
-== Vertex Attributes
-
-Vertex shaders can: define input variables, which receive _vertex attribute_
-data transferred from one or more sname:VkBuffer(s) by drawing commands.
-Vertex shader input variables are bound to buffers via an indirect binding
-where the vertex shader associates a _vertex input attribute_ number with
-each variable, vertex input attributes are associated to _vertex input
-bindings_ on a per-pipeline basis, and vertex input bindings are associated
-with specific buffers on a per-draw basis via the
-fname:vkCmdBindVertexBuffers command.
-Vertex input attribute and vertex input binding descriptions also contain
-format information controlling how data is extracted from buffer memory and
-converted to the format expected by the vertex shader.
-
-There are sname:VkPhysicalDeviceLimits::pname:maxVertexInputAttributes
-number of vertex input attributes and
-sname:VkPhysicalDeviceLimits::pname:maxVertexInputBindings number of vertex
-input bindings (each referred to by zero-based indices), where there are at
-least as many vertex input attributes as there are vertex input bindings.
-Applications can: store multiple vertex input attributes interleaved in a
-single buffer, and use a single vertex input binding to access those
-attributes.
-
-In GLSL, vertex shaders associate input variables with a vertex input
-attribute number using the code:location layout qualifier.
-The code:component layout qualifier associates components of a vertex shader
-input variable with components of a vertex input attribute.
-
-.GLSL example
-[source,glsl]
----------------------------------------------------
-// Assign location M to variableName
-layout (location=M, component=2) in vec2 variableName;
-
-// Assign locations [N,N+L) to the array elements of variableNameArray
-layout (location=N) in vec4 variableNameArray[L];
----------------------------------------------------
-
-In SPIR-V, vertex shaders associate input variables with a vertex input
-attribute number using the code:Location decoration.
-The code:Component decoration associates components of a vertex shader input
-variable with components of a vertex input attribute.
-The code:Location and code:Component decorations are specified via the
-code:OpDecorate instruction.
-
-.SPIR-V example
-[source,spirv]
----------------------------------------------------
-               ...
-          %1 = OpExtInstImport "GLSL.std.450"
-               ...
-               OpName %9 "variableName"
-               OpName %15 "variableNameArray"
-               OpDecorate %18 BuiltIn VertexIndex
-               OpDecorate %19 BuiltIn InstanceIndex
-               OpDecorate %9 Location M
-               OpDecorate %9 Component 2
-               OpDecorate %15 Location N
-               ...
-          %2 = OpTypeVoid
-          %3 = OpTypeFunction %2
-          %6 = OpTypeFloat 32
-          %7 = OpTypeVector %6 2
-          %8 = OpTypePointer Input %7
-          %9 = OpVariable %8 Input
-         %10 = OpTypeVector %6 4
-         %11 = OpTypeInt 32 0
-         %12 = OpConstant %11 L
-         %13 = OpTypeArray %10 %12
-         %14 = OpTypePointer Input %13
-         %15 = OpVariable %14 Input
-               ...
----------------------------------------------------
-
-
-[[fxvertex-attrib-location]]
-=== Attribute Location and Component Assignment
-
-Vertex shaders allow code:Location and code:Component decorations on input
-variable declarations.
-The code:Location decoration specifies which vertex input attribute is used
-to read and interpret the data that a variable will consume.
-The code:Component decoration allows the location to be more finely
-specified for scalars and vectors, down to the individual components within
-a location that are consumed.
-The components within a location are 0, 1, 2, and 3.
-A variable starting at component N will consume components N, N+1, N+2, ...
-up through its size.
-For single precision types, it is invalid if the sequence of components gets
-larger than 3.
-
-When a vertex shader input variable declared using a 16- or 32-bit scalar or
-vector data type is assigned a location, its value(s) are taken from the
-components of the input attribute specified with the corresponding
-sname:VkVertexInputAttributeDescription::pname:location.
-The components used depend on the type of variable and the code:Component
-decoration specified in the variable declaration, as identified in
-<<fxvertex-attrib-components>>.
-Any 16-bit or 32-bit scalar or vector input will consume a single location.
-For 16-bit and 32-bit data types, missing components are filled in with
-default values as described <<fxvertex-input-extraction,below>>.
-
-
-[[fxvertex-attrib-components]]
-.Input attribute components accessed by 16-bit and 32-bit input variables
-[width="65%",cols="<5,<3,<3",options="header"]
-|====
-| 16-bit or 32-bit data type | code:Component decoration | Components consumed
-| scalar                     | 0 or unspecified             | (x, o, o, o)
-| scalar                     | 1                            | (o, y, o, o)
-| scalar                     | 2                            | (o, o, z, o)
-| scalar                     | 3                            | (o, o, o, w)
-| two-component vector       | 0 or unspecified             | (x, y, o, o)
-| two-component vector       | 1                            | (o, y, z, o)
-| two-component vector       | 2                            | (o, o, z, w)
-| three-component vector     | 0 or unspecified             | (x, y, z, o)
-| three-component vector     | 1                            | (o, y, z, w)
-| four-component vector      | 0 or unspecified             | (x, y, z, w)
-|====
-
-Components indicated by "`o`" are available for use by other input variables
-which are sourced from the same attribute, and if used, are either filled
-with the corresponding component from the input format (if present), or the
-default value.
-
-When a vertex shader input variable declared using a 32-bit floating point
-matrix type is assigned a location _i_, its values are taken from
-consecutive input attributes starting with the corresponding
-sname:VkVertexInputAttributeDescription::pname:location.
-Such matrices are treated as an array of column vectors with values taken
-from the input attributes identified in <<fxvertex-attrib-matrix>>.
-The sname:VkVertexInputAttributeDescription::pname:format must: be specified
-with a elink:VkFormat that corresponds to the appropriate type of column
-vector.
-The code:Component decoration must: not be used with matrix types.
-
-[[fxvertex-attrib-matrix]]
-.Input attributes accessed by 32-bit input matrix variables
-[width="100%",cols="<10%,<24%,<21%,<45%",options="header"]
-|====
-| Data type     | Column vector type        | Locations consumed    | Components consumed
-| mat2          | two-component vector      | i, i+1                | (x, y, o, o), (x, y, o, o)
-| mat2x3        | three-component vector    | i, i+1                | (x, y, z, o), (x, y, z, o)
-| mat2x4        | four-component vector     | i, i+1                | (x, y, z, w), (x, y, z, w)
-| mat3x2        | two-component vector      | i, i+1, i+2           | (x, y, o, o), (x, y, o, o), (x, y, o, o)
-| mat3          | three-component vector    | i, i+1, i+2           | (x, y, z, o), (x, y, z, o), (x, y, z, o)
-| mat3x4        | four-component vector     | i, i+1, i+2           | (x, y, z, w), (x, y, z, w), (x, y, z, w)
-| mat4x2        | two-component vector      | i, i+1, i+2, i+3      | (x, y, o, o), (x, y, o, o), (x, y, o, o), (x, y, o, o)
-| mat4x3        | three-component vector    | i, i+1, i+2, i+3      | (x, y, z, o), (x, y, z, o), (x, y, z, o), (x, y, z, o)
-| mat4          | four-component vector     | i, i+1, i+2, i+3      | (x, y, z, w), (x, y, z, w), (x, y, z, w), (x, y, z, w)
-|====
-
-Components indicated by "`o`" are available for use by other input variables
-which are sourced from the same attribute, and if used, are either filled
-with the corresponding component from the input (if present), or the default
-value.
-
-When a vertex shader input variable declared using a scalar or vector 64-bit
-data type is assigned a location _i_, its values are taken from consecutive
-input attributes starting with the corresponding
-sname:VkVertexInputAttributeDescription::pname:location.
-The locations and components used depend on the type of variable and the
-code:Component decoration specified in the variable declaration, as
-identified in <<fxvertex-attrib-double>>.
-For 64-bit data types, no default attribute values are provided.
-Input variables must: not use more components than provided by the
-attribute.
-Input attributes which have one- or two-component 64-bit formats will
-consume a single location.
-Input attributes which have three- or four-component 64-bit formats will
-consume two consecutive locations.
-A 64-bit scalar data type will consume two components, and a 64-bit
-two-component vector data type will consume all four components available
-within a location.
-A three- or four-component 64-bit data type must: not specify a component.
-A three-component 64-bit data type will consume all four components of the
-first location and components 0 and 1 of the second location.
-This leaves components 2 and 3 available for other component-qualified
-declarations.
-A four-component 64-bit data type will consume all four components of the
-first location and all four components of the second location.
-It is invalid for a scalar or two-component 64-bit data type to specify a
-component of 1 or 3.
-
-[[fxvertex-attrib-double]]
-.Input attribute locations and components accessed by 64-bit input variables
-[width="100%",cols="<18%,^12%,<25%,^14%,^18%,<13%",options="header"]
-|====
-^.^| Input format | Locations consumed
-        ^.^| 64-bit data type   |code:Location decoration |code:Component decoration ^| 32-bit components consumed
-| R64          | i
-        | scalar                  | i                         | 0 or unspecified           | (x, y, -, -)
-.3+<.^| R64G64 .3+^.^| i
-        | scalar                  | i                         | 0 or unspecified           | (x, y, o, o)
-        | scalar                  | i                         | 2                          | (o, o, z, w)
-        | two-component vector    | i                         | 0 or unspecified           | (x, y, z, w)
-.5+<.^| R64G64B64 .5+^.^| i, i+1
-        | scalar                  | i                         | 0 or unspecified           | (x, y, o, o), (o, o, -, -)
-        | scalar                  | i                         | 2                          | (o, o, z, w), (o, o, -, -)
-        | scalar                  | i+1                       | 0 or unspecified           | (o, o, o, o), (x, y, -, -)
-        | two-component vector    | i                         | 0 or unspecified           | (x, y, z, w), (o, o, -, -)
-        | three-component vector  | i                         | unspecified                | (x, y, z, w), (x, y, -, -)
-.8+<.^| R64G64B64A64 .8+^.^| i, i+1
-        | scalar                  | i                         | 0 or unspecified           | (x, y, o, o), (o, o, o, o)
-        | scalar                  | i                         | 2                          | (o, o, z, w), (o, o, o, o)
-        | scalar                  | i+1                       | 0 or unspecified           | (o, o, o, o), (x, y, o, o)
-        | scalar                  | i+1                       | 2                          | (o, o, o, o), (o, o, z, w)
-        | two-component vector    | i                         | 0 or unspecified           | (x, y, z, w), (o, o, o, o)
-        | two-component vector    | i+1                       | 0 or unspecified           | (o, o, o, o), (x, y, z, w)
-        | three-component vector  | i                         | unspecified                | (x, y, z, w), (x, y, o, o)
-        | four-component vector   | i                         | unspecified                | (x, y, z, w), (x, y, z, w)
-|====
-
-Components indicated by "`o`" are available for use by other input variables
-which are sourced from the same attribute.
-Components indicated by "`-`" are not available for input variables as there
-are no default values provided for 64-bit data types, and there is no data
-provided by the input format.
-
-When a vertex shader input variable declared using a 64-bit floating-point
-matrix type is assigned a location _i_, its values are taken from
-consecutive input attribute locations.
-Such matrices are treated as an array of column vectors with values taken
-from the input attributes as shown in <<fxvertex-attrib-double>>.
-Each column vector starts at the location immediately following the last
-location of the previous column vector.
-The number of attributes and components assigned to each matrix is
-determined by the matrix dimensions and ranges from two to eight locations.
-
-When a vertex shader input variable declared using an array type is assigned
-a location, its values are taken from consecutive input attributes starting
-with the corresponding
-sname:VkVertexInputAttributeDescription::pname:location.
-The number of attributes and components assigned to each element are
-determined according to the data type of the array elements and
-code:Component decoration (if any) specified in the declaration of the
-array, as described above.
-Each element of the array, in order, is assigned to consecutive locations,
-but all at the same specified component within each location.
-
-Only input variables declared with the data types and component decorations
-as specified above are supported.
-_Location aliasing_ is causing two variables to have the same location
-number.
-_Component aliasing_ is assigning the same (or overlapping) component number
-for two location aliases.
-Location aliasing is allowed only if it does not cause component aliasing.
-Further, when location aliasing, the aliases sharing the location must: all
-have the same SPIR-V floating-point component type or all have the same
-width integer-type components.
-
-
-[[fxvertex-input]]
-== Vertex Input Description
-
-Applications specify vertex input attribute and vertex input binding
-descriptions as part of graphics pipeline creation by setting the
-slink:VkGraphicsPipelineCreateInfo::pname:pVertexInputState pointer to a
-slink:VkPipelineVertexInputStateCreateInfo structure.
-ifdef::VK_EXT_vertex_input_dynamic_state[]
-Alternatively, if the graphics pipeline is created with the
-ename:VK_DYNAMIC_STATE_VERTEX_INPUT_EXT dynamic state enabled, then the
-vertex input attribute and vertex input binding descriptions are specified
-dynamically with flink:vkCmdSetVertexInputEXT, and the
-slink:VkGraphicsPipelineCreateInfo::pname:pVertexInputState pointer is
-ignored.
-endif::VK_EXT_vertex_input_dynamic_state[]
-
-[open,refpage='VkPipelineVertexInputStateCreateInfo',desc='Structure specifying parameters of a newly created pipeline vertex input state',type='structs']
---
-The sname:VkPipelineVertexInputStateCreateInfo structure is defined as:
-
-include::{generated}/api/structs/VkPipelineVertexInputStateCreateInfo.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:flags is reserved for future use.
-  * pname:vertexBindingDescriptionCount is the number of vertex binding
-    descriptions provided in pname:pVertexBindingDescriptions.
-  * pname:pVertexBindingDescriptions is a pointer to an array of
-    sname:VkVertexInputBindingDescription structures.
-  * pname:vertexAttributeDescriptionCount is the number of vertex attribute
-    descriptions provided in pname:pVertexAttributeDescriptions.
-  * pname:pVertexAttributeDescriptions is a pointer to an array of
-    sname:VkVertexInputAttributeDescription structures.
-
-.Valid Usage
-****
-  * [[VUID-VkPipelineVertexInputStateCreateInfo-vertexBindingDescriptionCount-00613]]
-    pname:vertexBindingDescriptionCount must: be less than or equal to
-    sname:VkPhysicalDeviceLimits::pname:maxVertexInputBindings
-  * [[VUID-VkPipelineVertexInputStateCreateInfo-vertexAttributeDescriptionCount-00614]]
-    pname:vertexAttributeDescriptionCount must: be less than or equal to
-    sname:VkPhysicalDeviceLimits::pname:maxVertexInputAttributes
-  * [[VUID-VkPipelineVertexInputStateCreateInfo-binding-00615]]
-    For every pname:binding specified by each element of
-    pname:pVertexAttributeDescriptions, a
-    sname:VkVertexInputBindingDescription must: exist in
-    pname:pVertexBindingDescriptions with the same value of pname:binding
-  * [[VUID-VkPipelineVertexInputStateCreateInfo-pVertexBindingDescriptions-00616]]
-    All elements of pname:pVertexBindingDescriptions must: describe distinct
-    binding numbers
-  * [[VUID-VkPipelineVertexInputStateCreateInfo-pVertexAttributeDescriptions-00617]]
-    All elements of pname:pVertexAttributeDescriptions must: describe
-    distinct attribute locations
-****
-
-include::{generated}/validity/structs/VkPipelineVertexInputStateCreateInfo.txt[]
---
-
-[open,refpage='VkPipelineVertexInputStateCreateFlags',desc='Reserved for future use',type='flags']
---
-include::{generated}/api/flags/VkPipelineVertexInputStateCreateFlags.txt[]
-
-tname:VkPipelineVertexInputStateCreateFlags is a bitmask type for setting a
-mask, but is currently reserved for future use.
---
-
-[open,refpage='VkVertexInputBindingDescription',desc='Structure specifying vertex input binding description',type='structs']
---
-Each vertex input binding is specified by the
-sname:VkVertexInputBindingDescription structure, defined as:
-
-include::{generated}/api/structs/VkVertexInputBindingDescription.txt[]
-
-  * pname:binding is the binding number that this structure describes.
-  * pname:stride is the byte stride between consecutive elements within the
-    buffer.
-  * pname:inputRate is a elink:VkVertexInputRate value specifying whether
-    vertex attribute addressing is a function of the vertex index or of the
-    instance index.
-
-.Valid Usage
-****
-  * [[VUID-VkVertexInputBindingDescription-binding-00618]]
-    pname:binding must: be less than
-    sname:VkPhysicalDeviceLimits::pname:maxVertexInputBindings
-  * [[VUID-VkVertexInputBindingDescription-stride-00619]]
-    pname:stride must: be less than or equal to
-    sname:VkPhysicalDeviceLimits::pname:maxVertexInputBindingStride
-ifdef::VK_KHR_portability_subset[]
-  * [[VUID-VkVertexInputBindingDescription-stride-04456]]
-    If the `apiext:VK_KHR_portability_subset` extension is enabled,
-    pname:stride must: be a multiple of, and at least as large as,
-    slink:VkPhysicalDevicePortabilitySubsetPropertiesKHR::pname:minVertexInputBindingStrideAlignment
-endif::VK_KHR_portability_subset[]
-****
-
-include::{generated}/validity/structs/VkVertexInputBindingDescription.txt[]
---
-
-[open,refpage='VkVertexInputRate',desc='Specify rate at which vertex attributes are pulled from buffers',type='enums']
---
-Possible values of slink:VkVertexInputBindingDescription::pname:inputRate,
-specifying the rate at which vertex attributes are pulled from buffers, are:
-
-include::{generated}/api/enums/VkVertexInputRate.txt[]
-
-  * ename:VK_VERTEX_INPUT_RATE_VERTEX specifies that vertex attribute
-    addressing is a function of the vertex index.
-  * ename:VK_VERTEX_INPUT_RATE_INSTANCE specifies that vertex attribute
-    addressing is a function of the instance index.
---
-
-[open,refpage='VkVertexInputAttributeDescription',desc='Structure specifying vertex input attribute description',type='structs']
---
-Each vertex input attribute is specified by the
-sname:VkVertexInputAttributeDescription structure, defined as:
-
-include::{generated}/api/structs/VkVertexInputAttributeDescription.txt[]
-
-  * pname:location is the shader input location number for this attribute.
-  * pname:binding is the binding number which this attribute takes its data
-    from.
-  * pname:format is the size and type of the vertex attribute data.
-  * pname:offset is a byte offset of this attribute relative to the start of
-    an element in the vertex input binding.
-
-.Valid Usage
-****
-  * [[VUID-VkVertexInputAttributeDescription-location-00620]]
-    pname:location must: be less than
-    sname:VkPhysicalDeviceLimits::pname:maxVertexInputAttributes
-  * [[VUID-VkVertexInputAttributeDescription-binding-00621]]
-    pname:binding must: be less than
-    sname:VkPhysicalDeviceLimits::pname:maxVertexInputBindings
-  * [[VUID-VkVertexInputAttributeDescription-offset-00622]]
-    pname:offset must: be less than or equal to
-    sname:VkPhysicalDeviceLimits::pname:maxVertexInputAttributeOffset
-  * [[VUID-VkVertexInputAttributeDescription-format-00623]]
-    pname:format must: be allowed as a vertex buffer format, as specified by
-    the ename:VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT flag in
-    sname:VkFormatProperties::pname:bufferFeatures returned by
-    fname:vkGetPhysicalDeviceFormatProperties
-ifdef::VK_KHR_portability_subset[]
-  * [[VUID-VkVertexInputAttributeDescription-vertexAttributeAccessBeyondStride-04457]]
-    If the `apiext:VK_KHR_portability_subset` extension is enabled, and
-    slink:VkPhysicalDevicePortabilitySubsetFeaturesKHR::pname:vertexAttributeAccessBeyondStride
-    is ename:VK_FALSE, the sum of pname:offset plus the size of the vertex
-    attribute data described by pname:format must: not be greater than
-    pname:stride in the slink:VkVertexInputBindingDescription referenced in
-    pname:binding
-endif::VK_KHR_portability_subset[]
-****
-
-include::{generated}/validity/structs/VkVertexInputAttributeDescription.txt[]
---
-
-ifdef::VK_EXT_vertex_input_dynamic_state[]
-[open,refpage='vkCmdSetVertexInputEXT',desc='Set the vertex input state dynamically for a command buffer',type='protos']
---
-To <<pipelines-dynamic-state, dynamically set>> the vertex input attribute
-and vertex input binding descriptions, call:
-
-include::{generated}/api/protos/vkCmdSetVertexInputEXT.txt[]
-
-  * pname:commandBuffer is the command buffer into which the command will be
-    recorded.
-  * pname:vertexBindingDescriptionCount is the number of vertex binding
-    descriptions provided in pname:pVertexBindingDescriptions.
-  * pname:pVertexBindingDescriptions is a pointer to an array of
-    sname:VkVertexInputBindingDescription2EXT structures.
-  * pname:vertexAttributeDescriptionCount is the number of vertex attribute
-    descriptions provided in pname:pVertexAttributeDescriptions.
-  * pname:pVertexAttributeDescriptions is a pointer to an array of
-    sname:VkVertexInputAttributeDescription2EXT structures.
-
-This command sets the vertex input attribute and vertex input binding
-descriptions state for subsequent drawing commands when the graphics
-pipeline is created with ename:VK_DYNAMIC_STATE_VERTEX_INPUT_EXT set in
-slink:VkPipelineDynamicStateCreateInfo::pname:pDynamicStates.
-Otherwise, this state is specified by the
-slink:VkGraphicsPipelineCreateInfo::pname:pVertexInputState values used to
-create the currently active pipeline.
-
-ifdef::VK_EXT_extended_dynamic_state[]
-If the bound pipeline state object was also created with the
-ename:VK_DYNAMIC_STATE_VERTEX_INPUT_BINDING_STRIDE_EXT dynamic state
-enabled, then flink:vkCmdBindVertexBuffers2EXT can be used instead of
-fname:vkCmdSetVertexInputEXT to dynamically set the stride.
-endif::VK_EXT_extended_dynamic_state[]
-
-.Valid Usage
-****
-  * [[VUID-vkCmdSetVertexInputEXT-None-04790]]
-    The <<features-vertexInputDynamicState, vertexInputDynamicState>>
-    feature must: be enabled
-  * [[VUID-vkCmdSetVertexInputEXT-vertexBindingDescriptionCount-04791]]
-    pname:vertexBindingDescriptionCount must: be less than or equal to
-    sname:VkPhysicalDeviceLimits::pname:maxVertexInputBindings
-  * [[VUID-vkCmdSetVertexInputEXT-vertexAttributeDescriptionCount-04792]]
-    pname:vertexAttributeDescriptionCount must: be less than or equal to
-    sname:VkPhysicalDeviceLimits::pname:maxVertexInputAttributes
-  * [[VUID-vkCmdSetVertexInputEXT-binding-04793]]
-    For every pname:binding specified by each element of
-    pname:pVertexAttributeDescriptions, a
-    sname:VkVertexInputBindingDescription2EXT must: exist in
-    pname:pVertexBindingDescriptions with the same value of pname:binding
-  * [[VUID-vkCmdSetVertexInputEXT-pVertexBindingDescriptions-04794]]
-    All elements of pname:pVertexBindingDescriptions must: describe distinct
-    binding numbers
-  * [[VUID-vkCmdSetVertexInputEXT-pVertexAttributeDescriptions-04795]]
-    All elements of pname:pVertexAttributeDescriptions must: describe
-    distinct attribute locations
-****
-
-include::{generated}/validity/protos/vkCmdSetVertexInputEXT.txt[]
---
-
-[open,refpage='VkVertexInputBindingDescription2EXT',desc='Structure specifying the extended vertex input binding description',type='structs']
---
-The sname:VkVertexInputBindingDescription2EXT structure is defined as:
-
-include::{generated}/api/structs/VkVertexInputBindingDescription2EXT.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:binding is the binding number that this structure describes.
-  * pname:stride is the byte stride between consecutive elements within the
-    buffer.
-  * pname:inputRate is a elink:VkVertexInputRate value specifying whether
-    vertex attribute addressing is a function of the vertex index or of the
-    instance index.
-ifdef::VK_EXT_vertex_attribute_divisor[]
-  * pname:divisor is the number of successive instances that will use the
-    same value of the vertex attribute when instanced rendering is enabled.
-    This member can: be set to a value other than `1` if the
-    <<features-vertexAttributeInstanceRateDivisor,
-    vertexAttributeInstanceRateDivisor>> feature is enabled.
-    For example, if the divisor is N, the same vertex attribute will be
-    applied to N successive instances before moving on to the next vertex
-    attribute.
-    The maximum value of pname:divisor is implementation-dependent and can
-    be queried using
-    sname:VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT::pname:maxVertexAttribDivisor.
-    A value of `0` can: be used for the divisor if the
-    <<features-vertexAttributeInstanceRateZeroDivisor,pname:vertexAttributeInstanceRateZeroDivisor>>
-    feature is enabled.
-    In this case, the same vertex attribute will be applied to all
-    instances.
-endif::VK_EXT_vertex_attribute_divisor[]
-ifndef::VK_EXT_vertex_attribute_divisor[]
-  * pname:divisor must: be set to `1`
-endif::VK_EXT_vertex_attribute_divisor[]
-
-.Valid Usage
-****
-  * [[VUID-VkVertexInputBindingDescription2EXT-binding-04796]]
-    pname:binding must: be less than
-    sname:VkPhysicalDeviceLimits::pname:maxVertexInputBindings
-  * [[VUID-VkVertexInputBindingDescription2EXT-stride-04797]]
-    pname:stride must: be less than or equal to
-    sname:VkPhysicalDeviceLimits::pname:maxVertexInputBindingStride
-  * [[VUID-VkVertexInputBindingDescription2EXT-divisor-04798]]
-    If the <<features-vertexAttributeInstanceRateZeroDivisor,
-    vertexAttributeInstanceRateZeroDivisor>> feature is not enabled,
-    pname:divisor must: not be `0`
-  * [[VUID-VkVertexInputBindingDescription2EXT-divisor-04799]]
-    If the <<features-vertexAttributeInstanceRateDivisor,
-    vertexAttributeInstanceRateDivisor>> feature is not enabled,
-    pname:divisor must: be `1`
-  * [[VUID-VkVertexInputBindingDescription2EXT-divisor-06226]]
-    pname:divisor must: be a value between `0` and
-    sname:VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT::pname:maxVertexAttribDivisor,
-    inclusive
-  * [[VUID-VkVertexInputBindingDescription2EXT-divisor-06227]]
-    If pname:divisor is not `1` then pname:inputRate must: be of type
-    ename:VK_VERTEX_INPUT_RATE_INSTANCE
-****
-
-include::{generated}/validity/structs/VkVertexInputBindingDescription2EXT.txt[]
---
-
-[open,refpage='VkVertexInputAttributeDescription2EXT',desc='Structure specifying the extended vertex input attribute description',type='structs']
---
-The sname:VkVertexInputAttributeDescription2EXT structure is defined as:
-
-include::{generated}/api/structs/VkVertexInputAttributeDescription2EXT.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:location is the shader input location number for this attribute.
-  * pname:binding is the binding number which this attribute takes its data
-    from.
-  * pname:format is the size and type of the vertex attribute data.
-  * pname:offset is a byte offset of this attribute relative to the start of
-    an element in the vertex input binding.
-
-.Valid Usage
-****
-  * [[VUID-VkVertexInputAttributeDescription2EXT-location-06228]]
-    pname:location must: be less than
-    sname:VkPhysicalDeviceLimits::pname:maxVertexInputAttributes
-  * [[VUID-VkVertexInputAttributeDescription2EXT-binding-06229]]
-    pname:binding must: be less than
-    sname:VkPhysicalDeviceLimits::pname:maxVertexInputBindings
-  * [[VUID-VkVertexInputAttributeDescription2EXT-offset-06230]]
-    pname:offset must: be less than or equal to
-    sname:VkPhysicalDeviceLimits::pname:maxVertexInputAttributeOffset
-  * [[VUID-VkVertexInputAttributeDescription2EXT-format-04805]]
-    pname:format must: be allowed as a vertex buffer format, as specified by
-    the ename:VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT flag in
-    sname:VkFormatProperties::pname:bufferFeatures returned by
-    fname:vkGetPhysicalDeviceFormatProperties
-ifdef::VK_KHR_portability_subset[]
-  * [[VUID-VkVertexInputAttributeDescription2EXT-vertexAttributeAccessBeyondStride-04806]]
-    If the `apiext:VK_KHR_portability_subset` extension is enabled, and
-    slink:VkPhysicalDevicePortabilitySubsetFeaturesKHR::pname:vertexAttributeAccessBeyondStride
-    is ename:VK_FALSE, the sum of pname:offset plus the size of the vertex
-    attribute data described by pname:format must: not be greater than
-    pname:stride in the slink:VkVertexInputBindingDescription2EXT referenced
-    in pname:binding
-endif::VK_KHR_portability_subset[]
-****
-
-include::{generated}/validity/structs/VkVertexInputAttributeDescription2EXT.txt[]
---
-endif::VK_EXT_vertex_input_dynamic_state[]
-
-[open,refpage='vkCmdBindVertexBuffers',desc='Bind vertex buffers to a command buffer',type='protos']
---
-To bind vertex buffers to a command buffer for use in subsequent drawing
-commands, call:
-
-include::{generated}/api/protos/vkCmdBindVertexBuffers.txt[]
-
-  * pname:commandBuffer is the command buffer into which the command is
-    recorded.
-  * pname:firstBinding is the index of the first vertex input binding whose
-    state is updated by the command.
-  * pname:bindingCount is the number of vertex input bindings whose state is
-    updated by the command.
-  * pname:pBuffers is a pointer to an array of buffer handles.
-  * pname:pOffsets is a pointer to an array of buffer offsets.
-
-The values taken from elements [eq]#i# of pname:pBuffers and pname:pOffsets
-replace the current state for the vertex input binding
-[eq]#pname:firstBinding {plus} i#, for [eq]#i# in [eq]#[0,
-pname:bindingCount)#.
-The vertex input binding is updated to start at the offset indicated by
-pname:pOffsets[i] from the start of the buffer pname:pBuffers[i].
-All vertex input attributes that use each of these bindings will use these
-updated addresses in their address calculations for subsequent drawing
-commands.
-ifdef::VK_EXT_robustness2[]
-If the <<features-nullDescriptor,nullDescriptor>> feature is enabled,
-elements of pname:pBuffers can: be dlink:VK_NULL_HANDLE, and can: be used by
-the vertex shader.
-If a vertex input attribute is bound to a vertex input binding that is
-dlink:VK_NULL_HANDLE, the values taken from memory are considered to be
-zero, and missing G, B, or A components are
-<<fxvertex-input-extraction,filled with [eq]#(0,0,1)#>>.
-endif::VK_EXT_robustness2[]
-
-.Valid Usage
-****
-  * [[VUID-vkCmdBindVertexBuffers-firstBinding-00624]]
-    pname:firstBinding must: be less than
-    sname:VkPhysicalDeviceLimits::pname:maxVertexInputBindings
-  * [[VUID-vkCmdBindVertexBuffers-firstBinding-00625]]
-    The sum of pname:firstBinding and pname:bindingCount must: be less than
-    or equal to sname:VkPhysicalDeviceLimits::pname:maxVertexInputBindings
-  * [[VUID-vkCmdBindVertexBuffers-pOffsets-00626]]
-    All elements of pname:pOffsets must: be less than the size of the
-    corresponding element in pname:pBuffers
-  * [[VUID-vkCmdBindVertexBuffers-pBuffers-00627]]
-    All elements of pname:pBuffers must: have been created with the
-    ename:VK_BUFFER_USAGE_VERTEX_BUFFER_BIT flag
-  * [[VUID-vkCmdBindVertexBuffers-pBuffers-00628]]
-    Each element of pname:pBuffers that is non-sparse must: be bound
-    completely and contiguously to a single sname:VkDeviceMemory object
-  * [[VUID-vkCmdBindVertexBuffers-pBuffers-04001]]
-    If the <<features-nullDescriptor,nullDescriptor>> feature is not
-    enabled, all elements of pname:pBuffers must: not be
-    dlink:VK_NULL_HANDLE
-ifdef::VK_EXT_robustness2[]
-  * [[VUID-vkCmdBindVertexBuffers-pBuffers-04002]]
-    If an element of pname:pBuffers is dlink:VK_NULL_HANDLE, then the
-    corresponding element of pname:pOffsets must: be zero
-endif::VK_EXT_robustness2[]
-****
-
-include::{generated}/validity/protos/vkCmdBindVertexBuffers.txt[]
---
-
-ifdef::VK_EXT_extended_dynamic_state[]
-[open,refpage='vkCmdBindVertexBuffers2EXT',desc='Bind vertex buffers to a command buffer and dynamically set strides',type='protos']
---
-Alternatively, to bind vertex buffers, along with their sizes and strides,
-to a command buffer for use in subsequent drawing commands, call:
-
-include::{generated}/api/protos/vkCmdBindVertexBuffers2EXT.txt[]
-
-  * pname:commandBuffer is the command buffer into which the command is
-    recorded.
-  * pname:firstBinding is the index of the first vertex input binding whose
-    state is updated by the command.
-  * pname:bindingCount is the number of vertex input bindings whose state is
-    updated by the command.
-  * pname:pBuffers is a pointer to an array of buffer handles.
-  * pname:pOffsets is a pointer to an array of buffer offsets.
-  * pname:pSizes is `NULL` or a pointer to an array of the size in bytes of
-    vertex data bound from pname:pBuffers.
-  * pname:pStrides is `NULL` or a pointer to an array of buffer strides.
-
-The values taken from elements [eq]#i# of pname:pBuffers and pname:pOffsets
-replace the current state for the vertex input binding
-[eq]#pname:firstBinding {plus} i#, for [eq]#i# in [eq]#[0,
-pname:bindingCount)#.
-The vertex input binding is updated to start at the offset indicated by
-pname:pOffsets[i] from the start of the buffer pname:pBuffers[i].
-If pname:pSizes is not `NULL` then pname:pSizes[i] specifies the bound size
-of the vertex buffer starting from the corresponding elements of
-pname:pBuffers[i] plus pname:pOffsets[i].
-All vertex input attributes that use each of these bindings will use these
-updated addresses in their address calculations for subsequent drawing
-commands.
-ifdef::VK_EXT_robustness2[]
-If the <<features-nullDescriptor,nullDescriptor>> feature is enabled,
-elements of pname:pBuffers can: be dlink:VK_NULL_HANDLE, and can: be used by
-the vertex shader.
-If a vertex input attribute is bound to a vertex input binding that is
-dlink:VK_NULL_HANDLE, the values taken from memory are considered to be
-zero, and missing G, B, or A components are
-<<fxvertex-input-extraction,filled with [eq]#(0,0,1)#>>.
-endif::VK_EXT_robustness2[]
-
-This command also <pipelines-dynamic-state, dynamically sets>> the byte
-strides between consecutive elements within buffer pname:pBuffers[i] to the
-corresponding pname:pStrides[i] value when the graphics pipeline is created
-with ename:VK_DYNAMIC_STATE_VERTEX_INPUT_BINDING_STRIDE_EXT set in
-slink:VkPipelineDynamicStateCreateInfo::pname:pDynamicStates.
-Otherwise, strides are specified by the
-sname:VkVertexInputBindingDescription::pname:stride values used to create
-the currently active pipeline.
-
-ifdef::VK_EXT_vertex_input_dynamic_state[]
-If the bound pipeline state object was also created with the
-ename:VK_DYNAMIC_STATE_VERTEX_INPUT_EXT dynamic state enabled then
-flink:vkCmdSetVertexInputEXT can: be used instead of
-fname:vkCmdBindVertexBuffers2EXT to set the stride.
-endif::VK_EXT_vertex_input_dynamic_state[]
-
-.Valid Usage
-****
-  * [[VUID-vkCmdBindVertexBuffers2EXT-firstBinding-03355]]
-    pname:firstBinding must: be less than
-    sname:VkPhysicalDeviceLimits::pname:maxVertexInputBindings
-  * [[VUID-vkCmdBindVertexBuffers2EXT-firstBinding-03356]]
-    The sum of pname:firstBinding and pname:bindingCount must: be less than
-    or equal to sname:VkPhysicalDeviceLimits::pname:maxVertexInputBindings
-  * [[VUID-vkCmdBindVertexBuffers2EXT-pOffsets-03357]]
-    All elements of pname:pOffsets must: be less than the size of the
-    corresponding element in pname:pBuffers
-  * [[VUID-vkCmdBindVertexBuffers2EXT-pSizes-03358]]
-    If pname:pSizes is not `NULL`, all elements of pname:pOffsets plus
-    pname:pSizes must: be less than or equal to the size of the
-    corresponding element in pname:pBuffers
-  * [[VUID-vkCmdBindVertexBuffers2EXT-pBuffers-03359]]
-    All elements of pname:pBuffers must: have been created with the
-    ename:VK_BUFFER_USAGE_VERTEX_BUFFER_BIT flag
-  * [[VUID-vkCmdBindVertexBuffers2EXT-pBuffers-03360]]
-    Each element of pname:pBuffers that is non-sparse must: be bound
-    completely and contiguously to a single sname:VkDeviceMemory object
-  * [[VUID-vkCmdBindVertexBuffers2EXT-pBuffers-04111]]
-    If the <<features-nullDescriptor,nullDescriptor>> feature is not
-    enabled, all elements of pname:pBuffers must: not be
-    dlink:VK_NULL_HANDLE
-ifdef::VK_EXT_robustness2[]
-  * [[VUID-vkCmdBindVertexBuffers2EXT-pBuffers-04112]]
-    If an element of pname:pBuffers is dlink:VK_NULL_HANDLE, then the
-    corresponding element of pname:pOffsets must: be zero
-endif::VK_EXT_robustness2[]
-  * [[VUID-vkCmdBindVertexBuffers2EXT-pStrides-03362]]
-    If pname:pStrides is not `NULL` each element of pname:pStrides must: be
-    less than or equal to
-    sname:VkPhysicalDeviceLimits::pname:maxVertexInputBindingStride
-  * [[VUID-vkCmdBindVertexBuffers2EXT-pStrides-06209]]
-    If pname:pStrides is not `NULL` each element of pname:pStrides must: be
-    either 0 or greater than or equal to the maximum extent of all vertex
-    input attributes fetched from the corresponding binding, where the
-    extent is calculated as the
-    slink:VkVertexInputAttributeDescription::pname:offset plus
-    slink:VkVertexInputAttributeDescription::pname:format size
-****
-
-include::{generated}/validity/protos/vkCmdBindVertexBuffers2EXT.txt[]
---
-endif::VK_EXT_extended_dynamic_state[]
-
-
-ifdef::VK_EXT_vertex_attribute_divisor[]
-
-[[fxvertex-attribute_divisor]]
-== Vertex Attribute Divisor in Instanced Rendering
-
-[open,refpage='VkPipelineVertexInputDivisorStateCreateInfoEXT',desc='Structure specifying vertex attributes assignment during instanced rendering',type='structs']
---
-If
-<<features-vertexAttributeInstanceRateDivisor,pname:vertexAttributeInstanceRateDivisor>>
-feature is enabled and the pname:pNext chain of
-slink:VkPipelineVertexInputStateCreateInfo includes a
-sname:VkPipelineVertexInputDivisorStateCreateInfoEXT structure, then that
-structure controls how vertex attributes are assigned to an instance when
-instanced rendering is enabled.
-
-The sname:VkPipelineVertexInputDivisorStateCreateInfoEXT structure is
-defined as:
-
-include::{generated}/api/structs/VkPipelineVertexInputDivisorStateCreateInfoEXT.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:vertexBindingDivisorCount is the number of elements in the
-    pname:pVertexBindingDivisors array.
-  * pname:pVertexBindingDivisors is a pointer to an array of
-    sname:VkVertexInputBindingDivisorDescriptionEXT structures, which
-    specifies the divisor value for each binding.
-
-include::{generated}/validity/structs/VkPipelineVertexInputDivisorStateCreateInfoEXT.txt[]
---
-
-[open,refpage='VkVertexInputBindingDivisorDescriptionEXT',desc='Structure specifying a divisor used in instanced rendering',type='structs']
---
-The individual divisor values per binding are specified using the
-sname:VkVertexInputBindingDivisorDescriptionEXT structure which is defined
-as:
-
-include::{generated}/api/structs/VkVertexInputBindingDivisorDescriptionEXT.txt[]
-
-  * pname:binding is the binding number for which the divisor is specified.
-  * pname:divisor is the number of successive instances that will use the
-    same value of the vertex attribute when instanced rendering is enabled.
-    For example, if the divisor is N, the same vertex attribute will be
-    applied to N successive instances before moving on to the next vertex
-    attribute.
-    The maximum value of pname:divisor is implementation-dependent and can
-    be queried using
-    sname:VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT::pname:maxVertexAttribDivisor.
-    A value of `0` can: be used for the divisor if the
-    <<features-vertexAttributeInstanceRateZeroDivisor,pname:vertexAttributeInstanceRateZeroDivisor>>
-    feature is enabled.
-    In this case, the same vertex attribute will be applied to all
-    instances.
-
-If this structure is not used to define a divisor value for an attribute,
-then the divisor has a logical default value of 1.
-
-.Valid Usage
-****
-  * [[VUID-VkVertexInputBindingDivisorDescriptionEXT-binding-01869]]
-    pname:binding must: be less than
-    sname:VkPhysicalDeviceLimits::pname:maxVertexInputBindings
-  * [[VUID-VkVertexInputBindingDivisorDescriptionEXT-vertexAttributeInstanceRateZeroDivisor-02228]]
-    If the pname:vertexAttributeInstanceRateZeroDivisor feature is not
-    enabled, pname:divisor must: not be `0`
-  * [[VUID-VkVertexInputBindingDivisorDescriptionEXT-vertexAttributeInstanceRateDivisor-02229]]
-    If the pname:vertexAttributeInstanceRateDivisor feature is not enabled,
-    pname:divisor must: be `1`
-  * [[VUID-VkVertexInputBindingDivisorDescriptionEXT-divisor-01870]]
-    pname:divisor must: be a value between `0` and
-    sname:VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT::pname:maxVertexAttribDivisor,
-    inclusive
-  * [[VUID-VkVertexInputBindingDivisorDescriptionEXT-inputRate-01871]]
-    slink:VkVertexInputBindingDescription::pname:inputRate must: be of type
-    ename:VK_VERTEX_INPUT_RATE_INSTANCE for this pname:binding
-****
-
-include::{generated}/validity/structs/VkVertexInputBindingDivisorDescriptionEXT.txt[]
---
-
-endif::VK_EXT_vertex_attribute_divisor[]
-
-[[fxvertex-input-address-calculation]]
-== Vertex Input Address Calculation
-The address of each attribute for each code:vertexIndex and
-code:instanceIndex is calculated as follows:
-
-  * Let code:attribDesc be the member of
-    slink:VkPipelineVertexInputStateCreateInfo::pname:pVertexAttributeDescriptions
-    with sname:VkVertexInputAttributeDescription::pname:location equal to
-    the vertex input attribute number.
-  * Let code:bindingDesc be the member of
-    slink:VkPipelineVertexInputStateCreateInfo::pname:pVertexBindingDescriptions
-    with sname:VkVertexInputAttributeDescription::pname:binding equal to
-    code:attribDesc.binding.
-  * Let code:vertexIndex be the index of the vertex within the draw (a value
-    between pname:firstVertex and pname:firstVertex+pname:vertexCount for
-    fname:vkCmdDraw, or a value taken from the index buffer for
-    fname:vkCmdDrawIndexed), and let code:instanceIndex be the instance
-    number of the draw (a value between pname:firstInstance and
-    pname:firstInstance+pname:instanceCount).
-ifdef::VK_EXT_vertex_attribute_divisor[]
-  * Let code:divisor be the member of
-    slink:VkPipelineVertexInputDivisorStateCreateInfoEXT::pname:pVertexBindingDivisors
-    with sname:VkVertexInputBindingDivisorDescriptionEXT::pname:binding
-    equal to code:attribDesc.binding.
-endif::VK_EXT_vertex_attribute_divisor[]
-
-[source,c]
----------------------------------------------------
-bufferBindingAddress = buffer[binding].baseAddress + offset[binding];
-
-if (bindingDesc.inputRate == VK_VERTEX_INPUT_RATE_VERTEX)
-    vertexOffset = vertexIndex * bindingDesc.stride;
-else
-ifndef::VK_EXT_vertex_attribute_divisor[]
-    vertexOffset = instanceIndex * bindingDesc.stride;
-endif::VK_EXT_vertex_attribute_divisor[]
-ifdef::VK_EXT_vertex_attribute_divisor[]
-    if (divisor == 0)
-        vertexOffset = firstInstance * bindingDesc.stride;
-    else
-        vertexOffset = (firstInstance + ((instanceIndex - firstInstance) / divisor)) * bindingDesc.stride;
-endif::VK_EXT_vertex_attribute_divisor[]
-
-attribAddress = bufferBindingAddress + vertexOffset + attribDesc.offset;
----------------------------------------------------
-
-[[fxvertex-input-extraction]]
-=== Vertex Input Extraction
-For each attribute, raw data is extracted starting at `attribAddress` and is
-converted from the sname:VkVertexInputAttributeDescription's pname:format to
-either floating-point, unsigned integer, or signed integer based on the base
-type of the format; the base type of the format must: match the base type of
-the input variable in the shader.
-The input variable in the shader must: be declared as a 64-bit data type if
-and only if pname:format is a 64-bit data type.
-If pname:format is a packed format, `attribAddress` must: be a multiple of
-the size in bytes of the whole attribute data type as described in
-<<formats-packed,Packed Formats>>.
-Otherwise, `attribAddress` must: be a multiple of the size in bytes of the
-component type indicated by pname:format (see <<formats,Formats>>).
-For attributes that are not 64-bit data types, each component is converted
-to the format of the input variable based on its type and size (as defined
-in the <<formats-definition,Format Definition>> section for each
-elink:VkFormat), using the appropriate equations in <<fundamentals-fp16,
-16-Bit Floating-Point Numbers>>, <<fundamentals-fp11,Unsigned 11-Bit
-Floating-Point Numbers>>, <<fundamentals-fp10,Unsigned 10-Bit Floating-Point
-Numbers>>, <<fundamentals-fixedconv,Fixed-Point Data Conversion>>, and
-<<textures-sexp-RGB,Shared Exponent to RGB>>.
-Signed integer components smaller than 32 bits are sign-extended.
-Attributes that are not 64-bit data types are expanded to four components in
-the same way as described in <<textures-conversion-to-rgba,conversion to
-RGBA>>.
-The number of components in the vertex shader input variable need not
-exactly match the number of components in the format.
-If the vertex shader has fewer components, the extra components are
-discarded.
diff --git a/registry/vulkan/chapters/geometry.txt b/registry/vulkan/chapters/geometry.txt
deleted file mode 100644
index c1f497d..0000000
--- a/registry/vulkan/chapters/geometry.txt
+++ /dev/null
@@ -1,234 +0,0 @@
-// Copyright 2015-2021 The Khronos Group, Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-[[geometry]]
-= Geometry Shading
-
-The geometry shader operates on a group of vertices and their associated
-data assembled from a single input primitive, and emits zero or more output
-primitives and the group of vertices and their associated data required for
-each output primitive.
-Geometry shading is enabled when a geometry shader is included in the
-pipeline.
-
-
-[[geometry-input]]
-== Geometry Shader Input Primitives
-
-Each geometry shader invocation has access to all vertices in the primitive
-(and their associated data), which are presented to the shader as an array
-of inputs.
-
-The input primitive type expected by the geometry shader is specified with
-an code:OpExecutionMode instruction in the geometry shader, and must: match
-the incoming primitive type specified by either the pipeline's
-<<drawing-primitive-topologies, primitive topology>> if tessellation is
-inactive, or the <<tessellation, tessellation mode>> if tessellation is
-active, as follows:
-
-  * An input primitive type of code:InputPoints must: only be used with a
-    pipeline topology of ename:VK_PRIMITIVE_TOPOLOGY_POINT_LIST, or with a
-    tessellation shader that specifies code:PointMode.
-    The input arrays always contain one element, as described by the
-    <<drawing-point-lists, point list topology>> or
-    <<tessellation-point-mode, tessellation in point mode>>.
-  * An input primitive type of code:InputLines must: only be used with a
-    pipeline topology of ename:VK_PRIMITIVE_TOPOLOGY_LINE_LIST or
-    ename:VK_PRIMITIVE_TOPOLOGY_LINE_STRIP, or with a tessellation shader
-    specifying code:IsoLines that does not specify code:PointMode.
-    The input arrays always contain two elements, as described by the
-    <<drawing-line-lists, line list topology>> or <<drawing-line-strips,
-    line strip topology>>, or by <<tessellation-isoline-tessellation,
-    isoline tessellation>>.
-  * An input primitive type of code:InputLinesAdjacency must: only be used
-    when tessellation is inactive, with a pipeline topology of
-    ename:VK_PRIMITIVE_TOPOLOGY_LINE_LIST_WITH_ADJACENCY or
-    ename:VK_PRIMITIVE_TOPOLOGY_LINE_STRIP_WITH_ADJACENCY.
-    The input arrays always contain four elements, as described by the
-    <<drawing-line-lists-with-adjacency, line list with adjacency topology>>
-    or <<drawing-line-strips-with-adjacency, line strip with adjacency
-    topology>>.
-  * An input primitive type of code:Triangles must: only be used with a
-    pipeline topology of ename:VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST,
-    ename:VK_PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP, or
-    ename:VK_PRIMITIVE_TOPOLOGY_TRIANGLE_FAN; or with a tessellation shader
-    specifying code:Quads or code:Triangles that does not specify
-    code:PointMode.
-    The input arrays always contain three elements, as described by the
-    <<drawing-triangle-lists, triangle list topology>>,
-    <<drawing-triangle-strips, triangle strip topology>>, or
-    <<drawing-triangle-fans, triangle fan topology>>, or by
-    <<tessellation-triangle-tessellation, triangle>> or
-    <<tessellation-quad-tessellation, quad tessellation>>.
-    Vertices may: be in a different absolute order to that specified by the
-    topology, but must: adhere to the specified winding order.
-  * An input primitive type of code:InputTrianglesAdjacency must: only be
-    used when tessellation is inactive, with a pipeline topology of
-    ename:VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST_WITH_ADJACENCY or
-    ename:VK_PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP_WITH_ADJACENCY.
-    The input arrays always contain six elements, as described by the
-    <<drawing-triangle-lists-with-adjacency, triangle list with adjacency
-    topology>> or <<drawing-triangle-strips-with-adjacency, triangle strip
-    with adjacency topology>>.
-    Vertices may: be in a different absolute order to that specified by the
-    topology, but must: adhere to the specified winding order, and the
-    vertices making up the main primitive must: still occur at the first,
-    third, and fifth index.
-
-[[geometry-output]]
-== Geometry Shader Output Primitives
-
-A geometry shader generates primitives in one of three output modes: points,
-line strips, or triangle strips.
-The primitive mode is specified in the shader using an code:OpExecutionMode
-instruction with the code:OutputPoints, code:OutputLineStrip or
-code:OutputTriangleStrip modes, respectively.
-Each geometry shader must: include exactly one output primitive mode.
-
-The vertices output by the geometry shader are assembled into points, lines,
-or triangles based on the output primitive type and the resulting primitives
-are then further processed as described in <<primsrast>>.
-If the number of vertices emitted by the geometry shader is not sufficient
-to produce a single primitive, vertices corresponding to incomplete
-primitives are not processed by subsequent pipeline stages.
-The number of vertices output by the geometry shader is limited to a maximum
-count specified in the shader.
-
-The maximum output vertex count is specified in the shader using an
-code:OpExecutionMode instruction with the mode set to code:OutputVertices
-and the maximum number of vertices that will be produced by the geometry
-shader specified as a literal.
-Each geometry shader must: specify a maximum output vertex count.
-
-
-[[geometry-invocations]]
-== Multiple Invocations of Geometry Shaders
-
-Geometry shaders can: be invoked more than one time for each input
-primitive.
-This is known as _geometry shader instancing_ and is requested by including
-an code:OpExecutionMode instruction with code:mode specified as
-code:Invocations and the number of invocations specified as an integer
-literal.
-
-In this mode, the geometry shader will execute at least [eq]#n# times for
-each input primitive, where [eq]#n# is the number of invocations specified
-in the code:OpExecutionMode instruction.
-The instance number is available to each invocation as a built-in input
-using code:InvocationId.
-
-
-[[geometry-ordering]]
-== Geometry Shader Primitive Ordering
-
-Limited guarantees are provided for the relative ordering of primitives
-produced by a geometry shader, as they pertain to <<drawing-primitive-order,
-primitive order>>.
-
-  * For instanced geometry shaders, the output primitives generated from
-    each input primitive are passed to subsequent pipeline stages using the
-    invocation number to order the primitives, from least to greatest.
-  * All output primitives generated from a given input primitive are passed
-    to subsequent pipeline stages before any output primitives generated
-    from subsequent input primitives.
-
-
-ifdef::VK_NV_geometry_shader_passthrough[]
-[[geometry-passthrough]]
-== Geometry Shader Passthrough
-
-A geometry shader that uses the code:PassthroughNV decoration on a variable
-in its input interface is considered a _passthrough geometry shader_.
-Output primitives in a passthrough geometry shader must: have the same
-topology as the input primitive and are not produced by emitting vertices.
-The vertices of the output primitive have two different types of attributes,
-per-vertex and per-primitive.
-Geometry shader input variables with code:PassthroughNV decoration are
-considered to produce per-vertex outputs, where values for each output
-vertex are copied from the corresponding input vertex.
-Any built-in or user-defined geometry shader outputs are considered
-per-primitive in a passthrough geometry shader, where a single output value
-is copied to all output vertices.
-
-The remainder of this section details the usage of the code:PassthroughNV
-decoration and modifications to the interface matching rules when using
-passthrough geometry shaders.
-
-
-[[geometry-passthrough-passthrough]]
-=== code:PassthroughNV Decoration
-
-Decorating a geometry shader input variable with the code:PassthroughNV
-decoration indicates that values of this input are copied through to the
-corresponding vertex of the output primitive.
-Input variables and block members which do not have the code:PassthroughNV
-decoration are consumed by the geometry shader without being passed through
-to subsequent stages.
-
-The code:PassthroughNV decoration must: only be used within a geometry
-shader.
-
-Any variable decorated with code:PassthroughNV must: be declared using the
-code:Input storage class.
-
-The code:PassthroughNV decoration must: not be used with any of:
-
-  * an input primitive type other than code:InputPoints, code:InputLines, or
-    code:Triangles, as specified by the mode for code:OpExecutionMode.
-  * an invocation count other than one, as specified by the code:Invocations
-    mode for code:OpExecutionMode.
-  * an code:OpEntryPoint which statically uses the code:OpEmitVertex or
-    code:OpEndPrimitive instructions.
-  * a variable decorated with the code:InvocationId built-in decoration.
-  * a variable decorated with the code:PrimitiveId built-in decoration that
-    is declared using the code:Input storage class.
-
-
-[[geometry-passthrough-interface]]
-=== Passthrough Interface Matching
-
-When a passthrough geometry shader is in use, the
-<<interfaces-iointerfaces-matching,Interface Matching>> rules involving the
-geometry shader input and output interfaces operate as described in this
-section.
-
-For the purposes of matching passthrough geometry shader inputs with outputs
-of the previous pipeline stages, the code:PassthroughNV decoration is
-ignored.
-
-For the purposes of matching the outputs of the geometry shader with
-subsequent pipeline stages, each input variable with the code:PassthroughNV
-decoration is considered to add an equivalent output variable with the same
-type, decoration (other than code:PassthroughNV), number, and declaration
-order on the output interface.
-The output variable declaration corresponding to an input variable decorated
-with code:PassthroughNV will be identical to the input declaration, except
-that the outermost array dimension of such variables is removed.
-The output block declaration corresponding to an input block decorated with
-code:PassthroughNV or having members decorated with code:PassthroughNV will
-be identical to the input declaration, except that the outermost array
-dimension of such declaration is removed.
-
-If an input block is decorated with code:PassthroughNV, the equivalent
-output block contains all the members of the input block.
-Otherwise, the equivalent output block contains only those input block
-members decorated with code:PassthroughNV.
-All members of the corresponding output block are assigned code:Location and
-code:Component decorations identical to those assigned to the corresponding
-input block members.
-
-Output variables and blocks generated from inputs decorated with
-code:PassthroughNV will only exist for the purposes of interface matching;
-these declarations are not available to geometry shader code or listed in
-the module interface.
-
-For the purposes of component counting, passthrough geometry shaders count
-all statically used input variable components declared with the
-code:PassthroughNV decoration as output components as well, since their
-values will be copied to the output primitive produced by the geometry
-shader.
-
-endif::VK_NV_geometry_shader_passthrough[]
-
-
diff --git a/registry/vulkan/chapters/initialization.txt b/registry/vulkan/chapters/initialization.txt
deleted file mode 100644
index 59cd710..0000000
--- a/registry/vulkan/chapters/initialization.txt
+++ /dev/null
@@ -1,504 +0,0 @@
-// Copyright 2015-2021 The Khronos Group, Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-[[initialization]]
-= Initialization
-
-Before using Vulkan, an application must: initialize it by loading the
-Vulkan commands, and creating a sname:VkInstance object.
-
-
-[[initialization-functionpointers]]
-== Command Function Pointers
-
-Vulkan commands are not necessarily exposed by static linking on a platform.
-Commands to query function pointers for Vulkan commands are described below.
-
-[NOTE]
-.Note
-====
-When extensions are <<extendingvulkan-compatibility-promotion,promoted>> or
-otherwise incorporated into another extension or Vulkan core version,
-command <<extendingvulkan-compatibility-aliases,aliases>> may be included.
-Whilst the behavior of each command alias is identical, the behavior of
-retrieving each alias's function pointer is not.
-A function pointer for a given alias can only be retrieved if the extension
-or version that introduced that alias is supported and enabled, irrespective
-of whether any other alias is available.
-====
-
-[open,refpage='vkGetInstanceProcAddr',desc='Return a function pointer for a command',type='protos',xrefs='PFN_vkVoidFunction']
---
-Function pointers for all Vulkan commands can: be obtained with the command:
-
-include::{generated}/api/protos/vkGetInstanceProcAddr.txt[]
-
-  * pname:instance is the instance that the function pointer will be
-    compatible with, or `NULL` for commands not dependent on any instance.
-  * pname:pName is the name of the command to obtain.
-
-fname:vkGetInstanceProcAddr itself is obtained in a platform- and loader-
-specific manner.
-Typically, the loader library will export this command as a function symbol,
-so applications can: link against the loader library, or load it dynamically
-and look up the symbol using platform-specific APIs.
-
-The table below defines the various use cases for
-fname:vkGetInstanceProcAddr and expected return value ("`fp`" is "`function
-pointer`") for each case.
-A valid returned function pointer ("`fp`") must: not be `NULL`.
-
-The returned function pointer is of type tlink:PFN_vkVoidFunction, and must:
-be cast to the type of the command being queried before use.
-
-.fname:vkGetInstanceProcAddr behavior
-[width="80%",options="header"]
-|====
-| pname:instance   | pname:pName                                  | return value
-| *^1^             | `NULL`                                       | undefined:
-| invalid non-`NULL` instance | *^1^                              | undefined:
-ifdef::VK_VERSION_1_2[]
-| `NULL`           | flink:vkGetInstanceProcAddr                  | fp^5^
-endif::VK_VERSION_1_2[]
-| `NULL`           | _global command_^2^                          | fp
-| instance         | core _dispatchable command_                  | fp^3^
-| instance         | enabled instance extension dispatchable command for pname:instance    | fp^3^
-| instance         | available device extension^4^ dispatchable command for pname:instance | fp^3^
-2+|  any other case, not covered above                            | `NULL`
-|====
-
-1::
-    "*" means any representable value for the parameter (including valid
-    values, invalid values, and `NULL`).
-
-2::
-    The global commands are:
-ifdef::VK_VERSION_1_1[flink:vkEnumerateInstanceVersion,]
-    flink:vkEnumerateInstanceExtensionProperties,
-    flink:vkEnumerateInstanceLayerProperties, and flink:vkCreateInstance.
-    Dispatchable commands are all other commands which are not global.
-
-3::
-    The returned function pointer must: only be called with a dispatchable
-    object (the first parameter) that is pname:instance or a child of
-    pname:instance, e.g. slink:VkInstance, slink:VkPhysicalDevice,
-    slink:VkDevice, slink:VkQueue, or slink:VkCommandBuffer.
-
-4::
-    An "`available device extension`" is a device extension supported by any
-    physical device enumerated by pname:instance.
-
-ifdef::VK_VERSION_1_2[]
-5::
-    Starting with Vulkan 1.2, fname:vkGetInstanceProcAddr can resolve itself
-    with a `NULL` instance pointer.
-endif::VK_VERSION_1_2[]
-
-include::{generated}/validity/protos/vkGetInstanceProcAddr.txt[]
---
-
-[open,refpage='vkGetDeviceProcAddr',desc='Return a function pointer for a command',type='protos',xrefs='PFN_vkVoidFunction']
---
-In order to support systems with multiple Vulkan implementations, the
-function pointers returned by fname:vkGetInstanceProcAddr may: point to
-dispatch code that calls a different real implementation for different
-slink:VkDevice objects or their child objects.
-The overhead of the internal dispatch for slink:VkDevice objects can be
-avoided by obtaining device-specific function pointers for any commands that
-use a device or device-child object as their dispatchable object.
-Such function pointers can: be obtained with the command:
-
-include::{generated}/api/protos/vkGetDeviceProcAddr.txt[]
-
-The table below defines the various use cases for fname:vkGetDeviceProcAddr
-and expected return value ("`fp`" is "`function pointer`") for each case.
-A valid returned function pointer ("`fp`") must: not be `NULL`.
-
-The returned function pointer is of type tlink:PFN_vkVoidFunction, and must:
-be cast to the type of the command being queried before use.
-The function pointer must: only be called with a dispatchable object (the
-first parameter) that is pname:device or a child of pname:device.
-
-.fname:vkGetDeviceProcAddr behavior
-[width="80%",options="header"]
-|====
-| pname:device   | pname:pName                      | return value
-| `NULL`         | *^1^                             | undefined:
-| invalid device | *^1^                             | undefined:
-| device         | `NULL`                           | undefined:
-| device         | core device-level dispatchable command^2^ | fp^3^
-| device         | enabled extension device-level dispatchable command^2^ | fp^3^
-2+| any other case, not covered above               | `NULL`
-|====
-
-1::
-    "*" means any representable value for the parameter (including valid
-    values, invalid values, and `NULL`).
-
-2::
-    In this function, device-level excludes all physical-device-level
-    commands.
-
-3::
-    The returned function pointer must: only be called with a dispatchable
-    object (the first parameter) that is pname:device or a child of
-    pname:device e.g. slink:VkDevice, slink:VkQueue, or
-    slink:VkCommandBuffer.
-
-include::{generated}/validity/protos/vkGetDeviceProcAddr.txt[]
---
-
-[open,refpage='PFN_vkVoidFunction',desc='Placeholder function pointer type returned by queries',type='funcpointers',xrefs='vkGetDeviceProcAddr vkGetInstanceProcAddr']
---
-The definition of tlink:PFN_vkVoidFunction is:
-
-include::{generated}/api/funcpointers/PFN_vkVoidFunction.txt[]
---
-
-
-ifdef::VK_VERSION_1_1[]
-=== Extending Physical Device Core Functionality
-
-New core physical-device-level functionality can: be used when the
-physical-device version is greater than or equal to the version of Vulkan
-that added the new functionality.
-The Vulkan version supported by a physical device can: be obtained by
-calling flink:vkGetPhysicalDeviceProperties.
-endif::VK_VERSION_1_1[]
-
-
-ifdef::VK_VERSION_1_1,VK_KHR_get_physical_device_properties2[]
-[[initialization-phys-dev-extensions]]
-=== Extending Physical Device From Device Extensions
-
-When the `apiext:VK_KHR_get_physical_device_properties2` extension is
-enabled,
-ifdef::VK_VERSION_1_1[]
-or when both the instance and the physical-device versions are at least 1.1,
-endif::VK_VERSION_1_1[]
-physical-device-level functionality of a device extension can: be used with
-a physical device if the corresponding extension is enumerated by
-flink:vkEnumerateDeviceExtensionProperties for that physical device, even
-before a logical device has been created.
-
-To obtain a function pointer for a physical-device-level command from a
-device extension, an application can: use flink:vkGetInstanceProcAddr.
-This function pointer may: point to dispatch code, which calls a different
-real implementation for different sname:VkPhysicalDevice objects.
-Applications must: not use a slink:VkPhysicalDevice in any command added by
-an extension or core version that is not supported by that physical device.
-
-Device extensions may: define structures that can: be added to the
-ptext:pNext chain of physical-device-level commands.
-endif::VK_VERSION_1_1,VK_KHR_get_physical_device_properties2[]
-
-
-[[initialization-instances]]
-== Instances
-
-[open,refpage='VkInstance',desc='Opaque handle to an instance object',type='handles']
---
-There is no global state in Vulkan and all per-application state is stored
-in a sname:VkInstance object.
-Creating a sname:VkInstance object initializes the Vulkan library and allows
-the application to pass information about itself to the implementation.
-
-Instances are represented by sname:VkInstance handles:
-
-include::{generated}/api/handles/VkInstance.txt[]
---
-
-ifdef::VK_VERSION_1_1[]
-[open,refpage='vkEnumerateInstanceVersion',desc='Query instance-level version before instance creation',type='protos']
---
-To query the version of instance-level functionality supported by the
-implementation, call:
-
-include::{generated}/api/protos/vkEnumerateInstanceVersion.txt[]
-
-  * pname:pApiVersion is a pointer to a code:uint32_t, which is the version
-    of Vulkan supported by instance-level functionality, encoded as
-    described in <<extendingvulkan-coreversions-versionnumbers>>.
-
-[NOTE]
-.Note
-====
-The intended behaviour of flink:vkEnumerateInstanceVersion is that an
-implementation should: not need to perform memory allocations and should:
-unconditionally return ename:VK_SUCCESS.
-The loader, and any enabled layers, may: return
-ename:VK_ERROR_OUT_OF_HOST_MEMORY in the case of a failed memory allocation.
-====
-
-include::{generated}/validity/protos/vkEnumerateInstanceVersion.txt[]
---
-endif::VK_VERSION_1_1[]
-
-[open,refpage='vkCreateInstance',desc='Create a new Vulkan instance',type='protos']
---
-To create an instance object, call:
-
-include::{generated}/api/protos/vkCreateInstance.txt[]
-
-  * pname:pCreateInfo is a pointer to a slink:VkInstanceCreateInfo structure
-    controlling creation of the instance.
-  * pname:pAllocator controls host memory allocation as described in the
-    <<memory-allocation, Memory Allocation>> chapter.
-  * pname:pInstance points a slink:VkInstance handle in which the resulting
-    instance is returned.
-
-fname:vkCreateInstance verifies that the requested layers exist.
-If not, fname:vkCreateInstance will return ename:VK_ERROR_LAYER_NOT_PRESENT.
-Next fname:vkCreateInstance verifies that the requested extensions are
-supported (e.g. in the implementation or in any enabled instance layer) and
-if any requested extension is not supported, fname:vkCreateInstance must:
-return ename:VK_ERROR_EXTENSION_NOT_PRESENT.
-After verifying and enabling the instance layers and extensions the
-sname:VkInstance object is created and returned to the application.
-If a requested extension is only supported by a layer, both the layer and
-the extension need to be specified at fname:vkCreateInstance time for the
-creation to succeed.
-
-.Valid Usage
-****
-  * [[VUID-vkCreateInstance-ppEnabledExtensionNames-01388]]
-    All <<extendingvulkan-extensions-extensiondependencies, required
-    extensions>> for each extension in the
-    slink:VkInstanceCreateInfo::pname:ppEnabledExtensionNames list must:
-    also be present in that list
-****
-
-include::{generated}/validity/protos/vkCreateInstance.txt[]
---
-
-[open,refpage='VkInstanceCreateInfo',desc='Structure specifying parameters of a newly created instance',type='structs']
---
-The sname:VkInstanceCreateInfo structure is defined as:
-
-include::{generated}/api/structs/VkInstanceCreateInfo.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:flags is reserved for future use.
-  * pname:pApplicationInfo is `NULL` or a pointer to a
-    sname:VkApplicationInfo structure.
-    If not `NULL`, this information helps implementations recognize behavior
-    inherent to classes of applications.
-    slink:VkApplicationInfo is defined in detail below.
-  * pname:enabledLayerCount is the number of global layers to enable.
-  * pname:ppEnabledLayerNames is a pointer to an array of
-    pname:enabledLayerCount null-terminated UTF-8 strings containing the
-    names of layers to enable for the created instance.
-    The layers are loaded in the order they are listed in this array, with
-    the first array element being the closest to the application, and the
-    last array element being the closest to the driver.
-    See the <<extendingvulkan-layers>> section for further details.
-  * pname:enabledExtensionCount is the number of global extensions to
-    enable.
-  * pname:ppEnabledExtensionNames is a pointer to an array of
-    pname:enabledExtensionCount null-terminated UTF-8 strings containing the
-    names of extensions to enable.
-
-ifdef::VK_EXT_debug_report,VK_EXT_debug_utils[]
-To capture events that occur while creating or destroying an instance, an
-application can link a
-ifdef::VK_EXT_debug_report[]
-slink:VkDebugReportCallbackCreateInfoEXT structure
-ifdef::VK_EXT_debug_utils[]
-or a
-endif::VK_EXT_debug_utils[]
-endif::VK_EXT_debug_report[]
-ifdef::VK_EXT_debug_utils[]
-slink:VkDebugUtilsMessengerCreateInfoEXT structure
-endif::VK_EXT_debug_utils[]
-to the pname:pNext element of the sname:VkInstanceCreateInfo structure given
-to fname:vkCreateInstance.
-This callback is only valid for the duration of the flink:vkCreateInstance
-and the flink:vkDestroyInstance call.
-Use
-ifdef::VK_EXT_debug_report[]
-flink:vkCreateDebugReportCallbackEXT
-ifdef::VK_EXT_debug_utils[]
-or
-endif::VK_EXT_debug_utils[]
-endif::VK_EXT_debug_report[]
-ifdef::VK_EXT_debug_utils[]
-flink:vkCreateDebugUtilsMessengerEXT
-endif::VK_EXT_debug_utils[]
-to create persistent callback objects.
-
-.Valid Usage
-****
-ifdef::VK_EXT_debug_report[]
-  * [[VUID-VkInstanceCreateInfo-pNext-04925]]
-    If the pname:pNext chain of sname:VkInstanceCreateInfo includes a
-    sname:VkDebugReportCallbackCreateInfoEXT structure, the list of enabled
-    extensions in pname:ppEnabledExtensionNames must: contain
-    apiext:VK_EXT_debug_report
-endif::VK_EXT_debug_report[]
-ifdef::VK_EXT_debug_utils[]
-  * [[VUID-VkInstanceCreateInfo-pNext-04926]]
-    If the pname:pNext chain of sname:VkInstanceCreateInfo includes a
-    sname:VkDebugUtilsMessengerCreateInfoEXT structure, the list of enabled
-    extensions in pname:ppEnabledExtensionNames must: contain
-    apiext:VK_EXT_debug_utils
-endif::VK_EXT_debug_utils[]
-****
-endif::VK_EXT_debug_report,VK_EXT_debug_utils[]
-
-include::{generated}/validity/structs/VkInstanceCreateInfo.txt[]
---
-
-[open,refpage='VkInstanceCreateFlags',desc='Reserved for future use',type='flags']
---
-include::{generated}/api/flags/VkInstanceCreateFlags.txt[]
-
-tname:VkInstanceCreateFlags is a bitmask type for setting a mask, but is
-currently reserved for future use.
---
-
-ifdef::VK_EXT_validation_flags[]
-include::VK_EXT_validation_flags.txt[]
-endif::VK_EXT_validation_flags[]
-
-ifdef::VK_EXT_validation_features[]
-include::VK_EXT_validation_features.txt[]
-endif::VK_EXT_validation_features[]
-
-[open,refpage='VkApplicationInfo',desc='Structure specifying application information',type='structs']
---
-The sname:VkApplicationInfo structure is defined as:
-
-include::{generated}/api/structs/VkApplicationInfo.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:pApplicationName is `NULL` or is a pointer to a null-terminated
-    UTF-8 string containing the name of the application.
-  * pname:applicationVersion is an unsigned integer variable containing the
-    developer-supplied version number of the application.
-  * pname:pEngineName is `NULL` or is a pointer to a null-terminated UTF-8
-    string containing the name of the engine (if any) used to create the
-    application.
-  * pname:engineVersion is an unsigned integer variable containing the
-    developer-supplied version number of the engine used to create the
-    application.
-ifndef::VK_VERSION_1_1[]
-  * pname:apiVersion is the version of the Vulkan API against which the
-    application expects to run, encoded as described in
-    <<extendingvulkan-coreversions-versionnumbers>>.
-    If pname:apiVersion is 0 the implementation must: ignore it, otherwise
-    if the implementation does not support the requested pname:apiVersion,
-    or an effective substitute for pname:apiVersion, it must: return
-    ename:VK_ERROR_INCOMPATIBLE_DRIVER.
-endif::VK_VERSION_1_1[]
-ifdef::VK_VERSION_1_1[]
-  * pname:apiVersion must: be the highest version of Vulkan that the
-    application is designed to use, encoded as described in
-    <<extendingvulkan-coreversions-versionnumbers>>.
-endif::VK_VERSION_1_1[]
-    The patch version number specified in pname:apiVersion is ignored when
-    creating an instance object.
-    Only the major and minor versions of the instance must: match those
-    requested in pname:apiVersion.
-
-ifdef::VK_VERSION_1_1[]
-Vulkan 1.0 implementations were required to return
-ename:VK_ERROR_INCOMPATIBLE_DRIVER if pname:apiVersion was larger than 1.0.
-Implementations that support Vulkan 1.1 or later must: not return
-ename:VK_ERROR_INCOMPATIBLE_DRIVER for any value of pname:apiVersion.
-
-[NOTE]
-.Note
-====
-Because Vulkan 1.0 implementations may: fail with
-ename:VK_ERROR_INCOMPATIBLE_DRIVER, applications should: determine the
-version of Vulkan available before calling flink:vkCreateInstance.
-If the flink:vkGetInstanceProcAddr returns `NULL` for
-flink:vkEnumerateInstanceVersion, it is a Vulkan 1.0 implementation.
-Otherwise, the application can: call flink:vkEnumerateInstanceVersion to
-determine the version of Vulkan.
-====
-
-As long as the instance supports at least Vulkan 1.1, an application can:
-use different versions of Vulkan with an instance than it does with a device
-or physical device.
-
-[NOTE]
-.Note
-====
-The Khronos validation layers will treat pname:apiVersion as the highest API
-version the application targets, and will validate API usage against the
-minimum of that version and the implementation version (instance or device,
-depending on context).
-If an application tries to use functionality from a greater version than
-this, a validation error will be triggered.
-
-For example, if the instance supports Vulkan 1.1 and three physical devices
-support Vulkan 1.0, Vulkan 1.1, and Vulkan 1.2, respectively, and if the
-application sets pname:apiVersion to 1.2, the application can: use the
-following versions of Vulkan:
-
-  * Vulkan 1.0 can: be used with the instance and with all physical devices.
-  * Vulkan 1.1 can: be used with the instance and with the physical devices
-    that support Vulkan 1.1 and Vulkan 1.2.
-  * Vulkan 1.2 can: be used with the physical device that supports Vulkan
-    1.2.
-
-If we modify the above example so that the application sets pname:apiVersion
-to 1.1, then the application must: not use Vulkan 1.2 functionality on the
-physical device that supports Vulkan 1.2.
-====
-
-Implicit layers must: be disabled if they do not support a version at least
-as high as pname:apiVersion.
-See the <<LoaderInterfaceArchitecture, "`Architecture of the Vulkan Loader
-Interfaces`">> document for additional information.
-
-[NOTE]
-.Note
-====
-Providing a `NULL` slink:VkInstanceCreateInfo::pname:pApplicationInfo or
-providing an pname:apiVersion of 0 is equivalent to providing an
-pname:apiVersion of `VK_MAKE_API_VERSION(0,1,0,0)`.
-====
-endif::VK_VERSION_1_1[]
-
-.Valid Usage
-****
-  * [[VUID-VkApplicationInfo-apiVersion-04010]]
-    If pname:apiVersion is not `0`, then it must: be greater than or equal
-    to dlink:VK_API_VERSION_1_0
-****
-
-include::{generated}/validity/structs/VkApplicationInfo.txt[]
---
-
-[open,refpage='vkDestroyInstance',desc='Destroy an instance of Vulkan',type='protos']
---
-To destroy an instance, call:
-
-include::{generated}/api/protos/vkDestroyInstance.txt[]
-
-  * pname:instance is the handle of the instance to destroy.
-  * pname:pAllocator controls host memory allocation as described in the
-    <<memory-allocation, Memory Allocation>> chapter.
-
-.Valid Usage
-****
-  * [[VUID-vkDestroyInstance-instance-00629]]
-    All child objects created using pname:instance must: have been destroyed
-    prior to destroying pname:instance
-  * [[VUID-vkDestroyInstance-instance-00630]]
-    If sname:VkAllocationCallbacks were provided when pname:instance was
-    created, a compatible set of callbacks must: be provided here
-  * [[VUID-vkDestroyInstance-instance-00631]]
-    If no sname:VkAllocationCallbacks were provided when pname:instance was
-    created, pname:pAllocator must: be `NULL`
-****
-
-include::{generated}/validity/protos/vkDestroyInstance.txt[]
---
diff --git a/registry/vulkan/chapters/interfaces.txt b/registry/vulkan/chapters/interfaces.txt
deleted file mode 100755
index 2b8ba40..0000000
--- a/registry/vulkan/chapters/interfaces.txt
+++ /dev/null
@@ -1,4401 +0,0 @@
-// Copyright 2015-2021 The Khronos Group, Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-[[interfaces]]
-= Shader Interfaces
-
-When a pipeline is created, the set of shaders specified in the
-corresponding stext:Vk*PipelineCreateInfo structure are implicitly linked at
-a number of different interfaces.
-
-  * <<interfaces-iointerfaces,Shader Input and Output Interface>>
-  * <<interfaces-vertexinput,Vertex Input Interface>>
-  * <<interfaces-fragmentoutput,Fragment Output Interface>>
-  * <<interfaces-inputattachment,Fragment Input Attachment Interface>>
-ifdef::VK_NV_ray_tracing,VK_KHR_ray_tracing_pipeline[]
-  * <<interfaces-raypipeline, Ray Tracing Pipeline Interface>>
-endif::VK_NV_ray_tracing,VK_KHR_ray_tracing_pipeline[]
-  * <<interfaces-resources,Shader Resource Interface>>
-
-Interface definitions make use of the following SPIR-V decorations:
-
-  * code:DescriptorSet and code:Binding
-  * code:Location, code:Component, and code:Index
-  * code:Flat, code:NoPerspective, code:Centroid, and code:Sample
-  * code:Block and code:BufferBlock
-  * code:InputAttachmentIndex
-  * code:Offset, code:ArrayStride, and code:MatrixStride
-  * code:BuiltIn
-ifdef::VK_NV_geometry_shader_passthrough[]
-  * <<geometry-passthrough-passthrough,code:PassthroughNV>>
-endif::VK_NV_geometry_shader_passthrough[]
-
-
-This specification describes valid uses for Vulkan of these decorations.
-Any other use of one of these decorations is invalid, with the exception
-that, when using SPIR-V versions 1.4 and earlier: code:Block,
-code:BufferBlock, code:Offset, code:ArrayStride, and code:MatrixStride can
-also decorate types and type members used by variables in the Private and
-Function storage classes.
-
-[NOTE]
-.Note
-====
-In this chapter, there are references to SPIR-V terms such as the
-code:MeshNV execution model.
-These terms will appear even in a build of the specification which does not
-support any extensions.
-This is as intended, since these terms appear in the unified SPIR-V
-specification without such qualifiers.
-====
-
-
-[[interfaces-iointerfaces]]
-== Shader Input and Output Interfaces
-
-When multiple stages are present in a pipeline, the outputs of one stage
-form an interface with the inputs of the next stage.
-When such an interface involves a shader, shader outputs are matched against
-the inputs of the next stage, and shader inputs are matched against the
-outputs of the previous stage.
-
-All the variables forming the shader input and output _interfaces_ are
-listed as operands to the code:OpEntryPoint instruction and are declared
-with the code:Input or code:Output storage classes, respectively, in the
-SPIR-V module.
-These generally form the interfaces between consecutive shader stages,
-regardless of any non-shader stages between the consecutive shader stages.
-
-There are two classes of variables that can: be matched between shader
-stages, built-in variables and user-defined variables.
-Each class has a different set of matching criteria.
-
-code:Output variables of a shader stage have undefined: values until the
-shader writes to them or uses the code:Initializer operand when declaring
-the variable.
-
-
-[[interfaces-iointerfaces-builtin]]
-=== Built-in Interface Block
-
-Shader <<interfaces-builtin-variables,built-in>> variables meeting the
-following requirements define the _built-in interface block_.
-They must:
-
-  * be explicitly declared (there are no implicit built-ins),
-  * be identified with a code:BuiltIn decoration,
-  * form object types as described in the
-    <<interfaces-builtin-variables,Built-in Variables>> section, and
-  * be declared in a block whose top-level members are the built-ins.
-
-There must: be no more than one built-in interface block per shader per
-interface.
-
-Built-ins must: not have any code:Location or code:Component decorations.
-
-
-[[interfaces-iointerfaces-user]]
-=== User-defined Variable Interface
-
-The non-built-in variables listed by code:OpEntryPoint with the code:Input
-or code:Output storage class form the _user-defined variable interface_.
-These must: have SPIR-V numerical types or, recursively, composite types of
-such types.
-ifdef::VK_VERSION_1_1,VK_KHR_16bit_storage[]
-By default, the components of such types have a width of 32 or 64 bits.
-If an implementation supports
-<<features-storageInputOutput16,storageInputOutput16>>, components can: also
-have a width of 16 bits.
-endif::VK_VERSION_1_1,VK_KHR_16bit_storage[]
-These variables must: be identified with a code:Location decoration and can:
-also be identified with a code:Component decoration.
-
-
-[[interfaces-iointerfaces-matching]]
-=== Interface Matching
-
-An output variable, block, or structure member in a given shader stage has
-an interface match with an input variable, block, or structure member in a
-subsequent shader stage if they both adhere to the following conditions:
-
-  * They have equivalent decorations, other than:
-  ** <<shaders-interpolation-decorations,Interpolation decorations>>
-ifdef::VK_EXT_transform_feedback[]
-  ** code:XfbBuffer, code:XfbStride, code:Offset, and code:Stream
-endif::VK_EXT_transform_feedback[]
-  ** one is not decorated with code:Component and the other is declared with
-     a code:Component of `0`
-  * Their types match as follows:
-  ** if the input is declared in a tessellation control or geometry shader
-     as an code:OpTypeArray with an code:Element code:Type equivalent to the
-     code:OpType* declaration of the output, and neither is a structure
-     member; or
-ifdef::VK_KHR_maintenance4[]
-  ** if the <<features-maintenance4, pname:maintenance4>> feature is
-     enabled, they are declared as code:OpTypeVector variables, and the
-     output has a code:Component code:Count value higher than that of the
-     input but the same code:Component code:Type; or
-endif::VK_KHR_maintenance4[]
-ifdef::VK_NV_mesh_shader[]
-  ** if the output is declared in a mesh shader as an code:OpTypeArray with
-     an code:Element code:Type equivalent to the code:OpType* declaration of
-     the input, and neither is a structure member; or
-endif::VK_NV_mesh_shader[]
-  ** if in any other case they are declared with an equivalent code:OpType*
-     declaration.
-  * If both are structures and every member has an interface match.
-
-[NOTE]
-.Note
-====
-The word "structure" above refers to both variables that have an
-code:OpTypeStruct type and interface blocks (which are also declared as
-code:OpTypeStruct).
-====
-
-All input variables and blocks must: have an interface match in the
-preceding shader stage, except for built-in variables in fragment shaders.
-Shaders can: declare and write to output variables that are not declared or
-read by the subsequent stage.
-
-ifdef::VK_NV_geometry_shader_passthrough[]
-Matching rules for _passthrough geometry shaders_ are slightly different and
-are described in the <<geometry-passthrough-interface,Passthrough Interface
-Matching>> section.
-endif::VK_NV_geometry_shader_passthrough[]
-
-The value of an input variable is undefined: if the preceding stage does not
-write to a matching output variable, as described above.
-
-
-[[interfaces-iointerfaces-locations]]
-=== Location Assignment
-
-This section describes location assignments for user-defined variables and
-how many locations are consumed by a given user-variable type.
-<<interfaces-iointerfaces-matching, As mentioned above>>, some inputs and
-outputs have an additional level of arrayness relative to other shader
-inputs and outputs.
-This outer array level is removed from the type before considering how many
-locations the type consumes.
-
-The code:Location value specifies an interface slot comprised of a 32-bit
-four-component vector conveyed between stages.
-The code:Component specifies
-<<interfaces-iointerfaces-components,components>> within these vector
-locations.
-Only types with widths of
-ifdef::VK_VERSION_1_1,VK_KHR_16bit_storage[]
-16,
-endif::VK_VERSION_1_1,VK_KHR_16bit_storage[]
-32 or 64 are supported in shader interfaces.
-
-Inputs and outputs of the following types consume a single interface
-location:
-
-ifdef::VK_VERSION_1_1,VK_KHR_16bit_storage[]
-  * 16-bit scalar and vector types, and
-endif::VK_VERSION_1_1,VK_KHR_16bit_storage[]
-  * 32-bit scalar and vector types, and
-  * 64-bit scalar and 2-component vector types.
-
-64-bit three- and four-component vectors consume two consecutive locations.
-
-If a declared input or output is an array of size _n_ and each element takes
-_m_ locations, it will be assigned _m_ {times} _n_ consecutive locations
-starting with the location specified.
-
-If the declared input or output is an _n_ {times} _m_
-ifdef::VK_VERSION_1_1,VK_KHR_16bit_storage[]
-16-,
-endif::VK_VERSION_1_1,VK_KHR_16bit_storage[]
-32- or 64-bit matrix, it will be assigned multiple locations starting with
-the location specified.
-The number of locations assigned for each matrix will be the same as for an
-_n_-element array of _m_-component vectors.
-
-An code:OpVariable with a structure type that is not a block must: be
-decorated with a code:Location.
-
-When an code:OpVariable with a structure type (either block or non-block) is
-decorated with a code:Location, the members in the structure type must: not
-be decorated with a code:Location.
-The code:OpVariable's members are assigned consecutive locations in
-declaration order, starting from the first member, which is assigned the
-location decoration from the code:OpVariable.
-
-When a block-type code:OpVariable is declared without a code:Location
-decoration, each member in its structure type must: be decorated with a
-code:Location.
-Types nested deeper than the top-level members must: not have code:Location
-decorations.
-
-The locations consumed by block and structure members are determined by
-applying the rules above in a depth-first traversal of the instantiated
-members as though the structure or block member were declared as an input or
-output variable of the same type.
-
-Any two inputs listed as operands on the same code:OpEntryPoint must: not be
-assigned the same location, either explicitly or implicitly.
-Any two outputs listed as operands on the same code:OpEntryPoint must: not
-be assigned the same location, either explicitly or implicitly.
-
-The number of input and output locations available for a shader input or
-output interface are limited, and dependent on the shader stage as described
-in <<interfaces-iointerfaces-limits>>.
-All variables in both the <<interfaces-builtin-variables,built-in interface
-block>> and the <<interfaces-iointerfaces-user,user-defined variable
-interface>> count against these limits.
-Each effective code:Location must: have a value less than the number of
-locations available for the given interface, as specified in the "Locations
-Available" column in <<interfaces-iointerfaces-limits>>.
-
-
-[[interfaces-iointerfaces-limits]]
-.Shader Input and Output Locations
-[width="90%",cols="<6,<13",options="header"]
-|====
-| Shader Interface              | Locations Available
-| vertex input                  | pname:maxVertexInputAttributes
-| vertex output                 | pname:maxVertexOutputComponents / 4
-| tessellation control input    | pname:maxTessellationControlPerVertexInputComponents / 4
-| tessellation control output   | pname:maxTessellationControlPerVertexOutputComponents / 4
-| tessellation evaluation input | pname:maxTessellationEvaluationInputComponents / 4
-| tessellation evaluation output| pname:maxTessellationEvaluationOutputComponents / 4
-| geometry input                | pname:maxGeometryInputComponents / 4
-| geometry output               | pname:maxGeometryOutputComponents / 4
-| fragment input                | pname:maxFragmentInputComponents / 4
-| fragment output               | pname:maxFragmentOutputAttachments
-ifdef::VK_NV_mesh_shader[]
-// we forgot to add maxMeshOutputComponents
-| mesh output                   | pname:maxFragmentInputComponents / 4
-endif::VK_NV_mesh_shader[]
-|====
-
-
-[[interfaces-iointerfaces-components]]
-=== Component Assignment
-
-The code:Component decoration allows the code:Location to be more finely
-specified for scalars and vectors, down to the individual components within
-a location that are consumed.
-The components within a location are 0, 1, 2, and 3.
-A variable or block member starting at component N will consume components
-N, N+1, N+2, ...
-up through its size.
-ifdef::VK_VERSION_1_1,VK_KHR_16bit_storage[]
-For 16-, and 32-bit types,
-endif::VK_VERSION_1_1,VK_KHR_16bit_storage[]
-ifndef::VK_VERSION_1_1,VK_KHR_16bit_storage[]
-For single precision types,
-endif::VK_VERSION_1_1,VK_KHR_16bit_storage[]
-it is invalid if this sequence of components gets larger than 3.
-A scalar 64-bit type will consume two of these components in sequence, and a
-two-component 64-bit vector type will consume all four components available
-within a location.
-A three- or four-component 64-bit vector type must: not specify a
-code:Component decoration.
-A three-component 64-bit vector type will consume all four components of the
-first location and components 0 and 1 of the second location.
-This leaves components 2 and 3 available for other component-qualified
-declarations.
-
-A scalar or two-component 64-bit data type must: not specify a
-code:Component decoration of 1 or 3.
-A code:Component decoration must: not be specified for any type that is not
-a scalar or vector.
-
-
-[[interfaces-vertexinput]]
-== Vertex Input Interface
-
-When the vertex stage is present in a pipeline, the vertex shader input
-variables form an interface with the vertex input attributes.
-The vertex shader input variables are matched by the code:Location and
-code:Component decorations to the vertex input attributes specified in the
-pname:pVertexInputState member of the slink:VkGraphicsPipelineCreateInfo
-structure.
-
-The vertex shader input variables listed by code:OpEntryPoint with the
-code:Input storage class form the _vertex input interface_.
-These variables must: be identified with a code:Location decoration and can:
-also be identified with a code:Component decoration.
-
-For the purposes of interface matching: variables declared without a
-code:Component decoration are considered to have a code:Component decoration
-of zero.
-The number of available vertex input locations is given by the
-pname:maxVertexInputAttributes member of the sname:VkPhysicalDeviceLimits
-structure.
-
-See <<fxvertex-attrib-location>> for details.
-
-All vertex shader inputs declared as above must: have a corresponding
-attribute and binding in the pipeline.
-
-
-[[interfaces-fragmentoutput]]
-== Fragment Output Interface
-
-When the fragment stage is present in a pipeline, the fragment shader
-outputs form an interface with the output attachments defined by a
-<<renderpass, render pass instance>>.
-The fragment shader output variables are matched by the code:Location and
-code:Component decorations to specified color attachments.
-
-The fragment shader output variables listed by code:OpEntryPoint with the
-code:Output storage class form the _fragment output interface_.
-These variables must: be identified with a code:Location decoration.
-They can: also be identified with a code:Component decoration and/or an
-code:Index decoration.
-For the purposes of interface matching: variables declared without a
-code:Component decoration are considered to have a code:Component decoration
-of zero, and variables declared without an code:Index decoration are
-considered to have an code:Index decoration of zero.
-
-A fragment shader output variable identified with a code:Location decoration
-of _i_ is associated with
-ifdef::VK_KHR_dynamic_rendering[]
-the element of slink:VkRenderingInfoKHR::pname:pColorAttachments with a
-pname:location equal to _i_.
-When using render pass objects, it is associated with
-endif::VK_KHR_dynamic_rendering[]
-the color attachment indicated by pname:pColorAttachments[_i_].
-Values are written to those attachments after passing through the blending
-unit as described in <<framebuffer-blending>>, if enabled.
-Locations are consumed as described in
-<<interfaces-iointerfaces-locations,Location Assignment>>.
-The number of available fragment output locations is given by the
-pname:maxFragmentOutputAttachments member of the
-sname:VkPhysicalDeviceLimits structure.
-
-Components of the output variables are assigned as described in
-<<interfaces-iointerfaces-components,Component Assignment>>.
-Output components identified as 0, 1, 2, and 3 will be directed to the R, G,
-B, and A inputs to the blending unit, respectively, or to the output
-attachment if blending is disabled.
-If two variables are placed within the same location, they must: have the
-same underlying type (floating-point or integer).
-The input values to blending or color attachment writes are undefined: for
-components which do not correspond to a fragment shader output.
-
-Fragment outputs identified with an code:Index of zero are directed to the
-first input of the blending unit associated with the corresponding
-code:Location.
-Outputs identified with an code:Index of one are directed to the second
-input of the corresponding blending unit.
-
-No _component aliasing_ of output variables is allowed, that is there must:
-not be two output variables which have the same location, component, and
-index, either explicitly declared or implied.
-
-Output values written by a fragment shader must: be declared with either
-code:OpTypeFloat or code:OpTypeInt, and a code:Width of 32.
-ifdef::VK_VERSION_1_1,VK_KHR_16bit_storage[]
-If pname:storageInputOutput16 is supported, output values written by a
-fragment shader can: be also declared with either code:OpTypeFloat or
-code:OpTypeInt and a code:Width of 16.
-endif::VK_VERSION_1_1,VK_KHR_16bit_storage[]
-Composites of these types are also permitted.
-If the color attachment has a signed or unsigned normalized fixed-point
-format, color values are assumed to be floating-point and are converted to
-fixed-point as described in <<fundamentals-fpfixedconv>>; If the color
-attachment has an integer format, color values are assumed to be integers
-and converted to the bit-depth of the target.
-Any value that cannot be represented in the attachment's format is
-undefined:.
-For any other attachment format no conversion is performed.
-If the type of the values written by the fragment shader do not match the
-format of the corresponding color attachment, the resulting values are
-undefined: for those components.
-
-
-[[interfaces-inputattachment]]
-== Fragment Input Attachment Interface
-
-When a fragment stage is present in a pipeline, the fragment shader subpass
-inputs form an interface with the input attachments of the current subpass.
-The fragment shader subpass input variables are matched by
-code:InputAttachmentIndex decorations to the input attachments specified in
-the pname:pInputAttachments array of the slink:VkSubpassDescription
-structure describing the subpass that the fragment shader is executed in.
-
-The fragment shader subpass input variables with the code:UniformConstant
-storage class and a decoration of code:InputAttachmentIndex that are
-statically used by code:OpEntryPoint form the _fragment input attachment
-interface_.
-These variables must: be declared with a type of code:OpTypeImage, a
-code:Dim operand of code:SubpassData, an code:Arrayed operand of 0, and a
-code:Sampled operand of 2.
-The code:MS operand of the code:OpTypeImage must: be 0 if the pname:samples
-field of the corresponding slink:VkAttachmentDescription is
-ename:VK_SAMPLE_COUNT_1_BIT and 1 otherwise.
-
-A subpass input variable identified with an code:InputAttachmentIndex
-decoration of _i_ reads from the input attachment indicated by
-pname:pInputAttachments[_i_] member of sname:VkSubpassDescription.
-If the subpass input variable is declared as an array of size N, it consumes
-N consecutive input attachments, starting with the index specified.
-There must: not be more than one input variable with the same
-code:InputAttachmentIndex whether explicitly declared or implied by an array
-declaration.
-The number of available input attachment indices is given by the
-pname:maxPerStageDescriptorInputAttachments member of the
-sname:VkPhysicalDeviceLimits structure.
-
-Variables identified with the code:InputAttachmentIndex must: only be used
-by a fragment stage.
-The basic data type (floating-point, integer, unsigned integer) of the
-subpass input must: match the basic format of the corresponding input
-attachment, or the values of subpass loads from these variables are
-undefined:.
-
-See <<descriptorsets-inputattachment>> for more details.
-
-
-ifdef::VK_NV_ray_tracing,VK_KHR_ray_tracing_pipeline[]
-[[interfaces-raypipeline]]
-== Ray Tracing Pipeline Interface
-
-Ray tracing pipelines may: have more stages than other pipelines with
-multiple instances of each stage and more dynamic interactions between the
-stages, but still have interface structures that obey the same general rules
-as interfaces between shader stages in other pipelines.
-The three types of inter-stage interface variables for ray tracing pipelines
-are:
-
- * Ray payloads which contain data tracked for the entire lifetime of the
-   ray.
- * Hit attributes which contain data about a specific hit for the duration
-   of its processing.
- * Callable data for passing data into and out of a callable shader.
-
-Ray payloads and callable data are used in explicit shader call
-instructions, so they have an incoming variant to distinguish the parameter
-passed to the invocation from any other payloads or data being used by
-subsequent shader call instructions.
-
-An interface structure used between stages must: match between the stages
-using it.
-Specifically:
-
- * The hit attribute structure read in an any-hit or closest hit shader
-   must: be the same structure as the hit attribute structure written in the
-   corresponding intersection shader in the same hit group.
- * The incoming callable data for a callable shader must: be the same
-   structure as the callable data referenced by the execute callable
-   instruction in the calling shader.
- * The ray payload for a shader invoked by a ray tracing command must: be
-   the same structure for all shader stages using the payload for that ray.
-
-Any shader with an incoming ray payload, incoming callable data, or hit
-attribute must: only declare one variable of that type.
-
-.Ray Pipeline Shader Interface
-[width="90%",options="header"]
-|====
-| Shader Stage    | Ray Payload | Incoming Ray Payload | Hit Attribute | Callable Data | Incoming Callable Data
-| Ray Generation  | r/w         |                      |               | r/w           |
-| Intersection    |             |                      | r/w           |               |
-| Any-Hit         |             | r/w                  | r             |               |
-| Closest Hit     | r/w         | r/w                  | r             | r/w           |
-| Miss            | r/w         | r/w                  |               | r/w           |
-| Callable        |             |                      |               | r/w           | r/w
-|====
-endif::VK_NV_ray_tracing,VK_KHR_ray_tracing_pipeline[]
-
-
-[[interfaces-resources]]
-== Shader Resource Interface
-
-When a shader stage accesses buffer or image resources, as described in the
-<<descriptorsets,Resource Descriptors>> section, the shader resource
-variables must: be matched with the <<descriptorsets-pipelinelayout,pipeline
-layout>> that is provided at pipeline creation time.
-
-The set of shader variables that form the _shader resource interface_ for a
-stage are the variables statically used by that stage's code:OpEntryPoint
-with a storage class of code:Uniform, code:UniformConstant,
-ifdef::VK_VERSION_1_1,VK_KHR_storage_buffer_storage_class[]
-code:StorageBuffer,
-endif::VK_VERSION_1_1,VK_KHR_storage_buffer_storage_class[]
-or code:PushConstant.
-For the fragment shader, this includes the <<interfaces-inputattachment,
-fragment input attachment interface>>.
-
-The shader resource interface consists of two sub-interfaces: the push
-constant interface and the descriptor set interface.
-
-
-[[interfaces-resources-pushconst]]
-=== Push Constant Interface
-
-The shader variables defined with a storage class of code:PushConstant that
-are statically used by the shader entry points for the pipeline define the
-_push constant interface_.
-They must: be:
-
-  * typed as code:OpTypeStruct,
-  * identified with a code:Block decoration, and
-  * laid out explicitly using the code:Offset, code:ArrayStride, and
-    code:MatrixStride decorations as specified in
-    <<interfaces-resources-layout,Offset and Stride Assignment>>.
-
-There must: be no more than one push constant block statically used per
-shader entry point.
-
-Each statically used member of a push constant block must: be placed at an
-code:Offset such that the entire member is entirely contained within the
-slink:VkPushConstantRange for each code:OpEntryPoint that uses it, and the
-pname:stageFlags for that range must: specify the appropriate
-elink:VkShaderStageFlagBits for that stage.
-The code:Offset decoration for any member of a push constant block must: not
-cause the space required for that member to extend outside the range
-[eq]#[0, pname:maxPushConstantsSize)#.
-
-Any member of a push constant block that is declared as an array must: only
-be accessed with _dynamically uniform_ indices.
-
-
-[[interfaces-resources-descset]]
-=== Descriptor Set Interface
-
-The _descriptor set interface_ is comprised of the shader variables with the
-storage class of
-ifdef::VK_VERSION_1_1,VK_KHR_storage_buffer_storage_class[]
-code:StorageBuffer,
-endif::VK_VERSION_1_1,VK_KHR_storage_buffer_storage_class[]
-code:Uniform or code:UniformConstant (including the variables in the
-<<interfaces-inputattachment,fragment input attachment interface>>) that are
-statically used by the shader entry points for the pipeline.
-
-These variables must: have code:DescriptorSet and code:Binding decorations
-specified, which are assigned and matched with the
-sname:VkDescriptorSetLayout objects in the pipeline layout as described in
-<<interfaces-resources-setandbinding,DescriptorSet and Binding Assignment>>.
-
-The code:Image code:Format of an code:OpTypeImage declaration must: not be
-*Unknown*, for variables which are used for code:OpImageRead,
-code:OpImageSparseRead, or code:OpImageWrite operations, except under the
-following conditions:
-
-  * For code:OpImageWrite, if the image format is listed in the
-    <<formats-without-shader-storage-format,storage without format>> list
-    and if the pname:shaderStorageImageWriteWithoutFormat feature is enabled
-    and the shader module declares the code:StorageImageWriteWithoutFormat
-    capability.
-ifdef::VK_KHR_format_feature_flags2[]
-  * For code:OpImageWrite, if the image format supports
-    ename:VK_FORMAT_FEATURE_2_STORAGE_WRITE_WITHOUT_FORMAT_BIT_KHR and the
-    shader module declares the code:StorageImageWriteWithoutFormat
-    capability.
-endif::VK_KHR_format_feature_flags2[]
-  * For code:OpImageRead or code:OpImageSparseRead, if the image format is
-    listed in the <<formats-without-shader-storage-format,storage without
-    format>> list and if the pname:shaderStorageImageReadWithoutFormat
-    feature is enabled and the shader module declares the
-    code:StorageImageReadWithoutFormat capability.
-ifdef::VK_KHR_format_feature_flags2[]
-  * For code:OpImageRead or code:OpImageSparseRead, if the image format
-    supports ename:VK_FORMAT_FEATURE_2_STORAGE_READ_WITHOUT_FORMAT_BIT_KHR
-    and the shader module declares the code:StorageImageReadWithoutFormat
-    capability.
-endif::VK_KHR_format_feature_flags2[]
-  * For code:OpImageRead, if code:Dim is code:SubpassData (indicating a read
-    from an input attachment).
-
-The code:Image code:Format of an code:OpTypeImage declaration must: not be
-*Unknown*, for variables which are used for code:OpAtomic* operations.
-
-Variables identified with the code:Uniform storage class are used to access
-transparent buffer backed resources.
-Such variables must: be:
-
-  * typed as code:OpTypeStruct, or an array of this type,
-  * identified with a code:Block or code:BufferBlock decoration, and
-  * laid out explicitly using the code:Offset, code:ArrayStride, and
-    code:MatrixStride decorations as specified in
-    <<interfaces-resources-layout,Offset and Stride Assignment>>.
-
-ifdef::VK_VERSION_1_1,VK_KHR_storage_buffer_storage_class[]
-Variables identified with the code:StorageBuffer storage class are used to
-access transparent buffer backed resources.
-Such variables must: be:
-
-  * typed as code:OpTypeStruct, or an array of this type,
-  * identified with a code:Block decoration, and
-  * laid out explicitly using the code:Offset, code:ArrayStride, and
-    code:MatrixStride decorations as specified in
-    <<interfaces-resources-layout,Offset and Stride Assignment>>.
-endif::VK_VERSION_1_1,VK_KHR_storage_buffer_storage_class[]
-
-ifndef::VK_VERSION_1_1,VK_KHR_storage_buffer_storage_class[]
-The code:Offset decoration for any variable in a code:Block must: not cause
-the space required for that variable to extend outside the range [eq]#[0,
-pname:maxUniformBufferRange)#.
-The code:Offset decoration for any variable in a code:BufferBlock must: not
-cause the space required for that variable to extend outside the range
-[eq]#[0, pname:maxStorageBufferRange)#.
-endif::VK_VERSION_1_1,VK_KHR_storage_buffer_storage_class[]
-
-ifdef::VK_VERSION_1_1,VK_KHR_storage_buffer_storage_class[]
-The code:Offset decoration for any member of a code:Block-decorated variable
-in the code:Uniform storage class must: not cause the space required for
-that variable to extend outside the range [eq]#[0,
-pname:maxUniformBufferRange)#.
-The code:Offset decoration for any member of a code:Block-decorated variable
-in the code:StorageBuffer storage class must: not cause the space required
-for that variable to extend outside the range [eq]#[0,
-pname:maxStorageBufferRange)#.
-endif::VK_VERSION_1_1,VK_KHR_storage_buffer_storage_class[]
-
-ifdef::VK_EXT_inline_uniform_block[]
-Variables identified with the code:Uniform storage class can: also be used
-to access transparent descriptor set backed resources when the variable is
-assigned to a descriptor set layout binding with a pname:descriptorType of
-ename:VK_DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK_EXT.
-In this case the variable must: be typed as code:OpTypeStruct and cannot: be
-aggregated into arrays of that type.
-Further, the code:Offset decoration for any member of such a variable must:
-not cause the space required for that variable to extend outside the range
-[eq]#[0,pname:maxInlineUniformBlockSize)#.
-endif::VK_EXT_inline_uniform_block[]
-
-Variables identified with a storage class of code:UniformConstant and a
-decoration of code:InputAttachmentIndex must: be declared as described in
-<<interfaces-inputattachment,Fragment Input Attachment Interface>>.
-
-SPIR-V variables decorated with a descriptor set and binding that identify a
-<<descriptorsets-combinedimagesampler, combined image sampler descriptor>>
-can: have a type of code:OpTypeImage, code:OpTypeSampler (code:Sampled=1),
-or code:OpTypeSampledImage.
-
-Arrays of any of these types can: be indexed with _constant integral
-expressions_.
-The following features must: be enabled and capabilities must: be declared
-in order to index such arrays with dynamically uniform or non-uniform
-indices:
-
-  * Storage images (except storage texel buffers and input attachments):
-  ** Dynamically uniform: pname:shaderStorageImageArrayDynamicIndexing and
-     code:StorageImageArrayDynamicIndexing
-ifdef::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
-  ** Non-uniform: pname:shaderStorageImageArrayNonUniformIndexing and
-     code:StorageImageArrayNonUniformIndexing
-  * Storage texel buffers:
-  ** Dynamically uniform: pname:shaderStorageTexelBufferArrayDynamicIndexing
-     and code:StorageTexelBufferArrayDynamicIndexing
-  ** Non-uniform: pname:shaderStorageTexelBufferArrayNonUniformIndexing and
-     code:StorageTexelBufferArrayNonUniformIndexing
-  * Input attachments:
-  ** Dynamically uniform: pname:shaderInputAttachmentArrayDynamicIndexing
-     and code:InputAttachmentArrayDynamicIndexing
-  ** Non-uniform: pname:shaderInputAttachmentArrayNonUniformIndexing and
-     code:InputAttachmentArrayNonUniformIndexing
-endif::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
-  * Sampled images (except uniform texel buffers), samplers and combined
-    image samplers:
-  ** Dynamically uniform: pname:shaderSampledImageArrayDynamicIndexing and
-     code:SampledImageArrayDynamicIndexing
-ifdef::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
-  ** Non-uniform: pname:shaderSampledImageArrayNonUniformIndexing and
-     code:SampledImageArrayNonUniformIndexing
-  * Uniform texel buffers:
-  ** Dynamically uniform: pname:shaderUniformTexelBufferArrayDynamicIndexing
-     and code:UniformTexelBufferArrayDynamicIndexing
-  ** Non-uniform: pname:shaderUniformTexelBufferArrayNonUniformIndexing and
-     code:UniformTexelBufferArrayNonUniformIndexing
-endif::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
-  * Uniform buffers:
-  ** Dynamically uniform: pname:shaderUniformBufferArrayDynamicIndexing and
-     code:UniformBufferArrayDynamicIndexing
-ifdef::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
-  ** Non-uniform: pname:shaderUniformBufferArrayNonUniformIndexing and
-     code:UniformBufferArrayNonUniformIndexing
-endif::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
-  * Storage buffers:
-  ** Dynamically uniform: pname:shaderStorageBufferArrayDynamicIndexing and
-     code:StorageBufferArrayDynamicIndexing
-ifdef::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
-  ** Non-uniform: pname:shaderStorageBufferArrayNonUniformIndexing and
-     code:StorageBufferArrayNonUniformIndexing
-endif::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
-ifdef::VK_NV_ray_tracing,VK_KHR_acceleration_structure[]
-  * Acceleration structures:
-  ** Dynamically uniform: Always supported.
-  ** Non-uniform: Always supported.
-endif::VK_NV_ray_tracing,VK_KHR_acceleration_structure[]
-
-ifdef::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
-If an instruction loads from or stores to a resource (including atomics and
-image instructions) and the resource descriptor being accessed is not
-dynamically uniform, then the corresponding non-uniform indexing feature
-must: be enabled and the capability must: be declared.
-endif::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
-If an instruction loads from or stores to a resource (including atomics and
-image instructions) and the resource descriptor being accessed is loaded
-from an array element with a non-constant index, then the corresponding
-dynamic
-ifdef::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
-or non-uniform
-endif::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
-indexing feature must: be enabled and the capability must: be declared.
-
-ifdef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
-If the combined image sampler enables sampler {YCbCr}
-ifndef::VK_EXT_fragment_density_map[]
-conversion,
-endif::VK_EXT_fragment_density_map[]
-ifdef::VK_EXT_fragment_density_map[]
-conversion or samples a <<samplers-subsamplesampler,subsampled image>>,
-endif::VK_EXT_fragment_density_map[]
-it must: be indexed only by constant integral expressions when aggregated
-into arrays in shader code, irrespective of the
-pname:shaderSampledImageArrayDynamicIndexing feature.
-endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
-ifndef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
-ifdef::VK_EXT_fragment_density_map[]
-If the combined image sampler samples a
-<<samplers-subsamplesampler,subsampled image>>, it must: be indexed only by
-constant integral expressions when aggregated into arrays in shader code,
-irrespective of the pname:shaderSampledImageArrayDynamicIndexing feature.
-endif::VK_EXT_fragment_density_map[]
-endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
-
-[[interfaces-resources-correspondence]]
-.Shader Resource and Descriptor Type Correspondence
-[width="90%",cols="<1,<2",options="header"]
-|====
-| Resource type          | Descriptor Type
-| sampler                | ename:VK_DESCRIPTOR_TYPE_SAMPLER or
-                           ename:VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER
-| sampled image          | ename:VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE or
-                           ename:VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER
-| storage image          | ename:VK_DESCRIPTOR_TYPE_STORAGE_IMAGE
-| combined image sampler | ename:VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER
-| uniform texel buffer   | ename:VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER
-| storage texel buffer   | ename:VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER
-| uniform buffer         | ename:VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER or
-                           ename:VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC
-| storage buffer         | ename:VK_DESCRIPTOR_TYPE_STORAGE_BUFFER or
-                           ename:VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC
-| input attachment       | ename:VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT
-ifdef::VK_EXT_inline_uniform_block[]
-| inline uniform block   | ename:VK_DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK_EXT
-endif::VK_EXT_inline_uniform_block[]
-ifdef::VK_NV_ray_tracing,VK_KHR_acceleration_structure[]
-| acceleration structure |
-ifdef::VK_KHR_acceleration_structure[ename:VK_DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_KHR]
-ifdef::VK_NV_ray_tracing+VK_KHR_acceleration_structure[or]
-ifdef::VK_NV_ray_tracing[ename:VK_DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_NV]
-endif::VK_NV_ray_tracing,VK_KHR_acceleration_structure[]
-|====
-
-[[interfaces-resources-storage-class-correspondence]]
-.Shader Resource and Storage Class Correspondence
-[width="100%",cols="<21%,<22%,<27%,<30%",options="header"]
-|====
-| Resource type   | Storage Class | Type^1^ | Decoration(s)^2^
-| sampler
-        | code:UniformConstant | code:OpTypeSampler |
-| sampled image
-        | code:UniformConstant | code:OpTypeImage (code:Sampled=1)|
-| storage image
-        | code:UniformConstant | code:OpTypeImage (code:Sampled=2) |
-| combined image sampler
-        | code:UniformConstant | code:OpTypeSampledImage +
-                                 code:OpTypeImage (code:Sampled=1) +
-                                 code:OpTypeSampler |
-| uniform texel buffer
-        | code:UniformConstant | code:OpTypeImage (code:Dim=code:Buffer, code:Sampled=1) |
-| storage texel buffer
-        | code:UniformConstant | code:OpTypeImage (code:Dim=code:Buffer, code:Sampled=2) |
-| uniform buffer
-        | code:Uniform         | code:OpTypeStruct
-        | code:Block, code:Offset, (code:ArrayStride), (code:MatrixStride)
-ifndef::VK_VERSION_1_1,VK_KHR_storage_buffer_storage_class[]
-| storage buffer
-        | code:Uniform         | code:OpTypeStruct
-        | code:BufferBlock, code:Offset, (code:ArrayStride), (code:MatrixStride)
-endif::VK_VERSION_1_1,VK_KHR_storage_buffer_storage_class[]
-ifdef::VK_VERSION_1_1,VK_KHR_storage_buffer_storage_class[]
-.2+<.^| storage buffer
-        | code:Uniform         .2+<.^| code:OpTypeStruct
-        | code:BufferBlock, code:Offset, (code:ArrayStride), (code:MatrixStride)
-        | code:StorageBuffer | code:Block, code:Offset, (code:ArrayStride), (code:MatrixStride)
-endif::VK_VERSION_1_1,VK_KHR_storage_buffer_storage_class[]
-| input attachment
-        | code:UniformConstant | code:OpTypeImage (code:Dim=code:SubpassData, code:Sampled=2)
-        | code:InputAttachmentIndex
-ifdef::VK_EXT_inline_uniform_block[]
-| inline uniform block
-        | code:Uniform | code:OpTypeStruct
-        | code:Block, code:Offset, (code:ArrayStride), (code:MatrixStride)
-endif::VK_EXT_inline_uniform_block[]
-ifdef::VK_NV_ray_tracing,VK_KHR_acceleration_structure[]
-| acceleration structure
-        | code:UniformConstant | code:OpTypeAccelerationStructureKHR |
-endif::VK_NV_ray_tracing,VK_KHR_acceleration_structure[]
-|====
-
-1::
-    Where code:OpTypeImage is referenced, the code:Dim values code:Buffer
-    and code:Subpassdata are only accepted where they are specifically
-    referenced.
-    They do not correspond to resource types where a generic
-    code:OpTypeImage is specified.
-2::
-    In addition to code:DescriptorSet and code:Binding.
-
-
-[[interfaces-resources-setandbinding]]
-=== DescriptorSet and Binding Assignment
-
-A variable decorated with a code:DescriptorSet decoration of [eq]#s# and a
-code:Binding decoration of [eq]#b# indicates that this variable is
-associated with the slink:VkDescriptorSetLayoutBinding that has a
-pname:binding equal to [eq]#b# in pname:pSetLayouts[_s_] that was specified
-in slink:VkPipelineLayoutCreateInfo.
-
-code:DescriptorSet decoration values must: be between zero and
-pname:maxBoundDescriptorSets minus one, inclusive.
-code:Binding decoration values can: be any 32-bit unsigned integer value, as
-described in <<descriptorsets-setlayout>>.
-Each descriptor set has its own binding name space.
-
-If the code:Binding decoration is used with an array, the entire array is
-assigned that binding value.
-The array must: be a single-dimensional array and size of the array must: be
-no larger than the number of descriptors in the binding.
-ifdef::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
-If the array is runtime-sized, then array elements greater than or equal to
-the size of that binding in the bound descriptor set must: not be used.
-If the array is runtime-sized, the pname:runtimeDescriptorArray feature
-must: be enabled and the code:RuntimeDescriptorArray capability must: be
-declared.
-endif::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
-ifndef::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
-The array must: not be runtime-sized.
-endif::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
-The index of each element of the array is referred to as the _arrayElement_.
-For the purposes of interface matching and descriptor set
-<<descriptorsets-updates,operations>>, if a resource variable is not an
-array, it is treated as if it has an arrayElement of zero.
-
-There is a limit on the number of resources of each type that can: be
-accessed by a pipeline stage as shown in
-<<interfaces-resources-limits,Shader Resource Limits>>.
-The "`Resources Per Stage`" column gives the limit on the number each type
-of resource that can: be statically used for an entry point in any given
-stage in a pipeline.
-The "`Resource Types`" column lists which resource types are counted against
-the limit.
-Some resource types count against multiple limits.
-ifdef::VK_VALVE_mutable_descriptor_type[]
-The ename:VK_DESCRIPTOR_TYPE_MUTABLE_VALVE descriptor type counts as one
-individual resource and one for every unique resource limit per descriptor
-set type that is present in the associated binding's
-slink:VkMutableDescriptorTypeListVALVE.
-If multiple descriptor types in slink:VkMutableDescriptorTypeListVALVE map
-to the same resource limit, only one descriptor is consumed for purposes of
-computing resource limits.
-endif::VK_VALVE_mutable_descriptor_type[]
-
-The pipeline layout may: include descriptor sets and bindings which are not
-referenced by any variables statically used by the entry points for the
-shader stages in the binding's pname:stageFlags.
-
-However, if a variable assigned to a given code:DescriptorSet and
-code:Binding is statically used by the entry point for a shader stage, the
-pipeline layout must: contain a descriptor set layout binding in that
-descriptor set layout and for that binding number, and that binding's
-pname:stageFlags must: include the appropriate elink:VkShaderStageFlagBits
-for that stage.
-The variable must: be of a valid resource type determined by its SPIR-V type
-and storage class, as defined in
-<<interfaces-resources-storage-class-correspondence,Shader Resource and
-Storage Class Correspondence>>.
-The descriptor set layout binding must: be of a corresponding descriptor
-type, as defined in <<interfaces-resources-correspondence,Shader Resource
-and Descriptor Type Correspondence>>.
-
-[NOTE]
-.Note
-====
-There are no limits on the number of shader variables that can have
-overlapping set and binding values in a shader; but which resources are
-<<shaders-staticuse,statically used>> has an impact.
-If any shader variable identifying a resource is
-<<shaders-staticuse,statically used>> in a shader, then the underlying
-descriptor bound at the declared set and binding must
-<<interfaces-resources-correspondence,support the declared type in the
-shader>> when the shader executes.
-
-If multiple shader variables are declared with the same set and binding
-values, and with the same underlying descriptor type, they can all be
-statically used within the same shader.
-However, accesses are not automatically synchronized, and code:Aliased
-decorations should be used to avoid data hazards (see
-https://www.khronos.org/registry/spir-v/specs/unified1/SPIRV.html#_a_id_aliasingsection_a_aliasing[section
-2.18.2 Aliasing in the SPIR-V specification]).
-
-If multiple shader variables with the same set and binding values are
-declared in a single shader, but with different declared types, where any of
-those are not supported by the relevant bound descriptor, that shader can
-only be executed if the variables with the unsupported type are not
-statically used.
-
-A noteworthy example of using multiple statically-used shader variables
-sharing the same descriptor set and binding values is a descriptor of type
-ename:VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER that has multiple
-corresponding shader variables in the code:UniformConstant storage class,
-where some could be code:OpTypeImage (code:Sampled=1), some could be
-code:OpTypeSampler, and some could be code:OpTypeSampledImage.
-====
-
-[[interfaces-resources-limits]]
-.Shader Resource Limits
-[width="80%",cols="<35,<23",options="header"]
-|====
-| Resources per Stage                   | Resource Types
-.2+<.^| pname:maxPerStageDescriptorSamplers
-ifdef::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
-or pname:maxPerStageDescriptorUpdateAfterBindSamplers
-endif::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
-            | sampler           | combined image sampler
-.3+<.^| pname:maxPerStageDescriptorSampledImages
-ifdef::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
-or pname:maxPerStageDescriptorUpdateAfterBindSampledImages
-endif::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
-            | sampled image     | combined image sampler | uniform texel buffer
-.2+<.^| pname:maxPerStageDescriptorStorageImages
-ifdef::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
-or pname:maxPerStageDescriptorUpdateAfterBindStorageImages
-endif::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
-            | storage image     | storage texel buffer
-.2+<.^| pname:maxPerStageDescriptorUniformBuffers
-ifdef::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
-or pname:maxPerStageDescriptorUpdateAfterBindUniformBuffers
-endif::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
-            | uniform buffer    | uniform buffer dynamic
-.2+<.^| pname:maxPerStageDescriptorStorageBuffers
-ifdef::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
-or pname:maxPerStageDescriptorUpdateAfterBindStorageBuffers
-endif::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
-            | storage buffer    | storage buffer dynamic
-| pname:maxPerStageDescriptorInputAttachments
-ifdef::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
-or pname:maxPerStageDescriptorUpdateAfterBindInputAttachments
-endif::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
-            | input attachment^1^
-ifdef::VK_EXT_inline_uniform_block[]
-| pname:maxPerStageDescriptorInlineUniformBlocks
-ifdef::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
-or pname:maxPerStageDescriptorUpdateAfterBindInlineUniformBlocks
-endif::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
-            | inline uniform block
-endif::VK_EXT_inline_uniform_block[]
-ifdef::VK_NV_ray_tracing,VK_KHR_acceleration_structure[]
-|
-ifdef::VK_NV_ray_tracing[sname:VkPhysicalDeviceRayTracingPropertiesNV ::pname:maxDescriptorSetAccelerationStructures]
-ifdef::VK_NV_ray_tracing+VK_KHR_acceleration_structure[or]
-ifdef::VK_KHR_acceleration_structure[]
-pname:maxPerStageDescriptorAccelerationStructures or
-pname:maxPerStageDescriptorUpdateAfterBindAccelerationStructures
-endif::VK_KHR_acceleration_structure[]
-            | acceleration structure
-endif::VK_NV_ray_tracing,VK_KHR_acceleration_structure[]
-|====
-
-1::
-    Input attachments can: only be used in the fragment shader stage
-
-
-[[interfaces-resources-layout]]
-=== Offset and Stride Assignment
-
-Certain objects must: be explicitly laid out using the code:Offset,
-code:ArrayStride, and code:MatrixStride, as described in
-https://www.khronos.org/registry/spir-v/specs/unified1/SPIRV.html#ShaderValidation[SPIR-V
-explicit layout validation rules].
-All such layouts also must: conform to the following requirements.
-
-[NOTE]
-.Note
-====
-The numeric order of code:Offset decorations does not need to follow member
-declaration order.
-====
-
-
-[[interfaces-alignment-requirements]]
-*Alignment Requirements*
-
-There are different alignment requirements depending on the specific
-resources and on the features enabled on the device.
-
-The _scalar alignment_ of the type of an code:OpTypeStruct member is defined
-recursively as follows:
-
-  * A scalar of size [eq]#N# has a scalar alignment of [eq]#N#.
-  * A vector or matrix type has a scalar alignment equal to that of its
-    component type.
-  * An array type has a scalar alignment equal to that of its element type.
-  * A structure has a scalar alignment equal to the largest scalar alignment
-    of any of its members.
-
-The _base alignment_ of the type of an code:OpTypeStruct member is defined
-recursively as follows:
-
-  * A scalar has a base alignment equal to its scalar alignment.
-  * A two-component vector has a base alignment equal to twice its scalar
-    alignment.
-  * A three- or four-component vector has a base alignment equal to four
-    times its scalar alignment.
-  * An array has a base alignment equal to the base alignment of its element
-    type.
-  * A structure has a base alignment equal to the largest base alignment of
-    any of its members.
-    An empty structure has a base alignment equal to the size of the
-    smallest scalar type permitted by the capabilities declared in the
-    SPIR-V module.
-    (e.g., for a 1 byte aligned empty struct in the code:StorageBuffer
-    storage class, code:StorageBuffer8BitAccess or
-    code:UniformAndStorageBuffer8BitAccess must: be declared in the SPIR-V
-    module.)
-  * A row-major matrix of [eq]#C# columns has a base alignment equal to the
-    base alignment of a vector of [eq]#C# matrix components.
-  * A column-major matrix has a base alignment equal to the base alignment
-    of the matrix column type.
-
-The _extended alignment_ of the type of an code:OpTypeStruct member is
-similarly defined as follows:
-
-  * A scalar, vector or matrix type has an extended alignment equal to its
-    base alignment.
-  * An array or structure type has an extended alignment equal to the
-    largest extended alignment of any of its members, rounded up to a
-    multiple of 16.
-
-ifdef::VK_VERSION_1_1,VK_KHR_relaxed_block_layout[]
-
-A member is defined to _improperly straddle_ if either of the following are
-true:
-
-  * It is a vector with total size less than or equal to 16 bytes, and has
-    code:Offset decorations placing its first byte at [eq]#F# and its last
-    byte at [eq]#L#, where [eq]#floor(F / 16) != floor(L / 16)#.
-  * It is a vector with total size greater than 16 bytes and has its
-    code:Offset decorations placing its first byte at a non-integer multiple
-    of 16.
-
-endif::VK_VERSION_1_1,VK_KHR_relaxed_block_layout[]
-
-[[interfaces-resources-standard-layout]]
-*Standard Buffer Layout*
-
-Every member of an code:OpTypeStruct that is required to be explicitly laid
-out must: be aligned according to the first matching rule as follows.
-If the struct is contained in pointer types of multiple storage classes, it
-must: satisfy the requirements for every storage class used to reference it.
-
-ifdef::VK_VERSION_1_2,VK_EXT_scalar_block_layout[]
-. If the code:scalarBlockLayout feature is enabled on the device and the
-  storage class is code:Uniform, code:StorageBuffer,
-ifdef::VK_VERSION_1_2,VK_EXT_buffer_device_address,VK_KHR_buffer_device_address[]
-  code:PhysicalStorageBuffer,
-endif::VK_VERSION_1_2,VK_EXT_buffer_device_address,VK_KHR_buffer_device_address[]
-ifdef::VK_KHR_ray_tracing_pipeline[]
-  code:ShaderRecordBufferKHR,
-endif::VK_KHR_ray_tracing_pipeline[]
-  or code:PushConstant then every member must: be aligned according to its
-  scalar alignment.
-endif::VK_VERSION_1_2,VK_EXT_scalar_block_layout[]
-ifdef::VK_KHR_workgroup_memory_explicit_layout[]
-. If the code:workgroupMemoryExplicitLayoutScalarBlockLayout feature is
-  enabled on the device and the storage class is code:Workgroup then every
-  member must: be aligned according to its scalar alignment.
-endif::VK_KHR_workgroup_memory_explicit_layout[]
-ifdef::VK_VERSION_1_1,VK_KHR_relaxed_block_layout[]
-. All vectors must: be aligned according to their scalar alignment.
-endif::VK_VERSION_1_1,VK_KHR_relaxed_block_layout[]
-ifdef::VK_VERSION_1_2,VK_KHR_uniform_buffer_standard_layout[]
-. If the pname:uniformBufferStandardLayout feature is not enabled on the
-  device, then any
-endif::VK_VERSION_1_2,VK_KHR_uniform_buffer_standard_layout[]
-ifndef::VK_VERSION_1_2,VK_KHR_uniform_buffer_standard_layout[]
-. Any
-endif::VK_VERSION_1_2,VK_KHR_uniform_buffer_standard_layout[]
-  member of an code:OpTypeStruct with a storage class of code:Uniform and a
-  decoration of code:Block must: be aligned according to its extended
-  alignment.
-. Every other member must: be aligned according to its base alignment.
-
-ifdef::VK_VERSION_1_2,VK_EXT_scalar_block_layout[]
-[NOTE]
-.Note
-====
-Even if scalar alignment is supported, it is generally more performant to
-use the _base alignment_.
-====
-endif::VK_VERSION_1_2,VK_EXT_scalar_block_layout[]
-
-The memory layout must: obey the following rules:
-
-  * The code:Offset decoration of any member must: be a multiple of its
-    alignment.
-  * Any code:ArrayStride or code:MatrixStride decoration must: be a multiple
-    of the alignment of the array or matrix as defined above.
-
-ifdef::VK_VERSION_1_2,VK_EXT_scalar_block_layout,VK_KHR_workgroup_memory_explicit_layout[]
-If one of the conditions below applies
-
-ifdef::VK_VERSION_1_2,VK_EXT_scalar_block_layout[]
-  * The storage class is code:Uniform, code:StorageBuffer,
-ifdef::VK_VERSION_1_2,VK_EXT_buffer_device_address,VK_KHR_buffer_device_address[]
-    code:PhysicalStorageBuffer,
-endif::VK_VERSION_1_2,VK_EXT_buffer_device_address,VK_KHR_buffer_device_address[]
-ifdef::VK_KHR_ray_tracing_pipeline[]
-  code:ShaderRecordBufferKHR,
-endif::VK_KHR_ray_tracing_pipeline[]
-    or code:PushConstant, and the code:scalarBlockLayout feature is not
-    enabled on the device.
-endif::VK_VERSION_1_2,VK_EXT_scalar_block_layout[]
-ifdef::VK_KHR_workgroup_memory_explicit_layout[]
-  * The storage class is code:Workgroup, and either the struct member is not
-    part of a code:Block or the
-    code:workgroupMemoryExplicitLayoutScalarBlockLayout feature is not
-    enabled on the device.
-endif::VK_KHR_workgroup_memory_explicit_layout[]
-  * The storage class is any other storage class.
-
-the memory layout must: also obey the following rules:
-endif::VK_VERSION_1_2,VK_EXT_scalar_block_layout,VK_KHR_workgroup_memory_explicit_layout[]
-
-ifdef::VK_VERSION_1_1,VK_KHR_relaxed_block_layout[]
-  * Vectors must: not improperly straddle, as defined above.
-endif::VK_VERSION_1_1,VK_KHR_relaxed_block_layout[]
-  * The code:Offset decoration of a member must: not place it between the
-    end of a structure or an array and the next multiple of the alignment of
-    that structure or array.
-
-[NOTE]
-.Note
-====
-The *std430 layout* in GLSL satisfies these rules for types using the base
-alignment.
-The *std140 layout* satisfies the rules for types using the extended
-alignment.
-====
-
-
-[[interfaces-builtin-variables]]
-== Built-In Variables
-
-Built-in variables are accessed in shaders by declaring a variable decorated
-with a code:BuiltIn SPIR-V decoration.
-The meaning of each code:BuiltIn decoration is as follows.
-In the remainder of this section, the name of a built-in is used
-interchangeably with a term equivalent to a variable decorated with that
-particular built-in.
-Built-ins that represent integer values can: be declared as either signed or
-unsigned 32-bit integers.
-
-<<interfaces-iointerfaces-matching, As mentioned above>>, some inputs and
-outputs have an additional level of arrayness relative to other shader
-inputs and outputs.
-This level of arrayness is not included in the type descriptions below, but
-must be included when declaring the built-in.
-
-ifdef::VK_NV_fragment_shader_barycentric[]
-[[interfaces-builtin-variables-barycoordnv]]
-[open,refpage='BaryCoordNV',desc='Barycentric coordinates of a fragment',type='builtins']
---
-:refpage: BaryCoordNV
-
-code:BaryCoordNV::
-
-The code:BaryCoordNV decoration can: be used to decorate a fragment shader
-input variable.
-This variable will contain a three-component floating-point vector with
-barycentric weights that indicate the location of the fragment relative to
-the screen-space locations of vertices of its primitive, obtained using
-perspective interpolation.
-
-.Valid Usage
-****
-  * [[VUID-{refpage}-BaryCoordNV-04154]]
-    The code:BaryCoordNV decoration must: be used only within the
-    code:Fragment {ExecutionModel}
-  * [[VUID-{refpage}-BaryCoordNV-04155]]
-    The variable decorated with code:BaryCoordNV must: be declared using the
-    code:Input {StorageClass}
-  * [[VUID-{refpage}-BaryCoordNV-04156]]
-    The variable decorated with code:BaryCoordNV must: be declared as a
-    three-component vector of 32-bit floating-point values
-****
---
-endif::VK_NV_fragment_shader_barycentric[]
-
-ifdef::VK_AMD_shader_explicit_vertex_parameter[]
-[open,refpage='BaryCoordNoPerspAMD',desc='Barycentric coordinates of a fragment center in screen-space',type='builtins']
---
-:refpage: BaryCoordNoPerspAMD
-
-code:BaryCoordNoPerspAMD::
-
-The code:BaryCoordNoPerspAMD decoration can: be used to decorate a fragment
-shader input variable.
-This variable will contain the (I,J) pair of the barycentric coordinates
-corresponding to the fragment evaluated using linear interpolation at the
-fragment's center.
-The K coordinate of the barycentric coordinates can: be derived given the
-identity I {plus} J {plus} K = 1.0.
-
-.Valid Usage
-****
-  * [[VUID-{refpage}-BaryCoordNoPerspAMD-04157]]
-    The code:BaryCoordNoPerspAMD decoration must: be used only within the
-    code:Fragment {ExecutionModel}
-  * [[VUID-{refpage}-BaryCoordNoPerspAMD-04158]]
-    The variable decorated with code:BaryCoordNoPerspAMD must: be declared
-    using the code:Input {StorageClass}
-  * [[VUID-{refpage}-BaryCoordNoPerspAMD-04159]]
-    The variable decorated with code:BaryCoordNoPerspAMD must: be declared
-    as a two-component vector of 32-bit floating-point values
-****
---
-endif::VK_AMD_shader_explicit_vertex_parameter[]
-
-ifdef::VK_NV_fragment_shader_barycentric[]
-[[interfaces-builtin-variables-barycoordnoperspnv]]
-[open,refpage='BaryCoordNoPerspNV',desc='Barycentric coordinates of a fragment in screen-space',type='builtins']
---
-:refpage: BaryCoordNoPerspNV
-
-code:BaryCoordNoPerspNV::
-
-The code:BaryCoordNoPerspNV decoration can: be used to decorate a fragment
-shader input variable.
-This variable will contain a three-component floating-point vector with
-barycentric weights that indicate the location of the fragment relative to
-the screen-space locations of vertices of its primitive, obtained using
-linear interpolation.
-
-.Valid Usage
-****
-  * [[VUID-{refpage}-BaryCoordNoPerspNV-04160]]
-    The code:BaryCoordNoPerspNV decoration must: be used only within the
-    code:Fragment {ExecutionModel}
-  * [[VUID-{refpage}-BaryCoordNoPerspNV-04161]]
-    The variable decorated with code:BaryCoordNoPerspNV must: be declared
-    using the code:Input {StorageClass}
-  * [[VUID-{refpage}-BaryCoordNoPerspNV-04162]]
-    The variable decorated with code:BaryCoordNoPerspNV must: be declared as
-    a three-component vector of 32-bit floating-point values
-****
---
-endif::VK_NV_fragment_shader_barycentric[]
-
-ifdef::VK_AMD_shader_explicit_vertex_parameter[]
-[open,refpage='BaryCoordNoPerspCentroidAMD',desc='Barycentric coordinates of a fragment centroid in screen-space',type='builtins']
---
-:refpage: BaryCoordNoPerspCentroidAMD
-
-code:BaryCoordNoPerspCentroidAMD::
-
-The code:BaryCoordNoPerspCentroidAMD decoration can: be used to decorate a
-fragment shader input variable.
-This variable will contain the (I,J) pair of the barycentric coordinates
-corresponding to the fragment evaluated using linear interpolation at the
-centroid.
-The K coordinate of the barycentric coordinates can: be derived given the
-identity I {plus} J {plus} K = 1.0.
-
-.Valid Usage
-****
-  * [[VUID-{refpage}-BaryCoordNoPerspCentroidAMD-04163]]
-    The code:BaryCoordNoPerspCentroidAMD decoration must: be used only
-    within the code:Fragment {ExecutionModel}
-  * [[VUID-{refpage}-BaryCoordNoPerspCentroidAMD-04164]]
-    The variable decorated with code:BaryCoordNoPerspCentroidAMD must: be
-    declared using the code:Input {StorageClass}
-  * [[VUID-{refpage}-BaryCoordNoPerspCentroidAMD-04165]]
-    The variable decorated with code:BaryCoordNoPerspCentroidAMD must: be
-    declared as a three-component vector of 32-bit floating-point values
-****
---
-
-[open,refpage='BaryCoordNoPerspSampleAMD',desc='Barycentric coordinates of a sample center in screen-space',type='builtins']
---
-:refpage: BaryCoordNoPerspSampleAMD
-
-code:BaryCoordNoPerspSampleAMD::
-
-The code:BaryCoordNoPerspSampleAMD decoration can: be used to decorate a
-fragment shader input variable.
-This variable will contain the (I,J) pair of the barycentric coordinates
-corresponding to the fragment evaluated using linear interpolation at each
-covered sample.
-The K coordinate of the barycentric coordinates can: be derived given the
-identity I {plus} J {plus} K = 1.0.
-
-.Valid Usage
-****
-  * [[VUID-{refpage}-BaryCoordNoPerspSampleAMD-04166]]
-    The code:BaryCoordNoPerspSampleAMD decoration must: be used only within
-    the code:Fragment {ExecutionModel}
-  * [[VUID-{refpage}-BaryCoordNoPerspSampleAMD-04167]]
-    The variable decorated with code:BaryCoordNoPerspSampleAMD must: be
-    declared using the code:Input {StorageClass}
-  * [[VUID-{refpage}-BaryCoordNoPerspSampleAMD-04168]]
-    The variable decorated with code:BaryCoordNoPerspSampleAMD must: be
-    declared as a two-component vector of 32-bit floating-point values
-****
---
-
-[open,refpage='BaryCoordPullModelAMD',desc='Inverse barycentric coordinates of a fragment center',type='builtins']
---
-:refpage: BaryCoordPullModelAMD
-
-code:BaryCoordPullModelAMD::
-
-The code:BaryCoordPullModelAMD decoration can: be used to decorate a
-fragment shader input variable.
-This variable will contain (1/W, 1/I, 1/J) evaluated at the fragment center
-and can: be used to calculate gradients and then interpolate I, J, and W at
-any desired sample location.
-
-.Valid Usage
-****
-  * [[VUID-{refpage}-BaryCoordPullModelAMD-04169]]
-    The code:BaryCoordPullModelAMD decoration must: be used only within the
-    code:Fragment {ExecutionModel}
-  * [[VUID-{refpage}-BaryCoordPullModelAMD-04170]]
-    The variable decorated with code:BaryCoordPullModelAMD must: be declared
-    using the code:Input {StorageClass}
-  * [[VUID-{refpage}-BaryCoordPullModelAMD-04171]]
-    The variable decorated with code:BaryCoordPullModelAMD must: be declared
-    as a three-component vector of 32-bit floating-point values
-****
---
-
-[open,refpage='BaryCoordSmoothAMD',desc='Barycentric coordinates of a fragment center',type='builtins']
---
-:refpage: BaryCoordSmoothAMD
-
-code:BaryCoordSmoothAMD::
-
-The code:BaryCoordSmoothAMD decoration can: be used to decorate a fragment
-shader input variable.
-This variable will contain the (I,J) pair of the barycentric coordinates
-corresponding to the fragment evaluated using perspective interpolation at
-the fragment's center.
-The K coordinate of the barycentric coordinates can: be derived given the
-identity I {plus} J {plus} K = 1.0.
-
-.Valid Usage
-****
-  * [[VUID-{refpage}-BaryCoordSmoothAMD-04172]]
-    The code:BaryCoordSmoothAMD decoration must: be used only within the
-    code:Fragment {ExecutionModel}
-  * [[VUID-{refpage}-BaryCoordSmoothAMD-04173]]
-    The variable decorated with code:BaryCoordSmoothAMD must: be declared
-    using the code:Input {StorageClass}
-  * [[VUID-{refpage}-BaryCoordSmoothAMD-04174]]
-    The variable decorated with code:BaryCoordSmoothAMD must: be declared as
-    a two-component vector of 32-bit floating-point values
-****
---
-
-[open,refpage='BaryCoordSmoothCentroidAMD',desc='Barycentric coordinates of a fragment centroid',type='builtins']
---
-:refpage: BaryCoordSmoothCentroidAMD
-
-code:BaryCoordSmoothCentroidAMD::
-
-The code:BaryCoordSmoothCentroidAMD decoration can: be used to decorate a
-fragment shader input variable.
-This variable will contain the (I,J) pair of the barycentric coordinates
-corresponding to the fragment evaluated using perspective interpolation at
-the centroid.
-The K coordinate of the barycentric coordinates can: be derived given the
-identity I {plus} J {plus} K = 1.0.
-
-.Valid Usage
-****
-  * [[VUID-{refpage}-BaryCoordSmoothCentroidAMD-04175]]
-    The code:BaryCoordSmoothCentroidAMD decoration must: be used only within
-    the code:Fragment {ExecutionModel}
-  * [[VUID-{refpage}-BaryCoordSmoothCentroidAMD-04176]]
-    The variable decorated with code:BaryCoordSmoothCentroidAMD must: be
-    declared using the code:Input {StorageClass}
-  * [[VUID-{refpage}-BaryCoordSmoothCentroidAMD-04177]]
-    The variable decorated with code:BaryCoordSmoothCentroidAMD must: be
-    declared as a two-component vector of 32-bit floating-point values
-****
---
-
-[open,refpage='BaryCoordSmoothSampleAMD',desc='Barycentric coordinates of a sample center',type='builtins']
---
-:refpage: BaryCoordSmoothSampleAMD
-
-code:BaryCoordSmoothSampleAMD::
-
-The code:BaryCoordSmoothSampleAMD decoration can: be used to decorate a
-fragment shader input variable.
-This variable will contain the (I,J) pair of the barycentric coordinates
-corresponding to the fragment evaluated using perspective interpolation at
-each covered sample.
-The K coordinate of the barycentric coordinates can: be derived given the
-identity I {plus} J {plus} K = 1.0.
-
-.Valid Usage
-****
-  * [[VUID-{refpage}-BaryCoordSmoothSampleAMD-04178]]
-    The code:BaryCoordSmoothSampleAMD decoration must: be used only within
-    the code:Fragment {ExecutionModel}
-  * [[VUID-{refpage}-BaryCoordSmoothSampleAMD-04179]]
-    The variable decorated with code:BaryCoordSmoothSampleAMD must: be
-    declared using the code:Input {StorageClass}
-  * [[VUID-{refpage}-BaryCoordSmoothSampleAMD-04180]]
-    The variable decorated with code:BaryCoordSmoothSampleAMD must: be
-    declared as a two-component vector of 32-bit floating-point values
-****
---
-endif::VK_AMD_shader_explicit_vertex_parameter[]
-
-
-ifdef::VK_VERSION_1_1,VK_KHR_shader_draw_parameters[]
-[[interfaces-builtin-variables-baseinstance]]
-[open,refpage='BaseInstance',desc='First instance being rendered',type='builtins']
---
-:refpage: BaseInstance
-
-code:BaseInstance::
-
-Decorating a variable with the code:BaseInstance built-in will make that
-variable contain the integer value corresponding to the first instance that
-was passed to the command that invoked the current vertex shader invocation.
-code:BaseInstance is the pname:firstInstance parameter to a _direct drawing
-command_ or the pname:firstInstance member of a structure consumed by an
-_indirect drawing command_.
-
-.Valid Usage
-****
-  * [[VUID-{refpage}-BaseInstance-04181]]
-    The code:BaseInstance decoration must: be used only within the
-    code:Vertex {ExecutionModel}
-  * [[VUID-{refpage}-BaseInstance-04182]]
-    The variable decorated with code:BaseInstance must: be declared using
-    the code:Input {StorageClass}
-  * [[VUID-{refpage}-BaseInstance-04183]]
-    The variable decorated with code:BaseInstance must: be declared as a
-    scalar 32-bit integer value
-****
---
-
-[[interfaces-builtin-variables-basevertex]]
-[open,refpage='BaseVertex',desc='First vertex being rendered',type='builtins']
---
-:refpage: BaseVertex
-
-code:BaseVertex::
-
-Decorating a variable with the code:BaseVertex built-in will make that
-variable contain the integer value corresponding to the first vertex or
-vertex offset that was passed to the command that invoked the current vertex
-shader invocation.
-For _non-indexed drawing commands_, this variable is the pname:firstVertex
-parameter to a _direct drawing command_ or the pname:firstVertex member of
-the structure consumed by an _indirect drawing command_.
-For _indexed drawing commands_, this variable is the pname:vertexOffset
-parameter to a _direct drawing command_ or the pname:vertexOffset member of
-the structure consumed by an _indirect drawing command_.
-
-.Valid Usage
-****
-  * [[VUID-{refpage}-BaseVertex-04184]]
-    The code:BaseVertex decoration must: be used only within the code:Vertex
-    {ExecutionModel}
-  * [[VUID-{refpage}-BaseVertex-04185]]
-    The variable decorated with code:BaseVertex must: be declared using the
-    code:Input {StorageClass}
-  * [[VUID-{refpage}-BaseVertex-04186]]
-    The variable decorated with code:BaseVertex must: be declared as a
-    scalar 32-bit integer value
-****
---
-endif::VK_VERSION_1_1,VK_KHR_shader_draw_parameters[]
-
-[open,refpage='ClipDistance',desc='Application-specified clip distances',type='builtins']
---
-:refpage: ClipDistance
-
-code:ClipDistance::
-
-Decorating a variable with the code:ClipDistance built-in decoration will
-make that variable contain the mechanism for controlling user clipping.
-code:ClipDistance is an array such that the i^th^ element of the array
-specifies the clip distance for plane i.
-A clip distance of 0 means the vertex is on the plane, a positive distance
-means the vertex is inside the clip half-space, and a negative distance
-means the vertex is outside the clip half-space.
-
-[NOTE]
-.Note
-====
-The array variable decorated with code:ClipDistance is explicitly sized by
-the shader.
-====
-
-[NOTE]
-.Note
-====
-In the last <<pipeline-graphics-subsets-pre-rasterization,pre-rasterization
-shader stage>>, these values will be linearly interpolated across the
-primitive and the portion of the primitive with interpolated distances less
-than 0 will be considered outside the clip volume.
-If code:ClipDistance is then used by a fragment shader, code:ClipDistance
-contains these linearly interpolated values.
-====
-
-.Valid Usage
-****
-  * [[VUID-{refpage}-ClipDistance-04187]]
-    The code:ClipDistance decoration must: be used only within the
-    code:MeshNV, code:Vertex, code:Fragment, code:TessellationControl,
-    code:TessellationEvaluation, or code:Geometry {ExecutionModel}
-  * [[VUID-{refpage}-ClipDistance-04188]]
-    The variable decorated with code:ClipDistance within the code:MeshNV or
-    code:Vertex {ExecutionModel} must: be declared using the code:Output
-    {StorageClass}
-  * [[VUID-{refpage}-ClipDistance-04189]]
-    The variable decorated with code:ClipDistance within the code:Fragment
-    {ExecutionModel} must: be declared using the code:Input {StorageClass}
-  * [[VUID-{refpage}-ClipDistance-04190]]
-    The variable decorated with code:ClipDistance within the
-    code:TessellationControl, code:TessellationEvaluation, or code:Geometry
-    {ExecutionModel} must: not be declared in a {StorageClass} other than
-    code:Input or code:Output
-  * [[VUID-{refpage}-ClipDistance-04191]]
-    The variable decorated with code:ClipDistance must: be declared as an
-    array of 32-bit floating-point values
-****
---
-
-ifdef::VK_NV_mesh_shader[]
-[[interfaces-builtin-variables-clipdistancepv]]
-[open,refpage='ClipDistancePerViewNV',desc='Application-specified clip distances per view',type='builtins']
---
-:refpage: ClipDistancePerViewNV
-
-code:ClipDistancePerViewNV::
-
-Decorating a variable with the code:ClipDistancePerViewNV built-in
-decoration will make that variable contain the per-view clip distances.
-The per-view clip distances have the same semantics as code:ClipDistance.
-
-.Valid Usage
-****
-  * [[VUID-{refpage}-ClipDistancePerViewNV-04192]]
-    The code:ClipDistancePerViewNV decoration must: be used only within the
-    code:MeshNV {ExecutionModel}
-  * [[VUID-{refpage}-ClipDistancePerViewNV-04193]]
-    The variable decorated with code:ClipDistancePerViewNV must: be declared
-    using the code:Output {StorageClass}
-  * [[VUID-{refpage}-ClipDistancePerViewNV-04194]]
-    The variable decorated with code:ClipDistancePerViewNV must: also be
-    decorated with the code:PerViewNV decoration
-  * [[VUID-{refpage}-ClipDistancePerViewNV-04195]]
-    The variable decorated with code:ClipDistancePerViewNV must: be declared
-    as a two-dimensional array of 32-bit floating-point values
-****
---
-endif::VK_NV_mesh_shader[]
-
-[open,refpage='CullDistance',desc='Application-specified cull distances',type='builtins']
---
-:refpage: CullDistance
-
-code:CullDistance::
-
-Decorating a variable with the code:CullDistance built-in decoration will
-make that variable contain the mechanism for controlling user culling.
-If any member of this array is assigned a negative value for all vertices
-belonging to a primitive, then the primitive is discarded before
-rasterization.
-
-[NOTE]
-.Note
-====
-In fragment shaders, the values of the code:CullDistance array are linearly
-interpolated across each primitive.
-====
-
-[NOTE]
-.Note
-====
-If code:CullDistance decorates an input variable, that variable will contain
-the corresponding value from the code:CullDistance decorated output variable
-from the previous shader stage.
-====
-
-.Valid Usage
-****
-  * [[VUID-{refpage}-CullDistance-04196]]
-    The code:CullDistance decoration must: be used only within the
-    code:MeshNV, code:Vertex, code:Fragment, code:TessellationControl,
-    code:TessellationEvaluation, or code:Geometry {ExecutionModel}
-  * [[VUID-{refpage}-CullDistance-04197]]
-    The variable decorated with code:CullDistance within the code:MeshNV or
-    code:Vertex {ExecutionModel} must: be declared using the code:Output
-    {StorageClass}
-  * [[VUID-{refpage}-CullDistance-04198]]
-    The variable decorated with code:CullDistance within the code:Fragment
-    {ExecutionModel} must: be declared using the code:Input {StorageClass}
-  * [[VUID-{refpage}-CullDistance-04199]]
-    The variable decorated with code:CullDistance within the
-    code:TessellationControl, code:TessellationEvaluation, or code:Geometry
-    {ExecutionModel} must: not be declared using a {StorageClass} other than
-    code:Input or code:Output
-  * [[VUID-{refpage}-CullDistance-04200]]
-    The variable decorated with code:CullDistance must: be declared as an
-    array of 32-bit floating-point values
-****
---
-
-ifdef::VK_NV_mesh_shader[]
-[[interfaces-builtin-variables-culldistancepv]]
-[open,refpage='CullDistancePerViewNV',desc='Application-specified cull distances per view',type='builtins']
---
-:refpage: CullDistancePerViewNV
-
-code:CullDistancePerViewNV::
-
-Decorating a variable with the code:CullDistancePerViewNV built-in
-decoration will make that variable contain the per-view cull distances.
-The per-view cull distances have the same semantics as code:CullDistance.
-
-.Valid Usage
-****
-  * [[VUID-{refpage}-CullDistancePerViewNV-04201]]
-    The code:CullDistancePerViewNV decoration must: be used only within the
-    code:MeshNV {ExecutionModel}
-  * [[VUID-{refpage}-CullDistancePerViewNV-04202]]
-    The variable decorated with code:CullDistancePerViewNV must: be declared
-    using the code:Output {StorageClass}
-  * [[VUID-{refpage}-CullDistancePerViewNV-04203]]
-    The variable decorated with code:CullDistancePerViewNV must: also be
-    decorated with the code:PerViewNV decoration
-  * [[VUID-{refpage}-CullDistancePerViewNV-04204]]
-    The variable decorated with code:CullDistancePerViewNV must: be declared
-    as a two-dimensional array of 32-bit floating-point values
-****
---
-endif::VK_NV_mesh_shader[]
-
-ifdef::VK_NV_ray_tracing_motion_blur[]
-[[interfaces-builtin-variables-currentraytime]]
-[open,refpage='CurrentRayTimeNV',desc='Time value of a ray intersection',type='builtins']
---
-:refpage: CurrentRayTimeNV
-
-code:CurrentRayTimeNV::
-
-A variable decorated with the code:CurrentRayTimeNV decoration contains the
-time value passed in to code:OpTraceRayMotionNV which called this shader.
-
-.Valid Usage
-****
-  * [[VUID-{refpage}-CurrentRayTimeNV-04942]]
-    The code:CurrentRayTimeNV decoration must: be used only within the
-    code:IntersectionKHR, code:AnyHitKHR, code:ClosestHitKHR, or
-    code:MissKHR {ExecutionModel}
-  * [[VUID-{refpage}-CurrentRayTimeNV-04943]]
-    The variable decorated with code:CurrentRayTimeNV must: be declared
-    using the code:Input {StorageClass}
-  * [[VUID-{refpage}-CurrentRayTimeNV-04944]]
-    The variable decorated with code:CurrentRayTimeNV must: be declared as a
-    scalar 32-bit floating-point value
-****
---
-endif::VK_NV_ray_tracing_motion_blur[]
-
-
-ifdef::VK_VERSION_1_1,VK_KHR_device_group[]
-[[interfaces-builtin-variables-deviceindex]]
-[open,refpage='DeviceIndex',desc='Index of the device executing the shader',type='builtins']
---
-:refpage: DeviceIndex
-
-code:DeviceIndex::
-
-The code:DeviceIndex decoration can: be applied to a shader input which will
-be filled with the device index of the physical device that is executing the
-current shader invocation.
-This value will be in the range latexmath:[[0,max(1,physicalDeviceCount))],
-where physicalDeviceCount is the pname:physicalDeviceCount member of
-slink:VkDeviceGroupDeviceCreateInfo.
-
-.Valid Usage
-****
-  * [[VUID-{refpage}-DeviceIndex-04205]]
-    The variable decorated with code:DeviceIndex must: be declared using the
-    code:Input {StorageClass}
-  * [[VUID-{refpage}-DeviceIndex-04206]]
-    The variable decorated with code:DeviceIndex must: be declared as a
-    scalar 32-bit integer value
-****
---
-endif::VK_VERSION_1_1,VK_KHR_device_group[]
-
-ifdef::VK_VERSION_1_1,VK_KHR_shader_draw_parameters[]
-[[interfaces-builtin-variables-drawindex]]
-[open,refpage='DrawIndex',desc='Index of the current draw',type='builtins']
---
-:refpage: DrawIndex
-
-code:DrawIndex::
-
-Decorating a variable with the code:DrawIndex built-in will make that
-variable contain the integer value corresponding to the zero-based index of
-the drawing command that invoked the current
-ifdef::VK_NV_mesh_shader[]
-task, mesh, or
-endif::VK_NV_mesh_shader[]
-vertex shader invocation.
-For _indirect drawing commands_, code:DrawIndex begins at zero and
-increments by one for each drawing command executed.
-The number of drawing commands is given by the pname:drawCount parameter.
-For _direct drawing commands_,
-ifdef::VK_EXT_multi_draw[]
-if flink:vkCmdDrawMultiEXT or flink:vkCmdDrawMultiIndexedEXT is used, this
-variable contains the integer value corresponding to the zero-based index of
-the draw command.
-Otherwise
-endif::VK_EXT_multi_draw[]
-code:DrawIndex is always zero.
-code:DrawIndex is dynamically uniform.
-
-ifdef::VK_NV_mesh_shader[]
-When task or mesh shaders are used, only the first active stage will have
-proper access to the variable.
-The value read by other stages is undefined:.
-endif::VK_NV_mesh_shader[]
-
-.Valid Usage
-****
-  * [[VUID-{refpage}-DrawIndex-04207]]
-    The code:DrawIndex decoration must: be used only within the code:Vertex,
-    code:MeshNV, or code:TaskNV {ExecutionModel}
-  * [[VUID-{refpage}-DrawIndex-04208]]
-    The variable decorated with code:DrawIndex must: be declared using the
-    code:Input {StorageClass}
-  * [[VUID-{refpage}-DrawIndex-04209]]
-    The variable decorated with code:DrawIndex must: be declared as a scalar
-    32-bit integer value
-****
---
-endif::VK_VERSION_1_1,VK_KHR_shader_draw_parameters[]
-
-[open,refpage='FragCoord',desc='Screen-space coordinate of the fragment center',type='builtins']
---
-:refpage: FragCoord
-
-code:FragCoord::
-
-Decorating a variable with the code:FragCoord built-in decoration will make
-that variable contain the framebuffer coordinate
-latexmath:[(x,y,z,\frac{1}{w})] of the fragment being processed.
-The [eq]#(x,y)# coordinate [eq]#(0,0)# is the upper left corner of the upper
-left pixel in the framebuffer.
-+
-When <<primsrast-sampleshading,Sample Shading>> is enabled, the [eq]#x# and
-[eq]#y# components of code:FragCoord reflect the location of one of the
-samples corresponding to the shader invocation.
-+
-Otherwise, the [eq]#x# and [eq]#y# components of code:FragCoord reflect the
-location of the center of the fragment.
-+
-The [eq]#z# component of code:FragCoord is the interpolated depth value of
-the primitive.
-+
-The [eq]#w# component is the interpolated latexmath:[\frac{1}{w}].
-+
-The code:Centroid interpolation decoration is ignored, but allowed, on
-code:FragCoord.
-
-.Valid Usage
-****
-  * [[VUID-{refpage}-FragCoord-04210]]
-    The code:FragCoord decoration must: be used only within the
-    code:Fragment {ExecutionModel}
-  * [[VUID-{refpage}-FragCoord-04211]]
-    The variable decorated with code:FragCoord must: be declared using the
-    code:Input {StorageClass}
-  * [[VUID-{refpage}-FragCoord-04212]]
-    The variable decorated with code:FragCoord must: be declared as a
-    four-component vector of 32-bit floating-point values
-****
---
-
-[[interfaces-builtin-variables-fragdepth]]
-[open,refpage='FragDepth',desc='Application-specified depth for depth testing',type='builtins']
---
-:refpage: FragDepth
-
-code:FragDepth::
-
-To have a shader supply a fragment-depth value, the shader must: declare the
-code:DepthReplacing execution mode.
-Such a shader's fragment-depth value will come from the variable decorated
-with the code:FragDepth built-in decoration.
-+
-This value will be used for any subsequent depth testing performed by the
-implementation or writes to the depth attachment.
-See <<fragops-shader-depthreplacement, fragment shader depth replacement>>
-for details.
-
-.Valid Usage
-****
-  * [[VUID-{refpage}-FragDepth-04213]]
-    The code:FragDepth decoration must: be used only within the
-    code:Fragment {ExecutionModel}
-  * [[VUID-{refpage}-FragDepth-04214]]
-    The variable decorated with code:FragDepth must: be declared using the
-    code:Output {StorageClass}
-  * [[VUID-{refpage}-FragDepth-04215]]
-    The variable decorated with code:FragDepth must: be declared as a scalar
-    32-bit floating-point value
-  * [[VUID-{refpage}-FragDepth-04216]]
-    If the shader dynamically writes to the variable decorated with
-    code:FragDepth, the code:DepthReplacing {ExecutionMode} must: be
-    declared
-****
---
-
-ifdef::VK_EXT_fragment_density_map[]
-[[interfaces-builtin-variables-fraginvocationcount]]
-[open,refpage='FragInvocationCountEXT',desc='Number of fragment shader invocations for a fragment',type='builtins']
---
-:refpage: FragInvocationCountEXT
-
-code:FragInvocationCountEXT::
-
-Decorating a variable with the code:FragInvocationCountEXT built-in
-decoration will make that variable contain the maximum number of fragment
-shader invocations for the fragment, as determined by
-pname:minSampleShading.
-+
-If <<primsrast-sampleshading,Sample Shading>> is not enabled,
-code:FragInvocationCountEXT will be filled with a value of 1.
-
-.Valid Usage
-****
-  * [[VUID-{refpage}-FragInvocationCountEXT-04217]]
-    The code:FragInvocationCountEXT decoration must: be used only within the
-    code:Fragment {ExecutionModel}
-  * [[VUID-{refpage}-FragInvocationCountEXT-04218]]
-    The variable decorated with code:FragInvocationCountEXT must: be
-    declared using the code:Input {StorageClass}
-  * [[VUID-{refpage}-FragInvocationCountEXT-04219]]
-    The variable decorated with code:FragInvocationCountEXT must: be
-    declared as a scalar 32-bit integer value
-****
---
-endif::VK_EXT_fragment_density_map[]
-
-ifdef::VK_EXT_fragment_density_map[]
-[[interfaces-builtin-variables-fragsize]]
-[open,refpage='FragSizeEXT',desc='Size of the screen-space area covered by the fragment',type='builtins']
---
-:refpage: FragSizeEXT
-
-code:FragSizeEXT::
-
-Decorating a variable with the code:FragSizeEXT built-in decoration will
-make that variable contain the dimensions in pixels of the
-<<glossary-fragment-area,area>> that the fragment covers for that
-invocation.
-+
-If fragment density map is not enabled, code:FragSizeEXT will be filled with
-a value of [eq]#(1,1)#.
-
-.Valid Usage
-****
-  * [[VUID-{refpage}-FragSizeEXT-04220]]
-    The code:FragSizeEXT decoration must: be used only within the
-    code:Fragment {ExecutionModel}
-  * [[VUID-{refpage}-FragSizeEXT-04221]]
-    The variable decorated with code:FragSizeEXT must: be declared using the
-    code:Input {StorageClass}
-  * [[VUID-{refpage}-FragSizeEXT-04222]]
-    The variable decorated with code:FragSizeEXT must: be declared as a
-    two-component vector of 32-bit integer values
-****
---
-endif::VK_EXT_fragment_density_map[]
-
-ifdef::VK_EXT_shader_stencil_export[]
-[[interfaces-builtin-variables-fragstencilref]]
-[open,refpage='FragStencilRefEXT',desc='Application-specified stencil reference value used in stencil tests',type='builtins']
---
-:refpage: FragStencilRefEXT
-
-code:FragStencilRefEXT::
-
-Decorating a variable with the code:FragStencilRefEXT built-in decoration
-will make that variable contain the new stencil reference value for all
-samples covered by the fragment.
-This value will be used as the stencil reference value used in stencil
-testing.
-+
-To write to code:FragStencilRefEXT, a shader must: declare the
-code:StencilRefReplacingEXT execution mode.
-If a shader declares the code:StencilRefReplacingEXT execution mode and
-there is an execution path through the shader that does not set
-code:FragStencilRefEXT, then the fragment's stencil reference value is
-undefined: for executions of the shader that take that path.
-+
-Only the least significant *s* bits of the integer value of the variable
-decorated with code:FragStencilRefEXT are considered for stencil testing,
-where *s* is the number of bits in the stencil framebuffer attachment, and
-higher order bits are discarded.
-+
-See <<fragops-shader-stencilrefreplacement, fragment shader stencil
-reference replacement>> for more details.
-
-.Valid Usage
-****
-  * [[VUID-{refpage}-FragStencilRefEXT-04223]]
-    The code:FragStencilRefEXT decoration must: be used only within the
-    code:Fragment {ExecutionModel}
-  * [[VUID-{refpage}-FragStencilRefEXT-04224]]
-    The variable decorated with code:FragStencilRefEXT must: be declared
-    using the code:Output {StorageClass}
-  * [[VUID-{refpage}-FragStencilRefEXT-04225]]
-    The variable decorated with code:FragStencilRefEXT must: be declared as
-    a scalar integer value
-****
---
-endif::VK_EXT_shader_stencil_export[]
-
-ifdef::VK_NV_shading_rate_image[]
-[open,refpage='FragmentSizeNV',desc='Size of the screen-space area covered by the fragment',type='builtins']
---
-:refpage: FragmentSizeNV
-
-code:FragmentSizeNV::
-
-Decorating a variable with the code:FragmentSizeNV built-in decoration will
-make that variable contain the width and height of the fragment.
-
-.Valid Usage
-****
-  * [[VUID-{refpage}-FragmentSizeNV-04226]]
-    The code:FragmentSizeNV decoration must: be used only within the
-    code:Fragment {ExecutionModel}
-  * [[VUID-{refpage}-FragmentSizeNV-04227]]
-    The variable decorated with code:FragmentSizeNV must: be declared using
-    the code:Input {StorageClass}
-  * [[VUID-{refpage}-FragmentSizeNV-04228]]
-    The variable decorated with code:FragmentSizeNV must: be declared as a
-    two-component vector of 32-bit integer values
-****
---
-endif::VK_NV_shading_rate_image[]
-
-
-[open,refpage='FrontFacing',desc='Front face determination of a fragment',type='builtins']
---
-:refpage: FrontFacing
-
-code:FrontFacing::
-
-Decorating a variable with the code:FrontFacing built-in decoration will
-make that variable contain whether the fragment is front or back facing.
-This variable is non-zero if the current fragment is considered to be part
-of a <<primsrast-polygons-basic,front-facing>> polygon primitive or of a
-non-polygon primitive and is zero if the fragment is considered to be part
-of a back-facing polygon primitive.
-
-.Valid Usage
-****
-  * [[VUID-{refpage}-FrontFacing-04229]]
-    The code:FrontFacing decoration must: be used only within the
-    code:Fragment {ExecutionModel}
-  * [[VUID-{refpage}-FrontFacing-04230]]
-    The variable decorated with code:FrontFacing must: be declared using the
-    code:Input {StorageClass}
-  * [[VUID-{refpage}-FrontFacing-04231]]
-    The variable decorated with code:FrontFacing must: be declared as a
-    boolean value
-****
---
-
-ifdef::VK_EXT_conservative_rasterization[]
-[open,refpage='FullyCoveredEXT',desc='Indication of whether a fragment is fully covered',type='builtins']
---
-:refpage: FullyCoveredEXT
-
-code:FullyCoveredEXT::
-
-Decorating a variable with the code:FullyCoveredEXT built-in decoration will
-make that variable indicate whether the <<glossary-fragment-area,fragment
-area>> is fully covered by the generating primitive.
-This variable is non-zero if conservative rasterization is enabled and the
-current fragment area is fully covered by the generating primitive, and is
-zero if the fragment is not covered or partially covered, or conservative
-rasterization is disabled.
-
-.Valid Usage
-****
-  * [[VUID-{refpage}-FullyCoveredEXT-04232]]
-    The code:FullyCoveredEXT decoration must: be used only within the
-    code:Fragment {ExecutionModel}
-  * [[VUID-{refpage}-FullyCoveredEXT-04233]]
-    The variable decorated with code:FullyCoveredEXT must: be declared using
-    the code:Input {StorageClass}
-  * [[VUID-{refpage}-FullyCoveredEXT-04234]]
-    The variable decorated with code:FullyCoveredEXT must: be declared as a
-    boolean value
-ifdef::VK_EXT_post_depth_coverage[]
-  * [[VUID-{refpage}-conservativeRasterizationPostDepthCoverage-04235]]
-    If
-    sname:VkPhysicalDeviceConservativeRasterizationPropertiesEXT::pname:conservativeRasterizationPostDepthCoverage
-    is not supported the code:PostDepthCoverage {ExecutionMode} must: not be
-    declared, when a variable with the code:FullyCoveredEXT decoration is
-    declared
-endif::VK_EXT_post_depth_coverage[]
-****
---
-endif::VK_EXT_conservative_rasterization[]
-
-[open,refpage='GlobalInvocationId',desc='Global invocation ID',type='builtins']
---
-:refpage: GlobalInvocationId
-
-code:GlobalInvocationId::
-
-Decorating a variable with the code:GlobalInvocationId built-in decoration
-will make that variable contain the location of the current invocation
-within the global workgroup.
-Each component is equal to the index of the local workgroup multiplied by
-the size of the local workgroup plus code:LocalInvocationId.
-
-.Valid Usage
-****
-  * [[VUID-{refpage}-GlobalInvocationId-04236]]
-    The code:GlobalInvocationId decoration must: be used only within the
-    code:GLCompute, code:MeshNV, or code:TaskNV {ExecutionModel}
-  * [[VUID-{refpage}-GlobalInvocationId-04237]]
-    The variable decorated with code:GlobalInvocationId must: be declared
-    using the code:Input {StorageClass}
-  * [[VUID-{refpage}-GlobalInvocationId-04238]]
-    The variable decorated with code:GlobalInvocationId must: be declared as
-    a three-component vector of 32-bit integer values
-****
---
-
-[open,refpage='HelperInvocation',desc='Indication of whether a fragment shader is a helper invocation',type='builtins']
---
-:refpage: HelperInvocation
-
-code:HelperInvocation::
-
-Decorating a variable with the code:HelperInvocation built-in decoration
-will make that variable contain whether the current invocation is a helper
-invocation.
-This variable is non-zero if the current fragment being shaded is a helper
-invocation and zero otherwise.
-A helper invocation is an invocation of the shader that is produced to
-satisfy internal requirements such as the generation of derivatives.
-
-[NOTE]
-.Note
-====
-It is very likely that a helper invocation will have a value of
-code:SampleMask fragment shader input value that is zero.
-====
-
-.Valid Usage
-****
-  * [[VUID-{refpage}-HelperInvocation-04239]]
-    The code:HelperInvocation decoration must: be used only within the
-    code:Fragment {ExecutionModel}
-  * [[VUID-{refpage}-HelperInvocation-04240]]
-    The variable decorated with code:HelperInvocation must: be declared
-    using the code:Input {StorageClass}
-  * [[VUID-{refpage}-HelperInvocation-04241]]
-    The variable decorated with code:HelperInvocation must: be declared as a
-    boolean value
-****
---
-
-ifdef::VK_NV_ray_tracing,VK_KHR_ray_tracing_pipeline[]
-[[interfaces-builtin-variables-hitkind]]
-[open,refpage='HitKindKHR',desc='Kind of hit that triggered an any-hit or closest hit ray shader',type='builtins']
---
-:refpage: HitKindKHR
-
-code:HitKindKHR::
-
-A variable decorated with the code:HitKindKHR decoration will describe the
-intersection that triggered the execution of the current shader.
-The values are determined by the intersection shader.
-For user-defined intersection shaders this is the value that was passed to
-the "`Hit Kind`" operand of code:OpReportIntersectionKHR.
-For triangle intersection candidates, this will be one of
-code:HitKindFrontFacingTriangleKHR or code:HitKindBackFacingTriangleKHR.
-
-.Valid Usage
-****
-  * [[VUID-{refpage}-HitKindKHR-04242]]
-    The code:HitKindKHR decoration must: be used only within the
-    code:AnyHitKHR or code:ClosestHitKHR {ExecutionModel}
-  * [[VUID-{refpage}-HitKindKHR-04243]]
-    The variable decorated with code:HitKindKHR must: be declared using the
-    code:Input {StorageClass}
-  * [[VUID-{refpage}-HitKindKHR-04244]]
-    The variable decorated with code:HitKindKHR must: be declared as a
-    scalar 32-bit integer value
-****
---
-
-ifdef::VK_NV_ray_tracing[]
-[[interfaces-builtin-variables-hitt]]
-[open,refpage='HitTNV',desc='T value of a ray intersection',type='builtins']
---
-:refpage: HitTNV
-
-code:HitTNV::
-
-A variable decorated with the code:HitTNV decoration is equivalent to a
-variable decorated with the code:RayTmaxKHR decoration.
-
-.Valid Usage
-****
-  * [[VUID-{refpage}-HitTNV-04245]]
-    The code:HitTNV decoration must: be used only within the code:AnyHitNV
-    or code:ClosestHitNV {ExecutionModel}
-  * [[VUID-{refpage}-HitTNV-04246]]
-    The variable decorated with code:HitTNV must: be declared using the
-    code:Input {StorageClass}
-  * [[VUID-{refpage}-HitTNV-04247]]
-    The variable decorated with code:HitTNV must: be declared as a scalar
-    32-bit floating-point value
-****
---
-endif::VK_NV_ray_tracing[]
-
-[[interfaces-builtin-variables-incomingrayflags]]
-[open,refpage='IncomingRayFlagsKHR',desc='Flags used to trace a ray',type='builtins']
---
-:refpage: IncomingRayFlagsKHR
-
-code:IncomingRayFlagsKHR::
-
-A variable with the code:IncomingRayFlagsKHR decoration will contain the ray
-flags passed in to the trace call that invoked this particular shader.
-Setting pipeline flags on the raytracing pipeline must: not cause any
-corresponding flags to be set in variables with this decoration.
-
-.Valid Usage
-****
-  * [[VUID-{refpage}-IncomingRayFlagsKHR-04248]]
-    The code:IncomingRayFlagsKHR decoration must: be used only within the
-    code:IntersectionKHR, code:AnyHitKHR, code:ClosestHitKHR, or
-    code:MissKHR {ExecutionModel}
-  * [[VUID-{refpage}-IncomingRayFlagsKHR-04249]]
-    The variable decorated with code:IncomingRayFlagsKHR must: be declared
-    using the code:Input {StorageClass}
-  * [[VUID-{refpage}-IncomingRayFlagsKHR-04250]]
-    The variable decorated with code:IncomingRayFlagsKHR must: be declared
-    as a scalar 32-bit integer value
-****
---
-
-[[interfaces-builtin-variables-instancecustomindex]]
-[open,refpage='InstanceCustomIndexKHR',desc='Custom index associated with an intersected instance',type='builtins']
---
-:refpage: InstanceCustomIndexKHR
-
-code:InstanceCustomIndexKHR::
-
-A variable decorated with the code:InstanceCustomIndexKHR decoration will
-contain the application-defined value of the instance that intersects the
-current ray.
-This variable contains the value that was specified in
-slink:VkAccelerationStructureInstanceKHR::pname:instanceCustomIndex for the
-current acceleration structure instance in the lower 24 bits and the upper 8
-bits will be zero.
-
-.Valid Usage
-****
-  * [[VUID-{refpage}-InstanceCustomIndexKHR-04251]]
-    The code:InstanceCustomIndexKHR decoration must: be used only within the
-    code:IntersectionKHR, code:AnyHitKHR, or code:ClosestHitKHR
-    {ExecutionModel}
-  * [[VUID-{refpage}-InstanceCustomIndexKHR-04252]]
-    The variable decorated with code:InstanceCustomIndexKHR must: be
-    declared using the code:Input {StorageClass}
-  * [[VUID-{refpage}-InstanceCustomIndexKHR-04253]]
-    The variable decorated with code:InstanceCustomIndexKHR must: be
-    declared as a scalar 32-bit integer value
-****
---
-
-[[interfaces-builtin-variables-instanceid]]
-[open,refpage='InstanceId',desc='Id associated with an intersected instance',type='builtins']
---
-:refpage: InstanceId
-
-code:InstanceId::
-
-Decorating a variable in an intersection, any-hit, or closest hit shader
-with the code:InstanceId decoration will make that variable contain the
-index of the instance that intersects the current ray.
-
-.Valid Usage
-****
-  * [[VUID-{refpage}-InstanceId-04254]]
-    The code:InstanceId decoration must: be used only within the
-    code:IntersectionKHR, code:AnyHitKHR, or code:ClosestHitKHR
-    {ExecutionModel}
-  * [[VUID-{refpage}-InstanceId-04255]]
-    The variable decorated with code:InstanceId must: be declared using the
-    code:Input {StorageClass}
-  * [[VUID-{refpage}-InstanceId-04256]]
-    The variable decorated with code:InstanceId must: be declared as a
-    scalar 32-bit integer value
-****
---
-endif::VK_NV_ray_tracing,VK_KHR_ray_tracing_pipeline[]
-
-[open,refpage='InvocationId',desc='Invocation ID in a geometry or tessellation control shader',type='builtins']
---
-:refpage: InvocationId
-
-code:InvocationId::
-
-Decorating a variable with the code:InvocationId built-in decoration will
-make that variable contain the index of the current shader invocation in a
-geometry shader, or the index of the output patch vertex in a tessellation
-control shader.
-+
-In a geometry shader, the index of the current shader invocation ranges from
-zero to the number of <<geometry-invocations,instances>> declared in the
-shader minus one.
-If the instance count of the geometry shader is one or is not specified,
-then code:InvocationId will be zero.
-
-.Valid Usage
-****
-  * [[VUID-{refpage}-InvocationId-04257]]
-    The code:InvocationId decoration must: be used only within the
-    code:TessellationControl or code:Geometry {ExecutionModel}
-  * [[VUID-{refpage}-InvocationId-04258]]
-    The variable decorated with code:InvocationId must: be declared using
-    the code:Input {StorageClass}
-  * [[VUID-{refpage}-InvocationId-04259]]
-    The variable decorated with code:InvocationId must: be declared as a
-    scalar 32-bit integer value
-****
---
-
-ifdef::VK_NV_shading_rate_image[]
-[open,refpage='InvocationsPerPixelNV',desc='Number of fragment shader invocations for the current pixel',type='builtins']
---
-:refpage: InvocationsPerPixelNV
-
-code:InvocationsPerPixelNV::
-
-Decorating a variable with the code:InvocationsPerPixelNV built-in
-decoration will make that variable contain the maximum number of fragment
-shader invocations per pixel, as derived from the effective shading rate for
-the fragment.
-If a primitive does not fully cover a pixel, the number of fragment shader
-invocations for that pixel may: be less than the value of
-code:InvocationsPerPixelNV.
-If the shading rate indicates a fragment covering multiple pixels, then
-code:InvocationsPerPixelNV will be one.
-
-.Valid Usage
-****
-  * [[VUID-{refpage}-InvocationsPerPixelNV-04260]]
-    The code:InvocationsPerPixelNV decoration must: be used only within the
-    code:Fragment {ExecutionModel}
-  * [[VUID-{refpage}-InvocationsPerPixelNV-04261]]
-    The variable decorated with code:InvocationsPerPixelNV must: be declared
-    using the code:Input {StorageClass}
-  * [[VUID-{refpage}-InvocationsPerPixelNV-04262]]
-    The variable decorated with code:InvocationsPerPixelNV must: be declared
-    as a scalar 32-bit integer value
-****
---
-endif::VK_NV_shading_rate_image[]
-
-[open,refpage='InstanceIndex',desc='Index of an instance',type='builtins']
---
-:refpage: InstanceIndex
-
-code:InstanceIndex::
-
-Decorating a variable in a vertex shader with the code:InstanceIndex
-built-in decoration will make that variable contain the index of the
-instance that is being processed by the current vertex shader invocation.
-code:InstanceIndex begins at the pname:firstInstance parameter to
-flink:vkCmdDraw or flink:vkCmdDrawIndexed or at the pname:firstInstance
-member of a structure consumed by flink:vkCmdDrawIndirect or
-flink:vkCmdDrawIndexedIndirect.
-
-.Valid Usage
-****
-  * [[VUID-{refpage}-InstanceIndex-04263]]
-    The code:InstanceIndex decoration must: be used only within the
-    code:Vertex {ExecutionModel}
-  * [[VUID-{refpage}-InstanceIndex-04264]]
-    The variable decorated with code:InstanceIndex must: be declared using
-    the code:Input {StorageClass}
-  * [[VUID-{refpage}-InstanceIndex-04265]]
-    The variable decorated with code:InstanceIndex must: be declared as a
-    scalar 32-bit integer value
-****
---
-
-ifdef::VK_NV_ray_tracing,VK_KHR_ray_tracing_pipeline[]
-[[interfaces-builtin-variables-launchid]]
-[open,refpage='LaunchIdKHR',desc='Launch Id for ray shaders',type='builtins']
---
-:refpage: LaunchIdKHR
-
-code:LaunchIdKHR::
-
-A variable decorated with the code:LaunchIdKHR decoration will specify the
-index of the work item being processed.
-One work item is generated for each of the pname:width {times} pname:height
-{times} pname:depth items dispatched by a flink:vkCmdTraceRaysKHR command.
-All shader invocations inherit the same value for variables decorated with
-code:LaunchIdKHR.
-
-.Valid Usage
-****
-  * [[VUID-{refpage}-LaunchIdKHR-04266]]
-    The code:LaunchIdKHR decoration must: be used only within the
-    code:RayGenerationKHR, code:IntersectionKHR, code:AnyHitKHR,
-    code:ClosestHitKHR, code:MissKHR, or code:CallableKHR {ExecutionModel}
-  * [[VUID-{refpage}-LaunchIdKHR-04267]]
-    The variable decorated with code:LaunchIdKHR must: be declared using the
-    code:Input {StorageClass}
-  * [[VUID-{refpage}-LaunchIdKHR-04268]]
-    The variable decorated with code:LaunchIdKHR must: be declared as a
-    three-component vector of 32-bit integer values
-****
---
-
-[[interfaces-builtin-variables-launchsize]]
-[open,refpage='LaunchSizeKHR',desc='Launch dimensions for ray shaders',type='builtins']
---
-:refpage: LaunchSizeKHR
-
-code:LaunchSizeKHR::
-
-A variable decorated with the code:LaunchSizeKHR decoration will contain the
-pname:width, pname:height, and pname:depth dimensions passed to the
-flink:vkCmdTraceRaysKHR command that initiated this shader execution.
-The pname:width is in the first component, the pname:height is in the second
-component, and the pname:depth is in the third component.
-
-.Valid Usage
-****
-  * [[VUID-{refpage}-LaunchSizeKHR-04269]]
-    The code:LaunchSizeKHR decoration must: be used only within the
-    code:RayGenerationKHR, code:IntersectionKHR, code:AnyHitKHR,
-    code:ClosestHitKHR, code:MissKHR, or code:CallableKHR {ExecutionModel}
-  * [[VUID-{refpage}-LaunchSizeKHR-04270]]
-    The variable decorated with code:LaunchSizeKHR must: be declared using
-    the code:Input {StorageClass}
-  * [[VUID-{refpage}-LaunchSizeKHR-04271]]
-    The variable decorated with code:LaunchSizeKHR must: be declared as a
-    three-component vector of 32-bit integer values
-****
---
-endif::VK_NV_ray_tracing,VK_KHR_ray_tracing_pipeline[]
-
-[[interfaces-builtin-variables-layer]]
-[open,refpage='Layer',desc='Layer index for layered rendering',type='builtins']
---
-:refpage: Layer
-
-code:Layer::
-
-Decorating a variable with the code:Layer built-in decoration will make that
-variable contain the select layer of a multi-layer framebuffer attachment.
-+
-In a
-ifdef::VK_VERSION_1_2,VK_EXT_shader_viewport_index_layer,VK_NV_viewport_array2[]
-ifdef::VK_NV_mesh_shader[]
-mesh,
-endif::VK_NV_mesh_shader[]
-vertex, tessellation evaluation, or
-endif::VK_VERSION_1_2,VK_EXT_shader_viewport_index_layer,VK_NV_viewport_array2[]
-geometry shader, any variable decorated with code:Layer can be written with
-the framebuffer layer index to which the primitive produced by that shader
-will be directed.
-ifdef::VK_VERSION_1_2,VK_EXT_shader_viewport_index_layer,VK_NV_viewport_array2[]
-+
-The last active
-<<pipeline-graphics-subsets-pre-rasterization,pre-rasterization shader
-stage>> (in pipeline order) controls the code:Layer that is used.
-Outputs in previous shader stages are not used, even if the last stage fails
-to write the code:Layer.
-endif::VK_VERSION_1_2,VK_EXT_shader_viewport_index_layer,VK_NV_viewport_array2[]
-+
-If the last active
-<<pipeline-graphics-subsets-pre-rasterization,pre-rasterization shader
-stage>> shader entry point's interface does not include a variable decorated
-with code:Layer, then the first layer is used.
-If a <<pipeline-graphics-subsets-pre-rasterization,pre-rasterization shader
-stage>> shader entry point's interface includes a variable decorated with
-code:Layer, it must: write the same value to code:Layer for all output
-vertices of a given primitive.
-If the code:Layer value is less than 0 or greater than or equal to the
-number of layers in the framebuffer, then primitives may: still be
-rasterized, fragment shaders may: be executed, and the framebuffer values
-for all layers are undefined:.
-+
-ifdef::VK_NV_viewport_array2[]
-If a variable with the code:Layer decoration is also decorated with
-code:ViewportRelativeNV, then the code:ViewportIndex is added to the layer
-that is used for rendering and that is made available in the fragment
-shader.
-If the shader writes to a variable decorated code:ViewportMaskNV, then the
-layer selected has a different value for each viewport a primitive is
-rendered to.
-endif::VK_NV_viewport_array2[]
-+
-In a fragment shader, a variable decorated with code:Layer contains the
-layer index of the primitive that the fragment invocation belongs to.
-
-.Valid Usage
-****
-  * [[VUID-{refpage}-Layer-04272]]
-    The code:Layer decoration must: be used only within the code:MeshNV,
-    code:Vertex, code:TessellationEvaluation, code:Geometry, or
-    code:Fragment {ExecutionModel}
-ifdef::VK_VERSION_1_2[]
-  * [[VUID-{refpage}-Layer-04273]]
-    If the <<features-shaderOutputLayer,shaderOutputLayer>> feature is not
-    enabled then the code:Layer decoration must: be used only within the
-    code:Geometry or code:Fragment {ExecutionModel}
-endif::VK_VERSION_1_2[]
-  * [[VUID-{refpage}-Layer-04274]]
-    The variable decorated with code:Layer within the code:MeshNV,
-    code:Vertex, code:TessellationEvaluation, or code:Geometry
-    {ExecutionModel} must: be declared using the code:Output {StorageClass}
-  * [[VUID-{refpage}-Layer-04275]]
-    The variable decorated with code:Layer within the code:Fragment
-    {ExecutionModel} must: be declared using the code:Input {StorageClass}
-  * [[VUID-{refpage}-Layer-04276]]
-    The variable decorated with code:Layer must: be declared as a scalar
-    32-bit integer value
-****
---
-
-ifdef::VK_NV_mesh_shader[]
-[[interfaces-builtin-variables-layerpv]]
-[open,refpage='LayerPerViewNV',desc='Layer index per view for layered rendering',type='builtins']
---
-:refpage: LayerPerViewNV
-
-code:LayerPerViewNV::
-
-Decorating a variable with the code:LayerPerViewNV built-in decoration will
-make that variable contain the per-view layer information.
-The per-view layer has the same semantics as code:Layer, for each view.
-
-.Valid Usage
-****
-  * [[VUID-{refpage}-LayerPerViewNV-04277]]
-    The code:LayerPerViewNV decoration must: be used only within the
-    code:MeshNV {ExecutionModel}
-  * [[VUID-{refpage}-LayerPerViewNV-04278]]
-    The variable decorated with code:LayerPerViewNV must: be declared using
-    the code:Output {StorageClass}
-  * [[VUID-{refpage}-LayerPerViewNV-04279]]
-    The variable decorated with code:LayerPerViewNV must: also be decorated
-    with the code:PerViewNV decoration
-  * [[VUID-{refpage}-LayerPerViewNV-04280]]
-    The variable decorated with code:LayerPerViewNV must: be declared as an
-    array of scalar 32-bit integer values
-****
---
-endif::VK_NV_mesh_shader[]
-
-[open,refpage='LocalInvocationId',desc='Local invocation ID',type='builtins']
---
-:refpage: LocalInvocationId
-
-code:LocalInvocationId::
-
-Decorating a variable with the code:LocalInvocationId built-in decoration
-will make that variable contain the location of the current
-ifdef::VK_NV_mesh_shader[]
-task, mesh, or
-endif::VK_NV_mesh_shader[]
-compute shader invocation within the local workgroup.
-Each component ranges from zero through to the size of the workgroup in that
-dimension minus one.
-
-[NOTE]
-.Note
-====
-If the size of the workgroup in a particular dimension is one, then the
-code:LocalInvocationId in that dimension will be zero.
-If the workgroup is effectively two-dimensional, then
-code:LocalInvocationId.z will be zero.
-If the workgroup is effectively one-dimensional, then both
-code:LocalInvocationId.y and code:LocalInvocationId.z will be zero.
-====
-
-.Valid Usage
-****
-  * [[VUID-{refpage}-LocalInvocationId-04281]]
-    The code:LocalInvocationId decoration must: be used only within the
-    code:GLCompute, code:MeshNV, or code:TaskNV {ExecutionModel}
-  * [[VUID-{refpage}-LocalInvocationId-04282]]
-    The variable decorated with code:LocalInvocationId must: be declared
-    using the code:Input {StorageClass}
-  * [[VUID-{refpage}-LocalInvocationId-04283]]
-    The variable decorated with code:LocalInvocationId must: be declared as
-    a three-component vector of 32-bit integer values
-****
---
-
-[open,refpage='LocalInvocationIndex',desc='Linear local invocation index',type='builtins']
---
-:refpage: LocalInvocationIndex
-
-code:LocalInvocationIndex::
-
-Decorating a variable with the code:LocalInvocationIndex built-in decoration
-will make that variable contain a one-dimensional representation of
-code:LocalInvocationId.
-This is computed as:
-+
-[source,c++]
-----
-LocalInvocationIndex =
-    LocalInvocationId.z * WorkgroupSize.x * WorkgroupSize.y +
-    LocalInvocationId.y * WorkgroupSize.x +
-    LocalInvocationId.x;
-----
-
-.Valid Usage
-****
-  * [[VUID-{refpage}-LocalInvocationIndex-04284]]
-    The code:LocalInvocationIndex decoration must: be used only within the
-    code:GLCompute, code:MeshNV, or code:TaskNV {ExecutionModel}
-  * [[VUID-{refpage}-LocalInvocationIndex-04285]]
-    The variable decorated with code:LocalInvocationIndex must: be declared
-    using the code:Input {StorageClass}
-  * [[VUID-{refpage}-LocalInvocationIndex-04286]]
-    The variable decorated with code:LocalInvocationIndex must: be declared
-    as a scalar 32-bit integer value
-****
---
-
-ifdef::VK_NV_mesh_shader[]
-[[interfaces-builtin-variables-meshviewcount]]
-[open,refpage='MeshViewCountNV',desc='Number of views processed by a mesh or task shader',type='builtins']
---
-:refpage: MeshViewCountNV
-
-code:MeshViewCountNV::
-
-Decorating a variable with the code:MeshViewCountNV built-in decoration will
-make that variable contain the number of views processed by the current mesh
-or task shader invocations.
-
-.Valid Usage
-****
-  * [[VUID-{refpage}-MeshViewCountNV-04287]]
-    The code:MeshViewCountNV decoration must: be used only within the
-    code:MeshNV or code:TaskNV {ExecutionModel}
-  * [[VUID-{refpage}-MeshViewCountNV-04288]]
-    The variable decorated with code:MeshViewCountNV must: be declared using
-    the code:Input {StorageClass}
-  * [[VUID-{refpage}-MeshViewCountNV-04289]]
-    The variable decorated with code:MeshViewCountNV must: be declared as a
-    scalar 32-bit integer value
-****
---
-
-[[interfaces-builtin-variables-meshviewindices]]
-[open,refpage='MeshViewIndicesNV',desc='Indices of views processed by a mesh or task shader',type='builtins']
---
-:refpage: MeshViewIndicesNV
-
-code:MeshViewIndicesNV::
-
-Decorating a variable with the code:MeshViewIndicesNV built-in decoration
-will make that variable contain the mesh view indices.
-The mesh view indices is an array of values where each element holds the
-view number of one of the views being processed by the current mesh or task
-shader invocations.
-The values of array elements with indices greater than or equal to
-code:MeshViewCountNV are undefined:.
-If the value of code:MeshViewIndicesNV[i] is [eq]#j#, then any outputs
-decorated with code:PerViewNV will take on the value of array element
-[eq]#i# when processing primitives for view index [eq]#j#.
-
-.Valid Usage
-****
-  * [[VUID-{refpage}-MeshViewIndicesNV-04290]]
-    The code:MeshViewIndicesNV decoration must: be used only within the
-    code:MeshNV or code:TaskNV {ExecutionModel}
-  * [[VUID-{refpage}-MeshViewIndicesNV-04291]]
-    The variable decorated with code:MeshViewIndicesNV must: be declared
-    using the code:Input {StorageClass}
-  * [[VUID-{refpage}-MeshViewIndicesNV-04292]]
-    The variable decorated with code:MeshViewIndicesNV must: be declared as
-    an array of scalar 32-bit integer values
-****
---
-endif::VK_NV_mesh_shader[]
-
-ifdef::VK_VERSION_1_1[]
-[open,refpage='NumSubgroups',desc='Number of subgroups in a workgroup',type='builtins']
---
-:refpage: NumSubgroups
-
-code:NumSubgroups::
-
-Decorating a variable with the code:NumSubgroups built-in decoration will
-make that variable contain the number of subgroups in the local workgroup.
-
-.Valid Usage
-****
-  * [[VUID-{refpage}-NumSubgroups-04293]]
-    The code:NumSubgroups decoration must: be used only within the
-    code:GLCompute, code:MeshNV, or code:TaskNV {ExecutionModel}
-  * [[VUID-{refpage}-NumSubgroups-04294]]
-    The variable decorated with code:NumSubgroups must: be declared using
-    the code:Input {StorageClass}
-  * [[VUID-{refpage}-NumSubgroups-04295]]
-    The variable decorated with code:NumSubgroups must: be declared as a
-    scalar 32-bit integer value
-****
---
-endif::VK_VERSION_1_1[]
-
-[open,refpage='NumWorkgroups',desc='Number of workgroups in a dispatch',type='builtins']
---
-:refpage: NumWorkgroups
-
-code:NumWorkgroups::
-
-Decorating a variable with the code:NumWorkgroups built-in decoration will
-make that variable contain the number of local workgroups that are part of
-the dispatch that the invocation belongs to.
-Each component is equal to the values of the workgroup count parameters
-passed into the dispatching commands.
-
-.Valid Usage
-****
-  * [[VUID-{refpage}-NumWorkgroups-04296]]
-    The code:NumWorkgroups decoration must: be used only within the
-    code:GLCompute {ExecutionModel}
-  * [[VUID-{refpage}-NumWorkgroups-04297]]
-    The variable decorated with code:NumWorkgroups must: be declared using
-    the code:Input {StorageClass}
-  * [[VUID-{refpage}-NumWorkgroups-04298]]
-    The variable decorated with code:NumWorkgroups must: be declared as a
-    three-component vector of 32-bit integer values
-****
---
-
-ifdef::VK_NV_ray_tracing,VK_KHR_ray_tracing_pipeline[]
-[[interfaces-builtin-variables-objectraydirection]]
-[open,refpage='ObjectRayDirectionKHR',desc='Ray direction in object space',type='builtins']
---
-:refpage: ObjectRayDirectionKHR
-
-code:ObjectRayDirectionKHR::
-
-A variable decorated with the code:ObjectRayDirectionKHR decoration will
-specify the direction of the ray being processed, in object space.
-
-.Valid Usage
-****
-  * [[VUID-{refpage}-ObjectRayDirectionKHR-04299]]
-    The code:ObjectRayDirectionKHR decoration must: be used only within the
-    code:IntersectionKHR, code:AnyHitKHR, or code:ClosestHitKHR
-    {ExecutionModel}
-  * [[VUID-{refpage}-ObjectRayDirectionKHR-04300]]
-    The variable decorated with code:ObjectRayDirectionKHR must: be declared
-    using the code:Input {StorageClass}
-  * [[VUID-{refpage}-ObjectRayDirectionKHR-04301]]
-    The variable decorated with code:ObjectRayDirectionKHR must: be declared
-    as a three-component vector of 32-bit floating-point values
-****
---
-
-[[interfaces-builtin-variables-objectrayorigin]]
-[open,refpage='ObjectRayOriginKHR',desc='Ray origin in object space',type='builtins']
---
-:refpage: ObjectRayOriginKHR
-
-code:ObjectRayOriginKHR::
-
-A variable decorated with the code:ObjectRayOriginKHR decoration will
-specify the origin of the ray being processed, in object space.
-
-.Valid Usage
-****
-  * [[VUID-{refpage}-ObjectRayOriginKHR-04302]]
-    The code:ObjectRayOriginKHR decoration must: be used only within the
-    code:IntersectionKHR, code:AnyHitKHR, or code:ClosestHitKHR
-    {ExecutionModel}
-  * [[VUID-{refpage}-ObjectRayOriginKHR-04303]]
-    The variable decorated with code:ObjectRayOriginKHR must: be declared
-    using the code:Input {StorageClass}
-  * [[VUID-{refpage}-ObjectRayOriginKHR-04304]]
-    The variable decorated with code:ObjectRayOriginKHR must: be declared as
-    a three-component vector of 32-bit floating-point values
-****
---
-
-[[interfaces-builtin-variables-objecttoworld]]
-[open,refpage='ObjectToWorldKHR',desc='Transformation matrix from object to world space',type='builtins']
---
-:refpage: ObjectToWorldKHR
-
-code:ObjectToWorldKHR::
-
-A variable decorated with the code:ObjectToWorldKHR decoration will contain
-the current object-to-world transformation matrix, which is determined by
-the instance of the current intersection.
-
-.Valid Usage
-****
-  * [[VUID-{refpage}-ObjectToWorldKHR-04305]]
-    The code:ObjectToWorldKHR decoration must: be used only within the
-    code:IntersectionKHR, code:AnyHitKHR, or code:ClosestHitKHR
-    {ExecutionModel}
-  * [[VUID-{refpage}-ObjectToWorldKHR-04306]]
-    The variable decorated with code:ObjectToWorldKHR must: be declared
-    using the code:Input {StorageClass}
-  * [[VUID-{refpage}-ObjectToWorldKHR-04307]]
-    The variable decorated with code:ObjectToWorldKHR must: be declared as a
-    matrix with four columns of three-component vectors of 32-bit
-    floating-point values
-****
---
-endif::VK_NV_ray_tracing,VK_KHR_ray_tracing_pipeline[]
-
-[open,refpage='PatchVertices',desc='Number of vertices in an input patch',type='builtins']
---
-:refpage: PatchVertices
-
-code:PatchVertices::
-
-Decorating a variable with the code:PatchVertices built-in decoration will
-make that variable contain the number of vertices in the input patch being
-processed by the shader.
-In a Tessellation Control Shader, this is the same as the
-name:patchControlPoints member of
-slink:VkPipelineTessellationStateCreateInfo.
-In a Tessellation Evaluation Shader, code:PatchVertices is equal to the
-tessellation control output patch size.
-When the same shader is used in different pipelines where the patch sizes
-are configured differently, the value of the code:PatchVertices variable
-will also differ.
-
-.Valid Usage
-****
-  * [[VUID-{refpage}-PatchVertices-04308]]
-    The code:PatchVertices decoration must: be used only within the
-    code:TessellationControl or code:TessellationEvaluation {ExecutionModel}
-  * [[VUID-{refpage}-PatchVertices-04309]]
-    The variable decorated with code:PatchVertices must: be declared using
-    the code:Input {StorageClass}
-  * [[VUID-{refpage}-PatchVertices-04310]]
-    The variable decorated with code:PatchVertices must: be declared as a
-    scalar 32-bit integer value
-****
---
-
-[open,refpage='PointCoord',desc='Fragment coordinates in screen-space within a point primitive',type='builtins']
---
-:refpage: PointCoord
-
-code:PointCoord::
-
-Decorating a variable with the code:PointCoord built-in decoration will make
-that variable contain the coordinate of the current fragment within the
-point being rasterized, normalized to the size of the point with origin in
-the upper left corner of the point, as described in
-<<primsrast-points-basic,Basic Point Rasterization>>.
-If the primitive the fragment shader invocation belongs to is not a point,
-then the variable decorated with code:PointCoord contains an undefined:
-value.
-
-[NOTE]
-.Note
-====
-Depending on how the point is rasterized, code:PointCoord may: never reach
-[eq]#(0,0)# or [eq]#(1,1)#.
-====
-
-.Valid Usage
-****
-  * [[VUID-{refpage}-PointCoord-04311]]
-    The code:PointCoord decoration must: be used only within the
-    code:Fragment {ExecutionModel}
-  * [[VUID-{refpage}-PointCoord-04312]]
-    The variable decorated with code:PointCoord must: be declared using the
-    code:Input {StorageClass}
-  * [[VUID-{refpage}-PointCoord-04313]]
-    The variable decorated with code:PointCoord must: be declared as a
-    two-component vector of 32-bit floating-point values
-****
---
-
-[open,refpage='PointSize',desc='Size of a point primitive',type='builtins']
---
-:refpage: PointSize
-
-code:PointSize::
-
-Decorating a variable with the code:PointSize built-in decoration will make
-that variable contain the size of point primitives.
-The value written to the variable decorated with code:PointSize by the last
-<<pipeline-graphics-subsets-pre-rasterization,pre-rasterization shader
-stage>> in the pipeline is used as the framebuffer-space size of points
-produced by rasterization.
-
-[NOTE]
-.Note
-====
-When code:PointSize decorates a variable in the code:Input {StorageClass},
-it contains the data written to the output variable decorated with
-code:PointSize from the previous shader stage.
-====
-
-.Valid Usage
-****
-  * [[VUID-{refpage}-PointSize-04314]]
-    The code:PointSize decoration must: be used only within the code:MeshNV,
-    code:Vertex, code:TessellationControl, code:TessellationEvaluation, or
-    code:Geometry {ExecutionModel}
-  * [[VUID-{refpage}-PointSize-04315]]
-    The variable decorated with code:PointSize within the code:MeshNV or
-    code:Vertex {ExecutionModel} must: be declared using the code:Output
-    {StorageClass}
-  * [[VUID-{refpage}-PointSize-04316]]
-    The variable decorated with code:PointSize within the
-    code:TessellationControl, code:TessellationEvaluation, or code:Geometry
-    {ExecutionModel} must: not be declared using a {StorageClass} other than
-    code:Input or code:Output
-  * [[VUID-{refpage}-PointSize-04317]]
-    The variable decorated with code:PointSize must: be declared as a scalar
-    32-bit floating-point value
-****
---
-
-[open,refpage='Position',desc='Vertex position',type='builtins']
---
-:refpage: Position
-
-code:Position::
-
-Decorating a variable with the code:Position built-in decoration will make
-that variable contain the position of the current vertex.
-In the last <<pipeline-graphics-subsets-pre-rasterization,pre-rasterization
-shader stage>>, the value of the variable decorated with code:Position is
-used in subsequent primitive assembly, clipping, and rasterization
-operations.
-
-[NOTE]
-.Note
-====
-When code:Position decorates a variable in the code:Input {StorageClass}, it
-contains the data written to the output variable decorated with
-code:Position from the previous shader stage.
-====
-
-.Valid Usage
-****
-  * [[VUID-{refpage}-Position-04318]]
-    The code:Position decoration must: be used only within the code:MeshNV,
-    code:Vertex, code:TessellationControl, code:TessellationEvaluation, or
-    code:Geometry {ExecutionModel}
-  * [[VUID-{refpage}-Position-04319]]
-    The variable decorated with code:Position within code:MeshNV or
-    code:Vertex {ExecutionModel} must: be declared using the code:Output
-    {StorageClass}
-  * [[VUID-{refpage}-Position-04320]]
-    The variable decorated with code:Position within
-    code:TessellationControl, code:TessellationEvaluation, or code:Geometry
-    {ExecutionModel} must: not be declared using a {StorageClass} other than
-    code:Input or code:Output
-  * [[VUID-{refpage}-Position-04321]]
-    The variable decorated with code:Position must: be declared as a
-    four-component vector of 32-bit floating-point values
-****
---
-
-ifdef::VK_NVX_multiview_per_view_attributes[]
-[[interfaces-builtin-variables-positionperview]]
-[open,refpage='PositionPerViewNV',desc='Vertex position per view',type='builtins']
---
-:refpage: PositionPerViewNV
-
-code:PositionPerViewNV::
-
-Decorating a variable with the code:PositionPerViewNV built-in decoration
-will make that variable contain the position of the current vertex, for each
-view.
-+
-Elements of the array correspond to views in a multiview subpass, and those
-elements corresponding to views in the view mask of the subpass the shader
-is compiled against will be used as the position value for those views.
-For the final
-<<pipeline-graphics-subsets-pre-rasterization,pre-rasterization shader
-stage>> in the pipeline, values written to an output variable decorated with
-code:PositionPerViewNV are used in subsequent primitive assembly, clipping,
-and rasterization operations, as with code:Position.
-code:PositionPerViewNV output in an earlier
-<<pipeline-graphics-subsets-pre-rasterization,pre-rasterization shader
-stage>> is available as an input in the subsequent
-<<pipeline-graphics-subsets-pre-rasterization,pre-rasterization shader
-stage>>.
-+
-If a shader is compiled against a subpass that has the
-ename:VK_SUBPASS_DESCRIPTION_PER_VIEW_POSITION_X_ONLY_BIT_NVX bit set, then
-the position values for each view must: not differ in any component other
-than the X component.
-If the values do differ, one will be chosen in an implementation-dependent
-manner.
-
-.Valid Usage
-****
-  * [[VUID-{refpage}-PositionPerViewNV-04322]]
-    The code:PositionPerViewNV decoration must: be used only within the
-    code:MeshNV, code:Vertex, code:TessellationControl,
-    code:TessellationEvaluation, or code:Geometry {ExecutionModel}
-  * [[VUID-{refpage}-PositionPerViewNV-04323]]
-    The variable decorated with code:PositionPerViewNV within the
-    code:Vertex, or code:MeshNV {ExecutionModel} must: be declared using the
-    code:Output {StorageClass}
-  * [[VUID-{refpage}-PositionPerViewNV-04324]]
-    The variable decorated with code:PositionPerViewNV within the
-    code:TessellationControl, code:TessellationEvaluation, or code:Geometry
-    {ExecutionModel} must: not be declared using a {StorageClass} other than
-    code:Input or code:Output
-  * [[VUID-{refpage}-PositionPerViewNV-04325]]
-    The variable decorated with code:PositionPerViewNV must: be declared as
-    an array of four-component vector of 32-bit floating-point values with
-    at least as many elements as the maximum view in the subpass's view mask
-    plus one
-  * [[VUID-{refpage}-PositionPerViewNV-04326]]
-    The array variable decorated with code:PositionPerViewNV must: only be
-    indexed by a constant or specialization constant
-****
---
-endif::VK_NVX_multiview_per_view_attributes[]
-
-ifdef::VK_NV_mesh_shader[]
-[[interfaces-builtin-variables-primitivecount]]
-[open,refpage='PrimitiveCountNV',desc='Number of primitives output by a mesh shader',type='builtins']
---
-:refpage: PrimitiveCountNV
-
-code:PrimitiveCountNV::
-+
-Decorating a variable with the code:PrimitiveCountNV decoration will make
-that variable contain the primitive count.
-The primitive count specifies the number of primitives in the output mesh
-produced by the mesh shader that will be processed by subsequent pipeline
-stages.
-
-.Valid Usage
-****
-  * [[VUID-{refpage}-PrimitiveCountNV-04327]]
-    The code:PrimitiveCountNV decoration must: be used only within the
-    code:MeshNV {ExecutionModel}
-  * [[VUID-{refpage}-PrimitiveCountNV-04328]]
-    The variable decorated with code:PrimitiveCountNV must: be declared
-    using the code:Output {StorageClass}
-  * [[VUID-{refpage}-PrimitiveCountNV-04329]]
-    The variable decorated with code:PrimitiveCountNV must: be declared as a
-    scalar 32-bit integer value
-****
---
-endif::VK_NV_mesh_shader[]
-
-[open,refpage='PrimitiveId',desc='Primitive ID',type='builtins']
---
-:refpage: PrimitiveId
-
-code:PrimitiveId::
-
-Decorating a variable with the code:PrimitiveId built-in decoration will
-make that variable contain the index of the current primitive.
-+
-The index of the first primitive generated by a drawing command is zero, and
-the index is incremented after every individual point, line, or triangle
-primitive is processed.
-+
-For triangles drawn as points or line segments (see <<primsrast-polygonmode,
-Polygon Mode>>), the primitive index is incremented only once, even if
-multiple points or lines are eventually drawn.
-+
-Variables decorated with code:PrimitiveId are reset to zero between each
-instance drawn.
-+
-Restarting a primitive topology using primitive restart has no effect on the
-value of variables decorated with code:PrimitiveId.
-+
-In tessellation control and tessellation evaluation shaders, it will contain
-the index of the patch within the current set of rendering primitives that
-corresponds to the shader invocation.
-+
-In a geometry shader, it will contain the number of primitives presented as
-input to the shader since the current set of rendering primitives was
-started.
-+
-In a fragment shader, it will contain the primitive index written by the
-ifdef::VK_NV_mesh_shader[]
-mesh shader if a mesh shader is present, or the primitive index written by
-the
-endif::VK_NV_mesh_shader[]
-geometry shader if a geometry shader is present, or with the value that
-would have been presented as input to the geometry shader had it been
-present.
-ifdef::VK_NV_ray_tracing,VK_KHR_ray_tracing_pipeline[]
-+
-In an intersection, any-hit, or closest hit shader, it will contain the
-index within the geometry of the triangle or bounding box being processed.
-endif::VK_NV_ray_tracing,VK_KHR_ray_tracing_pipeline[]
-
-[NOTE]
-.Note
-====
-When the code:PrimitiveId decoration is applied to an output variable in the
-ifdef::VK_NV_mesh_shader[]
-mesh shader or
-endif::VK_NV_mesh_shader[]
-geometry shader, the resulting value is seen through the code:PrimitiveId
-decorated input variable in the fragment shader.
-
-The fragment shader using code:PrimitiveId will need to declare either the
-ifdef::VK_NV_mesh_shader[code:MeshShadingNV,]
-code:Geometry or code:Tessellation capability to satisfy the requirement
-SPIR-V has to use code:PrimitiveId.
-====
-
-.Valid Usage
-****
-  * [[VUID-{refpage}-PrimitiveId-04330]]
-    The code:PrimitiveId decoration must: be used only within the
-    code:MeshNV, code:IntersectionKHR, code:AnyHitKHR, code:ClosestHitKHR,
-    code:TessellationControl, code:TessellationEvaluation, code:Geometry, or
-    code:Fragment {ExecutionModel}
-  * [[VUID-{refpage}-Fragment-04331]]
-    If pipeline contains both the code:Fragment and code:Geometry
-    {ExecutionModel} and a variable decorated with code:PrimitiveId is read
-    from code:Fragment shader, then the code:Geometry shader must: write to
-    the output variables decorated with code:PrimitiveId in all execution
-    paths
-  * [[VUID-{refpage}-Fragment-04332]]
-    If pipeline contains both the code:Fragment and code:MeshNV
-    {ExecutionModel} and a variable decorated with code:PrimitiveId is read
-    from code:Fragment shader, then the code:MeshNV shader must: write to
-    the output variables decorated with code:PrimitiveId in all execution
-    paths
-  * [[VUID-{refpage}-Fragment-04333]]
-    If code:Fragment {ExecutionModel} contains a variable decorated with
-    code:PrimitiveId, then either the code:MeshShadingNV, code:Geometry or
-    code:Tessellation capability must: also be declared
-  * [[VUID-{refpage}-PrimitiveId-04334]]
-    The variable decorated with code:PrimitiveId within the
-    code:TessellationControl, code:TessellationEvaluation, code:Fragment,
-    code:IntersectionKHR, code:AnyHitKHR, or code:ClosestHitKHR
-    {ExecutionModel} must: be declared using the code:Input {StorageClass}
-  * [[VUID-{refpage}-PrimitiveId-04335]]
-    The variable decorated with code:PrimitiveId within the code:Geometry
-    {ExecutionModel} must: be declared using the code:Input or code:Output
-    {StorageClass}
-  * [[VUID-{refpage}-PrimitiveId-04336]]
-    The variable decorated with code:PrimitiveId within the code:MeshNV
-    {ExecutionModel} must: be declared using the code:Output {StorageClass}
-  * [[VUID-{refpage}-PrimitiveId-04337]]
-    The variable decorated with code:PrimitiveId must: be declared as a
-    scalar 32-bit integer value
-****
---
-
-ifdef::VK_NV_mesh_shader[]
-[[interfaces-builtin-variables-primitiveindices]]
-[open,refpage='PrimitiveIndicesNV',desc='Indices of primitives in a mesh shader',type='builtins']
---
-:refpage: PrimitiveIndicesNV
-
-code:PrimitiveIndicesNV::
-+
-Decorating a variable with the code:PrimitiveIndicesNV decoration will make
-that variable contain the output array of vertex index values.
-Depending on the output primitive type declared using the execution mode,
-the indices are split into groups of one (code:OutputPoints), two
-(code:OutputLinesNV), or three (code:OutputTriangles) indices and each group
-generates a primitive.
-
-.Valid Usage
-****
-  * [[VUID-{refpage}-PrimitiveIndicesNV-04338]]
-    The code:PrimitiveIndicesNV decoration must: be used only within the
-    code:MeshNV {ExecutionModel}
-  * [[VUID-{refpage}-PrimitiveIndicesNV-04339]]
-    The variable decorated with code:PrimitiveIndicesNV must: be declared
-    using the code:Output {StorageClass}
-  * [[VUID-{refpage}-PrimitiveIndicesNV-04340]]
-    The variable decorated with code:PrimitiveIndicesNV must: be declared as
-    an array of scalar 32-bit integer values
-  * [[VUID-{refpage}-PrimitiveIndicesNV-04341]]
-    All index values of the array decorated with code:PrimitiveIndicesNV
-    must: be in the range [eq]#[0, N-1]#, where [eq]#N# is the value
-    specified by the code:OutputVertices {ExecutionMode}
-  * [[VUID-{refpage}-OutputPoints-04342]]
-    If the {ExecutionMode} is code:OutputPoints, then the array decorated
-    with code:PrimitiveIndicesNV must be the size of the value specified by
-    code:OutputPrimitivesNV
-  * [[VUID-{refpage}-OutputLinesNV-04343]]
-    If the {ExecutionMode} is code:OutputLinesNV, then the array decorated
-    with code:PrimitiveIndicesNV must be the size of two times the value
-    specified by code:OutputPrimitivesNV
-  * [[VUID-{refpage}-OutputTrianglesNV-04344]]
-    If the {ExecutionMode} is code:OutputTrianglesNV, then the array
-    decorated with code:PrimitiveIndicesNV must be the size of three times
-    the value specified by code:OutputPrimitivesNV
-****
---
-endif::VK_NV_mesh_shader[]
-
-ifdef::VK_KHR_fragment_shading_rate[]
-[[interfaces-builtin-variables-primitiveshadingrate]]
-[open,refpage='PrimitiveShadingRateKHR',desc='Primitive contribution to fragment shading rate',type='builtins']
---
-:refpage: PrimitiveShadingRateKHR
-
-code:PrimitiveShadingRateKHR::
-
-Decorating a variable with the code:PrimitiveShadingRateKHR built-in
-decoration will make that variable contain the
-<<primsrast-fragment-shading-rate-primitive, primitive fragment shading
-rate>>.
-+
-The value written to the variable decorated with
-code:PrimitiveShadingRateKHR by the last
-<<pipeline-graphics-subsets-pre-rasterization,pre-rasterization shader
-stage>> in the pipeline is used as the
-<<primsrast-fragment-shading-rate-primitive, primitive fragment shading
-rate>>.
-Outputs in previous shader stages are ignored.
-+
-If the last active
-<<pipeline-graphics-subsets-pre-rasterization,pre-rasterization shader
-stage>> shader entry point's interface does not include a variable decorated
-with code:PrimitiveShadingRateKHR, then it is as if the shader specified a
-fragment shading rate value of 0, indicating a horizontal and vertical rate
-of 1 pixel.
-+
-If a shader has code:PrimitiveShadingRateKHR in the output interface and
-there is an execution path through the shader that does not write to it, its
-value is undefined: for executions of the shader that take that path.
-
-.Valid Usage
-****
-  * [[VUID-{refpage}-PrimitiveShadingRateKHR-04484]]
-    The code:PrimitiveShadingRateKHR decoration must: be used only within
-    the code:MeshNV, code:Vertex, or code:Geometry {ExecutionModel}
-  * [[VUID-{refpage}-PrimitiveShadingRateKHR-04485]]
-    The variable decorated with code:PrimitiveShadingRateKHR must: be
-    declared using the code:Output {StorageClass}
-  * [[VUID-{refpage}-PrimitiveShadingRateKHR-04486]]
-    The variable decorated with code:PrimitiveShadingRateKHR must: be
-    declared as a scalar 32-bit integer value
-  * [[VUID-{refpage}-PrimitiveShadingRateKHR-04487]]
-    The value written to code:PrimitiveShadingRateKHR must: include no more
-    than one of code:Vertical2Pixels and code:Vertical4Pixels
-  * [[VUID-{refpage}-PrimitiveShadingRateKHR-04488]]
-    The value written to code:PrimitiveShadingRateKHR must: include no more
-    than one of code:Horizontal2Pixels and code:Horizontal4Pixels
-  * [[VUID-{refpage}-PrimitiveShadingRateKHR-04489]]
-    The value written to code:PrimitiveShadingRateKHR must: not have any
-    bits set other than those defined by *Fragment Shading Rate Flags*
-    enumerants in the SPIR-V specification
-****
---
-endif::VK_KHR_fragment_shading_rate[]
-
-ifdef::VK_KHR_ray_tracing_pipeline[]
-[[interfaces-builtin-variables-raygeometryindex]]
-[open,refpage='RayGeometryIndexKHR',desc='Geometry index in a ray shader',type='builtins']
---
-:refpage: RayGeometryIndexKHR
-
-code:RayGeometryIndexKHR::
-
-A variable decorated with the code:RayGeometryIndexKHR decoration will
-contain the <<acceleration-structure-geometry-index, geometry index>> for
-the acceleration structure geometry currently being shaded.
-
-.Valid Usage
-****
-  * [[VUID-{refpage}-RayGeometryIndexKHR-04345]]
-    The code:RayGeometryIndexKHR decoration must: be used only within the
-    code:IntersectionKHR, code:AnyHitKHR, or code:ClosestHitKHR
-    {ExecutionModel}
-  * [[VUID-{refpage}-RayGeometryIndexKHR-04346]]
-    The variable decorated with code:RayGeometryIndexKHR must: be declared
-    using the code:Input {StorageClass}
-  * [[VUID-{refpage}-RayGeometryIndexKHR-04347]]
-    The variable decorated with code:RayGeometryIndexKHR must: be declared
-    as a scalar 32-bit integer value
-****
---
-endif::VK_KHR_ray_tracing_pipeline[]
-
-ifdef::VK_NV_ray_tracing,VK_KHR_ray_tracing_pipeline[]
-[[interfaces-builtin-variables-raytmax]]
-[open,refpage='RayTmaxKHR',desc='Maximum T value of a ray',type='builtins']
---
-:refpage: RayTmaxKHR
-
-code:RayTmaxKHR::
-
-A variable decorated with the code:RayTmaxKHR decoration will contain the
-parametric [eq]#t~max~# value of the ray being processed.
-The value is independent of the space in which the ray origin and direction
-exist.
-The value is initialized to the parameter passed into code:OpTraceRayKHR.
-+
-The [eq]#t~max~# value changes throughout the lifetime of the ray that
-produced the intersection.
-In the closest hit shader, the value reflects the closest distance to the
-intersected primitive.
-In the any-hit shader, it reflects the distance to the primitive currently
-being intersected.
-In the intersection shader, it reflects the distance to the closest
-primitive intersected so far or the initial value.
-The value can change in the intersection shader after calling
-code:OpReportIntersectionKHR if the corresponding any-hit shader does not
-ignore the intersection.
-In a miss shader, the value is identical to the parameter passed into
-code:OpTraceRayKHR.
-
-.Valid Usage
-****
-  * [[VUID-{refpage}-RayTmaxKHR-04348]]
-    The code:RayTmaxKHR decoration must: be used only within the
-    code:IntersectionKHR, code:AnyHitKHR, code:ClosestHitKHR, or
-    code:MissKHR {ExecutionModel}
-  * [[VUID-{refpage}-RayTmaxKHR-04349]]
-    The variable decorated with code:RayTmaxKHR must: be declared using the
-    code:Input {StorageClass}
-  * [[VUID-{refpage}-RayTmaxKHR-04350]]
-    The variable decorated with code:RayTmaxKHR must: be declared as a
-    scalar 32-bit floating-point value
-****
---
-
-[[interfaces-builtin-variables-raytmin]]
-[open,refpage='RayTminKHR',desc='Minimum T value of a ray',type='builtins']
---
-:refpage: RayTminKHR
-
-code:RayTminKHR::
-
-A variable decorated with the code:RayTminKHR decoration will contain the
-parametric [eq]#t~min~# value of the ray being processed.
-The value is independent of the space in which the ray origin and direction
-exist.
-The value is given by the parameter passed into code:OpTraceRayKHR.
-+
-The [eq]#t~min~# value remains constant for the duration of the ray query.
-
-.Valid Usage
-****
-  * [[VUID-{refpage}-RayTminKHR-04351]]
-    The code:RayTminKHR decoration must: be used only within the
-    code:IntersectionKHR, code:AnyHitKHR, code:ClosestHitKHR, or
-    code:MissKHR {ExecutionModel}
-  * [[VUID-{refpage}-RayTminKHR-04352]]
-    The variable decorated with code:RayTminKHR must: be declared using the
-    code:Input {StorageClass}
-  * [[VUID-{refpage}-RayTminKHR-04353]]
-    The variable decorated with code:RayTminKHR must: be declared as a
-    scalar 32-bit floating-point value
-****
---
-endif::VK_NV_ray_tracing,VK_KHR_ray_tracing_pipeline[]
-
-[open,refpage='SampleId',desc='Sample ID within a fragment',type='builtins']
---
-:refpage: SampleId
-
-code:SampleId::
-
-Decorating a variable with the code:SampleId built-in decoration will make
-that variable contain the <<primsrast-multisampling-coverage-mask, coverage
-index>> for the current fragment shader invocation.
-code:SampleId ranges from zero to the number of samples in the framebuffer
-minus one.
-If a fragment shader entry point's interface includes an input variable
-decorated with code:SampleId, <<primsrast-sampleshading,Sample Shading>> is
-considered enabled with a pname:minSampleShading value of 1.0.
-
-.Valid Usage
-****
-  * [[VUID-{refpage}-SampleId-04354]]
-    The code:SampleId decoration must: be used only within the code:Fragment
-    {ExecutionModel}
-  * [[VUID-{refpage}-SampleId-04355]]
-    The variable decorated with code:SampleId must: be declared using the
-    code:Input {StorageClass}
-  * [[VUID-{refpage}-SampleId-04356]]
-    The variable decorated with code:SampleId must: be declared as a scalar
-    32-bit integer value
-****
---
-
-[[interfaces-builtin-variables-samplemask]]
-[open,refpage='SampleMask',desc='Coverage mask for a fragment shader invocation',type='builtins']
---
-:refpage: SampleMask
-
-code:SampleMask::
-
-Decorating a variable with the code:SampleMask built-in decoration will make
-any variable contain the <<fragops-shader-samplemask, sample mask>> for the
-current fragment shader invocation.
-+
-A variable in the code:Input storage class decorated with code:SampleMask
-will contain a bitmask of the set of samples covered by the primitive
-generating the fragment during rasterization.
-It has a sample bit set if and only if the sample is considered covered for
-this fragment shader invocation.
-code:SampleMask[] is an array of integers.
-Bits are mapped to samples in a manner where bit B of mask M
-(`SampleMask[M]`) corresponds to sample [eq]#32 {times} M {plus} B#.
-+
-A variable in the code:Output storage class decorated with code:SampleMask
-is an array of integers forming a bit array in a manner similar to an input
-variable decorated with code:SampleMask, but where each bit represents
-coverage as computed by the shader.
-This computed code:SampleMask is combined with the generated coverage mask
-in the <<fragops-covg, multisample coverage>> operation.
-+
-Variables decorated with code:SampleMask must: be either an unsized array,
-or explicitly sized to be no larger than the implementation-dependent
-maximum sample-mask (as an array of 32-bit elements), determined by the
-maximum number of samples.
-+
-If a fragment shader entry point's interface includes an output variable
-decorated with code:SampleMask, the sample mask will be undefined: for any
-array elements of any fragment shader invocations that fail to assign a
-value.
-If a fragment shader entry point's interface does not include an output
-variable decorated with code:SampleMask, the sample mask has no effect on
-the processing of a fragment.
-
-.Valid Usage
-****
-  * [[VUID-{refpage}-SampleMask-04357]]
-    The code:SampleMask decoration must: be used only within the
-    code:Fragment {ExecutionModel}
-  * [[VUID-{refpage}-SampleMask-04358]]
-    The variable decorated with code:SampleMask must: be declared using the
-    code:Input or code:Output {StorageClass}
-  * [[VUID-{refpage}-SampleMask-04359]]
-    The variable decorated with code:SampleMask must: be declared as an
-    array of 32-bit integer values
-****
---
-
-[open,refpage='SamplePosition',desc='Position of a shaded sample',type='builtins']
---
-:refpage: SamplePosition
-
-code:SamplePosition::
-
-Decorating a variable with the code:SamplePosition built-in decoration will
-make that variable contain the sub-pixel position of the sample being
-shaded.
-The top left of the pixel is considered to be at coordinate [eq]#(0,0)# and
-the bottom right of the pixel is considered to be at coordinate [eq]#(1,1)#.
-ifdef::VK_EXT_fragment_density_map[]
-// Markup here is weird. To get all these paragraphs indented properly for
-// the keyword, the '+' connector must be *inside* ifdefs w/o blank lines.
-+
-If the render pass has a fragment density map attachment, the variable will
-instead contain the sub-fragment position of the sample being shaded.
-The top left of the fragment is considered to be at coordinate [eq]#(0,0)#
-and the bottom right of the fragment is considered to be at coordinate
-[eq]#(1,1)# for any fragment area.
-endif::VK_EXT_fragment_density_map[]
-+
-If a fragment shader entry point's interface includes an input variable
-decorated with code:SamplePosition, <<primsrast-sampleshading,Sample
-Shading>> is considered enabled with a pname:minSampleShading value of 1.0.
-ifdef::VK_EXT_sample_locations[]
-+
-If the current pipeline uses <<primsrast-samplelocations, custom sample
-locations>> the value of any variable decorated with the code:SamplePosition
-built-in decoration is undefined:.
-endif::VK_EXT_sample_locations[]
-
-.Valid Usage
-****
-  * [[VUID-{refpage}-SamplePosition-04360]]
-    The code:SamplePosition decoration must: be used only within the
-    code:Fragment {ExecutionModel}
-  * [[VUID-{refpage}-SamplePosition-04361]]
-    The variable decorated with code:SamplePosition must: be declared using
-    the code:Input {StorageClass}
-  * [[VUID-{refpage}-SamplePosition-04362]]
-    The variable decorated with code:SamplePosition must: be declared as a
-    two-component vector of 32-bit floating-point values
-****
---
-
-ifdef::VK_KHR_fragment_shading_rate[]
-[open,refpage='ShadingRateKHR',desc='Shading rate of a fragment',type='builtins']
---
-:refpage: ShadingRateKHR
-
-code:ShadingRateKHR::
-
-Decorating a variable with the code:ShadingRateKHR built-in decoration will
-make that variable contain the <<primsrast-fragment-shading-rate, fragment
-shading rate>> for the current fragment invocation.
-
-.Valid Usage
-****
-  * [[VUID-{refpage}-ShadingRateKHR-04490]]
-    The code:ShadingRateKHR decoration must: be used only within the
-    code:Fragment {ExecutionModel}
-  * [[VUID-{refpage}-ShadingRateKHR-04491]]
-    The variable decorated with code:ShadingRateKHR must: be declared using
-    the code:Input {StorageClass}
-  * [[VUID-{refpage}-ShadingRateKHR-04492]]
-    The variable decorated with code:ShadingRateKHR must: be declared as a
-    scalar 32-bit integer value
-****
---
-endif::VK_KHR_fragment_shading_rate[]
-
-ifdef::VK_NV_shader_sm_builtins[]
-[[interfaces-builtin-variables-smcountnv]]
-[open,refpage='SMCountNV',desc='Number of SMs on the device',type='builtins']
---
-:refpage: SMCountNV
-
-code:SMCountNV::
-
-Decorating a variable with the code:SMCountNV built-in decoration will make
-that variable contain the number of SMs on the device.
-
-.Valid Usage
-****
-  * [[VUID-{refpage}-SMCountNV-04363]]
-    The variable decorated with code:SMCountNV must: be declared using the
-    code:Input {StorageClass}
-  * [[VUID-{refpage}-SMCountNV-04364]]
-    The variable decorated with code:SMCountNV must: be declared as a scalar
-    32-bit integer value
-****
---
-
-[[interfaces-builtin-variables-smidnv]]
-[open,refpage='SMIDNV',desc='SM ID on which a shader invocation is running',type='builtins']
---
-:refpage: SMIDNV
-
-code:SMIDNV::
-
-Decorating a variable with the code:SMIDNV built-in decoration will make
-that variable contain the ID of the SM on which the current shader
-invocation is running.
-This variable is in the range [eq]#[0, code:SMCountNV-1]#.
-
-.Valid Usage
-****
-  * [[VUID-{refpage}-SMIDNV-04365]]
-    The variable decorated with code:SMIDNV must: be declared using the
-    code:Input {StorageClass}
-  * [[VUID-{refpage}-SMIDNV-04366]]
-    The variable decorated with code:SMIDNV must: be declared as a scalar
-    32-bit integer value
-****
---
-endif::VK_NV_shader_sm_builtins[]
-
-ifdef::VK_VERSION_1_1[]
-[open,refpage='SubgroupId',desc='Subgroup ID ',type='builtins']
---
-:refpage: SubgroupId
-
-code:SubgroupId::
-+
-Decorating a variable with the code:SubgroupId built-in decoration will make
-that variable contain the index of the subgroup within the local workgroup.
-This variable is in range [0, code:NumSubgroups-1].
-
-.Valid Usage
-****
-  * [[VUID-{refpage}-SubgroupId-04367]]
-    The code:SubgroupId decoration must: be used only within the
-    code:GLCompute, code:MeshNV, or code:TaskNV {ExecutionModel}
-  * [[VUID-{refpage}-SubgroupId-04368]]
-    The variable decorated with code:SubgroupId must: be declared using the
-    code:Input {StorageClass}
-  * [[VUID-{refpage}-SubgroupId-04369]]
-    The variable decorated with code:SubgroupId must: be declared as a
-    scalar 32-bit integer value
-****
---
-endif::VK_VERSION_1_1[]
-
-ifdef::VK_VERSION_1_1,VK_EXT_shader_subgroup_ballot[]
-[[interfaces-builtin-variables-sgeq]]
-[open,refpage='SubgroupEqMask',desc='Mask of shader invocations in a subgroup with the same subgroup local invocation ID',type='builtins']
---
-:refpage: SubgroupEqMask
-
-code:SubgroupEqMask::
-+
-Decorating a variable with the code:SubgroupEqMask builtin decoration will
-make that variable contain the _subgroup mask_ of the current subgroup
-invocation.
-The bit corresponding to the code:SubgroupLocalInvocationId is set in the
-variable decorated with code:SubgroupEqMask.
-All other bits are set to zero.
-+
-code:SubgroupEqMaskKHR is an alias of code:SubgroupEqMask.
-
-.Valid Usage
-****
-  * [[VUID-{refpage}-SubgroupEqMask-04370]]
-    The variable decorated with code:SubgroupEqMask must: be declared using
-    the code:Input {StorageClass}
-  * [[VUID-{refpage}-SubgroupEqMask-04371]]
-    The variable decorated with code:SubgroupEqMask must: be declared as a
-    four-component vector of 32-bit integer values
-****
---
-
-[[interfaces-builtin-variables-sgge]]
-[open,refpage='SubgroupGeMask',desc='Mask of shader invocations in a subgroup with the same or higher subgroup local invocation ID',type='builtins']
---
-:refpage: SubgroupGeMask
-
-code:SubgroupGeMask::
-+
-Decorating a variable with the code:SubgroupGeMask builtin decoration will
-make that variable contain the _subgroup mask_ of the current subgroup
-invocation.
-The bits corresponding to the invocations greater than or equal to
-code:SubgroupLocalInvocationId through code:SubgroupSize-1 are set in the
-variable decorated with code:SubgroupGeMask.
-All other bits are set to zero.
-+
-code:SubgroupGeMaskKHR is an alias of code:SubgroupGeMask.
-
-.Valid Usage
-****
-  * [[VUID-{refpage}-SubgroupGeMask-04372]]
-    The variable decorated with code:SubgroupGeMask must: be declared using
-    the code:Input {StorageClass}
-  * [[VUID-{refpage}-SubgroupGeMask-04373]]
-    The variable decorated with code:SubgroupGeMask must: be declared as a
-    four-component vector of 32-bit integer values
-****
---
-
-[[interfaces-builtin-variables-sggt]]
-[open,refpage='SubgroupGtMask',desc='Mask of shader invocations in a subgroup with a higher subgroup local invocation ID',type='builtins']
---
-:refpage: SubgroupGtMask
-
-code:SubgroupGtMask::
-+
-Decorating a variable with the code:SubgroupGtMask builtin decoration will
-make that variable contain the _subgroup mask_ of the current subgroup
-invocation.
-The bits corresponding to the invocations greater than
-code:SubgroupLocalInvocationId through code:SubgroupSize-1 are set in the
-variable decorated with code:SubgroupGtMask.
-All other bits are set to zero.
-+
-code:SubgroupGtMaskKHR is an alias of code:SubgroupGtMask.
-
-.Valid Usage
-****
-  * [[VUID-{refpage}-SubgroupGtMask-04374]]
-    The variable decorated with code:SubgroupGtMask must: be declared using
-    the code:Input {StorageClass}
-  * [[VUID-{refpage}-SubgroupGtMask-04375]]
-    The variable decorated with code:SubgroupGtMask must: be declared as a
-    four-component vector of 32-bit integer values
-****
---
-
-[[interfaces-builtin-variables-sgle]]
-[open,refpage='SubgroupLeMask',desc='Mask of shader invocations in a subgroup with the same or lower subgroup local invocation ID',type='builtins']
---
-:refpage: SubgroupLeMask
-
-code:SubgroupLeMask::
-+
-Decorating a variable with the code:SubgroupLeMask builtin decoration will
-make that variable contain the _subgroup mask_ of the current subgroup
-invocation.
-The bits corresponding to the invocations less than or equal to
-code:SubgroupLocalInvocationId are set in the variable decorated with
-code:SubgroupLeMask.
-All other bits are set to zero.
-+
-code:SubgroupLeMaskKHR is an alias of code:SubgroupLeMask.
-
-.Valid Usage
-****
-  * [[VUID-{refpage}-SubgroupLeMask-04376]]
-    The variable decorated with code:SubgroupLeMask must: be declared using
-    the code:Input {StorageClass}
-  * [[VUID-{refpage}-SubgroupLeMask-04377]]
-    The variable decorated with code:SubgroupLeMask must: be declared as a
-    four-component vector of 32-bit integer values
-****
---
-
-[[interfaces-builtin-variables-sglt]]
-[open,refpage='SubgroupLtMask',desc='Mask of shader invocations in a subgroup with a lower subgroup local invocation ID',type='builtins']
---
-:refpage: SubgroupLtMask
-
-code:SubgroupLtMask::
-+
-Decorating a variable with the code:SubgroupLtMask builtin decoration will
-make that variable contain the _subgroup mask_ of the current subgroup
-invocation.
-The bits corresponding to the invocations less than
-code:SubgroupLocalInvocationId are set in the variable decorated with
-code:SubgroupLtMask.
-All other bits are set to zero.
-+
-code:SubgroupLtMaskKHR is an alias of code:SubgroupLtMask.
-
-.Valid Usage
-****
-  * [[VUID-{refpage}-SubgroupLtMask-04378]]
-    The variable decorated with code:SubgroupLtMask must: be declared using
-    the code:Input {StorageClass}
-  * [[VUID-{refpage}-SubgroupLtMask-04379]]
-    The variable decorated with code:SubgroupLtMask must: be declared as a
-    four-component vector of 32-bit integer values
-****
---
-
-[[interfaces-builtin-variables-sgli]]
-[open,refpage='SubgroupLocalInvocationId',desc='ID of the invocation within a subgroup',type='builtins']
---
-:refpage: SubgroupLocalInvocationId
-
-code:SubgroupLocalInvocationId::
-+
-Decorating a variable with the code:SubgroupLocalInvocationId builtin
-decoration will make that variable contain the index of the invocation
-within the subgroup.
-This variable is in range [0,code:SubgroupSize-1].
-
-[NOTE]
-.Note
-====
-There is no direct relationship between code:SubgroupLocalInvocationId and
-code:LocalInvocationId or code:LocalInvocationIndex.
-ifdef::VK_EXT_subgroup_size_control[]
-If the pipeline was created with
-ename:VK_PIPELINE_SHADER_STAGE_CREATE_REQUIRE_FULL_SUBGROUPS_BIT_EXT,
-applications can compute their own local invocation index to serve the same
-purpose:
-
-[eq]#index = code:SubgroupLocalInvocationId + code:SubgroupId *
-code:SubgroupSize#
-
-If full subgroups are not enabled, some subgroups may be dispatched with
-inactive invocations that do not correspond to a local workgroup invocation,
-making the value of [eq]#index# unreliable.
-endif::VK_EXT_subgroup_size_control[]
-====
-
-.Valid Usage
-****
-  * [[VUID-{refpage}-SubgroupLocalInvocationId-04380]]
-    The variable decorated with code:SubgroupLocalInvocationId must: be
-    declared using the code:Input {StorageClass}
-  * [[VUID-{refpage}-SubgroupLocalInvocationId-04381]]
-    The variable decorated with code:SubgroupLocalInvocationId must: be
-    declared as a scalar 32-bit integer value
-****
---
-
-[[interfaces-builtin-variables-sgs]]
-[open,refpage='SubgroupSize',desc='Size of a subgroup',type='builtins']
---
-:refpage: SubgroupSize
-
-code:SubgroupSize::
-+
-Decorating a variable with the code:SubgroupSize builtin decoration will
-make that variable contain the implementation-dependent
-<<limits-subgroup-size,number of invocations in a subgroup>>.
-This value must: be a power-of-two integer.
-+
-ifdef::VK_EXT_subgroup_size_control[]
-If the pipeline was created with the
-ename:VK_PIPELINE_SHADER_STAGE_CREATE_ALLOW_VARYING_SUBGROUP_SIZE_BIT_EXT
-flag set, the code:SubgroupSize decorated variable will contain the subgroup
-size for each subgroup that gets dispatched.
-This value must: be between <<limits-min-subgroup-size,minSubgroupSize>> and
-<<limits-max-subgroup-size,maxSubgroupSize>> and must: be uniform with
-<<shaders-scope-subgroup, subgroup scope>>.
-The value may: vary across a single draw call, and for fragment shaders may:
-vary across a single primitive.
-In compute dispatches, code:SubgroupSize must: be uniform with
-<<shaders-scope-command, command scope>>.
-+
-If the pipeline was created with a chained
-slink:VkPipelineShaderStageRequiredSubgroupSizeCreateInfoEXT structure, the
-code:SubgroupSize decorated variable will match
-<<pipelines-required-subgroup-size, pname:requiredSubgroupSize>>.
-+
-If the pipeline was not created with the
-ename:VK_PIPELINE_SHADER_STAGE_CREATE_ALLOW_VARYING_SUBGROUP_SIZE_BIT_EXT
-flag set and no slink:VkPipelineShaderStageRequiredSubgroupSizeCreateInfoEXT
-structure was chained, the
-endif::VK_EXT_subgroup_size_control[]
-ifndef::VK_EXT_subgroup_size_control[]
-The
-endif::VK_EXT_subgroup_size_control[]
-variable decorated with code:SubgroupSize will match <<limits-subgroup-size,
-pname:subgroupSize>>.
-+
-The maximum number of invocations that an implementation can support per
-subgroup is 128.
-
-.Valid Usage
-****
-  * [[VUID-{refpage}-SubgroupSize-04382]]
-    The variable decorated with code:SubgroupSize must: be declared using
-    the code:Input {StorageClass}
-  * [[VUID-{refpage}-SubgroupSize-04383]]
-    The variable decorated with code:SubgroupSize must: be declared as a
-    scalar 32-bit integer value
-****
---
-endif::VK_VERSION_1_1,VK_EXT_shader_subgroup_ballot[]
-
-ifdef::VK_NV_mesh_shader[]
-[[interfaces-builtin-variables-taskcount]]
-[open,refpage='TaskCountNV',desc='Number of mesh shader workgroups that will be generated',type='builtins']
---
-:refpage: TaskCountNV
-
-code:TaskCountNV::
-+
-Decorating a variable with the code:TaskCountNV decoration will make that
-variable contain the task count.
-The task count specifies the number of subsequent mesh shader workgroups
-that get generated upon completion of the task shader.
-
-.Valid Usage
-****
-  * [[VUID-{refpage}-TaskCountNV-04384]]
-    The code:TaskCountNV decoration must: be used only within the
-    code:TaskNV {ExecutionModel}
-  * [[VUID-{refpage}-TaskCountNV-04385]]
-    The variable decorated with code:TaskCountNV must: be declared using the
-    code:Output {StorageClass}
-  * [[VUID-{refpage}-TaskCountNV-04386]]
-    The variable decorated with code:TaskCountNV must: be declared as a
-    scalar 32-bit integer value
-****
---
-endif::VK_NV_mesh_shader[]
-
-[open,refpage='TessCoord',desc='Barycentric coordinate of a tessellated vertex within a patch',type='builtins']
---
-:refpage: TessCoord
-
-code:TessCoord::
-
-Decorating a variable with the code:TessCoord built-in decoration will make
-that variable contain the three-dimensional [eq]#(u,v,w)# barycentric
-coordinate of the tessellated vertex within the patch.
-[eq]#u#, [eq]#v#, and [eq]#w# are in the range [eq]#[0,1]# and vary linearly
-across the primitive being subdivided.
-For the tessellation modes of code:Quads or code:IsoLines, the third
-component is always zero.
-
-.Valid Usage
-****
-  * [[VUID-{refpage}-TessCoord-04387]]
-    The code:TessCoord decoration must: be used only within the
-    code:TessellationEvaluation {ExecutionModel}
-  * [[VUID-{refpage}-TessCoord-04388]]
-    The variable decorated with code:TessCoord must: be declared using the
-    code:Input {StorageClass}
-  * [[VUID-{refpage}-TessCoord-04389]]
-    The variable decorated with code:TessCoord must: be declared as a
-    three-component vector of 32-bit floating-point values
-****
---
-
-[open,refpage='TessLevelOuter',desc='Outer tessellation levels',type='builtins']
---
-:refpage: TessLevelOuter
-
-code:TessLevelOuter::
-
-Decorating a variable with the code:TessLevelOuter built-in decoration will
-make that variable contain the outer tessellation levels for the current
-patch.
-+
-In tessellation control shaders, the variable decorated with
-code:TessLevelOuter can: be written to, which controls the tessellation
-factors for the resulting patch.
-These values are used by the tessellator to control primitive tessellation
-and can: be read by tessellation evaluation shaders.
-+
-In tessellation evaluation shaders, the variable decorated with
-code:TessLevelOuter can: read the values written by the tessellation control
-shader.
-
-.Valid Usage
-****
-  * [[VUID-{refpage}-TessLevelOuter-04390]]
-    The code:TessLevelOuter decoration must: be used only within the
-    code:TessellationControl or code:TessellationEvaluation {ExecutionModel}
-  * [[VUID-{refpage}-TessLevelOuter-04391]]
-    The variable decorated with code:TessLevelOuter within the
-    code:TessellationControl {ExecutionModel} must: be declared using the
-    code:Output {StorageClass}
-  * [[VUID-{refpage}-TessLevelOuter-04392]]
-    The variable decorated with code:TessLevelOuter within the
-    code:TessellationEvaluation {ExecutionModel} must: be declared using the
-    code:Input {StorageClass}
-  * [[VUID-{refpage}-TessLevelOuter-04393]]
-    The variable decorated with code:TessLevelOuter must: be declared as an
-    array of size four, containing 32-bit floating-point values
-****
---
-
-[open,refpage='TessLevelInner',desc='Inner tessellation levels',type='builtins']
---
-:refpage: TessLevelInner
-
-code:TessLevelInner::
-
-Decorating a variable with the code:TessLevelInner built-in decoration will
-make that variable contain the inner tessellation levels for the current
-patch.
-+
-In tessellation control shaders, the variable decorated with
-code:TessLevelInner can: be written to, which controls the tessellation
-factors for the resulting patch.
-These values are used by the tessellator to control primitive tessellation
-and can: be read by tessellation evaluation shaders.
-+
-In tessellation evaluation shaders, the variable decorated with
-code:TessLevelInner can: read the values written by the tessellation control
-shader.
-
-.Valid Usage
-****
-  * [[VUID-{refpage}-TessLevelInner-04394]]
-    The code:TessLevelInner decoration must: be used only within the
-    code:TessellationControl or code:TessellationEvaluation {ExecutionModel}
-  * [[VUID-{refpage}-TessLevelInner-04395]]
-    The variable decorated with code:TessLevelInner within the
-    code:TessellationControl {ExecutionModel} must: be declared using the
-    code:Output {StorageClass}
-  * [[VUID-{refpage}-TessLevelInner-04396]]
-    The variable decorated with code:TessLevelInner within the
-    code:TessellationEvaluation {ExecutionModel} must: be declared using the
-    code:Input {StorageClass}
-  * [[VUID-{refpage}-TessLevelInner-04397]]
-    The variable decorated with code:TessLevelInner must: be declared as an
-    array of size two, containing 32-bit floating-point values
-****
---
-
-[open,refpage='VertexIndex',desc='Vertex index of a shader invocation',type='builtins']
---
-:refpage: VertexIndex
-
-code:VertexIndex::
-
-Decorating a variable with the code:VertexIndex built-in decoration will
-make that variable contain the index of the vertex that is being processed
-by the current vertex shader invocation.
-For non-indexed draws, this variable begins at the pname:firstVertex
-parameter to flink:vkCmdDraw or the pname:firstVertex member of a structure
-consumed by flink:vkCmdDrawIndirect and increments by one for each vertex in
-the draw.
-For indexed draws, its value is the content of the index buffer for the
-vertex plus the pname:vertexOffset parameter to flink:vkCmdDrawIndexed or
-the pname:vertexOffset member of the structure consumed by
-flink:vkCmdDrawIndexedIndirect.
-
-[NOTE]
-.Note
-====
-code:VertexIndex starts at the same starting value for each instance.
-====
-
-.Valid Usage
-****
-  * [[VUID-{refpage}-VertexIndex-04398]]
-    The code:VertexIndex decoration must: be used only within the
-    code:Vertex {ExecutionModel}
-  * [[VUID-{refpage}-VertexIndex-04399]]
-    The variable decorated with code:VertexIndex must: be declared using the
-    code:Input {StorageClass}
-  * [[VUID-{refpage}-VertexIndex-04400]]
-    The variable decorated with code:VertexIndex must: be declared as a
-    scalar 32-bit integer value
-****
---
-
-ifdef::VK_VERSION_1_1,VK_KHR_multiview[]
-[[interfaces-builtin-variables-viewindex]]
-[open,refpage='ViewIndex',desc='View index of a shader invocation',type='builtins']
---
-:refpage: ViewIndex
-
-code:ViewIndex::
-
-The code:ViewIndex decoration can: be applied to a shader input which will
-be filled with the index of the view that is being processed by the current
-shader invocation.
-+
-If multiview is enabled in the render pass, this value will be one of the
-bits set in the view mask of the subpass the pipeline is compiled against.
-If multiview is not enabled in the render pass, this value will be zero.
-
-.Valid Usage
-****
-  * [[VUID-{refpage}-ViewIndex-04401]]
-    The code:ViewIndex decoration must: not be used within the
-    code:GLCompute {ExecutionModel}
-  * [[VUID-{refpage}-ViewIndex-04402]]
-    The variable decorated with code:ViewIndex must: be declared using the
-    code:Input {StorageClass}
-  * [[VUID-{refpage}-ViewIndex-04403]]
-    The variable decorated with code:ViewIndex must: be declared as a scalar
-    32-bit integer value
-****
---
-endif::VK_VERSION_1_1,VK_KHR_multiview[]
-
-[[interfaces-builtin-variables-viewportindex]]
-[open,refpage='ViewportIndex',desc='Viewport index used',type='builtins']
---
-:refpage: ViewportIndex
-
-code:ViewportIndex::
-
-Decorating a variable with the code:ViewportIndex built-in decoration will
-make that variable contain the index of the viewport.
-+
-In a
-ifdef::VK_VERSION_1_2,VK_EXT_shader_viewport_index_layer,VK_NV_viewport_array2[]
-ifdef::VK_NV_mesh_shader[]
-mesh,
-endif::VK_NV_mesh_shader[]
-vertex, tessellation evaluation, or
-endif::VK_VERSION_1_2,VK_EXT_shader_viewport_index_layer,VK_NV_viewport_array2[]
-geometry shader, the variable decorated with code:ViewportIndex can be
-written to with the viewport index to which the primitive produced by that
-shader will be directed.
-+
-The selected viewport index is used to select the
-ifndef::VK_NV_scissor_exclusive[]
-viewport transform and
-endif::VK_NV_scissor_exclusive[]
-ifdef::VK_NV_scissor_exclusive[]
-viewport transform, scissor rectangle, and exclusive
-endif::VK_NV_scissor_exclusive[]
-scissor rectangle.
-ifdef::VK_VERSION_1_2,VK_EXT_shader_viewport_index_layer,VK_NV_viewport_array2[]
-+
-The last active
-_<<pipeline-graphics-subsets-pre-rasterization,pre-rasterization shader
-stage>>_ (in pipeline order) controls the code:ViewportIndex that is used.
-Outputs in previous shader stages are not used, even if the last stage fails
-to write the code:ViewportIndex.
-endif::VK_VERSION_1_2,VK_EXT_shader_viewport_index_layer,VK_NV_viewport_array2[]
-+
-If the last active
-<<pipeline-graphics-subsets-pre-rasterization,pre-rasterization shader
-stage>> shader entry point's interface does not include a variable decorated
-with code:ViewportIndex, then the first viewport is used.
-If a <<pipeline-graphics-subsets-pre-rasterization,pre-rasterization shader
-stage>> shader entry point's interface includes a variable decorated with
-code:ViewportIndex, it must: write the same value to code:ViewportIndex for
-all output vertices of a given primitive.
-+
-In a fragment shader, the variable decorated with code:ViewportIndex
-contains the viewport index of the primitive that the fragment invocation
-belongs to.
-
-.Valid Usage
-****
-  * [[VUID-{refpage}-ViewportIndex-04404]]
-    The code:ViewportIndex decoration must: be used only within the
-    code:MeshNV, code:Vertex, code:TessellationEvaluation, code:Geometry, or
-    code:Fragment {ExecutionModel}
-ifdef::VK_VERSION_1_2[]
-  * [[VUID-{refpage}-ViewportIndex-04405]]
-    If the <<features-shaderOutputViewportIndex,shaderOutputViewportIndex>>
-    feature is not enabled then the code:ViewportIndex decoration must: be
-    used only within the code:Geometry or code:Fragment {ExecutionModel}
-endif::VK_VERSION_1_2[]
-  * [[VUID-{refpage}-ViewportIndex-04406]]
-    The variable decorated with code:ViewportIndex within the code:MeshNV,
-    code:Vertex, code:TessellationEvaluation, or code:Geometry
-    {ExecutionModel} must: be declared using the code:Output {StorageClass}
-  * [[VUID-{refpage}-ViewportIndex-04407]]
-    The variable decorated with code:ViewportIndex within the code:Fragment
-    {ExecutionModel} must: be declared using the code:Input {StorageClass}
-  * [[VUID-{refpage}-ViewportIndex-04408]]
-    The variable decorated with code:ViewportIndex must: be declared as a
-    scalar 32-bit integer value
-****
---
-
-ifdef::VK_NV_viewport_array2[]
-[[interfaces-builtin-variables-viewportmask]]
-[open,refpage='ViewportMaskNV',desc='Mask of the viewports used',type='builtins']
---
-:refpage: ViewportMaskNV
-
-code:ViewportMaskNV::
-
-Decorating a variable with the code:ViewportMaskNV built-in decoration will
-make that variable contain the viewport mask.
-+
-In a
-ifdef::VK_NV_mesh_shader[]
-mesh,
-endif::VK_NV_mesh_shader[]
-vertex, tessellation evaluation, or geometry shader, the variable decorated
-with code:ViewportMaskNV can be written to with the mask of which viewports
-the primitive produced by that shader will directed.
-+
-The code:ViewportMaskNV variable must: be an array that has
-[eq]#{lceil}(sname:VkPhysicalDeviceLimits::pname:maxViewports / 32){rceil}#
-elements.
-When a shader writes to this variable, bit B of element M controls whether a
-primitive is emitted to viewport [eq]#32 {times} M {plus} B#.
-The viewports indicated by the mask are used to select the
-ifndef::VK_NV_scissor_exclusive[]
-viewport transform and
-endif::VK_NV_scissor_exclusive[]
-ifdef::VK_NV_scissor_exclusive[]
-viewport transform, scissor rectangle, and exclusive
-endif::VK_NV_scissor_exclusive[]
-scissor rectangle that a primitive will be transformed by.
-+
-The last active
-_<<pipeline-graphics-subsets-pre-rasterization,pre-rasterization shader
-stage>>_ (in pipeline order) controls the code:ViewportMaskNV that is used.
-Outputs in previous shader stages are not used, even if the last stage fails
-to write the code:ViewportMaskNV.
-When code:ViewportMaskNV is written by the final
-<<pipeline-graphics-subsets-pre-rasterization,pre-rasterization shader
-stage>>, any variable decorated with code:ViewportIndex in the fragment
-shader will have the index of the viewport that was used in generating that
-fragment.
-+
-If a <<pipeline-graphics-subsets-pre-rasterization,pre-rasterization shader
-stage>> shader entry point's interface includes a variable decorated with
-code:ViewportMaskNV, it must: write the same value to code:ViewportMaskNV
-for all output vertices of a given primitive.
-
-.Valid Usage
-****
-  * [[VUID-{refpage}-ViewportMaskNV-04409]]
-    The code:ViewportMaskNV decoration must: be used only within the
-    code:Vertex, code:MeshNV, code:TessellationEvaluation, or code:Geometry
-    {ExecutionModel}
-  * [[VUID-{refpage}-ViewportMaskNV-04410]]
-    The variable decorated with code:ViewportMaskNV must: be declared using
-    the code:Output {StorageClass}
-  * [[VUID-{refpage}-ViewportMaskNV-04411]]
-    The variable decorated with code:ViewportMaskNV must: be declared as an
-    array of 32-bit integer values
-****
---
-endif::VK_NV_viewport_array2[]
-
-ifdef::VK_NVX_multiview_per_view_attributes+VK_NV_viewport_array2[]
-[[interfaces-builtin-variables-viewportmaskperview]]
-[open,refpage='ViewportMaskPerViewNV',desc='Mask of viewports broadcast to per view',type='builtins']
---
-:refpage: ViewportMaskPerViewNV
-
-code:ViewportMaskPerViewNV::
-
-Decorating a variable with the code:ViewportMaskPerViewNV built-in
-decoration will make that variable contain the mask of viewports primitives
-are broadcast to, for each view.
-+
-The value written to an element of code:ViewportMaskPerViewNV in the last
-<<pipeline-graphics-subsets-pre-rasterization,pre-rasterization shader
-stage>> is a bitmask indicating which viewports the primitive will be
-directed to.
-The primitive will be broadcast to the viewport corresponding to each
-non-zero bit of the bitmask, and that viewport index is used to select the
-ifndef::VK_NV_scissor_exclusive[]
-viewport transform and
-endif::VK_NV_scissor_exclusive[]
-ifdef::VK_NV_scissor_exclusive[]
-viewport transform, scissor rectangle, and exclusive
-endif::VK_NV_scissor_exclusive[]
-scissor rectangle, for each view.
-The same values must: be written to all vertices in a given primitive, or
-else the set of viewports used for that primitive is undefined:.
-+
-Elements of the array correspond to views in a multiview subpass, and those
-elements corresponding to views in the view mask of the subpass the shader
-is compiled against will be used as the viewport mask value for those views.
-code:ViewportMaskPerViewNV output in an earlier
-<<pipeline-graphics-subsets-pre-rasterization,pre-rasterization shader
-stage>> is not available as an input in the subsequent
-<<pipeline-graphics-subsets-pre-rasterization,pre-rasterization shader
-stage>>.
-+
-Although code:ViewportMaskNV is an array, code:ViewportMaskPerViewNV is not
-a two-dimensional array.
-Instead, code:ViewportMaskPerViewNV is limited to 32 viewports.
-
-.Valid Usage
-****
-  * [[VUID-{refpage}-ViewportMaskPerViewNV-04412]]
-    The code:ViewportMaskPerViewNV decoration must: be used only within the
-    code:Vertex, code:MeshNV, code:TessellationControl,
-    code:TessellationEvaluation, or code:Geometry {ExecutionModel}
-  * [[VUID-{refpage}-ViewportMaskPerViewNV-04413]]
-    The variable decorated with code:ViewportMaskPerViewNV must: be declared
-    using the code:Output {StorageClass}
-  * [[VUID-{refpage}-ViewportMaskPerViewNV-04414]]
-    The variable decorated with code:ViewportMaskPerViewNV must: be declared
-    as an array of 32-bit integer values
-  * [[VUID-{refpage}-ViewportMaskPerViewNV-04415]]
-    The array decorated with code:ViewportMaskPerViewNV must: be a size less
-    than or equal to 32
-  * [[VUID-{refpage}-ViewportMaskPerViewNV-04416]]
-    The array decorated with code:ViewportMaskPerViewNV must: be a size
-    greater than the maximum view in the subpass's view mask
-  * [[VUID-{refpage}-ViewportMaskPerViewNV-04417]]
-    The array variable decorated with code:ViewportMaskPerViewNV must: only
-    be indexed by a constant or specialization constant
-****
---
-endif::VK_NVX_multiview_per_view_attributes+VK_NV_viewport_array2[]
-
-ifdef::VK_NV_shader_sm_builtins[]
-[[interfaces-builtin-variables-warpspersmnv]]
-[open,refpage='WarpsPerSMNV',desc='Number of warps per SM',type='builtins']
---
-:refpage: WarpsPerSMNV
-
-code:WarpsPerSMNV::
-
-Decorating a variable with the code:WarpsPerSMNV built-in decoration will
-make that variable contain the maximum number of warps executing on a SM.
-
-.Valid Usage
-****
-  * [[VUID-{refpage}-WarpsPerSMNV-04418]]
-    The variable decorated with code:WarpsPerSMNV must: be declared using
-    the code:Input {StorageClass}
-  * [[VUID-{refpage}-WarpsPerSMNV-04419]]
-    The variable decorated with code:WarpsPerSMNV must: be declared as a
-    scalar 32-bit integer value
-****
---
-
-[[interfaces-builtin-variables-warpidnv]]
-[open,refpage='WarpIDNV',desc='Warp ID within an SM of a shader invocation',type='builtins']
---
-:refpage: WarpIDNV
-
-code:WarpIDNV::
-
-Decorating a variable with the code:WarpIDNV built-in decoration will make
-that variable contain the ID of the warp on a SM on which the current shader
-invocation is running.
-This variable is in the range [eq]#[0, code:WarpsPerSMNV-1]#.
-
-.Valid Usage
-****
-  * [[VUID-{refpage}-WarpIDNV-04420]]
-    The variable decorated with code:WarpIDNV must: be declared using the
-    code:Input {StorageClass}
-  * [[VUID-{refpage}-WarpIDNV-04421]]
-    The variable decorated with code:WarpIDNV must: be declared as a scalar
-    32-bit integer value
-****
---
-endif::VK_NV_shader_sm_builtins[]
-
-[open,refpage='WorkgroupId',desc='Workgroup ID of a shader',type='builtins']
---
-:refpage: WorkgroupId
-
-code:WorkgroupId::
-
-Decorating a variable with the code:WorkgroupId built-in decoration will
-make that variable contain the global workgroup that the current invocation
-is a member of.
-Each component ranges from a base value to a [eq]#base {plus} count# value,
-based on the parameters passed into the dispatching commands.
-
-.Valid Usage
-****
-  * [[VUID-{refpage}-WorkgroupId-04422]]
-    The code:WorkgroupId decoration must: be used only within the
-    code:GLCompute, code:MeshNV, or code:TaskNV {ExecutionModel}
-  * [[VUID-{refpage}-WorkgroupId-04423]]
-    The variable decorated with code:WorkgroupId must: be declared using the
-    code:Input {StorageClass}
-  * [[VUID-{refpage}-WorkgroupId-04424]]
-    The variable decorated with code:WorkgroupId must: be declared as a
-    three-component vector of 32-bit integer values
-****
---
-
-[open,refpage='WorkgroupSize',desc='Size of a workgroup',type='builtins']
---
-:refpage: WorkgroupSize
-
-code:WorkgroupSize::
-
-Decorating an object with the code:WorkgroupSize built-in decoration will
-make that object contain the dimensions of a local workgroup.
-If an object is decorated with the code:WorkgroupSize decoration, this takes
-precedence over any code:LocalSize
-ifdef::VK_KHR_maintenance4[or code:LocalSizeId]
-execution mode.
-
-.Valid Usage
-****
-  * [[VUID-{refpage}-WorkgroupSize-04425]]
-    The code:WorkgroupSize decoration must: be used only within the
-    code:GLCompute, code:MeshNV, or code:TaskNV {ExecutionModel}
-  * [[VUID-{refpage}-WorkgroupSize-04426]]
-    The variable decorated with code:WorkgroupSize must: be a specialization
-    constant or a constant
-  * [[VUID-{refpage}-WorkgroupSize-04427]]
-    The variable decorated with code:WorkgroupSize must: be declared as a
-    three-component vector of 32-bit integer values
-****
---
-
-ifdef::VK_NV_ray_tracing,VK_KHR_ray_tracing_pipeline[]
-[[interfaces-builtin-variables-worldraydirection]]
-[open,refpage='WorldRayDirectionKHR',desc='Ray direction in world space',type='builtins']
---
-:refpage: WorldRayDirectionKHR
-
-code:WorldRayDirectionKHR::
-
-A variable decorated with the code:WorldRayDirectionKHR decoration will
-specify the direction of the ray being processed, in world space.
-The value is given by the parameter passed into code:OpTraceRayKHR.
-
-.Valid Usage
-****
-  * [[VUID-{refpage}-WorldRayDirectionKHR-04428]]
-    The code:WorldRayDirectionKHR decoration must: be used only within the
-    code:IntersectionKHR, code:AnyHitKHR, code:ClosestHitKHR, or
-    code:MissKHR {ExecutionModel}
-  * [[VUID-{refpage}-WorldRayDirectionKHR-04429]]
-    The variable decorated with code:WorldRayDirectionKHR must: be declared
-    using the code:Input {StorageClass}
-  * [[VUID-{refpage}-WorldRayDirectionKHR-04430]]
-    The variable decorated with code:WorldRayDirectionKHR must: be declared
-    as a three-component vector of 32-bit floating-point values
-****
---
-
-[[interfaces-builtin-variables-worldrayorigin]]
-[open,refpage='WorldRayOriginKHR',desc='Ray origin in world space',type='builtins']
---
-:refpage: WorldRayOriginKHR
-
-code:WorldRayOriginKHR::
-
-A variable decorated with the code:WorldRayOriginKHR decoration will specify
-the origin of the ray being processed, in world space.
-The value is given by the parameter passed into code:OpTraceRayKHR.
-
-.Valid Usage
-****
-  * [[VUID-{refpage}-WorldRayOriginKHR-04431]]
-    The code:WorldRayOriginKHR decoration must: be used only within the
-    code:IntersectionKHR, code:AnyHitKHR, code:ClosestHitKHR, or
-    code:MissKHR {ExecutionModel}
-  * [[VUID-{refpage}-WorldRayOriginKHR-04432]]
-    The variable decorated with code:WorldRayOriginKHR must: be declared
-    using the code:Input {StorageClass}
-  * [[VUID-{refpage}-WorldRayOriginKHR-04433]]
-    The variable decorated with code:WorldRayOriginKHR must: be declared as
-    a three-component vector of 32-bit floating-point values
-****
---
-
-[[interfaces-builtin-variables-worldtoobject]]
-[open,refpage='WorldToObjectKHR',desc='Transformation matrix from world to object space',type='builtins']
---
-:refpage: WorldToObjectKHR
-
-code:WorldToObjectKHR::
-
-A variable decorated with the code:WorldToObjectKHR decoration will contain
-the current world-to-object transformation matrix, which is determined by
-the instance of the current intersection.
-
-.Valid Usage
-****
-  * [[VUID-{refpage}-WorldToObjectKHR-04434]]
-    The code:WorldToObjectKHR decoration must: be used only within the
-    code:IntersectionKHR, code:AnyHitKHR, or code:ClosestHitKHR
-    {ExecutionModel}
-  * [[VUID-{refpage}-WorldToObjectKHR-04435]]
-    The variable decorated with code:WorldToObjectKHR must: be declared
-    using the code:Input {StorageClass}
-  * [[VUID-{refpage}-WorldToObjectKHR-04436]]
-    The variable decorated with code:WorldToObjectKHR must: be declared as a
-    matrix with four columns of three-component vectors of 32-bit
-    floating-point values
-****
---
-endif::VK_NV_ray_tracing,VK_KHR_ray_tracing_pipeline[]
diff --git a/registry/vulkan/chapters/introduction.txt b/registry/vulkan/chapters/introduction.txt
deleted file mode 100644
index a7e2e1b..0000000
--- a/registry/vulkan/chapters/introduction.txt
+++ /dev/null
@@ -1,169 +0,0 @@
-// Copyright 2015-2021 The Khronos Group, Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-
-[[introduction]]
-= Introduction
-
-This document, referred to as the "`Vulkan Specification`" or just the
-"`Specification`" hereafter, describes the Vulkan Application Programming
-Interface (API).
-Vulkan is a http://www.open-std.org/jtc1/sc22/wg14/www/standards[C99] API
-designed for explicit control of low-level graphics and compute
-functionality.
-
-The canonical version of the Specification is available in the official
-https://www.khronos.org/registry/vulkan/[Vulkan Registry]
-(https://www.khronos.org/registry/vulkan/).
-The source files used to generate the Vulkan specification are stored in the
-https://github.com/KhronosGroup/Vulkan-Docs[Vulkan Documentation Repository]
-(https://github.com/KhronosGroup/Vulkan-Docs).
-The source repository additionally has a public issue tracker and allows the
-submission of pull requests that improve the specification.
-
-
-[[introduction-conventions]]
-== Document Conventions
-
-The Vulkan specification is intended for use by both implementors of the API
-and application developers seeking to make use of the API, forming a
-contract between these parties.
-Specification text may address either party; typically the intended audience
-can be inferred from context, though some sections are defined to address
-only one of these parties.
-(For example, <<fundamentals-validusage>> sections only address application
-developers).
-Any requirements, prohibitions, recommendations or options defined by
-<<introduction-normative-terminology, normative terminology>> are imposed
-only on the audience of that text.
-
-[NOTE]
-.Note
-====
-Structure and enumerated types defined in extensions that were promoted to
-core in a later version of Vulkan are now defined in terms of the equivalent
-Vulkan core interfaces.
-This affects the Vulkan Specification, the Vulkan header files, and the
-corresponding XML Registry.
-====
-
-
-[[introduction-informative-language]]
-=== Informative Language
-
-Some language in the specification is purely informative, intended to give
-background or suggestions to implementors or developers.
-
-If an entire chapter or section contains only informative language, its
-title will be suffixed with "`(Informative)`".
-
-All NOTEs are implicitly informative.
-
-
-[[introduction-normative-terminology]]
-=== Normative Terminology
-
-Within this specification, the key words *must*, *required*, *should*,
-*recommended*, *may*, and *optional* are to be interpreted as described in
-https://www.ietf.org/rfc/rfc2119.txt[RFC 2119 - Key words for use in RFCs to
-Indicate Requirement Levels] (https://www.ietf.org/rfc/rfc2119.txt).
-The additional key word *optionally* is an alternate form of *optional*, for
-use where grammatically appropriate.
-
-These key words are highlighted in the specification for clarity.
-In text addressing application developers, their use expresses requirements
-that apply to application behavior.
-In text addressing implementors, their use expresses requirements that apply
-to implementations.
-
-In text addressing application developers, the additional key words *can*
-and *cannot* are to be interpreted as describing the capabilities of an
-application, as follows:
-
-*can*::
-This word means that the application is able to perform the action
-described.
-
-*cannot*::
-This word means that the API and/or the execution environment provide no
-mechanism through which the application can express or accomplish the action
-described.
-
-These key words are never used in text addressing implementors.
-
-[NOTE]
-.Note
-==================
-There is an important distinction between *cannot* and *must not*, as used
-in this Specification.
-*Cannot* means something the application literally is unable to express or
-accomplish through the API, while *must not* means something that the
-application is capable of expressing through the API, but that the
-consequences of doing so are undefined: and potentially unrecoverable for
-the implementation (see <<fundamentals-validusage>>).
-==================
-
-Unless otherwise noted in the section heading, all sections and appendices
-in this document are normative.
-
-
-[[introduction-technical-terminology]]
-=== Technical Terminology
-
-The Vulkan Specification makes use of common engineering and graphics terms
-such as *Pipeline*, *Shader*, and *Host* to identify and describe Vulkan API
-constructs and their attributes, states, and behaviors.
-The <<glossary,Glossary>> defines the basic meanings of these terms in the
-context of the Specification.
-The Specification text provides fuller definitions of the terms and may
-elaborate, extend, or clarify the <<glossary,Glossary>> definitions.
-When a term defined in the <<glossary,Glossary>> is used in normative
-language within the Specification, the definitions within the Specification
-govern and supersede any meanings the terms may have in other technical
-contexts (i.e. outside the Specification).
-
-
-[[introduction-normative-references]]
-=== Normative References
-
-References to external documents are considered normative references if the
-Specification uses any of the normative terms defined in
-<<introduction-normative-terminology>> to refer to them or their
-requirements, either as a whole or in part.
-
-The following documents are referenced by normative sections of the
-specification:
-
-[[ieee-754]]
-IEEE.
-August, 2008.
-_IEEE Standard for Floating-Point Arithmetic_.
-IEEE Std 754-2008.
-https://dx.doi.org/10.1109/IEEESTD.2008.4610935 .
-
-[[data-format]] Andrew Garrard.
-_Khronos Data Format Specification, version 1.3_.
-https://www.khronos.org/registry/DataFormat/specs/1.3/dataformat.1.3.html .
-
-[[spirv-extended]] John Kessenich.
-_SPIR-V Extended Instructions for GLSL, Version 1.00_ (February 10, 2016).
-https://www.khronos.org/registry/spir-v/ .
-
-[[spirv-spec]] John Kessenich, Boaz Ouriel, and Raun Krisch.
-_SPIR-V Specification, Version 1.5, Revision 3, Unified_ (April 24, 2020).
-https://www.khronos.org/registry/spir-v/ .
-
-[[vulkan-registry]] Jon Leech.
-_The Khronos Vulkan API Registry_.
-https://www.khronos.org/registry/vulkan/specs/1.2/registry.html .
-
-[[vulkan-styleguide]] Jon Leech and Tobias Hector.
-_Vulkan Documentation and Extensions: Procedures and Conventions_.
-https://www.khronos.org/registry/vulkan/specs/1.2/styleguide.html .
-
-[[LoaderInterfaceArchitecture]]
-_Architecture of the Vulkan Loader Interfaces_ (October, 2021).
-https://github.com/KhronosGroup/Vulkan-Loader/blob/master/docs/LoaderInterfaceArchitecture.md
-.
-
diff --git a/registry/vulkan/chapters/limits.txt b/registry/vulkan/chapters/limits.txt
deleted file mode 100644
index 2682910..0000000
--- a/registry/vulkan/chapters/limits.txt
+++ /dev/null
@@ -1,3873 +0,0 @@
-// Copyright 2015-2021 The Khronos Group, Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-// This text fragment is used many times in the Devices and Queues, and
-// Limits chapters for different behavior, property, and limit queries.
-ifdef::hidden[]
-// tag::limits_desc[]
-If the sname:{refpage} structure is included in the pname:pNext chain of the
-slink:VkPhysicalDeviceProperties2 structure passed to
-flink:vkGetPhysicalDeviceProperties2, it is filled in with each
-corresponding implementation-dependent property.
-// end::limits_desc[]
-endif::hidden[]
-
-
-[[limits]]
-= Limits
-
-_Limits_ are implementation-dependent minimums, maximums, and other device
-characteristics that an application may: need to be aware of.
-
-ifdef::VK_VERSION_1_1,VK_KHR_get_physical_device_properties2[]
-[NOTE]
-.Note
-====
-Limits are reported via the basic slink:VkPhysicalDeviceLimits structure as
-well as the extensible structure sname:VkPhysicalDeviceProperties2, which
-was added in `apiext:VK_KHR_get_physical_device_properties2` and included in
-Vulkan 1.1.
-When limits are added in future Vulkan versions or extensions, each
-extension should: introduce one new limit structure, if needed.
-This structure can: be added to the pname:pNext chain of the
-sname:VkPhysicalDeviceProperties2 structure.
-====
-endif::VK_VERSION_1_1,VK_KHR_get_physical_device_properties2[]
-
-[open,refpage='VkPhysicalDeviceLimits',desc='Structure reporting implementation-dependent physical device limits',type='structs']
---
-The sname:VkPhysicalDeviceLimits structure is defined as:
-
-include::{generated}/api/structs/VkPhysicalDeviceLimits.txt[]
-
-The sname:VkPhysicalDeviceLimits are properties of the physical device.
-These are available in the pname:limits member of the
-slink:VkPhysicalDeviceProperties structure which is returned from
-flink:vkGetPhysicalDeviceProperties.
-
-  * [[limits-maxImageDimension1D]] pname:maxImageDimension1D is the largest
-    dimension (pname:width) that is guaranteed to be supported for all
-    images created with an pname:imageType of ename:VK_IMAGE_TYPE_1D.
-    Some combinations of image parameters (format, usage, etc.) may: allow
-    support for larger dimensions, which can: be queried using
-    flink:vkGetPhysicalDeviceImageFormatProperties.
-  * [[limits-maxImageDimension2D]] pname:maxImageDimension2D is the largest
-    dimension (pname:width or pname:height) that is guaranteed to be
-    supported for all images created with an pname:imageType of
-    ename:VK_IMAGE_TYPE_2D and without
-    ename:VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT set in pname:flags.
-    Some combinations of image parameters (format, usage, etc.) may: allow
-    support for larger dimensions, which can: be queried using
-    flink:vkGetPhysicalDeviceImageFormatProperties.
-  * [[limits-maxImageDimension3D]] pname:maxImageDimension3D is the largest
-    dimension (pname:width, pname:height, or pname:depth) that is guaranteed
-    to be supported for all images created with an pname:imageType of
-    ename:VK_IMAGE_TYPE_3D.
-    Some combinations of image parameters (format, usage, etc.) may: allow
-    support for larger dimensions, which can: be queried using
-    flink:vkGetPhysicalDeviceImageFormatProperties.
-  * [[limits-maxImageDimensionCube]] pname:maxImageDimensionCube is the
-    largest dimension (pname:width or pname:height) that is guaranteed to be
-    supported for all images created with an pname:imageType of
-    ename:VK_IMAGE_TYPE_2D and with
-    ename:VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT set in pname:flags.
-    Some combinations of image parameters (format, usage, etc.) may: allow
-    support for larger dimensions, which can: be queried using
-    flink:vkGetPhysicalDeviceImageFormatProperties.
-  * [[limits-maxImageArrayLayers]] pname:maxImageArrayLayers is the maximum
-    number of layers (pname:arrayLayers) for an image.
-  * [[limits-maxTexelBufferElements]] pname:maxTexelBufferElements is the
-    maximum number of addressable texels for a buffer view created on a
-    buffer which was created with the
-    ename:VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT or
-    ename:VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT set in the pname:usage
-    member of the slink:VkBufferCreateInfo structure.
-  * [[limits-maxUniformBufferRange]] pname:maxUniformBufferRange is the
-    maximum value that can: be specified in the pname:range member of a
-    slink:VkDescriptorBufferInfo structure passed to
-    flink:vkUpdateDescriptorSets for descriptors of type
-    ename:VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER or
-    ename:VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC.
-  * [[limits-maxStorageBufferRange]] pname:maxStorageBufferRange is the
-    maximum value that can: be specified in the pname:range member of a
-    slink:VkDescriptorBufferInfo structure passed to
-    flink:vkUpdateDescriptorSets for descriptors of type
-    ename:VK_DESCRIPTOR_TYPE_STORAGE_BUFFER or
-    ename:VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC.
-  * [[limits-maxPushConstantsSize]] pname:maxPushConstantsSize is the
-    maximum size, in bytes, of the pool of push constant memory.
-    For each of the push constant ranges indicated by the
-    pname:pPushConstantRanges member of the slink:VkPipelineLayoutCreateInfo
-    structure, [eq]#(pname:offset {plus} pname:size)# must: be less than or
-    equal to this limit.
-  * [[limits-maxMemoryAllocationCount]] pname:maxMemoryAllocationCount is
-    the maximum number of device memory allocations, as created by
-    flink:vkAllocateMemory, which can: simultaneously exist.
-  * [[limits-maxSamplerAllocationCount]] pname:maxSamplerAllocationCount is
-    the maximum number of sampler objects, as created by
-    flink:vkCreateSampler, which can: simultaneously exist on a device.
-  * [[limits-bufferImageGranularity]] pname:bufferImageGranularity is the
-    granularity, in bytes, at which buffer or linear image resources, and
-    optimal image resources can: be bound to adjacent offsets in the same
-    sname:VkDeviceMemory object without aliasing.
-    See <<resources-bufferimagegranularity,Buffer-Image Granularity>> for
-    more details.
-  * [[limits-sparseAddressSpaceSize]] pname:sparseAddressSpaceSize is the
-    total amount of address space available, in bytes, for sparse memory
-    resources.
-    This is an upper bound on the sum of the sizes of all sparse resources,
-    regardless of whether any memory is bound to them.
-  * [[limits-maxBoundDescriptorSets]] pname:maxBoundDescriptorSets is the
-    maximum number of descriptor sets that can: be simultaneously used by a
-    pipeline.
-    All code:DescriptorSet decorations in shader modules must: have a value
-    less than pname:maxBoundDescriptorSets.
-    See <<descriptorsets-sets>>.
-  * [[limits-maxPerStageDescriptorSamplers]]
-    pname:maxPerStageDescriptorSamplers is the maximum number of samplers
-    that can: be accessible to a single shader stage in a pipeline layout.
-    Descriptors with a type of ename:VK_DESCRIPTOR_TYPE_SAMPLER or
-    ename:VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER count against this
-    limit.
-ifdef::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
-    Only descriptors in descriptor set layouts created without the
-    ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT bit set
-    count against this limit.
-endif::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
-    A descriptor is accessible to a shader stage when the pname:stageFlags
-    member of the sname:VkDescriptorSetLayoutBinding structure has the bit
-    for that shader stage set.
-    See <<descriptorsets-sampler>> and
-    <<descriptorsets-combinedimagesampler>>.
-  * [[limits-maxPerStageDescriptorUniformBuffers]]
-    pname:maxPerStageDescriptorUniformBuffers is the maximum number of
-    uniform buffers that can: be accessible to a single shader stage in a
-    pipeline layout.
-    Descriptors with a type of ename:VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER or
-    ename:VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC count against this
-    limit.
-ifdef::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
-    Only descriptors in descriptor set layouts created without the
-    ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT bit set
-    count against this limit.
-endif::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
-    A descriptor is accessible to a shader stage when the pname:stageFlags
-    member of the sname:VkDescriptorSetLayoutBinding structure has the bit
-    for that shader stage set.
-    See <<descriptorsets-uniformbuffer>> and
-    <<descriptorsets-uniformbufferdynamic>>.
-  * [[limits-maxPerStageDescriptorStorageBuffers]]
-    pname:maxPerStageDescriptorStorageBuffers is the maximum number of
-    storage buffers that can: be accessible to a single shader stage in a
-    pipeline layout.
-    Descriptors with a type of ename:VK_DESCRIPTOR_TYPE_STORAGE_BUFFER or
-    ename:VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC count against this
-    limit.
-ifdef::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
-    Only descriptors in descriptor set layouts created without the
-    ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT bit set
-    count against this limit.
-endif::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
-    A descriptor is accessible to a pipeline shader stage when the
-    pname:stageFlags member of the sname:VkDescriptorSetLayoutBinding
-    structure has the bit for that shader stage set.
-    See <<descriptorsets-storagebuffer>> and
-    <<descriptorsets-storagebufferdynamic>>.
-  * [[limits-maxPerStageDescriptorSampledImages]]
-    pname:maxPerStageDescriptorSampledImages is the maximum number of
-    sampled images that can: be accessible to a single shader stage in a
-    pipeline layout.
-    Descriptors with a type of
-    ename:VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER,
-    ename:VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE, or
-    ename:VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER count against this limit.
-ifdef::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
-    Only descriptors in descriptor set layouts created without the
-    ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT bit set
-    count against this limit.
-endif::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
-    A descriptor is accessible to a pipeline shader stage when the
-    pname:stageFlags member of the sname:VkDescriptorSetLayoutBinding
-    structure has the bit for that shader stage set.
-    See <<descriptorsets-combinedimagesampler>>,
-    <<descriptorsets-sampledimage>>, and
-    <<descriptorsets-uniformtexelbuffer>>.
-  * [[limits-maxPerStageDescriptorStorageImages]]
-    pname:maxPerStageDescriptorStorageImages is the maximum number of
-    storage images that can: be accessible to a single shader stage in a
-    pipeline layout.
-    Descriptors with a type of ename:VK_DESCRIPTOR_TYPE_STORAGE_IMAGE, or
-    ename:VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER count against this limit.
-ifdef::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
-    Only descriptors in descriptor set layouts created without the
-    ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT bit set
-    count against this limit.
-endif::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
-    A descriptor is accessible to a pipeline shader stage when the
-    pname:stageFlags member of the sname:VkDescriptorSetLayoutBinding
-    structure has the bit for that shader stage set.
-    See <<descriptorsets-storageimage>>, and
-    <<descriptorsets-storagetexelbuffer>>.
-  * [[limits-maxPerStageDescriptorInputAttachments]]
-    pname:maxPerStageDescriptorInputAttachments is the maximum number of
-    input attachments that can: be accessible to a single shader stage in a
-    pipeline layout.
-    Descriptors with a type of ename:VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT
-    count against this limit.
-ifdef::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
-    Only descriptors in descriptor set layouts created without the
-    ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT bit set
-    count against this limit.
-endif::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
-    A descriptor is accessible to a pipeline shader stage when the
-    pname:stageFlags member of the sname:VkDescriptorSetLayoutBinding
-    structure has the bit for that shader stage set.
-    These are only supported for the fragment stage.
-    See <<descriptorsets-inputattachment>>.
-  * [[limits-maxPerStageResources]] pname:maxPerStageResources is the
-    maximum number of resources that can: be accessible to a single shader
-    stage in a pipeline layout.
-    Descriptors with a type of
-    ename:VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER,
-    ename:VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE,
-    ename:VK_DESCRIPTOR_TYPE_STORAGE_IMAGE,
-    ename:VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER,
-    ename:VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER,
-    ename:VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER,
-    ename:VK_DESCRIPTOR_TYPE_STORAGE_BUFFER,
-    ename:VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC,
-    ename:VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC, or
-    ename:VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT count against this limit.
-ifdef::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
-    Only descriptors in descriptor set layouts created without the
-    ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT bit set
-    count against this limit.
-endif::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
-    For the fragment shader stage the framebuffer color attachments also
-    count against this limit.
-  * [[limits-maxDescriptorSetSamplers]] pname:maxDescriptorSetSamplers is
-    the maximum number of samplers that can: be included in a pipeline
-    layout.
-    Descriptors with a type of ename:VK_DESCRIPTOR_TYPE_SAMPLER or
-    ename:VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER count against this
-    limit.
-ifdef::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
-    Only descriptors in descriptor set layouts created without the
-    ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT bit set
-    count against this limit.
-endif::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
-    See <<descriptorsets-sampler>> and
-    <<descriptorsets-combinedimagesampler>>.
-  * [[limits-maxDescriptorSetUniformBuffers]]
-    pname:maxDescriptorSetUniformBuffers is the maximum number of uniform
-    buffers that can: be included in a pipeline layout.
-    Descriptors with a type of ename:VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER or
-    ename:VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC count against this
-    limit.
-ifdef::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
-    Only descriptors in descriptor set layouts created without the
-    ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT bit set
-    count against this limit.
-endif::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
-    See <<descriptorsets-uniformbuffer>> and
-    <<descriptorsets-uniformbufferdynamic>>.
-  * [[limits-maxDescriptorSetUniformBuffersDynamic]]
-    pname:maxDescriptorSetUniformBuffersDynamic is the maximum number of
-    dynamic uniform buffers that can: be included in a pipeline layout.
-    Descriptors with a type of
-    ename:VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC count against this
-    limit.
-ifdef::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
-    Only descriptors in descriptor set layouts created without the
-    ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT bit set
-    count against this limit.
-endif::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
-    See <<descriptorsets-uniformbufferdynamic>>.
-  * [[limits-maxDescriptorSetStorageBuffers]]
-    pname:maxDescriptorSetStorageBuffers is the maximum number of storage
-    buffers that can: be included in a pipeline layout.
-    Descriptors with a type of ename:VK_DESCRIPTOR_TYPE_STORAGE_BUFFER or
-    ename:VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC count against this
-    limit.
-ifdef::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
-    Only descriptors in descriptor set layouts created without the
-    ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT bit set
-    count against this limit.
-endif::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
-    See <<descriptorsets-storagebuffer>> and
-    <<descriptorsets-storagebufferdynamic>>.
-  * [[limits-maxDescriptorSetStorageBuffersDynamic]]
-    pname:maxDescriptorSetStorageBuffersDynamic is the maximum number of
-    dynamic storage buffers that can: be included in a pipeline layout.
-    Descriptors with a type of
-    ename:VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC count against this
-    limit.
-ifdef::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
-    Only descriptors in descriptor set layouts created without the
-    ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT bit set
-    count against this limit.
-endif::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
-    See <<descriptorsets-storagebufferdynamic>>.
-  * [[limits-maxDescriptorSetSampledImages]]
-    pname:maxDescriptorSetSampledImages is the maximum number of sampled
-    images that can: be included in a pipeline layout.
-    Descriptors with a type of
-    ename:VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER,
-    ename:VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE, or
-    ename:VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER count against this limit.
-ifdef::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
-    Only descriptors in descriptor set layouts created without the
-    ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT bit set
-    count against this limit.
-endif::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
-    See <<descriptorsets-combinedimagesampler>>,
-    <<descriptorsets-sampledimage>>, and
-    <<descriptorsets-uniformtexelbuffer>>.
-  * [[limits-maxDescriptorSetStorageImages]]
-    pname:maxDescriptorSetStorageImages is the maximum number of storage
-    images that can: be included in a pipeline layout.
-    Descriptors with a type of ename:VK_DESCRIPTOR_TYPE_STORAGE_IMAGE, or
-    ename:VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER count against this limit.
-ifdef::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
-    Only descriptors in descriptor set layouts created without the
-    ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT bit set
-    count against this limit.
-endif::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
-    See <<descriptorsets-storageimage>>, and
-    <<descriptorsets-storagetexelbuffer>>.
-  * [[limits-maxDescriptorSetInputAttachments]]
-    pname:maxDescriptorSetInputAttachments is the maximum number of input
-    attachments that can: be included in a pipeline layout.
-    Descriptors with a type of ename:VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT
-    count against this limit.
-ifdef::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
-    Only descriptors in descriptor set layouts created without the
-    ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT bit set
-    count against this limit.
-endif::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
-    See <<descriptorsets-inputattachment>>.
-  * [[limits-maxVertexInputAttributes]] pname:maxVertexInputAttributes is
-    the maximum number of vertex input attributes that can: be specified for
-    a graphics pipeline.
-    These are described in the array of
-    sname:VkVertexInputAttributeDescription structures that are provided at
-    graphics pipeline creation time via the
-    pname:pVertexAttributeDescriptions member of the
-    slink:VkPipelineVertexInputStateCreateInfo structure.
-    See <<fxvertex-attrib>> and <<fxvertex-input>>.
-  * [[limits-maxVertexInputBindings]] pname:maxVertexInputBindings is the
-    maximum number of vertex buffers that can: be specified for providing
-    vertex attributes to a graphics pipeline.
-    These are described in the array of
-    sname:VkVertexInputBindingDescription structures that are provided at
-    graphics pipeline creation time via the pname:pVertexBindingDescriptions
-    member of the slink:VkPipelineVertexInputStateCreateInfo structure.
-    The pname:binding member of sname:VkVertexInputBindingDescription must:
-    be less than this limit.
-    See <<fxvertex-input>>.
-  * [[limits-maxVertexInputAttributeOffset]]
-    pname:maxVertexInputAttributeOffset is the maximum vertex input
-    attribute offset that can: be added to the vertex input binding stride.
-    The pname:offset member of the sname:VkVertexInputAttributeDescription
-    structure must: be less than or equal to this limit.
-    See <<fxvertex-input>>.
-  * [[limits-maxVertexInputBindingStride]] pname:maxVertexInputBindingStride
-    is the maximum vertex input binding stride that can: be specified in a
-    vertex input binding.
-    The pname:stride member of the sname:VkVertexInputBindingDescription
-    structure must: be less than or equal to this limit.
-    See <<fxvertex-input>>.
-  * [[limits-maxVertexOutputComponents]] pname:maxVertexOutputComponents is
-    the maximum number of components of output variables which can: be
-    output by a vertex shader.
-    See <<shaders-vertex>>.
-  * [[limits-maxTessellationGenerationLevel]]
-    pname:maxTessellationGenerationLevel is the maximum tessellation
-    generation level supported by the fixed-function tessellation primitive
-    generator.
-    See <<tessellation>>.
-  * [[limits-maxTessellationPatchSize]] pname:maxTessellationPatchSize is
-    the maximum patch size, in vertices, of patches that can: be processed
-    by the tessellation control shader and tessellation primitive generator.
-    The pname:patchControlPoints member of the
-    slink:VkPipelineTessellationStateCreateInfo structure specified at
-    pipeline creation time and the value provided in the code:OutputVertices
-    execution mode of shader modules must: be less than or equal to this
-    limit.
-    See <<tessellation>>.
-  * [[limits-maxTessellationControlPerVertexInputComponents]]
-    pname:maxTessellationControlPerVertexInputComponents is the maximum
-    number of components of input variables which can: be provided as
-    per-vertex inputs to the tessellation control shader stage.
-  * [[limits-maxTessellationControlPerVertexOutputComponents]]
-    pname:maxTessellationControlPerVertexOutputComponents is the maximum
-    number of components of per-vertex output variables which can: be output
-    from the tessellation control shader stage.
-  * [[limits-maxTessellationControlPerPatchOutputComponents]]
-    pname:maxTessellationControlPerPatchOutputComponents is the maximum
-    number of components of per-patch output variables which can: be output
-    from the tessellation control shader stage.
-  * [[limits-maxTessellationControlTotalOutputComponents]]
-    pname:maxTessellationControlTotalOutputComponents is the maximum total
-    number of components of per-vertex and per-patch output variables which
-    can: be output from the tessellation control shader stage.
-  * [[limits-maxTessellationEvaluationInputComponents]]
-    pname:maxTessellationEvaluationInputComponents is the maximum number of
-    components of input variables which can: be provided as per-vertex
-    inputs to the tessellation evaluation shader stage.
-  * [[limits-maxTessellationEvaluationOutputComponents]]
-    pname:maxTessellationEvaluationOutputComponents is the maximum number of
-    components of per-vertex output variables which can: be output from the
-    tessellation evaluation shader stage.
-  * [[limits-maxGeometryShaderInvocations]]
-    pname:maxGeometryShaderInvocations is the maximum invocation count
-    supported for instanced geometry shaders.
-    The value provided in the code:Invocations execution mode of shader
-    modules must: be less than or equal to this limit.
-    See <<geometry>>.
-  * [[limits-maxGeometryInputComponents]] pname:maxGeometryInputComponents
-    is the maximum number of components of input variables which can: be
-    provided as inputs to the geometry shader stage.
-  * [[limits-maxGeometryOutputComponents]] pname:maxGeometryOutputComponents
-    is the maximum number of components of output variables which can: be
-    output from the geometry shader stage.
-  * [[limits-maxGeometryOutputVertices]] pname:maxGeometryOutputVertices is
-    the maximum number of vertices which can: be emitted by any geometry
-    shader.
-  * [[limits-maxGeometryTotalOutputComponents]]
-    pname:maxGeometryTotalOutputComponents is the maximum total number of
-    components of output variables, across all emitted vertices, which can:
-    be output from the geometry shader stage.
-  * [[limits-maxFragmentInputComponents]] pname:maxFragmentInputComponents
-    is the maximum number of components of input variables which can: be
-    provided as inputs to the fragment shader stage.
-  * [[limits-maxFragmentOutputAttachments]]
-    pname:maxFragmentOutputAttachments is the maximum number of output
-    attachments which can: be written to by the fragment shader stage.
-  * [[limits-maxFragmentDualSrcAttachments]]
-    pname:maxFragmentDualSrcAttachments is the maximum number of output
-    attachments which can: be written to by the fragment shader stage when
-    blending is enabled and one of the dual source blend modes is in use.
-    See <<framebuffer-dsb>> and <<features-dualSrcBlend,dualSrcBlend>>.
-  * [[limits-maxFragmentCombinedOutputResources]]
-    pname:maxFragmentCombinedOutputResources is the total number of storage
-    buffers, storage images, and output code:Location decorated color
-    attachments (described in <<interfaces-fragmentoutput, Fragment Output
-    Interface>>) which can: be used in the fragment shader stage.
-  * [[limits-maxComputeSharedMemorySize]] pname:maxComputeSharedMemorySize
-    is the maximum total storage size, in bytes, available for variables
-    declared with the code:Workgroup storage class in shader modules (or
-    with the code:shared storage qualifier in GLSL) in the compute shader
-    stage.
-ifdef::VK_KHR_workgroup_memory_explicit_layout[]
-    When variables declared with the code:Workgroup storage class are
-    explicitly laid out (hence they are also decorated with code:Block), the
-    amount of storage consumed is the size of the largest Block variable,
-    not counting any padding at the end.
-endif::VK_KHR_workgroup_memory_explicit_layout[]
-    The amount of storage consumed by the
-ifdef::VK_KHR_workgroup_memory_explicit_layout[]
-    non-Block
-endif::VK_KHR_workgroup_memory_explicit_layout[]
-    variables declared with the code:Workgroup storage class is
-    implementation-dependent.
-    However, the amount of storage consumed may not exceed the largest block
-    size that would be obtained if all active
-ifdef::VK_KHR_workgroup_memory_explicit_layout[]
-    non-Block
-endif::VK_KHR_workgroup_memory_explicit_layout[]
-    variables declared with code:Workgroup storage class were assigned
-    offsets in an arbitrary order by successively taking the smallest valid
-    offset according to the <<interfaces-resources-standard-layout,Standard
-    Storage Buffer Layout>> rules.
-    (This is equivalent to using the GLSL std430 layout rules.)
-  * [[limits-maxComputeWorkGroupCount]] pname:maxComputeWorkGroupCount[3] is
-    the maximum number of local workgroups that can: be dispatched by a
-    single dispatching command.
-    These three values represent the maximum number of local workgroups for
-    the X, Y, and Z dimensions, respectively.
-    The workgroup count parameters to the dispatching commands must: be less
-    than or equal to the corresponding limit.
-    See <<dispatch>>.
-  * [[limits-maxComputeWorkGroupInvocations]]
-    pname:maxComputeWorkGroupInvocations is the maximum total number of
-    compute shader invocations in a single local workgroup.
-    The product of the X, Y, and Z sizes, as specified by the code:LocalSize
-ifdef::VK_KHR_maintenance4[or code:LocalSizeId]
-    execution mode in shader modules or by the object decorated by the
-    code:WorkgroupSize decoration, must: be less than or equal to this
-    limit.
-  * [[limits-maxComputeWorkGroupSize]] pname:maxComputeWorkGroupSize[3] is
-    the maximum size of a local compute workgroup, per dimension.
-    These three values represent the maximum local workgroup size in the X,
-    Y, and Z dimensions, respectively.
-    The pname:x, pname:y, and pname:z sizes, as specified by the
-    code:LocalSize
-ifdef::VK_KHR_maintenance4[or code:LocalSizeId]
-    execution mode or by the object decorated by the code:WorkgroupSize
-    decoration in shader modules, must: be less than or equal to the
-    corresponding limit.
-  * [[limits-subPixelPrecisionBits]] pname:subPixelPrecisionBits is the
-    number of bits of subpixel precision in framebuffer coordinates
-    [eq]#x~f~# and [eq]#y~f~#.
-    See <<primsrast>>.
-  * [[limits-subTexelPrecisionBits]] pname:subTexelPrecisionBits is the
-    number of bits of precision in the division along an axis of an image
-    used for minification and magnification filters.
-    [eq]#2^pname:subTexelPrecisionBits^# is the actual number of divisions
-    along each axis of the image represented.
-    Sub-texel values calculated during image sampling will snap to these
-    locations when generating the filtered results.
-  * [[limits-mipmapPrecisionBits]] pname:mipmapPrecisionBits is the number
-    of bits of division that the LOD calculation for mipmap fetching get
-    snapped to when determining the contribution from each mip level to the
-    mip filtered results.
-    [eq]#2^pname:mipmapPrecisionBits^# is the actual number of divisions.
-  * [[limits-maxDrawIndexedIndexValue]] pname:maxDrawIndexedIndexValue is
-    the maximum index value that can: be used for indexed draw calls when
-    using 32-bit indices.
-    This excludes the primitive restart index value of 0xFFFFFFFF.
-    See <<features-fullDrawIndexUint32,fullDrawIndexUint32>>.
-  * [[limits-maxDrawIndirectCount]] pname:maxDrawIndirectCount is the
-    maximum draw count that is supported for indirect draw calls.
-    See <<features-multiDrawIndirect,multiDrawIndirect>>.
-  * [[limits-maxSamplerLodBias]] pname:maxSamplerLodBias is the maximum
-    absolute sampler LOD bias.
-    The sum of the pname:mipLodBias member of the slink:VkSamplerCreateInfo
-    structure and the code:Bias operand of image sampling operations in
-    shader modules (or 0 if no code:Bias operand is provided to an image
-    sampling operation) are clamped to the range
-    [eq]#[-pname:maxSamplerLodBias,+pname:maxSamplerLodBias]#.
-    See <<samplers-mipLodBias>>.
-  * [[limits-maxSamplerAnisotropy]] pname:maxSamplerAnisotropy is the
-    maximum degree of sampler anisotropy.
-    The maximum degree of anisotropic filtering used for an image sampling
-    operation is the minimum of the pname:maxAnisotropy member of the
-    slink:VkSamplerCreateInfo structure and this limit.
-    See <<samplers-maxAnisotropy>>.
-  * [[limits-maxViewports]] pname:maxViewports is the maximum number of
-    active viewports.
-    The pname:viewportCount member of the
-    slink:VkPipelineViewportStateCreateInfo structure that is provided at
-    pipeline creation must: be less than or equal to this limit.
-  * [[limits-maxViewportDimensions]] pname:maxViewportDimensions[2] are the
-    maximum viewport dimensions in the X (width) and Y (height) dimensions,
-    respectively.
-    The maximum viewport dimensions must: be greater than or equal to the
-    largest image which can: be created and used as a framebuffer
-    attachment.
-    See <<vertexpostproc-viewport,Controlling the Viewport>>.
-  * [[limits-viewportboundsrange]] pname:viewportBoundsRange[2] is the
-    [eq]#[minimum, maximum]# range that the corners of a viewport must: be
-    contained in.
-    This range must: be at least [eq]#[-2 {times} pname:size, 2 {times}
-    pname:size - 1]#, where [eq]#pname:size =
-    max(pname:maxViewportDimensions[0], pname:maxViewportDimensions[1])#.
-    See <<vertexpostproc-viewport,Controlling the Viewport>>.
-+
-[NOTE]
-.Note
-====
-The intent of the pname:viewportBoundsRange limit is to allow a maximum
-sized viewport to be arbitrarily shifted relative to the output target as
-long as at least some portion intersects.
-This would give a bounds limit of [eq]#[-pname:size {plus} 1, 2 {times}
-pname:size - 1]# which would allow all possible non-empty-set intersections
-of the output target and the viewport.
-Since these numbers are typically powers of two, picking the signed number
-range using the smallest possible number of bits ends up with the specified
-range.
-====
-  * [[limits-viewportSubPixelBits]] pname:viewportSubPixelBits is the number
-    of bits of subpixel precision for viewport bounds.
-    The subpixel precision that floating-point viewport bounds are
-    interpreted at is given by this limit.
-  * [[limits-minMemoryMapAlignment]] pname:minMemoryMapAlignment is the
-    minimum required: alignment, in bytes, of host visible memory
-    allocations within the host address space.
-    When mapping a memory allocation with flink:vkMapMemory, subtracting
-    pname:offset bytes from the returned pointer will always produce an
-    integer multiple of this limit.
-    See <<memory-device-hostaccess>>.
-  * [[limits-minTexelBufferOffsetAlignment]]
-    pname:minTexelBufferOffsetAlignment is the minimum required: alignment,
-    in bytes, for the pname:offset member of the
-    slink:VkBufferViewCreateInfo structure for texel buffers.
-ifdef::VK_EXT_texel_buffer_alignment[]
-    If <<features-texelBufferAlignment,texelBufferAlignment>> is enabled,
-    this limit is equivalent to the maximum of the
-    <<limits-uniformTexelBufferOffsetAlignmentBytes,
-    pname:uniformTexelBufferOffsetAlignmentBytes>> and
-    <<limits-storageTexelBufferOffsetAlignmentBytes,
-    pname:storageTexelBufferOffsetAlignmentBytes>> members of
-    slink:VkPhysicalDeviceTexelBufferAlignmentPropertiesEXT, but smaller
-    alignment is optionally: allowed by
-    <<limits-storageTexelBufferOffsetSingleTexelAlignment,
-    pname:storageTexelBufferOffsetSingleTexelAlignment>> and
-    <<limits-uniformTexelBufferOffsetSingleTexelAlignment,
-    pname:uniformTexelBufferOffsetSingleTexelAlignment>>.
-    If <<features-texelBufferAlignment,texelBufferAlignment>> is not
-    enabled,
-endif::VK_EXT_texel_buffer_alignment[]
-    slink:VkBufferViewCreateInfo::pname:offset must: be a multiple of this
-    value.
-  * [[limits-minUniformBufferOffsetAlignment]]
-    pname:minUniformBufferOffsetAlignment is the minimum required:
-    alignment, in bytes, for the pname:offset member of the
-    sname:VkDescriptorBufferInfo structure for uniform buffers.
-    When a descriptor of type ename:VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER or
-    ename:VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC is updated, the
-    pname:offset must: be an integer multiple of this limit.
-    Similarly, dynamic offsets for uniform buffers must: be multiples of
-    this limit.
-  * [[limits-minStorageBufferOffsetAlignment]]
-    pname:minStorageBufferOffsetAlignment is the minimum required:
-    alignment, in bytes, for the pname:offset member of the
-    sname:VkDescriptorBufferInfo structure for storage buffers.
-    When a descriptor of type ename:VK_DESCRIPTOR_TYPE_STORAGE_BUFFER or
-    ename:VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC is updated, the
-    pname:offset must: be an integer multiple of this limit.
-    Similarly, dynamic offsets for storage buffers must: be multiples of
-    this limit.
-  * [[limits-minTexelOffset]] pname:minTexelOffset is the minimum offset
-    value for the code:ConstOffset image operand of any of the
-    code:OpImageSample* or code:OpImageFetch* image instructions.
-  * [[limits-maxTexelOffset]] pname:maxTexelOffset is the maximum offset
-    value for the code:ConstOffset image operand of any of the
-    code:OpImageSample* or code:OpImageFetch* image instructions.
-  * [[limits-minTexelGatherOffset]] pname:minTexelGatherOffset is the
-    minimum offset value for the code:Offset, code:ConstOffset, or
-    code:ConstOffsets image operands of any of the code:OpImage*Gather image
-    instructions.
-  * [[limits-maxTexelGatherOffset]] pname:maxTexelGatherOffset is the
-    maximum offset value for the code:Offset, code:ConstOffset, or
-    code:ConstOffsets image operands of any of the code:OpImage*Gather image
-    instructions.
-  * [[limits-minInterpolationOffset]] pname:minInterpolationOffset is the
-    base minimum (inclusive) negative offset value for the code:Offset
-    operand of the code:InterpolateAtOffset extended instruction.
-  * [[limits-maxInterpolationOffset]] pname:maxInterpolationOffset is the
-    base maximum (inclusive) positive offset value for the code:Offset
-    operand of the code:InterpolateAtOffset extended instruction.
-  * [[limits-subPixelInterpolationOffsetBits]]
-    pname:subPixelInterpolationOffsetBits is the number of fractional bits
-    that the code:x and code:y offsets to the code:InterpolateAtOffset
-    extended instruction may: be rounded to as fixed-point values.
-  * [[limits-maxFramebufferWidth]] pname:maxFramebufferWidth is the maximum
-    width for a framebuffer.
-    The pname:width member of the slink:VkFramebufferCreateInfo structure
-    must: be less than or equal to this limit.
-  * [[limits-maxFramebufferHeight]] pname:maxFramebufferHeight is the
-    maximum height for a framebuffer.
-    The pname:height member of the slink:VkFramebufferCreateInfo structure
-    must: be less than or equal to this limit.
-  * [[limits-maxFramebufferLayers]] pname:maxFramebufferLayers is the
-    maximum layer count for a layered framebuffer.
-    The pname:layers member of the slink:VkFramebufferCreateInfo structure
-    must: be less than or equal to this limit.
-  * [[limits-framebufferColorSampleCounts]]
-    pname:framebufferColorSampleCounts is a bitmask^1^ of
-    elink:VkSampleCountFlagBits indicating the color sample counts that are
-    supported for all framebuffer color attachments with floating- or
-    fixed-point formats.
-ifndef::VK_VERSION_1_2[]
-    There is no limit that specifies the color sample counts that are
-    supported for all color attachments with integer formats.
-endif::VK_VERSION_1_2[]
-ifdef::VK_VERSION_1_2[]
-    For color attachments with integer formats, see
-    <<limits-framebufferIntegerColorSampleCounts,
-    pname:framebufferIntegerColorSampleCounts>>.
-endif::VK_VERSION_1_2[]
-  * [[limits-framebufferDepthSampleCounts]]
-    pname:framebufferDepthSampleCounts is a bitmask^1^ of
-    elink:VkSampleCountFlagBits indicating the supported depth sample counts
-    for all framebuffer depth/stencil attachments, when the format includes
-    a depth component.
-  * [[limits-framebufferStencilSampleCounts]]
-    pname:framebufferStencilSampleCounts is a bitmask^1^ of
-    elink:VkSampleCountFlagBits indicating the supported stencil sample
-    counts for all framebuffer depth/stencil attachments, when the format
-    includes a stencil component.
-  * [[limits-framebufferNoAttachmentsSampleCounts]]
-    pname:framebufferNoAttachmentsSampleCounts is a bitmask^1^ of
-    elink:VkSampleCountFlagBits indicating the supported sample counts for a
-    <<renderpass-noattachments, subpass which uses no attachments>>.
-  * [[limits-maxColorAttachments]] pname:maxColorAttachments is the maximum
-    number of color attachments that can: be used by a subpass in a render
-    pass.
-    The pname:colorAttachmentCount member of the sname:VkSubpassDescription
-ifdef::VK_VERSION_1_2,VK_KHR_create_renderpass2[]
-    or sname:VkSubpassDescription2
-endif::VK_VERSION_1_2,VK_KHR_create_renderpass2[]
-    structure must: be less than or equal to this limit.
-  * [[limits-sampledImageColorSampleCounts]]
-    pname:sampledImageColorSampleCounts is a bitmask^1^ of
-    elink:VkSampleCountFlagBits indicating the sample counts supported for
-    all 2D images created with ename:VK_IMAGE_TILING_OPTIMAL, pname:usage
-    containing ename:VK_IMAGE_USAGE_SAMPLED_BIT, and a non-integer color
-    format.
-  * [[limits-sampledImageIntegerSampleCounts]]
-    pname:sampledImageIntegerSampleCounts is a bitmask^1^ of
-    elink:VkSampleCountFlagBits indicating the sample counts supported for
-    all 2D images created with ename:VK_IMAGE_TILING_OPTIMAL, pname:usage
-    containing ename:VK_IMAGE_USAGE_SAMPLED_BIT, and an integer color
-    format.
-  * [[limits-sampledImageDepthSampleCounts]]
-    pname:sampledImageDepthSampleCounts is a bitmask^1^ of
-    elink:VkSampleCountFlagBits indicating the sample counts supported for
-    all 2D images created with ename:VK_IMAGE_TILING_OPTIMAL, pname:usage
-    containing ename:VK_IMAGE_USAGE_SAMPLED_BIT, and a depth format.
-  * [[limits-sampledImageStencilSampleCounts]]
-    pname:sampledImageStencilSampleCounts is a bitmask^1^ of
-    elink:VkSampleCountFlagBits indicating the sample counts supported for
-    all 2D images created with ename:VK_IMAGE_TILING_OPTIMAL, pname:usage
-    containing ename:VK_IMAGE_USAGE_SAMPLED_BIT, and a stencil format.
-  * [[limits-storageImageSampleCounts]] pname:storageImageSampleCounts is a
-    bitmask^1^ of elink:VkSampleCountFlagBits indicating the sample counts
-    supported for all 2D images created with ename:VK_IMAGE_TILING_OPTIMAL,
-    and pname:usage containing ename:VK_IMAGE_USAGE_STORAGE_BIT.
-  * [[limits-maxSampleMaskWords]] pname:maxSampleMaskWords is the maximum
-    number of array elements of a variable decorated with the
-    code:SampleMask built-in decoration.
-  * [[limits-timestampComputeAndGraphics]] pname:timestampComputeAndGraphics
-    specifies support for timestamps on all graphics and compute queues.
-    If this limit is set to ename:VK_TRUE, all queues that advertise the
-    ename:VK_QUEUE_GRAPHICS_BIT or ename:VK_QUEUE_COMPUTE_BIT in the
-    sname:VkQueueFamilyProperties::pname:queueFlags support
-    sname:VkQueueFamilyProperties::pname:timestampValidBits of at least 36.
-    See <<queries-timestamps, Timestamp Queries>>.
-  * [[limits-timestampPeriod]] pname:timestampPeriod is the number of
-    nanoseconds required: for a timestamp query to be incremented by 1.
-    See <<queries-timestamps, Timestamp Queries>>.
-  * [[limits-maxClipDistances]] pname:maxClipDistances is the maximum number
-    of clip distances that can: be used in a single shader stage.
-    The size of any array declared with the code:ClipDistance built-in
-    decoration in a shader module must: be less than or equal to this limit.
-  * [[limits-maxCullDistances]] pname:maxCullDistances is the maximum number
-    of cull distances that can: be used in a single shader stage.
-    The size of any array declared with the code:CullDistance built-in
-    decoration in a shader module must: be less than or equal to this limit.
-  * [[limits-maxCombinedClipAndCullDistances]]
-    pname:maxCombinedClipAndCullDistances is the maximum combined number of
-    clip and cull distances that can: be used in a single shader stage.
-    The sum of the sizes of any pair of arrays declared with the
-    code:ClipDistance and code:CullDistance built-in decoration used by a
-    single shader stage in a shader module must: be less than or equal to
-    this limit.
-  * [[limits-discreteQueuePriorities]] pname:discreteQueuePriorities is the
-    number of discrete priorities that can: be assigned to a queue based on
-    the value of each member of
-    slink:VkDeviceQueueCreateInfo::pname:pQueuePriorities.
-    This must: be at least 2, and levels must: be spread evenly over the
-    range, with at least one level at 1.0, and another at 0.0.
-    See <<devsandqueues-priority>>.
-  * [[limits-pointSizeRange]] pname:pointSizeRange[2] is the range
-    [eq]#[pname:minimum,pname:maximum]# of supported sizes for points.
-    Values written to variables decorated with the code:PointSize built-in
-    decoration are clamped to this range.
-  * [[limits-lineWidthRange]] pname:lineWidthRange[2] is the range
-    [eq]#[pname:minimum,pname:maximum]# of supported widths for lines.
-    Values specified by the pname:lineWidth member of the
-    slink:VkPipelineRasterizationStateCreateInfo or the pname:lineWidth
-    parameter to fname:vkCmdSetLineWidth are clamped to this range.
-  * [[limits-pointSizeGranularity]] pname:pointSizeGranularity is the
-    granularity of supported point sizes.
-    Not all point sizes in the range defined by pname:pointSizeRange are
-    supported.
-    This limit specifies the granularity (or increment) between successive
-    supported point sizes.
-  * [[limits-lineWidthGranularity]] pname:lineWidthGranularity is the
-    granularity of supported line widths.
-    Not all line widths in the range defined by pname:lineWidthRange are
-    supported.
-    This limit specifies the granularity (or increment) between successive
-    supported line widths.
-  * [[limits-strictLines]] pname:strictLines specifies whether lines are
-    rasterized according to the preferred method of rasterization.
-    If set to ename:VK_FALSE, lines may: be rasterized under a relaxed set
-    of rules.
-    If set to ename:VK_TRUE, lines are rasterized as per the strict
-    definition.
-    See <<primsrast-lines-basic,Basic Line Segment Rasterization>>.
-  * [[limits-standardSampleLocations]] pname:standardSampleLocations
-    specifies whether rasterization uses the standard sample locations as
-    documented in <<primsrast-multisampling,Multisampling>>.
-    If set to ename:VK_TRUE, the implementation uses the documented sample
-    locations.
-    If set to ename:VK_FALSE, the implementation may: use different sample
-    locations.
-  * [[limits-optimalBufferCopyOffsetAlignment]]
-    pname:optimalBufferCopyOffsetAlignment is the optimal buffer offset
-    alignment in bytes for
-ifndef::VK_KHR_copy_commands2[]
-    flink:vkCmdCopyBufferToImage and flink:vkCmdCopyImageToBuffer.
-endif::VK_KHR_copy_commands2[]
-ifdef::VK_KHR_copy_commands2[]
-    flink:vkCmdCopyBufferToImage2KHR, flink:vkCmdCopyBufferToImage,
-    flink:vkCmdCopyImageToBuffer2KHR, and flink:vkCmdCopyImageToBuffer.
-endif::VK_KHR_copy_commands2[]
-    The per texel alignment requirements are enforced, but applications
-    should: use the optimal alignment for optimal performance and power use.
-  * [[limits-optimalBufferCopyRowPitchAlignment]]
-    pname:optimalBufferCopyRowPitchAlignment is the optimal buffer row pitch
-    alignment in bytes for
-ifndef::VK_KHR_copy_commands2[]
-    flink:vkCmdCopyBufferToImage and flink:vkCmdCopyImageToBuffer.
-endif::VK_KHR_copy_commands2[]
-ifdef::VK_KHR_copy_commands2[]
-    flink:vkCmdCopyBufferToImage2KHR, flink:vkCmdCopyBufferToImage,
-    flink:vkCmdCopyImageToBuffer2KHR, and flink:vkCmdCopyImageToBuffer.
-endif::VK_KHR_copy_commands2[]
-    Row pitch is the number of bytes between texels with the same X
-    coordinate in adjacent rows (Y coordinates differ by one).
-    The per texel alignment requirements are enforced, but applications
-    should: use the optimal alignment for optimal performance and power use.
-  * [[limits-nonCoherentAtomSize]] pname:nonCoherentAtomSize is the size and
-    alignment in bytes that bounds concurrent access to
-    <<memory-device-hostaccess, host-mapped device memory>>.
-
-1::
-    For all bitmasks of elink:VkSampleCountFlagBits, the sample count limits
-    defined above represent the minimum supported sample counts for each
-    image type.
-    Individual images may: support additional sample counts, which are
-    queried using flink:vkGetPhysicalDeviceImageFormatProperties as
-    described in <<features-supported-sample-counts, Supported Sample
-    Counts>>.
-
-include::{generated}/validity/structs/VkPhysicalDeviceLimits.txt[]
---
-
-
-[open,refpage='VkSampleCountFlagBits',desc='Bitmask specifying sample counts supported for an image used for storage operations',type='enums']
---
-Bits which may: be set in the sample count limits returned by
-slink:VkPhysicalDeviceLimits, as well as in other queries and structures
-representing image sample counts, are:
-
-include::{generated}/api/enums/VkSampleCountFlagBits.txt[]
-
-  * ename:VK_SAMPLE_COUNT_1_BIT specifies an image with one sample per
-    pixel.
-  * ename:VK_SAMPLE_COUNT_2_BIT specifies an image with 2 samples per pixel.
-  * ename:VK_SAMPLE_COUNT_4_BIT specifies an image with 4 samples per pixel.
-  * ename:VK_SAMPLE_COUNT_8_BIT specifies an image with 8 samples per pixel.
-  * ename:VK_SAMPLE_COUNT_16_BIT specifies an image with 16 samples per
-    pixel.
-  * ename:VK_SAMPLE_COUNT_32_BIT specifies an image with 32 samples per
-    pixel.
-  * ename:VK_SAMPLE_COUNT_64_BIT specifies an image with 64 samples per
-    pixel.
---
-
-[open,refpage='VkSampleCountFlags',desc='Bitmask of VkSampleCountFlagBits',type='flags']
---
-include::{generated}/api/flags/VkSampleCountFlags.txt[]
-
-tname:VkSampleCountFlags is a bitmask type for setting a mask of zero or
-more elink:VkSampleCountFlagBits.
---
-
-ifdef::VK_KHR_push_descriptor[]
-[open,refpage='VkPhysicalDevicePushDescriptorPropertiesKHR',desc='Structure describing push descriptor limits that can be supported by an implementation',type='structs']
---
-The sname:VkPhysicalDevicePushDescriptorPropertiesKHR structure is defined
-as:
-
-include::{generated}/api/structs/VkPhysicalDevicePushDescriptorPropertiesKHR.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * [[limits-maxPushDescriptors]] pname:maxPushDescriptors is the maximum
-    number of descriptors that can: be used in a descriptor set created with
-    ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_PUSH_DESCRIPTOR_BIT_KHR set.
-
-:refpage: VkPhysicalDevicePushDescriptorPropertiesKHR
-include::{chapters}/limits.txt[tag=limits_desc]
-
-include::{generated}/validity/structs/VkPhysicalDevicePushDescriptorPropertiesKHR.txt[]
---
-endif::VK_KHR_push_descriptor[]
-
-ifdef::VK_VERSION_1_1,VK_KHR_multiview[]
-[open,refpage='VkPhysicalDeviceMultiviewProperties',desc='Structure describing multiview limits that can be supported by an implementation',type='structs']
---
-The sname:VkPhysicalDeviceMultiviewProperties structure is defined as:
-
-include::{generated}/api/structs/VkPhysicalDeviceMultiviewProperties.txt[]
-
-ifdef::VK_KHR_multiview[]
-or the equivalent
-
-include::{generated}/api/structs/VkPhysicalDeviceMultiviewPropertiesKHR.txt[]
-endif::VK_KHR_multiview[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-
-// Must have preceding whitespace
-ifdef::VK_VERSION_1_2[:anchor-prefix: extension-]
-ifndef::VK_VERSION_1_2[:anchor-prefix:]
-// tag::VK_KHR_multiview-properties[]
-  * [[{anchor-prefix}limits-maxMultiviewViewCount]]
-    pname:maxMultiviewViewCount is one greater than the maximum view index
-    that can: be used in a subpass.
-  * [[{anchor-prefix}limits-maxMultiviewInstanceIndex]]
-    pname:maxMultiviewInstanceIndex is the maximum valid value of instance
-    index allowed to be generated by a drawing command recorded within a
-    subpass of a multiview render pass instance.
-// end::VK_KHR_multiview-properties[]
-
-:refpage: VkPhysicalDeviceMultiviewProperties
-include::{chapters}/limits.txt[tag=limits_desc]
-
-include::{generated}/validity/structs/VkPhysicalDeviceMultiviewProperties.txt[]
---
-endif::VK_VERSION_1_1,VK_KHR_multiview[]
-
-ifdef::VK_VERSION_1_2,VK_KHR_shader_float_controls[]
-[open,refpage='VkPhysicalDeviceFloatControlsProperties',desc='Structure describing properties supported by VK_KHR_shader_float_controls',type='structs',alias='VkPhysicalDeviceFloatControlsPropertiesKHR']
---
-The sname:VkPhysicalDeviceFloatControlsProperties structure is defined as:
-
-include::{generated}/api/structs/VkPhysicalDeviceFloatControlsProperties.txt[]
-
-ifdef::VK_KHR_shader_float_controls[]
-or the equivalent
-
-include::{generated}/api/structs/VkPhysicalDeviceFloatControlsPropertiesKHR.txt[]
-endif::VK_KHR_shader_float_controls[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-
-// Must have preceding whitespace
-ifdef::VK_VERSION_1_2[:anchor-prefix: extension-]
-ifndef::VK_VERSION_1_2[:anchor-prefix:]
-// tag::VK_KHR_shader_float_controls-properties[]
-  * [[{anchor-prefix}features-denormBehaviorIndependence]]
-    pname:denormBehaviorIndependence is a
-    elink:VkShaderFloatControlsIndependence value indicating whether, and
-    how, denorm behavior can be set independently for different bit widths.
-  * [[{anchor-prefix}features-roundingModeIndependence]]
-    pname:roundingModeIndependence is a
-    elink:VkShaderFloatControlsIndependence value indicating whether, and
-    how, rounding modes can be set independently for different bit widths.
-  * [[{anchor-prefix}limits-shaderSignedZeroInfNanPreserveFloat16]]
-    pname:shaderSignedZeroInfNanPreserveFloat16 is a boolean value
-    indicating whether sign of a zero, [eq]##Nan##s and
-    latexmath:[\pm\infty] can: be preserved in 16-bit floating-point
-    computations.
-    It also indicates whether the code:SignedZeroInfNanPreserve execution
-    mode can: be used for 16-bit floating-point types.
-  * [[{anchor-prefix}limits-shaderSignedZeroInfNanPreserveFloat32]]
-    pname:shaderSignedZeroInfNanPreserveFloat32 is a boolean value
-    indicating whether sign of a zero, [eq]##Nan##s and
-    latexmath:[\pm\infty] can: be preserved in 32-bit floating-point
-    computations.
-    It also indicates whether the code:SignedZeroInfNanPreserve execution
-    mode can: be used for 32-bit floating-point types.
-  * [[{anchor-prefix}limits-shaderSignedZeroInfNanPreserveFloat64]]
-    pname:shaderSignedZeroInfNanPreserveFloat64 is a boolean value
-    indicating whether sign of a zero, [eq]##Nan##s and
-    latexmath:[\pm\infty] can: be preserved in 64-bit floating-point
-    computations.
-    It also indicates whether the code:SignedZeroInfNanPreserve execution
-    mode can: be used for 64-bit floating-point types.
-  * [[{anchor-prefix}limits-shaderDenormPreserveFloat16]]
-    pname:shaderDenormPreserveFloat16 is a boolean value indicating whether
-    denormals can: be preserved in 16-bit floating-point computations.
-    It also indicates whether the code:DenormPreserve execution mode can: be
-    used for 16-bit floating-point types.
-  * [[{anchor-prefix}limits-shaderDenormPreserveFloat32]]
-    pname:shaderDenormPreserveFloat32 is a boolean value indicating whether
-    denormals can: be preserved in 32-bit floating-point computations.
-    It also indicates whether the code:DenormPreserve execution mode can: be
-    used for 32-bit floating-point types.
-  * [[{anchor-prefix}limits-shaderDenormPreserveFloat64]]
-    pname:shaderDenormPreserveFloat64 is a boolean value indicating whether
-    denormals can: be preserved in 64-bit floating-point computations.
-    It also indicates whether the code:DenormPreserve execution mode can: be
-    used for 64-bit floating-point types.
-  * [[{anchor-prefix}limits-shaderDenormFlushToZeroFloat16]]
-    pname:shaderDenormFlushToZeroFloat16 is a boolean value indicating
-    whether denormals can: be flushed to zero in 16-bit floating-point
-    computations.
-    It also indicates whether the code:DenormFlushToZero execution mode can:
-    be used for 16-bit floating-point types.
-  * [[{anchor-prefix}limits-shaderDenormFlushToZeroFloat32]]
-    pname:shaderDenormFlushToZeroFloat32 is a boolean value indicating
-    whether denormals can: be flushed to zero in 32-bit floating-point
-    computations.
-    It also indicates whether the code:DenormFlushToZero execution mode can:
-    be used for 32-bit floating-point types.
-  * [[{anchor-prefix}limits-shaderDenormFlushToZeroFloat64]]
-    pname:shaderDenormFlushToZeroFloat64 is a boolean value indicating
-    whether denormals can: be flushed to zero in 64-bit floating-point
-    computations.
-    It also indicates whether the code:DenormFlushToZero execution mode can:
-    be used for 64-bit floating-point types.
-  * [[{anchor-prefix}limits-shaderRoundingModeRTEFloat16]]
-    pname:shaderRoundingModeRTEFloat16 is a boolean value indicating whether
-    an implementation supports the round-to-nearest-even rounding mode for
-    16-bit floating-point arithmetic and conversion instructions.
-    It also indicates whether the code:RoundingModeRTE execution mode can:
-    be used for 16-bit floating-point types.
-  * [[{anchor-prefix}limits-shaderRoundingModeRTEFloat32]]
-    pname:shaderRoundingModeRTEFloat32 is a boolean value indicating whether
-    an implementation supports the round-to-nearest-even rounding mode for
-    32-bit floating-point arithmetic and conversion instructions.
-    It also indicates whether the code:RoundingModeRTE execution mode can:
-    be used for 32-bit floating-point types.
-  * [[{anchor-prefix}limits-shaderRoundingModeRTEFloat64]]
-    pname:shaderRoundingModeRTEFloat64 is a boolean value indicating whether
-    an implementation supports the round-to-nearest-even rounding mode for
-    64-bit floating-point arithmetic and conversion instructions.
-    It also indicates whether the code:RoundingModeRTE execution mode can:
-    be used for 64-bit floating-point types.
-  * [[{anchor-prefix}limits-shaderRoundingModeRTZFloat16]]
-    pname:shaderRoundingModeRTZFloat16 is a boolean value indicating whether
-    an implementation supports the round-towards-zero rounding mode for
-    16-bit floating-point arithmetic and conversion instructions.
-    It also indicates whether the code:RoundingModeRTZ execution mode can:
-    be used for 16-bit floating-point types.
-  * [[{anchor-prefix}limits-shaderRoundingModeRTZFloat32]]
-    pname:shaderRoundingModeRTZFloat32 is a boolean value indicating whether
-    an implementation supports the round-towards-zero rounding mode for
-    32-bit floating-point arithmetic and conversion instructions.
-    It also indicates whether the code:RoundingModeRTZ execution mode can:
-    be used for 32-bit floating-point types.
-  * [[{anchor-prefix}limits-shaderRoundingModeRTZFloat64]]
-    pname:shaderRoundingModeRTZFloat64 is a boolean value indicating whether
-    an implementation supports the round-towards-zero rounding mode for
-    64-bit floating-point arithmetic and conversion instructions.
-    It also indicates whether the code:RoundingModeRTZ execution mode can:
-    be used for 64-bit floating-point types.
-// end::VK_KHR_shader_float_controls-properties[]
-
-ifdef::editing-notes[]
-[NOTE]
-.editing-note
-====
-Implementations may not be able to control behavior of denorms for
-floating-point atomics.
-This needs to be taken into account when such atomics will be added to
-Vulkan.
-====
-endif::editing-notes[]
-
-:refpage: VkPhysicalDeviceFloatControlsProperties
-include::{chapters}/limits.txt[tag=limits_desc]
-
-include::{generated}/validity/structs/VkPhysicalDeviceFloatControlsProperties.txt[]
---
-
-[open,refpage='VkShaderFloatControlsIndependence',desc='Bitmask specifying whether, and how, shader float controls can be set separately',type='enums',alias='VkShaderFloatControlsIndependenceKHR']
---
-Values which may: be returned in the pname:denormBehaviorIndependence and
-pname:roundingModeIndependence fields of
-sname:VkPhysicalDeviceFloatControlsProperties are:
-
-include::{generated}/api/enums/VkShaderFloatControlsIndependence.txt[]
-
-ifdef::VK_KHR_shader_float_controls[]
-or the equivalent
-
-include::{generated}/api/enums/VkShaderFloatControlsIndependenceKHR.txt[]
-endif::VK_KHR_shader_float_controls[]
-
-  * ename:VK_SHADER_FLOAT_CONTROLS_INDEPENDENCE_32_BIT_ONLY specifies that
-    shader float controls for 32-bit floating point can: be set
-    independently; other bit widths must: be set identically to each other.
-  * ename:VK_SHADER_FLOAT_CONTROLS_INDEPENDENCE_ALL specifies that shader
-    float controls for all bit widths can: be set independently.
-  * ename:VK_SHADER_FLOAT_CONTROLS_INDEPENDENCE_NONE specifies that shader
-    float controls for all bit widths must: be set identically.
---
-endif::VK_VERSION_1_2,VK_KHR_shader_float_controls[]
-
-ifdef::VK_EXT_discard_rectangles[]
-[open,refpage='VkPhysicalDeviceDiscardRectanglePropertiesEXT',desc='Structure describing discard rectangle limits that can be supported by an implementation',type='structs']
---
-The sname:VkPhysicalDeviceDiscardRectanglePropertiesEXT structure is defined
-as:
-
-include::{generated}/api/structs/VkPhysicalDeviceDiscardRectanglePropertiesEXT.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * [[limits-maxDiscardRectangles]] pname:maxDiscardRectangles is the
-    maximum number of active discard rectangles that can: be specified.
-
-:refpage: VkPhysicalDeviceDiscardRectanglePropertiesEXT
-include::{chapters}/limits.txt[tag=limits_desc]
-
-include::{generated}/validity/structs/VkPhysicalDeviceDiscardRectanglePropertiesEXT.txt[]
---
-endif::VK_EXT_discard_rectangles[]
-
-ifdef::VK_EXT_sample_locations[]
-[open,refpage='VkPhysicalDeviceSampleLocationsPropertiesEXT',desc='Structure describing sample location limits that can be supported by an implementation',type='structs']
---
-The sname:VkPhysicalDeviceSampleLocationsPropertiesEXT structure is defined
-as:
-
-include::{generated}/api/structs/VkPhysicalDeviceSampleLocationsPropertiesEXT.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * [[limits-sampleLocationSampleCounts]] pname:sampleLocationSampleCounts
-    is a bitmask of elink:VkSampleCountFlagBits indicating the sample counts
-    supporting custom sample locations.
-  * [[limits-maxSampleLocationGridSize]] pname:maxSampleLocationGridSize is
-    the maximum size of the pixel grid in which sample locations can: vary
-    that is supported for all sample counts in
-    pname:sampleLocationSampleCounts.
-  * [[limits-sampleLocationCoordinateRange]]
-    pname:sampleLocationCoordinateRange[2] is the range of supported sample
-    location coordinates.
-  * [[limits-sampleLocationSubPixelBits]] pname:sampleLocationSubPixelBits
-    is the number of bits of subpixel precision for sample locations.
-  * [[limits-variableSampleLocations]] pname:variableSampleLocations
-    specifies whether the sample locations used by all pipelines that will
-    be bound to a command buffer during a subpass must: match.
-    If set to ename:VK_TRUE, the implementation supports variable sample
-    locations in a subpass.
-    If set to ename:VK_FALSE, then the sample locations must: stay constant
-    in each subpass.
-
-:refpage: VkPhysicalDeviceSampleLocationsPropertiesEXT
-include::{chapters}/limits.txt[tag=limits_desc]
-
-include::{generated}/validity/structs/VkPhysicalDeviceSampleLocationsPropertiesEXT.txt[]
---
-endif::VK_EXT_sample_locations[]
-
-ifdef::VK_EXT_external_memory_host[]
-[open,refpage='VkPhysicalDeviceExternalMemoryHostPropertiesEXT',desc='Structure describing external memory host pointer limits that can be supported by an implementation',type='structs']
---
-The sname:VkPhysicalDeviceExternalMemoryHostPropertiesEXT structure is
-defined as:
-
-include::{generated}/api/structs/VkPhysicalDeviceExternalMemoryHostPropertiesEXT.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * [[limits-minImportedHostPointerAlignment]]
-    pname:minImportedHostPointerAlignment is the minimum required:
-    alignment, in bytes, for the base address and size of host pointers that
-    can: be imported to a Vulkan memory object.
-    The value must: be a power of two.
-
-:refpage: VkPhysicalDeviceExternalMemoryHostPropertiesEXT
-include::{chapters}/limits.txt[tag=limits_desc]
-
-include::{generated}/validity/structs/VkPhysicalDeviceExternalMemoryHostPropertiesEXT.txt[]
---
-endif::VK_EXT_external_memory_host[]
-
-ifdef::VK_NVX_multiview_per_view_attributes[]
-[open,refpage='VkPhysicalDeviceMultiviewPerViewAttributesPropertiesNVX',desc='Structure describing multiview limits that can be supported by an implementation',type='structs']
---
-The sname:VkPhysicalDeviceMultiviewPerViewAttributesPropertiesNVX structure
-is defined as:
-
-include::{generated}/api/structs/VkPhysicalDeviceMultiviewPerViewAttributesPropertiesNVX.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * [[limits-perViewPositionAllComponents]]
-    pname:perViewPositionAllComponents is ename:VK_TRUE if the
-    implementation supports per-view position values that differ in
-    components other than the X component.
-
-:refpage: VkPhysicalDeviceMultiviewPerViewAttributesPropertiesNVX
-include::{chapters}/limits.txt[tag=limits_desc]
-
-include::{generated}/validity/structs/VkPhysicalDeviceMultiviewPerViewAttributesPropertiesNVX.txt[]
---
-endif::VK_NVX_multiview_per_view_attributes[]
-
-ifdef::VK_VERSION_1_1,VK_KHR_maintenance2[]
-[open,refpage='VkPhysicalDevicePointClippingProperties',desc='Structure describing the point clipping behavior supported by an implementation',type='structs']
---
-The sname:VkPhysicalDevicePointClippingProperties structure is defined as:
-
-include::{generated}/api/structs/VkPhysicalDevicePointClippingProperties.txt[]
-
-ifdef::VK_KHR_maintenance2[]
-or the equivalent
-
-include::{generated}/api/structs/VkPhysicalDevicePointClippingPropertiesKHR.txt[]
-endif::VK_KHR_maintenance2[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-
-// Must have preceding whitespace
-ifdef::VK_VERSION_1_2[:anchor-prefix: extension-]
-ifndef::VK_VERSION_1_2[:anchor-prefix:]
-// tag::VK_KHR_maintenance2-properties[]
-  * [[{anchor-prefix}limits-pointClipping]] pname:pointClippingBehavior is a
-    elink:VkPointClippingBehavior value specifying the point clipping
-    behavior supported by the implementation.
-// end::VK_KHR_maintenance2-properties[]
-
-:refpage: VkPhysicalDevicePointClippingProperties
-include::{chapters}/limits.txt[tag=limits_desc]
-
-include::{generated}/validity/structs/VkPhysicalDevicePointClippingProperties.txt[]
---
-endif::VK_VERSION_1_1,VK_KHR_maintenance2[]
-
-ifdef::VK_VERSION_1_1[]
-[open,refpage='VkPhysicalDeviceSubgroupProperties',desc='Structure describing subgroup support for an implementation',type='structs']
---
-The sname:VkPhysicalDeviceSubgroupProperties structure is defined as:
-
-include::{generated}/api/structs/VkPhysicalDeviceSubgroupProperties.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-
-// Must have preceding whitespace
-ifdef::VK_VERSION_1_2[:anchor-prefix: extension-]
-ifndef::VK_VERSION_1_2[:anchor-prefix:]
-// tag::VK_KHR_subgroup-properties[]
-  * [[{anchor-prefix}limits-subgroup-size]] pname:subgroupSize is the
-    default number of invocations in each subgroup.
-    pname:subgroupSize is at least 1 if any of the physical device's queues
-    support ename:VK_QUEUE_GRAPHICS_BIT or ename:VK_QUEUE_COMPUTE_BIT.
-    pname:subgroupSize is a power-of-two.
-  * [[limits-subgroup-supportedStages]] pname:supportedStages is a bitfield
-    of elink:VkShaderStageFlagBits describing the shader stages that
-    <<shaders-group-operations, group operations>> with
-    <<shaders-scope-subgroup, subgroup scope>> are supported in.
-    pname:supportedStages will have the ename:VK_SHADER_STAGE_COMPUTE_BIT
-    bit set if any of the physical device's queues support
-    ename:VK_QUEUE_COMPUTE_BIT.
-  * [[limits-subgroupSupportedOperations]] pname:supportedOperations is a
-    bitmask of elink:VkSubgroupFeatureFlagBits specifying the sets of
-    <<shaders-group-operations, group operations>> with
-    <<shaders-scope-subgroup, subgroup scope>> supported on this device.
-    pname:supportedOperations will have the
-    ename:VK_SUBGROUP_FEATURE_BASIC_BIT bit set if any of the physical
-    device's queues support ename:VK_QUEUE_GRAPHICS_BIT or
-    ename:VK_QUEUE_COMPUTE_BIT.
-  * [[limits-subgroup-quadOperationsInAllStages]]
-    pname:quadOperationsInAllStages is a boolean specifying whether
-    <<shaders-quad-operations,quad group operations>> are available in all
-    stages, or are restricted to fragment and compute stages.
-// end::VK_KHR_subgroup-properties[]
-
-:refpage: VkPhysicalDeviceSubgroupProperties
-include::{chapters}/limits.txt[tag=limits_desc]
-
-If pname:supportedOperations includes <<features-subgroup-quad,
-ename:VK_SUBGROUP_FEATURE_QUAD_BIT,>>
-ifdef::VK_KHR_shader_subgroup_uniform_control_flow[]
-or <<features-shaderSubgroupUniformControlFlow,
-pname:shaderSubgroupUniformControlFlow>> is enabled,
-endif::VK_KHR_shader_subgroup_uniform_control_flow[]
-pname:subgroupSize must: be greater than or equal to 4.
-
-include::{generated}/validity/structs/VkPhysicalDeviceSubgroupProperties.txt[]
---
-
-[open,refpage='VkSubgroupFeatureFlagBits',desc='Bitmask describing what group operations are supported with subgroup scope',type='enums']
---
-Bits which can: be set in
-slink:VkPhysicalDeviceSubgroupProperties::pname:supportedOperations
-ifdef::VK_VERSION_1_2[]
-and
-slink:VkPhysicalDeviceVulkan11Properties::pname:subgroupSupportedOperations
-endif::VK_VERSION_1_2[]
-to specify supported <<shaders-group-operations, group operations>> with
-<<shaders-scope-subgroup, subgroup scope>> are:
-
-include::{generated}/api/enums/VkSubgroupFeatureFlagBits.txt[]
-
-  * [[features-subgroup-basic]] ename:VK_SUBGROUP_FEATURE_BASIC_BIT
-    specifies the device will accept SPIR-V shader modules containing the
-    code:GroupNonUniform capability.
-  * [[features-subgroup-vote]] ename:VK_SUBGROUP_FEATURE_VOTE_BIT specifies
-    the device will accept SPIR-V shader modules containing the
-    code:GroupNonUniformVote capability.
-  * [[features-subgroup-arithmetic]]
-    ename:VK_SUBGROUP_FEATURE_ARITHMETIC_BIT specifies the device will
-    accept SPIR-V shader modules containing the
-    code:GroupNonUniformArithmetic capability.
-  * [[features-subgroup-ballot]] ename:VK_SUBGROUP_FEATURE_BALLOT_BIT
-    specifies the device will accept SPIR-V shader modules containing the
-    code:GroupNonUniformBallot capability.
-  * [[features-subgroup-shuffle]] ename:VK_SUBGROUP_FEATURE_SHUFFLE_BIT
-    specifies the device will accept SPIR-V shader modules containing the
-    code:GroupNonUniformShuffle capability.
-  * [[features-subgroup-shuffle-relative]]
-    ename:VK_SUBGROUP_FEATURE_SHUFFLE_RELATIVE_BIT specifies the device will
-    accept SPIR-V shader modules containing the
-    code:GroupNonUniformShuffleRelative capability.
-  * [[features-subgroup-clustered]] ename:VK_SUBGROUP_FEATURE_CLUSTERED_BIT
-    specifies the device will accept SPIR-V shader modules containing the
-    code:GroupNonUniformClustered capability.
-  * [[features-subgroup-quad]] ename:VK_SUBGROUP_FEATURE_QUAD_BIT specifies
-    the device will accept SPIR-V shader modules containing the
-    code:GroupNonUniformQuad capability.
-ifdef::VK_NV_shader_subgroup_partitioned[]
-  * [[features-subgroup-partitioned]]
-    ename:VK_SUBGROUP_FEATURE_PARTITIONED_BIT_NV specifies the device will
-    accept SPIR-V shader modules containing the
-    code:GroupNonUniformPartitionedNV capability.
-endif::VK_NV_shader_subgroup_partitioned[]
---
-
-[open,refpage='VkSubgroupFeatureFlags',desc='Bitmask of VkSubgroupFeatureFlagBits',type='flags']
---
-include::{generated}/api/flags/VkSubgroupFeatureFlags.txt[]
-
-tname:VkSubgroupFeatureFlags is a bitmask type for setting a mask of zero or
-more elink:VkSubgroupFeatureFlagBits.
---
-
-ifdef::VK_EXT_subgroup_size_control[]
-[open,refpage='VkPhysicalDeviceSubgroupSizeControlPropertiesEXT',desc='Structure describing the control subgroup size properties of an implementation',type='structs']
---
-The sname:VkPhysicalDeviceSubgroupSizeControlPropertiesEXT structure is
-defined as:
-
-include::{generated}/api/structs/VkPhysicalDeviceSubgroupSizeControlPropertiesEXT.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * [[limits-min-subgroup-size]] pname:minSubgroupSize is the minimum
-    subgroup size supported by this device.
-    pname:minSubgroupSize is at least one if any of the physical device's
-    queues support ename:VK_QUEUE_GRAPHICS_BIT or
-    ename:VK_QUEUE_COMPUTE_BIT.
-    pname:minSubgroupSize is a power-of-two.
-    pname:minSubgroupSize is less than or equal to pname:maxSubgroupSize.
-    pname:minSubgroupSize is less than or equal to
-    <<limits-subgroup-size,subgroupSize>>.
-  * [[limits-max-subgroup-size]] pname:maxSubgroupSize is the maximum
-    subgroup size supported by this device.
-    pname:maxSubgroupSize is at least one if any of the physical device's
-    queues support ename:VK_QUEUE_GRAPHICS_BIT or
-    ename:VK_QUEUE_COMPUTE_BIT.
-    pname:maxSubgroupSize is a power-of-two.
-    pname:maxSubgroupSize is greater than or equal to pname:minSubgroupSize.
-    pname:maxSubgroupSize is greater than or equal to
-    <<limits-subgroup-size,subgroupSize>>.
-  * [[limits-max-subgroups-per-workgroup]]
-    pname:maxComputeWorkgroupSubgroups is the maximum number of subgroups
-    supported by the implementation within a workgroup.
-  * [[limits-required-subgroup-size-stages]]
-    pname:requiredSubgroupSizeStages is a bitfield of what shader stages
-    support having a required subgroup size specified.
-
-:refpage: VkPhysicalDeviceSubgroupSizeControlPropertiesEXT
-include::{chapters}/limits.txt[tag=limits_desc]
-
-If slink:VkPhysicalDeviceSubgroupProperties::pname:supportedOperations
-includes <<features-subgroup-quad, ename:VK_SUBGROUP_FEATURE_QUAD_BIT>>,
-pname:minSubgroupSize must: be greater than or equal to 4.
-
-include::{generated}/validity/structs/VkPhysicalDeviceSubgroupSizeControlPropertiesEXT.txt[]
---
-endif::VK_EXT_subgroup_size_control[]
-endif::VK_VERSION_1_1[]
-
-ifdef::VK_EXT_blend_operation_advanced[]
-[open,refpage='VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT',desc='Structure describing advanced blending limits that can be supported by an implementation',type='structs']
---
-The sname:VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT structure is
-defined as:
-
-include::{generated}/api/structs/VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * [[limits-advancedBlendMaxColorAttachments]]
-    pname:advancedBlendMaxColorAttachments is one greater than the highest
-    color attachment index that can: be used in a subpass, for a pipeline
-    that uses an <<framebuffer-blend-advanced,advanced blend operation>>.
-  * [[limits-advancedBlendIndependentBlend]]
-    pname:advancedBlendIndependentBlend specifies whether advanced blend
-    operations can: vary per-attachment.
-  * [[limits-advancedBlendNonPremultipliedSrcColor]]
-    pname:advancedBlendNonPremultipliedSrcColor specifies whether the source
-    color can: be treated as non-premultiplied.
-    If this is ename:VK_FALSE, then
-    slink:VkPipelineColorBlendAdvancedStateCreateInfoEXT::pname:srcPremultiplied
-    must: be ename:VK_TRUE.
-  * [[limits-advancedBlendNonPremultipliedDstColor]]
-    pname:advancedBlendNonPremultipliedDstColor specifies whether the
-    destination color can: be treated as non-premultiplied.
-    If this is ename:VK_FALSE, then
-    slink:VkPipelineColorBlendAdvancedStateCreateInfoEXT::pname:dstPremultiplied
-    must: be ename:VK_TRUE.
-  * [[limits-advancedBlendCorrelatedOverlap]]
-    pname:advancedBlendCorrelatedOverlap specifies whether the overlap mode
-    can: be treated as correlated.
-    If this is ename:VK_FALSE, then
-    slink:VkPipelineColorBlendAdvancedStateCreateInfoEXT::pname:blendOverlap
-    must: be ename:VK_BLEND_OVERLAP_UNCORRELATED_EXT.
-  * [[limits-advancedBlendAllOperations]] pname:advancedBlendAllOperations
-    specifies whether all advanced blend operation enums are supported.
-    See the valid usage of slink:VkPipelineColorBlendAttachmentState.
-
-:refpage: VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT
-include::{chapters}/limits.txt[tag=limits_desc]
-
-include::{generated}/validity/structs/VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT.txt[]
---
-endif::VK_EXT_blend_operation_advanced[]
-
-ifdef::VK_EXT_vertex_attribute_divisor[]
-[open,refpage='VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT',desc='Structure describing max value of vertex attribute divisor that can be supported by an implementation',type='structs']
---
-The sname:VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT structure is
-defined as:
-
-include::{generated}/api/structs/VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * [[limits-maxVertexAttribDivisor]] pname:maxVertexAttribDivisor is the
-    maximum value of the number of instances that will repeat the value of
-    vertex attribute data when instanced rendering is enabled.
-
-:refpage: VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT
-include::{chapters}/limits.txt[tag=limits_desc]
-
-include::{generated}/validity/structs/VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT.txt[]
---
-endif::VK_EXT_vertex_attribute_divisor[]
-
-ifdef::VK_VERSION_1_2,VK_EXT_sampler_filter_minmax[]
-[open,refpage='VkPhysicalDeviceSamplerFilterMinmaxProperties',desc='Structure describing sampler filter minmax limits that can be supported by an implementation',type='structs',alias='VkPhysicalDeviceSamplerFilterMinmaxPropertiesEXT']
---
-The sname:VkPhysicalDeviceSamplerFilterMinmaxProperties structure is defined
-as:
-
-include::{generated}/api/structs/VkPhysicalDeviceSamplerFilterMinmaxProperties.txt[]
-
-ifdef::VK_EXT_sampler_filter_minmax[]
-or the equivalent
-
-include::{generated}/api/structs/VkPhysicalDeviceSamplerFilterMinmaxPropertiesEXT.txt[]
-endif::VK_EXT_sampler_filter_minmax[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-
-// Must have preceding whitespace
-ifdef::VK_VERSION_1_2[:anchor-prefix: extension-]
-ifndef::VK_VERSION_1_2[:anchor-prefix:]
-// tag::VK_EXT_sampler_filter_minmax-properties[]
-  * [[{anchor-prefix}limits-filterMinmaxSingleComponentFormats]]
-    pname:filterMinmaxSingleComponentFormats is a boolean value indicating
-    whether a minimum set of required formats support min/max filtering.
-  * [[{anchor-prefix}limits-filterMinmaxImageComponentMapping]]
-    pname:filterMinmaxImageComponentMapping is a boolean value indicating
-    whether the implementation supports non-identity component mapping of
-    the image when doing min/max filtering.
-// end::VK_EXT_sampler_filter_minmax-properties[]
-
-:refpage: VkPhysicalDeviceSamplerFilterMinmaxProperties
-include::{chapters}/limits.txt[tag=limits_desc]
-
-[[limits-filterMinmaxSingleComponentFormats-minimum-requirements]]
-If pname:filterMinmaxSingleComponentFormats is ename:VK_TRUE, the following
-formats must: support the
-ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_MINMAX_BIT feature with
-ename:VK_IMAGE_TILING_OPTIMAL, if they support
-ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT:
-
-  * ename:VK_FORMAT_R8_UNORM
-  * ename:VK_FORMAT_R8_SNORM
-  * ename:VK_FORMAT_R16_UNORM
-  * ename:VK_FORMAT_R16_SNORM
-  * ename:VK_FORMAT_R16_SFLOAT
-  * ename:VK_FORMAT_R32_SFLOAT
-  * ename:VK_FORMAT_D16_UNORM
-  * ename:VK_FORMAT_X8_D24_UNORM_PACK32
-  * ename:VK_FORMAT_D32_SFLOAT
-  * ename:VK_FORMAT_D16_UNORM_S8_UINT
-  * ename:VK_FORMAT_D24_UNORM_S8_UINT
-  * ename:VK_FORMAT_D32_SFLOAT_S8_UINT
-
-If the format is a depth/stencil format, this bit only specifies that the
-depth aspect (not the stencil aspect) of an image of this format supports
-min/max filtering, and that min/max filtering of the depth aspect is
-supported when depth compare is disabled in the sampler.
-
-If pname:filterMinmaxImageComponentMapping is ename:VK_FALSE the component
-mapping of the image view used with min/max filtering must: have been
-created with the pname:r component set to the
-<<resources-image-views-identity-mappings,identity swizzle>>.
-Only the pname:r component of the sampled image value is defined and the
-other component values are undefined:.
-If pname:filterMinmaxImageComponentMapping is ename:VK_TRUE this restriction
-does not apply and image component mapping works as normal.
-
-include::{generated}/validity/structs/VkPhysicalDeviceSamplerFilterMinmaxProperties.txt[]
---
-endif::VK_VERSION_1_2,VK_EXT_sampler_filter_minmax[]
-
-ifdef::VK_VERSION_1_1[]
-[open,refpage='VkPhysicalDeviceProtectedMemoryProperties',desc='Structure describing protected memory properties that can be supported by an implementation',type='structs']
---
-The sname:VkPhysicalDeviceProtectedMemoryProperties structure is defined as:
-
-include::{generated}/api/structs/VkPhysicalDeviceProtectedMemoryProperties.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-
-// Must have preceding whitespace
-ifdef::VK_VERSION_1_2[:anchor-prefix: extension-]
-ifndef::VK_VERSION_1_2[:anchor-prefix:]
-// tag::VK_KHR_protected_memory-properties[]
-  * [[{anchor-prefix}limits-protectedNoFault]] pname:protectedNoFault
-    specifies how an implementation behaves when an application attempts to
-    write to unprotected memory in a protected queue operation, read from
-    protected memory in an unprotected queue operation, or perform a query
-    in a protected queue operation.
-    If this limit is ename:VK_TRUE, such writes will be discarded or have
-    undefined: values written, reads and queries will return undefined:
-    values.
-    If this limit is ename:VK_FALSE, applications must: not perform these
-    operations.
-    See <<memory-protected-access-rules>> for more information.
-// end::VK_KHR_protected_memory-properties[]
-
-:refpage: VkPhysicalDeviceProtectedMemoryProperties
-include::{chapters}/limits.txt[tag=limits_desc]
-
-include::{generated}/validity/structs/VkPhysicalDeviceProtectedMemoryProperties.txt[]
---
-endif::VK_VERSION_1_1[]
-
-ifdef::VK_VERSION_1_1,VK_KHR_maintenance3[]
-[open,refpage='VkPhysicalDeviceMaintenance3Properties',desc='Structure describing descriptor set properties',type='structs']
---
-The sname:VkPhysicalDeviceMaintenance3Properties structure is defined as:
-
-include::{generated}/api/structs/VkPhysicalDeviceMaintenance3Properties.txt[]
-
-ifdef::VK_KHR_maintenance3[]
-or the equivalent
-
-include::{generated}/api/structs/VkPhysicalDeviceMaintenance3PropertiesKHR.txt[]
-endif::VK_KHR_maintenance3[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-
-// Must have preceding whitespace
-ifdef::VK_VERSION_1_2[:anchor-prefix: extension-]
-ifndef::VK_VERSION_1_2[:anchor-prefix:]
-// tag::VK_KHR_maintenance3-properties[]
-  * [[{anchor-prefix}limits-maxPerSetDescriptors]]
-    pname:maxPerSetDescriptors is a maximum number of descriptors (summed
-    over all descriptor types) in a single descriptor set that is guaranteed
-    to satisfy any implementation-dependent constraints on the size of a
-    descriptor set itself.
-    Applications can: query whether a descriptor set that goes beyond this
-    limit is supported using flink:vkGetDescriptorSetLayoutSupport.
-  * [[{anchor-prefix}limits-maxMemoryAllocationSize]]
-    pname:maxMemoryAllocationSize is the maximum size of a memory allocation
-    that can: be created, even if there is more space available in the heap.
-// end::VK_KHR_maintenance3-properties[]
-
-:refpage: VkPhysicalDeviceMaintenance3Properties
-include::{chapters}/limits.txt[tag=limits_desc]
-
-include::{generated}/validity/structs/VkPhysicalDeviceMaintenance3Properties.txt[]
---
-endif::VK_VERSION_1_1,VK_KHR_maintenance3[]
-
-ifdef::VK_KHR_maintenance4[]
-[open,refpage='VkPhysicalDeviceMaintenance4PropertiesKHR',desc='Structure describing various implementation-defined properties introduced with VK_KHR_maintenance4',type='structs']
---
-The sname:VkPhysicalDeviceMaintenance4PropertiesKHR structure is defined as:
-
-include::{generated}/api/structs/VkPhysicalDeviceMaintenance4PropertiesKHR.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * [[limits-maxBufferSize]] pname:maxBufferSize is the maximum size
-    sname:VkBuffer that can: be created.
-
-:refpage: VkPhysicalDeviceMaintenance4PropertiesKHR
-include::{chapters}/limits.txt[tag=limits_desc]
-
-include::{generated}/validity/structs/VkPhysicalDeviceMaintenance4PropertiesKHR.txt[]
---
-endif::VK_KHR_maintenance4[]
-
-ifdef::VK_NV_mesh_shader[]
-[open,refpage='VkPhysicalDeviceMeshShaderPropertiesNV',desc='Structure describing mesh shading properties',type='structs']
---
-The sname:VkPhysicalDeviceMeshShaderPropertiesNV structure is defined as:
-
-include::{generated}/api/structs/VkPhysicalDeviceMeshShaderPropertiesNV.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:maxDrawMeshTasksCount is the maximum number of local workgroups
-    that can: be launched by a single draw mesh tasks command.
-    See <<drawing-mesh-shading>>.
-  * pname:maxTaskWorkGroupInvocations is the maximum total number of task
-    shader invocations in a single local workgroup.
-    The product of the X, Y, and Z sizes, as specified by the code:LocalSize
-ifdef::VK_KHR_maintenance4[or code:LocalSizeId]
-    execution mode in shader modules or by the object decorated by the
-    code:WorkgroupSize decoration, must: be less than or equal to this
-    limit.
-  * pname:maxTaskWorkGroupSize[3] is the maximum size of a local task
-    workgroup.
-    These three values represent the maximum local workgroup size in the X,
-    Y, and Z dimensions, respectively.
-    The pname:x, pname:y, and pname:z sizes, as specified by the
-    code:LocalSize
-ifdef::VK_KHR_maintenance4[or code:LocalSizeId]
-    execution mode or by the object decorated by the code:WorkgroupSize
-    decoration in shader modules, must: be less than or equal to the
-    corresponding limit.
-  * pname:maxTaskTotalMemorySize is the maximum number of bytes that the
-    task shader can use in total for shared and output memory combined.
-  * pname:maxTaskOutputCount is the maximum number of output tasks a single
-    task shader workgroup can emit.
-  * pname:maxMeshWorkGroupInvocations is the maximum total number of mesh
-    shader invocations in a single local workgroup.
-    The product of the X, Y, and Z sizes, as specified by the code:LocalSize
-ifdef::VK_KHR_maintenance4[or code:LocalSizeId]
-    execution mode in shader modules or by the object decorated by the
-    code:WorkgroupSize decoration, must: be less than or equal to this
-    limit.
-  * pname:maxMeshWorkGroupSize[3] is the maximum size of a local mesh
-    workgroup.
-    These three values represent the maximum local workgroup size in the X,
-    Y, and Z dimensions, respectively.
-    The pname:x, pname:y, and pname:z sizes, as specified by the
-    code:LocalSize
-ifdef::VK_KHR_maintenance4[or code:LocalSizeId]
-    execution mode or by the object decorated by the code:WorkgroupSize
-    decoration in shader modules, must: be less than or equal to the
-    corresponding limit.
-  * pname:maxMeshTotalMemorySize is the maximum number of bytes that the
-    mesh shader can use in total for shared and output memory combined.
-  * pname:maxMeshOutputVertices is the maximum number of vertices a mesh
-    shader output can store.
-  * pname:maxMeshOutputPrimitives is the maximum number of primitives a mesh
-    shader output can store.
-  * pname:maxMeshMultiviewViewCount is the maximum number of multi-view
-    views a mesh shader can use.
-  * pname:meshOutputPerVertexGranularity is the granularity with which mesh
-    vertex outputs are allocated.
-    The value can be used to compute the memory size used by the mesh
-    shader, which must be less than or equal to
-    pname:maxMeshTotalMemorySize.
-  * pname:meshOutputPerPrimitiveGranularity is the granularity with which
-    mesh outputs qualified as per-primitive are allocated.
-    The value can be used to compute the memory size used by the mesh
-    shader, which must be less than or equal to
-    pname:maxMeshTotalMemorySize.
-
-:refpage: VkPhysicalDeviceMeshShaderPropertiesNV
-include::{chapters}/limits.txt[tag=limits_desc]
-
-include::{generated}/validity/structs/VkPhysicalDeviceMeshShaderPropertiesNV.txt[]
---
-endif::VK_NV_mesh_shader[]
-
-ifdef::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
-[open,refpage='VkPhysicalDeviceDescriptorIndexingProperties',desc='Structure describing descriptor indexing properties that can be supported by an implementation',type='structs',alias='VkPhysicalDeviceDescriptorIndexingPropertiesEXT']
---
-The sname:VkPhysicalDeviceDescriptorIndexingProperties structure is defined
-as:
-
-include::{generated}/api/structs/VkPhysicalDeviceDescriptorIndexingProperties.txt[]
-
-ifdef::VK_EXT_descriptor_indexing[]
-or the equivalent
-
-include::{generated}/api/structs/VkPhysicalDeviceDescriptorIndexingPropertiesEXT.txt[]
-endif::VK_EXT_descriptor_indexing[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-
-// Must have preceding whitespace
-ifdef::VK_VERSION_1_2[:anchor-prefix: extension-]
-ifndef::VK_VERSION_1_2[:anchor-prefix:]
-// tag::VK_EXT_descriptor_indexing-properties[]
-  * [[{anchor-prefix}limits-maxUpdateAfterBindDescriptorsInAllPools]]
-    pname:maxUpdateAfterBindDescriptorsInAllPools is the maximum number of
-    descriptors (summed over all descriptor types) that can: be created
-    across all pools that are created with the
-    ename:VK_DESCRIPTOR_POOL_CREATE_UPDATE_AFTER_BIND_BIT bit set.
-    Pool creation may: fail when this limit is exceeded, or when the space
-    this limit represents is unable to satisfy a pool creation due to
-    fragmentation.
-  * [[{anchor-prefix}limits-shaderUniformBufferArrayNonUniformIndexingNative]]
-    pname:shaderUniformBufferArrayNonUniformIndexingNative is a boolean
-    value indicating whether uniform buffer descriptors natively support
-    nonuniform indexing.
-    If this is ename:VK_FALSE, then a single dynamic instance of an
-    instruction that nonuniformly indexes an array of uniform buffers may:
-    execute multiple times in order to access all the descriptors.
-  * [[{anchor-prefix}limits-shaderSampledImageArrayNonUniformIndexingNative]]
-    pname:shaderSampledImageArrayNonUniformIndexingNative is a boolean value
-    indicating whether sampler and image descriptors natively support
-    nonuniform indexing.
-    If this is ename:VK_FALSE, then a single dynamic instance of an
-    instruction that nonuniformly indexes an array of samplers or images
-    may: execute multiple times in order to access all the descriptors.
-  * [[{anchor-prefix}limits-shaderStorageBufferArrayNonUniformIndexingNative]]
-    pname:shaderStorageBufferArrayNonUniformIndexingNative is a boolean
-    value indicating whether storage buffer descriptors natively support
-    nonuniform indexing.
-    If this is ename:VK_FALSE, then a single dynamic instance of an
-    instruction that nonuniformly indexes an array of storage buffers may:
-    execute multiple times in order to access all the descriptors.
-  * [[{anchor-prefix}limits-shaderStorageImageArrayNonUniformIndexingNative]]
-    pname:shaderStorageImageArrayNonUniformIndexingNative is a boolean value
-    indicating whether storage image descriptors natively support nonuniform
-    indexing.
-    If this is ename:VK_FALSE, then a single dynamic instance of an
-    instruction that nonuniformly indexes an array of storage images may:
-    execute multiple times in order to access all the descriptors.
-  * [[{anchor-prefix}limits-shaderInputAttachmentArrayNonUniformIndexingNative]]
-    pname:shaderInputAttachmentArrayNonUniformIndexingNative is a boolean
-    value indicating whether input attachment descriptors natively support
-    nonuniform indexing.
-    If this is ename:VK_FALSE, then a single dynamic instance of an
-    instruction that nonuniformly indexes an array of input attachments may:
-    execute multiple times in order to access all the descriptors.
-  * [[{anchor-prefix}limits-robustBufferAccessUpdateAfterBind]]
-    pname:robustBufferAccessUpdateAfterBind is a boolean value indicating
-    whether <<features-robustBufferAccess, pname:robustBufferAccess>> can:
-    be enabled in a device simultaneously with
-    pname:descriptorBindingUniformBufferUpdateAfterBind,
-    pname:descriptorBindingStorageBufferUpdateAfterBind,
-    pname:descriptorBindingUniformTexelBufferUpdateAfterBind, and/or
-    pname:descriptorBindingStorageTexelBufferUpdateAfterBind.
-    If this is ename:VK_FALSE, then either pname:robustBufferAccess must: be
-    disabled or all of these update-after-bind features must: be disabled.
-  * [[{anchor-prefix}limits-quadDivergentImplicitLod]]
-    pname:quadDivergentImplicitLod is a boolean value indicating whether
-    implicit level of detail calculations for image operations have
-    well-defined results when the image and/or sampler objects used for the
-    instruction are not uniform within a quad.
-    See <<textures-derivative-image-operations,Derivative Image
-    Operations>>.
-  * [[{anchor-prefix}limits-maxPerStageDescriptorUpdateAfterBindSamplers]]
-    pname:maxPerStageDescriptorUpdateAfterBindSamplers is similar to
-    pname:maxPerStageDescriptorSamplers but counts descriptors from
-    descriptor sets created with or without the
-    ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT bit
-    set.
-  * [[{anchor-prefix}limits-maxPerStageDescriptorUpdateAfterBindUniformBuffers]]
-    pname:maxPerStageDescriptorUpdateAfterBindUniformBuffers is similar to
-    pname:maxPerStageDescriptorUniformBuffers but counts descriptors from
-    descriptor sets created with or without the
-    ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT bit
-    set.
-  * [[{anchor-prefix}limits-maxPerStageDescriptorUpdateAfterBindStorageBuffers]]
-    pname:maxPerStageDescriptorUpdateAfterBindStorageBuffers is similar to
-    pname:maxPerStageDescriptorStorageBuffers but counts descriptors from
-    descriptor sets created with or without the
-    ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT bit
-    set.
-  * [[{anchor-prefix}limits-maxPerStageDescriptorUpdateAfterBindSampledImages]]
-    pname:maxPerStageDescriptorUpdateAfterBindSampledImages is similar to
-    pname:maxPerStageDescriptorSampledImages but counts descriptors from
-    descriptor sets created with or without the
-    ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT bit
-    set.
-  * [[{anchor-prefix}limits-maxPerStageDescriptorUpdateAfterBindStorageImages]]
-    pname:maxPerStageDescriptorUpdateAfterBindStorageImages is similar to
-    pname:maxPerStageDescriptorStorageImages but counts descriptors from
-    descriptor sets created with or without the
-    ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT bit
-    set.
-  * [[{anchor-prefix}limits-maxPerStageDescriptorUpdateAfterBindInputAttachments]]
-    pname:maxPerStageDescriptorUpdateAfterBindInputAttachments is similar to
-    pname:maxPerStageDescriptorInputAttachments but counts descriptors from
-    descriptor sets created with or without the
-    ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT bit
-    set.
-  * [[{anchor-prefix}limits-maxPerStageUpdateAfterBindResources]]
-    pname:maxPerStageUpdateAfterBindResources is similar to
-    pname:maxPerStageResources but counts descriptors from descriptor sets
-    created with or without the
-    ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT bit
-    set.
-  * [[{anchor-prefix}limits-maxDescriptorSetUpdateAfterBindSamplers]]
-    pname:maxDescriptorSetUpdateAfterBindSamplers is similar to
-    pname:maxDescriptorSetSamplers but counts descriptors from descriptor
-    sets created with or without the
-    ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT bit
-    set.
-  * [[{anchor-prefix}limits-maxDescriptorSetUpdateAfterBindUniformBuffers]]
-    pname:maxDescriptorSetUpdateAfterBindUniformBuffers is similar to
-    pname:maxDescriptorSetUniformBuffers but counts descriptors from
-    descriptor sets created with or without the
-    ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT bit
-    set.
-  * [[{anchor-prefix}limits-maxDescriptorSetUpdateAfterBindUniformBuffersDynamic]]
-    pname:maxDescriptorSetUpdateAfterBindUniformBuffersDynamic is similar to
-    pname:maxDescriptorSetUniformBuffersDynamic but counts descriptors from
-    descriptor sets created with or without the
-    ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT bit
-    set.
-    While an application can: allocate dynamic uniform buffer descriptors
-    from a pool created with the
-    ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT,
-    bindings for these descriptors must: not be present in any descriptor
-    set layout that includes bindings created with
-    ename:VK_DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT.
-  * [[{anchor-prefix}limits-maxDescriptorSetUpdateAfterBindStorageBuffers]]
-    pname:maxDescriptorSetUpdateAfterBindStorageBuffers is similar to
-    pname:maxDescriptorSetStorageBuffers but counts descriptors from
-    descriptor sets created with or without the
-    ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT bit
-    set.
-  * [[{anchor-prefix}limits-maxDescriptorSetUpdateAfterBindStorageBuffersDynamic]]
-    pname:maxDescriptorSetUpdateAfterBindStorageBuffersDynamic is similar to
-    pname:maxDescriptorSetStorageBuffersDynamic but counts descriptors from
-    descriptor sets created with or without the
-    ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT bit
-    set.
-    While an application can: allocate dynamic storage buffer descriptors
-    from a pool created with the
-    ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT,
-    bindings for these descriptors must: not be present in any descriptor
-    set layout that includes bindings created with
-    ename:VK_DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT.
-  * [[{anchor-prefix}limits-maxDescriptorSetUpdateAfterBindSampledImages]]
-    pname:maxDescriptorSetUpdateAfterBindSampledImages is similar to
-    pname:maxDescriptorSetSampledImages but counts descriptors from
-    descriptor sets created with or without the
-    ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT bit
-    set.
-  * [[{anchor-prefix}limits-maxDescriptorSetUpdateAfterBindStorageImages]]
-    pname:maxDescriptorSetUpdateAfterBindStorageImages is similar to
-    pname:maxDescriptorSetStorageImages but counts descriptors from
-    descriptor sets created with or without the
-    ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT bit
-    set.
-  * [[{anchor-prefix}limits-maxDescriptorSetUpdateAfterBindInputAttachments]]
-    pname:maxDescriptorSetUpdateAfterBindInputAttachments is similar to
-    pname:maxDescriptorSetInputAttachments but counts descriptors from
-    descriptor sets created with or without the
-    ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT bit
-    set.
-// end::VK_EXT_descriptor_indexing-properties[]
-
-:refpage: VkPhysicalDeviceDescriptorIndexingProperties
-include::{chapters}/limits.txt[tag=limits_desc]
-
-include::{generated}/validity/structs/VkPhysicalDeviceDescriptorIndexingProperties.txt[]
---
-endif::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
-
-ifdef::VK_EXT_inline_uniform_block[]
-[open,refpage='VkPhysicalDeviceInlineUniformBlockPropertiesEXT',desc='Structure describing inline uniform block properties that can be supported by an implementation',type='structs']
---
-The sname:VkPhysicalDeviceInlineUniformBlockPropertiesEXT structure is
-defined as:
-
-include::{generated}/api/structs/VkPhysicalDeviceInlineUniformBlockPropertiesEXT.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * [[limits-maxInlineUniformBlockSize]] pname:maxInlineUniformBlockSize is
-    the maximum size in bytes of an <<descriptorsets-inlineuniformblock,
-    inline uniform block>> binding.
-  * [[limits-maxPerStageDescriptorInlineUniformBlocks]]
-    pname:maxPerStageDescriptorInlineUniformBlock is the maximum number of
-    inline uniform block bindings that can: be accessible to a single shader
-    stage in a pipeline layout.
-    Descriptor bindings with a descriptor type of
-    ename:VK_DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK_EXT count against this
-    limit.
-ifdef::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
-    Only descriptor bindings in descriptor set layouts created without the
-    ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT bit set
-    count against this limit.
-endif::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
-  * [[limits-maxPerStageDescriptorUpdateAfterBindInlineUniformBlocks]]
-    pname:maxPerStageDescriptorUpdateAfterBindInlineUniformBlocks
-ifndef::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
-    equals pname:maxPerStageDescriptorInlineUniformBlocks and is reserved
-    for future use.
-endif::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
-ifdef::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
-    is similar to pname:maxPerStageDescriptorInlineUniformBlocks but counts
-    descriptor bindings from descriptor sets created with or without the
-    ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT bit
-    set.
-endif::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
-  * [[limits-maxDescriptorSetInlineUniformBlocks]]
-    pname:maxDescriptorSetInlineUniformBlocks is the maximum number of
-    inline uniform block bindings that can: be included in descriptor
-    bindings in a pipeline layout across all pipeline shader stages and
-    descriptor set numbers.
-    Descriptor bindings with a descriptor type of
-    ename:VK_DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK_EXT count against this
-    limit.
-ifdef::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
-    Only descriptor bindings in descriptor set layouts created without the
-    ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT bit set
-    count against this limit.
-endif::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
-  * [[limits-maxDescriptorSetUpdateAfterBindInlineUniformBlocks]]
-    pname:maxDescriptorSetUpdateAfterBindInlineUniformBlocks
-ifndef::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
-    equals pname:maxDescriptorSetInlineUniformBlocks and is reserved for
-    future use.
-endif::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
-ifdef::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
-    is similar to pname:maxDescriptorSetInlineUniformBlocks but counts
-    descriptor bindings from descriptor sets created with or without the
-    ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT bit
-    set.
-endif::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
-
-:refpage: VkPhysicalDeviceInlineUniformBlockPropertiesEXT
-include::{chapters}/limits.txt[tag=limits_desc]
-
-include::{generated}/validity/structs/VkPhysicalDeviceInlineUniformBlockPropertiesEXT.txt[]
---
-endif::VK_EXT_inline_uniform_block[]
-
-ifdef::VK_EXT_conservative_rasterization[]
-[open,refpage='VkPhysicalDeviceConservativeRasterizationPropertiesEXT',desc='Structure describing conservative raster properties that can be supported by an implementation',type='structs']
---
-The sname:VkPhysicalDeviceConservativeRasterizationPropertiesEXT structure
-is defined as:
-
-include::{generated}/api/structs/VkPhysicalDeviceConservativeRasterizationPropertiesEXT.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * [[limits-primitiveOverestimationSize]] pname:primitiveOverestimationSize
-    is the size in pixels the generating primitive is increased at each of
-    its edges during conservative rasterization overestimation mode.
-    Even with a size of 0.0, conservative rasterization overestimation rules
-    still apply and if any part of the pixel rectangle is covered by the
-    generating primitive, fragments are generated for the entire pixel.
-    However implementations may: make the pixel coverage area even more
-    conservative by increasing the size of the generating primitive.
-  * [[limits-maxExtraPrimitiveOverestimationSize]]
-    pname:maxExtraPrimitiveOverestimationSize is the maximum size in pixels
-    of extra overestimation the implementation supports in the pipeline
-    state.
-    A value of 0.0 means the implementation does not support any additional
-    overestimation of the generating primitive during conservative
-    rasterization.
-    A value above 0.0 allows the application to further increase the size of
-    the generating primitive during conservative rasterization
-    overestimation.
-  * [[limits-extraPrimitiveOverestimationSizeGranularity]]
-    pname:extraPrimitiveOverestimationSizeGranularity is the granularity of
-    extra overestimation that can be specified in the pipeline state between
-    0.0 and pname:maxExtraPrimitiveOverestimationSize inclusive.
-    A value of 0.0 means the implementation can use the smallest
-    representable non-zero value in the screen space pixel fixed-point grid.
-  * [[limits-primitiveUnderestimation]] pname:primitiveUnderestimation is
-    ename:VK_TRUE if the implementation supports the
-    ename:VK_CONSERVATIVE_RASTERIZATION_MODE_UNDERESTIMATE_EXT conservative
-    rasterization mode in addition to
-    ename:VK_CONSERVATIVE_RASTERIZATION_MODE_OVERESTIMATE_EXT.
-    Otherwise the implementation only supports
-    ename:VK_CONSERVATIVE_RASTERIZATION_MODE_OVERESTIMATE_EXT.
-  * [[limits-conservativePointAndLineRasterization]]
-    pname:conservativePointAndLineRasterization is ename:VK_TRUE if the
-    implementation supports conservative rasterization of point and line
-    primitives as well as triangle primitives.
-    Otherwise the implementation only supports triangle primitives.
-  * [[limits-degenerateTrianglesRasterized]]
-    pname:degenerateTrianglesRasterized is ename:VK_FALSE if the
-    implementation culls primitives generated from triangles that become
-    zero area after they are quantized to the fixed-point rasterization
-    pixel grid.
-    pname:degenerateTrianglesRasterized is ename:VK_TRUE if these primitives
-    are not culled and the provoking vertex attributes and depth value are
-    used for the fragments.
-    The primitive area calculation is done on the primitive generated from
-    the clipped triangle if applicable.
-    Zero area primitives are backfacing and the application can: enable
-    backface culling if desired.
-  * [[limits-degenerateLinesRasterized]] pname:degenerateLinesRasterized is
-    ename:VK_FALSE if the implementation culls lines that become zero length
-    after they are quantized to the fixed-point rasterization pixel grid.
-    pname:degenerateLinesRasterized is ename:VK_TRUE if zero length lines
-    are not culled and the provoking vertex attributes and depth value are
-    used for the fragments.
-  * [[limits-fullyCoveredFragmentShaderInputVariable]]
-    pname:fullyCoveredFragmentShaderInputVariable is ename:VK_TRUE if the
-    implementation supports the SPIR-V builtin fragment shader input
-    variable code:FullyCoveredEXT which specifies that conservative
-    rasterization is enabled and the fragment area is fully covered by the
-    generating primitive.
-  * [[limits-conservativeRasterizationPostDepthCoverage]]
-ifdef::VK_EXT_post_depth_coverage[]
-    pname:conservativeRasterizationPostDepthCoverage is ename:VK_TRUE if the
-    implementation supports conservative rasterization with the
-    code:PostDepthCoverage execution mode enabled.
-    Otherwise the code:PostDepthCoverage execution mode must: not be used
-    when conservative rasterization is enabled.
-endif::VK_EXT_post_depth_coverage[]
-ifndef::VK_EXT_post_depth_coverage[]
-    pname:conservativeRasterizationPostDepthCoverage must: be
-    ename:VK_FALSE.
-endif::VK_EXT_post_depth_coverage[]
-
-:refpage: VkPhysicalDeviceConservativeRasterizationPropertiesEXT
-include::{chapters}/limits.txt[tag=limits_desc]
-
-include::{generated}/validity/structs/VkPhysicalDeviceConservativeRasterizationPropertiesEXT.txt[]
---
-endif::VK_EXT_conservative_rasterization[]
-
-ifdef::VK_EXT_fragment_density_map[]
-[open,refpage='VkPhysicalDeviceFragmentDensityMapPropertiesEXT',desc='Structure describing fragment density map properties that can be supported by an implementation',type='structs']
---
-The sname:VkPhysicalDeviceFragmentDensityMapPropertiesEXT structure is
-defined as:
-
-include::{generated}/api/structs/VkPhysicalDeviceFragmentDensityMapPropertiesEXT.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * [[limits-minfragmentdensitytexelsize]] pname:minFragmentDensityTexelSize
-    is the minimum <<glossary-fragment-density-texel-size,fragment density
-    texel size>>.
-  * [[limits-maxfragmentdensitytexelsize]] pname:maxFragmentDensityTexelSize
-    is the maximum fragment density texel size.
-  * [[limits-fragmentdensityinvocations]] pname:fragmentDensityInvocations
-    specifies whether the implementation may: invoke additional fragment
-    shader invocations for each covered sample.
-
-:refpage: VkPhysicalDeviceFragmentDensityMapPropertiesEXT
-include::{chapters}/limits.txt[tag=limits_desc]
-
-include::{generated}/validity/structs/VkPhysicalDeviceFragmentDensityMapPropertiesEXT.txt[]
---
-endif::VK_EXT_fragment_density_map[]
-
-ifdef::VK_EXT_fragment_density_map2[]
-[open,refpage='VkPhysicalDeviceFragmentDensityMap2PropertiesEXT',desc='Structure describing additional fragment density map properties that can be supported by an implementation',type='structs']
---
-The sname:VkPhysicalDeviceFragmentDensityMap2PropertiesEXT structure is
-defined as:
-
-include::{generated}/api/structs/VkPhysicalDeviceFragmentDensityMap2PropertiesEXT.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * [[limits-subsampledLoads]] pname:subsampledLoads specifies if performing
-    image data read with load operations on subsampled attachments will be
-    resampled to the fragment density of the render pass
-  * [[limits-subsampledCoarseReconstructionEarlyAccess]]
-    pname:subsampledCoarseReconstructionEarlyAccess specifies if performing
-    image data read with samplers created with pname:flags containing
-    ename:VK_SAMPLER_CREATE_SUBSAMPLED_COARSE_RECONSTRUCTION_BIT_EXT in
-    fragment shader will trigger additional reads during
-    ename:VK_PIPELINE_STAGE_VERTEX_SHADER_BIT
-  * [[limits-maxSubsampledArrayLayers]] pname:maxSubsampledArrayLayers is
-    the maximum number of slink:VkImageView array layers for usages
-    supporting subsampled samplers
-  * [[limits-maxDescriptorSetSubsampledSamplers]]
-    pname:maxDescriptorSetSubsampledSamplers is the maximum number of
-    subsampled samplers that can: be included in a slink:VkPipelineLayout
-
-:refpage: VkPhysicalDeviceFragmentDensityMap2PropertiesEXT
-include::{chapters}/limits.txt[tag=limits_desc]
-
-include::{generated}/validity/structs/VkPhysicalDeviceFragmentDensityMap2PropertiesEXT.txt[]
---
-endif::VK_EXT_fragment_density_map2[]
-
-ifdef::VK_AMD_shader_core_properties[]
-[open,refpage='VkPhysicalDeviceShaderCorePropertiesAMD',desc='Structure describing shader core properties that can be supported by an implementation',type='structs']
---
-The sname:VkPhysicalDeviceShaderCorePropertiesAMD structure is defined as:
-
-include::{generated}/api/structs/VkPhysicalDeviceShaderCorePropertiesAMD.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * [[limits-shaderEngineCount]] pname:shaderEngineCount is an unsigned
-    integer value indicating the number of shader engines found inside the
-    shader core of the physical device.
-  * [[limits-shaderArraysPerEngineCount]] pname:shaderArraysPerEngineCount
-    is an unsigned integer value indicating the number of shader arrays
-    inside a shader engine.
-    Each shader array has its own scan converter, set of compute units, and
-    a render back end (color and depth buffers).
-    Shader arrays within a shader engine share shader processor input (wave
-    launcher) and shader export (export buffer) units.
-    Currently, a shader engine can have one or two shader arrays.
-  * [[limits-computeUnitsPerShaderArray]] pname:computeUnitsPerShaderArray
-    is an unsigned integer value indicating the physical number of compute
-    units within a shader array.
-    The active number of compute units in a shader array may: be lower.
-    A compute unit houses a set of SIMDs along with a sequencer module and a
-    local data store.
-  * [[limits-simdPerComputeUnit]] pname:simdPerComputeUnit is an unsigned
-    integer value indicating the number of SIMDs inside a compute unit.
-    Each SIMD processes a single instruction at a time.
-  * [[limits-wavefrontSize]] pname:wavefrontSize is an unsigned integer
-    value indicating the maximum size of a subgroup.
-  * [[limits-sgprsPerSimd]] pname:sgprsPerSimd is an unsigned integer value
-    indicating the number of physical Scalar General Purpose Registers
-    (SGPRs) per SIMD.
-  * [[limits-minSgprAllocation]] pname:minSgprAllocation is an unsigned
-    integer value indicating the minimum number of SGPRs allocated for a
-    wave.
-  * [[limits-maxSgprAllocation]] pname:maxSgprAllocation is an unsigned
-    integer value indicating the maximum number of SGPRs allocated for a
-    wave.
-  * [[limits-sgprAllocationGranularity]] pname:sgprAllocationGranularity is
-    an unsigned integer value indicating the granularity of SGPR allocation
-    for a wave.
-  * [[limits-vgprsPerSimd]] pname:vgprsPerSimd is an unsigned integer value
-    indicating the number of physical Vector General Purpose Registers
-    (VGPRs) per SIMD.
-  * [[limits-minVgprAllocation]] pname:minVgprAllocation is an unsigned
-    integer value indicating the minimum number of VGPRs allocated for a
-    wave.
-  * [[limits-maxVgprAllocation]] pname:maxVgprAllocation is an unsigned
-    integer value indicating the maximum number of VGPRs allocated for a
-    wave.
-  * [[limits-vgprAllocationGranularity]] pname:vgprAllocationGranularity is
-    an unsigned integer value indicating the granularity of VGPR allocation
-    for a wave.
-
-:refpage: VkPhysicalDeviceShaderCorePropertiesAMD
-include::{chapters}/limits.txt[tag=limits_desc]
-
-include::{generated}/validity/structs/VkPhysicalDeviceShaderCorePropertiesAMD.txt[]
---
-endif::VK_AMD_shader_core_properties[]
-
-ifdef::VK_AMD_shader_core_properties2[]
-[open,refpage='VkPhysicalDeviceShaderCoreProperties2AMD',desc='Structure describing shader core properties that can be supported by an implementation',type='structs']
---
-The sname:VkPhysicalDeviceShaderCoreProperties2AMD structure is defined as:
-
-include::{generated}/api/structs/VkPhysicalDeviceShaderCoreProperties2AMD.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * [[features-shaderCoreFeatures]] pname:shaderCoreFeatures is a bitmask of
-    elink:VkShaderCorePropertiesFlagBitsAMD indicating the set of features
-    supported by the shader core.
-  * [[limits-activeComputeUnitCount]] pname:activeComputeUnitCount is an
-    unsigned integer value indicating the number of compute units that have
-    been enabled.
-
-:refpage: VkPhysicalDeviceShaderCoreProperties2AMD
-include::{chapters}/limits.txt[tag=limits_desc]
-
-include::{generated}/validity/structs/VkPhysicalDeviceShaderCoreProperties2AMD.txt[]
---
-
-[open,refpage='VkShaderCorePropertiesFlagBitsAMD',desc='Bitmask specifying shader core properties',type='enums',xrefs='VkPhysicalDeviceShaderCoreProperties2AMD VkShaderCorePropertiesFlagsAMD']
---
-Bits for this type may: be defined by future extensions, or new versions of
-the `apiext:VK_AMD_shader_core_properties2` extension.
-Possible values of the pname:flags member of
-tlink:VkShaderCorePropertiesFlagsAMD are:
-
-include::{generated}/api/enums/VkShaderCorePropertiesFlagBitsAMD.txt[]
---
-
-[open,refpage='VkShaderCorePropertiesFlagsAMD',desc='Bitmask of VkShaderCorePropertiesFlagBitsAMD',type='flags',xrefs='VkPhysicalDeviceShaderCoreProperties2AMD VkShaderCorePropertiesFlagBitsAMD']
---
-include::{generated}/api/flags/VkShaderCorePropertiesFlagsAMD.txt[]
-
-tname:VkShaderCorePropertiesFlagsAMD is a bitmask type for providing zero or
-more elink:VkShaderCorePropertiesFlagBitsAMD.
---
-endif::VK_AMD_shader_core_properties2[]
-
-ifdef::VK_VERSION_1_2,VK_KHR_depth_stencil_resolve[]
-[open,refpage='VkPhysicalDeviceDepthStencilResolveProperties',desc='Structure describing depth/stencil resolve properties that can be supported by an implementation',type='structs',alias='VkPhysicalDeviceDepthStencilResolvePropertiesKHR']
---
-The sname:VkPhysicalDeviceDepthStencilResolveProperties structure is defined
-as:
-
-include::{generated}/api/structs/VkPhysicalDeviceDepthStencilResolveProperties.txt[]
-
-ifdef::VK_KHR_depth_stencil_resolve[]
-or the equivalent
-
-include::{generated}/api/structs/VkPhysicalDeviceDepthStencilResolvePropertiesKHR.txt[]
-endif::VK_KHR_depth_stencil_resolve[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-
-// Must have preceding whitespace
-ifdef::VK_VERSION_1_2[:anchor-prefix: extension-]
-ifndef::VK_VERSION_1_2[:anchor-prefix:]
-// tag::VK_KHR_depth_stencil_resolve-properties[]
-  * [[{anchor-prefix}features-depthResolveModes]]
-    pname:supportedDepthResolveModes is a bitmask of
-    elink:VkResolveModeFlagBits indicating the set of supported depth
-    resolve modes.
-    ename:VK_RESOLVE_MODE_SAMPLE_ZERO_BIT must: be included in the set but
-    implementations may: support additional modes.
-  * [[{anchor-prefix}features-stencilResolveModes]]
-    pname:supportedStencilResolveModes is a bitmask of
-    elink:VkResolveModeFlagBits indicating the set of supported stencil
-    resolve modes.
-    ename:VK_RESOLVE_MODE_SAMPLE_ZERO_BIT must: be included in the set but
-    implementations may: support additional modes.
-    ename:VK_RESOLVE_MODE_AVERAGE_BIT must: not be included in the set.
-  * [[{anchor-prefix}features-independentResolveNone]]
-    pname:independentResolveNone is ename:VK_TRUE if the implementation
-    supports setting the depth and stencil resolve modes to different values
-    when one of those modes is ename:VK_RESOLVE_MODE_NONE.
-    Otherwise the implementation only supports setting both modes to the
-    same value.
-  * [[{anchor-prefix}features-independentResolve]] pname:independentResolve
-    is ename:VK_TRUE if the implementation supports all combinations of the
-    supported depth and stencil resolve modes, including setting either
-    depth or stencil resolve mode to ename:VK_RESOLVE_MODE_NONE.
-    An implementation that supports pname:independentResolve must: also
-    support pname:independentResolveNone.
-// end::VK_KHR_depth_stencil_resolve-properties[]
-
-:refpage: VkPhysicalDeviceDepthStencilResolveProperties
-include::{chapters}/limits.txt[tag=limits_desc]
-
-include::{generated}/validity/structs/VkPhysicalDeviceDepthStencilResolveProperties.txt[]
---
-endif::VK_VERSION_1_2,VK_KHR_depth_stencil_resolve[]
-
-ifdef::VK_KHR_performance_query[]
-include::VK_KHR_performance_query/props.txt[]
-endif::VK_KHR_performance_query[]
-
-ifdef::VK_NV_shading_rate_image[]
-[open,refpage='VkPhysicalDeviceShadingRateImagePropertiesNV',desc='Structure describing shading rate image limits that can be supported by an implementation',type='structs']
---
-The sname:VkPhysicalDeviceShadingRateImagePropertiesNV structure is defined
-as:
-
-include::{generated}/api/structs/VkPhysicalDeviceShadingRateImagePropertiesNV.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * [[limits-shading-rate-texel-size]] pname:shadingRateTexelSize indicates
-    the width and height of the portion of the framebuffer corresponding to
-    each texel in the shading rate image.
-  * [[limits-shading-rate-palette-size]] pname:shadingRatePaletteSize
-    indicates the maximum number of palette entries supported for the
-    shading rate image.
-  * [[limits-shading-rate-max-coarse-samples]]
-    pname:shadingRateMaxCoarseSamples specifies the maximum number of
-    coverage samples supported in a single fragment.
-    If the product of the fragment size derived from the base shading rate
-    and the number of coverage samples per pixel exceeds this limit, the
-    final shading rate will be adjusted so that its product does not exceed
-    the limit.
-
-:refpage: VkPhysicalDeviceShadingRateImagePropertiesNV
-include::{chapters}/limits.txt[tag=limits_desc]
-
-These properties are related to the <<primsrast-shading-rate-image, shading
-rate image>> feature.
-
-include::{generated}/validity/structs/VkPhysicalDeviceShadingRateImagePropertiesNV.txt[]
---
-endif::VK_NV_shading_rate_image[]
-
-ifdef::VK_EXT_transform_feedback[]
-[open,refpage='VkPhysicalDeviceTransformFeedbackPropertiesEXT',desc='Structure describing transform feedback properties that can be supported by an implementation',type='structs']
---
-The sname:VkPhysicalDeviceTransformFeedbackPropertiesEXT structure is
-defined as:
-
-include::{generated}/api/structs/VkPhysicalDeviceTransformFeedbackPropertiesEXT.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * [[limits-maxTransformFeedbackStreams]] pname:maxTransformFeedbackStreams
-    is the maximum number of vertex streams that can be output from geometry
-    shaders declared with the code:GeometryStreams capability.
-    If the implementation does not support
-    sname:VkPhysicalDeviceTransformFeedbackFeaturesEXT::pname:geometryStreams
-    then pname:maxTransformFeedbackStreams must: be set to `1`.
-  * [[limits-maxTransformFeedbackBuffers]] pname:maxTransformFeedbackBuffers
-    is the maximum number of transform feedback buffers that can be bound
-    for capturing shader outputs from the last
-    <<pipeline-graphics-subsets-pre-rasterization,pre-rasterization shader
-    stage>>.
-  * [[limits-maxTransformFeedbackBufferSize]]
-    pname:maxTransformFeedbackBufferSize is the maximum size that can be
-    specified when binding a buffer for transform feedback in
-    flink:vkCmdBindTransformFeedbackBuffersEXT.
-  * [[limits-maxTransformFeedbackStreamDataSize]]
-    pname:maxTransformFeedbackStreamDataSize is the maximum amount of data
-    in bytes for each vertex that captured to one or more transform feedback
-    buffers associated with a specific vertex stream.
-  * [[limits-maxTransformFeedbackBufferDataSize]]
-    pname:maxTransformFeedbackBufferDataSize is the maximum amount of data
-    in bytes for each vertex that can be captured to a specific transform
-    feedback buffer.
-  * [[limits-maxTransformFeedbackBufferDataStride]]
-    pname:maxTransformFeedbackBufferDataStride is the maximum stride between
-    each capture of vertex data to the buffer.
-  * [[limits-transformFeedbackQueries]] pname:transformFeedbackQueries is
-    ename:VK_TRUE if the implementation supports the
-    ename:VK_QUERY_TYPE_TRANSFORM_FEEDBACK_STREAM_EXT query type.
-    pname:transformFeedbackQueries is ename:VK_FALSE if queries of this type
-    cannot: be created.
-  * [[limits-transformFeedbackStreamsLinesTriangles]]
-    pname:transformFeedbackStreamsLinesTriangles is ename:VK_TRUE if the
-    implementation supports the geometry shader code:OpExecutionMode of
-    code:OutputLineStrip and code:OutputTriangleStrip in addition to
-    code:OutputPoints when more than one vertex stream is output.
-    If pname:transformFeedbackStreamsLinesTriangles is ename:VK_FALSE the
-    implementation only supports an code:OpExecutionMode of
-    code:OutputPoints when more than one vertex stream is output from the
-    geometry shader.
-  * [[limits-transformFeedbackRasterizationStreamSelect]]
-    pname:transformFeedbackRasterizationStreamSelect is ename:VK_TRUE if the
-    implementation supports the code:GeometryStreams SPIR-V capability and
-    the application can use
-    slink:VkPipelineRasterizationStateStreamCreateInfoEXT to modify which
-    vertex stream output is used for rasterization.
-    Otherwise vertex stream `0` must: always be used for rasterization.
-  * [[limits-transformFeedbackDraw]] pname:transformFeedbackDraw is
-    ename:VK_TRUE if the implementation supports the
-    flink:vkCmdDrawIndirectByteCountEXT function otherwise the function
-    must: not be called.
-
-:refpage: VkPhysicalDeviceTransformFeedbackPropertiesEXT
-include::{chapters}/limits.txt[tag=limits_desc]
-
-include::{generated}/validity/structs/VkPhysicalDeviceTransformFeedbackPropertiesEXT.txt[]
---
-endif::VK_EXT_transform_feedback[]
-
-ifdef::VK_NV_ray_tracing[]
-[open,refpage='VkPhysicalDeviceRayTracingPropertiesNV',desc='Properties of the physical device for ray tracing',type='structs']
---
-The sname:VkPhysicalDeviceRayTracingPropertiesNV structure is defined as:
-
-include::{generated}/api/structs/VkPhysicalDeviceRayTracingPropertiesNV.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:shaderGroupHandleSize is the size in bytes of the shader header.
-  * [[limits-maxRecursionDepth]] pname:maxRecursionDepth is the maximum
-    number of levels of recursion allowed in a trace command.
-  * pname:maxShaderGroupStride is the maximum stride in bytes allowed
-    between shader groups in the shader binding table.
-  * pname:shaderGroupBaseAlignment is the required: alignment in bytes for
-    the base of the shader binding table.
-  * pname:maxGeometryCount is the maximum number of geometries in the bottom
-    level acceleration structure.
-  * pname:maxInstanceCount is the maximum number of instances in the top
-    level acceleration structure.
-  * pname:maxTriangleCount is the maximum number of triangles in all
-    geometries in the bottom level acceleration structure.
-  * pname:maxDescriptorSetAccelerationStructures is the maximum number of
-    acceleration structure descriptors that are allowed in a descriptor set.
-
-:refpage: VkPhysicalDeviceRayTracingPropertiesNV
-include::{chapters}/limits.txt[tag=limits_desc]
-
-ifdef::VK_KHR_ray_tracing_pipeline[]
-Limits specified by this structure must: match those specified with the same
-name in slink:VkPhysicalDeviceAccelerationStructurePropertiesKHR and
-slink:VkPhysicalDeviceRayTracingPipelinePropertiesKHR.
-endif::VK_KHR_ray_tracing_pipeline[]
-
-include::{generated}/validity/structs/VkPhysicalDeviceRayTracingPropertiesNV.txt[]
---
-endif::VK_NV_ray_tracing[]
-
-ifdef::VK_KHR_acceleration_structure[]
-[open,refpage='VkPhysicalDeviceAccelerationStructurePropertiesKHR',desc='Properties of the physical device for acceleration structure',type='structs']
---
-The sname:VkPhysicalDeviceAccelerationStructurePropertiesKHR structure is
-defined as:
-
-include::{generated}/api/structs/VkPhysicalDeviceAccelerationStructurePropertiesKHR.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:maxGeometryCount is the maximum number of geometries in the bottom
-    level acceleration structure.
-  * pname:maxInstanceCount is the maximum number of instances in the top
-    level acceleration structure.
-  * pname:maxPrimitiveCount is the maximum number of triangles or AABBs in
-    all geometries in the bottom level acceleration structure.
-  * [[limits-maxPerStageDescriptorAccelerationStructures]]
-    pname:maxPerStageDescriptorAccelerationStructures is the maximum number
-    of acceleration structure bindings that can: be accessible to a single
-    shader stage in a pipeline layout.
-    Descriptor bindings with a descriptor type of
-    ename:VK_DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_KHR count against this
-    limit.
-    Only descriptor bindings in descriptor set layouts created without the
-    ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT bit set
-    count against this limit.
-  * [[limits-maxPerStageDescriptorUpdateAfterBindAccelerationStructures]]
-    pname:maxPerStageDescriptorUpdateAfterBindAccelerationStructures is
-    similar to pname:maxPerStageDescriptorAccelerationStructures but counts
-    descriptor bindings from descriptor sets created with or without the
-    ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT bit
-    set.
-  * [[limits-maxDescriptorSetAccelerationStructures]]
-    pname:maxDescriptorSetAccelerationStructures is the maximum number of
-    acceleration structure descriptors that can: be included in descriptor
-    bindings in a pipeline layout across all pipeline shader stages and
-    descriptor set numbers.
-    Descriptor bindings with a descriptor type of
-    ename:VK_DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_KHR count against this
-    limit.
-    Only descriptor bindings in descriptor set layouts created without the
-    ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT bit set
-    count against this limit.
-  * [[limits-maxDescriptorSetUpdateAfterBindAccelerationStructures]]
-    pname:maxDescriptorSetUpdateAfterBindAccelerationStructures is similar
-    to pname:maxDescriptorSetAccelerationStructures but counts descriptor
-    bindings from descriptor sets created with or without the
-    ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT bit
-    set.
-  * [[limits-minAccelerationStructureScratchOffsetAlignment]]
-    pname:minAccelerationStructureScratchOffsetAlignment is the minimum
-    required: alignment, in bytes, for scratch data passed in to an
-    acceleration structure build command.
-
-:refpage: VkPhysicalDeviceAccelerationStructurePropertiesKHR
-include::{chapters}/limits.txt[tag=limits_desc]
-
-ifdef::VK_NV_ray_tracing[]
-Limits specified by this structure must: match those specified with the same
-name in slink:VkPhysicalDeviceRayTracingPropertiesNV.
-endif::VK_NV_ray_tracing[]
-
-include::{generated}/validity/structs/VkPhysicalDeviceAccelerationStructurePropertiesKHR.txt[]
---
-endif::VK_KHR_acceleration_structure[]
-
-ifdef::VK_KHR_ray_tracing_pipeline[]
-[open,refpage='VkPhysicalDeviceRayTracingPipelinePropertiesKHR',desc='Properties of the physical device for ray tracing',type='structs']
---
-The sname:VkPhysicalDeviceRayTracingPipelinePropertiesKHR structure is
-defined as:
-
-include::{generated}/api/structs/VkPhysicalDeviceRayTracingPipelinePropertiesKHR.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:shaderGroupHandleSize is the size in bytes of the shader header.
-  * [[limits-maxRayRecursionDepth]] pname:maxRayRecursionDepth is the
-    maximum number of levels of ray recursion allowed in a trace command.
-  * pname:maxShaderGroupStride is the maximum stride in bytes allowed
-    between shader groups in the shader binding table.
-  * pname:shaderGroupBaseAlignment is the required: alignment in bytes for
-    the base of the shader binding table.
-  * pname:shaderGroupHandleCaptureReplaySize is the number of bytes for the
-    information required to do capture and replay for shader group handles.
-  * pname:maxRayDispatchInvocationCount is the maximum number of ray
-    generation shader invocations which may: be produced by a single
-    flink:vkCmdTraceRaysIndirectKHR or flink:vkCmdTraceRaysKHR command.
-  * pname:shaderGroupHandleAlignment is the required: alignment in bytes for
-    each shader binding table entry.
-  * pname:maxRayHitAttributeSize is the maximum size in bytes for a ray
-    attribute structure
-
-:refpage: VkPhysicalDeviceRayTracingPipelinePropertiesKHR
-include::{chapters}/limits.txt[tag=limits_desc]
-
-ifdef::VK_NV_ray_tracing[]
-Limits specified by this structure must: match those specified with the same
-name in slink:VkPhysicalDeviceRayTracingPropertiesNV.
-endif::VK_NV_ray_tracing[]
-
-include::{generated}/validity/structs/VkPhysicalDeviceRayTracingPipelinePropertiesKHR.txt[]
---
-endif::VK_KHR_ray_tracing_pipeline[]
-
-ifdef::VK_NV_cooperative_matrix[]
-[open,refpage='VkPhysicalDeviceCooperativeMatrixPropertiesNV',desc='Structure describing cooperative matrix properties supported by an implementation',type='structs']
---
-The sname:VkPhysicalDeviceCooperativeMatrixPropertiesNV structure is defined
-as:
-
-include::{generated}/api/structs/VkPhysicalDeviceCooperativeMatrixPropertiesNV.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * [[limits-cooperativeMatrixSupportedStages]]
-    pname:cooperativeMatrixSupportedStages is a bitfield of
-    elink:VkShaderStageFlagBits describing the shader stages that
-    cooperative matrix instructions are supported in.
-    pname:cooperativeMatrixSupportedStages will have the
-    ename:VK_SHADER_STAGE_COMPUTE_BIT bit set if any of the physical
-    device's queues support ename:VK_QUEUE_COMPUTE_BIT.
-
-:refpage: VkPhysicalDeviceCooperativeMatrixPropertiesNV
-include::{chapters}/limits.txt[tag=limits_desc]
-
-include::{generated}/validity/structs/VkPhysicalDeviceCooperativeMatrixPropertiesNV.txt[]
---
-endif::VK_NV_cooperative_matrix[]
-
-ifdef::VK_NV_shader_sm_builtins[]
-[open,refpage='VkPhysicalDeviceShaderSMBuiltinsPropertiesNV',desc='Structure describing shader SM Builtins properties supported by an implementation',type='structs']
---
-The sname:VkPhysicalDeviceShaderSMBuiltinsPropertiesNV structure is defined
-as:
-
-include::{generated}/api/structs/VkPhysicalDeviceShaderSMBuiltinsPropertiesNV.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * [[limits-shaderSMCount]] pname:shaderSMCount is the number of SMs on the
-    device.
-  * [[limits-shaderWarpsPerSM]] pname:shaderWarpsPerSM is the maximum number
-    of simultaneously executing warps on an SM.
-
-:refpage: VkPhysicalDeviceShaderSMBuiltinsPropertiesNV
-include::{chapters}/limits.txt[tag=limits_desc]
-
-include::{generated}/validity/structs/VkPhysicalDeviceShaderSMBuiltinsPropertiesNV.txt[]
---
-endif::VK_NV_shader_sm_builtins[]
-
-ifdef::VK_EXT_texel_buffer_alignment[]
-[open,refpage='VkPhysicalDeviceTexelBufferAlignmentPropertiesEXT',desc='Structure describing the texel buffer alignment requirements supported by an implementation',type='structs']
---
-The sname:VkPhysicalDeviceTexelBufferAlignmentPropertiesEXT structure is
-defined as:
-
-include::{generated}/api/structs/VkPhysicalDeviceTexelBufferAlignmentPropertiesEXT.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * [[limits-storageTexelBufferOffsetAlignmentBytes]]
-    pname:storageTexelBufferOffsetAlignmentBytes is a byte alignment that is
-    sufficient for a storage texel buffer of any format.
-  * [[limits-storageTexelBufferOffsetSingleTexelAlignment]]
-    pname:storageTexelBufferOffsetSingleTexelAlignment indicates whether
-    single texel alignment is sufficient for a storage texel buffer of any
-    format.
-  * [[limits-uniformTexelBufferOffsetAlignmentBytes]]
-    pname:uniformTexelBufferOffsetAlignmentBytes is a byte alignment that is
-    sufficient for a uniform texel buffer of any format.
-  * [[limits-uniformTexelBufferOffsetSingleTexelAlignment]]
-    pname:uniformTexelBufferOffsetSingleTexelAlignment indicates whether
-    single texel alignment is sufficient for a uniform texel buffer of any
-    format.
-
-:refpage: VkPhysicalDeviceTexelBufferAlignmentPropertiesEXT
-include::{chapters}/limits.txt[tag=limits_desc]
-
-If the single texel alignment property is ename:VK_FALSE, then the buffer
-view's offset must: be aligned to the corresponding byte alignment value.
-If the single texel alignment property is ename:VK_TRUE, then the buffer
-view's offset must: be aligned to the lesser of the corresponding byte
-alignment value or the size of a single texel, based on
-slink:VkBufferViewCreateInfo::pname:format.
-If the size of a single texel is a multiple of three bytes, then the size of
-a single component of the format is used instead.
-
-These limits must: not advertise a larger alignment than the
-<<limits-required,required>> maximum minimum value of
-slink:VkPhysicalDeviceLimits::pname:minTexelBufferOffsetAlignment, for any
-format that supports use as a texel buffer.
-
-include::{generated}/validity/structs/VkPhysicalDeviceTexelBufferAlignmentPropertiesEXT.txt[]
---
-endif::VK_EXT_texel_buffer_alignment[]
-
-ifdef::VK_VERSION_1_2,VK_KHR_timeline_semaphore[]
-[open,refpage='VkPhysicalDeviceTimelineSemaphoreProperties',desc='Structure describing timeline semaphore properties that can be supported by an implementation',type='structs',alias='VkPhysicalDeviceTimelineSemaphorePropertiesKHR']
---
-The sname:VkPhysicalDeviceTimelineSemaphoreProperties structure is defined
-as:
-
-include::{generated}/api/structs/VkPhysicalDeviceTimelineSemaphoreProperties.txt[]
-
-ifdef::VK_KHR_timeline_semaphore[]
-or the equivalent
-
-include::{generated}/api/structs/VkPhysicalDeviceTimelineSemaphorePropertiesKHR.txt[]
-endif::VK_KHR_timeline_semaphore[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-
-// Must have preceding whitespace
-ifdef::VK_VERSION_1_2[:anchor-prefix: extension-]
-ifndef::VK_VERSION_1_2[:anchor-prefix:]
-// tag::VK_KHR_timeline_semaphore-properties[]
-  * [[{anchor-prefix}limits-maxTimelineSemaphoreValueDifference]]
-    pname:maxTimelineSemaphoreValueDifference indicates the maximum
-    difference allowed by the implementation between the current value of a
-    timeline semaphore and any pending signal or wait operations.
-// end::VK_KHR_timeline_semaphore-properties[]
-
-:refpage: VkPhysicalDeviceTimelineSemaphoreProperties
-include::{chapters}/limits.txt[tag=limits_desc]
-
-include::{generated}/validity/structs/VkPhysicalDeviceTimelineSemaphoreProperties.txt[]
---
-endif::VK_VERSION_1_2,VK_KHR_timeline_semaphore[]
-
-ifdef::VK_EXT_line_rasterization[]
-[open,refpage='VkPhysicalDeviceLineRasterizationPropertiesEXT',desc='Structure describing line rasterization properties supported by an implementation',type='structs']
---
-The sname:VkPhysicalDeviceLineRasterizationPropertiesEXT structure is
-defined as:
-
-include::{generated}/api/structs/VkPhysicalDeviceLineRasterizationPropertiesEXT.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * [[limits-lineSubPixelPrecisionBits]] pname:lineSubPixelPrecisionBits is
-    the number of bits of subpixel precision in framebuffer coordinates
-    [eq]#x~f~# and [eq]#y~f~# when rasterizing <<primsrast-lines,line
-    segments>>.
-
-:refpage: VkPhysicalDeviceLineRasterizationPropertiesEXT
-include::{chapters}/limits.txt[tag=limits_desc]
-
-include::{generated}/validity/structs/VkPhysicalDeviceLineRasterizationPropertiesEXT.txt[]
---
-endif::VK_EXT_line_rasterization[]
-
-ifdef::VK_EXT_robustness2[]
-[open,refpage='VkPhysicalDeviceRobustness2PropertiesEXT',desc='Structure describing robust buffer access properties supported by an implementation',type='structs']
---
-The sname:VkPhysicalDeviceRobustness2PropertiesEXT structure is defined as:
-
-include::{generated}/api/structs/VkPhysicalDeviceRobustness2PropertiesEXT.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * [[limits-robustStorageBufferAccessSizeAlignment]]
-    pname:robustStorageBufferAccessSizeAlignment is the number of bytes that
-    the range of a storage buffer descriptor is rounded up to when used for
-    bounds-checking when
-    <<features-robustBufferAccess2,pname:robustBufferAccess2>> is enabled.
-    This value is either 1 or 4.
-  * [[limits-robustUniformBufferAccessSizeAlignment]]
-    pname:robustUniformBufferAccessSizeAlignment is the number of bytes that
-    the range of a uniform buffer descriptor is rounded up to when used for
-    bounds-checking when
-    <<features-robustBufferAccess2,pname:robustBufferAccess2>> is enabled.
-    This value is a power of two in the range [1, 256].
-
-:refpage: VkPhysicalDeviceRobustness2PropertiesEXT
-include::{chapters}/limits.txt[tag=limits_desc]
-
-include::{generated}/validity/structs/VkPhysicalDeviceRobustness2PropertiesEXT.txt[]
---
-endif::VK_EXT_robustness2[]
-
-ifdef::VK_NV_device_generated_commands[]
-[open,refpage='VkPhysicalDeviceDeviceGeneratedCommandsPropertiesNV',desc='Structure describing push descriptor limits that can be supported by an implementation',type='structs']
---
-The sname:VkPhysicalDeviceDeviceGeneratedCommandsPropertiesNV structure is
-defined as:
-
-include::{generated}/api/structs/VkPhysicalDeviceDeviceGeneratedCommandsPropertiesNV.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:maxGraphicsShaderGroupCount is the maximum number of shader groups
-    in slink:VkGraphicsPipelineShaderGroupsCreateInfoNV.
-  * pname:maxIndirectSequenceCount is the maximum number of sequences in
-    slink:VkGeneratedCommandsInfoNV and in
-    slink:VkGeneratedCommandsMemoryRequirementsInfoNV.
-  * pname:maxIndirectCommandsLayoutTokenCount is the maximum number of
-    tokens in slink:VkIndirectCommandsLayoutCreateInfoNV.
-  * pname:maxIndirectCommandsStreamCount is the maximum number of streams in
-    slink:VkIndirectCommandsLayoutCreateInfoNV.
-  * pname:maxIndirectCommandsTokenOffset is the maximum offset in
-    sname:VkIndirectCommandsLayoutTokenNV.
-  * pname:maxIndirectCommandsStreamStride is the maximum stream stride in
-    slink:VkIndirectCommandsLayoutCreateInfoNV.
-  * pname:minSequenceCountBufferOffsetAlignment is the minimum alignment for
-    memory addresses which can: be used in sname:VkGeneratedCommandsInfoNV.
-  * pname:minSequenceIndexBufferOffsetAlignment is the minimum alignment for
-    memory addresses which can: be used in sname:VkGeneratedCommandsInfoNV.
-  * pname:minIndirectCommandsBufferOffsetAlignment is the minimum alignment
-    for memory addresses used in sname:VkIndirectCommandsStreamNV, and as
-    preprocess buffer in sname:VkGeneratedCommandsInfoNV.
-
-:refpage: VkPhysicalDeviceDeviceGeneratedCommandsPropertiesNV
-include::{chapters}/limits.txt[tag=limits_desc]
-
-include::{generated}/validity/structs/VkPhysicalDeviceDeviceGeneratedCommandsPropertiesNV.txt[]
---
-
-endif::VK_NV_device_generated_commands[]
-
-ifdef::VK_KHR_portability_subset[]
-[open,refpage='VkPhysicalDevicePortabilitySubsetPropertiesKHR',desc='Structure describing additional properties supported by a portable implementation',type='structs']
---
-The sname:VkPhysicalDevicePortabilitySubsetPropertiesKHR structure is
-defined as:
-
-include::{generated}/api/structs/VkPhysicalDevicePortabilitySubsetPropertiesKHR.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * [[limits-minVertexInputBindingStrideAlignment]]
-    pname:minVertexInputBindingStrideAlignment indicates the minimum
-    alignment for vertex input strides.
-    slink:VkVertexInputBindingDescription::pname:stride must: be a multiple
-    of, and at least as large as, this value.
-
-:refpage: VkPhysicalDevicePortabilitySubsetPropertiesKHR
-include::{chapters}/limits.txt[tag=limits_desc]
-
-include::{generated}/validity/structs/VkPhysicalDevicePortabilitySubsetPropertiesKHR.txt[]
---
-endif::VK_KHR_portability_subset[]
-
-
-ifdef::VK_KHR_fragment_shading_rate[]
-[open,refpage='VkPhysicalDeviceFragmentShadingRatePropertiesKHR',desc='Structure describing variable fragment shading rate limits that can be supported by an implementation',type='structs']
---
-The sname:VkPhysicalDeviceFragmentShadingRatePropertiesKHR structure is
-defined as:
-
-include::{generated}/api/structs/VkPhysicalDeviceFragmentShadingRatePropertiesKHR.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * [[limits-minFragmentShadingRateAttachmentTexelSize]]
-    pname:minFragmentShadingRateAttachmentTexelSize indicates minimum
-    supported width and height of the portion of the framebuffer
-    corresponding to each texel in a fragment shading rate attachment.
-    Each value must: be less than or equal to the values in
-    pname:maxFragmentShadingRateAttachmentTexelSize.
-    Each value must: be a power-of-two.
-    It must: be [eq]#(0,0)# if the <<features-attachmentFragmentShadingRate,
-    pname:attachmentFragmentShadingRate>> feature is not supported.
-  * [[limits-maxFragmentShadingRateAttachmentTexelSize]]
-    pname:maxFragmentShadingRateAttachmentTexelSize indicates maximum
-    supported width and height of the portion of the framebuffer
-    corresponding to each texel in a fragment shading rate attachment.
-    Each value must: be greater than or equal to the values in
-    pname:minFragmentShadingRateAttachmentTexelSize.
-    Each value must: be a power-of-two.
-    It must: be [eq]#(0,0)# if the <<features-attachmentFragmentShadingRate,
-    pname:attachmentFragmentShadingRate>> feature is not supported.
-  * [[limits-maxFragmentShadingRateAttachmentTexelSizeAspectRatio]]
-    pname:maxFragmentShadingRateAttachmentTexelSizeAspectRatio indicates the
-    maximum ratio between the width and height of the portion of the
-    framebuffer corresponding to each texel in a fragment shading rate
-    attachment.
-    pname:maxFragmentShadingRateAttachmentTexelSizeAspectRatio must: be a
-    power-of-two value, and must: be less than or equal to
-    [eq]#max(pname:maxFragmentShadingRateAttachmentTexelSize.width /
-    pname:minFragmentShadingRateAttachmentTexelSize.height,
-    pname:maxFragmentShadingRateAttachmentTexelSize.height /
-    pname:minFragmentShadingRateAttachmentTexelSize.width)#.
-    It must: be 0 if the <<features-attachmentFragmentShadingRate,
-    pname:attachmentFragmentShadingRate>> feature is not supported.
-  * [[limits-primitiveFragmentShadingRateWithMultipleViewports]]
-    pname:primitiveFragmentShadingRateWithMultipleViewports specifies
-    whether the <<primsrast-fragment-shading-rate-primitive,primitive
-    fragment shading rate>> can: be used when multiple viewports are used.
-    If this value is ename:VK_FALSE, only a single viewport must: be used,
-    and applications must: not write to the
-ifdef::VK_NV_viewport_array2[]
-    code:ViewportMaskNV or
-endif::VK_NV_viewport_array2[]
-    code:ViewportIndex built-in when setting code:PrimitiveShadingRateKHR.
-    It must: be ename:VK_FALSE if
-ifdef::VK_VERSION_1_2[]
-    the <<features-shaderOutputViewportIndex,
-    pname:shaderOutputViewportIndex>> feature,
-endif::VK_VERSION_1_2[]
-ifdef::VK_EXT_shader_viewport_index_layer[]
-    the `apiext:VK_EXT_shader_viewport_index_layer` extension,
-endif::VK_EXT_shader_viewport_index_layer[]
-ifdef::VK_VERSION_1_2,VK_EXT_shader_viewport_index_layer[or]
-    the <<features-geometryShader, pname:geometryShader>> feature is not
-    supported, or if the <<features-primitiveFragmentShadingRate,
-    pname:primitiveFragmentShadingRate>> feature is not supported.
-  * [[limits-layeredShadingRateAttachments]]
-    pname:layeredShadingRateAttachments specifies whether a shading rate
-    attachment image view can: be created with multiple layers.
-    If this value is ename:VK_FALSE, when creating an image view with a
-    pname:usage that includes
-    ename:VK_IMAGE_USAGE_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR,
-    pname:layerCount must: be `1`.
-    It must: be ename:VK_FALSE if
-ifdef::VK_VERSION_1_1,VK_KHR_multiview[]
-    the <<features-multiview,pname:multiview>> feature,
-endif::VK_VERSION_1_1,VK_KHR_multiview[]
-ifdef::VK_VERSION_1_2[]
-    the <<features-shaderOutputViewportIndex,
-    pname:shaderOutputViewportIndex>> feature,
-endif::VK_VERSION_1_2[]
-ifdef::VK_EXT_shader_viewport_index_layer[]
-    the `apiext:VK_EXT_shader_viewport_index_layer` extension,
-endif::VK_EXT_shader_viewport_index_layer[]
-ifdef::VK_VERSION_1_1,VK_KHR_multiview,VK_VERSION_1_2,VK_EXT_shader_viewport_index_layer[or]
-    the <<features-geometryShader, pname:geometryShader>> feature is not
-    supported, or if the <<features-attachmentFragmentShadingRate,
-    pname:attachmentFragmentShadingRate>> feature is not supported.
-  * [[limits-fragmentShadingRateNonTrivialCombinerOps]]
-    pname:fragmentShadingRateNonTrivialCombinerOps specifies whether
-    elink:VkFragmentShadingRateCombinerOpKHR enums other than
-    ename:VK_FRAGMENT_SHADING_RATE_COMBINER_OP_KEEP_KHR or
-    ename:VK_FRAGMENT_SHADING_RATE_COMBINER_OP_REPLACE_KHR can: be used.
-    It must: be ename:VK_FALSE unless either the
-    <<features-primitiveFragmentShadingRate,
-    pname:primitiveFragmentShadingRate>> or
-    <<features-attachmentFragmentShadingRate,
-    pname:attachmentFragmentShadingRate>> feature is supported.
-  * [[limits-maxFragmentSize]] pname:maxFragmentSize indicates the maximum
-    supported width and height of a fragment.
-    Its pname:width and pname:height members must: both be power-of-two
-    values.
-    This limit is purely informational, and is not validated.
-  * [[limits-maxFragmentSizeAspectRatio]] pname:maxFragmentSizeAspectRatio
-    indicates the maximum ratio between the width and height of a fragment.
-    pname:maxFragmentSizeAspectRatio must: be a power-of-two value, and
-    must: be less than or equal to the maximum of the pname:width and
-    pname:height members of pname:maxFragmentSize.
-    This limit is purely informational, and is not validated.
-  * [[limits-maxFragmentShadingRateCoverageSamples]]
-    pname:maxFragmentShadingRateCoverageSamples specifies the maximum number
-    of coverage samples supported in a single fragment.
-    pname:maxFragmentShadingRateCoverageSamples must: be less than or equal
-    to the product of the pname:width and pname:height members of
-    pname:maxFragmentSize, and the sample count reported by
-    pname:maxFragmentShadingRateRasterizationSamples.
-    pname:maxFragmentShadingRateCoverageSamples must: be less than or equal
-    to [eq]#pname:maxSampleMaskWords {times} 32# if
-    pname:fragmentShadingRateWithShaderSampleMask is supported.
-    This limit is purely informational, and is not validated.
-  * [[limits-maxFragmentShadingRateRasterizationSamples]]
-    pname:maxFragmentShadingRateRasterizationSamples is a
-    elink:VkSampleCountFlagBits value specifying the maximum sample rate
-    supported when a fragment covers multiple pixels.
-    This limit is purely informational, and is not validated.
-  * [[limits-fragmentShadingRateWithShaderDepthStencilWrites]]
-    pname:fragmentShadingRateWithShaderDepthStencilWrites specifies whether
-    the implementation supports writing code:FragDepth
-ifdef::VK_EXT_shader_stencil_export[]
-    or code:FragStencilRefEXT
-endif::VK_EXT_shader_stencil_export[]
-    from a fragment shader for multi-pixel fragments.
-    If this value is ename:VK_FALSE, writing to those built-ins will clamp
-    the fragment shading rate to [eq]#(1,1)#.
-  * [[limits-fragmentShadingRateWithSampleMask]]
-    pname:fragmentShadingRateWithSampleMask specifies whether the the
-    implementation supports setting valid bits of
-    slink:VkPipelineMultisampleStateCreateInfo::pname:pSampleMask to `0` for
-    multi-pixel fragments.
-    If this value is ename:VK_FALSE, zeroing valid bits in the sample mask
-    will clamp the fragment shading rate to [eq]#(1,1)#.
-  * [[limits-fragmentShadingRateWithShaderSampleMask]]
-    pname:fragmentShadingRateWithShaderSampleMask specifies whether the
-    implementation supports reading or writing code:SampleMask for
-    multi-pixel fragments.
-    If this value is ename:VK_FALSE, using that built-in will clamp the
-    fragment shading rate to [eq]#(1,1)#.
-  * [[limits-fragmentShadingRateWithConservativeRasterization]]
-    pname:fragmentShadingRateWithConservativeRasterization
-ifndef::VK_EXT_conservative_rasterization[]
-    is reserved for future use.
-endif::VK_EXT_conservative_rasterization[]
-ifdef::VK_EXT_conservative_rasterization[]
-    specifies whether <<primsrast-conservativeraster, conservative
-    rasterization>> is supported for multi-pixel fragments.
-    It must: be ename:VK_FALSE if `apiext:VK_EXT_conservative_rasterization`
-    is not supported.
-    If this value is ename:VK_FALSE, using <<primsrast-conservativeraster,
-    conservative rasterization>> will clamp the fragment shading rate to
-    [eq]#(1,1)#.
-endif::VK_EXT_conservative_rasterization[]
-  * [[limits-fragmentShadingRateWithFragmentShaderInterlock]]
-    pname:fragmentShadingRateWithFragmentShaderInterlock
-ifndef::VK_EXT_fragment_shader_interlock[]
-    is reserved for future use.
-endif::VK_EXT_fragment_shader_interlock[]
-ifdef::VK_EXT_fragment_shader_interlock[]
-    specifies whether <<fragops-shader-interlock, fragment shader
-    interlock>> is supported for multi-pixel fragments.
-    It must: be ename:VK_FALSE if `apiext:VK_EXT_fragment_shader_interlock`
-    is not supported.
-    If this value is ename:VK_FALSE, using <<fragops-shader-interlock,
-    fragment shader interlock>> will clamp the fragment shading rate to
-    [eq]#(1,1)#.
-endif::VK_EXT_fragment_shader_interlock[]
-  * [[limits-fragmentShadingRateWithCustomSampleLocations]]
-    pname:fragmentShadingRateWithCustomSampleLocations
-ifndef::VK_EXT_sample_locations[]
-    is reserved for future use.
-endif::VK_EXT_sample_locations[]
-ifdef::VK_EXT_sample_locations[]
-    specifies whether <<primsrast-samplelocations, custom sample locations>>
-    are supported for multi-pixel fragments.
-    It must: be ename:VK_FALSE if `apiext:VK_EXT_sample_locations` is not
-    supported.
-    If this value is ename:VK_FALSE, using <<primsrast-samplelocations,
-    custom sample locations>> will clamp the fragment shading rate to
-    [eq]#(1,1)#.
-endif::VK_EXT_sample_locations[]
-  * [[limits-fragmentShadingRateStrictMultiplyCombiner]]
-    pname:fragmentShadingRateStrictMultiplyCombiner specifies whether
-    ename:VK_FRAGMENT_SHADING_RATE_COMBINER_OP_MUL_KHR accurately performs a
-    multiplication or not.
-    Implementations where this value is ename:VK_FALSE will instead combine
-    rates with an addition.
-    If pname:fragmentShadingRateNonTrivialCombinerOps is ename:VK_FALSE,
-    implementations must: report this as ename:VK_FALSE.
-    If pname:fragmentShadingRateNonTrivialCombinerOps is ename:VK_TRUE,
-    implementations should: report this as ename:VK_TRUE.
-
-[NOTE]
-.Note
-====
-Multiplication of the combiner rates using the fragment width/height in
-linear space is equivalent to an addition of those values in log2 space.
-Some implementations inadvertently implemented an addition in linear space
-due to unclear requirements originating outside of this specification.
-This resulted in <<limits-fragmentShadingRateStrictMultiplyCombiner,
-pname:fragmentShadingRateStrictMultiplyCombiner>> being added.
-Fortunately, this only affects situations where a rate of 1 in either
-dimension is combined with another rate of 1.
-All other combinations result in the exact same result as if multiplication
-was performed in linear space due to the clamping logic, and the fact that
-both the sum and product of 2 and 2 are equal.
-In many cases, this limit will not affect the correct operation of
-applications.
-====
-
-:refpage: VkPhysicalDeviceFragmentShadingRatePropertiesKHR
-include::{chapters}/limits.txt[tag=limits_desc]
-
-These properties are related to <<primsrast-fragment-shading-rate, fragment
-shading rates>>.
-
-include::{generated}/validity/structs/VkPhysicalDeviceFragmentShadingRatePropertiesKHR.txt[]
---
-endif::VK_KHR_fragment_shading_rate[]
-
-ifdef::VK_NV_fragment_shading_rate_enums[]
-[open,refpage='VkPhysicalDeviceFragmentShadingRateEnumsPropertiesNV',desc='Structure describing fragment shading rate limits that can be supported by an implementation',type='structs']
---
-The sname:VkPhysicalDeviceFragmentShadingRateEnumsPropertiesNV structure is
-defined as:
-
-include::{generated}/api/structs/VkPhysicalDeviceFragmentShadingRateEnumsPropertiesNV.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * [[limits-maxFragmentShadingRateInvocationCount]]
-    pname:maxFragmentShadingRateInvocationCount is a
-    elink:VkSampleCountFlagBits value indicating the maximum number of
-    fragment shader invocations per fragment supported in pipeline,
-    primitive, and attachment fragment shading rates.
-
-:refpage: VkPhysicalDeviceFragmentShadingRateEnumsPropertiesNV
-include::{chapters}/limits.txt[tag=limits_desc]
-
-These properties are related to <<primsrast-fragment-shading-rate, fragment
-shading rates>>.
-
-include::{generated}/validity/structs/VkPhysicalDeviceFragmentShadingRateEnumsPropertiesNV.txt[]
---
-endif::VK_NV_fragment_shading_rate_enums[]
-
-ifdef::VK_EXT_custom_border_color[]
-[open,refpage='VkPhysicalDeviceCustomBorderColorPropertiesEXT',desc='Structure describing whether custom border colors can be supported by an implementation',type='structs']
---
-The sname:VkPhysicalDeviceCustomBorderColorPropertiesEXT structure is
-defined as:
-
-include::{generated}/api/structs/VkPhysicalDeviceCustomBorderColorPropertiesEXT.txt[]
-
-  * [[limits-maxCustomBorderColorSamplers]]
-    pname:maxCustomBorderColorSamplers indicates the maximum number of
-    samplers with custom border colors which can: simultaneously exist on a
-    device.
-
-:refpage: VkPhysicalDeviceCustomBorderColorPropertiesEXT
-include::{chapters}/limits.txt[tag=limits_desc]
-
-include::{generated}/validity/structs/VkPhysicalDeviceCustomBorderColorPropertiesEXT.txt[]
---
-endif::VK_EXT_custom_border_color[]
-
-ifdef::VK_EXT_provoking_vertex[]
-[open,refpage='VkPhysicalDeviceProvokingVertexPropertiesEXT',desc='Structure describing provoking vertex properties supported by an implementation',type='structs']
---
-The sname:VkPhysicalDeviceProvokingVertexPropertiesEXT structure is defined
-as:
-
-include::{generated}/api/structs/VkPhysicalDeviceProvokingVertexPropertiesEXT.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * [[limits-provokingVertexModePerPipeline]]
-    pname:provokingVertexModePerPipeline indicates whether the
-    implementation supports graphics pipelines with different provoking
-    vertex modes within the same render pass instance.
-  * [[limits-transformFeedbackPreservesTriangleFanProvokingVertex]]
-    pname:transformFeedbackPreservesTriangleFanProvokingVertex indicates
-    whether the implementation can preserve the provoking vertex order when
-    writing triangle fan vertices to transform feedback.
-
-:refpage: VkPhysicalDeviceProvokingVertexPropertiesEXT
-include::{chapters}/limits.txt[tag=limits_desc]
-
-include::{generated}/validity/structs/VkPhysicalDeviceProvokingVertexPropertiesEXT.txt[]
---
-endif::VK_EXT_provoking_vertex[]
-
-ifdef::VK_HUAWEI_subpass_shading[]
-[open,refpage='VkPhysicalDeviceSubpassShadingPropertiesHUAWEI',desc='Structure describing subpass shading properties supported by an implementation',type='structs']
---
-The sname:VkPhysicalDeviceSubpassShadingPropertiesHUAWEI structure is
-defined as:
-
-include::{generated}/api/structs/VkPhysicalDeviceSubpassShadingPropertiesHUAWEI.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * [[limits-maxSubpassShadingWorkgroupSizeAspectRatio]]
-    pname:maxSubpassShadingWorkgroupSizeAspectRatio indicates the maximum
-    ratio between the width and height of the portion of the subpass shading
-    shader workgroup size.
-    pname:maxSubpassShadingWorkgroupSizeAspectRatio must: be a power-of-two
-    value, and must: be less than or equal to max(code:WorkgroupSize.x /
-    code:WorkgroupSize.y, code:WorkgroupSize.y / code:WorkgroupSize.x).
-
-:refpage: VkPhysicalDeviceSubpassShadingPropertiesHUAWEI
-include::{chapters}/limits.txt[tag=limits_desc]
-
-include::{generated}/validity/structs/VkPhysicalDeviceSubpassShadingPropertiesHUAWEI.txt[]
---
-endif::VK_HUAWEI_subpass_shading[]
-
-ifdef::VK_EXT_multi_draw[]
-
-[open,refpage='VkPhysicalDeviceMultiDrawPropertiesEXT',desc='Structure describing multidraw limits of an implementation',type='structs']
---
-The sname:VkPhysicalDeviceMultiDrawPropertiesEXT structure is defined as:
-
-include::{generated}/api/structs/VkPhysicalDeviceMultiDrawPropertiesEXT.txt[]
-
-The members of the sname:VkPhysicalDeviceMultiDrawPropertiesEXT structure
-describe the following features:
-
-  * [[limits-maxMultiDrawCount]] pname:maxMultiDrawCount indicates the
-    maximum number of draw calls which can: be batched into a single
-    multidraw.
-
-:refpage: VkPhysicalDeviceMultiDrawPropertiesPropertiesEXT
-include::{chapters}/limits.txt[tag=limits_desc]
-
-include::{generated}/validity/structs/VkPhysicalDeviceMultiDrawPropertiesEXT.txt[]
---
-
-endif::VK_EXT_multi_draw[]
-
-[[limits-minmax]]
-== Limit Requirements
-
-The following table specifies the required: minimum/maximum for all Vulkan
-graphics implementations.
-Where a limit corresponds to a fine-grained device feature which is
-optional:, the feature name is listed with two required: limits, one when
-the feature is supported and one when it is not supported.
-If an implementation supports a feature, the limits reported are the same
-whether or not the feature is enabled.
-
-[[limits-types]]
-.Required Limit Types
-[width="100%",cols="<20%,<50%,<30%",options="header"]
-|====
-| Type                     | Limit                                      | Feature
-| code:uint32_t            | pname:maxImageDimension1D                  | -
-| code:uint32_t            | pname:maxImageDimension2D                  | -
-| code:uint32_t            | pname:maxImageDimension3D                  | -
-| code:uint32_t            | pname:maxImageDimensionCube                | -
-| code:uint32_t            | pname:maxImageArrayLayers                  | -
-| code:uint32_t            | pname:maxTexelBufferElements               | -
-| code:uint32_t            | pname:maxUniformBufferRange                | -
-| code:uint32_t            | pname:maxStorageBufferRange                | -
-| code:uint32_t            | pname:maxPushConstantsSize                 | -
-| code:uint32_t            | pname:maxMemoryAllocationCount             | -
-| code:uint32_t            | pname:maxSamplerAllocationCount            | -
-| basetype:VkDeviceSize    | pname:bufferImageGranularity               | -
-| basetype:VkDeviceSize    | pname:sparseAddressSpaceSize               | pname:sparseBinding
-| code:uint32_t            | pname:maxBoundDescriptorSets               | -
-| code:uint32_t            | pname:maxPerStageDescriptorSamplers        | -
-| code:uint32_t            | pname:maxPerStageDescriptorUniformBuffers  | -
-| code:uint32_t            | pname:maxPerStageDescriptorStorageBuffers  | -
-| code:uint32_t            | pname:maxPerStageDescriptorSampledImages   | -
-| code:uint32_t            | pname:maxPerStageDescriptorStorageImages   | -
-| code:uint32_t            | pname:maxPerStageDescriptorInputAttachments| -
-| code:uint32_t            | pname:maxPerStageResources                 | -
-| code:uint32_t            | pname:maxDescriptorSetSamplers             | -
-| code:uint32_t            | pname:maxDescriptorSetUniformBuffers       | -
-| code:uint32_t            | pname:maxDescriptorSetUniformBuffersDynamic| -
-| code:uint32_t            | pname:maxDescriptorSetStorageBuffers       | -
-| code:uint32_t            | pname:maxDescriptorSetStorageBuffersDynamic| -
-| code:uint32_t            | pname:maxDescriptorSetSampledImages        | -
-| code:uint32_t            | pname:maxDescriptorSetStorageImages        | -
-| code:uint32_t            | pname:maxDescriptorSetInputAttachments     | -
-| code:uint32_t            | pname:maxVertexInputAttributes             | -
-| code:uint32_t            | pname:maxVertexInputBindings               | -
-| code:uint32_t            | pname:maxVertexInputAttributeOffset        | -
-| code:uint32_t            | pname:maxVertexInputBindingStride          | -
-| code:uint32_t            | pname:maxVertexOutputComponents            | -
-| code:uint32_t            | pname:maxTessellationGenerationLevel       | pname:tessellationShader
-| code:uint32_t            | pname:maxTessellationPatchSize             | pname:tessellationShader
-| code:uint32_t            | pname:maxTessellationControlPerVertexInputComponents  | pname:tessellationShader
-| code:uint32_t            | pname:maxTessellationControlPerVertexOutputComponents | pname:tessellationShader
-| code:uint32_t            | pname:maxTessellationControlPerPatchOutputComponents  | pname:tessellationShader
-| code:uint32_t            | pname:maxTessellationControlTotalOutputComponents     | pname:tessellationShader
-| code:uint32_t            | pname:maxTessellationEvaluationInputComponents        | pname:tessellationShader
-| code:uint32_t            | pname:maxTessellationEvaluationOutputComponents       | pname:tessellationShader
-| code:uint32_t            | pname:maxGeometryShaderInvocations         | pname:geometryShader
-| code:uint32_t            | pname:maxGeometryInputComponents           | pname:geometryShader
-| code:uint32_t            | pname:maxGeometryOutputComponents          | pname:geometryShader
-| code:uint32_t            | pname:maxGeometryOutputVertices            | pname:geometryShader
-| code:uint32_t            | pname:maxGeometryTotalOutputComponents     | pname:geometryShader
-| code:uint32_t            | pname:maxFragmentInputComponents           | -
-| code:uint32_t            | pname:maxFragmentOutputAttachments         | -
-| code:uint32_t            | pname:maxFragmentDualSrcAttachments        | pname:dualSrcBlend
-| code:uint32_t            | pname:maxFragmentCombinedOutputResources   | -
-| code:uint32_t            | pname:maxComputeSharedMemorySize           | -
-| 3 {times} code:uint32_t  | pname:maxComputeWorkGroupCount             | -
-| code:uint32_t            | pname:maxComputeWorkGroupInvocations       | -
-| 3 {times} code:uint32_t  | pname:maxComputeWorkGroupSize              | -
-| code:uint32_t            | pname:subPixelPrecisionBits                | -
-| code:uint32_t            | pname:subTexelPrecisionBits                | -
-| code:uint32_t            | pname:mipmapPrecisionBits                  | -
-| code:uint32_t            | pname:maxDrawIndexedIndexValue             | pname:fullDrawIndexUint32
-| code:uint32_t            | pname:maxDrawIndirectCount                 | pname:multiDrawIndirect
-| code:float               | pname:maxSamplerLodBias                    | -
-| code:float               | pname:maxSamplerAnisotropy                 | pname:samplerAnisotropy
-| code:uint32_t            | pname:maxViewports                         | pname:multiViewport
-| 2 {times} code:uint32_t  | pname:maxViewportDimensions                | -
-| 2 {times} code:float     | pname:viewportBoundsRange                  | -
-| code:uint32_t            | pname:viewportSubPixelBits                 | -
-| code:size_t              | pname:minMemoryMapAlignment                | -
-| basetype:VkDeviceSize    | pname:minTexelBufferOffsetAlignment        | -
-| basetype:VkDeviceSize    | pname:minUniformBufferOffsetAlignment      | -
-| basetype:VkDeviceSize    | pname:minStorageBufferOffsetAlignment      | -
-| code:int32_t             | pname:minTexelOffset                       | -
-| code:uint32_t            | pname:maxTexelOffset                       | -
-| code:int32_t             | pname:minTexelGatherOffset                 | pname:shaderImageGatherExtended
-| code:uint32_t            | pname:maxTexelGatherOffset                 | pname:shaderImageGatherExtended
-| code:float               | pname:minInterpolationOffset               | pname:sampleRateShading
-| code:float               | pname:maxInterpolationOffset               | pname:sampleRateShading
-| code:uint32_t            | pname:subPixelInterpolationOffsetBits      | pname:sampleRateShading
-| code:uint32_t            | pname:maxFramebufferWidth                  | -
-| code:uint32_t            | pname:maxFramebufferHeight                 | -
-| code:uint32_t            | pname:maxFramebufferLayers                 | -
-| tlink:VkSampleCountFlags | pname:framebufferColorSampleCounts         | -
-ifdef::VK_VERSION_1_2[]
-| tlink:VkSampleCountFlags | pname:framebufferIntegerColorSampleCounts  | -
-endif::VK_VERSION_1_2[]
-| tlink:VkSampleCountFlags | pname:framebufferDepthSampleCounts         | -
-| tlink:VkSampleCountFlags | pname:framebufferStencilSampleCounts       | -
-| tlink:VkSampleCountFlags | pname:framebufferNoAttachmentsSampleCounts | -
-| code:uint32_t            | pname:maxColorAttachments                  | -
-| tlink:VkSampleCountFlags | pname:sampledImageColorSampleCounts        | -
-| tlink:VkSampleCountFlags | pname:sampledImageIntegerSampleCounts      | -
-| tlink:VkSampleCountFlags | pname:sampledImageDepthSampleCounts        | -
-| tlink:VkSampleCountFlags | pname:sampledImageStencilSampleCounts      | -
-| tlink:VkSampleCountFlags | pname:storageImageSampleCounts             | pname:shaderStorageImageMultisample
-| code:uint32_t            | pname:maxSampleMaskWords                   | -
-| basetype:VkBool32        | pname:timestampComputeAndGraphics          | -
-| code:float               | pname:timestampPeriod                      | -
-| code:uint32_t            | pname:maxClipDistances                     | pname:shaderClipDistance
-| code:uint32_t            | pname:maxCullDistances                     | pname:shaderCullDistance
-| code:uint32_t            | pname:maxCombinedClipAndCullDistances      | pname:shaderCullDistance
-| code:uint32_t            | pname:discreteQueuePriorities              | -
-| 2 {times} code:float     | pname:pointSizeRange                       | pname:largePoints
-| 2 {times} code:float     | pname:lineWidthRange                       | pname:wideLines
-| code:float               | pname:pointSizeGranularity                 | pname:largePoints
-| code:float               | pname:lineWidthGranularity                 | pname:wideLines
-| basetype:VkBool32        | pname:strictLines                          | -
-| basetype:VkBool32        | pname:standardSampleLocations              | -
-| basetype:VkDeviceSize    | pname:optimalBufferCopyOffsetAlignment     | -
-| basetype:VkDeviceSize    | pname:optimalBufferCopyRowPitchAlignment   | -
-| basetype:VkDeviceSize    | pname:nonCoherentAtomSize                  | -
-ifdef::VK_EXT_discard_rectangles[]
-| code:uint32_t            | pname:maxDiscardRectangles                 | `apiext:VK_EXT_discard_rectangles`
-endif::VK_EXT_discard_rectangles[]
-ifdef::VK_VERSION_1_2,VK_EXT_sampler_filter_minmax[]
-| basetype:VkBool32        | pname:filterMinmaxSingleComponentFormats   |
-ifdef::VK_VERSION_1_2[`<<features-samplerFilterMinmax,pname:samplerFilterMinmax>>` ]
-ifdef::VK_EXT_sampler_filter_minmax[`apiext:VK_EXT_sampler_filter_minmax`]
-| basetype:VkBool32        | pname:filterMinmaxImageComponentMapping    |
-ifdef::VK_VERSION_1_2[`<<features-samplerFilterMinmax,pname:samplerFilterMinmax>>` ]
-ifdef::VK_EXT_sampler_filter_minmax[`apiext:VK_EXT_sampler_filter_minmax`]
-endif::VK_VERSION_1_2,VK_EXT_sampler_filter_minmax[]
-ifdef::VK_KHR_maintenance4[]
-| basetype:VkDeviceSize    | pname:maxBufferSize                        | `<<features-maintenance4,pname:maintenance4>>`
-endif::VK_KHR_maintenance4[]
-ifdef::VK_EXT_conservative_rasterization[]
-| code:float           | pname:primitiveOverestimationSize                 | `apiext:VK_EXT_conservative_rasterization`
-| basetype:VkBool32        | pname:maxExtraPrimitiveOverestimationSize         | `apiext:VK_EXT_conservative_rasterization`
-| code:float           | pname:extraPrimitiveOverestimationSizeGranularity | `apiext:VK_EXT_conservative_rasterization`
-| basetype:VkBool32        | pname:degenerateTriangleRasterized                | `apiext:VK_EXT_conservative_rasterization`
-| code:float           | pname:degenerateLinesRasterized                   | `apiext:VK_EXT_conservative_rasterization`
-| basetype:VkBool32        | pname:fullyCoveredFragmentShaderInputVariable     | `apiext:VK_EXT_conservative_rasterization`
-| basetype:VkBool32        | pname:conservativeRasterizationPostDepthCoverage  | `apiext:VK_EXT_conservative_rasterization`
-endif::VK_EXT_conservative_rasterization[]
-ifdef::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
-| code:uint32_t     | pname:maxUpdateAfterBindDescriptorsInAllPools             | `<<features-descriptorIndexing,pname:descriptorIndexing>>`
-| basetype:VkBool32 | pname:shaderUniformBufferArrayNonUniformIndexingNative    | -
-| basetype:VkBool32 | pname:shaderSampledImageArrayNonUniformIndexingNative     | -
-| basetype:VkBool32 | pname:shaderStorageBufferArrayNonUniformIndexingNative    | -
-| basetype:VkBool32 | pname:shaderStorageImageArrayNonUniformIndexingNative     | -
-| basetype:VkBool32 | pname:shaderInputAttachmentArrayNonUniformIndexingNative  | -
-| code:uint32_t     | pname:maxPerStageDescriptorUpdateAfterBindSamplers        | `<<features-descriptorIndexing,pname:descriptorIndexing>>`
-| code:uint32_t     | pname:maxPerStageDescriptorUpdateAfterBindUniformBuffers  | `<<features-descriptorIndexing,pname:descriptorIndexing>>`
-| code:uint32_t     | pname:maxPerStageDescriptorUpdateAfterBindStorageBuffers  | `<<features-descriptorIndexing,pname:descriptorIndexing>>`
-| code:uint32_t     | pname:maxPerStageDescriptorUpdateAfterBindSampledImages   | `<<features-descriptorIndexing,pname:descriptorIndexing>>`
-| code:uint32_t     | pname:maxPerStageDescriptorUpdateAfterBindStorageImages   | `<<features-descriptorIndexing,pname:descriptorIndexing>>`
-| code:uint32_t     | pname:maxPerStageDescriptorUpdateAfterBindInputAttachments| `<<features-descriptorIndexing,pname:descriptorIndexing>>`
-| code:uint32_t     | pname:maxPerStageUpdateAfterBindResources                 | `<<features-descriptorIndexing,pname:descriptorIndexing>>`
-| code:uint32_t     | pname:maxDescriptorSetUpdateAfterBindSamplers             | `<<features-descriptorIndexing,pname:descriptorIndexing>>`
-| code:uint32_t     | pname:maxDescriptorSetUpdateAfterBindUniformBuffers       | `<<features-descriptorIndexing,pname:descriptorIndexing>>`
-| code:uint32_t     | pname:maxDescriptorSetUpdateAfterBindUniformBuffersDynamic| `<<features-descriptorIndexing,pname:descriptorIndexing>>`
-| code:uint32_t     | pname:maxDescriptorSetUpdateAfterBindStorageBuffers       | `<<features-descriptorIndexing,pname:descriptorIndexing>>`
-| code:uint32_t     | pname:maxDescriptorSetUpdateAfterBindStorageBuffersDynamic| `<<features-descriptorIndexing,pname:descriptorIndexing>>`
-| code:uint32_t     | pname:maxDescriptorSetUpdateAfterBindSampledImages        | `<<features-descriptorIndexing,pname:descriptorIndexing>>`
-| code:uint32_t     | pname:maxDescriptorSetUpdateAfterBindStorageImages        | `<<features-descriptorIndexing,pname:descriptorIndexing>>`
-| code:uint32_t     | pname:maxDescriptorSetUpdateAfterBindInputAttachments     | `<<features-descriptorIndexing,pname:descriptorIndexing>>`
-endif::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
-ifdef::VK_EXT_vertex_attribute_divisor[]
-| code:uint32_t            | pname:maxVertexAttribDivisor               | `apiext:VK_EXT_vertex_attribute_divisor`
-endif::VK_EXT_vertex_attribute_divisor[]
-ifdef::VK_NV_mesh_shader[]
-| code:uint32_t            | pname:maxDrawMeshTasksCount               | `apiext:VK_NV_mesh_shader`
-| code:uint32_t            | pname:maxTaskWorkGroupInvocations         | `apiext:VK_NV_mesh_shader`
-| code:uint32_t            | pname:maxTaskWorkGroupSize                | `apiext:VK_NV_mesh_shader`
-| code:uint32_t            | pname:maxTaskTotalMemorySize              | `apiext:VK_NV_mesh_shader`
-| code:uint32_t            | pname:maxTaskOutputCount                  | `apiext:VK_NV_mesh_shader`
-| code:uint32_t            | pname:maxMeshWorkGroupInvocations         | `apiext:VK_NV_mesh_shader`
-| code:uint32_t            | pname:maxMeshWorkGroupSize                | `apiext:VK_NV_mesh_shader`
-| code:uint32_t            | pname:maxMeshTotalMemorySize              | `apiext:VK_NV_mesh_shader`
-| code:uint32_t            | pname:maxMeshOutputVertices               | `apiext:VK_NV_mesh_shader`
-| code:uint32_t            | pname:maxMeshOutputPrimitives             | `apiext:VK_NV_mesh_shader`
-| code:uint32_t            | pname:maxMeshMultiviewViewCount           | `apiext:VK_NV_mesh_shader`
-| code:uint32_t            | pname:meshOutputPerVertexGranularity      | `apiext:VK_NV_mesh_shader`
-| code:uint32_t            | pname:meshOutputPerPrimitiveGranularity   | `apiext:VK_NV_mesh_shader`
-endif::VK_NV_mesh_shader[]
-ifdef::VK_EXT_transform_feedback[]
-| code:uint32_t            | pname:maxTransformFeedbackStreams                 | `apiext:VK_EXT_transform_feedback`
-| code:uint32_t            | pname:maxTransformFeedbackBuffers                 | `apiext:VK_EXT_transform_feedback`
-| basetype:VkDeviceSize    | pname:maxTransformFeedbackBufferSize              | `apiext:VK_EXT_transform_feedback`
-| code:uint32_t            | pname:maxTransformFeedbackStreamDataSize          | `apiext:VK_EXT_transform_feedback`
-| code:uint32_t            | pname:maxTransformFeedbackBufferDataSize          | `apiext:VK_EXT_transform_feedback`
-| code:uint32_t            | pname:maxTransformFeedbackBufferDataStride        | `apiext:VK_EXT_transform_feedback`
-| basetype:VkBool32        | pname:transformFeedbackQueries                    | `apiext:VK_EXT_transform_feedback`
-| basetype:VkBool32        | pname:transformFeedbackStreamsLinesTriangles      | `apiext:VK_EXT_transform_feedback`
-| basetype:VkBool32        | pname:transformFeedbackRasterizationStreamSelect  | `apiext:VK_EXT_transform_feedback`
-| basetype:VkBool32        | pname:transformFeedbackDraw                       | `apiext:VK_EXT_transform_feedback`
-endif::VK_EXT_transform_feedback[]
-ifdef::VK_EXT_fragment_density_map[]
-| slink:VkExtent2D         | pname:minFragmentDensityTexelSize         | `apiext:VK_EXT_fragment_density_map`
-| slink:VkExtent2D         | pname:maxFragmentDensityTexelSize         | `apiext:VK_EXT_fragment_density_map`
-| basetype:VkBool32        | pname:fragmentDensityInvocations          | `apiext:VK_EXT_fragment_density_map`
-endif::VK_EXT_fragment_density_map[]
-ifdef::VK_EXT_fragment_density_map2[]
-| basetype:VkBool32        | pname:subsampledLoads                           | `apiext:VK_EXT_fragment_density_map2`
-| basetype:VkBool32        | pname:subsampledCoarseReconstructionEarlyAccess | `apiext:VK_EXT_fragment_density_map2`
-| code:uint32_t            | pname:maxSubsampledArrayLayers                  | `apiext:VK_EXT_fragment_density_map2`
-| code:uint32_t            | pname:maxDescriptorSetSubsampledSamplers        | `apiext:VK_EXT_fragment_density_map2`
-endif::VK_EXT_fragment_density_map2[]
-ifdef::VK_NV_ray_tracing,VK_KHR_acceleration_structure[]
-| code:uint32_t            | pname:maxGeometryCount                         | `apiext:VK_NV_ray_tracing`, `apiext:VK_KHR_acceleration_structure`
-| code:uint32_t            | pname:maxInstanceCount                         | `apiext:VK_NV_ray_tracing`, `apiext:VK_KHR_acceleration_structure`
-endif::VK_NV_ray_tracing,VK_KHR_acceleration_structure[]
-ifdef::VK_NV_ray_tracing,VK_KHR_ray_tracing_pipeline[]
-| code:uint32_t            | pname:shaderGroupHandleSize                    | `apiext:VK_NV_ray_tracing`, `apiext:VK_KHR_ray_tracing_pipeline`
-| code:uint32_t            | pname:maxShaderGroupStride                     | `apiext:VK_NV_ray_tracing`, `apiext:VK_KHR_ray_tracing_pipeline`
-| code:uint32_t            | pname:shaderGroupBaseAlignment                 | `apiext:VK_NV_ray_tracing`, `apiext:VK_KHR_ray_tracing_pipeline`
-endif::VK_NV_ray_tracing,VK_KHR_ray_tracing_pipeline[]
-ifdef::VK_NV_ray_tracing[]
-| code:uint32_t            | pname:maxRecursionDepth                        | `apiext:VK_NV_ray_tracing`
-| code:uint32_t            | pname:maxTriangleCount                         | `apiext:VK_NV_ray_tracing`
-endif::VK_NV_ray_tracing[]
-ifdef::VK_KHR_acceleration_structure[]
-| code:uint32_t            | pname:maxPerStageDescriptorAccelerationStructures
-                                                                            | `apiext:VK_KHR_acceleration_structure`
-| code:uint32_t            | pname:maxPerStageDescriptorUpdateAfterBindAccelerationStructures
-                                                                            | `apiext:VK_KHR_acceleration_structure`
-endif::VK_KHR_acceleration_structure[]
-ifdef::VK_NV_ray_tracing,VK_KHR_acceleration_structure[]
-| code:uint32_t            | pname:maxDescriptorSetAccelerationStructures   | `apiext:VK_NV_ray_tracing`, `apiext:VK_KHR_acceleration_structure`
-endif::VK_NV_ray_tracing,VK_KHR_acceleration_structure[]
-ifdef::VK_KHR_acceleration_structure[]
-| code:uint32_t            | pname:maxDescriptorSetUpdateAfterBindAccelerationStructures
-                                                                            | `apiext:VK_KHR_acceleration_structure`
-| code:uint32_t            | pname:minAccelerationStructureScratchOffsetAlignment
-                                                                            | `apiext:VK_KHR_acceleration_structure`
-endif::VK_KHR_acceleration_structure[]
-ifdef::VK_KHR_ray_tracing_pipeline[]
-| code:uint32_t            | pname:maxRayRecursionDepth                     | `apiext:VK_KHR_ray_tracing_pipeline`
-| code:uint32_t            | pname:shaderGroupHandleCaptureReplaySize       | `apiext:VK_KHR_ray_tracing_pipeline`
-| code:uint32_t            | pname:maxRayDispatchInvocationCount            | `apiext:VK_KHR_ray_tracing_pipeline`
-| code:uint32_t            | pname:shaderGroupHandleAlignment               | `apiext:VK_KHR_ray_tracing_pipeline`
-| code:uint32_t            | pname:maxRayHitAttributeSize                   | `apiext:VK_KHR_ray_tracing_pipeline`
-endif::VK_KHR_ray_tracing_pipeline[]
-ifdef::VK_VERSION_1_2,VK_KHR_timeline_semaphore[]
-| code:uint64_t            | pname:maxTimelineSemaphoreValueDifference      | `<<features-timelineSemaphore,pname:timelineSemaphore>>`
-endif::VK_VERSION_1_2,VK_KHR_timeline_semaphore[]
-ifdef::VK_EXT_line_rasterization[]
-| code:uint32_t            | pname:lineSubPixelPrecisionBits                | `apiext:VK_EXT_line_rasterization`
-endif::VK_EXT_line_rasterization[]
-ifdef::VK_EXT_custom_border_color[]
-| code:uint32_t            | pname:maxCustomBorderColorSamplers             | `apiext:VK_EXT_custom_border_color`
-endif::VK_EXT_custom_border_color[]
-ifdef::VK_EXT_robustness2[]
-| basetype:VkDeviceSize    | pname:robustStorageBufferAccessSizeAlignment   | `apiext:VK_EXT_robustness2`
-| basetype:VkDeviceSize    | pname:robustUniformBufferAccessSizeAlignment   | `apiext:VK_EXT_robustness2`
-endif::VK_EXT_robustness2[]
-ifdef::VK_KHR_fragment_shading_rate[]
-| 2 {times} code:uint32_t       | pname:minFragmentShadingRateAttachmentTexelSize           | `<<features-attachmentFragmentShadingRate,pname:attachmentFragmentShadingRate>>`
-| 2 {times} code:uint32_t       | pname:maxFragmentShadingRateAttachmentTexelSize           | `<<features-attachmentFragmentShadingRate,pname:attachmentFragmentShadingRate>>`
-| code:uint32_t                 | pname:maxFragmentShadingRateAttachmentTexelSizeAspectRatio | `<<features-attachmentFragmentShadingRate,pname:attachmentFragmentShadingRate>>`
-| basetype:VkBool32             | pname:primitiveFragmentShadingRateWithMultipleViewports   | `<<features-primitiveFragmentShadingRate,pname:primitiveFragmentShadingRate>>`
-| basetype:VkBool32             | pname:layeredShadingRateAttachments                       | `<<features-attachmentFragmentShadingRate,pname:attachmentFragmentShadingRate>>`
-| basetype:VkBool32             | pname:fragmentShadingRateNonTrivialCombinerOps            | `<<features-pipelineFragmentShadingRate,pname:pipelineFragmentShadingRate>>`
-| 2 {times} code:uint32_t       | pname:maxFragmentSize                                     | `<<features-pipelineFragmentShadingRate,pname:pipelineFragmentShadingRate>>`
-| code:uint32_t                 | pname:maxFragmentSizeAspectRatio                          | `<<features-pipelineFragmentShadingRate,pname:pipelineFragmentShadingRate>>`
-| code:uint32_t                 | pname:maxFragmentShadingRateCoverageSamples               | `<<features-pipelineFragmentShadingRate,pname:pipelineFragmentShadingRate>>`
-| elink:VkSampleCountFlagBits   | pname:maxFragmentShadingRateRasterizationSamples          | `<<features-pipelineFragmentShadingRate,pname:pipelineFragmentShadingRate>>`
-| basetype:VkBool32             | pname:fragmentShadingRateWithShaderDepthStencilWrites     | `<<features-pipelineFragmentShadingRate,pname:pipelineFragmentShadingRate>>`
-| basetype:VkBool32             | pname:fragmentShadingRateWithSampleMask                   | `<<features-pipelineFragmentShadingRate,pname:pipelineFragmentShadingRate>>`
-| basetype:VkBool32             | pname:fragmentShadingRateWithShaderSampleMask             | `<<features-pipelineFragmentShadingRate,pname:pipelineFragmentShadingRate>>`
-| basetype:VkBool32             | pname:fragmentShadingRateWithConservativeRasterization    | `<<features-pipelineFragmentShadingRate,pname:pipelineFragmentShadingRate>>`
-| basetype:VkBool32             | pname:fragmentShadingRateWithFragmentShaderInterlock      | `<<features-pipelineFragmentShadingRate,pname:pipelineFragmentShadingRate>>`
-| basetype:VkBool32             | pname:fragmentShadingRateWithCustomSampleLocations        | `<<features-pipelineFragmentShadingRate,pname:pipelineFragmentShadingRate>>`
-| basetype:VkBool32             | pname:fragmentShadingRateStrictMultiplyCombiner           | `<<features-pipelineFragmentShadingRate,pname:pipelineFragmentShadingRate>>`
-endif::VK_KHR_fragment_shading_rate[]
-ifdef::VK_NV_fragment_shading_rate_enums[]
-| elink:VkSampleCountFlagBits   | pname:maxFragmentShadingRateInvocationCount               | `<<features-supersampleFragmentShadingRates,pname:supersampleFragmentShadingRates>>`
-endif::VK_NV_fragment_shading_rate_enums[]
-ifdef::VK_HUAWEI_subpass_shading[]
-| code:uint32_t                 | pname:maxSubpassShadingWorkgroupSizeAspectRatio | `<<features-subpassShading,pname:subpassShading>>`
-endif::VK_HUAWEI_subpass_shading[]
-|====
-
-[[limits-required]]
-.Required Limits
-[width="100%",cols="<35,<9,<14,<11",options="header"]
-|====
-| Limit | Unsupported Limit | Supported Limit | Limit Type^1^
-| pname:maxImageDimension1D                  | - | 4096    | min
-| pname:maxImageDimension2D                  | - | 4096    | min
-| pname:maxImageDimension3D                  | - | 256     | min
-| pname:maxImageDimensionCube                | - | 4096    | min
-| pname:maxImageArrayLayers                  | - | 256     | min
-| pname:maxTexelBufferElements               | - | 65536   | min
-| pname:maxUniformBufferRange                | - | 16384   | min
-| pname:maxStorageBufferRange                | - | 2^27^   | min
-| pname:maxPushConstantsSize                 | - | 128     | min
-| pname:maxMemoryAllocationCount             | - | 4096    | min
-| pname:maxSamplerAllocationCount            | - | 4000    | min
-| pname:bufferImageGranularity               | - | 131072  | max
-| pname:sparseAddressSpaceSize               | 0 | 2^31^   | min
-| pname:maxBoundDescriptorSets               | - | 4       | min
-| pname:maxPerStageDescriptorSamplers        | - | 16      | min
-| pname:maxPerStageDescriptorUniformBuffers  | - | 12      | min
-| pname:maxPerStageDescriptorStorageBuffers  | - | 4       | min
-| pname:maxPerStageDescriptorSampledImages   | - | 16      | min
-| pname:maxPerStageDescriptorStorageImages   | - | 4       | min
-| pname:maxPerStageDescriptorInputAttachments| - | 4       | min
-| pname:maxPerStageResources                 | - | 128 ^2^ | min
-| pname:maxDescriptorSetSamplers             | - | 96 ^8^  | min, _n_ {times} PerStage
-| pname:maxDescriptorSetUniformBuffers       | - | 72 ^8^  | min, _n_ {times} PerStage
-| pname:maxDescriptorSetUniformBuffersDynamic| - | 8       | min
-| pname:maxDescriptorSetStorageBuffers       | - | 24 ^8^  | min, _n_ {times} PerStage
-| pname:maxDescriptorSetStorageBuffersDynamic| - | 4       | min
-| pname:maxDescriptorSetSampledImages        | - | 96 ^8^  | min, _n_ {times} PerStage
-| pname:maxDescriptorSetStorageImages        | - | 24 ^8^  | min, _n_ {times} PerStage
-| pname:maxDescriptorSetInputAttachments     | - | 4       | min
-| pname:maxVertexInputAttributes             | - | 16      | min
-ifndef::VK_KHR_portability_subset[]
-| pname:maxVertexInputBindings               | - | 16      | min
-endif::VK_KHR_portability_subset[]
-ifdef::VK_KHR_portability_subset[]
-| pname:maxVertexInputBindings               | - | 16 ^10^ | min
-endif::VK_KHR_portability_subset[]
-| pname:maxVertexInputAttributeOffset        | - | 2047    | min
-| pname:maxVertexInputBindingStride          | - | 2048    | min
-| pname:maxVertexOutputComponents            | - | 64      | min
-| pname:maxTessellationGenerationLevel       | 0 | 64      | min
-| pname:maxTessellationPatchSize             | 0 | 32      | min
-| pname:maxTessellationControlPerVertexInputComponents  | 0 |64 | min
-| pname:maxTessellationControlPerVertexOutputComponents | 0 |64 | min
-| pname:maxTessellationControlPerPatchOutputComponents  | 0 |120 | min
-| pname:maxTessellationControlTotalOutputComponents     | 0 |2048 | min
-| pname:maxTessellationEvaluationInputComponents        | 0 |64 | min
-| pname:maxTessellationEvaluationOutputComponents       | 0 |64 | min
-| pname:maxGeometryShaderInvocations         | 0 | 32      | min
-| pname:maxGeometryInputComponents           | 0 | 64      | min
-| pname:maxGeometryOutputComponents          | 0 | 64      | min
-| pname:maxGeometryOutputVertices            | 0 | 256     | min
-| pname:maxGeometryTotalOutputComponents     | 0 | 1024    | min
-| pname:maxFragmentInputComponents           | - | 64      | min
-| pname:maxFragmentOutputAttachments         | - | 4       | min
-| pname:maxFragmentDualSrcAttachments        | 0 | 1       | min
-| pname:maxFragmentCombinedOutputResources   | - | 4       | min
-| pname:maxComputeSharedMemorySize           | - | 16384   | min
-| pname:maxComputeWorkGroupCount             | - | (65535,65535,65535) | min
-| pname:maxComputeWorkGroupInvocations       | - | 128     | min
-| pname:maxComputeWorkGroupSize              | - | (128,128,64) | min
-| pname:subPixelPrecisionBits                | - | 4       | min
-| pname:subTexelPrecisionBits                | - | 4       | min
-| pname:mipmapPrecisionBits                  | - | 4       | min
-| pname:maxDrawIndexedIndexValue             | 2^24^-1 | 2^32^-1 | min
-| pname:maxDrawIndirectCount                 | 1 | 2^16^-1 | min
-| pname:maxSamplerLodBias                    | - | 2       | min
-| pname:maxSamplerAnisotropy                 | 1 | 16      | min
-| pname:maxViewports                         | 1 | 16      | min
-| pname:maxViewportDimensions                | - | (4096,4096) ^3^  | min
-| pname:viewportBoundsRange                  | - | (-8192,8191) ^4^ | (max,min)
-| pname:viewportSubPixelBits                 | - | 0   | min
-| pname:minMemoryMapAlignment                | - | 64  | min
-| pname:minTexelBufferOffsetAlignment        | - | 256 | max
-| pname:minUniformBufferOffsetAlignment      | - | 256 | max
-| pname:minStorageBufferOffsetAlignment      | - | 256 | max
-| pname:minTexelOffset                       | - | -8  | max
-| pname:maxTexelOffset                       | - | 7   | min
-| pname:minTexelGatherOffset                 | 0 | -8  | max
-| pname:maxTexelGatherOffset                 | 0 | 7   | min
-| pname:minInterpolationOffset               |0.0| -0.5 ^5^ | max
-| pname:maxInterpolationOffset               |0.0| 0.5 - (1 ULP) ^5^ | min
-| pname:subPixelInterpolationOffsetBits      | 0 | 4 ^5^ | min
-| pname:maxFramebufferWidth                  | - | 4096  | min
-| pname:maxFramebufferHeight                 | - | 4096  | min
-| pname:maxFramebufferLayers                 | - | 256   | min
-| pname:framebufferColorSampleCounts         | - | (ename:VK_SAMPLE_COUNT_1_BIT \| ename:VK_SAMPLE_COUNT_4_BIT) | min
-ifdef::VK_VERSION_1_2[]
-| pname:framebufferIntegerColorSampleCounts  | - | (ename:VK_SAMPLE_COUNT_1_BIT)                                | min
-endif::VK_VERSION_1_2[]
-| pname:framebufferDepthSampleCounts         | - | (ename:VK_SAMPLE_COUNT_1_BIT \| ename:VK_SAMPLE_COUNT_4_BIT) | min
-| pname:framebufferStencilSampleCounts       | - | (ename:VK_SAMPLE_COUNT_1_BIT \| ename:VK_SAMPLE_COUNT_4_BIT) | min
-| pname:framebufferNoAttachmentsSampleCounts | - | (ename:VK_SAMPLE_COUNT_1_BIT \| ename:VK_SAMPLE_COUNT_4_BIT) | min
-| pname:maxColorAttachments                  | - | 4     | min
-| pname:sampledImageColorSampleCounts        | - | (ename:VK_SAMPLE_COUNT_1_BIT \| ename:VK_SAMPLE_COUNT_4_BIT) | min
-| pname:sampledImageIntegerSampleCounts      | - | ename:VK_SAMPLE_COUNT_1_BIT                                  | min
-| pname:sampledImageDepthSampleCounts        | - | (ename:VK_SAMPLE_COUNT_1_BIT \| ename:VK_SAMPLE_COUNT_4_BIT) | min
-| pname:sampledImageStencilSampleCounts      | - | (ename:VK_SAMPLE_COUNT_1_BIT \| ename:VK_SAMPLE_COUNT_4_BIT) | min
-| pname:storageImageSampleCounts             | ename:VK_SAMPLE_COUNT_1_BIT | (ename:VK_SAMPLE_COUNT_1_BIT \| ename:VK_SAMPLE_COUNT_4_BIT) | min
-| pname:maxSampleMaskWords                   | - | 1     | min
-| pname:timestampComputeAndGraphics          | - | -     |implementation-dependent
-| pname:timestampPeriod                      | - | -     |duration
-| pname:maxClipDistances                     | 0 | 8     | min
-| pname:maxCullDistances                     | 0 | 8     | min
-| pname:maxCombinedClipAndCullDistances      | 0 | 8     | min
-| pname:discreteQueuePriorities              | - | 2     | min
-| pname:pointSizeRange                       | (1.0,1.0) | (1.0,64.0 - ULP)^6^| (max,min)
-| pname:lineWidthRange                       | (1.0,1.0) | (1.0,8.0 - ULP)^7^ | (max,min)
-| pname:pointSizeGranularity                 |  0.0 | 1.0 ^6^ | max, fixed point increment
-| pname:lineWidthGranularity                 |  0.0 | 1.0 ^7^ | max, fixed point increment
-| pname:strictLines                          | - | -   | implementation-dependent
-| pname:standardSampleLocations              | - | -   | implementation-dependent
-| pname:optimalBufferCopyOffsetAlignment     | - | -   | recommendation
-| pname:optimalBufferCopyRowPitchAlignment   | - | -   | recommendation
-| pname:nonCoherentAtomSize                  | - | 256 | max
-ifdef::VK_KHR_push_descriptor[]
-| pname:maxPushDescriptors                   | - | 32  | min
-endif::VK_KHR_push_descriptor[]
-ifdef::VK_VERSION_1_1,VK_KHR_multiview[]
-| pname:maxMultiviewViewCount                | - |  6  | min
-| pname:maxMultiviewInstanceIndex            | - |  2^27^-1  | min
-endif::VK_VERSION_1_1,VK_KHR_multiview[]
-ifdef::VK_EXT_discard_rectangles[]
-| pname:maxDiscardRectangles                 | 0 | 4   | min
-endif::VK_EXT_discard_rectangles[]
-ifdef::VK_EXT_sample_locations[]
-| pname:sampleLocationSampleCounts           | - | ename:VK_SAMPLE_COUNT_4_BIT | min
-| pname:maxSampleLocationGridSize            | - | (1,1) | min
-| pname:sampleLocationCoordinateRange        | - | (0.0, 0.9375) | (max,min)
-| pname:sampleLocationSubPixelBits           | - | 4   | min
-| pname:variableSampleLocations              | - |false| implementation-dependent
-endif::VK_EXT_sample_locations[]
-ifdef::VK_EXT_external_memory_host[]
-| pname:minImportedHostPointerAlignment      | - | 65536 | max
-endif::VK_EXT_external_memory_host[]
-ifdef::VK_NVX_multiview_per_view_attributes[]
-| pname:perViewPositionAllComponents         | - | -   | implementation-dependent
-endif::VK_NVX_multiview_per_view_attributes[]
-ifdef::VK_VERSION_1_2,VK_EXT_sampler_filter_minmax[]
-| pname:filterMinmaxSingleComponentFormats   | - | -   | implementation-dependent
-| pname:filterMinmaxImageComponentMapping    | - | -   | implementation-dependent
-endif::VK_VERSION_1_2,VK_EXT_sampler_filter_minmax[]
-ifdef::VK_EXT_blend_operation_advanced[]
-| pname:advancedBlendMaxColorAttachments        | - | 1   | min
-| pname:advancedBlendIndependentBlend           | - |false| implementation-dependent
-| pname:advancedBlendNonPremultipliedSrcColor   | - |false| implementation-dependent
-| pname:advancedBlendNonPremultipliedDstColor   | - |false| implementation-dependent
-| pname:advancedBlendCorrelatedOverlap          | - |false| implementation-dependent
-| pname:advancedBlendAllOperations              | - |false| implementation-dependent
-endif::VK_EXT_blend_operation_advanced[]
-ifdef::VK_VERSION_1_1,VK_KHR_maintenance3[]
-| pname:maxPerSetDescriptors                                | - |1024 | min
-| pname:maxMemoryAllocationSize                             | - | 2^30^ | min
-endif::VK_VERSION_1_1,VK_KHR_maintenance3[]
-ifdef::VK_KHR_maintenance4[]
-| pname:maxBufferSize                                       | - | 2^30^ | min
-endif::VK_KHR_maintenance4[]
-ifdef::VK_EXT_conservative_rasterization[]
-| pname:primitiveOverestimationSize                 | - |0.0   | min
-| pname:maxExtraPrimitiveOverestimationSize         | - |0.0   | min
-| pname:extraPrimitiveOverestimationSizeGranularity | - |0.0   | min
-| pname:primitiveUnderestimation                    | - |false | implementation-dependent
-| pname:conservativePointAndLineRasterization       | - |false | implementation-dependent
-| pname:degenerateTrianglesRasterized               | - |false | implementation-dependent
-| pname:degenerateLinesRasterized                   | - |false | implementation-dependent
-| pname:fullyCoveredFragmentShaderInputVariable     | - |false | implementation-dependent
-| pname:conservativeRasterizationPostDepthCoverage  | - |false | implementation-dependent
-endif::VK_EXT_conservative_rasterization[]
-ifdef::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
-| pname:maxUpdateAfterBindDescriptorsInAllPools             | 0 |500000| min
-| pname:shaderUniformBufferArrayNonUniformIndexingNative    | - |false| implementation-dependent
-| pname:shaderSampledImageArrayNonUniformIndexingNative     | - |false| implementation-dependent
-| pname:shaderStorageBufferArrayNonUniformIndexingNative    | - |false| implementation-dependent
-| pname:shaderStorageImageArrayNonUniformIndexingNative     | - |false| implementation-dependent
-| pname:shaderInputAttachmentArrayNonUniformIndexingNative  | - |false| implementation-dependent
-| pname:maxPerStageDescriptorUpdateAfterBindSamplers        | 0^9^ |500000 ^9^ | min
-| pname:maxPerStageDescriptorUpdateAfterBindUniformBuffers  | 0^9^ |12 ^9^ | min
-| pname:maxPerStageDescriptorUpdateAfterBindStorageBuffers  | 0^9^ |500000 ^9^ | min
-| pname:maxPerStageDescriptorUpdateAfterBindSampledImages   | 0^9^ |500000 ^9^ | min
-| pname:maxPerStageDescriptorUpdateAfterBindStorageImages   | 0^9^ |500000 ^9^ | min
-| pname:maxPerStageDescriptorUpdateAfterBindInputAttachments| 0^9^ |4 ^9^ | min
-| pname:maxPerStageUpdateAfterBindResources                 | 0^9^ |500000 ^9^ | min
-| pname:maxDescriptorSetUpdateAfterBindSamplers             | 0^9^ |500000 ^9^ | min
-| pname:maxDescriptorSetUpdateAfterBindUniformBuffers       | 0^9^ |72 ^8^ ^9^ | min, _n_ {times} PerStage
-| pname:maxDescriptorSetUpdateAfterBindUniformBuffersDynamic| 0^9^ |8 ^9^ | min
-| pname:maxDescriptorSetUpdateAfterBindStorageBuffers       | 0^9^ |500000 ^9^ | min
-| pname:maxDescriptorSetUpdateAfterBindStorageBuffersDynamic| 0^9^ |4 ^9^ | min
-| pname:maxDescriptorSetUpdateAfterBindSampledImages        | 0^9^ |500000 ^9^ | min
-| pname:maxDescriptorSetUpdateAfterBindStorageImages        | 0^9^ |500000 ^9^ | min
-| pname:maxDescriptorSetUpdateAfterBindInputAttachments     | 0^9^ |4 ^9^ | min
-endif::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
-ifdef::VK_EXT_inline_uniform_block[]
-| pname:maxInlineUniformBlockSize                               | - | 256   | min
-| pname:maxPerStageDescriptorInlineUniformBlocks                | - | 4     | min
-| pname:maxPerStageDescriptorUpdateAfterBindInlineUniformBlocks | - | 4     | min
-| pname:maxDescriptorSetInlineUniformBlocks                     | - | 4     | min
-| pname:maxDescriptorSetUpdateAfterBindInlineUniformBlocks      | - | 4     | min
-endif::VK_EXT_inline_uniform_block[]
-ifdef::VK_EXT_vertex_attribute_divisor[]
-| pname:maxVertexAttribDivisor               | - | 2^16^-1   | min
-endif::VK_EXT_vertex_attribute_divisor[]
-ifdef::VK_NV_mesh_shader[]
-| pname:maxDrawMeshTasksCount                | - | 2^16^-1   | min
-| pname:maxTaskWorkGroupInvocations          | - | 32        | min
-| pname:maxTaskWorkGroupSize                 | - | (32,1,1)  | min
-| pname:maxTaskTotalMemorySize               | - | 16384     | min
-| pname:maxTaskOutputCount                   | - | 2^16^-1   | min
-| pname:maxMeshWorkGroupInvocations          | - | 32        | min
-| pname:maxMeshWorkGroupSize                 | - | (32,1,1)  | min
-| pname:maxMeshTotalMemorySize               | - | 16384     | min
-| pname:maxMeshOutputVertices                | - | 256       | min
-| pname:maxMeshOutputPrimitives              | - | 256       | min
-| pname:maxMeshMultiviewViewCount            | - | 1         | min
-| pname:meshOutputPerVertexGranularity       | - | -         | implementation-dependent
-| pname:meshOutputPerPrimitiveGranularity    | - | -         | implementation-dependent
-endif::VK_NV_mesh_shader[]
-ifdef::VK_EXT_transform_feedback[]
-| pname:maxTransformFeedbackStreams                         | - | 1         | min
-| pname:maxTransformFeedbackBuffers                         | - | 1         | min
-| pname:maxTransformFeedbackBufferSize                      | - | 2^27^     | min
-| pname:maxTransformFeedbackStreamDataSize                  | - | 512       | min
-| pname:maxTransformFeedbackBufferDataSize                  | - | 512       | min
-| pname:maxTransformFeedbackBufferDataStride                | - | 512       | min
-| pname:transformFeedbackQueries                            | - | false     | implementation-dependent
-| pname:transformFeedbackStreamsLinesTriangles              | - | false     | implementation-dependent
-| pname:transformFeedbackRasterizationStreamSelect          | - | false     | implementation-dependent
-| pname:transformFeedbackDraw                               | - | false     | implementation-dependent
-endif::VK_EXT_transform_feedback[]
-ifdef::VK_EXT_fragment_density_map[]
-| pname:minFragmentDensityTexelSize          | - | (1,1)  | min
-| pname:maxFragmentDensityTexelSize          | - | (1,1)  | min
-| pname:fragmentDensityInvocations           | - |  -     | implementation-dependent
-endif::VK_EXT_fragment_density_map[]
-ifdef::VK_EXT_fragment_density_map2[]
-| pname:subsampledLoads                           | true  | false | implementation-dependent
-| pname:subsampledCoarseReconstructionEarlyAccess | false | false | implementation-dependent
-| pname:maxSubsampledArrayLayers                  | 2     | 2     | min
-| pname:maxDescriptorSetSubsampledSamplers        | 1     | 1     | min
-endif::VK_EXT_fragment_density_map2[]
-ifdef::VK_NV_ray_tracing,VK_KHR_ray_tracing_pipeline[]
-ifdef::VK_NV_ray_tracing[]
-| slink:VkPhysicalDeviceRayTracingPropertiesNV::pname:shaderGroupHandleSize | - | 16      | min
-| slink:VkPhysicalDeviceRayTracingPropertiesNV::pname:maxRecursionDepth     | - | 31      | min
-endif::VK_NV_ray_tracing[]
-ifdef::VK_KHR_ray_tracing_pipeline[]
-| slink:VkPhysicalDeviceRayTracingPipelinePropertiesKHR::pname:shaderGroupHandleSize | - | 32      | exact
-| slink:VkPhysicalDeviceRayTracingPipelinePropertiesKHR::pname:maxRayRecursionDepth  | - | 1       | min
-endif::VK_KHR_ray_tracing_pipeline[]
-| pname:maxShaderGroupStride                     | - | 4096    | min
-| pname:shaderGroupBaseAlignment                 | - | 64      | max
-| pname:maxGeometryCount                         | - | 2^24^-1 | min
-| pname:maxInstanceCount                         | - | 2^24^-1 | min
-ifdef::VK_NV_ray_tracing[]
-| pname:maxTriangleCount                         | - | 2^29^-1 | min
-endif::VK_NV_ray_tracing[]
-ifdef::VK_KHR_acceleration_structure[]
-| pname:maxPrimitiveCount                        | - | 2^29^-1 | min
-| pname:maxPerStageDescriptorAccelerationStructures                 | - | 16         | min
-| pname:maxPerStageDescriptorUpdateAfterBindAccelerationStructures  | - | 500000 ^9^ | min
-endif::VK_KHR_acceleration_structure[]
-| pname:maxDescriptorSetAccelerationStructures                      | - | 16         | min
-endif::VK_NV_ray_tracing,VK_KHR_ray_tracing_pipeline[]
-ifdef::VK_KHR_acceleration_structure[]
-| pname:maxDescriptorSetUpdateAfterBindAccelerationStructures       | - | 500000 ^9^ | min
-| pname:minAccelerationStructureScratchOffsetAlignment              | - | 256        | max
-endif::VK_KHR_acceleration_structure[]
-ifdef::VK_KHR_ray_tracing_pipeline[]
-| pname:shaderGroupHandleCaptureReplaySize              | - | 64  | max
-| pname:maxRayDispatchInvocationCount                   | - | 2^30^ | min
-| pname:shaderGroupHandleAlignment                      | - | 32  | max
-| pname:maxRayHitAttributeSize                          | - | 32  | min
-endif::VK_KHR_ray_tracing_pipeline[]
-ifdef::VK_VERSION_1_2,VK_KHR_timeline_semaphore[]
-| pname:maxTimelineSemaphoreValueDifference      | - | 2^31^-1 | min
-endif::VK_VERSION_1_2,VK_KHR_timeline_semaphore[]
-ifdef::VK_EXT_line_rasterization[]
-| pname:lineSubPixelPrecisionBits                | - | 4    | min
-endif::VK_EXT_line_rasterization[]
-ifdef::VK_NV_device_generated_commands[]
-| pname:maxGraphicsShaderGroupCount               | - | 2^12^   | min
-| pname:maxIndirectSequenceCount                  | - | 2^20^   | min
-| pname:maxIndirectCommandsTokenCount             | - | 16     | min
-| pname:maxIndirectCommandsStreamCount            | - | 16     | min
-| pname:maxIndirectCommandsTokenOffset            | - | 2047   | min
-| pname:maxIndirectCommandsStreamStride           | - | 2048   | min
-| pname:minSequencesCountBufferOffsetAlignment    | - | 256    | max
-| pname:minSequencesIndexBufferOffsetAlignment    | - | 256    | max
-| pname:minIndirectCommandsBufferOffsetAlignment  | - | 256    | max
-endif::VK_NV_device_generated_commands[]
-ifdef::VK_EXT_custom_border_color[]
-| pname:maxCustomBorderColorSamplers              | - | 32    | min
-endif::VK_EXT_custom_border_color[]
-ifdef::VK_EXT_robustness2[]
-| pname:robustStorageBufferAccessSizeAlignment   | - | 4    | max
-| pname:robustUniformBufferAccessSizeAlignment   | - | 256  | max
-endif::VK_EXT_robustness2[]
-ifdef::VK_KHR_fragment_shading_rate[]
-| pname:minFragmentShadingRateAttachmentTexelSize           | (0,0) | (32,32) | max
-| pname:maxFragmentShadingRateAttachmentTexelSize           | (0,0) | (8,8)   | min
-| pname:maxFragmentShadingRateAttachmentTexelSizeAspectRatio |  0   |   1     | min
-| pname:primitiveFragmentShadingRateWithMultipleViewports   | false | false   | implementation-dependent
-| pname:layeredShadingRateAttachments                       | false | false   | implementation-dependent
-| pname:fragmentShadingRateNonTrivialCombinerOps            |   -   | false   | implementation-dependent
-| pname:maxFragmentSize                                     |   -   | (2,2)   | min
-| pname:maxFragmentSizeAspectRatio                          |   -   | 2       | min
-| pname:maxFragmentShadingRateCoverageSamples               |   -   | 16      | min
-| pname:maxFragmentShadingRateRasterizationSamples          |   -   | ename:VK_SAMPLE_COUNT_4_BIT      | min
-| pname:fragmentShadingRateWithShaderDepthStencilWrites     |   -   | false   | implementation-dependent
-| pname:fragmentShadingRateWithSampleMask                   |   -   | false   | implementation-dependent
-| pname:fragmentShadingRateWithShaderSampleMask             |   -   | false   | implementation-dependent
-| pname:fragmentShadingRateWithConservativeRasterization    |   -   | false   | implementation-dependent
-| pname:fragmentShadingRateWithFragmentShaderInterlock      |   -   | false   | implementation-dependent
-| pname:fragmentShadingRateWithCustomSampleLocations        |   -   | false   | implementation-dependent
-| pname:fragmentShadingRateStrictMultiplyCombiner           |   -   | false   | implementation-dependent
-endif::VK_KHR_fragment_shading_rate[]
-ifdef::VK_NV_fragment_shading_rate_enums[]
-| pname:maxFragmentShadingRateInvocationCount               | - | ename:VK_SAMPLE_COUNT_4_BIT | min
-endif::VK_NV_fragment_shading_rate_enums[]
-ifdef::VK_HUAWEI_subpass_shading[]
-| pname:maxSubpassShadingWorkgroupSizeAspectRatio |  0   |   1     | min
-endif::VK_HUAWEI_subpass_shading[]
-ifdef::VK_EXT_multi_draw[]
-| pname:maxMultiDrawCount               | - | 1024 | min
-endif::VK_EXT_multi_draw[]
-|====
-
-1::
-    The *Limit Type* column specifies the limit is either the minimum limit
-    all implementations must: support, the maximum limit all implementations
-    must: support, or the exact value all implementations must: support.
-    For bitmasks a minimum limit is the least bits all implementations must:
-    set, but they may: have additional bits set beyond this minimum.
-
-2::
-    The pname:maxPerStageResources must: be at least the smallest of the
-    following:
-+
-  * the sum of the pname:maxPerStageDescriptorUniformBuffers,
-    pname:maxPerStageDescriptorStorageBuffers,
-    pname:maxPerStageDescriptorSampledImages,
-    pname:maxPerStageDescriptorStorageImages,
-    pname:maxPerStageDescriptorInputAttachments, pname:maxColorAttachments
-    limits, or
-  * 128.
-+
-It may: not be possible to reach this limit in every stage.
-
-3::
-    See <<limits-maxViewportDimensions,pname:maxViewportDimensions>> for the
-    required: relationship to other limits.
-
-4::
-    See <<limits-viewportboundsrange,pname:viewportBoundsRange>> for the
-    required: relationship to other limits.
-
-5::
-    The values pname:minInterpolationOffset and pname:maxInterpolationOffset
-    describe the closed interval of supported interpolation offsets:
-    [pname:minInterpolationOffset, pname:maxInterpolationOffset].
-    The ULP is determined by pname:subPixelInterpolationOffsetBits.
-    If pname:subPixelInterpolationOffsetBits is 4, this provides increments
-    of (1/2^4^) = 0.0625, and thus the range of supported interpolation
-    offsets would be [eq]#[-0.5, 0.4375]#.
-
-6::
-    The point size ULP is determined by pname:pointSizeGranularity.
-    If the pname:pointSizeGranularity is 0.125, the range of supported point
-    sizes must: be at least [1.0, 63.875].
-
-7::
-    The line width ULP is determined by pname:lineWidthGranularity.
-    If the pname:lineWidthGranularity is 0.0625, the range of supported line
-    widths must: be at least [1.0, 7.9375].
-
-8::
-    The minimum ptext:maxDescriptorSet* limit is _n_ times the corresponding
-    _specification_ minimum ptext:maxPerStageDescriptor* limit, where _n_ is
-    the number of shader stages supported by the slink:VkPhysicalDevice.
-    If all shader stages are supported, _n_ = 6 (vertex, tessellation
-    control, tessellation evaluation, geometry, fragment, compute).
-
-ifdef::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
-9::
-    The ptext:UpdateAfterBind descriptor limits must: each be greater than
-    or equal to the corresponding ptext:non-UpdateAfterBind limit.
-endif::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
-
-ifdef::VK_KHR_portability_subset[]
-10::
-     If the `apiext:VK_KHR_portability_subset` extension is enabled, the
-     required minimum value of pname:maxVertexInputBindings is code:8.
-endif::VK_KHR_portability_subset[]
-
-
-ifdef::VK_EXT_sample_locations[]
-
-[[limits-multisample]]
-== Additional Multisampling Capabilities
-
-[open,refpage='vkGetPhysicalDeviceMultisamplePropertiesEXT',desc='Report sample count specific multisampling capabilities of a physical device',type='protos']
---
-To query additional multisampling capabilities which may: be supported for a
-specific sample count, beyond the minimum capabilities described for
-<<limits, Limits>> above, call:
-
-include::{generated}/api/protos/vkGetPhysicalDeviceMultisamplePropertiesEXT.txt[]
-
-  * pname:physicalDevice is the physical device from which to query the
-    additional multisampling capabilities.
-  * pname:samples is a elink:VkSampleCountFlagBits value specifying the
-    sample count to query capabilities for.
-  * pname:pMultisampleProperties is a pointer to a
-    slink:VkMultisamplePropertiesEXT structure in which information about
-    additional multisampling capabilities specific to the sample count is
-    returned.
-
-include::{generated}/validity/protos/vkGetPhysicalDeviceMultisamplePropertiesEXT.txt[]
---
-
-[open,refpage='VkMultisamplePropertiesEXT',desc='Structure returning information about sample count specific additional multisampling capabilities',type='structs']
---
-The sname:VkMultisamplePropertiesEXT structure is defined as
-
-include::{generated}/api/structs/VkMultisamplePropertiesEXT.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:maxSampleLocationGridSize is the maximum size of the pixel grid in
-    which sample locations can: vary.
-
-include::{generated}/validity/structs/VkMultisamplePropertiesEXT.txt[]
---
-
-If the sample count for which additional multisampling capabilities are
-requested using fname:vkGetPhysicalDeviceMultisamplePropertiesEXT is set
-in sname:VkPhysicalDeviceSampleLocationsPropertiesEXT::
-<<limits-sampleLocationSampleCounts, pname:sampleLocationSampleCounts>> the
-pname:width and pname:height members of
-sname:VkMultisamplePropertiesEXT::pname:maxSampleLocationGridSize must: be
-greater than or equal to the corresponding members of
-sname:VkPhysicalDeviceSampleLocationsPropertiesEXT::
-<<limits-maxSampleLocationGridSize,pname:maxSampleLocationGridSize>>,
-respectively, otherwise both members must: be `0`.
-endif::VK_EXT_sample_locations[]
-
-// If you are adding a new features structure, it must be placed at the end
-// of the previous section (immediately before [[limits-multisample]]).
diff --git a/registry/vulkan/chapters/memory.txt b/registry/vulkan/chapters/memory.txt
deleted file mode 100644
index 91a85a6..0000000
--- a/registry/vulkan/chapters/memory.txt
+++ /dev/null
@@ -1,3864 +0,0 @@
-// Copyright 2015-2021 The Khronos Group, Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-[[memory]]
-= Memory Allocation
-
-Vulkan memory is broken up into two categories, _host memory_ and _device
-memory_.
-
-
-[[memory-host]]
-== Host Memory
-
-Host memory is memory needed by the Vulkan implementation for
-non-device-visible storage.
-
-[NOTE]
-.Note
-====
-This memory may: be used to store the implementation's representation and
-state of Vulkan objects.
-====
-
-[[memory-allocation]]
-Vulkan provides applications the opportunity to perform host memory
-allocations on behalf of the Vulkan implementation.
-If this feature is not used, the implementation will perform its own memory
-allocations.
-Since most memory allocations are off the critical path, this is not meant
-as a performance feature.
-Rather, this can: be useful for certain embedded systems, for debugging
-purposes (e.g. putting a guard page after all host allocations), or for
-memory allocation logging.
-
-[open,refpage='VkAllocationCallbacks',desc='Structure containing callback function pointers for memory allocation',type='structs']
---
-Allocators are provided by the application as a pointer to a
-sname:VkAllocationCallbacks structure:
-
-include::{generated}/api/structs/VkAllocationCallbacks.txt[]
-
-  * pname:pUserData is a value to be interpreted by the implementation of
-    the callbacks.
-    When any of the callbacks in sname:VkAllocationCallbacks are called, the
-    Vulkan implementation will pass this value as the first parameter to the
-    callback.
-    This value can: vary each time an allocator is passed into a command,
-    even when the same object takes an allocator in multiple commands.
-  * pname:pfnAllocation is a tlink:PFN_vkAllocationFunction pointer to an
-    application-defined memory allocation function.
-  * pname:pfnReallocation is a tlink:PFN_vkReallocationFunction pointer to
-    an application-defined memory reallocation function.
-  * pname:pfnFree is a tlink:PFN_vkFreeFunction pointer to an
-    application-defined memory free function.
-  * pname:pfnInternalAllocation is a
-    tlink:PFN_vkInternalAllocationNotification pointer to an
-    application-defined function that is called by the implementation when
-    the implementation makes internal allocations.
-  * pname:pfnInternalFree is a tlink:PFN_vkInternalFreeNotification pointer
-    to an application-defined function that is called by the implementation
-    when the implementation frees internal allocations.
-
-.Valid Usage
-****
-  * [[VUID-VkAllocationCallbacks-pfnAllocation-00632]]
-    pname:pfnAllocation must: be a valid pointer to a valid user-defined
-    tlink:PFN_vkAllocationFunction
-  * [[VUID-VkAllocationCallbacks-pfnReallocation-00633]]
-    pname:pfnReallocation must: be a valid pointer to a valid user-defined
-    tlink:PFN_vkReallocationFunction
-  * [[VUID-VkAllocationCallbacks-pfnFree-00634]]
-    pname:pfnFree must: be a valid pointer to a valid user-defined
-    tlink:PFN_vkFreeFunction
-  * [[VUID-VkAllocationCallbacks-pfnInternalAllocation-00635]]
-    If either of pname:pfnInternalAllocation or pname:pfnInternalFree is not
-    `NULL`, both must: be valid callbacks
-****
-
-include::{generated}/validity/structs/VkAllocationCallbacks.txt[]
---
-
-[open,refpage='PFN_vkAllocationFunction',desc='Application-defined memory allocation function',type='funcpointers',xrefs='VkAllocationCallbacks']
---
-The type of pname:pfnAllocation is:
-
-include::{generated}/api/funcpointers/PFN_vkAllocationFunction.txt[]
-
-  * pname:pUserData is the value specified for
-    slink:VkAllocationCallbacks::pname:pUserData in the allocator specified
-    by the application.
-  * pname:size is the size in bytes of the requested allocation.
-  * pname:alignment is the requested alignment of the allocation in bytes
-    and must: be a power of two.
-  * pname:allocationScope is a elink:VkSystemAllocationScope value
-    specifying the allocation scope of the lifetime of the allocation, as
-    described <<memory-host-allocation-scope,here>>.
-
-[[vkAllocationFunction_return_rules]]
-If pname:pfnAllocation is unable to allocate the requested memory, it must:
-return `NULL`.
-If the allocation was successful, it must: return a valid pointer to memory
-allocation containing at least pname:size bytes, and with the pointer value
-being a multiple of pname:alignment.
-
-[NOTE]
-.Note
-====
-Correct Vulkan operation cannot: be assumed if the application does not
-follow these rules.
-
-For example, pname:pfnAllocation (or pname:pfnReallocation) could cause
-termination of running Vulkan instance(s) on a failed allocation for
-debugging purposes, either directly or indirectly.
-In these circumstances, it cannot: be assumed that any part of any affected
-slink:VkInstance objects are going to operate correctly (even
-flink:vkDestroyInstance), and the application must: ensure it cleans up
-properly via other means (e.g. process termination).
-====
-
-If pname:pfnAllocation returns `NULL`, and if the implementation is unable
-to continue correct processing of the current command without the requested
-allocation, it must: treat this as a runtime error, and generate
-ename:VK_ERROR_OUT_OF_HOST_MEMORY at the appropriate time for the command in
-which the condition was detected, as described in <<fundamentals-errorcodes,
-Return Codes>>.
-
-If the implementation is able to continue correct processing of the current
-command without the requested allocation, then it may: do so, and must: not
-generate ename:VK_ERROR_OUT_OF_HOST_MEMORY as a result of this failed
-allocation.
---
-
-[open,refpage='PFN_vkReallocationFunction',desc='Application-defined memory reallocation function',type='funcpointers',xrefs='VkAllocationCallbacks']
---
-The type of pname:pfnReallocation is:
-
-include::{generated}/api/funcpointers/PFN_vkReallocationFunction.txt[]
-
-  * pname:pUserData is the value specified for
-    slink:VkAllocationCallbacks::pname:pUserData in the allocator specified
-    by the application.
-  * pname:pOriginal must: be either `NULL` or a pointer previously returned
-    by pname:pfnReallocation or pname:pfnAllocation of a compatible
-    allocator.
-  * pname:size is the size in bytes of the requested allocation.
-  * pname:alignment is the requested alignment of the allocation in bytes
-    and must: be a power of two.
-  * pname:allocationScope is a elink:VkSystemAllocationScope value
-    specifying the allocation scope of the lifetime of the allocation, as
-    described <<memory-host-allocation-scope,here>>.
-
-pname:pfnReallocation must: return an allocation with enough space for
-pname:size bytes, and the contents of the original allocation from bytes
-zero to [eq]#min(original size, new size) - 1# must: be preserved in the
-returned allocation.
-If pname:size is larger than the old size, the contents of the additional
-space are undefined:.
-If satisfying these requirements involves creating a new allocation, then
-the old allocation should: be freed.
-
-If pname:pOriginal is `NULL`, then pname:pfnReallocation must: behave
-equivalently to a call to tlink:PFN_vkAllocationFunction with the same
-parameter values (without pname:pOriginal).
-
-If pname:size is zero, then pname:pfnReallocation must: behave equivalently
-to a call to tlink:PFN_vkFreeFunction with the same pname:pUserData
-parameter value, and pname:pMemory equal to pname:pOriginal.
-
-If pname:pOriginal is non-`NULL`, the implementation must: ensure that
-pname:alignment is equal to the pname:alignment used to originally allocate
-pname:pOriginal.
-
-If this function fails and pname:pOriginal is non-`NULL` the application
-must: not free the old allocation.
-
-pname:pfnReallocation must: follow the same
-<<vkAllocationFunction_return_rules, rules for return values as
-tname:PFN_vkAllocationFunction>>.
---
-
-[open,refpage='PFN_vkFreeFunction',desc='Application-defined memory free function',type='funcpointers',xrefs='VkAllocationCallbacks']
---
-The type of pname:pfnFree is:
-
-include::{generated}/api/funcpointers/PFN_vkFreeFunction.txt[]
-
-  * pname:pUserData is the value specified for
-    slink:VkAllocationCallbacks::pname:pUserData in the allocator specified
-    by the application.
-  * pname:pMemory is the allocation to be freed.
-
-pname:pMemory may: be `NULL`, which the callback must: handle safely.
-If pname:pMemory is non-`NULL`, it must: be a pointer previously allocated
-by pname:pfnAllocation or pname:pfnReallocation.
-The application should: free this memory.
---
-
-[open,refpage='PFN_vkInternalAllocationNotification',desc='Application-defined memory allocation notification function',type='funcpointers',xrefs='VkAllocationCallbacks']
---
-The type of pname:pfnInternalAllocation is:
-
-include::{generated}/api/funcpointers/PFN_vkInternalAllocationNotification.txt[]
-
-  * pname:pUserData is the value specified for
-    slink:VkAllocationCallbacks::pname:pUserData in the allocator specified
-    by the application.
-  * pname:size is the requested size of an allocation.
-  * pname:allocationType is a elink:VkInternalAllocationType value
-    specifying the requested type of an allocation.
-  * pname:allocationScope is a elink:VkSystemAllocationScope value
-    specifying the allocation scope of the lifetime of the allocation, as
-    described <<memory-host-allocation-scope,here>>.
-
-This is a purely informational callback.
---
-
-[open,refpage='PFN_vkInternalFreeNotification',desc='Application-defined memory free notification function',type='funcpointers',xrefs='VkAllocationCallbacks']
---
-The type of pname:pfnInternalFree is:
-
-include::{generated}/api/funcpointers/PFN_vkInternalFreeNotification.txt[]
-
-  * pname:pUserData is the value specified for
-    slink:VkAllocationCallbacks::pname:pUserData in the allocator specified
-    by the application.
-  * pname:size is the requested size of an allocation.
-  * pname:allocationType is a elink:VkInternalAllocationType value
-    specifying the requested type of an allocation.
-  * pname:allocationScope is a elink:VkSystemAllocationScope value
-    specifying the allocation scope of the lifetime of the allocation, as
-    described <<memory-host-allocation-scope,here>>.
---
-
-[open,refpage='VkSystemAllocationScope',desc='Allocation scope',type='enums',xrefs='VkAllocationCallbacks']
---
-[[memory-host-allocation-scope]]
-Each allocation has an _allocation scope_ defining its lifetime and which
-object it is associated with.
-Possible values passed to the pname:allocationScope parameter of the
-callback functions specified by slink:VkAllocationCallbacks, indicating the
-allocation scope, are:
-
-include::{generated}/api/enums/VkSystemAllocationScope.txt[]
-
-  * ename:VK_SYSTEM_ALLOCATION_SCOPE_COMMAND specifies that the allocation
-    is scoped to the duration of the Vulkan command.
-  * ename:VK_SYSTEM_ALLOCATION_SCOPE_OBJECT specifies that the allocation is
-    scoped to the lifetime of the Vulkan object that is being created or
-    used.
-  * ename:VK_SYSTEM_ALLOCATION_SCOPE_CACHE specifies that the allocation is
-    scoped to the lifetime of a sname:VkPipelineCache
-ifdef::VK_EXT_validation_cache[]
-    or sname:VkValidationCacheEXT
-endif::VK_EXT_validation_cache[]
-    object.
-  * ename:VK_SYSTEM_ALLOCATION_SCOPE_DEVICE specifies that the allocation is
-    scoped to the lifetime of the Vulkan device.
-  * ename:VK_SYSTEM_ALLOCATION_SCOPE_INSTANCE specifies that the allocation
-    is scoped to the lifetime of the Vulkan instance.
-
-Most Vulkan commands operate on a single object, or there is a sole object
-that is being created or manipulated.
-When an allocation uses an allocation scope of
-ename:VK_SYSTEM_ALLOCATION_SCOPE_OBJECT or
-ename:VK_SYSTEM_ALLOCATION_SCOPE_CACHE, the allocation is scoped to the
-object being created or manipulated.
-
-When an implementation requires host memory, it will make callbacks to the
-application using the most specific allocator and allocation scope
-available:
-
-  * If an allocation is scoped to the duration of a command, the allocator
-    will use the ename:VK_SYSTEM_ALLOCATION_SCOPE_COMMAND allocation scope.
-    The most specific allocator available is used: if the object being
-    created or manipulated has an allocator, that object's allocator will be
-    used, else if the parent sname:VkDevice has an allocator it will be
-    used, else if the parent sname:VkInstance has an allocator it will be
-    used.
-    Else,
-  * If an allocation is associated with a
-ifdef::VK_EXT_validation_cache[]
-    sname:VkValidationCacheEXT or
-endif::VK_EXT_validation_cache[]
-    sname:VkPipelineCache object, the allocator will use the
-    ename:VK_SYSTEM_ALLOCATION_SCOPE_CACHE allocation scope.
-    The most specific allocator available is used (cache, else device, else
-    instance).
-    Else,
-  * If an allocation is scoped to the lifetime of an object, that object is
-    being created or manipulated by the command, and that object's type is
-    not sname:VkDevice or sname:VkInstance, the allocator will use an
-    allocation scope of ename:VK_SYSTEM_ALLOCATION_SCOPE_OBJECT.
-    The most specific allocator available is used (object, else device, else
-    instance).
-    Else,
-  * If an allocation is scoped to the lifetime of a device, the allocator
-    will use an allocation scope of ename:VK_SYSTEM_ALLOCATION_SCOPE_DEVICE.
-    The most specific allocator available is used (device, else instance).
-    Else,
-  * If the allocation is scoped to the lifetime of an instance and the
-    instance has an allocator, its allocator will be used with an allocation
-    scope of ename:VK_SYSTEM_ALLOCATION_SCOPE_INSTANCE.
-  * Otherwise an implementation will allocate memory through an alternative
-    mechanism that is unspecified.
-
---
-
-Objects that are allocated from pools do not specify their own allocator.
-When an implementation requires host memory for such an object, that memory
-is sourced from the object's parent pool's allocator.
-
-The application is not expected to handle allocating memory that is intended
-for execution by the host due to the complexities of differing security
-implementations across multiple platforms.
-The implementation will allocate such memory internally and invoke an
-application provided informational callback when these _internal
-allocations_ are allocated and freed.
-Upon allocation of executable memory, pname:pfnInternalAllocation will be
-called.
-Upon freeing executable memory, pname:pfnInternalFree will be called.
-An implementation will only call an informational callback for executable
-memory allocations and frees.
-
-[open,refpage='VkInternalAllocationType',desc='Allocation type',type='enums',xrefs='PFN_vkInternalAllocationNotification PFN_vkInternalFreeNotification']
---
-The pname:allocationType parameter to the pname:pfnInternalAllocation and
-pname:pfnInternalFree functions may: be one of the following values:
-
-include::{generated}/api/enums/VkInternalAllocationType.txt[]
-
-  * ename:VK_INTERNAL_ALLOCATION_TYPE_EXECUTABLE specifies that the
-    allocation is intended for execution by the host.
---
-
-An implementation must: only make calls into an application-provided
-allocator during the execution of an API command.
-An implementation must: only make calls into an application-provided
-allocator from the same thread that called the provoking API command.
-The implementation should: not synchronize calls to any of the callbacks.
-If synchronization is needed, the callbacks must: provide it themselves.
-The informational callbacks are subject to the same restrictions as the
-allocation callbacks.
-
-If an implementation intends to make calls through a
-sname:VkAllocationCallbacks structure between the time a ftext:vkCreate*
-command returns and the time a corresponding ftext:vkDestroy* command
-begins, that implementation must: save a copy of the allocator before the
-ftext:vkCreate* command returns.
-The callback functions and any data structures they rely upon must: remain
-valid for the lifetime of the object they are associated with.
-
-If an allocator is provided to a ftext:vkCreate* command, a _compatible_
-allocator must: be provided to the corresponding ftext:vkDestroy* command.
-Two sname:VkAllocationCallbacks structures are compatible if memory
-allocated with pname:pfnAllocation or pname:pfnReallocation in each can: be
-freed with pname:pfnReallocation or pname:pfnFree in the other.
-An allocator must: not be provided to a ftext:vkDestroy* command if an
-allocator was not provided to the corresponding ftext:vkCreate* command.
-
-If a non-`NULL` allocator is used, the pname:pfnAllocation,
-pname:pfnReallocation and pname:pfnFree members must: be non-`NULL` and
-point to valid implementations of the callbacks.
-An application can: choose to not provide informational callbacks by setting
-both pname:pfnInternalAllocation and pname:pfnInternalFree to `NULL`.
-pname:pfnInternalAllocation and pname:pfnInternalFree must: either both be
-`NULL` or both be non-`NULL`.
-
-If pname:pfnAllocation or pname:pfnReallocation fail, the implementation
-may: fail object creation and/or generate a
-ename:VK_ERROR_OUT_OF_HOST_MEMORY error, as appropriate.
-
-Allocation callbacks must: not call any Vulkan commands.
-
-The following sets of rules define when an implementation is permitted to
-call the allocator callbacks.
-
-pname:pfnAllocation or pname:pfnReallocation may: be called in the following
-situations:
-
-  * Allocations scoped to a sname:VkDevice or sname:VkInstance may: be
-    allocated from any API command.
-  * Allocations scoped to a command may: be allocated from any API command.
-  * Allocations scoped to a sname:VkPipelineCache may: only be allocated
-    from:
-  ** fname:vkCreatePipelineCache
-  ** fname:vkMergePipelineCaches for pname:dstCache
-  ** fname:vkCreateGraphicsPipelines for pname:pipelineCache
-  ** fname:vkCreateComputePipelines for pname:pipelineCache
-ifdef::VK_EXT_validation_cache[]
-  * Allocations scoped to a sname:VkValidationCacheEXT may: only be
-    allocated from:
-  ** fname:vkCreateValidationCacheEXT
-  ** fname:vkMergeValidationCachesEXT for pname:dstCache
-  ** fname:vkCreateShaderModule for pname:validationCache in
-     slink:VkShaderModuleValidationCacheCreateInfoEXT
-endif::VK_EXT_validation_cache[]
-  * Allocations scoped to a sname:VkDescriptorPool may: only be allocated
-    from:
-  ** any command that takes the pool as a direct argument
-  ** fname:vkAllocateDescriptorSets for the pname:descriptorPool member of
-     its pname:pAllocateInfo parameter
-  ** fname:vkCreateDescriptorPool
-  * Allocations scoped to a sname:VkCommandPool may: only be allocated from:
-  ** any command that takes the pool as a direct argument
-  ** fname:vkCreateCommandPool
-  ** fname:vkAllocateCommandBuffers for the pname:commandPool member of its
-     pname:pAllocateInfo parameter
-  ** any ftext:vkCmd* command whose pname:commandBuffer was allocated from
-     that sname:VkCommandPool
-  * Allocations scoped to any other object may: only be allocated in that
-    object's ftext:vkCreate* command.
-
-pname:pfnFree, or pname:pfnReallocation with zero pname:size, may: be called
-in the following situations:
-
-  * Allocations scoped to a sname:VkDevice or sname:VkInstance may: be freed
-    from any API command.
-  * Allocations scoped to a command must: be freed by any API command which
-    allocates such memory.
-  * Allocations scoped to a sname:VkPipelineCache may: be freed from
-    fname:vkDestroyPipelineCache.
-ifdef::VK_EXT_validation_cache[]
-  * Allocations scoped to a sname:VkValidationCacheEXT may: be freed from
-    fname:vkDestroyValidationCacheEXT.
-endif::VK_EXT_validation_cache[]
-  * Allocations scoped to a sname:VkDescriptorPool may: be freed from
-  ** any command that takes the pool as a direct argument
-  * Allocations scoped to a sname:VkCommandPool may: be freed from:
-  ** any command that takes the pool as a direct argument
-  ** fname:vkResetCommandBuffer whose pname:commandBuffer was allocated from
-     that sname:VkCommandPool
-  * Allocations scoped to any other object may: be freed in that object's
-    ftext:vkDestroy* command.
-  * Any command that allocates host memory may: also free host memory of the
-    same scope.
-
-
-[[memory-device]]
-== Device Memory
-
-_Device memory_ is memory that is visible to the device -- for example the
-contents of the image or buffer objects, which can: be natively used by the
-device.
-
-[[memory-device-properties]]
-=== Device Memory Properties
-
-Memory properties of a physical device describe the memory heaps and memory
-types available.
-
-[open,refpage='vkGetPhysicalDeviceMemoryProperties',desc='Reports memory information for the specified physical device',type='protos']
---
-To query memory properties, call:
-
-include::{generated}/api/protos/vkGetPhysicalDeviceMemoryProperties.txt[]
-
-  * pname:physicalDevice is the handle to the device to query.
-  * pname:pMemoryProperties is a pointer to a
-    slink:VkPhysicalDeviceMemoryProperties structure in which the properties
-    are returned.
-
-include::{generated}/validity/protos/vkGetPhysicalDeviceMemoryProperties.txt[]
---
-
-[open,refpage='VkPhysicalDeviceMemoryProperties',desc='Structure specifying physical device memory properties',type='structs']
---
-The sname:VkPhysicalDeviceMemoryProperties structure is defined as:
-
-include::{generated}/api/structs/VkPhysicalDeviceMemoryProperties.txt[]
-
-  * pname:memoryTypeCount is the number of valid elements in the
-    pname:memoryTypes array.
-  * pname:memoryTypes is an array of ename:VK_MAX_MEMORY_TYPES
-    slink:VkMemoryType structures describing the _memory types_ that can: be
-    used to access memory allocated from the heaps specified by
-    pname:memoryHeaps.
-  * pname:memoryHeapCount is the number of valid elements in the
-    pname:memoryHeaps array.
-  * pname:memoryHeaps is an array of ename:VK_MAX_MEMORY_HEAPS
-    slink:VkMemoryHeap structures describing the _memory heaps_ from which
-    memory can: be allocated.
-
-The sname:VkPhysicalDeviceMemoryProperties structure describes a number of
-_memory heaps_ as well as a number of _memory types_ that can: be used to
-access memory allocated in those heaps.
-Each heap describes a memory resource of a particular size, and each memory
-type describes a set of memory properties (e.g. host cached vs uncached)
-that can: be used with a given memory heap.
-Allocations using a particular memory type will consume resources from the
-heap indicated by that memory type's heap index.
-More than one memory type may: share each heap, and the heaps and memory
-types provide a mechanism to advertise an accurate size of the physical
-memory resources while allowing the memory to be used with a variety of
-different properties.
-
-The number of memory heaps is given by pname:memoryHeapCount and is less
-than or equal to ename:VK_MAX_MEMORY_HEAPS.
-Each heap is described by an element of the pname:memoryHeaps array as a
-slink:VkMemoryHeap structure.
-The number of memory types available across all memory heaps is given by
-pname:memoryTypeCount and is less than or equal to
-ename:VK_MAX_MEMORY_TYPES.
-Each memory type is described by an element of the pname:memoryTypes array
-as a slink:VkMemoryType structure.
-
-At least one heap must: include ename:VK_MEMORY_HEAP_DEVICE_LOCAL_BIT in
-slink:VkMemoryHeap::pname:flags.
-If there are multiple heaps that all have similar performance
-characteristics, they may: all include
-ename:VK_MEMORY_HEAP_DEVICE_LOCAL_BIT.
-In a unified memory architecture (UMA) system there is often only a single
-memory heap which is considered to be equally "`local`" to the host and to
-the device, and such an implementation must: advertise the heap as
-device-local.
-
-[[memory-device-bitmask-list]]
-Each memory type returned by flink:vkGetPhysicalDeviceMemoryProperties must:
-have its pname:propertyFlags set to one of the following values:
-
-  * 0
-  * ename:VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT | +
-    ename:VK_MEMORY_PROPERTY_HOST_COHERENT_BIT
-  * ename:VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT | +
-    ename:VK_MEMORY_PROPERTY_HOST_CACHED_BIT
-  * ename:VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT | +
-    ename:VK_MEMORY_PROPERTY_HOST_CACHED_BIT | +
-    ename:VK_MEMORY_PROPERTY_HOST_COHERENT_BIT
-  * ename:VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT
-  * ename:VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT | +
-    ename:VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT | +
-    ename:VK_MEMORY_PROPERTY_HOST_COHERENT_BIT
-  * ename:VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT | +
-    ename:VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT | +
-    ename:VK_MEMORY_PROPERTY_HOST_CACHED_BIT
-  * ename:VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT | +
-    ename:VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT | +
-    ename:VK_MEMORY_PROPERTY_HOST_CACHED_BIT | +
-    ename:VK_MEMORY_PROPERTY_HOST_COHERENT_BIT
-  * ename:VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT | +
-    ename:VK_MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT
-ifdef::VK_VERSION_1_1[]
-  * ename:VK_MEMORY_PROPERTY_PROTECTED_BIT
-  * ename:VK_MEMORY_PROPERTY_PROTECTED_BIT |
-    ename:VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT
-endif::VK_VERSION_1_1[]
-ifdef::VK_AMD_device_coherent_memory[]
-  * ename:VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT | +
-    ename:VK_MEMORY_PROPERTY_HOST_COHERENT_BIT | +
-    ename:VK_MEMORY_PROPERTY_DEVICE_COHERENT_BIT_AMD
-  * ename:VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT | +
-    ename:VK_MEMORY_PROPERTY_HOST_CACHED_BIT | +
-    ename:VK_MEMORY_PROPERTY_HOST_COHERENT_BIT | +
-    ename:VK_MEMORY_PROPERTY_DEVICE_COHERENT_BIT_AMD
-  * ename:VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT | +
-    ename:VK_MEMORY_PROPERTY_DEVICE_COHERENT_BIT_AMD
-  * ename:VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT | +
-    ename:VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT | +
-    ename:VK_MEMORY_PROPERTY_HOST_COHERENT_BIT | +
-    ename:VK_MEMORY_PROPERTY_DEVICE_COHERENT_BIT_AMD
-  * ename:VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT | +
-    ename:VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT | +
-    ename:VK_MEMORY_PROPERTY_HOST_CACHED_BIT | +
-    ename:VK_MEMORY_PROPERTY_HOST_COHERENT_BIT | +
-    ename:VK_MEMORY_PROPERTY_DEVICE_COHERENT_BIT_AMD
-  * ename:VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT | +
-    ename:VK_MEMORY_PROPERTY_HOST_COHERENT_BIT | +
-    ename:VK_MEMORY_PROPERTY_DEVICE_COHERENT_BIT_AMD | +
-    ename:VK_MEMORY_PROPERTY_DEVICE_UNCACHED_BIT_AMD
-  * ename:VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT | +
-    ename:VK_MEMORY_PROPERTY_HOST_CACHED_BIT | +
-    ename:VK_MEMORY_PROPERTY_HOST_COHERENT_BIT | +
-    ename:VK_MEMORY_PROPERTY_DEVICE_COHERENT_BIT_AMD | +
-    ename:VK_MEMORY_PROPERTY_DEVICE_UNCACHED_BIT_AMD
-  * ename:VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT | +
-    ename:VK_MEMORY_PROPERTY_DEVICE_COHERENT_BIT_AMD | +
-    ename:VK_MEMORY_PROPERTY_DEVICE_UNCACHED_BIT_AMD
-  * ename:VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT | +
-    ename:VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT | +
-    ename:VK_MEMORY_PROPERTY_HOST_COHERENT_BIT | +
-    ename:VK_MEMORY_PROPERTY_DEVICE_COHERENT_BIT_AMD | +
-    ename:VK_MEMORY_PROPERTY_DEVICE_UNCACHED_BIT_AMD
-  * ename:VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT | +
-    ename:VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT | +
-    ename:VK_MEMORY_PROPERTY_HOST_CACHED_BIT | +
-    ename:VK_MEMORY_PROPERTY_HOST_COHERENT_BIT | +
-    ename:VK_MEMORY_PROPERTY_DEVICE_COHERENT_BIT_AMD | +
-    ename:VK_MEMORY_PROPERTY_DEVICE_UNCACHED_BIT_AMD
-endif::VK_AMD_device_coherent_memory[]
-ifdef::VK_NV_external_memory_rdma[]
-  * ename:VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT | +
-    ename:VK_MEMORY_PROPERTY_RDMA_CAPABLE_BIT_NV
-endif::VK_NV_external_memory_rdma[]
-
-There must: be at least one memory type with both the
-ename:VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT and
-ename:VK_MEMORY_PROPERTY_HOST_COHERENT_BIT bits set in its
-pname:propertyFlags.
-There must: be at least one memory type with the
-ename:VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT bit set in its
-pname:propertyFlags.
-ifdef::VK_AMD_device_coherent_memory[]
-If the <<features-deviceCoherentMemory, pname:deviceCoherentMemory>> feature
-is enabled, there must: be at least one memory type with the
-ename:VK_MEMORY_PROPERTY_DEVICE_COHERENT_BIT_AMD bit set in its
-pname:propertyFlags.
-endif::VK_AMD_device_coherent_memory[]
-
-For each pair of elements *X* and *Y* returned in pname:memoryTypes, *X*
-must: be placed at a lower index position than *Y* if:
-
-  * the set of bit flags returned in the pname:propertyFlags member of *X*
-    is a strict subset of the set of bit flags returned in the
-    pname:propertyFlags member of *Y*; or
-  * the pname:propertyFlags members of *X* and *Y* are equal, and *X*
-    belongs to a memory heap with greater performance (as determined in an
-    implementation-specific manner)
-ifdef::VK_AMD_device_coherent_memory[]
-    ; or
-  * the pname:propertyFlags members of *Y* includes
-    ename:VK_MEMORY_PROPERTY_DEVICE_COHERENT_BIT_AMD or
-    ename:VK_MEMORY_PROPERTY_DEVICE_UNCACHED_BIT_AMD and *X* does not
-endif::VK_AMD_device_coherent_memory[]
-
-[NOTE]
-.Note
-====
-There is no ordering requirement between *X* and *Y* elements for the case
-their pname:propertyFlags members are not in a subset relation.
-That potentially allows more than one possible way to order the same set of
-memory types.
-Notice that the <<memory-device-bitmask-list,list of all allowed memory
-property flag combinations>> is written in a valid order.
-But if instead ename:VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT was before
-ename:VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT |
-ename:VK_MEMORY_PROPERTY_HOST_COHERENT_BIT, the list would still be in a
-valid order.
-ifdef::VK_AMD_device_coherent_memory[]
-
-There may be a performance penalty for using device coherent or uncached
-device memory types, and using these accidentally is undesirable.
-In order to avoid this, memory types with these properties always appear at
-the end of the list; but are subject to the same rules otherwise.
-endif::VK_AMD_device_coherent_memory[]
-====
-
-This ordering requirement enables applications to use a simple search loop
-to select the desired memory type along the lines of:
-
-[source,c++]
-~~~~
-// Find a memory in `memoryTypeBitsRequirement` that includes all of `requiredProperties`
-int32_t findProperties(const VkPhysicalDeviceMemoryProperties* pMemoryProperties,
-                       uint32_t memoryTypeBitsRequirement,
-                       VkMemoryPropertyFlags requiredProperties) {
-    const uint32_t memoryCount = pMemoryProperties->memoryTypeCount;
-    for (uint32_t memoryIndex = 0; memoryIndex < memoryCount; ++memoryIndex) {
-        const uint32_t memoryTypeBits = (1 << memoryIndex);
-        const bool isRequiredMemoryType = memoryTypeBitsRequirement & memoryTypeBits;
-
-        const VkMemoryPropertyFlags properties =
-            pMemoryProperties->memoryTypes[memoryIndex].propertyFlags;
-        const bool hasRequiredProperties =
-            (properties & requiredProperties) == requiredProperties;
-
-        if (isRequiredMemoryType && hasRequiredProperties)
-            return static_cast<int32_t>(memoryIndex);
-    }
-
-    // failed to find memory type
-    return -1;
-}
-
-// Try to find an optimal memory type, or if it does not exist try fallback memory type
-// `device` is the VkDevice
-// `image` is the VkImage that requires memory to be bound
-// `memoryProperties` properties as returned by vkGetPhysicalDeviceMemoryProperties
-// `requiredProperties` are the property flags that must be present
-// `optimalProperties` are the property flags that are preferred by the application
-VkMemoryRequirements memoryRequirements;
-vkGetImageMemoryRequirements(device, image, &memoryRequirements);
-int32_t memoryType =
-    findProperties(&memoryProperties, memoryRequirements.memoryTypeBits, optimalProperties);
-if (memoryType == -1) // not found; try fallback properties
-    memoryType =
-        findProperties(&memoryProperties, memoryRequirements.memoryTypeBits, requiredProperties);
-~~~~
-
-include::{generated}/validity/structs/VkPhysicalDeviceMemoryProperties.txt[]
---
-
-[open,refpage='VK_MAX_MEMORY_TYPES',desc='Length of an array of memory types',type='consts']
---
-ename:VK_MAX_MEMORY_TYPES is the length of an array of slink:VkMemoryType
-structures describing memory types, as returned in
-slink:VkPhysicalDeviceMemoryProperties::memoryTypes.
-
-include::{generated}/api/enums/VK_MAX_MEMORY_TYPES.txt[]
---
-
-[open,refpage='VK_MAX_MEMORY_HEAPS',desc='Length of an array of memory heaps',type='consts']
---
-ename:VK_MAX_MEMORY_HEAPS is the length of an array of slink:VkMemoryHeap
-structures describing memory heaps, as returned in
-slink:VkPhysicalDeviceMemoryProperties::memoryHeaps.
-
-include::{generated}/api/enums/VK_MAX_MEMORY_HEAPS.txt[]
---
-
-ifdef::VK_VERSION_1_1,VK_KHR_get_physical_device_properties2[]
-[open,refpage='vkGetPhysicalDeviceMemoryProperties2',desc='Reports memory information for the specified physical device',type='protos']
---
-To query memory properties, call:
-
-ifdef::VK_VERSION_1_1[]
-include::{generated}/api/protos/vkGetPhysicalDeviceMemoryProperties2.txt[]
-endif::VK_VERSION_1_1[]
-
-ifdef::VK_VERSION_1_1+VK_KHR_get_physical_device_properties2[or the equivalent command]
-
-ifdef::VK_KHR_get_physical_device_properties2[]
-include::{generated}/api/protos/vkGetPhysicalDeviceMemoryProperties2KHR.txt[]
-endif::VK_KHR_get_physical_device_properties2[]
-
-  * pname:physicalDevice is the handle to the device to query.
-  * pname:pMemoryProperties is a pointer to a
-    slink:VkPhysicalDeviceMemoryProperties2 structure in which the
-    properties are returned.
-
-fname:vkGetPhysicalDeviceMemoryProperties2 behaves similarly to
-flink:vkGetPhysicalDeviceMemoryProperties, with the ability to return
-extended information in a pname:pNext chain of output structures.
-
-include::{generated}/validity/protos/vkGetPhysicalDeviceMemoryProperties2.txt[]
---
-
-[open,refpage='VkPhysicalDeviceMemoryProperties2',desc='Structure specifying physical device memory properties',type='structs']
---
-The sname:VkPhysicalDeviceMemoryProperties2 structure is defined as:
-
-include::{generated}/api/structs/VkPhysicalDeviceMemoryProperties2.txt[]
-
-ifdef::VK_KHR_get_physical_device_properties2[]
-or the equivalent
-
-include::{generated}/api/structs/VkPhysicalDeviceMemoryProperties2KHR.txt[]
-endif::VK_KHR_get_physical_device_properties2[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:memoryProperties is a slink:VkPhysicalDeviceMemoryProperties
-    structure which is populated with the same values as in
-    flink:vkGetPhysicalDeviceMemoryProperties.
-
-include::{generated}/validity/structs/VkPhysicalDeviceMemoryProperties2.txt[]
---
-endif::VK_VERSION_1_1,VK_KHR_get_physical_device_properties2[]
-
-[open,refpage='VkMemoryHeap',desc='Structure specifying a memory heap',type='structs']
---
-The sname:VkMemoryHeap structure is defined as:
-
-include::{generated}/api/structs/VkMemoryHeap.txt[]
-
-  * pname:size is the total memory size in bytes in the heap.
-  * pname:flags is a bitmask of elink:VkMemoryHeapFlagBits specifying
-    attribute flags for the heap.
-
-include::{generated}/validity/structs/VkMemoryHeap.txt[]
---
-
-[open,refpage='VkMemoryHeapFlagBits',desc='Bitmask specifying attribute flags for a heap',type='enums']
---
-Bits which may: be set in slink:VkMemoryHeap::pname:flags, indicating
-attribute flags for the heap, are:
-
-include::{generated}/api/enums/VkMemoryHeapFlagBits.txt[]
-
-  * ename:VK_MEMORY_HEAP_DEVICE_LOCAL_BIT specifies that the heap
-    corresponds to device-local memory.
-    Device-local memory may: have different performance characteristics than
-    host-local memory, and may: support different memory property flags.
-ifdef::VK_VERSION_1_1,VK_KHR_device_group_creation[]
-  * ename:VK_MEMORY_HEAP_MULTI_INSTANCE_BIT specifies that in a logical
-    device representing more than one physical device, there is a
-    per-physical device instance of the heap memory.
-    By default, an allocation from such a heap will be replicated to each
-    physical device's instance of the heap.
-endif::VK_VERSION_1_1,VK_KHR_device_group_creation[]
---
-
-[open,refpage='VkMemoryHeapFlags',desc='Bitmask of VkMemoryHeapFlagBits',type='flags']
---
-include::{generated}/api/flags/VkMemoryHeapFlags.txt[]
-
-tname:VkMemoryHeapFlags is a bitmask type for setting a mask of zero or more
-elink:VkMemoryHeapFlagBits.
---
-
-[open,refpage='VkMemoryType',desc='Structure specifying memory type',type='structs']
---
-The sname:VkMemoryType structure is defined as:
-
-include::{generated}/api/structs/VkMemoryType.txt[]
-
-  * pname:heapIndex describes which memory heap this memory type corresponds
-    to, and must: be less than pname:memoryHeapCount from the
-    slink:VkPhysicalDeviceMemoryProperties structure.
-  * pname:propertyFlags is a bitmask of elink:VkMemoryPropertyFlagBits of
-    properties for this memory type.
-
-include::{generated}/validity/structs/VkMemoryType.txt[]
---
-
-[open,refpage='VkMemoryPropertyFlagBits',desc='Bitmask specifying properties for a memory type',type='enums']
---
-Bits which may: be set in slink:VkMemoryType::pname:propertyFlags,
-indicating properties of a memory heap, are:
-
-include::{generated}/api/enums/VkMemoryPropertyFlagBits.txt[]
-
-  * ename:VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT bit specifies that memory
-    allocated with this type is the most efficient for device access.
-    This property will be set if and only if the memory type belongs to a
-    heap with the ename:VK_MEMORY_HEAP_DEVICE_LOCAL_BIT set.
-  * ename:VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT bit specifies that memory
-    allocated with this type can: be mapped for host access using
-    flink:vkMapMemory.
-  * ename:VK_MEMORY_PROPERTY_HOST_COHERENT_BIT bit specifies that the host
-    cache management commands flink:vkFlushMappedMemoryRanges and
-    flink:vkInvalidateMappedMemoryRanges are not needed to flush host writes
-    to the device or make device writes visible to the host, respectively.
-  * ename:VK_MEMORY_PROPERTY_HOST_CACHED_BIT bit specifies that memory
-    allocated with this type is cached on the host.
-    Host memory accesses to uncached memory are slower than to cached
-    memory, however uncached memory is always host coherent.
-  * ename:VK_MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT bit specifies that the
-    memory type only allows device access to the memory.
-    Memory types must: not have both
-    ename:VK_MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT and
-    ename:VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT set.
-    Additionally, the object's backing memory may: be provided by the
-    implementation lazily as specified in <<memory-device-lazy_allocation,
-    Lazily Allocated Memory>>.
-ifdef::VK_VERSION_1_1[]
-  * ename:VK_MEMORY_PROPERTY_PROTECTED_BIT bit specifies that the memory
-    type only allows device access to the memory, and allows protected queue
-    operations to access the memory.
-    Memory types must: not have ename:VK_MEMORY_PROPERTY_PROTECTED_BIT set
-    and any of ename:VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT set, or
-    ename:VK_MEMORY_PROPERTY_HOST_COHERENT_BIT set, or
-    ename:VK_MEMORY_PROPERTY_HOST_CACHED_BIT set.
-endif::VK_VERSION_1_1[]
-ifdef::VK_AMD_device_coherent_memory[]
-  * ename:VK_MEMORY_PROPERTY_DEVICE_COHERENT_BIT_AMD bit specifies that
-    device accesses to allocations of this memory type are automatically
-    made available and visible.
-  * ename:VK_MEMORY_PROPERTY_DEVICE_UNCACHED_BIT_AMD bit specifies that
-    memory allocated with this type is not cached on the device.
-    Uncached device memory is always device coherent.
-endif::VK_AMD_device_coherent_memory[]
-ifdef::VK_NV_external_memory_rdma[]
-  * ename:VK_MEMORY_PROPERTY_RDMA_CAPABLE_BIT_NV bit specifies that external
-    devices can access this memory directly.
-endif::VK_NV_external_memory_rdma[]
-
-ifdef::VK_AMD_device_coherent_memory[]
-For any memory allocated with both the
-ename:VK_MEMORY_PROPERTY_HOST_COHERENT_BIT and the
-ename:VK_MEMORY_PROPERTY_DEVICE_COHERENT_BIT_AMD, host or device accesses
-also perform automatic memory domain transfer operations, such that writes
-are always automatically available and visible to both host and device
-memory domains.
-
-[NOTE]
-.Note
-====
-Device coherence is a useful property for certain debugging use cases (e.g.
-crash analysis, where performing separate coherence actions could mean
-values are not reported correctly).
-However, device coherent accesses may be slower than equivalent accesses
-without device coherence, particularly if they are also device uncached.
-For device uncached memory in particular, repeated accesses to the same or
-neighbouring memory locations over a short time period (e.g. within a frame)
-may be slower than it would be for the equivalent cached memory type.
-As such, it is generally inadvisable to use device coherent or device
-uncached memory except when really needed.
-====
-endif::VK_AMD_device_coherent_memory[]
---
-
-[open,refpage='VkMemoryPropertyFlags',desc='Bitmask of VkMemoryPropertyFlagBits',type='flags']
---
-include::{generated}/api/flags/VkMemoryPropertyFlags.txt[]
-
-tname:VkMemoryPropertyFlags is a bitmask type for setting a mask of zero or
-more elink:VkMemoryPropertyFlagBits.
---
-
-ifdef::VK_EXT_memory_budget[]
-[open,refpage='VkPhysicalDeviceMemoryBudgetPropertiesEXT',desc='Structure specifying physical device memory budget and usage',type='structs']
---
-If the sname:VkPhysicalDeviceMemoryBudgetPropertiesEXT structure is included
-in the pname:pNext chain of slink:VkPhysicalDeviceMemoryProperties2, it is
-filled with the current memory budgets and usages.
-
-The sname:VkPhysicalDeviceMemoryBudgetPropertiesEXT structure is defined as:
-
-include::{generated}/api/structs/VkPhysicalDeviceMemoryBudgetPropertiesEXT.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:heapBudget is an array of ename:VK_MAX_MEMORY_HEAPS
-    basetype:VkDeviceSize values in which memory budgets are returned, with
-    one element for each memory heap.
-    A heap's budget is a rough estimate of how much memory the process can:
-    allocate from that heap before allocations may: fail or cause
-    performance degradation.
-    The budget includes any currently allocated device memory.
-  * pname:heapUsage is an array of ename:VK_MAX_MEMORY_HEAPS
-    basetype:VkDeviceSize values in which memory usages are returned, with
-    one element for each memory heap.
-    A heap's usage is an estimate of how much memory the process is
-    currently using in that heap.
-
-The values returned in this structure are not invariant.
-The pname:heapBudget and pname:heapUsage values must: be zero for array
-elements greater than or equal to
-slink:VkPhysicalDeviceMemoryProperties::pname:memoryHeapCount.
-The pname:heapBudget value must: be non-zero for array elements less than
-slink:VkPhysicalDeviceMemoryProperties::pname:memoryHeapCount.
-The pname:heapBudget value must: be less than or equal to
-slink:VkMemoryHeap::pname:size for each heap.
-
-include::{generated}/validity/structs/VkPhysicalDeviceMemoryBudgetPropertiesEXT.txt[]
---
-endif::VK_EXT_memory_budget[]
-
-[[memory-device-objects]]
-=== Device Memory Objects
-
-[open,refpage='VkDeviceMemory',desc='Opaque handle to a device memory object',type='handles']
---
-A Vulkan device operates on data in device memory via memory objects that
-are represented in the API by a sname:VkDeviceMemory handle:
-
-include::{generated}/api/handles/VkDeviceMemory.txt[]
---
-
-=== Device Memory Allocation
-
-[open,refpage='vkAllocateMemory',desc='Allocate device memory',type='protos']
---
-To allocate memory objects, call:
-
-include::{generated}/api/protos/vkAllocateMemory.txt[]
-
-  * pname:device is the logical device that owns the memory.
-  * pname:pAllocateInfo is a pointer to a slink:VkMemoryAllocateInfo
-    structure describing parameters of the allocation.
-    A successfully returned allocation must: use the requested parameters --
-    no substitution is permitted by the implementation.
-  * pname:pAllocator controls host memory allocation as described in the
-    <<memory-allocation, Memory Allocation>> chapter.
-  * pname:pMemory is a pointer to a slink:VkDeviceMemory handle in which
-    information about the allocated memory is returned.
-
-Allocations returned by fname:vkAllocateMemory are guaranteed to meet any
-alignment requirement of the implementation.
-For example, if an implementation requires 128 byte alignment for images and
-64 byte alignment for buffers, the device memory returned through this
-mechanism would be 128-byte aligned.
-This ensures that applications can: correctly suballocate objects of
-different types (with potentially different alignment requirements) in the
-same memory object.
-
-ifndef::VK_VERSION_1_1[]
-When memory is allocated, its contents are undefined:.
-endif::VK_VERSION_1_1[]
-ifdef::VK_VERSION_1_1[]
-When memory is allocated, its contents are undefined: with the following
-constraint:
-
-  * The contents of unprotected memory must: not be a function of the
-    contents of data protected memory objects, even if those memory objects
-    were previously freed.
-
-[NOTE]
-.Note
-====
-The contents of memory allocated by one application should: not be a
-function of data from protected memory objects of another application, even
-if those memory objects were previously freed.
-====
-endif::VK_VERSION_1_1[]
-
-The maximum number of valid memory allocations that can: exist
-simultaneously within a slink:VkDevice may: be restricted by implementation-
-or platform-dependent limits.
-The <<limits-maxMemoryAllocationCount,pname:maxMemoryAllocationCount>>
-feature describes the number of allocations that can: exist simultaneously
-before encountering these internal limits.
-
-[NOTE]
-.Note
-====
-For historical reasons, if pname:maxMemoryAllocationCount is exceeded, some
-implementations may return ename:VK_ERROR_TOO_MANY_OBJECTS.
-Exceeding this limit will result in undefined: behavior, and an application
-should not rely on the use of the returned error code in order to identify
-when the limit is reached.
-====
-
-[NOTE]
-.Note
-====
-Many protected memory implementations involve complex hardware and system
-software support, and often have additional and much lower limits on the
-number of simultaneous protected memory allocations (from memory types with
-the ename:VK_MEMORY_PROPERTY_PROTECTED_BIT property) than for non-protected
-memory allocations.
-These limits can be system-wide, and depend on a variety of factors outside
-of the Vulkan implementation, so can't be queried in Vulkan.
-Applications should: use as few allocations as possible from such memory
-types by suballocating aggressively, and be prepared for allocation failure
-even when there is apparently plenty of capacity remaining in the memory
-heap.
-As a guideline, the Vulkan conformance test suite requires that at least 80
-minimum-size allocations can exist concurrently when no other uses of
-protected memory are active in the system.
-====
-
-Some platforms may: have a limit on the maximum size of a single allocation.
-For example, certain systems may: fail to create allocations with a size
-greater than or equal to 4GB.
-Such a limit is implementation-dependent, and if such a failure occurs then
-the error ename:VK_ERROR_OUT_OF_DEVICE_MEMORY must: be returned.
-ifdef::VK_KHR_maintenance3[]
-This limit is advertised in
-slink:VkPhysicalDeviceMaintenance3Properties::pname:maxMemoryAllocationSize.
-endif::VK_KHR_maintenance3[]
-
-ifdef::VK_AMD_memory_overallocation_behavior[]
-
-The cumulative memory size allocated to a heap can: be limited by the size
-of the specified heap.
-In such cases, allocated memory is tracked on a per-device and per-heap
-basis.
-Some platforms allow overallocation into other heaps.
-The overallocation behavior can: be specified through the
-`apiext:VK_AMD_memory_overallocation_behavior` extension.
-
-endif::VK_AMD_memory_overallocation_behavior[]
-
-ifdef::VK_EXT_pageable_device_local_memory[]
-
-If the
-slink:VkPhysicalDevicePageableDeviceLocalMemoryFeaturesEXT::pname:pageableDeviceLocalMemory
-feature is enabled, memory allocations made from a heap that includes
-ename:VK_MEMORY_HEAP_DEVICE_LOCAL_BIT in slink:VkMemoryHeap::pname:flags
-may: be transparently moved to host-local memory allowing multiple
-applications to share device-local memory.
-If there is no space left in device-local memory when this new allocation is
-made, other allocations may: be moved out transparently to make room.
-The operating system will determine which allocations to move to
-device-local memory or host-local memory based on platform-specific
-criteria.
-To help the operating system make good choices, the application should: set
-the appropriate memory priority with slink:VkMemoryPriorityAllocateInfoEXT
-and adjust it as necessary with flink:vkSetDeviceMemoryPriorityEXT.
-Higher priority allocations will moved to device-local memory first.
-
-Memory allocations made on heaps without the
-ename:VK_MEMORY_HEAP_DEVICE_LOCAL_BIT property will not be transparently
-promoted to device-local memory by the operating system.
-
-endif::VK_EXT_pageable_device_local_memory[]
-
-.Valid Usage
-****
-  * [[VUID-vkAllocateMemory-pAllocateInfo-01713]]
-    pname:pAllocateInfo->allocationSize must: be less than or equal to
-    slink:VkPhysicalDeviceMemoryProperties::pname:memoryHeaps[`memindex`].pname:size
-    where `memindex` =
-    slink:VkPhysicalDeviceMemoryProperties::pname:memoryTypes[pname:pAllocateInfo->memoryTypeIndex].pname:heapIndex
-    as returned by flink:vkGetPhysicalDeviceMemoryProperties for the
-    slink:VkPhysicalDevice that pname:device was created from
-  * [[VUID-vkAllocateMemory-pAllocateInfo-01714]]
-    pname:pAllocateInfo->memoryTypeIndex must: be less than
-    slink:VkPhysicalDeviceMemoryProperties::pname:memoryTypeCount as
-    returned by flink:vkGetPhysicalDeviceMemoryProperties for the
-    slink:VkPhysicalDevice that pname:device was created from
-ifdef::VK_AMD_device_coherent_memory[]
-  * [[VUID-vkAllocateMemory-deviceCoherentMemory-02790]]
-    If the <<features-deviceCoherentMemory,pname:deviceCoherentMemory>>
-    feature is not enabled, pname:pAllocateInfo->memoryTypeIndex must: not
-    identify a memory type supporting
-    ename:VK_MEMORY_PROPERTY_DEVICE_COHERENT_BIT_AMD
-endif::VK_AMD_device_coherent_memory[]
-  * [[VUID-vkAllocateMemory-maxMemoryAllocationCount-04101]]
-    There must: be less than
-    sname:VkPhysicalDeviceLimits::pname:maxMemoryAllocationCount device
-    memory allocations currently allocated on the device
-****
-
-include::{generated}/validity/protos/vkAllocateMemory.txt[]
---
-
-[open,refpage='VkMemoryAllocateInfo',desc='Structure containing parameters of a memory allocation',type='structs']
---
-The sname:VkMemoryAllocateInfo structure is defined as:
-
-include::{generated}/api/structs/VkMemoryAllocateInfo.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:allocationSize is the size of the allocation in bytes.
-  * pname:memoryTypeIndex is an index identifying a memory type from the
-    pname:memoryTypes array of the slink:VkPhysicalDeviceMemoryProperties
-    structure.
-
-The internal data of an allocated device memory object must: include a
-reference to implementation-specific resources, referred to as the memory
-object's _payload_.
-ifdef::VK_KHR_external_memory_win32,VK_KHR_external_memory_fd,VK_EXT_external_memory_host,VK_ANDROID_external_memory_android_hardware_buffer[]
-Applications can: also import and export that internal data to and from
-device memory objects to share data between Vulkan instances and other
-compatible APIs.
-A sname:VkMemoryAllocateInfo structure defines a memory import operation if
-its pname:pNext chain includes one of the following structures:
-
-ifdef::VK_KHR_external_memory_win32[]
-  * slink:VkImportMemoryWin32HandleInfoKHR with a non-zero pname:handleType
-    value
-endif::VK_KHR_external_memory_win32[]
-ifdef::VK_KHR_external_memory_fd[]
-  * slink:VkImportMemoryFdInfoKHR with a non-zero pname:handleType value
-endif::VK_KHR_external_memory_fd[]
-ifdef::VK_EXT_external_memory_host[]
-  * slink:VkImportMemoryHostPointerInfoEXT with a non-zero pname:handleType
-    value
-endif::VK_EXT_external_memory_host[]
-ifdef::VK_ANDROID_external_memory_android_hardware_buffer[]
-  * slink:VkImportAndroidHardwareBufferInfoANDROID with a non-`NULL`
-    pname:buffer value
-endif::VK_ANDROID_external_memory_android_hardware_buffer[]
-ifdef::VK_FUCHSIA_external_memory[]
-  * slink:VkImportMemoryZirconHandleInfoFUCHSIA with a non-zero
-    pname:handleType value
-endif::VK_FUCHSIA_external_memory[]
-ifdef::VK_FUCHSIA_buffer_collection[]
-  * slink:VkImportMemoryBufferCollectionFUCHSIA
-endif::VK_FUCHSIA_buffer_collection[]
-
-ifdef::VK_KHR_external_memory_win32[]
-If the parameters define an import operation and the external handle type is
-ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_BIT,
-ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_KMT_BIT, or
-ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_RESOURCE_BIT,
-pname:allocationSize is ignored.
-The implementation must: query the size of these allocations from the OS.
-endif::VK_KHR_external_memory_win32[]
-
-Whether device memory objects constructed via a memory import operation hold
-a reference to their payload depends on the properties of the handle type
-used to perform the import, as defined below for each valid handle type.
-Importing memory must: not modify the content of the memory.
-Implementations must: ensure that importing memory does not enable the
-importing Vulkan instance to access any memory or resources in other Vulkan
-instances other than that corresponding to the memory object imported.
-Implementations must: also ensure accessing imported memory which has not
-been initialized does not allow the importing Vulkan instance to obtain data
-from the exporting Vulkan instance or vice-versa.
-
-[NOTE]
-.Note
-====
-How exported and imported memory is isolated is left to the implementation,
-but applications should be aware that such isolation may: prevent
-implementations from placing multiple exportable memory objects in the same
-physical or virtual page.
-Hence, applications should: avoid creating many small external memory
-objects whenever possible.
-====
-
-Importing memory must: not increase overall heap usage within a system.
-ifdef::VK_VERSION_1_1,VK_KHR_maintenance3,VK_EXT_memory_budget[]
-However, it must: affect the following per-process values:
-
-ifdef::VK_VERSION_1_1,VK_KHR_maintenance3[]
-  * slink:VkPhysicalDeviceMaintenance3Properties::pname:maxMemoryAllocationCount
-endif::VK_VERSION_1_1,VK_KHR_maintenance3[]
-ifdef::VK_EXT_memory_budget[]
-  * slink:VkPhysicalDeviceMemoryBudgetPropertiesEXT::pname:heapUsage
-endif::VK_EXT_memory_budget[]
-endif::VK_VERSION_1_1,VK_KHR_maintenance3,VK_EXT_memory_budget[]
-
-When performing a memory import operation, it is the responsibility of the
-application to ensure the external handles and their associated payloads
-meet all valid usage requirements.
-However, implementations must: perform sufficient validation of external
-handles and payloads to ensure that the operation results in a valid memory
-object which will not cause program termination, device loss, queue stalls,
-or corruption of other resources when used as allowed according to its
-allocation parameters.
-If the external handle provided does not meet these requirements, the
-implementation must: fail the memory import operation with the error code
-ename:VK_ERROR_INVALID_EXTERNAL_HANDLE.
-
-endif::VK_KHR_external_memory_win32,VK_KHR_external_memory_fd,VK_EXT_external_memory_host,VK_ANDROID_external_memory_android_hardware_buffer[]
-
-.Valid Usage
-****
-ifndef::VK_ANDROID_external_memory_android_hardware_buffer[]
-  * [[VUID-VkMemoryAllocateInfo-allocationSize-00638]]
-    pname:allocationSize must: be greater than `0`
-endif::VK_ANDROID_external_memory_android_hardware_buffer[]
-ifdef::VK_FUCHSIA_buffer_collection[]
-  * [[VUID-VkMemoryAllocateInfo-buffer-06380]]
-    If the parameters define an import operation from an
-    slink:VkBufferCollectionFUCHSIA, and
-    slink:VkMemoryDedicatedAllocateInfo::pname:buffer is present and
-    non-NULL, slink:VkImportMemoryBufferCollectionFUCHSIA::pname:collection
-    and slink:VkImportMemoryBufferCollectionFUCHSIA::pname:index must match
-    slink:VkBufferCollectionBufferCreateInfoFUCHSIA::pname:collection and
-    slink:VkBufferCollectionBufferCreateInfoFUCHSIA::pname:index,
-    respectively, of the slink:VkBufferCollectionBufferCreateInfoFUCHSIA
-    structure used to create the
-    slink:VkMemoryDedicatedAllocateInfo::pname:buffer
-  * [[VUID-VkMemoryAllocateInfo-image-06381]]
-    If the parameters define an import operation from an
-    slink:VkBufferCollectionFUCHSIA, and
-    slink:VkMemoryDedicatedAllocateInfo::pname:image is present and
-    non-NULL, slink:VkImportMemoryBufferCollectionFUCHSIA::pname:collection
-    and slink:VkImportMemoryBufferCollectionFUCHSIA::pname:index must match
-    slink:VkBufferCollectionImageCreateInfoFUCHSIA::pname:collection and
-    slink:VkBufferCollectionImageCreateInfoFUCHSIA::pname:index,
-    respectively, of the slink:VkBufferCollectionImageCreateInfoFUCHSIA
-    structure used to create the
-    slink:VkMemoryDedicatedAllocateInfo::pname:image
-  * [[VUID-VkMemoryAllocateInfo-allocationSize-06382]]
-    If the parameters define an import operation from an
-    slink:VkBufferCollectionFUCHSIA, pname:allocationSize must: match
-    slink:VkMemoryRequirements::pname:size value retrieved by
-    flink:vkGetImageMemoryRequirements or
-    flink:vkGetBufferMemoryRequirements for image-based or buffer-based
-    collections respectively
-  * [[VUID-VkMemoryAllocateInfo-pNext-06383]]
-    If the parameters define an import operation from an
-    slink:VkBufferCollectionFUCHSIA, the pname:pNext chain must: include a
-    slink:VkMemoryDedicatedAllocateInfo structure with either its
-    pname:image or pname:buffer field set to a value other than
-    dlink:VK_NULL_HANDLE.
-  * [[VUID-VkMemoryAllocateInfo-image-06384]]
-    If the parameters define an import operation from an
-    slink:VkBufferCollectionFUCHSIA and
-    slink:VkMemoryDedicatedAllocateInfo::pname:image is not
-    dlink:VK_NULL_HANDLE, the pname:image must: be created with a
-    slink:VkBufferCollectionImageCreateInfoFUCHSIA structure chained to its
-    slink:VkImageCreateInfo::pname:pNext pointer
-  * [[VUID-VkMemoryAllocateInfo-buffer-06385]]
-    If the parameters define an import operation from an
-    slink:VkBufferCollectionFUCHSIA and
-    slink:VkMemoryDedicatedAllocateInfo::pname:buffer is not
-    dlink:VK_NULL_HANDLE, the pname:buffer must: be created with a
-    slink:VkBufferCollectionBufferCreateInfoFUCHSIA structure chained to its
-    slink:VkBufferCreateInfo::pname:pNext pointer
-  * [[VUID-VkMemoryAllocateInfo-memoryTypeIndex-06386]]
-    If the parameters define an import operation from an
-    slink:VkBufferCollectionFUCHSIA, pname:memoryTypeIndex must: be from
-    slink:VkBufferCollectionPropertiesFUCHSIA as retrieved by
-    flink:vkGetBufferCollectionPropertiesFUCHSIA.
-endif::VK_FUCHSIA_buffer_collection[]
-ifdef::VK_KHR_external_memory[]
-ifdef::VK_KHR_dedicated_allocation,VK_NV_dedicated_allocation[]
-  * [[VUID-VkMemoryAllocateInfo-pNext-00639]]
-    If the pname:pNext chain includes a sname:VkExportMemoryAllocateInfo
-    structure, and any of the handle types specified in
-    sname:VkExportMemoryAllocateInfo::pname:handleTypes require a dedicated
-    allocation, as reported by
-    flink:vkGetPhysicalDeviceImageFormatProperties2 in
-    sname:VkExternalImageFormatProperties::pname:externalMemoryProperties.externalMemoryFeatures
-    or
-    sname:VkExternalBufferProperties::pname:externalMemoryProperties.externalMemoryFeatures,
-    the pname:pNext chain must: include a
-    sname:VkMemoryDedicatedAllocateInfo or
-    sname:VkDedicatedAllocationMemoryAllocateInfoNV structure with either
-    its pname:image or pname:buffer member set to a value other than
-    dlink:VK_NULL_HANDLE
-endif::VK_KHR_dedicated_allocation,VK_NV_dedicated_allocation[]
-endif::VK_KHR_external_memory[]
-ifdef::VK_KHR_external_memory[]
-ifdef::VK_NV_external_memory[]
-  * [[VUID-VkMemoryAllocateInfo-pNext-00640]]
-    If the pname:pNext chain includes a slink:VkExportMemoryAllocateInfo
-    structure, it must: not include a slink:VkExportMemoryAllocateInfoNV or
-    slink:VkExportMemoryWin32HandleInfoNV structure
-endif::VK_NV_external_memory[]
-endif::VK_KHR_external_memory[]
-ifdef::VK_KHR_external_memory_win32+VK_NV_external_memory_win32[]
-  * [[VUID-VkMemoryAllocateInfo-pNext-00641]]
-    If the pname:pNext chain includes a
-    slink:VkImportMemoryWin32HandleInfoKHR structure, it must: not include a
-    slink:VkImportMemoryWin32HandleInfoNV structure
-endif::VK_KHR_external_memory_win32+VK_NV_external_memory_win32[]
-ifdef::VK_KHR_external_memory_fd[]
-  * [[VUID-VkMemoryAllocateInfo-allocationSize-01742]]
-    If the parameters define an import operation, the external handle
-    specified was created by the Vulkan API, and the external handle type is
-    ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_FD_BIT, then the values of
-    pname:allocationSize and pname:memoryTypeIndex must: match those
-    specified when the payload being imported was created
-endif::VK_KHR_external_memory_fd[]
-ifdef::VK_KHR_external_memory+VK_KHR_device_group[]
-  * [[VUID-VkMemoryAllocateInfo-None-00643]]
-    If the parameters define an import operation and the external handle
-    specified was created by the Vulkan API, the device mask specified by
-    slink:VkMemoryAllocateFlagsInfo must: match that specified when the
-    payload being imported was allocated
-  * [[VUID-VkMemoryAllocateInfo-None-00644]]
-    If the parameters define an import operation and the external handle
-    specified was created by the Vulkan API, the list of physical devices
-    that comprise the logical device passed to flink:vkAllocateMemory must:
-    match the list of physical devices that comprise the logical device on
-    which the payload was originally allocated
-endif::VK_KHR_external_memory+VK_KHR_device_group[]
-ifdef::VK_KHR_external_memory_win32[]
-  * [[VUID-VkMemoryAllocateInfo-memoryTypeIndex-00645]]
-    If the parameters define an import operation and the external handle is
-    an NT handle or a global share handle created outside of the Vulkan API,
-    the value of pname:memoryTypeIndex must: be one of those returned by
-    flink:vkGetMemoryWin32HandlePropertiesKHR
-  * [[VUID-VkMemoryAllocateInfo-allocationSize-01743]]
-    If the parameters define an import operation, the external handle was
-    created by the Vulkan API, and the external handle type is
-    ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_BIT or
-    ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT, then the
-    values of pname:allocationSize and pname:memoryTypeIndex must: match
-    those specified when the payload being imported was created
-  * [[VUID-VkMemoryAllocateInfo-allocationSize-00647]]
-    If the parameters define an import operation and the external handle
-    type is ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_HEAP_BIT,
-    pname:allocationSize must: match the size specified when creating the
-    Direct3D 12 heap from which the payload was extracted
-endif::VK_KHR_external_memory_win32[]
-ifdef::VK_KHR_external_memory_fd[]
-  * [[VUID-VkMemoryAllocateInfo-memoryTypeIndex-00648]]
-    If the parameters define an import operation and the external handle is
-    a POSIX file descriptor created outside of the Vulkan API, the value of
-    pname:memoryTypeIndex must: be one of those returned by
-    flink:vkGetMemoryFdPropertiesKHR
-endif::VK_KHR_external_memory_fd[]
-ifdef::VK_VERSION_1_1[]
-  * [[VUID-VkMemoryAllocateInfo-memoryTypeIndex-01872]]
-    If the protected memory feature is not enabled, the
-    sname:VkMemoryAllocateInfo::pname:memoryTypeIndex must: not indicate a
-    memory type that reports ename:VK_MEMORY_PROPERTY_PROTECTED_BIT
-endif::VK_VERSION_1_1[]
-ifdef::VK_EXT_external_memory_host[]
-  * [[VUID-VkMemoryAllocateInfo-memoryTypeIndex-01744]]
-    If the parameters define an import operation and the external handle is
-    a host pointer, the value of pname:memoryTypeIndex must: be one of those
-    returned by flink:vkGetMemoryHostPointerPropertiesEXT
-  * [[VUID-VkMemoryAllocateInfo-allocationSize-01745]]
-    If the parameters define an import operation and the external handle is
-    a host pointer, pname:allocationSize must: be an integer multiple of
-    sname:VkPhysicalDeviceExternalMemoryHostPropertiesEXT::pname:minImportedHostPointerAlignment
-ifdef::VK_NV_dedicated_allocation[]
-  * [[VUID-VkMemoryAllocateInfo-pNext-02805]]
-    If the parameters define an import operation and the external handle is
-    a host pointer, the pname:pNext chain must: not include a
-    slink:VkDedicatedAllocationMemoryAllocateInfoNV structure with either
-    its pname:image or pname:buffer field set to a value other than
-    dlink:VK_NULL_HANDLE
-endif::VK_NV_dedicated_allocation[]
-ifdef::VK_KHR_dedicated_allocation[]
-  * [[VUID-VkMemoryAllocateInfo-pNext-02806]]
-    If the parameters define an import operation and the external handle is
-    a host pointer, the pname:pNext chain must: not include a
-    slink:VkMemoryDedicatedAllocateInfo structure with either its
-    pname:image or pname:buffer field set to a value other than
-    dlink:VK_NULL_HANDLE
-endif::VK_KHR_dedicated_allocation[]
-endif::VK_EXT_external_memory_host[]
-ifdef::VK_ANDROID_external_memory_android_hardware_buffer[]
-  * [[VUID-VkMemoryAllocateInfo-allocationSize-02383]]
-    If the parameters define an import operation and the external handle
-    type is
-    ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_ANDROID_HARDWARE_BUFFER_BIT_ANDROID,
-    pname:allocationSize must: be the size returned by
-    flink:vkGetAndroidHardwareBufferPropertiesANDROID for the Android
-    hardware buffer
-  * [[VUID-VkMemoryAllocateInfo-pNext-02384]]
-    If the parameters define an import operation and the external handle
-    type is
-    ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_ANDROID_HARDWARE_BUFFER_BIT_ANDROID,
-    and the pname:pNext chain does not include a
-    slink:VkMemoryDedicatedAllocateInfo structure or
-    slink:VkMemoryDedicatedAllocateInfo::pname:image is
-    dlink:VK_NULL_HANDLE, the Android hardware buffer must: have a
-    code:AHardwareBuffer_Desc::code:format of
-    code:AHARDWAREBUFFER_FORMAT_BLOB and a
-    code:AHardwareBuffer_Desc::code:usage that includes
-    code:AHARDWAREBUFFER_USAGE_GPU_DATA_BUFFER
-  * [[VUID-VkMemoryAllocateInfo-memoryTypeIndex-02385]]
-    If the parameters define an import operation and the external handle
-    type is
-    ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_ANDROID_HARDWARE_BUFFER_BIT_ANDROID,
-    pname:memoryTypeIndex must: be one of those returned by
-    flink:vkGetAndroidHardwareBufferPropertiesANDROID for the Android
-    hardware buffer
-  * [[VUID-VkMemoryAllocateInfo-pNext-01874]]
-    If the parameters do not define an import operation, and the pname:pNext
-    chain includes a sname:VkExportMemoryAllocateInfo structure with
-    ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_ANDROID_HARDWARE_BUFFER_BIT_ANDROID
-    included in its pname:handleTypes member, and the pname:pNext chain
-    includes a slink:VkMemoryDedicatedAllocateInfo structure with
-    pname:image not equal to dlink:VK_NULL_HANDLE, then pname:allocationSize
-    must: be `0`, otherwise pname:allocationSize must: be greater than `0`
-  * [[VUID-VkMemoryAllocateInfo-pNext-02386]]
-    If the parameters define an import operation, the external handle is an
-    Android hardware buffer, and the pname:pNext chain includes a
-    slink:VkMemoryDedicatedAllocateInfo with pname:image that is not
-    dlink:VK_NULL_HANDLE, the Android hardware buffer's
-    basetype:AHardwareBuffer::code:usage must: include at least one of
-    code:AHARDWAREBUFFER_USAGE_GPU_FRAMEBUFFER or
-    code:AHARDWAREBUFFER_USAGE_GPU_SAMPLED_IMAGE
-  * [[VUID-VkMemoryAllocateInfo-pNext-02387]]
-    If the parameters define an import operation, the external handle is an
-    Android hardware buffer, and the pname:pNext chain includes a
-    slink:VkMemoryDedicatedAllocateInfo with pname:image that is not
-    dlink:VK_NULL_HANDLE, the format of pname:image must: be
-    ename:VK_FORMAT_UNDEFINED or the format returned by
-    flink:vkGetAndroidHardwareBufferPropertiesANDROID in
-    slink:VkAndroidHardwareBufferFormatPropertiesANDROID::pname:format for
-    the Android hardware buffer
-  * [[VUID-VkMemoryAllocateInfo-pNext-02388]]
-    If the parameters define an import operation, the external handle is an
-    Android hardware buffer, and the pname:pNext chain includes a
-    slink:VkMemoryDedicatedAllocateInfo structure with pname:image that is
-    not dlink:VK_NULL_HANDLE, the width, height, and array layer dimensions
-    of pname:image and the Android hardware buffer's
-    code:AHardwareBuffer_Desc must: be identical
-  * [[VUID-VkMemoryAllocateInfo-pNext-02389]]
-    If the parameters define an import operation, the external handle is an
-    Android hardware buffer, and the pname:pNext chain includes a
-    slink:VkMemoryDedicatedAllocateInfo structure with pname:image that is
-    not dlink:VK_NULL_HANDLE, and the Android hardware buffer's
-    basetype:AHardwareBuffer::code:usage includes
-    code:AHARDWAREBUFFER_USAGE_GPU_MIPMAP_COMPLETE, the pname:image must:
-    have a complete mipmap chain
-  * [[VUID-VkMemoryAllocateInfo-pNext-02586]]
-    If the parameters define an import operation, the external handle is an
-    Android hardware buffer, and the pname:pNext chain includes a
-    slink:VkMemoryDedicatedAllocateInfo structure with pname:image that is
-    not dlink:VK_NULL_HANDLE, and the Android hardware buffer's
-    basetype:AHardwareBuffer::code:usage does not include
-    code:AHARDWAREBUFFER_USAGE_GPU_MIPMAP_COMPLETE, the pname:image must:
-    have exactly one mipmap level
-  * [[VUID-VkMemoryAllocateInfo-pNext-02390]]
-    If the parameters define an import operation, the external handle is an
-    Android hardware buffer, and the pname:pNext chain includes a
-    slink:VkMemoryDedicatedAllocateInfo structure with pname:image that is
-    not dlink:VK_NULL_HANDLE, each bit set in the usage of pname:image must:
-    be listed in
-    <<memory-external-android-hardware-buffer-usage,AHardwareBuffer Usage
-    Equivalence>>, and if there is a corresponding
-    code:AHARDWAREBUFFER_USAGE bit listed that bit must: be included in the
-    Android hardware buffer's code:AHardwareBuffer_Desc::code:usage
-endif::VK_ANDROID_external_memory_android_hardware_buffer[]
-ifdef::VK_VERSION_1_2,VK_KHR_buffer_device_address[]
-  * [[VUID-VkMemoryAllocateInfo-opaqueCaptureAddress-03329]]
-    If
-    slink:VkMemoryOpaqueCaptureAddressAllocateInfo::pname:opaqueCaptureAddress
-    is not zero, sname:VkMemoryAllocateFlagsInfo::pname:flags must: include
-    ename:VK_MEMORY_ALLOCATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT
-  * [[VUID-VkMemoryAllocateInfo-flags-03330]]
-    If sname:VkMemoryAllocateFlagsInfo::pname:flags includes
-    ename:VK_MEMORY_ALLOCATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT, the
-    <<features-bufferDeviceAddressCaptureReplay,bufferDeviceAddressCaptureReplay>>
-    feature must: be enabled
-  * [[VUID-VkMemoryAllocateInfo-flags-03331]]
-    If sname:VkMemoryAllocateFlagsInfo::pname:flags includes
-    ename:VK_MEMORY_ALLOCATE_DEVICE_ADDRESS_BIT, the
-    <<features-bufferDeviceAddress,bufferDeviceAddress>> feature must: be
-    enabled
-ifdef::VK_EXT_external_memory_host[]
-  * [[VUID-VkMemoryAllocateInfo-pNext-03332]]
-    If the pname:pNext chain includes a
-    sname:VkImportMemoryHostPointerInfoEXT structure,
-    slink:VkMemoryOpaqueCaptureAddressAllocateInfo::pname:opaqueCaptureAddress
-    must: be zero
-endif::VK_EXT_external_memory_host[]
-  * [[VUID-VkMemoryAllocateInfo-opaqueCaptureAddress-03333]]
-    If the parameters define an import operation,
-    slink:VkMemoryOpaqueCaptureAddressAllocateInfo::pname:opaqueCaptureAddress
-    must: be zero
-endif::VK_VERSION_1_2,VK_KHR_buffer_device_address[]
-ifdef::VK_FUCHSIA_external_memory[]
-  * [[VUID-VkMemoryAllocateInfo-None-04749]]
-    If the parameters define an import operation and the external handle
-    type is ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_ZIRCON_VMO_BIT_FUCHSIA, the
-    value of sname:memoryTypeIndex must: be an index identifying a memory
-    type from the sname:memoryTypeBits field of the
-    slink:VkMemoryZirconHandlePropertiesFUCHSIA structure populated by a
-    call to flink:vkGetMemoryZirconHandlePropertiesFUCHSIA
-  * [[VUID-VkMemoryAllocateInfo-allocationSize-04750]]
-    If the parameters define an import operation and the external handle
-    type is ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_ZIRCON_VMO_BIT_FUCHSIA, the
-    value of pname:allocationSize must: be greater than `0` and must: be
-    less than or equal to the size of the VMO as determined by
-    code:zx_vmo_get_size(pname:handle) where pname:handle is the VMO handle
-    to the imported external memory
-endif::VK_FUCHSIA_external_memory[]
-****
-
-include::{generated}/validity/structs/VkMemoryAllocateInfo.txt[]
---
-
-ifdef::VK_VERSION_1_1,VK_KHR_dedicated_allocation[]
-[open,refpage='VkMemoryDedicatedAllocateInfo',desc='Specify a dedicated memory allocation resource',type='structs']
---
-If the pname:pNext chain includes a sname:VkMemoryDedicatedAllocateInfo
-structure, then that structure includes a handle of the sole buffer or image
-resource that the memory can: be bound to.
-
-The sname:VkMemoryDedicatedAllocateInfo structure is defined as:
-
-include::{generated}/api/structs/VkMemoryDedicatedAllocateInfo.txt[]
-
-ifdef::VK_KHR_dedicated_allocation[]
-or the equivalent
-
-include::{generated}/api/structs/VkMemoryDedicatedAllocateInfoKHR.txt[]
-endif::VK_KHR_dedicated_allocation[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:image is dlink:VK_NULL_HANDLE or a handle of an image which this
-    memory will be bound to.
-  * pname:buffer is dlink:VK_NULL_HANDLE or a handle of a buffer which this
-    memory will be bound to.
-
-.Valid Usage
-****
-  * [[VUID-VkMemoryDedicatedAllocateInfo-image-01432]]
-    At least one of pname:image and pname:buffer must: be
-    dlink:VK_NULL_HANDLE
-ifndef::VK_ANDROID_external_memory_android_hardware_buffer[]
-  * [[VUID-VkMemoryDedicatedAllocateInfo-image-01433]]
-    If pname:image is not dlink:VK_NULL_HANDLE,
-    sname:VkMemoryAllocateInfo::pname:allocationSize must: equal the
-    sname:VkMemoryRequirements::pname:size of the image
-endif::VK_ANDROID_external_memory_android_hardware_buffer[]
-ifdef::VK_ANDROID_external_memory_android_hardware_buffer[]
-  * [[VUID-VkMemoryDedicatedAllocateInfo-image-02964]]
-    If pname:image is not dlink:VK_NULL_HANDLE and the memory is not an
-    imported Android Hardware Buffer,
-    sname:VkMemoryAllocateInfo::pname:allocationSize must: equal the
-    sname:VkMemoryRequirements::pname:size of the image
-endif::VK_ANDROID_external_memory_android_hardware_buffer[]
-  * [[VUID-VkMemoryDedicatedAllocateInfo-image-01434]]
-    If pname:image is not dlink:VK_NULL_HANDLE, pname:image must: have been
-    created without ename:VK_IMAGE_CREATE_SPARSE_BINDING_BIT set in
-    slink:VkImageCreateInfo::pname:flags
-ifndef::VK_ANDROID_external_memory_android_hardware_buffer[]
-  * [[VUID-VkMemoryDedicatedAllocateInfo-buffer-01435]]
-    If pname:buffer is not dlink:VK_NULL_HANDLE,
-    sname:VkMemoryAllocateInfo::pname:allocationSize must: equal the
-    sname:VkMemoryRequirements::pname:size of the buffer
-endif::VK_ANDROID_external_memory_android_hardware_buffer[]
-ifdef::VK_ANDROID_external_memory_android_hardware_buffer[]
-  * [[VUID-VkMemoryDedicatedAllocateInfo-buffer-02965]]
-    If pname:buffer is not dlink:VK_NULL_HANDLE and the memory is not an
-    imported Android Hardware Buffer,
-    sname:VkMemoryAllocateInfo::pname:allocationSize must: equal the
-    sname:VkMemoryRequirements::pname:size of the buffer
-endif::VK_ANDROID_external_memory_android_hardware_buffer[]
-  * [[VUID-VkMemoryDedicatedAllocateInfo-buffer-01436]]
-    If pname:buffer is not dlink:VK_NULL_HANDLE, pname:buffer must: have
-    been created without ename:VK_BUFFER_CREATE_SPARSE_BINDING_BIT set in
-    slink:VkBufferCreateInfo::pname:flags
-ifdef::VK_KHR_external_memory_win32[]
-  * [[VUID-VkMemoryDedicatedAllocateInfo-image-01876]]
-    If pname:image is not dlink:VK_NULL_HANDLE and
-    slink:VkMemoryAllocateInfo defines a memory import operation with handle
-    type ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_BIT,
-    ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT,
-    ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_BIT,
-    ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_KMT_BIT,
-    ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_HEAP_BIT, or
-    ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_RESOURCE_BIT, and the
-    external handle was created by the Vulkan API, then the memory being
-    imported must: also be a dedicated image allocation and pname:image must
-    be identical to the image associated with the imported memory
-  * [[VUID-VkMemoryDedicatedAllocateInfo-buffer-01877]]
-    If pname:buffer is not dlink:VK_NULL_HANDLE and
-    slink:VkMemoryAllocateInfo defines a memory import operation with handle
-    type ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_BIT,
-    ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT,
-    ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_BIT,
-    ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_KMT_BIT,
-    ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_HEAP_BIT, or
-    ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_RESOURCE_BIT, and the
-    external handle was created by the Vulkan API, then the memory being
-    imported must: also be a dedicated buffer allocation and pname:buffer
-    must: be identical to the buffer associated with the imported memory
-endif::VK_KHR_external_memory_win32[]
-ifdef::VK_KHR_external_memory_fd[]
-  * [[VUID-VkMemoryDedicatedAllocateInfo-image-01878]]
-    If pname:image is not dlink:VK_NULL_HANDLE and
-    slink:VkMemoryAllocateInfo defines a memory import operation with handle
-    type ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_FD_BIT, the memory
-    being imported must: also be a dedicated image allocation and
-    pname:image must: be identical to the image associated with the imported
-    memory
-  * [[VUID-VkMemoryDedicatedAllocateInfo-buffer-01879]]
-    If pname:buffer is not dlink:VK_NULL_HANDLE and
-    slink:VkMemoryAllocateInfo defines a memory import operation with handle
-    type ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_FD_BIT, the memory
-    being imported must: also be a dedicated buffer allocation and
-    pname:buffer must: be identical to the buffer associated with the
-    imported memory
-endif::VK_KHR_external_memory_fd[]
-ifdef::VK_KHR_sampler_ycbcr_conversion[]
-  * [[VUID-VkMemoryDedicatedAllocateInfo-image-01797]]
-    If pname:image is not dlink:VK_NULL_HANDLE, pname:image must: not have
-    been created with ename:VK_IMAGE_CREATE_DISJOINT_BIT set in
-    slink:VkImageCreateInfo::pname:flags
-endif::VK_KHR_sampler_ycbcr_conversion[]
-ifdef::VK_FUCHSIA_external_memory[]
-  * [[VUID-VkMemoryDedicatedAllocateInfo-image-04751]]
-    If pname:image is not dlink:VK_NULL_HANDLE and
-    slink:VkMemoryAllocateInfo defines a memory import operation with handle
-    type ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_ZIRCON_VMO_BIT_FUCHSIA, the
-    memory being imported must: also be a dedicated image allocation and
-    pname:image must: be identical to the image associated with the imported
-    memory
-  * [[VUID-VkMemoryDedicatedAllocateInfo-buffer-04752]]
-    If pname:buffer is not dlink:VK_NULL_HANDLE and
-    slink:VkMemoryAllocateInfo defines a memory import operation with handle
-    type ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_ZIRCON_VMO_BIT_FUCHSIA, the
-    memory being imported must: also be a dedicated buffer allocation and
-    pname:buffer must: be identical to the buffer associated with the
-    imported memory
-endif::VK_FUCHSIA_external_memory[]
-****
-
-include::{generated}/validity/structs/VkMemoryDedicatedAllocateInfo.txt[]
---
-endif::VK_VERSION_1_1,VK_KHR_dedicated_allocation[]
-
-ifdef::VK_NV_dedicated_allocation[]
-[open,refpage='VkDedicatedAllocationMemoryAllocateInfoNV',desc='Specify a dedicated memory allocation resource',type='structs']
---
-If the pname:pNext chain includes a
-sname:VkDedicatedAllocationMemoryAllocateInfoNV structure, then that
-structure includes a handle of the sole buffer or image resource that the
-memory can: be bound to.
-
-The sname:VkDedicatedAllocationMemoryAllocateInfoNV structure is defined as:
-
-include::{generated}/api/structs/VkDedicatedAllocationMemoryAllocateInfoNV.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:image is dlink:VK_NULL_HANDLE or a handle of an image which this
-    memory will be bound to.
-  * pname:buffer is dlink:VK_NULL_HANDLE or a handle of a buffer which this
-    memory will be bound to.
-
-.Valid Usage
-****
-  * [[VUID-VkDedicatedAllocationMemoryAllocateInfoNV-image-00649]]
-    At least one of pname:image and pname:buffer must: be
-    dlink:VK_NULL_HANDLE
-  * [[VUID-VkDedicatedAllocationMemoryAllocateInfoNV-image-00650]]
-    If pname:image is not dlink:VK_NULL_HANDLE, the image must: have been
-    created with
-    slink:VkDedicatedAllocationImageCreateInfoNV::pname:dedicatedAllocation
-    equal to ename:VK_TRUE
-  * [[VUID-VkDedicatedAllocationMemoryAllocateInfoNV-buffer-00651]]
-    If pname:buffer is not dlink:VK_NULL_HANDLE, the buffer must: have been
-    created with
-    slink:VkDedicatedAllocationBufferCreateInfoNV::pname:dedicatedAllocation
-    equal to ename:VK_TRUE
-  * [[VUID-VkDedicatedAllocationMemoryAllocateInfoNV-image-00652]]
-    If pname:image is not dlink:VK_NULL_HANDLE,
-    sname:VkMemoryAllocateInfo::pname:allocationSize must: equal the
-    sname:VkMemoryRequirements::pname:size of the image
-  * [[VUID-VkDedicatedAllocationMemoryAllocateInfoNV-buffer-00653]]
-    If pname:buffer is not dlink:VK_NULL_HANDLE,
-    sname:VkMemoryAllocateInfo::pname:allocationSize must: equal the
-    sname:VkMemoryRequirements::pname:size of the buffer
-ifdef::VK_KHR_external_memory_win32,VK_KHR_external_memory_fd[]
-  * [[VUID-VkDedicatedAllocationMemoryAllocateInfoNV-image-00654]]
-    If pname:image is not dlink:VK_NULL_HANDLE and
-    slink:VkMemoryAllocateInfo defines a memory import operation, the memory
-    being imported must: also be a dedicated image allocation and
-    pname:image must: be identical to the image associated with the imported
-    memory
-  * [[VUID-VkDedicatedAllocationMemoryAllocateInfoNV-buffer-00655]]
-    If pname:buffer is not dlink:VK_NULL_HANDLE and
-    slink:VkMemoryAllocateInfo defines a memory import operation, the memory
-    being imported must: also be a dedicated buffer allocation and
-    pname:buffer must: be identical to the buffer associated with the
-    imported memory
-endif::VK_KHR_external_memory_win32,VK_KHR_external_memory_fd[]
-****
-
-include::{generated}/validity/structs/VkDedicatedAllocationMemoryAllocateInfoNV.txt[]
---
-endif::VK_NV_dedicated_allocation[]
-
-ifdef::VK_EXT_memory_priority[]
-[open,refpage='VkMemoryPriorityAllocateInfoEXT',desc='Specify a memory allocation priority',type='structs']
---
-If the pname:pNext chain includes a sname:VkMemoryPriorityAllocateInfoEXT
-structure, then that structure includes a priority for the memory.
-
-The sname:VkMemoryPriorityAllocateInfoEXT structure is defined as:
-
-include::{generated}/api/structs/VkMemoryPriorityAllocateInfoEXT.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:priority is a floating-point value between `0` and `1`, indicating
-    the priority of the allocation relative to other memory allocations.
-    Larger values are higher priority.
-    The granularity of the priorities is implementation-dependent.
-
-Memory allocations with higher priority may: be more likely to stay in
-device-local memory when the system is under memory pressure.
-
-If this structure is not included, it is as if the pname:priority value were
-`0.5`.
-
-.Valid Usage
-****
-  * [[VUID-VkMemoryPriorityAllocateInfoEXT-priority-02602]]
-    pname:priority must: be between `0` and `1`, inclusive
-****
-
-include::{generated}/validity/structs/VkMemoryPriorityAllocateInfoEXT.txt[]
---
-endif::VK_EXT_memory_priority[]
-
-ifdef::VK_EXT_pageable_device_local_memory[]
-[open,refpage='vkSetDeviceMemoryPriorityEXT',desc='Change a memory allocation priority',type='protos']
---
-
-To modify the priority of an existing memory allocation, call:
-
-include::{generated}/api/protos/vkSetDeviceMemoryPriorityEXT.txt[]
-
-  * pname:device is the logical device that owns the memory.
-  * pname:memory is the slink:VkDeviceMemory object to which the new
-    priority will be applied.
-  * pname:priority is a floating-point value between `0` and `1`, indicating
-    the priority of the allocation relative to other memory allocations.
-    Larger values are higher priority.
-    The granularity of the priorities is implementation-dependent.
-
-Memory allocations with higher priority may: be more likely to stay in
-device-local memory when the system is under memory pressure.
-
-.Valid Usage
-****
-  * [[VUID-vkSetDeviceMemoryPriorityEXT-priority-06258]]
-    pname:priority must: be between `0` and `1`, inclusive
-****
-
-include::{generated}/validity/protos/vkSetDeviceMemoryPriorityEXT.txt[]
---
-endif::VK_EXT_pageable_device_local_memory[]
-
-ifdef::VK_VERSION_1_1,VK_KHR_external_memory[]
-[open,refpage='VkExportMemoryAllocateInfo',desc='Specify exportable handle types for a device memory object',type='structs']
---
-When allocating memory whose payload may: be exported to another process or
-Vulkan instance, add a slink:VkExportMemoryAllocateInfo structure to the
-pname:pNext chain of the slink:VkMemoryAllocateInfo structure, specifying
-the handle types that may: be exported.
-
-The slink:VkExportMemoryAllocateInfo structure is defined as:
-
-include::{generated}/api/structs/VkExportMemoryAllocateInfo.txt[]
-
-ifdef::VK_KHR_external_memory[]
-or the equivalent
-
-include::{generated}/api/structs/VkExportMemoryAllocateInfoKHR.txt[]
-endif::VK_KHR_external_memory[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:handleTypes is a bitmask of
-    elink:VkExternalMemoryHandleTypeFlagBits specifying one or more memory
-    handle types the application can: export from the resulting allocation.
-    The application can: request multiple handle types for the same
-    allocation.
-
-.Valid Usage
-****
-  * [[VUID-VkExportMemoryAllocateInfo-handleTypes-00656]]
-    The bits in pname:handleTypes must: be supported and compatible, as
-    reported by slink:VkExternalImageFormatProperties or
-    slink:VkExternalBufferProperties
-****
-
-include::{generated}/validity/structs/VkExportMemoryAllocateInfo.txt[]
---
-endif::VK_VERSION_1_1,VK_KHR_external_memory[]
-
-ifdef::VK_NV_external_memory[]
-include::VK_NV_external_memory/allocate_memory.txt[]
-endif::VK_NV_external_memory[]
-
-ifdef::VK_KHR_external_memory_win32,VK_NV_external_memory_win32[]
-=== Win32 External Memory
-endif::VK_KHR_external_memory_win32,VK_NV_external_memory_win32[]
-
-ifdef::VK_KHR_external_memory_win32[]
-[open,refpage='VkExportMemoryWin32HandleInfoKHR',desc='Structure specifying additional attributes of Windows handles exported from a memory',type='structs']
---
-To specify additional attributes of NT handles exported from a memory
-object, add a slink:VkExportMemoryWin32HandleInfoKHR structure to the
-pname:pNext chain of the slink:VkMemoryAllocateInfo structure.
-The sname:VkExportMemoryWin32HandleInfoKHR structure is defined as:
-
-include::{generated}/api/structs/VkExportMemoryWin32HandleInfoKHR.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:pAttributes is a pointer to a Windows code:SECURITY_ATTRIBUTES
-    structure specifying security attributes of the handle.
-  * pname:dwAccess is a code:DWORD specifying access rights of the handle.
-  * pname:name is a null-terminated UTF-16 string to associate with the
-    payload referenced by NT handles exported from the created memory.
-
-If slink:VkExportMemoryAllocateInfo is not included in the same pname:pNext
-chain, this structure is ignored.
-
-If slink:VkExportMemoryAllocateInfo is included in the pname:pNext chain of
-slink:VkMemoryAllocateInfo with a Windows pname:handleType, but either
-sname:VkExportMemoryWin32HandleInfoKHR is not included in the pname:pNext
-chain, or if it is but pname:pAttributes is set to `NULL`, default security
-descriptor values will be used, and child processes created by the
-application will not inherit the handle, as described in the MSDN
-documentation for "`Synchronization Object Security and Access Rights`"^1^.
-Further, if the structure is not present, the access rights used depend on
-the handle type.
-
-For handles of the following types:
-
-  * ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_BIT
-
-The implementation must: ensure the access rights allow read and write
-access to the memory.
-
-1::
-    https://docs.microsoft.com/en-us/windows/win32/sync/synchronization-object-security-and-access-rights
-
-.Valid Usage
-****
-  * [[VUID-VkExportMemoryWin32HandleInfoKHR-handleTypes-00657]]
-    If slink:VkExportMemoryAllocateInfo::pname:handleTypes does not include
-    ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_BIT, a
-    sname:VkExportMemoryWin32HandleInfoKHR structure must: not be included
-    in the pname:pNext chain of slink:VkMemoryAllocateInfo
-****
-
-include::{generated}/validity/structs/VkExportMemoryWin32HandleInfoKHR.txt[]
---
-
-[open,refpage='VkImportMemoryWin32HandleInfoKHR',desc='Import Win32 memory created on the same physical device',type='structs']
---
-To import memory from a Windows handle, add a
-slink:VkImportMemoryWin32HandleInfoKHR structure to the pname:pNext chain of
-the slink:VkMemoryAllocateInfo structure.
-
-The sname:VkImportMemoryWin32HandleInfoKHR structure is defined as:
-
-include::{generated}/api/structs/VkImportMemoryWin32HandleInfoKHR.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:handleType is a elink:VkExternalMemoryHandleTypeFlagBits value
-    specifying the type of pname:handle or pname:name.
-  * pname:handle is `NULL` or the external handle to import.
-  * pname:name is `NULL` or a null-terminated UTF-16 string naming the
-    payload to import.
-
-Importing memory object payloads from Windows handles does not transfer
-ownership of the handle to the Vulkan implementation.
-For handle types defined as NT handles, the application must: release handle
-ownership using the code:CloseHandle system call when the handle is no
-longer needed.
-For handle types defined as NT handles, the imported memory object holds a
-reference to its payload.
-
-[NOTE]
-.Note
-====
-Non-NT handle import operations do not add a reference to their associated
-payload.
-If the original object owning the payload is destroyed, all resources and
-handles sharing that payload will become invalid.
-====
-
-Applications can: import the same payload into multiple instances of Vulkan,
-into the same instance from which it was exported, and multiple times into a
-given Vulkan instance.
-In all cases, each import operation must: create a distinct
-sname:VkDeviceMemory object.
-
-.Valid Usage
-****
-  * [[VUID-VkImportMemoryWin32HandleInfoKHR-handleType-00658]]
-    If pname:handleType is not `0`, it must: be supported for import, as
-    reported by slink:VkExternalImageFormatProperties or
-    slink:VkExternalBufferProperties
-  * [[VUID-VkImportMemoryWin32HandleInfoKHR-handle-00659]]
-    The memory from which pname:handle was exported, or the memory named by
-    pname:name must: have been created on the same underlying physical
-    device as pname:device
-  * [[VUID-VkImportMemoryWin32HandleInfoKHR-handleType-00660]]
-    If pname:handleType is not `0`, it must: be defined as an NT handle or a
-    global share handle
-  * [[VUID-VkImportMemoryWin32HandleInfoKHR-handleType-01439]]
-    If pname:handleType is not
-    ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_BIT,
-    ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_BIT,
-    ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_HEAP_BIT, or
-    ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_RESOURCE_BIT, pname:name
-    must: be `NULL`
-  * [[VUID-VkImportMemoryWin32HandleInfoKHR-handleType-01440]]
-    If pname:handleType is not `0` and pname:handle is `NULL`, pname:name
-    must: name a valid memory resource of the type specified by
-    pname:handleType
-  * [[VUID-VkImportMemoryWin32HandleInfoKHR-handleType-00661]]
-    If pname:handleType is not `0` and pname:name is `NULL`, pname:handle
-    must: be a valid handle of the type specified by pname:handleType
-  * [[VUID-VkImportMemoryWin32HandleInfoKHR-handle-01441]]
-    if pname:handle is not `NULL`, pname:name must: be `NULL`
-  * [[VUID-VkImportMemoryWin32HandleInfoKHR-handle-01518]]
-    If pname:handle is not `NULL`, it must: obey any requirements listed for
-    pname:handleType in
-    <<external-memory-handle-types-compatibility,external memory handle
-    types compatibility>>
-  * [[VUID-VkImportMemoryWin32HandleInfoKHR-name-01519]]
-    If pname:name is not `NULL`, it must: obey any requirements listed for
-    pname:handleType in
-    <<external-memory-handle-types-compatibility,external memory handle
-    types compatibility>>
-****
-
-include::{generated}/validity/structs/VkImportMemoryWin32HandleInfoKHR.txt[]
---
-
-[open,refpage='vkGetMemoryWin32HandleKHR',desc='Get a Windows HANDLE for a memory object',type='protos']
---
-To export a Windows handle representing the payload of a Vulkan device
-memory object, call:
-
-include::{generated}/api/protos/vkGetMemoryWin32HandleKHR.txt[]
-
-  * pname:device is the logical device that created the device memory being
-    exported.
-  * pname:pGetWin32HandleInfo is a pointer to a
-    slink:VkMemoryGetWin32HandleInfoKHR structure containing parameters of
-    the export operation.
-  * pname:pHandle will return the Windows handle representing the payload of
-    the device memory object.
-
-For handle types defined as NT handles, the handles returned by
-fname:vkGetMemoryWin32HandleKHR are owned by the application and hold a
-reference to their payload.
-To avoid leaking resources, the application must: release ownership of them
-using the code:CloseHandle system call when they are no longer needed.
-
-[NOTE]
-.Note
-====
-Non-NT handle types do not add a reference to their associated payload.
-If the original object owning the payload is destroyed, all resources and
-handles sharing that payload will become invalid.
-====
-
-include::{generated}/validity/protos/vkGetMemoryWin32HandleKHR.txt[]
---
-
-[open,refpage='VkMemoryGetWin32HandleInfoKHR',desc='Structure describing a Win32 handle semaphore export operation',type='structs']
---
-The sname:VkMemoryGetWin32HandleInfoKHR structure is defined as:
-
-include::{generated}/api/structs/VkMemoryGetWin32HandleInfoKHR.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:memory is the memory object from which the handle will be
-    exported.
-  * pname:handleType is a elink:VkExternalMemoryHandleTypeFlagBits value
-    specifying the type of handle requested.
-
-The properties of the handle returned depend on the value of
-pname:handleType.
-See elink:VkExternalMemoryHandleTypeFlagBits for a description of the
-properties of the defined external memory handle types.
-
-.Valid Usage
-****
-  * [[VUID-VkMemoryGetWin32HandleInfoKHR-handleType-00662]]
-    pname:handleType must: have been included in
-    slink:VkExportMemoryAllocateInfo::pname:handleTypes when pname:memory
-    was created
-  * [[VUID-VkMemoryGetWin32HandleInfoKHR-handleType-00663]]
-    If pname:handleType is defined as an NT handle,
-    flink:vkGetMemoryWin32HandleKHR must: be called no more than once for
-    each valid unique combination of pname:memory and pname:handleType
-  * [[VUID-VkMemoryGetWin32HandleInfoKHR-handleType-00664]]
-    pname:handleType must: be defined as an NT handle or a global share
-    handle
-****
-
-include::{generated}/validity/structs/VkMemoryGetWin32HandleInfoKHR.txt[]
---
-
-[open,refpage='vkGetMemoryWin32HandlePropertiesKHR',desc='Get Properties of External Memory Win32 Handles',type='protos']
---
-Windows memory handles compatible with Vulkan may: also be created by
-non-Vulkan APIs using methods beyond the scope of this specification.
-To determine the correct parameters to use when importing such handles,
-call:
-
-include::{generated}/api/protos/vkGetMemoryWin32HandlePropertiesKHR.txt[]
-
-  * pname:device is the logical device that will be importing pname:handle.
-  * pname:handleType is a elink:VkExternalMemoryHandleTypeFlagBits value
-    specifying the type of the handle pname:handle.
-  * pname:handle is the handle which will be imported.
-  * pname:pMemoryWin32HandleProperties is a pointer to a
-    slink:VkMemoryWin32HandlePropertiesKHR structure in which properties of
-    pname:handle are returned.
-
-.Valid Usage
-****
-  * [[VUID-vkGetMemoryWin32HandlePropertiesKHR-handle-00665]]
-    pname:handle must: be an external memory handle created outside of the
-    Vulkan API
-  * [[VUID-vkGetMemoryWin32HandlePropertiesKHR-handleType-00666]]
-    pname:handleType must: not be one of the handle types defined as opaque
-****
-
-include::{generated}/validity/protos/vkGetMemoryWin32HandlePropertiesKHR.txt[]
---
-
-[open,refpage='VkMemoryWin32HandlePropertiesKHR',desc='Properties of External Memory Windows Handles',type='structs']
---
-The sname:VkMemoryWin32HandlePropertiesKHR structure returned is defined as:
-
-include::{generated}/api/structs/VkMemoryWin32HandlePropertiesKHR.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:memoryTypeBits is a bitmask containing one bit set for every
-    memory type which the specified windows handle can: be imported as.
-
-include::{generated}/validity/structs/VkMemoryWin32HandlePropertiesKHR.txt[]
---
-endif::VK_KHR_external_memory_win32[]
-
-ifdef::VK_NV_external_memory_win32[]
-include::VK_NV_external_memory_win32/handle_permissions.txt[]
-
-include::VK_NV_external_memory_win32/import_memory_win32.txt[]
-
-include::VK_NV_external_memory_win32/get_handle_win32.txt[]
-endif::VK_NV_external_memory_win32[]
-
-ifdef::VK_KHR_external_memory_fd[]
-=== File Descriptor External Memory
-
-[open,refpage='VkImportMemoryFdInfoKHR',desc='Import memory created on the same physical device from a file descriptor',type='structs']
---
-To import memory from a POSIX file descriptor handle, add a
-slink:VkImportMemoryFdInfoKHR structure to the pname:pNext chain of the
-slink:VkMemoryAllocateInfo structure.
-The sname:VkImportMemoryFdInfoKHR structure is defined as:
-
-include::{generated}/api/structs/VkImportMemoryFdInfoKHR.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:handleType is a elink:VkExternalMemoryHandleTypeFlagBits value
-    specifying the handle type of pname:fd.
-  * pname:fd is the external handle to import.
-
-Importing memory from a file descriptor transfers ownership of the file
-descriptor from the application to the Vulkan implementation.
-The application must: not perform any operations on the file descriptor
-after a successful import.
-The imported memory object holds a reference to its payload.
-
-Applications can: import the same payload into multiple instances of Vulkan,
-into the same instance from which it was exported, and multiple times into a
-given Vulkan instance.
-In all cases, each import operation must: create a distinct
-sname:VkDeviceMemory object.
-
-.Valid Usage
-****
-  * [[VUID-VkImportMemoryFdInfoKHR-handleType-00667]]
-    If pname:handleType is not `0`, it must: be supported for import, as
-    reported by slink:VkExternalImageFormatProperties or
-    slink:VkExternalBufferProperties
-  * [[VUID-VkImportMemoryFdInfoKHR-fd-00668]]
-    The memory from which pname:fd was exported must: have been created on
-    the same underlying physical device as pname:device
-  * [[VUID-VkImportMemoryFdInfoKHR-handleType-00669]]
-    If pname:handleType is not `0`, it must: be
-    ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_FD_BIT or
-    ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_DMA_BUF_BIT_EXT
-  * [[VUID-VkImportMemoryFdInfoKHR-handleType-00670]]
-    If pname:handleType is not `0`, pname:fd must: be a valid handle of the
-    type specified by pname:handleType
-  * [[VUID-VkImportMemoryFdInfoKHR-fd-01746]]
-    The memory represented by pname:fd must: have been created from a
-    physical device and driver that is compatible with pname:device and
-    pname:handleType, as described in
-    <<external-memory-handle-types-compatibility>>
-  * [[VUID-VkImportMemoryFdInfoKHR-fd-01520]]
-    pname:fd must: obey any requirements listed for pname:handleType in
-    <<external-memory-handle-types-compatibility,external memory handle
-    types compatibility>>
-****
-
-include::{generated}/validity/structs/VkImportMemoryFdInfoKHR.txt[]
---
-
-[open,refpage='vkGetMemoryFdKHR',desc='Get a POSIX file descriptor for a memory object',type='protos']
---
-To export a POSIX file descriptor referencing the payload of a Vulkan device
-memory object, call:
-
-include::{generated}/api/protos/vkGetMemoryFdKHR.txt[]
-
-  * pname:device is the logical device that created the device memory being
-    exported.
-  * pname:pGetFdInfo is a pointer to a slink:VkMemoryGetFdInfoKHR structure
-    containing parameters of the export operation.
-  * pname:pFd will return a file descriptor referencing the payload of the
-    device memory object.
-
-Each call to fname:vkGetMemoryFdKHR must: create a new file descriptor
-holding a reference to the memory object's payload and transfer ownership of
-the file descriptor to the application.
-To avoid leaking resources, the application must: release ownership of the
-file descriptor using the code:close system call when it is no longer
-needed, or by importing a Vulkan memory object from it.
-Where supported by the operating system, the implementation must: set the
-file descriptor to be closed automatically when an code:execve system call
-is made.
-
-include::{generated}/validity/protos/vkGetMemoryFdKHR.txt[]
---
-
-[open,refpage='VkMemoryGetFdInfoKHR',desc='Structure describing a POSIX FD semaphore export operation',type='structs']
---
-The sname:VkMemoryGetFdInfoKHR structure is defined as:
-
-include::{generated}/api/structs/VkMemoryGetFdInfoKHR.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:memory is the memory object from which the handle will be
-    exported.
-  * pname:handleType is a elink:VkExternalMemoryHandleTypeFlagBits value
-    specifying the type of handle requested.
-
-The properties of the file descriptor exported depend on the value of
-pname:handleType.
-See elink:VkExternalMemoryHandleTypeFlagBits for a description of the
-properties of the defined external memory handle types.
-
-ifdef::VK_EXT_external_memory_dma_buf[]
-[NOTE]
-.Note
-====
-The size of the exported file may: be larger than the size requested by
-slink:VkMemoryAllocateInfo::pname:allocationSize.
-If pname:handleType is ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_DMA_BUF_BIT_EXT,
-then the application can: query the file's actual size with
-link:https://man7.org/linux/man-pages/man2/lseek.2.html[`lseek`].
-====
-endif::VK_EXT_external_memory_dma_buf[]
-
-.Valid Usage
-****
-  * [[VUID-VkMemoryGetFdInfoKHR-handleType-00671]]
-    pname:handleType must: have been included in
-    slink:VkExportMemoryAllocateInfo::pname:handleTypes when pname:memory
-    was created
-  * [[VUID-VkMemoryGetFdInfoKHR-handleType-00672]]
-    pname:handleType must: be
-    ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_FD_BIT or
-    ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_DMA_BUF_BIT_EXT
-****
-
-include::{generated}/validity/structs/VkMemoryGetFdInfoKHR.txt[]
---
-
-[open,refpage='vkGetMemoryFdPropertiesKHR',desc='Get Properties of External Memory File Descriptors',type='protos']
---
-POSIX file descriptor memory handles compatible with Vulkan may: also be
-created by non-Vulkan APIs using methods beyond the scope of this
-specification.
-To determine the correct parameters to use when importing such handles,
-call:
-
-include::{generated}/api/protos/vkGetMemoryFdPropertiesKHR.txt[]
-
-  * pname:device is the logical device that will be importing pname:fd.
-  * pname:handleType is a elink:VkExternalMemoryHandleTypeFlagBits value
-    specifying the type of the handle pname:fd.
-  * pname:fd is the handle which will be imported.
-  * pname:pMemoryFdProperties is a pointer to a
-    slink:VkMemoryFdPropertiesKHR structure in which the properties of the
-    handle pname:fd are returned.
-
-.Valid Usage
-****
-  * [[VUID-vkGetMemoryFdPropertiesKHR-fd-00673]]
-    pname:fd must: be an external memory handle created outside of the
-    Vulkan API
-  * [[VUID-vkGetMemoryFdPropertiesKHR-handleType-00674]]
-    pname:handleType must: not be
-    ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_FD_BIT
-****
-
-include::{generated}/validity/protos/vkGetMemoryFdPropertiesKHR.txt[]
---
-
-[open,refpage='VkMemoryFdPropertiesKHR',desc='Properties of External Memory File Descriptors',type='structs']
---
-The sname:VkMemoryFdPropertiesKHR structure returned is defined as:
-
-include::{generated}/api/structs/VkMemoryFdPropertiesKHR.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:memoryTypeBits is a bitmask containing one bit set for every
-    memory type which the specified file descriptor can: be imported as.
-
-include::{generated}/validity/structs/VkMemoryFdPropertiesKHR.txt[]
---
-endif::VK_KHR_external_memory_fd[]
-
-ifdef::VK_EXT_external_memory_host[]
-=== Host External Memory
-
-[open,refpage='VkImportMemoryHostPointerInfoEXT',desc='Import memory from a host pointer',type='structs']
---
-To import memory from a host pointer, add a
-slink:VkImportMemoryHostPointerInfoEXT structure to the pname:pNext chain of
-the slink:VkMemoryAllocateInfo structure.
-The sname:VkImportMemoryHostPointerInfoEXT structure is defined as:
-
-include::{generated}/api/structs/VkImportMemoryHostPointerInfoEXT.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:handleType is a elink:VkExternalMemoryHandleTypeFlagBits value
-    specifying the handle type.
-  * pname:pHostPointer is the host pointer to import from.
-
-Importing memory from a host pointer shares ownership of the memory between
-the host and the Vulkan implementation.
-The application can: continue to access the memory through the host pointer
-but it is the application's responsibility to synchronize device and
-non-device access to the payload as defined in
-<<memory-device-hostaccess,Host Access to Device Memory Objects>>.
-
-Applications can: import the same payload into multiple instances of Vulkan
-and multiple times into a given Vulkan instance.
-However, implementations may: fail to import the same payload multiple times
-into a given physical device due to platform constraints.
-
-Importing memory from a particular host pointer may: not be possible due to
-additional platform-specific restrictions beyond the scope of this
-specification in which case the implementation must: fail the memory import
-operation with the error code ename:VK_ERROR_INVALID_EXTERNAL_HANDLE_KHR.
-
-Whether device memory objects imported from a host pointer hold a reference
-to their payload is undefined:.
-As such, the application must: ensure that the imported memory range remains
-valid and accessible for the lifetime of the imported memory object.
-
-.Valid Usage
-****
-  * [[VUID-VkImportMemoryHostPointerInfoEXT-handleType-01747]]
-    If pname:handleType is not `0`, it must: be supported for import, as
-    reported in slink:VkExternalMemoryProperties
-  * [[VUID-VkImportMemoryHostPointerInfoEXT-handleType-01748]]
-    If pname:handleType is not `0`, it must: be
-    ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_HOST_ALLOCATION_BIT_EXT or
-    ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_HOST_MAPPED_FOREIGN_MEMORY_BIT_EXT
-  * [[VUID-VkImportMemoryHostPointerInfoEXT-pHostPointer-01749]]
-    pname:pHostPointer must: be a pointer aligned to an integer multiple of
-    sname:VkPhysicalDeviceExternalMemoryHostPropertiesEXT::pname:minImportedHostPointerAlignment
-  * [[VUID-VkImportMemoryHostPointerInfoEXT-handleType-01750]]
-    If pname:handleType is
-    ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_HOST_ALLOCATION_BIT_EXT,
-    pname:pHostPointer must: be a pointer to pname:allocationSize number of
-    bytes of host memory, where pname:allocationSize is the member of the
-    sname:VkMemoryAllocateInfo structure this structure is chained to
-  * [[VUID-VkImportMemoryHostPointerInfoEXT-handleType-01751]]
-    If pname:handleType is
-    ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_HOST_MAPPED_FOREIGN_MEMORY_BIT_EXT,
-    pname:pHostPointer must: be a pointer to pname:allocationSize number of
-    bytes of host mapped foreign memory, where pname:allocationSize is the
-    member of the sname:VkMemoryAllocateInfo structure this structure is
-    chained to
-****
-
-include::{generated}/validity/structs/VkImportMemoryHostPointerInfoEXT.txt[]
---
-
-[open,refpage='vkGetMemoryHostPointerPropertiesEXT',desc='Get properties of external memory host pointer',type='protos']
---
-To determine the correct parameters to use when importing host pointers,
-call:
-
-include::{generated}/api/protos/vkGetMemoryHostPointerPropertiesEXT.txt[]
-
-  * pname:device is the logical device that will be importing
-    pname:pHostPointer.
-  * pname:handleType is a elink:VkExternalMemoryHandleTypeFlagBits value
-    specifying the type of the handle pname:pHostPointer.
-  * pname:pHostPointer is the host pointer to import from.
-  * pname:pMemoryHostPointerProperties is a pointer to a
-    slink:VkMemoryHostPointerPropertiesEXT structure in which the host
-    pointer properties are returned.
-
-.Valid Usage
-****
-  * [[VUID-vkGetMemoryHostPointerPropertiesEXT-handleType-01752]]
-    pname:handleType must: be
-    ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_HOST_ALLOCATION_BIT_EXT or
-    ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_HOST_MAPPED_FOREIGN_MEMORY_BIT_EXT
-  * [[VUID-vkGetMemoryHostPointerPropertiesEXT-pHostPointer-01753]]
-    pname:pHostPointer must: be a pointer aligned to an integer multiple of
-    sname:VkPhysicalDeviceExternalMemoryHostPropertiesEXT::pname:minImportedHostPointerAlignment
-  * [[VUID-vkGetMemoryHostPointerPropertiesEXT-handleType-01754]]
-    If pname:handleType is
-    ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_HOST_ALLOCATION_BIT_EXT,
-    pname:pHostPointer must: be a pointer to host memory
-  * [[VUID-vkGetMemoryHostPointerPropertiesEXT-handleType-01755]]
-    If pname:handleType is
-    ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_HOST_MAPPED_FOREIGN_MEMORY_BIT_EXT,
-    pname:pHostPointer must: be a pointer to host mapped foreign memory
-****
-
-include::{generated}/validity/protos/vkGetMemoryHostPointerPropertiesEXT.txt[]
---
-
-[open,refpage='VkMemoryHostPointerPropertiesEXT',desc='Properties of external memory host pointer',type='structs']
---
-The sname:VkMemoryHostPointerPropertiesEXT structure is defined as:
-
-include::{generated}/api/structs/VkMemoryHostPointerPropertiesEXT.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:memoryTypeBits is a bitmask containing one bit set for every
-    memory type which the specified host pointer can: be imported as.
-
-The value returned by pname:memoryTypeBits must: only include bits that
-identify memory types which are host visible.
-
-include::{generated}/validity/structs/VkMemoryHostPointerPropertiesEXT.txt[]
---
-
-endif::VK_EXT_external_memory_host[]
-
-ifdef::VK_ANDROID_external_memory_android_hardware_buffer[]
-=== Android Hardware Buffer External Memory
-
-[open,refpage='VkImportAndroidHardwareBufferInfoANDROID',desc='Import memory from an Android hardware buffer',type='structs']
---
-To import memory created outside of the current Vulkan instance from an
-Android hardware buffer, add a
-sname:VkImportAndroidHardwareBufferInfoANDROID structure to the pname:pNext
-chain of the slink:VkMemoryAllocateInfo structure.
-The sname:VkImportAndroidHardwareBufferInfoANDROID structure is defined as:
-
-include::{generated}/api/structs/VkImportAndroidHardwareBufferInfoANDROID.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:buffer is the Android hardware buffer to import.
-
-If the flink:vkAllocateMemory command succeeds, the implementation must:
-acquire a reference to the imported hardware buffer, which it must: release
-when the device memory object is freed.
-If the command fails, the implementation must: not retain a reference.
-
-.Valid Usage
-****
-  * [[VUID-VkImportAndroidHardwareBufferInfoANDROID-buffer-01880]]
-    If pname:buffer is not `NULL`, Android hardware buffers must: be
-    supported for import, as reported by
-    slink:VkExternalImageFormatProperties or
-    slink:VkExternalBufferProperties
-  * [[VUID-VkImportAndroidHardwareBufferInfoANDROID-buffer-01881]]
-    If pname:buffer is not `NULL`, it must: be a valid Android hardware
-    buffer object with code:AHardwareBuffer_Desc::code:usage compatible with
-    Vulkan as described in <<memory-external-android-hardware-buffer,Android
-    Hardware Buffers>>
-****
-
-include::{generated}/validity/structs/VkImportAndroidHardwareBufferInfoANDROID.txt[]
---
-
-[open,refpage='vkGetMemoryAndroidHardwareBufferANDROID',desc='Get an Android hardware buffer for a memory object',type='protos']
---
-To export an Android hardware buffer referencing the payload of a Vulkan
-device memory object, call:
-
-include::{generated}/api/protos/vkGetMemoryAndroidHardwareBufferANDROID.txt[]
-
-  * pname:device is the logical device that created the device memory being
-    exported.
-  * pname:pInfo is a pointer to a
-    slink:VkMemoryGetAndroidHardwareBufferInfoANDROID structure containing
-    parameters of the export operation.
-  * pname:pBuffer will return an Android hardware buffer referencing the
-    payload of the device memory object.
-
-Each call to fname:vkGetMemoryAndroidHardwareBufferANDROID must: return an
-Android hardware buffer with a new reference acquired in addition to the
-reference held by the slink:VkDeviceMemory.
-To avoid leaking resources, the application must: release the reference by
-calling code:AHardwareBuffer_release when it is no longer needed.
-When called with the same handle in
-slink:VkMemoryGetAndroidHardwareBufferInfoANDROID::pname:memory,
-fname:vkGetMemoryAndroidHardwareBufferANDROID must: return the same Android
-hardware buffer object.
-If the device memory was created by importing an Android hardware buffer,
-fname:vkGetMemoryAndroidHardwareBufferANDROID must: return that same Android
-hardware buffer object.
-
-include::{generated}/validity/protos/vkGetMemoryAndroidHardwareBufferANDROID.txt[]
---
-
-[open,refpage='VkMemoryGetAndroidHardwareBufferInfoANDROID',desc='Structure describing an Android hardware buffer memory export operation',type='structs']
---
-The sname:VkMemoryGetAndroidHardwareBufferInfoANDROID structure is defined
-as:
-
-include::{generated}/api/structs/VkMemoryGetAndroidHardwareBufferInfoANDROID.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:memory is the memory object from which the Android hardware buffer
-    will be exported.
-
-.Valid Usage
-****
-  * [[VUID-VkMemoryGetAndroidHardwareBufferInfoANDROID-handleTypes-01882]]
-    ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_ANDROID_HARDWARE_BUFFER_BIT_ANDROID
-    must: have been included in
-    slink:VkExportMemoryAllocateInfo::pname:handleTypes when pname:memory
-    was created
-  * [[VUID-VkMemoryGetAndroidHardwareBufferInfoANDROID-pNext-01883]]
-    If the pname:pNext chain of the slink:VkMemoryAllocateInfo used to
-    allocate pname:memory included a slink:VkMemoryDedicatedAllocateInfo
-    with non-`NULL` pname:image member, then that pname:image must: already
-    be bound to pname:memory
-****
-
-include::{generated}/validity/structs/VkMemoryGetAndroidHardwareBufferInfoANDROID.txt[]
---
-
-[open,refpage='vkGetAndroidHardwareBufferPropertiesANDROID',desc='Get Properties of External Memory Android Hardware Buffers',type='protos']
---
-To determine the memory parameters to use when importing an Android hardware
-buffer, call:
-
-include::{generated}/api/protos/vkGetAndroidHardwareBufferPropertiesANDROID.txt[]
-
-  * pname:device is the logical device that will be importing pname:buffer.
-  * pname:buffer is the Android hardware buffer which will be imported.
-  * pname:pProperties is a pointer to a
-    slink:VkAndroidHardwareBufferPropertiesANDROID structure in which the
-    properties of pname:buffer are returned.
-
-.Valid Usage
-****
-  * [[VUID-vkGetAndroidHardwareBufferPropertiesANDROID-buffer-01884]]
-    pname:buffer must: be a valid Android hardware buffer object with at
-    least one of the code:AHARDWAREBUFFER_USAGE_GPU_* flags in its
-    code:AHardwareBuffer_Desc::code:usage
-****
-
-include::{generated}/validity/protos/vkGetAndroidHardwareBufferPropertiesANDROID.txt[]
---
-
-[open,refpage='VkAndroidHardwareBufferPropertiesANDROID',desc='Properties of External Memory Android Hardware Buffers',type='structs']
---
-The sname:VkAndroidHardwareBufferPropertiesANDROID structure returned is
-defined as:
-
-include::{generated}/api/structs/VkAndroidHardwareBufferPropertiesANDROID.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:allocationSize is the size of the external memory
-  * pname:memoryTypeBits is a bitmask containing one bit set for every
-    memory type which the specified Android hardware buffer can: be imported
-    as.
-
-include::{generated}/validity/structs/VkAndroidHardwareBufferPropertiesANDROID.txt[]
---
-
-[open,refpage='VkAndroidHardwareBufferFormatPropertiesANDROID',desc='Structure describing the image format properties of an Android hardware buffer',type='structs']
---
-To obtain format properties of an Android hardware buffer, include a
-sname:VkAndroidHardwareBufferFormatPropertiesANDROID structure in the
-pname:pNext chain of the slink:VkAndroidHardwareBufferPropertiesANDROID
-structure passed to flink:vkGetAndroidHardwareBufferPropertiesANDROID.
-This structure is defined as:
-
-include::{generated}/api/structs/VkAndroidHardwareBufferFormatPropertiesANDROID.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:format is the Vulkan format corresponding to the Android hardware
-    buffer's format, or ename:VK_FORMAT_UNDEFINED if there is not an
-    equivalent Vulkan format.
-  * pname:externalFormat is an implementation-defined external format
-    identifier for use with slink:VkExternalFormatANDROID.
-    It must: not be zero.
-  * pname:formatFeatures describes the capabilities of this external format
-    when used with an image bound to memory imported from pname:buffer.
-  * pname:samplerYcbcrConversionComponents is the component swizzle that
-    should: be used in slink:VkSamplerYcbcrConversionCreateInfo.
-  * pname:suggestedYcbcrModel is a suggested color model to use in the
-    slink:VkSamplerYcbcrConversionCreateInfo.
-  * pname:suggestedYcbcrRange is a suggested numerical value range to use in
-    slink:VkSamplerYcbcrConversionCreateInfo.
-  * pname:suggestedXChromaOffset is a suggested X chroma offset to use in
-    slink:VkSamplerYcbcrConversionCreateInfo.
-  * pname:suggestedYChromaOffset is a suggested Y chroma offset to use in
-    slink:VkSamplerYcbcrConversionCreateInfo.
-
-If the Android hardware buffer has one of the formats listed in the
-<<memory-external-android-hardware-buffer-formats,Format Equivalence
-table>>, then pname:format must: have the equivalent Vulkan format listed in
-the table.
-Otherwise, pname:format may: be ename:VK_FORMAT_UNDEFINED, indicating the
-Android hardware buffer can: only be used with an external format.
-
-The pname:formatFeatures member must: include
-ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT and at least one of
-ename:VK_FORMAT_FEATURE_MIDPOINT_CHROMA_SAMPLES_BIT or
-ename:VK_FORMAT_FEATURE_COSITED_CHROMA_SAMPLES_BIT, and should: include
-ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT and
-ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_LINEAR_FILTER_BIT.
-
-[NOTE]
-.Note
-====
-The pname:formatFeatures member only indicates the features available when
-using an
-<<memory-external-android-hardware-buffer-external-formats,external-format
-image>> created from the Android hardware buffer.
-Images from Android hardware buffers with a format other than
-ename:VK_FORMAT_UNDEFINED are subject to the format capabilities obtained
-from flink:vkGetPhysicalDeviceFormatProperties2, and
-flink:vkGetPhysicalDeviceImageFormatProperties2 with appropriate parameters.
-These sets of features are independent of each other, e.g. the external
-format will support sampler {YCbCr} conversion even if the non-external
-format does not, and writing to non-external format images is possible but
-writing to external format images is not.
-====
-
-Android hardware buffers with the same external format must: have the same
-support for ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT,
-ename:VK_FORMAT_FEATURE_MIDPOINT_CHROMA_SAMPLES_BIT,
-ename:VK_FORMAT_FEATURE_COSITED_CHROMA_SAMPLES_BIT,
-ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_LINEAR_FILTER_BIT,
-ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_SEPARATE_RECONSTRUCTION_FILTER_BIT,
-and
-ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_FORCEABLE_BIT.
-in pname:formatFeatures.
-Other format features may: differ between Android hardware buffers that have
-the same external format.
-This allows applications to use the same slink:VkSamplerYcbcrConversion
-object (and samplers and pipelines created from them) for any Android
-hardware buffers that have the same external format.
-
-If pname:format is not ename:VK_FORMAT_UNDEFINED, then the value of
-pname:samplerYcbcrConversionComponents must: be valid when used as the
-pname:components member of slink:VkSamplerYcbcrConversionCreateInfo with
-that format.
-If pname:format is ename:VK_FORMAT_UNDEFINED, all members of
-pname:samplerYcbcrConversionComponents must: be the
-<<resources-image-views-identity-mappings,identity swizzle>>.
-
-Implementations may: not always be able to determine the color model,
-numerical range, or chroma offsets of the image contents, so the values in
-sname:VkAndroidHardwareBufferFormatPropertiesANDROID are only suggestions.
-Applications should: treat these values as sensible defaults to use in the
-absence of more reliable information obtained through some other means.
-If the underlying physical device is also usable via OpenGL ES with the
-https://www.khronos.org/registry/OpenGL/extensions/OES/OES_EGL_image_external.txt[`GL_OES_EGL_image_external`]
-extension, the implementation should: suggest values that will produce
-similar sampled values as would be obtained by sampling the same external
-image via code:samplerExternalOES in OpenGL ES using equivalent sampler
-parameters.
-
-[NOTE]
-.Note
-====
-Since
-https://www.khronos.org/registry/OpenGL/extensions/OES/OES_EGL_image_external.txt[`GL_OES_EGL_image_external`]
-does not require the same sampling and conversion calculations as Vulkan
-does, achieving identical results between APIs may: not be possible on some
-implementations.
-====
-
-include::{generated}/validity/structs/VkAndroidHardwareBufferFormatPropertiesANDROID.txt[]
---
-
-ifdef::VK_KHR_format_feature_flags2[]
-[open,refpage='VkAndroidHardwareBufferFormatProperties2ANDROID',desc='Structure describing the image format properties of an Android hardware buffer',type='structs']
---
-The format properties of an Android hardware buffer can: be obtained by
-including a sname:VkAndroidHardwareBufferFormatProperties2ANDROID structure
-in the pname:pNext chain of the
-slink:VkAndroidHardwareBufferPropertiesANDROID structure passed to
-flink:vkGetAndroidHardwareBufferPropertiesANDROID.
-This structure is defined as:
-
-include::{generated}/api/structs/VkAndroidHardwareBufferFormatProperties2ANDROID.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:format is the Vulkan format corresponding to the Android hardware
-    buffer's format, or ename:VK_FORMAT_UNDEFINED if there is not an
-    equivalent Vulkan format.
-  * pname:externalFormat is an implementation-defined external format
-    identifier for use with slink:VkExternalFormatANDROID.
-    It must: not be zero.
-  * pname:formatFeatures describes the capabilities of this external format
-    when used with an image bound to memory imported from pname:buffer.
-  * pname:samplerYcbcrConversionComponents is the component swizzle that
-    should: be used in slink:VkSamplerYcbcrConversionCreateInfo.
-  * pname:suggestedYcbcrModel is a suggested color model to use in the
-    slink:VkSamplerYcbcrConversionCreateInfo.
-  * pname:suggestedYcbcrRange is a suggested numerical value range to use in
-    slink:VkSamplerYcbcrConversionCreateInfo.
-  * pname:suggestedXChromaOffset is a suggested X chroma offset to use in
-    slink:VkSamplerYcbcrConversionCreateInfo.
-  * pname:suggestedYChromaOffset is a suggested Y chroma offset to use in
-    slink:VkSamplerYcbcrConversionCreateInfo.
-
-The bits reported in pname:formatFeatures must: include the bits reported in
-the corresponding fields of
-sname:VkAndroidHardwareBufferFormatPropertiesANDROID::pname:formatFeatures.
-
-include::{generated}/validity/structs/VkAndroidHardwareBufferFormatProperties2ANDROID.txt[]
---
-endif::VK_KHR_format_feature_flags2[]
-endif::VK_ANDROID_external_memory_android_hardware_buffer[]
-
-ifdef::VK_NV_external_memory_rdma[]
-[open,refpage='vkGetMemoryRemoteAddressNV',desc='Get an address for a memory object accessible by remote devices',type='protos']
---
-To export an address representing the payload of a Vulkan device memory
-object accessible by remote devices, call:
-
-include::{generated}/api/protos/vkGetMemoryRemoteAddressNV.txt[]
-
-  * pname:device is the logical device that created the device memory being
-    exported.
-  * pname:pMemoryGetRemoteAddressInfo is a pointer to a
-    slink:VkMemoryGetRemoteAddressInfoNV structure containing parameters of
-    the export operation.
-  * pname:pAddress will return the address representing the payload of the
-    device memory object.
-
-More communication may be required between the kernel-mode drivers of the
-devices involved.
-This information is out of scope of this documentation and should be
-requested from the vendors of the devices.
-
-include::{generated}/validity/protos/vkGetMemoryRemoteAddressNV.txt[]
---
-
-[open,refpage='VkMemoryGetRemoteAddressInfoNV',desc='Structure describing a remote accessible address export operation',type='structs']
---
-The sname:VkMemoryGetRemoteAddressInfoNV structure is defined as:
-
-include::{generated}/api/structs/VkMemoryGetRemoteAddressInfoNV.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:memory is the memory object from which the remote accessible
-    address will be exported.
-  * pname:handleType is the type of handle requested.
-
-.Valid Usage
-****
-  * [[VUID-VkMemoryGetRemoteAddressInfoNV-handleType-04966]]
-    pname:handleType must: have been included in
-    slink:VkExportMemoryAllocateInfo::pname:handleTypes when pname:memory
-    was created
-****
-
-include::{generated}/validity/structs/VkMemoryGetRemoteAddressInfoNV.txt[]
---
-endif::VK_NV_external_memory_rdma[]
-
-ifdef::VK_FUCHSIA_external_memory[]
-include::VK_FUCHSIA_external_memory/device_memory.txt[]
-endif::VK_FUCHSIA_external_memory[]
-
-
-ifdef::VK_VERSION_1_1,VK_KHR_device_group[]
-=== Device Group Memory Allocations
-
-[open,refpage='VkMemoryAllocateFlagsInfo',desc='Structure controlling how many instances of memory will be allocated',type='structs']
---
-If the pname:pNext chain of slink:VkMemoryAllocateInfo includes a
-sname:VkMemoryAllocateFlagsInfo structure, then that structure includes
-flags and a device mask controlling how many instances of the memory will be
-allocated.
-
-The sname:VkMemoryAllocateFlagsInfo structure is defined as:
-
-include::{generated}/api/structs/VkMemoryAllocateFlagsInfo.txt[]
-
-ifdef::VK_KHR_device_group[]
-or the equivalent
-
-include::{generated}/api/structs/VkMemoryAllocateFlagsInfoKHR.txt[]
-endif::VK_KHR_device_group[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:flags is a bitmask of elink:VkMemoryAllocateFlagBits controlling
-    the allocation.
-  * pname:deviceMask is a mask of physical devices in the logical device,
-    indicating that memory must: be allocated on each device in the mask, if
-    ename:VK_MEMORY_ALLOCATE_DEVICE_MASK_BIT is set in pname:flags.
-
-If ename:VK_MEMORY_ALLOCATE_DEVICE_MASK_BIT is not set, the number of
-instances allocated depends on whether
-ename:VK_MEMORY_HEAP_MULTI_INSTANCE_BIT is set in the memory heap.
-If ename:VK_MEMORY_HEAP_MULTI_INSTANCE_BIT is set, then memory is allocated
-for every physical device in the logical device (as if pname:deviceMask has
-bits set for all device indices).
-If ename:VK_MEMORY_HEAP_MULTI_INSTANCE_BIT is not set, then a single
-instance of memory is allocated (as if pname:deviceMask is set to one).
-
-On some implementations, allocations from a multi-instance heap may: consume
-memory on all physical devices even if the pname:deviceMask excludes some
-devices.
-If slink:VkPhysicalDeviceGroupProperties::pname:subsetAllocation is
-ename:VK_TRUE, then memory is only consumed for the devices in the device
-mask.
-
-[NOTE]
-.Note
-====
-In practice, most allocations on a multi-instance heap will be allocated
-across all physical devices.
-Unicast allocation support is an optional optimization for a minority of
-allocations.
-====
-
-.Valid Usage
-****
-  * [[VUID-VkMemoryAllocateFlagsInfo-deviceMask-00675]]
-    If ename:VK_MEMORY_ALLOCATE_DEVICE_MASK_BIT is set, pname:deviceMask
-    must: be a valid device mask
-  * [[VUID-VkMemoryAllocateFlagsInfo-deviceMask-00676]]
-    If ename:VK_MEMORY_ALLOCATE_DEVICE_MASK_BIT is set, pname:deviceMask
-    must: not be zero
-****
-
-include::{generated}/validity/structs/VkMemoryAllocateFlagsInfo.txt[]
---
-
-[open,refpage='VkMemoryAllocateFlagBits',desc='Bitmask specifying flags for a device memory allocation',type='enums']
---
-Bits which can: be set in slink:VkMemoryAllocateFlagsInfo::pname:flags,
-controlling device memory allocation, are:
-
-include::{generated}/api/enums/VkMemoryAllocateFlagBits.txt[]
-
-ifdef::VK_KHR_device_group[]
-or the equivalent
-
-include::{generated}/api/enums/VkMemoryAllocateFlagBitsKHR.txt[]
-endif::VK_KHR_device_group[]
-
-  * ename:VK_MEMORY_ALLOCATE_DEVICE_MASK_BIT specifies that memory will be
-    allocated for the devices in
-    slink:VkMemoryAllocateFlagsInfo::pname:deviceMask.
-ifdef::VK_VERSION_1_2,VK_KHR_buffer_device_address[]
-  * ename:VK_MEMORY_ALLOCATE_DEVICE_ADDRESS_BIT specifies that the memory
-    can: be attached to a buffer object created with the
-    ename:VK_BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT bit set in pname:usage,
-    and that the memory handle can: be used to retrieve an opaque address
-    via flink:vkGetDeviceMemoryOpaqueCaptureAddress.
-  * ename:VK_MEMORY_ALLOCATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT specifies
-    that the memory's address can: be saved and reused on a subsequent run
-    (e.g. for trace capture and replay), see
-    slink:VkBufferOpaqueCaptureAddressCreateInfo for more detail.
-endif::VK_VERSION_1_2,VK_KHR_buffer_device_address[]
---
-
-[open,refpage='VkMemoryAllocateFlags',desc='Bitmask of VkMemoryAllocateFlagBits',type='flags']
---
-include::{generated}/api/flags/VkMemoryAllocateFlags.txt[]
-
-ifdef::VK_KHR_device_group[]
-or the equivalent
-
-include::{generated}/api/flags/VkMemoryAllocateFlagsKHR.txt[]
-endif::VK_KHR_device_group[]
-
-tname:VkMemoryAllocateFlags is a bitmask type for setting a mask of zero or
-more elink:VkMemoryAllocateFlagBits.
---
-endif::VK_VERSION_1_1,VK_KHR_device_group[]
-
-
-ifdef::VK_VERSION_1_2,VK_KHR_buffer_device_address[]
-=== Opaque Capture Address Allocation
-
-[open,refpage='VkMemoryOpaqueCaptureAddressAllocateInfo',desc='Request a specific address for a memory allocation',type='structs',alias='VkMemoryOpaqueCaptureAddressAllocateInfoKHR']
---
-To request a specific device address for a memory allocation, add a
-slink:VkMemoryOpaqueCaptureAddressAllocateInfo structure to the pname:pNext
-chain of the slink:VkMemoryAllocateInfo structure.
-The sname:VkMemoryOpaqueCaptureAddressAllocateInfo structure is defined as:
-
-include::{generated}/api/structs/VkMemoryOpaqueCaptureAddressAllocateInfo.txt[]
-
-ifdef::VK_KHR_buffer_device_address[]
-or the equivalent
-
-include::{generated}/api/structs/VkMemoryOpaqueCaptureAddressAllocateInfoKHR.txt[]
-endif::VK_KHR_buffer_device_address[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:opaqueCaptureAddress is the opaque capture address requested for
-    the memory allocation.
-
-If pname:opaqueCaptureAddress is zero, no specific address is requested.
-
-If pname:opaqueCaptureAddress is not zero, it should: be an address
-retrieved from flink:vkGetDeviceMemoryOpaqueCaptureAddress on an identically
-created memory allocation on the same implementation.
-
-[NOTE]
-.Note
-====
-In most cases, it is expected that a non-zero pname:opaqueAddress is an
-address retrieved from flink:vkGetDeviceMemoryOpaqueCaptureAddress on an
-identically created memory allocation.
-If this is not the case, it is likely that
-ename:VK_ERROR_INVALID_OPAQUE_CAPTURE_ADDRESS errors will occur.
-
-This is, however, not a strict requirement because trace capture/replay
-tools may need to adjust memory allocation parameters for imported memory.
-====
-
-If this structure is not present, it is as if pname:opaqueCaptureAddress is
-zero.
-
-include::{generated}/validity/structs/VkMemoryOpaqueCaptureAddressAllocateInfo.txt[]
---
-
-endif::VK_VERSION_1_2,VK_KHR_buffer_device_address[]
-
-
-=== Freeing Device Memory
-
-[open,refpage='vkFreeMemory',desc='Free device memory',type='protos']
---
-To free a memory object, call:
-
-include::{generated}/api/protos/vkFreeMemory.txt[]
-
-  * pname:device is the logical device that owns the memory.
-  * pname:memory is the slink:VkDeviceMemory object to be freed.
-  * pname:pAllocator controls host memory allocation as described in the
-    <<memory-allocation, Memory Allocation>> chapter.
-
-Before freeing a memory object, an application must: ensure the memory
-object is no longer in use by the device -- for example by command buffers
-in the _pending state_.
-Memory can: be freed whilst still bound to resources, but those resources
-must: not be used afterwards.
-Freeing a memory object releases the reference it held, if any, to its
-payload.
-If there are still any bound images or buffers, the memory object's payload
-may: not be immediately released by the implementation, but must: be
-released by the time all bound images and buffers have been destroyed.
-Once all references to a payload are released, it is returned to the heap
-from which it was allocated.
-
-How memory objects are bound to Images and Buffers is described in detail in
-the <<resources-association, Resource Memory Association>> section.
-
-If a memory object is mapped at the time it is freed, it is implicitly
-unmapped.
-
-[NOTE]
-.Note
-====
-As described <<memory-device-unmap-does-not-flush, below>>, host writes are
-not implicitly flushed when the memory object is unmapped, but the
-implementation must: guarantee that writes that have not been flushed do not
-affect any other memory.
-====
-
-.Valid Usage
-****
-  * [[VUID-vkFreeMemory-memory-00677]]
-    All submitted commands that refer to pname:memory (via images or
-    buffers) must: have completed execution
-****
-
-include::{generated}/validity/protos/vkFreeMemory.txt[]
---
-
-
-[[memory-device-hostaccess]]
-=== Host Access to Device Memory Objects
-
-Memory objects created with flink:vkAllocateMemory are not directly host
-accessible.
-
-Memory objects created with the memory property
-ename:VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT are considered _mappable_.
-Memory objects must: be mappable in order to be successfully mapped on the
-host.
-
-[open,refpage='vkMapMemory',desc='Map a memory object into application address space',type='protos']
---
-To retrieve a host virtual address pointer to a region of a mappable memory
-object, call:
-
-include::{generated}/api/protos/vkMapMemory.txt[]
-
-  * pname:device is the logical device that owns the memory.
-  * pname:memory is the slink:VkDeviceMemory object to be mapped.
-  * pname:offset is a zero-based byte offset from the beginning of the
-    memory object.
-  * pname:size is the size of the memory range to map, or
-    ename:VK_WHOLE_SIZE to map from pname:offset to the end of the
-    allocation.
-  * pname:flags is reserved for future use.
-  * pname:ppData is a pointer to a `void *` variable in which is returned a
-    host-accessible pointer to the beginning of the mapped range.
-    This pointer minus pname:offset must: be aligned to at least
-    slink:VkPhysicalDeviceLimits::pname:minMemoryMapAlignment.
-
-After a successful call to fname:vkMapMemory the memory object pname:memory
-is considered to be currently _host mapped_.
-
-[NOTE]
-.Note
-====
-It is an application error to call fname:vkMapMemory on a memory object that
-is already _host mapped_.
-====
-
-[NOTE]
-.Note
-====
-fname:vkMapMemory will fail if the implementation is unable to allocate an
-appropriately sized contiguous virtual address range, e.g. due to virtual
-address space fragmentation or platform limits.
-In such cases, fname:vkMapMemory must: return
-ename:VK_ERROR_MEMORY_MAP_FAILED.
-The application can: improve the likelihood of success by reducing the size
-of the mapped range and/or removing unneeded mappings using
-flink:vkUnmapMemory.
-====
-
-[[memory-device-hostaccess-hazards]]
-fname:vkMapMemory does not check whether the device memory is currently in
-use before returning the host-accessible pointer.
-The application must: guarantee that any previously submitted command that
-writes to this range has completed before the host reads from or writes to
-that range, and that any previously submitted command that reads from that
-range has completed before the host writes to that region (see
-<<synchronization-submission-host-writes, here>> for details on fulfilling
-such a guarantee).
-If the device memory was allocated without the
-ename:VK_MEMORY_PROPERTY_HOST_COHERENT_BIT set, these guarantees must: be
-made for an extended range: the application must: round down the start of
-the range to the nearest multiple of
-slink:VkPhysicalDeviceLimits::pname:nonCoherentAtomSize, and round the end
-of the range up to the nearest multiple of
-slink:VkPhysicalDeviceLimits::pname:nonCoherentAtomSize.
-
-While a range of device memory is host mapped, the application is
-responsible for synchronizing both device and host access to that memory
-range.
-
-[NOTE]
-.Note
-====
-It is important for the application developer to become meticulously
-familiar with all of the mechanisms described in the chapter on
-<<synchronization, Synchronization and Cache Control>> as they are crucial
-to maintaining memory access ordering.
-====
-
-.Valid Usage
-****
-  * [[VUID-vkMapMemory-memory-00678]]
-    pname:memory must: not be currently host mapped
-  * [[VUID-vkMapMemory-offset-00679]]
-    pname:offset must: be less than the size of pname:memory
-  * [[VUID-vkMapMemory-size-00680]]
-    If pname:size is not equal to ename:VK_WHOLE_SIZE, pname:size must: be
-    greater than `0`
-  * [[VUID-vkMapMemory-size-00681]]
-    If pname:size is not equal to ename:VK_WHOLE_SIZE, pname:size must: be
-    less than or equal to the size of the pname:memory minus pname:offset
-  * [[VUID-vkMapMemory-memory-00682]]
-    pname:memory must: have been created with a memory type that reports
-    ename:VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT
-ifdef::VK_KHR_device_group[]
-  * [[VUID-vkMapMemory-memory-00683]]
-    pname:memory must: not have been allocated with multiple instances
-endif::VK_KHR_device_group[]
-****
-
-include::{generated}/validity/protos/vkMapMemory.txt[]
---
-
-[open,refpage='VkMemoryMapFlags',desc='Reserved for future use',type='flags']
---
-include::{generated}/api/flags/VkMemoryMapFlags.txt[]
-
-tname:VkMemoryMapFlags is a bitmask type for setting a mask, but is
-currently reserved for future use.
---
-
-Two commands are provided to enable applications to work with non-coherent
-memory allocations: fname:vkFlushMappedMemoryRanges and
-fname:vkInvalidateMappedMemoryRanges.
-
-[NOTE]
-.Note
-====
-If the memory object was created with the
-ename:VK_MEMORY_PROPERTY_HOST_COHERENT_BIT set,
-fname:vkFlushMappedMemoryRanges and fname:vkInvalidateMappedMemoryRanges are
-unnecessary and may: have a performance cost.
-However, <<synchronization-dependencies-available-and-visible, availability
-and visibility operations>> still need to be managed on the device.
-See the description of <<synchronization-host-access-types, host access
-types>> for more information.
-====
-
-ifdef::VK_EXT_external_memory_host[]
-[NOTE]
-.Note
-====
-While memory objects imported from a handle type of
-ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_HOST_ALLOCATION_BIT_EXT or
-ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_HOST_MAPPED_FOREIGN_MEMORY_BIT_EXT are
-inherently mapped to host address space, they are not considered to be host
-mapped device memory unless they are explicitly host mapped using
-flink:vkMapMemory.
-That means flushing or invalidating host caches with respect to host
-accesses performed on such memory through the original host pointer
-specified at import time is the responsibility of the application and must:
-be performed with appropriate synchronization primitives provided by the
-platform which are outside the scope of Vulkan.
-fname:vkFlushMappedMemoryRanges and fname:vkInvalidateMappedMemoryRanges,
-however, can: still be used on such memory objects to synchronize host
-accesses performed through the host pointer of the host mapped device memory
-range returned by flink:vkMapMemory.
-====
-endif::VK_EXT_external_memory_host[]
-
-[open,refpage='vkFlushMappedMemoryRanges',desc='Flush mapped memory ranges',type='protos']
---
-To flush ranges of non-coherent memory from the host caches, call:
-
-include::{generated}/api/protos/vkFlushMappedMemoryRanges.txt[]
-
-  * pname:device is the logical device that owns the memory ranges.
-  * pname:memoryRangeCount is the length of the pname:pMemoryRanges array.
-  * pname:pMemoryRanges is a pointer to an array of
-    slink:VkMappedMemoryRange structures describing the memory ranges to
-    flush.
-
-fname:vkFlushMappedMemoryRanges guarantees that host writes to the memory
-ranges described by pname:pMemoryRanges are made available to the host
-memory domain, such that they can: be made available to the device memory
-domain via <<synchronization-dependencies-available-and-visible, memory
-domain operations>> using the ename:VK_ACCESS_HOST_WRITE_BIT
-<<synchronization-access-types,access type>>.
-
-Within each range described by pname:pMemoryRanges, each set of
-pname:nonCoherentAtomSize bytes in that range is flushed if any byte in that
-set has been written by the host since it was first host mapped, or the last
-time it was flushed.
-If pname:pMemoryRanges includes sets of pname:nonCoherentAtomSize bytes
-where no bytes have been written by the host, those bytes must: not be
-flushed.
-
-[[memory-device-unmap-does-not-flush]]
-Unmapping non-coherent memory does not implicitly flush the host mapped
-memory, and host writes that have not been flushed may: not ever be visible
-to the device.
-However, implementations must: ensure that writes that have not been flushed
-do not become visible to any other memory.
-
-[NOTE]
-.Note
-====
-The above guarantee avoids a potential memory corruption in scenarios where
-host writes to a mapped memory object have not been flushed before the
-memory is unmapped (or freed), and the virtual address range is subsequently
-reused for a different mapping (or memory allocation).
-====
-
-include::{generated}/validity/protos/vkFlushMappedMemoryRanges.txt[]
---
-
-[open,refpage='vkInvalidateMappedMemoryRanges',desc='Invalidate ranges of mapped memory objects',type='protos']
---
-To invalidate ranges of non-coherent memory from the host caches, call:
-
-include::{generated}/api/protos/vkInvalidateMappedMemoryRanges.txt[]
-
-  * pname:device is the logical device that owns the memory ranges.
-  * pname:memoryRangeCount is the length of the pname:pMemoryRanges array.
-  * pname:pMemoryRanges is a pointer to an array of
-    slink:VkMappedMemoryRange structures describing the memory ranges to
-    invalidate.
-
-fname:vkInvalidateMappedMemoryRanges guarantees that device writes to the
-memory ranges described by pname:pMemoryRanges, which have been made
-available to the host memory domain using the ename:VK_ACCESS_HOST_WRITE_BIT
-and ename:VK_ACCESS_HOST_READ_BIT <<synchronization-access-types, access
-types>>, are made visible to the host.
-If a range of non-coherent memory is written by the host and then
-invalidated without first being flushed, its contents are undefined:.
-
-Within each range described by pname:pMemoryRanges, each set of
-pname:nonCoherentAtomSize bytes in that range is invalidated if any byte in
-that set has been written by the device since it was first host mapped, or
-the last time it was invalidated.
-
-[NOTE]
-.Note
-====
-Mapping non-coherent memory does not implicitly invalidate that memory.
-====
-
-include::{generated}/validity/protos/vkInvalidateMappedMemoryRanges.txt[]
---
-
-[open,refpage='VkMappedMemoryRange',desc='Structure specifying a mapped memory range',type='structs']
---
-The sname:VkMappedMemoryRange structure is defined as:
-
-include::{generated}/api/structs/VkMappedMemoryRange.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:memory is the memory object to which this range belongs.
-  * pname:offset is the zero-based byte offset from the beginning of the
-    memory object.
-  * pname:size is either the size of range, or ename:VK_WHOLE_SIZE to affect
-    the range from pname:offset to the end of the current mapping of the
-    allocation.
-
-.Valid Usage
-****
-  * [[VUID-VkMappedMemoryRange-memory-00684]]
-    pname:memory must: be currently host mapped
-  * [[VUID-VkMappedMemoryRange-size-00685]]
-    If pname:size is not equal to ename:VK_WHOLE_SIZE, pname:offset and
-    pname:size must: specify a range contained within the currently mapped
-    range of pname:memory
-  * [[VUID-VkMappedMemoryRange-size-00686]]
-    If pname:size is equal to ename:VK_WHOLE_SIZE, pname:offset must: be
-    within the currently mapped range of pname:memory
-  * [[VUID-VkMappedMemoryRange-offset-00687]]
-    pname:offset must: be a multiple of
-    slink:VkPhysicalDeviceLimits::pname:nonCoherentAtomSize
-  * [[VUID-VkMappedMemoryRange-size-01389]]
-    If pname:size is equal to ename:VK_WHOLE_SIZE, the end of the current
-    mapping of pname:memory must: either be a multiple of
-    slink:VkPhysicalDeviceLimits::pname:nonCoherentAtomSize bytes from the
-    beginning of the memory object, or be equal to the end of the memory
-    object
-  * [[VUID-VkMappedMemoryRange-size-01390]]
-    If pname:size is not equal to ename:VK_WHOLE_SIZE, pname:size must:
-    either be a multiple of
-    slink:VkPhysicalDeviceLimits::pname:nonCoherentAtomSize, or pname:offset
-    plus pname:size must: equal the size of pname:memory
-****
-
-include::{generated}/validity/structs/VkMappedMemoryRange.txt[]
---
-
-
-[open,refpage='vkUnmapMemory',desc='Unmap a previously mapped memory object',type='protos']
---
-To unmap a memory object once host access to it is no longer needed by the
-application, call:
-
-include::{generated}/api/protos/vkUnmapMemory.txt[]
-
-  * pname:device is the logical device that owns the memory.
-  * pname:memory is the memory object to be unmapped.
-
-.Valid Usage
-****
-  * [[VUID-vkUnmapMemory-memory-00689]]
-    pname:memory must: be currently host mapped
-****
-
-include::{generated}/validity/protos/vkUnmapMemory.txt[]
---
-
-
-[[memory-device-lazy_allocation]]
-=== Lazily Allocated Memory
-
-If the memory object is allocated from a heap with the
-ename:VK_MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT bit set, that object's backing
-memory may: be provided by the implementation lazily.
-The actual committed size of the memory may: initially be as small as zero
-(or as large as the requested size), and monotonically increases as
-additional memory is needed.
-
-A memory type with this flag set is only allowed to be bound to a
-sname:VkImage whose usage flags include
-ename:VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT.
-
-[NOTE]
-.Note
-====
-Using lazily allocated memory objects for framebuffer attachments that are
-not needed once a render pass instance has completed may: allow some
-implementations to never allocate memory for such attachments.
-====
-
-[open,refpage='vkGetDeviceMemoryCommitment',desc='Query the current commitment for a VkDeviceMemory',type='protos']
---
-To determine the amount of lazily-allocated memory that is currently
-committed for a memory object, call:
-
-include::{generated}/api/protos/vkGetDeviceMemoryCommitment.txt[]
-
-  * pname:device is the logical device that owns the memory.
-  * pname:memory is the memory object being queried.
-  * pname:pCommittedMemoryInBytes is a pointer to a basetype:VkDeviceSize
-    value in which the number of bytes currently committed is returned, on
-    success.
-
-The implementation may: update the commitment at any time, and the value
-returned by this query may: be out of date.
-
-The implementation guarantees to allocate any committed memory from the
-pname:heapIndex indicated by the memory type that the memory object was
-created with.
-
-.Valid Usage
-****
-  * [[VUID-vkGetDeviceMemoryCommitment-memory-00690]]
-    pname:memory must: have been created with a memory type that reports
-    ename:VK_MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT
-****
-
-include::{generated}/validity/protos/vkGetDeviceMemoryCommitment.txt[]
---
-
-
-ifdef::VK_VERSION_1_1[]
-[[memory-protected-memory]]
-=== Protected Memory
-
-_Protected memory_ divides device memory into protected device memory and
-unprotected device memory.
-
-Protected memory adds the following concepts:
-
-  * Memory:
-  ** Unprotected device memory, which can: be visible to the device and can:
-     be visible to the host
-  ** Protected device memory, which can: be visible to the device but must:
-     not be visible to the host
-  * Resources:
-  ** Unprotected images and unprotected buffers, to which unprotected memory
-     can: be bound
-  ** Protected images and protected buffers, to which protected memory can:
-     be bound
-  * Command buffers:
-  ** Unprotected command buffers, which can: be submitted to a device queue
-     to execute unprotected queue operations
-  ** Protected command buffers, which can: be submitted to a
-     protected-capable device queue to execute protected queue operations
-  * Device queues:
-  ** Unprotected device queues, to which unprotected command buffers can: be
-     submitted
-  ** Protected-capable device queues, to which unprotected command buffers
-     or protected command buffers can: be submitted
-  * Queue submissions
-  ** Unprotected queue submissions, through which unprotected command
-     buffers can: be submitted
-  ** Protected queue submissions, through which protected command buffers
-     can: be submitted
-  * Queue operations
-  ** Unprotected queue operations
-  ** Protected queue operations
-
-[[memory-protected-access-rules]]
-==== Protected Memory Access Rules
-
-If slink:VkPhysicalDeviceProtectedMemoryProperties::pname:protectedNoFault
-is ename:VK_FALSE, applications must: not perform any of the following
-operations:
-
-  * Write to unprotected memory within protected queue operations.
-  * Access protected memory within protected queue operations other than in
-    framebuffer-space pipeline stages, the compute shader stage, or the
-    transfer stage.
-  * Perform a query within protected queue operations.
-
-If slink:VkPhysicalDeviceProtectedMemoryProperties::pname:protectedNoFault
-is ename:VK_TRUE, these operations are valid, but reads will return
-undefined: values, and writes will either be dropped or store undefined:
-values.
-
-Additionally, indirect operations must: not be performed within protected
-queue operations.
-
-Whether these operations are valid or not, or if any other invalid usage is
-performed, the implementation must: guarantee that:
-
-  * Protected device memory must: never be visible to the host.
-  * Values written to unprotected device memory must: not be a function of
-    values from protected memory.
-endif::VK_VERSION_1_1[]
-
-
-ifdef::VK_KHR_external_memory_capabilities+VK_ANDROID_external_memory_android_hardware_buffer[]
-[[memory-external-handle-types]]
-=== External Memory Handle Types
-
-
-[[memory-external-android-hardware-buffer]]
-==== Android Hardware Buffer
-
-Android's NDK defines basetype:AHardwareBuffer objects, which represent
-device memory that is shareable across processes and that can: be accessed
-by a variety of media APIs and the hardware used to implement them.
-These Android hardware buffer objects may: be imported into
-slink:VkDeviceMemory objects for access via Vulkan, or exported from Vulkan.
-An slink:VkImage or slink:VkBuffer can: be bound to the imported or exported
-slink:VkDeviceMemory object if it is created with
-ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_ANDROID_HARDWARE_BUFFER_BIT_ANDROID.
-
-[open,refpage='AHardwareBuffer',desc='Android hardware buffer type',type='basetypes']
---
-To remove an unnecessary compile-time dependency, an incomplete type
-definition of basetype:AHardwareBuffer is provided in the Vulkan headers:
-
-include::{generated}/api/basetypes/AHardwareBuffer.txt[]
-
-The actual basetype:AHardwareBuffer type is defined in Android NDK headers.
---
-
-[NOTE]
-.Note
-====
-The NDK format, usage, and size/dimensions of an basetype:AHardwareBuffer
-object can be obtained with the code:AHardwareBuffer_describe function.
-While Android hardware buffers can be imported to or exported from Vulkan
-without using that function, valid usage and implementation behavior is
-defined in terms of the code:AHardwareBuffer_Desc properties it returns.
-====
-
-Android hardware buffer objects are reference-counted using Android NDK
-functions outside of the scope of this specification.
-A slink:VkDeviceMemory imported from an Android hardware buffer or that can:
-be exported to an Android hardware buffer must: acquire a reference to its
-basetype:AHardwareBuffer object, and must: release this reference when the
-device memory is freed.
-During the host execution of a Vulkan command that has an Android hardware
-buffer as a parameter (including indirect parameters via pname:pNext
-chains), the application must: not decrement the Android hardware buffer's
-reference count to zero.
-
-Android hardware buffers can: be mapped and unmapped for CPU access using
-the NDK functions.
-These lock and unlock APIs are considered to acquire and release ownership
-of the Android hardware buffer, and applications must: follow the rules
-described in <<resources-external-sharing,External Resource Sharing>> to
-transfer ownership between the Vulkan instance and these native APIs.
-
-Android hardware buffers can: be shared with external APIs and Vulkan
-instances on the same device, and also with foreign devices.
-When transferring ownership of the Android hardware buffer, the external and
-foreign special queue families described in
-<<synchronization-queue-transfers>> are not identical.
-All APIs which produce or consume Android hardware buffers are considered to
-use foreign devices, except OpenGL ES contexts and Vulkan logical devices
-that have matching device and driver UUIDs.
-Implementations may: treat a transfer to or from the foreign queue family as
-if it were a transfer to or from the external queue family when the Android
-hardware buffer's usage only permits it to be used on the same physical
-device.
-
-
-[[memory-external-android-hardware-buffer-optimal-usages]]
-===== Android Hardware Buffer Optimal Usages =====
-
-Vulkan buffer and image usage flags do not correspond exactly to Android
-hardware buffer usage flags.
-When allocating Android hardware buffers with non-Vulkan APIs, if any
-code:AHARDWAREBUFFER_USAGE_GPU_* usage bits are included, by default the
-allocator must: allocate the memory in such a way that it supports Vulkan
-usages and creation flags in the
-<<memory-external-android-hardware-buffer-usage, usage equivalence table>>
-which do not have Android hardware buffer equivalents.
-
-An slink:VkAndroidHardwareBufferUsageANDROID structure can: be included in
-the pname:pNext chain of a slink:VkImageFormatProperties2 structure passed
-to flink:vkGetPhysicalDeviceImageFormatProperties2 to obtain optimal Android
-hardware buffer usage flags for specific Vulkan resource creation
-parameters.
-Some usage flags returned by these commands are required: based on the input
-parameters, but additional vendor-specific usage flags
-(code:AHARDWAREBUFFER_USAGE_VENDOR_*) may: also be returned.
-Any Android hardware buffer allocated with these vendor-specific usage flags
-and imported to Vulkan must: only be bound to resources created with
-parameters that are a subset of the parameters used to obtain the Android
-hardware buffer usage, since the memory may: have been allocated in a way
-incompatible with other parameters.
-If an Android hardware buffer is successfully allocated with additional
-non-vendor-specific usage flags in addition to the recommended usage, it
-must: support being used in the same ways as an Android hardware buffer
-allocated with only the recommended usage, and also in ways indicated by the
-additional usage.
-
-[[memory-external-android-hardware-buffer-external-formats]]
-===== Android Hardware Buffer External Formats =====
-
-Android hardware buffers may: represent images using implementation-specific
-formats, layouts, color models, etc., which do not have Vulkan equivalents.
-Such _external formats_ are commonly used by external image sources such as
-video decoders or cameras.
-Vulkan can: import Android hardware buffers that have external formats, but
-since the image contents are in an undiscoverable and possibly proprietary
-representation, images with external formats must: only be used as sampled
-images, must: only be sampled with a sampler that has {YCbCr} conversion
-enabled, and must: have optimal tiling.
-
-Images that will be backed by an Android hardware buffer can: use an
-external format by setting slink:VkImageCreateInfo::pname:format to
-ename:VK_FORMAT_UNDEFINED and including a slink:VkExternalFormatANDROID
-structure in the pname:pNext chain.
-Images can: be created with an external format even if the Android hardware
-buffer has a format which has an
-<<memory-external-android-hardware-buffer-formats,equivalent Vulkan format>>
-to enable consistent handling of images from sources that might use either
-category of format.
-However, all images created with an external format are subject to the valid
-usage requirements associated with external formats, even if the Android
-hardware buffer's format has a Vulkan equivalent.
-The external format of an Android hardware buffer can: be obtained by
-passing a slink:VkAndroidHardwareBufferFormatPropertiesANDROID structure to
-flink:vkGetAndroidHardwareBufferPropertiesANDROID.
-
-[[memory-external-android-hardware-buffer-image-resources]]
-===== Android Hardware Buffer Image Resources
-
-Android hardware buffers have intrinsic width, height, format, and usage
-properties, so Vulkan images bound to memory imported from an Android
-hardware buffer must: use dedicated allocations:
-sname:VkMemoryDedicatedRequirements::pname:requiresDedicatedAllocation must:
-be ename:VK_TRUE for images created with
-slink:VkExternalMemoryImageCreateInfo::pname:handleTypes that includes
-ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_ANDROID_HARDWARE_BUFFER_BIT_ANDROID.
-When creating an image that will be bound to an imported Android hardware
-buffer, the image creation parameters must: be equivalent to the
-basetype:AHardwareBuffer properties as described by the valid usage of
-slink:VkMemoryAllocateInfo.
-Similarly, device memory allocated for a dedicated image must: not be
-exported to an Android hardware buffer until it has been bound to that
-image, and the implementation must: return an Android hardware buffer with
-properties derived from the image:
-
-  * The code:width and code:height members of code:AHardwareBuffer_Desc
-    must: be the same as the pname:width and pname:height members of
-    slink:VkImageCreateInfo::pname:extent, respectively.
-  * The code:layers member of code:AHardwareBuffer_Desc must: be the same as
-    the pname:arrayLayers member of slink:VkImageCreateInfo.
-  * The code:format member of code:AHardwareBuffer_Desc must: be equivalent
-    to slink:VkImageCreateInfo::pname:format as defined by
-    <<memory-external-android-hardware-buffer-formats,AHardwareBuffer Format
-    Equivalence>>.
-  * The code:usage member of code:AHardwareBuffer_Desc must: include bits
-    corresponding to bits included in slink:VkImageCreateInfo::pname:usage
-    and slink:VkImageCreateInfo::pname:flags where such a correspondence
-    exists according to
-    <<memory-external-android-hardware-buffer-usage,AHardwareBuffer Usage
-    Equivalence>>.
-    It may: also include additional usage bits, including vendor-specific
-    usages.
-    Presence of vendor usage bits may: make the Android hardware buffer only
-    usable in ways indicated by the image creation parameters, even when
-    used outside Vulkan, in a similar way that allocating the Android
-    hardware buffer with usage returned in
-    slink:VkAndroidHardwareBufferUsageANDROID does.
-
-Implementations may: support fewer combinations of image creation parameters
-for images with Android hardware buffer external handle type than for
-non-external images.
-Support for a given set of parameters can: be determined by passing
-slink:VkExternalImageFormatProperties to
-flink:vkGetPhysicalDeviceImageFormatProperties2 with pname:handleType set to
-ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_ANDROID_HARDWARE_BUFFER_BIT_ANDROID.
-Any Android hardware buffer successfully allocated outside Vulkan with usage
-that includes code:AHARDWAREBUFFER_USAGE_GPU_* must: be supported when using
-equivalent Vulkan image parameters.
-If a given choice of image parameters are supported for import, they can:
-also be used to create an image and memory that will be exported to an
-Android hardware buffer.
-
-[[memory-external-android-hardware-buffer-formats]]
-.AHardwareBuffer Format Equivalence
-[width="100%",options="header"]
-|====
-| AHardwareBuffer Format                         | Vulkan Format
-| code:AHARDWAREBUFFER_FORMAT_R8G8B8A8_UNORM     | ename:VK_FORMAT_R8G8B8A8_UNORM
-| code:AHARDWAREBUFFER_FORMAT_R8G8B8X8_UNORM ^1^ | ename:VK_FORMAT_R8G8B8A8_UNORM
-| code:AHARDWAREBUFFER_FORMAT_R8G8B8_UNORM       | ename:VK_FORMAT_R8G8B8_UNORM
-| code:AHARDWAREBUFFER_FORMAT_R5G6B5_UNORM       | ename:VK_FORMAT_R5G6B5_UNORM_PACK16
-| code:AHARDWAREBUFFER_FORMAT_R16G16B16A16_FLOAT | ename:VK_FORMAT_R16G16B16A16_SFLOAT
-| code:AHARDWAREBUFFER_FORMAT_R10G10B10A2_UNORM  | ename:VK_FORMAT_A2B10G10R10_UNORM_PACK32
-| code:AHARDWAREBUFFER_FORMAT_D16_UNORM          | ename:VK_FORMAT_D16_UNORM
-| code:AHARDWAREBUFFER_FORMAT_D24_UNORM          | ename:VK_FORMAT_X8_D24_UNORM_PACK32
-| code:AHARDWAREBUFFER_FORMAT_D24_UNORM_S8_UINT  | ename:VK_FORMAT_D24_UNORM_S8_UINT
-| code:AHARDWAREBUFFER_FORMAT_D32_FLOAT          | ename:VK_FORMAT_D32_SFLOAT
-| code:AHARDWAREBUFFER_FORMAT_D32_FLOAT_S8_UINT  | ename:VK_FORMAT_D32_SFLOAT_S8_UINT
-| code:AHARDWAREBUFFER_FORMAT_S8_UINT            | ename:VK_FORMAT_S8_UINT
-|====
-
-[[memory-external-android-hardware-buffer-usage]]
-.AHardwareBuffer Usage Equivalence
-[width="100%",options="header"]
-|====
-| AHardwareBuffer Usage                          | Vulkan Usage or Creation Flag
-| None                                           | ename:VK_IMAGE_USAGE_TRANSFER_SRC_BIT
-| None                                           | ename:VK_IMAGE_USAGE_TRANSFER_DST_BIT
-| code:AHARDWAREBUFFER_USAGE_GPU_SAMPLED_IMAGE   | ename:VK_IMAGE_USAGE_SAMPLED_BIT
-| code:AHARDWAREBUFFER_USAGE_GPU_SAMPLED_IMAGE   | ename:VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT
-| code:AHARDWAREBUFFER_USAGE_GPU_FRAMEBUFFER ^3^ | ename:VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT
-| code:AHARDWAREBUFFER_USAGE_GPU_FRAMEBUFFER ^3^ | ename:VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT
-| code:AHARDWAREBUFFER_USAGE_GPU_CUBE_MAP        | ename:VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT
-| code:AHARDWAREBUFFER_USAGE_GPU_MIPMAP_COMPLETE | None ^2^
-ifdef::VK_VERSION_1_1[]
-| code:AHARDWAREBUFFER_USAGE_PROTECTED_CONTENT   | ename:VK_IMAGE_CREATE_PROTECTED_BIT
-endif::VK_VERSION_1_1[]
-| None                                           | ename:VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT
-| None                                           | ename:VK_IMAGE_CREATE_EXTENDED_USAGE_BIT
-|====
-
-1::
-    Vulkan does not differentiate between
-    code:AHARDWAREBUFFER_FORMAT_R8G8B8A8_UNORM and
-    code:AHARDWAREBUFFER_FORMAT_R8G8B8X8_UNORM: they both behave as
-    ename:VK_FORMAT_R8G8B8A8_UNORM.
-    After an external entity writes to a
-    code:AHARDWAREBUFFER_FORMAT_R8G8B8X8_UNORM Android hardware buffer, the
-    values read by Vulkan from the X/A component are undefined:.
-    To emulate the traditional behavior of the X component during sampling
-    or blending, applications should: use ename:VK_COMPONENT_SWIZZLE_ONE in
-    image view component mappings and ename:VK_BLEND_FACTOR_ONE in color
-    blend factors.
-    There is no way to avoid copying these undefined: values when copying
-    from such an image to another image or buffer.
-
-2::
-    The code:AHARDWAREBUFFER_USAGE_GPU_MIPMAP_COMPLETE flag does not
-    correspond to a Vulkan image usage or creation flag.
-    Instead, its presence indicates that the Android hardware buffer
-    contains a complete mipmap chain, and its absence indicates that the
-    Android hardware buffer contains only a single mip level.
-
-3::
-    Only image usages valid for the format are valid.
-    It would be invalid to take a Android Hardware Buffer with a format of
-    code:AHARDWAREBUFFER_FORMAT_R8G8B8A8_UNORM that has a
-    code:AHARDWAREBUFFER_USAGE_GPU_FRAMEBUFFER usage and try to create an
-    image with ename:VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT.
-
-ifdef::VK_VERSION_1_2,VK_KHR_image_format_list[]
-[NOTE]
-.Note
-====
-When using ename:VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT with Android hardware
-buffer images, applications should: use slink:VkImageFormatListCreateInfo to
-inform the implementation which view formats will be used with the image.
-For some common sets of format, this allows some implementations to provide
-significantly better performance when accessing the image via Vulkan.
-====
-endif::VK_VERSION_1_2,VK_KHR_image_format_list[]
-
-[[memory-external-android-hardware-buffer-buffer-resources]]
-===== Android Hardware Buffer Buffer Resources
-
-Android hardware buffers with a format of code:AHARDWAREBUFFER_FORMAT_BLOB
-and usage that includes code:AHARDWAREBUFFER_USAGE_GPU_DATA_BUFFER can: be
-used as the backing store for slink:VkBuffer objects.
-Such Android hardware buffers have a size in bytes specified by their
-code:width; code:height and code:layers are both `1`.
-
-Unlike images, buffer resources backed by Android hardware buffers do not
-require dedicated allocations.
-
-Exported basetype:AHardwareBuffer objects that do not have dedicated images
-must: have a format of code:AHARDWAREBUFFER_FORMAT_BLOB, usage must: include
-code:AHARDWAREBUFFER_USAGE_GPU_DATA_BUFFER, code:width must: equal the
-device memory allocation size, and code:height and code:layers must: be `1`.
-endif::VK_KHR_external_memory_capabilities+VK_ANDROID_external_memory_android_hardware_buffer[]
-
-
-ifdef::VK_VERSION_1_1,VK_KHR_device_group[]
-[[memory-peer-memory-features]]
-=== Peer Memory Features
-
-[open,refpage='vkGetDeviceGroupPeerMemoryFeatures',desc='Query supported peer memory features of a device',type='protos']
---
-_Peer memory_ is memory that is allocated for a given physical device and
-then bound to a resource and accessed by a different physical device, in a
-logical device that represents multiple physical devices.
-Some ways of reading and writing peer memory may: not be supported by a
-device.
-
-To determine how peer memory can: be accessed, call:
-
-ifdef::VK_VERSION_1_1[]
-include::{generated}/api/protos/vkGetDeviceGroupPeerMemoryFeatures.txt[]
-endif::VK_VERSION_1_1[]
-
-ifdef::VK_VERSION_1_1+VK_KHR_device_group[or the equivalent command]
-
-ifdef::VK_KHR_device_group[]
-include::{generated}/api/protos/vkGetDeviceGroupPeerMemoryFeaturesKHR.txt[]
-endif::VK_KHR_device_group[]
-
-  * pname:device is the logical device that owns the memory.
-  * pname:heapIndex is the index of the memory heap from which the memory is
-    allocated.
-  * pname:localDeviceIndex is the device index of the physical device that
-    performs the memory access.
-  * pname:remoteDeviceIndex is the device index of the physical device that
-    the memory is allocated for.
-  * pname:pPeerMemoryFeatures is a pointer to a
-    tlink:VkPeerMemoryFeatureFlags bitmask indicating which types of memory
-    accesses are supported for the combination of heap, local, and remote
-    devices.
-
-.Valid Usage
-****
-  * [[VUID-vkGetDeviceGroupPeerMemoryFeatures-heapIndex-00691]]
-    pname:heapIndex must: be less than pname:memoryHeapCount
-  * [[VUID-vkGetDeviceGroupPeerMemoryFeatures-localDeviceIndex-00692]]
-    pname:localDeviceIndex must: be a valid device index
-  * [[VUID-vkGetDeviceGroupPeerMemoryFeatures-remoteDeviceIndex-00693]]
-    pname:remoteDeviceIndex must: be a valid device index
-  * [[VUID-vkGetDeviceGroupPeerMemoryFeatures-localDeviceIndex-00694]]
-    pname:localDeviceIndex must: not equal pname:remoteDeviceIndex
-****
-
-include::{generated}/validity/protos/vkGetDeviceGroupPeerMemoryFeatures.txt[]
---
-
-[open,refpage='VkPeerMemoryFeatureFlagBits',desc='Bitmask specifying supported peer memory features',type='enums']
---
-Bits which may: be set in the value returned for
-flink:vkGetDeviceGroupPeerMemoryFeatures::pname:pPeerMemoryFeatures,
-indicating the supported peer memory features, are:
-
-include::{generated}/api/enums/VkPeerMemoryFeatureFlagBits.txt[]
-
-ifdef::VK_KHR_device_group[]
-or the equivalent
-
-include::{generated}/api/enums/VkPeerMemoryFeatureFlagBitsKHR.txt[]
-endif::VK_KHR_device_group[]
-
-  * ename:VK_PEER_MEMORY_FEATURE_COPY_SRC_BIT specifies that the memory can:
-    be accessed as the source of any ftext:vkCmdCopy* command.
-  * ename:VK_PEER_MEMORY_FEATURE_COPY_DST_BIT specifies that the memory can:
-    be accessed as the destination of any ftext:vkCmdCopy* command.
-  * ename:VK_PEER_MEMORY_FEATURE_GENERIC_SRC_BIT specifies that the memory
-    can: be read as any memory access type.
-  * ename:VK_PEER_MEMORY_FEATURE_GENERIC_DST_BIT specifies that the memory
-    can: be written as any memory access type.
-    Shader atomics are considered to be writes.
-
-[NOTE]
-.Note
-====
-The peer memory features of a memory heap also apply to any accesses that
-may: be performed during <<synchronization-image-layout-transitions, image
-layout transitions>>.
-====
-
-ename:VK_PEER_MEMORY_FEATURE_COPY_DST_BIT must: be supported for all host
-local heaps and for at least one device-local memory heap.
-
-If a device does not support a peer memory feature, it is still valid to use
-a resource that includes both local and peer memory bindings with the
-corresponding access type as long as only the local bindings are actually
-accessed.
-For example, an application doing split-frame rendering would use
-framebuffer attachments that include both local and peer memory bindings,
-but would scissor the rendering to only update local memory.
---
-
-[open,refpage='VkPeerMemoryFeatureFlags',desc='Bitmask of VkPeerMemoryFeatureFlagBits',type='flags']
---
-include::{generated}/api/flags/VkPeerMemoryFeatureFlags.txt[]
-
-ifdef::VK_KHR_device_group[]
-or the equivalent
-
-include::{generated}/api/flags/VkPeerMemoryFeatureFlagsKHR.txt[]
-endif::VK_KHR_device_group[]
-
-tname:VkPeerMemoryFeatureFlags is a bitmask type for setting a mask of zero
-or more elink:VkPeerMemoryFeatureFlagBits.
---
-endif::VK_VERSION_1_1,VK_KHR_device_group[]
-
-ifdef::VK_VERSION_1_2,VK_KHR_buffer_device_address[]
-=== Opaque Capture Address Query
-
-[open,refpage='vkGetDeviceMemoryOpaqueCaptureAddress',desc='Query an opaque capture address of a memory object',type='protos',alias='vkGetDeviceMemoryOpaqueCaptureAddressKHR']
---
-To query a 64-bit opaque capture address value from a memory object, call:
-
-ifdef::VK_VERSION_1_2[]
-include::{generated}/api/protos/vkGetDeviceMemoryOpaqueCaptureAddress.txt[]
-endif::VK_VERSION_1_2[]
-
-ifdef::VK_VERSION_1_2+VK_KHR_buffer_device_address[or the equivalent command]
-
-ifdef::VK_KHR_buffer_device_address[]
-include::{generated}/api/protos/vkGetDeviceMemoryOpaqueCaptureAddressKHR.txt[]
-endif::VK_KHR_buffer_device_address[]
-
-  * pname:device is the logical device that the memory object was allocated
-    on.
-  * pname:pInfo is a pointer to a
-    slink:VkDeviceMemoryOpaqueCaptureAddressInfo structure specifying the
-    memory object to retrieve an address for.
-
-The 64-bit return value is an opaque address representing the start of
-pname:pInfo->memory.
-
-If the memory object was allocated with a non-zero value of
-slink:VkMemoryOpaqueCaptureAddressAllocateInfo::pname:opaqueCaptureAddress,
-the return value must: be the same address.
-
-[NOTE]
-.Note
-====
-The expected usage for these opaque addresses is only for trace
-capture/replay tools to store these addresses in a trace and subsequently
-specify them during replay.
-====
-
-.Valid Usage
-****
-  * [[VUID-vkGetDeviceMemoryOpaqueCaptureAddress-None-03334]]
-    The <<features-bufferDeviceAddress,bufferDeviceAddress>> feature must:
-    be enabled
-  * [[VUID-vkGetDeviceMemoryOpaqueCaptureAddress-device-03335]]
-    If pname:device was created with multiple physical devices, then the
-    <<features-bufferDeviceAddressMultiDevice,bufferDeviceAddressMultiDevice>>
-    feature must: be enabled
-****
-
-include::{generated}/validity/protos/vkGetDeviceMemoryOpaqueCaptureAddress.txt[]
---
-
-[open,refpage='VkDeviceMemoryOpaqueCaptureAddressInfo',desc='Structure specifying the memory object to query an address for',type='structs',alias='VkDeviceMemoryOpaqueCaptureAddressInfoKHR']
---
-The sname:VkDeviceMemoryOpaqueCaptureAddressInfo structure is defined as:
-
-include::{generated}/api/structs/VkDeviceMemoryOpaqueCaptureAddressInfo.txt[]
-
-ifdef::VK_KHR_buffer_device_address[]
-or the equivalent
-
-include::{generated}/api/structs/VkDeviceMemoryOpaqueCaptureAddressInfoKHR.txt[]
-endif::VK_KHR_buffer_device_address[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:memory specifies the memory whose address is being queried.
-
-.Valid Usage
-****
-  * [[VUID-VkDeviceMemoryOpaqueCaptureAddressInfo-memory-03336]]
-    pname:memory must: have been allocated with
-    ename:VK_MEMORY_ALLOCATE_DEVICE_ADDRESS_BIT
-****
-
-include::{generated}/validity/structs/VkDeviceMemoryOpaqueCaptureAddressInfo.txt[]
---
-endif::VK_VERSION_1_2,VK_KHR_buffer_device_address[]
diff --git a/registry/vulkan/chapters/pipelines.txt b/registry/vulkan/chapters/pipelines.txt
deleted file mode 100644
index 13cd79a..0000000
--- a/registry/vulkan/chapters/pipelines.txt
+++ /dev/null
@@ -1,4569 +0,0 @@
-// Copyright 2015-2021 The Khronos Group, Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-[[pipelines]]
-= Pipelines
-
-The following <<pipelines-block-diagram,figure>> shows a block diagram of
-the Vulkan pipelines.
-Some Vulkan commands specify geometric objects to be drawn or computational
-work to be performed, while others specify state controlling how objects are
-handled by the various pipeline stages, or control data transfer between
-memory organized as images and buffers.
-Commands are effectively sent through a processing pipeline, either a
-_graphics pipeline_,
-ifdef::VK_NV_ray_tracing,VK_KHR_ray_tracing_pipeline[]
-a _ray tracing pipeline_,
-endif::VK_NV_ray_tracing,VK_KHR_ray_tracing_pipeline[]
-or a _compute pipeline_.
-
-ifdef::VK_NV_mesh_shader[]
-The graphics pipeline can be operated in two modes, as either _primitive
-shading_ or _mesh shading_ pipeline.
-
-*Primitive Shading*
-
-endif::VK_NV_mesh_shader[]
-
-The first stage of the <<pipelines-graphics,graphics pipeline>>
-(<<drawing,Input Assembler>>) assembles vertices to form geometric
-primitives such as points, lines, and triangles, based on a requested
-primitive topology.
-In the next stage (<<shaders-vertex,Vertex Shader>>) vertices can: be
-transformed, computing positions and attributes for each vertex.
-If <<tessellation,tessellation>> and/or <<geometry,geometry>> shaders are
-supported, they can: then generate multiple primitives from a single input
-primitive, possibly changing the primitive topology or generating additional
-attribute data in the process.
-
-ifdef::VK_NV_mesh_shader[]
-*Mesh Shading*
-
-When using the <<mesh,_mesh shading_>> pipeline input primitives are not
-assembled implicitly, but explicitly through the (<<shaders-mesh,Mesh
-Shader>>).
-The work on the mesh pipeline is initiated by the application
-<<drawing-mesh-shading,drawing>> a set of mesh tasks.
-
-If an optional (<<shaders-task,Task Shader>>) is active, each task triggers
-the execution of a task shader workgroup that will generate a new set of
-tasks upon completion.
-Each of these spawned tasks, or each of the original dispatched tasks if no
-task shader is present, triggers the execution of a mesh shader workgroup
-that produces an output mesh with a variable-sized number of primitives
-assembled from vertices stored in the output mesh.
-
-*Common*
-endif::VK_NV_mesh_shader[]
-
-The final resulting primitives are <<vertexpostproc-clipping,clipped>> to a
-clip volume in preparation for the next stage, <<primsrast,Rasterization>>.
-The rasterizer produces a series of _fragments_ associated with a region of
-the framebuffer, from a two-dimensional description of a point, line
-segment, or triangle.
-These fragments are processed by <<fragops,fragment operations>> to
-determine whether generated values will be written to the framebuffer.
-<<fragops-shader, Fragment shading>> determines the values to be written to
-the framebuffer attachments.
-Framebuffer operations then read and write the color and depth/stencil
-attachments of the framebuffer for a given subpass of a <<renderpass,render
-pass instance>>.
-The attachments can: be used as input attachments in the fragment shader in
-a later subpass of the same render pass.
-
-The <<pipelines-compute,compute pipeline>> is a separate pipeline from the
-graphics pipeline, which operates on one-, two-, or three-dimensional
-workgroups which can: read from and write to buffer and image memory.
-
-This ordering is meant only as a tool for describing Vulkan, not as a strict
-rule of how Vulkan is implemented, and we present it only as a means to
-organize the various operations of the pipelines.
-Actual ordering guarantees between pipeline stages are explained in detail
-in the <<synchronization-pipeline-stages-order, synchronization chapter>>.
-
-[[pipelines-block-diagram]]
-ifndef::VK_NV_mesh_shader[]
-image::{images}/pipeline.svg[title="Block diagram of the Vulkan pipeline",align="center",opts="{imageopts}"]
-endif::VK_NV_mesh_shader[]
-ifdef::VK_NV_mesh_shader[]
-image::{images}/pipelinemesh.svg[title="Block diagram of the Vulkan pipeline",align="center",opts="{imageopts}"]
-endif::VK_NV_mesh_shader[]
-
-Each pipeline is controlled by a monolithic object created from a
-description of all of the shader stages and any relevant fixed-function
-stages.
-<<interfaces,Linking>> the whole pipeline together allows the optimization
-of shaders based on their input/outputs and eliminates expensive draw time
-state validation.
-
-A pipeline object is bound to the current state using
-flink:vkCmdBindPipeline.
-Any pipeline object state that is specified as <<pipelines-dynamic-state,
-dynamic>> is not applied to the current state when the pipeline object is
-bound, but is instead set by dynamic state setting commands.
-
-No state, including dynamic state, is inherited from one command buffer to
-another.
-
-
-[open,refpage='VkPipeline',desc='Opaque handle to a pipeline object',type='handles']
---
-Compute,
-ifdef::VK_NV_ray_tracing,VK_KHR_ray_tracing_pipeline[]
-ray tracing,
-endif::VK_NV_ray_tracing,VK_KHR_ray_tracing_pipeline[]
-and graphics pipelines are each represented by sname:VkPipeline handles:
-
-include::{generated}/api/handles/VkPipeline.txt[]
---
-
-
-[[pipelines-compute]]
-== Compute Pipelines
-
-Compute pipelines consist of a single static compute shader stage and the
-pipeline layout.
-
-The compute pipeline represents a compute shader and is created by calling
-fname:vkCreateComputePipelines with pname:module and pname:pName selecting
-an entry point from a shader module, where that entry point defines a valid
-compute shader, in the slink:VkPipelineShaderStageCreateInfo structure
-contained within the slink:VkComputePipelineCreateInfo structure.
-
-[open,refpage='vkCreateComputePipelines',desc='Creates a new compute pipeline object',type='protos']
---
-To create compute pipelines, call:
-
-include::{generated}/api/protos/vkCreateComputePipelines.txt[]
-
-  * pname:device is the logical device that creates the compute pipelines.
-  * pname:pipelineCache is either dlink:VK_NULL_HANDLE, indicating that
-    pipeline caching is disabled; or the handle of a valid
-    <<pipelines-cache,pipeline cache>> object, in which case use of that
-    cache is enabled for the duration of the command.
-  * pname:createInfoCount is the length of the pname:pCreateInfos and
-    pname:pPipelines arrays.
-  * pname:pCreateInfos is a pointer to an array of
-    slink:VkComputePipelineCreateInfo structures.
-  * pname:pAllocator controls host memory allocation as described in the
-    <<memory-allocation, Memory Allocation>> chapter.
-  * pname:pPipelines is a pointer to an array of slink:VkPipeline handles in
-    which the resulting compute pipeline objects are returned.
-ifdef::editing-notes[]
-+
-[NOTE]
-.editing-note
-====
-TODO (Jon) - Should we say something like "`the i'th element of the
-pname:pPipelines array is created based on the corresponding element of the
-pname:pCreateInfos array`"? Also for flink:vkCreateGraphicsPipelines below.
-====
-endif::editing-notes[]
-
-.Valid Usage
-****
-  * [[VUID-vkCreateComputePipelines-flags-00695]]
-    If the pname:flags member of any element of pname:pCreateInfos contains
-    the ename:VK_PIPELINE_CREATE_DERIVATIVE_BIT flag, and the
-    pname:basePipelineIndex member of that same element is not `-1`,
-    pname:basePipelineIndex must: be less than the index into
-    pname:pCreateInfos that corresponds to that element
-  * [[VUID-vkCreateComputePipelines-flags-00696]]
-    If the pname:flags member of any element of pname:pCreateInfos contains
-    the ename:VK_PIPELINE_CREATE_DERIVATIVE_BIT flag, the base pipeline
-    must: have been created with the
-    ename:VK_PIPELINE_CREATE_ALLOW_DERIVATIVES_BIT flag set
-ifdef::VK_EXT_pipeline_creation_cache_control[]
-  * [[VUID-vkCreateComputePipelines-pipelineCache-02873]]
-    If pname:pipelineCache was created with
-    ename:VK_PIPELINE_CACHE_CREATE_EXTERNALLY_SYNCHRONIZED_BIT_EXT, host
-    access to pname:pipelineCache must: be
-    <<fundamentals-threadingbehavior,externally synchronized>>
-endif::VK_EXT_pipeline_creation_cache_control[]
-****
-
-include::{generated}/validity/protos/vkCreateComputePipelines.txt[]
---
-
-[open,refpage='VkComputePipelineCreateInfo',desc='Structure specifying parameters of a newly created compute pipeline',type='structs']
---
-The sname:VkComputePipelineCreateInfo structure is defined as:
-
-include::{generated}/api/structs/VkComputePipelineCreateInfo.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:flags is a bitmask of elink:VkPipelineCreateFlagBits specifying
-    how the pipeline will be generated.
-  * pname:stage is a slink:VkPipelineShaderStageCreateInfo structure
-    describing the compute shader.
-  * pname:layout is the description of binding locations used by both the
-    pipeline and descriptor sets used with the pipeline.
-  * pname:basePipelineHandle is a pipeline to derive from
-  * pname:basePipelineIndex is an index into the pname:pCreateInfos
-    parameter to use as a pipeline to derive from
-
-The parameters pname:basePipelineHandle and pname:basePipelineIndex are
-described in more detail in <<pipelines-pipeline-derivatives,Pipeline
-Derivatives>>.
-
-.Valid Usage
-****
-  * [[VUID-VkComputePipelineCreateInfo-flags-00697]]
-    If pname:flags contains the ename:VK_PIPELINE_CREATE_DERIVATIVE_BIT
-    flag, and pname:basePipelineIndex is -1, pname:basePipelineHandle must:
-    be a valid handle to a compute sname:VkPipeline
-  * [[VUID-VkComputePipelineCreateInfo-flags-00698]]
-    If pname:flags contains the ename:VK_PIPELINE_CREATE_DERIVATIVE_BIT
-    flag, and pname:basePipelineHandle is dlink:VK_NULL_HANDLE,
-    pname:basePipelineIndex must: be a valid index into the calling
-    command's pname:pCreateInfos parameter
-  * [[VUID-VkComputePipelineCreateInfo-flags-00699]]
-    If pname:flags contains the ename:VK_PIPELINE_CREATE_DERIVATIVE_BIT
-    flag, and pname:basePipelineIndex is not -1, pname:basePipelineHandle
-    must: be dlink:VK_NULL_HANDLE
-  * [[VUID-VkComputePipelineCreateInfo-flags-00700]]
-    If pname:flags contains the ename:VK_PIPELINE_CREATE_DERIVATIVE_BIT
-    flag, and pname:basePipelineHandle is not dlink:VK_NULL_HANDLE,
-    pname:basePipelineIndex must: be -1
-  * [[VUID-VkComputePipelineCreateInfo-stage-00701]]
-    The pname:stage member of pname:stage must: be
-    ename:VK_SHADER_STAGE_COMPUTE_BIT
-  * [[VUID-VkComputePipelineCreateInfo-stage-00702]]
-    The shader code for the entry point identified by pname:stage and the
-    rest of the state identified by this structure must: adhere to the
-    pipeline linking rules described in the <<interfaces,Shader Interfaces>>
-    chapter
-  * [[VUID-VkComputePipelineCreateInfo-layout-00703]]
-    pname:layout must: be
-    <<descriptorsets-pipelinelayout-consistency,consistent>> with the layout
-    of the compute shader specified in pname:stage
-  * [[VUID-VkComputePipelineCreateInfo-layout-01687]]
-    The number of resources in pname:layout accessible to the compute shader
-    stage must: be less than or equal to
-    sname:VkPhysicalDeviceLimits::pname:maxPerStageResources
-ifdef::VK_KHR_pipeline_library[]
-  * [[VUID-VkComputePipelineCreateInfo-flags-03364]]
-    pname:flags must: not include ename:VK_PIPELINE_CREATE_LIBRARY_BIT_KHR
-endif::VK_KHR_pipeline_library[]
-ifdef::VK_KHR_ray_tracing_pipeline[]
-  * [[VUID-VkComputePipelineCreateInfo-flags-03365]]
-    pname:flags must: not include
-    ename:VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_ANY_HIT_SHADERS_BIT_KHR
-  * [[VUID-VkComputePipelineCreateInfo-flags-03366]]
-    pname:flags must: not include
-    ename:VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_CLOSEST_HIT_SHADERS_BIT_KHR
-  * [[VUID-VkComputePipelineCreateInfo-flags-03367]]
-    pname:flags must: not include
-    ename:VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_MISS_SHADERS_BIT_KHR
-  * [[VUID-VkComputePipelineCreateInfo-flags-03368]]
-    pname:flags must: not include
-    ename:VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_INTERSECTION_SHADERS_BIT_KHR
-  * [[VUID-VkComputePipelineCreateInfo-flags-03369]]
-    pname:flags must: not include
-    ename:VK_PIPELINE_CREATE_RAY_TRACING_SKIP_TRIANGLES_BIT_KHR
-  * [[VUID-VkComputePipelineCreateInfo-flags-03370]]
-    pname:flags must: not include
-    ename:VK_PIPELINE_CREATE_RAY_TRACING_SKIP_AABBS_BIT_KHR
-  * [[VUID-VkComputePipelineCreateInfo-flags-03576]]
-    pname:flags must: not include
-    ename:VK_PIPELINE_CREATE_RAY_TRACING_SHADER_GROUP_HANDLE_CAPTURE_REPLAY_BIT_KHR
-endif::VK_KHR_ray_tracing_pipeline[]
-ifdef::VK_NV_ray_tracing_motion_blur[]
-  * [[VUID-VkComputePipelineCreateInfo-flags-04945]]
-    pname:flags must: not include
-    ename:VK_PIPELINE_CREATE_RAY_TRACING_ALLOW_MOTION_BIT_NV
-endif::VK_NV_ray_tracing_motion_blur[]
-ifdef::VK_NV_device_generated_commands[]
-  * [[VUID-VkComputePipelineCreateInfo-flags-02874]]
-    pname:flags must: not include
-    ename:VK_PIPELINE_CREATE_INDIRECT_BINDABLE_BIT_NV
-endif::VK_NV_device_generated_commands[]
-ifdef::VK_EXT_pipeline_creation_cache_control[]
-  * [[VUID-VkComputePipelineCreateInfo-pipelineCreationCacheControl-02875]]
-    If the <<features-pipelineCreationCacheControl,
-    pname:pipelineCreationCacheControl>> feature is not enabled, pname:flags
-    must: not include
-    ename:VK_PIPELINE_CREATE_FAIL_ON_PIPELINE_COMPILE_REQUIRED_BIT_EXT or
-    ename:VK_PIPELINE_CREATE_EARLY_RETURN_ON_FAILURE_BIT_EXT
-endif::VK_EXT_pipeline_creation_cache_control[]
-****
-
-include::{generated}/validity/structs/VkComputePipelineCreateInfo.txt[]
---
-
-[open,refpage='VkPipelineShaderStageCreateInfo',desc='Structure specifying parameters of a newly created pipeline shader stage',type='structs']
---
-The sname:VkPipelineShaderStageCreateInfo structure is defined as:
-
-include::{generated}/api/structs/VkPipelineShaderStageCreateInfo.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:flags is a bitmask of elink:VkPipelineShaderStageCreateFlagBits
-    specifying how the pipeline shader stage will be generated.
-  * pname:stage is a elink:VkShaderStageFlagBits value specifying a single
-    pipeline stage.
-  * pname:module is a slink:VkShaderModule object containing the shader for
-    this stage.
-  * pname:pName is a pointer to a null-terminated UTF-8 string specifying
-    the entry point name of the shader for this stage.
-  * pname:pSpecializationInfo is a pointer to a slink:VkSpecializationInfo
-    structure, as described in
-    <<pipelines-specialization-constants,Specialization Constants>>, or
-    `NULL`.
-
-.Valid Usage
-****
-  * [[VUID-VkPipelineShaderStageCreateInfo-stage-00704]]
-    If the <<features-geometryShader,geometry shaders>> feature is not
-    enabled, pname:stage must: not be ename:VK_SHADER_STAGE_GEOMETRY_BIT
-  * [[VUID-VkPipelineShaderStageCreateInfo-stage-00705]]
-    If the <<features-tessellationShader,tessellation shaders>> feature is
-    not enabled, pname:stage must: not be
-    ename:VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT or
-    ename:VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT
-ifdef::VK_NV_mesh_shader[]
-  * [[VUID-VkPipelineShaderStageCreateInfo-stage-02091]]
-    If the <<features-meshShader,mesh shader>> feature is not enabled,
-    pname:stage must: not be ename:VK_SHADER_STAGE_MESH_BIT_NV
-  * [[VUID-VkPipelineShaderStageCreateInfo-stage-02092]]
-    If the <<features-taskShader,task shader>> feature is not enabled,
-    pname:stage must: not be ename:VK_SHADER_STAGE_TASK_BIT_NV
-endif::VK_NV_mesh_shader[]
-  * [[VUID-VkPipelineShaderStageCreateInfo-stage-00706]]
-    pname:stage must: not be ename:VK_SHADER_STAGE_ALL_GRAPHICS, or
-    ename:VK_SHADER_STAGE_ALL
-  * [[VUID-VkPipelineShaderStageCreateInfo-pName-00707]]
-    pname:pName must: be the name of an code:OpEntryPoint in pname:module
-    with an execution model that matches pname:stage
-  * [[VUID-VkPipelineShaderStageCreateInfo-maxClipDistances-00708]]
-    If the identified entry point includes any variable in its interface
-    that is declared with the code:ClipDistance code:BuiltIn decoration,
-    that variable must: not have an array size greater than
-    sname:VkPhysicalDeviceLimits::pname:maxClipDistances
-  * [[VUID-VkPipelineShaderStageCreateInfo-maxCullDistances-00709]]
-    If the identified entry point includes any variable in its interface
-    that is declared with the code:CullDistance code:BuiltIn decoration,
-    that variable must: not have an array size greater than
-    sname:VkPhysicalDeviceLimits::pname:maxCullDistances
-  * [[VUID-VkPipelineShaderStageCreateInfo-maxCombinedClipAndCullDistances-00710]]
-    If the identified entry point includes any variables in its interface
-    that are declared with the code:ClipDistance or code:CullDistance
-    code:BuiltIn decoration, those variables must: not have array sizes
-    which sum to more than
-    sname:VkPhysicalDeviceLimits::pname:maxCombinedClipAndCullDistances
-  * [[VUID-VkPipelineShaderStageCreateInfo-maxSampleMaskWords-00711]]
-    If the identified entry point includes any variable in its interface
-    that is declared with the code:SampleMask code:BuiltIn decoration, that
-    variable must: not have an array size greater than
-    sname:VkPhysicalDeviceLimits::pname:maxSampleMaskWords
-  * [[VUID-VkPipelineShaderStageCreateInfo-stage-00712]]
-    If pname:stage is ename:VK_SHADER_STAGE_VERTEX_BIT, the identified entry
-    point must: not include any input variable in its interface that is
-    decorated with code:CullDistance
-  * [[VUID-VkPipelineShaderStageCreateInfo-stage-00713]]
-    If pname:stage is ename:VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT or
-    ename:VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT, and the identified
-    entry point has an code:OpExecutionMode instruction that specifies a
-    patch size with code:OutputVertices, the patch size must: be greater
-    than `0` and less than or equal to
-    sname:VkPhysicalDeviceLimits::pname:maxTessellationPatchSize
-  * [[VUID-VkPipelineShaderStageCreateInfo-stage-00714]]
-    If pname:stage is ename:VK_SHADER_STAGE_GEOMETRY_BIT, the identified
-    entry point must: have an code:OpExecutionMode instruction that
-    specifies a maximum output vertex count that is greater than `0` and
-    less than or equal to
-    sname:VkPhysicalDeviceLimits::pname:maxGeometryOutputVertices
-  * [[VUID-VkPipelineShaderStageCreateInfo-stage-00715]]
-    If pname:stage is ename:VK_SHADER_STAGE_GEOMETRY_BIT, the identified
-    entry point must: have an code:OpExecutionMode instruction that
-    specifies an invocation count that is greater than `0` and less than or
-    equal to
-    sname:VkPhysicalDeviceLimits::pname:maxGeometryShaderInvocations
-  * [[VUID-VkPipelineShaderStageCreateInfo-stage-02596]]
-    If pname:stage is a
-    <<pipeline-graphics-subsets-pre-rasterization,pre-rasterization shader
-    stage>>, and the identified entry point writes to code:Layer for any
-    primitive, it must: write the same value to code:Layer for all vertices
-    of a given primitive
-  * [[VUID-VkPipelineShaderStageCreateInfo-stage-02597]]
-    If pname:stage is a
-    <<pipeline-graphics-subsets-pre-rasterization,pre-rasterization shader
-    stage>>, and the identified entry point writes to code:ViewportIndex for
-    any primitive, it must: write the same value to code:ViewportIndex for
-    all vertices of a given primitive
-  * [[VUID-VkPipelineShaderStageCreateInfo-stage-00718]]
-    If pname:stage is ename:VK_SHADER_STAGE_FRAGMENT_BIT, the identified
-    entry point must: not include any output variables in its interface
-    decorated with code:CullDistance
-  * [[VUID-VkPipelineShaderStageCreateInfo-stage-00719]]
-    If pname:stage is ename:VK_SHADER_STAGE_FRAGMENT_BIT, and the identified
-    entry point writes to code:FragDepth in any execution path, it must:
-    write to code:FragDepth in all execution paths
-ifdef::VK_EXT_shader_stencil_export[]
-  * [[VUID-VkPipelineShaderStageCreateInfo-stage-01511]]
-    If pname:stage is ename:VK_SHADER_STAGE_FRAGMENT_BIT, and the identified
-    entry point writes to code:FragStencilRefEXT in any execution path, it
-    must: write to code:FragStencilRefEXT in all execution paths
-endif::VK_EXT_shader_stencil_export[]
-ifdef::VK_NV_mesh_shader[]
-  * [[VUID-VkPipelineShaderStageCreateInfo-stage-02093]]
-    If pname:stage is ename:VK_SHADER_STAGE_MESH_BIT_NV, the identified
-    entry point must: have an code:OpExecutionMode instruction that
-    specifies a maximum output vertex count, code:OutputVertices, that is
-    greater than `0` and less than or equal to
-    sname:VkPhysicalDeviceMeshShaderPropertiesNV::pname:maxMeshOutputVertices
-  * [[VUID-VkPipelineShaderStageCreateInfo-stage-02094]]
-    If pname:stage is ename:VK_SHADER_STAGE_MESH_BIT_NV, the identified
-    entry point must: have an code:OpExecutionMode instruction that
-    specifies a maximum output primitive count, code:OutputPrimitivesNV,
-    that is greater than `0` and less than or equal to
-    sname:VkPhysicalDeviceMeshShaderPropertiesNV::pname:maxMeshOutputPrimitives
-endif::VK_NV_mesh_shader[]
-ifdef::VK_EXT_subgroup_size_control[]
-  * [[VUID-VkPipelineShaderStageCreateInfo-flags-02784]]
-    If pname:flags has the
-    ename:VK_PIPELINE_SHADER_STAGE_CREATE_ALLOW_VARYING_SUBGROUP_SIZE_BIT_EXT
-    flag set, the <<features-subgroupSizeControl,
-    pname:subgroupSizeControl>> feature must: be enabled
-  * [[VUID-VkPipelineShaderStageCreateInfo-flags-02785]]
-    If pname:flags has the
-    ename:VK_PIPELINE_SHADER_STAGE_CREATE_REQUIRE_FULL_SUBGROUPS_BIT_EXT
-    flag set, the <<features-computeFullSubgroups,
-    pname:computeFullSubgroups>> feature must: be enabled
-  * [[VUID-VkPipelineShaderStageCreateInfo-pNext-02754]]
-    If a slink:VkPipelineShaderStageRequiredSubgroupSizeCreateInfoEXT
-    structure is included in the pname:pNext chain, pname:flags must: not
-    have the
-    ename:VK_PIPELINE_SHADER_STAGE_CREATE_ALLOW_VARYING_SUBGROUP_SIZE_BIT_EXT
-    flag set
-  * [[VUID-VkPipelineShaderStageCreateInfo-pNext-02755]]
-    If a slink:VkPipelineShaderStageRequiredSubgroupSizeCreateInfoEXT
-    structure is included in the pname:pNext chain, the
-    <<features-subgroupSizeControl, pname:subgroupSizeControl>> feature
-    must: be enabled, and pname:stage must: be a valid bit specified in
-    <<limits-required-subgroup-size-stages,
-    pname:requiredSubgroupSizeStages>>
-  * [[VUID-VkPipelineShaderStageCreateInfo-pNext-02756]]
-    If a slink:VkPipelineShaderStageRequiredSubgroupSizeCreateInfoEXT
-    structure is included in the pname:pNext chain and pname:stage is
-    ename:VK_SHADER_STAGE_COMPUTE_BIT, the local workgroup size of the
-    shader must: be less than or equal to the product of
-    slink:VkPipelineShaderStageRequiredSubgroupSizeCreateInfoEXT::pname:requiredSubgroupSize
-    and
-    <<limits-max-subgroups-per-workgroup,pname:maxComputeWorkgroupSubgroups>>
-  * [[VUID-VkPipelineShaderStageCreateInfo-pNext-02757]]
-    If a slink:VkPipelineShaderStageRequiredSubgroupSizeCreateInfoEXT
-    structure is included in the pname:pNext chain, and pname:flags has the
-    ename:VK_PIPELINE_SHADER_STAGE_CREATE_REQUIRE_FULL_SUBGROUPS_BIT_EXT
-    flag set, the local workgroup size in the X dimension of the pipeline
-    must: be a multiple of
-    slink:VkPipelineShaderStageRequiredSubgroupSizeCreateInfoEXT::pname:requiredSubgroupSize
-  * [[VUID-VkPipelineShaderStageCreateInfo-flags-02758]]
-    If pname:flags has both the
-    ename:VK_PIPELINE_SHADER_STAGE_CREATE_REQUIRE_FULL_SUBGROUPS_BIT_EXT and
-    ename:VK_PIPELINE_SHADER_STAGE_CREATE_ALLOW_VARYING_SUBGROUP_SIZE_BIT_EXT
-    flags set, the local workgroup size in the X dimension of the pipeline
-    must: be a multiple of
-    <<limits-max-subgroup-size,pname:maxSubgroupSize>>
-  * [[VUID-VkPipelineShaderStageCreateInfo-flags-02759]]
-    If pname:flags has the
-    ename:VK_PIPELINE_SHADER_STAGE_CREATE_REQUIRE_FULL_SUBGROUPS_BIT_EXT
-    flag set and pname:flags does not have the
-    ename:VK_PIPELINE_SHADER_STAGE_CREATE_ALLOW_VARYING_SUBGROUP_SIZE_BIT_EXT
-    flag set and no
-    slink:VkPipelineShaderStageRequiredSubgroupSizeCreateInfoEXT structure
-    is included in the pname:pNext chain, the local workgroup size in the X
-    dimension of the pipeline must: be a multiple of
-    <<limits-subgroup-size,pname:subgroupSize>>
-endif::VK_EXT_subgroup_size_control[]
-  * [[VUID-VkPipelineShaderStageCreateInfo-module-04145]]
-    The SPIR-V code that was used to create pname:module must: be valid as
-    described by the <<spirv-spec,Khronos SPIR-V Specification>> after
-    applying the specializations provided in pname:pSpecializationInfo, if
-    any, and then converting all specialization constants into fixed
-    constants
-****
-
-include::{generated}/validity/structs/VkPipelineShaderStageCreateInfo.txt[]
---
-
-[open,refpage='VkPipelineShaderStageCreateFlags',desc='Bitmask of VkPipelineShaderStageCreateFlagBits',type='flags']
---
-include::{generated}/api/flags/VkPipelineShaderStageCreateFlags.txt[]
-
-tname:VkPipelineShaderStageCreateFlags is a bitmask type for setting a mask
-of zero or more elink:VkPipelineShaderStageCreateFlagBits.
---
-
-[open,refpage='VkPipelineShaderStageCreateFlagBits',desc='Bitmask controlling how a pipeline shader stage is created',type='enums']
---
-Possible values of the pname:flags member of
-slink:VkPipelineShaderStageCreateInfo specifying how a pipeline shader stage
-is created, are:
-
-include::{generated}/api/enums/VkPipelineShaderStageCreateFlagBits.txt[]
-
-ifdef::VK_EXT_subgroup_size_control[]
-  * ename:VK_PIPELINE_SHADER_STAGE_CREATE_ALLOW_VARYING_SUBGROUP_SIZE_BIT_EXT
-    specifies that the
-    <<interfaces-builtin-variables-sgs,code:SubgroupSize>> may: vary in the
-    shader stage.
-  * ename:VK_PIPELINE_SHADER_STAGE_CREATE_REQUIRE_FULL_SUBGROUPS_BIT_EXT
-    specifies that the subgroup sizes must: be launched with all invocations
-    active in the compute stage.
-
-[NOTE]
-.Note
-====
-If ename:VK_PIPELINE_SHADER_STAGE_CREATE_ALLOW_VARYING_SUBGROUP_SIZE_BIT_EXT
-and ename:VK_PIPELINE_SHADER_STAGE_CREATE_REQUIRE_FULL_SUBGROUPS_BIT_EXT are
-specified and <<limits-max-subgroup-size,pname:minSubgroupSize>> does not
-equal <<limits-max-subgroup-size,pname:maxSubgroupSize>> and no
-<<pipelines-required-subgroup-size, required subgroup size>> is specified,
-then the only way to guarantee that the 'X' dimension of the local workgroup
-size is a multiple of <<interfaces-builtin-variables-sgs,code:SubgroupSize>>
-is to make it a multiple of pname:maxSubgroupSize.
-Under these conditions, you are guaranteed full subgroups but not any
-particular subgroup size.
-====
-
-endif::VK_EXT_subgroup_size_control[]
---
-
-[open,refpage='VkShaderStageFlagBits',desc='Bitmask specifying a pipeline stage',type='enums']
---
-Commands and structures which need to specify one or more shader stages do
-so using a bitmask whose bits correspond to stages.
-Bits which can: be set to specify shader stages are:
-
-include::{generated}/api/enums/VkShaderStageFlagBits.txt[]
-
-  * ename:VK_SHADER_STAGE_VERTEX_BIT specifies the vertex stage.
-  * ename:VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT specifies the
-    tessellation control stage.
-  * ename:VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT specifies the
-    tessellation evaluation stage.
-  * ename:VK_SHADER_STAGE_GEOMETRY_BIT specifies the geometry stage.
-  * ename:VK_SHADER_STAGE_FRAGMENT_BIT specifies the fragment stage.
-  * ename:VK_SHADER_STAGE_COMPUTE_BIT specifies the compute stage.
-  * ename:VK_SHADER_STAGE_ALL_GRAPHICS is a combination of bits used as
-    shorthand to specify all graphics stages defined above (excluding the
-    compute stage).
-  * ename:VK_SHADER_STAGE_ALL is a combination of bits used as shorthand to
-    specify all shader stages supported by the device, including all
-    additional stages which are introduced by extensions.
-ifdef::VK_NV_mesh_shader[]
-  * ename:VK_SHADER_STAGE_TASK_BIT_NV specifies the task stage.
-  * ename:VK_SHADER_STAGE_MESH_BIT_NV specifies the mesh stage.
-endif::VK_NV_mesh_shader[]
-ifdef::VK_NV_ray_tracing,VK_KHR_ray_tracing_pipeline[]
-  * ename:VK_SHADER_STAGE_RAYGEN_BIT_KHR specifies the ray generation stage.
-  * ename:VK_SHADER_STAGE_ANY_HIT_BIT_KHR specifies the any-hit stage.
-  * ename:VK_SHADER_STAGE_CLOSEST_HIT_BIT_KHR specifies the closest hit
-    stage.
-  * ename:VK_SHADER_STAGE_MISS_BIT_KHR specifies the miss stage.
-  * ename:VK_SHADER_STAGE_INTERSECTION_BIT_KHR specifies the intersection
-    stage.
-  * ename:VK_SHADER_STAGE_CALLABLE_BIT_KHR specifies the callable stage.
-endif::VK_NV_ray_tracing,VK_KHR_ray_tracing_pipeline[]
-
-[NOTE]
-.Note
-====
-ename:VK_SHADER_STAGE_ALL_GRAPHICS only includes the original five graphics
-stages included in Vulkan 1.0, and not any stages added by extensions.
-Thus, it may not have the desired effect in all cases.
-====
---
-
-[open,refpage='VkShaderStageFlags',desc='Bitmask of VkShaderStageFlagBits',type='flags']
---
-include::{generated}/api/flags/VkShaderStageFlags.txt[]
-
-tname:VkShaderStageFlags is a bitmask type for setting a mask of zero or
-more elink:VkShaderStageFlagBits.
---
-
-ifdef::VK_EXT_subgroup_size_control[]
-[open,refpage='VkPipelineShaderStageRequiredSubgroupSizeCreateInfoEXT',desc='Structure specifying the required subgroup size of a newly created pipeline shader stage',type='structs']
---
-The sname:VkPipelineShaderStageRequiredSubgroupSizeCreateInfoEXT structure
-is defined as:
-
-include::{generated}/api/structs/VkPipelineShaderStageRequiredSubgroupSizeCreateInfoEXT.txt[]
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * [[pipelines-required-subgroup-size]] pname:requiredSubgroupSize is an
-    unsigned integer value that specifies the required subgroup size for the
-    newly created pipeline shader stage.
-
-.Valid Usage
-****
-  * [[VUID-VkPipelineShaderStageRequiredSubgroupSizeCreateInfoEXT-requiredSubgroupSize-02760]]
-    pname:requiredSubgroupSize must: be a power-of-two integer
-  * [[VUID-VkPipelineShaderStageRequiredSubgroupSizeCreateInfoEXT-requiredSubgroupSize-02761]]
-    pname:requiredSubgroupSize must: be greater or equal to
-    <<limits-min-subgroup-size,minSubgroupSize>>
-  * [[VUID-VkPipelineShaderStageRequiredSubgroupSizeCreateInfoEXT-requiredSubgroupSize-02762]]
-    pname:requiredSubgroupSize must: be less than or equal to
-    <<limits-max-subgroup-size,maxSubgroupSize>>
-****
-
-
-If a sname:VkPipelineShaderStageRequiredSubgroupSizeCreateInfoEXT structure
-is included in the pname:pNext chain of
-slink:VkPipelineShaderStageCreateInfo, it specifies that the pipeline shader
-stage being compiled has a required subgroup size.
-
-include::{generated}/validity/structs/VkPipelineShaderStageRequiredSubgroupSizeCreateInfoEXT.txt[]
---
-endif::VK_EXT_subgroup_size_control[]
-
-ifdef::VK_HUAWEI_subpass_shading[]
-[open,refpage='VkSubpassShadingPipelineCreateInfoHUAWEI',desc='Structure specifying parameters of a newly created subpass shading pipeline',type='structs']
---
-A subpass shading pipeline is a compute pipeline which must: be called only
-in a subpass of a render pass with work dimensions specified by render area
-size.
-The subpass shading pipeline shader is a compute shader allowed to access
-input attachments specified in the calling subpass.
-To create a subpass shading pipeline, call flink:vkCreateComputePipelines
-with slink:VkSubpassShadingPipelineCreateInfoHUAWEI in the pname:pNext chain
-of slink:VkComputePipelineCreateInfo.
-
-The sname:VkSubpassShadingPipelineCreateInfoHUAWEI structure is defined as:
-
-include::{generated}/api/structs/VkSubpassShadingPipelineCreateInfoHUAWEI.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:renderPass is a handle to a render pass object describing the
-    environment in which the pipeline will be used.
-    The pipeline must: only be used with a render pass instance compatible
-    with the one provided.
-    See <<renderpass-compatibility,Render Pass Compatibility>> for more
-    information.
-  * pname:subpass is the index of the subpass in the render pass where this
-    pipeline will be used.
-
-.Valid Usage
-****
-  * [[VUID-VkSubpassShadingPipelineCreateInfoHUAWEI-subpass-04946]]
-    pname:subpass must: be created with
-    ename:VK_PIPELINE_BIND_POINT_SUBPASS_SHADING_HUAWEI bind point
-****
-
-include::{generated}/validity/structs/VkSubpassShadingPipelineCreateInfoHUAWEI.txt[]
---
-
-[open,refpage='vkGetDeviceSubpassShadingMaxWorkgroupSizeHUAWEI',desc='Query maximum supported subpass shading workgroup size for a give render pass',type='protos']
---
-A subpass shading pipeline's workgroup size is a 2D vector with number of
-power-of-two in width and height.
-The maximum number of width and height is implementation dependent, and may:
-vary for different formats and sample counts of attachments in a render
-pass.
-
-To query the maximum workgroup size, call:
-
-include::{generated}/api/protos/vkGetDeviceSubpassShadingMaxWorkgroupSizeHUAWEI.txt[]
-
-  * pname:device is a handle to a local device object that was used to
-    create the given render pass.
-  * pname:renderPass is a handle to a render pass object describing the
-    environment in which the pipeline will be used.
-    The pipeline must: only be used with a render pass instance compatible
-    with the one provided.
-    See <<renderpass-compatibility,Render Pass Compatibility>> for more
-    information.
-  * pname:pMaxWorkgroupSize is a pointer to a slink:VkExtent2D structure.
-
-include::{generated}/validity/protos/vkGetDeviceSubpassShadingMaxWorkgroupSizeHUAWEI.txt[]
---
-endif::VK_HUAWEI_subpass_shading[]
-
-
-[[pipelines-graphics]]
-== Graphics Pipelines
-
-Graphics pipelines consist of multiple shader stages, multiple
-fixed-function pipeline stages, and a pipeline layout.
-
-[open,refpage='vkCreateGraphicsPipelines',desc='Create graphics pipelines',type='protos']
---
-To create graphics pipelines, call:
-
-include::{generated}/api/protos/vkCreateGraphicsPipelines.txt[]
-
-  * pname:device is the logical device that creates the graphics pipelines.
-  * pname:pipelineCache is either dlink:VK_NULL_HANDLE, indicating that
-    pipeline caching is disabled; or the handle of a valid
-    <<pipelines-cache,pipeline cache>> object, in which case use of that
-    cache is enabled for the duration of the command.
-  * pname:createInfoCount is the length of the pname:pCreateInfos and
-    pname:pPipelines arrays.
-  * pname:pCreateInfos is a pointer to an array of
-    slink:VkGraphicsPipelineCreateInfo structures.
-  * pname:pAllocator controls host memory allocation as described in the
-    <<memory-allocation, Memory Allocation>> chapter.
-  * pname:pPipelines is a pointer to an array of slink:VkPipeline handles in
-    which the resulting graphics pipeline objects are returned.
-
-The slink:VkGraphicsPipelineCreateInfo structure includes an array of
-slink:VkPipelineShaderStageCreateInfo structures for each of the desired
-active shader stages, as well as creation information for all relevant
-fixed-function stages, and a pipeline layout.
-
-.Valid Usage
-****
-  * [[VUID-vkCreateGraphicsPipelines-flags-00720]]
-    If the pname:flags member of any element of pname:pCreateInfos contains
-    the ename:VK_PIPELINE_CREATE_DERIVATIVE_BIT flag, and the
-    pname:basePipelineIndex member of that same element is not `-1`,
-    pname:basePipelineIndex must: be less than the index into
-    pname:pCreateInfos that corresponds to that element
-  * [[VUID-vkCreateGraphicsPipelines-flags-00721]]
-    If the pname:flags member of any element of pname:pCreateInfos contains
-    the ename:VK_PIPELINE_CREATE_DERIVATIVE_BIT flag, the base pipeline
-    must: have been created with the
-    ename:VK_PIPELINE_CREATE_ALLOW_DERIVATIVES_BIT flag set
-ifdef::VK_EXT_pipeline_creation_cache_control[]
-  * [[VUID-vkCreateGraphicsPipelines-pipelineCache-02876]]
-    If pname:pipelineCache was created with
-    ename:VK_PIPELINE_CACHE_CREATE_EXTERNALLY_SYNCHRONIZED_BIT_EXT, host
-    access to pname:pipelineCache must: be
-    <<fundamentals-threadingbehavior,externally synchronized>>
-endif::VK_EXT_pipeline_creation_cache_control[]
-****
-
-ifdef::VK_EXT_pipeline_creation_cache_control[]
-[NOTE]
-.Note
-====
-An implicit cache may be provided by the implementation or a layer.
-For this reason, it is still valid to set
-ename:VK_PIPELINE_CREATE_FAIL_ON_PIPELINE_COMPILE_REQUIRED_BIT_EXT on
-pname:flags for any element of pname:pCreateInfos while passing
-dlink:VK_NULL_HANDLE for pname:pipelineCache.
-====
-endif::VK_EXT_pipeline_creation_cache_control[]
-
-include::{generated}/validity/protos/vkCreateGraphicsPipelines.txt[]
---
-
-[open,refpage='VkGraphicsPipelineCreateInfo',desc='Structure specifying parameters of a newly created graphics pipeline',type='structs']
---
-The sname:VkGraphicsPipelineCreateInfo structure is defined as:
-
-include::{generated}/api/structs/VkGraphicsPipelineCreateInfo.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:flags is a bitmask of elink:VkPipelineCreateFlagBits specifying
-    how the pipeline will be generated.
-  * pname:stageCount is the number of entries in the pname:pStages array.
-  * pname:pStages is a pointer to an array of pname:stageCount
-    slink:VkPipelineShaderStageCreateInfo structures describing the set of
-    the shader stages to be included in the graphics pipeline.
-  * pname:pVertexInputState is a pointer to a
-    slink:VkPipelineVertexInputStateCreateInfo structure.
-ifdef::VK_NV_mesh_shader[]
-    It is ignored if the pipeline includes a mesh shader stage.
-endif::VK_NV_mesh_shader[]
-ifdef::VK_EXT_vertex_input_dynamic_state[]
-    It is ignored if the pipeline is created with the
-    ename:VK_DYNAMIC_STATE_VERTEX_INPUT_EXT dynamic state set.
-endif::VK_EXT_vertex_input_dynamic_state[]
-  * pname:pInputAssemblyState is a pointer to a
-    slink:VkPipelineInputAssemblyStateCreateInfo structure which determines
-    input assembly behavior, as described in <<drawing, Drawing Commands>>.
-ifdef::VK_NV_mesh_shader[]
-    It is ignored if the pipeline includes a mesh shader stage.
-endif::VK_NV_mesh_shader[]
-  * pname:pTessellationState is a pointer to a
-    slink:VkPipelineTessellationStateCreateInfo structure, and is ignored if
-    the pipeline does not include a tessellation control shader stage and
-    tessellation evaluation shader stage.
-  * pname:pViewportState is a pointer to a
-    slink:VkPipelineViewportStateCreateInfo structure, and is ignored if the
-    pipeline has rasterization disabled.
-  * pname:pRasterizationState is a pointer to a
-    slink:VkPipelineRasterizationStateCreateInfo structure.
-  * pname:pMultisampleState is a pointer to a
-    slink:VkPipelineMultisampleStateCreateInfo structure, and is ignored if
-    the pipeline has rasterization disabled.
-  * pname:pDepthStencilState is a pointer to a
-    slink:VkPipelineDepthStencilStateCreateInfo structure, and is ignored if
-    the pipeline has rasterization disabled or if no depth/stencil
-    attachment is used.
-  * pname:pColorBlendState is a pointer to a
-    slink:VkPipelineColorBlendStateCreateInfo structure, and is ignored if
-    the pipeline has rasterization disabled or if no color attachments are
-    used.
-  * pname:pDynamicState is a pointer to a
-    slink:VkPipelineDynamicStateCreateInfo structure, and is used to
-    indicate which properties of the pipeline state object are dynamic and
-    can: be changed independently of the pipeline state.
-    This can: be `NULL`, which means no state in the pipeline is considered
-    dynamic.
-  * pname:layout is the description of binding locations used by both the
-    pipeline and descriptor sets used with the pipeline.
-  * pname:renderPass is a handle to a render pass object describing the
-    environment in which the pipeline will be used.
-    The pipeline must: only be used with a render pass instance compatible
-    with the one provided.
-    See <<renderpass-compatibility,Render Pass Compatibility>> for more
-    information.
-  * pname:subpass is the index of the subpass in the render pass where this
-    pipeline will be used.
-  * pname:basePipelineHandle is a pipeline to derive from.
-  * pname:basePipelineIndex is an index into the pname:pCreateInfos
-    parameter to use as a pipeline to derive from.
-
-The parameters pname:basePipelineHandle and pname:basePipelineIndex are
-described in more detail in <<pipelines-pipeline-derivatives,Pipeline
-Derivatives>>.
-
-ifdef::VK_NV_glsl_shader[]
-If any shader stage fails to compile,
-ifdef::VK_EXT_debug_report[]
-the compile log will be reported back to the application, and
-endif::VK_EXT_debug_report[]
-ename:VK_ERROR_INVALID_SHADER_NV will be generated.
-endif::VK_NV_glsl_shader[]
-
-[[pipeline-graphics-subsets]]
-The state required for a graphics pipeline is divided into
-<<pipeline-graphics-subsets-vertex-input, vertex input state>>,
-<<pipeline-graphics-subsets-pre-rasterization,pre-rasterization shader
-state>>, <<pipeline-graphics-subsets-fragment-shader,fragment shader
-state>>, and <<pipeline-graphics-subsets-fragment-output,fragment output
-state>>.
-
-[[pipeline-graphics-subsets-vertex-input]]
-Vertex input state is defined by:
-
-  * slink:VkPipelineVertexInputStateCreateInfo
-  * slink:VkPipelineInputAssemblyStateCreateInfo
-
-[[pipeline-graphics-subsets-pre-rasterization]]
-Pre-rasterization shader state is defined by:
-
-  * slink:VkPipelineShaderStageCreateInfo entries for:
-  ** Vertex shaders
-  ** Tessellation control shaders
-  ** Tessellation evaluation shaders
-  ** Geometry shaders
-ifdef::VK_NV_mesh_shader[]
-  ** Task shaders
-  ** Mesh shaders
-endif::VK_NV_mesh_shader[]
-  * Within the slink:VkPipelineLayout, all bindings that affect the
-    specified shader stages
-  * slink:VkPipelineViewportStateCreateInfo
-  * slink:VkPipelineRasterizationStateCreateInfo
-  * slink:VkPipelineTessellationStateCreateInfo if tessellation stages are
-    included.
-  * slink:VkRenderPass and pname:subpass parameter
-ifdef::VK_EXT_discard_rectangles[]
-  * slink:VkPipelineDiscardRectangleStateCreateInfoEXT
-endif::VK_EXT_discard_rectangles[]
-ifdef::VK_KHR_fragment_shading_rate[]
-  * slink:VkPipelineFragmentShadingRateStateCreateInfoKHR
-ifdef::VK_NV_fragment_shading_rate_enums[]
-  * slink:VkPipelineFragmentShadingRateEnumStateCreateInfoNV
-endif::VK_NV_fragment_shading_rate_enums[]
-endif::VK_KHR_fragment_shading_rate[]
-
-[[pipeline-graphics-subsets-fragment-shader]]
-Fragment shader state is defined by:
-
-  * A slink:VkPipelineShaderStageCreateInfo entry for the fragment shader
-  * Within the slink:VkPipelineLayout, all bindings that affect the fragment
-    shader
-  * slink:VkPipelineMultisampleStateCreateInfo
-  * slink:VkPipelineDepthStencilStateCreateInfo
-  * slink:VkRenderPass and pname:subpass parameter
-ifdef::VK_KHR_fragment_shading_rate[]
-  * slink:VkPipelineFragmentShadingRateStateCreateInfoKHR
-ifdef::VK_NV_fragment_shading_rate_enums[]
-  * slink:VkPipelineFragmentShadingRateEnumStateCreateInfoNV
-endif::VK_NV_fragment_shading_rate_enums[]
-endif::VK_KHR_fragment_shading_rate[]
-
-[[pipeline-graphics-subsets-fragment-output]]
-Fragment output state is defined by:
-
-  * slink:VkPipelineColorBlendStateCreateInfo
-  * The pname:alphaToCoverageEnable and pname:alphaToOneEnable members of
-    slink:VkPipelineMultisampleStateCreateInfo.
-  * slink:VkRenderPass and pname:subpass parameter
-
-[[pipeline-graphics-subsets-complete]]
-A complete graphics pipeline always includes
-<<pipeline-graphics-subsets-pre-rasterization, pre-rasterization shader
-state>>, with other subsets included depending on that state.
-If the <<pipeline-graphics-subsets-pre-rasterization, pre-rasterization
-shader state>> includes a vertex shader, then
-<<pipeline-graphics-subsets-vertex-input, vertex input state>> is included
-in a complete graphics pipeline.
-If the value of
-slink:VkPipelineRasterizationStateCreateInfo::pname:rasterizerDiscardEnable
-in the <<pipeline-graphics-subsets-pre-rasterization, pre-rasterization
-shader state>> is ename:VK_FALSE
-ifdef::VK_EXT_extended_dynamic_state2[]
-or the ename:VK_DYNAMIC_STATE_RASTERIZER_DISCARD_ENABLE_EXT dynamic state is
-enabled
-endif::VK_EXT_extended_dynamic_state2[]
-<<pipeline-graphics-subsets-fragment-shader, fragment shader state>> and
-<<pipeline-graphics-subsets-fragment-output, fragment output interface
-state>> is included in a complete graphics pipeline.
-
-Pipelines must: be created with a complete set of pipeline state.
-
-.Valid Usage
-****
-  * [[VUID-VkGraphicsPipelineCreateInfo-flags-00722]]
-    If pname:flags contains the ename:VK_PIPELINE_CREATE_DERIVATIVE_BIT
-    flag, and pname:basePipelineIndex is -1, pname:basePipelineHandle must:
-    be a valid handle to a graphics sname:VkPipeline
-  * [[VUID-VkGraphicsPipelineCreateInfo-flags-00723]]
-    If pname:flags contains the ename:VK_PIPELINE_CREATE_DERIVATIVE_BIT
-    flag, and pname:basePipelineHandle is dlink:VK_NULL_HANDLE,
-    pname:basePipelineIndex must: be a valid index into the calling
-    command's pname:pCreateInfos parameter
-  * [[VUID-VkGraphicsPipelineCreateInfo-flags-00724]]
-    If pname:flags contains the ename:VK_PIPELINE_CREATE_DERIVATIVE_BIT
-    flag, and pname:basePipelineIndex is not -1, pname:basePipelineHandle
-    must: be dlink:VK_NULL_HANDLE
-  * [[VUID-VkGraphicsPipelineCreateInfo-flags-00725]]
-    If pname:flags contains the ename:VK_PIPELINE_CREATE_DERIVATIVE_BIT
-    flag, and pname:basePipelineHandle is not dlink:VK_NULL_HANDLE,
-    pname:basePipelineIndex must: be -1
-  * [[VUID-VkGraphicsPipelineCreateInfo-stage-00726]]
-    The pname:stage member of each element of pname:pStages must: be unique
-ifndef::VK_NV_mesh_shader[]
-  * [[VUID-VkGraphicsPipelineCreateInfo-stage-00727]]
-    If the pipeline is being created with
-    <<pipeline-graphics-subsets-pre-rasterization, pre-rasterization shader
-    state>> the pname:stage member of one element of pname:pStages must: be
-    ename:VK_SHADER_STAGE_VERTEX_BIT
-endif::VK_NV_mesh_shader[]
-ifdef::VK_NV_mesh_shader[]
-  * [[VUID-VkGraphicsPipelineCreateInfo-pStages-02095]]
-    If the pipeline is being created with
-    <<pipeline-graphics-subsets-pre-rasterization, pre-rasterization shader
-    state>> the geometric shader stages provided in pname:pStages must: be
-    either from the mesh shading pipeline (pname:stage is
-    ename:VK_SHADER_STAGE_TASK_BIT_NV or ename:VK_SHADER_STAGE_MESH_BIT_NV)
-    or from the primitive shading pipeline (pname:stage is
-    ename:VK_SHADER_STAGE_VERTEX_BIT,
-    ename:VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT,
-    ename:VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT, or
-    ename:VK_SHADER_STAGE_GEOMETRY_BIT)
-  * [[VUID-VkGraphicsPipelineCreateInfo-stage-02096]]
-    If the pipeline is being created with
-    <<pipeline-graphics-subsets-pre-rasterization, pre-rasterization shader
-    state>> the pname:stage member of one element of pname:pStages must: be
-    either ename:VK_SHADER_STAGE_VERTEX_BIT or
-    ename:VK_SHADER_STAGE_MESH_BIT_NV
-endif::VK_NV_mesh_shader[]
-  * [[VUID-VkGraphicsPipelineCreateInfo-stage-00728]]
-    The pname:stage member of each element of pname:pStages must: not be
-    ename:VK_SHADER_STAGE_COMPUTE_BIT
-  * [[VUID-VkGraphicsPipelineCreateInfo-pStages-00729]]
-    If the pipeline is being created with
-    <<pipeline-graphics-subsets-pre-rasterization, pre-rasterization shader
-    state>> and pname:pStages includes a tessellation control shader stage,
-    it must: include a tessellation evaluation shader stage
-  * [[VUID-VkGraphicsPipelineCreateInfo-pStages-00730]]
-    If the pipeline is being created with
-    <<pipeline-graphics-subsets-pre-rasterization, pre-rasterization shader
-    state>> and pname:pStages includes a tessellation evaluation shader
-    stage, it must: include a tessellation control shader stage
-  * [[VUID-VkGraphicsPipelineCreateInfo-pStages-00731]]
-    If the pipeline is being created with
-    <<pipeline-graphics-subsets-pre-rasterization, pre-rasterization shader
-    state>> and pname:pStages includes a tessellation control shader stage
-    and a tessellation evaluation shader stage, pname:pTessellationState
-    must: be a valid pointer to a valid
-    slink:VkPipelineTessellationStateCreateInfo structure
-  * [[VUID-VkGraphicsPipelineCreateInfo-pStages-00732]]
-    If the pipeline is being created with
-    <<pipeline-graphics-subsets-pre-rasterization, pre-rasterization shader
-    state>> and pname:pStages includes tessellation shader stages, the
-    shader code of at least one stage must: contain an code:OpExecutionMode
-    instruction that specifies the type of subdivision in the pipeline
-  * [[VUID-VkGraphicsPipelineCreateInfo-pStages-00733]]
-    If the pipeline is being created with
-    <<pipeline-graphics-subsets-pre-rasterization, pre-rasterization shader
-    state>> and pname:pStages includes tessellation shader stages, and the
-    shader code of both stages contain an code:OpExecutionMode instruction
-    that specifies the type of subdivision in the pipeline, they must: both
-    specify the same subdivision mode
-  * [[VUID-VkGraphicsPipelineCreateInfo-pStages-00734]]
-    If the pipeline is being created with
-    <<pipeline-graphics-subsets-pre-rasterization, pre-rasterization shader
-    state>> and pname:pStages includes tessellation shader stages, the
-    shader code of at least one stage must: contain an code:OpExecutionMode
-    instruction that specifies the output patch size in the pipeline
-  * [[VUID-VkGraphicsPipelineCreateInfo-pStages-00735]]
-    If the pipeline is being created with
-    <<pipeline-graphics-subsets-pre-rasterization, pre-rasterization shader
-    state>> and pname:pStages includes tessellation shader stages, and the
-    shader code of both contain an code:OpExecutionMode instruction that
-    specifies the out patch size in the pipeline, they must: both specify
-    the same patch size
-  * [[VUID-VkGraphicsPipelineCreateInfo-pStages-00736]]
-    If the pipeline is being created with
-    <<pipeline-graphics-subsets-pre-rasterization, pre-rasterization shader
-    state>> and pname:pStages includes tessellation shader stages, the
-    pname:topology member of pname:pInputAssembly must: be
-    ename:VK_PRIMITIVE_TOPOLOGY_PATCH_LIST
-  * [[VUID-VkGraphicsPipelineCreateInfo-topology-00737]]
-    If the pipeline is being created with
-    <<pipeline-graphics-subsets-pre-rasterization, pre-rasterization shader
-    state>> and the pname:topology member of pname:pInputAssembly is
-    ename:VK_PRIMITIVE_TOPOLOGY_PATCH_LIST, pname:pStages must: include
-    tessellation shader stages
-  * [[VUID-VkGraphicsPipelineCreateInfo-pStages-00738]]
-    If the pipeline is being created with
-    <<pipeline-graphics-subsets-pre-rasterization, pre-rasterization shader
-    state>> and pname:pStages includes a geometry shader stage, and does not
-    include any tessellation shader stages, its shader code must: contain an
-    code:OpExecutionMode instruction that specifies an input primitive type
-    that is <<shaders-geometry-execution, compatible>> with the primitive
-    topology specified in pname:pInputAssembly
-  * [[VUID-VkGraphicsPipelineCreateInfo-pStages-00739]]
-    If the pipeline is being created with
-    <<pipeline-graphics-subsets-pre-rasterization, pre-rasterization shader
-    state>> and pname:pStages includes a geometry shader stage, and also
-    includes tessellation shader stages, its shader code must: contain an
-    code:OpExecutionMode instruction that specifies an input primitive type
-    that is <<shaders-geometry-execution, compatible>> with the primitive
-    topology that is output by the tessellation stages
-  * [[VUID-VkGraphicsPipelineCreateInfo-pStages-00740]]
-    If the pipeline is being created with
-    <<pipeline-graphics-subsets-pre-rasterization, pre-rasterization shader
-    state>> and <<pipeline-graphics-subsets-fragment-shader, fragment shader
-    state>>, it includes both a fragment shader and a geometry shader, and
-    the fragment shader code reads from an input variable that is decorated
-    with code:PrimitiveId, then the geometry shader code must: write to a
-    matching output variable, decorated with code:PrimitiveId, in all
-    execution paths
-ifdef::VK_NV_mesh_shader[]
-  * [[VUID-VkGraphicsPipelineCreateInfo-PrimitiveId-06264]]
-    If the pipeline is being created with
-    <<pipeline-graphics-subsets-pre-rasterization, pre-rasterization shader
-    state>>, it includes a mesh shader and the fragment shader code reads
-    from an input variable that is decorated with code:PrimitiveId, then the
-    mesh shader code must: write to a matching output variable, decorated
-    with code:PrimitiveId, in all execution paths
-endif::VK_NV_mesh_shader[]
-  * [[VUID-VkGraphicsPipelineCreateInfo-renderPass-06038]]
-    If pname:renderPass is not dlink:VK_NULL_HANDLE and the pipeline is
-    being created with <<pipeline-graphics-subsets-fragment-shader, fragment
-    shader state>> the fragment shader must: not read from any input
-    attachment that is defined as ename:VK_ATTACHMENT_UNUSED in
-    pname:subpass
-  * [[VUID-VkGraphicsPipelineCreateInfo-pStages-00742]]
-    If the pipeline is being created with
-    <<pipeline-graphics-subsets-pre-rasterization, pre-rasterization shader
-    state>> and multiple pre-rasterization shader stages are included in
-    pname:pStages, the shader code for the entry points identified by those
-    pname:pStages and the rest of the state identified by this structure
-    must: adhere to the pipeline linking rules described in the
-    <<interfaces,Shader Interfaces>> chapter
-  * [[VUID-VkGraphicsPipelineCreateInfo-None-04889]]
-    If the pipeline is being created with
-    <<pipeline-graphics-subsets-pre-rasterization, pre-rasterization shader
-    state>> and <<pipeline-graphics-subsets-fragment-shader, fragment shader
-    state>>, the fragment shader and last
-    <<pipeline-graphics-subsets-pre-rasterization,pre-rasterization shader
-    stage>> and any relevant state must: adhere to the pipeline linking
-    rules described in the <<interfaces,Shader Interfaces>> chapter
-  * [[VUID-VkGraphicsPipelineCreateInfo-renderPass-06039]]
-    If pname:renderPass is not dlink:VK_NULL_HANDLE, the pipeline is being
-    created with <<pipeline-graphics-subsets-fragment-shader, fragment
-    shader state>>, and pname:subpass uses a depth/stencil attachment in
-    pname:renderPass with a read-only layout for the depth aspect in the
-    slink:VkAttachmentReference defined by pname:subpass, the
-    pname:depthWriteEnable member of pname:pDepthStencilState must: be
-    ename:VK_FALSE
-  * [[VUID-VkGraphicsPipelineCreateInfo-renderPass-06040]]
-    If pname:renderPass is not dlink:VK_NULL_HANDLE, the pipeline is being
-    created with <<pipeline-graphics-subsets-fragment-shader, fragment
-    shader state>>, and pname:subpass uses a depth/stencil attachment in
-    pname:renderPass with a read-only layout for the stencil aspect in the
-    slink:VkAttachmentReference defined by pname:subpass, the pname:failOp,
-    pname:passOp and pname:depthFailOp members of each of the pname:front
-    and pname:back members of pname:pDepthStencilState must: be
-    ename:VK_STENCIL_OP_KEEP
-  * [[VUID-VkGraphicsPipelineCreateInfo-renderPass-06041]]
-    If pname:renderPass is not dlink:VK_NULL_HANDLE, and the pipeline is
-    being created with <<pipeline-graphics-subsets-fragment-output, fragment
-    output interface state>>, then for each color attachment in the subpass,
-    if the <<potential-format-features,potential format features>> of the
-    format of the corresponding attachment description do not contain
-    ename:VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT, then the
-    pname:blendEnable member of the corresponding element of the
-    pname:pAttachments member of pname:pColorBlendState must: be
-    ename:VK_FALSE
-  * [[VUID-VkGraphicsPipelineCreateInfo-renderPass-06042]]
-    If pname:renderPass is not dlink:VK_NULL_HANDLE, and the pipeline is
-    being created with <<pipeline-graphics-subsets-fragment-output, fragment
-    output interface state>>, and the subpass uses color attachments, the
-    pname:attachmentCount member of pname:pColorBlendState must: be equal to
-    the pname:colorAttachmentCount used to create pname:subpass
-ifndef::VK_EXT_extended_dynamic_state[]
-  * [[VUID-VkGraphicsPipelineCreateInfo-pDynamicStates-00747]]
-    If the pipeline is being created with
-    <<pipeline-graphics-subsets-pre-rasterization, pre-rasterization shader
-    state>>, and no element of the pname:pDynamicStates member of
-    pname:pDynamicState is ename:VK_DYNAMIC_STATE_VIEWPORT, the
-    pname:pViewports member of pname:pViewportState must: be a valid pointer
-    to an array of pname:pViewportState->viewportCount valid
-    sname:VkViewport structures
-  * [[VUID-VkGraphicsPipelineCreateInfo-pDynamicStates-00748]]
-    If the pipeline is being created with
-    <<pipeline-graphics-subsets-pre-rasterization, pre-rasterization shader
-    state>>, and no element of the pname:pDynamicStates member of
-    pname:pDynamicState is ename:VK_DYNAMIC_STATE_SCISSOR, the
-    pname:pScissors member of pname:pViewportState must: be a valid pointer
-    to an array of pname:pViewportState->scissorCount sname:VkRect2D
-    structures
-endif::VK_EXT_extended_dynamic_state[]
-ifdef::VK_EXT_extended_dynamic_state[]
-  * [[VUID-VkGraphicsPipelineCreateInfo-pDynamicStates-04130]]
-    If the pipeline is being created with
-    <<pipeline-graphics-subsets-pre-rasterization, pre-rasterization shader
-    state>>, and no element of the pname:pDynamicStates member of
-    pname:pDynamicState is ename:VK_DYNAMIC_STATE_VIEWPORT or
-    ename:VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT, the pname:pViewports
-    member of pname:pViewportState must: be a valid pointer to an array of
-    pname:pViewportState->viewportCount valid sname:VkViewport structures
-  * [[VUID-VkGraphicsPipelineCreateInfo-pDynamicStates-04131]]
-    If the pipeline is being created with
-    <<pipeline-graphics-subsets-pre-rasterization, pre-rasterization shader
-    state>>, and no element of the pname:pDynamicStates member of
-    pname:pDynamicState is ename:VK_DYNAMIC_STATE_SCISSOR or
-    ename:VK_DYNAMIC_STATE_SCISSOR_WITH_COUNT_EXT, the pname:pScissors
-    member of pname:pViewportState must: be a valid pointer to an array of
-    pname:pViewportState->scissorCount sname:VkRect2D structures
-endif::VK_EXT_extended_dynamic_state[]
-  * [[VUID-VkGraphicsPipelineCreateInfo-pDynamicStates-00749]]
-    If the pipeline is being created with
-    <<pipeline-graphics-subsets-pre-rasterization, pre-rasterization shader
-    state>>, and the wide lines feature is not enabled, and no element of
-    the pname:pDynamicStates member of pname:pDynamicState is
-    ename:VK_DYNAMIC_STATE_LINE_WIDTH, the pname:lineWidth member of
-    pname:pRasterizationState must: be `1.0`
-  * [[VUID-VkGraphicsPipelineCreateInfo-rasterizerDiscardEnable-00750]]
-    If the pipeline is being created with
-    <<pipeline-graphics-subsets-pre-rasterization, pre-rasterization shader
-    state>>, and the pname:rasterizerDiscardEnable member of
-    pname:pRasterizationState is ename:VK_FALSE, pname:pViewportState must:
-    be a valid pointer to a valid slink:VkPipelineViewportStateCreateInfo
-    structure
-ifdef::VK_EXT_extended_dynamic_state2[]
-  * [[VUID-VkGraphicsPipelineCreateInfo-pViewportState-04892]]
-    If the pipeline is being created with
-    <<pipeline-graphics-subsets-pre-rasterization, pre-rasterization shader
-    state>>, and the graphics pipeline state was created with the
-    ename:VK_DYNAMIC_STATE_RASTERIZER_DISCARD_ENABLE_EXT dynamic state
-    enabled, pname:pViewportState must: be a valid pointer to a valid
-    slink:VkPipelineViewportStateCreateInfo structure
-endif::VK_EXT_extended_dynamic_state2[]
-  * [[VUID-VkGraphicsPipelineCreateInfo-rasterizerDiscardEnable-00751]]
-    If the pipeline is being created with
-    <<pipeline-graphics-subsets-fragment-shader, fragment shader state>>,
-    pname:pMultisampleState must: be a valid pointer to a valid
-    slink:VkPipelineMultisampleStateCreateInfo structure
-  * [[VUID-VkGraphicsPipelineCreateInfo-renderPass-06043]]
-    If pname:renderPass is not dlink:VK_NULL_HANDLE, the pipeline is being
-    created with <<pipeline-graphics-subsets-fragment-shader, fragment
-    shader state>>, and pname:subpass uses a depth/stencil attachment,
-    pname:pDepthStencilState must: be a valid pointer to a valid
-    slink:VkPipelineDepthStencilStateCreateInfo structure
-  * [[VUID-VkGraphicsPipelineCreateInfo-renderPass-06044]]
-    If pname:renderPass is not dlink:VK_NULL_HANDLE, the pipeline is being
-    created with <<pipeline-graphics-subsets-fragment-output, fragment
-    output interface state>>, and pname:subpass uses color attachments,
-    pname:pColorBlendState must: be a valid pointer to a valid
-    slink:VkPipelineColorBlendStateCreateInfo structure
-  * [[VUID-VkGraphicsPipelineCreateInfo-renderPass-06045]]
-    If pname:renderPass is not dlink:VK_NULL_HANDLE and the pipeline is
-    being created with <<pipeline-graphics-subsets-fragment-output, fragment
-    output interface state>>, pname:pColorBlendState->attachmentCount must:
-    be greater than the index of all color attachments that are not
-    ename:VK_ATTACHMENT_UNUSED for the pname:subpass index in
-    pname:renderPass
-  * [[VUID-VkGraphicsPipelineCreateInfo-pDynamicStates-00754]]
-    If the pipeline is being created with
-    <<pipeline-graphics-subsets-pre-rasterization, pre-rasterization shader
-    state>>, the depth bias clamping feature is not enabled, no element of
-    the pname:pDynamicStates member of pname:pDynamicState is
-    ename:VK_DYNAMIC_STATE_DEPTH_BIAS, and the pname:depthBiasEnable member
-    of pname:pRasterizationState is ename:VK_TRUE, the pname:depthBiasClamp
-    member of pname:pRasterizationState must: be `0.0`
-ifndef::VK_EXT_depth_range_unrestricted[]
-  * [[VUID-VkGraphicsPipelineCreateInfo-pDynamicStates-00755]]
-    If the pipeline is being created with
-    <<pipeline-graphics-subsets-fragment-shader, fragment shader state>>,
-    and no element of the pname:pDynamicStates member of pname:pDynamicState
-    is ename:VK_DYNAMIC_STATE_DEPTH_BOUNDS, and the
-    pname:depthBoundsTestEnable member of pname:pDepthStencilState is
-    ename:VK_TRUE, the pname:minDepthBounds and pname:maxDepthBounds members
-    of pname:pDepthStencilState must: be between `0.0` and `1.0`, inclusive
-endif::VK_EXT_depth_range_unrestricted[]
-ifdef::VK_EXT_depth_range_unrestricted[]
-  * [[VUID-VkGraphicsPipelineCreateInfo-pDynamicStates-02510]]
-    If the pipeline is being created with
-    <<pipeline-graphics-subsets-fragment-shader, fragment shader state>>,
-    and the `apiext:VK_EXT_depth_range_unrestricted` extension is not
-    enabled and no element of the pname:pDynamicStates member of
-    pname:pDynamicState is ename:VK_DYNAMIC_STATE_DEPTH_BOUNDS, and the
-    pname:depthBoundsTestEnable member of pname:pDepthStencilState is
-    ename:VK_TRUE, the pname:minDepthBounds and pname:maxDepthBounds members
-    of pname:pDepthStencilState must: be between `0.0` and `1.0`, inclusive
-endif::VK_EXT_depth_range_unrestricted[]
-ifdef::VK_EXT_sample_locations[]
-  * [[VUID-VkGraphicsPipelineCreateInfo-pDynamicStates-01521]]
-    If the pipeline is being created with
-    <<pipeline-graphics-subsets-fragment-shader, fragment shader state>>,
-    and no element of the pname:pDynamicStates member of pname:pDynamicState
-    is ename:VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT, and the
-    pname:sampleLocationsEnable member of a
-    slink:VkPipelineSampleLocationsStateCreateInfoEXT structure included in
-    the pname:pNext chain of pname:pMultisampleState is ename:VK_TRUE,
-    pname:sampleLocationsInfo.sampleLocationGridSize.width must: evenly
-    divide
-    slink:VkMultisamplePropertiesEXT::pname:sampleLocationGridSize.width as
-    returned by flink:vkGetPhysicalDeviceMultisamplePropertiesEXT with a
-    pname:samples parameter equaling pname:rasterizationSamples
-  * [[VUID-VkGraphicsPipelineCreateInfo-pDynamicStates-01522]]
-    If the pipeline is being created with
-    <<pipeline-graphics-subsets-fragment-shader, fragment shader state>>,
-    and no element of the pname:pDynamicStates member of pname:pDynamicState
-    is ename:VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT, and the
-    pname:sampleLocationsEnable member of a
-    slink:VkPipelineSampleLocationsStateCreateInfoEXT structure included in
-    the pname:pNext chain of pname:pMultisampleState is ename:VK_TRUE,
-    pname:sampleLocationsInfo.sampleLocationGridSize.height must: evenly
-    divide
-    slink:VkMultisamplePropertiesEXT::pname:sampleLocationGridSize.height as
-    returned by flink:vkGetPhysicalDeviceMultisamplePropertiesEXT with a
-    pname:samples parameter equaling pname:rasterizationSamples
-  * [[VUID-VkGraphicsPipelineCreateInfo-pDynamicStates-01523]]
-    If the pipeline is being created with
-    <<pipeline-graphics-subsets-fragment-shader, fragment shader state>>,
-    and no element of the pname:pDynamicStates member of pname:pDynamicState
-    is ename:VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT, and the
-    pname:sampleLocationsEnable member of a
-    slink:VkPipelineSampleLocationsStateCreateInfoEXT structure included in
-    the pname:pNext chain of pname:pMultisampleState is ename:VK_TRUE,
-    pname:sampleLocationsInfo.sampleLocationsPerPixel must: equal
-    pname:rasterizationSamples
-  * [[VUID-VkGraphicsPipelineCreateInfo-sampleLocationsEnable-01524]]
-    If the pipeline is being created with
-    <<pipeline-graphics-subsets-fragment-shader, fragment shader state>>,
-    and the pname:sampleLocationsEnable member of a
-    slink:VkPipelineSampleLocationsStateCreateInfoEXT structure included in
-    the pname:pNext chain of pname:pMultisampleState is ename:VK_TRUE, the
-    fragment shader code must: not statically use the extended instruction
-    code:InterpolateAtSample
-endif::VK_EXT_sample_locations[]
-  * [[VUID-VkGraphicsPipelineCreateInfo-layout-00756]]
-    pname:layout must: be
-    <<descriptorsets-pipelinelayout-consistency,consistent>> with all
-    shaders specified in pname:pStages
-  * [[VUID-VkGraphicsPipelineCreateInfo-subpass-00757]]
-    If the pipeline is being created with
-    <<pipeline-graphics-subsets-fragment-shader, fragment shader state>>,
-    and neither the `apiext:VK_AMD_mixed_attachment_samples` nor the
-    `apiext:VK_NV_framebuffer_mixed_samples` extensions are enabled, and if
-    pname:subpass uses color and/or depth/stencil attachments, then the
-    pname:rasterizationSamples member of pname:pMultisampleState must: be
-    the same as the sample count for those subpass attachments
-ifdef::VK_AMD_mixed_attachment_samples[]
-  * [[VUID-VkGraphicsPipelineCreateInfo-subpass-01505]]
-    If the pipeline is being created with
-    <<pipeline-graphics-subsets-fragment-shader, fragment shader state>>,
-    and the `apiext:VK_AMD_mixed_attachment_samples` extension is enabled,
-    and if pname:subpass uses color and/or depth/stencil attachments, then
-    the pname:rasterizationSamples member of pname:pMultisampleState must:
-    equal the maximum of the sample counts of those subpass attachments
-endif::VK_AMD_mixed_attachment_samples[]
-ifdef::VK_NV_framebuffer_mixed_samples[]
-  * [[VUID-VkGraphicsPipelineCreateInfo-subpass-01411]]
-    If the pipeline is being created with
-    <<pipeline-graphics-subsets-fragment-shader, fragment shader state>>,
-    and the `apiext:VK_NV_framebuffer_mixed_samples` extension is enabled,
-    and if pname:subpass has a depth/stencil attachment and depth test,
-    stencil test, or depth bounds test are enabled, then the
-    pname:rasterizationSamples member of pname:pMultisampleState must: be
-    the same as the sample count of the depth/stencil attachment
-  * [[VUID-VkGraphicsPipelineCreateInfo-subpass-01412]]
-    If the pipeline is being created with
-    <<pipeline-graphics-subsets-fragment-shader, fragment shader state>>,
-    and the `apiext:VK_NV_framebuffer_mixed_samples` extension is enabled,
-    and if pname:subpass has any color attachments, then the
-    pname:rasterizationSamples member of pname:pMultisampleState must: be
-    greater than or equal to the sample count for those subpass attachments
-endif::VK_NV_framebuffer_mixed_samples[]
-ifdef::VK_NV_coverage_reduction_mode[]
-  * [[VUID-VkGraphicsPipelineCreateInfo-coverageReductionMode-02722]]
-    If the pipeline is being created with
-    <<pipeline-graphics-subsets-fragment-shader, fragment shader state>>,
-    and the `apiext:VK_NV_coverage_reduction_mode` extension is enabled, the
-    coverage reduction mode specified by
-    slink:VkPipelineCoverageReductionStateCreateInfoNV::pname:coverageReductionMode,
-    the pname:rasterizationSamples member of pname:pMultisampleState and the
-    sample counts for the color and depth/stencil attachments (if the
-    subpass has them) must: be a valid combination returned by
-    fname:vkGetPhysicalDeviceSupportedFramebufferMixedSamplesCombinationsNV
-endif::VK_NV_coverage_reduction_mode[]
-  * [[VUID-VkGraphicsPipelineCreateInfo-subpass-00758]]
-    If the pipeline is being created with
-    <<pipeline-graphics-subsets-fragment-shader, fragment shader state>> and
-    pname:subpass does not use any color and/or depth/stencil attachments,
-    then the pname:rasterizationSamples member of pname:pMultisampleState
-    must: follow the rules for a <<renderpass-noattachments, zero-attachment
-    subpass>>
-  * [[VUID-VkGraphicsPipelineCreateInfo-renderPass-06046]]
-    If pname:renderPass is a valid renderPass, pname:subpass must: be a
-    valid subpass within pname:renderPass
-ifdef::VK_VERSION_1_1,VK_KHR_multiview[]
-  * [[VUID-VkGraphicsPipelineCreateInfo-renderPass-06047]]
-    If pname:renderPass is a valid renderPass, the pipeline is being created
-    with <<pipeline-graphics-subsets-pre-rasterization, pre-rasterization
-    shader state>>, and the pname:renderPass has multiview enabled and
-    pname:subpass has more than one bit set in the view mask and
-    pname:multiviewTessellationShader is not enabled, then pname:pStages
-    must: not include tessellation shaders
-  * [[VUID-VkGraphicsPipelineCreateInfo-renderPass-06048]]
-    If pname:renderPass is a valid renderPass, the pipeline is being created
-    with <<pipeline-graphics-subsets-pre-rasterization, pre-rasterization
-    shader state>>, and the pname:renderPass has multiview enabled and
-    pname:subpass has more than one bit set in the view mask and
-    pname:multiviewGeometryShader is not enabled, then pname:pStages must:
-    not include a geometry shader
-  * [[VUID-VkGraphicsPipelineCreateInfo-renderPass-06049]]
-    If pname:renderPass is a valid renderPass, the pipeline is being created
-    with <<pipeline-graphics-subsets-pre-rasterization, pre-rasterization
-    shader state>>, and the pname:renderPass has multiview enabled and
-    pname:subpass has more than one bit set in the view mask, shaders in the
-    pipeline must: not write to the code:Layer built-in output
-  * [[VUID-VkGraphicsPipelineCreateInfo-renderPass-06050]]
-    If pname:renderPass is a valid renderPass and the pipeline is being
-    created with <<pipeline-graphics-subsets-pre-rasterization,
-    pre-rasterization shader state>>, and the pname:renderPass has multiview
-    enabled, then all shaders must: not include variables decorated with the
-    code:Layer built-in decoration in their interfaces
-endif::VK_VERSION_1_1,VK_KHR_multiview[]
-ifdef::VK_VERSION_1_1,VK_KHR_device_group[]
-  * [[VUID-VkGraphicsPipelineCreateInfo-flags-00764]]
-    pname:flags must: not contain the ename:VK_PIPELINE_CREATE_DISPATCH_BASE
-    flag
-endif::VK_VERSION_1_1,VK_KHR_device_group[]
-ifdef::VK_VERSION_1_1,VK_KHR_maintenance2,VK_KHR_create_renderpass2[]
-  * [[VUID-VkGraphicsPipelineCreateInfo-pStages-01565]]
-    If the pipeline is being created with
-    <<pipeline-graphics-subsets-fragment-shader, fragment shader state>> and
-    an input attachment was referenced by an pname:aspectMask at
-    pname:renderPass creation time, the fragment shader must: only read from
-    the aspects that were specified for that input attachment
-endif::VK_VERSION_1_1,VK_KHR_maintenance2,VK_KHR_create_renderpass2[]
-  * [[VUID-VkGraphicsPipelineCreateInfo-layout-01688]]
-    The number of resources in pname:layout accessible to each shader stage
-    that is used by the pipeline must: be less than or equal to
-    sname:VkPhysicalDeviceLimits::pname:maxPerStageResources
-ifdef::VK_NV_clip_space_w_scaling[]
-  * [[VUID-VkGraphicsPipelineCreateInfo-pDynamicStates-01715]]
-    If the pipeline is being created with
-    <<pipeline-graphics-subsets-pre-rasterization, pre-rasterization shader
-    state>>, and no element of the pname:pDynamicStates member of
-    pname:pDynamicState is ename:VK_DYNAMIC_STATE_VIEWPORT_W_SCALING_NV, and
-    the pname:viewportWScalingEnable member of a
-    slink:VkPipelineViewportWScalingStateCreateInfoNV structure, included in
-    the pname:pNext chain of pname:pViewportState, is ename:VK_TRUE, the
-    pname:pViewportWScalings member of the
-    slink:VkPipelineViewportWScalingStateCreateInfoNV must: be a pointer to
-    an array of
-    slink:VkPipelineViewportWScalingStateCreateInfoNV::pname:viewportCount
-    valid slink:VkViewportWScalingNV structures
-endif::VK_NV_clip_space_w_scaling[]
-ifdef::VK_NV_scissor_exclusive[]
-  * [[VUID-VkGraphicsPipelineCreateInfo-pDynamicStates-04056]]
-    If the pipeline is being created with
-    <<pipeline-graphics-subsets-pre-rasterization, pre-rasterization shader
-    state>>, and no element of the pname:pDynamicStates member of
-    pname:pDynamicState is ename:VK_DYNAMIC_STATE_EXCLUSIVE_SCISSOR_NV, and
-    if pname:pViewportState->pNext chain includes a
-    slink:VkPipelineViewportExclusiveScissorStateCreateInfoNV structure, and
-    if its pname:exclusiveScissorCount member is not `0`, then its
-    pname:pExclusiveScissors member must: be a valid pointer to an array of
-    pname:exclusiveScissorCount slink:VkRect2D structures
-endif::VK_NV_scissor_exclusive[]
-ifdef::VK_NV_shading_rate_image[]
-  * [[VUID-VkGraphicsPipelineCreateInfo-pDynamicStates-04057]]
-    If the pipeline is being created with
-    <<pipeline-graphics-subsets-pre-rasterization, pre-rasterization shader
-    state>>, and no element of the pname:pDynamicStates member of
-    pname:pDynamicState is
-    ename:VK_DYNAMIC_STATE_VIEWPORT_SHADING_RATE_PALETTE_NV, and if
-    pname:pViewportState->pNext chain includes a
-    slink:VkPipelineViewportShadingRateImageStateCreateInfoNV structure,
-    then its pname:pShadingRatePalettes member must: be a valid pointer to
-    an array of pname:viewportCount valid slink:VkShadingRatePaletteNV
-    structures
-endif::VK_NV_shading_rate_image[]
-ifdef::VK_EXT_discard_rectangles[]
-  * [[VUID-VkGraphicsPipelineCreateInfo-pDynamicStates-04058]]
-    If the pipeline is being created with
-    <<pipeline-graphics-subsets-pre-rasterization, pre-rasterization shader
-    state>>, and no element of the pname:pDynamicStates member of
-    pname:pDynamicState is ename:VK_DYNAMIC_STATE_DISCARD_RECTANGLE_EXT, and
-    if pname:pNext chain includes a
-    slink:VkPipelineDiscardRectangleStateCreateInfoEXT structure, and if its
-    pname:discardRectangleCount member is not `0`, then its
-    pname:pDiscardRectangles member must: be a valid pointer to an array of
-    pname:discardRectangleCount slink:VkRect2D structures
-endif::VK_EXT_discard_rectangles[]
-ifndef::VK_EXT_vertex_input_dynamic_state[]
-  * [[VUID-VkGraphicsPipelineCreateInfo-pStages-02097]]
-    If the pipeline is being created with
-    <<pipeline-graphics-subsets-vertex-input, vertex input state>>,
-    pname:pVertexInputState must: be a valid pointer to a valid
-    slink:VkPipelineVertexInputStateCreateInfo structure
-endif::VK_EXT_vertex_input_dynamic_state[]
-ifndef::VK_EXT_vertex_input_dynamic_state[]
-  * [[VUID-VkGraphicsPipelineCreateInfo-pVertexInputState-04910]]
-    If the pipeline is being created with
-    <<pipeline-graphics-subsets-vertex-input, vertex input state>>, and
-    ename:VK_DYNAMIC_STATE_VERTEX_INPUT_EXT is not set,
-    pname:pVertexInputState must: be a valid pointer to a valid
-    slink:VkPipelineVertexInputStateCreateInfo structure
-endif::VK_EXT_vertex_input_dynamic_state[]
-  * [[VUID-VkGraphicsPipelineCreateInfo-pStages-02098]]
-    If the pipeline is being created with
-    <<pipeline-graphics-subsets-vertex-input, vertex input state>>,
-    pname:pInputAssemblyState must: be a valid pointer to a valid
-    slink:VkPipelineInputAssemblyStateCreateInfo structure
-ifdef::VK_EXT_transform_feedback[]
-  * [[VUID-VkGraphicsPipelineCreateInfo-pStages-02317]]
-    If the pipeline is being created with
-    <<pipeline-graphics-subsets-pre-rasterization, pre-rasterization shader
-    state>>, the code:Xfb execution mode can: be specified by no more than
-    one shader stage in pname:pStages
-  * [[VUID-VkGraphicsPipelineCreateInfo-pStages-02318]]
-    If the pipeline is being created with
-    <<pipeline-graphics-subsets-pre-rasterization, pre-rasterization shader
-    state>>, and any shader stage in pname:pStages specifies code:Xfb
-    execution mode it must: be the last
-    <<pipeline-graphics-subsets-pre-rasterization,pre-rasterization shader
-    stage>>
-  * [[VUID-VkGraphicsPipelineCreateInfo-rasterizationStream-02319]]
-    If the pipeline is being created with
-    <<pipeline-graphics-subsets-pre-rasterization, pre-rasterization shader
-    state>>, and a
-    slink:VkPipelineRasterizationStateStreamCreateInfoEXT::pname:rasterizationStream
-    value other than zero is specified, all variables in the output
-    interface of the entry point being compiled decorated with
-    code:Position, code:PointSize, code:ClipDistance, or code:CullDistance
-    must: be decorated with identical code:Stream values that match the
-    pname:rasterizationStream
-  * [[VUID-VkGraphicsPipelineCreateInfo-rasterizationStream-02320]]
-    If the pipeline is being created with
-    <<pipeline-graphics-subsets-pre-rasterization, pre-rasterization shader
-    state>>, and
-    slink:VkPipelineRasterizationStateStreamCreateInfoEXT::pname:rasterizationStream
-    is zero, or not specified, all variables in the output interface of the
-    entry point being compiled decorated with code:Position, code:PointSize,
-    code:ClipDistance, or code:CullDistance must: be decorated with a
-    code:Stream value of zero, or must: not specify the code:Stream
-    decoration
-  * [[VUID-VkGraphicsPipelineCreateInfo-geometryStreams-02321]]
-    If the pipeline is being created with
-    <<pipeline-graphics-subsets-pre-rasterization, pre-rasterization shader
-    state>>, and the last
-    <<pipeline-graphics-subsets-pre-rasterization,pre-rasterization shader
-    stage>> is a geometry shader, and that geometry shader uses the
-    code:GeometryStreams capability, then
-    sname:VkPhysicalDeviceTransformFeedbackFeaturesEXT::pname:geometryStreams
-    feature must: be enabled
-ifdef::VK_NV_mesh_shader[]
-  * [[VUID-VkGraphicsPipelineCreateInfo-None-02322]]
-    If the pipeline is being created with
-    <<pipeline-graphics-subsets-pre-rasterization, pre-rasterization shader
-    state>>, and there are any mesh shader stages in the pipeline there
-    must: not be any shader stage in the pipeline with a code:Xfb execution
-    mode
-endif::VK_NV_mesh_shader[]
-endif::VK_EXT_transform_feedback[]
-ifdef::VK_EXT_line_rasterization[]
-  * [[VUID-VkGraphicsPipelineCreateInfo-lineRasterizationMode-02766]]
-    If the pipeline is being created with
-    <<pipeline-graphics-subsets-pre-rasterization, pre-rasterization shader
-    state>> and at least one of <<pipeline-graphics-subsets-fragment-output,
-    fragment output interface state>> or
-    <<pipeline-graphics-subsets-fragment-shader, fragment shader state>>,
-    the pname:lineRasterizationMode member of a
-    slink:VkPipelineRasterizationLineStateCreateInfoEXT structure included
-    in the pname:pNext chain of pname:pRasterizationState is
-    ename:VK_LINE_RASTERIZATION_MODE_BRESENHAM_EXT or
-    ename:VK_LINE_RASTERIZATION_MODE_RECTANGULAR_SMOOTH_EXT, then the
-    pname:alphaToCoverageEnable, pname:alphaToOneEnable, and
-    pname:sampleShadingEnable members of pname:pMultisampleState must: all
-    be ename:VK_FALSE
-  * [[VUID-VkGraphicsPipelineCreateInfo-stippledLineEnable-02767]]
-    If the pipeline is being created with
-    <<pipeline-graphics-subsets-pre-rasterization, pre-rasterization shader
-    state>>, the pname:stippledLineEnable member of
-    slink:VkPipelineRasterizationLineStateCreateInfoEXT is ename:VK_TRUE,
-    and no element of the pname:pDynamicStates member of pname:pDynamicState
-    is ename:VK_DYNAMIC_STATE_LINE_STIPPLE_EXT, then the
-    pname:lineStippleFactor member of
-    slink:VkPipelineRasterizationLineStateCreateInfoEXT must: be in the
-    range [eq]#[1,256]#
-endif::VK_EXT_line_rasterization[]
-ifdef::VK_KHR_pipeline_library[]
-  * [[VUID-VkGraphicsPipelineCreateInfo-flags-03371]]
-    pname:flags must: not include ename:VK_PIPELINE_CREATE_LIBRARY_BIT_KHR
-endif::VK_KHR_pipeline_library[]
-ifdef::VK_KHR_ray_tracing_pipeline[]
-  * [[VUID-VkGraphicsPipelineCreateInfo-flags-03372]]
-    pname:flags must: not include
-    ename:VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_ANY_HIT_SHADERS_BIT_KHR
-  * [[VUID-VkGraphicsPipelineCreateInfo-flags-03373]]
-    pname:flags must: not include
-    ename:VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_CLOSEST_HIT_SHADERS_BIT_KHR
-  * [[VUID-VkGraphicsPipelineCreateInfo-flags-03374]]
-    pname:flags must: not include
-    ename:VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_MISS_SHADERS_BIT_KHR
-  * [[VUID-VkGraphicsPipelineCreateInfo-flags-03375]]
-    pname:flags must: not include
-    ename:VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_INTERSECTION_SHADERS_BIT_KHR
-  * [[VUID-VkGraphicsPipelineCreateInfo-flags-03376]]
-    pname:flags must: not include
-    ename:VK_PIPELINE_CREATE_RAY_TRACING_SKIP_TRIANGLES_BIT_KHR
-  * [[VUID-VkGraphicsPipelineCreateInfo-flags-03377]]
-    pname:flags must: not include
-    ename:VK_PIPELINE_CREATE_RAY_TRACING_SKIP_AABBS_BIT_KHR
-  * [[VUID-VkGraphicsPipelineCreateInfo-flags-03577]]
-    pname:flags must: not include
-    ename:VK_PIPELINE_CREATE_RAY_TRACING_SHADER_GROUP_HANDLE_CAPTURE_REPLAY_BIT_KHR
-endif::VK_KHR_ray_tracing_pipeline[]
-ifdef::VK_NV_ray_tracing_motion_blur[]
-  * [[VUID-VkGraphicsPipelineCreateInfo-flags-04947]]
-    pname:flags must: not include
-    ename:VK_PIPELINE_CREATE_RAY_TRACING_ALLOW_MOTION_BIT_NV
-endif::VK_NV_ray_tracing_motion_blur[]
-ifdef::VK_EXT_extended_dynamic_state[]
-  * [[VUID-VkGraphicsPipelineCreateInfo-pDynamicStates-03378]]
-    If the <<features-extendedDynamicState, extendedDynamicState>> feature
-    is not enabled, there must: be no element of the pname:pDynamicStates
-    member of pname:pDynamicState set to
-    ename:VK_DYNAMIC_STATE_CULL_MODE_EXT,
-    ename:VK_DYNAMIC_STATE_FRONT_FACE_EXT,
-    ename:VK_DYNAMIC_STATE_PRIMITIVE_TOPOLOGY_EXT,
-    ename:VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT,
-    ename:VK_DYNAMIC_STATE_SCISSOR_WITH_COUNT_EXT,
-    ename:VK_DYNAMIC_STATE_VERTEX_INPUT_BINDING_STRIDE_EXT,
-    ename:VK_DYNAMIC_STATE_DEPTH_TEST_ENABLE_EXT,
-    ename:VK_DYNAMIC_STATE_DEPTH_WRITE_ENABLE_EXT,
-    ename:VK_DYNAMIC_STATE_DEPTH_COMPARE_OP_EXT,
-    ename:VK_DYNAMIC_STATE_DEPTH_BOUNDS_TEST_ENABLE_EXT,
-    ename:VK_DYNAMIC_STATE_STENCIL_TEST_ENABLE_EXT, or
-    ename:VK_DYNAMIC_STATE_STENCIL_OP_EXT
-  * [[VUID-VkGraphicsPipelineCreateInfo-pDynamicStates-03379]]
-    If the pipeline is being created with
-    <<pipeline-graphics-subsets-pre-rasterization, pre-rasterization shader
-    state>>, and ename:VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT is included
-    in the pname:pDynamicStates array then pname:viewportCount must: be zero
-  * [[VUID-VkGraphicsPipelineCreateInfo-pDynamicStates-03380]]
-    If the pipeline is being created with
-    <<pipeline-graphics-subsets-pre-rasterization, pre-rasterization shader
-    state>>, and ename:VK_DYNAMIC_STATE_SCISSOR_WITH_COUNT_EXT is included
-    in the pname:pDynamicStates array then pname:scissorCount must: be zero
-  * [[VUID-VkGraphicsPipelineCreateInfo-pDynamicStates-04132]]
-    If the pipeline is being created with
-    <<pipeline-graphics-subsets-pre-rasterization, pre-rasterization shader
-    state>>, and ename:VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT is included
-    in the pname:pDynamicStates array then ename:VK_DYNAMIC_STATE_VIEWPORT
-    must: not be present
-  * [[VUID-VkGraphicsPipelineCreateInfo-pDynamicStates-04133]]
-    If the pipeline is being created with
-    <<pipeline-graphics-subsets-pre-rasterization, pre-rasterization shader
-    state>>, and ename:VK_DYNAMIC_STATE_SCISSOR_WITH_COUNT_EXT is included
-    in the pname:pDynamicStates array then ename:VK_DYNAMIC_STATE_SCISSOR
-    must: not be present
-endif::VK_EXT_extended_dynamic_state[]
-ifdef::VK_EXT_extended_dynamic_state2[]
-  * [[VUID-VkGraphicsPipelineCreateInfo-pDynamicStates-04868]]
-    If the <<features-extendedDynamicState2, extendedDynamicState2>> feature
-    is not enabled, there must: be no element of the pname:pDynamicStates
-    member of pname:pDynamicState set to
-    ename:VK_DYNAMIC_STATE_DEPTH_BIAS_ENABLE_EXT,
-    ename:VK_DYNAMIC_STATE_PRIMITIVE_RESTART_ENABLE_EXT, or
-    ename:VK_DYNAMIC_STATE_RASTERIZER_DISCARD_ENABLE_EXT
-  * [[VUID-VkGraphicsPipelineCreateInfo-pDynamicStates-04869]]
-    If the <<features-extendedDynamicState2LogicOp,
-    extendedDynamicState2LogicOp>> feature is not enabled, there must: be no
-    element of the pname:pDynamicStates member of pname:pDynamicState set to
-    ename:VK_DYNAMIC_STATE_LOGIC_OP_EXT
-  * [[VUID-VkGraphicsPipelineCreateInfo-pDynamicStates-04870]]
-    If the <<features-extendedDynamicState2PatchControlPoints,
-    extendedDynamicState2PatchControlPoints>> feature is not enabled, there
-    must: be no element of the pname:pDynamicStates member of
-    pname:pDynamicState set to
-    ename:VK_DYNAMIC_STATE_PATCH_CONTROL_POINTS_EXT
-endif::VK_EXT_extended_dynamic_state2[]
-ifdef::VK_NV_device_generated_commands[]
-  * [[VUID-VkGraphicsPipelineCreateInfo-flags-02877]]
-    If pname:flags includes
-    ename:VK_PIPELINE_CREATE_INDIRECT_BINDABLE_BIT_NV, then the
-    <<features-deviceGeneratedCommands,
-    sname:VkPhysicalDeviceDeviceGeneratedCommandsFeaturesNV::pname:deviceGeneratedCommands>>
-    feature must: be enabled
-ifdef::VK_EXT_transform_feedback[]
-  * [[VUID-VkGraphicsPipelineCreateInfo-flags-02966]]
-    If the pipeline is being created with
-    <<pipeline-graphics-subsets-pre-rasterization, pre-rasterization shader
-    state>> and pname:flags includes
-    ename:VK_PIPELINE_CREATE_INDIRECT_BINDABLE_BIT_NV, then all stages must:
-    not specify code:Xfb execution mode
-endif::VK_EXT_transform_feedback[]
-endif::VK_NV_device_generated_commands[]
-ifdef::VK_EXT_pipeline_creation_cache_control[]
-  * [[VUID-VkGraphicsPipelineCreateInfo-pipelineCreationCacheControl-02878]]
-    If the <<features-pipelineCreationCacheControl,
-    pname:pipelineCreationCacheControl>> feature is not enabled, pname:flags
-    must: not include
-    ename:VK_PIPELINE_CREATE_FAIL_ON_PIPELINE_COMPILE_REQUIRED_BIT_EXT or
-    ename:VK_PIPELINE_CREATE_EARLY_RETURN_ON_FAILURE_BIT_EXT
-endif::VK_EXT_pipeline_creation_cache_control[]
-ifdef::VK_KHR_fragment_shading_rate[]
-  * [[VUID-VkGraphicsPipelineCreateInfo-pDynamicState-04494]]
-    If the pipeline is being created with
-    <<pipeline-graphics-subsets-pre-rasterization, pre-rasterization shader
-    state>> or <<pipeline-graphics-subsets-fragment-shader, fragment shader
-    state>> and ename:VK_DYNAMIC_STATE_FRAGMENT_SHADING_RATE_KHR is not
-    included in pname:pDynamicState->pDynamicStates,
-    slink:VkPipelineFragmentShadingRateStateCreateInfoKHR::pname:fragmentSize.width
-    must: be greater than or equal to `1`
-  * [[VUID-VkGraphicsPipelineCreateInfo-pDynamicState-04495]]
-    If the pipeline is being created with
-    <<pipeline-graphics-subsets-pre-rasterization, pre-rasterization shader
-    state>> or <<pipeline-graphics-subsets-fragment-shader, fragment shader
-    state>> and ename:VK_DYNAMIC_STATE_FRAGMENT_SHADING_RATE_KHR is not
-    included in pname:pDynamicState->pDynamicStates,
-    slink:VkPipelineFragmentShadingRateStateCreateInfoKHR::pname:fragmentSize.height
-    must: be greater than or equal to `1`
-  * [[VUID-VkGraphicsPipelineCreateInfo-pDynamicState-04496]]
-    If the pipeline is being created with
-    <<pipeline-graphics-subsets-pre-rasterization, pre-rasterization shader
-    state>> or <<pipeline-graphics-subsets-fragment-shader, fragment shader
-    state>> and ename:VK_DYNAMIC_STATE_FRAGMENT_SHADING_RATE_KHR is not
-    included in pname:pDynamicState->pDynamicStates,
-    slink:VkPipelineFragmentShadingRateStateCreateInfoKHR::pname:fragmentSize.width
-    must: be a power-of-two value
-  * [[VUID-VkGraphicsPipelineCreateInfo-pDynamicState-04497]]
-    If the pipeline is being created with
-    <<pipeline-graphics-subsets-pre-rasterization, pre-rasterization shader
-    state>> or <<pipeline-graphics-subsets-fragment-shader, fragment shader
-    state>> and ename:VK_DYNAMIC_STATE_FRAGMENT_SHADING_RATE_KHR is not
-    included in pname:pDynamicState->pDynamicStates,
-    slink:VkPipelineFragmentShadingRateStateCreateInfoKHR::pname:fragmentSize.height
-    must: be a power-of-two value
-  * [[VUID-VkGraphicsPipelineCreateInfo-pDynamicState-04498]]
-    If the pipeline is being created with
-    <<pipeline-graphics-subsets-pre-rasterization, pre-rasterization shader
-    state>> or <<pipeline-graphics-subsets-fragment-shader, fragment shader
-    state>> and ename:VK_DYNAMIC_STATE_FRAGMENT_SHADING_RATE_KHR is not
-    included in pname:pDynamicState->pDynamicStates,
-    slink:VkPipelineFragmentShadingRateStateCreateInfoKHR::pname:fragmentSize.width
-    must: be less than or equal to `4`
-  * [[VUID-VkGraphicsPipelineCreateInfo-pDynamicState-04499]]
-    If the pipeline is being created with
-    <<pipeline-graphics-subsets-pre-rasterization, pre-rasterization shader
-    state>> or <<pipeline-graphics-subsets-fragment-shader, fragment shader
-    state>> and ename:VK_DYNAMIC_STATE_FRAGMENT_SHADING_RATE_KHR is not
-    included in pname:pDynamicState->pDynamicStates,
-    slink:VkPipelineFragmentShadingRateStateCreateInfoKHR::pname:fragmentSize.height
-    must: be less than or equal to `4`
-  * [[VUID-VkGraphicsPipelineCreateInfo-pDynamicState-04500]]
-    If the pipeline is being created with
-    <<pipeline-graphics-subsets-pre-rasterization, pre-rasterization shader
-    state>> or <<pipeline-graphics-subsets-fragment-shader, fragment shader
-    state>> and ename:VK_DYNAMIC_STATE_FRAGMENT_SHADING_RATE_KHR is not
-    included in pname:pDynamicState->pDynamicStates, and the
-    <<features-pipelineFragmentShadingRate,
-    pname:pipelineFragmentShadingRate feature>> is not enabled,
-    slink:VkPipelineFragmentShadingRateStateCreateInfoKHR::pname:fragmentSize.width
-    and
-    slink:VkPipelineFragmentShadingRateStateCreateInfoKHR::pname:fragmentSize.height
-    must: both be equal to `1`
-  * [[VUID-VkGraphicsPipelineCreateInfo-pDynamicState-04501]]
-    If the pipeline is being created with
-    <<pipeline-graphics-subsets-pre-rasterization, pre-rasterization shader
-    state>> or <<pipeline-graphics-subsets-fragment-shader, fragment shader
-    state>> and ename:VK_DYNAMIC_STATE_FRAGMENT_SHADING_RATE_KHR is not
-    included in pname:pDynamicState->pDynamicStates, and the
-    <<features-primitiveFragmentShadingRate,
-    pname:primitiveFragmentShadingRate feature>> is not enabled,
-    slink:VkPipelineFragmentShadingRateStateCreateInfoKHR::pname:combinerOps[0]
-    must: be ename:VK_FRAGMENT_SHADING_RATE_COMBINER_OP_KEEP_KHR
-  * [[VUID-VkGraphicsPipelineCreateInfo-pDynamicState-04502]]
-    If the pipeline is being created with
-    <<pipeline-graphics-subsets-pre-rasterization, pre-rasterization shader
-    state>> or <<pipeline-graphics-subsets-fragment-shader, fragment shader
-    state>> and ename:VK_DYNAMIC_STATE_FRAGMENT_SHADING_RATE_KHR is not
-    included in pname:pDynamicState->pDynamicStates, and the
-    <<features-attachmentFragmentShadingRate,
-    pname:attachmentFragmentShadingRate feature>> is not enabled,
-    slink:VkPipelineFragmentShadingRateStateCreateInfoKHR::pname:combinerOps[1]
-    must: be ename:VK_FRAGMENT_SHADING_RATE_COMBINER_OP_KEEP_KHR
-ifdef::VK_EXT_extended_dynamic_state[]
-  * [[VUID-VkGraphicsPipelineCreateInfo-primitiveFragmentShadingRateWithMultipleViewports-04503]]
-    If the pipeline is being created with
-    <<pipeline-graphics-subsets-pre-rasterization, pre-rasterization shader
-    state>> and the
-    <<limits-primitiveFragmentShadingRateWithMultipleViewports,
-    pname:primitiveFragmentShadingRateWithMultipleViewports>> limit is not
-    supported, ename:VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT is not
-    included in pname:pDynamicState->pDynamicStates, and
-    slink:VkPipelineViewportStateCreateInfo::pname:viewportCount is greater
-    than `1`, entry points specified in pname:pStages must: not write to the
-    code:PrimitiveShadingRateKHR built-in
-endif::VK_EXT_extended_dynamic_state[]
-  * [[VUID-VkGraphicsPipelineCreateInfo-primitiveFragmentShadingRateWithMultipleViewports-04504]]
-    If the pipeline is being created with
-    <<pipeline-graphics-subsets-pre-rasterization, pre-rasterization shader
-    state>> and the
-    <<limits-primitiveFragmentShadingRateWithMultipleViewports,
-    pname:primitiveFragmentShadingRateWithMultipleViewports>> limit is not
-    supported, and entry points specified in pname:pStages write to the
-    code:ViewportIndex built-in, they must: not also write to the
-    code:PrimitiveShadingRateKHR built-in
-ifdef::VK_NV_viewport_array2[]
-  * [[VUID-VkGraphicsPipelineCreateInfo-primitiveFragmentShadingRateWithMultipleViewports-04505]]
-    If the pipeline is being created with
-    <<pipeline-graphics-subsets-pre-rasterization, pre-rasterization shader
-    state>> and the
-    <<limits-primitiveFragmentShadingRateWithMultipleViewports,
-    pname:primitiveFragmentShadingRateWithMultipleViewports>> limit is not
-    supported, and entry points specified in pname:pStages write to the
-    code:ViewportMaskNV built-in, they must: not also write to the
-    code:PrimitiveShadingRateKHR built-in
-endif::VK_NV_viewport_array2[]
-  * [[VUID-VkGraphicsPipelineCreateInfo-fragmentShadingRateNonTrivialCombinerOps-04506]]
-    If the pipeline is being created with
-    <<pipeline-graphics-subsets-pre-rasterization, pre-rasterization shader
-    state>> or <<pipeline-graphics-subsets-fragment-shader, fragment shader
-    state>>, the <<limits-fragmentShadingRateNonTrivialCombinerOps,
-    pname:fragmentShadingRateNonTrivialCombinerOps>> limit is not supported,
-    and ename:VK_DYNAMIC_STATE_FRAGMENT_SHADING_RATE_KHR is not included in
-    pname:pDynamicState->pDynamicStates, elements of
-    slink:VkPipelineFragmentShadingRateStateCreateInfoKHR::pname:combinerOps
-    must: be ename:VK_FRAGMENT_SHADING_RATE_COMBINER_OP_KEEP_KHR or
-    ename:VK_FRAGMENT_SHADING_RATE_COMBINER_OP_REPLACE_KHR
-endif::VK_KHR_fragment_shading_rate[]
-ifdef::VK_NV_fragment_shading_rate_enums[]
-  * [[VUID-VkGraphicsPipelineCreateInfo-pDynamicState-04569]]
-    If the pipeline is being created with
-    <<pipeline-graphics-subsets-pre-rasterization, pre-rasterization shader
-    state>> or <<pipeline-graphics-subsets-fragment-shader, fragment shader
-    state>>, and ename:VK_DYNAMIC_STATE_FRAGMENT_SHADING_RATE_KHR is not
-    included in pname:pDynamicState->pDynamicStates, and the
-    <<features-fragmentShadingRateEnums, pname:fragmentShadingRateEnums
-    feature>> is not enabled,
-    slink:VkPipelineFragmentShadingRateEnumStateCreateInfoNV::pname:shadingRateType
-    must: be equal to ename:VK_FRAGMENT_SHADING_RATE_TYPE_FRAGMENT_SIZE_NV
-  * [[VUID-VkGraphicsPipelineCreateInfo-pDynamicState-04570]]
-    If the pipeline is being created with
-    <<pipeline-graphics-subsets-pre-rasterization, pre-rasterization shader
-    state>> or <<pipeline-graphics-subsets-fragment-shader, fragment shader
-    state>>, and ename:VK_DYNAMIC_STATE_FRAGMENT_SHADING_RATE_KHR is not
-    included in pname:pDynamicState->pDynamicStates, and the
-    <<features-pipelineFragmentShadingRate,
-    pname:pipelineFragmentShadingRate feature>> is not enabled,
-    slink:VkPipelineFragmentShadingRateEnumStateCreateInfoNV::pname:shadingRate
-    must: be equal to
-    ename:VK_FRAGMENT_SHADING_RATE_1_INVOCATION_PER_PIXEL_NV
-  * [[VUID-VkGraphicsPipelineCreateInfo-pDynamicState-04571]]
-    If the pipeline is being created with
-    <<pipeline-graphics-subsets-pre-rasterization, pre-rasterization shader
-    state>> or <<pipeline-graphics-subsets-fragment-shader, fragment shader
-    state>>, and ename:VK_DYNAMIC_STATE_FRAGMENT_SHADING_RATE_KHR is not
-    included in pname:pDynamicState->pDynamicStates, and the
-    <<features-primitiveFragmentShadingRate,
-    pname:primitiveFragmentShadingRate feature>> is not enabled,
-    slink:VkPipelineFragmentShadingRateEnumStateCreateInfoNV::pname:combinerOps[0]
-    must: be ename:VK_FRAGMENT_SHADING_RATE_COMBINER_OP_KEEP_KHR
-  * [[VUID-VkGraphicsPipelineCreateInfo-pDynamicState-04572]]
-    If the pipeline is being created with
-    <<pipeline-graphics-subsets-pre-rasterization, pre-rasterization shader
-    state>> or <<pipeline-graphics-subsets-fragment-shader, fragment shader
-    state>>, and ename:VK_DYNAMIC_STATE_FRAGMENT_SHADING_RATE_KHR is not
-    included in pname:pDynamicState->pDynamicStates, and the
-    <<features-attachmentFragmentShadingRate,
-    pname:attachmentFragmentShadingRate feature>> is not enabled,
-    slink:VkPipelineFragmentShadingRateEnumStateCreateInfoNV::pname:combinerOps[1]
-    must: be ename:VK_FRAGMENT_SHADING_RATE_COMBINER_OP_KEEP_KHR
-  * [[VUID-VkGraphicsPipelineCreateInfo-fragmentShadingRateNonTrivialCombinerOps-04573]]
-    If the pipeline is being created with
-    <<pipeline-graphics-subsets-pre-rasterization, pre-rasterization shader
-    state>> or <<pipeline-graphics-subsets-fragment-shader, fragment shader
-    state>>, and the <<limits-fragmentShadingRateNonTrivialCombinerOps,
-    pname:fragmentShadingRateNonTrivialCombinerOps>> limit is not supported
-    and ename:VK_DYNAMIC_STATE_FRAGMENT_SHADING_RATE_KHR is not included in
-    pname:pDynamicState->pDynamicStates, elements of
-    slink:VkPipelineFragmentShadingRateEnumStateCreateInfoNV::pname:combinerOps
-    must: be ename:VK_FRAGMENT_SHADING_RATE_COMBINER_OP_KEEP_KHR or
-    ename:VK_FRAGMENT_SHADING_RATE_COMBINER_OP_REPLACE_KHR
-  * [[VUID-VkGraphicsPipelineCreateInfo-None-04574]]
-    If the pipeline is being created with
-    <<pipeline-graphics-subsets-pre-rasterization, pre-rasterization shader
-    state>> or <<pipeline-graphics-subsets-fragment-shader, fragment shader
-    state>>, and the <<features-supersampleFragmentShadingRates,
-    supersampleFragmentShadingRates feature>> is not enabled,
-    slink:VkPipelineFragmentShadingRateEnumStateCreateInfoNV::pname:shadingRate
-    must: not be equal to
-    ename:VK_FRAGMENT_SHADING_RATE_2_INVOCATIONS_PER_PIXEL_NV,
-    ename:VK_FRAGMENT_SHADING_RATE_4_INVOCATIONS_PER_PIXEL_NV,
-    ename:VK_FRAGMENT_SHADING_RATE_8_INVOCATIONS_PER_PIXEL_NV, or
-    ename:VK_FRAGMENT_SHADING_RATE_16_INVOCATIONS_PER_PIXEL_NV
-  * [[VUID-VkGraphicsPipelineCreateInfo-None-04575]]
-    If the pipeline is being created with
-    <<pipeline-graphics-subsets-pre-rasterization, pre-rasterization shader
-    state>> or <<pipeline-graphics-subsets-fragment-shader, fragment shader
-    state>>, and the <<features-noInvocationFragmentShadingRates,
-    noInvocationFragmentShadingRates feature>> is not enabled,
-    slink:VkPipelineFragmentShadingRateEnumStateCreateInfoNV::pname:shadingRate
-    must: not be equal to ename:VK_FRAGMENT_SHADING_RATE_NO_INVOCATIONS_NV
-endif::VK_NV_fragment_shading_rate_enums[]
-ifdef::VK_KHR_ray_tracing_pipeline[]
-  * [[VUID-VkGraphicsPipelineCreateInfo-pDynamicStates-03578]]
-    All elements of the pname:pDynamicStates member of pname:pDynamicState
-    must: not be ename:VK_DYNAMIC_STATE_RAY_TRACING_PIPELINE_STACK_SIZE_KHR
-endif::VK_KHR_ray_tracing_pipeline[]
-ifdef::VK_EXT_vertex_input_dynamic_state[]
-  * [[VUID-VkGraphicsPipelineCreateInfo-pDynamicStates-04807]]
-    If the pipeline is being created with
-    <<pipeline-graphics-subsets-pre-rasterization, pre-rasterization shader
-    state>> and the <<features-vertexInputDynamicState,
-    vertexInputDynamicState>> feature is not enabled, there must: be no
-    element of the pname:pDynamicStates member of pname:pDynamicState set to
-    ename:VK_DYNAMIC_STATE_VERTEX_INPUT_EXT
-endif::VK_EXT_vertex_input_dynamic_state[]
-  * [[VUID-VkGraphicsPipelineCreateInfo-None-04893]]
-    The pipeline must: be created with a
-    <<pipeline-graphics-subsets-complete, complete set of state>>
-ifdef::VK_EXT_color_write_enable[]
-  * [[VUID-VkGraphicsPipelineCreateInfo-pDynamicStates-04800]]
-    If the <<features-colorWriteEnable, colorWriteEnable>> feature is not
-    enabled, there must: be no element of the pname:pDynamicStates member of
-    pname:pDynamicState set to ename:VK_DYNAMIC_STATE_COLOR_WRITE_ENABLE_EXT
-endif::VK_EXT_color_write_enable[]
-ifdef::VK_QCOM_render_pass_shader_resolve[]
-  * [[VUID-VkGraphicsPipelineCreateInfo-rasterizationSamples-04899]]
-    If the pipeline is being created with fragment shader state, and the
-    apiext:VK_QCOM_render_pass_shader_resolve extension is enabled, and if
-    subpass has any input attachments, and if the subpass description
-    contains ename:VK_SUBPASS_DESCRIPTION_FRAGMENT_REGION_BIT_QCOM, then the
-    sample count of the input attachments must: equal
-    pname:rasterizationSamples
-  * [[VUID-VkGraphicsPipelineCreateInfo-sampleShadingEnable-04900]]
-    If the pipeline is being created with fragment shader state, and the
-    apiext:VK_QCOM_render_pass_shader_resolve extension is enabled, and if
-    the subpass description contains
-    ename:VK_SUBPASS_DESCRIPTION_FRAGMENT_REGION_BIT_QCOM, then
-    pname:sampleShadingEnable must: be false
-  * [[VUID-VkGraphicsPipelineCreateInfo-flags-04901]]
-    If pname:flags includes
-    ename:VK_SUBPASS_DESCRIPTION_SHADER_RESOLVE_BIT_QCOM, then the subpass
-    must: be the last subpass in a subpass dependency chain
-  * [[VUID-VkGraphicsPipelineCreateInfo-flags-04902]]
-    If pname:flags includes
-    ename:VK_SUBPASS_DESCRIPTION_SHADER_RESOLVE_BIT_QCOM, and if
-    pname:pResolveAttachments is not `NULL`, then each resolve attachment
-    must: be ename:VK_ATTACHMENT_UNUSED
-endif::VK_QCOM_render_pass_shader_resolve[]
-ifndef::VK_KHR_dynamic_rendering[]
-  * [[VUID-VkGraphicsPipelineCreateInfo-renderPass-06051]]
-    pname:renderPass must: not be dlink:VK_NULL_HANDLE
-endif::VK_KHR_dynamic_rendering[]
-ifdef::VK_KHR_dynamic_rendering[]
-  * [[VUID-VkGraphicsPipelineCreateInfo-dynamicRendering-06052]]
-    If the <<features-dynamicRendering,pname:dynamicRendering>> feature is
-    not enabled, pname:renderPass must: not be dlink:VK_NULL_HANDLE
-  * [[VUID-VkGraphicsPipelineCreateInfo-renderPass-06053]]
-    If pname:renderPass is dlink:VK_NULL_HANDLE, the pipeline is being
-    created with <<pipeline-graphics-subsets-fragment-shader, fragment
-    shader state>>, and either of
-    slink:VkPipelineRenderingCreateInfoKHR::depthAttachmentFormat or
-    slink:VkPipelineRenderingCreateInfoKHR::stencilAttachmentFormat are not
-    ename:VK_FORMAT_UNDEFINED, pname:pDepthStencilState must: be a valid
-    pointer to a valid slink:VkPipelineDepthStencilStateCreateInfo structure
-  * [[VUID-VkGraphicsPipelineCreateInfo-renderPass-06054]]
-    If pname:renderPass is dlink:VK_NULL_HANDLE, the pipeline is being
-    created with <<pipeline-graphics-subsets-fragment-output, fragment
-    output interface state>>, and
-    slink:VkPipelineRenderingCreateInfoKHR::colorAttachmentCount is not
-    equal to `0`, pname:pColorBlendState must: be a valid pointer to a valid
-    slink:VkPipelineColorBlendStateCreateInfo structure
-  * [[VUID-VkGraphicsPipelineCreateInfo-renderPass-06055]]
-    If pname:renderPass is dlink:VK_NULL_HANDLE and the pipeline is being
-    created with <<pipeline-graphics-subsets-fragment-output, fragment
-    output interface state>>, pname:pColorBlendState->attachmentCount must:
-    be equal to slink:VkPipelineRenderingCreateInfoKHR::colorAttachmentCount
-  * [[VUID-VkGraphicsPipelineCreateInfo-renderPass-06056]]
-    If pname:renderPass is dlink:VK_NULL_HANDLE and the pipeline is being
-    created with <<pipeline-graphics-subsets-fragment-shader, fragment
-    shader state>> the fragment shader must: not read from any input
-    attachment
-ifdef::VK_KHR_multiview,VK_VERSION_1_1[]
-  * [[VUID-VkGraphicsPipelineCreateInfo-renderPass-06057]]
-    If pname:renderPass is dlink:VK_NULL_HANDLE, the pipeline is being
-    created with <<pipeline-graphics-subsets-pre-rasterization,
-    pre-rasterization shader state>>, the pname:viewMask member of a
-    slink:VkPipelineRenderingCreateInfoKHR structure included in the
-    pname:pNext chain is not `0`, and the
-    <<features-multiview-tess,pname:multiviewTessellationShader>> feature is
-    not enabled, then pname:pStages must: not include tessellation shaders
-  * [[VUID-VkGraphicsPipelineCreateInfo-renderPass-06058]]
-    If pname:renderPass is dlink:VK_NULL_HANDLE, the pipeline is being
-    created with <<pipeline-graphics-subsets-pre-rasterization,
-    pre-rasterization shader state>>, the pname:viewMask member of a
-    slink:VkPipelineRenderingCreateInfoKHR structure included in the
-    pname:pNext chain is not `0`, and the
-    <<features-multiview-gs,pname:multiviewGeometryShader>> feature is not
-    enabled, then pname:pStages must: not include a geometry shader
-  * [[VUID-VkGraphicsPipelineCreateInfo-renderPass-06059]]
-    If pname:renderPass is dlink:VK_NULL_HANDLE, the pipeline is being
-    created with <<pipeline-graphics-subsets-pre-rasterization,
-    pre-rasterization shader state>>, and the pname:viewMask member of a
-    slink:VkPipelineRenderingCreateInfoKHR structure included in the
-    pname:pNext chain is not `0`, shaders in pname:pStages must: not include
-    variables decorated with the code:Layer built-in decoration in their
-    interfaces
-  * [[VUID-VkGraphicsPipelineCreateInfo-renderPass-06060]]
-    If the pipeline is being created with
-    <<pipeline-graphics-subsets-fragment-output, fragment output interface
-    state>> and pname:renderPass is dlink:VK_NULL_HANDLE,
-    pname:pColorBlendState->attachmentCount must: be equal to the
-    pname:colorAttachmentCount member of the
-    slink:VkPipelineRenderingCreateInfoKHR structure included in the
-    pname:pNext chain
-  * [[VUID-VkGraphicsPipelineCreateInfo-renderPass-06061]]
-    If the pipeline is being created with
-    <<pipeline-graphics-subsets-fragment-shader, fragment shader state>> and
-    pname:renderPass is dlink:VK_NULL_HANDLE, fragment shaders in
-    pname:pStages must: not include the code:InputAttachment capability
-  * [[VUID-VkGraphicsPipelineCreateInfo-renderPass-06062]]
-    If the pipeline is being created with
-    <<pipeline-graphics-subsets-fragment-output, fragment output interface
-    state>> and pname:renderPass is dlink:VK_NULL_HANDLE, for each color
-    attachment format defined by the pname:pColorAttachmentFormats member of
-    slink:VkPipelineRenderingCreateInfoKHR, if its
-    <<potential-format-features,potential format features>> do not contain
-    ename:VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT, then the
-    pname:blendEnable member of the corresponding element of the
-    pname:pAttachments member of pname:pColorBlendState must: be
-    ename:VK_FALSE
-endif::VK_KHR_multiview,VK_VERSION_1_1[]
-ifdef::VK_AMD_mixed_attachment_samples,VK_NV_framebuffer_mixed_samples[]
-  * [[VUID-VkGraphicsPipelineCreateInfo-renderPass-06063]]
-    If the pipeline is being created with
-    <<pipeline-graphics-subsets-fragment-output, fragment output interface
-    state>> and pname:renderPass is dlink:VK_NULL_HANDLE, if the pname:pNext
-    chain includes slink:VkAttachmentSampleCountInfoAMD or
-    sname:VkAttachmentSampleCountInfoNV, the pname:colorAttachmentCount
-    member of that structure must: be equal to the value of
-    slink:VkPipelineRenderingCreateInfoKHR::pname:colorAttachmentCount
-endif::VK_AMD_mixed_attachment_samples,VK_NV_framebuffer_mixed_samples[]
-endif::VK_KHR_dynamic_rendering[]
-****
-
-include::{generated}/validity/structs/VkGraphicsPipelineCreateInfo.txt[]
---
-
-ifdef::VK_KHR_dynamic_rendering[]
-[open,refpage='VkPipelineRenderingCreateInfoKHR',desc='Structure specifying attachment formats',type='structs']
---
-The sname:VkPipelineRenderingCreateInfoKHR structure is defined as:
-
-include::{generated}/api/structs/VkPipelineRenderingCreateInfoKHR.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:viewMask is the viewMask used for rendering.
-  * pname:colorAttachmentCount is the number of entries in
-    pname:pColorAttachmentFormats
-  * pname:pColorAttachmentFormats is an array of elink:VkFormat values
-    defining the format of color attachments used in this pipeline.
-  * pname:depthAttachmentFormat is a elink:VkFormat value defining the
-    format of the depth attachment used in this pipeline.
-  * pname:stencilAttachmentFormat is a elink:VkFormat value defining the
-    format of the stencil attachment used in this pipeline.
-
-When a pipeline is created without a slink:VkRenderPass, if this structure
-is present in the pname:pNext chain of slink:VkGraphicsPipelineCreateInfo,
-it specifies the view mask and format of attachments used for rendering.
-If this structure is not specified, and the pipeline does not include a
-slink:VkRenderPass, pname:viewMask and pname:colorAttachmentCount are `0`,
-and pname:depthAttachmentFormat and pname:stencilAttachmentFormat are
-ename:VK_FORMAT_UNDEFINED.
-If a graphics pipeline is created with a valid slink:VkRenderPass,
-parameters of this structure are ignored.
-
-If pname:depthAttachmentFormat, pname:stencilAttachmentFormat, or any
-element of pname:pColorAttachmentFormats is ename:VK_FORMAT_UNDEFINED, it
-indicates that the corresponding attachment is unused within the render
-pass.
-Valid formats indicate that an attachment can: be used - but it is still
-valid to set the attachment to `NULL` when beginning rendering.
-
-.Valid Usage
-****
-  * [[VUID-VkPipelineRenderingCreateInfoKHR-pColorAttachmentFormats-06064]]
-    If any element of pname:pColorAttachmentFormats is not
-    ename:VK_FORMAT_UNDEFINED, it must: be a format with
-    <<potential-format-features, potential format features>> that include
-    ename:VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT
-  * [[VUID-VkPipelineRenderingCreateInfoKHR-depthAttachmentFormat-06065]]
-    If pname:depthAttachmentFormat is not ename:VK_FORMAT_UNDEFINED, it
-    must: be a format with <<potential-format-features, potential format
-    features>> that include
-    ename:VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT
-  * [[VUID-VkPipelineRenderingCreateInfoKHR-stencilAttachmentFormat-06164]]
-    If pname:stencilAttachmentFormat is not ename:VK_FORMAT_UNDEFINED, it
-    must: be a format with <<potential-format-features, potential format
-    features>> that include
-    ename:VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT
-  * [[VUID-VkPipelineRenderingCreateInfoKHR-depthAttachmentFormat-06165]]
-    If pname:depthAttachmentFormat is not ename:VK_FORMAT_UNDEFINED and
-    pname:stencilAttachmentFormat is not ename:VK_FORMAT_UNDEFINED,
-    pname:depthAttachmentFormat must: equal pname:stencilAttachmentFormat
-  * [[VUID-VkPipelineRenderingCreateInfoKHR-multiview-06066]]
-    If the <<features-multiview,pname:multiview>> feature is not enabled,
-    pname:viewMask must: be `0`
-ifdef::VK_VERSION_1_1,VK_KHR_multiview[]
-  * [[VUID-VkPipelineRenderingCreateInfoKHR-viewMask-06067]]
-    The index of the most significant bit in pname:viewMask must: be less
-    than <<limits-maxMultiviewViewCount,pname:maxMultiviewViewCount>>
-endif::VK_VERSION_1_1,VK_KHR_multiview[]
-****
-
-include::{generated}/validity/structs/VkPipelineRenderingCreateInfoKHR.txt[]
---
-endif::VK_KHR_dynamic_rendering[]
-
-[open,refpage='VkPipelineCreateFlagBits',desc='Bitmask controlling how a pipeline is created',type='enums']
---
-Possible values of the pname:flags member of
-slink:VkGraphicsPipelineCreateInfo,
-ifdef::VK_KHR_ray_tracing_pipeline[slink:VkRayTracingPipelineCreateInfoKHR,]
-ifdef::VK_NV_ray_tracing[slink:VkRayTracingPipelineCreateInfoNV,]
-and slink:VkComputePipelineCreateInfo, specifying how a pipeline is created,
-are:
-
-include::{generated}/api/enums/VkPipelineCreateFlagBits.txt[]
-
-  * ename:VK_PIPELINE_CREATE_DISABLE_OPTIMIZATION_BIT specifies that the
-    created pipeline will not be optimized.
-    Using this flag may: reduce the time taken to create the pipeline.
-  * ename:VK_PIPELINE_CREATE_ALLOW_DERIVATIVES_BIT specifies that the
-    pipeline to be created is allowed to be the parent of a pipeline that
-    will be created in a subsequent pipeline creation call.
-  * ename:VK_PIPELINE_CREATE_DERIVATIVE_BIT specifies that the pipeline to
-    be created will be a child of a previously created parent pipeline.
-ifdef::VK_VERSION_1_1,VK_KHR_device_group[]
-ifdef::VK_VERSION_1_1,VK_KHR_multiview[]
-  * ename:VK_PIPELINE_CREATE_VIEW_INDEX_FROM_DEVICE_INDEX_BIT specifies that
-    any shader input variables decorated as code:ViewIndex will be assigned
-    values as if they were decorated as code:DeviceIndex.
-endif::VK_VERSION_1_1,VK_KHR_multiview[]
-  * ename:VK_PIPELINE_CREATE_DISPATCH_BASE specifies that a compute pipeline
-    can: be used with flink:vkCmdDispatchBase with a non-zero base
-    workgroup.
-endif::VK_VERSION_1_1,VK_KHR_device_group[]
-ifdef::VK_NV_ray_tracing[]
-  * ename:VK_PIPELINE_CREATE_DEFER_COMPILE_BIT_NV specifies that a pipeline
-    is created with all shaders in the deferred state.
-    Before using the pipeline the application must: call
-    flink:vkCompileDeferredNV exactly once on each shader in the pipeline
-    before using the pipeline.
-endif::VK_NV_ray_tracing[]
-ifdef::VK_KHR_pipeline_executable_properties[]
-  * ename:VK_PIPELINE_CREATE_CAPTURE_STATISTICS_BIT_KHR specifies that the
-    shader compiler should capture statistics for the pipeline executables
-    produced by the compile process which can: later be retrieved by calling
-    flink:vkGetPipelineExecutableStatisticsKHR.
-    Enabling this flag must: not affect the final compiled pipeline but may:
-    disable pipeline caching or otherwise affect pipeline creation time.
-  * ename:VK_PIPELINE_CREATE_CAPTURE_INTERNAL_REPRESENTATIONS_BIT_KHR
-    specifies that the shader compiler should capture the internal
-    representations of pipeline executables produced by the compile process
-    which can: later be retrieved by calling
-    flink:vkGetPipelineExecutableInternalRepresentationsKHR.
-    Enabling this flag must: not affect the final compiled pipeline but may:
-    disable pipeline caching or otherwise affect pipeline creation time.
-endif::VK_KHR_pipeline_executable_properties[]
-ifdef::VK_KHR_pipeline_library[]
-  * ename:VK_PIPELINE_CREATE_LIBRARY_BIT_KHR specifies that the pipeline
-    cannot: be used directly, and instead defines a _pipeline library_ that
-    can: be combined with other pipelines using the
-    slink:VkPipelineLibraryCreateInfoKHR structure.
-ifdef::VK_KHR_ray_tracing_pipeline[]
-    This is available in ray tracing pipelines.
-endif::VK_KHR_ray_tracing_pipeline[]
-endif::VK_KHR_pipeline_library[]
-ifdef::VK_KHR_ray_tracing_pipeline[]
-  * ename:VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_ANY_HIT_SHADERS_BIT_KHR
-    specifies that an any-hit shader will always be present when an any-hit
-    shader would be executed.
-    A NULL any-hit shader is an any-hit shader which is effectively
-    ename:VK_SHADER_UNUSED_KHR, such as from a shader group consisting
-    entirely of zeros.
-  * ename:VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_CLOSEST_HIT_SHADERS_BIT_KHR
-    specifies that a closest hit shader will always be present when a
-    closest hit shader would be executed.
-    A NULL closest hit shader is a closest hit shader which is effectively
-    ename:VK_SHADER_UNUSED_KHR, such as from a shader group consisting
-    entirely of zeros.
-  * ename:VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_MISS_SHADERS_BIT_KHR
-    specifies that a miss shader will always be present when a miss shader
-    would be executed.
-    A NULL miss shader is a miss shader which is effectively
-    ename:VK_SHADER_UNUSED_KHR, such as from a shader group consisting
-    entirely of zeros.
-  * ename:VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_INTERSECTION_SHADERS_BIT_KHR
-    specifies that an intersection shader will always be present when an
-    intersection shader would be executed.
-    A NULL intersection shader is an intersection shader which is
-    effectively ename:VK_SHADER_UNUSED_KHR, such as from a shader group
-    consisting entirely of zeros.
-  * ename:VK_PIPELINE_CREATE_RAY_TRACING_SKIP_TRIANGLES_BIT_KHR specifies
-    that triangle primitives will be skipped during traversal using
-    code:OpTraceRayKHR.
-  * ename:VK_PIPELINE_CREATE_RAY_TRACING_SKIP_AABBS_BIT_KHR specifies that
-    AABB primitives will be skipped during traversal using
-    code:OpTraceRayKHR.
-  * ename:VK_PIPELINE_CREATE_RAY_TRACING_SHADER_GROUP_HANDLE_CAPTURE_REPLAY_BIT_KHR
-    specifies that the shader group handles can: be saved and reused on a
-    subsequent run (e.g. for trace capture and replay).
-endif::VK_KHR_ray_tracing_pipeline[]
-ifdef::VK_NV_device_generated_commands[]
-  * ename:VK_PIPELINE_CREATE_INDIRECT_BINDABLE_BIT_NV specifies that the
-    pipeline can be used in combination with <<device-generated-commands>>.
-endif::VK_NV_device_generated_commands[]
-ifdef::VK_EXT_pipeline_creation_cache_control[]
-  * ename:VK_PIPELINE_CREATE_FAIL_ON_PIPELINE_COMPILE_REQUIRED_BIT_EXT
-    specifies that pipeline creation will fail if a compile is required for
-    creation of a valid slink:VkPipeline object;
-    ename:VK_PIPELINE_COMPILE_REQUIRED_EXT will be returned by pipeline
-    creation, and the slink:VkPipeline will be set to dlink:VK_NULL_HANDLE.
-  * When creating multiple pipelines,
-    ename:VK_PIPELINE_CREATE_EARLY_RETURN_ON_FAILURE_BIT_EXT specifies that
-    control will be returned to the application on failure of the
-    corresponding pipeline rather than continuing to create additional
-    pipelines.
-endif::VK_EXT_pipeline_creation_cache_control[]
-ifdef::VK_NV_ray_tracing_motion_blur[]
-  * ename:VK_PIPELINE_CREATE_RAY_TRACING_ALLOW_MOTION_BIT_NV specifies that
-    the pipeline is allowed to use code:OpTraceRayMotionNV.
-endif::VK_NV_ray_tracing_motion_blur[]
-ifdef::VK_KHR_dynamic_rendering[]
-ifdef::VK_KHR_fragment_shading_rate[]
-  * ename:VK_PIPELINE_RASTERIZATION_STATE_CREATE_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR
-    specifies that the pipeline will be used with a fragment shading rate
-    attachment.
-endif::VK_KHR_fragment_shading_rate[]
-ifdef::VK_EXT_fragment_density_map[]
-  * ename:VK_PIPELINE_RASTERIZATION_STATE_CREATE_FRAGMENT_DENSITY_MAP_ATTACHMENT_BIT_EXT
-    specifies that the pipeline will be used with a fragment density map
-    attachment.
-endif::VK_EXT_fragment_density_map[]
-endif::VK_KHR_dynamic_rendering[]
-
-It is valid to set both ename:VK_PIPELINE_CREATE_ALLOW_DERIVATIVES_BIT and
-ename:VK_PIPELINE_CREATE_DERIVATIVE_BIT.
-This allows a pipeline to be both a parent and possibly a child in a
-pipeline hierarchy.
-See <<pipelines-pipeline-derivatives,Pipeline Derivatives>> for more
-information.
---
-
-[open,refpage='VkPipelineCreateFlags',desc='Bitmask of VkPipelineCreateFlagBits',type='flags']
---
-include::{generated}/api/flags/VkPipelineCreateFlags.txt[]
-
-tname:VkPipelineCreateFlags is a bitmask type for setting a mask of zero or
-more elink:VkPipelineCreateFlagBits.
---
-
-[open,refpage='VkPipelineDynamicStateCreateInfo',desc='Structure specifying parameters of a newly created pipeline dynamic state',type='structs']
---
-The sname:VkPipelineDynamicStateCreateInfo structure is defined as:
-
-include::{generated}/api/structs/VkPipelineDynamicStateCreateInfo.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:flags is reserved for future use.
-  * pname:dynamicStateCount is the number of elements in the
-    pname:pDynamicStates array.
-  * pname:pDynamicStates is a pointer to an array of elink:VkDynamicState
-    values specifying which pieces of pipeline state will use the values
-    from dynamic state commands rather than from pipeline state creation
-    information.
-
-.Valid Usage
-****
-  * [[VUID-VkPipelineDynamicStateCreateInfo-pDynamicStates-01442]]
-    Each element of pname:pDynamicStates must: be unique
-****
-
-include::{generated}/validity/structs/VkPipelineDynamicStateCreateInfo.txt[]
---
-
-[open,refpage='VkPipelineDynamicStateCreateFlags',desc='Reserved for future use',type='flags']
---
-include::{generated}/api/flags/VkPipelineDynamicStateCreateFlags.txt[]
-
-tname:VkPipelineDynamicStateCreateFlags is a bitmask type for setting a
-mask, but is currently reserved for future use.
---
-
-[open,refpage='VkDynamicState',desc='Indicate which dynamic state is taken from dynamic state commands',type='enums']
---
-The source of different pieces of dynamic state is specified by the
-slink:VkPipelineDynamicStateCreateInfo::pname:pDynamicStates property of the
-currently active pipeline, each of whose elements must: be one of the
-values:
-
-include::{generated}/api/enums/VkDynamicState.txt[]
-
-  * ename:VK_DYNAMIC_STATE_VIEWPORT specifies that the pname:pViewports
-    state in slink:VkPipelineViewportStateCreateInfo will be ignored and
-    must: be set dynamically with flink:vkCmdSetViewport before any drawing
-    commands.
-    The number of viewports used by a pipeline is still specified by the
-    pname:viewportCount member of slink:VkPipelineViewportStateCreateInfo.
-  * ename:VK_DYNAMIC_STATE_SCISSOR specifies that the pname:pScissors state
-    in slink:VkPipelineViewportStateCreateInfo will be ignored and must: be
-    set dynamically with flink:vkCmdSetScissor before any drawing commands.
-    The number of scissor rectangles used by a pipeline is still specified
-    by the pname:scissorCount member of
-    slink:VkPipelineViewportStateCreateInfo.
-  * ename:VK_DYNAMIC_STATE_LINE_WIDTH specifies that the pname:lineWidth
-    state in slink:VkPipelineRasterizationStateCreateInfo will be ignored
-    and must: be set dynamically with flink:vkCmdSetLineWidth before any
-    drawing commands that generate line primitives for the rasterizer.
-  * ename:VK_DYNAMIC_STATE_DEPTH_BIAS specifies that the
-    pname:depthBiasConstantFactor, pname:depthBiasClamp and
-    pname:depthBiasSlopeFactor states in
-    slink:VkPipelineRasterizationStateCreateInfo will be ignored and must:
-    be set dynamically with flink:vkCmdSetDepthBias before any draws are
-    performed with pname:depthBiasEnable in
-    slink:VkPipelineRasterizationStateCreateInfo set to ename:VK_TRUE.
-  * ename:VK_DYNAMIC_STATE_BLEND_CONSTANTS specifies that the
-    pname:blendConstants state in slink:VkPipelineColorBlendStateCreateInfo
-    will be ignored and must: be set dynamically with
-    flink:vkCmdSetBlendConstants before any draws are performed with a
-    pipeline state with sname:VkPipelineColorBlendAttachmentState member
-    pname:blendEnable set to ename:VK_TRUE and any of the blend functions
-    using a constant blend color.
-  * ename:VK_DYNAMIC_STATE_DEPTH_BOUNDS specifies that the
-    pname:minDepthBounds and pname:maxDepthBounds states of
-    slink:VkPipelineDepthStencilStateCreateInfo will be ignored and must: be
-    set dynamically with flink:vkCmdSetDepthBounds before any draws are
-    performed with a pipeline state with
-    slink:VkPipelineDepthStencilStateCreateInfo member
-    pname:depthBoundsTestEnable set to ename:VK_TRUE.
-  * ename:VK_DYNAMIC_STATE_STENCIL_COMPARE_MASK specifies that the
-    pname:compareMask state in slink:VkPipelineDepthStencilStateCreateInfo
-    for both pname:front and pname:back will be ignored and must: be set
-    dynamically with flink:vkCmdSetStencilCompareMask before any draws are
-    performed with a pipeline state with
-    slink:VkPipelineDepthStencilStateCreateInfo member
-    pname:stencilTestEnable set to ename:VK_TRUE
-  * ename:VK_DYNAMIC_STATE_STENCIL_WRITE_MASK specifies that the
-    pname:writeMask state in slink:VkPipelineDepthStencilStateCreateInfo for
-    both pname:front and pname:back will be ignored and must: be set
-    dynamically with flink:vkCmdSetStencilWriteMask before any draws are
-    performed with a pipeline state with
-    slink:VkPipelineDepthStencilStateCreateInfo member
-    pname:stencilTestEnable set to ename:VK_TRUE
-  * ename:VK_DYNAMIC_STATE_STENCIL_REFERENCE specifies that the
-    pname:reference state in slink:VkPipelineDepthStencilStateCreateInfo for
-    both pname:front and pname:back will be ignored and must: be set
-    dynamically with flink:vkCmdSetStencilReference before any draws are
-    performed with a pipeline state with
-    slink:VkPipelineDepthStencilStateCreateInfo member
-    pname:stencilTestEnable set to ename:VK_TRUE
-ifdef::VK_NV_clip_space_w_scaling[]
-  * ename:VK_DYNAMIC_STATE_VIEWPORT_W_SCALING_NV specifies that the
-    pname:pViewportScalings state in
-    slink:VkPipelineViewportWScalingStateCreateInfoNV will be ignored and
-    must: be set dynamically with flink:vkCmdSetViewportWScalingNV before
-    any draws are performed with a pipeline state with
-    slink:VkPipelineViewportWScalingStateCreateInfoNV member
-    pname:viewportScalingEnable set to ename:VK_TRUE
-endif::VK_NV_clip_space_w_scaling[]
-ifdef::VK_EXT_discard_rectangles[]
-  * ename:VK_DYNAMIC_STATE_DISCARD_RECTANGLE_EXT specifies that the
-    pname:pDiscardRectangles state in
-    slink:VkPipelineDiscardRectangleStateCreateInfoEXT will be ignored and
-    must: be set dynamically with flink:vkCmdSetDiscardRectangleEXT before
-    any draw or clear commands.
-    The elink:VkDiscardRectangleModeEXT and the number of active discard
-    rectangles is still specified by the pname:discardRectangleMode and
-    pname:discardRectangleCount members of
-    slink:VkPipelineDiscardRectangleStateCreateInfoEXT.
-endif::VK_EXT_discard_rectangles[]
-ifdef::VK_EXT_sample_locations[]
-  * ename:VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT specifies that the
-    pname:sampleLocationsInfo state in
-    slink:VkPipelineSampleLocationsStateCreateInfoEXT will be ignored and
-    must: be set dynamically with flink:vkCmdSetSampleLocationsEXT before
-    any draw or clear commands.
-    Enabling custom sample locations is still indicated by the
-    pname:sampleLocationsEnable member of
-    slink:VkPipelineSampleLocationsStateCreateInfoEXT.
-endif::VK_EXT_sample_locations[]
-ifdef::VK_NV_scissor_exclusive[]
-  * ename:VK_DYNAMIC_STATE_EXCLUSIVE_SCISSOR_NV specifies that the
-    pname:pExclusiveScissors state in
-    slink:VkPipelineViewportExclusiveScissorStateCreateInfoNV will be
-    ignored and must: be set dynamically with
-    flink:vkCmdSetExclusiveScissorNV before any drawing commands.
-    The number of exclusive scissor rectangles used by a pipeline is still
-    specified by the pname:exclusiveScissorCount member of
-    slink:VkPipelineViewportExclusiveScissorStateCreateInfoNV.
-endif::VK_NV_scissor_exclusive[]
-ifdef::VK_NV_shading_rate_image[]
-  * ename:VK_DYNAMIC_STATE_VIEWPORT_SHADING_RATE_PALETTE_NV specifies that
-    the pname:pShadingRatePalettes state in
-    slink:VkPipelineViewportShadingRateImageStateCreateInfoNV will be
-    ignored and must: be set dynamically with
-    flink:vkCmdSetViewportShadingRatePaletteNV before any drawing commands.
-  * ename:VK_DYNAMIC_STATE_VIEWPORT_COARSE_SAMPLE_ORDER_NV specifies that
-    the coarse sample order state in
-    slink:VkPipelineViewportCoarseSampleOrderStateCreateInfoNV will be
-    ignored and must: be set dynamically with
-    flink:vkCmdSetCoarseSampleOrderNV before any drawing commands.
-endif::VK_NV_shading_rate_image[]
-ifdef::VK_EXT_line_rasterization[]
-  * ename:VK_DYNAMIC_STATE_LINE_STIPPLE_EXT specifies that the
-    pname:lineStippleFactor and pname:lineStipplePattern state in
-    slink:VkPipelineRasterizationLineStateCreateInfoEXT will be ignored and
-    must: be set dynamically with flink:vkCmdSetLineStippleEXT before any
-    draws are performed with a pipeline state with
-    slink:VkPipelineRasterizationLineStateCreateInfoEXT member
-    pname:stippledLineEnable set to ename:VK_TRUE.
-endif::VK_EXT_line_rasterization[]
-ifdef::VK_EXT_extended_dynamic_state[]
-  * ename:VK_DYNAMIC_STATE_CULL_MODE_EXT specifies that the pname:cullMode
-    state in slink:VkPipelineRasterizationStateCreateInfo will be ignored
-    and must: be set dynamically with flink:vkCmdSetCullModeEXT before any
-    drawing commands.
-  * ename:VK_DYNAMIC_STATE_FRONT_FACE_EXT specifies that the pname:frontFace
-    state in slink:VkPipelineRasterizationStateCreateInfo will be ignored
-    and must: be set dynamically with flink:vkCmdSetFrontFaceEXT before any
-    drawing commands.
-  * ename:VK_DYNAMIC_STATE_PRIMITIVE_TOPOLOGY_EXT specifies that the
-    pname:topology state in slink:VkPipelineInputAssemblyStateCreateInfo
-    only specifies the <<drawing-primitive-topology-class, topology class>>,
-    and the specific topology order and adjacency must: be set dynamically
-    with flink:vkCmdSetPrimitiveTopologyEXT before any drawing commands.
-  * ename:VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT specifies that the
-    pname:viewportCount and pname:pViewports state in
-    slink:VkPipelineViewportStateCreateInfo will be ignored and must: be set
-    dynamically with flink:vkCmdSetViewportWithCountEXT before any draw
-    call.
-  * ename:VK_DYNAMIC_STATE_SCISSOR_WITH_COUNT_EXT specifies that the
-    pname:scissorCount and pname:pScissors state in
-    slink:VkPipelineViewportStateCreateInfo will be ignored and must: be set
-    dynamically with flink:vkCmdSetScissorWithCountEXT before any draw call.
-  * ename:VK_DYNAMIC_STATE_VERTEX_INPUT_BINDING_STRIDE_EXT specifies that
-    the pname:stride state in slink:VkVertexInputBindingDescription will be
-    ignored and must: be set dynamically with
-    flink:vkCmdBindVertexBuffers2EXT before any draw call.
-  * ename:VK_DYNAMIC_STATE_DEPTH_TEST_ENABLE_EXT specifies that the
-    pname:depthTestEnable state in
-    slink:VkPipelineDepthStencilStateCreateInfo will be ignored and must: be
-    set dynamically with flink:vkCmdSetDepthTestEnableEXT before any draw
-    call.
-  * ename:VK_DYNAMIC_STATE_DEPTH_WRITE_ENABLE_EXT specifies that the
-    pname:depthWriteEnable state in
-    slink:VkPipelineDepthStencilStateCreateInfo will be ignored and must: be
-    set dynamically with flink:vkCmdSetDepthWriteEnableEXT before any draw
-    call.
-  * ename:VK_DYNAMIC_STATE_DEPTH_COMPARE_OP_EXT specifies that the
-    pname:depthCompareOp state in
-    slink:VkPipelineDepthStencilStateCreateInfo will be ignored and must: be
-    set dynamically with flink:vkCmdSetDepthCompareOpEXT before any draw
-    call.
-  * ename:VK_DYNAMIC_STATE_DEPTH_BOUNDS_TEST_ENABLE_EXT specifies that the
-    pname:depthBoundsTestEnable state in
-    slink:VkPipelineDepthStencilStateCreateInfo will be ignored and must: be
-    set dynamically with flink:vkCmdSetDepthBoundsTestEnableEXT before any
-    draw call.
-  * ename:VK_DYNAMIC_STATE_STENCIL_TEST_ENABLE_EXT specifies that the
-    pname:stencilTestEnable state in
-    slink:VkPipelineDepthStencilStateCreateInfo will be ignored and must: be
-    set dynamically with flink:vkCmdSetStencilTestEnableEXT before any draw
-    call.
-  * ename:VK_DYNAMIC_STATE_STENCIL_OP_EXT specifies that the pname:failOp,
-    pname:passOp, pname:depthFailOp, and pname:compareOp states in
-    sname:VkPipelineDepthStencilStateCreateInfo for both pname:front and
-    pname:back will be ignored and must: be set dynamically with
-    flink:vkCmdSetStencilOpEXT before any draws are performed with a
-    pipeline state with sname:VkPipelineDepthStencilStateCreateInfo member
-    pname:stencilTestEnable set to ename:VK_TRUE
-endif::VK_EXT_extended_dynamic_state[]
-ifdef::VK_EXT_extended_dynamic_state2[]
-  * ename:VK_DYNAMIC_STATE_PATCH_CONTROL_POINTS_EXT specifies that the
-    pname:patchControlPoints state in
-    slink:VkPipelineTessellationStateCreateInfo will be ignored and must: be
-    set dynamically with flink:vkCmdSetPatchControlPointsEXT before any
-    drawing commands.
-  * ename:VK_DYNAMIC_STATE_RASTERIZER_DISCARD_ENABLE_EXT specifies that the
-    pname:rasterizerDiscardEnable state in
-    slink:VkPipelineRasterizationStateCreateInfo will be ignored and must:
-    be set dynamically with flink:vkCmdSetRasterizerDiscardEnableEXT before
-    any drawing commands.
-  * ename:VK_DYNAMIC_STATE_DEPTH_BIAS_ENABLE_EXT specifies that the
-    pname:depthBiasEnable state in
-    slink:VkPipelineRasterizationStateCreateInfo will be ignored and must:
-    be set dynamically with flink:vkCmdSetDepthBiasEnableEXT before any
-    drawing commands.
-  * ename:VK_DYNAMIC_STATE_LOGIC_OP_EXT specifies that the pname:logicOp
-    state in slink:VkPipelineColorBlendStateCreateInfo will be ignored and
-    must: be set dynamically with flink:vkCmdSetLogicOpEXT before any
-    drawing commands.
-  * ename:VK_DYNAMIC_STATE_PRIMITIVE_RESTART_ENABLE_EXT specifies that the
-    pname:primitiveRestartEnable state in
-    slink:VkPipelineInputAssemblyStateCreateInfo will be ignored and must:
-    be set dynamically with flink:vkCmdSetPrimitiveRestartEnableEXT before
-    any drawing commands.
-endif::VK_EXT_extended_dynamic_state2[]
-ifdef::VK_KHR_fragment_shading_rate[]
-  * ename:VK_DYNAMIC_STATE_FRAGMENT_SHADING_RATE_KHR specifies that state in
-    slink:VkPipelineFragmentShadingRateStateCreateInfoKHR
-ifdef::VK_NV_fragment_shading_rate_enums[]
-    and slink:VkPipelineFragmentShadingRateEnumStateCreateInfoNV
-endif::VK_NV_fragment_shading_rate_enums[]
-    will be ignored and must: be set dynamically with
-    flink:vkCmdSetFragmentShadingRateKHR
-ifdef::VK_NV_fragment_shading_rate_enums[]
-    or flink:vkCmdSetFragmentShadingRateEnumNV
-endif::VK_NV_fragment_shading_rate_enums[]
-    before any drawing commands.
-endif::VK_KHR_fragment_shading_rate[]
-ifdef::VK_KHR_ray_tracing_pipeline[]
-  * ename:VK_DYNAMIC_STATE_RAY_TRACING_PIPELINE_STACK_SIZE_KHR specifies
-    that the default stack size computation for the pipeline will be ignored
-    and must: be set dynamically with
-    flink:vkCmdSetRayTracingPipelineStackSizeKHR before any ray tracing
-    calls are performed.
-endif::VK_KHR_ray_tracing_pipeline[]
-ifdef::VK_EXT_vertex_input_dynamic_state[]
-  * ename:VK_DYNAMIC_STATE_VERTEX_INPUT_EXT specifies that the
-    pname:pVertexInputState state will be ignored and must: be set
-    dynamically with flink:vkCmdSetVertexInputEXT before any drawing
-    commands
-endif::VK_EXT_vertex_input_dynamic_state[]
-ifdef::VK_EXT_color_write_enable[]
-  * ename:VK_DYNAMIC_STATE_COLOR_WRITE_ENABLE_EXT specifies that the
-    pname:pColorWriteEnables state in
-    slink:VkPipelineColorWriteCreateInfoEXT will be ignored and must: be set
-    dynamically with flink:vkCmdSetColorWriteEnableEXT before any draw call.
-endif::VK_EXT_color_write_enable[]
---
-
-
-=== Valid Combinations of Stages for Graphics Pipelines
-
-ifdef::VK_NV_mesh_shader[]
-The geometric primitive processing can either be handled on a per primitive
-basis by the vertex, tessellation, and geometry shader stages, or on a per
-mesh basis using task and mesh shader stages.
-If the pipeline includes a mesh shader stage, it uses the mesh pipeline,
-otherwise it uses the primitive pipeline.
-
-If a task shader is omitted, the task shading stage is skipped.
-endif::VK_NV_mesh_shader[]
-
-If tessellation shader stages are omitted, the tessellation shading and
-fixed-function stages of the pipeline are skipped.
-
-If a geometry shader is omitted, the geometry shading stage is skipped.
-
-If a fragment shader is omitted, fragment color outputs have undefined:
-values, and the fragment depth value is unmodified.
-This can: be useful for depth-only rendering.
-
-Presence of a shader stage in a pipeline is indicated by including a valid
-slink:VkPipelineShaderStageCreateInfo with pname:module and pname:pName
-selecting an entry point from a shader module, where that entry point is
-valid for the stage specified by pname:stage.
-
-Presence of some of the fixed-function stages in the pipeline is implicitly
-derived from enabled shaders and provided state.
-For example, the fixed-function tessellator is always present when the
-pipeline has valid Tessellation Control and Tessellation Evaluation shaders.
-
-.For example:
-  * Depth/stencil-only rendering in a subpass with no color attachments
-  ** Active Pipeline Shader Stages
-  *** Vertex Shader
-  ** Required: Fixed-Function Pipeline Stages
-  *** slink:VkPipelineVertexInputStateCreateInfo
-  *** slink:VkPipelineInputAssemblyStateCreateInfo
-  *** slink:VkPipelineViewportStateCreateInfo
-  *** slink:VkPipelineRasterizationStateCreateInfo
-  *** slink:VkPipelineMultisampleStateCreateInfo
-  *** slink:VkPipelineDepthStencilStateCreateInfo
-  * Color-only rendering in a subpass with no depth/stencil attachment
-  ** Active Pipeline Shader Stages
-  *** Vertex Shader
-  *** Fragment Shader
-  ** Required: Fixed-Function Pipeline Stages
-  *** slink:VkPipelineVertexInputStateCreateInfo
-  *** slink:VkPipelineInputAssemblyStateCreateInfo
-  *** slink:VkPipelineViewportStateCreateInfo
-  *** slink:VkPipelineRasterizationStateCreateInfo
-  *** slink:VkPipelineMultisampleStateCreateInfo
-  *** slink:VkPipelineColorBlendStateCreateInfo
-  * Rendering pipeline with tessellation and geometry shaders
-  ** Active Pipeline Shader Stages
-  *** Vertex Shader
-  *** Tessellation Control Shader
-  *** Tessellation Evaluation Shader
-  *** Geometry Shader
-  *** Fragment Shader
-  ** Required: Fixed-Function Pipeline Stages
-  *** slink:VkPipelineVertexInputStateCreateInfo
-  *** slink:VkPipelineInputAssemblyStateCreateInfo
-  *** slink:VkPipelineTessellationStateCreateInfo
-  *** slink:VkPipelineViewportStateCreateInfo
-  *** slink:VkPipelineRasterizationStateCreateInfo
-  *** slink:VkPipelineMultisampleStateCreateInfo
-  *** slink:VkPipelineDepthStencilStateCreateInfo
-  *** slink:VkPipelineColorBlendStateCreateInfo
-ifdef::VK_NV_mesh_shader[]
-  * Rendering pipeline with task and mesh shaders
-  ** Active Pipeline Shader Stages
-  *** Task Shader
-  *** Mesh Shader
-  *** Fragment Shader
-  ** Required: Fixed-Function Pipeline Stages
-  *** slink:VkPipelineViewportStateCreateInfo
-  *** slink:VkPipelineRasterizationStateCreateInfo
-  *** slink:VkPipelineMultisampleStateCreateInfo
-  *** slink:VkPipelineDepthStencilStateCreateInfo
-  *** slink:VkPipelineColorBlendStateCreateInfo
-endif::VK_NV_mesh_shader[]
-
-
-ifdef::VK_NV_device_generated_commands[]
-[[graphics-shadergroups]]
-=== Graphics Pipeline Shader Groups
-
-Graphics pipelines can contain multiple shader groups that can be bound
-individually.
-Each shader group behaves as if it was a pipeline using the shader group's
-state.
-When the pipeline is bound by regular means, it behaves as if the state of
-group `0` is active, use flink:vkCmdBindPipelineShaderGroupNV to bind an
-invidual shader group.
-
-The primary purpose of shader groups is allowing the device to bind
-different pipeline state using <<device-generated-commands>>.
-
-[open,refpage='VkGraphicsPipelineShaderGroupsCreateInfoNV',desc='Structure specifying parameters of a newly created multi shader group pipeline',type='structs']
---
-The sname:VkGraphicsPipelineShaderGroupsCreateInfoNV structure is defined
-as:
-
-include::{generated}/api/structs/VkGraphicsPipelineShaderGroupsCreateInfoNV.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:groupCount is the number of elements in the pname:pGroups array.
-  * pname:pGroups is a pointer to an array of
-    slink:VkGraphicsShaderGroupCreateInfoNV structures specifying which
-    state of the original slink:VkGraphicsPipelineCreateInfo each shader
-    group overrides.
-  * pname:pipelineCount is the number of elements in the pname:pPipelines
-    array.
-  * pname:pPipelines is a pointer to an array of graphics sname:VkPipeline
-    structures which are referenced within the created pipeline, including
-    all their shader groups.
-
-When referencing shader groups by index, groups defined in the referenced
-pipelines are treated as if they were defined as additional entries in
-pname:pGroups.
-They are appended in the order they appear in the pname:pPipelines array and
-in the pname:pGroups array when those pipelines were defined.
-
-The application must: maintain the lifetime of all such referenced pipelines
-based on the pipelines that make use of them.
-
-.Valid Usage
-****
-  * [[VUID-VkGraphicsPipelineShaderGroupsCreateInfoNV-groupCount-02879]]
-    pname:groupCount must: be at least `1` and as maximum
-    sname:VkPhysicalDeviceDeviceGeneratedCommandsPropertiesNV::pname:maxGraphicsShaderGroupCount
-  * [[VUID-VkGraphicsPipelineShaderGroupsCreateInfoNV-groupCount-02880]]
-    The sum of pname:groupCount including those groups added from referenced
-    pname:pPipelines must: also be as maximum
-    sname:VkPhysicalDeviceDeviceGeneratedCommandsPropertiesNV::pname:maxGraphicsShaderGroupCount
-  * [[VUID-VkGraphicsPipelineShaderGroupsCreateInfoNV-pGroups-02881]]
-    The state of the first element of pname:pGroups must: match its
-    equivalent within the parent's slink:VkGraphicsPipelineCreateInfo
-  * [[VUID-VkGraphicsPipelineShaderGroupsCreateInfoNV-pGroups-02882]]
-    Each element of pname:pGroups must: in combination with the rest of the
-    pipeline state yield a valid state configuration
-ifndef::VK_NV_mesh_shader[]
-  * [[VUID-VkGraphicsPipelineShaderGroupsCreateInfoNV-pGroups-02883]]
-    All elements of pname:pGroups must: use the same shader stage
-    combinations
-endif::VK_NV_mesh_shader[]
-ifdef::VK_NV_mesh_shader[]
-  * [[VUID-VkGraphicsPipelineShaderGroupsCreateInfoNV-pGroups-02884]]
-    All elements of pname:pGroups must: use the same shader stage
-    combinations unless any mesh shader stage is used, then either
-    combination of task and mesh or just mesh shader is valid
-  * [[VUID-VkGraphicsPipelineShaderGroupsCreateInfoNV-pGroups-02885]]
-    Mesh and regular primitive shading stages cannot be mixed across
-    pname:pGroups
-endif::VK_NV_mesh_shader[]
-  * [[VUID-VkGraphicsPipelineShaderGroupsCreateInfoNV-pPipelines-02886]]
-    Each element of pname:pPipelines must: have been created with identical
-    state to the pipeline currently created except the state that can be
-    overridden by slink:VkGraphicsShaderGroupCreateInfoNV
-  * [[VUID-VkGraphicsPipelineShaderGroupsCreateInfoNV-deviceGeneratedCommands-02887]]
-    The <<features-deviceGeneratedCommands,
-    sname:VkPhysicalDeviceDeviceGeneratedCommandsFeaturesNV::pname:deviceGeneratedCommands>>
-    feature must: be enabled
-****
-
-include::{generated}/validity/structs/VkGraphicsPipelineShaderGroupsCreateInfoNV.txt[]
---
-
-[open,refpage='VkGraphicsShaderGroupCreateInfoNV',desc='Structure specifying override parameters for each shader group',type='structs']
---
-The sname:VkGraphicsShaderGroupCreateInfoNV structure provides the state
-overrides for each shader group.
-Each shader group behaves like a pipeline that was created from its state as
-well as the remaining parent's state.
-It is defined as:
-
-include::{generated}/api/structs/VkGraphicsShaderGroupCreateInfoNV.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:stageCount is the number of entries in the pname:pStages array.
-  * pname:pStages is a pointer to an array
-    slink:VkPipelineShaderStageCreateInfo structures specifying the set of
-    the shader stages to be included in this shader group.
-  * pname:pVertexInputState is a pointer to a
-    slink:VkPipelineVertexInputStateCreateInfo structure.
-  * pname:pTessellationState is a pointer to a
-    slink:VkPipelineTessellationStateCreateInfo structure, and is ignored if
-    the shader group does not include a tessellation control shader stage
-    and tessellation evaluation shader stage.
-
-.Valid Usage
-****
-  * [[VUID-VkGraphicsShaderGroupCreateInfoNV-stageCount-02888]]
-    For pname:stageCount, the same restrictions as in
-    slink:VkGraphicsPipelineCreateInfo::pname:stageCount apply
-  * [[VUID-VkGraphicsShaderGroupCreateInfoNV-pStages-02889]]
-    For pname:pStages, the same restrictions as in
-    slink:VkGraphicsPipelineCreateInfo::pname:pStages apply
-  * [[VUID-VkGraphicsShaderGroupCreateInfoNV-pVertexInputState-02890]]
-    For pname:pVertexInputState, the same restrictions as in
-    slink:VkGraphicsPipelineCreateInfo::pname:pVertexInputState apply
-  * [[VUID-VkGraphicsShaderGroupCreateInfoNV-pTessellationState-02891]]
-    For pname:pTessellationState, the same restrictions as in
-    slink:VkGraphicsPipelineCreateInfo::pname:pTessellationState apply
-****
-
-include::{generated}/validity/structs/VkGraphicsShaderGroupCreateInfoNV.txt[]
---
-endif::VK_NV_device_generated_commands[]
-
-
-ifdef::VK_NV_ray_tracing,VK_KHR_ray_tracing_pipeline[]
-[[pipelines-ray-tracing]]
-== Ray Tracing Pipelines
-
-Ray tracing pipelines consist of multiple shader stages, fixed-function
-traversal stages, and a pipeline layout.
-
-[open,refpage='VK_SHADER_UNUSED_KHR',desc='Sentinel for an unused shader index',type='consts',alias='VK_SHADER_UNUSED_NV']
---
-ename:VK_SHADER_UNUSED_KHR is a special shader index used to indicate that a
-ray generation, miss, or callable shader member is not used.
-
-include::{generated}/api/enums/VK_SHADER_UNUSED_KHR.txt[]
-
-ifdef::VK_NV_ray_tracing[]
-or the equivalent
-
-include::{generated}/api/enums/VK_SHADER_UNUSED_NV.txt[]
-endif::VK_NV_ray_tracing[]
---
-
-ifdef::VK_NV_ray_tracing[]
-[open,refpage='vkCreateRayTracingPipelinesNV',desc='Creates a new ray tracing pipeline object',type='protos']
---
-:refpage: vkCreateRayTracingPipelinesNV
-
-To create ray tracing pipelines, call:
-
-include::{generated}/api/protos/vkCreateRayTracingPipelinesNV.txt[]
-
-  * pname:device is the logical device that creates the ray tracing
-    pipelines.
-  * pname:pipelineCache is either dlink:VK_NULL_HANDLE, indicating that
-    pipeline caching is disabled, or the handle of a valid
-    <<pipelines-cache,pipeline cache>> object, in which case use of that
-    cache is enabled for the duration of the command.
-  * pname:createInfoCount is the length of the pname:pCreateInfos and
-    pname:pPipelines arrays.
-  * pname:pCreateInfos is a pointer to an array of
-    slink:VkRayTracingPipelineCreateInfoNV structures.
-  * pname:pAllocator controls host memory allocation as described in the
-    <<memory-allocation, Memory Allocation>> chapter.
-  * pname:pPipelines is a pointer to an array in which the resulting ray
-    tracing pipeline objects are returned.
-
-.Valid Usage
-****
-include::{chapters}/commonvalidity/create_ray_tracing_pipelines_common.txt[]
-****
-
-include::{generated}/validity/protos/vkCreateRayTracingPipelinesNV.txt[]
---
-endif::VK_NV_ray_tracing[]
-
-ifdef::VK_KHR_ray_tracing_pipeline[]
-[open,refpage='vkCreateRayTracingPipelinesKHR',desc='Creates a new ray tracing pipeline object',type='protos']
---
-:refpage: vkCreateRayTracingPipelinesKHR
-
-To create ray tracing pipelines, call:
-
-include::{generated}/api/protos/vkCreateRayTracingPipelinesKHR.txt[]
-
-  * pname:device is the logical device that creates the ray tracing
-    pipelines.
-  * pname:deferredOperation is dlink:VK_NULL_HANDLE or the handle of a valid
-    slink:VkDeferredOperationKHR <<deferred-host-operations-requesting,
-    request deferral>> object for this command.
-  * pname:pipelineCache is either dlink:VK_NULL_HANDLE, indicating that
-    pipeline caching is disabled, or the handle of a valid
-    <<pipelines-cache,pipeline cache>> object, in which case use of that
-    cache is enabled for the duration of the command.
-  * pname:createInfoCount is the length of the pname:pCreateInfos and
-    pname:pPipelines arrays.
-  * pname:pCreateInfos is a pointer to an array of
-    slink:VkRayTracingPipelineCreateInfoKHR structures.
-  * pname:pAllocator controls host memory allocation as described in the
-    <<memory-allocation, Memory Allocation>> chapter.
-  * pname:pPipelines is a pointer to an array in which the resulting ray
-    tracing pipeline objects are returned.
-
-The ename:VK_ERROR_INVALID_OPAQUE_CAPTURE_ADDRESS error is returned if the
-implementation is unable to re-use the shader group handles provided in
-slink:VkRayTracingShaderGroupCreateInfoKHR::pname:pShaderGroupCaptureReplayHandle
-when
-slink:VkPhysicalDeviceRayTracingPipelineFeaturesKHR::pname:rayTracingPipelineShaderGroupHandleCaptureReplay
-is enabled.
-
-.Valid Usage
-****
-include::{chapters}/commonvalidity/create_ray_tracing_pipelines_common.txt[]
-include::{chapters}/commonvalidity/deferred_operations_common.txt[]
-  * [[VUID-vkCreateRayTracingPipelinesKHR-rayTracingPipeline-03586]]
-    The <<features-rayTracingPipeline, pname:rayTracingPipeline>> feature
-    must: be enabled
-ifdef::VK_EXT_pipeline_creation_cache_control+VK_KHR_deferred_host_operations[]
-  * [[VUID-vkCreateRayTracingPipelinesKHR-deferredOperation-03587]]
-    If pname:deferredOperation is not dlink:VK_NULL_HANDLE, the pname:flags
-    member of elements of pname:pCreateInfos must: not include
-    ename:VK_PIPELINE_CREATE_EARLY_RETURN_ON_FAILURE_BIT_EXT
-endif::VK_EXT_pipeline_creation_cache_control+VK_KHR_deferred_host_operations[]
-****
-
-include::{generated}/validity/protos/vkCreateRayTracingPipelinesKHR.txt[]
---
-endif::VK_KHR_ray_tracing_pipeline[]
-
-ifdef::VK_NV_ray_tracing[]
-[open,refpage='VkRayTracingPipelineCreateInfoNV',desc='Structure specifying parameters of a newly created ray tracing pipeline',type='structs']
---
-:refpage: VkRayTracingPipelineCreateInfoNV
-
-The sname:VkRayTracingPipelineCreateInfoNV structure is defined as:
-
-include::{generated}/api/structs/VkRayTracingPipelineCreateInfoNV.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:flags is a bitmask of elink:VkPipelineCreateFlagBits specifying
-    how the pipeline will be generated.
-  * pname:stageCount is the number of entries in the pname:pStages array.
-  * pname:pStages is a pointer to an array of
-    slink:VkPipelineShaderStageCreateInfo structures specifying the set of
-    the shader stages to be included in the ray tracing pipeline.
-  * pname:groupCount is the number of entries in the pname:pGroups array.
-  * pname:pGroups is a pointer to an array of
-    slink:VkRayTracingShaderGroupCreateInfoNV structures describing the set
-    of the shader stages to be included in each shader group in the ray
-    tracing pipeline.
-  * pname:maxRecursionDepth is the <<ray-tracing-recursion-depth, maximum
-    recursion depth>> of shaders executed by this pipeline.
-  * pname:layout is the description of binding locations used by both the
-    pipeline and descriptor sets used with the pipeline.
-  * pname:basePipelineHandle is a pipeline to derive from.
-  * pname:basePipelineIndex is an index into the pname:pCreateInfos
-    parameter to use as a pipeline to derive from.
-
-The parameters pname:basePipelineHandle and pname:basePipelineIndex are
-described in more detail in <<pipelines-pipeline-derivatives,Pipeline
-Derivatives>>.
-
-.Valid Usage
-****
-include::{chapters}/commonvalidity/ray_tracing_pipeline_create_info_common.txt[]
-  * [[VUID-VkRayTracingPipelineCreateInfoNV-stage-06232]]
-    The pname:stage member of at least one element of pname:pStages must: be
-    ename:VK_SHADER_STAGE_RAYGEN_BIT_KHR
-ifdef::VK_KHR_pipeline_library[]
-  * [[VUID-VkRayTracingPipelineCreateInfoNV-flags-03456]]
-    pname:flags must: not include ename:VK_PIPELINE_CREATE_LIBRARY_BIT_KHR
-endif::VK_KHR_pipeline_library[]
-  * [[VUID-VkRayTracingPipelineCreateInfoNV-maxRecursionDepth-03457]]
-    pname:maxRecursionDepth must: be less than or equal to
-    slink:VkPhysicalDeviceRayTracingPropertiesNV::pname:maxRecursionDepth
-ifdef::VK_KHR_ray_tracing_pipeline[]
-  * [[VUID-VkRayTracingPipelineCreateInfoNV-flags-03458]]
-    pname:flags must: not include
-    ename:VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_ANY_HIT_SHADERS_BIT_KHR
-  * [[VUID-VkRayTracingPipelineCreateInfoNV-flags-03459]]
-    pname:flags must: not include
-    ename:VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_CLOSEST_HIT_SHADERS_BIT_KHR
-  * [[VUID-VkRayTracingPipelineCreateInfoNV-flags-03460]]
-    pname:flags must: not include
-    ename:VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_MISS_SHADERS_BIT_KHR
-  * [[VUID-VkRayTracingPipelineCreateInfoNV-flags-03461]]
-    pname:flags must: not include
-    ename:VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_INTERSECTION_SHADERS_BIT_KHR
-  * [[VUID-VkRayTracingPipelineCreateInfoNV-flags-03462]]
-    pname:flags must: not include
-    ename:VK_PIPELINE_CREATE_RAY_TRACING_SKIP_AABBS_BIT_KHR
-  * [[VUID-VkRayTracingPipelineCreateInfoNV-flags-03463]]
-    pname:flags must: not include
-    ename:VK_PIPELINE_CREATE_RAY_TRACING_SKIP_TRIANGLES_BIT_KHR
-  * [[VUID-VkRayTracingPipelineCreateInfoNV-flags-03588]]
-    pname:flags must: not include
-    ename:VK_PIPELINE_CREATE_RAY_TRACING_SHADER_GROUP_HANDLE_CAPTURE_REPLAY_BIT_KHR
-endif::VK_KHR_ray_tracing_pipeline[]
-ifdef::VK_NV_ray_tracing_motion_blur[]
-  * [[VUID-VkRayTracingPipelineCreateInfoNV-flags-04948]]
-    pname:flags must: not include
-    ename:VK_PIPELINE_CREATE_RAY_TRACING_ALLOW_MOTION_BIT_NV
-endif::VK_NV_ray_tracing_motion_blur[]
-ifdef::VK_EXT_pipeline_creation_cache_control[]
-  * [[VUID-VkRayTracingPipelineCreateInfoNV-flags-02957]]
-    pname:flags must: not include both
-    ename:VK_PIPELINE_CREATE_DEFER_COMPILE_BIT_NV and
-    ename:VK_PIPELINE_CREATE_FAIL_ON_PIPELINE_COMPILE_REQUIRED_BIT_EXT at
-    the same time
-endif::VK_EXT_pipeline_creation_cache_control[]
-****
-
-include::{generated}/validity/structs/VkRayTracingPipelineCreateInfoNV.txt[]
---
-endif::VK_NV_ray_tracing[]
-
-ifdef::VK_KHR_ray_tracing_pipeline[]
-[open,refpage='VkRayTracingPipelineCreateInfoKHR',desc='Structure specifying parameters of a newly created ray tracing pipeline',type='structs']
---
-:refpage: VkRayTracingPipelineCreateInfoKHR
-
-The sname:VkRayTracingPipelineCreateInfoKHR structure is defined as:
-
-include::{generated}/api/structs/VkRayTracingPipelineCreateInfoKHR.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:flags is a bitmask of elink:VkPipelineCreateFlagBits specifying
-    how the pipeline will be generated.
-  * pname:stageCount is the number of entries in the pname:pStages array.
-  * pname:pStages is a pointer to an array of pname:stageCount
-    slink:VkPipelineShaderStageCreateInfo structures describing the set of
-    the shader stages to be included in the ray tracing pipeline.
-  * pname:groupCount is the number of entries in the pname:pGroups array.
-  * pname:pGroups is a pointer to an array of pname:groupCount
-    slink:VkRayTracingShaderGroupCreateInfoKHR structures describing the set
-    of the shader stages to be included in each shader group in the ray
-    tracing pipeline.
-  * pname:maxPipelineRayRecursionDepth is the <<ray-tracing-recursion-depth,
-    maximum recursion depth>> of shaders executed by this pipeline.
-  * pname:pLibraryInfo is a pointer to a
-    slink:VkPipelineLibraryCreateInfoKHR structure defining pipeline
-    libraries to include.
-  * pname:pLibraryInterface is a pointer to a
-    slink:VkRayTracingPipelineInterfaceCreateInfoKHR structure defining
-    additional information when using pipeline libraries.
-  * pname:pDynamicState is a pointer to a
-    slink:VkPipelineDynamicStateCreateInfo structure, and is used to
-    indicate which properties of the pipeline state object are dynamic and
-    can: be changed independently of the pipeline state.
-    This can: be `NULL`, which means no state in the pipeline is considered
-    dynamic.
-  * pname:layout is the description of binding locations used by both the
-    pipeline and descriptor sets used with the pipeline.
-  * pname:basePipelineHandle is a pipeline to derive from.
-  * pname:basePipelineIndex is an index into the pname:pCreateInfos
-    parameter to use as a pipeline to derive from.
-
-The parameters pname:basePipelineHandle and pname:basePipelineIndex are
-described in more detail in <<pipelines-pipeline-derivatives,Pipeline
-Derivatives>>.
-
-ifdef::VK_KHR_pipeline_library[]
-When ename:VK_PIPELINE_CREATE_LIBRARY_BIT_KHR is specified, this pipeline
-defines a _pipeline library_ which cannot: be bound as a ray tracing
-pipeline directly.
-Instead, pipeline libraries define common shaders and shader groups which
-can: be included in future pipeline creation.
-
-If pipeline libraries are included in pname:pLibraryInfo, shaders defined in
-those libraries are treated as if they were defined as additional entries in
-pname:pStages, appended in the order they appear in the pname:pLibraries
-array and in the pname:pStages array when those libraries were defined.
-
-When referencing shader groups in order to obtain a shader group handle,
-groups defined in those libraries are treated as if they were defined as
-additional entries in pname:pGroups, appended in the order they appear in
-the pname:pLibraries array and in the pname:pGroups array when those
-libraries were defined.
-The shaders these groups reference are set when the pipeline library is
-created, referencing those specified in the pipeline library, not in the
-pipeline that includes it.
-endif::VK_KHR_pipeline_library[]
-
-The default stack size for a pipeline if
-ename:VK_DYNAMIC_STATE_RAY_TRACING_PIPELINE_STACK_SIZE_KHR is not provided
-is computed as described in <<ray-tracing-pipeline-stack, Ray Tracing
-Pipeline Stack>>.
-
-.Valid Usage
-****
-include::{chapters}/commonvalidity/ray_tracing_pipeline_create_info_common.txt[]
-  * [[VUID-VkRayTracingPipelineCreateInfoKHR-stage-03425]]
-    If pname:flags does not include
-    ename:VK_PIPELINE_CREATE_LIBRARY_BIT_KHR, the pname:stage member of at
-    least one element of pname:pStages, including those implicitly added by
-    pname:pLibraryInfo, must: be ename:VK_SHADER_STAGE_RAYGEN_BIT_KHR
-  * [[VUID-VkRayTracingPipelineCreateInfoKHR-maxPipelineRayRecursionDepth-03589]]
-    pname:maxPipelineRayRecursionDepth must: be less than or equal to
-    slink:VkPhysicalDeviceRayTracingPipelinePropertiesKHR::pname:maxRayRecursionDepth
-ifdef::VK_KHR_pipeline_library[]
-  * [[VUID-VkRayTracingPipelineCreateInfoKHR-flags-03465]]
-    If pname:flags includes ename:VK_PIPELINE_CREATE_LIBRARY_BIT_KHR,
-    pname:pLibraryInterface must: not be `NULL`
-  * [[VUID-VkRayTracingPipelineCreateInfoKHR-pLibraryInfo-03590]]
-    If pname:pLibraryInfo is not `NULL` and its pname:libraryCount member is
-    greater than `0`, its pname:pLibraryInterface member must: not be `NULL`
-  * [[VUID-VkRayTracingPipelineCreateInfoKHR-pLibraries-03591]]
-    Each element of pname:pLibraryInfo->pLibraries must: have been created
-    with the value of pname:maxPipelineRayRecursionDepth equal to that in
-    this pipeline
-  * [[VUID-VkRayTracingPipelineCreateInfoKHR-pLibraryInfo-03592]]
-    If pname:pLibraryInfo is not `NULL`, each element of its
-    pname:pLibraries member must: have been created with a pname:layout that
-    is compatible with the pname:layout in this pipeline
-  * [[VUID-VkRayTracingPipelineCreateInfoKHR-pLibraryInfo-03593]]
-    If pname:pLibraryInfo is not `NULL`, each element of its
-    pname:pLibraries member must: have been created with values of the
-    pname:maxPipelineRayPayloadSize and pname:maxPipelineRayHitAttributeSize
-    members of pname:pLibraryInterface equal to those in this pipeline
-  * [[VUID-VkRayTracingPipelineCreateInfoKHR-flags-03594]]
-    If pname:flags includes
-    ename:VK_PIPELINE_CREATE_RAY_TRACING_SHADER_GROUP_HANDLE_CAPTURE_REPLAY_BIT_KHR,
-    each element of pname:pLibraryInfo->pLibraries must: have been created
-    with the
-    ename:VK_PIPELINE_CREATE_RAY_TRACING_SHADER_GROUP_HANDLE_CAPTURE_REPLAY_BIT_KHR
-    bit set
-  * [[VUID-VkRayTracingPipelineCreateInfoKHR-flags-04718]]
-    If pname:flags includes
-    ename:VK_PIPELINE_CREATE_RAY_TRACING_SKIP_AABBS_BIT_KHR, each element of
-    pname:pLibraryInfo->pLibraries must: have been created with the
-    ename:VK_PIPELINE_CREATE_RAY_TRACING_SKIP_AABBS_BIT_KHR bit set
-  * [[VUID-VkRayTracingPipelineCreateInfoKHR-flags-04719]]
-    If pname:flags includes
-    ename:VK_PIPELINE_CREATE_RAY_TRACING_SKIP_TRIANGLES_BIT_KHR, each
-    element of pname:pLibraryInfo->pLibraries must: have been created with
-    the ename:VK_PIPELINE_CREATE_RAY_TRACING_SKIP_TRIANGLES_BIT_KHR bit set
-  * [[VUID-VkRayTracingPipelineCreateInfoKHR-flags-04720]]
-    If pname:flags includes
-    ename:VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_ANY_HIT_SHADERS_BIT_KHR,
-    each element of pname:pLibraryInfo->pLibraries must: have been created
-    with the
-    ename:VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_ANY_HIT_SHADERS_BIT_KHR bit
-    set
-  * [[VUID-VkRayTracingPipelineCreateInfoKHR-flags-04721]]
-    If pname:flags includes
-    ename:VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_CLOSEST_HIT_SHADERS_BIT_KHR,
-    each element of pname:pLibraryInfo->pLibraries must: have been created
-    with the
-    ename:VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_CLOSEST_HIT_SHADERS_BIT_KHR
-    bit set
-  * [[VUID-VkRayTracingPipelineCreateInfoKHR-flags-04722]]
-    If pname:flags includes
-    ename:VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_INTERSECTION_SHADERS_BIT_KHR,
-    each element of pname:pLibraryInfo->pLibraries must: have been created
-    with the
-    ename:VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_INTERSECTION_SHADERS_BIT_KHR
-    bit set
-  * [[VUID-VkRayTracingPipelineCreateInfoKHR-flags-04723]]
-    If pname:flags includes
-    ename:VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_MISS_SHADERS_BIT_KHR, each
-    element of pname:pLibraryInfo->pLibraries must: have been created with
-    the ename:VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_MISS_SHADERS_BIT_KHR
-    bit set
-endif::VK_KHR_pipeline_library[]
-  * [[VUID-VkRayTracingPipelineCreateInfoKHR-pLibraryInfo-03595]]
-    If the `apiext:VK_KHR_pipeline_library` extension is not enabled,
-    pname:pLibraryInfo and pname:pLibraryInterface must: be `NULL`
-  * [[VUID-VkRayTracingPipelineCreateInfoKHR-flags-03470]]
-    If pname:flags includes
-    ename:VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_ANY_HIT_SHADERS_BIT_KHR,
-    for any element of pname:pGroups with a pname:type of
-    ename:VK_RAY_TRACING_SHADER_GROUP_TYPE_TRIANGLES_HIT_GROUP_KHR or
-    ename:VK_RAY_TRACING_SHADER_GROUP_TYPE_PROCEDURAL_HIT_GROUP_KHR, the
-    pname:anyHitShader of that element must: not be
-    ename:VK_SHADER_UNUSED_KHR
-  * [[VUID-VkRayTracingPipelineCreateInfoKHR-flags-03471]]
-    If pname:flags includes
-    ename:VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_CLOSEST_HIT_SHADERS_BIT_KHR,
-    for any element of pname:pGroups with a pname:type of
-    ename:VK_RAY_TRACING_SHADER_GROUP_TYPE_TRIANGLES_HIT_GROUP_KHR or
-    ename:VK_RAY_TRACING_SHADER_GROUP_TYPE_PROCEDURAL_HIT_GROUP_KHR, the
-    pname:closestHitShader of that element must: not be
-    ename:VK_SHADER_UNUSED_KHR
-  * [[VUID-VkRayTracingPipelineCreateInfoKHR-rayTraversalPrimitiveCulling-03596]]
-    If the <<features-rayTraversalPrimitiveCulling,
-    pname:rayTraversalPrimitiveCulling>> feature is not enabled, pname:flags
-    must: not include
-    ename:VK_PIPELINE_CREATE_RAY_TRACING_SKIP_AABBS_BIT_KHR
-  * [[VUID-VkRayTracingPipelineCreateInfoKHR-rayTraversalPrimitiveCulling-03597]]
-    If the <<features-rayTraversalPrimitiveCulling,
-    pname:rayTraversalPrimitiveCulling>> feature is not enabled, pname:flags
-    must: not include
-    ename:VK_PIPELINE_CREATE_RAY_TRACING_SKIP_TRIANGLES_BIT_KHR
-  * [[VUID-VkRayTracingPipelineCreateInfoKHR-flags-03598]]
-    If pname:flags includes
-    ename:VK_PIPELINE_CREATE_RAY_TRACING_SHADER_GROUP_HANDLE_CAPTURE_REPLAY_BIT_KHR,
-    <<features-rayTracingPipelineShaderGroupHandleCaptureReplay,
-    pname:rayTracingPipelineShaderGroupHandleCaptureReplay>> must: be
-    enabled
-  * [[VUID-VkRayTracingPipelineCreateInfoKHR-rayTracingPipelineShaderGroupHandleCaptureReplay-03599]]
-    If
-    slink:VkPhysicalDeviceRayTracingPipelineFeaturesKHR::pname:rayTracingPipelineShaderGroupHandleCaptureReplay
-    is ename:VK_TRUE and the pname:pShaderGroupCaptureReplayHandle member of
-    any element of pname:pGroups is not `NULL`, pname:flags must: include
-    ename:VK_PIPELINE_CREATE_RAY_TRACING_SHADER_GROUP_HANDLE_CAPTURE_REPLAY_BIT_KHR
-  * [[VUID-VkRayTracingPipelineCreateInfoKHR-pLibraryInfo-03600]]
-    If pname:pLibraryInfo is not `NULL` and its pname:libraryCount is `0`,
-    pname:stageCount must: not be `0`
-  * [[VUID-VkRayTracingPipelineCreateInfoKHR-pLibraryInfo-03601]]
-    If pname:pLibraryInfo is not `NULL` and its pname:libraryCount is `0`,
-    pname:groupCount must: not be `0`
-  * [[VUID-VkRayTracingPipelineCreateInfoKHR-pDynamicStates-03602]]
-    Any element of the pname:pDynamicStates member of pname:pDynamicState
-    must: be ename:VK_DYNAMIC_STATE_RAY_TRACING_PIPELINE_STACK_SIZE_KHR
-****
-
-include::{generated}/validity/structs/VkRayTracingPipelineCreateInfoKHR.txt[]
---
-endif::VK_KHR_ray_tracing_pipeline[]
-
-ifdef::VK_NV_ray_tracing[]
-[open,refpage='VkRayTracingShaderGroupCreateInfoNV',desc='Structure specifying shaders in a shader group',type='structs']
---
-:refpage: VkRayTracingShaderGroupCreateInfoNV
-
-The sname:VkRayTracingShaderGroupCreateInfoNV structure is defined as:
-
-include::{generated}/api/structs/VkRayTracingShaderGroupCreateInfoNV.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:type is the type of hit group specified in this structure.
-  * pname:generalShader is the index of the ray generation, miss, or
-    callable shader from
-    slink:VkRayTracingPipelineCreateInfoNV::pname:pStages in the group if
-    the shader group has pname:type of
-    ename:VK_RAY_TRACING_SHADER_GROUP_TYPE_GENERAL_NV, and
-    ename:VK_SHADER_UNUSED_NV otherwise.
-  * pname:closestHitShader is the optional index of the closest hit shader
-    from slink:VkRayTracingPipelineCreateInfoNV::pname:pStages in the group
-    if the shader group has pname:type of
-    ename:VK_RAY_TRACING_SHADER_GROUP_TYPE_TRIANGLES_HIT_GROUP_NV or
-    ename:VK_RAY_TRACING_SHADER_GROUP_TYPE_PROCEDURAL_HIT_GROUP_NV, and
-    ename:VK_SHADER_UNUSED_NV otherwise.
-  * pname:anyHitShader is the optional index of the any-hit shader from
-    slink:VkRayTracingPipelineCreateInfoNV::pname:pStages in the group if
-    the shader group has pname:type of
-    ename:VK_RAY_TRACING_SHADER_GROUP_TYPE_TRIANGLES_HIT_GROUP_NV or
-    ename:VK_RAY_TRACING_SHADER_GROUP_TYPE_PROCEDURAL_HIT_GROUP_NV, and
-    ename:VK_SHADER_UNUSED_NV otherwise.
-  * pname:intersectionShader is the index of the intersection shader from
-    slink:VkRayTracingPipelineCreateInfoNV::pname:pStages in the group if
-    the shader group has pname:type of
-    ename:VK_RAY_TRACING_SHADER_GROUP_TYPE_PROCEDURAL_HIT_GROUP_NV, and
-    ename:VK_SHADER_UNUSED_NV otherwise.
-
-.Valid Usage
-****
-  * [[VUID-VkRayTracingShaderGroupCreateInfoNV-type-02413]]
-    If pname:type is ename:VK_RAY_TRACING_SHADER_GROUP_TYPE_GENERAL_NV then
-    pname:generalShader must: be a valid index into
-    slink:VkRayTracingPipelineCreateInfoNV::pname:pStages referring to a
-    shader of ename:VK_SHADER_STAGE_RAYGEN_BIT_NV,
-    ename:VK_SHADER_STAGE_MISS_BIT_NV, or
-    ename:VK_SHADER_STAGE_CALLABLE_BIT_NV
-  * [[VUID-VkRayTracingShaderGroupCreateInfoNV-type-02414]]
-    If pname:type is ename:VK_RAY_TRACING_SHADER_GROUP_TYPE_GENERAL_NV then
-    pname:closestHitShader, pname:anyHitShader, and pname:intersectionShader
-    must: be ename:VK_SHADER_UNUSED_NV
-  * [[VUID-VkRayTracingShaderGroupCreateInfoNV-type-02415]]
-    If pname:type is
-    ename:VK_RAY_TRACING_SHADER_GROUP_TYPE_PROCEDURAL_HIT_GROUP_NV then
-    pname:intersectionShader must: be a valid index into
-    slink:VkRayTracingPipelineCreateInfoNV::pname:pStages referring to a
-    shader of ename:VK_SHADER_STAGE_INTERSECTION_BIT_NV
-  * [[VUID-VkRayTracingShaderGroupCreateInfoNV-type-02416]]
-    If pname:type is
-    ename:VK_RAY_TRACING_SHADER_GROUP_TYPE_TRIANGLES_HIT_GROUP_NV then
-    pname:intersectionShader must: be ename:VK_SHADER_UNUSED_NV
-  * [[VUID-VkRayTracingShaderGroupCreateInfoNV-closestHitShader-02417]]
-    pname:closestHitShader must: be either ename:VK_SHADER_UNUSED_NV or a
-    valid index into slink:VkRayTracingPipelineCreateInfoNV::pname:pStages
-    referring to a shader of ename:VK_SHADER_STAGE_CLOSEST_HIT_BIT_NV
-  * [[VUID-VkRayTracingShaderGroupCreateInfoNV-anyHitShader-02418]]
-    pname:anyHitShader must: be either ename:VK_SHADER_UNUSED_NV or a valid
-    index into slink:VkRayTracingPipelineCreateInfoNV::pname:pStages
-    referring to a shader of ename:VK_SHADER_STAGE_ANY_HIT_BIT_NV
-****
-
-include::{generated}/validity/structs/VkRayTracingShaderGroupCreateInfoNV.txt[]
---
-
-endif::VK_NV_ray_tracing[]
-
-ifdef::VK_KHR_ray_tracing_pipeline[]
-[open,refpage='VkRayTracingShaderGroupCreateInfoKHR',desc='Structure specifying shaders in a shader group',type='structs']
---
-:refpage: VkRayTracingShaderGroupCreateInfoKHR
-
-The sname:VkRayTracingShaderGroupCreateInfoKHR structure is defined as:
-
-include::{generated}/api/structs/VkRayTracingShaderGroupCreateInfoKHR.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:type is the type of hit group specified in this structure.
-  * pname:generalShader is the index of the ray generation, miss, or
-    callable shader from
-    slink:VkRayTracingPipelineCreateInfoKHR::pname:pStages in the group if
-    the shader group has pname:type of
-    ename:VK_RAY_TRACING_SHADER_GROUP_TYPE_GENERAL_KHR, and
-    ename:VK_SHADER_UNUSED_KHR otherwise.
-  * pname:closestHitShader is the optional index of the closest hit shader
-    from slink:VkRayTracingPipelineCreateInfoKHR::pname:pStages in the group
-    if the shader group has pname:type of
-    ename:VK_RAY_TRACING_SHADER_GROUP_TYPE_TRIANGLES_HIT_GROUP_KHR or
-    ename:VK_RAY_TRACING_SHADER_GROUP_TYPE_PROCEDURAL_HIT_GROUP_KHR, and
-    ename:VK_SHADER_UNUSED_KHR otherwise.
-  * pname:anyHitShader is the optional index of the any-hit shader from
-    slink:VkRayTracingPipelineCreateInfoKHR::pname:pStages in the group if
-    the shader group has pname:type of
-    ename:VK_RAY_TRACING_SHADER_GROUP_TYPE_TRIANGLES_HIT_GROUP_KHR or
-    ename:VK_RAY_TRACING_SHADER_GROUP_TYPE_PROCEDURAL_HIT_GROUP_KHR, and
-    ename:VK_SHADER_UNUSED_KHR otherwise.
-  * pname:intersectionShader is the index of the intersection shader from
-    slink:VkRayTracingPipelineCreateInfoKHR::pname:pStages in the group if
-    the shader group has pname:type of
-    ename:VK_RAY_TRACING_SHADER_GROUP_TYPE_PROCEDURAL_HIT_GROUP_KHR, and
-    ename:VK_SHADER_UNUSED_KHR otherwise.
-  * pname:pShaderGroupCaptureReplayHandle is `NULL` or a pointer to replay
-    information for this shader group.
-    Ignored if
-    slink:VkPhysicalDeviceRayTracingPipelineFeaturesKHR::pname:rayTracingPipelineShaderGroupHandleCaptureReplay
-    is ename:VK_FALSE.
-
-.Valid Usage
-****
-  * [[VUID-VkRayTracingShaderGroupCreateInfoKHR-type-03474]]
-    If pname:type is ename:VK_RAY_TRACING_SHADER_GROUP_TYPE_GENERAL_KHR then
-    pname:generalShader must: be a valid index into
-    slink:VkRayTracingPipelineCreateInfoKHR::pname:pStages referring to a
-    shader of ename:VK_SHADER_STAGE_RAYGEN_BIT_KHR,
-    ename:VK_SHADER_STAGE_MISS_BIT_KHR, or
-    ename:VK_SHADER_STAGE_CALLABLE_BIT_KHR
-  * [[VUID-VkRayTracingShaderGroupCreateInfoKHR-type-03475]]
-    If pname:type is ename:VK_RAY_TRACING_SHADER_GROUP_TYPE_GENERAL_KHR then
-    pname:closestHitShader, pname:anyHitShader, and pname:intersectionShader
-    must: be ename:VK_SHADER_UNUSED_KHR
-  * [[VUID-VkRayTracingShaderGroupCreateInfoKHR-type-03476]]
-    If pname:type is
-    ename:VK_RAY_TRACING_SHADER_GROUP_TYPE_PROCEDURAL_HIT_GROUP_KHR then
-    pname:intersectionShader must: be a valid index into
-    slink:VkRayTracingPipelineCreateInfoKHR::pname:pStages referring to a
-    shader of ename:VK_SHADER_STAGE_INTERSECTION_BIT_KHR
-  * [[VUID-VkRayTracingShaderGroupCreateInfoKHR-type-03477]]
-    If pname:type is
-    ename:VK_RAY_TRACING_SHADER_GROUP_TYPE_TRIANGLES_HIT_GROUP_KHR then
-    pname:intersectionShader must: be ename:VK_SHADER_UNUSED_KHR
-  * [[VUID-VkRayTracingShaderGroupCreateInfoKHR-closestHitShader-03478]]
-    pname:closestHitShader must: be either ename:VK_SHADER_UNUSED_KHR or a
-    valid index into slink:VkRayTracingPipelineCreateInfoKHR::pname:pStages
-    referring to a shader of ename:VK_SHADER_STAGE_CLOSEST_HIT_BIT_KHR
-  * [[VUID-VkRayTracingShaderGroupCreateInfoKHR-anyHitShader-03479]]
-    pname:anyHitShader must: be either ename:VK_SHADER_UNUSED_KHR or a valid
-    index into slink:VkRayTracingPipelineCreateInfoKHR::pname:pStages
-    referring to a shader of ename:VK_SHADER_STAGE_ANY_HIT_BIT_KHR
-  * [[VUID-VkRayTracingShaderGroupCreateInfoKHR-rayTracingPipelineShaderGroupHandleCaptureReplayMixed-03603]]
-    If
-    slink:VkPhysicalDeviceRayTracingPipelineFeaturesKHR::pname:rayTracingPipelineShaderGroupHandleCaptureReplayMixed
-    is ename:VK_FALSE then pname:pShaderGroupCaptureReplayHandle must: not
-    be provided if it has not been provided on a previous call to ray
-    tracing pipeline creation
-  * [[VUID-VkRayTracingShaderGroupCreateInfoKHR-rayTracingPipelineShaderGroupHandleCaptureReplayMixed-03604]]
-    If
-    slink:VkPhysicalDeviceRayTracingPipelineFeaturesKHR::pname:rayTracingPipelineShaderGroupHandleCaptureReplayMixed
-    is ename:VK_FALSE then the caller must: guarantee that no ray tracing
-    pipeline creation commands with pname:pShaderGroupCaptureReplayHandle
-    provided execute simultaneously with ray tracing pipeline creation
-    commands without pname:pShaderGroupCaptureReplayHandle provided
-****
-
-include::{generated}/validity/structs/VkRayTracingShaderGroupCreateInfoKHR.txt[]
---
-endif::VK_KHR_ray_tracing_pipeline[]
-
-[open,refpage='VkRayTracingShaderGroupTypeKHR',desc='Shader group types',type='enums',alias='VkRayTracingShaderGroupTypeNV']
---
-:refpage: VkRayTracingShaderGroupTypeKHR
-
-Possible values of pname:type in sname:VkRayTracingShaderGroupCreateInfoKHR
-are:
-
-include::{generated}/api/enums/VkRayTracingShaderGroupTypeKHR.txt[]
-
-ifdef::VK_NV_ray_tracing[]
-or the equivalent
-
-include::{generated}/api/enums/VkRayTracingShaderGroupTypeNV.txt[]
-endif::VK_NV_ray_tracing[]
-
-  * ename:VK_RAY_TRACING_SHADER_GROUP_TYPE_GENERAL_KHR indicates a shader
-    group with a single ename:VK_SHADER_STAGE_RAYGEN_BIT_KHR,
-    ename:VK_SHADER_STAGE_MISS_BIT_KHR, or
-    ename:VK_SHADER_STAGE_CALLABLE_BIT_KHR shader in it.
-  * ename:VK_RAY_TRACING_SHADER_GROUP_TYPE_TRIANGLES_HIT_GROUP_KHR specifies
-    a shader group that only hits triangles and must: not contain an
-    intersection shader, only closest hit and any-hit shaders.
-  * ename:VK_RAY_TRACING_SHADER_GROUP_TYPE_PROCEDURAL_HIT_GROUP_KHR
-    specifies a shader group that only intersects with custom geometry and
-    must: contain an intersection shader and may: contain closest hit and
-    any-hit shaders.
-
-[NOTE]
-.Note
-====
-For current group types, the hit group type could be inferred from the
-presence or absence of the intersection shader, but we provide the type
-explicitly for future hit groups that do not have that property.
-====
---
-
-ifdef::VK_KHR_ray_tracing_pipeline[]
-[open,refpage='VkRayTracingPipelineInterfaceCreateInfoKHR',desc='Structure specifying additional interface information when using libraries',type='structs']
---
-:refpage: VkRayTracingPipelineInterfaceCreateInfoKHR
-
-The sname:VkRayTracingPipelineInterfaceCreateInfoKHR structure is defined
-as:
-
-include::{generated}/api/structs/VkRayTracingPipelineInterfaceCreateInfoKHR.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:maxPipelineRayPayloadSize is the maximum payload size in bytes
-    used by any shader in the pipeline.
-  * pname:maxPipelineRayHitAttributeSize is the maximum attribute structure
-    size in bytes used by any shader in the pipeline.
-
-pname:maxPipelineRayPayloadSize is calculated as the maximum number of bytes
-used by any block declared in the code:RayPayloadKHR or
-code:IncomingRayPayloadKHR storage classes.
-pname:maxPipelineRayHitAttributeSize is calculated as the maximum number of
-bytes used by any block declared in the code:HitAttributeKHR storage class.
-As variables in these storage classes do not have explicit offsets, the size
-should be calculated as if each variable has a
-<<interfaces-alignment-requirements, scalar alignment>> equal to the largest
-scalar alignment of any of the block's members.
-
-[NOTE]
-.Note
-====
-There is no explicit upper limit for pname:maxPipelineRayPayloadSize, but in
-practice it should be kept as small as possible.
-Similar to invocation local memory, it must be allocated for each shader
-invocation and for devices which support many simultaneous invocations, this
-storage can rapidly be exhausted, resulting in failure.
-====
-
-.Valid Usage
-****
-  * [[VUID-VkRayTracingPipelineInterfaceCreateInfoKHR-maxPipelineRayHitAttributeSize-03605]]
-    pname:maxPipelineRayHitAttributeSize must: be less than or equal to
-    slink:VkPhysicalDeviceRayTracingPipelinePropertiesKHR::pname:maxRayHitAttributeSize
-****
-
-include::{generated}/validity/structs/VkRayTracingPipelineInterfaceCreateInfoKHR.txt[]
---
-endif::VK_KHR_ray_tracing_pipeline[]
-
-[open,refpage='vkGetRayTracingShaderGroupHandlesKHR',desc='Query ray tracing pipeline shader group handles',type='protos',alias='vkGetRayTracingShaderGroupHandlesNV']
---
-:refpage: vkGetRayTracingShaderGroupHandlesKHR
-
-To query the opaque handles of shaders in the ray tracing pipeline, call:
-
-ifdef::VK_KHR_ray_tracing_pipeline[]
-include::{generated}/api/protos/vkGetRayTracingShaderGroupHandlesKHR.txt[]
-endif::VK_KHR_ray_tracing_pipeline[]
-
-ifdef::VK_KHR_ray_tracing_pipeline+VK_NV_ray_tracing[or the equivalent command]
-
-ifdef::VK_NV_ray_tracing[]
-include::{generated}/api/protos/vkGetRayTracingShaderGroupHandlesNV.txt[]
-endif::VK_NV_ray_tracing[]
-
-  * pname:device is the logical device containing the ray tracing pipeline.
-  * pname:pipeline is the ray tracing pipeline object containing the
-    shaders.
-  * pname:firstGroup is the index of the first group to retrieve a handle
-    for from the
-ifdef::VK_KHR_ray_tracing_pipeline[]
-slink:VkRayTracingPipelineCreateInfoKHR::pname:pGroups
-endif::VK_KHR_ray_tracing_pipeline[]
-ifdef::VK_KHR_ray_tracing_pipeline+VK_NV_ray_tracing[or]
-ifdef::VK_NV_ray_tracing[]
-slink:VkRayTracingPipelineCreateInfoNV::pname:pGroups
-endif::VK_NV_ray_tracing[]
-    array.
-  * pname:groupCount is the number of shader handles to retrieve.
-  * pname:dataSize is the size in bytes of the buffer pointed to by
-    pname:pData.
-  * pname:pData is a pointer to a user-allocated buffer where the results
-    will be written.
-
-.Valid Usage
-****
-  * [[VUID-vkGetRayTracingShaderGroupHandlesKHR-pipeline-04619]]
-    pname:pipeline must: be a ray tracing pipeline
-  * [[VUID-vkGetRayTracingShaderGroupHandlesKHR-firstGroup-04050]]
-    pname:firstGroup must: be less than the number of shader groups in
-    pname:pipeline
-  * [[VUID-vkGetRayTracingShaderGroupHandlesKHR-firstGroup-02419]]
-    The sum of pname:firstGroup and pname:groupCount must: be less than or
-    equal to the number of shader groups in pname:pipeline
-  * [[VUID-vkGetRayTracingShaderGroupHandlesKHR-dataSize-02420]]
-    pname:dataSize must: be at least
-    [eq]#slink:VkPhysicalDeviceRayTracingPipelinePropertiesKHR::pname:shaderGroupHandleSize
-    {times} pname:groupCount#
-ifdef::VK_KHR_pipeline_library[]
-  * [[VUID-vkGetRayTracingShaderGroupHandlesKHR-pipeline-03482]]
-    pname:pipeline must: have not been created with
-    ename:VK_PIPELINE_CREATE_LIBRARY_BIT_KHR
-endif::VK_KHR_pipeline_library[]
-****
-
-include::{generated}/validity/protos/vkGetRayTracingShaderGroupHandlesKHR.txt[]
---
-
-ifdef::VK_KHR_ray_tracing_pipeline[]
-[open,refpage='vkGetRayTracingCaptureReplayShaderGroupHandlesKHR',desc='Query ray tracing capture replay pipeline shader group handles',type='protos']
---
-:refpage: vkGetRayTracingCaptureReplayShaderGroupHandlesKHR
-
-To query the optional capture handle information of shaders in the ray
-tracing pipeline, call:
-
-include::{generated}/api/protos/vkGetRayTracingCaptureReplayShaderGroupHandlesKHR.txt[]
-
-  * pname:device is the logical device containing the ray tracing pipeline.
-  * pname:pipeline is the ray tracing pipeline object containing the
-    shaders.
-  * pname:firstGroup is the index of the first group to retrieve a handle
-    for from the slink:VkRayTracingPipelineCreateInfoKHR::pname:pGroups
-    array.
-  * pname:groupCount is the number of shader handles to retrieve.
-  * pname:dataSize is the size in bytes of the buffer pointed to by
-    pname:pData.
-  * pname:pData is a pointer to a user-allocated buffer where the results
-    will be written.
-
-.Valid Usage
-****
-  * [[VUID-vkGetRayTracingCaptureReplayShaderGroupHandlesKHR-pipeline-04620]]
-    pname:pipeline must: be a ray tracing pipeline
-  * [[VUID-vkGetRayTracingCaptureReplayShaderGroupHandlesKHR-firstGroup-04051]]
-    pname:firstGroup must: be less than the number of shader groups in
-    pname:pipeline
-  * [[VUID-vkGetRayTracingCaptureReplayShaderGroupHandlesKHR-firstGroup-03483]]
-    The sum of pname:firstGroup and pname:groupCount must: be less than or
-    equal to the number of shader groups in pname:pipeline
-  * [[VUID-vkGetRayTracingCaptureReplayShaderGroupHandlesKHR-dataSize-03484]]
-    pname:dataSize must: be at least
-    [eq]#slink:VkPhysicalDeviceRayTracingPipelinePropertiesKHR::pname:shaderGroupHandleCaptureReplaySize
-    {times} pname:groupCount#
-  * [[VUID-vkGetRayTracingCaptureReplayShaderGroupHandlesKHR-rayTracingPipelineShaderGroupHandleCaptureReplay-03606]]
-    sname:VkPhysicalDeviceRayTracingPipelineFeaturesKHR::pname:rayTracingPipelineShaderGroupHandleCaptureReplay
-    must: be enabled to call this function
-  * [[VUID-vkGetRayTracingCaptureReplayShaderGroupHandlesKHR-pipeline-03607]]
-    pname:pipeline must: have been created with a pname:flags that included
-    ename:VK_PIPELINE_CREATE_RAY_TRACING_SHADER_GROUP_HANDLE_CAPTURE_REPLAY_BIT_KHR
-****
-
-include::{generated}/validity/protos/vkGetRayTracingCaptureReplayShaderGroupHandlesKHR.txt[]
---
-endif::VK_KHR_ray_tracing_pipeline[]
-
-ifdef::VK_NV_ray_tracing[]
-Ray tracing pipelines can: contain more shaders than a graphics or compute
-pipeline, so to allow parallel compilation of shaders within a pipeline, an
-application can: choose to defer compilation until a later point in time.
-
-[open,refpage='vkCompileDeferredNV',desc='Deferred compilation of shaders',type='protos']
---
-:refpage: vkCompileDeferredNV
-
-To compile a deferred shader in a pipeline call:
-
-include::{generated}/api/protos/vkCompileDeferredNV.txt[]
-
-  * pname:device is the logical device containing the ray tracing pipeline.
-  * pname:pipeline is the ray tracing pipeline object containing the
-    shaders.
-  * pname:shader is the index of the shader to compile.
-
-.Valid Usage
-****
-  * [[VUID-vkCompileDeferredNV-pipeline-04621]]
-    pname:pipeline must: be a ray tracing pipeline
-  * [[VUID-vkCompileDeferredNV-pipeline-02237]]
-    pname:pipeline must: have been created with
-    ename:VK_PIPELINE_CREATE_DEFER_COMPILE_BIT_NV
-  * [[VUID-vkCompileDeferredNV-shader-02238]]
-    pname:shader must: not have been called as a deferred compile before
-****
-
-include::{generated}/validity/protos/vkCompileDeferredNV.txt[]
---
-endif::VK_NV_ray_tracing[]
-
-ifdef::VK_KHR_ray_tracing_pipeline[]
-[open,refpage='vkGetRayTracingShaderGroupStackSizeKHR',desc='Query ray tracing pipeline shader group shader stack size',type='protos']
---
-To query the pipeline stack size of shaders in a shader group in the ray
-tracing pipeline, call:
-
-include::{generated}/api/protos/vkGetRayTracingShaderGroupStackSizeKHR.txt[]
-
-  * pname:device is the logical device containing the ray tracing pipeline.
-  * pname:pipeline is the ray tracing pipeline object containing the shaders
-    groups.
-  * pname:group is the index of the shader group to query.
-  * pname:groupShader is the type of shader from the group to query.
-
-The return value is the ray tracing pipeline stack size in bytes for the
-specified shader as called from the specified shader group.
-
-.Valid Usage
-****
-  * [[VUID-vkGetRayTracingShaderGroupStackSizeKHR-pipeline-04622]]
-    pname:pipeline must: be a ray tracing pipeline
-  * [[VUID-vkGetRayTracingShaderGroupStackSizeKHR-group-03608]]
-    The value of pname:group must be less than the number of shader groups
-    in pname:pipeline
-  * [[VUID-vkGetRayTracingShaderGroupStackSizeKHR-groupShader-03609]]
-    The shader identified by pname:groupShader in pname:group must: not be
-    ename:VK_SHADER_UNUSED_KHR
-****
-
-include::{generated}/validity/protos/vkGetRayTracingShaderGroupStackSizeKHR.txt[]
---
-
-[open,refpage='VkShaderGroupShaderKHR',desc='Shader group shaders',type='enums']
---
-Possible values of pname:groupShader in
-flink:vkGetRayTracingShaderGroupStackSizeKHR are:
-
-include::{generated}/api/enums/VkShaderGroupShaderKHR.txt[]
-
-  * ename:VK_SHADER_GROUP_SHADER_GENERAL_KHR uses the shader specified in
-    the group with
-    slink:VkRayTracingShaderGroupCreateInfoKHR::pname:generalShader
-  * ename:VK_SHADER_GROUP_SHADER_CLOSEST_HIT_KHR uses the shader specified
-    in the group with
-    slink:VkRayTracingShaderGroupCreateInfoKHR::pname:closestHitShader
-  * ename:VK_SHADER_GROUP_SHADER_ANY_HIT_KHR uses the shader specified in
-    the group with
-    slink:VkRayTracingShaderGroupCreateInfoKHR::pname:anyHitShader
-  * ename:VK_SHADER_GROUP_SHADER_INTERSECTION_KHR uses the shader specified
-    in the group with
-    slink:VkRayTracingShaderGroupCreateInfoKHR::pname:intersectionShader
---
-
-
-[open,refpage='vkCmdSetRayTracingPipelineStackSizeKHR',desc='Set the stack size dynamically for a ray tracing pipeline',type='protos']
---
-:refpage: vkCmdSetRayTracingPipelineStackSizeKHR
-
-To <<pipelines-dynamic-state, dynamically set>> the stack size for a ray
-tracing pipeline, call:
-
-include::{generated}/api/protos/vkCmdSetRayTracingPipelineStackSizeKHR.txt[]
-
-  * pname:commandBuffer is the command buffer into which the command will be
-    recorded.
-  * pname:pipelineStackSize is the stack size to use for subsequent ray
-    tracing trace commands.
-
-This command sets the stack size for subsequent ray tracing commands when
-the ray tracing pipeline is created with
-ename:VK_DYNAMIC_STATE_RAY_TRACING_PIPELINE_STACK_SIZE_KHR set in
-slink:VkPipelineDynamicStateCreateInfo::pname:pDynamicStates.
-Otherwise, the stack size is computed as described in
-<<ray-tracing-pipeline-stack, Ray Tracing Pipeline Stack>>.
-
-.Valid Usage
-****
-  * [[VUID-vkCmdSetRayTracingPipelineStackSizeKHR-pipelineStackSize-03610]]
-    pname:pipelineStackSize must: be large enough for any dynamic execution
-    through the shaders in the ray tracing pipeline used by a subsequent
-    trace call
-****
-include::{generated}/validity/protos/vkCmdSetRayTracingPipelineStackSizeKHR.txt[]
---
-endif::VK_KHR_ray_tracing_pipeline[]
-endif::VK_NV_ray_tracing,VK_KHR_ray_tracing_pipeline[]
-
-
-[[pipelines-destruction]]
-== Pipeline Destruction
-
-[open,refpage='vkDestroyPipeline',desc='Destroy a pipeline object',type='protos']
---
-To destroy a pipeline, call:
-
-include::{generated}/api/protos/vkDestroyPipeline.txt[]
-
-  * pname:device is the logical device that destroys the pipeline.
-  * pname:pipeline is the handle of the pipeline to destroy.
-  * pname:pAllocator controls host memory allocation as described in the
-    <<memory-allocation, Memory Allocation>> chapter.
-
-.Valid Usage
-****
-  * [[VUID-vkDestroyPipeline-pipeline-00765]]
-    All submitted commands that refer to pname:pipeline must: have completed
-    execution
-  * [[VUID-vkDestroyPipeline-pipeline-00766]]
-    If sname:VkAllocationCallbacks were provided when pname:pipeline was
-    created, a compatible set of callbacks must: be provided here
-  * [[VUID-vkDestroyPipeline-pipeline-00767]]
-    If no sname:VkAllocationCallbacks were provided when pname:pipeline was
-    created, pname:pAllocator must: be `NULL`
-****
-
-include::{generated}/validity/protos/vkDestroyPipeline.txt[]
---
-
-
-[[pipelines-multiple]]
-== Multiple Pipeline Creation
-
-Multiple pipelines can: be created simultaneously by passing an array of
-slink:VkGraphicsPipelineCreateInfo,
-ifdef::VK_KHR_ray_tracing_pipeline[slink:VkRayTracingPipelineCreateInfoKHR,]
-ifdef::VK_NV_ray_tracing[slink:VkRayTracingPipelineCreateInfoNV,]
-or slink:VkComputePipelineCreateInfo structures into the
-flink:vkCreateGraphicsPipelines,
-ifdef::VK_KHR_ray_tracing_pipeline[flink:vkCreateRayTracingPipelinesKHR,]
-ifdef::VK_NV_ray_tracing[flink:vkCreateRayTracingPipelinesNV,]
-and flink:vkCreateComputePipelines commands, respectively.
-Applications can: group together similar pipelines to be created in a single
-call, and implementations are encouraged to look for reuse opportunities
-within a group-create.
-
-When an application attempts to create many pipelines in a single command,
-it is possible that some subset may: fail creation.
-In that case, the corresponding entries in the pname:pPipelines output array
-will be filled with dlink:VK_NULL_HANDLE values.
-If any pipeline fails creation despite valid arguments (for example, due to
-out of memory errors), the elink:VkResult code returned by
-ftext:vkCreate*Pipelines will indicate why.
-The implementation will attempt to create all pipelines, and only return
-dlink:VK_NULL_HANDLE values for those that actually failed.
-
-ifdef::VK_EXT_pipeline_creation_cache_control[]
-If creation fails for a pipeline that had
-ename:VK_PIPELINE_CREATE_EARLY_RETURN_ON_FAILURE_BIT_EXT set, pipelines at
-an index in the pname:pPipelines array greater than or equal to that of the
-failing pipeline must: be set to dlink:VK_NULL_HANDLE.
-endif::VK_EXT_pipeline_creation_cache_control[]
-
-[[pipelines-pipeline-derivatives]]
-== Pipeline Derivatives
-
-A pipeline derivative is a child pipeline created from a parent pipeline,
-where the child and parent are expected to have much commonality.
-The goal of derivative pipelines is that they be cheaper to create using the
-parent as a starting point, and that it be more efficient (on either host or
-device) to switch/bind between children of the same parent.
-
-A derivative pipeline is created by setting the
-ename:VK_PIPELINE_CREATE_DERIVATIVE_BIT flag in the
-stext:Vk*PipelineCreateInfo structure.
-If this is set, then exactly one of pname:basePipelineHandle or
-pname:basePipelineIndex members of the structure must: have a valid
-handle/index, and specifies the parent pipeline.
-If pname:basePipelineHandle is used, the parent pipeline must: have already
-been created.
-If pname:basePipelineIndex is used, then the parent is being created in the
-same command.
-dlink:VK_NULL_HANDLE acts as the invalid handle for
-pname:basePipelineHandle, and -1 is the invalid index for
-pname:basePipelineIndex.
-If pname:basePipelineIndex is used, the base pipeline must: appear earlier
-in the array.
-The base pipeline must: have been created with the
-ename:VK_PIPELINE_CREATE_ALLOW_DERIVATIVES_BIT flag set.
-
-
-[[pipelines-cache]]
-== Pipeline Cache
-
-[open,refpage='VkPipelineCache',desc='Opaque handle to a pipeline cache object',type='handles']
---
-Pipeline cache objects allow the result of pipeline construction to be
-reused between pipelines and between runs of an application.
-Reuse between pipelines is achieved by passing the same pipeline cache
-object when creating multiple related pipelines.
-Reuse across runs of an application is achieved by retrieving pipeline cache
-contents in one run of an application, saving the contents, and using them
-to preinitialize a pipeline cache on a subsequent run.
-The contents of the pipeline cache objects are managed by the
-implementation.
-Applications can: manage the host memory consumed by a pipeline cache object
-and control the amount of data retrieved from a pipeline cache object.
-
-Pipeline cache objects are represented by sname:VkPipelineCache handles:
-
-include::{generated}/api/handles/VkPipelineCache.txt[]
---
-
-[[pipelines-cache-create]]
-=== Creating a Pipeline Cache
-
-[open,refpage='vkCreatePipelineCache',desc='Creates a new pipeline cache',type='protos']
---
-To create pipeline cache objects, call:
-
-include::{generated}/api/protos/vkCreatePipelineCache.txt[]
-
-  * pname:device is the logical device that creates the pipeline cache
-    object.
-  * pname:pCreateInfo is a pointer to a slink:VkPipelineCacheCreateInfo
-    structure containing initial parameters for the pipeline cache object.
-  * pname:pAllocator controls host memory allocation as described in the
-    <<memory-allocation, Memory Allocation>> chapter.
-  * pname:pPipelineCache is a pointer to a slink:VkPipelineCache handle in
-    which the resulting pipeline cache object is returned.
-
-[NOTE]
-.Note
-====
-Applications can: track and manage the total host memory size of a pipeline
-cache object using the pname:pAllocator.
-Applications can: limit the amount of data retrieved from a pipeline cache
-object in fname:vkGetPipelineCacheData.
-Implementations should: not internally limit the total number of entries
-added to a pipeline cache object or the total host memory consumed.
-====
-
-Once created, a pipeline cache can: be passed to the
-flink:vkCreateGraphicsPipelines
-ifdef::VK_KHR_ray_tracing_pipeline[flink:vkCreateRayTracingPipelinesKHR,]
-ifdef::VK_NV_ray_tracing[flink:vkCreateRayTracingPipelinesNV,]
-and flink:vkCreateComputePipelines commands.
-If the pipeline cache passed into these commands is not
-dlink:VK_NULL_HANDLE, the implementation will query it for possible reuse
-opportunities and update it with new content.
-The use of the pipeline cache object in these commands is internally
-synchronized, and the same pipeline cache object can: be used in multiple
-threads simultaneously.
-
-ifdef::VK_EXT_pipeline_creation_cache_control[]
-If pname:flags of pname:pCreateInfo includes
-ename:VK_PIPELINE_CACHE_CREATE_EXTERNALLY_SYNCHRONIZED_BIT_EXT, all commands
-that modify the returned pipeline cache object must: be
-<<fundamentals-threadingbehavior,externally synchronized>>.
-endif::VK_EXT_pipeline_creation_cache_control[]
-
-[NOTE]
-.Note
-====
-Implementations should: make every effort to limit any critical sections to
-the actual accesses to the cache, which is expected to be significantly
-shorter than the duration of the ftext:vkCreate*Pipelines commands.
-====
-
-include::{generated}/validity/protos/vkCreatePipelineCache.txt[]
---
-
-[open,refpage='VkPipelineCacheCreateInfo',desc='Structure specifying parameters of a newly created pipeline cache',type='structs']
---
-The sname:VkPipelineCacheCreateInfo structure is defined as:
-
-include::{generated}/api/structs/VkPipelineCacheCreateInfo.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-ifdef::VK_EXT_pipeline_creation_cache_control[]
-  * pname:flags is a bitmask of elink:VkPipelineCacheCreateFlagBits
-    specifying the behavior of the pipeline cache.
-endif::VK_EXT_pipeline_creation_cache_control[]
-ifndef::VK_EXT_pipeline_creation_cache_control[]
-  * pname:flags is reserved for future use.
-endif::VK_EXT_pipeline_creation_cache_control[]
-  * pname:initialDataSize is the number of bytes in pname:pInitialData.
-    If pname:initialDataSize is zero, the pipeline cache will initially be
-    empty.
-  * pname:pInitialData is a pointer to previously retrieved pipeline cache
-    data.
-    If the pipeline cache data is incompatible (as defined below) with the
-    device, the pipeline cache will be initially empty.
-    If pname:initialDataSize is zero, pname:pInitialData is ignored.
-
-.Valid Usage
-****
-  * [[VUID-VkPipelineCacheCreateInfo-initialDataSize-00768]]
-    If pname:initialDataSize is not `0`, it must: be equal to the size of
-    pname:pInitialData, as returned by fname:vkGetPipelineCacheData when
-    pname:pInitialData was originally retrieved
-  * [[VUID-VkPipelineCacheCreateInfo-initialDataSize-00769]]
-    If pname:initialDataSize is not `0`, pname:pInitialData must: have been
-    retrieved from a previous call to fname:vkGetPipelineCacheData
-ifdef::VK_EXT_pipeline_creation_cache_control[]
-  * [[VUID-VkPipelineCacheCreateInfo-pipelineCreationCacheControl-02892]]
-    If the <<features-pipelineCreationCacheControl,
-    pname:pipelineCreationCacheControl>> feature is not enabled, pname:flags
-    must: not include
-    ename:VK_PIPELINE_CACHE_CREATE_EXTERNALLY_SYNCHRONIZED_BIT_EXT
-endif::VK_EXT_pipeline_creation_cache_control[]
-****
-
-include::{generated}/validity/structs/VkPipelineCacheCreateInfo.txt[]
---
-
-[open,refpage='VkPipelineCacheCreateFlags', desc='Bitmask of VkPipelineCreateFlagBits', type='flags']
---
-include::{generated}/api/flags/VkPipelineCacheCreateFlags.txt[]
-
-ifdef::VK_EXT_pipeline_creation_cache_control[]
-tname:VkPipelineCacheCreateFlags is a bitmask type for setting a mask of
-zero or more elink:VkPipelineCacheCreateFlagBits.
-endif::VK_EXT_pipeline_creation_cache_control[]
-ifndef::VK_EXT_pipeline_creation_cache_control[]
-tname:VkPipelineCacheCreateFlags is a bitmask type for setting a mask, but
-is currently reserved for future use.
-endif::VK_EXT_pipeline_creation_cache_control[]
---
-
-ifdef::VK_EXT_pipeline_creation_cache_control[]
-[open,refpage='VkPipelineCacheCreateFlagBits',desc='Bitmask specifying the behavior of the pipeline cache',type='enums']
---
-Possible values of the pname:flags member of
-slink:VkPipelineCacheCreateInfo, specifying the behavior of the pipeline
-cache, are:
-
-include::{generated}/api/enums/VkPipelineCacheCreateFlagBits.txt[]
-
-  * ename:VK_PIPELINE_CACHE_CREATE_EXTERNALLY_SYNCHRONIZED_BIT_EXT specifies
-    that all commands that modify the created slink:VkPipelineCache will be
-    <<fundamentals-threadingbehavior,externally synchronized>>.
-    When set, the implementation may: skip any unnecessary processing needed
-    to support simultaneous modification from multiple threads where
-    allowed.
---
-endif::VK_EXT_pipeline_creation_cache_control[]
-
-
-[[pipelines-cache-merge]]
-=== Merging Pipeline Caches
-
-[open,refpage='vkMergePipelineCaches',desc='Combine the data stores of pipeline caches',type='protos']
---
-Pipeline cache objects can: be merged using the command:
-
-include::{generated}/api/protos/vkMergePipelineCaches.txt[]
-
-  * pname:device is the logical device that owns the pipeline cache objects.
-  * pname:dstCache is the handle of the pipeline cache to merge results
-    into.
-  * pname:srcCacheCount is the length of the pname:pSrcCaches array.
-  * pname:pSrcCaches is a pointer to an array of pipeline cache handles,
-    which will be merged into pname:dstCache.
-    The previous contents of pname:dstCache are included after the merge.
-
-[NOTE]
-.Note
-====
-The details of the merge operation are implementation-dependent, but
-implementations should: merge the contents of the specified pipelines and
-prune duplicate entries.
-====
-
-.Valid Usage
-****
-  * [[VUID-vkMergePipelineCaches-dstCache-00770]]
-    pname:dstCache must: not appear in the list of source caches
-****
-
-include::{generated}/validity/protos/vkMergePipelineCaches.txt[]
---
-
-[[pipelines-cache-retrieval]]
-=== Retrieving Pipeline Cache Data
-
-[open,refpage='vkGetPipelineCacheData',desc='Get the data store from a pipeline cache',type='protos']
---
-Data can: be retrieved from a pipeline cache object using the command:
-
-include::{generated}/api/protos/vkGetPipelineCacheData.txt[]
-
-  * pname:device is the logical device that owns the pipeline cache.
-  * pname:pipelineCache is the pipeline cache to retrieve data from.
-  * pname:pDataSize is a pointer to a code:size_t value related to the
-    amount of data in the pipeline cache, as described below.
-  * pname:pData is either `NULL` or a pointer to a buffer.
-
-If pname:pData is `NULL`, then the maximum size of the data that can: be
-retrieved from the pipeline cache, in bytes, is returned in pname:pDataSize.
-Otherwise, pname:pDataSize must: point to a variable set by the user to the
-size of the buffer, in bytes, pointed to by pname:pData, and on return the
-variable is overwritten with the amount of data actually written to
-pname:pData.
-If pname:pDataSize is less than the maximum size that can: be retrieved by
-the pipeline cache, at most pname:pDataSize bytes will be written to
-pname:pData, and ename:VK_INCOMPLETE will be returned instead of
-ename:VK_SUCCESS, to indicate that not all of the pipeline cache was
-returned.
-
-Any data written to pname:pData is valid and can: be provided as the
-pname:pInitialData member of the slink:VkPipelineCacheCreateInfo structure
-passed to fname:vkCreatePipelineCache.
-
-Two calls to fname:vkGetPipelineCacheData with the same parameters must:
-retrieve the same data unless a command that modifies the contents of the
-cache is called between them.
-
-The initial bytes written to pname:pData must: be a header as described in
-the <<pipelines-cache-header, Pipeline Cache Header>> section.
-
-If pname:pDataSize is less than what is necessary to store this header,
-nothing will be written to pname:pData and zero will be written to
-pname:pDataSize.
-
-include::{generated}/validity/protos/vkGetPipelineCacheData.txt[]
---
-
-[[pipelines-cache-header]]
-=== Pipeline Cache Header
-
-Applications can: store the data retrieved from the pipeline cache, and use
-these data, possibly in a future run of the application, to populate new
-pipeline cache objects.
-The results of pipeline compiles, however, may: depend on the vendor ID,
-device ID, driver version, and other details of the device.
-To enable applications to detect when previously retrieved data is
-incompatible with the device, the pipeline cache data must: begin with a
-valid pipeline cache header.
-
-[open,refpage='VkPipelineCacheHeaderVersionOne',desc='Structure describing the layout of the pipeline cache header',type='structs']
---
-Version one of the pipeline cache header is defined as:
-
-include::{generated}/api/structs/VkPipelineCacheHeaderVersionOne.txt[]
-
-  * pname:headerSize is the length in bytes of the pipeline cache header.
-  * pname:headerVersion is a elink:VkPipelineCacheHeaderVersion enum value
-    specifying the version of the header.
-    A consumer of the pipeline cache should: use the cache version to
-    interpret the remainder of the cache header.
-  * pname:vendorID is the sname:VkPhysicalDeviceProperties::pname:vendorID
-    of the implementation.
-  * pname:deviceID is the sname:VkPhysicalDeviceProperties::pname:deviceID
-    of the implementation.
-  * pname:pipelineCacheUUID is the
-    sname:VkPhysicalDeviceProperties::pname:pipelineCacheUUID of the
-    implementation.
-
-Unlike most structures declared by the Vulkan API, all fields of this
-structure are written with the least significant byte first, regardless of
-host byte-order.
-
-The C language specification does not define the packing of structure
-members.
-This layout assumes tight structure member packing, with members laid out in
-the order listed in the structure, and the intended size of the structure is
-32 bytes.
-If a compiler produces code that diverges from that pattern, applications
-must: employ another method to set values at the correct offsets.
-
-.Valid Usage
-****
-  * [[VUID-VkPipelineCacheHeaderVersionOne-headerSize-04967]]
-    pname:headerSize must: be 32
-  * [[VUID-VkPipelineCacheHeaderVersionOne-headerVersion-04968]]
-    pname:headerVersion must: be ename:VK_PIPELINE_CACHE_HEADER_VERSION_ONE
-****
-
-include::{generated}/validity/structs/VkPipelineCacheHeaderVersionOne.txt[]
---
-
-
-[open,refpage='VkPipelineCacheHeaderVersion',desc='Encode pipeline cache version',type='enums',xrefs='vkCreatePipelineCache vkGetPipelineCacheData']
---
-Possible values of the pname:headerVersion value of the pipeline cache
-header are:
-
-include::{generated}/api/enums/VkPipelineCacheHeaderVersion.txt[]
-
-  * ename:VK_PIPELINE_CACHE_HEADER_VERSION_ONE specifies version one of the
-    pipeline cache.
---
-
-[[pipelines-cache-destroy]]
-=== Destroying a Pipeline Cache
-
-[open,refpage='vkDestroyPipelineCache',desc='Destroy a pipeline cache object',type='protos']
---
-To destroy a pipeline cache, call:
-
-include::{generated}/api/protos/vkDestroyPipelineCache.txt[]
-
-  * pname:device is the logical device that destroys the pipeline cache
-    object.
-  * pname:pipelineCache is the handle of the pipeline cache to destroy.
-  * pname:pAllocator controls host memory allocation as described in the
-    <<memory-allocation, Memory Allocation>> chapter.
-
-.Valid Usage
-****
-  * [[VUID-vkDestroyPipelineCache-pipelineCache-00771]]
-    If sname:VkAllocationCallbacks were provided when pname:pipelineCache
-    was created, a compatible set of callbacks must: be provided here
-  * [[VUID-vkDestroyPipelineCache-pipelineCache-00772]]
-    If no sname:VkAllocationCallbacks were provided when pname:pipelineCache
-    was created, pname:pAllocator must: be `NULL`
-****
-
-include::{generated}/validity/protos/vkDestroyPipelineCache.txt[]
---
-
-
-[[pipelines-specialization-constants]]
-== Specialization Constants
-
-Specialization constants are a mechanism whereby constants in a SPIR-V
-module can: have their constant value specified at the time the
-sname:VkPipeline is created.
-This allows a SPIR-V module to have constants that can: be modified while
-executing an application that uses the Vulkan API.
-
-[NOTE]
-.Note
-====
-Specialization constants are useful to allow a compute shader to have its
-local workgroup size changed at runtime by the user, for example.
-====
-
-Each slink:VkPipelineShaderStageCreateInfo structure contains a
-pname:pSpecializationInfo member, which can: be `NULL` to indicate no
-specialization constants, or point to a sname:VkSpecializationInfo
-structure.
-
-[open,refpage='VkSpecializationInfo',desc='Structure specifying specialization information',type='structs']
---
-The sname:VkSpecializationInfo structure is defined as:
-
-include::{generated}/api/structs/VkSpecializationInfo.txt[]
-
-  * pname:mapEntryCount is the number of entries in the pname:pMapEntries
-    array.
-  * pname:pMapEntries is a pointer to an array of
-    sname:VkSpecializationMapEntry structures which map constant IDs to
-    offsets in pname:pData.
-  * pname:dataSize is the byte size of the pname:pData buffer.
-  * pname:pData contains the actual constant values to specialize with.
-
-.Valid Usage
-****
-  * [[VUID-VkSpecializationInfo-offset-00773]]
-    The pname:offset member of each element of pname:pMapEntries must: be
-    less than pname:dataSize
-  * [[VUID-VkSpecializationInfo-pMapEntries-00774]]
-    The pname:size member of each element of pname:pMapEntries must: be less
-    than or equal to pname:dataSize minus pname:offset
-  * [[VUID-VkSpecializationInfo-constantID-04911]]
-    The pname:constantID value of each element of pname:pMapEntries must: be
-    unique within pname:pMapEntries
-****
-
-include::{generated}/validity/structs/VkSpecializationInfo.txt[]
---
-
-[open,refpage='VkSpecializationMapEntry',desc='Structure specifying a specialization map entry',type='structs']
---
-The sname:VkSpecializationMapEntry structure is defined as:
-
-include::{generated}/api/structs/VkSpecializationMapEntry.txt[]
-
-  * pname:constantID is the ID of the specialization constant in SPIR-V.
-  * pname:offset is the byte offset of the specialization constant value
-    within the supplied data buffer.
-  * pname:size is the byte size of the specialization constant value within
-    the supplied data buffer.
-
-If a pname:constantID value is not a specialization constant ID used in the
-shader, that map entry does not affect the behavior of the pipeline.
-
-.Valid Usage
-****
-  * [[VUID-VkSpecializationMapEntry-constantID-00776]]
-    For a pname:constantID specialization constant declared in a shader,
-    pname:size must: match the byte size of the pname:constantID.
-    If the specialization constant is of type code:boolean, pname:size must:
-    be the byte size of basetype:VkBool32
-****
-
-include::{generated}/validity/structs/VkSpecializationMapEntry.txt[]
---
-
-In human readable SPIR-V:
-
-[source,glsl]
----------------------------------------------------
-OpDecorate %x SpecId 13 ; decorate .x component of WorkgroupSize with ID 13
-OpDecorate %y SpecId 42 ; decorate .y component of WorkgroupSize with ID 42
-OpDecorate %z SpecId 3  ; decorate .z component of WorkgroupSize with ID 3
-OpDecorate %wgsize BuiltIn WorkgroupSize ; decorate WorkgroupSize onto constant
-%i32 = OpTypeInt 32 0 ; declare an unsigned 32-bit type
-%uvec3 = OpTypeVector %i32 3 ; declare a 3 element vector type of unsigned 32-bit
-%x = OpSpecConstant %i32 1 ; declare the .x component of WorkgroupSize
-%y = OpSpecConstant %i32 1 ; declare the .y component of WorkgroupSize
-%z = OpSpecConstant %i32 1 ; declare the .z component of WorkgroupSize
-%wgsize = OpSpecConstantComposite %uvec3 %x %y %z ; declare WorkgroupSize
----------------------------------------------------
-
-From the above we have three specialization constants, one for each of the
-x, y & z elements of the WorkgroupSize vector.
-
-Now to specialize the above via the specialization constants mechanism:
-
-[source,c++]
----------------------------------------------------
-const VkSpecializationMapEntry entries[] =
-{
-    {
-        13,                             // constantID
-        0 * sizeof(uint32_t),           // offset
-        sizeof(uint32_t)                // size
-    },
-    {
-        42,                             // constantID
-        1 * sizeof(uint32_t),           // offset
-        sizeof(uint32_t)                // size
-    },
-    {
-        3,                              // constantID
-        2 * sizeof(uint32_t),           // offset
-        sizeof(uint32_t)                // size
-    }
-};
-
-const uint32_t data[] = { 16, 8, 4 }; // our workgroup size is 16x8x4
-
-const VkSpecializationInfo info =
-{
-    3,                                  // mapEntryCount
-    entries,                            // pMapEntries
-    3 * sizeof(uint32_t),               // dataSize
-    data,                               // pData
-};
----------------------------------------------------
-
-Then when calling flink:vkCreateComputePipelines, and passing the
-sname:VkSpecializationInfo we defined as the pname:pSpecializationInfo
-parameter of slink:VkPipelineShaderStageCreateInfo, we will create a compute
-pipeline with the runtime specified local workgroup size.
-
-Another example would be that an application has a SPIR-V module that has
-some platform-dependent constants they wish to use.
-
-In human readable SPIR-V:
-
-// [source,glsl]
-[source,glsl]
----------------------------------------------------
-OpDecorate %1 SpecId 0  ; decorate our signed 32-bit integer constant
-OpDecorate %2 SpecId 12 ; decorate our 32-bit floating-point constant
-%i32 = OpTypeInt 32 1   ; declare a signed 32-bit type
-%float = OpTypeFloat 32 ; declare a 32-bit floating-point type
-%1 = OpSpecConstant %i32 -1 ; some signed 32-bit integer constant
-%2 = OpSpecConstant %float 0.5 ; some 32-bit floating-point constant
----------------------------------------------------
-
-From the above we have two specialization constants, one is a signed 32-bit
-integer and the second is a 32-bit floating-point value.
-
-Now to specialize the above via the specialization constants mechanism:
-
-[source,c++]
----------------------------------------------------
-struct SpecializationData {
-    int32_t data0;
-    float data1;
-};
-
-const VkSpecializationMapEntry entries[] =
-{
-    {
-        0,                                    // constantID
-        offsetof(SpecializationData, data0),  // offset
-        sizeof(SpecializationData::data0)     // size
-    },
-    {
-        12,                                   // constantID
-        offsetof(SpecializationData, data1),  // offset
-        sizeof(SpecializationData::data1)     // size
-    }
-};
-
-SpecializationData data;
-data.data0 = -42;    // set the data for the 32-bit integer
-data.data1 = 42.0f;  // set the data for the 32-bit floating-point
-
-const VkSpecializationInfo info =
-{
-    2,                                  // mapEntryCount
-    entries,                            // pMapEntries
-    sizeof(data),                       // dataSize
-    &data,                              // pData
-};
----------------------------------------------------
-
-It is legal for a SPIR-V module with specializations to be compiled into a
-pipeline where no specialization information was provided.
-SPIR-V specialization constants contain default values such that if a
-specialization is not provided, the default value will be used.
-In the examples above, it would be valid for an application to only
-specialize some of the specialization constants within the SPIR-V module,
-and let the other constants use their default values encoded within the
-OpSpecConstant declarations.
-
-
-ifdef::VK_KHR_pipeline_library[]
-[[pipeline-library]]
-== Pipeline Libraries
-
-A pipeline library is a special pipeline that was created using the
-ename:VK_PIPELINE_CREATE_LIBRARY_BIT_KHR and cannot be bound, instead it
-defines a set of pipeline state which can be linked into other pipelines.
-ifdef::VK_KHR_ray_tracing_pipeline[]
-For ray tracing pipelines this includes shaders and shader groups.
-endif::VK_KHR_ray_tracing_pipeline[]
-The application must: maintain the lifetime of a pipeline library based on
-the pipelines that link with it.
-A pipeline library is considered in-use, as long as one of the linking
-pipelines is in-use.
-
-This linkage is achieved by using the following structure within the
-appropriate creation mechanisms:
-
-[open,refpage='VkPipelineLibraryCreateInfoKHR',desc='Structure specifying pipeline libraries to use when creating a pipeline',type='structs']
---
-The sname:VkPipelineLibraryCreateInfoKHR structure is defined as:
-
-include::{generated}/api/structs/VkPipelineLibraryCreateInfoKHR.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:libraryCount is the number of pipeline libraries in
-    pname:pLibraries.
-  * pname:pLibraries is a pointer to an array of slink:VkPipeline structures
-    specifying pipeline libraries to use when creating a pipeline.
-
-.Valid Usage
-****
-  * [[VUID-VkPipelineLibraryCreateInfoKHR-pLibraries-03381]]
-    Each element of pname:pLibraries must: have been created with
-    ename:VK_PIPELINE_CREATE_LIBRARY_BIT_KHR
-****
-
-include::{generated}/validity/structs/VkPipelineLibraryCreateInfoKHR.txt[]
---
-endif::VK_KHR_pipeline_library[]
-
-
-[[pipelines-binding]]
-== Pipeline Binding
-
-[open,refpage='vkCmdBindPipeline',desc='Bind a pipeline object to a command buffer',type='protos']
---
-Once a pipeline has been created, it can: be bound to the command buffer
-using the command:
-
-include::{generated}/api/protos/vkCmdBindPipeline.txt[]
-
-  * pname:commandBuffer is the command buffer that the pipeline will be
-    bound to.
-  * pname:pipelineBindPoint is a elink:VkPipelineBindPoint value specifying
-    to which bind point the pipeline is bound.
-    Binding one does not disturb the others.
-  * pname:pipeline is the pipeline to be bound.
-
-[[pipeline-bindpoint-commands]]
-Once bound, a pipeline binding affects subsequent commands that interact
-with the given pipeline type in the command buffer until a different
-pipeline of the same type is bound to the bind point.
-Commands that do not interact with the given pipeline type must: not be
-affected by the pipeline state.
-
-  * The pipeline bound to ename:VK_PIPELINE_BIND_POINT_COMPUTE controls the
-    behavior of all <<dispatch, dispatching commands>>.
-  * The pipeline bound to ename:VK_PIPELINE_BIND_POINT_GRAPHICS controls the
-    behavior of all <<drawing, drawing commands>>.
-ifdef::VK_NV_ray_tracing,VK_KHR_ray_tracing_pipeline[]
-  * The pipeline bound to ename:VK_PIPELINE_BIND_POINT_RAY_TRACING_KHR
-    controls the behavior of flink:vkCmdTraceRaysKHR and
-    flink:vkCmdTraceRaysIndirectKHR.
-endif::VK_NV_ray_tracing,VK_KHR_ray_tracing_pipeline[]
-ifdef::VK_HUAWEI_subpass_shading[]
-  * The pipeline bound to
-    ename:VK_PIPELINE_BIND_POINT_SUBPASS_SHADING_HUAWEI controls the
-    behavior of flink:vkCmdSubpassShadingHUAWEI.
-endif::VK_HUAWEI_subpass_shading[]
-
-.Valid Usage
-****
-  * [[VUID-vkCmdBindPipeline-pipelineBindPoint-00777]]
-    If pname:pipelineBindPoint is ename:VK_PIPELINE_BIND_POINT_COMPUTE, the
-    sname:VkCommandPool that pname:commandBuffer was allocated from must:
-    support compute operations
-  * [[VUID-vkCmdBindPipeline-pipelineBindPoint-00778]]
-    If pname:pipelineBindPoint is ename:VK_PIPELINE_BIND_POINT_GRAPHICS, the
-    sname:VkCommandPool that pname:commandBuffer was allocated from must:
-    support graphics operations
-  * [[VUID-vkCmdBindPipeline-pipelineBindPoint-00779]]
-    If pname:pipelineBindPoint is ename:VK_PIPELINE_BIND_POINT_COMPUTE,
-    pname:pipeline must: be a compute pipeline
-  * [[VUID-vkCmdBindPipeline-pipelineBindPoint-00780]]
-    If pname:pipelineBindPoint is ename:VK_PIPELINE_BIND_POINT_GRAPHICS,
-    pname:pipeline must: be a graphics pipeline
-  * [[VUID-vkCmdBindPipeline-pipeline-00781]]
-    If the <<features-variableMultisampleRate,variable multisample rate>>
-    feature is not supported, pname:pipeline is a graphics pipeline, the
-    current subpass <<renderpass-noattachments, uses no attachments>>, and
-    this is not the first call to this function with a graphics pipeline
-    after transitioning to the current subpass, then the sample count
-    specified by this pipeline must: match that set in the previous pipeline
-ifdef::VK_EXT_sample_locations[]
-  * [[VUID-vkCmdBindPipeline-variableSampleLocations-01525]]
-    If
-    slink:VkPhysicalDeviceSampleLocationsPropertiesEXT::pname:variableSampleLocations
-    is ename:VK_FALSE, and pname:pipeline is a graphics pipeline created
-    with a slink:VkPipelineSampleLocationsStateCreateInfoEXT structure
-    having its pname:sampleLocationsEnable member set to ename:VK_TRUE but
-    without ename:VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT enabled then the
-    current render pass instance must: have been begun by specifying a
-    slink:VkRenderPassSampleLocationsBeginInfoEXT structure whose
-    pname:pPostSubpassSampleLocations member contains an element with a
-    pname:subpassIndex matching the current subpass index and the
-    pname:sampleLocationsInfo member of that element must: match the
-    pname:sampleLocationsInfo specified in
-    slink:VkPipelineSampleLocationsStateCreateInfoEXT when the pipeline was
-    created
-endif::VK_EXT_sample_locations[]
-ifdef::VK_EXT_transform_feedback[]
-  * [[VUID-vkCmdBindPipeline-None-02323]]
-    This command must: not be recorded when transform feedback is active
-endif::VK_EXT_transform_feedback[]
-ifdef::VK_NV_ray_tracing,VK_KHR_ray_tracing_pipeline[]
-  * [[VUID-vkCmdBindPipeline-pipelineBindPoint-02391]]
-    If pname:pipelineBindPoint is
-    ename:VK_PIPELINE_BIND_POINT_RAY_TRACING_KHR, the sname:VkCommandPool
-    that pname:commandBuffer was allocated from must: support compute
-    operations
-  * [[VUID-vkCmdBindPipeline-pipelineBindPoint-02392]]
-    If pname:pipelineBindPoint is
-    ename:VK_PIPELINE_BIND_POINT_RAY_TRACING_KHR, pname:pipeline must: be a
-    ray tracing pipeline
-endif::VK_NV_ray_tracing,VK_KHR_ray_tracing_pipeline[]
-ifdef::VK_KHR_pipeline_library[]
-  * [[VUID-vkCmdBindPipeline-pipeline-03382]]
-    pname:pipeline must: not have been created with
-    ename:VK_PIPELINE_CREATE_LIBRARY_BIT_KHR set
-endif::VK_KHR_pipeline_library[]
-ifdef::VK_NV_inherited_viewport_scissor[]
-  * [[VUID-vkCmdBindPipeline-commandBuffer-04808]]
-    If pname:commandBuffer is a secondary command buffer with
-    slink:VkCommandBufferInheritanceViewportScissorInfoNV::pname:viewportScissor2D
-    enabled and pname:pipelineBindPoint is
-    ename:VK_PIPELINE_BIND_POINT_GRAPHICS, then the pname:pipeline must:
-    have been created with ename:VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT or
-    ename:VK_DYNAMIC_STATE_VIEWPORT, and
-    ename:VK_DYNAMIC_STATE_SCISSOR_WITH_COUNT_EXT or
-    ename:VK_DYNAMIC_STATE_SCISSOR enabled
-endif::VK_NV_inherited_viewport_scissor[]
-ifdef::VK_NV_inherited_viewport_scissor,VK_EXT_discard_rectangles[]
-  * [[VUID-vkCmdBindPipeline-commandBuffer-04809]]
-    If pname:commandBuffer is a secondary command buffer with
-    slink:VkCommandBufferInheritanceViewportScissorInfoNV::pname:viewportScissor2D
-    enabled and pname:pipelineBindPoint is
-    ename:VK_PIPELINE_BIND_POINT_GRAPHICS and pname:pipeline was created
-    with slink:VkPipelineDiscardRectangleStateCreateInfoEXT structure and
-    its pname:discardRectangleCount member is not `0`, then the pipeline
-    must: have been created with
-    ename:VK_DYNAMIC_STATE_DISCARD_RECTANGLE_EXT enabled
-endif::VK_NV_inherited_viewport_scissor,VK_EXT_discard_rectangles[]
-ifdef::VK_EXT_provoking_vertex[]
-  * [[VUID-vkCmdBindPipeline-pipelineBindPoint-04881]]
-    If pname:pipelineBindPoint is ename:VK_PIPELINE_BIND_POINT_GRAPHICS and
-    the
-    <<limits-provokingVertexModePerPipeline,provokingVertexModePerPipeline>>
-    limit is ename:VK_FALSE, then pipeline's
-    slink:VkPipelineRasterizationProvokingVertexStateCreateInfoEXT::pname:provokingVertexMode
-    must: be the same as that of any other pipelines previously bound to
-    this bind point within the current render pass instance, including any
-    pipeline already bound when beginning the render pass instance
-endif::VK_EXT_provoking_vertex[]
-ifdef::VK_HUAWEI_subpass_shading[]
-  * [[VUID-vkCmdBindPipeline-pipelineBindPoint-04949]]
-    If pname:pipelineBindPoint is
-    ename:VK_PIPELINE_BIND_POINT_SUBPASS_SHADING_HUAWEI, the
-    sname:VkCommandPool that pname:commandBuffer was allocated from must:
-    support compute operations
-  * [[VUID-vkCmdBindPipeline-pipelineBindPoint-04950]]
-    If pname:pipelineBindPoint is
-    ename:VK_PIPELINE_BIND_POINT_SUBPASS_SHADING_HUAWEI, pname:pipeline
-    must: be a subpass shading pipeline
-endif::VK_HUAWEI_subpass_shading[]
-ifdef::VK_KHR_dynamic_rendering[]
-  * [[VUID-vkCmdBindPipeline-pipeline-06195]]
-    If pname:pipeline is a graphics pipeline, this command has been called
-    inside a render pass instance started with flink:vkCmdBeginRenderingKHR,
-    and commands using the previously bound graphics pipeline have been
-    recorded within the render pass instance, then the value of
-    slink:VkPipelineRenderingCreateInfoKHR::pname:colorAttachmentCount
-    specified by this pipeline must: match that set in the previous pipeline
-  * [[VUID-vkCmdBindPipeline-pipeline-06196]]
-    If pname:pipeline is a graphics pipeline, this command has been called
-    inside a render pass instance started with flink:vkCmdBeginRenderingKHR,
-    and commands using the previously bound graphics pipeline have been
-    recorded within the render pass instance, then the elements of
-    slink:VkPipelineRenderingCreateInfoKHR::pname:pColorAttachmentFormats
-    specified by this pipeline must: match that set in the previous pipeline
-  * [[VUID-vkCmdBindPipeline-pipeline-06197]]
-    If pname:pipeline is a graphics pipeline, this command has been called
-    inside a render pass instance started with flink:vkCmdBeginRenderingKHR,
-    and commands using the previously bound graphics pipeline have been
-    recorded within the render pass instance, then the value of
-    slink:VkPipelineRenderingCreateInfoKHR::pname:depthAttachmentFormat
-    specified by this pipeline must: match that set in the previous pipeline
-  * [[VUID-vkCmdBindPipeline-pipeline-06194]]
-    If pname:pipeline is a graphics pipeline, this command has been called
-    inside a render pass instance started with flink:vkCmdBeginRenderingKHR,
-    and commands using the previously bound graphics pipeline have been
-    recorded within the render pass instance, then the value of
-    slink:VkPipelineRenderingCreateInfoKHR::pname:stencilAttachmentFormat
-    specified by this pipeline must: match that set in the previous pipeline
-endif::VK_KHR_dynamic_rendering[]
-****
-
-include::{generated}/validity/protos/vkCmdBindPipeline.txt[]
---
-
-[open,refpage='VkPipelineBindPoint',desc='Specify the bind point of a pipeline object to a command buffer',type='enums']
---
-Possible values of flink:vkCmdBindPipeline::pname:pipelineBindPoint,
-specifying the bind point of a pipeline object, are:
-
-include::{generated}/api/enums/VkPipelineBindPoint.txt[]
-
-  * ename:VK_PIPELINE_BIND_POINT_COMPUTE specifies binding as a compute
-    pipeline.
-  * ename:VK_PIPELINE_BIND_POINT_GRAPHICS specifies binding as a graphics
-    pipeline.
-ifdef::VK_NV_ray_tracing,VK_KHR_ray_tracing_pipeline[]
-  * ename:VK_PIPELINE_BIND_POINT_RAY_TRACING_KHR specifies binding as a ray
-    tracing pipeline.
-endif::VK_NV_ray_tracing,VK_KHR_ray_tracing_pipeline[]
-ifdef::VK_HUAWEI_subpass_shading[]
-  * ename:VK_PIPELINE_BIND_POINT_SUBPASS_SHADING_HUAWEI specifies binding as
-    a subpass shading pipeline.
-endif::VK_HUAWEI_subpass_shading[]
---
-
-ifdef::VK_NV_device_generated_commands[]
-[open,refpage='vkCmdBindPipelineShaderGroupNV',desc='Bind a pipeline object's shader group to a command buffer',type='protos']
---
-For pipelines that were created with the support of multiple shader groups
-(see <<graphics-shadergroups,Graphics Pipeline Shader Groups>>), the regular
-fname:vkCmdBindPipeline command will bind Shader Group `0`.
-To explicitly bind a shader group use:
-
-include::{generated}/api/protos/vkCmdBindPipelineShaderGroupNV.txt[]
-
-  * pname:commandBuffer is the command buffer that the pipeline will be
-    bound to.
-  * pname:pipelineBindPoint is a elink:VkPipelineBindPoint value specifying
-    the bind point to which the pipeline will be bound.
-  * pname:pipeline is the pipeline to be bound.
-  * pname:groupIndex is the shader group to be bound.
-
-
-.Valid Usage
-****
-  * [[VUID-vkCmdBindPipelineShaderGroupNV-groupIndex-02893]]
-    pname:groupIndex must: be `0` or less than the effective
-    slink:VkGraphicsPipelineShaderGroupsCreateInfoNV::pname:groupCount
-    including the referenced pipelines
-  * [[VUID-vkCmdBindPipelineShaderGroupNV-pipelineBindPoint-02894]]
-    The pname:pipelineBindPoint must: be
-    ename:VK_PIPELINE_BIND_POINT_GRAPHICS
-  * [[VUID-vkCmdBindPipelineShaderGroupNV-groupIndex-02895]]
-    The same restrictions as flink:vkCmdBindPipeline apply as if the bound
-    pipeline was created only with the Shader Group from the
-    pname:groupIndex information
-  * [[VUID-vkCmdBindPipelineShaderGroupNV-deviceGeneratedCommands-02896]]
-    The <<features-deviceGeneratedCommands,
-    sname:VkPhysicalDeviceDeviceGeneratedCommandsFeaturesNV::pname:deviceGeneratedCommands>>
-    feature must: be enabled
-****
-
-include::{generated}/validity/protos/vkCmdBindPipelineShaderGroupNV.txt[]
---
-endif::VK_NV_device_generated_commands[]
-
-
-[[pipelines-dynamic-state]]
-== Dynamic State
-
-When a pipeline object is bound, any pipeline object state that is not
-specified as dynamic is applied to the command buffer state.
-Pipeline object state that is specified as dynamic is not applied to the
-command buffer state at this time.
-Instead, dynamic state can: be modified at any time and persists for the
-lifetime of the command buffer, or until modified by another dynamic state
-setting command or another pipeline bind.
-
-When a pipeline object is bound, the following applies to each state
-parameter:
-
-  * If the state is not specified as dynamic in the new pipeline object,
-    then that command buffer state is overwritten by the state in the new
-    pipeline object.
-    Before any draw or dispatch call with this pipeline there must: not have
-    been any calls to any of the corresponding dynamic state setting
-    commands after this pipeline was bound
-  * If the state is specified as dynamic in the new pipeline object, then
-    that command buffer state is not disturbed.
-    Before any draw or dispatch call with this pipeline there must: have
-    been at least one call to each of the corresponding dynamic state
-    setting commands since the command buffer recording was begun, or the
-    last bound pipeline object with that state specified as static,
-    whichever was the latter
-
-Dynamic state that does not affect the result of operations can: be left
-undefined:.
-
-[NOTE]
-.Note
-====
-For example, if blending is disabled by the pipeline object state then the
-dynamic color blend constants do not need to be specified in the command
-buffer, even if this state is specified as dynamic in the pipeline object.
-====
-
-ifdef::VK_AMD_shader_info,VK_KHR_pipeline_executable_properties[]
-[[pipelines-shader-information]]
-== Pipeline Shader Information
-endif::VK_AMD_shader_info,VK_KHR_pipeline_executable_properties[]
-
-ifdef::VK_KHR_pipeline_executable_properties[]
-include::VK_KHR_pipeline_executable_properties/pipelines.txt[]
-endif::VK_KHR_pipeline_executable_properties[]
-
-ifdef::VK_AMD_shader_info[]
-include::VK_AMD_shader_info.txt[]
-endif::VK_AMD_shader_info[]
-
-// These includes have their own section headers
-
-ifdef::VK_AMD_pipeline_compiler_control[]
-include::VK_AMD_pipeline_compiler_control.txt[]
-endif::VK_AMD_pipeline_compiler_control[]
-
-ifdef::VK_EXT_pipeline_creation_feedback[]
-include::VK_EXT_pipeline_creation_feedback/pipelines.txt[]
-endif::VK_EXT_pipeline_creation_feedback[]
diff --git a/registry/vulkan/chapters/primsrast.txt b/registry/vulkan/chapters/primsrast.txt
deleted file mode 100644
index eef2402..0000000
--- a/registry/vulkan/chapters/primsrast.txt
+++ /dev/null
@@ -1,3610 +0,0 @@
-// Copyright 2015-2021 The Khronos Group, Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-[[primsrast]]
-= Rasterization
-
-Rasterization is the process by which a primitive is converted to a
-two-dimensional image.
-Each discrete location of this image contains associated data such as depth,
-color, or other attributes.
-
-Rasterizing a primitive begins by determining which squares of an integer
-grid in framebuffer coordinates are occupied by the primitive, and assigning
-one or more depth values to each such square.
-This process is described below for points, lines, and polygons.
-
-A grid square, including its [eq]#(x,y)# framebuffer coordinates, [eq]#z#
-(depth), and associated data added by fragment shaders, is called a
-fragment.
-A fragment is located by its upper left corner, which lies on integer grid
-coordinates.
-
-Rasterization operations also refer to a fragment's sample locations, which
-are offset by fractional values from its upper left corner.
-The rasterization rules for points, lines, and triangles involve testing
-whether each sample location is inside the primitive.
-Fragments need not actually be square, and rasterization rules are not
-affected by the aspect ratio of fragments.
-Display of non-square grids, however, will cause rasterized points and line
-segments to appear fatter in one direction than the other.
-
-We assume that fragments are square, since it simplifies antialiasing and
-texturing.
-After rasterization, fragments are processed by <<fragops, fragment
-operations>>.
-
-Several factors affect rasterization, including the members of
-slink:VkPipelineRasterizationStateCreateInfo and
-slink:VkPipelineMultisampleStateCreateInfo.
-
-[open,refpage='VkPipelineRasterizationStateCreateInfo',desc='Structure specifying parameters of a newly created pipeline rasterization state',type='structs']
---
-The sname:VkPipelineRasterizationStateCreateInfo structure is defined as:
-
-include::{generated}/api/structs/VkPipelineRasterizationStateCreateInfo.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:flags is reserved for future use.
-  * pname:depthClampEnable controls whether to clamp the fragment's depth
-    values as described in <<fragops-depth,Depth Test>>.
-ifdef::VK_EXT_depth_clip_enable[]
-    If the pipeline is not created with
-    slink:VkPipelineRasterizationDepthClipStateCreateInfoEXT present then
-    enabling depth clamp will also disable clipping primitives to the z
-    planes of the frustrum as described in <<vertexpostproc-clipping,
-    Primitive Clipping>>.
-    Otherwise depth clipping is controlled by the state set in
-    slink:VkPipelineRasterizationDepthClipStateCreateInfoEXT.
-endif::VK_EXT_depth_clip_enable[]
-ifndef::VK_EXT_depth_clip_enable[]
-    Enabling depth clamp will also disable clipping primitives to the z
-    planes of the frustrum as described in <<vertexpostproc-clipping,
-    Primitive Clipping>>.
-endif::VK_EXT_depth_clip_enable[]
-  * pname:rasterizerDiscardEnable controls whether primitives are discarded
-    immediately before the rasterization stage.
-  * pname:polygonMode is the triangle rendering mode.
-    See elink:VkPolygonMode.
-  * pname:cullMode is the triangle facing direction used for primitive
-    culling.
-    See elink:VkCullModeFlagBits.
-  * pname:frontFace is a elink:VkFrontFace value specifying the front-facing
-    triangle orientation to be used for culling.
-  * pname:depthBiasEnable controls whether to bias fragment depth values.
-  * pname:depthBiasConstantFactor is a scalar factor controlling the
-    constant depth value added to each fragment.
-  * pname:depthBiasClamp is the maximum (or minimum) depth bias of a
-    fragment.
-  * pname:depthBiasSlopeFactor is a scalar factor applied to a fragment's
-    slope in depth bias calculations.
-  * pname:lineWidth is the width of rasterized line segments.
-
-ifdef::VK_AMD_rasterization_order[]
-The application can: also add a
-sname:VkPipelineRasterizationStateRasterizationOrderAMD structure to the
-pname:pNext chain of a slink:VkPipelineRasterizationStateCreateInfo
-structure.
-This structure enables selecting the rasterization order to use when
-rendering with the corresponding graphics pipeline as described in
-<<primsrast-order, Rasterization Order>>.
-endif::VK_AMD_rasterization_order[]
-
-.Valid Usage
-****
-  * [[VUID-VkPipelineRasterizationStateCreateInfo-depthClampEnable-00782]]
-    If the <<features-depthClamp,depth clamping>> feature is not enabled,
-    pname:depthClampEnable must: be ename:VK_FALSE
-ifndef::VK_NV_fill_rectangle[]
-  * [[VUID-VkPipelineRasterizationStateCreateInfo-polygonMode-01413]]
-    If the <<features-fillModeNonSolid,non-solid fill modes>> feature is not
-    enabled, pname:polygonMode must: be ename:VK_POLYGON_MODE_FILL
-endif::VK_NV_fill_rectangle[]
-ifdef::VK_NV_fill_rectangle[]
-  * [[VUID-VkPipelineRasterizationStateCreateInfo-polygonMode-01507]]
-    If the <<features-fillModeNonSolid,non-solid fill modes>> feature is not
-    enabled, pname:polygonMode must: be ename:VK_POLYGON_MODE_FILL or
-    ename:VK_POLYGON_MODE_FILL_RECTANGLE_NV
-  * [[VUID-VkPipelineRasterizationStateCreateInfo-polygonMode-01414]]
-    If the `apiext:VK_NV_fill_rectangle` extension is not enabled,
-    pname:polygonMode must: not be ename:VK_POLYGON_MODE_FILL_RECTANGLE_NV
-endif::VK_NV_fill_rectangle[]
-ifdef::VK_KHR_portability_subset[]
-  * [[VUID-VkPipelineRasterizationStateCreateInfo-pointPolygons-04458]]
-    If the `apiext:VK_KHR_portability_subset` extension is enabled, and
-    slink:VkPhysicalDevicePortabilitySubsetFeaturesKHR::pname:pointPolygons
-    is ename:VK_FALSE, and pname:rasterizerDiscardEnable is ename:VK_FALSE,
-    pname:polygonMode must: not be ename:VK_POLYGON_MODE_POINT
-endif::VK_KHR_portability_subset[]
-****
-
-include::{generated}/validity/structs/VkPipelineRasterizationStateCreateInfo.txt[]
---
-
-[open,refpage='VkPipelineRasterizationStateCreateFlags',desc='Reserved for future use',type='flags']
---
-include::{generated}/api/flags/VkPipelineRasterizationStateCreateFlags.txt[]
-
-tname:VkPipelineRasterizationStateCreateFlags is a bitmask type for setting
-a mask, but is currently reserved for future use.
---
-
-ifdef::VK_EXT_depth_clip_enable[]
-[open,refpage='VkPipelineRasterizationDepthClipStateCreateInfoEXT',desc='Structure specifying depth clipping state',type='structs']
---
-If the pname:pNext chain of slink:VkPipelineRasterizationStateCreateInfo
-includes a sname:VkPipelineRasterizationDepthClipStateCreateInfoEXT
-structure, then that structure controls whether depth clipping is enabled or
-disabled.
-
-The sname:VkPipelineRasterizationDepthClipStateCreateInfoEXT structure is
-defined as:
-
-include::{generated}/api/structs/VkPipelineRasterizationDepthClipStateCreateInfoEXT.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:flags is reserved for future use.
-  * pname:depthClipEnable controls whether depth clipping is enabled as
-    described in <<vertexpostproc-clipping, Primitive Clipping>>.
-
-include::{generated}/validity/structs/VkPipelineRasterizationDepthClipStateCreateInfoEXT.txt[]
---
-
-[open,refpage='VkPipelineRasterizationDepthClipStateCreateFlagsEXT',desc='Reserved for future use',type='flags']
---
-include::{generated}/api/flags/VkPipelineRasterizationDepthClipStateCreateFlagsEXT.txt[]
-
-tname:VkPipelineRasterizationDepthClipStateCreateFlagsEXT is a bitmask type
-for setting a mask, but is currently reserved for future use.
---
-endif::VK_EXT_depth_clip_enable[]
-
-[open,refpage='VkPipelineMultisampleStateCreateInfo',desc='Structure specifying parameters of a newly created pipeline multisample state',type='structs']
---
-The sname:VkPipelineMultisampleStateCreateInfo structure is defined as:
-
-include::{generated}/api/structs/VkPipelineMultisampleStateCreateInfo.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:flags is reserved for future use.
-  * pname:rasterizationSamples is a elink:VkSampleCountFlagBits value
-    specifying the number of samples used in rasterization.
-  * pname:sampleShadingEnable can: be used to enable
-    <<primsrast-sampleshading,Sample Shading>>.
-  * pname:minSampleShading specifies a minimum fraction of sample shading if
-    pname:sampleShadingEnable is set to ename:VK_TRUE.
-  * pname:pSampleMask is a pointer to an array of basetype:VkSampleMask
-    values used in the <<fragops-samplemask,sample mask test>>.
-  * pname:alphaToCoverageEnable controls whether a temporary coverage value
-    is generated based on the alpha component of the fragment's first color
-    output as specified in the <<fragops-covg,Multisample Coverage>>
-    section.
-  * pname:alphaToOneEnable controls whether the alpha component of the
-    fragment's first color output is replaced with one as described in
-    <<fragops-covg,Multisample Coverage>>.
-
-Each bit in the sample mask is associated with a unique
-<<primsrast-multisampling-coverage-mask, sample index>> as defined for the
-<<primsrast-multisampling-coverage-mask, coverage mask>>.
-Each bit [eq]#b# for mask word [eq]#w# in the sample mask corresponds to
-sample index [eq]#i#, where [eq]#i = 32 {times} w {plus} b#.
-pname:pSampleMask has a length equal to [eq]#{lceil}
-pname:rasterizationSamples / 32 {rceil}# words.
-
-If pname:pSampleMask is `NULL`, it is treated as if the mask has all bits
-set to `1`.
-
-.Valid Usage
-****
-  * [[VUID-VkPipelineMultisampleStateCreateInfo-sampleShadingEnable-00784]]
-    If the <<features-sampleRateShading,sample rate shading>> feature is not
-    enabled, pname:sampleShadingEnable must: be ename:VK_FALSE
-  * [[VUID-VkPipelineMultisampleStateCreateInfo-alphaToOneEnable-00785]]
-    If the <<features-alphaToOne,alpha to one>> feature is not enabled,
-    pname:alphaToOneEnable must: be ename:VK_FALSE
-  * [[VUID-VkPipelineMultisampleStateCreateInfo-minSampleShading-00786]]
-    pname:minSampleShading must: be in the range [eq]#[0,1]#
-ifdef::VK_NV_framebuffer_mixed_samples[]
-  * [[VUID-VkPipelineMultisampleStateCreateInfo-rasterizationSamples-01415]]
-    If the `apiext:VK_NV_framebuffer_mixed_samples` extension is enabled,
-    and if the subpass has any color attachments and
-    pname:rasterizationSamples is greater than the number of color samples,
-    then pname:sampleShadingEnable must: be ename:VK_FALSE
-endif::VK_NV_framebuffer_mixed_samples[]
-****
-
-include::{generated}/validity/structs/VkPipelineMultisampleStateCreateInfo.txt[]
---
-
-[open,refpage='VkPipelineMultisampleStateCreateFlags',desc='Reserved for future use',type='flags']
---
-include::{generated}/api/flags/VkPipelineMultisampleStateCreateFlags.txt[]
-
-tname:VkPipelineMultisampleStateCreateFlags is a bitmask type for setting a
-mask, but is currently reserved for future use.
---
-
-[open,refpage='VkSampleMask',desc='Mask of sample coverage information',type='basetypes',xrefs='VkPipelineMultisampleStateCreateInfo']
---
-The elements of the sample mask array are of type basetype:VkSampleMask,
-each representing 32 bits of coverage information:
-
-include::{generated}/api/basetypes/VkSampleMask.txt[]
---
-
-Rasterization only generates fragments which cover one or more pixels inside
-the framebuffer.
-Pixels outside the framebuffer are never considered covered in the fragment.
-Fragments which would be produced by application of any of the primitive
-rasterization rules described below but which lie outside the framebuffer
-are not produced, nor are they processed by any later stage of the pipeline,
-including any of the <<fragops, fragment operations>>.
-
-Surviving fragments are processed by fragment shaders.
-Fragment shaders determine associated data for fragments, and can: also
-modify or replace their assigned depth values.
-
-
-[[primsrast-discard]]
-== Discarding Primitives Before Rasterization
-
-Primitives are discarded before rasterization if the
-pname:rasterizerDiscardEnable member of
-slink:VkPipelineRasterizationStateCreateInfo is enabled.
-When enabled, primitives are discarded after they are processed by the last
-active shader stage in the pipeline before rasterization.
-
-ifdef::VK_EXT_extended_dynamic_state2[]
-[open,refpage='vkCmdSetRasterizerDiscardEnableEXT',desc='Control whether primitives are discarded before the rasterization stage dynamically for a command buffer',type='protos']
---
-To <<pipelines-dynamic-state, dynamically enable>> whether primitives are
-discarded before the rasterization stage, call:
-
-include::{generated}/api/protos/vkCmdSetRasterizerDiscardEnableEXT.txt[]
-
-  * pname:commandBuffer is the command buffer into which the command will be
-    recorded.
-  * pname:rasterizerDiscardEnable controls whether primitives are discarded
-    immediately before the rasterization stage.
-
-This command sets the discard enable for subsequent drawing commands when
-the graphics pipeline is created with
-ename:VK_DYNAMIC_STATE_RASTERIZER_DISCARD_ENABLE_EXT set in
-slink:VkPipelineDynamicStateCreateInfo::pname:pDynamicStates.
-Otherwise, this state is specified by the
-slink:VkPipelineRasterizationStateCreateInfo::pname:rasterizerDiscardEnable
-value used to create the currently active pipeline.
-
-.Valid Usage
-****
-  * [[VUID-vkCmdSetRasterizerDiscardEnableEXT-None-04871]]
-    The <<features-extendedDynamicState2, extendedDynamicState2>> feature
-    must: be enabled
-****
-
-include::{generated}/validity/protos/vkCmdSetRasterizerDiscardEnableEXT.txt[]
---
-endif::VK_EXT_extended_dynamic_state2[]
-
-
-ifdef::VK_EXT_transform_feedback[]
-[[primsrast-stream]]
-== Controlling the Vertex Stream Used for Rasterization
-
-By default vertex data output from the last
-<<pipeline-graphics-subsets-pre-rasterization,pre-rasterization shader
-stage>> are directed to vertex stream zero.
-Geometry shaders can: emit primitives to multiple independent vertex
-streams.
-Each vertex emitted by the geometry shader is directed at one of the vertex
-streams.
-As vertices are received on each vertex stream, they are arranged into
-primitives of the type specified by the geometry shader output primitive
-type.
-The shading language instructions code:OpEndPrimitive and
-code:OpEndStreamPrimitive can: be used to end the primitive being assembled
-on a given vertex stream and start a new empty primitive of the same type.
-An implementation supports up to
-sname:VkPhysicalDeviceTransformFeedbackPropertiesEXT::pname:maxTransformFeedbackStreams
-streams, which is at least 1.
-The individual streams are numbered 0 through
-pname:maxTransformFeedbackStreams minus 1.
-There is no requirement on the order of the streams to which vertices are
-emitted, and the number of vertices emitted to each vertex stream can: be
-completely independent, subject only to the
-sname:VkPhysicalDeviceTransformFeedbackPropertiesEXT::pname:maxTransformFeedbackStreamDataSize
-and
-sname:VkPhysicalDeviceTransformFeedbackPropertiesEXT::pname:maxTransformFeedbackBufferDataSize
-limits.
-The primitives output from all vertex streams are passed to the transform
-feedback stage to be captured to transform feedback buffers in the manner
-specified by the last
-<<pipeline-graphics-subsets-pre-rasterization,pre-rasterization shader
-stage>> shader's code:XfbBuffer, code:XfbStride, and code:Offsets
-decorations on the output interface variables in the graphics pipeline.
-To use a vertex stream other than zero, or to use multiple streams, the
-code:GeometryStreams capability must: be specified.
-
-By default, the primitives output from vertex stream zero are rasterized.
-If the implementation supports the
-slink:VkPhysicalDeviceTransformFeedbackPropertiesEXT::pname:transformFeedbackRasterizationStreamSelect
-property it is possible to rasterize a vertex stream other than zero.
-
-By default, geometry shaders that emit vertices to multiple vertex streams
-are limited to using only the code:OutputPoints output primitive type.
-If the implementation supports the
-slink:VkPhysicalDeviceTransformFeedbackPropertiesEXT::pname:transformFeedbackStreamsLinesTriangles
-property it is possible to emit code:OutputLineStrip or
-code:OutputTriangleStrip in addition to code:OutputPoints.
-
-[open,refpage='VkPipelineRasterizationStateStreamCreateInfoEXT',desc='Structure defining the geometry stream used for rasterization',type='structs']
---
-The vertex stream used for rasterization is specified by adding a
-sname:VkPipelineRasterizationStateStreamCreateInfoEXT structure to the
-pname:pNext chain of a slink:VkPipelineRasterizationStateCreateInfo
-structure.
-
-The sname:VkPipelineRasterizationStateStreamCreateInfoEXT structure is
-defined as:
-
-include::{generated}/api/structs/VkPipelineRasterizationStateStreamCreateInfoEXT.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:flags is reserved for future use.
-  * pname:rasterizationStream is the vertex stream selected for
-    rasterization.
-
-If this structure is not present, pname:rasterizationStream is assumed to be
-zero.
-
-.Valid Usage
-****
-  * [[VUID-VkPipelineRasterizationStateStreamCreateInfoEXT-geometryStreams-02324]]
-    sname:VkPhysicalDeviceTransformFeedbackFeaturesEXT::pname:geometryStreams
-    must: be enabled
-  * [[VUID-VkPipelineRasterizationStateStreamCreateInfoEXT-rasterizationStream-02325]]
-    pname:rasterizationStream must: be less than
-    slink:VkPhysicalDeviceTransformFeedbackPropertiesEXT::pname:maxTransformFeedbackStreams
-  * [[VUID-VkPipelineRasterizationStateStreamCreateInfoEXT-rasterizationStream-02326]]
-    pname:rasterizationStream must: be zero if
-    sname:VkPhysicalDeviceTransformFeedbackPropertiesEXT::pname:transformFeedbackRasterizationStreamSelect
-    is ename:VK_FALSE
-****
-
-include::{generated}/validity/structs/VkPipelineRasterizationStateStreamCreateInfoEXT.txt[]
---
-
-[open,refpage='VkPipelineRasterizationStateStreamCreateFlagsEXT',desc='Reserved for future use',type='flags']
---
-include::{generated}/api/flags/VkPipelineRasterizationStateStreamCreateFlagsEXT.txt[]
-
-tname:VkPipelineRasterizationStateStreamCreateFlagsEXT is a bitmask type for
-setting a mask, but is currently reserved for future use.
---
-endif::VK_EXT_transform_feedback[]
-
-
-[[primsrast-order]]
-== Rasterization Order
-
-Within a subpass of a <<renderpass,render pass instance>>, for a given
-(x,y,layer,sample) sample location, the following operations are guaranteed
-to execute in _rasterization order_, for each separate primitive that
-includes that sample location:
-
-  . <<fragops, Fragment operations>>, in the order defined
-  . <<framebuffer-blending, Blending>>, <<framebuffer-logicop, logic
-    operations>>, and color writes
-
-Execution of these operations for each primitive in a subpass occurs in
-ifndef::VK_AMD_rasterization_order[]
-<<drawing-primitive-order, primitive order>>.
-endif::VK_AMD_rasterization_order[]
-ifdef::VK_AMD_rasterization_order[]
-an order determined by the application.
-
-[open,refpage='VkPipelineRasterizationStateRasterizationOrderAMD',desc='Structure defining rasterization order for a graphics pipeline',type='structs']
---
-The rasterization order to use for a graphics pipeline is specified by
-adding a sname:VkPipelineRasterizationStateRasterizationOrderAMD structure
-to the pname:pNext chain of a slink:VkPipelineRasterizationStateCreateInfo
-structure.
-
-The sname:VkPipelineRasterizationStateRasterizationOrderAMD structure is
-defined as:
-
-include::{generated}/api/structs/VkPipelineRasterizationStateRasterizationOrderAMD.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:rasterizationOrder is a elink:VkRasterizationOrderAMD value
-    specifying the primitive rasterization order to use.
-
-include::{generated}/validity/structs/VkPipelineRasterizationStateRasterizationOrderAMD.txt[]
-
-If the `apiext:VK_AMD_rasterization_order` device extension is not enabled
-or the application does not request a particular rasterization order through
-specifying a sname:VkPipelineRasterizationStateRasterizationOrderAMD
-structure then the rasterization order used by the graphics pipeline
-defaults to ename:VK_RASTERIZATION_ORDER_STRICT_AMD.
---
-
-[open,refpage='VkRasterizationOrderAMD',desc='Specify rasterization order for a graphics pipeline',type='enums']
---
-Possible values of
-slink:VkPipelineRasterizationStateRasterizationOrderAMD::pname:rasterizationOrder,
-specifying the primitive rasterization order, are:
-
-include::{generated}/api/enums/VkRasterizationOrderAMD.txt[]
-
-  * ename:VK_RASTERIZATION_ORDER_STRICT_AMD specifies that operations for
-    each primitive in a subpass must: occur in <<drawing-primitive-order,
-    primitive order>>.
-  * ename:VK_RASTERIZATION_ORDER_RELAXED_AMD specifies that operations for
-    each primitive in a subpass may: not occur in <<drawing-primitive-order,
-    primitive order>>.
---
-endif::VK_AMD_rasterization_order[]
-
-
-[[primsrast-multisampling]]
-== Multisampling
-
-Multisampling is a mechanism to antialias all Vulkan primitives: points,
-lines, and polygons.
-The technique is to sample all primitives multiple times at each pixel.
-Each sample in each framebuffer attachment has storage for a color, depth,
-and/or stencil value, such that per-fragment operations apply to each sample
-independently.
-The color sample values can: be later _resolved_ to a single color (see
-<<copies-resolve,Resolving Multisample Images>> and the <<renderpass,Render
-Pass>> chapter for more details on how to resolve multisample images to
-non-multisample images).
-
-Vulkan defines rasterization rules for single-sample modes in a way that is
-equivalent to a multisample mode with a single sample in the center of each
-fragment.
-
-Each fragment includes a <<primsrast-multisampling-coverage-mask, coverage
-mask>> with a single bit for each sample in the fragment, and a number of
-depth values and associated data for each sample.
-An implementation may: choose to assign the same associated data to more
-than one sample.
-The location for evaluating such associated data may: be anywhere within the
-fragment area including the fragment's center location [eq]#(x~f~,y~f~)# or
-any of the sample locations.
-When pname:rasterizationSamples is ename:VK_SAMPLE_COUNT_1_BIT, the
-fragment's center location must: be used.
-The different associated data values need not all be evaluated at the same
-location.
-
-It is understood that each pixel has pname:rasterizationSamples locations
-associated with it.
-These locations are exact positions, rather than regions or areas, and each
-is referred to as a sample point.
-The sample points associated with a pixel must: be located inside or on the
-boundary of the unit square that is considered to bound the pixel.
-Furthermore, the relative locations of sample points may: be identical for
-each pixel in the framebuffer, or they may: differ.
-
-ifdef::VK_EXT_fragment_density_map[]
-If the render pass has a fragment density map attachment, each fragment only
-has pname:rasterizationSamples locations associated with it regardless of
-how many pixels are covered in the fragment area.
-Fragment sample locations are defined as if the fragment had an area of
-[eq]#(1,1)# and its sample points must: be located within these bounds.
-Their actual location in the framebuffer is calculated by scaling the sample
-location by the fragment area.
-Attachments with storage for multiple samples per pixel are located at the
-pixel sample locations.
-Otherwise, the fragment's sample locations are generally used for evaluation
-of associated data and fragment operations.
-endif::VK_EXT_fragment_density_map[]
-
-If the current pipeline includes a fragment shader with one or more
-variables in its interface decorated with code:Sample and code:Input, the
-data associated with those variables will be assigned independently for each
-sample.
-The values for each sample must: be evaluated at the location of the sample.
-The data associated with any other variables not decorated with code:Sample
-and code:Input need not be evaluated independently for each sample.
-
-[[primsrast-multisampling-coverage-mask]]
-A _coverage mask_ is generated for each fragment, based on which samples
-within that fragment are determined to be within the area of the primitive
-that generated the fragment.
-
-Single pixel fragments
-ifdef::VK_EXT_fragment_density_map[]
-and multi-pixel fragments defined by a
-<<renderpass-fragmentdensitymapattachment, fragment density map>>
-endif::VK_EXT_fragment_density_map[]
-have one set of samples.
-ifdef::VK_NV_shading_rate_image[]
-Multi-pixel fragments defined by a <<primsrast-shading-rate-image, shading
-rate image>> have one set of samples per pixel.
-endif::VK_NV_shading_rate_image[]
-ifdef::VK_KHR_fragment_shading_rate[]
-Multi-pixel fragments defined by setting the
-<<primsrast-fragment-shading-rate, fragment shading rate>> have one set of
-samples per pixel.
-endif::VK_KHR_fragment_shading_rate[]
-Each set of samples has a number of samples determined by
-slink:VkPipelineMultisampleStateCreateInfo::pname:rasterizationSamples.
-Each sample in a set is assigned a unique _sample index_ [eq]#i# in the
-range [eq]#[0, pname:rasterizationSamples)#.
-
-Each sample in a fragment is also assigned a unique _coverage index_ [eq]#j#
-in the range [eq]#[0, n {times} pname:rasterizationSamples)#, where [eq]#n#
-is the number of sets in the fragment.
-If the fragment contains a single set of samples, the _coverage index_ is
-always equal to the _sample index_.
-ifdef::VK_NV_shading_rate_image[]
-If a <<primsrast-shading-rate-image,shading rate image>> is used and a
-fragment covers multiple pixels, the coverage index is determined as defined
-by slink:VkPipelineViewportCoarseSampleOrderStateCreateInfoNV or
-flink:vkCmdSetCoarseSampleOrderNV.
-endif::VK_NV_shading_rate_image[]
-
-ifdef::VK_KHR_fragment_shading_rate[]
-[[primsrast-multisampling-coverage-mask-vrfs]]
-If the <<primsrast-fragment-shading-rate, fragment shading rate>> is set,
-the coverage index [eq]#j# is determined as a function of the _pixel index_
-[eq]#p#, the _sample index_ [eq]#i#, and the number of rasterization samples
-[eq]#r# as:
-
-  {empty}:: [eq]#j = i + r {times} ((f~w~ * f~h~) - 1 - p)#
-
-where the pixel index [eq]#p# is determined as a function of the pixel's
-framebuffer location [eq]#(x,y)# and the fragment size [eq]#(f~w~,f~h~)#:
-
-  {empty}:: [eq]#p~x~ = x % f~w~#
-  {empty}:: [eq]#p~y~ = y % f~h~#
-  {empty}:: [eq]#p = p~x~ + (p~y~ * f~w~)#
-
-The table below illustrates the pixel index for multi-pixel fragments:
-
-.Pixel indices - 1 wide
-[align="center"]
-|====
-| 1x1 | 1x2 | 1x4
-
-.>| image:{images}/pixel_index_1x1.svg[pdfwidth=90pt,opts="{imageopts}"]
-.>| image:{images}/pixel_index_1x2.svg[pdfwidth=90pt,align="center",opts="{imageopts}"]
-.>| image:{images}/pixel_index_1x4.svg[pdfwidth=90pt,align="center",opts="{imageopts}"]
-|====
-
-.Pixel indices - 2 wide
-[align="center"]
-|====
-| 2x1 | 2x2 | 2x4
-
-.>| image:{images}/pixel_index_2x1.svg[pdfwidth=90pt,align="center",opts="{imageopts}"]
-.>| image:{images}/pixel_index_2x2.svg[pdfwidth=90pt,align="center",opts="{imageopts}"]
-.>| image:{images}/pixel_index_2x4.svg[pdfwidth=90pt,align="center",opts="{imageopts}"]
-|====
-
-.Pixel indices - 4 wide
-[align="center"]
-|====
-| 4x1 | 4x2 | 4x4
-
-.>| image:{images}/pixel_index_4x1.svg[pdfwidth=90pt,align="center",opts="{imageopts}"]
-.>| image:{images}/pixel_index_4x2.svg[pdfwidth=90pt,align="center",opts="{imageopts}"]
-.>| image:{images}/pixel_index_4x4.svg[pdfwidth=90pt,align="center",opts="{imageopts}"]
-|====
-endif::VK_KHR_fragment_shading_rate[]
-
-The coverage mask includes [eq]#B# bits packed into [eq]#W# words, defined
-as:
-
-  {empty}:: [eq]#B = n {times} pname:rasterizationSamples#
-  {empty}:: [eq]#W = {lceil}B/32{rceil}#
-
-Bit [eq]#b# in coverage mask word [eq]#w# is `1` if the sample with coverage
-index [eq]#j = 32*w + b# is covered, and `0` otherwise.
-
-If the pname:standardSampleLocations member of slink:VkPhysicalDeviceLimits
-is ename:VK_TRUE, then the sample counts ename:VK_SAMPLE_COUNT_1_BIT,
-ename:VK_SAMPLE_COUNT_2_BIT, ename:VK_SAMPLE_COUNT_4_BIT,
-ename:VK_SAMPLE_COUNT_8_BIT, and ename:VK_SAMPLE_COUNT_16_BIT have sample
-locations as listed in the following table, with the [eq]##i##th entry in
-the table corresponding to sample index [eq]#i#.
-ename:VK_SAMPLE_COUNT_32_BIT and ename:VK_SAMPLE_COUNT_64_BIT do not have
-standard sample locations.
-Locations are defined relative to an origin in the upper left corner of the
-fragment.
-
-<<<
-
-.Standard sample locations
-[options="header",align="center"]
-|====
-| Sample count 2+| Sample Locations
-|ename:VK_SAMPLE_COUNT_1_BIT
-    | [eq]#(0.5,0.5)#
-    | image:{images}/sample_count_1.svg[pdfwidth=90pt,align="center",opts="{imageopts}"]
-|ename:VK_SAMPLE_COUNT_2_BIT
-    | [eq]#(0.75,0.75)# +
-      [eq]#(0.25,0.25)#
-    | image:{images}/sample_count_2.svg[pdfwidth=90pt,align="center",opts="{imageopts}"]
-|ename:VK_SAMPLE_COUNT_4_BIT
-    | [eq]#(0.375, 0.125)# +
-      [eq]#(0.875, 0.375)# +
-      [eq]#(0.125, 0.625)# +
-      [eq]#(0.625, 0.875)#
-    | image:{images}/sample_count_4.svg[pdfwidth=90pt,align="center",opts="{imageopts}"]
-|ename:VK_SAMPLE_COUNT_8_BIT
-    | [eq]#(0.5625, 0.3125)# +
-      [eq]#(0.4375, 0.6875)# +
-      [eq]#(0.8125, 0.5625)# +
-      [eq]#(0.3125, 0.1875)# +
-      [eq]#(0.1875, 0.8125)# +
-      [eq]#(0.0625, 0.4375)# +
-      [eq]#(0.6875, 0.9375)# +
-      [eq]#(0.9375, 0.0625)#
-    | image:{images}/sample_count_8.svg[pdfwidth=90pt,align="center",opts="{imageopts}"]
-|ename:VK_SAMPLE_COUNT_16_BIT
-    | [eq]#(0.5625, 0.5625)# +
-      [eq]#(0.4375, 0.3125)# +
-      [eq]#(0.3125, 0.625)# +
-      [eq]#(0.75,   0.4375)# +
-      [eq]#(0.1875, 0.375)# +
-      [eq]#(0.625,  0.8125)# +
-      [eq]#(0.8125, 0.6875)# +
-      [eq]#(0.6875, 0.1875)# +
-      [eq]#(0.375,  0.875)# +
-      [eq]#(0.5,    0.0625)# +
-      [eq]#(0.25,   0.125)# +
-      [eq]#(0.125,  0.75)# +
-      [eq]#(0.0,    0.5)# +
-      [eq]#(0.9375, 0.25)# +
-      [eq]#(0.875,  0.9375)# +
-      [eq]#(0.0625, 0.0)#
-    | image:{images}/sample_count_16.svg[pdfwidth=90pt,align="center",opts="{imageopts}"]
-|====
-
-ifdef::VK_AMD_shader_fragment_mask[]
-Color images created with multiple samples per pixel use a compression
-technique where there are two arrays of data associated with each pixel.
-The first array contains one element per sample where each element stores an
-index to the second array defining the _fragment mask_ of the pixel.
-The second array contains one element per _color fragment_ and each element
-stores a unique color value in the format of the image.
-With this compression technique it is not always necessary to actually use
-unique storage locations for each color sample: when multiple samples share
-the same color value the fragment mask may: have two samples referring to
-the same color fragment.
-The number of color fragments is determined by the pname:samples member of
-the slink:VkImageCreateInfo structure used to create the image.
-The `apiext:VK_AMD_shader_fragment_mask` device extension provides shader
-instructions enabling the application to get direct access to the fragment
-mask and the individual color fragment values.
-
-[[vk-amd-shader-fragment-mask-diagram]]
-image::{images}/fragment_mask.svg[align="center",title="Fragment Mask",align="center",opts="{imageopts}"]
-
-endif::VK_AMD_shader_fragment_mask[]
-
-
-ifdef::VK_EXT_sample_locations[]
-[[primsrast-samplelocations]]
-== Custom Sample Locations
-
-[open,refpage='VkPipelineSampleLocationsStateCreateInfoEXT',desc='Structure specifying sample locations for a pipeline',type='structs']
---
-Applications can: also control the sample locations used for rasterization.
-
-If the pname:pNext chain of the slink:VkPipelineMultisampleStateCreateInfo
-structure specified at pipeline creation time includes a
-sname:VkPipelineSampleLocationsStateCreateInfoEXT structure, then that
-structure controls the sample locations used when rasterizing primitives
-with the pipeline.
-
-The sname:VkPipelineSampleLocationsStateCreateInfoEXT structure is defined
-as:
-
-include::{generated}/api/structs/VkPipelineSampleLocationsStateCreateInfoEXT.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:sampleLocationsEnable controls whether custom sample locations are
-    used.
-    If pname:sampleLocationsEnable is ename:VK_FALSE, the default sample
-    locations are used and the values specified in pname:sampleLocationsInfo
-    are ignored.
-  * pname:sampleLocationsInfo is the sample locations to use during
-    rasterization if pname:sampleLocationsEnable is ename:VK_TRUE and the
-    graphics pipeline is not created with
-    ename:VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT.
-
-include::{generated}/validity/structs/VkPipelineSampleLocationsStateCreateInfoEXT.txt[]
---
-
-[open,refpage='VkSampleLocationsInfoEXT',desc='Structure specifying a set of sample locations',type='structs']
---
-The sname:VkSampleLocationsInfoEXT structure is defined as:
-
-include::{generated}/api/structs/VkSampleLocationsInfoEXT.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:sampleLocationsPerPixel is a elink:VkSampleCountFlagBits value
-    specifying the number of sample locations per pixel.
-  * pname:sampleLocationGridSize is the size of the sample location grid to
-    select custom sample locations for.
-  * pname:sampleLocationsCount is the number of sample locations in
-    pname:pSampleLocations.
-  * pname:pSampleLocations is a pointer to an array of
-    pname:sampleLocationsCount slink:VkSampleLocationEXT structures.
-
-This structure can: be used either to specify the sample locations to be
-used for rendering or to specify the set of sample locations an image
-subresource has been last rendered with for the purposes of layout
-transitions of depth/stencil images created with
-ename:VK_IMAGE_CREATE_SAMPLE_LOCATIONS_COMPATIBLE_DEPTH_BIT_EXT.
-
-The sample locations in pname:pSampleLocations specify
-pname:sampleLocationsPerPixel number of sample locations for each pixel in
-the grid of the size specified in pname:sampleLocationGridSize.
-The sample location for sample [eq]#i# at the pixel grid location
-[eq]#(x,y)# is taken from [eq]#pname:pSampleLocations[(x {plus} y {times}
-pname:sampleLocationGridSize.width) {times} pname:sampleLocationsPerPixel
-{plus} i]#.
-
-ifdef::VK_EXT_fragment_density_map[]
-If the render pass has a fragment density map, the implementation will
-choose the sample locations for the fragment and the contents of
-pname:pSampleLocations may: be ignored.
-endif::VK_EXT_fragment_density_map[]
-
-.Valid Usage
-****
-  * [[VUID-VkSampleLocationsInfoEXT-sampleLocationsPerPixel-01526]]
-    pname:sampleLocationsPerPixel must: be a bit value that is set in
-    slink:VkPhysicalDeviceSampleLocationsPropertiesEXT::pname:sampleLocationSampleCounts
-  * [[VUID-VkSampleLocationsInfoEXT-sampleLocationsCount-01527]]
-    pname:sampleLocationsCount must: equal
-    [eq]#pname:sampleLocationsPerPixel {times}
-    pname:sampleLocationGridSize.width {times}
-    pname:sampleLocationGridSize.height#
-****
-
-include::{generated}/validity/structs/VkSampleLocationsInfoEXT.txt[]
---
-
-[open,refpage='VkSampleLocationEXT',desc='Structure specifying the coordinates of a sample location',type='structs']
---
-The sname:VkSampleLocationEXT structure is defined as:
-
-include::{generated}/api/structs/VkSampleLocationEXT.txt[]
-
-  * pname:x is the horizontal coordinate of the sample's location.
-  * pname:y is the vertical coordinate of the sample's location.
-
-The domain space of the sample location coordinates has an upper-left origin
-within the pixel in framebuffer space.
-
-The values specified in a sname:VkSampleLocationEXT structure are always
-clamped to the implementation-dependent sample location coordinate range
-[eq]#[pname:sampleLocationCoordinateRange[0],pname:sampleLocationCoordinateRange[1]]#
-that can: be queried using
-slink:VkPhysicalDeviceSampleLocationsPropertiesEXT.
-
-include::{generated}/validity/structs/VkSampleLocationEXT.txt[]
---
-
-[open,refpage='vkCmdSetSampleLocationsEXT',desc='Set sample locations dynamically for a command buffer',type='protos']
---
-To <<pipelines-dynamic-state, dynamically set>> the sample locations used
-for rasterization, call:
-
-include::{generated}/api/protos/vkCmdSetSampleLocationsEXT.txt[]
-
-  * pname:commandBuffer is the command buffer into which the command will be
-    recorded.
-  * pname:pSampleLocationsInfo is the sample locations state to set.
-
-This command sets the custom sample locations for subsequent drawing
-commands when the graphics pipeline is created with
-ename:VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT set in
-slink:VkPipelineDynamicStateCreateInfo::pname:pDynamicStates, and when the
-slink:VkPipelineSampleLocationsStateCreateInfoEXT::pname:sampleLocationsEnable
-property of the bound graphics pipeline is ename:VK_TRUE.
-Otherwise, this state is specified by the
-slink:VkPipelineSampleLocationsStateCreateInfoEXT::pname:sampleLocationsInfo
-values used to create the currently active pipeline.
-
-.Valid Usage
-****
-  * [[VUID-vkCmdSetSampleLocationsEXT-sampleLocationsPerPixel-01529]]
-    The pname:sampleLocationsPerPixel member of pname:pSampleLocationsInfo
-    must: equal the pname:rasterizationSamples member of the
-    slink:VkPipelineMultisampleStateCreateInfo structure the bound graphics
-    pipeline has been created with
-  * [[VUID-vkCmdSetSampleLocationsEXT-variableSampleLocations-01530]]
-    If
-    slink:VkPhysicalDeviceSampleLocationsPropertiesEXT::pname:variableSampleLocations
-    is ename:VK_FALSE then the current render pass must: have been begun by
-    specifying a slink:VkRenderPassSampleLocationsBeginInfoEXT structure
-    whose pname:pPostSubpassSampleLocations member contains an element with
-    a pname:subpassIndex matching the current subpass index and the
-    pname:sampleLocationsInfo member of that element must: match the sample
-    locations state pointed to by pname:pSampleLocationsInfo
-****
-
-include::{generated}/validity/protos/vkCmdSetSampleLocationsEXT.txt[]
---
-endif::VK_EXT_sample_locations[]
-
-
-ifdef::VK_KHR_fragment_shading_rate[]
-[[primsrast-fragment-shading-rate]]
-== Fragment Shading Rates
-
-The features advertised by
-slink:VkPhysicalDeviceFragmentShadingRateFeaturesKHR allow an application to
-control the <<glossary-shading-rate, shading rate>> of a given fragment
-shader invocation.
-
-The fragment shading rate strongly interacts with <<primsrast-multisampling,
-Multisampling>>, and the set of available rates for an implementation may:
-be restricted by sample rate.
-
-[open,refpage='vkGetPhysicalDeviceFragmentShadingRatesKHR',desc='Get available shading rates for a physical device',type='protos']
---
-To query available shading rates, call:
-
-include::{generated}/api/protos/vkGetPhysicalDeviceFragmentShadingRatesKHR.txt[]
-
-  * pname:physicalDevice is the handle to the physical device whose
-    properties will be queried.
-  * pname:pFragmentShadingRateCount is a pointer to an integer related to
-    the number of fragment shading rates available or queried, as described
-    below.
-  * pname:pFragmentShadingRates is either `NULL` or a pointer to an array of
-    slink:VkPhysicalDeviceFragmentShadingRateKHR structures.
-
-If pname:pFragmentShadingRates is `NULL`, then the number of fragment
-shading rates available is returned in pname:pFragmentShadingRateCount.
-Otherwise, pname:pFragmentShadingRateCount must: point to a variable set by
-the user to the number of elements in the pname:pFragmentShadingRates array,
-and on return the variable is overwritten with the number of structures
-actually written to pname:pFragmentShadingRates.
-If pname:pFragmentShadingRateCount is less than the number of fragment
-shading rates available, at most pname:pFragmentShadingRateCount structures
-will be written, and ename:VK_INCOMPLETE will be returned instead of
-ename:VK_SUCCESS, to indicate that not all the available fragment shading
-rates were returned.
-
-The returned array of fragment shading rates must: be ordered from largest
-pname:fragmentSize.width value to smallest, and each set of fragment shading
-rates with the same pname:fragmentSize.width value must: be ordered from
-largest pname:fragmentSize.height to smallest.
-Any two entries in the array must: not have the same pname:fragmentSize
-values.
-
-For any entry in the array, the following rules also apply:
-
-  * The value of pname:fragmentSize.width must: be less than or equal to
-    <<limits-maxFragmentSize,pname:maxFragmentSize.width>>.
-  * The value of pname:fragmentSize.width must: be greater than or equal to
-    `1`.
-  * The value of pname:fragmentSize.width must: be a power-of-two.
-  * The value of pname:fragmentSize.height must: be less than or equal to
-    <<limits-maxFragmentSize,pname:maxFragmentSize.height>>.
-  * The value of pname:fragmentSize.height must: be greater than or equal to
-    `1`.
-  * The value of pname:fragmentSize.height must: be a power-of-two.
-  * The highest sample count in pname:sampleCounts must: be less than or
-    equal to <<limits-maxFragmentShadingRateRasterizationSamples,
-    pname:maxFragmentShadingRateRasterizationSamples>>.
-  * The product of pname:fragmentSize.width, pname:fragmentSize.height, and
-    the highest sample count in pname:sampleCounts must: be less than or
-    equal to <<limits-maxFragmentShadingRateCoverageSamples,
-    pname:maxFragmentShadingRateCoverageSamples>>.
-
-Implementations must: support at least the following shading rates:
-
-[options="autowidth"]
-|===
-| pname:sampleCounts | pname:fragmentSize
-
-| ename:VK_SAMPLE_COUNT_1_BIT \| ename:VK_SAMPLE_COUNT_4_BIT | {2,2}
-| ename:VK_SAMPLE_COUNT_1_BIT \| ename:VK_SAMPLE_COUNT_4_BIT | {2,1}
-| ~0                                                         | {1,1}
-|===
-
-If <<limits-framebufferColorSampleCounts,
-pname:framebufferColorSampleCounts>>, includes ename:VK_SAMPLE_COUNT_2_BIT,
-the required rates must: also include ename:VK_SAMPLE_COUNT_2_BIT.
-
-[NOTE]
-.Note
-====
-Including the {1,1} fragment size is done for completeness; it has no actual
-effect on the support of rendering without setting the fragment size.
-All sample counts
-ifdef::VK_QCOM_render_pass_transform[]
-and render pass transforms
-endif::VK_QCOM_render_pass_transform[]
-are supported for this rate.
-====
-
-ifdef::VK_QCOM_render_pass_transform[]
-The returned set of fragment shading rates must: be returned in the native
-(rotated) coordinate system.
-For rasterization using render pass pname:transform not equal to
-ename:VK_SURFACE_TRANSFORM_IDENTITY_BIT_KHR, the application must: transform
-the returned fragment shading rates into the current (unrotated) coordinate
-system to get the supported rates for that transform.
-
-[NOTE]
-.Note
-====
-For example, consider an implementation returning support for 4x2, but not
-2x4 in the set of supported fragment shading rates.
-This means that for transforms ename:VK_SURFACE_TRANSFORM_ROTATE_90_BIT_KHR
-and ename:VK_SURFACE_TRANSFORM_ROTATE_270_BIT_KHR, 2x4 is a supported rate,
-but 4x2 is an unsupported rate.
-====
-endif::VK_QCOM_render_pass_transform[]
-
-include::{generated}/validity/protos/vkGetPhysicalDeviceFragmentShadingRatesKHR.txt[]
---
-
-[open,refpage='VkPhysicalDeviceFragmentShadingRateKHR',desc='Structure returning information about sample count specific additional multisampling capabilities',type='structs']
---
-The sname:VkPhysicalDeviceFragmentShadingRateKHR structure is defined as
-
-include::{generated}/api/structs/VkPhysicalDeviceFragmentShadingRateKHR.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:sampleCounts is a bitmask of sample counts for which the shading
-    rate described by pname:fragmentSize is supported.
-  * pname:fragmentSize is a slink:VkExtent2D describing the width and height
-    of a supported shading rate.
-
-include::{generated}/validity/structs/VkPhysicalDeviceFragmentShadingRateKHR.txt[]
---
-
-Fragment shading rates can: be set at three points, with the three rates
-combined to determine the final shading rate.
-
-
-[[primsrast-fragment-shading-rate-pipeline]]
-=== Pipeline Fragment Shading Rate
-
-The _pipeline fragment shading rate_ can: be set on a per-draw basis by
-either setting the rate in a graphics pipeline, or dynamically via
-flink:vkCmdSetFragmentShadingRateKHR.
-
-[open,refpage='VkPipelineFragmentShadingRateStateCreateInfoKHR',desc='Structure specifying parameters controlling the fragment shading rate',type='structs']
---
-The sname:VkPipelineFragmentShadingRateStateCreateInfoKHR structure is
-defined as:
-
-include::{generated}/api/structs/VkPipelineFragmentShadingRateStateCreateInfoKHR.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:fragmentSize specifies a slink:VkExtent2D structure containing the
-    fragment size used to define the pipeline fragment shading rate for
-    drawing commands using this pipeline.
-  * pname:combinerOps specifies a elink:VkFragmentShadingRateCombinerOpKHR
-    value determining how the
-    <<primsrast-fragment-shading-rate-pipeline,pipeline>>,
-    <<primsrast-fragment-shading-rate-primitive,primitive>>, and
-    <<primsrast-fragment-shading-rate-attachment,attachment shading rates>>
-    are <<primsrast-fragment-shading-rate-combining,combined>> for fragments
-    generated by drawing commands using the created pipeline.
-
-If the pname:pNext chain of slink:VkGraphicsPipelineCreateInfo includes a
-sname:VkPipelineFragmentShadingRateStateCreateInfoKHR structure, then that
-structure includes parameters that control the pipeline fragment shading
-rate.
-
-If this structure is not present, pname:fragmentSize is considered to be
-equal to [eq]#(1,1)#, and both elements of pname:combinerOps are considered
-to be equal to ename:VK_FRAGMENT_SHADING_RATE_COMBINER_OP_KEEP_KHR.
-
-include::{generated}/validity/structs/VkPipelineFragmentShadingRateStateCreateInfoKHR.txt[]
---
-
-[open,refpage='vkCmdSetFragmentShadingRateKHR',desc='Set pipeline fragment shading rate and combiner operation dynamically for a command buffer',type='protos']
---
-To <<pipelines-dynamic-state, dynamically set>> the pipeline fragment
-shading rate and combiner operation, call:
-
-include::{generated}/api/protos/vkCmdSetFragmentShadingRateKHR.txt[]
-
-  * pname:commandBuffer is the command buffer into which the command will be
-    recorded.
-  * pname:pFragmentSize specifies the pipeline fragment shading rate for
-    subsequent drawing commands.
-  * pname:combinerOps specifies a elink:VkFragmentShadingRateCombinerOpKHR
-    determining how the
-    <<primsrast-fragment-shading-rate-pipeline,pipeline>>,
-    <<primsrast-fragment-shading-rate-primitive,primitive>>, and
-    <<primsrast-fragment-shading-rate-attachment,attachment shading rates>>
-    are <<primsrast-fragment-shading-rate-combining,combined>> for fragments
-    generated by subsequent drawing commands.
-
-This command sets the pipeline fragment shading rate and combiner operation
-for subsequent drawing commands when the graphics pipeline is created with
-ename:VK_DYNAMIC_STATE_FRAGMENT_SHADING_RATE_KHR set in
-slink:VkPipelineDynamicStateCreateInfo::pname:pDynamicStates.
-Otherwise, this state is specified by the
-slink:VkPipelineFragmentShadingRateStateCreateInfoKHR values used to create
-the currently active pipeline.
-
-.Valid Usage
-****
-  * [[VUID-vkCmdSetFragmentShadingRateKHR-pipelineFragmentShadingRate-04507]]
-    If <<features-pipelineFragmentShadingRate,
-    pname:pipelineFragmentShadingRate>> is not enabled,
-    pname:pFragmentSize->width must: be `1`
-  * [[VUID-vkCmdSetFragmentShadingRateKHR-pipelineFragmentShadingRate-04508]]
-    If <<features-pipelineFragmentShadingRate,
-    pname:pipelineFragmentShadingRate>> is not enabled,
-    pname:pFragmentSize->height must: be `1`
-  * [[VUID-vkCmdSetFragmentShadingRateKHR-pipelineFragmentShadingRate-04509]]
-    One of <<features-pipelineFragmentShadingRate,
-    pname:pipelineFragmentShadingRate>>,
-    <<features-primitiveFragmentShadingRate,
-    pname:primitiveFragmentShadingRate>>, or
-    <<features-attachmentFragmentShadingRate,
-    pname:attachmentFragmentShadingRate>> must: be enabled
-  * [[VUID-vkCmdSetFragmentShadingRateKHR-primitiveFragmentShadingRate-04510]]
-    If the <<features-primitiveFragmentShadingRate,
-    pname:primitiveFragmentShadingRate feature>> is not enabled,
-    pname:combinerOps[0] must: be
-    ename:VK_FRAGMENT_SHADING_RATE_COMBINER_OP_KEEP_KHR
-  * [[VUID-vkCmdSetFragmentShadingRateKHR-attachmentFragmentShadingRate-04511]]
-    If the <<features-attachmentFragmentShadingRate,
-    pname:attachmentFragmentShadingRate feature>> is not enabled,
-    pname:combinerOps[1] must: be
-    ename:VK_FRAGMENT_SHADING_RATE_COMBINER_OP_KEEP_KHR
-  * [[VUID-vkCmdSetFragmentShadingRateKHR-fragmentSizeNonTrivialCombinerOps-04512]]
-    If the <<limits-fragmentShadingRateNonTrivialCombinerOps,
-    pname:fragmentSizeNonTrivialCombinerOps>> limit is not supported,
-    elements of pname:combinerOps must: be either
-    ename:VK_FRAGMENT_SHADING_RATE_COMBINER_OP_KEEP_KHR or
-    ename:VK_FRAGMENT_SHADING_RATE_COMBINER_OP_REPLACE_KHR
-  * [[VUID-vkCmdSetFragmentShadingRateKHR-pFragmentSize-04513]]
-    pname:pFragmentSize->width must: be greater than or equal to `1`
-  * [[VUID-vkCmdSetFragmentShadingRateKHR-pFragmentSize-04514]]
-    pname:pFragmentSize->height must: be greater than or equal to `1`
-  * [[VUID-vkCmdSetFragmentShadingRateKHR-pFragmentSize-04515]]
-    pname:pFragmentSize->width must: be a power-of-two value
-  * [[VUID-vkCmdSetFragmentShadingRateKHR-pFragmentSize-04516]]
-    pname:pFragmentSize->height must: be a power-of-two value
-  * [[VUID-vkCmdSetFragmentShadingRateKHR-pFragmentSize-04517]]
-    pname:pFragmentSize->width must: be less than or equal to `4`
-  * [[VUID-vkCmdSetFragmentShadingRateKHR-pFragmentSize-04518]]
-    pname:pFragmentSize->height must: be less than or equal to `4`
-****
-
-include::{generated}/validity/protos/vkCmdSetFragmentShadingRateKHR.txt[]
---
-
-
-[[primsrast-fragment-shading-rate-primitive]]
-=== Primitive Fragment Shading Rate
-
-The _primitive fragment shading rate_ can: be set via the
-<<interfaces-builtin-variables-primitiveshadingrate,
-code:PrimitiveShadingRateKHR>> built-in in the last active
-<<pipeline-graphics-subsets-pre-rasterization,pre-rasterization shader
-stage>>.
-The rate associated with a given primitive is sourced from the value written
-to code:PrimitiveShadingRateKHR by that primitive's
-<<vertexpostproc-flatshading,provoking vertex>>.
-
-
-[[primsrast-fragment-shading-rate-attachment]]
-=== Attachment Fragment Shading Rate
-
-The _attachment shading rate_ can: be set by including
-slink:VkFragmentShadingRateAttachmentInfoKHR in a subpass to define a
-_fragment shading rate attachment_.
-Each pixel in the framebuffer is assigned an attachment fragment shading
-rate by the corresponding texel in the fragment shading rate attachment,
-according to:
-
-  {empty}:: [eq]#x' = floor(x / region~x~)#
-  {empty}:: [eq]#y' = floor(y / region~y~)#
-
-where [eq]#x'# and [eq]#y'# are the coordinates of a texel in the fragment
-shading rate attachment, [eq]#x# and [eq]#y# are the coordinates of the
-pixel in the framebuffer, and [eq]#region~x~# and [eq]#region~y~# are the
-size of the region each texel corresponds to, as defined by the
-pname:shadingRateAttachmentTexelSize member of
-slink:VkFragmentShadingRateAttachmentInfoKHR.
-
-If <<VkRenderPassMultiviewCreateInfo, multiview is enabled>> and the shading
-rate attachment has multiple layers, the shading rate attachment texel is
-selected from the layer determined by the
-<<interfaces-builtin-variables-viewindex,code:ViewIndex>> built-in.
-If <<VkRenderPassMultiviewCreateInfo, multiview is disabled>>, and both the
-shading rate attachment and the framebuffer have multiple layers, the
-shading rate attachment texel is selected from the layer determined by the
-<<interfaces-builtin-variables-layer,code:Layer>> built-in.
-Otherwise, the texel is unconditionally selected from the first layer of the
-attachment.
-
-The fragment size is encoded into the first component of the identified
-texel as follows:
-
-  {empty}:: [eq]#size~w~ = 2^((texel/4)&3)^#
-  {empty}:: [eq]#size~h~ = 2^(texel&3)^#
-
-where [eq]#texel# is the value in the first component of the identified
-texel, and [eq]#size~w~# and [eq]#size~h~# are the width and height of the
-fragment size, decoded from the texel.
-
-If no fragment shading rate attachment is specified, this size is calculated
-as [eq]#size~w~ = size~h~ = 1#.
-Applications must: not specify a width or height greater than 4 by this
-method.
-
-The _Fragment Shading Rate_ enumeration in SPIR-V adheres to the above
-encoding.
-
-
-[[primsrast-fragment-shading-rate-combining]]
-=== Combining the Fragment Shading Rates
-
-The final rate ([eq]#C~xy~'#) used for fragment shading must: be one of the
-rates returned by flink:vkGetPhysicalDeviceFragmentShadingRatesKHR for the
-sample count
-ifdef::VK_QCOM_render_pass_transform[]
-and render pass transform
-endif::VK_QCOM_render_pass_transform[]
-used by rasterization.
-
-If any of the following conditions are met, [eq]#C~xy~'# must: be set to
-[eq]#{1,1}#:
-
-  * If <<primsrast-sampleshading,Sample Shading>> is enabled.
-  * The <<limits-fragmentShadingRateWithSampleMask,
-    pname:fragmentShadingRateWithSampleMask>> limit is not supported, and
-    slink:VkPipelineMultisampleStateCreateInfo::pname:pSampleMask contains a
-    zero value in any bit used by fragment operations.
-  * The <<limits-fragmentShadingRateWithShaderSampleMask,
-    pname:fragmentShadingRateWithShaderSampleMask>> is not supported, and
-    the fragment shader has code:SampleMask in the input or output
-    interface.
-  * The <<limits-fragmentShadingRateWithShaderDepthStencilWrites,
-    pname:fragmentShadingRateWithShaderDepthStencilWrites>> limit is not
-    supported, and the fragment shader declares the code:FragDepth
-ifdef::VK_EXT_shader_stencil_export[]
-    or code:FragStencilRefEXT
-endif::VK_EXT_shader_stencil_export[]
-    built-in.
-ifdef::VK_EXT_conservative_rasterization[]
-  * The <<limits-fragmentShadingRateWithConservativeRasterization,
-    pname:fragmentShadingRateWithConservativeRasterization>> limit is not
-    supported, and
-    slink:VkPipelineRasterizationConservativeStateCreateInfoEXT::pname:conservativeRasterizationMode
-    is not ename:VK_CONSERVATIVE_RASTERIZATION_MODE_DISABLED_EXT.
-endif::VK_EXT_conservative_rasterization[]
-ifdef::VK_EXT_fragment_shader_interlock[]
-  * The <<limits-fragmentShadingRateWithFragmentShaderInterlock,
-    pname:fragmentShadingRateWithFragmentShaderInterlock>> limit is not
-    supported, and the fragment shader declares any of the
-    <<fragops-shader-interlock, fragment shader interlock>> execution modes.
-endif::VK_EXT_fragment_shader_interlock[]
-ifdef::VK_EXT_sample_locations[]
-  * The <<limits-fragmentShadingRateWithCustomSampleLocations,
-    pname:fragmentShadingRateWithCustomSampleLocations>> limit is not
-    supported, and
-    slink:VkPipelineSampleLocationsStateCreateInfoEXT::pname:sampleLocationsEnable
-    is ename:VK_TRUE.
-endif::VK_EXT_sample_locations[]
-
-Otherwise, each of the specified shading rates are combined and then used to
-derive the value of [eq]#C~xy~'#.
-As there are three ways to specify shading rates, two combiner operations
-are specified - between the
-<<primsrast-fragment-shading-rate-pipeline,pipeline>> and
-<<primsrast-fragment-shading-rate-primitive,primitive>> shading rates, and
-between the result of that and the
-<<primsrast-fragment-shading-rate-attachment,attachment shading rate>>.
-
-[open,refpage='VkFragmentShadingRateCombinerOpKHR',desc='Control how fragment shading rates are combined',type='enums']
---
-The equation used for each combiner operation is defined by
-ename:VkFragmentShadingRateCombinerOpKHR:
-
-include::{generated}/api/enums/VkFragmentShadingRateCombinerOpKHR.txt[]
-
-  * ename:VK_FRAGMENT_SHADING_RATE_COMBINER_OP_KEEP_KHR specifies a combiner
-    operation of [eq]#combine(A~xy~,B~xy~) = A~xy~#.
-  * ename:VK_FRAGMENT_SHADING_RATE_COMBINER_OP_REPLACE_KHR specifies a
-    combiner operation of [eq]#combine(A~xy~,B~xy~) = B~xy~#.
-  * ename:VK_FRAGMENT_SHADING_RATE_COMBINER_OP_MIN_KHR specifies a combiner
-    operation of [eq]#combine(A~xy~,B~xy~) = min(A~xy~,B~xy~)#.
-  * ename:VK_FRAGMENT_SHADING_RATE_COMBINER_OP_MAX_KHR specifies a combiner
-    operation of [eq]#combine(A~xy~,B~xy~) = max(A~xy~,B~xy~)#.
-  * ename:VK_FRAGMENT_SHADING_RATE_COMBINER_OP_MUL_KHR specifies a combiner
-    operation of [eq]#combine(A~xy~,B~xy~) = A~xy~*B~xy~#.
-
-where [eq]#combine(A~xy~,B~xy~)# is the combine operation, and [eq]#A~xy~#
-and [eq]#B~xy~# are the inputs to the operation.
-
-If <<limits-fragmentShadingRateStrictMultiplyCombiner,
-pname:fragmentShadingRateStrictMultiplyCombiner>> is ename:VK_FALSE, using
-ename:VK_FRAGMENT_SHADING_RATE_COMBINER_OP_MUL_KHR with values of 1 for both
-A and B in the same dimension results in the value 2 being produced for that
-dimension.
-See the definition of <<limits-fragmentShadingRateStrictMultiplyCombiner,
-pname:fragmentShadingRateStrictMultiplyCombiner>> for more information.
-
-These operations are performed in a component-wise fashion.
---
-
-This is used to generate a combined fragment area using the equation:
-
-  {empty}:: [eq]#C~xy~ = combine(A~xy~,B~xy~)#
-
-where [eq]#C~xy~# is the combined fragment area result, and [eq]#A~xy~# and
-[eq]#B~xy~# are the fragment areas of the fragment shading rates being
-combined.
-
-Two combine operations are performed, first with [eq]#A~xy~# equal to the
-<<primsrast-fragment-shading-rate-pipeline,pipeline fragment shading rate>>
-and [eq]#B~xy~# equal to the <<primsrast-fragment-shading-rate-primitive,
-primitive fragment shading rate>>, with the [eq]#combine()# operation
-selected by combinerOps[0].
-A second combination is then performed, with [eq]#A~xy~# equal to the result
-of the first combination and [eq]#B~xy~# equal to the
-<<primsrast-fragment-shading-rate-attachment, attachment fragment shading
-rate>>, with the [eq]#combine()# operation selected by combinerOps[1].
-The result of the second combination is used as the final fragment shading
-rate, reported via the <<interfaces-builtin-variables-primitiveshadingrate,
-code:ShadingRateKHR built-in>>.
-
-Implementations may: clamp the [eq]#C~xy~# result of each combiner operation
-separately, or only after the second combiner operation.
-
-If the final combined rate is one of the rates returned by
-flink:vkGetPhysicalDeviceFragmentShadingRatesKHR for the sample count
-ifdef::VK_QCOM_render_pass_transform[]
-and render pass transform
-endif::VK_QCOM_render_pass_transform[]
-used by rasterization, [eq]#C~xy~' = C~xy~#.
-Otherwise, [eq]#C~xy~'# is selected from the rates returned by
-flink:vkGetPhysicalDeviceFragmentShadingRatesKHR for the sample count
-ifdef::VK_QCOM_render_pass_transform[]
-and render pass transform
-endif::VK_QCOM_render_pass_transform[]
-used by rasterization.
-From this list of supported rates, the following steps are applied in order,
-to select a single value:
-
-  . Keep only rates where [eq]#C~x~' {leq} C~x~# and [eq]#C~y~' {leq} C~y~#.
-  ** Implementations may: also keep rates where [eq]#C~x~' {leq} C~y~# and
-     [eq]#C~y~' {leq} C~x~#.
-  . Keep only rates with the highest area ([eq]#C~x~' {times} C~y~'#).
-  . Keep only rates with the lowest aspect ratio ([eq]#C~x~' {plus} C~y~'#).
-  . In cases where a wide (e.g. 4x1) and tall (e.g. 1x4) rate remain, the
-    implementation may: choose either rate.
-    However, it must: choose this rate consistently for the same shading
-    rates,
-ifdef::VK_QCOM_render_pass_transform[]
-    render pass transform,
-endif::VK_QCOM_render_pass_transform[]
-    and combiner operations for the lifetime of the slink:VkDevice.
-endif::VK_KHR_fragment_shading_rate[]
-
-
-ifdef::VK_NV_fragment_shading_rate_enums[]
-=== Extended Fragment Shading Rates
-
-The features advertised by
-slink:VkPhysicalDeviceFragmentShadingRateEnumsFeaturesNV provide support for
-additional fragment shading rates beyond those specifying one fragment
-shader invocation covering all pixels in a fragment whose size is indicated
-by the fragment shading rate.
-
-[open,refpage='VkFragmentShadingRateNV',desc='Enumeration with fragment shading rates',type='enums']
---
-If the pname:fragmentShadingRateEnums feature is enabled, fragment shading
-rates may be specified using the elink:VkFragmentShadingRateNV enumerated
-type defined as:
-
-include::{generated}/api/enums/VkFragmentShadingRateNV.txt[]
-
-  * ename:VK_FRAGMENT_SHADING_RATE_1_INVOCATION_PER_PIXEL_NV specifies a
-    fragment size of 1x1 pixels.
-  * ename:VK_FRAGMENT_SHADING_RATE_1_INVOCATION_PER_1X2_PIXELS_NV specifies
-    a fragment size of 1x2 pixels.
-  * ename:VK_FRAGMENT_SHADING_RATE_1_INVOCATION_PER_2X1_PIXELS_NV specifies
-    a fragment size of 2x1 pixels.
-  * ename:VK_FRAGMENT_SHADING_RATE_1_INVOCATION_PER_2X2_PIXELS_NV specifies
-    a fragment size of 2x2 pixels.
-  * ename:VK_FRAGMENT_SHADING_RATE_1_INVOCATION_PER_2X4_PIXELS_NV specifies
-    a fragment size of 2x4 pixels.
-  * ename:VK_FRAGMENT_SHADING_RATE_1_INVOCATION_PER_4X2_PIXELS_NV specifies
-    a fragment size of 4x2 pixels.
-  * ename:VK_FRAGMENT_SHADING_RATE_1_INVOCATION_PER_4X4_PIXELS_NV specifies
-    a fragment size of 4x4 pixels.
-  * ename:VK_FRAGMENT_SHADING_RATE_2_INVOCATIONS_PER_PIXEL_NV specifies a
-    fragment size of 1x1 pixels, with two fragment shader invocations per
-    fragment.
-  * ename:VK_FRAGMENT_SHADING_RATE_4_INVOCATIONS_PER_PIXEL_NV specifies a
-    fragment size of 1x1 pixels, with four fragment shader invocations per
-    fragment.
-  * ename:VK_FRAGMENT_SHADING_RATE_8_INVOCATIONS_PER_PIXEL_NV specifies a
-    fragment size of 1x1 pixels, with eight fragment shader invocations per
-    fragment.
-  * ename:VK_FRAGMENT_SHADING_RATE_16_INVOCATIONS_PER_PIXEL_NV specifies a
-    fragment size of 1x1 pixels, with sixteen fragment shader invocations
-    per fragment.
-  * ename:VK_FRAGMENT_SHADING_RATE_NO_INVOCATIONS_NV specifies that any
-    portions of a primitive that use that shading rate should be discarded
-    without invoking any fragment shader.
-
-To use the shading rates
-ename:VK_FRAGMENT_SHADING_RATE_2_INVOCATIONS_PER_PIXEL_NV,
-ename:VK_FRAGMENT_SHADING_RATE_4_INVOCATIONS_PER_PIXEL_NV,
-ename:VK_FRAGMENT_SHADING_RATE_8_INVOCATIONS_PER_PIXEL_NV, and
-ename:VK_FRAGMENT_SHADING_RATE_16_INVOCATIONS_PER_PIXEL_NV as a pipeline,
-primitive, or attachment shading rate, the
-pname:supersampleFragmentShadingRates feature must: be enabled.
-To use the shading rate ename:VK_FRAGMENT_SHADING_RATE_NO_INVOCATIONS_NV as
-a pipeline, primitive, or attachment shading rate, the
-pname:noInvocationFragmentShadingRates feature must: be enabled.
---
-
-When using fragment shading rate enums, the pipeline fragment shading rate
-can: be set on a per-draw basis by either setting the rate in a graphics
-pipeline, or dynamically via flink:vkCmdSetFragmentShadingRateEnumNV.
-
-[open,refpage='VkPipelineFragmentShadingRateEnumStateCreateInfoNV',desc='Structure specifying parameters controlling the fragment shading rate using rate enums',type='structs']
---
-The sname:VkPipelineFragmentShadingRateEnumStateCreateInfoNV structure is
-defined as:
-
-include::{generated}/api/structs/VkPipelineFragmentShadingRateEnumStateCreateInfoNV.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:shadingRateType specifies a elink:VkFragmentShadingRateTypeNV
-    value indicating whether fragment shading rates are specified using
-    fragment sizes or elink:VkFragmentShadingRateNV enums.
-  * pname:shadingRate specifies a elink:VkFragmentShadingRateNV value
-    indicating the pipeline fragment shading rate.
-  * pname:combinerOps specifies elink:VkFragmentShadingRateCombinerOpKHR
-    values determining how the
-    <<primsrast-fragment-shading-rate-pipeline,pipeline>>,
-    <<primsrast-fragment-shading-rate-primitive,primitive>>, and
-    <<primsrast-fragment-shading-rate-attachment,attachment shading rates>>
-    are <<primsrast-fragment-shading-rate-combining,combined>> for fragments
-    generated by drawing commands using the created pipeline.
-
-If the pname:pNext chain of slink:VkGraphicsPipelineCreateInfo includes a
-sname:VkPipelineFragmentShadingRateEnumStateCreateInfoNV structure, then
-that structure includes parameters that control the pipeline fragment
-shading rate.
-
-If this structure is not present, pname:shadingRateType is considered to be
-equal to ename:VK_FRAGMENT_SHADING_RATE_TYPE_FRAGMENT_SIZE_NV,
-pname:shadingRate is considered to be equal to
-ename:VK_FRAGMENT_SHADING_RATE_1_INVOCATION_PER_PIXEL_NV, and both elements
-of pname:combinerOps are considered to be equal to
-ename:VK_FRAGMENT_SHADING_RATE_COMBINER_OP_KEEP_KHR.
-
-include::{generated}/validity/structs/VkPipelineFragmentShadingRateEnumStateCreateInfoNV.txt[]
---
-
-[open,refpage='VkFragmentShadingRateTypeNV',desc='Enumeration with fragment shading rate types',type='enums']
---
-The elink:VkFragmentShadingRateTypeNV enumerated type specifies whether a
-graphics pipeline gets its pipeline fragment shading rates and combiners
-from the slink:VkPipelineFragmentShadingRateEnumStateCreateInfoNV structure
-or the slink:VkPipelineFragmentShadingRateStateCreateInfoKHR structure.
-
-include::{generated}/api/enums/VkFragmentShadingRateTypeNV.txt[]
-
-  * ename:VK_FRAGMENT_SHADING_RATE_TYPE_FRAGMENT_SIZE_NV specifies that a
-    graphics pipeline should obtain its pipeline fragment shading rate and
-    shading rate combiner state from the
-    slink:VkPipelineFragmentShadingRateStateCreateInfoKHR structure and that
-    any state specified by the
-    slink:VkPipelineFragmentShadingRateEnumStateCreateInfoNV structure
-    should be ignored.
-  * ename:VK_FRAGMENT_SHADING_RATE_TYPE_ENUMS_NV specifies that a graphics
-    pipeline should obtain its pipeline fragment shading rate and shading
-    rate combiner state from the
-    slink:VkPipelineFragmentShadingRateEnumStateCreateInfoNV structure and
-    that any state specified by the
-    slink:VkPipelineFragmentShadingRateStateCreateInfoKHR structure should
-    be ignored.
---
-
-[open,refpage='vkCmdSetFragmentShadingRateEnumNV',desc='Set pipeline fragment shading rate dynamically for a command buffer using enums',type='protos']
---
-To <<pipelines-dynamic-state, dynamically set>> the pipeline fragment
-shading rate and combiner operation, call:
-
-include::{generated}/api/protos/vkCmdSetFragmentShadingRateEnumNV.txt[]
-
-  * pname:commandBuffer is the command buffer into which the command will be
-    recorded.
-  * pname:shadingRate specifies a elink:VkFragmentShadingRateNV enum
-    indicating the pipeline fragment shading rate for subsequent drawing
-    commands.
-  * pname:combinerOps specifies a elink:VkFragmentShadingRateCombinerOpKHR
-    determining how the
-    <<primsrast-fragment-shading-rate-pipeline,pipeline>>,
-    <<primsrast-fragment-shading-rate-primitive,primitive>>, and
-    <<primsrast-fragment-shading-rate-attachment,attachment shading rates>>
-    are <<primsrast-fragment-shading-rate-combining,combined>> for fragments
-    generated by subsequent drawing commands.
-
-This command sets the pipeline fragment shading rate and combiner operation
-for subsequent drawing commands when the graphics pipeline is created with
-ename:VK_DYNAMIC_STATE_FRAGMENT_SHADING_RATE_KHR set in
-slink:VkPipelineDynamicStateCreateInfo::pname:pDynamicStates.
-Otherwise, this state is specified by the
-slink:VkPipelineFragmentShadingRateEnumStateCreateInfoNV values used to
-create the currently active pipeline.
-
-[NOTE]
-.Note
-====
-This command allows specifying additional shading rates beyond those
-supported by flink:vkCmdSetFragmentShadingRateKHR.
-For more information, refer to the
-`apiext:VK_NV_fragment_shading_rate_enums` appendix.
-====
-
-.Valid Usage
-****
-  * [[VUID-vkCmdSetFragmentShadingRateEnumNV-pipelineFragmentShadingRate-04576]]
-    If <<features-pipelineFragmentShadingRate,
-    pname:pipelineFragmentShadingRate>> is not enabled, pname:shadingRate
-    must: be ename:VK_FRAGMENT_SHADING_RATE_1_INVOCATION_PER_PIXEL_NV
-  * [[VUID-vkCmdSetFragmentShadingRateEnumNV-supersampleFragmentShadingRates-04577]]
-    If <<features-supersampleFragmentShadingRates,
-    pname:supersampleFragmentShadingRates>> is not enabled,
-    pname:shadingRate must: not be
-    ename:VK_FRAGMENT_SHADING_RATE_2_INVOCATIONS_PER_PIXEL_NV,
-    ename:VK_FRAGMENT_SHADING_RATE_4_INVOCATIONS_PER_PIXEL_NV,
-    ename:VK_FRAGMENT_SHADING_RATE_8_INVOCATIONS_PER_PIXEL_NV, or
-    ename:VK_FRAGMENT_SHADING_RATE_16_INVOCATIONS_PER_PIXEL_NV
-  * [[VUID-vkCmdSetFragmentShadingRateEnumNV-noInvocationFragmentShadingRates-04578]]
-    If <<features-noInvocationFragmentShadingRates,
-    pname:noInvocationFragmentShadingRates>> is not enabled,
-    pname:shadingRate must: not be
-    ename:VK_FRAGMENT_SHADING_RATE_NO_INVOCATIONS_NV
-  * [[VUID-vkCmdSetFragmentShadingRateEnumNV-fragmentShadingRateEnums-04579]]
-    <<features-fragmentShadingRateEnums,pname:fragmentShadingRateEnums>>
-    must: be enabled
-  * [[VUID-vkCmdSetFragmentShadingRateEnumNV-pipelineFragmentShadingRate-04580]]
-    One of <<features-pipelineFragmentShadingRate,
-    pname:pipelineFragmentShadingRate>>,
-    <<features-primitiveFragmentShadingRate,
-    pname:primitiveFragmentShadingRate>>, or
-    <<features-attachmentFragmentShadingRate,
-    pname:attachmentFragmentShadingRate>> must: be enabled
-  * [[VUID-vkCmdSetFragmentShadingRateEnumNV-primitiveFragmentShadingRate-04581]]
-    If the <<features-primitiveFragmentShadingRate,
-    pname:primitiveFragmentShadingRate feature>> is not enabled,
-    pname:combinerOps[0] must: be
-    ename:VK_FRAGMENT_SHADING_RATE_COMBINER_OP_KEEP_KHR
-  * [[VUID-vkCmdSetFragmentShadingRateEnumNV-attachmentFragmentShadingRate-04582]]
-    If the <<features-attachmentFragmentShadingRate,
-    pname:attachmentFragmentShadingRate feature>> is not enabled,
-    pname:combinerOps[1] must: be
-    ename:VK_FRAGMENT_SHADING_RATE_COMBINER_OP_KEEP_KHR
-  * [[VUID-vkCmdSetFragmentShadingRateEnumNV-fragmentSizeNonTrivialCombinerOps-04583]]
-    If the <<limits-fragmentShadingRateNonTrivialCombinerOps,
-    pname:fragmentSizeNonTrivialCombinerOps>> limit is not supported,
-    elements of pname:combinerOps must: be either
-    ename:VK_FRAGMENT_SHADING_RATE_COMBINER_OP_KEEP_KHR or
-    ename:VK_FRAGMENT_SHADING_RATE_COMBINER_OP_REPLACE_KHR
-****
-
-include::{generated}/validity/protos/vkCmdSetFragmentShadingRateEnumNV.txt[]
---
-
-When the <<features-supersampleFragmentShadingRates,
-pname:supersampleFragmentShadingRates>> or
-<<features-noInvocationFragmentShadingRates,
-pname:noInvocationFragmentShadingRates>> features are enabled, the behavior
-of the <<primsrast-fragment-shading-rate-combining,shading rate combiner
-operations>> is extended to support the shading rates enabled by those
-features.
-Primitive and attachment shading rate values are interpreted as
-elink:VkFragmentShadingRateNV values and the behavior of the combiners is
-modified as follows:
-
-  * For ename:VK_FRAGMENT_SHADING_RATE_COMBINER_OP_MIN_KHR,
-    ename:VK_FRAGMENT_SHADING_RATE_COMBINER_OP_MAX_KHR, and
-    ename:VK_FRAGMENT_SHADING_RATE_COMBINER_OP_MUL_KHR, if either
-    [eq]#A~xy~# or [eq]#B~xy~# is
-    ename:VK_FRAGMENT_SHADING_RATE_NO_INVOCATIONS_NV,
-    [eq]#combine(A~xy~,B~xy~)# produces a shading rate of
-    ename:VK_FRAGMENT_SHADING_RATE_NO_INVOCATIONS_NV, regardless of the
-    other input shading rate.
-  * For ename:VK_FRAGMENT_SHADING_RATE_COMBINER_OP_MIN_KHR,
-    [eq]#combine(A~xy~,B~xy~)# produces a shading rate whose fragment size
-    is the smaller of the fragment sizes of [eq]#A~xy~# and [eq]#B~xy~# and
-    whose invocation count is the larger of the invocation counts of
-    [eq]#A~xy~# and [eq]#B~xy~#.
-  * For ename:VK_FRAGMENT_SHADING_RATE_COMBINER_OP_MAX_KHR,
-    [eq]#combine(A~xy~,B~xy~)# produces a shading rate whose fragment size
-    is the larger of the fragment sizes of [eq]#A~xy~# and [eq]#B~xy~# and
-    whose invocation count is the smaller of the invocation counts of
-    [eq]#A~xy~# and [eq]#B~xy~#.
-  * For ename:VK_FRAGMENT_SHADING_RATE_COMBINER_OP_MUL_KHR,
-    [eq]#combine(A~xy~,B~xy~)# produces a shading rate whose fragment size
-    and invocation count is the product of the fragment sizes and invocation
-    counts, respectively, of [eq]#A~xy~# and [eq]#B~xy~#.
-    If the resulting shading rate has both multiple pixels and multiple
-    invocations per fragment, an implementation may: adjust the shading rate
-    by reducing both the pixel and invocation counts.
-
-If the final shading rate from the combiners is
-ename:VK_FRAGMENT_SHADING_RATE_NO_INVOCATIONS_NV, no fragments will be
-generated for any portion of a primitive using that shading rate.
-
-If the final shading rate from the combiners specifies multiple fragment
-shader invocations per fragment, the fragment will be processed with
-multiple unique samples as in <<primsrast-sampleshading, sample shading>>,
-where the total number the total number of invocations is taken from the
-shading rate and then clamped to the value of code:totalSamples used by
-sample shading and to the value of
-<<limits-maxFragmentShadingRateInvocationCount,
-pname:maxFragmentShadingRateInvocationCount>>.
-
-endif::VK_NV_fragment_shading_rate_enums[]
-
-
-ifdef::VK_NV_shading_rate_image[]
-[[primsrast-shading-rate-image]]
-== Shading Rate Image
-
-The <<features-shadingRateImage, shading rate image>> feature allows
-pipelines to use a <<glossary-shading-rate-image,shading rate image>> to
-control the <<glossary-fragment-area, fragment area>> and the minimum number
-of fragment shader invocations launched for each fragment.
-When the shading rate image is enabled, the rasterizer determines a base
-<<glossary-shading-rate,shading rate>> for each region of the framebuffer
-covered by a primitive by fetching a value from the shading rate image and
-translating it to a shading rate using a per-viewport shading rate palette.
-This base shading rate is then adjusted to derive a final shading rate.
-The final shading rate specifies the fragment area and fragment shader
-invocation count to use for fragments generated in the region.
-
-[open,refpage='VkPipelineViewportShadingRateImageStateCreateInfoNV',desc='Structure specifying parameters controlling shading rate image usage',type='structs']
---
-If the pname:pNext chain of slink:VkPipelineViewportStateCreateInfo includes
-a sname:VkPipelineViewportShadingRateImageStateCreateInfoNV structure, then
-that structure includes parameters that control the shading rate.
-
-The sname:VkPipelineViewportShadingRateImageStateCreateInfoNV structure is
-defined as:
-
-include::{generated}/api/structs/VkPipelineViewportShadingRateImageStateCreateInfoNV.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:shadingRateImageEnable specifies whether shading rate image and
-    palettes are used during rasterization.
-  * pname:viewportCount specifies the number of per-viewport palettes used
-    to translate values stored in shading rate images.
-  * pname:pShadingRatePalettes is a pointer to an array of
-    slink:VkShadingRatePaletteNV structures defining the palette for each
-    viewport.
-    If the shading rate palette state is dynamic, this member is ignored.
-
-If this structure is not present, pname:shadingRateImageEnable is considered
-to be ename:VK_FALSE, and the shading rate image and palettes are not used.
-
-.Valid Usage
-****
-  * [[VUID-VkPipelineViewportShadingRateImageStateCreateInfoNV-viewportCount-02054]]
-    If the <<features-multiViewport,multiple viewports>> feature is not
-    enabled, pname:viewportCount must: be `0` or `1`
-  * [[VUID-VkPipelineViewportShadingRateImageStateCreateInfoNV-viewportCount-02055]]
-    pname:viewportCount must: be less than or equal to
-    sname:VkPhysicalDeviceLimits::pname:maxViewports
-  * [[VUID-VkPipelineViewportShadingRateImageStateCreateInfoNV-shadingRateImageEnable-02056]]
-    If pname:shadingRateImageEnable is ename:VK_TRUE, pname:viewportCount
-    must: be greater or equal to the pname:viewportCount member of
-    slink:VkPipelineViewportStateCreateInfo
-****
-include::{generated}/validity/structs/VkPipelineViewportShadingRateImageStateCreateInfoNV.txt[]
---
-
-[open,refpage='vkCmdBindShadingRateImageNV',desc='Bind a shading rate image on a command buffer',type='protos']
---
-When shading rate image usage is enabled in the bound pipeline, the pipeline
-uses a shading rate image specified by the command:
-
-include::{generated}/api/protos/vkCmdBindShadingRateImageNV.txt[]
-
-  * pname:commandBuffer is the command buffer into which the command will be
-    recorded.
-  * pname:imageView is an image view handle specifying the shading rate
-    image.
-    pname:imageView may: be set to dlink:VK_NULL_HANDLE, which is equivalent
-    to specifying a view of an image filled with zero values.
-  * pname:imageLayout is the layout that the image subresources accessible
-    from pname:imageView will be in when the shading rate image is accessed.
-
-.Valid Usage
-****
-  * [[VUID-vkCmdBindShadingRateImageNV-None-02058]]
-    The <<features-shadingRateImage,shading rate image>> feature must: be
-    enabled
-  * [[VUID-vkCmdBindShadingRateImageNV-imageView-02059]]
-    If pname:imageView is not dlink:VK_NULL_HANDLE, it must: be a valid
-    slink:VkImageView handle of type ename:VK_IMAGE_VIEW_TYPE_2D or
-    ename:VK_IMAGE_VIEW_TYPE_2D_ARRAY
-  * [[VUID-vkCmdBindShadingRateImageNV-imageView-02060]]
-    If pname:imageView is not dlink:VK_NULL_HANDLE, it must: have a format
-    of ename:VK_FORMAT_R8_UINT
-  * [[VUID-vkCmdBindShadingRateImageNV-imageView-02061]]
-    If pname:imageView is not dlink:VK_NULL_HANDLE, it must: have been
-    created with a pname:usage value including
-    ename:VK_IMAGE_USAGE_SHADING_RATE_IMAGE_BIT_NV
-  * [[VUID-vkCmdBindShadingRateImageNV-imageView-02062]]
-    If pname:imageView is not dlink:VK_NULL_HANDLE, pname:imageLayout must:
-    match the actual elink:VkImageLayout of each subresource accessible from
-    pname:imageView at the time the subresource is accessed
-  * [[VUID-vkCmdBindShadingRateImageNV-imageLayout-02063]]
-    If pname:imageView is not dlink:VK_NULL_HANDLE, pname:imageLayout must:
-    be ename:VK_IMAGE_LAYOUT_SHADING_RATE_OPTIMAL_NV or
-    ename:VK_IMAGE_LAYOUT_GENERAL
-****
-
-include::{generated}/validity/protos/vkCmdBindShadingRateImageNV.txt[]
---
-
-When the shading rate image is enabled in the current pipeline, rasterizing
-a primitive covering the pixel with coordinates (_x_,_y_) will fetch a
-shading rate index value from the shading rate image bound by
-fname:vkCmdBindShadingRateImageNV.
-If the shading rate image view has a type of ename:VK_IMAGE_VIEW_TYPE_2D,
-the lookup will use texel coordinates (_u_,_v_) where latexmath:[u =
-\left\lfloor \frac{x}{twidth} \right\rfloor], latexmath:[v = \left\lfloor
-\frac{y}{theight} \right\rfloor], and latexmath:[twidth] and
-latexmath:[theight] are the width and height of the implementation-dependent
-<<limits-shading-rate-texel-size, shading rate texel size>>.
-If the shading rate image view has a type of
-ename:VK_IMAGE_VIEW_TYPE_2D_ARRAY, the lookup will use texel coordinates
-(_u_,_v_) to extract a texel from the layer _l_, where _l_ is the layer of
-the framebuffer being rendered to.
-If _l_ is greater than or equal to the number of layers in the image view,
-layer zero will be used.
-
-If the bound shading rate image view is not dlink:VK_NULL_HANDLE and
-contains a texel with coordinates (_u_,_v_) in layer _l_ (if applicable),
-the single unsigned integer component for that texel will be used as the
-shading rate index.
-If the (_u_,_v_) coordinate is outside the extents of the subresource used
-by the shading rate image view, or if the image view is
-dlink:VK_NULL_HANDLE, the shading rate index is zero.
-If the shading rate image view has multiple mipmap levels, the base level
-identified by sname:VkImageSubresourceRange::pname:baseMipLevel will be
-used.
-
-A shading rate index is mapped to a base shading rate using a lookup table
-called the shading rate image palette.
-There is a separate palette for each viewport.
-The number of entries in each palette is given by the
-implementation-dependent <<limits-shading-rate-palette-size, shading rate
-image palette size>>.
-
-[open,refpage='vkCmdSetViewportShadingRatePaletteNV',desc='Set shading rate image palettes dynamically for a command buffer',type='protos']
---
-To <<pipelines-dynamic-state, dynamically set>> the per-viewport shading
-rate image palettes, call:
-
-include::{generated}/api/protos/vkCmdSetViewportShadingRatePaletteNV.txt[]
-
-  * pname:commandBuffer is the command buffer into which the command will be
-    recorded.
-  * pname:firstViewport is the index of the first viewport whose shading
-    rate palette is updated by the command.
-  * pname:viewportCount is the number of viewports whose shading rate
-    palettes are updated by the command.
-  * pname:pShadingRatePalettes is a pointer to an array of
-    slink:VkShadingRatePaletteNV structures defining the palette for each
-    viewport.
-
-This command sets the per-viewport shading rate image palettes for
-subsequent drawing commands when the graphics pipeline is created with
-ename:VK_DYNAMIC_STATE_VIEWPORT_SHADING_RATE_PALETTE_NV set in
-slink:VkPipelineDynamicStateCreateInfo::pname:pDynamicStates.
-Otherwise, this state is specified by the
-slink:VkPipelineViewportShadingRateImageStateCreateInfoNV::pname:pShadingRatePalettes
-values used to create the currently active pipeline.
-
-.Valid Usage
-****
-  * [[VUID-vkCmdSetViewportShadingRatePaletteNV-None-02064]]
-    The <<features-shadingRateImage,shading rate image>> feature must: be
-    enabled
-  * [[VUID-vkCmdSetViewportShadingRatePaletteNV-firstViewport-02067]]
-    The sum of pname:firstViewport and pname:viewportCount must: be between
-    `1` and sname:VkPhysicalDeviceLimits::pname:maxViewports, inclusive
-  * [[VUID-vkCmdSetViewportShadingRatePaletteNV-firstViewport-02068]]
-    If the <<features-multiViewport,multiple viewports>> feature is not
-    enabled, pname:firstViewport must: be `0`
-  * [[VUID-vkCmdSetViewportShadingRatePaletteNV-viewportCount-02069]]
-    If the <<features-multiViewport,multiple viewports>> feature is not
-    enabled, pname:viewportCount must: be `1`
-****
-
-include::{generated}/validity/protos/vkCmdSetViewportShadingRatePaletteNV.txt[]
---
-
-[open,refpage='VkShadingRatePaletteNV',desc='Structure specifying a single shading rate palette',type='structs']
---
-The sname:VkShadingRatePaletteNV structure specifies to contents of a single
-shading rate image palette and is defined as:
-
-include::{generated}/api/structs/VkShadingRatePaletteNV.txt[]
-
-  * pname:shadingRatePaletteEntryCount specifies the number of entries in
-    the shading rate image palette.
-  * pname:pShadingRatePaletteEntries is a pointer to an array of
-    elink:VkShadingRatePaletteEntryNV enums defining the shading rate for
-    each palette entry.
-
-.Valid Usage
-****
-  * [[VUID-VkShadingRatePaletteNV-shadingRatePaletteEntryCount-02071]]
-    pname:shadingRatePaletteEntryCount must: be between `1` and
-    sname:VkPhysicalDeviceShadingRateImagePropertiesNV::pname:shadingRatePaletteSize,
-    inclusive
-
-****
-include::{generated}/validity/structs/VkShadingRatePaletteNV.txt[]
---
-
-To determine the base shading rate image, a shading rate index _i_ is mapped
-to array element _i_ in the array pname:pShadingRatePaletteEntries for the
-palette corresponding to the viewport used for the fragment.
-If _i_ is greater than or equal to the palette size
-pname:shadingRatePaletteEntryCount, the base shading rate is undefined:.
-
-[open,refpage='VkShadingRatePaletteEntryNV',desc='Shading rate image palette entry types',type='enums']
---
-The supported shading rate image palette entries are defined by
-elink:VkShadingRatePaletteEntryNV:
-
-include::{generated}/api/enums/VkShadingRatePaletteEntryNV.txt[]
-
-The following table indicates the width and height (in pixels) of each
-fragment generated using the indicated shading rate, as well as the maximum
-number of fragment shader invocations launched for each fragment.
-When processing regions of a primitive that have a shading rate of
-ename:VK_SHADING_RATE_PALETTE_ENTRY_NO_INVOCATIONS_NV, no fragments will be
-generated in that region.
-
-[options="header"]
-|========
-| Shading Rate | Width | Height | Invocations
-| ename:VK_SHADING_RATE_PALETTE_ENTRY_NO_INVOCATIONS_NV                 | 0 | 0 | 0
-| ename:VK_SHADING_RATE_PALETTE_ENTRY_16_INVOCATIONS_PER_PIXEL_NV       | 1 | 1 | 16
-| ename:VK_SHADING_RATE_PALETTE_ENTRY_8_INVOCATIONS_PER_PIXEL_NV        | 1 | 1 | 8
-| ename:VK_SHADING_RATE_PALETTE_ENTRY_4_INVOCATIONS_PER_PIXEL_NV        | 1 | 1 | 4
-| ename:VK_SHADING_RATE_PALETTE_ENTRY_2_INVOCATIONS_PER_PIXEL_NV        | 1 | 1 | 2
-| ename:VK_SHADING_RATE_PALETTE_ENTRY_1_INVOCATION_PER_PIXEL_NV         | 1 | 1 | 1
-| ename:VK_SHADING_RATE_PALETTE_ENTRY_1_INVOCATION_PER_2X1_PIXELS_NV    | 2 | 1 | 1
-| ename:VK_SHADING_RATE_PALETTE_ENTRY_1_INVOCATION_PER_1X2_PIXELS_NV    | 1 | 2 | 1
-| ename:VK_SHADING_RATE_PALETTE_ENTRY_1_INVOCATION_PER_2X2_PIXELS_NV    | 2 | 2 | 1
-| ename:VK_SHADING_RATE_PALETTE_ENTRY_1_INVOCATION_PER_4X2_PIXELS_NV    | 4 | 2 | 1
-| ename:VK_SHADING_RATE_PALETTE_ENTRY_1_INVOCATION_PER_2X4_PIXELS_NV    | 2 | 4 | 1
-| ename:VK_SHADING_RATE_PALETTE_ENTRY_1_INVOCATION_PER_4X4_PIXELS_NV    | 4 | 4 | 1
-|========
---
-
-When the shading rate image is disabled, a shading rate of
-ename:VK_SHADING_RATE_PALETTE_ENTRY_1_INVOCATION_PER_PIXEL_NV will be used
-as the base shading rate.
-
-Once a base shading rate has been established, it is adjusted to produce a
-final shading rate.
-First, if the base shading rate uses multiple pixels for each fragment, the
-implementation may: reduce the fragment area to ensure that the total number
-of coverage samples for all pixels in a fragment does not exceed
-<<limits-shading-rate-max-coarse-samples, an implementation-dependent
-maximum>>.
-
-If <<primsrast-sampleshading, sample shading>> is active in the current
-pipeline and would result in processing _n_ (_n_ > 1) unique samples per
-fragment when the shading rate image is disabled, the shading rate is
-adjusted in an implementation-dependent manner to increase the number of
-fragment shader invocations spawned by the primitive.
-If the shading rate indicates _fs_ pixels per fragment and _fs_ is greater
-than _n_, the fragment area is adjusted so each fragment has approximately
-latexmath:[fs \over n] pixels.
-Otherwise, if the shading rate indicates _ipf_ invocations per fragment, the
-fragment area will be adjusted to a single pixel with approximately
-latexmath:[ipf \times n \over fs] invocations per fragment.
-
-If sample shading occurs due to the use of a fragment shader input variable
-decorated with code:SampleId or code:SamplePosition, the shading rate is
-ignored.
-Each fragment will have a single pixel and will spawn up to
-code:totalSamples fragment shader invocations, as when using
-<<primsrast-sampleshading, sample shading>> without a shading rate image.
-
-Finally, if the shading rate specifies multiple fragment shader invocations
-per fragment, the total number of invocations in the shading rate is clamped
-to be no larger than the value of code:totalSamples used for
-<<primsrast-sampleshading, sample shading>>.
-
-When the final shading rate for a primitive covering pixel (_x_,_y_) has a
-fragment area of latexmath:[fw \times fh], the fragment for that pixel will
-cover all pixels with coordinates (_x_',_y_') that satisfy the equations:
-
-[latexmath]
-+++++++++++++++++++
-\begin{aligned}
-\left\lfloor \frac{x}{fw} \right\rfloor = \left\lfloor \frac{x'}{fw} \right\rfloor
-\end{aligned}
-+++++++++++++++++++
-[latexmath]
-+++++++++++++++++++
-\begin{aligned}
-\left\lfloor \frac{y}{fh} \right\rfloor = \left\lfloor \frac{y'}{fh} \right\rfloor
-\end{aligned}
-+++++++++++++++++++
-
-This combined fragment is considered to have multiple coverage samples; the
-total number of samples in this fragment is given by latexmath:[samples = fw
-\times fh \times rs] where _rs_ indicates the value of
-sname:VkPipelineMultisampleStateCreateInfo::pname:rasterizationSamples
-specified at pipeline creation time.
-The set of coverage samples in the fragment is the union of the per-pixel
-coverage samples in each of the fragment's pixels The location and order of
-coverage samples within each pixel in the combined fragment are assigned as
-described in
-ifndef::VK_EXT_sample_locations[]
-<<primsrast-multisampling, Multisampling>>.
-endif::VK_EXT_sample_locations[]
-ifdef::VK_EXT_sample_locations[]
-<<primsrast-multisampling, Multisampling>> and <<primsrast-samplelocations,
-Custom Sample Locations>>.
-endif::VK_EXT_sample_locations[]
-Each coverage sample in the set of pixels belonging to the combined fragment
-is assigned a unique <<primsrast-multisampling-coverage-mask, coverage
-index>> in the range [0,_samples_-1].
-If the
-<<features-shadingRateCoarseSampleOrder,shadingRateCoarseSampleOrder>>
-feature is supported, the order of coverage samples can: be specified for
-each combination of fragment area and coverage sample count.
-If this feature is not supported, the sample order is
-implementation-dependent.
-
-[open,refpage='VkPipelineViewportCoarseSampleOrderStateCreateInfoNV',desc='Structure specifying parameters controlling sample order in coarse fragments',type='structs']
---
-If the pname:pNext chain of slink:VkPipelineViewportStateCreateInfo includes
-a sname:VkPipelineViewportCoarseSampleOrderStateCreateInfoNV structure, then
-that structure includes parameters that control the order of coverage
-samples in fragments larger than one pixel.
-
-The sname:VkPipelineViewportCoarseSampleOrderStateCreateInfoNV structure is
-defined as:
-
-include::{generated}/api/structs/VkPipelineViewportCoarseSampleOrderStateCreateInfoNV.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:sampleOrderType specifies the mechanism used to order coverage
-    samples in fragments larger than one pixel.
-  * pname:customSampleOrderCount specifies the number of custom sample
-    orderings to use when ordering coverage samples.
-  * pname:pCustomSampleOrders is a pointer to an array of
-    pname:customSampleOrderCount slink:VkCoarseSampleOrderCustomNV
-    structures, each of which specifies the coverage sample order for a
-    single combination of fragment area and coverage sample count.
-
-If this structure is not present, pname:sampleOrderType is considered to be
-ename:VK_COARSE_SAMPLE_ORDER_TYPE_DEFAULT_NV.
-
-If pname:sampleOrderType is ename:VK_COARSE_SAMPLE_ORDER_TYPE_CUSTOM_NV, the
-coverage sample order used for any combination of fragment area and coverage
-sample count not enumerated in pname:pCustomSampleOrders will be identical
-to that used for ename:VK_COARSE_SAMPLE_ORDER_TYPE_DEFAULT_NV.
-
-If the pipeline was created with
-ename:VK_DYNAMIC_STATE_VIEWPORT_COARSE_SAMPLE_ORDER_NV, the contents of this
-structure (if present) are ignored, and the coverage sample order is instead
-specified by flink:vkCmdSetCoarseSampleOrderNV.
-
-.Valid Usage
-****
-  * [[VUID-VkPipelineViewportCoarseSampleOrderStateCreateInfoNV-sampleOrderType-02072]]
-    If pname:sampleOrderType is not
-    ename:VK_COARSE_SAMPLE_ORDER_TYPE_CUSTOM_NV,
-    pname:customSamplerOrderCount must: be `0`
-  * [[VUID-VkPipelineViewportCoarseSampleOrderStateCreateInfoNV-pCustomSampleOrders-02234]]
-    The array pname:pCustomSampleOrders must: not contain two structures
-    with matching values for both the pname:shadingRate and
-    pname:sampleCount members
-****
-include::{generated}/validity/structs/VkPipelineViewportCoarseSampleOrderStateCreateInfoNV.txt[]
---
-
-[open,refpage='VkCoarseSampleOrderTypeNV',desc='Shading rate image sample ordering types',type='enums']
---
-The type elink:VkCoarseSampleOrderTypeNV specifies the technique used to
-order coverage samples in fragments larger than one pixel, and is defined
-as:
-
-include::{generated}/api/enums/VkCoarseSampleOrderTypeNV.txt[]
-
-  * ename:VK_COARSE_SAMPLE_ORDER_TYPE_DEFAULT_NV specifies that coverage
-    samples will be ordered in an implementation-dependent manner.
-  * ename:VK_COARSE_SAMPLE_ORDER_TYPE_CUSTOM_NV specifies that coverage
-    samples will be ordered according to the array of custom orderings
-    provided in either the pname:pCustomSampleOrders member of
-    sname:VkPipelineViewportCoarseSampleOrderStateCreateInfoNV or the
-    pname:pCustomSampleOrders member of flink:vkCmdSetCoarseSampleOrderNV.
-  * ename:VK_COARSE_SAMPLE_ORDER_TYPE_PIXEL_MAJOR_NV specifies that coverage
-    samples will be ordered sequentially, sorted first by pixel coordinate
-    (in row-major order) and then by
-    <<primsrast-multisampling-coverage-mask, sample index>>.
-  * ename:VK_COARSE_SAMPLE_ORDER_TYPE_SAMPLE_MAJOR_NV specifies that
-    coverage samples will be ordered sequentially, sorted first by
-    <<primsrast-multisampling-coverage-mask, sample index>> and then by
-    pixel coordinate (in row-major order).
-
---
-
-When using a coarse sample order of
-ename:VK_COARSE_SAMPLE_ORDER_TYPE_PIXEL_MAJOR_NV for a fragment with an
-upper-left corner of latexmath:[(fx,fy)] with a width of latexmath:[fw
-\times fh] and latexmath:[fsc] samples per pixel,
-<<primsrast-multisampling-coverage-mask, coverage index>> latexmath:[cs] of
-the fragment will be assigned to <<primsrast-multisampling-coverage-mask,
-sample index>> latexmath:[fs] of pixel latexmath:[(px,py)] as follows:
-
-[latexmath]
-+++++++++++++++++++
-\begin{aligned}
-px = & fx + (\left\lfloor {cs \over fsc} \right\rfloor \text{ \% } fw) \\
-py = & fy + \left\lfloor {cs \over {fsc \times fw}} \right\rfloor \\
-fs = & cs \text{ \% } fsc
-\end{aligned}
-+++++++++++++++++++
-
-When using a coarse sample order of
-ename:VK_COARSE_SAMPLE_ORDER_TYPE_SAMPLE_MAJOR_NV,
-<<primsrast-multisampling-coverage-mask, coverage index>> latexmath:[cs]
-will be assigned as follows:
-
-[latexmath]
-+++++++++++++++++++
-\begin{aligned}
-px = & fx + cs \text{ \% } fw \\
-py = & (fy + \left\lfloor {cs \over fw} \right\rfloor \text{ \% } fh) \\
-fs = & \left\lfloor {cs \over {fw \times fh}} \right\rfloor
-\end{aligned}
-+++++++++++++++++++
-
-[open,refpage='VkCoarseSampleOrderCustomNV',desc='Structure specifying parameters controlling shading rate image usage',type='structs']
---
-The sname:VkCoarseSampleOrderCustomNV structure is used with a coverage
-sample ordering type of ename:VK_COARSE_SAMPLE_ORDER_TYPE_CUSTOM_NV to
-specify the order of coverage samples for one combination of fragment width,
-fragment height, and coverage sample count.
-The structure is defined as:
-
-include::{generated}/api/structs/VkCoarseSampleOrderCustomNV.txt[]
-
-  * pname:shadingRate is a shading rate palette entry that identifies the
-    fragment width and height for the combination of fragment area and
-    per-pixel coverage sample count to control.
-  * pname:sampleCount identifies the per-pixel coverage sample count for the
-    combination of fragment area and coverage sample count to control.
-  * pname:sampleLocationCount specifies the number of sample locations in
-    the custom ordering.
-  * pname:pSampleLocations is a pointer to an array of
-    slink:VkCoarseSampleLocationNV structures specifying the location of
-    each sample in the custom ordering.
-
-When using a custom sample ordering, element _j_ in pname:pSampleLocations
-specifies a specific pixel location and
-<<primsrast-multisampling-coverage-mask, sample index>> that corresponds to
-<<primsrast-multisampling-coverage-mask, coverage index>> _j_ in the
-multi-pixel fragment.
-
-.Valid Usage
-****
-  * [[VUID-VkCoarseSampleOrderCustomNV-shadingRate-02073]]
-    pname:shadingRate must: be a shading rate that generates fragments with
-    more than one pixel
-  * [[VUID-VkCoarseSampleOrderCustomNV-sampleCount-02074]]
-    pname:sampleCount must: correspond to a sample count enumerated in
-    tlink:VkSampleCountFlags whose corresponding bit is set in
-    slink:VkPhysicalDeviceLimits::pname:framebufferNoAttachmentsSampleCounts
-  * [[VUID-VkCoarseSampleOrderCustomNV-sampleLocationCount-02075]]
-    pname:sampleLocationCount must: be equal to the product of
-    pname:sampleCount, the fragment width for pname:shadingRate, and the
-    fragment height for pname:shadingRate
-  * [[VUID-VkCoarseSampleOrderCustomNV-sampleLocationCount-02076]]
-    pname:sampleLocationCount must: be less than or equal to the value of
-    sname:VkPhysicalDeviceShadingRateImagePropertiesNV::pname:shadingRateMaxCoarseSamples
-  * [[VUID-VkCoarseSampleOrderCustomNV-pSampleLocations-02077]]
-    The array pname:pSampleLocations must: contain exactly one entry for
-    every combination of valid values for pname:pixelX, pname:pixelY, and
-    pname:sample in the structure slink:VkCoarseSampleOrderCustomNV
-****
-include::{generated}/validity/structs/VkCoarseSampleOrderCustomNV.txt[]
---
-
-[open,refpage='VkCoarseSampleLocationNV',desc='Structure specifying parameters controlling shading rate image usage',type='structs']
---
-The sname:VkCoarseSampleLocationNV structure identifies a specific pixel and
-<<primsrast-multisampling-coverage-mask, sample index>> for one of the
-coverage samples in a fragment that is larger than one pixel.
-This structure is defined as:
-
-include::{generated}/api/structs/VkCoarseSampleLocationNV.txt[]
-
-  * pname:pixelX is added to the x coordinate of the upper-leftmost pixel of
-    each fragment to identify the pixel containing the coverage sample.
-  * pname:pixelY is added to the y coordinate of the upper-leftmost pixel of
-    each fragment to identify the pixel containing the coverage sample.
-  * pname:sample is the number of the coverage sample in the pixel
-    identified by pname:pixelX and pname:pixelY.
-
-.Valid Usage
-****
-  * [[VUID-VkCoarseSampleLocationNV-pixelX-02078]]
-    pname:pixelX must: be less than the width (in pixels) of the fragment
-  * [[VUID-VkCoarseSampleLocationNV-pixelY-02079]]
-    pname:pixelY must: be less than the height (in pixels) of the fragment
-  * [[VUID-VkCoarseSampleLocationNV-sample-02080]]
-    pname:sample must: be less than the number of coverage samples in each
-    pixel belonging to the fragment
-****
-
-include::{generated}/validity/structs/VkCoarseSampleLocationNV.txt[]
---
-
-[open,refpage='vkCmdSetCoarseSampleOrderNV',desc='Set order of coverage samples for coarse fragments dynamically for a command buffer',type='protos']
---
-To <<pipelines-dynamic-state, dynamically set>> the order of coverage
-samples in fragments larger than one pixel, call:
-
-include::{generated}/api/protos/vkCmdSetCoarseSampleOrderNV.txt[]
-
-  * pname:commandBuffer is the command buffer into which the command will be
-    recorded.
-  * pname:sampleOrderType specifies the mechanism used to order coverage
-    samples in fragments larger than one pixel.
-  * pname:customSampleOrderCount specifies the number of custom sample
-    orderings to use when ordering coverage samples.
-  * pname:pCustomSampleOrders is a pointer to an array of
-    slink:VkCoarseSampleOrderCustomNV structures, each of which specifies
-    the coverage sample order for a single combination of fragment area and
-    coverage sample count.
-
-If pname:sampleOrderType is ename:VK_COARSE_SAMPLE_ORDER_TYPE_CUSTOM_NV, the
-coverage sample order used for any combination of fragment area and coverage
-sample count not enumerated in pname:pCustomSampleOrders will be identical
-to that used for ename:VK_COARSE_SAMPLE_ORDER_TYPE_DEFAULT_NV.
-
-This command sets the order of coverage samples for subsequent drawing
-commands when the graphics pipeline is created with
-ename:VK_DYNAMIC_STATE_VIEWPORT_COARSE_SAMPLE_ORDER_NV set in
-slink:VkPipelineDynamicStateCreateInfo::pname:pDynamicStates.
-Otherwise, this state is specified by the
-slink:VkPipelineViewportCoarseSampleOrderStateCreateInfoNV values used to
-create the currently active pipeline.
-
-.Valid Usage
-****
-  * [[VUID-vkCmdSetCoarseSampleOrderNV-sampleOrderType-02081]]
-    If pname:sampleOrderType is not
-    ename:VK_COARSE_SAMPLE_ORDER_TYPE_CUSTOM_NV,
-    pname:customSamplerOrderCount must: be `0`
-  * [[VUID-vkCmdSetCoarseSampleOrderNV-pCustomSampleOrders-02235]]
-    The array pname:pCustomSampleOrders must: not contain two structures
-    with matching values for both the pname:shadingRate and
-    pname:sampleCount members
-****
-
-include::{generated}/validity/protos/vkCmdSetCoarseSampleOrderNV.txt[]
---
-
-If the final shading rate for a primitive covering pixel (_x_,_y_) results
-in _n_ invocations per pixel (_n_ > 1), _n_ separate fragment shader
-invocations will be generated for the fragment.
-Each coverage sample in the fragment will be assigned to one of the _n_
-fragment shader invocations in an implementation-dependent manner.
-The outputs from the <<interfaces-fragmentoutput, fragment output
-interface>> of each shader invocation will be broadcast to all of the
-framebuffer samples associated with the invocation.
-If none of the coverage samples associated with a fragment shader invocation
-is covered by a primitive, the implementation may: discard the fragment
-shader invocation for those samples.
-
-If the final shading rate for a primitive covering pixel (_x_,_y_) results
-in a fragment containing multiple pixels, a single set of fragment shader
-invocations will be generated for all pixels in the combined fragment.
-Outputs from the <<interfaces-fragmentoutput, fragment output interface>>
-will be broadcast to all covered framebuffer samples belonging to the
-fragment.
-If the fragment shader executes code discarding the fragment, none of the
-samples of the fragment will be updated.
-
-endif::VK_NV_shading_rate_image[]
-
-
-[[primsrast-sampleshading]]
-== Sample Shading
-
-Sample shading can: be used to specify a minimum number of unique samples to
-process for each fragment.
-If sample shading is enabled an implementation must: provide a minimum of
-[eq]#max({lceil} pname:minSampleShadingFactor {times} pname:totalSamples
-{rceil}, 1)# unique associated data for each fragment, where
-pname:minSampleShadingFactor is the minimum fraction of sample shading.
-ifdef::VK_AMD_mixed_attachment_samples[]
-If the `apiext:VK_AMD_mixed_attachment_samples` extension is enabled and the
-subpass uses color attachments, pname:totalSamples is the number of samples
-of the color attachments.
-Otherwise,
-endif::VK_AMD_mixed_attachment_samples[]
-pname:totalSamples is the value of
-slink:VkPipelineMultisampleStateCreateInfo::pname:rasterizationSamples
-specified at pipeline creation time.
-These are associated with the samples in an implementation-dependent manner.
-When pname:minSampleShadingFactor is `1.0`, a separate set of associated
-data are evaluated for each sample, and each set of values is evaluated at
-the sample location.
-
-Sample shading is enabled for a graphics pipeline:
-
-  * If the interface of the fragment shader entry point of the graphics
-    pipeline includes an input variable decorated with code:SampleId or
-    code:SamplePosition.
-    In this case pname:minSampleShadingFactor takes the value `1.0`.
-  * Else if the pname:sampleShadingEnable member of the
-    slink:VkPipelineMultisampleStateCreateInfo structure specified when
-    creating the graphics pipeline is set to ename:VK_TRUE.
-    In this case pname:minSampleShadingFactor takes the value of
-    slink:VkPipelineMultisampleStateCreateInfo::pname:minSampleShading.
-
-Otherwise, sample shading is considered disabled.
-
-
-ifdef::VK_NV_fragment_shader_barycentric[]
-[[primsrast-barycentric]]
-== Barycentric Interpolation
-
-When the pname:fragmentShaderBarycentric feature is enabled, the
-code:PerVertexNV <<shaders-interpolation-decorations, interpolation
-decoration>> can: be used with fragment shader inputs to indicate that the
-decorated inputs do not have associated data in the fragment.
-Such inputs can: only be accessed in a fragment shader using an array index
-whose value (0, 1, or 2) identifies one of the vertices of the primitive
-that produced the fragment.
-
-ifndef::VK_NV_mesh_shader[]
-When <<tessellation, tessellation>> and <<geometry, geometry shading>>
-endif::VK_NV_mesh_shader[]
-ifdef::VK_NV_mesh_shader[]
-When <<tessellation, tessellation>>, <<geometry, geometry shading>>, and
-<<mesh,mesh shading>>
-endif::VK_NV_mesh_shader[]
-are not active, fragment shader inputs decorated with code:PerVertexNV will
-take values from one of the vertices of the primitive that produced the
-fragment, identified by the extra index provided in SPIR-V code accessing
-the input.
-If the _n_ vertices passed to a draw call are numbered 0 through _n_-1, and
-the point, line, and triangle primitives produced by the draw call are
-numbered with consecutive integers beginning with zero, the following table
-indicates the original vertex numbers used
-ifdef::VK_EXT_provoking_vertex[]
-when the <<vertexpostproc-flatshading,provoking vertex mode>> is
-ename:VK_PROVOKING_VERTEX_MODE_FIRST_VERTEX_EXT
-endif::VK_EXT_provoking_vertex[]
-for index values of 0, 1, and 2.
-If an input decorated with code:PerVertexNV is accessed with any other
-vertex index value, an undefined: value is returned.
-
-[[primsrast-barycentric-order-table]]
-[options="header"]
-|======
-| Primitive Topology                                               | Vertex 0    | Vertex 1    | Vertex 2
-| ename:VK_PRIMITIVE_TOPOLOGY_POINT_LIST                           | i           | -           | -
-| ename:VK_PRIMITIVE_TOPOLOGY_LINE_LIST                            | 2i          | 2i+1        | -
-| ename:VK_PRIMITIVE_TOPOLOGY_LINE_STRIP                           | i           | i+1         | -
-| ename:VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST                        | 3i          | 3i+1        | 3i+2
-| ename:VK_PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP (even)                | i           | i+1         | i+2
-| ename:VK_PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP (odd)                 | i           | i+2         | i+1
-| ename:VK_PRIMITIVE_TOPOLOGY_TRIANGLE_FAN                         | i+1         | i+2         | 0
-| ename:VK_PRIMITIVE_TOPOLOGY_LINE_LIST_WITH_ADJACENCY             | 4i+1        | 4i+2        | -
-| ename:VK_PRIMITIVE_TOPOLOGY_LINE_STRIP_WITH_ADJACENCY            | i+1         | i+2         | -
-| ename:VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST_WITH_ADJACENCY         | 6i          | 6i+2        | 6i+4
-| ename:VK_PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP_WITH_ADJACENCY (even) | 2i          | 2i+2        | 2i+4
-| ename:VK_PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP_WITH_ADJACENCY (odd)  | 2i          | 2i+4        | 2i+2
-|======
-
-ifdef::VK_EXT_provoking_vertex[]
-When the provoking vertex mode is
-ename:VK_PROVOKING_VERTEX_MODE_LAST_VERTEX_EXT, the original vertex numbers
-used are the same as above except as indicated in the table below.
-
-[[primsrast-barycentric-order-table-last-vertex]]
-[options="header"]
-|======
-| Primitive Topology                                               | Vertex 0    | Vertex 1    | Vertex 2
-| ename:VK_PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP (odd)                 | i+1         | i           | i+2
-| ename:VK_PRIMITIVE_TOPOLOGY_TRIANGLE_FAN                         | 0           | i+1         | i+2
-| ename:VK_PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP_WITH_ADJACENCY (odd)  | 2i+2        | 2i          | 2i+4
-|======
-endif::VK_EXT_provoking_vertex[]
-
-When geometry
-ifdef::VK_NV_mesh_shader[]
-or mesh
-endif::VK_NV_mesh_shader[]
-shading is active, primitives processed by fragment shaders are assembled
-from the vertices emitted by the geometry
-ifdef::VK_NV_mesh_shader[]
-or mesh
-endif::VK_NV_mesh_shader[]
-shader.
-In this case, the vertices used for fragment shader inputs decorated with
-code:PerVertexNV are derived by treating the primitives produced by the
-shader as though they were specified by a draw call and consulting
-<<primsrast-barycentric-order-table, the table above>>.
-
-When using tessellation without geometry shading, the tessellator produces
-primitives in an implementation-dependent manner.
-While there is no defined vertex ordering for inputs decorated with
-code:PerVertexNV, the vertex ordering used in this case will be consistent
-with the ordering used to derive the values of inputs decorated with
-code:BaryCoordNV or code:BaryCoordNoPerspNV.
-
-Fragment shader inputs decorated with code:BaryCoordNV or
-code:BaryCoordNoPerspNV hold three-component vectors with barycentric
-weights that indicate the location of the fragment relative to the
-screen-space locations of vertices of its primitive.
-For point primitives, such variables are always assigned the value (1,0,0).
-For <<primsrast-lines-basic, line>> primitives, the built-ins are obtained
-by interpolating an attribute whose values for the vertices numbered 0 and 1
-are (1,0,0) and (0,1,0), respectively.
-For <<primsrast-polygons-basic, polygon>> primitives, the built-ins are
-obtained by interpolating an attribute whose values for the vertices
-numbered 0, 1, and 2 are (1,0,0), (0,1,0), and (0,0,1), respectively.
-For code:BaryCoordNV, the values are obtained using perspective
-interpolation.
-For code:BaryCoordNoPerspNV, the values are obtained using linear
-interpolation.
-
-endif::VK_NV_fragment_shader_barycentric[]
-
-
-[[primsrast-points]]
-== Points
-
-A point is drawn by generating a set of fragments in the shape of a square
-centered around the vertex of the point.
-Each vertex has an associated point size that controls the width/height of
-that square.
-The point size is taken from the (potentially clipped) shader built-in
-code:PointSize written by:
-
-  * the geometry shader, if active;
-  * the tessellation evaluation shader, if active and no geometry shader is
-    active;
-  * the vertex shader, otherwise
-
-and clamped to the implementation-dependent point size range
-[eq]#[pname:pointSizeRange[0],pname:pointSizeRange[1]]#.
-The value written to code:PointSize must: be greater than zero.
-
-Not all point sizes need be supported, but the size 1.0 must: be supported.
-The range of supported sizes and the size of evenly-spaced gradations within
-that range are implementation-dependent.
-The range and gradations are obtained from the pname:pointSizeRange and
-pname:pointSizeGranularity members of slink:VkPhysicalDeviceLimits.
-If, for instance, the size range is from 0.1 to 2.0 and the gradation size
-is 0.1, then the sizes 0.1, 0.2, ..., 1.9, 2.0 are supported.
-Additional point sizes may: also be supported.
-There is no requirement that these sizes be equally spaced.
-If an unsupported size is requested, the nearest supported size is used
-instead.
-
-ifdef::VK_EXT_fragment_density_map[]
-Further, if the render pass has a fragment density map attachment, point
-size may: be rounded by the implementation to a multiple of the fragment's
-width or height.
-endif::VK_EXT_fragment_density_map[]
-
-
-[[primsrast-points-basic]]
-=== Basic Point Rasterization
-
-Point rasterization produces a fragment for each fragment area group of
-framebuffer pixels with one or more sample points that intersect a region
-centered at the point's [eq]#(x~f~,y~f~)#.
-This region is a square with side equal to the current point size.
-Coverage bits that correspond to sample points that intersect the region are
-1, other coverage bits are 0.
-All fragments produced in rasterizing a point are assigned the same
-associated data, which are those of the vertex corresponding to the point.
-However, the fragment shader built-in code:PointCoord contains point sprite
-texture coordinates.
-The [eq]#s# and [eq]#t# point sprite texture coordinates vary from zero to
-one across the point horizontally left-to-right and vertically
-top-to-bottom, respectively.
-The following formulas are used to evaluate [eq]#s# and [eq]#t#:
-
-[latexmath]
-++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-s = {1 \over 2} + { \left( x_p - x_f \right) \over \text{size} }
-++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-[latexmath]
-++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-t = {1 \over 2} + { \left( y_p - y_f \right) \over \text{size} }
-++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-where size is the point's size; [eq]#(x~p~,y~p~)# is the location at which
-the point sprite coordinates are evaluated - this may: be the framebuffer
-coordinates of the fragment center, or the location of a sample; and
-[eq]#(x~f~,y~f~)# is the exact, unrounded framebuffer coordinate of the
-vertex for the point.
-
-
-[[primsrast-lines]]
-== Line Segments
-
-ifdef::VK_EXT_line_rasterization[]
-[open,refpage='VkPipelineRasterizationLineStateCreateInfoEXT',desc='Structure specifying parameters of a newly created pipeline line rasterization state',type='structs']
---
-Line segment rasterization options are controlled by the
-slink:VkPipelineRasterizationLineStateCreateInfoEXT structure.
-
-The sname:VkPipelineRasterizationLineStateCreateInfoEXT structure is defined
-as:
-
-include::{generated}/api/structs/VkPipelineRasterizationLineStateCreateInfoEXT.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:lineRasterizationMode is a elink:VkLineRasterizationModeEXT value
-    selecting the style of line rasterization.
-  * pname:stippledLineEnable enables <<primsrast-lines-stipple, stippled
-    line rasterization>>.
-  * pname:lineStippleFactor is the repeat factor used in stippled line
-    rasterization.
-  * pname:lineStipplePattern is the bit pattern used in stippled line
-    rasterization.
-
-If pname:stippledLineEnable is ename:VK_FALSE, the values of
-pname:lineStippleFactor and pname:lineStipplePattern are ignored.
-
-.Valid Usage
-****
-  * [[VUID-VkPipelineRasterizationLineStateCreateInfoEXT-lineRasterizationMode-02768]]
-    If pname:lineRasterizationMode is
-    ename:VK_LINE_RASTERIZATION_MODE_RECTANGULAR_EXT, then the
-    <<features-rectangularLines,rectangularLines>> feature must: be enabled
-  * [[VUID-VkPipelineRasterizationLineStateCreateInfoEXT-lineRasterizationMode-02769]]
-    If pname:lineRasterizationMode is
-    ename:VK_LINE_RASTERIZATION_MODE_BRESENHAM_EXT, then the
-    <<features-bresenhamLines,bresenhamLines>> feature must: be enabled
-  * [[VUID-VkPipelineRasterizationLineStateCreateInfoEXT-lineRasterizationMode-02770]]
-    If pname:lineRasterizationMode is
-    ename:VK_LINE_RASTERIZATION_MODE_RECTANGULAR_SMOOTH_EXT, then the
-    <<features-bresenhamLines,smoothLines>> feature must: be enabled
-  * [[VUID-VkPipelineRasterizationLineStateCreateInfoEXT-stippledLineEnable-02771]]
-    If pname:stippledLineEnable is ename:VK_TRUE and
-    pname:lineRasterizationMode is
-    ename:VK_LINE_RASTERIZATION_MODE_RECTANGULAR_EXT, then the
-    <<features-stippledRectangularLines,stippledRectangularLines>> feature
-    must: be enabled
-  * [[VUID-VkPipelineRasterizationLineStateCreateInfoEXT-stippledLineEnable-02772]]
-    If pname:stippledLineEnable is ename:VK_TRUE and
-    pname:lineRasterizationMode is
-    ename:VK_LINE_RASTERIZATION_MODE_BRESENHAM_EXT, then the
-    <<features-stippledBresenhamLines,stippledBresenhamLines>> feature must:
-    be enabled
-  * [[VUID-VkPipelineRasterizationLineStateCreateInfoEXT-stippledLineEnable-02773]]
-    If pname:stippledLineEnable is ename:VK_TRUE and
-    pname:lineRasterizationMode is
-    ename:VK_LINE_RASTERIZATION_MODE_RECTANGULAR_SMOOTH_EXT, then the
-    <<features-stippledSmoothLines,stippledSmoothLines>> feature must: be
-    enabled
-  * [[VUID-VkPipelineRasterizationLineStateCreateInfoEXT-stippledLineEnable-02774]]
-    If pname:stippledLineEnable is ename:VK_TRUE and
-    pname:lineRasterizationMode is
-    ename:VK_LINE_RASTERIZATION_MODE_DEFAULT_EXT, then the
-    <<features-stippledRectangularLines,stippledRectangularLines>> feature
-    must: be enabled and slink:VkPhysicalDeviceLimits::pname:strictLines
-    must: be ename:VK_TRUE
-****
-
-include::{generated}/validity/structs/VkPipelineRasterizationLineStateCreateInfoEXT.txt[]
---
-
-[open,refpage='VkLineRasterizationModeEXT',desc='Line rasterization modes',type='enums']
---
-Possible values of
-slink:VkPipelineRasterizationLineStateCreateInfoEXT::pname:lineRasterizationMode
-are:
-
-include::{generated}/api/enums/VkLineRasterizationModeEXT.txt[]
-
-  * ename:VK_LINE_RASTERIZATION_MODE_DEFAULT_EXT is equivalent to
-    ename:VK_LINE_RASTERIZATION_MODE_RECTANGULAR_EXT if
-    slink:VkPhysicalDeviceLimits::pname:strictLines is ename:VK_TRUE,
-    otherwise lines are drawn as non-pname:strictLines parallelograms.
-    Both of these modes are defined in <<primsrast-lines-basic,Basic Line
-    Segment Rasterization>>.
-  * ename:VK_LINE_RASTERIZATION_MODE_RECTANGULAR_EXT specifies lines drawn
-    as if they were rectangles extruded from the line
-  * ename:VK_LINE_RASTERIZATION_MODE_BRESENHAM_EXT specifies lines drawn by
-    determining which pixel diamonds the line intersects and exits, as
-    defined in <<primsrast-lines-bresenham,Bresenham Line Segment
-    Rasterization>>.
-  * ename:VK_LINE_RASTERIZATION_MODE_RECTANGULAR_SMOOTH_EXT specifies lines
-    drawn if they were rectangles extruded from the line, with alpha
-    falloff, as defined in <<primsrast-lines-smooth,Smooth Lines>>.
---
-endif::VK_EXT_line_rasterization[]
-
-[open,refpage='vkCmdSetLineWidth',desc='Set line width dynamically for a command buffer',type='protos']
---
-To <<pipelines-dynamic-state, dynamically set>> the line width, call:
-
-include::{generated}/api/protos/vkCmdSetLineWidth.txt[]
-
-  * pname:commandBuffer is the command buffer into which the command will be
-    recorded.
-  * pname:lineWidth is the width of rasterized line segments.
-
-This command sets the line width for subsequent drawing commands when the
-graphics pipeline is created with ename:VK_DYNAMIC_STATE_LINE_WIDTH set in
-slink:VkPipelineDynamicStateCreateInfo::pname:pDynamicStates.
-Otherwise, this state is specified by the
-slink:VkPipelineRasterizationStateCreateInfo::pname:lineWidth value used to
-create the currently active pipeline.
-
-.Valid Usage
-****
-  * [[VUID-vkCmdSetLineWidth-lineWidth-00788]]
-    If the <<features-wideLines,wide lines>> feature is not enabled,
-    pname:lineWidth must: be `1.0`
-****
-
-include::{generated}/validity/protos/vkCmdSetLineWidth.txt[]
---
-
-Not all line widths need be supported for line segment rasterization, but
-width 1.0 antialiased segments must: be provided.
-The range and gradations are obtained from the pname:lineWidthRange and
-pname:lineWidthGranularity members of slink:VkPhysicalDeviceLimits.
-If, for instance, the size range is from 0.1 to 2.0 and the gradation size
-is 0.1, then the sizes 0.1, 0.2, ..., 1.9, 2.0 are supported.
-Additional line widths may: also be supported.
-There is no requirement that these widths be equally spaced.
-If an unsupported width is requested, the nearest supported width is used
-instead.
-
-ifdef::VK_EXT_fragment_density_map[]
-Further, if the render pass has a fragment density map attachment, line
-width may: be rounded by the implementation to a multiple of the fragment's
-width or height.
-endif::VK_EXT_fragment_density_map[]
-
-
-[[primsrast-lines-basic]]
-=== Basic Line Segment Rasterization
-
-ifdef::VK_EXT_line_rasterization[]
-If the pname:lineRasterizationMode member of
-slink:VkPipelineRasterizationLineStateCreateInfoEXT is
-ename:VK_LINE_RASTERIZATION_MODE_RECTANGULAR_EXT, rasterized
-endif::VK_EXT_line_rasterization[]
-ifndef::VK_EXT_line_rasterization[]
-Rasterized
-endif::VK_EXT_line_rasterization[]
-line segments produce fragments which intersect a rectangle centered on the
-line segment.
-Two of the edges are parallel to the specified line segment; each is at a
-distance of one-half the current width from that segment in directions
-perpendicular to the direction of the line.
-The other two edges pass through the line endpoints and are perpendicular to
-the direction of the specified line segment.
-Coverage bits that correspond to sample points that intersect the rectangle
-are 1, other coverage bits are 0.
-
-Next we specify how the data associated with each rasterized fragment are
-obtained.
-Let [eq]#**p**~r~ = (x~d~, y~d~)# be the framebuffer coordinates at which
-associated data are evaluated.
-This may: be the center of a fragment or the location of a sample within the
-fragment.
-When pname:rasterizationSamples is ename:VK_SAMPLE_COUNT_1_BIT, the fragment
-center must: be used.
-Let [eq]#**p**~a~ = (x~a~, y~a~)# and [eq]#**p**~b~ = (x~b~,y~b~)# be
-initial and final endpoints of the line segment, respectively.
-Set
-
-// Equation {linet:eq}
-[latexmath]
-++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-t = {{( \mathbf{p}_r - \mathbf{p}_a ) \cdot ( \mathbf{p}_b - \mathbf{p}_a )}
-    \over {\| \mathbf{p}_b - \mathbf{p}_a \|^2 }}
-++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-(Note that [eq]#t = 0# at [eq]#**p**~a~# and [eq]#t = 1# at [eq]#**p**~b~#.
-Also note that this calculation projects the vector from [eq]#**p**~a~# to
-[eq]#**p**~r~# onto the line, and thus computes the normalized distance of
-the fragment along the line.)
-
-[[line_perspective_interpolation]]
-The value of an associated datum [eq]#f# for the fragment, whether it be a
-shader output or the clip [eq]#w# coordinate, must: be determined using
-_perspective interpolation_:
-
-[latexmath]
-++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-f = {{ (1-t) {f_a / w_a} + t { f_b / w_b} } \over
-    {(1-t) / w_a + t / w_b }}
-++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-where [eq]#f~a~# and [eq]#f~b~# are the data associated with the starting
-and ending endpoints of the segment, respectively; [eq]#w~a~# and [eq]#w~b~#
-are the clip [eq]#w# coordinates of the starting and ending endpoints of the
-segment, respectively.
-
-[[line_linear_interpolation]]
-Depth values for lines must: be determined using _linear interpolation_:
-
-  {empty}:: [eq]#z = (1 - t) z~a~ {plus} t z~b~#
-
-where [eq]#z~a~# and [eq]#z~b~# are the depth values of the starting and
-ending endpoints of the segment, respectively.
-
-The code:NoPerspective and code:Flat
-<<shaders-interpolation-decorations,interpolation decorations>> can: be used
-with fragment shader inputs to declare how they are interpolated.
-When neither decoration is applied, <<line_perspective_interpolation,
-perspective interpolation>> is performed as described above.
-When the code:NoPerspective decoration is used, <<line_linear_interpolation,
-linear interpolation>> is performed in the same fashion as for depth values,
-as described above.
-When the code:Flat decoration is used, no interpolation is performed, and
-outputs are taken from the corresponding input value of the
-<<vertexpostproc-flatshading,provoking vertex>> corresponding to that
-primitive.
-
-ifdef::VK_NV_fragment_shader_barycentric[]
-When the pname:fragmentShaderBarycentric feature is enabled, the
-code:PerVertexNV <<shaders-interpolation-decorations, interpolation
-decoration>> can: also be used with fragment shader inputs which indicate
-that the decorated inputs are not interpolated and can: only be accessed
-using an extra array dimension, where the extra index identifies one of the
-vertices of the primitive that produced the fragment.
-endif::VK_NV_fragment_shader_barycentric[]
-
-The above description documents the preferred method of line rasterization,
-and must: be used when the implementation advertises the pname:strictLines
-limit in slink:VkPhysicalDeviceLimits as ename:VK_TRUE.
-
-When pname:strictLines is ename:VK_FALSE, the edges of the lines are
-generated as a parallelogram surrounding the original line.
-The major axis is chosen by noting the axis in which there is the greatest
-distance between the line start and end points.
-If the difference is equal in both directions then the X axis is chosen as
-the major axis.
-Edges 2 and 3 are aligned to the minor axis and are centered on the
-endpoints of the line as in <<fig-non-strict-lines>>, and each is
-pname:lineWidth long.
-Edges 0 and 1 are parallel to the line and connect the endpoints of edges 2
-and 3.
-Coverage bits that correspond to sample points that intersect the
-parallelogram are 1, other coverage bits are 0.
-
-Samples that fall exactly on the edge of the parallelogram follow the
-polygon rasterization rules.
-
-Interpolation occurs as if the parallelogram was decomposed into two
-triangles where each pair of vertices at each end of the line has identical
-attributes.
-
-[[fig-non-strict-lines]]
-image::{images}/non_strict_lines.svg[align="center",title="Non strict lines",opts="{imageopts}"]
-
-Only when pname:strictLines is ename:VK_FALSE implementations may: deviate
-from the non-strict line algorithm described above in the following ways:
-
-  * Implementations may: instead interpolate each fragment according to the
-    formula in <<primsrast-lines-basic, Basic Line Segment Rasterization>>
-    using the original line segment endpoints.
-
-  * Rasterization of non-antialiased non-strict line segments may: be
-    performed using the rules defined in
-    <<primsrast-lines-bresenham,Bresenham Line Segment Rasterization>>.
-
-
-[[primsrast-lines-bresenham]]
-=== Bresenham Line Segment Rasterization
-
-ifdef::VK_EXT_line_rasterization[]
-If pname:lineRasterizationMode is
-ename:VK_LINE_RASTERIZATION_MODE_BRESENHAM_EXT, then the following rules
-replace the line rasterization rules defined in <<primsrast-lines-basic,
-Basic Line Segment Rasterization>>.
-endif::VK_EXT_line_rasterization[]
-
-Non-strict lines may: also follow these rasterization rules for
-non-antialiased lines.
-
-Line segment rasterization begins by characterizing the segment as either
-_x-major_ or _y-major_.
-x-major line segments have slope in the closed interval [eq]#[-1,1]#; all
-other line segments are y-major (slope is determined by the segment's
-endpoints).
-We specify rasterization only for x-major segments except in cases where the
-modifications for y-major segments are not self-evident.
-
-Ideally, Vulkan uses a _diamond-exit_ rule to determine those fragments that
-are produced by rasterizing a line segment.
-For each fragment [eq]#f# with center at framebuffer coordinates [eq]#x~f~#
-and [eq]#y~f~#, define a diamond-shaped region that is the intersection of
-four half planes:
-
-[latexmath]
-+++++++++++++++++++
-    R_f = \{ (x,y) \mid | x - x_f | + | y - y_f | < \frac{1}{2} \}
-+++++++++++++++++++
-
-Essentially, a line segment starting at [eq]#p~a~# and ending at [eq]#p~b~#
-produces those fragments [eq]#f# for which the segment intersects
-[eq]#R~f~#, except if [eq]#p~b~# is contained in [eq]#R~f~#.
-
-image::{images}/bresenham.svg[title="Visualization of Bresenham's algorithm",align="center",opts="{imageopts}"]
-
-To avoid difficulties when an endpoint lies on a boundary of [eq]#R~f~# we
-(in principle) perturb the supplied endpoints by a tiny amount.
-Let [eq]#p~a~# and [eq]#p~b~# have framebuffer coordinates [eq]#(x~a~,
-y~a~)# and [eq]#(x~b~, y~b~)#, respectively.
-Obtain the perturbed endpoints [eq]#p~a~'# given by [eq]#(x~a~, y~a~) -
-({epsilon}, {epsilon}^2^)# and [eq]#p~b~'# given by [eq]#(x~b~, y~b~) -
-({epsilon}, {epsilon}^2^)#.
-Rasterizing the line segment starting at [eq]#p~a~# and ending at [eq]#p~b~#
-produces those fragments [eq]#f# for which the segment starting at
-[eq]#p~a~'# and ending on [eq]#p~b~'# intersects [eq]#R~f~#, except if
-[eq]#p~b~'# is contained in [eq]#R~f~#.
-[eq]#{epsilon}# is chosen to be so small that rasterizing the line segment
-produces the same fragments when [eq]#{delta}# is substituted for
-[eq]#{epsilon}# for any [eq]#0 < {delta} {leq} {epsilon}#.
-
-When [eq]#p~a~# and [eq]#p~b~# lie on fragment centers, this
-characterization of fragments reduces to Bresenham's algorithm with one
-modification: lines produced in this description are "half-open," meaning
-that the final fragment (corresponding to [eq]#p~b~#) is not drawn.
-This means that when rasterizing a series of connected line segments, shared
-endpoints will be produced only once rather than twice (as would occur with
-Bresenham's algorithm).
-
-Implementations may: use other line segment rasterization algorithms,
-subject to the following rules:
-
-  * The coordinates of a fragment produced by the algorithm must: not
-    deviate by more than one unit in either x or y framebuffer coordinates
-    from a corresponding fragment produced by the diamond-exit rule.
-  * The total number of fragments produced by the algorithm must: not differ
-    from that produced by the diamond-exit rule by no more than one.
-  * For an x-major line, two fragments that lie in the same
-    framebuffer-coordinate column must: not be produced (for a y-major line,
-    two fragments that lie in the same framebuffer-coordinate row must: not
-    be produced).
-  * If two line segments share a common endpoint, and both segments are
-    either x-major (both left-to-right or both right-to-left) or y-major
-    (both bottom-to-top or both top-to-bottom), then rasterizing both
-    segments must: not produce duplicate fragments.
-    Fragments also must: not be omitted so as to interrupt continuity of the
-    connected segments.
-
-The actual width [eq]#w# of Bresenham lines is determined by rounding the
-line width to the nearest integer, clamping it to the
-implementation-dependent pname:lineWidthRange (with both values rounded to
-the nearest integer), then clamping it to be no less than 1.
-
-Bresenham line segments of width other than one are rasterized by offsetting
-them in the minor direction (for an x-major line, the minor direction is y,
-and for a y-major line, the minor direction is x) and producing a row or
-column of fragments in the minor direction.
-If the line segment has endpoints given by [eq]#(x~0~, y~0~)# and
-[eq]#(x~1~, y~1~)# in framebuffer coordinates, the segment with endpoints
-latexmath:[(x_0, y_0 - \frac{w-1}{2})] and latexmath:[(x_1, y_1 -
-\frac{w-1}{2})] is rasterized, but instead of a single fragment, a column of
-fragments of height w (a row of fragments of length w for a y-major segment)
-is produced at each x (y for y-major) location.
-The lowest fragment of this column is the fragment that would be produced by
-rasterizing the segment of width 1 with the modified coordinates.
-
-The preferred method of attribute interpolation for a wide line is to
-generate the same attribute values for all fragments in the row or column
-described above, as if the adjusted line was used for interpolation and
-those values replicated to the other fragments, except for code:FragCoord
-which is interpolated as usual.
-Implementations may: instead interpolate each fragment according to the
-formula in <<primsrast-lines-basic,Basic Line Segment Rasterization>>, using
-the original line segment endpoints.
-
-When Bresenham lines are being rasterized, sample locations may: all be
-treated as being at the pixel center (this may: affect attribute and depth
-interpolation).
-
-[NOTE]
-.Note
-====
-The sample locations described above are *not* used for determining
-coverage, they are only used for things like attribute interpolation.
-The rasterization rules that determine coverage are defined in terms of
-whether the line intersects *pixels*, as opposed to the point sampling rules
-used for other primitive types.
-So these rules are independent of the sample locations.
-One consequence of this is that Bresenham lines cover the same pixels
-regardless of the number of rasterization samples, and cover all samples in
-those pixels (unless masked out or killed).
-====
-
-
-ifdef::VK_EXT_line_rasterization[]
-[[primsrast-lines-stipple]]
-=== Line Stipple
-
-If the pname:stippledLineEnable member of
-slink:VkPipelineRasterizationLineStateCreateInfoEXT is ename:VK_TRUE, then
-lines are rasterized with a _line stipple_ determined by
-pname:lineStippleFactor and pname:lineStipplePattern.
-pname:lineStipplePattern is an unsigned 16-bit integer that determines which
-fragments are to be drawn or discarded when the line is rasterized.
-pname:lineStippleFactor is a count that is used to modify the effective line
-stipple by causing each bit in pname:lineStipplePattern to be used
-pname:lineStippleFactor times.
-
-Line stippling discards certain fragments that are produced by
-rasterization.
-The masking is achieved using three parameters: the 16-bit line stipple
-pattern _p_, the line stipple factor _r_, and an integer stipple counter
-_s_.
-Let
-
-[latexmath]
-+++++++++++++++++++
-b  = \left\lfloor \frac{s}{r} \right\rfloor \bmod 16
-+++++++++++++++++++
-
-Then a fragment is produced if the _b_'th bit of _p_ is 1, and discarded
-otherwise.
-The bits of _p_ are numbered with 0 being the least significant and 15 being
-the most significant.
-
-The initial value of _s_ is zero.
-For ename:VK_LINE_RASTERIZATION_MODE_BRESENHAM_EXT lines, _s_ is incremented
-after production of each fragment of a line segment (fragments are produced
-in order, beginning at the starting point and working towards the ending
-point).
-For ename:VK_LINE_RASTERIZATION_MODE_RECTANGULAR_EXT and
-ename:VK_LINE_RASTERIZATION_MODE_RECTANGULAR_SMOOTH_EXT lines, the
-rectangular region is subdivided into adjacent unit-length rectangles, and s
-is incremented once for each rectangle.
-Rectangles with a value of _s_ such that the _b_'th bit of _p_ is zero are
-discarded.
-If the last rectangle in a line segment is shorter than unit-length, then
-the remainder may: carry over to the next line segment in the line strip
-using the same value of _s_ (this is the preferred behavior, for the stipple
-pattern to appear more consistent through the strip).
-
-_s_ is reset to 0 at the start of each strip (for line strips), and before
-every line segment in a group of independent segments.
-
-If the line segment has been clipped, then the value of _s_ at the beginning
-of the line segment is implementation-dependent.
-
-[open,refpage='vkCmdSetLineStippleEXT',desc='Set line stipple dynamically for a command buffer',type='protos']
---
-To <<pipelines-dynamic-state, dynamically set>> the line stipple state,
-call:
-
-include::{generated}/api/protos/vkCmdSetLineStippleEXT.txt[]
-
-  * pname:commandBuffer is the command buffer into which the command will be
-    recorded.
-  * pname:lineStippleFactor is the repeat factor used in stippled line
-    rasterization.
-  * pname:lineStipplePattern is the bit pattern used in stippled line
-    rasterization.
-
-This command sets the line stipple state for subsequent drawing commands
-when the graphics pipeline is created with
-ename:VK_DYNAMIC_STATE_LINE_STIPPLE_EXT set in
-slink:VkPipelineDynamicStateCreateInfo::pname:pDynamicStates.
-Otherwise, this state is specified by the
-slink:VkPipelineRasterizationLineStateCreateInfoEXT::pname:lineStippleFactor
-and
-slink:VkPipelineRasterizationLineStateCreateInfoEXT::pname:lineStipplePattern
-values used to create the currently active pipeline.
-
-.Valid Usage
-****
-  * [[VUID-vkCmdSetLineStippleEXT-lineStippleFactor-02776]]
-    pname:lineStippleFactor must: be in the range [eq]#[1,256]#
-****
-
-include::{generated}/validity/protos/vkCmdSetLineStippleEXT.txt[]
---
-
-
-[[primsrast-lines-smooth]]
-=== Smooth Lines
-
-If the pname:lineRasterizationMode member of
-slink:VkPipelineRasterizationLineStateCreateInfoEXT is
-ename:VK_LINE_RASTERIZATION_MODE_RECTANGULAR_SMOOTH_EXT, then lines are
-considered to be rectangles using the same geometry as for
-ename:VK_LINE_RASTERIZATION_MODE_RECTANGULAR_EXT lines.
-The rules for determining which pixels are covered are
-implementation-dependent, and may: include nearby pixels where no sample
-locations are covered or where the rectangle does not intersect the pixel at
-all.
-For each pixel that is considered covered, the fragment computes a coverage
-value that approximates the area of the intersection of the rectangle with
-the pixel square, and this coverage value is multiplied into the color
-location 0's alpha value after fragment shading, as described in
-<<fragops-covg,Multisample Coverage>>.
-
-[NOTE]
-.Note
-====
-The details of the rasterization rules and area calculation are left
-intentionally vague, to allow implementations to generate coverage and
-values that are aesthetically pleasing.
-====
-endif::VK_EXT_line_rasterization[]
-
-
-[[primsrast-polygons]]
-== Polygons
-
-A polygon results from the decomposition of a triangle strip, triangle fan
-or a series of independent triangles.
-Like points and line segments, polygon rasterization is controlled by
-several variables in the slink:VkPipelineRasterizationStateCreateInfo
-structure.
-
-
-[[primsrast-polygons-basic]]
-=== Basic Polygon Rasterization
-
-[open,refpage='VkFrontFace',desc='Interpret polygon front-facing orientation',type='enums']
---
-The first step of polygon rasterization is to determine whether the triangle
-is _back-facing_ or _front-facing_.
-This determination is made based on the sign of the (clipped or unclipped)
-polygon's area computed in framebuffer coordinates.
-One way to compute this area is:
-
-[latexmath]
-++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-a = -{1 \over 2}\sum_{i=0}^{n-1}
-      x_f^i y_f^{i \oplus 1} -
-      x_f^{i \oplus 1} y_f^i
-++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-where latexmath:[x_f^i] and latexmath:[y_f^i] are the [eq]#x# and [eq]#y#
-framebuffer coordinates of the [eq]##i##th vertex of the [eq]#n#-vertex
-polygon (vertices are numbered starting at zero for the purposes of this
-computation) and [eq]#i {oplus} 1# is [eq]#(i {plus} 1) mod n#.
-
-The interpretation of the sign of [eq]#a# is determined by the
-slink:VkPipelineRasterizationStateCreateInfo::pname:frontFace property of
-the currently active pipeline.
-Possible values are:
-
-include::{generated}/api/enums/VkFrontFace.txt[]
-
-  * ename:VK_FRONT_FACE_COUNTER_CLOCKWISE specifies that a triangle with
-    positive area is considered front-facing.
-  * ename:VK_FRONT_FACE_CLOCKWISE specifies that a triangle with negative
-    area is considered front-facing.
-
-Any triangle which is not front-facing is back-facing, including zero-area
-triangles.
---
-
-ifdef::VK_EXT_extended_dynamic_state[]
-[open,refpage='vkCmdSetFrontFaceEXT',desc='Set front face orientation dynamically for a command buffer',type='protos']
---
-To <<pipelines-dynamic-state, dynamically set>> the front face orientation,
-call:
-
-include::{generated}/api/protos/vkCmdSetFrontFaceEXT.txt[]
-
-  * pname:commandBuffer is the command buffer into which the command will be
-    recorded.
-  * pname:frontFace is a elink:VkFrontFace value specifying the front-facing
-    triangle orientation to be used for culling.
-
-This command sets the front face orientation for subsequent drawing commands
-when the graphics pipeline is created with
-ename:VK_DYNAMIC_STATE_FRONT_FACE_EXT set in
-slink:VkPipelineDynamicStateCreateInfo::pname:pDynamicStates.
-Otherwise, this state is specified by the
-slink:VkPipelineRasterizationStateCreateInfo::pname:frontFace value used to
-create the currently active pipeline.
-
-.Valid Usage
-****
-  * [[VUID-vkCmdSetFrontFaceEXT-None-03383]]
-    The <<features-extendedDynamicState, extendedDynamicState>> feature
-    must: be enabled
-****
-
-include::{generated}/validity/protos/vkCmdSetFrontFaceEXT.txt[]
---
-endif::VK_EXT_extended_dynamic_state[]
-
-
-[open,refpage='VkCullModeFlagBits',desc='Bitmask controlling triangle culling',type='enums']
---
-Once the orientation of triangles is determined, they are culled according
-to the slink:VkPipelineRasterizationStateCreateInfo::pname:cullMode property
-of the currently active pipeline.
-Possible values are:
-
-include::{generated}/api/enums/VkCullModeFlagBits.txt[]
-
-  * ename:VK_CULL_MODE_NONE specifies that no triangles are discarded
-  * ename:VK_CULL_MODE_FRONT_BIT specifies that front-facing triangles are
-    discarded
-  * ename:VK_CULL_MODE_BACK_BIT specifies that back-facing triangles are
-    discarded
-  * ename:VK_CULL_MODE_FRONT_AND_BACK specifies that all triangles are
-    discarded.
-
-Following culling, fragments are produced for any triangles which have not
-been discarded.
---
-
-[open,refpage='VkCullModeFlags',desc='Bitmask of VkCullModeFlagBits',type='flags']
---
-include::{generated}/api/flags/VkCullModeFlags.txt[]
-
-tname:VkCullModeFlags is a bitmask type for setting a mask of zero or more
-elink:VkCullModeFlagBits.
---
-
-ifdef::VK_EXT_extended_dynamic_state[]
-[open,refpage='vkCmdSetCullModeEXT',desc='Set cull mode dynamically for a command buffer',type='protos']
---
-To <<pipelines-dynamic-state, dynamically set>> the cull mode, call:
-
-include::{generated}/api/protos/vkCmdSetCullModeEXT.txt[]
-
-  * pname:commandBuffer is the command buffer into which the command will be
-    recorded.
-  * pname:cullMode specifies the cull mode property to use for drawing.
-
-This command sets the cull mode for subsequent drawing commands when the
-graphics pipeline is created with ename:VK_DYNAMIC_STATE_CULL_MODE_EXT set
-in slink:VkPipelineDynamicStateCreateInfo::pname:pDynamicStates.
-Otherwise, this state is specified by the
-slink:VkPipelineRasterizationStateCreateInfo::pname:cullMode value used to
-create the currently active pipeline.
-
-.Valid Usage
-****
-  * [[VUID-vkCmdSetCullModeEXT-None-03384]]
-    The <<features-extendedDynamicState, extendedDynamicState>> feature
-    must: be enabled
-****
-
-include::{generated}/validity/protos/vkCmdSetCullModeEXT.txt[]
---
-endif::VK_EXT_extended_dynamic_state[]
-
-The rule for determining which fragments are produced by polygon
-rasterization is called _point sampling_.
-The two-dimensional projection obtained by taking the x and y framebuffer
-coordinates of the polygon's vertices is formed.
-Fragments are produced for any fragment area groups of pixels for which any
-sample points lie inside of this polygon.
-Coverage bits that correspond to sample points that satisfy the point
-sampling criteria are 1, other coverage bits are 0.
-Special treatment is given to a sample whose sample location lies on a
-polygon edge.
-In such a case, if two polygons lie on either side of a common edge (with
-identical endpoints) on which a sample point lies, then exactly one of the
-polygons must: result in a covered sample for that fragment during
-rasterization.
-As for the data associated with each fragment produced by rasterizing a
-polygon, we begin by specifying how these values are produced for fragments
-in a triangle.
-
-[[primsrast-polygon-barycentrics]]
-_Barycentric coordinates_ are a set of three numbers, [eq]#a#, [eq]#b#, and
-[eq]#c#, each in the range [eq]#[0,1]#, with [eq]#a {plus} b {plus} c = 1#.
-These coordinates uniquely specify any point [eq]#p# within the triangle or
-on the triangle's boundary as
-
-  {empty}:: [eq]#p = a p~a~ {plus} b p~b~ {plus} c p~c~#
-
-where [eq]#p~a~#, [eq]#p~b~#, and [eq]#p~c~# are the vertices of the
-triangle.
-[eq]#a#, [eq]#b#, and [eq]#c# are determined by:
-
-[latexmath]
-++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-a = {{\mathrm{A}(p p_b p_c)} \over {\mathrm{A}(p_a p_b p_c)}}, \quad
-b = {{\mathrm{A}(p p_a p_c)} \over {\mathrm{A}(p_a p_b p_c)}}, \quad
-c = {{\mathrm{A}(p p_a p_b)} \over {\mathrm{A}(p_a p_b p_c)}},
-++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-where [eq]#A(lmn)# denotes the area in framebuffer coordinates of the
-triangle with vertices [eq]#l#, [eq]#m#, and [eq]#n#.
-
-Denote an associated datum at [eq]#p~a~#, [eq]#p~b~#, or [eq]#p~c~# as
-[eq]#f~a~#, [eq]#f~b~#, or [eq]#f~c~#, respectively.
-
-[[triangle_perspective_interpolation]]
-The value of an associated datum [eq]#f# for a fragment produced by
-rasterizing a triangle, whether it be a shader output or the clip [eq]#w#
-coordinate, must: be determined using perspective interpolation:
-
-[latexmath]
-++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-f = { a {f_a / w_a} + b {f_b / w_b} + c {f_c / w_c} } \over
-    { {a / w_a} + {b / w_b} + {c / w_c} }
-++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-where [eq]#w~a~#, [eq]#w~b~#, and [eq]#w~c~# are the clip [eq]#w#
-coordinates of [eq]#p~a~#, [eq]#p~b~#, and [eq]#p~c~#, respectively.
-[eq]#a#, [eq]#b#, and [eq]#c# are the barycentric coordinates of the
-location at which the data are produced - this must: be the location of the
-fragment center or the location of a sample.
-When pname:rasterizationSamples is ename:VK_SAMPLE_COUNT_1_BIT, the fragment
-center must: be used.
-
-[[triangle_linear_interpolation]]
-Depth values for triangles must: be determined using linear interpolation:
-
-  {empty}:: [eq]#z = a z~a~ {plus} b z~b~ {plus} c z~c~#
-
-where [eq]#z~a~#, [eq]#z~b~#, and [eq]#z~c~# are the depth values of
-[eq]#p~a~#, [eq]#p~b~#, and [eq]#p~c~#, respectively.
-
-The code:NoPerspective and code:Flat
-<<shaders-interpolation-decorations,interpolation decorations>> can: be used
-with fragment shader inputs to declare how they are interpolated.
-When neither decoration is applied, <<triangle_perspective_interpolation,
-perspective interpolation>> is performed as described above.
-When the code:NoPerspective decoration is used,
-<<triangle_linear_interpolation, linear interpolation>> is performed in the
-same fashion as for depth values, as described above.
-When the code:Flat decoration is used, no interpolation is performed, and
-outputs are taken from the corresponding input value of the
-<<vertexpostproc-flatshading,provoking vertex>> corresponding to that
-primitive.
-
-ifdef::VK_AMD_shader_explicit_vertex_parameter[]
-When the `apiext:VK_AMD_shader_explicit_vertex_parameter` device extension
-is enabled the code:CustomInterpAMD <<shaders-interpolation-decorations,
-interpolation decoration>> can: also be used with fragment shader inputs
-which indicate that the decorated inputs can: only be accessed by the
-extended instruction code:InterpolateAtVertexAMD and allows accessing the
-value of the inputs for individual vertices of the primitive.
-endif::VK_AMD_shader_explicit_vertex_parameter[]
-
-ifdef::VK_NV_fragment_shader_barycentric[]
-When the pname:fragmentShaderBarycentric feature is enabled, the
-code:PerVertexNV <<shaders-interpolation-decorations, interpolation
-decoration>> can: also be used with fragment shader inputs which indicate
-that the decorated inputs are not interpolated and can: only be accessed
-using an extra array dimension, where the extra index identifies one of the
-vertices of the primitive that produced the fragment.
-endif::VK_NV_fragment_shader_barycentric[]
-
-For a polygon with more than three edges, such as are produced by clipping a
-triangle, a convex combination of the values of the datum at the polygon's
-vertices must: be used to obtain the value assigned to each fragment
-produced by the rasterization algorithm.
-That is, it must: be the case that at every fragment
-
-[latexmath]
-++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-f = \sum_{i=1}^{n} a_i f_i
-++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-where [eq]#n# is the number of vertices in the polygon and [eq]#f~i~# is the
-value of [eq]#f# at vertex [eq]#i#.
-For each [eq]#i#, [eq]#0 {leq} a~i~ {leq} 1# and
-latexmath:[\sum_{i=1}^{n}a_i = 1].
-The values of [eq]#a~i~# may: differ from fragment to fragment, but at
-vertex [eq]#i#, [eq]#a~i~ = 1# and [eq]#a~j~ = 0# for [eq]#j {neq} i#.
-
-[NOTE]
-.Note
-====
-One algorithm that achieves the required behavior is to triangulate a
-polygon (without adding any vertices) and then treat each triangle
-individually as already discussed.
-A scan-line rasterizer that linearly interpolates data along each edge and
-then linearly interpolates data across each horizontal span from edge to
-edge also satisfies the restrictions (in this case the numerator and
-denominator of <<triangle_perspective_interpolation, perspective
-interpolation>> are iterated independently, and a division is performed for
-each fragment).
-====
-
-
-[[primsrast-polygonmode]]
-=== Polygon Mode
-
-[open,refpage='VkPolygonMode',desc='Control polygon rasterization mode',type='enums']
---
-Possible values of the
-slink:VkPipelineRasterizationStateCreateInfo::pname:polygonMode property of
-the currently active pipeline, specifying the method of rasterization for
-polygons, are:
-
-include::{generated}/api/enums/VkPolygonMode.txt[]
-
-  * ename:VK_POLYGON_MODE_POINT specifies that polygon vertices are drawn as
-    points.
-  * ename:VK_POLYGON_MODE_LINE specifies that polygon edges are drawn as
-    line segments.
-  * ename:VK_POLYGON_MODE_FILL specifies that polygons are rendered using
-    the polygon rasterization rules in this section.
-ifdef::VK_NV_fill_rectangle[]
-  * ename:VK_POLYGON_MODE_FILL_RECTANGLE_NV specifies that polygons are
-    rendered using polygon rasterization rules, modified to consider a
-    sample within the primitive if the sample location is inside the
-    axis-aligned bounding box of the triangle after projection.
-    Note that the barycentric weights used in attribute interpolation can:
-    extend outside the range [eq]#[0,1]# when these primitives are shaded.
-    Special treatment is given to a sample position on the boundary edge of
-    the bounding box.
-    In such a case, if two rectangles lie on either side of a common edge
-    (with identical endpoints) on which a sample position lies, then exactly
-    one of the triangles must: produce a fragment that covers that sample
-    during rasterization.
-+
-Polygons rendered in ename:VK_POLYGON_MODE_FILL_RECTANGLE_NV mode may: be
-clipped by the frustum or by user clip planes.
-If clipping is applied, the triangle is culled rather than clipped.
-+
-Area calculation and facingness are determined for
-ename:VK_POLYGON_MODE_FILL_RECTANGLE_NV mode using the triangle's vertices.
-endif::VK_NV_fill_rectangle[]
-
-These modes affect only the final rasterization of polygons: in particular,
-a polygon's vertices are shaded and the polygon is clipped and possibly
-culled before these modes are applied.
---
-
-
-[[primsrast-depthbias]]
-=== Depth Bias
-
-The depth values of all fragments generated by the rasterization of a
-polygon can: be biased (offset) by a single depth bias value latexmath:[o]
-that is computed for that polygon.
-
-
-[[primsrast-depthbias-enable]]
-==== Depth Bias Enable
-
-The depth bias computation is enabled by the
-ifdef::VK_EXT_extended_dynamic_state2[]
-pname:depthBiasEnable set with flink:vkCmdSetDepthBiasEnableEXT, or the
-corresponding
-endif::VK_EXT_extended_dynamic_state2[]
-slink:VkPipelineRasterizationStateCreateInfo::pname:depthBiasEnable value
-used to create the currently active pipeline.
-If the depth bias enable is ename:VK_FALSE, no bias is applied and the
-fragment's depth values are unchanged.
-
-ifdef::VK_EXT_extended_dynamic_state2[]
-[open,refpage='vkCmdSetDepthBiasEnableEXT',desc='Control whether to bias fragment depth values dynamically for a command buffer',type='protos']
---
-To <<pipelines-dynamic-state, dynamically enable>> whether to bias fragment
-depth values, call:
-
-include::{generated}/api/protos/vkCmdSetDepthBiasEnableEXT.txt[]
-
-  * pname:commandBuffer is the command buffer into which the command will be
-    recorded.
-  * pname:depthBiasEnable controls whether to bias fragment depth values.
-
-This command sets the depth bias enable for subsequent drawing commands when
-the graphics pipeline is created with
-ename:VK_DYNAMIC_STATE_DEPTH_BIAS_ENABLE_EXT set in
-slink:VkPipelineDynamicStateCreateInfo::pname:pDynamicStates.
-Otherwise, this state is specified by the
-slink:VkPipelineRasterizationStateCreateInfo::pname:depthBiasEnable value
-used to create the currently active pipeline.
-
-.Valid Usage
-****
-  * [[VUID-vkCmdSetDepthBiasEnableEXT-None-04872]]
-    The <<features-extendedDynamicState2, extendedDynamicState2>> feature
-    must: be enabled
-****
-
-include::{generated}/validity/protos/vkCmdSetDepthBiasEnableEXT.txt[]
---
-endif::VK_EXT_extended_dynamic_state2[]
-
-
-[[primsrast-depthbias-computation]]
-==== Depth Bias Computation
-
-The depth bias depends on three parameters:
-
-  * pname:depthBiasSlopeFactor scales the maximum depth slope [eq]#m# of the
-    polygon
-  * pname:depthBiasConstantFactor scales the minimum resolvable difference
-    [eq]#r# of the depth buffer
-  * the scaled terms are summed to produce a value which is then clamped to
-    a minimum or maximum value specified by pname:depthBiasClamp
-
-pname:depthBiasSlopeFactor, pname:depthBiasConstantFactor, and
-pname:depthBiasClamp can: each be positive, negative, or zero.
-These parameters are set as described for flink:vkCmdSetDepthBias below.
-
-The maximum depth slope [eq]#m# of a triangle is
-
-[latexmath]
-++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-m = \sqrt{ \left({{\partial z_f} \over {\partial x_f}}\right)^2
-        +  \left({{\partial z_f} \over {\partial y_f}}\right)^2}
-++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-where [eq]#(x~f~, y~f~, z~f~)# is a point on the triangle.
-[eq]#m# may: be approximated as
-
-[latexmath]
-++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-m = \max\left( \left| { {\partial z_f} \over {\partial x_f} } \right|,
-               \left| { {\partial z_f} \over {\partial y_f} } \right|
-       \right).
-++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-The minimum resolvable difference [eq]#r# is a parameter that depends on the
-depth buffer representation.
-It is the smallest difference in framebuffer coordinate [eq]#z# values that
-is guaranteed to remain distinct throughout polygon rasterization and in the
-depth buffer.
-All pairs of fragments generated by the rasterization of two polygons with
-otherwise identical vertices, but [eq]#pname:z~f~# values that differ by
-[eq]#r#, will have distinct depth values.
-
-For fixed-point depth buffer representations, [eq]#r# is constant throughout
-the range of the entire depth buffer.
-Its value is implementation-dependent but must: be at most
-
-  {empty}:: [eq]#r = 2 {times} 2^-n^#
-
-for an n-bit buffer.
-For floating-point depth buffers, there is no single minimum resolvable
-difference.
-In this case, the minimum resolvable difference for a given polygon is
-dependent on the maximum exponent, [eq]#e#, in the range of [eq]#z# values
-spanned by the primitive.
-If [eq]#n# is the number of bits in the floating-point mantissa, the minimum
-resolvable difference, [eq]#r#, for the given primitive is defined as
-
-  {empty}:: [eq]#r = 2^e-n^#
-
-ifdef::VK_NV_fill_rectangle[]
-If a triangle is rasterized using the
-ename:VK_POLYGON_MODE_FILL_RECTANGLE_NV polygon mode, then this minimum
-resolvable difference may: not be resolvable for samples outside of the
-triangle, where the depth is extrapolated.
-endif::VK_NV_fill_rectangle[]
-
-If no depth buffer is present, [eq]#r# is undefined:.
-
-The bias value [eq]#o# for a polygon is
-
-[latexmath]
-++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-\begin{aligned}
-o &= \mathrm{dbclamp}( m \times \mathtt{depthBiasSlopeFactor} + r \times \mathtt{depthBiasConstantFactor} ) \\
-\text{where} &\quad \mathrm{dbclamp}(x) =
-\begin{cases}
-    x                                 & \mathtt{depthBiasClamp} = 0 \ \text{or}\ \texttt{NaN} \\
-    \min(x, \mathtt{depthBiasClamp})  & \mathtt{depthBiasClamp} > 0 \\
-    \max(x, \mathtt{depthBiasClamp})  & \mathtt{depthBiasClamp} < 0 \\
-\end{cases}
-\end{aligned}
-++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-[eq]#m# is computed as described above.
-If the depth buffer uses a fixed-point representation, [eq]#m# is a function
-of depth values in the range [eq]#[0,1]#, and [eq]#o# is applied to depth
-values in the same range.
-
-[open,refpage='vkCmdSetDepthBias',desc='Set depth bias factors and clamp dynamically for a command buffer',type='protos']
---
-To <<pipelines-dynamic-state, dynamically set>> the depth bias parameters,
-call:
-
-include::{generated}/api/protos/vkCmdSetDepthBias.txt[]
-
-  * pname:commandBuffer is the command buffer into which the command will be
-    recorded.
-  * pname:depthBiasConstantFactor is a scalar factor controlling the
-    constant depth value added to each fragment.
-  * pname:depthBiasClamp is the maximum (or minimum) depth bias of a
-    fragment.
-  * pname:depthBiasSlopeFactor is a scalar factor applied to a fragment's
-    slope in depth bias calculations.
-
-This command sets the depth bias parameters for subsequent drawing commands
-when the graphics pipeline is created with ename:VK_DYNAMIC_STATE_DEPTH_BIAS
-set in slink:VkPipelineDynamicStateCreateInfo::pname:pDynamicStates.
-Otherwise, this state is specified by the corresponding
-slink:VkPipelineInputAssemblyStateCreateInfo::pname:depthBiasConstantFactor,
-pname:depthBiasClamp, and pname:depthBiasSlopeFactor values used to create
-the currently active pipeline.
-
-.Valid Usage
-****
-  * [[VUID-vkCmdSetDepthBias-depthBiasClamp-00790]]
-    If the <<features-depthBiasClamp,depth bias clamping>> feature is not
-    enabled, pname:depthBiasClamp must: be `0.0`
-****
-
-include::{generated}/validity/protos/vkCmdSetDepthBias.txt[]
---
-
-
-ifdef::VK_EXT_conservative_rasterization[]
-[[primsrast-conservativeraster]]
-=== Conservative Rasterization
-
-[open,refpage='VkPipelineRasterizationConservativeStateCreateInfoEXT',desc='Structure specifying conservative raster state',type='structs']
---
-Polygon rasterization can: be made conservative by setting
-pname:conservativeRasterizationMode to
-ename:VK_CONSERVATIVE_RASTERIZATION_MODE_OVERESTIMATE_EXT or
-ename:VK_CONSERVATIVE_RASTERIZATION_MODE_UNDERESTIMATE_EXT in
-sname:VkPipelineRasterizationConservativeStateCreateInfoEXT.
-The sname:VkPipelineRasterizationConservativeStateCreateInfoEXT state is set
-by adding this structure to the pname:pNext chain of a
-sname:VkPipelineRasterizationStateCreateInfo structure when creating the
-graphics pipeline.
-Enabling these modes also affects line and point rasterization if the
-implementation sets
-sname:VkPhysicalDeviceConservativeRasterizationPropertiesEXT::pname:conservativePointAndLineRasterization
-to ename:VK_TRUE.
-
-sname:VkPipelineRasterizationConservativeStateCreateInfoEXT is defined as:
-
-include::{generated}/api/structs/VkPipelineRasterizationConservativeStateCreateInfoEXT.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:flags is reserved for future use.
-  * pname:conservativeRasterizationMode is the conservative rasterization
-    mode to use.
-  * pname:extraPrimitiveOverestimationSize is the extra size in pixels to
-    increase the generating primitive during conservative rasterization at
-    each of its edges in `X` and `Y` equally in screen space beyond the base
-    overestimation specified in
-    sname:VkPhysicalDeviceConservativeRasterizationPropertiesEXT::pname:primitiveOverestimationSize.
-
-.Valid Usage
-****
-  * [[VUID-VkPipelineRasterizationConservativeStateCreateInfoEXT-extraPrimitiveOverestimationSize-01769]]
-    pname:extraPrimitiveOverestimationSize must: be in the range of `0.0` to
-    sname:VkPhysicalDeviceConservativeRasterizationPropertiesEXT::pname:maxExtraPrimitiveOverestimationSize
-    inclusive
-****
-
-include::{generated}/validity/structs/VkPipelineRasterizationConservativeStateCreateInfoEXT.txt[]
---
-
-[open,refpage='VkPipelineRasterizationConservativeStateCreateFlagsEXT',desc='Reserved for future use',type='flags']
---
-include::{generated}/api/flags/VkPipelineRasterizationConservativeStateCreateFlagsEXT.txt[]
-
-tname:VkPipelineRasterizationConservativeStateCreateFlagsEXT is a bitmask
-type for setting a mask, but is currently reserved for future use.
---
-
-[open,refpage='VkConservativeRasterizationModeEXT',desc='Specify the conservative rasterization mode',type='enums']
---
-Possible values of
-slink:VkPipelineRasterizationConservativeStateCreateInfoEXT::pname:conservativeRasterizationMode,
-specifying the conservative rasterization mode are:
-
-include::{generated}/api/enums/VkConservativeRasterizationModeEXT.txt[]
-
-  * ename:VK_CONSERVATIVE_RASTERIZATION_MODE_DISABLED_EXT specifies that
-    conservative rasterization is disabled and rasterization proceeds as
-    normal.
-  * ename:VK_CONSERVATIVE_RASTERIZATION_MODE_OVERESTIMATE_EXT specifies that
-    conservative rasterization is enabled in overestimation mode.
-  * ename:VK_CONSERVATIVE_RASTERIZATION_MODE_UNDERESTIMATE_EXT specifies
-    that conservative rasterization is enabled in underestimation mode.
---
-
-When overestimate conservative rasterization is enabled, rather than
-evaluating coverage at individual sample locations, a determination is made
-of whether any portion of the pixel (including its edges and corners) is
-covered by the primitive.
-If any portion of the pixel is covered, then all bits of the
-<<primsrast-multisampling-coverage-mask, coverage mask>> for the fragment
-corresponding to that pixel are enabled.
-ifdef::VK_EXT_fragment_density_map[]
-If the render pass has a fragment density map attachment and any bit of the
-<<primsrast-multisampling-coverage-mask, coverage mask>> for the fragment is
-enabled, then all bits of the <<primsrast-multisampling-coverage-mask,
-coverage mask>> for the fragment are enabled.
-endif::VK_EXT_fragment_density_map[]
-
-For the purposes of evaluating which pixels are covered by the primitive,
-implementations can: increase the size of the primitive by up to
-sname:VkPhysicalDeviceConservativeRasterizationPropertiesEXT::pname:primitiveOverestimationSize
-pixels at each of the primitive edges.
-This may: increase the number of fragments generated by this primitive and
-represents an overestimation of the pixel coverage.
-
-This overestimation size can be increased further by setting the
-pname:extraPrimitiveOverestimationSize value above `0.0` in steps of
-sname:VkPhysicalDeviceConservativeRasterizationPropertiesEXT::pname:extraPrimitiveOverestimationSizeGranularity
-up to and including
-sname:VkPhysicalDeviceConservativeRasterizationPropertiesEXT::pname:extraPrimitiveOverestimationSize.
-This will: further increase the number of fragments generated by this
-primitive.
-
-The actual precision of the overestimation size used for conservative
-rasterization may: vary between implementations and produce results that
-only approximate the pname:primitiveOverestimationSize and
-pname:extraPrimitiveOverestimationSizeGranularity properties.
-ifdef::VK_EXT_fragment_density_map[]
-Implementations may: especially vary these approximations when the render
-pass has a fragment density map and the fragment area covers multiple
-pixels.
-endif::VK_EXT_fragment_density_map[]
-
-For triangles if ename:VK_CONSERVATIVE_RASTERIZATION_MODE_OVERESTIMATE_EXT
-is enabled, fragments will be generated if the primitive area covers any
-portion of any pixel inside the fragment area, including their edges or
-corners.
-The tie-breaking rule described in <<primsrast-polygons-basic, Basic Polygon
-Rasterization>> does not apply during conservative rasterization and
-coverage is set for all fragments generated from shared edges of polygons.
-Degenerate triangles that evaluate to zero area after rasterization, even
-for pixels containing a vertex or edge of the zero-area polygon, will be
-culled if
-sname:VkPhysicalDeviceConservativeRasterizationPropertiesEXT::pname:degenerateTrianglesRasterized
-is ename:VK_FALSE or will generate fragments if
-pname:degenerateTrianglesRasterized is ename:VK_TRUE.
-The fragment input values for these degenerate triangles take their
-attribute and depth values from the provoking vertex.
-Degenerate triangles are considered backfacing and the application can:
-enable backface culling if desired.
-Triangles that are zero area before rasterization may: be culled regardless.
-
-For lines if ename:VK_CONSERVATIVE_RASTERIZATION_MODE_OVERESTIMATE_EXT is
-enabled, and the implementation sets
-sname:VkPhysicalDeviceConservativeRasterizationPropertiesEXT::pname:conservativePointAndLineRasterization
-to ename:VK_TRUE, fragments will be generated if the line covers any portion
-of any pixel inside the fragment area, including their edges or corners.
-Degenerate lines that evaluate to zero length after rasterization will be
-culled if
-sname:VkPhysicalDeviceConservativeRasterizationPropertiesEXT::pname:degenerateLinesRasterized
-is ename:VK_FALSE or will generate fragments if
-pname:degenerateLinesRasterized is ename:VK_TRUE.
-The fragments input values for these degenerate lines take their attribute
-and depth values from the provoking vertex.
-Lines that are zero length before rasterization may: be culled regardless.
-
-For points if ename:VK_CONSERVATIVE_RASTERIZATION_MODE_OVERESTIMATE_EXT is
-enabled, and the implementation sets
-sname:VkPhysicalDeviceConservativeRasterizationPropertiesEXT::pname:conservativePointAndLineRasterization
-to ename:VK_TRUE, fragments will be generated if the point square covers any
-portion of any pixel inside the fragment area, including their edges or
-corners.
-
-When underestimate conservative rasterization is enabled, rather than
-evaluating coverage at individual sample locations, a determination is made
-of whether all of the pixel (including its edges and corners) is covered by
-the primitive.
-If the entire pixel is covered, then a fragment is generated with all bits
-of its <<primsrast-multisampling-coverage-mask, coverage mask>>
-corresponding to the pixel enabled, otherwise the pixel is not considered
-covered even if some portion of the pixel is covered.
-The fragment is discarded if no pixels inside the fragment area are
-considered covered.
-ifdef::VK_EXT_fragment_density_map[]
-If the render pass has a fragment density map attachment and any pixel
-inside the fragment area is not considered covered, then the fragment is
-discarded even if some pixels are considered covered.
-endif::VK_EXT_fragment_density_map[]
-
-For triangles, if ename:VK_CONSERVATIVE_RASTERIZATION_MODE_UNDERESTIMATE_EXT
-is enabled, fragments will only be generated if any pixel inside the
-fragment area is fully covered by the generating primitive, including its
-edges and corners.
-
-For lines, if ename:VK_CONSERVATIVE_RASTERIZATION_MODE_UNDERESTIMATE_EXT is
-enabled, fragments will be generated if any pixel inside the fragment area,
-including its edges and corners, are entirely covered by the line.
-
-For points, if ename:VK_CONSERVATIVE_RASTERIZATION_MODE_UNDERESTIMATE_EXT is
-enabled, fragments will only be generated if the point square covers the
-entirety of any pixel square inside the fragment area, including its edges
-or corners.
-
-ifdef::VK_EXT_fragment_density_map[]
-If the render pass has a fragment density map and
-ename:VK_CONSERVATIVE_RASTERIZATION_MODE_UNDERESTIMATE_EXT is enabled,
-fragments will only be generated if the entirety of all pixels inside the
-fragment area are covered by the generating primitive, line, or point.
-endif::VK_EXT_fragment_density_map[]
-
-For both overestimate and underestimate conservative rasterization modes a
-fragment has all of its pixel squares fully covered by the generating
-primitive must: set code:FullyCoveredEXT to ename:VK_TRUE if the
-implementation enables the
-sname:VkPhysicalDeviceConservativeRasterizationPropertiesEXT::pname:fullyCoveredFragmentShaderInputVariable
-feature.
-
-ifdef::VK_NV_shading_rate_image,VK_KHR_fragment_shading_rate[]
-When
-ifdef::VK_NV_shading_rate_image[]
-the use of a <<primsrast-shading-rate-image, shading rate image>>
-endif::VK_NV_shading_rate_image[]
-ifdef::VK_NV_shading_rate_image+VK_KHR_fragment_shading_rate[or]
-ifdef::VK_KHR_fragment_shading_rate[]
-setting the <<primsrast-fragment-shading-rate, fragment shading rate>>
-endif::VK_KHR_fragment_shading_rate[]
-results in fragments covering multiple pixels, coverage for conservative
-rasterization is still evaluated on a per-pixel basis and may result in
-fragments with partial coverage.
-For fragment shader inputs decorated with code:FullyCoveredEXT, a fragment
-is considered fully covered if and only if all pixels in the fragment are
-fully covered by the generating primitive.
-endif::VK_NV_shading_rate_image,VK_KHR_fragment_shading_rate[]
-
-endif::VK_EXT_conservative_rasterization[]
diff --git a/registry/vulkan/chapters/queries.txt b/registry/vulkan/chapters/queries.txt
deleted file mode 100644
index 4f7a6e2..0000000
--- a/registry/vulkan/chapters/queries.txt
+++ /dev/null
@@ -1,1686 +0,0 @@
-// Copyright 2015-2021 The Khronos Group, Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-[[queries]]
-= Queries
-
-_Queries_ provide a mechanism to return information about the processing of
-a sequence of Vulkan commands.
-Query operations are asynchronous, and as such, their results are not
-returned immediately.
-Instead, their results, and their availability status are stored in a
-<<queries-pools, Query Pool>>.
-The state of these queries can: be read back on the host, or copied to a
-buffer object on the device.
-
-The supported query types are <<queries-occlusion,Occlusion Queries>>,
-<<queries-pipestats,Pipeline Statistics Queries>>,
-ifdef::VK_KHR_video_queue[]
-<<queries-result-status-only, Result Status Queries>>,
-endif::VK_KHR_video_queue[]
-ifdef::VK_KHR_video_encode_queue[]
-<<queries-video-encode-bitstream-buffer-range, Video Encode Bitstream
-Queries>>,
-endif::VK_KHR_video_encode_queue[]
-and <<queries-timestamps, Timestamp Queries>>.
-ifdef::VK_KHR_performance_query[]
-<<queries-performance, Performance Queries>> are supported if the associated
-extension is available.
-endif::VK_KHR_performance_query[]
-ifdef::VK_EXT_transform_feedback[]
-<<queries-transform-feedback, Transform Feedback Queries>> are supported if
-the associated extension is available.
-endif::VK_EXT_transform_feedback[]
-ifdef::VK_INTEL_performance_query[]
-<<queries-performance-intel>> are supported if the associated extension is
-available.
-endif::VK_INTEL_performance_query[]
-
-ifdef::VK_KHR_acceleration_structure,VK_NV_ray_tracing[]
-Several additional queries with specific purposes associated with ray
-tracing are available if the corresponding extensions are supported, as
-described for elink:VkQueryType.
-endif::VK_KHR_acceleration_structure,VK_NV_ray_tracing[]
-
-
-[[queries-pools]]
-== Query Pools
-
-[open,refpage='VkQueryPool',desc='Opaque handle to a query pool object',type='handles']
---
-Queries are managed using _query pool_ objects.
-Each query pool is a collection of a specific number of queries of a
-particular type.
-
-Query pools are represented by sname:VkQueryPool handles:
-
-include::{generated}/api/handles/VkQueryPool.txt[]
---
-
-[open,refpage='vkCreateQueryPool',desc='Create a new query pool object',type='protos']
---
-To create a query pool, call:
-
-include::{generated}/api/protos/vkCreateQueryPool.txt[]
-
-  * pname:device is the logical device that creates the query pool.
-  * pname:pCreateInfo is a pointer to a slink:VkQueryPoolCreateInfo
-    structure containing the number and type of queries to be managed by the
-    pool.
-  * pname:pAllocator controls host memory allocation as described in the
-    <<memory-allocation, Memory Allocation>> chapter.
-  * pname:pQueryPool is a pointer to a slink:VkQueryPool handle in which the
-    resulting query pool object is returned.
-
-include::{generated}/validity/protos/vkCreateQueryPool.txt[]
---
-
-[open,refpage='VkQueryPoolCreateInfo',desc='Structure specifying parameters of a newly created query pool',type='structs']
---
-The sname:VkQueryPoolCreateInfo structure is defined as:
-
-include::{generated}/api/structs/VkQueryPoolCreateInfo.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:flags is reserved for future use.
-  * pname:queryType is a elink:VkQueryType value specifying the type of
-    queries managed by the pool.
-  * pname:queryCount is the number of queries managed by the pool.
-  * pname:pipelineStatistics is a bitmask of
-    elink:VkQueryPipelineStatisticFlagBits specifying which counters will be
-    returned in queries on the new pool, as described below in
-    <<queries-pipestats>>.
-
-pname:pipelineStatistics is ignored if pname:queryType is not
-ename:VK_QUERY_TYPE_PIPELINE_STATISTICS.
-
-.Valid Usage
-****
-  * [[VUID-VkQueryPoolCreateInfo-queryType-00791]]
-    If the <<features-pipelineStatisticsQuery,pipeline statistics queries>>
-    feature is not enabled, pname:queryType must: not be
-    ename:VK_QUERY_TYPE_PIPELINE_STATISTICS
-  * [[VUID-VkQueryPoolCreateInfo-queryType-00792]]
-    If pname:queryType is ename:VK_QUERY_TYPE_PIPELINE_STATISTICS,
-    pname:pipelineStatistics must: be a valid combination of
-    elink:VkQueryPipelineStatisticFlagBits values
-ifdef::VK_KHR_performance_query[]
-  * [[VUID-VkQueryPoolCreateInfo-queryType-03222]]
-    If pname:queryType is ename:VK_QUERY_TYPE_PERFORMANCE_QUERY_KHR, the
-    pname:pNext chain must: include a
-    slink:VkQueryPoolPerformanceCreateInfoKHR structure
-endif::VK_KHR_performance_query[]
-  * [[VUID-VkQueryPoolCreateInfo-queryCount-02763]]
-    pname:queryCount must: be greater than 0
-****
-
-include::{generated}/validity/structs/VkQueryPoolCreateInfo.txt[]
---
-
-[open,refpage='VkQueryPoolCreateFlags',desc='Reserved for future use',type='flags']
---
-include::{generated}/api/flags/VkQueryPoolCreateFlags.txt[]
-
-tname:VkQueryPoolCreateFlags is a bitmask type for setting a mask, but is
-currently reserved for future use.
---
-
-ifdef::VK_KHR_performance_query[]
-include::VK_KHR_performance_query/querycreateinfo.txt[]
-endif::VK_KHR_performance_query[]
-
-[open,refpage='vkDestroyQueryPool',desc='Destroy a query pool object',type='protos']
---
-To destroy a query pool, call:
-
-include::{generated}/api/protos/vkDestroyQueryPool.txt[]
-
-  * pname:device is the logical device that destroys the query pool.
-  * pname:queryPool is the query pool to destroy.
-  * pname:pAllocator controls host memory allocation as described in the
-    <<memory-allocation, Memory Allocation>> chapter.
-
-.Valid Usage
-****
-  * [[VUID-vkDestroyQueryPool-queryPool-00793]]
-    All submitted commands that refer to pname:queryPool must: have
-    completed execution
-  * [[VUID-vkDestroyQueryPool-queryPool-00794]]
-    If sname:VkAllocationCallbacks were provided when pname:queryPool was
-    created, a compatible set of callbacks must: be provided here
-  * [[VUID-vkDestroyQueryPool-queryPool-00795]]
-    If no sname:VkAllocationCallbacks were provided when pname:queryPool was
-    created, pname:pAllocator must: be `NULL`
-****
-
-[NOTE]
-.Note
-====
-Applications can: verify that pname:queryPool can: be destroyed by checking
-that fname:vkGetQueryPoolResults() without the
-ename:VK_QUERY_RESULT_PARTIAL_BIT flag returns ename:VK_SUCCESS for all
-queries that are used in command buffers submitted for execution.
-====
-
-include::{generated}/validity/protos/vkDestroyQueryPool.txt[]
---
-
-[open,refpage='VkQueryType',desc='Specify the type of queries managed by a query pool',type='enums']
---
-Possible values of slink:VkQueryPoolCreateInfo::pname:queryType, specifying
-the type of queries managed by the pool, are:
-
-include::{generated}/api/enums/VkQueryType.txt[]
-
-  * ename:VK_QUERY_TYPE_OCCLUSION specifies an <<queries-occlusion,
-    occlusion query>>.
-  * ename:VK_QUERY_TYPE_PIPELINE_STATISTICS specifies a <<queries-pipestats,
-    pipeline statistics query>>.
-  * ename:VK_QUERY_TYPE_TIMESTAMP specifies a <<queries-timestamps,
-    timestamp query>>.
-ifdef::VK_KHR_performance_query[]
-  * ename:VK_QUERY_TYPE_PERFORMANCE_QUERY_KHR specifies a
-    <<queries-performance, performance query>>.
-endif::VK_KHR_performance_query[]
-ifdef::VK_EXT_transform_feedback[]
-  * ename:VK_QUERY_TYPE_TRANSFORM_FEEDBACK_STREAM_EXT specifies a
-    <<queries-transform-feedback, transform feedback query>>.
-endif::VK_EXT_transform_feedback[]
-ifdef::VK_KHR_acceleration_structure[]
-  * ename:VK_QUERY_TYPE_ACCELERATION_STRUCTURE_COMPACTED_SIZE_KHR specifies
-    a <<acceleration-structure-copying, acceleration structure size query>>
-    for use with flink:vkCmdWriteAccelerationStructuresPropertiesKHR or
-    flink:vkWriteAccelerationStructuresPropertiesKHR.
-  * ename:VK_QUERY_TYPE_ACCELERATION_STRUCTURE_SERIALIZATION_SIZE_KHR
-    specifies a <<acceleration-structure-copying, serialization acceleration
-    structure size query>>
-endif::VK_KHR_acceleration_structure[]
-ifdef::VK_NV_ray_tracing[]
-  * ename:VK_QUERY_TYPE_ACCELERATION_STRUCTURE_COMPACTED_SIZE_NV specifies a
-    <<acceleration-structure-copying, acceleration structure size query>>
-    for use with flink:vkCmdWriteAccelerationStructuresPropertiesNV.
-endif::VK_NV_ray_tracing[]
-ifdef::VK_INTEL_performance_query[]
-  * ename:VK_QUERY_TYPE_PERFORMANCE_QUERY_INTEL specifies a
-    <<queries-performance-intel, Intel performance query>>.
-endif::VK_INTEL_performance_query[]
-ifdef::VK_KHR_video_queue[]
-  * ename:VK_QUERY_TYPE_RESULT_STATUS_ONLY_KHR specifies a
-    <<queries-result-status-only, result status query>>.
-endif::VK_KHR_video_queue[]
-ifdef::VK_KHR_video_encode_queue[]
-  * ename:VK_QUERY_TYPE_VIDEO_ENCODE_BITSTREAM_BUFFER_RANGE_KHR specifies a
-    <<queries-video-encode-bitstream-buffer-range, video encode bitstream
-    range query>>.
-endif::VK_KHR_video_encode_queue[]
---
-
-
-[[queries-operation]]
-== Query Operation
-
-The operation of queries is controlled by the commands
-flink:vkCmdBeginQuery, flink:vkCmdEndQuery,
-ifdef::VK_EXT_transform_feedback[]
-flink:vkCmdBeginQueryIndexedEXT, flink:vkCmdEndQueryIndexedEXT,
-endif::VK_EXT_transform_feedback[]
-flink:vkCmdResetQueryPool, flink:vkCmdCopyQueryPoolResults,
-ifdef::VK_KHR_synchronization2[]
-flink:vkCmdWriteTimestamp2KHR,
-endif::VK_KHR_synchronization2[]
-and flink:vkCmdWriteTimestamp.
-
-In order for a sname:VkCommandBuffer to record query management commands,
-the queue family for which its sname:VkCommandPool was created must: support
-the appropriate type of operations (graphics, compute) suitable for the
-query type of a given query pool.
-
-Each query in a query pool has a status that is either _unavailable_ or
-_available_, and also has state to store the numerical results of a query
-operation of the type requested when the query pool was created.
-Resetting a query via flink:vkCmdResetQueryPool
-ifdef::VK_VERSION_1_2,VK_EXT_host_query_reset[]
-or flink:vkResetQueryPool
-endif::VK_VERSION_1_2,VK_EXT_host_query_reset[]
-sets the status to unavailable and makes the numerical results undefined:.
-Performing a query operation with flink:vkCmdBeginQuery and
-flink:vkCmdEndQuery changes the status to available when the query
-<<queries-operation-finished,finishes>>, and updates the numerical results.
-Both the availability status and numerical results are retrieved by calling
-either flink:vkGetQueryPoolResults or flink:vkCmdCopyQueryPoolResults.
-
-[[queries-order]]
-Query commands, for the same query and submitted to the same queue, execute
-in their entirety in <<synchronization-submission-order, submission order>>,
-relative to each other.
-In effect there is an implicit execution dependency from each such query
-command to all query commands previously submitted to the same queue.
-There is one significant exception to this; if the pname:flags parameter of
-flink:vkCmdCopyQueryPoolResults does not include
-ename:VK_QUERY_RESULT_WAIT_BIT, execution of flink:vkCmdCopyQueryPoolResults
-may: happen-before the results of flink:vkCmdEndQuery are available.
-
-After query pool creation, each query must: be reset before it is used.
-Queries must: also be reset between uses.
-
-ifdef::VK_VERSION_1_1,VK_KHR_device_group[]
-
-If a logical device includes multiple physical devices, then each command
-that writes a query must: execute on a single physical device, and any call
-to flink:vkCmdBeginQuery must: execute the corresponding flink:vkCmdEndQuery
-command on the same physical device.
-
-endif::VK_VERSION_1_1,VK_KHR_device_group[]
-
-[open,refpage='vkCmdResetQueryPool',desc='Reset queries in a query pool',type='protos']
---
-To reset a range of queries in a query pool on a queue, call:
-
-include::{generated}/api/protos/vkCmdResetQueryPool.txt[]
-
-  * pname:commandBuffer is the command buffer into which this command will
-    be recorded.
-  * pname:queryPool is the handle of the query pool managing the queries
-    being reset.
-  * pname:firstQuery is the initial query index to reset.
-  * pname:queryCount is the number of queries to reset.
-
-When executed on a queue, this command sets the status of query indices
-[eq]#[pname:firstQuery, pname:firstQuery {plus} pname:queryCount - 1]# to
-unavailable.
-
-ifdef::VK_KHR_performance_query[]
-If the pname:queryType used to create pname:queryPool was
-ename:VK_QUERY_TYPE_PERFORMANCE_QUERY_KHR, this command sets the status of
-query indices [eq]#[pname:firstQuery, pname:firstQuery {plus}
-pname:queryCount - 1]# to unavailable for each pass of pname:queryPool, as
-indicated by a call to
-flink:vkGetPhysicalDeviceQueueFamilyPerformanceQueryPassesKHR.
-
-[NOTE]
-.Note
-====
-Because fname:vkCmdResetQueryPool resets all the passes of the indicated
-queries, applications must not record a fname:vkCmdResetQueryPool command
-for a pname:queryPool created with ename:VK_QUERY_TYPE_PERFORMANCE_QUERY_KHR
-in a command buffer that needs to be submitted multiple times as indicated
-by a call to flink:vkGetPhysicalDeviceQueueFamilyPerformanceQueryPassesKHR.
-Otherwise applications will never be able to complete the recorded queries.
-====
-endif::VK_KHR_performance_query[]
-
-
-.Valid Usage
-****
-  * [[VUID-vkCmdResetQueryPool-firstQuery-00796]]
-    pname:firstQuery must: be less than the number of queries in
-    pname:queryPool
-  * [[VUID-vkCmdResetQueryPool-firstQuery-00797]]
-    The sum of pname:firstQuery and pname:queryCount must: be less than or
-    equal to the number of queries in pname:queryPool
-  * [[VUID-vkCmdResetQueryPool-None-02841]]
-    All queries used by the command must: not be active
-ifdef::VK_KHR_performance_query[]
-  * [[VUID-vkCmdResetQueryPool-firstQuery-02862]]
-    If pname:queryPool was created with
-    ename:VK_QUERY_TYPE_PERFORMANCE_QUERY_KHR, this command must: not be
-    recorded in a command buffer that, either directly or through secondary
-    command buffers, also contains begin commands for a query from the set
-    of queries [eq]#[pname:firstQuery, pname:firstQuery {plus}
-    pname:queryCount - 1]#
-endif::VK_KHR_performance_query[]
-****
-
-include::{generated}/validity/protos/vkCmdResetQueryPool.txt[]
---
-
-ifdef::VK_VERSION_1_2,VK_EXT_host_query_reset[]
-[open,refpage='vkResetQueryPool',desc='Reset queries in a query pool',type='protos',alias='vkResetQueryPoolEXT']
---
-To reset a range of queries in a query pool on the host, call:
-
-ifdef::VK_VERSION_1_2[]
-include::{generated}/api/protos/vkResetQueryPool.txt[]
-endif::VK_VERSION_1_2[]
-
-ifdef::VK_VERSION_1_2+VK_EXT_host_query_reset[or the equivalent command]
-
-ifdef::VK_EXT_host_query_reset[]
-include::{generated}/api/protos/vkResetQueryPoolEXT.txt[]
-endif::VK_EXT_host_query_reset[]
-
-  * pname:device is the logical device that owns the query pool.
-  * pname:queryPool is the handle of the query pool managing the queries
-    being reset.
-  * pname:firstQuery is the initial query index to reset.
-  * pname:queryCount is the number of queries to reset.
-
-This command sets the status of query indices [eq]#[pname:firstQuery,
-pname:firstQuery {plus} pname:queryCount - 1]# to unavailable.
-
-ifdef::VK_KHR_performance_query[]
-If pname:queryPool is ename:VK_QUERY_TYPE_PERFORMANCE_QUERY_KHR this command
-sets the status of query indices [eq]#[pname:firstQuery, pname:firstQuery
-{plus} pname:queryCount - 1]# to unavailable for each pass.
-endif::VK_KHR_performance_query[]
-
-.Valid Usage
-****
-  * [[VUID-vkResetQueryPool-None-02665]]
-    The <<features-hostQueryReset,hostQueryReset>> feature must: be enabled
-  * [[VUID-vkResetQueryPool-firstQuery-02666]]
-    pname:firstQuery must: be less than the number of queries in
-    pname:queryPool
-  * [[VUID-vkResetQueryPool-firstQuery-02667]]
-    The sum of pname:firstQuery and pname:queryCount must: be less than or
-    equal to the number of queries in pname:queryPool
-  * [[VUID-vkResetQueryPool-firstQuery-02741]]
-    Submitted commands that refer to the range specified by pname:firstQuery
-    and pname:queryCount in pname:queryPool must: have completed execution
-  * [[VUID-vkResetQueryPool-firstQuery-02742]]
-    The range of queries specified by pname:firstQuery and pname:queryCount
-    in pname:queryPool must: not be in use by calls to
-    flink:vkGetQueryPoolResults or fname:vkResetQueryPool in other threads
-****
-
-include::{generated}/validity/protos/vkResetQueryPool.txt[]
---
-endif::VK_VERSION_1_2,VK_EXT_host_query_reset[]
-
-Once queries are reset and ready for use, query commands can: be issued to a
-command buffer.
-Occlusion queries and pipeline statistics queries count events - drawn
-samples and pipeline stage invocations, respectively - resulting from
-commands that are recorded between a flink:vkCmdBeginQuery command and a
-flink:vkCmdEndQuery command within a specified command buffer, effectively
-scoping a set of drawing and/or dispatching commands.
-Timestamp queries write timestamps to a query pool.
-ifdef::VK_KHR_performance_query[]
-Performance queries record performance counters to a query pool.
-endif::VK_KHR_performance_query[]
-
-A query must: begin and end in the same command buffer, although if it is a
-primary command buffer, and the <<features-inheritedQueries,inherited
-queries>> feature is enabled, it can: execute secondary command buffers
-during the query operation.
-For a secondary command buffer to be executed while a query is active, it
-must: set the pname:occlusionQueryEnable, pname:queryFlags, and/or
-pname:pipelineStatistics members of slink:VkCommandBufferInheritanceInfo to
-conservative values, as described in the <<commandbuffers-recording, Command
-Buffer Recording>> section.
-A query must: either begin and end inside the same subpass of a render pass
-instance, or must: both begin and end outside of a render pass instance
-(i.e. contain entire render pass instances).
-
-ifdef::VK_VERSION_1_1,VK_KHR_multiview[]
-
-If queries are used while executing a render pass instance that has
-multiview enabled, the query uses [eq]#N# consecutive query indices in the
-query pool (starting at pname:query) where [eq]#N# is the number of bits set
-in the view mask in the subpass the query is used in.
-How the numerical results of the query are distributed among the queries is
-implementation-dependent.
-For example, some implementations may: write each view's results to a
-distinct query, while other implementations may: write the total result to
-the first query and write zero to the other queries.
-However, the sum of the results in all the queries must: accurately reflect
-the total result of the query summed over all views.
-Applications can: sum the results from all the queries to compute the total
-result.
-
-Queries used with multiview rendering must: not span subpasses, i.e. they
-must: begin and end in the same subpass.
-
-endif::VK_VERSION_1_1,VK_KHR_multiview[]
-
-[open,refpage='vkCmdBeginQuery',desc='Begin a query',type='protos']
---
-:refpage: vkCmdBeginQuery
-
-To begin a query, call:
-
-include::{generated}/api/protos/vkCmdBeginQuery.txt[]
-
-  * pname:commandBuffer is the command buffer into which this command will
-    be recorded.
-  * pname:queryPool is the query pool that will manage the results of the
-    query.
-  * pname:query is the query index within the query pool that will contain
-    the results.
-  * pname:flags is a bitmask of elink:VkQueryControlFlagBits specifying
-    constraints on the types of queries that can: be performed.
-
-If the pname:queryType of the pool is ename:VK_QUERY_TYPE_OCCLUSION and
-pname:flags contains ename:VK_QUERY_CONTROL_PRECISE_BIT, an implementation
-must: return a result that matches the actual number of samples passed.
-This is described in more detail in <<queries-occlusion,Occlusion Queries>>.
-
-ifdef::VK_EXT_transform_feedback[]
-Calling fname:vkCmdBeginQuery is equivalent to calling
-flink:vkCmdBeginQueryIndexedEXT with the pname:index parameter set to zero.
-endif::VK_EXT_transform_feedback[]
-
-[[queries-operation-active]]
-After beginning a query, that query is considered _active_ within the
-command buffer it was called in until that same query is ended.
-Queries active in a primary command buffer when secondary command buffers
-are executed are considered active for those secondary command buffers.
-
-.Valid Usage
-****
-include::{chapters}/commonvalidity/query_begin_common.txt[]
-  * [[VUID-vkCmdBeginQuery-queryPool-01922]]
-    pname:queryPool must: have been created with a pname:queryType that
-    differs from that of any queries that are
-    <<queries-operation-active,active>> within pname:commandBuffer
-ifdef::VK_EXT_transform_feedback[]
-  * [[VUID-vkCmdBeginQuery-queryType-02327]]
-    If the pname:queryType used to create pname:queryPool was
-    ename:VK_QUERY_TYPE_TRANSFORM_FEEDBACK_STREAM_EXT the
-    sname:VkCommandPool that pname:commandBuffer was allocated from must:
-    support graphics operations
-  * [[VUID-vkCmdBeginQuery-queryType-02328]]
-    If the pname:queryType used to create pname:queryPool was
-    ename:VK_QUERY_TYPE_TRANSFORM_FEEDBACK_STREAM_EXT then
-    sname:VkPhysicalDeviceTransformFeedbackPropertiesEXT::pname:transformFeedbackQueries
-    must: be supported
-endif::VK_EXT_transform_feedback[]
-include::{chapters}/commonvalidity/performance_query_begin_common.txt[]
-****
-
-include::{generated}/validity/protos/vkCmdBeginQuery.txt[]
---
-
-ifdef::VK_EXT_transform_feedback[]
-[open,refpage='vkCmdBeginQueryIndexedEXT',desc='Begin an indexed query',type='protos']
---
-:refpage: vkCmdBeginQueryIndexedEXT
-
-To begin an indexed query, call:
-
-include::{generated}/api/protos/vkCmdBeginQueryIndexedEXT.txt[]
-
-  * pname:commandBuffer is the command buffer into which this command will
-    be recorded.
-  * pname:queryPool is the query pool that will manage the results of the
-    query.
-  * pname:query is the query index within the query pool that will contain
-    the results.
-  * pname:flags is a bitmask of elink:VkQueryControlFlagBits specifying
-    constraints on the types of queries that can: be performed.
-  * pname:index is the query type specific index.
-    When the query type is ename:VK_QUERY_TYPE_TRANSFORM_FEEDBACK_STREAM_EXT
-    the index represents the vertex stream.
-
-The fname:vkCmdBeginQueryIndexedEXT command operates the same as the
-flink:vkCmdBeginQuery command, except that it also accepts a query type
-specific pname:index parameter.
-
-.Valid Usage
-****
-include::{chapters}/commonvalidity/query_begin_common.txt[]
-  * [[VUID-vkCmdBeginQueryIndexedEXT-queryPool-04753]]
-    If the pname:queryPool was created with the same pname:queryType as that
-    of another <<queries-operation-active,active>> query within
-    pname:commandBuffer, then pname:index must: not match the index used for
-    the active query
-  * [[VUID-vkCmdBeginQueryIndexedEXT-queryType-02338]]
-    If the pname:queryType used to create pname:queryPool was
-    ename:VK_QUERY_TYPE_TRANSFORM_FEEDBACK_STREAM_EXT the
-    sname:VkCommandPool that pname:commandBuffer was allocated from must:
-    support graphics operations
-  * [[VUID-vkCmdBeginQueryIndexedEXT-queryType-02339]]
-    If the pname:queryType used to create pname:queryPool was
-    ename:VK_QUERY_TYPE_TRANSFORM_FEEDBACK_STREAM_EXT the pname:index
-    parameter must: be less than
-    sname:VkPhysicalDeviceTransformFeedbackPropertiesEXT::pname:maxTransformFeedbackStreams
-  * [[VUID-vkCmdBeginQueryIndexedEXT-queryType-02340]]
-    If the pname:queryType used to create pname:queryPool was not
-    ename:VK_QUERY_TYPE_TRANSFORM_FEEDBACK_STREAM_EXT the pname:index must:
-    be zero
-  * [[VUID-vkCmdBeginQueryIndexedEXT-queryType-02341]]
-    If the pname:queryType used to create pname:queryPool was
-    ename:VK_QUERY_TYPE_TRANSFORM_FEEDBACK_STREAM_EXT then
-    sname:VkPhysicalDeviceTransformFeedbackPropertiesEXT::pname:transformFeedbackQueries
-    must: be supported
-include::{chapters}/commonvalidity/performance_query_begin_common.txt[]
-****
-
-include::{generated}/validity/protos/vkCmdBeginQueryIndexedEXT.txt[]
---
-endif::VK_EXT_transform_feedback[]
-
-[open,refpage='VkQueryControlFlagBits',desc='Bitmask specifying constraints on a query',type='enums']
---
-Bits which can: be set in flink:vkCmdBeginQuery::pname:flags, specifying
-constraints on the types of queries that can: be performed, are:
-
-include::{generated}/api/enums/VkQueryControlFlagBits.txt[]
-
-  * ename:VK_QUERY_CONTROL_PRECISE_BIT specifies the precision of
-    <<queries-occlusion, occlusion queries>>.
---
-
-[open,refpage='VkQueryControlFlags',desc='Bitmask of VkQueryControlFlagBits',type='flags']
---
-include::{generated}/api/flags/VkQueryControlFlags.txt[]
-
-tname:VkQueryControlFlags is a bitmask type for setting a mask of zero or
-more elink:VkQueryControlFlagBits.
---
-
-[open,refpage='vkCmdEndQuery',desc='Ends a query',type='protos']
---
-To end a query after the set of desired drawing or dispatching commands is
-executed, call:
-
-include::{generated}/api/protos/vkCmdEndQuery.txt[]
-
-  * pname:commandBuffer is the command buffer into which this command will
-    be recorded.
-  * pname:queryPool is the query pool that is managing the results of the
-    query.
-  * pname:query is the query index within the query pool where the result is
-    stored.
-
-ifdef::VK_EXT_transform_feedback[]
-Calling fname:vkCmdEndQuery is equivalent to calling
-flink:vkCmdEndQueryIndexedEXT with the pname:index parameter set to zero.
-endif::VK_EXT_transform_feedback[]
-
-[[queries-operation-finished]]
-As queries operate asynchronously, ending a query does not immediately set
-the query's status to available.
-A query is considered _finished_ when the final results of the query are
-ready to be retrieved by flink:vkGetQueryPoolResults and
-flink:vkCmdCopyQueryPoolResults, and this is when the query's status is set
-to available.
-
-Once a query is ended the query must: finish in finite time, unless the
-state of the query is changed using other commands, e.g. by issuing a reset
-of the query.
-
-.Valid Usage
-****
-  * [[VUID-vkCmdEndQuery-None-01923]]
-    All queries used by the command must: be
-    <<queries-operation-active,active>>
-  * [[VUID-vkCmdEndQuery-query-00810]]
-    pname:query must: be less than the number of queries in pname:queryPool
-ifdef::VK_VERSION_1_1[]
-  * [[VUID-vkCmdEndQuery-commandBuffer-01886]]
-    pname:commandBuffer must: not be a protected command buffer
-endif::VK_VERSION_1_1[]
-ifdef::VK_VERSION_1_1,VK_KHR_multiview[]
-  * [[VUID-vkCmdEndQuery-query-00812]]
-    If fname:vkCmdEndQuery is called within a render pass instance, the sum
-    of pname:query and the number of bits set in the current subpass's view
-    mask must: be less than or equal to the number of queries in
-    pname:queryPool
-endif::VK_VERSION_1_1,VK_KHR_multiview[]
-ifdef::VK_KHR_performance_query[]
-  * [[VUID-vkCmdEndQuery-queryPool-03227]]
-    If pname:queryPool was created with a pname:queryType of
-    ename:VK_QUERY_TYPE_PERFORMANCE_QUERY_KHR and one or more of the
-    counters used to create pname:queryPool was
-    ename:VK_PERFORMANCE_COUNTER_SCOPE_COMMAND_BUFFER_KHR, the
-    flink:vkCmdEndQuery must: be the last recorded command in
-    pname:commandBuffer
-  * [[VUID-vkCmdEndQuery-queryPool-03228]]
-    If pname:queryPool was created with a pname:queryType of
-    ename:VK_QUERY_TYPE_PERFORMANCE_QUERY_KHR and one or more of the
-    counters used to create pname:queryPool was
-    ename:VK_PERFORMANCE_COUNTER_SCOPE_RENDER_PASS_KHR, the
-    flink:vkCmdEndQuery must: not be recorded within a render pass instance
-endif::VK_KHR_performance_query[]
-****
-
-include::{generated}/validity/protos/vkCmdEndQuery.txt[]
---
-
-ifdef::VK_EXT_transform_feedback[]
-[open,refpage='vkCmdEndQueryIndexedEXT',desc='Ends a query',type='protos']
---
-To end an indexed query after the set of desired drawing or dispatching
-commands is recorded, call:
-
-include::{generated}/api/protos/vkCmdEndQueryIndexedEXT.txt[]
-
-  * pname:commandBuffer is the command buffer into which this command will
-    be recorded.
-  * pname:queryPool is the query pool that is managing the results of the
-    query.
-  * pname:query is the query index within the query pool where the result is
-    stored.
-  * pname:index is the query type specific index.
-
-The fname:vkCmdEndQueryIndexedEXT command operates the same as the
-flink:vkCmdEndQuery command, except that it also accepts a query type
-specific pname:index parameter.
-
-.Valid Usage
-****
-  * [[VUID-vkCmdEndQueryIndexedEXT-None-02342]]
-    All queries used by the command must: be
-    <<queries-operation-active,active>>
-  * [[VUID-vkCmdEndQueryIndexedEXT-query-02343]]
-    pname:query must: be less than the number of queries in pname:queryPool
-ifdef::VK_VERSION_1_1[]
-  * [[VUID-vkCmdEndQueryIndexedEXT-commandBuffer-02344]]
-    pname:commandBuffer must: not be a protected command buffer
-endif::VK_VERSION_1_1[]
-ifdef::VK_VERSION_1_1,VK_KHR_multiview[]
-  * [[VUID-vkCmdEndQueryIndexedEXT-query-02345]]
-    If fname:vkCmdEndQueryIndexedEXT is called within a render pass
-    instance, the sum of pname:query and the number of bits set in the
-    current subpass's view mask must: be less than or equal to the number of
-    queries in pname:queryPool
-endif::VK_VERSION_1_1,VK_KHR_multiview[]
-  * [[VUID-vkCmdEndQueryIndexedEXT-queryType-02346]]
-    If the pname:queryType used to create pname:queryPool was
-    ename:VK_QUERY_TYPE_TRANSFORM_FEEDBACK_STREAM_EXT the pname:index
-    parameter must: be less than
-    sname:VkPhysicalDeviceTransformFeedbackPropertiesEXT::pname:maxTransformFeedbackStreams
-  * [[VUID-vkCmdEndQueryIndexedEXT-queryType-02347]]
-    If the pname:queryType used to create pname:queryPool was not
-    ename:VK_QUERY_TYPE_TRANSFORM_FEEDBACK_STREAM_EXT the pname:index must:
-    be zero
-  * [[VUID-vkCmdEndQueryIndexedEXT-queryType-02723]]
-    If the pname:queryType used to create pname:queryPool was
-    ename:VK_QUERY_TYPE_TRANSFORM_FEEDBACK_STREAM_EXT pname:index must:
-    equal the pname:index used to begin the query
-
-****
-
-include::{generated}/validity/protos/vkCmdEndQueryIndexedEXT.txt[]
---
-endif::VK_EXT_transform_feedback[]
-
-[[queries-operation-memorylayout]]
-An application can: retrieve results either by requesting they be written
-into application-provided memory, or by requesting they be copied into a
-sname:VkBuffer.
-In either case, the layout in memory is defined as follows:
-
-  * The first query's result is written starting at the first byte requested
-    by the command, and each subsequent query's result begins pname:stride
-    bytes later.
-  * Occlusion queries, pipeline statistics queries,
-ifdef::VK_EXT_transform_feedback[]
-    transform feedback queries,
-endif::VK_EXT_transform_feedback[]
-    and timestamp queries store results in a tightly packed array of
-    unsigned integers, either 32- or 64-bits as requested by the command,
-    storing the numerical results and, if requested, the availability
-    status.
-ifdef::VK_KHR_performance_query[]
-  * Performance queries store results in a tightly packed array whose type
-    is determined by the pname:unit member of the corresponding
-    slink:VkPerformanceCounterKHR.
-endif::VK_KHR_performance_query[]
-  * If ename:VK_QUERY_RESULT_WITH_AVAILABILITY_BIT is used, the final
-    element of each query's result is an integer indicating whether the
-    query's result is available, with any non-zero value indicating that it
-    is available.
-ifdef::VK_KHR_video_queue[]
-  * If ename:VK_QUERY_RESULT_WITH_STATUS_BIT_KHR is used, the final element
-    of each query's result is an integer value indicating that status of the
-    query result.
-    Positive values indicate success, negative values indicate failure, and
-    0 indicates that the result is not yet available.
-    Specific error codes are encoded in the elink:VkQueryResultStatusKHR
-    enumeration.
-endif::VK_KHR_video_queue[]
-  * Occlusion queries write one integer value - the number of samples
-    passed.
-    Pipeline statistics queries write one integer value for each bit that is
-    enabled in the pname:pipelineStatistics when the pool is created, and
-    the statistics values are written in bit order starting from the least
-    significant bit.
-    Timestamp queries write one integer value.
-ifdef::VK_KHR_performance_query[]
-    Performance queries write one slink:VkPerformanceCounterResultKHR value
-    for each slink:VkPerformanceCounterKHR in the query.
-endif::VK_KHR_performance_query[]
-ifdef::VK_EXT_transform_feedback[]
-    Transform feedback queries write two integers; the first integer is the
-    number of primitives successfully written to the corresponding transform
-    feedback buffer and the second is the number of primitives output to the
-    vertex stream, regardless of whether they were successfully captured or
-    not.
-    In other words, if the transform feedback buffer was sized too small for
-    the number of primitives output by the vertex stream, the first integer
-    represents the number of primitives actually written and the second is
-    the number that would have been written if all the transform feedback
-    buffers associated with that vertex stream were large enough.
-endif::VK_EXT_transform_feedback[]
-  * If more than one query is retrieved and pname:stride is not at least as
-    large as the size of the array of values corresponding to a single
-    query, the values written to memory are undefined:.
-
-[open,refpage='vkGetQueryPoolResults',desc='Copy results of queries in a query pool to a host memory region',type='protos']
---
-To retrieve status and results for a set of queries, call:
-
-include::{generated}/api/protos/vkGetQueryPoolResults.txt[]
-
-  * pname:device is the logical device that owns the query pool.
-  * pname:queryPool is the query pool managing the queries containing the
-    desired results.
-  * pname:firstQuery is the initial query index.
-  * pname:queryCount is the number of queries to read.
-  * pname:dataSize is the size in bytes of the buffer pointed to by
-    pname:pData.
-  * pname:pData is a pointer to a user-allocated buffer where the results
-    will be written
-  * pname:stride is the stride in bytes between results for individual
-    queries within pname:pData.
-  * pname:flags is a bitmask of elink:VkQueryResultFlagBits specifying how
-    and when results are returned.
-
-The range of queries read is defined by [eq]#[pname:firstQuery,
-pname:firstQuery {plus} pname:queryCount - 1]#.
-For pipeline statistics queries, each query index in the pool contains one
-integer value for each bit that is enabled in
-slink:VkQueryPoolCreateInfo::pname:pipelineStatistics when the pool is
-created.
-
-If no bits are set in pname:flags, and all requested queries are in the
-available state, results are written as an array of 32-bit unsigned integer
-values.
-The behavior when not all queries are available, is described
-<<queries-wait-bit-not-set, below>>.
-
-If ename:VK_QUERY_RESULT_64_BIT is not set and the result overflows a 32-bit
-value, the value may: either wrap or saturate.
-Similarly, if ename:VK_QUERY_RESULT_64_BIT is set and the result overflows a
-64-bit value, the value may: either wrap or saturate.
-
-If ename:VK_QUERY_RESULT_WAIT_BIT is set, Vulkan will wait for each query to
-be in the available state before retrieving the numerical results for that
-query.
-In this case, fname:vkGetQueryPoolResults is guaranteed to succeed and
-return ename:VK_SUCCESS if the queries become available in a finite time
-(i.e. if they have been issued and not reset).
-If queries will never finish (e.g. due to being reset but not issued), then
-fname:vkGetQueryPoolResults may: not return in finite time.
-
-[[queries-wait-bit-not-set]]
-If ename:VK_QUERY_RESULT_WAIT_BIT and ename:VK_QUERY_RESULT_PARTIAL_BIT are
-both not set then no result values are written to pname:pData for queries
-that are in the unavailable state at the time of the call, and
-fname:vkGetQueryPoolResults returns ename:VK_NOT_READY.
-However, availability state is still written to pname:pData for those
-queries if ename:VK_QUERY_RESULT_WITH_AVAILABILITY_BIT is set.
-ifdef::VK_KHR_video_queue[]
-Similarly, the status is still written to pname:pData for those queries if
-ename:VK_QUERY_RESULT_WITH_STATUS_BIT_KHR is set.
-endif::VK_KHR_video_queue[]
-
-If ename:VK_QUERY_RESULT_WAIT_BIT is not set, fname:vkGetQueryPoolResults
-may: return ename:VK_NOT_READY if there are queries in the unavailable
-state.
-
-[NOTE]
-.Note
-====
-Applications must: take care to ensure that use of the
-ename:VK_QUERY_RESULT_WAIT_BIT bit has the desired effect.
-
-For example, if a query has been used previously and a command buffer
-records the commands fname:vkCmdResetQueryPool, fname:vkCmdBeginQuery, and
-fname:vkCmdEndQuery for that query, then the query will remain in the
-available state until
-ifdef::VK_VERSION_1_2,VK_EXT_host_query_reset[]
-fname:vkResetQueryPool is called or
-endif::VK_VERSION_1_2,VK_EXT_host_query_reset[]
-the fname:vkCmdResetQueryPool command executes on a queue.
-Applications can: use fences or events to ensure that a query has already
-been reset before checking for its results or availability status.
-Otherwise, a stale value could be returned from a previous use of the query.
-
-The above also applies when ename:VK_QUERY_RESULT_WAIT_BIT is used in
-combination with ename:VK_QUERY_RESULT_WITH_AVAILABILITY_BIT.
-In this case, the returned availability status may: reflect the result of a
-previous use of the query unless
-ifdef::VK_VERSION_1_2,VK_EXT_host_query_reset[]
-fname:vkResetQueryPool is called or
-endif::VK_VERSION_1_2,VK_EXT_host_query_reset[]
-the fname:vkCmdResetQueryPool command has been executed since the last use
-of the query.
-
-ifdef::VK_KHR_video_queue[]
-A similar situation can arise with the
-ename:VK_QUERY_RESULT_WITH_STATUS_BIT_KHR flag.
-endif::VK_KHR_video_queue[]
-====
-
-[NOTE]
-.Note
-====
-Applications can: double-buffer query pool usage, with a pool per frame, and
-reset queries at the end of the frame in which they are read.
-====
-
-If ename:VK_QUERY_RESULT_PARTIAL_BIT is set, ename:VK_QUERY_RESULT_WAIT_BIT
-is not set, and the query's status is unavailable, an intermediate result
-value between zero and the final result value is written to pname:pData for
-that query.
-
-If ename:VK_QUERY_RESULT_WITH_AVAILABILITY_BIT is set, the final integer
-value written for each query is non-zero if the query's status was available
-or zero if the status was unavailable.
-When ename:VK_QUERY_RESULT_WITH_AVAILABILITY_BIT is used, implementations
-must: guarantee that if they return a non-zero availability value then the
-numerical results must: be valid, assuming the results are not reset by a
-subsequent command.
-
-[NOTE]
-.Note
-====
-Satisfying this guarantee may: require careful ordering by the application,
-e.g. to read the availability status before reading the results.
-====
-
-ifdef::VK_KHR_video_queue[]
-If ename:VK_QUERY_RESULT_WITH_STATUS_BIT_KHR is set, the final integer value
-written for each query indicates whether the result is available or not, and
-whether an error occurred.
-A value of zero indicates that the results are not yet available.
-Positive values indicate that the operations within the query completed
-successfully, and the query results are valid.
-Negative values indicate that the operations within the query completed
-unsuccessfully.
-
-Specific result codes are defined by the elink:VkQueryResultStatusKHR
-enumeration.
-endif::VK_KHR_video_queue[]
-
-.Valid Usage
-****
-  * [[VUID-vkGetQueryPoolResults-firstQuery-00813]]
-    pname:firstQuery must: be less than the number of queries in
-    pname:queryPool
-ifndef::VK_KHR_performance_query[]
-  * [[VUID-vkGetQueryPoolResults-flags-02827]]
-    If ename:VK_QUERY_RESULT_64_BIT is not set in pname:flags, then
-    pname:pData and pname:stride must: be multiples of `4`
-endif::VK_KHR_performance_query[]
-ifdef::VK_KHR_performance_query[]
-  * [[VUID-vkGetQueryPoolResults-flags-02828]]
-    If ename:VK_QUERY_RESULT_64_BIT is not set in pname:flags and the
-    pname:queryType used to create pname:queryPool was not
-    ename:VK_QUERY_TYPE_PERFORMANCE_QUERY_KHR, then pname:pData and
-    pname:stride must: be multiples of `4`
-endif::VK_KHR_performance_query[]
-  * [[VUID-vkGetQueryPoolResults-flags-00815]]
-    If ename:VK_QUERY_RESULT_64_BIT is set in pname:flags then pname:pData
-    and pname:stride must: be multiples of `8`
-ifdef::VK_KHR_performance_query[]
-  * [[VUID-vkGetQueryPoolResults-queryType-03229]]
-    If the pname:queryType used to create pname:queryPool was
-    ename:VK_QUERY_TYPE_PERFORMANCE_QUERY_KHR, then pname:pData and
-    pname:stride must: be multiples of the size of
-    slink:VkPerformanceCounterResultKHR
-  * [[VUID-vkGetQueryPoolResults-queryType-04519]]
-    If the pname:queryType used to create pname:queryPool was
-    ename:VK_QUERY_TYPE_PERFORMANCE_QUERY_KHR, then pname:stride must: be
-    large enough to contain
-    sname:VkQueryPoolPerformanceCreateInfoKHR::pname:counterIndexCount used
-    to create pname:queryPool times the size of
-    slink:VkPerformanceCounterResultKHR
-endif::VK_KHR_performance_query[]
-  * [[VUID-vkGetQueryPoolResults-firstQuery-00816]]
-    The sum of pname:firstQuery and pname:queryCount must: be less than or
-    equal to the number of queries in pname:queryPool
-  * [[VUID-vkGetQueryPoolResults-dataSize-00817]]
-    pname:dataSize must: be large enough to contain the result of each
-    query, as described <<queries-operation-memorylayout,here>>
-  * [[VUID-vkGetQueryPoolResults-queryType-00818]]
-    If the pname:queryType used to create pname:queryPool was
-    ename:VK_QUERY_TYPE_TIMESTAMP, pname:flags must: not contain
-    ename:VK_QUERY_RESULT_PARTIAL_BIT
-ifdef::VK_KHR_performance_query[]
-  * [[VUID-vkGetQueryPoolResults-queryType-03230]]
-    If the pname:queryType used to create pname:queryPool was
-    ename:VK_QUERY_TYPE_PERFORMANCE_QUERY_KHR, pname:flags must: not contain
-    ename:VK_QUERY_RESULT_WITH_AVAILABILITY_BIT,
-    ename:VK_QUERY_RESULT_PARTIAL_BIT or ename:VK_QUERY_RESULT_64_BIT
-  * [[VUID-vkGetQueryPoolResults-queryType-03231]]
-    If the pname:queryType used to create pname:queryPool was
-    ename:VK_QUERY_TYPE_PERFORMANCE_QUERY_KHR, the pname:queryPool must:
-    have been recorded once for each pass as retrieved via a call to
-    flink:vkGetPhysicalDeviceQueueFamilyPerformanceQueryPassesKHR
-endif::VK_KHR_performance_query[]
-ifdef::VK_KHR_video_queue[]
-  * [[VUID-vkGetQueryPoolResults-queryType-04810]]
-    If the pname:queryType used to create pname:queryPool was
-    ename:VK_QUERY_TYPE_RESULT_STATUS_ONLY_KHR, pname:flags must: include
-    ename:VK_QUERY_RESULT_WITH_STATUS_BIT_KHR
-  * [[VUID-vkGetQueryPoolResults-flags-04811]]
-    If pname:flags includes ename:VK_QUERY_RESULT_WITH_STATUS_BIT_KHR, it
-    must: not include ename:VK_QUERY_RESULT_WITH_AVAILABILITY_BIT
-endif::VK_KHR_video_queue[]
-****
-
-include::{generated}/validity/protos/vkGetQueryPoolResults.txt[]
---
-
-[open,refpage='VkQueryResultFlagBits',desc='Bitmask specifying how and when query results are returned',type='enums']
---
-Bits which can: be set in flink:vkGetQueryPoolResults::pname:flags and
-flink:vkCmdCopyQueryPoolResults::pname:flags, specifying how and when
-results are returned, are:
-
-include::{generated}/api/enums/VkQueryResultFlagBits.txt[]
-
-  * ename:VK_QUERY_RESULT_64_BIT specifies the results will be written as an
-    array of 64-bit unsigned integer values.
-    If this bit is not set, the results will be written as an array of
-    32-bit unsigned integer values.
-  * ename:VK_QUERY_RESULT_WAIT_BIT specifies that Vulkan will wait for each
-    query's status to become available before retrieving its results.
-  * ename:VK_QUERY_RESULT_WITH_AVAILABILITY_BIT specifies that the
-    availability status accompanies the results.
-  * ename:VK_QUERY_RESULT_PARTIAL_BIT specifies that returning partial
-    results is acceptable.
-ifdef::VK_KHR_video_queue[]
-  * ename:VK_QUERY_RESULT_WITH_STATUS_BIT_KHR specifies that the last value
-    returned in the query is a elink:VkQueryResultStatusKHR value.
-endif::VK_KHR_video_queue[]
---
-
-[open,refpage='VkQueryResultFlags',desc='Bitmask of VkQueryResultFlagBits',type='flags']
---
-include::{generated}/api/flags/VkQueryResultFlags.txt[]
-
-tname:VkQueryResultFlags is a bitmask type for setting a mask of zero or
-more elink:VkQueryResultFlagBits.
---
-
-ifdef::VK_KHR_video_queue[]
-[open,refpage='VkQueryResultStatusKHR',desc='Specific status codes for operations',type='enums']
---
-Specific status codes that can: be returned from a query are:
-
-include::{generated}/api/enums/VkQueryResultStatusKHR.txt[]
-
-  * ename:VK_QUERY_RESULT_STATUS_NOT_READY_KHR specifies that the query
-    result is not yet available.
-  * ename:VK_QUERY_RESULT_STATUS_ERROR_KHR specifies that operations did not
-    complete successfully.
-  * ename:VK_QUERY_RESULT_STATUS_COMPLETE_KHR specifies that operations
-    completed successfully and the query result is available.
---
-endif::VK_KHR_video_queue[]
-
-[open,refpage='vkCmdCopyQueryPoolResults',desc='Copy the results of queries in a query pool to a buffer object',type='protos']
---
-To copy query statuses and numerical results directly to buffer memory,
-call:
-
-include::{generated}/api/protos/vkCmdCopyQueryPoolResults.txt[]
-
-  * pname:commandBuffer is the command buffer into which this command will
-    be recorded.
-  * pname:queryPool is the query pool managing the queries containing the
-    desired results.
-  * pname:firstQuery is the initial query index.
-  * pname:queryCount is the number of queries.
-    pname:firstQuery and pname:queryCount together define a range of
-    queries.
-  * pname:dstBuffer is a slink:VkBuffer object that will receive the results
-    of the copy command.
-  * pname:dstOffset is an offset into pname:dstBuffer.
-  * pname:stride is the stride in bytes between results for individual
-    queries within pname:dstBuffer.
-    The required size of the backing memory for pname:dstBuffer is
-    determined as described above for flink:vkGetQueryPoolResults.
-  * pname:flags is a bitmask of elink:VkQueryResultFlagBits specifying how
-    and when results are returned.
-
-fname:vkCmdCopyQueryPoolResults is guaranteed to see the effect of previous
-uses of fname:vkCmdResetQueryPool in the same queue, without any additional
-synchronization.
-Thus, the results will always reflect the most recent use of the query.
-
-pname:flags has the same possible values described above for the pname:flags
-parameter of flink:vkGetQueryPoolResults, but the different style of
-execution causes some subtle behavioral differences.
-Because fname:vkCmdCopyQueryPoolResults executes in order with respect to
-other query commands, there is less ambiguity about which use of a query is
-being requested.
-
-Results for all requested occlusion queries, pipeline statistics queries,
-ifdef::VK_EXT_transform_feedback[]
-transform feedback queries,
-endif::VK_EXT_transform_feedback[]
-and timestamp queries are written as 64-bit unsigned integer values if
-ename:VK_QUERY_RESULT_64_BIT is set or 32-bit unsigned integer values
-otherwise.
-ifdef::VK_KHR_performance_query[]
-Performance queries store results in a tightly packed array whose type is
-determined by the pname:unit member of the corresponding
-slink:VkPerformanceCounterKHR.
-endif::VK_KHR_performance_query[]
-
-If neither of ename:VK_QUERY_RESULT_WAIT_BIT and
-ename:VK_QUERY_RESULT_WITH_AVAILABILITY_BIT are set, results are only
-written out for queries in the available state.
-
-If ename:VK_QUERY_RESULT_WAIT_BIT is set, the implementation will wait for
-each query's status to be in the available state before retrieving the
-numerical results for that query.
-This is guaranteed to reflect the most recent use of the query on the same
-queue, assuming that the query is not being simultaneously used by other
-queues.
-If the query does not become available in a finite amount of time (e.g. due
-to not issuing a query since the last reset), a ename:VK_ERROR_DEVICE_LOST
-error may: occur.
-
-Similarly, if ename:VK_QUERY_RESULT_WITH_AVAILABILITY_BIT is set and
-ename:VK_QUERY_RESULT_WAIT_BIT is not set, the availability is guaranteed to
-reflect the most recent use of the query on the same queue, assuming that
-the query is not being simultaneously used by other queues.
-As with fname:vkGetQueryPoolResults, implementations must: guarantee that if
-they return a non-zero availability value, then the numerical results are
-valid.
-
-If ename:VK_QUERY_RESULT_PARTIAL_BIT is set, ename:VK_QUERY_RESULT_WAIT_BIT
-is not set, and the query's status is unavailable, an intermediate result
-value between zero and the final result value is written for that query.
-
-ename:VK_QUERY_RESULT_PARTIAL_BIT must: not be used if the pool's
-pname:queryType is ename:VK_QUERY_TYPE_TIMESTAMP.
-
-fname:vkCmdCopyQueryPoolResults is considered to be a transfer operation,
-and its writes to buffer memory must: be synchronized using
-ename:VK_PIPELINE_STAGE_TRANSFER_BIT and ename:VK_ACCESS_TRANSFER_WRITE_BIT
-before using the results.
-
-.Valid Usage
-****
-  * [[VUID-vkCmdCopyQueryPoolResults-dstOffset-00819]]
-    pname:dstOffset must: be less than the size of pname:dstBuffer
-  * [[VUID-vkCmdCopyQueryPoolResults-firstQuery-00820]]
-    pname:firstQuery must: be less than the number of queries in
-    pname:queryPool
-  * [[VUID-vkCmdCopyQueryPoolResults-firstQuery-00821]]
-    The sum of pname:firstQuery and pname:queryCount must: be less than or
-    equal to the number of queries in pname:queryPool
-  * [[VUID-vkCmdCopyQueryPoolResults-flags-00822]]
-    If ename:VK_QUERY_RESULT_64_BIT is not set in pname:flags then
-    pname:dstOffset and pname:stride must: be multiples of `4`
-  * [[VUID-vkCmdCopyQueryPoolResults-flags-00823]]
-    If ename:VK_QUERY_RESULT_64_BIT is set in pname:flags then
-    pname:dstOffset and pname:stride must: be multiples of `8`
-  * [[VUID-vkCmdCopyQueryPoolResults-dstBuffer-00824]]
-    pname:dstBuffer must: have enough storage, from pname:dstOffset, to
-    contain the result of each query, as described
-    <<queries-operation-memorylayout,here>>
-  * [[VUID-vkCmdCopyQueryPoolResults-dstBuffer-00825]]
-    pname:dstBuffer must: have been created with
-    ename:VK_BUFFER_USAGE_TRANSFER_DST_BIT usage flag
-  * [[VUID-vkCmdCopyQueryPoolResults-dstBuffer-00826]]
-    If pname:dstBuffer is non-sparse then it must: be bound completely and
-    contiguously to a single sname:VkDeviceMemory object
-  * [[VUID-vkCmdCopyQueryPoolResults-queryType-00827]]
-    If the pname:queryType used to create pname:queryPool was
-    ename:VK_QUERY_TYPE_TIMESTAMP, pname:flags must: not contain
-    ename:VK_QUERY_RESULT_PARTIAL_BIT
-ifdef::VK_KHR_performance_query[]
-  * [[VUID-vkCmdCopyQueryPoolResults-queryType-03232]]
-    If the pname:queryType used to create pname:queryPool was
-    ename:VK_QUERY_TYPE_PERFORMANCE_QUERY_KHR,
-    slink:VkPhysicalDevicePerformanceQueryPropertiesKHR::pname:allowCommandBufferQueryCopies
-    must: be ename:VK_TRUE
-  * [[VUID-vkCmdCopyQueryPoolResults-queryType-03233]]
-    If the pname:queryType used to create pname:queryPool was
-    ename:VK_QUERY_TYPE_PERFORMANCE_QUERY_KHR, pname:flags must: not contain
-    ename:VK_QUERY_RESULT_WITH_AVAILABILITY_BIT,
-    ename:VK_QUERY_RESULT_PARTIAL_BIT or ename:VK_QUERY_RESULT_64_BIT
-  * [[VUID-vkCmdCopyQueryPoolResults-queryType-03234]]
-    If the pname:queryType used to create pname:queryPool was
-    ename:VK_QUERY_TYPE_PERFORMANCE_QUERY_KHR, the pname:queryPool must:
-    have been submitted once for each pass as retrieved via a call to
-    flink:vkGetPhysicalDeviceQueueFamilyPerformanceQueryPassesKHR
-endif::VK_KHR_performance_query[]
-ifdef::VK_INTEL_performance_query[]
-  * [[VUID-vkCmdCopyQueryPoolResults-queryType-02734]]
-    flink:vkCmdCopyQueryPoolResults must: not be called if the
-    pname:queryType used to create pname:queryPool was
-    ename:VK_QUERY_TYPE_PERFORMANCE_QUERY_INTEL
-endif::VK_INTEL_performance_query[]
-ifdef::VK_KHR_video_queue[]
-  * [[VUID-vkCmdCopyQueryPoolResults-queryType-04812]]
-    flink:vkCmdCopyQueryPoolResults must: not be called if the
-    pname:queryType used to create pname:queryPool was
-    ename:VK_QUERY_TYPE_VIDEO_ENCODE_BITSTREAM_BUFFER_RANGE_KHR or
-    ename:VK_QUERY_TYPE_RESULT_STATUS_ONLY_KHR
-endif::VK_KHR_video_queue[]
-****
-
-include::{generated}/validity/protos/vkCmdCopyQueryPoolResults.txt[]
---
-
-[[queries-operation-undefined]]
-Rendering operations such as clears, MSAA resolves, attachment load/store
-operations, and blits may: count towards the results of queries.
-This behavior is implementation-dependent and may: vary depending on the
-path used within an implementation.
-For example, some implementations have several types of clears, some of
-which may: include vertices and some not.
-
-
-[[queries-occlusion]]
-== Occlusion Queries
-
-Occlusion queries track the number of samples that pass the per-fragment
-tests for a set of drawing commands.
-As such, occlusion queries are only available on queue families supporting
-graphics operations.
-The application can: then use these results to inform future rendering
-decisions.
-An occlusion query is begun and ended by calling fname:vkCmdBeginQuery and
-fname:vkCmdEndQuery, respectively.
-When an occlusion query begins, the count of passing samples always starts
-at zero.
-For each drawing command, the count is incremented as described in
-<<fragops-samplecount,Sample Counting>>.
-If pname:flags does not contain ename:VK_QUERY_CONTROL_PRECISE_BIT an
-implementation may: generate any non-zero result value for the query if the
-count of passing samples is non-zero.
-
-[NOTE]
-.Note
-====
-Not setting ename:VK_QUERY_CONTROL_PRECISE_BIT mode may: be more efficient
-on some implementations, and should: be used where it is sufficient to know
-a boolean result on whether any samples passed the per-fragment tests.
-In this case, some implementations may: only return zero or one, indifferent
-to the actual number of samples passing the per-fragment tests.
-====
-
-When an occlusion query finishes, the result for that query is marked as
-available.
-The application can: then either copy the result to a buffer (via
-fname:vkCmdCopyQueryPoolResults) or request it be put into host memory (via
-fname:vkGetQueryPoolResults).
-
-[NOTE]
-.Note
-====
-If occluding geometry is not drawn first, samples can: pass the depth test,
-but still not be visible in a final image.
-====
-
-
-[[queries-pipestats]]
-== Pipeline Statistics Queries
-
-Pipeline statistics queries allow the application to sample a specified set
-of sname:VkPipeline counters.
-These counters are accumulated by Vulkan for a set of either drawing or
-dispatching commands while a pipeline statistics query is active.
-As such, pipeline statistics queries are available on queue families
-supporting either graphics or compute operations.
-The availability of pipeline statistics queries is indicated by the
-pname:pipelineStatisticsQuery member of the sname:VkPhysicalDeviceFeatures
-object (see fname:vkGetPhysicalDeviceFeatures and fname:vkCreateDevice for
-detecting and requesting this query type on a sname:VkDevice).
-
-A pipeline statistics query is begun and ended by calling
-fname:vkCmdBeginQuery and fname:vkCmdEndQuery, respectively.
-When a pipeline statistics query begins, all statistics counters are set to
-zero.
-While the query is active, the pipeline type determines which set of
-statistics are available, but these must: be configured on the query pool
-when it is created.
-If a statistic counter is issued on a command buffer that does not support
-the corresponding operation, the value of that counter is undefined: after
-the query has finished.
-At least one statistic counter relevant to the operations supported on the
-recording command buffer must: be enabled.
-
-[open,refpage='VkQueryPipelineStatisticFlagBits',desc='Bitmask specifying queried pipeline statistics',type='enums']
---
-Bits which can: be set to individually enable pipeline statistics counters
-for query pools with slink:VkQueryPoolCreateInfo::pname:pipelineStatistics,
-and for secondary command buffers with
-slink:VkCommandBufferInheritanceInfo::pname:pipelineStatistics, are:
-
-include::{generated}/api/enums/VkQueryPipelineStatisticFlagBits.txt[]
-
-  * ename:VK_QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_VERTICES_BIT specifies
-    that queries managed by the pool will count the number of vertices
-    processed by the <<drawing,input assembly>> stage.
-    Vertices corresponding to incomplete primitives may: contribute to the
-    count.
-  * ename:VK_QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_PRIMITIVES_BIT
-    specifies that queries managed by the pool will count the number of
-    primitives processed by the <<drawing,input assembly>> stage.
-    If primitive restart is enabled, restarting the primitive topology has
-    no effect on the count.
-    Incomplete primitives may: be counted.
-  * ename:VK_QUERY_PIPELINE_STATISTIC_VERTEX_SHADER_INVOCATIONS_BIT
-    specifies that queries managed by the pool will count the number of
-    vertex shader invocations.
-    This counter's value is incremented each time a vertex shader is
-    <<shaders-vertex-execution,invoked>>.
-  * ename:VK_QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_INVOCATIONS_BIT
-    specifies that queries managed by the pool will count the number of
-    geometry shader invocations.
-    This counter's value is incremented each time a geometry shader is
-    <<shaders-geometry-execution,invoked>>.
-    In the case of <<geometry-invocations,instanced geometry shaders>>, the
-    geometry shader invocations count is incremented for each separate
-    instanced invocation.
-  * ename:VK_QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_PRIMITIVES_BIT
-    specifies that queries managed by the pool will count the number of
-    primitives generated by geometry shader invocations.
-    The counter's value is incremented each time the geometry shader emits a
-    primitive.
-    Restarting primitive topology using the SPIR-V instructions
-    code:OpEndPrimitive or code:OpEndStreamPrimitive has no effect on the
-    geometry shader output primitives count.
-  * ename:VK_QUERY_PIPELINE_STATISTIC_CLIPPING_INVOCATIONS_BIT specifies
-    that queries managed by the pool will count the number of primitives
-    processed by the <<vertexpostproc-clipping,Primitive Clipping>> stage of
-    the pipeline.
-    The counter's value is incremented each time a primitive reaches the
-    primitive clipping stage.
-  * ename:VK_QUERY_PIPELINE_STATISTIC_CLIPPING_PRIMITIVES_BIT specifies that
-    queries managed by the pool will count the number of primitives output
-    by the <<vertexpostproc-clipping,Primitive Clipping>> stage of the
-    pipeline.
-    The counter's value is incremented each time a primitive passes the
-    primitive clipping stage.
-    The actual number of primitives output by the primitive clipping stage
-    for a particular input primitive is implementation-dependent but must:
-    satisfy the following conditions:
-  ** If at least one vertex of the input primitive lies inside the clipping
-     volume, the counter is incremented by one or more.
-  ** Otherwise, the counter is incremented by zero or more.
-  * ename:VK_QUERY_PIPELINE_STATISTIC_FRAGMENT_SHADER_INVOCATIONS_BIT
-    specifies that queries managed by the pool will count the number of
-    fragment shader invocations.
-    The counter's value is incremented each time the fragment shader is
-    <<fragops-shader,invoked>>.
-  * ename:VK_QUERY_PIPELINE_STATISTIC_TESSELLATION_CONTROL_SHADER_PATCHES_BIT
-    specifies that queries managed by the pool will count the number of
-    patches processed by the tessellation control shader.
-    The counter's value is incremented once for each patch for which a
-    tessellation control shader is
-    <<shaders-tessellation-control-execution,invoked>>.
-  * ename:VK_QUERY_PIPELINE_STATISTIC_TESSELLATION_EVALUATION_SHADER_INVOCATIONS_BIT
-    specifies that queries managed by the pool will count the number of
-    invocations of the tessellation evaluation shader.
-    The counter's value is incremented each time the tessellation evaluation
-    shader is <<shaders-tessellation-evaluation-execution,invoked>>.
-  * ename:VK_QUERY_PIPELINE_STATISTIC_COMPUTE_SHADER_INVOCATIONS_BIT
-    specifies that queries managed by the pool will count the number of
-    compute shader invocations.
-    The counter's value is incremented every time the compute shader is
-    invoked.
-    Implementations may: skip the execution of certain compute shader
-    invocations or execute additional compute shader invocations for
-    implementation-dependent reasons as long as the results of rendering
-    otherwise remain unchanged.
-
-These values are intended to measure relative statistics on one
-implementation.
-Various device architectures will count these values differently.
-Any or all counters may: be affected by the issues described in
-<<queries-operation-undefined,Query Operation>>.
-
-[NOTE]
-.Note
-====
-For example, tile-based rendering devices may: need to replay the scene
-multiple times, affecting some of the counts.
-====
-
-If a pipeline has pname:rasterizerDiscardEnable enabled, implementations
-may: discard primitives after the final
-<<pipeline-graphics-subsets-pre-rasterization,pre-rasterization shader
-stage>>.
-As a result, if pname:rasterizerDiscardEnable is enabled, the clipping input
-and output primitives counters may: not be incremented.
-
-When a pipeline statistics query finishes, the result for that query is
-marked as available.
-The application can: copy the result to a buffer (via
-fname:vkCmdCopyQueryPoolResults), or request it be put into host memory (via
-fname:vkGetQueryPoolResults).
---
-
-[open,refpage='VkQueryPipelineStatisticFlags',desc='Bitmask of VkQueryPipelineStatisticFlagBits',type='flags']
---
-include::{generated}/api/flags/VkQueryPipelineStatisticFlags.txt[]
-
-tname:VkQueryPipelineStatisticFlags is a bitmask type for setting a mask of
-zero or more elink:VkQueryPipelineStatisticFlagBits.
---
-
-
-[[queries-timestamps]]
-== Timestamp Queries
-
-_Timestamps_ provide applications with a mechanism for timing the execution
-of commands.
-A timestamp is an integer value generated by the sname:VkPhysicalDevice.
-Unlike other queries, timestamps do not operate over a range, and so do not
-use flink:vkCmdBeginQuery or flink:vkCmdEndQuery.
-The mechanism is built around a set of commands that allow the application
-to tell the sname:VkPhysicalDevice to write timestamp values to a
-<<queries-pools,query pool>> and then either read timestamp values on the
-host (using flink:vkGetQueryPoolResults) or copy timestamp values to a
-sname:VkBuffer (using flink:vkCmdCopyQueryPoolResults).
-The application can: then compute differences between timestamps to
-determine execution time.
-
-The number of valid bits in a timestamp value is determined by the
-sname:VkQueueFamilyProperties::pname:timestampValidBits property of the
-queue on which the timestamp is written.
-Timestamps are supported on any queue which reports a non-zero value for
-pname:timestampValidBits via flink:vkGetPhysicalDeviceQueueFamilyProperties.
-If the <<limits-timestampComputeAndGraphics,
-pname:timestampComputeAndGraphics>> limit is ename:VK_TRUE, timestamps are
-supported by every queue family that supports either graphics or compute
-operations (see slink:VkQueueFamilyProperties).
-
-The number of nanoseconds it takes for a timestamp value to be incremented
-by 1 can: be obtained from
-sname:VkPhysicalDeviceLimits::pname:timestampPeriod after a call to
-fname:vkGetPhysicalDeviceProperties.
-
-ifdef::VK_KHR_synchronization2[]
-
-[open,refpage='vkCmdWriteTimestamp2KHR',desc='Write a device timestamp into a query object',type='protos']
---
-:refpage: vkCmdWriteTimestamp2KHR
-
-To request a timestamp, call:
-
-include::{generated}/api/protos/vkCmdWriteTimestamp2KHR.txt[]
-
-  * pname:commandBuffer is the command buffer into which the command will be
-    recorded.
-  * pname:stage specifies a stage of the pipeline.
-  * pname:queryPool is the query pool that will manage the timestamp.
-  * pname:query is the query within the query pool that will contain the
-    timestamp.
-
-When fname:vkCmdWriteTimestamp2KHR is submitted to a queue, it defines an
-execution dependency on commands that were submitted before it, and writes a
-timestamp to a query pool.
-
-The first <<synchronization-dependencies-scopes, synchronization scope>>
-includes all commands that occur earlier in
-<<synchronization-submission-order,submission order>>.
-The synchronization scope is limited to operations on the pipeline stage
-specified by pname:stage.
-
-The second <<synchronization-dependencies-scopes, synchronization scope>>
-includes only the timestamp write operation.
-
-When the timestamp value is written, the availability status of the query is
-set to available.
-
-[NOTE]
-.Note
-====
-If an implementation is unable to detect completion and latch the timer at
-any specific stage of the pipeline, it may: instead do so at any logically
-later stage.
-====
-
-Comparisons between timestamps are not meaningful if the timestamps are
-written by commands submitted to different queues.
-
-[NOTE]
-.Note
-====
-An example of such a comparison is subtracting an older timestamp from a
-newer one to determine the execution time of a sequence of commands.
-====
-
-ifdef::VK_VERSION_1_1,VK_KHR_multiview[]
-
-If fname:vkCmdWriteTimestamp2KHR is called while executing a render pass
-instance that has multiview enabled, the timestamp uses [eq]#N# consecutive
-query indices in the query pool (starting at pname:query) where [eq]#N# is
-the number of bits set in the view mask of the subpass the command is
-executed in.
-The resulting query values are determined by an implementation-dependent
-choice of one of the following behaviors:
-
-  * The first query is a timestamp value and (if more than one bit is set in
-    the view mask) zero is written to the remaining queries.
-    If two timestamps are written in the same subpass, the sum of the
-    execution time of all views between those commands is the difference
-    between the first query written by each command.
-  * All [eq]#N# queries are timestamp values.
-    If two timestamps are written in the same subpass, the sum of the
-    execution time of all views between those commands is the sum of the
-    difference between corresponding queries written by each command.
-    The difference between corresponding queries may: be the execution time
-    of a single view.
-
-In either case, the application can: sum the differences between all [eq]#N#
-queries to determine the total execution time.
-
-endif::VK_VERSION_1_1,VK_KHR_multiview[]
-
-.Valid Usage
-****
-:stageMaskName: stage
-include::{chapters}/commonvalidity/stage_mask_2_common.txt[]
-  * [[VUID-vkCmdWriteTimestamp2KHR-synchronization2-03858]]
-    The <<features-synchronization2, pname:synchronization2>> feature must:
-    be enabled
-  * [[VUID-vkCmdWriteTimestamp2KHR-stage-03859]]
-    pname:stage must: only include a single pipeline stage
-  * [[VUID-vkCmdWriteTimestamp2KHR-stage-03860]]
-    pname:stage must: only include stages valid for the queue family that
-    was used to create the command pool that pname:commandBuffer was
-    allocated from
-  * [[VUID-vkCmdWriteTimestamp2KHR-queryPool-03861]]
-    pname:queryPool must: have been created with a pname:queryType of
-    ename:VK_QUERY_TYPE_TIMESTAMP
-  * [[VUID-vkCmdWriteTimestamp2KHR-queryPool-03862]]
-    The query identified by pname:queryPool and pname:query must: be
-    _unavailable_
-  * [[VUID-vkCmdWriteTimestamp2KHR-timestampValidBits-03863]]
-    The command pool's queue family must: support a non-zero
-    pname:timestampValidBits
-  * [[VUID-vkCmdWriteTimestamp2KHR-query-04903]]
-    pname:query must: be less than the number of queries in pname:queryPool
-ifdef::VK_VERSION_1_1,VK_KHR_multiview[]
-  * [[VUID-vkCmdWriteTimestamp2KHR-None-03864]]
-    All queries used by the command must: be unavailable
-  * [[VUID-vkCmdWriteTimestamp2KHR-query-03865]]
-    If fname:vkCmdWriteTimestamp2KHR is called within a render pass
-    instance, the sum of pname:query and the number of bits set in the
-    current subpass's view mask must: be less than or equal to the number of
-    queries in pname:queryPool
-endif::VK_VERSION_1_1,VK_KHR_multiview[]
-****
-
-include::{generated}/validity/protos/vkCmdWriteTimestamp2KHR.txt[]
---
-endif::VK_KHR_synchronization2[]
-
-[open,refpage='vkCmdWriteTimestamp',desc='Write a device timestamp into a query object',type='protos']
---
-:refpage: vkCmdWriteTimestamp
-
-To request a timestamp, call:
-
-include::{generated}/api/protos/vkCmdWriteTimestamp.txt[]
-
-  * pname:commandBuffer is the command buffer into which the command will be
-    recorded.
-  * pname:pipelineStage is a elink:VkPipelineStageFlagBits value, specifying
-    a stage of the pipeline.
-  * pname:queryPool is the query pool that will manage the timestamp.
-  * pname:query is the query within the query pool that will contain the
-    timestamp.
-
-fname:vkCmdWriteTimestamp latches the value of the timer when all previous
-commands have completed executing as far as the specified pipeline stage,
-and writes the timestamp value to memory.
-When the timestamp value is written, the availability status of the query is
-set to available.
-
-[NOTE]
-.Note
-====
-If an implementation is unable to detect completion and latch the timer at
-any specific stage of the pipeline, it may: instead do so at any logically
-later stage.
-====
-
-Comparisons between timestamps are not meaningful if the timestamps are
-written by commands submitted to different queues.
-
-[NOTE]
-.Note
-====
-An example of such a comparison is subtracting an older timestamp from a
-newer one to determine the execution time of a sequence of commands.
-====
-
-ifdef::VK_VERSION_1_1,VK_KHR_multiview[]
-
-If fname:vkCmdWriteTimestamp is called while executing a render pass
-instance that has multiview enabled, the timestamp uses [eq]#N# consecutive
-query indices in the query pool (starting at pname:query) where [eq]#N# is
-the number of bits set in the view mask of the subpass the command is
-executed in.
-The resulting query values are determined by an implementation-dependent
-choice of one of the following behaviors:
-
-  * The first query is a timestamp value and (if more than one bit is set in
-    the view mask) zero is written to the remaining queries.
-    If two timestamps are written in the same subpass, the sum of the
-    execution time of all views between those commands is the difference
-    between the first query written by each command.
-  * All [eq]#N# queries are timestamp values.
-    If two timestamps are written in the same subpass, the sum of the
-    execution time of all views between those commands is the sum of the
-    difference between corresponding queries written by each command.
-    The difference between corresponding queries may: be the execution time
-    of a single view.
-
-In either case, the application can: sum the differences between all [eq]#N#
-queries to determine the total execution time.
-
-endif::VK_VERSION_1_1,VK_KHR_multiview[]
-
-.Valid Usage
-****
-include::{chapters}/commonvalidity/pipeline_stage_common.txt[]
-  * [[VUID-vkCmdWriteTimestamp-queryPool-01416]]
-    pname:queryPool must: have been created with a pname:queryType of
-    ename:VK_QUERY_TYPE_TIMESTAMP
-  * [[VUID-vkCmdWriteTimestamp-queryPool-00828]]
-    The query identified by pname:queryPool and pname:query must: be
-    _unavailable_
-  * [[VUID-vkCmdWriteTimestamp-timestampValidBits-00829]]
-    The command pool's queue family must: support a non-zero
-    pname:timestampValidBits
-  * [[VUID-vkCmdWriteTimestamp-query-04904]]
-    pname:query must: be less than the number of queries in pname:queryPool
-ifdef::VK_VERSION_1_1,VK_KHR_multiview[]
-  * [[VUID-vkCmdWriteTimestamp-None-00830]]
-    All queries used by the command must: be unavailable
-  * [[VUID-vkCmdWriteTimestamp-query-00831]]
-    If fname:vkCmdWriteTimestamp is called within a render pass instance,
-    the sum of pname:query and the number of bits set in the current
-    subpass's view mask must: be less than or equal to the number of queries
-    in pname:queryPool
-endif::VK_VERSION_1_1,VK_KHR_multiview[]
-****
-
-include::{generated}/validity/protos/vkCmdWriteTimestamp.txt[]
---
-
-ifdef::VK_KHR_performance_query[]
-include::VK_KHR_performance_query/queriesperformance.txt[]
-endif::VK_KHR_performance_query[]
-
-
-ifdef::VK_EXT_transform_feedback[]
-[[queries-transform-feedback]]
-== Transform Feedback Queries
-
-Transform feedback queries track the number of primitives attempted to be
-written and actually written, by the vertex stream being captured, to a
-transform feedback buffer.
-This query is updated during drawing commands while transform feedback is
-active.
-The number of primitives actually written will be less than the number
-attempted to be written if the bound transform feedback buffer size was too
-small for the number of primitives actually drawn.
-Primitives are not written beyond the bound range of the transform feedback
-buffer.
-A transform feedback query is begun and ended by calling
-fname:vkCmdBeginQuery and fname:vkCmdEndQuery, respectively to query for
-vertex stream zero.
-fname:vkCmdBeginQueryIndexedEXT and fname:vkCmdEndQueryIndexedEXT can: be
-used to begin and end transform feedback queries for any supported vertex
-stream.
-When a transform feedback query begins, the count of primitives written and
-primitives needed starts from zero.
-For each drawing command, the count is incremented as vertex attribute
-outputs are captured to the transform feedback buffers while transform
-feedback is active.
-
-When a transform feedback query finishes, the result for that query is
-marked as available.
-The application can: then either copy the result to a buffer (via
-fname:vkCmdCopyQueryPoolResults) or request it be put into host memory (via
-fname:vkGetQueryPoolResults).
-
-endif::VK_EXT_transform_feedback[]
-
-ifdef::VK_INTEL_performance_query[]
-include::VK_INTEL_performance_query/queries.txt[]
-endif::VK_INTEL_performance_query[]
-
-
-ifdef::VK_KHR_video_queue[]
-[[queries-result-status-only]]
-== Result Status Queries
-
-Result status queries are used for a single purpose - to check whether a set
-of operations has completed successfully or not, using the
-ename:VK_QUERY_RESULT_WITH_STATUS_BIT_KHR flag.
-
-No other data is written to such a query.
-endif::VK_KHR_video_queue[]
-
-
-ifdef::VK_KHR_video_encode_queue[]
-[[queries-video-encode-bitstream-buffer-range]]
-== Video Encode Bitstream Buffer Range
-
-Bitstream buffer range queries describe the range of bytes written in the
-bitstream buffer by video encode commands.
-
-When an encode command is recorded within a bitstream buffer range query,
-two values are written to the query slot.
-The first value is an offset into the bitstream buffer where the encoded
-video data was written.
-This offset is an additional offset from the start of the range specified by
-the application.
-The second value is a size value describing the number of bytes written to
-the bitstream buffer beyond the offset.
-
-One slot is consumed for each slice in each command recorded between a begin
-and end query pair.
-endif::VK_KHR_video_encode_queue[]
diff --git a/registry/vulkan/chapters/raytracing.txt b/registry/vulkan/chapters/raytracing.txt
deleted file mode 100644
index 61a0c83..0000000
--- a/registry/vulkan/chapters/raytracing.txt
+++ /dev/null
@@ -1,902 +0,0 @@
-// Copyright 2018-2021 The Khronos Group, Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-[[ray-tracing]]
-= Ray Tracing
-
-Ray tracing uses a separate rendering pipeline from both the graphics and
-compute pipelines (see <<pipelines-ray-tracing,Ray Tracing Pipeline>>).
-
-[[fig-raypipe]]
-image::{images}/ray_tracing_execution.svg[align="center",title="Ray tracing pipeline execution",opts="{imageopts}"]
-
-.Caption
-****
-Interaction between the different shader stages in the ray tracing pipeline
-****
-
-Within the ray tracing pipeline, code:OpTraceRayKHR
-ifdef::VK_NV_ray_tracing_motion_blur[]
-or code:OpTraceRayMotionNV
-endif::VK_NV_ray_tracing_motion_blur[]
-can: be called to perform a <<ray-traversal,ray traversal>> that invokes the
-various ray tracing shader stages during its execution.
-The relationship between the ray tracing pipeline object and the geometries
-present in the acceleration structure traversed is passed into the ray
-tracing command in a slink:VkBuffer object known as a _shader binding
-table_.
-code:OpExecuteCallableKHR can also be used in ray tracing pipelines to
-invoke a <<shaders-callable,callable shader>>.
-
-During execution, control alternates between scheduling and other
-operations.
-The scheduling functionality is implementation-specific and is responsible
-for workload execution.
-The shader stages are programmable.
-<<ray-traversal, _Traversal_>>, which refers to the process of traversing
-acceleration structures to find potential intersections of rays with
-geometry, is fixed function.
-
-The programmable portions of the pipeline are exposed in a single-ray
-programming model, with each invocation handling one ray at a time.
-Memory operations can: be synchronized using standard memory barriers.
-The code:Workgroup scope and variables with a storage class of
-code:Workgroup must: not be used in the ray tracing pipeline.
-
-
-[[ray-tracing-shader-call]]
-== Shader Call Instructions
-
-A _shader call_ is an instruction which may: cause execution to continue
-elsewhere by creating one or more invocations that execute a different
-shader stage.
-
-The shader call instructions are:
-
- * code:OpTraceRayKHR which may: invoke intersection, any-hit, closest hit,
-   or miss shaders,
-ifdef::VK_NV_ray_tracing_motion_blur[]
- * code:OpTraceRayMotionNV which may: invoke intersection, any-hit, closest
-   hit, or miss shaders,
-endif::VK_NV_ray_tracing_motion_blur[]
- * code:OpReportIntersectionKHR which may: invoke any-hit shaders, and
- * code:OpExecuteCallableKHR which will invoke a callable shader.
-
-ifdef::VK_VERSION_1_1[]
-The invocations created by shader call instructions are grouped into
-subgroups by the implementation.
-Those subgroups may: be unrelated to the subgroup of the parent invocation.
-endif::VK_VERSION_1_1[]
-
-
-[[ray-tracing-recursion-depth]]
-_Pipeline trace ray instructions_ can: be used recursively; invoked shaders
-can: themselves execute pipeline trace ray instructions, to a maximum depth
-defined by the
-ifdef::VK_NV_ray_tracing[]
-<<limits-maxRecursionDepth, pname:maxRecursionDepth>> or
-endif::VK_NV_ray_tracing[]
-<<limits-maxRayRecursionDepth, pname:maxRayRecursionDepth>> limit.
-
-Shaders directly invoked from the API always have a recursion depth of 0;
-each shader executed by a pipeline trace ray instruction has a recursion
-depth one higher than the recursion depth of the shader which invoked it.
-Applications must: not invoke a shader with a recursion depth greater than
-the value of
-ifdef::VK_NV_ray_tracing[]
-pname:maxRecursionDepth or
-endif::VK_NV_ray_tracing[]
-pname:maxPipelineRayRecursionDepth specified in the pipeline.
-
-There is no explicit recursion limit for other shader call instructions
-which may recurse (e.g. code:OpExecuteCallableKHR) but there is an upper
-bound determined by the <<ray-tracing-pipeline-stack, stack size>>.
-
-[[ray-tracing-repack]]
-An _invocation repack instruction_ is a ray tracing shader call instruction
-where the implementation may: change the set of invocations that are
-executing.
-When a repack instruction is encountered, the invocation is suspended and a
-new invocation begins and executes the instruction.
-After executing the repack instruction (which may: result in other ray
-tracing shader stages executing) the new invocation ends and the original
-invocation is resumed, but it may: be resumed in a different subgroup or at
-a different code:SubgroupLocalInvocationId within the same subgroup.
-When a subset of invocations in a subgroup execute the invocation repack
-instruction, those that do not execute it remain in the same subgroup at the
-same code:SubgroupLocalInvocationId.
-
-The code:OpTraceRayKHR,
-ifdef::VK_NV_ray_tracing_motion_blur[]
-code:OpTraceRayMotionNV,
-endif::VK_NV_ray_tracing_motion_blur[]
-code:OpReportIntersectionKHR, and code:OpExecuteCallableKHR instructions are
-invocation repack instructions.
-
-ifdef::VK_VERSION_1_1[]
-ifdef::VK_VERSION_1_2,VK_KHR_vulkan_memory_model[]
-The invocations that are executing before an invocation repack instruction,
-after the instruction, or are created by the instruction, are
-<<shader-call-related,shader-call-related>>.
-endif::VK_VERSION_1_2,VK_KHR_vulkan_memory_model[]
-
-If the implementation changes the composition of subgroups, the values of
-code:SubgroupSize, code:SubgroupLocalInvocationId,
-ifdef::VK_NV_shader_sm_builtins[]
-code:SMIDNV, code:WarpIDNV,
-endif::VK_NV_shader_sm_builtins[]
-and builtin variables that are derived from them (code:SubgroupEqMask,
-code:SubgroupGeMask, code:SubgroupGtMask, code:SubgroupLeMask,
-code:SubgroupLtMask) must: be changed accordingly by the invocation repack
-instruction.
-The application must: use <<builtin-volatile-semantics,code:Volatile
-semantics>> on these code:BuiltIn variables when used in the ray generation,
-closest hit, miss, intersection, and callable shaders.
-Similarly, the application must: use code:Volatile semantics on any
-code:RayTmaxKHR decorated code:Builtin used in an intersection shader.
-
-[NOTE]
-.Note
-====
-<<shaders-group-operations,Subgroup operations>> are permitted in the
-programmable ray tracing shader stages.
-However, shader call instructions place a bound on where results of subgroup
-instructions or subgroup-scoped instructions that execute the dynamic
-instance of that instruction are potentially valid.
-For example, care must: be taken when using the result of a ballot operation
-that was computed before an invocation repack instruction, after that repack
-instruction.
-The ballot may: be incorrect as the set of invocations could have changed.
-
-ifdef::VK_EXT_subgroup_size_control[]
-While the code:SubgroupSize built-in is required to be declared
-code:Volatile, its value will never change unless
-ename:VK_PIPELINE_SHADER_STAGE_CREATE_ALLOW_VARYING_SUBGROUP_SIZE_BIT_EXT is
-set on pipeline creation, as without that bit set, its value is required to
-match that of slink:VkPhysicalDeviceSubgroupProperties::pname:subgroupSize.
-endif::VK_EXT_subgroup_size_control[]
-
-ifdef::VK_KHR_shader_clock[]
-For clock operations, the value of a code:Subgroup scoped
-code:OpReadClockKHR read before the dynamic instance of a repack instruction
-should: not be compared to the result of that clock instruction after the
-repack instruction.
-endif::VK_KHR_shader_clock[]
-====
-endif::VK_VERSION_1_1[]
-
-ifdef::VK_VERSION_1_2,VK_KHR_vulkan_memory_model[]
-When a ray tracing shader executes a dynamic instance of an invocation
-repack instruction which results in another ray tracing shader being
-invoked, their instructions are related by
-<<shader-call-order,shader-call-order>>.
-
-For ray tracing invocations that are
-<<shader-call-related,shader-call-related>>:
-
-  * <<memory-model-memory-operation,memory operations>> on
-    code:StorageBuffer, code:Image, and code:ShaderRecordBufferKHR storage
-    classes can: be synchronized using the
-ifdef::VK_KHR_ray_tracing_pipeline[code:ShaderCallKHR]
-ifndef::VK_KHR_ray_tracing_pipeline[code:Device or code:QueueFamily]
-    scope.
-
-  * the code:CallableDataKHR, code:IncomingCallableDataKHR,
-    code:RayPayloadKHR, code:HitAttributeKHR, and code:IncomingRayPayloadKHR
-    storage classes are <<memory-model-shader-io,system-synchronized>> and
-    no application availability and visibility operations are required.
-
-  * memory operations within a single invocation before and after the
-    invocation repack instruction are ordered by
-    <<memory-model-program-order,program-order>> and do not require explicit
-    synchronzation.
-endif::VK_VERSION_1_2,VK_KHR_vulkan_memory_model[]
-
-
-[[ray-tracing-commands]]
-== Ray Tracing Commands
-
-_Ray tracing commands_ provoke work in the ray tracing pipeline.
-Ray tracing commands are recorded into a command buffer and when executed by
-a queue will produce work that executes according to the currently bound ray
-tracing pipeline.
-A ray tracing pipeline must: be bound to a command buffer before any ray
-tracing commands are recorded in that command buffer.
-
-ifdef::VK_NV_ray_tracing[]
-
-[open,refpage='vkCmdTraceRaysNV',desc='Initialize a ray tracing dispatch',type='protos']
---
-:refpage: vkCmdTraceRaysNV
-
-To dispatch ray tracing use:
-
-include::{generated}/api/protos/vkCmdTraceRaysNV.txt[]
-
-  * pname:commandBuffer is the command buffer into which the command will be
-    recorded.
-  * pname:raygenShaderBindingTableBuffer is the buffer object that holds the
-    shader binding table data for the ray generation shader stage.
-  * pname:raygenShaderBindingOffset is the offset in bytes (relative to
-    pname:raygenShaderBindingTableBuffer) of the ray generation shader being
-    used for the trace.
-  * pname:missShaderBindingTableBuffer is the buffer object that holds the
-    shader binding table data for the miss shader stage.
-  * pname:missShaderBindingOffset is the offset in bytes (relative to
-    pname:missShaderBindingTableBuffer) of the miss shader being used for
-    the trace.
-  * pname:missShaderBindingStride is the size in bytes of each shader
-    binding table record in pname:missShaderBindingTableBuffer.
-  * pname:hitShaderBindingTableBuffer is the buffer object that holds the
-    shader binding table data for the hit shader stages.
-  * pname:hitShaderBindingOffset is the offset in bytes (relative to
-    pname:hitShaderBindingTableBuffer) of the hit shader group being used
-    for the trace.
-  * pname:hitShaderBindingStride is the size in bytes of each shader binding
-    table record in pname:hitShaderBindingTableBuffer.
-  * pname:callableShaderBindingTableBuffer is the buffer object that holds
-    the shader binding table data for the callable shader stage.
-  * pname:callableShaderBindingOffset is the offset in bytes (relative to
-    pname:callableShaderBindingTableBuffer) of the callable shader being
-    used for the trace.
-  * pname:callableShaderBindingStride is the size in bytes of each shader
-    binding table record in pname:callableShaderBindingTableBuffer.
-  * pname:width is the width of the ray trace query dimensions.
-  * pname:height is height of the ray trace query dimensions.
-  * pname:depth is depth of the ray trace query dimensions.
-
-When the command is executed, a ray generation group of [eq]#pname:width
-{times} pname:height {times} pname:depth# rays is assembled.
-
-.Valid Usage
-****
-include::{chapters}/commonvalidity/trace_rays_common.txt[]
-  * [[VUID-vkCmdTraceRaysNV-commandBuffer-04624]]
-    pname:commandBuffer must: not be a protected command buffer
-  * [[VUID-vkCmdTraceRaysNV-maxRecursionDepth-03625]]
-    This command must: not cause a pipeline trace ray instruction to be
-    executed from a shader invocation with a <<ray-tracing-recursion-depth,
-    recursion depth>> greater than the value of pname:maxRecursionDepth used
-    to create the bound ray tracing pipeline
-  * [[VUID-vkCmdTraceRaysNV-raygenShaderBindingTableBuffer-04042]]
-    If pname:raygenShaderBindingTableBuffer is non-sparse then it must: be
-    bound completely and contiguously to a single sname:VkDeviceMemory
-    object
-  * [[VUID-vkCmdTraceRaysNV-raygenShaderBindingOffset-02455]]
-    pname:raygenShaderBindingOffset must: be less than the size of
-    pname:raygenShaderBindingTableBuffer
-  * [[VUID-vkCmdTraceRaysNV-raygenShaderBindingOffset-02456]]
-    pname:raygenShaderBindingOffset must: be a multiple of
-    sname:VkPhysicalDeviceRayTracingPropertiesNV::pname:shaderGroupBaseAlignment
-  * [[VUID-vkCmdTraceRaysNV-missShaderBindingTableBuffer-04043]]
-    If pname:missShaderBindingTableBuffer is non-sparse then it must: be
-    bound completely and contiguously to a single sname:VkDeviceMemory
-    object
-  * [[VUID-vkCmdTraceRaysNV-missShaderBindingOffset-02457]]
-    pname:missShaderBindingOffset must: be less than the size of
-    pname:missShaderBindingTableBuffer
-  * [[VUID-vkCmdTraceRaysNV-missShaderBindingOffset-02458]]
-    pname:missShaderBindingOffset must: be a multiple of
-    sname:VkPhysicalDeviceRayTracingPropertiesNV::pname:shaderGroupBaseAlignment
-  * [[VUID-vkCmdTraceRaysNV-hitShaderBindingTableBuffer-04044]]
-    If pname:hitShaderBindingTableBuffer is non-sparse then it must: be
-    bound completely and contiguously to a single sname:VkDeviceMemory
-    object
-  * [[VUID-vkCmdTraceRaysNV-hitShaderBindingOffset-02459]]
-    pname:hitShaderBindingOffset must: be less than the size of
-    pname:hitShaderBindingTableBuffer
-  * [[VUID-vkCmdTraceRaysNV-hitShaderBindingOffset-02460]]
-    pname:hitShaderBindingOffset must: be a multiple of
-    sname:VkPhysicalDeviceRayTracingPropertiesNV::pname:shaderGroupBaseAlignment
-  * [[VUID-vkCmdTraceRaysNV-callableShaderBindingTableBuffer-04045]]
-    If pname:callableShaderBindingTableBuffer is non-sparse then it must: be
-    bound completely and contiguously to a single sname:VkDeviceMemory
-    object
-  * [[VUID-vkCmdTraceRaysNV-callableShaderBindingOffset-02461]]
-    pname:callableShaderBindingOffset must: be less than the size of
-    pname:callableShaderBindingTableBuffer
-  * [[VUID-vkCmdTraceRaysNV-callableShaderBindingOffset-02462]]
-    pname:callableShaderBindingOffset must: be a multiple of
-    sname:VkPhysicalDeviceRayTracingPropertiesNV::pname:shaderGroupBaseAlignment
-  * [[VUID-vkCmdTraceRaysNV-missShaderBindingStride-02463]]
-    pname:missShaderBindingStride must: be a multiple of
-    sname:VkPhysicalDeviceRayTracingPropertiesNV::pname:shaderGroupHandleSize
-  * [[VUID-vkCmdTraceRaysNV-hitShaderBindingStride-02464]]
-    pname:hitShaderBindingStride must: be a multiple of
-    sname:VkPhysicalDeviceRayTracingPropertiesNV::pname:shaderGroupHandleSize
-  * [[VUID-vkCmdTraceRaysNV-callableShaderBindingStride-02465]]
-    pname:callableShaderBindingStride must: be a multiple of
-    sname:VkPhysicalDeviceRayTracingPropertiesNV::pname:shaderGroupHandleSize
-  * [[VUID-vkCmdTraceRaysNV-missShaderBindingStride-02466]]
-    pname:missShaderBindingStride must: be less than or equal to
-    sname:VkPhysicalDeviceRayTracingPropertiesNV::pname:maxShaderGroupStride
-  * [[VUID-vkCmdTraceRaysNV-hitShaderBindingStride-02467]]
-    pname:hitShaderBindingStride must: be less than or equal to
-    sname:VkPhysicalDeviceRayTracingPropertiesNV::pname:maxShaderGroupStride
-  * [[VUID-vkCmdTraceRaysNV-callableShaderBindingStride-02468]]
-    pname:callableShaderBindingStride must: be less than or equal to
-    sname:VkPhysicalDeviceRayTracingPropertiesNV::pname:maxShaderGroupStride
-  * [[VUID-vkCmdTraceRaysNV-width-02469]]
-    pname:width must: be less than or equal to
-    sname:VkPhysicalDeviceLimits::pname:maxComputeWorkGroupCount[0]
-  * [[VUID-vkCmdTraceRaysNV-height-02470]]
-    pname:height must: be less than or equal to
-    sname:VkPhysicalDeviceLimits::pname:maxComputeWorkGroupCount[1]
-  * [[VUID-vkCmdTraceRaysNV-depth-02471]]
-    pname:depth must: be less than or equal to
-    sname:VkPhysicalDeviceLimits::pname:maxComputeWorkGroupCount[2]
-****
-
-include::{generated}/validity/protos/vkCmdTraceRaysNV.txt[]
---
-
-endif::VK_NV_ray_tracing[]
-
-ifdef::VK_KHR_ray_tracing_pipeline[]
-[open,refpage='vkCmdTraceRaysKHR',desc='Initialize a ray tracing dispatch',type='protos']
---
-:refpage: vkCmdTraceRaysKHR
-
-To dispatch ray tracing use:
-
-include::{generated}/api/protos/vkCmdTraceRaysKHR.txt[]
-
-  * pname:commandBuffer is the command buffer into which the command will be
-    recorded.
-  * pname:pRaygenShaderBindingTable is a
-    slink:VkStridedDeviceAddressRegionKHR that holds the shader binding
-    table data for the ray generation shader stage.
-  * pname:pMissShaderBindingTable is a slink:VkStridedDeviceAddressRegionKHR
-    that holds the shader binding table data for the miss shader stage.
-  * pname:pHitShaderBindingTable is a slink:VkStridedDeviceAddressRegionKHR
-    that holds the shader binding table data for the hit shader stage.
-  * pname:pCallableShaderBindingTable is a
-    slink:VkStridedDeviceAddressRegionKHR that holds the shader binding
-    table data for the callable shader stage.
-  * pname:width is the width of the ray trace query dimensions.
-  * pname:height is height of the ray trace query dimensions.
-  * pname:depth is depth of the ray trace query dimensions.
-
-When the command is executed, a ray generation group of [eq]#pname:width
-{times} pname:height {times} pname:depth# rays is assembled.
-
-.Valid Usage
-****
-include::{chapters}/commonvalidity/trace_rays_common.txt[]
-include::{chapters}/commonvalidity/trace_rays_common_khr.txt[]
-  * [[VUID-vkCmdTraceRaysKHR-commandBuffer-04625]]
-    pname:commandBuffer must: not be a protected command buffer
-  * [[VUID-vkCmdTraceRaysKHR-width-03626]]
-    pname:width must: be less than or equal to
-    [eq]#sname:VkPhysicalDeviceLimits::pname:maxComputeWorkGroupCount[0]
-    {times} sname:VkPhysicalDeviceLimits::pname:maxComputeWorkGroupSize[0]#
-  * [[VUID-vkCmdTraceRaysKHR-height-03627]]
-    pname:height must: be less than or equal to
-    [eq]#sname:VkPhysicalDeviceLimits::pname:maxComputeWorkGroupCount[1]
-    {times} sname:VkPhysicalDeviceLimits::pname:maxComputeWorkGroupSize[1]#
-  * [[VUID-vkCmdTraceRaysKHR-depth-03628]]
-    pname:depth must: be less than or equal to
-    [eq]#sname:VkPhysicalDeviceLimits::pname:maxComputeWorkGroupCount[2]
-    {times} sname:VkPhysicalDeviceLimits::pname:maxComputeWorkGroupSize[2]#
-  * [[VUID-vkCmdTraceRaysKHR-width-03629]]
-    [eq]#pname:width {times} pname:height {times} pname:depth# must: be less
-    than or equal to
-    sname:VkPhysicalDeviceRayTracingPipelinePropertiesKHR::pname:maxRayDispatchInvocationCount
-****
-
-include::{generated}/validity/protos/vkCmdTraceRaysKHR.txt[]
---
-
-[open,refpage='VkStridedDeviceAddressRegionKHR',desc='Structure specifying a region of device addresses with a stride',type='structs']
---
-:refpage: VkStridedDeviceAddressRegionKHR
-
-The sname:VkStridedDeviceAddressRegionKHR structure is defined as:
-
-include::{generated}/api/structs/VkStridedDeviceAddressRegionKHR.txt[]
-
-  * pname:deviceAddress is the device address (as returned by the
-    flink:vkGetBufferDeviceAddress command) at which the region starts, or
-    zero if the region is unused.
-  * pname:stride is the byte stride between consecutive elements.
-  * pname:size is the size in bytes of the region starting at
-    pname:deviceAddress.
-
-.Valid Usage
-****
-  * [[VUID-VkStridedDeviceAddressRegionKHR-size-04631]]
-    If pname:size is not zero, all addresses between pname:deviceAddress and
-    [eq]#pname:deviceAddress {plus} pname:size - 1# must: be in the buffer
-    device address range of the same buffer
-  * [[VUID-VkStridedDeviceAddressRegionKHR-size-04632]]
-    If pname:size is not zero, pname:stride must: be less than or equal to
-    the size of the buffer from which pname:deviceAddress was queried
-****
-
-include::{generated}/validity/structs/VkStridedDeviceAddressRegionKHR.txt[]
---
-
-ifdef::VK_HUAWEI_invocation_mask[]
-
-[open,refpage='vkCmdBindInvocationMaskHUAWEI',desc='Bind an invocation mask image on a command buffer',type='protos']
---
-
-When invocation mask image usage is enabled in the bound ray tracing
-pipeline, the pipeline uses an invocation mask image specified by the
-command:
-
-include::{generated}/api/protos/vkCmdBindInvocationMaskHUAWEI.txt[]
-
-  * pname:commandBuffer is the command buffer into which the command will be
-    recorded
-  * pname:imageView is an image view handle that specifies the invocation
-    mask image pname:imageView may: be set to dlink:VK_NULL_HANDLE, which is
-    equivalent to specifying a view of an image filled with ones value.
-  * pname:imageLayout is the layout that the image subresources accessible
-    from pname:imageView will be in when the invocation mask image is
-    accessed
-
-.Valid Usage
-****
-  * [[VUID-vkCmdBindInvocationMaskHUAWEI-None-04976]]
-    The <<features-invocationMask,invocation mask image>> feature must: be
-    enabled
-  * [[VUID-vkCmdBindInvocationMaskHUAWEI-imageView-04977]]
-    If pname:imageView is not dlink:VK_NULL_HANDLE, it must: be a valid
-    slink:VkImageView handle of type ename:VK_IMAGE_VIEW_TYPE_2D
-  * [[VUID-vkCmdBindInvocationMaskHUAWEI-imageView-04978]]
-    If pname:imageView is not dlink:VK_NULL_HANDLE, it must: have a format
-    of ename:VK_FORMAT_R8_UINT
-  * [[VUID-vkCmdBindInvocationMaskHUAWEI-imageView-04979]]
-    If pname:imageView is not dlink:VK_NULL_HANDLE, it must: have been
-    created with ename:VK_IMAGE_USAGE_INVOCATION_MASK_BIT_HUAWEI set
-  * [[VUID-vkCmdBindInvocationMaskHUAWEI-imageView-04980]]
-    If pname:imageView is not dlink:VK_NULL_HANDLE, pname:imageLayout must:
-    be ename:VK_IMAGE_LAYOUT_GENERAL
-  * [[VUID-vkCmdBindInvocationMaskHUAWEI-width-04981]]
-    Thread mask image resolution must match the pname:width and pname:height
-    in flink:vkCmdTraceRaysKHR
-  * [[VUID-vkCmdBindInvocationMaskHUAWEI-None-04982]]
-    Each element in the invocation mask image must: have the value `0` or
-    `1`.
-    The value 1 means the invocation is active
-  * [[VUID-vkCmdBindInvocationMaskHUAWEI-width-04983]]
-    pname:width in flink:vkCmdTraceRaysKHR should be 1
-****
-
-include::{generated}/validity/protos/vkCmdBindInvocationMaskHUAWEI.txt[]
---
-endif::VK_HUAWEI_invocation_mask[]
-
-[open,refpage='vkCmdTraceRaysIndirectKHR',desc='Initialize an indirect ray tracing dispatch',type='protos']
---
-:refpage: vkCmdTraceRaysIndirectKHR
-
-To dispatch ray tracing, with some parameters sourced on the device, use:
-
-include::{generated}/api/protos/vkCmdTraceRaysIndirectKHR.txt[]
-
-  * pname:commandBuffer is the command buffer into which the command will be
-    recorded.
-  * pname:pRaygenShaderBindingTable is a
-    slink:VkStridedDeviceAddressRegionKHR that holds the shader binding
-    table data for the ray generation shader stage.
-  * pname:pMissShaderBindingTable is a slink:VkStridedDeviceAddressRegionKHR
-    that holds the shader binding table data for the miss shader stage.
-  * pname:pHitShaderBindingTable is a slink:VkStridedDeviceAddressRegionKHR
-    that holds the shader binding table data for the hit shader stage.
-  * pname:pCallableShaderBindingTable is a
-    slink:VkStridedDeviceAddressRegionKHR that holds the shader binding
-    table data for the callable shader stage.
-  * pname:indirectDeviceAddress is a buffer device address which is a
-    pointer to a slink:VkTraceRaysIndirectCommandKHR structure containing
-    the trace ray parameters.
-
-fname:vkCmdTraceRaysIndirectKHR behaves similarly to flink:vkCmdTraceRaysKHR
-except that the ray trace query dimensions are read by the device from
-pname:indirectDeviceAddress during execution.
-
-.Valid Usage
-****
-include::{chapters}/commonvalidity/trace_rays_common.txt[]
-include::{chapters}/commonvalidity/trace_rays_common_khr.txt[]
-  * [[VUID-vkCmdTraceRaysIndirectKHR-indirectDeviceAddress-03632]]
-    If the buffer from which pname:indirectDeviceAddress was queried is
-    non-sparse then it must: be bound completely and contiguously to a
-    single sname:VkDeviceMemory object
-  * [[VUID-vkCmdTraceRaysIndirectKHR-indirectDeviceAddress-03633]]
-    The buffer from which pname:indirectDeviceAddress was queried must: have
-    been created with the ename:VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT bit set
-  * [[VUID-vkCmdTraceRaysIndirectKHR-indirectDeviceAddress-03634]]
-    pname:indirectDeviceAddress must: be a multiple of `4`
-  * [[VUID-vkCmdTraceRaysIndirectKHR-commandBuffer-03635]]
-    pname:commandBuffer must: not be a protected command buffer
-  * [[VUID-vkCmdTraceRaysIndirectKHR-indirectDeviceAddress-03636]]
-    All device addresses between pname:indirectDeviceAddress and
-    [eq]#pname:indirectDeviceAddress {plus}
-    code:sizeof(sname:VkTraceRaysIndirectCommandKHR) - 1# must: be in the
-    buffer device address range of the same buffer
-  * [[VUID-vkCmdTraceRaysIndirectKHR-rayTracingPipelineTraceRaysIndirect-03637]]
-    The <<features-rayTracingPipelineTraceRaysIndirect,
-    sname:VkPhysicalDeviceRayTracingPipelineFeaturesKHR::pname:rayTracingPipelineTraceRaysIndirect>>
-    feature must: be enabled
-ifdef::VK_NV_ray_tracing_motion_blur[]
-  * [[VUID-vkCmdTraceRaysIndirectKHR-rayTracingMotionBlurPipelineTraceRaysIndirect-04951]]
-    If the bound ray tracing pipeline was created with
-    ename:VK_PIPELINE_CREATE_RAY_TRACING_ALLOW_MOTION_BIT_NV
-    sname:VkPhysicalDeviceRayTracingMotionBlurFeaturesNV::pname:rayTracingMotionBlurPipelineTraceRaysIndirect
-    feature must: be enabled
-endif::VK_NV_ray_tracing_motion_blur[]
-****
-
-include::{generated}/validity/protos/vkCmdTraceRaysIndirectKHR.txt[]
---
-
-[open,refpage='VkTraceRaysIndirectCommandKHR',desc='Structure specifying the parameters of an indirect ray tracing command',type='structs']
---
-:refpage: VkTraceRaysIndirectCommandKHR
-
-The sname:VkTraceRaysIndirectCommandKHR structure is defined as:
-
-include::{generated}/api/structs/VkTraceRaysIndirectCommandKHR.txt[]
-
-  * pname:width is the width of the ray trace query dimensions.
-  * pname:height is height of the ray trace query dimensions.
-  * pname:depth is depth of the ray trace query dimensions.
-
-The members of sname:VkTraceRaysIndirectCommandKHR have the same meaning as
-the similarly named parameters of flink:vkCmdTraceRaysKHR.
-
-.Valid Usage
-****
-  * [[VUID-VkTraceRaysIndirectCommandKHR-width-03638]]
-    pname:width must: be less than or equal to
-    [eq]#sname:VkPhysicalDeviceLimits::pname:maxComputeWorkGroupCount[0]
-    {times} sname:VkPhysicalDeviceLimits::pname:maxComputeWorkGroupSize[0]#
-  * [[VUID-VkTraceRaysIndirectCommandKHR-height-03639]]
-    pname:height must: be less than or equal to
-    [eq]#sname:VkPhysicalDeviceLimits::pname:maxComputeWorkGroupCount[1]
-    {times} sname:VkPhysicalDeviceLimits::pname:maxComputeWorkGroupSize[1]#
-  * [[VUID-VkTraceRaysIndirectCommandKHR-depth-03640]]
-    pname:depth must: be less than or equal to
-    [eq]#sname:VkPhysicalDeviceLimits::pname:maxComputeWorkGroupCount[2]
-    {times} sname:VkPhysicalDeviceLimits::pname:maxComputeWorkGroupSize[2]#
-  * [[VUID-VkTraceRaysIndirectCommandKHR-width-03641]]
-    [eq]#pname:width {times} pname:height {times} pname:depth# must: be less
-    than or equal to
-    sname:VkPhysicalDeviceRayTracingPipelinePropertiesKHR::pname:maxRayDispatchInvocationCount
-****
-
-include::{generated}/validity/structs/VkTraceRaysIndirectCommandKHR.txt[]
---
-endif::VK_KHR_ray_tracing_pipeline[]
-
-
-[[shader-binding-table]]
-== Shader Binding Table
-
-A _shader binding table_ is a resource which establishes the relationship
-between the ray tracing pipeline and the acceleration structures that were
-built for the ray tracing pipeline.
-It indicates the shaders that operate on each geometry in an acceleration
-structure.
-In addition, it contains the resources accessed by each shader, including
-indices of textures, buffer device addresses, and constants.
-The application allocates and manages _shader binding tables_ as
-slink:VkBuffer objects.
-
-Each entry in the shader binding table consists of
-pname:shaderGroupHandleSize bytes of data, either as queried by
-flink:vkGetRayTracingShaderGroupHandlesKHR to refer to those specified
-shaders, or all zeros to refer to a zero shader group.
-A zero shader group behaves as though it is a shader group consisting
-entirely of ename:VK_SHADER_UNUSED_KHR.
-The remainder of the data specified by the stride is application-visible
-data that can be referenced by a code:ShaderRecordBufferKHR block in the
-shader.
-
-The shader binding tables to use in a ray tracing pipeline are passed to the
-ifdef::VK_NV_ray_tracing[]
-flink:vkCmdTraceRaysNV,
-endif::VK_NV_ray_tracing[]
-flink:vkCmdTraceRaysKHR, or flink:vkCmdTraceRaysIndirectKHR commands.
-Shader binding tables are read-only in shaders that are executing on the ray
-tracing pipeline.
-
-Shader variables identified with the code:ShaderRecordBufferKHR storage
-class are used to access the provided shader binding table.
-Such variables must: be:
-
-  * typed as code:OpTypeStruct, or an array of this type,
-  * identified with a code:Block decoration, and
-  * laid out explicitly using the code:Offset, code:ArrayStride, and
-    code:MatrixStride decorations as specified in
-    <<interfaces-resources-layout,Offset and Stride Assignment>>.
-
-The code:Offset decoration for any member of a code:Block-decorated variable
-in the code:ShaderRecordBufferKHR storage class must: not cause the space
-required for that variable to extend outside the range [eq]#[0,
-pname:maxStorageBufferRange)#.
-
-Accesses to the shader binding table from ray tracing pipelines must: be
-<<synchronization-dependencies,synchronized>> with the
-ename:VK_PIPELINE_STAGE_RAY_TRACING_SHADER_BIT_KHR
-<<synchronization-pipeline-stages, pipeline stage>> and an
-<<synchronization-access-types, access type>> of
-ename:VK_ACCESS_SHADER_READ_BIT.
-
-[NOTE]
-.Note
-====
-Because different shader record buffers can be associated with the same
-shader, a shader variable with code:ShaderRecordBufferKHR storage class will
-not be dynamically uniform if different invocations of the same shader can
-reference different data in the shader record buffer, such as if the same
-shader occurs twice in the shader binding table with a different shader
-record buffer.
-In this case, indexing resources based on values in the
-code:ShaderRecordBufferKHR storage class, the index should be decorated as
-code:NonUniform.
-====
-
-[[shader-binding-table-indexing-rules]]
-=== Indexing Rules
-
-In order to execute the correct shaders and access the correct resources
-during a ray tracing dispatch, the implementation must: be able to locate
-shader binding table entries at various stages of execution.
-This is accomplished by defining a set of indexing rules that compute shader
-binding table record positions relative to the buffer's base address in
-memory.
-The application must: organize the contents of the shader binding table's
-memory in a way that application of the indexing rules will lead to correct
-records.
-
-
-==== Ray Generation Shaders
-
-Only one ray generation shader is executed per ray tracing dispatch.
-
-ifdef::VK_KHR_ray_tracing_pipeline[]
-For flink:vkCmdTraceRaysKHR, the location of the ray generation shader is
-specified by the pname:pRaygenShaderBindingTable->deviceAddress parameter
--- there is no indexing.
-All data accessed must: be less than pname:pRaygenShaderBindingTable->size
-bytes from pname:deviceAddress.
-pname:pRaygenShaderBindingTable->stride is unused, and must: be equal to
-pname:pRaygenShaderBindingTable->size.
-endif::VK_KHR_ray_tracing_pipeline[]
-
-ifdef::VK_NV_ray_tracing[]
-For flink:vkCmdTraceRaysNV, the location of the ray generation shader is
-specified by the pname:raygenShaderBindingTableBuffer and
-pname:raygenShaderBindingOffset parameters -- there is no indexing.
-endif::VK_NV_ray_tracing[]
-
-
-[[shader-binding-table-hit-shader-indexing]]
-==== Hit Shaders
-
-The base for the computation of intersection, any-hit, and closest hit
-shader locations is the code:instanceShaderBindingTableRecordOffset value
-stored with each instance of a top-level acceleration structure
-(slink:VkAccelerationStructureInstanceKHR).
-This value determines the beginning of the shader binding table records for
-a given instance.
-
-In the following rule, code:geometryIndex refers to the
-<<acceleration-structure-geometry-index, geometry index>> of the intersected
-geometry within the instance.
-
-The code:sbtRecordOffset and code:sbtRecordStride values are passed in as
-parameters to
-ifdef::VK_NV_ray_tracing[code:traceNV()]
-ifdef::VK_NV_ray_tracing+VK_KHR_ray_tracing_pipeline[ or ]
-ifdef::VK_KHR_ray_tracing_pipeline[code:traceRayEXT()]
-calls made in the shaders.
-See Section 8.19 (Ray Tracing Functions) of the OpenGL Shading Language
-Specification for more details.
-In SPIR-V, these correspond to the code:SBTOffset and code:SBTStride
-parameters to the
-ifdef::VK_NV_ray_tracing[code:OpTraceRayNV]
-ifdef::VK_NV_ray_tracing+VK_KHR_ray_tracing_pipeline[ or ]
-ifdef::VK_KHR_ray_tracing_pipeline[code:OpTraceRayKHR]
-ifdef::VK_NV_ray_tracing_motion_blur[ or code:OpTraceRayMotionNV]
-instruction.
-
-The result of this computation is then added to
-ifdef::VK_KHR_ray_tracing_pipeline[]
-pname:pHitShaderBindingTable->deviceAddress, a device address passed to
-flink:vkCmdTraceRaysKHR
-endif::VK_KHR_ray_tracing_pipeline[]
-ifdef::VK_NV_ray_tracing+VK_KHR_ray_tracing_pipeline[, or ]
-ifdef::VK_NV_ray_tracing[]
-pname:hitShaderBindingOffset, a base offset passed to flink:vkCmdTraceRaysNV
-endif::VK_NV_ray_tracing[]
-.
-
-ifdef::VK_KHR_ray_tracing_pipeline[]
-For flink:vkCmdTraceRaysKHR, the complete rule to compute a hit shader
-binding table record address in the pname:pHitShaderBindingTable is:
-
-  {empty}:: [eq]#pname:pHitShaderBindingTable->deviceAddress {plus}
-            pname:pHitShaderBindingTable->stride {times} (
-            code:instanceShaderBindingTableRecordOffset {plus}
-            code:geometryIndex {times} code:sbtRecordStride {plus}
-            code:sbtRecordOffset )#
-
-All data accessed must: be less than pname:pHitShaderBindingTable->size
-bytes from the base address.
-endif::VK_KHR_ray_tracing_pipeline[]
-
-ifdef::VK_NV_ray_tracing[]
-For flink:vkCmdTraceRaysNV, the offset and stride come from direct
-parameters, so the full rule to compute a hit shader binding table record
-address in the pname:hitShaderBindingTableBuffer is:
-
-  {empty}:: [eq]#pname:hitShaderBindingOffset {plus}
-            pname:hitShaderBindingStride {times} (
-            code:instanceShaderBindingTableRecordOffset {plus}
-            code:geometryIndex {times} code:sbtRecordStride {plus}
-            code:sbtRecordOffset )#
-
-endif::VK_NV_ray_tracing[]
-
-
-==== Miss Shaders
-
-A miss shader is executed whenever a ray query fails to find an intersection
-for the given scene geometry.
-Multiple miss shaders may: be executed throughout a ray tracing dispatch.
-
-The base for the computation of miss shader locations is
-ifdef::VK_KHR_ray_tracing_pipeline[]
-pname:pMissShaderBindingTable->deviceAddress, a device address passed into
-flink:vkCmdTraceRaysKHR
-endif::VK_KHR_ray_tracing_pipeline[]
-ifdef::VK_NV_ray_tracing+VK_KHR_ray_tracing_pipeline[, or ]
-ifdef::VK_NV_ray_tracing[]
-pname:missShaderBindingOffset, a base offset passed into
-flink:vkCmdTraceRaysNV
-endif::VK_NV_ray_tracing[]
-.
-
-The code:missIndex value is passed in as a parameter to
-ifdef::VK_NV_ray_tracing[code:traceNV()]
-ifdef::VK_NV_ray_tracing+VK_KHR_ray_tracing_pipeline[ or ]
-ifdef::VK_KHR_ray_tracing_pipeline[code:traceRayEXT()]
-calls made in the shaders.
-See Section 8.19 (Ray Tracing Functions) of the OpenGL Shading Language
-Specification for more details.
-In SPIR-V, this corresponds to the code:MissIndex parameter to the
-ifdef::VK_NV_ray_tracing[code:OpTraceRayNV]
-ifdef::VK_NV_ray_tracing+VK_KHR_ray_tracing_pipeline[ or ]
-ifdef::VK_KHR_ray_tracing_pipeline[code:OpTraceRayKHR]
-ifdef::VK_NV_ray_tracing_motion_blur[ or code:OpTraceRayMotionNV]
-instruction.
-
-ifdef::VK_KHR_ray_tracing_pipeline[]
-For flink:vkCmdTraceRaysKHR, the complete rule to compute a miss shader
-binding table record address in the pname:pMissShaderBindingTable is:
-
-  {empty}:: [eq]#pname:pMissShaderBindingTable->deviceAddress {plus}
-            pname:pMissShaderBindingTable->stride {times} code:missIndex#
-
-All data accessed must: be less than pname:pMissShaderBindingTable->size
-bytes from the base address.
-endif::VK_KHR_ray_tracing_pipeline[]
-
-ifdef::VK_NV_ray_tracing[]
-For flink:vkCmdTraceRaysNV, the offset and stride come from direct
-parameters, so the full rule to compute a miss shader binding table record
-address in the pname:missShaderBindingTableBuffer is:
-
-  {empty}:: [eq]#pname:missShaderBindingOffset {plus}
-            pname:missShaderBindingStride {times} code:missIndex#
-
-endif::VK_NV_ray_tracing[]
-
-
-==== Callable Shaders
-
-A callable shader is executed when requested by a ray tracing shader.
-Multiple callable shaders may: be executed throughout a ray tracing
-dispatch.
-
-The base for the computation of callable shader locations is
-ifdef::VK_KHR_ray_tracing_pipeline[]
-pname:pCallableShaderBindingTable->deviceAddress, a device address passed
-into flink:vkCmdTraceRaysKHR
-endif::VK_KHR_ray_tracing_pipeline[]
-ifdef::VK_NV_ray_tracing+VK_KHR_ray_tracing_pipeline[, or ]
-ifdef::VK_NV_ray_tracing[]
-pname:callableShaderBindingOffset, a base offset passed into
-flink:vkCmdTraceRaysNV
-endif::VK_NV_ray_tracing[]
-.
-
-The code:sbtRecordIndex value is passed in as a parameter to
-ifdef::VK_NV_ray_tracing[code:executeCallableNV()]
-ifdef::VK_NV_ray_tracing+VK_KHR_ray_tracing_pipeline[ or ]
-ifdef::VK_KHR_ray_tracing_pipeline[code:executeCallableEXT()]
-calls made in the shaders.
-See Section 8.19 (Ray Tracing Functions) of the OpenGL Shading Language
-Specification for more details.
-In SPIR-V, this corresponds to the code:SBTIndex parameter to the
-ifdef::VK_NV_ray_tracing[code:OpExecuteCallableNV]
-ifdef::VK_NV_ray_tracing+VK_KHR_ray_tracing_pipeline[ or ]
-ifdef::VK_KHR_ray_tracing_pipeline[code:OpExecuteCallableKHR]
-instruction.
-
-ifdef::VK_KHR_ray_tracing_pipeline[]
-For flink:vkCmdTraceRaysKHR, the complete rule to compute a callable shader
-binding table record address in the pname:pCallableShaderBindingTable is:
-
-  {empty}:: [eq]#pname:pCallableShaderBindingTable->deviceAddress {plus}
-            pname:pCallableShaderBindingTable->stride {times}
-            code:sbtRecordIndex#
-
-All data accessed must: be less than pname:pCallableShaderBindingTable->size
-bytes from the base address.
-endif::VK_KHR_ray_tracing_pipeline[]
-
-ifdef::VK_NV_ray_tracing[]
-For flink:vkCmdTraceRaysNV, the offset and stride come from direct
-parameters, so the full rule to compute a callable shader binding table
-record address in the pname:callableShaderBindingTableBuffer is:
-
-  {empty}:: [eq]#pname:callableShaderBindingOffset {plus}
-            pname:callableShaderBindingStride {times} code:sbtRecordIndex#
-
-endif::VK_NV_ray_tracing[]
-
-
-[[ray-tracing-pipeline-stack]]
-== Ray Tracing Pipeline Stack
-
-Ray tracing pipelines have a potentially large set of shaders which may: be
-invoked in various call chain combinations to perform ray tracing.
-To store parameters for a given shader execution, an implementation may: use
-a stack of data in memory.
-This stack must: be sized to the sum of the stack sizes of all shaders in
-any call chain executed by the application.
-
-If the stack size is not set explicitly, the stack size for a pipeline is:
-
-  {empty}:: [eq]#rayGenStackMax {plus} min(1,
-            pname:maxPipelineRayRecursionDepth) {times}
-            max(closestHitStackMax, missStackMax, intersectionStackMax
-            {plus} anyHitStackMax) {plus} max(0,
-            pname:maxPipelineRayRecursionDepth-1) {times}
-            max(closestHitStackMax, missStackMax) {plus} 2 {times}
-            callableStackMax#
-
-where [eq]#rayGenStackMax#, [eq]#closestHitStackMax#, [eq]#missStackMax#,
-[eq]#anyHitStackMax#, [eq]#intersectionStackMax#, and [eq]#callableStackMax#
-are the maximum stack values queried by the respective shader stages for any
-shaders in any shader groups defined by the pipeline.
-
-This stack size is potentially significant, so an application may: want to
-provide a more accurate stack size after pipeline compilation.
-The value that the application provides is the maximum value of the sum of
-all shaders in a call chain across all possible call chains, taking into
-account any application specific knowledge about the properties of the call
-chains.
-
-[NOTE]
-.Note
-====
-For example, if an application has two types of closest hit and miss shaders
-that it can use but the first level of rays will only use the first kind
-(possibly reflection) and the second level will only use the second kind
-(occlusion or shadow ray, for example) then the application can compute the
-stack size by something similar to:
-
-  {empty}:: [eq]#code:rayGenStack {plus} max(code:closestHit1Stack,
-            code:miss1Stack) {plus} max(code:closestHit2Stack,
-            code:miss2Stack)#
-
-This is guaranteed to be no larger than the default stack size computation
-which assumes that both call levels may be the larger of the two.
-====
diff --git a/registry/vulkan/chapters/raytraversal.txt b/registry/vulkan/chapters/raytraversal.txt
deleted file mode 100644
index 280490e..0000000
--- a/registry/vulkan/chapters/raytraversal.txt
+++ /dev/null
@@ -1,602 +0,0 @@
-// Copyright 2018-2021 The Khronos Group Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-[[ray-traversal]]
-= Ray Traversal
-
-The ray traversal process identifies and handles intersections between a ray
-and geometries in an acceleration structure.
-
-Ray traversal cannot be started by a Vulkan API command directly - a shader
-must execute
-ifdef::VK_KHR_ray_query[code:OpRayQueryProceedKHR]
-ifdef::VK_KHR_ray_query+VK_KHR_ray_tracing_pipeline[or]
-ifdef::VK_KHR_ray_tracing_pipeline[code:OpTraceRayKHR]
-.
-ifdef::VK_KHR_ray_tracing_pipeline[]
-When the <<features-rayTracingPipeline,pname:rayTracingPipeline>> feature is
-enabled, code:OpTraceRayKHR can: be used for <<ray-tracing, ray tracing>> in
-a <<pipelines-ray-tracing, ray tracing pipeline>>.
-endif::VK_KHR_ray_tracing_pipeline[]
-ifdef::VK_KHR_ray_query[]
-When the <<features-rayQuery,pname:rayQuery>> feature is enabled,
-code:OpRayQueryProceedKHR can: be used in any shader stage.
-endif::VK_KHR_ray_query[]
-
-[[ray-intersection-candidate-determination]]
-== Ray Intersection Candidate Determination
-
-Once tracing begins, rays are first tested against instances in a top-level
-acceleration structure.
-A ray that intersects an instance will be transformed into the space of the
-instance to continue traversal within that instance; therefore the transform
-matrix stored in the instance must be invertible.
-
-Next, rays are tested against geometries in an bottom-level acceleration
-structure to determine if a hit occurred between them, initially based only
-on their geometric properties (i.e. their vertices).
-The implementation performs similar operations to that of rasterization, but
-with the effective viewport determined by the parameters of the ray, and the
-geometry transformed into a space determined by that viewport.
-
-The vertices of each primitive are transformed from acceleration structure
-space #~as~# to ray space #~r~# according to the ray origin and direction as
-follows:
-
-[latexmath]
-++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-\left(
-    \begin{array}{c}
-        x_{r} \\
-        y_{r}\\
-        z_{r}
-    \end{array}
-\right) =
-\left(
-    \begin{matrix}
-        a_x^2(1-c)  + c    & a_xa_y(1-c) - sa_z & a_xa_z(1-c) + sa_y \\
-        a_xa_y(1-c) + sa_z & a_y^2(1-c)  + c    & a_ya_z(1-c) - sa_x \\
-        a_xa_z(1-c) - sa_y & a_ya_z(1-c) + sa_x & a_z^2(1-c)  + c
-    \end{matrix}
-\right)
-\left(
-    \begin{array}{c}
-        x_{as} - o_x \\
-        y_{as} - o_y \\
-        z_{as} - o_z
-    \end{array}
-\right)
-++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-latexmath:[\mathbf{a}] is the axis of rotation from the unnormalized ray
-direction vector latexmath:[\mathbf{d}] to the axis vector
-latexmath:[\mathbf{k}]:
-
-[latexmath]
-++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-\mathbf{a} = \begin{cases}
-    \frac{\mathbf{d} \times \mathbf{k}}{|| \mathbf{d} \times \mathbf{k} ||} & \mathrm{if}\; || \mathbf{d} \times \mathbf{k} || \ne 0 \\
-    \left(\begin{array}{c}
-    0 \\
-    1 \\
-    0
-    \end{array}
-    \right) & \mathrm{if}\; || \mathbf{d} \times \mathbf{k} || = 0 \\
-  \end{cases}
-++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-latexmath:[\mathit{s}] and latexmath:[\mathit{c}] are the sine and cosine of
-the angle of rotation about latexmath:[\mathbf{a}] from
-latexmath:[\mathbf{d}] to latexmath:[\mathbf{k}]:
-
-[latexmath]
-++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-\begin{aligned}
-c      &= {{\mathbf{d} \cdot \mathbf{k}}\over{||\mathbf{d}||}} \\
-s      &= \sqrt{1 - c^2}
-\end{aligned}
-++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-latexmath:[\mathbf{k}] is the unit vector:
-
-[latexmath]
-++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-\mathbf{k} = \left(
-    \begin{array}{c}
-        0 \\
-        0 \\
-        -1
-    \end{array}
-\right)
-++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-latexmath:[\mathbf{o}] and latexmath:[\mathbf{d}] are the ray origin and
-unnormalized direction, respectively; the vector described by [eq]#x~as~#,
-[eq]#y~as~#, and [eq]#z~as~# is any position in acceleration structure
-space; and the vector described by [eq]#x~r~#, [eq]#y~r~#, and [eq]#z~r~# is
-the same position in ray space.
-
-An _intersection candidate_ is a unique point of intersection between a ray
-and a geometric primitive.
-For any primitive that has within its bounds a position
-latexmath:[\mathbf{xyz_{as}}] such that
-
-[latexmath]
-++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-\begin{aligned}
-             x_r &= 0 \\
-             y_r &= 0 \\
-t_\mathit{min} \lt {-{z_r}\over{||\mathbf{d}||}}  &\lt t_\mathit{max}  & \text{if the primitive is a triangle,} \\
-t_\mathit{min} \leq {-{z_r}\over{||\mathbf{d}||}} &\leq t_\mathit{max} & \text{otherwise} \\
-\end{aligned}
-++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-(where latexmath:[t = {-{z_r}\over{||\mathbf{d}||}}]), an intersection
-candidate exists.
-
-Triangle primitive bounds consist of all points on the plane formed by the
-three vertices and within the bounds of the edges between the vertices,
-subject to the watertightness constraints below.
-AABB primitive bounds consist of all points within an implementation-defined
-bound which includes the specified box.
-
-[NOTE]
-.Note
-====
-The bounds of the AABB including all points internal to the bound implies
-that a ray started within the AABB will hit that AABB.
-====
-
-[[raytraversal-ray-intersection-candidate-diagram]]
-image::{images}/ray_intersection_candidate.svg[align="center",title="Ray intersection candidate",opts="{imageopts}"]
-
-The determination of this condition is performed in an implementation
-specific manner, and may: be performed with floating point operations.
-Due to the complexity and number of operations involved, inaccuracies are
-expected, particularly as the scale of values involved begins to diverge.
-Implementations should: take efforts to maintain as much precision as
-possible.
-
-[NOTE]
-.Note
-====
-One very common case is when geometries are close to each other at some
-distance from the origin in acceleration structure space, where an effect
-similar to "`z-fighting`" is likely to be observed.
-Applications can mitigate this by ensuring their detailed geometries remain
-close to the origin.
-
-Another likely case is when the origin of a ray is set to a position on a
-previously intersected surface, and its [eq]#t~min~# is zero or near zero;
-an intersection may be detected on the emitting surface.
-This case can usually be mitigated by offsetting [eq]#t~min~# slightly.
-====
-
-ifdef::VK_NV_ray_tracing_motion_blur[]
-For a motion primitive or a motion instance, the positions for intersection
-are evaluated at the time specified in the code:time parameter to
-code:OpTraceRayMotionNV by interpolating between the two endpoints as
-specified for the given motion type.
-If a motion acceleration structure is traced with code:OpTraceRayKHR, it
-behaves as a code:OpTraceRayMotionNV with code:time of 0.0.
-endif::VK_NV_ray_tracing_motion_blur[]
-
-In the case of AABB geometries, implementations may: increase their size in
-an acceleration structure in order to mitigate precision issues.
-This may: result in false positive intersections being reported to the
-application.
-
-For triangle intersection candidates, the [eq]#b# and [eq]#c#
-<<primsrast-polygon-barycentrics,barycentric coordinates>> on the triangle
-where the above condition is met are made available to future shading.
-ifdef::VK_KHR_ray_tracing_pipeline[]
-If the ray was traced with code:OpTraceRayKHR, these values are available as
-a vector of 2 32-bit floating point values in the code:HitAttributeKHR
-storage class.
-endif::VK_KHR_ray_tracing_pipeline[]
-
-Once an intersection candidate is determined, it proceeds through the
-following operations, in order:
-
-    . <<ray-intersection-culling>>
-    . <<ray-intersection-confirmation>>
-    . <<ray-closest-hit-determination>>
-    . <<ray-result-determination>>
-
-The sections below describe the exact details of these tests.
-There is no ordering guarantee between operations performed on different
-intersection candidates.
-
-
-[[ray-traversal-watertight]]
-=== Watertightness
-
-For a set of triangles with identical transforms, within a single instance:
-
-  * Any set of two or more triangles where all triangles have one vertex
-    with an identical position value, that vertex is a _shared vertex_.
-  * Any set of two triangles with two shared vertices that were specified in
-    the same <<drawing-triangle-lists, winding order>> in each triangle have
-    a _shared edge_ defined by those vertices.
-
-A _closed fan_ is a set of three or more triangles where:
-
- * All triangles in the set have the same shared vertex as one of their
-   vertices.
- * All edges that include the above vertex are shared edges.
- * All above shared edges are shared by exactly two triangles from the set.
- * No two triangles in the set intersect, except at shared edges.
- * Every triangle in the set is joined to every other triangle in the set by
-   a series of the above shared edges.
-
-Implementations should: not double-hit or miss when a ray intersects a
-shared edge, or a shared vertex of a closed fan.
-
-
-[[ray-intersection-culling]]
-== Ray Intersection Culling
-
-Candidate intersections go through several phases of culling before
-confirmation as an actual hit.
-There is no particular ordering dependency between the different culling
-operations.
-
-
-[[ray-traversal-culling-primitive]]
-=== Ray Primitive Culling
-
-If the <<features-rayTraversalPrimitiveCulling,
-pname:rayTraversalPrimitiveCulling>> or <<features-rayQuery,
-pname:rayQuery>> features are enabled, the code:SkipTrianglesKHR and
-code:SkipAABBsKHR ray flags can: be specified when tracing a ray.
-
-If code:SkipTrianglesKHR was included in the `Ray Flags` operand of the ray
-trace instruction, and the intersection is with a triangle primitive, the
-intersection is dropped, and no further processing of this intersection
-occurs.
-If ename:VK_PIPELINE_CREATE_RAY_TRACING_SKIP_TRIANGLES_BIT_KHR was included
-in the pipeline, traversal with code:OpTraceRayKHR calls will all behave as
-if code:SkipTrianglesKHR was included in its `Ray Flags` operand.
-
-If code:SkipAABBsKHR was included in the `Ray Flags` operand of the ray
-trace instruction, and the intersection is with an AABB primitive, the
-intersection is dropped, and no further processing of this intersection
-occurs.
-If ename:VK_PIPELINE_CREATE_RAY_TRACING_SKIP_AABBS_BIT_KHR was included in
-the pipeline, traversal with code:OpTraceRayKHR calls will all behave as if
-code:SkipAABBsKHR was included in its `Ray Flags` operand.
-
-
-=== Ray Mask Culling
-
-Instances can: be made invisible to particular rays based on the value of
-slink:VkAccelerationStructureInstanceKHR::pname:mask used to add that
-instance to a top-level acceleration structure, and the `Cull Mask`
-parameter used to trace the ray.
-
-For the instance which is intersected, if [eq]#pname:mask & `Cull Mask` ==
-0#, the intersection is dropped, and no further processing occurs.
-
-
-[[ray-traversal-culling-face]]
-=== Ray Face Culling
-
-As in <<primsrast-polygons-basic,polygon rasterization>>, one of the stages
-of ray traversal is to determine if a triangle primitive is back- or
-front-facing, and primitives can: be culled based on that facing.
-
-If the intersection candidate is with an AABB primitive, this operation is
-skipped.
-
-.Determination
-
-When a ray intersects a triangle primitive, the order that vertices are
-specified for the polygon affects whether the ray intersects the front or
-back face.
-Front or back facing is determined in the same way as they are for
-<<primsrast-polygons-basic,rasterization>>, based on the sign of the
-polygon's area but using the ray space coordinates instead of framebuffer
-coordinates.
-One way to compute this area is:
-
-[latexmath]
-++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-a = -{1 \over 2}\sum_{i=0}^{n-1}
-      x_r^i y_r^{i \oplus 1} -
-      x_r^{i \oplus 1} y_r^i
-++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-where latexmath:[x_r^i] and latexmath:[y_r^i] are the [eq]#x# and [eq]#y#
-<<ray-intersection-candidate-determination,ray space coordinates>> of the
-[eq]##i##th vertex of the [eq]#n#-vertex polygon (vertices are numbered
-starting at zero for the purposes of this computation) and [eq]#i {oplus} 1#
-is [eq]#(i {plus} 1) mod n#.
-
-By default, if [eq]#a# is negative then the intersection is with the front
-face of the triangle, otherwise it is with the back face.
-If ename:VK_GEOMETRY_INSTANCE_TRIANGLE_FLIP_FACING_BIT_KHR is included in
-slink:VkAccelerationStructureInstanceKHR::pname:flags for the instance
-containing the intersected triangle, this determination is reversed.
-Additionally, if [eq]#a# is 0, the intersection candidate is treated as not
-intersecting with any face, irrespective of the sign.
-
-[NOTE]
-.Note
-====
-In a left-handed coordinate system, an intersection will be with the front
-face of a triangle if the vertices of the triangle, as defined in index
-order, appear from the ray's perspective in a clockwise rotation order.
-ename:VK_GEOMETRY_INSTANCE_TRIANGLE_FLIP_FACING_BIT_KHR was previously
-annotated as
-ename:VK_GEOMETRY_INSTANCE_TRIANGLE_FRONT_COUNTERCLOCKWISE_BIT_KHR because
-of this.
-====
-
-ifdef::VK_KHR_ray_tracing_pipeline[]
-If the ray was traced with code:OpTraceRayKHR, the code:HitKindKHR built-in
-is set to code:HitKindFrontFacingTriangleKHR if the intersection is with
-front-facing geometry, and code:HitKindBackFacingTriangleKHR if the
-intersection is with back-facing geometry, for shader stages considering
-this intersection.
-endif::VK_KHR_ray_tracing_pipeline[]
-
-ifdef::VK_KHR_ray_query[]
-If the ray was traced with code:OpRayQueryProceedKHR,
-code:OpRayQueryGetIntersectionFrontFaceKHR will return true for intersection
-candidates with front faces, or false for back faces.
-endif::VK_KHR_ray_query[]
-
-.Culling
-
-If code:CullBackFacingTrianglesKHR was included in the `Ray Flags` parameter
-of the ray trace instruction, and the intersection is determined as with the
-back face of a triangle primitive, the intersection is dropped, and no
-further processing of this intersection occurs.
-
-If code:CullFrontFacingTrianglesKHR was included in the `Ray Flags`
-parameter of the ray trace instruction, and the intersection is determined
-as with the front face of a triangle primitive, the intersection is dropped,
-and no further processing of this intersection occurs.
-
-This culling is disabled if
-ename:VK_GEOMETRY_INSTANCE_TRIANGLE_FACING_CULL_DISABLE_BIT_KHR was included
-in slink:VkAccelerationStructureInstanceKHR::pname:flags for the instance
-which the intersected geometry belongs to.
-
-Intersection candidates that have not intersected with any face ([eq]#a ==
-0#) are unconditionally culled, irrespective of ray flags and geometry
-instance flags.
-
-
-=== Ray Opacity Culling
-
-Each geometry in the acceleration structure may: be considered either opaque
-or not.
-Opaque geometries continue through traversal as normal, whereas non-opaque
-geometries need to be either confirmed or discarded by shader code.
-Intersection candidates can: also be culled based on their opacity.
-
-.Determination
-
-Each individual intersection candidate is initally determined as opaque if
-ename:VK_GEOMETRY_OPAQUE_BIT_KHR was included in the
-slink:VkAccelerationStructureGeometryKHR::pname:flags when the geometry it
-intersected with was built, otherwise it is considered non-opaque.
-
-ifdef::VK_KHR_ray_tracing_pipeline[]
-If the intersection candidate was generated by an <<shaders-intersection,
-intersection shader>>, the intersection is initially considered to have
-opacity matching the AABB candidate that it was generated from.
-endif::VK_KHR_ray_tracing_pipeline[]
-
-However, this opacity can be overridden when it is built into an instance.
-Setting ename:VK_GEOMETRY_INSTANCE_FORCE_OPAQUE_BIT_KHR in
-slink:VkAccelerationStructureInstanceKHR::pname:flags will force all
-geometries in the instance to be considered opaque.
-Similarly, setting ename:VK_GEOMETRY_INSTANCE_FORCE_NO_OPAQUE_BIT_KHR will
-force all geometries in the instance to be considered non-opaque.
-
-This can again be overridden by including code:OpaqueKHR or code:NoOpaqueKHR
-in the `Ray Flags` parameter when tracing a ray.
-code:OpaqueKHR forces all geometries to behave as if they are opaque,
-regardless of their build parameters.
-Similarly, code:NoOpaqueKHR forces all geometries to behave as if they are
-non-opaque.
-
-ifdef::VK_KHR_ray_query[]
-If the ray was traced with code:OpRayQueryProceedKHR, to determine the
-opacity of AABB intersection candidates,
-code:OpRayQueryGetIntersectionCandidateAABBOpaqueKHR can: be used.
-This instruction will return code:true for opaque intersection candidates,
-and code:false for non-opaque intersection candidates.
-endif::VK_KHR_ray_query[]
-
-.Culling
-
-If code:CullOpaqueKHR is included in the `Ray Flags` parameter when tracing
-a ray, an intersection with a geometry that is considered opaque is dropped,
-and no further processing occurs.
-
-If code:CullNoOpaqueKHR is included in the `Ray Flags` parameter when
-tracing a ray, an intersection with a geometry that is considered non-opaque
-is dropped, and no further processing occurs.
-
-
-[[ray-intersection-confirmation]]
-== Ray Intersection Confirmation
-
-Depending on the opacity of intersected geometry and whether it is a
-triangle or an AABB, candidate intersections are further processed to
-determine the eventual hit result.
-Candidates generated from AABB intersections run through the same
-confirmation process as triangle hits.
-
-
-=== AABB Intersection Candidates
-
-For an intersection candidate with an AABB geometry generated by
-<<ray-intersection-candidate-determination>>, shader code is executed to
-determine whether any hits should be reported to the traversal
-infrastructure; no further processing of this intersection candidate occurs.
-The occurrence of an AABB intersection candidate does not guarantee the ray
-intersects the primitive bounds.
-To avoid propagating false intersections the application should: verify the
-intersection candidate before reporting any hits.
-
-ifdef::VK_KHR_ray_tracing_pipeline[]
-If the ray was traced with code:OpTraceRayKHR, an <<shaders-intersection,
-intersection shader>> is invoked from the <<shader-binding-table>> according
-to the <<shader-binding-table-indexing-rules, specified indexing>> for the
-intersected geometry.
-If this shader calls code:OpReportIntersectionKHR, a new intersection
-candidate is generated as described
-<<aabb-intersection-candidate-generation, below>>.
-If the intersection shader is ename:VK_SHADER_UNUSED_KHR (which is only
-allowed for a zero shader group) then no further processing of the
-intersection candidate occurs.
-endif::VK_KHR_ray_tracing_pipeline[]
-
-[[aabb-intersection-candidate-generation]]
-ifdef::VK_KHR_ray_tracing_pipeline[]
-Each new candidate generated as a result of this processing is a generated
-intersection candidate that intersects the AABB geometry, with a [eq]#t#
-value equal to the `Hit` parameter of the code:OpReportIntersectionKHR
-instruction.
-The new generated candidate is then independently run through
-<<ray-intersection-confirmation>> as a
-<<ray-triangle-and-generated-intersection-candidates, generated
-intersection>>.
-endif::VK_KHR_ray_tracing_pipeline[]
-
-ifdef::VK_KHR_ray_query[]
-If the ray was traced with code:OpRayQueryProceedKHR, control is returned to
-the shader which executed code:OpRayQueryProceedKHR, returning code:true.
-The resulting ray query has a candidate intersection type of
-code:RayQueryCandidateIntersectionAABBKHR.
-code:OpRayQueryGenerateIntersectionKHR can: be called to commit a new
-intersection candidate with committed intersection type of
-code:RayQueryCommittedIntersectionGeneratedKHR.
-Further ray query processing can: be continued by executing
-code:OpRayQueryProceedKHR with the same ray query, or intersection can: be
-terminated with code:OpRayQueryTerminateKHR.
-endif::VK_KHR_ray_query[]
-ifdef::VK_KHR_ray_tracing_pipeline+VK_KHR_ray_query[]
-Unlike rays traced with code:OpTraceRayKHR, candidates generated in this way
-skip generated intersection candidate confirmation; applications should:
-make this determination before generating the intersection.
-endif::VK_KHR_ray_tracing_pipeline+VK_KHR_ray_query[]
-
-This operation may: be executed multiple times for the same intersection
-candidate.
-
-
-[[ray-triangle-and-generated-intersection-candidates]]
-=== Triangle and Generated Intersection Candidates
-
-For triangle and <<aabb-intersection-candidate-generation, generated
-intersection candidates>>, additional shader code may: be executed based on
-the intersection's opacity.
-
-If the intersection is opaque, the candidate is immediately confirmed as a
-valid hit and passes to the next stage of processing.
-
-For non-opaque intersection candidates, shader code is executed to determine
-whether a hit occurred or not.
-
-ifdef::VK_KHR_ray_tracing_pipeline[]
-If the ray was traced with code:OpTraceRayKHR, an <<shaders-any-hit, any-hit
-shader>> is invoked from the <<shader-binding-table>> according to the
-specified indexing.
-If this shader calls code:OpIgnoreIntersectionKHR, the candidate is dropped
-and no further processing of the candidate occurs.
-If the <<shaders-any-hit, any-hit shader>> identified is
-ename:VK_SHADER_UNUSED_KHR, the candidate is immediately confirmed as a
-valid hit and passes to the next stage of processing.
-endif::VK_KHR_ray_tracing_pipeline[]
-
-ifdef::VK_KHR_ray_query[]
-If the ray was traced with code:OpRayQueryProceedKHR, control is returned to
-the shader which executed code:OpRayQueryProceedKHR, returning code:true.
-As only triangle candidates participate in this operation with ray queries,
-the resulting candidate intersection type is always
-code:RayQueryCandidateIntersectionTriangleKHR.
-code:OpRayQueryConfirmIntersectionKHR can: be called on the ray query to
-confirm the candidate as a hit with committed intersection type of
-code:RayQueryCommittedIntersectionTriangleKHR.
-Further ray query processing can: be continued by executing
-code:OpRayQueryProceedKHR with the same ray query, or intersection can: be
-terminated with code:OpRayQueryTerminateKHR.
-If code:OpRayQueryConfirmIntersectionKHR has not been executed, the
-candidate is dropped and no further processing of the candidate occurs.
-endif::VK_KHR_ray_query[]
-
-This operation may: be executed multiple times for the same intersection
-candidate unless ename:VK_GEOMETRY_NO_DUPLICATE_ANY_HIT_INVOCATION_BIT_KHR
-was specified for the intersected geometry.
-
-
-[[ray-closest-hit-determination]]
-== Ray Closest Hit Determination
-
-Unless the ray was traced with the code:TerminateOnFirstHitKHR ray flag, the
-implementation must: track the closest confirmed hit until all geometries
-have been tested and either confirmed or dropped.
-
-After an intersection candidate is confirmed, its [eq]#t# value is compared
-to [eq]#t~max~# to determine which intersection is closer, where [eq]#t# is
-the parametric distance along the ray at which the intersection occurred.
-
-  * If [eq]#t < t~max~#, [eq]#t~max~# is set to [eq]#t# and the candidate is
-    set as the current closest hit.
-  * If [eq]#t > t~max~#, the candidate is dropped and no further processing
-    of that candidate occurs.
-  * If [eq]#t = t~max~#, the candidate may: be set as the current closest
-    hit or dropped.
-
-If code:TerminateOnFirstHitKHR was included in the `Ray Flags` used to trace
-the ray, once the first hit is confirmed, the ray trace is terminated.
-
-
-[[ray-result-determination]]
-== Ray Result Determination
-
-Once all candidates have finished processing the prior stages, or if the ray
-is forcibly terminated, the final result of the ray trace is determined.
-
-If a closest hit result was identified by <<ray-closest-hit-determination>>,
-a closest hit has occurred, otherwise the final result is a miss.
-
-ifdef::VK_KHR_ray_tracing_pipeline[]
-For rays traced with code:OpTraceRayKHR, if a closest hit result was
-identified, a <<shaders-closest-hit, closest hit shader>> is invoked from
-the <<shader-binding-table>> according to the
-<<shader-binding-table-indexing-rules, specified indexing>> for the
-intersected geometry.
-Control returns to the shader that executed code:OpTraceRayKHR once this
-shader returns.
-This shader is skipped if either the ray flags included
-code:SkipClosestHitShaderKHR, or if the <<shaders-closest-hit, closest hit
-shader>> identified is ename:VK_SHADER_UNUSED_KHR.
-
-For rays traced with code:OpTraceRayKHR where no hit result was identified,
-the <<shaders-miss, miss shader>> identified by the `Miss Index` parameter
-of code:OpTraceRayKHR is invoked.
-Control returns to the shader that executed code:OpTraceRayKHR once this
-shader returns.
-This shader is skipped if the miss shader identified is
-ename:VK_SHADER_UNUSED_KHR.
-endif::VK_KHR_ray_tracing_pipeline[]
-
-ifdef::VK_KHR_ray_query[]
-If the ray was traced with code:OpRayQueryProceedKHR, control is returned to
-the shader which executed code:OpRayQueryProceedKHR, returning code:false.
-If a closest hit was identified by <<ray-closest-hit-determination>>, the
-ray query will now have a committed intersection type of
-code:RayQueryCommittedIntersectionGeneratedKHR or
-code:RayQueryCommittedIntersectionTriangleKHR.
-If no closest hit was identified, the committed intersection type will be
-code:RayQueryCommittedIntersectionNoneKHR.
-
-No further processing of a ray query occurs after this result is determined.
-endif::VK_KHR_ray_query[]
diff --git a/registry/vulkan/chapters/renderpass.txt b/registry/vulkan/chapters/renderpass.txt
deleted file mode 100644
index f7db1f0..0000000
--- a/registry/vulkan/chapters/renderpass.txt
+++ /dev/null
@@ -1,5719 +0,0 @@
-// Copyright 2015-2021 The Khronos Group, Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-[[renderpass]]
-= Render Pass
-
-<<drawing, Draw commands>> must: be recorded within a _render pass
-instance_.
-Each render pass instance defines a set of image resources, referred to as
-_attachments_, used during rendering.
-
-ifdef::VK_KHR_dynamic_rendering[]
-[open,refpage='vkCmdBeginRenderingKHR',desc='Begin a dynamic render pass instance',type='protos']
---
-To begin a render pass instance, call:
-
-include::{generated}/api/protos/vkCmdBeginRenderingKHR.txt[]
-
-  * pname:commandBuffer is the command buffer in which to record the
-    command.
-  * pname:pRenderingInfo is a pointer to a slink:VkRenderingInfoKHR
-    structure specifying details of the render pass instance to begin.
-
-After beginning a render pass instance, the command buffer is ready to
-record <<drawing,draw commands>>.
-
-If pname:pRenderingInfo->flags includes ename:VK_RENDERING_RESUMING_BIT_KHR
-then this render pass is resumed from a render pass instance that has been
-suspended earlier in <<synchronization-submission-order, submission order>>.
-
-.Valid Usage
-****
-  * [[VUID-vkCmdBeginRenderingKHR-dynamicRendering-06446]]
-    The <<features-dynamicRendering,pname:dynamicRendering>> feature must:
-    be enabled
-  * [[VUID-vkCmdBeginRenderingKHR-commandBuffer-06068]]
-    If pname:commandBuffer is a secondary command buffer,
-    pname:pRenderingInfo->flags must: not include
-    ename:VK_RENDERING_CONTENTS_SECONDARY_COMMAND_BUFFERS_BIT_KHR
-****
-
-include::{generated}/validity/protos/vkCmdBeginRenderingKHR.txt[]
---
-
-[open,refpage='VkRenderingInfoKHR',desc='Structure specifying render pass instance begin info',type='structs']
---
-The sname:VkRenderingInfoKHR structure is defined as:
-
-include::{generated}/api/structs/VkRenderingInfoKHR.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:flags is a bitmask of elink:VkRenderingFlagBitsKHR.
-  * pname:renderArea is the render area that is affected by the render pass
-    instance.
-  * pname:layerCount is the number of layers rendered to in each attachment
-    when pname:viewMask is `0`.
-  * pname:viewMask is the view mask indicating the indices of attachment
-    layers that will be rendered when it is not `0`.
-  * pname:colorAttachmentCount is the number of elements in
-    pname:pColorAttachments.
-  * pname:pColorAttachments is a pointer to an array of
-    pname:colorAttachmentCount slink:VkRenderingAttachmentInfoKHR structures
-    describing any color attachments used.
-  * pname:pDepthAttachment is a pointer to a
-    slink:VkRenderingAttachmentInfoKHR structure describing a depth
-    attachment.
-  * pname:pStencilAttachment is a pointer to a
-    slink:VkRenderingAttachmentInfoKHR structure describing a stencil
-    attachment.
-
-ifdef::VK_KHR_multiview,VK_VERSION_1_1[]
-If pname:viewMask is not `0`, multiview is enabled.
-endif::VK_KHR_multiview,VK_VERSION_1_1[]
-
-ifdef::VK_KHR_device_group,VK_VERSION_1_1[]
-If there is an instance of slink:VkDeviceGroupRenderPassBeginInfo included
-in the pname:pNext chain and its pname:deviceCount member is not `0`, then
-pname:renderArea is ignored, and the render area is defined per-device by
-that structure.
-endif::VK_KHR_device_group,VK_VERSION_1_1[]
-
-Each element of the pname:pColorAttachments array corresponds to an output
-location in the shader, i.e. if the shader declares an output variable
-decorated with a code:Location value of *X*, then it uses the attachment
-provided in pname:pColorAttachments[*X*].
-If the pname:imageView member of any element of pname:pColorAttachments is
-dlink:VK_NULL_HANDLE, writes to the corresponding location by a fragment are
-discarded.
-
-.Valid Usage
-****
-  * [[VUID-VkRenderingInfoKHR-viewMask-06069]]
-    If pname:viewMask is `0`, pname:layerCount must: not be `0`
-  * [[VUID-VkRenderingInfoKHR-imageView-06070]]
-    If neither the apiext:VK_AMD_mixed_attachment_samples nor the
-    apiext:VK_NV_framebuffer_mixed_samples extensions are enabled,
-    pname:imageView members of pname:pDepthAttachment,
-    pname:pStencilAttachment, and elements of pname:pColorAttachments that
-    are not dlink:VK_NULL_HANDLE must: have been created with the same
-    pname:sampleCount
-ifndef::VK_VERSION_1_1,VK_KHR_device_group[]
-  * [[VUID-VkRenderingInfoKHR-renderArea-06071]]
-    pname:renderArea.offset.x must: be greater than or equal to 0
-  * [[VUID-VkRenderingInfoKHR-renderArea-06072]]
-    pname:renderArea.offset.y must: be greater than or equal to 0
-  * [[VUID-VkRenderingInfoKHR-renderArea-06073]]
-    The sum of pname:renderArea.offset.x and pname:renderArea.extent.width
-    must: be less than or equal to <<limits-maxFramebufferWidth,
-    pname:maxFramebufferWidth>>
-  * [[VUID-VkRenderingInfoKHR-renderArea-06074]]
-    The sum of pname:renderArea.offset.y and pname:renderArea.extent.height
-    must: be less than or equal to <<limits-maxFramebufferHeight,
-    pname:maxFramebufferHeight>>
-  * [[VUID-VkRenderingInfoKHR-imageView-06075]]
-    The width of the pname:imageView member of any element of
-    pname:pColorAttachments, pname:pDepthAttachment, or
-    pname:pStencilAttachment that is not dlink:VK_NULL_HANDLE must: be
-    greater than or equal to [eq]#pname:renderArea.offset.x {plus}
-    pname:renderArea.extent.width#
-  * [[VUID-VkRenderingInfoKHR-imageView-06076]]
-    The height of the pname:imageView member of any element of
-    pname:pColorAttachments, pname:pDepthAttachment, or
-    pname:pStencilAttachment that is not dlink:VK_NULL_HANDLE must: be
-    greater than or equal to [eq]#pname:renderArea.offset.y {plus}
-    pname:renderArea.extent.height#
-endif::VK_VERSION_1_1,VK_KHR_device_group[]
-ifdef::VK_VERSION_1_1,VK_KHR_device_group[]
-  * [[VUID-VkRenderingInfoKHR-pNext-06077]]
-    If the pname:pNext chain does not contain
-    slink:VkDeviceGroupRenderPassBeginInfo or its
-    pname:deviceRenderAreaCount member is equal to 0,
-    pname:renderArea.offset.x must: be greater than or equal to 0
-  * [[VUID-VkRenderingInfoKHR-pNext-06078]]
-    If the pname:pNext chain does not contain
-    slink:VkDeviceGroupRenderPassBeginInfo or its
-    pname:deviceRenderAreaCount member is equal to 0,
-    pname:renderArea.offset.y must: be greater than or equal to 0
-  * [[VUID-VkRenderingInfoKHR-pNext-06079]]
-    If the pname:pNext chain does not contain
-    slink:VkDeviceGroupRenderPassBeginInfo or its
-    pname:deviceRenderAreaCount member is equal to 0, the width of the
-    pname:imageView member of any element of pname:pColorAttachments,
-    pname:pDepthAttachment, or pname:pStencilAttachment that is not
-    dlink:VK_NULL_HANDLE must: be greater than or equal to
-    [eq]#pname:renderArea.offset.x {plus} pname:renderArea.extent.width#
-  * [[VUID-VkRenderingInfoKHR-pNext-06080]]
-    If the pname:pNext chain does not contain
-    slink:VkDeviceGroupRenderPassBeginInfo or its
-    pname:deviceRenderAreaCount member is equal to 0, the height of the
-    pname:imageView member of any element of pname:pColorAttachments,
-    pname:pDepthAttachment, or pname:pStencilAttachment that is not
-    dlink:VK_NULL_HANDLE must: be greater than or equal to
-    [eq]#pname:renderArea.offset.y {plus} pname:renderArea.extent.height#
-  * [[VUID-VkRenderingInfoKHR-pNext-06081]]
-    If the pname:pNext chain contains
-    slink:VkDeviceGroupRenderPassBeginInfo, the pname:offset.x member of
-    each element of pname:pDeviceRenderAreas must: be greater than or equal
-    to 0
-  * [[VUID-VkRenderingInfoKHR-pNext-06082]]
-    If the pname:pNext chain contains
-    slink:VkDeviceGroupRenderPassBeginInfo, the pname:offset.y member of
-    each element of pname:pDeviceRenderAreas must: be greater than or equal
-    to 0
-  * [[VUID-VkRenderingInfoKHR-pNext-06083]]
-    If the pname:pNext chain contains
-    slink:VkDeviceGroupRenderPassBeginInfo, the width of the pname:imageView
-    member of any element of pname:pColorAttachments,
-    pname:pDepthAttachment, or pname:pStencilAttachment that is not
-    dlink:VK_NULL_HANDLE must: be greater than or equal to the sum of the
-    pname:offset.x and pname:extent.width members of each element of
-    pname:pDeviceRenderAreas
-  * [[VUID-VkRenderingInfoKHR-pNext-06084]]
-    If the pname:pNext chain contains
-    slink:VkDeviceGroupRenderPassBeginInfo, the height of the
-    pname:imageView member of any element of pname:pColorAttachments,
-    pname:pDepthAttachment, or pname:pStencilAttachment that is not
-    dlink:VK_NULL_HANDLE must: be greater than or equal to the sum of the
-    pname:offset.y and pname:extent.height members of each element of
-    pname:pDeviceRenderAreas
-  * [[VUID-VkRenderingInfoKHR-pDepthAttachment-06085]]
-    If neither pname:pDepthAttachment or pname:pStencilAttachment are `NULL`
-    and the pname:imageView member of either structure is not
-    dlink:VK_NULL_HANDLE, the pname:imageView member of each structure must:
-    be the same
-  * [[VUID-VkRenderingInfoKHR-pDepthAttachment-06086]]
-    If neither pname:pDepthAttachment or pname:pStencilAttachment are
-    `NULL`, and the pname:resolveMode member of each is not
-    ename:VK_RESOLVE_MODE_NONE, the pname:resolveImageView member of each
-    structure must: be the same
-endif::VK_VERSION_1_1,VK_KHR_device_group[]
-  * [[VUID-VkRenderingInfoKHR-colorAttachmentCount-06087]]
-    If pname:colorAttachmentCount is not `0` and the pname:imageView member
-    of an element of pname:pColorAttachments is not dlink:VK_NULL_HANDLE,
-    that pname:imageView must: have been created with
-    ename:VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT
-  * [[VUID-VkRenderingInfoKHR-pDepthAttachment-06088]]
-    If pname:pDepthAttachment is not `NULL` and
-    pname:pDepthAttachment->imageView is not dlink:VK_NULL_HANDLE,
-    pname:pDepthAttachment->imageView must: have been created with
-    ename:VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT
-  * [[VUID-VkRenderingInfoKHR-pStencilAttachment-06089]]
-    If pname:pStencilAttachment is not `NULL` and
-    pname:pStencilAttachment->imageView is not dlink:VK_NULL_HANDLE,
-    pname:pStencilAttachment->imageView must: have been created with a
-    stencil usage including
-    ename:VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT
-  * [[VUID-VkRenderingInfoKHR-colorAttachmentCount-06090]]
-    If pname:colorAttachmentCount is not `0` and the pname:imageView member
-    of an element of pname:pColorAttachments is not dlink:VK_NULL_HANDLE,
-    the pname:layout member of that element of pname:pColorAttachments must:
-    not be ename:VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL or
-    ename:VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL
-  * [[VUID-VkRenderingInfoKHR-colorAttachmentCount-06091]]
-    If pname:colorAttachmentCount is not `0` and the pname:imageView member
-    of an element of pname:pColorAttachments is not dlink:VK_NULL_HANDLE, if
-    the pname:resolveMode member of that element of pname:pColorAttachments
-    is not ename:VK_RESOLVE_MODE_NONE, its pname:resolveImageLayout member
-    must: not be ename:VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL or
-    ename:VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL
-  * [[VUID-VkRenderingInfoKHR-pDepthAttachment-06092]]
-    If pname:pDepthAttachment is not `NULL` and
-    pname:pDepthAttachment->imageView is not dlink:VK_NULL_HANDLE,
-    pname:pDepthAttachment->layout must: not be
-    ename:VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL
-  * [[VUID-VkRenderingInfoKHR-pDepthAttachment-06093]]
-    If pname:pDepthAttachment is not `NULL`,
-    pname:pDepthAttachment->imageView is not dlink:VK_NULL_HANDLE, and
-    pname:pDepthAttachment->resolveMode is not ename:VK_RESOLVE_MODE_NONE,
-    pname:pDepthAttachment->resolveImageLayout must: not be
-    ename:VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL
-  * [[VUID-VkRenderingInfoKHR-pStencilAttachment-06094]]
-    If pname:pStencilAttachment is not `NULL` and
-    pname:pStencilAttachment->imageView is not dlink:VK_NULL_HANDLE,
-    pname:pStencilAttachment->layout must: not be
-    ename:VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL
-  * [[VUID-VkRenderingInfoKHR-pStencilAttachment-06095]]
-    If pname:pStencilAttachment is not `NULL`,
-    pname:pStencilAttachment->imageView is not dlink:VK_NULL_HANDLE, and
-    pname:pStencilAttachment->resolveMode is not ename:VK_RESOLVE_MODE_NONE,
-    pname:pStencilAttachment->resolveImageLayout must: not be
-    ename:VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL
-ifdef::VK_KHR_maintenance2,VK_VERSION_1_1[]
-  * [[VUID-VkRenderingInfoKHR-colorAttachmentCount-06096]]
-    If pname:colorAttachmentCount is not `0` and the pname:imageView member
-    of an element of pname:pColorAttachments is not dlink:VK_NULL_HANDLE,
-    the pname:layout member of that element of pname:pColorAttachments must:
-    not be ename:VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_OPTIMAL
-    or ename:VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_OPTIMAL
-  * [[VUID-VkRenderingInfoKHR-colorAttachmentCount-06097]]
-    If pname:colorAttachmentCount is not `0` and the pname:imageView member
-    of an element of pname:pColorAttachments is not dlink:VK_NULL_HANDLE, if
-    the pname:resolveMode member of that element of pname:pColorAttachments
-    is not ename:VK_RESOLVE_MODE_NONE, its pname:resolveImageLayout member
-    must: not be
-    ename:VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_OPTIMAL or
-    ename:VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_OPTIMAL
-  * [[VUID-VkRenderingInfoKHR-pDepthAttachment-06098]]
-    If pname:pDepthAttachment is not `NULL`,
-    pname:pDepthAttachment->imageView is not dlink:VK_NULL_HANDLE, and
-    pname:pDepthAttachment->resolveMode is not ename:VK_RESOLVE_MODE_NONE,
-    pname:pDepthAttachment->resolveImageLayout must: not be
-    ename:VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_OPTIMAL
-  * [[VUID-VkRenderingInfoKHR-pStencilAttachment-06099]]
-    If pname:pStencilAttachment is not `NULL`,
-    pname:pStencilAttachment->imageView is not dlink:VK_NULL_HANDLE, and
-    pname:pStencilAttachment->resolveMode is not ename:VK_RESOLVE_MODE_NONE,
-    pname:pStencilAttachment->resolveImageLayout must: not be
-    ename:VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_OPTIMAL
-endif::VK_KHR_maintenance2,VK_VERSION_1_1[]
-ifdef::VK_KHR_separate_depth_stencil_layouts,VK_VERSION_1_2[]
-  * [[VUID-VkRenderingInfoKHR-colorAttachmentCount-06100]]
-    If pname:colorAttachmentCount is not `0` and the pname:imageView member
-    of an element of pname:pColorAttachments is not dlink:VK_NULL_HANDLE,
-    the pname:layout member of that element of pname:pColorAttachments must:
-    not be ename:VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL,
-    ename:VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL,
-    ename:VK_IMAGE_LAYOUT_STENCIL_ATTACHMENT_OPTIMAL, or
-    ename:VK_IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL
-  * [[VUID-VkRenderingInfoKHR-colorAttachmentCount-06101]]
-    If pname:colorAttachmentCount is not `0` and the pname:imageView member
-    of an element of pname:pColorAttachments is not dlink:VK_NULL_HANDLE, if
-    the pname:resolveMode member of that element of pname:pColorAttachments
-    is not ename:VK_RESOLVE_MODE_NONE, its pname:resolveImageLayout member
-    must: not be ename:VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL,
-    ename:VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL,
-    ename:VK_IMAGE_LAYOUT_STENCIL_ATTACHMENT_OPTIMAL, or
-    ename:VK_IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL
-endif::VK_KHR_separate_depth_stencil_layouts,VK_VERSION_1_2[]
-ifdef::VK_KHR_depth_stencil_resolve,VK_VERSION_1_2[]
-  * [[VUID-VkRenderingInfoKHR-pDepthAttachment-06102]]
-    If pname:pDepthAttachment is not `NULL` and
-    pname:pDepthAttachment->imageView is not dlink:VK_NULL_HANDLE,
-    pname:pDepthAttachment->resolveMode must: be one of the bits set in
-    slink:VkPhysicalDeviceDepthStencilResolveProperties::pname:supportedDepthResolveModes
-  * [[VUID-VkRenderingInfoKHR-pStencilAttachment-06103]]
-    If pname:pStencilAttachment is not `NULL` and
-    pname:pStencilAttachment->imageView is not dlink:VK_NULL_HANDLE,
-    pname:pStencilAttachment->resolveMode must: be one of the bits set in
-    slink:VkPhysicalDeviceDepthStencilResolveProperties::pname:supportedStencilResolveModes
-  * [[VUID-VkRenderingInfoKHR-pDepthAttachment-06104]]
-    If pname:pDepthAttachment or pname:pStencilAttachment are both not
-    `NULL`, pname:pDepthAttachment->imageView and
-    pname:pStencilAttachment->imageView are both not dlink:VK_NULL_HANDLE,
-    and
-    slink:VkPhysicalDeviceDepthStencilResolveProperties::pname:independentResolveNone
-    is ename:VK_FALSE, the pname:resolveMode of both structures must: be the
-    same value
-  * [[VUID-VkRenderingInfoKHR-pDepthAttachment-06105]]
-    If pname:pDepthAttachment or pname:pStencilAttachment are both not
-    `NULL`, pname:pDepthAttachment->imageView and
-    pname:pStencilAttachment->imageView are both not dlink:VK_NULL_HANDLE,
-    slink:VkPhysicalDeviceDepthStencilResolveProperties::pname:independentResolve
-    is ename:VK_FALSE, and the pname:resolveMode of neither structure is
-    ename:VK_RESOLVE_MODE_NONE, the pname:resolveMode of both structures
-    must: be the same value
-endif::VK_KHR_depth_stencil_resolve,VK_VERSION_1_2[]
-  * [[VUID-VkRenderingInfoKHR-colorAttachmentCount-06106]]
-    pname:colorAttachmentCount must: be less than or equal to
-    slink:VkPhysicalDeviceLimits::pname:maxColorAttachments
-ifdef::VK_EXT_fragment_density_map[]
-  * [[VUID-VkRenderingInfoKHR-imageView-06107]]
-    If the pname:imageView member of a
-    slink:VkRenderingFragmentDensityMapAttachmentInfoEXT structure included
-    in the pname:pNext chain is not dlink:VK_NULL_HANDLE, and
-    <<features-fragmentDensityMapNonSubsampledImages,non-subsample image
-    feature>> is not enabled, valid pname:imageView and
-    pname:resolveImageView members of pname:pDepthAttachment,
-    pname:pStencilAttachment, and each element of pname:pColorAttachments
-    must: be a slink:VkImageView created with
-    ename:VK_IMAGE_CREATE_SUBSAMPLED_BIT_EXT
-ifdef::VK_VERSION_1_1,VK_KHR_multiview[]
-  * [[VUID-VkRenderingInfoKHR-imageView-06108]]
-    If the pname:imageView member of a
-    slink:VkRenderingFragmentDensityMapAttachmentInfoEXT structure included
-    in the pname:pNext chain is not dlink:VK_NULL_HANDLE, and pname:viewMask
-    is not `0`, pname:imageView must: have a pname:layerCount greater than
-    or equal to the index of the most significant bit in pname:viewMask
-  * [[VUID-VkRenderingInfoKHR-imageView-06109]]
-    If the pname:imageView member of a
-    slink:VkRenderingFragmentDensityMapAttachmentInfoEXT structure included
-    in the pname:pNext chain is not dlink:VK_NULL_HANDLE, and pname:viewMask
-    is `0`, pname:imageView must: have a pname:layerCount equal to `1`
-endif::VK_VERSION_1_1,VK_KHR_multiview[]
-ifndef::VK_VERSION_1_1,VK_KHR_device_group[]
-  * [[VUID-VkRenderingInfoKHR-imageView-06110]]
-    If the pname:imageView member of a
-    slink:VkRenderingFragmentDensityMapAttachmentInfoEXT structure included
-    in the pname:pNext chain is not dlink:VK_NULL_HANDLE, pname:imageView
-    must: have a width greater than or equal to
-    latexmath:[\left\lceil{\frac{renderArea_{x}+renderArea_{width}}{maxFragmentDensityTexelSize_{width}}}\right\rceil]
-  * [[VUID-VkRenderingInfoKHR-imageView-06111]]
-    If the pname:imageView member of a
-    slink:VkRenderingFragmentDensityMapAttachmentInfoEXT structure included
-    in the pname:pNext chain is not dlink:VK_NULL_HANDLE, pname:imageView
-    must: have a height greater than or equal to
-    latexmath:[\left\lceil{\frac{renderArea_{y}+renderArea_{height}}{maxFragmentDensityTexelSize_{height}}}\right\rceil]
-endif::VK_VERSION_1_1,VK_KHR_device_group[]
-ifdef::VK_VERSION_1_1,VK_KHR_device_group[]
-  * [[VUID-VkRenderingInfoKHR-pNext-06112]]
-    If the pname:pNext chain does not contain
-    slink:VkDeviceGroupRenderPassBeginInfo or its
-    pname:deviceRenderAreaCount member is equal to 0 and the pname:imageView
-    member of a slink:VkRenderingFragmentDensityMapAttachmentInfoEXT
-    structure included in the pname:pNext chain is not dlink:VK_NULL_HANDLE,
-    pname:imageView must: have a width greater than or equal to
-    latexmath:[\left\lceil{\frac{renderArea_{x}+renderArea_{width}}{maxFragmentDensityTexelSize_{width}}}\right\rceil]
-  * [[VUID-VkRenderingInfoKHR-pNext-06113]]
-    If the pname:pNext chain contains a
-    slink:VkDeviceGroupRenderPassBeginInfo structure, its
-    pname:deviceRenderAreaCount member is not 0, and the pname:imageView
-    member of a slink:VkRenderingFragmentDensityMapAttachmentInfoEXT
-    structure included in the pname:pNext chain is not dlink:VK_NULL_HANDLE,
-    pname:imageView must: have a width greater than or equal to
-    latexmath:[\left\lceil{\frac{pDeviceRenderAreas_{x}+pDeviceRenderAreas_{width}}{maxFragmentDensityTexelSize_{width}}}\right\rceil]
-    for each element of pname:pDeviceRenderAreas
-  * [[VUID-VkRenderingInfoKHR-pNext-06114]]
-    If the pname:pNext chain does not contain
-    slink:VkDeviceGroupRenderPassBeginInfo or its
-    pname:deviceRenderAreaCount member is equal to 0 and the pname:imageView
-    member of a slink:VkRenderingFragmentDensityMapAttachmentInfoEXT
-    structure included in the pname:pNext chain is not dlink:VK_NULL_HANDLE,
-    pname:imageView must: have a height greater than or equal to
-    latexmath:[\left\lceil{\frac{renderArea_{y}+renderArea_{height}}{maxFragmentDensityTexelSize_{height}}}\right\rceil]
-  * [[VUID-VkRenderingInfoKHR-pNext-06115]]
-    If the pname:pNext chain contains a
-    slink:VkDeviceGroupRenderPassBeginInfo structure, its
-    pname:deviceRenderAreaCount member is not 0, and the pname:imageView
-    member of a slink:VkRenderingFragmentDensityMapAttachmentInfoEXT
-    structure included in the pname:pNext chain is not dlink:VK_NULL_HANDLE,
-    pname:imageView must: have a height greater than or equal to
-    latexmath:[\left\lceil{\frac{pDeviceRenderAreas_{y}+pDeviceRenderAreas_{height}}{maxFragmentDensityTexelSize_{height}}}\right\rceil]
-    for each element of pname:pDeviceRenderAreas
-endif::VK_VERSION_1_1,VK_KHR_device_group[]
-  * [[VUID-VkRenderingInfoKHR-imageView-06116]]
-    If the pname:imageView member of a
-    slink:VkRenderingFragmentDensityMapAttachmentInfoEXT structure included
-    in the pname:pNext chain is not dlink:VK_NULL_HANDLE, it must: not be
-    equal to the pname:imageView or pname:resolveImageView member of
-    pname:pDepthAttachment, pname:pStencilAttachment, or any element of
-    pname:pColorAttachments
-endif::VK_EXT_fragment_density_map[]
-ifdef::VK_KHR_fragment_shading_rate[]
-ifndef::VK_VERSION_1_1,VK_KHR_device_group[]
-  * [[VUID-VkRenderingInfoKHR-imageView-06117]]
-    If the pname:imageView member of a
-    slink:VkRenderingFragmentShadingRateAttachmentInfoKHR structure included
-    in the pname:pNext chain is not dlink:VK_NULL_HANDLE, pname:imageView
-    must: have a width greater than or equal to
-    latexmath:[\left\lceil{\frac{renderArea_{x}+renderArea_{width}}{shadingRateAttachmentTexelSize_{width}}}\right\rceil]
-  * [[VUID-VkRenderingInfoKHR-imageView-06118]]
-    If the pname:imageView member of a
-    slink:VkRenderingFragmentShadingRateAttachmentInfoKHR structure included
-    in the pname:pNext chain is not dlink:VK_NULL_HANDLE, pname:imageView
-    must: have a height greater than or equal to
-    latexmath:[\left\lceil{\frac{renderArea_{y}+renderArea_{height}}{shadingRateAttachmentTexelSize_{height}}}\right\rceil]
-endif::VK_VERSION_1_1,VK_KHR_device_group[]
-ifdef::VK_VERSION_1_1,VK_KHR_device_group[]
-  * [[VUID-VkRenderingInfoKHR-pNext-06119]]
-    If the pname:pNext chain does not contain
-    slink:VkDeviceGroupRenderPassBeginInfo or its
-    pname:deviceRenderAreaCount member is equal to 0 and the pname:imageView
-    member of a slink:VkRenderingFragmentShadingRateAttachmentInfoKHR
-    structure included in the pname:pNext chain is not dlink:VK_NULL_HANDLE,
-    pname:imageView must: have a width greater than or equal to
-    latexmath:[\left\lceil{\frac{renderArea_{x}+renderArea_{width}}{shadingRateAttachmentTexelSize_{width}}}\right\rceil]
-  * [[VUID-VkRenderingInfoKHR-pNext-06120]]
-    If the pname:pNext chain contains a
-    slink:VkDeviceGroupRenderPassBeginInfo structure, its
-    pname:deviceRenderAreaCount member is not 0, and the pname:imageView
-    member of a slink:VkRenderingFragmentShadingRateAttachmentInfoKHR
-    structure included in the pname:pNext chain is not dlink:VK_NULL_HANDLE,
-    pname:imageView must: have a width greater than or equal to
-    latexmath:[\left\lceil{\frac{pDeviceRenderAreas_{x}+pDeviceRenderAreas_{width}}{shadingRateAttachmentTexelSize_{width}}}\right\rceil]
-    for each element of pname:pDeviceRenderAreas
-  * [[VUID-VkRenderingInfoKHR-pNext-06121]]
-    If the pname:pNext chain does not contain
-    slink:VkDeviceGroupRenderPassBeginInfo or its
-    pname:deviceRenderAreaCount member is equal to 0 and the pname:imageView
-    member of a slink:VkRenderingFragmentShadingRateAttachmentInfoKHR
-    structure included in the pname:pNext chain is not dlink:VK_NULL_HANDLE,
-    pname:imageView must: have a height greater than or equal to
-    latexmath:[\left\lceil{\frac{renderArea_{y}+renderArea_{height}}{shadingRateAttachmentTexelSize_{height}}}\right\rceil]
-  * [[VUID-VkRenderingInfoKHR-pNext-06122]]
-    If the pname:pNext chain contains a
-    slink:VkDeviceGroupRenderPassBeginInfo structure, its
-    pname:deviceRenderAreaCount member is not 0, and the pname:imageView
-    member of a slink:VkRenderingFragmentShadingRateAttachmentInfoKHR
-    structure included in the pname:pNext chain is not dlink:VK_NULL_HANDLE,
-    pname:imageView must: have a height greater than or equal to
-    latexmath:[\left\lceil{\frac{pDeviceRenderAreas_{y}+pDeviceRenderAreas_{height}}{shadingRateAttachmentTexelSize_{height}}}\right\rceil]
-    for each element of pname:pDeviceRenderAreas
-endif::VK_VERSION_1_1,VK_KHR_device_group[]
-  * [[VUID-VkRenderingInfoKHR-imageView-06123]]
-    If the pname:imageView member of a
-    slink:VkRenderingFragmentShadingRateAttachmentInfoKHR structure included
-    in the pname:pNext chain is not dlink:VK_NULL_HANDLE, and pname:viewMask
-    is `0`, pname:imageView must: have a pname:layerCount that is either
-    equal to `1` or greater than or equal to pname:layerCount
-  * [[VUID-VkRenderingInfoKHR-imageView-06124]]
-    If the pname:imageView member of a
-    slink:VkRenderingFragmentShadingRateAttachmentInfoKHR structure included
-    in the pname:pNext chain is not dlink:VK_NULL_HANDLE, and pname:viewMask
-    is not `0`, pname:imageView must: have a pname:layerCount that either
-    equal to `1` or greater than or equal to the index of the most
-    significant bit in pname:viewMask
-  * [[VUID-VkRenderingInfoKHR-imageView-06125]]
-    If the pname:imageView member of a
-    slink:VkRenderingFragmentShadingRateAttachmentInfoKHR structure included
-    in the pname:pNext chain is not dlink:VK_NULL_HANDLE, it must: not be
-    equal to the pname:imageView or pname:resolveImageView member of
-    pname:pDepthAttachment, pname:pStencilAttachment, or any element of
-    pname:pColorAttachments
-ifdef::VK_EXT_fragment_density_map[]
-  * [[VUID-VkRenderingInfoKHR-imageView-06126]]
-    If the pname:imageView member of a
-    slink:VkRenderingFragmentShadingRateAttachmentInfoKHR structure included
-    in the pname:pNext chain is not dlink:VK_NULL_HANDLE, it must: not be
-    equal to the pname:imageView member of a
-    slink:VkRenderingFragmentDensityMapAttachmentInfoEXT structure included
-    in the pname:pNext chain
-endif::VK_EXT_fragment_density_map[]
-endif::VK_KHR_fragment_shading_rate[]
-  * [[VUID-VkRenderingInfoKHR-multiview-06127]]
-    If the <<features-multiview,pname:multiview>> feature is not enabled,
-    pname:viewMask must: be `0`
-ifdef::VK_VERSION_1_1,VK_KHR_multiview[]
-  * [[VUID-VkRenderingInfoKHR-viewMask-06128]]
-    The index of the most significant bit in pname:viewMask must: be less
-    than <<limits-maxMultiviewViewCount,pname:maxMultiviewViewCount>>
-endif::VK_VERSION_1_1,VK_KHR_multiview[]
-****
-
-include::{generated}/validity/structs/VkRenderingInfoKHR.txt[]
---
-
-[open,refpage='VkRenderingFlagBitsKHR',desc='Bitmask specifying additional properties of a dynamic render pass instance',type='enums']
---
-Bits which can: be set in slink:VkRenderingInfoKHR::pname:flags describing
-additional properties of the render pass are:
-
-include::{generated}/api/enums/VkRenderingFlagBitsKHR.txt[]
-
-  * ename:VK_RENDERING_CONTENTS_SECONDARY_COMMAND_BUFFERS_BIT_KHR specifies
-    that draw calls for the render pass instance will be recorded in
-    secondary command buffers.
-  * ename:VK_RENDERING_RESUMING_BIT_KHR specifies that the render pass
-    instance is resuming an earlier suspended render pass instance.
-  * ename:VK_RENDERING_SUSPENDING_BIT_KHR specifies that the render pass
-    instance will be suspended.
-
-[[renderpass-suspension]]
-The contents of pname:pRenderingInfo must: match between suspended render
-pass instances and the render pass instances that resume them, other than
-the presence or absence of the ename:VK_RENDERING_RESUMING_BIT_KHR,
-ename:VK_RENDERING_SUSPENDING_BIT_KHR, and
-ename:VK_RENDERING_CONTENTS_SECONDARY_COMMAND_BUFFERS_BIT_KHR flags.
-No action or synchronization commands, or other render pass instances, are
-allowed between suspending and resuming render pass instances.
---
-
-[open,refpage='VkRenderingFlagsKHR',desc='Bitmask of VkRenderingFlagBitsKHR',type='flags']
---
-include::{generated}/api/flags/VkRenderingFlagsKHR.txt[]
-
-tname:VkRenderingFlagsKHR is a bitmask type for setting a mask of zero or
-more elink:VkRenderingFlagBitsKHR.
---
-
-[open,refpage='VkRenderingAttachmentInfoKHR',desc='Structure specifying attachment information',type='structs']
---
-The sname:VkRenderingAttachmentInfoKHR structure is defined as:
-
-include::{generated}/api/structs/VkRenderingAttachmentInfoKHR.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:imageView is the image view that will be used for rendering.
-  * pname:imageLayout is the layout that pname:imageView will be in during
-    rendering.
-  * pname:resolveMode is a elink:VkResolveModeFlagBits value defining how
-    multisampled data written to pname:imageView will be resolved.
-  * pname:resolveImageView is an image view used to write resolved
-    multisample data at the end of rendering.
-  * pname:resolveImageLayout is the layout that pname:resolveImageView will
-    be in during rendering.
-  * pname:loadOp is a elink:VkAttachmentLoadOp value specifying how the
-    contents of pname:imageView are treated at the start of the render pass
-    instance.
-  * pname:storeOp is a elink:VkAttachmentStoreOp value specifying how the
-    contents of pname:imageView are treated at the end of the render pass
-    instance.
-  * pname:clearValue is a slink:VkClearValue structure that defines values
-    used to clear pname:imageView when pname:loadOp is
-    ename:VK_ATTACHMENT_LOAD_OP_CLEAR.
-
-Values in pname:imageView are loaded and stored according to the values of
-pname:loadOp and pname:storeOp, within the render area
-ifdef::VK_VERSION_1_1,VK_KHR_device_group[]
-for each device
-endif::VK_VERSION_1_1,VK_KHR_device_group[]
-specified in slink:VkRenderingInfoKHR.
-If pname:imageView is dlink:VK_NULL_HANDLE, other members of this structure
-are ignored; writes to this attachment will be discarded, and no load,
-store, or resolve operations will be performed.
-
-If pname:resolveMode is ename:VK_RESOLVE_MODE_NONE, then
-pname:resolveImageView is ignored.
-If pname:resolveMode is not ename:VK_RESOLVE_MODE_NONE, values in
-pname:resolveImageView within the render area become undefined: once
-rendering begins.
-At the end of rendering, the color values written to each pixel location in
-pname:imageView will be resolved according to pname:resolveMode and stored
-into the the same location in pname:resolveImageView.
-
-[NOTE]
-.Note
-====
-The resolve mode and store operation are independent; it is valid to write
-both resolved and unresolved values, and equally valid to discard the
-unresolved values while writing the resolved ones.
-====
-
-Store and resolve operations are only performed at the end of a render pass
-instance that does not specify the ename:VK_RENDERING_SUSPENDING_BIT_KHR
-flag.
-
-Load operations are only performed at the beginning of a render pass
-instance that does not specify the ename:VK_RENDERING_RESUMING_BIT_KHR flag.
-
-Image contents at the end of a suspended render pass instance remain defined
-for access by a resuming render pass instance.
-
-.Valid Usage
-****
-  * [[VUID-VkRenderingAttachmentInfoKHR-imageView-06129]]
-    If pname:imageView is not dlink:VK_NULL_HANDLE and has a non-integer
-    color format, pname:resolveMode must: be ename:VK_RESOLVE_MODE_NONE or
-    ename:VK_RESOLVE_MODE_AVERAGE_BIT
-  * [[VUID-VkRenderingAttachmentInfoKHR-imageView-06130]]
-    If pname:imageView is not dlink:VK_NULL_HANDLE and has an integer color
-    format, pname:resolveMode must: be ename:VK_RESOLVE_MODE_NONE or
-    ename:VK_RESOLVE_MODE_SAMPLE_ZERO_BIT
-ifndef::VK_KHR_depth_stencil_resolve,VK_VERSION_1_2[]
-  * [[VUID-VkRenderingAttachmentInfoKHR-imageView-06131]]
-    If pname:imageView is not dlink:VK_NULL_HANDLE and has a depth or
-    stencil format, pname:resolveMode must: be ename:VK_RESOLVE_MODE_NONE
-endif::VK_KHR_depth_stencil_resolve,VK_VERSION_1_2[]
-  * [[VUID-VkRenderingAttachmentInfoKHR-imageView-06132]]
-    If pname:imageView is not dlink:VK_NULL_HANDLE and pname:resolveMode is
-    not ename:VK_RESOLVE_MODE_NONE, pname:imageView must: not have a sample
-    count of ename:VK_SAMPLE_COUNT_1_BIT
-  * [[VUID-VkRenderingAttachmentInfoKHR-imageView-06133]]
-    If pname:imageView is not dlink:VK_NULL_HANDLE and pname:resolveMode is
-    not ename:VK_RESOLVE_MODE_NONE, pname:resolveImageView must: have a
-    sample count of ename:VK_SAMPLE_COUNT_1_BIT
-  * [[VUID-VkRenderingAttachmentInfoKHR-imageView-06134]]
-    If pname:imageView is not dlink:VK_NULL_HANDLE and pname:resolveMode is
-    not ename:VK_RESOLVE_MODE_NONE, pname:imageView and
-    pname:resolveImageView must: have the same elink:VkFormat
-  * [[VUID-VkRenderingAttachmentInfoKHR-imageView-06135]]
-    If pname:imageView is not dlink:VK_NULL_HANDLE, pname:layout must: not
-    be ename:VK_IMAGE_LAYOUT_UNDEFINED,
-    ename:VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL,
-    ename:VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL,
-    ename:VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, or
-    ename:VK_IMAGE_LAYOUT_PREINITIALIZED
-  * [[VUID-VkRenderingAttachmentInfoKHR-imageView-06136]]
-    If pname:imageView is not dlink:VK_NULL_HANDLE and pname:resolveMode is
-    not ename:VK_RESOLVE_MODE_NONE, pname:resolveImageLayout must: not be
-    ename:VK_IMAGE_LAYOUT_UNDEFINED,
-    ename:VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL,
-    ename:VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL,
-    ename:VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL,
-    ename:VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, or
-    ename:VK_IMAGE_LAYOUT_PREINITIALIZED
-ifdef::VK_KHR_separate_depth_stencil_layouts,VK_VERSION_1_2[]
-  * [[VUID-VkRenderingAttachmentInfoKHR-imageView-06137]]
-    If pname:imageView is not dlink:VK_NULL_HANDLE and pname:resolveMode is
-    not ename:VK_RESOLVE_MODE_NONE, pname:resolveImageLayout must: not be
-    ename:VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL or
-    ename:VK_IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL
-endif::VK_KHR_separate_depth_stencil_layouts,VK_VERSION_1_2[]
-ifdef::VK_NV_shading_rate_image[]
-  * [[VUID-VkRenderingAttachmentInfoKHR-imageView-06138]]
-    If pname:imageView is not dlink:VK_NULL_HANDLE, pname:layout must: not
-    be ename:VK_IMAGE_LAYOUT_SHADING_RATE_OPTIMAL_NV
-  * [[VUID-VkRenderingAttachmentInfoKHR-imageView-06139]]
-    If pname:imageView is not dlink:VK_NULL_HANDLE and pname:resolveMode is
-    not ename:VK_RESOLVE_MODE_NONE, pname:resolveImageLayout must: not be
-    ename:VK_IMAGE_LAYOUT_SHADING_RATE_OPTIMAL_NV
-endif::VK_NV_shading_rate_image[]
-ifdef::VK_EXT_fragment_density_map[]
-  * [[VUID-VkRenderingAttachmentInfoKHR-imageView-06140]]
-    If pname:imageView is not dlink:VK_NULL_HANDLE, pname:layout must: not
-    be ename:VK_IMAGE_LAYOUT_FRAGMENT_DENSITY_MAP_OPTIMAL_EXT
-  * [[VUID-VkRenderingAttachmentInfoKHR-imageView-06141]]
-    If pname:imageView is not dlink:VK_NULL_HANDLE and pname:resolveMode is
-    not ename:VK_RESOLVE_MODE_NONE, pname:resolveImageLayout must: not be
-    ename:VK_IMAGE_LAYOUT_FRAGMENT_DENSITY_MAP_OPTIMAL_EXT
-endif::VK_EXT_fragment_density_map[]
-ifdef::VK_KHR_synchronization2[]
-  * [[VUID-VkRenderingAttachmentInfoKHR-imageView-06142]]
-    If pname:imageView is not dlink:VK_NULL_HANDLE and pname:resolveMode is
-    not ename:VK_RESOLVE_MODE_NONE, pname:resolveImageLayout must: not be
-    ename:VK_IMAGE_LAYOUT_READ_ONLY_OPTIMAL_KHR
-endif::VK_KHR_synchronization2[]
-ifdef::VK_KHR_fragment_shading_rate[]
-  * [[VUID-VkRenderingAttachmentInfoKHR-imageView-06143]]
-    If pname:imageView is not dlink:VK_NULL_HANDLE, pname:layout must: not
-    be ename:VK_IMAGE_LAYOUT_FRAGMENT_SHADING_RATE_ATTACHMENT_OPTIMAL_KHR
-  * [[VUID-VkRenderingAttachmentInfoKHR-imageView-06144]]
-    If pname:imageView is not dlink:VK_NULL_HANDLE and pname:resolveMode is
-    not ename:VK_RESOLVE_MODE_NONE, pname:resolveImageLayout must: not be
-    ename:VK_IMAGE_LAYOUT_FRAGMENT_SHADING_RATE_ATTACHMENT_OPTIMAL_KHR
-endif::VK_KHR_fragment_shading_rate[]
-ifdef::VK_KHR_swapchain[]
-  * [[VUID-VkRenderingAttachmentInfoKHR-imageView-06145]]
-    If pname:imageView is not dlink:VK_NULL_HANDLE, pname:layout must: not
-    be ename:VK_IMAGE_LAYOUT_PRESENT_SRC_KHR
-  * [[VUID-VkRenderingAttachmentInfoKHR-imageView-06146]]
-    If pname:imageView is not dlink:VK_NULL_HANDLE and pname:resolveMode is
-    not ename:VK_RESOLVE_MODE_NONE, pname:resolveImageLayout must: not be
-    ename:VK_IMAGE_LAYOUT_PRESENT_SRC_KHR
-endif::VK_KHR_swapchain[]
-****
-
-include::{generated}/validity/structs/VkRenderingAttachmentInfoKHR.txt[]
---
-
-ifdef::VK_KHR_fragment_shading_rate[]
-[open,refpage='VkRenderingFragmentShadingRateAttachmentInfoKHR',desc='Structure specifying fragment shading rate attachment information',type='structs']
---
-The sname:VkRenderingFragmentShadingRateAttachmentInfoKHR structure is
-defined as:
-
-include::{generated}/api/structs/VkRenderingFragmentShadingRateAttachmentInfoKHR.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:imageView is the image view that will be used as a fragment
-    shading rate attachment.
-  * pname:imageLayout is the layout that pname:imageView will be in during
-    rendering.
-  * pname:shadingRateAttachmentTexelSize specifies the number of pixels
-    corresponding to each texel in pname:imageView.
-
-This structure can be included in the pname:pNext chain of
-slink:VkRenderingInfoKHR to define a
-<<primsrast-fragment-shading-rate-attachment, fragment shading rate
-attachment>>.
-If pname:imageView is dlink:VK_NULL_HANDLE, or if this structure is not
-specified, the implementation behaves as if a valid shading rate attachment
-was specified with all texels specifying a single pixel per fragment.
-
-.Valid Usage
-****
-  * [[VUID-VkRenderingFragmentShadingRateAttachmentInfoKHR-imageView-06147]]
-    If pname:imageView is not dlink:VK_NULL_HANDLE, pname:layout must: be
-    ename:VK_IMAGE_LAYOUT_GENERAL or
-    ename:VK_IMAGE_LAYOUT_FRAGMENT_SHADING_RATE_ATTACHMENT_OPTIMAL_KHR
-  * [[VUID-VkRenderingFragmentShadingRateAttachmentInfoKHR-imageView-06148]]
-    If pname:imageView is not dlink:VK_NULL_HANDLE, it must: have been
-    created with
-    ename:VK_IMAGE_USAGE_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR
-  * [[VUID-VkRenderingFragmentShadingRateAttachmentInfoKHR-imageView-06149]]
-    If pname:imageView is not dlink:VK_NULL_HANDLE,
-    pname:shadingRateAttachmentTexelSize.width must: be a power of two value
-  * [[VUID-VkRenderingFragmentShadingRateAttachmentInfoKHR-imageView-06150]]
-    If pname:imageView is not dlink:VK_NULL_HANDLE,
-    pname:shadingRateAttachmentTexelSize.width must: be less than or equal
-    to <<limits-maxFragmentShadingRateAttachmentTexelSize,
-    pname:maxFragmentShadingRateAttachmentTexelSize.width>>
-  * [[VUID-VkRenderingFragmentShadingRateAttachmentInfoKHR-imageView-06151]]
-    If pname:imageView is not dlink:VK_NULL_HANDLE,
-    pname:shadingRateAttachmentTexelSize.width must: be greater than or
-    equal to <<limits-minFragmentShadingRateAttachmentTexelSize,
-    pname:minFragmentShadingRateAttachmentTexelSize.width>>
-  * [[VUID-VkRenderingFragmentShadingRateAttachmentInfoKHR-imageView-06152]]
-    If pname:imageView is not dlink:VK_NULL_HANDLE,
-    pname:shadingRateAttachmentTexelSize.height must: be a power of two
-    value
-  * [[VUID-VkRenderingFragmentShadingRateAttachmentInfoKHR-imageView-06153]]
-    If pname:imageView is not dlink:VK_NULL_HANDLE,
-    pname:shadingRateAttachmentTexelSize.height must: be less than or equal
-    to <<limits-maxFragmentShadingRateAttachmentTexelSize,
-    pname:maxFragmentShadingRateAttachmentTexelSize.height>>
-  * [[VUID-VkRenderingFragmentShadingRateAttachmentInfoKHR-imageView-06154]]
-    If pname:imageView is not dlink:VK_NULL_HANDLE,
-    pname:shadingRateAttachmentTexelSize.height must: be greater than or
-    equal to <<limits-minFragmentShadingRateAttachmentTexelSize,
-    pname:minFragmentShadingRateAttachmentTexelSize.height>>
-  * [[VUID-VkRenderingFragmentShadingRateAttachmentInfoKHR-imageView-06155]]
-    If pname:imageView is not dlink:VK_NULL_HANDLE, the quotient of
-    pname:shadingRateAttachmentTexelSize.width and
-    pname:shadingRateAttachmentTexelSize.height must: be less than or equal
-    to <<limits-maxFragmentShadingRateAttachmentTexelSizeAspectRatio,
-    pname:maxFragmentShadingRateAttachmentTexelSizeAspectRatio>>
-  * [[VUID-VkRenderingFragmentShadingRateAttachmentInfoKHR-imageView-06156]]
-    If pname:imageView is not dlink:VK_NULL_HANDLE, the quotient of
-    pname:shadingRateAttachmentTexelSize.height and
-    pname:shadingRateAttachmentTexelSize.width must: be less than or equal
-    to <<limits-maxFragmentShadingRateAttachmentTexelSizeAspectRatio,
-    pname:maxFragmentShadingRateAttachmentTexelSizeAspectRatio>>
-****
-
-include::{generated}/validity/structs/VkRenderingFragmentShadingRateAttachmentInfoKHR.txt[]
---
-endif::VK_KHR_fragment_shading_rate[]
-
-ifdef::VK_EXT_fragment_density_map[]
-[open,refpage='VkRenderingFragmentDensityMapAttachmentInfoEXT',desc='Structure specifying fragment shading rate attachment information',type='structs']
---
-The sname:VkRenderingFragmentDensityMapAttachmentInfoEXT structure is
-defined as:
-
-include::{generated}/api/structs/VkRenderingFragmentDensityMapAttachmentInfoEXT.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:imageView is the image view that will be used as a fragment
-    shading rate attachment.
-  * pname:imageLayout is the layout that pname:imageView will be in during
-    rendering.
-
-This structure can be included in the pname:pNext chain of
-slink:VkRenderingInfoKHR to define a fragment density map.
-If pname:imageView is dlink:VK_NULL_HANDLE, or if this structure is not
-specified, pname:imageView is dlink:VK_NULL_HANDLE.
-
-.Valid Usage
-****
-  * [[VUID-VkRenderingFragmentDensityMapAttachmentInfoEXT-imageView-06157]]
-    If pname:imageView is not dlink:VK_NULL_HANDLE, pname:layout must: be
-    ename:VK_IMAGE_LAYOUT_GENERAL or
-    ename:VK_IMAGE_LAYOUT_FRAGMENT_DENSITY_MAP_OPTIMAL_EXT
-  * [[VUID-VkRenderingFragmentDensityMapAttachmentInfoEXT-imageView-06158]]
-    If pname:imageView is not dlink:VK_NULL_HANDLE, it must: have been
-    created with ename:VK_IMAGE_USAGE_FRAGMENT_DENSITY_MAP_BIT_EXT
-  * [[VUID-VkRenderingFragmentDensityMapAttachmentInfoEXT-imageView-06159]]
-    If pname:imageView is not dlink:VK_NULL_HANDLE, it must: not have been
-    created with ename:VK_IMAGE_CREATE_SUBSAMPLED_BIT_EXT
-ifndef::VK_VERSION_1_1,VK_KHR_multiview[]
-  * [[VUID-VkRenderingFragmentDensityMapAttachmentInfoEXT-imageView-06160]]
-    If pname:imageView is not dlink:VK_NULL_HANDLE, it must: have a
-    pname:layerCount equal to `1`
-endif::VK_VERSION_1_1,VK_KHR_multiview[]
-****
-
-include::{generated}/validity/structs/VkRenderingFragmentDensityMapAttachmentInfoEXT.txt[]
---
-endif::VK_EXT_fragment_density_map[]
-
-[open,refpage='vkCmdEndRenderingKHR',desc='End a dynamic render pass instance',type='protos']
---
-To end a render pass instance, call:
-
-include::{generated}/api/protos/vkCmdEndRenderingKHR.txt[]
-
-  * pname:commandBuffer is the command buffer in which to record the
-    command.
-
-If the value of pname:pRenderingInfo->flags used to begin this render pass
-instance included ename:VK_RENDERING_SUSPENDING_BIT_KHR, then this render
-pass is suspended and will be resumed later in
-<<synchronization-submission-order, submission order>>.
-
-.Valid Usage
-****
-  * [[VUID-vkCmdEndRenderingKHR-None-06161]]
-    The current render pass instance must: have been begun with
-    flink:vkCmdBeginRenderingKHR
-  * [[VUID-vkCmdEndRenderingKHR-commandBuffer-06162]]
-    The current render pass instance must: have been begun in
-    pname:commandBuffer
-****
-include::{generated}/validity/protos/vkCmdEndRenderingKHR.txt[]
---
-
-[NOTE]
-.Note
-====
-For more complex rendering graphs, it's possible to pre-define a static
-_render pass_ object, which as well as allowing draw commands, allows the
-definition of framebuffer-local dependencies between multiple subpasses.
-These objects have a lot of setup cost compared to
-flink:vkCmdBeginRenderingKHR, but use of subpass dependencies can confer
-important performance benefits on some devices.
-====
-endif::VK_KHR_dynamic_rendering[]
-
-[open,refpage='VkRenderPass',desc='Opaque handle to a render pass object',type='handles']
---
-A render pass object represents a collection of attachments, subpasses, and
-dependencies between the subpasses, and describes how the attachments are
-used over the course of the subpasses.
-
-Render passes are represented by sname:VkRenderPass handles:
-
-include::{generated}/api/handles/VkRenderPass.txt[]
---
-
-An _attachment description_ describes the properties of an attachment
-including its format, sample count, and how its contents are treated at the
-beginning and end of each render pass instance.
-
-[[renderpass-subpass]]
-A _subpass_ represents a phase of rendering that reads and writes a subset
-of the attachments in a render pass.
-Rendering commands are recorded into a particular subpass of a render pass
-instance.
-
-A _subpass description_ describes the subset of attachments that is involved
-in the execution of a subpass.
-Each subpass can: read from some attachments as _input attachments_, write
-to some as _color attachments_ or _depth/stencil attachments_,
-ifdef::VK_QCOM_render_pass_shader_resolve[]
-perform _shader resolve operations_ to _color_attachments_ or
-_depth/stencil_attachments_,
-endif::VK_QCOM_render_pass_shader_resolve[]
-and perform _multisample resolve operations_ to _resolve attachments_.
-A subpass description can: also include a set of _preserve attachments_,
-which are attachments that are not read or written by the subpass but whose
-contents must: be preserved throughout the subpass.
-
-A subpass _uses an attachment_ if the attachment is a color, depth/stencil,
-resolve,
-ifdef::VK_VERSION_1_2,VK_KHR_depth_stencil_resolve[]
-depth/stencil resolve,
-endif::VK_VERSION_1_2,VK_KHR_depth_stencil_resolve[]
-ifdef::VK_KHR_fragment_shading_rate[]
-fragment shading rate,
-endif::VK_KHR_fragment_shading_rate[]
-or input attachment for that subpass (as determined by the
-pname:pColorAttachments, pname:pDepthStencilAttachment,
-pname:pResolveAttachments,
-ifdef::VK_VERSION_1_2,VK_KHR_depth_stencil_resolve[]
-slink:VkSubpassDescriptionDepthStencilResolve::pname:pDepthStencilResolveAttachment,
-endif::VK_VERSION_1_2,VK_KHR_depth_stencil_resolve[]
-ifdef::VK_KHR_fragment_shading_rate[]
-slink:VkFragmentShadingRateAttachmentInfoKHR::pname:pFragmentShadingRateAttachment->attachment,
-endif::VK_KHR_fragment_shading_rate[]
-and pname:pInputAttachments members of slink:VkSubpassDescription,
-respectively).
-A subpass does not use an attachment if that attachment is preserved by the
-subpass.
-The _first use of an attachment_ is in the lowest numbered subpass that uses
-that attachment.
-Similarly, the _last use of an attachment_ is in the highest numbered
-subpass that uses that attachment.
-
-The subpasses in a render pass all render to the same dimensions, and
-fragments for pixel (x,y,layer) in one subpass can: only read attachment
-contents written by previous subpasses at that same (x,y,layer) location.
-ifdef::VK_KHR_fragment_shading_rate,VK_NV_shading_rate,VK_EXT_fragment_density_map[]
-For multi-pixel fragments, the pixel read from an input attachment is
-selected from the pixels covered by that fragment in an
-implementation-dependent manner.
-However, this selection must: be made consistently for any fragment with the
-same shading rate for the lifetime of the slink:VkDevice.
-endif::VK_KHR_fragment_shading_rate,VK_NV_shading_rate,VK_EXT_fragment_density_map[]
-
-[NOTE]
-.Note
-====
-By describing a complete set of subpasses in advance, render passes provide
-the implementation an opportunity to optimize the storage and transfer of
-attachment data between subpasses.
-
-In practice, this means that subpasses with a simple framebuffer-space
-dependency may: be merged into a single tiled rendering pass, keeping the
-attachment data on-chip for the duration of a render pass instance.
-However, it is also quite common for a render pass to only contain a single
-subpass.
-====
-
-_Subpass dependencies_ describe <<synchronization-dependencies, execution
-and memory dependencies>> between subpasses.
-
-A _subpass dependency chain_ is a sequence of subpass dependencies in a
-render pass, where the source subpass of each subpass dependency (after the
-first) equals the destination subpass of the previous dependency.
-
-Execution of subpasses may: overlap or execute out of order with regards to
-other subpasses, unless otherwise enforced by an execution dependency.
-Each subpass only respects <<synchronization-submission-order, submission
-order>> for commands recorded in the same subpass, and the
-flink:vkCmdBeginRenderPass and flink:vkCmdEndRenderPass commands that
-delimit the render pass - commands within other subpasses are not included.
-This affects most other <<synchronization-implicit, implicit ordering
-guarantees>>.
-
-A render pass describes the structure of subpasses and attachments
-independent of any specific image views for the attachments.
-The specific image views that will be used for the attachments, and their
-dimensions, are specified in sname:VkFramebuffer objects.
-Framebuffers are created with respect to a specific render pass that the
-framebuffer is compatible with (see <<renderpass-compatibility,Render Pass
-Compatibility>>).
-Collectively, a render pass and a framebuffer define the complete render
-target state for one or more subpasses as well as the algorithmic
-dependencies between the subpasses.
-
-The various pipeline stages of the drawing commands for a given subpass may:
-execute concurrently and/or out of order, both within and across drawing
-commands, whilst still respecting <<synchronization-pipeline-stages-order,
-pipeline order>>.
-However for a given (x,y,layer,sample) sample location, certain per-sample
-operations are performed in <<primsrast-order,rasterization order>>.
-
-[open,refpage='VK_ATTACHMENT_UNUSED',desc='Unused attachment sentinel',type='consts']
---
-ename:VK_ATTACHMENT_UNUSED is a constant indicating that a render pass
-attachment is not used.
-
-include::{generated}/api/enums/VK_ATTACHMENT_UNUSED.txt[]
---
-
-
-[[renderpass-creation]]
-== Render Pass Creation
-
-[open,refpage='vkCreateRenderPass',desc='Create a new render pass object',type='protos']
---
-To create a render pass, call:
-
-include::{generated}/api/protos/vkCreateRenderPass.txt[]
-
-  * pname:device is the logical device that creates the render pass.
-  * pname:pCreateInfo is a pointer to a slink:VkRenderPassCreateInfo
-    structure describing the parameters of the render pass.
-  * pname:pAllocator controls host memory allocation as described in the
-    <<memory-allocation, Memory Allocation>> chapter.
-  * pname:pRenderPass is a pointer to a slink:VkRenderPass handle in which
-    the resulting render pass object is returned.
-
-include::{generated}/validity/protos/vkCreateRenderPass.txt[]
---
-
-[open,refpage='VkRenderPassCreateInfo',desc='Structure specifying parameters of a newly created render pass',type='structs']
---
-The sname:VkRenderPassCreateInfo structure is defined as:
-
-include::{generated}/api/structs/VkRenderPassCreateInfo.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-ifndef::VK_QCOM_render_pass_transform[]
-  * pname:flags is reserved for future use.
-endif::VK_QCOM_render_pass_transform[]
-ifdef::VK_QCOM_render_pass_transform[]
-  * pname:flags is a bitmask of elink:VkRenderPassCreateFlagBits
-endif::VK_QCOM_render_pass_transform[]
-  * pname:attachmentCount is the number of attachments used by this render
-    pass.
-  * pname:pAttachments is a pointer to an array of pname:attachmentCount
-    slink:VkAttachmentDescription structures describing the attachments used
-    by the render pass.
-  * pname:subpassCount is the number of subpasses to create.
-  * pname:pSubpasses is a pointer to an array of pname:subpassCount
-    slink:VkSubpassDescription structures describing each subpass.
-  * pname:dependencyCount is the number of memory dependencies between pairs
-    of subpasses.
-  * pname:pDependencies is a pointer to an array of pname:dependencyCount
-    slink:VkSubpassDependency structures describing dependencies between
-    pairs of subpasses.
-
-[NOTE]
-.Note
-====
-Care should be taken to avoid a data race here; if any subpasses access
-attachments with overlapping memory locations, and one of those accesses is
-a write, a subpass dependency needs to be included between them.
-====
-
-.Valid Usage
-****
-  * [[VUID-VkRenderPassCreateInfo-attachment-00834]]
-    If the pname:attachment member of any element of
-    pname:pInputAttachments, pname:pColorAttachments,
-    pname:pResolveAttachments or pname:pDepthStencilAttachment, or any
-    element of pname:pPreserveAttachments in any element of pname:pSubpasses
-    is not ename:VK_ATTACHMENT_UNUSED, it must: be less than
-    pname:attachmentCount
-  * [[VUID-VkRenderPassCreateInfo-pAttachments-00836]]
-    For any member of pname:pAttachments with a pname:loadOp equal to
-    ename:VK_ATTACHMENT_LOAD_OP_CLEAR, the first use of that attachment
-    must: not specify a pname:layout equal to
-    ename:VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL or
-    ename:VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL
-  * [[VUID-VkRenderPassCreateInfo-pAttachments-02511]]
-    For any member of pname:pAttachments with a pname:stencilLoadOp equal to
-    ename:VK_ATTACHMENT_LOAD_OP_CLEAR, the first use of that attachment
-    must: not specify a pname:layout equal to
-    ename:VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL or
-    ename:VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL
-ifdef::VK_VERSION_1_1,VK_KHR_maintenance2[]
-  * [[VUID-VkRenderPassCreateInfo-pAttachments-01566]]
-    For any member of pname:pAttachments with a pname:loadOp equal to
-    ename:VK_ATTACHMENT_LOAD_OP_CLEAR, the first use of that attachment
-    must: not specify a pname:layout equal to
-    ename:VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_OPTIMAL
-  * [[VUID-VkRenderPassCreateInfo-pAttachments-01567]]
-    For any member of pname:pAttachments with a pname:stencilLoadOp equal to
-    ename:VK_ATTACHMENT_LOAD_OP_CLEAR, the first use of that attachment
-    must: not specify a pname:layout equal to
-    ename:VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_OPTIMAL
-  * [[VUID-VkRenderPassCreateInfo-pNext-01926]]
-    If the pname:pNext chain includes a
-    slink:VkRenderPassInputAttachmentAspectCreateInfo structure, the
-    pname:subpass member of each element of its pname:pAspectReferences
-    member must: be less than pname:subpassCount
-  * [[VUID-VkRenderPassCreateInfo-pNext-01927]]
-    If the pname:pNext chain includes a
-    slink:VkRenderPassInputAttachmentAspectCreateInfo structure, the
-    pname:inputAttachmentIndex member of each element of its
-    pname:pAspectReferences member must: be less than the value of
-    pname:inputAttachmentCount in the element of pname:pSubpasses identified
-    by its pname:subpass member
-  * [[VUID-VkRenderPassCreateInfo-pNext-01963]]
-    If the pname:pNext chain includes a
-    slink:VkRenderPassInputAttachmentAspectCreateInfo structure, for any
-    element of the pname:pInputAttachments member of any element of
-    pname:pSubpasses where the pname:attachment member is not
-    ename:VK_ATTACHMENT_UNUSED, the pname:aspectMask member of the
-    corresponding element of
-    slink:VkRenderPassInputAttachmentAspectCreateInfo::pname:pAspectReferences
-    must: only include aspects that are present in images of the format
-    specified by the element of pname:pAttachments at pname:attachment
-endif::VK_VERSION_1_1,VK_KHR_maintenance2[]
-ifdef::VK_VERSION_1_1,VK_KHR_multiview[]
-  * [[VUID-VkRenderPassCreateInfo-pNext-01928]]
-    If the pname:pNext chain includes a
-    slink:VkRenderPassMultiviewCreateInfo structure, and its
-    pname:subpassCount member is not zero, that member must: be equal to the
-    value of pname:subpassCount
-  * [[VUID-VkRenderPassCreateInfo-pNext-01929]]
-    If the pname:pNext chain includes a
-    slink:VkRenderPassMultiviewCreateInfo structure, if its
-    pname:dependencyCount member is not zero, it must: be equal to
-    pname:dependencyCount
-  * [[VUID-VkRenderPassCreateInfo-pNext-01930]]
-    If the pname:pNext chain includes a
-    slink:VkRenderPassMultiviewCreateInfo structure, for each non-zero
-    element of pname:pViewOffsets, the pname:srcSubpass and pname:dstSubpass
-    members of pname:pDependencies at the same index must: not be equal
-  * [[VUID-VkRenderPassCreateInfo-pNext-02512]]
-    If the pname:pNext chain includes a
-    slink:VkRenderPassMultiviewCreateInfo structure, for any element of
-    pname:pDependencies with a pname:dependencyFlags member that does not
-    include ename:VK_DEPENDENCY_VIEW_LOCAL_BIT, the corresponding element of
-    the pname:pViewOffsets member of that
-    slink:VkRenderPassMultiviewCreateInfo instance must: be `0`
-  * [[VUID-VkRenderPassCreateInfo-pNext-02513]]
-    If the pname:pNext chain includes a
-    slink:VkRenderPassMultiviewCreateInfo structure, elements of its
-    pname:pViewMasks member must: either all be `0`, or all not be `0`
-  * [[VUID-VkRenderPassCreateInfo-pNext-02514]]
-    If the pname:pNext chain includes a
-    slink:VkRenderPassMultiviewCreateInfo structure, and each element of its
-    pname:pViewMasks member is `0`, the pname:dependencyFlags member of each
-    element of pname:pDependencies must: not include
-    ename:VK_DEPENDENCY_VIEW_LOCAL_BIT
-  * [[VUID-VkRenderPassCreateInfo-pNext-02515]]
-    If the pname:pNext chain includes a
-    slink:VkRenderPassMultiviewCreateInfo structure, and each element of its
-    pname:pViewMasks member is `0`, its pname:correlationMaskCount member
-    must: be `0`
-endif::VK_VERSION_1_1,VK_KHR_multiview[]
-  * [[VUID-VkRenderPassCreateInfo-pDependencies-00837]]
-    For any element of pname:pDependencies, if the pname:srcSubpass is not
-    ename:VK_SUBPASS_EXTERNAL, all stage flags included in the
-    pname:srcStageMask member of that dependency must: be a pipeline stage
-    supported by the <<synchronization-pipeline-stages-types, pipeline>>
-    identified by the pname:pipelineBindPoint member of the source subpass
-  * [[VUID-VkRenderPassCreateInfo-pDependencies-00838]]
-    For any element of pname:pDependencies, if the pname:dstSubpass is not
-    ename:VK_SUBPASS_EXTERNAL, all stage flags included in the
-    pname:dstStageMask member of that dependency must: be a pipeline stage
-    supported by the <<synchronization-pipeline-stages-types, pipeline>>
-    identified by the pname:pipelineBindPoint member of the destination
-    subpass
-  * [[VUID-VkRenderPassCreateInfo-srcSubpass-02517]]
-    The pname:srcSubpass member of each element of pname:pDependencies must:
-    be less than pname:subpassCount
-  * [[VUID-VkRenderPassCreateInfo-dstSubpass-02518]]
-    The pname:dstSubpass member of each element of pname:pDependencies must:
-    be less than pname:subpassCount
-****
-
-include::{generated}/validity/structs/VkRenderPassCreateInfo.txt[]
---
-
-ifdef::VK_QCOM_render_pass_transform[]
-[open,refpage='VkRenderPassCreateFlagBits',desc='Bitmask specifying additional properties of a render pass',type='enums']
---
-Bits which can: be set in slink:VkRenderPassCreateInfo::pname:flags
-describing additional properties of the render pass are:
-
-include::{generated}/api/enums/VkRenderPassCreateFlagBits.txt[]
-
-  * ename:VK_RENDER_PASS_CREATE_TRANSFORM_BIT_QCOM specifies that the
-    created render pass is compatible with
-    <<vertexpostproc-renderpass-transform, render pass transform>>.
---
-endif::VK_QCOM_render_pass_transform[]
-
-[open,refpage='VkRenderPassCreateFlags',desc='Bitmask of VkRenderPassCreateFlagBits',type='flags']
---
-include::{generated}/api/flags/VkRenderPassCreateFlags.txt[]
-
-tname:VkRenderPassCreateFlags is a bitmask type for setting a mask of zero
-or more elink:VkRenderPassCreateFlagBits.
---
-
-ifdef::VK_VERSION_1_1,VK_KHR_multiview[]
-[[renderpass-multiview]]
-[open,refpage='VkRenderPassMultiviewCreateInfo',desc='Structure containing multiview information for all subpasses',type='structs']
---
-If the slink:VkRenderPassCreateInfo::pname:pNext chain includes a
-sname:VkRenderPassMultiviewCreateInfo structure, then that structure
-includes an array of view masks, view offsets, and correlation masks for the
-render pass.
-
-The sname:VkRenderPassMultiviewCreateInfo structure is defined as:
-
-include::{generated}/api/structs/VkRenderPassMultiviewCreateInfo.txt[]
-
-ifdef::VK_KHR_multiview[]
-or the equivalent
-
-include::{generated}/api/structs/VkRenderPassMultiviewCreateInfoKHR.txt[]
-endif::VK_KHR_multiview[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:subpassCount is zero or the number of subpasses in the render
-    pass.
-  * pname:pViewMasks is a pointer to an array of pname:subpassCount view
-    masks, where each mask is a bitfield of view indices describing which
-    views rendering is broadcast to in each subpass, when multiview is
-    enabled.
-    If pname:subpassCount is zero, each view mask is treated as zero.
-  * pname:dependencyCount is zero or the number of dependencies in the
-    render pass.
-  * pname:pViewOffsets is a pointer to an array of pname:dependencyCount
-    view offsets, one for each dependency.
-    If pname:dependencyCount is zero, each dependency's view offset is
-    treated as zero.
-    Each view offset controls which views in the source subpass the views in
-    the destination subpass depend on.
-  * pname:correlationMaskCount is zero or the number of correlation masks.
-  * pname:pCorrelationMasks is a pointer to an array of
-    pname:correlationMaskCount view masks indicating sets of views that may:
-    be more efficient to render concurrently.
-
-When a subpass uses a non-zero view mask, _multiview_ functionality is
-considered to be enabled.
-Multiview is all-or-nothing for a render pass - that is, either all
-subpasses must: have a non-zero view mask (though some subpasses may: have
-only one view) or all must: be zero.
-Multiview causes all drawing and clear commands in the subpass to behave as
-if they were broadcast to each view, where a view is represented by one
-layer of the framebuffer attachments.
-All draws and clears are broadcast to each _view index_ whose bit is set in
-the view mask.
-The view index is provided in the code:ViewIndex shader input variable, and
-color, depth/stencil, and input attachments all read/write the layer of the
-framebuffer corresponding to the view index.
-
-If the view mask is zero for all subpasses, multiview is considered to be
-disabled and all drawing commands execute normally, without this additional
-broadcasting.
-
-Some implementations may: not support multiview in conjunction with
-<<features-multiview-gs,geometry shaders>> or
-<<features-multiview-tess,tessellation shaders>>.
-
-[[renderpass-multiview-view-local]]
-When multiview is enabled, the ename:VK_DEPENDENCY_VIEW_LOCAL_BIT bit in a
-dependency can: be used to express a view-local dependency, meaning that
-each view in the destination subpass depends on a single view in the source
-subpass.
-Unlike pipeline barriers, a subpass dependency can: potentially have a
-different view mask in the source subpass and the destination subpass.
-If the dependency is view-local, then each view ([eq]#dstView#) in the
-destination subpass depends on the view [eq]#dstView {plus}
-pname:pViewOffsets[dependency]# in the source subpass.
-If there is not such a view in the source subpass, then this dependency does
-not affect that view in the destination subpass.
-If the dependency is not view-local, then all views in the destination
-subpass depend on all views in the source subpass, and the view offset is
-ignored.
-A non-zero view offset is not allowed in a self-dependency.
-
-The elements of pname:pCorrelationMasks are a set of masks of views
-indicating that views in the same mask may: exhibit spatial coherency
-between the views, making it more efficient to render them concurrently.
-Correlation masks must: not have a functional effect on the results of the
-multiview rendering.
-
-When multiview is enabled, at the beginning of each subpass all non-render
-pass state is undefined:.
-In particular, each time flink:vkCmdBeginRenderPass or
-flink:vkCmdNextSubpass is called the graphics pipeline must: be bound, any
-relevant descriptor sets or vertex/index buffers must: be bound, and any
-relevant dynamic state or push constants must: be set before they are used.
-
-ifdef::VK_NVX_multiview_per_view_attributes[]
-
-A multiview subpass can: declare that its shaders will write per-view
-attributes for all views in a single invocation, by setting the
-ename:VK_SUBPASS_DESCRIPTION_PER_VIEW_ATTRIBUTES_BIT_NVX bit in the subpass
-description.
-The only supported per-view attributes are position and viewport mask, and
-per-view position and viewport masks are written to output array variables
-decorated with code:PositionPerViewNV and code:ViewportMaskPerViewNV,
-respectively.
-If `apiext:VK_NV_viewport_array2` is not supported and enabled,
-code:ViewportMaskPerViewNV must: not be used.
-Values written to elements of code:PositionPerViewNV and
-code:ViewportMaskPerViewNV must: not depend on the code:ViewIndex.
-The shader must: also write to an output variable decorated with
-code:Position, and the value written to code:Position must: equal the value
-written to code:PositionPerViewNV[code:ViewIndex].
-Similarly, if code:ViewportMaskPerViewNV is written to then the shader must:
-also write to an output variable decorated with code:ViewportMaskNV, and the
-value written to code:ViewportMaskNV must: equal the value written to
-code:ViewportMaskPerViewNV[code:ViewIndex].
-Implementations will either use values taken from code:Position and
-code:ViewportMaskNV and invoke the shader once for each view, or will use
-values taken from code:PositionPerViewNV and code:ViewportMaskPerViewNV and
-invoke the shader fewer times.
-The values written to code:Position and code:ViewportMaskNV must: not depend
-on the values written to code:PositionPerViewNV and
-code:ViewportMaskPerViewNV, or vice versa (to allow compilers to eliminate
-the unused outputs).
-All attributes that do not have `*PerViewNV` counterparts must: not depend
-on code:ViewIndex.
-
-Per-view attributes are all-or-nothing for a subpass.
-That is, all pipelines compiled against a subpass that includes the
-ename:VK_SUBPASS_DESCRIPTION_PER_VIEW_ATTRIBUTES_BIT_NVX bit must: write
-per-view attributes to the `*PerViewNV[]` shader outputs, in addition to the
-non-per-view (e.g. code:Position) outputs.
-Pipelines compiled against a subpass that does not include this bit must:
-not include the `*PerViewNV[]` outputs in their interfaces.
-
-endif::VK_NVX_multiview_per_view_attributes[]
-
-.Valid Usage
-****
-  * [[VUID-VkRenderPassMultiviewCreateInfo-pCorrelationMasks-00841]]
-    Each view index must: not be set in more than one element of
-    pname:pCorrelationMasks
-****
-
-include::{generated}/validity/structs/VkRenderPassMultiviewCreateInfo.txt[]
---
-endif::VK_VERSION_1_1,VK_KHR_multiview[]
-
-ifdef::VK_NVX_multiview_per_view_attributes[]
-ifdef::VK_KHR_dynamic_rendering[]
-
-[open,refpage='VkMultiviewPerViewAttributesInfoNVX',desc='Structure specifying the multiview per-attribute properties',type='structs']
---
-
-The sname:VkMultiviewPerViewAttributesInfoNVX structure is defined as:
-
-include::{generated}/api/structs/VkMultiviewPerViewAttributesInfoNVX.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:perViewAttributes specifies that shaders compiled for this
-    pipeline write the attributes for all views in a single invocation of
-    each vertex processing stage.
-    All pipelines executed within a render pass instance that includes this
-    bit must: write per-view attributes to the `*PerViewNV[]` shader
-    outputs, in addition to the non-per-view (e.g. code:Position) outputs.
-  * pname:perViewAttributesPositionXOnly specifies that shaders compiled for
-    this pipeline use per-view positions which only differ in value in the x
-    component.
-    Per-view viewport mask can: also be used.
-
-When dynamic render pass instances are being used, instead of specifying
-ename:VK_SUBPASS_DESCRIPTION_PER_VIEW_ATTRIBUTES_BIT_NVX or
-ename:VK_SUBPASS_DESCRIPTION_PER_VIEW_POSITION_X_ONLY_BIT_NVX in the subpass
-description flags, the per-attibute properties of the render pass instance
-must: be specified by the sname:VkMultiviewPerViewAttributesInfoNVX
-structure Include the sname:VkMultiviewPerViewAttributesInfoNVX structure in
-the pname:pNext chain of slink:VkGraphicsPipelineCreateInfo when creating a
-graphics pipeline for dynamic rendering, slink:VkRenderingInfoKHR when
-starting a dynamic render pass instance, and
-slink:VkCommandBufferInheritanceInfo when specifying the dynamic render pass
-instance parameters for secondary command buffers.
-
-.Valid Usage
-****
-  * [[VUID-VkMultiviewPerViewAttributesInfoNVX-perViewAttributesPositionXOnly-06163]]
-    If pname:perViewAttributesPositionXOnly is ename:VK_TRUE then
-    pname:perViewAttributes must: also be ename:VK_TRUE
-****
-
-include::{generated}/validity/structs/VkMultiviewPerViewAttributesInfoNVX.txt[]
---
-endif::VK_KHR_dynamic_rendering[]
-endif::VK_NVX_multiview_per_view_attributes[]
-
-ifdef::VK_EXT_fragment_density_map[]
-[[renderpass-fragmentdensitymapattachment]]
-[open,refpage='VkRenderPassFragmentDensityMapCreateInfoEXT',desc='Structure containing fragment density map attachment for render pass',type='structs']
---
-If the slink:VkRenderPassCreateInfo::pname:pNext chain includes a
-sname:VkRenderPassFragmentDensityMapCreateInfoEXT structure, then that
-structure includes a fragment density map attachment for the render pass.
-
-The sname:VkRenderPassFragmentDensityMapCreateInfoEXT structure is defined
-as:
-
-include::{generated}/api/structs/VkRenderPassFragmentDensityMapCreateInfoEXT.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:fragmentDensityMapAttachment is the fragment density map to use
-    for the render pass.
-
-The fragment density map is read at an implementation-dependent time with
-the following constraints determined by the attachment's image view
-pname:flags:
-
-  * ename:VK_IMAGE_VIEW_CREATE_FRAGMENT_DENSITY_MAP_DYNAMIC_BIT_EXT
-    specifies that the fragment density map will be read by the device
-    during ename:VK_PIPELINE_STAGE_FRAGMENT_DENSITY_PROCESS_BIT_EXT
-ifdef::VK_EXT_fragment_density_map2[]
-  * ename:VK_IMAGE_VIEW_CREATE_FRAGMENT_DENSITY_MAP_DEFERRED_BIT_EXT
-    specifies that the fragment density map will be read by the host during
-    flink:vkEndCommandBuffer of the primary command buffer that the render
-    pass is recorded into
-endif::VK_EXT_fragment_density_map2[]
-  * Otherwise the fragment density map will be read by the host during
-    flink:vkCmdBeginRenderPass
-
-The fragment density map may: additionally be read by the device during
-ename:VK_PIPELINE_STAGE_FRAGMENT_DENSITY_PROCESS_BIT_EXT for any mode.
-
-If this structure is not present, it is as if
-pname:fragmentDensityMapAttachment was given as ename:VK_ATTACHMENT_UNUSED.
-
-.Valid Usage
-****
-  * [[VUID-VkRenderPassFragmentDensityMapCreateInfoEXT-fragmentDensityMapAttachment-02547]]
-    If pname:fragmentDensityMapAttachment is not ename:VK_ATTACHMENT_UNUSED,
-    pname:fragmentDensityMapAttachment must: be less than
-    sname:VkRenderPassCreateInfo::pname:attachmentCount
-  * [[VUID-VkRenderPassFragmentDensityMapCreateInfoEXT-fragmentDensityMapAttachment-02548]]
-    If pname:fragmentDensityMapAttachment is not ename:VK_ATTACHMENT_UNUSED,
-    pname:fragmentDensityMapAttachment must: not be an element of
-    sname:VkSubpassDescription::pname:pInputAttachments,
-    sname:VkSubpassDescription::pname:pColorAttachments,
-    sname:VkSubpassDescription::pname:pResolveAttachments,
-    sname:VkSubpassDescription::pname:pDepthStencilAttachment, or
-    sname:VkSubpassDescription::pname:pPreserveAttachments for any subpass
-  * [[VUID-VkRenderPassFragmentDensityMapCreateInfoEXT-fragmentDensityMapAttachment-02549]]
-    If pname:fragmentDensityMapAttachment is not ename:VK_ATTACHMENT_UNUSED,
-    pname:layout must: be equal to
-    ename:VK_IMAGE_LAYOUT_FRAGMENT_DENSITY_MAP_OPTIMAL_EXT, or
-    ename:VK_IMAGE_LAYOUT_GENERAL
-  * [[VUID-VkRenderPassFragmentDensityMapCreateInfoEXT-fragmentDensityMapAttachment-02550]]
-    If pname:fragmentDensityMapAttachment is not ename:VK_ATTACHMENT_UNUSED,
-    pname:fragmentDensityMapAttachment must: reference an attachment with a
-    pname:loadOp equal to ename:VK_ATTACHMENT_LOAD_OP_LOAD or
-    ename:VK_ATTACHMENT_LOAD_OP_DONT_CARE
-  * [[VUID-VkRenderPassFragmentDensityMapCreateInfoEXT-fragmentDensityMapAttachment-02551]]
-    If pname:fragmentDensityMapAttachment is not ename:VK_ATTACHMENT_UNUSED,
-    pname:fragmentDensityMapAttachment must: reference an attachment with a
-    pname:storeOp equal to ename:VK_ATTACHMENT_STORE_OP_DONT_CARE
-****
-
-include::{generated}/validity/structs/VkRenderPassFragmentDensityMapCreateInfoEXT.txt[]
---
-endif::VK_EXT_fragment_density_map[]
-
-[open,refpage='VkAttachmentDescription',desc='Structure specifying an attachment description',type='structs']
---
-The sname:VkAttachmentDescription structure is defined as:
-
-include::{generated}/api/structs/VkAttachmentDescription.txt[]
-
-  * pname:flags is a bitmask of elink:VkAttachmentDescriptionFlagBits
-    specifying additional properties of the attachment.
-  * pname:format is a elink:VkFormat value specifying the format of the
-    image view that will be used for the attachment.
-  * pname:samples is a elink:VkSampleCountFlagBits value specifying the
-    number of samples of the image.
-  * pname:loadOp is a elink:VkAttachmentLoadOp value specifying how the
-    contents of color and depth components of the attachment are treated at
-    the beginning of the subpass where it is first used.
-  * pname:storeOp is a elink:VkAttachmentStoreOp value specifying how the
-    contents of color and depth components of the attachment are treated at
-    the end of the subpass where it is last used.
-  * pname:stencilLoadOp is a elink:VkAttachmentLoadOp value specifying how
-    the contents of stencil components of the attachment are treated at the
-    beginning of the subpass where it is first used.
-  * pname:stencilStoreOp is a elink:VkAttachmentStoreOp value specifying how
-    the contents of stencil components of the attachment are treated at the
-    end of the last subpass where it is used.
-  * pname:initialLayout is the layout the attachment image subresource will
-    be in when a render pass instance begins.
-  * pname:finalLayout is the layout the attachment image subresource will be
-    transitioned to when a render pass instance ends.
-
-[[renderpass-load-store-ops]]
-If the attachment uses a color format, then pname:loadOp and pname:storeOp
-are used, and pname:stencilLoadOp and pname:stencilStoreOp are ignored.
-If the format has depth and/or stencil components, pname:loadOp and
-pname:storeOp apply only to the depth data, while pname:stencilLoadOp and
-pname:stencilStoreOp define how the stencil data is handled.
-pname:loadOp and pname:stencilLoadOp define the _load operations_ that
-execute as part of the first subpass that uses the attachment.
-pname:storeOp and pname:stencilStoreOp define the _store operations_ that
-execute as part of the last subpass that uses the attachment.
-
-The load operation for each sample in an attachment happens-before any
-recorded command which accesses the sample in the first subpass where the
-attachment is used.
-Load operations for attachments with a depth/stencil format execute in the
-ename:VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT pipeline stage.
-Load operations for attachments with a color format execute in the
-ename:VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT pipeline stage.
-
-The store operation for each sample in an attachment happens-after any
-recorded command which accesses the sample in the last subpass where the
-attachment is used.
-Store operations for attachments with a depth/stencil format execute in the
-ename:VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT pipeline stage.
-Store operations for attachments with a color format execute in the
-ename:VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT pipeline stage.
-
-If an attachment is not used by any subpass, then pname:loadOp,
-pname:storeOp, pname:stencilStoreOp, and pname:stencilLoadOp are ignored,
-and the attachment's memory contents will not be modified by execution of a
-render pass instance.
-
-ifdef::VK_VERSION_1_1,VK_KHR_multiview[]
-
-The load and store operations apply on the first and last use of each view
-in the render pass, respectively.
-If a view index of an attachment is not included in the view mask in any
-subpass that uses it, then the load and store operations are ignored, and
-the attachment's memory contents will not be modified by execution of a
-render pass instance.
-
-endif::VK_VERSION_1_1,VK_KHR_multiview[]
-
-[[renderpass-precision]]
-During a render pass instance, input/color attachments with color formats
-that have a component size of 8, 16, or 32 bits must: be represented in the
-attachment's format throughout the instance.
-Attachments with other floating- or fixed-point color formats, or with depth
-components may: be represented in a format with a precision higher than the
-attachment format, but must: be represented with the same range.
-When such a component is loaded via the pname:loadOp, it will be converted
-into an implementation-dependent format used by the render pass.
-Such components must: be converted from the render pass format, to the
-format of the attachment, before they are resolved or stored at the end of a
-render pass instance via pname:storeOp.
-Conversions occur as described in <<fundamentals-numerics,Numeric
-Representation and Computation>> and <<fundamentals-fixedconv, Fixed-Point
-Data Conversions>>.
-
-[[renderpass-aliasing]]
-If pname:flags includes ename:VK_ATTACHMENT_DESCRIPTION_MAY_ALIAS_BIT, then
-the attachment is treated as if it shares physical memory with another
-attachment in the same render pass.
-This information limits the ability of the implementation to reorder certain
-operations (like layout transitions and the pname:loadOp) such that it is
-not improperly reordered against other uses of the same physical memory via
-a different attachment.
-This is described in more detail below.
-
-If a render pass uses multiple attachments that alias the same device
-memory, those attachments must: each include the
-ename:VK_ATTACHMENT_DESCRIPTION_MAY_ALIAS_BIT bit in their attachment
-description flags.
-Attachments aliasing the same memory occurs in multiple ways:
-
-  * Multiple attachments being assigned the same image view as part of
-    framebuffer creation.
-  * Attachments using distinct image views that correspond to the same image
-    subresource of an image.
-  * Attachments using views of distinct image subresources which are bound
-    to overlapping memory ranges.
-
-[NOTE]
-.Note
-====
-Render passes must: include subpass dependencies (either directly or via a
-subpass dependency chain) between any two subpasses that operate on the same
-attachment or aliasing attachments and those subpass dependencies must:
-include execution and memory dependencies separating uses of the aliases, if
-at least one of those subpasses writes to one of the aliases.
-These dependencies must: not include the ename:VK_DEPENDENCY_BY_REGION_BIT
-if the aliases are views of distinct image subresources which overlap in
-memory.
-====
-
-Multiple attachments that alias the same memory must: not be used in a
-single subpass.
-A given attachment index must: not be used multiple times in a single
-subpass, with one exception: two subpass attachments can: use the same
-attachment index if at least one use is as an input attachment and neither
-use is as a resolve or preserve attachment.
-In other words, the same view can: be used simultaneously as an input and
-color or depth/stencil attachment, but must: not be used as multiple color
-or depth/stencil attachments nor as resolve or preserve attachments.
-The precise set of valid scenarios is described in more detail
-<<renderpass-feedbackloop, below>>.
-
-If a set of attachments alias each other, then all except the first to be
-used in the render pass must: use an pname:initialLayout of
-ename:VK_IMAGE_LAYOUT_UNDEFINED, since the earlier uses of the other aliases
-make their contents undefined:.
-Once an alias has been used and a different alias has been used after it,
-the first alias must: not be used in any later subpasses.
-However, an application can: assign the same image view to multiple aliasing
-attachment indices, which allows that image view to be used multiple times
-even if other aliases are used in between.
-
-[NOTE]
-.Note
-====
-Once an attachment needs the ename:VK_ATTACHMENT_DESCRIPTION_MAY_ALIAS_BIT
-bit, there should: be no additional cost of introducing additional aliases,
-and using these additional aliases may: allow more efficient clearing of the
-attachments on multiple uses via ename:VK_ATTACHMENT_LOAD_OP_CLEAR.
-====
-
-.Valid Usage
-****
-  * [[VUID-VkAttachmentDescription-finalLayout-00843]]
-    pname:finalLayout must: not be ename:VK_IMAGE_LAYOUT_UNDEFINED or
-    ename:VK_IMAGE_LAYOUT_PREINITIALIZED
-  * [[VUID-VkAttachmentDescription-format-03280]]
-    If pname:format is a color format, pname:initialLayout must: not be
-    ename:VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL,
-    ename:VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL,
-    ename:VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_OPTIMAL, or
-    ename:VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_OPTIMAL
-  * [[VUID-VkAttachmentDescription-format-03281]]
-    If pname:format is a depth/stencil format, pname:initialLayout must: not
-    be ename:VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL
-  * [[VUID-VkAttachmentDescription-format-03282]]
-    If pname:format is a color format, pname:finalLayout must: not be
-    ename:VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL,
-    ename:VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL,
-    ename:VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_OPTIMAL, or
-    ename:VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_OPTIMAL
-  * [[VUID-VkAttachmentDescription-format-03283]]
-    If pname:format is a depth/stencil format, pname:finalLayout must: not
-    be ename:VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL
-ifdef::VK_VERSION_1_2,VK_KHR_separate_depth_stencil_layouts[]
-  * [[VUID-VkAttachmentDescription-separateDepthStencilLayouts-03284]]
-    If the <<features-separateDepthStencilLayouts,
-    pname:separateDepthStencilLayouts>> feature is not enabled,
-    pname:initialLayout must: not be
-    ename:VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL,
-    ename:VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL,
-    ename:VK_IMAGE_LAYOUT_STENCIL_ATTACHMENT_OPTIMAL, or
-    ename:VK_IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL
-  * [[VUID-VkAttachmentDescription-separateDepthStencilLayouts-03285]]
-    If the <<features-separateDepthStencilLayouts,
-    pname:separateDepthStencilLayouts>> feature is not enabled,
-    pname:finalLayout must: not be
-    ename:VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL,
-    ename:VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL,
-    ename:VK_IMAGE_LAYOUT_STENCIL_ATTACHMENT_OPTIMAL, or
-    ename:VK_IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL
-  * [[VUID-VkAttachmentDescription-format-03286]]
-    If pname:format is a color format, pname:initialLayout must: not be
-    ename:VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL,
-    ename:VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL,
-    ename:VK_IMAGE_LAYOUT_STENCIL_ATTACHMENT_OPTIMAL, or
-    ename:VK_IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL
-  * [[VUID-VkAttachmentDescription-format-03287]]
-    If pname:format is a color format, pname:finalLayout must: not be
-    ename:VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL,
-    ename:VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL,
-    ename:VK_IMAGE_LAYOUT_STENCIL_ATTACHMENT_OPTIMAL, or
-    ename:VK_IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL
-  * [[VUID-VkAttachmentDescription-format-03288]]
-    If pname:format is a depth/stencil format which includes both depth and
-    stencil aspects, pname:initialLayout must: not be
-    ename:VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL,
-    ename:VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL,
-    ename:VK_IMAGE_LAYOUT_STENCIL_ATTACHMENT_OPTIMAL, or
-    ename:VK_IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL
-  * [[VUID-VkAttachmentDescription-format-03289]]
-    If pname:format is a depth/stencil format which includes both depth and
-    stencil aspects, pname:finalLayout must: not be
-    ename:VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL,
-    ename:VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL,
-    ename:VK_IMAGE_LAYOUT_STENCIL_ATTACHMENT_OPTIMAL, or
-    ename:VK_IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL
-  * [[VUID-VkAttachmentDescription-format-03290]]
-    If pname:format is a depth/stencil format which includes only the depth
-    aspect, pname:initialLayout must: not be
-    ename:VK_IMAGE_LAYOUT_STENCIL_ATTACHMENT_OPTIMAL or
-    ename:VK_IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL
-  * [[VUID-VkAttachmentDescription-format-03291]]
-    If pname:format is a depth/stencil format which includes only the depth
-    aspect, pname:finalLayout must: not be
-    ename:VK_IMAGE_LAYOUT_STENCIL_ATTACHMENT_OPTIMAL or
-    ename:VK_IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL
-  * [[VUID-VkAttachmentDescription-format-03292]]
-    If pname:format is a depth/stencil format which includes only the
-    stencil aspect, pname:initialLayout must: not be
-    ename:VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL or
-    ename:VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL
-  * [[VUID-VkAttachmentDescription-format-03293]]
-    If pname:format is a depth/stencil format which includes only the
-    stencil aspect, pname:finalLayout must: not be
-    ename:VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL or
-    ename:VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL
-endif::VK_VERSION_1_2,VK_KHR_separate_depth_stencil_layouts[]
-****
-
-include::{generated}/validity/structs/VkAttachmentDescription.txt[]
---
-
-[open,refpage='VkAttachmentDescriptionFlagBits',desc='Bitmask specifying additional properties of an attachment',type='enums']
---
-Bits which can: be set in slink:VkAttachmentDescription::pname:flags
-describing additional properties of the attachment are:
-
-include::{generated}/api/enums/VkAttachmentDescriptionFlagBits.txt[]
-
-  * ename:VK_ATTACHMENT_DESCRIPTION_MAY_ALIAS_BIT specifies that the
-    attachment aliases the same device memory as other attachments.
---
-
-[open,refpage='VkAttachmentDescriptionFlags',desc='Bitmask of VkAttachmentDescriptionFlagBits',type='flags']
---
-include::{generated}/api/flags/VkAttachmentDescriptionFlags.txt[]
-
-tname:VkAttachmentDescriptionFlags is a bitmask type for setting a mask of
-zero or more elink:VkAttachmentDescriptionFlagBits.
---
-
-[open,refpage='VkAttachmentLoadOp',desc='Specify how contents of an attachment are treated at the beginning of a subpass',type='enums']
---
-Possible values of slink:VkAttachmentDescription::pname:loadOp and
-pname:stencilLoadOp, specifying how the contents of the attachment are
-treated, are:
-
-include::{generated}/api/enums/VkAttachmentLoadOp.txt[]
-
-  * ename:VK_ATTACHMENT_LOAD_OP_LOAD specifies that the previous contents of
-    the image within the render area will be preserved.
-    For attachments with a depth/stencil format, this uses the access type
-    ename:VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_READ_BIT.
-    For attachments with a color format, this uses the access type
-    ename:VK_ACCESS_COLOR_ATTACHMENT_READ_BIT.
-  * ename:VK_ATTACHMENT_LOAD_OP_CLEAR specifies that the contents within the
-    render area will be cleared to a uniform value, which is specified when
-    a render pass instance is begun.
-    For attachments with a depth/stencil format, this uses the access type
-    ename:VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT.
-    For attachments with a color format, this uses the access type
-    ename:VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT.
-  * ename:VK_ATTACHMENT_LOAD_OP_DONT_CARE specifies that the previous
-    contents within the area need not be preserved; the contents of the
-    attachment will be undefined: inside the render area.
-    For attachments with a depth/stencil format, this uses the access type
-    ename:VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT.
-    For attachments with a color format, this uses the access type
-    ename:VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT.
-ifdef::VK_EXT_load_store_op_none[]
-  * ename:VK_ATTACHMENT_LOAD_OP_NONE_EXT specifies that the previous
-    contents of the image within the render area will be preserved, but the
-    contents of the attachment will be undefined: inside the render pass.
-    No access type is used as the image is not accessed.
-endif::VK_EXT_load_store_op_none[]
---
-
-[open,refpage='VkAttachmentStoreOp',desc='Specify how contents of an attachment are treated at the end of a subpass',type='enums']
---
-Possible values of slink:VkAttachmentDescription::pname:storeOp and
-pname:stencilStoreOp, specifying how the contents of the attachment are
-treated, are:
-
-include::{generated}/api/enums/VkAttachmentStoreOp.txt[]
-
-  * ename:VK_ATTACHMENT_STORE_OP_STORE specifies the contents generated
-    during the render pass and within the render area are written to memory.
-    For attachments with a depth/stencil format, this uses the access type
-    ename:VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT.
-    For attachments with a color format, this uses the access type
-    ename:VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT.
-  * ename:VK_ATTACHMENT_STORE_OP_DONT_CARE specifies the contents within the
-    render area are not needed after rendering, and may: be discarded; the
-    contents of the attachment will be undefined: inside the render area.
-    For attachments with a depth/stencil format, this uses the access type
-    ename:VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT.
-    For attachments with a color format, this uses the access type
-    ename:VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT.
-ifdef::VK_EXT_load_store_op_none,VK_KHR_dynamic_rendering,VK_QCOM_render_pass_store_ops[]
-  * ename:VK_ATTACHMENT_STORE_OP_NONE_KHR specifies the contents within the
-    render area are not accessed by the store operation.
-    However, if the attachment was written to during the render pass, the
-    contents of the attachment will be undefined: inside the render area.
-endif::VK_EXT_load_store_op_none,VK_KHR_dynamic_rendering,VK_QCOM_render_pass_store_ops[]
-
-[NOTE]
-.Note
-====
-ename:VK_ATTACHMENT_STORE_OP_DONT_CARE can: cause contents generated during
-previous render passes to be discarded before reaching memory, even if no
-write to the attachment occurs during the current render pass.
-====
---
-
-ifdef::VK_VERSION_1_1,VK_KHR_maintenance2[]
-[open,refpage='VkRenderPassInputAttachmentAspectCreateInfo',desc='Structure specifying, for a given subpass/input attachment pair, which aspect can: be read.',type='structs']
---
-The sname:VkRenderPassInputAttachmentAspectCreateInfo structure is defined
-as:
-
-include::{generated}/api/structs/VkRenderPassInputAttachmentAspectCreateInfo.txt[]
-
-ifdef::VK_KHR_maintenance2[]
-or the equivalent
-
-include::{generated}/api/structs/VkRenderPassInputAttachmentAspectCreateInfoKHR.txt[]
-endif::VK_KHR_maintenance2[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:aspectReferenceCount is the number of elements in the
-    pname:pAspectReferences array.
-  * pname:pAspectReferences is a pointer to an array of
-    pname:aspectReferenceCount slink:VkInputAttachmentAspectReference
-    structures containing a mask describing which aspect(s) can: be accessed
-    for a given input attachment within a given subpass.
-
-To specify which aspects of an input attachment can: be read, add a
-slink:VkRenderPassInputAttachmentAspectCreateInfo structure to the
-pname:pNext chain of the slink:VkRenderPassCreateInfo structure:
-
-An application can: access any aspect of an input attachment that does not
-have a specified aspect mask in the pname:pAspectReferences array.
-Otherwise, an application must: not access aspect(s) of an input attachment
-other than those in its specified aspect mask.
-
-include::{generated}/validity/structs/VkRenderPassInputAttachmentAspectCreateInfo.txt[]
---
-
-[open,refpage='VkInputAttachmentAspectReference',desc='Structure specifying a subpass/input attachment pair and an aspect mask that can: be read.',type='structs']
---
-The sname:VkInputAttachmentAspectReference structure is defined as:
-
-include::{generated}/api/structs/VkInputAttachmentAspectReference.txt[]
-
-ifdef::VK_KHR_maintenance2[]
-or the equivalent
-
-include::{generated}/api/structs/VkInputAttachmentAspectReferenceKHR.txt[]
-endif::VK_KHR_maintenance2[]
-
-  * pname:subpass is an index into the pname:pSubpasses array of the parent
-    sname:VkRenderPassCreateInfo structure.
-  * pname:inputAttachmentIndex is an index into the pname:pInputAttachments
-    of the specified subpass.
-  * pname:aspectMask is a mask of which aspect(s) can: be accessed within
-    the specified subpass.
-
-This structure specifies an aspect mask for a specific input attachment of a
-specific subpass in the render pass.
-
-pname:subpass and pname:inputAttachmentIndex index into the render pass as:
-
-[source,c]
-~~~~
-pCreateInfo->pSubpasses[subpass].pInputAttachments[inputAttachmentIndex]
-~~~~
-
-.Valid Usage
-****
-  * [[VUID-VkInputAttachmentAspectReference-aspectMask-01964]]
-    pname:aspectMask must: not include ename:VK_IMAGE_ASPECT_METADATA_BIT
-ifdef::VK_EXT_image_drm_format_modifier[]
-  * [[VUID-VkInputAttachmentAspectReference-aspectMask-02250]]
-    pname:aspectMask must: not include
-    `VK_IMAGE_ASPECT_MEMORY_PLANE__{ibit}__BIT_EXT` for any index _i_
-endif::VK_EXT_image_drm_format_modifier[]
-****
-
-include::{generated}/validity/structs/VkInputAttachmentAspectReference.txt[]
---
-endif::VK_VERSION_1_1,VK_KHR_maintenance2[]
-
-[open,refpage='VkSubpassDescription',desc='Structure specifying a subpass description',type='structs']
---
-The sname:VkSubpassDescription structure is defined as:
-
-include::{generated}/api/structs/VkSubpassDescription.txt[]
-
-  * pname:flags is a bitmask of elink:VkSubpassDescriptionFlagBits
-    specifying usage of the subpass.
-  * pname:pipelineBindPoint is a elink:VkPipelineBindPoint value specifying
-    the pipeline type supported for this subpass.
-  * pname:inputAttachmentCount is the number of input attachments.
-  * pname:pInputAttachments is a pointer to an array of
-    slink:VkAttachmentReference structures defining the input attachments
-    for this subpass and their layouts.
-  * pname:colorAttachmentCount is the number of color attachments.
-  * pname:pColorAttachments is a pointer to an array of
-    pname:colorAttachmentCount slink:VkAttachmentReference structures
-    defining the color attachments for this subpass and their layouts.
-  * pname:pResolveAttachments is `NULL` or a pointer to an array of
-    pname:colorAttachmentCount slink:VkAttachmentReference structures
-    defining the resolve attachments for this subpass and their layouts.
-  * pname:pDepthStencilAttachment is a pointer to a
-    slink:VkAttachmentReference structure specifying the depth/stencil
-    attachment for this subpass and its layout.
-  * pname:preserveAttachmentCount is the number of preserved attachments.
-  * pname:pPreserveAttachments is a pointer to an array of
-    pname:preserveAttachmentCount render pass attachment indices identifying
-    attachments that are not used by this subpass, but whose contents must:
-    be preserved throughout the subpass.
-
-Each element of the pname:pInputAttachments array corresponds to an input
-attachment index in a fragment shader, i.e. if a shader declares an image
-variable decorated with a code:InputAttachmentIndex value of *X*, then it
-uses the attachment provided in pname:pInputAttachments[*X*].
-Input attachments must: also be bound to the pipeline in a descriptor set.
-If the pname:attachment member of any element of pname:pInputAttachments is
-ename:VK_ATTACHMENT_UNUSED, the application must: not read from the
-corresponding input attachment index.
-Fragment shaders can: use subpass input variables to access the contents of
-an input attachment at the fragment's (x, y, layer) framebuffer coordinates.
-ifdef::VK_QCOM_render_pass_transform[]
-Input attachments must: not be used by any subpasses within a render pass
-that enables <<vertexpostproc-renderpass-transform, render pass transform>>.
-endif::VK_QCOM_render_pass_transform[]
-
-Each element of the pname:pColorAttachments array corresponds to an output
-location in the shader, i.e. if the shader declares an output variable
-decorated with a code:Location value of *X*, then it uses the attachment
-provided in pname:pColorAttachments[*X*].
-If the pname:attachment member of any element of pname:pColorAttachments is
-ename:VK_ATTACHMENT_UNUSED,
-ifdef::VK_EXT_color_write_enable[]
-or if <<framebuffer-color-write-enable,Color Write Enable>> has been
-disabled for the corresponding attachment index,
-endif::VK_EXT_color_write_enable[]
-then writes to the corresponding location by a fragment shader are
-discarded.
-
-If
-ifdef::VK_QCOM_render_pass_shader_resolve[]
-pname:flags does not include
-ename:VK_SUBPASS_DESCRIPTION_SHADER_RESOLVE_BIT_QCOM, and if
-endif::VK_QCOM_render_pass_shader_resolve[]
-pname:pResolveAttachments is not `NULL`, each of its elements corresponds to
-a color attachment (the element in pname:pColorAttachments at the same
-index), and a multisample resolve operation is defined for each attachment.
-At the end of each subpass, multisample resolve operations read the
-subpass's color attachments, and resolve the samples for each pixel within
-the render area to the same pixel location in the corresponding resolve
-attachments, unless the resolve attachment index is
-ename:VK_ATTACHMENT_UNUSED.
-
-ifdef::VK_VERSION_1_2,VK_KHR_depth_stencil_resolve[]
-Similarly, if
-ifdef::VK_QCOM_render_pass_shader_resolve[]
-pname:flags does not include
-ename:VK_SUBPASS_DESCRIPTION_SHADER_RESOLVE_BIT_QCOM, and
-endif::VK_QCOM_render_pass_shader_resolve[]
-slink:VkSubpassDescriptionDepthStencilResolve::pname:pDepthStencilResolveAttachment
-is not `NULL` and does not have the value ename:VK_ATTACHMENT_UNUSED, it
-corresponds to the depth/stencil attachment in
-pname:pDepthStencilAttachment, and multisample resolve operations for depth
-and stencil are defined by
-slink:VkSubpassDescriptionDepthStencilResolve::pname:depthResolveMode and
-slink:VkSubpassDescriptionDepthStencilResolve::pname:stencilResolveMode,
-respectively.
-At the end of each subpass, multisample resolve operations read the
-subpass's depth/stencil attachment, and resolve the samples for each pixel
-to the same pixel location in the corresponding resolve attachment.
-If slink:VkSubpassDescriptionDepthStencilResolve::pname:depthResolveMode is
-ename:VK_RESOLVE_MODE_NONE, then the depth component of the resolve
-attachment is not written to and its contents are preserved.
-Similarly, if
-slink:VkSubpassDescriptionDepthStencilResolve::pname:stencilResolveMode is
-ename:VK_RESOLVE_MODE_NONE, then the stencil component of the resolve
-attachment is not written to and its contents are preserved.
-slink:VkSubpassDescriptionDepthStencilResolve::pname:depthResolveMode is
-ignored if the elink:VkFormat of the pname:pDepthStencilResolveAttachment
-does not have a depth component.
-Similarly,
-slink:VkSubpassDescriptionDepthStencilResolve::pname:stencilResolveMode is
-ignored if the elink:VkFormat of the pname:pDepthStencilResolveAttachment
-does not have a stencil component.
-
-ifdef::VK_EXT_sample_locations[]
-If the image subresource range referenced by the depth/stencil attachment is
-created with
-ename:VK_IMAGE_CREATE_SAMPLE_LOCATIONS_COMPATIBLE_DEPTH_BIT_EXT, then the
-multisample resolve operation uses the sample locations state specified in
-the pname:sampleLocationsInfo member of the element of the
-sname:VkRenderPassSampleLocationsBeginInfoEXT::pname:pPostSubpassSampleLocations
-for the subpass.
-endif::VK_EXT_sample_locations[]
-
-endif::VK_VERSION_1_2,VK_KHR_depth_stencil_resolve[]
-
-If pname:pDepthStencilAttachment is `NULL`, or if its attachment index is
-ename:VK_ATTACHMENT_UNUSED, it indicates that no depth/stencil attachment
-will be used in the subpass.
-
-The contents of an attachment within the render area become undefined: at
-the start of a subpass *S* if all of the following conditions are true:
-
-  * The attachment is used as a color, depth/stencil, or resolve attachment
-    in any subpass in the render pass.
-  * There is a subpass *S~1~* that uses or preserves the attachment, and a
-    subpass dependency from *S~1~* to *S*.
-  * The attachment is not used or preserved in subpass *S*.
-
-ifdef::VK_QCOM_render_pass_shader_resolve[]
-In addition, the contents of an attachment within the render area become
-undefined: at the start of a subpass *S* if all of the following conditions
-are true:
-
-  * ename:VK_SUBPASS_DESCRIPTION_SHADER_RESOLVE_BIT_QCOM is set.
-  * The attachment is used as a color or depth/stencil in the subpass.
-endif::VK_QCOM_render_pass_shader_resolve[]
-
-Once the contents of an attachment become undefined: in subpass *S*, they
-remain undefined: for subpasses in subpass dependency chains starting with
-subpass *S* until they are written again.
-However, they remain valid for subpasses in other subpass dependency chains
-starting with subpass *S~1~* if those subpasses use or preserve the
-attachment.
-
-.Valid Usage
-****
-ifndef::VK_HUAWEI_subpass_shading[]
-  * [[VUID-VkSubpassDescription-pipelineBindPoint-00844]]
-    pname:pipelineBindPoint must: be ename:VK_PIPELINE_BIND_POINT_GRAPHICS
-endif::VK_HUAWEI_subpass_shading[]
-ifdef::VK_HUAWEI_subpass_shading[]
-  * [[VUID-VkSubpassDescription-pipelineBindPoint-04952]]
-    pname:pipelineBindPoint must: be ename:VK_PIPELINE_BIND_POINT_GRAPHICS
-    or ename:VK_PIPELINE_BIND_POINT_SUBPASS_SHADING_HUAWEI
-endif::VK_HUAWEI_subpass_shading[]
-  * [[VUID-VkSubpassDescription-colorAttachmentCount-00845]]
-    pname:colorAttachmentCount must: be less than or equal to
-    sname:VkPhysicalDeviceLimits::pname:maxColorAttachments
-  * [[VUID-VkSubpassDescription-loadOp-00846]]
-    If the first use of an attachment in this render pass is as an input
-    attachment, and the attachment is not also used as a color or
-    depth/stencil attachment in the same subpass, then pname:loadOp must:
-    not be ename:VK_ATTACHMENT_LOAD_OP_CLEAR
-  * [[VUID-VkSubpassDescription-pResolveAttachments-00847]]
-    If pname:pResolveAttachments is not `NULL`, for each resolve attachment
-    that is not ename:VK_ATTACHMENT_UNUSED, the corresponding color
-    attachment must: not be ename:VK_ATTACHMENT_UNUSED
-  * [[VUID-VkSubpassDescription-pResolveAttachments-00848]]
-    If pname:pResolveAttachments is not `NULL`, for each resolve attachment
-    that is not ename:VK_ATTACHMENT_UNUSED, the corresponding color
-    attachment must: not have a sample count of ename:VK_SAMPLE_COUNT_1_BIT
-  * [[VUID-VkSubpassDescription-pResolveAttachments-00849]]
-    If pname:pResolveAttachments is not `NULL`, each resolve attachment that
-    is not ename:VK_ATTACHMENT_UNUSED must: have a sample count of
-    ename:VK_SAMPLE_COUNT_1_BIT
-  * [[VUID-VkSubpassDescription-pResolveAttachments-00850]]
-    If pname:pResolveAttachments is not `NULL`, each resolve attachment that
-    is not ename:VK_ATTACHMENT_UNUSED must: have the same elink:VkFormat as
-    its corresponding color attachment
-  * [[VUID-VkSubpassDescription-pColorAttachments-01417]]
-    All attachments in pname:pColorAttachments that are not
-    ename:VK_ATTACHMENT_UNUSED must: have the same sample count
-  * [[VUID-VkSubpassDescription-pInputAttachments-02647]]
-    All attachments in pname:pInputAttachments that are not
-    ename:VK_ATTACHMENT_UNUSED must: have image formats whose
-    <<potential-format-features, potential format features>> contain at
-    least ename:VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT or
-    ename:VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT
-  * [[VUID-VkSubpassDescription-pColorAttachments-02648]]
-    All attachments in pname:pColorAttachments that are not
-    ename:VK_ATTACHMENT_UNUSED must: have image formats whose
-    <<potential-format-features, potential format features>> contain
-    ename:VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT
-  * [[VUID-VkSubpassDescription-pResolveAttachments-02649]]
-    All attachments in pname:pResolveAttachments that are not
-    ename:VK_ATTACHMENT_UNUSED must: have image formats whose
-    <<potential-format-features, potential format features>> contain
-    ename:VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT
-  * [[VUID-VkSubpassDescription-pDepthStencilAttachment-02650]]
-    If pname:pDepthStencilAttachment is not `NULL` and the attachment is not
-    ename:VK_ATTACHMENT_UNUSED then it must: have an image format whose
-    <<potential-format-features, potential format features>> contain
-    ename:VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT
-ifdef::VK_AMD_mixed_attachment_samples[]
-  * [[VUID-VkSubpassDescription-pColorAttachments-01506]]
-    If the `apiext:VK_AMD_mixed_attachment_samples` extension is enabled,
-    and all attachments in pname:pColorAttachments that are not
-    ename:VK_ATTACHMENT_UNUSED must: have a sample count that is smaller
-    than or equal to the sample count of pname:pDepthStencilAttachment if it
-    is not ename:VK_ATTACHMENT_UNUSED
-endif::VK_AMD_mixed_attachment_samples[]
-  * [[VUID-VkSubpassDescription-pDepthStencilAttachment-01418]]
-    If neither the `apiext:VK_AMD_mixed_attachment_samples` nor the
-    `apiext:VK_NV_framebuffer_mixed_samples` extensions are enabled, and if
-    pname:pDepthStencilAttachment is not ename:VK_ATTACHMENT_UNUSED and any
-    attachments in pname:pColorAttachments are not
-    ename:VK_ATTACHMENT_UNUSED, they must: have the same sample count
-  * [[VUID-VkSubpassDescription-attachment-00853]]
-    Each element of pname:pPreserveAttachments must: not be
-    ename:VK_ATTACHMENT_UNUSED
-  * [[VUID-VkSubpassDescription-pPreserveAttachments-00854]]
-    Each element of pname:pPreserveAttachments must: not also be an element
-    of any other member of the subpass description
-  * [[VUID-VkSubpassDescription-layout-02519]]
-    If any attachment is used by more than one slink:VkAttachmentReference
-    member, then each use must: use the same pname:layout
-  * [[VUID-VkSubpassDescription-None-04437]]
-    Each attachment must: follow the <<attachment-type-imagelayout, image
-    layout requirements>> specified for its attachment type
-ifdef::VK_NVX_multiview_per_view_attributes[]
-  * [[VUID-VkSubpassDescription-flags-00856]]
-    If pname:flags includes
-    ename:VK_SUBPASS_DESCRIPTION_PER_VIEW_POSITION_X_ONLY_BIT_NVX, it must:
-    also include ename:VK_SUBPASS_DESCRIPTION_PER_VIEW_ATTRIBUTES_BIT_NVX
-endif::VK_NVX_multiview_per_view_attributes[]
-ifdef::VK_QCOM_render_pass_shader_resolve[]
-  * [[VUID-VkSubpassDescription-flags-03341]]
-    If pname:flags includes
-    ename:VK_SUBPASS_DESCRIPTION_SHADER_RESOLVE_BIT_QCOM, and if
-    pname:pResolveAttachments is not `NULL`, then each resolve attachment
-    must: be ename:VK_ATTACHMENT_UNUSED
-  * [[VUID-VkSubpassDescription-flags-03342]]
-    If pname:flags includes
-    ename:VK_SUBPASS_DESCRIPTION_SHADER_RESOLVE_BIT_QCOM, and if
-    pname:pDepthStencilResolveAttachmentKHR is not `NULL`, then the
-    depth/stencil resolve attachment must: be ename:VK_ATTACHMENT_UNUSED
-  * [[VUID-VkSubpassDescription-flags-03343]]
-    If pname:flags includes
-    ename:VK_SUBPASS_DESCRIPTION_SHADER_RESOLVE_BIT_QCOM, then the subpass
-    must: be the last subpass in a subpass dependency chain
-endif::VK_QCOM_render_pass_shader_resolve[]
-ifdef::VK_QCOM_render_pass_transform[]
-  * [[VUID-VkSubpassDescription-pInputAttachments-02868]]
-    If the render pass is created with
-    ename:VK_RENDER_PASS_CREATE_TRANSFORM_BIT_QCOM each of the elements of
-    pname:pInputAttachments must: be ename:VK_ATTACHMENT_UNUSED
-endif::VK_QCOM_render_pass_transform[]
-  * [[VUID-VkSubpassDescription-pDepthStencilAttachment-04438]]
-    pname:pDepthStencilAttachment and pname:pColorAttachments must not
-    contain references to the same attachment
-****
-
-include::{generated}/validity/structs/VkSubpassDescription.txt[]
---
-
-[open,refpage='VkSubpassDescriptionFlagBits',desc='Bitmask specifying usage of a subpass',type='enums']
---
-Bits which can: be set in slink:VkSubpassDescription::pname:flags,
-specifying usage of the subpass, are:
-
-include::{generated}/api/enums/VkSubpassDescriptionFlagBits.txt[]
-
-ifdef::VK_NVX_multiview_per_view_attributes[]
-  * ename:VK_SUBPASS_DESCRIPTION_PER_VIEW_ATTRIBUTES_BIT_NVX specifies that
-    shaders compiled for this subpass write the attributes for all views in
-    a single invocation of each
-    <<pipeline-graphics-subsets-pre-rasterization,pre-rasterization shader
-    stage>>.
-    All pipelines compiled against a subpass that includes this bit must:
-    write per-view attributes to the `*PerViewNV[]` shader outputs, in
-    addition to the non-per-view (e.g. code:Position) outputs.
-  * ename:VK_SUBPASS_DESCRIPTION_PER_VIEW_POSITION_X_ONLY_BIT_NVX specifies
-    that shaders compiled for this subpass use per-view positions which only
-    differ in value in the x component.
-    Per-view viewport mask can: also be used.
-endif::VK_NVX_multiview_per_view_attributes[]
-ifdef::VK_QCOM_render_pass_shader_resolve[]
-  * ename:VK_SUBPASS_DESCRIPTION_FRAGMENT_REGION_BIT_QCOM specifies that the
-    framebuffer region is the fragment region, that is, the minimum region
-    dependencies are by pixel rather than by sample, such that any fragment
-    shader invocation can: access any sample associated with that fragment
-    shader invocation.
-  * ename:VK_SUBPASS_DESCRIPTION_SHADER_RESOLVE_BIT_QCOM specifies that the
-    subpass performs shader resolve operations.
-endif::VK_QCOM_render_pass_shader_resolve[]
-
-ifndef::VK_NVX_multiview_per_view_attributes,VK_QCOM_render_pass_shader_resolve[]
-[NOTE]
-.Note
-====
-All bits for this type are defined by extensions, and none of those
-extensions are enabled in this build of the specification.
-====
-endif::VK_NVX_multiview_per_view_attributes,VK_QCOM_render_pass_shader_resolve[]
-ifdef::VK_QCOM_render_pass_shader_resolve[]
-[NOTE]
-.Note
-====
-Shader resolve operations allow for custom resolve operations, but
-overdrawing pixels may: have a performance and/or power cost.
-Furthermore, since the content of any depth stencil attachment or color
-attachment is undefined: at the begining of a shader resolve subpass, any
-depth testing, stencil testing, or blending operation which sources these
-undefined: values also has undefined: result value.
-====
-endif::VK_QCOM_render_pass_shader_resolve[]
---
-
-[open,refpage='VkSubpassDescriptionFlags',desc='Bitmask of VkSubpassDescriptionFlagBits',type='flags']
---
-include::{generated}/api/flags/VkSubpassDescriptionFlags.txt[]
-
-tname:VkSubpassDescriptionFlags is a bitmask type for setting a mask of zero
-or more elink:VkSubpassDescriptionFlagBits.
---
-
-[open,refpage='VkAttachmentReference',desc='Structure specifying an attachment reference',type='structs']
---
-The sname:VkAttachmentReference structure is defined as:
-
-include::{generated}/api/structs/VkAttachmentReference.txt[]
-
-  * pname:attachment is either an integer value identifying an attachment at
-    the corresponding index in
-    slink:VkRenderPassCreateInfo::pname:pAttachments, or
-    ename:VK_ATTACHMENT_UNUSED to signify that this attachment is not used.
-  * pname:layout is a elink:VkImageLayout value specifying the layout the
-    attachment uses during the subpass.
-
-.Valid Usage
-****
-  * [[VUID-VkAttachmentReference-layout-00857]]
-    If pname:attachment is not ename:VK_ATTACHMENT_UNUSED, pname:layout
-    must: not be ename:VK_IMAGE_LAYOUT_UNDEFINED,
-    ename:VK_IMAGE_LAYOUT_PREINITIALIZED,
-    ename:VK_IMAGE_LAYOUT_PRESENT_SRC_KHR,
-    ename:VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL,
-    ename:VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL,
-    ename:VK_IMAGE_LAYOUT_STENCIL_ATTACHMENT_OPTIMAL, or
-    ename:VK_IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL
-****
-
-include::{generated}/validity/structs/VkAttachmentReference.txt[]
---
-
-[open,refpage='VK_SUBPASS_EXTERNAL',desc='Subpass index sentinel expanding synchronization scope outside a subpass',type='consts']
---
-ename:VK_SUBPASS_EXTERNAL is a special subpass index value expanding
-synchronization scope outside a subpass.
-It is described in more detail by slink:VkSubpassDependency.
-
-include::{generated}/api/enums/VK_SUBPASS_EXTERNAL.txt[]
---
-
-[open,refpage='VkSubpassDependency',desc='Structure specifying a subpass dependency',type='structs']
---
-The sname:VkSubpassDependency structure is defined as:
-
-include::{generated}/api/structs/VkSubpassDependency.txt[]
-
-  * pname:srcSubpass is the subpass index of the first subpass in the
-    dependency, or ename:VK_SUBPASS_EXTERNAL.
-  * pname:dstSubpass is the subpass index of the second subpass in the
-    dependency, or ename:VK_SUBPASS_EXTERNAL.
-  * pname:srcStageMask is a bitmask of elink:VkPipelineStageFlagBits
-    specifying the <<synchronization-pipeline-stages-masks, source stage
-    mask>>.
-  * pname:dstStageMask is a bitmask of elink:VkPipelineStageFlagBits
-    specifying the <<synchronization-pipeline-stages-masks, destination
-    stage mask>>
-  * pname:srcAccessMask is a bitmask of elink:VkAccessFlagBits specifying a
-    <<synchronization-access-masks, source access mask>>.
-  * pname:dstAccessMask is a bitmask of elink:VkAccessFlagBits specifying a
-    <<synchronization-access-masks, destination access mask>>.
-  * pname:dependencyFlags is a bitmask of elink:VkDependencyFlagBits.
-
-If pname:srcSubpass is equal to pname:dstSubpass then the
-slink:VkSubpassDependency describes a
-<<synchronization-pipeline-barriers-subpass-self-dependencies, subpass
-self-dependency>>, and only constrains the pipeline barriers allowed within
-a subpass instance.
-Otherwise, when a render pass instance which includes a subpass dependency
-is submitted to a queue, it defines a memory dependency between the
-subpasses identified by pname:srcSubpass and pname:dstSubpass.
-
-If pname:srcSubpass is equal to ename:VK_SUBPASS_EXTERNAL, the first
-<<synchronization-dependencies-scopes, synchronization scope>> includes
-commands that occur earlier in <<synchronization-submission-order,submission
-order>> than the flink:vkCmdBeginRenderPass used to begin the render pass
-instance.
-Otherwise, the first set of commands includes all commands submitted as part
-of the subpass instance identified by pname:srcSubpass and any load, store
-or multisample resolve operations on attachments used in pname:srcSubpass.
-In either case, the first synchronization scope is limited to operations on
-the pipeline stages determined by the
-<<synchronization-pipeline-stages-masks, source stage mask>> specified by
-pname:srcStageMask.
-
-If pname:dstSubpass is equal to ename:VK_SUBPASS_EXTERNAL, the second
-<<synchronization-dependencies-scopes, synchronization scope>> includes
-commands that occur later in <<synchronization-submission-order,submission
-order>> than the flink:vkCmdEndRenderPass used to end the render pass
-instance.
-Otherwise, the second set of commands includes all commands submitted as
-part of the subpass instance identified by pname:dstSubpass and any load,
-store or multisample resolve operations on attachments used in
-pname:dstSubpass.
-In either case, the second synchronization scope is limited to operations on
-the pipeline stages determined by the
-<<synchronization-pipeline-stages-masks, destination stage mask>> specified
-by pname:dstStageMask.
-
-The first <<synchronization-dependencies-access-scopes, access scope>> is
-limited to accesses in the pipeline stages determined by the
-<<synchronization-pipeline-stages-masks, source stage mask>> specified by
-pname:srcStageMask.
-It is also limited to access types in the <<synchronization-access-masks,
-source access mask>> specified by pname:srcAccessMask.
-
-The second <<synchronization-dependencies-access-scopes, access scope>> is
-limited to accesses in the pipeline stages determined by the
-<<synchronization-pipeline-stages-masks, destination stage mask>> specified
-by pname:dstStageMask.
-It is also limited to access types in the <<synchronization-access-masks,
-destination access mask>> specified by pname:dstAccessMask.
-
-The <<synchronization-dependencies-available-and-visible, availability and
-visibility operations>> defined by a subpass dependency affect the execution
-of <<renderpass-layout-transitions, image layout transitions>> within the
-render pass.
-
-[NOTE]
-.Note
-====
-For non-attachment resources, the memory dependency expressed by subpass
-dependency is nearly identical to that of a slink:VkMemoryBarrier (with
-matching pname:srcAccessMask and pname:dstAccessMask parameters) submitted
-as a part of a flink:vkCmdPipelineBarrier (with matching pname:srcStageMask
-and pname:dstStageMask parameters).
-The only difference being that its scopes are limited to the identified
-subpasses rather than potentially affecting everything before and after.
-
-For attachments however, subpass dependencies work more like a
-slink:VkImageMemoryBarrier defined similarly to the slink:VkMemoryBarrier
-above, the queue family indices set to ename:VK_QUEUE_FAMILY_IGNORED, and
-layouts as follows:
-
-  * The equivalent to pname:oldLayout is the attachment's layout according
-    to the subpass description for pname:srcSubpass.
-  * The equivalent to pname:newLayout is the attachment's layout according
-    to the subpass description for pname:dstSubpass.
-====
-
-.Valid Usage
-****
-  * [[VUID-VkSubpassDependency-srcStageMask-00860]]
-    If the <<features-geometryShader,geometry shaders>> feature is not
-    enabled, pname:srcStageMask must: not contain
-    ename:VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT
-  * [[VUID-VkSubpassDependency-dstStageMask-00861]]
-    If the <<features-geometryShader,geometry shaders>> feature is not
-    enabled, pname:dstStageMask must: not contain
-    ename:VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT
-  * [[VUID-VkSubpassDependency-srcStageMask-00862]]
-    If the <<features-tessellationShader,tessellation shaders>> feature is
-    not enabled, pname:srcStageMask must: not contain
-    ename:VK_PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT or
-    ename:VK_PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT
-  * [[VUID-VkSubpassDependency-dstStageMask-00863]]
-    If the <<features-tessellationShader,tessellation shaders>> feature is
-    not enabled, pname:dstStageMask must: not contain
-    ename:VK_PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT or
-    ename:VK_PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT
-  * [[VUID-VkSubpassDependency-srcSubpass-00864]]
-    pname:srcSubpass must: be less than or equal to pname:dstSubpass, unless
-    one of them is ename:VK_SUBPASS_EXTERNAL, to avoid cyclic dependencies
-    and ensure a valid execution order
-  * [[VUID-VkSubpassDependency-srcSubpass-00865]]
-    pname:srcSubpass and pname:dstSubpass must: not both be equal to
-    ename:VK_SUBPASS_EXTERNAL
-  * [[VUID-VkSubpassDependency-srcSubpass-00867]]
-    If pname:srcSubpass is equal to pname:dstSubpass and not all of the
-    stages in pname:srcStageMask and pname:dstStageMask are
-    <<synchronization-framebuffer-regions,framebuffer-space stages>>, the
-    <<synchronization-pipeline-stages-order, logically latest>> pipeline
-    stage in pname:srcStageMask must: be
-    <<synchronization-pipeline-stages-order, logically earlier>> than or
-    equal to the <<synchronization-pipeline-stages-order, logically
-    earliest>> pipeline stage in pname:dstStageMask
-  * [[VUID-VkSubpassDependency-srcAccessMask-00868]]
-    Any access flag included in pname:srcAccessMask must: be supported by
-    one of the pipeline stages in pname:srcStageMask, as specified in the
-    <<synchronization-access-types-supported, table of supported access
-    types>>
-  * [[VUID-VkSubpassDependency-dstAccessMask-00869]]
-    Any access flag included in pname:dstAccessMask must: be supported by
-    one of the pipeline stages in pname:dstStageMask, as specified in the
-    <<synchronization-access-types-supported, table of supported access
-    types>>
-  * [[VUID-VkSubpassDependency-srcSubpass-02243]]
-    If pname:srcSubpass equals pname:dstSubpass, and pname:srcStageMask and
-    pname:dstStageMask both include a
-    <<synchronization-framebuffer-regions,framebuffer-space stage>>, then
-    pname:dependencyFlags must: include ename:VK_DEPENDENCY_BY_REGION_BIT
-ifdef::VK_VERSION_1_1,VK_KHR_multiview[]
-  * [[VUID-VkSubpassDependency-dependencyFlags-02520]]
-    If pname:dependencyFlags includes ename:VK_DEPENDENCY_VIEW_LOCAL_BIT,
-    pname:srcSubpass must: not be equal to ename:VK_SUBPASS_EXTERNAL
-  * [[VUID-VkSubpassDependency-dependencyFlags-02521]]
-    If pname:dependencyFlags includes ename:VK_DEPENDENCY_VIEW_LOCAL_BIT,
-    pname:dstSubpass must: not be equal to ename:VK_SUBPASS_EXTERNAL
-  * [[VUID-VkSubpassDependency-srcSubpass-00872]]
-    If pname:srcSubpass equals pname:dstSubpass and that subpass has more
-    than one bit set in the view mask, then pname:dependencyFlags must:
-    include ename:VK_DEPENDENCY_VIEW_LOCAL_BIT
-endif::VK_VERSION_1_1,VK_KHR_multiview[]
-ifdef::VK_NV_mesh_shader[]
-  * [[VUID-VkSubpassDependency-srcStageMask-02099]]
-    If the <<features-meshShader,mesh shaders>> feature is not enabled,
-    pname:srcStageMask must: not contain
-    ename:VK_PIPELINE_STAGE_MESH_SHADER_BIT_NV
-  * [[VUID-VkSubpassDependency-srcStageMask-02100]]
-    If the <<features-taskShader,task shaders>> feature is not enabled,
-    pname:srcStageMask must: not contain
-    ename:VK_PIPELINE_STAGE_TASK_SHADER_BIT_NV
-  * [[VUID-VkSubpassDependency-dstStageMask-02101]]
-    If the <<features-meshShader,mesh shaders>> feature is not enabled,
-    pname:dstStageMask must: not contain
-    ename:VK_PIPELINE_STAGE_MESH_SHADER_BIT_NV
-  * [[VUID-VkSubpassDependency-dstStageMask-02102]]
-    If the <<features-taskShader,task shaders>> feature is not enabled,
-    pname:dstStageMask must: not contain
-    ename:VK_PIPELINE_STAGE_TASK_SHADER_BIT_NV
-endif::VK_NV_mesh_shader[]
-ifdef::VK_KHR_synchronization2[]
-  * [[VUID-VkSubpassDependency-synchronization2-04984]]
-    If the <<features-synchronization2, pname:synchronization2>> feature is
-    not enabled, pname:srcStageMask must: not be `0`
-  * [[VUID-VkSubpassDependency-synchronization2-04985]]
-    If the <<features-synchronization2, pname:synchronization2>> feature is
-    not enabled, pname:dstStageMask must: not be `0`
-endif::VK_KHR_synchronization2[]
-ifndef::VK_KHR_synchronization2[]
-  * [[VUID-VkSubpassDependency-srcStageMask-04986]]
-    pname:srcStageMask must: not be `0`
-  * [[VUID-VkSubpassDependency-dstStageMask-04987]]
-    pname:dstStageMask must: not be `0`
-endif::VK_KHR_synchronization2[]
-****
-
-include::{generated}/validity/structs/VkSubpassDependency.txt[]
---
-
-ifdef::VK_VERSION_1_1,VK_KHR_multiview[]
-
-When multiview is enabled, the execution of the multiple views of one
-subpass may: not occur simultaneously or even back-to-back, and rather may:
-be interleaved with the execution of other subpasses.
-The load and store operations apply to attachments on a per-view basis.
-For example, an attachment using ename:VK_ATTACHMENT_LOAD_OP_CLEAR will have
-each view cleared on first use, but the first use of one view may be
-temporally distant from the first use of another view.
-
-[NOTE]
-.Note
-====
-A good mental model for multiview is to think of a multiview subpass as if
-it were a collection of individual (per-view) subpasses that are logically
-grouped together and described as a single multiview subpass in the API.
-Similarly, a multiview attachment can be thought of like several individual
-attachments that happen to be layers in a single image.
-A view-local dependency between two multiview subpasses acts like a set of
-one-to-one dependencies between corresponding pairs of per-view subpasses.
-A view-global dependency between two multiview subpasses acts like a set of
-[eq]#N {times} M# dependencies between all pairs of per-view subpasses in
-the source and destination.
-Thus, it is a more compact representation which also makes clear the
-commonality and reuse that is present between views in a subpass.
-This interpretation motivates the answers to questions like "`when does the
-load op apply`" - it is on the first use of each view of an attachment, as
-if each view was a separate attachment.
-====
-
-endif::VK_VERSION_1_1,VK_KHR_multiview[]
-
-ifdef::VK_EXT_transform_feedback[]
-If any two subpasses of a render pass activate transform feedback to the
-same bound transform feedback buffers, a subpass dependency must: be
-included (either directly or via some intermediate subpasses) between them.
-endif::VK_EXT_transform_feedback[]
-
-ifdef::editing-notes[]
-[NOTE]
-.editing-note
-====
-The following two alleged implicit dependencies are practically no-ops, as
-the operations they describe are already guaranteed by semaphores and
-submission order (so they are almost entirely no-ops on their own).
-The *only* reason they exist is because it simplifies reasoning about where
-<<renderpass-layout-transitions, automatic layout transitions>> happen.
-Further rewrites of this chapter could potentially remove the need for
-these.
-====
-endif::editing-notes[]
-
-[[renderpass-implicit-dependencies]]
-If there is no subpass dependency from ename:VK_SUBPASS_EXTERNAL to the
-first subpass that uses an attachment, then an implicit subpass dependency
-exists from ename:VK_SUBPASS_EXTERNAL to the first subpass it is used in.
-The implicit subpass dependency only exists if there exists an automatic
-layout transition away from pname:initialLayout.
-The subpass dependency operates as if defined with the following parameters:
-
-[source,c]
-~~~~
-VkSubpassDependency implicitDependency = {
-    .srcSubpass = VK_SUBPASS_EXTERNAL;
-    .dstSubpass = firstSubpass; // First subpass attachment is used in
-ifdef::VK_KHR_synchronization2[]
-    .srcStageMask = VK_PIPELINE_STAGE_NONE_KHR;
-endif::VK_KHR_synchronization2[]
-ifndef::VK_KHR_synchronization2[]
-    .srcStageMask = VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT;
-endif::VK_KHR_synchronization2[]
-    .dstStageMask = VK_PIPELINE_STAGE_ALL_COMMANDS_BIT;
-    .srcAccessMask = 0;
-    .dstAccessMask = VK_ACCESS_INPUT_ATTACHMENT_READ_BIT |
-                     VK_ACCESS_COLOR_ATTACHMENT_READ_BIT |
-                     VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT |
-                     VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_READ_BIT |
-                     VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT;
-    .dependencyFlags = 0;
-};
-~~~~
-
-Similarly, if there is no subpass dependency from the last subpass that uses
-an attachment to ename:VK_SUBPASS_EXTERNAL, then an implicit subpass
-dependency exists from the last subpass it is used in to
-ename:VK_SUBPASS_EXTERNAL.
-The implicit subpass dependency only exists if there exists an automatic
-layout transition into pname:finalLayout.
-The subpass dependency operates as if defined with the following parameters:
-
-[source,c]
-~~~~
-VkSubpassDependency implicitDependency = {
-    .srcSubpass = lastSubpass; // Last subpass attachment is used in
-    .dstSubpass = VK_SUBPASS_EXTERNAL;
-    .srcStageMask = VK_PIPELINE_STAGE_ALL_COMMANDS_BIT;
-ifdef::VK_KHR_synchronization2[]
-    .dstStageMask = VK_PIPELINE_STAGE_NONE_KHR;
-endif::VK_KHR_synchronization2[]
-ifndef::VK_KHR_synchronization2[]
-    .dstStageMask = VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT;
-endif::VK_KHR_synchronization2[]
-    .srcAccessMask = VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT |
-                     VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT;
-    .dstAccessMask = 0;
-    .dependencyFlags = 0;
-};
-~~~~
-
-[[renderpass-layout-transitions]]
-As subpasses may: overlap or execute out of order with regards to other
-subpasses unless a subpass dependency chain describes otherwise, the layout
-transitions required between subpasses cannot: be known to an application.
-Instead, an application provides the layout that each attachment must: be in
-at the start and end of a render pass, and the layout it must: be in during
-each subpass it is used in.
-The implementation then must: execute layout transitions between subpasses
-in order to guarantee that the images are in the layouts required by each
-subpass, and in the final layout at the end of the render pass.
-
-Automatic layout transitions apply to the entire image subresource attached
-to the framebuffer.
-ifdef::VK_VERSION_1_1,VK_KHR_maintenance1[]
-If the attachment view is a 2D or 2D array view of a 3D image, even if the
-attachment view only refers to a subset of the slices of the selected mip
-level of the 3D image, automatic layout transitions apply to the entire
-subresource referenced which is the entire mip level in this case.
-endif::VK_VERSION_1_1,VK_KHR_maintenance1[]
-
-Automatic layout transitions away from the layout used in a subpass
-happen-after the availability operations for all dependencies with that
-subpass as the pname:srcSubpass.
-
-Automatic layout transitions into the layout used in a subpass happen-before
-the visibility operations for all dependencies with that subpass as the
-pname:dstSubpass.
-
-Automatic layout transitions away from pname:initialLayout happen-after the
-availability operations for all dependencies with a pname:srcSubpass equal
-to ename:VK_SUBPASS_EXTERNAL, where pname:dstSubpass uses the attachment
-that will be transitioned.
-For attachments created with ename:VK_ATTACHMENT_DESCRIPTION_MAY_ALIAS_BIT,
-automatic layout transitions away from pname:initialLayout happen-after the
-availability operations for all dependencies with a pname:srcSubpass equal
-to ename:VK_SUBPASS_EXTERNAL, where pname:dstSubpass uses any aliased
-attachment.
-
-Automatic layout transitions into pname:finalLayout happen-before the
-visibility operations for all dependencies with a pname:dstSubpass equal to
-ename:VK_SUBPASS_EXTERNAL, where pname:srcSubpass uses the attachment that
-will be transitioned.
-For attachments created with ename:VK_ATTACHMENT_DESCRIPTION_MAY_ALIAS_BIT,
-automatic layout transitions into pname:finalLayout happen-before the
-visibility operations for all dependencies with a pname:dstSubpass equal to
-ename:VK_SUBPASS_EXTERNAL, where pname:srcSubpass uses any aliased
-attachment.
-
-ifdef::VK_EXT_sample_locations[]
-
-The image layout of the depth aspect of a depth/stencil attachment referring
-to an image created with
-ename:VK_IMAGE_CREATE_SAMPLE_LOCATIONS_COMPATIBLE_DEPTH_BIT_EXT is dependent
-on the last sample locations used to render to the attachment, thus
-automatic layout transitions use the sample locations state specified in
-slink:VkRenderPassSampleLocationsBeginInfoEXT.
-
-Automatic layout transitions of an attachment referring to a depth/stencil
-image created with
-ename:VK_IMAGE_CREATE_SAMPLE_LOCATIONS_COMPATIBLE_DEPTH_BIT_EXT use the
-sample locations the image subresource range referenced by the attachment
-was last rendered with.
-If the current render pass does not use the attachment as a depth/stencil
-attachment in any subpass that happens-before, the automatic layout
-transition uses the sample locations state specified in the
-pname:sampleLocationsInfo member of the element of the
-sname:VkRenderPassSampleLocationsBeginInfoEXT::pname:pAttachmentInitialSampleLocations
-array for which the pname:attachmentIndex member equals the attachment index
-of the attachment, if one is specified.
-Otherwise, the automatic layout transition uses the sample locations state
-specified in the pname:sampleLocationsInfo member of the element of the
-sname:VkRenderPassSampleLocationsBeginInfoEXT::pname:pPostSubpassSampleLocations
-array for which the pname:subpassIndex member equals the index of the
-subpass that last used the attachment as a depth/stencil attachment, if one
-is specified.
-
-If no sample locations state has been specified for an automatic layout
-transition performed on an attachment referring to a depth/stencil image
-created with ename:VK_IMAGE_CREATE_SAMPLE_LOCATIONS_COMPATIBLE_DEPTH_BIT_EXT
-the contents of the depth aspect of the depth/stencil attachment become
-undefined: as if the layout of the attachment was transitioned from the
-ename:VK_IMAGE_LAYOUT_UNDEFINED layout.
-
-endif::VK_EXT_sample_locations[]
-
-If two subpasses use the same attachment, and both subpasses use the
-attachment in a read-only layout, no subpass dependency needs to be
-specified between those subpasses.
-If an implementation treats those layouts separately, it must: insert an
-implicit subpass dependency between those subpasses to separate the uses in
-each layout.
-The subpass dependency operates as if defined with the following parameters:
-
-[source,c]
-~~~~
-// Used for input attachments
-VkPipelineStageFlags inputAttachmentStages = VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT;
-VkAccessFlags inputAttachmentDstAccess = VK_ACCESS_INPUT_ATTACHMENT_READ_BIT;
-
-// Used for depth/stencil attachments
-VkPipelineStageFlags depthStencilAttachmentStages = VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT | VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT;
-VkAccessFlags depthStencilAttachmentDstAccess = VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_READ_BIT;
-
-VkSubpassDependency implicitDependency = {
-    .srcSubpass = firstSubpass;
-    .dstSubpass = secondSubpass;
-    .srcStageMask = inputAttachmentStages | depthStencilAttachmentStages;
-    .dstStageMask = inputAttachmentStages | depthStencilAttachmentStages;
-    .srcAccessMask = 0;
-    .dstAccessMask = inputAttachmentDstAccess | depthStencilAttachmentDstAccess;
-    .dependencyFlags = 0;
-};
-~~~~
-
-[[renderpass-feedbackloop]]
-If a subpass uses the same attachment as both an input attachment and either
-a color attachment or a depth/stencil attachment, writes via the color or
-depth/stencil attachment are not automatically made visible to reads via the
-input attachment, causing a _feedback loop_, except in any of the following
-conditions:
-
-  * If the color components or depth/stencil components read by the input
-    attachment are mutually exclusive with the components written by the
-    color or depth/stencil attachments, then there is no feedback loop.
-    This requires the graphics pipelines used by the subpass to disable
-    writes to color components that are read as inputs via the
-ifdef::VK_EXT_color_write_enable[]
-    pname:colorWriteEnable or
-endif::VK_EXT_color_write_enable[]
-    pname:colorWriteMask, and to disable writes to depth/stencil components
-    that are read as inputs via pname:depthWriteEnable or
-    pname:stencilTestEnable.
-  * If the attachment is used as an input attachment and depth/stencil
-    attachment only, and the depth/stencil attachment is not written to.
-
-Rendering within a subpass that contains a feedback loop creates a
-<<memory-model-access-data-race, data race>>, except in the following cases:
-
-  * If a memory dependency is inserted between when the attachment is
-    written and when it is subsequently read by later fragments.
-    <<synchronization-pipeline-barriers, Pipeline barriers>> expressing a
-    <<synchronization-pipeline-barriers-subpass-self-dependencies, subpass
-    self-dependency>> are the only way to achieve this, and one must: be
-    inserted every time a fragment will read values at a particular sample
-    (x, y, layer, sample) coordinate, if those values have been written
-    since the most recent pipeline barrier; or since the start of the
-    subpass, if there have been no pipeline barriers since the start of the
-    subpass.
-
-[[attachment-type-imagelayout]]
-Attachments have requirements for a valid image layout depending on the
-usage
-
-  * An attachment used as an input attachment must: be in the
-ifdef::VK_KHR_shared_presentable_image[]
-    ename:VK_IMAGE_LAYOUT_SHARED_PRESENT_KHR,
-endif::VK_KHR_shared_presentable_image[]
-ifdef::VK_VERSION_1_1,VK_KHR_maintenance2[]
-    ename:VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_OPTIMAL,
-    ename:VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_OPTIMAL,
-endif::VK_VERSION_1_1,VK_KHR_maintenance2[]
-ifdef::VK_VERSION_1_2,VK_KHR_separate_depth_stencil_layouts[]
-    ename:VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL,
-    ename:VK_IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL,
-endif::VK_VERSION_1_2,VK_KHR_separate_depth_stencil_layouts[]
-    ename:VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL,
-    ename:VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL, or
-    ename:VK_IMAGE_LAYOUT_GENERAL layout.
-  * An attachment used only as a color attachment must: be in the
-    ename:VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL or
-ifdef::VK_KHR_shared_presentable_image[]
-    ename:VK_IMAGE_LAYOUT_SHARED_PRESENT_KHR or
-endif::VK_KHR_shared_presentable_image[]
-    ename:VK_IMAGE_LAYOUT_GENERAL layout.
-  * An attachment used as both an input attachment and a color attachment
-    must: be in the
-ifdef::VK_KHR_shared_presentable_image[]
-    ename:VK_IMAGE_LAYOUT_SHARED_PRESENT_KHR or
-endif::VK_KHR_shared_presentable_image[]
-    ename:VK_IMAGE_LAYOUT_GENERAL layout.
-  * An attachment used only as a depth/stencil attachment must: be in the
-    ename:VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL,
-ifdef::VK_VERSION_1_2,VK_KHR_separate_depth_stencil_layouts[]
-    ename:VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL,
-    ename:VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL,
-    ename:VK_IMAGE_LAYOUT_STENCIL_ATTACHMENT_OPTIMAL,
-    ename:VK_IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL,
-endif::VK_VERSION_1_2,VK_KHR_separate_depth_stencil_layouts[]
-ifdef::VK_KHR_shared_presentable_image[]
-    ename:VK_IMAGE_LAYOUT_SHARED_PRESENT_KHR,
-endif::VK_KHR_shared_presentable_image[]
-ifdef::VK_VERSION_1_1,VK_KHR_maintenance2[]
-    ename:VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_OPTIMAL,
-    ename:VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_OPTIMAL,
-endif::VK_VERSION_1_1,VK_KHR_maintenance2[]
-    ename:VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL, or
-    ename:VK_IMAGE_LAYOUT_GENERAL layout.
-  * An attachment used as an input attachment and depth/stencil attachment
-    must: be in the
-ifdef::VK_KHR_shared_presentable_image[]
-    ename:VK_IMAGE_LAYOUT_SHARED_PRESENT_KHR,
-endif::VK_KHR_shared_presentable_image[]
-ifdef::VK_VERSION_1_1,VK_KHR_maintenance2[]
-    ename:VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_OPTIMAL,
-    ename:VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_OPTIMAL,
-endif::VK_VERSION_1_1,VK_KHR_maintenance2[]
-    ename:VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL, or
-    ename:VK_IMAGE_LAYOUT_GENERAL layout.
-
-An attachment must: not be used as both a depth/stencil attachment and a
-color attachment.
-
-ifdef::VK_VERSION_1_2,VK_KHR_create_renderpass2[]
-A more extensible version of render pass creation is also defined below.
-
-[open,refpage='vkCreateRenderPass2',desc='Create a new render pass object',type='protos',alias='vkCreateRenderPass2KHR']
---
-To create a render pass, call:
-
-ifdef::VK_VERSION_1_2[]
-include::{generated}/api/protos/vkCreateRenderPass2.txt[]
-endif::VK_VERSION_1_2[]
-
-ifdef::VK_VERSION_1_2+VK_KHR_create_renderpass2[or the equivalent command]
-
-ifdef::VK_KHR_create_renderpass2[]
-include::{generated}/api/protos/vkCreateRenderPass2KHR.txt[]
-endif::VK_KHR_create_renderpass2[]
-
-  * pname:device is the logical device that creates the render pass.
-  * pname:pCreateInfo is a pointer to a slink:VkRenderPassCreateInfo2
-    structure describing the parameters of the render pass.
-  * pname:pAllocator controls host memory allocation as described in the
-    <<memory-allocation, Memory Allocation>> chapter.
-  * pname:pRenderPass is a pointer to a slink:VkRenderPass handle in which
-    the resulting render pass object is returned.
-
-This command is functionally identical to flink:vkCreateRenderPass, but
-includes extensible sub-structures that include pname:sType and pname:pNext
-parameters, allowing them to be more easily extended.
-
-include::{generated}/validity/protos/vkCreateRenderPass2.txt[]
---
-
-[open,refpage='VkRenderPassCreateInfo2',desc='Structure specifying parameters of a newly created render pass',type='structs',alias='VkRenderPassCreateInfo2KHR']
---
-The sname:VkRenderPassCreateInfo2 structure is defined as:
-
-include::{generated}/api/structs/VkRenderPassCreateInfo2.txt[]
-
-ifdef::VK_KHR_create_renderpass2[]
-or the equivalent
-
-include::{generated}/api/structs/VkRenderPassCreateInfo2KHR.txt[]
-endif::VK_KHR_create_renderpass2[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:flags is reserved for future use.
-  * pname:attachmentCount is the number of attachments used by this render
-    pass.
-  * pname:pAttachments is a pointer to an array of pname:attachmentCount
-    slink:VkAttachmentDescription2 structures describing the attachments
-    used by the render pass.
-  * pname:subpassCount is the number of subpasses to create.
-  * pname:pSubpasses is a pointer to an array of pname:subpassCount
-    slink:VkSubpassDescription2 structures describing each subpass.
-  * pname:dependencyCount is the number of dependencies between pairs of
-    subpasses.
-  * pname:pDependencies is a pointer to an array of pname:dependencyCount
-    slink:VkSubpassDependency2 structures describing dependencies between
-    pairs of subpasses.
-  * pname:correlatedViewMaskCount is the number of correlation masks.
-  * pname:pCorrelatedViewMasks is a pointer to an array of view masks
-    indicating sets of views that may: be more efficient to render
-    concurrently.
-
-Parameters defined by this structure with the same name as those in
-slink:VkRenderPassCreateInfo have the identical effect to those parameters;
-the child structures are variants of those used in
-slink:VkRenderPassCreateInfo which add pname:sType and pname:pNext
-parameters, allowing them to be extended.
-
-If the slink:VkSubpassDescription2::pname:viewMask member of any element of
-pname:pSubpasses is not zero, _multiview_ functionality is considered to be
-enabled for this render pass.
-
-pname:correlatedViewMaskCount and pname:pCorrelatedViewMasks have the same
-effect as slink:VkRenderPassMultiviewCreateInfo::pname:correlationMaskCount
-and slink:VkRenderPassMultiviewCreateInfo::pname:pCorrelationMasks,
-respectively.
-
-.Valid Usage
-****
-  * [[VUID-VkRenderPassCreateInfo2-None-03049]]
-    If any two subpasses operate on attachments with overlapping ranges of
-    the same sname:VkDeviceMemory object, and at least one subpass writes to
-    that area of sname:VkDeviceMemory, a subpass dependency must: be
-    included (either directly or via some intermediate subpasses) between
-    them
-  * [[VUID-VkRenderPassCreateInfo2-attachment-03050]]
-    If the pname:attachment member of any element of
-    pname:pInputAttachments, pname:pColorAttachments,
-    pname:pResolveAttachments or pname:pDepthStencilAttachment, or the
-    attachment indexed by any element of pname:pPreserveAttachments in any
-    given element of pname:pSubpasses is bound to a range of a
-    sname:VkDeviceMemory object that overlaps with any other attachment in
-    any subpass (including the same subpass), the
-    sname:VkAttachmentDescription2 structures describing them must: include
-    ename:VK_ATTACHMENT_DESCRIPTION_MAY_ALIAS_BIT in pname:flags
-  * [[VUID-VkRenderPassCreateInfo2-attachment-03051]]
-    If the pname:attachment member of any element of
-    pname:pInputAttachments, pname:pColorAttachments,
-    pname:pResolveAttachments or pname:pDepthStencilAttachment, or any
-    element of pname:pPreserveAttachments in any given element of
-    pname:pSubpasses is not ename:VK_ATTACHMENT_UNUSED, it must: be less
-    than pname:attachmentCount
-  * [[VUID-VkRenderPassCreateInfo2-pAttachments-02522]]
-    For any member of pname:pAttachments with a pname:loadOp equal to
-    ename:VK_ATTACHMENT_LOAD_OP_CLEAR, the first use of that attachment
-    must: not specify a pname:layout equal to
-    ename:VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL,
-    ename:VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL, or
-    ename:VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_OPTIMAL
-  * [[VUID-VkRenderPassCreateInfo2-pAttachments-02523]]
-    For any member of pname:pAttachments with a pname:stencilLoadOp equal to
-    ename:VK_ATTACHMENT_LOAD_OP_CLEAR, the first use of that attachment
-    must: not specify a pname:layout equal to
-    ename:VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL,
-    ename:VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL, or
-    ename:VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_OPTIMAL
-  * [[VUID-VkRenderPassCreateInfo2-pDependencies-03054]]
-    For any element of pname:pDependencies, if the pname:srcSubpass is not
-    ename:VK_SUBPASS_EXTERNAL, all stage flags included in the
-    pname:srcStageMask member of that dependency must: be a pipeline stage
-    supported by the <<synchronization-pipeline-stages-types, pipeline>>
-    identified by the pname:pipelineBindPoint member of the source subpass
-  * [[VUID-VkRenderPassCreateInfo2-pDependencies-03055]]
-    For any element of pname:pDependencies, if the pname:dstSubpass is not
-    ename:VK_SUBPASS_EXTERNAL, all stage flags included in the
-    pname:dstStageMask member of that dependency must: be a pipeline stage
-    supported by the <<synchronization-pipeline-stages-types, pipeline>>
-    identified by the pname:pipelineBindPoint member of the destination
-    subpass
-  * [[VUID-VkRenderPassCreateInfo2-pCorrelatedViewMasks-03056]]
-    The set of bits included in any element of pname:pCorrelatedViewMasks
-    must: not overlap with the set of bits included in any other element of
-    pname:pCorrelatedViewMasks
-  * [[VUID-VkRenderPassCreateInfo2-viewMask-03057]]
-    If the slink:VkSubpassDescription2::pname:viewMask member of all
-    elements of pname:pSubpasses is `0`, pname:correlatedViewMaskCount must:
-    be `0`
-  * [[VUID-VkRenderPassCreateInfo2-viewMask-03058]]
-    The slink:VkSubpassDescription2::pname:viewMask member of all elements
-    of pname:pSubpasses must: either all be `0`, or all not be `0`
-  * [[VUID-VkRenderPassCreateInfo2-viewMask-03059]]
-    If the slink:VkSubpassDescription2::pname:viewMask member of all
-    elements of pname:pSubpasses is `0`, the pname:dependencyFlags member of
-    any element of pname:pDependencies must: not include
-    ename:VK_DEPENDENCY_VIEW_LOCAL_BIT
-  * [[VUID-VkRenderPassCreateInfo2-pDependencies-03060]]
-    For any element of pname:pDependencies where its pname:srcSubpass member
-    equals its pname:dstSubpass member, if the pname:viewMask member of the
-    corresponding element of pname:pSubpasses includes more than one bit,
-    its pname:dependencyFlags member must: include
-    ename:VK_DEPENDENCY_VIEW_LOCAL_BIT
-  * [[VUID-VkRenderPassCreateInfo2-attachment-02525]]
-    If the pname:attachment member of any element of the
-    pname:pInputAttachments member of any element of pname:pSubpasses is not
-    ename:VK_ATTACHMENT_UNUSED, the pname:aspectMask member of that element
-    of pname:pInputAttachments must: only include aspects that are present
-    in images of the format specified by the element of pname:pAttachments
-    specified by pname:attachment
-  * [[VUID-VkRenderPassCreateInfo2-srcSubpass-02526]]
-    The pname:srcSubpass member of each element of pname:pDependencies must:
-    be less than pname:subpassCount
-  * [[VUID-VkRenderPassCreateInfo2-dstSubpass-02527]]
-    The pname:dstSubpass member of each element of pname:pDependencies must:
-    be less than pname:subpassCount
-ifdef::VK_KHR_fragment_shading_rate[]
-  * [[VUID-VkRenderPassCreateInfo2-pAttachments-04585]]
-    If any element of pname:pAttachments is used as a fragment shading rate
-    attachment in any subpass, it must: not be used as any other attachment
-    in the render pass
-ifdef::VK_QCOM_render_pass_transform[]
-  * [[VUID-VkRenderPassCreateInfo2-flags-04521]]
-    If pname:flags includes ename:VK_RENDER_PASS_CREATE_TRANSFORM_BIT_QCOM,
-    an element of pname:pSubpasses includes an instance of
-    slink:VkFragmentShadingRateAttachmentInfoKHR in its pname:pNext chain,
-    and the pname:pFragmentShadingRateAttachment member of that structure is
-    not equal to `NULL`, the pname:attachment member of
-    pname:pFragmentShadingRateAttachment must: be ename:VK_ATTACHMENT_UNUSED
-endif::VK_QCOM_render_pass_transform[]
-  * [[VUID-VkRenderPassCreateInfo2-pAttachments-04586]]
-    If any element of pname:pAttachments is used as a fragment shading rate
-    attachment in any subpass, it must: have an image format whose
-    <<potential-format-features, potential format features>> contain
-    ename:VK_FORMAT_FEATURE_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR
-endif::VK_KHR_fragment_shading_rate[]
-ifdef::VK_QCOM_render_pass_shader_resolve[]
-  * [[VUID-VkRenderPassCreateInfo2-rasterizationSamples-04905]]
-    If the pipeline is being created with fragment shader state, and the
-    apiext:VK_QCOM_render_pass_shader_resolve extension is enabled, and if
-    subpass has any input attachments, and if the subpass description
-    contains ename:VK_SUBPASS_DESCRIPTION_FRAGMENT_REGION_BIT_QCOM, then the
-    sample count of the input attachments must: equal
-    pname:rasterizationSamples
-  * [[VUID-VkRenderPassCreateInfo2-sampleShadingEnable-04906]]
-    If the pipeline is being created with fragment shader state, and the
-    apiext:VK_QCOM_render_pass_shader_resolve extension is enabled, and if
-    the subpass description contains
-    ename:VK_SUBPASS_DESCRIPTION_FRAGMENT_REGION_BIT_QCOM, then
-    pname:sampleShadingEnable must: be false
-  * [[VUID-VkRenderPassCreateInfo2-flags-04907]]
-    If pname:flags includes
-    ename:VK_SUBPASS_DESCRIPTION_SHADER_RESOLVE_BIT_QCOM, and if
-    pname:pResolveAttachments is not `NULL`, then each resolve attachment
-    must: be ename:VK_ATTACHMENT_UNUSED
-  * [[VUID-VkRenderPassCreateInfo2-flags-04908]]
-    If pname:flags includes
-    ename:VK_SUBPASS_DESCRIPTION_SHADER_RESOLVE_BIT_QCOM, and if
-    pname:pDepthStencilResolveAttachmentKHR is not `NULL`, then the
-    depth/stencil resolve attachment must: be ename:VK_ATTACHMENT_UNUSED
-  * [[VUID-VkRenderPassCreateInfo2-flags-04909]]
-    If pname:flags includes
-    ename:VK_SUBPASS_DESCRIPTION_SHADER_RESOLVE_BIT_QCOM, then the subpass
-    must: be the last subpass in a subpass dependency chain
-endif::VK_QCOM_render_pass_shader_resolve[]
-****
-
-include::{generated}/validity/structs/VkRenderPassCreateInfo2.txt[]
---
-
-[open,refpage='VkAttachmentDescription2',desc='Structure specifying an attachment description',type='structs',alias='VkAttachmentDescription2KHR']
---
-The sname:VkAttachmentDescription2 structure is defined as:
-
-include::{generated}/api/structs/VkAttachmentDescription2.txt[]
-
-ifdef::VK_KHR_create_renderpass2[]
-or the equivalent
-
-include::{generated}/api/structs/VkAttachmentDescription2KHR.txt[]
-endif::VK_KHR_create_renderpass2[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:flags is a bitmask of elink:VkAttachmentDescriptionFlagBits
-    specifying additional properties of the attachment.
-  * pname:format is a elink:VkFormat value specifying the format of the
-    image that will be used for the attachment.
-  * pname:samples is a elink:VkSampleCountFlagBits value specifying the
-    number of samples of the image.
-  * pname:loadOp is a elink:VkAttachmentLoadOp value specifying how the
-    contents of color and depth components of the attachment are treated at
-    the beginning of the subpass where it is first used.
-  * pname:storeOp is a elink:VkAttachmentStoreOp value specifying how the
-    contents of color and depth components of the attachment are treated at
-    the end of the subpass where it is last used.
-  * pname:stencilLoadOp is a elink:VkAttachmentLoadOp value specifying how
-    the contents of stencil components of the attachment are treated at the
-    beginning of the subpass where it is first used.
-  * pname:stencilStoreOp is a elink:VkAttachmentStoreOp value specifying how
-    the contents of stencil components of the attachment are treated at the
-    end of the last subpass where it is used.
-  * pname:initialLayout is the layout the attachment image subresource will
-    be in when a render pass instance begins.
-  * pname:finalLayout is the layout the attachment image subresource will be
-    transitioned to when a render pass instance ends.
-
-Parameters defined by this structure with the same name as those in
-slink:VkAttachmentDescription have the identical effect to those parameters.
-
-ifdef::VK_VERSION_1_2,VK_KHR_separate_depth_stencil_layouts[]
-If the <<features-separateDepthStencilLayouts,
-pname:separateDepthStencilLayouts>> feature is enabled, and pname:format is
-a depth/stencil format, pname:initialLayout and pname:finalLayout can: be
-set to a layout that only specifies the layout of the depth aspect.
-
-If the pname:pNext chain includes a
-slink:VkAttachmentDescriptionStencilLayout structure, then the
-pname:stencilInitialLayout and pname:stencilFinalLayout members specify the
-initial and final layouts of the stencil aspect of a depth/stencil format,
-and pname:initialLayout and pname:finalLayout only apply to the depth
-aspect.
-For depth-only formats, the slink:VkAttachmentDescriptionStencilLayout
-structure is ignored.
-For stencil-only formats, the initial and final layouts of the stencil
-aspect are taken from the slink:VkAttachmentDescriptionStencilLayout
-structure if present, or pname:initialLayout and pname:finalLayout if not
-present.
-
-If pname:format is a depth/stencil format, and either pname:initialLayout or
-pname:finalLayout does not specify a layout for the stencil aspect, then the
-application must: specify the initial and final layouts of the stencil
-aspect by including a slink:VkAttachmentDescriptionStencilLayout structure
-in the pname:pNext chain.
-
-endif::VK_VERSION_1_2,VK_KHR_separate_depth_stencil_layouts[]
-
-.Valid Usage
-****
-  * [[VUID-VkAttachmentDescription2-finalLayout-03061]]
-    pname:finalLayout must: not be ename:VK_IMAGE_LAYOUT_UNDEFINED or
-    ename:VK_IMAGE_LAYOUT_PREINITIALIZED
-  * [[VUID-VkAttachmentDescription2-format-03294]]
-    If pname:format is a color format, pname:initialLayout must: not be
-    ename:VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL,
-    ename:VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL,
-    ename:VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_OPTIMAL, or
-    ename:VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_OPTIMAL
-  * [[VUID-VkAttachmentDescription2-format-03295]]
-    If pname:format is a depth/stencil format, pname:initialLayout must: not
-    be ename:VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL
-  * [[VUID-VkAttachmentDescription2-format-03296]]
-    If pname:format is a color format, pname:finalLayout must: not be
-    ename:VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL,
-    ename:VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL,
-    ename:VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_OPTIMAL, or
-    ename:VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_OPTIMAL
-  * [[VUID-VkAttachmentDescription2-format-03297]]
-    If pname:format is a depth/stencil format, pname:finalLayout must: not
-    be ename:VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL
-ifdef::VK_VERSION_1_2,VK_KHR_separate_depth_stencil_layouts[]
-  * [[VUID-VkAttachmentDescription2-separateDepthStencilLayouts-03298]]
-    If the <<features-separateDepthStencilLayouts,
-    pname:separateDepthStencilLayouts>> feature is not enabled,
-    pname:initialLayout must: not be
-    ename:VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL,
-    ename:VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL,
-    ename:VK_IMAGE_LAYOUT_STENCIL_ATTACHMENT_OPTIMAL or
-    ename:VK_IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL
-  * [[VUID-VkAttachmentDescription2-separateDepthStencilLayouts-03299]]
-    If the <<features-separateDepthStencilLayouts,
-    pname:separateDepthStencilLayouts>> feature is not enabled,
-    pname:finalLayout must: not be
-    ename:VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL,
-    ename:VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL,
-    ename:VK_IMAGE_LAYOUT_STENCIL_ATTACHMENT_OPTIMAL or
-    ename:VK_IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL
-  * [[VUID-VkAttachmentDescription2-format-03300]]
-    If pname:format is a color format, pname:initialLayout must: not be
-    ename:VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL,
-    ename:VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL,
-    ename:VK_IMAGE_LAYOUT_STENCIL_ATTACHMENT_OPTIMAL or
-    ename:VK_IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL
-  * [[VUID-VkAttachmentDescription2-format-03301]]
-    If pname:format is a color format, pname:finalLayout must: not be
-    ename:VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL,
-    ename:VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL,
-    ename:VK_IMAGE_LAYOUT_STENCIL_ATTACHMENT_OPTIMAL or
-    ename:VK_IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL
-  * [[VUID-VkAttachmentDescription2-format-03302]]
-    If pname:format is a depth/stencil format which includes both depth and
-    stencil aspects, and pname:initialLayout is
-    ename:VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL or
-    ename:VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL, the pname:pNext chain
-    must: include a slink:VkAttachmentDescriptionStencilLayout structure
-  * [[VUID-VkAttachmentDescription2-format-03303]]
-    If pname:format is a depth/stencil format which includes both depth and
-    stencil aspects, and pname:finalLayout is
-    ename:VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL or
-    ename:VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL, the pname:pNext chain
-    must: include a slink:VkAttachmentDescriptionStencilLayout structure
-  * [[VUID-VkAttachmentDescription2-format-03304]]
-    If pname:format is a depth/stencil format which includes only the depth
-    aspect, pname:initialLayout must: not be
-    ename:VK_IMAGE_LAYOUT_STENCIL_ATTACHMENT_OPTIMAL or
-    ename:VK_IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL
-  * [[VUID-VkAttachmentDescription2-format-03305]]
-    If pname:format is a depth/stencil format which includes only the depth
-    aspect, pname:finalLayout must: not be
-    ename:VK_IMAGE_LAYOUT_STENCIL_ATTACHMENT_OPTIMAL or
-    ename:VK_IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL
-  * [[VUID-VkAttachmentDescription2-format-03306]]
-    If pname:format is a depth/stencil format which includes only the
-    stencil aspect, pname:initialLayout must: not be
-    ename:VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL or
-    ename:VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL
-  * [[VUID-VkAttachmentDescription2-format-03307]]
-    If pname:format is a depth/stencil format which includes only the
-    stencil aspect, pname:finalLayout must: not be
-    ename:VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL or
-    ename:VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL
-endif::VK_VERSION_1_2,VK_KHR_separate_depth_stencil_layouts[]
-****
-
-include::{generated}/validity/structs/VkAttachmentDescription2.txt[]
---
-
-ifdef::VK_VERSION_1_2,VK_KHR_separate_depth_stencil_layouts[]
-[open,refpage='VkAttachmentDescriptionStencilLayout',desc='Structure specifying an attachment description',type='structs',alias='VkAttachmentDescriptionStencilLayoutKHR']
---
-The sname:VkAttachmentDescriptionStencilLayout structure is defined as:
-
-include::{generated}/api/structs/VkAttachmentDescriptionStencilLayout.txt[]
-
-ifdef::VK_KHR_separate_depth_stencil_layouts[]
-or the equivalent
-
-include::{generated}/api/structs/VkAttachmentDescriptionStencilLayoutKHR.txt[]
-endif::VK_KHR_separate_depth_stencil_layouts[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:stencilInitialLayout is the layout the stencil aspect of the
-    attachment image subresource will be in when a render pass instance
-    begins.
-  * pname:stencilFinalLayout is the layout the stencil aspect of the
-    attachment image subresource will be transitioned to when a render pass
-    instance ends.
-
-.Valid Usage
-****
-  * [[VUID-VkAttachmentDescriptionStencilLayout-stencilInitialLayout-03308]]
-    pname:stencilInitialLayout must: not be
-    ename:VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL,
-    ename:VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL,
-    ename:VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL,
-    ename:VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL,
-    ename:VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL,
-    ename:VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_OPTIMAL, or
-    ename:VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_OPTIMAL
-  * [[VUID-VkAttachmentDescriptionStencilLayout-stencilFinalLayout-03309]]
-    pname:stencilFinalLayout must: not be
-    ename:VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL,
-    ename:VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL,
-    ename:VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL,
-    ename:VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL,
-    ename:VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL,
-    ename:VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_OPTIMAL, or
-    ename:VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_OPTIMAL
-  * [[VUID-VkAttachmentDescriptionStencilLayout-stencilFinalLayout-03310]]
-    pname:stencilFinalLayout must: not be ename:VK_IMAGE_LAYOUT_UNDEFINED or
-    ename:VK_IMAGE_LAYOUT_PREINITIALIZED
-****
-
-include::{generated}/validity/structs/VkAttachmentDescriptionStencilLayout.txt[]
---
-endif::VK_VERSION_1_2,VK_KHR_separate_depth_stencil_layouts[]
-
-[open,refpage='VkSubpassDescription2',desc='Structure specifying a subpass description',type='structs',alias='VkSubpassDescription2KHR']
---
-The sname:VkSubpassDescription2 structure is defined as:
-
-include::{generated}/api/structs/VkSubpassDescription2.txt[]
-
-ifdef::VK_KHR_create_renderpass2[]
-or the equivalent
-
-include::{generated}/api/structs/VkSubpassDescription2KHR.txt[]
-endif::VK_KHR_create_renderpass2[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:flags is a bitmask of elink:VkSubpassDescriptionFlagBits
-    specifying usage of the subpass.
-  * pname:pipelineBindPoint is a elink:VkPipelineBindPoint value specifying
-    the pipeline type supported for this subpass.
-  * pname:viewMask is a bitfield of view indices describing which views
-    rendering is broadcast to in this subpass, when multiview is enabled.
-  * pname:inputAttachmentCount is the number of input attachments.
-  * pname:pInputAttachments is a pointer to an array of
-    slink:VkAttachmentReference2 structures defining the input attachments
-    for this subpass and their layouts.
-  * pname:colorAttachmentCount is the number of color attachments.
-  * pname:pColorAttachments is a pointer to an array of
-    pname:colorAttachmentCount slink:VkAttachmentReference2 structures
-    defining the color attachments for this subpass and their layouts.
-  * pname:pResolveAttachments is `NULL` or a pointer to an array of
-    pname:colorAttachmentCount slink:VkAttachmentReference2 structures
-    defining the resolve attachments for this subpass and their layouts.
-  * pname:pDepthStencilAttachment is a pointer to a
-    slink:VkAttachmentReference2 structure specifying the depth/stencil
-    attachment for this subpass and its layout.
-  * pname:preserveAttachmentCount is the number of preserved attachments.
-  * pname:pPreserveAttachments is a pointer to an array of
-    pname:preserveAttachmentCount render pass attachment indices identifying
-    attachments that are not used by this subpass, but whose contents must:
-    be preserved throughout the subpass.
-
-Parameters defined by this structure with the same name as those in
-slink:VkSubpassDescription have the identical effect to those parameters.
-
-pname:viewMask has the same effect for the described subpass as
-slink:VkRenderPassMultiviewCreateInfo::pname:pViewMasks has on each
-corresponding subpass.
-
-ifdef::VK_KHR_fragment_shading_rate[]
-If a slink:VkFragmentShadingRateAttachmentInfoKHR structure is included in
-the pname:pNext chain, pname:pFragmentShadingRateAttachment is not `NULL`,
-and its pname:attachment member is not ename:VK_ATTACHMENT_UNUSED, the
-identified attachment defines a fragment shading rate attachment for that
-subpass.
-endif::VK_KHR_fragment_shading_rate[]
-
-.Valid Usage
-****
-ifndef::VK_HUAWEI_subpass_shading[]
-  * [[VUID-VkSubpassDescription2-pipelineBindPoint-03062]]
-    pname:pipelineBindPoint must: be ename:VK_PIPELINE_BIND_POINT_GRAPHICS
-endif::VK_HUAWEI_subpass_shading[]
-ifdef::VK_HUAWEI_subpass_shading[]
-  * [[VUID-VkSubpassDescription2-pipelineBindPoint-04953]]
-    pname:pipelineBindPoint must: be ename:VK_PIPELINE_BIND_POINT_GRAPHICS
-    or ename:VK_PIPELINE_BIND_POINT_SUBPASS_SHADING_HUAWEI
-endif::VK_HUAWEI_subpass_shading[]
-  * [[VUID-VkSubpassDescription2-colorAttachmentCount-03063]]
-    pname:colorAttachmentCount must: be less than or equal to
-    sname:VkPhysicalDeviceLimits::pname:maxColorAttachments
-  * [[VUID-VkSubpassDescription2-loadOp-03064]]
-    If the first use of an attachment in this render pass is as an input
-    attachment, and the attachment is not also used as a color or
-    depth/stencil attachment in the same subpass, then pname:loadOp must:
-    not be ename:VK_ATTACHMENT_LOAD_OP_CLEAR
-  * [[VUID-VkSubpassDescription2-pResolveAttachments-03065]]
-    If pname:pResolveAttachments is not `NULL`, for each resolve attachment
-    that does not have the value ename:VK_ATTACHMENT_UNUSED, the
-    corresponding color attachment must: not have the value
-    ename:VK_ATTACHMENT_UNUSED
-  * [[VUID-VkSubpassDescription2-pResolveAttachments-03066]]
-    If pname:pResolveAttachments is not `NULL`, for each resolve attachment
-    that is not ename:VK_ATTACHMENT_UNUSED, the corresponding color
-    attachment must: not have a sample count of ename:VK_SAMPLE_COUNT_1_BIT
-  * [[VUID-VkSubpassDescription2-pResolveAttachments-03067]]
-    If pname:pResolveAttachments is not `NULL`, each resolve attachment that
-    is not ename:VK_ATTACHMENT_UNUSED must: have a sample count of
-    ename:VK_SAMPLE_COUNT_1_BIT
-  * [[VUID-VkSubpassDescription2-pResolveAttachments-03068]]
-    Any given element of pname:pResolveAttachments must: have the same
-    elink:VkFormat as its corresponding color attachment
-  * [[VUID-VkSubpassDescription2-pColorAttachments-03069]]
-    All attachments in pname:pColorAttachments that are not
-    ename:VK_ATTACHMENT_UNUSED must: have the same sample count
-  * [[VUID-VkSubpassDescription2-pInputAttachments-02897]]
-    All attachments in pname:pInputAttachments that are not
-    ename:VK_ATTACHMENT_UNUSED must: have image formats whose
-    <<potential-format-features, potential format features>> contain at
-    least ename:VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT or
-    ename:VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT
-  * [[VUID-VkSubpassDescription2-pColorAttachments-02898]]
-    All attachments in pname:pColorAttachments that are not
-    ename:VK_ATTACHMENT_UNUSED must: have image formats whose
-    <<potential-format-features, potential format features>> contain
-    ename:VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT
-  * [[VUID-VkSubpassDescription2-pResolveAttachments-02899]]
-    All attachments in pname:pResolveAttachments that are not
-    ename:VK_ATTACHMENT_UNUSED must: have image formats whose
-    <<potential-format-features, potential format features>> contain
-    ename:VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT
-  * [[VUID-VkSubpassDescription2-pDepthStencilAttachment-02900]]
-    If pname:pDepthStencilAttachment is not `NULL` and the attachment is not
-    ename:VK_ATTACHMENT_UNUSED then it must: have an image format whose
-    <<potential-format-features, potential format features>> contain
-    ename:VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT
-ifdef::VK_AMD_mixed_attachment_samples[]
-  * [[VUID-VkSubpassDescription2-pColorAttachments-03070]]
-    If the `apiext:VK_AMD_mixed_attachment_samples` extension is enabled,
-    all attachments in pname:pColorAttachments that are not
-    ename:VK_ATTACHMENT_UNUSED must: have a sample count that is smaller
-    than or equal to the sample count of pname:pDepthStencilAttachment if it
-    is not ename:VK_ATTACHMENT_UNUSED
-endif::VK_AMD_mixed_attachment_samples[]
-  * [[VUID-VkSubpassDescription2-pDepthStencilAttachment-03071]]
-    If neither the `apiext:VK_AMD_mixed_attachment_samples` nor the
-    `apiext:VK_NV_framebuffer_mixed_samples` extensions are enabled, and if
-    pname:pDepthStencilAttachment is not ename:VK_ATTACHMENT_UNUSED and any
-    attachments in pname:pColorAttachments are not
-    ename:VK_ATTACHMENT_UNUSED, they must: have the same sample count
-  * [[VUID-VkSubpassDescription2-attachment-03073]]
-    Each element of pname:pPreserveAttachments must: not be
-    ename:VK_ATTACHMENT_UNUSED
-  * [[VUID-VkSubpassDescription2-pPreserveAttachments-03074]]
-    Any given element of pname:pPreserveAttachments must: not also be an
-    element of any other member of the subpass description
-  * [[VUID-VkSubpassDescription2-layout-02528]]
-    If any attachment is used by more than one slink:VkAttachmentReference2
-    member, then each use must: use the same pname:layout
-  * [[VUID-VkSubpassDescription2-None-04439]]
-    Attachments must: follow the <<attachment-type-imagelayout, image layout
-    requirements>> based on the type of attachment it is being used as
-ifdef::VK_NVX_multiview_per_view_attributes[]
-  * [[VUID-VkSubpassDescription2-flags-03076]]
-    If pname:flags includes
-    ename:VK_SUBPASS_DESCRIPTION_PER_VIEW_POSITION_X_ONLY_BIT_NVX, it must:
-    also include ename:VK_SUBPASS_DESCRIPTION_PER_VIEW_ATTRIBUTES_BIT_NVX
-endif::VK_NVX_multiview_per_view_attributes[]
-  * [[VUID-VkSubpassDescription2-attachment-02799]]
-    If the pname:attachment member of any element of pname:pInputAttachments
-    is not ename:VK_ATTACHMENT_UNUSED, then the pname:aspectMask member
-    must: be a valid combination of elink:VkImageAspectFlagBits
-  * [[VUID-VkSubpassDescription2-attachment-02800]]
-    If the pname:attachment member of any element of pname:pInputAttachments
-    is not ename:VK_ATTACHMENT_UNUSED, then the pname:aspectMask member
-    must: not be `0`
-  * [[VUID-VkSubpassDescription2-attachment-02801]]
-    If the pname:attachment member of any element of pname:pInputAttachments
-    is not ename:VK_ATTACHMENT_UNUSED, then the pname:aspectMask member
-    must: not include ename:VK_IMAGE_ASPECT_METADATA_BIT
-ifdef::VK_EXT_image_drm_format_modifier[]
-  * [[VUID-VkSubpassDescription2-attachment-04563]]
-    If the pname:attachment member of any element of pname:pInputAttachments
-    is not ename:VK_ATTACHMENT_UNUSED, then the pname:aspectMask member
-    must: not include `VK_IMAGE_ASPECT_MEMORY_PLANE__{ibit}__BIT_EXT` for
-    any index _i_
-endif::VK_EXT_image_drm_format_modifier[]
-  * [[VUID-VkSubpassDescription2-pDepthStencilAttachment-04440]]
-    An attachment must: not be used in both pname:pDepthStencilAttachment
-    and pname:pColorAttachments
-****
-
-include::{generated}/validity/structs/VkSubpassDescription2.txt[]
---
-
-ifdef::VK_VERSION_1_2,VK_KHR_depth_stencil_resolve[]
-[open,refpage='VkSubpassDescriptionDepthStencilResolve',desc='Structure specifying depth/stencil resolve operations for a subpass',type='structs',alias='VkSubpassDescriptionDepthStencilResolveKHR']
---
-If the pname:pNext chain of sname:VkSubpassDescription2 includes a
-sname:VkSubpassDescriptionDepthStencilResolve structure, then that structure
-describes multisample resolve operations for the depth/stencil attachment in
-a subpass.
-
-The sname:VkSubpassDescriptionDepthStencilResolve structure is defined as:
-
-include::{generated}/api/structs/VkSubpassDescriptionDepthStencilResolve.txt[]
-
-ifdef::VK_KHR_depth_stencil_resolve[]
-or the equivalent
-
-include::{generated}/api/structs/VkSubpassDescriptionDepthStencilResolveKHR.txt[]
-endif::VK_KHR_depth_stencil_resolve[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:depthResolveMode is a elink:VkResolveModeFlagBits value describing
-    the depth resolve mode.
-  * pname:stencilResolveMode is a elink:VkResolveModeFlagBits value
-    describing the stencil resolve mode.
-  * pname:pDepthStencilResolveAttachment is `NULL` or a pointer to a
-    slink:VkAttachmentReference2 structure defining the depth/stencil
-    resolve attachment for this subpass and its layout.
-
-.Valid Usage
-****
-  * [[VUID-VkSubpassDescriptionDepthStencilResolve-pDepthStencilResolveAttachment-03177]]
-    If pname:pDepthStencilResolveAttachment is not `NULL` and does not have
-    the value ename:VK_ATTACHMENT_UNUSED, pname:pDepthStencilAttachment
-    must: not have the value ename:VK_ATTACHMENT_UNUSED
-  * [[VUID-VkSubpassDescriptionDepthStencilResolve-pDepthStencilResolveAttachment-03178]]
-    If pname:pDepthStencilResolveAttachment is not `NULL` and does not have
-    the value ename:VK_ATTACHMENT_UNUSED, pname:depthResolveMode and
-    pname:stencilResolveMode must: not both be ename:VK_RESOLVE_MODE_NONE
-  * [[VUID-VkSubpassDescriptionDepthStencilResolve-pDepthStencilResolveAttachment-03179]]
-    If pname:pDepthStencilResolveAttachment is not `NULL` and does not have
-    the value ename:VK_ATTACHMENT_UNUSED, pname:pDepthStencilAttachment
-    must: not have a sample count of ename:VK_SAMPLE_COUNT_1_BIT
-  * [[VUID-VkSubpassDescriptionDepthStencilResolve-pDepthStencilResolveAttachment-03180]]
-    If pname:pDepthStencilResolveAttachment is not `NULL` and does not have
-    the value ename:VK_ATTACHMENT_UNUSED,
-    pname:pDepthStencilResolveAttachment must: have a sample count of
-    ename:VK_SAMPLE_COUNT_1_BIT
-  * [[VUID-VkSubpassDescriptionDepthStencilResolve-pDepthStencilResolveAttachment-02651]]
-    If pname:pDepthStencilResolveAttachment is not `NULL` and does not have
-    the value ename:VK_ATTACHMENT_UNUSED then it must: have an image format
-    whose <<potential-format-features, potential format features>> contain
-    ename:VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT
-  * [[VUID-VkSubpassDescriptionDepthStencilResolve-pDepthStencilResolveAttachment-03181]]
-    If the elink:VkFormat of pname:pDepthStencilResolveAttachment has a
-    depth component, then the elink:VkFormat of
-    pname:pDepthStencilAttachment must: have a depth component with the same
-    number of bits and numerical type
-  * [[VUID-VkSubpassDescriptionDepthStencilResolve-pDepthStencilResolveAttachment-03182]]
-    If the elink:VkFormat of pname:pDepthStencilResolveAttachment has a
-    stencil component, then the elink:VkFormat of
-    pname:pDepthStencilAttachment must: have a stencil component with the
-    same number of bits and numerical type
-  * [[VUID-VkSubpassDescriptionDepthStencilResolve-depthResolveMode-03183]]
-    The value of pname:depthResolveMode must: be one of the bits set in
-    slink:VkPhysicalDeviceDepthStencilResolveProperties::pname:supportedDepthResolveModes
-    or ename:VK_RESOLVE_MODE_NONE
-  * [[VUID-VkSubpassDescriptionDepthStencilResolve-stencilResolveMode-03184]]
-    The value of pname:stencilResolveMode must: be one of the bits set in
-    slink:VkPhysicalDeviceDepthStencilResolveProperties::pname:supportedStencilResolveModes
-    or ename:VK_RESOLVE_MODE_NONE
-  * [[VUID-VkSubpassDescriptionDepthStencilResolve-pDepthStencilResolveAttachment-03185]]
-    If the elink:VkFormat of pname:pDepthStencilResolveAttachment has both
-    depth and stencil components,
-    slink:VkPhysicalDeviceDepthStencilResolveProperties::pname:independentResolve
-    is ename:VK_FALSE, and
-    slink:VkPhysicalDeviceDepthStencilResolveProperties::pname:independentResolveNone
-    is ename:VK_FALSE, then the values of pname:depthResolveMode and
-    pname:stencilResolveMode must: be identical
-  * [[VUID-VkSubpassDescriptionDepthStencilResolve-pDepthStencilResolveAttachment-03186]]
-    If the elink:VkFormat of pname:pDepthStencilResolveAttachment has both
-    depth and stencil components,
-    slink:VkPhysicalDeviceDepthStencilResolveProperties::pname:independentResolve
-    is ename:VK_FALSE and
-    slink:VkPhysicalDeviceDepthStencilResolveProperties::pname:independentResolveNone
-    is ename:VK_TRUE, then the values of pname:depthResolveMode and
-    pname:stencilResolveMode must: be identical or one of them must: be
-    ename:VK_RESOLVE_MODE_NONE
-  * [[VUID-VkSubpassDescriptionDepthStencilResolve-pDepthStencilResolveAttachment-04588]]
-    If the elink:VkFormat of pname:pDepthStencilResolveAttachment has a
-    depth component, pname:depthResolveMode must: be a valid
-    elink:VkResolveModeFlagBits value
-  * [[VUID-VkSubpassDescriptionDepthStencilResolve-pDepthStencilResolveAttachment-04589]]
-    If the elink:VkFormat of pname:pDepthStencilResolveAttachment has a
-    stencil component, pname:stencilResolveMode must: be a valid
-    elink:VkResolveModeFlagBits value
-****
-
-include::{generated}/validity/structs/VkSubpassDescriptionDepthStencilResolve.txt[]
---
-
-[open,refpage='VkResolveModeFlagBits',desc='Bitmask indicating supported depth and stencil resolve modes',type='enums',alias='VkResolveModeFlagBitsKHR']
---
-Possible values of
-slink:VkSubpassDescriptionDepthStencilResolve::pname:depthResolveMode and
-pname:stencilResolveMode, specifying the depth and stencil resolve modes,
-are:
-
-include::{generated}/api/enums/VkResolveModeFlagBits.txt[]
-
-ifdef::VK_KHR_depth_stencil_resolve[]
-or the equivalent
-
-include::{generated}/api/enums/VkResolveModeFlagBitsKHR.txt[]
-endif::VK_KHR_depth_stencil_resolve[]
-
-  * ename:VK_RESOLVE_MODE_NONE indicates that no resolve operation is done.
-  * ename:VK_RESOLVE_MODE_SAMPLE_ZERO_BIT indicates that result of the
-    resolve operation is equal to the value of sample 0.
-  * ename:VK_RESOLVE_MODE_AVERAGE_BIT indicates that result of the resolve
-    operation is the average of the sample values.
-  * ename:VK_RESOLVE_MODE_MIN_BIT indicates that result of the resolve
-    operation is the minimum of the sample values.
-  * ename:VK_RESOLVE_MODE_MAX_BIT indicates that result of the resolve
-    operation is the maximum of the sample values.
---
-
-[open,refpage='VkResolveModeFlags',desc='Bitmask of VkResolveModeFlagBits',type='flags',alias='VkResolveModeFlagsKHR']
---
-include::{generated}/api/flags/VkResolveModeFlags.txt[]
-
-ifdef::VK_KHR_depth_stencil_resolve[]
-or the equivalent
-
-include::{generated}/api/flags/VkResolveModeFlagsKHR.txt[]
-endif::VK_KHR_depth_stencil_resolve[]
-
-tname:VkResolveModeFlags is a bitmask type for setting a mask of zero or
-more elink:VkResolveModeFlagBits.
---
-endif::VK_VERSION_1_2,VK_KHR_depth_stencil_resolve[]
-
-
-ifdef::VK_KHR_fragment_shading_rate[]
-[open,refpage='VkFragmentShadingRateAttachmentInfoKHR',desc='Structure specifying a fragment shading rate attachment for a subpass',type='structs']
---
-The sname:VkFragmentShadingRateAttachmentInfoKHR structure is defined as:
-
-include::{generated}/api/structs/VkFragmentShadingRateAttachmentInfoKHR.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:pFragmentShadingRateAttachment is `NULL` or a pointer to a
-    slink:VkAttachmentReference2 structure defining the fragment shading
-    rate attachment for this subpass.
-  * pname:shadingRateAttachmentTexelSize specifies the size of the portion
-    of the framebuffer corresponding to each texel in
-    pname:pFragmentShadingRateAttachment.
-
-If no shading rate attachment is specified, or if this structure is not
-specified, the implementation behaves as if a valid shading rate attachment
-was specified with all texels specifying a single pixel per fragment.
-
-.Valid Usage
-****
-  * [[VUID-VkFragmentShadingRateAttachmentInfoKHR-pFragmentShadingRateAttachment-04524]]
-    If pname:pFragmentShadingRateAttachment is not `NULL` and its
-    pname:attachment member is not ename:VK_ATTACHMENT_UNUSED, its
-    pname:layout member must: be equal to ename:VK_IMAGE_LAYOUT_GENERAL or
-    ename:VK_IMAGE_LAYOUT_FRAGMENT_SHADING_RATE_ATTACHMENT_OPTIMAL_KHR
-  * [[VUID-VkFragmentShadingRateAttachmentInfoKHR-pFragmentShadingRateAttachment-04525]]
-    If pname:pFragmentShadingRateAttachment is not `NULL` and its
-    pname:attachment member is not ename:VK_ATTACHMENT_UNUSED,
-    pname:shadingRateAttachmentTexelSize.width must: be a power of two value
-  * [[VUID-VkFragmentShadingRateAttachmentInfoKHR-pFragmentShadingRateAttachment-04526]]
-    If pname:pFragmentShadingRateAttachment is not `NULL` and its
-    pname:attachment member is not ename:VK_ATTACHMENT_UNUSED,
-    pname:shadingRateAttachmentTexelSize.width must: be less than or equal
-    to <<limits-maxFragmentShadingRateAttachmentTexelSize,
-    pname:maxFragmentShadingRateAttachmentTexelSize.width>>
-  * [[VUID-VkFragmentShadingRateAttachmentInfoKHR-pFragmentShadingRateAttachment-04527]]
-    If pname:pFragmentShadingRateAttachment is not `NULL` and its
-    pname:attachment member is not ename:VK_ATTACHMENT_UNUSED,
-    pname:shadingRateAttachmentTexelSize.width must: be greater than or
-    equal to <<limits-minFragmentShadingRateAttachmentTexelSize,
-    pname:minFragmentShadingRateAttachmentTexelSize.width>>
-  * [[VUID-VkFragmentShadingRateAttachmentInfoKHR-pFragmentShadingRateAttachment-04528]]
-    If pname:pFragmentShadingRateAttachment is not `NULL` and its
-    pname:attachment member is not ename:VK_ATTACHMENT_UNUSED,
-    pname:shadingRateAttachmentTexelSize.height must: be a power of two
-    value
-  * [[VUID-VkFragmentShadingRateAttachmentInfoKHR-pFragmentShadingRateAttachment-04529]]
-    If pname:pFragmentShadingRateAttachment is not `NULL` and its
-    pname:attachment member is not ename:VK_ATTACHMENT_UNUSED,
-    pname:shadingRateAttachmentTexelSize.height must: be less than or equal
-    to <<limits-maxFragmentShadingRateAttachmentTexelSize,
-    pname:maxFragmentShadingRateAttachmentTexelSize.height>>
-  * [[VUID-VkFragmentShadingRateAttachmentInfoKHR-pFragmentShadingRateAttachment-04530]]
-    If pname:pFragmentShadingRateAttachment is not `NULL` and its
-    pname:attachment member is not ename:VK_ATTACHMENT_UNUSED,
-    pname:shadingRateAttachmentTexelSize.height must: be greater than or
-    equal to <<limits-minFragmentShadingRateAttachmentTexelSize,
-    pname:minFragmentShadingRateAttachmentTexelSize.height>>
-  * [[VUID-VkFragmentShadingRateAttachmentInfoKHR-pFragmentShadingRateAttachment-04531]]
-    If pname:pFragmentShadingRateAttachment is not `NULL` and its
-    pname:attachment member is not ename:VK_ATTACHMENT_UNUSED, the quotient
-    of pname:shadingRateAttachmentTexelSize.width and
-    pname:shadingRateAttachmentTexelSize.height must: be less than or equal
-    to <<limits-maxFragmentShadingRateAttachmentTexelSizeAspectRatio,
-    pname:maxFragmentShadingRateAttachmentTexelSizeAspectRatio>>
-  * [[VUID-VkFragmentShadingRateAttachmentInfoKHR-pFragmentShadingRateAttachment-04532]]
-    If pname:pFragmentShadingRateAttachment is not `NULL` and its
-    pname:attachment member is not ename:VK_ATTACHMENT_UNUSED, the quotient
-    of pname:shadingRateAttachmentTexelSize.height and
-    pname:shadingRateAttachmentTexelSize.width must: be less than or equal
-    to <<limits-maxFragmentShadingRateAttachmentTexelSizeAspectRatio,
-    pname:maxFragmentShadingRateAttachmentTexelSizeAspectRatio>>
-****
-
-include::{generated}/validity/structs/VkFragmentShadingRateAttachmentInfoKHR.txt[]
---
-endif::VK_KHR_fragment_shading_rate[]
-
-[open,refpage='VkAttachmentReference2',desc='Structure specifying an attachment reference',type='structs',alias='VkAttachmentReference2KHR']
---
-The sname:VkAttachmentReference2 structure is defined as:
-
-include::{generated}/api/structs/VkAttachmentReference2.txt[]
-
-ifdef::VK_KHR_create_renderpass2[]
-or the equivalent
-
-include::{generated}/api/structs/VkAttachmentReference2KHR.txt[]
-endif::VK_KHR_create_renderpass2[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:attachment is either an integer value identifying an attachment at
-    the corresponding index in
-    slink:VkRenderPassCreateInfo2::pname:pAttachments, or
-    ename:VK_ATTACHMENT_UNUSED to signify that this attachment is not used.
-  * pname:layout is a elink:VkImageLayout value specifying the layout the
-    attachment uses during the subpass.
-  * pname:aspectMask is a mask of which aspect(s) can: be accessed within
-    the specified subpass as an input attachment.
-
-Parameters defined by this structure with the same name as those in
-slink:VkAttachmentReference have the identical effect to those parameters.
-
-pname:aspectMask is ignored when this structure is used to describe anything
-other than an input attachment reference.
-
-ifdef::VK_VERSION_1_2,VK_KHR_separate_depth_stencil_layouts[]
-If the <<features-separateDepthStencilLayouts,
-pname:separateDepthStencilLayouts>> feature is enabled, and pname:attachment
-has a depth/stencil format, pname:layout can: be set to a layout that only
-specifies the layout of the depth aspect.
-
-If pname:layout only specifies the layout of the depth aspect of the
-attachment, the layout of the stencil aspect is specified by the
-pname:stencilLayout member of a slink:VkAttachmentReferenceStencilLayout
-structure included in the pname:pNext chain.
-Otherwise, pname:layout describes the layout for all relevant image aspects.
-endif::VK_VERSION_1_2,VK_KHR_separate_depth_stencil_layouts[]
-
-.Valid Usage
-****
-  * [[VUID-VkAttachmentReference2-layout-03077]]
-    If pname:attachment is not ename:VK_ATTACHMENT_UNUSED, pname:layout
-    must: not be ename:VK_IMAGE_LAYOUT_UNDEFINED,
-    ename:VK_IMAGE_LAYOUT_PREINITIALIZED, or
-    ename:VK_IMAGE_LAYOUT_PRESENT_SRC_KHR
-ifdef::VK_VERSION_1_2,VK_KHR_separate_depth_stencil_layouts[]
-  * [[VUID-VkAttachmentReference2-separateDepthStencilLayouts-03313]]
-    If the <<features-separateDepthStencilLayouts,
-    pname:separateDepthStencilLayouts>> feature is not enabled, and
-    pname:attachment is not ename:VK_ATTACHMENT_UNUSED, pname:layout must:
-    not be ename:VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL,
-    ename:VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL,
-    ename:VK_IMAGE_LAYOUT_STENCIL_ATTACHMENT_OPTIMAL, or
-    ename:VK_IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL,
-  * [[VUID-VkAttachmentReference2-attachment-04754]]
-    If pname:attachment is not ename:VK_ATTACHMENT_UNUSED, and the format of
-    the referenced attachment is a color format, pname:layout must: not be
-    ename:VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL,
-    ename:VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL,
-    ename:VK_IMAGE_LAYOUT_STENCIL_ATTACHMENT_OPTIMAL or
-    ename:VK_IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL
-  * [[VUID-VkAttachmentReference2-attachment-04755]]
-    If pname:attachment is not ename:VK_ATTACHMENT_UNUSED, and the format of
-    the referenced attachment is a depth/stencil format which includes both
-    depth and stencil aspects, and pname:layout is
-    ename:VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL or
-    ename:VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL, the pname:pNext chain
-    must: include a slink:VkAttachmentReferenceStencilLayout structure
-  * [[VUID-VkAttachmentReference2-attachment-04756]]
-    If pname:attachment is not ename:VK_ATTACHMENT_UNUSED, and the format of
-    the referenced attachment is a depth/stencil format which includes only
-    the depth aspect, pname:layout must: not be
-    ename:VK_IMAGE_LAYOUT_STENCIL_ATTACHMENT_OPTIMAL or
-    ename:VK_IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL
-  * [[VUID-VkAttachmentReference2-attachment-04757]]
-    If pname:attachment is not ename:VK_ATTACHMENT_UNUSED, and the format of
-    the referenced attachment is a depth/stencil format which includes only
-    the stencil aspect, pname:layout must: not be
-    ename:VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL or
-    ename:VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL
-endif::VK_VERSION_1_2,VK_KHR_separate_depth_stencil_layouts[]
-****
-
-include::{generated}/validity/structs/VkAttachmentReference2.txt[]
---
-
-ifdef::VK_VERSION_1_2,VK_KHR_separate_depth_stencil_layouts[]
-[open,refpage='VkAttachmentReferenceStencilLayout',desc='Structure specifying an attachment description',type='structs',alias='VkAttachmentReferenceStencilLayoutKHR']
---
-The sname:VkAttachmentReferenceStencilLayout structure is defined as:
-
-include::{generated}/api/structs/VkAttachmentReferenceStencilLayout.txt[]
-
-ifdef::VK_KHR_separate_depth_stencil_layouts[]
-or the equivalent
-
-include::{generated}/api/structs/VkAttachmentReferenceStencilLayoutKHR.txt[]
-endif::VK_KHR_separate_depth_stencil_layouts[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:stencilLayout is a elink:VkImageLayout value specifying the layout
-    the stencil aspect of the attachment uses during the subpass.
-
-.Valid Usage
-****
-  * [[VUID-VkAttachmentReferenceStencilLayout-stencilLayout-03318]]
-    pname:stencilLayout must: not be ename:VK_IMAGE_LAYOUT_UNDEFINED,
-    ename:VK_IMAGE_LAYOUT_PREINITIALIZED,
-    ename:VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL,
-    ename:VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL,
-    ename:VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL,
-    ename:VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL,
-    ename:VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL,
-    ename:VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_OPTIMAL,
-    ename:VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_OPTIMAL, or
-    ename:VK_IMAGE_LAYOUT_PRESENT_SRC_KHR
-****
-
-include::{generated}/validity/structs/VkAttachmentReferenceStencilLayout.txt[]
---
-endif::VK_VERSION_1_2,VK_KHR_separate_depth_stencil_layouts[]
-
-[open,refpage='VkSubpassDependency2',desc='Structure specifying a subpass dependency',type='structs',alias='VkSubpassDependency2KHR']
---
-The sname:VkSubpassDependency2 structure is defined as:
-
-include::{generated}/api/structs/VkSubpassDependency2.txt[]
-
-ifdef::VK_KHR_create_renderpass2[]
-or the equivalent
-
-include::{generated}/api/structs/VkSubpassDependency2KHR.txt[]
-endif::VK_KHR_create_renderpass2[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:srcSubpass is the subpass index of the first subpass in the
-    dependency, or ename:VK_SUBPASS_EXTERNAL.
-  * pname:dstSubpass is the subpass index of the second subpass in the
-    dependency, or ename:VK_SUBPASS_EXTERNAL.
-  * pname:srcStageMask is a bitmask of elink:VkPipelineStageFlagBits
-    specifying the <<synchronization-pipeline-stages-masks, source stage
-    mask>>.
-  * pname:dstStageMask is a bitmask of elink:VkPipelineStageFlagBits
-    specifying the <<synchronization-pipeline-stages-masks, destination
-    stage mask>>
-  * pname:srcAccessMask is a bitmask of elink:VkAccessFlagBits specifying a
-    <<synchronization-access-masks, source access mask>>.
-  * pname:dstAccessMask is a bitmask of elink:VkAccessFlagBits specifying a
-    <<synchronization-access-masks, destination access mask>>.
-  * pname:dependencyFlags is a bitmask of elink:VkDependencyFlagBits.
-  * pname:viewOffset controls which views in the source subpass the views in
-    the destination subpass depend on.
-
-Parameters defined by this structure with the same name as those in
-slink:VkSubpassDependency have the identical effect to those parameters.
-
-pname:viewOffset has the same effect for the described subpass dependency as
-slink:VkRenderPassMultiviewCreateInfo::pname:pViewOffsets has on each
-corresponding subpass dependency.
-
-ifdef::VK_KHR_synchronization2[]
-If a slink:VkMemoryBarrier2KHR structure is included in the pname:pNext
-chain, pname:srcStageMask, pname:dstStageMask, pname:srcAccessMask, and
-pname:dstAccessMask parameters are ignored.
-The synchronization and access scopes instead are defined by the parameters
-of slink:VkMemoryBarrier2KHR.
-endif::VK_KHR_synchronization2[]
-
-.Valid Usage
-****
-  * [[VUID-VkSubpassDependency2-srcStageMask-03080]]
-    If the <<features-geometryShader,geometry shaders>> feature is not
-    enabled, pname:srcStageMask must: not contain
-    ename:VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT
-  * [[VUID-VkSubpassDependency2-dstStageMask-03081]]
-    If the <<features-geometryShader,geometry shaders>> feature is not
-    enabled, pname:dstStageMask must: not contain
-    ename:VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT
-  * [[VUID-VkSubpassDependency2-srcStageMask-03082]]
-    If the <<features-tessellationShader,tessellation shaders>> feature is
-    not enabled, pname:srcStageMask must: not contain
-    ename:VK_PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT or
-    ename:VK_PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT
-  * [[VUID-VkSubpassDependency2-dstStageMask-03083]]
-    If the <<features-tessellationShader,tessellation shaders>> feature is
-    not enabled, pname:dstStageMask must: not contain
-    ename:VK_PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT or
-    ename:VK_PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT
-  * [[VUID-VkSubpassDependency2-srcSubpass-03084]]
-    pname:srcSubpass must: be less than or equal to pname:dstSubpass, unless
-    one of them is ename:VK_SUBPASS_EXTERNAL, to avoid cyclic dependencies
-    and ensure a valid execution order
-  * [[VUID-VkSubpassDependency2-srcSubpass-03085]]
-    pname:srcSubpass and pname:dstSubpass must: not both be equal to
-    ename:VK_SUBPASS_EXTERNAL
-  * [[VUID-VkSubpassDependency2-srcSubpass-03087]]
-    If pname:srcSubpass is equal to pname:dstSubpass and not all of the
-    stages in pname:srcStageMask and pname:dstStageMask are
-    <<synchronization-framebuffer-regions,framebuffer-space stages>>, the
-    <<synchronization-pipeline-stages-order, logically latest>> pipeline
-    stage in pname:srcStageMask must: be
-    <<synchronization-pipeline-stages-order, logically earlier>> than or
-    equal to the <<synchronization-pipeline-stages-order, logically
-    earliest>> pipeline stage in pname:dstStageMask
-  * [[VUID-VkSubpassDependency2-srcAccessMask-03088]]
-    Any access flag included in pname:srcAccessMask must: be supported by
-    one of the pipeline stages in pname:srcStageMask, as specified in the
-    <<synchronization-access-types-supported, table of supported access
-    types>>
-  * [[VUID-VkSubpassDependency2-dstAccessMask-03089]]
-    Any access flag included in pname:dstAccessMask must: be supported by
-    one of the pipeline stages in pname:dstStageMask, as specified in the
-    <<synchronization-access-types-supported, table of supported access
-    types>>
-  * [[VUID-VkSubpassDependency2-dependencyFlags-03090]]
-    If pname:dependencyFlags includes ename:VK_DEPENDENCY_VIEW_LOCAL_BIT,
-    pname:srcSubpass must: not be equal to ename:VK_SUBPASS_EXTERNAL
-  * [[VUID-VkSubpassDependency2-dependencyFlags-03091]]
-    If pname:dependencyFlags includes ename:VK_DEPENDENCY_VIEW_LOCAL_BIT,
-    pname:dstSubpass must: not be equal to ename:VK_SUBPASS_EXTERNAL
-  * [[VUID-VkSubpassDependency2-srcSubpass-02245]]
-    If pname:srcSubpass equals pname:dstSubpass, and pname:srcStageMask and
-    pname:dstStageMask both include a
-    <<synchronization-framebuffer-regions,framebuffer-space stage>>, then
-    pname:dependencyFlags must: include ename:VK_DEPENDENCY_BY_REGION_BIT
-  * [[VUID-VkSubpassDependency2-viewOffset-02530]]
-    If pname:viewOffset is not equal to `0`, pname:srcSubpass must: not be
-    equal to pname:dstSubpass
-  * [[VUID-VkSubpassDependency2-dependencyFlags-03092]]
-    If pname:dependencyFlags does not include
-    ename:VK_DEPENDENCY_VIEW_LOCAL_BIT, pname:viewOffset must: be `0`
-ifdef::VK_NV_mesh_shader[]
-  * [[VUID-VkSubpassDependency2-srcStageMask-02103]]
-    If the <<features-meshShader,mesh shaders>> feature is not enabled,
-    pname:srcStageMask must: not contain
-    ename:VK_PIPELINE_STAGE_MESH_SHADER_BIT_NV
-  * [[VUID-VkSubpassDependency2-srcStageMask-02104]]
-    If the <<features-taskShader,task shaders>> feature is not enabled,
-    pname:srcStageMask must: not contain
-    ename:VK_PIPELINE_STAGE_TASK_SHADER_BIT_NV
-  * [[VUID-VkSubpassDependency2-dstStageMask-02105]]
-    If the <<features-meshShader,mesh shaders>> feature is not enabled,
-    pname:dstStageMask must: not contain
-    ename:VK_PIPELINE_STAGE_MESH_SHADER_BIT_NV
-  * [[VUID-VkSubpassDependency2-dstStageMask-02106]]
-    If the <<features-taskShader,task shaders>> feature is not enabled,
-    pname:dstStageMask must: not contain
-    ename:VK_PIPELINE_STAGE_TASK_SHADER_BIT_NV
-endif::VK_NV_mesh_shader[]
-ifdef::VK_KHR_synchronization2[]
-  * [[VUID-VkSubpassDependency2-synchronization2-04988]]
-    If the <<features-synchronization2, pname:synchronization2>> feature is
-    not enabled, pname:srcStageMask must: not be `0`
-  * [[VUID-VkSubpassDependency2-synchronization2-04989]]
-    If the <<features-synchronization2, pname:synchronization2>> feature is
-    not enabled, pname:dstStageMask must: not be `0`
-endif::VK_KHR_synchronization2[]
-ifndef::VK_KHR_synchronization2[]
-  * [[VUID-VkSubpassDependency2-srcStageMask-04990]]
-    pname:srcStageMask must: not be `0`
-  * [[VUID-VkSubpassDependency2-dstStageMask-04991]]
-    pname:dstStageMask must: not be `0`
-endif::VK_KHR_synchronization2[]
-****
-
-include::{generated}/validity/structs/VkSubpassDependency2.txt[]
---
-endif::VK_VERSION_1_2,VK_KHR_create_renderpass2[]
-
-[open,refpage='vkDestroyRenderPass',desc='Destroy a render pass object',type='protos']
---
-To destroy a render pass, call:
-
-include::{generated}/api/protos/vkDestroyRenderPass.txt[]
-
-  * pname:device is the logical device that destroys the render pass.
-  * pname:renderPass is the handle of the render pass to destroy.
-  * pname:pAllocator controls host memory allocation as described in the
-    <<memory-allocation, Memory Allocation>> chapter.
-
-.Valid Usage
-****
-  * [[VUID-vkDestroyRenderPass-renderPass-00873]]
-    All submitted commands that refer to pname:renderPass must: have
-    completed execution
-  * [[VUID-vkDestroyRenderPass-renderPass-00874]]
-    If sname:VkAllocationCallbacks were provided when pname:renderPass was
-    created, a compatible set of callbacks must: be provided here
-  * [[VUID-vkDestroyRenderPass-renderPass-00875]]
-    If no sname:VkAllocationCallbacks were provided when pname:renderPass
-    was created, pname:pAllocator must: be `NULL`
-****
-
-include::{generated}/validity/protos/vkDestroyRenderPass.txt[]
---
-
-
-[[renderpass-compatibility]]
-== Render Pass Compatibility
-
-Framebuffers and graphics pipelines are created based on a specific render
-pass object.
-They must: only be used with that render pass object, or one compatible with
-it.
-
-Two attachment references are compatible if they have matching format and
-sample count, or are both ename:VK_ATTACHMENT_UNUSED or the pointer that
-would contain the reference is `NULL`.
-
-Two arrays of attachment references are compatible if all corresponding
-pairs of attachments are compatible.
-If the arrays are of different lengths, attachment references not present in
-the smaller array are treated as ename:VK_ATTACHMENT_UNUSED.
-
-Two render passes are compatible if their corresponding color, input,
-resolve, and depth/stencil attachment references are compatible and if they
-are otherwise identical except for:
-
-  * Initial and final image layout in attachment descriptions
-  * Load and store operations in attachment descriptions
-  * Image layout in attachment references
-
-As an additional special case, if two render passes have a single subpass,
-the resolve attachment reference
-ifdef::VK_KHR_depth_stencil_resolve[]
-and depth/stencil resolve mode
-endif::VK_KHR_depth_stencil_resolve[]
-compatibility requirements are ignored.
-
-A framebuffer is compatible with a render pass if it was created using the
-same render pass or a compatible render pass.
-
-
-== Framebuffers
-
-[open,refpage='VkFramebuffer',desc='Opaque handle to a framebuffer object',type='handles']
---
-Render passes operate in conjunction with _framebuffers_.
-Framebuffers represent a collection of specific memory attachments that a
-render pass instance uses.
-
-Framebuffers are represented by sname:VkFramebuffer handles:
-
-include::{generated}/api/handles/VkFramebuffer.txt[]
---
-
-[open,refpage='vkCreateFramebuffer',desc='Create a new framebuffer object',type='protos']
---
-To create a framebuffer, call:
-
-include::{generated}/api/protos/vkCreateFramebuffer.txt[]
-
-  * pname:device is the logical device that creates the framebuffer.
-  * pname:pCreateInfo is a pointer to a slink:VkFramebufferCreateInfo
-    structure describing additional information about framebuffer creation.
-  * pname:pAllocator controls host memory allocation as described in the
-    <<memory-allocation, Memory Allocation>> chapter.
-  * pname:pFramebuffer is a pointer to a slink:VkFramebuffer handle in which
-    the resulting framebuffer object is returned.
-
-.Valid Usage
-****
-  * [[VUID-vkCreateFramebuffer-pCreateInfo-02777]]
-    If pname:pCreateInfo->flags does not include
-    ename:VK_FRAMEBUFFER_CREATE_IMAGELESS_BIT, and pname:attachmentCount is
-    not `0`, each element of pname:pCreateInfo->pAttachments must: have been
-    created on pname:device
-****
-
-include::{generated}/validity/protos/vkCreateFramebuffer.txt[]
---
-
-[open,refpage='VkFramebufferCreateInfo',desc='Structure specifying parameters of a newly created framebuffer',type='structs']
---
-The sname:VkFramebufferCreateInfo structure is defined as:
-
-include::{generated}/api/structs/VkFramebufferCreateInfo.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:flags is a bitmask of elink:VkFramebufferCreateFlagBits
-  * pname:renderPass is a render pass defining what render passes the
-    framebuffer will be compatible with.
-    See <<renderpass-compatibility,Render Pass Compatibility>> for details.
-  * pname:attachmentCount is the number of attachments.
-  * pname:pAttachments is a pointer to an array of slink:VkImageView
-    handles, each of which will be used as the corresponding attachment in a
-    render pass instance.
-ifdef::VK_VERSION_1_2,VK_KHR_imageless_framebuffer[]
-    If pname:flags includes ename:VK_FRAMEBUFFER_CREATE_IMAGELESS_BIT, this
-    parameter is ignored.
-endif::VK_VERSION_1_2,VK_KHR_imageless_framebuffer[]
-  * pname:width, pname:height and pname:layers define the dimensions of the
-    framebuffer.
-ifdef::VK_VERSION_1_1,VK_KHR_multiview[]
-    If the render pass uses multiview, then pname:layers must: be one and
-    each attachment requires a number of layers that is greater than the
-    maximum bit index set in the view mask in the subpasses in which it is
-    used.
-endif::VK_VERSION_1_1,VK_KHR_multiview[]
-
-Other than the exceptions listed below, applications must: ensure that all
-accesses to memory that backs image subresources used as attachments in a
-given render pass instance either happen-before the
-<<renderpass-load-store-ops, load operations>> for those attachments, or
-happen-after the <<renderpass-load-store-ops, store operations>> for those
-attachments.
-
-[[renderpass-attachment-nonattachment]]
-The exceptions to the general rule are:
-
-  * For depth/stencil attachments, an aspect can: be used separately as
-    attachment and non-attachment if both accesses are read-only.
-ifdef::VK_VERSION_1_1,VK_KHR_maintenance2[]
-  * For depth/stencil attachments, each aspect can: be used separately as
-    attachment and non-attachment as long as the non-attachment accesses are
-    also via an image subresource in either the
-    ename:VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_OPTIMAL layout
-    or the ename:VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_OPTIMAL
-    layout, and the attachment resource uses whichever of those two layouts
-    the image accesses do not.
-endif::VK_VERSION_1_1,VK_KHR_maintenance2[]
-
-Use of non-attachment aspects in these cases is only well defined if the
-attachment is used in the subpass where the non-attachment access is being
-made, or the layout of the image subresource is constant throughout the
-entire render pass instance, including the pname:initialLayout and
-pname:finalLayout.
-
-[NOTE]
-.Note
-====
-ifndef::VK_VERSION_1_1,VK_KHR_maintenance2[]
-This restriction means
-endif::VK_VERSION_1_1,VK_KHR_maintenance2[]
-ifdef::VK_VERSION_1_1,VK_KHR_maintenance2[]
-These restrictions mean
-endif::VK_VERSION_1_1,VK_KHR_maintenance2[]
-that the render pass has full knowledge of all uses of all of the
-attachments, so that the implementation is able to make correct decisions
-about when and how to perform layout transitions, when to overlap execution
-of subpasses, etc.
-====
-
-[[renderpass-noattachments]]
-It is legal for a subpass to use no color or depth/stencil attachments,
-either because it has no attachment references or because all of them are
-ename:VK_ATTACHMENT_UNUSED.
-This kind of subpass can: use shader side effects such as image stores and
-atomics to produce an output.
-In this case, the subpass continues to use the pname:width, pname:height,
-and pname:layers of the framebuffer to define the dimensions of the
-rendering area, and the pname:rasterizationSamples from each pipeline's
-slink:VkPipelineMultisampleStateCreateInfo to define the number of samples
-used in rasterization; however, if
-slink:VkPhysicalDeviceFeatures::pname:variableMultisampleRate is
-ename:VK_FALSE, then all pipelines to be bound with the subpass must: have
-the same value for
-slink:VkPipelineMultisampleStateCreateInfo::pname:rasterizationSamples.
-
-.Valid Usage
-****
-  * [[VUID-VkFramebufferCreateInfo-attachmentCount-00876]]
-    If pname:renderpass is not dlink:VK_NULL_HANDLE, pname:attachmentCount
-    must: be equal to the attachment count specified in pname:renderPass
-  * [[VUID-VkFramebufferCreateInfo-flags-02778]]
-    If pname:renderpass is not dlink:VK_NULL_HANDLE, pname:flags does not
-    include ename:VK_FRAMEBUFFER_CREATE_IMAGELESS_BIT, and
-    pname:attachmentCount is not `0`, pname:pAttachments must: be a valid
-    pointer to an array of pname:attachmentCount valid slink:VkImageView
-    handles
-  * [[VUID-VkFramebufferCreateInfo-pAttachments-00877]]
-    If pname:renderpass is not dlink:VK_NULL_HANDLE and pname:flags does not
-    include ename:VK_FRAMEBUFFER_CREATE_IMAGELESS_BIT, each element of
-    pname:pAttachments that is used as a color attachment or resolve
-    attachment by pname:renderPass must: have been created with a
-    pname:usage value including ename:VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT
-  * [[VUID-VkFramebufferCreateInfo-pAttachments-02633]]
-    If pname:renderpass is not dlink:VK_NULL_HANDLE and pname:flags does not
-    include ename:VK_FRAMEBUFFER_CREATE_IMAGELESS_BIT, each element of
-    pname:pAttachments that is used as a depth/stencil attachment by
-    pname:renderPass must: have been created with a pname:usage value
-    including ename:VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT
-ifdef::VK_VERSION_1_2,VK_KHR_depth_stencil_resolve[]
-  * [[VUID-VkFramebufferCreateInfo-pAttachments-02634]]
-    If pname:renderpass is not dlink:VK_NULL_HANDLE and pname:flags does not
-    include ename:VK_FRAMEBUFFER_CREATE_IMAGELESS_BIT, each element of
-    pname:pAttachments that is used as a depth/stencil resolve attachment by
-    pname:renderPass must: have been created with a pname:usage value
-    including ename:VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT
-endif::VK_VERSION_1_2,VK_KHR_depth_stencil_resolve[]
-  * [[VUID-VkFramebufferCreateInfo-pAttachments-00879]]
-    If pname:renderpass is not dlink:VK_NULL_HANDLE and pname:renderpass is
-    not dlink:VK_NULL_HANDLE, pname:flags does not include
-    ename:VK_FRAMEBUFFER_CREATE_IMAGELESS_BIT, each element of
-    pname:pAttachments that is used as an input attachment by
-    pname:renderPass must: have been created with a pname:usage value
-    including ename:VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT
-ifdef::VK_EXT_fragment_density_map[]
-  * [[VUID-VkFramebufferCreateInfo-pAttachments-02552]]
-    If pname:renderpass is not dlink:VK_NULL_HANDLE, each element of
-    pname:pAttachments that is used as a fragment density map attachment by
-    pname:renderPass must: not have been created with a pname:flags value
-    including ename:VK_IMAGE_CREATE_SUBSAMPLED_BIT_EXT
-  * [[VUID-VkFramebufferCreateInfo-renderPass-02553]]
-    If pname:renderpass is not dlink:VK_NULL_HANDLE, pname:renderPass has a
-    fragment density map attachment, and
-    <<features-fragmentDensityMapNonSubsampledImages,non-subsample image
-    feature>> is not enabled, each element of pname:pAttachments must: have
-    been created with a pname:flags value including
-    ename:VK_IMAGE_CREATE_SUBSAMPLED_BIT_EXT unless that element is the
-    fragment density map attachment
-endif::VK_EXT_fragment_density_map[]
-  * [[VUID-VkFramebufferCreateInfo-pAttachments-00880]]
-    If pname:renderpass is not dlink:VK_NULL_HANDLE and pname:flags does not
-    include ename:VK_FRAMEBUFFER_CREATE_IMAGELESS_BIT, each element of
-    pname:pAttachments must: have been created with a elink:VkFormat value
-    that matches the elink:VkFormat specified by the corresponding
-    sname:VkAttachmentDescription in pname:renderPass
-  * [[VUID-VkFramebufferCreateInfo-pAttachments-00881]]
-    If pname:renderpass is not dlink:VK_NULL_HANDLE and pname:flags does not
-    include ename:VK_FRAMEBUFFER_CREATE_IMAGELESS_BIT, each element of
-    pname:pAttachments must: have been created with a pname:samples value
-    that matches the pname:samples value specified by the corresponding
-    sname:VkAttachmentDescription in pname:renderPass
-  * [[VUID-VkFramebufferCreateInfo-flags-04533]]
-    If pname:renderpass is not dlink:VK_NULL_HANDLE and pname:flags does not
-    include ename:VK_FRAMEBUFFER_CREATE_IMAGELESS_BIT, each element of
-    pname:pAttachments that is used as an input, color, resolve, or
-    depth/stencil attachment by pname:renderPass must: have been created
-    with a slink:VkImageCreateInfo::pname:width greater than or equal to
-    pname:width
-  * [[VUID-VkFramebufferCreateInfo-flags-04534]]
-    If pname:renderpass is not dlink:VK_NULL_HANDLE and pname:flags does not
-    include ename:VK_FRAMEBUFFER_CREATE_IMAGELESS_BIT, each element of
-    pname:pAttachments that is used as an input, color, resolve, or
-    depth/stencil attachment by pname:renderPass must: have been created
-    with a slink:VkImageCreateInfo::pname:height greater than or equal to
-    pname:height
-  * [[VUID-VkFramebufferCreateInfo-flags-04535]]
-    If pname:renderpass is not dlink:VK_NULL_HANDLE and pname:flags does not
-    include ename:VK_FRAMEBUFFER_CREATE_IMAGELESS_BIT, each element of
-    pname:pAttachments that is used as an input, color, resolve, or
-    depth/stencil attachment by pname:renderPass must: have been created
-    with a slink:VkImageViewCreateInfo::pname:subresourceRange.layerCount
-    greater than or equal to pname:layers
-ifdef::VK_VERSION_1_1,VK_KHR_multiview[]
-  * [[VUID-VkFramebufferCreateInfo-renderPass-04536]]
-    If pname:renderpass is not dlink:VK_NULL_HANDLE and pname:renderPass was
-    specified with non-zero view masks, each element of pname:pAttachments
-    that is used as an input, color, resolve, or depth/stencil attachment by
-    pname:renderPass must: have a pname:layerCount greater than the index of
-    the most significant bit set in any of those view masks
-endif::VK_VERSION_1_1,VK_KHR_multiview[]
-ifdef::VK_EXT_fragment_density_map[]
-ifndef::VK_VERSION_1_1,VK_KHR_multiview[]
-  * [[VUID-VkFramebufferCreateInfo-pAttachments-02744]]
-    If pname:renderpass is not dlink:VK_NULL_HANDLE, an element of
-    pname:pAttachments that is referenced by
-    pname:fragmentDensityMapAttachment must: have a pname:layerCount equal
-    to `1`
-endif::VK_VERSION_1_1,VK_KHR_multiview[]
-ifdef::VK_VERSION_1_1,VK_KHR_multiview[]
-  * [[VUID-VkFramebufferCreateInfo-renderPass-02746]]
-    If pname:renderpass is not dlink:VK_NULL_HANDLE and pname:renderPass was
-    specified with non-zero view masks, each element of pname:pAttachments
-    that is referenced by pname:fragmentDensityMapAttachment must: have a
-    pname:layerCount equal to `1` or greater than the index of the most
-    significant bit set in any of those view masks
-  * [[VUID-VkFramebufferCreateInfo-renderPass-02747]]
-    If pname:renderpass is not dlink:VK_NULL_HANDLE and pname:renderPass was
-    not specified with non-zero view masks, each element of
-    pname:pAttachments that is referenced by
-    pname:fragmentDensityMapAttachment must: have a pname:layerCount equal
-    to `1`
-endif::VK_VERSION_1_1,VK_KHR_multiview[]
-  * [[VUID-VkFramebufferCreateInfo-pAttachments-02555]]
-    If pname:renderpass is not dlink:VK_NULL_HANDLE and pname:flags does not
-    include ename:VK_FRAMEBUFFER_CREATE_IMAGELESS_BIT, an element of
-    pname:pAttachments that is referenced by
-    pname:fragmentDensityMapAttachment must: have a width at least as large
-    as
-    latexmath:[\left\lceil{\frac{width}{maxFragmentDensityTexelSize_{width}}}\right\rceil]
-  * [[VUID-VkFramebufferCreateInfo-pAttachments-02556]]
-    If pname:renderpass is not dlink:VK_NULL_HANDLE and pname:flags does not
-    include ename:VK_FRAMEBUFFER_CREATE_IMAGELESS_BIT, an element of
-    pname:pAttachments that is referenced by
-    pname:fragmentDensityMapAttachment must: have a height at least as large
-    as
-    latexmath:[\left\lceil{\frac{height}{maxFragmentDensityTexelSize_{height}}}\right\rceil]
-endif::VK_EXT_fragment_density_map[]
-ifdef::VK_KHR_fragment_shading_rate[]
-ifdef::VK_VERSION_1_1,VK_KHR_multiview[]
-  * [[VUID-VkFramebufferCreateInfo-flags-04537]]
-    If pname:renderpass is not dlink:VK_NULL_HANDLE and pname:flags does not
-    include ename:VK_FRAMEBUFFER_CREATE_IMAGELESS_BIT, and pname:renderPass
-    was specified with non-zero view masks, each element of
-    pname:pAttachments that is used as a
-    <<primsrast-fragment-shading-rate-attachment,fragment shading rate
-    attachment>> by pname:renderPass must: have a pname:layerCount that is
-    either `1`, or greater than the index of the most significant bit set in
-    any of those view masks
-  * [[VUID-VkFramebufferCreateInfo-flags-04538]]
-    If pname:renderpass is not dlink:VK_NULL_HANDLE and pname:flags does not
-    include ename:VK_FRAMEBUFFER_CREATE_IMAGELESS_BIT, and pname:renderPass
-    was not specified with non-zero view masks, each element of
-    pname:pAttachments that is used as a
-    <<primsrast-fragment-shading-rate-attachment,fragment shading rate
-    attachment>> by pname:renderPass must: have a pname:layerCount that is
-    either `1`, or greater than pname:layers
-endif::VK_VERSION_1_1,VK_KHR_multiview[]
-  * [[VUID-VkFramebufferCreateInfo-flags-04539]]
-    If pname:renderpass is not dlink:VK_NULL_HANDLE and pname:flags does not
-    include ename:VK_FRAMEBUFFER_CREATE_IMAGELESS_BIT, an element of
-    pname:pAttachments that is used as a
-    <<primsrast-fragment-shading-rate-attachment, fragment shading rate
-    attachment>> must: have a width at least as large as
-    [eq]#{lceil}pname:width / code:texelWidth{rceil}#, where code:texelWidth
-    is the largest value of pname:shadingRateAttachmentTexelSize.width in a
-    slink:VkFragmentShadingRateAttachmentInfoKHR which references that
-    attachment
-  * [[VUID-VkFramebufferCreateInfo-flags-04540]]
-    If pname:renderpass is not dlink:VK_NULL_HANDLE and pname:flags does not
-    include ename:VK_FRAMEBUFFER_CREATE_IMAGELESS_BIT, an element of
-    pname:pAttachments that is used as a
-    <<primsrast-fragment-shading-rate-attachment, fragment shading rate
-    attachment>> must: have a height at least as large as
-    [eq]#{lceil}pname:height / code:texelHeight{rceil}#, where
-    code:texelHeight is the largest value of
-    pname:shadingRateAttachmentTexelSize.height in a
-    slink:VkFragmentShadingRateAttachmentInfoKHR which references that
-    attachment
-endif::VK_KHR_fragment_shading_rate[]
-  * [[VUID-VkFramebufferCreateInfo-pAttachments-00883]]
-    If pname:flags does not include
-    ename:VK_FRAMEBUFFER_CREATE_IMAGELESS_BIT, each element of
-    pname:pAttachments must: only specify a single mip level
-  * [[VUID-VkFramebufferCreateInfo-pAttachments-00884]]
-    If pname:flags does not include
-    ename:VK_FRAMEBUFFER_CREATE_IMAGELESS_BIT, each element of
-    pname:pAttachments must: have been created with the identity swizzle
-  * [[VUID-VkFramebufferCreateInfo-width-00885]]
-    pname:width must: be greater than `0`
-  * [[VUID-VkFramebufferCreateInfo-width-00886]]
-    pname:width must: be less than or equal to
-    <<limits-maxFramebufferWidth,pname:maxFramebufferWidth>>
-  * [[VUID-VkFramebufferCreateInfo-height-00887]]
-    pname:height must: be greater than `0`
-  * [[VUID-VkFramebufferCreateInfo-height-00888]]
-    pname:height must: be less than or equal to
-    <<limits-maxFramebufferHeight,pname:maxFramebufferHeight>>
-  * [[VUID-VkFramebufferCreateInfo-layers-00889]]
-    pname:layers must: be greater than `0`
-  * [[VUID-VkFramebufferCreateInfo-layers-00890]]
-    pname:layers must: be less than or equal to
-    <<limits-maxFramebufferLayers,pname:maxFramebufferLayers>>
-ifdef::VK_VERSION_1_1,VK_KHR_multiview[]
-  * [[VUID-VkFramebufferCreateInfo-renderPass-02531]]
-    If pname:renderpass is not dlink:VK_NULL_HANDLE and pname:renderPass was
-    specified with non-zero view masks, pname:layers must: be `1`
-endif::VK_VERSION_1_1,VK_KHR_multiview[]
-ifdef::VK_VERSION_1_1,VK_KHR_maintenance1[]
-  * [[VUID-VkFramebufferCreateInfo-pAttachments-00891]]
-    If pname:flags does not include
-    ename:VK_FRAMEBUFFER_CREATE_IMAGELESS_BIT, each element of
-    pname:pAttachments that is a 2D or 2D array image view taken from a 3D
-    image must: not be a depth/stencil format
-endif::VK_VERSION_1_1,VK_KHR_maintenance1[]
-ifdef::VK_VERSION_1_2,VK_KHR_imageless_framebuffer[]
-  * [[VUID-VkFramebufferCreateInfo-flags-03189]]
-    If the <<features-imagelessFramebuffer, imageless framebuffer>> feature
-    is not enabled, pname:flags must: not include
-    ename:VK_FRAMEBUFFER_CREATE_IMAGELESS_BIT
-  * [[VUID-VkFramebufferCreateInfo-flags-03190]]
-    If pname:flags includes ename:VK_FRAMEBUFFER_CREATE_IMAGELESS_BIT, the
-    pname:pNext chain must: include a
-    slink:VkFramebufferAttachmentsCreateInfo structure
-  * [[VUID-VkFramebufferCreateInfo-flags-03191]]
-    If pname:flags includes ename:VK_FRAMEBUFFER_CREATE_IMAGELESS_BIT, the
-    pname:attachmentImageInfoCount member of a
-    slink:VkFramebufferAttachmentsCreateInfo structure in the pname:pNext
-    chain must: be equal to either zero or pname:attachmentCount
-  * [[VUID-VkFramebufferCreateInfo-flags-04541]]
-    If pname:renderpass is not dlink:VK_NULL_HANDLE and pname:flags includes
-    ename:VK_FRAMEBUFFER_CREATE_IMAGELESS_BIT, the pname:width member of any
-    element of the pname:pAttachmentImageInfos member of a
-    slink:VkFramebufferAttachmentsCreateInfo structure in the pname:pNext
-    chain that is used as an input, color, resolve or depth/stencil
-    attachment in pname:renderPass must: be greater than or equal to
-    pname:width
-  * [[VUID-VkFramebufferCreateInfo-flags-04542]]
-    If pname:renderpass is not dlink:VK_NULL_HANDLE and pname:flags includes
-    ename:VK_FRAMEBUFFER_CREATE_IMAGELESS_BIT, the pname:height member of
-    any element of the pname:pAttachmentImageInfos member of a
-    slink:VkFramebufferAttachmentsCreateInfo structure in the pname:pNext
-    chain that is used as an input, color, resolve or depth/stencil
-    attachment in pname:renderPass must: be greater than or equal to
-    pname:height
-ifdef::VK_EXT_fragment_density_map[]
-  * [[VUID-VkFramebufferCreateInfo-flags-03196]]
-    If pname:renderpass is not dlink:VK_NULL_HANDLE and pname:flags includes
-    ename:VK_FRAMEBUFFER_CREATE_IMAGELESS_BIT, the pname:width member of any
-    element of the pname:pAttachmentImageInfos member of a
-    slink:VkFramebufferAttachmentsCreateInfo structure in the pname:pNext
-    chain that is referenced by
-    slink:VkRenderPassFragmentDensityMapCreateInfoEXT::pname:fragmentDensityMapAttachment
-    in pname:renderPass must: be greater than or equal to
-    latexmath:[\left\lceil{\frac{width}{maxFragmentDensityTexelSize_{width}}}\right\rceil]
-  * [[VUID-VkFramebufferCreateInfo-flags-03197]]
-    If pname:renderpass is not dlink:VK_NULL_HANDLE and pname:flags includes
-    ename:VK_FRAMEBUFFER_CREATE_IMAGELESS_BIT, the pname:height member of
-    any element of the pname:pAttachmentImageInfos member of a
-    slink:VkFramebufferAttachmentsCreateInfo structure included in the
-    pname:pNext chain that is referenced by
-    slink:VkRenderPassFragmentDensityMapCreateInfoEXT::pname:fragmentDensityMapAttachment
-    in pname:renderPass must: be greater than or equal to
-    latexmath:[\left\lceil{\frac{height}{maxFragmentDensityTexelSize_{height}}}\right\rceil]
-endif::VK_EXT_fragment_density_map[]
-ifdef::VK_KHR_fragment_shading_rate[]
-  * [[VUID-VkFramebufferCreateInfo-flags-04543]]
-    If pname:renderpass is not dlink:VK_NULL_HANDLE and pname:flags includes
-    ename:VK_FRAMEBUFFER_CREATE_IMAGELESS_BIT, the pname:width member of any
-    element of the pname:pAttachmentImageInfos member of a
-    slink:VkFramebufferAttachmentsCreateInfo structure in the pname:pNext
-    chain that is used as a <<primsrast-fragment-shading-rate-attachment,
-    fragment shading rate attachment>> must: be greater than or equal to
-    [eq]#{lceil}pname:width / code:texelWidth{rceil}#, where code:texelWidth
-    is the largest value of pname:shadingRateAttachmentTexelSize.width in a
-    slink:VkFragmentShadingRateAttachmentInfoKHR which references that
-    attachment
-  * [[VUID-VkFramebufferCreateInfo-flags-04544]]
-    If pname:renderpass is not dlink:VK_NULL_HANDLE and pname:flags includes
-    ename:VK_FRAMEBUFFER_CREATE_IMAGELESS_BIT, the pname:height member of
-    any element of the pname:pAttachmentImageInfos member of a
-    slink:VkFramebufferAttachmentsCreateInfo structure in the pname:pNext
-    chain that is used as a <<primsrast-fragment-shading-rate-attachment,
-    fragment shading rate attachment>> must: be greater than or equal to
-    [eq]#{lceil}pname:height / code:texelHeight{rceil}#, where
-    code:texelHeight is the largest value of
-    pname:shadingRateAttachmentTexelSize.height in a
-    slink:VkFragmentShadingRateAttachmentInfoKHR which references that
-    attachment
-  * [[VUID-VkFramebufferCreateInfo-flags-04545]]
-    If pname:renderpass is not dlink:VK_NULL_HANDLE and pname:flags includes
-    ename:VK_FRAMEBUFFER_CREATE_IMAGELESS_BIT, the pname:layerCount member
-    of any element of the pname:pAttachmentImageInfos member of a
-    slink:VkFramebufferAttachmentsCreateInfo structure in the pname:pNext
-    chain that is used as a <<primsrast-fragment-shading-rate-attachment,
-    fragment shading rate attachment>> must: be either `1`, or greater than
-    or equal to pname:layers
-  * [[VUID-VkFramebufferCreateInfo-flags-04587]]
-    If pname:renderpass is not dlink:VK_NULL_HANDLE, pname:flags includes
-    ename:VK_FRAMEBUFFER_CREATE_IMAGELESS_BIT, and pname:renderPass was
-    specified with non-zero view masks, each element of pname:pAttachments
-    that is used as a <<primsrast-fragment-shading-rate-attachment,fragment
-    shading rate attachment>> by pname:renderPass must: have a
-    pname:layerCount that is either `1`, or greater than the index of the
-    most significant bit set in any of those view masks
-endif::VK_KHR_fragment_shading_rate[]
-ifdef::VK_VERSION_1_1,VK_KHR_multiview[]
-  * [[VUID-VkFramebufferCreateInfo-renderPass-03198]]
-    If pname:renderpass is not dlink:VK_NULL_HANDLE, multiview is enabled
-    for pname:renderPass, and pname:flags includes
-    ename:VK_FRAMEBUFFER_CREATE_IMAGELESS_BIT, the pname:layerCount member
-    of any element of the pname:pAttachmentImageInfos member of a
-    slink:VkFramebufferAttachmentsCreateInfo structure included in the
-    pname:pNext chain used as an input, color, resolve, or depth/stencil
-    attachment in pname:renderPass must: be greater than the maximum bit
-    index set in the view mask in the subpasses in which it is used in
-    pname:renderPass
-  * [[VUID-VkFramebufferCreateInfo-renderPass-04546]]
-    If pname:renderpass is not dlink:VK_NULL_HANDLE, multiview is not
-    enabled for pname:renderPass, and pname:flags includes
-    ename:VK_FRAMEBUFFER_CREATE_IMAGELESS_BIT, the pname:layerCount member
-    of any element of the pname:pAttachmentImageInfos member of a
-    slink:VkFramebufferAttachmentsCreateInfo structure included in the
-    pname:pNext chain used as an input, color, resolve, or depth/stencil
-    attachment in pname:renderPass must: be greater than or equal to
-    pname:layers
-endif::VK_VERSION_1_1,VK_KHR_multiview[]
-ifndef::VK_VERSION_1_1+VK_KHR_multiview[]
-  * [[VUID-VkFramebufferCreateInfo-flags-04547]]
-    If pname:renderpass is not dlink:VK_NULL_HANDLE and pname:flags includes
-    ename:VK_FRAMEBUFFER_CREATE_IMAGELESS_BIT, the pname:layerCount member
-    of any element of the pname:pAttachmentImageInfos member of a
-    slink:VkFramebufferAttachmentsCreateInfo structure included in the
-    pname:pNext chain used as an input, color, resolve, or depth/stencil
-    attachment in pname:pRenderPass must: be greater than or equal to
-    pname:layers
-endif::VK_VERSION_1_1+VK_KHR_multiview[]
-  * [[VUID-VkFramebufferCreateInfo-flags-03201]]
-    If pname:renderpass is not dlink:VK_NULL_HANDLE and pname:flags includes
-    ename:VK_FRAMEBUFFER_CREATE_IMAGELESS_BIT, the pname:usage member of any
-    element of the pname:pAttachmentImageInfos member of a
-    slink:VkFramebufferAttachmentsCreateInfo structure included in the
-    pname:pNext chain that refers to an attachment used as a color
-    attachment or resolve attachment by pname:renderPass must: include
-    ename:VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT
-  * [[VUID-VkFramebufferCreateInfo-flags-03202]]
-    If pname:renderpass is not dlink:VK_NULL_HANDLE and pname:flags includes
-    ename:VK_FRAMEBUFFER_CREATE_IMAGELESS_BIT, the pname:usage member of any
-    element of the pname:pAttachmentImageInfos member of a
-    slink:VkFramebufferAttachmentsCreateInfo structure included in the
-    pname:pNext chain that refers to an attachment used as a depth/stencil
-    attachment by pname:renderPass must: include
-    ename:VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT
-ifdef::VK_KHR_depth_stencil_resolve[]
-  * [[VUID-VkFramebufferCreateInfo-flags-03203]]
-    If pname:renderpass is not dlink:VK_NULL_HANDLE and pname:flags includes
-    ename:VK_FRAMEBUFFER_CREATE_IMAGELESS_BIT, the pname:usage member of any
-    element of the pname:pAttachmentImageInfos member of a
-    slink:VkFramebufferAttachmentsCreateInfo structure included in the
-    pname:pNext chain that refers to an attachment used as a depth/stencil
-    resolve attachment by pname:renderPass must: include
-    ename:VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT
-endif::VK_KHR_depth_stencil_resolve[]
-  * [[VUID-VkFramebufferCreateInfo-flags-03204]]
-    If pname:renderpass is not dlink:VK_NULL_HANDLE and pname:flags includes
-    ename:VK_FRAMEBUFFER_CREATE_IMAGELESS_BIT, the pname:usage member of any
-    element of the pname:pAttachmentImageInfos member of a
-    slink:VkFramebufferAttachmentsCreateInfo structure included in the
-    pname:pNext chain that refers to an attachment used as an input
-    attachment by pname:renderPass must: include
-    ename:VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT
-  * [[VUID-VkFramebufferCreateInfo-flags-03205]]
-    If pname:renderpass is not dlink:VK_NULL_HANDLE and pname:flags includes
-    ename:VK_FRAMEBUFFER_CREATE_IMAGELESS_BIT, at least one element of the
-    pname:pViewFormats member of any element of the
-    pname:pAttachmentImageInfos member of a
-    slink:VkFramebufferAttachmentsCreateInfo structure included in the
-    pname:pNext chain must: be equal to the corresponding value of
-    slink:VkAttachmentDescription::pname:format used to create
-    pname:renderPass
-endif::VK_VERSION_1_2,VK_KHR_imageless_framebuffer[]
-  * [[VUID-VkFramebufferCreateInfo-flags-04113]]
-    If pname:flags does not include
-    ename:VK_FRAMEBUFFER_CREATE_IMAGELESS_BIT, each element of
-    pname:pAttachments must: have been created with
-    slink:VkImageViewCreateInfo::pname:viewType not equal to
-    ename:VK_IMAGE_VIEW_TYPE_3D
-ifdef::VK_KHR_fragment_shading_rate[]
-  * [[VUID-VkFramebufferCreateInfo-flags-04548]]
-    If pname:renderpass is not dlink:VK_NULL_HANDLE and pname:flags does not
-    include ename:VK_FRAMEBUFFER_CREATE_IMAGELESS_BIT, each element of
-    pname:pAttachments that is used as a fragment shading rate attachment by
-    pname:renderPass must: have been created with a pname:usage value
-    including ename:VK_IMAGE_USAGE_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR
-ifdef::VK_VERSION_1_2,VK_KHR_imageless_framebuffer[]
-  * [[VUID-VkFramebufferCreateInfo-flags-04549]]
-    If pname:renderpass is not dlink:VK_NULL_HANDLE and pname:flags includes
-    ename:VK_FRAMEBUFFER_CREATE_IMAGELESS_BIT, the pname:usage member of any
-    element of the pname:pAttachmentImageInfos member of a
-    slink:VkFramebufferAttachmentsCreateInfo structure included in the
-    pname:pNext chain that refers to an attachment used as a fragment
-    shading rate attachment by pname:renderPass must: include
-    ename:VK_IMAGE_USAGE_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR
-endif::VK_VERSION_1_2,VK_KHR_imageless_framebuffer[]
-endif::VK_KHR_fragment_shading_rate[]
-****
-
-include::{generated}/validity/structs/VkFramebufferCreateInfo.txt[]
---
-
-ifdef::VK_VERSION_1_2,VK_KHR_imageless_framebuffer[]
-[open,refpage='VkFramebufferAttachmentsCreateInfo',desc='Structure specifying parameters of images that will be used with a framebuffer',type='structs',alias='VkFramebufferAttachmentsCreateInfo']
---
-The sname:VkFramebufferAttachmentsCreateInfo structure is defined as:
-
-include::{generated}/api/structs/VkFramebufferAttachmentsCreateInfo.txt[]
-
-ifdef::VK_KHR_imageless_framebuffer[]
-or the equivalent
-
-include::{generated}/api/structs/VkFramebufferAttachmentsCreateInfoKHR.txt[]
-endif::VK_KHR_imageless_framebuffer[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:attachmentImageInfoCount is the number of attachments being
-    described.
-  * pname:pAttachmentImageInfos is a pointer to an array of
-    slink:VkFramebufferAttachmentImageInfo structures, each of which
-    describes a number of parameters of the corresponding attachment in a
-    render pass instance.
-
-include::{generated}/validity/structs/VkFramebufferAttachmentsCreateInfo.txt[]
---
-
-[open,refpage='VkFramebufferAttachmentImageInfo',desc='Structure specifying parameters of an image that will be used with a framebuffer',type='structs',alias='VkFramebufferAttachmentImageInfoKHR']
---
-The sname:VkFramebufferAttachmentImageInfo structure is defined as:
-
-include::{generated}/api/structs/VkFramebufferAttachmentImageInfo.txt[]
-
-ifdef::VK_KHR_imageless_framebuffer[]
-or the equivalent
-
-include::{generated}/api/structs/VkFramebufferAttachmentImageInfoKHR.txt[]
-endif::VK_KHR_imageless_framebuffer[]
-
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:flags is a bitmask of elink:VkImageCreateFlagBits, matching the
-    value of slink:VkImageCreateInfo::pname:flags used to create an image
-    that will be used with this framebuffer.
-  * pname:usage is a bitmask of elink:VkImageUsageFlagBits, matching the
-    value of slink:VkImageCreateInfo::pname:usage used to create an image
-    used with this framebuffer.
-  * pname:width is the width of the image view used for rendering.
-  * pname:height is the height of the image view used for rendering.
-  * pname:layerCount is the number of array layers of the image view used
-    for rendering.
-  * pname:viewFormatCount is the number of entries in the pname:pViewFormats
-    array, matching the value of
-    slink:VkImageFormatListCreateInfo::pname:viewFormatCount used to create
-    an image used with this framebuffer.
-  * pname:pViewFormats is a pointer to an array of elink:VkFormat values
-    specifying all of the formats which can: be used when creating views of
-    the image, matching the value of
-    slink:VkImageFormatListCreateInfo::pname:pViewFormats used to create an
-    image used with this framebuffer.
-
-Images that can: be used with the framebuffer when beginning a render pass,
-as specified by slink:VkRenderPassAttachmentBeginInfo, must: be created with
-parameters that are identical to those specified here.
-
-
-include::{generated}/validity/structs/VkFramebufferAttachmentImageInfo.txt[]
---
-endif::VK_VERSION_1_2,VK_KHR_imageless_framebuffer[]
-
-
-[open,refpage='VkFramebufferCreateFlagBits',desc='Bitmask specifying framebuffer properties',type='enums']
---
-Bits which can: be set in slink:VkFramebufferCreateInfo::pname:flags to
-specify options for framebuffers are:
-
-include::{generated}/api/enums/VkFramebufferCreateFlagBits.txt[]
-
-ifdef::VK_VERSION_1_2,VK_KHR_imageless_framebuffer[]
-  * ename:VK_FRAMEBUFFER_CREATE_IMAGELESS_BIT specifies that image views are
-    not specified, and only attachment compatibility information will be
-    provided via a slink:VkFramebufferAttachmentImageInfo structure.
-endif::VK_VERSION_1_2,VK_KHR_imageless_framebuffer[]
-
-ifndef::VK_VERSION_1_2,VK_KHR_imageless_framebuffer[]
-[NOTE]
-.Note
-====
-All bits for this type are defined by extensions, and none of those
-extensions are enabled in this build of the specification.
-====
-endif::VK_VERSION_1_2,VK_KHR_imageless_framebuffer[]
---
-
-[open,refpage='VkFramebufferCreateFlags',desc='Bitmask of VkFramebufferCreateFlagBits',type='flags']
---
-include::{generated}/api/flags/VkFramebufferCreateFlags.txt[]
-
-tname:VkFramebufferCreateFlags is a bitmask type for setting a mask of zero
-or more elink:VkFramebufferCreateFlagBits.
---
-
-[open,refpage='vkDestroyFramebuffer',desc='Destroy a framebuffer object',type='protos']
---
-To destroy a framebuffer, call:
-
-include::{generated}/api/protos/vkDestroyFramebuffer.txt[]
-
-  * pname:device is the logical device that destroys the framebuffer.
-  * pname:framebuffer is the handle of the framebuffer to destroy.
-  * pname:pAllocator controls host memory allocation as described in the
-    <<memory-allocation, Memory Allocation>> chapter.
-
-.Valid Usage
-****
-  * [[VUID-vkDestroyFramebuffer-framebuffer-00892]]
-    All submitted commands that refer to pname:framebuffer must: have
-    completed execution
-  * [[VUID-vkDestroyFramebuffer-framebuffer-00893]]
-    If sname:VkAllocationCallbacks were provided when pname:framebuffer was
-    created, a compatible set of callbacks must: be provided here
-  * [[VUID-vkDestroyFramebuffer-framebuffer-00894]]
-    If no sname:VkAllocationCallbacks were provided when pname:framebuffer
-    was created, pname:pAllocator must: be `NULL`
-****
-
-include::{generated}/validity/protos/vkDestroyFramebuffer.txt[]
---
-
-
-[[renderpass-commands]]
-== Render Pass Commands
-
-An application records the commands for a render pass instance one subpass
-at a time, by beginning a render pass instance, iterating over the subpasses
-to record commands for that subpass, and then ending the render pass
-instance.
-
-[open,refpage='vkCmdBeginRenderPass',desc='Begin a new render pass',type='protos']
---
-To begin a render pass instance, call:
-
-include::{generated}/api/protos/vkCmdBeginRenderPass.txt[]
-
-  * pname:commandBuffer is the command buffer in which to record the
-    command.
-  * pname:pRenderPassBegin is a pointer to a slink:VkRenderPassBeginInfo
-    structure specifying the render pass to begin an instance of, and the
-    framebuffer the instance uses.
-  * pname:contents is a elink:VkSubpassContents value specifying how the
-    commands in the first subpass will be provided.
-
-After beginning a render pass instance, the command buffer is ready to
-record the commands for the first subpass of that render pass.
-
-.Valid Usage
-****
-  * [[VUID-vkCmdBeginRenderPass-initialLayout-00895]]
-    If any of the pname:initialLayout or pname:finalLayout member of the
-    sname:VkAttachmentDescription structures or the pname:layout member of
-    the sname:VkAttachmentReference structures specified when creating the
-    render pass specified in the pname:renderPass member of
-    pname:pRenderPassBegin is ename:VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL
-    then the corresponding attachment image view of the framebuffer
-    specified in the pname:framebuffer member of pname:pRenderPassBegin
-    must: have been created with a pname:usage value including
-    ename:VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT
-// The VU below comes in an alternate version when the extension is
-// enabled.
-ifndef::VK_VERSION_1_1,VK_KHR_maintenance2[]
-  * [[VUID-vkCmdBeginRenderPass-initialLayout-00896]]
-    If any of the pname:initialLayout or pname:finalLayout member of the
-    sname:VkAttachmentDescription structures or the pname:layout member of
-    the sname:VkAttachmentReference structures specified when creating the
-    render pass specified in the pname:renderPass member of
-    pname:pRenderPassBegin is
-    ename:VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL, or
-    ename:VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL then the
-    corresponding attachment image view of the framebuffer specified in the
-    pname:framebuffer member of pname:pRenderPassBegin must: have been
-    created with a pname:usage value including
-    ename:VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT
-endif::VK_VERSION_1_1,VK_KHR_maintenance2[]
-// The nested ifdefs are there in anticipation of the hoped-for day when the
-// VU extractor and validation layers can handle VU with imbedded
-// conditionals. They are commented out until then.
-ifdef::VK_VERSION_1_1,VK_KHR_maintenance2[]
-  * [[VUID-vkCmdBeginRenderPass-initialLayout-01758]]
-    If any of the pname:initialLayout or pname:finalLayout member of the
-    sname:VkAttachmentDescription structures or the pname:layout member of
-    the sname:VkAttachmentReference structures specified when creating the
-    render pass specified in the pname:renderPass member of
-    pname:pRenderPassBegin is
-// ifdef::VK_VERSION_1_1,VK_KHR_maintenance2[]
-    ename:VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_OPTIMAL,
-    ename:VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_OPTIMAL,
-// endif::VK_VERSION_1_1,VK_KHR_maintenance2[]
-    ename:VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL, or
-    ename:VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL then the
-    corresponding attachment image view of the framebuffer specified in the
-    pname:framebuffer member of pname:pRenderPassBegin must: have been
-    created with a pname:usage value including
-    ename:VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT
-ifdef::VK_VERSION_1_2,VK_KHR_separate_depth_stencil_layouts[]
-  * [[VUID-vkCmdBeginRenderPass-initialLayout-02842]]
-    If any of the pname:initialLayout or pname:finalLayout member of the
-    sname:VkAttachmentDescription structures or the pname:layout member of
-    the sname:VkAttachmentReference structures specified when creating the
-    render pass specified in the pname:renderPass member of
-    pname:pRenderPassBegin is
-    ename:VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL, or
-    ename:VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL,
-    ename:VK_IMAGE_LAYOUT_STENCIL_ATTACHMENT_OPTIMAL, or
-    ename:VK_IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL then the corresponding
-    attachment image view of the framebuffer specified in the
-    pname:framebuffer member of pname:pRenderPassBegin must: have been
-    created with a pname:usage value including
-    ename:VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT
-  * [[VUID-vkCmdBeginRenderPass-stencilInitialLayout-02843]]
-    If any of the pname:stencilInitialLayout or pname:stencilFinalLayout
-    member of the sname:VkAttachmentDescriptionStencilLayout structures or
-    the pname:stencilLayout member of the
-    sname:VkAttachmentReferenceStencilLayout structures specified when
-    creating the render pass specified in the pname:renderPass member of
-    pname:pRenderPassBegin is
-    ename:VK_IMAGE_LAYOUT_STENCIL_ATTACHMENT_OPTIMAL, or
-    ename:VK_IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL then the corresponding
-    attachment image view of the framebuffer specified in the
-    pname:framebuffer member of pname:pRenderPassBegin must: have been
-    created with a pname:usage value including
-    ename:VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT
-endif::VK_VERSION_1_2,VK_KHR_separate_depth_stencil_layouts[]
-endif::VK_VERSION_1_1,VK_KHR_maintenance2[]
-  * [[VUID-vkCmdBeginRenderPass-initialLayout-00897]]
-    If any of the pname:initialLayout or pname:finalLayout member of the
-    sname:VkAttachmentDescription structures or the pname:layout member of
-    the sname:VkAttachmentReference structures specified when creating the
-    render pass specified in the pname:renderPass member of
-    pname:pRenderPassBegin is ename:VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL
-    then the corresponding attachment image view of the framebuffer
-    specified in the pname:framebuffer member of pname:pRenderPassBegin
-    must: have been created with a pname:usage value including
-    ename:VK_IMAGE_USAGE_SAMPLED_BIT or
-    ename:VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT
-  * [[VUID-vkCmdBeginRenderPass-initialLayout-00898]]
-    If any of the pname:initialLayout or pname:finalLayout member of the
-    sname:VkAttachmentDescription structures or the pname:layout member of
-    the sname:VkAttachmentReference structures specified when creating the
-    render pass specified in the pname:renderPass member of
-    pname:pRenderPassBegin is ename:VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL
-    then the corresponding attachment image view of the framebuffer
-    specified in the pname:framebuffer member of pname:pRenderPassBegin
-    must: have been created with a pname:usage value including
-    ename:VK_IMAGE_USAGE_TRANSFER_SRC_BIT
-  * [[VUID-vkCmdBeginRenderPass-initialLayout-00899]]
-    If any of the pname:initialLayout or pname:finalLayout member of the
-    sname:VkAttachmentDescription structures or the pname:layout member of
-    the sname:VkAttachmentReference structures specified when creating the
-    render pass specified in the pname:renderPass member of
-    pname:pRenderPassBegin is ename:VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL
-    then the corresponding attachment image view of the framebuffer
-    specified in the pname:framebuffer member of pname:pRenderPassBegin
-    must: have been created with a pname:usage value including
-    ename:VK_IMAGE_USAGE_TRANSFER_DST_BIT
-  * [[VUID-vkCmdBeginRenderPass-initialLayout-00900]]
-    If the pname:initialLayout member of any of the
-    sname:VkAttachmentDescription structures specified when creating the
-    render pass specified in the pname:renderPass member of
-    pname:pRenderPassBegin is not ename:VK_IMAGE_LAYOUT_UNDEFINED, then each
-    such pname:initialLayout must: be equal to the current layout of the
-    corresponding attachment image subresource of the framebuffer specified
-    in the pname:framebuffer member of pname:pRenderPassBegin
-  * [[VUID-vkCmdBeginRenderPass-srcStageMask-00901]]
-    The pname:srcStageMask and pname:dstStageMask members of any element of
-    the pname:pDependencies member of slink:VkRenderPassCreateInfo used to
-    create pname:renderPass must: be supported by the capabilities of the
-    queue family identified by the pname:queueFamilyIndex member of the
-    slink:VkCommandPoolCreateInfo used to create the command pool which
-    pname:commandBuffer was allocated from
-  * [[VUID-vkCmdBeginRenderPass-framebuffer-02532]]
-    For any attachment in pname:framebuffer that is used by pname:renderPass
-    and is bound to memory locations that are also bound to another
-    attachment used by pname:renderPass, and if at least one of those uses
-    causes either attachment to be written to, both attachments must: have
-    had the ename:VK_ATTACHMENT_DESCRIPTION_MAY_ALIAS_BIT set
-****
-
-include::{generated}/validity/protos/vkCmdBeginRenderPass.txt[]
---
-
-ifdef::VK_VERSION_1_2,VK_KHR_create_renderpass2[]
-[open,refpage='vkCmdBeginRenderPass2',desc='Begin a new render pass',type='protos',alias='vkCmdBeginRenderPass2KHR']
---
-Alternatively to begin a render pass, call:
-
-ifdef::VK_VERSION_1_2[]
-include::{generated}/api/protos/vkCmdBeginRenderPass2.txt[]
-endif::VK_VERSION_1_2[]
-
-ifdef::VK_VERSION_1_2+VK_KHR_create_renderpass2[or the equivalent command]
-
-ifdef::VK_KHR_create_renderpass2[]
-include::{generated}/api/protos/vkCmdBeginRenderPass2KHR.txt[]
-endif::VK_KHR_create_renderpass2[]
-
-  * pname:commandBuffer is the command buffer in which to record the
-    command.
-  * pname:pRenderPassBegin is a pointer to a slink:VkRenderPassBeginInfo
-    structure specifying the render pass to begin an instance of, and the
-    framebuffer the instance uses.
-  * pname:pSubpassBeginInfo is a pointer to a slink:VkSubpassBeginInfo
-    structure containing information about the subpass which is about to
-    begin rendering.
-
-After beginning a render pass instance, the command buffer is ready to
-record the commands for the first subpass of that render pass.
-
-.Valid Usage
-****
-  * [[VUID-vkCmdBeginRenderPass2-framebuffer-02779]]
-    Both the pname:framebuffer and pname:renderPass members of
-    pname:pRenderPassBegin must: have been created on the same
-    slink:VkDevice that pname:commandBuffer was allocated on
-  * [[VUID-vkCmdBeginRenderPass2-initialLayout-03094]]
-    If any of the pname:initialLayout or pname:finalLayout member of the
-    sname:VkAttachmentDescription structures or the pname:layout member of
-    the sname:VkAttachmentReference structures specified when creating the
-    render pass specified in the pname:renderPass member of
-    pname:pRenderPassBegin is ename:VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL
-    then the corresponding attachment image view of the framebuffer
-    specified in the pname:framebuffer member of pname:pRenderPassBegin
-    must: have been created with a pname:usage value including
-    ename:VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT
-  * [[VUID-vkCmdBeginRenderPass2-initialLayout-03096]]
-    If any of the pname:initialLayout or pname:finalLayout member of the
-    sname:VkAttachmentDescription structures or the pname:layout member of
-    the sname:VkAttachmentReference structures specified when creating the
-    render pass specified in the pname:renderPass member of
-    pname:pRenderPassBegin is
-    ename:VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_OPTIMAL,
-    ename:VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_OPTIMAL,
-    ename:VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL, or
-    ename:VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL then the
-    corresponding attachment image view of the framebuffer specified in the
-    pname:framebuffer member of pname:pRenderPassBegin must: have been
-    created with a pname:usage value including
-    ename:VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT
-ifdef::VK_VERSION_1_2,VK_KHR_separate_depth_stencil_layouts[]
-  * [[VUID-vkCmdBeginRenderPass2-initialLayout-02844]]
-    If any of the pname:initialLayout or pname:finalLayout member of the
-    sname:VkAttachmentDescription structures or the pname:layout member of
-    the sname:VkAttachmentReference structures specified when creating the
-    render pass specified in the pname:renderPass member of
-    pname:pRenderPassBegin is
-    ename:VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL, or
-    ename:VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL,
-    ename:VK_IMAGE_LAYOUT_STENCIL_ATTACHMENT_OPTIMAL, or
-    ename:VK_IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL then the corresponding
-    attachment image view of the framebuffer specified in the
-    pname:framebuffer member of pname:pRenderPassBegin must: have been
-    created with a pname:usage value including
-    ename:VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT
-  * [[VUID-vkCmdBeginRenderPass2-stencilInitialLayout-02845]]
-    If any of the pname:stencilInitialLayout or pname:stencilFinalLayout
-    member of the sname:VkAttachmentDescriptionStencilLayout structures or
-    the pname:stencilLayout member of the
-    sname:VkAttachmentReferenceStencilLayout structures specified when
-    creating the render pass specified in the pname:renderPass member of
-    pname:pRenderPassBegin is
-    ename:VK_IMAGE_LAYOUT_STENCIL_ATTACHMENT_OPTIMAL, or
-    ename:VK_IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL then the corresponding
-    attachment image view of the framebuffer specified in the
-    pname:framebuffer member of pname:pRenderPassBegin must: have been
-    created with a pname:usage value including
-    ename:VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT
-endif::VK_VERSION_1_2,VK_KHR_separate_depth_stencil_layouts[]
-  * [[VUID-vkCmdBeginRenderPass2-initialLayout-03097]]
-    If any of the pname:initialLayout or pname:finalLayout member of the
-    sname:VkAttachmentDescription structures or the pname:layout member of
-    the sname:VkAttachmentReference structures specified when creating the
-    render pass specified in the pname:renderPass member of
-    pname:pRenderPassBegin is ename:VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL
-    then the corresponding attachment image view of the framebuffer
-    specified in the pname:framebuffer member of pname:pRenderPassBegin
-    must: have been created with a pname:usage value including
-    ename:VK_IMAGE_USAGE_SAMPLED_BIT or
-    ename:VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT
-  * [[VUID-vkCmdBeginRenderPass2-initialLayout-03098]]
-    If any of the pname:initialLayout or pname:finalLayout member of the
-    sname:VkAttachmentDescription structures or the pname:layout member of
-    the sname:VkAttachmentReference structures specified when creating the
-    render pass specified in the pname:renderPass member of
-    pname:pRenderPassBegin is ename:VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL
-    then the corresponding attachment image view of the framebuffer
-    specified in the pname:framebuffer member of pname:pRenderPassBegin
-    must: have been created with a pname:usage value including
-    ename:VK_IMAGE_USAGE_TRANSFER_SRC_BIT
-  * [[VUID-vkCmdBeginRenderPass2-initialLayout-03099]]
-    If any of the pname:initialLayout or pname:finalLayout member of the
-    sname:VkAttachmentDescription structures or the pname:layout member of
-    the sname:VkAttachmentReference structures specified when creating the
-    render pass specified in the pname:renderPass member of
-    pname:pRenderPassBegin is ename:VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL
-    then the corresponding attachment image view of the framebuffer
-    specified in the pname:framebuffer member of pname:pRenderPassBegin
-    must: have been created with a pname:usage value including
-    ename:VK_IMAGE_USAGE_TRANSFER_DST_BIT
-  * [[VUID-vkCmdBeginRenderPass2-initialLayout-03100]]
-    If the pname:initialLayout member of any of the
-    sname:VkAttachmentDescription structures specified when creating the
-    render pass specified in the pname:renderPass member of
-    pname:pRenderPassBegin is not ename:VK_IMAGE_LAYOUT_UNDEFINED, then each
-    such pname:initialLayout must: be equal to the current layout of the
-    corresponding attachment image subresource of the framebuffer specified
-    in the pname:framebuffer member of pname:pRenderPassBegin
-  * [[VUID-vkCmdBeginRenderPass2-srcStageMask-03101]]
-    The pname:srcStageMask and pname:dstStageMask members of any element of
-    the pname:pDependencies member of slink:VkRenderPassCreateInfo used to
-    create pname:renderPass must: be supported by the capabilities of the
-    queue family identified by the pname:queueFamilyIndex member of the
-    slink:VkCommandPoolCreateInfo used to create the command pool which
-    pname:commandBuffer was allocated from
-  * [[VUID-vkCmdBeginRenderPass2-framebuffer-02533]]
-    For any attachment in pname:framebuffer that is used by pname:renderPass
-    and is bound to memory locations that are also bound to another
-    attachment used by pname:renderPass, and if at least one of those uses
-    causes either attachment to be written to, both attachments must: have
-    had the ename:VK_ATTACHMENT_DESCRIPTION_MAY_ALIAS_BIT set
-****
-
-include::{generated}/validity/protos/vkCmdBeginRenderPass2.txt[]
---
-endif::VK_VERSION_1_2,VK_KHR_create_renderpass2[]
-
-[open,refpage='VkRenderPassBeginInfo',desc='Structure specifying render pass begin information',type='structs']
---
-The sname:VkRenderPassBeginInfo structure is defined as:
-
-include::{generated}/api/structs/VkRenderPassBeginInfo.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:renderPass is the render pass to begin an instance of.
-  * pname:framebuffer is the framebuffer containing the attachments that are
-    used with the render pass.
-  * pname:renderArea is the render area that is affected by the render pass
-    instance, and is described in more detail below.
-  * pname:clearValueCount is the number of elements in pname:pClearValues.
-  * pname:pClearValues is a pointer to an array of pname:clearValueCount
-    slink:VkClearValue structures that contains clear values for each
-    attachment, if the attachment uses a pname:loadOp value of
-    ename:VK_ATTACHMENT_LOAD_OP_CLEAR or if the attachment has a
-    depth/stencil format and uses a pname:stencilLoadOp value of
-    ename:VK_ATTACHMENT_LOAD_OP_CLEAR.
-    The array is indexed by attachment number.
-    Only elements corresponding to cleared attachments are used.
-    Other elements of pname:pClearValues are ignored.
-
-pname:renderArea is the render area that is affected by the render pass
-instance.
-The effects of attachment load, store and multisample resolve operations are
-restricted to the pixels whose x and y coordinates fall within the render
-area on all attachments.
-The render area extends to all layers of pname:framebuffer.
-The application must: ensure (using scissor if necessary) that all rendering
-is contained within the render area.
-ifndef::VK_QCOM_render_pass_transform[]
-The render area must: be contained within the framebuffer dimensions.
-endif::VK_QCOM_render_pass_transform[]
-ifdef::VK_QCOM_render_pass_transform[]
-The render area, after any transform specified by
-slink:VkRenderPassTransformBeginInfoQCOM::pname:transform is applied, must:
-be contained within the framebuffer dimensions.
-endif::VK_QCOM_render_pass_transform[]
-
-ifdef::VK_QCOM_render_pass_transform[]
-If <<vertexpostproc-renderpass-transform, render pass transform>> is
-enabled, then pname:renderArea must: equal the framebuffer pre-transformed
-dimensions.
-After pname:renderArea has been transformed by
-slink:VkRenderPassTransformBeginInfoQCOM::pname:transform, the resulting
-render area must: be equal to the framebuffer dimensions.
-endif::VK_QCOM_render_pass_transform[]
-
-ifdef::VK_HUAWEI_subpass_shading[]
-If <<features-subpassShading, subpass shading>> is enabled, then
-pname:renderArea must: equal the framebuffer dimensions.
-endif::VK_HUAWEI_subpass_shading[]
-
-ifdef::VK_VERSION_1_1,VK_KHR_multiview[]
-
-When multiview is enabled, the resolve operation at the end of a subpass
-applies to all views in the view mask.
-
-endif::VK_VERSION_1_1,VK_KHR_multiview[]
-
-[NOTE]
-.Note
-====
-There may: be a performance cost for using a render area smaller than the
-framebuffer, unless it matches the render area granularity for the render
-pass.
-====
-
-.Valid Usage
-****
-  * [[VUID-VkRenderPassBeginInfo-clearValueCount-00902]]
-    pname:clearValueCount must: be greater than the largest attachment index
-    in pname:renderPass that specifies a pname:loadOp (or
-    pname:stencilLoadOp, if the attachment has a depth/stencil format) of
-    ename:VK_ATTACHMENT_LOAD_OP_CLEAR
-  * [[VUID-VkRenderPassBeginInfo-clearValueCount-04962]]
-    If pname:clearValueCount is not `0`, pname:pClearValues must: be a valid
-    pointer to an array of pname:clearValueCount slink:VkClearValue unions
-  * [[VUID-VkRenderPassBeginInfo-renderPass-00904]]
-    pname:renderPass must: be <<renderpass-compatibility,compatible>> with
-    the pname:renderPass member of the slink:VkFramebufferCreateInfo
-    structure specified when creating pname:framebuffer
-ifndef::VK_VERSION_1_1,VK_KHR_device_group[]
-  * [[VUID-VkRenderPassBeginInfo-renderArea-02846]]
-    pname:renderArea.offset.x must: be greater than or equal to 0
-  * [[VUID-VkRenderPassBeginInfo-renderArea-02847]]
-    pname:renderArea.offset.y must: be greater than or equal to 0
-  * [[VUID-VkRenderPassBeginInfo-renderArea-02848]]
-    [eq]#pname:renderArea.offset.x {plus} pname:renderArea.extent.width#
-    must: be less than or equal to
-    slink:VkFramebufferCreateInfo::pname:width the pname:framebuffer was
-    created with
-  * [[VUID-VkRenderPassBeginInfo-renderArea-02849]]
-    [eq]#pname:renderArea.offset.y {plus} pname:renderArea.extent.height#
-    must: be less than or equal to
-    slink:VkFramebufferCreateInfo::pname:height the pname:framebuffer was
-    created with
-endif::VK_VERSION_1_1,VK_KHR_device_group[]
-ifdef::VK_VERSION_1_1,VK_KHR_device_group[]
-  * [[VUID-VkRenderPassBeginInfo-pNext-02850]]
-    If the pname:pNext chain does not contain
-    slink:VkDeviceGroupRenderPassBeginInfo or its
-    pname:deviceRenderAreaCount member is equal to 0,
-    pname:renderArea.offset.x must: be greater than or equal to 0
-  * [[VUID-VkRenderPassBeginInfo-pNext-02851]]
-    If the pname:pNext chain does not contain
-    slink:VkDeviceGroupRenderPassBeginInfo or its
-    pname:deviceRenderAreaCount member is equal to 0,
-    pname:renderArea.offset.y must: be greater than or equal to 0
-  * [[VUID-VkRenderPassBeginInfo-pNext-02852]]
-    If the pname:pNext chain does not contain
-    slink:VkDeviceGroupRenderPassBeginInfo or its
-    pname:deviceRenderAreaCount member is equal to 0,
-    [eq]#pname:renderArea.offset.x {plus} pname:renderArea.extent.width#
-    must: be less than or equal to
-    slink:VkFramebufferCreateInfo::pname:width the pname:framebuffer was
-    created with
-  * [[VUID-VkRenderPassBeginInfo-pNext-02853]]
-    If the pname:pNext chain does not contain
-    slink:VkDeviceGroupRenderPassBeginInfo or its
-    pname:deviceRenderAreaCount member is equal to 0,
-    [eq]#pname:renderArea.offset.y {plus} pname:renderArea.extent.height#
-    must: be less than or equal to
-    slink:VkFramebufferCreateInfo::pname:height the pname:framebuffer was
-    created with
-  * [[VUID-VkRenderPassBeginInfo-pNext-02854]]
-    If the pname:pNext chain contains
-    slink:VkDeviceGroupRenderPassBeginInfo, the pname:offset.x member of
-    each element of pname:pDeviceRenderAreas must: be greater than or equal
-    to 0
-  * [[VUID-VkRenderPassBeginInfo-pNext-02855]]
-    If the pname:pNext chain contains
-    slink:VkDeviceGroupRenderPassBeginInfo, the pname:offset.y member of
-    each element of pname:pDeviceRenderAreas must: be greater than or equal
-    to 0
-  * [[VUID-VkRenderPassBeginInfo-pNext-02856]]
-    If the pname:pNext chain contains
-    slink:VkDeviceGroupRenderPassBeginInfo, [eq]#pname:offset.x {plus}
-    pname:extent.width# of each element of pname:pDeviceRenderAreas must: be
-    less than or equal to slink:VkFramebufferCreateInfo::pname:width the
-    pname:framebuffer was created with
-  * [[VUID-VkRenderPassBeginInfo-pNext-02857]]
-    If the pname:pNext chain contains
-    slink:VkDeviceGroupRenderPassBeginInfo, [eq]#pname:offset.y {plus}
-    pname:extent.height# of each element of pname:pDeviceRenderAreas must:
-    be less than or equal to slink:VkFramebufferCreateInfo::pname:height the
-    pname:framebuffer was created with
-endif::VK_VERSION_1_1,VK_KHR_device_group[]
-ifdef::VK_VERSION_1_2,VK_KHR_imageless_framebuffer[]
-  * [[VUID-VkRenderPassBeginInfo-framebuffer-03207]]
-    If pname:framebuffer was created with a
-    slink:VkFramebufferCreateInfo::pname:flags value that did not include
-    ename:VK_FRAMEBUFFER_CREATE_IMAGELESS_BIT, and the pname:pNext chain
-    includes a slink:VkRenderPassAttachmentBeginInfo structure, its
-    pname:attachmentCount must: be zero
-  * [[VUID-VkRenderPassBeginInfo-framebuffer-03208]]
-    If pname:framebuffer was created with a
-    slink:VkFramebufferCreateInfo::pname:flags value that included
-    ename:VK_FRAMEBUFFER_CREATE_IMAGELESS_BIT, the pname:attachmentCount of
-    a slink:VkRenderPassAttachmentBeginInfo structure included in the
-    pname:pNext chain must: be equal to the value of
-    slink:VkFramebufferAttachmentsCreateInfo::pname:attachmentImageInfoCount
-    used to create pname:framebuffer
-  * [[VUID-VkRenderPassBeginInfo-framebuffer-02780]]
-    If pname:framebuffer was created with a
-    slink:VkFramebufferCreateInfo::pname:flags value that included
-    ename:VK_FRAMEBUFFER_CREATE_IMAGELESS_BIT, each element of the
-    pname:pAttachments member of a slink:VkRenderPassAttachmentBeginInfo
-    structure included in the pname:pNext chain must: have been created on
-    the same slink:VkDevice as pname:framebuffer and pname:renderPass
-  * [[VUID-VkRenderPassBeginInfo-framebuffer-03209]]
-    If pname:framebuffer was created with a
-    slink:VkFramebufferCreateInfo::pname:flags value that included
-    ename:VK_FRAMEBUFFER_CREATE_IMAGELESS_BIT, each element of the
-    pname:pAttachments member of a slink:VkRenderPassAttachmentBeginInfo
-    structure included in the pname:pNext chain must: be a slink:VkImageView
-    of an image created with a value of slink:VkImageCreateInfo::pname:flags
-    equal to the pname:flags member of the corresponding element of
-    slink:VkFramebufferAttachmentsCreateInfo::pname:pAttachmentImageInfos
-    used to create pname:framebuffer
-  * [[VUID-VkRenderPassBeginInfo-framebuffer-04627]]
-    If pname:framebuffer was created with a
-    slink:VkFramebufferCreateInfo::pname:flags value that included
-    ename:VK_FRAMEBUFFER_CREATE_IMAGELESS_BIT, each element of the
-    pname:pAttachments member of a slink:VkRenderPassAttachmentBeginInfo
-    structure included in the pname:pNext chain must: be a slink:VkImageView
-    with <<resources-image-inherited-usage, an inherited usage>> equal to
-    the pname:usage member of the corresponding element of
-    slink:VkFramebufferAttachmentsCreateInfo::pname:pAttachmentImageInfos
-    used to create pname:framebuffer
-  * [[VUID-VkRenderPassBeginInfo-framebuffer-03211]]
-    If pname:framebuffer was created with a
-    slink:VkFramebufferCreateInfo::pname:flags value that included
-    ename:VK_FRAMEBUFFER_CREATE_IMAGELESS_BIT, each element of the
-    pname:pAttachments member of a slink:VkRenderPassAttachmentBeginInfo
-    structure included in the pname:pNext chain must: be a slink:VkImageView
-    with a width equal to the pname:width member of the corresponding
-    element of
-    slink:VkFramebufferAttachmentsCreateInfo::pname:pAttachmentImageInfos
-    used to create pname:framebuffer
-  * [[VUID-VkRenderPassBeginInfo-framebuffer-03212]]
-    If pname:framebuffer was created with a
-    slink:VkFramebufferCreateInfo::pname:flags value that included
-    ename:VK_FRAMEBUFFER_CREATE_IMAGELESS_BIT, each element of the
-    pname:pAttachments member of a slink:VkRenderPassAttachmentBeginInfo
-    structure included in the pname:pNext chain must: be a slink:VkImageView
-    with a height equal to the pname:height member of the corresponding
-    element of
-    slink:VkFramebufferAttachmentsCreateInfo::pname:pAttachmentImageInfos
-    used to create pname:framebuffer
-  * [[VUID-VkRenderPassBeginInfo-framebuffer-03213]]
-    If pname:framebuffer was created with a
-    slink:VkFramebufferCreateInfo::pname:flags value that included
-    ename:VK_FRAMEBUFFER_CREATE_IMAGELESS_BIT, each element of the
-    pname:pAttachments member of a slink:VkRenderPassAttachmentBeginInfo
-    structure included in the pname:pNext chain must: be a slink:VkImageView
-    of an image created with a value of
-    slink:VkImageViewCreateInfo::pname:subresourceRange.layerCount equal to
-    the pname:layerCount member of the corresponding element of
-    slink:VkFramebufferAttachmentsCreateInfo::pname:pAttachmentImageInfos
-    used to create pname:framebuffer
-  * [[VUID-VkRenderPassBeginInfo-framebuffer-03214]]
-    If pname:framebuffer was created with a
-    slink:VkFramebufferCreateInfo::pname:flags value that included
-    ename:VK_FRAMEBUFFER_CREATE_IMAGELESS_BIT, each element of the
-    pname:pAttachments member of a slink:VkRenderPassAttachmentBeginInfo
-    structure included in the pname:pNext chain must: be a slink:VkImageView
-    of an image created with a value of
-    slink:VkImageFormatListCreateInfo::pname:viewFormatCount equal to the
-    pname:viewFormatCount member of the corresponding element of
-    slink:VkFramebufferAttachmentsCreateInfo::pname:pAttachmentImageInfos
-    used to create pname:framebuffer
-  * [[VUID-VkRenderPassBeginInfo-framebuffer-03215]]
-    If pname:framebuffer was created with a
-    slink:VkFramebufferCreateInfo::pname:flags value that included
-    ename:VK_FRAMEBUFFER_CREATE_IMAGELESS_BIT, each element of the
-    pname:pAttachments member of a slink:VkRenderPassAttachmentBeginInfo
-    structure included in the pname:pNext chain must: be a slink:VkImageView
-    of an image created with a set of elements in
-    slink:VkImageFormatListCreateInfo::pname:pViewFormats equal to the set
-    of elements in the pname:pViewFormats member of the corresponding
-    element of
-    slink:VkFramebufferAttachmentsCreateInfo::pname:pAttachmentImageInfos
-    used to create pname:framebuffer
-  * [[VUID-VkRenderPassBeginInfo-framebuffer-03216]]
-    If pname:framebuffer was created with a
-    slink:VkFramebufferCreateInfo::pname:flags value that included
-    ename:VK_FRAMEBUFFER_CREATE_IMAGELESS_BIT, each element of the
-    pname:pAttachments member of a slink:VkRenderPassAttachmentBeginInfo
-    structure included in the pname:pNext chain must: be a slink:VkImageView
-    of an image created with a value of
-    slink:VkImageViewCreateInfo::pname:format equal to the corresponding
-    value of slink:VkAttachmentDescription::pname:format in pname:renderPass
-  * [[VUID-VkRenderPassBeginInfo-framebuffer-03217]]
-    If pname:framebuffer was created with a
-    slink:VkFramebufferCreateInfo::pname:flags value that included
-    ename:VK_FRAMEBUFFER_CREATE_IMAGELESS_BIT, each element of the
-    pname:pAttachments member of a slink:VkRenderPassAttachmentBeginInfo
-    structure included in the pname:pNext chain must: be a slink:VkImageView
-    of an image created with a value of
-    slink:VkImageCreateInfo::pname:samples equal to the corresponding value
-    of slink:VkAttachmentDescription::pname:samples in pname:renderPass
-endif::VK_VERSION_1_2,VK_KHR_imageless_framebuffer[]
-ifdef::VK_QCOM_render_pass_transform[]
-  * [[VUID-VkRenderPassBeginInfo-pNext-02869]]
-    If the pname:pNext chain includes
-    slink:VkRenderPassTransformBeginInfoQCOM, pname:renderArea.offset must:
-    equal (0,0)
-  * [[VUID-VkRenderPassBeginInfo-pNext-02870]]
-    If the pname:pNext chain includes
-    slink:VkRenderPassTransformBeginInfoQCOM, pname:renderArea.extent
-    transformed by slink:VkRenderPassTransformBeginInfoQCOM::pname:transform
-    must: equal the pname:framebuffer dimensions
-endif::VK_QCOM_render_pass_transform[]
-****
-
-include::{generated}/validity/structs/VkRenderPassBeginInfo.txt[]
---
-
-ifdef::VK_EXT_sample_locations[]
-[open,refpage='VkRenderPassSampleLocationsBeginInfoEXT',desc='Structure specifying sample locations to use for the layout transition of custom sample locations compatible depth/stencil attachments',type='structs']
---
-The image layout of the depth aspect of a depth/stencil attachment referring
-to an image created with
-ename:VK_IMAGE_CREATE_SAMPLE_LOCATIONS_COMPATIBLE_DEPTH_BIT_EXT is dependent
-on the last sample locations used to render to the image subresource, thus
-preserving the contents of such depth/stencil attachments across subpass
-boundaries requires the application to specify these sample locations
-whenever a layout transition of the attachment may: occur.
-This information can: be provided by adding a
-sname:VkRenderPassSampleLocationsBeginInfoEXT structure to the pname:pNext
-chain of sname:VkRenderPassBeginInfo.
-
-The sname:VkRenderPassSampleLocationsBeginInfoEXT structure is defined as:
-
-include::{generated}/api/structs/VkRenderPassSampleLocationsBeginInfoEXT.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:attachmentInitialSampleLocationsCount is the number of elements in
-    the pname:pAttachmentInitialSampleLocations array.
-  * pname:pAttachmentInitialSampleLocations is a pointer to an array of
-    pname:attachmentInitialSampleLocationsCount
-    slink:VkAttachmentSampleLocationsEXT structures specifying the
-    attachment indices and their corresponding sample location state.
-    Each element of pname:pAttachmentInitialSampleLocations can: specify the
-    sample location state to use in the automatic layout transition
-    performed to transition a depth/stencil attachment from the initial
-    layout of the attachment to the image layout specified for the
-    attachment in the first subpass using it.
-  * pname:postSubpassSampleLocationsCount is the number of elements in the
-    pname:pPostSubpassSampleLocations array.
-  * pname:pPostSubpassSampleLocations is a pointer to an array of
-    pname:postSubpassSampleLocationsCount slink:VkSubpassSampleLocationsEXT
-    structures specifying the subpass indices and their corresponding sample
-    location state.
-    Each element of pname:pPostSubpassSampleLocations can: specify the
-    sample location state to use in the automatic layout transition
-    performed to transition the depth/stencil attachment used by the
-    specified subpass to the image layout specified in a dependent subpass
-    or to the final layout of the attachment in case the specified subpass
-    is the last subpass using that attachment.
-    In addition, if
-    slink:VkPhysicalDeviceSampleLocationsPropertiesEXT::pname:variableSampleLocations
-    is ename:VK_FALSE, each element of pname:pPostSubpassSampleLocations
-    must: specify the sample location state that matches the sample
-    locations used by all pipelines that will be bound to a command buffer
-    during the specified subpass.
-    If pname:variableSampleLocations is ename:VK_TRUE, the sample locations
-    used for rasterization do not depend on
-    pname:pPostSubpassSampleLocations.
-
-include::{generated}/validity/structs/VkRenderPassSampleLocationsBeginInfoEXT.txt[]
---
-
-[open,refpage='VkAttachmentSampleLocationsEXT',desc='Structure specifying the sample locations state to use in the initial layout transition of attachments',type='structs']
---
-The sname:VkAttachmentSampleLocationsEXT structure is defined as:
-
-include::{generated}/api/structs/VkAttachmentSampleLocationsEXT.txt[]
-
-  * pname:attachmentIndex is the index of the attachment for which the
-    sample locations state is provided.
-  * pname:sampleLocationsInfo is the sample locations state to use for the
-    layout transition of the given attachment from the initial layout of the
-    attachment to the image layout specified for the attachment in the first
-    subpass using it.
-
-If the image referenced by the framebuffer attachment at index
-pname:attachmentIndex was not created with
-ename:VK_IMAGE_CREATE_SAMPLE_LOCATIONS_COMPATIBLE_DEPTH_BIT_EXT then the
-values specified in pname:sampleLocationsInfo are ignored.
-
-.Valid Usage
-****
-  * [[VUID-VkAttachmentSampleLocationsEXT-attachmentIndex-01531]]
-    pname:attachmentIndex must: be less than the pname:attachmentCount
-    specified in slink:VkRenderPassCreateInfo the render pass specified by
-    slink:VkRenderPassBeginInfo::pname:renderPass was created with
-****
-
-include::{generated}/validity/structs/VkAttachmentSampleLocationsEXT.txt[]
---
-
-[open,refpage='VkSubpassSampleLocationsEXT',desc='Structure specifying the sample locations state to use for layout transitions of attachments performed after a given subpass',type='structs']
---
-The sname:VkSubpassSampleLocationsEXT structure is defined as:
-
-include::{generated}/api/structs/VkSubpassSampleLocationsEXT.txt[]
-
-  * pname:subpassIndex is the index of the subpass for which the sample
-    locations state is provided.
-  * pname:sampleLocationsInfo is the sample locations state to use for the
-    layout transition of the depth/stencil attachment away from the image
-    layout the attachment is used with in the subpass specified in
-    pname:subpassIndex.
-
-If the image referenced by the depth/stencil attachment used in the subpass
-identified by pname:subpassIndex was not created with
-ename:VK_IMAGE_CREATE_SAMPLE_LOCATIONS_COMPATIBLE_DEPTH_BIT_EXT or if the
-subpass does not use a depth/stencil attachment, and
-slink:VkPhysicalDeviceSampleLocationsPropertiesEXT::pname:variableSampleLocations
-is ename:VK_TRUE then the values specified in pname:sampleLocationsInfo are
-ignored.
-
-.Valid Usage
-****
-  * [[VUID-VkSubpassSampleLocationsEXT-subpassIndex-01532]]
-    pname:subpassIndex must: be less than the pname:subpassCount specified
-    in slink:VkRenderPassCreateInfo the render pass specified by
-    slink:VkRenderPassBeginInfo::pname:renderPass was created with
-****
-
-include::{generated}/validity/structs/VkSubpassSampleLocationsEXT.txt[]
---
-endif::VK_EXT_sample_locations[]
-
-ifdef::VK_QCOM_render_pass_transform[]
-[open,refpage='VkRenderPassTransformBeginInfoQCOM',desc='Structure describing transform parameters of a render pass instance',type='structs']
---
-To begin a render pass instance with <<vertexpostproc-renderpass-transform,
-render pass transform>> enabled, add the
-slink:VkRenderPassTransformBeginInfoQCOM to the pname:pNext chain of
-slink:VkRenderPassBeginInfo structure passed to the
-flink:vkCmdBeginRenderPass command specifying the render pass transform.
-
-The sname:VkRenderPassTransformBeginInfoQCOM structure is defined as:
-
-include::{generated}/api/structs/VkRenderPassTransformBeginInfoQCOM.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:transform is a elink:VkSurfaceTransformFlagBitsKHR value
-    describing the transform to be applied to rasterization.
-
-.Valid Usage
-****
-  * [[VUID-VkRenderPassTransformBeginInfoQCOM-transform-02871]]
-    pname:transform must: be ename:VK_SURFACE_TRANSFORM_IDENTITY_BIT_KHR,
-    ename:VK_SURFACE_TRANSFORM_ROTATE_90_BIT_KHR,
-    ename:VK_SURFACE_TRANSFORM_ROTATE_180_BIT_KHR, or
-    ename:VK_SURFACE_TRANSFORM_ROTATE_270_BIT_KHR
-  * [[VUID-VkRenderPassTransformBeginInfoQCOM-flags-02872]]
-    The pname:renderpass must: have been created with
-    slink:VkRenderPassCreateInfo::pname:flags containing
-    ename:VK_RENDER_PASS_CREATE_TRANSFORM_BIT_QCOM
-****
-
-include::{generated}/validity/structs/VkRenderPassTransformBeginInfoQCOM.txt[]
---
-endif::VK_QCOM_render_pass_transform[]
-
-ifdef::VK_VERSION_1_2,VK_KHR_create_renderpass2[]
-[open,refpage='VkSubpassBeginInfo',desc='Structure specifying subpass begin information',type='structs',alias='VkSubpassBeginInfoKHR']
---
-The sname:VkSubpassBeginInfo structure is defined as:
-
-include::{generated}/api/structs/VkSubpassBeginInfo.txt[]
-
-ifdef::VK_KHR_create_renderpass2[]
-or the equivalent
-
-include::{generated}/api/structs/VkSubpassBeginInfoKHR.txt[]
-endif::VK_KHR_create_renderpass2[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:contents is a elink:VkSubpassContents value specifying how the
-    commands in the next subpass will be provided.
-
-include::{generated}/validity/structs/VkSubpassBeginInfo.txt[]
---
-endif::VK_VERSION_1_2,VK_KHR_create_renderpass2[]
-
-[open,refpage='VkSubpassContents',desc='Specify how commands in the first subpass of a render pass are provided',type='enums']
---
-Possible values of flink:vkCmdBeginRenderPass::pname:contents, specifying
-how the commands in the first subpass will be provided, are:
-
-include::{generated}/api/enums/VkSubpassContents.txt[]
-
-  * ename:VK_SUBPASS_CONTENTS_INLINE specifies that the contents of the
-    subpass will be recorded inline in the primary command buffer, and
-    secondary command buffers must: not be executed within the subpass.
-  * ename:VK_SUBPASS_CONTENTS_SECONDARY_COMMAND_BUFFERS specifies that the
-    contents are recorded in secondary command buffers that will be called
-    from the primary command buffer, and flink:vkCmdExecuteCommands is the
-    only valid command on the command buffer until flink:vkCmdNextSubpass or
-    flink:vkCmdEndRenderPass.
---
-
-ifdef::VK_VERSION_1_1,VK_KHR_device_group[]
-[open,refpage='VkDeviceGroupRenderPassBeginInfo',desc='Set the initial device mask and render areas for a render pass instance',type='structs']
---
-If the pname:pNext chain of slink:VkRenderPassBeginInfo
-ifdef::VK_KHR_dynamic_rendering[or slink:VkRenderingInfoKHR]
-includes a sname:VkDeviceGroupRenderPassBeginInfo structure, then that
-structure includes a device mask and set of render areas for the render pass
-instance.
-
-The sname:VkDeviceGroupRenderPassBeginInfo structure is defined as:
-
-include::{generated}/api/structs/VkDeviceGroupRenderPassBeginInfo.txt[]
-
-ifdef::VK_KHR_device_group[]
-or the equivalent
-
-include::{generated}/api/structs/VkDeviceGroupRenderPassBeginInfoKHR.txt[]
-endif::VK_KHR_device_group[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:deviceMask is the device mask for the render pass instance.
-  * pname:deviceRenderAreaCount is the number of elements in the
-    pname:pDeviceRenderAreas array.
-  * pname:pDeviceRenderAreas is a pointer to an array of slink:VkRect2D
-    structures defining the render area for each physical device.
-
-The pname:deviceMask serves several purposes.
-It is an upper bound on the set of physical devices that can: be used during
-the render pass instance, and the initial device mask when the render pass
-instance begins.
-In addition, commands transitioning to the next subpass in a render pass
-instance and commands ending the render pass instance, and, accordingly
-render pass attachment load, store, and resolve operations and subpass
-dependencies corresponding to the render pass instance, are executed on the
-physical devices included in the device mask provided here.
-
-If pname:deviceRenderAreaCount is not zero, then the elements of
-pname:pDeviceRenderAreas override the value of
-slink:VkRenderPassBeginInfo::pname:renderArea, and provide a render area
-specific to each physical device.
-These render areas serve the same purpose as
-slink:VkRenderPassBeginInfo::pname:renderArea, including controlling the
-region of attachments that are cleared by ename:VK_ATTACHMENT_LOAD_OP_CLEAR
-and that are resolved into resolve attachments.
-
-If this structure is not present, the render pass instance's device mask is
-the value of slink:VkDeviceGroupCommandBufferBeginInfo::pname:deviceMask.
-If this structure is not present or if pname:deviceRenderAreaCount is zero,
-slink:VkRenderPassBeginInfo::pname:renderArea is used for all physical
-devices.
-
-.Valid Usage
-****
-  * [[VUID-VkDeviceGroupRenderPassBeginInfo-deviceMask-00905]]
-    pname:deviceMask must: be a valid device mask value
-  * [[VUID-VkDeviceGroupRenderPassBeginInfo-deviceMask-00906]]
-    pname:deviceMask must: not be zero
-  * [[VUID-VkDeviceGroupRenderPassBeginInfo-deviceMask-00907]]
-    pname:deviceMask must: be a subset of the command buffer's initial
-    device mask
-  * [[VUID-VkDeviceGroupRenderPassBeginInfo-deviceRenderAreaCount-00908]]
-    pname:deviceRenderAreaCount must: either be zero or equal to the number
-    of physical devices in the logical device
-  * [[VUID-VkDeviceGroupRenderPassBeginInfo-offset-06166]]
-    The pname:offset.x member of any element of pname:pDeviceRenderAreas
-    must: be greater than or equal to 0
-  * [[VUID-VkDeviceGroupRenderPassBeginInfo-offset-06167]]
-    The pname:offset.y member of any element of pname:pDeviceRenderAreas
-    must: be greater than or equal to 0
-  * [[VUID-VkDeviceGroupRenderPassBeginInfo-offset-06168]]
-    The sum of the pname:offset.x and pname:extent.width members of any
-    element of pname:pDeviceRenderAreas must: be less than or equal to
-    <<limits-maxFramebufferWidth, pname:maxFramebufferWidth>>
-  * [[VUID-VkDeviceGroupRenderPassBeginInfo-offset-06169]]
-    The sum of the pname:offset.y and pname:extent.height members of any
-    element of pname:pDeviceRenderAreas must: be less than or equal to
-    <<limits-maxFramebufferHeight, pname:maxFramebufferHeight>>
-****
-
-include::{generated}/validity/structs/VkDeviceGroupRenderPassBeginInfo.txt[]
---
-endif::VK_VERSION_1_1,VK_KHR_device_group[]
-
-ifdef::VK_VERSION_1_2,VK_KHR_imageless_framebuffer[]
-[open,refpage='VkRenderPassAttachmentBeginInfo',desc='Structure specifying images to be used as framebuffer attachments',type='structs',alias='VkRenderPassAttachmentBeginInfoKHR']
---
-The sname:VkRenderPassAttachmentBeginInfo structure is defined as:
-
-include::{generated}/api/structs/VkRenderPassAttachmentBeginInfo.txt[]
-
-ifdef::VK_KHR_imageless_framebuffer[]
-or the equivalent
-
-include::{generated}/api/structs/VkRenderPassAttachmentBeginInfoKHR.txt[]
-endif::VK_KHR_imageless_framebuffer[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:attachmentCount is the number of attachments.
-  * pname:pAttachments is a pointer to an array of sname:VkImageView
-    handles, each of which will be used as the corresponding attachment in
-    the render pass instance.
-
-.Valid Usage
-****
-  * [[VUID-VkRenderPassAttachmentBeginInfo-pAttachments-03218]]
-    Each element of pname:pAttachments must: only specify a single mip level
-  * [[VUID-VkRenderPassAttachmentBeginInfo-pAttachments-03219]]
-    Each element of pname:pAttachments must: have been created with the
-    identity swizzle
-  * [[VUID-VkRenderPassAttachmentBeginInfo-pAttachments-04114]]
-    Each element of pname:pAttachments must: have been created with
-    slink:VkImageViewCreateInfo::pname:viewType not equal to
-    ename:VK_IMAGE_VIEW_TYPE_3D
-****
-
-include::{generated}/validity/structs/VkRenderPassAttachmentBeginInfo.txt[]
---
-endif::VK_VERSION_1_2,VK_KHR_imageless_framebuffer[]
-
-[open,refpage='vkGetRenderAreaGranularity',desc='Returns the granularity for optimal render area',type='protos']
---
-To query the render area granularity, call:
-
-include::{generated}/api/protos/vkGetRenderAreaGranularity.txt[]
-
-  * pname:device is the logical device that owns the render pass.
-  * pname:renderPass is a handle to a render pass.
-  * pname:pGranularity is a pointer to a slink:VkExtent2D structure in which
-    the granularity is returned.
-
-The conditions leading to an optimal pname:renderArea are:
-
-  * the pname:offset.x member in pname:renderArea is a multiple of the
-    pname:width member of the returned slink:VkExtent2D (the horizontal
-    granularity).
-  * the pname:offset.y member in pname:renderArea is a multiple of the
-    pname:height member of the returned slink:VkExtent2D (the vertical
-    granularity).
-  * either the pname:extent.width member in pname:renderArea is a multiple
-    of the horizontal granularity or pname:offset.x+pname:extent.width is
-    equal to the pname:width of the pname:framebuffer in the
-    slink:VkRenderPassBeginInfo.
-  * either the pname:extent.height member in pname:renderArea is a multiple
-    of the vertical granularity or pname:offset.y+pname:extent.height is
-    equal to the pname:height of the pname:framebuffer in the
-    slink:VkRenderPassBeginInfo.
-
-Subpass dependencies are not affected by the render area, and apply to the
-entire image subresources attached to the framebuffer as specified in the
-description of <<renderpass-layout-transitions,automatic layout
-transitions>>.
-Similarly, pipeline barriers are valid even if their effect extends outside
-the render area.
-
-include::{generated}/validity/protos/vkGetRenderAreaGranularity.txt[]
---
-
-[open,refpage='vkCmdNextSubpass',desc='Transition to the next subpass of a render pass',type='protos']
---
-To transition to the next subpass in the render pass instance after
-recording the commands for a subpass, call:
-
-include::{generated}/api/protos/vkCmdNextSubpass.txt[]
-
-  * pname:commandBuffer is the command buffer in which to record the
-    command.
-  * pname:contents specifies how the commands in the next subpass will be
-    provided, in the same fashion as the corresponding parameter of
-    flink:vkCmdBeginRenderPass.
-
-The subpass index for a render pass begins at zero when
-fname:vkCmdBeginRenderPass is recorded, and increments each time
-fname:vkCmdNextSubpass is recorded.
-
-Moving to the next subpass automatically performs any multisample resolve
-operations in the subpass being ended.
-End-of-subpass multisample resolves are treated as color attachment writes
-for the purposes of synchronization.
-ifdef::VK_VERSION_1_2,VK_KHR_depth_stencil_resolve[]
-This applies to resolve operations for both color and depth/stencil
-attachments.
-endif::VK_VERSION_1_2,VK_KHR_depth_stencil_resolve[]
-That is, they are considered to execute in the
-ename:VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT pipeline stage and their
-writes are synchronized with ename:VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT.
-Synchronization between rendering within a subpass and any resolve
-operations at the end of the subpass occurs automatically, without need for
-explicit dependencies or pipeline barriers.
-However, if the resolve attachment is also used in a different subpass, an
-explicit dependency is needed.
-
-After transitioning to the next subpass, the application can: record the
-commands for that subpass.
-
-.Valid Usage
-****
-  * [[VUID-vkCmdNextSubpass-None-00909]]
-    The current subpass index must: be less than the number of subpasses in
-    the render pass minus one
-ifdef::VK_EXT_transform_feedback[]
-  * [[VUID-vkCmdNextSubpass-None-02349]]
-    This command must: not be recorded when transform feedback is active
-endif::VK_EXT_transform_feedback[]
-****
-
-include::{generated}/validity/protos/vkCmdNextSubpass.txt[]
---
-
-ifdef::VK_VERSION_1_2,VK_KHR_create_renderpass2[]
-[open,refpage='vkCmdNextSubpass2',desc='Transition to the next subpass of a render pass',type='protos',alias='vkCmdNextSubpass2KHR']
---
-To transition to the next subpass in the render pass instance after
-recording the commands for a subpass, call:
-
-ifdef::VK_VERSION_1_2[]
-include::{generated}/api/protos/vkCmdNextSubpass2.txt[]
-endif::VK_VERSION_1_2[]
-
-ifdef::VK_VERSION_1_2+VK_KHR_create_renderpass2[or the equivalent command]
-
-ifdef::VK_KHR_create_renderpass2[]
-include::{generated}/api/protos/vkCmdNextSubpass2KHR.txt[]
-endif::VK_KHR_create_renderpass2[]
-
-  * pname:commandBuffer is the command buffer in which to record the
-    command.
-  * pname:pSubpassBeginInfo is a pointer to a slink:VkSubpassBeginInfo
-    structure containing information about the subpass which is about to
-    begin rendering.
-  * pname:pSubpassEndInfo is a pointer to a slink:VkSubpassEndInfo structure
-    containing information about how the previous subpass will be ended.
-
-fname:vkCmdNextSubpass2 is semantically identical to flink:vkCmdNextSubpass,
-except that it is extensible, and that pname:contents is provided as part of
-an extensible structure instead of as a flat parameter.
-
-.Valid Usage
-****
-  * [[VUID-vkCmdNextSubpass2-None-03102]]
-    The current subpass index must: be less than the number of subpasses in
-    the render pass minus one
-ifdef::VK_EXT_transform_feedback[]
-  * [[VUID-vkCmdNextSubpass2-None-02350]]
-    This command must: not be recorded when transform feedback is active
-endif::VK_EXT_transform_feedback[]
-****
-
-include::{generated}/validity/protos/vkCmdNextSubpass2.txt[]
---
-endif::VK_VERSION_1_2,VK_KHR_create_renderpass2[]
-
-[open,refpage='vkCmdEndRenderPass',desc='End the current render pass',type='protos']
---
-To record a command to end a render pass instance after recording the
-commands for the last subpass, call:
-
-include::{generated}/api/protos/vkCmdEndRenderPass.txt[]
-
-  * pname:commandBuffer is the command buffer in which to end the current
-    render pass instance.
-
-Ending a render pass instance performs any multisample resolve operations on
-the final subpass.
-
-.Valid Usage
-****
-  * [[VUID-vkCmdEndRenderPass-None-00910]]
-    The current subpass index must: be equal to the number of subpasses in
-    the render pass minus one
-ifdef::VK_EXT_transform_feedback[]
-  * [[VUID-vkCmdEndRenderPass-None-02351]]
-    This command must: not be recorded when transform feedback is active
-endif::VK_EXT_transform_feedback[]
-ifdef::VK_KHR_dynamic_rendering[]
-  * [[VUID-vkCmdEndRenderPass-None-06170]]
-    The current render pass instance must: not have been begun with
-    flink:vkCmdBeginRenderingKHR
-endif::VK_KHR_dynamic_rendering[]
-****
-
-include::{generated}/validity/protos/vkCmdEndRenderPass.txt[]
---
-
-ifdef::VK_VERSION_1_2,VK_KHR_create_renderpass2[]
-[open,refpage='vkCmdEndRenderPass2',desc='End the current render pass',type='protos',alias='vkCmdEndRenderPass2KHR']
---
-To record a command to end a render pass instance after recording the
-commands for the last subpass, call:
-
-ifdef::VK_VERSION_1_2[]
-include::{generated}/api/protos/vkCmdEndRenderPass2.txt[]
-endif::VK_VERSION_1_2[]
-
-ifdef::VK_VERSION_1_2+VK_KHR_create_renderpass2[or the equivalent command]
-
-ifdef::VK_KHR_create_renderpass2[]
-include::{generated}/api/protos/vkCmdEndRenderPass2KHR.txt[]
-endif::VK_KHR_create_renderpass2[]
-
-  * pname:commandBuffer is the command buffer in which to end the current
-    render pass instance.
-  * pname:pSubpassEndInfo is a pointer to a slink:VkSubpassEndInfo structure
-    containing information about how the previous subpass will be ended.
-
-fname:vkCmdEndRenderPass2 is semantically identical to
-flink:vkCmdEndRenderPass, except that it is extensible.
-
-.Valid Usage
-****
-  * [[VUID-vkCmdEndRenderPass2-None-03103]]
-    The current subpass index must: be equal to the number of subpasses in
-    the render pass minus one
-ifdef::VK_EXT_transform_feedback[]
-  * [[VUID-vkCmdEndRenderPass2-None-02352]]
-    This command must: not be recorded when transform feedback is active
-endif::VK_EXT_transform_feedback[]
-ifdef::VK_KHR_dynamic_rendering[]
-  * [[VUID-vkCmdEndRenderPass2-None-06171]]
-    The current render pass instance must: not have been begun with
-    flink:vkCmdBeginRenderingKHR
-endif::VK_KHR_dynamic_rendering[]
-****
-
-include::{generated}/validity/protos/vkCmdEndRenderPass2.txt[]
---
-
-[open,refpage='VkSubpassEndInfo',desc='Structure specifying subpass end information',type='structs',alias='VkSubpassEndInfoKHR']
---
-The sname:VkSubpassEndInfo structure is defined as:
-
-include::{generated}/api/structs/VkSubpassEndInfo.txt[]
-
-ifdef::VK_KHR_create_renderpass2[]
-or the equivalent
-
-include::{generated}/api/structs/VkSubpassEndInfoKHR.txt[]
-endif::VK_KHR_create_renderpass2[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-
-include::{generated}/validity/structs/VkSubpassEndInfo.txt[]
---
-endif::VK_VERSION_1_2,VK_KHR_create_renderpass2[]
diff --git a/registry/vulkan/chapters/resources.txt b/registry/vulkan/chapters/resources.txt
deleted file mode 100644
index b844ac7..0000000
--- a/registry/vulkan/chapters/resources.txt
+++ /dev/null
@@ -1,7991 +0,0 @@
-// Copyright 2015-2021 The Khronos Group, Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-[[resources]]
-= Resource Creation
-
-Vulkan supports two primary resource types: _buffers_ and _images_.
-Resources are views of memory with associated formatting and dimensionality.
-Buffers are essentially unformatted arrays of bytes whereas images contain
-format information, can: be multidimensional and may: have associated
-metadata.
-
-
-[[resources-buffers]]
-== Buffers
-
-[open,refpage='VkBuffer',desc='Opaque handle to a buffer object',type='handles']
---
-Buffers represent linear arrays of data which are used for various purposes
-by binding them to a graphics or compute pipeline via descriptor sets or via
-certain commands, or by directly specifying them as parameters to certain
-commands.
-
-Buffers are represented by sname:VkBuffer handles:
-
-include::{generated}/api/handles/VkBuffer.txt[]
---
-
-[open,refpage='vkCreateBuffer',desc='Create a new buffer object',type='protos']
---
-To create buffers, call:
-
-include::{generated}/api/protos/vkCreateBuffer.txt[]
-
-  * pname:device is the logical device that creates the buffer object.
-  * pname:pCreateInfo is a pointer to a slink:VkBufferCreateInfo structure
-    containing parameters affecting creation of the buffer.
-  * pname:pAllocator controls host memory allocation as described in the
-    <<memory-allocation, Memory Allocation>> chapter.
-  * pname:pBuffer is a pointer to a slink:VkBuffer handle in which the
-    resulting buffer object is returned.
-
-.Valid Usage
-****
-  * [[VUID-vkCreateBuffer-flags-00911]]
-    If the pname:flags member of pname:pCreateInfo includes
-    ename:VK_BUFFER_CREATE_SPARSE_BINDING_BIT, creating this sname:VkBuffer
-    must: not cause the total required sparse memory for all currently valid
-    sparse resources on the device to exceed
-    sname:VkPhysicalDeviceLimits::pname:sparseAddressSpaceSize
-ifdef::VK_FUCHSIA_buffer_collection[]
-  * [[VUID-vkCreateBuffer-pNext-06387]]
-    If using the slink:VkBuffer for an import operation from a
-    slink:VkBufferCollectionFUCHSIA where a
-    slink:VkBufferCollectionBufferCreateInfoFUCHSIA has been chained to
-    pname:pNext, pname:pCreateInfo must: match the
-    slink:VkBufferConstraintsInfoFUCHSIA::pname:createInfo used when setting
-    the constraints on the buffer collection with
-    flink:vkSetBufferCollectionBufferConstraintsFUCHSIA
-endif::VK_FUCHSIA_buffer_collection[]
-****
-
-include::{generated}/validity/protos/vkCreateBuffer.txt[]
---
-
-[open,refpage='VkBufferCreateInfo',desc='Structure specifying the parameters of a newly created buffer object',type='structs']
---
-The sname:VkBufferCreateInfo structure is defined as:
-
-include::{generated}/api/structs/VkBufferCreateInfo.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:flags is a bitmask of elink:VkBufferCreateFlagBits specifying
-    additional parameters of the buffer.
-  * pname:size is the size in bytes of the buffer to be created.
-  * pname:usage is a bitmask of elink:VkBufferUsageFlagBits specifying
-    allowed usages of the buffer.
-  * pname:sharingMode is a elink:VkSharingMode value specifying the sharing
-    mode of the buffer when it will be accessed by multiple queue families.
-  * pname:queueFamilyIndexCount is the number of entries in the
-    pname:pQueueFamilyIndices array.
-  * pname:pQueueFamilyIndices is a pointer to an array of queue families
-    that will access this buffer.
-    It is ignored if pname:sharingMode is not
-    ename:VK_SHARING_MODE_CONCURRENT.
-
-.Valid Usage
-****
-  * [[VUID-VkBufferCreateInfo-size-00912]]
-    pname:size must: be greater than `0`
-  * [[VUID-VkBufferCreateInfo-sharingMode-00913]]
-    If pname:sharingMode is ename:VK_SHARING_MODE_CONCURRENT,
-    pname:pQueueFamilyIndices must: be a valid pointer to an array of
-    pname:queueFamilyIndexCount code:uint32_t values
-  * [[VUID-VkBufferCreateInfo-sharingMode-00914]]
-    If pname:sharingMode is ename:VK_SHARING_MODE_CONCURRENT,
-    pname:queueFamilyIndexCount must: be greater than `1`
-ifndef::VK_VERSION_1_1,VK_KHR_get_physical_device_properties2[]
-  * [[VUID-VkBufferCreateInfo-sharingMode-01391]]
-    If pname:sharingMode is ename:VK_SHARING_MODE_CONCURRENT, each element
-    of pname:pQueueFamilyIndices must: be unique and must: be less than
-    pname:pQueueFamilyPropertyCount returned by
-    flink:vkGetPhysicalDeviceQueueFamilyProperties for the
-    pname:physicalDevice that was used to create pname:device
-endif::VK_VERSION_1_1,VK_KHR_get_physical_device_properties2[]
-ifdef::VK_VERSION_1_1,VK_KHR_get_physical_device_properties2[]
-  * [[VUID-VkBufferCreateInfo-sharingMode-01419]]
-    If pname:sharingMode is ename:VK_SHARING_MODE_CONCURRENT, each element
-    of pname:pQueueFamilyIndices must: be unique and must: be less than
-    pname:pQueueFamilyPropertyCount returned by either
-    flink:vkGetPhysicalDeviceQueueFamilyProperties or
-    flink:vkGetPhysicalDeviceQueueFamilyProperties2 for the
-    pname:physicalDevice that was used to create pname:device
-endif::VK_VERSION_1_1,VK_KHR_get_physical_device_properties2[]
-  * [[VUID-VkBufferCreateInfo-flags-00915]]
-    If the <<features-sparseBinding,sparse bindings>> feature is not
-    enabled, pname:flags must: not contain
-    ename:VK_BUFFER_CREATE_SPARSE_BINDING_BIT
-  * [[VUID-VkBufferCreateInfo-flags-00916]]
-    If the <<features-sparseResidencyBuffer,sparse buffer residency>>
-    feature is not enabled, pname:flags must: not contain
-    ename:VK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT
-  * [[VUID-VkBufferCreateInfo-flags-00917]]
-    If the <<features-sparseResidencyAliased,sparse aliased residency>>
-    feature is not enabled, pname:flags must: not contain
-    ename:VK_BUFFER_CREATE_SPARSE_ALIASED_BIT
-  * [[VUID-VkBufferCreateInfo-flags-00918]]
-    If pname:flags contains ename:VK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT or
-    ename:VK_BUFFER_CREATE_SPARSE_ALIASED_BIT, it must: also contain
-    ename:VK_BUFFER_CREATE_SPARSE_BINDING_BIT
-ifdef::VK_VERSION_1_1,VK_KHR_external_memory[]
-  * [[VUID-VkBufferCreateInfo-pNext-00920]]
-    If the pname:pNext chain includes a
-    slink:VkExternalMemoryBufferCreateInfo structure, its pname:handleTypes
-    member must: only contain bits that are also in
-    slink:VkExternalBufferProperties::pname:externalMemoryProperties.compatibleHandleTypes,
-    as returned by flink:vkGetPhysicalDeviceExternalBufferProperties with
-    pname:pExternalBufferInfo->handleType equal to any one of the handle
-    types specified in
-    slink:VkExternalMemoryBufferCreateInfo::pname:handleTypes
-endif::VK_VERSION_1_1,VK_KHR_external_memory[]
-ifdef::VK_VERSION_1_1[]
-  * [[VUID-VkBufferCreateInfo-flags-01887]]
-    If the protected memory feature is not enabled, pname:flags must: not
-    contain ename:VK_BUFFER_CREATE_PROTECTED_BIT
-  * [[VUID-VkBufferCreateInfo-None-01888]]
-    If any of the bits ename:VK_BUFFER_CREATE_SPARSE_BINDING_BIT,
-    ename:VK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT, or
-    ename:VK_BUFFER_CREATE_SPARSE_ALIASED_BIT are set,
-    ename:VK_BUFFER_CREATE_PROTECTED_BIT must: not also be set
-endif::VK_VERSION_1_1[]
-ifdef::VK_NV_dedicated_allocation[]
-  * [[VUID-VkBufferCreateInfo-pNext-01571]]
-    If the pname:pNext chain includes a
-    slink:VkDedicatedAllocationBufferCreateInfoNV structure, and the
-    pname:dedicatedAllocation member of the chained structure is
-    ename:VK_TRUE, then pname:flags must: not include
-    ename:VK_BUFFER_CREATE_SPARSE_BINDING_BIT,
-    ename:VK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT, or
-    ename:VK_BUFFER_CREATE_SPARSE_ALIASED_BIT
-endif::VK_NV_dedicated_allocation[]
-ifdef::VK_VERSION_1_2,VK_EXT_buffer_device_address,VK_KHR_buffer_device_address[]
-ifdef::VK_EXT_buffer_device_address[]
-  * [[VUID-VkBufferCreateInfo-deviceAddress-02604]]
-    If slink:VkBufferDeviceAddressCreateInfoEXT::pname:deviceAddress is not
-    zero, pname:flags must: include
-    ename:VK_BUFFER_CREATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT
-endif::VK_EXT_buffer_device_address[]
-ifdef::VK_VERSION_1_2,VK_KHR_buffer_device_address[]
-  * [[VUID-VkBufferCreateInfo-opaqueCaptureAddress-03337]]
-    If
-    slink:VkBufferOpaqueCaptureAddressCreateInfo::pname:opaqueCaptureAddress
-    is not zero, pname:flags must: include
-    ename:VK_BUFFER_CREATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT
-endif::VK_VERSION_1_2,VK_KHR_buffer_device_address[]
-  * [[VUID-VkBufferCreateInfo-flags-03338]]
-    If pname:flags includes
-    ename:VK_BUFFER_CREATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT, the
-    <<features-bufferDeviceAddressCaptureReplay,bufferDeviceAddressCaptureReplay>>
-    or
-    <<features-bufferDeviceAddressCaptureReplayEXT,sname:VkPhysicalDeviceBufferDeviceAddressFeaturesEXT::pname:bufferDeviceAddressCaptureReplay>>
-    feature must: be enabled
-endif::VK_VERSION_1_2,VK_EXT_buffer_device_address,VK_KHR_buffer_device_address[]
-ifdef::VK_KHR_video_decode_queue[]
-  * [[VUID-VkBufferCreateInfo-usage-04813]]
-    If pname:usage includes ename:VK_BUFFER_USAGE_VIDEO_DECODE_SRC_BIT_KHR,
-    ename:VK_BUFFER_USAGE_VIDEO_DECODE_DST_BIT_KHR, then the pname:pNext
-    chain must: include a valid slink:VkVideoProfilesKHR structure which
-    includes at least one slink:VkVideoProfileKHR with a decode
-    codec-operation
-endif::VK_KHR_video_decode_queue[]
-ifdef::VK_KHR_video_encode_queue[]
-  * [[VUID-VkBufferCreateInfo-usage-04814]]
-    If pname:usage includes ename:VK_BUFFER_USAGE_VIDEO_ENCODE_SRC_BIT_KHR,
-    ename:VK_BUFFER_USAGE_VIDEO_ENCODE_DST_BIT_KHR, then the pname:pNext
-    chain must: include a valid slink:VkVideoProfilesKHR structure which
-    includes at least one slink:VkVideoProfileKHR with a encode
-    codec-operation
-endif::VK_KHR_video_encode_queue[]
-ifdef::VK_KHR_maintenance4[]
-  * [[VUID-VkBufferCreateInfo-size-06409]]
-    pname:size must: be less than or equal to
-    slink:VkPhysicalDeviceMaintenance4PropertiesKHR::pname:maxBufferSize
-endif::VK_KHR_maintenance4[]
-****
-
-include::{generated}/validity/structs/VkBufferCreateInfo.txt[]
---
-
-[open,refpage='VkBufferUsageFlagBits',desc='Bitmask specifying allowed usage of a buffer',type='enums']
---
-Bits which can: be set in slink:VkBufferCreateInfo::pname:usage, specifying
-usage behavior of a buffer, are:
-
-include::{generated}/api/enums/VkBufferUsageFlagBits.txt[]
-
-  * ename:VK_BUFFER_USAGE_TRANSFER_SRC_BIT specifies that the buffer can: be
-    used as the source of a _transfer command_ (see the definition of
-    <<synchronization-pipeline-stages-transfer,
-    ename:VK_PIPELINE_STAGE_TRANSFER_BIT>>).
-  * ename:VK_BUFFER_USAGE_TRANSFER_DST_BIT specifies that the buffer can: be
-    used as the destination of a transfer command.
-  * ename:VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT specifies that the buffer
-    can: be used to create a sname:VkBufferView suitable for occupying a
-    sname:VkDescriptorSet slot of type
-    ename:VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER.
-  * ename:VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT specifies that the buffer
-    can: be used to create a sname:VkBufferView suitable for occupying a
-    sname:VkDescriptorSet slot of type
-    ename:VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER.
-  * ename:VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT specifies that the buffer can:
-    be used in a sname:VkDescriptorBufferInfo suitable for occupying a
-    sname:VkDescriptorSet slot either of type
-    ename:VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER or
-    ename:VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC.
-  * ename:VK_BUFFER_USAGE_STORAGE_BUFFER_BIT specifies that the buffer can:
-    be used in a sname:VkDescriptorBufferInfo suitable for occupying a
-    sname:VkDescriptorSet slot either of type
-    ename:VK_DESCRIPTOR_TYPE_STORAGE_BUFFER or
-    ename:VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC.
-  * ename:VK_BUFFER_USAGE_INDEX_BUFFER_BIT specifies that the buffer is
-    suitable for passing as the pname:buffer parameter to
-    flink:vkCmdBindIndexBuffer.
-  * ename:VK_BUFFER_USAGE_VERTEX_BUFFER_BIT specifies that the buffer is
-    suitable for passing as an element of the pname:pBuffers array to
-    flink:vkCmdBindVertexBuffers.
-  * ename:VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT specifies that the buffer is
-    suitable for passing as the pname:buffer parameter to
-    flink:vkCmdDrawIndirect, flink:vkCmdDrawIndexedIndirect,
-ifdef::VK_NV_mesh_shader[]
-    flink:vkCmdDrawMeshTasksIndirectNV,
-    flink:vkCmdDrawMeshTasksIndirectCountNV,
-endif::VK_NV_mesh_shader[]
-    or flink:vkCmdDispatchIndirect.
-ifdef::VK_NV_device_generated_commands[]
-    It is also suitable for passing as the pname:buffer member of
-    sname:VkIndirectCommandsStreamNV, or pname:sequencesCountBuffer or
-    pname:sequencesIndexBuffer or pname:preprocessedBuffer member of
-    sname:VkGeneratedCommandsInfoNV
-endif::VK_NV_device_generated_commands[]
-ifdef::VK_EXT_conditional_rendering[]
-  * ename:VK_BUFFER_USAGE_CONDITIONAL_RENDERING_BIT_EXT specifies that the
-    buffer is suitable for passing as the pname:buffer parameter to
-    flink:vkCmdBeginConditionalRenderingEXT.
-endif::VK_EXT_conditional_rendering[]
-ifdef::VK_EXT_transform_feedback[]
-  * ename:VK_BUFFER_USAGE_TRANSFORM_FEEDBACK_BUFFER_BIT_EXT specifies that
-    the buffer is suitable for using for binding as a transform feedback
-    buffer with flink:vkCmdBindTransformFeedbackBuffersEXT.
-  * ename:VK_BUFFER_USAGE_TRANSFORM_FEEDBACK_COUNTER_BUFFER_BIT_EXT
-    specifies that the buffer is suitable for using as a counter buffer with
-    flink:vkCmdBeginTransformFeedbackEXT and
-    flink:vkCmdEndTransformFeedbackEXT.
-endif::VK_EXT_transform_feedback[]
-ifdef::VK_NV_ray_tracing[]
-  * ename:VK_BUFFER_USAGE_RAY_TRACING_BIT_NV specifies that the buffer is
-    suitable for use in flink:vkCmdTraceRaysNV.
-endif::VK_NV_ray_tracing[]
-ifdef::VK_KHR_ray_tracing_pipeline[]
-  * ename:VK_BUFFER_USAGE_SHADER_BINDING_TABLE_BIT_KHR specifies that the
-    buffer is suitable for use as a <<shader-binding-table,Shader Binding
-    Table>>.
-endif::VK_KHR_ray_tracing_pipeline[]
-ifdef::VK_KHR_acceleration_structure[]
-  * ename:VK_BUFFER_USAGE_ACCELERATION_STRUCTURE_BUILD_INPUT_READ_ONLY_BIT_KHR
-    specifies that the buffer is suitable for use as a read-only input to an
-    <<acceleration-structure-building,acceleration structure build>>.
-  * ename:VK_BUFFER_USAGE_ACCELERATION_STRUCTURE_STORAGE_BIT_KHR specifies
-    that the buffer is suitable for storage space for a
-    slink:VkAccelerationStructureKHR.
-endif::VK_KHR_acceleration_structure[]
-ifdef::VK_VERSION_1_2,VK_EXT_buffer_device_address,VK_KHR_buffer_device_address[]
-  * ename:VK_BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT specifies that the
-    buffer can: be used to retrieve a buffer device address via
-    flink:vkGetBufferDeviceAddress and use that address to access the
-    buffer's memory from a shader.
-endif::VK_VERSION_1_2,VK_EXT_buffer_device_address,VK_KHR_buffer_device_address[]
-ifdef::VK_KHR_video_decode_queue[]
-  * ename:VK_BUFFER_USAGE_VIDEO_DECODE_SRC_BIT_KHR specifies that the buffer
-    can: be used as the source bitstream buffer in a
-    <<video-decode-operations, video decode operation>>.
-  * ename:VK_BUFFER_USAGE_VIDEO_DECODE_DST_BIT_KHR specifies that the buffer
-    can: be used as the destination status buffer in a
-    <<video-decode-operations, video decode operation>>.
-endif::VK_KHR_video_decode_queue[]
-ifdef::VK_KHR_video_encode_queue[]
-  * ename:VK_BUFFER_USAGE_VIDEO_ENCODE_DST_BIT_KHR specifies that the buffer
-    can: be used as the destination bitstream buffer in a
-    <<video-encode-operations, video encode operation>>.
-  * ename:VK_BUFFER_USAGE_VIDEO_ENCODE_DST_BIT_KHR specifies that the buffer
-    can: be used as the destination status buffer in a
-    <<video-encode-operations, video encode operation>>.
-endif::VK_KHR_video_encode_queue[]
---
-
-[open,refpage='VkBufferUsageFlags',desc='Bitmask of VkBufferUsageFlagBits',type='flags']
---
-include::{generated}/api/flags/VkBufferUsageFlags.txt[]
-
-tname:VkBufferUsageFlags is a bitmask type for setting a mask of zero or
-more elink:VkBufferUsageFlagBits.
---
-
-[open,refpage='VkBufferCreateFlagBits',desc='Bitmask specifying additional parameters of a buffer',type='enums']
---
-Bits which can: be set in slink:VkBufferCreateInfo::pname:flags, specifying
-additional parameters of a buffer, are:
-
-include::{generated}/api/enums/VkBufferCreateFlagBits.txt[]
-
-  * ename:VK_BUFFER_CREATE_SPARSE_BINDING_BIT specifies that the buffer will
-    be backed using sparse memory binding.
-  * ename:VK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT specifies that the buffer
-    can: be partially backed using sparse memory binding.
-    Buffers created with this flag must: also be created with the
-    ename:VK_BUFFER_CREATE_SPARSE_BINDING_BIT flag.
-  * ename:VK_BUFFER_CREATE_SPARSE_ALIASED_BIT specifies that the buffer will
-    be backed using sparse memory binding with memory ranges that might also
-    simultaneously be backing another buffer (or another portion of the same
-    buffer).
-    Buffers created with this flag must: also be created with the
-    ename:VK_BUFFER_CREATE_SPARSE_BINDING_BIT flag.
-ifdef::VK_VERSION_1_1[]
-  * ename:VK_BUFFER_CREATE_PROTECTED_BIT specifies that the buffer is a
-    protected buffer.
-endif::VK_VERSION_1_1[]
-ifdef::VK_VERSION_1_2,VK_EXT_buffer_device_address,VK_KHR_buffer_device_address[]
-  * ename:VK_BUFFER_CREATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT specifies that
-    the buffer's address can: be saved and reused on a subsequent run (e.g.
-    for trace capture and replay), see
-    slink:VkBufferOpaqueCaptureAddressCreateInfo for more detail.
-endif::VK_VERSION_1_2,VK_EXT_buffer_device_address,VK_KHR_buffer_device_address[]
-
-See <<sparsememory-sparseresourcefeatures,Sparse Resource Features>> and
-<<features,Physical Device Features>> for details of the sparse memory
-features supported on a device.
---
-
-[open,refpage='VkBufferCreateFlags',desc='Bitmask of VkBufferCreateFlagBits',type='flags']
---
-include::{generated}/api/flags/VkBufferCreateFlags.txt[]
-
-tname:VkBufferCreateFlags is a bitmask type for setting a mask of zero or
-more elink:VkBufferCreateFlagBits.
---
-
-ifdef::VK_NV_dedicated_allocation[]
-[open,refpage='VkDedicatedAllocationBufferCreateInfoNV',desc='Specify that a buffer is bound to a dedicated memory resource',type='structs']
---
-If the pname:pNext chain includes a
-sname:VkDedicatedAllocationBufferCreateInfoNV structure, then that structure
-includes an enable controlling whether the buffer will have a dedicated
-memory allocation bound to it.
-
-The sname:VkDedicatedAllocationBufferCreateInfoNV structure is defined as:
-
-include::{generated}/api/structs/VkDedicatedAllocationBufferCreateInfoNV.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:dedicatedAllocation specifies whether the buffer will have a
-    dedicated allocation bound to it.
-
-include::{generated}/validity/structs/VkDedicatedAllocationBufferCreateInfoNV.txt[]
---
-endif::VK_NV_dedicated_allocation[]
-
-ifdef::VK_VERSION_1_1,VK_KHR_external_memory[]
-[open,refpage='VkExternalMemoryBufferCreateInfo',desc='Specify that a buffer may be backed by external memory',type='structs']
---
-To define a set of external memory handle types that may: be used as backing
-store for a buffer, add a slink:VkExternalMemoryBufferCreateInfo structure
-to the pname:pNext chain of the slink:VkBufferCreateInfo structure.
-The sname:VkExternalMemoryBufferCreateInfo structure is defined as:
-
-include::{generated}/api/structs/VkExternalMemoryBufferCreateInfo.txt[]
-
-ifdef::VK_KHR_external_memory[]
-or the equivalent
-
-include::{generated}/api/structs/VkExternalMemoryBufferCreateInfoKHR.txt[]
-endif::VK_KHR_external_memory[]
-
-[NOTE]
-.Note
-====
-A sname:VkExternalMemoryBufferCreateInfo structure with a non-zero
-pname:handleTypes field must be included in the creation parameters for a
-buffer that will be bound to memory that is either exported or imported.
-====
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:handleTypes is zero, or a bitmask of
-    elink:VkExternalMemoryHandleTypeFlagBits specifying one or more external
-    memory handle types.
-
-include::{generated}/validity/structs/VkExternalMemoryBufferCreateInfo.txt[]
---
-endif::VK_VERSION_1_1,VK_KHR_external_memory[]
-
-ifdef::VK_VERSION_1_2,VK_KHR_buffer_device_address[]
-[open,refpage='VkBufferOpaqueCaptureAddressCreateInfo',desc='Request a specific address for a buffer',type='structs',alias='VkBufferOpaqueCaptureAddressCreateInfoKHR']
---
-To request a specific device address for a buffer, add a
-slink:VkBufferOpaqueCaptureAddressCreateInfo structure to the pname:pNext
-chain of the slink:VkBufferCreateInfo structure.
-The sname:VkBufferOpaqueCaptureAddressCreateInfo structure is defined as:
-
-include::{generated}/api/structs/VkBufferOpaqueCaptureAddressCreateInfo.txt[]
-
-ifdef::VK_KHR_buffer_device_address[]
-or the equivalent
-
-include::{generated}/api/structs/VkBufferOpaqueCaptureAddressCreateInfoKHR.txt[]
-endif::VK_KHR_buffer_device_address[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:opaqueCaptureAddress is the opaque capture address requested for
-    the buffer.
-
-If pname:opaqueCaptureAddress is zero, no specific address is requested.
-
-If pname:opaqueCaptureAddress is not zero, then it should: be an address
-retrieved from flink:vkGetBufferOpaqueCaptureAddress for an identically
-created buffer on the same implementation.
-
-If this structure is not present, it is as if pname:opaqueCaptureAddress is
-zero.
-
-Apps should: avoid creating buffers with app-provided addresses and
-implementation-provided addresses in the same process, to reduce the
-likelihood of ename:VK_ERROR_INVALID_OPAQUE_CAPTURE_ADDRESS errors.
-
-[NOTE]
-.Note
-====
-The expected usage for this is that a trace capture/replay tool will add the
-ename:VK_BUFFER_CREATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT flag to all buffers
-that use ename:VK_BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT, and during capture
-will save the queried opaque device addresses in the trace.
-During replay, the buffers will be created specifying the original address
-so any address values stored in the trace data will remain valid.
-
-Implementations are expected to separate such buffers in the GPU address
-space so normal allocations will avoid using these addresses.
-Apps/tools should avoid mixing app-provided and implementation-provided
-addresses for buffers created with
-ename:VK_BUFFER_CREATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT, to avoid address
-space allocation conflicts.
-====
-
-include::{generated}/validity/structs/VkBufferOpaqueCaptureAddressCreateInfo.txt[]
---
-endif::VK_VERSION_1_2,VK_KHR_buffer_device_address[]
-
-ifdef::VK_EXT_buffer_device_address[]
-[open,refpage='VkBufferDeviceAddressCreateInfoEXT',desc='Request a specific address for a buffer',type='structs']
---
-ifdef::VK_VERSION_1_2,VK_KHR_buffer_device_address[]
-Alternatively, to
-endif::VK_VERSION_1_2,VK_KHR_buffer_device_address[]
-ifndef::VK_VERSION_1_2,VK_KHR_buffer_device_address[]
-To
-endif::VK_VERSION_1_2,VK_KHR_buffer_device_address[]
-request a specific device address for a buffer, add a
-slink:VkBufferDeviceAddressCreateInfoEXT structure to the pname:pNext chain
-of the slink:VkBufferCreateInfo structure.
-The sname:VkBufferDeviceAddressCreateInfoEXT structure is defined as:
-
-include::{generated}/api/structs/VkBufferDeviceAddressCreateInfoEXT.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:deviceAddress is the device address requested for the buffer.
-
-If pname:deviceAddress is zero, no specific address is requested.
-
-If pname:deviceAddress is not zero, then it must: be an address retrieved
-from an identically created buffer on the same implementation.
-The buffer must: also be bound to an identically created
-sname:VkDeviceMemory object.
-
-If this structure is not present, it is as if pname:deviceAddress is zero.
-
-Apps should: avoid creating buffers with app-provided addresses and
-implementation-provided addresses in the same process, to reduce the
-likelihood of ename:VK_ERROR_INVALID_DEVICE_ADDRESS_EXT errors.
-
-include::{generated}/validity/structs/VkBufferDeviceAddressCreateInfoEXT.txt[]
---
-endif::VK_EXT_buffer_device_address[]
-
-
-ifdef::VK_FUCHSIA_buffer_collection[]
-[open,refpage='VkBufferCollectionBufferCreateInfoFUCHSIA',desc='Create a VkBufferCollectionFUCHSIA-compatible VkBuffer',type='structs']
---
-The sname:VkBufferCollectionBufferCreateInfoFUCHSIA structure is defined as:
-
-include::{generated}/api/structs/VkBufferCollectionBufferCreateInfoFUCHSIA.txt[]
-
-  * pname:sType is the type of this structure
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure
-  * pname:collection is the slink:VkBufferCollectionFUCHSIA handle
-  * pname:index is the index of the buffer in the buffer collection from
-    which the memory will be imported
-
-.Valid Usage
-****
-  * [[VUID-VkBufferCollectionBufferCreateInfoFUCHSIA-index-06388]]
-    pname:index must: be less than
-    slink:VkBufferCollectionPropertiesFUCHSIA::pname:bufferCount
-****
-
-include::{generated}/validity/structs/VkBufferCollectionBufferCreateInfoFUCHSIA.txt[]
---
-endif::VK_FUCHSIA_buffer_collection[]
-
-[open,refpage='vkDestroyBuffer',desc='Destroy a buffer object',type='protos']
---
-To destroy a buffer, call:
-
-include::{generated}/api/protos/vkDestroyBuffer.txt[]
-
-  * pname:device is the logical device that destroys the buffer.
-  * pname:buffer is the buffer to destroy.
-  * pname:pAllocator controls host memory allocation as described in the
-    <<memory-allocation, Memory Allocation>> chapter.
-
-.Valid Usage
-****
-  * [[VUID-vkDestroyBuffer-buffer-00922]]
-    All submitted commands that refer to pname:buffer, either directly or
-    via a sname:VkBufferView, must: have completed execution
-  * [[VUID-vkDestroyBuffer-buffer-00923]]
-    If sname:VkAllocationCallbacks were provided when pname:buffer was
-    created, a compatible set of callbacks must: be provided here
-  * [[VUID-vkDestroyBuffer-buffer-00924]]
-    If no sname:VkAllocationCallbacks were provided when pname:buffer was
-    created, pname:pAllocator must: be `NULL`
-****
-
-include::{generated}/validity/protos/vkDestroyBuffer.txt[]
---
-
-
-[[resources-buffer-views]]
-== Buffer Views
-
-[open,refpage='VkBufferView',desc='Opaque handle to a buffer view object',type='handles']
---
-A _buffer view_ represents a contiguous range of a buffer and a specific
-format to be used to interpret the data.
-Buffer views are used to enable shaders to access buffer contents
-interpreted as formatted data.
-In order to create a valid buffer view, the buffer must: have been created
-with at least one of the following usage flags:
-
-  * ename:VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT
-  * ename:VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT
-
-Buffer views are represented by sname:VkBufferView handles:
-
-include::{generated}/api/handles/VkBufferView.txt[]
---
-
-[open,refpage='vkCreateBufferView',desc='Create a new buffer view object',type='protos']
---
-To create a buffer view, call:
-
-include::{generated}/api/protos/vkCreateBufferView.txt[]
-
-  * pname:device is the logical device that creates the buffer view.
-  * pname:pCreateInfo is a pointer to a slink:VkBufferViewCreateInfo
-    structure containing parameters to be used to create the buffer view.
-  * pname:pAllocator controls host memory allocation as described in the
-    <<memory-allocation, Memory Allocation>> chapter.
-  * pname:pView is a pointer to a slink:VkBufferView handle in which the
-    resulting buffer view object is returned.
-
-include::{generated}/validity/protos/vkCreateBufferView.txt[]
---
-
-[open,refpage='VkBufferViewCreateInfo',desc='Structure specifying parameters of a newly created buffer view',type='structs']
---
-The sname:VkBufferViewCreateInfo structure is defined as:
-
-include::{generated}/api/structs/VkBufferViewCreateInfo.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:flags is reserved for future use.
-  * pname:buffer is a slink:VkBuffer on which the view will be created.
-  * pname:format is a elink:VkFormat describing the format of the data
-    elements in the buffer.
-  * pname:offset is an offset in bytes from the base address of the buffer.
-    Accesses to the buffer view from shaders use addressing that is relative
-    to this starting offset.
-  * pname:range is a size in bytes of the buffer view.
-    If pname:range is equal to ename:VK_WHOLE_SIZE, the range from
-    pname:offset to the end of the buffer is used.
-    If ename:VK_WHOLE_SIZE is used and the remaining size of the buffer is
-    not a multiple of the <<texel-block-size, texel block size>> of
-    pname:format, the nearest smaller multiple is used.
-
-.Valid Usage
-****
-  * [[VUID-VkBufferViewCreateInfo-offset-00925]]
-    pname:offset must: be less than the size of pname:buffer
-ifndef::VK_EXT_texel_buffer_alignment[]
-  * [[VUID-VkBufferViewCreateInfo-offset-00926]]
-    pname:offset must: be a multiple of
-    sname:VkPhysicalDeviceLimits::pname:minTexelBufferOffsetAlignment
-endif::VK_EXT_texel_buffer_alignment[]
-  * [[VUID-VkBufferViewCreateInfo-range-00928]]
-    If pname:range is not equal to ename:VK_WHOLE_SIZE, pname:range must: be
-    greater than `0`
-  * [[VUID-VkBufferViewCreateInfo-range-00929]]
-    If pname:range is not equal to ename:VK_WHOLE_SIZE, pname:range must: be
-    an integer multiple of the texel block size of pname:format
-  * [[VUID-VkBufferViewCreateInfo-range-00930]]
-    If pname:range is not equal to ename:VK_WHOLE_SIZE, the number of texel
-    buffer elements given by [eq]#({lfloor}pname:range / (texel block
-    size){rfloor} {times} (texels per block))# where texel block size and
-    texels per block are as defined in the <<formats-compatibility,
-    Compatible Formats>> table for pname:format, must: be less than or equal
-    to sname:VkPhysicalDeviceLimits::pname:maxTexelBufferElements
-  * [[VUID-VkBufferViewCreateInfo-offset-00931]]
-    If pname:range is not equal to ename:VK_WHOLE_SIZE, the sum of
-    pname:offset and pname:range must: be less than or equal to the size of
-    pname:buffer
-  * [[VUID-VkBufferViewCreateInfo-range-04059]]
-    If pname:range is equal to ename:VK_WHOLE_SIZE, the number of texel
-    buffer elements given by [eq]#({lfloor}(size - pname:offset) / (texel
-    block size){rfloor} {times} (texels per block))# where size is the size
-    of pname:buffer, and texel block size and texels per block are as
-    defined in the <<formats-compatibility, Compatible Formats>> table for
-    pname:format, must: be less than or equal to
-    sname:VkPhysicalDeviceLimits::pname:maxTexelBufferElements
-  * [[VUID-VkBufferViewCreateInfo-buffer-00932]]
-    pname:buffer must: have been created with a pname:usage value containing
-    at least one of ename:VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT or
-    ename:VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT
-  * [[VUID-VkBufferViewCreateInfo-buffer-00933]]
-    If pname:buffer was created with pname:usage containing
-    ename:VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT, pname:format must: be
-    supported for uniform texel buffers, as specified by the
-    ename:VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT flag in
-    sname:VkFormatProperties::pname:bufferFeatures returned by
-    flink:vkGetPhysicalDeviceFormatProperties
-  * [[VUID-VkBufferViewCreateInfo-buffer-00934]]
-    If pname:buffer was created with pname:usage containing
-    ename:VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT, pname:format must: be
-    supported for storage texel buffers, as specified by the
-    ename:VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT flag in
-    sname:VkFormatProperties::pname:bufferFeatures returned by
-    flink:vkGetPhysicalDeviceFormatProperties
-  * [[VUID-VkBufferViewCreateInfo-buffer-00935]]
-    If pname:buffer is non-sparse then it must: be bound completely and
-    contiguously to a single sname:VkDeviceMemory object
-ifdef::VK_EXT_texel_buffer_alignment[]
-  * [[VUID-VkBufferViewCreateInfo-offset-02749]]
-    If the <<features-texelBufferAlignment,texelBufferAlignment>> feature is
-    not enabled, pname:offset must: be a multiple of
-    sname:VkPhysicalDeviceLimits::pname:minTexelBufferOffsetAlignment
-  * [[VUID-VkBufferViewCreateInfo-buffer-02750]]
-    If the <<features-texelBufferAlignment,texelBufferAlignment>> feature is
-    enabled and if pname:buffer was created with pname:usage containing
-    ename:VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT, pname:offset must: be a
-    multiple of the lesser of
-    slink:VkPhysicalDeviceTexelBufferAlignmentPropertiesEXT::pname:storageTexelBufferOffsetAlignmentBytes
-    or, if
-    slink:VkPhysicalDeviceTexelBufferAlignmentPropertiesEXT::pname:storageTexelBufferOffsetSingleTexelAlignment
-    is ename:VK_TRUE, the size of a texel of the requested pname:format.
-    If the size of a texel is a multiple of three bytes, then the size of a
-    single component of pname:format is used instead
-  * [[VUID-VkBufferViewCreateInfo-buffer-02751]]
-    If the <<features-texelBufferAlignment,texelBufferAlignment>> feature is
-    enabled and if pname:buffer was created with pname:usage containing
-    ename:VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT, pname:offset must: be a
-    multiple of the lesser of
-    slink:VkPhysicalDeviceTexelBufferAlignmentPropertiesEXT::pname:uniformTexelBufferOffsetAlignmentBytes
-    or, if
-    slink:VkPhysicalDeviceTexelBufferAlignmentPropertiesEXT::pname:uniformTexelBufferOffsetSingleTexelAlignment
-    is ename:VK_TRUE, the size of a texel of the requested pname:format.
-    If the size of a texel is a multiple of three bytes, then the size of a
-    single component of pname:format is used instead
-endif::VK_EXT_texel_buffer_alignment[]
-****
-
-include::{generated}/validity/structs/VkBufferViewCreateInfo.txt[]
---
-
-[open,refpage='VkBufferViewCreateFlags',desc='Reserved for future use',type='flags']
---
-include::{generated}/api/flags/VkBufferViewCreateFlags.txt[]
-
-tname:VkBufferViewCreateFlags is a bitmask type for setting a mask, but is
-currently reserved for future use.
---
-
-[open,refpage='vkDestroyBufferView',desc='Destroy a buffer view object',type='protos']
---
-To destroy a buffer view, call:
-
-include::{generated}/api/protos/vkDestroyBufferView.txt[]
-
-  * pname:device is the logical device that destroys the buffer view.
-  * pname:bufferView is the buffer view to destroy.
-  * pname:pAllocator controls host memory allocation as described in the
-    <<memory-allocation, Memory Allocation>> chapter.
-
-.Valid Usage
-****
-  * [[VUID-vkDestroyBufferView-bufferView-00936]]
-    All submitted commands that refer to pname:bufferView must: have
-    completed execution
-  * [[VUID-vkDestroyBufferView-bufferView-00937]]
-    If sname:VkAllocationCallbacks were provided when pname:bufferView was
-    created, a compatible set of callbacks must: be provided here
-  * [[VUID-vkDestroyBufferView-bufferView-00938]]
-    If no sname:VkAllocationCallbacks were provided when pname:bufferView
-    was created, pname:pAllocator must: be `NULL`
-****
-
-include::{generated}/validity/protos/vkDestroyBufferView.txt[]
---
-
-
-[[resources-images]]
-== Images
-
-[open,refpage='VkImage',desc='Opaque handle to an image object',type='handles']
---
-Images represent multidimensional - up to 3 - arrays of data which can: be
-used for various purposes (e.g. attachments, textures), by binding them to a
-graphics or compute pipeline via descriptor sets, or by directly specifying
-them as parameters to certain commands.
-
-Images are represented by sname:VkImage handles:
-
-include::{generated}/api/handles/VkImage.txt[]
---
-
-[open,refpage='vkCreateImage',desc='Create a new image object',type='protos']
---
-To create images, call:
-
-include::{generated}/api/protos/vkCreateImage.txt[]
-
-  * pname:device is the logical device that creates the image.
-  * pname:pCreateInfo is a pointer to a slink:VkImageCreateInfo structure
-    containing parameters to be used to create the image.
-  * pname:pAllocator controls host memory allocation as described in the
-    <<memory-allocation, Memory Allocation>> chapter.
-  * pname:pImage is a pointer to a slink:VkImage handle in which the
-    resulting image object is returned.
-
-.Valid Usage
-****
-  * [[VUID-vkCreateImage-flags-00939]]
-    If the pname:flags member of pname:pCreateInfo includes
-    ename:VK_IMAGE_CREATE_SPARSE_BINDING_BIT, creating this sname:VkImage
-    must: not cause the total required sparse memory for all currently valid
-    sparse resources on the device to exceed
-    sname:VkPhysicalDeviceLimits::pname:sparseAddressSpaceSize
-ifdef::VK_FUCHSIA_buffer_collection[]
-  * [[VUID-vkCreateImage-pNext-06389]]
-    If a slink:VkBufferCollectionImageCreateInfoFUCHSIA has been chained to
-    pname:pNext, pname:pCreateInfo must: match the
-    <<sysmem-chosen-create-infos,Sysmem chosen sname:VkImageCreateInfo>>
-    excepting members slink:VkImageCreateInfo::pname:extent and
-    slink:VkImageCreateInfo::pname:usage in the match criteria
-endif::VK_FUCHSIA_buffer_collection[]
-****
-
-include::{generated}/validity/protos/vkCreateImage.txt[]
---
-
-[open,refpage='VkImageCreateInfo',desc='Structure specifying the parameters of a newly created image object',type='structs']
---
-The sname:VkImageCreateInfo structure is defined as:
-
-include::{generated}/api/structs/VkImageCreateInfo.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:flags is a bitmask of elink:VkImageCreateFlagBits describing
-    additional parameters of the image.
-  * pname:imageType is a elink:VkImageType value specifying the basic
-    dimensionality of the image.
-    Layers in array textures do not count as a dimension for the purposes of
-    the image type.
-  * pname:format is a elink:VkFormat describing the format and type of the
-    texel blocks that will be contained in the image.
-  * pname:extent is a slink:VkExtent3D describing the number of data
-    elements in each dimension of the base level.
-  * pname:mipLevels describes the number of levels of detail available for
-    minified sampling of the image.
-  * pname:arrayLayers is the number of layers in the image.
-  * pname:samples is a elink:VkSampleCountFlagBits value specifying the
-    number of <<primsrast-multisampling,samples per texel>>.
-  * pname:tiling is a elink:VkImageTiling value specifying the tiling
-    arrangement of the texel blocks in memory.
-  * pname:usage is a bitmask of elink:VkImageUsageFlagBits describing the
-    intended usage of the image.
-  * pname:sharingMode is a elink:VkSharingMode value specifying the sharing
-    mode of the image when it will be accessed by multiple queue families.
-  * pname:queueFamilyIndexCount is the number of entries in the
-    pname:pQueueFamilyIndices array.
-  * pname:pQueueFamilyIndices is a pointer to an array of queue families
-    that will access this image.
-    It is ignored if pname:sharingMode is not
-    ename:VK_SHARING_MODE_CONCURRENT.
-  * pname:initialLayout is a elink:VkImageLayout value specifying the
-    initial elink:VkImageLayout of all image subresources of the image.
-    See <<resources-image-layouts,Image Layouts>>.
-
-Images created with pname:tiling equal to ename:VK_IMAGE_TILING_LINEAR have
-further restrictions on their limits and capabilities compared to images
-created with pname:tiling equal to ename:VK_IMAGE_TILING_OPTIMAL.
-Creation of images with tiling ename:VK_IMAGE_TILING_LINEAR may: not be
-supported unless other parameters meet all of the constraints:
-
-  * pname:imageType is ename:VK_IMAGE_TYPE_2D
-  * pname:format is not a depth/stencil format
-  * pname:mipLevels is 1
-  * pname:arrayLayers is 1
-  * pname:samples is ename:VK_SAMPLE_COUNT_1_BIT
-  * pname:usage only includes ename:VK_IMAGE_USAGE_TRANSFER_SRC_BIT and/or
-    ename:VK_IMAGE_USAGE_TRANSFER_DST_BIT
-
-ifdef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
-Images created with one of the <<formats-requiring-sampler-ycbcr-conversion,
-formats that require a sampler Y'C~B~C~R~ conversion>>, have further
-restrictions on their limits and capabilities compared to images created
-with other formats.
-Creation of images with a format requiring
-<<formats-requiring-sampler-ycbcr-conversion, {YCbCr} conversion>> may: not
-be supported unless other parameters meet all of the constraints:
-
-  * pname:imageType is ename:VK_IMAGE_TYPE_2D
-  * pname:mipLevels is 1
-  * pname:arrayLayers is 1
-  * pname:samples is ename:VK_SAMPLE_COUNT_1_BIT
-endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
-
-Implementations may: support additional limits and capabilities beyond those
-listed above.
-
-To determine the set of valid pname:usage bits for a given format, call
-flink:vkGetPhysicalDeviceFormatProperties.
-
-If the size of the resultant image would exceed pname:maxResourceSize, then
-flink:vkCreateImage must: fail and return
-ename:VK_ERROR_OUT_OF_DEVICE_MEMORY.
-This failure may: occur even when all image creation parameters satisfy
-their valid usage requirements.
-
-ifdef::VK_VERSION_1_1,VK_KHR_maintenance2[]
-[NOTE]
-.Note
-====
-For images created without ename:VK_IMAGE_CREATE_EXTENDED_USAGE_BIT a
-pname:usage bit is valid if it is supported for the format the image is
-created with.
-
-For images created with ename:VK_IMAGE_CREATE_EXTENDED_USAGE_BIT a
-pname:usage bit is valid if it is supported for at least one of the formats
-a sname:VkImageView created from the image can: have (see
-<<resources-image-views,Image Views>> for more detail).
-====
-endif::VK_VERSION_1_1,VK_KHR_maintenance2[]
-
-[[resources-image-creation-limits]]
-.Image Creation Limits
-****
-Valid values for some image creation parameters are limited by a numerical
-upper bound or by inclusion in a bitset.
-For example, slink:VkImageCreateInfo::pname:arrayLayers is limited by
-pname:imageCreateMaxArrayLayers, defined below; and
-slink:VkImageCreateInfo::pname:samples is limited by
-pname:imageCreateSampleCounts, also defined below.
-
-Several limiting values are defined below, as well as assisting values from
-which the limiting values are derived.
-The limiting values are referenced by the relevant valid usage statements of
-slink:VkImageCreateInfo.
-
-ifdef::VK_EXT_image_drm_format_modifier[]
-  * Let `uint64_t imageCreateDrmFormatModifiers[]` be the set of
-    <<glossary-drm-format-modifier,Linux DRM format modifiers>> that the
-    resultant image may: have.
-  ** If pname:tiling is not ename:VK_IMAGE_TILING_DRM_FORMAT_MODIFIER_EXT,
-     then pname:imageCreateDrmFormatModifiers is empty.
-  ** If slink:VkImageCreateInfo::pname:pNext contains
-     slink:VkImageDrmFormatModifierExplicitCreateInfoEXT, then
-     pname:imageCreateDrmFormatModifiers contains exactly one modifier,
-     slink:VkImageDrmFormatModifierExplicitCreateInfoEXT::pname:drmFormatModifier.
-  ** If slink:VkImageCreateInfo::pname:pNext contains
-     slink:VkImageDrmFormatModifierListCreateInfoEXT, then
-     pname:imageCreateDrmFormatModifiers contains the entire array
-     slink:VkImageDrmFormatModifierListCreateInfoEXT::pname:pDrmFormatModifiers.
-endif::VK_EXT_image_drm_format_modifier[]
-
-  * Let `VkBool32 imageCreateMaybeLinear` indicate if the resultant image
-    may be <<glossary-linear-resource,linear>>.
-ifndef::VK_EXT_image_drm_format_modifier[]
-    (The definition below is trivial because certain extensions are disabled
-    in this build of the specification).
-endif::VK_EXT_image_drm_format_modifier[]
-  ** If pname:tiling is ename:VK_IMAGE_TILING_LINEAR, then
-     pname:imageCreateMaybeLinear is ename:VK_TRUE.
-  ** If pname:tiling is ename:VK_IMAGE_TILING_OPTIMAL, then
-     pname:imageCreateMaybeLinear is ename:VK_FALSE.
-ifdef::VK_EXT_image_drm_format_modifier[]
-  ** If pname:tiling is ename:VK_IMAGE_TILING_DRM_FORMAT_MODIFIER_EXT, then
-     pname:imageCreateMaybeLinear is ename:VK_TRUE if and only if
-     pname:imageCreateDrmFormatModifiers contains
-     etext:DRM_FORMAT_MOD_LINEAR.
-endif::VK_EXT_image_drm_format_modifier[]
-
-  * Let `VkFormatFeatureFlags imageCreateFormatFeatures` be the set of valid
-    _format features_ available during image creation.
-  ** If pname:tiling is ename:VK_IMAGE_TILING_LINEAR, then
-     pname:imageCreateFormatFeatures is the value of
-     slink:VkFormatProperties::pname:linearTilingFeatures found by calling
-     flink:vkGetPhysicalDeviceFormatProperties with parameter pname:format
-     equal to slink:VkImageCreateInfo::pname:format.
-  ** If pname:tiling is ename:VK_IMAGE_TILING_OPTIMAL,
-ifdef::VK_ANDROID_external_memory_android_hardware_buffer[]
-     and if the pname:pNext chain includes no slink:VkExternalFormatANDROID
-     structure with non-zero pname:externalFormat,
-endif::VK_ANDROID_external_memory_android_hardware_buffer[]
-     then pname:imageCreateFormatFeatures is the value of
-     slink:VkFormatProperties::pname:optimalTilingFeatures found by calling
-     flink:vkGetPhysicalDeviceFormatProperties with parameter pname:format
-     equal to slink:VkImageCreateInfo::pname:format.
-ifdef::VK_ANDROID_external_memory_android_hardware_buffer[]
-  ** If pname:tiling is ename:VK_IMAGE_TILING_OPTIMAL, and if the
-     pname:pNext chain includes a slink:VkExternalFormatANDROID structure
-     with non-zero pname:externalFormat, then
-     pname:imageCreateFormatFeatures is the value of
-     slink:VkAndroidHardwareBufferFormatPropertiesANDROID::pname:formatFeatures
-     obtained by flink:vkGetAndroidHardwareBufferPropertiesANDROID with a
-     matching pname:externalFormat value.
-endif::VK_ANDROID_external_memory_android_hardware_buffer[]
-ifdef::VK_FUCHSIA_buffer_collection[]
-  ** If the pname:pNext chain includes a
-     slink:VkBufferCollectionImageCreateInfoFUCHSIA structure, then
-     pname:imageCreateFormatFeatures is the value of
-     slink:VkBufferCollectionPropertiesFUCHSIA::pname:formatFeatures found
-     by calling flink:vkGetBufferCollectionPropertiesFUCHSIA with a
-     parameter pname:collection equal to
-     slink:VkBufferCollectionImageCreateInfoFUCHSIA::pname:collection
-endif::VK_FUCHSIA_buffer_collection[]
-ifdef::VK_EXT_image_drm_format_modifier[]
-  ** If pname:tiling is ename:VK_IMAGE_TILING_DRM_FORMAT_MODIFIER_EXT, then
-     the value of pname:imageCreateFormatFeatures is found by calling
-     flink:vkGetPhysicalDeviceFormatProperties2 with
-     slink:VkImageFormatProperties::pname:format equal to
-     slink:VkImageCreateInfo::pname:format and with
-     slink:VkDrmFormatModifierPropertiesListEXT chained into
-     slink:VkImageFormatProperties2; by collecting all members of the
-     returned array
-     slink:VkDrmFormatModifierPropertiesListEXT::pname:pDrmFormatModifierProperties
-     whose pname:drmFormatModifier belongs to
-     pname:imageCreateDrmFormatModifiers; and by taking the bitwise
-     intersection, over the collected array members, of
-     pname:drmFormatModifierTilingFeatures.
-     (The resultant pname:imageCreateFormatFeatures may: be empty).
-endif::VK_EXT_image_drm_format_modifier[]
-
-ifdef::VK_VERSION_1_1,VK_KHR_external_memory[]
-  * Let `VkImageFormatProperties2 imageCreateImageFormatPropertiesList[]` be
-ifdef::VK_ANDROID_external_memory_android_hardware_buffer[]
-    defined as follows.
-  ** If slink:VkImageCreateInfo::pname:pNext contains no
-     slink:VkExternalFormatANDROID structure with non-zero
-     pname:externalFormat, then pname:imageCreateImageFormatPropertiesList
-     is
-endif::VK_ANDROID_external_memory_android_hardware_buffer[]
-     the list of structures obtained by calling
-     flink:vkGetPhysicalDeviceImageFormatProperties2, possibly multiple
-     times, as follows:
-  *** The parameters slink:VkPhysicalDeviceImageFormatInfo2::pname:format,
-      pname:imageType, pname:tiling, pname:usage, and pname:flags must: be
-      equal to those in slink:VkImageCreateInfo.
-  *** If slink:VkImageCreateInfo::pname:pNext contains a
-      slink:VkExternalMemoryImageCreateInfo structure whose
-      pname:handleTypes is not `0`, then
-      slink:VkPhysicalDeviceImageFormatInfo2::pname:pNext must: contain a
-      slink:VkPhysicalDeviceExternalImageFormatInfo structure whose
-      pname:handleType is not `0`; and
-      flink:vkGetPhysicalDeviceImageFormatProperties2 must: be called for
-      each handle type in
-      slink:VkExternalMemoryImageCreateInfo::pname:handleTypes, successively
-      setting
-      slink:VkPhysicalDeviceExternalImageFormatInfo::pname:handleType on
-      each call.
-  *** If slink:VkImageCreateInfo::pname:pNext contains no
-      slink:VkExternalMemoryImageCreateInfo structure, or contains a
-      structure whose pname:handleTypes is `0`, then
-      slink:VkPhysicalDeviceImageFormatInfo2::pname:pNext must: either
-      contain no slink:VkPhysicalDeviceExternalImageFormatInfo structure, or
-      contain a structure whose pname:handleType is `0`.
-ifdef::VK_EXT_image_drm_format_modifier[]
-  *** If pname:tiling is ename:VK_IMAGE_TILING_DRM_FORMAT_MODIFIER_EXT, then
-      slink:VkPhysicalDeviceImageFormatInfo2::pname:pNext must: contain a
-      slink:VkPhysicalDeviceImageDrmFormatModifierInfoEXT structure where
-      pname:sharingMode is equal to
-      slink:VkImageCreateInfo::pname:sharingMode; and, if pname:sharingMode
-      is ename:VK_SHARING_MODE_CONCURRENT, then pname:queueFamilyIndexCount
-      and pname:pQueueFamilyIndices must: be equal to those in
-      slink:VkImageCreateInfo; and, if pname:flags contains
-      ename:VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT, then the
-      slink:VkImageFormatListCreateInfo structure included in the
-      pname:pNext chain of slink:VkPhysicalDeviceImageFormatInfo2 must: be
-      equivalent to the one included in the pname:pNext chain of
-      slink:VkImageCreateInfo; and
-      flink:vkGetPhysicalDeviceImageFormatProperties2 must: be called for
-      each modifier in pname:imageCreateDrmFormatModifiers, successively
-      setting
-      slink:VkPhysicalDeviceImageDrmFormatModifierInfoEXT::pname:drmFormatModifier
-      on each call.
-  *** If pname:tiling is not ename:VK_IMAGE_TILING_DRM_FORMAT_MODIFIER_EXT,
-      then slink:VkPhysicalDeviceImageFormatInfo2::pname:pNext must: contain
-      no slink:VkPhysicalDeviceImageDrmFormatModifierInfoEXT structure.
-endif::VK_EXT_image_drm_format_modifier[]
-  *** If any call to flink:vkGetPhysicalDeviceImageFormatProperties2 returns
-      an error, then pname:imageCreateImageFormatPropertiesList is defined
-      to be the empty list.
-ifdef::VK_ANDROID_external_memory_android_hardware_buffer[]
-  ** If slink:VkImageCreateInfo::pname:pNext contains a
-     slink:VkExternalFormatANDROID structure with non-zero
-     pname:externalFormat, then pname:imageCreateImageFormatPropertiesList
-     contains a single element where:
-  *** sname:VkImageFormatProperties::pname:maxMipLevels is
-      [eq]#{lfloor}log~2~(max(pname:extent.width, pname:extent.height,
-      pname:extent.depth)){rfloor} {plus} 1#.
-  *** sname:VkImageFormatProperties::pname:maxArrayLayers is
-      slink:VkPhysicalDeviceLimits::pname:maxImageArrayLayers.
-  *** Each component of sname:VkImageFormatProperties::pname:maxExtent is
-      slink:VkPhysicalDeviceLimits::pname:maxImageDimension2D.
-  *** sname:VkImageFormatProperties::pname:sampleCounts contains exactly
-      ename:VK_SAMPLE_COUNT_1_BIT.
-endif::VK_ANDROID_external_memory_android_hardware_buffer[]
-endif::VK_VERSION_1_1,VK_KHR_external_memory[]
-
-  * Let `uint32_t imageCreateMaxMipLevels` be
-ifndef::VK_VERSION_1_1,VK_KHR_external_memory[]
-    the value of slink:VkImageFormatProperties::pname:maxMipLevels found by
-    calling flink:vkGetPhysicalDeviceImageFormatProperties with parameters
-    pname:format, pname:imageType, pname:tiling, pname:usage, and
-    pname:flags equal to those in slink:VkImageCreateInfo.
-    If flink:vkGetPhysicalDeviceFormatProperties returns an error, then the
-    value of pname:imageCreateMaxMipLevels is undefined:.
-endif::VK_VERSION_1_1,VK_KHR_external_memory[]
-ifdef::VK_VERSION_1_1,VK_KHR_external_memory[]
-    the minimum value of slink:VkImageFormatProperties::pname:maxMipLevels
-    in pname:imageCreateImageFormatPropertiesList.
-    The value is undefined: if pname:imageCreateImageFormatPropertiesList is
-    empty.
-endif::VK_VERSION_1_1,VK_KHR_external_memory[]
-
-  * Let `uint32_t imageCreateMaxArrayLayers` be
-ifndef::VK_VERSION_1_1,VK_KHR_external_memory[]
-    defined analogously to pname:imageCreateMaxMipLevels.
-endif::VK_VERSION_1_1,VK_KHR_external_memory[]
-ifdef::VK_VERSION_1_1,VK_KHR_external_memory[]
-    the minimum value of slink:VkImageFormatProperties::pname:maxArrayLayers
-    in pname:imageCreateImageFormatPropertiesList.
-    The value is undefined: if pname:imageCreateImageFormatPropertiesList is
-    empty.
-endif::VK_VERSION_1_1,VK_KHR_external_memory[]
-
-  * Let `VkExtent3D imageCreateMaxExtent` be
-ifndef::VK_VERSION_1_1,VK_KHR_external_memory[]
-    defined analogously to pname:imageCreateMaxMipLevels.
-endif::VK_VERSION_1_1,VK_KHR_external_memory[]
-ifdef::VK_VERSION_1_1,VK_KHR_external_memory[]
-    the component-wise minimum over all
-    slink:VkImageFormatProperties::pname:maxExtent values in
-    pname:imageCreateImageFormatPropertiesList.
-    The value is undefined: if pname:imageCreateImageFormatPropertiesList is
-    empty.
-endif::VK_VERSION_1_1,VK_KHR_external_memory[]
-
-  * Let `VkSampleCountFlags imageCreateSampleCounts` be
-ifndef::VK_VERSION_1_1,VK_KHR_external_memory[]
-    defined analogously to pname:imageCreateMaxMipLevels.
-endif::VK_VERSION_1_1,VK_KHR_external_memory[]
-ifdef::VK_VERSION_1_1,VK_KHR_external_memory[]
-    the intersection of each
-    slink:VkImageFormatProperties::pname:sampleCounts in
-    pname:imageCreateImageFormatPropertiesList.
-    The value is undefined: if pname:imageCreateImageFormatPropertiesList is
-    empty.
-endif::VK_VERSION_1_1,VK_KHR_external_memory[]
-****
-
-.Valid Usage
-****
-  * [[VUID-VkImageCreateInfo-imageCreateMaxMipLevels-02251]]
-    Each of the following values (as described in
-    <<resources-image-creation-limits,Image Creation Limits>>) must: not be
-    undefined: : pname:imageCreateMaxMipLevels,
-    pname:imageCreateMaxArrayLayers, pname:imageCreateMaxExtent, and
-    pname:imageCreateSampleCounts
-  * [[VUID-VkImageCreateInfo-sharingMode-00941]]
-    If pname:sharingMode is ename:VK_SHARING_MODE_CONCURRENT,
-    pname:pQueueFamilyIndices must: be a valid pointer to an array of
-    pname:queueFamilyIndexCount code:uint32_t values
-  * [[VUID-VkImageCreateInfo-sharingMode-00942]]
-    If pname:sharingMode is ename:VK_SHARING_MODE_CONCURRENT,
-    pname:queueFamilyIndexCount must: be greater than `1`
-ifndef::VK_VERSION_1_1,VK_KHR_get_physical_device_properties2[]
-  * [[VUID-VkImageCreateInfo-sharingMode-01392]]
-    If pname:sharingMode is ename:VK_SHARING_MODE_CONCURRENT, each element
-    of pname:pQueueFamilyIndices must: be unique and must: be less than
-    pname:pQueueFamilyPropertyCount returned by
-    flink:vkGetPhysicalDeviceQueueFamilyProperties for the
-    pname:physicalDevice that was used to create pname:device
-endif::VK_VERSION_1_1,VK_KHR_get_physical_device_properties2[]
-ifdef::VK_VERSION_1_1,VK_KHR_get_physical_device_properties2[]
-  * [[VUID-VkImageCreateInfo-sharingMode-01420]]
-    If pname:sharingMode is ename:VK_SHARING_MODE_CONCURRENT, each element
-    of pname:pQueueFamilyIndices must: be unique and must: be less than
-    pname:pQueueFamilyPropertyCount returned by either
-    flink:vkGetPhysicalDeviceQueueFamilyProperties or
-    flink:vkGetPhysicalDeviceQueueFamilyProperties2 for the
-    pname:physicalDevice that was used to create pname:device
-endif::VK_VERSION_1_1,VK_KHR_get_physical_device_properties2[]
-ifndef::VK_ANDROID_external_memory_android_hardware_buffer[]
-  * [[VUID-VkImageCreateInfo-format-00943]]
-    pname:format must: not be ename:VK_FORMAT_UNDEFINED
-endif::VK_ANDROID_external_memory_android_hardware_buffer[]
-ifdef::VK_ANDROID_external_memory_android_hardware_buffer[]
-  * [[VUID-VkImageCreateInfo-pNext-01974]]
-    If the pname:pNext chain includes a slink:VkExternalFormatANDROID
-    structure, and its pname:externalFormat member is non-zero the
-    pname:format must: be ename:VK_FORMAT_UNDEFINED
-  * [[VUID-VkImageCreateInfo-pNext-01975]]
-    If the pname:pNext chain does not include a
-    slink:VkExternalFormatANDROID structure, or does and its
-    pname:externalFormat member is `0`, the pname:format must: not be
-    ename:VK_FORMAT_UNDEFINED
-endif::VK_ANDROID_external_memory_android_hardware_buffer[]
-  * [[VUID-VkImageCreateInfo-extent-00944]]
-    pname:extent.width must: be greater than `0`
-  * [[VUID-VkImageCreateInfo-extent-00945]]
-    pname:extent.height must: be greater than `0`
-  * [[VUID-VkImageCreateInfo-extent-00946]]
-    pname:extent.depth must: be greater than `0`
-  * [[VUID-VkImageCreateInfo-mipLevels-00947]]
-    pname:mipLevels must: be greater than `0`
-  * [[VUID-VkImageCreateInfo-arrayLayers-00948]]
-    pname:arrayLayers must: be greater than `0`
-  * [[VUID-VkImageCreateInfo-flags-00949]]
-    If pname:flags contains ename:VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT,
-    pname:imageType must: be ename:VK_IMAGE_TYPE_2D
-ifdef::VK_EXT_fragment_density_map[]
-  * [[VUID-VkImageCreateInfo-flags-02557]]
-    If pname:flags contains
-    ename:VK_IMAGE_USAGE_FRAGMENT_DENSITY_MAP_BIT_EXT, pname:imageType must:
-    be ename:VK_IMAGE_TYPE_2D
-endif::VK_EXT_fragment_density_map[]
-ifdef::VK_VERSION_1_1,VK_KHR_maintenance1[]
-  * [[VUID-VkImageCreateInfo-flags-00950]]
-    If pname:flags contains ename:VK_IMAGE_CREATE_2D_ARRAY_COMPATIBLE_BIT,
-    pname:imageType must: be ename:VK_IMAGE_TYPE_3D
-endif::VK_VERSION_1_1,VK_KHR_maintenance1[]
-  * [[VUID-VkImageCreateInfo-extent-02252]]
-    pname:extent.width must: be less than or equal to
-    pname:imageCreateMaxExtent.width (as defined in
-    <<resources-image-creation-limits,Image Creation Limits>>)
-  * [[VUID-VkImageCreateInfo-extent-02253]]
-    pname:extent.height must: be less than or equal to
-    pname:imageCreateMaxExtent.height (as defined in
-    <<resources-image-creation-limits,Image Creation Limits>>)
-  * [[VUID-VkImageCreateInfo-extent-02254]]
-    pname:extent.depth must: be less than or equal to
-    pname:imageCreateMaxExtent.depth (as defined in
-    <<resources-image-creation-limits,Image Creation Limits>>)
-  * [[VUID-VkImageCreateInfo-imageType-00954]]
-    If pname:imageType is ename:VK_IMAGE_TYPE_2D and pname:flags contains
-    ename:VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT, pname:extent.width and
-    pname:extent.height must: be equal and pname:arrayLayers must: be
-    greater than or equal to 6
-  * [[VUID-VkImageCreateInfo-imageType-00956]]
-    If pname:imageType is ename:VK_IMAGE_TYPE_1D, both pname:extent.height
-    and pname:extent.depth must: be `1`
-  * [[VUID-VkImageCreateInfo-imageType-00957]]
-    If pname:imageType is ename:VK_IMAGE_TYPE_2D, pname:extent.depth must:
-    be `1`
-  * [[VUID-VkImageCreateInfo-mipLevels-00958]]
-    pname:mipLevels must: be less than or equal to the number of levels in
-    the complete mipmap chain based on [eq]#pname:extent.width#,
-    [eq]#pname:extent.height#, and [eq]#pname:extent.depth#
-  * [[VUID-VkImageCreateInfo-mipLevels-02255]]
-    pname:mipLevels must: be less than or equal to
-    pname:imageCreateMaxMipLevels (as defined in
-    <<resources-image-creation-limits,Image Creation Limits>>)
-  * [[VUID-VkImageCreateInfo-arrayLayers-02256]]
-    pname:arrayLayers must: be less than or equal to
-    pname:imageCreateMaxArrayLayers (as defined in
-    <<resources-image-creation-limits,Image Creation Limits>>)
-  * [[VUID-VkImageCreateInfo-imageType-00961]]
-    If pname:imageType is ename:VK_IMAGE_TYPE_3D, pname:arrayLayers must: be
-    `1`
-  * [[VUID-VkImageCreateInfo-samples-02257]]
-    If pname:samples is not ename:VK_SAMPLE_COUNT_1_BIT, then
-    pname:imageType must: be ename:VK_IMAGE_TYPE_2D, pname:flags must: not
-    contain ename:VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT, pname:mipLevels must:
-    be equal to `1`, and pname:imageCreateMaybeLinear (as defined in
-    <<resources-image-creation-limits,Image Creation Limits>>) must: be
-    ename:VK_FALSE,
-ifdef::VK_EXT_fragment_density_map[]
-  * [[VUID-VkImageCreateInfo-samples-02558]]
-    If pname:samples is not ename:VK_SAMPLE_COUNT_1_BIT, pname:usage must:
-    not contain ename:VK_IMAGE_USAGE_FRAGMENT_DENSITY_MAP_BIT_EXT
-endif::VK_EXT_fragment_density_map[]
-  * [[VUID-VkImageCreateInfo-usage-00963]]
-    If pname:usage includes ename:VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT,
-    then bits other than ename:VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT,
-    ename:VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT, and
-    ename:VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT must: not be set
-  * [[VUID-VkImageCreateInfo-usage-00964]]
-    If pname:usage includes ename:VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT,
-    ename:VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT,
-    ename:VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT, or
-    ename:VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT, pname:extent.width must: be
-    less than or equal to
-    sname:VkPhysicalDeviceLimits::pname:maxFramebufferWidth
-  * [[VUID-VkImageCreateInfo-usage-00965]]
-    If pname:usage includes ename:VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT,
-    ename:VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT,
-    ename:VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT, or
-    ename:VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT, pname:extent.height must: be
-    less than or equal to
-    sname:VkPhysicalDeviceLimits::pname:maxFramebufferHeight
-ifdef::VK_EXT_fragment_density_map[]
-  * [[VUID-VkImageCreateInfo-usage-02559]]
-    If pname:usage includes
-    ename:VK_IMAGE_USAGE_FRAGMENT_DENSITY_MAP_BIT_EXT, pname:extent.width
-    must: be less than or equal to
-    latexmath:[\left\lceil{\frac{maxFramebufferWidth}{minFragmentDensityTexelSize_{width}}}\right\rceil]
-  * [[VUID-VkImageCreateInfo-usage-02560]]
-    If pname:usage includes
-    ename:VK_IMAGE_USAGE_FRAGMENT_DENSITY_MAP_BIT_EXT, pname:extent.height
-    must: be less than or equal to
-    latexmath:[\left\lceil{\frac{maxFramebufferHeight}{minFragmentDensityTexelSize_{height}}}\right\rceil]
-endif::VK_EXT_fragment_density_map[]
-  * [[VUID-VkImageCreateInfo-usage-00966]]
-    If pname:usage includes ename:VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT,
-    pname:usage must: also contain at least one of
-    ename:VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT,
-    ename:VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT, or
-    ename:VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT
-  * [[VUID-VkImageCreateInfo-samples-02258]]
-    pname:samples must: be a bit value that is set in
-    pname:imageCreateSampleCounts (as defined in
-    <<resources-image-creation-limits,Image Creation Limits>>)
-  * [[VUID-VkImageCreateInfo-usage-00968]]
-    If the <<features-shaderStorageImageMultisample,multisampled storage
-    images>> feature is not enabled, and pname:usage contains
-    ename:VK_IMAGE_USAGE_STORAGE_BIT, pname:samples must: be
-    ename:VK_SAMPLE_COUNT_1_BIT
-  * [[VUID-VkImageCreateInfo-flags-00969]]
-    If the <<features-sparseBinding,sparse bindings>> feature is not
-    enabled, pname:flags must: not contain
-    ename:VK_IMAGE_CREATE_SPARSE_BINDING_BIT
-  * [[VUID-VkImageCreateInfo-flags-01924]]
-    If the <<features-sparseResidencyAliased,sparse aliased residency>>
-    feature is not enabled, pname:flags must: not contain
-    ename:VK_IMAGE_CREATE_SPARSE_ALIASED_BIT
-  * [[VUID-VkImageCreateInfo-tiling-04121]]
-    If pname:tiling is ename:VK_IMAGE_TILING_LINEAR, pname:flags must: not
-    contain ename:VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT
-  * [[VUID-VkImageCreateInfo-imageType-00970]]
-    If pname:imageType is ename:VK_IMAGE_TYPE_1D, pname:flags must: not
-    contain ename:VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT
-  * [[VUID-VkImageCreateInfo-imageType-00971]]
-    If the <<features-sparseResidencyImage2D,sparse residency for 2D
-    images>> feature is not enabled, and pname:imageType is
-    ename:VK_IMAGE_TYPE_2D, pname:flags must: not contain
-    ename:VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT
-  * [[VUID-VkImageCreateInfo-imageType-00972]]
-    If the <<features-sparseResidencyImage3D,sparse residency for 3D
-    images>> feature is not enabled, and pname:imageType is
-    ename:VK_IMAGE_TYPE_3D, pname:flags must: not contain
-    ename:VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT
-  * [[VUID-VkImageCreateInfo-imageType-00973]]
-    If the <<features-sparseResidency2Samples,sparse residency for images
-    with 2 samples>> feature is not enabled, pname:imageType is
-    ename:VK_IMAGE_TYPE_2D, and pname:samples is
-    ename:VK_SAMPLE_COUNT_2_BIT, pname:flags must: not contain
-    ename:VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT
-  * [[VUID-VkImageCreateInfo-imageType-00974]]
-    If the <<features-sparseResidency4Samples,sparse residency for images
-    with 4 samples>> feature is not enabled, pname:imageType is
-    ename:VK_IMAGE_TYPE_2D, and pname:samples is
-    ename:VK_SAMPLE_COUNT_4_BIT, pname:flags must: not contain
-    ename:VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT
-  * [[VUID-VkImageCreateInfo-imageType-00975]]
-    If the <<features-sparseResidency8Samples,sparse residency for images
-    with 8 samples>> feature is not enabled, pname:imageType is
-    ename:VK_IMAGE_TYPE_2D, and pname:samples is
-    ename:VK_SAMPLE_COUNT_8_BIT, pname:flags must: not contain
-    ename:VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT
-  * [[VUID-VkImageCreateInfo-imageType-00976]]
-    If the <<features-sparseResidency16Samples,sparse residency for images
-    with 16 samples>> feature is not enabled, pname:imageType is
-    ename:VK_IMAGE_TYPE_2D, and pname:samples is
-    ename:VK_SAMPLE_COUNT_16_BIT, pname:flags must: not contain
-    ename:VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT
-  * [[VUID-VkImageCreateInfo-flags-00987]]
-    If pname:flags contains ename:VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT or
-    ename:VK_IMAGE_CREATE_SPARSE_ALIASED_BIT, it must: also contain
-    ename:VK_IMAGE_CREATE_SPARSE_BINDING_BIT
-  * [[VUID-VkImageCreateInfo-None-01925]]
-    If any of the bits ename:VK_IMAGE_CREATE_SPARSE_BINDING_BIT,
-    ename:VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT, or
-    ename:VK_IMAGE_CREATE_SPARSE_ALIASED_BIT are set,
-    ename:VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT must: not also be set
-ifdef::VK_VERSION_1_1[]
-  * [[VUID-VkImageCreateInfo-flags-01890]]
-    If the protected memory feature is not enabled, pname:flags must: not
-    contain ename:VK_IMAGE_CREATE_PROTECTED_BIT
-  * [[VUID-VkImageCreateInfo-None-01891]]
-    If any of the bits ename:VK_IMAGE_CREATE_SPARSE_BINDING_BIT,
-    ename:VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT, or
-    ename:VK_IMAGE_CREATE_SPARSE_ALIASED_BIT are set,
-    ename:VK_IMAGE_CREATE_PROTECTED_BIT must: not also be set
-endif::VK_VERSION_1_1[]
-ifdef::VK_VERSION_1_1,VK_KHR_external_memory[]
-ifdef::VK_NV_external_memory[]
-  * [[VUID-VkImageCreateInfo-pNext-00988]]
-    If the pname:pNext chain includes a
-    slink:VkExternalMemoryImageCreateInfoNV structure, it must: not contain
-    a slink:VkExternalMemoryImageCreateInfo structure
-endif::VK_NV_external_memory[]
-  * [[VUID-VkImageCreateInfo-pNext-00990]]
-    If the pname:pNext chain includes a
-    slink:VkExternalMemoryImageCreateInfo structure, its pname:handleTypes
-    member must: only contain bits that are also in
-    slink:VkExternalImageFormatProperties::pname:externalMemoryProperties.compatibleHandleTypes,
-    as returned by flink:vkGetPhysicalDeviceImageFormatProperties2 with
-    pname:format, pname:imageType, pname:tiling, pname:usage, and
-    pname:flags equal to those in this structure, and with a
-    slink:VkPhysicalDeviceExternalImageFormatInfo structure included in the
-    pname:pNext chain, with a pname:handleType equal to any one of the
-    handle types specified in
-    slink:VkExternalMemoryImageCreateInfo::pname:handleTypes
-endif::VK_VERSION_1_1,VK_KHR_external_memory[]
-ifdef::VK_NV_external_memory+VK_NV_external_memory_capabilities[]
-  * [[VUID-VkImageCreateInfo-pNext-00991]]
-    If the pname:pNext chain includes a
-    slink:VkExternalMemoryImageCreateInfoNV structure, its pname:handleTypes
-    member must: only contain bits that are also in
-    slink:VkExternalImageFormatPropertiesNV::pname:externalMemoryProperties.compatibleHandleTypes,
-    as returned by flink:vkGetPhysicalDeviceExternalImageFormatPropertiesNV
-    with pname:format, pname:imageType, pname:tiling, pname:usage, and
-    pname:flags equal to those in this structure, and with
-    pname:externalHandleType equal to any one of the handle types specified
-    in slink:VkExternalMemoryImageCreateInfoNV::pname:handleTypes
-endif::VK_NV_external_memory+VK_NV_external_memory_capabilities[]
-ifdef::VK_VERSION_1_1,VK_KHR_device_group[]
-  * [[VUID-VkImageCreateInfo-physicalDeviceCount-01421]]
-    If the logical device was created with
-    slink:VkDeviceGroupDeviceCreateInfo::pname:physicalDeviceCount equal to
-    1, pname:flags must: not contain
-    ename:VK_IMAGE_CREATE_SPLIT_INSTANCE_BIND_REGIONS_BIT
-  * [[VUID-VkImageCreateInfo-flags-02259]]
-    If pname:flags contains
-    ename:VK_IMAGE_CREATE_SPLIT_INSTANCE_BIND_REGIONS_BIT, then
-    pname:mipLevels must: be one, pname:arrayLayers must: be one,
-    pname:imageType must: be ename:VK_IMAGE_TYPE_2D.
-    and pname:imageCreateMaybeLinear (as defined in
-    <<resources-image-creation-limits,Image Creation Limits>>) must: be
-    ename:VK_FALSE
-endif::VK_VERSION_1_1,VK_KHR_device_group[]
-ifdef::VK_VERSION_1_1,VK_KHR_maintenance2[]
-  * [[VUID-VkImageCreateInfo-flags-01572]]
-    If pname:flags contains
-    ename:VK_IMAGE_CREATE_BLOCK_TEXEL_VIEW_COMPATIBLE_BIT, then pname:format
-    must: be a <<compressed_image_formats,compressed image format>>
-  * [[VUID-VkImageCreateInfo-flags-01573]]
-    If pname:flags contains
-    ename:VK_IMAGE_CREATE_BLOCK_TEXEL_VIEW_COMPATIBLE_BIT, then pname:flags
-    must: also contain ename:VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT
-endif::VK_VERSION_1_1,VK_KHR_maintenance2[]
-  * [[VUID-VkImageCreateInfo-initialLayout-00993]]
-    pname:initialLayout must: be ename:VK_IMAGE_LAYOUT_UNDEFINED or
-    ename:VK_IMAGE_LAYOUT_PREINITIALIZED
-ifdef::VK_VERSION_1_1,VK_KHR_external_memory,VK_NV_external_memory[]
-  * [[VUID-VkImageCreateInfo-pNext-01443]]
-    If the pname:pNext chain includes a
-    slink:VkExternalMemoryImageCreateInfo or
-    sname:VkExternalMemoryImageCreateInfoNV structure whose
-    pname:handleTypes member is not `0`, pname:initialLayout must: be
-    ename:VK_IMAGE_LAYOUT_UNDEFINED
-endif::VK_VERSION_1_1,VK_KHR_external_memory,VK_NV_external_memory[]
-ifdef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
-  * [[VUID-VkImageCreateInfo-format-06410]]
-    If the image pname:format is one of the
-    <<formats-requiring-sampler-ycbcr-conversion, formats that require a
-    sampler Y'C~B~C~R~ conversion>>, pname:mipLevels must: be 1
-  * [[VUID-VkImageCreateInfo-format-06411]]
-    If the image pname:format is one of the
-    <<formats-requiring-sampler-ycbcr-conversion, formats that require a
-    sampler Y'C~B~C~R~ conversion>>, pname:samples must: be
-    ename:VK_SAMPLE_COUNT_1_BIT
-  * [[VUID-VkImageCreateInfo-format-06412]]
-    If the image pname:format is one of the
-    <<formats-requiring-sampler-ycbcr-conversion, formats that require a
-    sampler Y'C~B~C~R~ conversion>>, pname:imageType must: be
-    ename:VK_IMAGE_TYPE_2D
-ifdef::VK_EXT_ycbcr_image_arrays[]
-  * [[VUID-VkImageCreateInfo-format-06413]]
-    If the image pname:format is one of the
-    <<formats-requiring-sampler-ycbcr-conversion, formats that require a
-    sampler Y'C~B~C~R~ conversion>>, and the pname:ycbcrImageArrays feature
-    is not enabled, pname:arrayLayers must: be 1
-endif::VK_EXT_ycbcr_image_arrays[]
-ifndef::VK_EXT_ycbcr_image_arrays[]
-  * [[VUID-VkImageCreateInfo-format-06414]]
-    If the image pname:format is one of the
-    <<formats-requiring-sampler-ycbcr-conversion, formats that require a
-    sampler Y'C~B~C~R~ conversion>>, pname:arrayLayers must: be 1
-endif::VK_EXT_ycbcr_image_arrays[]
-  * [[VUID-VkImageCreateInfo-imageCreateFormatFeatures-02260]]
-    If pname:format is a _multi-planar_ format, and if
-    pname:imageCreateFormatFeatures (as defined in
-    <<resources-image-creation-limits,Image Creation Limits>>) does not
-    contain ename:VK_FORMAT_FEATURE_DISJOINT_BIT, then pname:flags must: not
-    contain ename:VK_IMAGE_CREATE_DISJOINT_BIT
-  * [[VUID-VkImageCreateInfo-format-01577]]
-    If pname:format is not a _multi-planar_ format, and pname:flags does not
-    include ename:VK_IMAGE_CREATE_ALIAS_BIT, pname:flags must: not contain
-    ename:VK_IMAGE_CREATE_DISJOINT_BIT
-  * [[VUID-VkImageCreateInfo-format-04712]]
-    If pname:format has a code:_422 or code:_420 suffix, pname:width must:
-    be a multiple of 2
-  * [[VUID-VkImageCreateInfo-format-04713]]
-    If pname:format has a code:_420 suffix, pname:height must: be a multiple
-    of 2
-endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
-ifdef::VK_EXT_image_drm_format_modifier[]
-  * [[VUID-VkImageCreateInfo-tiling-02261]]
-    If pname:tiling is ename:VK_IMAGE_TILING_DRM_FORMAT_MODIFIER_EXT, then
-    the pname:pNext chain must: include exactly one of
-    slink:VkImageDrmFormatModifierListCreateInfoEXT or
-    slink:VkImageDrmFormatModifierExplicitCreateInfoEXT structures
-  * [[VUID-VkImageCreateInfo-pNext-02262]]
-    If the pname:pNext chain includes a
-    slink:VkImageDrmFormatModifierListCreateInfoEXT or
-    slink:VkImageDrmFormatModifierExplicitCreateInfoEXT structure, then
-    pname:tiling must: be ename:VK_IMAGE_TILING_DRM_FORMAT_MODIFIER_EXT
-  * [[VUID-VkImageCreateInfo-tiling-02353]]
-    If pname:tiling is ename:VK_IMAGE_TILING_DRM_FORMAT_MODIFIER_EXT and
-    pname:flags contains ename:VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT, then the
-    pname:pNext chain must: include a slink:VkImageFormatListCreateInfo
-    structure with non-zero pname:viewFormatCount
-endif::VK_EXT_image_drm_format_modifier[]
-ifdef::VK_EXT_sample_locations[]
-  * [[VUID-VkImageCreateInfo-flags-01533]]
-    If pname:flags contains
-    ename:VK_IMAGE_CREATE_SAMPLE_LOCATIONS_COMPATIBLE_DEPTH_BIT_EXT
-    pname:format must: be a depth or depth/stencil format
-endif::VK_EXT_sample_locations[]
-ifdef::VK_ANDROID_external_memory_android_hardware_buffer[]
-  * [[VUID-VkImageCreateInfo-pNext-02393]]
-    If the pname:pNext chain includes a
-    slink:VkExternalMemoryImageCreateInfo structure whose pname:handleTypes
-    member includes
-    ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_ANDROID_HARDWARE_BUFFER_BIT_ANDROID,
-    pname:imageType must: be ename:VK_IMAGE_TYPE_2D
-  * [[VUID-VkImageCreateInfo-pNext-02394]]
-    If the pname:pNext chain includes a
-    slink:VkExternalMemoryImageCreateInfo structure whose pname:handleTypes
-    member includes
-    ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_ANDROID_HARDWARE_BUFFER_BIT_ANDROID,
-    pname:mipLevels must: either be `1` or equal to the number of levels in
-    the complete mipmap chain based on [eq]#pname:extent.width#,
-    [eq]#pname:extent.height#, and [eq]#pname:extent.depth#
-  * [[VUID-VkImageCreateInfo-pNext-02396]]
-    If the pname:pNext chain includes a slink:VkExternalFormatANDROID
-    structure whose pname:externalFormat member is not `0`, pname:flags
-    must: not include ename:VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT
-  * [[VUID-VkImageCreateInfo-pNext-02397]]
-    If the pname:pNext chain includes a slink:VkExternalFormatANDROID
-    structure whose pname:externalFormat member is not `0`, pname:usage
-    must: not include any usages except ename:VK_IMAGE_USAGE_SAMPLED_BIT
-  * [[VUID-VkImageCreateInfo-pNext-02398]]
-    If the pname:pNext chain includes a slink:VkExternalFormatANDROID
-    structure whose pname:externalFormat member is not `0`, pname:tiling
-    must: be ename:VK_IMAGE_TILING_OPTIMAL
-endif::VK_ANDROID_external_memory_android_hardware_buffer[]
-ifdef::VK_VERSION_1_2,VK_EXT_separate_stencil_usage[]
-  * [[VUID-VkImageCreateInfo-format-02795]]
-    If pname:format is a depth-stencil format, pname:usage includes
-    ename:VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT, and the pname:pNext
-    chain includes a slink:VkImageStencilUsageCreateInfo structure, then its
-    slink:VkImageStencilUsageCreateInfo::pname:stencilUsage member must:
-    also include ename:VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT
-  * [[VUID-VkImageCreateInfo-format-02796]]
-    If pname:format is a depth-stencil format, pname:usage does not include
-    ename:VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT, and the pname:pNext
-    chain includes a slink:VkImageStencilUsageCreateInfo structure, then its
-    slink:VkImageStencilUsageCreateInfo::pname:stencilUsage member must:
-    also not include ename:VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT
-  * [[VUID-VkImageCreateInfo-format-02797]]
-    If pname:format is a depth-stencil format, pname:usage includes
-    ename:VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT, and the pname:pNext chain
-    includes a slink:VkImageStencilUsageCreateInfo structure, then its
-    slink:VkImageStencilUsageCreateInfo::pname:stencilUsage member must:
-    also include ename:VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT
-  * [[VUID-VkImageCreateInfo-format-02798]]
-    If pname:format is a depth-stencil format, pname:usage does not include
-    ename:VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT, and the pname:pNext chain
-    includes a slink:VkImageStencilUsageCreateInfo structure, then its
-    slink:VkImageStencilUsageCreateInfo::pname:stencilUsage member must:
-    also not include ename:VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT
-  * [[VUID-VkImageCreateInfo-Format-02536]]
-    If pname:Format is a depth-stencil format and the pname:pNext chain
-    includes a slink:VkImageStencilUsageCreateInfo structure with its
-    pname:stencilUsage member including
-    ename:VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT, pname:extent.width must: be
-    less than or equal to
-    sname:VkPhysicalDeviceLimits::pname:maxFramebufferWidth
-  * [[VUID-VkImageCreateInfo-format-02537]]
-    If pname:format is a depth-stencil format and the pname:pNext chain
-    includes a slink:VkImageStencilUsageCreateInfo structure with its
-    pname:stencilUsage member including
-    ename:VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT, pname:extent.height must: be
-    less than or equal to
-    sname:VkPhysicalDeviceLimits::pname:maxFramebufferHeight
-  * [[VUID-VkImageCreateInfo-format-02538]]
-    If the <<features-shaderStorageImageMultisample,multisampled storage
-    images>> feature is not enabled, pname:format is a depth-stencil format
-    and the pname:pNext chain includes a slink:VkImageStencilUsageCreateInfo
-    structure with its pname:stencilUsage including
-    ename:VK_IMAGE_USAGE_STORAGE_BIT, pname:samples must: be
-    ename:VK_SAMPLE_COUNT_1_BIT
-endif::VK_VERSION_1_2,VK_EXT_separate_stencil_usage[]
-ifdef::VK_NV_corner_sampled_image[]
-  * [[VUID-VkImageCreateInfo-flags-02050]]
-    If pname:flags contains ename:VK_IMAGE_CREATE_CORNER_SAMPLED_BIT_NV,
-    pname:imageType must: be ename:VK_IMAGE_TYPE_2D or
-    ename:VK_IMAGE_TYPE_3D
-  * [[VUID-VkImageCreateInfo-flags-02051]]
-    If pname:flags contains ename:VK_IMAGE_CREATE_CORNER_SAMPLED_BIT_NV, it
-    must: not contain ename:VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT and the
-    pname:format must: not be a depth/stencil format
-  * [[VUID-VkImageCreateInfo-flags-02052]]
-    If pname:flags contains ename:VK_IMAGE_CREATE_CORNER_SAMPLED_BIT_NV and
-    pname:imageType is ename:VK_IMAGE_TYPE_2D, pname:extent.width and
-    pname:extent.height must: be greater than `1`
-  * [[VUID-VkImageCreateInfo-flags-02053]]
-    If pname:flags contains ename:VK_IMAGE_CREATE_CORNER_SAMPLED_BIT_NV and
-    pname:imageType is ename:VK_IMAGE_TYPE_3D, pname:extent.width,
-    pname:extent.height, and pname:extent.depth must: be greater than `1`
-endif::VK_NV_corner_sampled_image[]
-ifdef::VK_KHR_fragment_shading_rate,VK_NV_shading_rate_image[]
-  * [[VUID-VkImageCreateInfo-imageType-02082]]
-    If pname:usage includes
-    ename:VK_IMAGE_USAGE_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR,
-    pname:imageType must: be ename:VK_IMAGE_TYPE_2D
-  * [[VUID-VkImageCreateInfo-samples-02083]]
-    If pname:usage includes
-    ename:VK_IMAGE_USAGE_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR,
-    pname:samples must: be ename:VK_SAMPLE_COUNT_1_BIT
-endif::VK_KHR_fragment_shading_rate,VK_NV_shading_rate_image[]
-ifdef::VK_NV_shading_rate_image[]
-  * [[VUID-VkImageCreateInfo-tiling-02084]]
-    If pname:usage includes ename:VK_IMAGE_USAGE_SHADING_RATE_IMAGE_BIT_NV,
-    pname:tiling must: be ename:VK_IMAGE_TILING_OPTIMAL
-endif::VK_NV_shading_rate_image[]
-ifdef::VK_EXT_fragment_density_map[]
-  * [[VUID-VkImageCreateInfo-flags-02565]]
-    If pname:flags contains ename:VK_IMAGE_CREATE_SUBSAMPLED_BIT_EXT,
-    pname:tiling must: be ename:VK_IMAGE_TILING_OPTIMAL
-  * [[VUID-VkImageCreateInfo-flags-02566]]
-    If pname:flags contains ename:VK_IMAGE_CREATE_SUBSAMPLED_BIT_EXT,
-    pname:imageType must: be ename:VK_IMAGE_TYPE_2D
-  * [[VUID-VkImageCreateInfo-flags-02567]]
-    If pname:flags contains ename:VK_IMAGE_CREATE_SUBSAMPLED_BIT_EXT,
-    pname:flags must: not contain ename:VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT
-  * [[VUID-VkImageCreateInfo-flags-02568]]
-    If pname:flags contains ename:VK_IMAGE_CREATE_SUBSAMPLED_BIT_EXT,
-    pname:mipLevels must: be `1`
-endif::VK_EXT_fragment_density_map[]
-ifdef::VK_HUAWEI_invocation_mask[]
-  * [[VUID-VkImageCreateInfo-usage-04992]]
-    If pname:usage includes ename:VK_IMAGE_USAGE_INVOCATION_MASK_BIT_HUAWEI,
-    pname:tiling must: be ename:VK_IMAGE_TILING_LINEAR
-endif::VK_HUAWEI_invocation_mask[]
-ifdef::VK_KHR_portability_subset[]
-  * [[VUID-VkImageCreateInfo-imageView2DOn3DImage-04459]]
-    If the `apiext:VK_KHR_portability_subset` extension is enabled, and
-    slink:VkPhysicalDevicePortabilitySubsetFeaturesKHR::pname:imageView2DOn3DImage
-    is ename:VK_FALSE, pname:flags must: not contain
-    ename:VK_IMAGE_CREATE_2D_ARRAY_COMPATIBLE_BIT
-  * [[VUID-VkImageCreateInfo-multisampleArrayImage-04460]]
-    If the `apiext:VK_KHR_portability_subset` extension is enabled, and
-    slink:VkPhysicalDevicePortabilitySubsetFeaturesKHR::pname:multisampleArrayImage
-    is ename:VK_FALSE, and pname:samples is not ename:VK_SAMPLE_COUNT_1_BIT,
-    then pname:arrayLayers must: be `1`
-endif::VK_KHR_portability_subset[]
-ifdef::VK_VERSION_1_2,VK_KHR_image_format_list[]
-  * [[VUID-VkImageCreateInfo-pNext-04737]]
-    If a slink:VkImageFormatListCreateInfo structure was included in the
-    pname:pNext chain and
-    slink:VkImageFormatListCreateInfo::pname:viewFormatCount is not zero,
-    then all of the formats in
-    slink:VkImageFormatListCreateInfo::pname:pViewFormats must: be
-    compatible with the pname:format as described in the
-    <<formats-compatibility,compatibility table>>
-  * [[VUID-VkImageCreateInfo-flags-04738]]
-    If pname:flags does not contain ename:VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT
-    and the pname:pNext chain includes a slink:VkImageFormatListCreateInfo
-    structure, then slink:VkImageFormatListCreateInfo::pname:viewFormatCount
-    must: be `0` or `1`
-endif::VK_VERSION_1_2,VK_KHR_image_format_list[]
-ifdef::VK_KHR_video_decode_queue[]
-  * [[VUID-VkImageCreateInfo-usage-04815]]
-    If pname:usage includes ename:VK_IMAGE_USAGE_VIDEO_DECODE_DST_BIT_KHR,
-    ename:VK_IMAGE_USAGE_VIDEO_DECODE_SRC_BIT_KHR,
-    ename:VK_IMAGE_USAGE_VIDEO_DECODE_DPB_BIT_KHR, then the pname:pNext
-    chain must: include a valid slink:VkVideoProfilesKHR structure which
-    includes at least one slink:VkVideoProfileKHR with a decode
-    codec-operation
-endif::VK_KHR_video_decode_queue[]
-ifdef::VK_KHR_video_encode_queue[]
-  * [[VUID-VkImageCreateInfo-usage-04816]]
-    If pname:usage includes ename:VK_IMAGE_USAGE_VIDEO_ENCODE_DST_BIT_KHR,
-    ename:VK_IMAGE_USAGE_VIDEO_ENCODE_SRC_BIT_KHR,
-    ename:VK_IMAGE_USAGE_VIDEO_ENCODE_DPB_BIT_KHR, then the pname:pNext
-    chain must: include a valid slink:VkVideoProfilesKHR structure which
-    includes at least one slink:VkVideoProfileKHR with a encode
-    codec-operation
-endif::VK_KHR_video_encode_queue[]
-ifdef::VK_FUCHSIA_buffer_collection[]
-  * [[VUID-VkImageCreateInfo-pNext-06390]]
-    If the slink:VkImage is to be used to import memory from a
-    slink:VkBufferCollectionFUCHSIA, a
-    slink:VkBufferCollectionImageCreateInfoFUCHSIA structure must: be
-    chained to pname:pNext.
-endif::VK_FUCHSIA_buffer_collection[]
-****
-
-include::{generated}/validity/structs/VkImageCreateInfo.txt[]
---
-
-ifdef::VK_FUCHSIA_buffer_collection[]
-[open,refpage='VkBufferCollectionImageCreateInfoFUCHSIA',desc='Create a VkBufferCollectionFUCHSIA-compatible VkImage',type='structs']
---
-The sname:VkBufferCollectionImageCreateInfoFUCHSIA structure is defined as:
-
-include::{generated}/api/structs/VkBufferCollectionImageCreateInfoFUCHSIA.txt[]
-
-  * pname:sType is the type of this structure
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure
-  * pname:collection is the slink:VkBufferCollectionFUCHSIA handle
-  * pname:index is the index of the buffer in the buffer collection from
-    which the memory will be imported
-
-.Valid Usage
-****
-  * [[VUID-VkBufferCollectionImageCreateInfoFUCHSIA-index-06391]]
-    pname:index must: be less than
-    slink:VkBufferCollectionPropertiesFUCHSIA::pname:bufferCount
-****
-
-include::{generated}/validity/structs/VkBufferCollectionImageCreateInfoFUCHSIA.txt[]
---
-endif::VK_FUCHSIA_buffer_collection[]
-
-ifdef::VK_VERSION_1_2,VK_EXT_separate_stencil_usage[]
-[open,refpage='VkImageStencilUsageCreateInfo',desc='Specify separate usage flags for the stencil aspect of a depth-stencil image',type='structs',alias='VkImageStencilUsageCreateInfoEXT']
---
-The sname:VkImageStencilUsageCreateInfo structure is defined as:
-
-include::{generated}/api/structs/VkImageStencilUsageCreateInfo.txt[]
-
-ifdef::VK_EXT_separate_stencil_usage[]
-or the equivalent
-
-include::{generated}/api/structs/VkImageStencilUsageCreateInfoEXT.txt[]
-endif::VK_EXT_separate_stencil_usage[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:stencilUsage is a bitmask of elink:VkImageUsageFlagBits describing
-    the intended usage of the stencil aspect of the image.
-
-If the pname:pNext chain of slink:VkImageCreateInfo includes a
-sname:VkImageStencilUsageCreateInfo structure, then that structure includes
-the usage flags specific to the stencil aspect of the image for an image
-with a depth-stencil format.
-
-This structure specifies image usages which only apply to the stencil aspect
-of a depth/stencil format image.
-When this structure is included in the pname:pNext chain of
-slink:VkImageCreateInfo, the stencil aspect of the image must: only be used
-as specified by pname:stencilUsage.
-When this structure is not included in the pname:pNext chain of
-slink:VkImageCreateInfo, the stencil aspect of an image must: only be used
-as specified by slink:VkImageCreateInfo::pname:usage.
-Use of other aspects of an image are unaffected by this structure.
-
-This structure can: also be included in the pname:pNext chain of
-slink:VkPhysicalDeviceImageFormatInfo2 to query additional capabilities
-specific to image creation parameter combinations including a separate set
-of usage flags for the stencil aspect of the image using
-flink:vkGetPhysicalDeviceImageFormatProperties2.
-When this structure is not included in the pname:pNext chain of
-sname:VkPhysicalDeviceImageFormatInfo2 then the implicit value of
-pname:stencilUsage matches that of
-sname:VkPhysicalDeviceImageFormatInfo2::pname:usage.
-
-.Valid Usage
-****
-  * [[VUID-VkImageStencilUsageCreateInfo-stencilUsage-02539]]
-    If pname:stencilUsage includes
-    ename:VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT, it must: not include bits
-    other than ename:VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT or
-    ename:VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT
-****
-
-include::{generated}/validity/structs/VkImageStencilUsageCreateInfo.txt[]
---
-endif::VK_VERSION_1_2,VK_EXT_separate_stencil_usage[]
-
-ifdef::VK_NV_dedicated_allocation[]
-[open,refpage='VkDedicatedAllocationImageCreateInfoNV',desc='Specify that an image is bound to a dedicated memory resource',type='structs']
---
-If the pname:pNext chain includes a
-sname:VkDedicatedAllocationImageCreateInfoNV structure, then that structure
-includes an enable controlling whether the image will have a dedicated
-memory allocation bound to it.
-
-The sname:VkDedicatedAllocationImageCreateInfoNV structure is defined as:
-
-include::{generated}/api/structs/VkDedicatedAllocationImageCreateInfoNV.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:dedicatedAllocation specifies whether the image will have a
-    dedicated allocation bound to it.
-
-[NOTE]
-.Note
-====
-Using a dedicated allocation for color and depth/stencil attachments or
-other large images may: improve performance on some devices.
-====
-
-.Valid Usage
-****
-  * [[VUID-VkDedicatedAllocationImageCreateInfoNV-dedicatedAllocation-00994]]
-    If pname:dedicatedAllocation is ename:VK_TRUE,
-    slink:VkImageCreateInfo::pname:flags must: not include
-    ename:VK_IMAGE_CREATE_SPARSE_BINDING_BIT,
-    ename:VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT, or
-    ename:VK_IMAGE_CREATE_SPARSE_ALIASED_BIT
-****
-
-include::{generated}/validity/structs/VkDedicatedAllocationImageCreateInfoNV.txt[]
---
-endif::VK_NV_dedicated_allocation[]
-
-ifdef::VK_VERSION_1_1,VK_KHR_external_memory[]
-[open,refpage='VkExternalMemoryImageCreateInfo',desc='Specify that an image may be backed by external memory',type='structs']
---
-To define a set of external memory handle types that may: be used as backing
-store for an image, add a slink:VkExternalMemoryImageCreateInfo structure to
-the pname:pNext chain of the slink:VkImageCreateInfo structure.
-The sname:VkExternalMemoryImageCreateInfo structure is defined as:
-
-include::{generated}/api/structs/VkExternalMemoryImageCreateInfo.txt[]
-
-ifdef::VK_KHR_external_memory[]
-or the equivalent
-
-include::{generated}/api/structs/VkExternalMemoryImageCreateInfoKHR.txt[]
-endif::VK_KHR_external_memory[]
-
-[NOTE]
-.Note
-====
-A sname:VkExternalMemoryImageCreateInfo structure with a non-zero
-pname:handleTypes field must be included in the creation parameters for an
-image that will be bound to memory that is either exported or imported.
-====
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:handleTypes is zero, or a bitmask of
-    elink:VkExternalMemoryHandleTypeFlagBits specifying one or more external
-    memory handle types.
-
-include::{generated}/validity/structs/VkExternalMemoryImageCreateInfo.txt[]
---
-endif::VK_VERSION_1_1,VK_KHR_external_memory[]
-
-ifdef::VK_NV_external_memory[]
-[open,refpage='VkExternalMemoryImageCreateInfoNV',desc='Specify that an image may be backed by external memory',type='structs']
---
-If the pname:pNext chain includes a sname:VkExternalMemoryImageCreateInfoNV
-structure, then that structure defines a set of external memory handle types
-that may: be used as backing store for the image.
-
-The sname:VkExternalMemoryImageCreateInfoNV structure is defined as:
-
-include::{generated}/api/structs/VkExternalMemoryImageCreateInfoNV.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:handleTypes is zero, or a bitmask of
-    elink:VkExternalMemoryHandleTypeFlagBitsNV specifying one or more
-    external memory handle types.
-
-include::{generated}/validity/structs/VkExternalMemoryImageCreateInfoNV.txt[]
---
-endif::VK_NV_external_memory[]
-
-ifdef::VK_ANDROID_external_memory_android_hardware_buffer[]
-[open,refpage='VkExternalFormatANDROID',desc='Structure containing an Android hardware buffer external format',type='structs']
---
-To create an image with an
-<<memory-external-android-hardware-buffer-external-formats,external
-format>>, add a sname:VkExternalFormatANDROID structure in the pname:pNext
-chain of slink:VkImageCreateInfo.
-sname:VkExternalFormatANDROID is defined as:
-
-include::{generated}/api/structs/VkExternalFormatANDROID.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:externalFormat is an implementation-defined identifier for the
-    external format
-
-If pname:externalFormat is zero, the effect is as if the
-sname:VkExternalFormatANDROID structure was not present.
-Otherwise, the pname:image will have the specified external format.
-
-.Valid Usage
-****
-  * [[VUID-VkExternalFormatANDROID-externalFormat-01894]]
-    pname:externalFormat must: be `0` or a value returned in the
-    pname:externalFormat member of
-    slink:VkAndroidHardwareBufferFormatPropertiesANDROID by an earlier call
-    to flink:vkGetAndroidHardwareBufferPropertiesANDROID
-****
-
-include::{generated}/validity/structs/VkExternalFormatANDROID.txt[]
---
-endif::VK_ANDROID_external_memory_android_hardware_buffer[]
-
-ifdef::VK_VERSION_1_1,VK_KHR_device_group[]
-ifdef::VK_KHR_swapchain[]
-[open,refpage='VkImageSwapchainCreateInfoKHR',desc='Specify that an image will be bound to swapchain memory',type='structs']
---
-If the pname:pNext chain of slink:VkImageCreateInfo includes a
-sname:VkImageSwapchainCreateInfoKHR structure, then that structure includes
-a swapchain handle indicating that the image will be bound to memory from
-that swapchain.
-
-The sname:VkImageSwapchainCreateInfoKHR structure is defined as:
-
-include::{generated}/api/structs/VkImageSwapchainCreateInfoKHR.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:swapchain is dlink:VK_NULL_HANDLE or a handle of a swapchain that
-    the image will be bound to.
-
-.Valid Usage
-****
-  * [[VUID-VkImageSwapchainCreateInfoKHR-swapchain-00995]]
-    If pname:swapchain is not dlink:VK_NULL_HANDLE, the fields of
-    slink:VkImageCreateInfo must: match the
-    <<swapchain-wsi-image-create-info, implied image creation parameters>>
-    of the swapchain
-****
-
-include::{generated}/validity/structs/VkImageSwapchainCreateInfoKHR.txt[]
---
-endif::VK_KHR_swapchain[]
-endif::VK_VERSION_1_1,VK_KHR_device_group[]
-
-ifdef::VK_VERSION_1_2,VK_KHR_image_format_list[]
-[open,refpage='VkImageFormatListCreateInfo',desc='Specify that an image can: be used with a particular set of formats',type='structs',alias='VkImageFormatListCreateInfoKHR']
---
-If the pname:pNext chain of slink:VkImageCreateInfo includes a
-sname:VkImageFormatListCreateInfo structure, then that structure contains a
-list of all formats that can: be used when creating views of this image.
-
-The sname:VkImageFormatListCreateInfo structure is defined as:
-
-include::{generated}/api/structs/VkImageFormatListCreateInfo.txt[]
-
-ifdef::VK_KHR_image_format_list[]
-or the equivalent
-
-include::{generated}/api/structs/VkImageFormatListCreateInfoKHR.txt[]
-endif::VK_KHR_image_format_list[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:viewFormatCount is the number of entries in the pname:pViewFormats
-    array.
-  * pname:pViewFormats is a pointer to an array of elink:VkFormat values
-    specifying all formats which can: be used when creating views of this
-    image.
-
-If pname:viewFormatCount is zero, pname:pViewFormats is ignored and the
-image is created as if the sname:VkImageFormatListCreateInfo structure were
-not included in the pname:pNext chain of slink:VkImageCreateInfo.
-
-include::{generated}/validity/structs/VkImageFormatListCreateInfo.txt[]
---
-endif::VK_VERSION_1_2,VK_KHR_image_format_list[]
-
-ifdef::VK_EXT_image_drm_format_modifier[]
-[open,refpage='VkImageDrmFormatModifierListCreateInfoEXT',desc='Specify that an image must be created with a DRM format modifier from the provided list',type='structs']
---
-If the pname:pNext chain of slink:VkImageCreateInfo includes a
-slink:VkImageDrmFormatModifierListCreateInfoEXT structure, then the image
-will be created with one of the <<glossary-drm-format-modifier,Linux DRM
-format modifiers>> listed in the structure.
-The choice of modifier is implementation-dependent.
-
-The slink:VkImageDrmFormatModifierListCreateInfoEXT structure is defined as:
-
-include::{generated}/api/structs/VkImageDrmFormatModifierListCreateInfoEXT.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:drmFormatModifierCount is the length of the
-    pname:pDrmFormatModifiers array.
-  * pname:pDrmFormatModifiers is a pointer to an array of _Linux DRM format
-    modifiers_.
-
-.Valid Usage
-****
-  * [[VUID-VkImageDrmFormatModifierListCreateInfoEXT-pDrmFormatModifiers-02263]]
-    Each _modifier_ in pname:pDrmFormatModifiers must: be compatible with
-    the parameters in slink:VkImageCreateInfo and its pname:pNext chain, as
-    determined by querying slink:VkPhysicalDeviceImageFormatInfo2 extended
-    with slink:VkPhysicalDeviceImageDrmFormatModifierInfoEXT
-****
-
-include::{generated}/validity/structs/VkImageDrmFormatModifierListCreateInfoEXT.txt[]
---
-
-[open,refpage='VkImageDrmFormatModifierExplicitCreateInfoEXT',desc='Specify that an image be created with the provided DRM format modifier and explicit memory layout',type='structs']
---
-If the pname:pNext chain of slink:VkImageCreateInfo includes a
-slink:VkImageDrmFormatModifierExplicitCreateInfoEXT structure, then the
-image will be created with the <<glossary-drm-format-modifier,Linux DRM
-format modifier>> and memory layout defined by the structure.
-
-The slink:VkImageDrmFormatModifierExplicitCreateInfoEXT structure is defined
-as:
-
-include::{generated}/api/structs/VkImageDrmFormatModifierExplicitCreateInfoEXT.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:drmFormatModifier is the _Linux DRM format modifier_ with which
-    the image will be created.
-  * pname:drmFormatModifierPlaneCount is the number of _memory planes_ in
-    the image (as reported by slink:VkDrmFormatModifierPropertiesEXT) as
-    well as the length of the pname:pPlaneLayouts array.
-  * pname:pPlaneLayouts is a pointer to an array of
-    slink:VkSubresourceLayout structures describing the image's _memory
-    planes_.
-
-The etext:i^th^ member of pname:pPlaneLayouts describes the layout of the
-image's etext:i^th^ _memory plane_ (that is,
-`VK_IMAGE_ASPECT_MEMORY_PLANE__{ibit}__BIT_EXT`).
-In each element of pname:pPlaneLayouts, the implementation must: ignore
-pname:size.
-The implementation calculates the size of each plane, which the application
-can: query with flink:vkGetImageSubresourceLayout.
-
-When creating an image with
-slink:VkImageDrmFormatModifierExplicitCreateInfoEXT, it is the application's
-responsibility to satisfy all valid usage requirements.
-However, the implementation must: validate that the provided
-pname:pPlaneLayouts, when combined with the provided pname:drmFormatModifier
-and other creation parameters in slink:VkImageCreateInfo and its pname:pNext
-chain, produce a valid image.
-(This validation is necessarily implementation-dependent and outside the
-scope of Vulkan, and therefore not described by valid usage requirements).
-If this validation fails, then flink:vkCreateImage returns
-ename:VK_ERROR_INVALID_DRM_FORMAT_MODIFIER_PLANE_LAYOUT_EXT.
-
-.Valid Usage
-****
-  * [[VUID-VkImageDrmFormatModifierExplicitCreateInfoEXT-drmFormatModifier-02264]]
-    pname:drmFormatModifier must: be compatible with the parameters in
-    slink:VkImageCreateInfo and its pname:pNext chain, as determined by
-    querying slink:VkPhysicalDeviceImageFormatInfo2 extended with
-    slink:VkPhysicalDeviceImageDrmFormatModifierInfoEXT
-  * [[VUID-VkImageDrmFormatModifierExplicitCreateInfoEXT-drmFormatModifierPlaneCount-02265]]
-    pname:drmFormatModifierPlaneCount must: be equal to the
-    slink:VkDrmFormatModifierPropertiesEXT::pname:drmFormatModifierPlaneCount
-    associated with slink:VkImageCreateInfo::pname:format and
-    pname:drmFormatModifier, as found by querying
-    slink:VkDrmFormatModifierPropertiesListEXT
-  * [[VUID-VkImageDrmFormatModifierExplicitCreateInfoEXT-size-02267]]
-    For each element of pname:pPlaneLayouts, pname:size must: be 0
-  * [[VUID-VkImageDrmFormatModifierExplicitCreateInfoEXT-arrayPitch-02268]]
-    For each element of pname:pPlaneLayouts, pname:arrayPitch must: be 0 if
-    slink:VkImageCreateInfo::pname:arrayLayers is 1
-  * [[VUID-VkImageDrmFormatModifierExplicitCreateInfoEXT-depthPitch-02269]]
-    For each element of pname:pPlaneLayouts, pname:depthPitch must: be 0 if
-    slink:VkImageCreateInfo::pname:extent.depth is 1
-****
-
-include::{generated}/validity/structs/VkImageDrmFormatModifierExplicitCreateInfoEXT.txt[]
---
-endif::VK_EXT_image_drm_format_modifier[]
-
-[open,refpage='VkImageUsageFlagBits',desc='Bitmask specifying intended usage of an image',type='enums']
---
-Bits which can: be set in
-ifdef::VK_VERSION_1_1,VK_KHR_maintenance2[]
-slink:VkImageViewUsageCreateInfo::pname:usage, or
-endif::VK_VERSION_1_1,VK_KHR_maintenance2[]
-ifdef::VK_VERSION_1_2,VK_EXT_separate_stencil_usage[]
-slink:VkImageStencilUsageCreateInfo::pname:stencilUsage, or
-endif::VK_VERSION_1_2,VK_EXT_separate_stencil_usage[]
-slink:VkImageCreateInfo::pname:usage, specifying intended usage of an image,
-are:
-
-include::{generated}/api/enums/VkImageUsageFlagBits.txt[]
-
-  * ename:VK_IMAGE_USAGE_TRANSFER_SRC_BIT specifies that the image can: be
-    used as the source of a transfer command.
-  * ename:VK_IMAGE_USAGE_TRANSFER_DST_BIT specifies that the image can: be
-    used as the destination of a transfer command.
-  * ename:VK_IMAGE_USAGE_SAMPLED_BIT specifies that the image can: be used
-    to create a sname:VkImageView suitable for occupying a
-    sname:VkDescriptorSet slot either of type
-    ename:VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE or
-    ename:VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, and be sampled by a
-    shader.
-  * ename:VK_IMAGE_USAGE_STORAGE_BIT specifies that the image can: be used
-    to create a sname:VkImageView suitable for occupying a
-    sname:VkDescriptorSet slot of type
-    ename:VK_DESCRIPTOR_TYPE_STORAGE_IMAGE.
-  * ename:VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT specifies that the image can:
-    be used to create a sname:VkImageView suitable for use as a color or
-    resolve attachment in a sname:VkFramebuffer.
-  * ename:VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT specifies that the
-    image can: be used to create a sname:VkImageView suitable for use as a
-    depth/stencil
-ifdef::VK_VERSION_1_2,VK_KHR_depth_stencil_resolve[]
-    or depth/stencil resolve
-endif::VK_VERSION_1_2,VK_KHR_depth_stencil_resolve[]
-    attachment in a sname:VkFramebuffer.
-  * ename:VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT specifies that
-    implementations may: support using <<memory, memory allocations>> with
-    the ename:VK_MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT to back an image with
-    this usage.
-    This bit can: be set for any image that can: be used to create a
-    sname:VkImageView suitable for use as a color, resolve, depth/stencil,
-    or input attachment.
-  * ename:VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT specifies that the image can:
-    be used to create a sname:VkImageView suitable for occupying
-    sname:VkDescriptorSet slot of type
-    ename:VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT; be read from a shader as an
-    input attachment; and be used as an input attachment in a framebuffer.
-ifdef::VK_EXT_fragment_density_map[]
-  * ename:VK_IMAGE_USAGE_FRAGMENT_DENSITY_MAP_BIT_EXT specifies that the
-    image can: be used to create a sname:VkImageView suitable for use as a
-    <<fragmentdensitymapops, fragment density map image>>.
-endif::VK_EXT_fragment_density_map[]
-ifdef::VK_KHR_fragment_shading_rate,VK_NV_shading_rate_image[]
-  * ename:VK_IMAGE_USAGE_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR specifies
-    that the image can: be used to create a sname:VkImageView suitable for
-    use as a
-ifdef::VK_KHR_fragment_shading_rate[]
-    <<primsrast-fragment-shading-rate-attachment, fragment shading rate
-    attachment>>
-endif::VK_KHR_fragment_shading_rate[]
-ifdef::VK_KHR_fragment_shading_rate+VK_NV_shading_rate_image[or]
-ifdef::VK_NV_shading_rate_image[]
-    <<primsrast-shading-rate-image, shading rate image>>
-endif::VK_NV_shading_rate_image[]
-endif::VK_KHR_fragment_shading_rate,VK_NV_shading_rate_image[]
-ifdef::VK_KHR_video_decode_queue[]
-  * ename:VK_IMAGE_USAGE_VIDEO_DECODE_DST_BIT_KHR specifies that
-    <<video-decode-operations, video decode operations>> can use the image
-    as a <<reference-picture,reference picture>>, or a source of
-    postprocessing, or transfer operation.
-  * ename:VK_IMAGE_USAGE_VIDEO_DECODE_DPB_BIT_KHR specifies that
-    <<video-decode-operations, video decode operations>> can use the image
-    as a <<video-picture-resources,DPB Video Picture Resource>>,
-    representing a <<reference-picture,reference picture>>.
-    This flag must: be combined with
-    ename:VK_IMAGE_USAGE_VIDEO_DECODE_DST_BIT_KHR and
-    ename:VK_IMAGE_USAGE_VIDEO_DECODE_SRC_BIT_KHR.
-    ename:VK_IMAGE_USAGE_VIDEO_DECODE_DST_BIT_KHR is required for DPB image
-    resources because these resources will be associated with
-    <<reference-picture,reference pictures>> after acting as targets for
-    video decode operations.
-    ename:VK_IMAGE_USAGE_VIDEO_DECODE_SRC_BIT_KHR is required for DPB image
-    resources because the <<reference-picture,reference pictures>>
-    associated with them act as information sources for subsequent decode
-    operations.
-endif::VK_KHR_video_decode_queue[]
-ifdef::VK_KHR_video_encode_queue[]
-  * ename:VK_IMAGE_USAGE_VIDEO_ENCODE_SRC_BIT_KHR specifies that the image
-    can be used as an <<input-encode-picture,input picture>> for
-    <<video-encode-operations, video encode operations>>.
-  * ename:VK_IMAGE_USAGE_VIDEO_ENCODE_DPB_BIT_KHR specifies that
-    <<video-encode-operations, video encode operations>> can use the image
-    to hold a <<video-picture-resources,reconstructed picture>>, and to act
-    as a <<reference-picture,reference picture>>.
-    This flag must: be combined with
-    ename:VK_IMAGE_USAGE_VIDEO_ENCODE_DST_BIT_KHR and
-    ename:VK_IMAGE_USAGE_VIDEO_ENCODE_SRC_BIT_KHR.
-    ename:VK_IMAGE_USAGE_VIDEO_ENCODE_DST_BIT_KHR is required for a DPB
-    image resource because the reconstructed picture resulting from an
-    encode operation will be written to it.
-    ename:VK_IMAGE_USAGE_VIDEO_ENCODE_SRC_BIT_KHR is required for DPB image
-    resources because it can be used as a <<reference-picture,reconstructed
-    reference picture>> source for the encode operation.
-endif::VK_KHR_video_encode_queue[]
---
-
-[open,refpage='VkImageUsageFlags',desc='Bitmask of VkImageUsageFlagBits',type='flags']
---
-include::{generated}/api/flags/VkImageUsageFlags.txt[]
-
-tname:VkImageUsageFlags is a bitmask type for setting a mask of zero or more
-elink:VkImageUsageFlagBits.
-
-[[valid-imageview-imageusage]]
-When creating a sname:VkImageView one of the following
-elink:VkImageUsageFlagBits must: be set:
-
-  * ename:VK_IMAGE_USAGE_SAMPLED_BIT
-  * ename:VK_IMAGE_USAGE_STORAGE_BIT
-  * ename:VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT
-  * ename:VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT
-  * ename:VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT
-  * ename:VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT
-ifdef::VK_NV_shading_rate_image,VK_KHR_fragment_shading_rate[]
-  * ename:VK_IMAGE_USAGE_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR
-endif::VK_NV_shading_rate_image,VK_KHR_fragment_shading_rate[]
-ifdef::VK_EXT_fragment_density_map[]
-  * ename:VK_IMAGE_USAGE_FRAGMENT_DENSITY_MAP_BIT_EXT
-endif::VK_EXT_fragment_density_map[]
---
-
-[open,refpage='VkImageCreateFlagBits',desc='Bitmask specifying additional parameters of an image',type='enums']
---
-Bits which can: be set in slink:VkImageCreateInfo::pname:flags, specifying
-additional parameters of an image, are:
-
-include::{generated}/api/enums/VkImageCreateFlagBits.txt[]
-
-  * ename:VK_IMAGE_CREATE_SPARSE_BINDING_BIT specifies that the image will
-    be backed using sparse memory binding.
-  * ename:VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT specifies that the image can:
-    be partially backed using sparse memory binding.
-    Images created with this flag must: also be created with the
-    ename:VK_IMAGE_CREATE_SPARSE_BINDING_BIT flag.
-  * ename:VK_IMAGE_CREATE_SPARSE_ALIASED_BIT specifies that the image will
-    be backed using sparse memory binding with memory ranges that might also
-    simultaneously be backing another image (or another portion of the same
-    image).
-    Images created with this flag must: also be created with the
-    ename:VK_IMAGE_CREATE_SPARSE_BINDING_BIT flag.
-  * ename:VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT specifies that the image can:
-    be used to create a sname:VkImageView with a different format from the
-    image.
-ifdef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
-    For <<formats-requiring-sampler-ycbcr-conversion,multi-planar>> formats,
-    ename:VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT specifies that a
-    sname:VkImageView can be created of a _plane_ of the image.
-endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
-  * ename:VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT specifies that the image can:
-    be used to create a sname:VkImageView of type
-    ename:VK_IMAGE_VIEW_TYPE_CUBE or ename:VK_IMAGE_VIEW_TYPE_CUBE_ARRAY.
-ifdef::VK_VERSION_1_1,VK_KHR_maintenance1[]
-  * ename:VK_IMAGE_CREATE_2D_ARRAY_COMPATIBLE_BIT specifies that the image
-    can: be used to create a sname:VkImageView of type
-    ename:VK_IMAGE_VIEW_TYPE_2D or ename:VK_IMAGE_VIEW_TYPE_2D_ARRAY.
-endif::VK_VERSION_1_1,VK_KHR_maintenance1[]
-ifdef::VK_VERSION_1_1[]
-  * ename:VK_IMAGE_CREATE_PROTECTED_BIT specifies that the image is a
-    protected image.
-endif::VK_VERSION_1_1[]
-ifdef::VK_VERSION_1_1,VK_KHR_device_group[]
-  * ename:VK_IMAGE_CREATE_SPLIT_INSTANCE_BIND_REGIONS_BIT specifies that the
-    image can: be used with a non-zero value of the
-    pname:splitInstanceBindRegionCount member of a
-    slink:VkBindImageMemoryDeviceGroupInfo structure passed into
-    flink:vkBindImageMemory2.
-    This flag also has the effect of making the image use the standard
-    sparse image block dimensions.
-endif::VK_VERSION_1_1,VK_KHR_device_group[]
-ifdef::VK_VERSION_1_1,VK_KHR_maintenance2[]
-  * ename:VK_IMAGE_CREATE_BLOCK_TEXEL_VIEW_COMPATIBLE_BIT specifies that the
-    image having a compressed format can: be used to create a
-    sname:VkImageView with an uncompressed format where each texel in the
-    image view corresponds to a compressed texel block of the image.
-  * ename:VK_IMAGE_CREATE_EXTENDED_USAGE_BIT specifies that the image can:
-    be created with usage flags that are not supported for the format the
-    image is created with but are supported for at least one format a
-    sname:VkImageView created from the image can: have.
-endif::VK_VERSION_1_1,VK_KHR_maintenance2[]
-ifdef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
-  * ename:VK_IMAGE_CREATE_DISJOINT_BIT specifies that an image with a
-    <<formats-requiring-sampler-ycbcr-conversion,multi-planar format>> must:
-    have each plane separately bound to memory, rather than having a single
-    memory binding for the whole image; the presence of this bit
-    distinguishes a _disjoint image_ from an image without this bit set.
-endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
-ifdef::VK_VERSION_1_1,VK_KHR_bind_memory2[]
-  * ename:VK_IMAGE_CREATE_ALIAS_BIT specifies that two images created with
-    the same creation parameters and aliased to the same memory can:
-    interpret the contents of the memory consistently with each other,
-    subject to the rules described in the <<resources-memory-aliasing,Memory
-    Aliasing>> section.
-ifdef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
-    This flag further specifies that each plane of a _disjoint_ image can:
-    share an in-memory non-linear representation with single-plane images,
-    and that a single-plane image can: share an in-memory non-linear
-    representation with a plane of a multi-planar disjoint image, according
-    to the rules in <<formats-compatible-planes>>.
-endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
-ifdef::VK_VERSION_1_1,VK_KHR_external_memory,VK_NV_external_memory[]
-    If the pname:pNext chain includes a
-ifdef::VK_VERSION_1_1,VK_KHR_external_memory[slink:VkExternalMemoryImageCreateInfo]
-// Jon: logic needs to incorporate VK_VERSION_1_1
-ifdef::VK_KHR_external_memory+VK_NV_external_memory[or]
-ifdef::VK_NV_external_memory[slink:VkExternalMemoryImageCreateInfoNV]
-    structure whose pname:handleTypes member is not `0`, it is as if
-    ename:VK_IMAGE_CREATE_ALIAS_BIT is set.
-endif::VK_VERSION_1_1,VK_KHR_external_memory,VK_NV_external_memory[]
-endif::VK_VERSION_1_1,VK_KHR_bind_memory2[]
-ifdef::VK_EXT_sample_locations[]
-  * ename:VK_IMAGE_CREATE_SAMPLE_LOCATIONS_COMPATIBLE_DEPTH_BIT_EXT
-    specifies that an image with a depth or depth/stencil format can: be
-    used with custom sample locations when used as a depth/stencil
-    attachment.
-endif::VK_EXT_sample_locations[]
-ifdef::VK_NV_corner_sampled_image[]
-  * ename:VK_IMAGE_CREATE_CORNER_SAMPLED_BIT_NV specifies that the image is
-    a <<resources-images-corner-sampled,corner-sampled image>>.
-endif::VK_NV_corner_sampled_image[]
-ifdef::VK_EXT_fragment_density_map[]
-  * ename:VK_IMAGE_CREATE_SUBSAMPLED_BIT_EXT specifies that an image can: be
-    in a subsampled format which may: be more optimal when written as an
-    attachment by a render pass that has a fragment density map attachment.
-    Accessing a subsampled image has additional considerations:
-  ** Image data read as an image sampler will have undefined: values if the
-     sampler was not created with pname:flags containing
-     ename:VK_SAMPLER_CREATE_SUBSAMPLED_BIT_EXT or was not sampled through
-     the use of a combined image sampler with an immutable sampler in
-     sname:VkDescriptorSetLayoutBinding.
-  ** Image data read with an input attachment will have undefined: values if
-     the contents were not written as an attachment in an earlier subpass of
-     the same render pass.
-ifdef::VK_EXT_fragment_density_map2[]
-  ** Image data read as an image sampler in the fragment shader will be
-     additionally be read by the device during
-     ename:VK_PIPELINE_STAGE_VERTEX_SHADER_BIT if
-     <<limits-subsampledCoarseReconstructionEarlyAccess,sname:VkPhysicalDeviceFragmentDensityMap2PropertiesEXT::pname:subsampledCoarseReconstructionEarlyAccess>>
-     is ename:VK_TRUE and the sampler was created with pname:flags
-     containing
-     ename:VK_SAMPLER_CREATE_SUBSAMPLED_COARSE_RECONSTRUCTION_BIT_EXT.
-  ** Image data read with load operations are resampled to the fragment
-     density of the render pass if
-     <<limits-subsampledLoads,sname:VkPhysicalDeviceFragmentDensityMap2PropertiesEXT::pname:subsampledLoads>>
-     is ename:VK_TRUE.
-     Otherwise, values of image data are undefined:.
-endif::VK_EXT_fragment_density_map2[]
-ifndef::VK_EXT_fragment_density_map2[]
-  ** Image data read with load operations may: be resampled to the fragment
-     density of the render pass.
-endif::VK_EXT_fragment_density_map2[]
-  ** Image contents outside of the render area take on undefined: values if
-     the image is stored as a render pass attachment.
-endif::VK_EXT_fragment_density_map[]
-
-See <<sparsememory-sparseresourcefeatures,Sparse Resource Features>> and
-<<sparsememory-physicalfeatures,Sparse Physical Device Features>> for more
-details.
---
-
-[open,refpage='VkImageCreateFlags',desc='Bitmask of VkImageCreateFlagBits',type='flags']
---
-include::{generated}/api/flags/VkImageCreateFlags.txt[]
-
-tname:VkImageCreateFlags is a bitmask type for setting a mask of zero or
-more elink:VkImageCreateFlagBits.
---
-
-[open,refpage='VkImageType',desc='Specifies the type of an image object',type='enums']
---
-Possible values of slink:VkImageCreateInfo::pname:imageType, specifying the
-basic dimensionality of an image, are:
-
-include::{generated}/api/enums/VkImageType.txt[]
-
-  * ename:VK_IMAGE_TYPE_1D specifies a one-dimensional image.
-  * ename:VK_IMAGE_TYPE_2D specifies a two-dimensional image.
-  * ename:VK_IMAGE_TYPE_3D specifies a three-dimensional image.
---
-
-[open,refpage='VkImageTiling',desc='Specifies the tiling arrangement of data in an image',type='enums']
---
-Possible values of slink:VkImageCreateInfo::pname:tiling, specifying the
-tiling arrangement of texel blocks in an image, are:
-
-include::{generated}/api/enums/VkImageTiling.txt[]
-
-  * ename:VK_IMAGE_TILING_OPTIMAL specifies optimal tiling (texels are laid
-    out in an implementation-dependent arrangement, for more efficient
-    memory access).
-  * ename:VK_IMAGE_TILING_LINEAR specifies linear tiling (texels are laid
-    out in memory in row-major order, possibly with some padding on each
-    row).
-ifdef::VK_EXT_image_drm_format_modifier[]
-  * ename:VK_IMAGE_TILING_DRM_FORMAT_MODIFIER_EXT indicates that the image's
-    tiling is defined by a <<glossary-drm-format-modifier,Linux DRM format
-    modifier>>.
-    The modifier is specified at image creation with
-    slink:VkImageDrmFormatModifierListCreateInfoEXT or
-    slink:VkImageDrmFormatModifierExplicitCreateInfoEXT, and can: be queried
-    with flink:vkGetImageDrmFormatModifierPropertiesEXT.
-endif::VK_EXT_image_drm_format_modifier[]
---
-
-[open,refpage='vkGetImageSubresourceLayout',desc='Retrieve information about an image subresource',type='protos']
---
-To query the memory layout of an image subresource, call:
-
-include::{generated}/api/protos/vkGetImageSubresourceLayout.txt[]
-
-  * pname:device is the logical device that owns the image.
-  * pname:image is the image whose layout is being queried.
-  * pname:pSubresource is a pointer to a slink:VkImageSubresource structure
-    selecting a specific image for the image subresource.
-  * pname:pLayout is a pointer to a slink:VkSubresourceLayout structure in
-    which the layout is returned.
-
-ifndef::VK_EXT_image_drm_format_modifier[]
-The image must: be <<glossary-linear-resource,linear>>.
-The
-endif::VK_EXT_image_drm_format_modifier[]
-ifdef::VK_EXT_image_drm_format_modifier[]
-If the image is <<glossary-linear-resource,linear>>, then the
-endif::VK_EXT_image_drm_format_modifier[]
-returned layout is valid for <<memory-device-hostaccess, host access>>.
-
-ifdef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
-If the image's
-ifdef::VK_EXT_image_drm_format_modifier[]
-tiling is ename:VK_IMAGE_TILING_LINEAR and its
-endif::VK_EXT_image_drm_format_modifier[]
-format is a <<formats-requiring-sampler-ycbcr-conversion,multi-planar
-format>>, then fname:vkGetImageSubresourceLayout describes one
-ifdef::VK_EXT_image_drm_format_modifier[_format plane_]
-ifndef::VK_EXT_image_drm_format_modifier[plane]
-of the image.
-endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
-ifdef::VK_EXT_image_drm_format_modifier[]
-If the image's tiling is ename:VK_IMAGE_TILING_DRM_FORMAT_MODIFIER_EXT, then
-fname:vkGetImageSubresourceLayout describes one _memory plane_ of the image.
-If the image's tiling is ename:VK_IMAGE_TILING_DRM_FORMAT_MODIFIER_EXT and
-the image is <<glossary-linear-resource,non-linear>>, then the returned
-layout has an implementation-dependent meaning; the vendor of the image's
-<<glossary-drm-format-modifier,DRM format modifier>> may: provide
-documentation that explains how to interpret the returned layout.
-endif::VK_EXT_image_drm_format_modifier[]
-
-fname:vkGetImageSubresourceLayout is invariant for the lifetime of a single
-image.
-ifdef::VK_ANDROID_external_memory_android_hardware_buffer[]
-However, the subresource layout of images in Android hardware buffer
-external memory is not known until the image has been bound to memory, so
-applications must: not call flink:vkGetImageSubresourceLayout for such an
-image before it has been bound.
-endif::VK_ANDROID_external_memory_android_hardware_buffer[]
-
-.Valid Usage
-****
-ifndef::VK_EXT_image_drm_format_modifier[]
-  * [[VUID-vkGetImageSubresourceLayout-image-00996]]
-    pname:image must: have been created with pname:tiling equal to
-    ename:VK_IMAGE_TILING_LINEAR
-endif::VK_EXT_image_drm_format_modifier[]
-ifdef::VK_EXT_image_drm_format_modifier[]
-  * [[VUID-vkGetImageSubresourceLayout-image-02270]]
-    pname:image must: have been created with pname:tiling equal to
-    ename:VK_IMAGE_TILING_LINEAR or
-    ename:VK_IMAGE_TILING_DRM_FORMAT_MODIFIER_EXT
-endif::VK_EXT_image_drm_format_modifier[]
-  * [[VUID-vkGetImageSubresourceLayout-aspectMask-00997]]
-    The pname:aspectMask member of pname:pSubresource must: only have a
-    single bit set
-  * [[VUID-vkGetImageSubresourceLayout-mipLevel-01716]]
-    The pname:mipLevel member of pname:pSubresource must: be less than the
-    pname:mipLevels specified in slink:VkImageCreateInfo when pname:image
-    was created
-  * [[VUID-vkGetImageSubresourceLayout-arrayLayer-01717]]
-    The pname:arrayLayer member of pname:pSubresource must: be less than the
-    pname:arrayLayers specified in slink:VkImageCreateInfo when pname:image
-    was created
-  * [[VUID-vkGetImageSubresourceLayout-format-04461]]
-    If pname:format is a color format, the pname:aspectMask member of
-    pname:pSubresource must: be ename:VK_IMAGE_ASPECT_COLOR_BIT
-  * [[VUID-vkGetImageSubresourceLayout-format-04462]]
-    If pname:format has a depth component, the pname:aspectMask member of
-    pname:pSubresource must: contain ename:VK_IMAGE_ASPECT_DEPTH_BIT
-  * [[VUID-vkGetImageSubresourceLayout-format-04463]]
-    If pname:format has a stencil component, the pname:aspectMask member of
-    pname:pSubresource must: contain ename:VK_IMAGE_ASPECT_STENCIL_BIT
-  * [[VUID-vkGetImageSubresourceLayout-format-04464]]
-    If pname:format does not contain a stencil or depth component, the
-    pname:aspectMask member of pname:pSubresource must: not contain
-    ename:VK_IMAGE_ASPECT_DEPTH_BIT or ename:VK_IMAGE_ASPECT_STENCIL_BIT
-ifdef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
-  * [[VUID-vkGetImageSubresourceLayout-format-01581]]
-    If the pname:tiling of the pname:image is ename:VK_IMAGE_TILING_LINEAR
-    and its pname:format is a
-    <<formats-requiring-sampler-ycbcr-conversion,multi-planar format>> with
-    two planes, the pname:aspectMask member of pname:pSubresource must: be
-    ename:VK_IMAGE_ASPECT_PLANE_0_BIT or ename:VK_IMAGE_ASPECT_PLANE_1_BIT
-  * [[VUID-vkGetImageSubresourceLayout-format-01582]]
-    If the pname:tiling of the pname:image is ename:VK_IMAGE_TILING_LINEAR
-    and its pname:format is a
-    <<formats-requiring-sampler-ycbcr-conversion,multi-planar format>> with
-    three planes, the pname:aspectMask member of pname:pSubresource must: be
-    ename:VK_IMAGE_ASPECT_PLANE_0_BIT, ename:VK_IMAGE_ASPECT_PLANE_1_BIT or
-    ename:VK_IMAGE_ASPECT_PLANE_2_BIT
-endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
-ifdef::VK_ANDROID_external_memory_android_hardware_buffer[]
-  * [[VUID-vkGetImageSubresourceLayout-image-01895]]
-    If pname:image was created with the
-    ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_ANDROID_HARDWARE_BUFFER_BIT_ANDROID
-    external memory handle type, then pname:image must: be bound to memory
-endif::VK_ANDROID_external_memory_android_hardware_buffer[]
-ifdef::VK_EXT_image_drm_format_modifier[]
-  * [[VUID-vkGetImageSubresourceLayout-tiling-02271]]
-    If the pname:tiling of the pname:image is
-    ename:VK_IMAGE_TILING_DRM_FORMAT_MODIFIER_EXT, then the pname:aspectMask
-    member of pname:pSubresource must: be
-    `VK_IMAGE_ASPECT_MEMORY_PLANE__{ibit}__BIT_EXT` and the index _i_ must:
-    be less than the
-    slink:VkDrmFormatModifierPropertiesEXT::pname:drmFormatModifierPlaneCount
-    associated with the image's pname:format and
-    slink:VkImageDrmFormatModifierPropertiesEXT::pname:drmFormatModifier
-endif::VK_EXT_image_drm_format_modifier[]
-****
-
-include::{generated}/validity/protos/vkGetImageSubresourceLayout.txt[]
---
-
-[open,refpage='VkImageSubresource',desc='Structure specifying an image subresource',type='structs']
---
-The sname:VkImageSubresource structure is defined as:
-
-include::{generated}/api/structs/VkImageSubresource.txt[]
-
-  * pname:aspectMask is a tlink:VkImageAspectFlags value selecting the image
-    _aspect_.
-  * pname:mipLevel selects the mipmap level.
-  * pname:arrayLayer selects the array layer.
-
-include::{generated}/validity/structs/VkImageSubresource.txt[]
---
-
-[open,refpage='VkSubresourceLayout',desc='Structure specifying subresource layout',type='structs']
---
-Information about the layout of the image subresource is returned in a
-sname:VkSubresourceLayout structure:
-
-include::{generated}/api/structs/VkSubresourceLayout.txt[]
-
-  * pname:offset is the byte offset from the start of the image
-ifdef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
-    or the plane
-endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
-    where the image subresource begins.
-  * pname:size is the size in bytes of the image subresource.
-    pname:size includes any extra memory that is required based on
-    pname:rowPitch.
-  * pname:rowPitch describes the number of bytes between each row of texels
-    in an image.
-  * pname:arrayPitch describes the number of bytes between each array layer
-    of an image.
-  * pname:depthPitch describes the number of bytes between each slice of 3D
-    image.
-
-If the image is <<glossary-linear-resource,linear>>, then pname:rowPitch,
-pname:arrayPitch and pname:depthPitch describe the layout of the image
-subresource in linear memory.
-For uncompressed formats, pname:rowPitch is the number of bytes between
-texels with the same x coordinate in adjacent rows (y coordinates differ by
-one).
-pname:arrayPitch is the number of bytes between texels with the same x and y
-coordinate in adjacent array layers of the image (array layer values differ
-by one).
-pname:depthPitch is the number of bytes between texels with the same x and y
-coordinate in adjacent slices of a 3D image (z coordinates differ by one).
-Expressed as an addressing formula, the starting byte of a texel in the
-image subresource has address:
-
-[source,c]
-~~~~
-// (x,y,z,layer) are in texel coordinates
-address(x,y,z,layer) = layer*arrayPitch + z*depthPitch + y*rowPitch + x*elementSize + offset
-~~~~
-
-For compressed formats, the pname:rowPitch is the number of bytes between
-compressed texel blocks in adjacent rows.
-pname:arrayPitch is the number of bytes between compressed texel blocks in
-adjacent array layers.
-pname:depthPitch is the number of bytes between compressed texel blocks in
-adjacent slices of a 3D image.
-
-[source,c]
-~~~~
-// (x,y,z,layer) are in compressed texel block coordinates
-address(x,y,z,layer) = layer*arrayPitch + z*depthPitch + y*rowPitch + x*compressedTexelBlockByteSize + offset;
-~~~~
-
-The value of pname:arrayPitch is undefined: for images that were not created
-as arrays.
-pname:depthPitch is defined only for 3D images.
-
-If the image has a
-ifdef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
-_single-plane_
-endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
-color format
-ifdef::VK_EXT_image_drm_format_modifier[]
-and its tiling is ename:VK_IMAGE_TILING_LINEAR
-endif::VK_EXT_image_drm_format_modifier[]
-, then the pname:aspectMask member of sname:VkImageSubresource must: be
-ename:VK_IMAGE_ASPECT_COLOR_BIT.
-
-If the image has a depth/stencil format
-ifdef::VK_EXT_image_drm_format_modifier[]
-and its tiling is ename:VK_IMAGE_TILING_LINEAR
-endif::VK_EXT_image_drm_format_modifier[]
-, then pname:aspectMask must: be either ename:VK_IMAGE_ASPECT_DEPTH_BIT or
-ename:VK_IMAGE_ASPECT_STENCIL_BIT.
-On implementations that store depth and stencil aspects separately, querying
-each of these image subresource layouts will return a different pname:offset
-and pname:size representing the region of memory used for that aspect.
-On implementations that store depth and stencil aspects interleaved, the
-same pname:offset and pname:size are returned and represent the interleaved
-memory allocation.
-
-ifdef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
-If the image has a <<formats-requiring-sampler-ycbcr-conversion,multi-planar
-format>>
-ifdef::VK_EXT_image_drm_format_modifier[]
-and its tiling is ename:VK_IMAGE_TILING_LINEAR
-endif::VK_EXT_image_drm_format_modifier[]
-, then the pname:aspectMask member of sname:VkImageSubresource must: be
-ename:VK_IMAGE_ASPECT_PLANE_0_BIT, ename:VK_IMAGE_ASPECT_PLANE_1_BIT, or
-(for 3-plane formats only) ename:VK_IMAGE_ASPECT_PLANE_2_BIT.
-Querying each of these image subresource layouts will return a different
-pname:offset and pname:size representing the region of memory used for that
-plane.
-If the image is _disjoint_, then the pname:offset is relative to the base
-address of the plane.
-If the image is _non-disjoint_, then the pname:offset is relative to the
-base address of the image.
-endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
-
-ifdef::VK_EXT_image_drm_format_modifier[]
-If the image's tiling is ename:VK_IMAGE_TILING_DRM_FORMAT_MODIFIER_EXT, then
-the pname:aspectMask member of sname:VkImageSubresource must: be one of
-`VK_IMAGE_ASPECT_MEMORY_PLANE__{ibit}__BIT_EXT`, where the maximum allowed
-plane index _i_ is defined by the
-slink:VkDrmFormatModifierPropertiesEXT::pname:drmFormatModifierPlaneCount
-associated with the image's slink:VkImageCreateInfo::pname:format and
-<<glossary-drm-format-modifier,modifier>>.
-The memory range used by the subresource is described by pname:offset and
-pname:size.
-If the image is _disjoint_, then the pname:offset is relative to the base
-address of the _memory plane_.
-If the image is _non-disjoint_, then the pname:offset is relative to the
-base address of the image.
-If the image is <<glossary-linear-resource,non-linear>>, then
-pname:rowPitch, pname:arrayPitch, and pname:depthPitch have an
-implementation-dependent meaning.
-endif::VK_EXT_image_drm_format_modifier[]
-
-include::{generated}/validity/structs/VkSubresourceLayout.txt[]
---
-
-ifdef::VK_EXT_image_drm_format_modifier[]
-[open,refpage='vkGetImageDrmFormatModifierPropertiesEXT',desc='Returns an image\'s DRM format modifier',type='protos']
---
-If an image was created with ename:VK_IMAGE_TILING_DRM_FORMAT_MODIFIER_EXT,
-then the image has a <<glossary-drm-format-modifier,Linux DRM format
-modifier>>.
-To query the _modifier_, call:
-
-include::{generated}/api/protos/vkGetImageDrmFormatModifierPropertiesEXT.txt[]
-
-  * pname:device is the logical device that owns the image.
-  * pname:image is the queried image.
-  * pname:pProperties is a pointer to a
-    slink:VkImageDrmFormatModifierPropertiesEXT structure in which
-    properties of the image's _DRM format modifier_ are returned.
-
-.Valid Usage
-****
-  * [[VUID-vkGetImageDrmFormatModifierPropertiesEXT-image-02272]]
-    pname:image must: have been created with
-    <<VkImageCreateInfo,pname:tiling>> equal to
-    ename:VK_IMAGE_TILING_DRM_FORMAT_MODIFIER_EXT
-****
-
-include::{generated}/validity/protos/vkGetImageDrmFormatModifierPropertiesEXT.txt[]
---
-
-[open,refpage='VkImageDrmFormatModifierPropertiesEXT',desc='Properties of an image\'s Linux DRM format modifier',type='structs']
---
-The slink:VkImageDrmFormatModifierPropertiesEXT structure is defined as:
-
-include::{generated}/api/structs/VkImageDrmFormatModifierPropertiesEXT.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:drmFormatModifier returns the image's
-    <<glossary-drm-format-modifier,Linux DRM format modifier>>.
-
-If the pname:image was created with
-slink:VkImageDrmFormatModifierListCreateInfoEXT, then the returned
-pname:drmFormatModifier must: belong to the list of modifiers provided at
-time of image creation in
-slink:VkImageDrmFormatModifierListCreateInfoEXT::pname:pDrmFormatModifiers.
-If the pname:image was created with
-slink:VkImageDrmFormatModifierExplicitCreateInfoEXT, then the returned
-pname:drmFormatModifier must: be the modifier provided at time of image
-creation in
-slink:VkImageDrmFormatModifierExplicitCreateInfoEXT::pname:drmFormatModifier.
-
-include::{generated}/validity/structs/VkImageDrmFormatModifierPropertiesEXT.txt[]
---
-endif::VK_EXT_image_drm_format_modifier[]
-
-[open,refpage='vkDestroyImage',desc='Destroy an image object',type='protos']
---
-To destroy an image, call:
-
-include::{generated}/api/protos/vkDestroyImage.txt[]
-
-  * pname:device is the logical device that destroys the image.
-  * pname:image is the image to destroy.
-  * pname:pAllocator controls host memory allocation as described in the
-    <<memory-allocation, Memory Allocation>> chapter.
-
-.Valid Usage
-****
-  * [[VUID-vkDestroyImage-image-01000]]
-    All submitted commands that refer to pname:image, either directly or via
-    a sname:VkImageView, must: have completed execution
-  * [[VUID-vkDestroyImage-image-01001]]
-    If sname:VkAllocationCallbacks were provided when pname:image was
-    created, a compatible set of callbacks must: be provided here
-  * [[VUID-vkDestroyImage-image-01002]]
-    If no sname:VkAllocationCallbacks were provided when pname:image was
-    created, pname:pAllocator must: be `NULL`
-ifdef::VK_KHR_swapchain[]
-  * [[VUID-vkDestroyImage-image-04882]]
-    pname:image must: not have been acquired from
-    flink:vkGetSwapchainImagesKHR
-endif::VK_KHR_swapchain[]
-****
-
-include::{generated}/validity/protos/vkDestroyImage.txt[]
---
-
-
-[[resources-image-format-features]]
-=== Image Format Features
-
-Valid uses of a slink:VkImage may: depend on the image's _format features_,
-defined below.
-Such constraints are documented in the affected valid usage statement.
-
-  * If the image was created with ename:VK_IMAGE_TILING_LINEAR, then its set
-    of _format features_ is the value of
-    slink:VkFormatProperties::pname:linearTilingFeatures found by calling
-    flink:vkGetPhysicalDeviceFormatProperties on the same pname:format as
-    slink:VkImageCreateInfo::pname:format.
-  * If the image was created with ename:VK_IMAGE_TILING_OPTIMAL,
-ifdef::VK_ANDROID_external_memory_android_hardware_buffer[]
-    but without an
-    <<memory-external-android-hardware-buffer-external-formats,Android
-    hardware buffer external format>>,
-endif::VK_ANDROID_external_memory_android_hardware_buffer[]
-ifdef::VK_FUCHSIA_buffer_collection[]
-ifndef::VK_ANDROID_external_memory_android_hardware_buffer[]
-    but without an
-endif::VK_ANDROID_external_memory_android_hardware_buffer[]
-ifdef::VK_ANDROID_external_memory_android_hardware_buffer[]
-    or an
-endif::VK_ANDROID_external_memory_android_hardware_buffer[]
-    slink:VkBufferCollectionImageCreateInfoFUCHSIA,
-endif::VK_FUCHSIA_buffer_collection[]
-    then its set of _format features_ is the value of
-    slink:VkFormatProperties::pname:optimalTilingFeatures found by calling
-    flink:vkGetPhysicalDeviceFormatProperties on the same pname:format as
-    slink:VkImageCreateInfo::pname:format.
-ifdef::VK_ANDROID_external_memory_android_hardware_buffer[]
-  * If the image was created with an
-    <<memory-external-android-hardware-buffer-external-formats,Android
-    hardware buffer external format>>, then its set of _format features_ is
-    the value of
-    slink:VkAndroidHardwareBufferFormatPropertiesANDROID::pname:formatFeatures
-    found by calling flink:vkGetAndroidHardwareBufferPropertiesANDROID on
-    the Android hardware buffer that was imported to the
-    slink:VkDeviceMemory to which the image is bound.
-endif::VK_ANDROID_external_memory_android_hardware_buffer[]
-ifdef::VK_EXT_image_drm_format_modifier[]
-  * If the image was created with
-    ename:VK_IMAGE_TILING_DRM_FORMAT_MODIFIER_EXT, then:
-  ** The image's DRM format modifier is the value of
-     slink:VkImageDrmFormatModifierListCreateInfoEXT::pname:drmFormatModifier
-     found by calling flink:vkGetImageDrmFormatModifierPropertiesEXT.
-  ** Let
-     slink:VkDrmFormatModifierPropertiesListEXT::pname:pDrmFormatModifierProperties
-     be the array found by calling
-     flink:vkGetPhysicalDeviceFormatProperties2 on the same pname:format as
-     slink:VkImageCreateInfo::pname:format.
-  ** Let `VkDrmFormatModifierPropertiesEXT prop` be an array element whose
-     pname:drmFormatModifier member is the value of the image's DRM format
-     modifier.
-  ** Then the image set of _format features_ is the value of taking the
-     bitwise intersection over the collected
-     `prop`::pname:drmFormatModifierTilingFeatures.
-endif::VK_EXT_image_drm_format_modifier[]
-
-
-ifdef::VK_NV_corner_sampled_image[]
-[[resources-images-corner-sampled]]
-=== Corner-Sampled Images
-
-A _corner-sampled image_ is an image where unnormalized texel coordinates
-are centered on integer values rather than half-integer values.
-
-A corner-sampled image has a number of differences compared to conventional
-texture image:
-
-  * Texels are centered on integer coordinates.
-    See <<textures-unnormalized-to-integer, Unnormalized Texel Coordinate
-    Operations>>
-  * Normalized coordinates are scaled using [eq]#coord {times} (dim - 1)#
-    rather than [eq]#coord {times} dim#, where dim is the size of one
-    dimension of the image.
-    See <<textures-normalized-to-unnormalized, normalized texel coordinate
-    transform>>.
-  * Partial derivatives are scaled using [eq]#coord {times} (dim - 1)#
-    rather than [eq]#coord {times} dim#.
-    See <<textures-scale-factor,Scale Factor Operation>>.
-  * Calculation of the next higher lod size goes according to
-    [eq]#{lceil}dim / 2{rceil}# rather than [eq]#{lfloor}dim / 2{rfloor}#.
-    See <<resources-image-miplevel-sizing,Image Miplevel Sizing>>.
-  * The minimum level size is 2x2 for 2D images and 2x2x2 for 3D images.
-    See <<resources-image-miplevel-sizing,Image Miplevel Sizing>>.
-
-Corner-sampling is only supported for 2D and 3D images.
-When sampling a corner-sampled image, the sampler addressing mode must: be
-ename:VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE.
-Corner-sampled images are not supported as cube maps or depth/stencil
-images.
-endif::VK_NV_corner_sampled_image[]
-
-
-[[resources-image-miplevel-sizing]]
-=== Image Miplevel Sizing
-
-A _complete mipmap chain_ is the full set of miplevels, from the largest
-miplevel provided, down to the _minimum miplevel size_.
-
-
-==== Conventional Images
-
-For conventional images, the dimensions of each successive miplevel,
-[eq]#n+1#, are:
-
-  {empty}:: [eq]#pname:width~n+1~ = max({lfloor}pname:width~n~/2{rfloor},
-            1)#
-  {empty}:: [eq]#pname:height~n+1~ = max({lfloor}pname:height~n~/2{rfloor},
-            1)#
-  {empty}:: [eq]#pname:depth~n+1~ = max({lfloor}pname:depth~n~/2{rfloor},
-            1)#
-
-where [eq]#pname:width~n~#, [eq]#pname:height~n~#, and [eq]#pname:depth~n~#
-are the dimensions of the next larger miplevel, [eq]#n#.
-
-The minimum miplevel size is:
-
-  * 1 for one-dimensional images,
-  * 1x1 for two-dimensional images, and
-  * 1x1x1 for three-dimensional images.
-
-The number of levels in a complete mipmap chain is:
-
-  {empty}:: [eq]#{lfloor}log~2~(max(pname:width~0~, pname:height~0~,
-            pname:depth~0~)){rfloor} {plus} 1#
-
-where [eq]#pname:width~0~#, [eq]#pname:height~0~#, and [eq]#pname:depth~0~#
-are the dimensions of the largest (most detailed) miplevel, `0`.
-
-
-ifdef::VK_NV_corner_sampled_image[]
-==== Corner-Sampled Images
-
-For corner-sampled images, the dimensions of each successive miplevel,
-[eq]#n+1#, are:
-
-  {empty}:: [eq]#pname:width~n+1~ = max({lceil}pname:width~n~/2{rceil}, 2)#
-  {empty}:: [eq]#pname:height~n+1~ = max({lceil}pname:height~n~/2{rceil},
-            2)#
-  {empty}:: [eq]#pname:depth~n+1~ = max({lceil}pname:depth~n~/2{rceil}, 2)#
-
-where [eq]#pname:width~n~#, [eq]#pname:height~n~#, and [eq]#pname:depth~n~#
-are the dimensions of the next larger miplevel, [eq]#n#.
-
-The minimum miplevel size is:
-
-  * 2x2 for two-dimensional images, and
-  * 2x2x2 for three-dimensional images.
-
-The number of levels in a complete mipmap chain is:
-
-  {empty}:: [eq]#{lceil}log~2~(max(pname:width~0~, pname:height~0~,
-            pname:depth~0~)){rceil}#
-
-where [eq]#pname:width~0~#, [eq]#pname:height~0~#, and [eq]#pname:depth~0~#
-are the dimensions of the largest (most detailed) miplevel, `0`.
-endif::VK_NV_corner_sampled_image[]
-
-
-[[resources-image-layouts]]
-== Image Layouts
-
-Images are stored in implementation-dependent opaque layouts in memory.
-Each layout has limitations on what kinds of operations are supported for
-image subresources using the layout.
-At any given time, the data representing an image subresource in memory
-exists in a particular layout which is determined by the most recent layout
-transition that was performed on that image subresource.
-Applications have control over which layout each image subresource uses, and
-can: transition an image subresource from one layout to another.
-Transitions can: happen with an image memory barrier, included as part of a
-flink:vkCmdPipelineBarrier or a flink:vkCmdWaitEvents command buffer command
-(see <<synchronization-image-memory-barriers>>), or as part of a subpass
-dependency within a render pass (see sname:VkSubpassDependency).
-
-Image layout is per-image subresource.
-Separate image subresources of the same image can: be in different layouts
-at the same time, with the exception that depth and stencil aspects of a
-given image subresource can: only be in different layouts if the
-<<features-separateDepthStencilLayouts, pname:separateDepthStencilLayouts>>
-feature is enabled.
-
-[NOTE]
-.Note
-====
-Each layout may: offer optimal performance for a specific usage of image
-memory.
-For example, an image with a layout of
-ename:VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL may: provide optimal
-performance for use as a color attachment, but be unsupported for use in
-transfer commands.
-Applications can: transition an image subresource from one layout to another
-in order to achieve optimal performance when the image subresource is used
-for multiple kinds of operations.
-After initialization, applications need not use any layout other than the
-general layout, though this may: produce suboptimal performance on some
-implementations.
-====
-
-Upon creation, all image subresources of an image are initially in the same
-layout, where that layout is selected by the
-sname:VkImageCreateInfo::pname:initialLayout member.
-The pname:initialLayout must: be either ename:VK_IMAGE_LAYOUT_UNDEFINED or
-ename:VK_IMAGE_LAYOUT_PREINITIALIZED.
-If it is ename:VK_IMAGE_LAYOUT_PREINITIALIZED, then the image data can: be
-preinitialized by the host while using this layout, and the transition away
-from this layout will preserve that data.
-If it is ename:VK_IMAGE_LAYOUT_UNDEFINED, then the contents of the data are
-considered to be undefined:, and the transition away from this layout is not
-guaranteed to preserve that data.
-For either of these initial layouts, any image subresources must: be
-transitioned to another layout before they are accessed by the device.
-
-Host access to image memory is only well-defined for
-<<glossary-linear-resource,linear>> images and for image subresources of
-those images which are currently in either the
-ename:VK_IMAGE_LAYOUT_PREINITIALIZED or ename:VK_IMAGE_LAYOUT_GENERAL
-layout.
-Calling flink:vkGetImageSubresourceLayout for a linear image returns a
-subresource layout mapping that is valid for either of those image layouts.
-
-[open,refpage='VkImageLayout',desc='Layout of image and image subresources',type='enums']
---
-The set of image layouts consists of:
-
-include::{generated}/api/enums/VkImageLayout.txt[]
-
-The type(s) of device access supported by each layout are:
-
-  * ename:VK_IMAGE_LAYOUT_UNDEFINED specifies that the layout is unknown.
-    Image memory cannot: be transitioned into this layout.
-    This layout can: be used as the pname:initialLayout member of
-    slink:VkImageCreateInfo.
-    This layout can: be used in place of the current image layout in a
-    layout transition, but doing so will cause the contents of the image's
-    memory to be undefined:.
-  * ename:VK_IMAGE_LAYOUT_PREINITIALIZED specifies that an image's memory is
-    in a defined layout and can: be populated by data, but that it has not
-    yet been initialized by the driver.
-    Image memory cannot: be transitioned into this layout.
-    This layout can: be used as the pname:initialLayout member of
-    slink:VkImageCreateInfo.
-    This layout is intended to be used as the initial layout for an image
-    whose contents are written by the host, and hence the data can: be
-    written to memory immediately, without first executing a layout
-    transition.
-    Currently, ename:VK_IMAGE_LAYOUT_PREINITIALIZED is only useful with
-    <<glossary-linear-resource,linear>> images because there is not a
-    standard layout defined for ename:VK_IMAGE_TILING_OPTIMAL images.
-  * ename:VK_IMAGE_LAYOUT_GENERAL supports all types of device access.
-ifdef::VK_KHR_synchronization2[]
-  * ename:VK_IMAGE_LAYOUT_ATTACHMENT_OPTIMAL_KHR specifies a layout that
-    must: only be used with attachment accesses in the graphics pipeline.
-  * ename:VK_IMAGE_LAYOUT_READ_ONLY_OPTIMAL_KHR specifies a layout allowing
-    read only access as an attachment, or in shaders as a sampled image,
-    combined image/sampler, or input attachment.
-endif::VK_KHR_synchronization2[]
-  * ename:VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL must: only be used as a
-    color or resolve attachment in a sname:VkFramebuffer.
-    This layout is valid only for image subresources of images created with
-    the ename:VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT usage bit enabled.
-  * ename:VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL specifies a
-    layout for both the depth and stencil aspects of a depth/stencil format
-    image allowing read and write access as a depth/stencil attachment.
-ifdef::VK_VERSION_1_2,VK_KHR_separate_depth_stencil_layouts[]
-    It is equivalent to ename:VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL and
-    ename:VK_IMAGE_LAYOUT_STENCIL_ATTACHMENT_OPTIMAL.
-endif::VK_VERSION_1_2,VK_KHR_separate_depth_stencil_layouts[]
-  * ename:VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL specifies a layout
-    for both the depth and stencil aspects of a depth/stencil format image
-    allowing read only access as a depth/stencil attachment or in shaders as
-    a sampled image, combined image/sampler, or input attachment.
-ifdef::VK_VERSION_1_2,VK_KHR_separate_depth_stencil_layouts[]
-    It is equivalent to ename:VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL and
-    ename:VK_IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL.
-endif::VK_VERSION_1_2,VK_KHR_separate_depth_stencil_layouts[]
-ifdef::VK_VERSION_1_1,VK_KHR_maintenance2[]
-  * ename:VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_OPTIMAL
-    specifies a layout for depth/stencil format images allowing read and
-    write access to the stencil aspect as a stencil attachment, and read
-    only access to the depth aspect as a depth attachment or in shaders as a
-    sampled image, combined image/sampler, or input attachment.
-ifdef::VK_VERSION_1_2,VK_KHR_separate_depth_stencil_layouts[]
-    It is equivalent to ename:VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL and
-    ename:VK_IMAGE_LAYOUT_STENCIL_ATTACHMENT_OPTIMAL.
-endif::VK_VERSION_1_2,VK_KHR_separate_depth_stencil_layouts[]
-  * ename:VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_OPTIMAL
-    specifies a layout for depth/stencil format images allowing read and
-    write access to the depth aspect as a depth attachment, and read only
-    access to the stencil aspect as a stencil attachment or in shaders as a
-    sampled image, combined image/sampler, or input attachment.
-ifdef::VK_VERSION_1_2,VK_KHR_separate_depth_stencil_layouts[]
-    It is equivalent to ename:VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL and
-    ename:VK_IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL.
-endif::VK_VERSION_1_2,VK_KHR_separate_depth_stencil_layouts[]
-endif::VK_VERSION_1_1,VK_KHR_maintenance2[]
-ifdef::VK_VERSION_1_2,VK_KHR_separate_depth_stencil_layouts[]
-  * ename:VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL specifies a layout for
-    the depth aspect of a depth/stencil format image allowing read and write
-    access as a depth attachment.
-  * ename:VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL specifies a layout for the
-    depth aspect of a depth/stencil format image allowing read-only access
-    as a depth attachment or in shaders as a sampled image, combined
-    image/sampler, or input attachment.
-  * ename:VK_IMAGE_LAYOUT_STENCIL_ATTACHMENT_OPTIMAL specifies a layout for
-    the stencil aspect of a depth/stencil format image allowing read and
-    write access as a stencil attachment.
-  * ename:VK_IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL specifies a layout for
-    the stencil aspect of a depth/stencil format image allowing read-only
-    access as a stencil attachment or in shaders as a sampled image,
-    combined image/sampler, or input attachment.
-endif::VK_VERSION_1_2,VK_KHR_separate_depth_stencil_layouts[]
-  * ename:VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL specifies a layout
-    allowing read-only access in a shader as a sampled image, combined
-    image/sampler, or input attachment.
-    This layout is valid only for image subresources of images created with
-    the ename:VK_IMAGE_USAGE_SAMPLED_BIT or
-    ename:VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT usage bits enabled.
-  * ename:VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL must: only be used as a
-    source image of a transfer command (see the definition of
-    <<synchronization-pipeline-stages-transfer,
-    ename:VK_PIPELINE_STAGE_TRANSFER_BIT>>).
-    This layout is valid only for image subresources of images created with
-    the ename:VK_IMAGE_USAGE_TRANSFER_SRC_BIT usage bit enabled.
-  * ename:VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL must: only be used as a
-    destination image of a transfer command.
-    This layout is valid only for image subresources of images created with
-    the ename:VK_IMAGE_USAGE_TRANSFER_DST_BIT usage bit enabled.
-ifdef::VK_KHR_swapchain[]
-  * ename:VK_IMAGE_LAYOUT_PRESENT_SRC_KHR must: only be used for presenting
-    a presentable image for display.
-    A swapchain's image must: be transitioned to this layout before calling
-    flink:vkQueuePresentKHR, and must: be transitioned away from this layout
-    after calling flink:vkAcquireNextImageKHR.
-ifdef::VK_KHR_shared_presentable_image[]
-  * ename:VK_IMAGE_LAYOUT_SHARED_PRESENT_KHR is valid only for shared
-    presentable images, and must: be used for any usage the image supports.
-endif::VK_KHR_shared_presentable_image[]
-endif::VK_KHR_swapchain[]
-ifdef::VK_KHR_fragment_shading_rate,VK_NV_shading_rate_image[]
-  * ename:VK_IMAGE_LAYOUT_FRAGMENT_SHADING_RATE_ATTACHMENT_OPTIMAL_KHR must:
-    only be used as a
-ifdef::VK_KHR_fragment_shading_rate[]
-    <<primsrast-fragment-shading-rate-attachment, fragment shading rate
-    attachment>>
-endif::VK_KHR_fragment_shading_rate[]
-ifdef::VK_KHR_fragment_shading_rate,VK_NV_shading_rate_image[or]
-ifdef::VK_NV_shading_rate_image[]
-    <<primsrast-shading-rate-image, shading rate image>>.
-endif::VK_NV_shading_rate_image[]
-    This layout is valid only for image subresources of images created with
-    the ename:VK_IMAGE_USAGE_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR usage
-    bit enabled.
-endif::VK_KHR_fragment_shading_rate,VK_NV_shading_rate_image[]
-ifdef::VK_EXT_fragment_density_map[]
-  * ename:VK_IMAGE_LAYOUT_FRAGMENT_DENSITY_MAP_OPTIMAL_EXT must: only be
-    used as a fragment density map attachment in a sname:VkRenderPass.
-    This layout is valid only for image subresources of images created with
-    the ename:VK_IMAGE_USAGE_FRAGMENT_DENSITY_MAP_BIT_EXT usage bit enabled.
-endif::VK_EXT_fragment_density_map[]
-ifdef::VK_KHR_video_decode_queue[]
-  * ename:VK_IMAGE_LAYOUT_VIDEO_DECODE_DST_KHR must: only be used as a
-    decode output image of a <<video-decode-operations, video decode
-    operation>>.
-    This layout is valid only for image subresources of images created with
-    the ename:VK_IMAGE_USAGE_VIDEO_DECODE_DST_BIT_KHR usage bit enabled.
-  * ename:VK_IMAGE_LAYOUT_VIDEO_DECODE_SRC_KHR must: only be used as a
-    decode source image of a <<video-decode-operations, video decode
-    operation>>.
-    This layout is valid only for image subresources of images created with
-    the ename:VK_IMAGE_USAGE_VIDEO_DECODE_SRC_BIT_KHR usage bit enabled.
-  * ename:VK_IMAGE_LAYOUT_VIDEO_DECODE_DPB_KHR must: only be used as a
-    decode source or destination image of a <<video-decode-operations, video
-    decode operation>>.
-    This layout is valid only for image subresources of images created with
-    the ename:VK_IMAGE_USAGE_VIDEO_DECODE_DPB_BIT_KHR usage bit enabled.
-endif::VK_KHR_video_decode_queue[]
-ifdef::VK_KHR_video_encode_queue[]
-  * ename:VK_IMAGE_LAYOUT_VIDEO_ENCODE_DST_KHR must: only be used as a
-    encode output image of a <<video-encode-operations, video encode
-    operation>>.
-    This layout is valid only for image subresources of images created with
-    the ename:VK_IMAGE_USAGE_VIDEO_ENCODE_DST_BIT_KHR usage bit enabled.
-  * ename:VK_IMAGE_LAYOUT_VIDEO_ENCODE_SRC_KHR must: only be used as a
-    encode source image of a <<video-encode-operations, video encode
-    operation>>.
-    This layout is valid only for image subresources of images created with
-    the ename:VK_IMAGE_USAGE_VIDEO_ENCODE_SRC_BIT_KHR usage bit enabled.
-  * ename:VK_IMAGE_LAYOUT_VIDEO_ENCODE_DPB_KHR must: only be used as a
-    encode source or destination image of a <<video-encode-operations, video
-    encode operation>>.
-    This layout is valid only for image subresources of images created with
-    the ename:VK_IMAGE_USAGE_VIDEO_ENCODE_DPB_BIT_KHR usage bit enabled.
-endif::VK_KHR_video_encode_queue[]
-
-The layout of each image subresource is not a state of the image subresource
-itself, but is rather a property of how the data in memory is organized, and
-thus for each mechanism of accessing an image in the API the application
-must: specify a parameter or structure member that indicates which image
-layout the image subresource(s) are considered to be in when the image will
-be accessed.
-For transfer commands, this is a parameter to the command (see <<clears>>
-and <<copies>>).
-For use as a framebuffer attachment, this is a member in the substructures
-of the slink:VkRenderPassCreateInfo (see <<renderpass,Render Pass>>).
-For use in a descriptor set, this is a member in the
-sname:VkDescriptorImageInfo structure (see <<descriptorsets-updates>>).
---
-
-
-[[resources-image-layouts-matching-rule]]
-=== Image Layout Matching Rules
-
-At the time that any command buffer command accessing an image executes on
-any queue, the layouts of the image subresources that are accessed must: all
-match exactly the layout specified via the API controlling those accesses
-ifdef::VK_VERSION_1_1,VK_KHR_maintenance2[]
-, except in case of accesses to an image with a depth/stencil format
-performed through descriptors referring to only a single aspect of the
-image, where the following relaxed matching rules apply:
-
-  * Descriptors referring just to the depth aspect of a depth/stencil image
-    only need to match in the image layout of the depth aspect, thus
-    ename:VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL and
-    ename:VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_OPTIMAL are
-    considered to match.
-  * Descriptors referring just to the stencil aspect of a depth/stencil
-    image only need to match in the image layout of the stencil aspect, thus
-    ename:VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL and
-    ename:VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_OPTIMAL are
-    considered to match
-endif::VK_VERSION_1_1,VK_KHR_maintenance2[]
-.
-
-When performing a layout transition on an image subresource, the old layout
-value must: either equal the current layout of the image subresource (at the
-time the transition executes), or else be ename:VK_IMAGE_LAYOUT_UNDEFINED
-(implying that the contents of the image subresource need not be preserved).
-The new layout used in a transition must: not be
-ename:VK_IMAGE_LAYOUT_UNDEFINED or ename:VK_IMAGE_LAYOUT_PREINITIALIZED.
-
-ifdef::VK_EXT_sample_locations[]
-
-The image layout of each image subresource of a depth/stencil image created
-with ename:VK_IMAGE_CREATE_SAMPLE_LOCATIONS_COMPATIBLE_DEPTH_BIT_EXT is
-dependent on the last sample locations used to render to the image
-subresource as a depth/stencil attachment, thus applications must: provide
-the same sample locations that were last used to render to the given image
-subresource whenever a layout transition of the image subresource happens,
-otherwise the contents of the depth aspect of the image subresource become
-undefined:.
-
-In addition, depth reads from a depth/stencil attachment referring to an
-image subresource range of a depth/stencil image created with
-ename:VK_IMAGE_CREATE_SAMPLE_LOCATIONS_COMPATIBLE_DEPTH_BIT_EXT using
-different sample locations than what have been last used to perform depth
-writes to the image subresources of the same image subresource range return
-undefined: values.
-
-Similarly, depth writes to a depth/stencil attachment referring to an image
-subresource range of a depth/stencil image created with
-ename:VK_IMAGE_CREATE_SAMPLE_LOCATIONS_COMPATIBLE_DEPTH_BIT_EXT using
-different sample locations than what have been last used to perform depth
-writes to the image subresources of the same image subresource range make
-the contents of the depth aspect of those image subresources undefined:.
-
-endif::VK_EXT_sample_locations[]
-
-
-[[resources-image-views]]
-== Image Views
-
-[open,refpage='VkImageView',desc='Opaque handle to an image view object',type='handles']
---
-Image objects are not directly accessed by pipeline shaders for reading or
-writing image data.
-Instead, _image views_ representing contiguous ranges of the image
-subresources and containing additional metadata are used for that purpose.
-Views must: be created on images of compatible types, and must: represent a
-valid subset of image subresources.
-
-Image views are represented by sname:VkImageView handles:
-
-include::{generated}/api/handles/VkImageView.txt[]
---
-
-[open,refpage='VK_REMAINING_ARRAY_LAYERS',desc='Sentinel for all remaining array layers',type='consts']
---
-ename:VK_REMAINING_ARRAY_LAYERS is a special constant value used for image
-views to indicate that all remaining array layers in an image after the base
-layer should be included in the view.
-
-include::{generated}/api/enums/VK_REMAINING_ARRAY_LAYERS.txt[]
---
-
-[open,refpage='VK_REMAINING_MIP_LEVELS',desc='Sentinel for all remaining array layers',type='consts']
---
-ename:VK_REMAINING_MIP_LEVELS is a special constant value used for image
-views to indicate that all remaining mipmap levels in an image after the
-base level should be included in the view.
-
-include::{generated}/api/enums/VK_REMAINING_MIP_LEVELS.txt[]
---
-
-[open,refpage='VkImageViewType',desc='Image view types',type='enums']
---
-The types of image views that can: be created are:
-
-include::{generated}/api/enums/VkImageViewType.txt[]
---
-
-[open,refpage='vkCreateImageView',desc='Create an image view from an existing image',type='protos']
---
-To create an image view, call:
-
-include::{generated}/api/protos/vkCreateImageView.txt[]
-
-  * pname:device is the logical device that creates the image view.
-  * pname:pCreateInfo is a pointer to a sname:VkImageViewCreateInfo
-    structure containing parameters to be used to create the image view.
-  * pname:pAllocator controls host memory allocation as described in the
-    <<memory-allocation, Memory Allocation>> chapter.
-  * pname:pView is a pointer to a slink:VkImageView handle in which the
-    resulting image view object is returned.
-
-include::{generated}/validity/protos/vkCreateImageView.txt[]
---
-
-[open,refpage='VkImageViewCreateInfo',desc='Structure specifying parameters of a newly created image view',type='structs']
---
-The sname:VkImageViewCreateInfo structure is defined as:
-
-include::{generated}/api/structs/VkImageViewCreateInfo.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:flags is a bitmask of elink:VkImageViewCreateFlagBits describing
-    additional parameters of the image view.
-  * pname:image is a slink:VkImage on which the view will be created.
-  * pname:viewType is a elink:VkImageViewType value specifying the type of
-    the image view.
-  * pname:format is a elink:VkFormat describing the format and type used to
-    interpret texel blocks in the image.
-  * pname:components is a slink:VkComponentMapping structure specifying a
-    remapping of color components (or of depth or stencil components after
-    they have been converted into color components).
-  * pname:subresourceRange is a slink:VkImageSubresourceRange structure
-    selecting the set of mipmap levels and array layers to be accessible to
-    the view.
-
-[[resources-image-inherited-usage]]
-Some of the pname:image creation parameters are inherited by the view.
-In particular, image view creation inherits the implicit parameter
-pname:usage specifying the allowed usages of the image view that, by
-default, takes the value of the corresponding pname:usage parameter
-specified in slink:VkImageCreateInfo at image creation time.
-ifdef::VK_VERSION_1_1,VK_KHR_maintenance2[]
-The implicit pname:usage can: be overriden by adding a
-slink:VkImageViewUsageCreateInfo structure to the pname:pNext chain, but the
-view usage must: be a subset of the image usage.
-endif::VK_VERSION_1_1,VK_KHR_maintenance2[]
-ifdef::VK_VERSION_1_2,VK_EXT_separate_stencil_usage[]
-If pname:image has a depth-stencil format and was created with a
-slink:VkImageStencilUsageCreateInfo structure included in the pname:pNext
-chain of slink:VkImageCreateInfo, the usage is calculated based on the
-pname:subresource.aspectMask provided:
-
-  * If pname:aspectMask includes only ename:VK_IMAGE_ASPECT_STENCIL_BIT, the
-    implicit pname:usage is equal to
-    slink:VkImageStencilUsageCreateInfo::pname:stencilUsage.
-  * If pname:aspectMask includes only ename:VK_IMAGE_ASPECT_DEPTH_BIT, the
-    implicit pname:usage is equal to slink:VkImageCreateInfo::pname:usage.
-  * If both aspects are included in pname:aspectMask, the implicit
-    pname:usage is equal to the intersection of
-    slink:VkImageCreateInfo::pname:usage and
-    slink:VkImageStencilUsageCreateInfo::pname:stencilUsage.
-endif::VK_VERSION_1_2,VK_EXT_separate_stencil_usage[]
-
-If pname:image was created with the ename:VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT
-flag,
-ifdef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
-and if the pname:format of the image is not
-<<formats-requiring-sampler-ycbcr-conversion,multi-planar>>,
-endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
-pname:format can: be different from the image's format, but if
-ifdef::VK_VERSION_1_1,VK_KHR_maintenance2[]
-pname:image was created without the
-ename:VK_IMAGE_CREATE_BLOCK_TEXEL_VIEW_COMPATIBLE_BIT flag and
-endif::VK_VERSION_1_1,VK_KHR_maintenance2[]
-they are not equal they must: be _compatible_.
-Image format compatibility is defined in the
-<<formats-compatibility-classes,Format Compatibility Classes>> section.
-Views of compatible formats will have the same mapping between texel
-coordinates and memory locations irrespective of the pname:format, with only
-the interpretation of the bit pattern changing.
-
-[NOTE]
-.Note
-====
-Values intended to be used with one view format may: not be exactly
-preserved when written or read through a different format.
-For example, an integer value that happens to have the bit pattern of a
-floating point denorm or NaN may: be flushed or canonicalized when written
-or read through a view with a floating point format.
-Similarly, a value written through a signed normalized format that has a bit
-pattern exactly equal to [eq]#-2^b^# may: be changed to [eq]#-2^b^ {plus} 1#
-as described in <<fundamentals-fixedfpconv,Conversion from Normalized
-Fixed-Point to Floating-Point>>.
-====
-
-ifdef::VK_VERSION_1_1,VK_KHR_maintenance2[]
-If pname:image was created with the
-ename:VK_IMAGE_CREATE_BLOCK_TEXEL_VIEW_COMPATIBLE_BIT flag, pname:format
-must: be _compatible_ with the image's format as described above, or must:
-be an uncompressed format in which case it must: be _size-compatible_ with
-the image's format, as defined for
-<<copies-images-format-size-compatibility, copying data between images>>.
-In this case, the resulting image view's texel dimensions equal the
-dimensions of the selected mip level divided by the compressed texel block
-size and rounded up.
-endif::VK_VERSION_1_1,VK_KHR_maintenance2[]
-
-The slink:VkComponentMapping pname:components member describes a remapping
-from components of the image to components of the vector returned by shader
-image instructions.
-This remapping must: be the identity swizzle for storage image descriptors,
-input attachment descriptors,
-ifndef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
-and framebuffer attachments.
-endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
-ifdef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
-framebuffer attachments, and any sname:VkImageView used with a combined
-image sampler that enables <<samplers-YCbCr-conversion,sampler Y'C~B~C~R~
-conversion>>.
-endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
-
-ifdef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
-If the image view is to be used with a sampler which supports
-<<samplers-YCbCr-conversion,sampler {YCbCr} conversion>>, an _identically
-defined object_ of type slink:VkSamplerYcbcrConversion to that used to
-create the sampler must: be passed to flink:vkCreateImageView in a
-slink:VkSamplerYcbcrConversionInfo included in the pname:pNext chain of
-slink:VkImageViewCreateInfo.
-Conversely, if a slink:VkSamplerYcbcrConversion object is passed to
-flink:vkCreateImageView, an identically defined
-slink:VkSamplerYcbcrConversion object must: be used when sampling the image.
-
-If the image has a
-<<formats-requiring-sampler-ycbcr-conversion,multi-planar>> pname:format and
-pname:subresourceRange.aspectMask is ename:VK_IMAGE_ASPECT_COLOR_BIT,
-ifdef::VK_KHR_video_decode_queue[]
-and pname:image has been created with a pname:usage value *not* containing
-any of the ename:VK_IMAGE_USAGE_VIDEO_DECODE_DST_BIT_KHR,
-ename:VK_IMAGE_USAGE_VIDEO_DECODE_SRC_BIT_KHR,
-ename:VK_IMAGE_USAGE_VIDEO_DECODE_DPB_BIT_KHR,
-ename:VK_IMAGE_USAGE_VIDEO_ENCODE_DST_BIT_KHR,
-ename:VK_IMAGE_USAGE_VIDEO_ENCODE_SRC_BIT_KHR, and
-ename:VK_IMAGE_USAGE_VIDEO_ENCODE_DPB_BIT_KHR flags,
-endif::VK_KHR_video_decode_queue[]
-then the pname:format must: be identical to the image pname:format, and the
-sampler to be used with the image view must: enable
-<<samplers-YCbCr-conversion,sampler {YCbCr} conversion>>.
-
-ifdef::VK_KHR_video_decode_queue[]
-If the image has a
-<<formats-requiring-sampler-ycbcr-conversion,multi-planar>> pname:format and
-the pname:image has been created with a pname:usage value containing any of
-the ename:VK_IMAGE_USAGE_VIDEO_DECODE_DST_BIT_KHR,
-ename:VK_IMAGE_USAGE_VIDEO_DECODE_SRC_BIT_KHR, and
-ename:VK_IMAGE_USAGE_VIDEO_DECODE_DPB_BIT_KHR flags, then all of the
-<<video-decode-operations, video decode operations>> would ignore the
-slink:VkSamplerYcbcrConversionInfo structure and/or
-<<samplers-YCbCr-conversion,sampler Y'C~B~C~R~ conversion>> object,
-associated with the image view.
-endif::VK_KHR_video_decode_queue[]
-ifdef::VK_KHR_video_encode_queue[]
-If the image has a
-<<formats-requiring-sampler-ycbcr-conversion,multi-planar>> pname:format and
-the pname:image has been created with a pname:usage value containing any of
-the ename:VK_IMAGE_USAGE_VIDEO_ENCODE_DST_BIT_KHR,
-ename:VK_IMAGE_USAGE_VIDEO_ENCODE_SRC_BIT_KHR, and
-ename:VK_IMAGE_USAGE_VIDEO_ENCODE_DPB_BIT_KHR flags, then all of the
-<<video-encode-operations, video encode operations>> would ignore the
-slink:VkSamplerYcbcrConversionInfo structure and/or
-<<samplers-YCbCr-conversion,sampler Y'C~B~C~R~ conversion>> object,
-associated with the image view.
-endif::VK_KHR_video_encode_queue[]
-
-If pname:image was created with the ename:VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT
-and the image has a
-<<formats-requiring-sampler-ycbcr-conversion,multi-planar>> pname:format,
-and if pname:subresourceRange.aspectMask is
-ename:VK_IMAGE_ASPECT_PLANE_0_BIT, ename:VK_IMAGE_ASPECT_PLANE_1_BIT, or
-ename:VK_IMAGE_ASPECT_PLANE_2_BIT, pname:format must: be
-<<formats-compatible-planes,compatible>> with the corresponding plane of the
-image, and the sampler to be used with the image view must: not enable
-<<samplers-YCbCr-conversion,sampler {YCbCr} conversion>>.
-The pname:width and pname:height of the single-plane image view must: be
-derived from the multi-planar image's dimensions in the manner listed for
-<<formats-compatible-planes,plane compatibility>> for the plane.
-
-Any view of an image plane will have the same mapping between texel
-coordinates and memory locations as used by the components of the color
-aspect, subject to the formulae relating texel coordinates to
-lower-resolution planes as described in <<textures-chroma-reconstruction,
-Chroma Reconstruction>>.
-That is, if an R or B plane has a reduced resolution relative to the G plane
-of the multi-planar image, the image view operates using the (_u~plane~_,
-_v~plane~_) unnormalized coordinates of the reduced-resolution plane, and
-these coordinates access the same memory locations as the (_u~color~_,
-_v~color~_) unnormalized coordinates of the color aspect for which chroma
-reconstruction operations operate on the same (_u~plane~_, _v~plane~_) or
-(_i~plane~_, _j~plane~_) coordinates.
-endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
-
-[[resources-image-views-compatibility]]
-.Image type and image view type compatibility requirements
-[cols="35%,50%",options="header"]
-|====
-| Image View Type | Compatible Image Types
-| ename:VK_IMAGE_VIEW_TYPE_1D         | ename:VK_IMAGE_TYPE_1D
-| ename:VK_IMAGE_VIEW_TYPE_1D_ARRAY   | ename:VK_IMAGE_TYPE_1D
-| ename:VK_IMAGE_VIEW_TYPE_2D         | ename:VK_IMAGE_TYPE_2D
-ifdef::VK_VERSION_1_1,VK_KHR_maintenance1[, ename:VK_IMAGE_TYPE_3D]
-| ename:VK_IMAGE_VIEW_TYPE_2D_ARRAY   | ename:VK_IMAGE_TYPE_2D
-ifdef::VK_VERSION_1_1,VK_KHR_maintenance1[, ename:VK_IMAGE_TYPE_3D]
-| ename:VK_IMAGE_VIEW_TYPE_CUBE       | ename:VK_IMAGE_TYPE_2D
-| ename:VK_IMAGE_VIEW_TYPE_CUBE_ARRAY | ename:VK_IMAGE_TYPE_2D
-| ename:VK_IMAGE_VIEW_TYPE_3D         | ename:VK_IMAGE_TYPE_3D
-|====
-
-.Valid Usage
-****
-  * [[VUID-VkImageViewCreateInfo-image-01003]]
-    If pname:image was not created with
-    ename:VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT then pname:viewType must: not
-    be ename:VK_IMAGE_VIEW_TYPE_CUBE or ename:VK_IMAGE_VIEW_TYPE_CUBE_ARRAY
-  * [[VUID-VkImageViewCreateInfo-viewType-01004]]
-    If the <<features-imageCubeArray,image cube map arrays>> feature is not
-    enabled, pname:viewType must: not be ename:VK_IMAGE_VIEW_TYPE_CUBE_ARRAY
-ifdef::VK_VERSION_1_1,VK_KHR_maintenance1[]
-  * [[VUID-VkImageViewCreateInfo-image-01005]]
-    If pname:image was created with ename:VK_IMAGE_TYPE_3D but without
-    ename:VK_IMAGE_CREATE_2D_ARRAY_COMPATIBLE_BIT set then pname:viewType
-    must: not be ename:VK_IMAGE_VIEW_TYPE_2D or
-    ename:VK_IMAGE_VIEW_TYPE_2D_ARRAY
-  * [[VUID-VkImageViewCreateInfo-image-04970]]
-    If pname:image was created with ename:VK_IMAGE_TYPE_3D and
-    pname:viewType is ename:VK_IMAGE_VIEW_TYPE_2D or
-    ename:VK_IMAGE_VIEW_TYPE_2D_ARRAY then pname:subresourceRange.levelCount
-    must: be 1
-  * [[VUID-VkImageViewCreateInfo-image-04971]]
-    If pname:image was created with ename:VK_IMAGE_TYPE_3D and
-    pname:viewType is ename:VK_IMAGE_VIEW_TYPE_2D or
-    ename:VK_IMAGE_VIEW_TYPE_2D_ARRAY then pname:flags must: not contain any
-    of ename:VK_IMAGE_CREATE_SPARSE_BINDING_BIT,
-    ename:VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT, and
-    ename:VK_IMAGE_CREATE_SPARSE_ALIASED_BIT
-  * [[VUID-VkImageViewCreateInfo-image-04972]]
-    If pname:image was created with a pname:samples value not equal to
-    ename:VK_SAMPLE_COUNT_1_BIT then pname:viewType must: be either
-    ename:VK_IMAGE_VIEW_TYPE_2D or ename:VK_IMAGE_VIEW_TYPE_2D_ARRAY
-endif::VK_VERSION_1_1,VK_KHR_maintenance1[]
-  * [[VUID-VkImageViewCreateInfo-image-04441]]
-    pname:image must: have been created with a pname:usage value containing
-    at least one of the usages defined in the <<valid-imageview-imageusage,
-    valid image usage>> list for image views
-  * [[VUID-VkImageViewCreateInfo-None-02273]]
-    The <<resources-image-view-format-features,format features>> of the
-    resultant image view must: contain at least one bit
-  * [[VUID-VkImageViewCreateInfo-usage-02274]]
-    If pname:usage contains ename:VK_IMAGE_USAGE_SAMPLED_BIT, then the
-    <<resources-image-view-format-features,format features>> of the
-    resultant image view must: contain
-    ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT
-  * [[VUID-VkImageViewCreateInfo-usage-02275]]
-    If pname:usage contains ename:VK_IMAGE_USAGE_STORAGE_BIT, then the image
-    view's <<resources-image-view-format-features,format features>> must:
-    contain ename:VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT
-  * [[VUID-VkImageViewCreateInfo-usage-02276]]
-    If pname:usage contains ename:VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT, then
-    the image view's <<resources-image-view-format-features,format
-    features>> must: contain ename:VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT
-  * [[VUID-VkImageViewCreateInfo-usage-02277]]
-    If pname:usage contains
-    ename:VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT, then the image view's
-    <<resources-image-view-format-features,format features>> must: contain
-    ename:VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT
-  * [[VUID-VkImageViewCreateInfo-usage-02652]]
-    If pname:usage contains ename:VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT, then
-    the image view's <<resources-image-view-format-features,format
-    features>> must: contain at least one of
-    ename:VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT or
-    ename:VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT
-  * [[VUID-VkImageViewCreateInfo-subresourceRange-01478]]
-    pname:subresourceRange.baseMipLevel must: be less than the
-    pname:mipLevels specified in slink:VkImageCreateInfo when pname:image
-    was created
-  * [[VUID-VkImageViewCreateInfo-subresourceRange-01718]]
-    If pname:subresourceRange.levelCount is not
-    ename:VK_REMAINING_MIP_LEVELS, [eq]#pname:subresourceRange.baseMipLevel
-    {plus} pname:subresourceRange.levelCount# must: be less than or equal to
-    the pname:mipLevels specified in slink:VkImageCreateInfo when
-    pname:image was created
-ifdef::VK_EXT_fragment_density_map[]
-  * [[VUID-VkImageViewCreateInfo-image-02571]]
-    If pname:image was created with pname:usage containing
-    ename:VK_IMAGE_USAGE_FRAGMENT_DENSITY_MAP_BIT_EXT,
-    pname:subresourceRange.levelCount must: be `1`
-endif::VK_EXT_fragment_density_map[]
-ifndef::VK_VERSION_1_1,VK_KHR_maintenance1[]
-  * [[VUID-VkImageViewCreateInfo-subresourceRange-01480]]
-    pname:subresourceRange.baseArrayLayer must: be less than the
-    pname:arrayLayers specified in slink:VkImageCreateInfo when pname:image
-    was created
-  * [[VUID-VkImageViewCreateInfo-subresourceRange-01719]]
-    If pname:subresourceRange.layerCount is not
-    ename:VK_REMAINING_ARRAY_LAYERS,
-    [eq]#pname:subresourceRange.baseArrayLayer {plus}
-    pname:subresourceRange.layerCount# must: be less than or equal to the
-    pname:arrayLayers specified in slink:VkImageCreateInfo when pname:image
-    was created
-endif::VK_VERSION_1_1,VK_KHR_maintenance1[]
-ifdef::VK_VERSION_1_1,VK_KHR_maintenance1[]
-  * [[VUID-VkImageViewCreateInfo-image-01482]]
-    If pname:image is not a 3D image created with
-    ename:VK_IMAGE_CREATE_2D_ARRAY_COMPATIBLE_BIT set, or pname:viewType is
-    not ename:VK_IMAGE_VIEW_TYPE_2D or ename:VK_IMAGE_VIEW_TYPE_2D_ARRAY,
-    pname:subresourceRange.baseArrayLayer must: be less than the
-    pname:arrayLayers specified in slink:VkImageCreateInfo when pname:image
-    was created
-  * [[VUID-VkImageViewCreateInfo-subresourceRange-01483]]
-    If pname:subresourceRange.layerCount is not
-    ename:VK_REMAINING_ARRAY_LAYERS, pname:image is not a 3D image created
-    with ename:VK_IMAGE_CREATE_2D_ARRAY_COMPATIBLE_BIT set, or
-    pname:viewType is not ename:VK_IMAGE_VIEW_TYPE_2D or
-    ename:VK_IMAGE_VIEW_TYPE_2D_ARRAY, pname:subresourceRange.layerCount
-    must: be non-zero and [eq]#pname:subresourceRange.baseArrayLayer {plus}
-    pname:subresourceRange.layerCount# must: be less than or equal to the
-    pname:arrayLayers specified in slink:VkImageCreateInfo when pname:image
-    was created
-  * [[VUID-VkImageViewCreateInfo-image-02724]]
-    If pname:image is a 3D image created with
-    ename:VK_IMAGE_CREATE_2D_ARRAY_COMPATIBLE_BIT set, and pname:viewType is
-    ename:VK_IMAGE_VIEW_TYPE_2D or ename:VK_IMAGE_VIEW_TYPE_2D_ARRAY,
-    pname:subresourceRange.baseArrayLayer must: be less than the depth
-    computed from pname:baseMipLevel and pname:extent.depth specified in
-    slink:VkImageCreateInfo when pname:image was created, according to the
-    formula defined in <<resources-image-miplevel-sizing,Image Miplevel
-    Sizing>>
-  * [[VUID-VkImageViewCreateInfo-subresourceRange-02725]]
-    If pname:subresourceRange.layerCount is not
-    ename:VK_REMAINING_ARRAY_LAYERS, pname:image is a 3D image created with
-    ename:VK_IMAGE_CREATE_2D_ARRAY_COMPATIBLE_BIT set, and pname:viewType is
-    ename:VK_IMAGE_VIEW_TYPE_2D or ename:VK_IMAGE_VIEW_TYPE_2D_ARRAY,
-    pname:subresourceRange.layerCount must: be non-zero and
-    [eq]#pname:subresourceRange.baseArrayLayer {plus}
-    pname:subresourceRange.layerCount# must: be less than or equal to the
-    depth computed from pname:baseMipLevel and pname:extent.depth specified
-    in slink:VkImageCreateInfo when pname:image was created, according to
-    the formula defined in <<resources-image-miplevel-sizing,Image Miplevel
-    Sizing>>
-endif::VK_VERSION_1_1,VK_KHR_maintenance1[]
-// The VU below comes in 4 alternate versions
-// both disabled, both enabled, maintenance2 only, ycbcr only
-ifndef::VK_VERSION_1_1,VK_KHR_maintenance2[]
-ifndef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
-  * [[VUID-VkImageViewCreateInfo-image-01018]]
-    If pname:image was created with the
-    ename:VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT flag, pname:format must: be
-    compatible with the pname:format used to create pname:image, as defined
-    in <<formats-compatibility-classes,Format Compatibility Classes>>
-endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
-endif::VK_VERSION_1_1,VK_KHR_maintenance2[]
-// The nested ifdefs are there in anticipation of the hoped-for day when the
-// VU extractor and validation layers can handle VU with imbedded
-// conditionals. They are commented out until then.
-//
-// If VK_VERSION_1_1,VK_KHR_maintenance2 and NOT VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion
-ifdef::VK_VERSION_1_1,VK_KHR_maintenance2[]
-ifndef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
-  * [[VUID-VkImageViewCreateInfo-image-01759]]
-    If pname:image was created with the
-    ename:VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT flag, but without the
-    ename:VK_IMAGE_CREATE_BLOCK_TEXEL_VIEW_COMPATIBLE_BIT flag, pname:format
-    must: be compatible with the pname:format used to create pname:image, as
-    defined in <<formats-compatibility-classes,Format Compatibility
-    Classes>>
-endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
-endif::VK_VERSION_1_1,VK_KHR_maintenance2[]
-// If NOT VK_VERSION_1_1,VK_KHR_maintenance2 and VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion
-ifndef::VK_VERSION_1_1,VK_KHR_maintenance2[]
-ifdef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
-  * [[VUID-VkImageViewCreateInfo-image-01760]]
-    If pname:image was created with the
-    ename:VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT flag, and if the pname:format
-    of the pname:image is not a
-    <<formats-requiring-sampler-ycbcr-conversion,multi-planar>> format,
-    pname:format must: be compatible with the pname:format used to create
-    pname:image, as defined in <<formats-compatibility-classes,Format
-    Compatibility Classes>>
-endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
-endif::VK_VERSION_1_1,VK_KHR_maintenance2[]
-// If VK_VERSION_1_1,VK_KHR_maintenance2 and VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion
-ifdef::VK_VERSION_1_1,VK_KHR_maintenance2[]
-ifdef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
-  * [[VUID-VkImageViewCreateInfo-image-01761]]
-    If pname:image was created with the
-    ename:VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT flag,
-// ifdef::VK_VERSION_1_1,VK_KHR_maintenance2[]
-    but without the ename:VK_IMAGE_CREATE_BLOCK_TEXEL_VIEW_COMPATIBLE_BIT
-    flag,
-// endif::VK_VERSION_1_1,VK_KHR_maintenance2[]
-// ifdef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
-    and if the pname:format of the pname:image is not a
-    <<formats-requiring-sampler-ycbcr-conversion,multi-planar>> format,
-// endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
-    pname:format must: be compatible with the pname:format used to create
-    pname:image, as defined in <<formats-compatibility-classes,Format
-    Compatibility Classes>>
-endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
-endif::VK_VERSION_1_1,VK_KHR_maintenance2[]
-ifdef::VK_VERSION_1_1,VK_KHR_maintenance2[]
-  * [[VUID-VkImageViewCreateInfo-image-01583]]
-    If pname:image was created with the
-    ename:VK_IMAGE_CREATE_BLOCK_TEXEL_VIEW_COMPATIBLE_BIT flag, pname:format
-    must: be compatible with, or must: be an uncompressed format that is
-    size-compatible with, the pname:format used to create pname:image
-  * [[VUID-VkImageViewCreateInfo-image-01584]]
-    If pname:image was created with the
-    ename:VK_IMAGE_CREATE_BLOCK_TEXEL_VIEW_COMPATIBLE_BIT flag, the
-    pname:levelCount and pname:layerCount members of pname:subresourceRange
-    must: both be `1`
-  * [[VUID-VkImageViewCreateInfo-image-04739]]
-    If pname:image was created with the
-    ename:VK_IMAGE_CREATE_BLOCK_TEXEL_VIEW_COMPATIBLE_BIT flag and
-    pname:format is a non-compressed format, pname:viewType must: not be
-    ename:VK_IMAGE_VIEW_TYPE_3D
-endif::VK_VERSION_1_1,VK_KHR_maintenance2[]
-ifdef::VK_VERSION_1_2,VK_KHR_image_format_list[]
-  * [[VUID-VkImageViewCreateInfo-pNext-01585]]
-    If a slink:VkImageFormatListCreateInfo structure was included in the
-    pname:pNext chain of the slink:VkImageCreateInfo structure used when
-    creating pname:image and
-    slink:VkImageFormatListCreateInfo::pname:viewFormatCount is not zero
-    then pname:format must: be one of the formats in
-    slink:VkImageFormatListCreateInfo::pname:pViewFormats
-endif::VK_VERSION_1_2,VK_KHR_image_format_list[]
-ifdef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
-  * [[VUID-VkImageViewCreateInfo-image-01586]]
-    If pname:image was created with the
-    ename:VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT flag, if the pname:format of
-    the pname:image is a
-    <<formats-requiring-sampler-ycbcr-conversion,multi-planar>> format, and
-    if pname:subresourceRange.aspectMask is one of
-    ename:VK_IMAGE_ASPECT_PLANE_0_BIT, ename:VK_IMAGE_ASPECT_PLANE_1_BIT, or
-    ename:VK_IMAGE_ASPECT_PLANE_2_BIT, then pname:format must: be compatible
-    with the elink:VkFormat for the plane of the pname:image pname:format
-    indicated by pname:subresourceRange.aspectMask, as defined in
-    <<formats-compatible-planes>>
-endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
-ifndef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
-// The VU below comes in an alternate version when the extension is
-// enabled.
-  * [[VUID-VkImageViewCreateInfo-image-01019]]
-    If pname:image was not created with the
-    ename:VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT flag, pname:format must: be
-    identical to the pname:format used to create pname:image
-endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
-// The nested ifdefs are there in anticipation of the hoped-for day when the
-// VU extractor and validation layers can handle VU with imbedded
-// conditionals. They are commented out until then.
-ifdef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
-  * [[VUID-VkImageViewCreateInfo-image-01762]]
-    If pname:image was not created with the
-    ename:VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT flag,
-// ifdef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
-    or if the pname:format of the pname:image is a
-    <<formats-requiring-sampler-ycbcr-conversion,multi-planar>> format and
-    if pname:subresourceRange.aspectMask is ename:VK_IMAGE_ASPECT_COLOR_BIT,
-// endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
-    pname:format must: be identical to the pname:format used to create
-    pname:image
-endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
-ifdef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
-  * [[VUID-VkImageViewCreateInfo-format-06415]]
-    If the image pname:format is one of the
-    <<formats-requiring-sampler-ycbcr-conversion, formats that require a
-    sampler Y'C~B~C~R~ conversion>>, then the pname:pNext chain must:
-    include a slink:VkSamplerYcbcrConversionInfo structure with a conversion
-    value other than dlink:VK_NULL_HANDLE
-  * [[VUID-VkImageViewCreateInfo-format-04714]]
-    If pname:format has a code:_422 or code:_420 suffix then pname:image
-    must: have been created with a width that is a multiple of 2
-  * [[VUID-VkImageViewCreateInfo-format-04715]]
-    If pname:format has a code:_420 suffix then pname:image must: have been
-    created with a height that is a multiple of 2
-  * [[VUID-VkImageViewCreateInfo-pNext-01970]]
-    If the pname:pNext chain includes a slink:VkSamplerYcbcrConversionInfo
-    structure with a pname:conversion value other than dlink:VK_NULL_HANDLE,
-    all members of pname:components must: have the
-    <<resources-image-views-identity-mappings,identity swizzle>>
-endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
-  * [[VUID-VkImageViewCreateInfo-image-01020]]
-    If pname:image is non-sparse then it must: be bound completely and
-    contiguously to a single sname:VkDeviceMemory object
-  * [[VUID-VkImageViewCreateInfo-subResourceRange-01021]]
-    pname:viewType must: be compatible with the type of pname:image as shown
-    in the <<resources-image-views-compatibility,view type compatibility
-    table>>
-ifdef::VK_ANDROID_external_memory_android_hardware_buffer[]
-  * [[VUID-VkImageViewCreateInfo-image-02399]]
-    If pname:image has an
-    <<memory-external-android-hardware-buffer-external-formats,external
-    format>>, pname:format must: be ename:VK_FORMAT_UNDEFINED
-  * [[VUID-VkImageViewCreateInfo-image-02400]]
-    If pname:image has an
-    <<memory-external-android-hardware-buffer-external-formats,external
-    format>>, the pname:pNext chain must: include a
-    slink:VkSamplerYcbcrConversionInfo structure with a pname:conversion
-    object created with the same external format as pname:image
-  * [[VUID-VkImageViewCreateInfo-image-02401]]
-    If pname:image has an
-    <<memory-external-android-hardware-buffer-external-formats,external
-    format>>, all members of pname:components must: be the
-    <<resources-image-views-identity-mappings,identity swizzle>>
-endif::VK_ANDROID_external_memory_android_hardware_buffer[]
-ifdef::VK_KHR_fragment_shading_rate,VK_NV_shading_rate_image[]
-  * [[VUID-VkImageViewCreateInfo-image-02086]]
-    If pname:image was created with pname:usage containing
-    ename:VK_IMAGE_USAGE_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR,
-    pname:viewType must: be ename:VK_IMAGE_VIEW_TYPE_2D or
-    ename:VK_IMAGE_VIEW_TYPE_2D_ARRAY
-endif::VK_KHR_fragment_shading_rate,VK_NV_shading_rate_image[]
-ifdef::VK_NV_shading_rate_image[]
-  * [[VUID-VkImageViewCreateInfo-image-02087]]
-    If the <<features-shadingRateImage, pname:shadingRateImage feature>> is
-    enabled, and If pname:image was created with pname:usage containing
-    ename:VK_IMAGE_USAGE_SHADING_RATE_IMAGE_BIT_NV, pname:format must: be
-    ename:VK_FORMAT_R8_UINT
-endif::VK_NV_shading_rate_image[]
-ifdef::VK_KHR_fragment_shading_rate[]
-  * [[VUID-VkImageViewCreateInfo-usage-04550]]
-    If the <<features-attachmentFragmentShadingRate,
-    pname:attachmentFragmentShadingRate feature>> is enabled, and the
-    pname:usage for the image view includes
-    ename:VK_IMAGE_USAGE_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR, then the
-    image view's <<resources-image-view-format-features,format features>>
-    must: contain
-    ename:VK_FORMAT_FEATURE_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR
-  * [[VUID-VkImageViewCreateInfo-usage-04551]]
-    If the <<features-attachmentFragmentShadingRate,
-    pname:attachmentFragmentShadingRate feature>> is enabled, the
-    pname:usage for the image view includes
-    ename:VK_IMAGE_USAGE_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR, and
-    <<limits-layeredShadingRateAttachments,
-    pname:layeredShadingRateAttachments>> is ename:VK_FALSE,
-    pname:subresourceRange.layerCount must: be `1`
-endif::VK_KHR_fragment_shading_rate[]
-ifdef::VK_EXT_fragment_density_map[]
-  * [[VUID-VkImageViewCreateInfo-flags-02572]]
-    If <<features-fragmentDensityMapDynamic,dynamic fragment density map>>
-    feature is not enabled, pname:flags must: not contain
-    ename:VK_IMAGE_VIEW_CREATE_FRAGMENT_DENSITY_MAP_DYNAMIC_BIT_EXT
-ifdef::VK_EXT_fragment_density_map2[]
-  * [[VUID-VkImageViewCreateInfo-flags-03567]]
-    If <<features-fragmentDensityMapDeferred,deferred fragment density map>>
-    feature is not enabled, pname:flags must: not contain
-    ename:VK_IMAGE_VIEW_CREATE_FRAGMENT_DENSITY_MAP_DEFERRED_BIT_EXT
-  * [[VUID-VkImageViewCreateInfo-flags-03568]]
-    If pname:flags contains
-    ename:VK_IMAGE_VIEW_CREATE_FRAGMENT_DENSITY_MAP_DEFERRED_BIT_EXT,
-    pname:flags must: not contain
-    ename:VK_IMAGE_VIEW_CREATE_FRAGMENT_DENSITY_MAP_DYNAMIC_BIT_EXT
-  * [[VUID-VkImageViewCreateInfo-image-03569]]
-    If pname:image was created with pname:flags containing
-    ename:VK_IMAGE_CREATE_SUBSAMPLED_BIT_EXT and pname:usage containing
-    ename:VK_IMAGE_USAGE_SAMPLED_BIT, pname:subresourceRange.layerCount
-    must: be less than or equal to
-    <<limits-maxSubsampledArrayLayers,sname:VkPhysicalDeviceFragmentDensityMap2PropertiesEXT::pname:maxSubsampledArrayLayers>>
-endif::VK_EXT_fragment_density_map2[]
-ifdef::VK_HUAWEI_invocation_mask[]
-  * [[VUID-VkImageViewCreateInfo-invocationMask-04993]]
-    If the <<features-invocationMask, pname:invocationMask feature>> is
-    enabled, and if pname:image was created with pname:usage containing
-    ename:VK_IMAGE_USAGE_INVOCATION_MASK_BIT_HUAWEI, pname:format must: be
-    ename:VK_FORMAT_R8_UINT
-endif::VK_HUAWEI_invocation_mask[]
-  * [[VUID-VkImageViewCreateInfo-flags-04116]]
-    If pname:flags does not contain
-    ename:VK_IMAGE_VIEW_CREATE_FRAGMENT_DENSITY_MAP_DYNAMIC_BIT_EXT and
-    pname:image was created with pname:usage containing
-    ename:VK_IMAGE_USAGE_FRAGMENT_DENSITY_MAP_BIT_EXT, its pname:flags must:
-    not contain any of ename:VK_IMAGE_CREATE_PROTECTED_BIT,
-    ename:VK_IMAGE_CREATE_SPARSE_BINDING_BIT,
-    ename:VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT, or
-    ename:VK_IMAGE_CREATE_SPARSE_ALIASED_BIT
-endif::VK_EXT_fragment_density_map[]
-ifdef::VK_VERSION_1_1,VK_KHR_maintenance2[]
-ifndef::VK_VERSION_1_2+VK_EXT_separate_stencil_usage[]
-  * [[VUID-VkImageViewCreateInfo-pNext-02661]]
-    If the pname:pNext chain includes a slink:VkImageViewUsageCreateInfo
-    structure, its pname:usage member must: not include any bits that were
-    not set in the pname:usage member of the slink:VkImageCreateInfo
-    structure used to create pname:image
-endif::VK_VERSION_1_2+VK_EXT_separate_stencil_usage[]
-ifdef::VK_VERSION_1_2,VK_EXT_separate_stencil_usage[]
-  * [[VUID-VkImageViewCreateInfo-pNext-02662]]
-    If the pname:pNext chain includes a slink:VkImageViewUsageCreateInfo
-    structure, and pname:image was not created with a
-    slink:VkImageStencilUsageCreateInfo structure included in the
-    pname:pNext chain of slink:VkImageCreateInfo, its pname:usage member
-    must: not include any bits that were not set in the pname:usage member
-    of the slink:VkImageCreateInfo structure used to create pname:image
-  * [[VUID-VkImageViewCreateInfo-pNext-02663]]
-    If the pname:pNext chain includes a slink:VkImageViewUsageCreateInfo
-    structure, pname:image was created with a
-    slink:VkImageStencilUsageCreateInfo structure included in the
-    pname:pNext chain of slink:VkImageCreateInfo, and
-    pname:subresourceRange.aspectMask includes
-    ename:VK_IMAGE_ASPECT_STENCIL_BIT, the pname:usage member of the
-    slink:VkImageViewUsageCreateInfo structure must: not include any bits
-    that were not set in the pname:usage member of the
-    slink:VkImageStencilUsageCreateInfo structure used to create pname:image
-  * [[VUID-VkImageViewCreateInfo-pNext-02664]]
-    If the pname:pNext chain includes a slink:VkImageViewUsageCreateInfo
-    structure, pname:image was created with a
-    slink:VkImageStencilUsageCreateInfo structure included in the
-    pname:pNext chain of slink:VkImageCreateInfo, and
-    pname:subresourceRange.aspectMask includes bits other than
-    ename:VK_IMAGE_ASPECT_STENCIL_BIT, the pname:usage member of the
-    slink:VkImageViewUsageCreateInfo structure must: not include any bits
-    that were not set in the pname:usage member of the
-    slink:VkImageCreateInfo structure used to create pname:image
-endif::VK_VERSION_1_2,VK_EXT_separate_stencil_usage[]
-endif::VK_VERSION_1_1,VK_KHR_maintenance2[]
-  * [[VUID-VkImageViewCreateInfo-imageViewType-04973]]
-    If pname:viewType is ename:VK_IMAGE_VIEW_TYPE_1D,
-    ename:VK_IMAGE_VIEW_TYPE_2D, or ename:VK_IMAGE_VIEW_TYPE_3D; and
-    pname:subresourceRange.layerCount is not
-    ename:VK_REMAINING_ARRAY_LAYERS, then pname:subresourceRange.layerCount
-    must: be 1
-  * [[VUID-VkImageViewCreateInfo-imageViewType-04974]]
-    If pname:viewType is ename:VK_IMAGE_VIEW_TYPE_1D,
-    ename:VK_IMAGE_VIEW_TYPE_2D, or ename:VK_IMAGE_VIEW_TYPE_3D; and
-    pname:subresourceRange.layerCount is ename:VK_REMAINING_ARRAY_LAYERS,
-    then the remaining number of layers must: be 1
-  * [[VUID-VkImageViewCreateInfo-viewType-02960]]
-    If pname:viewType is ename:VK_IMAGE_VIEW_TYPE_CUBE and
-    pname:subresourceRange.layerCount is not
-    ename:VK_REMAINING_ARRAY_LAYERS, pname:subresourceRange.layerCount must:
-    be `6`
-  * [[VUID-VkImageViewCreateInfo-viewType-02961]]
-    If pname:viewType is ename:VK_IMAGE_VIEW_TYPE_CUBE_ARRAY and
-    pname:subresourceRange.layerCount is not
-    ename:VK_REMAINING_ARRAY_LAYERS, pname:subresourceRange.layerCount must:
-    be a multiple of `6`
-  * [[VUID-VkImageViewCreateInfo-viewType-02962]]
-    If pname:viewType is ename:VK_IMAGE_VIEW_TYPE_CUBE and
-    pname:subresourceRange.layerCount is ename:VK_REMAINING_ARRAY_LAYERS,
-    the remaining number of layers must: be `6`
-  * [[VUID-VkImageViewCreateInfo-viewType-02963]]
-    If pname:viewType is ename:VK_IMAGE_VIEW_TYPE_CUBE_ARRAY and
-    pname:subresourceRange.layerCount is ename:VK_REMAINING_ARRAY_LAYERS,
-    the remaining number of layers must: be a multiple of `6`
-ifdef::VK_KHR_portability_subset[]
-  * [[VUID-VkImageViewCreateInfo-imageViewFormatSwizzle-04465]]
-    If the `apiext:VK_KHR_portability_subset` extension is enabled, and
-    slink:VkPhysicalDevicePortabilitySubsetFeaturesKHR::pname:imageViewFormatSwizzle
-    is ename:VK_FALSE, all elements of pname:components must: have the
-    <<resources-image-views-identity-mappings,identity swizzle>>
-  * [[VUID-VkImageViewCreateInfo-imageViewFormatReinterpretation-04466]]
-    If the `apiext:VK_KHR_portability_subset` extension is enabled, and
-    slink:VkPhysicalDevicePortabilitySubsetFeaturesKHR::pname:imageViewFormatReinterpretation
-    is ename:VK_FALSE, the elink:VkFormat in pname:format must: not contain
-    a different number of components, or a different number of bits in each
-    component, than the format of the sname:VkImage in pname:image
-endif::VK_KHR_portability_subset[]
-ifdef::VK_KHR_video_decode_queue[]
-  * [[VUID-VkImageViewCreateInfo-image-04817]]
-    If pname:image was created with pname:usage containing
-    ename:VK_IMAGE_USAGE_VIDEO_DECODE_DST_BIT_KHR,
-    ename:VK_IMAGE_USAGE_VIDEO_DECODE_SRC_BIT_KHR,
-    ename:VK_IMAGE_USAGE_VIDEO_DECODE_DPB_BIT_KHR, then the pname:viewType
-    must: be ename:VK_IMAGE_VIEW_TYPE_2D or
-    ename:VK_IMAGE_VIEW_TYPE_2D_ARRAY and all members of pname:components
-    must: have the <<resources-image-views-identity-mappings,identity
-    swizzle>>
-endif::VK_KHR_video_decode_queue[]
-ifdef::VK_KHR_video_encode_queue[]
-  * [[VUID-VkImageViewCreateInfo-image-04818]]
-    If pname:image was created with pname:usage containing
-    ename:VK_IMAGE_USAGE_VIDEO_ENCODE_DST_BIT_KHR,
-    ename:VK_IMAGE_USAGE_VIDEO_ENCODE_SRC_BIT_KHR,
-    ename:VK_IMAGE_USAGE_VIDEO_ENCODE_DPB_BIT_KHR, then the pname:viewType
-    must: be ename:VK_IMAGE_VIEW_TYPE_2D or
-    ename:VK_IMAGE_VIEW_TYPE_2D_ARRAY and all members of pname:components
-    must: have the <<resources-image-views-identity-mappings,identity
-    swizzle>>
-endif::VK_KHR_video_encode_queue[]
-****
-
-include::{generated}/validity/structs/VkImageViewCreateInfo.txt[]
---
-
-[open,refpage='VkImageViewCreateFlagBits',desc='Bitmask specifying additional parameters of an image view',type='enums']
---
-Bits which can: be set in slink:VkImageViewCreateInfo::pname:flags,
-specifying additional parameters of an image view, are:
-
-include::{generated}/api/enums/VkImageViewCreateFlagBits.txt[]
-
-ifdef::VK_EXT_fragment_density_map[]
-  * ename:VK_IMAGE_VIEW_CREATE_FRAGMENT_DENSITY_MAP_DYNAMIC_BIT_EXT
-    specifies that the fragment density map will be read by device during
-    ename:VK_PIPELINE_STAGE_FRAGMENT_DENSITY_PROCESS_BIT_EXT
-endif::VK_EXT_fragment_density_map[]
-ifdef::VK_EXT_fragment_density_map2[]
-  * ename:VK_IMAGE_VIEW_CREATE_FRAGMENT_DENSITY_MAP_DEFERRED_BIT_EXT
-    specifies that the fragment density map will be read by the host during
-    flink:vkEndCommandBuffer for the primary command buffer that the render
-    pass is recorded into
-endif::VK_EXT_fragment_density_map2[]
---
-
-[open,refpage='VkImageViewCreateFlags',desc='Reserved for future use',type='flags']
---
-include::{generated}/api/flags/VkImageViewCreateFlags.txt[]
-
-tname:VkImageViewCreateFlags is a bitmask type for setting a mask of zero or
-more elink:VkImageViewCreateFlagBits.
---
-
-ifdef::VK_VERSION_1_1,VK_KHR_maintenance2[]
-[open,refpage='VkImageViewUsageCreateInfo',desc='Specify the intended usage of an image view',type='structs']
---
-The set of usages for the created image view can: be restricted compared to
-the parent image's pname:usage flags by adding a
-sname:VkImageViewUsageCreateInfo structure to the pname:pNext chain of
-slink:VkImageViewCreateInfo.
-
-The sname:VkImageViewUsageCreateInfo structure is defined as:
-
-include::{generated}/api/structs/VkImageViewUsageCreateInfo.txt[]
-
-ifdef::VK_KHR_maintenance2[]
-or the equivalent
-
-include::{generated}/api/structs/VkImageViewUsageCreateInfoKHR.txt[]
-endif::VK_KHR_maintenance2[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:usage is a bitmask of elink:VkImageUsageFlagBits specifying
-    allowed usages of the image view.
-
-When this structure is chained to slink:VkImageViewCreateInfo the
-pname:usage field overrides the implicit pname:usage parameter inherited
-from image creation time and its value is used instead for the purposes of
-determining the valid usage conditions of slink:VkImageViewCreateInfo.
-
-include::{generated}/validity/structs/VkImageViewUsageCreateInfo.txt[]
---
-endif::VK_VERSION_1_1,VK_KHR_maintenance2[]
-
-[open,refpage='VkImageSubresourceRange',desc='Structure specifying an image subresource range',type='structs']
---
-The sname:VkImageSubresourceRange structure is defined as:
-
-include::{generated}/api/structs/VkImageSubresourceRange.txt[]
-
-  * pname:aspectMask is a bitmask of elink:VkImageAspectFlagBits specifying
-    which aspect(s) of the image are included in the view.
-  * pname:baseMipLevel is the first mipmap level accessible to the view.
-  * pname:levelCount is the number of mipmap levels (starting from
-    pname:baseMipLevel) accessible to the view.
-  * pname:baseArrayLayer is the first array layer accessible to the view.
-  * pname:layerCount is the number of array layers (starting from
-    pname:baseArrayLayer) accessible to the view.
-
-The number of mipmap levels and array layers must: be a subset of the image
-subresources in the image.
-If an application wants to use all mip levels or layers in an image after
-the pname:baseMipLevel or pname:baseArrayLayer, it can: set pname:levelCount
-and pname:layerCount to the special values ename:VK_REMAINING_MIP_LEVELS and
-ename:VK_REMAINING_ARRAY_LAYERS without knowing the exact number of mip
-levels or layers.
-
-For cube and cube array image views, the layers of the image view starting
-at pname:baseArrayLayer correspond to faces in the order +X, -X, +Y, -Y, +Z,
--Z.
-For cube arrays, each set of six sequential layers is a single cube, so the
-number of cube maps in a cube map array view is _pname:layerCount / 6_, and
-image array layer [eq]#(pname:baseArrayLayer {plus} i)# is face index
-[eq]#(i mod 6)# of cube _i / 6_.
-If the number of layers in the view, whether set explicitly in
-pname:layerCount or implied by ename:VK_REMAINING_ARRAY_LAYERS, is not a
-multiple of 6, the last cube map in the array must: not be accessed.
-
-pname:aspectMask must: be only ename:VK_IMAGE_ASPECT_COLOR_BIT,
-ename:VK_IMAGE_ASPECT_DEPTH_BIT or ename:VK_IMAGE_ASPECT_STENCIL_BIT if
-pname:format is a color, depth-only or stencil-only format,
-ifndef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
-respectively.
-endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
-ifdef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
-respectively, except if pname:format is a
-<<formats-requiring-sampler-ycbcr-conversion,multi-planar format>>.
-endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
-If using a depth/stencil format with both depth and stencil components,
-pname:aspectMask must: include at least one of
-ename:VK_IMAGE_ASPECT_DEPTH_BIT and ename:VK_IMAGE_ASPECT_STENCIL_BIT, and
-can: include both.
-
-ifdef::VK_VERSION_1_1,VK_KHR_maintenance1[]
-When the sname:VkImageSubresourceRange structure is used to select a subset
-of the slices of a 3D image's mip level in order to create a 2D or 2D array
-image view of a 3D image created with
-ename:VK_IMAGE_CREATE_2D_ARRAY_COMPATIBLE_BIT, pname:baseArrayLayer and
-pname:layerCount specify the first slice index and the number of slices to
-include in the created image view.
-Such an image view can: be used as a framebuffer attachment that refers only
-to the specified range of slices of the selected mip level.
-However, any layout transitions performed on such an attachment view during
-a render pass instance still apply to the entire subresource referenced
-which includes all the slices of the selected mip level.
-endif::VK_VERSION_1_1,VK_KHR_maintenance1[]
-
-When using an image view of a depth/stencil image to populate a descriptor
-set (e.g. for sampling in the shader, or for use as an input attachment),
-the pname:aspectMask must: only include one bit, which selects whether the
-image view is used for depth reads (i.e. using a floating-point sampler or
-input attachment in the shader) or stencil reads (i.e. using an unsigned
-integer sampler or input attachment in the shader).
-When an image view of a depth/stencil image is used as a depth/stencil
-framebuffer attachment, the pname:aspectMask is ignored and both depth and
-stencil image subresources are used.
-
-ifdef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
-When creating a sname:VkImageView, if <<samplers-YCbCr-conversion,sampler
-{YCbCr} conversion>> is enabled in the sampler, the pname:aspectMask of a
-pname:subresourceRange used by the sname:VkImageView must: be
-ename:VK_IMAGE_ASPECT_COLOR_BIT.
-
-When creating a sname:VkImageView, if sampler {YCbCr} conversion is not
-enabled in the sampler and the image pname:format is
-<<formats-requiring-sampler-ycbcr-conversion,multi-planar>>, the image must:
-have been created with ename:VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT, and the
-pname:aspectMask of the sname:VkImageView's pname:subresourceRange must: be
-ename:VK_IMAGE_ASPECT_PLANE_0_BIT, ename:VK_IMAGE_ASPECT_PLANE_1_BIT or
-ename:VK_IMAGE_ASPECT_PLANE_2_BIT.
-endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
-
-.Valid Usage
-****
-  * [[VUID-VkImageSubresourceRange-levelCount-01720]]
-    If pname:levelCount is not ename:VK_REMAINING_MIP_LEVELS, it must: be
-    greater than `0`
-  * [[VUID-VkImageSubresourceRange-layerCount-01721]]
-    If pname:layerCount is not ename:VK_REMAINING_ARRAY_LAYERS, it must: be
-    greater than `0`
-ifdef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
-  * [[VUID-VkImageSubresourceRange-aspectMask-01670]]
-    If pname:aspectMask includes ename:VK_IMAGE_ASPECT_COLOR_BIT, then it
-    must: not include any of ename:VK_IMAGE_ASPECT_PLANE_0_BIT,
-    ename:VK_IMAGE_ASPECT_PLANE_1_BIT, or ename:VK_IMAGE_ASPECT_PLANE_2_BIT
-endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
-ifdef::VK_EXT_image_drm_format_modifier[]
-  * [[VUID-VkImageSubresourceRange-aspectMask-02278]]
-    pname:aspectMask must: not include
-    `VK_IMAGE_ASPECT_MEMORY_PLANE__{ibit}__BIT_EXT` for any index _i_
-endif::VK_EXT_image_drm_format_modifier[]
-****
-
-include::{generated}/validity/structs/VkImageSubresourceRange.txt[]
---
-
-[open,refpage='VkImageAspectFlagBits',desc='Bitmask specifying which aspects of an image are included in a view',type='enums']
---
-Bits which can: be set in an aspect mask to specify aspects of an image for
-purposes such as identifying a subresource, are:
-
-include::{generated}/api/enums/VkImageAspectFlagBits.txt[]
-
-  * ename:VK_IMAGE_ASPECT_COLOR_BIT specifies the color aspect.
-  * ename:VK_IMAGE_ASPECT_DEPTH_BIT specifies the depth aspect.
-  * ename:VK_IMAGE_ASPECT_STENCIL_BIT specifies the stencil aspect.
-  * ename:VK_IMAGE_ASPECT_METADATA_BIT specifies the metadata aspect, used
-    for <<sparsememory, sparse resource>> operations.
-ifdef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
-  * ename:VK_IMAGE_ASPECT_PLANE_0_BIT specifies plane 0 of a _multi-planar_
-    image format.
-  * ename:VK_IMAGE_ASPECT_PLANE_1_BIT specifies plane 1 of a _multi-planar_
-    image format.
-  * ename:VK_IMAGE_ASPECT_PLANE_2_BIT specifies plane 2 of a _multi-planar_
-    image format.
-endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
-ifdef::VK_EXT_image_drm_format_modifier[]
-  * ename:VK_IMAGE_ASPECT_MEMORY_PLANE_0_BIT_EXT specifies _memory plane_ 0.
-  * ename:VK_IMAGE_ASPECT_MEMORY_PLANE_1_BIT_EXT specifies _memory plane_ 1.
-  * ename:VK_IMAGE_ASPECT_MEMORY_PLANE_2_BIT_EXT specifies _memory plane_ 2.
-  * ename:VK_IMAGE_ASPECT_MEMORY_PLANE_3_BIT_EXT specifies _memory plane_ 3.
-endif::VK_EXT_image_drm_format_modifier[]
---
-
-[open,refpage='VkImageAspectFlags',desc='Bitmask of VkImageAspectFlagBits',type='flags']
---
-include::{generated}/api/flags/VkImageAspectFlags.txt[]
-
-tname:VkImageAspectFlags is a bitmask type for setting a mask of zero or
-more elink:VkImageAspectFlagBits.
---
-
-[open,refpage='VkComponentMapping',desc='Structure specifying a color component mapping',type='structs']
---
-The sname:VkComponentMapping structure is defined as:
-
-include::{generated}/api/structs/VkComponentMapping.txt[]
-
-  * pname:r is a elink:VkComponentSwizzle specifying the component value
-    placed in the R component of the output vector.
-  * pname:g is a elink:VkComponentSwizzle specifying the component value
-    placed in the G component of the output vector.
-  * pname:b is a elink:VkComponentSwizzle specifying the component value
-    placed in the B component of the output vector.
-  * pname:a is a elink:VkComponentSwizzle specifying the component value
-    placed in the A component of the output vector.
-
-include::{generated}/validity/structs/VkComponentMapping.txt[]
---
-
-[open,refpage='VkComponentSwizzle',desc='Specify how a component is swizzled',type='enums']
---
-Possible values of the members of slink:VkComponentMapping, specifying the
-component values placed in each component of the output vector, are:
-
-include::{generated}/api/enums/VkComponentSwizzle.txt[]
-
-  * ename:VK_COMPONENT_SWIZZLE_IDENTITY specifies that the component is set
-    to the identity swizzle.
-  * ename:VK_COMPONENT_SWIZZLE_ZERO specifies that the component is set to
-    zero.
-  * ename:VK_COMPONENT_SWIZZLE_ONE specifies that the component is set to
-    either 1 or 1.0, depending on whether the type of the image view format
-    is integer or floating-point respectively, as determined by the
-    <<formats-definition,Format Definition>> section for each
-    elink:VkFormat.
-  * ename:VK_COMPONENT_SWIZZLE_R specifies that the component is set to the
-    value of the R component of the image.
-  * ename:VK_COMPONENT_SWIZZLE_G specifies that the component is set to the
-    value of the G component of the image.
-  * ename:VK_COMPONENT_SWIZZLE_B specifies that the component is set to the
-    value of the B component of the image.
-  * ename:VK_COMPONENT_SWIZZLE_A specifies that the component is set to the
-    value of the A component of the image.
-
-[[resources-image-views-identity-mappings]]
-Setting the identity swizzle on a component is equivalent to setting the
-identity mapping on that component.
-That is:
-
-.Component Mappings Equivalent To ename:VK_COMPONENT_SWIZZLE_IDENTITY
-[options="header"]
-|====
-| Component          | Identity Mapping
-| pname:components.r | ename:VK_COMPONENT_SWIZZLE_R
-| pname:components.g | ename:VK_COMPONENT_SWIZZLE_G
-| pname:components.b | ename:VK_COMPONENT_SWIZZLE_B
-| pname:components.a | ename:VK_COMPONENT_SWIZZLE_A
-|====
---
-
-ifdef::VK_EXT_astc_decode_mode[]
-[open,refpage='VkImageViewASTCDecodeModeEXT',desc='Structure describing the ASTC decode mode for an image view',type='structs']
---
-If the pname:pNext chain includes a sname:VkImageViewASTCDecodeModeEXT
-structure, then that structure includes a parameter specifying the decode
-mode for image views using ASTC compressed formats.
-
-The sname:VkImageViewASTCDecodeModeEXT structure is defined as:
-
-include::{generated}/api/structs/VkImageViewASTCDecodeModeEXT.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:decodeMode is the intermediate format used to decode ASTC
-    compressed formats.
-
-.Valid Usage
-****
-  * [[VUID-VkImageViewASTCDecodeModeEXT-decodeMode-02230]]
-    pname:decodeMode must: be one of ename:VK_FORMAT_R16G16B16A16_SFLOAT,
-    ename:VK_FORMAT_R8G8B8A8_UNORM, or
-    ename:VK_FORMAT_E5B9G9R9_UFLOAT_PACK32
-  * [[VUID-VkImageViewASTCDecodeModeEXT-decodeMode-02231]]
-    If the <<features-astc-decodeModeSharedExponent,
-    pname:decodeModeSharedExponent>> feature is not enabled,
-    pname:decodeMode must: not be ename:VK_FORMAT_E5B9G9R9_UFLOAT_PACK32
-  * [[VUID-VkImageViewASTCDecodeModeEXT-decodeMode-02232]]
-    If pname:decodeMode is ename:VK_FORMAT_R8G8B8A8_UNORM the image view
-    must: not include blocks using any of the ASTC HDR modes
-  * [[VUID-VkImageViewASTCDecodeModeEXT-format-04084]]
-    pname:format of the image view must: be one of the
-    <<appendix-compressedtex-astc, ASTC Compressed Image Formats>>
-****
-
-If pname:format uses sRGB encoding then the pname:decodeMode has no effect.
-
-include::{generated}/validity/structs/VkImageViewASTCDecodeModeEXT.txt[]
---
-endif::VK_EXT_astc_decode_mode[]
-
-[open,refpage='vkDestroyImageView',desc='Destroy an image view object',type='protos']
---
-To destroy an image view, call:
-
-include::{generated}/api/protos/vkDestroyImageView.txt[]
-
-  * pname:device is the logical device that destroys the image view.
-  * pname:imageView is the image view to destroy.
-  * pname:pAllocator controls host memory allocation as described in the
-    <<memory-allocation, Memory Allocation>> chapter.
-
-.Valid Usage
-****
-  * [[VUID-vkDestroyImageView-imageView-01026]]
-    All submitted commands that refer to pname:imageView must: have
-    completed execution
-  * [[VUID-vkDestroyImageView-imageView-01027]]
-    If sname:VkAllocationCallbacks were provided when pname:imageView was
-    created, a compatible set of callbacks must: be provided here
-  * [[VUID-vkDestroyImageView-imageView-01028]]
-    If no sname:VkAllocationCallbacks were provided when pname:imageView was
-    created, pname:pAllocator must: be `NULL`
-****
-
-include::{generated}/validity/protos/vkDestroyImageView.txt[]
---
-
-ifdef::VK_NVX_image_view_handle[]
-[open,refpage='vkGetImageViewHandleNVX',desc='Get the handle for an image view for a specific descriptor type',type='protos']
---
-To get the handle for an image view, call:
-
-include::{generated}/api/protos/vkGetImageViewHandleNVX.txt[]
-
-  * pname:device is the logical device that owns the image view.
-  * pname:pInfo describes the image view to query and type of handle.
-
-include::{generated}/validity/protos/vkGetImageViewHandleNVX.txt[]
---
-
-[open,refpage='VkImageViewHandleInfoNVX',desc='Structure specifying the image view for handle queries',type='structs']
---
-The sname:VkImageViewHandleInfoNVX structure is defined as:
-
-include::{generated}/api/structs/VkImageViewHandleInfoNVX.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:imageView is the image view to query.
-  * pname:descriptorType is the type of descriptor for which to query a
-    handle.
-  * pname:sampler is the sampler to combine with the image view when
-    generating the handle.
-
-.Valid Usage
-****
-  * [[VUID-VkImageViewHandleInfoNVX-descriptorType-02654]]
-    pname:descriptorType must: be ename:VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE,
-    ename:VK_DESCRIPTOR_TYPE_STORAGE_IMAGE, or
-    ename:VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER
-  * [[VUID-VkImageViewHandleInfoNVX-sampler-02655]]
-    pname:sampler must: be a valid slink:VkSampler if pname:descriptorType
-    is ename:VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER
-  * [[VUID-VkImageViewHandleInfoNVX-imageView-02656]]
-    If descriptorType is ename:VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE or
-    ename:VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, the image that
-    pname:imageView was created from must: have been created with the
-    ename:VK_IMAGE_USAGE_SAMPLED_BIT usage bit set
-  * [[VUID-VkImageViewHandleInfoNVX-imageView-02657]]
-    If descriptorType is ename:VK_DESCRIPTOR_TYPE_STORAGE_IMAGE, the image
-    that pname:imageView was created from must: have been created with the
-    ename:VK_IMAGE_USAGE_STORAGE_BIT usage bit set
-****
-
-include::{generated}/validity/structs/VkImageViewHandleInfoNVX.txt[]
---
-
-[open,refpage='vkGetImageViewAddressNVX',desc='Get the device address of an image view',type='protos']
---
-To get the device address for an image view, call:
-
-include::{generated}/api/protos/vkGetImageViewAddressNVX.txt[]
-
-  * pname:device is the logical device that owns the image view.
-  * pname:imageView is a handle to the image view.
-  * pname:pProperties contains the device address and size when the call
-    returns.
-
-include::{generated}/validity/protos/vkGetImageViewAddressNVX.txt[]
---
-
-[open,refpage='VkImageViewAddressPropertiesNVX',desc='Structure specifying the image view for handle queries',type='structs']
---
-The sname:VkImageViewAddressPropertiesNVX structure is defined as:
-
-include::{generated}/api/structs/VkImageViewAddressPropertiesNVX.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:deviceAddress is the device address of the image view.
-  * pname:size is the size in bytes of the image view device memory.
-
-
-include::{generated}/validity/structs/VkImageViewAddressPropertiesNVX.txt[]
---
-endif::VK_NVX_image_view_handle[]
-
-
-[[resources-image-view-format-features]]
-=== Image View Format Features
-
-Valid uses of a slink:VkImageView may: depend on the image view's _format
-features_, defined below.
-Such constraints are documented in the affected valid usage statement.
-
-ifndef::VK_KHR_format_feature_flags2[]
-  * If slink:VkImageViewCreateInfo::pname:image was created with
-    ename:VK_IMAGE_TILING_LINEAR, then the image view's set of _format
-    features_ is the value of
-    slink:VkFormatProperties::pname:linearTilingFeatures found by calling
-    flink:vkGetPhysicalDeviceFormatProperties on the same pname:format as
-    slink:VkImageViewCreateInfo::pname:format.
-endif::VK_KHR_format_feature_flags2[]
-ifdef::VK_KHR_format_feature_flags2[]
-  * If the extension `apiext:VK_KHR_format_feature_flags2` is enabled and
-    slink:VkImageViewCreateInfo::pname:image was created with
-    ename:VK_IMAGE_TILING_LINEAR, then the image view's set of _format
-    features_ is the value of
-    slink:VkFormatProperties3KHR::pname:linearTilingFeatures found by
-    calling flink:vkGetPhysicalDeviceFormatProperties2 on the same
-    pname:format as slink:VkImageViewCreateInfo::pname:format.
-  * If the extension `apiext:VK_KHR_format_feature_flags2` is not enabled
-    and slink:VkImageViewCreateInfo::pname:image was created with
-    ename:VK_IMAGE_TILING_LINEAR, then the image view's set of _format
-    features_ is the union of the value of
-    slink:VkFormatProperties::pname:linearTilingFeatures found by calling
-    flink:vkGetPhysicalDeviceFormatProperties on the same pname:format as
-    slink:VkImageViewCreateInfo::pname:format, with:
-    - ename:VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_DEPTH_COMPARISON_BIT_KHR if
-      the format is a depth/stencil format and the image view features also
-      contain ename:VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_BIT_KHR.
-    - ename:VK_FORMAT_FEATURE_2_STORAGE_READ_WITHOUT_FORMAT_BIT_KHR if the
-      format is one of the <<formats-without-shader-storage-format,extended
-      storage formats>> and pname:shaderStorageImageReadWithoutFormat is
-      enabled on the device.
-    - ename:VK_FORMAT_FEATURE_2_STORAGE_WRITE_WITHOUT_FORMAT_BIT_KHR if the
-      format is one of the <<formats-without-shader-storage-format,extended
-      storage formats>> and pname:shaderStorageImageWriteWithoutFormat is
-      enabled on the device.
-endif::VK_KHR_format_feature_flags2[]
-ifndef::VK_KHR_format_feature_flags2[]
-  * If slink:VkImageViewCreateInfo::pname:image was created with
-    ename:VK_IMAGE_TILING_OPTIMAL,
-ifdef::VK_ANDROID_external_memory_android_hardware_buffer[]
-    but without an
-    <<memory-external-android-hardware-buffer-external-formats,Android
-    hardware buffer external format>>,
-endif::VK_ANDROID_external_memory_android_hardware_buffer[]
-    then the image view's set of _format features_ is the value of
-    slink:VkFormatProperties::pname:optimalTilingFeatures found by calling
-    flink:vkGetPhysicalDeviceFormatProperties on the same pname:format as
-    slink:VkImageViewCreateInfo::pname:format.
-endif::VK_KHR_format_feature_flags2[]
-ifdef::VK_KHR_format_feature_flags2[]
-  * If the extension `apiext:VK_KHR_format_feature_flags2` is enabled and
-    slink:VkImageViewCreateInfo::pname:image was created with
-    ename:VK_IMAGE_TILING_OPTIMAL,
-ifdef::VK_ANDROID_external_memory_android_hardware_buffer[]
-    but without an
-    <<memory-external-android-hardware-buffer-external-formats,Android
-    hardware buffer external format>>,
-endif::VK_ANDROID_external_memory_android_hardware_buffer[]
-    then the image view's set of _format features_ is the value of
-    slink:VkFormatProperties::pname:optimalTilingFeatures or
-    slink:VkFormatProperties3KHR::pname:optimalTilingFeatures found by
-    calling flink:vkGetPhysicalDeviceFormatProperties or
-    flink:vkGetPhysicalDeviceImageFormatProperties2 on the same pname:format
-    as slink:VkImageViewCreateInfo::pname:format.
-  * If the extension `apiext:VK_KHR_format_feature_flags2` is not enabled
-    and slink:VkImageViewCreateInfo::pname:image was created with
-    ename:VK_IMAGE_TILING_OPTIMAL,
-ifdef::VK_ANDROID_external_memory_android_hardware_buffer[]
-    but without an
-    <<memory-external-android-hardware-buffer-external-formats,Android
-    hardware buffer external format>>,
-endif::VK_ANDROID_external_memory_android_hardware_buffer[]
-    then the image view's set of _format features_ is the union of the value
-    of slink:VkFormatProperties::pname:optimalTilingFeatures found by
-    calling flink:vkGetPhysicalDeviceFormatProperties on the same
-    pname:format as slink:VkImageViewCreateInfo::pname:format, with:
-    - ename:VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_DEPTH_COMPARISON_BIT_KHR if
-      the format is a depth/stencil format and the image view features also
-      contain ename:VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_BIT_KHR.
-    - ename:VK_FORMAT_FEATURE_2_STORAGE_READ_WITHOUT_FORMAT_BIT_KHR if the
-      format is one of the <<formats-without-shader-storage-format,extended
-      storage formats>> and pname:shaderStorageImageReadWithoutFormat is
-      enabled on the device.
-    - ename:VK_FORMAT_FEATURE_2_STORAGE_WRITE_WITHOUT_FORMAT_BIT_KHR if the
-      format is one of the <<formats-without-shader-storage-format,extended
-      storage formats>> and pname:shaderStorageImageWriteWithoutFormat is
-      enabled on the device.
-endif::VK_KHR_format_feature_flags2[]
-ifdef::VK_ANDROID_external_memory_android_hardware_buffer[]
-  * If slink:VkImageViewCreateInfo::pname:image was created with an
-    <<memory-external-android-hardware-buffer-external-formats,Android
-    hardware buffer external format>>, then the image views's set of _format
-    features_ is the value of
-    slink:VkAndroidHardwareBufferFormatPropertiesANDROID::pname:formatFeatures
-    found by calling flink:vkGetAndroidHardwareBufferPropertiesANDROID on
-    the Android hardware buffer that was imported to the
-    slink:VkDeviceMemory to which the
-    slink:VkImageViewCreateInfo::pname:image is bound.
-endif::VK_ANDROID_external_memory_android_hardware_buffer[]
-ifdef::VK_FUCHSIA_buffer_collection[]
-  * If slink:VkImageViewCreateInfo::pname:image was created with a chained
-    slink:VkBufferCollectionImageCreateInfoFUCHSIA, then the image view's
-    set of _format features_ is the value of
-    slink:VkBufferCollectionPropertiesFUCHSIA::pname:formatFeatures found by
-    calling flink:vkGetBufferCollectionPropertiesFUCHSIA on the buffer
-    collection passed as
-    slink:VkBufferCollectionImageCreateInfoFUCHSIA::pname:collection when
-    the image was created.
-endif::VK_FUCHSIA_buffer_collection[]
-ifdef::VK_EXT_image_drm_format_modifier[]
-  * If slink:VkImageViewCreateInfo::pname:image was created with
-    ename:VK_IMAGE_TILING_DRM_FORMAT_MODIFIER_EXT, then:
-  ** The image's DRM format modifier is the value of
-     slink:VkImageDrmFormatModifierListCreateInfoEXT::pname:drmFormatModifier
-     found by calling flink:vkGetImageDrmFormatModifierPropertiesEXT.
-  ** Let
-     slink:VkDrmFormatModifierPropertiesListEXT::pname:pDrmFormatModifierProperties
-     be the array found by calling
-     flink:vkGetPhysicalDeviceFormatProperties2 on the same pname:format as
-     slink:VkImageViewCreateInfo::pname:format.
-  ** Let `VkDrmFormatModifierPropertiesEXT prop` be an array element whose
-     pname:drmFormatModifier member is the value of the image's DRM format
-     modifier.
-  ** Then the image view's set of _format features_ is the value of taking
-     the bitwise intersection, over the collected
-     `prop`::pname:drmFormatModifierTilingFeatures.
-endif::VK_EXT_image_drm_format_modifier[]
-
-
-ifdef::VK_NV_ray_tracing,VK_KHR_acceleration_structure[]
-[[resources-acceleration-structures]]
-== Acceleration Structures
-
-[open,refpage='VkAccelerationStructureKHR',desc='Opaque handle to an acceleration structure object',type='handles']
---
-:refpage: VkAccelerationStructureKHR
-
-Acceleration structures are opaque data structures that are built by the
-implementation to more efficiently perform spatial queries on the provided
-geometric data.
-For this extension, an acceleration structure is either a top-level
-acceleration structure containing a set of bottom-level acceleration
-structures or a bottom-level acceleration structure containing either a set
-of axis-aligned bounding boxes for custom geometry or a set of triangles.
-
-Each instance in the top-level acceleration structure contains a reference
-to a bottom-level acceleration structure as well as an instance transform
-plus information required to index into the shader bindings.
-The top-level acceleration structure is what is bound to the acceleration
-descriptor, for example to trace inside the shader in the ray tracing
-pipeline.
-
-Acceleration structures are represented by sname:VkAccelerationStructureKHR
-handles:
-
-include::{generated}/api/handles/VkAccelerationStructureKHR.txt[]
---
-
-ifdef::VK_NV_ray_tracing[]
-[open,refpage='VkAccelerationStructureNV',desc='Opaque handle to an acceleration structure object',type='handles']
---
-:refpage: VkAccelerationStructureNV
-
-Acceleration structures for the apiext:VK_NV_ray_tracing extension are
-represented by the similar sname:VkAccelerationStructureNV handles:
-
-include::{generated}/api/handles/VkAccelerationStructureNV.txt[]
---
-
-[open,refpage='vkCreateAccelerationStructureNV',desc='Create a new acceleration structure object',type='protos']
---
-:refpage: vkCreateAccelerationStructureNV
-
-To create acceleration structures, call:
-
-include::{generated}/api/protos/vkCreateAccelerationStructureNV.txt[]
-
-  * pname:device is the logical device that creates the buffer object.
-  * pname:pCreateInfo is a pointer to a
-    slink:VkAccelerationStructureCreateInfoNV structure containing
-    parameters affecting creation of the acceleration structure.
-  * pname:pAllocator controls host memory allocation as described in the
-    <<memory-allocation, Memory Allocation>> chapter.
-  * pname:pAccelerationStructure is a pointer to a
-    slink:VkAccelerationStructureNV handle in which the resulting
-    acceleration structure object is returned.
-
-Similarly to other objects in Vulkan, the acceleration structure creation
-merely creates an object with a specific "`shape`" as specified by the
-information in slink:VkAccelerationStructureInfoNV and pname:compactedSize
-in pname:pCreateInfo.
-Populating the data in the object after allocating and binding memory is
-done with flink:vkCmdBuildAccelerationStructureNV and
-flink:vkCmdCopyAccelerationStructureNV.
-
-Acceleration structure creation uses the count and type information from the
-geometries, but does not use the data references in the structures.
-
-include::{generated}/validity/protos/vkCreateAccelerationStructureNV.txt[]
---
-
-[open,refpage='VkAccelerationStructureCreateInfoNV',desc='Structure specifying the parameters of a newly created acceleration structure object',type='structs']
---
-:refpage: VkAccelerationStructureCreateInfoNV
-
-The sname:VkAccelerationStructureCreateInfoNV structure is defined as:
-
-include::{generated}/api/structs/VkAccelerationStructureCreateInfoNV.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:compactedSize is the size from the result of
-    flink:vkCmdWriteAccelerationStructuresPropertiesNV if this acceleration
-    structure is going to be the target of a compacting copy.
-  * pname:info is the slink:VkAccelerationStructureInfoNV structure
-    specifying further parameters of the created acceleration structure.
-
-.Valid Usage
-****
-  * [[VUID-VkAccelerationStructureCreateInfoNV-compactedSize-02421]]
-    If pname:compactedSize is not `0` then both pname:info.geometryCount and
-    pname:info.instanceCount must: be `0`
-****
-
-include::{generated}/validity/structs/VkAccelerationStructureCreateInfoNV.txt[]
---
-
-[open,refpage='VkAccelerationStructureInfoNV',desc='Structure specifying the parameters of acceleration structure object',type='structs']
---
-:refpage: VkAccelerationStructureInfoNV
-
-The sname:VkAccelerationStructureInfoNV structure is defined as:
-
-include::{generated}/api/structs/VkAccelerationStructureInfoNV.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:type is a elink:VkAccelerationStructureTypeNV value specifying the
-    type of acceleration structure that will be created.
-  * pname:flags is a bitmask of elink:VkBuildAccelerationStructureFlagBitsNV
-    specifying additional parameters of the acceleration structure.
-  * pname:instanceCount specifies the number of instances that will be in
-    the new acceleration structure.
-  * pname:geometryCount specifies the number of geometries that will be in
-    the new acceleration structure.
-  * pname:pGeometries is a pointer to an array of pname:geometryCount
-    slink:VkGeometryNV structures containing the scene data being passed
-    into the acceleration structure.
-
-sname:VkAccelerationStructureInfoNV contains information that is used both
-for acceleration structure creation with
-flink:vkCreateAccelerationStructureNV and in combination with the actual
-geometric data to build the acceleration structure with
-flink:vkCmdBuildAccelerationStructureNV.
-
-.Valid Usage
-****
-  * [[VUID-VkAccelerationStructureInfoNV-geometryCount-02422]]
-    pname:geometryCount must: be less than or equal to
-    slink:VkPhysicalDeviceRayTracingPropertiesNV::pname:maxGeometryCount
-  * [[VUID-VkAccelerationStructureInfoNV-instanceCount-02423]]
-    pname:instanceCount must: be less than or equal to
-    slink:VkPhysicalDeviceRayTracingPropertiesNV::pname:maxInstanceCount
-  * [[VUID-VkAccelerationStructureInfoNV-maxTriangleCount-02424]]
-    The total number of triangles in all geometries must: be less than or
-    equal to
-    slink:VkPhysicalDeviceRayTracingPropertiesNV::pname:maxTriangleCount
-  * [[VUID-VkAccelerationStructureInfoNV-type-02425]]
-    If pname:type is ename:VK_ACCELERATION_STRUCTURE_TYPE_TOP_LEVEL_NV then
-    pname:geometryCount must: be `0`
-  * [[VUID-VkAccelerationStructureInfoNV-type-02426]]
-    If pname:type is ename:VK_ACCELERATION_STRUCTURE_TYPE_BOTTOM_LEVEL_NV
-    then pname:instanceCount must: be `0`
-  * [[VUID-VkAccelerationStructureInfoNV-type-02786]]
-    If pname:type is ename:VK_ACCELERATION_STRUCTURE_TYPE_BOTTOM_LEVEL_NV
-    then the pname:geometryType member of each geometry in pname:pGeometries
-    must: be the same
-ifdef::VK_KHR_acceleration_structure[]
-  * [[VUID-VkAccelerationStructureInfoNV-type-04623]]
-    pname:type must: not be ename:VK_ACCELERATION_STRUCTURE_TYPE_GENERIC_KHR
-endif::VK_KHR_acceleration_structure[]
-  * [[VUID-VkAccelerationStructureInfoNV-flags-02592]]
-    If pname:flags has the
-    ename:VK_BUILD_ACCELERATION_STRUCTURE_PREFER_FAST_TRACE_BIT_NV bit set,
-    then it must: not have the
-    ename:VK_BUILD_ACCELERATION_STRUCTURE_PREFER_FAST_BUILD_BIT_NV bit set
-  * [[VUID-VkAccelerationStructureInfoNV-scratch-02781]]
-    pname:scratch must: have been created with
-    ename:VK_BUFFER_USAGE_RAY_TRACING_BIT_NV usage flag
-  * [[VUID-VkAccelerationStructureInfoNV-instanceData-02782]]
-    If pname:instanceData is not dlink:VK_NULL_HANDLE, pname:instanceData
-    must: have been created with ename:VK_BUFFER_USAGE_RAY_TRACING_BIT_NV
-    usage flag
-****
-
-include::{generated}/validity/structs/VkAccelerationStructureInfoNV.txt[]
---
-endif::VK_NV_ray_tracing[]
-
-ifdef::VK_KHR_acceleration_structure[]
-[open,refpage='vkCreateAccelerationStructureKHR',desc='Create a new acceleration structure object',type='protos']
---
-:refpage: vkCreateAccelerationStructureKHR
-
-To create an acceleration structure, call:
-
-include::{generated}/api/protos/vkCreateAccelerationStructureKHR.txt[]
-
-  * pname:device is the logical device that creates the acceleration
-    structure object.
-  * pname:pCreateInfo is a pointer to a
-    slink:VkAccelerationStructureCreateInfoKHR structure containing
-    parameters affecting creation of the acceleration structure.
-  * pname:pAllocator controls host memory allocation as described in the
-    <<memory-allocation, Memory Allocation>> chapter.
-  * pname:pAccelerationStructure is a pointer to a
-    sname:VkAccelerationStructureKHR handle in which the resulting
-    acceleration structure object is returned.
-
-Similar to other objects in Vulkan, the acceleration structure creation
-merely creates an object with a specific "`shape`".
-The type and quantity of geometry that can be built into an acceleration
-structure is determined by the parameters of
-slink:VkAccelerationStructureCreateInfoKHR.
-
-Populating the data in the object after allocating and binding memory is
-done with commands such as flink:vkCmdBuildAccelerationStructuresKHR,
-flink:vkBuildAccelerationStructuresKHR,
-flink:vkCmdCopyAccelerationStructureKHR, and
-flink:vkCopyAccelerationStructureKHR.
-
-The input buffers passed to acceleration structure build commands will be
-referenced by the implementation for the duration of the command.
-After the command completes, the acceleration structure may: hold a
-reference to any acceleration structure specified by an active instance
-contained therein.
-Apart from this referencing, acceleration structures must: be fully
-self-contained.
-The application may: re-use or free any memory which was used by the command
-as an input or as scratch without affecting the results of ray traversal.
-
-.Valid Usage
-****
-  * [[VUID-vkCreateAccelerationStructureKHR-accelerationStructure-03611]]
-    The <<features-accelerationStructure, pname:accelerationStructure>>
-    feature must: be enabled
-  * [[VUID-vkCreateAccelerationStructureKHR-deviceAddress-03488]]
-    If slink:VkAccelerationStructureCreateInfoKHR::pname:deviceAddress is
-    not zero, the
-    <<features-accelerationStructureCaptureReplay,pname:accelerationStructureCaptureReplay>>
-    feature must: be enabled
-  * [[VUID-vkCreateAccelerationStructureKHR-device-03489]]
-    If pname:device was created with multiple physical devices, then the
-    <<features-bufferDeviceAddressMultiDevice,bufferDeviceAddressMultiDevice>>
-    feature must: be enabled
-****
-
-include::{generated}/validity/protos/vkCreateAccelerationStructureKHR.txt[]
---
-
-[open,refpage='VkAccelerationStructureCreateInfoKHR',desc='Structure specifying the parameters of a newly created acceleration structure object',type='structs']
---
-:refpage: VkAccelerationStructureCreateInfoKHR
-
-The sname:VkAccelerationStructureCreateInfoKHR structure is defined as:
-
-include::{generated}/api/structs/VkAccelerationStructureCreateInfoKHR.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:createFlags is a bitmask of
-    elink:VkAccelerationStructureCreateFlagBitsKHR specifying additional
-    creation parameters of the acceleration structure.
-  * pname:buffer is the buffer on which the acceleration structure will be
-    stored.
-  * pname:offset is an offset in bytes from the base address of the buffer
-    at which the acceleration structure will be stored, and must: be a
-    multiple of `256`.
-  * pname:size is the size required for the acceleration structure.
-  * pname:type is a elink:VkAccelerationStructureTypeKHR value specifying
-    the type of acceleration structure that will be created.
-  * pname:deviceAddress is the device address requested for the acceleration
-    structure if the <<features-accelerationStructureCaptureReplay,
-    pname:accelerationStructureCaptureReplay>> feature is being used.
-
-If pname:deviceAddress is zero, no specific address is requested.
-
-If pname:deviceAddress is not zero, pname:deviceAddress must: be an address
-retrieved from an identically created acceleration structure on the same
-implementation.
-The acceleration structure must: also be placed on an identically created
-pname:buffer and at the same pname:offset.
-
-Applications should: avoid creating acceleration structures with
-application-provided addresses and implementation-provided addresses in the
-same process, to reduce the likelihood of
-ename:VK_ERROR_INVALID_OPAQUE_CAPTURE_ADDRESS_KHR errors.
-
-[NOTE]
-.Note
-====
-The expected usage for this is that a trace capture/replay tool will add the
-ename:VK_BUFFER_CREATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT flag to all buffers
-that use ename:VK_BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT, and will add
-ename:VK_BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT to all buffers used as
-storage for an acceleration structure where pname:deviceAddress is not zero.
-This also means that the tool will need to add
-ename:VK_MEMORY_ALLOCATE_DEVICE_ADDRESS_BIT to memory allocations to allow
-the flag to be set where the application may not have otherwise required it.
-During capture the tool will save the queried opaque device addresses in the
-trace.
-During replay, the buffers will be created specifying the original address
-so any address values stored in the trace data will remain valid.
-
-Implementations are expected to separate such buffers in the GPU address
-space so normal allocations will avoid using these addresses.
-Apps/tools should avoid mixing app-provided and implementation-provided
-addresses for buffers created with
-ename:VK_BUFFER_CREATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT, to avoid address
-space allocation conflicts.
-====
-
-
-Applications should: create an acceleration structure with a specific
-elink:VkAccelerationStructureTypeKHR other than
-ename:VK_ACCELERATION_STRUCTURE_TYPE_GENERIC_KHR.
-
-If the acceleration structure will be the target of a build operation, the
-required size for an acceleration structure can: be queried with
-flink:vkGetAccelerationStructureBuildSizesKHR.
-If the acceleration structure is going to be the target of a compacting
-copy, flink:vkCmdWriteAccelerationStructuresPropertiesKHR or
-flink:vkWriteAccelerationStructuresPropertiesKHR can: be used to obtain the
-compacted size required.
-
-ifdef::VK_NV_ray_tracing_motion_blur[]
-If the acceleration structure will be the target of a build operation with
-ename:VK_BUILD_ACCELERATION_STRUCTURE_MOTION_BIT_NV it must: include
-ename:VK_ACCELERATION_STRUCTURE_CREATE_MOTION_BIT_NV in pname:flags and
-include slink:VkAccelerationStructureMotionInfoNV as an extension structure
-in pname:pNext with the number of instances as metadata for the object.
-endif::VK_NV_ray_tracing_motion_blur[]
-
-.Valid Usage
-****
-  * [[VUID-VkAccelerationStructureCreateInfoKHR-deviceAddress-03612]]
-    If pname:deviceAddress is not zero, pname:createFlags must: include
-    ename:VK_ACCELERATION_STRUCTURE_CREATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT_KHR
-  * [[VUID-VkAccelerationStructureCreateInfoKHR-createFlags-03613]]
-    If pname:createFlags includes
-    ename:VK_ACCELERATION_STRUCTURE_CREATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT_KHR,
-    slink:VkPhysicalDeviceAccelerationStructureFeaturesKHR::pname:accelerationStructureCaptureReplay
-    must: be ename:VK_TRUE
-  * [[VUID-VkAccelerationStructureCreateInfoKHR-buffer-03614]]
-    pname:buffer must: have been created with a pname:usage value containing
-    ename:VK_BUFFER_USAGE_ACCELERATION_STRUCTURE_STORAGE_BIT_KHR
-  * [[VUID-VkAccelerationStructureCreateInfoKHR-buffer-03615]]
-    pname:buffer must: not have been created with
-    ename:VK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT
-  * [[VUID-VkAccelerationStructureCreateInfoKHR-offset-03616]]
-    The sum of pname:offset and pname:size must: be less than the size of
-    pname:buffer
-  * [[VUID-VkAccelerationStructureCreateInfoKHR-offset-03734]]
-    pname:offset must: be a multiple of `256` bytes
-ifdef::VK_NV_ray_tracing_motion_blur[]
-  * [[VUID-VkAccelerationStructureCreateInfoKHR-flags-04954]]
-    If ename:VK_ACCELERATION_STRUCTURE_CREATE_MOTION_BIT_NV is set in
-    pname:flags and pname:type is
-    ename:VK_ACCELERATION_STRUCTURE_TYPE_TOP_LEVEL_KHR,
- one member of the pname:pNext chain must: be a pointer to a valid instance
- of slink:VkAccelerationStructureMotionInfoNV
-  * [[VUID-VkAccelerationStructureCreateInfoKHR-flags-04955]]
-    If any geometry includes
-    sname:VkAccelerationStructureGeometryMotionTrianglesDataNV then
-    pname:flags must: contain
-    ename:VK_ACCELERATION_STRUCTURE_CREATE_MOTION_BIT_NV
-endif::VK_NV_ray_tracing_motion_blur[]
-****
-
-include::{generated}/validity/structs/VkAccelerationStructureCreateInfoKHR.txt[]
---
-
-ifdef::VK_NV_ray_tracing_motion_blur[]
-[open,refpage='VkAccelerationStructureMotionInfoNV',desc='Structure specifying the parameters of a newly created acceleration structure object',type='structs']
---
-:refpage: VkAccelerationStructureMotionInfoNV
-
-The sname:VkAccelerationStructureMotionInfoNV structure is defined as:
-
-include::{generated}/api/structs/VkAccelerationStructureMotionInfoNV.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:maxInstances is the maximum number of instances that may: be used
-    in the motion top-level acceleration structure.
-  * pname:flags is 0 and reserved for future use.
-
-include::{generated}/validity/structs/VkAccelerationStructureMotionInfoNV.txt[]
---
-
-[open,refpage='VkAccelerationStructureMotionInfoFlagsNV',desc='Reserved for future use',type='flags']
---
-include::{generated}/api/flags/VkAccelerationStructureMotionInfoFlagsNV.txt[]
-
-tname:VkAccelerationStructureMotionInfoFlagsNV is a bitmask type for setting
-a mask, but is currently reserved for future use.
---
-endif::VK_NV_ray_tracing_motion_blur[]
-
-[open,refpage='vkGetAccelerationStructureBuildSizesKHR',desc='Retrieve the required size for an acceleration structure',type='protos']
---
-:refpage: vkGetAccelerationStructureBuildSizesKHR
-
-To get the build sizes for an acceleration structure, call:
-
-include::{generated}/api/protos/vkGetAccelerationStructureBuildSizesKHR.txt[]
-
-  * pname:device is the logical device that will be used for creating the
-    acceleration structure.
-  * pname:buildType defines whether host or device operations (or both) are
-    being queried for.
-  * pname:pBuildInfo is a pointer to a
-    slink:VkAccelerationStructureBuildGeometryInfoKHR structure describing
-    parameters of a build operation.
-  * pname:pMaxPrimitiveCounts is a pointer to an array of
-    pname:pBuildInfo->geometryCount code:uint32_t values defining the number
-    of primitives built into each geometry.
-  * pname:pSizeInfo is a pointer to a
-    slink:VkAccelerationStructureBuildSizesInfoKHR structure which returns
-    the size required for an acceleration structure and the sizes required
-    for the scratch buffers, given the build parameters.
-
-The pname:srcAccelerationStructure, pname:dstAccelerationStructure, and
-pname:mode members of pname:pBuildInfo are ignored.
-Any slink:VkDeviceOrHostAddressKHR members of pname:pBuildInfo are ignored
-by this command, except that the pname:hostAddress member of
-slink:VkAccelerationStructureGeometryTrianglesDataKHR::pname:transformData
-will be examined to check if it is `NULL`.
-
-An acceleration structure created with the pname:accelerationStructureSize
-returned by this command supports any build or update with a
-slink:VkAccelerationStructureBuildGeometryInfoKHR structure and array of
-slink:VkAccelerationStructureBuildRangeInfoKHR structures subject to the
-following properties:
-
-  * The build command is a host build command, and pname:buildType is
-    ename:VK_ACCELERATION_STRUCTURE_BUILD_TYPE_HOST_KHR or
-    ename:VK_ACCELERATION_STRUCTURE_BUILD_TYPE_HOST_OR_DEVICE_KHR
-  * The build command is a device build command, and pname:buildType is
-    ename:VK_ACCELERATION_STRUCTURE_BUILD_TYPE_DEVICE_KHR or
-    ename:VK_ACCELERATION_STRUCTURE_BUILD_TYPE_HOST_OR_DEVICE_KHR
-  * For slink:VkAccelerationStructureBuildGeometryInfoKHR:
-  ** Its pname:type, and pname:flags members are equal to those specified in
-     pname:pBuildInfo.
-  ** pname:geometryCount is less than or equal to that specified in
-     pname:pBuildInfo.
-  ** For each element of either pname:pGeometries or pname:ppGeometries at a
-     given index, its pname:geometryType member is equal to that specified
-     in pname:pBuildInfo.
-  ** For each element of either pname:pGeometries or pname:ppGeometries at a
-     given index, with a pname:geometryType member equal to
-     ename:VK_GEOMETRY_TYPE_TRIANGLES_KHR, the pname:vertexFormat and
-     pname:indexType members of pname:geometry.triangles are equal to those
-     specified in the same element in pname:pBuildInfo.
-  ** For each element of either pname:pGeometries or pname:ppGeometries at a
-     given index, with a pname:geometryType member equal to
-     ename:VK_GEOMETRY_TYPE_TRIANGLES_KHR, the pname:maxVertex member of
-     pname:geometry.triangles is less than or equal to that specified in the
-     same element in pname:pBuildInfo.
-  ** For each element of either pname:pGeometries or pname:ppGeometries at a
-     given index, with a pname:geometryType member equal to
-     ename:VK_GEOMETRY_TYPE_TRIANGLES_KHR, if the applicable address in the
-     pname:transformData member of pname:geometry.triangles is not `NULL`,
-     the corresponding pname:transformData.hostAddress parameter in
-     pname:pBuildInfo is not `NULL`.
-  * For each slink:VkAccelerationStructureBuildRangeInfoKHR corresponding to
-    the slink:VkAccelerationStructureBuildGeometryInfoKHR:
-  ** Its pname:primitiveCount member is less than or equal to the
-     corresponding element of pname:pMaxPrimitiveCounts.
-
-Similarly, the pname:updateScratchSize value will support any build command
-specifying the ename:VK_BUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR
-pname:mode under the above conditions, and the pname:buildScratchSize value
-will support any build command specifying the
-ename:VK_BUILD_ACCELERATION_STRUCTURE_MODE_BUILD_KHR pname:mode under the
-above conditions.
-
-.Valid Usage
-****
-  * [[VUID-vkGetAccelerationStructureBuildSizesKHR-rayTracingPipeline-03617]]
-    The <<features-rayTracingPipeline, pname:rayTracingPipeline>> or
-    <<features-rayQuery, pname:rayQuery>> feature must: be enabled
-  * [[VUID-vkGetAccelerationStructureBuildSizesKHR-device-03618]]
-    If pname:device was created with multiple physical devices, then the
-    <<features-bufferDeviceAddressMultiDevice,bufferDeviceAddressMultiDevice>>
-    feature must: be enabled
-  * [[VUID-vkGetAccelerationStructureBuildSizesKHR-pBuildInfo-03619]]
-    If pname:pBuildInfo->geometryCount is not `0`, pname:pMaxPrimitiveCounts
-    must: be a valid pointer to an array of pname:pBuildInfo->geometryCount
-    code:uint32_t values
-  * [[VUID-vkGetAccelerationStructureBuildSizesKHR-pBuildInfo-03785]]
-    If pname:pBuildInfo->pGeometries or pname:pBuildInfo->ppGeometries has a
-    pname:geometryType of ename:VK_GEOMETRY_TYPE_INSTANCES_KHR, each
-    pname:pMaxPrimitiveCounts[i] must: be less than or equal to
-    slink:VkPhysicalDeviceAccelerationStructurePropertiesKHR::pname:maxInstanceCount
-****
-
-include::{generated}/validity/protos/vkGetAccelerationStructureBuildSizesKHR.txt[]
---
-
-[open,refpage='VkAccelerationStructureBuildSizesInfoKHR',desc='Structure specifying build sizes for an acceleration structure',type='structs']
---
-:refpage: VkAccelerationStructureBuildSizesInfoKHR
-
-The sname:VkAccelerationStructureBuildSizesInfoKHR structure describes the
-required build sizes for an acceleration structure and scratch buffers and
-is defined as:
-
-include::{generated}/api/structs/VkAccelerationStructureBuildSizesInfoKHR.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:accelerationStructureSize is the size in bytes required in a
-    slink:VkAccelerationStructureKHR for a build or update operation.
-  * pname:updateScratchSize is the size in bytes required in a scratch
-    buffer for an update operation.
-  * pname:buildScratchSize is the size in bytes required in a scratch buffer
-    for a build operation.
-
-include::{generated}/validity/structs/VkAccelerationStructureBuildSizesInfoKHR.txt[]
---
-endif::VK_KHR_acceleration_structure[]
-
-[open,refpage='VkAccelerationStructureTypeKHR',desc='Type of acceleration structure',type='enums',alias='VkAccelerationStructureTypeNV']
---
-:refpage: VkAccelerationStructureTypeKHR
-
-Values which can: be set in
-ifdef::VK_KHR_acceleration_structure[]
-slink:VkAccelerationStructureCreateInfoKHR::pname:type
-endif::VK_KHR_acceleration_structure[]
-ifdef::VK_KHR_acceleration_structure+VK_NV_ray_tracing[or]
-ifdef::VK_NV_ray_tracing[]
-slink:VkAccelerationStructureInfoNV::pname:type
-endif::VK_NV_ray_tracing[]
-specifying the type of acceleration structure, are:
-
-include::{generated}/api/enums/VkAccelerationStructureTypeKHR.txt[]
-
-ifdef::VK_NV_ray_tracing[]
-or the equivalent
-
-include::{generated}/api/enums/VkAccelerationStructureTypeNV.txt[]
-endif::VK_NV_ray_tracing[]
-
-  * ename:VK_ACCELERATION_STRUCTURE_TYPE_TOP_LEVEL_KHR is a top-level
-    acceleration structure containing instance data referring to
-    bottom-level acceleration structures.
-  * ename:VK_ACCELERATION_STRUCTURE_TYPE_BOTTOM_LEVEL_KHR is a bottom-level
-    acceleration structure containing the AABBs or geometry to be
-    intersected.
-  * ename:VK_ACCELERATION_STRUCTURE_TYPE_GENERIC_KHR is an acceleration
-    structure whose type is determined at build time used for special
-    circumstances.
---
-
-ifdef::VK_KHR_acceleration_structure[]
-[open,refpage='VkAccelerationStructureCreateFlagBitsKHR',desc='Bitmask specifying additional creation parameters for acceleration structure',type='enums']
---
-Bits which can: be set in
-slink:VkAccelerationStructureCreateInfoKHR::pname:createFlags specifying
-additional creation parameters for acceleration structures, are:
-
-include::{generated}/api/enums/VkAccelerationStructureCreateFlagBitsKHR.txt[]
-
-  * ename:VK_ACCELERATION_STRUCTURE_CREATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT_KHR
-    specifies that the acceleration structure's address can: be saved and
-    reused on a subsequent run.
---
-
-[open,refpage='VkAccelerationStructureCreateFlagsKHR',desc='Bitmask of VkAccelerationStructureCreateFlagBitsKHR',type='flags']
---
-include::{generated}/api/flags/VkAccelerationStructureCreateFlagsKHR.txt[]
-
-tname:VkAccelerationStructureCreateFlagsKHR is a bitmask type for setting a
-mask of zero or more elink:VkAccelerationStructureCreateFlagBitsKHR.
---
-endif::VK_KHR_acceleration_structure[]
-
-[open,refpage='VkBuildAccelerationStructureFlagBitsKHR',desc='Bitmask specifying additional parameters for acceleration structure builds',type='enums',alias='VkBuildAccelerationStructureFlagBitsNV']
---
-:refpage: VkBuildAccelerationStructureFlagBitsKHR
-
-Bits which can: be set in
-ifdef::VK_KHR_acceleration_structure[]
-slink:VkAccelerationStructureBuildGeometryInfoKHR::pname:flags
-endif::VK_KHR_acceleration_structure[]
-ifdef::VK_KHR_acceleration_structure+VK_NV_ray_tracing[or]
-ifdef::VK_NV_ray_tracing[]
-slink:VkAccelerationStructureInfoNV::pname:flags
-endif::VK_NV_ray_tracing[]
-specifying additional parameters for acceleration structure builds, are:
-
-include::{generated}/api/enums/VkBuildAccelerationStructureFlagBitsKHR.txt[]
-
-ifdef::VK_NV_ray_tracing[]
-or the equivalent
-
-include::{generated}/api/enums/VkBuildAccelerationStructureFlagBitsNV.txt[]
-endif::VK_NV_ray_tracing[]
-
-  * ename:VK_BUILD_ACCELERATION_STRUCTURE_ALLOW_UPDATE_BIT_KHR indicates
-    that the specified acceleration structure can: be updated with
-ifdef::VK_KHR_acceleration_structure[]
-    a pname:mode of ename:VK_BUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR in
-    slink:VkAccelerationStructureBuildGeometryInfoKHR
-endif::VK_KHR_acceleration_structure[]
-ifdef::VK_KHR_acceleration_structure+VK_NV_ray_tracing[or]
-ifdef::VK_NV_ray_tracing[]
-    an pname:update of ename:VK_TRUE in
-    flink:vkCmdBuildAccelerationStructureNV
-endif::VK_NV_ray_tracing[]
-    .
-  * ename:VK_BUILD_ACCELERATION_STRUCTURE_ALLOW_COMPACTION_BIT_KHR indicates
-    that the specified acceleration structure can: act as the source for a
-    copy acceleration structure command with pname:mode of
-    ename:VK_COPY_ACCELERATION_STRUCTURE_MODE_COMPACT_KHR to produce a
-    compacted acceleration structure.
-  * ename:VK_BUILD_ACCELERATION_STRUCTURE_PREFER_FAST_TRACE_BIT_KHR
-    indicates that the given acceleration structure build should: prioritize
-    trace performance over build time.
-  * ename:VK_BUILD_ACCELERATION_STRUCTURE_PREFER_FAST_BUILD_BIT_KHR
-    indicates that the given acceleration structure build should: prioritize
-    build time over trace performance.
-  * ename:VK_BUILD_ACCELERATION_STRUCTURE_LOW_MEMORY_BIT_KHR indicates that
-    this acceleration structure should: minimize the size of the scratch
-    memory and the final result acceleration structure, potentially at the
-    expense of build time or trace performance.
-
-[NOTE]
-.Note
-====
-ename:VK_BUILD_ACCELERATION_STRUCTURE_ALLOW_UPDATE_BIT_KHR and
-ename:VK_BUILD_ACCELERATION_STRUCTURE_ALLOW_COMPACTION_BIT_KHR may: take
-more time and memory than a normal build, and so should: only be used when
-those features are needed.
-====
---
-
-[open,refpage='VkBuildAccelerationStructureFlagsKHR',desc='Bitmask of VkBuildAccelerationStructureFlagBitsKHR',type='flags',alias='VkBuildAccelerationStructureFlagsNV']
---
-:refpage: VkBuildAccelerationStructureFlagsKHR
-
-include::{generated}/api/flags/VkBuildAccelerationStructureFlagsKHR.txt[]
-
-ifdef::VK_NV_ray_tracing[]
-or the equivalent
-
-include::{generated}/api/flags/VkBuildAccelerationStructureFlagsNV.txt[]
-endif::VK_NV_ray_tracing[]
-
-tname:VkBuildAccelerationStructureFlagsKHR is a bitmask type for setting a
-mask of zero or more elink:VkBuildAccelerationStructureFlagBitsKHR.
---
-
-ifdef::VK_NV_ray_tracing[]
-[open,refpage='VkGeometryNV',desc='Structure specifying a geometry in a bottom-level acceleration structure',type='structs']
---
-:refpage: VkGeometryNV
-
-The sname:VkGeometryNV structure describes geometry in a bottom-level
-acceleration structure and is defined as:
-
-include::{generated}/api/structs/VkGeometryNV.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:geometryType specifies the elink:VkGeometryTypeKHR which this
-    geometry refers to.
-  * pname:geometry contains the geometry data as described in
-    slink:VkGeometryDataNV.
-  * pname:flags has elink:VkGeometryFlagBitsKHR describing options for this
-    geometry.
-
-.Valid Usage
-****
-  * [[VUID-VkGeometryNV-geometryType-03503]]
-    pname:geometryType must: be ename:VK_GEOMETRY_TYPE_TRIANGLES_NV or
-    ename:VK_GEOMETRY_TYPE_AABBS_NV
-****
-
-include::{generated}/validity/structs/VkGeometryNV.txt[]
---
-endif::VK_NV_ray_tracing[]
-
-[open,refpage='VkGeometryTypeKHR',desc='Enum specifying which type of geometry is provided',type='enums',alias='VkGeometryTypeNV']
---
-:refpage: VkGeometryTypeKHR
-
-Geometry types are specified by elink:VkGeometryTypeKHR, which takes values:
-
-include::{generated}/api/enums/VkGeometryTypeKHR.txt[]
-
-ifdef::VK_NV_ray_tracing[]
-or the equivalent
-
-include::{generated}/api/enums/VkGeometryTypeNV.txt[]
-endif::VK_NV_ray_tracing[]
-
-  * ename:VK_GEOMETRY_TYPE_TRIANGLES_KHR specifies a geometry type
-    consisting of triangles.
-  * ename:VK_GEOMETRY_TYPE_AABBS_KHR specifies a geometry type consisting of
-    axis-aligned bounding boxes.
-ifdef::VK_KHR_acceleration_structure[]
-  * ename:VK_GEOMETRY_TYPE_INSTANCES_KHR specifies a geometry type
-    consisting of acceleration structure instances.
-endif::VK_KHR_acceleration_structure[]
---
-
-[open,refpage='VkGeometryFlagBitsKHR',desc='Bitmask specifying additional parameters for a geometry',type='enums',alias='VkGeometryFlagBitsNV']
---
-:refpage: VkGeometryFlagBitsKHR
-
-Bits specifying additional parameters for geometries in acceleration
-structure builds, are:
-
-include::{generated}/api/enums/VkGeometryFlagBitsKHR.txt[]
-
-ifdef::VK_NV_ray_tracing[]
-or the equivalent
-
-include::{generated}/api/enums/VkGeometryFlagBitsNV.txt[]
-endif::VK_NV_ray_tracing[]
-
-  * ename:VK_GEOMETRY_OPAQUE_BIT_KHR indicates that this geometry does not
-    invoke the any-hit shaders even if present in a hit group.
-  * ename:VK_GEOMETRY_NO_DUPLICATE_ANY_HIT_INVOCATION_BIT_KHR indicates that
-    the implementation must: only call the any-hit shader a single time for
-    each primitive in this geometry.
-    If this bit is absent an implementation may: invoke the any-hit shader
-    more than once for this geometry.
---
-
-[open,refpage='VkGeometryFlagsKHR',desc='Bitmask of VkGeometryFlagBitsKHR',type='flags',alias='VkGeometryFlagsNV']
---
-:refpage: VkGeometryFlagsKHR
-
-include::{generated}/api/flags/VkGeometryFlagsKHR.txt[]
-
-ifdef::VK_NV_ray_tracing[]
-or the equivalent
-
-include::{generated}/api/flags/VkGeometryFlagsNV.txt[]
-endif::VK_NV_ray_tracing[]
-
-tname:VkGeometryFlagsKHR is a bitmask type for setting a mask of zero or
-more elink:VkGeometryFlagBitsKHR.
---
-
-ifdef::VK_NV_ray_tracing[]
-[open,refpage='VkGeometryDataNV',desc='Structure specifying geometry in a bottom-level acceleration structure',type='structs']
---
-:refpage: VkGeometryDataNV
-
-The sname:VkGeometryDataNV structure specifes geometry in a bottom-level
-acceleration structure and is defined as:
-
-include::{generated}/api/structs/VkGeometryDataNV.txt[]
-
-  * pname:triangles contains triangle data if
-    slink:VkGeometryNV::pname:geometryType is
-    ename:VK_GEOMETRY_TYPE_TRIANGLES_NV.
-  * pname:aabbs contains axis-aligned bounding box data if
-    slink:VkGeometryNV::pname:geometryType is
-    ename:VK_GEOMETRY_TYPE_AABBS_NV.
-
-include::{generated}/validity/structs/VkGeometryDataNV.txt[]
---
-
-[open,refpage='VkGeometryTrianglesNV',desc='Structure specifying a triangle geometry in a bottom-level acceleration structure',type='structs']
---
-:refpage: VkGeometryTrianglesNV
-
-The sname:VkGeometryTrianglesNV structure specifies triangle geometry in a
-bottom-level acceleration structure and is defined as:
-
-include::{generated}/api/structs/VkGeometryTrianglesNV.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:vertexData is the buffer containing vertex data for this geometry.
-  * pname:vertexOffset is the offset in bytes within pname:vertexData
-    containing vertex data for this geometry.
-  * pname:vertexCount is the number of valid vertices.
-  * pname:vertexStride is the stride in bytes between each vertex.
-  * pname:vertexFormat is a elink:VkFormat describing the format of each
-    vertex element.
-  * pname:indexData is the buffer containing index data for this geometry.
-  * pname:indexOffset is the offset in bytes within pname:indexData
-    containing index data for this geometry.
-  * pname:indexCount is the number of indices to include in this geometry.
-  * pname:indexType is a elink:VkIndexType describing the format of each
-    index.
-  * pname:transformData is an optional buffer containing an
-    slink:VkTransformMatrixNV structure defining a transformation to be
-    applied to this geometry.
-  * pname:transformOffset is the offset in bytes in pname:transformData of
-    the transform information described above.
-
-If pname:indexType is ename:VK_INDEX_TYPE_NONE_NV, then this structure
-describes a set of triangles determined by pname:vertexCount.
-Otherwise, this structure describes a set of indexed triangles determined by
-pname:indexCount.
-
-.Valid Usage
-****
-  * [[VUID-VkGeometryTrianglesNV-vertexOffset-02428]]
-    pname:vertexOffset must: be less than the size of pname:vertexData
-  * [[VUID-VkGeometryTrianglesNV-vertexOffset-02429]]
-    pname:vertexOffset must: be a multiple of the component size of
-    pname:vertexFormat
-  * [[VUID-VkGeometryTrianglesNV-vertexFormat-02430]]
-    pname:vertexFormat must: be one of ename:VK_FORMAT_R32G32B32_SFLOAT,
-    ename:VK_FORMAT_R32G32_SFLOAT, ename:VK_FORMAT_R16G16B16_SFLOAT,
-    ename:VK_FORMAT_R16G16_SFLOAT, ename:VK_FORMAT_R16G16_SNORM, or
-    ename:VK_FORMAT_R16G16B16_SNORM
-  * [[VUID-VkGeometryTrianglesNV-vertexStride-03818]]
-    pname:vertexStride must: be less than or equal to [eq]#2^32^-1#
-  * [[VUID-VkGeometryTrianglesNV-indexOffset-02431]]
-    pname:indexOffset must: be less than the size of pname:indexData
-  * [[VUID-VkGeometryTrianglesNV-indexOffset-02432]]
-    pname:indexOffset must: be a multiple of the element size of
-    pname:indexType
-  * [[VUID-VkGeometryTrianglesNV-indexType-02433]]
-    pname:indexType must: be ename:VK_INDEX_TYPE_UINT16,
-    ename:VK_INDEX_TYPE_UINT32, or ename:VK_INDEX_TYPE_NONE_NV
-  * [[VUID-VkGeometryTrianglesNV-indexData-02434]]
-    pname:indexData must: be dlink:VK_NULL_HANDLE if pname:indexType is
-    ename:VK_INDEX_TYPE_NONE_NV
-  * [[VUID-VkGeometryTrianglesNV-indexData-02435]]
-    pname:indexData must: be a valid sname:VkBuffer handle if
-    pname:indexType is not ename:VK_INDEX_TYPE_NONE_NV
-  * [[VUID-VkGeometryTrianglesNV-indexCount-02436]]
-    pname:indexCount must: be `0` if pname:indexType is
-    ename:VK_INDEX_TYPE_NONE_NV
-  * [[VUID-VkGeometryTrianglesNV-transformOffset-02437]]
-    pname:transformOffset must: be less than the size of pname:transformData
-  * [[VUID-VkGeometryTrianglesNV-transformOffset-02438]]
-    pname:transformOffset must: be a multiple of `16`
-****
-
-include::{generated}/validity/structs/VkGeometryTrianglesNV.txt[]
---
-
-[open,refpage='VkGeometryAABBNV',desc='Structure specifying axis-aligned bounding box geometry in a bottom-level acceleration structure',type='structs']
---
-:refpage: VkGeometryAABBNV
-
-The sname:VkGeometryAABBNV structure specifies axis-aligned bounding box
-geometry in a bottom-level acceleration structure, and is defined as:
-
-include::{generated}/api/structs/VkGeometryAABBNV.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:aabbData is the buffer containing axis-aligned bounding box data.
-  * pname:numAABBs is the number of AABBs in this geometry.
-  * pname:stride is the stride in bytes between AABBs in pname:aabbData.
-  * pname:offset is the offset in bytes of the first AABB in pname:aabbData.
-
-The AABB data in memory is six 32-bit floats consisting of the minimum x, y,
-and z values followed by the maximum x, y, and z values.
-
-.Valid Usage
-****
-  * [[VUID-VkGeometryAABBNV-offset-02439]]
-    pname:offset must: be less than the size of pname:aabbData
-  * [[VUID-VkGeometryAABBNV-offset-02440]]
-    pname:offset must: be a multiple of `8`
-  * [[VUID-VkGeometryAABBNV-stride-02441]]
-    pname:stride must: be a multiple of `8`
-****
-
-include::{generated}/validity/structs/VkGeometryAABBNV.txt[]
---
-endif::VK_NV_ray_tracing[]
-
-[open,refpage='vkDestroyAccelerationStructureKHR',desc='Destroy an acceleration structure object',type='protos']
---
-:refpage: vkDestroyAccelerationStructureKHR
-
-To destroy an acceleration structure, call:
-
-ifdef::VK_KHR_acceleration_structure[]
-include::{generated}/api/protos/vkDestroyAccelerationStructureKHR.txt[]
-endif::VK_KHR_acceleration_structure[]
-
-  * pname:device is the logical device that destroys the acceleration
-    structure.
-  * pname:accelerationStructure is the acceleration structure to destroy.
-  * pname:pAllocator controls host memory allocation as described in the
-    <<memory-allocation, Memory Allocation>> chapter.
-
-.Valid Usage
-****
-  * [[VUID-vkDestroyAccelerationStructureKHR-accelerationStructure-02442]]
-    All submitted commands that refer to pname:accelerationStructure must:
-    have completed execution
-  * [[VUID-vkDestroyAccelerationStructureKHR-accelerationStructure-02443]]
-    If sname:VkAllocationCallbacks were provided when
-    pname:accelerationStructure was created, a compatible set of callbacks
-    must: be provided here
-  * [[VUID-vkDestroyAccelerationStructureKHR-accelerationStructure-02444]]
-    If no sname:VkAllocationCallbacks were provided when
-    pname:accelerationStructure was created, pname:pAllocator must: be
-    `NULL`
-****
-
-include::{generated}/validity/protos/vkDestroyAccelerationStructureKHR.txt[]
---
-
-ifdef::VK_NV_ray_tracing[]
-[open,refpage='vkDestroyAccelerationStructureNV',desc='Destroy an acceleration structure object',type='protos']
---
-:refpage: vkDestroyAccelerationStructureNV
-
-To destroy an acceleration structure, call:
-
-include::{generated}/api/protos/vkDestroyAccelerationStructureNV.txt[]
-
-  * pname:device is the logical device that destroys the buffer.
-  * pname:accelerationStructure is the acceleration structure to destroy.
-  * pname:pAllocator controls host memory allocation as described in the
-    <<memory-allocation, Memory Allocation>> chapter.
-
-.Valid Usage
-****
-  * [[VUID-vkDestroyAccelerationStructureNV-accelerationStructure-03752]]
-    All submitted commands that refer to pname:accelerationStructure must:
-    have completed execution
-  * [[VUID-vkDestroyAccelerationStructureNV-accelerationStructure-03753]]
-    If sname:VkAllocationCallbacks were provided when
-    pname:accelerationStructure was created, a compatible set of callbacks
-    must: be provided here
-  * [[VUID-vkDestroyAccelerationStructureNV-accelerationStructure-03754]]
-    If no sname:VkAllocationCallbacks were provided when
-    pname:accelerationStructure was created, pname:pAllocator must: be
-    `NULL`
-****
-
-include::{generated}/validity/protos/vkDestroyAccelerationStructureNV.txt[]
---
-
-[open,refpage='vkGetAccelerationStructureMemoryRequirementsNV',desc='Get acceleration structure memory requirements',type='protos']
---
-:refpage: vkGetAccelerationStructureMemoryRequirementsNV
-
-An acceleration structure has memory requirements for the structure object
-itself, scratch space for the build, and scratch space for the update.
-
-Scratch space is allocated as a sname:VkBuffer, so for
-ename:VK_ACCELERATION_STRUCTURE_MEMORY_REQUIREMENTS_TYPE_BUILD_SCRATCH_NV
-and
-ename:VK_ACCELERATION_STRUCTURE_MEMORY_REQUIREMENTS_TYPE_UPDATE_SCRATCH_NV
-the pname:pMemoryRequirements->alignment and
-pname:pMemoryRequirements->memoryTypeBits values returned by this call must:
-be filled with zero, and should: be ignored by the application.
-
-To query the memory requirements, call:
-
-include::{generated}/api/protos/vkGetAccelerationStructureMemoryRequirementsNV.txt[]
-
-  * pname:device is the logical device on which the acceleration structure
-    was created.
-  * pname:pInfo is a pointer to a
-    slink:VkAccelerationStructureMemoryRequirementsInfoNV structure
-    specifying the acceleration structure to get memory requirements for.
-  * pname:pMemoryRequirements is a pointer to a
-    slink:VkMemoryRequirements2KHR structure in which the requested
-    acceleration structure memory requirements are returned.
-
-include::{generated}/validity/protos/vkGetAccelerationStructureMemoryRequirementsNV.txt[]
---
-
-[open,refpage='VkAccelerationStructureMemoryRequirementsInfoNV',desc='Structure specifying acceleration to query for memory requirements',type='structs']
---
-:refpage: VkAccelerationStructureMemoryRequirementsInfoNV
-
-The sname:VkAccelerationStructureMemoryRequirementsInfoNV structure is
-defined as:
-
-include::{generated}/api/structs/VkAccelerationStructureMemoryRequirementsInfoNV.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:type selects the type of memory requirement being queried.
-    ename:VK_ACCELERATION_STRUCTURE_MEMORY_REQUIREMENTS_TYPE_OBJECT_NV
-    returns the memory requirements for the object itself.
-    ename:VK_ACCELERATION_STRUCTURE_MEMORY_REQUIREMENTS_TYPE_BUILD_SCRATCH_NV
-    returns the memory requirements for the scratch memory when doing a
-    build.
-    ename:VK_ACCELERATION_STRUCTURE_MEMORY_REQUIREMENTS_TYPE_UPDATE_SCRATCH_NV
-    returns the memory requirements for the scratch memory when doing an
-    update.
-  * pname:accelerationStructure is the acceleration structure to be queried
-    for memory requirements.
-
-include::{generated}/validity/structs/VkAccelerationStructureMemoryRequirementsInfoNV.txt[]
---
-
-[open,refpage='VkAccelerationStructureMemoryRequirementsTypeNV',desc='Acceleration structure memory requirement type',type='enums']
---
-:refpage: VkAccelerationStructureMemoryRequirementsTypeNV
-
-Possible values of pname:type in
-sname:VkAccelerationStructureMemoryRequirementsInfoNV are:,
-
-include::{generated}/api/enums/VkAccelerationStructureMemoryRequirementsTypeNV.txt[]
-
-  * ename:VK_ACCELERATION_STRUCTURE_MEMORY_REQUIREMENTS_TYPE_OBJECT_NV
-    requests the memory requirement for the sname:VkAccelerationStructureNV
-    backing store.
-  * ename:VK_ACCELERATION_STRUCTURE_MEMORY_REQUIREMENTS_TYPE_BUILD_SCRATCH_NV
-    requests the memory requirement for scratch space during the initial
-    build.
-  * ename:VK_ACCELERATION_STRUCTURE_MEMORY_REQUIREMENTS_TYPE_UPDATE_SCRATCH_NV
-    requests the memory requirement for scratch space during an update.
---
-endif::VK_NV_ray_tracing[]
-
-ifdef::VK_KHR_acceleration_structure[]
-[open,refpage='VkAccelerationStructureBuildTypeKHR',desc='Acceleration structure build type',type='enums']
---
-:refpage: VkAccelerationStructureBuildTypeKHR
-
-Possible values of pname:buildType in
-flink:vkGetAccelerationStructureBuildSizesKHR are:
-
-include::{generated}/api/enums/VkAccelerationStructureBuildTypeKHR.txt[]
-
-  * ename:VK_ACCELERATION_STRUCTURE_BUILD_TYPE_HOST_KHR requests the memory
-    requirement for operations performed by the host.
-  * ename:VK_ACCELERATION_STRUCTURE_BUILD_TYPE_DEVICE_KHR requests the
-    memory requirement for operations performed by the device.
-  * ename:VK_ACCELERATION_STRUCTURE_BUILD_TYPE_HOST_OR_DEVICE_KHR requests
-    the memory requirement for operations performed by either the host, or
-    the device.
---
-endif::VK_KHR_acceleration_structure[]
-
-ifdef::VK_NV_ray_tracing[]
-[open,refpage='vkBindAccelerationStructureMemoryNV',desc='Bind acceleration structure memory',type='protos']
---
-:refpage: vkBindAccelerationStructureMemoryNV
-
-To attach memory to one or more acceleration structures at a time, call:
-
-include::{generated}/api/protos/vkBindAccelerationStructureMemoryNV.txt[]
-
-  * pname:device is the logical device that owns the acceleration structures
-    and memory.
-  * pname:bindInfoCount is the number of elements in pname:pBindInfos.
-  * pname:pBindInfos is a pointer to an array of
-    slink:VkBindAccelerationStructureMemoryInfoNV structures describing
-    acceleration structures and memory to bind.
-
-include::{generated}/validity/protos/vkBindAccelerationStructureMemoryNV.txt[]
---
-
-[open,refpage='VkBindAccelerationStructureMemoryInfoNV',desc='Structure specifying acceleration structure memory binding',type='structs']
---
-:refpage: VkBindAccelerationStructureMemoryInfoNV
-
-The sname:VkBindAccelerationStructureMemoryInfoNV structure is defined as:
-
-include::{generated}/api/structs/VkBindAccelerationStructureMemoryInfoNV.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:accelerationStructure is the acceleration structure to be attached
-    to memory.
-  * pname:memory is a sname:VkDeviceMemory object describing the device
-    memory to attach.
-  * pname:memoryOffset is the start offset of the region of memory that is
-    to be bound to the acceleration structure.
-    The number of bytes returned in the
-    slink:VkMemoryRequirements::pname:size member in pname:memory, starting
-    from pname:memoryOffset bytes, will be bound to the specified
-    acceleration structure.
-  * pname:deviceIndexCount is the number of elements in
-    pname:pDeviceIndices.
-  * pname:pDeviceIndices is a pointer to an array of device indices.
-
-.Valid Usage
-****
-  * [[VUID-VkBindAccelerationStructureMemoryInfoNV-accelerationStructure-03620]]
-    pname:accelerationStructure must: not already be backed by a memory
-    object
-  * [[VUID-VkBindAccelerationStructureMemoryInfoNV-memoryOffset-03621]]
-    pname:memoryOffset must: be less than the size of pname:memory
-  * [[VUID-VkBindAccelerationStructureMemoryInfoNV-memory-03622]]
-    pname:memory must: have been allocated using one of the memory types
-    allowed in the pname:memoryTypeBits member of the
-    slink:VkMemoryRequirements structure returned from a call to
-    flink:vkGetAccelerationStructureMemoryRequirementsNV with
-    pname:accelerationStructure and pname:type of
-    ename:VK_ACCELERATION_STRUCTURE_MEMORY_REQUIREMENTS_TYPE_OBJECT_NV
-  * [[VUID-VkBindAccelerationStructureMemoryInfoNV-memoryOffset-03623]]
-    pname:memoryOffset must: be an integer multiple of the pname:alignment
-    member of the slink:VkMemoryRequirements structure returned from a call
-    to flink:vkGetAccelerationStructureMemoryRequirementsNV with
-    pname:accelerationStructure and pname:type of
-    ename:VK_ACCELERATION_STRUCTURE_MEMORY_REQUIREMENTS_TYPE_OBJECT_NV
-  * [[VUID-VkBindAccelerationStructureMemoryInfoNV-size-03624]]
-    The pname:size member of the sname:VkMemoryRequirements structure
-    returned from a call to
-    flink:vkGetAccelerationStructureMemoryRequirementsNV with
-    pname:accelerationStructure and pname:type of
-    ename:VK_ACCELERATION_STRUCTURE_MEMORY_REQUIREMENTS_TYPE_OBJECT_NV must:
-    be less than or equal to the size of pname:memory minus
-    pname:memoryOffset
-****
-
-include::{generated}/validity/structs/VkBindAccelerationStructureMemoryInfoNV.txt[]
---
-
-[open,refpage='vkGetAccelerationStructureHandleNV',desc='Get opaque acceleration structure handle',type='protos']
---
-:refpage: vkGetAccelerationStructureHandleNV
-
-To allow constructing geometry instances with device code if desired, we
-need to be able to query a opaque handle for an acceleration structure.
-This handle is a value of 8 bytes.
-To get this handle, call:
-
-include::{generated}/api/protos/vkGetAccelerationStructureHandleNV.txt[]
-
-  * pname:device is the logical device that owns the acceleration
-    structures.
-  * pname:accelerationStructure is the acceleration structure.
-  * pname:dataSize is the size in bytes of the buffer pointed to by
-    pname:pData.
-  * pname:pData is a pointer to a user-allocated buffer where the results
-    will be written.
-
-.Valid Usage
-****
-  * [[VUID-vkGetAccelerationStructureHandleNV-dataSize-02240]]
-    pname:dataSize must: be large enough to contain the result of the query,
-    as described above
-  * [[VUID-vkGetAccelerationStructureHandleNV-accelerationStructure-02787]]
-    pname:accelerationStructure must: be bound completely and contiguously
-    to a single sname:VkDeviceMemory object via
-    flink:vkBindAccelerationStructureMemoryNV
-****
-
-include::{generated}/validity/protos/vkGetAccelerationStructureHandleNV.txt[]
---
-endif::VK_NV_ray_tracing[]
-
-ifdef::VK_KHR_acceleration_structure[]
-[open,refpage='vkGetAccelerationStructureDeviceAddressKHR',desc='Query an address of a acceleration structure',type='protos']
---
-:refpage: vkGetAccelerationStructureDeviceAddressKHR
-
-To query the 64-bit device address for an acceleration structure, call:
-
-include::{generated}/api/protos/vkGetAccelerationStructureDeviceAddressKHR.txt[]
-
-  * pname:device is the logical device that the acceleration structure was
-    created on.
-  * pname:pInfo is a pointer to a
-    slink:VkAccelerationStructureDeviceAddressInfoKHR structure specifying
-    the acceleration structure to retrieve an address for.
-
-The 64-bit return value is an address of the acceleration structure, which
-can be used for device and shader operations that involve acceleration
-structures, such as
-ifdef::VK_KHR_ray_tracing_pipeline,VK_KHR_ray_query[]
-ray traversal and
-endif::VK_KHR_ray_tracing_pipeline,VK_KHR_ray_query[]
-acceleration structure building.
-
-If the acceleration structure was created with a non-zero value of
-slink:VkAccelerationStructureCreateInfoKHR::pname:deviceAddress, the return
-value will be the same address.
-
-If the acceleration structure was created with a pname:type of
-ename:VK_ACCELERATION_STRUCTURE_TYPE_GENERIC_KHR, the returned address must:
-be consistent with the relative offset to other acceleration structures with
-pname:type ename:VK_ACCELERATION_STRUCTURE_TYPE_GENERIC_KHR allocated with
-the same slink:VkBuffer.
-That is, the difference in returned addresses between the two must: be the
-same as the difference in offsets provided at acceleration structure
-creation.
-
-[NOTE]
-.Note
-====
-The acceleration structure device address may: be different from the buffer
-device address corresponding to the acceleration structure's start offset in
-its storage buffer for acceleration structure types other than
-ename:VK_ACCELERATION_STRUCTURE_TYPE_GENERIC_KHR.
-====
-
-.Valid Usage
-****
-  * [[VUID-vkGetAccelerationStructureDeviceAddressKHR-device-03504]]
-    If pname:device was created with multiple physical devices, then the
-    <<features-bufferDeviceAddressMultiDevice,bufferDeviceAddressMultiDevice>>
-    feature must: be enabled
-****
-
-include::{generated}/validity/protos/vkGetAccelerationStructureDeviceAddressKHR.txt[]
---
-
-[open,refpage='VkAccelerationStructureDeviceAddressInfoKHR',desc='Structure specifying the acceleration structure to query an address for',type='structs']
---
-:refpage: VkAccelerationStructureDeviceAddressInfoKHR
-
-The sname:VkAccelerationStructureDeviceAddressInfoKHR structure is defined
-as:
-
-include::{generated}/api/structs/VkAccelerationStructureDeviceAddressInfoKHR.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:accelerationStructure specifies the acceleration structure whose
-    address is being queried.
-
-include::{generated}/validity/structs/VkAccelerationStructureDeviceAddressInfoKHR.txt[]
---
-endif::VK_KHR_acceleration_structure[]
-endif::VK_NV_ray_tracing,VK_KHR_acceleration_structure[]
-
-
-[[resources-association]]
-== Resource Memory Association
-
-Resources are initially created as _virtual allocations_ with no backing
-memory.
-Device memory is allocated separately (see <<memory-device>>) and then
-associated with the resource.
-This association is done differently for sparse and non-sparse resources.
-
-Resources created with any of the sparse creation flags are considered
-sparse resources.
-Resources created without these flags are non-sparse.
-The details on resource memory association for sparse resources is described
-in <<sparsememory>>.
-
-Non-sparse resources must: be bound completely and contiguously to a single
-sname:VkDeviceMemory object before the resource is passed as a parameter to
-any of the following operations:
-
-  * creating image or buffer views
-  * updating descriptor sets
-  * recording commands in a command buffer
-
-Once bound, the memory binding is immutable for the lifetime of the
-resource.
-
-ifdef::VK_VERSION_1_1,VK_KHR_device_group[]
-
-In a logical device representing more than one physical device, buffer and
-image resources exist on all physical devices but can: be bound to memory
-differently on each.
-Each such replicated resource is an _instance_ of the resource.
-For sparse resources, each instance can: be bound to memory arbitrarily
-differently.
-For non-sparse resources, each instance can: either be bound to the local or
-a peer instance of the memory, or for images can: be bound to rectangular
-regions from the local and/or peer instances.
-When a resource is used in a descriptor set, each physical device interprets
-the descriptor according to its own instance's binding to memory.
-
-[NOTE]
-.Note
-====
-There are no new copy commands to transfer data between physical devices.
-Instead, an application can: create a resource with a peer mapping and use
-it as the source or destination of a transfer command executed by a single
-physical device to copy the data from one physical device to another.
-====
-
-endif::VK_VERSION_1_1,VK_KHR_device_group[]
-
-[open,refpage='vkGetBufferMemoryRequirements',desc='Returns the memory requirements for specified Vulkan object',type='protos']
---
-To determine the memory requirements for a buffer resource, call:
-
-include::{generated}/api/protos/vkGetBufferMemoryRequirements.txt[]
-
-  * pname:device is the logical device that owns the buffer.
-  * pname:buffer is the buffer to query.
-  * pname:pMemoryRequirements is a pointer to a slink:VkMemoryRequirements
-    structure in which the memory requirements of the buffer object are
-    returned.
-
-include::{generated}/validity/protos/vkGetBufferMemoryRequirements.txt[]
---
-
-[open,refpage='vkGetImageMemoryRequirements',desc='Returns the memory requirements for specified Vulkan object',type='protos']
---
-ifndef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
-To determine the memory requirements for an image resource, call:
-endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
-ifdef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
-To determine the memory requirements for an image resource which is not
-created with the ename:VK_IMAGE_CREATE_DISJOINT_BIT flag set, call:
-endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
-
-include::{generated}/api/protos/vkGetImageMemoryRequirements.txt[]
-
-  * pname:device is the logical device that owns the image.
-  * pname:image is the image to query.
-  * pname:pMemoryRequirements is a pointer to a slink:VkMemoryRequirements
-    structure in which the memory requirements of the image object are
-    returned.
-
-.Valid Usage
-****
-ifdef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
-  * [[VUID-vkGetImageMemoryRequirements-image-01588]]
-    pname:image must: not have been created with the
-    ename:VK_IMAGE_CREATE_DISJOINT_BIT flag set
-endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
-ifdef::VK_ANDROID_external_memory_android_hardware_buffer[]
-  * [[VUID-vkGetImageMemoryRequirements-image-04004]]
-    If pname:image was created with the
-    ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_ANDROID_HARDWARE_BUFFER_BIT_ANDROID
-    external memory handle type, then pname:image must: be bound to memory
-endif::VK_ANDROID_external_memory_android_hardware_buffer[]
-****
-
-include::{generated}/validity/protos/vkGetImageMemoryRequirements.txt[]
---
-
-[open,refpage='VkMemoryRequirements',desc='Structure specifying memory requirements',type='structs']
---
-The sname:VkMemoryRequirements structure is defined as:
-
-include::{generated}/api/structs/VkMemoryRequirements.txt[]
-
-  * pname:size is the size, in bytes, of the memory allocation required: for
-    the resource.
-  * pname:alignment is the alignment, in bytes, of the offset within the
-    allocation required: for the resource.
-  * pname:memoryTypeBits is a bitmask and contains one bit set for every
-    supported memory type for the resource.
-    Bit `i` is set if and only if the memory type `i` in the
-    sname:VkPhysicalDeviceMemoryProperties structure for the physical device
-    is supported for the resource.
-
-include::{generated}/validity/structs/VkMemoryRequirements.txt[]
---
-
-ifdef::VK_ANDROID_external_memory_android_hardware_buffer[]
-The precise size of images that will be bound to external Android hardware
-buffer memory is unknown until the memory has been imported or allocated, so
-applications must: not call flink:vkGetImageMemoryRequirements or
-flink:vkGetImageMemoryRequirements2 with such an slink:VkImage before it has
-been bound to memory.
-ifdef::VK_KHR_maintenance4[]
-For this reason, applications also must: not call
-flink:vkGetDeviceImageMemoryRequirementsKHR with a slink:VkImageCreateInfo
-describing an external Android hardware buffer.
-endif::VK_KHR_maintenance4[]
-When importing Android hardware buffer memory, the pname:allocationSize can:
-be determined by calling flink:vkGetAndroidHardwareBufferPropertiesANDROID.
-When allocating new memory for a slink:VkImage that can: be exported to an
-Android hardware buffer, the memory's pname:allocationSize must: be zero;
-the actual size will be determined by the dedicated image's parameters.
-After the memory has been allocated, the amount of space allocated from the
-memory's heap can: be obtained by getting the image's memory requirements or
-by calling flink:vkGetAndroidHardwareBufferPropertiesANDROID with the
-Android hardware buffer exported from the memory.
-
-When allocating new memory for a slink:VkBuffer that can: be exported to an
-Android hardware buffer an application may: still call
-flink:vkGetBufferMemoryRequirements or flink:vkGetBufferMemoryRequirements2
-with slink:VkBuffer before it has been bound to memory.
-endif::VK_ANDROID_external_memory_android_hardware_buffer[]
-
-ifdef::VK_KHR_external_memory_win32[]
-If the resource being queried was created with the
-ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_BIT,
-ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_KMT_BIT, or
-ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_RESOURCE_BIT external memory
-handle type, the value of pname:size has no meaning and should: be ignored.
-endif::VK_KHR_external_memory_win32[]
-
-The implementation guarantees certain properties about the memory
-requirements returned by
-ifdef::VK_KHR_get_memory_requirements2[]
-flink:vkGetBufferMemoryRequirements2, flink:vkGetImageMemoryRequirements2,
-endif::VK_KHR_get_memory_requirements2[]
-ifdef::VK_KHR_maintenance4[]
-flink:vkGetDeviceBufferMemoryRequirementsKHR,
-flink:vkGetDeviceImageMemoryRequirementsKHR,
-endif::VK_KHR_maintenance4[]
-flink:vkGetBufferMemoryRequirements and flink:vkGetImageMemoryRequirements:
-
-  * The pname:memoryTypeBits member always contains at least one bit set.
-  * If pname:buffer is a sname:VkBuffer not created with the
-    ename:VK_BUFFER_CREATE_SPARSE_BINDING_BIT bit set, or if pname:image is
-    <<glossary-linear-resource,linear>> image, then the pname:memoryTypeBits
-    member always contains at least one bit set corresponding to a
-    sname:VkMemoryType with a pname:propertyFlags that has both the
-    ename:VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT bit and the
-    ename:VK_MEMORY_PROPERTY_HOST_COHERENT_BIT bit set.
-    In other words, mappable coherent memory can: always be attached to
-    these objects.
-ifdef::VK_VERSION_1_1,VK_KHR_external_memory[]
-  * If pname:buffer was created with
-    slink:VkExternalMemoryBufferCreateInfo::pname:handleTypes set to `0` or
-    pname:image was created with
-    slink:VkExternalMemoryImageCreateInfo::pname:handleTypes set to `0`, the
-endif::VK_VERSION_1_1,VK_KHR_external_memory[]
-ifndef::VK_VERSION_1_1,VK_KHR_external_memory[]
-  * The
-endif::VK_VERSION_1_1,VK_KHR_external_memory[]
-    pname:memoryTypeBits member always contains at least one bit set
-    corresponding to a sname:VkMemoryType with a pname:propertyFlags that
-    has the ename:VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT bit set.
-  * The pname:memoryTypeBits member is identical for all sname:VkBuffer
-    objects created with the same value for the pname:flags and pname:usage
-    members in the slink:VkBufferCreateInfo structure
-ifdef::VK_VERSION_1_1,VK_KHR_external_memory[]
-    and the pname:handleTypes member of the
-    slink:VkExternalMemoryBufferCreateInfo structure
-endif::VK_VERSION_1_1,VK_KHR_external_memory[]
-    passed to flink:vkCreateBuffer.
-    Further, if code:usage1 and code:usage2 of type tlink:VkBufferUsageFlags
-    are such that the bits set in code:usage2 are a subset of the bits set
-    in code:usage1, and they have the same
-ifdef::VK_VERSION_1_1,VK_KHR_external_memory[]
-    pname:flags and
-    slink:VkExternalMemoryBufferCreateInfo::pname:handleTypes,
-endif::VK_VERSION_1_1,VK_KHR_external_memory[]
-ifndef::VK_VERSION_1_1,VK_KHR_external_memory[]
-    pname:flags,
-endif::VK_VERSION_1_1,VK_KHR_external_memory[]
-    then the bits set in pname:memoryTypeBits returned for code:usage1 must:
-    be a subset of the bits set in pname:memoryTypeBits returned for
-    code:usage2, for all values of pname:flags.
-  * The pname:alignment member is a power of two.
-  * The pname:alignment member is identical for all sname:VkBuffer objects
-    created with the same combination of values for the pname:usage and
-    pname:flags members in the slink:VkBufferCreateInfo structure passed to
-    flink:vkCreateBuffer.
-ifdef::VK_KHR_maintenance4[]
-  * If the <<features-maintenance4, pname:maintenance4>> feature is enabled,
-    then the pname:alignment member is identical for all sname:VkImage
-    objects created with the same combination of values for the pname:flags,
-    pname:imageType, pname:format, pname:extent, pname:mipLevels,
-    pname:arrayLayers, pname:samples, pname:tiling and pname:usage members
-    in the slink:VkImageCreateInfo structure passed to flink:vkCreateImage.
-endif::VK_KHR_maintenance4[]
-  * The pname:alignment member satisfies the buffer descriptor offset
-    alignment requirements associated with the sname:VkBuffer's pname:usage:
-  ** If pname:usage included ename:VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT
-     or ename:VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT, pname:alignment
-     must: be an integer multiple of
-     sname:VkPhysicalDeviceLimits::pname:minTexelBufferOffsetAlignment.
-  ** If pname:usage included ename:VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT,
-     pname:alignment must: be an integer multiple of
-     sname:VkPhysicalDeviceLimits::pname:minUniformBufferOffsetAlignment.
-  ** If pname:usage included ename:VK_BUFFER_USAGE_STORAGE_BUFFER_BIT,
-     pname:alignment must: be an integer multiple of
-     sname:VkPhysicalDeviceLimits::pname:minStorageBufferOffsetAlignment.
-  * For images created with a color format, the pname:memoryTypeBits member
-    is identical for all sname:VkImage objects created with the same
-    combination of values for the pname:tiling member, the
-    ename:VK_IMAGE_CREATE_SPARSE_BINDING_BIT bit of the pname:flags member,
-ifdef::VK_VERSION_1_1,VK_KHR_device_group[]
-    the ename:VK_IMAGE_CREATE_SPLIT_INSTANCE_BIND_REGIONS_BIT bit of the
-    pname:flags member,
-endif::VK_VERSION_1_1,VK_KHR_device_group[]
-ifdef::VK_VERSION_1_1,VK_KHR_external_memory[]
-    pname:handleTypes member of slink:VkExternalMemoryImageCreateInfo,
-endif::VK_VERSION_1_1,VK_KHR_external_memory[]
-    and the ename:VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT of the pname:usage
-    member in the slink:VkImageCreateInfo structure passed to
-    flink:vkCreateImage.
-  * For images created with a depth/stencil format, the pname:memoryTypeBits
-    member is identical for all sname:VkImage objects created with the same
-    combination of values for the pname:format member, the pname:tiling
-    member, the ename:VK_IMAGE_CREATE_SPARSE_BINDING_BIT bit of the
-    pname:flags member,
-ifdef::VK_VERSION_1_1,VK_KHR_device_group[]
-    the ename:VK_IMAGE_CREATE_SPLIT_INSTANCE_BIND_REGIONS_BIT bit of the
-    pname:flags member,
-endif::VK_VERSION_1_1,VK_KHR_device_group[]
-ifdef::VK_VERSION_1_1,VK_KHR_external_memory[]
-    pname:handleTypes member of slink:VkExternalMemoryImageCreateInfo,
-endif::VK_VERSION_1_1,VK_KHR_external_memory[]
-    and the ename:VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT of the pname:usage
-    member in the slink:VkImageCreateInfo structure passed to
-    flink:vkCreateImage.
-  * If the memory requirements are for a sname:VkImage, the
-    pname:memoryTypeBits member must: not refer to a sname:VkMemoryType with
-    a pname:propertyFlags that has the
-    ename:VK_MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT bit set if the pname:image
-    did not have ename:VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT bit set in
-    the pname:usage member of the slink:VkImageCreateInfo structure passed
-    to flink:vkCreateImage.
-  * If the memory requirements are for a sname:VkBuffer, the
-    pname:memoryTypeBits member must: not refer to a sname:VkMemoryType with
-    a pname:propertyFlags that has the
-    ename:VK_MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT bit set.
-+
-[NOTE]
-.Note
-====
-The implication of this requirement is that lazily allocated memory is
-disallowed for buffers in all cases.
-====
-  * The pname:size member is identical for all sname:VkBuffer objects
-    created with the same combination of creation parameters specified in
-    slink:VkBufferCreateInfo and its pname:pNext chain.
-  * The pname:size member is identical for all sname:VkImage objects created
-    with the same combination of creation parameters specified in
-    slink:VkImageCreateInfo and its pname:pNext chain.
-+
-[NOTE]
-.Note
-====
-This, however, does not imply that they interpret the contents of the bound
-memory identically with each other.
-ifdef::VK_VERSION_1_1,VK_KHR_bind_memory2[]
-That additional guarantee, however, can: be explicitly requested using
-ename:VK_IMAGE_CREATE_ALIAS_BIT.
-endif::VK_VERSION_1_1,VK_KHR_bind_memory2[]
-====
-ifdef::VK_KHR_maintenance4[]
-  * If the <<features-maintenance4, pname:maintenance4>> feature is enabled,
-    these additional guarantees apply:
-  ** For a sname:VkBuffer, the pname:size memory requirement is never
-     greater than that of another sname:VkBuffer created with a greater or
-     equal pname:size specified in slink:VkBufferCreateInfo, all other
-     creation parameters being identical.
-  ** For a slink:VkImage, the pname:size memory requirement is never greater
-     than that of another slink:VkImage created with a greater or equal
-     value in each of pname:extent.width, pname:extent.height, and
-     pname:extent.depth; all other creation parameters being identical.
-  ** The memory requirements returned by
-     flink:vkGetDeviceBufferMemoryRequirementsKHR are identical to those
-     that would be returned by flink:vkGetBufferMemoryRequirements2 if it
-     were called with a sname:VkBuffer created with the same
-     slink:VkBufferCreateInfo values.
-  ** The memory requirements returned by
-     flink:vkGetDeviceImageMemoryRequirementsKHR are identical to those that
-     would be returned by flink:vkGetImageMemoryRequirements2 if it were
-     called with a sname:VkImage created with the same
-     slink:VkImageCreateInfo values.
-endif::VK_KHR_maintenance4[]
-
-ifdef::VK_VERSION_1_1,VK_KHR_get_memory_requirements2[]
-[open,refpage='vkGetBufferMemoryRequirements2',desc='Returns the memory requirements for specified Vulkan object',type='protos']
---
-To determine the memory requirements for a buffer resource, call:
-
-ifdef::VK_VERSION_1_1[]
-include::{generated}/api/protos/vkGetBufferMemoryRequirements2.txt[]
-endif::VK_VERSION_1_1[]
-
-ifdef::VK_VERSION_1_1+VK_KHR_get_memory_requirements2[or the equivalent command]
-
-ifdef::VK_KHR_get_memory_requirements2[]
-include::{generated}/api/protos/vkGetBufferMemoryRequirements2KHR.txt[]
-endif::VK_KHR_get_memory_requirements2[]
-
-  * pname:device is the logical device that owns the buffer.
-  * pname:pInfo is a pointer to a slink:VkBufferMemoryRequirementsInfo2
-    structure containing parameters required for the memory requirements
-    query.
-  * pname:pMemoryRequirements is a pointer to a slink:VkMemoryRequirements2
-    structure in which the memory requirements of the buffer object are
-    returned.
-
-include::{generated}/validity/protos/vkGetBufferMemoryRequirements2.txt[]
---
-
-ifdef::VK_KHR_maintenance4[]
-[open,refpage='vkGetDeviceBufferMemoryRequirementsKHR',desc='Returns the memory requirements for specified Vulkan object',type='protos']
---
-To determine the memory requirements for a buffer resource without creating
-an object, call:
-
-include::{generated}/api/protos/vkGetDeviceBufferMemoryRequirementsKHR.txt[]
-
-  * pname:device is the logical device intended to own the buffer.
-  * pname:pInfo is a pointer to a slink:VkDeviceBufferMemoryRequirementsKHR
-    structure containing parameters required for the memory requirements
-    query.
-  * pname:pMemoryRequirements is a pointer to a slink:VkMemoryRequirements2
-    structure in which the memory requirements of the buffer object are
-    returned.
-
-include::{generated}/validity/protos/vkGetDeviceBufferMemoryRequirementsKHR.txt[]
---
-endif::VK_KHR_maintenance4[]
-
-[open,refpage='VkBufferMemoryRequirementsInfo2',desc='(None)',type='structs']
---
-The sname:VkBufferMemoryRequirementsInfo2 structure is defined as:
-
-include::{generated}/api/structs/VkBufferMemoryRequirementsInfo2.txt[]
-
-ifdef::VK_KHR_get_memory_requirements2[]
-or the equivalent
-
-include::{generated}/api/structs/VkBufferMemoryRequirementsInfo2KHR.txt[]
-endif::VK_KHR_get_memory_requirements2[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:buffer is the buffer to query.
-
-include::{generated}/validity/structs/VkBufferMemoryRequirementsInfo2.txt[]
---
-
-ifdef::VK_KHR_maintenance4[]
-[open,refpage='VkDeviceBufferMemoryRequirementsKHR',desc='(None)',type='structs']
---
-The sname:VkDeviceBufferMemoryRequirementsKHR structure is defined as:
-
-include::{generated}/api/structs/VkDeviceBufferMemoryRequirementsKHR.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:pCreateInfo is a pointer to a slink:VkBufferCreateInfo structure
-    containing parameters affecting creation of the buffer to query.
-
-include::{generated}/validity/structs/VkDeviceBufferMemoryRequirementsKHR.txt[]
---
-endif::VK_KHR_maintenance4[]
-
-[open,refpage='vkGetImageMemoryRequirements2',desc='Returns the memory requirements for specified Vulkan object',type='protos']
---
-To determine the memory requirements for an image resource, call:
-
-ifdef::VK_VERSION_1_1[]
-include::{generated}/api/protos/vkGetImageMemoryRequirements2.txt[]
-endif::VK_VERSION_1_1[]
-
-ifdef::VK_VERSION_1_1+VK_KHR_get_memory_requirements2[or the equivalent command]
-
-ifdef::VK_KHR_get_memory_requirements2[]
-include::{generated}/api/protos/vkGetImageMemoryRequirements2KHR.txt[]
-endif::VK_KHR_get_memory_requirements2[]
-
-  * pname:device is the logical device that owns the image.
-  * pname:pInfo is a pointer to a slink:VkImageMemoryRequirementsInfo2
-    structure containing parameters required for the memory requirements
-    query.
-  * pname:pMemoryRequirements is a pointer to a slink:VkMemoryRequirements2
-    structure in which the memory requirements of the image object are
-    returned.
-
-include::{generated}/validity/protos/vkGetImageMemoryRequirements2.txt[]
---
-
-ifdef::VK_KHR_maintenance4[]
-[open,refpage='vkGetDeviceImageMemoryRequirementsKHR',desc='Returns the memory requirements for specified Vulkan object',type='protos']
---
-To determine the memory requirements for an image resource without creating
-an object, call:
-
-include::{generated}/api/protos/vkGetDeviceImageMemoryRequirementsKHR.txt[]
-
-  * pname:device is the logical device intended to own the image.
-  * pname:pInfo is a pointer to a slink:VkDeviceImageMemoryRequirementsKHR
-    structure containing parameters required for the memory requirements
-    query.
-  * pname:pMemoryRequirements is a pointer to a slink:VkMemoryRequirements2
-    structure in which the memory requirements of the image object are
-    returned.
-
-include::{generated}/validity/protos/vkGetDeviceImageMemoryRequirementsKHR.txt[]
---
-endif::VK_KHR_maintenance4[]
-
-[open,refpage='VkImageMemoryRequirementsInfo2',desc='(None)',type='structs']
---
-The sname:VkImageMemoryRequirementsInfo2 structure is defined as:
-
-include::{generated}/api/structs/VkImageMemoryRequirementsInfo2.txt[]
-
-ifdef::VK_KHR_get_memory_requirements2[]
-or the equivalent
-
-include::{generated}/api/structs/VkImageMemoryRequirementsInfo2KHR.txt[]
-endif::VK_KHR_get_memory_requirements2[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:image is the image to query.
-
-ifdef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
-
-.Valid Usage
-****
-  * [[VUID-VkImageMemoryRequirementsInfo2-image-01589]]
-    If pname:image was created with a _multi-planar_ format and the
-    ename:VK_IMAGE_CREATE_DISJOINT_BIT flag, there must: be a
-    slink:VkImagePlaneMemoryRequirementsInfo included in the pname:pNext
-    chain of the slink:VkImageMemoryRequirementsInfo2 structure
-ifdef::VK_EXT_image_drm_format_modifier[]
-  * [[VUID-VkImageMemoryRequirementsInfo2-image-02279]]
-    If pname:image was created with ename:VK_IMAGE_CREATE_DISJOINT_BIT and
-    with ename:VK_IMAGE_TILING_DRM_FORMAT_MODIFIER_EXT, then there must: be
-    a slink:VkImagePlaneMemoryRequirementsInfo included in the pname:pNext
-    chain of the slink:VkImageMemoryRequirementsInfo2 structure
-endif::VK_EXT_image_drm_format_modifier[]
-  * [[VUID-VkImageMemoryRequirementsInfo2-image-01590]]
-    If pname:image was not created with the
-    ename:VK_IMAGE_CREATE_DISJOINT_BIT flag, there must: not be a
-    slink:VkImagePlaneMemoryRequirementsInfo included in the pname:pNext
-    chain of the slink:VkImageMemoryRequirementsInfo2 structure
-ifndef::VK_EXT_image_drm_format_modifier[]
-  * [[VUID-VkImageMemoryRequirementsInfo2-image-01591]]
-    If pname:image was created with a single-plane format, there must: not
-    be a slink:VkImagePlaneMemoryRequirementsInfo included in the
-    pname:pNext chain of the slink:VkImageMemoryRequirementsInfo2 structure
-endif::VK_EXT_image_drm_format_modifier[]
-ifdef::VK_EXT_image_drm_format_modifier[]
-  * [[VUID-VkImageMemoryRequirementsInfo2-image-02280]]
-    If pname:image was created with a single-plane format and with any
-    pname:tiling other than ename:VK_IMAGE_TILING_DRM_FORMAT_MODIFIER_EXT,
-    then there must: not be a slink:VkImagePlaneMemoryRequirementsInfo
-    included in the pname:pNext chain of the
-    slink:VkImageMemoryRequirementsInfo2 structure
-endif::VK_EXT_image_drm_format_modifier[]
-ifdef::VK_ANDROID_external_memory_android_hardware_buffer[]
-  * [[VUID-VkImageMemoryRequirementsInfo2-image-01897]]
-    If pname:image was created with the
-    ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_ANDROID_HARDWARE_BUFFER_BIT_ANDROID
-    external memory handle type, then pname:image must: be bound to memory
-endif::VK_ANDROID_external_memory_android_hardware_buffer[]
-****
-
-endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
-
-include::{generated}/validity/structs/VkImageMemoryRequirementsInfo2.txt[]
---
-
-ifdef::VK_KHR_maintenance4[]
-[open,refpage='VkDeviceImageMemoryRequirementsKHR',desc='(None)',type='structs']
---
-The sname:VkDeviceImageMemoryRequirementsKHR structure is defined as:
-
-include::{generated}/api/structs/VkDeviceImageMemoryRequirementsKHR.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:pCreateInfo is a pointer to a slink:VkImageCreateInfo structure
-    containing parameters affecting creation of the image to query.
-  * pname:planeAspect is a elink:VkImageAspectFlagBits value specifying the
-    aspect corresponding to the image plane to query.
-    This parameter is ignored unless pname:pCreateInfo::pname:flags has
-    ename:VK_IMAGE_CREATE_DISJOINT_BIT
-ifdef::VK_EXT_image_drm_format_modifier[]
-    or ename:VK_IMAGE_TILING_DRM_FORMAT_MODIFIER_EXT
-endif::VK_EXT_image_drm_format_modifier[]
-    set.
-
-.Valid Usage
-****
-  * [[VUID-VkDeviceImageMemoryRequirementsKHR-pCreateInfo-06416]]
-    The pname:pCreateInfo::pname:pNext chain must: not contain a
-    slink:VkImageSwapchainCreateInfoKHR structure
-  * [[VUID-VkDeviceImageMemoryRequirementsKHR-pCreateInfo-06417]]
-    If pname:pCreateInfo::pname:flags has ename:VK_IMAGE_CREATE_DISJOINT_BIT
-    set then pname:planAspect must: not be zero
-ifdef::VK_EXT_image_drm_format_modifier[]
-  * [[VUID-VkDeviceImageMemoryRequirementsKHR-pCreateInfo-06418]]
-    If pname:pCreateInfo::pname:flags has
-    ename:VK_IMAGE_TILING_DRM_FORMAT_MODIFIER_EXT set then pname:planAspect
-    must: not be zero
-endif::VK_EXT_image_drm_format_modifier[]
-  * [[VUID-VkDeviceImageMemoryRequirementsKHR-pCreateInfo-06419]]
-    If pname:pCreateInfo::pname:flags has ename:VK_IMAGE_CREATE_DISJOINT_BIT
-    set and if the pname:pCreateInfo::pname:tiling is
-    ename:VK_IMAGE_TILING_LINEAR or ename:VK_IMAGE_TILING_OPTIMAL, then
-    pname:planeAspect must: be a single valid _format plane_ for the image
-    (that is, for a two-plane image pname:planeAspect must: be
-    ename:VK_IMAGE_ASPECT_PLANE_0_BIT or ename:VK_IMAGE_ASPECT_PLANE_1_BIT,
-    and for a three-plane image pname:planeAspect must: be
-    ename:VK_IMAGE_ASPECT_PLANE_0_BIT, ename:VK_IMAGE_ASPECT_PLANE_1_BIT or
-    ename:VK_IMAGE_ASPECT_PLANE_2_BIT)
-ifdef::VK_EXT_image_drm_format_modifier[]
-  * [[VUID-VkDeviceImageMemoryRequirementsKHR-pCreateInfo-06420]]
-    If pname:pCreateInfo::pname:flags has
-    ename:VK_IMAGE_TILING_DRM_FORMAT_MODIFIER_EXT set and the
-    pname:pCreateInfo::pname:tiling is
-    ename:VK_IMAGE_TILING_DRM_FORMAT_MODIFIER_EXT, then pname:planeAspect
-    must: be a single valid _memory plane_ for the image (that is,
-    pname:aspectMask must: specify a plane index that is less than the
-    slink:VkDrmFormatModifierPropertiesEXT::pname:drmFormatModifierPlaneCount
-    associated with the image's pname:format and
-    slink:VkImageDrmFormatModifierPropertiesEXT::pname:drmFormatModifier)
-endif::VK_EXT_image_drm_format_modifier[]
-****
-
-include::{generated}/validity/structs/VkDeviceImageMemoryRequirementsKHR.txt[]
---
-endif::VK_KHR_maintenance4[]
-
-ifdef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
-[open,refpage='VkImagePlaneMemoryRequirementsInfo',desc='Structure specifying image plane for memory requirements',type='structs']
---
-To determine the memory requirements for a plane of a disjoint image, add a
-sname:VkImagePlaneMemoryRequirementsInfo structure to the pname:pNext chain
-of the sname:VkImageMemoryRequirementsInfo2 structure.
-
-The sname:VkImagePlaneMemoryRequirementsInfo structure is defined as:
-
-include::{generated}/api/structs/VkImagePlaneMemoryRequirementsInfo.txt[]
-
-ifdef::VK_KHR_sampler_ycbcr_conversion[]
-or the equivalent
-
-include::{generated}/api/structs/VkImagePlaneMemoryRequirementsInfoKHR.txt[]
-endif::VK_KHR_sampler_ycbcr_conversion[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:planeAspect is a elink:VkImageAspectFlagBits value specifying the
-    aspect corresponding to the image plane to query.
-
-.Valid Usage
-****
-  * [[VUID-VkImagePlaneMemoryRequirementsInfo-planeAspect-02281]]
-    If the image's pname:tiling is ename:VK_IMAGE_TILING_LINEAR or
-    ename:VK_IMAGE_TILING_OPTIMAL, then pname:planeAspect must: be a single
-    valid _format plane_ for the image (that is, for a two-plane image
-    pname:planeAspect must: be ename:VK_IMAGE_ASPECT_PLANE_0_BIT or
-    ename:VK_IMAGE_ASPECT_PLANE_1_BIT, and for a three-plane image
-    pname:planeAspect must: be ename:VK_IMAGE_ASPECT_PLANE_0_BIT,
-    ename:VK_IMAGE_ASPECT_PLANE_1_BIT or ename:VK_IMAGE_ASPECT_PLANE_2_BIT)
-ifdef::VK_EXT_image_drm_format_modifier[]
-  * [[VUID-VkImagePlaneMemoryRequirementsInfo-planeAspect-02282]]
-    If the image's pname:tiling is
-    ename:VK_IMAGE_TILING_DRM_FORMAT_MODIFIER_EXT, then pname:planeAspect
-    must: be a single valid _memory plane_ for the image (that is,
-    pname:aspectMask must: specify a plane index that is less than the
-    slink:VkDrmFormatModifierPropertiesEXT::pname:drmFormatModifierPlaneCount
-    associated with the image's pname:format and
-    slink:VkImageDrmFormatModifierPropertiesEXT::pname:drmFormatModifier)
-endif::VK_EXT_image_drm_format_modifier[]
-****
-
-include::{generated}/validity/structs/VkImagePlaneMemoryRequirementsInfo.txt[]
---
-endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
-
-[open,refpage='VkMemoryRequirements2',desc='Structure specifying memory requirements',type='structs']
---
-The sname:VkMemoryRequirements2 structure is defined as:
-
-include::{generated}/api/structs/VkMemoryRequirements2.txt[]
-
-ifdef::VK_KHR_get_memory_requirements2[]
-or the equivalent
-
-include::{generated}/api/structs/VkMemoryRequirements2KHR.txt[]
-endif::VK_KHR_get_memory_requirements2[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:memoryRequirements is a slink:VkMemoryRequirements structure
-    describing the memory requirements of the resource.
-
-include::{generated}/validity/structs/VkMemoryRequirements2.txt[]
---
-endif::VK_VERSION_1_1,VK_KHR_get_memory_requirements2[]
-
-ifdef::VK_VERSION_1_1,VK_KHR_dedicated_allocation[]
-[open,refpage='VkMemoryDedicatedRequirements',desc='Structure describing dedicated allocation requirements of buffer and image resources',type='structs']
---
-The sname:VkMemoryDedicatedRequirements structure is defined as:
-
-include::{generated}/api/structs/VkMemoryDedicatedRequirements.txt[]
-
-ifdef::VK_KHR_dedicated_allocation[]
-or the equivalent
-
-include::{generated}/api/structs/VkMemoryDedicatedRequirementsKHR.txt[]
-endif::VK_KHR_dedicated_allocation[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:prefersDedicatedAllocation specifies that the implementation would
-    prefer a dedicated allocation for this resource.
-    The application is still free to suballocate the resource but it may:
-    get better performance if a dedicated allocation is used.
-  * pname:requiresDedicatedAllocation specifies that a dedicated allocation
-    is required for this resource.
-
-To determine the dedicated allocation requirements of a buffer or image
-resource, add a slink:VkMemoryDedicatedRequirements structure to the
-pname:pNext chain of the slink:VkMemoryRequirements2 structure passed as the
-pname:pMemoryRequirements parameter of flink:vkGetBufferMemoryRequirements2
-or flink:vkGetImageMemoryRequirements2, respectively.
-
-Constraints on the values returned for buffer resources are:
-
-ifdef::VK_VERSION_1_1,VK_KHR_external_memory[]
-  * pname:requiresDedicatedAllocation may: be ename:VK_TRUE if the
-    pname:pNext chain of slink:VkBufferCreateInfo for the call to
-    fname:vkCreateBuffer used to create the buffer being queried included a
-    slink:VkExternalMemoryBufferCreateInfo structure, and any of the handle
-    types specified in
-    slink:VkExternalMemoryBufferCreateInfo::pname:handleTypes requires
-    dedicated allocation, as reported by
-    flink:vkGetPhysicalDeviceExternalBufferProperties in
-    sname:VkExternalBufferProperties::pname:externalMemoryProperties.externalMemoryFeatures.
-    Otherwise, pname:requiresDedicatedAllocation will be ename:VK_FALSE.
-
-endif::VK_VERSION_1_1,VK_KHR_external_memory[]
-ifndef::VK_VERSION_1_1,VK_KHR_external_memory[]
-  * pname:requiresDedicatedAllocation will be ename:VK_FALSE
-endif::VK_VERSION_1_1,VK_KHR_external_memory[]
-  * When the implementation sets pname:requiresDedicatedAllocation to
-    ename:VK_TRUE, it must: also set pname:prefersDedicatedAllocation to
-    ename:VK_TRUE.
-  * If ename:VK_BUFFER_CREATE_SPARSE_BINDING_BIT was set in
-    slink:VkBufferCreateInfo::pname:flags when pname:buffer was created,
-    then both pname:prefersDedicatedAllocation and
-    pname:requiresDedicatedAllocation will be ename:VK_FALSE.
-
-Constraints on the values returned for image resources are:
-
-ifdef::VK_VERSION_1_1,VK_KHR_external_memory[]
-  * pname:requiresDedicatedAllocation may: be ename:VK_TRUE if the
-    pname:pNext chain of slink:VkImageCreateInfo for the call to
-    flink:vkCreateImage used to create the image being queried included a
-    slink:VkExternalMemoryImageCreateInfo structure, and any of the handle
-    types specified in
-    slink:VkExternalMemoryImageCreateInfo::pname:handleTypes requires
-    dedicated allocation, as reported by
-    flink:vkGetPhysicalDeviceImageFormatProperties2 in
-    sname:VkExternalImageFormatProperties::pname:externalMemoryProperties.externalMemoryFeatures.
-    Otherwise, pname:requiresDedicatedAllocation will be ename:VK_FALSE.
-endif::VK_VERSION_1_1,VK_KHR_external_memory[]
-ifndef::VK_VERSION_1_1,VK_KHR_external_memory[]
-  * pname:requiresDedicatedAllocation will be ename:VK_FALSE
-endif::VK_VERSION_1_1,VK_KHR_external_memory[]
-  * If ename:VK_IMAGE_CREATE_SPARSE_BINDING_BIT was set in
-    slink:VkImageCreateInfo::pname:flags when pname:image was created, then
-    both pname:prefersDedicatedAllocation and
-    pname:requiresDedicatedAllocation will be ename:VK_FALSE.
-
-include::{generated}/validity/structs/VkMemoryDedicatedRequirements.txt[]
---
-endif::VK_VERSION_1_1,VK_KHR_dedicated_allocation[]
-
-[open,refpage='vkBindBufferMemory',desc='Bind device memory to a buffer object',type='protos']
---
-:refpage: vkBindBufferMemory
-
-To attach memory to a buffer object, call:
-
-include::{generated}/api/protos/vkBindBufferMemory.txt[]
-
-  * pname:device is the logical device that owns the buffer and memory.
-  * pname:buffer is the buffer to be attached to memory.
-  * pname:memory is a slink:VkDeviceMemory object describing the device
-    memory to attach.
-  * pname:memoryOffset is the start offset of the region of pname:memory
-    which is to be bound to the buffer.
-    The number of bytes returned in the
-    sname:VkMemoryRequirements::pname:size member in pname:memory, starting
-    from pname:memoryOffset bytes, will be bound to the specified buffer.
-
-ifdef::VK_VERSION_1_1,VK_KHR_bind_memory2[]
-fname:vkBindBufferMemory is equivalent to passing the same parameters
-through slink:VkBindBufferMemoryInfo to flink:vkBindBufferMemory2.
-endif::VK_VERSION_1_1,VK_KHR_bind_memory2[]
-
-.Valid Usage
-****
-include::{chapters}/commonvalidity/bind_buffer_common.txt[]
-****
-
-include::{generated}/validity/protos/vkBindBufferMemory.txt[]
---
-
-ifdef::VK_VERSION_1_1,VK_KHR_bind_memory2[]
-[open,refpage='vkBindBufferMemory2',desc='Bind device memory to buffer objects',type='protos']
---
-To attach memory to buffer objects for one or more buffers at a time, call:
-
-ifdef::VK_VERSION_1_1[]
-include::{generated}/api/protos/vkBindBufferMemory2.txt[]
-endif::VK_VERSION_1_1[]
-
-ifdef::VK_VERSION_1_1+VK_KHR_bind_memory2[or the equivalent command]
-
-ifdef::VK_KHR_bind_memory2[]
-include::{generated}/api/protos/vkBindBufferMemory2KHR.txt[]
-endif::VK_KHR_bind_memory2[]
-
-  * pname:device is the logical device that owns the buffers and memory.
-  * pname:bindInfoCount is the number of elements in pname:pBindInfos.
-  * pname:pBindInfos is a pointer to an array of pname:bindInfoCount
-    slink:VkBindBufferMemoryInfo structures describing buffers and memory to
-    bind.
-
-On some implementations, it may: be more efficient to batch memory bindings
-into a single command.
-
-include::{generated}/validity/protos/vkBindBufferMemory2.txt[]
---
-
-[open,refpage='VkBindBufferMemoryInfo',desc='Structure specifying how to bind a buffer to memory',type='structs']
---
-:refpage: VkBindBufferMemoryInfo
-
-sname:VkBindBufferMemoryInfo contains members corresponding to the
-parameters of flink:vkBindBufferMemory.
-
-The sname:VkBindBufferMemoryInfo structure is defined as:
-
-include::{generated}/api/structs/VkBindBufferMemoryInfo.txt[]
-
-ifdef::VK_KHR_bind_memory2[]
-or the equivalent
-
-include::{generated}/api/structs/VkBindBufferMemoryInfoKHR.txt[]
-endif::VK_KHR_bind_memory2[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:buffer is the buffer to be attached to memory.
-  * pname:memory is a slink:VkDeviceMemory object describing the device
-    memory to attach.
-  * pname:memoryOffset is the start offset of the region of pname:memory
-    which is to be bound to the buffer.
-    The number of bytes returned in the
-    sname:VkMemoryRequirements::pname:size member in pname:memory, starting
-    from pname:memoryOffset bytes, will be bound to the specified buffer.
-
-.Valid Usage
-****
-include::{chapters}/commonvalidity/bind_buffer_common.txt[]
-ifdef::VK_VERSION_1_1,VK_KHR_device_group[]
-  * [[VUID-VkBindBufferMemoryInfo-pNext-01605]]
-    If the pname:pNext chain includes a
-    slink:VkBindBufferMemoryDeviceGroupInfo structure, all instances of
-    pname:memory specified by
-    slink:VkBindBufferMemoryDeviceGroupInfo::pname:pDeviceIndices must: have
-    been allocated
-endif::VK_VERSION_1_1,VK_KHR_device_group[]
-****
-
-include::{generated}/validity/structs/VkBindBufferMemoryInfo.txt[]
---
-
-ifdef::VK_VERSION_1_1,VK_KHR_device_group[]
-[open,refpage='VkBindBufferMemoryDeviceGroupInfo',desc='Structure specifying device within a group to bind to',type='structs']
---
-The sname:VkBindBufferMemoryDeviceGroupInfo structure is defined as:
-
-include::{generated}/api/structs/VkBindBufferMemoryDeviceGroupInfo.txt[]
-
-// Jon: this conditional needs to be enhanced for 1.1 / bind_memory_2
-ifdef::VK_KHR_device_group+VK_KHR_bind_memory2[]
-or the equivalent
-
-include::{generated}/api/structs/VkBindBufferMemoryDeviceGroupInfoKHR.txt[]
-endif::VK_KHR_device_group+VK_KHR_bind_memory2[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:deviceIndexCount is the number of elements in
-    pname:pDeviceIndices.
-  * pname:pDeviceIndices is a pointer to an array of device indices.
-
-If the pname:pNext chain of slink:VkBindBufferMemoryInfo includes a
-sname:VkBindBufferMemoryDeviceGroupInfo structure, then that structure
-determines how memory is bound to buffers across multiple devices in a
-device group.
-
-If pname:deviceIndexCount is greater than zero, then on device index [eq]#i#
-the buffer is attached to the instance of pname:memory on the physical
-device with device index [eq]#pname:pDeviceIndices[i]#.
-
-If pname:deviceIndexCount is zero and pname:memory comes from a memory heap
-with the ename:VK_MEMORY_HEAP_MULTI_INSTANCE_BIT bit set, then it is as if
-pname:pDeviceIndices contains consecutive indices from zero to the number of
-physical devices in the logical device, minus one.
-In other words, by default each physical device attaches to its own instance
-of pname:memory.
-
-If pname:deviceIndexCount is zero and pname:memory comes from a memory heap
-without the ename:VK_MEMORY_HEAP_MULTI_INSTANCE_BIT bit set, then it is as
-if pname:pDeviceIndices contains an array of zeros.
-In other words, by default each physical device attaches to instance zero.
-
-.Valid Usage
-****
-  * [[VUID-VkBindBufferMemoryDeviceGroupInfo-deviceIndexCount-01606]]
-    pname:deviceIndexCount must: either be zero or equal to the number of
-    physical devices in the logical device
-  * [[VUID-VkBindBufferMemoryDeviceGroupInfo-pDeviceIndices-01607]]
-    All elements of pname:pDeviceIndices must: be valid device indices
-****
-
-include::{generated}/validity/structs/VkBindBufferMemoryDeviceGroupInfo.txt[]
---
-endif::VK_VERSION_1_1,VK_KHR_device_group[]
-endif::VK_VERSION_1_1,VK_KHR_bind_memory2[]
-
-[open,refpage='vkBindImageMemory',desc='Bind device memory to an image object',type='protos']
---
-:refpage: vkBindImageMemory
-
-ifndef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
-To attach memory to an image object, call:
-endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
-ifdef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
-To attach memory to a sname:VkImage object created without the
-ename:VK_IMAGE_CREATE_DISJOINT_BIT set, call:
-endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
-
-include::{generated}/api/protos/vkBindImageMemory.txt[]
-
-  * pname:device is the logical device that owns the image and memory.
-  * pname:image is the image.
-  * pname:memory is the slink:VkDeviceMemory object describing the device
-    memory to attach.
-  * pname:memoryOffset is the start offset of the region of pname:memory
-    which is to be bound to the image.
-    The number of bytes returned in the
-    sname:VkMemoryRequirements::pname:size member in pname:memory, starting
-    from pname:memoryOffset bytes, will be bound to the specified image.
-
-ifdef::VK_VERSION_1_1,VK_KHR_bind_memory2[]
-fname:vkBindImageMemory is equivalent to passing the same parameters through
-slink:VkBindImageMemoryInfo to flink:vkBindImageMemory2.
-endif::VK_VERSION_1_1,VK_KHR_bind_memory2[]
-
-.Valid Usage
-****
-include::{chapters}/commonvalidity/bind_image_common.txt[]
-ifdef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
-  * [[VUID-vkBindImageMemory-image-01608]]
-    pname:image must: not have been created with the
-    ename:VK_IMAGE_CREATE_DISJOINT_BIT set
-endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
-  * [[VUID-vkBindImageMemory-memory-01047]]
-    pname:memory must: have been allocated using one of the memory types
-    allowed in the pname:memoryTypeBits member of the
-    sname:VkMemoryRequirements structure returned from a call to
-    flink:vkGetImageMemoryRequirements with pname:image
-  * [[VUID-vkBindImageMemory-memoryOffset-01048]]
-    pname:memoryOffset must: be an integer multiple of the pname:alignment
-    member of the sname:VkMemoryRequirements structure returned from a call
-    to flink:vkGetImageMemoryRequirements with pname:image
-  * [[VUID-vkBindImageMemory-size-01049]]
-    The difference of the size of pname:memory and pname:memoryOffset must:
-    be greater than or equal to the pname:size member of the
-    slink:VkMemoryRequirements structure returned from a call to
-    flink:vkGetImageMemoryRequirements with the same pname:image
-ifdef::VK_FUCHSIA_buffer_collection[]
-  * [[VUID-vkBindImageMemory-image-06392]]
-    If pname:image was created with
-    slink:VkBufferCollectionImageCreateInfoFUCHSIA chained to
-    slink:VkImageCreateInfo::pname:pNext, pname:memory must: be allocated
-    with a slink:VkImportMemoryBufferCollectionFUCHSIA chained to
-    slink:VkMemoryAllocateInfo::pname:pNext
-endif::VK_FUCHSIA_buffer_collection[]
-****
-
-include::{generated}/validity/protos/vkBindImageMemory.txt[]
---
-
-ifdef::VK_VERSION_1_1,VK_KHR_bind_memory2[]
-[open,refpage='vkBindImageMemory2',desc='Bind device memory to image objects',type='protos']
---
-To attach memory to image objects for one or more images at a time, call:
-
-ifdef::VK_VERSION_1_1[]
-include::{generated}/api/protos/vkBindImageMemory2.txt[]
-endif::VK_VERSION_1_1[]
-
-ifdef::VK_VERSION_1_1+VK_KHR_bind_memory2[or the equivalent command]
-
-ifdef::VK_KHR_bind_memory2[]
-include::{generated}/api/protos/vkBindImageMemory2KHR.txt[]
-endif::VK_KHR_bind_memory2[]
-
-  * pname:device is the logical device that owns the images and memory.
-  * pname:bindInfoCount is the number of elements in pname:pBindInfos.
-  * pname:pBindInfos is a pointer to an array of slink:VkBindImageMemoryInfo
-    structures, describing images and memory to bind.
-
-On some implementations, it may: be more efficient to batch memory bindings
-into a single command.
-
-.Valid Usage
-****
-ifdef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
-  * [[VUID-vkBindImageMemory2-pBindInfos-02858]]
-    If any slink:VkBindImageMemoryInfo::pname:image was created with
-    ename:VK_IMAGE_CREATE_DISJOINT_BIT then all planes of
-    slink:VkBindImageMemoryInfo::pname:image must: be bound individually in
-    separate pname:pBindInfos
-  * [[VUID-vkBindImageMemory2-pBindInfos-04006]]
-    pname:pBindInfos must: not refer to the same image subresource more than
-    once
-endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
-****
-
-include::{generated}/validity/protos/vkBindImageMemory2.txt[]
---
-
-[open,refpage='VkBindImageMemoryInfo',desc='Structure specifying how to bind an image to memory',type='structs']
---
-:refpage: VkBindImageMemoryInfo
-
-sname:VkBindImageMemoryInfo contains members corresponding to the parameters
-of flink:vkBindImageMemory.
-
-The sname:VkBindImageMemoryInfo structure is defined as:
-
-include::{generated}/api/structs/VkBindImageMemoryInfo.txt[]
-
-ifdef::VK_KHR_bind_memory2[]
-or the equivalent
-
-include::{generated}/api/structs/VkBindImageMemoryInfoKHR.txt[]
-endif::VK_KHR_bind_memory2[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:image is the image to be attached to memory.
-  * pname:memory is a slink:VkDeviceMemory object describing the device
-    memory to attach.
-  * pname:memoryOffset is the start offset of the region of pname:memory
-    which is to be bound to the image.
-    The number of bytes returned in the
-    sname:VkMemoryRequirements::pname:size member in pname:memory, starting
-    from pname:memoryOffset bytes, will be bound to the specified image.
-
-.Valid Usage
-****
-include::{chapters}/commonvalidity/bind_image_common.txt[]
-ifndef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
-  * [[VUID-VkBindImageMemoryInfo-memory-01612]]
-    pname:memory must: have been allocated using one of the memory types
-    allowed in the pname:memoryTypeBits member of the
-    slink:VkMemoryRequirements structure returned from a call to
-    flink:vkGetImageMemoryRequirements with pname:image
-  * [[VUID-VkBindImageMemoryInfo-memoryOffset-01613]]
-    pname:memoryOffset must: be an integer multiple of the pname:alignment
-    member of the slink:VkMemoryRequirements structure returned from a call
-    to flink:vkGetImageMemoryRequirements with pname:image
-  * [[VUID-VkBindImageMemoryInfo-memory-01614]]
-    The difference of the size of pname:memory and pname:memoryOffset must:
-    be greater than or equal to the pname:size member of the
-    slink:VkMemoryRequirements structure returned from a call to
-    flink:vkGetImageMemoryRequirements with the same pname:image
-endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
-ifdef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
-  * [[VUID-VkBindImageMemoryInfo-pNext-01615]]
-    If the pname:pNext chain does not include a
-    slink:VkBindImagePlaneMemoryInfo structure, pname:memory must: have been
-    allocated using one of the memory types allowed in the
-    pname:memoryTypeBits member of the slink:VkMemoryRequirements structure
-    returned from a call to flink:vkGetImageMemoryRequirements2 with
-    pname:image
-  * [[VUID-VkBindImageMemoryInfo-pNext-01616]]
-    If the pname:pNext chain does not include a
-    slink:VkBindImagePlaneMemoryInfo structure, pname:memoryOffset must: be
-    an integer multiple of the pname:alignment member of the
-    slink:VkMemoryRequirements structure returned from a call to
-    flink:vkGetImageMemoryRequirements2 with pname:image
-  * [[VUID-VkBindImageMemoryInfo-pNext-01617]]
-    If the pname:pNext chain does not include a
-    slink:VkBindImagePlaneMemoryInfo structure, the difference of the size
-    of pname:memory and pname:memoryOffset must: be greater than or equal to
-    the pname:size member of the slink:VkMemoryRequirements structure
-    returned from a call to flink:vkGetImageMemoryRequirements2 with the
-    same pname:image
-  * [[VUID-VkBindImageMemoryInfo-pNext-01618]]
-    If the pname:pNext chain includes a slink:VkBindImagePlaneMemoryInfo
-    structure, pname:image must: have been created with the
-    ename:VK_IMAGE_CREATE_DISJOINT_BIT bit set
-  * [[VUID-VkBindImageMemoryInfo-pNext-01619]]
-    If the pname:pNext chain includes a slink:VkBindImagePlaneMemoryInfo
-    structure, pname:memory must: have been allocated using one of the
-    memory types allowed in the pname:memoryTypeBits member of the
-    slink:VkMemoryRequirements structure returned from a call to
-    flink:vkGetImageMemoryRequirements2 with pname:image and where
-    slink:VkBindImagePlaneMemoryInfo::pname:planeAspect corresponds to the
-    slink:VkImagePlaneMemoryRequirementsInfo::pname:planeAspect in the
-    slink:VkImageMemoryRequirementsInfo2 structure's pname:pNext chain
-  * [[VUID-VkBindImageMemoryInfo-pNext-01620]]
-    If the pname:pNext chain includes a slink:VkBindImagePlaneMemoryInfo
-    structure, pname:memoryOffset must: be an integer multiple of the
-    pname:alignment member of the slink:VkMemoryRequirements structure
-    returned from a call to flink:vkGetImageMemoryRequirements2 with
-    pname:image and where
-    slink:VkBindImagePlaneMemoryInfo::pname:planeAspect corresponds to the
-    slink:VkImagePlaneMemoryRequirementsInfo::pname:planeAspect in the
-    slink:VkImageMemoryRequirementsInfo2 structure's pname:pNext chain
-  * [[VUID-VkBindImageMemoryInfo-pNext-01621]]
-    If the pname:pNext chain includes a slink:VkBindImagePlaneMemoryInfo
-    structure, the difference of the size of pname:memory and
-    pname:memoryOffset must: be greater than or equal to the pname:size
-    member of the slink:VkMemoryRequirements structure returned from a call
-    to flink:vkGetImageMemoryRequirements2 with the same pname:image and
-    where slink:VkBindImagePlaneMemoryInfo::pname:planeAspect corresponds to
-    the slink:VkImagePlaneMemoryRequirementsInfo::pname:planeAspect in the
-    slink:VkImageMemoryRequirementsInfo2 structure's pname:pNext chain
-endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
-ifndef::VK_VERSION_1_1+VK_KHR_swapchain[]
-ifndef::VK_KHR_device_group+VK_KHR_swapchain[]
-  * [[VUID-VkBindImageMemoryInfo-memory-01625]]
-    pname:memory must: be a valid slink:VkDeviceMemory handle
-endif::VK_KHR_device_group+VK_KHR_swapchain[]
-endif::VK_VERSION_1_1+VK_KHR_swapchain[]
-ifdef::VK_VERSION_1_1,VK_KHR_device_group[]
-  * [[VUID-VkBindImageMemoryInfo-pNext-01626]]
-    If the pname:pNext chain includes a
-    slink:VkBindImageMemoryDeviceGroupInfo structure, all instances of
-    pname:memory specified by
-    slink:VkBindImageMemoryDeviceGroupInfo::pname:pDeviceIndices must: have
-    been allocated
-  * [[VUID-VkBindImageMemoryInfo-pNext-01627]]
-    If the pname:pNext chain includes a
-    slink:VkBindImageMemoryDeviceGroupInfo structure, and
-    slink:VkBindImageMemoryDeviceGroupInfo::pname:splitInstanceBindRegionCount
-    is not zero, then pname:image must: have been created with the
-    ename:VK_IMAGE_CREATE_SPLIT_INSTANCE_BIND_REGIONS_BIT bit set
-  * [[VUID-VkBindImageMemoryInfo-pNext-01628]]
-    If the pname:pNext chain includes a
-    slink:VkBindImageMemoryDeviceGroupInfo structure, all elements of
-    slink:VkBindImageMemoryDeviceGroupInfo::pname:pSplitInstanceBindRegions
-    must: be valid rectangles contained within the dimensions of pname:image
-  * [[VUID-VkBindImageMemoryInfo-pNext-01629]]
-    If the pname:pNext chain includes a
-    slink:VkBindImageMemoryDeviceGroupInfo structure, the union of the areas
-    of all elements of
-    slink:VkBindImageMemoryDeviceGroupInfo::pname:pSplitInstanceBindRegions
-    that correspond to the same instance of pname:image must: cover the
-    entire image
-ifdef::VK_KHR_swapchain[]
-  * [[VUID-VkBindImageMemoryInfo-image-01630]]
-    If pname:image was created with a valid swapchain handle in
-    slink:VkImageSwapchainCreateInfoKHR::pname:swapchain, then the
-    pname:pNext chain must: include a
-    slink:VkBindImageMemorySwapchainInfoKHR structure containing the same
-    swapchain handle
-  * [[VUID-VkBindImageMemoryInfo-pNext-01631]]
-    If the pname:pNext chain includes a
-    slink:VkBindImageMemorySwapchainInfoKHR structure, pname:memory must: be
-    dlink:VK_NULL_HANDLE
-  * [[VUID-VkBindImageMemoryInfo-pNext-01632]]
-    If the pname:pNext chain does not include a
-    slink:VkBindImageMemorySwapchainInfoKHR structure, pname:memory must: be
-    a valid slink:VkDeviceMemory handle
-endif::VK_KHR_swapchain[]
-endif::VK_VERSION_1_1,VK_KHR_device_group[]
-****
-
-include::{generated}/validity/structs/VkBindImageMemoryInfo.txt[]
---
-
-ifdef::VK_VERSION_1_1,VK_KHR_device_group[]
-[open,refpage='VkBindImageMemoryDeviceGroupInfo',desc='Structure specifying device within a group to bind to',type='structs']
---
-The sname:VkBindImageMemoryDeviceGroupInfo structure is defined as:
-
-include::{generated}/api/structs/VkBindImageMemoryDeviceGroupInfo.txt[]
-
-// Jon: this conditional needs to be enhanced for 1.1 / bind_memory_2
-ifdef::VK_KHR_device_group+VK_KHR_bind_memory2[]
-or the equivalent
-
-include::{generated}/api/structs/VkBindImageMemoryDeviceGroupInfoKHR.txt[]
-endif::VK_KHR_device_group+VK_KHR_bind_memory2[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:deviceIndexCount is the number of elements in
-    pname:pDeviceIndices.
-  * pname:pDeviceIndices is a pointer to an array of device indices.
-  * pname:splitInstanceBindRegionCount is the number of elements in
-    pname:pSplitInstanceBindRegions.
-  * pname:pSplitInstanceBindRegions is a pointer to an array of
-    slink:VkRect2D structures describing which regions of the image are
-    attached to each instance of memory.
-
-If the pname:pNext chain of slink:VkBindImageMemoryInfo includes a
-sname:VkBindImageMemoryDeviceGroupInfo structure, then that structure
-determines how memory is bound to images across multiple devices in a device
-group.
-
-If pname:deviceIndexCount is greater than zero, then on device index [eq]#i#
-pname:image is attached to the instance of the memory on the physical device
-with device index [eq]#pDeviceIndices[i]#.
-
-Let [eq]#N# be the number of physical devices in the logical device.
-If pname:splitInstanceBindRegionCount is greater than zero, then
-pname:pSplitInstanceBindRegions is a pointer to an array of [eq]#N^2^#
-rectangles, where the image region specified by the rectangle at element
-[eq]#i*N+j# in resource instance [eq]#i# is bound to the memory instance
-[eq]#j#.
-The blocks of the memory that are bound to each sparse image block region
-use an offset in memory, relative to pname:memoryOffset, computed as if the
-whole image was being bound to a contiguous range of memory.
-In other words, horizontally adjacent image blocks use consecutive blocks of
-memory, vertically adjacent image blocks are separated by the number of
-bytes per block multiplied by the width in blocks of pname:image, and the
-block at [eq]#(0,0)# corresponds to memory starting at pname:memoryOffset.
-
-If pname:splitInstanceBindRegionCount and pname:deviceIndexCount are zero
-and the memory comes from a memory heap with the
-ename:VK_MEMORY_HEAP_MULTI_INSTANCE_BIT bit set, then it is as if
-pname:pDeviceIndices contains consecutive indices from zero to the number of
-physical devices in the logical device, minus one.
-In other words, by default each physical device attaches to its own instance
-of the memory.
-
-If pname:splitInstanceBindRegionCount and pname:deviceIndexCount are zero
-and the memory comes from a memory heap without the
-ename:VK_MEMORY_HEAP_MULTI_INSTANCE_BIT bit set, then it is as if
-pname:pDeviceIndices contains an array of zeros.
-In other words, by default each physical device attaches to instance zero.
-
-.Valid Usage
-****
-  * [[VUID-VkBindImageMemoryDeviceGroupInfo-deviceIndexCount-01633]]
-    At least one of pname:deviceIndexCount and
-    pname:splitInstanceBindRegionCount must: be zero
-  * [[VUID-VkBindImageMemoryDeviceGroupInfo-deviceIndexCount-01634]]
-    pname:deviceIndexCount must: either be zero or equal to the number of
-    physical devices in the logical device
-  * [[VUID-VkBindImageMemoryDeviceGroupInfo-pDeviceIndices-01635]]
-    All elements of pname:pDeviceIndices must: be valid device indices
-  * [[VUID-VkBindImageMemoryDeviceGroupInfo-splitInstanceBindRegionCount-01636]]
-    pname:splitInstanceBindRegionCount must: either be zero or equal to the
-    number of physical devices in the logical device squared
-  * [[VUID-VkBindImageMemoryDeviceGroupInfo-pSplitInstanceBindRegions-01637]]
-    Elements of pname:pSplitInstanceBindRegions that correspond to the same
-    instance of an image must: not overlap
-  * [[VUID-VkBindImageMemoryDeviceGroupInfo-offset-01638]]
-    The pname:offset.x member of any element of
-    pname:pSplitInstanceBindRegions must: be a multiple of the sparse image
-    block width
-    (sname:VkSparseImageFormatProperties::pname:imageGranularity.width) of
-    all non-metadata aspects of the image
-  * [[VUID-VkBindImageMemoryDeviceGroupInfo-offset-01639]]
-    The pname:offset.y member of any element of
-    pname:pSplitInstanceBindRegions must: be a multiple of the sparse image
-    block height
-    (sname:VkSparseImageFormatProperties::pname:imageGranularity.height) of
-    all non-metadata aspects of the image
-  * [[VUID-VkBindImageMemoryDeviceGroupInfo-extent-01640]]
-    The pname:extent.width member of any element of
-    pname:pSplitInstanceBindRegions must: either be a multiple of the sparse
-    image block width of all non-metadata aspects of the image, or else
-    pname:extent.width {plus} pname:offset.x must: equal the width of the
-    image subresource
-  * [[VUID-VkBindImageMemoryDeviceGroupInfo-extent-01641]]
-    The pname:extent.height member of any element of
-    pname:pSplitInstanceBindRegions must: either be a multiple of the sparse
-    image block height of all non-metadata aspects of the image, or else
-    pname:extent.height {plus} pname:offset.y must: equal the height of the
-    image subresource
-****
-
-include::{generated}/validity/structs/VkBindImageMemoryDeviceGroupInfo.txt[]
---
-
-ifdef::VK_KHR_swapchain[]
-[open,refpage='VkBindImageMemorySwapchainInfoKHR',desc='Structure specifying swapchain image memory to bind to',type='structs']
---
-If the pname:pNext chain of slink:VkBindImageMemoryInfo includes a
-sname:VkBindImageMemorySwapchainInfoKHR structure, then that structure
-includes a swapchain handle and image index indicating that the image will
-be bound to memory from that swapchain.
-
-The sname:VkBindImageMemorySwapchainInfoKHR structure is defined as:
-
-include::{generated}/api/structs/VkBindImageMemorySwapchainInfoKHR.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:swapchain is dlink:VK_NULL_HANDLE or a swapchain handle.
-  * pname:imageIndex is an image index within pname:swapchain.
-
-If pname:swapchain is not `NULL`, the pname:swapchain and pname:imageIndex
-are used to determine the memory that the image is bound to, instead of
-pname:memory and pname:memoryOffset.
-
-Memory can: be bound to a swapchain and use the pname:pDeviceIndices or
-pname:pSplitInstanceBindRegions members of
-slink:VkBindImageMemoryDeviceGroupInfo.
-
-.Valid Usage
-****
-  * [[VUID-VkBindImageMemorySwapchainInfoKHR-imageIndex-01644]]
-    pname:imageIndex must: be less than the number of images in
-    pname:swapchain
-****
-
-include::{generated}/validity/structs/VkBindImageMemorySwapchainInfoKHR.txt[]
---
-endif::VK_KHR_swapchain[]
-endif::VK_VERSION_1_1,VK_KHR_device_group[]
-
-ifdef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
-[open,refpage='VkBindImagePlaneMemoryInfo',desc='Structure specifying how to bind an image plane to memory',type='structs']
---
-In order to bind _planes_ of a _disjoint image_, add a
-sname:VkBindImagePlaneMemoryInfo structure to the pname:pNext chain of
-slink:VkBindImageMemoryInfo.
-
-The sname:VkBindImagePlaneMemoryInfo structure is defined as:
-
-include::{generated}/api/structs/VkBindImagePlaneMemoryInfo.txt[]
-
-ifdef::VK_KHR_sampler_ycbcr_conversion[]
-or the equivalent
-
-include::{generated}/api/structs/VkBindImagePlaneMemoryInfoKHR.txt[]
-endif::VK_KHR_sampler_ycbcr_conversion[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:planeAspect is a ename:VkImageAspectFlagBits value specifying the
-    aspect of the disjoint image plane to bind.
-
-.Valid Usage
-****
-  * [[VUID-VkBindImagePlaneMemoryInfo-planeAspect-02283]]
-    If the image's pname:tiling is ename:VK_IMAGE_TILING_LINEAR or
-    ename:VK_IMAGE_TILING_OPTIMAL, then pname:planeAspect must: be a single
-    valid _format plane_ for the image (that is, for a two-plane image
-    pname:planeAspect must: be ename:VK_IMAGE_ASPECT_PLANE_0_BIT or
-    ename:VK_IMAGE_ASPECT_PLANE_1_BIT, and for a three-plane image
-    pname:planeAspect must: be ename:VK_IMAGE_ASPECT_PLANE_0_BIT,
-    ename:VK_IMAGE_ASPECT_PLANE_1_BIT or ename:VK_IMAGE_ASPECT_PLANE_2_BIT)
-ifdef::VK_EXT_image_drm_format_modifier[]
-  * [[VUID-VkBindImagePlaneMemoryInfo-planeAspect-02284]]
-    If the image's pname:tiling is
-    ename:VK_IMAGE_TILING_DRM_FORMAT_MODIFIER_EXT, then pname:planeAspect
-    must: be a single valid _memory plane_ for the image (that is,
-    pname:aspectMask must: specify a plane index that is less than the
-    slink:VkDrmFormatModifierPropertiesEXT::pname:drmFormatModifierPlaneCount
-    associated with the image's pname:format and
-    slink:VkImageDrmFormatModifierPropertiesEXT::pname:drmFormatModifier)
-endif::VK_EXT_image_drm_format_modifier[]
-****
-
-include::{generated}/validity/structs/VkBindImagePlaneMemoryInfo.txt[]
---
-endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
-endif::VK_VERSION_1_1,VK_KHR_bind_memory2[]
-
-
-[[resources-bufferimagegranularity,Buffer-Image Granularity]]
-.Buffer-Image Granularity
-There is an implementation-dependent limit, pname:bufferImageGranularity,
-which specifies a page-like granularity at which linear and non-linear
-resources must: be placed in adjacent memory locations to avoid aliasing.
-Two resources which do not satisfy this granularity requirement are said to
-<<resources-memory-aliasing,alias>>.
-pname:bufferImageGranularity is specified in bytes, and must: be a power of
-two.
-Implementations which do not impose a granularity restriction may: report a
-pname:bufferImageGranularity value of one.
-
-[NOTE]
-.Note
-====
-Despite its name, pname:bufferImageGranularity is really a granularity
-between "`linear`" and "`non-linear`" resources.
-====
-
-Given resourceA at the lower memory offset and resourceB at the higher
-memory offset in the same sname:VkDeviceMemory object, where one resource is
-linear and the other is non-linear (as defined in the
-<<glossary-linear-resource,Glossary>>), and the following:
-
-[source,c]
----------------------------------------------------
-resourceA.end       = resourceA.memoryOffset + resourceA.size - 1
-resourceA.endPage   = resourceA.end & ~(bufferImageGranularity-1)
-resourceB.start     = resourceB.memoryOffset
-resourceB.startPage = resourceB.start & ~(bufferImageGranularity-1)
----------------------------------------------------
-
-The following property must: hold:
-
-[source,c]
----------------------------------------------------
-resourceA.endPage < resourceB.startPage
----------------------------------------------------
-
-That is, the end of the first resource (A) and the beginning of the second
-resource (B) must: be on separate "`pages`" of size
-pname:bufferImageGranularity.
-pname:bufferImageGranularity may: be different than the physical page size
-of the memory heap.
-This restriction is only needed when a linear resource and a non-linear
-resource are adjacent in memory and will be used simultaneously.
-The memory ranges of adjacent resources can: be closer than
-pname:bufferImageGranularity, provided they meet the pname:alignment
-requirement for the objects in question.
-
-Sparse block size in bytes and sparse image and buffer memory alignments
-must: all be multiples of the pname:bufferImageGranularity.
-Therefore, memory bound to sparse resources naturally satisfies the
-pname:bufferImageGranularity.
-
-
-[[resources-sharing]]
-== Resource Sharing Mode
-
-[open,refpage='VkSharingMode',desc='Buffer and image sharing modes',type='enums']
---
-Buffer and image objects are created with a _sharing mode_ controlling how
-they can: be accessed from queues.
-The supported sharing modes are:
-
-include::{generated}/api/enums/VkSharingMode.txt[]
-
-  * ename:VK_SHARING_MODE_EXCLUSIVE specifies that access to any range or
-    image subresource of the object will be exclusive to a single queue
-    family at a time.
-  * ename:VK_SHARING_MODE_CONCURRENT specifies that concurrent access to any
-    range or image subresource of the object from multiple queue families is
-    supported.
-
-[NOTE]
-.Note
-====
-ename:VK_SHARING_MODE_CONCURRENT may: result in lower performance access to
-the buffer or image than ename:VK_SHARING_MODE_EXCLUSIVE.
-====
-
-Ranges of buffers and image subresources of image objects created using
-ename:VK_SHARING_MODE_EXCLUSIVE must: only be accessed by queues in the
-queue family that has _ownership_ of the resource.
-Upon creation, such resources are not owned by any queue family; ownership
-is implicitly acquired upon first use within a queue.
-Once a resource using ename:VK_SHARING_MODE_EXCLUSIVE is owned by some queue
-family, the application must: perform a
-<<synchronization-queue-transfers,queue family ownership transfer>> to make
-the memory contents of a range or image subresource accessible to a
-different queue family.
-
-[NOTE]
-.Note
-====
-Images still require a <<resources-image-layouts, layout transition>> from
-ename:VK_IMAGE_LAYOUT_UNDEFINED or ename:VK_IMAGE_LAYOUT_PREINITIALIZED
-before being used on the first queue.
-====
-
-A queue family can: take ownership of an image subresource or buffer range
-of a resource created with ename:VK_SHARING_MODE_EXCLUSIVE, without an
-ownership transfer, in the same way as for a resource that was just created;
-however, taking ownership in this way has the effect that the contents of
-the image subresource or buffer range are undefined:.
-
-Ranges of buffers and image subresources of image objects created using
-ename:VK_SHARING_MODE_CONCURRENT must: only be accessed by queues from the
-queue families specified through the pname:queueFamilyIndexCount and
-pname:pQueueFamilyIndices members of the corresponding create info
-structures.
---
-
-
-ifdef::VK_VERSION_1_1,VK_KHR_external_memory[]
-[[resources-external-sharing]]
-=== External Resource Sharing
-
-Resources should: only be accessed in the Vulkan instance that has exclusive
-ownership of their underlying memory.
-Only one Vulkan instance has exclusive ownership of a resource's underlying
-memory at a given time, regardless of whether the resource was created using
-ename:VK_SHARING_MODE_EXCLUSIVE or ename:VK_SHARING_MODE_CONCURRENT.
-Applications can transfer ownership of a resource's underlying memory only
-if the memory has been imported from or exported to another instance or
-external API using external memory handles.
-The semantics for transferring ownership outside of the instance are similar
-to those used for transferring ownership of ename:VK_SHARING_MODE_EXCLUSIVE
-resources between queues, and is also accomplished using
-slink:VkBufferMemoryBarrier or slink:VkImageMemoryBarrier operations.
-To make the contents of the underlying memory accessible in the destination
-instance or API, applications must:
-
-  . Release exclusive ownership from the source instance or API.
-  . Ensure the release operation has completed using semaphores or fences.
-  . Acquire exclusive ownership in the destination instance or API
-
-Unlike queue ownership transfers, the destination instance or API is not
-specified explicitly when releasing ownership, nor is the source instance or
-API specified when acquiring ownership.
-Instead, the image or memory barrier's pname:dstQueueFamilyIndex or
-pname:srcQueueFamilyIndex parameters are set to the reserved queue family
-index ename:VK_QUEUE_FAMILY_EXTERNAL
-ifdef::VK_EXT_queue_family_foreign[]
-or ename:VK_QUEUE_FAMILY_FOREIGN_EXT
-endif::VK_EXT_queue_family_foreign[]
-to represent the external destination or source respectively.
-
-Binding a resource to a memory object shared between multiple Vulkan
-instances or other APIs does not change the ownership of the underlying
-memory.
-The first entity to access the resource implicitly acquires ownership.
-An entity can: also implicitly take ownership from another entity in the
-same way without an explicit ownership transfer.
-However, taking ownership in this way has the effect that the contents of
-the underlying memory are undefined:.
-
-Accessing a resource backed by memory that is owned by a particular instance
-or API has the same semantics as accessing a ename:VK_SHARING_MODE_EXCLUSIVE
-resource, with one exception: Implementations must: ensure layout
-transitions performed on one member of a set of identical subresources of
-identical images that alias the same range of an underlying memory object
-affect the layout of all the subresources in the set.
-
-As a corollary, writes to any image subresources in such a set must: not
-make the contents of memory used by other subresources in the set
-undefined:.
-An application can: define the content of a subresource of one image by
-performing device writes to an identical subresource of another image
-provided both images are bound to the same region of external memory.
-Applications may: also add resources to such a set after the content of the
-existing set members has been defined without making the content undefined:
-by creating a new image with the initial layout
-ename:VK_IMAGE_LAYOUT_UNDEFINED and binding it to the same region of
-external memory as the existing images.
-
-[NOTE]
-.Note
-====
-Because layout transitions apply to all identical images aliasing the same
-region of external memory, the actual layout of the memory backing a new
-image as well as an existing image with defined content will not be
-undefined:.
-Such an image is not usable until it acquires ownership of its memory from
-the existing owner.
-Therefore, the layout specified as part of this transition will be the true
-initial layout of the image.
-The undefined: layout specified when creating it is a placeholder to
-simplify valid usage requirements.
-====
-endif::VK_VERSION_1_1,VK_KHR_external_memory[]
-
-
-[[resources-memory-aliasing]]
-== Memory Aliasing
-
-A range of a sname:VkDeviceMemory allocation is _aliased_ if it is bound to
-multiple resources simultaneously, as described below, via
-flink:vkBindImageMemory, flink:vkBindBufferMemory,
-ifdef::VK_NV_ray_tracing[]
-flink:vkBindAccelerationStructureMemoryNV,
-endif::VK_NV_ray_tracing[]
-ifndef::VK_VERSION_1_1,VK_KHR_external_memory[]
-or via <<sparsememory-resource-binding,sparse memory bindings>>.
-endif::VK_VERSION_1_1,VK_KHR_external_memory[]
-ifdef::VK_VERSION_1_1,VK_KHR_external_memory[]
-via <<sparsememory-resource-binding,sparse memory bindings>>, or by binding
-the memory to resources in multiple Vulkan instances or external APIs using
-external memory handle export and import mechanisms.
-endif::VK_VERSION_1_1,VK_KHR_external_memory[]
-
-Consider two resources, resource~A~ and resource~B~, bound respectively to
-memory range~A~ and range~B~.
-Let paddedRange~A~ and paddedRange~B~ be, respectively, range~A~ and
-range~B~ aligned to pname:bufferImageGranularity.
-If the resources are both linear or both non-linear (as defined in the
-<<glossary-linear-resource,Glossary>>), then the resources _alias_ the
-memory in the intersection of range~A~ and range~B~.
-If one resource is linear and the other is non-linear, then the resources
-_alias_ the memory in the intersection of paddedRange~A~ and paddedRange~B~.
-
-Applications can: alias memory, but use of multiple aliases is subject to
-several constraints.
-
-[NOTE]
-.Note
-====
-Memory aliasing can: be useful to reduce the total device memory footprint
-of an application, if some large resources are used for disjoint periods of
-time.
-====
-
-When a <<glossary-linear-resource,non-linear>>,
-non-ename:VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT image is bound to an aliased
-range, all image subresources of the image _overlap_ the range.
-When a linear image is bound to an aliased range, the image subresources
-that (according to the image's advertised layout) include bytes from the
-aliased range overlap the range.
-When a ename:VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT image has sparse image
-blocks bound to an aliased range, only image subresources including those
-sparse image blocks overlap the range, and when the memory bound to the
-image's mip tail overlaps an aliased range all image subresources in the mip
-tail overlap the range.
-
-Buffers, and linear image subresources in either the
-ename:VK_IMAGE_LAYOUT_PREINITIALIZED or ename:VK_IMAGE_LAYOUT_GENERAL
-layouts, are _host-accessible subresources_.
-That is, the host has a well-defined addressing scheme to interpret the
-contents, and thus the layout of the data in memory can: be consistently
-interpreted across aliases if each of those aliases is a host-accessible
-subresource.
-Non-linear images, and linear image subresources in other layouts, are not
-host-accessible.
-
-If two aliases are both host-accessible, then they interpret the contents of
-the memory in consistent ways, and data written to one alias can: be read by
-the other alias.
-
-ifdef::VK_VERSION_1_1,VK_KHR_bind_memory2[]
-[[resources-memory-aliasing-consistency]]
-If two aliases are both images that were created with identical creation
-parameters, both were created with the ename:VK_IMAGE_CREATE_ALIAS_BIT flag
-set, and both are bound identically to memory
-ifdef::VK_VERSION_1_1,VK_KHR_device_group[]
-except for slink:VkBindImageMemoryDeviceGroupInfo::pname:pDeviceIndices and
-slink:VkBindImageMemoryDeviceGroupInfo::pname:pSplitInstanceBindRegions,
-endif::VK_VERSION_1_1,VK_KHR_device_group[]
-then they interpret the contents of the memory in consistent ways, and data
-written to one alias can: be read by the other alias.
-
-ifdef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
-[[resources-memory-aliasing-consistency-planes]]
-Additionally, if an individual plane of a multi-planar image and a
-single-plane image alias the same memory, then they also interpret the
-contents of the memory in consistent ways under the same conditions, but
-with the following modifications:
-
-  * Both must: have been created with the ename:VK_IMAGE_CREATE_DISJOINT_BIT
-    flag.
-  * The single-plane image must: have a elink:VkFormat that is
-    <<formats-compatible-planes,equivalent>> to that of the multi-planar
-    image's individual plane.
-  * The single-plane image and the individual plane of the multi-planar
-    image must: be bound identically to memory
-ifdef::VK_VERSION_1_1,VK_KHR_device_group[]
-    except for slink:VkBindImageMemoryDeviceGroupInfo::pname:pDeviceIndices
-    and
-    slink:VkBindImageMemoryDeviceGroupInfo::pname:pSplitInstanceBindRegions.
-endif::VK_VERSION_1_1,VK_KHR_device_group[]
-  * The pname:width and pname:height of the single-plane image are derived
-    from the multi-planar image's dimensions in the manner listed for
-    <<formats-compatible-planes,plane compatibility>> for the aliased plane.
-ifdef::VK_EXT_image_drm_format_modifier[]
-  * If either image's pname:tiling is
-    ename:VK_IMAGE_TILING_DRM_FORMAT_MODIFIER_EXT, then both images must: be
-    <<glossary-linear-resource,linear>>.
-endif::VK_EXT_image_drm_format_modifier[]
-  * All other creation parameters must: be identical
-
-endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
-endif::VK_VERSION_1_1,VK_KHR_bind_memory2[]
-
-ifdef::VK_VERSION_1_1,VK_KHR_external_memory[]
-Aliases created by binding the same memory to resources in multiple Vulkan
-instances or external APIs using external memory handle export and import
-mechanisms interpret the contents of the memory in consistent ways, and data
-written to one alias can: be read by the other alias.
-endif::VK_VERSION_1_1,VK_KHR_external_memory[]
-
-Otherwise, the aliases interpret the contents of the memory differently, and
-writes via one alias make the contents of memory partially or completely
-undefined: to the other alias.
-If the first alias is a host-accessible subresource, then the bytes affected
-are those written by the memory operations according to its addressing
-scheme.
-If the first alias is not host-accessible, then the bytes affected are those
-overlapped by the image subresources that were written.
-If the second alias is a host-accessible subresource, the affected bytes
-become undefined:.
-If the second alias is not host-accessible, all sparse image blocks (for
-sparse partially-resident images) or all image subresources (for non-sparse
-image and fully resident sparse images) that overlap the affected bytes
-become undefined:.
-
-If any image subresources are made undefined: due to writes to an alias,
-then each of those image subresources must: have its layout transitioned
-from ename:VK_IMAGE_LAYOUT_UNDEFINED to a valid layout before it is used, or
-from ename:VK_IMAGE_LAYOUT_PREINITIALIZED if the memory has been written by
-the host.
-If any sparse blocks of a sparse image have been made undefined:, then only
-the image subresources containing them must: be transitioned.
-
-Use of an overlapping range by two aliases must: be separated by a memory
-dependency using the appropriate <<synchronization-access-types, access
-types>> if at least one of those uses performs writes, whether the aliases
-interpret memory consistently or not.
-If buffer or image memory barriers are used, the scope of the barrier must:
-contain the entire range and/or set of image subresources that overlap.
-
-If two aliasing image views are used in the same framebuffer, then the
-render pass must: declare the attachments using the
-<<renderpass-aliasing,ename:VK_ATTACHMENT_DESCRIPTION_MAY_ALIAS_BIT>>, and
-follow the other rules listed in that section.
-
-[NOTE]
-.Note
-====
-Memory recycled via an application suballocator (i.e. without freeing and
-reallocating the memory objects) is not substantially different from memory
-aliasing.
-However, a suballocator usually waits on a fence before recycling a region
-of memory, and signaling a fence involves sufficient implicit dependencies
-to satisfy all the above requirements.
-====
-
-
-ifdef::VK_FUCHSIA_buffer_collection[]
-[[resources-buffer-collection-fuchsia]]
-== Buffer Collections
-
-[open,refpage='VkBufferCollectionFUCHSIA',desc='Opaque handle to a buffer collection object',type='handles']
---
-Fuchsia's FIDL-based Sysmem service interoperates with Vulkan via the
-`apiext:VK_FUCHSIA_buffer_collection` extension.
-
-A buffer collection is a set of one or more buffers which were allocated
-together as a group and which all have the same properties.
-These properties describe the buffers' internal representation, such as its
-dimensions and memory layout.
-This ensures that all of the buffers can be used interchangeably by tasks
-that require swapping among multiple buffers, such as double-buffered
-graphics rendering.
-
-On Fuchsia, the Sysmem service uses buffer collections as a core construct
-in its design.
-
-Buffer collections are represented by sname:VkBufferCollectionFUCHSIA
-handles:
-
-include::{generated}/api/handles/VkBufferCollectionFUCHSIA.txt[]
---
-
-
-=== Definitions
-
-  * FIDL - Fuchsia Interface Definition Language.
-    The declarative language used to define FIDL interprocess communication
-    interfaces on Fuchsia.
-    FIDL files use the `fidl` extension.
-    FIDL is also used to refer to the services defined by interfaces
-    declared in the FIDL language
-  * Sysmem - The FIDL service that facilitates optimal buffer sharing and
-    reuse on Fuchsia
-  * client - Any participant of the buffer collection e.g. the Vulkan
-    application
-  * token - A code:zx_handle_t Zircon channel object that allows
-    participation in the buffer collection
-
-
-=== Platform initialization for buffer collections
-To initialize a buffer collection on Fuchsia:
-
-  * Connect to the Sysmem service to initialize a Sysmem allocator
-  * Create an initial buffer collection token using the Sysmem allocator
-  * Duplicate the token for each participant beyond the initiator
-  * See the Sysmem Overview and fuchsia.sysmem FIDL documentation on
-    fuchsia.dev for more detailed information
-
-
-=== Create the buffer collection
-
-[open,refpage='vkCreateBufferCollectionFUCHSIA',desc='Create a new buffer collection',type='protos']
---
-To create an slink:VkBufferCollectionFUCHSIA for Vulkan to participate in
-the buffer collection:
-
-include::{generated}/api/protos/vkCreateBufferCollectionFUCHSIA.txt[]
-
-  * pname:device is the logical device that creates the
-    sname:VkBufferCollectionFUCHSIA
-  * pname:pCreateInfo is a pointer to a
-    slink:VkBufferCollectionCreateInfoFUCHSIA structure containing
-    parameters affecting creation of the buffer collection
-  * pname:pAllocator is a pointer to a slink:VkAllocationCallbacks structure
-    which controls host memory allocation as described in the
-    <<memory-allocation, Memory Allocation>> chapter
-  * pname:pBufferCollection is a pointer to a
-    slink:VkBufferCollectionFUCHSIA handle in which the resulting buffer
-    collection object is returned
-
-include::{generated}/validity/protos/vkCreateBufferCollectionFUCHSIA.txt[]
-
-.Host Access
-****
-All functions referencing a slink:VkBufferCollectionFUCHSIA must: be
-externally synchronized with the exception of
-fname:vkCreateBufferCollectionFUCHSIA.
-****
---
-
-
-[open,refpage='VkBufferCollectionCreateInfoFUCHSIA',desc='Structure specifying desired parameters to create the buffer collection',type='structs']
---
-The sname:VkBufferCollectionCreateInfoFUCHSIA structure is defined as:
-
-include::{generated}/api/structs/VkBufferCollectionCreateInfoFUCHSIA.txt[]
-
-  * pname:sType is the type of this structure
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure
-  * pname:collectionToken is a fname:zx_handle_t containing the Sysmem
-    client's buffer collection token
-
-.Valid Usage
-****
-  * [[VUID-VkBufferCollectionCreateInfoFUCHSIA-collectionToken-06393]]
-    pname:collectionToken must: be a valid code:zx_handle_t to a Zircon
-    channel allocated from Sysmem
-    (code:fuchsia.sysmem.Allocator/AllocateSharedCollection) with
-    code:ZX_DEFAULT_CHANNEL_RIGHTS rights
-****
-
-include::{generated}/validity/structs/VkBufferCollectionCreateInfoFUCHSIA.txt[]
---
-
-
-=== Set the constraints
-Buffer collections can be established for slink:VkImage allocations or
-slink:VkBuffer allocations.
-
-
-==== Set image-based buffer collection constraints
-
-[open,refpage='vkSetBufferCollectionImageConstraintsFUCHSIA',desc='Set image-based constraints for a buffer collection',type='protos']
---
-Setting the constraints on the buffer collection initiates the format
-negotiation and allocation of the buffer collection.
-To set the constraints on a slink:VkImage buffer collection, call:
-
-include::{generated}/api/protos/vkSetBufferCollectionImageConstraintsFUCHSIA.txt[]
-
-  * pname:device is the logical device
-  * pname:collection is the slink:VkBufferCollectionFUCHSIA handle
-  * pname:pImageConstraintsInfo is a pointer to a
-    slink:VkImageConstraintsInfoFUCHSIA structure
-
-fname:vkSetBufferCollectionImageConstraintsFUCHSIA may: fail if
-pname:pImageConstraintsInfo::pname:formatConstraintsCount is larger than the
-implementation-defined limit.
-If that occurs, flink:vkSetBufferCollectionImageConstraintsFUCHSIA will
-return VK_ERROR_INITIALIZATION_FAILED.
-
-fname:vkSetBufferCollectionImageConstraintsFUCHSIA may: fail if the
-implementation does not support any of the formats described by the
-pname:pImageConstraintsInfo structure.
-If that occurs, flink:vkSetBufferCollectionImageConstraintsFUCHSIA will
-return ename:VK_ERROR_FORMAT_NOT_SUPPORTED.
-
-.Valid Usage
-****
-  * [[VUID-vkSetBufferCollectionImageConstraintsFUCHSIA-collection-06394]]
-    fname:vkSetBufferCollectionImageConstraintsFUCHSIA or
-    fname:vkSetBufferCollectionBufferConstraintsFUCHSIA must: not have
-    already been called on pname:collection
-****
-
-include::{generated}/validity/protos/vkSetBufferCollectionImageConstraintsFUCHSIA.txt[]
---
-
-[open,refpage='VkImageConstraintsInfoFUCHSIA',desc='Structure of image-based buffer collection constraints',type='structs']
---
-The sname:VkImageConstraintsInfoFUCHSIA structure is defined as:
-
-include::{generated}/api/structs/VkImageConstraintsInfoFUCHSIA.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:formatConstraintsCount is the number of elements in
-    pname:pFormatConstraints.
-  * pname:pFormatConstraints is an array of
-    slink:VkImageFormatConstraintsInfoFUCHSIA structures of size
-    pname:formatConstraintsCount that is used to further constrain buffer
-    collection format selection for image-based buffer collections.
-  * pname:bufferCollectionConstraints is a
-    slink:VkBufferCollectionConstraintsInfoFUCHSIA structure used to supply
-    parameters for the negotiation and allocation for buffer-based buffer
-    collections.
-  * pname:flags is a elink:VkImageConstraintsInfoFlagBitsFUCHSIA value
-    specifying hints about the type of memory Sysmem should allocate for the
-    buffer collection.
-
-.Valid Usage
-****
-  * [[VUID-VkImageConstraintsInfoFUCHSIA-pFormatConstraints-06395]]
-    All elements of pname:pFormatConstraints must: have at least one bit set
-    in its
-    slink:VkImageFormatConstraintsInfoFUCHSIA::pname:requiredFormatFeatures
-  * [[VUID-VkImageConstraintsInfoFUCHSIA-pFormatConstraints-06396]]
-    If pname:pFormatConstraints::pname:imageCreateInfo::pname:usage contains
-    ename:VK_IMAGE_USAGE_SAMPLED_BIT, then
-    pname:pFormatConstraints::pname:requiredFormatFeatures must: contain
-    ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT
-  * [[VUID-VkImageConstraintsInfoFUCHSIA-pFormatConstraints-06397]]
-    If pname:pFormatConstraints::pname:imageCreateInfo::pname:usage contains
-    ename:VK_IMAGE_USAGE_STORAGE_BIT, then
-    pname:pFormatConstraints::pname:requiredFormatFeatures must: contain
-    ename:VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT
-  * [[VUID-VkImageConstraintsInfoFUCHSIA-pFormatConstraints-06398]]
-    If pname:pFormatConstraints::pname:imageCreateInfo::pname:usage contains
-    ename:VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT, then
-    pname:pFormatConstraints::pname:requiredFormatFeatures must: contain
-    ename:VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT
-  * [[VUID-VkImageConstraintsInfoFUCHSIA-pFormatConstraints-06399]]
-    If pname:pFormatConstraints::pname:imageCreateInfo::pname:usage contains
-    ename:VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT, then
-    pname:pFormatConstraints::pname:requiredFormatFeatures must: contain
-    ename:VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT
-  * [[VUID-VkImageConstraintsInfoFUCHSIA-pFormatConstraints-06400]]
-    If pname:pFormatConstraints::pname:imageCreateInfo::pname:usage contains
-    ename:VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT, then
-    pname:pFormatConstraints::pname:requiredFormatFeatures must: contain at
-    least one of ename:VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT or
-    ename:VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT
-ifdef::VK_KHR_fragment_shading_rate[]
-  * [[VUID-VkImageConstraintsInfoFUCHSIA-attachmentFragmentShadingRate-06401]]
-    If the <<features-attachmentFragmentShadingRate,
-    pname:attachmentFragmentShadingRate feature>> is enabled, and
-    pname:pFormatConstraints::pname:imageCreateInfo::pname:usage contains
-    ename:VK_IMAGE_USAGE_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR, then
-    pname:pFormatConstraints::pname:requiredFormatFeatures must: contain
-    ename:VK_FORMAT_FEATURE_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR
-endif::VK_KHR_fragment_shading_rate[]
-****
-
-include::{generated}/validity/structs/VkImageConstraintsInfoFUCHSIA.txt[]
---
-
-[open,refpage='VkImageConstraintsInfoFlagsFUCHSIA',desc='Reserved for future use',type='flags']
---
-include::{generated}/api/flags/VkImageConstraintsInfoFlagsFUCHSIA.txt[]
-
-tname:VkImageConstraintsInfoFlagsFUCHSIA is a bitmask type for setting a
-mask of zero or more elink:VkImageConstraintsInfoFlagBitsFUCHSIA bits.
---
-
-[open,refpage='VkImageConstraintsInfoFlagBitsFUCHSIA',desc='Bitmask specifying image constraints flags',type='enums']
---
-Bits which can: be set in
-elink:VkImageConstraintsInfoFlagBitsFUCHSIA::pname:flags include:
-
-include::{generated}/api/enums/VkImageConstraintsInfoFlagBitsFUCHSIA.txt[]
-
-General hints about the type of memory that should be allocated by Sysmem
-based on the expected usage of the images in the buffer collection include:
-
-  * ename:VK_IMAGE_CONSTRAINTS_INFO_CPU_READ_RARELY_FUCHSIA
-  * ename:VK_IMAGE_CONSTRAINTS_INFO_CPU_READ_OFTEN_FUCHSIA
-  * ename:VK_IMAGE_CONSTRAINTS_INFO_CPU_WRITE_RARELY_FUCHSIA
-  * ename:VK_IMAGE_CONSTRAINTS_INFO_CPU_WRITE_OFTEN_FUCHSIA
-
-For protected memory:
-
-  * ename:VK_IMAGE_CONSTRAINTS_INFO_PROTECTED_OPTIONAL_FUCHSIA specifies
-    that protected memory is optional for the buffer collection.
-
-Note that if all participants in the buffer collection (Vulkan or otherwise)
-specify that protected memory is optional, Sysmem will not allocate
-protected memory.
---
-
-[open,refpage='VkImageFormatConstraintsInfoFUCHSIA',desc='Structure image-based buffer collection constraints',type='structs']
---
-The sname:VkImageFormatConstraintsInfoFUCHSIA structure is defined as:
-
-include::{generated}/api/structs/VkImageFormatConstraintsInfoFUCHSIA.txt[]
-
-  * pname:sType is the type of this structure
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure
-  * pname:imageCreateInfo is the slink:VkImageCreateInfo used to create a
-    slink:VkImage that is to use memory from the
-    slink:VkBufferCollectionFUCHSIA
-  * pname:requiredFormatFeatures is a bitmask of
-    ename:VkFormatFeatureFlagBits specifying required features of the
-    buffers in the buffer collection
-  * pname:flags is reserved for future use
-  * pname:sysmemPixelFormat is a code:PixelFormatType value from the
-    `fuchsia.sysmem/image_formats.fidl` FIDL interface
-  * pname:colorSpaceCount the element count of pname:pColorSpaces
-  * pname:pColorSpaces is an array of slink:VkSysmemColorSpaceFUCHSIA
-    structs of size pname:colorSpaceCount
-
-include::{generated}/validity/structs/VkImageFormatConstraintsInfoFUCHSIA.txt[]
---
-
-[open,refpage='VkImageFormatConstraintsFlagsFUCHSIA',desc='Reserved for future use',type='flags']
---
-include::{generated}/api/flags/VkImageFormatConstraintsFlagsFUCHSIA.txt[]
-
-tname:VkImageFormatConstraintsFlagsFUCHSIA is a bitmask type for setting a
-mask, but is currently reserved for future use.
---
-
-[open,refpage='VkBufferCollectionConstraintsInfoFUCHSIA',desc='Structure of general buffer collection constraints',type='structs']
---
-The sname:VkBufferCollectionConstraintsInfoFUCHSIA structure is defined as:
-
-include::{generated}/api/structs/VkBufferCollectionConstraintsInfoFUCHSIA.txt[]
-
-  * pname:sType is the type of this structure
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure
-  * pname:minBufferCount is the minimum number of buffers available in the
-    collection
-  * pname:maxBufferCount is the maximum number of buffers allowed in the
-    collection
-  * pname:minBufferCountForCamping is the per-participant minimum buffers
-    for camping
-  * pname:minBufferCountForDedicatedSlack is the per-participant minimum
-    buffers for dedicated slack
-  * pname:minBufferCountForSharedSlack is the per-participant minimum
-    buffers for shared slack
-
-Sysmem uses all buffer count parameters in combination to determine the
-number of buffers it will allocate.
-Sysmem defines buffer count constraints in
-`fuchsia.sysmem/constraints.fidl`.
-
-_Camping_ as referred to by pname:minBufferCountForCamping, is the number of
-buffers that should be available for the participant that are not for
-transient use.
-This number of buffers is required for the participant to logically operate.
-
-_Slack_ as referred to by pname:minBufferCountForDedicatedSlack and
-pname:minBufferCountForSharedSlack, refers to the number of buffers desired
-by participants for optimal performance.
-pname:minBufferCountForDedicatedSlack refers to the current participant.
-pname:minBufferCountForSharedSlack refers to buffer slack for all
-participants in the collection.
-
-include::{generated}/validity/structs/VkBufferCollectionConstraintsInfoFUCHSIA.txt[]
---
-
-[open,refpage='VkSysmemColorSpaceFUCHSIA',desc='Structure describing the buffer collections color space',type='structs']
---
-
-The sname:VkSysmemColorSpaceFUCHSIA structure is defined as:
-
-include::{generated}/api/structs/VkSysmemColorSpaceFUCHSIA.txt[]
-
-  * pname:sType is the type of this structure
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure
-  * pname:colorSpace value of the Sysmem code:ColorSpaceType
-
-.Valid Usage
-****
-  * [[VUID-VkSysmemColorSpaceFUCHSIA-colorSpace-06402]]
-    pname:colorSpace must: be a code:ColorSpaceType as defined in
-    `fuchsia.sysmem/image_formats.fidl`
-****
-
-include::{generated}/validity/structs/VkSysmemColorSpaceFUCHSIA.txt[]
---
-
-
-==== Set buffer-based buffer collection constraints
-
-[open,refpage='vkSetBufferCollectionBufferConstraintsFUCHSIA',desc='Set buffer-based constraints for a buffer collection',type='protos']
---
-To set the constraints on a slink:VkBuffer buffer collection, call:
-
-include::{generated}/api/protos/vkSetBufferCollectionBufferConstraintsFUCHSIA.txt[]
-
-  * pname:device is the logical device
-  * pname:collection is the slink:VkBufferCollectionFUCHSIA handle
-  * pname:pBufferConstraintsInfo is a pointer to a
-    slink:VkBufferConstraintsInfoFUCHSIA structure
-
-fname:vkSetBufferCollectionBufferConstraintsFUCHSIA may: fail if the
-implementation does not support the constraints specified in the
-pname:bufferCollectionConstraints structure.
-If that occurs, flink:vkSetBufferCollectionBufferConstraintsFUCHSIA will
-return ename:VK_ERROR_FORMAT_NOT_SUPPORTED.
-
-.Valid Usage
-****
-  * [[VUID-vkSetBufferCollectionBufferConstraintsFUCHSIA-collection-06403]]
-    fname:vkSetBufferCollectionImageConstraintsFUCHSIA or
-    fname:vkSetBufferCollectionBufferConstraintsFUCHSIA must: not have
-    already been called on pname:collection
-****
-
-include::{generated}/validity/protos/vkSetBufferCollectionBufferConstraintsFUCHSIA.txt[]
---
-
-[open,refpage='VkBufferConstraintsInfoFUCHSIA',desc='Structure buffer-based buffer collection constraints',type='structs']
---
-The sname:VkBufferConstraintsInfoFUCHSIA structure is defined as:
-
-include::{generated}/api/structs/VkBufferConstraintsInfoFUCHSIA.txt[]
-
-  * pname:sType is the type of this structure
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure
-  * pname:pBufferCreateInfo a pointer to a slink:VkBufferCreateInfo struct
-    describing the buffer attributes for the buffer collection
-  * pname:requiredFormatFeatures bitmask of ename:VkFormatFeatureFlagBits
-    required features of the buffers in the buffer collection
-  * pname:bufferCollectionConstraints is used to supply parameters for the
-    negotiation and allocation of the buffer collection
-
-.Valid Usage
-****
-  * [[VUID-VkBufferConstraintsInfoFUCHSIA-requiredFormatFeatures-06404]]
-    The pname:requiredFormatFeatures bitmask of
-    ename:VkFormatFeatureFlagBits must: be chosen from among the buffer
-    compatible format features listed in
-    <<buffer-compatible-format-features,buffer compatible format features>>
-****
-
-include::{generated}/validity/structs/VkBufferConstraintsInfoFUCHSIA.txt[]
---
-
-
-=== Retrieve buffer collection properties
-
-[open,refpage='vkGetBufferCollectionPropertiesFUCHSIA',desc='Retrieve properties from a buffer collection',type='protos']
---
-After constraints have been set on the buffer collection by calling
-flink:vkSetBufferCollectionImageConstraintsFUCHSIA or
-flink:vkSetBufferCollectionBufferConstraintsFUCHSIA, call
-fname:vkGetBufferCollectionPropertiesFUCHSIA to retrieve the negotiated and
-finalized properties of the buffer collection.
-
-The call to fname:vkGetBufferCollectionPropertiesFUCHSIA is synchronous.
-It waits for the Sysmem format negotiation and buffer collection allocation
-to complete before returning.
-
-include::{generated}/api/protos/vkGetBufferCollectionPropertiesFUCHSIA.txt[]
-
-  * pname:device is the logical device handle
-  * pname:collection is the slink:VkBufferCollectionFUCHSIA handle
-  * pname:pProperties is a pointer to the retrieved
-    slink:VkBufferCollectionPropertiesFUCHSIA struct
-
-[[sysmem-chosen-create-infos]]
-For image-based buffer collections, upon calling
-fname:vkGetBufferCollectionPropertiesFUCHSIA, Sysmem will choose an element
-of the slink:VkImageConstraintsInfoFUCHSIA::pname:pImageCreateInfos
-established by the preceding call to
-flink:vkSetBufferCollectionImageConstraintsFUCHSIA.
-The index of the element chosen is stored in and can be retrieved from
-slink:VkBufferCollectionPropertiesFUCHSIA::pname:createInfoIndex.
-
-For buffer-based buffer collections, a single slink:VkBufferCreateInfo is
-specified as slink:VkBufferConstraintsInfoFUCHSIA::pname:createInfo.
-slink:VkBufferCollectionPropertiesFUCHSIA::pname:createInfoIndex will
-therefore always be zero.
-
-fname:vkGetBufferCollectionPropertiesFUCHSIA may: fail if Sysmem is unable
-to resolve the constraints of all of the participants in the buffer
-collection.
-If that occurs, fname:vkGetBufferCollectionPropertiesFUCHSIA will return
-ename:VK_ERROR_INITIALIZATION_FAILED.
-
-.Valid Usage
-****
-  * [[VUID-vkGetBufferCollectionPropertiesFUCHSIA-None-06405]]
-    Prior to calling flink:vkGetBufferCollectionPropertiesFUCHSIA, the
-    constraints on the buffer collection must: have been set by either
-    flink:vkSetBufferCollectionImageConstraintsFUCHSIA or
-    flink:vkSetBufferCollectionBufferConstraintsFUCHSIA.
-****
-
-include::{generated}/validity/protos/vkGetBufferCollectionPropertiesFUCHSIA.txt[]
---
-
-[open,refpage='VkBufferCollectionPropertiesFUCHSIA',desc='Structure specifying the negotiated format chosen by Sysmem',type='structs']
---
-
-The sname:VkBufferCollectionPropertiesFUCHSIA structure is defined as:
-
-include::{generated}/api/structs/VkBufferCollectionPropertiesFUCHSIA.txt[]
-
-  * pname:sType is the type of this structure
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure
-  * pname:memoryTypeBits is a bitmask containing one bit set for every
-    memory type which the buffer collection can be imported as buffer
-    collection
-  * pname:bufferCount is the number of buffers in the collection
-  * pname:createInfoIndex as described in <<sysmem-chosen-create-infos,
-    Sysmem chosen create infos>>
-  * pname:sysmemPixelFormat is the Sysmem code:PixelFormatType as defined in
-    `fuchsia.sysmem/image_formats.fidl`
-  * pname:formatFeatures is a bitmask of elink:VkFormatFeatureFlagBits
-    shared by the buffer collection
-  * pname:sysmemColorSpaceIndex is a slink:VkSysmemColorSpaceFUCHSIA struct
-    specifying the color space
-  * pname:samplerYcbcrConversionComponents is a slink:VkComponentMapping
-    struct specifying the component mapping
-  * pname:suggestedYcbcrModel is a elink:VkSamplerYcbcrModelConversion value
-    specifying the suggested {YCbCr} model
-  * pname:suggestedYcbcrRange is a elink:VkSamplerYcbcrRange value
-    specifying the suggested {YCbCr} range
-  * pname:suggestedXChromaOffset is a elink:VkChromaLocation value
-    specifying the suggested X chroma offset
-  * pname:suggestedYChromaOffset is a elink:VkChromaLocation value
-    specifying the suggested Y chroma offset
-
-pname:sysmemColorSpace is only set for image-based buffer collections where
-the constraints were specified using slink:VkImageConstraintsInfoFUCHSIA in
-a call to flink:vkSetBufferCollectionImageConstraintsFUCHSIA.
-
-For image-based buffer collections, pname:createInfoIndex will identify both
-the slink:VkImageConstraintsInfoFUCHSIA::pname:pImageCreateInfos element and
-the slink:VkImageConstraintsInfoFUCHSIA::pname:pFormatConstraints element
-chosen by Sysmem when flink:vkSetBufferCollectionImageConstraintsFUCHSIA was
-called.
-The value of pname:sysmemColorSpaceIndex will be an index to one of the
-color spaces provided in the
-slink:VkImageFormatConstraintsInfoFUCHSIA::pname:pColorSpaces array.
-
-The implementation must have pname:formatFeatures with all bits set that
-were set in
-slink:VkImageFormatConstraintsInfoFUCHSIA::pname:requiredFormatFeatures, by
-the call to flink:vkSetBufferCollectionImageConstraintsFUCHSIA, at
-pname:createInfoIndex (other bits could be set as well).
-
-include::{generated}/validity/structs/VkBufferCollectionPropertiesFUCHSIA.txt[]
---
-
-
-=== Memory allocation
-
-To import memory from a buffer collection into a slink:VkImage or a
-slink:VkBuffer, chain a slink:VkImportMemoryBufferCollectionFUCHSIA
-structure to the pname:pNext member of the slink:VkMemoryAllocateInfo in the
-call to flink:vkAllocateMemory.
-
-[open,refpage='VkImportMemoryBufferCollectionFUCHSIA',desc='Structure to specify the Sysmem buffer to import',type='structs']
---
-The sname:VkImportMemoryBufferCollectionFUCHSIA structure is defined as:
-
-include::{generated}/api/structs/VkImportMemoryBufferCollectionFUCHSIA.txt[]
-
-  * pname:sType is the type of this structure
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure
-  * pname:collection is the slink:VkBufferCollectionFUCHSIA handle
-  * pname:index the index of the buffer to import from pname:collection
-
-.Valid Usage
-****
-  * [[VUID-VkImportMemoryBufferCollectionFUCHSIA-index-06406]]
-    pname:index must: be less than the value retrieved as
-    slink:VkBufferCollectionPropertiesFUCHSIA:bufferCount
-****
-
-include::{generated}/validity/structs/VkImportMemoryBufferCollectionFUCHSIA.txt[]
---
-
-[open,refpage='vkDestroyBufferCollectionFUCHSIA',desc='Destroy a buffer collection',type='protos']
---
-To release a slink:VkBufferCollectionFUCHSIA:
-
-include::{generated}/api/protos/vkDestroyBufferCollectionFUCHSIA.txt[]
-
-  * pname:device is the logical device that creates the
-    sname:VkBufferCollectionFUCHSIA
-  * pname:collection is the slink:VkBufferCollectionFUCHSIA handle
-  * pname:pAllocator is a pointer to a slink:VkAllocationCallbacks structure
-    which controls host memory allocation as described in the
-    <<memory-allocation, Memory Allocation>> chapter
-
-.Valid Usage
-****
-  * [[VUID-vkDestroyBufferCollectionFUCHSIA-collection-06407]]
-    slink:VkImage and slink:VkBuffer objects that referenced
-    pname:collection upon creation by inclusion of a
-    slink:VkBufferCollectionImageCreateInfoFUCHSIA or
-    slink:VkBufferCollectionBufferCreateInfoFUCHSIA chained to their
-    slink:VkImageCreateInfo or slink:VkBufferCreateInfo structures
-    respectively, may: outlive pname:collection.
-****
-
-include::{generated}/validity/protos/vkDestroyBufferCollectionFUCHSIA.txt[]
---
-endif::VK_FUCHSIA_buffer_collection[]
diff --git a/registry/vulkan/chapters/samplers.txt b/registry/vulkan/chapters/samplers.txt
deleted file mode 100644
index 726b4a7..0000000
--- a/registry/vulkan/chapters/samplers.txt
+++ /dev/null
@@ -1,1025 +0,0 @@
-// Copyright 2015-2021 The Khronos Group, Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-[[samplers]]
-= Samplers
-
-[open,refpage='VkSampler',desc='Opaque handle to a sampler object',type='handles']
---
-sname:VkSampler objects represent the state of an image sampler which is
-used by the implementation to read image data and apply filtering and other
-transformations for the shader.
-
-Samplers are represented by sname:VkSampler handles:
-
-include::{generated}/api/handles/VkSampler.txt[]
---
-
-[open,refpage='vkCreateSampler',desc='Create a new sampler object',type='protos']
---
-To create a sampler object, call:
-
-include::{generated}/api/protos/vkCreateSampler.txt[]
-
-  * pname:device is the logical device that creates the sampler.
-  * pname:pCreateInfo is a pointer to a slink:VkSamplerCreateInfo structure
-    specifying the state of the sampler object.
-  * pname:pAllocator controls host memory allocation as described in the
-    <<memory-allocation, Memory Allocation>> chapter.
-  * pname:pSampler is a pointer to a slink:VkSampler handle in which the
-    resulting sampler object is returned.
-
-.Valid Usage
-****
-  * [[VUID-vkCreateSampler-maxSamplerAllocationCount-04110]]
-    There must: be less than
-    slink:VkPhysicalDeviceLimits::pname:maxSamplerAllocationCount
-    slink:VkSampler objects currently created on the device
-****
-
-include::{generated}/validity/protos/vkCreateSampler.txt[]
---
-
-[open,refpage='VkSamplerCreateInfo',desc='Structure specifying parameters of a newly created sampler',type='structs']
---
-The sname:VkSamplerCreateInfo structure is defined as:
-
-include::{generated}/api/structs/VkSamplerCreateInfo.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:flags is a bitmask of elink:VkSamplerCreateFlagBits describing
-    additional parameters of the sampler.
-  * pname:magFilter is a elink:VkFilter value specifying the magnification
-    filter to apply to lookups.
-  * pname:minFilter is a elink:VkFilter value specifying the minification
-    filter to apply to lookups.
-  * pname:mipmapMode is a elink:VkSamplerMipmapMode value specifying the
-    mipmap filter to apply to lookups.
-  * pname:addressModeU is a elink:VkSamplerAddressMode value specifying the
-    addressing mode for U coordinates outside [eq]#[0,1)#.
-  * pname:addressModeV is a elink:VkSamplerAddressMode value specifying the
-    addressing mode for V coordinates outside [eq]#[0,1)#.
-  * pname:addressModeW is a elink:VkSamplerAddressMode value specifying the
-    addressing mode for W coordinates outside [eq]#[0,1)#.
-  * [[samplers-mipLodBias]] pname:mipLodBias is the bias to be added to
-    mipmap LOD (level-of-detail) calculation and bias provided by image
-    sampling functions in SPIR-V, as described in the
-    <<textures-level-of-detail-operation, Level-of-Detail Operation>>
-    section.
-  * [[samplers-maxAnisotropy]] pname:anisotropyEnable is ename:VK_TRUE to
-    enable anisotropic filtering, as described in the
-    <<textures-texel-anisotropic-filtering, Texel Anisotropic Filtering>>
-    section, or ename:VK_FALSE otherwise.
-  * pname:maxAnisotropy is the anisotropy value clamp used by the sampler
-    when pname:anisotropyEnable is ename:VK_TRUE.
-    If pname:anisotropyEnable is ename:VK_FALSE, pname:maxAnisotropy is
-    ignored.
-  * pname:compareEnable is ename:VK_TRUE to enable comparison against a
-    reference value during lookups, or ename:VK_FALSE otherwise.
-  ** Note: Some implementations will default to shader state if this member
-     does not match.
-  * pname:compareOp is a elink:VkCompareOp value specifying the comparison
-    function to apply to fetched data before filtering as described in the
-    <<textures-depth-compare-operation, Depth Compare Operation>> section.
-  * pname:minLod is used to clamp the <<textures-level-of-detail-operation,
-    minimum of the computed LOD value>>.
-  * pname:maxLod is used to clamp the <<textures-level-of-detail-operation,
-    maximum of the computed LOD value>>.
-    To avoid clamping the maximum value, set pname:maxLod to the constant
-    ename:VK_LOD_CLAMP_NONE.
-  * pname:borderColor is a elink:VkBorderColor value specifying the
-    predefined border color to use.
-  * [[samplers-unnormalizedCoordinates]] pname:unnormalizedCoordinates
-    controls whether to use unnormalized or normalized texel coordinates to
-    address texels of the image.
-    When set to ename:VK_TRUE, the range of the image coordinates used to
-    lookup the texel is in the range of zero to the image size in each
-    dimension.
-    When set to ename:VK_FALSE the range of image coordinates is zero to
-    one.
-+
-When pname:unnormalizedCoordinates is ename:VK_TRUE, images the sampler is
-used with in the shader have the following requirements:
-+
-  ** The pname:viewType must: be either ename:VK_IMAGE_VIEW_TYPE_1D or
-     ename:VK_IMAGE_VIEW_TYPE_2D.
-  ** The image view must: have a single layer and a single mip level.
-+
-When pname:unnormalizedCoordinates is ename:VK_TRUE, image built-in
-functions in the shader that use the sampler have the following
-requirements:
-+
-  ** The functions must: not use projection.
-  ** The functions must: not use offsets.
-
-[NOTE]
-.Mapping of OpenGL to Vulkan filter modes
-====
-pname:magFilter values of ename:VK_FILTER_NEAREST and ename:VK_FILTER_LINEAR
-directly correspond to code:GL_NEAREST and code:GL_LINEAR magnification
-filters.
-pname:minFilter and pname:mipmapMode combine to correspond to the similarly
-named OpenGL minification filter of code:GL_minFilter_MIPMAP_mipmapMode
-(e.g. pname:minFilter of ename:VK_FILTER_LINEAR and pname:mipmapMode of
-ename:VK_SAMPLER_MIPMAP_MODE_NEAREST correspond to
-code:GL_LINEAR_MIPMAP_NEAREST).
-
-There are no Vulkan filter modes that directly correspond to OpenGL
-minification filters of code:GL_LINEAR or code:GL_NEAREST, but they can: be
-emulated using ename:VK_SAMPLER_MIPMAP_MODE_NEAREST, pname:minLod = 0, and
-pname:maxLod = 0.25, and using pname:minFilter = ename:VK_FILTER_LINEAR or
-pname:minFilter = ename:VK_FILTER_NEAREST, respectively.
-
-Note that using a pname:maxLod of zero would cause
-<<textures-texel-filtering,magnification>> to always be performed, and the
-pname:magFilter to always be used.
-This is valid, just not an exact match for OpenGL behavior.
-Clamping the maximum LOD to 0.25 allows the [eq]#{lambda}# value to be
-non-zero and minification to be performed, while still always rounding down
-to the base level.
-If the pname:minFilter and pname:magFilter are equal, then using a
-pname:maxLod of zero also works.
-====
-
-The maximum number of sampler objects which can: be simultaneously created
-on a device is implementation-dependent and specified by the
-<<limits-maxSamplerAllocationCount,maxSamplerAllocationCount>> member of the
-slink:VkPhysicalDeviceLimits structure.
-
-[NOTE]
-.Note
-====
-For historical reasons, if pname:maxSamplerAllocationCount is exceeded, some
-implementations may return ename:VK_ERROR_TOO_MANY_OBJECTS.
-Exceeding this limit will result in undefined: behavior, and an application
-should not rely on the use of the returned error code in order to identify
-when the limit is reached.
-====
-
-Since slink:VkSampler is a non-dispatchable handle type, implementations
-may: return the same handle for sampler state vectors that are identical.
-In such cases, all such objects would only count once against the
-pname:maxSamplerAllocationCount limit.
-
-.Valid Usage
-****
-  * [[VUID-VkSamplerCreateInfo-mipLodBias-01069]]
-    The absolute value of pname:mipLodBias must: be less than or equal to
-    sname:VkPhysicalDeviceLimits::pname:maxSamplerLodBias
-ifdef::VK_KHR_portability_subset[]
-  * [[VUID-VkSamplerCreateInfo-samplerMipLodBias-04467]]
-    If the `apiext:VK_KHR_portability_subset` extension is enabled, and
-    slink:VkPhysicalDevicePortabilitySubsetFeaturesKHR::pname:samplerMipLodBias
-    is ename:VK_FALSE, pname:mipLodBias must: be zero
-endif::VK_KHR_portability_subset[]
-  * [[VUID-VkSamplerCreateInfo-maxLod-01973]]
-    pname:maxLod must: be greater than or equal to pname:minLod
-  * [[VUID-VkSamplerCreateInfo-anisotropyEnable-01070]]
-    If the <<features-samplerAnisotropy,anisotropic sampling>> feature is
-    not enabled, pname:anisotropyEnable must: be ename:VK_FALSE
-  * [[VUID-VkSamplerCreateInfo-anisotropyEnable-01071]]
-    If pname:anisotropyEnable is ename:VK_TRUE, pname:maxAnisotropy must: be
-    between `1.0` and
-    sname:VkPhysicalDeviceLimits::pname:maxSamplerAnisotropy, inclusive
-ifdef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
-  * [[VUID-VkSamplerCreateInfo-minFilter-01645]]
-    If <<samplers-YCbCr-conversion,sampler {YCbCr} conversion>> is enabled
-    and the <<potential-format-features, potential format features>> of the
-    sampler {YCbCr} conversion do not support
-    ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_SEPARATE_RECONSTRUCTION_FILTER_BIT,
-    pname:minFilter and pname:magFilter must: be equal to the sampler
-    {YCbCr} conversion's pname:chromaFilter
-endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
-  * [[VUID-VkSamplerCreateInfo-unnormalizedCoordinates-01072]]
-    If pname:unnormalizedCoordinates is ename:VK_TRUE, pname:minFilter and
-    pname:magFilter must: be equal
-  * [[VUID-VkSamplerCreateInfo-unnormalizedCoordinates-01073]]
-    If pname:unnormalizedCoordinates is ename:VK_TRUE, pname:mipmapMode
-    must: be ename:VK_SAMPLER_MIPMAP_MODE_NEAREST
-  * [[VUID-VkSamplerCreateInfo-unnormalizedCoordinates-01074]]
-    If pname:unnormalizedCoordinates is ename:VK_TRUE, pname:minLod and
-    pname:maxLod must: be zero
-  * [[VUID-VkSamplerCreateInfo-unnormalizedCoordinates-01075]]
-    If pname:unnormalizedCoordinates is ename:VK_TRUE, pname:addressModeU
-    and pname:addressModeV must: each be either
-    ename:VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE or
-    ename:VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_BORDER
-  * [[VUID-VkSamplerCreateInfo-unnormalizedCoordinates-01076]]
-    If pname:unnormalizedCoordinates is ename:VK_TRUE,
-    pname:anisotropyEnable must: be ename:VK_FALSE
-  * [[VUID-VkSamplerCreateInfo-unnormalizedCoordinates-01077]]
-    If pname:unnormalizedCoordinates is ename:VK_TRUE, pname:compareEnable
-    must: be ename:VK_FALSE
-  * [[VUID-VkSamplerCreateInfo-addressModeU-01078]]
-    If any of pname:addressModeU, pname:addressModeV or pname:addressModeW
-    are ename:VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_BORDER, pname:borderColor
-    must: be a valid elink:VkBorderColor value
-ifdef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
-  * [[VUID-VkSamplerCreateInfo-addressModeU-01646]]
-    If <<samplers-YCbCr-conversion,sampler {YCbCr} conversion>> is enabled,
-    pname:addressModeU, pname:addressModeV, and pname:addressModeW must: be
-    ename:VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE, pname:anisotropyEnable
-    must: be ename:VK_FALSE, and pname:unnormalizedCoordinates must: be
-    ename:VK_FALSE
-ifdef::VK_VERSION_1_2,VK_EXT_sampler_filter_minmax[]
-  * [[VUID-VkSamplerCreateInfo-None-01647]]
-    The sampler reduction mode must: be set to
-    ename:VK_SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE if
-    <<samplers-YCbCr-conversion,sampler {YCbCr} conversion>> is enabled
-endif::VK_VERSION_1_2,VK_EXT_sampler_filter_minmax[]
-endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
-  * [[VUID-VkSamplerCreateInfo-addressModeU-01079]]
-    If <<features-samplerMirrorClampToEdge,samplerMirrorClampToEdge>> is not
-    enabled, and if the `apiext:VK_KHR_sampler_mirror_clamp_to_edge`
-    extension is not enabled, pname:addressModeU, pname:addressModeV and
-    pname:addressModeW must: not be
-    ename:VK_SAMPLER_ADDRESS_MODE_MIRROR_CLAMP_TO_EDGE
-  * [[VUID-VkSamplerCreateInfo-compareEnable-01080]]
-    If pname:compareEnable is ename:VK_TRUE, pname:compareOp must: be a
-    valid elink:VkCompareOp value
-ifdef::VK_IMG_filter_cubic,VK_EXT_filter_cubic[]
-  * [[VUID-VkSamplerCreateInfo-magFilter-01081]]
-    If either pname:magFilter or pname:minFilter is
-    ename:VK_FILTER_CUBIC_EXT, pname:anisotropyEnable must: be
-    ename:VK_FALSE
-endif::VK_IMG_filter_cubic,VK_EXT_filter_cubic[]
-ifdef::VK_IMG_filter_cubic+VK_EXT_sampler_filter_minmax[]
-ifndef::VK_EXT_filter_cubic[]
-  * [[VUID-VkSamplerCreateInfo-magFilter-01422]]
-    If either pname:magFilter or pname:minFilter is
-    ename:VK_FILTER_CUBIC_EXT, the pname:reductionMode member of
-    slink:VkSamplerReductionModeCreateInfo must: be
-    ename:VK_SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE
-endif::VK_EXT_filter_cubic[]
-endif::VK_IMG_filter_cubic+VK_EXT_sampler_filter_minmax[]
-ifdef::VK_VERSION_1_2,VK_EXT_sampler_filter_minmax[]
-  * [[VUID-VkSamplerCreateInfo-compareEnable-01423]]
-    If pname:compareEnable is ename:VK_TRUE, the pname:reductionMode member
-    of slink:VkSamplerReductionModeCreateInfo must: be
-    ename:VK_SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE
-endif::VK_VERSION_1_2,VK_EXT_sampler_filter_minmax[]
-ifdef::VK_EXT_fragment_density_map[]
-  * [[VUID-VkSamplerCreateInfo-flags-02574]]
-    If pname:flags includes ename:VK_SAMPLER_CREATE_SUBSAMPLED_BIT_EXT, then
-    pname:minFilter and pname:magFilter must: be equal
-  * [[VUID-VkSamplerCreateInfo-flags-02575]]
-    If pname:flags includes ename:VK_SAMPLER_CREATE_SUBSAMPLED_BIT_EXT, then
-    pname:mipmapMode must: be ename:VK_SAMPLER_MIPMAP_MODE_NEAREST
-  * [[VUID-VkSamplerCreateInfo-flags-02576]]
-    If pname:flags includes ename:VK_SAMPLER_CREATE_SUBSAMPLED_BIT_EXT, then
-    pname:minLod and pname:maxLod must: be zero
-  * [[VUID-VkSamplerCreateInfo-flags-02577]]
-    If pname:flags includes ename:VK_SAMPLER_CREATE_SUBSAMPLED_BIT_EXT, then
-    pname:addressModeU and pname:addressModeV must: each be either
-    ename:VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE or
-    ename:VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_BORDER
-  * [[VUID-VkSamplerCreateInfo-flags-02578]]
-    If pname:flags includes ename:VK_SAMPLER_CREATE_SUBSAMPLED_BIT_EXT, then
-    pname:anisotropyEnable must: be ename:VK_FALSE
-  * [[VUID-VkSamplerCreateInfo-flags-02579]]
-    If pname:flags includes ename:VK_SAMPLER_CREATE_SUBSAMPLED_BIT_EXT, then
-    pname:compareEnable must: be ename:VK_FALSE
-  * [[VUID-VkSamplerCreateInfo-flags-02580]]
-    If pname:flags includes ename:VK_SAMPLER_CREATE_SUBSAMPLED_BIT_EXT, then
-    pname:unnormalizedCoordinates must: be ename:VK_FALSE
-endif::VK_EXT_fragment_density_map[]
-ifdef::VK_EXT_custom_border_color[]
-  * [[VUID-VkSamplerCreateInfo-borderColor-04011]]
-    If pname:borderColor is one of ename:VK_BORDER_COLOR_FLOAT_CUSTOM_EXT or
-    ename:VK_BORDER_COLOR_INT_CUSTOM_EXT, then a
-    slink:VkSamplerCustomBorderColorCreateInfoEXT must: be included in the
-    pname:pNext chain
-  * [[VUID-VkSamplerCreateInfo-customBorderColors-04085]]
-    If the <<features-customBorderColors, pname:customBorderColors>> feature
-    is not enabled, pname:borderColor must: not be
-    ename:VK_BORDER_COLOR_FLOAT_CUSTOM_EXT or
-    ename:VK_BORDER_COLOR_INT_CUSTOM_EXT
-  * [[VUID-VkSamplerCreateInfo-borderColor-04442]]
-    If pname:borderColor is one of ename:VK_BORDER_COLOR_FLOAT_CUSTOM_EXT or
-    ename:VK_BORDER_COLOR_INT_CUSTOM_EXT, and
-    slink:VkSamplerCustomBorderColorCreateInfoEXT::pname:format is not
-    ename:VK_FORMAT_UNDEFINED,
-    slink:VkSamplerCustomBorderColorCreateInfoEXT::pname:customBorderColor
-    must: be within the range of values representable in pname:format
-  * [[VUID-VkSamplerCreateInfo-None-04012]]
-    The maximum number of samplers with custom border colors which can: be
-    simultaneously created on a device is implementation-dependent and
-    specified by the
-    <<limits-maxCustomBorderColorSamplers,maxCustomBorderColorSamplers>>
-    member of the slink:VkPhysicalDeviceCustomBorderColorPropertiesEXT
-    structure
-endif::VK_EXT_custom_border_color[]
-****
-
-include::{generated}/validity/structs/VkSamplerCreateInfo.txt[]
---
-
-[open,refpage='VK_LOD_CLAMP_NONE',desc='Maximum level of detail unclamped access sentinel',type='consts']
---
-ename:VK_LOD_CLAMP_NONE is a special constant value used for
-slink:VkSamplerCreateInfo::pname:maxLod to indicate that maximum LOD
-clamping should not be performed.
-
-include::{generated}/api/enums/VK_LOD_CLAMP_NONE.txt[]
---
-
-[open,refpage='VkSamplerCreateFlagBits',desc='Bitmask specifying additional parameters of sampler',type='enums']
---
-Bits which can: be set in slink:VkSamplerCreateInfo::pname:flags, specifying
-additional parameters of a sampler, are:
-
-include::{generated}/api/enums/VkSamplerCreateFlagBits.txt[]
-
-ifdef::VK_EXT_fragment_density_map[]
-  * [[samplers-subsamplesampler]] ename:VK_SAMPLER_CREATE_SUBSAMPLED_BIT_EXT
-    specifies that the sampler will read from an image created with
-    pname:flags containing ename:VK_IMAGE_CREATE_SUBSAMPLED_BIT_EXT.
-  * ename:VK_SAMPLER_CREATE_SUBSAMPLED_COARSE_RECONSTRUCTION_BIT_EXT
-    specifies that the implementation may: use approximations when
-    reconstructing a full color value for texture access from a subsampled
-    image.
-
-[NOTE]
-.Note
-====
-The approximations used when
-ename:VK_SAMPLER_CREATE_SUBSAMPLED_COARSE_RECONSTRUCTION_BIT_EXT is
-specified are implementation defined.
-Some implementations may: interpolate between fragment density levels in a
-subsampled image.
-In that case, this bit may: be used to decide whether the interpolation
-factors are calculated per fragment or at a coarser granularity.
-====
-endif::VK_EXT_fragment_density_map[]
---
-
-[open,refpage='VkSamplerCreateFlags',desc='Reserved for future use',type='flags']
---
-include::{generated}/api/flags/VkSamplerCreateFlags.txt[]
-
-tname:VkSamplerCreateFlags is a bitmask type for setting a mask of zero or
-more elink:VkSamplerCreateFlagBits.
---
-
-ifdef::VK_VERSION_1_2,VK_EXT_sampler_filter_minmax[]
-[open,refpage='VkSamplerReductionModeCreateInfo',desc='Structure specifying sampler reduction mode',type='structs',alias='VkSamplerReductionModeCreateInfoEXT']
---
-The sname:VkSamplerReductionModeCreateInfo structure is defined as:
-
-include::{generated}/api/structs/VkSamplerReductionModeCreateInfo.txt[]
-
-ifdef::VK_EXT_sampler_filter_minmax[]
-or the equivalent
-
-include::{generated}/api/structs/VkSamplerReductionModeCreateInfoEXT.txt[]
-endif::VK_EXT_sampler_filter_minmax[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:reductionMode is a elink:VkSamplerReductionMode value controlling
-    how texture filtering combines texel values.
-
-If the pname:pNext chain of slink:VkSamplerCreateInfo includes a
-sname:VkSamplerReductionModeCreateInfo structure, then that structure
-includes a mode that controls how texture filtering combines texel values.
-
-If this structure is not present, pname:reductionMode is considered to be
-ename:VK_SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE.
-
-include::{generated}/validity/structs/VkSamplerReductionModeCreateInfo.txt[]
---
-
-[open,refpage='VkSamplerReductionMode',desc='Specify reduction mode for texture filtering',type='enums',alias='VkSamplerReductionModeEXT']
---
-Reduction modes are specified by elink:VkSamplerReductionMode, which takes
-values:
-
-include::{generated}/api/enums/VkSamplerReductionMode.txt[]
-
-ifdef::VK_EXT_sampler_filter_minmax[]
-or the equivalent
-
-include::{generated}/api/enums/VkSamplerReductionModeEXT.txt[]
-endif::VK_EXT_sampler_filter_minmax[]
-
-  * ename:VK_SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE specifies that texel
-    values are combined by computing a weighted average of values in the
-    footprint, using weights as specified in
-    <<textures-unnormalized-to-integer,the image operations chapter>>.
-  * ename:VK_SAMPLER_REDUCTION_MODE_MIN specifies that texel values are
-    combined by taking the component-wise minimum of values in the footprint
-    with non-zero weights.
-  * ename:VK_SAMPLER_REDUCTION_MODE_MAX specifies that texel values are
-    combined by taking the component-wise maximum of values in the footprint
-    with non-zero weights.
---
-endif::VK_VERSION_1_2,VK_EXT_sampler_filter_minmax[]
-
-[open,refpage='VkFilter',desc='Specify filters used for texture lookups',type='enums']
---
-Possible values of the slink:VkSamplerCreateInfo::pname:magFilter and
-pname:minFilter parameters, specifying filters used for texture lookups,
-are:
-
-include::{generated}/api/enums/VkFilter.txt[]
-
-  * ename:VK_FILTER_NEAREST specifies nearest filtering.
-  * ename:VK_FILTER_LINEAR specifies linear filtering.
-ifdef::VK_IMG_filter_cubic,VK_EXT_filter_cubic[]
-  * ename:VK_FILTER_CUBIC_EXT specifies cubic filtering.
-endif::VK_IMG_filter_cubic,VK_EXT_filter_cubic[]
-
-These filters are described in detail in <<textures-texel-filtering, Texel
-Filtering>>.
---
-
-[open,refpage='VkSamplerMipmapMode',desc='Specify mipmap mode used for texture lookups',type='enums']
---
-Possible values of the slink:VkSamplerCreateInfo::pname:mipmapMode,
-specifying the mipmap mode used for texture lookups, are:
-
-include::{generated}/api/enums/VkSamplerMipmapMode.txt[]
-
-  * ename:VK_SAMPLER_MIPMAP_MODE_NEAREST specifies nearest filtering.
-  * ename:VK_SAMPLER_MIPMAP_MODE_LINEAR specifies linear filtering.
-
-These modes are described in detail in <<textures-texel-filtering, Texel
-Filtering>>.
---
-
-[open,refpage='VkSamplerAddressMode',desc='Specify behavior of sampling with texture coordinates outside an image',type='enums']
---
-Possible values of the slink:VkSamplerCreateInfo::ptext:addressMode*
-parameters, specifying the behavior of sampling with coordinates outside the
-range [eq]#[0,1]# for the respective [eq]#u#, [eq]#v#, or [eq]#w# coordinate
-as defined in the <<textures-wrapping-operation, Wrapping Operation>>
-section, are:
-
-include::{generated}/api/enums/VkSamplerAddressMode.txt[]
-
-  * ename:VK_SAMPLER_ADDRESS_MODE_REPEAT specifies that the repeat wrap mode
-    will be used.
-  * ename:VK_SAMPLER_ADDRESS_MODE_MIRRORED_REPEAT specifies that the
-    mirrored repeat wrap mode will be used.
-  * ename:VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE specifies that the clamp to
-    edge wrap mode will be used.
-  * ename:VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_BORDER specifies that the clamp
-    to border wrap mode will be used.
-ifdef::VK_VERSION_1_2,VK_KHR_sampler_mirror_clamp_to_edge[]
-  * ename:VK_SAMPLER_ADDRESS_MODE_MIRROR_CLAMP_TO_EDGE specifies that the
-    mirror clamp to edge wrap mode will be used.
-    This is only valid if
-ifdef::VK_VERSION_1_2[<<features-samplerMirrorClampToEdge,samplerMirrorClampToEdge>> is enabled, or if]
-    the `apiext:VK_KHR_sampler_mirror_clamp_to_edge` extension is enabled.
-endif::VK_VERSION_1_2,VK_KHR_sampler_mirror_clamp_to_edge[]
---
-
-[open,refpage='VkBorderColor',desc='Specify border color used for texture lookups',type='enums']
---
-Possible values of slink:VkSamplerCreateInfo::pname:borderColor, specifying
-the border color used for texture lookups, are:
-
-include::{generated}/api/enums/VkBorderColor.txt[]
-
-  * ename:VK_BORDER_COLOR_FLOAT_TRANSPARENT_BLACK specifies a transparent,
-    floating-point format, black color.
-  * ename:VK_BORDER_COLOR_INT_TRANSPARENT_BLACK specifies a transparent,
-    integer format, black color.
-  * ename:VK_BORDER_COLOR_FLOAT_OPAQUE_BLACK specifies an opaque,
-    floating-point format, black color.
-  * ename:VK_BORDER_COLOR_INT_OPAQUE_BLACK specifies an opaque, integer
-    format, black color.
-  * ename:VK_BORDER_COLOR_FLOAT_OPAQUE_WHITE specifies an opaque,
-    floating-point format, white color.
-  * ename:VK_BORDER_COLOR_INT_OPAQUE_WHITE specifies an opaque, integer
-    format, white color.
-ifdef::VK_EXT_custom_border_color[]
-  * ename:VK_BORDER_COLOR_FLOAT_CUSTOM_EXT indicates that a
-    slink:VkSamplerCustomBorderColorCreateInfoEXT structure is included in
-    the slink:VkSamplerCreateInfo::pname:pNext chain which contains the
-    color data in floating-point format.
-  * ename:VK_BORDER_COLOR_INT_CUSTOM_EXT indicates that a
-    slink:VkSamplerCustomBorderColorCreateInfoEXT structure is included in
-    the slink:VkSamplerCreateInfo::pname:pNext chain which contains the
-    color data in integer format.
-endif::VK_EXT_custom_border_color[]
-
-These colors are described in detail in <<textures-texel-replacement, Texel
-Replacement>>.
---
-
-[open,refpage='vkDestroySampler',desc='Destroy a sampler object',type='protos']
---
-To destroy a sampler, call:
-
-include::{generated}/api/protos/vkDestroySampler.txt[]
-
-  * pname:device is the logical device that destroys the sampler.
-  * pname:sampler is the sampler to destroy.
-  * pname:pAllocator controls host memory allocation as described in the
-    <<memory-allocation, Memory Allocation>> chapter.
-
-.Valid Usage
-****
-  * [[VUID-vkDestroySampler-sampler-01082]]
-    All submitted commands that refer to pname:sampler must: have completed
-    execution
-  * [[VUID-vkDestroySampler-sampler-01083]]
-    If sname:VkAllocationCallbacks were provided when pname:sampler was
-    created, a compatible set of callbacks must: be provided here
-  * [[VUID-vkDestroySampler-sampler-01084]]
-    If no sname:VkAllocationCallbacks were provided when pname:sampler was
-    created, pname:pAllocator must: be `NULL`
-****
-
-include::{generated}/validity/protos/vkDestroySampler.txt[]
---
-
-
-ifdef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
-[[samplers-YCbCr-conversion]]
-== Sampler {YCbCr} conversion
-
-[open,refpage='VkSamplerYcbcrConversionInfo',desc='Structure specifying {YCbCr} conversion to a sampler or image view',type='structs']
---
-To create a sampler with {YCbCr} conversion enabled, add a
-slink:VkSamplerYcbcrConversionInfo structure to the pname:pNext chain of the
-slink:VkSamplerCreateInfo structure.
-To create a sampler {YCbCr} conversion, the
-<<features-samplerYcbcrConversion,pname:samplerYcbcrConversion feature>>
-must: be enabled.
-Conversion must: be fixed at pipeline creation time, through use of a
-combined image sampler with an immutable sampler in
-sname:VkDescriptorSetLayoutBinding.
-
-A slink:VkSamplerYcbcrConversionInfo must: be provided for samplers to be
-used with image views that access ename:VK_IMAGE_ASPECT_COLOR_BIT if the
-format is one of the <<formats-requiring-sampler-ycbcr-conversion, formats
-that require a sampler Y'C~B~C~R~ conversion>>
-ifdef::VK_ANDROID_external_memory_android_hardware_buffer[]
-, or if the image view has an
-<<memory-external-android-hardware-buffer-external-formats,external format>>
-endif::VK_ANDROID_external_memory_android_hardware_buffer[]
-.
-
-The sname:VkSamplerYcbcrConversionInfo structure is defined as:
-
-include::{generated}/api/structs/VkSamplerYcbcrConversionInfo.txt[]
-
-ifdef::VK_KHR_sampler_ycbcr_conversion[]
-or the equivalent
-
-include::{generated}/api/structs/VkSamplerYcbcrConversionInfoKHR.txt[]
-endif::VK_KHR_sampler_ycbcr_conversion[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:conversion is a slink:VkSamplerYcbcrConversion handle created with
-    flink:vkCreateSamplerYcbcrConversion.
-
-include::{generated}/validity/structs/VkSamplerYcbcrConversionInfo.txt[]
---
-
-[open,refpage='VkSamplerYcbcrConversion',desc='Opaque handle to a device-specific sampler {YCbCr} conversion description',type='handles']
---
-A sampler {YCbCr} conversion is an opaque representation of a
-device-specific sampler {YCbCr} conversion description, represented as a
-sname:VkSamplerYcbcrConversion handle:
-
-include::{generated}/api/handles/VkSamplerYcbcrConversion.txt[]
-
-ifdef::VK_KHR_sampler_ycbcr_conversion[]
-or the equivalent
-
-include::{generated}/api/handles/VkSamplerYcbcrConversionKHR.txt[]
-endif::VK_KHR_sampler_ycbcr_conversion[]
---
-
-[open,refpage='vkCreateSamplerYcbcrConversion',desc='Create a new {YCbCr} conversion',type='protos']
---
-To create a slink:VkSamplerYcbcrConversion, call:
-
-ifdef::VK_VERSION_1_1[]
-include::{generated}/api/protos/vkCreateSamplerYcbcrConversion.txt[]
-endif::VK_VERSION_1_1[]
-
-ifdef::VK_VERSION_1_1+VK_KHR_sampler_ycbcr_conversion[or the equivalent command]
-
-ifdef::VK_KHR_sampler_ycbcr_conversion[]
-include::{generated}/api/protos/vkCreateSamplerYcbcrConversionKHR.txt[]
-endif::VK_KHR_sampler_ycbcr_conversion[]
-
-  * pname:device is the logical device that creates the sampler {YCbCr}
-    conversion.
-  * pname:pCreateInfo is a pointer to a
-    slink:VkSamplerYcbcrConversionCreateInfo structure specifying the
-    requested sampler {YCbCr} conversion.
-  * pname:pAllocator controls host memory allocation as described in the
-    <<memory-allocation, Memory Allocation>> chapter.
-  * pname:pYcbcrConversion is a pointer to a slink:VkSamplerYcbcrConversion
-    handle in which the resulting sampler {YCbCr} conversion is returned.
-
-The interpretation of the configured sampler {YCbCr} conversion is described
-in more detail in <<textures-sampler-YCbCr-conversion,the description of
-sampler {YCbCr} conversion>> in the <<textures,Image Operations>> chapter.
-
-.Valid Usage
-****
-  * [[VUID-vkCreateSamplerYcbcrConversion-None-01648]]
-    The <<features-samplerYcbcrConversion, sampler {YCbCr} conversion
-    feature>> must: be enabled
-****
-
-include::{generated}/validity/protos/vkCreateSamplerYcbcrConversion.txt[]
---
-
-[open,refpage='VkSamplerYcbcrConversionCreateInfo',desc='Structure specifying the parameters of the newly created conversion',type='structs']
---
-The sname:VkSamplerYcbcrConversionCreateInfo structure is defined as:
-
-include::{generated}/api/structs/VkSamplerYcbcrConversionCreateInfo.txt[]
-
-ifdef::VK_KHR_sampler_ycbcr_conversion[]
-or the equivalent
-
-include::{generated}/api/structs/VkSamplerYcbcrConversionCreateInfoKHR.txt[]
-endif::VK_KHR_sampler_ycbcr_conversion[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:format is the format of the image from which color information
-    will be retrieved.
-  * pname:ycbcrModel describes the color matrix for conversion between color
-    models.
-  * pname:ycbcrRange describes whether the encoded values have headroom and
-    foot room, or whether the encoding uses the full numerical range.
-  * pname:components applies a _swizzle_ based on elink:VkComponentSwizzle
-    enums prior to range expansion and color model conversion.
-  * pname:xChromaOffset describes the
-    <<textures-chroma-reconstruction,sample location>> associated with
-    downsampled chroma components in the x dimension.
-    pname:xChromaOffset has no effect for formats in which chroma components
-    are not downsampled horizontally.
-  * pname:yChromaOffset describes the
-    <<textures-chroma-reconstruction,sample location>> associated with
-    downsampled chroma components in the y dimension.
-    pname:yChromaOffset has no effect for formats in which the chroma
-    components are not downsampled vertically.
-  * pname:chromaFilter is the filter for chroma reconstruction.
-  * pname:forceExplicitReconstruction can: be used to ensure that
-    reconstruction is done explicitly, if supported.
-
-[NOTE]
-.Note
-====
-Setting pname:forceExplicitReconstruction to ename:VK_TRUE may: have a
-performance penalty on implementations where explicit reconstruction is not
-the default mode of operation.
-
-If pname:format supports
-ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_BIT
-the pname:forceExplicitReconstruction value behaves as if it was set to
-ename:VK_TRUE.
-====
-
-ifdef::VK_ANDROID_external_memory_android_hardware_buffer[]
-If the pname:pNext chain includes a slink:VkExternalFormatANDROID structure
-with non-zero pname:externalFormat member, the sampler {YCbCr} conversion
-object represents an _external format conversion_, and pname:format must: be
-ename:VK_FORMAT_UNDEFINED.
-Such conversions must: only be used to sample image views with a matching
-<<memory-external-android-hardware-buffer-external-formats,external
-format>>.
-When creating an external format conversion, the value of pname:components
-is ignored.
-endif::VK_ANDROID_external_memory_android_hardware_buffer[]
-ifndef::VK_ANDROID_external_memory_android_hardware_buffer[]
-Sampler {YCbCr} conversion objects do not support _external format
-conversion_ without additional extensions defining _external formats_.
-endif::VK_ANDROID_external_memory_android_hardware_buffer[]
-
-.Valid Usage
-****
-ifndef::VK_ANDROID_external_memory_android_hardware_buffer[]
-  * [[VUID-VkSamplerYcbcrConversionCreateInfo-format-04060]]
-    pname:format must: represent unsigned normalized values (i.e. the format
-    must be a etext:UNORM format)
-endif::VK_ANDROID_external_memory_android_hardware_buffer[]
-ifdef::VK_ANDROID_external_memory_android_hardware_buffer[]
-  * [[VUID-VkSamplerYcbcrConversionCreateInfo-format-01904]]
-    If an external format conversion is being created, pname:format must: be
-    ename:VK_FORMAT_UNDEFINED
-  * [[VUID-VkSamplerYcbcrConversionCreateInfo-format-04061]]
-    If an external format conversion is not being created, pname:format
-    must: represent unsigned normalized values (i.e. the format must be a
-    etext:UNORM format)
-endif::VK_ANDROID_external_memory_android_hardware_buffer[]
-  * [[VUID-VkSamplerYcbcrConversionCreateInfo-format-01650]]
-    The <<potential-format-features, potential format features>> of the
-    sampler {YCbCr} conversion must: support
-    ename:VK_FORMAT_FEATURE_MIDPOINT_CHROMA_SAMPLES_BIT or
-    ename:VK_FORMAT_FEATURE_COSITED_CHROMA_SAMPLES_BIT
-  * [[VUID-VkSamplerYcbcrConversionCreateInfo-xChromaOffset-01651]]
-    If the <<potential-format-features, potential format features>> of the
-    sampler {YCbCr} conversion do not support
-    ename:VK_FORMAT_FEATURE_COSITED_CHROMA_SAMPLES_BIT, pname:xChromaOffset
-    and pname:yChromaOffset must: not be
-    ename:VK_CHROMA_LOCATION_COSITED_EVEN if the corresponding components
-    are <<textures-chroma-reconstruction, downsampled>>
-  * [[VUID-VkSamplerYcbcrConversionCreateInfo-xChromaOffset-01652]]
-    If the <<potential-format-features, potential format features>> of the
-    sampler {YCbCr} conversion do not support
-    ename:VK_FORMAT_FEATURE_MIDPOINT_CHROMA_SAMPLES_BIT, pname:xChromaOffset
-    and pname:yChromaOffset must: not be ename:VK_CHROMA_LOCATION_MIDPOINT
-    if the corresponding components are <<textures-chroma-reconstruction,
-    downsampled>>
-  * [[VUID-VkSamplerYcbcrConversionCreateInfo-components-02581]]
-    If the format has a etext:_422 or etext:_420 suffix, then
-    pname:components.g must: be the
-    <<resources-image-views-identity-mappings,identity swizzle>>
-  * [[VUID-VkSamplerYcbcrConversionCreateInfo-components-02582]]
-    If the format has a etext:_422 or etext:_420 suffix, then
-    pname:components.a must: be the
-    <<resources-image-views-identity-mappings,identity swizzle>>,
-    ename:VK_COMPONENT_SWIZZLE_ONE, or ename:VK_COMPONENT_SWIZZLE_ZERO
-  * [[VUID-VkSamplerYcbcrConversionCreateInfo-components-02583]]
-    If the format has a etext:_422 or etext:_420 suffix, then
-    pname:components.r must: be the
-    <<resources-image-views-identity-mappings,identity swizzle>> or
-    ename:VK_COMPONENT_SWIZZLE_B
-  * [[VUID-VkSamplerYcbcrConversionCreateInfo-components-02584]]
-    If the format has a etext:_422 or etext:_420 suffix, then
-    pname:components.b must: be the
-    <<resources-image-views-identity-mappings,identity swizzle>> or
-    ename:VK_COMPONENT_SWIZZLE_R
-  * [[VUID-VkSamplerYcbcrConversionCreateInfo-components-02585]]
-    If the format has a etext:_422 or etext:_420 suffix, and if either
-    pname:components.r or pname:components.b is the
-    <<resources-image-views-identity-mappings,identity swizzle>>, both
-    values must: be the identity swizzle
-  * [[VUID-VkSamplerYcbcrConversionCreateInfo-ycbcrModel-01655]]
-    If pname:ycbcrModel is not
-    ename:VK_SAMPLER_YCBCR_MODEL_CONVERSION_RGB_IDENTITY, then
-    pname:components.r, pname:components.g, and pname:components.b must:
-    correspond to components of the pname:format; that is,
-    pname:components.r, pname:components.g, and pname:components.b must: not
-    be ename:VK_COMPONENT_SWIZZLE_ZERO or ename:VK_COMPONENT_SWIZZLE_ONE,
-    and must: not correspond to a component which contains zero or one as a
-    consequence of <<textures-conversion-to-rgba,conversion to RGBA>>
-  * [[VUID-VkSamplerYcbcrConversionCreateInfo-ycbcrRange-02748]]
-    If pname:ycbcrRange is ename:VK_SAMPLER_YCBCR_RANGE_ITU_NARROW then the
-    R, G and B components obtained by applying the pname:component swizzle
-    to pname:format must: each have a bit-depth greater than or equal to 8
-  * [[VUID-VkSamplerYcbcrConversionCreateInfo-forceExplicitReconstruction-01656]]
-    If the <<potential-format-features, potential format features>> of the
-    sampler {YCbCr} conversion do not support
-    ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_FORCEABLE_BIT
-    pname:forceExplicitReconstruction must: be ename:VK_FALSE
-  * [[VUID-VkSamplerYcbcrConversionCreateInfo-chromaFilter-01657]]
-    If the <<potential-format-features, potential format features>> of the
-    sampler {YCbCr} conversion do not support
-    ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_LINEAR_FILTER_BIT,
-    pname:chromaFilter must: not be ename:VK_FILTER_LINEAR
-****
-
-include::{generated}/validity/structs/VkSamplerYcbcrConversionCreateInfo.txt[]
-
-If pname:chromaFilter is ename:VK_FILTER_NEAREST, chroma samples are
-reconstructed to luma component resolution using nearest-neighbour sampling.
-Otherwise, chroma samples are reconstructed using interpolation.
-More details can be found in <<textures-sampler-YCbCr-conversion,the
-description of sampler {YCbCr} conversion>> in the <<textures,Image
-Operations>> chapter.
---
-
-[open,refpage='VkSamplerYcbcrModelConversion',desc='Color model component of a color space',type='enums']
---
-elink:VkSamplerYcbcrModelConversion defines the conversion from the source
-color model to the shader color model.
-Possible values are:
-
-include::{generated}/api/enums/VkSamplerYcbcrModelConversion.txt[]
-
-ifdef::VK_KHR_sampler_ycbcr_conversion[]
-or the equivalent
-
-include::{generated}/api/enums/VkSamplerYcbcrModelConversionKHR.txt[]
-endif::VK_KHR_sampler_ycbcr_conversion[]
-
-  * ename:VK_SAMPLER_YCBCR_MODEL_CONVERSION_RGB_IDENTITY specifies that the
-    input values to the conversion are unmodified.
-  * ename:VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_IDENTITY specifies no
-    model conversion but the inputs are range expanded as for {YCbCr}.
-  * ename:VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_709 specifies the color
-    model conversion from {YCbCr} to {RGBprime} defined in BT.709 and
-    described in the "`BT.709 Y’C~B~C~R~ conversion`" section of the
-    <<data-format,Khronos Data Format Specification>>.
-  * ename:VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_601 specifies the color
-    model conversion from {YCbCr} to {RGBprime} defined in BT.601 and
-    described in the "`BT.601 Y’C~B~C~R~ conversion`" section of the
-    <<data-format,Khronos Data Format Specification>>.
-  * ename:VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_2020 specifies the color
-    model conversion from {YCbCr} to {RGBprime} defined in BT.2020 and
-    described in the "`BT.2020 Y’C~B~C~R~ conversion`" section of the
-    <<data-format,Khronos Data Format Specification>>.
-
-In the etext:VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_* color models, for the
-input to the sampler {YCbCr} range expansion and model conversion:
-
-  * the Y (Y{prime} luma) component corresponds to the G component of an RGB
-    image.
-  * the CB (C~B~ or "`U`" blue color difference) component corresponds to
-    the B component of an RGB image.
-  * the CR (C~R~ or "`V`" red color difference) component corresponds to the
-    R component of an RGB image.
-  * the alpha component, if present, is not modified by color model
-    conversion.
-
-These rules reflect the mapping of components after the component swizzle
-operation (controlled by
-slink:VkSamplerYcbcrConversionCreateInfo::pname:components).
-
-[NOTE]
-.Note
-====
-For example, an "`YUVA`" 32-bit format comprising four 8-bit components can
-be implemented as ename:VK_FORMAT_R8G8B8A8_UNORM with a component mapping:
-
-  * pname:components.a = ename:VK_COMPONENT_SWIZZLE_IDENTITY
-  * pname:components.r = ename:VK_COMPONENT_SWIZZLE_B
-  * pname:components.g = ename:VK_COMPONENT_SWIZZLE_R
-  * pname:components.b = ename:VK_COMPONENT_SWIZZLE_G
-====
---
-
-[open,refpage='VkSamplerYcbcrRange',desc='Range of encoded values in a color space',type='enums']
---
-The elink:VkSamplerYcbcrRange enum describes whether color components are
-encoded using the full range of numerical values or whether values are
-reserved for headroom and foot room.
-elink:VkSamplerYcbcrRange is defined as:
-
-include::{generated}/api/enums/VkSamplerYcbcrRange.txt[]
-
-ifdef::VK_KHR_sampler_ycbcr_conversion[]
-or the equivalent
-
-include::{generated}/api/enums/VkSamplerYcbcrRangeKHR.txt[]
-endif::VK_KHR_sampler_ycbcr_conversion[]
-
-  * ename:VK_SAMPLER_YCBCR_RANGE_ITU_FULL specifies that the full range of
-    the encoded values are valid and interpreted according to the ITU "`full
-    range`" quantization rules.
-  * ename:VK_SAMPLER_YCBCR_RANGE_ITU_NARROW specifies that headroom and foot
-    room are reserved in the numerical range of encoded values, and the
-    remaining values are expanded according to the ITU "`narrow range`"
-    quantization rules.
-
-The formulae for these conversions is described in the
-<<textures-sampler-YCbCr-conversion-rangeexpand,Sampler {YCbCr} Range
-Expansion>> section of the <<textures,Image Operations>> chapter.
-
-No range modification takes place if pname:ycbcrModel is
-ename:VK_SAMPLER_YCBCR_MODEL_CONVERSION_RGB_IDENTITY; the pname:ycbcrRange
-field of slink:VkSamplerYcbcrConversionCreateInfo is ignored in this case.
---
-
-[open,refpage='VkChromaLocation',desc='Position of downsampled chroma samples',type='enums']
---
-The elink:VkChromaLocation enum defines the location of downsampled chroma
-component samples relative to the luma samples, and is defined as:
-
-include::{generated}/api/enums/VkChromaLocation.txt[]
-
-ifdef::VK_KHR_sampler_ycbcr_conversion[]
-or the equivalent
-
-include::{generated}/api/enums/VkChromaLocationKHR.txt[]
-endif::VK_KHR_sampler_ycbcr_conversion[]
-
-  * ename:VK_CHROMA_LOCATION_COSITED_EVEN specifies that downsampled chroma
-    samples are aligned with luma samples with even coordinates.
-  * ename:VK_CHROMA_LOCATION_MIDPOINT specifies that downsampled chroma
-    samples are located half way between each even luma sample and the
-    nearest higher odd luma sample.
---
-
-[open,refpage='vkDestroySamplerYcbcrConversion',desc='Destroy a created {YCbCr} conversion',type='protos']
---
-To destroy a sampler {YCbCr} conversion, call:
-
-ifdef::VK_VERSION_1_1[]
-include::{generated}/api/protos/vkDestroySamplerYcbcrConversion.txt[]
-endif::VK_VERSION_1_1[]
-
-ifdef::VK_VERSION_1_1+VK_KHR_sampler_ycbcr_conversion[or the equivalent command]
-
-ifdef::VK_KHR_sampler_ycbcr_conversion[]
-include::{generated}/api/protos/vkDestroySamplerYcbcrConversionKHR.txt[]
-endif::VK_KHR_sampler_ycbcr_conversion[]
-
-  * pname:device is the logical device that destroys the {YCbCr} conversion.
-  * pname:ycbcrConversion is the conversion to destroy.
-  * pname:pAllocator controls host memory allocation as described in the
-    <<memory-allocation, Memory Allocation>> chapter.
-
-include::{generated}/validity/protos/vkDestroySamplerYcbcrConversion.txt[]
---
-endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
-
-ifdef::VK_EXT_custom_border_color[]
-[open,refpage='VkSamplerCustomBorderColorCreateInfoEXT',desc='Structure specifying custom border color',type='structs']
---
-In addition to the predefined border color values, applications can: provide
-a custom border color value by including the
-sname:VkSamplerCustomBorderColorCreateInfoEXT structure in the
-slink:VkSamplerCreateInfo::pname:pNext chain.
-
-The sname:VkSamplerCustomBorderColorCreateInfoEXT structure is defined as:
-
-include::{generated}/api/structs/VkSamplerCustomBorderColorCreateInfoEXT.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:customBorderColor is a slink:VkClearColorValue representing the
-    desired custom sampler border color.
-  * pname:format is a elink:VkFormat representing the format of the sampled
-    image view(s).
-    This field may be ename:VK_FORMAT_UNDEFINED if the
-    <<features-customBorderColorWithoutFormat,customBorderColorWithoutFormat>>
-    feature is enabled.
-
-.Valid Usage
-****
-  * [[VUID-VkSamplerCustomBorderColorCreateInfoEXT-format-04013]]
-    If provided pname:format is not ename:VK_FORMAT_UNDEFINED then the
-    slink:VkSamplerCreateInfo::pname:borderColor type must: match the
-    sampled type of the provided pname:format, as shown in the _SPIR-V
-    Sampled Type_ column of the <<formats-numericformat>> table
-  * [[VUID-VkSamplerCustomBorderColorCreateInfoEXT-format-04014]]
-    If the
-    <<features-customBorderColorWithoutFormat,customBorderColorWithoutFormat>>
-    feature is not enabled then pname:format must: not be
-    ename:VK_FORMAT_UNDEFINED
-  * [[VUID-VkSamplerCustomBorderColorCreateInfoEXT-format-04015]]
-    If the sampler is used to sample an image view of
-    ename:VK_FORMAT_B4G4R4A4_UNORM_PACK16,
-    ename:VK_FORMAT_B5G6R5_UNORM_PACK16, or
-    ename:VK_FORMAT_B5G5R5A1_UNORM_PACK16 format then pname:format must: not
-    be ename:VK_FORMAT_UNDEFINED
-****
-
-include::{generated}/validity/structs/VkSamplerCustomBorderColorCreateInfoEXT.txt[]
---
-endif::VK_EXT_custom_border_color[]
-
-ifdef::VK_EXT_border_color_swizzle[]
-[open,refpage='VkSamplerBorderColorComponentMappingCreateInfoEXT',desc='Structure specifying the component mapping of the border color',type='structs']
---
-
-If the sampler is created with ename:VK_BORDER_COLOR_FLOAT_OPAQUE_BLACK,
-ename:VK_BORDER_COLOR_INT_OPAQUE_BLACK,
-ename:VK_BORDER_COLOR_FLOAT_CUSTOM_EXT, or
-ename:VK_BORDER_COLOR_INT_CUSTOM_EXT pname:borderColor, and that sampler
-will be combined with an image view that does not have an
-<<resources-image-views-identity-mappings,identity swizzle>>, and
-slink:VkPhysicalDeviceBorderColorSwizzleFeaturesEXT::pname:borderColorSwizzleFromImage
-is not enabled, then it is necessary to specify the component mapping of the
-border color, by including the
-sname:VkSamplerBorderColorComponentMappingCreateInfoEXT structure in the
-slink:VkSamplerCreateInfo::pname:pNext chain, to get defined results.
-
-The sname:VkSamplerBorderColorComponentMappingCreateInfoEXT structure is
-defined as:
-
-include::{generated}/api/structs/VkSamplerBorderColorComponentMappingCreateInfoEXT.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:components is a slink:VkComponentMapping structure specifying a
-    remapping of the border color components.
-  * pname:srgb indicates that the sampler will be combined with an image
-    view that has an image format which is sRGB encoded.
-
-The slink:VkComponentMapping pname:components member describes a remapping
-from components of the border color to components of the vector returned by
-shader image instructions when the border color is used.
-
-.Valid Usage
-****
-  * [[VUID-VkSamplerBorderColorComponentMappingCreateInfoEXT-borderColorSwizzle-06437]]
-    The <<features-borderColorSwizzle, pname:borderColorSwizzle>> feature
-    must: be enabled.
-****
-
-include::{generated}/validity/structs/VkSamplerBorderColorComponentMappingCreateInfoEXT.txt[]
---
-endif::VK_EXT_border_color_swizzle[]
diff --git a/registry/vulkan/chapters/shaders.txt b/registry/vulkan/chapters/shaders.txt
deleted file mode 100644
index 7e923e8..0000000
--- a/registry/vulkan/chapters/shaders.txt
+++ /dev/null
@@ -1,1909 +0,0 @@
-// Copyright 2015-2021 The Khronos Group, Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-[[shaders]]
-= Shaders
-
-A shader specifies programmable operations that execute for each vertex,
-control point, tessellated vertex, primitive, fragment, or workgroup in the
-corresponding stage(s) of the graphics and compute pipelines.
-
-Graphics pipelines include vertex shader execution as a result of
-<<drawing,primitive assembly>>, followed, if enabled, by tessellation
-control and evaluation shaders operating on <<drawing-patch-lists,patches>>,
-geometry shaders, if enabled, operating on primitives, and fragment shaders,
-if present, operating on fragments generated by <<primsrast,Rasterization>>.
-In this specification, vertex, tessellation control, tessellation evaluation
-and geometry shaders are collectively referred to as
-<<pipeline-graphics-subsets-pre-rasterization,pre-rasterization shader
-stage>>s and occur in the logical pipeline before rasterization.
-The fragment shader occurs logically after rasterization.
-
-Only the compute shader stage is included in a compute pipeline.
-Compute shaders operate on compute invocations in a workgroup.
-
-Shaders can: read from input variables, and read from and write to output
-variables.
-Input and output variables can: be used to transfer data between shader
-stages, or to allow the shader to interact with values that exist in the
-execution environment.
-Similarly, the execution environment provides constants that describe
-capabilities.
-
-Shader variables are associated with execution environment-provided inputs
-and outputs using _built-in_ decorations in the shader.
-The available decorations for each stage are documented in the following
-subsections.
-
-
-[[shader-modules]]
-== Shader Modules
-
-[open,refpage='VkShaderModule',desc='Opaque handle to a shader module object',type='handles']
---
-_Shader modules_ contain _shader code_ and one or more entry points.
-Shaders are selected from a shader module by specifying an entry point as
-part of <<pipelines,pipeline>> creation.
-The stages of a pipeline can: use shaders that come from different modules.
-The shader code defining a shader module must: be in the SPIR-V format, as
-described by the <<spirvenv,Vulkan Environment for SPIR-V>> appendix.
-
-Shader modules are represented by sname:VkShaderModule handles:
-
-include::{generated}/api/handles/VkShaderModule.txt[]
---
-
-[open,refpage='vkCreateShaderModule',desc='Creates a new shader module object',type='protos']
---
-To create a shader module, call:
-
-include::{generated}/api/protos/vkCreateShaderModule.txt[]
-
-  * pname:device is the logical device that creates the shader module.
-  * pname:pCreateInfo is a pointer to a slink:VkShaderModuleCreateInfo
-    structure.
-  * pname:pAllocator controls host memory allocation as described in the
-    <<memory-allocation, Memory Allocation>> chapter.
-  * pname:pShaderModule is a pointer to a slink:VkShaderModule handle in
-    which the resulting shader module object is returned.
-
-Once a shader module has been created, any entry points it contains can: be
-used in pipeline shader stages as described in <<pipelines-compute,Compute
-Pipelines>> and <<pipelines-graphics,Graphics Pipelines>>.
-
-include::{generated}/validity/protos/vkCreateShaderModule.txt[]
---
-
-[open,refpage='VkShaderModuleCreateInfo',desc='Structure specifying parameters of a newly created shader module',type='structs']
---
-The sname:VkShaderModuleCreateInfo structure is defined as:
-
-include::{generated}/api/structs/VkShaderModuleCreateInfo.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:flags is reserved for future use.
-  * pname:codeSize is the size, in bytes, of the code pointed to by
-    pname:pCode.
-  * pname:pCode is a pointer to code that is used to create the shader
-    module.
-    The type and format of the code is determined from the content of the
-    memory addressed by pname:pCode.
-
-.Valid Usage
-****
-  * [[VUID-VkShaderModuleCreateInfo-codeSize-01085]]
-    pname:codeSize must: be greater than 0
-ifndef::VK_NV_glsl_shader[]
-  * [[VUID-VkShaderModuleCreateInfo-codeSize-01086]]
-    pname:codeSize must: be a multiple of 4
-  * [[VUID-VkShaderModuleCreateInfo-pCode-01087]]
-    pname:pCode must: point to valid SPIR-V code, formatted and packed as
-    described by the <<spirv-spec,Khronos SPIR-V Specification>>
-  * [[VUID-VkShaderModuleCreateInfo-pCode-01088]]
-    pname:pCode must: adhere to the validation rules described by the
-    <<spirvenv-module-validation, Validation Rules within a Module>> section
-    of the <<spirvenv-capabilities,SPIR-V Environment>> appendix
-endif::VK_NV_glsl_shader[]
-ifdef::VK_NV_glsl_shader[]
-  * [[VUID-VkShaderModuleCreateInfo-pCode-01376]]
-    If pname:pCode is a pointer to SPIR-V code, pname:codeSize must: be a
-    multiple of 4
-  * [[VUID-VkShaderModuleCreateInfo-pCode-01377]]
-    pname:pCode must: point to either valid SPIR-V code, formatted and
-    packed as described by the <<spirv-spec,Khronos SPIR-V Specification>>
-    or valid GLSL code which must: be written to the `GL_KHR_vulkan_glsl`
-    extension specification
-  * [[VUID-VkShaderModuleCreateInfo-pCode-01378]]
-    If pname:pCode is a pointer to SPIR-V code, that code must: adhere to
-    the validation rules described by the <<spirvenv-module-validation,
-    Validation Rules within a Module>> section of the
-    <<spirvenv-capabilities,SPIR-V Environment>> appendix
-  * [[VUID-VkShaderModuleCreateInfo-pCode-01379]]
-    If pname:pCode is a pointer to GLSL code, it must: be valid GLSL code
-    written to the `GL_KHR_vulkan_glsl` GLSL extension specification
-endif::VK_NV_glsl_shader[]
-  * [[VUID-VkShaderModuleCreateInfo-pCode-01089]]
-    pname:pCode must: declare the code:Shader capability for SPIR-V code
-  * [[VUID-VkShaderModuleCreateInfo-pCode-01090]]
-    pname:pCode must: not declare any capability that is not supported by
-    the API, as described by the <<spirvenv-module-validation,
-    Capabilities>> section of the <<spirvenv-capabilities,SPIR-V
-    Environment>> appendix
-  * [[VUID-VkShaderModuleCreateInfo-pCode-01091]]
-    If pname:pCode declares any of the capabilities listed in the
-    <<spirvenv-capabilities-table,SPIR-V Environment>> appendix, one of the
-    corresponding requirements must: be satisfied
-  * [[VUID-VkShaderModuleCreateInfo-pCode-04146]]
-    pname:pCode must: not declare any SPIR-V extension that is not supported
-    by the API, as described by the <<spirvenv-extensions, Extension>>
-    section of the <<spirvenv-capabilities,SPIR-V Environment>> appendix
-  * [[VUID-VkShaderModuleCreateInfo-pCode-04147]]
-    If pname:pCode declares any of the SPIR-V extensions listed in the
-    <<spirvenv-extensions-table,SPIR-V Environment>> appendix, one of the
-    corresponding requirements must: be satisfied
-****
-
-include::{generated}/validity/structs/VkShaderModuleCreateInfo.txt[]
---
-
-[open,refpage='VkShaderModuleCreateFlags',desc='Reserved for future use',type='flags']
---
-include::{generated}/api/flags/VkShaderModuleCreateFlags.txt[]
-
-tname:VkShaderModuleCreateFlags is a bitmask type for setting a mask, but is
-currently reserved for future use.
---
-
-ifdef::VK_EXT_validation_cache[]
-include::VK_EXT_validation_cache/shader-module-validation-cache.txt[]
-endif::VK_EXT_validation_cache[]
-
-
-[open,refpage='vkDestroyShaderModule',desc='Destroy a shader module',type='protos']
---
-To destroy a shader module, call:
-
-include::{generated}/api/protos/vkDestroyShaderModule.txt[]
-
-  * pname:device is the logical device that destroys the shader module.
-  * pname:shaderModule is the handle of the shader module to destroy.
-  * pname:pAllocator controls host memory allocation as described in the
-    <<memory-allocation, Memory Allocation>> chapter.
-
-A shader module can: be destroyed while pipelines created using its shaders
-are still in use.
-
-.Valid Usage
-****
-  * [[VUID-vkDestroyShaderModule-shaderModule-01092]]
-    If sname:VkAllocationCallbacks were provided when pname:shaderModule was
-    created, a compatible set of callbacks must: be provided here
-  * [[VUID-vkDestroyShaderModule-shaderModule-01093]]
-    If no sname:VkAllocationCallbacks were provided when pname:shaderModule
-    was created, pname:pAllocator must: be `NULL`
-****
-
-include::{generated}/validity/protos/vkDestroyShaderModule.txt[]
---
-
-
-[[shaders-execution]]
-== Shader Execution
-
-At each stage of the pipeline, multiple invocations of a shader may: execute
-simultaneously.
-Further, invocations of a single shader produced as the result of different
-commands may: execute simultaneously.
-The relative execution order of invocations of the same shader type is
-undefined:.
-Shader invocations may: complete in a different order than that in which the
-primitives they originated from were drawn or dispatched by the application.
-However, fragment shader outputs are written to attachments in
-<<primsrast-order,rasterization order>>.
-
-The relative execution order of invocations of different shader types is
-largely undefined:.
-However, when invoking a shader whose inputs are generated from a previous
-pipeline stage, the shader invocations from the previous stage are
-guaranteed to have executed far enough to generate input values for all
-required inputs.
-
-
-[[shaders-execution-memory-ordering]]
-== Shader Memory Access Ordering
-
-The order in which image or buffer memory is read or written by shaders is
-largely undefined:.
-For some shader types (vertex, tessellation evaluation, and in some cases,
-fragment), even the number of shader invocations that may: perform loads and
-stores is undefined:.
-
-In particular, the following rules apply:
-
-  * <<shaders-vertex-execution,Vertex>> and
-    <<shaders-tessellation-evaluation-execution,tessellation evaluation>>
-    shaders will be invoked at least once for each unique vertex, as defined
-    in those sections.
-  * <<fragops-shader,Fragment>> shaders will be invoked zero or more times,
-    as defined in that section.
-  * The relative execution order of invocations of the same shader type is
-    undefined:.
-    A store issued by a shader when working on primitive B might complete
-    prior to a store for primitive A, even if primitive A is specified prior
-    to primitive B. This applies even to fragment shaders; while fragment
-    shader outputs are always written to the framebuffer in
-    <<primsrast-order, rasterization order>>, stores executed by fragment
-    shader invocations are not.
-  * The relative execution order of invocations of different shader types is
-    largely undefined:.
-
-[NOTE]
-.Note
-====
-The above limitations on shader invocation order make some forms of
-synchronization between shader invocations within a single set of primitives
-unimplementable.
-For example, having one invocation poll memory written by another invocation
-assumes that the other invocation has been launched and will complete its
-writes in finite time.
-====
-
-ifdef::VK_VERSION_1_2,VK_KHR_vulkan_memory_model[]
-
-The <<memory-model,Memory Model>> appendix defines the terminology and rules
-for how to correctly communicate between shader invocations, such as when a
-write is <<memory-model-visible-to,Visible-To>> a read, and what constitutes
-a <<memory-model-access-data-race,Data Race>>.
-
-Applications must: not cause a data race.
-
-endif::VK_VERSION_1_2,VK_KHR_vulkan_memory_model[]
-
-ifndef::VK_VERSION_1_2,VK_KHR_vulkan_memory_model[]
-
-Stores issued to different memory locations within a single shader
-invocation may: not be visible to other invocations, or may: not become
-visible in the order they were performed.
-
-The code:OpMemoryBarrier instruction can: be used to provide stronger
-ordering of reads and writes performed by a single invocation.
-code:OpMemoryBarrier guarantees that any memory transactions issued by the
-shader invocation prior to the instruction complete prior to the memory
-transactions issued after the instruction.
-Memory barriers are needed for algorithms that require multiple invocations
-to access the same memory and require the operations to be performed in a
-partially-defined relative order.
-For example, if one shader invocation does a series of writes, followed by
-an code:OpMemoryBarrier instruction, followed by another write, then the
-results of the series of writes before the barrier become visible to other
-shader invocations at a time earlier or equal to when the results of the
-final write become visible to those invocations.
-In practice it means that another invocation that sees the results of the
-final write would also see the previous writes.
-Without the memory barrier, the final write may: be visible before the
-previous writes.
-
-Writes that are the result of shader stores through a variable decorated
-with code:Coherent automatically have available writes to the same buffer,
-buffer view, or image view made visible to them, and are themselves
-automatically made available to access by the same buffer, buffer view, or
-image view.
-Reads that are the result of shader loads through a variable decorated with
-code:Coherent automatically have available writes to the same buffer, buffer
-view, or image view made visible to them.
-The order that coherent writes to different locations become available is
-undefined:, unless enforced by a memory barrier instruction or other memory
-dependency.
-
-[NOTE]
-.Note
-====
-Explicit memory dependencies must: still be used to guarantee availability
-and visibility for access via other buffers, buffer views, or image views.
-====
-
-The built-in atomic memory transaction instructions can: be used to read and
-write a given memory address atomically.
-While built-in atomic functions issued by multiple shader invocations are
-executed in undefined: order relative to each other, these functions perform
-both a read and a write of a memory address and guarantee that no other
-memory transaction will write to the underlying memory between the read and
-write.
-Atomic operations ensure automatic availability and visibility for writes
-and reads in the same way as those to code:Coherent variables.
-
-[NOTE]
-.Note
-====
-Memory accesses performed on different resource descriptors with the same
-memory backing may: not be well-defined even with the code:Coherent
-decoration or via atomics, due to things such as image layouts or ownership
-of the resource - as described in the <<synchronization, Synchronization and
-Cache Control>> chapter.
-====
-
-[NOTE]
-.Note
-====
-Atomics allow shaders to use shared global addresses for mutual exclusion or
-as counters, among other uses.
-====
-
-endif::VK_VERSION_1_2,VK_KHR_vulkan_memory_model[]
-
-The SPIR-V *SubgroupMemory*, *CrossWorkgroupMemory*, and
-*AtomicCounterMemory* memory semantics are ignored.
-Sequentially consistent atomics and barriers are not supported and
-*SequentiallyConsistent* is treated as *AcquireRelease*.
-*SequentiallyConsistent* should: not be used.
-
-
-[[shaders-inputs]]
-== Shader Inputs and Outputs
-
-Data is passed into and out of shaders using variables with input or output
-storage class, respectively.
-User-defined inputs and outputs are connected between stages by matching
-their code:Location decorations.
-Additionally, data can: be provided by or communicated to special functions
-provided by the execution environment using code:BuiltIn decorations.
-
-In many cases, the same code:BuiltIn decoration can: be used in multiple
-shader stages with similar meaning.
-The specific behavior of variables decorated as code:BuiltIn is documented
-in the following sections.
-
-
-ifdef::VK_NV_mesh_shader[]
-[[shaders-task]]
-== Task Shaders
-
-Task shaders operate in conjunction with the mesh shaders to produce a
-collection of primitives that will be processed by subsequent stages of the
-graphics pipeline.
-Its primary purpose is to create a variable amount of subsequent mesh shader
-invocations.
-
-Task shaders are invoked via the execution of the
-<<drawing-mesh-shading,programmable mesh shading>> pipeline.
-
-The task shader has no fixed-function inputs other than variables
-identifying the specific workgroup and invocation.
-The only fixed output of the task shader is a task count, identifying the
-number of mesh shader workgroups to create.
-The task shader can write additional outputs to task memory, which can be
-read by all of the mesh shader workgroups it created.
-
-
-=== Task Shader Execution
-
-Task workloads are formed from groups of work items called workgroups and
-processed by the task shader in the current graphics pipeline.
-A workgroup is a collection of shader invocations that execute the same
-shader, potentially in parallel.
-Task shaders execute in _global workgroups_ which are divided into a number
-of _local workgroups_ with a size that can: be set by assigning a value to
-the code:LocalSize
-ifdef::VK_KHR_maintenance4[or code:LocalSizeId]
-execution mode or via an object decorated by the code:WorkgroupSize
-decoration.
-An invocation within a local workgroup can: share data with other members of
-the local workgroup through shared variables and issue memory and control
-flow barriers to synchronize with other members of the local workgroup.
-
-
-[[shaders-mesh]]
-== Mesh Shaders
-
-Mesh shaders operate in workgroups to produce a collection of primitives
-that will be processed by subsequent stages of the graphics pipeline.
-Each workgroup emits zero or more output primitives and the group of
-vertices and their associated data required for each output primitive.
-
-Mesh shaders are invoked via the execution of the
-<<drawing-mesh-shading,programmable mesh shading>> pipeline.
-
-The only inputs available to the mesh shader are variables identifying the
-specific workgroup and invocation and, if applicable, any outputs written to
-task memory by the task shader that spawned the mesh shader's workgroup.
-The mesh shader can operate without a task shader as well.
-
-The invocations of the mesh shader workgroup write an output mesh,
-comprising a set of primitives with per-primitive attributes, a set of
-vertices with per-vertex attributes, and an array of indices identifying the
-mesh vertices that belong to each primitive.
-The primitives of this mesh are then processed by subsequent graphics
-pipeline stages, where the outputs of the mesh shader form an interface with
-the fragment shader.
-
-
-=== Mesh Shader Execution
-
-Mesh workloads are formed from groups of work items called workgroups and
-processed by the mesh shader in the current graphics pipeline.
-A workgroup is a collection of shader invocations that execute the same
-shader, potentially in parallel.
-Mesh shaders execute in _global workgroups_ which are divided into a number
-of _local workgroups_ with a size that can: be set by assigning a value to
-the code:LocalSize
-ifdef::VK_KHR_maintenance4[or code:LocalSizeId]
-execution mode or via an object decorated by the code:WorkgroupSize
-decoration.
-An invocation within a local workgroup can: share data with other members of
-the local workgroup through shared variables and issue memory and control
-flow barriers to synchronize with other members of the local workgroup.
-
-The _global workgroups_ may be generated explcitly via the API, or
-implicitly through the task shader's work creation mechanism.
-endif::VK_NV_mesh_shader[]
-
-
-[[shaders-vertex]]
-== Vertex Shaders
-
-Each vertex shader invocation operates on one vertex and its associated
-<<fxvertex-attrib,vertex attribute>> data, and outputs one vertex and
-associated data.
-ifndef::VK_NV_mesh_shader[]
-Graphics pipelines must: include a vertex shader, and the vertex shader
-stage is always the first shader stage in the graphics pipeline.
-endif::VK_NV_mesh_shader[]
-ifdef::VK_NV_mesh_shader[]
-Graphics pipelines using primitive shading must: include a vertex shader,
-and the vertex shader stage is always the first shader stage in the graphics
-pipeline.
-endif::VK_NV_mesh_shader[]
-
-
-[[shaders-vertex-execution]]
-=== Vertex Shader Execution
-
-A vertex shader must: be executed at least once for each vertex specified by
-a drawing command.
-ifdef::VK_VERSION_1_1,VK_KHR_multiview[]
-If the subpass includes multiple views in its view mask, the shader may: be
-invoked separately for each view.
-endif::VK_VERSION_1_1,VK_KHR_multiview[]
-During execution, the shader is presented with the index of the vertex and
-instance for which it has been invoked.
-Input variables declared in the vertex shader are filled by the
-implementation with the values of vertex attributes associated with the
-invocation being executed.
-
-If the same vertex is specified multiple times in a drawing command (e.g. by
-including the same index value multiple times in an index buffer) the
-implementation may: reuse the results of vertex shading if it can statically
-determine that the vertex shader invocations will produce identical results.
-
-[NOTE]
-.Note
-====
-It is implementation-dependent when and if results of vertex shading are
-reused, and thus how many times the vertex shader will be executed.
-This is true also if the vertex shader contains stores or atomic operations
-(see <<features-vertexPipelineStoresAndAtomics,
-pname:vertexPipelineStoresAndAtomics>>).
-====
-
-
-[[shaders-tessellation-control]]
-== Tessellation Control Shaders
-
-The tessellation control shader is used to read an input patch provided by
-the application and to produce an output patch.
-Each tessellation control shader invocation operates on an input patch
-(after all control points in the patch are processed by a vertex shader) and
-its associated data, and outputs a single control point of the output patch
-and its associated data, and can: also output additional per-patch data.
-The input patch is sized according to the pname:patchControlPoints member of
-slink:VkPipelineTessellationStateCreateInfo, as part of input assembly.
-
-ifdef::VK_EXT_extended_dynamic_state2[]
-The input patch can also be dynamically sized with pname:patchControlPoints
-parameter of flink:vkCmdSetPatchControlPointsEXT.
-
-[open,refpage='vkCmdSetPatchControlPointsEXT',desc='Specify the number of control points per patch dynamically for a command buffer',type='protos']
---
-To <<pipelines-dynamic-state, dynamically set>> the number of control points
-per patch, call:
-
-include::{generated}/api/protos/vkCmdSetPatchControlPointsEXT.txt[]
-
-  * pname:commandBuffer is the command buffer into which the command will be
-    recorded.
-  * pname:patchControlPoints specifies the number of control points per
-    patch.
-
-This command sets the number of control points per patch for subsequent
-drawing commands when the graphics pipeline is created with
-ename:VK_DYNAMIC_STATE_PATCH_CONTROL_POINTS_EXT set in
-slink:VkPipelineDynamicStateCreateInfo::pname:pDynamicStates.
-Otherwise, this state is specified by the
-slink:VkPipelineTessellationStateCreateInfo::pname:patchControlPoints value
-used to create the currently active pipeline.
-
-.Valid Usage
-****
-  * [[VUID-vkCmdSetPatchControlPointsEXT-None-04873]]
-    The <<features-extendedDynamicState2PatchControlPoints,
-    extendedDynamicState2PatchControlPoints>> feature must: be enabled
-  * [[VUID-vkCmdSetPatchControlPointsEXT-patchControlPoints-04874]]
-    pname:patchControlPoints must: be greater than zero and less than or
-    equal to sname:VkPhysicalDeviceLimits::pname:maxTessellationPatchSize
-****
-
-include::{generated}/validity/protos/vkCmdSetPatchControlPointsEXT.txt[]
---
-endif::VK_EXT_extended_dynamic_state2[]
-
-The size of the output patch is controlled by the code:OpExecutionMode
-code:OutputVertices specified in the tessellation control or tessellation
-evaluation shaders, which must: be specified in at least one of the shaders.
-The size of the input and output patches must: each be greater than zero and
-less than or equal to
-sname:VkPhysicalDeviceLimits::pname:maxTessellationPatchSize.
-
-
-[[shaders-tessellation-control-execution]]
-=== Tessellation Control Shader Execution
-
-A tessellation control shader is invoked at least once for each _output_
-vertex in a patch.
-ifdef::VK_VERSION_1_1,VK_KHR_multiview[]
-If the subpass includes multiple views in its view mask, the shader may: be
-invoked separately for each view.
-endif::VK_VERSION_1_1,VK_KHR_multiview[]
-
-Inputs to the tessellation control shader are generated by the vertex
-shader.
-Each invocation of the tessellation control shader can: read the attributes
-of any incoming vertices and their associated data.
-The invocations corresponding to a given patch execute logically in
-parallel, with undefined: relative execution order.
-However, the code:OpControlBarrier instruction can: be used to provide
-limited control of the execution order by synchronizing invocations within a
-patch, effectively dividing tessellation control shader execution into a set
-of phases.
-Tessellation control shaders will read undefined: values if one invocation
-reads a per-vertex or per-patch output written by another invocation at any
-point during the same phase, or if two invocations attempt to write
-different values to the same per-patch output in a single phase.
-
-
-[[shaders-tessellation-evaluation]]
-== Tessellation Evaluation Shaders
-
-The Tessellation Evaluation Shader operates on an input patch of control
-points and their associated data, and a single input barycentric coordinate
-indicating the invocation's relative position within the subdivided patch,
-and outputs a single vertex and its associated data.
-
-
-[[shaders-tessellation-evaluation-execution]]
-=== Tessellation Evaluation Shader Execution
-
-A tessellation evaluation shader is invoked at least once for each unique
-vertex generated by the tessellator.
-ifdef::VK_VERSION_1_1,VK_KHR_multiview[]
-If the subpass includes multiple views in its view mask, the shader may: be
-invoked separately for each view.
-endif::VK_VERSION_1_1,VK_KHR_multiview[]
-
-
-[[shaders-geometry]]
-== Geometry Shaders
-
-The geometry shader operates on a group of vertices and their associated
-data assembled from a single input primitive, and emits zero or more output
-primitives and the group of vertices and their associated data required for
-each output primitive.
-
-
-[[shaders-geometry-execution]]
-=== Geometry Shader Execution
-
-A geometry shader is invoked at least once for each primitive produced by
-the tessellation stages, or at least once for each primitive generated by
-<<drawing,primitive assembly>> when tessellation is not in use.
-A shader can request that the geometry shader runs multiple
-<<geometry-invocations, instances>>.
-A geometry shader is invoked at least once for each instance.
-ifdef::VK_VERSION_1_1,VK_KHR_multiview[]
-If the subpass includes multiple views in its view mask, the shader may: be
-invoked separately for each view.
-endif::VK_VERSION_1_1,VK_KHR_multiview[]
-
-
-[[shaders-fragment]]
-== Fragment Shaders
-
-Fragment shaders are invoked as a <<fragops-shader, fragment operation>> in
-a graphics pipeline.
-Each fragment shader invocation operates on a single fragment and its
-associated data.
-With few exceptions, fragment shaders do not have access to any data
-associated with other fragments and are considered to execute in isolation
-of fragment shader invocations associated with other fragments.
-
-
-[[shaders-compute]]
-== Compute Shaders
-
-Compute shaders are invoked via flink:vkCmdDispatch and
-flink:vkCmdDispatchIndirect commands.
-In general, they have access to similar resources as shader stages executing
-as part of a graphics pipeline.
-
-Compute workloads are formed from groups of work items called workgroups and
-processed by the compute shader in the current compute pipeline.
-A workgroup is a collection of shader invocations that execute the same
-shader, potentially in parallel.
-Compute shaders execute in _global workgroups_ which are divided into a
-number of _local workgroups_ with a size that can: be set by assigning a
-value to the code:LocalSize
-ifdef::VK_KHR_maintenance4[or code:LocalSizeId]
-execution mode or via an object decorated by the code:WorkgroupSize
-decoration.
-An invocation within a local workgroup can: share data with other members of
-the local workgroup through shared variables and issue memory and control
-flow barriers to synchronize with other members of the local workgroup.
-
-
-ifdef::VK_NV_ray_tracing,VK_KHR_ray_tracing_pipeline[]
-[[shaders-raytracing-shaders]]
-[[shaders-ray-generation]]
-== Ray Generation Shaders
-
-A ray generation shader is similar to a compute shader.
-Its main purpose is to execute ray tracing queries using code:OpTraceRayKHR
-instructions and process the results.
-
-
-[[shaders-ray-generation-execution]]
-=== Ray Generation Shader Execution
-
-One ray generation shader is executed per ray tracing dispatch.
-Its location in the shader binding table (see <<shader-binding-table,Shader
-Binding Table>> for details) is passed directly into fname:vkCmdTraceRaysKHR
-using the pname:raygenShaderBindingTableBuffer and
-pname:raygenShaderBindingOffset parameters.
-
-
-[[shaders-intersection]]
-== Intersection Shaders
-
-Intersection shaders enable the implementation of arbitrary, application
-defined geometric primitives.
-An intersection shader for a primitive is executed whenever its axis-aligned
-bounding box is hit by a ray.
-
-Like other ray tracing shader domains, an intersection shader operates on a
-single ray at a time.
-It also operates on a single primitive at a time.
-It is therefore the purpose of an intersection shader to compute the
-ray-primitive intersections and report them.
-To report an intersection, the shader calls the code:OpReportIntersectionKHR
-instruction.
-
-An intersection shader communicates with any-hit and closest shaders by
-generating attribute values that they can: read.
-Intersection shaders cannot: read or modify the ray payload.
-
-
-[[shaders-intersection-execution]]
-=== Intersection Shader Execution
-The order in which intersections are found along a ray, and therefore the
-order in which intersection shaders are executed, is unspecified.
-
-The intersection shader of the closest AABB which intersects the ray is
-guaranteed to be executed at some point during traversal, unless the ray is
-forcibly terminated.
-
-
-[[shaders-any-hit]]
-== Any-Hit Shaders
-
-The any-hit shader is executed after the intersection shader reports an
-intersection that lies within the current [eq]#[t~min~,t~max~]# of the ray.
-The main use of any-hit shaders is to programmatically decide whether or not
-an intersection will be accepted.
-The intersection will be accepted unless the shader calls the
-code:OpIgnoreIntersectionKHR instruction.
-Any-hit shaders have read-only access to the attributes generated by the
-corresponding intersection shader, and can: read or modify the ray payload.
-
-
-[[shaders-any-hit-execution]]
-=== Any-Hit Shader Execution
-
-The order in which intersections are found along a ray, and therefore the
-order in which any-hit shaders are executed, is unspecified.
-
-The any-hit shader of the closest hit is guaranteed to be executed at some
-point during traversal, unless the ray is forcibly terminated.
-
-
-[[shaders-closest-hit]]
-== Closest Hit Shaders
-
-Closest hit shaders have read-only access to the attributes generated by the
-corresponding intersection shader, and can: read or modify the ray payload.
-They also have access to a number of system-generated values.
-Closest hit shaders can: call code:OpTraceRayKHR to recursively trace rays.
-
-
-[[shaders-closest-hit-execution]]
-=== Closest Hit Shader Execution
-
-Exactly one closest hit shader is executed when traversal is finished and an
-intersection has been found and accepted.
-
-
-[[shaders-miss]]
-== Miss Shaders
-
-Miss shaders can: access the ray payload and can: trace new rays through the
-code:OpTraceRayKHR instruction, but cannot: access attributes since they are
-not associated with an intersection.
-
-
-[[shaders-miss-execution]]
-=== Miss Shader Execution
-
-A miss shader is executed instead of a closest hit shader if no intersection
-was found during traversal.
-
-
-[[shaders-callable]]
-== Callable Shaders
-
-Callable shaders can: access a callable payload that works similarly to ray
-payloads to do subroutine work.
-
-
-[[shaders-callable-execution]]
-=== Callable Shader Execution
-
-A callable shader is executed by calling code:OpExecuteCallableKHR from an
-allowed shader stage.
-
-endif::VK_NV_ray_tracing,VK_KHR_ray_tracing_pipeline[]
-
-
-[[shaders-interpolation-decorations]]
-== Interpolation Decorations
-
-Interpolation decorations control the behavior of attribute interpolation in
-the fragment shader stage.
-Interpolation decorations can: be applied to code:Input storage class
-variables in the fragment shader stage's interface, and control the
-interpolation behavior of those variables.
-
-Inputs that could be interpolated can: be decorated by at most one of the
-following decorations:
-
-  * code:Flat: no interpolation
-  * code:NoPerspective: linear interpolation (for
-    <<line_linear_interpolation,lines>> and
-    <<triangle_linear_interpolation,polygons>>)
-ifdef::VK_NV_fragment_shader_barycentric[]
-  * code:PerVertexNV: values fetched from shader-specified primitive vertex
-endif::VK_NV_fragment_shader_barycentric[]
-
-Fragment input variables decorated with neither code:Flat nor
-code:NoPerspective use perspective-correct interpolation (for
-<<line_perspective_interpolation,lines>> and
-<<triangle_perspective_interpolation,polygons>>).
-
-The presence of and type of interpolation is controlled by the above
-interpolation decorations as well as the auxiliary decorations code:Centroid
-and code:Sample.
-
-A variable decorated with code:Flat will not be interpolated.
-Instead, it will have the same value for every fragment within a triangle.
-This value will come from a single <<vertexpostproc-flatshading,provoking
-vertex>>.
-A variable decorated with code:Flat can: also be decorated with
-code:Centroid or code:Sample, which will mean the same thing as decorating
-it only as code:Flat.
-
-For fragment shader input variables decorated with neither code:Centroid nor
-code:Sample, the assigned variable may: be interpolated anywhere within the
-fragment and a single value may: be assigned to each sample within the
-fragment.
-
-If a fragment shader input is decorated with code:Centroid, a single value
-may: be assigned to that variable for all samples in the fragment, but that
-value must: be interpolated to a location that lies in both the fragment and
-in the primitive being rendered, including any of the fragment's samples
-covered by the primitive.
-Because the location at which the variable is interpolated may: be different
-in neighboring fragments, and derivatives may: be computed by computing
-differences between neighboring fragments, derivatives of centroid-sampled
-inputs may: be less accurate than those for non-centroid interpolated
-variables.
-ifdef::VK_EXT_post_depth_coverage[]
-The code:PostDepthCoverage execution mode does not affect the determination
-of the centroid location.
-endif::VK_EXT_post_depth_coverage[]
-
-If a fragment shader input is decorated with code:Sample, a separate value
-must: be assigned to that variable for each covered sample in the fragment,
-and that value must: be sampled at the location of the individual sample.
-When pname:rasterizationSamples is ename:VK_SAMPLE_COUNT_1_BIT, the fragment
-center must: be used for code:Centroid, code:Sample, and undecorated
-attribute interpolation.
-
-Fragment shader inputs that are signed or unsigned integers, integer
-vectors, or any double-precision floating-point type must: be decorated with
-code:Flat.
-
-ifdef::VK_AMD_shader_explicit_vertex_parameter[]
-When the `apiext:VK_AMD_shader_explicit_vertex_parameter` device extension
-is enabled inputs can: be also decorated with the code:CustomInterpAMD
-interpolation decoration, including fragment shader inputs that are signed
-or unsigned integers, integer vectors, or any double-precision
-floating-point type.
-Inputs decorated with code:CustomInterpAMD can: only be accessed by the
-extended instruction code:InterpolateAtVertexAMD and allows accessing the
-value of the input for individual vertices of the primitive.
-endif::VK_AMD_shader_explicit_vertex_parameter[]
-
-ifdef::VK_NV_fragment_shader_barycentric[]
-[[shaders-interpolation-decorations-pervertexnv]]
-When the pname:fragmentShaderBarycentric feature is enabled, inputs can: be
-also decorated with the code:PerVertexNV interpolation decoration, including
-fragment shader inputs that are signed or unsigned integers, integer
-vectors, or any double-precision floating-point type.
-Inputs decorated with code:PerVertexNV can: only be accessed using an extra
-array dimension, where the extra index identifies one of the vertices of the
-primitive that produced the fragment.
-endif::VK_NV_fragment_shader_barycentric[]
-
-
-[[shaders-staticuse]]
-== Static Use
-
-A SPIR-V module declares a global object in memory using the code:OpVariable
-instruction, which results in a pointer code:x to that object.
-A specific entry point in a SPIR-V module is said to _statically use_ that
-object if that entry point's call tree contains a function containing a
-memory instruction or image instruction with code:x as an code:id operand.
-See the "`Memory Instructions`" and "`Image Instructions`" subsections of
-section 3 "`Binary Form`" of the SPIR-V specification for the complete list
-of SPIR-V memory instructions.
-
-Static use is not used to control the behavior of variables with code:Input
-and code:Output storage.
-The effects of those variables are applied based only on whether they are
-present in a shader entry point's interface.
-
-
-[[shaders-scope]]
-== Scope
-
-A _scope_ describes a set of shader invocations, where each such set is a
-_scope instance_.
-Each invocation belongs to one or more scope instances, but belongs to no
-more than one scope instance for each scope.
-
-The operations available between invocations in a given scope instance vary,
-with smaller scopes generally able to perform more operations, and with
-greater efficiency.
-
-
-[[shaders-scope-cross-device]]
-=== Cross Device
-
-All invocations executed in a Vulkan instance fall into a single _cross
-device scope instance_.
-
-Whilst the code:CrossDevice scope is defined in SPIR-V, it is disallowed in
-Vulkan.
-API <<synchronization, synchronization>> commands can: be used to
-communicate between devices.
-
-
-[[shaders-scope-device]]
-=== Device
-
-All invocations executed on a single device form a _device scope instance_.
-
-ifdef::VK_VERSION_1_2,VK_KHR_vulkan_memory_model[]
-If the <<features-vulkanMemoryModel,pname:vulkanMemoryModel>> and
-<<features-vulkanMemoryModelDeviceScope,
-pname:vulkanMemoryModelDeviceScope>> features are enabled, this scope is
-represented in SPIR-V by the code:Device code:Scope, which can: be used as a
-code:Memory code:Scope for barrier and atomic operations.
-
-ifdef::VK_KHR_shader_clock[]
-If both the <<features-shaderDeviceClock, pname:shaderDeviceClock>> and
-<<features-vulkanMemoryModelDeviceScope,
-pname:vulkanMemoryModelDeviceScope>> features are enabled, using the
-code:Device code:Scope with the code:OpReadClockKHR instruction will read
-from a clock that is consistent across invocations in the same device scope
-instance.
-endif::VK_KHR_shader_clock[]
-endif::VK_VERSION_1_2,VK_KHR_vulkan_memory_model[]
-
-There is no method to synchronize the execution of these invocations within
-SPIR-V, and this can: only be done with API synchronization primitives.
-
-ifdef::VK_VERSION_1_1,VK_KHR_device_group[]
-Invocations executing on different devices in a device group operate in
-separate device scope instances.
-endif::VK_VERSION_1_1,VK_KHR_device_group[]
-
-ifndef::VK_VERSION_1_2,VK_KHR_vulkan_memory_model[]
-The scope only extends to the queue family, not the whole device.
-endif::VK_VERSION_1_2,VK_KHR_vulkan_memory_model[]
-
-
-[[shaders-scope-queue-family]]
-=== Queue Family
-
-Invocations executed by queues in a given queue family form a _queue family
-scope instance_.
-
-This scope is identified in SPIR-V as the
-ifdef::VK_VERSION_1_2,VK_KHR_vulkan_memory_model[]
-code:QueueFamily code:Scope if the
-<<features-vulkanMemoryModel,pname:vulkanMemoryModel>> feature is enabled,
-or if not, the
-endif::VK_VERSION_1_2,VK_KHR_vulkan_memory_model[]
-code:Device code:Scope, which can: be used as a code:Memory code:Scope for
-barrier and atomic operations.
-
-ifdef::VK_KHR_shader_clock[]
-If the <<features-shaderDeviceClock, pname:shaderDeviceClock>> feature is
-enabled,
-ifdef::VK_VERSION_1_2,VK_KHR_vulkan_memory_model[]
-but the <<features-vulkanMemoryModelDeviceScope,
-pname:vulkanMemoryModelDeviceScope>> feature is not enabled,
-endif::VK_VERSION_1_2,VK_KHR_vulkan_memory_model[]
-using the code:Device code:Scope with the code:OpReadClockKHR instruction
-will read from a clock that is consistent across invocations in the same
-queue family scope instance.
-endif::VK_KHR_shader_clock[]
-
-There is no method to synchronize the execution of these invocations within
-SPIR-V, and this can: only be done with API synchronization primitives.
-
-Each invocation in a queue family scope instance must: be in the same
-<<shaders-scope-device, device scope instance>>.
-
-
-[[shaders-scope-command]]
-=== Command
-
-Any shader invocations executed as the result of a single command such as
-flink:vkCmdDispatch or flink:vkCmdDraw form a _command scope instance_.
-For indirect drawing commands with pname:drawCount greater than one,
-invocations from separate draws are in separate command scope instances.
-ifdef::VK_KHR_ray_tracing_pipeline,VK_NV_ray_tracing[]
-For ray tracing shaders, an invocation group is an implementation-dependent
-subset of the set of shader invocations of a given shader stage which are
-produced by a single trace rays command.
-endif::VK_KHR_ray_tracing_pipeline,VK_NV_ray_tracing[]
-
-There is no specific code:Scope for communication across invocations in a
-command scope instance.
-As this has a clear boundary at the API level, coordination here can: be
-performed in the API, rather than in SPIR-V.
-
-Each invocation in a command scope instance must: be in the same
-<<shaders-scope-queue-family, queue-family scope instance>>.
-
-For shaders without defined <<shaders-scope-workgroup, workgroups>>, this
-set of invocations forms an _invocation group_ as defined in the
-<<spirv-spec,SPIR-V specification>>.
-
-
-[[shaders-scope-primitive]]
-=== Primitive
-
-Any fragment shader invocations executed as the result of rasterization of a
-single primitive form a _primitive scope instance_.
-
-There is no specific code:Scope for communication across invocations in a
-primitive scope instance.
-
-Any generated <<shaders-helper-invocations, helper invocations>> are
-included in this scope instance.
-
-Each invocation in a primitive scope instance must: be in the same
-<<shaders-scope-command, command scope instance>>.
-
-Any input variables decorated with code:Flat are uniform within a primitive
-scope instance.
-
-
-// intentionally no VK_NV_ray_tracing here since this scope does not exist there
-ifdef::VK_KHR_ray_tracing_pipeline[]
-[[shaders-scope-shadercall]]
-=== Shader Call
-
-Any <<shader-call-related,shader-call-related>> invocations that are
-executed in one or more ray tracing execution models form a _shader call
-scope instance_.
-
-The code:ShaderCallKHR code:Scope can be used as code:Memory code:Scope for
-barrier and atomic operations.
-
-Each invocation in a shader call scope instance must: be in the same
-<<shaders-scope-queue-family, queue family scope instance>>.
-endif::VK_KHR_ray_tracing_pipeline[]
-
-
-[[shaders-scope-workgroup]]
-=== Workgroup
-
-A _local workgroup_ is a set of invocations that can synchronize and share
-data with each other using memory in the code:Workgroup storage class.
-
-The code:Workgroup code:Scope can be used as both an code:Execution
-code:Scope and code:Memory code:Scope for barrier and atomic operations.
-
-Each invocation in a local workgroup must: be in the same
-<<shaders-scope-command, command scope instance>>.
-
-Only
-ifdef::VK_NV_mesh_shader[]
-task, mesh, and
-endif::VK_NV_mesh_shader[]
-compute shaders have defined workgroups - other shader types cannot: use
-workgroup functionality.
-For shaders that have defined workgroups, this set of invocations forms an
-_invocation group_ as defined in the <<spirv-spec,SPIR-V specification>>.
-
-
-ifdef::VK_VERSION_1_1[]
-[[shaders-scope-subgroup]]
-=== Subgroup
-
-A _subgroup_ (see the subsection "`Control Flow`" of section 2 of the SPIR-V
-1.3 Revision 1 specification) is a set of invocations that can synchronize
-and share data with each other efficiently.
-
-The code:Subgroup code:Scope can be used as both an code:Execution
-code:Scope and code:Memory code:Scope for barrier and atomic operations.
-Other <<VkSubgroupFeatureFlagBits, subgroup features>> allow the use of
-<<shaders-group-operations, group operations>> with subgroup scope.
-
-ifdef::VK_KHR_shader_clock[]
-If the <<features-shaderSubgroupClock, pname:shaderSubgroupClock>> feature
-is enabled, using the code:Subgroup code:Scope with the code:OpReadClockKHR
-instruction will read from a clock that is consistent across invocations in
-the same subgroup.
-endif::VK_KHR_shader_clock[]
-
-For <<shaders-scope-workgroup, shaders that have defined workgroups>>, each
-invocation in a subgroup must: be in the same <<shaders-scope-workgroup,
-local workgroup>>.
-
-In other shader stages, each invocation in a subgroup must: be in the same
-<<shaders-scope-device, device scope instance>>.
-
-Only <<limits-subgroup-supportedStages, shader stages that support subgroup
-operations>> have defined subgroups.
-endif::VK_VERSION_1_1[]
-
-
-[[shaders-scope-quad]]
-=== Quad
-
-A _quad scope instance_ is formed of four shader invocations.
-
-In a fragment shader, each invocation in a quad scope instance is formed of
-invocations in neighboring framebuffer locations [eq]#(x~i~, y~i~)#, where:
-
-  * [eq]#i# is the index of the invocation within the scope instance.
-  * [eq]#w# and [eq]#h# are the number of pixels the fragment covers in the
-    [eq]#x# and [eq]#y# axes.
-  * [eq]#w# and [eq]#h# are identical for all participating invocations.
-  * [eq]#(x~0~) = (x~1~ - w) = (x~2~) = (x~3~ - w)#
-  * [eq]#(y~0~) = (y~1~) = (y~2~ - h) = (y~3~ - h)#
-  * Each invocation has the same layer and sample indices.
-
-ifdef::VK_NV_compute_shader_derivatives[]
-In a compute shader, if the code:DerivativeGroupQuadsNV execution mode is
-specified, each invocation in a quad scope instance is formed of invocations
-with adjacent local invocation IDs [eq]#(x~i~, y~i~)#, where:
-
-  * [eq]#i# is the index of the invocation within the quad scope instance.
-  * [eq]#(x~0~) = (x~1~ - 1) = (x~2~) = (x~3~ - 1)#
-  * [eq]#(y~0~) = (y~1~) = (y~2~ - 1) = (y~3~ - 1)#
-  * [eq]#x~0~# and [eq]#y~0~# are integer multiples of 2.
-  * Each invocation has the same [eq]#z# coordinate.
-
-In a compute shader, if the code:DerivativeGroupLinearNV execution mode is
-specified, each invocation in a quad scope instance is formed of invocations
-with adjacent local invocation indices [eq]#(l~i~)#, where:
-
-  * [eq]#i# is the index of the invocation within the quad scope instance.
-  * [eq]#(l~0~) = (l~1~ - 1) = (l~2~ - 2) = (l~3~ - 3)#
-  * [eq]#l~0~# is an integer multiple of 4.
-
-endif::VK_NV_compute_shader_derivatives[]
-
-ifdef::VK_VERSION_1_1[]
-In all shaders, each invocation in a quad scope instance is formed of
-invocations in adjacent subgroup invocation indices [eq]#(s~i~)#, where:
-
-  * [eq]#i# is the index of the invocation within the quad scope instance.
-  * [eq]#(s~0~) = (s~1~ - 1) = (s~2~ - 2) = (s~3~ - 3)#
-  * [eq]#s~0~# is an integer multiple of 4.
-
-Each invocation in a quad scope instance must: be in the same
-<<shaders-scope-subgroup, subgroup>>.
-endif::VK_VERSION_1_1[]
-
-ifndef::VK_VERSION_1_1[]
-The specific set of invocations that make up a quad scope instance in other
-shader stages is undefined:.
-endif::VK_VERSION_1_1[]
-
-In a fragment shader, each invocation in a quad scope instance must: be in
-the same <<shaders-scope-primitive, primitive scope instance>>.
-
-ifndef::VK_VERSION_1_1[]
-For <<shaders-scope-workgroup, shaders that have defined workgroups>>, each
-invocation in a quad scope instance must: be in the same
-<<shaders-scope-workgroup, local workgroup>>.
-
-In other shader stages, each invocation in a quad scope instance must: be in
-the same <<shaders-scope-device, device scope instance>>.
-endif::VK_VERSION_1_1[]
-
-Fragment
-ifdef::VK_NV_compute_shader_derivatives,VK_VERSION_1_1[]
-and compute
-endif::VK_NV_compute_shader_derivatives,VK_VERSION_1_1[]
-shaders have defined quad scope instances.
-ifdef::VK_VERSION_1_1[]
-If the <<limits-subgroup-quadOperationsInAllStages,
-pname:quadOperationsInAllStages>> limit is supported, any
-<<limits-subgroup-supportedStages, shader stages that support subgroup
-operations>> also have defined quad scope instances.
-endif::VK_VERSION_1_1[]
-
-
-ifdef::VK_EXT_fragment_shader_interlock[]
-[[shaders-scope-fragment-interlock]]
-=== Fragment Interlock
-
-A _fragment interlock scope instance_ is formed of fragment shader
-invocations based on their framebuffer locations [eq]#(x,y,layer,sample)#,
-executed by commands inside a single <<renderpass,subpass>>.
-
-The specific set of invocations included varies based on the execution mode
-as follows:
-
-  * If the code:SampleInterlockOrderedEXT or
-    code:SampleInterlockUnorderedEXT execution modes are used, only
-    invocations with identical framebuffer locations
-    [eq]#(x,y,layer,sample)# are included.
-  * If the code:PixelInterlockOrderedEXT or code:PixelInterlockUnorderedEXT
-    execution modes are used, fragments with different sample ids are also
-    included.
-ifdef::VK_NV_shading_rate_image,VK_KHR_fragment_shading_rate[]
-  * If the code:ShadingRateInterlockOrderedEXT or
-    code:ShadingRateInterlockUnorderedEXT execution modes are used,
-    fragments from neighbouring framebuffer locations are also included, as
-    <<primsrast-shading-rate-image,determined by the shading rate>>.
-endif::VK_NV_shading_rate_image,VK_KHR_fragment_shading_rate[]
-
-Only fragment shaders with one of the above execution modes have defined
-fragment interlock scope instances.
-
-There is no specific code:Scope value for communication across invocations
-in a fragment interlock scope instance.
-However, this is implicitly used as a memory scope by
-code:OpBeginInvocationInterlockEXT and code:OpEndInvocationInterlockEXT.
-
-Each invocation in a fragment interlock scope instance must: be in the same
-<<shaders-scope-queue-family, queue family scope instance>>.
-endif::VK_EXT_fragment_shader_interlock[]
-
-
-[[shaders-scope-invocation]]
-=== Invocation
-
-The smallest _scope_ is a single invocation; this is represented by the
-code:Invocation code:Scope in SPIR-V.
-
-Fragment shader invocations must: be in a <<shaders-scope-primitive,
-primitive scope instance>>.
-
-ifdef::VK_EXT_fragment_shader_interlock[]
-Invocations in <<shaders-scope-fragment-interlock, fragment shaders that
-have a defined fragment interlock scope>> must: be in a
-<<shaders-scope-fragment-interlock, fragment interlock scope instance>>.
-endif::VK_EXT_fragment_shader_interlock[]
-
-Invocations in <<shaders-scope-workgroup, shaders that have defined
-workgroups>> must: be in a <<shaders-scope-workgroup, local workgroup>>.
-
-ifdef::VK_VERSION_1_1[]
-Invocations in <<shaders-scope-subgroup, shaders that have a defined
-subgroup scope>> must: be in a <<shaders-scope-subgroup, subgroup>>.
-endif::VK_VERSION_1_1[]
-
-Invocations in <<shaders-scope-quad, shaders that have a defined quad
-scope>> must: be in a <<shaders-scope-quad, quad scope instance>>.
-
-All invocations in all stages must: be in a <<shaders-scope-command,command
-scope instance>>.
-
-
-ifdef::VK_VERSION_1_1[]
-[[shaders-group-operations]]
-== Group Operations
-
-_Group operations_ are executed by multiple invocations within a
-<<shaders-scope, scope instance>>; with each invocation involved in
-calculating the result.
-This provides a mechanism for efficient communication between invocations in
-a particular scope instance.
-
-Group operations all take a code:Scope defining the desired
-<<shaders-scope,scope instance>> to operate within.
-Only the code:Subgroup scope can: be used for these operations; the
-<<limits-subgroupSupportedOperations, pname:subgroupSupportedOperations>>
-limit defines which types of operation can: be used.
-
-
-[[shaders-group-operations-basic]]
-=== Basic Group Operations
-
-Basic group operations include the use of code:OpGroupNonUniformElect,
-code:OpControlBarrier, code:OpMemoryBarrier, and atomic operations.
-
-code:OpGroupNonUniformElect can: be used to choose a single invocation to
-perform a task for the whole group.
-Only the invocation with the lowest id in the group will return code:true.
-
-The <<memory-model,Memory Model>> appendix defines the operation of barriers
-and atomics.
-
-
-[[shaders-group-operations-vote]]
-=== Vote Group Operations
-
-The vote group operations allow invocations within a group to compare values
-across a group.
-The types of votes enabled are:
-
-  * Do all active group invocations agree that an expression is true?
-  * Do any active group invocations evaluate an expression to true?
-  * Do all active group invocations have the same value of an expression?
-
-[NOTE]
-.Note
-====
-These operations are useful in combination with control flow in that they
-allow for developers to check whether conditions match across the group and
-choose potentially faster code-paths in these cases.
-====
-
-
-[[shaders-group-operations-arithmetic]]
-=== Arithmetic Group Operations
-
-The arithmetic group operations allow invocations to perform scans and
-reductions across a group.
-The operators supported are add, mul, min, max, and, or, xor.
-
-For reductions, every invocation in a group will obtain the cumulative
-result of these operators applied to all values in the group.
-For exclusive scans, each invocation in a group will obtain the cumulative
-result of these operators applied to all values in invocations with a lower
-index in the group.
-Inclusive scans are identical to exclusive scans, except the cumulative
-result includes the operator applied to the value in the current invocation.
-
-The order in which these operators are applied is implementation-dependent.
-
-
-[[shaders-group-operations-ballot]]
-=== Ballot Group Operations
-
-The ballot group operations allow invocations to perform more complex votes
-across the group.
-The ballot functionality allows all invocations within a group to provide a
-boolean value and get as a result what each invocation provided as their
-boolean value.
-The broadcast functionality allows values to be broadcast from an invocation
-to all other invocations within the group.
-
-
-[[shaders-group-operations-shuffle]]
-=== Shuffle Group Operations
-
-The shuffle group operations allow invocations to read values from other
-invocations within a group.
-
-
-[[shaders-group-operations-shuffle-relative]]
-=== Shuffle Relative Group Operations
-
-The shuffle relative group operations allow invocations to read values from
-other invocations within the group relative to the current invocation in the
-group.
-The relative operations supported allow data to be shifted up and down
-through the invocations within a group.
-
-
-[[shaders-group-operations-clustered]]
-=== Clustered Group Operations
-
-The clustered group operations allow invocations to perform an operation
-among partitions of a group, such that the operation is only performed
-within the group invocations within a partition.
-The partitions for clustered group operations are consecutive power-of-two
-size groups of invocations and the cluster size must: be known at pipeline
-creation time.
-The operations supported are add, mul, min, max, and, or, xor.
-
-
-[[shaders-quad-operations]]
-== Quad Group Operations
-
-Quad group operations (code:OpGroupNonUniformQuad*) are a specialized type
-of <<shaders-group-operations, group operations>> that only operate on
-<<shaders-scope-quad, quad scope instances>>.
-Whilst these instructions do include a code:Scope parameter, this scope is
-always overridden; only the <<shaders-scope-quad, quad scope instance>> is
-included in its execution scope.
-
-Fragment shaders that statically execute quad group operations must: launch
-sufficient invocations to ensure their correct operation; additional
-<<shaders-helper-invocations, helper invocations>> are launched for
-framebuffer locations not covered by rasterized fragments if necessary.
-
-The index used to select participating invocations is [eq]#i#, as described
-for a <<shaders-scope-quad, quad scope instance>>, defined as the _quad
-index_ in the <<spirv-spec,SPIR-V specification>>.
-
-For code:OpGroupNonUniformQuadBroadcast this value is equal to code:Index.
-For code:OpGroupNonUniformQuadSwap, it is equal to the implicit code:Index
-used by each participating invocation.
-endif::VK_VERSION_1_1[]
-
-
-[[shaders-derivative-operations]]
-== Derivative Operations
-
-Derivative operations calculate the partial derivative for an expression
-[eq]#P# as a function of an invocation's [eq]#x# and [eq]#y# coordinates.
-
-Derivative operations operate on a set of invocations known as a _derivative
-group_ as defined in the <<spirv-spec,SPIR-V specification>>.
-A derivative group is equivalent to
-ifdef::VK_NV_compute_shader_derivatives[]
-the <<shaders-scope-quad, quad scope instance>> for a compute shader
-invocation, or
-endif::VK_NV_compute_shader_derivatives[]
-the <<shaders-scope-primitive, primitive scope instance>> for a fragment
-shader invocation.
-
-Derivatives are calculated assuming that [eq]#P# is piecewise linear and
-continuous within the derivative group.
-All dynamic instances of explicit derivative instructions (code:OpDPdx*,
-code:OpDPdy*, and code:OpFwidth*) must: be executed in control flow that is
-uniform within a derivative group.
-For other derivative operations, results are undefined: if a dynamic
-instance is executed in control flow that is not uniform within the
-derivative group.
-
-Fragment shaders that statically execute derivative operations must: launch
-sufficient invocations to ensure their correct operation; additional
-<<shaders-helper-invocations, helper invocations>> are launched for
-framebuffer locations not covered by rasterized fragments if necessary.
-
-ifdef::VK_NV_compute_shader_derivatives[]
-[NOTE]
-.Note
-====
-In a compute shader, it is the application's responsibility to ensure that
-sufficient invocations are launched.
-====
-endif::VK_NV_compute_shader_derivatives[]
-
-Derivative operations calculate their results as the difference between the
-result of [eq]#P# across invocations in the quad.
-For fine derivative operations (code:OpDPdxFine and code:OpDPdyFine), the
-values of [eq]#DPdx(P~i~)# are calculated as
-
-  {empty}:: [eq]#DPdx(P~0~) = DPdx(P~1~) = P~1~ - P~0~#
-  {empty}:: [eq]#DPdx(P~2~) = DPdx(P~3~) = P~3~ - P~2~#
-
-and the values of [eq]#DPdy(P~i~)# are calculated as
-
-  {empty}:: [eq]#DPdy(P~0~) = DPdy(P~2~) = P~2~ - P~0~#
-  {empty}:: [eq]#DPdy(P~1~) = DPdy(P~3~) = P~3~ - P~1~#
-
-where [eq]#i# is the index of each invocation as described in
-<<shaders-scope-quad>>.
-
-Coarse derivative operations (code:OpDPdxCoarse and code:OpDPdyCoarse),
-calculate their results in roughly the same manner, but may: only calculate
-two values instead of four (one for each of [eq]#DPdx# and [eq]#DPdy#),
-reusing the same result no matter the originating invocation.
-If an implementation does this, it should: use the fine derivative
-calculations described for [eq]#P~0~#.
-
-[NOTE]
-.Note
-====
-Derivative values are calculated between fragments rather than pixels.
-If the fragment shader invocations involved in the calculation cover
-multiple pixels, these operations cover a wider area, resulting in larger
-derivative values.
-This in turn will result in a coarser level of detail being selected for
-image sampling operations using derivatives.
-
-Applications may want to account for this when using multi-pixel fragments;
-if pixel derivatives are desired, applications should use explicit
-derivative operations and divide the results by the size of the fragment in
-each dimension as follows:
-
-  {empty}:: [eq]#DPdx(P~n~)' = DPdx(P~n~) / w#
-  {empty}:: [eq]#DPdy(P~n~)' = DPdy(P~n~) / h#
-
-where [eq]#w# and [eq]#h# are the size of the fragments in the quad, and
-[eq]#DPdx(P~n~)'# and [eq]#DPdy(P~n~)'# are the pixel derivatives.
-====
-
-The results for code:OpDPdx and code:OpDPdy may: be calculated as either
-fine or coarse derivatives, with implementations favouring the most
-efficient approach.
-Implementations must: choose coarse or fine consistently between the two.
-
-Executing code:OpFwidthFine, code:OpFwidthCoarse, or code:OpFwidth is
-equivalent to executing the corresponding code:OpDPdx* and code:OpDPdy*
-instructions, taking the absolute value of the results, and summing them.
-
-Executing an code:OpImage*Sample*ImplicitLod instruction is equivalent to
-executing code:OpDPdx(code:Coordinate) and code:OpDPdy(code:Coordinate), and
-passing the results as the code:Grad operands code:dx and code:dy.
-
-[NOTE]
-.Note
-====
-It is expected that using the code:ImplicitLod variants of sampling
-functions will be substantially more efficient than using the
-code:ExplicitLod variants with explicitly generated derivatives.
-====
-
-
-[[shaders-helper-invocations]]
-== Helper Invocations
-
-When performing <<shaders-derivative-operations, derivative>>
-ifdef::VK_VERSION_1_1[]
-or <<shaders-quad-operations, quad group>>
-endif::VK_VERSION_1_1[]
-operations in a fragment shader, additional invocations may: be spawned in
-order to ensure correct results.
-These additional invocations are known as _helper invocations_ and can: be
-identified by a non-zero value in the code:HelperInvocation built-in.
-Stores and atomics performed by helper invocations must: not have any effect
-on memory, and values returned by atomic instructions in helper invocations
-are undefined:.
-
-Helper invocations may: become inactive at any time for any reason, with one
-exception.
-If a helper invocation would be active if it were not a helper invocation,
-it must: be active for <<shaders-derivative-operations, derivative>>
-ifdef::VK_VERSION_1_1[]
-and <<shaders-quad-operations, quad group>>
-endif::VK_VERSION_1_1[]
-operations.
-
-ifdef::VK_EXT_shader_demote_to_helper_invocation[]
-Helper invocations may: become permanently inactive if all invocations in a
-quad scope instance become helper invocations.
-endif::VK_EXT_shader_demote_to_helper_invocation[]
-
-
-ifdef::VK_NV_cooperative_matrix[]
-== Cooperative Matrices
-
-A _cooperative matrix_ type is a SPIR-V type where the storage for and
-computations performed on the matrix are spread across the invocations in a
-scope instance.
-These types give the implementation freedom in how to optimize matrix
-multiplies.
-
-SPIR-V defines the types and instructions, but does not specify rules about
-what sizes/combinations are valid, and it is expected that different
-implementations may: support different sizes.
-
-[open,refpage='vkGetPhysicalDeviceCooperativeMatrixPropertiesNV',desc='Returns properties describing what cooperative matrix types are supported',type='protos']
---
-To enumerate the supported cooperative matrix types and operations, call:
-
-include::{generated}/api/protos/vkGetPhysicalDeviceCooperativeMatrixPropertiesNV.txt[]
-
-  * pname:physicalDevice is the physical device.
-  * pname:pPropertyCount is a pointer to an integer related to the number of
-    cooperative matrix properties available or queried.
-  * pname:pProperties is either `NULL` or a pointer to an array of
-    slink:VkCooperativeMatrixPropertiesNV structures.
-
-If pname:pProperties is `NULL`, then the number of cooperative matrix
-properties available is returned in pname:pPropertyCount.
-Otherwise, pname:pPropertyCount must: point to a variable set by the user to
-the number of elements in the pname:pProperties array, and on return the
-variable is overwritten with the number of structures actually written to
-pname:pProperties.
-If pname:pPropertyCount is less than the number of cooperative matrix
-properties available, at most pname:pPropertyCount structures will be
-written, and ename:VK_INCOMPLETE will be returned instead of
-ename:VK_SUCCESS, to indicate that not all the available cooperative matrix
-properties were returned.
-
-include::{generated}/validity/protos/vkGetPhysicalDeviceCooperativeMatrixPropertiesNV.txt[]
---
-
-[open,refpage='VkCooperativeMatrixPropertiesNV',desc='Structure specifying cooperative matrix properties',type='structs']
---
-Each sname:VkCooperativeMatrixPropertiesNV structure describes a single
-supported combination of types for a matrix multiply/add operation
-(code:OpCooperativeMatrixMulAddNV).
-The multiply can: be described in terms of the following variables and types
-(in SPIR-V pseudocode):
-
-[source,c]
-~~~~
-    %A is of type OpTypeCooperativeMatrixNV %AType %scope %MSize %KSize
-    %B is of type OpTypeCooperativeMatrixNV %BType %scope %KSize %NSize
-    %C is of type OpTypeCooperativeMatrixNV %CType %scope %MSize %NSize
-    %D is of type OpTypeCooperativeMatrixNV %DType %scope %MSize %NSize
-
-    %D = %A * %B + %C // using OpCooperativeMatrixMulAddNV
-~~~~
-
-A matrix multiply with these dimensions is known as an _MxNxK_ matrix
-multiply.
-
-The sname:VkCooperativeMatrixPropertiesNV structure is defined as:
-
-include::{generated}/api/structs/VkCooperativeMatrixPropertiesNV.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:MSize is the number of rows in matrices A, C, and D.
-  * pname:KSize is the number of columns in matrix A and rows in matrix B.
-  * pname:NSize is the number of columns in matrices B, C, D.
-  * pname:AType is the component type of matrix A, of type
-    elink:VkComponentTypeNV.
-  * pname:BType is the component type of matrix B, of type
-    elink:VkComponentTypeNV.
-  * pname:CType is the component type of matrix C, of type
-    elink:VkComponentTypeNV.
-  * pname:DType is the component type of matrix D, of type
-    elink:VkComponentTypeNV.
-  * pname:scope is the scope of all the matrix types, of type
-    elink:VkScopeNV.
-
-If some types are preferred over other types (e.g. for performance), they
-should: appear earlier in the list enumerated by
-flink:vkGetPhysicalDeviceCooperativeMatrixPropertiesNV.
-
-At least one entry in the list must: have power of two values for all of
-pname:MSize, pname:KSize, and pname:NSize.
-
-include::{generated}/validity/structs/VkCooperativeMatrixPropertiesNV.txt[]
---
-
-[open,refpage='VkScopeNV',desc='Specify SPIR-V scope',type='enums']
---
-Possible values for elink:VkScopeNV include:
-
-include::{generated}/api/enums/VkScopeNV.txt[]
-
-  * ename:VK_SCOPE_DEVICE_NV corresponds to SPIR-V code:Device scope.
-  * ename:VK_SCOPE_WORKGROUP_NV corresponds to SPIR-V code:Workgroup scope.
-  * ename:VK_SCOPE_SUBGROUP_NV corresponds to SPIR-V code:Subgroup scope.
-  * ename:VK_SCOPE_QUEUE_FAMILY_NV corresponds to SPIR-V code:QueueFamily
-    scope.
-
-All enum values match the corresponding SPIR-V value.
---
-
-[open,refpage='VkComponentTypeNV',desc='Specify SPIR-V cooperative matrix component type',type='enums']
---
-Possible values for elink:VkComponentTypeNV include:
-
-include::{generated}/api/enums/VkComponentTypeNV.txt[]
-
-  * ename:VK_COMPONENT_TYPE_FLOAT16_NV corresponds to SPIR-V
-    code:OpTypeFloat 16.
-  * ename:VK_COMPONENT_TYPE_FLOAT32_NV corresponds to SPIR-V
-    code:OpTypeFloat 32.
-  * ename:VK_COMPONENT_TYPE_FLOAT64_NV corresponds to SPIR-V
-    code:OpTypeFloat 64.
-  * ename:VK_COMPONENT_TYPE_SINT8_NV corresponds to SPIR-V code:OpTypeInt 8 1.
-  * ename:VK_COMPONENT_TYPE_SINT16_NV corresponds to SPIR-V code:OpTypeInt
-    16 1.
-  * ename:VK_COMPONENT_TYPE_SINT32_NV corresponds to SPIR-V code:OpTypeInt
-    32 1.
-  * ename:VK_COMPONENT_TYPE_SINT64_NV corresponds to SPIR-V code:OpTypeInt
-    64 1.
-  * ename:VK_COMPONENT_TYPE_UINT8_NV corresponds to SPIR-V code:OpTypeInt 8 0.
-  * ename:VK_COMPONENT_TYPE_UINT16_NV corresponds to SPIR-V code:OpTypeInt
-    16 0.
-  * ename:VK_COMPONENT_TYPE_UINT32_NV corresponds to SPIR-V code:OpTypeInt
-    32 0.
-  * ename:VK_COMPONENT_TYPE_UINT64_NV corresponds to SPIR-V code:OpTypeInt
-    64 0.
---
-endif::VK_NV_cooperative_matrix[]
-
-
-ifdef::VK_EXT_validation_cache[]
-[[shaders-validation-cache]]
-== Validation Cache
-
-[open,refpage='VkValidationCacheEXT',desc='Opaque handle to a validation cache object',type='handles']
---
-Validation cache objects allow the result of internal validation to be
-reused, both within a single application run and between multiple runs.
-Reuse within a single run is achieved by passing the same validation cache
-object when creating supported Vulkan objects.
-Reuse across runs of an application is achieved by retrieving validation
-cache contents in one run of an application, saving the contents, and using
-them to preinitialize a validation cache on a subsequent run.
-The contents of the validation cache objects are managed by the validation
-layers.
-Applications can: manage the host memory consumed by a validation cache
-object and control the amount of data retrieved from a validation cache
-object.
-
-Validation cache objects are represented by sname:VkValidationCacheEXT
-handles:
-
-include::{generated}/api/handles/VkValidationCacheEXT.txt[]
---
-
-[open,refpage='vkCreateValidationCacheEXT',desc='Creates a new validation cache',type='protos']
---
-To create validation cache objects, call:
-
-include::{generated}/api/protos/vkCreateValidationCacheEXT.txt[]
-
-  * pname:device is the logical device that creates the validation cache
-    object.
-  * pname:pCreateInfo is a pointer to a slink:VkValidationCacheCreateInfoEXT
-    structure containing the initial parameters for the validation cache
-    object.
-  * pname:pAllocator controls host memory allocation as described in the
-    <<memory-allocation, Memory Allocation>> chapter.
-  * pname:pValidationCache is a pointer to a slink:VkValidationCacheEXT
-    handle in which the resulting validation cache object is returned.
-
-[NOTE]
-.Note
-====
-Applications can: track and manage the total host memory size of a
-validation cache object using the pname:pAllocator.
-Applications can: limit the amount of data retrieved from a validation cache
-object in fname:vkGetValidationCacheDataEXT.
-Implementations should: not internally limit the total number of entries
-added to a validation cache object or the total host memory consumed.
-====
-
-Once created, a validation cache can: be passed to the
-fname:vkCreateShaderModule command by adding this object to the
-slink:VkShaderModuleCreateInfo structure's pname:pNext chain.
-If a slink:VkShaderModuleValidationCacheCreateInfoEXT object is included in
-the slink:VkShaderModuleCreateInfo::pname:pNext chain, and its
-pname:validationCache field is not dlink:VK_NULL_HANDLE, the implementation
-will query it for possible reuse opportunities and update it with new
-content.
-The use of the validation cache object in these commands is internally
-synchronized, and the same validation cache object can: be used in multiple
-threads simultaneously.
-
-[NOTE]
-.Note
-====
-Implementations should: make every effort to limit any critical sections to
-the actual accesses to the cache, which is expected to be significantly
-shorter than the duration of the fname:vkCreateShaderModule command.
-====
-
-include::{generated}/validity/protos/vkCreateValidationCacheEXT.txt[]
---
-
-[open,refpage='VkValidationCacheCreateInfoEXT',desc='Structure specifying parameters of a newly created validation cache',type='structs']
---
-The sname:VkValidationCacheCreateInfoEXT structure is defined as:
-
-include::{generated}/api/structs/VkValidationCacheCreateInfoEXT.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:flags is reserved for future use.
-  * pname:initialDataSize is the number of bytes in pname:pInitialData.
-    If pname:initialDataSize is zero, the validation cache will initially be
-    empty.
-  * pname:pInitialData is a pointer to previously retrieved validation cache
-    data.
-    If the validation cache data is incompatible (as defined below) with the
-    device, the validation cache will be initially empty.
-    If pname:initialDataSize is zero, pname:pInitialData is ignored.
-
-.Valid Usage
-****
-  * [[VUID-VkValidationCacheCreateInfoEXT-initialDataSize-01534]]
-    If pname:initialDataSize is not `0`, it must: be equal to the size of
-    pname:pInitialData, as returned by fname:vkGetValidationCacheDataEXT
-    when pname:pInitialData was originally retrieved
-  * [[VUID-VkValidationCacheCreateInfoEXT-initialDataSize-01535]]
-    If pname:initialDataSize is not `0`, pname:pInitialData must: have been
-    retrieved from a previous call to fname:vkGetValidationCacheDataEXT
-****
-
-include::{generated}/validity/structs/VkValidationCacheCreateInfoEXT.txt[]
---
-
-[open,refpage='VkValidationCacheCreateFlagsEXT',desc='Reserved for future use',type='flags']
---
-include::{generated}/api/flags/VkValidationCacheCreateFlagsEXT.txt[]
-
-tname:VkValidationCacheCreateFlagsEXT is a bitmask type for setting a mask,
-but is currently reserved for future use.
---
-
-[open,refpage='vkMergeValidationCachesEXT',desc='Combine the data stores of validation caches',type='protos']
---
-Validation cache objects can: be merged using the command:
-
-include::{generated}/api/protos/vkMergeValidationCachesEXT.txt[]
-
-  * pname:device is the logical device that owns the validation cache
-    objects.
-  * pname:dstCache is the handle of the validation cache to merge results
-    into.
-  * pname:srcCacheCount is the length of the pname:pSrcCaches array.
-  * pname:pSrcCaches is a pointer to an array of validation cache handles,
-    which will be merged into pname:dstCache.
-    The previous contents of pname:dstCache are included after the merge.
-
-[NOTE]
-.Note
-====
-The details of the merge operation are implementation-dependent, but
-implementations should: merge the contents of the specified validation
-caches and prune duplicate entries.
-====
-
-.Valid Usage
-****
-  * [[VUID-vkMergeValidationCachesEXT-dstCache-01536]]
-    pname:dstCache must: not appear in the list of source caches
-****
-
-include::{generated}/validity/protos/vkMergeValidationCachesEXT.txt[]
---
-
-[open,refpage='vkGetValidationCacheDataEXT',desc='Get the data store from a validation cache',type='protos']
---
-Data can: be retrieved from a validation cache object using the command:
-
-include::{generated}/api/protos/vkGetValidationCacheDataEXT.txt[]
-
-  * pname:device is the logical device that owns the validation cache.
-  * pname:validationCache is the validation cache to retrieve data from.
-  * pname:pDataSize is a pointer to a value related to the amount of data in
-    the validation cache, as described below.
-  * pname:pData is either `NULL` or a pointer to a buffer.
-
-If pname:pData is `NULL`, then the maximum size of the data that can: be
-retrieved from the validation cache, in bytes, is returned in
-pname:pDataSize.
-Otherwise, pname:pDataSize must: point to a variable set by the user to the
-size of the buffer, in bytes, pointed to by pname:pData, and on return the
-variable is overwritten with the amount of data actually written to
-pname:pData.
-If pname:pDataSize is less than the maximum size that can: be retrieved by
-the validation cache, at most pname:pDataSize bytes will be written to
-pname:pData, and fname:vkGetValidationCacheDataEXT will return
-ename:VK_INCOMPLETE instead of ename:VK_SUCCESS, to indicate that not all of
-the validation cache was returned.
-
-Any data written to pname:pData is valid and can: be provided as the
-pname:pInitialData member of the slink:VkValidationCacheCreateInfoEXT
-structure passed to fname:vkCreateValidationCacheEXT.
-
-Two calls to fname:vkGetValidationCacheDataEXT with the same parameters
-must: retrieve the same data unless a command that modifies the contents of
-the cache is called between them.
-
-[[validation-cache-header]]
-Applications can: store the data retrieved from the validation cache, and
-use these data, possibly in a future run of the application, to populate new
-validation cache objects.
-The results of validation, however, may: depend on the vendor ID, device ID,
-driver version, and other details of the device.
-To enable applications to detect when previously retrieved data is
-incompatible with the device, the initial bytes written to pname:pData must:
-be a header consisting of the following members:
-
-.Layout for validation cache header version ename:VK_VALIDATION_CACHE_HEADER_VERSION_ONE_EXT
-[width="85%",cols="8%,21%,71%",options="header"]
-|====
-| Offset | Size | Meaning
-| 0 | 4                    | length in bytes of the entire validation cache header
-                             written as a stream of bytes, with the least
-                             significant byte first
-| 4 | 4                    | a elink:VkValidationCacheHeaderVersionEXT value
-                             written as a stream of bytes, with the least
-                             significant byte first
-| 8 | ename:VK_UUID_SIZE   | a layer commit ID expressed as a UUID, which uniquely
-                             identifies the version of the validation layers used
-                             to generate these validation results
-|====
-
-The first four bytes encode the length of the entire validation cache
-header, in bytes.
-This value includes all fields in the header including the validation cache
-version field and the size of the length field.
-
-The next four bytes encode the validation cache version, as described for
-elink:VkValidationCacheHeaderVersionEXT.
-A consumer of the validation cache should: use the cache version to
-interpret the remainder of the cache header.
-
-If pname:pDataSize is less than what is necessary to store this header,
-nothing will be written to pname:pData and zero will be written to
-pname:pDataSize.
-
-include::{generated}/validity/protos/vkGetValidationCacheDataEXT.txt[]
---
-
-[open,refpage='VkValidationCacheHeaderVersionEXT',desc='Encode validation cache version',type='enums',xrefs='vkCreateValidationCacheEXT vkGetValidationCacheDataEXT']
---
-Possible values of the second group of four bytes in the header returned by
-flink:vkGetValidationCacheDataEXT, encoding the validation cache version,
-are:
-
-include::{generated}/api/enums/VkValidationCacheHeaderVersionEXT.txt[]
-
-  * ename:VK_VALIDATION_CACHE_HEADER_VERSION_ONE_EXT specifies version one
-    of the validation cache.
---
-
-[open,refpage='vkDestroyValidationCacheEXT',desc='Destroy a validation cache object',type='protos']
---
-To destroy a validation cache, call:
-
-include::{generated}/api/protos/vkDestroyValidationCacheEXT.txt[]
-
-  * pname:device is the logical device that destroys the validation cache
-    object.
-  * pname:validationCache is the handle of the validation cache to destroy.
-  * pname:pAllocator controls host memory allocation as described in the
-    <<memory-allocation, Memory Allocation>> chapter.
-
-.Valid Usage
-****
-  * [[VUID-vkDestroyValidationCacheEXT-validationCache-01537]]
-    If sname:VkAllocationCallbacks were provided when pname:validationCache
-    was created, a compatible set of callbacks must: be provided here
-  * [[VUID-vkDestroyValidationCacheEXT-validationCache-01538]]
-    If no sname:VkAllocationCallbacks were provided when
-    pname:validationCache was created, pname:pAllocator must: be `NULL`
-****
-
-include::{generated}/validity/protos/vkDestroyValidationCacheEXT.txt[]
---
-endif::VK_EXT_validation_cache[]
diff --git a/registry/vulkan/chapters/sparsemem.txt b/registry/vulkan/chapters/sparsemem.txt
deleted file mode 100644
index dc6d76a..0000000
--- a/registry/vulkan/chapters/sparsemem.txt
+++ /dev/null
@@ -1,1813 +0,0 @@
-// Copyright 2015-2021 The Khronos Group, Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-[[sparsememory]]
-= Sparse Resources
-
-As documented in <<resources-association,Resource Memory Association>>,
-sname:VkBuffer and sname:VkImage resources in Vulkan must: be bound
-completely and contiguously to a single sname:VkDeviceMemory object.
-This binding must: be done before the resource is used, and the binding is
-immutable for the lifetime of the resource.
-
-_Sparse resources_ relax these restrictions and provide these additional
-features:
-
-  * Sparse resources can: be bound non-contiguously to one or more
-    sname:VkDeviceMemory allocations.
-  * Sparse resources can: be re-bound to different memory allocations over
-    the lifetime of the resource.
-  * Sparse resources can: have descriptors generated and used orthogonally
-    with memory binding commands.
-
-
-[[sparsememory-sparseresourcefeatures]]
-== Sparse Resource Features
-
-Sparse resources have several features that must: be enabled explicitly at
-resource creation time.
-The features are enabled by including bits in the pname:flags parameter of
-slink:VkImageCreateInfo or slink:VkBufferCreateInfo.
-Each feature also has one or more corresponding feature enables specified in
-slink:VkPhysicalDeviceFeatures.
-
-  * <<features-sparseBinding,Sparse binding>> is the base feature, and
-    provides the following capabilities:
-
-  ** Resources can: be bound at some defined (sparse block) granularity.
-  ** The entire resource must: be bound to memory before use regardless of
-     regions actually accessed.
-  ** No specific mapping of image region to memory offset is defined, i.e.
-     the location that each texel corresponds to in memory is
-     implementation-dependent.
-  ** Sparse buffers have a well-defined mapping of buffer range to memory
-     range, where an offset into a range of the buffer that is bound to a
-     single contiguous range of memory corresponds to an identical offset
-     within that range of memory.
-  ** Requested via the ename:VK_IMAGE_CREATE_SPARSE_BINDING_BIT and
-     ename:VK_BUFFER_CREATE_SPARSE_BINDING_BIT bits.
-  ** A sparse image created using ename:VK_IMAGE_CREATE_SPARSE_BINDING_BIT
-     (but not ename:VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT) supports all
-     formats that non-sparse usage supports, and supports both
-     ename:VK_IMAGE_TILING_OPTIMAL and ename:VK_IMAGE_TILING_LINEAR tiling.
-
-  * _Sparse Residency_ builds on (and requires) the pname:sparseBinding
-    feature.
-    It includes the following capabilities:
-
-  ** Resources do not have to be completely bound to memory before use on
-     the device.
-  ** Images have a prescribed sparse image block layout, allowing specific
-     rectangular regions of the image to be bound to specific offsets in
-     memory allocations.
-  ** Consistency of access to unbound regions of the resource is defined by
-     the absence or presence of
-     sname:VkPhysicalDeviceSparseProperties::pname:residencyNonResidentStrict.
-     If this property is present, accesses to unbound regions of the
-     resource are well defined and behave as if the data bound is populated
-     with all zeros; writes are discarded.
-     When this property is absent, accesses are considered safe, but reads
-     will return undefined: values.
-  ** Requested via the ename:VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT and
-     ename:VK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT bits.
-  ** [[features-sparseResidency]] Sparse residency support is advertised on
-     a finer grain via the following features:
-+
-  *** <<features-sparseResidencyBuffer,pname:sparseResidencyBuffer>>:
-      Support for creating sname:VkBuffer objects with the
-      ename:VK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT.
-  *** <<features-sparseResidencyImage2D,pname:sparseResidencyImage2D>>:
-      Support for creating 2D single-sampled sname:VkImage objects with
-      ename:VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT.
-  *** <<features-sparseResidencyImage3D,pname:sparseResidencyImage3D>>:
-      Support for creating 3D sname:VkImage objects with
-      ename:VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT.
-  *** <<features-sparseResidency2Samples,pname:sparseResidency2Samples>>:
-      Support for creating 2D sname:VkImage objects with 2 samples and
-      ename:VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT.
-  *** <<features-sparseResidency4Samples,pname:sparseResidency4Samples>>:
-      Support for creating 2D sname:VkImage objects with 4 samples and
-      ename:VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT.
-  *** <<features-sparseResidency8Samples,pname:sparseResidency8Samples>>:
-      Support for creating 2D sname:VkImage objects with 8 samples and
-      ename:VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT.
-  *** <<features-sparseResidency16Samples,pname:sparseResidency16Samples>>:
-      Support for creating 2D sname:VkImage objects with 16 samples and
-      ename:VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT.
-+
-Implementations supporting pname:sparseResidencyImage2D are only required:
-to support sparse 2D, single-sampled images.
-Support for sparse 3D and MSAA images is optional: and can: be enabled via
-pname:sparseResidencyImage3D, pname:sparseResidency2Samples,
-pname:sparseResidency4Samples, pname:sparseResidency8Samples, and
-pname:sparseResidency16Samples.
-
-  ** A sparse image created using ename:VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT
-     supports all non-compressed color formats with power-of-two element
-     size that non-sparse usage supports.
-     Additional formats may: also be supported and can: be queried via
-     flink:vkGetPhysicalDeviceSparseImageFormatProperties.
-     ename:VK_IMAGE_TILING_LINEAR tiling is not supported.
-
-  * <<features-sparseResidencyAliased,Sparse aliasing>> provides the
-    following capability that can: be enabled per resource:
-+
-Allows physical memory ranges to be shared between multiple locations in the
-same sparse resource or between multiple sparse resources, with each binding
-of a memory location observing a consistent interpretation of the memory
-contents.
-+
-See <<sparsememory-sparse-memory-aliasing,Sparse Memory Aliasing>> for more
-information.
-
-
-[[sparsememory-fully-resident]]
-== Sparse Buffers and Fully-Resident Images
-
-Both sname:VkBuffer and sname:VkImage objects created with the
-ename:VK_IMAGE_CREATE_SPARSE_BINDING_BIT or
-ename:VK_BUFFER_CREATE_SPARSE_BINDING_BIT bits can: be thought of as a
-linear region of address space.
-In the sname:VkImage case if ename:VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT is
-not used, this linear region is entirely opaque, meaning that there is no
-application-visible mapping between texel location and memory offset.
-
-Unless ename:VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT or
-ename:VK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT are also used, the entire
-resource must: be bound to one or more sname:VkDeviceMemory objects before
-use.
-
-
-=== Sparse Buffer and Fully-Resident Image Block Size
-
-The sparse block size in bytes for sparse buffers and fully-resident images
-is reported as sname:VkMemoryRequirements::pname:alignment.
-pname:alignment represents both the memory alignment requirement and the
-binding granularity (in bytes) for sparse resources.
-
-
-[[sparsememory-partially-resident-buffers]]
-== Sparse Partially-Resident Buffers
-
-sname:VkBuffer objects created with the
-ename:VK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT bit allow the buffer to be made
-only partially resident.
-Partially resident sname:VkBuffer objects are allocated and bound
-identically to sname:VkBuffer objects using only the
-ename:VK_BUFFER_CREATE_SPARSE_BINDING_BIT feature.
-The only difference is the ability for some regions of the buffer to be
-unbound during device use.
-
-
-[[sparsememory-partially-resident-images]]
-== Sparse Partially-Resident Images
-
-sname:VkImage objects created with the
-ename:VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT bit allow specific rectangular
-regions of the image called sparse image blocks to be bound to specific
-ranges of memory.
-This allows the application to manage residency at either image subresource
-or sparse image block granularity.
-Each image subresource (outside of the <<sparsememory-miptail,mip tail>>)
-starts on a sparse block boundary and has dimensions that are integer
-multiples of the corresponding dimensions of the sparse image block.
-
-[NOTE]
-.Note
-====
-Applications can: use these types of images to control LOD based on total
-memory consumption.
-If memory pressure becomes an issue the application can: unbind and disable
-specific mipmap levels of images without having to recreate resources or
-modify texel data of unaffected levels.
-
-The application can: also use this functionality to access subregions of the
-image in a "`megatexture`" fashion.
-The application can: create a large image and only populate the region of
-the image that is currently being used in the scene.
-====
-
-
-[[sparsememory-accessing-unbound]]
-=== Accessing Unbound Regions
-
-The following member of sname:VkPhysicalDeviceSparseProperties affects how
-data in unbound regions of sparse resources are handled by the
-implementation:
-
-  * pname:residencyNonResidentStrict
-
-If this property is not present, reads of unbound regions of the image will
-return undefined: values.
-Both reads and writes are still considered _safe_ and will not affect other
-resources or populated regions of the image.
-
-If this property is present, all reads of unbound regions of the image will
-behave as if the region was bound to memory populated with all zeros; writes
-will be discarded.
-
-Formatted accesses to unbound memory may: still alter some component values
-in the natural way for those accesses, e.g. substituting a value of one for
-alpha in formats that do not have an alpha component.
-
-====
-Example: Reading the alpha component of an unbacked ename:VK_FORMAT_R8_UNORM
-image will return a value of [eq]#1.0f#.
-====
-
-See <<devsandqueues-physical-device-enumeration,Physical Device
-Enumeration>> for instructions for retrieving physical device properties.
-
-ifdef::implementation-guide[]
-.Implementor's Note
-****
-For implementations that cannot: natively handle access to unbound regions
-of a resource, the implementation may: allocate and bind memory to the
-unbound regions.
-Reads and writes to unbound regions will access the implementation-managed
-memory instead.
-
-Given that the values resulting from reads of unbound regions are undefined:
-in this scenario, implementations may: use the same physical memory for all
-unbound regions of multiple resources within the same process.
-****
-endif::implementation-guide[]
-
-
-[[sparsememory-miptail]]
-=== Mip Tail Regions
-
-Sparse images created using ename:VK_IMAGE_CREATE_SPARSE_BINDING_BIT
-(without also using ename:VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT) have no
-specific mapping of image region or image subresource to memory offset
-defined, so the entire image can: be thought of as a linear opaque address
-region.
-However, images created with ename:VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT do
-have a prescribed sparse image block layout, and hence each image
-subresource must: start on a sparse block boundary.
-Within each array layer, the set of mip levels that have a smaller size than
-the sparse block size in bytes are grouped together into a _mip tail
-region_.
-
-If the ename:VK_SPARSE_IMAGE_FORMAT_ALIGNED_MIP_SIZE_BIT flag is present in
-the pname:flags member of sname:VkSparseImageFormatProperties, for the
-image's pname:format, then any mip level which has dimensions that are not
-integer multiples of the corresponding dimensions of the sparse image block,
-and all subsequent mip levels, are also included in the mip tail region.
-
-The following member of sname:VkPhysicalDeviceSparseProperties may: affect
-how the implementation places mip levels in the mip tail region:
-
-  * pname:residencyAlignedMipSize
-
-Each mip tail region is bound to memory as an opaque region (i.e. must: be
-bound using a slink:VkSparseImageOpaqueMemoryBindInfo structure) and may: be
-of a size greater than or equal to the sparse block size in bytes.
-This size is guaranteed to be an integer multiple of the sparse block size
-in bytes.
-
-An implementation may: choose to allow each array-layer's mip tail region to
-be bound to memory independently or require that all array-layer's mip tail
-regions be treated as one.
-This is dictated by ename:VK_SPARSE_IMAGE_FORMAT_SINGLE_MIPTAIL_BIT in
-sname:VkSparseImageMemoryRequirements::pname:flags.
-
-The following diagrams depict how
-ename:VK_SPARSE_IMAGE_FORMAT_ALIGNED_MIP_SIZE_BIT and
-ename:VK_SPARSE_IMAGE_FORMAT_SINGLE_MIPTAIL_BIT alter memory usage and
-requirements.
-
-image::{images}/sparseimage.svg[align="center",title="Sparse Image",opts="{imageopts}"]
-
-In the absence of ename:VK_SPARSE_IMAGE_FORMAT_ALIGNED_MIP_SIZE_BIT and
-ename:VK_SPARSE_IMAGE_FORMAT_SINGLE_MIPTAIL_BIT, each array layer contains a
-mip tail region containing texel data for all mip levels smaller than the
-sparse image block in any dimension.
-
-Mip levels that are as large or larger than a sparse image block in all
-dimensions can: be bound individually.
-Right-edges and bottom-edges of each level are allowed to have partially
-used sparse blocks.
-Any bound partially-used-sparse-blocks must: still have their full sparse
-block size in bytes allocated in memory.
-
-image::{images}/sparseimage_singlemiptail.svg[align="center",title="Sparse Image with Single Mip Tail",opts="{imageopts}"]
-
-When ename:VK_SPARSE_IMAGE_FORMAT_SINGLE_MIPTAIL_BIT is present all array
-layers will share a single mip tail region.
-
-image::{images}/sparseimage_alignedmipsize.svg[align="center",title="Sparse Image with Aligned Mip Size",opts="{imageopts}"]
-
-[NOTE]
-.Note
-====
-The mip tail regions are presented here in 2D arrays simply for figure size
-reasons.
-Each mip tail is logically a single array of sparse blocks with an
-implementation-dependent mapping of texels or compressed texel blocks to
-sparse blocks.
-====
-
-When ename:VK_SPARSE_IMAGE_FORMAT_ALIGNED_MIP_SIZE_BIT is present the first
-mip level that would contain partially used sparse blocks begins the mip
-tail region.
-This level and all subsequent levels are placed in the mip tail.
-Only the first [eq]#N# mip levels whose dimensions are an exact multiple of
-the sparse image block dimensions can: be bound and unbound on a sparse
-block basis.
-
-image::{images}/sparseimage_alignedmipsize_singlemiptail.svg[align="center",title="Sparse Image with Aligned Mip Size and Single Mip Tail",opts="{imageopts}"]
-
-[NOTE]
-.Note
-====
-The mip tail region is presented here in a 2D array simply for figure size
-reasons.
-It is logically a single array of sparse blocks with an
-implementation-dependent mapping of texels or compressed texel blocks to
-sparse blocks.
-====
-
-When both ename:VK_SPARSE_IMAGE_FORMAT_ALIGNED_MIP_SIZE_BIT and
-ename:VK_SPARSE_IMAGE_FORMAT_SINGLE_MIPTAIL_BIT are present the constraints
-from each of these flags are in effect.
-
-
-[[sparsememory-standard-shapes]]
-=== Standard Sparse Image Block Shapes
-
-Standard sparse image block shapes define a standard set of dimensions for
-sparse image blocks that depend on the format of the image.
-Layout of texels or compressed texel blocks within a sparse image block is
-implementation-dependent.
-All currently defined standard sparse image block shapes are 64 KB in size.
-
-For block-compressed formats (e.g. ename:VK_FORMAT_BC5_UNORM_BLOCK), the
-texel size is the size of the compressed texel block (e.g. 128-bit for
-etext:BC5) thus the dimensions of the standard sparse image block shapes
-apply in terms of compressed texel blocks.
-
-[NOTE]
-.Note
-====
-For block-compressed formats, the dimensions of a sparse image block in
-terms of texels can: be calculated by multiplying the sparse image block
-dimensions by the compressed texel block dimensions.
-====
-
-<<<
-
-[[sparsememory-sparseblockshapessingle]]
-.Standard Sparse Image Block Shapes (Single Sample)
-[options="header"]
-|====
-| TEXEL SIZE (bits) | Block Shape (2D)              | Block Shape (3D)
-| *8-Bit*           | 256 {times} 256 {times} 1     | 64 {times} 32 {times} 32
-| *16-Bit*          | 256 {times} 128 {times} 1     | 32 {times} 32 {times} 32
-| *32-Bit*          | 128 {times} 128 {times} 1     | 32 {times} 32 {times} 16
-| *64-Bit*          | 128 {times} 64 {times} 1      | 32 {times} 16 {times} 16
-| *128-Bit*         | 64 {times} 64 {times} 1       | 16 {times} 16 {times} 16
-|====
-
-[[sparsememory-sparseblockshapesmsaa]]
-.Standard Sparse Image Block Shapes (MSAA)
-[options="header"]
-|====
-| TEXEL SIZE (bits)| Block Shape (2X)            | Block Shape (4X)             | Block Shape (8X)             | Block Shape (16X)
-| *8-Bit*          | 128 {times} 256 {times} 1   | 128 {times} 128 {times} 1    | 64 {times} 128 {times} 1     | 64 {times} 64 {times} 1
-| *16-Bit*         | 128 {times} 128 {times} 1   | 128 {times} 64 {times} 1     | 64 {times} 64 {times} 1      | 64 {times} 32 {times} 1
-| *32-Bit*         | 64 {times} 128 {times} 1    | 64 {times} 64 {times} 1      | 32 {times} 64 {times} 1      | 32 {times} 32 {times} 1
-| *64-Bit*         | 64 {times} 64 {times} 1     | 64 {times} 32 {times} 1      | 32 {times} 32 {times} 1      | 32 {times} 16 {times} 1
-| *128-Bit*        | 32 {times} 64 {times} 1     | 32 {times} 32 {times} 1      | 16 {times} 32 {times} 1      | 16 {times} 16 {times} 1
-|====
-
-
-Implementations that support the standard sparse image block shape for all
-formats listed in the <<sparsememory-sparseblockshapessingle>> and
-<<sparsememory-sparseblockshapesmsaa>> tables may: advertise the following
-sname:VkPhysicalDeviceSparseProperties:
-
-  * pname:residencyStandard2DBlockShape
-  * pname:residencyStandard2DMultisampleBlockShape
-  * pname:residencyStandard3DBlockShape
-
-Reporting each of these features does _not_ imply that all possible image
-types are supported as sparse.
-Instead, this indicates that no supported sparse image of the corresponding
-type will use custom sparse image block dimensions for any formats that have
-a corresponding standard sparse image block shape.
-
-
-[[sparsememory-custom-shapes]]
-=== Custom Sparse Image Block Shapes
-
-An implementation that does not support a standard image block shape for a
-particular sparse partially-resident image may: choose to support a custom
-sparse image block shape for it instead.
-The dimensions of such a custom sparse image block shape are reported in
-sname:VkSparseImageFormatProperties::pname:imageGranularity.
-As with standard sparse image block shapes, the size in bytes of the custom
-sparse image block shape will be reported in
-sname:VkMemoryRequirements::pname:alignment.
-
-Custom sparse image block dimensions are reported through
-fname:vkGetPhysicalDeviceSparseImageFormatProperties and
-fname:vkGetImageSparseMemoryRequirements.
-
-An implementation must: not support both the standard sparse image block
-shape and a custom sparse image block shape for the same image.
-The standard sparse image block shape must: be used if it is supported.
-
-
-[[sparsememory-multiaspect]]
-=== Multiple Aspects
-
-Partially resident images are allowed to report separate sparse properties
-for different aspects of the image.
-One example is for depth/stencil images where the implementation separates
-the depth and stencil data into separate planes.
-Another reason for multiple aspects is to allow the application to manage
-memory allocation for implementation-private _metadata_ associated with the
-image.
-See the figure below:
-
-image::{images}/sparseimage_multiaspect.svg[align="center",title="Multiple Aspect Sparse Image",opts="{imageopts}"]
-
-[NOTE]
-.Note
-====
-The mip tail regions are presented here in 2D arrays simply for figure size
-reasons.
-Each mip tail is logically a single array of sparse blocks with an
-implementation-dependent mapping of texels or compressed texel blocks to
-sparse blocks.
-====
-
-In the figure above the depth, stencil, and metadata aspects all have unique
-sparse properties.
-The per-texel stencil data is [eq]#{onequarter}# the size of the depth data,
-hence the stencil sparse blocks include [eq]#4 {times}# the number of
-texels.
-The sparse block size in bytes for all of the aspects is identical and
-defined by sname:VkMemoryRequirements::pname:alignment.
-
-
-==== Metadata
-
-The metadata aspect of an image has the following constraints:
-
-  * All metadata is reported in the mip tail region of the metadata aspect.
-  * All metadata must: be bound prior to device use of the sparse image.
-
-
-[[sparsememory-sparse-memory-aliasing]]
-== Sparse Memory Aliasing
-
-By default sparse resources have the same aliasing rules as non-sparse
-resources.
-See <<resources-memory-aliasing,Memory Aliasing>> for more information.
-
-sname:VkDevice objects that have the
-<<features-sparseResidencyAliased,sparseResidencyAliased>> feature enabled
-are able to use the ename:VK_BUFFER_CREATE_SPARSE_ALIASED_BIT and
-ename:VK_IMAGE_CREATE_SPARSE_ALIASED_BIT flags for resource creation.
-These flags allow resources to access physical memory bound into multiple
-locations within one or more sparse resources in a _data consistent_
-fashion.
-This means that reading physical memory from multiple aliased locations will
-return the same value.
-
-Care must: be taken when performing a write operation to aliased physical
-memory.
-Memory dependencies must: be used to separate writes to one alias from reads
-or writes to another alias.
-Writes to aliased memory that are not properly guarded against accesses to
-different aliases will have undefined: results for all accesses to the
-aliased memory.
-
-Applications that wish to make use of data consistent sparse memory aliasing
-must: abide by the following guidelines:
-
-  * All sparse resources that are bound to aliased physical memory must: be
-    created with the ename:VK_BUFFER_CREATE_SPARSE_ALIASED_BIT /
-    ename:VK_IMAGE_CREATE_SPARSE_ALIASED_BIT flag.
-  * All resources that access aliased physical memory must: interpret the
-    memory in the same way.
-    This implies the following:
-  ** Buffers and images cannot: alias the same physical memory in a data
-     consistent fashion.
-     The physical memory ranges must: be used exclusively by buffers or used
-     exclusively by images for data consistency to be guaranteed.
-  ** Memory in sparse image mip tail regions cannot: access aliased memory
-     in a data consistent fashion.
-  ** Sparse images that alias the same physical memory must: have compatible
-     formats and be using the same sparse image block shape in order to
-     access aliased memory in a data consistent fashion.
-
-Failure to follow any of the above guidelines will require the application
-to abide by the normal, non-sparse resource <<resources-memory-aliasing,
-aliasing rules>>.
-In this case memory cannot: be accessed in a data consistent fashion.
-
-[NOTE]
-.Note
-====
-Enabling sparse resource memory aliasing can: be a way to lower physical
-memory use, but it may: reduce performance on some implementations.
-An application developer can: test on their target HW and balance the memory
-/ performance trade-offs measured.
-====
-
-
-ifdef::implementation-guide[]
-== Sparse Resource Implementation Guidelines (Informative)
-
-****
-This section is Informative.
-It is included to aid in implementors`' understanding of sparse resources.
-
-.Device Virtual Address
-
-The basic pname:sparseBinding feature allows the resource to reserve its own
-device virtual address range at resource creation time rather than relying
-on a bind operation to set this.
-Without any other creation flags, no other constraints are relaxed compared
-to normal resources.
-All pages must: be bound to physical memory before the device accesses the
-resource.
-
-The <<features-sparseResidency,sparse residency>> features allow sparse
-resources to be used even when not all pages are bound to memory.
-Implementations that support access to unbound pages without causing a fault
-may: support pname:residencyNonResidentStrict.
-
-Not faulting on access to unbound pages is not enough to support
-pname:residencyNonResidentStrict.
-An implementation must: also guarantee that reads after writes to unbound
-regions of the resource always return data for the read as if the memory
-contains zeros.
-Depending on any caching hierarchy of the implementation this may: not
-always be possible.
-
-Any implementation that does not fault, but does not guarantee correct read
-values must: not support pname:residencyNonResidentStrict.
-
-Any implementation that cannot: access unbound pages without causing a fault
-will require the implementation to bind the entire device virtual address
-range to physical memory.
-Any pages that the application does not bind to memory may: be bound to one
-(or more) "`placeholder" physical page(s) allocated by the implementation.
-Given the following properties:
-
-  * A process must: not access memory from another process
-  * Reads return undefined: values
-
-It is sufficient for each host process to allocate these placeholder pages
-and use them for all resources in that process.
-Implementations may: allocate more often (per instance, per device, or per
-resource).
-
-
-.Binding Memory
-
-The byte size reported in sname:VkMemoryRequirements::pname:size must: be
-greater than or equal to the amount of physical memory required: to fully
-populate the resource.
-Some implementations require "`holes`" in the device virtual address range
-that are never accessed.
-These holes may: be included in the pname:size reported for the resource.
-
-Including or not including the device virtual address holes in the resource
-size will alter how the implementation provides support for
-sname:VkSparseImageOpaqueMemoryBindInfo.
-This operation must: be supported for all sparse images, even ones created
-with ename:VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT.
-
-ifdef::editing-notes[]
-[NOTE]
-.editing-note
-====
-@ntrevett suggested expanding the NOTE tag below to encompass everything
-from "`The cost is...`" in the first bullet point through the current note.
-TBD.
-====
-endif::editing-notes[]
-
-  * If the holes are included in the size, this bind function becomes very
-    easy.
-    In most cases the pname:resourceOffset is simply a device virtual
-    address offset and the implementation can easily determine what device
-    virtual address to bind.
-    The cost is that the application may: allocate more physical memory for
-    the resource than it needs.
-  * If the holes are not included in the size, the application can: allocate
-    less physical memory than otherwise for the resource.
-    However, in this case the implementation must: account for the holes
-    when mapping pname:resourceOffset to the actual device virtual address
-    intended to be mapped.
-
-[NOTE]
-.Note
-====
-If the application always uses sname:VkSparseImageMemoryBindInfo to bind
-memory for the non-tail mip levels, any holes that are present in the
-resource size may: never be bound.
-
-Since sname:VkSparseImageMemoryBindInfo uses texel locations to determine
-which device virtual addresses to bind, it is impossible to bind device
-virtual address holes with this operation.
-====
-
-.Binding Metadata Memory
-
-All metadata for sparse images have their own sparse properties and are
-embedded in the mip tail region for said properties.
-See the <<sparsememory-multiaspect,Multiaspect>> section for details.
-
-Given that metadata is in a mip tail region, and the mip tail region must:
-be reported as contiguous (either globally or per-array-layer), some
-implementations will have to resort to complicated offset -> device virtual
-address mapping for handling sname:VkSparseImageOpaqueMemoryBindInfo.
-
-To make this easier on the implementation, the
-ename:VK_SPARSE_MEMORY_BIND_METADATA_BIT explicitly specifies when metadata
-is bound with sname:VkSparseImageOpaqueMemoryBindInfo.
-When this flag is not present, the pname:resourceOffset may: be treated as a
-strict device virtual address offset.
-
-When ename:VK_SPARSE_MEMORY_BIND_METADATA_BIT is present, the
-pname:resourceOffset must: have been derived explicitly from the
-pname:imageMipTailOffset in the sparse resource properties returned for the
-metadata aspect.
-By manipulating the value returned for pname:imageMipTailOffset, the
-pname:resourceOffset does not have to correlate directly to a device virtual
-address offset, and may: instead be whatever value makes it easiest for the
-implementation to derive the correct device virtual address.
-
-****
-endif::implementation-guide[]
-
-
-[[sparsememory-resourceapi]]
-== Sparse Resource API
-
-The APIs related to sparse resources are grouped into the following
-categories:
-
-  * <<sparsememory-physicalfeatures,Physical Device Features>>
-  * <<sparsememory-physicalprops,Physical Device Sparse Properties>>
-  * <<sparsememory-format-props,Sparse Image Format Properties>>
-  * <<sparsememory-resource-creation,Sparse Resource Creation>>
-  * <<sparsememory-memory-requirements,Sparse Resource Memory Requirements>>
-  * <<sparsememory-resource-binding,Binding Resource Memory>>
-
-
-[[sparsememory-physicalfeatures]]
-=== Physical Device Features
-
-Some sparse-resource related features are reported and enabled in
-sname:VkPhysicalDeviceFeatures.
-These features must: be supported and enabled on the sname:VkDevice object
-before applications can: use them.
-See <<features,Physical Device Features>> for information on how to get and
-set enabled device features, and for more detailed explanations of these
-features.
-
-
-==== Sparse Physical Device Features
-
-  * pname:sparseBinding: Support for creating slink:VkBuffer and
-    sname:VkImage objects with the ename:VK_BUFFER_CREATE_SPARSE_BINDING_BIT
-    and ename:VK_IMAGE_CREATE_SPARSE_BINDING_BIT flags, respectively.
-  * pname:sparseResidencyBuffer: Support for creating slink:VkBuffer objects
-    with the ename:VK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT flag.
-  * pname:sparseResidencyImage2D: Support for creating 2D single-sampled
-    sname:VkImage objects with ename:VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT.
-  * pname:sparseResidencyImage3D: Support for creating 3D slink:VkImage
-    objects with ename:VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT.
-  * pname:sparseResidency2Samples: Support for creating 2D slink:VkImage
-    objects with 2 samples and ename:VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT.
-  * pname:sparseResidency4Samples: Support for creating 2D slink:VkImage
-    objects with 4 samples and ename:VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT.
-  * pname:sparseResidency8Samples: Support for creating 2D slink:VkImage
-    objects with 8 samples and ename:VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT.
-  * pname:sparseResidency16Samples: Support for creating 2D slink:VkImage
-    objects with 16 samples and ename:VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT.
-  * pname:sparseResidencyAliased: Support for creating slink:VkBuffer and
-    sname:VkImage objects with the ename:VK_BUFFER_CREATE_SPARSE_ALIASED_BIT
-    and ename:VK_IMAGE_CREATE_SPARSE_ALIASED_BIT flags, respectively.
-
-
-[[sparsememory-physicalprops]]
-=== Physical Device Sparse Properties
-
-Some features of the implementation are not possible to disable, and are
-reported to allow applications to alter their sparse resource usage
-accordingly.
-These read-only capabilities are reported in the
-slink:VkPhysicalDeviceProperties::pname:sparseProperties member, which is a
-sname:VkPhysicalDeviceSparseProperties structure.
-
-[open,refpage='VkPhysicalDeviceSparseProperties',desc='Structure specifying physical device sparse memory properties',type='structs']
---
-The sname:VkPhysicalDeviceSparseProperties structure is defined as:
-
-include::{generated}/api/structs/VkPhysicalDeviceSparseProperties.txt[]
-
-  * pname:residencyStandard2DBlockShape is ename:VK_TRUE if the physical
-    device will access all single-sample 2D sparse resources using the
-    standard sparse image block shapes (based on image format), as described
-    in the <<sparsememory-sparseblockshapessingle,Standard Sparse Image
-    Block Shapes (Single Sample)>> table.
-    If this property is not supported the value returned in the
-    pname:imageGranularity member of the sname:VkSparseImageFormatProperties
-    structure for single-sample 2D images is not required: to match the
-    standard sparse image block dimensions listed in the table.
-  * pname:residencyStandard2DMultisampleBlockShape is ename:VK_TRUE if the
-    physical device will access all multisample 2D sparse resources using
-    the standard sparse image block shapes (based on image format), as
-    described in the <<sparsememory-sparseblockshapesmsaa,Standard Sparse
-    Image Block Shapes (MSAA)>> table.
-    If this property is not supported, the value returned in the
-    pname:imageGranularity member of the sname:VkSparseImageFormatProperties
-    structure for multisample 2D images is not required: to match the
-    standard sparse image block dimensions listed in the table.
-  * pname:residencyStandard3DBlockShape is ename:VK_TRUE if the physical
-    device will access all 3D sparse resources using the standard sparse
-    image block shapes (based on image format), as described in the
-    <<sparsememory-sparseblockshapessingle,Standard Sparse Image Block
-    Shapes (Single Sample)>> table.
-    If this property is not supported, the value returned in the
-    pname:imageGranularity member of the sname:VkSparseImageFormatProperties
-    structure for 3D images is not required: to match the standard sparse
-    image block dimensions listed in the table.
-  * pname:residencyAlignedMipSize is ename:VK_TRUE if images with mip level
-    dimensions that are not integer multiples of the corresponding
-    dimensions of the sparse image block may: be placed in the mip tail.
-    If this property is not reported, only mip levels with dimensions
-    smaller than the pname:imageGranularity member of the
-    sname:VkSparseImageFormatProperties structure will be placed in the mip
-    tail.
-    If this property is reported the implementation is allowed to return
-    ename:VK_SPARSE_IMAGE_FORMAT_ALIGNED_MIP_SIZE_BIT in the pname:flags
-    member of sname:VkSparseImageFormatProperties, indicating that mip level
-    dimensions that are not integer multiples of the corresponding
-    dimensions of the sparse image block will be placed in the mip tail.
-  * pname:residencyNonResidentStrict specifies whether the physical device
-    can: consistently access non-resident regions of a resource.
-    If this property is ename:VK_TRUE, access to non-resident regions of
-    resources will be guaranteed to return values as if the resource was
-    populated with 0; writes to non-resident regions will be discarded.
-
-include::{generated}/validity/structs/VkPhysicalDeviceSparseProperties.txt[]
---
-
-
-[[sparsememory-format-props]]
-=== Sparse Image Format Properties
-
-Given that certain aspects of sparse image support, including the sparse
-image block dimensions, may: be implementation-dependent,
-flink:vkGetPhysicalDeviceSparseImageFormatProperties can: be used to query
-for sparse image format properties prior to resource creation.
-This command is used to check whether a given set of sparse image parameters
-is supported and what the sparse image block shape will be.
-
-
-==== Sparse Image Format Properties API
-
-[open,refpage='VkSparseImageFormatProperties',desc='Structure specifying sparse image format properties',type='structs']
---
-The sname:VkSparseImageFormatProperties structure is defined as:
-
-include::{generated}/api/structs/VkSparseImageFormatProperties.txt[]
-
-  * pname:aspectMask is a bitmask elink:VkImageAspectFlagBits specifying
-    which aspects of the image the properties apply to.
-  * pname:imageGranularity is the width, height, and depth of the sparse
-    image block in texels or compressed texel blocks.
-  * pname:flags is a bitmask of elink:VkSparseImageFormatFlagBits specifying
-    additional information about the sparse resource.
-
-include::{generated}/validity/structs/VkSparseImageFormatProperties.txt[]
---
-
-[open,refpage='VkSparseImageFormatFlagBits',desc='Bitmask specifying additional information about a sparse image resource',type='enums']
---
-Bits which may: be set in slink:VkSparseImageFormatProperties::pname:flags,
-specifying additional information about the sparse resource, are:
-
-include::{generated}/api/enums/VkSparseImageFormatFlagBits.txt[]
-
-  * ename:VK_SPARSE_IMAGE_FORMAT_SINGLE_MIPTAIL_BIT specifies that the image
-    uses a single mip tail region for all array layers.
-  * ename:VK_SPARSE_IMAGE_FORMAT_ALIGNED_MIP_SIZE_BIT specifies that the
-    first mip level whose dimensions are not integer multiples of the
-    corresponding dimensions of the sparse image block begins the mip tail
-    region.
-  * ename:VK_SPARSE_IMAGE_FORMAT_NONSTANDARD_BLOCK_SIZE_BIT specifies that
-    the image uses non-standard sparse image block dimensions, and the
-    pname:imageGranularity values do not match the standard sparse image
-    block dimensions for the given format.
---
-
-[open,refpage='VkSparseImageFormatFlags',desc='Bitmask of VkSparseImageFormatFlagBits',type='flags']
---
-include::{generated}/api/flags/VkSparseImageFormatFlags.txt[]
-
-tname:VkSparseImageFormatFlags is a bitmask type for setting a mask of zero
-or more elink:VkSparseImageFormatFlagBits.
---
-
-[open,refpage='vkGetPhysicalDeviceSparseImageFormatProperties',desc='Retrieve properties of an image format applied to sparse images',type='protos']
---
-fname:vkGetPhysicalDeviceSparseImageFormatProperties returns an array of
-slink:VkSparseImageFormatProperties.
-Each element will describe properties for one set of image aspects that are
-bound simultaneously in the image.
-This is usually one element for each aspect in the image, but for
-interleaved depth/stencil images there is only one element describing the
-combined aspects.
-
-include::{generated}/api/protos/vkGetPhysicalDeviceSparseImageFormatProperties.txt[]
-
-  * pname:physicalDevice is the physical device from which to query the
-    sparse image format properties.
-  * pname:format is the image format.
-  * pname:type is the dimensionality of image.
-  * pname:samples is a elink:VkSampleCountFlagBits value specifying the
-    number of samples per texel.
-  * pname:usage is a bitmask describing the intended usage of the image.
-  * pname:tiling is the tiling arrangement of the texel blocks in memory.
-  * pname:pPropertyCount is a pointer to an integer related to the number of
-    sparse format properties available or queried, as described below.
-  * pname:pProperties is either `NULL` or a pointer to an array of
-    slink:VkSparseImageFormatProperties structures.
-
-If pname:pProperties is `NULL`, then the number of sparse format properties
-available is returned in pname:pPropertyCount.
-Otherwise, pname:pPropertyCount must: point to a variable set by the user to
-the number of elements in the pname:pProperties array, and on return the
-variable is overwritten with the number of structures actually written to
-pname:pProperties.
-If pname:pPropertyCount is less than the number of sparse format properties
-available, at most pname:pPropertyCount structures will be written.
-
-If ename:VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT is not supported for the given
-arguments, pname:pPropertyCount will be set to zero upon return, and no data
-will be written to pname:pProperties.
-
-Multiple aspects are returned for depth/stencil images that are implemented
-as separate planes by the implementation.
-The depth and stencil data planes each have unique
-sname:VkSparseImageFormatProperties data.
-
-Depth/stencil images with depth and stencil data interleaved into a single
-plane will return a single sname:VkSparseImageFormatProperties structure
-with the pname:aspectMask set to ename:VK_IMAGE_ASPECT_DEPTH_BIT |
-ename:VK_IMAGE_ASPECT_STENCIL_BIT.
-
-.Valid Usage
-****
-  * [[VUID-vkGetPhysicalDeviceSparseImageFormatProperties-samples-01094]]
-    pname:samples must: be a bit value that is set in
-    sname:VkImageFormatProperties::pname:sampleCounts returned by
-    fname:vkGetPhysicalDeviceImageFormatProperties with pname:format,
-    pname:type, pname:tiling, and pname:usage equal to those in this command
-    and pname:flags equal to the value that is set in
-    slink:VkImageCreateInfo::pname:flags when the image is created
-****
-
-include::{generated}/validity/protos/vkGetPhysicalDeviceSparseImageFormatProperties.txt[]
---
-
-ifdef::VK_VERSION_1_1,VK_KHR_get_physical_device_properties2[]
-[open,refpage='vkGetPhysicalDeviceSparseImageFormatProperties2',desc='Retrieve properties of an image format applied to sparse images',type='protos']
---
-fname:vkGetPhysicalDeviceSparseImageFormatProperties2 returns an array of
-slink:VkSparseImageFormatProperties2.
-Each element will describe properties for one set of image aspects that are
-bound simultaneously in the image.
-This is usually one element for each aspect in the image, but for
-interleaved depth/stencil images there is only one element describing the
-combined aspects.
-
-ifdef::VK_VERSION_1_1[]
-include::{generated}/api/protos/vkGetPhysicalDeviceSparseImageFormatProperties2.txt[]
-endif::VK_VERSION_1_1[]
-
-ifdef::VK_VERSION_1_1+VK_KHR_get_physical_device_properties2[or the equivalent command]
-
-ifdef::VK_KHR_get_physical_device_properties2[]
-include::{generated}/api/protos/vkGetPhysicalDeviceSparseImageFormatProperties2KHR.txt[]
-endif::VK_KHR_get_physical_device_properties2[]
-
-  * pname:physicalDevice is the physical device from which to query the
-    sparse image format properties.
-  * pname:pFormatInfo is a pointer to a
-    slink:VkPhysicalDeviceSparseImageFormatInfo2 structure containing input
-    parameters to the command.
-  * pname:pPropertyCount is a pointer to an integer related to the number of
-    sparse format properties available or queried, as described below.
-  * pname:pProperties is either `NULL` or a pointer to an array of
-    slink:VkSparseImageFormatProperties2 structures.
-
-fname:vkGetPhysicalDeviceSparseImageFormatProperties2 behaves identically to
-flink:vkGetPhysicalDeviceSparseImageFormatProperties, with the ability to
-return extended information by adding extending structures to the
-pname:pNext chain of its pname:pProperties parameter.
-
-include::{generated}/validity/protos/vkGetPhysicalDeviceSparseImageFormatProperties2.txt[]
---
-
-[open,refpage='VkPhysicalDeviceSparseImageFormatInfo2',desc='Structure specifying sparse image format inputs',type='structs']
---
-The sname:VkPhysicalDeviceSparseImageFormatInfo2 structure is defined as:
-
-include::{generated}/api/structs/VkPhysicalDeviceSparseImageFormatInfo2.txt[]
-
-ifdef::VK_KHR_get_physical_device_properties2[]
-or the equivalent
-
-include::{generated}/api/structs/VkPhysicalDeviceSparseImageFormatInfo2KHR.txt[]
-endif::VK_KHR_get_physical_device_properties2[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:format is the image format.
-  * pname:type is the dimensionality of image.
-  * pname:samples is a elink:VkSampleCountFlagBits value specifying the
-    number of samples per texel.
-  * pname:usage is a bitmask describing the intended usage of the image.
-  * pname:tiling is the tiling arrangement of the texel blocks in memory.
-
-.Valid Usage
-****
-  * [[VUID-VkPhysicalDeviceSparseImageFormatInfo2-samples-01095]]
-    pname:samples must: be a bit value that is set in
-    sname:VkImageFormatProperties::pname:sampleCounts returned by
-    fname:vkGetPhysicalDeviceImageFormatProperties with pname:format,
-    pname:type, pname:tiling, and pname:usage equal to those in this command
-    and pname:flags equal to the value that is set in
-    slink:VkImageCreateInfo::pname:flags when the image is created
-****
-
-include::{generated}/validity/structs/VkPhysicalDeviceSparseImageFormatInfo2.txt[]
---
-
-[open,refpage='VkSparseImageFormatProperties2',desc='Structure specifying sparse image format properties',type='structs']
---
-The sname:VkSparseImageFormatProperties2 structure is defined as:
-
-include::{generated}/api/structs/VkSparseImageFormatProperties2.txt[]
-
-ifdef::VK_KHR_get_physical_device_properties2[]
-or the equivalent
-
-include::{generated}/api/structs/VkSparseImageFormatProperties2KHR.txt[]
-endif::VK_KHR_get_physical_device_properties2[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:properties is a slink:VkSparseImageFormatProperties structure
-    which is populated with the same values as in
-    flink:vkGetPhysicalDeviceSparseImageFormatProperties.
-
-include::{generated}/validity/structs/VkSparseImageFormatProperties2.txt[]
---
-endif::VK_VERSION_1_1,VK_KHR_get_physical_device_properties2[]
-
-
-[[sparsememory-resource-creation]]
-=== Sparse Resource Creation
-
-Sparse resources require that one or more sparse feature flags be specified
-(as part of the sname:VkPhysicalDeviceFeatures structure described
-previously in the <<sparsememory-physicalfeatures,Physical Device Features>>
-section) when calling flink:vkCreateDevice.
-When the appropriate device features are enabled, the
-etext:VK_BUFFER_CREATE_SPARSE_* and etext:VK_IMAGE_CREATE_SPARSE_* flags
-can: be used.
-See flink:vkCreateBuffer and flink:vkCreateImage for details of the resource
-creation APIs.
-
-[NOTE]
-.Note
-====
-Specifying ename:VK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT or
-ename:VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT requires specifying
-ename:VK_BUFFER_CREATE_SPARSE_BINDING_BIT or
-ename:VK_IMAGE_CREATE_SPARSE_BINDING_BIT, respectively, as well.
-This means that resources must: be created with the appropriate
-etext:*_SPARSE_BINDING_BIT to be used with the sparse binding command
-(fname:vkQueueBindSparse).
-====
-
-
-[[sparsememory-memory-requirements]]
-=== Sparse Resource Memory Requirements
-
-Sparse resources have specific memory requirements related to binding sparse
-memory.
-These memory requirements are reported differently for sname:VkBuffer
-objects and sname:VkImage objects.
-
-
-[[sparsememory-memory-buffer-fully-resident]]
-==== Buffer and Fully-Resident Images
-
-Buffers (both fully and partially resident) and fully-resident images can:
-be bound to memory using only the data from sname:VkMemoryRequirements.
-For all sparse resources the sname:VkMemoryRequirements::pname:alignment
-member specifies both the bindable sparse block size in bytes and required:
-alignment of sname:VkDeviceMemory.
-
-
-[[sparsememory-memory-partially-resident]]
-==== Partially Resident Images
-
-Partially resident images have a different method for binding memory.
-As with buffers and fully resident images, the
-sname:VkMemoryRequirements::pname:alignment field specifies the bindable
-sparse block size in bytes for the image.
-
-Requesting sparse memory requirements for sname:VkImage objects using
-fname:vkGetImageSparseMemoryRequirements will return an array of one or more
-sname:VkSparseImageMemoryRequirements structures.
-Each structure describes the sparse memory requirements for a group of
-aspects of the image.
-
-The sparse image must: have been created using the
-ename:VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT flag to retrieve valid sparse
-image memory requirements.
-
-
-==== Sparse Image Memory Requirements
-
-[open,refpage='VkSparseImageMemoryRequirements',desc='Structure specifying sparse image memory requirements',type='structs']
---
-The sname:VkSparseImageMemoryRequirements structure is defined as:
-
-include::{generated}/api/structs/VkSparseImageMemoryRequirements.txt[]
-
-  * pname:formatProperties is a slink:VkSparseImageFormatProperties
-    structure specifying properties of the image format.
-  * pname:imageMipTailFirstLod is the first mip level at which image
-    subresources are included in the mip tail region.
-  * pname:imageMipTailSize is the memory size (in bytes) of the mip tail
-    region.
-    If pname:formatProperties.flags contains
-    ename:VK_SPARSE_IMAGE_FORMAT_SINGLE_MIPTAIL_BIT, this is the size of the
-    whole mip tail, otherwise this is the size of the mip tail of a single
-    array layer.
-    This value is guaranteed to be a multiple of the sparse block size in
-    bytes.
-  * pname:imageMipTailOffset is the opaque memory offset used with
-    slink:VkSparseImageOpaqueMemoryBindInfo to bind the mip tail region(s).
-  * pname:imageMipTailStride is the offset stride between each array-layer's
-    mip tail, if pname:formatProperties.flags does not contain
-    ename:VK_SPARSE_IMAGE_FORMAT_SINGLE_MIPTAIL_BIT (otherwise the value is
-    undefined:).
-
-include::{generated}/validity/structs/VkSparseImageMemoryRequirements.txt[]
---
-
-[open,refpage='vkGetImageSparseMemoryRequirements',desc='Query the memory requirements for a sparse image',type='protos']
---
-To query sparse memory requirements for an image, call:
-
-include::{generated}/api/protos/vkGetImageSparseMemoryRequirements.txt[]
-
-  * pname:device is the logical device that owns the image.
-  * pname:image is the slink:VkImage object to get the memory requirements
-    for.
-  * pname:pSparseMemoryRequirementCount is a pointer to an integer related
-    to the number of sparse memory requirements available or queried, as
-    described below.
-  * pname:pSparseMemoryRequirements is either `NULL` or a pointer to an
-    array of sname:VkSparseImageMemoryRequirements structures.
-
-If pname:pSparseMemoryRequirements is `NULL`, then the number of sparse
-memory requirements available is returned in
-pname:pSparseMemoryRequirementCount.
-Otherwise, pname:pSparseMemoryRequirementCount must: point to a variable set
-by the user to the number of elements in the pname:pSparseMemoryRequirements
-array, and on return the variable is overwritten with the number of
-structures actually written to pname:pSparseMemoryRequirements.
-If pname:pSparseMemoryRequirementCount is less than the number of sparse
-memory requirements available, at most pname:pSparseMemoryRequirementCount
-structures will be written.
-
-If the image was not created with ename:VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT
-then pname:pSparseMemoryRequirementCount will be set to zero and
-pname:pSparseMemoryRequirements will not be written to.
-
-[NOTE]
-.Note
-====
-It is legal for an implementation to report a larger value in
-sname:VkMemoryRequirements::pname:size than would be obtained by adding
-together memory sizes for all sname:VkSparseImageMemoryRequirements returned
-by fname:vkGetImageSparseMemoryRequirements.
-This may: occur when the implementation requires unused padding in the
-address range describing the resource.
-====
-
-include::{generated}/validity/protos/vkGetImageSparseMemoryRequirements.txt[]
---
-
-ifdef::VK_VERSION_1_1,VK_KHR_get_memory_requirements2[]
-[open,refpage='vkGetImageSparseMemoryRequirements2',desc='Query the memory requirements for a sparse image',type='protos']
---
-To query sparse memory requirements for an image, call:
-
-ifdef::VK_VERSION_1_1[]
-include::{generated}/api/protos/vkGetImageSparseMemoryRequirements2.txt[]
-endif::VK_VERSION_1_1[]
-
-ifdef::VK_VERSION_1_1+VK_KHR_get_memory_requirements2[or the equivalent command]
-
-ifdef::VK_KHR_get_memory_requirements2[]
-include::{generated}/api/protos/vkGetImageSparseMemoryRequirements2KHR.txt[]
-endif::VK_KHR_get_memory_requirements2[]
-
-  * pname:device is the logical device that owns the image.
-  * pname:pInfo is a pointer to a sname:VkImageSparseMemoryRequirementsInfo2
-    structure containing parameters required for the memory requirements
-    query.
-  * pname:pSparseMemoryRequirementCount is a pointer to an integer related
-    to the number of sparse memory requirements available or queried, as
-    described below.
-  * pname:pSparseMemoryRequirements is either `NULL` or a pointer to an
-    array of sname:VkSparseImageMemoryRequirements2 structures.
-
-include::{generated}/validity/protos/vkGetImageSparseMemoryRequirements2.txt[]
---
-
-ifdef::VK_KHR_maintenance4[]
-[open,refpage='vkGetDeviceImageSparseMemoryRequirementsKHR',desc='Query the memory requirements for a sparse image',type='protos']
---
-To determine the sparse memory requirements for an image resource without
-creating an object, call:
-
-include::{generated}/api/protos/vkGetDeviceImageSparseMemoryRequirementsKHR.txt[]
-
-  * pname:device is the logical device intended to own the image.
-  * pname:pInfo is a pointer to a slink:VkDeviceImageMemoryRequirementsKHR
-    structure containing parameters required for the memory requirements
-    query.
-  * pname:pSparseMemoryRequirementCount is a pointer to an integer related
-    to the number of sparse memory requirements available or queried, as
-    described below.
-  * pname:pSparseMemoryRequirements is either `NULL` or a pointer to an
-    array of sname:VkSparseImageMemoryRequirements2 structures.
-
-include::{generated}/validity/protos/vkGetDeviceImageSparseMemoryRequirementsKHR.txt[]
---
-endif::VK_KHR_maintenance4[]
-
-[open,refpage='VkImageSparseMemoryRequirementsInfo2',desc='(None)',type='structs']
---
-The sname:VkImageSparseMemoryRequirementsInfo2 structure is defined as:
-
-include::{generated}/api/structs/VkImageSparseMemoryRequirementsInfo2.txt[]
-
-ifdef::VK_KHR_get_memory_requirements2[]
-or the equivalent
-
-include::{generated}/api/structs/VkImageSparseMemoryRequirementsInfo2KHR.txt[]
-endif::VK_KHR_get_memory_requirements2[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:image is the image to query.
-
-include::{generated}/validity/structs/VkImageSparseMemoryRequirementsInfo2.txt[]
---
-
-[open,refpage='VkSparseImageMemoryRequirements2',desc='(None)',type='structs']
---
-The sname:VkSparseImageMemoryRequirements2 structure is defined as:
-
-include::{generated}/api/structs/VkSparseImageMemoryRequirements2.txt[]
-
-ifdef::VK_KHR_get_memory_requirements2[]
-or the equivalent
-
-include::{generated}/api/structs/VkSparseImageMemoryRequirements2KHR.txt[]
-endif::VK_KHR_get_memory_requirements2[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:memoryRequirements is a slink:VkSparseImageMemoryRequirements
-    structure describing the memory requirements of the sparse image.
-
-include::{generated}/validity/structs/VkSparseImageMemoryRequirements2.txt[]
---
-endif::VK_VERSION_1_1,VK_KHR_get_memory_requirements2[]
-
-
-[[sparsememory-resource-binding]]
-=== Binding Resource Memory
-
-Non-sparse resources are backed by a single physical allocation prior to
-device use (via fname:vkBindImageMemory or fname:vkBindBufferMemory), and
-their backing must: not be changed.
-On the other hand, sparse resources can: be bound to memory non-contiguously
-and these bindings can: be altered during the lifetime of the resource.
-
-[NOTE]
-.Note
-====
-It is important to note that freeing a sname:VkDeviceMemory object with
-fname:vkFreeMemory will not cause resources (or resource regions) bound to
-the memory object to become unbound.
-Applications must: not access resources bound to memory that has been freed.
-====
-
-Sparse memory bindings execute on a queue that includes the
-ename:VK_QUEUE_SPARSE_BINDING_BIT bit.
-Applications must: use <<synchronization,synchronization primitives>> to
-guarantee that other queues do not access ranges of memory concurrently with
-a binding change.
-Applications can: access other ranges of the same resource while a bind
-operation is executing.
-
-[NOTE]
-.Note
-====
-Implementations must: provide a guarantee that simultaneously binding sparse
-blocks while another queue accesses those same sparse blocks via a sparse
-resource must: not access memory owned by another process or otherwise
-corrupt the system.
-====
-
-While some implementations may: include ename:VK_QUEUE_SPARSE_BINDING_BIT
-support in queue families that also include graphics and compute support,
-other implementations may: only expose a
-ename:VK_QUEUE_SPARSE_BINDING_BIT-only queue family.
-In either case, applications must: use <<synchronization,synchronization
-primitives>> to explicitly request any ordering dependencies between sparse
-memory binding operations and other graphics/compute/transfer operations, as
-sparse binding operations are not automatically ordered against command
-buffer execution, even within a single queue.
-
-When binding memory explicitly for the ename:VK_IMAGE_ASPECT_METADATA_BIT
-the application must: use the ename:VK_SPARSE_MEMORY_BIND_METADATA_BIT in
-the sname:VkSparseMemoryBind::pname:flags field when binding memory.
-Binding memory for metadata is done the same way as binding memory for the
-mip tail, with the addition of the ename:VK_SPARSE_MEMORY_BIND_METADATA_BIT
-flag.
-
-Binding the mip tail for any aspect must: only be performed using
-slink:VkSparseImageOpaqueMemoryBindInfo.
-If pname:formatProperties.flags contains
-ename:VK_SPARSE_IMAGE_FORMAT_SINGLE_MIPTAIL_BIT, then it can: be bound with
-a single slink:VkSparseMemoryBind structure, with pname:resourceOffset =
-pname:imageMipTailOffset and pname:size = pname:imageMipTailSize.
-
-If pname:formatProperties.flags does not contain
-ename:VK_SPARSE_IMAGE_FORMAT_SINGLE_MIPTAIL_BIT then the offset for the mip
-tail in each array layer is given as:
-
-[source,c++]
----------------------------------------------------
-arrayMipTailOffset = imageMipTailOffset + arrayLayer * imageMipTailStride;
----------------------------------------------------
-
-and the mip tail can: be bound with code:layerCount slink:VkSparseMemoryBind
-structures, each using pname:size = pname:imageMipTailSize and
-pname:resourceOffset = ptext:arrayMipTailOffset as defined above.
-
-Sparse memory binding is handled by the following APIs and related data
-structures.
-
-
-[[sparsemem-memory-binding]]
-==== Sparse Memory Binding Functions
-
-[open,refpage='VkSparseMemoryBind',desc='Structure specifying a sparse memory bind operation',type='structs']
---
-The sname:VkSparseMemoryBind structure is defined as:
-
-include::{generated}/api/structs/VkSparseMemoryBind.txt[]
-
-  * pname:resourceOffset is the offset into the resource.
-  * pname:size is the size of the memory region to be bound.
-  * pname:memory is the slink:VkDeviceMemory object that the range of the
-    resource is bound to.
-    If pname:memory is dlink:VK_NULL_HANDLE, the range is unbound.
-  * pname:memoryOffset is the offset into the slink:VkDeviceMemory object to
-    bind the resource range to.
-    If pname:memory is dlink:VK_NULL_HANDLE, this value is ignored.
-  * pname:flags is a bitmask of elink:VkSparseMemoryBindFlagBits specifying
-    usage of the binding operation.
-
-The _binding range_ [eq]#[pname:resourceOffset, pname:resourceOffset {plus}
-pname:size)# has different constraints based on pname:flags.
-If pname:flags contains ename:VK_SPARSE_MEMORY_BIND_METADATA_BIT, the
-binding range must: be within the mip tail region of the metadata aspect.
-This metadata region is defined by:
-
-  {empty}:: [eq]#metadataRegion = [base, base {plus}
-            pname:imageMipTailSize)#
-  {empty}:: [eq]#base = pname:imageMipTailOffset {plus}
-            pname:imageMipTailStride {times} n#
-
-and pname:imageMipTailOffset, pname:imageMipTailSize, and
-pname:imageMipTailStride values are from the
-slink:VkSparseImageMemoryRequirements corresponding to the metadata aspect
-of the image, and [eq]#n# is a valid array layer index for the image,
-
-pname:imageMipTailStride is considered to be zero for aspects where
-sname:VkSparseImageMemoryRequirements::pname:formatProperties.flags contains
-ename:VK_SPARSE_IMAGE_FORMAT_SINGLE_MIPTAIL_BIT.
-
-If pname:flags does not contain ename:VK_SPARSE_MEMORY_BIND_METADATA_BIT,
-the binding range must: be within the range
-[eq]#[0,slink:VkMemoryRequirements::pname:size)#.
-
-.Valid Usage
-****
-  * [[VUID-VkSparseMemoryBind-memory-01096]]
-    If pname:memory is not dlink:VK_NULL_HANDLE, pname:memory and
-    pname:memoryOffset must: match the memory requirements of the resource,
-    as described in section <<resources-association>>
-  * [[VUID-VkSparseMemoryBind-memory-01097]]
-    If pname:memory is not dlink:VK_NULL_HANDLE, pname:memory must: not have
-    been created with a memory type that reports
-    ename:VK_MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT bit set
-  * [[VUID-VkSparseMemoryBind-size-01098]]
-    pname:size must: be greater than `0`
-  * [[VUID-VkSparseMemoryBind-resourceOffset-01099]]
-    pname:resourceOffset must: be less than the size of the resource
-  * [[VUID-VkSparseMemoryBind-size-01100]]
-    pname:size must: be less than or equal to the size of the resource minus
-    pname:resourceOffset
-  * [[VUID-VkSparseMemoryBind-memoryOffset-01101]]
-    pname:memoryOffset must: be less than the size of pname:memory
-  * [[VUID-VkSparseMemoryBind-size-01102]]
-    pname:size must: be less than or equal to the size of pname:memory minus
-    pname:memoryOffset
-ifdef::VK_VERSION_1_1,VK_KHR_external_memory[]
-  * [[VUID-VkSparseMemoryBind-memory-02730]]
-    If pname:memory was created with
-    slink:VkExportMemoryAllocateInfo::pname:handleTypes not equal to `0`, at
-    least one handle type it contained must: also have been set in
-    slink:VkExternalMemoryBufferCreateInfo::pname:handleTypes or
-    slink:VkExternalMemoryImageCreateInfo::pname:handleTypes when the
-    resource was created
-  * [[VUID-VkSparseMemoryBind-memory-02731]]
-    If pname:memory was created by a memory import operation, the external
-    handle type of the imported memory must: also have been set in
-    slink:VkExternalMemoryBufferCreateInfo::pname:handleTypes or
-    slink:VkExternalMemoryImageCreateInfo::pname:handleTypes when the
-    resource was created
-endif::VK_VERSION_1_1,VK_KHR_external_memory[]
-****
-
-include::{generated}/validity/structs/VkSparseMemoryBind.txt[]
---
-
-[open,refpage='VkSparseMemoryBindFlagBits',desc='Bitmask specifying usage of a sparse memory binding operation',type='enums']
---
-Bits which can: be set in slink:VkSparseMemoryBind::pname:flags, specifying
-usage of a sparse memory binding operation, are:
-
-include::{generated}/api/enums/VkSparseMemoryBindFlagBits.txt[]
-
-  * ename:VK_SPARSE_MEMORY_BIND_METADATA_BIT specifies that the memory being
-    bound is only for the metadata aspect.
---
-
-[open,refpage='VkSparseMemoryBindFlags',desc='Bitmask of VkSparseMemoryBindFlagBits',type='flags']
---
-include::{generated}/api/flags/VkSparseMemoryBindFlags.txt[]
-
-tname:VkSparseMemoryBindFlags is a bitmask type for setting a mask of zero
-or more elink:VkSparseMemoryBindFlagBits.
---
-
-[open,refpage='VkSparseBufferMemoryBindInfo',desc='Structure specifying a sparse buffer memory bind operation',type='structs']
---
-Memory is bound to sname:VkBuffer objects created with the
-ename:VK_BUFFER_CREATE_SPARSE_BINDING_BIT flag using the following
-structure:
-
-include::{generated}/api/structs/VkSparseBufferMemoryBindInfo.txt[]
-
-  * pname:buffer is the slink:VkBuffer object to be bound.
-  * pname:bindCount is the number of slink:VkSparseMemoryBind structures in
-    the pname:pBinds array.
-  * pname:pBinds is a pointer to an array of slink:VkSparseMemoryBind
-    structures.
-
-include::{generated}/validity/structs/VkSparseBufferMemoryBindInfo.txt[]
---
-
-[open,refpage='VkSparseImageOpaqueMemoryBindInfo',desc='Structure specifying sparse image opaque memory bind information',type='structs']
---
-Memory is bound to opaque regions of sname:VkImage objects created with the
-ename:VK_IMAGE_CREATE_SPARSE_BINDING_BIT flag using the following structure:
-
-include::{generated}/api/structs/VkSparseImageOpaqueMemoryBindInfo.txt[]
-
-  * pname:image is the slink:VkImage object to be bound.
-  * pname:bindCount is the number of slink:VkSparseMemoryBind structures in
-    the pname:pBinds array.
-  * pname:pBinds is a pointer to an array of slink:VkSparseMemoryBind
-    structures.
-
-.Valid Usage
-****
-  * [[VUID-VkSparseImageOpaqueMemoryBindInfo-pBinds-01103]]
-    If the pname:flags member of any element of pname:pBinds contains
-    ename:VK_SPARSE_MEMORY_BIND_METADATA_BIT, the binding range defined
-    must: be within the mip tail region of the metadata aspect of
-    pname:image
-****
-
-include::{generated}/validity/structs/VkSparseImageOpaqueMemoryBindInfo.txt[]
---
-
-[NOTE]
-.Note
-====
-This operation is normally used to bind memory to fully-resident sparse
-images or for mip tail regions of partially resident images.
-However, it can: also be used to bind memory for the entire binding range of
-partially resident images.
-
-In case pname:flags does not contain
-ename:VK_SPARSE_MEMORY_BIND_METADATA_BIT, the pname:resourceOffset is in the
-range [eq]#[0, slink:VkMemoryRequirements::pname:size)#, This range includes
-data from all aspects of the image, including metadata.
-For most implementations this will probably mean that the
-pname:resourceOffset is a simple device address offset within the resource.
-It is possible for an application to bind a range of memory that includes
-both resource data and metadata.
-However, the application would not know what part of the image the memory is
-used for, or if any range is being used for metadata.
-
-When pname:flags contains ename:VK_SPARSE_MEMORY_BIND_METADATA_BIT, the
-binding range specified must: be within the mip tail region of the metadata
-aspect.
-In this case the pname:resourceOffset is not required: to be a simple device
-address offset within the resource.
-However, it _is_ defined to be within [eq]#[pname:imageMipTailOffset,
-pname:imageMipTailOffset {plus} pname:imageMipTailSize)# for the metadata
-aspect.
-See slink:VkSparseMemoryBind for the full constraints on binding region with
-this flag present.
-====
-
-ifdef::editing-notes[]
-[NOTE]
-.editing-note
-====
-(Jon) The preceding NOTE refers to pname:flags, which is presumably a
-reference to slink:VkSparseMemoryBind above, even though that is not
-contextually clear.
-====
-endif::editing-notes[]
-
-[open,refpage='VkSparseImageMemoryBindInfo',desc='Structure specifying sparse image memory bind information',type='structs']
---
-Memory can: be bound to sparse image blocks of sname:VkImage objects created
-with the ename:VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT flag using the following
-structure:
-
-include::{generated}/api/structs/VkSparseImageMemoryBindInfo.txt[]
-
-  * pname:image is the slink:VkImage object to be bound
-  * pname:bindCount is the number of slink:VkSparseImageMemoryBind
-    structures in pname:pBinds array
-  * pname:pBinds is a pointer to an array of slink:VkSparseImageMemoryBind
-    structures
-
-.Valid Usage
-****
-  * [[VUID-VkSparseImageMemoryBindInfo-subresource-01722]]
-    The pname:subresource.mipLevel member of each element of pname:pBinds
-    must: be less than the pname:mipLevels specified in
-    slink:VkImageCreateInfo when pname:image was created
-  * [[VUID-VkSparseImageMemoryBindInfo-subresource-01723]]
-    The pname:subresource.arrayLayer member of each element of pname:pBinds
-    must: be less than the pname:arrayLayers specified in
-    slink:VkImageCreateInfo when pname:image was created
-  * [[VUID-VkSparseImageMemoryBindInfo-image-02901]]
-    pname:image must: have been created with
-    ename:VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT set
-****
-
-include::{generated}/validity/structs/VkSparseImageMemoryBindInfo.txt[]
---
-
-[open,refpage='VkSparseImageMemoryBind',desc='Structure specifying sparse image memory bind',type='structs']
---
-The sname:VkSparseImageMemoryBind structure is defined as:
-
-include::{generated}/api/structs/VkSparseImageMemoryBind.txt[]
-
-  * pname:subresource is the image _aspect_ and region of interest in the
-    image.
-  * pname:offset are the coordinates of the first texel within the image
-    subresource to bind.
-  * pname:extent is the size in texels of the region within the image
-    subresource to bind.
-    The extent must: be a multiple of the sparse image block dimensions,
-    except when binding sparse image blocks along the edge of an image
-    subresource it can: instead be such that any coordinate of
-    [eq]#pname:offset {plus} pname:extent# equals the corresponding
-    dimensions of the image subresource.
-  * pname:memory is the slink:VkDeviceMemory object that the sparse image
-    blocks of the image are bound to.
-    If pname:memory is dlink:VK_NULL_HANDLE, the sparse image blocks are
-    unbound.
-  * pname:memoryOffset is an offset into slink:VkDeviceMemory object.
-    If pname:memory is dlink:VK_NULL_HANDLE, this value is ignored.
-  * pname:flags are sparse memory binding flags.
-
-.Valid Usage
-****
-  * [[VUID-VkSparseImageMemoryBind-memory-01104]]
-    If the <<features-sparseResidencyAliased,sparse aliased residency>>
-    feature is not enabled, and if any other resources are bound to ranges
-    of pname:memory, the range of pname:memory being bound must: not overlap
-    with those bound ranges
-  * [[VUID-VkSparseImageMemoryBind-memory-01105]]
-    pname:memory and pname:memoryOffset must: match the memory requirements
-    of the calling command's pname:image, as described in section
-    <<resources-association>>
-  * [[VUID-VkSparseImageMemoryBind-subresource-01106]]
-    pname:subresource must: be a valid image subresource for pname:image
-    (see <<resources-image-views>>)
-  * [[VUID-VkSparseImageMemoryBind-offset-01107]]
-    pname:offset.x must: be a multiple of the sparse image block width
-    (sname:VkSparseImageFormatProperties::pname:imageGranularity.width) of
-    the image
-  * [[VUID-VkSparseImageMemoryBind-extent-01108]]
-    pname:extent.width must: either be a multiple of the sparse image block
-    width of the image, or else [eq]#(pname:extent.width {plus}
-    pname:offset.x)# must: equal the width of the image subresource
-  * [[VUID-VkSparseImageMemoryBind-offset-01109]]
-    pname:offset.y must: be a multiple of the sparse image block height
-    (sname:VkSparseImageFormatProperties::pname:imageGranularity.height) of
-    the image
-  * [[VUID-VkSparseImageMemoryBind-extent-01110]]
-    pname:extent.height must: either be a multiple of the sparse image block
-    height of the image, or else [eq]#(pname:extent.height {plus}
-    pname:offset.y)# must: equal the height of the image subresource
-  * [[VUID-VkSparseImageMemoryBind-offset-01111]]
-    pname:offset.z must: be a multiple of the sparse image block depth
-    (sname:VkSparseImageFormatProperties::pname:imageGranularity.depth) of
-    the image
-  * [[VUID-VkSparseImageMemoryBind-extent-01112]]
-    pname:extent.depth must: either be a multiple of the sparse image block
-    depth of the image, or else [eq]#(pname:extent.depth {plus}
-    pname:offset.z)# must: equal the depth of the image subresource
-ifdef::VK_VERSION_1_1,VK_KHR_external_memory[]
-  * [[VUID-VkSparseImageMemoryBind-memory-02732]]
-    If pname:memory was created with
-    slink:VkExportMemoryAllocateInfo::pname:handleTypes not equal to `0`, at
-    least one handle type it contained must: also have been set in
-    slink:VkExternalMemoryImageCreateInfo::pname:handleTypes when the image
-    was created
-  * [[VUID-VkSparseImageMemoryBind-memory-02733]]
-    If pname:memory was created by a memory import operation, the external
-    handle type of the imported memory must: also have been set in
-    slink:VkExternalMemoryImageCreateInfo::pname:handleTypes when
-    pname:image was created
-endif::VK_VERSION_1_1,VK_KHR_external_memory[]
-****
-
-include::{generated}/validity/structs/VkSparseImageMemoryBind.txt[]
---
-
-[open,refpage='vkQueueBindSparse',desc='Bind device memory to a sparse resource object',type='protos']
---
-To submit sparse binding operations to a queue, call:
-
-include::{generated}/api/protos/vkQueueBindSparse.txt[]
-
-  * pname:queue is the queue that the sparse binding operations will be
-    submitted to.
-  * pname:bindInfoCount is the number of elements in the pname:pBindInfo
-    array.
-  * pname:pBindInfo is a pointer to an array of slink:VkBindSparseInfo
-    structures, each specifying a sparse binding submission batch.
-  * pname:fence is an optional: handle to a fence to be signaled.
-    If pname:fence is not dlink:VK_NULL_HANDLE, it defines a
-    <<synchronization-fences-signaling, fence signal operation>>.
-
-fname:vkQueueBindSparse is a <<devsandqueues-submission,queue submission
-command>>, with each batch defined by an element of pname:pBindInfo as a
-slink:VkBindSparseInfo structure.
-Batches begin execution in the order they appear in pname:pBindInfo, but
-may: complete out of order.
-
-Within a batch, a given range of a resource must: not be bound more than
-once.
-Across batches, if a range is to be bound to one allocation and offset and
-then to another allocation and offset, then the application must: guarantee
-(usually using semaphores) that the binding operations are executed in the
-correct order, as well as to order binding operations against the execution
-of command buffer submissions.
-
-As no operation to flink:vkQueueBindSparse causes any pipeline stage to
-access memory, synchronization primitives used in this command effectively
-only define execution dependencies.
-
-Additional information about fence and semaphore operation is described in
-<<synchronization, the synchronization chapter>>.
-
-.Valid Usage
-****
-  * [[VUID-vkQueueBindSparse-fence-01113]]
-    If pname:fence is not dlink:VK_NULL_HANDLE, pname:fence must: be
-    unsignaled
-  * [[VUID-vkQueueBindSparse-fence-01114]]
-    If pname:fence is not dlink:VK_NULL_HANDLE, pname:fence must: not be
-    associated with any other queue command that has not yet completed
-    execution on that queue
-  * [[VUID-vkQueueBindSparse-pSignalSemaphores-01115]]
-    Each element of the pname:pSignalSemaphores member of each element of
-    pname:pBindInfo must: be unsignaled when the semaphore signal operation
-    it defines is executed on the device
-  * [[VUID-vkQueueBindSparse-pWaitSemaphores-01116]]
-    When a semaphore wait operation referring to a binary semaphore defined
-    by any element of the pname:pWaitSemaphores member of any element of
-    pname:pBindInfo executes on pname:queue, there must: be no other queues
-    waiting on the same semaphore
-  * [[VUID-vkQueueBindSparse-pWaitSemaphores-01117]]
-    All elements of the pname:pWaitSemaphores member of all elements of the
-    pname:pBindInfo parameter referring to a binary semaphore must: be
-    semaphores that are signaled, or have
-    <<synchronization-semaphores-signaling, semaphore signal operations>>
-    previously submitted for execution
-ifdef::VK_VERSION_1_2,VK_KHR_timeline_semaphore[]
-  * [[VUID-vkQueueBindSparse-pWaitSemaphores-03245]]
-    All elements of the pname:pWaitSemaphores member of all elements of
-    pname:pBindInfo created with a elink:VkSemaphoreType of
-    ename:VK_SEMAPHORE_TYPE_BINARY must: reference a semaphore signal
-    operation that has been submitted for execution and any semaphore signal
-    operations on which it depends (if any) must: have also been submitted
-    for execution
-endif::VK_VERSION_1_2,VK_KHR_timeline_semaphore[]
-****
-
-include::{generated}/validity/protos/vkQueueBindSparse.txt[]
---
-
-[open,refpage='VkBindSparseInfo',desc='Structure specifying a sparse binding operation',type='structs']
---
-The sname:VkBindSparseInfo structure is defined as:
-
-include::{generated}/api/structs/VkBindSparseInfo.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:waitSemaphoreCount is the number of semaphores upon which to wait
-    before executing the sparse binding operations for the batch.
-  * pname:pWaitSemaphores is a pointer to an array of semaphores upon which
-    to wait on before the sparse binding operations for this batch begin
-    execution.
-    If semaphores to wait on are provided, they define a
-    <<synchronization-semaphores-waiting, semaphore wait operation>>.
-  * pname:bufferBindCount is the number of sparse buffer bindings to perform
-    in the batch.
-  * pname:pBufferBinds is a pointer to an array of
-    slink:VkSparseBufferMemoryBindInfo structures.
-  * pname:imageOpaqueBindCount is the number of opaque sparse image bindings
-    to perform.
-  * pname:pImageOpaqueBinds is a pointer to an array of
-    slink:VkSparseImageOpaqueMemoryBindInfo structures, indicating opaque
-    sparse image bindings to perform.
-  * pname:imageBindCount is the number of sparse image bindings to perform.
-  * pname:pImageBinds is a pointer to an array of
-    slink:VkSparseImageMemoryBindInfo structures, indicating sparse image
-    bindings to perform.
-  * pname:signalSemaphoreCount is the number of semaphores to be signaled
-    once the sparse binding operations specified by the structure have
-    completed execution.
-  * pname:pSignalSemaphores is a pointer to an array of semaphores which
-    will be signaled when the sparse binding operations for this batch have
-    completed execution.
-    If semaphores to be signaled are provided, they define a
-    <<synchronization-semaphores-signaling, semaphore signal operation>>.
-
-ifdef::VK_VERSION_1_2,VK_KHR_timeline_semaphore[]
-.Valid Usage
-****
-  * [[VUID-VkBindSparseInfo-pWaitSemaphores-03246]]
-    If any element of pname:pWaitSemaphores or pname:pSignalSemaphores was
-    created with a elink:VkSemaphoreType of ename:VK_SEMAPHORE_TYPE_TIMELINE
-    then the pname:pNext chain must: include a
-    slink:VkTimelineSemaphoreSubmitInfo structure
-  * [[VUID-VkBindSparseInfo-pNext-03247]]
-    If the pname:pNext chain of this structure includes a
-    slink:VkTimelineSemaphoreSubmitInfo structure and any element of
-    pname:pWaitSemaphores was created with a elink:VkSemaphoreType of
-    ename:VK_SEMAPHORE_TYPE_TIMELINE then its pname:waitSemaphoreValueCount
-    member must: equal pname:waitSemaphoreCount
-  * [[VUID-VkBindSparseInfo-pNext-03248]]
-    If the pname:pNext chain of this structure includes a
-    slink:VkTimelineSemaphoreSubmitInfo structure and any element of
-    pname:pSignalSemaphores was created with a elink:VkSemaphoreType of
-    ename:VK_SEMAPHORE_TYPE_TIMELINE then its
-    pname:signalSemaphoreValueCount member must: equal
-    pname:signalSemaphoreCount
-  * [[VUID-VkBindSparseInfo-pSignalSemaphores-03249]]
-    For each element of pname:pSignalSemaphores created with a
-    elink:VkSemaphoreType of ename:VK_SEMAPHORE_TYPE_TIMELINE the
-    corresponding element of
-    slink:VkTimelineSemaphoreSubmitInfo::pname:pSignalSemaphoreValues must:
-    have a value greater than the current value of the semaphore when the
-    <<synchronization-semaphores-signaling,semaphore signal operation>> is
-    executed
-  * [[VUID-VkBindSparseInfo-pWaitSemaphores-03250]]
-    For each element of pname:pWaitSemaphores created with a
-    elink:VkSemaphoreType of ename:VK_SEMAPHORE_TYPE_TIMELINE the
-    corresponding element of
-    slink:VkTimelineSemaphoreSubmitInfo::pname:pWaitSemaphoreValues must:
-    have a value which does not differ from the current value of the
-    semaphore or from the value of any outstanding semaphore wait or signal
-    operation on that semaphore by more than
-    <<limits-maxTimelineSemaphoreValueDifference,
-    pname:maxTimelineSemaphoreValueDifference>>
-  * [[VUID-VkBindSparseInfo-pSignalSemaphores-03251]]
-    For each element of pname:pSignalSemaphores created with a
-    elink:VkSemaphoreType of ename:VK_SEMAPHORE_TYPE_TIMELINE the
-    corresponding element of
-    slink:VkTimelineSemaphoreSubmitInfo::pname:pSignalSemaphoreValues must:
-    have a value which does not differ from the current value of the
-    semaphore or from the value of any outstanding semaphore wait or signal
-    operation on that semaphore by more than
-    <<limits-maxTimelineSemaphoreValueDifference,
-    pname:maxTimelineSemaphoreValueDifference>>
-****
-endif::VK_VERSION_1_2,VK_KHR_timeline_semaphore[]
-
-include::{generated}/validity/structs/VkBindSparseInfo.txt[]
---
-
-ifdef::VK_VERSION_1_2,VK_KHR_timeline_semaphore[]
-To specify the values to use when waiting for and signaling semaphores
-created with a elink:VkSemaphoreType of ename:VK_SEMAPHORE_TYPE_TIMELINE,
-add a slink:VkTimelineSemaphoreSubmitInfo structure to the pname:pNext chain
-of the slink:VkBindSparseInfo structure.
-endif::VK_VERSION_1_2,VK_KHR_timeline_semaphore[]
-
-ifdef::VK_VERSION_1_1,VK_KHR_device_group[]
-[open,refpage='VkDeviceGroupBindSparseInfo',desc='Structure indicating which instances are bound',type='structs']
---
-If the pname:pNext chain of slink:VkBindSparseInfo includes a
-sname:VkDeviceGroupBindSparseInfo structure, then that structure includes
-device indices specifying which instance of the resources and memory are
-bound.
-
-The sname:VkDeviceGroupBindSparseInfo structure is defined as:
-
-include::{generated}/api/structs/VkDeviceGroupBindSparseInfo.txt[]
-
-ifdef::VK_KHR_device_group[]
-or the equivalent
-
-include::{generated}/api/structs/VkDeviceGroupBindSparseInfoKHR.txt[]
-endif::VK_KHR_device_group[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:resourceDeviceIndex is a device index indicating which instance of
-    the resource is bound.
-  * pname:memoryDeviceIndex is a device index indicating which instance of
-    the memory the resource instance is bound to.
-
-These device indices apply to all buffer and image memory binds included in
-the batch pointing to this structure.
-The semaphore waits and signals for the batch are executed only by the
-physical device specified by the pname:resourceDeviceIndex.
-
-If this structure is not present, pname:resourceDeviceIndex and
-pname:memoryDeviceIndex are assumed to be zero.
-
-.Valid Usage
-****
-  * [[VUID-VkDeviceGroupBindSparseInfo-resourceDeviceIndex-01118]]
-    pname:resourceDeviceIndex and pname:memoryDeviceIndex must: both be
-    valid device indices
-  * [[VUID-VkDeviceGroupBindSparseInfo-memoryDeviceIndex-01119]]
-    Each memory allocation bound in this batch must: have allocated an
-    instance for pname:memoryDeviceIndex
-****
-
-include::{generated}/validity/structs/VkDeviceGroupBindSparseInfo.txt[]
---
-endif::VK_VERSION_1_1,VK_KHR_device_group[]
diff --git a/registry/vulkan/chapters/synchronization.txt b/registry/vulkan/chapters/synchronization.txt
deleted file mode 100644
index 0f316f8..0000000
--- a/registry/vulkan/chapters/synchronization.txt
+++ /dev/null
@@ -1,6534 +0,0 @@
-// Copyright 2015-2021 The Khronos Group, Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-[[synchronization]]
-= Synchronization and Cache Control
-
-Synchronization of access to resources is primarily the responsibility of
-the application in Vulkan.
-The order of execution of commands with respect to the host and other
-commands on the device has few implicit guarantees, and needs to be
-explicitly specified.
-Memory caches and other optimizations are also explicitly managed, requiring
-that the flow of data through the system is largely under application
-control.
-
-Whilst some implicit guarantees exist between commands, five explicit
-synchronization mechanisms are exposed by Vulkan:
-
-<<synchronization-fences,Fences>>::
-    Fences can: be used to communicate to the host that execution of some
-    task on the device has completed.
-
-<<synchronization-semaphores,Semaphores>>::
-    Semaphores can: be used to control resource access across multiple
-    queues.
-
-<<synchronization-events,Events>>::
-    Events provide a fine-grained synchronization primitive which can: be
-    signaled either within a command buffer or by the host, and can: be
-    waited upon within a command buffer or queried on the host.
-
-<<synchronization-pipeline-barriers,Pipeline Barriers>>::
-    Pipeline barriers also provide synchronization control within a command
-    buffer, but at a single point, rather than with separate signal and wait
-    operations.
-
-<<renderpass,Render Passes>>::
-    Render passes provide a useful synchronization framework for most
-    rendering tasks, built upon the concepts in this chapter.
-    Many cases that would otherwise need an application to use other
-    synchronization primitives can: be expressed more efficiently as part of
-    a render pass.
-
-
-[[synchronization-dependencies]]
-== Execution and Memory Dependencies
-
-An _operation_ is an arbitrary amount of work to be executed on the host, a
-device, or an external entity such as a presentation engine.
-Synchronization commands introduce explicit _execution dependencies_, and
-_memory dependencies_ between two sets of operations defined by the
-command's two _synchronization scopes_.
-
-[[synchronization-dependencies-scopes]]
-The synchronization scopes define which other operations a synchronization
-command is able to create execution dependencies with.
-Any type of operation that is not in a synchronization command's
-synchronization scopes will not be included in the resulting dependency.
-For example, for many synchronization commands, the synchronization scopes
-can: be limited to just operations executing in specific
-<<synchronization-pipeline-stages,pipeline stages>>, which allows other
-pipeline stages to be excluded from a dependency.
-Other scoping options are possible, depending on the particular command.
-
-[[synchronization-dependencies-execution]]
-An _execution dependency_ is a guarantee that for two sets of operations,
-the first set must: _happen-before_ the second set.
-If an operation happens-before another operation, then the first operation
-must: complete before the second operation is initiated.
-More precisely:
-
-  * Let *A* and *B* be separate sets of operations.
-  * Let *S* be a synchronization command.
-  * Let *A~S~* and *B~S~* be the synchronization scopes of *S*.
-  * Let *A'* be the intersection of sets *A* and *A~S~*.
-  * Let *B'* be the intersection of sets *B* and *B~S~*.
-  * Submitting *A*, *S* and *B* for execution, in that order, will result in
-    execution dependency *E* between *A'* and *B'*.
-  * Execution dependency *E* guarantees that *A'* happens-before *B'*.
-
-[[synchronization-dependencies-chains]]
-An _execution dependency chain_ is a sequence of execution dependencies that
-form a happens-before relation between the first dependency's *A'* and the
-final dependency's *B'*.
-For each consecutive pair of execution dependencies, a chain exists if the
-intersection of *B~S~* in the first dependency and *A~S~* in the second
-dependency is not an empty set.
-The formation of a single execution dependency from an execution dependency
-chain can be described by substituting the following in the description of
-execution dependencies:
-
-  * Let *S* be a set of synchronization commands that generate an execution
-    dependency chain.
-  * Let *A~S~* be the first synchronization scope of the first command in
-    *S*.
-  * Let *B~S~* be the second synchronization scope of the last command in
-    *S*.
-
-Execution dependencies alone are not sufficient to guarantee that values
-resulting from writes in one set of operations can: be read from another set
-of operations.
-
-[[synchronization-dependencies-available-and-visible]]
-Three additional types of operations are used to control memory access.
-_Availability operations_ cause the values generated by specified memory
-write accesses to become _available_ to a memory domain for future access.
-Any available value remains available until a subsequent write to the same
-memory location occurs (whether it is made available or not) or the memory
-is freed.
-_Memory domain operations_ cause writes that are available to a source
-memory domain to become available to a destination memory domain (an example
-of this is making writes available to the host domain available to the
-device domain).
-_Visibility operations_ cause values available to a memory domain to become
-_visible_ to specified memory accesses.
-
-ifdef::VK_VERSION_1_2,VK_KHR_vulkan_memory_model[]
-Availability, visibility, memory domains, and memory domain operations are
-formally defined in the <<memory-model-availability-visibility,Availability
-and Visibility>> section of the <<memory-model,Memory Model>> chapter.
-Which API operations perform each of these operations is defined in
-<<memory-model-vulkan-availability-visibility,Availability, Visibility, and
-Domain Operations>>.
-endif::VK_VERSION_1_2,VK_KHR_vulkan_memory_model[]
-
-[[synchronization-dependencies-memory]]
-A _memory dependency_ is an execution dependency which includes availability
-and visibility operations such that:
-
-  * The first set of operations happens-before the availability operation.
-  * The availability operation happens-before the visibility operation.
-  * The visibility operation happens-before the second set of operations.
-
-Once written values are made visible to a particular type of memory access,
-they can: be read or written by that type of memory access.
-Most synchronization commands in Vulkan define a memory dependency.
-
-[[synchronization-dependencies-access-scopes]]
-The specific memory accesses that are made available and visible are defined
-by the _access scopes_ of a memory dependency.
-Any type of access that is in a memory dependency's first access scope and
-occurs in *A'* is made available.
-Any type of access that is in a memory dependency's second access scope and
-occurs in *B'* has any available writes made visible to it.
-Any type of operation that is not in a synchronization command's access
-scopes will not be included in the resulting dependency.
-
-A memory dependency enforces availability and visibility of memory accesses
-and execution order between two sets of operations.
-Adding to the description of <<synchronization-dependencies-chains,
-execution dependency chains>>:
-
-  * Let *a* be the set of memory accesses performed by *A'*.
-  * Let *b* be the set of memory accesses performed by *B'*.
-  * Let *a~S~* be the first access scope of the first command in *S*.
-  * Let *b~S~* be the second access scope of the last command in *S*.
-  * Let *a'* be the intersection of sets *a* and *a~S~*.
-  * Let *b'* be the intersection of sets *b* and *b~S~*.
-  * Submitting *A*, *S* and *B* for execution, in that order, will result in
-    a memory dependency *m* between *A'* and *B'*.
-  * Memory dependency *m* guarantees that:
-  ** Memory writes in *a'* are made available.
-  ** Available memory writes, including those from *a'*, are made visible to
-     *b'*.
-
-[NOTE]
-.Note
-====
-Execution and memory dependencies are used to solve data hazards, i.e. to
-ensure that read and write operations occur in a well-defined order.
-Write-after-read hazards can be solved with just an execution dependency,
-but read-after-write and write-after-write hazards need appropriate memory
-dependencies to be included between them.
-If an application does not include dependencies to solve these hazards, the
-results and execution orders of memory accesses are undefined:.
-====
-
-
-[[synchronization-image-layout-transitions]]
-=== Image Layout Transitions
-
-Image subresources can: be transitioned from one <<resources-image-layouts,
-layout>> to another as part of a <<synchronization-dependencies-memory,
-memory dependency>> (e.g. by using an
-<<synchronization-image-memory-barriers,image memory barrier>>).
-When a layout transition is specified in a memory dependency, it
-happens-after the availability operations in the memory dependency, and
-happens-before the visibility operations.
-Image layout transitions may: perform read and write accesses on all memory
-bound to the image subresource range, so applications must: ensure that all
-memory writes have been made
-<<synchronization-dependencies-available-and-visible, available>> before a
-layout transition is executed.
-Available memory is automatically made visible to a layout transition, and
-writes performed by a layout transition are automatically made available.
-
-Layout transitions always apply to a particular image subresource range, and
-specify both an old layout and new layout.
-The old layout must: either be ename:VK_IMAGE_LAYOUT_UNDEFINED, or match the
-current layout of the image subresource range.
-If the old layout matches the current layout of the image subresource range,
-the transition preserves the contents of that range.
-If the old layout is ename:VK_IMAGE_LAYOUT_UNDEFINED, the contents of that
-range may: be discarded.
-
-ifdef::VK_VERSION_1_1,VK_KHR_device_group[]
-As image layout transitions may: perform read and write accesses on the
-memory bound to the image, if the image subresource affected by the layout
-transition is bound to peer memory for any device in the current device mask
-then the memory heap the bound memory comes from must: support the
-ename:VK_PEER_MEMORY_FEATURE_GENERIC_SRC_BIT and
-ename:VK_PEER_MEMORY_FEATURE_GENERIC_DST_BIT capabilities as returned by
-flink:vkGetDeviceGroupPeerMemoryFeatures.
-endif::VK_VERSION_1_1,VK_KHR_device_group[]
-
-[NOTE]
-.Note
-====
-Applications must: ensure that layout transitions happen-after all
-operations accessing the image with the old layout, and happen-before any
-operations that will access the image with the new layout.
-Layout transitions are potentially read/write operations, so not defining
-appropriate memory dependencies to guarantee this will result in a data
-race.
-====
-
-Image layout transitions interact with <<resources-memory-aliasing,memory
-aliasing>>.
-
-
-[[synchronization-image-barrier-layout-transition-order]]
-Layout transitions that are performed via image memory barriers execute in
-their entirety in <<synchronization-submission-order, submission order>>,
-relative to other image layout transitions submitted to the same queue,
-including those performed by <<renderpass, render passes>>.
-In effect there is an implicit execution dependency from each such layout
-transition to all layout transitions previously submitted to the same queue.
-
-ifdef::VK_EXT_sample_locations[]
-
-The image layout of each image subresource of a depth/stencil image created
-with ename:VK_IMAGE_CREATE_SAMPLE_LOCATIONS_COMPATIBLE_DEPTH_BIT_EXT is
-dependent on the last sample locations used to render to the image
-subresource as a depth/stencil attachment, thus when the pname:image member
-of an <<synchronization-image-memory-barriers, image memory barrier>> is an
-image created with this flag the application can: chain a
-slink:VkSampleLocationsInfoEXT structure to the pname:pNext chain of
-ifdef::VK_KHR_synchronization2[]
-slink:VkImageMemoryBarrier2KHR or
-endif::VK_KHR_synchronization2[]
-slink:VkImageMemoryBarrier to specify the sample locations to use during any
-image layout transition.
-
-If the sname:VkSampleLocationsInfoEXT structure does not match the sample
-location state last used to render to the image subresource range specified
-by pname:subresourceRange, or if no sname:VkSampleLocationsInfoEXT structure
-is present, then the contents of the given image subresource range becomes
-undefined: as if pname:oldLayout would equal
-ename:VK_IMAGE_LAYOUT_UNDEFINED.
-
-endif::VK_EXT_sample_locations[]
-
-
-[[synchronization-pipeline-stages]]
-=== Pipeline Stages
-
-The work performed by an <<fundamentals-queueoperation-command-types, action
-or synchronization command>> consists of multiple operations, which are
-performed as a sequence of logically independent steps known as _pipeline
-stages_.
-The exact pipeline stages executed depend on the particular command that is
-used, and current command buffer state when the command was recorded.
-<<drawing,Drawing commands>>, <<dispatch,dispatching commands>>,
-<<copies,copy commands>>, <<clears,clear commands>>, and <<synchronization,
-synchronization commands>> all execute in different sets of
-<<VkPipelineStageFlagBits,pipeline stages>>.
-<<synchronization, Synchronization commands>> do not execute in a defined
-pipeline stage.
-
-[NOTE]
-.Note
-====
-Operations performed by synchronization commands (e.g.
-<<synchronization-dependencies-available-and-visible, availability and
-visibility operations>>) are not executed by a defined pipeline stage.
-However other commands can still synchronize with them by using the
-<<synchronization-dependencies-scopes, synchronization scopes>> to create a
-<<synchronization-dependencies-chains, dependency chain>>.
-====
-
-Execution of operations across pipeline stages must: adhere to
-<<synchronization-implicit, implicit ordering guarantees>>, particularly
-including <<synchronization-pipeline-stages-order, pipeline stage order>>.
-Otherwise, execution across pipeline stages may: overlap or execute out of
-order with regards to other stages, unless otherwise enforced by an
-execution dependency.
-
-Several of the synchronization commands include pipeline stage parameters,
-restricting the <<synchronization-dependencies-scopes, synchronization
-scopes>> for that command to just those stages.
-This allows fine grained control over the exact execution dependencies and
-accesses performed by action commands.
-Implementations should: use these pipeline stages to avoid unnecessary
-stalls or cache flushing.
-
-ifdef::VK_KHR_synchronization2[]
-[open,refpage='VkPipelineStageFlagBits2KHR',desc='Pipeline stage flags for VkPipelineStageFlags2KHR',type='enums']
---
-Bits which can: be set in a tlink:VkPipelineStageFlags2KHR mask, specifying
-stages of execution, are:
-
-ifdef::editing-notes[]
-[NOTE]
-.editing-note
-====
-The many places pipeline stage flags are used are not currently listed here.
-====
-endif::editing-notes[]
-
-include::{generated}/api/enums/VkPipelineStageFlagBits2KHR.txt[]
-
-  * ename:VK_PIPELINE_STAGE_2_NONE_KHR specifies no stages of execution.
-  * ename:VK_PIPELINE_STAGE_2_DRAW_INDIRECT_BIT_KHR specifies the stage of
-    the pipeline where indirect command parameters are consumed.
-ifdef::VK_NV_device_generated_commands[]
-    This stage also includes reading commands written by
-    flink:vkCmdPreprocessGeneratedCommandsNV.
-endif::VK_NV_device_generated_commands[]
-ifdef::VK_NV_mesh_shader[]
-  * ename:VK_PIPELINE_STAGE_2_TASK_SHADER_BIT_NV specifies the task shader
-    stage.
-  * ename:VK_PIPELINE_STAGE_2_MESH_SHADER_BIT_NV specifies the mesh shader
-    stage.
-endif::VK_NV_mesh_shader[]
-  * ename:VK_PIPELINE_STAGE_2_INDEX_INPUT_BIT_KHR specifies the stage of the
-    pipeline where index buffers are consumed.
-  * ename:VK_PIPELINE_STAGE_2_VERTEX_ATTRIBUTE_INPUT_BIT_KHR specifies the
-    stage of the pipeline where vertex buffers are consumed.
-  * ename:VK_PIPELINE_STAGE_2_VERTEX_INPUT_BIT_KHR is equivalent to the
-    logical OR of:
-  ** ename:VK_PIPELINE_STAGE_2_INDEX_INPUT_BIT_KHR
-  ** ename:VK_PIPELINE_STAGE_2_VERTEX_ATTRIBUTE_INPUT_BIT_KHR
-  * ename:VK_PIPELINE_STAGE_2_VERTEX_SHADER_BIT_KHR specifies the vertex
-    shader stage.
-  * ename:VK_PIPELINE_STAGE_2_TESSELLATION_CONTROL_SHADER_BIT_KHR specifies
-    the tessellation control shader stage.
-  * ename:VK_PIPELINE_STAGE_2_TESSELLATION_EVALUATION_SHADER_BIT_KHR
-    specifies the tessellation evaluation shader stage.
-  * ename:VK_PIPELINE_STAGE_2_GEOMETRY_SHADER_BIT_KHR specifies the geometry
-    shader stage.
-  * ename:VK_PIPELINE_STAGE_2_PRE_RASTERIZATION_SHADERS_BIT_KHR is
-    equivalent to specifying all supported
-    <<pipeline-graphics-subsets-pre-rasterization,pre-rasterization shader
-    stages>>:
-  ** ename:VK_PIPELINE_STAGE_2_VERTEX_SHADER_BIT_KHR
-  ** ename:VK_PIPELINE_STAGE_2_TESSELLATION_CONTROL_SHADER_BIT_KHR
-  ** ename:VK_PIPELINE_STAGE_2_TESSELLATION_EVALUATION_SHADER_BIT_KHR
-  ** ename:VK_PIPELINE_STAGE_2_GEOMETRY_SHADER_BIT_KHR
-ifdef::VK_NV_mesh_shader[]
-  ** ename:VK_PIPELINE_STAGE_2_TASK_SHADER_BIT_NV
-  ** ename:VK_PIPELINE_STAGE_2_MESH_SHADER_BIT_NV
-endif::VK_NV_mesh_shader[]
-  * ename:VK_PIPELINE_STAGE_2_FRAGMENT_SHADER_BIT_KHR specifies the fragment
-    shader stage.
-  * ename:VK_PIPELINE_STAGE_2_EARLY_FRAGMENT_TESTS_BIT_KHR specifies the
-    stage of the pipeline where early fragment tests (depth and stencil
-    tests before fragment shading) are performed.
-    This stage also includes <<renderpass-load-store-ops, subpass load
-    operations>> for framebuffer attachments with a depth/stencil format.
-  * ename:VK_PIPELINE_STAGE_2_LATE_FRAGMENT_TESTS_BIT_KHR specifies the
-    stage of the pipeline where late fragment tests (depth and stencil tests
-    after fragment shading) are performed.
-    This stage also includes <<renderpass-load-store-ops, subpass store
-    operations>> for framebuffer attachments with a depth/stencil format.
-  * ename:VK_PIPELINE_STAGE_2_COLOR_ATTACHMENT_OUTPUT_BIT_KHR specifies the
-    stage of the pipeline after blending where the final color values are
-    output from the pipeline.
-    This stage also includes <<renderpass-load-store-ops, subpass load and
-    store operations>> and multisample resolve operations for framebuffer
-    attachments with a color
-ifdef::VK_VERSION_1_2,VK_KHR_depth_stencil_resolve[]
-    or depth/stencil
-endif::VK_VERSION_1_2,VK_KHR_depth_stencil_resolve[]
-    format.
-  * ename:VK_PIPELINE_STAGE_2_COMPUTE_SHADER_BIT_KHR specifies the compute
-    shader stage.
-  * ename:VK_PIPELINE_STAGE_2_HOST_BIT_KHR specifies a pseudo-stage
-    indicating execution on the host of reads/writes of device memory.
-    This stage is not invoked by any commands recorded in a command buffer.
-  * ename:VK_PIPELINE_STAGE_2_COPY_BIT_KHR specifies the execution of all
-    <<copies,copy commands>>, including flink:vkCmdCopyQueryPoolResults.
-  * ename:VK_PIPELINE_STAGE_2_BLIT_BIT_KHR specifies the execution of
-    flink:vkCmdBlitImage.
-  * ename:VK_PIPELINE_STAGE_2_RESOLVE_BIT_KHR specifies the execution of
-    flink:vkCmdResolveImage.
-  * ename:VK_PIPELINE_STAGE_2_CLEAR_BIT_KHR specifies the execution of
-    <<clears,clear commands>>, with the exception of
-    flink:vkCmdClearAttachments.
-  * ename:VK_PIPELINE_STAGE_2_ALL_TRANSFER_BIT_KHR is equivalent to
-    specifying all of:
-  ** ename:VK_PIPELINE_STAGE_2_COPY_BIT_KHR
-  ** ename:VK_PIPELINE_STAGE_2_BLIT_BIT_KHR
-  ** ename:VK_PIPELINE_STAGE_2_RESOLVE_BIT_KHR
-  ** ename:VK_PIPELINE_STAGE_2_CLEAR_BIT_KHR
-ifdef::VK_KHR_ray_tracing_pipeline,VK_NV_ray_tracing[]
-  * ename:VK_PIPELINE_STAGE_2_RAY_TRACING_SHADER_BIT_KHR specifies the
-    execution of the ray tracing shader stages.
-endif::VK_KHR_ray_tracing_pipeline,VK_NV_ray_tracing[]
-ifdef::VK_KHR_acceleration_structure,VK_NV_ray_tracing[]
-  * ename:VK_PIPELINE_STAGE_2_ACCELERATION_STRUCTURE_BUILD_BIT_KHR specifies
-    the execution of <<acceleration-structure, acceleration structure
-    commands>>.
-endif::VK_KHR_acceleration_structure,VK_NV_ray_tracing[]
-  * ename:VK_PIPELINE_STAGE_2_ALL_GRAPHICS_BIT_KHR specifies the execution
-    of all graphics pipeline stages, and is equivalent to the logical OR of:
-  ** ename:VK_PIPELINE_STAGE_2_DRAW_INDIRECT_BIT_KHR
-ifdef::VK_NV_mesh_shader[]
-  ** ename:VK_PIPELINE_STAGE_2_TASK_SHADER_BIT_NV
-  ** ename:VK_PIPELINE_STAGE_2_MESH_SHADER_BIT_NV
-endif::VK_NV_mesh_shader[]
-  ** ename:VK_PIPELINE_STAGE_2_VERTEX_INPUT_BIT_KHR
-  ** ename:VK_PIPELINE_STAGE_2_VERTEX_SHADER_BIT_KHR
-  ** ename:VK_PIPELINE_STAGE_2_TESSELLATION_CONTROL_SHADER_BIT_KHR
-  ** ename:VK_PIPELINE_STAGE_2_TESSELLATION_EVALUATION_SHADER_BIT_KHR
-  ** ename:VK_PIPELINE_STAGE_2_GEOMETRY_SHADER_BIT_KHR
-  ** ename:VK_PIPELINE_STAGE_2_FRAGMENT_SHADER_BIT_KHR
-  ** ename:VK_PIPELINE_STAGE_2_EARLY_FRAGMENT_TESTS_BIT_KHR
-  ** ename:VK_PIPELINE_STAGE_2_LATE_FRAGMENT_TESTS_BIT_KHR
-  ** ename:VK_PIPELINE_STAGE_2_COLOR_ATTACHMENT_OUTPUT_BIT_KHR
-ifdef::VK_EXT_conditional_rendering[]
-  ** ename:VK_PIPELINE_STAGE_2_CONDITIONAL_RENDERING_BIT_EXT
-endif::VK_EXT_conditional_rendering[]
-ifdef::VK_EXT_transform_feedback[]
-  ** ename:VK_PIPELINE_STAGE_2_TRANSFORM_FEEDBACK_BIT_EXT
-endif::VK_EXT_transform_feedback[]
-ifdef::VK_NV_shading_rate_image[]
-  ** ename:VK_PIPELINE_STAGE_2_SHADING_RATE_IMAGE_BIT_NV
-endif::VK_NV_shading_rate_image[]
-ifdef::VK_EXT_fragment_density_map[]
-  ** ename:VK_PIPELINE_STAGE_2_FRAGMENT_DENSITY_PROCESS_BIT_EXT
-endif::VK_EXT_fragment_density_map[]
-ifdef::VK_HUAWEI_invocation_mask[]
-  ** ename:VK_PIPELINE_STAGE_2_INVOCATION_MASK_BIT_HUAWEI
-endif::VK_HUAWEI_invocation_mask[]
-  * ename:VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT_KHR specifies all operations
-    performed by all commands supported on the queue it is used with.
-ifdef::VK_EXT_conditional_rendering[]
-  * ename:VK_PIPELINE_STAGE_2_CONDITIONAL_RENDERING_BIT_EXT specifies the
-    stage of the pipeline where the predicate of conditional rendering is
-    consumed.
-endif::VK_EXT_conditional_rendering[]
-ifdef::VK_EXT_transform_feedback[]
-  * ename:VK_PIPELINE_STAGE_2_TRANSFORM_FEEDBACK_BIT_EXT specifies the stage
-    of the pipeline where vertex attribute output values are written to the
-    transform feedback buffers.
-endif::VK_EXT_transform_feedback[]
-ifdef::VK_NV_device_generated_commands[]
-  * ename:VK_PIPELINE_STAGE_2_COMMAND_PREPROCESS_BIT_NV specifies the stage
-    of the pipeline where device-side generation of commands via
-    flink:vkCmdPreprocessGeneratedCommandsNV is handled.
-endif::VK_NV_device_generated_commands[]
-ifdef::VK_KHR_fragment_shading_rate,VK_NV_shading_rate_image[]
-  * ename:VK_PIPELINE_STAGE_2_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR
-    specifies the stage of the pipeline where the
-ifdef::VK_KHR_fragment_shading_rate[]
-    <<primsrast-fragment-shading-rate-attachment, fragment shading rate
-    attachment>>
-endif::VK_KHR_fragment_shading_rate[]
-ifdef::VK_KHR_fragment_shading_rate+VK_NV_shading_rate_image[or]
-ifdef::VK_NV_shading_rate_image[]
-    <<primsrast-shading-rate-image, shading rate image>>
-endif::VK_NV_shading_rate_image[]
-    is read to determine the fragment shading rate for portions of a
-    rasterized primitive.
-endif::VK_KHR_fragment_shading_rate,VK_NV_shading_rate_image[]
-ifdef::VK_EXT_fragment_density_map[]
-  * ename:VK_PIPELINE_STAGE_2_FRAGMENT_DENSITY_PROCESS_BIT_EXT specifies the
-    stage of the pipeline where the fragment density map is read to
-    <<fragmentdensitymapops,generate the fragment areas>>.
-endif::VK_EXT_fragment_density_map[]
-ifdef::VK_HUAWEI_invocation_mask[]
-  * ename:VK_PIPELINE_STAGE_2_INVOCATION_MASK_BIT_HUAWEI specifies the stage
-    of the pipeline where the invocation mask image is read by the
-    implementation to optimize the ray dispatch.
-endif::VK_HUAWEI_invocation_mask[]
-ifdef::VK_KHR_video_decode_queue[]
-  * ename:VK_PIPELINE_STAGE_2_VIDEO_DECODE_BIT_KHR specifies the stage of
-    the pipeline where <<video-decode-operations, video decode operation>>
-    are performed.
-endif::VK_KHR_video_decode_queue[]
-ifdef::VK_KHR_video_encode_queue[]
-  * ename:VK_PIPELINE_STAGE_2_VIDEO_ENCODE_BIT_KHR specifies the stage of
-    the pipeline where <<video-encode-operations, video encode operation>>
-    are performed.
-endif::VK_KHR_video_encode_queue[]
-ifdef::VK_HUAWEI_subpass_shading[]
-  * ename:VK_PIPELINE_STAGE_2_SUBPASS_SHADING_BIT_HUAWEI specifies the
-    subpass shading shader stage.
-endif::VK_HUAWEI_subpass_shading[]
-  * ename:VK_PIPELINE_STAGE_2_TOP_OF_PIPE_BIT_KHR is equivalent to
-    ename:VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT_KHR with
-    tlink:VkAccessFlags2KHR set to `0` when specified in the second
-    synchronization scope, but equivalent to
-    ename:VK_PIPELINE_STAGE_2_NONE_KHR in the first scope.
-  * ename:VK_PIPELINE_STAGE_2_BOTTOM_OF_PIPE_BIT_KHR is equivalent to
-    ename:VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT_KHR with
-    tlink:VkAccessFlags2KHR set to `0` when specified in the first
-    synchronization scope, but equivalent to
-    ename:VK_PIPELINE_STAGE_2_NONE_KHR in the second scope.
-
-[NOTE]
-.Note
-====
-The etext:TOP and etext:BOTTOM pipeline stages are deprecated, and
-applications should prefer ename:VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT_KHR
-and ename:VK_PIPELINE_STAGE_2_NONE_KHR.
-====
-
-[NOTE]
-.Note
-====
-The tname:VkPipelineStageFlags2KHR bitmask goes beyond the 31 individual bit
-flags allowable within a C99 enum, which is how
-elink:VkPipelineStageFlagBits is defined.
-The first 31 values are common to both, and are interchangeable.
-====
---
-
-[open,refpage='VkPipelineStageFlags2KHR',desc='64-bit mask of pipeline stage flags',type='flags']
---
-tname:VkPipelineStageFlags2KHR is a bitmask type for setting a mask of zero
-or more elink:VkPipelineStageFlagBits2KHR flags:
-
-include::{generated}/api/flags/VkPipelineStageFlags2KHR.txt[]
---
-endif::VK_KHR_synchronization2[]
-
-[open,refpage='VkPipelineStageFlagBits',desc='Bitmask specifying pipeline stages',type='enums']
---
-Bits which can: be set in a tlink:VkPipelineStageFlags mask, specifying
-stages of execution, are:
-
-include::{generated}/api/enums/VkPipelineStageFlagBits.txt[]
-
-ifdef::VK_KHR_synchronization2[]
-These values all have the same meaning as the equivalently named values for
-tlink:VkPipelineStageFlags2KHR.
-endif::VK_KHR_synchronization2[]
-
-  * ename:VK_PIPELINE_STAGE_NONE_KHR specifies no stages of execution.
-  * ename:VK_PIPELINE_STAGE_DRAW_INDIRECT_BIT specifies the stage of the
-    pipeline where stext:VkDrawIndirect* / stext:VkDispatchIndirect* /
-    stext:VkTraceRaysIndirect* data structures are consumed.
-ifdef::VK_NV_device_generated_commands[]
-    This stage also includes reading commands written by
-    flink:vkCmdExecuteGeneratedCommandsNV.
-endif::VK_NV_device_generated_commands[]
-ifdef::VK_NV_mesh_shader[]
-  * ename:VK_PIPELINE_STAGE_TASK_SHADER_BIT_NV specifies the task shader
-    stage.
-  * ename:VK_PIPELINE_STAGE_MESH_SHADER_BIT_NV specifies the mesh shader
-    stage.
-endif::VK_NV_mesh_shader[]
-  * ename:VK_PIPELINE_STAGE_VERTEX_INPUT_BIT specifies the stage of the
-    pipeline where vertex and index buffers are consumed.
-  * ename:VK_PIPELINE_STAGE_VERTEX_SHADER_BIT specifies the vertex shader
-    stage.
-  * ename:VK_PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT specifies the
-    tessellation control shader stage.
-  * ename:VK_PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT specifies the
-    tessellation evaluation shader stage.
-  * ename:VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT specifies the geometry
-    shader stage.
-  * ename:VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT specifies the fragment
-    shader stage.
-  * ename:VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT specifies the stage of
-    the pipeline where early fragment tests (depth and stencil tests before
-    fragment shading) are performed.
-    This stage also includes <<renderpass-load-store-ops, subpass load
-    operations>> for framebuffer attachments with a depth/stencil format.
-  * ename:VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT specifies the stage of
-    the pipeline where late fragment tests (depth and stencil tests after
-    fragment shading) are performed.
-    This stage also includes <<renderpass-load-store-ops, subpass store
-    operations>> for framebuffer attachments with a depth/stencil format.
-  * ename:VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT specifies the stage
-    of the pipeline after blending where the final color values are output
-    from the pipeline.
-    This stage also includes <<renderpass-load-store-ops, subpass load and
-    store operations>> and multisample resolve operations for framebuffer
-    attachments with a color
-ifdef::VK_VERSION_1_2,VK_KHR_depth_stencil_resolve[]
-    or depth/stencil
-endif::VK_VERSION_1_2,VK_KHR_depth_stencil_resolve[]
-    format.
-  * ename:VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT specifies the execution of a
-    compute shader.
-  * [[synchronization-pipeline-stages-transfer]]
-    ename:VK_PIPELINE_STAGE_TRANSFER_BIT specifies the following commands:
-  ** All <<copies,copy commands>>, including flink:vkCmdCopyQueryPoolResults
-ifndef::VK_KHR_copy_commands2[]
-  ** flink:vkCmdBlitImage
-  ** flink:vkCmdResolveImage
-endif::VK_KHR_copy_commands2[]
-ifdef::VK_KHR_copy_commands2[]
-  ** flink:vkCmdBlitImage2KHR and flink:vkCmdBlitImage
-  ** flink:vkCmdResolveImage2KHR and flink:vkCmdResolveImage
-endif::VK_KHR_copy_commands2[]
-  ** All <<clears,clear commands>>, with the exception of
-     flink:vkCmdClearAttachments
-  * ename:VK_PIPELINE_STAGE_HOST_BIT specifies a pseudo-stage indicating
-    execution on the host of reads/writes of device memory.
-    This stage is not invoked by any commands recorded in a command buffer.
-ifdef::VK_NV_ray_tracing,VK_KHR_acceleration_structure[]
-  * ename:VK_PIPELINE_STAGE_ACCELERATION_STRUCTURE_BUILD_BIT_KHR specifies
-    the execution of
-ifdef::VK_NV_ray_tracing[]
-    flink:vkCmdBuildAccelerationStructureNV,
-    flink:vkCmdCopyAccelerationStructureNV,
-    flink:vkCmdWriteAccelerationStructuresPropertiesNV
-endif::VK_NV_ray_tracing[]
-ifdef::VK_NV_ray_tracing+VK_KHR_acceleration_structure[,]
-ifdef::VK_KHR_acceleration_structure[]
-    flink:vkCmdBuildAccelerationStructuresKHR,
-    flink:vkCmdBuildAccelerationStructuresIndirectKHR,
-    flink:vkCmdCopyAccelerationStructureKHR,
-    flink:vkCmdCopyAccelerationStructureToMemoryKHR,
-    flink:vkCmdCopyMemoryToAccelerationStructureKHR, and
-    flink:vkCmdWriteAccelerationStructuresPropertiesKHR.
-endif::VK_KHR_acceleration_structure[]
-endif::VK_NV_ray_tracing,VK_KHR_acceleration_structure[]
-ifdef::VK_NV_ray_tracing,VK_KHR_ray_tracing_pipeline[]
-  * ename:VK_PIPELINE_STAGE_RAY_TRACING_SHADER_BIT_KHR specifies the
-    execution of the ray tracing shader stages, via
-ifdef::VK_NV_ray_tracing[flink:vkCmdTraceRaysNV]
-ifdef::VK_NV_ray_tracing+VK_KHR_ray_tracing_pipeline[,]
-ifdef::VK_KHR_ray_tracing_pipeline[flink:vkCmdTraceRaysKHR, or flink:vkCmdTraceRaysIndirectKHR]
-endif::VK_NV_ray_tracing,VK_KHR_ray_tracing_pipeline[]
-  * ename:VK_PIPELINE_STAGE_ALL_GRAPHICS_BIT specifies the execution of all
-    graphics pipeline stages, and is equivalent to the logical OR of:
-  ** ename:VK_PIPELINE_STAGE_DRAW_INDIRECT_BIT
-ifdef::VK_NV_mesh_shader[]
-  ** ename:VK_PIPELINE_STAGE_TASK_SHADER_BIT_NV
-  ** ename:VK_PIPELINE_STAGE_MESH_SHADER_BIT_NV
-endif::VK_NV_mesh_shader[]
-  ** ename:VK_PIPELINE_STAGE_VERTEX_INPUT_BIT
-  ** ename:VK_PIPELINE_STAGE_VERTEX_SHADER_BIT
-  ** ename:VK_PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT
-  ** ename:VK_PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT
-  ** ename:VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT
-  ** ename:VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT
-  ** ename:VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT
-  ** ename:VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT
-  ** ename:VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT
-ifdef::VK_EXT_conditional_rendering[]
-  ** ename:VK_PIPELINE_STAGE_CONDITIONAL_RENDERING_BIT_EXT
-endif::VK_EXT_conditional_rendering[]
-ifdef::VK_EXT_transform_feedback[]
-  ** ename:VK_PIPELINE_STAGE_TRANSFORM_FEEDBACK_BIT_EXT
-endif::VK_EXT_transform_feedback[]
-ifdef::VK_KHR_fragment_shading_rate,VK_NV_shading_rate_image[]
-  ** ename:VK_PIPELINE_STAGE_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR
-endif::VK_KHR_fragment_shading_rate,VK_NV_shading_rate_image[]
-ifdef::VK_EXT_fragment_density_map[]
-  ** ename:VK_PIPELINE_STAGE_FRAGMENT_DENSITY_PROCESS_BIT_EXT
-endif::VK_EXT_fragment_density_map[]
-  * ename:VK_PIPELINE_STAGE_ALL_COMMANDS_BIT specifies all operations
-    performed by all commands supported on the queue it is used with.
-ifdef::VK_EXT_conditional_rendering[]
-  * ename:VK_PIPELINE_STAGE_CONDITIONAL_RENDERING_BIT_EXT specifies the
-    stage of the pipeline where the predicate of conditional rendering is
-    consumed.
-endif::VK_EXT_conditional_rendering[]
-ifdef::VK_EXT_transform_feedback[]
-  * ename:VK_PIPELINE_STAGE_TRANSFORM_FEEDBACK_BIT_EXT specifies the stage
-    of the pipeline where vertex attribute output values are written to the
-    transform feedback buffers.
-endif::VK_EXT_transform_feedback[]
-ifdef::VK_NV_device_generated_commands[]
-  * ename:VK_PIPELINE_STAGE_COMMAND_PREPROCESS_BIT_NV specifies the stage of
-    the pipeline where device-side preprocessing for generated commands via
-    flink:vkCmdPreprocessGeneratedCommandsNV is handled.
-endif::VK_NV_device_generated_commands[]
-ifdef::VK_KHR_fragment_shading_rate,VK_NV_shading_rate_image[]
-  * ename:VK_PIPELINE_STAGE_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR
-    specifies the stage of the pipeline where the
-ifdef::VK_KHR_fragment_shading_rate[]
-    <<primsrast-fragment-shading-rate-attachment, fragment shading rate
-    attachment>>
-endif::VK_KHR_fragment_shading_rate[]
-ifdef::VK_KHR_fragment_shading_rate+VK_NV_shading_rate_image[or]
-ifdef::VK_NV_shading_rate_image[]
-    <<primsrast-shading-rate-image, shading rate image>>
-endif::VK_NV_shading_rate_image[]
-    is read to determine the fragment shading rate for portions of a
-    rasterized primitive.
-endif::VK_KHR_fragment_shading_rate,VK_NV_shading_rate_image[]
-ifdef::VK_EXT_fragment_density_map[]
-  * ename:VK_PIPELINE_STAGE_FRAGMENT_DENSITY_PROCESS_BIT_EXT specifies the
-    stage of the pipeline where the fragment density map is read to
-    <<fragmentdensitymapops,generate the fragment areas>>.
-endif::VK_EXT_fragment_density_map[]
-  * ename:VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT is equivalent to
-    ename:VK_PIPELINE_STAGE_ALL_COMMANDS_BIT with tlink:VkAccessFlags set to
-    `0` when specified in the second synchronization scope, but specifies no
-    stage of execution when specified in the first scope.
-  * ename:VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT is equivalent to
-    ename:VK_PIPELINE_STAGE_ALL_COMMANDS_BIT with tlink:VkAccessFlags set to
-    `0` when specified in the first synchronization scope, but specifies no
-    stage of execution when specified in the second scope.
---
-
-[open,refpage='VkPipelineStageFlags',desc='Bitmask of VkPipelineStageFlagBits',type='flags']
---
-include::{generated}/api/flags/VkPipelineStageFlags.txt[]
-
-tname:VkPipelineStageFlags is a bitmask type for setting a mask of zero or
-more elink:VkPipelineStageFlagBits.
---
-
-[[synchronization-pipeline-stages-masks]]
-If a synchronization command includes a source stage mask, its first
-<<synchronization-dependencies-scopes, synchronization scope>> only includes
-execution of the pipeline stages specified in that mask, and its first
-<<synchronization-dependencies-access-scopes, access scope>> only includes
-memory accesses performed by pipeline stages specified in that mask.
-
-If a synchronization command includes a destination stage mask, its second
-<<synchronization-dependencies-scopes, synchronization scope>> only includes
-execution of the pipeline stages specified in that mask, and its second
-<<synchronization-dependencies-access-scopes, access scope>> only includes
-memory access performed by pipeline stages specified in that mask.
-
-[NOTE]
-.Note
-====
-Including a particular pipeline stage in the first
-<<synchronization-dependencies-scopes, synchronization scope>> of a command
-implicitly includes <<synchronization-pipeline-stages-order, logically
-earlier>> pipeline stages in the synchronization scope.
-Similarly, the second <<synchronization-dependencies-scopes, synchronization
-scope>> includes <<synchronization-pipeline-stages-order, logically later>>
-pipeline stages.
-
-However, note that <<synchronization-dependencies-access-scopes, access
-scopes>> are not affected in this way - only the precise stages specified
-are considered part of each access scope.
-====
-
-Certain pipeline stages are only available on queues that support a
-particular set of operations.
-The following table lists, for each pipeline stage flag, which queue
-capability flag must: be supported by the queue.
-When multiple flags are enumerated in the second column of the table, it
-means that the pipeline stage is supported on the queue if it supports any
-of the listed capability flags.
-For further details on queue capabilities see
-<<devsandqueues-physical-device-enumeration,Physical Device Enumeration>>
-and <<devsandqueues-queues,Queues>>.
-
-[[synchronization-pipeline-stages-supported]]
-.Supported pipeline stage flags
-[cols="60%,40%",options="header"]
-|====
-|Pipeline stage flag                                          | Required queue capability flag
-|ename:VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT                      | None required
-|ename:VK_PIPELINE_STAGE_DRAW_INDIRECT_BIT                    | ename:VK_QUEUE_GRAPHICS_BIT or ename:VK_QUEUE_COMPUTE_BIT
-|ename:VK_PIPELINE_STAGE_VERTEX_INPUT_BIT                     | ename:VK_QUEUE_GRAPHICS_BIT
-|ename:VK_PIPELINE_STAGE_VERTEX_SHADER_BIT                    | ename:VK_QUEUE_GRAPHICS_BIT
-|ename:VK_PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT      | ename:VK_QUEUE_GRAPHICS_BIT
-|ename:VK_PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT   | ename:VK_QUEUE_GRAPHICS_BIT
-|ename:VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT                  | ename:VK_QUEUE_GRAPHICS_BIT
-|ename:VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT                  | ename:VK_QUEUE_GRAPHICS_BIT
-|ename:VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT             | ename:VK_QUEUE_GRAPHICS_BIT
-|ename:VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT              | ename:VK_QUEUE_GRAPHICS_BIT
-|ename:VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT          | ename:VK_QUEUE_GRAPHICS_BIT
-|ename:VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT                   | ename:VK_QUEUE_COMPUTE_BIT
-|ename:VK_PIPELINE_STAGE_TRANSFER_BIT                         | ename:VK_QUEUE_GRAPHICS_BIT, ename:VK_QUEUE_COMPUTE_BIT or ename:VK_QUEUE_TRANSFER_BIT
-|ename:VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT                   | None required
-|ename:VK_PIPELINE_STAGE_HOST_BIT                             | None required
-|ename:VK_PIPELINE_STAGE_ALL_GRAPHICS_BIT                     | ename:VK_QUEUE_GRAPHICS_BIT
-|ename:VK_PIPELINE_STAGE_ALL_COMMANDS_BIT                     | None required
-ifdef::VK_EXT_conditional_rendering[]
-|ename:VK_PIPELINE_STAGE_CONDITIONAL_RENDERING_BIT_EXT        | ename:VK_QUEUE_GRAPHICS_BIT or ename:VK_QUEUE_COMPUTE_BIT
-endif::VK_EXT_conditional_rendering[]
-ifdef::VK_EXT_transform_feedback[]
-|ename:VK_PIPELINE_STAGE_TRANSFORM_FEEDBACK_BIT_EXT           | ename:VK_QUEUE_GRAPHICS_BIT
-endif::VK_EXT_transform_feedback[]
-ifdef::VK_NV_device_generated_commands[]
-|ename:VK_PIPELINE_STAGE_COMMAND_PREPROCESS_BIT_NV            | ename:VK_QUEUE_GRAPHICS_BIT or ename:VK_QUEUE_COMPUTE_BIT
-endif::VK_NV_device_generated_commands[]
-ifdef::VK_KHR_fragment_shading_rate,VK_NV_shading_rate_image[]
-|ename:VK_PIPELINE_STAGE_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR | ename:VK_QUEUE_GRAPHICS_BIT
-endif::VK_KHR_fragment_shading_rate,VK_NV_shading_rate_image[]
-ifdef::VK_NV_mesh_shader[]
-|ename:VK_PIPELINE_STAGE_TASK_SHADER_BIT_NV                   | ename:VK_QUEUE_GRAPHICS_BIT
-|ename:VK_PIPELINE_STAGE_MESH_SHADER_BIT_NV                   | ename:VK_QUEUE_GRAPHICS_BIT
-endif::VK_NV_mesh_shader[]
-ifdef::VK_NV_ray_tracing,VK_KHR_acceleration_structure[]
-|ename:VK_PIPELINE_STAGE_ACCELERATION_STRUCTURE_BUILD_BIT_KHR | ename:VK_QUEUE_COMPUTE_BIT
-endif::VK_NV_ray_tracing,VK_KHR_acceleration_structure[]
-ifdef::VK_NV_ray_tracing,VK_KHR_ray_tracing_pipeline[]
-|ename:VK_PIPELINE_STAGE_RAY_TRACING_SHADER_BIT_KHR           | ename:VK_QUEUE_COMPUTE_BIT
-endif::VK_NV_ray_tracing,VK_KHR_ray_tracing_pipeline[]
-ifdef::VK_EXT_fragment_density_map[]
-|ename:VK_PIPELINE_STAGE_FRAGMENT_DENSITY_PROCESS_BIT_EXT     | ename:VK_QUEUE_GRAPHICS_BIT
-endif::VK_EXT_fragment_density_map[]
-ifdef::VK_HUAWEI_subpass_shading[]
-|ename:VK_PIPELINE_STAGE_2_SUBPASS_SHADING_BIT_HUAWEI         | ename:VK_QUEUE_GRAPHICS_BIT
-endif::VK_HUAWEI_subpass_shading[]
-|====
-
-[[synchronization-pipeline-stages-order]]
-Pipeline stages that execute as a result of a command logically complete
-execution in a specific order, such that completion of a logically later
-pipeline stage must: not happen-before completion of a logically earlier
-stage.
-This means that including any stage in the source stage mask for a
-particular synchronization command also implies that any logically earlier
-stages are included in *A~S~* for that command.
-
-Similarly, initiation of a logically earlier pipeline stage must: not
-happen-after initiation of a logically later pipeline stage.
-Including any given stage in the destination stage mask for a particular
-synchronization command also implies that any logically later stages are
-included in *B~S~* for that command.
-
-[NOTE]
-.Note
-====
-Implementations may: not support synchronization at every pipeline stage for
-every synchronization operation.
-If a pipeline stage that an implementation does not support synchronization
-for appears in a source stage mask, it may: substitute any logically later
-stage in its place for the first synchronization scope.
-If a pipeline stage that an implementation does not support synchronization
-for appears in a destination stage mask, it may: substitute any logically
-earlier stage in its place for the second synchronization scope.
-
-For example, if an implementation is unable to signal an event immediately
-after vertex shader execution is complete, it may: instead signal the event
-after color attachment output has completed.
-
-If an implementation makes such a substitution, it must: not affect the
-semantics of execution or memory dependencies or image and buffer memory
-barriers.
-====
-
-[[synchronization-pipeline-stages-types]][[synchronization-pipeline-graphics]]
-<<pipelines-graphics, Graphics pipelines>> are executable on queues
-supporting ename:VK_QUEUE_GRAPHICS_BIT.
-Stages executed by graphics pipelines can: only be specified in commands
-recorded for queues supporting ename:VK_QUEUE_GRAPHICS_BIT.
-
-The graphics
-ifdef::VK_NV_mesh_shader[]
-primitive
-endif::VK_NV_mesh_shader[]
-pipeline executes the following stages, with the logical ordering of the
-stages matching the order specified here:
-
-  * ename:VK_PIPELINE_STAGE_DRAW_INDIRECT_BIT
-ifdef::VK_KHR_synchronization2[]
-  * ename:VK_PIPELINE_STAGE_2_INDEX_INPUT_BIT_KHR
-  * ename:VK_PIPELINE_STAGE_2_VERTEX_ATTRIBUTE_INPUT_BIT_KHR
-endif::VK_KHR_synchronization2[]
-ifndef::VK_KHR_synchronization2[]
-  * ename:VK_PIPELINE_STAGE_VERTEX_INPUT_BIT
-endif::VK_KHR_synchronization2[]
-  * ename:VK_PIPELINE_STAGE_VERTEX_SHADER_BIT
-  * ename:VK_PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT
-  * ename:VK_PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT
-  * ename:VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT
-ifdef::VK_EXT_transform_feedback[]
-  * ename:VK_PIPELINE_STAGE_TRANSFORM_FEEDBACK_BIT_EXT
-endif::VK_EXT_transform_feedback[]
-ifdef::VK_KHR_fragment_shading_rate,VK_NV_shading_rate_image[]
-  * ename:VK_PIPELINE_STAGE_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR
-endif::VK_KHR_fragment_shading_rate,VK_NV_shading_rate_image[]
-  * ename:VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT
-  * ename:VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT
-  * ename:VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT
-  * ename:VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT
-
-ifdef::VK_NV_mesh_shader[]
-The graphics mesh pipeline executes the following stages, with the logical
-ordering of the stages matching the order specified here:
-
-  * ename:VK_PIPELINE_STAGE_DRAW_INDIRECT_BIT
-  * ename:VK_PIPELINE_STAGE_TASK_SHADER_BIT_NV
-  * ename:VK_PIPELINE_STAGE_MESH_SHADER_BIT_NV
-ifdef::VK_KHR_fragment_shading_rate,VK_NV_shading_rate_image[]
-  * ename:VK_PIPELINE_STAGE_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR
-endif::VK_KHR_fragment_shading_rate,VK_NV_shading_rate_image[]
-  * ename:VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT
-  * ename:VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT
-  * ename:VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT
-  * ename:VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT
-endif::VK_NV_mesh_shader[]
-
-For the compute pipeline, the following stages occur in this order:
-
-  * ename:VK_PIPELINE_STAGE_DRAW_INDIRECT_BIT
-  * ename:VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT
-
-ifdef::VK_HUAWEI_subpass_shading[]
-For the subpass shading pipeline, the following stages occur in this order:
-
-  * ename:VK_PIPELINE_STAGE_2_SUBPASS_SHADING_BIT_HUAWEI
-endif::VK_HUAWEI_subpass_shading[]
-
-ifdef::VK_EXT_fragment_density_map[]
-For graphics pipeline commands executing in a render pass with a fragment
-density map attachment, the following pipeline stage where the fragment
-density map read happens has no particular order relative to the other
-stages, except that it is logically earlier than
-ename:VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT:
-
-  * ename:VK_PIPELINE_STAGE_FRAGMENT_DENSITY_PROCESS_BIT_EXT
-  * ename:VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT
-endif::VK_EXT_fragment_density_map[]
-
-ifdef::VK_EXT_conditional_rendering[]
-The conditional rendering stage is formally part of both the graphics, and
-the compute pipeline.
-The pipeline stage where the predicate read happens has unspecified order
-relative to other stages of these pipelines:
-
-  * ename:VK_PIPELINE_STAGE_CONDITIONAL_RENDERING_BIT_EXT
-endif::VK_EXT_conditional_rendering[]
-
-For the transfer pipeline, the following stages occur in this order:
-
-  * ename:VK_PIPELINE_STAGE_TRANSFER_BIT
-
-For host operations, only one pipeline stage occurs, so no order is
-guaranteed:
-
-  * ename:VK_PIPELINE_STAGE_HOST_BIT
-
-ifdef::VK_NV_device_generated_commands[]
-For the command preprocessing pipeline, the following stages occur in this
-order:
-
-  * ename:VK_PIPELINE_STAGE_COMMAND_PREPROCESS_BIT_NV
-endif::VK_NV_device_generated_commands[]
-
-ifdef::VK_NV_ray_tracing,VK_KHR_acceleration_structure[]
-For acceleration structure operations, only one pipeline stage occurs, so no
-order is guaranteed:
-
-  * ename:VK_PIPELINE_STAGE_ACCELERATION_STRUCTURE_BUILD_BIT_KHR
-
-endif::VK_NV_ray_tracing,VK_KHR_acceleration_structure[]
-
-ifdef::VK_NV_ray_tracing,VK_KHR_ray_tracing_pipeline[]
-For the ray tracing pipeline, the following stages occur in this order:
-
-  * ename:VK_PIPELINE_STAGE_DRAW_INDIRECT_BIT
-  * ename:VK_PIPELINE_STAGE_RAY_TRACING_SHADER_BIT_KHR
-
-endif::VK_NV_ray_tracing,VK_KHR_ray_tracing_pipeline[]
-
-
-[[synchronization-access-types]]
-=== Access Types
-
-Memory in Vulkan can: be accessed from within shader invocations and via
-some fixed-function stages of the pipeline.
-The _access type_ is a function of the <<descriptorsets, descriptor type>>
-used, or how a fixed-function stage accesses memory.
-
-[[synchronization-access-masks]]
-Some synchronization commands take sets of access types as parameters to
-define the <<synchronization-dependencies-access-scopes, access scopes>> of
-a memory dependency.
-If a synchronization command includes a _source access mask_, its first
-<<synchronization-dependencies-access-scopes, access scope>> only includes
-accesses via the access types specified in that mask.
-Similarly, if a synchronization command includes a _destination access
-mask_, its second <<synchronization-dependencies-access-scopes, access
-scope>> only includes accesses via the access types specified in that mask.
-
-ifdef::VK_KHR_synchronization2[]
-[open,refpage='VkAccessFlagBits2KHR',desc='Access flags for VkAccessFlags2KHR',type='enums']
---
-Bits which can: be set in the pname:srcAccessMask and pname:dstAccessMask
-members of slink:VkMemoryBarrier2KHR, slink:VkImageMemoryBarrier2KHR, and
-slink:VkBufferMemoryBarrier2KHR, specifying access behavior, are:
-
-include::{generated}/api/enums/VkAccessFlagBits2KHR.txt[]
-
-  * ename:VK_ACCESS_2_NONE_KHR specifies no accesses.
-  * ename:VK_ACCESS_2_MEMORY_READ_BIT_KHR specifies all read accesses.
-    It is always valid in any access mask, and is treated as equivalent to
-    setting all etext:READ access flags that are valid where it is used.
-  * ename:VK_ACCESS_2_MEMORY_WRITE_BIT_KHR specifies all write accesses.
-    It is always valid in any access mask, and is treated as equivalent to
-    setting all etext:WRITE access flags that are valid where it is used.
-  * ename:VK_ACCESS_2_INDIRECT_COMMAND_READ_BIT_KHR specifies read access to
-    command data read from indirect buffers as part of an indirect
-ifdef::VK_KHR_acceleration_structure[build,]
-ifdef::VK_KHR_ray_tracing_pipeline[trace,]
-    drawing or dispatch command.
-    Such access occurs in the
-    ename:VK_PIPELINE_STAGE_2_DRAW_INDIRECT_BIT_KHR pipeline stage.
-  * ename:VK_ACCESS_2_INDEX_READ_BIT_KHR specifies read access to an index
-    buffer as part of an indexed drawing command, bound by
-    flink:vkCmdBindIndexBuffer.
-    Such access occurs in the ename:VK_PIPELINE_STAGE_2_INDEX_INPUT_BIT_KHR
-    pipeline stage.
-  * ename:VK_ACCESS_2_VERTEX_ATTRIBUTE_READ_BIT_KHR specifies read access to
-    a vertex buffer as part of a drawing command, bound by
-    flink:vkCmdBindVertexBuffers.
-    Such access occurs in the
-    ename:VK_PIPELINE_STAGE_2_VERTEX_ATTRIBUTE_INPUT_BIT_KHR pipeline stage.
-  * ename:VK_ACCESS_2_UNIFORM_READ_BIT_KHR specifies read access to a
-    <<descriptorsets-uniformbuffer, uniform buffer>> in any shader pipeline
-    stage.
-  * ename:VK_ACCESS_2_INPUT_ATTACHMENT_READ_BIT_KHR specifies read access to
-    an <<renderpass, input attachment>> within a render pass during
-ifdef::VK_HUAWEI_subpass_shading[]
-    subpass shading or
-endif::VK_HUAWEI_subpass_shading[]
-    fragment shading.
-    Such access occurs in the
-ifdef::VK_HUAWEI_subpass_shading[]
-    ename:VK_PIPELINE_STAGE_2_SUBPASS_SHADING_BIT_HUAWEI or
-endif::VK_HUAWEI_subpass_shading[]
-    ename:VK_PIPELINE_STAGE_2_FRAGMENT_SHADER_BIT_KHR pipeline stage.
-  * ename:VK_ACCESS_2_SHADER_SAMPLED_READ_BIT_KHR specifies read access to a
-    <<descriptorsets-uniformtexelbuffer, uniform texel buffer>> or
-    <<descriptorsets-sampledimage, sampled image>> in any shader pipeline
-    stage.
-  * ename:VK_ACCESS_2_SHADER_STORAGE_READ_BIT_KHR specifies read access to a
-    <<descriptorsets-storagebuffer, storage buffer>>,
-ifdef::VK_VERSION_1_2,VK_EXT_buffer_device_address,VK_buffer_device_address[]
-    <<descriptorsets-physical-storage-buffer, physical storage buffer>>,
-endif::VK_VERSION_1_2,VK_EXT_buffer_device_address,VK_buffer_device_address[]
-    <<descriptorsets-storagetexelbuffer, storage texel buffer>>, or
-    <<descriptorsets-storageimage, storage image>> in any shader pipeline
-    stage.
-  * ename:VK_ACCESS_2_SHADER_READ_BIT_KHR
-ifdef::VK_NV_ray_tracing,VK_KHR_ray_tracing_pipeline[]
-    specifies read access to a <<shader-binding-table, shader binding
-    table>> in any shader pipeline.
-    In addition, it
-endif::VK_NV_ray_tracing,VK_KHR_ray_tracing_pipeline[]
-    is equivalent to the logical OR of:
-  ** ename:VK_ACCESS_2_UNIFORM_READ_BIT_KHR
-  ** ename:VK_ACCESS_2_SHADER_SAMPLED_READ_BIT_KHR
-  ** ename:VK_ACCESS_2_SHADER_STORAGE_READ_BIT_KHR
-  * ename:VK_ACCESS_2_SHADER_STORAGE_WRITE_BIT_KHR specifies write access to
-    a <<descriptorsets-storagebuffer, storage buffer>>,
-ifdef::VK_VERSION_1_2,VK_EXT_buffer_device_address,VK_buffer_device_address[]
-    <<descriptorsets-physical-storage-buffer, physical storage buffer>>,
-endif::VK_VERSION_1_2,VK_EXT_buffer_device_address,VK_buffer_device_address[]
-    <<descriptorsets-storagetexelbuffer, storage texel buffer>>, or
-    <<descriptorsets-storageimage, storage image>> in any shader pipeline
-    stage.
-  * ename:VK_ACCESS_2_SHADER_WRITE_BIT_KHR is equivalent to
-    ename:VK_ACCESS_2_SHADER_STORAGE_WRITE_BIT_KHR.
-  * ename:VK_ACCESS_2_COLOR_ATTACHMENT_READ_BIT_KHR specifies read access to
-    a <<renderpass, color attachment>>, such as via <<framebuffer-blending,
-    blending>>, <<framebuffer-logicop, logic operations>>, or via certain
-    <<renderpass-load-store-ops, subpass load operations>>.
-ifdef::VK_EXT_blend_operation_advanced[]
-    It does not include <<framebuffer-blend-advanced, advanced blend
-    operations>>.
-endif::VK_EXT_blend_operation_advanced[]
-    Such access occurs in the
-    ename:VK_PIPELINE_STAGE_2_COLOR_ATTACHMENT_OUTPUT_BIT_KHR pipeline
-    stage.
-  * ename:VK_ACCESS_2_COLOR_ATTACHMENT_WRITE_BIT_KHR specifies write access
-    to a
-ifndef::VK_VERSION_1_2,VK_KHR_depth_stencil_resolve[]
-    <<renderpass, color or resolve attachment>>
-endif::VK_VERSION_1_2,VK_KHR_depth_stencil_resolve[]
-ifdef::VK_VERSION_1_2,VK_KHR_depth_stencil_resolve[]
-    <<renderpass, color, resolve, or depth/stencil resolve attachment>>
-endif::VK_VERSION_1_2,VK_KHR_depth_stencil_resolve[]
-    during a <<renderpass, render pass>> or via certain
-    <<renderpass-load-store-ops, subpass load and store operations>>.
-    Such access occurs in the
-    ename:VK_PIPELINE_STAGE_2_COLOR_ATTACHMENT_OUTPUT_BIT_KHR pipeline
-    stage.
-  * ename:VK_ACCESS_2_DEPTH_STENCIL_ATTACHMENT_READ_BIT_KHR specifies read
-    access to a <<renderpass, depth/stencil attachment>>, via
-    <<fragops-ds-state, depth or stencil operations>> or via certain
-    <<renderpass-load-store-ops, subpass load operations>>.
-    Such access occurs in the
-    ename:VK_PIPELINE_STAGE_2_EARLY_FRAGMENT_TESTS_BIT_KHR or
-    ename:VK_PIPELINE_STAGE_2_LATE_FRAGMENT_TESTS_BIT_KHR pipeline stages.
-  * ename:VK_ACCESS_2_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT_KHR specifies write
-    access to a <<renderpass, depth/stencil attachment>>, via
-    <<fragops-ds-state, depth or stencil operations>> or via certain
-    <<renderpass-load-store-ops, subpass load and store operations>>.
-    Such access occurs in the
-    ename:VK_PIPELINE_STAGE_2_EARLY_FRAGMENT_TESTS_BIT_KHR or
-    ename:VK_PIPELINE_STAGE_2_LATE_FRAGMENT_TESTS_BIT_KHR pipeline stages.
-  * ename:VK_ACCESS_2_TRANSFER_READ_BIT_KHR specifies read access to an
-    image or buffer in a <<copies, copy>> operation.
-    Such access occurs in the ename:VK_PIPELINE_STAGE_2_COPY_BIT_KHR,
-    ename:VK_PIPELINE_STAGE_2_BLIT_BIT_KHR, or
-    ename:VK_PIPELINE_STAGE_2_RESOLVE_BIT_KHR pipeline stages.
-  * ename:VK_ACCESS_2_TRANSFER_WRITE_BIT_KHR specifies write access to an
-    image or buffer in a <<clears, clear>> or <<copies, copy>> operation.
-    Such access occurs in the ename:VK_PIPELINE_STAGE_2_COPY_BIT_KHR,
-    ename:VK_PIPELINE_STAGE_2_BLIT_BIT_KHR,
-    ename:VK_PIPELINE_STAGE_2_CLEAR_BIT_KHR, or
-    ename:VK_PIPELINE_STAGE_2_RESOLVE_BIT_KHR pipeline stages.
-  * ename:VK_ACCESS_2_HOST_READ_BIT_KHR specifies read access by a host
-    operation.
-    Accesses of this type are not performed through a resource, but directly
-    on memory.
-    Such access occurs in the ename:VK_PIPELINE_STAGE_2_HOST_BIT_KHR
-    pipeline stage.
-  * ename:VK_ACCESS_2_HOST_WRITE_BIT_KHR specifies write access by a host
-    operation.
-    Accesses of this type are not performed through a resource, but directly
-    on memory.
-    Such access occurs in the ename:VK_PIPELINE_STAGE_2_HOST_BIT_KHR
-    pipeline stage.
-ifdef::VK_EXT_conditional_rendering[]
-  * ename:VK_ACCESS_2_CONDITIONAL_RENDERING_READ_BIT_EXT specifies read
-    access to a predicate as part of conditional rendering.
-    Such access occurs in the
-    ename:VK_PIPELINE_STAGE_2_CONDITIONAL_RENDERING_BIT_EXT pipeline stage.
-endif::VK_EXT_conditional_rendering[]
-ifdef::VK_EXT_transform_feedback[]
-  * ename:VK_ACCESS_2_TRANSFORM_FEEDBACK_WRITE_BIT_EXT specifies write
-    access to a transform feedback buffer made when transform feedback is
-    active.
-    Such access occurs in the
-    ename:VK_PIPELINE_STAGE_2_TRANSFORM_FEEDBACK_BIT_EXT pipeline stage.
-  * ename:VK_ACCESS_2_TRANSFORM_FEEDBACK_COUNTER_READ_BIT_EXT specifies read
-    access to a transform feedback counter buffer which is read when
-    flink:vkCmdBeginTransformFeedbackEXT executes.
-    Such access occurs in the
-    ename:VK_PIPELINE_STAGE_2_TRANSFORM_FEEDBACK_BIT_EXT pipeline stage.
-  * ename:VK_ACCESS_2_TRANSFORM_FEEDBACK_COUNTER_WRITE_BIT_EXT specifies
-    write access to a transform feedback counter buffer which is written
-    when flink:vkCmdEndTransformFeedbackEXT executes.
-    Such access occurs in the
-    ename:VK_PIPELINE_STAGE_2_TRANSFORM_FEEDBACK_BIT_EXT pipeline stage.
-endif::VK_EXT_transform_feedback[]
-ifdef::VK_NV_device_generated_commands[]
-  * ename:VK_ACCESS_2_COMMAND_PREPROCESS_READ_BIT_NV specifies reads from
-    buffer inputs to flink:vkCmdPreprocessGeneratedCommandsNV.
-    Such access occurs in the
-    ename:VK_PIPELINE_STAGE_2_COMMAND_PREPROCESS_BIT_NV pipeline stage.
-  * ename:VK_ACCESS_2_COMMAND_PREPROCESS_WRITE_BIT_NV specifies writes to
-    the target command buffer preprocess outputs.
-    Such access occurs in the
-    ename:VK_PIPELINE_STAGE_2_COMMAND_PREPROCESS_BIT_NV pipeline stage.
-endif::VK_NV_device_generated_commands[]
-ifdef::VK_EXT_blend_operation_advanced[]
-  * ename:VK_ACCESS_2_COLOR_ATTACHMENT_READ_NONCOHERENT_BIT_EXT specifies
-    read access to <<renderpass, color attachments>>, including
-    <<framebuffer-blend-advanced,advanced blend operations>>.
-    Such access occurs in the
-    ename:VK_PIPELINE_STAGE_2_COLOR_ATTACHMENT_OUTPUT_BIT_KHR pipeline
-    stage.
-endif::VK_EXT_blend_operation_advanced[]
-ifdef::VK_HUAWEI_invocation_mask[]
-  * ename:VK_ACCESS_2_INVOCATION_MASK_READ_BIT_HUAWEI specifies read access
-    to a invocation mask image in the
-    ename:VK_PIPELINE_STAGE_2_INVOCATION_MASK_BIT_HUAWEI pipeline stage.
-endif::VK_HUAWEI_invocation_mask[]
-ifdef::VK_KHR_acceleration_structure,VK_NV_ray_tracing[]
-  * ename:VK_ACCESS_2_ACCELERATION_STRUCTURE_READ_BIT_KHR specifies read
-    access to an acceleration structure as part of a trace, build, or copy
-    command, or to an <<acceleration-structure-scratch, acceleration
-    structure scratch buffer>> as part of a build command.
-    Such access occurs in the
-ifdef::VK_KHR_ray_tracing_pipeline[]
-    ename:VK_PIPELINE_STAGE_2_RAY_TRACING_SHADER_BIT_KHR pipeline stage or
-endif::VK_KHR_ray_tracing_pipeline[]
-    ename:VK_PIPELINE_STAGE_2_ACCELERATION_STRUCTURE_BUILD_BIT_KHR pipeline
-    stage.
-  * ename:VK_ACCESS_2_ACCELERATION_STRUCTURE_WRITE_BIT_KHR specifies write
-    access to an acceleration structure or <<acceleration-structure-scratch,
-    acceleration structure scratch buffer>> as part of a build or copy
-    command.
-    Such access occurs in the
-    ename:VK_PIPELINE_STAGE_2_ACCELERATION_STRUCTURE_BUILD_BIT_KHR pipeline
-    stage.
-endif::VK_KHR_acceleration_structure,VK_NV_ray_tracing[]
-ifdef::VK_EXT_fragment_density_map[]
-  * ename:VK_ACCESS_2_FRAGMENT_DENSITY_MAP_READ_BIT_EXT specifies read
-    access to a <<renderpass-fragmentdensitymapattachment, fragment density
-    map attachment>> during dynamic <<fragmentdensitymapops, fragment
-    density map operations>>.
-    Such access occurs in the
-    ename:VK_PIPELINE_STAGE_2_FRAGMENT_DENSITY_PROCESS_BIT_EXT pipeline
-    stage.
-endif::VK_EXT_fragment_density_map[]
-ifdef::VK_KHR_fragment_shading_rate[]
-  * ename:VK_ACCESS_2_FRAGMENT_SHADING_RATE_ATTACHMENT_READ_BIT_KHR
-    specifies read access to a fragment shading rate attachment during
-    rasterization.
-    Such access occurs in the
-    ename:VK_PIPELINE_STAGE_2_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR
-    pipeline stage.
-endif::VK_KHR_fragment_shading_rate[]
-ifdef::VK_NV_shading_rate_image[]
-  * ename:VK_ACCESS_2_SHADING_RATE_IMAGE_READ_BIT_NV specifies read access
-    to a shading rate image during rasterization.
-    Such access occurs in the
-    ename:VK_PIPELINE_STAGE_2_SHADING_RATE_IMAGE_BIT_NV pipeline stage.
-ifdef::VK_KHR_fragment_shading_rate[]
-    It is equivalent to
-    ename:VK_ACCESS_2_FRAGMENT_SHADING_RATE_ATTACHMENT_READ_BIT_KHR.
-endif::VK_KHR_fragment_shading_rate[]
-endif::VK_NV_shading_rate_image[]
-ifdef::VK_KHR_video_decode_queue[]
-  * ename:VK_ACCESS_2_VIDEO_DECODE_READ_BIT_KHR specifies read access to an
-    image or buffer resource as part of a <<video-decode-operations, video
-    decode operation>>.
-    Such access occurs in the ename:VK_PIPELINE_STAGE_2_VIDEO_DECODE_BIT_KHR
-    pipeline stage.
-  * ename:VK_ACCESS_2_VIDEO_DECODE_WRITE_BIT_KHR specifies write access to
-    an image or buffer resource as part of a <<video-decode-operations,
-    video decode operation>>.
-    Such access occurs in the ename:VK_PIPELINE_STAGE_2_VIDEO_DECODE_BIT_KHR
-    pipeline stage.
-endif::VK_KHR_video_decode_queue[]
-ifdef::VK_KHR_video_encode_queue[]
-  * ename:VK_ACCESS_2_VIDEO_ENCODE_READ_BIT_KHR specifies read access to an
-    image or buffer resource as part of a <<video-encode-operations, video
-    encode operation>>.
-    Such access occurs in the ename:VK_PIPELINE_STAGE_2_VIDEO_ENCODE_BIT_KHR
-    pipeline stage.
-  * ename:VK_ACCESS_2_VIDEO_ENCODE_WRITE_BIT_KHR specifies write access to
-    an image or buffer resource as part of a <<video-encode-operations,
-    video encode operation>>.
-    Such access occurs in the ename:VK_PIPELINE_STAGE_2_VIDEO_ENCODE_BIT_KHR
-    pipeline stage.
-endif::VK_KHR_video_encode_queue[]
-
-[NOTE]
-.Note
-====
-In situations where an application wishes to select all access types for a
-given set of pipeline stages, ename:VK_ACCESS_2_MEMORY_READ_BIT_KHR or
-ename:VK_ACCESS_2_MEMORY_WRITE_BIT_KHR can be used.
-This is particularly useful when specifying stages that only have a single
-access type.
-====
-
-[NOTE]
-.Note
-====
-The tname:VkAccessFlags2KHR bitmask goes beyond the 31 individual bit flags
-allowable within a C99 enum, which is how elink:VkAccessFlagBits is defined.
-The first 31 values are common to both, and are interchangeable.
-====
---
-
-[open,refpage='VkAccessFlags2KHR',desc='64-bit mask of access flags',type='flags']
---
-tname:VkAccessFlags2KHR is a bitmask type for setting a mask of zero or more
-elink:VkAccessFlagBits2KHR:
-
-include::{generated}/api/flags/VkAccessFlags2KHR.txt[]
---
-endif::VK_KHR_synchronization2[]
-
-[open,refpage='VkAccessFlagBits',desc='Bitmask specifying memory access types that will participate in a memory dependency',type='enums']
---
-Bits which can: be set in the pname:srcAccessMask and pname:dstAccessMask
-members of slink:VkSubpassDependency,
-ifdef::VK_KHR_synchronization2[slink:VkSubpassDependency2,]
-slink:VkMemoryBarrier, slink:VkBufferMemoryBarrier, and
-slink:VkImageMemoryBarrier, specifying access behavior, are:
-
-include::{generated}/api/enums/VkAccessFlagBits.txt[]
-
-ifdef::VK_KHR_synchronization2[]
-These values all have the same meaning as the equivalently named values for
-tlink:VkAccessFlags2KHR.
-
-  * ename:VK_ACCESS_NONE_KHR specifies no accesses.
-endif::VK_KHR_synchronization2[]
-  * ename:VK_ACCESS_MEMORY_READ_BIT specifies all read accesses.
-    It is always valid in any access mask, and is treated as equivalent to
-    setting all etext:READ access flags that are valid where it is used.
-  * ename:VK_ACCESS_MEMORY_WRITE_BIT specifies all write accesses.
-    It is always valid in any access mask, and is treated as equivalent to
-    setting all etext:WRITE access flags that are valid where it is used.
-  * ename:VK_ACCESS_INDIRECT_COMMAND_READ_BIT specifies read access to
-    indirect command data read as part of an indirect
-ifdef::VK_KHR_acceleration_structure[build,]
-ifdef::VK_KHR_ray_tracing_pipeline[trace,]
-    drawing or dispatching command.
-    Such access occurs in the ename:VK_PIPELINE_STAGE_DRAW_INDIRECT_BIT
-    pipeline stage.
-  * ename:VK_ACCESS_INDEX_READ_BIT specifies read access to an index buffer
-    as part of an indexed drawing command, bound by
-    flink:vkCmdBindIndexBuffer.
-    Such access occurs in the ename:VK_PIPELINE_STAGE_VERTEX_INPUT_BIT
-    pipeline stage.
-  * ename:VK_ACCESS_VERTEX_ATTRIBUTE_READ_BIT specifies read access to a
-    vertex buffer as part of a drawing command, bound by
-    flink:vkCmdBindVertexBuffers.
-    Such access occurs in the ename:VK_PIPELINE_STAGE_VERTEX_INPUT_BIT
-    pipeline stage.
-  * ename:VK_ACCESS_UNIFORM_READ_BIT specifies read access to a
-    <<descriptorsets-uniformbuffer, uniform buffer>> in any shader pipeline
-    stage.
-  * ename:VK_ACCESS_INPUT_ATTACHMENT_READ_BIT specifies read access to an
-    <<renderpass, input attachment>> within a render pass during
-ifdef::VK_HUAWEI_subpass_shading[]
-    subpass shading or
-endif::VK_HUAWEI_subpass_shading[]
-    fragment shading.
-    Such access occurs in the
-ifdef::VK_HUAWEI_subpass_shading[]
-    ename:VK_PIPELINE_STAGE_2_SUBPASS_SHADING_BIT_HUAWEI or
-endif::VK_HUAWEI_subpass_shading[]
-    ename:VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT pipeline stage.
-  * ename:VK_ACCESS_SHADER_READ_BIT specifies read access to a
-    <<descriptorsets-uniformbuffer, uniform buffer>>,
-    <<descriptorsets-uniformtexelbuffer, uniform texel buffer>>,
-    <<descriptorsets-sampledimage, sampled image>>,
-    <<descriptorsets-storagebuffer, storage buffer>>,
-ifdef::VK_VERSION_1_2,VK_EXT_buffer_device_address,VK_KHR_buffer_device_address[]
-    <<descriptorsets-physical-storage-buffer, physical storage buffer>>,
-endif::VK_VERSION_1_2,VK_EXT_buffer_device_address,VK_KHR_buffer_device_address[]
-ifdef::VK_NV_ray_tracing,VK_KHR_ray_tracing_pipeline[]
-    <<shader-binding-table, shader binding table>>,
-endif::VK_NV_ray_tracing,VK_KHR_ray_tracing_pipeline[]
-    <<descriptorsets-storagetexelbuffer, storage texel buffer>>, or
-    <<descriptorsets-storageimage, storage image>> in any shader pipeline
-    stage.
-  * ename:VK_ACCESS_SHADER_WRITE_BIT specifies write access to a
-    <<descriptorsets-storagebuffer, storage buffer>>,
-ifdef::VK_VERSION_1_2,VK_EXT_buffer_device_address,VK_KHR_buffer_device_address[]
-    <<descriptorsets-physical-storage-buffer, physical storage buffer>>,
-endif::VK_VERSION_1_2,VK_EXT_buffer_device_address,VK_KHR_buffer_device_address[]
-    <<descriptorsets-storagetexelbuffer, storage texel buffer>>, or
-    <<descriptorsets-storageimage, storage image>> in any shader pipeline
-    stage.
-  * ename:VK_ACCESS_COLOR_ATTACHMENT_READ_BIT specifies read access to a
-    <<renderpass, color attachment>>, such as via <<framebuffer-blending,
-    blending>>, <<framebuffer-logicop, logic operations>>, or via certain
-    <<renderpass-load-store-ops, subpass load operations>>.
-ifdef::VK_EXT_blend_operation_advanced[]
-    It does not include <<framebuffer-blend-advanced, advanced blend
-    operations>>.
-    Such access occurs in the
-    ename:VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT pipeline stage.
-endif::VK_EXT_blend_operation_advanced[]
-  * ename:VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT specifies write access to a
-ifndef::VK_VERSION_1_2,VK_KHR_depth_stencil_resolve[]
-    <<renderpass, color or resolve attachment>>
-endif::VK_VERSION_1_2,VK_KHR_depth_stencil_resolve[]
-ifdef::VK_VERSION_1_2,VK_KHR_depth_stencil_resolve[]
-    <<renderpass, color, resolve, or depth/stencil resolve attachment>>
-endif::VK_VERSION_1_2,VK_KHR_depth_stencil_resolve[]
-    during a <<renderpass, render pass>> or via certain
-    <<renderpass-load-store-ops, subpass load and store operations>>.
-    Such access occurs in the
-    ename:VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT pipeline stage.
-  * ename:VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_READ_BIT specifies read access
-    to a <<renderpass, depth/stencil attachment>>, via <<fragops-ds-state,
-    depth or stencil operations>> or via certain
-    <<renderpass-load-store-ops, subpass load operations>>.
-    Such access occurs in the
-    ename:VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT or
-    ename:VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT pipeline stages.
-  * ename:VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT specifies write
-    access to a <<renderpass, depth/stencil attachment>>, via
-    <<fragops-ds-state, depth or stencil operations>> or via certain
-    <<renderpass-load-store-ops, subpass load and store operations>>.
-    Such access occurs in the
-    ename:VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT or
-    ename:VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT pipeline stages.
-  * ename:VK_ACCESS_TRANSFER_READ_BIT specifies read access to an image or
-    buffer in a <<copies, copy>> operation.
-    Such access occurs in the ename:VK_PIPELINE_STAGE_2_ALL_TRANSFER_BIT_KHR
-    pipeline stage.
-  * ename:VK_ACCESS_TRANSFER_WRITE_BIT specifies write access to an image or
-    buffer in a <<clears, clear>> or <<copies, copy>> operation.
-    Such access occurs in the ename:VK_PIPELINE_STAGE_2_ALL_TRANSFER_BIT_KHR
-    pipeline stage.
-  * ename:VK_ACCESS_HOST_READ_BIT specifies read access by a host operation.
-    Accesses of this type are not performed through a resource, but directly
-    on memory.
-    Such access occurs in the ename:VK_PIPELINE_STAGE_HOST_BIT pipeline
-    stage.
-  * ename:VK_ACCESS_HOST_WRITE_BIT specifies write access by a host
-    operation.
-    Accesses of this type are not performed through a resource, but directly
-    on memory.
-    Such access occurs in the ename:VK_PIPELINE_STAGE_HOST_BIT pipeline
-    stage.
-ifdef::VK_EXT_conditional_rendering[]
-  * ename:VK_ACCESS_CONDITIONAL_RENDERING_READ_BIT_EXT specifies read access
-    to a predicate as part of conditional rendering.
-    Such access occurs in the
-    ename:VK_PIPELINE_STAGE_CONDITIONAL_RENDERING_BIT_EXT pipeline stage.
-endif::VK_EXT_conditional_rendering[]
-ifdef::VK_EXT_transform_feedback[]
-  * ename:VK_ACCESS_TRANSFORM_FEEDBACK_WRITE_BIT_EXT specifies write access
-    to a transform feedback buffer made when transform feedback is active.
-    Such access occurs in the
-    ename:VK_PIPELINE_STAGE_TRANSFORM_FEEDBACK_BIT_EXT pipeline stage.
-  * ename:VK_ACCESS_TRANSFORM_FEEDBACK_COUNTER_READ_BIT_EXT specifies read
-    access to a transform feedback counter buffer which is read when
-    fname:vkCmdBeginTransformFeedbackEXT executes.
-    Such access occurs in the
-    ename:VK_PIPELINE_STAGE_TRANSFORM_FEEDBACK_BIT_EXT pipeline stage.
-  * ename:VK_ACCESS_TRANSFORM_FEEDBACK_COUNTER_WRITE_BIT_EXT specifies write
-    access to a transform feedback counter buffer which is written when
-    fname:vkCmdEndTransformFeedbackEXT executes.
-    Such access occurs in the
-    ename:VK_PIPELINE_STAGE_TRANSFORM_FEEDBACK_BIT_EXT pipeline stage.
-endif::VK_EXT_transform_feedback[]
-ifdef::VK_NV_device_generated_commands[]
-  * ename:VK_ACCESS_COMMAND_PREPROCESS_READ_BIT_NV specifies reads from
-    buffer inputs to flink:vkCmdPreprocessGeneratedCommandsNV.
-    Such access occurs in the
-    ename:VK_PIPELINE_STAGE_COMMAND_PREPROCESS_BIT_NV pipeline stage.
-  * ename:VK_ACCESS_COMMAND_PREPROCESS_WRITE_BIT_NV specifies writes to the
-    target command buffer:VkBuffer preprocess outputs in
-    flink:vkCmdPreprocessGeneratedCommandsNV.
-    Such access occurs in the
-    ename:VK_PIPELINE_STAGE_COMMAND_PREPROCESS_BIT_NV pipeline stage.
-endif::VK_NV_device_generated_commands[]
-ifdef::VK_EXT_blend_operation_advanced[]
-  * ename:VK_ACCESS_COLOR_ATTACHMENT_READ_NONCOHERENT_BIT_EXT specifies read
-    access to <<renderpass, color attachments>>, including
-    <<framebuffer-blend-advanced,advanced blend operations>>.
-    Such access occurs in the
-    ename:VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT pipeline stage.
-endif::VK_EXT_blend_operation_advanced[]
-ifdef::VK_KHR_acceleration_structure,VK_NV_ray_tracing[]
-ifdef::VK_HUAWEI_invocation_mask[]
-  * ename:VK_ACCESS_2_INVOCATION_MASK_READ_BIT_HUAWEI specifies read access
-    to a invocation mask image in the
-    ename:VK_PIPELINE_STAGE_2_INVOCATION_MASK_BIT_HUAWEI pipeline stage.
-endif::VK_HUAWEI_invocation_mask[]
-  * ename:VK_ACCESS_ACCELERATION_STRUCTURE_READ_BIT_KHR specifies read
-    access to an acceleration structure as part of a trace, build, or copy
-    command, or to an <<acceleration-structure-scratch, acceleration
-    structure scratch buffer>> as part of a build command.
-    Such access occurs in the
-ifdef::VK_KHR_ray_tracing_pipeline[]
-    ename:VK_PIPELINE_STAGE_RAY_TRACING_SHADER_BIT_KHR pipeline stage or
-endif::VK_KHR_ray_tracing_pipeline[]
-    ename:VK_PIPELINE_STAGE_ACCELERATION_STRUCTURE_BUILD_BIT_KHR pipeline
-    stage.
-  * ename:VK_ACCESS_ACCELERATION_STRUCTURE_WRITE_BIT_KHR specifies write
-    access to an acceleration structure or <<acceleration-structure-scratch,
-    acceleration structure scratch buffer>> as part of a build or copy
-    command.
-    Such access occurs in the
-    ename:VK_PIPELINE_STAGE_ACCELERATION_STRUCTURE_BUILD_BIT_KHR pipeline
-    stage.
-endif::VK_KHR_acceleration_structure,VK_NV_ray_tracing[]
-ifdef::VK_EXT_fragment_density_map[]
-  * ename:VK_ACCESS_FRAGMENT_DENSITY_MAP_READ_BIT_EXT specifies read access
-    to a <<renderpass-fragmentdensitymapattachment, fragment density map
-    attachment>> during dynamic <<fragmentdensitymapops, fragment density
-    map operations>> Such access occurs in the
-    ename:VK_PIPELINE_STAGE_FRAGMENT_DENSITY_PROCESS_BIT_EXT pipeline stage.
-endif::VK_EXT_fragment_density_map[]
-ifdef::VK_KHR_fragment_shading_rate[]
-  * ename:VK_ACCESS_FRAGMENT_SHADING_RATE_ATTACHMENT_READ_BIT_KHR specifies
-    read access to a fragment shading rate attachment during rasterization.
-    Such access occurs in the
-    ename:VK_PIPELINE_STAGE_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR
-    pipeline stage.
-endif::VK_KHR_fragment_shading_rate[]
-ifdef::VK_NV_shading_rate_image[]
-  * ename:VK_ACCESS_SHADING_RATE_IMAGE_READ_BIT_NV specifies read access to
-    a shading rate image during rasterization.
-    Such access occurs in the
-    ename:VK_PIPELINE_STAGE_SHADING_RATE_IMAGE_BIT_NV pipeline stage.
-ifdef::VK_KHR_fragment_shading_rate[]
-    It is equivalent to
-    ename:VK_PIPELINE_STAGE_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR.
-endif::VK_KHR_fragment_shading_rate[]
-endif::VK_NV_shading_rate_image[]
-
-Certain access types are only performed by a subset of pipeline stages.
-Any synchronization command that takes both stage masks and access masks
-uses both to define the <<synchronization-dependencies-access-scopes, access
-scopes>> - only the specified access types performed by the specified stages
-are included in the access scope.
-An application must: not specify an access flag in a synchronization command
-if it does not include a pipeline stage in the corresponding stage mask that
-is able to perform accesses of that type.
-The following table lists, for each access flag, which pipeline stages can:
-perform that type of access.
-
-[[synchronization-access-types-supported]]
-.Supported access types
-[cols="50,50",options="header"]
-|====
-|Access flag                                                  | Supported pipeline stages
-|ename:VK_ACCESS_INDIRECT_COMMAND_READ_BIT                    | ename:VK_PIPELINE_STAGE_DRAW_INDIRECT_BIT
-ifdef::VK_KHR_acceleration_structure[]
-, ename:VK_PIPELINE_STAGE_ACCELERATION_STRUCTURE_BUILD_BIT_KHR
-endif::VK_KHR_acceleration_structure[]
-|ename:VK_ACCESS_INDEX_READ_BIT                               | ename:VK_PIPELINE_STAGE_VERTEX_INPUT_BIT
-|ename:VK_ACCESS_VERTEX_ATTRIBUTE_READ_BIT                    | ename:VK_PIPELINE_STAGE_VERTEX_INPUT_BIT
-
-|ename:VK_ACCESS_UNIFORM_READ_BIT                             |
-ifdef::VK_NV_mesh_shader[]
-                                                               ename:VK_PIPELINE_STAGE_TASK_SHADER_BIT_NV, ename:VK_PIPELINE_STAGE_MESH_SHADER_BIT_NV,
-endif::VK_NV_mesh_shader[]
-ifdef::VK_NV_ray_tracing,VK_KHR_ray_tracing_pipeline[]
-                                                               ename:VK_PIPELINE_STAGE_RAY_TRACING_SHADER_BIT_KHR,
-endif::VK_NV_ray_tracing,VK_KHR_ray_tracing_pipeline[]
-                                                               ename:VK_PIPELINE_STAGE_VERTEX_SHADER_BIT, ename:VK_PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT, ename:VK_PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT, ename:VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT, ename:VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT, or ename:VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT
-
-|ename:VK_ACCESS_SHADER_READ_BIT                              |
-ifdef::VK_KHR_acceleration_structure[]
-                                                               ename:VK_PIPELINE_STAGE_ACCELERATION_STRUCTURE_BUILD_BIT_KHR,
-endif::VK_KHR_acceleration_structure[]
-ifdef::VK_NV_mesh_shader[]
-                                                               ename:VK_PIPELINE_STAGE_TASK_SHADER_BIT_NV, ename:VK_PIPELINE_STAGE_MESH_SHADER_BIT_NV,
-endif::VK_NV_mesh_shader[]
-ifdef::VK_NV_ray_tracing,VK_KHR_ray_tracing_pipeline[]
-                                                               ename:VK_PIPELINE_STAGE_RAY_TRACING_SHADER_BIT_KHR,
-endif::VK_NV_ray_tracing,VK_KHR_ray_tracing_pipeline[]
-                                                               ename:VK_PIPELINE_STAGE_VERTEX_SHADER_BIT, ename:VK_PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT, ename:VK_PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT, ename:VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT, ename:VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT, or ename:VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT
-
-|ename:VK_ACCESS_SHADER_WRITE_BIT                             |
-ifdef::VK_NV_mesh_shader[]
-                                                               ename:VK_PIPELINE_STAGE_TASK_SHADER_BIT_NV, ename:VK_PIPELINE_STAGE_MESH_SHADER_BIT_NV,
-endif::VK_NV_mesh_shader[]
-ifdef::VK_NV_ray_tracing,VK_KHR_ray_tracing_pipeline[]
-                                                               ename:VK_PIPELINE_STAGE_RAY_TRACING_SHADER_BIT_KHR,
-endif::VK_NV_ray_tracing,VK_KHR_ray_tracing_pipeline[]
-                                                               ename:VK_PIPELINE_STAGE_VERTEX_SHADER_BIT, ename:VK_PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT, ename:VK_PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT, ename:VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT, ename:VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT, or ename:VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT
-
-|ename:VK_ACCESS_INPUT_ATTACHMENT_READ_BIT                    |
-ifdef::VK_HUAWEI_subpass_shading[]
-                                                               ename:VK_PIPELINE_STAGE_2_SUBPASS_SHADING_BIT_HUAWEI, or
-endif::VK_HUAWEI_subpass_shading[]
-                                                               ename:VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT
-|ename:VK_ACCESS_COLOR_ATTACHMENT_READ_BIT                    | ename:VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT
-|ename:VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT                   | ename:VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT
-|ename:VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_READ_BIT            | ename:VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT, or ename:VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT
-|ename:VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT           | ename:VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT, or ename:VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT
-|ename:VK_ACCESS_TRANSFER_READ_BIT                            | ename:VK_PIPELINE_STAGE_TRANSFER_BIT
-ifdef::VK_KHR_acceleration_structure[or ename:VK_PIPELINE_STAGE_ACCELERATION_STRUCTURE_BUILD_BIT_KHR]
-|ename:VK_ACCESS_TRANSFER_WRITE_BIT                           | ename:VK_PIPELINE_STAGE_TRANSFER_BIT
-ifdef::VK_KHR_acceleration_structure[or ename:VK_PIPELINE_STAGE_ACCELERATION_STRUCTURE_BUILD_BIT_KHR]
-|ename:VK_ACCESS_HOST_READ_BIT                                | ename:VK_PIPELINE_STAGE_HOST_BIT
-|ename:VK_ACCESS_HOST_WRITE_BIT                               | ename:VK_PIPELINE_STAGE_HOST_BIT
-|ename:VK_ACCESS_MEMORY_READ_BIT                              | Any
-|ename:VK_ACCESS_MEMORY_WRITE_BIT                             | Any
-ifdef::VK_EXT_blend_operation_advanced[]
-|ename:VK_ACCESS_COLOR_ATTACHMENT_READ_NONCOHERENT_BIT_EXT    | ename:VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT
-endif::VK_EXT_blend_operation_advanced[]
-ifdef::VK_NV_device_generated_commands[]
-|ename:VK_ACCESS_COMMAND_PREPROCESS_READ_BIT_NV               | ename:VK_PIPELINE_STAGE_COMMAND_PREPROCESS_BIT_NV
-|ename:VK_ACCESS_COMMAND_PREPROCESS_WRITE_BIT_NV              | ename:VK_PIPELINE_STAGE_COMMAND_PREPROCESS_BIT_NV
-endif::VK_NV_device_generated_commands[]
-ifdef::VK_EXT_conditional_rendering[]
-|ename:VK_ACCESS_CONDITIONAL_RENDERING_READ_BIT_EXT           | ename:VK_PIPELINE_STAGE_CONDITIONAL_RENDERING_BIT_EXT
-endif::VK_EXT_conditional_rendering[]
-ifdef::VK_KHR_fragment_shading_rate,VK_NV_shading_rate_image[]
-|ename:VK_ACCESS_FRAGMENT_SHADING_RATE_ATTACHMENT_READ_BIT_KHR | ename:VK_PIPELINE_STAGE_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR
-endif::VK_KHR_fragment_shading_rate,VK_NV_shading_rate_image[]
-ifdef::VK_HUAWEI_invocation_mask[]
-|ename:VK_ACCESS_2_INVOCATION_MASK_READ_BIT_HUAWEI                           | ename:VK_PIPELINE_STAGE_2_INVOCATION_MASK_BIT_HUAWEI
-endif::VK_HUAWEI_invocation_mask[]
-ifdef::VK_EXT_transform_feedback[]
-|ename:VK_ACCESS_TRANSFORM_FEEDBACK_WRITE_BIT_EXT             | ename:VK_PIPELINE_STAGE_TRANSFORM_FEEDBACK_BIT_EXT
-|ename:VK_ACCESS_TRANSFORM_FEEDBACK_COUNTER_WRITE_BIT_EXT     | ename:VK_PIPELINE_STAGE_TRANSFORM_FEEDBACK_BIT_EXT
-|ename:VK_ACCESS_TRANSFORM_FEEDBACK_COUNTER_READ_BIT_EXT      | ename:VK_PIPELINE_STAGE_TRANSFORM_FEEDBACK_BIT_EXT, ename:VK_PIPELINE_STAGE_DRAW_INDIRECT_BIT
-endif::VK_EXT_transform_feedback[]
-ifdef::VK_NV_ray_tracing,VK_KHR_acceleration_structure[]
-|ename:VK_ACCESS_ACCELERATION_STRUCTURE_READ_BIT_KHR          |
-ifdef::VK_KHR_ray_query[]
-ifdef::VK_NV_mesh_shader[]
-                                                               ename:VK_PIPELINE_STAGE_TASK_SHADER_BIT_NV, ename:VK_PIPELINE_STAGE_MESH_SHADER_BIT_NV,
-endif::VK_NV_mesh_shader[]
-                                                               ename:VK_PIPELINE_STAGE_VERTEX_SHADER_BIT, ename:VK_PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT, ename:VK_PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT, ename:VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT, ename:VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT, ename:VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT,
-endif::VK_KHR_ray_query[]
-ifdef::VK_KHR_ray_tracing_pipeline[]
-ename:VK_PIPELINE_STAGE_RAY_TRACING_SHADER_BIT_KHR,
-endif::VK_KHR_ray_tracing_pipeline[]
-ifdef::VK_KHR_ray_tracing_pipeline,VK_KHR_ray_query[]
- or
-endif::VK_KHR_ray_tracing_pipeline,VK_KHR_ray_query[]
-ename:VK_PIPELINE_STAGE_ACCELERATION_STRUCTURE_BUILD_BIT_KHR
-|ename:VK_ACCESS_ACCELERATION_STRUCTURE_WRITE_BIT_KHR         | ename:VK_PIPELINE_STAGE_ACCELERATION_STRUCTURE_BUILD_BIT_KHR
-endif::VK_NV_ray_tracing,VK_KHR_acceleration_structure[]
-ifdef::VK_EXT_fragment_density_map[]
-|ename:VK_ACCESS_FRAGMENT_DENSITY_MAP_READ_BIT_EXT            | ename:VK_PIPELINE_STAGE_FRAGMENT_DENSITY_PROCESS_BIT_EXT
-endif::VK_EXT_fragment_density_map[]
-|====
---
-
-[open,refpage='VkAccessFlags',desc='Bitmask of VkAccessFlagBits',type='flags']
---
-include::{generated}/api/flags/VkAccessFlags.txt[]
-
-tname:VkAccessFlags is a bitmask type for setting a mask of zero or more
-elink:VkAccessFlagBits.
---
-
-
-[[synchronization-host-access-types]]
-If a memory object does not have the
-ename:VK_MEMORY_PROPERTY_HOST_COHERENT_BIT property, then
-flink:vkFlushMappedMemoryRanges must: be called in order to guarantee that
-writes to the memory object from the host are made available to the host
-domain, where they can: be further made available to the device domain via a
-domain operation.
-Similarly, flink:vkInvalidateMappedMemoryRanges must: be called to guarantee
-that writes which are available to the host domain are made visible to host
-operations.
-
-If the memory object does have the
-ename:VK_MEMORY_PROPERTY_HOST_COHERENT_BIT property flag, writes to the
-memory object from the host are automatically made available to the host
-domain.
-Similarly, writes made available to the host domain are automatically made
-visible to the host.
-
-[NOTE]
-.Note
-====
-<<devsandqueues-submission, Queue submission commands>> automatically
-perform a <<synchronization-submission-host-writes,domain operation from
-host to device>> for all writes performed before the command executes, so in
-most cases an explicit memory barrier is not needed for this case.
-In the few circumstances where a submit does not occur between the host
-write and the device read access, writes can: be made available by using an
-explicit memory barrier.
-====
-
-
-[[synchronization-framebuffer-regions]]
-=== Framebuffer Region Dependencies
-
-<<synchronization-pipeline-stages, Pipeline stages>> that operate on, or
-with respect to, the framebuffer are collectively the _framebuffer-space_
-pipeline stages.
-These stages are:
-
-  * ename:VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT
-  * ename:VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT
-  * ename:VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT
-  * ename:VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT
-
-For these pipeline stages, an execution or memory dependency from the first
-set of operations to the second set can: either be a single
-_framebuffer-global_ dependency, or split into multiple _framebuffer-local_
-dependencies.
-A dependency with non-framebuffer-space pipeline stages is neither
-framebuffer-global nor framebuffer-local.
-
-ifndef::VK_QCOM_render_pass_shader_resolve[]
-A _framebuffer region_ is a set of sample (x, y, layer, sample) coordinates
-that is a subset of the entire framebuffer.
-endif::VK_QCOM_render_pass_shader_resolve[]
-ifdef::VK_QCOM_render_pass_shader_resolve[]
-A _framebuffer region_ is a subset of the entire framebuffer, and can:
-either be:
-
- * A _sample region_, which is set of sample (x, y, layer, sample)
-   coordinates that is a subset of the entire framebuffer, or
-
- * A _fragment region_, which is a set of fragment (x, y, layer) coordinates
-   that is a subset of the entire framebuffer.
-endif::VK_QCOM_render_pass_shader_resolve[]
-
-Both <<synchronization-dependencies-scopes, synchronization scopes>> of a
-framebuffer-local dependency include only the operations performed within
-corresponding framebuffer regions (as defined below).
-No ordering guarantees are made between different framebuffer regions for a
-framebuffer-local dependency.
-
-Both <<synchronization-dependencies-scopes, synchronization scopes>> of a
-framebuffer-global dependency include operations on all framebuffer-regions.
-
-If the first synchronization scope includes operations on pixels/fragments
-with N samples and the second synchronization scope includes operations on
-pixels/fragments with M samples, where N does not equal M, then a
-framebuffer region containing all samples at a given (x, y, layer)
-coordinate in the first synchronization scope corresponds to a region
-containing all samples at the same coordinate in the second synchronization
-scope.
-ifndef::VK_QCOM_render_pass_shader_resolve[]
-In other words, it is a pixel granularity dependency.
-endif::VK_QCOM_render_pass_shader_resolve[]
-ifdef::VK_QCOM_render_pass_shader_resolve[]
-In other words, the framebuffer region is a fragment region and it is a
-pixel granularity dependency.
-endif::VK_QCOM_render_pass_shader_resolve[]
-If N equals M,
-ifdef::VK_QCOM_render_pass_shader_resolve[]
-and if the sname:VkSubpassDescription::pname:flags does not specify the
-ename:VK_SUBPASS_DESCRIPTION_FRAGMENT_REGION_BIT_QCOM flag,
-endif::VK_QCOM_render_pass_shader_resolve[]
-then a framebuffer region containing a single (x, y, layer, sample)
-coordinate in the first synchronization scope corresponds to a region
-containing the same sample at the same coordinate in the second
-synchronization scope.
-ifndef::VK_QCOM_render_pass_shader_resolve[]
-In other words, it is a sample granularity dependency.
-endif::VK_QCOM_render_pass_shader_resolve[]
-ifdef::VK_QCOM_render_pass_shader_resolve[]
-In other words, the framebuffer region is a sample region and it is a sample
-granularity dependency.
-endif::VK_QCOM_render_pass_shader_resolve[]
-
-[NOTE]
-.Note
-====
-Since fragment shader invocations are not specified to run in any particular
-groupings, the size of a framebuffer region is implementation-dependent, not
-known to the application, and must: be assumed to be no larger than
-specified above.
-====
-
-[NOTE]
-.Note
-====
-Practically, the pixel vs sample granularity dependency means that if an
-input attachment has a different number of samples than the pipeline's
-pname:rasterizationSamples, then a fragment can: access any sample in the
-input attachment's pixel even if it only uses framebuffer-local
-dependencies.
-If the input attachment has the same number of samples, then the fragment
-can: only access the covered samples in its input code:SampleMask (i.e. the
-fragment operations happen-after a framebuffer-local dependency for each
-sample the fragment covers).
-To access samples that are not covered,
-ifdef::VK_QCOM_render_pass_shader_resolve[]
-either the sname:VkSubpassDescription::pname:flags
-ename:VK_SUBPASS_DESCRIPTION_FRAGMENT_REGION_BIT_QCOM flag is required, or
-endif::VK_QCOM_render_pass_shader_resolve[]
-a framebuffer-global dependency is required.
-====
-
-If a synchronization command includes a pname:dependencyFlags parameter, and
-specifies the ename:VK_DEPENDENCY_BY_REGION_BIT flag, then it defines
-framebuffer-local dependencies for the framebuffer-space pipeline stages in
-that synchronization command, for all framebuffer regions.
-If no pname:dependencyFlags parameter is included, or the
-ename:VK_DEPENDENCY_BY_REGION_BIT flag is not specified, then a
-framebuffer-global dependency is specified for those stages.
-The ename:VK_DEPENDENCY_BY_REGION_BIT flag does not affect the dependencies
-between non-framebuffer-space pipeline stages, nor does it affect the
-dependencies between framebuffer-space and non-framebuffer-space pipeline
-stages.
-
-[NOTE]
-.Note
-====
-Framebuffer-local dependencies are more efficient for most architectures;
-particularly tile-based architectures - which can keep framebuffer-regions
-entirely in on-chip registers and thus avoid external bandwidth across such
-a dependency.
-Including a framebuffer-global dependency in your rendering will usually
-force all implementations to flush data to memory, or to a higher level
-cache, breaking any potential locality optimizations.
-====
-
-
-ifdef::VK_VERSION_1_1,VK_KHR_multiview[]
-[[synchronization-view-local-dependencies]]
-=== View-Local Dependencies
-
-In a render pass instance that has <<renderpass-multiview,multiview>>
-enabled, dependencies can: be either view-local or view-global.
-
-A view-local dependency only includes operations from a single
-<<renderpass-multiview-view-local,source view>> from the source subpass in
-the first synchronization scope, and only includes operations from a single
-<<renderpass-multiview-view-local,destination view>> from the destination
-subpass in the second synchronization scope.
-A view-global dependency includes all views in the view mask of the source
-and destination subpasses in the corresponding synchronization scopes.
-
-If a synchronization command includes a pname:dependencyFlags parameter and
-specifies the ename:VK_DEPENDENCY_VIEW_LOCAL_BIT flag, then it defines
-view-local dependencies for that synchronization command, for all views.
-If no pname:dependencyFlags parameter is included or the
-ename:VK_DEPENDENCY_VIEW_LOCAL_BIT flag is not specified, then a view-global
-dependency is specified.
-endif::VK_VERSION_1_1,VK_KHR_multiview[]
-
-
-ifdef::VK_VERSION_1_1,VK_KHR_device_group[]
-[[synchronization-device-local-dependencies]]
-=== Device-Local Dependencies
-
-Dependencies can: be either device-local or non-device-local.
-A device-local dependency acts as multiple separate dependencies, one for
-each physical device that executes the synchronization command, where each
-dependency only includes operations from that physical device in both
-synchronization scopes.
-A non-device-local dependency is a single dependency where both
-synchronization scopes include operations from all physical devices that
-participate in the synchronization command.
-For subpass dependencies, all physical devices in the
-slink:VkDeviceGroupRenderPassBeginInfo::pname:deviceMask participate in the
-dependency, and for pipeline barriers all physical devices that are set in
-the command buffer's current device mask participate in the dependency.
-
-If a synchronization command includes a pname:dependencyFlags parameter and
-specifies the ename:VK_DEPENDENCY_DEVICE_GROUP_BIT flag, then it defines a
-non-device-local dependency for that synchronization command.
-If no pname:dependencyFlags parameter is included or the
-ename:VK_DEPENDENCY_DEVICE_GROUP_BIT flag is not specified, then it defines
-device-local dependencies for that synchronization command, for all
-participating physical devices.
-
-Semaphore and event dependencies are device-local and only execute on the
-one physical device that performs the dependency.
-endif::VK_VERSION_1_1,VK_KHR_device_group[]
-
-
-[[synchronization-implicit]]
-== Implicit Synchronization Guarantees
-
-A small number of implicit ordering guarantees are provided by Vulkan,
-ensuring that the order in which commands are submitted is meaningful, and
-avoiding unnecessary complexity in common operations.
-
-[[synchronization-submission-order]]
-_Submission order_ is a fundamental ordering in Vulkan, giving meaning to
-the order in which <<fundamentals-queueoperation-command-types, action and
-synchronization commands>> are recorded and submitted to a single queue.
-Explicit and implicit ordering guarantees between commands in Vulkan all
-work on the premise that this ordering is meaningful.
-This order does not itself define any execution or memory dependencies;
-synchronization commands and other orderings within the API use this
-ordering to define their scopes.
-
-Submission order for any given set of commands is based on the order in
-which they were recorded to command buffers and then submitted.
-This order is determined as follows:
-
-  . The initial order is determined by the order in which
-    flink:vkQueueSubmit
-ifdef::VK_KHR_synchronization2[]
-    and flink:vkQueueSubmit2KHR
-endif::VK_KHR_synchronization2[]
-    commands are executed on the host, for a single queue, from first to
-    last.
-  . The order in which slink:VkSubmitInfo structures are specified in the
-    pname:pSubmits parameter of flink:vkQueueSubmit,
-ifdef::VK_KHR_synchronization2[]
-    or in which slink:VkSubmitInfo2KHR structures are specified in the
-    pname:pSubmits parameter of flink:vkQueueSubmit2KHR,
-endif::VK_KHR_synchronization2[]
-    from lowest index to highest.
-  . The order in which command buffers are specified in the
-    pname:pCommandBuffers member of slink:VkSubmitInfo
-ifdef::VK_KHR_synchronization2[]
-    or slink:VkSubmitInfo2KHR
-endif::VK_KHR_synchronization2[]
-    from lowest index to highest.
-  . The order in which commands were recorded to a command buffer on the
-    host, from first to last:
-  ** For commands recorded outside a render pass, this includes all other
-     commands recorded outside a render pass, including
-     flink:vkCmdBeginRenderPass and flink:vkCmdEndRenderPass commands; it
-     does not directly include commands inside a render pass.
-  ** For commands recorded inside a render pass, this includes all other
-     commands recorded inside the same subpass, including the
-     flink:vkCmdBeginRenderPass and flink:vkCmdEndRenderPass commands that
-     delimit the same render pass instance; it does not include commands
-     recorded to other subpasses.
-<<fundamentals-queueoperation-command-types, State commands>> do not execute
-any operations on the device, instead they set the state of the command
-buffer when they execute on the host, in the order that they are recorded.
-<<fundamentals-queueoperation-command-types, Action commands>> consume the
-current state of the command buffer when they are recorded, and will execute
-state changes on the device as required to match the recorded state.
-
-<<queries-order, Query commands>>, <<drawing-primitive-order, the order of
-primitives passing through the graphics pipeline>> and
-<<synchronization-image-barrier-layout-transition-order, image layout
-transitions as part of an image memory barrier>> provide additional
-guarantees based on submission order.
-
-Execution of <<synchronization-pipeline-stages-order, pipeline stages>>
-within a given command also has a loose ordering, dependent only on a single
-command.
-
-[[synchronization-signal-operation-order]]
-_Signal operation order_ is a fundamental ordering in Vulkan, giving meaning
-to the order in which semaphore and fence signal operations occur when
-submitted to a single queue.
-The signal operation order for queue operations is determined as follows:
-
-  . The initial order is determined by the order in which
-    flink:vkQueueSubmit
-ifdef::VK_KHR_synchronization2[]
-    and flink:vkQueueSubmit2KHR
-endif::VK_KHR_synchronization2[]
-    commands are executed on the host, for a single queue, from first to
-    last.
-  . The order in which slink:VkSubmitInfo structures are specified in the
-    pname:pSubmits parameter of flink:vkQueueSubmit,
-ifdef::VK_KHR_synchronization2[]
-    or in which slink:VkSubmitInfo2KHR structures are specified in the
-    pname:pSubmits parameter of flink:vkQueueSubmit2KHR,
-endif::VK_KHR_synchronization2[]
-    from lowest index to highest.
-  . The fence signal operation defined by the pname:fence parameter of a
-    flink:vkQueueSubmit,
-ifdef::VK_KHR_synchronization2[]
-    flink:vkQueueSubmit2KHR,
-endif::VK_KHR_synchronization2[]
-    or flink:vkQueueBindSparse command is ordered after all semaphore signal
-    operations defined by that command.
-
-Semaphore signal operations defined by a single slink:VkSubmitInfo,
-ifdef::VK_KHR_synchronization2[]
-slink:VkSubmitInfo2KHR,
-endif::VK_KHR_synchronization2[]
-or slink:VkBindSparseInfo structure are unordered with respect to other
-semaphore signal operations defined within the same structure.
-
-ifdef::VK_VERSION_1_2,VK_KHR_timeline_semaphore[]
-The flink:vkSignalSemaphore command does not execute on a queue but instead
-performs the signal operation from the host.
-The semaphore signal operation defined by executing a
-flink:vkSignalSemaphore command happens-after the flink:vkSignalSemaphore
-command is invoked and happens-before the command returns.
-
-[NOTE]
-.Note
-====
-When signaling timeline semaphores, it is the responsibility of the
-application to ensure that they are ordered such that the semaphore value is
-strictly increasing.
-Because the first synchronization scope for a semaphore signal operation
-contains all semaphore signal operations which occur earlier in submission
-order, all semaphore signal operations contained in any given batch are
-guaranteed to happen-after all semaphore signal operations contained in any
-previous batches.
-However, no ordering guarantee is provided between the semaphore signal
-operations defined within a single batch.
-This, combined with the requirement that timeline semaphore values strictly
-increase, means that it is invalid to signal the same timeline semaphore
-twice within a single batch.
-
-If an application wishes to ensure that some semaphore signal operation
-happens-after some other semaphore signal operation, it can submit a
-separate batch containing only semaphore signal operations, which will
-happen-after the semaphore signal operations in any earlier batches.
-
-When signaling a semaphore from the host, the only ordering guarantee is
-that the signal operation happens-after when flink:vkSignalSemaphore is
-called and happens-before it returns.
-Therefore, it is invalid to call fname:vkSignalSemaphore while there are any
-outstanding signal operations on that semaphore from any queue submissions
-unless those queue submissions have some dependency which ensures that they
-happen-after the host signal operation.
-One example of this would be if the pending signal operation is, itself,
-waiting on the same semaphore at a lower value and the call to
-fname:vkSignalSemaphore signals that lower value.
-Furthermore, if there are two or more processes or threads signaling the
-same timeline semaphore from the host, the application must ensure that the
-fname:vkSignalSemaphore with the lower semaphore value returns before
-fname:vkSignalSemaphore is called with the higher value.
-====
-endif::VK_VERSION_1_2,VK_KHR_timeline_semaphore[]
-
-
-[[synchronization-fences]]
-== Fences
-
-[open,refpage='VkFence',desc='Opaque handle to a fence object',type='handles']
---
-Fences are a synchronization primitive that can: be used to insert a
-dependency from a queue to the host.
-Fences have two states - signaled and unsignaled.
-A fence can: be signaled as part of the execution of a
-<<devsandqueues-submission, queue submission>> command.
-Fences can: be unsignaled on the host with flink:vkResetFences.
-Fences can: be waited on by the host with the flink:vkWaitForFences command,
-and the current state can: be queried with flink:vkGetFenceStatus.
-
-ifdef::VK_VERSION_1_1,VK_KHR_external_fence[]
-[[synchronization-fences-payloads]]
-The internal data of a fence may: include a reference to any resources and
-pending work associated with signal or unsignal operations performed on that
-fence object, collectively referred to as the fence's _payload_.
-Mechanisms to import and export that internal data to and from fences are
-provided <<VkExportFenceCreateInfo, below>>.
-These mechanisms indirectly enable applications to share fence state between
-two or more fences and other synchronization primitives across process and
-API boundaries.
-
-endif::VK_VERSION_1_1,VK_KHR_external_fence[]
-
-Fences are represented by sname:VkFence handles:
-
-include::{generated}/api/handles/VkFence.txt[]
---
-
-[open,refpage='vkCreateFence',desc='Create a new fence object',type='protos']
---
-To create a fence, call:
-
-include::{generated}/api/protos/vkCreateFence.txt[]
-
-  * pname:device is the logical device that creates the fence.
-  * pname:pCreateInfo is a pointer to a slink:VkFenceCreateInfo structure
-    containing information about how the fence is to be created.
-  * pname:pAllocator controls host memory allocation as described in the
-    <<memory-allocation, Memory Allocation>> chapter.
-  * pname:pFence is a pointer to a handle in which the resulting fence
-    object is returned.
-
-include::{generated}/validity/protos/vkCreateFence.txt[]
---
-
-[open,refpage='VkFenceCreateInfo',desc='Structure specifying parameters of a newly created fence',type='structs']
---
-The sname:VkFenceCreateInfo structure is defined as:
-
-include::{generated}/api/structs/VkFenceCreateInfo.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:flags is a bitmask of elink:VkFenceCreateFlagBits specifying the
-    initial state and behavior of the fence.
-
-include::{generated}/validity/structs/VkFenceCreateInfo.txt[]
---
-
-[open,refpage='VkFenceCreateFlagBits',desc='Bitmask specifying initial state and behavior of a fence',type='enums']
---
-include::{generated}/api/enums/VkFenceCreateFlagBits.txt[]
-
-  * ename:VK_FENCE_CREATE_SIGNALED_BIT specifies that the fence object is
-    created in the signaled state.
-    Otherwise, it is created in the unsignaled state.
---
-
-[open,refpage='VkFenceCreateFlags',desc='Bitmask of VkFenceCreateFlagBits',type='flags']
---
-include::{generated}/api/flags/VkFenceCreateFlags.txt[]
-
-tname:VkFenceCreateFlags is a bitmask type for setting a mask of zero or
-more elink:VkFenceCreateFlagBits.
---
-
-ifdef::VK_VERSION_1_1,VK_KHR_external_fence[]
-[open,refpage='VkExportFenceCreateInfo',desc='Structure specifying handle types that can be exported from a fence',type='structs']
---
-To create a fence whose payload can: be exported to external handles, add a
-slink:VkExportFenceCreateInfo structure to the pname:pNext chain of the
-slink:VkFenceCreateInfo structure.
-The sname:VkExportFenceCreateInfo structure is defined as:
-
-include::{generated}/api/structs/VkExportFenceCreateInfo.txt[]
-
-ifdef::VK_KHR_external_fence[]
-or the equivalent
-
-include::{generated}/api/structs/VkExportFenceCreateInfoKHR.txt[]
-endif::VK_KHR_external_fence[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:handleTypes is a bitmask of
-    elink:VkExternalFenceHandleTypeFlagBits specifying one or more fence
-    handle types the application can: export from the resulting fence.
-    The application can: request multiple handle types for the same fence.
-
-.Valid Usage
-****
-  * [[VUID-VkExportFenceCreateInfo-handleTypes-01446]]
-    The bits in pname:handleTypes must: be supported and compatible, as
-    reported by slink:VkExternalFenceProperties
-****
-
-include::{generated}/validity/structs/VkExportFenceCreateInfo.txt[]
---
-endif::VK_VERSION_1_1,VK_KHR_external_fence[]
-
-ifdef::VK_KHR_external_fence_win32[]
-[open,refpage='VkExportFenceWin32HandleInfoKHR',desc='Structure specifying additional attributes of Windows handles exported from a fence',type='structs']
---
-To specify additional attributes of NT handles exported from a fence, add a
-slink:VkExportFenceWin32HandleInfoKHR structure to the pname:pNext chain of
-the slink:VkFenceCreateInfo structure.
-The sname:VkExportFenceWin32HandleInfoKHR structure is defined as:
-
-include::{generated}/api/structs/VkExportFenceWin32HandleInfoKHR.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:pAttributes is a pointer to a Windows code:SECURITY_ATTRIBUTES
-    structure specifying security attributes of the handle.
-  * pname:dwAccess is a code:DWORD specifying access rights of the handle.
-  * pname:name is a null-terminated UTF-16 string to associate with the
-    underlying synchronization primitive referenced by NT handles exported
-    from the created fence.
-
-If slink:VkExportFenceCreateInfo is not inluded in the same pname:pNext
-chain, this structure is ignored.
-
-If slink:VkExportFenceCreateInfo is included in the pname:pNext chain of
-slink:VkFenceCreateInfo with a Windows pname:handleType, but either
-sname:VkExportFenceWin32HandleInfoKHR is not included in the pname:pNext
-chain, or if it is but pname:pAttributes is set to `NULL`, default security
-descriptor values will be used, and child processes created by the
-application will not inherit the handle, as described in the MSDN
-documentation for "`Synchronization Object Security and Access Rights`"^1^.
-Further, if the structure is not present, the access rights will be
-
-code:DXGI_SHARED_RESOURCE_READ | code:DXGI_SHARED_RESOURCE_WRITE
-
-for handles of the following types:
-
-ename:VK_EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_WIN32_BIT
-
-1::
-    https://docs.microsoft.com/en-us/windows/win32/sync/synchronization-object-security-and-access-rights
-
-.Valid Usage
-****
-  * [[VUID-VkExportFenceWin32HandleInfoKHR-handleTypes-01447]]
-    If slink:VkExportFenceCreateInfo::pname:handleTypes does not include
-    ename:VK_EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_WIN32_BIT, a
-    sname:VkExportFenceWin32HandleInfoKHR structure must: not be included in
-    the pname:pNext chain of slink:VkFenceCreateInfo
-****
-
-include::{generated}/validity/structs/VkExportFenceWin32HandleInfoKHR.txt[]
---
-
-[open,refpage='vkGetFenceWin32HandleKHR',desc='Get a Windows HANDLE for a fence',type='protos']
---
-To export a Windows handle representing the state of a fence, call:
-
-include::{generated}/api/protos/vkGetFenceWin32HandleKHR.txt[]
-
-  * pname:device is the logical device that created the fence being
-    exported.
-  * pname:pGetWin32HandleInfo is a pointer to a
-    slink:VkFenceGetWin32HandleInfoKHR structure containing parameters of
-    the export operation.
-  * pname:pHandle will return the Windows handle representing the fence
-    state.
-
-For handle types defined as NT handles, the handles returned by
-fname:vkGetFenceWin32HandleKHR are owned by the application.
-To avoid leaking resources, the application must: release ownership of them
-using the code:CloseHandle system call when they are no longer needed.
-
-Exporting a Windows handle from a fence may: have side effects depending on
-the transference of the specified handle type, as described in
-<<synchronization-fences-importing,Importing Fence Payloads>>.
-
-include::{generated}/validity/protos/vkGetFenceWin32HandleKHR.txt[]
---
-
-[open,refpage='VkFenceGetWin32HandleInfoKHR',desc='Structure describing a Win32 handle fence export operation',type='structs']
---
-The sname:VkFenceGetWin32HandleInfoKHR structure is defined as:
-
-include::{generated}/api/structs/VkFenceGetWin32HandleInfoKHR.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:fence is the fence from which state will be exported.
-  * pname:handleType is a elink:VkExternalFenceHandleTypeFlagBits value
-    specifying the type of handle requested.
-
-The properties of the handle returned depend on the value of
-pname:handleType.
-See elink:VkExternalFenceHandleTypeFlagBits for a description of the
-properties of the defined external fence handle types.
-
-.Valid Usage
-****
-  * [[VUID-VkFenceGetWin32HandleInfoKHR-handleType-01448]]
-    pname:handleType must: have been included in
-    slink:VkExportFenceCreateInfo::pname:handleTypes when the pname:fence's
-    current payload was created
-  * [[VUID-VkFenceGetWin32HandleInfoKHR-handleType-01449]]
-    If pname:handleType is defined as an NT handle,
-    flink:vkGetFenceWin32HandleKHR must: be called no more than once for
-    each valid unique combination of pname:fence and pname:handleType
-  * [[VUID-VkFenceGetWin32HandleInfoKHR-fence-01450]]
-    pname:fence must: not currently have its payload replaced by an imported
-    payload as described below in
-    <<synchronization-fences-importing,Importing Fence Payloads>> unless
-    that imported payload's handle type was included in
-    slink:VkExternalFenceProperties::pname:exportFromImportedHandleTypes for
-    pname:handleType
-  * [[VUID-VkFenceGetWin32HandleInfoKHR-handleType-01451]]
-    If pname:handleType refers to a handle type with copy payload
-    transference semantics, pname:fence must: be signaled, or have an
-    associated <<synchronization-fences-signaling,fence signal operation>>
-    pending execution
-  * [[VUID-VkFenceGetWin32HandleInfoKHR-handleType-01452]]
-    pname:handleType must: be defined as an NT handle or a global share
-    handle
-****
-
-include::{generated}/validity/structs/VkFenceGetWin32HandleInfoKHR.txt[]
---
-endif::VK_KHR_external_fence_win32[]
-
-ifdef::VK_KHR_external_fence_fd[]
-[open,refpage='vkGetFenceFdKHR',desc='Get a POSIX file descriptor handle for a fence',type='protos']
---
-To export a POSIX file descriptor representing the payload of a fence, call:
-
-include::{generated}/api/protos/vkGetFenceFdKHR.txt[]
-
-  * pname:device is the logical device that created the fence being
-    exported.
-  * pname:pGetFdInfo is a pointer to a slink:VkFenceGetFdInfoKHR structure
-    containing parameters of the export operation.
-  * pname:pFd will return the file descriptor representing the fence
-    payload.
-
-Each call to fname:vkGetFenceFdKHR must: create a new file descriptor and
-transfer ownership of it to the application.
-To avoid leaking resources, the application must: release ownership of the
-file descriptor when it is no longer needed.
-
-[NOTE]
-.Note
-====
-Ownership can be released in many ways.
-For example, the application can call code:close() on the file descriptor,
-or transfer ownership back to Vulkan by using the file descriptor to import
-a fence payload.
-====
-
-If pname:pGetFdInfo->handleType is
-ename:VK_EXTERNAL_FENCE_HANDLE_TYPE_SYNC_FD_BIT and the fence is signaled at
-the time fname:vkGetFenceFdKHR is called, pname:pFd may: return the value
-`-1` instead of a valid file descriptor.
-
-Where supported by the operating system, the implementation must: set the
-file descriptor to be closed automatically when an code:execve system call
-is made.
-
-Exporting a file descriptor from a fence may: have side effects depending on
-the transference of the specified handle type, as described in
-<<synchronization-fences-importing,Importing Fence State>>.
-
-include::{generated}/validity/protos/vkGetFenceFdKHR.txt[]
---
-
-[open,refpage='VkFenceGetFdInfoKHR',desc='Structure describing a POSIX FD fence export operation',type='structs']
---
-The sname:VkFenceGetFdInfoKHR structure is defined as:
-
-include::{generated}/api/structs/VkFenceGetFdInfoKHR.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:fence is the fence from which state will be exported.
-  * pname:handleType is a elink:VkExternalFenceHandleTypeFlagBits value
-    specifying the type of handle requested.
-
-The properties of the file descriptor returned depend on the value of
-pname:handleType.
-See elink:VkExternalFenceHandleTypeFlagBits for a description of the
-properties of the defined external fence handle types.
-
-.Valid Usage
-****
-  * [[VUID-VkFenceGetFdInfoKHR-handleType-01453]]
-    pname:handleType must: have been included in
-    slink:VkExportFenceCreateInfo::pname:handleTypes when pname:fence's
-    current payload was created
-  * [[VUID-VkFenceGetFdInfoKHR-handleType-01454]]
-    If pname:handleType refers to a handle type with copy payload
-    transference semantics, pname:fence must: be signaled, or have an
-    associated <<synchronization-fences-signaling,fence signal operation>>
-    pending execution
-  * [[VUID-VkFenceGetFdInfoKHR-fence-01455]]
-    pname:fence must: not currently have its payload replaced by an imported
-    payload as described below in
-    <<synchronization-fences-importing,Importing Fence Payloads>> unless
-    that imported payload's handle type was included in
-    slink:VkExternalFenceProperties::pname:exportFromImportedHandleTypes for
-    pname:handleType
-  * [[VUID-VkFenceGetFdInfoKHR-handleType-01456]]
-    pname:handleType must: be defined as a POSIX file descriptor handle
-****
-
-include::{generated}/validity/structs/VkFenceGetFdInfoKHR.txt[]
---
-endif::VK_KHR_external_fence_fd[]
-
-[open,refpage='vkDestroyFence',desc='Destroy a fence object',type='protos']
---
-To destroy a fence, call:
-
-include::{generated}/api/protos/vkDestroyFence.txt[]
-
-  * pname:device is the logical device that destroys the fence.
-  * pname:fence is the handle of the fence to destroy.
-  * pname:pAllocator controls host memory allocation as described in the
-    <<memory-allocation, Memory Allocation>> chapter.
-
-.Valid Usage
-****
-  * [[VUID-vkDestroyFence-fence-01120]]
-    All <<devsandqueues-submission, queue submission>> commands that refer
-    to pname:fence must: have completed execution
-  * [[VUID-vkDestroyFence-fence-01121]]
-    If sname:VkAllocationCallbacks were provided when pname:fence was
-    created, a compatible set of callbacks must: be provided here
-  * [[VUID-vkDestroyFence-fence-01122]]
-    If no sname:VkAllocationCallbacks were provided when pname:fence was
-    created, pname:pAllocator must: be `NULL`
-****
-
-include::{generated}/validity/protos/vkDestroyFence.txt[]
---
-
-[open,refpage='vkGetFenceStatus',desc='Return the status of a fence',type='protos']
---
-To query the status of a fence from the host, call:
-
-include::{generated}/api/protos/vkGetFenceStatus.txt[]
-
-  * pname:device is the logical device that owns the fence.
-  * pname:fence is the handle of the fence to query.
-
-Upon success, fname:vkGetFenceStatus returns the status of the fence object,
-with the following return codes:
-
-.Fence Object Status Codes
-[width="80%",options="header"]
-|====
-| Status | Meaning
-| ename:VK_SUCCESS | The fence specified by pname:fence is signaled.
-| ename:VK_NOT_READY | The fence specified by pname:fence is unsignaled.
-| ename:VK_ERROR_DEVICE_LOST | The device has been lost.  See <<devsandqueues-lost-device,Lost Device>>.
-|====
-
-If a <<devsandqueues-submission, queue submission>> command is pending
-execution, then the value returned by this command may: immediately be out
-of date.
-
-If the device has been lost (see <<devsandqueues-lost-device,Lost Device>>),
-fname:vkGetFenceStatus may: return any of the above status codes.
-If the device has been lost and fname:vkGetFenceStatus is called repeatedly,
-it will eventually return either ename:VK_SUCCESS or
-ename:VK_ERROR_DEVICE_LOST.
-
-include::{generated}/validity/protos/vkGetFenceStatus.txt[]
---
-
-[[synchronization-fences-unsignaling]]
-[open,refpage='vkResetFences',desc='Resets one or more fence objects',type='protos']
---
-To set the state of fences to unsignaled from the host, call:
-
-include::{generated}/api/protos/vkResetFences.txt[]
-
-  * pname:device is the logical device that owns the fences.
-  * pname:fenceCount is the number of fences to reset.
-  * pname:pFences is a pointer to an array of fence handles to reset.
-
-ifdef::VK_VERSION_1_1,VK_KHR_external_fence[]
-
-If any member of pname:pFences currently has its
-<<synchronization-fences-importing, payload imported>> with temporary
-permanence, that fence's prior permanent payload is first restored.
-The remaining operations described therefore operate on the restored
-payload.
-
-endif::VK_VERSION_1_1,VK_KHR_external_fence[]
-
-When flink:vkResetFences is executed on the host, it defines a _fence
-unsignal operation_ for each fence, which resets the fence to the unsignaled
-state.
-
-If any member of pname:pFences is already in the unsignaled state when
-flink:vkResetFences is executed, then flink:vkResetFences has no effect on
-that fence.
-
-.Valid Usage
-****
-  * [[VUID-vkResetFences-pFences-01123]]
-    Each element of pname:pFences must: not be currently associated with any
-    queue command that has not yet completed execution on that queue
-****
-
-include::{generated}/validity/protos/vkResetFences.txt[]
---
-
-[[synchronization-fences-signaling]]
-When a fence is submitted to a queue as part of a
-<<devsandqueues-submission, queue submission>> command, it defines a memory
-dependency on the batches that were submitted as part of that command, and
-defines a _fence signal operation_ which sets the fence to the signaled
-state.
-
-The first <<synchronization-dependencies-scopes, synchronization scope>>
-includes every batch submitted in the same <<devsandqueues-submission, queue
-submission>> command.
-Fence signal operations that are defined by flink:vkQueueSubmit additionally
-include in the first synchronization scope all commands that occur earlier
-in <<synchronization-submission-order,submission order>>.
-Fence signal operations that are defined by flink:vkQueueSubmit or
-flink:vkQueueBindSparse additionally include in the first synchronization
-scope any semaphore and fence signal operations that occur earlier in
-<<synchronization-signal-operation-order,signal operation order>>.
-
-The second <<synchronization-dependencies-scopes, synchronization scope>>
-only includes the fence signal operation.
-
-The first <<synchronization-dependencies-access-scopes, access scope>>
-includes all memory access performed by the device.
-
-The second <<synchronization-dependencies-access-scopes, access scope>> is
-empty.
-
-[open,refpage='vkWaitForFences',desc='Wait for one or more fences to become signaled',type='protos']
---
-To wait for one or more fences to enter the signaled state on the host,
-call:
-
-include::{generated}/api/protos/vkWaitForFences.txt[]
-
-  * pname:device is the logical device that owns the fences.
-  * pname:fenceCount is the number of fences to wait on.
-  * pname:pFences is a pointer to an array of pname:fenceCount fence
-    handles.
-  * pname:waitAll is the condition that must: be satisfied to successfully
-    unblock the wait.
-    If pname:waitAll is ename:VK_TRUE, then the condition is that all fences
-    in pname:pFences are signaled.
-    Otherwise, the condition is that at least one fence in pname:pFences is
-    signaled.
-  * pname:timeout is the timeout period in units of nanoseconds.
-    pname:timeout is adjusted to the closest value allowed by the
-    implementation-dependent timeout accuracy, which may: be substantially
-    longer than one nanosecond, and may: be longer than the requested
-    period.
-
-If the condition is satisfied when fname:vkWaitForFences is called, then
-fname:vkWaitForFences returns immediately.
-If the condition is not satisfied at the time fname:vkWaitForFences is
-called, then fname:vkWaitForFences will block and wait until the condition
-is satisfied or the pname:timeout has expired, whichever is sooner.
-
-If pname:timeout is zero, then fname:vkWaitForFences does not wait, but
-simply returns the current state of the fences.
-ename:VK_TIMEOUT will be returned in this case if the condition is not
-satisfied, even though no actual wait was performed.
-
-If the condition is satisfied before the pname:timeout has expired,
-fname:vkWaitForFences returns ename:VK_SUCCESS.
-Otherwise, fname:vkWaitForFences returns ename:VK_TIMEOUT after the
-pname:timeout has expired.
-
-If device loss occurs (see <<devsandqueues-lost-device,Lost Device>>) before
-the timeout has expired, fname:vkWaitForFences must: return in finite time
-with either ename:VK_SUCCESS or ename:VK_ERROR_DEVICE_LOST.
-
-[NOTE]
-.Note
-====
-While we guarantee that fname:vkWaitForFences must: return in finite time,
-no guarantees are made that it returns immediately upon device loss.
-However, the client can reasonably expect that the delay will be on the
-order of seconds and that calling fname:vkWaitForFences will not result in a
-permanently (or seemingly permanently) dead process.
-====
-
-include::{generated}/validity/protos/vkWaitForFences.txt[]
---
-
-[[synchronization-fences-waiting]]
-An execution dependency is defined by waiting for a fence to become
-signaled, either via flink:vkWaitForFences or by polling on
-flink:vkGetFenceStatus.
-
-The first <<synchronization-dependencies-scopes, synchronization scope>>
-includes only the fence signal operation.
-
-The second <<synchronization-dependencies-scopes, synchronization scope>>
-includes the host operations of flink:vkWaitForFences or
-flink:vkGetFenceStatus indicating that the fence has become signaled.
-
-[NOTE]
-.Note
-====
-Signaling a fence and waiting on the host does not guarantee that the
-results of memory accesses will be visible to the host, as the access scope
-of a memory dependency defined by a fence only includes device access.
-A <<synchronization-memory-barriers, memory barrier>> or other memory
-dependency must: be used to guarantee this.
-See the description of <<synchronization-host-access-types, host access
-types>> for more information.
-====
-
-ifdef::VK_EXT_display_control[]
-include::VK_EXT_display_control/fence_events.txt[]
-endif::VK_EXT_display_control[]
-
-
-ifdef::VK_VERSION_1_1,VK_KHR_external_fence[]
-[[synchronization-fences-importing]]
-=== Importing Fence Payloads
-
-Applications can: import a fence payload into an existing fence using an
-external fence handle.
-The effects of the import operation will be either temporary or permanent,
-as specified by the application.
-If the import is temporary, the fence will be _restored_ to its permanent
-state the next time that fence is passed to flink:vkResetFences.
-
-[NOTE]
-.Note
-====
-Restoring a fence to its prior permanent payload is a distinct operation
-from resetting a fence payload.
-See flink:vkResetFences for more detail.
-====
-
-Performing a subsequent temporary import on a fence before resetting it has
-no effect on this requirement; the next unsignal of the fence must: still
-restore its last permanent state.
-A permanent payload import behaves as if the target fence was destroyed, and
-a new fence was created with the same handle but the imported payload.
-Because importing a fence payload temporarily or permanently detaches the
-existing payload from a fence, similar usage restrictions to those applied
-to fname:vkDestroyFence are applied to any command that imports a fence
-payload.
-Which of these import types is used is referred to as the import operation's
-_permanence_.
-Each handle type supports either one or both types of permanence.
-
-The implementation must: perform the import operation by either referencing
-or copying the payload referred to by the specified external fence handle,
-depending on the handle's type.
-The import method used is referred to as the handle type's _transference_.
-When using handle types with reference transference, importing a payload to
-a fence adds the fence to the set of all fences sharing that payload.
-This set includes the fence from which the payload was exported.
-Fence signaling, waiting, and resetting operations performed on any fence in
-the set must: behave as if the set were a single fence.
-Importing a payload using handle types with copy transference creates a
-duplicate copy of the payload at the time of import, but makes no further
-reference to it.
-Fence signaling, waiting, and resetting operations performed on the target
-of copy imports must: not affect any other fence or payload.
-
-Export operations have the same transference as the specified handle type's
-import operations.
-Additionally, exporting a fence payload to a handle with copy transference
-has the same side effects on the source fence's payload as executing a fence
-reset operation.
-If the fence was using a temporarily imported payload, the fence's prior
-permanent payload will be restored.
-
-ifdef::VK_KHR_external_fence_win32,VK_KHR_external_fence_fd[]
-[NOTE]
-.Note
-====
-The
-ifdef::VK_KHR_external_fence_win32+VK_KHR_external_fence_fd[tables]
-ifndef::VK_KHR_external_fence_win32+VK_KHR_external_fence_fd[table]
-ifdef::VK_KHR_external_fence_win32[]
-<<synchronization-fence-handletypes-win32,Handle Types Supported by
-sname:VkImportFenceWin32HandleInfoKHR>>
-endif::VK_KHR_external_fence_win32[]
-ifdef::VK_KHR_external_fence_win32+VK_KHR_external_fence_fd[and]
-ifdef::VK_KHR_external_fence_fd[]
-<<synchronization-fence-handletypes-fd,Handle Types Supported by
-sname:VkImportFenceFdInfoKHR>>
-endif::VK_KHR_external_fence_fd[]
-ifdef::VK_KHR_external_fence_win32+VK_KHR_external_fence_fd[define]
-ifndef::VK_KHR_external_fence_win32+VK_KHR_external_fence_fd[defines]
-the permanence and transference of each handle type.
-====
-endif::VK_KHR_external_fence_win32,VK_KHR_external_fence_fd[]
-
-<<fundamentals-threadingbehavior,External synchronization>> allows
-implementations to modify an object's internal state, i.e. payload, without
-internal synchronization.
-However, for fences sharing a payload across processes, satisfying the
-external synchronization requirements of sname:VkFence parameters as if all
-fences in the set were the same object is sometimes infeasible.
-Satisfying valid usage constraints on the state of a fence would similarly
-require impractical coordination or levels of trust between processes.
-Therefore, these constraints only apply to a specific fence handle, not to
-its payload.
-For distinct fence objects which share a payload:
-
-  * If multiple commands which queue a signal operation, or which unsignal a
-    fence, are called concurrently, behavior will be as if the commands were
-    called in an arbitrary sequential order.
-  * If a queue submission command is called with a fence that is sharing a
-    payload, and the payload is already associated with another queue
-    command that has not yet completed execution, either one or both of the
-    commands will cause the fence to become signaled when they complete
-    execution.
-  * If a fence payload is reset while it is associated with a queue command
-    that has not yet completed execution, the payload will become
-    unsignaled, but may: become signaled again when the command completes
-    execution.
-  * In the preceding cases, any of the devices associated with the fences
-    sharing the payload may: be lost, or any of the queue submission or
-    fence reset commands may: return ename:VK_ERROR_INITIALIZATION_FAILED.
-
-Other than these non-deterministic results, behavior is well defined.
-In particular:
-
-  * The implementation must: not crash or enter an internally inconsistent
-    state where future valid Vulkan commands might cause undefined: results,
-  * Timeouts on future wait commands on fences sharing the payload must: be
-    effective.
-
-[NOTE]
-.Note
-====
-These rules allow processes to synchronize access to shared memory without
-trusting each other.
-However, such processes must still be cautious not to use the shared fence
-for more than synchronizing access to the shared memory.
-For example, a process should not use a fence with shared payload to tell
-when commands it submitted to a queue have completed and objects used by
-those commands may be destroyed, since the other process can accidentally or
-maliciously cause the fence to signal before the commands actually complete.
-====
-
-When a fence is using an imported payload, its
-slink:VkExportFenceCreateInfo::pname:handleTypes value is that specified
-when creating the fence from which the payload was exported, rather than
-that specified when creating the fence.
-Additionally,
-slink:VkExternalFenceProperties::pname:exportFromImportedHandleTypes
-restricts which handle types can: be exported from such a fence based on the
-specific handle type used to import the current payload.
-ifdef::VK_KHR_swapchain[]
-Passing a fence to flink:vkAcquireNextImageKHR is equivalent to temporarily
-importing a fence payload to that fence.
-
-[NOTE]
-.Note
-====
-Because the exportable handle types of an imported fence correspond to its
-current imported payload, and flink:vkAcquireNextImageKHR behaves the same
-as a temporary import operation for which the source fence is opaque to the
-application, applications have no way of determining whether any external
-handle types can: be exported from a fence in this state.
-Therefore, applications must: not attempt to export handles from fences
-using a temporarily imported payload from flink:vkAcquireNextImageKHR.
-====
-endif::VK_KHR_swapchain[]
-
-When importing a fence payload, it is the responsibility of the application
-to ensure the external handles meet all valid usage requirements.
-However, implementations must: perform sufficient validation of external
-handles to ensure that the operation results in a valid fence which will not
-cause program termination, device loss, queue stalls, host thread stalls, or
-corruption of other resources when used as allowed according to its import
-parameters.
-If the external handle provided does not meet these requirements, the
-implementation must: fail the fence payload import operation with the error
-code ename:VK_ERROR_INVALID_EXTERNAL_HANDLE.
-endif::VK_VERSION_1_1,VK_KHR_external_fence[]
-
-ifdef::VK_KHR_external_fence_win32[]
-[open,refpage='vkImportFenceWin32HandleKHR',desc='Import a fence from a Windows HANDLE',type='protos']
---
-To import a fence payload from a Windows handle, call:
-
-include::{generated}/api/protos/vkImportFenceWin32HandleKHR.txt[]
-
-  * pname:device is the logical device that created the fence.
-  * pname:pImportFenceWin32HandleInfo is a pointer to a
-    slink:VkImportFenceWin32HandleInfoKHR structure specifying the fence and
-    import parameters.
-
-Importing a fence payload from Windows handles does not transfer ownership
-of the handle to the Vulkan implementation.
-For handle types defined as NT handles, the application must: release
-ownership using the code:CloseHandle system call when the handle is no
-longer needed.
-
-Applications can: import the same fence payload into multiple instances of
-Vulkan, into the same instance from which it was exported, and multiple
-times into a given Vulkan instance.
-
-.Valid Usage
-****
-  * [[VUID-vkImportFenceWin32HandleKHR-fence-04448]]
-    pname:fence must: not be associated with any queue command that has not
-    yet completed execution on that queue
-****
-
-include::{generated}/validity/protos/vkImportFenceWin32HandleKHR.txt[]
---
-
-[open,refpage='VkImportFenceWin32HandleInfoKHR',desc='(None)',type='structs']
---
-The sname:VkImportFenceWin32HandleInfoKHR structure is defined as:
-
-include::{generated}/api/structs/VkImportFenceWin32HandleInfoKHR.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:fence is the fence into which the state will be imported.
-  * pname:flags is a bitmask of elink:VkFenceImportFlagBits specifying
-    additional parameters for the fence payload import operation.
-  * pname:handleType is a elink:VkExternalFenceHandleTypeFlagBits value
-    specifying the type of pname:handle.
-  * pname:handle is `NULL` or the external handle to import.
-  * pname:name is `NULL` or a null-terminated UTF-16 string naming the
-    underlying synchronization primitive to import.
-
-The handle types supported by pname:handleType are:
-
-[[synchronization-fence-handletypes-win32]]
-.Handle Types Supported by sname:VkImportFenceWin32HandleInfoKHR
-[width="80%",options="header"]
-|====
-| Handle Type                                                  | Transference | Permanence Supported
-| ename:VK_EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_WIN32_BIT     | Reference    | Temporary,Permanent
-| ename:VK_EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT | Reference    | Temporary,Permanent
-|====
-
-.Valid Usage
-****
-  * [[VUID-VkImportFenceWin32HandleInfoKHR-handleType-01457]]
-    pname:handleType must: be a value included in the
-    <<synchronization-fence-handletypes-win32, Handle Types Supported by
-    sname:VkImportFenceWin32HandleInfoKHR>> table
-  * [[VUID-VkImportFenceWin32HandleInfoKHR-handleType-01459]]
-    If pname:handleType is not
-    ename:VK_EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_WIN32_BIT, pname:name must:
-    be `NULL`
-  * [[VUID-VkImportFenceWin32HandleInfoKHR-handleType-01460]]
-    If pname:handle is `NULL`, pname:name must: name a valid synchronization
-    primitive of the type specified by pname:handleType
-  * [[VUID-VkImportFenceWin32HandleInfoKHR-handleType-01461]]
-    If pname:name is `NULL`, pname:handle must: be a valid handle of the
-    type specified by pname:handleType
-  * [[VUID-VkImportFenceWin32HandleInfoKHR-handle-01462]]
-    If pname:handle is not `NULL`, pname:name must: be `NULL`
-  * [[VUID-VkImportFenceWin32HandleInfoKHR-handle-01539]]
-    If pname:handle is not `NULL`, it must: obey any requirements listed for
-    pname:handleType in <<external-fence-handle-types-compatibility,external
-    fence handle types compatibility>>
-  * [[VUID-VkImportFenceWin32HandleInfoKHR-name-01540]]
-    If pname:name is not `NULL`, it must: obey any requirements listed for
-    pname:handleType in <<external-fence-handle-types-compatibility,external
-    fence handle types compatibility>>
-****
-
-include::{generated}/validity/structs/VkImportFenceWin32HandleInfoKHR.txt[]
---
-endif::VK_KHR_external_fence_win32[]
-
-ifdef::VK_KHR_external_fence_fd[]
-[open,refpage='vkImportFenceFdKHR',desc='Import a fence from a POSIX file descriptor',type='protos']
---
-To import a fence payload from a POSIX file descriptor, call:
-
-include::{generated}/api/protos/vkImportFenceFdKHR.txt[]
-
-  * pname:device is the logical device that created the fence.
-  * pname:pImportFenceFdInfo is a pointer to a slink:VkImportFenceFdInfoKHR
-    structure specifying the fence and import parameters.
-
-Importing a fence payload from a file descriptor transfers ownership of the
-file descriptor from the application to the Vulkan implementation.
-The application must: not perform any operations on the file descriptor
-after a successful import.
-
-Applications can: import the same fence payload into multiple instances of
-Vulkan, into the same instance from which it was exported, and multiple
-times into a given Vulkan instance.
-
-.Valid Usage
-****
-  * [[VUID-vkImportFenceFdKHR-fence-01463]]
-    pname:fence must: not be associated with any queue command that has not
-    yet completed execution on that queue
-****
-
-include::{generated}/validity/protos/vkImportFenceFdKHR.txt[]
---
-
-[open,refpage='VkImportFenceFdInfoKHR',desc='(None)',type='structs']
---
-The sname:VkImportFenceFdInfoKHR structure is defined as:
-
-include::{generated}/api/structs/VkImportFenceFdInfoKHR.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:fence is the fence into which the payload will be imported.
-  * pname:flags is a bitmask of elink:VkFenceImportFlagBits specifying
-    additional parameters for the fence payload import operation.
-  * pname:handleType is a elink:VkExternalFenceHandleTypeFlagBits value
-    specifying the type of pname:fd.
-  * pname:fd is the external handle to import.
-
-The handle types supported by pname:handleType are:
-
-[[synchronization-fence-handletypes-fd]]
-.Handle Types Supported by sname:VkImportFenceFdInfoKHR
-[width="80%",options="header"]
-|====
-| Handle Type                                           | Transference | Permanence Supported
-| ename:VK_EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_FD_BIT | Reference    | Temporary,Permanent
-| ename:VK_EXTERNAL_FENCE_HANDLE_TYPE_SYNC_FD_BIT   | Copy         | Temporary
-|====
-
-.Valid Usage
-****
-  * [[VUID-VkImportFenceFdInfoKHR-handleType-01464]]
-    pname:handleType must: be a value included in the
-    <<synchronization-fence-handletypes-fd, Handle Types Supported by
-    sname:VkImportFenceFdInfoKHR>> table
-  * [[VUID-VkImportFenceFdInfoKHR-fd-01541]]
-    pname:fd must: obey any requirements listed for pname:handleType in
-    <<external-fence-handle-types-compatibility,external fence handle types
-    compatibility>>
-****
-
-If pname:handleType is ename:VK_EXTERNAL_FENCE_HANDLE_TYPE_SYNC_FD_BIT, the
-special value `-1` for pname:fd is treated like a valid sync file descriptor
-referring to an object that has already signaled.
-The import operation will succeed and the sname:VkFence will have a
-temporarily imported payload as if a valid file descriptor had been
-provided.
-
-[NOTE]
-.Note
-====
-This special behavior for importing an invalid sync file descriptor allows
-easier interoperability with other system APIs which use the convention that
-an invalid sync file descriptor represents work that has already completed
-and does not need to be waited for.
-It is consistent with the option for implementations to return a `-1` file
-descriptor when exporting a ename:VK_EXTERNAL_FENCE_HANDLE_TYPE_SYNC_FD_BIT
-from a sname:VkFence which is signaled.
-====
-
-include::{generated}/validity/structs/VkImportFenceFdInfoKHR.txt[]
---
-endif::VK_KHR_external_fence_fd[]
-
-ifdef::VK_VERSION_1_1,VK_KHR_external_fence[]
-ifdef::VK_KHR_external_fence_win32,VK_KHR_external_fence_fd[]
-[open,refpage='VkFenceImportFlagBits',desc='Bitmask specifying additional parameters of fence payload import',type='enums']
---
-Bits which can: be set in
-
-ifdef::VK_KHR_external_fence_win32[]
-  * slink:VkImportFenceWin32HandleInfoKHR::pname:flags
-endif::VK_KHR_external_fence_win32[]
-ifdef::VK_KHR_external_fence_fd[]
-  * slink:VkImportFenceFdInfoKHR::pname:flags
-endif::VK_KHR_external_fence_fd[]
-
-specifying additional parameters of a fence import operation are:
-
-include::{generated}/api/enums/VkFenceImportFlagBits.txt[]
-
-ifdef::VK_KHR_external_fence[]
-or the equivalent
-
-include::{generated}/api/enums/VkFenceImportFlagBitsKHR.txt[]
-endif::VK_KHR_external_fence[]
-
-  * ename:VK_FENCE_IMPORT_TEMPORARY_BIT specifies that the fence payload
-    will be imported only temporarily, as described in
-    <<synchronization-fences-importing,Importing Fence Payloads>>,
-    regardless of the permanence of pname:handleType.
---
-
-[open,refpage='VkFenceImportFlags',desc='Bitmask of VkFenceImportFlagBits',type='flags']
---
-include::{generated}/api/flags/VkFenceImportFlags.txt[]
-
-ifdef::VK_KHR_external_fence[]
-or the equivalent
-
-include::{generated}/api/flags/VkFenceImportFlagsKHR.txt[]
-endif::VK_KHR_external_fence[]
-
-tname:VkFenceImportFlags is a bitmask type for setting a mask of zero or
-more elink:VkFenceImportFlagBits.
---
-endif::VK_KHR_external_fence_win32,VK_KHR_external_fence_fd[]
-endif::VK_VERSION_1_1,VK_KHR_external_fence[]
-
-
-[[synchronization-semaphores]]
-== Semaphores
-
-[open,refpage='VkSemaphore',desc='Opaque handle to a semaphore object',type='handles']
---
-Semaphores are a synchronization primitive that can: be used to insert a
-dependency
-ifndef::VK_VERSION_1_2,VK_KHR_timeline_semaphore[]
-between queue operations.
-Semaphores have two states - signaled and unsignaled.
-endif::VK_VERSION_1_2,VK_KHR_timeline_semaphore[]
-ifdef::VK_VERSION_1_2,VK_KHR_timeline_semaphore[]
-between queue operations or between a queue operation and the host.
-<<glossary, Binary semaphores>> have two states - signaled and unsignaled.
-<<glossary, Timeline semaphores>> have a strictly increasing 64-bit unsigned
-integer payload and are signaled with respect to a particular reference
-value.
-endif::VK_VERSION_1_2,VK_KHR_timeline_semaphore[]
-A semaphore can: be signaled after execution of a queue operation is
-completed, and a queue operation can: wait for a semaphore to become
-signaled before it begins execution.
-ifdef::VK_VERSION_1_2,VK_KHR_timeline_semaphore[]
-A timeline semaphore can: additionally be signaled from the host with the
-flink:vkSignalSemaphore command and waited on from the host with the
-flink:vkWaitSemaphores command.
-endif::VK_VERSION_1_2,VK_KHR_timeline_semaphore[]
-
-ifdef::VK_VERSION_1_1,VK_KHR_external_semaphore[]
-[[synchronization-semaphores-payloads]]
-The internal data of a semaphore may: include a reference to any resources
-and pending work associated with signal or unsignal operations performed on
-that semaphore object, collectively referred to as the semaphore's
-_payload_.
-Mechanisms to import and export that internal data to and from semaphores
-are provided <<VkExportSemaphoreCreateInfo, below>>.
-These mechanisms indirectly enable applications to share semaphore state
-between two or more semaphores and other synchronization primitives across
-process and API boundaries.
-
-endif::VK_VERSION_1_1,VK_KHR_external_semaphore[]
-
-Semaphores are represented by sname:VkSemaphore handles:
-
-include::{generated}/api/handles/VkSemaphore.txt[]
---
-
-[open,refpage='vkCreateSemaphore',desc='Create a new queue semaphore object',type='protos']
---
-To create a semaphore, call:
-
-include::{generated}/api/protos/vkCreateSemaphore.txt[]
-
-  * pname:device is the logical device that creates the semaphore.
-  * pname:pCreateInfo is a pointer to a slink:VkSemaphoreCreateInfo
-    structure containing information about how the semaphore is to be
-    created.
-  * pname:pAllocator controls host memory allocation as described in the
-    <<memory-allocation, Memory Allocation>> chapter.
-  * pname:pSemaphore is a pointer to a handle in which the resulting
-    semaphore object is returned.
-
-ifndef::VK_VERSION_1_2,VK_KHR_timeline_semaphore[]
-This command creates a _binary semaphore_ that has a boolean payload
-indicating whether the semaphore is currently signaled or unsignaled.
-When created, the semaphore is in the unsignaled state.
-endif::VK_VERSION_1_2,VK_KHR_timeline_semaphore[]
-
-include::{generated}/validity/protos/vkCreateSemaphore.txt[]
---
-
-[open,refpage='VkSemaphoreCreateInfo',desc='Structure specifying parameters of a newly created semaphore',type='structs']
---
-The sname:VkSemaphoreCreateInfo structure is defined as:
-
-include::{generated}/api/structs/VkSemaphoreCreateInfo.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:flags is reserved for future use.
-
-include::{generated}/validity/structs/VkSemaphoreCreateInfo.txt[]
---
-
-[open,refpage='VkSemaphoreCreateFlags',desc='Reserved for future use',type='flags']
---
-include::{generated}/api/flags/VkSemaphoreCreateFlags.txt[]
-
-tname:VkSemaphoreCreateFlags is a bitmask type for setting a mask, but is
-currently reserved for future use.
---
-
-ifdef::VK_VERSION_1_2,VK_KHR_timeline_semaphore[]
-[open,refpage='VkSemaphoreTypeCreateInfo',desc='Structure specifying the type of a newly created semaphore',type='structs',alias='VkSemaphoreTypeCreateInfoKHR']
---
-The sname:VkSemaphoreTypeCreateInfo structure is defined as:
-
-include::{generated}/api/structs/VkSemaphoreTypeCreateInfo.txt[]
-
-ifdef::VK_KHR_timeline_semaphore[]
-or the equivalent
-
-include::{generated}/api/structs/VkSemaphoreTypeCreateInfoKHR.txt[]
-endif::VK_KHR_timeline_semaphore[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:semaphoreType is a elink:VkSemaphoreType value specifying the type
-    of the semaphore.
-  * pname:initialValue is the initial payload value if pname:semaphoreType
-    is ename:VK_SEMAPHORE_TYPE_TIMELINE.
-
-To create a semaphore of a specific type, add a
-sname:VkSemaphoreTypeCreateInfo structure to the
-slink:VkSemaphoreCreateInfo::pname:pNext chain.
-
-If no sname:VkSemaphoreTypeCreateInfo structure is included in the
-pname:pNext chain of slink:VkSemaphoreCreateInfo, then the created semaphore
-will have a default elink:VkSemaphoreType of ename:VK_SEMAPHORE_TYPE_BINARY.
-
-.Valid Usage
-****
-  * [[VUID-VkSemaphoreTypeCreateInfo-timelineSemaphore-03252]]
-    If the <<features-timelineSemaphore,pname:timelineSemaphore>> feature is
-    not enabled, pname:semaphoreType must: not equal
-    ename:VK_SEMAPHORE_TYPE_TIMELINE
-  * [[VUID-VkSemaphoreTypeCreateInfo-semaphoreType-03279]]
-    If pname:semaphoreType is ename:VK_SEMAPHORE_TYPE_BINARY,
-    pname:initialValue must: be zero
-****
-
-include::{generated}/validity/structs/VkSemaphoreTypeCreateInfo.txt[]
---
-
-[open,refpage='VkSemaphoreType',desc='Sepcifies the type of a semaphore object',type='enums',alias='VkSemaphoreTypeKHR']
---
-Possible values of slink:VkSemaphoreTypeCreateInfo::pname:semaphoreType,
-specifying the type of a semaphore, are:
-
-include::{generated}/api/enums/VkSemaphoreType.txt[]
-
-ifdef::VK_KHR_timeline_semaphore[]
-or the equivalent
-
-include::{generated}/api/enums/VkSemaphoreTypeKHR.txt[]
-endif::VK_KHR_timeline_semaphore[]
-
-  * ename:VK_SEMAPHORE_TYPE_BINARY specifies a _binary semaphore_ type that
-    has a boolean payload indicating whether the semaphore is currently
-    signaled or unsignaled.
-    When created, the semaphore is in the unsignaled state.
-  * ename:VK_SEMAPHORE_TYPE_TIMELINE specifies a _timeline semaphore_ type
-    that has a strictly increasing 64-bit unsigned integer payload
-    indicating whether the semaphore is signaled with respect to a
-    particular reference value.
-    When created, the semaphore payload has the value given by the
-    pname:initialValue field of slink:VkSemaphoreTypeCreateInfo.
---
-endif::VK_VERSION_1_2,VK_KHR_timeline_semaphore[]
-
-ifdef::VK_VERSION_1_1,VK_KHR_external_semaphore[]
-[open,refpage='VkExportSemaphoreCreateInfo',desc='Structure specifying handle types that can be exported from a semaphore',type='structs']
---
-To create a semaphore whose payload can: be exported to external handles,
-add a slink:VkExportSemaphoreCreateInfo structure to the pname:pNext chain
-of the slink:VkSemaphoreCreateInfo structure.
-The sname:VkExportSemaphoreCreateInfo structure is defined as:
-
-include::{generated}/api/structs/VkExportSemaphoreCreateInfo.txt[]
-
-ifdef::VK_KHR_external_semaphore[]
-or the equivalent
-
-include::{generated}/api/structs/VkExportSemaphoreCreateInfoKHR.txt[]
-endif::VK_KHR_external_semaphore[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:handleTypes is a bitmask of
-    elink:VkExternalSemaphoreHandleTypeFlagBits specifying one or more
-    semaphore handle types the application can: export from the resulting
-    semaphore.
-    The application can: request multiple handle types for the same
-    semaphore.
-
-.Valid Usage
-****
-  * [[VUID-VkExportSemaphoreCreateInfo-handleTypes-01124]]
-    The bits in pname:handleTypes must: be supported and compatible, as
-    reported by slink:VkExternalSemaphoreProperties
-****
-
-include::{generated}/validity/structs/VkExportSemaphoreCreateInfo.txt[]
---
-endif::VK_VERSION_1_1,VK_KHR_external_semaphore[]
-
-ifdef::VK_KHR_external_semaphore_win32[]
-[open,refpage='VkExportSemaphoreWin32HandleInfoKHR',desc='Structure specifying additional attributes of Windows handles exported from a semaphore',type='structs']
---
-To specify additional attributes of NT handles exported from a semaphore,
-add a sname:VkExportSemaphoreWin32HandleInfoKHR structure to the pname:pNext
-chain of the slink:VkSemaphoreCreateInfo structure.
-The sname:VkExportSemaphoreWin32HandleInfoKHR structure is defined as:
-
-include::{generated}/api/structs/VkExportSemaphoreWin32HandleInfoKHR.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:pAttributes is a pointer to a Windows code:SECURITY_ATTRIBUTES
-    structure specifying security attributes of the handle.
-  * pname:dwAccess is a code:DWORD specifying access rights of the handle.
-  * pname:name is a null-terminated UTF-16 string to associate with the
-    underlying synchronization primitive referenced by NT handles exported
-    from the created semaphore.
-
-If slink:VkExportSemaphoreCreateInfo is not included in the same pname:pNext
-chain, this structure is ignored.
-
-If slink:VkExportSemaphoreCreateInfo is included in the pname:pNext chain of
-slink:VkSemaphoreCreateInfo with a Windows pname:handleType, but either
-sname:VkExportSemaphoreWin32HandleInfoKHR is not included in the pname:pNext
-chain, or if it is but pname:pAttributes is set to `NULL`, default security
-descriptor values will be used, and child processes created by the
-application will not inherit the handle, as described in the MSDN
-documentation for "`Synchronization Object Security and Access Rights`"^1^.
-Further, if the structure is not present, the access rights used depend on
-the handle type.
-
-For handles of the following types:
-
-ename:VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_BIT
-
-The implementation must: ensure the access rights allow both signal and wait
-operations on the semaphore.
-
-For handles of the following types:
-
-ename:VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_D3D12_FENCE_BIT
-
-The access rights must: be:
-
-code:GENERIC_ALL
-
-1::
-    https://docs.microsoft.com/en-us/windows/win32/sync/synchronization-object-security-and-access-rights
-
-.Valid Usage
-****
-  * [[VUID-VkExportSemaphoreWin32HandleInfoKHR-handleTypes-01125]]
-    If slink:VkExportSemaphoreCreateInfo::pname:handleTypes does not include
-    ename:VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_BIT or
-    ename:VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_D3D12_FENCE_BIT,
-    sname:VkExportSemaphoreWin32HandleInfoKHR must: not be included in the
-    pname:pNext chain of slink:VkSemaphoreCreateInfo
-****
-
-include::{generated}/validity/structs/VkExportSemaphoreWin32HandleInfoKHR.txt[]
---
-
-[open,refpage='vkGetSemaphoreWin32HandleKHR',desc='Get a Windows HANDLE for a semaphore',type='protos']
---
-To export a Windows handle representing the payload of a semaphore, call:
-
-include::{generated}/api/protos/vkGetSemaphoreWin32HandleKHR.txt[]
-
-  * pname:device is the logical device that created the semaphore being
-    exported.
-  * pname:pGetWin32HandleInfo is a pointer to a
-    slink:VkSemaphoreGetWin32HandleInfoKHR structure containing parameters
-    of the export operation.
-  * pname:pHandle will return the Windows handle representing the semaphore
-    state.
-
-For handle types defined as NT handles, the handles returned by
-fname:vkGetSemaphoreWin32HandleKHR are owned by the application.
-To avoid leaking resources, the application must: release ownership of them
-using the code:CloseHandle system call when they are no longer needed.
-
-Exporting a Windows handle from a semaphore may: have side effects depending
-on the transference of the specified handle type, as described in
-<<synchronization-semaphores-importing,Importing Semaphore Payloads>>.
-
-include::{generated}/validity/protos/vkGetSemaphoreWin32HandleKHR.txt[]
---
-
-[open,refpage='VkSemaphoreGetWin32HandleInfoKHR',desc='Structure describing a Win32 handle semaphore export operation',type='structs']
---
-The sname:VkSemaphoreGetWin32HandleInfoKHR structure is defined as:
-
-include::{generated}/api/structs/VkSemaphoreGetWin32HandleInfoKHR.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:semaphore is the semaphore from which state will be exported.
-  * pname:handleType is a elink:VkExternalSemaphoreHandleTypeFlagBits value
-    specifying the type of handle requested.
-
-The properties of the handle returned depend on the value of
-pname:handleType.
-See elink:VkExternalSemaphoreHandleTypeFlagBits for a description of the
-properties of the defined external semaphore handle types.
-
-.Valid Usage
-****
-  * [[VUID-VkSemaphoreGetWin32HandleInfoKHR-handleType-01126]]
-    pname:handleType must: have been included in
-    slink:VkExportSemaphoreCreateInfo::pname:handleTypes when the
-    pname:semaphore's current payload was created
-  * [[VUID-VkSemaphoreGetWin32HandleInfoKHR-handleType-01127]]
-    If pname:handleType is defined as an NT handle,
-    flink:vkGetSemaphoreWin32HandleKHR must: be called no more than once for
-    each valid unique combination of pname:semaphore and pname:handleType
-  * [[VUID-VkSemaphoreGetWin32HandleInfoKHR-semaphore-01128]]
-    pname:semaphore must: not currently have its payload replaced by an
-    imported payload as described below in
-    <<synchronization-semaphores-importing,Importing Semaphore Payloads>>
-    unless that imported payload's handle type was included in
-    slink:VkExternalSemaphoreProperties::pname:exportFromImportedHandleTypes
-    for pname:handleType
-  * [[VUID-VkSemaphoreGetWin32HandleInfoKHR-handleType-01129]]
-    If pname:handleType refers to a handle type with copy payload
-    transference semantics, as defined below in
-    <<synchronization-semaphores-importing,Importing Semaphore Payloads>>,
-    there must: be no queue waiting on pname:semaphore
-  * [[VUID-VkSemaphoreGetWin32HandleInfoKHR-handleType-01130]]
-    If pname:handleType refers to a handle type with copy payload
-    transference semantics, pname:semaphore must: be signaled, or have an
-    associated <<synchronization-semaphores-signaling,semaphore signal
-    operation>> pending execution
-  * [[VUID-VkSemaphoreGetWin32HandleInfoKHR-handleType-01131]]
-    pname:handleType must: be defined as an NT handle or a global share
-    handle
-****
-
-include::{generated}/validity/structs/VkSemaphoreGetWin32HandleInfoKHR.txt[]
---
-endif::VK_KHR_external_semaphore_win32[]
-
-ifdef::VK_KHR_external_semaphore_fd[]
-[open,refpage='vkGetSemaphoreFdKHR',desc='Get a POSIX file descriptor handle for a semaphore',type='protos']
---
-To export a POSIX file descriptor representing the payload of a semaphore,
-call:
-
-include::{generated}/api/protos/vkGetSemaphoreFdKHR.txt[]
-
-  * pname:device is the logical device that created the semaphore being
-    exported.
-  * pname:pGetFdInfo is a pointer to a slink:VkSemaphoreGetFdInfoKHR
-    structure containing parameters of the export operation.
-  * pname:pFd will return the file descriptor representing the semaphore
-    payload.
-
-Each call to fname:vkGetSemaphoreFdKHR must: create a new file descriptor
-and transfer ownership of it to the application.
-To avoid leaking resources, the application must: release ownership of the
-file descriptor when it is no longer needed.
-
-[NOTE]
-.Note
-====
-Ownership can be released in many ways.
-For example, the application can call code:close() on the file descriptor,
-or transfer ownership back to Vulkan by using the file descriptor to import
-a semaphore payload.
-====
-Where supported by the operating system, the implementation must: set the
-file descriptor to be closed automatically when an code:execve system call
-is made.
-
-Exporting a file descriptor from a semaphore may: have side effects
-depending on the transference of the specified handle type, as described in
-<<synchronization-semaphores-importing,Importing Semaphore State>>.
-
-include::{generated}/validity/protos/vkGetSemaphoreFdKHR.txt[]
---
-
-[open,refpage='VkSemaphoreGetFdInfoKHR',desc='Structure describing a POSIX FD semaphore export operation',type='structs']
---
-The sname:VkSemaphoreGetFdInfoKHR structure is defined as:
-
-include::{generated}/api/structs/VkSemaphoreGetFdInfoKHR.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:semaphore is the semaphore from which state will be exported.
-  * pname:handleType is a elink:VkExternalSemaphoreHandleTypeFlagBits value
-    specifying the type of handle requested.
-
-The properties of the file descriptor returned depend on the value of
-pname:handleType.
-See elink:VkExternalSemaphoreHandleTypeFlagBits for a description of the
-properties of the defined external semaphore handle types.
-
-.Valid Usage
-****
-  * [[VUID-VkSemaphoreGetFdInfoKHR-handleType-01132]]
-    pname:handleType must: have been included in
-    slink:VkExportSemaphoreCreateInfo::pname:handleTypes when
-    pname:semaphore's current payload was created
-  * [[VUID-VkSemaphoreGetFdInfoKHR-semaphore-01133]]
-    pname:semaphore must: not currently have its payload replaced by an
-    imported payload as described below in
-    <<synchronization-semaphores-importing,Importing Semaphore Payloads>>
-    unless that imported payload's handle type was included in
-    slink:VkExternalSemaphoreProperties::pname:exportFromImportedHandleTypes
-    for pname:handleType
-  * [[VUID-VkSemaphoreGetFdInfoKHR-handleType-01134]]
-    If pname:handleType refers to a handle type with copy payload
-    transference semantics, as defined below in
-    <<synchronization-semaphores-importing,Importing Semaphore Payloads>>,
-    there must: be no queue waiting on pname:semaphore
-  * [[VUID-VkSemaphoreGetFdInfoKHR-handleType-01135]]
-    If pname:handleType refers to a handle type with copy payload
-    transference semantics, pname:semaphore must: be signaled, or have an
-    associated <<synchronization-semaphores-signaling,semaphore signal
-    operation>> pending execution
-  * [[VUID-VkSemaphoreGetFdInfoKHR-handleType-01136]]
-    pname:handleType must: be defined as a POSIX file descriptor handle
-ifdef::VK_VERSION_1_2,VK_KHR_timeline_semaphore[]
-  * [[VUID-VkSemaphoreGetFdInfoKHR-handleType-03253]]
-    If pname:handleType refers to a handle type with copy payload
-    transference semantics, pname:semaphore must: have been created with a
-    elink:VkSemaphoreType of ename:VK_SEMAPHORE_TYPE_BINARY
-  * [[VUID-VkSemaphoreGetFdInfoKHR-handleType-03254]]
-    If pname:handleType refers to a handle type with copy payload
-    transference semantics, pname:semaphore must: have an associated
-    semaphore signal operation that has been submitted for execution and any
-    semaphore signal operations on which it depends (if any) must: have also
-    been submitted for execution
-endif::VK_VERSION_1_2,VK_KHR_timeline_semaphore[]
-****
-
-include::{generated}/validity/structs/VkSemaphoreGetFdInfoKHR.txt[]
---
-endif::VK_KHR_external_semaphore_fd[]
-
-ifdef::VK_FUCHSIA_external_semaphore[]
-[open,refpage='vkGetSemaphoreZirconHandleFUCHSIA',desc='Get a Zircon event handle for a semaphore',type='protos']
---
-To export a Zircon event handle representing the payload of a semaphore,
-call:
-
-include::{generated}/api/protos/vkGetSemaphoreZirconHandleFUCHSIA.txt[]
-
-  * pname:device is the logical device that created the semaphore being
-    exported.
-  * pname:pGetZirconHandleInfo is a pointer to a
-    slink:VkSemaphoreGetZirconHandleInfoFUCHSIA structure containing
-    parameters of the export operation.
-  * pname:pZirconHandle will return the Zircon event handle representing the
-    semaphore payload.
-
-Each call to fname:vkGetSemaphoreZirconHandleFUCHSIA must: create a Zircon
-event handle and transfer ownership of it to the application.
-To avoid leaking resources, the application must: release ownership of the
-Zircon event handle when it is no longer needed.
-
-[NOTE]
-.Note
-====
-Ownership can be released in many ways.
-For example, the application can call zx_handle_close() on the file
-descriptor, or transfer ownership back to Vulkan by using the file
-descriptor to import a semaphore payload.
-====
-
-Exporting a Zircon event handle from a semaphore may: have side effects
-depending on the transference of the specified handle type, as described in
-<<synchronization-semaphores-importing,Importing Semaphore State>>.
-
-include::{generated}/validity/protos/vkGetSemaphoreZirconHandleFUCHSIA.txt[]
---
-
-[open,refpage='VkSemaphoreGetZirconHandleInfoFUCHSIA',desc='Structure describing a Zircon event handle semaphore export operation',type='structs']
---
-The sname:VkSemaphoreGetZirconHandleInfoFUCHSIA structure is defined as:
-
-include::{generated}/api/structs/VkSemaphoreGetZirconHandleInfoFUCHSIA.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:semaphore is the semaphore from which state will be exported.
-  * pname:handleType is a elink:VkExternalSemaphoreHandleTypeFlagBits value
-    specifying the type of handle requested.
-
-The properties of the Zircon event handle returned depend on the value of
-pname:handleType.
-See elink:VkExternalSemaphoreHandleTypeFlagBits for a description of the
-properties of the defined external semaphore handle types.
-
-.Valid Usage
-****
-  * [[VUID-VkSemaphoreGetZirconHandleInfoFUCHSIA-handleType-04758]]
-    pname:handleType must: have been included in
-    slink:VkExportSemaphoreCreateInfo::pname:handleTypes when
-    pname:semaphore's current payload was created
-  * [[VUID-VkSemaphoreGetZirconHandleInfoFUCHSIA-semaphore-04759]]
-    pname:semaphore must: not currently have its payload replaced by an
-    imported payload as described below in
-    <<synchronization-semaphores-importing,Importing Semaphore Payloads>>
-    unless that imported payload's handle type was included in
-    slink:VkExternalSemaphoreProperties::pname:exportFromImportedHandleTypes
-    for pname:handleType
-  * [[VUID-VkSemaphoreGetZirconHandleInfoFUCHSIA-handleType-04760]]
-    If pname:handleType refers to a handle type with copy payload
-    transference semantics, as defined below in
-    <<synchronization-semaphores-importing,Importing Semaphore Payloads>>,
-    there must: be no queue waiting on pname:semaphore
-  * [[VUID-VkSemaphoreGetZirconHandleInfoFUCHSIA-handleType-04761]]
-    If pname:handleType refers to a handle type with copy payload
-    transference semantics, pname:semaphore must: be signaled, or have an
-    associated <<synchronization-semaphores-signaling,semaphore signal
-    operation>> pending execution
-  * [[VUID-VkSemaphoreGetZirconHandleInfoFUCHSIA-handleType-04762]]
-    pname:handleType must: be defined as a Zircon event handle
-  * [[VUID-VkSemaphoreGetZirconHandleInfoFUCHSIA-semaphore-04763]]
-    pname:semaphore must: have been created with a elink:VkSemaphoreType of
-    ename:VK_SEMAPHORE_TYPE_BINARY
-****
-
-include::{generated}/validity/structs/VkSemaphoreGetZirconHandleInfoFUCHSIA.txt[]
---
-endif::VK_FUCHSIA_external_semaphore[]
-
-[open,refpage='vkDestroySemaphore',desc='Destroy a semaphore object',type='protos']
---
-To destroy a semaphore, call:
-
-include::{generated}/api/protos/vkDestroySemaphore.txt[]
-
-  * pname:device is the logical device that destroys the semaphore.
-  * pname:semaphore is the handle of the semaphore to destroy.
-  * pname:pAllocator controls host memory allocation as described in the
-    <<memory-allocation, Memory Allocation>> chapter.
-
-.Valid Usage
-****
-  * [[VUID-vkDestroySemaphore-semaphore-01137]]
-    All submitted batches that refer to pname:semaphore must: have completed
-    execution
-  * [[VUID-vkDestroySemaphore-semaphore-01138]]
-    If sname:VkAllocationCallbacks were provided when pname:semaphore was
-    created, a compatible set of callbacks must: be provided here
-  * [[VUID-vkDestroySemaphore-semaphore-01139]]
-    If no sname:VkAllocationCallbacks were provided when pname:semaphore was
-    created, pname:pAllocator must: be `NULL`
-****
-
-include::{generated}/validity/protos/vkDestroySemaphore.txt[]
---
-
-
-[[synchronization-semaphores-signaling]]
-=== Semaphore Signaling
-
-When a batch is submitted to a queue via a <<devsandqueues-submission, queue
-submission>>, and it includes semaphores to be signaled, it defines a memory
-dependency on the batch, and defines _semaphore signal operations_ which set
-the semaphores to the signaled state.
-
-ifdef::VK_VERSION_1_2,VK_KHR_timeline_semaphore[]
-In case of semaphores created with a elink:VkSemaphoreType of
-ename:VK_SEMAPHORE_TYPE_TIMELINE the semaphore is considered signaled with
-respect to the counter value set to be signaled as specified in
-slink:VkTimelineSemaphoreSubmitInfo or slink:VkSemaphoreSignalInfo.
-endif::VK_VERSION_1_2,VK_KHR_timeline_semaphore[]
-
-The first <<synchronization-dependencies-scopes, synchronization scope>>
-includes every command submitted in the same batch.
-ifdef::VK_KHR_synchronization2[]
-In the case of flink:vkQueueSubmit2KHR, the first synchronization scope is
-limited to the pipeline stage specified by
-slink:VkSemaphoreSubmitInfoKHR::pname:stageMask.
-endif::VK_KHR_synchronization2[]
-Semaphore signal operations that are defined by flink:vkQueueSubmit
-ifdef::VK_KHR_synchronization2[]
-or flink:vkQueueSubmit2KHR
-endif::VK_KHR_synchronization2[]
-additionally include all commands that occur earlier in
-<<synchronization-submission-order,submission order>>.
-Semaphore signal operations that are defined by flink:vkQueueSubmit or
-flink:vkQueueBindSparse additionally include in the first synchronization
-scope any semaphore and fence signal operations that occur earlier in
-<<synchronization-signal-operation-order,signal operation order>>.
-
-The second <<synchronization-dependencies-scopes, synchronization scope>>
-includes only the semaphore signal operation.
-
-The first <<synchronization-dependencies-access-scopes, access scope>>
-includes all memory access performed by the device.
-
-The second <<synchronization-dependencies-access-scopes, access scope>> is
-empty.
-
-
-[[synchronization-semaphores-waiting]]
-=== Semaphore Waiting
-
-When a batch is submitted to a queue via a <<devsandqueues-submission, queue
-submission>>, and it includes semaphores to be waited on, it defines a
-memory dependency between prior semaphore signal operations and the batch,
-and defines _semaphore wait operations_.
-
-Such semaphore wait operations set the semaphores
-ifdef::VK_VERSION_1_2,VK_KHR_timeline_semaphore[]
-created with a elink:VkSemaphoreType of ename:VK_SEMAPHORE_TYPE_BINARY
-endif::VK_VERSION_1_2,VK_KHR_timeline_semaphore[]
-to the unsignaled state.
-ifdef::VK_VERSION_1_2,VK_KHR_timeline_semaphore[]
-In case of semaphores created with a elink:VkSemaphoreType of
-ename:VK_SEMAPHORE_TYPE_TIMELINE a prior semaphore signal operation defines
-a memory dependency with a semaphore wait operation if the value the
-semaphore is signaled with is greater than or equal to the value the
-semaphore is waited with, thus the semaphore will continue to be considered
-signaled with respect to the counter value waited on as specified in
-slink:VkTimelineSemaphoreSubmitInfo.
-endif::VK_VERSION_1_2,VK_KHR_timeline_semaphore[]
-
-The first synchronization scope includes all semaphore signal operations
-that operate on semaphores waited on in the same batch, and that
-happen-before the wait completes.
-
-The second <<synchronization-dependencies-scopes, synchronization scope>>
-includes every command submitted in the same batch.
-In the case of flink:vkQueueSubmit, the second synchronization scope is
-limited to operations on the pipeline stages determined by the
-<<synchronization-pipeline-stages-masks, destination stage mask>> specified
-by the corresponding element of pname:pWaitDstStageMask.
-ifdef::VK_KHR_synchronization2[]
-In the case of flink:vkQueueSubmit2KHR, the second synchronization scope is
-limited to the pipeline stage specified by
-slink:VkSemaphoreSubmitInfoKHR::pname:stageMask.
-endif::VK_KHR_synchronization2[]
-Also, in the case of
-ifdef::VK_KHR_synchronization2[]
-either flink:vkQueueSubmit2KHR or
-endif::VK_KHR_synchronization2[]
-flink:vkQueueSubmit, the second synchronization scope additionally includes
-all commands that occur later in
-<<synchronization-submission-order,submission order>>.
-
-The first <<synchronization-dependencies-access-scopes, access scope>> is
-empty.
-
-The second <<synchronization-dependencies-access-scopes, access scope>>
-includes all memory access performed by the device.
-
-The semaphore wait operation happens-after the first set of operations in
-the execution dependency, and happens-before the second set of operations in
-the execution dependency.
-
-[NOTE]
-.Note
-====
-Unlike
-ifdef::VK_VERSION_1_2,VK_KHR_timeline_semaphore[]
-timeline semaphores,
-endif::VK_VERSION_1_2,VK_KHR_timeline_semaphore[]
-fences or events, the act of waiting for a binary semaphore also unsignals
-that semaphore.
-Applications must: ensure that between two such wait operations, the
-semaphore is signaled again, with execution dependencies used to ensure
-these occur in order.
-Binary semaphore waits and signals should thus occur in discrete 1:1 pairs.
-====
-
-ifdef::VK_KHR_swapchain[]
-[NOTE]
-.Note
-====
-A common scenario for using pname:pWaitDstStageMask with values other than
-ename:VK_PIPELINE_STAGE_ALL_COMMANDS_BIT is when synchronizing a window
-system presentation operation against subsequent command buffers which
-render the next frame.
-In this case, a presentation image must: not be overwritten until the
-presentation operation completes, but other pipeline stages can: execute
-without waiting.
-A mask of ename:VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT prevents
-subsequent color attachment writes from executing until the semaphore
-signals.
-Some implementations may: be able to execute transfer operations and/or
-pre-rasterization work before the semaphore is signaled.
-
-If an image layout transition needs to be performed on a presentable image
-before it is used in a framebuffer, that can: be performed as the first
-operation submitted to the queue after acquiring the image, and should: not
-prevent other work from overlapping with the presentation operation.
-For example, a sname:VkImageMemoryBarrier could use:
-
-  * pname:srcStageMask = ename:VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT
-  * pname:srcAccessMask = 0
-  * pname:dstStageMask = ename:VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT
-  * pname:dstAccessMask = ename:VK_ACCESS_COLOR_ATTACHMENT_READ_BIT |
-    ename:VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT.
-  * pname:oldLayout = ename:VK_IMAGE_LAYOUT_PRESENT_SRC_KHR
-  * pname:newLayout = ename:VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL
-
-Alternatively, pname:oldLayout can: be ename:VK_IMAGE_LAYOUT_UNDEFINED, if
-the image's contents need not be preserved.
-
-This barrier accomplishes a dependency chain between previous presentation
-operations and subsequent color attachment output operations, with the
-layout transition performed in between, and does not introduce a dependency
-between previous work and any
-<<pipeline-graphics-subsets-pre-rasterization,pre-rasterization shader
-stage>>s.
-More precisely, the semaphore signals after the presentation operation
-completes, the semaphore wait stalls the
-ename:VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT stage, and there is a
-dependency from that same stage to itself with the layout transition
-performed in between.
-====
-endif::VK_KHR_swapchain[]
-
-
-[[synchronization-semaphores-waiting-state]]
-=== Semaphore State Requirements For Wait Operations
-
-Before waiting on a semaphore, the application must: ensure the semaphore is
-in a valid state for a wait operation.
-Specifically, when a <<synchronization-semaphores-waiting,semaphore wait
-operation>> is submitted to a queue:
-
-  * A binary semaphore must: be signaled, or have an associated
-    <<synchronization-semaphores-signaling,semaphore signal operation>> that
-    is pending execution.
-  * Any <<synchronization-semaphores-signaling,semaphore signal operations>>
-    on which the pending binary semaphore signal operation depends must:
-    also be completed or pending execution.
-  * There must: be no other queue waiting on the same binary semaphore when
-    the operation executes.
-
-
-ifdef::VK_VERSION_1_2,VK_KHR_timeline_semaphore[]
-[[synchronization-semaphores-hostops]]
-=== Host Operations on Semaphores
-
-In addition to <<synchronization-semaphores-signaling,semaphore signal
-operations>> and <<synchronization-semaphores-waiting,semaphore wait
-operations>> submitted to device queues, timeline semaphores support the
-following host operations:
-
-  * Query the current counter value of the semaphore using the
-    flink:vkGetSemaphoreCounterValue command.
-  * Wait for a set of semaphores to reach particular counter values using
-    the flink:vkWaitSemaphores command.
-  * Signal the semaphore with a particular counter value from the host using
-    the flink:vkSignalSemaphore command.
-
-[open,refpage='vkGetSemaphoreCounterValue',desc='Query the current state of a timeline semaphore',type='protos',alias='vkGetSemaphoreCounterValueKHR']
---
-To query the current counter value of a semaphore created with a
-elink:VkSemaphoreType of ename:VK_SEMAPHORE_TYPE_TIMELINE from the host,
-call:
-
-ifdef::VK_VERSION_1_2[]
-include::{generated}/api/protos/vkGetSemaphoreCounterValue.txt[]
-endif::VK_VERSION_1_2[]
-
-ifdef::VK_VERSION_1_2+VK_KHR_timeline_semaphore[or the equivalent command]
-
-ifdef::VK_KHR_timeline_semaphore[]
-include::{generated}/api/protos/vkGetSemaphoreCounterValueKHR.txt[]
-endif::VK_KHR_timeline_semaphore[]
-
-  * pname:device is the logical device that owns the semaphore.
-  * pname:semaphore is the handle of the semaphore to query.
-  * pname:pValue is a pointer to a 64-bit integer value in which the current
-    counter value of the semaphore is returned.
-
-[NOTE]
-.Note
-====
-If a <<devsandqueues-submission, queue submission>> command is pending
-execution, then the value returned by this command may: immediately be out
-of date.
-====
-
-.Valid Usage
-****
-  * [[VUID-vkGetSemaphoreCounterValue-semaphore-03255]]
-    pname:semaphore must: have been created with a elink:VkSemaphoreType of
-    ename:VK_SEMAPHORE_TYPE_TIMELINE
-****
-
-include::{generated}/validity/protos/vkGetSemaphoreCounterValue.txt[]
---
-
-[open,refpage='vkWaitSemaphores',desc='Wait for timeline semaphores on the host',type='protos',alias='vkWaitSemaphoresKHR']
---
-To wait for a set of semaphores created with a elink:VkSemaphoreType of
-ename:VK_SEMAPHORE_TYPE_TIMELINE to reach particular counter values on the
-host, call:
-
-ifdef::VK_VERSION_1_2[]
-include::{generated}/api/protos/vkWaitSemaphores.txt[]
-endif::VK_VERSION_1_2[]
-
-ifdef::VK_VERSION_1_2+VK_KHR_timeline_semaphore[or the equivalent command]
-
-ifdef::VK_KHR_timeline_semaphore[]
-include::{generated}/api/protos/vkWaitSemaphoresKHR.txt[]
-endif::VK_KHR_timeline_semaphore[]
-
-  * pname:device is the logical device that owns the semaphores.
-  * pname:pWaitInfo is a pointer to a slink:VkSemaphoreWaitInfo structure
-    containing information about the wait condition.
-  * pname:timeout is the timeout period in units of nanoseconds.
-    pname:timeout is adjusted to the closest value allowed by the
-    implementation-dependent timeout accuracy, which may: be substantially
-    longer than one nanosecond, and may: be longer than the requested
-    period.
-
-If the condition is satisfied when fname:vkWaitSemaphores is called, then
-fname:vkWaitSemaphores returns immediately.
-If the condition is not satisfied at the time fname:vkWaitSemaphores is
-called, then fname:vkWaitSemaphores will block and wait until the condition
-is satisfied or the pname:timeout has expired, whichever is sooner.
-
-If pname:timeout is zero, then fname:vkWaitSemaphores does not wait, but
-simply returns information about the current state of the semaphores.
-ename:VK_TIMEOUT will be returned in this case if the condition is not
-satisfied, even though no actual wait was performed.
-
-If the condition is satisfied before the pname:timeout has expired,
-fname:vkWaitSemaphores returns ename:VK_SUCCESS.
-Otherwise, fname:vkWaitSemaphores returns ename:VK_TIMEOUT after the
-pname:timeout has expired.
-
-If device loss occurs (see <<devsandqueues-lost-device,Lost Device>>) before
-the timeout has expired, fname:vkWaitSemaphores must: return in finite time
-with either ename:VK_SUCCESS or ename:VK_ERROR_DEVICE_LOST.
-
-include::{generated}/validity/protos/vkWaitSemaphores.txt[]
---
-
-[open,refpage='VkSemaphoreWaitInfo',desc='Structure containing information about the semaphore wait condition',type='structs',alias='VkSemaphoreWaitInfoKHR']
---
-The sname:VkSemaphoreWaitInfo structure is defined as:
-
-include::{generated}/api/structs/VkSemaphoreWaitInfo.txt[]
-
-ifdef::VK_KHR_timeline_semaphore[]
-or the equivalent
-
-include::{generated}/api/structs/VkSemaphoreWaitInfoKHR.txt[]
-endif::VK_KHR_timeline_semaphore[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:flags is a bitmask of elink:VkSemaphoreWaitFlagBits specifying
-    additional parameters for the semaphore wait operation.
-  * pname:semaphoreCount is the number of semaphores to wait on.
-  * pname:pSemaphores is a pointer to an array of pname:semaphoreCount
-    semaphore handles to wait on.
-  * pname:pValues is a pointer to an array of pname:semaphoreCount timeline
-    semaphore values.
-
-.Valid Usage
-****
-  * [[VUID-VkSemaphoreWaitInfo-pSemaphores-03256]]
-    All of the elements of pname:pSemaphores must: reference a semaphore
-    that was created with a elink:VkSemaphoreType of
-    ename:VK_SEMAPHORE_TYPE_TIMELINE
-****
-
-include::{generated}/validity/structs/VkSemaphoreWaitInfo.txt[]
---
-
-[open,refpage='VkSemaphoreWaitFlagBits',desc='Bitmask specifying additional parameters of a semaphore wait operation',type='enums',alias='VkSemaphoreWaitFlagBitsKHR']
---
-Bits which can: be set in slink:VkSemaphoreWaitInfo::pname:flags, specifying
-additional parameters of a semaphore wait operation, are:
-
-include::{generated}/api/enums/VkSemaphoreWaitFlagBits.txt[]
-
-ifdef::VK_KHR_timeline_semaphore[]
-or the equivalent
-
-include::{generated}/api/enums/VkSemaphoreWaitFlagBitsKHR.txt[]
-endif::VK_KHR_timeline_semaphore[]
-
-  * ename:VK_SEMAPHORE_WAIT_ANY_BIT specifies that the semaphore wait
-    condition is that at least one of the semaphores in
-    sname:VkSemaphoreWaitInfo::pname:pSemaphores has reached the value
-    specified by the corresponding element of
-    sname:VkSemaphoreWaitInfo::pname:pValues.
-    If ename:VK_SEMAPHORE_WAIT_ANY_BIT is not set, the semaphore wait
-    condition is that all of the semaphores in
-    sname:VkSemaphoreWaitInfo::pname:pSemaphores have reached the value
-    specified by the corresponding element of
-    sname:VkSemaphoreWaitInfo::pname:pValues.
---
-
-[open,refpage='VkSemaphoreWaitFlags',desc='Bitmask of VkSemaphoreWaitFlagBits',type='flags',alias='VkSemaphoreWaitFlagsKHR']
---
-include::{generated}/api/flags/VkSemaphoreWaitFlags.txt[]
-
-ifdef::VK_KHR_timeline_semaphore[]
-or the equivalent
-
-include::{generated}/api/flags/VkSemaphoreWaitFlagsKHR.txt[]
-endif::VK_KHR_timeline_semaphore[]
-
-tname:VkSemaphoreWaitFlags is a bitmask type for setting a mask of zero or
-more elink:VkSemaphoreWaitFlagBits.
---
-
-[open,refpage='vkSignalSemaphore',desc='Signal a timeline semaphore on the host',type='protos',alias='vkSignalSemaphoreKHR']
---
-To signal a semaphore created with a elink:VkSemaphoreType of
-ename:VK_SEMAPHORE_TYPE_TIMELINE with a particular counter value, on the
-host, call:
-
-ifdef::VK_VERSION_1_2[]
-include::{generated}/api/protos/vkSignalSemaphore.txt[]
-endif::VK_VERSION_1_2[]
-
-ifdef::VK_VERSION_1_2+VK_KHR_timeline_semaphore[or the equivalent command]
-
-ifdef::VK_KHR_timeline_semaphore[]
-include::{generated}/api/protos/vkSignalSemaphoreKHR.txt[]
-endif::VK_KHR_timeline_semaphore[]
-
-  * pname:device is the logical device that owns the semaphore.
-  * pname:pSignalInfo is a pointer to a slink:VkSemaphoreSignalInfo
-    structure containing information about the signal operation.
-
-When fname:vkSignalSemaphore is executed on the host, it defines and
-immediately executes a <<synchronization-semaphores-signaling,_semaphore
-signal operation_>> which sets the timeline semaphore to the given value.
-
-The first synchronization scope is defined by the host execution model, but
-includes execution of fname:vkSignalSemaphore on the host and anything that
-happened-before it.
-
-The second synchronization scope is empty.
-
-include::{generated}/validity/protos/vkSignalSemaphore.txt[]
---
-
-[open,refpage='VkSemaphoreSignalInfo',desc='Structure containing information about a semaphore signal operation',type='structs',alias='VkSemaphoreSignalInfoKHR']
---
-The sname:VkSemaphoreSignalInfo structure is defined as:
-
-include::{generated}/api/structs/VkSemaphoreSignalInfo.txt[]
-
-ifdef::VK_KHR_timeline_semaphore[]
-or the equivalent
-
-include::{generated}/api/structs/VkSemaphoreSignalInfoKHR.txt[]
-endif::VK_KHR_timeline_semaphore[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:semaphore is the handle of the semaphore to signal.
-  * pname:value is the value to signal.
-
-.Valid Usage
-****
-  * [[VUID-VkSemaphoreSignalInfo-semaphore-03257]]
-    pname:semaphore must: have been created with a elink:VkSemaphoreType of
-    ename:VK_SEMAPHORE_TYPE_TIMELINE
-  * [[VUID-VkSemaphoreSignalInfo-value-03258]]
-    pname:value must: have a value greater than the current value of the
-    semaphore
-  * [[VUID-VkSemaphoreSignalInfo-value-03259]]
-    pname:value must: be less than the value of any pending semaphore signal
-    operations
-  * [[VUID-VkSemaphoreSignalInfo-value-03260]]
-    pname:value must: have a value which does not differ from the current
-    value of the semaphore or the value of any outstanding semaphore wait or
-    signal operation on pname:semaphore by more than
-    <<limits-maxTimelineSemaphoreValueDifference,
-    pname:maxTimelineSemaphoreValueDifference>>
-****
-
-include::{generated}/validity/structs/VkSemaphoreSignalInfo.txt[]
---
-endif::VK_VERSION_1_2,VK_KHR_timeline_semaphore[]
-
-
-ifdef::VK_VERSION_1_1,VK_KHR_external_semaphore[]
-[[synchronization-semaphores-importing]]
-=== Importing Semaphore Payloads
-
-Applications can: import a semaphore payload into an existing semaphore
-using an external semaphore handle.
-The effects of the import operation will be either temporary or permanent,
-as specified by the application.
-If the import is temporary, the implementation must: restore the semaphore
-to its prior permanent state after submitting the next semaphore wait
-operation.
-Performing a subsequent temporary import on a semaphore before performing a
-semaphore wait has no effect on this requirement; the next wait submitted on
-the semaphore must: still restore its last permanent state.
-A permanent payload import behaves as if the target semaphore was destroyed,
-and a new semaphore was created with the same handle but the imported
-payload.
-Because importing a semaphore payload temporarily or permanently detaches
-the existing payload from a semaphore, similar usage restrictions to those
-applied to fname:vkDestroySemaphore are applied to any command that imports
-a semaphore payload.
-Which of these import types is used is referred to as the import operation's
-_permanence_.
-Each handle type supports either one or both types of permanence.
-
-The implementation must: perform the import operation by either referencing
-or copying the payload referred to by the specified external semaphore
-handle, depending on the handle's type.
-The import method used is referred to as the handle type's _transference_.
-When using handle types with reference transference, importing a payload to
-a semaphore adds the semaphore to the set of all semaphores sharing that
-payload.
-This set includes the semaphore from which the payload was exported.
-Semaphore signaling and waiting operations performed on any semaphore in the
-set must: behave as if the set were a single semaphore.
-Importing a payload using handle types with copy transference creates a
-duplicate copy of the payload at the time of import, but makes no further
-reference to it.
-Semaphore signaling and waiting operations performed on the target of copy
-imports must: not affect any other semaphore or payload.
-
-Export operations have the same transference as the specified handle type's
-import operations.
-Additionally, exporting a semaphore payload to a handle with copy
-transference has the same side effects on the source semaphore's payload as
-executing a semaphore wait operation.
-If the semaphore was using a temporarily imported payload, the semaphore's
-prior permanent payload will be restored.
-
-ifdef::VK_KHR_external_semaphore_win32,VK_KHR_external_semaphore_fd,VK_FUCHSIA_external_semaphore[]
-[NOTE]
-.Note
-====
-The permanence and transference of handle types can be found in:
-
-ifdef::VK_KHR_external_semaphore_win32[]
-  * <<synchronization-semaphore-handletypes-win32,Handle Types Supported by
-    sname:VkImportSemaphoreWin32HandleInfoKHR>>
-endif::VK_KHR_external_semaphore_win32[]
-ifdef::VK_KHR_external_semaphore_fd[]
-  * <<synchronization-semaphore-handletypes-fd,Handle Types Supported by
-    sname:VkImportSemaphoreFdInfoKHR>>
-endif::VK_KHR_external_semaphore_fd[]
-ifdef::VK_FUCHSIA_external_semaphore[]
-  * <<synchronization-semaphore-handletypes-fuchsia,Handle Types Supported
-    by sname:VkImportSemaphoreZirconHandleInfoFUCHSIA>>
-endif::VK_FUCHSIA_external_semaphore[]
-====
-endif::VK_KHR_external_semaphore_win32,VK_KHR_external_semaphore_fd,VK_FUCHSIA_external_semaphore[]
-
-<<fundamentals-threadingbehavior,External synchronization>> allows
-implementations to modify an object's internal state, i.e. payload, without
-internal synchronization.
-However, for semaphores sharing a payload across processes, satisfying the
-external synchronization requirements of sname:VkSemaphore parameters as if
-all semaphores in the set were the same object is sometimes infeasible.
-Satisfying the <<synchronization-semaphores-waiting-state,wait operation
-state requirements>> would similarly require impractical coordination or
-levels of trust between processes.
-Therefore, these constraints only apply to a specific semaphore handle, not
-to its payload.
-For distinct semaphore objects which share a payload, if the semaphores are
-passed to separate queue submission commands concurrently, behavior will be
-as if the commands were called in an arbitrary sequential order.
-If the <<synchronization-semaphores-waiting-state,wait operation state
-requirements>> are violated for the shared payload by a queue submission
-command, or if a signal operation is queued for a shared payload that is
-already signaled or has a pending signal operation, effects must: be limited
-to one or more of the following:
-
-  * Returning ename:VK_ERROR_INITIALIZATION_FAILED from the command which
-    resulted in the violation.
-  * Losing the logical device on which the violation occurred immediately or
-    at a future time, resulting in a ename:VK_ERROR_DEVICE_LOST error from
-    subsequent commands, including the one causing the violation.
-  * Continuing execution of the violating command or operation as if the
-    semaphore wait completed successfully after an implementation-dependent
-    timeout.
-    In this case, the state of the payload becomes undefined:, and future
-    operations on semaphores sharing the payload will be subject to these
-    same rules.
-    The semaphore must: be destroyed or have its payload replaced by an
-    import operation to again have a well-defined state.
-
-[NOTE]
-.Note
-====
-These rules allow processes to synchronize access to shared memory without
-trusting each other.
-However, such processes must still be cautious not to use the shared
-semaphore for more than synchronizing access to the shared memory.
-For example, a process should not use a shared semaphore as part of an
-execution dependency chain that, when complete, leads to objects being
-destroyed, if it does not trust other processes sharing the semaphore
-payload.
-====
-
-When a semaphore is using an imported payload, its
-slink:VkExportSemaphoreCreateInfo::pname:handleTypes value is that specified
-when creating the semaphore from which the payload was exported, rather than
-that specified when creating the semaphore.
-Additionally,
-slink:VkExternalSemaphoreProperties::pname:exportFromImportedHandleTypes
-restricts which handle types can: be exported from such a semaphore based on
-the specific handle type used to import the current payload.
-ifdef::VK_KHR_swapchain[]
-Passing a semaphore to flink:vkAcquireNextImageKHR is equivalent to
-temporarily importing a semaphore payload to that semaphore.
-
-[NOTE]
-.Note
-====
-Because the exportable handle types of an imported semaphore correspond to
-its current imported payload, and flink:vkAcquireNextImageKHR behaves the
-same as a temporary import operation for which the source semaphore is
-opaque to the application, applications have no way of determining whether
-any external handle types can: be exported from a semaphore in this state.
-Therefore, applications must: not attempt to export external handles from
-semaphores using a temporarily imported payload from
-flink:vkAcquireNextImageKHR.
-====
-endif::VK_KHR_swapchain[]
-
-When importing a semaphore payload, it is the responsibility of the
-application to ensure the external handles meet all valid usage
-requirements.
-However, implementations must: perform sufficient validation of external
-handles to ensure that the operation results in a valid semaphore which will
-not cause program termination, device loss, queue stalls, or corruption of
-other resources when used as allowed according to its import parameters, and
-excepting those side effects allowed for violations of the
-<<synchronization-semaphores-waiting-state,valid semaphore state for wait
-operations>> rules.
-If the external handle provided does not meet these requirements, the
-implementation must: fail the semaphore payload import operation with the
-error code ename:VK_ERROR_INVALID_EXTERNAL_HANDLE.
-
-ifdef::VK_VERSION_1_2,VK_KHR_timeline_semaphore[]
-In addition, when importing a semaphore payload that is not compatible with
-the payload type corresponding to the elink:VkSemaphoreType the semaphore
-was created with, the implementation may: fail the semaphore payload import
-operation with the error code ename:VK_ERROR_INVALID_EXTERNAL_HANDLE.
-
-[NOTE]
-.Note
-====
-As the introduction of the external semaphore handle type
-ename:VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_D3D12_FENCE_BIT predates that of
-timeline semaphores, support for importing semaphore payloads from external
-handles of that type into semaphores created (implicitly or explicitly) with
-a elink:VkSemaphoreType of ename:VK_SEMAPHORE_TYPE_BINARY is preserved for
-backwards compatibility.
-However, applications should: prefer importing such handle types into
-semaphores created with a elink:VkSemaphoreType of
-ename:VK_SEMAPHORE_TYPE_TIMELINE.
-====
-endif::VK_VERSION_1_2,VK_KHR_timeline_semaphore[]
-endif::VK_VERSION_1_1,VK_KHR_external_semaphore[]
-
-ifdef::VK_KHR_external_semaphore_win32[]
-[open,refpage='vkImportSemaphoreWin32HandleKHR',desc='Import a semaphore from a Windows HANDLE',type='protos']
---
-To import a semaphore payload from a Windows handle, call:
-
-include::{generated}/api/protos/vkImportSemaphoreWin32HandleKHR.txt[]
-
-  * pname:device is the logical device that created the semaphore.
-  * pname:pImportSemaphoreWin32HandleInfo is a pointer to a
-    slink:VkImportSemaphoreWin32HandleInfoKHR structure specifying the
-    semaphore and import parameters.
-
-Importing a semaphore payload from Windows handles does not transfer
-ownership of the handle to the Vulkan implementation.
-For handle types defined as NT handles, the application must: release
-ownership using the code:CloseHandle system call when the handle is no
-longer needed.
-
-Applications can: import the same semaphore payload into multiple instances
-of Vulkan, into the same instance from which it was exported, and multiple
-times into a given Vulkan instance.
-
-include::{generated}/validity/protos/vkImportSemaphoreWin32HandleKHR.txt[]
---
-
-[open,refpage='VkImportSemaphoreWin32HandleInfoKHR',desc='Structure specifying Windows handle to import to a semaphore',type='structs']
---
-The sname:VkImportSemaphoreWin32HandleInfoKHR structure is defined as:
-
-include::{generated}/api/structs/VkImportSemaphoreWin32HandleInfoKHR.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:semaphore is the semaphore into which the payload will be
-    imported.
-  * pname:flags is a bitmask of elink:VkSemaphoreImportFlagBits specifying
-    additional parameters for the semaphore payload import operation.
-  * pname:handleType is a elink:VkExternalSemaphoreHandleTypeFlagBits value
-    specifying the type of pname:handle.
-  * pname:handle is `NULL` or the external handle to import.
-  * pname:name is `NULL` or a null-terminated UTF-16 string naming the
-    underlying synchronization primitive to import.
-
-The handle types supported by pname:handleType are:
-
-[[synchronization-semaphore-handletypes-win32]]
-.Handle Types Supported by sname:VkImportSemaphoreWin32HandleInfoKHR
-[width="80%",options="header"]
-|====
-| Handle Type                                                      | Transference | Permanence Supported
-| ename:VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_BIT     | Reference    | Temporary,Permanent
-| ename:VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT | Reference    | Temporary,Permanent
-| ename:VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_D3D12_FENCE_BIT      | Reference    | Temporary,Permanent
-|====
-
-.Valid Usage
-****
-  * [[VUID-VkImportSemaphoreWin32HandleInfoKHR-handleType-01140]]
-    pname:handleType must: be a value included in the
-    <<synchronization-semaphore-handletypes-win32,Handle Types Supported by
-    sname:VkImportSemaphoreWin32HandleInfoKHR>> table
-  * [[VUID-VkImportSemaphoreWin32HandleInfoKHR-handleType-01466]]
-    If pname:handleType is not
-    ename:VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_BIT or
-    ename:VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_D3D12_FENCE_BIT, pname:name
-    must: be `NULL`
-  * [[VUID-VkImportSemaphoreWin32HandleInfoKHR-handleType-01467]]
-    If pname:handle is `NULL`, pname:name must: name a valid synchronization
-    primitive of the type specified by pname:handleType
-  * [[VUID-VkImportSemaphoreWin32HandleInfoKHR-handleType-01468]]
-    If pname:name is `NULL`, pname:handle must: be a valid handle of the
-    type specified by pname:handleType
-  * [[VUID-VkImportSemaphoreWin32HandleInfoKHR-handle-01469]]
-    If pname:handle is not `NULL`, pname:name must: be `NULL`
-  * [[VUID-VkImportSemaphoreWin32HandleInfoKHR-handle-01542]]
-    If pname:handle is not `NULL`, it must: obey any requirements listed for
-    pname:handleType in
-    <<external-semaphore-handle-types-compatibility,external semaphore
-    handle types compatibility>>
-  * [[VUID-VkImportSemaphoreWin32HandleInfoKHR-name-01543]]
-    If pname:name is not `NULL`, it must: obey any requirements listed for
-    pname:handleType in
-    <<external-semaphore-handle-types-compatibility,external semaphore
-    handle types compatibility>>
-  * [[VUID-VkImportSemaphoreWin32HandleInfoKHR-handleType-03261]]
-    If pname:handleType is
-    ename:VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_BIT or
-    ename:VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT, the
-    slink:VkSemaphoreCreateInfo::pname:flags field must: match that of the
-    semaphore from which pname:handle or pname:name was exported
-ifdef::VK_VERSION_1_2,VK_KHR_timeline_semaphore[]
-  * [[VUID-VkImportSemaphoreWin32HandleInfoKHR-handleType-03262]]
-    If pname:handleType is
-    ename:VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_BIT or
-    ename:VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT, the
-    slink:VkSemaphoreTypeCreateInfo::pname:semaphoreType field must: match
-    that of the semaphore from which pname:handle or pname:name was exported
-  * [[VUID-VkImportSemaphoreWin32HandleInfoKHR-flags-03322]]
-    If pname:flags contains ename:VK_SEMAPHORE_IMPORT_TEMPORARY_BIT, the
-    slink:VkSemaphoreTypeCreateInfo::pname:semaphoreType field of the
-    semaphore from which pname:handle or pname:name was exported must: not
-    be ename:VK_SEMAPHORE_TYPE_TIMELINE
-endif::VK_VERSION_1_2,VK_KHR_timeline_semaphore[]
-****
-
-include::{generated}/validity/structs/VkImportSemaphoreWin32HandleInfoKHR.txt[]
---
-endif::VK_KHR_external_semaphore_win32[]
-
-ifdef::VK_KHR_external_semaphore_fd[]
-[open,refpage='vkImportSemaphoreFdKHR',desc='Import a semaphore from a POSIX file descriptor',type='protos']
---
-To import a semaphore payload from a POSIX file descriptor, call:
-
-include::{generated}/api/protos/vkImportSemaphoreFdKHR.txt[]
-
-  * pname:device is the logical device that created the semaphore.
-  * pname:pImportSemaphoreFdInfo is a pointer to a
-    slink:VkImportSemaphoreFdInfoKHR structure specifying the semaphore and
-    import parameters.
-
-Importing a semaphore payload from a file descriptor transfers ownership of
-the file descriptor from the application to the Vulkan implementation.
-The application must: not perform any operations on the file descriptor
-after a successful import.
-
-Applications can: import the same semaphore payload into multiple instances
-of Vulkan, into the same instance from which it was exported, and multiple
-times into a given Vulkan instance.
-
-.Valid Usage
-****
-  * [[VUID-vkImportSemaphoreFdKHR-semaphore-01142]]
-    pname:semaphore must: not be associated with any queue command that has
-    not yet completed execution on that queue
-****
-
-include::{generated}/validity/protos/vkImportSemaphoreFdKHR.txt[]
---
-
-[open,refpage='VkImportSemaphoreFdInfoKHR',desc='Structure specifying POSIX file descriptor to import to a semaphore',type='structs']
---
-The sname:VkImportSemaphoreFdInfoKHR structure is defined as:
-
-include::{generated}/api/structs/VkImportSemaphoreFdInfoKHR.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:semaphore is the semaphore into which the payload will be
-    imported.
-  * pname:flags is a bitmask of elink:VkSemaphoreImportFlagBits specifying
-    additional parameters for the semaphore payload import operation.
-  * pname:handleType is a elink:VkExternalSemaphoreHandleTypeFlagBits value
-    specifying the type of pname:fd.
-  * pname:fd is the external handle to import.
-
-The handle types supported by pname:handleType are:
-
-[[synchronization-semaphore-handletypes-fd]]
-.Handle Types Supported by sname:VkImportSemaphoreFdInfoKHR
-[width="80%",options="header"]
-|====
-| Handle Type                                               | Transference | Permanence Supported
-| ename:VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_FD_BIT | Reference    | Temporary,Permanent
-| ename:VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_SYNC_FD_BIT   | Copy         | Temporary
-|====
-
-.Valid Usage
-****
-  * [[VUID-VkImportSemaphoreFdInfoKHR-handleType-01143]]
-    pname:handleType must: be a value included in the
-    <<synchronization-semaphore-handletypes-fd,Handle Types Supported by
-    sname:VkImportSemaphoreFdInfoKHR>> table
-  * [[VUID-VkImportSemaphoreFdInfoKHR-fd-01544]]
-    pname:fd must: obey any requirements listed for pname:handleType in
-    <<external-semaphore-handle-types-compatibility,external semaphore
-    handle types compatibility>>
-  * [[VUID-VkImportSemaphoreFdInfoKHR-handleType-03263]]
-    If pname:handleType is
-    ename:VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_FD_BIT, the
-    slink:VkSemaphoreCreateInfo::pname:flags field must: match that of the
-    semaphore from which pname:fd was exported
-ifdef::VK_VERSION_1_2,VK_KHR_timeline_semaphore[]
-  * [[VUID-VkImportSemaphoreFdInfoKHR-handleType-03264]]
-    If pname:handleType is
-    ename:VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_FD_BIT, the
-    slink:VkSemaphoreTypeCreateInfo::pname:semaphoreType field must: match
-    that of the semaphore from which pname:fd was exported
-  * [[VUID-VkImportSemaphoreFdInfoKHR-flags-03323]]
-    If pname:flags contains ename:VK_SEMAPHORE_IMPORT_TEMPORARY_BIT, the
-    slink:VkSemaphoreTypeCreateInfo::pname:semaphoreType field of the
-    semaphore from which pname:fd was exported must: not be
-    ename:VK_SEMAPHORE_TYPE_TIMELINE
-endif::VK_VERSION_1_2,VK_KHR_timeline_semaphore[]
-****
-
-If pname:handleType is ename:VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_SYNC_FD_BIT,
-the special value `-1` for pname:fd is treated like a valid sync file
-descriptor referring to an object that has already signaled.
-The import operation will succeed and the sname:VkSemaphore will have a
-temporarily imported payload as if a valid file descriptor had been
-provided.
-
-[NOTE]
-.Note
-====
-This special behavior for importing an invalid sync file descriptor allows
-easier interoperability with other system APIs which use the convention that
-an invalid sync file descriptor represents work that has already completed
-and does not need to be waited for.
-It is consistent with the option for implementations to return a `-1` file
-descriptor when exporting a
-ename:VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_SYNC_FD_BIT from a sname:VkSemaphore
-which is signaled.
-====
-
-include::{generated}/validity/structs/VkImportSemaphoreFdInfoKHR.txt[]
---
-endif::VK_KHR_external_semaphore_fd[]
-
-ifdef::VK_FUCHSIA_external_semaphore[]
-[open,refpage='vkImportSemaphoreZirconHandleFUCHSIA',desc='Import a semaphore from a Zircon event handle',type='protos']
---
-To import a semaphore payload from a Zircon event handle, call:
-
-include::{generated}/api/protos/vkImportSemaphoreZirconHandleFUCHSIA.txt[]
-
-  * pname:device is the logical device that created the semaphore.
-  * pname:pImportSemaphoreZirconHandleInfo is a pointer to a
-    slink:VkImportSemaphoreZirconHandleInfoFUCHSIA structure specifying the
-    semaphore and import parameters.
-
-Importing a semaphore payload from a Zircon event handle transfers ownership
-of the handle from the application to the Vulkan implementation.
-The application must: not perform any operations on the handle after a
-successful import.
-
-Applications can: import the same semaphore payload into multiple instances
-of Vulkan, into the same instance from which it was exported, and multiple
-times into a given Vulkan instance.
-
-.Valid Usage
-****
-  * [[VUID-vkImportSemaphoreZirconHandleFUCHSIA-semaphore-04764]]
-    pname:semaphore must: not be associated with any queue command that has
-    not yet completed execution on that queue
-****
-
-include::{generated}/validity/protos/vkImportSemaphoreZirconHandleFUCHSIA.txt[]
---
-
-[open,refpage='VkImportSemaphoreZirconHandleInfoFUCHSIA',desc='Structure specifying Zircon event handle to import to a semaphore',type='structs']
---
-The sname:VkImportSemaphoreZirconHandleInfoFUCHSIA structure is defined as:
-
-include::{generated}/api/structs/VkImportSemaphoreZirconHandleInfoFUCHSIA.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:semaphore is the semaphore into which the payload will be
-    imported.
-  * pname:flags is a bitmask of elink:VkSemaphoreImportFlagBits specifying
-    additional parameters for the semaphore payload import operation.
-  * pname:handleType is a elink:VkExternalSemaphoreHandleTypeFlagBits value
-    specifying the type of pname:zirconHandle.
-  * pname:zirconHandle is the external handle to import.
-
-The handle types supported by pname:handleType are:
-
-[[synchronization-semaphore-handletypes-fuchsia]]
-.Handle Types Supported by sname:VkImportSemaphoreZirconHandleInfoFUCHSIA
-[width="80%",options="header"]
-|====
-| Handle Type                                               | Transference | Permanence Supported
-| ename:VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_ZIRCON_EVENT_BIT_FUCHSIA   | Reference         | Temporary,Permanent
-|====
-
-.Valid Usage
-****
-  * [[VUID-VkImportSemaphoreZirconHandleInfoFUCHSIA-handleType-04765]]
-    pname:handleType must: be a value included in the
-    <<synchronization-semaphore-handletypes-fuchsia,Handle Types Supported
-    by sname:VkImportSemaphoreZirconHandleInfoFUCHSIA>> table
-  * [[VUID-VkImportSemaphoreZirconHandleInfoFUCHSIA-zirconHandle-04766]]
-    pname:zirconHandle must: obey any requirements listed for
-    pname:handleType in
-    <<external-semaphore-handle-types-compatibility,external semaphore
-    handle types compatibility>>
-  * [[VUID-VkImportSemaphoreZirconHandleInfoFUCHSIA-zirconHandle-04767]]
-    pname:zirconHandle must: have code:ZX_RIGHTS_BASIC and
-    code:ZX_RIGHTS_SIGNAL rights
-ifdef::VK_VERSION_1_2,VK_KHR_timeline_semaphore[]
-  * [[VUID-VkImportSemaphoreZirconHandleInfoFUCHSIA-semaphoreType-04768]]
-    The slink:VkSemaphoreTypeCreateInfo::pname:semaphoreType field must: not
-    be ename:VK_SEMAPHORE_TYPE_TIMELINE
-endif::VK_VERSION_1_2,VK_KHR_timeline_semaphore[]
-****
-
-include::{generated}/validity/structs/VkImportSemaphoreZirconHandleInfoFUCHSIA.txt[]
---
-endif::VK_FUCHSIA_external_semaphore[]
-
-ifdef::VK_VERSION_1_1,VK_KHR_external_semaphore[]
-ifdef::VK_KHR_external_semaphore_win32,VK_KHR_external_semaphore_fd,VK_FUCHSIA_external_semaphore[]
-[open,refpage='VkSemaphoreImportFlagBits',desc='Bitmask specifying additional parameters of semaphore payload import',type='enums']
---
-Bits which can: be set in
-
-ifdef::VK_KHR_external_semaphore_win32[]
-  * slink:VkImportSemaphoreWin32HandleInfoKHR::pname:flags
-endif::VK_KHR_external_semaphore_win32[]
-ifdef::VK_KHR_external_semaphore_fd[]
-  * slink:VkImportSemaphoreFdInfoKHR::pname:flags
-endif::VK_KHR_external_semaphore_fd[]
-ifdef::VK_FUCHSIA_external_semaphore[]
-  * slink:VkImportSemaphoreZirconHandleInfoFUCHSIA::pname:flags
-endif::VK_FUCHSIA_external_semaphore[]
-
-specifying additional parameters of a semaphore import operation are:
-
-include::{generated}/api/enums/VkSemaphoreImportFlagBits.txt[]
-
-ifdef::VK_KHR_external_semaphore[]
-or the equivalent
-
-include::{generated}/api/enums/VkSemaphoreImportFlagBitsKHR.txt[]
-endif::VK_KHR_external_semaphore[]
-
-These bits have the following meanings:
-
-  * ename:VK_SEMAPHORE_IMPORT_TEMPORARY_BIT specifies that the semaphore
-    payload will be imported only temporarily, as described in
-    <<synchronization-semaphores-importing,Importing Semaphore Payloads>>,
-    regardless of the permanence of pname:handleType.
---
-
-[open,refpage='VkSemaphoreImportFlags',desc='Bitmask of VkSemaphoreImportFlagBits',type='flags']
---
-include::{generated}/api/flags/VkSemaphoreImportFlags.txt[]
-
-ifdef::VK_KHR_external_semaphore[]
-or the equivalent
-
-include::{generated}/api/flags/VkSemaphoreImportFlagsKHR.txt[]
-endif::VK_KHR_external_semaphore[]
-
-tname:VkSemaphoreImportFlags is a bitmask type for setting a mask of zero or
-more elink:VkSemaphoreImportFlagBits.
---
-endif::VK_KHR_external_semaphore_win32,VK_KHR_external_semaphore_fd,VK_FUCHSIA_external_semaphore[]
-endif::VK_VERSION_1_1,VK_KHR_external_semaphore[]
-
-
-[[synchronization-events]]
-== Events
-
-[open,refpage='VkEvent',desc='Opaque handle to an event object',type='handles']
---
-Events are a synchronization primitive that can: be used to insert a
-fine-grained dependency between commands submitted to the same queue, or
-between the host and a queue.
-Events must: not be used to insert a dependency between commands submitted
-to different queues.
-Events have two states - signaled and unsignaled.
-An application can: signal or unsignal an event either on the host or on the
-device.
-A device can: be made to wait for an event to become signaled before
-executing further operations.
-No command exists to wait for an event to become signaled on the host, but
-the current state of an event can: be queried.
-
-Events are represented by sname:VkEvent handles:
-
-include::{generated}/api/handles/VkEvent.txt[]
---
-
-[open,refpage='vkCreateEvent',desc='Create a new event object',type='protos']
---
-To create an event, call:
-
-include::{generated}/api/protos/vkCreateEvent.txt[]
-
-  * pname:device is the logical device that creates the event.
-  * pname:pCreateInfo is a pointer to a slink:VkEventCreateInfo structure
-    containing information about how the event is to be created.
-  * pname:pAllocator controls host memory allocation as described in the
-    <<memory-allocation, Memory Allocation>> chapter.
-  * pname:pEvent is a pointer to a handle in which the resulting event
-    object is returned.
-
-When created, the event object is in the unsignaled state.
-
-ifdef::VK_KHR_portability_subset[]
-.Valid Usage
-****
-  * [[VUID-vkCreateEvent-events-04468]]
-    If the `apiext:VK_KHR_portability_subset` extension is enabled, and
-    slink:VkPhysicalDevicePortabilitySubsetFeaturesKHR::pname:events is
-    ename:VK_FALSE, then the implementation does not support
-    <<synchronization-events, events>>, and flink:vkCreateEvent must: not be
-    used
-****
-endif::VK_KHR_portability_subset[]
-
-include::{generated}/validity/protos/vkCreateEvent.txt[]
---
-
-[open,refpage='VkEventCreateInfo',desc='Structure specifying parameters of a newly created event',type='structs']
---
-The sname:VkEventCreateInfo structure is defined as:
-
-include::{generated}/api/structs/VkEventCreateInfo.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:flags is a bitmask of elink:VkEventCreateFlagBits defining
-    additional creation parameters.
-
-include::{generated}/validity/structs/VkEventCreateInfo.txt[]
---
-
-[open,refpage='VkEventCreateFlagBits',desc='Event creation flag bits',type='enums']
---
-include::{generated}/api/enums/VkEventCreateFlagBits.txt[]
-
-ifndef::VK_KHR_synchronization2[]
-All values for this enum are defined by extensions.
-endif::VK_KHR_synchronization2[]
-ifdef::VK_KHR_synchronization2[]
-  * ename:VK_EVENT_CREATE_DEVICE_ONLY_BIT_KHR specifies that host event
-    commands will not be used with this event.
-endif::VK_KHR_synchronization2[]
---
-
-[open,refpage='VkEventCreateFlags',desc='Bitmask of event creation flag bits',type='flags']
---
-include::{generated}/api/flags/VkEventCreateFlags.txt[]
-
-tname:VkEventCreateFlags is a bitmask type for setting a mask of
-elink:VkEventCreateFlagBits.
---
-
-[open,refpage='vkDestroyEvent',desc='Destroy an event object',type='protos']
---
-To destroy an event, call:
-
-include::{generated}/api/protos/vkDestroyEvent.txt[]
-
-  * pname:device is the logical device that destroys the event.
-  * pname:event is the handle of the event to destroy.
-  * pname:pAllocator controls host memory allocation as described in the
-    <<memory-allocation, Memory Allocation>> chapter.
-
-.Valid Usage
-****
-  * [[VUID-vkDestroyEvent-event-01145]]
-    All submitted commands that refer to pname:event must: have completed
-    execution
-  * [[VUID-vkDestroyEvent-event-01146]]
-    If sname:VkAllocationCallbacks were provided when pname:event was
-    created, a compatible set of callbacks must: be provided here
-  * [[VUID-vkDestroyEvent-event-01147]]
-    If no sname:VkAllocationCallbacks were provided when pname:event was
-    created, pname:pAllocator must: be `NULL`
-****
-
-include::{generated}/validity/protos/vkDestroyEvent.txt[]
---
-
-[open,refpage='vkGetEventStatus',desc='Retrieve the status of an event object',type='protos']
---
-To query the state of an event from the host, call:
-
-include::{generated}/api/protos/vkGetEventStatus.txt[]
-
-  * pname:device is the logical device that owns the event.
-  * pname:event is the handle of the event to query.
-
-Upon success, fname:vkGetEventStatus returns the state of the event object
-with the following return codes:
-
-.Event Object Status Codes
-[width="80%",options="header"]
-|====
-| Status | Meaning
-| ename:VK_EVENT_SET | The event specified by pname:event is signaled.
-| ename:VK_EVENT_RESET | The event specified by pname:event is unsignaled.
-|====
-
-If a fname:vkCmdSetEvent or fname:vkCmdResetEvent command is in a command
-buffer that is in the <<commandbuffers-lifecycle, pending state>>, then the
-value returned by this command may: immediately be out of date.
-
-The state of an event can: be updated by the host.
-The state of the event is immediately changed, and subsequent calls to
-fname:vkGetEventStatus will return the new state.
-If an event is already in the requested state, then updating it to the same
-state has no effect.
-
-ifdef::VK_KHR_synchronization2[]
-.Valid Usage
-****
- * [[VUID-vkGetEventStatus-event-03940]]
-    pname:event must: not have been created with
-    ename:VK_EVENT_CREATE_DEVICE_ONLY_BIT_KHR
-****
-endif::VK_KHR_synchronization2[]
-
-include::{generated}/validity/protos/vkGetEventStatus.txt[]
---
-
-[[synchronization-events-signaling-host]]
-[open,refpage='vkSetEvent',desc='Set an event to signaled state',type='protos']
---
-To set the state of an event to signaled from the host, call:
-
-include::{generated}/api/protos/vkSetEvent.txt[]
-
-  * pname:device is the logical device that owns the event.
-  * pname:event is the event to set.
-
-When flink:vkSetEvent is executed on the host, it defines an _event signal
-operation_ which sets the event to the signaled state.
-
-If pname:event is already in the signaled state when flink:vkSetEvent is
-executed, then flink:vkSetEvent has no effect, and no event signal operation
-occurs.
-
-ifdef::VK_KHR_synchronization2[]
-.Valid Usage
-****
- * [[VUID-vkSetEvent-event-03941]]
-   pname:event must: not have been created with
-   ename:VK_EVENT_CREATE_DEVICE_ONLY_BIT_KHR
-****
-endif::VK_KHR_synchronization2[]
-
-include::{generated}/validity/protos/vkSetEvent.txt[]
---
-
-[[synchronization-events-unsignaling-host]]
-[open,refpage='vkResetEvent',desc='Reset an event to non-signaled state',type='protos']
---
-To set the state of an event to unsignaled from the host, call:
-
-include::{generated}/api/protos/vkResetEvent.txt[]
-
-  * pname:device is the logical device that owns the event.
-  * pname:event is the event to reset.
-
-When flink:vkResetEvent is executed on the host, it defines an _event
-unsignal operation_ which resets the event to the unsignaled state.
-
-If pname:event is already in the unsignaled state when flink:vkResetEvent is
-executed, then flink:vkResetEvent has no effect, and no event unsignal
-operation occurs.
-
-.Valid Usage
-****
-  * [[VUID-vkResetEvent-event-03821]]
-    There must: be an execution dependency between fname:vkResetEvent and
-    the execution of any flink:vkCmdWaitEvents that includes pname:event in
-    its pname:pEvents parameter
-ifdef::VK_KHR_synchronization2[]
-  * [[VUID-vkResetEvent-event-03822]]
-    There must: be an execution dependency between fname:vkResetEvent and
-    the execution of any flink:vkCmdWaitEvents2KHR that includes pname:event
-    in its pname:pEvents parameter
-endif::VK_KHR_synchronization2[]
-ifdef::VK_KHR_synchronization2[]
-  * [[VUID-vkResetEvent-event-03823]]
-    pname:event must: not have been created with
-    ename:VK_EVENT_CREATE_DEVICE_ONLY_BIT_KHR
-endif::VK_KHR_synchronization2[]
-****
-
-include::{generated}/validity/protos/vkResetEvent.txt[]
---
-
-The state of an event can: also be updated on the device by commands
-inserted in command buffers.
-
-[[synchronization-events-signaling-device]]
-ifdef::VK_KHR_synchronization2[]
-[open,refpage='vkCmdSetEvent2KHR',desc='Set an event object to signaled state',type='protos']
---
-To signal an event from a device, call:
-
-include::{generated}/api/protos/vkCmdSetEvent2KHR.txt[]
-
-  * pname:commandBuffer is the command buffer into which the command is
-    recorded.
-  * pname:event is the event that will be signaled.
-  * pname:pDependencyInfo is a pointer to a slink:VkDependencyInfoKHR
-    structure defining the first scopes of this operation.
-
-When flink:vkCmdSetEvent2KHR is submitted to a queue, it defines the first
-half of memory dependencies defined by pname:pDependencyInfo, as well as an
-event signal operation which sets the event to the signaled state.
-A memory dependency is defined between the event signal operation and
-commands that occur earlier in submission order.
-
-The first <<synchronization-dependencies-scopes, synchronization scope>> and
-<<synchronization-dependencies-access-scopes, access scope>> are defined by
-the union of all the memory dependencies defined by pname:pDependencyInfo,
-and are applied to all operations that occur earlier in
-<<synchronization-submission-order,submission order>>.
-<<synchronization-queue-transfers, Queue family ownership transfers>> and
-<<synchronization-image-layout-transitions, image layout transitions>>
-defined by pname:pDependencyInfo are also included in the first scopes.
-
-The second <<synchronization-dependencies-scopes, synchronization scope>>
-includes only the event signal operation, and any
-<<synchronization-queue-transfers, queue family ownership transfers>> and
-<<synchronization-image-layout-transitions, image layout transitions>>
-defined by pname:pDependencyInfo.
-
-The second <<synchronization-dependencies-access-scopes, access scope>>
-includes only <<synchronization-queue-transfers, queue family ownership
-transfers>> and <<synchronization-image-layout-transitions, image layout
-transitions>>.
-
-Future flink:vkCmdWaitEvents2KHR commands rely on all values of each element
-in pname:pDependencyInfo matching exactly with those used to signal the
-corresponding event.
-flink:vkCmdWaitEvents must: not be used to wait on the result of a signal
-operation defined by fname:vkCmdSetEvent2KHR.
-
-[NOTE]
-.Note
-====
-The extra information provided by flink:vkCmdSetEvent2KHR compared to
-flink:vkCmdSetEvent allows implementations to more efficiently schedule the
-operations required to satisfy the requested dependencies.
-With flink:vkCmdSetEvent, the full dependency information is not known until
-flink:vkCmdWaitEvents is recorded, forcing implementations to insert the
-required operations at that point and not before.
-====
-
-If pname:event is already in the signaled state when flink:vkCmdSetEvent2KHR
-is executed on the device, then flink:vkCmdSetEvent2KHR has no effect, no
-event signal operation occurs, and no dependency is generated.
-
-.Valid Usage
-****
-  * [[VUID-vkCmdSetEvent2KHR-synchronization2-03824]]
-    The <<features-synchronization2, pname:synchronization2>> feature must:
-    be enabled
-  * [[VUID-vkCmdSetEvent2KHR-dependencyFlags-03825]]
-    The pname:dependencyFlags member of pname:pDependencyInfo must: be `0`
-ifdef::VK_VERSION_1_1,VK_KHR_device_group[]
-  * [[VUID-vkCmdSetEvent2KHR-commandBuffer-03826]]
-    The current device mask of pname:commandBuffer must: include exactly one
-    physical device
-endif::VK_VERSION_1_1,VK_KHR_device_group[]
-  * [[VUID-vkCmdSetEvent2KHR-srcStageMask-03827]]
-    The pname:srcStageMask member of any element of the
-    pname:pMemoryBarriers, pname:pBufferMemoryBarriers, or
-    pname:pImageMemoryBarriers members of pname:pDependencyInfo must: only
-    include pipeline stages valid for the queue family that was used to
-    create the command pool that pname:commandBuffer was allocated from
-  * [[VUID-vkCmdSetEvent2KHR-dstStageMask-03828]]
-    The pname:dstStageMask member of any element of the
-    pname:pMemoryBarriers, pname:pBufferMemoryBarriers, or
-    pname:pImageMemoryBarriers members of pname:pDependencyInfo must: only
-    include pipeline stages valid for the queue family that was used to
-    create the command pool that pname:commandBuffer was allocated from
-****
-
-include::{generated}/validity/protos/vkCmdSetEvent2KHR.txt[]
---
-
-[open,refpage='VkDependencyInfoKHR',desc='Structure specifying dependency information for a synchronization command',type='structs']
---
-The sname:VkDependencyInfoKHR structure is defined as:
-
-include::{generated}/api/structs/VkDependencyInfoKHR.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:dependencyFlags is a bitmask of elink:VkDependencyFlagBits
-    specifying how execution and memory dependencies are formed.
-  * pname:memoryBarrierCount is the length of the pname:pMemoryBarriers
-    array.
-  * pname:pMemoryBarriers is a pointer to an array of
-    slink:VkMemoryBarrier2KHR structures that define memory dependencies
-    between any memory accesses.
-  * pname:bufferMemoryBarrierCount is the length of the
-    pname:pBufferMemoryBarriers array.
-  * pname:pBufferMemoryBarriers is a pointer to an array of
-    slink:VkBufferMemoryBarrier2KHR structures that define memory
-    dependencies between buffer ranges.
-  * pname:imageMemoryBarrierCount is the length of the
-    pname:pImageMemoryBarriers array.
-  * pname:pImageMemoryBarriers is a pointer to an array of
-    slink:VkImageMemoryBarrier2KHR structures that define memory
-    dependencies between image subresources.
-
-This structure defines a set of <<synchronization-dependencies-memory,
-memory dependencies>>, as well as <<synchronization-queue-transfers, queue
-family transfer operations>> and <<synchronization-image-layout-transitions,
-image layout transitions>>.
-
-Each member of pname:pMemoryBarriers, pname:pBufferMemoryBarriers, and
-pname:pImageMemoryBarriers defines a separate
-<<synchronization-dependencies-memory, memory dependency>>.
-
-include::{generated}/validity/structs/VkDependencyInfoKHR.txt[]
---
-endif::VK_KHR_synchronization2[]
-
-[open,refpage='vkCmdSetEvent',desc='Set an event object to signaled state',type='protos']
---
-:refpage: vkCmdSetEvent
-
-To set the state of an event to signaled from a device, call:
-
-include::{generated}/api/protos/vkCmdSetEvent.txt[]
-
-  * pname:commandBuffer is the command buffer into which the command is
-    recorded.
-  * pname:event is the event that will be signaled.
-  * pname:stageMask specifies the <<synchronization-pipeline-stages,source
-    stage mask>> used to determine the first
-    <<synchronization-dependencies-scopes, synchronization scope>>.
-
-
-ifdef::VK_KHR_synchronization2[]
-fname:vkCmdSetEvent behaves identically to flink:vkCmdSetEvent2KHR, except
-that it does not define an access scope, and must: only be used with
-flink:vkCmdWaitEvents, not flink:vkCmdWaitEvents2KHR.
-endif::VK_KHR_synchronization2[]
-
-ifndef::VK_KHR_synchronization2[]
-When flink:vkCmdSetEvent is submitted to a queue, it defines an execution
-dependency on commands that were submitted before it, and defines an event
-signal operation which sets the event to the signaled state.
-
-The first <<synchronization-dependencies-scopes, synchronization scope>>
-includes all commands that occur earlier in
-<<synchronization-submission-order,submission order>>.
-The synchronization scope is limited to operations on the pipeline stages
-determined by the <<synchronization-pipeline-stages-masks, source stage
-mask>> specified by pname:stageMask.
-
-The second <<synchronization-dependencies-scopes, synchronization scope>>
-includes only the event signal operation.
-
-If pname:event is already in the signaled state when flink:vkCmdSetEvent is
-executed on the device, then flink:vkCmdSetEvent has no effect, no event
-signal operation occurs, and no execution dependency is generated.
-endif::VK_KHR_synchronization2[]
-
-.Valid Usage
-****
-:stageMaskName: stageMask
-include::{chapters}/commonvalidity/stage_mask_common.txt[]
-  * [[VUID-vkCmdSetEvent-stageMask-01149]]
-    pname:stageMask must: not include ename:VK_PIPELINE_STAGE_HOST_BIT
-ifdef::VK_VERSION_1_1,VK_KHR_device_group[]
-  * [[VUID-vkCmdSetEvent-commandBuffer-01152]]
-    pname:commandBuffer's current device mask must: include exactly one
-    physical device
-endif::VK_VERSION_1_1,VK_KHR_device_group[]
-****
-
-include::{generated}/validity/protos/vkCmdSetEvent.txt[]
---
-
-[[synchronization-events-unsignaling-device]]
-ifdef::VK_KHR_synchronization2[]
-[open,refpage='vkCmdResetEvent2KHR',desc='Reset an event object to non-signaled state',type='protos']
---
-:refpage: vkCmdResetEvent2KHR
-
-To unsignal the event from a device, call:
-
-include::{generated}/api/protos/vkCmdResetEvent2KHR.txt[]
-
-  * pname:commandBuffer is the command buffer into which the command is
-    recorded.
-  * pname:event is the event that will be unsignaled.
-  * pname:stageMask is a tlink:VkPipelineStageFlags2KHR mask of pipeline
-    stages used to determine the first
-    <<synchronization-dependencies-scopes, synchronization scope>>.
-
-When flink:vkCmdResetEvent2KHR is submitted to a queue, it defines an
-execution dependency on commands that were submitted before it, and defines
-an event unsignal operation which resets the event to the unsignaled state.
-
-The first <<synchronization-dependencies-scopes, synchronization scope>>
-includes all commands that occur earlier in
-<<synchronization-submission-order,submission order>>.
-The synchronization scope is limited to operations by pname:stageMask or
-stages that are <<synchronization-pipeline-stages-order,logically earlier>>
-than pname:stageMask.
-
-The second <<synchronization-dependencies-scopes, synchronization scope>>
-includes only the event unsignal operation.
-
-If pname:event is already in the unsignaled state when
-flink:vkCmdResetEvent2KHR is executed on the device, then this command has
-no effect, no event unsignal operation occurs, and no execution dependency
-is generated.
-
-.Valid Usage
-****
-:stageMaskName: stageMask
-include::{chapters}/commonvalidity/stage_mask_2_common.txt[]
-  * [[VUID-vkCmdResetEvent2KHR-synchronization2-03829]]
-    The <<features-synchronization2, pname:synchronization2>> feature must:
-    be enabled
-  * [[VUID-vkCmdResetEvent2KHR-stageMask-03830]]
-    pname:stageMask must: not include ename:VK_PIPELINE_STAGE_2_HOST_BIT_KHR
-  * [[VUID-vkCmdResetEvent2KHR-event-03831]]
-    There must: be an execution dependency between fname:vkCmdResetEvent2KHR
-    and the execution of any flink:vkCmdWaitEvents that includes pname:event
-    in its pname:pEvents parameter
-  * [[VUID-vkCmdResetEvent2KHR-event-03832]]
-    There must: be an execution dependency between fname:vkCmdResetEvent2KHR
-    and the execution of any flink:vkCmdWaitEvents2KHR that includes
-    pname:event in its pname:pEvents parameter
-ifdef::VK_VERSION_1_1,VK_KHR_device_group[]
-  * [[VUID-vkCmdResetEvent2KHR-commandBuffer-03833]]
-    pname:commandBuffer's current device mask must: include exactly one
-    physical device
-endif::VK_VERSION_1_1,VK_KHR_device_group[]
-****
-
-include::{generated}/validity/protos/vkCmdResetEvent2KHR.txt[]
---
-endif::VK_KHR_synchronization2[]
-
-[open,refpage='vkCmdResetEvent',desc='Reset an event object to non-signaled state',type='protos']
---
-:refpage: vkCmdResetEvent
-
-To set the state of an event to unsignaled from a device, call:
-
-include::{generated}/api/protos/vkCmdResetEvent.txt[]
-
-  * pname:commandBuffer is the command buffer into which the command is
-    recorded.
-  * pname:event is the event that will be unsignaled.
-  * pname:stageMask is a bitmask of elink:VkPipelineStageFlagBits specifying
-    the <<synchronization-pipeline-stages, source stage mask>> used to
-    determine when the pname:event is unsignaled.
-
-ifdef::VK_KHR_synchronization2[]
-fname:vkCmdResetEvent behaves identically to flink:vkCmdResetEvent2KHR.
-endif::VK_KHR_synchronization2[]
-
-ifndef::VK_KHR_synchronization2[]
-When flink:vkCmdResetEvent is submitted to a queue, it defines an execution
-dependency on commands that were submitted before it, and defines an event
-unsignal operation which resets the event to the unsignaled state.
-
-The first <<synchronization-dependencies-scopes, synchronization scope>>
-includes all commands that occur earlier in
-<<synchronization-submission-order,submission order>>.
-The synchronization scope is limited to operations on the pipeline stages
-determined by the <<synchronization-pipeline-stages-masks, source stage
-mask>> specified by pname:stageMask.
-
-The second <<synchronization-dependencies-scopes, synchronization scope>>
-includes only the event unsignal operation.
-
-If pname:event is already in the unsignaled state when flink:vkCmdResetEvent
-is executed on the device, then flink:vkCmdResetEvent has no effect, no
-event unsignal operation occurs, and no execution dependency is generated.
-endif::VK_KHR_synchronization2[]
-
-.Valid Usage
-****
-:stageMaskName: stageMask
-include::{chapters}/commonvalidity/stage_mask_common.txt[]
-  * [[VUID-vkCmdResetEvent-stageMask-01153]]
-    pname:stageMask must: not include ename:VK_PIPELINE_STAGE_HOST_BIT
-  * [[VUID-vkCmdResetEvent-event-03834]]
-    There must: be an execution dependency between fname:vkCmdResetEvent and
-    the execution of any flink:vkCmdWaitEvents that includes pname:event in
-    its pname:pEvents parameter
-ifdef::VK_KHR_synchronization2[]
-  * [[VUID-vkCmdResetEvent-event-03835]]
-    There must: be an execution dependency between fname:vkCmdResetEvent and
-    the execution of any flink:vkCmdWaitEvents2KHR that includes pname:event
-    in its pname:pEvents parameter
-endif::VK_KHR_synchronization2[]
-ifdef::VK_VERSION_1_1,VK_KHR_device_group[]
-  * [[VUID-vkCmdResetEvent-commandBuffer-01157]]
-    pname:commandBuffer's current device mask must: include exactly one
-    physical device
-endif::VK_VERSION_1_1,VK_KHR_device_group[]
-****
-
-include::{generated}/validity/protos/vkCmdResetEvent.txt[]
---
-
-ifdef::VK_KHR_synchronization2[]
-[open,refpage='vkCmdWaitEvents2KHR',desc='Wait for one or more events',type='protos']
---
-To wait for one or more events to enter the signaled state on a device,
-call:
-
-[[synchronization-events-waiting-device]]
-include::{generated}/api/protos/vkCmdWaitEvents2KHR.txt[]
-
-  * pname:commandBuffer is the command buffer into which the command is
-    recorded.
-  * pname:eventCount is the length of the pname:pEvents array.
-  * pname:pEvents is a pointer to an array of pname:eventCount events to
-    wait on.
-  * pname:pDependencyInfos is a pointer to an array of pname:eventCount
-    slink:VkDependencyInfoKHR structures, defining the second
-    <<synchronization-dependencies-scopes, synchronization scope>>.
-
-When fname:vkCmdWaitEvents2KHR is submitted to a queue, it inserts memory
-dependencies according to the elements of pname:pDependencyInfos and each
-corresponding element of pname:pEvents.
-fname:vkCmdWaitEvents2KHR must: not be used to wait on event signal
-operations occurring on other queues, or signal operations execyted by
-flink:vkCmdSetEvent.
-
-The first <<synchronization-dependencies-scopes, synchronization scope>> and
-<<synchronization-dependencies-access-scopes, access scope>> of each memory
-dependency defined by any element [eq]#i# of pname:pDependencyInfos are
-applied to operations that occurred earlier in
-<<synchronization-submission-order,submission order>> than the last event
-signal operation on element [eq]#i# of pname:pEvents.
-
-Signal operations for an event at index [eq]#i# are only included if:
-
-  * The event was signaled by a flink:vkCmdSetEvent2KHR command that
-    occurred earlier in <<synchronization-submission-order,submission
-    order>> with a pname:dependencyInfo parameter exactly equal to the
-    element of pname:pDependencyInfos at index [eq]#i# ; or
-  * The event was created without ename:VK_EVENT_CREATE_DEVICE_ONLY_BIT_KHR,
-    and the first <<synchronization-dependencies-scopes, synchronization
-    scope>> defined by the element of pname:pDependencyInfos at index
-    [eq]#i# only includes host operations
-    (ename:VK_PIPELINE_STAGE_2_HOST_BIT_KHR).
-
-The second <<synchronization-dependencies-scopes, synchronization scope>>
-and <<synchronization-dependencies-access-scopes, access scope>> of each
-memory dependency defined by any element [eq]#i# of pname:pDependencyInfos
-are applied to operations that occurred later in
-<<synchronization-submission-order,submission order>> than
-fname:vkCmdWaitEvents2KHR.
-
-[NOTE]
-.Note
-====
-flink:vkCmdWaitEvents2KHR is used with flink:vkCmdSetEvent2KHR to define a
-memory dependency between two sets of action commands, roughly in the same
-way as pipeline barriers, but split into two commands such that work between
-the two may: execute unhindered.
-====
-
-[NOTE]
-.Note
-====
-Applications should be careful to avoid race conditions when using events.
-There is no direct ordering guarantee between fname:vkCmdSetEvent2KHR and
-flink:vkCmdResetEvent2KHR, flink:vkCmdResetEvent, or flink:vkCmdSetEvent.
-Another execution dependency (e.g. a pipeline barrier or semaphore with
-ename:VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT_KHR) is needed to prevent such a
-race condition.
-====
-
-.Valid Usage
-****
-  * [[VUID-vkCmdWaitEvents2KHR-synchronization2-03836]]
-    The <<features-synchronization2, pname:synchronization2>> feature must:
-    be enabled
-  * [[VUID-vkCmdWaitEvents2KHR-pEvents-03837]]
-    Members of pname:pEvents must: not have been signaled by
-    flink:vkCmdSetEvent
-  * [[VUID-vkCmdWaitEvents2KHR-pEvents-03838]]
-    For any element [eq]#i# of pname:pEvents, if that event is signaled by
-    flink:vkCmdSetEvent2KHR, that command's pname:dependencyInfo parameter
-    must: be exactly equal to the [eq]##i##th element of
-    pname:pDependencyInfos
-  * [[VUID-vkCmdWaitEvents2KHR-pEvents-03839]]
-    For any element [eq]#i# of pname:pEvents, if that event is signaled by
-    flink:vkSetEvent, barriers in the [eq]##i##th element of
-    pname:pDependencyInfos must: include only host operations in their first
-    <<synchronization-dependencies-scopes, synchronization scope>>
-  * [[VUID-vkCmdWaitEvents2KHR-pEvents-03840]]
-    For any element [eq]#i# of pname:pEvents, if barriers in the [eq]##i##th
-    element of pname:pDependencyInfos include only host operations, the
-    [eq]##i##th element of pname:pEvents must: be signaled before
-    flink:vkCmdWaitEvents2KHR is executed
-  * [[VUID-vkCmdWaitEvents2KHR-pEvents-03841]]
-    For any element [eq]#i# of pname:pEvents, if barriers in the [eq]##i##th
-    element of pname:pDependencyInfos do not include host operations, the
-    [eq]##i##th element of pname:pEvents must: be signaled by a
-    corresponding flink:vkCmdSetEvent2KHR that occurred earlier in
-    <<synchronization-submission-order,submission order>>
-  * [[VUID-vkCmdWaitEvents2KHR-srcStageMask-03842]]
-    The pname:srcStageMask member of any element of the
-    pname:pMemoryBarriers, pname:pBufferMemoryBarriers, or
-    pname:pImageMemoryBarriers members of pname:pDependencyInfos must:
-    either include only pipeline stages valid for the queue family that was
-    used to create the command pool that pname:commandBuffer was allocated
-    from, or include only ename:VK_PIPELINE_STAGE_2_HOST_BIT_KHR
-  * [[VUID-vkCmdWaitEvents2KHR-dstStageMask-03843]]
-    The pname:dstStageMask member of any element of the
-    pname:pMemoryBarriers, pname:pBufferMemoryBarriers, or
-    pname:pImageMemoryBarriers members of pname:pDependencyInfos must: only
-    include pipeline stages valid for the queue family that was used to
-    create the command pool that pname:commandBuffer was allocated from
-  * [[VUID-vkCmdWaitEvents2KHR-dependencyFlags-03844]]
-    The pname:dependencyFlags member of any element of pname:pDependencyInfo
-    must: be `0`
-  * [[VUID-vkCmdWaitEvents2KHR-pEvents-03845]]
-    If pname:pEvents includes one or more events that will be signaled by
-    flink:vkSetEvent after pname:commandBuffer has been submitted to a
-    queue, then fname:vkCmdWaitEvents2KHR must: not be called inside a
-    render pass instance
-  * [[VUID-vkCmdWaitEvents2KHR-commandBuffer-03846]]
-    pname:commandBuffer's current device mask must: include exactly one
-    physical device
-****
-
-include::{generated}/validity/protos/vkCmdWaitEvents2KHR.txt[]
---
-endif::VK_KHR_synchronization2[]
-
-[open,refpage='vkCmdWaitEvents',desc='Wait for one or more events and insert a set of memory',type='protos']
---
-:refpage: vkCmdWaitEvents
-
-To wait for one or more events to enter the signaled state on a device,
-call:
-
-[[synchronization-events-waiting-device]]
-include::{generated}/api/protos/vkCmdWaitEvents.txt[]
-
-  * pname:commandBuffer is the command buffer into which the command is
-    recorded.
-  * pname:eventCount is the length of the pname:pEvents array.
-  * pname:pEvents is a pointer to an array of event object handles to wait
-    on.
-  * pname:srcStageMask is a bitmask of elink:VkPipelineStageFlagBits
-    specifying the <<synchronization-pipeline-stages, source stage mask>>.
-  * pname:dstStageMask is a bitmask of elink:VkPipelineStageFlagBits
-    specifying the <<synchronization-pipeline-stages, destination stage
-    mask>>.
-  * pname:memoryBarrierCount is the length of the pname:pMemoryBarriers
-    array.
-  * pname:pMemoryBarriers is a pointer to an array of slink:VkMemoryBarrier
-    structures.
-  * pname:bufferMemoryBarrierCount is the length of the
-    pname:pBufferMemoryBarriers array.
-  * pname:pBufferMemoryBarriers is a pointer to an array of
-    slink:VkBufferMemoryBarrier structures.
-  * pname:imageMemoryBarrierCount is the length of the
-    pname:pImageMemoryBarriers array.
-  * pname:pImageMemoryBarriers is a pointer to an array of
-    slink:VkImageMemoryBarrier structures.
-
-ifdef::VK_KHR_synchronization2[]
-fname:vkCmdWaitEvents is largely similar to flink:vkCmdWaitEvents2KHR, but
-can: only wait on signal operations defined by flink:vkCmdSetEvent.
-As flink:vkCmdSetEvent does not define any access scopes,
-fname:vkCmdWaitEvents defines the first access scope for each event signal
-operation in addition to its own access scopes.
-
-[NOTE]
-.Note
-====
-Since flink:vkCmdSetEvent does not have any dependency information beyond a
-stage mask, implementations do not have the same opportunity to perform
-<<synchronization-dependencies-available-and-visible, availability and
-visibility operations>> or <<synchronization-image-layout-transitions, image
-layout transitions>> in advance as they do with flink:vkCmdSetEvent2KHR and
-flink:vkCmdWaitEvents2KHR.
-====
-endif::VK_KHR_synchronization2[]
-
-When fname:vkCmdWaitEvents is submitted to a queue, it defines a memory
-dependency between prior event signal operations on the same queue or the
-host, and subsequent commands.
-fname:vkCmdWaitEvents must: not be used to wait on event signal operations
-occurring on other queues.
-
-The first synchronization scope only includes event signal operations that
-operate on members of pname:pEvents, and the operations that happened-before
-the event signal operations.
-Event signal operations performed by flink:vkCmdSetEvent that occur earlier
-in <<synchronization-submission-order,submission order>> are included in the
-first synchronization scope, if the <<synchronization-pipeline-stages-order,
-logically latest>> pipeline stage in their pname:stageMask parameter is
-<<synchronization-pipeline-stages-order, logically earlier>> than or equal
-to the <<synchronization-pipeline-stages-order, logically latest>> pipeline
-stage in pname:srcStageMask.
-Event signal operations performed by flink:vkSetEvent are only included in
-the first synchronization scope if ename:VK_PIPELINE_STAGE_HOST_BIT is
-included in pname:srcStageMask.
-
-The second <<synchronization-dependencies-scopes, synchronization scope>>
-includes all commands that occur later in
-<<synchronization-submission-order,submission order>>.
-The second synchronization scope is limited to operations on the pipeline
-stages determined by the <<synchronization-pipeline-stages-masks,
-destination stage mask>> specified by pname:dstStageMask.
-
-The first <<synchronization-dependencies-access-scopes, access scope>> is
-limited to accesses in the pipeline stages determined by the
-<<synchronization-pipeline-stages-masks, source stage mask>> specified by
-pname:srcStageMask.
-Within that, the first access scope only includes the first access scopes
-defined by elements of the pname:pMemoryBarriers,
-pname:pBufferMemoryBarriers and pname:pImageMemoryBarriers arrays, which
-each define a set of <<synchronization-memory-barriers, memory barriers>>.
-If no memory barriers are specified, then the first access scope includes no
-accesses.
-
-The second <<synchronization-dependencies-access-scopes, access scope>> is
-limited to accesses in the pipeline stages determined by the
-<<synchronization-pipeline-stages-masks, destination stage mask>> specified
-by pname:dstStageMask.
-Within that, the second access scope only includes the second access scopes
-defined by elements of the pname:pMemoryBarriers,
-pname:pBufferMemoryBarriers and pname:pImageMemoryBarriers arrays, which
-each define a set of <<synchronization-memory-barriers, memory barriers>>.
-If no memory barriers are specified, then the second access scope includes
-no accesses.
-
-ifndef::VK_KHR_synchronization2[]
-[NOTE]
-.Note
-====
-flink:vkCmdWaitEvents is used with flink:vkCmdSetEvent to define a memory
-dependency between two sets of action commands, roughly in the same way as
-pipeline barriers, but split into two commands such that work between the
-two may: execute unhindered.
-
-Unlike flink:vkCmdPipelineBarrier, a <<synchronization-queue-transfers,
-queue family ownership transfer>> cannot: be performed using
-flink:vkCmdWaitEvents.
-====
-
-[NOTE]
-.Note
-====
-Applications should be careful to avoid race conditions when using events.
-There is no direct ordering guarantee between flink:vkCmdWaitEvents and
-ifdef::VK_KHR_synchronization2[flink:vkCmdResetEvent2KHR,]
-flink:vkCmdResetEvent, or flink:vkCmdSetEvent.
-Another execution dependency (e.g. a pipeline barrier or semaphore with
-ename:VK_PIPELINE_STAGE_ALL_COMMANDS_BIT) is needed to prevent such a race
-condition.
-====
-endif::VK_KHR_synchronization2[]
-
-.Valid Usage
-****
-:stageMaskName: srcStageMask
-include::{chapters}/commonvalidity/stage_mask_common.txt[]
-
-:stageMaskName: dstStageMask
-include::{chapters}/commonvalidity/stage_mask_common.txt[]
-include::{chapters}/commonvalidity/fine_sync_commands_common.txt[]
-  * [[VUID-vkCmdWaitEvents-srcStageMask-01158]]
-    pname:srcStageMask must: be the bitwise OR of the pname:stageMask
-    parameter used in previous calls to fname:vkCmdSetEvent with any of the
-    elements of pname:pEvents and ename:VK_PIPELINE_STAGE_HOST_BIT if any of
-    the elements of pname:pEvents was set using fname:vkSetEvent
-  * [[VUID-vkCmdWaitEvents-pEvents-01163]]
-    If pname:pEvents includes one or more events that will be signaled by
-    fname:vkSetEvent after pname:commandBuffer has been submitted to a
-    queue, then fname:vkCmdWaitEvents must: not be called inside a render
-    pass instance
-  * [[VUID-vkCmdWaitEvents-srcQueueFamilyIndex-02803]]
-    The pname:srcQueueFamilyIndex and pname:dstQueueFamilyIndex members of
-    any element of pname:pBufferMemoryBarriers or pname:pImageMemoryBarriers
-    must: be equal
-ifdef::VK_VERSION_1_1,VK_KHR_device_group[]
-  * [[VUID-vkCmdWaitEvents-commandBuffer-01167]]
-    pname:commandBuffer's current device mask must: include exactly one
-    physical device
-endif::VK_VERSION_1_1,VK_KHR_device_group[]
-ifdef::VK_KHR_synchronization2[]
-  * [[VUID-vkCmdWaitEvents-pEvents-03847]]
-    Elements of pname:pEvents must: not have been signaled by
-    flink:vkCmdSetEvent2KHR
-endif::VK_KHR_synchronization2[]
-****
-
-include::{generated}/validity/protos/vkCmdWaitEvents.txt[]
---
-
-
-[[synchronization-pipeline-barriers]]
-== Pipeline Barriers
-
-ifdef::VK_KHR_synchronization2[]
-[open,refpage='vkCmdPipelineBarrier2KHR',desc='Insert a memory dependency',type='protos']
---
-:refpage: vkCmdPipelineBarrier2KHR
-
-To record a pipeline barrier, call:
-
-include::{generated}/api/protos/vkCmdPipelineBarrier2KHR.txt[]
-
-  * pname:commandBuffer is the command buffer into which the command is
-    recorded.
-  * pname:pDependencyInfo is a pointer to a slink:VkDependencyInfoKHR
-    structure defining the scopes of this operation.
-
-When flink:vkCmdPipelineBarrier2KHR is submitted to a queue, it defines
-memory dependencies between commands that were submitted before it, and
-those submitted after it.
-
-The first <<synchronization-dependencies-scopes, synchronization scope>> and
-<<synchronization-dependencies-access-scopes, access scope>> of each memory
-dependency defined by any element [eq]#i# of pname:pDependencyInfos are
-applied to operations that occurred earlier in
-<<synchronization-submission-order,submission order>>.
-
-The second <<synchronization-dependencies-scopes, synchronization scope>>
-and <<synchronization-dependencies-access-scopes, access scope>> of each
-memory dependency defined by any element [eq]#i# of pname:pDependencyInfos
-are applied to operations that occurred later in
-<<synchronization-submission-order,submission order>>.
-
-If fname:vkCmdPipelineBarrier2KHR is recorded within a render pass instance,
-the synchronization scopes are
-<<synchronization-pipeline-barriers-subpass-self-dependencies, limited to
-operations within the same subpass>>.
-
-.Valid Usage
-****
-include::{chapters}/commonvalidity/pipeline_barrier_common.txt[]
-  * [[VUID-vkCmdPipelineBarrier2KHR-synchronization2-03848]]
-    The <<features-synchronization2, pname:synchronization2>> feature must:
-    be enabled
-  * [[VUID-vkCmdPipelineBarrier2KHR-srcStageMask-03849]]
-    The pname:srcStageMask member of any element of the
-    pname:pMemoryBarriers, pname:pBufferMemoryBarriers, or
-    pname:pImageMemoryBarriers members of pname:pDependencyInfo must: only
-    include pipeline stages valid for the queue family that was used to
-    create the command pool that pname:commandBuffer was allocated from
-  * [[VUID-vkCmdPipelineBarrier2KHR-dstStageMask-03850]]
-    The pname:dstStageMask member of any element of the
-    pname:pMemoryBarriers, pname:pBufferMemoryBarriers, or
-    pname:pImageMemoryBarriers members of pname:pDependencyInfo must: only
-    include pipeline stages valid for the queue family that was used to
-    create the command pool that pname:commandBuffer was allocated from
-****
-
-include::{generated}/validity/protos/vkCmdPipelineBarrier2KHR.txt[]
---
-endif::VK_KHR_synchronization2[]
-
-[open,refpage='vkCmdPipelineBarrier',desc='Insert a memory dependency',type='protos']
---
-:refpage: vkCmdPipelineBarrier
-
-To record a pipeline barrier, call:
-
-include::{generated}/api/protos/vkCmdPipelineBarrier.txt[]
-
-  * pname:commandBuffer is the command buffer into which the command is
-    recorded.
-  * pname:srcStageMask is a bitmask of elink:VkPipelineStageFlagBits
-    specifying the <<synchronization-pipeline-stages-masks,source stages>>.
-  * pname:dstStageMask is a bitmask of elink:VkPipelineStageFlagBits
-    specifying the <<synchronization-pipeline-stages-masks,destination
-    stages>>.
-  * pname:dependencyFlags is a bitmask of elink:VkDependencyFlagBits
-    specifying how execution and memory dependencies are formed.
-  * pname:memoryBarrierCount is the length of the pname:pMemoryBarriers
-    array.
-  * pname:pMemoryBarriers is a pointer to an array of slink:VkMemoryBarrier
-    structures.
-  * pname:bufferMemoryBarrierCount is the length of the
-    pname:pBufferMemoryBarriers array.
-  * pname:pBufferMemoryBarriers is a pointer to an array of
-    slink:VkBufferMemoryBarrier structures.
-  * pname:imageMemoryBarrierCount is the length of the
-    pname:pImageMemoryBarriers array.
-  * pname:pImageMemoryBarriers is a pointer to an array of
-    slink:VkImageMemoryBarrier structures.
-
-ifdef::VK_KHR_synchronization2[]
-fname:vkCmdPipelineBarrier operates almost identically to
-flink:vkCmdPipelineBarrier2KHR, except that the scopes and barriers are
-defined as direct parameters rather than being defined by an
-slink:VkDependencyInfoKHR.
-endif::VK_KHR_synchronization2[]
-
-When flink:vkCmdPipelineBarrier is submitted to a queue, it defines a memory
-dependency between commands that were submitted before it, and those
-submitted after it.
-
-If flink:vkCmdPipelineBarrier was recorded outside a render pass instance,
-the first <<synchronization-dependencies-scopes, synchronization scope>>
-includes all commands that occur earlier in
-<<synchronization-submission-order,submission order>>.
-If flink:vkCmdPipelineBarrier was recorded inside a render pass instance,
-the first synchronization scope includes only commands that occur earlier in
-<<synchronization-submission-order,submission order>> within the same
-subpass.
-In either case, the first synchronization scope is limited to operations on
-the pipeline stages determined by the
-<<synchronization-pipeline-stages-masks, source stage mask>> specified by
-pname:srcStageMask.
-
-If flink:vkCmdPipelineBarrier was recorded outside a render pass instance,
-the second <<synchronization-dependencies-scopes, synchronization scope>>
-includes all commands that occur later in
-<<synchronization-submission-order,submission order>>.
-If flink:vkCmdPipelineBarrier was recorded inside a render pass instance,
-the second synchronization scope includes only commands that occur later in
-<<synchronization-submission-order,submission order>> within the same
-subpass.
-In either case, the second synchronization scope is limited to operations on
-the pipeline stages determined by the
-<<synchronization-pipeline-stages-masks, destination stage mask>> specified
-by pname:dstStageMask.
-
-The first <<synchronization-dependencies-access-scopes, access scope>> is
-limited to accesses in the pipeline stages determined by the
-<<synchronization-pipeline-stages-masks, source stage mask>> specified by
-pname:srcStageMask.
-Within that, the first access scope only includes the first access scopes
-defined by elements of the pname:pMemoryBarriers,
-pname:pBufferMemoryBarriers and pname:pImageMemoryBarriers arrays, which
-each define a set of <<synchronization-memory-barriers, memory barriers>>.
-If no memory barriers are specified, then the first access scope includes no
-accesses.
-
-The second <<synchronization-dependencies-access-scopes, access scope>> is
-limited to accesses in the pipeline stages determined by the
-<<synchronization-pipeline-stages-masks, destination stage mask>> specified
-by pname:dstStageMask.
-Within that, the second access scope only includes the second access scopes
-defined by elements of the pname:pMemoryBarriers,
-pname:pBufferMemoryBarriers and pname:pImageMemoryBarriers arrays, which
-each define a set of <<synchronization-memory-barriers, memory barriers>>.
-If no memory barriers are specified, then the second access scope includes
-no accesses.
-
-If pname:dependencyFlags includes ename:VK_DEPENDENCY_BY_REGION_BIT, then
-any dependency between <<synchronization-framebuffer-regions,
-framebuffer-space>> pipeline stages is
-<<synchronization-framebuffer-regions, framebuffer-local>> - otherwise it is
-<<synchronization-framebuffer-regions, framebuffer-global>>.
-
-.Valid Usage
-****
-:stageMaskName: srcStageMask
-include::{chapters}/commonvalidity/stage_mask_common.txt[]
-
-:stageMaskName: dstStageMask
-include::{chapters}/commonvalidity/stage_mask_common.txt[]
-include::{chapters}/commonvalidity/fine_sync_commands_common.txt[]
-include::{chapters}/commonvalidity/pipeline_barrier_common.txt[]
-****
-
-include::{generated}/validity/protos/vkCmdPipelineBarrier.txt[]
---
-
-[open,refpage='VkDependencyFlagBits',desc='Bitmask specifying how execution and memory dependencies are formed',type='enums']
---
-Bits which can: be set in fname:vkCmdPipelineBarrier::pname:dependencyFlags,
-specifying how execution and memory dependencies are formed, are:
-
-include::{generated}/api/enums/VkDependencyFlagBits.txt[]
-
-  * ename:VK_DEPENDENCY_BY_REGION_BIT specifies that dependencies will be
-    <<synchronization-framebuffer-regions, framebuffer-local>>.
-ifdef::VK_VERSION_1_1,VK_KHR_multiview[]
-  * ename:VK_DEPENDENCY_VIEW_LOCAL_BIT specifies that a
-    <<synchronization-pipeline-barriers-subpass-self-dependencies, subpass
-    has more than one view>>.
-endif::VK_VERSION_1_1,VK_KHR_multiview[]
-ifdef::VK_VERSION_1_1,VK_KHR_device_group[]
-  * ename:VK_DEPENDENCY_DEVICE_GROUP_BIT specifies that dependencies are
-    <<synchronization-device-local-dependencies, non-device-local>>.
-endif::VK_VERSION_1_1,VK_KHR_device_group[]
---
-
-[open,refpage='VkDependencyFlags',desc='Bitmask of VkDependencyFlagBits',type='flags']
---
-include::{generated}/api/flags/VkDependencyFlags.txt[]
-
-tname:VkDependencyFlags is a bitmask type for setting a mask of zero or more
-elink:VkDependencyFlagBits.
---
-
-
-[[synchronization-pipeline-barriers-subpass-self-dependencies]]
-=== Subpass Self-dependency
-
-ifdef::VK_KHR_dynamic_rendering[]
-flink:vkCmdPipelineBarrier
-ifdef::VK_KHR_synchronization2[]
-or flink:vkCmdPipelineBarrier2KHR
-endif::VK_KHR_synchronization2[]
-must: not be called within a render pass instance started with
-flink:vkCmdBeginRenderingKHR.
-endif::VK_KHR_dynamic_rendering[]
-
-If flink:vkCmdPipelineBarrier
-ifdef::VK_KHR_synchronization2[]
-or flink:vkCmdPipelineBarrier2KHR
-endif::VK_KHR_synchronization2[]
-is called inside a render pass instance, the following restrictions apply.
-For a given subpass to allow a pipeline barrier, the render pass must:
-declare a _self-dependency_ from that subpass to itself.
-That is, there must: exist a subpass dependency with pname:srcSubpass and
-pname:dstSubpass both equal to that subpass index.
-More than one self-dependency can: be declared for each subpass.
-
-Self-dependencies must: only include pipeline stage bits that are graphics
-stages.
-If any of the stages in pname:srcStageMask are
-<<synchronization-framebuffer-regions,framebuffer-space stages>>,
-pname:dstStageMask must: only contain
-<<synchronization-framebuffer-regions,framebuffer-space stages>>.
-This means that pseudo-stages like ename:VK_PIPELINE_STAGE_ALL_COMMANDS_BIT
-which include the execution of both framebuffer-space stages and
-non-framebuffer-space stages must: not be used.
-
-If the source and destination stage masks both include framebuffer-space
-stages, then pname:dependencyFlags must: include
-ename:VK_DEPENDENCY_BY_REGION_BIT.
-ifdef::VK_VERSION_1_1,VK_KHR_multiview[]
-If the subpass has more than one view, then pname:dependencyFlags must:
-include ename:VK_DEPENDENCY_VIEW_LOCAL_BIT.
-endif::VK_VERSION_1_1,VK_KHR_multiview[]
-
-Each of the <<synchronization-dependencies-scopes, synchronization scopes>>
-and <<synchronization-dependencies-access-scopes, access scopes>> of a
-ifdef::VK_KHR_synchronization2[]
-flink:vkCmdPipelineBarrier2KHR or
-endif::VK_KHR_synchronization2[]
-flink:vkCmdPipelineBarrier command inside a render pass instance must: be a
-subset of the scopes of one of the self-dependencies for the current
-subpass.
-
-If the self-dependency has ename:VK_DEPENDENCY_BY_REGION_BIT
-ifdef::VK_VERSION_1_1,VK_KHR_multiview[]
-or ename:VK_DEPENDENCY_VIEW_LOCAL_BIT
-endif::VK_VERSION_1_1,VK_KHR_multiview[]
-set, then so must: the pipeline barrier.
-Pipeline barriers within a render pass instance must: not include buffer
-memory barriers.
-Image memory barriers must: only specify image subresources that are used as
-attachments within the subpass, and must: not define an
-<<synchronization-image-layout-transitions, image layout transition>> or
-<<synchronization-queue-transfers, queue family ownership transfer>>.
-
-
-[[synchronization-memory-barriers]]
-== Memory Barriers
-
-_Memory barriers_ are used to explicitly control access to buffer and image
-subresource ranges.
-Memory barriers are used to <<synchronization-queue-transfers, transfer
-ownership between queue families>>,
-<<synchronization-image-layout-transitions, change image layouts>>, and
-define <<synchronization-dependencies-available-and-visible, availability
-and visibility operations>>.
-They explicitly define the <<synchronization-access-types, access types>>
-and buffer and image subresource ranges that are included in the
-<<synchronization-dependencies-access-scopes, access scopes>> of a memory
-dependency that is created by a synchronization command that includes them.
-
-
-[[synchronization-global-memory-barriers]]
-=== Global Memory Barriers
-
-Global memory barriers apply to memory accesses involving all memory objects
-that exist at the time of its execution.
-
-ifdef::VK_KHR_synchronization2[]
-[open,refpage='VkMemoryBarrier2KHR',desc='Structure specifying a global memory barrier',type='structs']
---
-:refpage: VkMemoryBarrier2KHR
-
-The sname:VkMemoryBarrier2KHR structure is defined as:
-
-include::{generated}/api/structs/VkMemoryBarrier2KHR.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:srcStageMask is a tlink:VkPipelineStageFlags2KHR mask of pipeline
-    stages to be included in the <<synchronization-dependencies-scopes,
-    first synchronization scope>>.
-  * pname:srcAccessMask is a tlink:VkAccessFlags2KHR mask of access flags to
-    be included in the <<synchronization-dependencies-access-scopes, first
-    access scope>>.
-  * pname:dstStageMask is a tlink:VkPipelineStageFlags2KHR mask of pipeline
-    stages to be included in the <<synchronization-dependencies-scopes,
-    second synchronization scope>>.
-  * pname:dstAccessMask is a tlink:VkAccessFlags2KHR mask of access flags to
-    be included in the <<synchronization-dependencies-access-scopes, second
-    access scope>>.
-
-This structure defines a <<synchronization-dependencies-memory, memory
-dependency>> affecting all device memory.
-
-The first <<synchronization-dependencies-scopes, synchronization scope>> and
-<<synchronization-dependencies-access-scopes, access scope>> described by
-this structure include only operations and memory accesses specified by
-pname:srcStageMask and pname:srcAccessMask.
-
-The second <<synchronization-dependencies-scopes, synchronization scope>>
-and <<synchronization-dependencies-access-scopes, access scope>> described
-by this structure include only operations and memory accesses specified by
-pname:dstStageMask and pname:dstAccessMask.
-
-.Valid Usage
-****
-:stageMaskName: srcStageMask
-:accessMaskName: srcAccessMask
-include::{chapters}/commonvalidity/stage_mask_2_common.txt[]
-include::{chapters}/commonvalidity/access_mask_2_common.txt[]
-
-:stageMaskName: dstStageMask
-:accessMaskName: dstAccessMask
-include::{chapters}/commonvalidity/stage_mask_2_common.txt[]
-include::{chapters}/commonvalidity/access_mask_2_common.txt[]
-****
-
-include::{generated}/validity/structs/VkMemoryBarrier2KHR.txt[]
---
-endif::VK_KHR_synchronization2[]
-
-[open,refpage='VkMemoryBarrier',desc='Structure specifying a global memory barrier',type='structs']
---
-The sname:VkMemoryBarrier structure is defined as:
-
-include::{generated}/api/structs/VkMemoryBarrier.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:srcAccessMask is a bitmask of elink:VkAccessFlagBits specifying a
-    <<synchronization-access-masks, source access mask>>.
-  * pname:dstAccessMask is a bitmask of elink:VkAccessFlagBits specifying a
-    <<synchronization-access-masks, destination access mask>>.
-
-The first <<synchronization-dependencies-access-scopes, access scope>> is
-limited to access types in the <<synchronization-access-masks, source access
-mask>> specified by pname:srcAccessMask.
-
-The second <<synchronization-dependencies-access-scopes, access scope>> is
-limited to access types in the <<synchronization-access-masks, destination
-access mask>> specified by pname:dstAccessMask.
-
-include::{generated}/validity/structs/VkMemoryBarrier.txt[]
---
-
-
-[[synchronization-buffer-memory-barriers]]
-=== Buffer Memory Barriers
-
-Buffer memory barriers only apply to memory accesses involving a specific
-buffer range.
-That is, a memory dependency formed from a buffer memory barrier is
-<<synchronization-dependencies-access-scopes, scoped>> to access via the
-specified buffer range.
-Buffer memory barriers can: also be used to define a
-<<synchronization-queue-transfers, queue family ownership transfer>> for the
-specified buffer range.
-
-ifdef::VK_KHR_synchronization2[]
-[open,refpage='VkBufferMemoryBarrier2KHR',desc='Structure specifying a buffer memory barrier',type='structs']
---
-:refpage: VkBufferMemoryBarrier2KHR
-
-The sname:VkBufferMemoryBarrier2KHR structure is defined as:
-
-include::{generated}/api/structs/VkBufferMemoryBarrier2KHR.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:srcStageMask is a tlink:VkPipelineStageFlags2KHR mask of pipeline
-    stages to be included in the <<synchronization-dependencies-scopes,
-    first synchronization scope>>.
-  * pname:srcAccessMask is a tlink:VkAccessFlags2KHR mask of access flags to
-    be included in the <<synchronization-dependencies-access-scopes, first
-    access scope>>.
-  * pname:dstStageMask is a tlink:VkPipelineStageFlags2KHR mask of pipeline
-    stages to be included in the <<synchronization-dependencies-scopes,
-    second synchronization scope>>.
-  * pname:dstAccessMask is a tlink:VkAccessFlags2KHR mask of access flags to
-    be included in the <<synchronization-dependencies-access-scopes, second
-    access scope>>.
-  * pname:srcQueueFamilyIndex is the source queue family for a
-    <<synchronization-queue-transfers, queue family ownership transfer>>.
-  * pname:dstQueueFamilyIndex is the destination queue family for a
-    <<synchronization-queue-transfers, queue family ownership transfer>>.
-  * pname:buffer is a handle to the buffer whose backing memory is affected
-    by the barrier.
-  * pname:offset is an offset in bytes into the backing memory for
-    pname:buffer; this is relative to the base offset as bound to the buffer
-    (see flink:vkBindBufferMemory).
-  * pname:size is a size in bytes of the affected area of backing memory for
-    pname:buffer, or ename:VK_WHOLE_SIZE to use the range from pname:offset
-    to the end of the buffer.
-
-This structure defines a <<synchronization-dependencies-memory, memory
-dependency>> limited to a range of a buffer, and can: define a
-<<synchronization-queue-transfers, queue family transfer operation>> for
-that range.
-
-The first <<synchronization-dependencies-scopes, synchronization scope>> and
-<<synchronization-dependencies-access-scopes, access scope>> described by
-this structure include only operations and memory accesses specified by
-pname:srcStageMask and pname:srcAccessMask.
-
-The second <<synchronization-dependencies-scopes, synchronization scope>>
-and <<synchronization-dependencies-access-scopes, access scope>> described
-by this structure include only operations and memory accesses specified by
-pname:dstStageMask and pname:dstAccessMask.
-
-Both <<synchronization-dependencies-access-scopes, access scopes>> are
-limited to only memory accesses to pname:buffer in the range defined by
-pname:offset and pname:size.
-
-If pname:buffer was created with ename:VK_SHARING_MODE_EXCLUSIVE, and
-pname:srcQueueFamilyIndex is not equal to pname:dstQueueFamilyIndex, this
-memory barrier defines a <<synchronization-queue-transfers, queue family
-transfer operation>>.
-When executed on a queue in the family identified by
-pname:srcQueueFamilyIndex, this barrier defines a
-<<synchronization-queue-transfers-release, queue family release operation>>
-for the specified buffer range, and the second synchronization and access
-scopes do not synchronize operations on that queue.
-When executed on a queue in the family identified by
-pname:dstQueueFamilyIndex, this barrier defines a
-<<synchronization-queue-transfers-acquire, queue family acquire operation>>
-for the specified buffer range, and the first synchronization and access
-scopes do not synchronize operations on that queue.
-
-ifdef::VK_VERSION_1_1,VK_KHR_external_memory[]
-A <<synchronization-queue-transfers, queue family transfer operation>> is
-also defined if the values are not equal, and either is one of the special
-queue family values reserved for external memory ownership transfers, as
-described in <<synchronization-queue-transfers>>.
-A <<synchronization-queue-transfers-release, queue family release
-operation>> is defined when pname:dstQueueFamilyIndex is one of those
-values, and a <<synchronization-queue-transfers-acquire, queue family
-acquire operation>> is defined when pname:srcQueueFamilyIndex is one of
-those values.
-endif::VK_VERSION_1_1,VK_KHR_external_memory[]
-
-
-.Valid Usage
-****
-
-:stageMaskName: srcStageMask
-:accessMaskName: srcAccessMask
-include::{chapters}/commonvalidity/stage_mask_2_common.txt[]
-include::{chapters}/commonvalidity/access_mask_2_common.txt[]
-
-:stageMaskName: dstStageMask
-:accessMaskName: dstAccessMask
-include::{chapters}/commonvalidity/stage_mask_2_common.txt[]
-include::{chapters}/commonvalidity/access_mask_2_common.txt[]
-include::{chapters}/commonvalidity/buffer_memory_barrier_common.txt[]
-  * [[VUID-VkBufferMemoryBarrier2KHR-srcStageMask-03851]]
-    If either pname:srcStageMask or pname:dstStageMask includes
-    ename:VK_PIPELINE_STAGE_2_HOST_BIT_KHR, pname:srcQueueFamilyIndex and
-    pname:dstQueueFamilyIndex must: be equal
-****
-
-include::{generated}/validity/structs/VkBufferMemoryBarrier2KHR.txt[]
---
-endif::VK_KHR_synchronization2[]
-
-[open,refpage='VkBufferMemoryBarrier',desc='Structure specifying a buffer memory barrier',type='structs']
---
-:refpage: VkBufferMemoryBarrier
-
-The sname:VkBufferMemoryBarrier structure is defined as:
-
-include::{generated}/api/structs/VkBufferMemoryBarrier.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:srcAccessMask is a bitmask of elink:VkAccessFlagBits specifying a
-    <<synchronization-access-masks, source access mask>>.
-  * pname:dstAccessMask is a bitmask of elink:VkAccessFlagBits specifying a
-    <<synchronization-access-masks, destination access mask>>.
-  * pname:srcQueueFamilyIndex is the source queue family for a
-    <<synchronization-queue-transfers, queue family ownership transfer>>.
-  * pname:dstQueueFamilyIndex is the destination queue family for a
-    <<synchronization-queue-transfers, queue family ownership transfer>>.
-  * pname:buffer is a handle to the buffer whose backing memory is affected
-    by the barrier.
-  * pname:offset is an offset in bytes into the backing memory for
-    pname:buffer; this is relative to the base offset as bound to the buffer
-    (see flink:vkBindBufferMemory).
-  * pname:size is a size in bytes of the affected area of backing memory for
-    pname:buffer, or ename:VK_WHOLE_SIZE to use the range from pname:offset
-    to the end of the buffer.
-
-The first <<synchronization-dependencies-access-scopes, access scope>> is
-limited to access to memory through the specified buffer range, via access
-types in the <<synchronization-access-masks, source access mask>> specified
-by pname:srcAccessMask.
-If pname:srcAccessMask includes ename:VK_ACCESS_HOST_WRITE_BIT, memory
-writes performed by that access type are also made visible, as that access
-type is not performed through a resource.
-
-The second <<synchronization-dependencies-access-scopes, access scope>> is
-limited to access to memory through the specified buffer range, via access
-types in the <<synchronization-access-masks, destination access mask>>
-specified by pname:dstAccessMask.
-If pname:dstAccessMask includes ename:VK_ACCESS_HOST_WRITE_BIT or
-ename:VK_ACCESS_HOST_READ_BIT, available memory writes are also made visible
-to accesses of those types, as those access types are not performed through
-a resource.
-
-If pname:srcQueueFamilyIndex is not equal to pname:dstQueueFamilyIndex, and
-pname:srcQueueFamilyIndex is equal to the current queue family, then the
-memory barrier defines a <<synchronization-queue-transfers-release, queue
-family release operation>> for the specified buffer range, and the second
-access scope includes no access, as if pname:dstAccessMask was `0`.
-
-If pname:dstQueueFamilyIndex is not equal to pname:srcQueueFamilyIndex, and
-pname:dstQueueFamilyIndex is equal to the current queue family, then the
-memory barrier defines a <<synchronization-queue-transfers-acquire, queue
-family acquire operation>> for the specified buffer range, and the first
-access scope includes no access, as if pname:srcAccessMask was `0`.
-
-.Valid Usage
-****
-include::{chapters}/commonvalidity/buffer_memory_barrier_common.txt[]
-ifndef::VK_VERSION_1_1,VK_KHR_external_memory[]
-  * [[VUID-VkBufferMemoryBarrier-synchronization2-03852]]
-    If the <<features-synchronization2,pname:synchronization2 feature>> is
-    not enabled, and pname:buffer was created with a sharing mode of
-    ename:VK_SHARING_MODE_CONCURRENT, pname:srcQueueFamilyIndex and
-    pname:dstQueueFamilyIndex must: both be ename:VK_QUEUE_FAMILY_IGNORED
-endif::VK_VERSION_1_1,VK_KHR_external_memory[]
-ifdef::VK_VERSION_1_1,VK_KHR_external_memory[]
-  * [[VUID-VkBufferMemoryBarrier-synchronization2-03853]]
-    If the <<features-synchronization2,pname:synchronization2 feature>> is
-    not enabled, and pname:buffer was created with a sharing mode of
-    ename:VK_SHARING_MODE_CONCURRENT, at least one of
-    pname:srcQueueFamilyIndex and pname:dstQueueFamilyIndex must: be
-    ename:VK_QUEUE_FAMILY_IGNORED
-endif::VK_VERSION_1_1,VK_KHR_external_memory[]
-****
-
-include::{generated}/validity/structs/VkBufferMemoryBarrier.txt[]
---
-
-[open,refpage='VK_WHOLE_SIZE',desc='Sentinel value to use entire remaining array length',type='consts']
---
-ename:VK_WHOLE_SIZE is a special value indicating that the entire remaining
-length of a buffer following a given pname:offset should be used.
-It can: be specified for slink:VkBufferMemoryBarrier::pname:size and other
-structures.
-
-include::{generated}/api/enums/VK_WHOLE_SIZE.txt[]
---
-
-
-[[synchronization-image-memory-barriers]]
-=== Image Memory Barriers
-
-Image memory barriers only apply to memory accesses involving a specific
-image subresource range.
-That is, a memory dependency formed from an image memory barrier is
-<<synchronization-dependencies-access-scopes, scoped>> to access via the
-specified image subresource range.
-Image memory barriers can: also be used to define
-<<synchronization-image-layout-transitions, image layout transitions>> or a
-<<synchronization-queue-transfers, queue family ownership transfer>> for the
-specified image subresource range.
-
-ifdef::VK_KHR_synchronization2[]
-[open,refpage='VkImageMemoryBarrier2KHR',desc='Structure specifying an image memory barrier',type='structs']
---
-:refpage: VkImageMemoryBarrier2KHR
-
-The sname:VkImageMemoryBarrier2KHR structure is defined as:
-
-include::{generated}/api/structs/VkImageMemoryBarrier2KHR.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:srcStageMask is a tlink:VkPipelineStageFlags2KHR mask of pipeline
-    stages to be included in the <<synchronization-dependencies-scopes,
-    first synchronization scope>>.
-  * pname:srcAccessMask is a tlink:VkAccessFlags2KHR mask of access flags to
-    be included in the <<synchronization-dependencies-access-scopes, first
-    access scope>>.
-  * pname:dstStageMask is a tlink:VkPipelineStageFlags2KHR mask of pipeline
-    stages to be included in the <<synchronization-dependencies-scopes,
-    second synchronization scope>>.
-  * pname:dstAccessMask is a tlink:VkAccessFlags2KHR mask of access flags to
-    be included in the <<synchronization-dependencies-access-scopes, second
-    access scope>>.
-  * pname:oldLayout is the old layout in an
-    <<synchronization-image-layout-transitions, image layout transition>>.
-  * pname:newLayout is the new layout in an
-    <<synchronization-image-layout-transitions, image layout transition>>.
-  * pname:srcQueueFamilyIndex is the source queue family for a
-    <<synchronization-queue-transfers, queue family ownership transfer>>.
-  * pname:dstQueueFamilyIndex is the destination queue family for a
-    <<synchronization-queue-transfers, queue family ownership transfer>>.
-  * pname:image is a handle to the image affected by this barrier.
-  * pname:subresourceRange describes the <<resources-image-views, image
-    subresource range>> within pname:image that is affected by this barrier.
-
-This structure defines a <<synchronization-dependencies-memory, memory
-dependency>> limited to an image subresource range, and can: define a
-<<synchronization-queue-transfers, queue family transfer operation>> and
-<<synchronization-image-layout-transitions, image layout transition>> for
-that subresource range.
-
-The first <<synchronization-dependencies-scopes, synchronization scope>> and
-<<synchronization-dependencies-access-scopes, access scope>> described by
-this structure include only operations and memory accesses specified by
-pname:srcStageMask and pname:srcAccessMask.
-
-The second <<synchronization-dependencies-scopes, synchronization scope>>
-and <<synchronization-dependencies-access-scopes, access scope>> described
-by this structure include only operations and memory accesses specified by
-pname:dstStageMask and pname:dstAccessMask.
-
-Both <<synchronization-dependencies-access-scopes, access scopes>> are
-limited to only memory accesses to pname:image in the subresource range
-defined by pname:subresourceRange.
-
-If pname:image was created with ename:VK_SHARING_MODE_EXCLUSIVE, and
-pname:srcQueueFamilyIndex is not equal to pname:dstQueueFamilyIndex, this
-memory barrier defines a <<synchronization-queue-transfers, queue family
-transfer operation>>.
-When executed on a queue in the family identified by
-pname:srcQueueFamilyIndex, this barrier defines a
-<<synchronization-queue-transfers-release, queue family release operation>>
-for the specified image subresource range, and the second synchronization
-and access scopes do not synchronize operations on that queue.
-When executed on a queue in the family identified by
-pname:dstQueueFamilyIndex, this barrier defines a
-<<synchronization-queue-transfers-acquire, queue family acquire operation>>
-for the specified image subresource range, and the first synchronization and
-access scopes do not synchronize operations on that queue.
-
-ifdef::VK_VERSION_1_1,VK_KHR_external_memory[]
-A <<synchronization-queue-transfers, queue family transfer operation>> is
-also defined if the values are not equal, and either is one of the special
-queue family values reserved for external memory ownership transfers, as
-described in <<synchronization-queue-transfers>>.
-A <<synchronization-queue-transfers-release, queue family release
-operation>> is defined when pname:dstQueueFamilyIndex is one of those
-values, and a <<synchronization-queue-transfers-acquire, queue family
-acquire operation>> is defined when pname:srcQueueFamilyIndex is one of
-those values.
-endif::VK_VERSION_1_1,VK_KHR_external_memory[]
-
-If pname:oldLayout is not equal to pname:newLayout, then the memory barrier
-defines an <<synchronization-image-layout-transitions, image layout
-transition>> for the specified image subresource range.
-If this memory barrier defines a <<synchronization-queue-transfers, queue
-family transfer operation>>, the layout transition is only executed once
-between the queues.
-
-[NOTE]
-.Note
-====
-When the old and new layout are equal, the layout values are ignored - data
-is preserved no matter what values are specified, or what layout the image
-is currently in.
-====
-
-ifdef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
-
-If pname:image has a multi-planar format and the image is _disjoint_, then
-including ename:VK_IMAGE_ASPECT_COLOR_BIT in the pname:aspectMask member of
-pname:subresourceRange is equivalent to including
-ename:VK_IMAGE_ASPECT_PLANE_0_BIT, ename:VK_IMAGE_ASPECT_PLANE_1_BIT, and
-(for three-plane formats only) ename:VK_IMAGE_ASPECT_PLANE_2_BIT.
-
-endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
-
-.Valid Usage
-****
-
-:stageMaskName: srcStageMask
-:accessMaskName: srcAccessMask
-include::{chapters}/commonvalidity/stage_mask_2_common.txt[]
-include::{chapters}/commonvalidity/access_mask_2_common.txt[]
-
-:stageMaskName: dstStageMask
-:accessMaskName: dstAccessMask
-include::{chapters}/commonvalidity/stage_mask_2_common.txt[]
-include::{chapters}/commonvalidity/access_mask_2_common.txt[]
-include::{chapters}/commonvalidity/image_memory_barrier_common.txt[]
-  * [[VUID-VkImageMemoryBarrier2KHR-srcStageMask-03854]]
-    If either pname:srcStageMask or pname:dstStageMask includes
-    ename:VK_PIPELINE_STAGE_2_HOST_BIT_KHR, pname:srcQueueFamilyIndex and
-    pname:dstQueueFamilyIndex must: be equal
-  * [[VUID-VkImageMemoryBarrier2KHR-srcStageMask-03855]]
-    If pname:srcStageMask includes ename:VK_PIPELINE_STAGE_2_HOST_BIT_KHR,
-    and pname:srcQueueFamilyIndex and pname:dstQueueFamilyIndex define a
-    <<synchronization-queue-transfers, queue family ownership transfer>> or
-    pname:oldLayout and pname:newLayout define an
-    <<synchronization-image-layout-transitions, image layout transition>>,
-    pname:oldLayout must: be one of ename:VK_IMAGE_LAYOUT_PREINITIALIZED,
-    ename:VK_IMAGE_LAYOUT_UNDEFINED, or ename:VK_IMAGE_LAYOUT_GENERAL
-****
-
-include::{generated}/validity/structs/VkImageMemoryBarrier2KHR.txt[]
---
-endif::VK_KHR_synchronization2[]
-
-[open,refpage='VkImageMemoryBarrier',desc='Structure specifying the parameters of an image memory barrier',type='structs']
---
-:refpage: VkImageMemoryBarrier
-
-The sname:VkImageMemoryBarrier structure is defined as:
-
-include::{generated}/api/structs/VkImageMemoryBarrier.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:srcAccessMask is a bitmask of elink:VkAccessFlagBits specifying a
-    <<synchronization-access-masks, source access mask>>.
-  * pname:dstAccessMask is a bitmask of elink:VkAccessFlagBits specifying a
-    <<synchronization-access-masks, destination access mask>>.
-  * pname:oldLayout is the old layout in an
-    <<synchronization-image-layout-transitions, image layout transition>>.
-  * pname:newLayout is the new layout in an
-    <<synchronization-image-layout-transitions, image layout transition>>.
-  * pname:srcQueueFamilyIndex is the source queue family for a
-    <<synchronization-queue-transfers, queue family ownership transfer>>.
-  * pname:dstQueueFamilyIndex is the destination queue family for a
-    <<synchronization-queue-transfers, queue family ownership transfer>>.
-  * pname:image is a handle to the image affected by this barrier.
-  * pname:subresourceRange describes the <<resources-image-views, image
-    subresource range>> within pname:image that is affected by this barrier.
-
-The first <<synchronization-dependencies-access-scopes, access scope>> is
-limited to access to memory through the specified image subresource range,
-via access types in the <<synchronization-access-masks, source access mask>>
-specified by pname:srcAccessMask.
-If pname:srcAccessMask includes ename:VK_ACCESS_HOST_WRITE_BIT, memory
-writes performed by that access type are also made visible, as that access
-type is not performed through a resource.
-
-The second <<synchronization-dependencies-access-scopes, access scope>> is
-limited to access to memory through the specified image subresource range,
-via access types in the <<synchronization-access-masks, destination access
-mask>> specified by pname:dstAccessMask.
-If pname:dstAccessMask includes ename:VK_ACCESS_HOST_WRITE_BIT or
-ename:VK_ACCESS_HOST_READ_BIT, available memory writes are also made visible
-to accesses of those types, as those access types are not performed through
-a resource.
-
-If pname:srcQueueFamilyIndex is not equal to pname:dstQueueFamilyIndex, and
-pname:srcQueueFamilyIndex is equal to the current queue family, then the
-memory barrier defines a <<synchronization-queue-transfers-release, queue
-family release operation>> for the specified image subresource range, and
-the second access scope includes no access, as if pname:dstAccessMask was
-`0`.
-
-If pname:dstQueueFamilyIndex is not equal to pname:srcQueueFamilyIndex, and
-pname:dstQueueFamilyIndex is equal to the current queue family, then the
-memory barrier defines a <<synchronization-queue-transfers-acquire, queue
-family acquire operation>> for the specified image subresource range, and
-the first access scope includes no access, as if pname:srcAccessMask was
-`0`.
-
-ifdef::VK_KHR_synchronization2[]
-If the <<features-synchronization2,pname:synchronization2 feature>> is not
-enabled or pname:oldLayout is not equal to pname:newLayout,
-endif::VK_KHR_synchronization2[]
-pname:oldLayout and pname:newLayout define an
-<<synchronization-image-layout-transitions, image layout transition>> for
-the specified image subresource range.
-
-ifdef::VK_KHR_synchronization2[]
-[NOTE]
-.Note
-====
-If the <<features-synchronization2,pname:synchronization2 feature>> is
-enabled, when the old and new layout are equal, the layout values are
-ignored - data is preserved no matter what values are specified, or what
-layout the image is currently in.
-====
-endif::VK_KHR_synchronization2[]
-
-ifdef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
-
-If pname:image has a multi-planar format and the image is _disjoint_, then
-including ename:VK_IMAGE_ASPECT_COLOR_BIT in the pname:aspectMask member of
-pname:subresourceRange is equivalent to including
-ename:VK_IMAGE_ASPECT_PLANE_0_BIT, ename:VK_IMAGE_ASPECT_PLANE_1_BIT, and
-(for three-plane formats only) ename:VK_IMAGE_ASPECT_PLANE_2_BIT.
-
-endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
-
-.Valid Usage
-****
-include::{chapters}/commonvalidity/image_memory_barrier_common.txt[]
-ifndef::VK_VERSION_1_1,VK_KHR_external_memory[]
-  * [[VUID-VkImageMemoryBarrier-synchronization2-03856]]
-    If the <<features-synchronization2,pname:synchronization2 feature>> is
-    not enabled, and pname:image was created with a sharing mode of
-    ename:VK_SHARING_MODE_CONCURRENT, pname:srcQueueFamilyIndex and
-    pname:dstQueueFamilyIndex must: both be ename:VK_QUEUE_FAMILY_IGNORED
-endif::VK_VERSION_1_1,VK_KHR_external_memory[]
-ifdef::VK_VERSION_1_1,VK_KHR_external_memory[]
-  * [[VUID-VkImageMemoryBarrier-synchronization2-03857]]
-    If the <<features-synchronization2,pname:synchronization2 feature>> is
-    not enabled, and pname:image was created with a sharing mode of
-    ename:VK_SHARING_MODE_CONCURRENT, at least one of
-    pname:srcQueueFamilyIndex and pname:dstQueueFamilyIndex must: be
-    ename:VK_QUEUE_FAMILY_IGNORED
-endif::VK_VERSION_1_1,VK_KHR_external_memory[]
-****
-
-include::{generated}/validity/structs/VkImageMemoryBarrier.txt[]
---
-
-
-[[synchronization-queue-transfers]]
-=== Queue Family Ownership Transfer
-
-Resources created with a elink:VkSharingMode of
-ename:VK_SHARING_MODE_EXCLUSIVE must: have their ownership explicitly
-transferred from one queue family to another in order to access their
-content in a well-defined manner on a queue in a different queue family.
-
-[open,refpage='VK_QUEUE_FAMILY_IGNORED',desc='Ignored queue family index sentinel',type='consts']
---
-The special queue family index ename:VK_QUEUE_FAMILY_IGNORED indicates that
-a queue family parameter or member is ignored.
-
-include::{generated}/api/enums/VK_QUEUE_FAMILY_IGNORED.txt[]
---
-
-ifdef::VK_VERSION_1_1,VK_KHR_external_memory[]
-Resources shared with external APIs or instances using external memory must:
-also explicitly manage ownership transfers between local and external queues
-(or equivalent constructs in external APIs) regardless of the
-elink:VkSharingMode specified when creating them.
-
-[open,refpage='VK_QUEUE_FAMILY_EXTERNAL',desc='External queue family index sentinel',type='consts',alias='VK_QUEUE_FAMILY_EXTERNAL_KHR']
---
-The special queue family index ename:VK_QUEUE_FAMILY_EXTERNAL represents any
-queue external to the resource's current Vulkan instance, as long as the
-queue uses the same underlying
-ifdef::VK_VERSION_1_1,VK_KHR_device_group[device group or]
-physical device, and the same driver version as the resource's
-slink:VkDevice, as indicated by
-slink:VkPhysicalDeviceIDProperties::pname:deviceUUID and
-slink:VkPhysicalDeviceIDProperties::pname:driverUUID.
-
-include::{generated}/api/enums/VK_QUEUE_FAMILY_EXTERNAL.txt[]
-
-ifdef::VK_KHR_external_memory[]
-or the equivalent
-
-include::{generated}/api/enums/VK_QUEUE_FAMILY_EXTERNAL_KHR.txt[]
-endif::VK_KHR_external_memory[]
---
-
-ifdef::VK_EXT_queue_family_foreign[]
-[open,refpage='VK_QUEUE_FAMILY_FOREIGN_EXT',desc='Foreign queue family index sentinel',type='consts']
---
-The special queue family index ename:VK_QUEUE_FAMILY_FOREIGN_EXT represents
-any queue external to the resource's current Vulkan instance, regardless of
-the queue's underlying physical device or driver version.
-This includes, for example, queues for fixed-function image processing
-devices, media codec devices, and display devices, as well as all queues
-that use the same underlying
-ifdef::VK_VERSION_1_1,VK_KHR_device_group[device group or]
-physical device, and the same driver version as the resource's
-slink:VkDevice.
-
-include::{generated}/api/enums/VK_QUEUE_FAMILY_FOREIGN_EXT.txt[]
---
-endif::VK_EXT_queue_family_foreign[]
-endif::VK_VERSION_1_1,VK_KHR_external_memory[]
-
-If memory dependencies are correctly expressed between uses of such a
-resource between two queues in different families, but no ownership transfer
-is defined, the contents of that resource are undefined: for any read
-accesses performed by the second queue family.
-
-[NOTE]
-.Note
-====
-If an application does not need the contents of a resource to remain valid
-when transferring from one queue family to another, then the ownership
-transfer should: be skipped.
-====
-
-ifdef::VK_EXT_queue_family_foreign[]
-[NOTE]
-.Note
-====
-Applications should expect transfers to/from
-ename:VK_QUEUE_FAMILY_FOREIGN_EXT to be more expensive than transfers
-to/from ename:VK_QUEUE_FAMILY_EXTERNAL_KHR.
-====
-endif::VK_EXT_queue_family_foreign[]
-
-A queue family ownership transfer consists of two distinct parts:
-
-  . Release exclusive ownership from the source queue family
-  . Acquire exclusive ownership for the destination queue family
-
-An application must: ensure that these operations occur in the correct order
-by defining an execution dependency between them, e.g. using a semaphore.
-
-[[synchronization-queue-transfers-release]] A _release operation_ is used to
-release exclusive ownership of a range of a buffer or image subresource
-range.
-A release operation is defined by executing a
-<<synchronization-buffer-memory-barriers, buffer memory barrier>> (for a
-buffer range) or an <<synchronization-image-memory-barriers, image memory
-barrier>> (for an image subresource range) using a pipeline barrier command,
-on a queue from the source queue family.
-The pname:srcQueueFamilyIndex parameter of the barrier must: be set to the
-source queue family index, and the pname:dstQueueFamilyIndex parameter to
-the destination queue family index.
-pname:dstAccessMask is ignored for such a barrier, such that no visibility
-operation is executed - the value of this mask does not affect the validity
-of the barrier.
-The release operation happens-after the availability operation, and
-happens-before operations specified in the second synchronization scope of
-the calling command.
-
-[[synchronization-queue-transfers-acquire]] An _acquire operation_ is used
-to acquire exclusive ownership of a range of a buffer or image subresource
-range.
-An acquire operation is defined by executing a
-<<synchronization-buffer-memory-barriers, buffer memory barrier>> (for a
-buffer range) or an <<synchronization-image-memory-barriers, image memory
-barrier>> (for an image subresource range) using a pipeline barrier command,
-on a queue from the destination queue family.
-The buffer range or image subresource range specified in an acquire
-operation must: match exactly that of a previous release operation.
-The pname:srcQueueFamilyIndex parameter of the barrier must: be set to the
-source queue family index, and the pname:dstQueueFamilyIndex parameter to
-the destination queue family index.
-pname:srcAccessMask is ignored for such a barrier, such that no availability
-operation is executed - the value of this mask does not affect the validity
-of the barrier.
-The acquire operation happens-after operations in the first synchronization
-scope of the calling command, and happens-before the visibility operation.
-
-[NOTE]
-.Note
-====
-Whilst it is not invalid to provide destination or source access masks for
-memory barriers used for release or acquire operations, respectively, they
-have no practical effect.
-Access after a release operation has undefined: results, and so visibility
-for those accesses has no practical effect.
-Similarly, write access before an acquire operation will produce undefined:
-results for future access, so availability of those writes has no practical
-use.
-In an earlier version of the specification, these were required to match on
-both sides - but this was subsequently relaxed.
-These masks should: be set to 0.
-====
-
-If the transfer is via an image memory barrier, and an
-<<synchronization-image-layout-transitions, image layout transition>> is
-desired, then the values of pname:oldLayout and pname:newLayout in the
-_release operation_'s memory barrier must: be equal to values of
-pname:oldLayout and pname:newLayout in the _acquire operation_'s memory
-barrier.
-Although the image layout transition is submitted twice, it will only be
-executed once.
-A layout transition specified in this way happens-after the _release
-operation_ and happens-before the _acquire operation_.
-
-If the values of pname:srcQueueFamilyIndex and pname:dstQueueFamilyIndex are
-equal, no ownership transfer is performed, and the barrier operates as if
-they were both set to ename:VK_QUEUE_FAMILY_IGNORED.
-
-Queue family ownership transfers may: perform read and write accesses on all
-memory bound to the image subresource or buffer range, so applications must:
-ensure that all memory writes have been made
-<<synchronization-dependencies-available-and-visible, available>> before a
-queue family ownership transfer is executed.
-Available memory is automatically made visible to queue family release and
-acquire operations, and writes performed by those operations are
-automatically made available.
-
-Once a queue family has acquired ownership of a buffer range or image
-subresource range of a ename:VK_SHARING_MODE_EXCLUSIVE resource, its
-contents are undefined: to other queue families unless ownership is
-transferred.
-The contents of any portion of another resource which aliases memory that is
-bound to the transferred buffer or image subresource range are undefined:
-after a release or acquire operation.
-
-[NOTE]
-.Note
-====
-Because <<synchronization-events, events>> cannot: be used directly for
-inter-queue synchronization, and because flink:vkCmdSetEvent does not have
-the queue family index or memory barrier parameters needed by a _release
-operation_, the release and acquire operations of a queue family ownership
-transfer can: only be performed using flink:vkCmdPipelineBarrier.
-====
-
-
-[[synchronization-wait-idle]]
-== Wait Idle Operations
-
-[open,refpage='vkQueueWaitIdle',desc='Wait for a queue to become idle',type='protos']
---
-To wait on the host for the completion of outstanding queue operations for a
-given queue, call:
-
-include::{generated}/api/protos/vkQueueWaitIdle.txt[]
-
-  * pname:queue is the queue on which to wait.
-
-fname:vkQueueWaitIdle is equivalent to having submitted a valid fence to
-every previously executed <<devsandqueues-submission,queue submission
-command>> that accepts a fence, then waiting for all of those fences to
-signal using flink:vkWaitForFences with an infinite timeout and
-pname:waitAll set to ename:VK_TRUE.
-
-include::{generated}/validity/protos/vkQueueWaitIdle.txt[]
---
-
-[open,refpage='vkDeviceWaitIdle',desc='Wait for a device to become idle',type='protos']
---
-To wait on the host for the completion of outstanding queue operations for
-all queues on a given logical device, call:
-
-include::{generated}/api/protos/vkDeviceWaitIdle.txt[]
-
-  * pname:device is the logical device to idle.
-
-fname:vkDeviceWaitIdle is equivalent to calling fname:vkQueueWaitIdle for
-all queues owned by pname:device.
-
-include::{generated}/validity/protos/vkDeviceWaitIdle.txt[]
---
-
-
-[[synchronization-submission-host-writes]]
-== Host Write Ordering Guarantees
-
-When batches of command buffers are submitted to a queue via a
-<<devsandqueues-submission, queue submission command>>, it defines a memory
-dependency with prior host operations, and execution of command buffers
-submitted to the queue.
-
-The first <<synchronization-dependencies-scopes, synchronization scope>> is
-defined by the host execution model, but includes execution of
-flink:vkQueueSubmit on the host and anything that happened-before it.
-
-The second <<synchronization-dependencies-scopes, synchronization scope>>
-includes all commands submitted in the same <<devsandqueues-submission,
-queue submission>>, and all commands that occur later in
-<<synchronization-submission-order,submission order>>.
-
-The first <<synchronization-dependencies-access-scopes, access scope>>
-includes all host writes to mappable device memory that are available to the
-host memory domain.
-
-The second <<synchronization-dependencies-access-scopes, access scope>>
-includes all memory access performed by the device.
-
-
-ifdef::VK_VERSION_1_1,VK_KHR_device_group[]
-[[synchronization-device-group]]
-== Synchronization and Multiple Physical Devices
-
-If a logical device includes more than one physical device, then fences,
-semaphores, and events all still have a single instance of the signaled
-state.
-
-A fence becomes signaled when all physical devices complete the necessary
-queue operations.
-
-Semaphore wait and signal operations all include a device index that is the
-sole physical device that performs the operation.
-These indices are provided in the slink:VkDeviceGroupSubmitInfo and
-slink:VkDeviceGroupBindSparseInfo structures.
-Semaphores are not exclusively owned by any physical device.
-For example, a semaphore can be signaled by one physical device and then
-waited on by a different physical device.
-
-An event can: only be waited on by the same physical device that signaled it
-(or the host).
-endif::VK_VERSION_1_1,VK_KHR_device_group[]
-
-
-ifdef::VK_EXT_calibrated_timestamps[]
-[[calibrated-timestamps]]
-== Calibrated timestamps
-
-[open,refpage='vkGetCalibratedTimestampsEXT',desc='Query calibrated timestamps',type='protos']
---
-In order to be able to correlate the time a particular operation took place
-at on timelines of different time domains (e.g. a device operation vs a host
-operation), Vulkan allows querying calibrated timestamps from multiple time
-domains.
-
-To query calibrated timestamps from a set of time domains, call:
-
-include::{generated}/api/protos/vkGetCalibratedTimestampsEXT.txt[]
-
-  * pname:device is the logical device used to perform the query.
-  * pname:timestampCount is the number of timestamps to query.
-  * pname:pTimestampInfos is a pointer to an array of pname:timestampCount
-    slink:VkCalibratedTimestampInfoEXT structures, describing the time
-    domains the calibrated timestamps should be captured from.
-  * pname:pTimestamps is a pointer to an array of pname:timestampCount
-    64-bit unsigned integer values in which the requested calibrated
-    timestamp values are returned.
-  * pname:pMaxDeviation is a pointer to a 64-bit unsigned integer value in
-    which the strictly positive maximum deviation, in nanoseconds, of the
-    calibrated timestamp values is returned.
-
-[NOTE]
-.Note
-====
-The maximum deviation may: vary between calls to
-fname:vkGetCalibratedTimestampsEXT even for the same set of time domains due
-to implementation and platform specific reasons.
-It is the application's responsibility to assess whether the returned
-maximum deviation makes the timestamp values suitable for any particular
-purpose and can: choose to re-issue the timestamp calibration call pursuing
-a lower devation value.
-====
-
-Calibrated timestamp values can: be extrapolated to estimate future
-coinciding timestamp values, however, depending on the nature of the time
-domains and other properties of the platform extrapolating values over a
-sufficiently long period of time may: no longer be accurate enough to fit
-any particular purpose, so applications are expected to re-calibrate the
-timestamps on a regular basis.
-
-include::{generated}/validity/protos/vkGetCalibratedTimestampsEXT.txt[]
---
-
-[open,refpage='VkCalibratedTimestampInfoEXT',desc='Structure specifying the input parameters of a calibrated timestamp query',type='structs']
---
-The sname:VkCalibratedTimestampInfoEXT structure is defined as:
-
-include::{generated}/api/structs/VkCalibratedTimestampInfoEXT.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:timeDomain is a elink:VkTimeDomainEXT value specifying the time
-    domain from which the calibrated timestamp value should be returned.
-
-.Valid Usage
-****
-  * [[VUID-VkCalibratedTimestampInfoEXT-timeDomain-02354]]
-    pname:timeDomain must: be one of the elink:VkTimeDomainEXT values
-    returned by flink:vkGetPhysicalDeviceCalibrateableTimeDomainsEXT
-****
-include::{generated}/validity/structs/VkCalibratedTimestampInfoEXT.txt[]
---
-
-[open,refpage='VkTimeDomainEXT',desc='Supported time domains',type='enums']
---
-The set of supported time domains consists of:
-
-include::{generated}/api/enums/VkTimeDomainEXT.txt[]
-
-  * ename:VK_TIME_DOMAIN_DEVICE_EXT specifies the device time domain.
-    Timestamp values in this time domain use the same units and are
-    comparable with device timestamp values captured using
-    flink:vkCmdWriteTimestamp
-ifdef::VK_KHR_synchronization2[]
-    or flink:vkCmdWriteTimestamp2KHR
-endif::VK_KHR_synchronization2[]
-    and are defined to be incrementing according to the
-    <<limits-timestampPeriod,timestampPeriod>> of the device.
-
-  * ename:VK_TIME_DOMAIN_CLOCK_MONOTONIC_EXT specifies the CLOCK_MONOTONIC
-    time domain available on POSIX platforms.
-    Timestamp values in this time domain are in units of nanoseconds and are
-    comparable with platform timestamp values captured using the POSIX
-    clock_gettime API as computed by this example:
-
-[NOTE]
-.Note
-====
-An implementation supporting `apiext:VK_EXT_calibrated_timestamps` will use
-the same time domain for all its slink:VkQueue so that timestamp values
-reported for ename:VK_TIME_DOMAIN_DEVICE_EXT can be matched to any timestamp
-captured through flink:vkCmdWriteTimestamp
-ifdef::VK_KHR_synchronization2[]
-or flink:vkCmdWriteTimestamp2KHR
-endif::VK_KHR_synchronization2[]
-.
-====
-
-[source,c]
-~~~~
-struct timespec tv;
-clock_gettime(CLOCK_MONOTONIC, &tv);
-return tv.tv_nsec + tv.tv_sec*1000000000ull;
-~~~~
-
-  * ename:VK_TIME_DOMAIN_CLOCK_MONOTONIC_RAW_EXT specifies the
-    CLOCK_MONOTONIC_RAW time domain available on POSIX platforms.
-    Timestamp values in this time domain are in units of nanoseconds and are
-    comparable with platform timestamp values captured using the POSIX
-    clock_gettime API as computed by this example:
-
-[source,c]
-~~~~
-struct timespec tv;
-clock_gettime(CLOCK_MONOTONIC_RAW, &tv);
-return tv.tv_nsec + tv.tv_sec*1000000000ull;
-~~~~
-
-  * ename:VK_TIME_DOMAIN_QUERY_PERFORMANCE_COUNTER_EXT specifies the
-    performance counter (QPC) time domain available on Windows.
-    Timestamp values in this time domain are in the same units as those
-    provided by the Windows QueryPerformanceCounter API and are comparable
-    with platform timestamp values captured using that API as computed by
-    this example:
-
-[source,c]
-~~~~
-LARGE_INTEGER counter;
-QueryPerformanceCounter(&counter);
-return counter.QuadPart;
-~~~~
---
-endif::VK_EXT_calibrated_timestamps[]
diff --git a/registry/vulkan/chapters/tessellation.txt b/registry/vulkan/chapters/tessellation.txt
deleted file mode 100644
index f03336d..0000000
--- a/registry/vulkan/chapters/tessellation.txt
+++ /dev/null
@@ -1,629 +0,0 @@
-// Copyright 2015-2021 The Khronos Group, Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-[[tessellation]]
-= Tessellation
-
-Tessellation involves three pipeline stages.
-First, a <<shaders-tessellation-control,tessellation control shader>>
-transforms control points of a patch and can: produce per-patch data.
-Second, a fixed-function tessellator generates multiple primitives
-corresponding to a tessellation of the patch in (u,v) or (u,v,w) parameter
-space.
-Third, a <<shaders-tessellation-evaluation,tessellation evaluation shader>>
-transforms the vertices of the tessellated patch, for example to compute
-their positions and attributes as part of the tessellated surface.
-The tessellator is enabled when the pipeline contains both a tessellation
-control shader and a tessellation evaluation shader.
-
-
-== Tessellator
-
-If a pipeline includes both tessellation shaders (control and evaluation),
-the tessellator consumes each input patch (after vertex shading) and
-produces a new set of independent primitives (points, lines, or triangles).
-These primitives are logically produced by subdividing a geometric primitive
-(rectangle or triangle) according to the per-patch outer and inner
-tessellation levels written by the tessellation control shader.
-These levels are specified using the <<interfaces-builtin-variables,built-in
-variables>> code:TessLevelOuter and code:TessLevelInner, respectively.
-This subdivision is performed in an implementation-dependent manner.
-If no tessellation shaders are present in the pipeline, the tessellator is
-disabled and incoming primitives are passed through without modification.
-
-The type of subdivision performed by the tessellator is specified by an
-code:OpExecutionMode instruction in the tessellation evaluation or
-tessellation control shader using one of execution modes code:Triangles,
-code:Quads, and code:IsoLines.
-Other tessellation-related execution modes can: also be specified in either
-the tessellation control or tessellation evaluation shaders, and if they are
-specified in both then the modes must: be the same.
-
-Tessellation execution modes include:
-
-  * code:Triangles, code:Quads, and code:IsoLines.
-    These control the type of subdivision and topology of the output
-    primitives.
-    One mode must: be set in at least one of the tessellation shader stages.
-ifdef::VK_KHR_portability_subset[]
-    If the `apiext:VK_KHR_portability_subset` extension is enabled, and
-    slink:VkPhysicalDevicePortabilitySubsetFeaturesKHR::pname:tessellationIsolines
-    is ename:VK_FALSE, then isoline tessellation is not supported by the
-    implementation, and code:IsoLines must: not be used in either
-    tessellation shader stage.
-endif::VK_KHR_portability_subset[]
-  * code:VertexOrderCw and code:VertexOrderCcw.
-    These control the orientation of triangles generated by the tessellator.
-    One mode must: be set in at least one of the tessellation shader stages.
-  * code:PointMode.
-    Controls generation of points rather than triangles or lines.
-    This functionality defaults to disabled, and is enabled if either shader
-    stage includes the execution mode.
-ifdef::VK_KHR_portability_subset[]
-    If the `apiext:VK_KHR_portability_subset` extension is enabled, and
-    slink:VkPhysicalDevicePortabilitySubsetFeaturesKHR::pname:tessellationPointMode
-    is ename:VK_FALSE, then point mode tessellation is not supported by the
-    implementation, and code:PointMode must: not be used in either
-    tessellation shader stage.
-endif::VK_KHR_portability_subset[]
-  * code:SpacingEqual, code:SpacingFractionalEven, and
-    code:SpacingFractionalOdd.
-    Controls the spacing of segments on the edges of tessellated primitives.
-    One mode must: be set in at least one of the tessellation shader stages.
-  * code:OutputVertices.
-    Controls the size of the output patch of the tessellation control
-    shader.
-    One value must: be set in at least one of the tessellation shader
-    stages.
-
-For triangles, the tessellator subdivides a triangle primitive into smaller
-triangles.
-For quads, the tessellator subdivides a rectangle primitive into smaller
-triangles.
-For isolines, the tessellator subdivides a rectangle primitive into a
-collection of line segments arranged in strips stretching across the
-rectangle in the [eq]#u# dimension (i.e. the coordinates in code:TessCoord
-are of the form (0,x) through (1,x) for all tessellation evaluation shader
-invocations that share a line).
-
-Each vertex produced by the tessellator has an associated (u,v,w) or (u,v)
-position in a normalized parameter space, with parameter values in the range
-[eq]#[0,1]#, as illustrated
-ifdef::VK_VERSION_1_1,VK_KHR_maintenance2[]
-in figures <<img-tessellation-topology-ul>> and
-<<img-tessellation-topology-ll>>.
-The domain space can: have either an upper-left or lower-left origin,
-selected by the pname:domainOrigin member of
-slink:VkPipelineTessellationDomainOriginStateCreateInfo.
-endif::VK_VERSION_1_1,VK_KHR_maintenance2[]
-ifndef::VK_VERSION_1_1,VK_KHR_maintenance2[]
-in figure <<img-tessellation-topology-ul>>.
-The domain space has an upper-left origin.
-endif::VK_VERSION_1_1,VK_KHR_maintenance2[]
-
-[[img-tessellation-topology-ul]]
-image::{images}/tessparamUL.svg[align="center",title="Domain parameterization for tessellation primitive modes (upper-left origin)",opts="{imageopts}"]
-
-ifdef::VK_VERSION_1_1,VK_KHR_maintenance2[]
-[[img-tessellation-topology-ll]]
-image::{images}/tessparam.svg[align="center",title="Domain parameterization for tessellation primitive modes (lower-left origin)",opts="{imageopts}"]
-endif::VK_VERSION_1_1,VK_KHR_maintenance2[]
-
-.Caption
-****
-In the domain parameterization diagrams, the coordinates illustrate the
-value of code:TessCoord at the corners of the domain.
-The labels on the edges indicate the inner (IL0 and IL1) and outer (OL0
-through OL3) tessellation level values used to control the number of
-subdivisions along each edge of the domain.
-****
-
-For triangles, the vertex's position is a barycentric coordinate
-[eq]#(u,v,w)#, where [eq]#u {plus} v {plus} w = 1.0#, and indicates the
-relative influence of the three vertices of the triangle on the position of
-the vertex.
-For quads and isolines, the position is a [eq]#(u,v)# coordinate indicating
-the relative horizontal and vertical position of the vertex relative to the
-subdivided rectangle.
-The subdivision process is explained in more detail in subsequent sections.
-
-
-== Tessellator Patch Discard
-
-A patch is discarded by the tessellator if any relevant outer tessellation
-level is less than or equal to zero.
-
-Patches will also be discarded if any relevant outer tessellation level
-corresponds to a floating-point [eq]#NaN# (not a number) in implementations
-supporting [eq]#NaN#.
-
-No new primitives are generated and the tessellation evaluation shader is
-not executed for patches that are discarded.
-For code:Quads, all four outer levels are relevant.
-For code:Triangles and code:IsoLines, only the first three or two outer
-levels, respectively, are relevant.
-Negative inner levels will not cause a patch to be discarded; they will be
-clamped as described below.
-
-
-[[tessellation-tessellator-spacing]]
-== Tessellator Spacing
-
-Each of the tessellation levels is used to determine the number and spacing
-of segments used to subdivide a corresponding edge.
-The method used to derive the number and spacing of segments is specified by
-an code:OpExecutionMode in the tessellation control or tessellation
-evaluation shader using one of the identifiers code:SpacingEqual,
-code:SpacingFractionalEven, or code:SpacingFractionalOdd.
-
-If code:SpacingEqual is used, the floating-point tessellation level is first
-clamped to [eq]#[1, pname:maxLevel]#, where [eq]#pname:maxLevel# is the
-implementation-dependent maximum tessellation level
-(sname:VkPhysicalDeviceLimits::pname:maxTessellationGenerationLevel).
-The result is rounded up to the nearest integer [eq]#n#, and the
-corresponding edge is divided into [eq]#n# segments of equal length in (u,v)
-space.
-
-If code:SpacingFractionalEven is used, the tessellation level is first
-clamped to [eq]#[2, pname:maxLevel]# and then rounded up to the nearest even
-integer [eq]#n#.
-If code:SpacingFractionalOdd is used, the tessellation level is clamped to
-[eq]#[1, pname:maxLevel - 1]# and then rounded up to the nearest odd integer
-[eq]#n#.
-If [eq]#n# is one, the edge will not be subdivided.
-Otherwise, the corresponding edge will be divided into [eq]#n - 2# segments
-of equal length, and two additional segments of equal length that are
-typically shorter than the other segments.
-The length of the two additional segments relative to the others will
-decrease monotonically with [eq]#n - f#, where [eq]#f# is the clamped
-floating-point tessellation level.
-When [eq]#n - f# is zero, the additional segments will have equal length to
-the other segments.
-As [eq]#n - f# approaches 2.0, the relative length of the additional
-segments approaches zero.
-The two additional segments must: be placed symmetrically on opposite sides
-of the subdivided edge.
-The relative location of these two segments is implementation-dependent, but
-must: be identical for any pair of subdivided edges with identical values of
-[eq]#f#.
-
-When tessellating triangles or quads using <<tessellation-point-mode, point
-mode>> with fractional odd spacing, the tessellator may: produce _interior
-vertices_ that are positioned on the edge of the patch if an inner
-tessellation level is less than or equal to one.
-Such vertices are considered distinct from vertices produced by subdividing
-the outer edge of the patch, even if there are pairs of vertices with
-identical coordinates.
-
-
-[[tessellation-primitive-order]]
-== Tessellation Primitive Ordering
-
-Few guarantees are provided for the relative ordering of primitives produced
-by tessellation, as they pertain to <<drawing-primitive-order, primitive
-order>>.
-
-  * The output primitives generated from each input primitive are passed to
-    subsequent pipeline stages in an implementation-dependent order.
-  * All output primitives generated from a given input primitive are passed
-    to subsequent pipeline stages before any output primitives generated
-    from subsequent input primitives.
-
-
-[[tessellation-vertex-winding-order]]
-== Tessellator Vertex Winding Order
-
-When the tessellator produces triangles (in the code:Triangles or code:Quads
-modes), the orientation of all triangles is specified with an
-code:OpExecutionMode of code:VertexOrderCw or code:VertexOrderCcw in the
-tessellation control or tessellation evaluation shaders.
-If the order is code:VertexOrderCw, the vertices of all generated triangles
-will have clockwise ordering in (u,v) or (u,v,w) space.
-If the order is code:VertexOrderCcw, the vertices will have
-counter-clockwise ordering in that space.
-
-If the tessellation domain has an upper-left origin, the vertices of a
-triangle have counter-clockwise ordering if
-
-  {empty}:: [eq]#a = u~0~ v~1~ - u~1~ v~0~ {plus} u~1~ v~2~ - u~2~ v~1~
-            {plus} u~2~ v~0~ - u~0~ v~2~#
-
-is negative, and clockwise ordering if [eq]#a# is positive.
-[eq]#u~i~# and [eq]#v~i~# are the [eq]#u# and [eq]#v# coordinates in
-normalized parameter space of the [eq]##i##th vertex of the triangle.
-ifdef::VK_VERSION_1_1,VK_KHR_maintenance2[]
-If the tessellation domain has a lower-left origin, the vertices of a
-triangle have counter-clockwise ordering if [eq]#a# is positive, and
-clockwise ordering if [eq]#a# is negative.
-endif::VK_VERSION_1_1,VK_KHR_maintenance2[]
-
-[NOTE]
-.Note
-====
-The value [eq]#a# is proportional (with a positive factor) to the signed
-area of the triangle.
-
-In code:Triangles mode, even though the vertex coordinates have a [eq]#w#
-value, it does not participate directly in the computation of [eq]#a#, being
-an affine combination of [eq]#u# and [eq]#v#.
-====
-
-
-[[tessellation-triangle-tessellation]]
-== Triangle Tessellation
-
-If the tessellation primitive mode is code:Triangles, an equilateral
-triangle is subdivided into a collection of triangles covering the area of
-the original triangle.
-First, the original triangle is subdivided into a collection of concentric
-equilateral triangles.
-The edges of each of these triangles are subdivided, and the area between
-each triangle pair is filled by triangles produced by joining the vertices
-on the subdivided edges.
-The number of concentric triangles and the number of subdivisions along each
-triangle except the outermost is derived from the first inner tessellation
-level.
-The edges of the outermost triangle are subdivided independently, using the
-first, second, and third outer tessellation levels to control the number of
-subdivisions of the [eq]#u = 0# (left), [eq]#v = 0# (bottom), and [eq]#w =
-0# (right) edges, respectively.
-The second inner tessellation level and the fourth outer tessellation level
-have no effect in this mode.
-
-If the first inner tessellation level and all three outer tessellation
-levels are exactly one after clamping and rounding, only a single triangle
-with [eq]#(u,v,w)# coordinates of [eq]#(0,0,1)#, [eq]#(1,0,0)#, and
-[eq]#(0,1,0)# is generated.
-If the inner tessellation level is one and any of the outer tessellation
-levels is greater than one, the inner tessellation level is treated as
-though it were originally specified as [eq]#1 {plus} {epsilon}# and will
-result in a two- or three-segment subdivision depending on the tessellation
-spacing.
-When used with fractional odd spacing, the three-segment subdivision may:
-produce _inner vertices_ positioned on the edge of the triangle.
-
-If any tessellation level is greater than one, tessellation begins by
-producing a set of concentric inner triangles and subdividing their edges.
-First, the three outer edges are temporarily subdivided using the clamped
-and rounded first inner tessellation level and the specified tessellation
-spacing, generating [eq]#n# segments.
-For the outermost inner triangle, the inner triangle is degenerate -- a
-single point at the center of the triangle -- if [eq]#n# is two.
-Otherwise, for each corner of the outer triangle, an inner triangle corner
-is produced at the intersection of two lines extended perpendicular to the
-corner's two adjacent edges running through the vertex of the subdivided
-outer edge nearest that corner.
-If [eq]#n# is three, the edges of the inner triangle are not subdivided and
-it is the final triangle in the set of concentric triangles.
-Otherwise, each edge of the inner triangle is divided into [eq]#n - 2#
-segments, with the [eq]#n - 1# vertices of this subdivision produced by
-intersecting the inner edge with lines perpendicular to the edge running
-through the [eq]#n - 1# innermost vertices of the subdivision of the outer
-edge.
-Once the outermost inner triangle is subdivided, the previous subdivision
-process repeats itself, using the generated triangle as an outer triangle.
-This subdivision process is illustrated in <<img-innertri,Inner Triangle
-Tessellation>>.
-
-[[img-innertri]]
-image::{images}/innertri.svg[align="center",title="Inner Triangle Tessellation",opts="{imageopts}"]
-
-.Caption
-****
-In the <<img-innertri,Inner Triangle Tessellation>> diagram, inner
-tessellation levels of (a) five and (b) four are shown (not to scale).
-Solid black circles depict vertices along the edges of the concentric
-triangles.
-The edges of inner triangles are subdivided by intersecting the edge with
-segments perpendicular to the edge passing through each inner vertex of the
-subdivided outer edge.
-Dotted lines depict edges connecting corresponding vertices on the inner and
-outer triangle edges.
-****
-
-Once all the concentric triangles are produced and their edges are
-subdivided, the area between each pair of adjacent inner triangles is filled
-completely with a set of non-overlapping triangles.
-In this subdivision, two of the three vertices of each triangle are taken
-from adjacent vertices on a subdivided edge of one triangle; the third is
-one of the vertices on the corresponding edge of the other triangle.
-If the innermost triangle is degenerate (i.e., a point), the triangle
-containing it is subdivided into six triangles by connecting each of the six
-vertices on that triangle with the center point.
-If the innermost triangle is not degenerate, that triangle is added to the
-set of generated triangles as-is.
-
-After the area corresponding to any inner triangles is filled, the
-tessellator generates triangles to cover the area between the outermost
-triangle and the outermost inner triangle.
-To do this, the temporary subdivision of the outer triangle edge above is
-discarded.
-Instead, the [eq]#u = 0#, [eq]#v = 0#, and [eq]#w = 0# edges are subdivided
-according to the first, second, and third outer tessellation levels,
-respectively, and the tessellation spacing.
-The original subdivision of the first inner triangle is retained.
-The area between the outer and first inner triangles is completely filled by
-non-overlapping triangles as described above.
-If the first (and only) inner triangle is degenerate, a set of triangles is
-produced by connecting each vertex on the outer triangle edges with the
-center point.
-
-After all triangles are generated, each vertex in the subdivided triangle is
-assigned a barycentric (u,v,w) coordinate based on its location relative to
-the three vertices of the outer triangle.
-
-The algorithm used to subdivide the triangular domain in (u,v,w) space into
-individual triangles is implementation-dependent.
-However, the set of triangles produced will completely cover the domain, and
-no portion of the domain will be covered by multiple triangles.
-
-Output triangles are generated with a topology similar to
-<<drawing-triangle-lists, triangle lists>>, except that the order in which
-each triangle is generated, and the order in which the vertices are
-generated for each triangle, are implementation-dependent.
-However, the order of vertices in each triangle is consistent across the
-domain as described in <<tessellation-vertex-winding-order>>.
-
-
-[[tessellation-quad-tessellation]]
-== Quad Tessellation
-
-If the tessellation primitive mode is code:Quads, a rectangle is subdivided
-into a collection of triangles covering the area of the original rectangle.
-First, the original rectangle is subdivided into a regular mesh of
-rectangles, where the number of rectangles along the [eq]#u = 0# and [eq]#u
-= 1# (vertical) and [eq]#v = 0# and [eq]#v = 1# (horizontal) edges are
-derived from the first and second inner tessellation levels, respectively.
-All rectangles, except those adjacent to one of the outer rectangle edges,
-are decomposed into triangle pairs.
-The outermost rectangle edges are subdivided independently, using the first,
-second, third, and fourth outer tessellation levels to control the number of
-subdivisions of the [eq]#u = 0# (left), [eq]#v = 0# (bottom), [eq]#u = 1#
-(right), and [eq]#v = 1# (top) edges, respectively.
-The area between the inner rectangles of the mesh and the outer rectangle
-edges are filled by triangles produced by joining the vertices on the
-subdivided outer edges to the vertices on the edge of the inner rectangle
-mesh.
-
-If both clamped inner tessellation levels and all four clamped outer
-tessellation levels are exactly one, only a single triangle pair covering
-the outer rectangle is generated.
-Otherwise, if either clamped inner tessellation level is one, that
-tessellation level is treated as though it was originally specified as
-[eq]#1 {plus} {epsilon}# and will result in a two- or three-segment
-subdivision depending on the tessellation spacing.
-When used with fractional odd spacing, the three-segment subdivision may:
-produce _inner vertices_ positioned on the edge of the rectangle.
-
-If any tessellation level is greater than one, tessellation begins by
-subdividing the [eq]#u = 0# and [eq]#u = 1# edges of the outer rectangle
-into [eq]#m# segments using the clamped and rounded first inner tessellation
-level and the tessellation spacing.
-The [eq]#v = 0# and [eq]#v = 1# edges are subdivided into [eq]#n# segments
-using the second inner tessellation level.
-Each vertex on the [eq]#u = 0# and [eq]#v = 0# edges are joined with the
-corresponding vertex on the [eq]#u = 1# and [eq]#v = 1# edges to produce a
-set of vertical and horizontal lines that divide the rectangle into a grid
-of smaller rectangles.
-The primitive generator emits a pair of non-overlapping triangles covering
-each such rectangle not adjacent to an edge of the outer rectangle.
-The boundary of the region covered by these triangles forms an inner
-rectangle, the edges of which are subdivided by the grid vertices that lie
-on the edge.
-If either [eq]#m# or [eq]#n# is two, the inner rectangle is degenerate, and
-one or both of the rectangle's _edges_ consist of a single point.
-This subdivision is illustrated in Figure <<img-innerquad,Inner Quad
-Tessellation>>.
-
-[[img-innerquad]]
-image::{images}/innerquad.svg[align="center",title="Inner Quad Tessellation",opts="{imageopts}"]
-
-.Caption
-****
-In the <<img-innerquad,Inner Quad Tessellation>> diagram, inner quad
-tessellation levels of (a) [eq]#(4,2)# and (b) [eq]#(7,4)# are shown.
-The regions highlighted in red in figure (b) depict the 10 inner rectangles,
-each of which will be subdivided into two triangles.
-Solid black circles depict vertices on the boundary of the outer and inner
-rectangles, where the inner rectangle of figure (a) is degenerate (a single
-line segment).
-Dotted lines depict the horizontal and vertical edges connecting
-corresponding vertices on the inner and outer rectangle edges.
-****
-
-After the area corresponding to the inner rectangle is filled, the
-tessellator must: produce triangles to cover the area between the inner and
-outer rectangles.
-To do this, the subdivision of the outer rectangle edge above is discarded.
-Instead, the [eq]#u = 0#, [eq]#v = 0#, [eq]#u = 1#, and [eq]#v = 1# edges
-are subdivided according to the first, second, third, and fourth outer
-tessellation levels, respectively, and the tessellation spacing.
-The original subdivision of the inner rectangle is retained.
-The area between the outer and inner rectangles is completely filled by
-non-overlapping triangles.
-Two of the three vertices of each triangle are adjacent vertices on a
-subdivided edge of one rectangle; the third is one of the vertices on the
-corresponding edge of the other rectangle.
-If either edge of the innermost rectangle is degenerate, the area near the
-corresponding outer edges is filled by connecting each vertex on the outer
-edge with the single vertex making up the _inner edge_.
-
-The algorithm used to subdivide the rectangular domain in (u,v) space into
-individual triangles is implementation-dependent.
-However, the set of triangles produced will completely cover the domain, and
-no portion of the domain will be covered by multiple triangles.
-
-Output triangles are generated with a topology similar to
-<<drawing-triangle-lists, triangle lists>>, except that the order in which
-each triangle is generated, and the order in which the vertices are
-generated for each triangle, are implementation-dependent.
-However, the order of vertices in each triangle is consistent across the
-domain as described in <<tessellation-vertex-winding-order>>.
-
-
-[[tessellation-isoline-tessellation]]
-== Isoline Tessellation
-
-If the tessellation primitive mode is code:IsoLines, a set of independent
-horizontal line segments is drawn.
-The segments are arranged into connected strips called _isolines_, where the
-vertices of each isoline have a constant v coordinate and u coordinates
-covering the full range [eq]#[0,1]#.
-The number of isolines generated is derived from the first outer
-tessellation level; the number of segments in each isoline is derived from
-the second outer tessellation level.
-Both inner tessellation levels and the third and fourth outer tessellation
-levels have no effect in this mode.
-
-As with quad tessellation above, isoline tessellation begins with a
-rectangle.
-The [eq]#u = 0# and [eq]#u = 1# edges of the rectangle are subdivided
-according to the first outer tessellation level.
-For the purposes of this subdivision, the tessellation spacing mode is
-ignored and treated as equal_spacing.
-An isoline is drawn connecting each vertex on the [eq]#u = 0# rectangle edge
-to the corresponding vertex on the [eq]#u = 1# rectangle edge, except that
-no line is drawn between (0,1) and (1,1).
-If the number of isolines on the subdivided [eq]#u = 0# and [eq]#u = 1#
-edges is [eq]#n#, this process will result in [eq]#n# equally spaced lines
-with constant v coordinates of 0, latexmath:[\frac{1}{n}, \frac{2}{n},
-\ldots, \frac{n-1}{n}].
-
-Each of the [eq]#n# isolines is then subdivided according to the second
-outer tessellation level and the tessellation spacing, resulting in [eq]#m#
-line segments.
-Each segment of each line is emitted by the tessellator.
-These line segments are generated with a topology similar to
-<<drawing-line-lists, line lists>>, except that the order in which each line
-is generated, and the order in which the vertices are generated for each
-line segment, are implementation-dependent.
-
-ifdef::VK_KHR_portability_subset[]
-[NOTE]
-.Note
-====
-If the `apiext:VK_KHR_portability_subset` extension is enabled, and
-slink:VkPhysicalDevicePortabilitySubsetFeaturesKHR::pname:tessellationIsolines
-is ename:VK_FALSE, then isoline tessellation is not supported by the
-implementation.
-====
-endif::VK_KHR_portability_subset[]
-
-[[tessellation-point-mode]]
-== Tessellation Point Mode
-
-For all primitive modes, the tessellator is capable of generating points
-instead of lines or triangles.
-If the tessellation control or tessellation evaluation shader specifies the
-code:OpExecutionMode code:PointMode, the primitive generator will generate
-one point for each distinct vertex produced by tessellation, rather than
-emitting triangles or lines.
-Otherwise, the tessellator will produce a collection of line segments or
-triangles according to the primitive mode.
-These points are generated with a topology similar to <<drawing-point-lists,
-point lists>>, except the order in which the points are generated for each
-input primitive is undefined:.
-
-ifdef::VK_KHR_portability_subset[]
-[NOTE]
-.Note
-====
-If the `apiext:VK_KHR_portability_subset` extension is enabled, and
-slink:VkPhysicalDevicePortabilitySubsetFeaturesKHR::pname:tessellationPointMode
-is ename:VK_FALSE, then tessellation point mode is not supported by the
-implementation.
-====
-endif::VK_KHR_portability_subset[]
-
-
-== Tessellation Pipeline State
-
-The pname:pTessellationState member of slink:VkGraphicsPipelineCreateInfo is
-a pointer to a sname:VkPipelineTessellationStateCreateInfo structure.
-
-[open,refpage='VkPipelineTessellationStateCreateInfo',desc='Structure specifying parameters of a newly created pipeline tessellation state',type='structs']
---
-The sname:VkPipelineTessellationStateCreateInfo structure is defined as:
-
-include::{generated}/api/structs/VkPipelineTessellationStateCreateInfo.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:flags is reserved for future use.
-  * pname:patchControlPoints is the number of control points per patch.
-
-.Valid Usage
-****
-  * [[VUID-VkPipelineTessellationStateCreateInfo-patchControlPoints-01214]]
-    pname:patchControlPoints must: be greater than zero and less than or
-    equal to sname:VkPhysicalDeviceLimits::pname:maxTessellationPatchSize
-****
-
-include::{generated}/validity/structs/VkPipelineTessellationStateCreateInfo.txt[]
---
-
-[open,refpage='VkPipelineTessellationStateCreateFlags',desc='Reserved for future use',type='flags']
---
-include::{generated}/api/flags/VkPipelineTessellationStateCreateFlags.txt[]
-
-tname:VkPipelineTessellationStateCreateFlags is a bitmask type for setting a
-mask, but is currently reserved for future use.
---
-
-ifdef::VK_VERSION_1_1,VK_KHR_maintenance2[]
-[open,refpage='VkPipelineTessellationDomainOriginStateCreateInfo',desc='Structure specifying the orientation of the tessellation domain',type='structs']
---
-The sname:VkPipelineTessellationDomainOriginStateCreateInfo structure is
-defined as:
-
-include::{generated}/api/structs/VkPipelineTessellationDomainOriginStateCreateInfo.txt[]
-
-ifdef::VK_KHR_maintenance2[]
-or the equivalent
-
-include::{generated}/api/structs/VkPipelineTessellationDomainOriginStateCreateInfoKHR.txt[]
-endif::VK_KHR_maintenance2[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:domainOrigin is a elink:VkTessellationDomainOrigin value
-    controlling the origin of the tessellation domain space.
-
-If the sname:VkPipelineTessellationDomainOriginStateCreateInfo structure is
-included in the pname:pNext chain of
-slink:VkPipelineTessellationStateCreateInfo, it controls the origin of the
-tessellation domain.
-If this structure is not present, it is as if pname:domainOrigin was
-ename:VK_TESSELLATION_DOMAIN_ORIGIN_UPPER_LEFT.
-
-include::{generated}/validity/structs/VkPipelineTessellationDomainOriginStateCreateInfo.txt[]
---
-
-[open,refpage='VkTessellationDomainOrigin',desc='Enum describing tessellation domain origin',type='enums']
---
-The possible tessellation domain origins are specified by the
-elink:VkTessellationDomainOrigin enumeration:
-
-include::{generated}/api/enums/VkTessellationDomainOrigin.txt[]
-
-ifdef::VK_KHR_maintenance2[]
-or the equivalent
-
-include::{generated}/api/enums/VkTessellationDomainOriginKHR.txt[]
-endif::VK_KHR_maintenance2[]
-
-  * ename:VK_TESSELLATION_DOMAIN_ORIGIN_UPPER_LEFT specifies that the origin
-    of the domain space is in the upper left corner, as shown in figure
-    <<img-tessellation-topology-ul>>.
-  * ename:VK_TESSELLATION_DOMAIN_ORIGIN_LOWER_LEFT specifies that the origin
-    of the domain space is in the lower left corner, as shown in figure
-    <<img-tessellation-topology-ll>>.
-
-This enum affects how the code:VertexOrderCw and code:VertexOrderCcw
-tessellation execution modes are interpreted, since the winding is defined
-relative to the orientation of the domain.
---
-endif::VK_VERSION_1_1,VK_KHR_maintenance2[]
diff --git a/registry/vulkan/chapters/textures.txt b/registry/vulkan/chapters/textures.txt
deleted file mode 100644
index 2bc160b..0000000
--- a/registry/vulkan/chapters/textures.txt
+++ /dev/null
@@ -1,2991 +0,0 @@
-// Copyright 2015-2021 The Khronos Group, Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-[[textures]]
-= Image Operations
-
-== Image Operations Overview
-
-Vulkan Image Operations are operations performed by those SPIR-V Image
-Instructions which take an code:OpTypeImage (representing a
-sname:VkImageView) or code:OpTypeSampledImage (representing a
-(sname:VkImageView, sname:VkSampler) pair).
-Read, write, and atomic operations also take texel coordinates as operands,
-and return a value based on a neighborhood of texture elements (_texels_)
-within the image.
-Query operations return properties of the bound image or of the lookup
-itself.
-The "`Depth`" operand of code:OpTypeImage is ignored.
-
-[NOTE]
-.Note
-====
-Texel is a term which is a combination of the words texture and element.
-Early interactive computer graphics supported texture operations on
-textures, a small subset of the image operations on images described here.
-The discrete samples remain essentially equivalent, however, so we retain
-the historical term texel to refer to them.
-====
-
-Image Operations include the functionality of the following SPIR-V Image
-Instructions:
-
-  * code:OpImageSample* and code:OpImageSparseSample* read one or more
-    neighboring texels of the image, and <<textures-texel-filtering,filter>>
-    the texel values based on the state of the sampler.
-  ** Instructions with code:ImplicitLod in the name
-     <<textures-level-of-detail-operation,determine>> the LOD used in the
-     sampling operation based on the coordinates used in neighboring
-     fragments.
-  ** Instructions with code:ExplicitLod in the name
-     <<textures-level-of-detail-operation,determine>> the LOD used in the
-     sampling operation based on additional coordinates.
-  ** Instructions with code:Proj in the name apply homogeneous
-     <<textures-projection,projection>> to the coordinates.
-  * code:OpImageFetch and code:OpImageSparseFetch return a single texel of
-    the image.
-    No sampler is used.
-  * code:OpImage*Gather and code:OpImageSparse*Gather read neighboring
-    texels and <<textures-gather,return a single component>> of each.
-  * code:OpImageRead (and code:OpImageSparseRead) and code:OpImageWrite read
-    and write, respectively, a texel in the image.
-    No sampler is used.
-ifdef::VK_NV_shader_image_footprint[]
-  * code:OpImageSampleFootprintNV identifies and returns information about
-    the set of texels in the image that would be accessed by an equivalent
-    code:OpImageSample* instruction.
-endif::VK_NV_shader_image_footprint[]
-  * Instructions with code:Dref in the name apply
-    <<textures-depth-compare-operation,depth comparison>> on the texel
-    values.
-  * Instructions with code:Sparse in the name additionally return a
-    <<textures-sparse-residency,sparse residency>> code.
-  * code:OpImageQuerySize, code:OpImageQuerySizeLod,
-    code:OpImageQueryLevels, and code:OpImageQuerySamples return properties
-    of the image descriptor that would be accessed.
-    The image itself is not accessed.
-  * code:OpImageQueryLod returns the lod parameters that would be used in a
-    sample operation.
-    The actual operation is not performed.
-
-[[textures-texel-coordinate-systems]]
-=== Texel Coordinate Systems
-
-Images are addressed by _texel coordinates_.
-There are three _texel coordinate systems_:
-
-  * normalized texel coordinates [eq]#[0.0, 1.0]#
-  * unnormalized texel coordinates [eq]#[0.0, width / height / depth)#
-  * integer texel coordinates [eq]#[0, width / height / depth)#
-
-SPIR-V code:OpImageFetch, code:OpImageSparseFetch, code:OpImageRead,
-code:OpImageSparseRead, and code:OpImageWrite instructions use integer texel
-coordinates.
-Other image instructions can: use either normalized or unnormalized texel
-coordinates (selected by the pname:unnormalizedCoordinates state of the
-sampler used in the instruction), but there are
-<<samplers-unnormalizedCoordinates,limitations>> on what operations, image
-state, and sampler state is supported.
-Normalized coordinates are logically
-<<textures-normalized-to-unnormalized,converted>> to unnormalized as part of
-image operations, and <<textures-normalized-operations,certain steps>> are
-only performed on normalized coordinates.
-The array layer coordinate is always treated as unnormalized even when other
-coordinates are normalized.
-
-Normalized texel coordinates are referred to as [eq]#(s,t,r,q,a)#, with the
-coordinates having the following meanings:
-
-  * [eq]#s#: Coordinate in the first dimension of an image.
-  * [eq]#t#: Coordinate in the second dimension of an image.
-  * [eq]#r#: Coordinate in the third dimension of an image.
-  ** [eq]#(s,t,r)# are interpreted as a direction vector for Cube images.
-  * [eq]#q#: Fourth coordinate, for homogeneous (projective) coordinates.
-  * [eq]#a#: Coordinate for array layer.
-
-The coordinates are extracted from the SPIR-V operand based on the
-dimensionality of the image variable and type of instruction.
-For code:Proj instructions, the components are in order [eq]#(s, [t,] [r,]
-q)#, with [eq]#t# and [eq]#r# being conditionally present based on the
-code:Dim of the image.
-For non-code:Proj instructions, the coordinates are [eq]#(s [,t] [,r]
-[,a])#, with [eq]#t# and [eq]#r# being conditionally present based on the
-code:Dim of the image and [eq]#a# being conditionally present based on the
-code:Arrayed property of the image.
-Projective image instructions are not supported on code:Arrayed images.
-
-Unnormalized texel coordinates are referred to as [eq]#(u,v,w,a)#, with the
-coordinates having the following meanings:
-
-  * [eq]#u#: Coordinate in the first dimension of an image.
-  * [eq]#v#: Coordinate in the second dimension of an image.
-  * [eq]#w#: Coordinate in the third dimension of an image.
-  * [eq]#a#: Coordinate for array layer.
-
-Only the [eq]#u# and [eq]#v# coordinates are directly extracted from the
-SPIR-V operand, because only 1D and 2D (non-code:Arrayed) dimensionalities
-support unnormalized coordinates.
-The components are in order [eq]#(u [,v])#, with [eq]#v# being conditionally
-present when the dimensionality is 2D.
-When normalized coordinates are converted to unnormalized coordinates, all
-four coordinates are used.
-
-Integer texel coordinates are referred to as [eq]#(i,j,k,l,n)#, with the
-coordinates having the following meanings:
-
-  * [eq]#i#: Coordinate in the first dimension of an image.
-  * [eq]#j#: Coordinate in the second dimension of an image.
-  * [eq]#k#: Coordinate in the third dimension of an image.
-  * [eq]#l#: Coordinate for array layer.
-  * [eq]#n#: Index of the sample within the texel.
-
-They are extracted from the SPIR-V operand in order [eq]#(i [,j] [,k] [,l]
-[,n])#, with [eq]#j# and [eq]#k# conditionally present based on the code:Dim
-of the image, and [eq]#l# conditionally present based on the code:Arrayed
-property of the image.
-[eq]#n# is conditionally present and is taken from the code:Sample image
-operand.
-
-For all coordinate types, unused coordinates are assigned a value of zero.
-
-[[textures-texel-coordinate-systems-diagrams]]
-image::{images}/vulkantexture0-ll.svg[align="center",title="Texel Coordinate Systems, Linear Filtering",opts="{imageopts}"]
-The Texel Coordinate Systems - For the example shown of an 8{times}4 texel
-two dimensional image.
-
-  * Normalized texel coordinates:
-  ** The [eq]#s# coordinate goes from 0.0 to 1.0.
-  ** The [eq]#t# coordinate goes from 0.0 to 1.0.
-  * Unnormalized texel coordinates:
-  ** The [eq]#u# coordinate within the range 0.0 to 8.0 is within the image,
-     otherwise it is outside the image.
-  ** The [eq]#v# coordinate within the range 0.0 to 4.0 is within the image,
-     otherwise it is outside the image.
-  * Integer texel coordinates:
-  ** The [eq]#i# coordinate within the range 0 to 7 addresses texels within
-     the image, otherwise it is outside the image.
-  ** The [eq]#j# coordinate within the range 0 to 3 addresses texels within
-     the image, otherwise it is outside the image.
-  * Also shown for linear filtering:
-  ** Given the unnormalized coordinates [eq]#(u,v)#, the four texels
-     selected are [eq]#i~0~j~0~#, [eq]#i~1~j~0~#, [eq]#i~0~j~1~#, and
-     [eq]#i~1~j~1~#.
-  ** The fractions [eq]#{alpha}# and [eq]#{beta}#.
-  ** Given the offset [eq]#{DeltaUpper}~i~# and [eq]#{DeltaUpper}~j~#, the
-     four texels selected by the offset are [eq]#i~0~j'~0~#,
-     [eq]#i~1~j'~0~#, [eq]#i~0~j'~1~#, and [eq]#i~1~j'~1~#.
-
-ifdef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
-[NOTE]
-.Note
-====
-For formats with reduced-resolution components, [eq]#{DeltaUpper}~i~# and
-[eq]#{DeltaUpper}~j~# are relative to the resolution of the
-highest-resolution component, and therefore may be divided by two relative
-to the unnormalized coordinate space of the lower-resolution components.
-====
-endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
-
-image::{images}/vulkantexture1-ll.svg[align="center",title="Texel Coordinate Systems, Nearest Filtering",opts="{imageopts}"]
-
-The Texel Coordinate Systems - For the example shown of an 8{times}4 texel
-two dimensional image.
-
-  * Texel coordinates as above.
-    Also shown for nearest filtering:
-  ** Given the unnormalized coordinates [eq]#(u,v)#, the texel selected is
-     [eq]#ij#.
-  ** Given the offset [eq]#{DeltaUpper}~i~# and [eq]#{DeltaUpper}~j~#, the
-     texel selected by the offset is [eq]#ij'#.
-
-ifdef::VK_NV_corner_sampled_image[]
-For corner-sampled images, the texel samples are located at the grid
-intersections instead of the texel centers.
-
-image::{images}/vulkantexture0-corner-alternative-a-ll.svg[align="center",title="Texel Coordinate Systems, Corner Sampling",opts="{imageopts}"]
-
-endif::VK_NV_corner_sampled_image[]
-
-== Conversion Formulas
-
-ifdef::editing-notes[]
-[NOTE]
-.editing-note
-====
-(Bill) These Conversion Formulas will likely move to Section 2.7 Fixed-Point
-Data Conversions (RGB to sRGB and sRGB to RGB) and section 2.6 Numeric
-Representation and Computation (RGB to Shared Exponent and Shared Exponent
-to RGB)
-====
-endif::editing-notes[]
-
-[[textures-RGB-sexp]]
-=== RGB to Shared Exponent Conversion
-
-An RGB color [eq]#(red, green, blue)# is transformed to a shared exponent
-color [eq]#(red~shared~, green~shared~, blue~shared~, exp~shared~)# as
-follows:
-
-First, the components [eq]#(red, green, blue)# are clamped to
-[eq]#(red~clamped~, green~clamped~, blue~clamped~)# as:
-
-  {empty}:: [eq]#red~clamped~ = max(0, min(sharedexp~max~, red))#
-  {empty}:: [eq]#green~clamped~ = max(0, min(sharedexp~max~, green))#
-  {empty}:: [eq]#blue~clamped~ = max(0, min(sharedexp~max~, blue))#
-
-where:
-
-[latexmath]
-+++++++++++++++++++
-\begin{aligned}
-N               & = 9  & \text{number of mantissa bits per component} \\
-B               & = 15 & \text{exponent bias} \\
-E_{max}         & = 31 & \text{maximum possible biased exponent value} \\
-sharedexp_{max} & = \frac{(2^N-1)}{2^N} \times 2^{(E_{max}-B)}
-\end{aligned}
-+++++++++++++++++++
-
-[NOTE]
-.Note
-====
-[eq]#NaN#, if supported, is handled as in <<ieee-754,IEEE 754-2008>>
-`minNum()` and `maxNum()`.
-This results in any [eq]#NaN# being mapped to zero.
-====
-
-The largest clamped component, [eq]#max~clamped~# is determined:
-
-  {empty}:: [eq]#max~clamped~ = max(red~clamped~, green~clamped~,
-            blue~clamped~)#
-
-A preliminary shared exponent [eq]#exp'# is computed:
-[latexmath]
-+++++++++++++++++++
-\begin{aligned}
-exp' =
-  \begin{cases}
-    \left \lfloor \log_2(max_{clamped}) \right \rfloor + (B+1)
-      & \text{for}\  max_{clamped} > 2^{-(B+1)} \\
-    0
-      & \text{for}\  max_{clamped} \leq 2^{-(B+1)}
-  \end{cases}
-\end{aligned}
-+++++++++++++++++++
-
-The shared exponent [eq]#exp~shared~# is computed:
-
-[latexmath]
-+++++++++++++++++++
-\begin{aligned}
-max_{shared} =
-    \left \lfloor
-        { \frac{max_{clamped}}{2^{(exp'-B-N)}} + \frac{1}{2} }
-    \right \rfloor
-\end{aligned}
-+++++++++++++++++++
-
-[latexmath]
-+++++++++++++++++++
-\begin{aligned}
-exp_{shared} =
-  \begin{cases}
-    exp'   & \text{for}\  0 \leq max_{shared} < 2^N \\
-    exp'+1 & \text{for}\  max_{shared} = 2^N
-  \end{cases}
-\end{aligned}
-+++++++++++++++++++
-
-Finally, three integer values in the range [eq]#0# to [eq]#2^N^# are
-computed:
-
-[latexmath]
-+++++++++++++++++++
-\begin{aligned}
-red_{shared} & =
-    \left \lfloor
-        { \frac{red_{clamped}}{2^{(exp_{shared}-B-N)}}+ \frac{1}{2} }
-    \right \rfloor \\
-green_{shared} & =
-    \left \lfloor
-        { \frac{green_{clamped}}{2^{(exp_{shared}-B-N)}}+ \frac{1}{2} }
-    \right \rfloor \\
-blue_{shared} & =
-    \left \lfloor
-        { \frac{blue_{clamped}}{2^{(exp_{shared}-B-N)}}+ \frac{1}{2} }
-    \right \rfloor
-\end{aligned}
-+++++++++++++++++++
-
-
-[[textures-sexp-RGB]]
-=== Shared Exponent to RGB
-
-A shared exponent color [eq]#(red~shared~, green~shared~, blue~shared~,
-exp~shared~)# is transformed to an RGB color [eq]#(red, green, blue)# as
-follows:
-
-  {empty}:: latexmath:[red = red_{shared} \times {2^{(exp_{shared}-B-N)}}]
-  {empty}:: latexmath:[green = green_{shared} \times
-            {2^{(exp_{shared}-B-N)}}]
-  {empty}:: latexmath:[blue = blue_{shared} \times {2^{(exp_{shared}-B-N)}}]
-
-where:
-
-  {empty}:: [eq]#N = 9# (number of mantissa bits per component)
-  {empty}:: [eq]#B = 15# (exponent bias)
-
-
-== Texel Input Operations
-
-_Texel input instructions_ are SPIR-V image instructions that read from an
-image.
-_Texel input operations_ are a set of steps that are performed on state,
-coordinates, and texel values while processing a texel input instruction,
-and which are common to some or all texel input instructions.
-They include the following steps, which are performed in the listed order:
-
-  * <<textures-input-validation,Validation operations>>
-  ** <<textures-operation-validation,Instruction/Sampler/Image validation>>
-  ** <<textures-integer-coordinate-validation,Coordinate validation>>
-  ** <<textures-sparse-validation,Sparse validation>>
-ifdef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
-  ** <<textures-layout-validation,Layout validation>>
-endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
-  * <<textures-format-conversion,Format conversion>>
-  * <<textures-texel-replacement,Texel replacement>>
-  * <<textures-depth-compare-operation,Depth comparison>>
-  * <<textures-conversion-to-rgba,Conversion to RGBA>>
-  * <<textures-component-swizzle,Component swizzle>>
-ifdef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
-  * <<textures-chroma-reconstruction,Chroma reconstruction>>
-  * <<textures-sampler-YCbCr-conversion,{YCbCr} conversion>>
-endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
-
-For texel input instructions involving multiple texels (for sampling or
-gathering), these steps are applied for each texel that is used in the
-instruction.
-Depending on the type of image instruction, other steps are conditionally
-performed between these steps or involving multiple coordinate or texel
-values.
-
-ifdef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
-If <<textures-chroma-reconstruction,Chroma Reconstruction>> is implicit,
-<<textures-texel-filtering, Texel Filtering>> instead takes place during
-chroma reconstruction, before <<textures-sampler-YCbCr-conversion,sampler
-{YCbCr} conversion>> occurs.
-endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
-
-
-[[textures-input-validation]]
-=== Texel Input Validation Operations
-
-_Texel input validation operations_ inspect instruction/image/sampler state
-or coordinates, and in certain circumstances cause the texel value to be
-replaced or become undefined:.
-There are a series of validations that the texel undergoes.
-
-[[textures-operation-validation]]
-==== Instruction/Sampler/Image View Validation
-
-There are a number of cases where a SPIR-V instruction can: mismatch with
-the sampler, the image view, or both, and a number of further cases where
-the sampler can: mismatch with the image view.
-In such cases the value of the texel returned is undefined:.
-
-These cases include:
-
-  * The sampler pname:borderColor is an integer type and the image view
-    pname:format is not one of the elink:VkFormat integer types or a stencil
-    component of a depth/stencil format.
-  * The sampler pname:borderColor is a float type and the image view
-    pname:format is not one of the elink:VkFormat float types or a depth
-    component of a depth/stencil format.
-ifndef::VK_EXT_border_color_swizzle[]
-  * The sampler pname:borderColor is one of the opaque black colors
-    (ename:VK_BORDER_COLOR_FLOAT_OPAQUE_BLACK or
-    ename:VK_BORDER_COLOR_INT_OPAQUE_BLACK) and the image view
-    elink:VkComponentSwizzle for any of the slink:VkComponentMapping
-    components is not the <<resources-image-views-identity-mappings,identity
-    swizzle>>.
-endif::VK_EXT_border_color_swizzle[]
-ifdef::VK_EXT_border_color_swizzle[]
-  * The sampler pname:borderColor is one of the opaque black colors
-    (ename:VK_BORDER_COLOR_FLOAT_OPAQUE_BLACK or
-    ename:VK_BORDER_COLOR_INT_OPAQUE_BLACK) and the image view
-    elink:VkComponentSwizzle for any of the slink:VkComponentMapping
-    components is not the <<resources-image-views-identity-mappings,identity
-    swizzle>>, and
-    slink:VkPhysicalDeviceBorderColorSwizzleFeaturesEXT::pname:borderColorSwizzleFromImage
-    feature is not enabled, and
-    slink:VkSamplerBorderColorComponentMappingCreateInfoEXT is not
-    specified.
-  * slink:VkSamplerBorderColorComponentMappingCreateInfoEXT::pname:components,
-    if specified, has a component swizzle that does not match the component
-    swizzle of the image view, and either component swizzle is not a form of
-    identity swizzle.
-  * slink:VkSamplerBorderColorComponentMappingCreateInfoEXT::pname:srgb, if
-    specified, does not match the sRGB encoding of the image view.
-endif::VK_EXT_border_color_swizzle[]
-ifdef::VK_EXT_custom_border_color[]
-  * The sampler pname:borderColor is a custom color
-    (ename:VK_BORDER_COLOR_FLOAT_CUSTOM_EXT or
-    ename:VK_BORDER_COLOR_INT_CUSTOM_EXT) and the supplied
-    slink:VkSamplerCustomBorderColorCreateInfoEXT::pname:customBorderColor
-    is outside the bounds of the values representable in the image view's
-    pname:format.
-ifndef::VK_EXT_border_color_swizzle[]
-  * The sampler pname:borderColor is a custom color
-    (ename:VK_BORDER_COLOR_FLOAT_CUSTOM_EXT or
-    ename:VK_BORDER_COLOR_INT_CUSTOM_EXT) and the image view
-    elink:VkComponentSwizzle for any of the slink:VkComponentMapping
-    components is not the <<resources-image-views-identity-mappings,identity
-    swizzle>>.
-endif::VK_EXT_border_color_swizzle[]
-ifdef::VK_EXT_border_color_swizzle[]
-  * The sampler pname:borderColor is a custom color
-    (ename:VK_BORDER_COLOR_FLOAT_CUSTOM_EXT or
-    ename:VK_BORDER_COLOR_INT_CUSTOM_EXT) and the image view
-    elink:VkComponentSwizzle for any of the slink:VkComponentMapping
-    components is not the <<resources-image-views-identity-mappings,identity
-    swizzle>>, and
-    slink:VkPhysicalDeviceBorderColorSwizzleFeaturesEXT::pname:borderColorSwizzleFromImage
-    feature is not enabled, and
-    slink:VkSamplerBorderColorComponentMappingCreateInfoEXT is not
-    specified.
-endif::VK_EXT_border_color_swizzle[]
-endif::VK_EXT_custom_border_color[]
-  * The elink:VkImageLayout of any subresource in the image view does not
-    match that specified in slink:VkDescriptorImageInfo::pname:imageLayout
-    used to write the image descriptor.
-  * The SPIR-V Image Format is not <<spirvenv-image-formats,compatible>>
-    with the image view's pname:format.
-  * The sampler pname:unnormalizedCoordinates is ename:VK_TRUE and any of
-    the <<samplers-unnormalizedCoordinates,limitations of unnormalized
-    coordinates>> are violated.
-ifdef::VK_EXT_fragment_density_map[]
-  * The sampler was created with pname:flags containing
-    ename:VK_SAMPLER_CREATE_SUBSAMPLED_BIT_EXT and the image was not created
-    with pname:flags containing ename:VK_IMAGE_CREATE_SUBSAMPLED_BIT_EXT.
-  * The sampler was not created with pname:flags containing
-    ename:VK_SAMPLER_CREATE_SUBSAMPLED_BIT_EXT and the image was created
-    with pname:flags containing ename:VK_IMAGE_CREATE_SUBSAMPLED_BIT_EXT.
-  * The sampler was created with pname:flags containing
-    ename:VK_SAMPLER_CREATE_SUBSAMPLED_BIT_EXT and is used with a function
-    that is not code:OpImageSampleImplicitLod or
-    code:OpImageSampleExplicitLod, or is used with operands code:Offset or
-    code:ConstOffsets.
-endif::VK_EXT_fragment_density_map[]
-  * The SPIR-V instruction is one of the code:OpImage*Dref* instructions and
-    the sampler pname:compareEnable is ename:VK_FALSE
-  * The SPIR-V instruction is not one of the code:OpImage*Dref* instructions
-    and the sampler pname:compareEnable is ename:VK_TRUE
-ifndef::VK_KHR_format_feature_flags2[]
-  * The SPIR-V instruction is one of the code:OpImage*Dref* instructions and
-    the image view pname:format is not one of the depth/stencil formats with
-    a depth component, or the image view aspect is not
-    ename:VK_IMAGE_ASPECT_DEPTH_BIT.
-endif::VK_KHR_format_feature_flags2[]
-ifdef::VK_KHR_format_feature_flags2[]
-  * The SPIR-V instruction is one of the code:OpImage*Dref* instructions,
-    the image view pname:format is one of the depth/stencil formats, and the
-    image view aspect is not ename:VK_IMAGE_ASPECT_DEPTH_BIT.
-endif::VK_KHR_format_feature_flags2[]
-  * The SPIR-V instruction's image variable's properties are not compatible
-    with the image view:
-  ** Rules for pname:viewType:
-  *** ename:VK_IMAGE_VIEW_TYPE_1D must: have code:Dim = 1D, code:Arrayed =
-      0, code:MS = 0.
-  *** ename:VK_IMAGE_VIEW_TYPE_2D must: have code:Dim = 2D, code:Arrayed = 0.
-  *** ename:VK_IMAGE_VIEW_TYPE_3D must: have code:Dim = 3D, code:Arrayed =
-      0, code:MS = 0.
-  *** ename:VK_IMAGE_VIEW_TYPE_CUBE must: have code:Dim = Cube, code:Arrayed
-      = 0, code:MS = 0.
-  *** ename:VK_IMAGE_VIEW_TYPE_1D_ARRAY must: have code:Dim = 1D,
-      code:Arrayed = 1, code:MS = 0.
-  *** ename:VK_IMAGE_VIEW_TYPE_2D_ARRAY must: have code:Dim = 2D,
-      code:Arrayed = 1.
-  *** ename:VK_IMAGE_VIEW_TYPE_CUBE_ARRAY must: have code:Dim = Cube,
-      code:Arrayed = 1, code:MS = 0.
-  ** If the image was created with slink:VkImageCreateInfo::pname:samples
-     equal to ename:VK_SAMPLE_COUNT_1_BIT, the instruction must: have
-     code:MS = 0.
-  ** If the image was created with slink:VkImageCreateInfo::pname:samples
-     not equal to ename:VK_SAMPLE_COUNT_1_BIT, the instruction must: have
-     code:MS = 1.
-  ** If the code:Sampled code:Type of the code:OpTypeImage does not match
-     the numeric format of the image, as shown in the _SPIR-V Sampled Type_
-     column of the <<formats-numericformat>> table.
-  ** If the <<spirvenv-image-signedness,signedness of any read or sample
-     operation>> does not match the signedness of the image's format.
-ifdef::VK_NV_corner_sampled_image[]
-  * If the image was created with slink:VkImageCreateInfo::pname:flags
-    containing ename:VK_IMAGE_CREATE_CORNER_SAMPLED_BIT_NV, the sampler
-    addressing modes must: only use a elink:VkSamplerAddressMode of
-    ename:VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE.
-endif::VK_NV_corner_sampled_image[]
-ifdef::VK_NV_shader_image_footprint[]
-  * The SPIR-V instruction is code:OpImageSampleFootprintNV with code:Dim =
-    2D and pname:addressModeU or pname:addressModeV in the sampler is not
-    ename:VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE.
-  * The SPIR-V instruction is code:OpImageSampleFootprintNV with code:Dim =
-    3D and pname:addressModeU, pname:addressModeV, or pname:addressModeW in
-    the sampler is not ename:VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE.
-endif::VK_NV_shader_image_footprint[]
-ifdef::VK_EXT_custom_border_color[]
-  * The sampler was created with a specified
-    slink:VkSamplerCustomBorderColorCreateInfoEXT::pname:format which does
-    not match the elink:VkFormat of the image view(s) it is sampling.
-  * The sampler is sampling an image view of
-    ename:VK_FORMAT_B4G4R4A4_UNORM_PACK16,
-    ename:VK_FORMAT_B5G6R5_UNORM_PACK16, or
-    ename:VK_FORMAT_B5G5R5A1_UNORM_PACK16 format without a specified
-    slink:VkSamplerCustomBorderColorCreateInfoEXT::pname:format.
-endif::VK_EXT_custom_border_color[]
-
-ifdef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
-Only code:OpImageSample* and code:OpImageSparseSample* can: be used with a
-sampler that enables <<samplers-YCbCr-conversion,sampler {YCbCr}
-conversion>>.
-
-code:OpImageFetch, code:OpImageSparseFetch, code:OpImage*Gather, and
-code:OpImageSparse*Gather must: not be used with a sampler that enables
-<<samplers-YCbCr-conversion,sampler {YCbCr} conversion>>.
-
-The code:ConstOffset and code:Offset operands must: not be used with a
-sampler that enables <<samplers-YCbCr-conversion,sampler {YCbCr}
-conversion>>.
-endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
-
-ifdef::VK_KHR_format_feature_flags2[]
-If the <<resources-image-view-format-features,image view's format features>>
-do not support
-ename:VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_DEPTH_COMPARISON_BIT_KHR then
-code:OpImage*Dref* instructions must: not be used to sample from it.
-endif::VK_KHR_format_feature_flags2[]
-
-
-[[textures-integer-coordinate-validation]]
-==== Integer Texel Coordinate Validation
-
-Integer texel coordinates are validated against the size of the image level,
-and the number of layers and number of samples in the image.
-For SPIR-V instructions that use integer texel coordinates, this is
-performed directly on the integer coordinates.
-For instructions that use normalized or unnormalized texel coordinates, this
-is performed on the coordinates that result after
-<<textures-unnormalized-to-integer,conversion>> to integer texel
-coordinates.
-
-If the integer texel coordinates do not satisfy all of the conditions
-
-  {empty}:: [eq]#0 {leq} i < w~s~#
-  {empty}:: [eq]#0 {leq} j < h~s~#
-  {empty}:: [eq]#0 {leq} k < d~s~#
-  {empty}:: [eq]#0 {leq} l < layers#
-  {empty}:: [eq]#0 {leq} n < samples#
-
-where:
-
-  {empty}:: [eq]#w~s~ =# width of the image level
-  {empty}:: [eq]#h~s~ =# height of the image level
-  {empty}:: [eq]#d~s~ =# depth of the image level
-  {empty}:: [eq]#layers =# number of layers in the image
-  {empty}:: [eq]#samples =# number of samples per texel in the image
-
-then the texel fails integer texel coordinate validation.
-
-There are four cases to consider:
-
-  . Valid Texel Coordinates
-+
-  * If the texel coordinates pass validation (that is, the coordinates lie
-    within the image),
-+
-then the texel value comes from the value in image memory.
-
-  . Border Texel
-+
-  * If the texel coordinates fail validation, and
-  * If the read is the result of an image sample instruction or image gather
-    instruction, and
-  * If the image is not a cube image,
-+
-then the texel is a border texel and <<textures-texel-replacement,texel
-replacement>> is performed.
-
-  . Invalid Texel
-+
-  * If the texel coordinates fail validation, and
-  * If the read is the result of an image fetch instruction, image read
-    instruction, or atomic instruction,
-+
-then the texel is an invalid texel and <<textures-texel-replacement,texel
-replacement>> is performed.
-
-  . Cube Map Edge or Corner
-+
-Otherwise the texel coordinates lie beyond the edges or corners of the
-selected cube map face, and <<textures-cubemapedge, Cube map edge handling>>
-is performed.
-
-
-[[textures-cubemapedge]]
-==== Cube Map Edge Handling
-
-If the texel coordinates lie beyond the edges or corners of the selected
-cube map face, the following steps are performed.
-Note that this does not occur when using ename:VK_FILTER_NEAREST filtering
-within a mip level, since ename:VK_FILTER_NEAREST is treated as using
-ename:VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE.
-
-  * Cube Map Edge Texel
-+
-  ** If the texel lies beyond the selected cube map face in either only
-     [eq]#i# or only [eq]#j#, then the coordinates [eq]#(i,j)# and the array
-     layer [eq]#l# are transformed to select the adjacent texel from the
-     appropriate neighboring face.
-
-  * Cube Map Corner Texel
-+
-  ** If the texel lies beyond the selected cube map face in both [eq]#i# and
-     [eq]#j#, then there is no unique neighboring face from which to read
-     that texel.
-     The texel should: be replaced by the average of the three values of the
-     adjacent texels in each incident face.
-     However, implementations may: replace the cube map corner texel by
-     other methods.
-ifndef::VK_EXT_filter_cubic[]
-The methods are subject to the constraint that if the three available texels
-have the same value, the resulting filtered texel must: have that value.
-endif::VK_EXT_filter_cubic[]
-ifdef::VK_EXT_filter_cubic[]
-The methods are subject to the constraint that for linear filtering if the
-three available texels have the same value, the resulting filtered texel
-must: have that value, and for cubic filtering if the twelve available
-samples have the same value, the resulting filtered texel must: have that
-value.
-endif::VK_EXT_filter_cubic[]
-
-[[textures-sparse-validation]]
-==== Sparse Validation
-
-If the texel reads from an unbound region of a sparse image, the texel is a
-_sparse unbound texel_, and processing continues with
-<<textures-texel-replacement,texel replacement>>.
-
-ifdef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
-
-[[textures-layout-validation]]
-==== Layout Validation
-
-If all planes of a _disjoint_ _multi-planar_ image are not in the same
-<<resources-image-layouts,image layout>>, the image must: not be sampled
-with <<samplers-YCbCr-conversion,sampler {YCbCr} conversion>> enabled.
-
-endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
-
-[[textures-format-conversion]]
-=== Format Conversion
-
-Texels undergo a format conversion from the elink:VkFormat of the image view
-to a vector of either floating point or signed or unsigned integer
-components, with the number of components based on the number of components
-present in the format.
-
-  * Color formats have one, two, three, or four components, according to the
-    format.
-  * Depth/stencil formats are one component.
-    The depth or stencil component is selected by the pname:aspectMask of
-    the image view.
-
-Each component is converted based on its type and size (as defined in the
-<<formats-definition,Format Definition>> section for each elink:VkFormat),
-using the appropriate equations in <<fundamentals-fp16,16-Bit Floating-Point
-Numbers>>, <<fundamentals-fp11,Unsigned 11-Bit Floating-Point Numbers>>,
-<<fundamentals-fp10,Unsigned 10-Bit Floating-Point Numbers>>,
-<<fundamentals-fixedconv,Fixed-Point Data Conversion>>, and
-<<textures-sexp-RGB,Shared Exponent to RGB>>.
-Signed integer components smaller than 32 bits are sign-extended.
-
-If the image view format is sRGB, the color components are first converted
-as if they are UNORM, and then sRGB to linear conversion is applied to the
-R, G, and B components as described in the "`sRGB EOTF`" section of the
-<<data-format,Khronos Data Format Specification>>.
-The A component, if present, is unchanged.
-
-If the image view format is block-compressed, then the texel value is first
-decoded, then converted based on the type and number of components defined
-by the compressed format.
-
-
-[[textures-texel-replacement]]
-=== Texel Replacement
-
-A texel is replaced if it is one (and only one) of:
-
-  * a border texel,
-  * an invalid texel, or
-  * a sparse unbound texel.
-
-Border texels are replaced with a value based on the image format and the
-pname:borderColor of the sampler.
-The border color is:
-
-[[textures-border-replacement-color]]
-ifdef::VK_EXT_custom_border_color[]
-.Border Color [eq]#B#, Custom Border Color slink:VkSamplerCustomBorderColorCreateInfoEXT::pname:customBorderColor [eq]#U#
-endif::VK_EXT_custom_border_color[]
-ifndef::VK_EXT_custom_border_color[]
-.Border Color [eq]#B#
-endif::VK_EXT_custom_border_color[]
-[options="header",cols="60%,40%"]
-|====
-| Sampler pname:borderColor                     | Corresponding Border Color
-| ename:VK_BORDER_COLOR_FLOAT_TRANSPARENT_BLACK | [eq]#[B~r~, B~g~, B~b~, B~a~] = [0.0, 0.0, 0.0, 0.0]#
-| ename:VK_BORDER_COLOR_FLOAT_OPAQUE_BLACK      | [eq]#[B~r~, B~g~, B~b~, B~a~] = [0.0, 0.0, 0.0, 1.0]#
-| ename:VK_BORDER_COLOR_FLOAT_OPAQUE_WHITE      | [eq]#[B~r~, B~g~, B~b~, B~a~] = [1.0, 1.0, 1.0, 1.0]#
-| ename:VK_BORDER_COLOR_INT_TRANSPARENT_BLACK   | [eq]#[B~r~, B~g~, B~b~, B~a~] = [0, 0, 0, 0]#
-| ename:VK_BORDER_COLOR_INT_OPAQUE_BLACK        | [eq]#[B~r~, B~g~, B~b~, B~a~] = [0, 0, 0, 1]#
-| ename:VK_BORDER_COLOR_INT_OPAQUE_WHITE        | [eq]#[B~r~, B~g~, B~b~, B~a~] = [1, 1, 1, 1]#
-ifdef::VK_EXT_custom_border_color[]
-| ename:VK_BORDER_COLOR_FLOAT_CUSTOM_EXT        | [eq]#[B~r~, B~g~, B~b~, B~a~] = [U~r~, U~g~, U~b~, U~a~]#
-| ename:VK_BORDER_COLOR_INT_CUSTOM_EXT          | [eq]#[B~r~, B~g~, B~b~, B~a~] = [U~r~, U~g~, U~b~, U~a~]#
-endif::VK_EXT_custom_border_color[]
-|====
-
-ifdef::VK_EXT_custom_border_color[]
-The custom border color ([eq]#U#) may: be rounded by implementations prior
-to texel replacement, but the error introduced by such a rounding must: not
-exceed one ULP of the image's pname:format.
-endif::VK_EXT_custom_border_color[]
-
-[NOTE]
-.Note
-====
-The names etext:VK_BORDER_COLOR_*\_TRANSPARENT_BLACK,
-etext:VK_BORDER_COLOR_*\_OPAQUE_BLACK, and
-etext:VK_BORDER_COLOR_*_OPAQUE_WHITE are meant to describe which components
-are zeros and ones in the vocabulary of compositing, and are not meant to
-imply that the numerical value of ename:VK_BORDER_COLOR_INT_OPAQUE_WHITE is
-a saturating value for integers.
-====
-
-This is substituted for the texel value by replacing the number of
-components in the image format
-
-[[textures-border-replacement-table]]
-.Border Texel Components After Replacement
-[width="100%",options="header"]
-|====
-| Texel Aspect or Format      | Component Assignment
-| Depth aspect                | [eq]#D                                     = B~r~#
-| Stencil aspect              | [eq]#S                                     = B~r~#
-| One component color format  | [eq]#Color~r~                              = B~r~#
-| Two component color format  | [eq]#[Color~r~,Color~g~]                   = [B~r~,B~g~]#
-| Three component color format| [eq]#[Color~r~,Color~g~,Color~b~]          = [B~r~,B~g~,B~b~]#
-| Four component color format | [eq]#[Color~r~,Color~g~,Color~b~,Color~a~] = [B~r~,B~g~,B~b~,B~a~]#
-|====
-
-The value returned by a read of an invalid texel is undefined:, unless that
-read operation is from a buffer resource and the pname:robustBufferAccess
-feature is enabled.
-In that case, an invalid texel is replaced as described by the
-<<features-robustBufferAccess,pname:robustBufferAccess feature>>.
-ifdef::VK_EXT_image_robustness,VK_EXT_robustness2[]
-If the access is to an image resource and the x, y, z, or layer coordinate
-validation fails and
-ifdef::VK_EXT_image_robustness[]
-<<features-robustImageAccess,pname:robustImageAccess>> is enabled then zero
-must: be returned for the R, G, and B components, if present.
-Either zero or one must: be returned for the A component, if present.
-endif::VK_EXT_image_robustness[]
-ifdef::VK_EXT_image_robustness+VK_EXT_robustness2[If]
-ifdef::VK_EXT_robustness2[]
-<<features-robustImageAccess2,pname:robustImageAccess2>> is enabled, zero
-values must: be returned.
-endif::VK_EXT_robustness2[]
-If only the sample index was invalid, the values returned are undefined:.
-endif::VK_EXT_image_robustness,VK_EXT_robustness2[]
-
-ifdef::VK_EXT_image_robustness[]
-Additionally, if <<features-robustImageAccess,pname:robustImageAccess>> is
-enabled,
-ifdef::VK_EXT_robustness2[]
-but <<features-robustImageAccess2,pname:robustImageAccess2>> is not,
-endif::VK_EXT_robustness2[]
-any invalid texels may: be expanded to four components prior to texel
-replacement.
-This means that components not present in the image format may be replaced
-with 0 or may undergo <<textures-conversion-to-rgba,conversion to RGBA>> as
-normal.
-endif::VK_EXT_image_robustness[]
-
-ifdef::VK_EXT_robustness2[]
-Loads from a null descriptor return a four component color value of all
-zeros.
-However, for storage images and storage texel buffers using an explicit
-SPIR-V Image Format, loads from a null descriptor may: return an alpha value
-of 1 (float or integer, depending on format) if the format does not include
-alpha.
-endif::VK_EXT_robustness2[]
-
-If the
-slink:VkPhysicalDeviceSparseProperties::pname:residencyNonResidentStrict
-property is ename:VK_TRUE, a sparse unbound texel is replaced with 0 or 0.0
-values for integer and floating-point components of the image format,
-respectively.
-
-If pname:residencyNonResidentStrict is ename:VK_FALSE, the value of the
-sparse unbound texel is undefined:.
-
-
-[[textures-depth-compare-operation]]
-=== Depth Compare Operation
-
-If the image view has a depth/stencil format, the depth component is
-selected by the pname:aspectMask, and the operation is a code:Dref
-instruction, a depth comparison is performed.
-The value of the result [eq]#D# is [eq]#1.0# if the result of the compare
-operation is [eq]#true#, and [eq]#0.0# otherwise.
-The compare operation is selected by the pname:compareOp member of the
-sampler.
-
-[latexmath]
-+++++++++++++++++++
-\begin{aligned}
-D & = 1.0 &
-  \begin{cases}
-    D_{\textit{ref}} \leq D_{\textit{tex}} & \text{for LEQUAL}   \\
-    D_{\textit{ref}} \geq D_{\textit{tex}} & \text{for GEQUAL}   \\
-    D_{\textit{ref}} < D_{\textit{tex}}    & \text{for LESS}     \\
-    D_{\textit{ref}} > D_{\textit{tex}}    & \text{for GREATER}  \\
-    D_{\textit{ref}} = D_{\textit{tex}}    & \text{for EQUAL}    \\
-    D_{\textit{ref}} \neq D_{\textit{tex}} & \text{for NOTEQUAL} \\
-    \textit{true}                          & \text{for ALWAYS}   \\
-    \textit{false}                         & \text{for NEVER}
-  \end{cases} \\
-D & = 0.0 & \text{otherwise}
-\end{aligned}
-+++++++++++++++++++
-
-where [eq]#D~tex~# is the texel depth value and [eq]#D~ref~# is the
-reference value from the SPIR-V operand.
-If the image being sampled has a fixed-point format then the reference value
-is clamped to [0, 1] before the comparison operation.
-
-
-[[textures-conversion-to-rgba]]
-=== Conversion to RGBA
-
-The texel is expanded from one, two, or three components to four components
-based on the image base color:
-
-[[textures-texel-color-rgba-conversion-table]]
-.Texel Color After Conversion To RGBA
-[width="100%", options="header", cols="<4,<6"]
-|====
-| Texel Aspect or Format      | RGBA Color
-| Depth aspect                | [eq]#[Color~r~,Color~g~,Color~b~, Color~a~] = [D,0,0,one]#
-| Stencil aspect              | [eq]#[Color~r~,Color~g~,Color~b~, Color~a~] = [S,0,0,one]#
-| One component color format  | [eq]#[Color~r~,Color~g~,Color~b~, Color~a~] = [Color~r~,0,0,one]#
-| Two component color format  | [eq]#[Color~r~,Color~g~,Color~b~, Color~a~] = [Color~r~,Color~g~,0,one]#
-| Three component color format| [eq]#[Color~r~,Color~g~,Color~b~, Color~a~] = [Color~r~,Color~g~,Color~b~,one]#
-| Four component color format | [eq]#[Color~r~,Color~g~,Color~b~, Color~a~] = [Color~r~,Color~g~,Color~b~,Color~a~]#
-|====
-
-where [eq]#one = 1.0f# for floating-point formats and depth aspects, and
-[eq]#one = 1# for integer formats and stencil aspects.
-
-
-[[textures-component-swizzle]]
-=== Component Swizzle
-
-ifndef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
-All texel input instructions apply a _swizzle_ based on the
-elink:VkComponentSwizzle enums in the pname:components member of the
-slink:VkImageViewCreateInfo structure for the image being read.
-endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
-ifdef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
-All texel input instructions apply a _swizzle_ based on:
-
-  * the elink:VkComponentSwizzle enums in the pname:components member of the
-    slink:VkImageViewCreateInfo structure for the image being read if
-    <<samplers-YCbCr-conversion,sampler {YCbCr} conversion>> is not enabled,
-    and
-  * the elink:VkComponentSwizzle enums in the pname:components member of the
-    slink:VkSamplerYcbcrConversionCreateInfo structure for the
-    <<samplers-YCbCr-conversion,sampler {YCbCr} conversion>> if sampler
-    {YCbCr} conversion is enabled.
-
-endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
-
-The swizzle can: rearrange the components of the texel, or substitute zero
-or one for any components.
-It is defined as follows for each color [eq]#component#:
-
-
-[latexmath]
-+++++++++++++++++++
-\begin{aligned}
-Color'_{component} & =
-\begin{cases}
-Color_r          & \text{for RED swizzle}   \\
-Color_g          & \text{for GREEN swizzle} \\
-Color_b          & \text{for BLUE swizzle}  \\
-Color_a          & \text{for ALPHA swizzle} \\
-0                & \text{for ZERO swizzle}  \\
-one              & \text{for ONE swizzle} \\
-identity         & \text{for IDENTITY swizzle}
-\end{cases}
-\end{aligned}
-+++++++++++++++++++
-
-where:
-
-[latexmath]
-+++++++++++++++++++
-\begin{aligned}
-one & =
-\begin{cases}
-& 1.0\text{f}  & \text{for floating point components} \\
-& 1            & \text{for integer components} \\
-\end{cases}
-\\
-identity & =
-\begin{cases}
-& Color_r          & \text{for}\ component = r \\
-& Color_g          & \text{for}\ component = g \\
-& Color_b          & \text{for}\ component = b \\
-& Color_a          & \text{for}\ component = a \\
-\end{cases}
-\end{aligned}
-+++++++++++++++++++
-
-If the border color is one of the etext:VK_BORDER_COLOR_*_OPAQUE_BLACK enums
-and the elink:VkComponentSwizzle is not the
-<<resources-image-views-identity-mappings,identity swizzle>> for all
-components, the value of the texel after swizzle is undefined:.
-
-[[textures-sparse-residency]]
-=== Sparse Residency
-
-code:OpImageSparse* instructions return a structure which includes a
-_residency code_ indicating whether any texels accessed by the instruction
-are sparse unbound texels.
-This code can: be interpreted by the code:OpImageSparseTexelsResident
-instruction which converts the residency code to a boolean value.
-
-
-ifdef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
-[[textures-chroma-reconstruction]]
-=== Chroma Reconstruction
-
-In some color models, the color representation is defined in terms of
-monochromatic light intensity (often called "`luma`") and color differences
-relative to this intensity, often called "`chroma`".
-It is common for color models other than RGB to represent the chroma
-components at lower spatial resolution than the luma component.
-This approach is used to take advantage of the eye's lower spatial
-sensitivity to color compared with its sensitivity to brightness.
-Less commonly, the same approach is used with additive color, since the
-green component dominates the eye's sensitivity to light intensity and the
-spatial sensitivity to color introduced by red and blue is lower.
-
-Lower-resolution components are "`downsampled`" by resizing them to a lower
-spatial resolution than the component representing luminance.
-This process is also commonly known as "`chroma subsampling`".
-There is one luminance sample in each texture texel, but each chrominance
-sample may be shared among several texels in one or both texture dimensions.
-
- * "`etext:_444`" formats do not spatially downsample chroma values compared
-   with luma: there are unique chroma samples for each texel.
-
- * "`etext:_422`" formats have downsampling in the x dimension
-   (corresponding to _u_ or _s_ coordinates): they are sampled at half the
-   resolution of luma in that dimension.
-
- * "`etext:_420`" formats have downsampling in the x dimension
-   (corresponding to _u_ or _s_ coordinates) and the y dimension
-   (corresponding to _v_ or _t_ coordinates): they are sampled at half the
-   resolution of luma in both dimensions.
-
-The process of reconstructing a full color value for texture access involves
-accessing both chroma and luma values at the same location.
-To generate the color accurately, the values of the lower-resolution
-components at the location of the luma samples must be reconstructed from
-the lower-resolution sample locations, an operation known here as "`chroma
-reconstruction`" irrespective of the actual color model.
-
-The location of the chroma samples relative to the luma coordinates is
-determined by the pname:xChromaOffset and pname:yChromaOffset members of the
-slink:VkSamplerYcbcrConversionCreateInfo structure used to create the
-sampler {YCbCr} conversion.
-
-The following diagrams show the relationship between unnormalized (_u_,_v_)
-coordinates and (_i_,_j_) integer texel positions in the luma component
-(shown in black, with circles showing integer sample positions) and the
-texel coordinates of reduced-resolution chroma components, shown as crosses
-in red.
-
-[NOTE]
-.Note
-====
-If the chroma values are reconstructed at the locations of the luma samples
-by means of interpolation, chroma samples from outside the image bounds are
-needed; these are determined according to <<textures-wrapping-operation>>.
-These diagrams represent this by showing the bounds of the "`chroma texel`"
-extending beyond the image bounds, and including additional chroma sample
-positions where required for interpolation.
-The limits of a sample for etext:NEAREST sampling is shown as a grid.
-====
-
-image::{images}/chromasamples_422_cosited.svg[align="center",title="422 downsampling, xChromaOffset=COSITED_EVEN",opts="{imageopts}"]
-
-image::{images}/chromasamples_422_midpoint.svg[align="center",title="422 downsampling, xChromaOffset=MIDPOINT",opts="{imageopts}"]
-
-image::{images}/chromasamples_420_xcosited_ycosited.svg[align="center",title="420 downsampling, xChromaOffset=COSITED_EVEN, yChromaOffset=COSITED_EVEN",opts="{imageopts}"]
-
-image::{images}/chromasamples_420_xmidpoint_ycosited.svg[align="center",title="420 downsampling, xChromaOffset=MIDPOINT, yChromaOffset=COSITED_EVEN",opts="{imageopts}"]
-
-image::{images}/chromasamples_420_xcosited_ymidpoint.svg[align="center",title="420 downsampling, xChromaOffset=COSITED_EVEN, yChromaOffset=MIDPOINT",opts="{imageopts}"]
-
-image::{images}/chromasamples_420_xmidpoint_ymidpoint.svg[align="center",title="420 downsampling, xChromaOffset=MIDPOINT, yChromaOffset=MIDPOINT",opts="{imageopts}"]
-
-Reconstruction is implemented in one of two ways:
-
-If the format of the image that is to be sampled sets
-ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_BIT,
-or the slink:VkSamplerYcbcrConversionCreateInfo's
-pname:forceExplicitReconstruction is set to ename:VK_TRUE, reconstruction is
-performed as an explicit step independent of filtering, described in the
-<<textures-explicit-reconstruction>> section.
-
-If the format of the image that is to be sampled does not set
-ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_BIT
-and if the slink:VkSamplerYcbcrConversionCreateInfo's
-pname:forceExplicitReconstruction is set to ename:VK_FALSE, reconstruction
-is performed as an implicit part of filtering prior to color model
-conversion, with no separate post-conversion texel filtering step, as
-described in the <<textures-implict-reconstruction,Implicit Reconstruction>>
-section.
-
-
-[[textures-explicit-reconstruction]]
-==== Explicit Reconstruction
-
-  * If the pname:chromaFilter member of the
-    slink:VkSamplerYcbcrConversionCreateInfo structure is
-    ename:VK_FILTER_NEAREST:
-  ** If the format's R and B components are reduced in resolution in just
-     width by a factor of two relative to the G component (i.e. this is a
-     "`etext:_422`" format), the latexmath:[\tau_{ijk}[level\]] values
-     accessed by <<textures-texel-filtering,texel filtering>> are
-     reconstructed as follows:
-+
-[latexmath]
-++++++++++++++
-\begin{aligned}
-\tau_R'(i, j) & = \tau_R(\left\lfloor{i\times 0.5}\right\rfloor, j)[level] \\
-\tau_B'(i, j) & = \tau_B(\left\lfloor{i\times 0.5}\right\rfloor, j)[level]
-\end{aligned}
-++++++++++++++
-
-  ** If the format's R and B components are reduced in resolution in width
-     and height by a factor of two relative to the G component (i.e. this is
-     a "`etext:_420`" format), the latexmath:[\tau_{ijk}[level\]] values
-     accessed by <<textures-texel-filtering,texel filtering>> are
-     reconstructed as follows:
-+
-[latexmath]
-++++++++++++++
-\begin{aligned}
-\tau_R'(i, j) & = \tau_R(\left\lfloor{i\times 0.5}\right\rfloor, \left\lfloor{j\times 0.5}\right\rfloor)[level] \\
-\tau_B'(i, j) & = \tau_B(\left\lfloor{i\times 0.5}\right\rfloor, \left\lfloor{j\times 0.5}\right\rfloor)[level]
-\end{aligned}
-++++++++++++++
-+
-[NOTE]
-.Note
-====
-pname:xChromaOffset and pname:yChromaOffset have no effect if
-pname:chromaFilter is ename:VK_FILTER_NEAREST for explicit reconstruction.
-====
-
-  * If the pname:chromaFilter member of the
-    slink:VkSamplerYcbcrConversionCreateInfo structure is
-    ename:VK_FILTER_LINEAR:
-  ** If the format's R and B components are reduced in resolution in just
-     width by a factor of two relative to the G component (i.e. this is a
-     "`etext:_422`" format):
-  *** If pname:xChromaOffset is ename:VK_CHROMA_LOCATION_COSITED_EVEN:
-+
-[latexmath]
-+++++
-\tau_{RB}'(i,j) = \begin{cases}
-\tau_{RB}(\left\lfloor{i\times 0.5}\right\rfloor,j)[level], & 0.5 \times i = \left\lfloor{0.5 \times i}\right\rfloor\\
-0.5\times\tau_{RB}(\left\lfloor{i\times 0.5}\right\rfloor,j)[level] + \\
-0.5\times\tau_{RB}(\left\lfloor{i\times 0.5}\right\rfloor + 1,j)[level], & 0.5 \times i \neq \left\lfloor{0.5 \times i}\right\rfloor
-\end{cases}
-+++++
-+
-  *** If pname:xChromaOffset is ename:VK_CHROMA_LOCATION_MIDPOINT:
-+
-[latexmath]
-+++++
-\tau_{RB}'(i,j) = \begin{cases}
-0.25 \times \tau_{RB}(\left\lfloor{i\times 0.5}\right\rfloor - 1,j)[level] + \\
-0.75 \times \tau_{RB}(\left\lfloor{i\times 0.5}\right\rfloor,j)[level], & 0.5 \times i = \left\lfloor{0.5 \times i}\right\rfloor\\
-0.75 \times \tau_{RB}(\left\lfloor{i\times 0.5}\right\rfloor,j)[level] + \\
-0.25 \times \tau_{RB}(\left\lfloor{i\times 0.5}\right\rfloor + 1,j)[level], & 0.5 \times i \neq \left\lfloor{0.5 \times i}\right\rfloor
-\end{cases}
-+++++
-
-  ** If the format's R and B components are reduced in resolution in width
-     and height by a factor of two relative to the G component (i.e. this is
-     a "`etext:_420`" format), a similar relationship applies.
-     Due to the number of options, these formulae are expressed more
-     concisely as follows:
-+
-[latexmath]
-+++++
-\begin{aligned}
-  i_{RB} & =
-    \begin{cases}
-      0.5 \times (i) & \textrm{xChromaOffset = COSITED}\_\textrm{EVEN} \\
-      0.5 \times (i - 0.5) & \textrm{xChromaOffset = MIDPOINT}
-    \end{cases}\\
-  j_{RB} & =
-    \begin{cases}
-      0.5 \times (j) & \textrm{yChromaOffset = COSITED}\_\textrm{EVEN} \\
-      0.5 \times (j - 0.5) & \textrm{yChromaOffset = MIDPOINT}
-    \end{cases}\\
-  \\
-  i_{floor} & = \left\lfloor i_{RB} \right\rfloor \\
-  j_{floor} & = \left\lfloor j_{RB} \right\rfloor \\
-  \\
-  i_{frac} & = i_{RB} - i_{floor} \\
-  j_{frac} & = j_{RB} - j_{floor}
-\end{aligned}
-+++++
-+
-[latexmath]
-+++++
-\begin{aligned}
-\tau_{RB}'(i,j) =
-    & \tau_{RB}(     i_{floor},     j_{floor})[level]
-        & \times & ( 1 - i_{frac} ) &
-        & \times & ( 1 - j_{frac} ) & + \\
-    & \tau_{RB}( 1 + i_{floor},     j_{floor})[level]
-        & \times & (     i_{frac} ) &
-        & \times & ( 1 - j_{frac} ) & + \\
-    & \tau_{RB}(     i_{floor}, 1 + j_{floor})[level]
-        & \times & ( 1 - i_{frac} ) &
-        & \times & (     j_{frac} ) & + \\
-    & \tau_{RB}( 1 + i_{floor}, 1 + j_{floor})[level]
-        & \times & (     i_{frac} ) &
-        & \times & (     j_{frac} ) &
-\end{aligned}
-+++++
-
-[NOTE]
-.Note
-====
-In the case where the texture itself is bilinearly interpolated as described
-in <<textures-texel-filtering,Texel Filtering>>, thus requiring four
-full-color samples for the filtering operation, and where the reconstruction
-of these samples uses bilinear interpolation in the chroma components due to
-pname:chromaFilter=ename:VK_FILTER_LINEAR, up to nine chroma samples may be
-required, depending on the sample location.
-====
-
-
-[[textures-implict-reconstruction]]
-==== Implicit Reconstruction
-
-Implicit reconstruction takes place by the samples being interpolated, as
-required by the filter settings of the sampler, except that
-pname:chromaFilter takes precedence for the chroma samples.
-
-If pname:chromaFilter is ename:VK_FILTER_NEAREST, an implementation may:
-behave as if pname:xChromaOffset and pname:yChromaOffset were both
-ename:VK_CHROMA_LOCATION_MIDPOINT, irrespective of the values set.
-
-[NOTE]
-.Note
-====
-This will not have any visible effect if the locations of the luma samples
-coincide with the location of the samples used for rasterization.
-====
-
-The sample coordinates are adjusted by the downsample factor of the
-component (such that, for example, the sample coordinates are divided by two
-if the component has a downsample factor of two relative to the luma
-component):
-
-[latexmath]
-++++++
-\begin{aligned}
-u_{RB}' (422/420) &=
-  \begin{cases}
-     0.5\times (u + 0.5), & \textrm{xChromaOffset = COSITED}\_\textrm{EVEN} \\
-     0.5\times u, & \textrm{xChromaOffset = MIDPOINT}
-  \end{cases} \\
-v_{RB}' (420) &=
-  \begin{cases}
-     0.5\times (v + 0.5), & \textrm{yChromaOffset = COSITED}\_\textrm{EVEN} \\
-     0.5\times v, & \textrm{yChromaOffset = MIDPOINT}
-  \end{cases}
-\end{aligned}
-++++++
-
-
-[[textures-sampler-YCbCr-conversion]]
-=== Sampler {YCbCr} Conversion
-
-Sampler {YCbCr} conversion performs the following operations, which an
-implementation may: combine into a single mathematical operation:
-
-  * <<textures-sampler-YCbCr-conversion-rangeexpand,Sampler {YCbCr} Range
-    Expansion>>
-  * <<textures-sampler-YCbCr-conversion-modelconversion,Sampler {YCbCr}
-    Model Conversion>>
-
-[[textures-sampler-YCbCr-conversion-rangeexpand]]
-==== Sampler {YCbCr} Range Expansion
-
-Sampler {YCbCr} range expansion is applied to color component values after
-all texel input operations which are not specific to sampler {YCbCr}
-conversion.
-For example, the input values to this stage have been converted using the
-normal <<textures-format-conversion,format conversion>> rules.
-
-Sampler {YCbCr} range expansion is not applied if pname:ycbcrModel is
-ename:VK_SAMPLER_YCBCR_MODEL_CONVERSION_RGB_IDENTITY.
-That is, the shader receives the vector C'~rgba~ as output by the Component
-Swizzle stage without further modification.
-
-For other values of pname:ycbcrModel, range expansion is applied to the
-texel component values output by the <<textures-component-swizzle,Component
-Swizzle>> defined by the pname:components member of
-slink:VkSamplerYcbcrConversionCreateInfo.
-Range expansion applies independently to each component of the image.
-For the purposes of range expansion and {YCbCr} model conversion, the R and
-B components contain color difference (chroma) values and the G component
-contains luma.
-The A component is not modified by sampler {YCbCr} range expansion.
-
-The range expansion to be applied is defined by the pname:ycbcrRange member
-of the slink:VkSamplerYcbcrConversionCreateInfo structure:
-
-  * If pname:ycbcrRange is ename:VK_SAMPLER_YCBCR_RANGE_ITU_FULL, the
-    following transformations are applied:
-+
-[latexmath]
-+++++++++++++++++++
-\begin{aligned}
-Y' &= C'_{rgba}[G] \\
-C_B &= C'_{rgba}[B] - {{2^{(n-1)}}\over{(2^n) - 1}} \\
-C_R &= C'_{rgba}[R] - {{2^{(n-1)}}\over{(2^n) - 1}}
-\end{aligned}
-+++++++++++++++++++
-+
-[NOTE]
-.Note
-====
-These formulae correspond to the "`full range`" encoding in the
-"`Quantization schemes`" chapter of the <<data-format,Khronos Data Format
-Specification>>.
-
-Should any future amendments be made to the ITU specifications from which
-these equations are derived, the formulae used by Vulkan may: also be
-updated to maintain parity.
-====
-  * If pname:ycbcrRange is ename:VK_SAMPLER_YCBCR_RANGE_ITU_NARROW, the
-    following transformations are applied:
-+
-[latexmath]
-+++++++++++++++++++
-\begin{aligned}
-Y' &= {{C'_{rgba}[G] \times (2^n-1) - 16\times 2^{n-8}}\over{219\times 2^{n-8}}} \\
-C_B &= {{C'_{rgba}[B] \times \left(2^n-1\right) - 128\times 2^{n-8}}\over{224\times 2^{n-8}}} \\
-C_R &= {{C'_{rgba}[R] \times \left(2^n-1\right) - 128\times 2^{n-8}}\over{224\times 2^{n-8}}}
-\end{aligned}
-+++++++++++++++++++
-+
-[NOTE]
-.Note
-====
-These formulae correspond to the "`narrow range`" encoding in the
-"`Quantization schemes`" chapter of the <<data-format,Khronos Data Format
-Specification>>.
-====
-  * _n_ is the bit-depth of the components in the format.
-
-The precision of the operations performed during range expansion must: be at
-least that of the source format.
-
-An implementation may: clamp the results of these range expansion operations
-such that Y{prime} falls in the range [0,1], and/or such that C~B~ and C~R~
-fall in the range [-0.5,0.5].
-
-[[textures-sampler-YCbCr-conversion-modelconversion]]
-==== Sampler {YCbCr} Model Conversion
-
-The range-expanded values are converted between color models, according to
-the color model conversion specified in the pname:ycbcrModel member:
-
-ename:VK_SAMPLER_YCBCR_MODEL_CONVERSION_RGB_IDENTITY::
-  The color components are not modified by the color model conversion since
-  they are assumed already to represent the desired color model in which the
-  shader is operating; {YCbCr} range expansion is also ignored.
-ename:VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_IDENTITY::
-  The color components are not modified by the color model conversion and
-  are assumed to be treated as though in {YCbCr} form both in memory and in
-  the shader; {YCbCr} range expansion is applied to the components as for
-  other {YCbCr} models, with the vector (C~R~,Y{prime},C~B~,A) provided to
-  the shader.
-ename:VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_709::
-  The color components are transformed from a {YCbCr} representation to an
-  {RGBprime} representation as described in the "`BT.709 {YCbCr}
-  conversion`" section of the <<data-format,Khronos Data Format
-  Specification>>.
-ename:VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_601::
-  The color components are transformed from a {YCbCr} representation to an
-  {RGBprime} representation as described in the "`BT.601 {YCbCr}
-  conversion`" section of the <<data-format,Khronos Data Format
-  Specification>>.
-ename:VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_2020::
-  The color components are transformed from a {YCbCr} representation to an
-  {RGBprime} representation as described in the "`BT.2020 {YCbCr}
-  conversion`" section of the <<data-format,Khronos Data Format
-  Specification>>.
-
-In this operation, each output component is dependent on each input
-component.
-
-An implementation may: clamp the {RGBprime} results of these conversions to
-the range [0,1].
-
-The precision of the operations performed during model conversion must: be
-at least that of the source format.
-
-The alpha component is not modified by these model conversions.
-
-[NOTE]
-.Note
-====
-Sampling operations in a non-linear color space can introduce color and
-intensity shifts at sharp transition boundaries.
-To avoid this issue, the technically precise color correction sequence
-described in the "`Introduction to Color Conversions`" chapter of the
-<<data-format,Khronos Data Format Specification>> may be performed as
-follows:
-
-  * Calculate the <<textures-normalized-to-unnormalized,unnormalized texel
-    coordinates>> corresponding to the desired sample position.
-  * For a pname:minFilter or pname:magFilter of ename:VK_FILTER_NEAREST:
-    . Calculate (_i_,_j_) for the sample location as described under the
-      "`nearest filtering`" formulae in <<textures-unnormalized-to-integer>>
-    . Calculate the normalized texel coordinates corresponding to these
-      integer coordinates.
-    . Sample using <<samplers-YCbCr-conversion,sampler {YCbCr} conversion>>
-      at this location.
-  * For a pname:minFilter or pname:magFilter of ename:VK_FILTER_LINEAR:
-    . Calculate (_i~[0,1]~_,_j~[0,1]~_) for the sample location as described
-      under the "`linear filtering`" formulae in
-      <<textures-unnormalized-to-integer>>
-    . Calculate the normalized texel coordinates corresponding to these
-      integer coordinates.
-    . Sample using <<samplers-YCbCr-conversion,sampler {YCbCr} conversion>>
-      at each of these locations.
-    . Convert the non-linear A{prime}{RGBprime} outputs of the {YCbCr}
-      conversions to linear ARGB values as described in the "`Transfer
-      Functions`" chapter of the <<data-format,Khronos Data Format
-      Specification>>.
-    . Interpolate the linear ARGB values using the [eq]#{alpha}# and
-      [eq]#{beta}# values described in the "`linear filtering`" section of
-      <<textures-unnormalized-to-integer>> and the equations in
-      <<textures-texel-filtering>>.
-
-The additional calculations and, especially, additional number of sampling
-operations in the ename:VK_FILTER_LINEAR case can be expected to have a
-performance impact compared with using the outputs directly.
-Since the variations from "`correct`" results are subtle for most content,
-the application author should determine whether a more costly implementation
-is strictly necessary.
-
-If pname:chromaFilter, and pname:minFilter or pname:magFilter are both
-ename:VK_FILTER_NEAREST, these operations are redundant and sampling using
-<<samplers-YCbCr-conversion,sampler {YCbCr} conversion>> at the desired
-sample coordinates will produce the "`correct`" results without further
-processing.
-====
-endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
-
-
-== Texel Output Operations
-
-_Texel output instructions_ are SPIR-V image instructions that write to an
-image.
-_Texel output operations_ are a set of steps that are performed on state,
-coordinates, and texel values while processing a texel output instruction,
-and which are common to some or all texel output instructions.
-They include the following steps, which are performed in the listed order:
-
-  * <<textures-output-validation,Validation operations>>
-  ** <<textures-format-validation,Format validation>>
-  ** <<textures-type-validation,Type validation>>
-  ** <<textures-output-coordinate-validation,Coordinate validation>>
-  ** <<textures-output-sparse-validation,Sparse validation>>
-  * <<textures-output-format-conversion,Texel output format conversion>>
-
-[[textures-output-validation]]
-=== Texel Output Validation Operations
-
-_Texel output validation operations_ inspect instruction/image state or
-coordinates, and in certain circumstances cause the write to have no effect.
-There are a series of validations that the texel undergoes.
-
-
-[[textures-format-validation]]
-==== Texel Format Validation
-
-If the image format of the code:OpTypeImage is not
-<<spirvenv-image-formats,compatible>> with the sname:VkImageView's
-pname:format, the write causes the contents of the image's memory to become
-undefined:.
-
-
-[[textures-type-validation]]
-==== Texel Type Validation
-
-If the code:Sampled code:Type of the code:OpTypeImage does not match the
-type defined for the format, as specified in the _SPIR-V Sampled Type_
-column of the <<formats-numericformat>> table, the write causes the value of
-the texel to become undefined:.
-For integer types, if the <<spirvenv-image-signedness,signedness of the
-access>> does not match the signedness of the accessed resource, the write
-causes the value of the texel to become undefined:.
-
-
-[[textures-output-coordinate-validation]]
-=== Integer Texel Coordinate Validation
-
-The integer texel coordinates are validated according to the same rules as
-for texel input <<textures-integer-coordinate-validation,coordinate
-validation>>.
-
-If the texel fails integer texel coordinate validation, then the write has
-no effect.
-
-
-[[textures-output-sparse-validation]]
-=== Sparse Texel Operation
-
-If the texel attempts to write to an unbound region of a sparse image, the
-texel is a sparse unbound texel.
-In such a case, if the
-slink:VkPhysicalDeviceSparseProperties::pname:residencyNonResidentStrict
-property is ename:VK_TRUE, the sparse unbound texel write has no effect.
-If pname:residencyNonResidentStrict is ename:VK_FALSE, the write may: have a
-side effect that becomes visible to other accesses to unbound texels in any
-resource, but will not be visible to any device memory allocated by the
-application.
-
-
-[[textures-output-format-conversion]]
-=== Texel Output Format Conversion
-
-If the image format is sRGB, a linear to sRGB conversion is applied to the
-R, G, and B components as described in the "`sRGB EOTF`" section of the
-<<data-format,Khronos Data Format Specification>>.
-The A component, if present, is unchanged.
-
-Texels then undergo a format conversion from the floating point, signed, or
-unsigned integer type of the texel data to the elink:VkFormat of the image
-view.
-Any unused components are ignored.
-
-Each component is converted based on its type and size (as defined in the
-<<formats-definition,Format Definition>> section for each elink:VkFormat).
-Floating-point outputs are converted as described in
-<<fundamentals-fp-conversion,Floating-Point Format Conversions>> and
-<<fundamentals-fixedconv,Fixed-Point Data Conversion>>.
-Integer outputs are converted such that their value is preserved.
-The converted value of any integer that cannot be represented in the target
-format is undefined:.
-
-
-[[textures-normalized-operations]]
-== Normalized Texel Coordinate Operations
-
-If the image sampler instruction provides normalized texel coordinates, some
-of the following operations are performed.
-
-
-[[textures-projection]]
-=== Projection Operation
-
-For code:Proj image operations, the normalized texel coordinates
-[eq]#(s,t,r,q,a)# and (if present) the [eq]#D~ref~# coordinate are
-transformed as follows:
-
-[latexmath]
-+++++++++++++++++++
-\begin{aligned}
-s       & = \frac{s}{q},       & \text{for 1D, 2D, or 3D image} \\
-\\
-t       & = \frac{t}{q},       & \text{for 2D or 3D image} \\
-\\
-r       & = \frac{r}{q},       & \text{for 3D image} \\
-\\
-D_{\textit{ref}} & = \frac{D_{\textit{ref}}}{q}, & \text{if provided}
-\end{aligned}
-+++++++++++++++++++
-
-
-[[textures-derivative-image-operations]]
-=== Derivative Image Operations
-
-Derivatives are used for LOD selection.
-These derivatives are either implicit (in an code:ImplicitLod image
-instruction in a fragment shader) or explicit (provided explicitly by shader
-to the image instruction in any shader).
-
-For implicit derivatives image instructions, the derivatives of texel
-coordinates are calculated in the same manner as
-<<shaders-derivative-operations, derivative operations>>.
-That is:
-
-[latexmath]
-+++++++++++++++++++
-\begin{aligned}
-\partial{s}/\partial{x} & = dPdx(s), & \partial{s}/\partial{y} & = dPdy(s), & \text{for 1D, 2D, Cube, or 3D image} \\
-\partial{t}/\partial{x} & = dPdx(t), & \partial{t}/\partial{y} & = dPdy(t), & \text{for 2D, Cube, or 3D image} \\
-\partial{r}/\partial{x} & = dPdx(r), & \partial{r}/\partial{y} & = dPdy(r), & \text{for Cube or 3D image}
-\end{aligned}
-+++++++++++++++++++
-
-Partial derivatives not defined above for certain image dimensionalities are
-set to zero.
-
-For explicit LOD image instructions, if the optional: SPIR-V operand
-code:Grad is provided, then the operand values are used for the derivatives.
-The number of components present in each derivative for a given image
-dimensionality matches the number of partial derivatives computed above.
-
-If the optional: SPIR-V operand code:Lod is provided, then derivatives are
-set to zero, the cube map derivative transformation is skipped, and the
-scale factor operation is skipped.
-Instead, the floating point scalar coordinate is directly assigned to
-[eq]#{lambda}~base~# as described in <<textures-level-of-detail-operation,
-Level-of-Detail Operation>>.
-
-ifdef::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
-If the image or sampler object used by an implicit derivative image
-instruction is not uniform across the quad and
-<<limits-quadDivergentImplicitLod,pname:quadDivergentImplicitLod>> is not
-supported, then the derivative and LOD values are undefined:.
-Implicit derivatives are well-defined when the image and sampler and control
-flow are uniform across the quad, even if they diverge between different
-quads.
-
-If <<limits-quadDivergentImplicitLod,pname:quadDivergentImplicitLod>> is
-supported, then derivatives and implicit LOD values are well-defined even if
-the image or sampler object are not uniform within a quad.
-The derivatives are computed as specified above, and the implicit LOD
-calculation proceeds for each shader invocation using its respective image
-and sampler object.
-endif::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
-
-
-=== Cube Map Face Selection and Transformations
-
-For cube map image instructions, the [eq]#(s,t,r)# coordinates are treated
-as a direction vector [eq]#(r~x~,r~y~,r~z~)#.
-The direction vector is used to select a cube map face.
-The direction vector is transformed to a per-face texel coordinate system
-[eq]#(s~face~,t~face~)#, The direction vector is also used to transform the
-derivatives to per-face derivatives.
-
-
-=== Cube Map Face Selection
-
-The direction vector selects one of the cube map's faces based on the
-largest magnitude coordinate direction (the major axis direction).
-Since two or more coordinates can: have identical magnitude, the
-implementation must: have rules to disambiguate this situation.
-
-The rules should: have as the first rule that [eq]#r~z~# wins over
-[eq]#r~y~# and [eq]#r~x~#, and the second rule that [eq]#r~y~# wins over
-[eq]#r~x~#.
-An implementation may: choose other rules, but the rules must: be
-deterministic and depend only on [eq]#(r~x~,r~y~,r~z~)#.
-
-The layer number (corresponding to a cube map face), the coordinate
-selections for [eq]#s~c~#, [eq]#t~c~#, [eq]#r~c~#, and the selection of
-derivatives, are determined by the major axis direction as specified in the
-following two tables.
-
-.Cube map face and coordinate selection
-[width="75%",frame="all",options="header"]
-|====
-| Major Axis Direction | Layer Number | Cube Map Face | [eq]#s~c~#  | [eq]#t~c~#  | [eq]#r~c~#
-| [eq]#+r~x~#          | [eq]#0#      | Positive X    | [eq]#-r~z~# | [eq]#-r~y~# | [eq]#r~x~#
-| [eq]#-r~x~#          | [eq]#1#      | Negative X    | [eq]#+r~z~# | [eq]#-r~y~# | [eq]#r~x~#
-| [eq]#+r~y~#          | [eq]#2#      | Positive Y    | [eq]#+r~x~# | [eq]#+r~z~# | [eq]#r~y~#
-| [eq]#-r~y~#          | [eq]#3#      | Negative Y    | [eq]#+r~x~# | [eq]#-r~z~# | [eq]#r~y~#
-| [eq]#+r~z~#          | [eq]#4#      | Positive Z    | [eq]#+r~x~# | [eq]#-r~y~# | [eq]#r~z~#
-| [eq]#-r~z~#          | [eq]#5#      | Negative Z    | [eq]#-r~x~# | [eq]#-r~y~# | [eq]#r~z~#
-|====
-
-
-.Cube map derivative selection
-[width="75%",frame="all",options="header"]
-|====
-| Major Axis Direction | [eq]#{partial}s~c~ / {partial}x# | [eq]#{partial}s~c~ / {partial}y# | [eq]#{partial}t~c~ / {partial}x# | [eq]#{partial}t~c~ / {partial}y# | [eq]#{partial}r~c~ / {partial}x# | [eq]#{partial}r~c~ / {partial}y#
-
-| [eq]#+r~x~#
-| [eq]#-{partial}r~z~ / {partial}x# | [eq]#-{partial}r~z~ / {partial}y#
-| [eq]#-{partial}r~y~ / {partial}x# | [eq]#-{partial}r~y~ / {partial}y#
-| [eq]#+{partial}r~x~ / {partial}x# | [eq]#+{partial}r~x~ / {partial}y#
-
-| [eq]#-r~x~#
-| [eq]#+{partial}r~z~ / {partial}x# | [eq]#+{partial}r~z~ / {partial}y#
-| [eq]#-{partial}r~y~ / {partial}x# | [eq]#-{partial}r~y~ / {partial}y#
-| [eq]#-{partial}r~x~ / {partial}x# | [eq]#-{partial}r~x~ / {partial}y#
-
-| [eq]#+r~y~#
-| [eq]#+{partial}r~x~ / {partial}x# | [eq]#+{partial}r~x~ / {partial}y#
-| [eq]#+{partial}r~z~ / {partial}x# | [eq]#+{partial}r~z~ / {partial}y#
-| [eq]#+{partial}r~y~ / {partial}x# | [eq]#+{partial}r~y~ / {partial}y#
-
-| [eq]#-r~y~#
-| [eq]#+{partial}r~x~ / {partial}x# | [eq]#+{partial}r~x~ / {partial}y#
-| [eq]#-{partial}r~z~ / {partial}x# | [eq]#-{partial}r~z~ / {partial}y#
-| [eq]#-{partial}r~y~ / {partial}x# | [eq]#-{partial}r~y~ / {partial}y#
-
-| [eq]#+r~z~#
-| [eq]#+{partial}r~x~ / {partial}x# | [eq]#+{partial}r~x~ / {partial}y#
-| [eq]#-{partial}r~y~ / {partial}x# | [eq]#-{partial}r~y~ / {partial}y#
-| [eq]#+{partial}r~z~ / {partial}x# | [eq]#+{partial}r~z~ / {partial}y#
-
-| [eq]#-r~z~#
-| [eq]#-{partial}r~x~ / {partial}x# | [eq]#-{partial}r~x~ / {partial}y#
-| [eq]#-{partial}r~y~ / {partial}x# | [eq]#-{partial}r~y~ / {partial}y#
-| [eq]#-{partial}r~z~ / {partial}x# | [eq]#-{partial}r~z~ / {partial}y#
-|====
-
-
-=== Cube Map Coordinate Transformation
-
-[latexmath]
-++++++++++++++++++++++++
-\begin{aligned}
-s_{\textit{face}} & =
-    \frac{1}{2} \times \frac{s_c}{|r_c|} + \frac{1}{2} \\
-t_{\textit{face}} & =
-    \frac{1}{2} \times \frac{t_c}{|r_c|} + \frac{1}{2} \\
-\end{aligned}
-++++++++++++++++++++++++
-
-
-=== Cube Map Derivative Transformation
-
-[latexmath]
-++++++++++++++++++++++++
-\begin{aligned}
-\frac{\partial{s_{\textit{face}}}}{\partial{x}} &=
-    \frac{\partial}{\partial{x}} \left ( \frac{1}{2} \times \frac{s_{c}}{|r_{c}|}
-    + \frac{1}{2}\right ) \\
-\frac{\partial{s_{\textit{face}}}}{\partial{x}} &=
-    \frac{1}{2} \times \frac{\partial}{\partial{x}}
-    \left ( \frac{s_{c}}{|r_{c}|}  \right ) \\
-\frac{\partial{s_{\textit{face}}}}{\partial{x}} &=
-    \frac{1}{2} \times
-    \left (
-    \frac{
-      |r_{c}| \times \partial{s_c}/\partial{x}
-      -s_c \times {\partial{r_{c}}}/{\partial{x}}}
-    {\left ( r_{c} \right )^2}
-    \right )
-\end{aligned}
-++++++++++++++++++++++++
-
-[latexmath]
-++++++++++++++++++++++++
-\begin{aligned}
-\frac{\partial{s_{\textit{face}}}}{\partial{y}} &=
-    \frac{1}{2} \times
-    \left (
-    \frac{
-      |r_{c}| \times \partial{s_c}/\partial{y}
-      -s_c \times {\partial{r_{c}}}/{\partial{y}}}
-    {\left ( r_{c} \right )^2}
-    \right )\\
-\frac{\partial{t_{\textit{face}}}}{\partial{x}} &=
-    \frac{1}{2} \times
-    \left (
-    \frac{
-      |r_{c}| \times \partial{t_c}/\partial{x}
-      -t_c \times {\partial{r_{c}}}/{\partial{x}}}
-    {\left ( r_{c} \right )^2}
-    \right ) \\
-\frac{\partial{t_{\textit{face}}}}{\partial{y}} &=
-    \frac{1}{2} \times
-    \left (
-    \frac{
-       |r_{c}| \times \partial{t_c}/\partial{y}
-      -t_c \times {\partial{r_{c}}}/{\partial{y}}}
-    {\left ( r_{c} \right )^2}
-    \right )
-\end{aligned}
-++++++++++++++++++++++++
-
-ifdef::editing-notes[]
-[NOTE]
-.editing-note
-====
-(Bill) Note that we never revisited ARB_texture_cubemap after we introduced
-dependent texture fetches (ARB_fragment_program and ARB_fragment_shader).
-
-The derivatives of [eq]#s~face~# and [eq]#t~face~# are only valid for
-non-dependent texture fetches (pre OpenGL 2.0).
-====
-endif::editing-notes[]
-
-
-[[textures-lod-and-scale-factor]]
-=== Scale Factor Operation, Level-of-Detail Operation and Image Level(s) Selection
-
-LOD selection can: be either explicit (provided explicitly by the image
-instruction) or implicit (determined from a scale factor calculated from the
-derivatives).
-The LOD must: be computed with pname:mipmapPrecisionBits of accuracy.
-
-
-[[textures-scale-factor]]
-==== Scale Factor Operation
-
-The magnitude of the derivatives are calculated by:
-
-  {empty}:: [eq]#m~ux~ = {vert}{partial}s/{partial}x{vert} {times} w~base~#
-  {empty}:: [eq]#m~vx~ = {vert}{partial}t/{partial}x{vert} {times} h~base~#
-  {empty}:: [eq]#m~wx~ = {vert}{partial}r/{partial}x{vert} {times} d~base~#
-
-  {empty}:: [eq]#m~uy~ = {vert}{partial}s/{partial}y{vert} {times} w~base~#
-  {empty}:: [eq]#m~vy~ = {vert}{partial}t/{partial}y{vert} {times} h~base~#
-  {empty}:: [eq]#m~wy~ = {vert}{partial}r/{partial}y{vert} {times} d~base~#
-
-
-where:
-
-  {empty}:: [eq]#{partial}t/{partial}x = {partial}t/{partial}y = 0# (for 1D
-            images)
-  {empty}:: [eq]#{partial}r/{partial}x = {partial}r/{partial}y = 0# (for 1D,
-            2D or Cube images)
-
-and:
-
-  {empty}:: [eq]#w~base~ = image.w#
-  {empty}:: [eq]#h~base~ = image.h#
-  {empty}:: [eq]#d~base~ = image.d#
-
-(for the pname:baseMipLevel, from the image descriptor).
-
-ifdef::VK_NV_corner_sampled_image[]
-
-For corner-sampled images, the [eq]#w~base~#, [eq]#h~base~#, and
-[eq]#d~base~# are instead:
-
-  {empty}:: [eq]#w~base~ = image.w - 1#
-  {empty}:: [eq]#h~base~ = image.h - 1#
-  {empty}:: [eq]#d~base~ = image.d - 1#
-
-endif::VK_NV_corner_sampled_image[]
-
-A point sampled in screen space has an elliptical footprint in texture
-space.
-The minimum and maximum scale factors [eq]#({rho}~min~, {rho}~max~)# should:
-be the minor and major axes of this ellipse.
-
-The _scale factors_ [eq]#{rho}~x~# and [eq]#{rho}~y~#, calculated from the
-magnitude of the derivatives in x and y, are used to compute the minimum and
-maximum scale factors.
-
-[eq]#{rho}~x~# and [eq]#{rho}~y~# may: be approximated with functions
-[eq]#f~x~# and [eq]#f~y~#, subject to the following constraints:
-
-[latexmath]
-++++++++++++++++++++++++
-\begin{aligned}
-& f_x \text{\ is\ continuous\ and\ monotonically\ increasing\ in\ each\ of\ }
-    m_{ux},
-    m_{vx}, \text{\ and\ }
-    m_{wx} \\
-& f_y \text{\ is\ continuous\ and\ monotonically\ increasing\ in\ each\ of\ }
-    m_{uy},
-    m_{vy}, \text{\ and\ }
-    m_{wy}
-\end{aligned}
-++++++++++++++++++++++++
-
-[latexmath]
-++++++++++++++++++++++++
-\begin{aligned}
-\max(|m_{ux}|, |m_{vx}|, |m_{wx}|) \leq f_{x}
-\leq \sqrt{2} (|m_{ux}| + |m_{vx}| + |m_{wx}|) \\
-\max(|m_{uy}|, |m_{vy}|, |m_{wy}|) \leq f_{y}
-\leq \sqrt{2} (|m_{uy}| + |m_{vy}| + |m_{wy}|)
-\end{aligned}
-++++++++++++++++++++++++
-
-
-ifdef::editing-notes[]
-[NOTE]
-.editing-note
-====
-(Bill) For reviewers only - anticipating questions.
-
-We only support implicit derivatives for normalized texel coordinates.
-
-So we are documenting the derivatives in s,t,r (normalized texel
-coordinates) rather than u,v,w (unnormalized texel coordinates) as in OpenGL
-and OpenGL ES specifications.
-(I know, u,v,w is the way it has been documented since OpenGL V1.0.)
-
-Also there is no reason to have conditional application of [eq]#w~base~,
-h~base~, d~base~# for rectangle textures either, since they do not support
-implicit derivatives.
-====
-endif::editing-notes[]
-
-
-The minimum and maximum scale factors [eq]#({rho}~min~,{rho}~max~)# are
-determined by:
-
-  {empty}:: [eq]#{rho}~max~ = max({rho}~x~, {rho}~y~)#
-  {empty}:: [eq]#{rho}~min~ = min({rho}~x~, {rho}~y~)#
-
-The ratio of anisotropy is determined by:
-
-  {empty}:: [eq]#{eta} = min({rho}~max~/{rho}~min~, max~Aniso~)#
-
-where:
-
-  {empty}:: [eq]#sampler.max~Aniso~ = pname:maxAnisotropy# (from sampler
-            descriptor)
-  {empty}:: [eq]#limits.max~Aniso~ = pname:maxSamplerAnisotropy# (from
-            physical device limits)
-  {empty}:: [eq]#max~Aniso~ = min(sampler.max~Aniso~, limits.max~Aniso~)#
-
-If [eq]#{rho}~max~ = {rho}~min~ = 0#, then all the partial derivatives are
-zero, the fragment's footprint in texel space is a point, and [eq]#{eta}#
-should: be treated as 1.
-If [eq]#{rho}~max~ {neq} 0# and [eq]#{rho}~min~ = 0# then all partial
-derivatives along one axis are zero, the fragment's footprint in texel space
-is a line segment, and [eq]#{eta}# should: be treated as [eq]#max~Aniso~#.
-However, anytime the footprint is small in texel space the implementation
-may: use a smaller value of [eq]#{eta}#, even when [eq]#{rho}~min~# is zero
-or close to zero.
-If either slink:VkPhysicalDeviceFeatures::pname:samplerAnisotropy or
-slink:VkSamplerCreateInfo::pname:anisotropyEnable are ename:VK_FALSE,
-[eq]#max~Aniso~# is set to 1.
-
-If [eq]#{eta} = 1#, sampling is isotropic.
-If [eq]#{eta} > 1#, sampling is anisotropic.
-
-The sampling rate ([eq]#N#) is derived as:
-
-  {empty}:: [eq]#N = {lceil}{eta}{rceil}#
-
-An implementation may: round [eq]#N# up to the nearest supported sampling
-rate.
-An implementation may: use the value of [eq]#N# as an approximation of
-[eq]#{eta}#.
-
-
-[[textures-level-of-detail-operation]]
-==== Level-of-Detail Operation
-
-The LOD parameter [eq]#{lambda}# is computed as follows:
-
-[latexmath]
-++++++++++++++++++++++++
-\begin{aligned}
-\lambda_{base}(x,y) & =
-  \begin{cases}
-    shaderOp.Lod                                    & \text{(from optional SPIR-V operand)} \\
-    \log_2 \left ( \frac{\rho_{max}}{\eta} \right ) & \text{otherwise}
-  \end{cases} \\
-\lambda'(x,y)       & = \lambda_{base} + \mathbin{clamp}(sampler.bias + shaderOp.bias,-maxSamplerLodBias,maxSamplerLodBias) \\
-\lambda             & =
-  \begin{cases}
-    lod_{max}, & \lambda' > lod_{max} \\
-    \lambda',  & lod_{min} \leq \lambda' \leq lod_{max} \\
-    lod_{min}, & \lambda' < lod_{min} \\
-    \textit{undefined}, & lod_{min} > lod_{max}
-  \end{cases}
-\end{aligned}
-++++++++++++++++++++++++
-
-where:
-
-[latexmath]
-++++++++++++++++++++++++
-\begin{aligned}
-sampler.bias       & = mipLodBias & \text{(from sampler descriptor)} \\
-shaderOp.bias      & =
-  \begin{cases}
-    Bias & \text{(from optional SPIR-V operand)} \\
-    0    & \text{otherwise}
-  \end{cases} \\
-sampler.lod_{min}  & = minLod & \text{(from sampler descriptor)} \\
-shaderOp.lod_{min} & =
-  \begin{cases}
-    MinLod & \text{(from optional SPIR-V operand)} \\
-    0      & \text{otherwise}
-  \end{cases} \\
-\\
-lod_{min}          & = \max(sampler.lod_{min}, shaderOp.lod_{min}) \\
-lod_{max}          & = maxLod & \text{(from sampler descriptor)}
-\end{aligned}
-++++++++++++++++++++++++
-
-and [eq]#maxSamplerLodBias# is the value of the slink:VkPhysicalDeviceLimits
-feature <<limits-maxSamplerLodBias,pname:maxSamplerLodBias>>.
-
-
-[[textures-image-level-selection]]
-==== Image Level(s) Selection
-
-The image level(s) [eq]#d#, [eq]#d~hi~#, and [eq]#d~lo~# which texels are
-read from are determined by an image-level parameter [eq]#d~l~#, which is
-computed based on the LOD parameter, as follows:
-
-[latexmath]
-++++++++++++++++++++++++
-\begin{aligned}
-d_{l} =
-  \begin{cases}
-    nearest(d'),  & \text{mipmapMode is VK\_SAMPLER\_MIPMAP\_MODE\_NEAREST} \\
-    d',           & \text{otherwise}
-  \end{cases}
-\end{aligned}
-++++++++++++++++++++++++
-
-where:
-
-[latexmath]
-++++++++++++++++++++++++
-\begin{aligned}
-d' = level_{base} + \text{clamp}(\lambda, 0, q)
-\end{aligned}
-++++++++++++++++++++++++
-
-[latexmath]
-++++++++++++++++++++++++
-\begin{aligned}
-nearest(d') & =
-  \begin{cases}
-    \left \lceil d' + 0.5\right \rceil - 1, &
-        \text{preferred} \\
-    \left \lfloor d' + 0.5\right \rfloor,   &
-        \text{alternative}
-  \end{cases}
-\end{aligned}
-++++++++++++++++++++++++
-
-and:
-
-  {empty}:: [eq]#level~base~ = pname:baseMipLevel#
-  {empty}:: [eq]#q = pname:levelCount - 1#
-
-pname:baseMipLevel and pname:levelCount are taken from the
-pname:subresourceRange of the image view.
-
-If the sampler's pname:mipmapMode is ename:VK_SAMPLER_MIPMAP_MODE_NEAREST,
-then the level selected is [eq]#d = d~l~#.
-
-If the sampler's pname:mipmapMode is ename:VK_SAMPLER_MIPMAP_MODE_LINEAR,
-two neighboring levels are selected:
-
-[latexmath]
-++++++++++++++++++++++++
-\begin{aligned}
-d_{hi} & = \left\lfloor d_{l} \right\rfloor \\
-d_{lo} & = min( d_{hi} + 1, q ) \\
-\delta & = d_{l} - d_{hi}
-\end{aligned}
-++++++++++++++++++++++++
-
-[eq]#{delta}# is the fractional value, quantized to the number of
-<<limits-mipmapPrecisionBits,mipmap precision bits>>, used for
-<<textures-texel-filtering, linear filtering>> between levels.
-
-[[textures-normalized-to-unnormalized]]
-=== (s,t,r,q,a) to (u,v,w,a) Transformation
-
-The normalized texel coordinates are scaled by the image level dimensions
-and the array layer is selected.
-
-This transformation is performed once for each level used in
-<<textures-texel-filtering,filtering>> (either [eq]#d#, or [eq]#d~hi~# and
-[eq]#d~lo~#).
-
-[latexmath]
-++++++++++++++++++++++++
-\begin{aligned}
-u(x,y) & = s(x,y) \times width_{scale} + \Delta_i\\
-v(x,y) & =
-  \begin{cases}
-    0                         & \text{for 1D images} \\
-    t(x,y) \times height_{scale} + \Delta_j & \text{otherwise}
-  \end{cases} \\
-w(x,y) & =
-  \begin{cases}
-    0                         & \text{for 2D or Cube images} \\
-    r(x,y) \times depth_{scale}  + \Delta_k & \text{otherwise}
-  \end{cases} \\
-\\
-a(x,y) & =
-  \begin{cases}
-    a(x,y)                    & \text{for array images} \\
-    0                         & \text{otherwise}
-  \end{cases}
-\end{aligned}
-++++++++++++++++++++++++
-
-where:
-
-  {empty}:: [eq]#width~scale~ = width~level~#
-  {empty}:: [eq]#height~scale~ = height~level~#
-  {empty}:: [eq]#depth~scale~ = depth~level~#
-
-ifdef::VK_NV_corner_sampled_image[]
-for conventional images, and:
-
-  {empty}:: [eq]#width~scale~ = width~level~ - 1#
-  {empty}:: [eq]#height~scale~ = height~level~ - 1#
-  {empty}:: [eq]#depth~scale~ = depth~level~ - 1#
-
-for corner-sampled images.
-endif::VK_NV_corner_sampled_image[]
-
-and where [eq]#({DeltaUpper}~i~, {DeltaUpper}~j~, {DeltaUpper}~k~)# are
-taken from the image instruction if it includes a code:ConstOffset or
-code:Offset operand, otherwise they are taken to be zero.
-
-
-Operations then proceed to Unnormalized Texel Coordinate Operations.
-
-
-== Unnormalized Texel Coordinate Operations
-
-
-[[textures-unnormalized-to-integer]]
-=== (u,v,w,a) to (i,j,k,l,n) Transformation And Array Layer Selection
-
-The unnormalized texel coordinates are transformed to integer texel
-coordinates relative to the selected mipmap level.
-
-The layer index [eq]#l# is computed as:
-
-  {empty}:: [eq]#l = clamp(RNE(a), 0, pname:layerCount - 1) {plus}
-            pname:baseArrayLayer#
-
-where pname:layerCount is the number of layers in the image subresource
-range of the image view, pname:baseArrayLayer is the first layer from the
-subresource range, and where:
-
-[latexmath]
-++++++++++++++++++++++++
-\begin{aligned}
-\mathbin{RNE}(a) & =
-  \begin{cases}
-    \mathbin{roundTiesToEven}(a)                  & \text{preferred, from IEEE Std 754-2008 Floating-Point Arithmetic} \\
-    \left \lfloor a + 0.5 \right \rfloor & \text{alternative}
-  \end{cases}
-\end{aligned}
-++++++++++++++++++++++++
-
-The sample index [eq]#n# is assigned the value 0.
-
-Nearest filtering (ename:VK_FILTER_NEAREST) computes the integer texel
-coordinates that the unnormalized coordinates lie within:
-
-[latexmath]
-++++++++++++++++++++++++
-\begin{aligned}
-i &= \left\lfloor u + shift \right\rfloor \\
-j &= \left\lfloor v + shift \right\rfloor \\
-k &= \left\lfloor w + shift \right\rfloor
-\end{aligned}
-++++++++++++++++++++++++
-where:
-
-  {empty}:: [eq]#shift = 0.0#
-
-ifdef::VK_NV_corner_sampled_image[]
-for conventional images, and:
-
-  {empty}:: [eq]#shift = 0.5#
-
-for corner-sampled images.
-endif::VK_NV_corner_sampled_image[]
-
-Linear filtering (ename:VK_FILTER_LINEAR) computes a set of neighboring
-coordinates which bound the unnormalized coordinates.
-The integer texel coordinates are combinations of [eq]#i~0~# or [eq]#i~1~#,
-[eq]#j~0~# or [eq]#j~1~#, [eq]#k~0~# or [eq]#k~1~#, as well as weights
-[eq]#{alpha}, {beta}#, and [eq]#{gamma}#.
-
-[latexmath]
-++++++++++++++++++++++++
-\begin{aligned}
-i_0 &= \left\lfloor u - shift \right\rfloor \\
-i_1 &= i_0 + 1 \\
-j_0 &= \left\lfloor v - shift \right\rfloor \\
-j_1 &= j_0 + 1 \\
-k_0 &= \left\lfloor w - shift \right\rfloor \\
-k_1 &= k_0 + 1
-\end{aligned}
-++++++++++++++++++++++++
-
-[latexmath]
-++++++++++++++++++++++++
-\begin{aligned}
-\alpha &= \mathbin{frac}\left(u - shift\right)  \\[1em]
-\beta &= \mathbin{frac}\left(v - shift\right)  \\[1em]
-\gamma &= \mathbin{frac}\left(w - shift\right)
-\end{aligned}
-++++++++++++++++++++++++
-
-where:
-
-  {empty}:: [eq]#shift = 0.5#
-
-ifdef::VK_NV_corner_sampled_image[]
-for conventional images, and:
-
-  {empty}:: [eq]#shift = 0.0#
-
-for corner-sampled images,
-endif::VK_NV_corner_sampled_image[]
-and where:
-
-[latexmath]
-++++++++++++++++++++++++
-\mathbin{frac}(x) = x -  \left\lfloor x \right\rfloor
-++++++++++++++++++++++++
-where the number of fraction bits retained is specified by
-sname:VkPhysicalDeviceLimits::pname:subTexelPrecisionBits.
-
-ifdef::VK_IMG_filter_cubic,VK_EXT_filter_cubic[]
-Cubic filtering (ename:VK_FILTER_CUBIC_EXT) computes a set of neighboring
-coordinates which bound the unnormalized coordinates.
-The integer texel coordinates are combinations of [eq]#i~0~#, [eq]#i~1~#,
-[eq]#i~2~# or [eq]#i~3~#, [eq]#j~0~#, [eq]#j~1~#, [eq]#j~2~# or [eq]#j~3~#,
-ifndef::VK_EXT_filter_cubic[]
-as well as weights [eq]#{alpha}# and [eq]#{beta}#.
-endif::VK_EXT_filter_cubic[]
-ifdef::VK_EXT_filter_cubic[]
-[eq]#k~0~#, [eq]#k~1~#, [eq]#k~2~# or [eq]#k~3~#, as well as weights
-[eq]#{alpha}#, [eq]#{beta}#, and [eq]#{gamma}#.
-endif::VK_EXT_filter_cubic[]
-
-ifndef::VK_EXT_filter_cubic[]
-[latexmath]
-++++++++++++++++++++++++
-\begin{aligned}
-i_{0}  & = {\left \lfloor {u - \frac{3}{2}} \right \rfloor} & i_{1} & = i_{0} + 1 & i_{2} & = i_{1} + 1 & i_{3} & = i_{2} + 1 \\[1em]
-j_{0}  & = {\left \lfloor {v - \frac{3}{2}} \right \rfloor} & j_{1} & = j_{0} + 1 & j_{2} & = j_{1} + 1 & j_{3} & = j_{2} + 1
-\end{aligned}
-++++++++++++++++++++++++
-
-[latexmath]
-++++++++++++++++++++++++
-\begin{aligned}
-alpha &= \mathbin{frac}\left(u - \frac{1}{2}\right)  \\[1em]
-\beta &= \mathbin{frac}\left(v - \frac{1}{2}\right)
-\end{aligned}
-++++++++++++++++++++++++
-
-endif::VK_EXT_filter_cubic[]
-
-ifdef::VK_EXT_filter_cubic[]
-[latexmath]
-++++++++++++++++++++++++
-\begin{aligned}
-i_{0}  & = {\left \lfloor {u - \frac{3}{2}} \right \rfloor} & i_{1} & = i_{0} + 1 & i_{2} & = i_{1} + 1 & i_{3} & = i_{2} + 1 \\[1em]
-j_{0}  & = {\left \lfloor {v - \frac{3}{2}} \right \rfloor} & j_{1} & = j_{0} + 1 & j_{2} & = j_{1} + 1 & j_{3} & = j_{2} + 1 \\[1em]
-k_{0}  & = {\left \lfloor {w - \frac{3}{2}} \right \rfloor} & k_{1} & = k_{0} + 1 & k_{2} & = k_{1} + 1 & k_{3} & = k_{2} + 1
-\end{aligned}
-++++++++++++++++++++++++
-
-[latexmath]
-++++++++++++++++++++++++
-\begin{aligned}
-\alpha &= \mathbin{frac}\left(u - \frac{1}{2}\right)  \\[1em]
-\beta &= \mathbin{frac}\left(v - \frac{1}{2}\right)  \\[1em]
-\gamma &= \mathbin{frac}\left(w - \frac{1}{2}\right)
-\end{aligned}
-++++++++++++++++++++++++
-
-endif::VK_EXT_filter_cubic[]
-
-where:
-
-[latexmath]
-++++++++++++++++++++++++
-\mathbin{frac}(x) = x -  \left\lfloor x \right\rfloor
-++++++++++++++++++++++++
-
-where the number of fraction bits retained is specified by
-sname:VkPhysicalDeviceLimits::pname:subTexelPrecisionBits.
-endif::VK_IMG_filter_cubic,VK_EXT_filter_cubic[]
-
-
-[[textures-integer-coordinate-operations]]
-== Integer Texel Coordinate Operations
-
-ifdef::VK_AMD_shader_image_load_store_lod[]
-Integer texel coordinate operations may: supply a LOD which texels are to be
-read from or written to using the optional SPIR-V operand code:Lod.
-endif::VK_AMD_shader_image_load_store_lod[]
-ifndef::VK_AMD_shader_image_load_store_lod[]
-The code:OpImageFetch and code:OpImageFetchSparse SPIR-V instructions may:
-supply a LOD from which texels are to be fetched using the optional SPIR-V
-operand code:Lod.
-Other integer-coordinate operations must: not.
-endif::VK_AMD_shader_image_load_store_lod[]
-If the code:Lod is provided then it must: be an integer.
-
-The image level selected is:
-[latexmath]
-++++++++++++++++++++++++
-\begin{aligned}
-d & = level_{base} +
-  \begin{cases}
-    Lod & \text{(from optional SPIR-V operand)} \\
-    0   & \text{otherwise}
-  \end{cases} \\
-\end{aligned}
-++++++++++++++++++++++++
-
-If [eq]#d# does not lie in the range [eq]#[pname:baseMipLevel,
-pname:baseMipLevel {plus} pname:levelCount)# then any values fetched are
-ifdef::VK_EXT_robustness2[]
-zero if <<features-robustImageAccess2,pname:robustImageAccess2>> is enabled,
-otherwise are
-endif::VK_EXT_robustness2[]
-undefined:, and any writes (if supported) are discarded.
-
-
-[[textures-sample-operations]]
-== Image Sample Operations
-
-
-[[textures-wrapping-operation]]
-=== Wrapping Operation
-
-code:Cube images ignore the wrap modes specified in the sampler.
-Instead, if ename:VK_FILTER_NEAREST is used within a mip level then
-ename:VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE is used, and if
-ename:VK_FILTER_LINEAR is used within a mip level then sampling at the edges
-is performed as described earlier in the <<textures-cubemapedge,Cube map
-edge handling>> section.
-
-The first integer texel coordinate i is transformed based on the
-pname:addressModeU parameter of the sampler.
-
-[latexmath]
-++++++++++++++++++++++++
-\begin{aligned}
-i &=
-  \begin{cases}
-    i \bmod size                                & \text{for repeat} \\
-    (size - 1) - \mathbin{mirror}
-        ((i \bmod (2 \times size)) - size)      & \text{for mirrored repeat} \\
-    \mathbin{clamp}(i,0,size-1)                  & \text{for clamp to edge} \\
-    \mathbin{clamp}(i,-1,size)                   & \text{for clamp to border} \\
-    \mathbin{clamp}(\mathbin{mirror}(i),0,size-1) & \text{for mirror clamp to edge}
-  \end{cases}
-\end{aligned}
-++++++++++++++++++++++++
-
-where:
-
-[latexmath]
-++++++++++++++++++++++++
-\begin{aligned}
-& \mathbin{mirror}(n) =
-  \begin{cases}
-    n      & \text{for}\  n \geq 0 \\
-    -(1+n) & \text{otherwise}
-  \end{cases}
-\end{aligned}
-++++++++++++++++++++++++
-
-[eq]#j# (for 2D and Cube image) and [eq]#k# (for 3D image) are similarly
-transformed based on the pname:addressModeV and pname:addressModeW
-parameters of the sampler, respectively.
-
-
-[[textures-gather]]
-=== Texel Gathering
-
-SPIR-V instructions with code:Gather in the name return a vector derived
-from 4 texels in the base level of the image view.
-The rules for the ename:VK_FILTER_LINEAR minification filter are applied to
-identify the four selected texels.
-Each texel is then converted to an RGBA value according to
-<<textures-conversion-to-rgba,conversion to RGBA>> and then
-<<textures-component-swizzle,swizzled>>.
-A four-component vector is then assembled by taking the component indicated
-by the code:Component value in the instruction from the swizzled color value
-of the four texels.
-If the operation does not use the code:ConstOffsets image operand then the
-four texels form the 2 {times} 2 rectangle used for texture filtering:
-
-[latexmath]
-++++++++++++++++++++++++
-\begin{aligned}
-\tau[R] &= \tau_{i0j1}[level_{base}][comp] \\
-\tau[G] &= \tau_{i1j1}[level_{base}][comp] \\
-\tau[B] &= \tau_{i1j0}[level_{base}][comp] \\
-\tau[A] &= \tau_{i0j0}[level_{base}][comp]
-\end{aligned}
-++++++++++++++++++++++++
-
-If the operation does use the code:ConstOffsets image operand then the
-offsets allow a custom filter to be defined:
-
-[latexmath]
-++++++++++++++++++++++++
-\begin{aligned}
-\tau[R] &= \tau_{i0j0 + \Delta_0}[level_{base}][comp] \\
-\tau[G] &= \tau_{i0j0 + \Delta_1}[level_{base}][comp] \\
-\tau[B] &= \tau_{i0j0 + \Delta_2}[level_{base}][comp] \\
-\tau[A] &= \tau_{i0j0 + \Delta_3}[level_{base}][comp]
-\end{aligned}
-++++++++++++++++++++++++
-
-where:
-
-[latexmath]
-++++++++++++++++++++++++
-\begin{aligned}
-\tau[level_{base}][comp] &=
-  \begin{cases}
-    \tau[level_{base}][R], & \text{for}\  comp = 0 \\
-    \tau[level_{base}][G], & \text{for}\  comp = 1 \\
-    \tau[level_{base}][B], & \text{for}\  comp = 2 \\
-    \tau[level_{base}][A], & \text{for}\  comp = 3
-  \end{cases}\\
-comp & \,\text{from SPIR-V operand Component}
-\end{aligned}
-++++++++++++++++++++++++
-
-ifdef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
-code:OpImage*Gather must: not be used on a sampled image with
-<<samplers-YCbCr-conversion,sampler {YCbCr} conversion>> enabled.
-endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
-
-
-[[textures-texel-filtering]]
-=== Texel Filtering
-
-Texel filtering is first performed for each level (either [eq]#d# or
-[eq]#d~hi~# and [eq]#d~lo~#).
-
-If [eq]#{lambda}# is less than or equal to zero, the texture is said to be
-_magnified_, and the filter mode within a mip level is selected by the
-pname:magFilter in the sampler.
-If [eq]#{lambda}# is greater than zero, the texture is said to be
-_minified_, and the filter mode within a mip level is selected by the
-pname:minFilter in the sampler.
-
-[[textures-texel-nearest-filtering]]
-==== Texel Nearest Filtering
-
-Within a mip level, ename:VK_FILTER_NEAREST filtering selects a single value
-using the [eq]#(i, j, k)# texel coordinates, with all texels taken from
-layer l.
-
-[latexmath]
-++++++++++++++++++++++++
-\begin{aligned}
-\tau[level] &=
-  \begin{cases}
-     \tau_{ijk}[level], & \text{for 3D image} \\
-     \tau_{ij}[level],  & \text{for 2D or Cube image} \\
-     \tau_{i}[level],   & \text{for 1D image}
-   \end{cases}
-\end{aligned}
-++++++++++++++++++++++++
-
-[[textures-texel-linear-filtering]]
-==== Texel Linear Filtering
-
-Within a mip level, ename:VK_FILTER_LINEAR filtering combines 8 (for 3D), 4
-(for 2D or Cube), or 2 (for 1D) texel values, together with their linear
-weights.
-The linear weights are derived from the fractions computed earlier:
-
-[latexmath]
-
-++++++++++++++++++++++++
-\begin{aligned}
-w_{i_0} &= (1-\alpha) \\
-w_{i_1} &= (\alpha)   \\
-w_{j_0} &= (1-\beta)  \\
-w_{j_1} &= (\beta)    \\
-w_{k_0} &= (1-\gamma) \\
-w_{k_1} &= (\gamma)
-\end{aligned}
-++++++++++++++++++++++++
-
-ifndef::VK_VERSION_1_2,VK_EXT_sampler_filter_minmax[]
-The values of multiple texels, together with their weights, are combined
-using a weighted average to produce a filtered value:
-endif::VK_VERSION_1_2,VK_EXT_sampler_filter_minmax[]
-
-ifdef::VK_VERSION_1_2,VK_EXT_sampler_filter_minmax[]
-The values of multiple texels, together with their weights, are combined to
-produce a filtered value.
-
-The slink:VkSamplerReductionModeCreateInfo::pname:reductionMode can: control
-the process by which multiple texels, together with their weights, are
-combined to produce a filtered texture value.
-
-When the pname:reductionMode is set (explicitly or implicitly) to
-ename:VK_SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE, a weighted average is
-computed:
-endif::VK_VERSION_1_2,VK_EXT_sampler_filter_minmax[]
-
-[latexmath]
-++++++++++++++++++++++++
-\begin{aligned}
-\tau_{3D} &= \sum_{k=k_0}^{k_1}\sum_{j=j_0}^{j_1}\sum_{i=i_0}^{i_1}(w_{i})(w_{j})(w_{k})\tau_{ijk} \\
-\tau_{2D} &= \sum_{j=j_0}^{j_1}\sum_{i=i_0}^{i_1}(w_{i})(w_{j})\tau_{ij} \\
-\tau_{1D} &= \sum_{i=i_0}^{i_1}(w_{i})\tau_{i}
-\end{aligned}
-++++++++++++++++++++++++
-
-ifdef::VK_VERSION_1_2,VK_EXT_sampler_filter_minmax[]
-However, if the reduction mode is ename:VK_SAMPLER_REDUCTION_MODE_MIN or
-ename:VK_SAMPLER_REDUCTION_MODE_MAX, the process operates on the above set
-of multiple texels, together with their weights, computing a component-wise
-minimum or maximum, respectively, of the components of the set of texels
-with non-zero weights.
-endif::VK_VERSION_1_2,VK_EXT_sampler_filter_minmax[]
-
-ifdef::VK_IMG_filter_cubic,VK_EXT_filter_cubic[]
-
-[[textures-texel-cubic-filtering]]
-==== Texel Cubic Filtering
-
-Within a mip level, ename:VK_FILTER_CUBIC_EXT, filtering computes a weighted
-average of
-ifdef::VK_EXT_filter_cubic[]
-64 (for 3D),
-endif::VK_EXT_filter_cubic[]
-16 (for 2D), or 4 (for 1D) texel values, together with their Catmull-Rom
-weights.
-
-Catmull-Rom weights are derived from the fractions computed earlier.
-
-ifndef::VK_EXT_filter_cubic[]
-[latexmath]
-++++++++++++++++++++++++
-\begin{aligned}
-\begin{bmatrix}
-w_{i_0}\phantom{,} w_{i_1}\phantom{,} w_{i_2}\phantom{,} w_{i_3}
-\end{bmatrix}
-= \frac{1}{2}
-\begin{bmatrix}
-1 & \alpha & \alpha^2 & \alpha^3
-\end{bmatrix}
-\begin{bmatrix}
-\phantom{-}0 &  \phantom{-}2 &  \phantom{-}0 &  \phantom{-}0 \\
--1 &  \phantom{-}0 &  \phantom{-}1 &  \phantom{-}0 \\
-\phantom{-}2 & -5 &  \phantom{-}4 &  -1 \\
--1 &  \phantom{-}3 & -3 &  \phantom{-}1
-\end{bmatrix}
-\\
-\begin{bmatrix}
-w_{j_0}\phantom{,} w_{j_1}\phantom{,} w_{j_2}\phantom{,} w_{j_3}
-\end{bmatrix}
-= \frac{1}{2}
-\begin{bmatrix}
-1 & \beta & \beta^2 & \beta^3
-\end{bmatrix}
-\begin{bmatrix}
-\phantom{-}0 &  \phantom{-}2 &  \phantom{-}0 &  \phantom{-}0 \\
--1 &  \phantom{-}0 &  \phantom{-}1 &  \phantom{-}0 \\
-\phantom{-}2 & -5 &  \phantom{-}4 &  -1 \\
--1 &  \phantom{-}3 & -3 &  \phantom{-}1
-\end{bmatrix}
-\end{aligned}
-++++++++++++++++++++++++
-
-The values of multiple texels, together with their weights, are combined
-using a weighted average to produce a filtered value:
-
-[latexmath]
-++++++++++++++++++++++++
-\begin{aligned}
-\tau_{2D} &= \sum_{j=j_0}^{j_3}\sum_{i=i_0}^{i_3}(w_{i})(w_{j})\tau_{ij} \\
-\tau_{1D} &= \sum_{i=i_0}^{i_3}(w_{i})\tau_{i}
-\end{aligned}
-++++++++++++++++++++++++
-endif::VK_EXT_filter_cubic[]
-
-ifdef::VK_EXT_filter_cubic[]
-
-[latexmath]
-++++++++++++++++++++++++
-\begin{aligned}
-\begin{bmatrix}
-w_{i_0}\phantom{,} w_{i_1}\phantom{,} w_{i_2}\phantom{,} w_{i_3}
-\end{bmatrix}
-= \frac{1}{2}
-\begin{bmatrix}
-1 & \alpha & \alpha^2 & \alpha^3
-\end{bmatrix}
-\begin{bmatrix}
-\phantom{-}0 &  \phantom{-}2 &  \phantom{-}0 &  \phantom{-}0 \\
--1 &  \phantom{-}0 &  \phantom{-}1 &  \phantom{-}0 \\
-\phantom{-}2 & -5 &  \phantom{-}4 &  -1 \\
--1 &  \phantom{-}3 & -3 &  \phantom{-}1
-\end{bmatrix}
-\\
-\begin{bmatrix}
-w_{j_0}\phantom{,} w_{j_1}\phantom{,} w_{j_2}\phantom{,} w_{j_3}
-\end{bmatrix}
-= \frac{1}{2}
-\begin{bmatrix}
-1 & \beta & \beta^2 & \beta^3
-\end{bmatrix}
-\begin{bmatrix}
-\phantom{-}0 &  \phantom{-}2 &  \phantom{-}0 &  \phantom{-}0 \\
--1 &  \phantom{-}0 &  \phantom{-}1 &  \phantom{-}0 \\
-\phantom{-}2 & -5 &  \phantom{-}4 &  -1 \\
--1 &  \phantom{-}3 & -3 &  \phantom{-}1
-\end{bmatrix}
-\\
-\begin{bmatrix}
-w_{k_0}\phantom{,} w_{k_1}\phantom{,} w_{k_2}\phantom{,} w_{k_3}
-\end{bmatrix}
-= \frac{1}{2}
-\begin{bmatrix}
-1 & \gamma & \gamma^2 & \gamma^3
-\end{bmatrix}
-\begin{bmatrix}
-\phantom{-}0 &  \phantom{-}2 &  \phantom{-}0 &  \phantom{-}0 \\
--1 &  \phantom{-}0 &  \phantom{-}1 &  \phantom{-}0 \\
-\phantom{-}2 & -5 &  \phantom{-}4 &  -1 \\
--1 &  \phantom{-}3 & -3 &  \phantom{-}1
-\end{bmatrix}
-\end{aligned}
-++++++++++++++++++++++++
-
-The values of multiple texels, together with their weights, are combined to
-produce a filtered value.
-
-The slink:VkSamplerReductionModeCreateInfo::pname:reductionMode can: control
-the process by which multiple texels, together with their weights, are
-combined to produce a filtered texture value.
-
-When the pname:reductionMode is set (explicitly or implicitly) to
-ename:VK_SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE, a weighted average is
-computed:
-
-[latexmath]
-++++++++++++++++++++++++
-\begin{aligned}
-\tau_{3D} &= \sum_{k=j_0}^{k_3}\sum_{j=j_0}^{j_3}\sum_{i=i_0}^{i_3}(w_{i})(w_{j})(w_{k})\tau_{ijk} \\
-\tau_{2D} &= \sum_{j=j_0}^{j_3}\sum_{i=i_0}^{i_3}(w_{i})(w_{j})\tau_{ij} \\
-\tau_{1D} &= \sum_{i=i_0}^{i_3}(w_{i})\tau_{i}
-\end{aligned}
-++++++++++++++++++++++++
-
-ifdef::VK_VERSION_1_2,VK_EXT_sampler_filter_minmax[]
-However, if the reduction mode is ename:VK_SAMPLER_REDUCTION_MODE_MIN or
-ename:VK_SAMPLER_REDUCTION_MODE_MAX, the process operates on the above set
-of multiple texels, together with their weights, computing a component-wise
-minimum or maximum, respectively, of the components of the set of texels
-with non-zero weights.
-endif::VK_VERSION_1_2,VK_EXT_sampler_filter_minmax[]
-
-endif::VK_EXT_filter_cubic[]
-endif::VK_IMG_filter_cubic,VK_EXT_filter_cubic[]
-
-[[textures-texel-mipmap-filtering]]
-
-==== Texel Mipmap Filtering
-
-ename:VK_SAMPLER_MIPMAP_MODE_NEAREST filtering returns the value of a single
-mipmap level,
-
-[eq]#{tau} = {tau}[d]#.
-
-ename:VK_SAMPLER_MIPMAP_MODE_LINEAR filtering combines the values of
-multiple mipmap levels ({tau}[hi] and {tau}[lo]), together with their linear
-weights.
-
-The linear weights are derived from the fraction computed earlier:
-
-[latexmath]
-++++++++++++++++++++++++
-\begin{aligned}
-w_{hi} &= (1-\delta) \\
-w_{lo} &= (\delta)   \\
-\end{aligned}
-++++++++++++++++++++++++
-
-ifndef::VK_VERSION_1_2,VK_EXT_sampler_filter_minmax[]
-The values of multiple mipmap levels together with their linear weights, are
-combined using a weighted average to produce a final filtered value:
-endif::VK_VERSION_1_2,VK_EXT_sampler_filter_minmax[]
-ifdef::VK_VERSION_1_2,VK_EXT_sampler_filter_minmax[]
-The values of multiple mipmap levels, together with their weights, are
-combined to produce a final filtered value.
-
-The slink:VkSamplerReductionModeCreateInfo::pname:reductionMode can: control
-the process by which multiple texels, together with their weights, are
-combined to produce a filtered texture value.
-
-When the pname:reductionMode is set (explicitly or implicitly) to
-ename:VK_SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE, a weighted average is
-computed:
-endif::VK_VERSION_1_2,VK_EXT_sampler_filter_minmax[]
-
-[latexmath]
-++++++++++++++++++++++++
-\begin{aligned}
-\tau &= (w_{hi})\tau[hi]+(w_{lo})\tau[lo]
-\end{aligned}
-++++++++++++++++++++++++
-
-[[textures-texel-anisotropic-filtering]]
-==== Texel Anisotropic Filtering
-
-Anisotropic filtering is enabled by the pname:anisotropyEnable in the
-sampler.
-When enabled, the image filtering scheme accounts for a degree of
-anisotropy.
-
-The particular scheme for anisotropic texture filtering is
-implementation-dependent.
-Implementations should: consider the pname:magFilter, pname:minFilter and
-pname:mipmapMode of the sampler to control the specifics of the anisotropic
-filtering scheme used.
-In addition, implementations should: consider pname:minLod and pname:maxLod
-of the sampler.
-
-The following describes one particular approach to implementing anisotropic
-filtering for the 2D Image case, implementations may: choose other methods:
-
-Given a pname:magFilter, pname:minFilter of ename:VK_FILTER_LINEAR and a
-pname:mipmapMode of ename:VK_SAMPLER_MIPMAP_MODE_NEAREST:
-
-Instead of a single isotropic sample, N isotropic samples are sampled within
-the image footprint of the image level [eq]#d# to approximate an anisotropic
-filter.
-The sum [eq]#{tau}~2Daniso~# is defined using the single isotropic
-[eq]#{tau}~2D~(u,v)# at level [eq]#d#.
-
-[latexmath]
-++++++++++++++++++++++++
-\begin{aligned}
-\tau_{2Daniso} & =
-     \frac{1}{N}\sum_{i=1}^{N}
-     {\tau_{2D}\left (
-       u \left ( x - \frac{1}{2} + \frac{i}{N+1} , y \right ),
-         \left ( v \left (x-\frac{1}{2}+\frac{i}{N+1}, y \right ),
-\right )
-     \right )},
-     & \text{when}\  \rho_{x} > \rho_{y} \\
-\tau_{2Daniso} &=
-     \frac{1}{N}\sum_{i=1}^{N}
-     {\tau_{2D}\left (
-        u \left  ( x, y - \frac{1}{2} + \frac{i}{N+1} \right ),
-          \left ( v \left (x,y-\frac{1}{2}+\frac{i}{N+1} \right )
-\right )
-     \right )},
-     & \text{when}\  \rho_{y} \geq \rho_{x}
-\end{aligned}
-++++++++++++++++++++++++
-
-ifdef::VK_VERSION_1_2,VK_EXT_sampler_filter_minmax[]
-When slink:VkSamplerReductionModeCreateInfo::pname:reductionMode is set to
-ename:VK_SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE, the above summation is
-used.
-However, if the reduction mode is ename:VK_SAMPLER_REDUCTION_MODE_MIN or
-ename:VK_SAMPLER_REDUCTION_MODE_MAX, the process operates on the above
-values, together with their weights, computing a component-wise minimum or
-maximum, respectively, of the components of the values with non-zero
-weights.
-endif::VK_VERSION_1_2,VK_EXT_sampler_filter_minmax[]
-
-
-ifdef::VK_NV_shader_image_footprint[]
-[[textures-footprint]]
-== Texel Footprint Evaluation
-
-The SPIR-V instruction code:OpImageSampleFootprintNV evaluates the set of
-texels from a single mip level that would be accessed during a
-<<textures-texel-filtering, texel filtering>> operation.
-In addition to the inputs that would be accepted by an equivalent
-code:OpImageSample* instruction, code:OpImageSampleFootprintNV accepts two
-additional inputs.
-The code:Granularity input is an integer identifying the size of texel
-groups used to evaluate the footprint.
-Each bit in the returned footprint mask corresponds to an aligned block of
-texels whose size is given by the following table:
-
-.Texel footprint granularity values
-[width="50%",options="header"]
-|=====
-| code:Granularity  | code:Dim = 2D |  code:Dim = 3D
-|         0         |  unsupported  |  unsupported
-|         1         |      2x2      |     2x2x2
-|         2         |      4x2      |  unsupported
-|         3         |      4x4      |     4x4x2
-|         4         |      8x4      |  unsupported
-|         5         |      8x8      |  unsupported
-|         6         |     16x8      |  unsupported
-|         7         |     16x16     |  unsupported
-|         8         |  unsupported  |  unsupported
-|         9         |  unsupported  |  unsupported
-|         10        |  unsupported  |    16x16x16
-|         11        |     64x64     |    32x16x16
-|         12        |    128x64     |    32x32x16
-|         13        |    128x128    |    32x32x32
-|         14        |    256x128    |    64x32x32
-|         15        |    256x256    |  unsupported
-|=====
-
-The code:Coarse input is used to select between the two mip levels that may:
-be accessed during texel filtering when using a pname:mipmapMode of
-ename:VK_SAMPLER_MIPMAP_MODE_LINEAR.
-When filtering between two mip levels, a code:Coarse value of code:true
-requests the footprint in the lower-resolution mip level (higher level
-number), while code:false requests the footprint in the higher-resolution
-mip level.
-If texel filtering would access only a single mip level, the footprint in
-that level would be returned when code:Coarse is set to code:false; an empty
-footprint would be returned when code:Coarse is set to code:true.
-
-The footprint for code:OpImageSampleFootprintNV is returned in a structure
-with six members:
-
-  * The first member is a boolean value that is true if the texel filtering
-    operation would access only a single mip level.
-  * The second member is a two- or three-component integer vector holding
-    the footprint anchor location.
-    For two-dimensional images, the returned components are in units of
-    eight texel groups.
-    For three-dimensional images, the returned components are in units of
-    four texel groups.
-  * The third member is a two- or three-component integer vector holding a
-    footprint offset relative to the anchor.
-    All returned components are in units of texel groups.
-  * The fourth member is a two-component integer vector mask, which holds a
-    bitfield identifying the set of texel groups in an 8x8 or 4x4x4
-    neighborhood relative to the anchor and offset.
-  * The fifth member is an integer identifying the mip level containing the
-    footprint identified by the anchor, offset, and mask.
-  * The sixth member is an integer identifying the granularity of the
-    returned footprint.
-
-For footprints in two-dimensional images (code:Dim2D), the mask returned by
-code:OpImageSampleFootprintNV indicates whether each texel group in a 8x8
-local neighborhood of texel groups would have one or more texels accessed
-during texel filtering.
-In the mask, the texel group with local group coordinates
-latexmath:[(lgx,lgy)] is considered covered if and only if
-
-[latexmath]
-+++++++++++++++++++
-\begin{aligned}
-0 \neq ((mask.x + (mask.y << 32)) \text{ \& } (1 << (lgy \times 8 + lgx)))
-\end{aligned}
-+++++++++++++++++++
-
-where:
-
-  * latexmath:[0 \leq lgx < 8] and latexmath:[0 \leq lgy < 8]; and
-  * latexmath:[mask] is the returned two-component mask.
-
-The local group with coordinates latexmath:[(lgx,lgy)] in the mask is
-considered covered if and only if the texel filtering operation would access
-one or more texels latexmath:[\tau_{ij}] in the returned miplevel where:
-[latexmath]
-+++++++++++++++++++
-\begin{aligned}
-i0 & =
-  \begin{cases}
-    gran.x \times (8 \times anchor.x + lgx), & \text{if } lgx + offset.x < 8 \\
-    gran.x \times (8 \times (anchor.x - 1) + lgx), & \text{otherwise}
-  \end{cases} \\
-i1 & = i0 + gran.x - 1 \\
-j0 & =
-  \begin{cases}
-    gran.y \times (8 \times anchor.y + lgy), & \text{if } lgy + offset.y < 8 \\
-    gran.y \times (8 \times (anchor.y - 1) + lgy), & otherwise
-  \end{cases} \\
-j1 & = j0 + gran.y - 1
-\end{aligned}
-+++++++++++++++++++
-and
-
-  * latexmath:[i0 \leq i \leq i1] and latexmath:[j0 \leq j \leq j1];
-  * latexmath:[gran] is a two-component vector holding the width and height
-    of the texel group identified by the granularity;
-  * latexmath:[anchor] is the returned two-component anchor vector; and
-  * latexmath:[offset] is the returned two-component offset vector.
-
-For footprints in three-dimensional images (code:Dim3D), the mask returned
-by code:OpImageSampleFootprintNV indicates whether each texel group in a
-4x4x4 local neighborhood of texel groups would have one or more texels
-accessed during texel filtering.
-In the mask, the texel group with local group coordinates
-latexmath:[(lgx,lgy,lgz)], is considered covered if and only if:
-[latexmath]
-+++++++++++++++++++
-\begin{aligned}
-0 \neq ((mask.x + (mask.y << 32)) \text{ \& } (1 << (lgz \times 16 + lgy \times 4 + lgx)))
-\end{aligned}
-+++++++++++++++++++
-where:
-
-  * latexmath:[0 \leq lgx < 4], latexmath:[0 \leq lgy < 4], and latexmath:[0
-    \leq lgz < 4]; and
-  * latexmath:[mask] is the returned two-component mask.
-
-The local group with coordinates latexmath:[(lgx,lgy,lgz)] in the mask is
-considered covered if and only if the texel filtering operation would access
-one or more texels latexmath:[\tau_{ijk}] in the returned miplevel where:
-[latexmath]
-+++++++++++++++++++
-\begin{aligned}
-i0 & =
-  \begin{cases}
-    gran.x \times (4 \times anchor.x + lgx), & \text{if } lgx + offset.x < 4 \\
-    gran.x \times (4 \times (anchor.x - 1) + lgx), & \text{otherwise}
-  \end{cases} \\
-i1 & = i0 + gran.x - 1 \\
-j0 & =
-  \begin{cases}
-    gran.y \times (4 \times anchor.y + lgy), & \text{if } lgy + offset.y < 4 \\
-    gran.y \times (4 \times (anchor.y - 1) + lgy), & otherwise
-  \end{cases} \\
-j1 & = j0 + gran.y - 1 \\
-k0 & =
-  \begin{cases}
-    gran.z \times (4 \times anchor.z + lgz), & \text{if } lgz + offset.z < 4 \\
-    gran.z \times (4 \times (anchor.z - 1) + lgz), & otherwise
-  \end{cases} \\
-k1 & = k0 + gran.z - 1
-\end{aligned}
-+++++++++++++++++++
-and
-
-  * latexmath:[i0 \leq i \leq i1], latexmath:[j0 \leq j \leq j1],
-    latexmath:[k0 \leq k \leq k1];
-  * latexmath:[gran] is a three-component vector holding the width, height,
-    and depth of the texel group identified by the granularity;
-  * latexmath:[anchor] is the returned three-component anchor vector; and
-  * latexmath:[offset] is the returned three-component offset vector.
-
-If the sampler used by code:OpImageSampleFootprintNV enables anisotropic
-texel filtering via pname:anisotropyEnable, it is possible that the set of
-texel groups accessed in a mip level may be too large to be expressed using
-an 8x8 or 4x4x4 mask using the granularity requested in the instruction.
-In this case, the implementation uses a texel group larger than the
-requested granularity.
-When a larger texel group size is used, code:OpImageSampleFootprintNV
-returns an integer granularity value that can: be interpreted in the same
-manner as the granularity value provided to the instruction to determine the
-texel group size used.
-If anisotropic texel filtering is disabled in the sampler, or if an
-anisotropic footprint can be represented as an 8x8 or 4x4x4 mask with the
-requested granularity, code:OpImageSampleFootprintNV will use the requested
-granularity as-is and return a granularity value of zero.
-
-code:OpImageSampleFootprintNV supports only two- and three-dimensional image
-accesses (code:Dim2D and code:Dim3D), and the footprint returned is
-undefined: if a sampler uses an addressing mode other than
-ename:VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE.
-
-endif::VK_NV_shader_image_footprint[]
-
-
-[[textures-instructions]]
-== Image Operation Steps
-
-Each step described in this chapter is performed by a subset of the image
-instructions:
-
-  * Texel Input Validation Operations, Format Conversion, Texel Replacement,
-    Conversion to RGBA, and Component Swizzle: Performed by all instructions
-    except code:OpImageWrite.
-  * Depth Comparison: Performed by code:OpImage*Dref instructions.
-  * All Texel output operations: Performed by code:OpImageWrite.
-  * Projection: Performed by all code:OpImage*Proj instructions.
-  * Derivative Image Operations, Cube Map Operations, Scale Factor
-    Operation, Level-of-Detail Operation and Image Level(s) Selection, and
-    Texel Anisotropic Filtering: Performed by all code:OpImageSample* and
-    code:OpImageSparseSample* instructions.
-  * (s,t,r,q,a) to (u,v,w,a) Transformation, Wrapping, and (u,v,w,a) to
-    (i,j,k,l,n) Transformation And Array Layer Selection: Performed by all
-    code:OpImageSample, code:OpImageSparseSample, and code:OpImage*Gather
-    instructions.
-  * Texel Gathering: Performed by code:OpImage*Gather instructions.
-ifdef::VK_NV_shader_image_footprint[]
-  * Texel Footprint Evaluation: Performed by code:OpImageSampleFootprint
-    instructions.
-endif::VK_NV_shader_image_footprint[]
-  * Texel Filtering: Performed by all code:OpImageSample* and
-    code:OpImageSparseSample* instructions.
-  * Sparse Residency: Performed by all code:OpImageSparse* instructions.
-
-
-[[textures-queries]]
-== Image Query Instructions
-
-=== Image Property Queries
-
-code:OpImageQuerySize, code:OpImageQuerySizeLod, code:OpImageQueryLevels,
-and code:OpImageQuerySamples query properties of the image descriptor that
-would be accessed by a shader image operation.
-ifdef::VK_EXT_robustness2[]
-They return 0 if the bound descriptor is a null descriptor.
-endif::VK_EXT_robustness2[]
-
-code:OpImageQuerySizeLod returns the size of the image level identified by
-the code:Level code:of code:Detail operand.
-If that level does not exist in the image,
-ifdef::VK_EXT_robustness2[and the descriptor is not null,]
-then the value returned is undefined:.
-
-
-=== Lod Query
-
-code:OpImageQueryLod returns the Lod parameters that would be used in an
-image operation with the given image and coordinates.
-ifdef::VK_EXT_robustness2[]
-If the descriptor that would be accessed is a null descriptor then (0, 0) is
-returned.
-endif::VK_EXT_robustness2[]
-ifdef::VK_EXT_robustness2[Otherwise, the]
-ifndef::VK_EXT_robustness2[The]
-steps described in this chapter are performed as if for
-code:OpImageSampleImplicitLod, up to <<textures-lod-and-scale-factor>>.
-The return value is the vector [eq]#({lambda}', d~l~)#.
-These values may: be subject to implementation-specific maxima and minima
-for very large, out-of-range values.
diff --git a/registry/vulkan/chapters/vertexpostproc.txt b/registry/vulkan/chapters/vertexpostproc.txt
deleted file mode 100644
index 5511353..0000000
--- a/registry/vulkan/chapters/vertexpostproc.txt
+++ /dev/null
@@ -1,1446 +0,0 @@
-// Copyright 2015-2021 The Khronos Group, Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-[[vertexpostproc]]
-= Fixed-Function Vertex Post-Processing
-
-After <<pipeline-graphics-subsets-pre-rasterization,pre-rasterization shader
-stages>>, the following fixed-function operations are applied to vertices of
-the resulting primitives:
-
-ifdef::VK_EXT_transform_feedback[]
-  * Transform feedback (see <<vertexpostproc-transform-feedback,Transform
-    Feedback>>)
-endif::VK_EXT_transform_feedback[]
-ifdef::VK_NV_viewport_swizzle[]
-  * Viewport swizzle (see <<vertexpostproc-viewport-swizzle,Viewport
-    Swizzle>>)
-endif::VK_NV_viewport_swizzle[]
-  * Flat shading (see <<vertexpostproc-flatshading>>).
-  * Primitive clipping, including client-defined half-spaces (see
-    <<vertexpostproc-clipping,Primitive Clipping>>).
-  * Shader output attribute clipping (see
-    <<vertexpostproc-clipping-shader-outputs,Clipping Shader Outputs>>).
-ifdef::VK_NV_clip_space_w_scaling[]
-  * Clip space W scaling (see <<vertexpostproc-viewportwscaling,Controlling
-    Viewport W Scaling>>).
-endif::VK_NV_clip_space_w_scaling[]
-  * Perspective division on clip coordinates (see
-    <<vertexpostproc-coord-transform,Coordinate Transformations>>).
-  * Viewport mapping, including depth range scaling (see
-    <<vertexpostproc-viewport,Controlling the Viewport>>).
-  * Front face determination for polygon primitives (see
-    <<primsrast-polygons-basic,Basic Polygon Rasterization>>).
-
-ifdef::editing-notes[]
-[NOTE]
-.editing-note
-====
-TODO:Odd that this one link to a different chapter is in this list.
-====
-endif::editing-notes[]
-
-Next, rasterization is performed on primitives as described in chapter
-<<primsrast,Rasterization>>.
-
-
-ifdef::VK_EXT_transform_feedback[]
-[[vertexpostproc-transform-feedback]]
-== Transform Feedback
-
-Before any other fixed-function vertex post-processing, vertex outputs from
-the last shader in the
-<<pipeline-graphics-subsets-pre-rasterization,pre-rasterization shader
-stage>> can: be written out to one or more transform feedback buffers bound
-to the command buffer.
-To capture vertex outputs the last
-<<pipeline-graphics-subsets-pre-rasterization,pre-rasterization shader
-stage>> shader must: be declared with the code:Xfb execution mode.
-Outputs decorated with code:XfbBuffer will be written out to the
-corresponding transform feedback buffers bound to the command buffer when
-transform feedback is active.
-Transform feedback buffers are bound to the command buffer by using
-flink:vkCmdBindTransformFeedbackBuffersEXT.
-Transform feedback is made active by calling
-flink:vkCmdBeginTransformFeedbackEXT and made inactive by calling
-flink:vkCmdEndTransformFeedbackEXT.
-After vertex data is written it is possible to use
-flink:vkCmdDrawIndirectByteCountEXT to start a new draw where the
-pname:vertexCount is derived from the number of bytes written by a previous
-transform feedback.
-
-When an individual point, line, or triangle primitive reaches the transform
-feedback stage while transform feedback is active, the values of the
-specified output variables are assembled into primitives and appended to the
-bound transform feedback buffers.
-After activating transform feedback, the values of the first assembled
-primitive are written at the starting offsets of the bound transform
-feedback buffers, and subsequent primitives are appended to the buffer.
-If the optional pname:pCounterBuffers and pname:pCounterBufferOffsets
-parameters are specified, the starting points within the transform feedback
-buffers are adjusted so data is appended to the previously written values
-indicated by the value stored by the implementation in the counter buffer.
-
-For multi-vertex primitives, all values for a given vertex are written
-before writing values for any other vertex.
-ifdef::VK_EXT_provoking_vertex[]
-When
-<<features-transformFeedbackPreservesProvokingVertex,transformFeedbackPreservesProvokingVertex>>
-is not enabled, implementations
-endif::VK_EXT_provoking_vertex[]
-ifndef::VK_EXT_provoking_vertex[]
-Implementations
-endif::VK_EXT_provoking_vertex[]
-may: write out any vertex within the primitive first, but all subsequent
-vertices for that primitive must: be written out in a consistent winding
-order defined as follows:
-
-  * If neither <<geometry,geometry>> or <<tessellation,tessellation
-    shading>> is active, vertices within a primitive are appended according
-    to the winding order described by the <<drawing-primitive-topologies,
-    primitive topology>> defined by the
-    slink:VkPipelineInputAssemblyStateCreateInfo:pname:topology used to
-    execute the <<drawing,drawing command>>.
-  * If <<geometry,geometry shading>> is active, vertices within a primitive
-    are appended according to the winding order described by the
-    <<drawing-primitive-topologies, primitive topology>> defined by the
-    <<drawing-point-lists, code:OutputPoints>>, <<drawing-line-strips,
-    code:OutputLineStrips>>, or <<drawing-triangle-strips,
-    code:OutputTriangleStrips>> execution mode.
-  * If <<tessellation,tessellation shading>> is active but
-    <<geometry,geometry shading>> is not, vertices within a primitive are
-    appended according to the winding order defined by
-    <<tessellation-triangle-tessellation, triangle tessellation>>,
-    <<tessellation-quad-tessellation, quad tessellation>>, and
-    <<tessellation-isoline-tessellation, isoline tessellation>>.
-
-ifdef::VK_EXT_provoking_vertex[]
-When
-<<features-transformFeedbackPreservesProvokingVertex,transformFeedbackPreservesProvokingVertex>>
-is enabled, then in addition to writing vertices with a consistent winding
-order, the vertex order must: preserve the <<vertexpostproc-flatshading,
-provoking vertex>> of each primitive:
-
-  * When the
-    <<VkPipelineRasterizationProvokingVertexStateCreateInfoEXT,pipeline's
-    provoking vertex mode>> is
-    ename:VK_PROVOKING_VERTEX_MODE_FIRST_VERTEX_EXT, the primitive's
-    provoking vertex must be the first vertex written.
-  * When the
-    <<VkPipelineRasterizationProvokingVertexStateCreateInfoEXT,pipeline's
-    provoking vertex mode>> is
-    ename:VK_PROVOKING_VERTEX_MODE_LAST_VERTEX_EXT, the primitive's
-    provoking vertex must be the last vertex written.
-
-If
-<<limits-transformFeedbackPreservesTriangleFanProvokingVertex,pname:transformFeedbackPreservesTriangleFanProvokingVertex>>
-is ename:VK_FALSE, neither <<geometry,geometry>> nor
-<<tessellation,tessellation>> shading is active, and the
-<<drawing-primitive-topologies,primitive topology>> is
-ename:VK_PRIMITIVE_TOPOLOGY_TRIANGLE_FAN, then the first vertex written from
-each primitive is implementation-defined even when
-<<features-transformFeedbackPreservesProvokingVertex,transformFeedbackPreservesProvokingVertex>>
-is enabled.
-
-endif::VK_EXT_provoking_vertex[]
-
-When capturing vertices, the stride associated with each transform feedback
-buffer, as indicated by the code:XfbStride decoration, indicates the number
-of bytes of storage reserved for each vertex in the transform feedback
-buffer.
-For every vertex captured, each output attribute with a code:Offset
-decoration will be written to the storage reserved for the vertex at the
-associated transform feedback buffer.
-When writing output variables that are arrays or structures, individual
-array elements or structure members are written tightly packed in order.
-For vector types, individual components are written in order.
-For matrix types, outputs are written as an array of column vectors.
-
-If any component of an output with an assigned transform feedback offset was
-not written to by its shader, the value recorded for that component is
-undefined:.
-All components of an output variable must: be written at an offset aligned
-to the size of the component.
-The size of each component of an output variable must: be at least 32-bits.
-When capturing a vertex, any portion of the reserved storage not associated
-with an output variable with an assigned transform feedback offset will be
-unmodified.
-
-When transform feedback is inactive, no vertices are recorded.
-If there is a valid counter buffer handle and counter buffer offset in the
-pname:pCounterBuffers and pname:pCounterBufferOffsets arrays, writes to the
-corresponding transform feedback buffer will start at the byte offset
-represented by the value stored in the counter buffer location.
-
-Individual lines or triangles of a strip or fan primitive will be extracted
-and recorded separately.
-Incomplete primitives are not recorded.
-
-When using a geometry shader that emits vertices to multiple vertex streams,
-a primitive will be assembled and output for each stream when there are
-enough vertices emitted for the output primitive type.
-All outputs assigned to a given transform feedback buffer are required to
-come from a single vertex stream.
-
-The sizes of the transform feedback buffers are defined by the
-flink:vkCmdBindTransformFeedbackBuffersEXT pname:pSizes parameter for each
-of the bound buffers, or the size of the bound buffer, whichever is the
-lesser.
-If there is less space remaining in any of the transform feedback buffers
-than the size of all of the vertex data for that primitive based on the
-code:XfbStride for that code:XfbBuffer then no vertex data of that primitive
-is recorded in any transform feedback buffer, and the value for the number
-of primitives written in the corresponding
-ename:VK_QUERY_TYPE_TRANSFORM_FEEDBACK_STREAM_EXT query for all transform
-feedback buffers is no longer incremented.
-
-Any outputs made to a code:XfbBuffer that is not bound to a transform
-feedback buffer is ignored.
-
-[open,refpage='vkCmdBindTransformFeedbackBuffersEXT',desc='Bind transform feedback buffers to a command buffer',type='protos']
---
-To bind transform feedback buffers to a command buffer for use in subsequent
-drawing commands, call:
-
-include::{generated}/api/protos/vkCmdBindTransformFeedbackBuffersEXT.txt[]
-
-  * pname:commandBuffer is the command buffer into which the command is
-    recorded.
-  * pname:firstBinding is the index of the first transform feedback binding
-    whose state is updated by the command.
-  * pname:bindingCount is the number of transform feedback bindings whose
-    state is updated by the command.
-  * pname:pBuffers is a pointer to an array of buffer handles.
-  * pname:pOffsets is a pointer to an array of buffer offsets.
-  * pname:pSizes is `NULL` or a pointer to an array of basetype:VkDeviceSize
-    buffer sizes, specifying the maximum number of bytes to capture to the
-    corresponding transform feedback buffer.
-    If pname:pSizes is `NULL`, or the value of the pname:pSizes array
-    element is ename:VK_WHOLE_SIZE, then the maximum number of bytes
-    captured will be the size of the corresponding buffer minus the buffer
-    offset.
-
-The values taken from elements [eq]#i# of pname:pBuffers, pname:pOffsets and
-pname:pSizes replace the current state for the transform feedback binding
-[eq]#pname:firstBinding {plus} i#, for [eq]#i# in [eq]#[0,
-pname:bindingCount)#.
-The transform feedback binding is updated to start at the offset indicated
-by pname:pOffsets[i] from the start of the buffer pname:pBuffers[i].
-
-.Valid Usage
-****
-  * [[VUID-vkCmdBindTransformFeedbackBuffersEXT-transformFeedback-02355]]
-    sname:VkPhysicalDeviceTransformFeedbackFeaturesEXT::pname:transformFeedback
-    must: be enabled
-  * [[VUID-vkCmdBindTransformFeedbackBuffersEXT-firstBinding-02356]]
-    pname:firstBinding must: be less than
-    sname:VkPhysicalDeviceTransformFeedbackPropertiesEXT::pname:maxTransformFeedbackBuffers
-  * [[VUID-vkCmdBindTransformFeedbackBuffersEXT-firstBinding-02357]]
-    The sum of pname:firstBinding and pname:bindingCount must: be less than
-    or equal to
-    sname:VkPhysicalDeviceTransformFeedbackPropertiesEXT::pname:maxTransformFeedbackBuffers
-  * [[VUID-vkCmdBindTransformFeedbackBuffersEXT-pOffsets-02358]]
-    All elements of pname:pOffsets must: be less than the size of the
-    corresponding element in pname:pBuffers
-  * [[VUID-vkCmdBindTransformFeedbackBuffersEXT-pOffsets-02359]]
-    All elements of pname:pOffsets must: be a multiple of 4
-  * [[VUID-vkCmdBindTransformFeedbackBuffersEXT-pBuffers-02360]]
-    All elements of pname:pBuffers must: have been created with the
-    ename:VK_BUFFER_USAGE_TRANSFORM_FEEDBACK_BUFFER_BIT_EXT flag
-  * [[VUID-vkCmdBindTransformFeedbackBuffersEXT-pSize-02361]]
-    If the optional pname:pSize array is specified, each element of
-    pname:pSizes must: either be ename:VK_WHOLE_SIZE, or be less than or
-    equal to
-    sname:VkPhysicalDeviceTransformFeedbackPropertiesEXT::pname:maxTransformFeedbackBufferSize
-  * [[VUID-vkCmdBindTransformFeedbackBuffersEXT-pSizes-02362]]
-    All elements of pname:pSizes must: be either ename:VK_WHOLE_SIZE, or
-    less than or equal to the size of the corresponding buffer in
-    pname:pBuffers
-  * [[VUID-vkCmdBindTransformFeedbackBuffersEXT-pOffsets-02363]]
-    All elements of pname:pOffsets plus pname:pSizes, where the
-    pname:pSizes, element is not ename:VK_WHOLE_SIZE, must: be less than or
-    equal to the size of the corresponding buffer in pname:pBuffers
-  * [[VUID-vkCmdBindTransformFeedbackBuffersEXT-pBuffers-02364]]
-    Each element of pname:pBuffers that is non-sparse must: be bound
-    completely and contiguously to a single sname:VkDeviceMemory object
-  * [[VUID-vkCmdBindTransformFeedbackBuffersEXT-None-02365]]
-    Transform feedback must: not be active when the
-    fname:vkCmdBindTransformFeedbackBuffersEXT command is recorded
-****
-
-include::{generated}/validity/protos/vkCmdBindTransformFeedbackBuffersEXT.txt[]
---
-
-[open,refpage='vkCmdBeginTransformFeedbackEXT',desc='Make transform feedback active in the command buffer',type='protos']
---
-Transform feedback for specific transform feedback buffers is made active by
-calling:
-
-include::{generated}/api/protos/vkCmdBeginTransformFeedbackEXT.txt[]
-
-  * pname:commandBuffer is the command buffer into which the command is
-    recorded.
-  * pname:firstCounterBuffer is the index of the first transform feedback
-    buffer corresponding to pname:pCounterBuffers[0] and
-    pname:pCounterBufferOffsets[0].
-  * pname:counterBufferCount is the size of the pname:pCounterBuffers and
-    pname:pCounterBufferOffsets arrays.
-  * pname:pCounterBuffers is `NULL` or a pointer to an array of
-    slink:VkBuffer handles to counter buffers.
-    Each buffer contains a 4 byte integer value representing the byte offset
-    from the start of the corresponding transform feedback buffer from where
-    to start capturing vertex data.
-    If the byte offset stored to the counter buffer location was done using
-    flink:vkCmdEndTransformFeedbackEXT it can be used to resume transform
-    feedback from the previous location.
-    If pname:pCounterBuffers is `NULL`, then transform feedback will start
-    capturing vertex data to byte offset zero in all bound transform
-    feedback buffers.
-    For each element of pname:pCounterBuffers that is dlink:VK_NULL_HANDLE,
-    transform feedback will start capturing vertex data to byte zero in the
-    corresponding bound transform feedback buffer.
-  * pname:pCounterBufferOffsets is `NULL` or a pointer to an array of
-    basetype:VkDeviceSize values specifying offsets within each of the
-    pname:pCounterBuffers where the counter values were previously written.
-    The location in each counter buffer at these offsets must: be large
-    enough to contain 4 bytes of data.
-    This data is the number of bytes captured by the previous transform
-    feedback to this buffer.
-    If pname:pCounterBufferOffsets is `NULL`, then it is assumed the offsets
-    are zero.
-
-The active transform feedback buffers will capture primitives emitted from
-the corresponding code:XfbBuffer in the bound graphics pipeline.
-Any code:XfbBuffer emitted that does not output to an active transform
-feedback buffer will not be captured.
-
-.Valid Usage
-****
-  * [[VUID-vkCmdBeginTransformFeedbackEXT-transformFeedback-02366]]
-    sname:VkPhysicalDeviceTransformFeedbackFeaturesEXT::pname:transformFeedback
-    must: be enabled
-  * [[VUID-vkCmdBeginTransformFeedbackEXT-None-02367]]
-    Transform feedback must: not be active
-  * [[VUID-vkCmdBeginTransformFeedbackEXT-firstCounterBuffer-02368]]
-    pname:firstCounterBuffer must: be less than
-    sname:VkPhysicalDeviceTransformFeedbackPropertiesEXT::pname:maxTransformFeedbackBuffers
-  * [[VUID-vkCmdBeginTransformFeedbackEXT-firstCounterBuffer-02369]]
-    The sum of pname:firstCounterBuffer and pname:counterBufferCount must:
-    be less than or equal to
-    sname:VkPhysicalDeviceTransformFeedbackPropertiesEXT::pname:maxTransformFeedbackBuffers
-  * [[VUID-vkCmdBeginTransformFeedbackEXT-counterBufferCount-02607]]
-    If pname:counterBufferCount is not `0`, and pname:pCounterBuffers is not
-    `NULL`, pname:pCounterBuffers must: be a valid pointer to an array of
-    pname:counterBufferCount sname:VkBuffer handles that are either valid or
-    dlink:VK_NULL_HANDLE
-  * [[VUID-vkCmdBeginTransformFeedbackEXT-pCounterBufferOffsets-02370]]
-    For each buffer handle in the array, if it is not dlink:VK_NULL_HANDLE
-    it must: reference a buffer large enough to hold 4 bytes at the
-    corresponding offset from the pname:pCounterBufferOffsets array
-  * [[VUID-vkCmdBeginTransformFeedbackEXT-pCounterBuffer-02371]]
-    If pname:pCounterBuffer is `NULL`, then pname:pCounterBufferOffsets
-    must: also be `NULL`
-  * [[VUID-vkCmdBeginTransformFeedbackEXT-pCounterBuffers-02372]]
-    For each buffer handle in the pname:pCounterBuffers array that is not
-    dlink:VK_NULL_HANDLE it must: have been created with a pname:usage value
-    containing
-    ename:VK_BUFFER_USAGE_TRANSFORM_FEEDBACK_COUNTER_BUFFER_BIT_EXT
-  * [[VUID-vkCmdBeginTransformFeedbackEXT-None-06233]]
-    A valid graphics pipeline must: be bound to
-    ename:VK_PIPELINE_BIND_POINT_GRAPHICS
-  * [[VUID-vkCmdBeginTransformFeedbackEXT-None-04128]]
-    The last <<pipeline-graphics-subsets-pre-rasterization,pre-rasterization
-    shader stage>> of the bound graphics pipeline must: have been declared
-    with the code:Xfb execution mode
-ifdef::VK_VERSION_1_1,VK_KHR_multiview[]
-  * [[VUID-vkCmdBeginTransformFeedbackEXT-None-02373]]
-    Transform feedback must: not be made active in a render pass instance
-    with multiview enabled
-endif::VK_VERSION_1_1,VK_KHR_multiview[]
-****
-
-include::{generated}/validity/protos/vkCmdBeginTransformFeedbackEXT.txt[]
---
-
-[open,refpage='vkCmdEndTransformFeedbackEXT',desc='Make transform feedback inactive in the command buffer',type='protos']
---
-Transform feedback for specific transform feedback buffers is made inactive
-by calling:
-
-include::{generated}/api/protos/vkCmdEndTransformFeedbackEXT.txt[]
-
-  * pname:commandBuffer is the command buffer into which the command is
-    recorded.
-  * pname:firstCounterBuffer is the index of the first transform feedback
-    buffer corresponding to pname:pCounterBuffers[0] and
-    pname:pCounterBufferOffsets[0].
-  * pname:counterBufferCount is the size of the pname:pCounterBuffers and
-    pname:pCounterBufferOffsets arrays.
-  * pname:pCounterBuffers is `NULL` or a pointer to an array of
-    slink:VkBuffer handles to counter buffers.
-    The counter buffers are used to record the current byte positions of
-    each transform feedback buffer where the next vertex output data would
-    be captured.
-    This can: be used by a subsequent flink:vkCmdBeginTransformFeedbackEXT
-    call to resume transform feedback capture from this position.
-    It can also be used by flink:vkCmdDrawIndirectByteCountEXT to determine
-    the vertex count of the draw call.
-  * pname:pCounterBufferOffsets is `NULL` or a pointer to an array of
-    basetype:VkDeviceSize values specifying offsets within each of the
-    pname:pCounterBuffers where the counter values can be written.
-    The location in each counter buffer at these offsets must: be large
-    enough to contain 4 bytes of data.
-    The data stored at this location is the byte offset from the start of
-    the transform feedback buffer binding where the next vertex data would
-    be written.
-    If pname:pCounterBufferOffsets is `NULL`, then it is assumed the offsets
-    are zero.
-
-.Valid Usage
-****
-  * [[VUID-vkCmdEndTransformFeedbackEXT-transformFeedback-02374]]
-    sname:VkPhysicalDeviceTransformFeedbackFeaturesEXT::pname:transformFeedback
-    must: be enabled
-  * [[VUID-vkCmdEndTransformFeedbackEXT-None-02375]]
-    Transform feedback must: be active
-  * [[VUID-vkCmdEndTransformFeedbackEXT-firstCounterBuffer-02376]]
-    pname:firstCounterBuffer must: be less than
-    sname:VkPhysicalDeviceTransformFeedbackPropertiesEXT::pname:maxTransformFeedbackBuffers
-  * [[VUID-vkCmdEndTransformFeedbackEXT-firstCounterBuffer-02377]]
-    The sum of pname:firstCounterBuffer and pname:counterBufferCount must:
-    be less than or equal to
-    sname:VkPhysicalDeviceTransformFeedbackPropertiesEXT::pname:maxTransformFeedbackBuffers
-  * [[VUID-vkCmdEndTransformFeedbackEXT-counterBufferCount-02608]]
-    If pname:counterBufferCount is not `0`, and pname:pCounterBuffers is not
-    `NULL`, pname:pCounterBuffers must: be a valid pointer to an array of
-    pname:counterBufferCount sname:VkBuffer handles that are either valid or
-    dlink:VK_NULL_HANDLE
-  * [[VUID-vkCmdEndTransformFeedbackEXT-pCounterBufferOffsets-02378]]
-    For each buffer handle in the array, if it is not dlink:VK_NULL_HANDLE
-    it must: reference a buffer large enough to hold 4 bytes at the
-    corresponding offset from the pname:pCounterBufferOffsets array
-  * [[VUID-vkCmdEndTransformFeedbackEXT-pCounterBuffer-02379]]
-    If pname:pCounterBuffer is `NULL`, then pname:pCounterBufferOffsets
-    must: also be `NULL`
-  * [[VUID-vkCmdEndTransformFeedbackEXT-pCounterBuffers-02380]]
-    For each buffer handle in the pname:pCounterBuffers array that is not
-    dlink:VK_NULL_HANDLE it must: have been created with a pname:usage value
-    containing
-    ename:VK_BUFFER_USAGE_TRANSFORM_FEEDBACK_COUNTER_BUFFER_BIT_EXT
-****
-
-include::{generated}/validity/protos/vkCmdEndTransformFeedbackEXT.txt[]
---
-endif::VK_EXT_transform_feedback[]
-
-
-ifdef::VK_NV_viewport_swizzle[]
-[[vertexpostproc-viewport-swizzle]]
-== Viewport Swizzle
-
-[open,refpage='VkPipelineViewportSwizzleStateCreateInfoNV',desc='Structure specifying swizzle applied to primitive clip coordinates',type='structs']
---
-Each primitive sent to a given viewport has a swizzle and optional: negation
-applied to its clip coordinates.
-The swizzle that is applied depends on the viewport index, and is controlled
-by the sname:VkPipelineViewportSwizzleStateCreateInfoNV pipeline state:
-
-include::{generated}/api/structs/VkPipelineViewportSwizzleStateCreateInfoNV.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:flags is reserved for future use.
-  * pname:viewportCount is the number of viewport swizzles used by the
-    pipeline.
-  * pname:pViewportSwizzles is a pointer to an array of
-    slink:VkViewportSwizzleNV structures, defining the viewport swizzles.
-
-.Valid Usage
-****
-  * [[VUID-VkPipelineViewportSwizzleStateCreateInfoNV-viewportCount-01215]]
-    pname:viewportCount must: be greater than or equal to the
-    pname:viewportCount set in sname:VkPipelineViewportStateCreateInfo
-****
-
-include::{generated}/validity/structs/VkPipelineViewportSwizzleStateCreateInfoNV.txt[]
---
-
-[open,refpage='VkPipelineViewportSwizzleStateCreateFlagsNV',desc='Reserved for future use',type='flags']
---
-include::{generated}/api/flags/VkPipelineViewportSwizzleStateCreateFlagsNV.txt[]
-
-tname:VkPipelineViewportSwizzleStateCreateFlagsNV is a bitmask type for
-setting a mask, but is currently reserved for future use.
---
-
-The sname:VkPipelineViewportSwizzleStateCreateInfoNV state is set by adding
-this structure to the pname:pNext chain of a
-sname:VkPipelineViewportStateCreateInfo structure and setting the graphics
-pipeline state with flink:vkCreateGraphicsPipelines.
-
-Each viewport specified from 0 to pname:viewportCount - 1 has its x,y,z,w
-swizzle state set to the corresponding pname:x, pname:y, pname:z and pname:w
-in the slink:VkViewportSwizzleNV structure.
-Each component is of type elink:VkViewportCoordinateSwizzleNV, which
-determines the type of swizzle for that component.
-The value of pname:x computes the new x component of the position as:
-
-[source,c]
----------------------------------------------------
-if (x == VK_VIEWPORT_COORDINATE_SWIZZLE_POSITIVE_X_NV) x' = x;
-if (x == VK_VIEWPORT_COORDINATE_SWIZZLE_NEGATIVE_X_NV) x' = -x;
-if (x == VK_VIEWPORT_COORDINATE_SWIZZLE_POSITIVE_Y_NV) x' = y;
-if (x == VK_VIEWPORT_COORDINATE_SWIZZLE_NEGATIVE_Y_NV) x' = -y;
-if (x == VK_VIEWPORT_COORDINATE_SWIZZLE_POSITIVE_Z_NV) x' = z;
-if (x == VK_VIEWPORT_COORDINATE_SWIZZLE_NEGATIVE_Z_NV) x' = -z;
-if (x == VK_VIEWPORT_COORDINATE_SWIZZLE_POSITIVE_W_NV) x' = w;
-if (x == VK_VIEWPORT_COORDINATE_SWIZZLE_NEGATIVE_W_NV) x' = -w;
----------------------------------------------------
-
-Similar selections are performed for the pname:y, pname:z, and pname:w
-coordinates.
-This swizzling is applied before clipping and perspective divide.
-If the swizzle for an active viewport index is not specified, the swizzle
-for pname:x is ename:VK_VIEWPORT_COORDINATE_SWIZZLE_POSITIVE_X_NV, pname:y
-is ename:VK_VIEWPORT_COORDINATE_SWIZZLE_POSITIVE_Y_NV, pname:z is
-ename:VK_VIEWPORT_COORDINATE_SWIZZLE_POSITIVE_Z_NV and pname:w is
-ename:VK_VIEWPORT_COORDINATE_SWIZZLE_POSITIVE_W_NV.
-
-Viewport swizzle parameters are specified by setting the pname:pNext pointer
-of sname:VkGraphicsPipelineCreateInfo to point to a
-sname:VkPipelineViewportSwizzleStateCreateInfoNV structure.
-slink:VkPipelineViewportSwizzleStateCreateInfoNV uses
-sname:VkViewportSwizzleNV to set the viewport swizzle parameters.
-
-[open,refpage='VkViewportSwizzleNV',desc='Structure specifying a viewport swizzle',type='structs']
---
-The sname:VkViewportSwizzleNV structure is defined as:
-
-include::{generated}/api/structs/VkViewportSwizzleNV.txt[]
-
-  * pname:x is a elink:VkViewportCoordinateSwizzleNV value specifying the
-    swizzle operation to apply to the x component of the primitive
-  * pname:y is a elink:VkViewportCoordinateSwizzleNV value specifying the
-    swizzle operation to apply to the y component of the primitive
-  * pname:z is a elink:VkViewportCoordinateSwizzleNV value specifying the
-    swizzle operation to apply to the z component of the primitive
-  * pname:w is a elink:VkViewportCoordinateSwizzleNV value specifying the
-    swizzle operation to apply to the w component of the primitive
-
-include::{generated}/validity/structs/VkViewportSwizzleNV.txt[]
---
-
-[open,refpage='VkViewportCoordinateSwizzleNV',desc='Specify how a viewport coordinate is swizzled',type='enums']
---
-Possible values of the slink:VkViewportSwizzleNV::pname:x, pname:y, pname:z,
-and pname:w members, specifying swizzling of the corresponding components of
-primitives, are:
-
-include::{generated}/api/enums/VkViewportCoordinateSwizzleNV.txt[]
-
-These values are described in detail in <<vertexpostproc-viewport-swizzle,
-Viewport Swizzle>>.
---
-endif::VK_NV_viewport_swizzle[]
-
-
-[[vertexpostproc-flatshading]]
-== Flat Shading
-
-_Flat shading_ a vertex output attribute means to assign all vertices of the
-primitive the same value for that output.
-The output values assigned are those of the _provoking vertex_ of the
-primitive.
-Flat shading is applied to those vertex attributes that
-<<interfaces-iointerfaces-matching,match>> fragment input attributes which
-are decorated as code:Flat.
-
-If neither <<geometry,geometry>> nor <<tessellation,tessellation shading>>
-is active, the provoking vertex is determined by the
-<<drawing-primitive-topologies, primitive topology>> defined by
-slink:VkPipelineInputAssemblyStateCreateInfo:pname:topology used to execute
-the <<drawing,drawing command>>.
-
-If <<geometry,geometry shading>> is active, the provoking vertex is
-determined by the <<drawing-primitive-topologies, primitive topology>>
-defined by the <<drawing-point-lists, code:OutputPoints>>,
-<<drawing-line-strips, code:OutputLineStrips>>, or
-<<drawing-triangle-strips, code:OutputTriangleStrips>> execution mode.
-
-If <<tessellation,tessellation shading>> is active but <<geometry,geometry
-shading>> is not, the provoking vertex may: be any of the vertices in each
-primitive.
-
-ifdef::VK_EXT_provoking_vertex[]
-[open,refpage='VkPipelineRasterizationProvokingVertexStateCreateInfoEXT',desc='Structure specifying provoking vertex mode used by a graphics pipeline',type='structs']
---
-For a given primitive topology, the pipeline's provoking vertex mode
-determines which vertex is the provoking vertex.
-To specify the provoking vertex mode, include a
-sname:VkPipelineRasterizationProvokingVertexStateCreateInfoEXT structure in
-the slink:VkPipelineRasterizationStateCreateInfo::pname:pNext chain when
-creating the pipeline.
-
-The sname:VkPipelineRasterizationProvokingVertexStateCreateInfoEXT structure
-is defined as:
-
-include::{generated}/api/structs/VkPipelineRasterizationProvokingVertexStateCreateInfoEXT.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:provokingVertexMode is a elink:VkProvokingVertexModeEXT value
-    selecting the provoking vertex mode.
-
-If this struct is not provided when creating the pipeline, the pipeline will
-use the ename:VK_PROVOKING_VERTEX_MODE_FIRST_VERTEX_EXT mode.
-
-If the
-<<limits-provokingVertexModePerPipeline,provokingVertexModePerPipeline>>
-limit is ename:VK_FALSE, then all pipelines bound within a render pass
-instance must: have the same pname:provokingVertexMode.
-
-.Valid Usage
-****
-  * [[VUID-VkPipelineRasterizationProvokingVertexStateCreateInfoEXT-provokingVertexMode-04883]]
-    If pname:provokingVertexMode is
-    ename:VK_PROVOKING_VERTEX_MODE_LAST_VERTEX_EXT, then the
-    <<features-provokingVertexLast,provokingVertexLast>> feature must: be
-    enabled
-****
-
-include::{generated}/validity/structs/VkPipelineRasterizationProvokingVertexStateCreateInfoEXT.txt[]
---
-
-[open,refpage='VkProvokingVertexModeEXT',desc='Specify which vertex in a primitive is the provoking vertex',type='enums']
---
-Possible values of
-slink:VkPipelineRasterizationProvokingVertexStateCreateInfoEXT::pname:provokingVertexMode
-are:
-
-include::{generated}/api/enums/VkProvokingVertexModeEXT.txt[]
-
-  * ename:VK_PROVOKING_VERTEX_MODE_FIRST_VERTEX_EXT specifies that the
-    provoking vertex is the first non-adjacency vertex in the list of
-    vertices used by a primitive.
-  * ename:VK_PROVOKING_VERTEX_MODE_LAST_VERTEX_EXT specifies that the
-    provoking vertex is the last non-adjacency vertex in the list of
-    vertices used by a primitive.
-
-These modes are described more precisely in
-<<drawing-primitive-topologies,Primitive Topologies>>.
---
-endif::VK_EXT_provoking_vertex[]
-
-
-[[vertexpostproc-clipping]]
-== Primitive Clipping
-
-Primitives are culled against the _cull volume_ and then clipped to the
-_clip volume_.
-In clip coordinates, the _view volume_ is defined by:
-
-[latexmath]
-++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-\begin{array}{c}
--w_c \leq x_c \leq w_c \\
--w_c \leq y_c \leq w_c \\
-0 \leq z_c \leq w_c
-\end{array}
-++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-This view volume can: be further restricted by as many as
-sname:VkPhysicalDeviceLimits::pname:maxClipDistances client-defined
-half-spaces.
-
-The cull volume is the intersection of up to
-sname:VkPhysicalDeviceLimits::pname:maxCullDistances client-defined
-half-spaces (if no client-defined cull half-spaces are enabled, culling
-against the cull volume is skipped).
-
-A shader must: write a single cull distance for each enabled cull half-space
-to elements of the code:CullDistance array.
-If the cull distance for any enabled cull half-space is negative for all of
-the vertices of the primitive under consideration, the primitive is
-discarded.
-Otherwise the primitive is clipped against the clip volume as defined below.
-
-The clip volume is the intersection of up to
-sname:VkPhysicalDeviceLimits::pname:maxClipDistances client-defined
-half-spaces with the view volume (if no client-defined clip half-spaces are
-enabled, the clip volume is the view volume).
-
-A shader must: write a single clip distance for each enabled clip half-space
-to elements of the code:ClipDistance array.
-Clip half-space [eq]#i# is then given by the set of points satisfying the
-inequality
-
-  {empty}:: [eq]#c~i~(**P**) {geq} 0#
-
-where [eq]#c~i~(**P**)# is the clip distance [eq]#i# at point [eq]#**P**#.
-For point primitives, [eq]#c~i~(**P**)# is simply the clip distance for the
-vertex in question.
-For line and triangle primitives, per-vertex clip distances are interpolated
-using a weighted mean, with weights derived according to the algorithms
-described in sections <<primsrast-lines-basic,Basic Line Segment
-Rasterization>> and <<primsrast-polygons-basic,Basic Polygon
-Rasterization>>, using the perspective interpolation equations.
-
-The number of client-defined clip and cull half-spaces that are enabled is
-determined by the explicit size of the built-in arrays code:ClipDistance and
-code:CullDistance, respectively, declared as an output in the interface of
-the entry point of the final shader stage before clipping.
-
-ifdef::VK_EXT_depth_clip_enable[]
-If slink:VkPipelineRasterizationDepthClipStateCreateInfoEXT is present in
-the graphics pipeline state then depth clipping is disabled if
-slink:VkPipelineRasterizationDepthClipStateCreateInfoEXT::pname:depthClipEnable
-is ename:VK_FALSE.
-Otherwise, if slink:VkPipelineRasterizationDepthClipStateCreateInfoEXT is
-not present, depth clipping is disabled when
-slink:VkPipelineRasterizationStateCreateInfo::pname:depthClampEnable is
-ename:VK_TRUE.
-endif::VK_EXT_depth_clip_enable[]
-ifndef::VK_EXT_depth_clip_enable[]
-Depth clamping is enabled or disabled via the pname:depthClampEnable enable
-of the slink:VkPipelineRasterizationStateCreateInfo structure.
-Depth clipping is disabled when pname:depthClampEnable is ename:VK_TRUE.
-endif::VK_EXT_depth_clip_enable[]
-When depth clipping is disabled, the plane equation
-
-  {empty}:: [eq]#0 {leq} z~c~ {leq} w~c~#
-
-(see the clip volume definition above) is ignored by view volume clipping
-(effectively, there is no near or far plane clipping).
-
-If the primitive under consideration is a point or line segment, then
-clipping passes it unchanged if its vertices lie entirely within the clip
-volume.
-
-ifndef::VK_VERSION_1_1,VK_KHR_maintenance2[]
-If a point's vertex lies outside of the clip volume, the entire primitive
-may: be discarded.
-endif::VK_VERSION_1_1,VK_KHR_maintenance2[]
-
-ifdef::VK_VERSION_1_1,VK_KHR_maintenance2[]
-[open,refpage='VkPointClippingBehavior',desc='Enum specifying the point clipping behavior',type='enums']
---
-Possible values of
-slink:VkPhysicalDevicePointClippingProperties::pname:pointClippingBehavior,
-specifying clipping behavior of a point primitive whose vertex lies outside
-the clip volume, are:
-
-include::{generated}/api/enums/VkPointClippingBehavior.txt[]
-
-ifdef::VK_KHR_maintenance2[]
-or the equivalent
-
-include::{generated}/api/enums/VkPointClippingBehaviorKHR.txt[]
-endif::VK_KHR_maintenance2[]
-
-  * ename:VK_POINT_CLIPPING_BEHAVIOR_ALL_CLIP_PLANES specifies that the
-    primitive is discarded if the vertex lies outside any clip plane,
-    including the planes bounding the view volume.
-  * ename:VK_POINT_CLIPPING_BEHAVIOR_USER_CLIP_PLANES_ONLY specifies that
-    the primitive is discarded only if the vertex lies outside any user clip
-    plane.
---
-endif::VK_VERSION_1_1,VK_KHR_maintenance2[]
-
-If either of a line segment's vertices lie outside of the clip volume, the
-line segment may: be clipped, with new vertex coordinates computed for each
-vertex that lies outside the clip volume.
-A clipped line segment endpoint lies on both the original line segment and
-the boundary of the clip volume.
-
-This clipping produces a value, [eq]#0 {leq} t {leq} 1#, for each clipped
-vertex.
-If the coordinates of a clipped vertex are [eq]#**P**# and the unclipped
-line segment's vertex coordinates are [eq]#**P**~1~# and [eq]#**P**~2~#,
-then [eq]#t# satisfies the following equation
-
-  {empty}:: [eq]#**P** = t **P**~1~ {plus} (1-t) **P**~2~#.
-
-[eq]#t# is used to clip vertex output attributes as described in
-<<vertexpostproc-clipping-shader-outputs,Clipping Shader Outputs>>.
-
-If the primitive is a polygon, it passes unchanged if every one of its edges
-lies entirely inside the clip volume, and is either clipped or discarded
-otherwise.
-If the edges of the polygon intersect the boundary of the clip volume, the
-intersecting edges are reconnected by new edges that lie along the boundary
-of the clip volume - in some cases requiring the introduction of new
-vertices into a polygon.
-
-If a polygon intersects an edge of the clip volume's boundary, the clipped
-polygon must: include a point on this boundary edge.
-
-Primitives rendered with user-defined half-spaces must: satisfy a
-complementarity criterion.
-Suppose a series of primitives is drawn where each vertex [eq]#i# has a
-single specified clip distance [eq]#d~i~# (or a number of similarly
-specified clip distances, if multiple half-spaces are enabled).
-Next, suppose that the same series of primitives are drawn again with each
-such clip distance replaced by [eq]#-d~i~# (and the graphics pipeline is
-otherwise the same).
-In this case, primitives must: not be missing any pixels, and pixels must:
-not be drawn twice in regions where those primitives are cut by the clip
-planes.
-
-
-[[vertexpostproc-clipping-shader-outputs]]
-== Clipping Shader Outputs
-
-Next, vertex output attributes are clipped.
-The output values associated with a vertex that lies within the clip volume
-are unaffected by clipping.
-If a primitive is clipped, however, the output values assigned to vertices
-produced by clipping are clipped.
-
-Let the output values assigned to the two vertices [eq]#**P**~1~# and
-[eq]#**P**~2~# of an unclipped edge be [eq]#**c**~1~# and [eq]#**c**~2~#.
-The value of [eq]#t# (see <<vertexpostproc-clipping,Primitive Clipping>>)
-for a clipped point [eq]#**P**# is used to obtain the output value
-associated with [eq]#**P**# as
-
-  {empty}:: [eq]#**c** = t **c**~1~ {plus} (1-t) **c**~2~#.
-
-(Multiplying an output value by a scalar means multiplying each of _x_, _y_,
-_z_, and _w_ by the scalar.)
-
-Since this computation is performed in clip space before division by
-[eq]#w~c~#, clipped output values are perspective-correct.
-
-Polygon clipping creates a clipped vertex along an edge of the clip volume's
-boundary.
-This situation is handled by noting that polygon clipping proceeds by
-clipping against one half-space at a time.
-Output value clipping is done in the same way, so that clipped points always
-occur at the intersection of polygon edges (possibly already clipped) with
-the clip volume's boundary.
-
-For vertex output attributes whose matching fragment input attributes are
-decorated with code:NoPerspective, the value of [eq]#t# used to obtain the
-output value associated with [eq]#**P**# will be adjusted to produce results
-that vary linearly in framebuffer space.
-
-Output attributes of integer or unsigned integer type must: always be flat
-shaded.
-Flat shaded attributes are constant over the primitive being rasterized (see
-<<primsrast-lines-basic,Basic Line Segment Rasterization>> and
-<<primsrast-polygons-basic,Basic Polygon Rasterization>>), and no
-interpolation is performed.
-The output value [eq]#**c**# is taken from either [eq]#**c**~1~# or
-[eq]#**c**~2~#, since flat shading has already occurred and the two values
-are identical.
-
-ifdef::VK_NV_clip_space_w_scaling[]
-include::VK_NV_clip_space_w_scaling/vertexpostproc.txt[]
-endif::VK_NV_clip_space_w_scaling[]
-
-
-[[vertexpostproc-coord-transform]]
-== Coordinate Transformations
-
-_Clip coordinates_ for a vertex result from shader execution, which yields a
-vertex coordinate code:Position.
-
-Perspective division on clip coordinates yields _normalized device
-coordinates_, followed by a _viewport_ transformation (see
-<<vertexpostproc-viewport,Controlling the Viewport>>) to convert these
-coordinates into _framebuffer coordinates_.
-
-If a vertex in clip coordinates has a position given by
-
-[latexmath]
-++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-\left(\begin{array}{c}
-x_c \\
-y_c \\
-z_c \\
-w_c
-\end{array}\right)
-++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-then the vertex's normalized device coordinates are
-[latexmath]
-++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-\left(
-        \begin{array}{c}
-                x_d \\
-                y_d \\
-                z_d
-        \end{array}
-\right) =
-\left(
-        \begin{array}{c}
-                \frac{x_c}{w_c} \\
-                \frac{y_c}{w_c} \\
-                \frac{z_c}{w_c}
-        \end{array}
-\right)
-++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-
-ifdef::VK_QCOM_render_pass_transform[]
-[[vertexpostproc-renderpass-transform]]
-== Render Pass Transform
-
-A _render pass transform_ can: be enabled for render pass instances.
-The clip coordinates [eq]#(x~c~, y~c~)# that result from vertex shader
-execution are transformed by a rotation of 0, 90, 180, or 270 degrees in the
-XY plane, centered at the origin.
-
-When _Render pass transform_ is enabled, the transform applies to all
-primitives for all subpasses of the render pass.
-The transformed vertex in clip coordinates has a position given by
-
-[latexmath]
-++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-\left(
-        \begin{array}{c}
-                x_{c_{trans}} \\
-                y_{c_{trans}} \\
-                z_{c_{trans}}
-        \end{array}
-\right) =
-\left(
-        \begin{array}{c}
-                x_{c} \cos \theta - y_{c} \sin \theta \\
-                x_{c} \sin \theta + y_{c} \cos \theta \\
-                z_c
-        \end{array}
-\right)
-++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-where
-
-  * _[eq]#{theta}#_ is 0 degrees for
-    ename:VK_SURFACE_TRANSFORM_IDENTITY_BIT_KHR
-  * _[eq]#{theta}#_ is 90 degrees for
-    ename:VK_SURFACE_TRANSFORM_ROTATE_90_BIT_KHR
-  * _[eq]#{theta}#_ is 180 degrees for
-    ename:VK_SURFACE_TRANSFORM_ROTATE_180_BIT_KHR
-  * _[eq]#{theta}#_ is 270 degrees for
-    ename:VK_SURFACE_TRANSFORM_ROTATE_270_BIT_KHR
-
-
-The transformed vertex's normalized device coordinates are
-[latexmath]
-++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-\left(
-        \begin{array}{c}
-                x_d \\
-                y_d \\
-                z_d
-        \end{array}
-\right) =
-\left(
-        \begin{array}{c}
-                \frac{x_{c_{trans}}}{w_c} \\
-                \frac{y_{c_{trans}}}{w_c} \\
-                \frac{z_{c_{trans}}}{w_c}
-        \end{array}
-\right)
-++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-
-When render pass transform is enabled for a render pass instance, the
-following additional features are enabled:
-
-  * Each slink:VkViewport specified by either
-    slink:VkPipelineViewportStateCreateInfo::pname:pViewports or
-    flink:vkCmdSetViewport will have its width/height [eq]#(p~x~, p~y~)# and
-    its center [eq]#(o~x~, o~y~)# similarly transformed by the
-    implementation.
-  * Each scissor specified by
-    slink:VkPipelineViewportStateCreateInfo::pname:pScissors or
-    flink:vkCmdSetScissor will have its [eq]#(offset~x~, offset~y~)# and
-    [eq]#(extent~x~, extent~y~)# similarly transformed by the
-    implementation.
-  * The pname:renderArea specified in
-    slink:VkCommandBufferInheritanceRenderPassTransformInfoQCOM and
-    slink:VkRenderPassBeginInfo will be similarly transformed by the
-    implementation.
-  * The [eq]#(x, y)# components of shader variables with built-in
-    decorations code:FragCoord, code:SamplePosition, or code:PointCoord will
-    be similarly transformed by the implementation.
-  * The [eq]#(x,y)# components of the code:offset operand of the
-    code:InterpolateAtOffset extended instruction will be similarly
-    transformed by the implementation.
-  * The values returned by SPIR-V <<shaders-derivative-operations,
-    derivative instructions>> code:OpDPdx, code:OpDPdy, code:OpDPdxCourse,
-    code:OpDPdyCourse, code:OpDPdxFine, code:OpDPdyFine will be similarly
-    transformed by the implementation.
-
-
-The net result of the above, is that applications can: act as if rendering
-to a framebuffer oriented with the
-slink:VkSurfaceCapabilitiesKHR::pname:currentTransform.
-In other words, applications can: act as if the presentation engine will be
-performing the transformation of the swapchain image after rendering and
-prior to presentation to the user.
-In fact, the transformation of the various items cited above are being
-handled by the implementation as the rendering takes place.
-
-endif::VK_QCOM_render_pass_transform[]
-
-
-[[vertexpostproc-viewport]]
-== Controlling the Viewport
-
-The viewport transformation is determined by the selected viewport's width
-and height in pixels, [eq]#p~x~# and [eq]#p~y~#, respectively, and its
-center [eq]#(o~x~, o~y~)# (also in pixels), as well as its depth range min
-and max determining a depth range scale value [eq]#p~z~# and a depth range
-bias value [eq]#o~z~# (defined below).
-The vertex's framebuffer coordinates [eq]#(x~f~, y~f~, z~f~)# are given by
-
-  {empty}:: [eq]#x~f~ = (p~x~ / 2) x~d~ {plus} o~x~#
-  {empty}:: [eq]#y~f~ = (p~y~ / 2) y~d~ {plus} o~y~#
-  {empty}:: [eq]#z~f~ = p~z~ {times} z~d~ {plus} o~z~#
-
-Multiple viewports are available, numbered zero up to
-sname:VkPhysicalDeviceLimits::pname:maxViewports minus one.
-The number of viewports used by a pipeline is controlled by the
-pname:viewportCount member of the sname:VkPipelineViewportStateCreateInfo
-structure used in pipeline creation.
-
-[eq]#x~f~# and [eq]#y~f~# have limited precision, where the number of
-fractional bits retained is specified by
-sname:VkPhysicalDeviceLimits::pname:subPixelPrecisionBits.
-ifdef::VK_EXT_line_rasterization[]
-When rasterizing <<primsrast-lines,line segments>>, the number of fractional
-bits is specified by
-sname:VkPhysicalDeviceLineRasterizationPropertiesEXT::pname:lineSubPixelPrecisionBits.
-endif::VK_EXT_line_rasterization[]
-
-[open,refpage='VkPipelineViewportStateCreateInfo',desc='Structure specifying parameters of a newly created pipeline viewport state',type='structs']
---
-The sname:VkPipelineViewportStateCreateInfo structure is defined as:
-
-include::{generated}/api/structs/VkPipelineViewportStateCreateInfo.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:flags is reserved for future use.
-  * pname:viewportCount is the number of viewports used by the pipeline.
-  * pname:pViewports is a pointer to an array of slink:VkViewport
-    structures, defining the viewport transforms.
-    If the viewport state is dynamic, this member is ignored.
-  * pname:scissorCount is the number of <<fragops-scissor,scissors>> and
-    must: match the number of viewports.
-  * pname:pScissors is a pointer to an array of slink:VkRect2D structures
-    defining the rectangular bounds of the scissor for the corresponding
-    viewport.
-    If the scissor state is dynamic, this member is ignored.
-
-.Valid Usage
-****
-  * [[VUID-VkPipelineViewportStateCreateInfo-viewportCount-01216]]
-    If the <<features-multiViewport,multiple viewports>> feature is not
-    enabled, pname:viewportCount must: not be greater than `1`
-  * [[VUID-VkPipelineViewportStateCreateInfo-scissorCount-01217]]
-    If the <<features-multiViewport,multiple viewports>> feature is not
-    enabled, pname:scissorCount must: not be greater than `1`
-  * [[VUID-VkPipelineViewportStateCreateInfo-viewportCount-01218]]
-    pname:viewportCount must: be less than or equal to
-    sname:VkPhysicalDeviceLimits::pname:maxViewports
-  * [[VUID-VkPipelineViewportStateCreateInfo-scissorCount-01219]]
-    pname:scissorCount must: be less than or equal to
-    sname:VkPhysicalDeviceLimits::pname:maxViewports
-ifndef::VK_EXT_extended_dynamic_state[]
-  * [[VUID-VkPipelineViewportStateCreateInfo-scissorCount-01220]]
-    pname:scissorCount and pname:viewportCount must: be identical
-endif::VK_EXT_extended_dynamic_state[]
-  * [[VUID-VkPipelineViewportStateCreateInfo-x-02821]]
-    The pname:x and pname:y members of pname:offset member of any element of
-    pname:pScissors must: be greater than or equal to `0`
-  * [[VUID-VkPipelineViewportStateCreateInfo-offset-02822]]
-    Evaluation of [eq]#(pname:offset.x {plus} pname:extent.width)# must: not
-    cause a signed integer addition overflow for any element of
-    pname:pScissors
-  * [[VUID-VkPipelineViewportStateCreateInfo-offset-02823]]
-    Evaluation of [eq]#(pname:offset.y {plus} pname:extent.height)# must:
-    not cause a signed integer addition overflow for any element of
-    pname:pScissors
-ifndef::VK_EXT_extended_dynamic_state[]
-  * [[VUID-VkPipelineViewportStateCreateInfo-viewportCount-arraylength]]
-    pname:viewportCount must: be greater than `0`
-  * [[VUID-VkPipelineViewportStateCreateInfo-scissorCount-arraylength]]
-    pname:scissorCount must: be greater than `0`
-endif::VK_EXT_extended_dynamic_state[]
-ifdef::VK_EXT_extended_dynamic_state[]
-  * [[VUID-VkPipelineViewportStateCreateInfo-scissorCount-04134]]
-    If the graphics pipeline is being created without
-    ename:VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT and
-    ename:VK_DYNAMIC_STATE_SCISSOR_WITH_COUNT_EXT set then
-    pname:scissorCount and pname:viewportCount must: be identical
-  * [[VUID-VkPipelineViewportStateCreateInfo-viewportCount-04135]]
-    If the graphics pipeline is being created with
-    ename:VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT set then
-    pname:viewportCount must: be `0`, otherwise it must: be greater than `0`
-  * [[VUID-VkPipelineViewportStateCreateInfo-scissorCount-04136]]
-    If the graphics pipeline is being created with
-    ename:VK_DYNAMIC_STATE_SCISSOR_WITH_COUNT_EXT set then
-    pname:scissorCount must: be `0`, otherwise it must: be greater than `0`
-endif::VK_EXT_extended_dynamic_state[]
-ifdef::VK_NV_clip_space_w_scaling[]
-  * [[VUID-VkPipelineViewportStateCreateInfo-viewportWScalingEnable-01726]]
-    If the pname:viewportWScalingEnable member of a
-    slink:VkPipelineViewportWScalingStateCreateInfoNV structure included in
-    the pname:pNext chain is ename:VK_TRUE, the pname:viewportCount member
-    of the slink:VkPipelineViewportWScalingStateCreateInfoNV structure must:
-    be greater than or equal to
-    slink:VkPipelineViewportStateCreateInfo::pname:viewportCount
-endif::VK_NV_clip_space_w_scaling[]
-****
-
-include::{generated}/validity/structs/VkPipelineViewportStateCreateInfo.txt[]
---
-
-ifdef::VK_EXT_extended_dynamic_state[]
-[open,refpage='vkCmdSetViewportWithCountEXT',desc='Set the viewport count and viewports dynamically for a command buffer',type='protos']
---
-To <<pipelines-dynamic-state, dynamically set>> the viewport count and
-viewports, call:
-
-include::{generated}/api/protos/vkCmdSetViewportWithCountEXT.txt[]
-
-  * pname:commandBuffer is the command buffer into which the command will be
-    recorded.
-  * pname:viewportCount specifies the viewport count.
-  * pname:pViewports specifies the viewports to use for drawing.
-
-This command sets the viewport count and viewports state for subsequent
-drawing commands when the graphics pipeline is created with
-ename:VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT set in
-slink:VkPipelineDynamicStateCreateInfo::pname:pDynamicStates.
-Otherwise, this state is specified by the corresponding
-slink:VkPipelineViewportStateCreateInfo::pname:viewportCount and
-pname:pViewports values used to create the currently active pipeline.
-
-.Valid Usage
-****
-  * [[VUID-vkCmdSetViewportWithCountEXT-None-03393]]
-    The <<features-extendedDynamicState, extendedDynamicState>> feature
-    must: be enabled
-  * [[VUID-vkCmdSetViewportWithCountEXT-viewportCount-03394]]
-    pname:viewportCount must: be between `1` and
-    sname:VkPhysicalDeviceLimits::pname:maxViewports, inclusive
-  * [[VUID-vkCmdSetViewportWithCountEXT-viewportCount-03395]]
-    If the <<features-multiViewport,multiple viewports>> feature is not
-    enabled, pname:viewportCount must: be `1`
-ifdef::VK_NV_inherited_viewport_scissor[]
-  * [[VUID-vkCmdSetViewportWithCountEXT-commandBuffer-04819]]
-    pname:commandBuffer must: not have
-    slink:VkCommandBufferInheritanceViewportScissorInfoNV::pname:viewportScissor2D
-    enabled
-endif::VK_NV_inherited_viewport_scissor[]
-****
-
-include::{generated}/validity/protos/vkCmdSetViewportWithCountEXT.txt[]
---
-
-[open,refpage='vkCmdSetScissorWithCountEXT',desc='Set the scissor count and scissor rectangular bounds dynamically for a command buffer',type='protos']
---
-To <<pipelines-dynamic-state, dynamically set>> the scissor count and
-scissor rectangular bounds, call:
-
-include::{generated}/api/protos/vkCmdSetScissorWithCountEXT.txt[]
-
-  * pname:commandBuffer is the command buffer into which the command will be
-    recorded.
-  * pname:scissorCount specifies the scissor count.
-  * pname:pScissors specifies the scissors to use for drawing.
-
-This command sets the scissor count and scissor rectangular bounds state for
-subsequence drawing commands when the graphics pipeline is created with
-ename:VK_DYNAMIC_STATE_SCISSOR_WITH_COUNT_EXT set in
-slink:VkPipelineDynamicStateCreateInfo::pname:pDynamicStates.
-Otherwise, this state is specified by the corresponding
-slink:VkPipelineViewportStateCreateInfo::pname:scissorCount and
-pname:pScissors values used to create the currently active pipeline.
-
-.Valid Usage
-****
-  * [[VUID-vkCmdSetScissorWithCountEXT-None-03396]]
-    The <<features-extendedDynamicState, extendedDynamicState>> feature
-    must: be enabled
-  * [[VUID-vkCmdSetScissorWithCountEXT-scissorCount-03397]]
-    pname:scissorCount must: be between `1` and
-    sname:VkPhysicalDeviceLimits::pname:maxViewports, inclusive
-  * [[VUID-vkCmdSetScissorWithCountEXT-scissorCount-03398]]
-    If the <<features-multiViewport,multiple viewports>> feature is not
-    enabled, pname:scissorCount must: be `1`
-  * [[VUID-vkCmdSetScissorWithCountEXT-x-03399]]
-    The pname:x and pname:y members of pname:offset member of any element of
-    pname:pScissors must: be greater than or equal to `0`
-  * [[VUID-vkCmdSetScissorWithCountEXT-offset-03400]]
-    Evaluation of [eq]#(pname:offset.x {plus} pname:extent.width)# must: not
-    cause a signed integer addition overflow for any element of
-    pname:pScissors
-  * [[VUID-vkCmdSetScissorWithCountEXT-offset-03401]]
-    Evaluation of [eq]#(pname:offset.y {plus} pname:extent.height)# must:
-    not cause a signed integer addition overflow for any element of
-    pname:pScissors
-ifdef::VK_NV_inherited_viewport_scissor[]
-  * [[VUID-vkCmdSetScissorWithCountEXT-commandBuffer-04820]]
-    pname:commandBuffer must: not have
-    slink:VkCommandBufferInheritanceViewportScissorInfoNV::pname:viewportScissor2D
-    enabled
-endif::VK_NV_inherited_viewport_scissor[]
-****
-
-include::{generated}/validity/protos/vkCmdSetScissorWithCountEXT.txt[]
---
-endif::VK_EXT_extended_dynamic_state[]
-
-[open,refpage='VkPipelineViewportStateCreateFlags',desc='Reserved for future use',type='flags']
---
-include::{generated}/api/flags/VkPipelineViewportStateCreateFlags.txt[]
-
-tname:VkPipelineViewportStateCreateFlags is a bitmask type for setting a
-mask, but is currently reserved for future use.
---
-
-ifndef::VK_VERSION_1_2,VK_EXT_shader_viewport_index_layer,VK_NV_viewport_array2[]
-If a geometry shader is active and has an output variable decorated with
-code:ViewportIndex, the viewport transformation uses the viewport
-corresponding to the value assigned to code:ViewportIndex taken from an
-implementation-dependent vertex of each primitive.
-If code:ViewportIndex is outside the range zero to pname:viewportCount minus
-one for a primitive, or if the geometry shader did not assign a value to
-code:ViewportIndex for all vertices of a primitive due to flow control, the
-values resulting from the viewport transformation of the vertices of such
-primitives are undefined:.
-If no geometry shader is active, or if the geometry shader does not have an
-output decorated with code:ViewportIndex, the viewport numbered zero is used
-by the viewport transformation.
-endif::VK_VERSION_1_2,VK_EXT_shader_viewport_index_layer,VK_NV_viewport_array2[]
-
-ifdef::VK_VERSION_1_2,VK_EXT_shader_viewport_index_layer,VK_NV_viewport_array2[]
-ifdef::VK_NV_viewport_array2[]
-A _<<pipeline-graphics-subsets-pre-rasterization,pre-rasterization shader
-stage>>_ can: direct each primitive to zero or more viewports.
-The destination viewports for a primitive are selected by the last active
-<<pipeline-graphics-subsets-pre-rasterization,pre-rasterization shader
-stage>> that has an output variable decorated with code:ViewportIndex
-(selecting a single viewport) or code:ViewportMaskNV (selecting multiple
-viewports).
-The viewport transform uses the viewport corresponding to either the value
-assigned to code:ViewportIndex or one of the bits set in
-code:ViewportMaskNV, and taken from an implementation-dependent vertex of
-each primitive.
-If code:ViewportIndex or any of the bits in code:ViewportMaskNV are outside
-the range zero to pname:viewportCount minus one for a primitive, or if the
-last active <<pipeline-graphics-subsets-pre-rasterization,pre-rasterization
-shader stage>> did not assign a value to either code:ViewportIndex or
-code:ViewportMaskNV for all vertices of a primitive due to flow control, the
-values resulting from the viewport transformation of the vertices of such
-primitives are undefined:.
-If the last <<pipeline-graphics-subsets-pre-rasterization,pre-rasterization
-shader stage>> does not have an output decorated with code:ViewportIndex or
-code:ViewportMaskNV, the viewport numbered zero is used by the viewport
-transformation.
-endif::VK_NV_viewport_array2[]
-ifndef::VK_NV_viewport_array2[]
-A _<<pipeline-graphics-subsets-pre-rasterization,pre-rasterization shader
-stage>>_ can: direct each primitive to one of several viewports.
-The destination viewport for a primitive is selected by the last active
-<<pipeline-graphics-subsets-pre-rasterization,pre-rasterization shader
-stage>> that has an output variable decorated with code:ViewportIndex.
-The viewport transform uses the viewport corresponding to the value assigned
-to code:ViewportIndex, and taken from an implementation-dependent vertex of
-each primitive.
-If code:ViewportIndex is outside the range zero to pname:viewportCount minus
-one for a primitive, or if the last active
-<<pipeline-graphics-subsets-pre-rasterization,pre-rasterization shader
-stage>> did not assign a value to code:ViewportIndex for all vertices of a
-primitive due to flow control, the values resulting from the viewport
-transformation of the vertices of such primitives are undefined:.
-If the last <<pipeline-graphics-subsets-pre-rasterization,pre-rasterization
-shader stage>> does not have an output decorated with code:ViewportIndex,
-the viewport numbered zero is used by the viewport transformation.
-endif::VK_NV_viewport_array2[]
-endif::VK_VERSION_1_2,VK_EXT_shader_viewport_index_layer,VK_NV_viewport_array2[]
-
-A single vertex can: be used in more than one individual primitive, in
-primitives such as ename:VK_PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP.
-In this case, the viewport transformation is applied separately for each
-primitive.
-
-[open,refpage='vkCmdSetViewport',desc='Set the viewport dynamically for a command buffer',type='protos']
---
-To <<pipelines-dynamic-state, dynamically set>> the viewport transformation
-parameters, call:
-
-include::{generated}/api/protos/vkCmdSetViewport.txt[]
-
-  * pname:commandBuffer is the command buffer into which the command will be
-    recorded.
-  * pname:firstViewport is the index of the first viewport whose parameters
-    are updated by the command.
-  * pname:viewportCount is the number of viewports whose parameters are
-    updated by the command.
-  * pname:pViewports is a pointer to an array of slink:VkViewport structures
-    specifying viewport parameters.
-
-This command sets the viewport transformation parameters state for
-subsequent drawing commands when the graphics pipeline is created with
-ename:VK_DYNAMIC_STATE_VIEWPORT set in
-slink:VkPipelineDynamicStateCreateInfo::pname:pDynamicStates.
-Otherwise, this state is specified by the
-sname:VkPipelineViewportStateCreateInfo::pname:pViewports values used to
-create the currently active pipeline.
-
-The viewport parameters taken from element [eq]#i# of pname:pViewports
-replace the current state for the viewport index [eq]#pname:firstViewport
-{plus} i#, for [eq]#i# in [eq]#[0, pname:viewportCount)#.
-
-.Valid Usage
-****
-  * [[VUID-vkCmdSetViewport-firstViewport-01223]]
-    The sum of pname:firstViewport and pname:viewportCount must: be between
-    `1` and sname:VkPhysicalDeviceLimits::pname:maxViewports, inclusive
-  * [[VUID-vkCmdSetViewport-firstViewport-01224]]
-    If the <<features-multiViewport,multiple viewports>> feature is not
-    enabled, pname:firstViewport must: be `0`
-  * [[VUID-vkCmdSetViewport-viewportCount-01225]]
-    If the <<features-multiViewport,multiple viewports>> feature is not
-    enabled, pname:viewportCount must: be `1`
-ifdef::VK_NV_inherited_viewport_scissor[]
-  * [[VUID-vkCmdSetViewport-commandBuffer-04821]]
-    pname:commandBuffer must: not have
-    slink:VkCommandBufferInheritanceViewportScissorInfoNV::pname:viewportScissor2D
-    enabled
-endif::VK_NV_inherited_viewport_scissor[]
-****
-
-include::{generated}/validity/protos/vkCmdSetViewport.txt[]
---
-
-Both slink:VkPipelineViewportStateCreateInfo and flink:vkCmdSetViewport use
-sname:VkViewport to set the viewport transformation parameters.
-
-[open,refpage='VkViewport',desc='Structure specifying a viewport',type='structs']
---
-The sname:VkViewport structure is defined as:
-
-include::{generated}/api/structs/VkViewport.txt[]
-
-  * pname:x and pname:y are the viewport's upper left corner [eq]#(x,y)#.
-  * pname:width and pname:height are the viewport's width and height,
-    respectively.
-  * pname:minDepth and pname:maxDepth are the depth range for the viewport.
-
-[NOTE]
-.Note
-====
-Despite their names, pname:minDepth can: be less than, equal to, or greater
-than pname:maxDepth.
-====
-
-The framebuffer depth coordinate [eq]#pname:z~f~# may: be represented using
-either a fixed-point or floating-point representation.
-However, a floating-point representation must: be used if the depth/stencil
-attachment has a floating-point depth component.
-If an [eq]#m#-bit fixed-point representation is used, we assume that it
-represents each value latexmath:[\frac{k}{2^m - 1}], where [eq]#k {elem} {
-0, 1, ..., 2^m^-1 }#, as [eq]#k# (e.g. 1.0 is represented in binary as a
-string of all ones).
-
-The viewport parameters shown in the above equations are found from these
-values as
-
-  {empty}:: [eq]#o~x~ = pname:x {plus} pname:width / 2#
-  {empty}:: [eq]#o~y~ = pname:y {plus} pname:height / 2#
-  {empty}:: [eq]#o~z~ = pname:minDepth#
-  {empty}:: [eq]#p~x~ = pname:width#
-  {empty}:: [eq]#p~y~ = pname:height#
-  {empty}:: [eq]#p~z~ = pname:maxDepth - pname:minDepth#.
-
-ifdef::VK_QCOM_render_pass_transform[]
-If a render pass transform is enabled, the values [eq]#(p~x~,p~y~)# and
-[eq]#(o~x~, o~y~)# defining the viewport are transformed as described in
-<<vertexpostproc-renderpass-transform, render pass transform>> before
-participating in the viewport transform.
-endif::VK_QCOM_render_pass_transform[]
-
-ifdef::VK_VERSION_1_1,VK_KHR_maintenance1[]
-The application can: specify a negative term for pname:height, which has the
-effect of negating the y coordinate in clip space before performing the
-transform.
-When using a negative pname:height, the application should: also adjust the
-pname:y value to point to the lower left corner of the viewport instead of
-the upper left corner.
-Using the negative pname:height allows the application to avoid having to
-negate the y component of the code:Position output from the last
-<<pipeline-graphics-subsets-pre-rasterization,pre-rasterization shader
-stage>>.
-endif::VK_VERSION_1_1,VK_KHR_maintenance1[]
-
-The width and height of the <<limits-maxViewportDimensions,
-implementation-dependent maximum viewport dimensions>> must: be greater than
-or equal to the width and height of the largest image which can: be created
-and attached to a framebuffer.
-
-The floating-point viewport bounds are represented with an
-<<limits-viewportSubPixelBits,implementation-dependent precision>>.
-
-.Valid Usage
-****
-  * [[VUID-VkViewport-width-01770]]
-    pname:width must: be greater than `0.0`
-  * [[VUID-VkViewport-width-01771]]
-    pname:width must: be less than or equal to
-    sname:VkPhysicalDeviceLimits::pname:maxViewportDimensions[0]
-ifndef::VK_VERSION_1_1,VK_KHR_maintenance1,VK_AMD_negative_viewport_height[]
-  * [[VUID-VkViewport-height-01772]]
-    pname:height must: be greater than `0.0`
-endif::VK_VERSION_1_1,VK_KHR_maintenance1,VK_AMD_negative_viewport_height[]
-  * [[VUID-VkViewport-height-01773]]
-    The absolute value of pname:height must: be less than or equal to
-    sname:VkPhysicalDeviceLimits::pname:maxViewportDimensions[1]
-  * [[VUID-VkViewport-x-01774]]
-    pname:x must: be greater than or equal to pname:viewportBoundsRange[0]
-  * [[VUID-VkViewport-x-01232]]
-    [eq]#(pname:x {plus} pname:width)# must: be less than or equal to
-    pname:viewportBoundsRange[1]
-  * [[VUID-VkViewport-y-01775]]
-    pname:y must: be greater than or equal to pname:viewportBoundsRange[0]
-ifdef::VK_VERSION_1_1,VK_KHR_maintenance1,VK_AMD_negative_viewport_height[]
-  * [[VUID-VkViewport-y-01776]]
-    pname:y must: be less than or equal to pname:viewportBoundsRange[1]
-  * [[VUID-VkViewport-y-01777]]
-    [eq]#(pname:y {plus} pname:height)# must: be greater than or equal to
-    pname:viewportBoundsRange[0]
-endif::VK_VERSION_1_1,VK_KHR_maintenance1,VK_AMD_negative_viewport_height[]
-  * [[VUID-VkViewport-y-01233]]
-    [eq]#(pname:y {plus} pname:height)# must: be less than or equal to
-    pname:viewportBoundsRange[1]
-ifdef::VK_EXT_depth_range_unrestricted[]
-  * [[VUID-VkViewport-minDepth-01234]]
-    Unless `apiext:VK_EXT_depth_range_unrestricted` extension is enabled
-    pname:minDepth must: be between `0.0` and `1.0`, inclusive
-endif::VK_EXT_depth_range_unrestricted[]
-ifndef::VK_EXT_depth_range_unrestricted[]
-  * [[VUID-VkViewport-minDepth-02540]]
-    pname:minDepth must: be between `0.0` and `1.0`, inclusive
-endif::VK_EXT_depth_range_unrestricted[]
-ifdef::VK_EXT_depth_range_unrestricted[]
-  * [[VUID-VkViewport-maxDepth-01235]]
-    Unless `apiext:VK_EXT_depth_range_unrestricted` extension is enabled
-    pname:maxDepth must: be between `0.0` and `1.0`, inclusive
-endif::VK_EXT_depth_range_unrestricted[]
-ifndef::VK_EXT_depth_range_unrestricted[]
-  * [[VUID-VkViewport-maxDepth-02541]]
-    pname:maxDepth must: be between `0.0` and `1.0`, inclusive
-endif::VK_EXT_depth_range_unrestricted[]
-****
-
-include::{generated}/validity/structs/VkViewport.txt[]
---
diff --git a/registry/vulkan/chapters/video_decode_extensions.txt b/registry/vulkan/chapters/video_decode_extensions.txt
deleted file mode 100644
index 8ba6d63..0000000
--- a/registry/vulkan/chapters/video_decode_extensions.txt
+++ /dev/null
@@ -1,341 +0,0 @@
-// Copyright 2018-2021 The Khronos Group Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-[[video-decode-operations]]
-== Video Decode Operations
-
-Before the application can start recording Vulkan command buffers for the
-Video Decode Operations, it must: do the following, beforehand:
-
-  . Ensure that the implementation can decode the Video Content by querying
-    the supported codec operations and profiles using
-    flink:vkGetPhysicalDeviceQueueFamilyProperties2.
-  . By using flink:vkGetPhysicalDeviceVideoFormatPropertiesKHR and providing
-    one or more video profiles, choose the Vulkan formats supported by the
-    implementation.
-    The formats for <<decoded-output-picture,output>> and
-    <<reference-picture,reference>> pictures must: be queried and chosen
-    separately.
-    Refer to the section on
-    <<supported-video-input-output-dpb-formats-enumeration,enumeration of
-    supported video formats>>.
-  . Before creating an image to be used as a video picture resource, obtain
-    the supported image creation parameters by querying with
-    flink:vkGetPhysicalDeviceFormatProperties2 and
-    flink:vkGetPhysicalDeviceImageFormatProperties2 using one of the
-    reported formats and adding slink:VkVideoProfilesKHR to the pname:pNext
-    chain of slink:VkFormatProperties2.
-    When querying the parameters with
-    flink:vkGetPhysicalDeviceImageFormatProperties2 for images targeting
-    decoded <<decoded-output-picture,output>> and
-    <<reference-picture,reference (DPB)>> pictures, the
-    slink:VkPhysicalDeviceImageFormatInfo2::pname:usage field should contain
-    ename:VK_IMAGE_USAGE_VIDEO_DECODE_DST_BIT_KHR and
-    ename:VK_IMAGE_USAGE_VIDEO_DECODE_DPB_BIT_KHR, respectively.
-  . Create none, some, or all of the required <<VkImage,images>> for the
-    <<decoded-output-picture,decoded output>> and
-    <<reference-picture,reference>> pictures.
-    More Video Picture Resources can: be created at some later point if
-    needed while processing the decoded content.
-    Also, if the decoded picture size is expected to change, the images can:
-    be created based on the maximum decoded content size required.
-  . Create the <<video-session,video session>> to be used for video decode
-    operations.
-    Before creating the Decode Video Session, the decode capabilities
-    should: be queried with flink:vkGetPhysicalDeviceVideoCapabilitiesKHR to
-    obtain the limits of the parameters allowed by the implementation for a
-    particular codec profile.
-  . Bind memory resources with the decode video session by calling
-    flink:vkBindVideoSessionMemoryKHR.
-    The video session cannot: be used until memory resources are allocated
-    and bound to it.
-    In order to determine the required memory sizes and heap types of the
-    device memory allocations, flink:vkGetVideoSessionMemoryRequirementsKHR
-    should: be called.
-  . Create one or more <<video-session-parameters-introduction,Session
-    Parameter objects>> for use across command buffer recording operations,
-    if required by the codec extension in use.
-    These objects must: be created against a <<video-session,video session>>
-    with the parameters required by the codec.
-    Each <<video-session-parameters-introduction,Session Parameter object>>
-    created is a child object of the associated <<video-session, Session
-    object>> and cannot: be bound in the command buffer with any other
-    <<video-session,Session Object>>.
-
-The recording of Video Decode Commands against a Vulkan command buffer
-consists of the following sequence:
-
-  . flink:vkCmdBeginVideoCodingKHR starts the recording of one or more Video
-    Decode operations in the command buffer.
-    For each Video Decode Command operation, a Video Session must: be bound
-    to the command buffer within this command.
-    This command establishes a Vulkan Video Decode Context that consists of
-    the bound Video Session Object, Session Parameters Object, and the
-    required Video Picture Resources.
-    The established Video Decode Context is in effect until the
-    flink:vkCmdEndVideoCodingKHR command is recorded.
-    If more Video Decode operations are to be required after the
-    flink:vkCmdEndVideoCodingKHR command, another Video Decode Context can:
-    be started with the flink:vkCmdBeginVideoCodingKHR command.
-  . flink:vkCmdDecodeVideoKHR specifies one or more compressed data buffers
-    to be decoded.
-    The slink:VkVideoDecodeInfoKHR parameters, and the codec extension
-    structures chained to this, specify the details of the decode operation.
-  . flink:vkCmdControlVideoCodingKHR records operations against the decoded
-    data, decoding device, or the Video Session state.
-  . flink:vkCmdEndVideoCodingKHR signals the end of the recording of the
-    Vulkan Video Decode Context, as established by
-    flink:vkCmdBeginVideoCodingKHR.
-
-In addition to the above, the following commands can: be recorded between
-flink:vkCmdBeginVideoCodingKHR and flink:vkCmdEndVideoCodingKHR:
-
-  * Query operations
-  * Global Memory Barriers
-  * Buffer Memory Barriers
-  * Image Memory Barriers (these must: be used to transition the Video
-    Picture Resources to the proper
-    ename:VK_IMAGE_LAYOUT_VIDEO_DECODE_DPB_KHR and
-    ename:VK_IMAGE_LAYOUT_VIDEO_DECODE_DST_KHR layouts).
-  * Pipeline Barriers
-  * Events
-  * Timestamps
-  * Device Groups (device mask)
-
-The following Video Decode related commands must: be recorded *outside* the
-Vulkan Video Decode Context established with the
-flink:vkCmdBeginVideoCodingKHR and flink:vkCmdEndVideoCodingKHR commands:
-
-  * Sparse Memory Binding
-  * Copy Commands
-  * Clear Commands
-
-
-[[video-picture-decode-modes]]
-=== Video Picture Decode Modes
-
-There are a few ways that the flink:vkCmdDecodeVideoKHR can be configured
-for the Video Picture Decode Operations, based on:
-
-  * if the <<decoded-output-picture, output resource>> would need to be used
-    as <<reference-picture,Reference Picture>> for subsequent decode
-    operations and;
-  * if <<dpb-slot,DPB Slots>> are required for use as
-    <<reference-picture,Reference Pictures>> indexes.
-
-[[video-picture-decode-no-reference-picture-no-slot-update]]
-The most basic Video Picture Decode operation with the
-flink:vkCmdDecodeVideoKHR command is to output the decoded pixel data
-without using any DPB <<reference-picture,Reference Pictures>> and without
-updating any <<dpb-slot,DPB Slot's>> indexes.
-
-In this case, the following slink:VkVideoDecodeInfoKHR parameters must: be
-set:
-
-  * slink:VkVideoDecodeInfoKHR::pname:pSetupReferenceSlot->pPictureResource->imageViewBinding
-    must: be a valid slink:VkImageView.
-    This slink:VkImageView represents the <<decoded-output-picture, output
-    resource>> where the decoded pixels will be populated after a successful
-    decode operation.
-  * slink:VkVideoDecodeInfoKHR::pname:pSetupReferenceSlot->slotIndex must:
-    be an invalid <<dpb-slot,DPB Slot>> index (-1) since the decoded picture
-    is not intended to be used as a reference picture with subsequent video
-    decode operations.
-  * The value of the slink:VkVideoDecodeInfoKHR::pname:referenceSlotCount
-    can: be `0` and slink:VkVideoDecodeInfoKHR::pname:pReferenceSlots can:
-    be `NULL`.
-  * If slink:VkVideoDecodeInfoKHR::pname:pReferenceSlots is not `NULL`, it
-    can: still have entries representing <<dpb-slot,DPB Slot>> indexes with
-    a <<video-session-dpb-slot-states, Valid Picture Reference>>.
-    The codec extension selects the actual use of the
-    <<reference-picture,Reference Pictures>> by referring to a
-    <<dpb-slot,DPB Slot>> index with a <<video-session-dpb-slot-states,
-    Valid Picture Reference>>.
-
-[[video-picture-decode-with-references-no-slot-update]]
-
-Video Picture Decode operations with the flink:vkCmdDecodeVideoKHR command,
-requiring one or more <<reference-picture,Reference Pictures>> for the
-predictions of the values of samples for the <<decoded-output-picture,
-decoded output picture>> would require <<dpb-slot,DPB Slots>> with
-<<video-session-dpb-slot-states, Valid Picture Reference>>.
-
-In this case, the following slink:VkVideoDecodeInfoKHR parameters must: be
-set:
-
-  * slink:VkVideoDecodeInfoKHR::pname:pSetupReferenceSlot->pPictureResource->imageViewBinding
-    must: be a valid slink:VkImageView.
-    This slink:VkImageView represents the <<decoded-output-picture, output
-    resource>> where the decoded pixels will be populated after a successful
-    decode operation.
-  * slink:VkVideoDecodeInfoKHR::pname:pSetupReferenceSlot->slotIndex must:
-    be an invalid <<dpb-slot,DPB Slot>> index (-1) since the decoded picture
-    is not intended to be used as a reference picture with subsequent video
-    decode operations.
-  * The value of the slink:VkVideoDecodeInfoKHR::pname:referenceSlotCount
-    must: not be `0` and slink:VkVideoDecodeInfoKHR::pname:pReferenceSlots
-    should represent at least the number of the reference slots required for
-    the decode operation.
-    The codec extension selects the actual use of the
-    <<reference-picture,Reference Pictures>> by referring to a
-    <<dpb-slot,DPB Slot>> index with a <<video-session-dpb-slot-states,
-    Valid Picture Reference>>.
-    If the implementation does not use an opaque DPB, each <<dpb-slot,DPB
-    slot>> representing a <<reference-picture,reference picture>> must:
-    refer to a valid <<VkImageView,image view>>.
-    The <<VkImageView,image views>> must: represent the same
-    <<resources-images, image resources>> that were used to create the
-    <<reference-picture,reference picture>> for the corresponding
-    <<dpb-slot,DPB Slot>> index.
-  * slink:VkVideoDecodeInfoKHR::pname:pReferenceSlots can: still have
-    entries representing <<dpb-slot,DPB Slot>> indexes with a
-    <<video-session-dpb-slot-states, Valid Picture Reference>>.
-
-After the flink:vkCmdDecodeVideoKHR operation is completed successfully, the
-slink:VkVideoDecodeInfoKHR::pname:pSetupReferenceSlot->pPictureResource->imageViewBinding
-pixel data will be updated with the decoded content.
-The operation will not update any <<dpb-slot,DPB Slot>> with
-<<reference-picture,Reference Pictures>> data.
-However, any <<dpb-slot,DPB Slot>> activation, invalidation, or deactivation
-operations requested via slink:VkVideoDecodeInfoKHR::pname:pReferenceSlots
-are still going to be performed.
-
-image::images/DecodeSessionDpbDecodeWithOutputToVkImageViewNoReferencePictureSlotUpdate.svg[align="center",title="Decoding a Frame to VkImageView without a slot update for a *Reference Picture*",opts="{imageopts}"]
-
-
-[[video-picture-decode-with-reference-picture-and-slot-update]]
-==== Video Picture Decode with a <<reference-picture,Reference Picture>> slot update and using optional <<reference-picture,Reference Pictures>>
-
-When it is known that the picture to be decoded will be used as a
-<<reference-picture,reference picture>> for subsequent decode operations,
-one of the available <<dpb-slot,DPB Slots>> needs to be selected for
-<<video-session-activating-dpb-slot, activation and update>> operations as
-part of the flink:vkCmdDecodeVideoKHR command.
-
-Based on whether a decode operation
-<<video-picture-decode-with-references-no-slot-update, with reference
-pictures>> or <<video-picture-decode-no-reference-picture-no-slot-update,
-without reference pictures>> is required, the flink:vkCmdDecodeVideoKHR
-should be configured with parameters as described in the previous sections.
-In addition, one of the available <<dpb-slot,DPB Slots>> must: be selected
-by the application, activated with resources and then set-up for an update
-with the decode operation.
-
-In this case, the following slink:VkVideoDecodeInfoKHR parameters must: be
-set:
-
-  * slink:VkVideoDecodeInfoKHR::pname:pSetupReferenceSlot->pPictureResource->imageViewBinding
-    must: be a valid slink:VkImageView.
-    This slink:VkImageView represents the <<decoded-output-picture, output
-    resource>> where the decoded pixels will be populated after a successful
-    decode operation.
-    If the implementation does not use an opaque DPB, both the
-    <<decoded-output-picture, output>> and <<reference-picture,reference
-    picture>> resource coincide.
-  * slink:VkVideoDecodeInfoKHR::pname:pSetupReferenceSlot->slotIndex must:
-    be a valid <<dpb-slot,DPB Slot>> index selected by the application,
-    based on the currently available slots.
-  * slink:VkVideoDecodeInfoKHR::pname:pReferenceSlots can: still have
-    entries representing <<dpb-slot,DPB Slot>> indexes with a
-    <<video-session-dpb-slot-states, Valid Picture Reference>>.
-
-After the flink:vkCmdDecodeVideoKHR operation has completed successfully,
-the decoded content will be available in the resource provided for
-slink:VkVideoDecodeInfoKHR::pname:pSetupReferenceSlot->pPictureResource->imageViewBinding.
-In addition, this operation will update the selected <<dpb-slot,DPB Slot>>
-with <<reference-picture,Reference Pictures>> data.
-Any other <<dpb-slot,DPB Slot>> activation,invalidation, or deactivation
-operation requested via the
-slink:VkVideoDecodeInfoKHR::pname:pReferenceSlots are going to be performed
-as well.
-
-image::images/DecodeSessionDpbDecodeWithOutputToReferencePictureSlot.svg[align="center",title="Decoding a Frame to VkImageView with an update to a <<reference-picture,Reference Pictures>> DPB Slot",opts="{imageopts}"]
-
-
-=== Video Decode Command Buffer Commands
-
-[open,refpage='vkCmdDecodeVideoKHR',desc='Decode a frame',type='protos']
---
-To decode a frame, call:
-
-include::{generated}/api/protos/vkCmdDecodeVideoKHR.txt[]
-
-  * pname:commandBuffer is the command buffer to be filled with this
-    function for decode frame command.
-  * pname:pFrameInfo is a pointer to a slink:VkVideoDecodeInfoKHR structure.
-
-include::{generated}/validity/protos/vkCmdDecodeVideoKHR.txt[]
---
-
-[open,refpage='VkVideoDecodeInfoKHR',desc='Structure specifying parameters of decoding a frame',type='structs']
---
-The slink:VkVideoDecodeInfoKHR structure is defined as:
-
-include::{generated}/api/structs/VkVideoDecodeInfoKHR.txt[]
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-    All the codec specific structures related to each frame(picture
-    parameters, quantization matrix, etc.) must: be chained here and pass to
-    decode session with the function call flink:vkCmdDecodeVideoKHR.
-  * pname:flags is a bitmask of elink:VkVideoDecodeFlagBitsKHR specifying
-    decode flags, reserved for future versions of this specification.
-  * pname:codedOffset is the coded offset of the decode operations.
-    The purpose of this field is interpreted based on the codec extension.
-ifdef::VK_EXT_video_decode_h264[]
-    When decoding content in H.264 field mode, the pname:codedOffset
-    specifies the line or picture field's offset within the image.
-endif::VK_EXT_video_decode_h264[]
-  * pname:codedExtent is the coded size of the decode operations.
-  * pname:srcBuffer is the source buffer that holds the encoded bitstream.
-  * pname:srcBufferOffset is the buffer offset where the valid encoded
-    bitstream starts in srcBuffer.
-    It must: meet the alignment requirement
-    pname:minBitstreamBufferOffsetAlignment within
-    slink:VkVideoCapabilitiesKHR queried with the
-    flink:vkGetPhysicalDeviceVideoCapabilitiesKHR function.
-  * pname:srcBufferRange is the size of the srcBuffer with valid encoded
-    bitstream, starting from pname:srcBufferOffset.
-    It must: meet the alignment requirement
-    pname:minBitstreamBufferSizeAlignment within
-    slink:VkVideoCapabilitiesKHR queried with the
-    flink:vkGetPhysicalDeviceVideoCapabilitiesKHR function.
-  * pname:dstPictureResource is the destination
-    <<decoded-output-picture,Decoded Output Picture>> Resource.
-  * pname:pSetupReferenceSlot is `NULL` or a pointer to a
-    slink:VkVideoReferenceSlotKHR structure used for generating a DPB
-    reference slot and Picture Resource.
-    pname:pSetupReferenceSlot->slotIndex specifies the slot index number to
-    use as a target for producing the DPB data.
-    pname:slotIndex must: reference a valid entry as specified in
-    slink:VkVideoBeginCodingInfoKHR via the pname:pReferenceSlots within the
-    flink:vkCmdBeginVideoCodingKHR command that established the Vulkan Video
-    Decode Context for this command.
-  * pname:referenceSlotCount is the number of the DPB Reference Pictures
-    that will be used when this decoding operation is executing.
-  * pname:pReferenceSlots is a pointer to an array of
-    slink:VkVideoReferenceSlotKHR structures specifying the DPB Reference
-    pictures that will be used when this decoding operation is executing.
-
-include::{generated}/validity/structs/VkVideoDecodeInfoKHR.txt[]
---
-
-[open,refpage='VkVideoDecodeFlagBitsKHR',desc='Video Decode Command Flags',type='enums']
---
-The flink:vkCmdDecodeVideoKHR flags are defined with the following
-enumeration:
-
-include::{generated}/api/enums/VkVideoDecodeFlagBitsKHR.txt[]
-
-  * ename:VK_VIDEO_DECODE_RESERVED_0_BIT_KHR The current version of the
-    specification has reserved this value for future use.
---
-
-[open,refpage='VkVideoDecodeFlagsKHR',desc='Bitmask specifying the video decode flink:vkCmdDecodeVideoKHR flags',type='flags']
---
-include::{generated}/api/flags/VkVideoDecodeFlagsKHR.txt[]
-
-tlink:VkVideoDecodeFlagsKHR is a bitmask type for setting a mask of zero or
-more elink:VkVideoDecodeFlagBitsKHR.
---
diff --git a/registry/vulkan/chapters/video_decode_h264_extensions.txt b/registry/vulkan/chapters/video_decode_h264_extensions.txt
deleted file mode 100644
index 7adb51d..0000000
--- a/registry/vulkan/chapters/video_decode_h264_extensions.txt
+++ /dev/null
@@ -1,343 +0,0 @@
-// Copyright 2018-2021 The Khronos Group Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-[[decode-h264]]
-== Video Decode of AVC (ITU-T H.264)
-
-This extension adds H.264 codec specific structures needed for decode
-session to execute decode jobs which include H.264 sequence header, picture
-parameter header and quantization matrix etc.
-Unless otherwise noted, all references to the H.264 specification are to the
-2010 edition published by the ITU-T, dated March 2010.
-This specification is available at http://www.itu.int/rec/T-REC-H.264.
-
-
-=== H.264 decode profile
-
-A H.264 decode profile is specified using slink:VkVideoDecodeH264ProfileEXT
-chained to slink:VkVideoProfileKHR when the codec-operation in
-slink:VkVideoProfileKHR is
-ename:VK_VIDEO_CODEC_OPERATION_DECODE_H264_BIT_EXT.
-
-[open,refpage='VkVideoDecodeH264ProfileEXT',desc='Structure specifying H.264 decode profile',type='structs']
---
-The sname:VkVideoDecodeH264ProfileEXT structure is defined as:
-
-include::{generated}/api/structs/VkVideoDecodeH264ProfileEXT.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:stdProfileIdc is a code:StdVideoH264ProfileIdc value specifying
-    the H.264 codec profile IDC
-  * pname:pictureLayout is a bitmask of
-    elink:VkVideoDecodeH264PictureLayoutFlagBitsEXT specifying the layout of
-    the decoded picture's contents depending on the nature (progressive vs.
-    interlaced) of the input content.
-
-[NOTE]
-.Note
-====
-When passing sname:VkVideoDecodeH264ProfileEXT to
-flink:vkCreateVideoSessionKHR in the pname:pNext chain of
-slink:VkVideoSessionCreateInfoKHR, requests for a pname:pictureLayout not
-supported by the implementation will result in failure of the command.
-====
-
-.Valid Usage
-****
-  * [[VUID-VkVideoDecodeH264ProfileEXT-pNext-06259]]
-    If the slink:VkVideoDecodeH264ProfileEXT structure is included in the
-    pname:pNext chain of the slink:VkVideoCapabilitiesKHR structure passed
-    to flink:vkGetPhysicalDeviceVideoCapabilitiesKHR, the value in
-    pname:pictureLayout is treated as a bitmask of requested picture
-    layouts.
-    It is always valid to use the value
-    ename:VK_VIDEO_DECODE_H264_PICTURE_LAYOUT_PROGRESSIVE_EXT as the
-    implementation is guaranteed to support decoding of progressive content.
-  * [[VUID-VkVideoDecodeH264ProfileEXT-pNext-06260]]
-    If the slink:VkVideoDecodeH264ProfileEXT structure is included in the
-    pname:pNext chain of the slink:VkVideoSessionCreateInfoKHR structure
-    passed to flink:vkCreateVideoSessionKHR, the value in
-    pname:pictureLayout must: be exactly one of
-    ename:VK_VIDEO_DECODE_H264_PICTURE_LAYOUT_PROGRESSIVE_EXT,
-    ename:VK_VIDEO_DECODE_H264_PICTURE_LAYOUT_INTERLACED_INTERLEAVED_LINES_BIT_EXT
-    or
-    ename:VK_VIDEO_DECODE_H264_PICTURE_LAYOUT_INTERLACED_SEPARATE_PLANES_BIT_EXT.
-****
-
-include::{generated}/validity/structs/VkVideoDecodeH264ProfileEXT.txt[]
---
-
-[open,refpage='VkVideoDecodeH264PictureLayoutFlagsEXT',desc='Bitmask of VkVideoDecodeH264PictureLayoutFlagBitsEXT',type='flags']
---
-include::{generated}/api/flags/VkVideoDecodeH264PictureLayoutFlagsEXT.txt[]
-
-tname:VkVideoDecodeH264PictureLayoutFlagsEXT is a bitmask type for setting a
-mask of zero or more elink:VkVideoDecodeH264PictureLayoutFlagBitsEXT.
---
-
-[open,refpage='VkVideoDecodeH264PictureLayoutFlagBitsEXT',desc='H.264 video decode picture layout flags',type='enums']
---
-The H.264 video decode picture layout flags are defined with the following
-enum:
-
-include::{generated}/api/enums/VkVideoDecodeH264PictureLayoutFlagBitsEXT.txt[]
-
-  * ename:VK_VIDEO_DECODE_H264_PICTURE_LAYOUT_PROGRESSIVE_EXT specifies
-    support for progressive content.
-    This flag has the value `0`.
-  * ename:VK_VIDEO_DECODE_H264_PICTURE_LAYOUT_INTERLACED_INTERLEAVED_LINES_BIT_EXT
-    specifies support for or use of a picture layout for interlaced content
-    where all lines belonging to the first field are decoded to the
-    even-numbered lines within the picture resource, and all lines belonging
-    to the second field are decoded to the odd-numbered lines within the
-    picture resource.
-  * ename:VK_VIDEO_DECODE_H264_PICTURE_LAYOUT_INTERLACED_SEPARATE_PLANES_BIT_EXT
-    specifies support for or use of a picture layout for interlaced content
-    where all lines belonging to the first field are grouped together in a
-    single plane, followed by another plane containing all lines belonging
-    to the second field.
---
-
-
-=== Selecting a H.264 decode profile
-
-When using flink:vkGetPhysicalDeviceVideoCapabilitiesKHR to query the
-capabilities for the input pname:pVideoProfile with
-pname:videoCodecOperation specified as
-ename:VK_VIDEO_CODEC_OPERATION_DECODE_H264_BIT_EXT, a
-slink:VkVideoDecodeH264ProfileEXT structure must: be chained to
-slink:VkVideoProfileKHR to select a H.264 decode profile.
-If supported, the implementation returns the capabilities associated with
-the specified H.264 decode profile.
-The requirement is similar when querying supported image formats using
-flink:vkGetPhysicalDeviceVideoFormatPropertiesKHR.
-
-A supported H.264 decode profile must: be selected when creating a video
-session by chaining slink:VkVideoDecodeH264ProfileEXT to the
-slink:VkVideoProfileKHR field of slink:VkVideoSessionCreateInfoKHR.
-
-
-=== Capabilities
-
-[open,refpage='VkVideoDecodeH264CapabilitiesEXT',desc='Structure specifying H.264 decode capabilities',type='structs']
---
-When using flink:vkGetPhysicalDeviceVideoCapabilitiesKHR to query the
-capabilities for the input pname:pVideoProfile with
-pname:videoCodecOperation specified as
-ename:VK_VIDEO_CODEC_OPERATION_DECODE_H264_BIT_EXT, a
-slink:VkVideoDecodeH264CapabilitiesEXT structure must: be chained to
-slink:VkVideoCapabilitiesKHR to get this H.264 decode profile specific
-capabilities.
-
-The slink:VkVideoDecodeH264CapabilitiesEXT structure is defined as:
-
-include::{generated}/api/structs/VkVideoDecodeH264CapabilitiesEXT.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:maxLevel is the maximum H.264 level supported by the device.
-  * pname:fieldOffsetGranularity - if Interlaced Video Content is suported,
-    the maximum field offset granularity supported for the picture resource.
-  * pname:stdExtensionVersion is a slink:VkExtensionProperties structure
-    specifying the H.264 extension name and version supported by this
-    implementation.
-
-include::{generated}/validity/structs/VkVideoDecodeH264CapabilitiesEXT.txt[]
---
-
-
-=== Create Information
-
-[open,refpage='VkVideoDecodeH264SessionCreateInfoEXT',desc='Structure specifies H.264 decode session creation parameters',type='structs']
---
-A slink:VkVideoDecodeH264SessionCreateInfoEXT structure can: be chained to
-slink:VkVideoSessionCreateInfoKHR when the function
-flink:vkCreateVideoSessionKHR is called to create a video session for H.264
-decode.
-
-The slink:VkVideoDecodeH264SessionCreateInfoEXT structure is defined as:
-
-include::{generated}/api/structs/VkVideoDecodeH264SessionCreateInfoEXT.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:flags is reserved for future use.
-  * pname:pStdExtensionVersion is a pointer to a slink:VkExtensionProperties
-    structure specifying the H.264 codec extensions defined in
-    code:StdVideoH264Extensions.
-
-include::{generated}/validity/structs/VkVideoDecodeH264SessionCreateInfoEXT.txt[]
---
-
-[open,refpage='VkVideoDecodeH264CreateFlagsEXT',desc='Reserved for future use',type='flags']
---
-include::{generated}/api/flags/VkVideoDecodeH264CreateFlagsEXT.txt[]
-
-tname:VkVideoDecodeH264CreateFlagsEXT is a bitmask type for setting a mask,
-but is currently reserved for future use.
---
-
-
-=== Decoder Parameter Sets
-
-To reduce parameter traffic during decoding, the decoder parameter set
-object supports storing H.264 SPS/PPS parameter sets that may: be later
-referenced during decoding.
-
-[open,refpage='VkVideoDecodeH264SessionParametersCreateInfoEXT',desc='Structure specifies H.264 decoder parameter set information',type='structs']
---
-A slink:VkVideoDecodeH264SessionParametersCreateInfoEXT structure holding
-one H.264 SPS and at least one H.264 PPS paramater set must: be chained to
-slink:VkVideoSessionParametersCreateInfoKHR when calling
-flink:vkCreateVideoSessionParametersKHR to store these parameter set(s) with
-the decoder parameter set object for later reference.
-The provided H.264 SPS/PPS parameters must: be within the limits specified
-during decoder creation for the decoder specified in
-slink:VkVideoSessionParametersCreateInfoKHR.
-
-The slink:VkVideoDecodeH264SessionParametersCreateInfoEXT structure is
-defined as:
-
-include::{generated}/api/structs/VkVideoDecodeH264SessionParametersCreateInfoEXT.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:maxSpsStdCount is the maximum number of SPS parameters that the
-    sname:VkVideoSessionParametersKHR can contain.
-  * pname:maxPpsStdCount is the maximum number of PPS parameters that the
-    sname:VkVideoSessionParametersKHR can contain.
-  * pname:pParametersAddInfo is `NULL` or a pointer to a
-    slink:VkVideoDecodeH264SessionParametersAddInfoEXT structure specifying
-    H.264 parameters to add upon object creation.
-
-include::{generated}/validity/structs/VkVideoDecodeH264SessionParametersCreateInfoEXT.txt[]
---
-
-[open,refpage='VkVideoDecodeH264SessionParametersAddInfoEXT',desc='Structure specifies H.264 decoder parameter set information',type='structs']
---
-include::{generated}/api/structs/VkVideoDecodeH264SessionParametersAddInfoEXT.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:spsStdCount is the number of SPS elements in pname:pSpsStd.
-    Its value must: be less than or equal to the value of
-    pname:maxSpsStdCount.
-  * pname:pSpsStd is a pointer to an array of
-    code:StdVideoH264SequenceParameterSet structures representing H.264
-    sequence parameter sets.
-    Each element of the array must: have a unique H.264 SPS ID.
-  * pname:ppsStdCount is the number of PPS provided in pname:pPpsStd.
-    Its value must: be less than or equal to the value of
-    pname:maxPpsStdCount.
-  * pname:pPpsStd is a pointer to an array of
-    code:StdVideoH264PictureParameterSet structures representing H.264
-    picture parameter sets.
-    Each element of the array must: have a unique H.264 SPS-PPS ID pair.
-
-.Valid Usage
-****
-  * [[VUID-VkVideoDecodeH264SessionParametersAddInfoEXT-spsStdCount-04822]]
-    The values of pname:spsStdCount and pname:ppsStdCount must: be less than
-    or equal to the values of pname:maxSpsStdCount and pname:maxPpsStdCount,
-    respectively
-  * [[VUID-VkVideoDecodeH264SessionParametersAddInfoEXT-maxSpsStdCount-04823]]
-    When the pname:maxSpsStdCount number of parameters of type
-    StdVideoH264SequenceParameterSet in the Video Session Parameters object
-    is reached, no additional parameters of that type can be added to this
-    object.
-    ename:VK_ERROR_TOO_MANY_OBJECTS will be returned if an attempt is made
-    to add additional data to this object at this point
-  * [[VUID-VkVideoDecodeH264SessionParametersAddInfoEXT-maxPpsStdCount-04824]]
-    When the pname:maxPpsStdCount number of parameters of type
-    StdVideoH264PictureParameterSet in the Video Session Parameters object
-    is reached, no additional parameters of that type can be added to this
-    object.
-    ename:VK_ERROR_TOO_MANY_OBJECTS will be returned if an attempt is made
-    to add additional data to this object at this point
-  * [[VUID-VkVideoDecodeH264SessionParametersAddInfoEXT-None-04825]]
-    Each entry to be added must: have a unique, to the rest of the parameter
-    array entries and the existing parameters in the Video Session
-    Parameters Object that is being updated, SPS-PPS IDs
-  * [[VUID-VkVideoDecodeH264SessionParametersAddInfoEXT-None-04826]]
-    Parameter entries that already exist in Video Session Parameters object
-    with a particular SPS-PPS IDs cannot: be replaced nor updated
-  * [[VUID-VkVideoDecodeH264SessionParametersAddInfoEXT-None-04827]]
-    When creating a new object using a Video Session Parameters as a
-    template, the array's parameters with the same SPS-PPS IDs as the ones
-    from the template take precedence
-  * [[VUID-VkVideoDecodeH264SessionParametersAddInfoEXT-None-04828]]
-    SPS/PPS parameters must: comply with the limits specified in
-    slink:VkVideoSessionCreateInfoKHR during Video Session creation
-****
-
-include::{generated}/validity/structs/VkVideoDecodeH264SessionParametersAddInfoEXT.txt[]
---
-
-
-=== Picture Decoding
-
-To decode a picture, the structure slink:VkVideoDecodeH264PictureInfoEXT
-may: be chained to slink:VkVideoDecodeInfoKHR when calling
-flink:vkCmdDecodeVideoKHR.
-
-[open,refpage='VkVideoDecodeH264PictureInfoEXT',desc='Structure specifies H.264 decode picture parameters when decoding a picture',type='structs']
---
-The structure slink:VkVideoDecodeH264PictureInfoEXT representing a picture
-decode operation is defined as:
-
-include::{generated}/api/structs/VkVideoDecodeH264PictureInfoEXT.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:pStdPictureInfo is a pointer to a
-    code:StdVideoDecodeH264PictureInfo structure specifying the codec
-    standard specific picture information from the H.264 specification.
-  * pname:slicesCount is the number of slices in this picture.
-  * pname:pSlicesDataOffsets is a pointer to an array of pname:slicesCount
-    offsets indicating the start offset of each slice within the bitstream
-    buffer.
-
-include::{generated}/validity/structs/VkVideoDecodeH264PictureInfoEXT.txt[]
---
-
-[open,refpage='VkVideoDecodeH264DpbSlotInfoEXT',desc='Structure specifies H.264 decode DPB picture information',type='structs']
---
-The slink:VkVideoDecodeH264DpbSlotInfoEXT structure correlates a DPB Slot
-index with codec-specific information and is defined as:
-
-include::{generated}/api/structs/VkVideoDecodeH264DpbSlotInfoEXT.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pStdReferenceInfo is a pointer to a
-    code:StdVideoDecodeH264ReferenceInfo structure specifying the codec
-    standard specific picture reference information from the H.264
-    specification.
-
-include::{generated}/validity/structs/VkVideoDecodeH264DpbSlotInfoEXT.txt[]
---
-
-[open,refpage='VkVideoDecodeH264MvcEXT',desc='Structure specifies parameters of mvc views',type='structs']
---
-The slink:VkVideoDecodeH264MvcEXT structure is defined as:
-
-include::{generated}/api/structs/VkVideoDecodeH264MvcEXT.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:pStdMvc is a pointer to a code:StdVideoDecodeH264Mvc structure
-    specifying H.264 codec specification information for MVC.
-
-When the content type is H.264 MVC, a slink:VkVideoDecodeH264MvcEXT
-structure must: be chained to slink:VkVideoDecodeH264PictureInfoEXT.
-
-include::{generated}/validity/structs/VkVideoDecodeH264MvcEXT.txt[]
---
diff --git a/registry/vulkan/chapters/video_decode_h265_extensions.txt b/registry/vulkan/chapters/video_decode_h265_extensions.txt
deleted file mode 100644
index 28df08a..0000000
--- a/registry/vulkan/chapters/video_decode_h265_extensions.txt
+++ /dev/null
@@ -1,254 +0,0 @@
-// Copyright 2018-2021 The Khronos Group Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-[[decode-h265]]
-== Video Decode of HEVC (ITU-T H.265)
-
-This extension adds H.265 codec specific structures needed for decode
-session to execute decode jobs which include H.265 sequence header, picture
-parameter header and quantization matrix etc.
-Unless otherwise noted, all references to the H.265 specification are to the
-2013 edition published by the ITU-T, dated April 2013.
-This specification is available at http://www.itu.int/rec/T-REC-H.265.
-
-
-=== H.265 decode profile
-
-A H.265 decode profile is specified using slink:VkVideoDecodeH265ProfileEXT
-chained to slink:VkVideoProfileKHR when the codec-operation in
-slink:VkVideoProfileKHR is
-ename:VK_VIDEO_CODEC_OPERATION_DECODE_H265_BIT_EXT.
-
-[open,refpage='VkVideoDecodeH265ProfileEXT',desc='Structure specifying H.265 decode profile',type='structs']
---
-The slink:VkVideoDecodeH265ProfileEXT structure is defined as:
-
-include::{generated}/api/structs/VkVideoDecodeH265ProfileEXT.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:stdProfileIdc is a code:StdVideoH265ProfileIdc value specifying
-    the H.265 codec profile IDC.
-
-include::{generated}/validity/structs/VkVideoDecodeH265ProfileEXT.txt[]
---
-
-
-=== Selecting an H.265 Profile
-
-When using flink:vkGetPhysicalDeviceVideoCapabilitiesKHR to query the
-capabilities for the input pname:pVideoProfile with
-pname:videoCodecOperation specified as
-ename:VK_VIDEO_CODEC_OPERATION_DECODE_H265_BIT_EXT, a
-slink:VkVideoDecodeH265ProfileEXT structure must: be chained to
-slink:VkVideoProfileKHR to select a H.265 decode profile.
-If supported, the implementation returns the capabilities associated with
-the specified H.265 decode profile.
-The requirement is similar when querying supported image formats using
-flink:vkGetPhysicalDeviceVideoFormatPropertiesKHR.
-
-A supported H.265 decode profile must: be selected when creating a video
-session by chaining slink:VkVideoDecodeH265ProfileEXT to the
-slink:VkVideoProfileKHR field of slink:VkVideoSessionCreateInfoKHR.
-
-
-=== Capabilities
-
-[open,refpage='VkVideoDecodeH265CapabilitiesEXT',desc='Structure specifies H.265 decode capabilities parameters when decoding a frame',type='structs']
---
-When uses flink:vkGetPhysicalDeviceVideoCapabilitiesKHR to query the
-capabilities for the parameter pname:videoCodecOperation specified as
-ename:VK_VIDEO_CODEC_OPERATION_DECODE_H265_BIT_EXT,
-slink:VkVideoDecodeH265CapabilitiesEXT structure can: be chained to
-slink:VkVideoCapabilitiesKHR to get this H.265 extension specific
-capabilities.
-
-The slink:VkVideoDecodeH265CapabilitiesEXT structure is defined as:
-
-include::{generated}/api/structs/VkVideoDecodeH265CapabilitiesEXT.txt[]
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:maxLevel is the maximum H.265 level supported by the device.
-  * pname:stdExtensionVersion is a slink:VkExtensionProperties structure
-    specifying the H.265 extension name and version supported by this
-    implementation.
-
-include::{generated}/validity/structs/VkVideoDecodeH265CapabilitiesEXT.txt[]
---
-
-
-=== Create Infomation
-
-[open,refpage='VkVideoDecodeH265SessionCreateInfoEXT',desc='Structure specifies H.265 decode session creation parameters',type='structs']
---
-A slink:VkVideoDecodeH265SessionCreateInfoEXT structure can: be chained to
-slink:VkVideoSessionCreateInfoKHR when the function
-flink:vkCreateVideoSessionKHR is called to create a video session for H.265
-decode operations.
-
-The slink:VkVideoDecodeH265SessionCreateInfoEXT structure is defined as:
-
-include::{generated}/api/structs/VkVideoDecodeH265SessionCreateInfoEXT.txt[]
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:flags is reserved for future use.
-  * pname:pStdExtensionVersion is a pointer to a slink:VkExtensionProperties
-    structure specifying H.265 codec extensions.
-
-include::{generated}/validity/structs/VkVideoDecodeH265SessionCreateInfoEXT.txt[]
---
-
-[open,refpage='VkVideoDecodeH265CreateFlagsEXT',desc='Reserved for future use',type='flags']
---
-include::{generated}/api/flags/VkVideoDecodeH265CreateFlagsEXT.txt[]
-
-tname:VkVideoDecodeH265CreateFlagsEXT is a bitmask type for setting a mask,
-but is currently reserved for future use.
---
-
-
-=== Decoder Parameter Sets
-
-To reduce parameter traffic during decoding, the decoder parameter set
-object supports storing H.265 SPS/PPS parameter sets that may be later
-referenced during decoding.
-
-[open,refpage='VkVideoDecodeH265SessionParametersCreateInfoEXT',desc='Structure specifies H.265 decoder parameter set information',type='structs']
---
-A sname:VkVideoDecodeH265SessionParametersCreateInfoEXT structure holding
-one H.265 SPS and at least one H.265 PPS paramater set must: be chained to
-sname:VkVideoSessionParametersCreateInfoKHR when calling
-fname:vkCreateVideoSessionParametersKHR to store these parameter set(s) with
-the decoder parameter set object for later reference.
-The provided H.265 SPS/PPS parameters must: be within the limits specified
-during decoder creation for the decoder specified in
-sname:VkVideoSessionParametersCreateInfoKHR.
-
-The sname:VkVideoDecodeH265SessionParametersCreateInfoEXT structure is
-defined as:
-
-include::{generated}/api/structs/VkVideoDecodeH265SessionParametersCreateInfoEXT.txt[]
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:maxSpsStdCount is the maximum number of SPS parameters that the
-    sname:VkVideoSessionParametersKHR can contain.
-  * pname:maxPpsStdCount is the maximum number of PPS parameters that the
-    sname:VkVideoSessionParametersKHR can contain.
-  * pname:pParametersAddInfo is `NULL` or a pointer to a
-    slink:VkVideoDecodeH265SessionParametersAddInfoEXT structure specifying
-    H.265 parameters to add upon object creation.
-
-include::{generated}/validity/structs/VkVideoDecodeH265SessionParametersCreateInfoEXT.txt[]
---
-
-[open,refpage='VkVideoDecodeH265SessionParametersAddInfoEXT',desc='Structure specifies H.265 decoder parameter set information',type='structs']
---
-include::{generated}/api/structs/VkVideoDecodeH265SessionParametersAddInfoEXT.txt[]
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:spsStdCount is the number of SPS elements in the pname:pSpsStd.
-    Its value must: be less than or equal to the value of
-    pname:maxSpsStdCount.
-  * pname:pSpsStd is a pointer to an array of
-    code:StdVideoH265SequenceParameterSet structures representing H.265
-    sequence parameter sets.
-    Each element of the array must: have a unique H.265 VPS-SPS ID pair.
-  * pname:ppsStdCount is the number of PPS provided in pname:pPpsStd.
-    Its value must: be less than or equal to the value of
-    pname:maxPpsStdCount.
-  * pname:pPpsStd is a pointer to an array of
-    code:StdVideoH265PictureParameterSet structures representing H.265
-    picture parameter sets.
-    Each element of the array entry must: have a unique H.265 VPS-SPS-PPS ID
-    tuple.
-
-.Valid Usage
-****
-  * [[VUID-VkVideoDecodeH265SessionParametersAddInfoEXT-vpsStdCount-04829]]
-    The values of pname:vpsStdCount, pname:spsStdCount and pname:ppsStdCount
-    must: be less than or equal to the values of pname:maxVpsStdCount,
-    pname:maxSpsStdCount and pname:maxPpsStdCount, respectively
-  * [[VUID-VkVideoDecodeH265SessionParametersAddInfoEXT-maxVpsStdCount-04830]]
-    When the pname:maxVpsStdCount number of parameters of type
-    StdVideoH265VideoParameterSet in the Video Session Parameters object is
-    reached, no additional parameters of that type can be added to the
-    object.
-    ename:VK_ERROR_TOO_MANY_OBJECTS will be returned if an attempt is made
-    to add additional data to this object at this point
-  * [[VUID-VkVideoDecodeH265SessionParametersAddInfoEXT-maxSpsStdCount-04831]]
-    When the pname:maxSpsStdCount number of parameters of type
-    StdVideoH265SequenceParameterSet in the Video Session Parameters object
-    is reached, no additional parameters of that type can be added to the
-    object.
-    ename:VK_ERROR_TOO_MANY_OBJECTS will be returned if an attempt is made
-    to add additional data to this object at this point
-  * [[VUID-VkVideoDecodeH265SessionParametersAddInfoEXT-maxPpsStdCount-04832]]
-    When the pname:maxPpsStdCount number of parameters of type
-    StdVideoH265PictureParameterSet in the Video Session Parameters object
-    is reached, no additional parameters of that type can be added to the
-    object.
-    ename:VK_ERROR_TOO_MANY_OBJECTS will be returned if an attempt is made
-    to add additional data to this object at this point
-  * [[VUID-VkVideoDecodeH265SessionParametersAddInfoEXT-None-04833]]
-    Each entry to be added must: have a unique, to the rest of the parameter
-    array entries and the existing parameters in the Video Session
-    Parameters Object that is being updated, VPS-SPS-PPS IDs
-  * [[VUID-VkVideoDecodeH265SessionParametersAddInfoEXT-None-04834]]
-    Parameter entries that already exist in Video Session Parameters object
-    with a particular VPS-SPS-PPS IDs cannot: be replaced nor updated
-  * [[VUID-VkVideoDecodeH265SessionParametersAddInfoEXT-None-04835]]
-    When creating a new object using a Video Session Parameters as a
-    template, the array's parameters with the same VPS-SPS-PPS IDs as the
-    ones from the template take precedence
-  * [[VUID-VkVideoDecodeH265SessionParametersAddInfoEXT-None-04836]]
-    VPS/SPS/PPS parameters must: comply with the limits specified in
-    slink:VkVideoSessionCreateInfoKHR during Video Session creation
-****
-
-include::{generated}/validity/structs/VkVideoDecodeH265SessionParametersAddInfoEXT.txt[]
---
-
-
-=== Picture Parameters
-
-[open,refpage='VkVideoDecodeH265PictureInfoEXT',desc='Structure specifies H.265 picture information when decoding a frame',type='structs']
---
-The slink:VkVideoDecodeH265PictureInfoEXT structure is defined as:
-
-include::{generated}/api/structs/VkVideoDecodeH265PictureInfoEXT.txt[]
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:pStdPictureInfo is a pointer to a
-    code:StdVideoDecodeH265PictureInfo structure specifying codec standard
-    specific picture information from the H.265 specification.
-  * pname:slicesCount is the number of slices in this picture.
-  * pname:pSlicesDataOffsets is a pointer to an array of pname:slicesCount
-    offsets indicating the start offset of each slice within the bitstream
-    buffer.
-
-include::{generated}/validity/structs/VkVideoDecodeH265PictureInfoEXT.txt[]
---
-
-[open,refpage='VkVideoDecodeH265DpbSlotInfoEXT',desc='Structure specifies H.265 DPB information when decoding a frame',type='structs']
---
-The slink:VkVideoDecodeH265DpbSlotInfoEXT structure is defined as:
-
-include::{generated}/api/structs/VkVideoDecodeH265DpbSlotInfoEXT.txt[]
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:pStdReferenceInfo is a pointer to a
-    code:StdVideoDecodeH265ReferenceInfo structure specifying the codec
-    standard specific picture reference information from the H.264
-    specification.
-
-include::{generated}/validity/structs/VkVideoDecodeH265DpbSlotInfoEXT.txt[]
---
-
diff --git a/registry/vulkan/chapters/video_encode_extensions.txt b/registry/vulkan/chapters/video_encode_extensions.txt
deleted file mode 100644
index 699ba6c..0000000
--- a/registry/vulkan/chapters/video_encode_extensions.txt
+++ /dev/null
@@ -1,294 +0,0 @@
-// Copyright 2018-2021 The Khronos Group Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-[[video-encode-operations]]
-== Video Encode Operations
-
-Before the application can start recording Vulkan command buffers for the
-Video Encode Operations, it must: do the following, beforehand:
-
-  . Ensure that the implementation can encode the Video Content by querying
-    the supported codec operations and profiles using
-    flink:vkGetPhysicalDeviceQueueFamilyProperties2.
-  . By using flink:vkGetPhysicalDeviceVideoFormatPropertiesKHR and providing
-    one or more video profiles, choose the Vulkan formats supported by the
-    implementation.
-    The formats for <<input-encode-picture,input>> and
-    <<reference-picture,reference>> pictures must: be queried and chosen
-    separately.
-    Refer to the section on
-    <<supported-video-input-output-dpb-formats-enumeration,enumeration of
-    supported video formats>>.
-  . Before creating an image to be used as a video picture resource, obtain
-    the supported image creation parameters by querying with
-    flink:vkGetPhysicalDeviceFormatProperties2 and
-    flink:vkGetPhysicalDeviceImageFormatProperties2 using one of the
-    reported formats and adding slink:VkVideoProfilesKHR to the pname:pNext
-    chain of slink:VkFormatProperties2.
-    When querying the parameters with
-    flink:vkGetPhysicalDeviceImageFormatProperties2 for images targeting
-    <<input-encode-picture,input>> and <<reference-picture,reference (DPB)>>
-    pictures, the slink:VkPhysicalDeviceImageFormatInfo2::pname:usage field
-    should contain ename:VK_IMAGE_USAGE_VIDEO_ENCODE_SRC_BIT_KHR and
-    ename:VK_IMAGE_USAGE_VIDEO_ENCODE_DPB_BIT_KHR, respectively.
-  . Create none, some, or all of the required <<VkImage,images>> for the
-    <<input-encode-picture,input>> and <<reference-picture,reference>>
-    pictures.
-    More Video Picture Resources can: be created at some later point if
-    needed while processing the content to be encoded.
-    Also, if the size of the picture to be encoded is expected to change,
-    the images can: be created based on the maximum expected content size.
-  . Create the <<video-session,video session>> to be used for video encode
-    operations.
-    Before creating the Encode Video Session, the encode capabilities
-    should: be queried with flink:vkGetPhysicalDeviceVideoCapabilitiesKHR to
-    obtain the limits of the parameters allowed by the implementation for a
-    particular codec profile.
-  . Bind memory resources with the encode video session by calling
-    flink:vkBindVideoSessionMemoryKHR.
-    The video session cannot: be used until memory resources are allocated
-    and bound to it.
-    In order to determine the required memory sizes and heap types of the
-    device memory allocations, flink:vkGetVideoSessionMemoryRequirementsKHR
-    should: be called.
-  . Create one or more <<video-session-parameters-introduction,Session
-    Parameter objects>> for use across command buffer recording operations,
-    if required by the codec extension in use.
-    These objects must: be created against a <<video-session,video session>>
-    with the parameters required by the codec.
-    Each <<video-session-parameters-introduction,Session Parameter object>>
-    created is a child object of the associated <<video-session, Session
-    object>> and cannot: be bound in the command buffer with any other
-    <<video-session,Session Object>>.
-
-
-The recording of Video Encode Commands against a Vulkan Command Buffer
-consists of the following sequence:
-
-  . flink:vkCmdBeginVideoCodingKHR starts the recording of one or more Video
-    Encode operations in the command buffer.
-    For each Video Encode Command operation, a Video Session must: be bound
-    to the command buffer within this command.
-    This command establishes a Vulkan Video Encode Context that consists of
-    the bound Video Session Object, Session Parameters Object, and the
-    required Video Picture Resources.
-    The established Video Encode Context is in effect until the
-    flink:vkCmdEndVideoCodingKHR command is recorded.
-    If more Video Encode operations are to be required after the
-    flink:vkCmdEndVideoCodingKHR command, another Video Encode Context can:
-    be started with the flink:vkCmdBeginVideoCodingKHR command.
-  . flink:vkCmdEncodeVideoKHR specifies one or more frames to be encoded.
-    The slink:VkVideoEncodeInfoKHR parameters, and the codec extension
-    structures chained to this, specify the details of the encode operation.
-  . flink:vkCmdControlVideoCodingKHR records operations against the encoded
-    data, encoding device, or the Video Session state.
-  . flink:vkCmdEndVideoCodingKHR signals the end of the recording of the
-    Vulkan Video Encode Context, as established by
-    flink:vkCmdBeginVideoCodingKHR.
-
-In addition to the above, the following commands can: be recorded between
-flink:vkCmdBeginVideoCodingKHR and flink:vkCmdEndVideoCodingKHR:
-
-  * Query operations
-  * Global Memory Barriers
-  * Buffer Memory Barriers
-  * Image Memory Barriers (these must: be used to transition the Video
-    Picture Resources to the proper
-    ename:VK_IMAGE_LAYOUT_VIDEO_ENCODE_SRC_KHR and
-    ename:VK_IMAGE_LAYOUT_VIDEO_ENCODE_DPB_KHR layouts).
-  * Pipeline Barriers
-  * Events
-  * Timestamps
-  * Device Groups (device mask)
-
-The following Video Encode related commands must: be recorded *outside* the
-Vulkan Video Encode Context established with the
-flink:vkCmdBeginVideoCodingKHR and flink:vkCmdEndVideoCodingKHR commands:
-
-  * Sparse Memory Binding
-  * Copy Commands
-  * Clear Commands
-
-
-=== Video Encode Vulkan Command Buffer Commands
-
-[open,refpage='vkCmdEncodeVideoKHR',desc='Encode operation for bitstream generation',type='protos']
---
-To launch an encode operation that results in bitstream generation, call:
-
-include::{generated}/api/protos/vkCmdEncodeVideoKHR.txt[]
-
-  * pname:commandBuffer is the command buffer to be filled with this
-    function for encoding to generate a bitstream.
-  * pname:pEncodeInfo is a pointer to a slink:VkVideoEncodeInfoKHR
-    structure.
-
-include::{generated}/validity/protos/vkCmdEncodeVideoKHR.txt[]
---
-
-[open,refpage='VkVideoEncodeInfoKHR',desc='Structure to chain codec-specific structures to',type='structs']
---
-The slink:VkVideoEncodeInfoKHR structure is defined as:
-
-include::{generated}/api/structs/VkVideoEncodeInfoKHR.txt[]
-  * pname:sType is the type of this structure.
-  * pname:pNext is a pointer to a structure extending this structure.
-    A codec-specific extension structure must: be chained to specify what
-    bitstream unit to generate with this encode operation.
-  * pname:flags is a bitmask of elink:VkVideoEncodeFlagBitsKHR specifying
-    encode flags, and is reserved for future versions of this specification.
-  * pname:qualityLevel is the coding quality level of the encoding.
-    It is defined by the codec-specific extensions.
-  * pname:codedExtent is the coded size of the encode operations.
-  * pname:dstBitstreamBuffer is the buffer where the encoded bitstream
-    output will be produced.
-  * pname:dstBitstreamBufferOffset is the offset in the
-    pname:dstBitstreamBuffer where the encoded bitstream output will start.
-    pname:dstBitstreamBufferOffset's value must: be aligned to
-    slink:VkVideoCapabilitiesKHR::pname:minBitstreamBufferOffsetAlignment,
-    as reported by the implementation.
-  * pname:dstBitstreamBufferMaxRange is the maximum size of the
-    pname:dstBitstreamBuffer that can be used while the encoded bitstream
-    output is produced.
-    pname:dstBitstreamBufferMaxRange's value must: be aligned to
-    slink:VkVideoCapabilitiesKHR::pname:minBitstreamBufferSizeAlignment, as
-    reported by the implementation.
-  * pname:srcPictureResource is the Picture Resource of the
-    <<input-encode-picture,Input Picture>> to be encoded by the operation.
-  * pname:pSetupReferenceSlot is a pointer to a
-    slink:VkVideoReferenceSlotKHR structure used for generating a
-    reconstructed reference slot and Picture Resource.
-    pname:pSetupReferenceSlot->slotIndex specifies the slot index number to
-    use as a target for producing the Reconstructed (DPB) data.
-    pname:pSetupReferenceSlot must: be one of the entries provided in
-    slink:VkVideoBeginCodingInfoKHR via the pname:pReferenceSlots within the
-    flink:vkCmdBeginVideoCodingKHR command that established the Vulkan Video
-    Encode Context for this command.
-  * pname:referenceSlotCount is the number of Reconstructed Reference
-    Pictures that will be used when this encoding operation is executing.
-  * pname:pReferenceSlots is `NULL` or a pointer to an array of
-    slink:VkVideoReferenceSlotKHR structures that will be used when this
-    encoding operation is executing.
-    Each entry in pname:pReferenceSlots must: be one of the entries provided
-    in slink:VkVideoBeginCodingInfoKHR via the pname:pReferenceSlots within
-    the flink:vkCmdBeginVideoCodingKHR command that established the Vulkan
-    Video Encode Context for this command.
-
-Multiple flink:vkCmdEncodeVideoKHR commands may: be recorded within a Vulkan
-Video Encode Context.
-The execution of each flink:vkCmdEncodeVideoKHR command will result in
-generating codec-specific bitstream units.
-These bitstream units are generated consecutively into the bitstream buffer
-specified in pname:dstBitstreamBuffer of slink:VkVideoEncodeInfoKHR within
-the flink:vkCmdBeginVideoCodingKHR command.
-The produced bitstream is the sum of all these bitstream units, including
-any padding between the bitstream units.
-Any bitstream padding must: be filled with data compliant to the codec
-standard so as not to cause any syntax errors during decoding of the
-bitstream units with the padding included.
-The range of the bitstream buffer written can: be queried via
-<<queries-video-encode-bitstream-buffer-range, video encode bitstream buffer
-range queries>>.
-
-include::{generated}/validity/structs/VkVideoEncodeInfoKHR.txt[]
---
-
-[open,refpage='VkVideoEncodeFlagBitsKHR',desc='Video Encode Command Flags',type='enums']
---
-The flink:vkCmdEncodeVideoKHR flags are defined with the following
-enumeration:
-
-include::{generated}/api/enums/VkVideoEncodeFlagBitsKHR.txt[]
-
-  * ename:VK_VIDEO_ENCODE_RESERVED_0_BIT_KHR The current version of the
-    specification has reserved this value for future use.
---
-
-[open,refpage='VkVideoEncodeFlagsKHR',desc='Bitmask specifying the video encode flink:vkCmdEncodeVideoKHR flags',type='flags']
---
-include::{generated}/api/flags/VkVideoEncodeFlagsKHR.txt[]
-
-tlink:VkVideoEncodeFlagsKHR is a bitmask type for setting a mask of zero or
-more elink:VkVideoEncodeFlagBitsKHR.
---
-
-[open,refpage='VkVideoEncodeRateControlInfoKHR',desc='Structure to set encode rate control parameters',type='structs']
---
-The slink:VkVideoEncodeRateControlInfoKHR structure is defined as:
-
-include::{generated}/api/structs/VkVideoEncodeRateControlInfoKHR.txt[]
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:flags is a bitmask of
-    elink:VkVideoEncodeRateControlModeFlagBitsKHR specifying encode rate
-    control flags.
-  * pname:rateControlMode is a elink:VkVideoEncodeRateControlModeFlagBitsKHR
-    value specifying the encode rate control mode.
-  * pname:averageBitrate is the average bitrate in bits/second.
-    Valid when rate control is not
-    ename:VK_VIDEO_ENCODE_RATE_CONTROL_MODE_NONE_BIT_KHR.
-  * pname:peakToAverageBitrateRatio is the peak bitrate to average bitrate
-    in percentage.
-    Valid when rate control is
-    ename:VK_VIDEO_ENCODE_RATE_CONTROL_MODE_VBR_BIT_KHR.
-  * pname:frameRateNumerator is the numerator of the frame rate.
-    Valid when rate control is not
-    ename:VK_VIDEO_ENCODE_RATE_CONTROL_MODE_NONE_BIT_KHR.
-  * pname:frameRateDenominator is the denominator of the frame rate.
-    Valid when rate control is not
-    ename:VK_VIDEO_ENCODE_RATE_CONTROL_MODE_NONE_BIT_KHR.
-  * pname:virtualBufferSizeInMs is the leaky bucket model virtual buffer
-    size in milliseconds, with respect to peak bitrate.
-    Valid when rate control is not
-    ename:VK_VIDEO_ENCODE_RATE_CONTROL_MODE_NONE_BIT_KHR.
-    For example, virtual buffer size is (pname:virtualBufferSizeInMs *
-    pname:peakToAverageBitrateRatio * pname:averageBitrate / 100000).
-
-A codec-specific extension structure for further rate control parameter
-settings may: be chained to slink:VkVideoEncodeRateControlInfoKHR.
-
-include::{generated}/validity/structs/VkVideoEncodeRateControlInfoKHR.txt[]
---
-
-[open,refpage='VkVideoEncodeRateControlModeFlagBitsKHR',desc='Video encode rate control modes',type='enums']
---
-The rate control modes are defined with the following enums:
-
-include::{generated}/api/enums/VkVideoEncodeRateControlModeFlagBitsKHR.txt[]
-
-  * ename:VK_VIDEO_ENCODE_RATE_CONTROL_MODE_NONE_BIT_KHR for disabling rate
-    control.
-  * ename:VK_VIDEO_ENCODE_RATE_CONTROL_MODE_CBR_BIT_KHR for constant bitrate
-    rate control mode.
-  * ename:VK_VIDEO_ENCODE_RATE_CONTROL_MODE_VBR_BIT_KHR for variable bitrate
-    rate control mode.
---
-
-[open,refpage='VkVideoEncodeRateControlModeFlagsKHR',desc='Bitmask specifying the video encode flink:vkCmdControlVideoCodingKHR flags',type='flags']
---
-include::{generated}/api/flags/VkVideoEncodeRateControlModeFlagsKHR.txt[]
-
-tlink:VkVideoEncodeRateControlModeFlagsKHR is a bitmask type for setting a
-mask of zero or more elink:VkVideoEncodeRateControlModeFlagBitsKHR.
---
-
-[open,refpage='VkVideoEncodeRateControlFlagBitsKHR',desc='Video Encode Rate Control Flags',type='enums']
---
-The flink:vkCmdControlVideoCodingKHR flags are defined with the following
-enumeration:
-
-include::{generated}/api/enums/VkVideoEncodeRateControlFlagBitsKHR.txt[]
-
-  * ename:VK_VIDEO_ENCODE_RESERVED_0_BIT_KHR The current version of the
-    specification has reserved this value for future use.
---
-
-[open,refpage='VkVideoEncodeRateControlFlagsKHR',desc='Bitmask specifying the video encode flink:vkCmdControlVideoCodingKHR flags',type='flags']
---
-include::{generated}/api/flags/VkVideoEncodeRateControlFlagsKHR.txt[]
-
-tlink:VkVideoEncodeRateControlFlagsKHR is a bitmask type for setting a mask
-of zero or more elink:VkVideoEncodeRateControlFlagBitsKHR.
---
diff --git a/registry/vulkan/chapters/video_encode_h264_extensions.txt b/registry/vulkan/chapters/video_encode_h264_extensions.txt
deleted file mode 100644
index 50227ce..0000000
--- a/registry/vulkan/chapters/video_encode_h264_extensions.txt
+++ /dev/null
@@ -1,547 +0,0 @@
-// Copyright 2018-2021 The Khronos Group Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-[[encode-h264]]
-== Encode H.264
-
-This extension adds H.264 codec specific structures/types needed to support
-H.264 encoding.
-Unless otherwise noted, all references to the H.264 specification are to the
-2010 edition published by the ITU-T, dated March 2010.
-This specification is available at http://www.itu.int/rec/T-REC-H.264.
-
-
-=== H.264 encode profile
-
-An H.264 encode profile is specified by including the
-slink:VkVideoEncodeH264ProfileEXT structure in the pname:pNext chain of the
-slink:VkVideoProfileKHR structure when
-slink:VkVideoProfileKHR::pname:videoCodecOperation is
-ename:VK_VIDEO_CODEC_OPERATION_ENCODE_H264_BIT_EXT.
-
-[open,refpage='VkVideoEncodeH264ProfileEXT',desc='Structure specifying H.264 encode profile',type='structs']
---
-The slink:VkVideoEncodeH264ProfileEXT structure is defined as:
-
-include::{generated}/api/structs/VkVideoEncodeH264ProfileEXT.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:stdProfileIdc is a code:StdVideoH264ProfileIdc value specifying
-    the H.264 codec profile IDC.
-
-include::{generated}/validity/structs/VkVideoEncodeH264ProfileEXT.txt[]
---
-
-
-=== Capabilities
-
-[open,refpage='VkVideoEncodeH264CapabilitiesEXT',desc='Structure specifying H.264 encode capabilities',type='structs']
---
-When flink:vkGetPhysicalDeviceVideoCapabilitiesKHR is called to query the
-capabilities with parameter pname:videoCodecOperation specified as
-ename:VK_VIDEO_CODEC_OPERATION_ENCODE_H264_BIT_EXT, a
-slink:VkVideoEncodeH264CapabilitiesEXT structure can: be chained to
-slink:VkVideoCapabilitiesKHR to retrieve H.264 extension specific
-capabilities.
-
-The slink:VkVideoEncodeH264CapabilitiesEXT structure is defined as:
-
-include::{generated}/api/structs/VkVideoEncodeH264CapabilitiesEXT.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:flags is a bitmask of elink:VkVideoEncodeH264CapabilityFlagBitsEXT
-    describing supported encoding tools.
-  * pname:inputModeFlags is a bitmask of
-    elink:VkVideoEncodeH264InputModeFlagBitsEXT describing supported command
-    buffer input granularities/modes.
-  * pname:outputModeFlags is a bitmask of
-    elink:VkVideoEncodeH264OutputModeFlagBitsEXT describing supported output
-    (bitstream size reporting) granularities/modes.
-  * pname:maxPictureSizeInMbs reports the maximum encoded picture width and
-    height in Macroblocks.
-  * pname:minPictureSizeInMbs reports the minimum encoded picture width and
-    height in Macroblocks.
-  * pname:inputImageDataAlignment reports alignment of data that must: be
-    filled in the input image horizontally and vertically in pixels.
-    Max is 16: Data must: be filled up to Macroblock boundary (no
-    extrapolation/filling is supported by implementation).
-    Min is 1: The implementation will take care of all needed
-    extrapolation/filling up to the next Macroblock boundary.
-  * pname:maxNumL0ReferenceForP reports the maximum number of reference
-    pictures the encoder supports as list0 references for P pictures.
-  * pname:maxNumL0ReferenceForB reports the maximum number of reference
-    pictures the encoder supports as list0 references for B pictures.
-    Reports 0 if B pictures are not supported.
-  * pname:maxNumL1Reference reports the maximum number of reference pictures
-    the encoder supports as list1 references if B pictures are supported.
-    Reports 0 if B pictures are not supported.
-  * pname:qualityLevelCount is the number of discrete quality levels
-    supported.
-  * pname:stdExtensionVersion is the specific H.264 extension name and
-    version supported by this implementation.
-
-include::{generated}/validity/structs/VkVideoEncodeH264CapabilitiesEXT.txt[]
---
-
-[open,refpage='VkVideoEncodeH264CapabilityFlagsEXT',desc='Bitmask of VkVideoEncodeH264CapabilityFlagBitsEXT',type='flags']
---
-include::{generated}/api/flags/VkVideoEncodeH264CapabilityFlagsEXT.txt[]
-
-tname:VkVideoEncodeH264CapabilityFlagsEXT is a bitmask type for setting a
-mask of zero or more elink:VkVideoEncodeH264CapabilityFlagBitsEXT.
---
-
-[open,refpage='VkVideoEncodeH264CapabilityFlagBitsEXT',desc='Video encode H.264 capability flags',type='enums']
---
-Bits which may: be set in
-slink:VkVideoEncodeH264CapabilitiesEXT::pname:flags, indicating the encoding
-tools supported, are:
-
-include::{generated}/api/enums/VkVideoEncodeH264CapabilityFlagBitsEXT.txt[]
-
-  * ename:VK_VIDEO_ENCODE_H264_CAPABILITY_CABAC_BIT_EXT reports if CABAC
-    entropy coding is supported.
-  * ename:VK_VIDEO_ENCODE_H264_CAPABILITY_CAVLC_BIT_EXT reports if CAVLC
-    entropy coding is supported.
-    An implementation must: support at least one entropy coding mode.
-  * ename:VK_VIDEO_ENCODE_H264_CAPABILITY_WEIGHTED_BI_PRED_IMPLICIT_BIT_EXT
-    reports if using weighted_bipred_idc_flag from StdVideoH264PpsFlags is
-    supported.
-  * ename:VK_VIDEO_ENCODE_H264_CAPABILITY_TRANSFORM_8X8_BIT_EXT reports if
-    enabling transform_8x8_mode_flag in StdVideoH264PpsFlags is supported.
-  * ename:VK_VIDEO_ENCODE_H264_CAPABILITY_CHROMA_QP_OFFSET_BIT_EXT reports
-    if setting chroma_qp_index_offset in StdVideoH264PictureParameterSet is
-    supported.
-  * ename:VK_VIDEO_ENCODE_H264_CAPABILITY_SECOND_CHROMA_QP_OFFSET_BIT_EXT
-    reports if setting second_chroma_qp_index_offset in
-    StdVideoH264PictureParameterSet is supported.
-  * ename:VK_VIDEO_ENCODE_H264_CAPABILITY_DEBLOCKING_FILTER_DISABLED_BIT_EXT
-    reports if using STD_VIDEO_H264_DISABLE_DEBLOCKING_FILTER_IDC_DISABLED
-    from StdVideoH264DisableDeblockingFilterIdc is supported.
-  * ename:VK_VIDEO_ENCODE_H264_CAPABILITY_DEBLOCKING_FILTER_ENABLED_BIT_EXT
-    reports if using STD_VIDEO_H264_DISABLE_DEBLOCKING_FILTER_IDC_ENABLED
-    from StdVideoH264DisableDeblockingFilterIdc is supported.
-  * ename:VK_VIDEO_ENCODE_H264_CAPABILITY_DEBLOCKING_FILTER_PARTIAL_BIT_EXT
-    reports if using STD_VIDEO_H264_DISABLE_DEBLOCKING_FILTER_IDC_PARTIAL
-    from StdVideoH264DisableDeblockingFilterIdc is supported.
-    An implementation must: support at least one deblocking filter mode.
-  * ename:VK_VIDEO_ENCODE_H264_CAPABILITY_MULTIPLE_SLICE_PER_FRAME_BIT_EXT
-  * ename:VK_VIDEO_ENCODE_H264_CAPABILITY_EVENLY_DISTRIBUTED_SLICE_SIZE_BIT_EXT
---
-
-[open,refpage='VkVideoEncodeH264InputModeFlagsEXT',desc='Bitmask of VkVideoEncodeH264InputModeFlagBitsEXT',type='flags']
---
-include::{generated}/api/flags/VkVideoEncodeH264InputModeFlagsEXT.txt[]
-
-tname:VkVideoEncodeH264InputModeFlagsEXT is a bitmask type for setting a
-mask of zero or more elink:VkVideoEncodeH264InputModeFlagBitsEXT.
---
-
-[open,refpage='VkVideoEncodeH264InputModeFlagBitsEXT',desc='Video encode H.264 input modes',type='enums']
---
-The pname:inputModeFlags field reports the various commmand buffer input
-granularities supported by the implementation as follows:
-
-include::{generated}/api/enums/VkVideoEncodeH264InputModeFlagBitsEXT.txt[]
-
-  * ename:VK_VIDEO_ENCODE_H264_INPUT_MODE_FRAME_BIT_EXT indicates that a
-    single command buffer must: at least encode an entire frame.
-    Any non-VCL NALUs must: be encoded using the same command buffer as the
-    frame if ename:VK_VIDEO_ENCODE_H264_INPUT_MODE_NON_VCL_BIT_EXT is not
-    supported.
-  * ename:VK_VIDEO_ENCODE_H264_INPUT_MODE_SLICE_BIT_EXT indicates that a
-    single command buffer must: at least encode a single slice.
-    Any non-VCL NALUs must: be encoded using the same command buffer as the
-    first slice of the frame if
-    ename:VK_VIDEO_ENCODE_H264_INPUT_MODE_NON_VCL_BIT_EXT is not supported.
-  * ename:VK_VIDEO_ENCODE_H264_INPUT_MODE_NON_VCL_BIT_EXT indicates that a
-    single command buffer may: encode a non-VCL NALU by itself.
-
-An implementation must: support at least one of
-ename:VK_VIDEO_ENCODE_H264_INPUT_MODE_FRAME_BIT_EXT or
-ename:VK_VIDEO_ENCODE_H264_INPUT_MODE_SLICE_BIT_EXT.
---
-
-[open,refpage='VkVideoEncodeH264OutputModeFlagsEXT',desc='Bitmask of VkVideoEncodeH264OutputModeFlagBitsEXT',type='flags']
---
-include::{generated}/api/flags/VkVideoEncodeH264OutputModeFlagsEXT.txt[]
-
-tname:VkVideoEncodeH264OutputModeFlagsEXT is a bitmask type for setting a
-mask of zero or more elink:VkVideoEncodeH264InputModeFlagBitsEXT.
---
-
-[open,refpage='VkVideoEncodeH264OutputModeFlagBitsEXT',desc='Video encode H.264 output modes',type='enums']
---
-Bits which may: be set in
-slink:VkVideoEncodeH264CapabilitiesEXT::pname:outputModeFlags, indicating
-the minimum bitstream generation commands that must: be included between
-each flink:vkCmdBeginVideoCodingKHR and flink:vkCmdEndVideoCodingKHR pair
-(henceforth simply begin/end pair), are:
-
-include::{generated}/api/enums/VkVideoEncodeH264OutputModeFlagBitsEXT.txt[]
-
-  * ename:VK_VIDEO_ENCODE_H264_OUTPUT_MODE_FRAME_BIT_EXT indicates that
-    calls to generate all NALUs of a frame must: be included within a single
-    begin/end pair.
-    Any non-VCL NALUs must: be encoded within the same begin/end pair if
-    ename:VK_VIDEO_ENCODE_H264_OUTPUT_MODE_NON_VCL_BIT_EXT is not supported.
-  * ename:VK_VIDEO_ENCODE_H264_OUTPUT_MODE_SLICE_BIT_EXT indicates that each
-    begin/end pair must: encode at least one slice.
-    Any non-VCL NALUs must: be encoded within the same begin/end pair as the
-    first slice of the frame if
-    ename:VK_VIDEO_ENCODE_H264_OUTPUT_MODE_NON_VCL_BIT_EXT is not supported.
-  * ename:VK_VIDEO_ENCODE_H264_OUTPUT_MODE_NON_VCL_BIT_EXT indicates that
-    each begin/end pair may: encode only a non-VCL NALU by itself.
-    An implementation must: support at least one of
-    ename:VK_VIDEO_ENCODE_H264_OUTPUT_MODE_FRAME_BIT_EXT or
-    ename:VK_VIDEO_ENCODE_H264_OUTPUT_MODE_SLICE_BIT_EXT.
-
-A single begin/end pair must: not encode more than a single frame.
-
-The bitstreams of NALUs generated within a single begin/end pair are written
-continuously into the same bitstream buffer (any padding between the NALUs
-must: be compliant to the H.264 standard).
-
-The supported input modes must: be coarser or equal to the supported output
-modes.
-For example, it is illegal to report slice input is supported but only frame
-output is supported.
-
-An implementation must: report one of the following combinations of
-input/output modes:
-
-  ** Input: Frame, Output: Frame
-  ** Input: Frame, Output: Frame and Non-VCL
-  ** Input: Frame, Output: Slice
-  ** Input: Frame, Output: Slice and Non-VCL
-  ** Input: Slice, Output: Slice
-  ** Input: Slice, Output: Slice and Non-VCL
-  ** Input: Frame and Non-VCL, Output: Frame and Non-VCL
-  ** Input: Frame and Non-VCL, Output: Slice and Non-VCL
-  ** Input: Slice and Non-VCL, Output: Slice and Non-VCL
---
-
-
-=== Create Information
-
-[open,refpage='VkVideoEncodeH264SessionCreateInfoEXT', desc='Structure specifies H.264 encoder creation parameters', type='structs']
---
-A slink:VkVideoEncodeH264SessionCreateInfoEXT structure must: be chained to
-slink:VkVideoSessionCreateInfoKHR when the function
-flink:vkCreateVideoSessionKHR is called with pname:videoCodecOperation in
-slink:VkVideoSessionCreateInfoKHR set to
-ename:VK_VIDEO_CODEC_OPERATION_ENCODE_H264_BIT_EXT.
-
-The sname:VkVideoEncodeH264SessionCreateInfoEXT structure is defined as:
-
-include::{generated}/api/structs/VkVideoEncodeH264SessionCreateInfoEXT.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:flags is a bitmask of tlink:VkVideoEncodeH264CreateFlagsEXT
-    specifying H.264 encoder creation flags.
-  * pname:maxPictureSizeInMbs specifies the syntax element
-    pic_width_in_mbs_minus1 + 1 and the syntax element
-    pic_height_in_map_units_minus1 + 1.
-  * pname:pStdExtensionVersion is a pointer to a slink:VkExtensionProperties
-    structure specifying H.264 codec extensions.
-
-include::{generated}/validity/structs/VkVideoEncodeH264SessionCreateInfoEXT.txt[]
---
-
-[open,refpage='VkVideoEncodeH264CreateFlagsEXT',desc='Bitmask specifying the video encode session creation flags',type='flags']
---
-include::{generated}/api/flags/VkVideoEncodeH264CreateFlagsEXT.txt[]
-
-tlink:VkVideoEncodeH264CreateFlagsEXT is a bitmask type for setting a mask
-of zero or more elink:VkVideoEncodeH264CreateFlagBitsEXT.
---
-
-[open,refpage='VkVideoEncodeH264CreateFlagBitsEXT',desc='Video encode session creation flags',type='enums']
---
-Bits which can: be set in
-slink:VkVideoEncodeH264SessionCreateInfoEXT::pname:flags are:
-
-include::{generated}/api/enums/VkVideoEncodeH264CreateFlagBitsEXT.txt[]
-
-  * ename:VK_VIDEO_ENCODE_H264_CREATE_DEFAULT_EXT is 0, and specifies no
-    additional creation flags.
-  * ename:VK_VIDEO_ENCODE_H264_CREATE_RESERVED_0_BIT_EXT The current version
-    of the specification has reserved this value for future use.
---
-
-
-=== Encoder Parameter Sets
-
-To reduce parameter traffic during encoding, the encoder parameter set
-object supports storing H.264 SPS/PPS parameter sets that may: be later
-referenced during encoding.
-
-[open,refpage='VkVideoEncodeH264SessionParametersCreateInfoEXT',desc='Structure specifies H.264 encoder parameter set information',type='structs']
---
-A slink:VkVideoEncodeH264SessionParametersCreateInfoEXT structure holding
-one H.264 SPS and at least one H.264 PPS paramater set must: be chained to
-slink:VkVideoSessionParametersCreateInfoKHR when calling
-flink:vkCreateVideoSessionParametersKHR to store these parameter set(s) with
-the encoder parameter set object for later reference.
-The provided H.264 SPS/PPS parameters must: be within the limits specified
-during encoder creation for the encoder specified in
-slink:VkVideoSessionParametersCreateInfoKHR.
-
-The slink:VkVideoEncodeH264SessionParametersCreateInfoEXT structure is
-defined as:
-
-include::{generated}/api/structs/VkVideoEncodeH264SessionParametersCreateInfoEXT.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:maxSpsStdCount is the maximum number of SPS parameters that the
-    sname:VkVideoSessionParametersKHR can contain.
-  * pname:maxPpsStdCount is the maximum number of PPS parameters that the
-    sname:VkVideoSessionParametersKHR can contain.
-  * pname:pParametersAddInfo is `NULL` or a pointer to a
-    sname:VkVideoEncodeH264SessionParametersAddInfoEXT structure specifying
-    H.264 parameters to add upon object creation.
-
-include::{generated}/validity/structs/VkVideoEncodeH264SessionParametersCreateInfoEXT.txt[]
---
-
-[open,refpage='VkVideoEncodeH264SessionParametersAddInfoEXT',desc='Structure specifies H.264 encoder parameter set information',type='structs']
---
-include::{generated}/api/structs/VkVideoEncodeH264SessionParametersAddInfoEXT.txt[]
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:spsStdCount is the number of SPS elements in the pname:pSpsStd.
-    Its value must: be less than or equal to the value of
-    pname:maxSpsStdCount.
-  * pname:pSpsStd is a pointer to an array of
-    code:StdVideoH264SequenceParameterSet structures representing H.264
-    sequence parameter sets.
-    Each element of the array must: have a unique H.264 SPS ID.
-  * pname:ppsStdCount is the number of PPS provided in pname:pPpsStd.
-    Its value must: be less than or equal to the value of
-    pname:maxPpsStdCount.
-  * pname:pPpsStd is a pointer to an array of
-    code:StdVideoH264PictureParameterSet structures representing H.264
-    picture parameter sets.
-    Each element of the array must: have a unique H.264 SPS-PPS ID pair.
-
-.Valid Usage
-****
-  * [[VUID-VkVideoEncodeH264SessionParametersAddInfoEXT-spsStdCount-04837]]
-    The values of pname:spsStdCount and pname:ppsStdCount must: be less than
-    or equal to the values of pname:maxSpsStdCount and pname:maxPpsStdCount,
-    respectively
-  * [[VUID-VkVideoEncodeH264SessionParametersAddInfoEXT-maxSpsStdCount-04838]]
-    When the pname:maxSpsStdCount number of parameters of type
-    StdVideoH264SequenceParameterSet in the Video Session Parameters object
-    is reached, no additional parameters of that type can be added to the
-    object.
-    ename:VK_ERROR_TOO_MANY_OBJECTS will be returned if an attempt is made
-    to add additional data to this object at this point
-  * [[VUID-VkVideoEncodeH264SessionParametersAddInfoEXT-maxPpsStdCount-04839]]
-    When the pname:maxPpsStdCount number of parameters of type
-    StdVideoH264PictureParameterSet in the Video Session Parameters object
-    is reached, no additional parameters of that type can be added to the
-    object.
-    ename:VK_ERROR_TOO_MANY_OBJECTS will be returned if an attempt is made
-    to add additional data to this object at this point
-  * [[VUID-VkVideoEncodeH264SessionParametersAddInfoEXT-None-04840]]
-    Each entry to be added must: have a unique, to the rest of the parameter
-    array entries and the existing parameters in the Video Session
-    Parameters Object that is being updated, SPS-PPS IDs
-  * [[VUID-VkVideoEncodeH264SessionParametersAddInfoEXT-None-04841]]
-    Parameter entries that already exist in Video Session Parameters object
-    with a particular SPS-PPS IDs cannot: be replaced nor updated
-  * [[VUID-VkVideoEncodeH264SessionParametersAddInfoEXT-None-04842]]
-    When creating a new object using a Video Session Parameters as a
-    template, the array's parameters with the same SPS-PPS IDs as the ones
-    from the template take precedence
-  * [[VUID-VkVideoEncodeH264SessionParametersAddInfoEXT-None-04843]]
-    SPS/PPS parameters must: comply with the limits specified in
-    slink:VkVideoSessionCreateInfoKHR during Video Session creation
-****
-
-include::{generated}/validity/structs/VkVideoEncodeH264SessionParametersAddInfoEXT.txt[]
---
-
-
-=== Frame Encoding
-
-In order to encode a frame, add a slink:VkVideoEncodeH264VclFrameInfoEXT
-structure to the pname:pNext chain of the slink:VkVideoEncodeInfoKHR
-structure passed to the flink:vkCmdEncodeVideoKHR command.
-
-[open,refpage='VkVideoEncodeH264VclFrameInfoEXT',desc='Structure specifies H.264 encode frame parameters',type='structs']
---
-The structure slink:VkVideoEncodeH264VclFrameInfoEXT representing a frame
-encode operation is defined as:
-
-include::{generated}/api/structs/VkVideoEncodeH264VclFrameInfoEXT.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:refDefaultFinalList0EntryCount is the default number of reference
-    List0 entries for all slices of this frame.
-    Each slice may: override this by providing its own List0 entries.
-  * pname:pRefDefaultFinalList0Entries is a pointer to an array of
-    slink:VkVideoEncodeH264DpbSlotInfoEXT structures providing information
-    for each reference List0 entry.
-    The entries provided must: be ordered after all reference List0
-    modification operations are applied (i.e. final list order).
-    The entires provided must: not reflect decoded picture marking
-    operations in this frame that are applicable to references; the impact
-    of such operations must: be reflected in future frame encode cmds.
-    The slot index in each entry must: match one of the slot indexes
-    provided in pname:pReferenceSlots of the slink:VkVideoEncodeInfoKHR
-    structure to which this structure is chained.
-  * pname:refDefaultFinalList1EntryCount is the default number of reference
-    List1 entries for all slices of this frame.
-    Each slice may: override this by providing its own List1 entries.
-  * pname:pRefDefaultFinalList1Entries is a pointer to an array of
-    slink:VkVideoEncodeH264DpbSlotInfoEXT structures providing information
-    related to each reference List1 entry.
-    The entries provided must: be ordered after all reference List1
-    modification operations are applied (i.e. final list order).
-    The entires provided must: not reflect decoded picture marking
-    operations in this frame that are applicable to references; the impact
-    of such operations must: be reflected in future frame encode cmds.
-    The slot index in each entry must: match one of the slot indexes
-    provided in pname:pReferenceSlots of the slink:VkVideoEncodeInfoKHR
-    structure to which this structure is chained.
-  * pname:naluSliceEntryCount is the number of NALUs in this frame.
-  * pname:pNaluSliceEntries is a pointer to an array of pname:naluCount
-    slink:VkVideoEncodeH264NaluSliceEXT structures that make up the frame.
-    This is an ordered sequence; the NALUs are generated consecutively in
-    the bitstream buffer (provided in pname:bitstreamBuffer in
-    slink:VkVideoBeginCodingInfoKHR) in the same order as in this array.
-  * pname:pCurrentPictureInfo is a pointer to a
-    slink:VkVideoEncodeH264DpbSlotInfoEXT structure specifying information
-    for the reconstructed picture for this frame.
-    Info provided must: reflect decoded picture marking operations in this
-    frame that are applicable to this frame.
-    The slot index in pCurrentPictureInfo must: match the slot index
-    provided in pname:pSetupReferenceSlot of slink:VkVideoEncodeInfoKHR
-    structure to which this structure is chained to.
-
-include::{generated}/validity/structs/VkVideoEncodeH264VclFrameInfoEXT.txt[]
---
-
-[open,refpage='VkVideoEncodeH264DpbSlotInfoEXT',desc='Structure specifies H.264 encode DPB picture information',type='structs']
---
-The slink:VkVideoEncodeH264DpbSlotInfoEXT structure correlates a DPB Slot
-index with codec-specific information and is defined as:
-
-include::{generated}/api/structs/VkVideoEncodeH264DpbSlotInfoEXT.txt[]
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:slotIndex is the slot index for this picture.
-    pname:slotIndex must: match the pname:slotIndex in
-    pname:pSetupReferenceSlot of slink:VkVideoEncodeInfoKHR in the command
-    used to encode the corresponding picture.
-  * pname:pStdPictureInfo is a pointer to a
-    code:StdVideoEncodeH264PictureInfo structure specifying codec standard
-    specific syntax/information associated with this picture from the H.264
-    specification.
-
-include::{generated}/validity/structs/VkVideoEncodeH264DpbSlotInfoEXT.txt[]
---
-
-[open,refpage='VkVideoEncodeH264NaluSliceEXT',desc='Structure specifies H.264 encode slice NALU parameters',type='structs']
---
-The structure slink:VkVideoEncodeH264NaluSliceEXT representing a slice is
-defined as:
-
-include::{generated}/api/structs/VkVideoEncodeH264NaluSliceEXT.txt[]
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:pSliceHeaderStd is a pointer to a
-    code:StdVideoEncodeH264SliceHeader specifying the standard slice header
-    from the H.264 specification.
-  * pname:mbCount is the number of macroblocks in this slice.
-  * pname:refFinalList0EntryCount is the number of active references in
-    List0.
-    If zero, the default frame List0 provided in the enclosing
-    slink:VkVideoEncodeH264VclFrameInfoEXT is used.
-    If non-zero, it overrides the default frame List0 for this slice.
-  * pname:pRefFinalList0Entries is a pointer to a
-    slink:VkVideoEncodeH264DpbSlotInfoEXT specifying DPB information for the
-    active List0 references.
-    The same restrictions related to order of entries and decoded picture
-    marking operations described for List0 in
-    slink:VkVideoEncodeH264VclFrameInfoEXT apply here.
-  * pname:refFinalList1EntryCount is the number of active references in
-    List1.
-    If zero, the default frame List1 provided in the enclosing
-    slink:VkVideoEncodeH264VclFrameInfoEXT is used.
-    If non-zero, it overrides the default frame List1 for this slice.
-  * pname:pRefFinalList1Entries is a pointer to a
-    slink:VkVideoEncodeH264DpbSlotInfoEXT structure specifying DPB
-    information for the active List1 references.
-    The same restrictions related to order of entries and decoded picture
-    marking operations described for List1 in
-    slink:VkVideoEncodeH264VclFrameInfoEXT apply here.
-  * pname:precedingNaluBytes specifies the number of bytes consumed by
-    non-VCL NALUs inserted before this slice (not through this API).
-  * pname:minQp is the minimum quantization parameter when rate control is
-    enabled.
-  * pname:maxQp is the maximum quantization parameter when rate control is
-    enabled.
-
-ifdef::editing-notes[]
-[NOTE]
-.editing-note
-====
-TODO: move pname:precedingNaluBytes, pname:minQp, and pname:maxQP to the
-Frame/SliceRC struct?
-====
-endif::editing-notes[]
-
-When rate control is disabled, pname:minQp and pname:maxQp must: be set to
-the same QP value.
-
-include::{generated}/validity/structs/VkVideoEncodeH264NaluSliceEXT.txt[]
---
-
-[open,refpage='VkVideoEncodeH264EmitPictureParametersEXT',desc='Structure specifies H.264 encode SPS NALU insertion parameters',type='structs']
---
-The structure slink:VkVideoEncodeH264EmitPictureParametersEXT is defined as:
-
-include::{generated}/api/structs/VkVideoEncodeH264EmitPictureParametersEXT.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:spsId is the H.264 SPS ID for the H.264 SPS to insert in the
-    bitstream.
-    The SPS ID must: match the SPS provided in pname:spsStd of
-    slink:VkVideoEncodeH264SessionParametersCreateInfoEXT.
-    This is retrieved from the slink:VkVideoSessionParametersKHR object
-    provided in slink:VkVideoBeginCodingInfoKHR.
-  * pname:emitSpsEnable enables the emitting of the SPS structure with id of
-    pname:spsId.
-  * pname:ppsIdEntryCount is the number of entries in the
-    pname:ppsIdEntries.
-    If this parameter is `0` then no pps entries are going to be emitted in
-    the bitstream.
-  * pname:ppsIdEntries is a pointer to an array of H.264 PPS IDs for the
-    H.264 PPS to insert in the bitstream.
-    The PPS IDs must: match one of the IDs of the PPS(s) provided in
-    pname:pPpsStd of slink:VkVideoEncodeH264SessionParametersCreateInfoEXT
-    to identify the PPS parameter set to insert in the bitstream.
-    This is retrieved from the slink:VkVideoSessionParametersKHR object
-    provided in slink:VkVideoBeginCodingInfoKHR.
-
-include::{generated}/validity/structs/VkVideoEncodeH264EmitPictureParametersEXT.txt[]
---
diff --git a/registry/vulkan/chapters/video_encode_h265_extensions.txt b/registry/vulkan/chapters/video_encode_h265_extensions.txt
deleted file mode 100644
index b0b394f..0000000
--- a/registry/vulkan/chapters/video_encode_h265_extensions.txt
+++ /dev/null
@@ -1,512 +0,0 @@
-// Copyright 2018-2021 The Khronos Group Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-[[encode-h265]]
-== Encode H.265
-
-This extension adds H.265 codec-specific structures/types needed to support
-H.265 video encoding.
-Unless otherwise noted, all references to the H.265 specification are to the
-2013 edition published by the ITU-T, dated April 2013.
-This specification is available at http://www.itu.int/rec/T-REC-H.265.
-
-
-=== H.265 encode profile
-
-An H.265 encode profile is specified by including the
-slink:VkVideoEncodeH265ProfileEXT structure in the pname:pNext chain of the
-slink:VkVideoProfileKHR structure when
-slink:VkVideoProfileKHR::pname:videoCodecOperation is
-ename:VK_VIDEO_CODEC_OPERATION_ENCODE_H265_BIT_EXT.
-
-[open,refpage='VkVideoEncodeH265ProfileEXT',desc='Structure specifying H.265 encode profile',type='structs']
---
-The sname:VkVideoEncodeH265ProfileEXT structure is defined as:
-
-include::{generated}/api/structs/VkVideoEncodeH265ProfileEXT.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:stdProfileIdc is a code:StdVideoH265ProfileIdc value specifying
-    the H.265 codec profile IDC.
-
-include::{generated}/validity/structs/VkVideoEncodeH265ProfileEXT.txt[]
---
-
-
-=== Capabilities
-
-[open,refpage='VkVideoEncodeH265CapabilitiesEXT',desc='Structure specifying H.265 encode capabilities',type='structs']
---
-When calling flink:vkGetPhysicalDeviceVideoCapabilitiesKHR with
-pname:pVideoProfile->videoCodecOperation specified as
-ename:VK_VIDEO_CODEC_OPERATION_ENCODE_H265_BIT_EXT, the
-slink:VkVideoEncodeH265CapabilitiesEXT structure must: be included in the
-pname:pNext chain of the slink:VkVideoCapabilitiesKHR structure to retrieve
-H.265-specific capabilities for video encoding.
-
-The sname:VkVideoEncodeH265CapabilitiesEXT structure is defined as:
-
-include::{generated}/api/structs/VkVideoEncodeH265CapabilitiesEXT.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:flags is reserved for future use.
-  * pname:inputModeFlags is a bitmask of
-    elink:VkVideoEncodeH265InputModeFlagBitsEXT describing the command
-    buffer input granularities/modes supported by the implementation.
-  * pname:outputModeFlags is a bitmask of
-    elink:VkVideoEncodeH265OutputModeFlagBitsEXT describing the output
-    (bitstream size reporting) granularities/modes supported by the
-    implementation.
-  * pname:ctbSizes is a bitmask of elink:VkVideoEncodeH265CtbSizeFlagBitsEXT
-    describing the supported CTB sizes.
-  * pname:inputImageDataAlignment reports the alignment, in pixels, for the
-    width and height of the picture data within the images used in video
-    encoding.
-  * pname:maxNumL0ReferenceForP reports the maximum number of reference
-    pictures the implementation supports in the reference list L0 for P
-    pictures.
-  * pname:maxNumL0ReferenceForB reports the maximum number of reference
-    pictures the implementation supports in the reference list L0 for B
-    pictures.
-    The reported value is `0` if encoding of B pictures is not supported.
-  * pname:maxNumL1Reference reports the maximum number of reference pictures
-    the implementation supports in the reference list L1 if encoding of B
-    pictures is supported.
-    The reported value is `0` if encoding of B pictures is not supported.
-  * pname:maxNumSubLayers reports the maximum number of sublayers.
-  * pname:qualityLevelCount is the number of quality levels supported.
-  * pname:stdExtensionVersion is a slink:VkExtensionProperties structure in
-    which the H.265 extension name and version supported by the
-    implementation are returned.
-
-include::{generated}/validity/structs/VkVideoEncodeH265CapabilitiesEXT.txt[]
---
-
-[open,refpage='VkVideoEncodeH265CapabilityFlagsEXT',desc='Reserved for future use',type='flags']
---
-include::{generated}/api/flags/VkVideoEncodeH265CapabilityFlagsEXT.txt[]
-
-tname:VkVideoEncodeH265CapabilityFlagsEXT is a bitmask type for setting a
-mask, but is currently reserved for future use.
-
-// ... a mask of zero or more elink:VkVideoEncodeH265CapabilityFlagBitsEXT.
---
-
-[open,refpage='VkVideoEncodeH265InputModeFlagsEXT',desc='Bitmask of VkVideoEncodeH265InputModeFlagBitsEXT',type='flags']
---
-include::{generated}/api/flags/VkVideoEncodeH265InputModeFlagsEXT.txt[]
-
-tname:VkVideoEncodeH265InputModeFlagsEXT is a bitmask type for setting a
-mask of zero or more elink:VkVideoEncodeH265InputModeFlagBitsEXT.
---
-
-[open,refpage='VkVideoEncodeH265InputModeFlagBitsEXT',desc='Video encode H.265 input modes',type='enums']
---
-Bits which may: be set in
-slink:VkVideoEncodeH265CapabilitiesEXT::pname:inputModeFlags, indicating the
-commmand buffer input granularities supported by the implementation, are:
-
-include::{generated}/api/enums/VkVideoEncodeH265InputModeFlagBitsEXT.txt[]
-
-  * ename:VK_VIDEO_ENCODE_H265_INPUT_MODE_FRAME_BIT_EXT indicates that a
-    single command buffer must: at least encode an entire frame.
-    Any non-VCL NALUs must: be encoded using the same command buffer as the
-    frame if ename:VK_VIDEO_ENCODE_H265_INPUT_MODE_NON_VCL_BIT_EXT is not
-    supported.
-  * ename:VK_VIDEO_ENCODE_H265_INPUT_MODE_SLICE_BIT_EXT indicates that a
-    single command buffer must: at least encode a single slice.
-    Any non-VCL NALUs must: be encoded using the same command buffer as the
-    first slice of the frame if
-    ename:VK_VIDEO_ENCODE_H265_INPUT_MODE_NON_VCL_BIT_EXT is not supported.
-  * ename:VK_VIDEO_ENCODE_H265_INPUT_MODE_NON_VCL_BIT_EXT indicates that a
-    single command buffer may: encode a non-VCL NALU by itself.
-
-An implementation must: support at least one of
-ename:VK_VIDEO_ENCODE_H265_INPUT_MODE_FRAME_BIT_EXT or
-ename:VK_VIDEO_ENCODE_H265_INPUT_MODE_SLICE_BIT_EXT.
---
-
-[open,refpage='VkVideoEncodeH265OutputModeFlagsEXT',desc='Bitmask of VkVideoEncodeH265OutputModeFlagBitsEXT',type='flags']
---
-include::{generated}/api/flags/VkVideoEncodeH265OutputModeFlagsEXT.txt[]
-
-tname:VkVideoEncodeH265OutputModeFlagsEXT is a bitmask type for setting a
-mask of zero or more elink:VkVideoEncodeH265OutputModeFlagBitsEXT.
---
-
-[open,refpage='VkVideoEncodeH265OutputModeFlagBitsEXT',desc='Video encode H.265 output modes',type='enums']
---
-Bits which may: be set in
-slink:VkVideoEncodeH265CapabilitiesEXT::pname:outputModeFlags, indicating
-the minimum bitstream generation commands that must: be included between
-each flink:vkCmdBeginVideoCodingKHR and flink:vkCmdEndVideoCodingKHR pair
-(henceforth simply begin/end pair), are:
-
-include::{generated}/api/enums/VkVideoEncodeH265OutputModeFlagBitsEXT.txt[]
-
-  * ename:VK_VIDEO_ENCODE_H265_OUTPUT_MODE_FRAME_BIT_EXT indicates that
-    calls to generate all NALUs of a frame must: be included within a single
-    begin/end pair.
-    Any non-VCL NALUs must: be encoded within the same begin/end pair if
-    ename:VK_VIDEO_ENCODE_H265_OUTPUT_MODE_NON_VCL_BIT_EXT is not supported.
-  * ename:VK_VIDEO_ENCODE_H265_OUTPUT_MODE_SLICE_BIT_EXT indicates that each
-    begin/end pair must: encode at least one slice.
-    Any non-VCL NALUs must: be encoded within the same begin/end pair as the
-    first slice of the frame if
-    ename:VK_VIDEO_ENCODE_H265_OUTPUT_MODE_NON_VCL_BIT_EXT is not supported.
-  * ename:VK_VIDEO_ENCODE_H265_OUTPUT_MODE_NON_VCL_BIT_EXT indicates that
-    each begin/end pair may: encode only a non-VCL NALU by itself.
-    An implementation must: support at least one of
-    ename:VK_VIDEO_ENCODE_H265_OUTPUT_MODE_FRAME_BIT_EXT or
-    ename:VK_VIDEO_ENCODE_H265_OUTPUT_MODE_SLICE_BIT_EXT.
-
-A single begin/end pair must: not encode more than a single frame.
-
-The bitstreams of NALUs generated within a single begin/end pair are written
-continuously into the same bitstream buffer (any padding between the NALUs
-must: be compliant to the H.265 standard).
-
-The supported input modes must: be coarser or equal to the supported output
-modes.
-For example, it is illegal to report slice input is supported but only frame
-output is supported.
-
-An implementation must: report one of the following combinations of
-input/output modes:
-
-  * Input: Frame, Output: Frame
-  * Input: Frame, Output: Frame and Non-VCL
-  * Input: Frame, Output: Slice
-  * Input: Frame, Output: Slice and Non-VCL
-  * Input: Slice, Output: Slice
-  * Input: Slice, Output: Slice and Non-VCL
-  * Input: Frame and Non-VCL, Output: Frame and Non-VCL
-  * Input: Frame and Non-VCL, Output: Slice and Non-VCL
-  * Input: Slice and Non-VCL, Output: Slice and Non-VCL
---
-
-[open,refpage='VkVideoEncodeH265CtbSizeFlagsEXT',desc='Bitmask of VkVideoEncodeH265CtbSizeFlagBitsEXT',type='flags']
---
-include::{generated}/api/flags/VkVideoEncodeH265CtbSizeFlagsEXT.txt[]
-
-tname:VkVideoEncodeH265CtbSizeFlagsEXT is a bitmask type for setting a mask
-of zero or more elink:VkVideoEncodeH265CtbSizeFlagBitsEXT.
---
-
-[open,refpage='VkVideoEncodeH265CtbSizeFlagBitsEXT',desc='Supported CTB sizes for H.265 video encode',type='enums']
---
-Bits which may: be set in
-slink:VkVideoEncodeH265CapabilitiesEXT::pname:ctbSizes, indicating the CTB
-sizes supported by the implementation, are:
-
-include::{generated}/api/enums/VkVideoEncodeH265CtbSizeFlagBitsEXT.txt[]
-
-  * ename:VK_VIDEO_ENCODE_H265_CTB_SIZE_8_BIT_EXT specifies that a CTB size
-    of 8x8 is supported.
-  * ename:VK_VIDEO_ENCODE_H265_CTB_SIZE_16_BIT_EXT specifies that a CTB size
-    of 16x16 is supported.
-  * ename:VK_VIDEO_ENCODE_H265_CTB_SIZE_32_BIT_EXT specifies that a CTB size
-    of 32x32 is supported.
-  * ename:VK_VIDEO_ENCODE_H265_CTB_SIZE_64_BIT_EXT specifies that a CTB size
-    of 64x64 is supported.
---
-
-
-=== Create Information
-
-[open,refpage='VkVideoEncodeH265SessionCreateInfoEXT', desc='Structure specifies H.265 encoder creation parameters', type='structs']
---
-When creating a Video Session object with
-slink:VkVideoSessionCreateInfoKHR::pname:pVideoProfile->videoCodecOperation
-specified as ename:VK_VIDEO_CODEC_OPERATION_ENCODE_H265_BIT_EXT, add a
-slink:VkVideoEncodeH265SessionCreateInfoEXT structure to the pname:pNext
-chain of the slink:VkVideoSessionCreateInfoKHR structure passed to
-flink:vkCreateVideoSessionKHR in order to specify the H.265-specific video
-encoder session creation parameters.
-
-The sname:VkVideoEncodeH265SessionCreateInfoEXT structure is defined as:
-
-include::{generated}/api/structs/VkVideoEncodeH265SessionCreateInfoEXT.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:flags is reserved for future use.
-  * pname:pStdExtensionVersion is a pointer to a slink:VkExtensionProperties
-    structure specifying the H.265 codec extension version.
-
-include::{generated}/validity/structs/VkVideoEncodeH265SessionCreateInfoEXT.txt[]
---
-
-[open,refpage='VkVideoEncodeH265CreateFlagsEXT',desc='Reserved for future use',type='flags']
---
-include::{generated}/api/flags/VkVideoEncodeH265CreateFlagsEXT.txt[]
-
-tname:VkVideoEncodeH265CreateFlagsEXT is a bitmask type for setting a mask,
-but is currently reserved for future use.
---
-
-
-=== Encoder H.265 Video Session Parameters Object
-
-When creating a Video Session Parameters object, add a
-slink:VkVideoEncodeH265SessionParametersCreateInfoEXT structure to the
-pname:pNext chain of the slink:VkVideoSessionParametersCreateInfoKHR
-structure passed to flink:vkCreateVideoSessionParametersKHR in order to
-specify the H.265-specific video encoder session parameters.
-
-[open,refpage='VkVideoEncodeH265SessionParametersCreateInfoEXT',desc='Structure specifies H.265 encoder parameter set info',type='structs']
---
-The sname:VkVideoEncodeH265SessionParametersCreateInfoEXT structure is
-defined as:
-
-include::{generated}/api/structs/VkVideoEncodeH265SessionParametersCreateInfoEXT.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:maxVpsStdCount is the maximum number of entries of type
-    code:StdVideoH265VideoParameterSet within
-    sname:VkVideoSessionParametersKHR.
-  * pname:maxSpsStdCount is the maximum number of entries of type
-    code:StdVideoH265SequenceParameterSet within
-    sname:VkVideoSessionParametersKHR.
-  * pname:maxPpsStdCount is the maximum number of entries of type
-    code:StdVideoH265PictureParameterSet within
-    sname:VkVideoSessionParametersKHR.
-  * pname:pParametersAddInfo is `NULL` or a pointer to a
-    slink:VkVideoEncodeH265SessionParametersAddInfoEXT structure specifying
-    the video session parameters to add upon creation of this object.
-
-When a slink:VkVideoSessionParametersKHR object contains
-pname:maxVpsStdCount code:StdVideoH265VideoParameterSet entries, no
-additional code:StdVideoH265VideoParameterSet entries can be added to it,
-and ename:VK_ERROR_TOO_MANY_OBJECTS will be returned if an attempt is made
-to add these entries.
-When a slink:VkVideoSessionParametersKHR object contains
-pname:maxSpsStdCount code:StdVideoH265SequenceParameterSet entries, no
-additional code:StdVideoH265SequenceParameterSet entries can be added to it,
-and ename:VK_ERROR_TOO_MANY_OBJECTS will be returned if an attempt is made
-to add these entries.
-When a slink:VkVideoSessionParametersKHR object contains
-pname:maxPpsStdCount code:StdVideoH265PictureParameterSet entries, no
-additional code:StdVideoH265PictureParameterSet entries can be added to it,
-and ename:VK_ERROR_TOO_MANY_OBJECTS will be returned if an attempt is made
-to add these entries.
-
-include::{generated}/validity/structs/VkVideoEncodeH265SessionParametersCreateInfoEXT.txt[]
---
-
-[open,refpage='VkVideoEncodeH265SessionParametersAddInfoEXT',desc='Structure specifies H.265 encoder parameter set info',type='structs']
---
-The sname:VkVideoEncodeH265SessionParametersAddInfoEXT structure is defined
-as:
-
-include::{generated}/api/structs/VkVideoEncodeH265SessionParametersAddInfoEXT.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:vpsStdCount is the number of VPS elements in pname:pVpsStd.
-  * pname:pVpsStd is a pointer to an array of pname:vpsStdCount
-    code:StdVideoH265VideoParameterSet structures representing H.265 video
-    parameter sets.
-  * pname:spsStdCount is the number of SPS elements in pname:pSpsStd.
-  * pname:pSpsStd is a pointer to an array of pname:spsStdCount
-    code:StdVideoH265SequenceParameterSet structures representing H.265
-    sequence parameter sets.
-  * pname:ppsStdCount is the number of PPS elements in pname:pPpsStd.
-  * pname:pPpsStd is a pointer to an array of pname:ppsStdCount
-    code:StdVideoH265PictureParameterSet structures representing H.265
-    picture parameter sets.
-
-include::{generated}/validity/structs/VkVideoEncodeH265SessionParametersAddInfoEXT.txt[]
-
-.Valid Usage
-****
-  * [[VUID-VkVideoEncodeH265SessionParametersAddInfoEXT-vpsStdCount-06438]]
-    The values of pname:vpsStdCount, pname:spsStdCount and pname:ppsStdCount
-    must: be less than or equal to the values of
-    slink:VkVideoEncodeH265SessionParametersCreateInfoEXT::pname:maxVpsStdCount,
-    slink:VkVideoEncodeH265SessionParametersCreateInfoEXT:pname:maxSpsStdCount,
-    and
-    slink:VkVideoEncodeH265SessionParametersCreateInfoEXT:pname:maxPpsStdCount,
-    respectively
-  * [[VUID-VkVideoEncodeH265SessionParametersAddInfoEXT-pVpsStd-06439]]
-    Each code:StdVideoH265VideoParameterSet entry in pname:pVpsStd must:
-    have a unique H.265 VPS ID
-  * [[VUID-VkVideoEncodeH265SessionParametersAddInfoEXT-pSpsStd-06440]]
-    Each code:StdVideoH265SequenceParameterSet entry in pname:pSpsStd must:
-    have a unique H.265 VPS-SPS ID pair
-  * [[VUID-VkVideoEncodeH265SessionParametersAddInfoEXT-pPpsStd-06441]]
-    Each code:StdVideoH265PictureParameterSet entry in pname:pPpsStd must:
-    have a unique H.265 VPS-SPS-PPS ID tuple
-  * [[VUID-VkVideoEncodeH265SessionParametersAddInfoEXT-None-06442]]
-    Each entry to be added must: have a unique, to the rest of the parameter
-    array entries and the existing parameters in the Video Session
-    Parameters Object that is being updated, VPS-SPS-PPS IDs
-  * [[VUID-VkVideoEncodeH265SessionParametersAddInfoEXT-None-06443]]
-    Parameter entries that already exist in Video Session Parameters object
-    with a particular VPS-SPS-PPS IDs must: not be replaced nor updated
-  * [[VUID-VkVideoEncodeH265SessionParametersAddInfoEXT-None-06444]]
-    When creating a new object using a Video Session Parameters as a
-    template, the array's parameters with the same VPS-SPS-PPS IDs as the
-    ones from the template take precedence
-  * [[VUID-VkVideoEncodeH265SessionParametersAddInfoEXT-None-06445]]
-    VPS/SPS/PPS parameters must: comply with the limits specified in
-    slink:VkVideoSessionCreateInfoKHR during Video Session creation
-****
---
-
-
-=== Frame Encoding
-
-In order to encode a frame, add a slink:VkVideoEncodeH265VclFrameInfoEXT
-structure to the pname:pNext chain of the slink:VkVideoEncodeInfoKHR
-structure passed to the flink:vkCmdEncodeVideoKHR command.
-
-[open,refpage='VkVideoEncodeH265VclFrameInfoEXT',desc='Structure specifies H.265 encode frame parameters',type='structs']
---
-The structure slink:VkVideoEncodeH265VclFrameInfoEXT representing a frame
-encode operation is defined as:
-
-include::{generated}/api/structs/VkVideoEncodeH265VclFrameInfoEXT.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:pReferenceFinalLists is `NULL` or a pointer to a
-    slink:VkVideoEncodeH265ReferenceListsEXT structure specifying the
-    reference lists to be used for the current picture.
-  * pname:naluSliceEntryCount is the number of slice NALUs in the frame.
-  * pname:pNaluSliceEntries is a pointer to an array of
-    slink:VkVideoEncodeH265NaluSliceEXT structures specifying the division
-    of the current picture into slices and the properties of these slices.
-  * pname:pCurrentPictureInfo is a pointer to a
-    code:StdVideoEncodeH265PictureInfo structure specifying the syntax and
-    other codec-specific information from the H.265 specification,
-    associated with this picture.
-
-include::{generated}/validity/structs/VkVideoEncodeH265VclFrameInfoEXT.txt[]
---
-
-[open,refpage='VkVideoEncodeH265NaluSliceEXT',desc='Structure specifies H.265 encode slice NALU parameters',type='structs']
---
-The structure slink:VkVideoEncodeH265NaluSliceEXT representing a slice is
-defined as:
-
-include::{generated}/api/structs/VkVideoEncodeH265NaluSliceEXT.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:ctbCount is the number of CTBs in this slice.
-  * pname:pReferenceFinalLists is `NULL` or a pointer to a
-    slink:VkVideoEncodeH265ReferenceListsEXT structure specifying the
-    reference lists to be used for the current slice.
-    If pname:pReferenceFinalLists is not `NULL`, these reference lists
-    override the reference lists provided in
-    slink:VkVideoEncodeH265VclFrameInfoEXT::pname:pReferenceFinalLists.
-  * pname:pSliceHeaderStd is a pointer to a
-    code:StdVideoEncodeH265SliceHeader structure specifying the slice header
-    for the current slice.
-
-include::{generated}/validity/structs/VkVideoEncodeH265NaluSliceEXT.txt[]
---
-
-[open,refpage='VkVideoEncodeH265DpbSlotInfoEXT',desc='Structure specifies H.265 encode decoded pic info',type='structs']
---
-The structure slink:VkVideoEncodeH265DpbSlotInfoEXT, representing a
-reconstructed picture that is being used as a reference picture, is defined
-as:
-
-include::{generated}/api/structs/VkVideoEncodeH265DpbSlotInfoEXT.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:slotIndex is the <<dpb-slot, DPB Slot>> index for this picture.
-  * pname:pStdReferenceInfo is a pointer to a
-    code:StdVideoEncodeH265ReferenceInfo structure specifying the syntax and
-    other codec-specific information from the H.265 specification,
-    associated with this reference picture.
-
-include::{generated}/validity/structs/VkVideoEncodeH265DpbSlotInfoEXT.txt[]
---
-
-[open,refpage='VkVideoEncodeH265ReferenceListsEXT',desc='Structure specifies H.265 reference frame lists',type='structs']
---
-The structure slink:VkVideoEncodeH265ReferenceListsEXT representing
-reference lists is defined as:
-
-include::{generated}/api/structs/VkVideoEncodeH265ReferenceListsEXT.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:referenceList0EntryCount is the number of reference pictures in
-    reference list L0 and is identical to
-    code:StdVideoEncodeH265SliceHeader::pname:num_ref_idx_l0_active_minus1 + 1.
-  * pname:pReferenceList0Entries is a pointer to an array of
-    pname:referenceList0EntryCount slink:VkVideoEncodeH265DpbSlotInfoEXT
-    structures specifying the reference list L0 entries for the current
-    picture.
-  * pname:referenceList1EntryCount is the number of reference pictures in
-    reference list L1 and is identical to
-    code:StdVideoEncodeH265SliceHeader::pname:num_ref_idx_l1_active_minus1 + 1.
-  * pname:pReferenceList1Entries is a pointer to an array of
-    pname:referenceList1EntryCount slink:VkVideoEncodeH265DpbSlotInfoEXT
-    structures specifying the reference list L1 entries for the current
-    picture.
-  * pname:pReferenceModifications is a pointer to a
-    code:StdVideoEncodeH265ReferenceModifications structure specifying
-    reference list modifications.
-
-include::{generated}/validity/structs/VkVideoEncodeH265ReferenceListsEXT.txt[]
---
-
-[open,refpage='VkVideoEncodeH265EmitPictureParametersEXT',desc='Structure specifies H.265 encode VPS NALU insertion parameters',type='structs']
---
-The structure slink:VkVideoEncodeH265EmitPictureParametersEXT is defined as:
-
-include::{generated}/api/structs/VkVideoEncodeH265EmitPictureParametersEXT.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:vpsId is the H.265 VPS ID for the H.265 VPS to insert in the
-    bitstream.
-    The VPS ID must: match the VPS provided in pname:vpsStd of
-    slink:VkVideoEncodeH265SessionParametersCreateInfoEXT.
-    This is retrieved from the slink:VkVideoSessionParametersKHR object
-    provided in slink:VkVideoBeginCodingInfoKHR.
-  * pname:spsId is the H.265 SPS ID for the H.265 SPS to insert in the
-    bitstream.
-    The SPS ID must: match one of the IDs of the SPS(s) provided in
-    pname:pSpsStd of slink:VkVideoEncodeH265SessionParametersCreateInfoEXT
-    to identify the SPS parameter set to insert in the bitstream.
-    This is retrieved from the slink:VkVideoSessionParametersKHR object
-    provided in slink:VkVideoBeginCodingInfoKHR.
-  * pname:emitVpsEnable enables the emitting of the VPS structure with id of
-    pname:vpsId.
-  * pname:emitSpsEnable enables the emitting of the SPS structure with id of
-    pname:spsId.
-  * pname:ppsIdEntryCount is the number of entries in the
-    pname:ppsIdEntries.
-    If this parameter is `0` then no pps entries are going to be emitted in
-    the bitstream.
-  * pname:ppsIdEntries is the H.265 PPS IDs for the H.265 PPS to insert in
-    the bitstream.
-    The PPS IDs must: match one of the IDs of the PPS(s) provided in
-    pname:pPpsStd of slink:VkVideoEncodeH265SessionParametersCreateInfoEXT
-    to identify the PPS parameter set to insert in the bitstream.
-    This is retrieved from the slink:VkVideoSessionParametersKHR object
-    provided in slink:VkVideoBeginCodingInfoKHR.
-
-include::{generated}/validity/structs/VkVideoEncodeH265EmitPictureParametersEXT.txt[]
---
diff --git a/registry/vulkan/chapters/video_extensions.txt b/registry/vulkan/chapters/video_extensions.txt
deleted file mode 100644
index 7d597a0..0000000
--- a/registry/vulkan/chapters/video_extensions.txt
+++ /dev/null
@@ -1,1657 +0,0 @@
-// Copyright 2018-2021 The Khronos Group Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-[[video-decode-and-encode-operations]]
-= Video Decode and Encode Operations
-
-Vulkan implementations can: expose video decode and encode engines, which
-are independent from the graphics and compute engines.
-Video decode and encode is performed by recording video operations and
-submitting them to video decode and encode queues.
-Vulkan provides core support for video decode and encode and can: support a
-variety of video codecs through individual extensions built on the core
-video support.
-
-The subsections below detail the fundamental components and operation of
-Vulkan video.
-
-
-== Technical Terminology and Semantics
-
-
-[[video-picture-resources]]
-=== Video Picture Resources
-
-*Video Picture Resources* contain format information, can: be
-multidimensional and may: have associated metadata.
-The metadata can: include implementation-private details required for the
-decode or encode operations and application managed color-space related
-information.
-
-In Vulkan, a <<video-picture-resources,Video Picture Resource>> is
-represented by a slink:VkImage.
-The slink:VkImageView, representing the slink:VkImage, is used with the
-decode operations as <<decoded-output-picture,Output>> and <<dpb,Decoded
-Picture Buffer (DPB)>>, and with the encode operation as
-<<input-encode-picture,Input>> and <<reconstructed-pictures, Reconstructed>>
-<<video-picture-resources,Video Picture Resource>>.
-
-
-[[reference-picture]]
-=== Reference Picture
-
-Video *Reference Picture* is a <<video-picture-resources,Video Picture
-Resource>> that can: be used in the video decode or encode process to
-provide predictions of the values of samples in the subsequently decoded or
-encoded pictures.
-
-
-[[decoded-output-picture]]
-=== Decoded Output Picture
-
-The pixels resulting from the video decoding process are stored in a
-*Decoded Output Picture*, represented by a slink:VkImageView.
-This can: be shared with the <<dpb, Encoder Reconstructed or Decoder DPB>>
-<<video-picture-resources,Video Picture Resources>>.
-It can: also be used as an input for Video Encode, Graphics, Compute
-processing, or WSI presentation.
-
-
-[[input-encode-picture]]
-=== Input Picture to Encode
-
-The primary source of input pixels for the video encoding process is the
-*Input Picture to Encode*, represented by a slink:VkImageView.
-This can: be shared with the <<dpb, Encoder Reconstructed or Decoder DPB>>
-<<video-picture-resources,Video Picture Resources>>.
-It can: be a direct target of Video Decode, Graphics, Compute processing, or
-WSI presentation.
-
-
-[[dpb]]
-=== Decoded Picture Buffer (DPB)
-
-Previously decoded pictures are used by video codecs to provide predictions
-of the values of samples in the subsequently decoded pictures.
-At the decoder, such <<video-picture-resources,Video Picture Resources>> are
-stored in a *Decoded Picture Buffer (DPB)* as an indexed set of
-<<reference-picture,Reference Pictures>>.
-
-
-[[reconstructed-pictures]]
-=== Reconstructed Pictures
-
-An integral part of the video decoding pipeline is the reconstruction of
-pictures from the compressed stream.
-A similar stage exists in the video encoding pipeline as well.
-Such reconstructed pictures may: be used as <<reference-picture,Reference
-Pictures>> for subsequently decoded or encoded pictures.
-The correct use of such <<reference-picture,Reference Pictures>> is driven
-by the video compression standard, the implementation, and the
-application-specific use cases.
-
-This specification refers to the collection of the *Decoded Picture Buffer*
-and *Reconstructed Pictures* as <<dpb, Decoded Picture Buffer (DPB) Set>>,
-or only, *DPB*.
-
-
-[[dpb-slot]]
-=== Decoded Picture Buffer (DPB) Slot
-
-*Decoded Picture Buffer (DPB) Slot* represents a single or multi-layer
-indexed <<reference-picture,Reference Picture's>> entry within the
-<<video-session, Video Session's>> <<dpb,DPB Set>>.
-A valid <<dpb-slot,DPB Slot>> index starts from zero and goes up to the
-maximum of *N* - 1, where *N* is the number of <<reference-picture,Reference
-Picture>> entries requested for a <<video-session, Video Session>>.
-
-
-[[reference-metadata]]
-=== Reference Picture Metadata
-
-The opaque <<dpb-slot,DPB Slot>> state managed by the implementation may:
-contain *Reference Picture Metadata*, present when the
-<<video-picture-resources,picture resource>> associated with the
-<<dpb-slot,DPB Slot>> is used as a <<reference-picture,reference picture>>
-in one or more video decode or encode operations.
-
-An implementation or application may: have other Picture Metadata related to
-the Video Picture Resource or the DPB Slot, but such data is outside the
-scope of this specification.
-
-[NOTE]
-.Note:
-====
-The video decode or encode implementation does not maintain internal
-references to the <<reference-picture,Reference Pictures>>, beyond the
-<<reference-metadata,Reference Picture Metadata>>.
-It is the responsibility of the Vulkan Application to create, manage, and
-destroy, as well as to provide those Video Picture Resources, when required,
-during the decoding or encoding process.
-====
-
-
-[[color-space-metadata]]
-=== Color Space Metadata
-
-*Color Space Metadata* is the additional static or dynamic state associated
-with a <<video-picture-resources,Video Picture Resource>> specifying the
-color volume (the color primaries, white point, and luminance range) of the
-display that was used in mastering the video content.
-The use of *Color Space Metadata* is outside the scope of the current
-version of the video core specification.
-
-
-== Introduction
-
-This chapter discusses extensions supporting Video Decode or Encode
-operations.
-Video Decode and Encode operations are supported by queues with an
-advertised queue capability of ename:VK_QUEUE_VIDEO_DECODE_BIT_KHR and
-ename:VK_QUEUE_VIDEO_ENCODE_BIT_KHR, respectively.
-Video Decode or Encode queue operation support allows for Vulkan
-applications to cooperate closely with other graphics or compute operations
-seamlessly and efficiently, therefore improving the overall application
-performance.
-
-
-[[video-decode-queue]]
-=== Video Decode Queue
-
-`apiext:VK_KHR_video_decode_queue` adds a video decode queue type bit
-ename:VK_QUEUE_VIDEO_DECODE_BIT_KHR to elink:VkQueueFlagBits.
-As in the case of other queue types, an application must: use
-flink:vkGetPhysicalDeviceQueueFamilyProperties to query whether the physical
-device has support for the Video Decode Queue.
-When the implementation reports the ename:VK_QUEUE_VIDEO_DECODE_BIT_KHR bit
-for a queue family, it advertises general support for Vulkan queue
-operations described in <<devsandqueues, Devices and Queues>>.
-
-
-[[video-encode-queue]]
-=== Video Encode Queue
-
-`apiext:VK_KHR_video_encode_queue` adds a video encode queue type bit
-ename:VK_QUEUE_VIDEO_ENCODE_BIT_KHR to elink:VkQueueFlagBits.
-As in the case of other queue types, an application must: use
-flink:vkGetPhysicalDeviceQueueFamilyProperties to query whether the physical
-device has support for the Video Encode Queue.
-When the implementation reports the ename:VK_QUEUE_VIDEO_ENCODE_BIT_KHR bit
-for a queue family, it advertises general support for Vulkan queue
-operations described in <<devsandqueues, Devices and Queues>>.
-
-The rest of the chapter focuses, specifically, on Video Decode and Encode
-queue operations.
-
-
-[[video-session-introduction]]
-=== Video Session
-
-Before performing any video decoding or encoding operations, the application
-must: create a <<video-session,Video Session>> instance, of type
-slink:VkVideoSessionKHR.
-A <<video-session,Video Session>> instance is an immutable object and
-supports a single compression standard (for example, H.264, H.265, VP9, AV1,
-etc.).
-The implementation uses the slink:VkVideoSessionKHR object to maintain the
-video state for the video decode or video encode operation.
-A <<video-session,Video Session>> instance is created specifically:
-
-  * For a particular video compression standard;
-  * For video decoding or video encoding;
-  * With maximum supported decoded or encoded picture width/height;
-  * With the maximum number of supported <<dpb,DPB>> or
-    <<reconstructed-pictures,Reconstructed Pictures>> slots that can be
-    allocated;
-  * With the maximum number of <<reference-picture,Reference Pictures>> that
-    can: be used simultaneously for video decode or encode operations;
-  * Codec color and features profile;
-  * Color Space format description (not supported with this version of the
-    specification);
-
-slink:VkVideoSessionKHR represents a single video decode or encode stream.
-For each concurrently used stream, a separate instance of
-slink:VkVideoSessionKHR is required.
-After the application has finished with the processing of a stream, it can
-reuse the <<video-session,Video Session>> instance for another, provided
-that the configuration parameters between the two usages are compatible (as
-determined by the video compression standard in use).
-Once the slink:VkVideoSessionKHR instance has been created, the video
-compression standard and profiles, <<input-encode-picture,Input>> /
-<<decoded-output-picture,Output>> / <<dpb,DPB>> formats, and the settings
-like the maximum extent cannot: be changed.
-
-The values of the following slink:VkVideoSessionKHR parameters can: be
-updated each frame, subject to the restrictions imposed on parameter updates
-by the video compression standard in use:
-
-  * decoded or encoded picture size
-  * number of active <<dpb,DPB>> or <<reconstructed-pictures,Reconstructed
-    Picture>> slots
-  * number of <<reference-picture,Reference Pictures>> in use,
-  * color space and color space metadata
-  * color space metadata.
-
-The updated parameters must: not exceed the maximum limits specified when
-creating the slink:VkVideoSessionKHR instance.
-
-
-[[video-session-device-memory-heaps]]
-=== Video Session Device Memory Heaps
-
-After creating a <<video-session,Video Session>> instance, and before the
-object can be used for any of the decode or encode operations, the
-application must: allocate and bind device memory resources to the Video
-Session object.
-An implementation may: require one or more device memory heaps of different
-memory types, as reported by the
-flink:vkGetVideoSessionMemoryRequirementsKHR function, to be bound with the
-flink:vkBindVideoSessionMemoryKHR function to the <<video-session,Video
-Session>>, For more information about the *Video Session Device Memory*,
-please refer to the <<binding-session-memory, Binding the Session Object
-Device Memory>> section, below.
-
-
-[[video-session-parameters-introduction]]
-=== Video Session Parameters
-
-A lot of codec standards require parameters that are in use for the entire
-video stream.
-For example, H.264/AVC and HEVC standards require sequence and picture
-parameter sets (SPS and PPS) that apply to multiple Video Decode and Encode
-frames, layers, and sub-layers.
-Vulkan Video uses <<video-session-parameters,Video Session Parameters>>
-objects to store such standard parameters.
-The application creates one or more <<video-session-parameters,Video Session
-Parameters>> Objects against a <<video-session,Video Session>>, with a set
-of common Video Parameters that are required for the processing of the video
-content.
-During the object creation, the implementation stores the parameters to the
-created instance.
-During command buffer recording, it is the responsibility of the application
-to provide the <<video-session-parameters,Video Session Parameters>> object
-containing the parameters that are necessary for the processing the portion
-of the stream under consideration.
-
-
-[[video-picture-subresources]]
-=== Video Picture Subresources
-
-For <<video-picture-resources,Video Picture Resources>>, an application has
-the option to use single or multi-layer <<VkImage,images>> for
-<<resources-image-views,image views>>.
-The layer to be used during decode or encode operations can: be specified
-when the <<VkImageView,image view>> is being created with the
-slink:VkImageSubresourceRange::pname:baseArrayLayer parameter, and/or within
-the resource binding operations in command buffer by using the
-slink:VkVideoPictureResourceKHR::pname:baseArrayLayer parameter.
-
-[NOTE]
-.Note:
-====
-Both Video Decode and Encode operations only work with a single layer at the
-time.
-====
-
-The <<resources-image-views, Image views>> representing the
-<<input-encode-picture,Input>> / <<decoded-output-picture,Output>> /
-<<dpb,DPB>> <<video-picture-resources,Video Picture Resources>> could have
-been created with sizes bigger than the coded size that is used with Video
-Decode and Encode operations.
-This allows for the same Video Picture Resources to be reused when there is
-a change in the input video content resolution.
-The effective coded size of the <<video-picture-resources,Video Picture
-Resources>> used for Video Decode and Encode operations is provided with
-slink:VkVideoPictureResourceKHR::pname:extent parameter of each resource in
-use.
-
-[NOTE]
-.Note:
-====
-Many codec standards require the coded and <<video-picture-resources,Video
-Picture Resources'>> sizes to match.
-====
-
-
-[[dpb-picture-resources]]
-==== Video Session <<dpb,DPB and Reconstructed>> Video Picture Resources
-
-The video compression standard chosen may: require the use of
-<<reference-picture,Reference Pictures>>.
-In Vulkan Video, like any other <<video-picture-resources,Video Picture
-Resources>>, the <<reference-picture,Reference Pictures>> are represented
-with <<resources-image-views, Image Views>>.
-
-When an application requires <<reference-picture,Reference Picture
-Resources>>, it creates and then associates <<VkImageView,image views>>,
-representing these resources, with Video Session <<dpb-slot,DPB or
-Reconstructed slots>> while recording the command buffer.
-
-<<decoded-output-picture, Decoded output pictures>> may: be used as
-<<reference-picture,reference pictures>> in future video decode operations.
-The same pictures may: be used in texture sampling operations or in the
-(WSI) presentation pipeline.
-Representing the <<dpb-slot,DPB's Video Picture Resources>> by
-<<VkImageView,image views>> makes it possible to accommodate all these use
-cases in a "`zero-copy`" fashion.
-Also, it provides more fine-grained control of the application over the
-efficient usage of the DPB and Reconstructed <<VkDeviceMemory,Device Memory
-Resources>>.
-
-
-[[video-session-dpb-slot-resource-management]]
-==== Video Session <<dpb-slot,DPB and Reconstructed Slot>> Resource Management
-
-Before <<dpb-picture-resources, Video Picture Resources>> can be used as
-<<reference-picture,Reference Picture Resources>>, Video Session
-<<dpb-slot,DPB or Reconstructed Slots>> must: be associated with those
-resources.
-
-The application allocates a <<dpb-slot,DPB or Reconstructed Slot>> and
-associates it with a <<video-picture-resources,Video Picture Resource>> and
-then sets up the resource as a target of decode or encode operation.
-After successfully decoding or encoding a picture with the targeted
-<<dpb-slot,DPB or Reconstructed Slot>> , in addition to the
-<<reference-picture,Reference Picture>> pixel data, the implementation may:
-generate an opaque <<reference-metadata,Reference Picture Metadata>> for
-that video session Slot and its associated <<video-picture-resources,Video
-Picture Resource>>.
-
-Subsequently, one or more <<dpb-slot,DPB or Reconstructed video session
-Slots>>, along with their associated <<video-picture-resources,Video Picture
-Resources>>, can: be used as <<reference-picture,Reference Picture's>>
-source for the video decode or encode operations.
-
-If <<reference-picture,Reference Pictures>> were to be required for decoding
-or encoding of the video bitstream, the
-slink:VkVideoSessionCreateInfoKHR::pname:maxReferencePicturesSlotsCount
-must: be set to a value bigger than `0` when the instance of the
-<<video-session,Video Session>> object is created.
-
-Up to
-slink:VkVideoSessionCreateInfoKHR::pname:maxReferencePicturesSlotsCount
-slots can: be activated with <<video-picture-resources,Video Picture
-Resources>> for a video session and up to
-slink:VkVideoSessionCreateInfoKHR::pname:maxReferencePicturesActiveCount
-active slots can: be used as DPB or Reconstructed
-<<reference-picture,Reference Pictures>> within a single decode or encode
-operation.
-
-When the implementation is associating <<reference-metadata,Reference
-Picture Metadata>> with the <<video-picture-resources,Video Picture
-Resources>> themselves, such data must: be independent of the
-<<video-session,Video Session>> to allow for those
-<<video-picture-resources,Video Picture Resources>> to be shared with other
-Video Session instances.
-All of the <<video-session,Video Session>>-dependent
-<<reference-metadata,Reference Picture Metadata>> must: only be associated
-with the <<video-session,Video Session>> <<dpb-slot,DPB or Reconstructed
-Slots>>.
-
-The application with the help of the implementation is responsible for
-managing the individual <<dpb-slot,DPB, or Reconstructed Slots>> that belong
-to a single <<video-session,Video Session>> <<dpb,DPB set>>:
-
-  * The application maintains the Slot allocation and per-slot
-    <<reference-picture,Reference Picture>>
-    <<video-picture-resources,Resources>>;
-  * Implementation maintains global and per-slot opaque
-    <<reference-metadata,Reference Picture Metadata>>;
-
-The application also manages the mapping between the codec-specific picture
-IDs and <<dpb-slot,DPB Slots>>.
-
-When a Video Picture is decoded and is set as a
-<<reference-picture,Reference Picture>> against a Video Session
-<<dpb-slot,DPB Slot>>, or is encoded and a Reconstructed Video Picture
-Resource is associated with a Video Session <<dpb-slot,DPB Slot>> then:
-
-  * The <<video-picture-resources,Video Picture Resource>> associated with
-    the Slot is filled with the decoded or reconstructed pixel data;
-  * The implementation generates the <<dpb-slot,DPB Slot's>>
-    <<reference-metadata,Reference Picture Metadata>>;
-
-When a <<dpb-slot,DPB's Slot>> is deactivated, or a different
-<<video-picture-resources,Video Picture Resource>> is used with the Slot, or
-the content of the <<video-picture-resources,Video Picture Resource>> is
-modified, the <<reference-metadata,Reference Picture Metadata>> associated
-with the <<dpb-slot,DPB Slot>> gets invalidated by the implementation.
-Subsequent attempts to use such, invalidated, <<dpb,DPB>> Slot as a
-<<reference-picture,Reference>> source would produce undefined: results.
-
-
-[[video-session-dpb-picture-size-changes]]
-==== Video Session <<dpb-slot,DPB Slot>> subresources
-
-DPB <<reference-picture,Reference Picture's>> coded width and height can:
-change, dynamically, via slink:VkVideoPictureResourceKHR::pname:extent, and
-the picture parameters from the codec-specific extensions.
-When a <<dpb-slot,DPB Slot>> is activated as a <<reference-picture,Reference
-Picture>> and a decode or encode operation is performed against that slot,
-the coded extent can: be recorded by the implementation to the corresponding
-<<dpb-slot,DPB Slot's>> metadata state.
-Subsequently, when the <<reference-picture,Reference Pictures>> are used
-with the decoded <<decoded-output-picture, Output>> or encoded
-<<input-encode-picture, Input Picture>>, their coded extent can differ.
-Decoding or encoding pictures, using picture sizes, different from the
-previously produced <<reference-picture,Reference Pictures>> should: be used
-with care, not to conflict with the codec standard and the implementation's
-support for that.
-It is the responsibility of the application to ensure that valid <<dpb,DPB
-Set>> of <<reference-picture,Reference Pictures>> are in use, according to
-the codec standard.
-
-In addition, the <<video-picture-resources,Video Picture Resources>> extent
-cannot: exceed the slink:VkVideoSessionCreateInfoKHR::pname:maxCodedExtent.
-
-[NOTE]
-.Note:
-====
-Coding Standards such as VP9 and AV1 allow for images with different sizes
-to be used as <<reference-picture,Reference Pictures>>.
-Others, like H.264 and H.265, do not support <<reference-picture,Reference
-Pictures>> with different sizes.
-Using <<reference-picture,Reference Pictures>> with incompatible sizes with
-such standards would render undefined: results.
-====
-
-
-[[video-resource-management-by-application]]
-==== The application is in control of the allocation and use of the system resource
-
-In Vulkan Video, the application has complete control over how and when
-system resources are used.
-The Vulkan Video framework provides the following tools to ensure that
-device and host memory resources are used in an optimal way:
-
-  * The video application can: allocate or destroy the number of allocated
-    <<decoded-output-picture, Output>> or <<input-encode-picture, Input>>
-    Pictures, and can: grow, or shrink the DPB set of
-    <<reference-picture,Reference Pictures>>, dynamically, based on the
-    changing video content requirement.
-  * <<reference-picture,Reference Pictures>> can: be shared with the decoded
-    <<decoded-output-picture, Output>> or encoded <<input-encode-picture,
-    Input>> pictures.
-  * The application can: use <<sparsememory, sparse memory>> for the
-    <<VkImage,images>>, representing <<video-picture-resources,Video Picture
-    Resources>>.
-    The use of sparse memory would allow the application to remove the
-    <<VkDeviceMemory,Device Memory>> backing of the <<resources-images,
-    image resources>> when the <<dpb-slot,DPB Slot>> is not in active use.
-    Furthermore, if the <<features-sparseResidency,sparse residency
-    feature>> is supported by the implementation (see <<sparsememory,Sparse
-    Resources>>), then <<VkImage,images>> can be, partially, bound with the
-    resource memory.
-    This feature is particularly important when using video content with a
-    significant change of decoded or encoded resolution.
-  * If the implementation supports <<VkImage,image arrays>>, and
-    <<sparsememory, sparse memory resources>>, then the application can:
-    remove the <<VkDeviceMemory,Device Memory>> backing of <<VkImage,image
-    array>> layers that are not used by any <<dpb-slot,DPB Slots>>.
-
-
-[[video-session-dpb-binding-reconstructed-slot]]
-==== Using DPB and Reconstructed Slot's Associated Resources
-
-Before a <<dpb-slot,DPB Slot>> is to become *Valid* for use with a
-<<reference-picture,Reference Picture>>, it requires memory resources to be
-bound to it.
-
-Some of the memory resources required for the <<dpb-slot,DPB Slot>>, are
-opaquely managed by the implementation and, internally, allocated from the
-<<video-session-device-memory-heaps,Session's Device Memory Heaps>>.
-The application provides the <<resources-images, image resources>> of one or
-more <<reference-picture,Reference Pictures>>, in the
-slink:VkVideoBeginCodingInfoKHR::pname:pReferenceSlots as part of the
-flink:vkCmdBeginVideoCodingKHR command.
-
-If a <<dpb-slot,DPB Slot>> was already used with an <<resources-image-views,
-image view>>, and a new image view or a dlink:VK_NULL_HANDLE handle is used
-with that Slot, then the <<dpb-slot,DPB Slot's>> state will be invalidated
-by the implementation.
-If a <<dpb-slot,DPB Slot>> were to be reused with the same
-<<resources-image-views, image view>>, the state of the Slot would not
-change.
-
-
-[[video-session-activating-dpb-slot]]
-==== Video Session Activating DPB Slot as a Reference
-
-Before a <<dpb-slot,DPB Slot>> is to be used for a
-<<reference-picture,Reference Pictures>> index, it must: be activated.
-The activation of a <<dpb-slot,DPB Slot>> is done within the
-flink:vkCmdDecodeVideoKHR command's
-slink:VkVideoDecodeInfoKHR::pname:slotIndex field for the decode operations,
-and within the flink:vkCmdEncodeVideoKHR command's
-slink:VkVideoEncodeInfoKHR::pname:slotIndex field for the encode operations.
-
-While activating a Slot for DPB, it must: already have an associated
-<<resources-image-views, image view>>, within the
-slink:VkVideoBeginCodingInfoKHR::pname:pReferenceSlots in the
-flink:vkCmdBeginVideoCodingKHR command and <<VkDeviceMemory,Device Memory>>
-backing of the the <<resources-images, image resources>> must: be resident.
-
-When a <<dpb-slot,DPB Slot>> were to be activated, the
-slink:VkVideoDecodeInfoKHR::pname:slotIndex for decode, or
-slink:VkVideoDecodeInfoKHR::pname:slotIndex for encode, must: be set to the
-application's allocated <<dpb-slot,DPB Slot's index>>.
-When activating a <<dpb-slot,DPB Slot>>, the application will perform a
-decode or encode operation against its Slot's index in order to enable its
-state as a *Valid Picture Reference*.
-If a <<dpb-slot,DPB Slot>> is activated, but a decode or encode operation is
-not performed against that Slot's index, or the decode or encode operation
-was unsuccessful, then the <<dpb-slot,DPB Slot>> would remain in the
-*Invalid Picture Reference* state (see below the
-<<video-session-dpb-slot-states,DPB Slot States>>).
-
-By just providing a <<video-picture-resources,Video Picture Resources>> for
-a <<dpb-slot,DPB Slot>> within the
-slink:VkVideoBeginCodingInfoKHR::pname:pReferenceSlots, and without
-successfully performing a decode or encode operation against that Slot, the
-<<dpb-slot,DPB Slot's>> state cannot: be changed to *Valid Picture
-Reference*.
-If the <<dpb-slot,DPB Slots>> were already in *Valid Picture Reference*, and
-there is no <<video-picture-resources,Video Picture Resources>> associated
-with the <<dpb-slot,DPB Slot>> for a decode or encode operation, the state
-<<dpb-slot,DPB Slot>> would not change.
-However, if an application is referring to a valid <<dpb-slot,DPB Slot>> in
-its current decode or encode operations, then a valid
-<<resources-image-views, image view>> must: be provided for that Slot within
-slink:VkVideoPictureResourceKHR::pname:imageViewBinding for that decode or
-encode operation.
-
-
-[[video-session-invalidating-dpb-slot]]
-==== Video Session Invalidating DPB Slot's Reference State
-
-When a <<dpb-slot,DPB Slot>> is invalidated, its state is set to *Invalid
-Picture Reference*.
-Using a <<dpb-slot,DPB Slot>> as a <<reference-picture,Reference Picture>>
-index for video decode or encode operations while the Slot is in *Invalid
-Picture Reference* state would render undefined: results.
-
-
-[[video-session-dpb-slot-states]]
-==== Video Session <<dpb,DPB>> Slot States
-
-To help understand the valid use of the <<video-session,Video Session>>
-<<dpb,DPB>> and its resource management, this section aims to explain the
-different states and correct usage of <<dpb-slot,DPB Slots>>.
-
-There are four (4) states that a <<dpb-slot,DPB Slot>> could be in:
-
-  * Picture Reference Unused;
-  * Invalid Picture Reference;
-  * Updating Picture Reference;
-  * Valid Picture Reference;
-
-The different states are outlined within the
-<<video-session-dpb-slot-states-table,DPB Slot States>> and
-<<video-session-dpb-slot-states-flow-diagram, DPB Slot States Flow Diagram>>
-below.
-
-All DPB Slot management operations are performed via the
-slink:VkVideoDecodeInfoKHR::pname:slotIndex or
-slink:VkVideoEncodeInfoKHR::pname:slotIndex field.
-
-All DPB resource binding, invalidating, and activating Slot management
-operations are performed, by the implementation, *before* the decoding or
-encoding commands, based on the slink:VkVideoDecodeInfoKHR::pname:slotIndex
-or slink:VkVideoEncodeInfoKHR::pname:slotIndex field and the entries from
-the slink:VkVideoBeginCodingInfoKHR::pname:pReferenceSlots.
-The application cannot: move a DPB Slot from a *Picture Reference Unused* to
-*Updating Picture Reference* state, implicitly, within a decode or encode
-command operation.
-Such a DPB Slot must: first be transitioned to an *Invalid Picture
-Reference* state using slink:VkVideoDecodeInfoKHR::pname:slotIndex or
-slink:VkVideoEncodeInfoKHR::pname:slotIndex, as part of a decode command.
-For more details, see <<video-picture-decode-modes, Video Picture Decode
-Modes>>.
-
-When using <<sparsememory, sparse memory resources>>, it would be acceptable
-and valid behavior for the application to unbind the memory while the DPB
-Slot is any of the DPB Slot states, provided the command buffers, in a
-<<commandbuffers-lifecycle, pending state>>, do not reference any such
-<<video-picture-resources,Video Picture Resources>>.
-
-Accessing <<sparsememory-accessing-unbound, unbound regions>> of the
-<<sparsememory, sparse memory resources>> by the decoder or encoder,
-regardless if those are used as <<decoded-output-picture,Output>>,
-<<input-encode-picture,Input>>, <<dpb,DPB>> or
-<<reconstructed-pictures,Reconstructed>> <<video-picture-resources,Video
-Picture Resources>>, would render undefined: results.
-The slink:VkPhysicalDeviceSparseProperties::pname:residencyNonResidentStrict
-property reported by the implementation does not offer guarantees on the
-behavior of decode or encode operations when it comes to accessing
-<<sparsememory-accessing-unbound, unbound regions>>.
-However, both reads and writes are still considered safe and will not affect
-other resources or populated regions of the image.
-
-[[video-session-dpb-slot-states-table]]
-.Video Session <<dpb-slot,DPB Slot>> States
-[cols="10%h,30%,50%,10%",options="header"]
-|====
-| <<dpb-slot,DPB Slot>> State | Moving to <<dpb-slot,DPB Slot>> State | Exiting <<dpb-slot,DPB Slot>> State | Retain Video Picture Resource Memory
-
-| *Picture Reference Unused* |
-* Bind Device Memory; +
-* Reset decode or encode state; +
-* Invalidate, delete or unbind memory of a Picture Reference associated with Reference DPB Slot |
-* Activate Reference DPB Slot -> *Invalid Picture Reference* |
-Application Controlled
-
-| *Invalid Picture Reference* |
-* Activate Reference DPB Slot; +
-* Unsuccessful video decode or encode operation; |
-* Start decode or encode operation with an active Reference DPB Slot target -> *Updating Picture Reference*; +
-* Updating a Picture Resource outside the decoder or encoder or deleting or removing the memory binding(sparse) -> *Picture Reference Unused*; |
-Application Controlled
-
-| *Updating Picture Reference* |
-Start decode or encode operation with an active Reference DPB Slot target; |
-Decode or encode operation with an active Reference DPB Slot target Completed Successfully -> *Valid Picture Reference*; +
-Unsuccessful video decode or encode operation -> *Invalid Picture Reference* |
-Yes
-
-| *Valid Picture Reference* |
-Video decode or encode operation with an active Reference DPB Slot target Completed Successfully; |
-* Replace Reference DPB Slot -> *Invalid Picture Reference*; +
-* Invalidate, delete or unbind memory of a Picture Reference of the Reference DPB Slot -> *Picture Reference Unused*; |
-Yes
-|====
-
-[[video-session-dpb-slot-states-flow-diagram]]
-image::images/VideoDecodeSessionDpbStates.svg[align="center",title="DPB Slot States Flow Diagram",opts="{imageopts}"]
-
-
-[[video-physical-device-capabilities]]
-== Video Physical Device Capabilities
-
-
-[[supported-video-codec-operations-enumeration]]
-=== Supported Video Codec Operations Enumeration
-
-The structure slink:VkVideoQueueFamilyProperties2KHR may: be chained to
-slink:VkQueueFamilyProperties2 when calling
-flink:vkGetPhysicalDeviceQueueFamilyProperties2 to retrieve the video codec
-operations supported for the physical device queue family index.
-
-[open,refpage='VkVideoQueueFamilyProperties2KHR',desc='Structure specifying the codec video operations',type='structs']
---
-The slink:VkVideoQueueFamilyProperties2KHR structure is defined as:
-
-include::{generated}/api/structs/VkVideoQueueFamilyProperties2KHR.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:videoCodecOperations is a bitmask of
-    elink:VkVideoCodecOperationFlagBitsKHR specifying supported video codec
-    operation(s).
-
-include::{generated}/validity/structs/VkVideoQueueFamilyProperties2KHR.txt[]
---
-
-[open,refpage='VkVideoCodecOperationFlagBitsKHR',desc='Video codec operation types',type='enums']
---
-The codec operations are defined with the
-elink:VkVideoCodecOperationFlagBitsKHR enum:
-
-include::{generated}/api/enums/VkVideoCodecOperationFlagBitsKHR.txt[]
-
-Each decode or encode codec-specific extension extends this enumeration with
-the appropriate bit corresponding to the extension's codec operation:
-
-  * ename:VK_VIDEO_CODEC_OPERATION_INVALID_BIT_KHR - No video operations are
-    supported for this queue family.
-ifdef::VK_EXT_video_encode_h264[]
-  * ename:VK_VIDEO_CODEC_OPERATION_ENCODE_H264_BIT_EXT - H.264 video encode
-    operations are supported by this queue family.
-endif::VK_EXT_video_encode_h264[]
-ifdef::VK_EXT_video_decode_h264[]
-  * ename:VK_VIDEO_CODEC_OPERATION_DECODE_H264_BIT_EXT - H.264 video decode
-    operations are supported by this queue family.
-endif::VK_EXT_video_decode_h264[]
-ifdef::VK_EXT_video_decode_h265[]
-  * ename:VK_VIDEO_CODEC_OPERATION_DECODE_H265_BIT_EXT - H.265 video decode
-    operations are supported by this queue family.
-endif::VK_EXT_video_decode_h265[]
---
-
-[open,refpage='VkVideoCodecOperationFlagsKHR',desc='Bitmask specifying the Video codec operations supported',type='flags']
---
-include::{generated}/api/flags/VkVideoCodecOperationFlagsKHR.txt[]
-
-tlink:VkVideoCodecOperationFlagsKHR is a bitmask type for setting a mask of
-zero or more elink:VkVideoCodecOperationFlagBitsKHR.
---
-
-
-[[video-profiles]]
-=== Video Profiles
-
-[open,refpage='VkVideoProfileKHR',desc='Structure specifying the codec video profile',type='structs']
---
-A video profile is defined by slink:VkVideoProfileKHR structure as:
-
-include::{generated}/api/structs/VkVideoProfileKHR.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:videoCodecOperation is a elink:VkVideoCodecOperationFlagBitsKHR
-    value specifying a video codec operation.
-  * pname:chromaSubsampling is a bitmask of
-    elink:VkVideoChromaSubsamplingFlagBitsKHR specifying video chroma
-    subsampling information.
-  * pname:lumaBitDepth is a bitmask of
-    elink:VkVideoComponentBitDepthFlagBitsKHR specifying video luma bit
-    depth information.
-  * pname:chromaBitDepth is a bitmask of
-    elink:VkVideoComponentBitDepthFlagBitsKHR specifying video chroma bit
-    depth information.
-
-include::{generated}/validity/structs/VkVideoProfileKHR.txt[]
---
-
-[open,refpage='VkVideoChromaSubsamplingFlagBitsKHR',desc='Video chroma subsampling',type='enums']
---
-The video format chroma subsampling is defined with the following enums:
-
-include::{generated}/api/enums/VkVideoChromaSubsamplingFlagBitsKHR.txt[]
-
-  * ename:VK_VIDEO_CHROMA_SUBSAMPLING_MONOCHROME_BIT_KHR - the format is
-    monochrome.
-  * ename:VK_VIDEO_CHROMA_SUBSAMPLING_420_BIT_KHR - the format is 4:2:0
-    chroma subsampled.
-    The two chroma components are each subsampled at a factor of 2 both
-    horizontally and vertically.
-  * ename:VK_VIDEO_CHROMA_SUBSAMPLING_422_BIT_KHR - the format is 4:2:2
-    chroma subsampled.
-    The two chroma components are sampled at half the sample rate of luma.
-    The horizontal chroma resolution is halved.
-  * ename:VK_VIDEO_CHROMA_SUBSAMPLING_444_BIT_KHR - the format is 4:4:4
-    chroma sampled.
-    Each of the three YCbCr components have the same sample rate, thus there
-    is no chroma subsampling.
---
-
-[open,refpage='VkVideoChromaSubsamplingFlagsKHR',desc='Bitmask specifying the Video format chroma subsampling',type='flags']
---
-include::{generated}/api/flags/VkVideoChromaSubsamplingFlagsKHR.txt[]
-
-tlink:VkVideoChromaSubsamplingFlagsKHR is a bitmask type for setting a mask
-of zero or more elink:VkVideoChromaSubsamplingFlagBitsKHR.
---
-
-[open,refpage='VkVideoComponentBitDepthFlagBitsKHR',desc='Video component bit depth',type='enums']
---
-The video format component bit depth is defined with the following enums:
-
-include::{generated}/api/enums/VkVideoComponentBitDepthFlagBitsKHR.txt[]
-
-  * ename:VK_VIDEO_COMPONENT_BIT_DEPTH_8_BIT_KHR - the format component bit
-    depth is 8 bits.
-  * ename:VK_VIDEO_COMPONENT_BIT_DEPTH_10_BIT_KHR - the format component bit
-    depth is 10 bits.
-  * ename:VK_VIDEO_COMPONENT_BIT_DEPTH_12_BIT_KHR - the format component bit
-    depth is 12 bits.
---
-
-[open,refpage='VkVideoComponentBitDepthFlagsKHR',desc='Bitmask specifying the Video format component bit depth',type='flags']
---
-include::{generated}/api/flags/VkVideoComponentBitDepthFlagsKHR.txt[]
-
-tlink:VkVideoComponentBitDepthFlagsKHR is a bitmask type for setting a mask
-of zero or more elink:VkVideoComponentBitDepthFlagBitsKHR.
---
-
-A video profile is provided when querying capabilities or image formats for
-video using flink:vkGetPhysicalDeviceVideoCapabilitiesKHR or
-flink:vkGetPhysicalDeviceVideoFormatPropertiesKHR, respectively.
-A video profile is also provided when creating resources (images, video
-sessions, etc.) used by video queues.
-Each instance of slink:VkVideoProfileKHR must: chain a codec-operation
-specific video profile extension structure, corresponding to the
-codec-operation specified in
-slink:VkVideoProfileKHR::pname:videoCodecOperation.
-Additional information is provided in each codec-operation-specific video
-extension.
-
-
-[[supported-video-decode-or-encode-capabilities]]
-=== Supported Video Decode or Encode Capabilities
-
-[open,refpage='vkGetPhysicalDeviceVideoCapabilitiesKHR',desc='Query video decode or encode capabilities',type='protos']
---
-To query video decode or encode capabilities for a specific codec, call:
-
-include::{generated}/api/protos/vkGetPhysicalDeviceVideoCapabilitiesKHR.txt[]
-
-  * pname:physicalDevice is the physical device whose video decode or encode
-    capabilities will be queried.
-  * pname:pVideoProfile is a pointer to a slink:VkVideoProfileKHR structure
-    with a chained codec-operation specific video profile structure.
-  * pname:pCapabilities is a pointer to a slink:VkVideoCapabilitiesKHR
-    structure in which the capabilities are returned.
-
-include::{generated}/validity/protos/vkGetPhysicalDeviceVideoCapabilitiesKHR.txt[]
---
-
-If pname:pVideoProfile and chained codec-operation specific profile is not
-supported, ename:VK_ERROR_FORMAT_NOT_SUPPORTED is returned.
-
-Otherwise, the implementation will fill pname:pCapabilities with
-capabilities associated with this video profile.
-
-
-[open,refpage='VkVideoCapabilitiesKHR',desc='Structure specifying parameters of video capabilities',type='structs']
---
-The slink:VkVideoCapabilitiesKHR structure is defined as:
-
-include::{generated}/api/structs/VkVideoCapabilitiesKHR.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:capabilityFlags is a bitmask of elink:VkVideoCapabilityFlagBitsKHR
-    specifying capability flags.
-  * pname:minBitstreamBufferOffsetAlignment is the minimum alignment for the
-    input or output bitstream buffer offset.
-  * pname:minBitstreamBufferSizeAlignment is the minimum alignment for the
-    input or output bitstream buffer size
-  * pname:videoPictureExtentGranularity is the minimum size alignment of the
-    extent with the required padding for the decoded or encoded video
-    images.
-  * pname:minExtent is the minimum width and height of the decoded or
-    encoded video.
-  * pname:maxExtent is the maximum width and height of the decoded or
-    encoded video.
-  * pname:maxReferencePicturesSlotsCount is the maximum number of DPB Slots
-    supported by the implementation for a single video session instance.
-  * pname:maxReferencePicturesActiveCount is the maximum slots that can be
-    used as <<reference-picture,Reference Pictures>> with a single decode or
-    encode operation.
-
-include::{generated}/validity/structs/VkVideoCapabilitiesKHR.txt[]
---
-
-[open,refpage='VkVideoCapabilityFlagBitsKHR',desc='Video Decode and Encode Capability Flags',type='enums']
---
-The slink:VkVideoCapabilitiesKHR flags are defined with the following
-enumeration:
-
-include::{generated}/api/enums/VkVideoCapabilityFlagBitsKHR.txt[]
-
-  * ename:VK_VIDEO_CAPABILITY_PROTECTED_CONTENT_BIT_KHR - the decode or
-    encode session supports protected content.
-  * ename:VK_VIDEO_CAPABILITY_SEPARATE_REFERENCE_IMAGES_BIT_KHR - the DPB or
-    Reconstructed Video Picture Resources for the video session may: be
-    created as a separate slink:VkImage for each DPB picture.
-    If not supported, the DPB must: be created as single multi-layered image
-    where each layer represents one of the DPB Video Picture Resources.
---
-
-[open,refpage='VkVideoCapabilityFlagsKHR',desc='Bitmask specifying the Video Decode and Encode Capability Flags',type='flags']
---
-include::{generated}/api/flags/VkVideoCapabilityFlagsKHR.txt[]
-
-tlink:VkVideoCapabilityFlagsKHR is a bitmask type for setting a mask of zero
-or more elink:VkVideoCapabilityFlagBitsKHR.
---
-
-
-[[supported-video-input-output-dpb-formats-enumeration]]
-=== Enumeration of Supported Video Output, Input and DPB Formats
-
-[open,refpage='vkGetPhysicalDeviceVideoFormatPropertiesKHR',desc='Query supported Video Decode and Encode image formats',type='protos']
---
-To enumerate the supported output, input and DPB image formats for a
-specific codec operation and video profile, call:
-
-include::{generated}/api/protos/vkGetPhysicalDeviceVideoFormatPropertiesKHR.txt[]
-
-  * pname:physicalDevice is the physical device being queried.
-  * pname:pVideoFormatInfo is a pointer to a
-    slink:VkPhysicalDeviceVideoFormatInfoKHR structure specifying the codec
-    and video profile for which information is returned.
-  * pname:pVideoFormatPropertyCount is a pointer to an integer related to
-    the number of video format properties available or queried, as described
-    below.
-  * pname:pVideoFormatProperties is a pointer to an array of
-    slink:VkVideoFormatPropertiesKHR structures in which supported formats
-    are returned.
-
-If pname:pVideoFormatProperties is `NULL`, then the number of video format
-properties supported for the given pname:physicalDevice is returned in
-pname:pVideoFormatPropertyCount.
-Otherwise, pname:pVideoFormatPropertyCount must: point to a variable set by
-the user to the number of elements in the pname:pVideoFormatProperties
-array, and on return the variable is overwritten with the number of values
-actually written to pname:pVideoFormatProperties.
-If the value of pname:pVideoFormatPropertyCount is less than the number of
-video format properties supported, at most pname:pVideoFormatPropertyCount
-values will be written to pname:pVideoFormatProperties, and
-ename:VK_INCOMPLETE will be returned instead of ename:VK_SUCCESS, to
-indicate that not all the available values were returned.
-
-.Valid Usage
-****
-  * [[VUID-vkGetPhysicalDeviceVideoFormatPropertiesKHR-imageUsage-04844]]
-    The pname:imageUsage enum of slink:VkPhysicalDeviceVideoFormatInfoKHR
-    must: contain at least one of the following video image usage bit(s):
-    ename:VK_IMAGE_USAGE_VIDEO_DECODE_DST_BIT_KHR,
-    ename:VK_IMAGE_USAGE_VIDEO_DECODE_DPB_BIT_KHR,
-    ename:VK_IMAGE_USAGE_VIDEO_ENCODE_SRC_BIT_KHR, or
-    ename:VK_IMAGE_USAGE_VIDEO_ENCODE_DPB_BIT_KHR
-****
-
-[NOTE]
-.Note:
-====
-For most use cases, only decode or encode related usage flags are going to
-be specified.
-For a use case such as transcode, if the image were to be shared between
-decode and encode session(s), then both decode and encode related usage
-flags can: be set.
-====
-
-include::{generated}/validity/protos/vkGetPhysicalDeviceVideoFormatPropertiesKHR.txt[]
---
-
-[open,refpage='VkPhysicalDeviceVideoFormatInfoKHR',desc='Structure specifying the codec video format',type='structs']
---
-The slink:VkPhysicalDeviceVideoFormatInfoKHR input structure is defined as:
-
-include::{generated}/api/structs/VkPhysicalDeviceVideoFormatInfoKHR.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:imageUsage is a bitmask of elink:VkImageUsageFlagBits specifying
-    intended video image usages.
-  * pname:pVideoProfiles is a pointer to a slink:VkVideoProfilesKHR
-    structure providing the video profile(s) of video session(s) that will
-    use the image.
-    For most use cases, the image is used by a single video session and a
-    single video profile is provided.
-    For a use case such as transcode, where a decode session output image
-    may: be used as encode input for one or more encode sessions, multiple
-    video profiles representing the video sessions that will share the image
-    may: be provided.
-
-include::{generated}/validity/structs/VkPhysicalDeviceVideoFormatInfoKHR.txt[]
---
-
-[open,refpage='VkVideoProfilesKHR',desc='Structure enumerating the video profiles',type='structs']
---
-The slink:VkVideoProfilesKHR structure is defined as:
-
-include::{generated}/api/structs/VkVideoProfilesKHR.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:profileCount is an integer which holds the number of video
-    profiles included in pname:pProfiles.
-  * pname:pProfiles is a pointer to an array of slink:VkVideoProfileKHR
-    structures.
-    Each slink:VkVideoProfileKHR structure must: chain the corresponding
-    codec-operation specific extension video profile structure.
-
-include::{generated}/validity/structs/VkVideoProfilesKHR.txt[]
---
-
-[open,refpage='VkVideoFormatPropertiesKHR',desc='Structure enumerating the video image formats',type='structs']
---
-The slink:VkVideoFormatPropertiesKHR output structure for
-flink:vkGetPhysicalDeviceVideoFormatPropertiesKHR is defined as:
-
-include::{generated}/api/structs/VkVideoFormatPropertiesKHR.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:format is one of the supported formats reported by the
-    implementation.
-
-If the pname:pVideoProfiles provided in input structure
-pname:pVideoFormatInfo are not supported,
-ename:VK_ERROR_FORMAT_NOT_SUPPORTED is returned.
-If the implementation requires an opaque video decode or encode DPB, then
-when querying with the corresponding video decode or encode DPB image usage
-in pname:imageUsage, only one image format is returned:
-ename:VK_FORMAT_UNDEFINED.
-
-include::{generated}/validity/structs/VkVideoFormatPropertiesKHR.txt[]
---
-
-Before creating an image, the application should obtain the supported image
-creation parameters by querying with
-flink:vkGetPhysicalDeviceFormatProperties2 or
-flink:vkGetPhysicalDeviceImageFormatProperties2 using one of the reported
-pname:pImageFormats and adding slink:VkVideoProfilesKHR to the pname:pNext
-chain of slink:VkFormatProperties2.
-
-
-[[video-session-objects]]
-== Video Session Objects
-
-
-[[video-session]]
-=== Video Session
-
-[open,refpage='VkVideoSessionKHR',desc='Opaque handle to a video session object',type='handles']
---
-Video session objects are abstracted and represented by
-slink:VkVideoSessionKHR handles:
-
-include::{generated}/api/handles/VkVideoSessionKHR.txt[]
---
-
-
-[[video-session-creation]]
-==== Creating a Video Session
-
-[open,refpage='vkCreateVideoSessionKHR',desc='Creates a video session object',type='protos']
---
-To create a video session object, call:
-
-include::{generated}/api/protos/vkCreateVideoSessionKHR.txt[]
-
-  * pname:device is the logical device that creates the decode or encode
-    session object.
-  * pname:pCreateInfo is a pointer to a slink:VkVideoSessionCreateInfoKHR
-    structure containing parameters specifying the creation of the decode or
-    encode session.
-  * pname:pAllocator controls host memory allocation as described in the
-    <<memory-allocation, Memory Allocation>> chapter.
-  * pname:pVideoSession is a pointer to a slink:VkVideoSessionKHR structure
-    specifying the decode or encode video session object which will be
-    created by this function when it returns ename:VK_SUCCESS
-
-include::{generated}/validity/protos/vkCreateVideoSessionKHR.txt[]
---
-
-[open,refpage='VkVideoSessionCreateInfoKHR',desc='Structure specifying parameters of a newly created video decode session',type='structs']
---
-The slink:VkVideoSessionCreateInfoKHR structure is defined as:
-
-include::{generated}/api/structs/VkVideoSessionCreateInfoKHR.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:queueFamilyIndex is the queue family of the created video session.
-  * pname:flags is a bitmask of elink:VkVideoSessionCreateFlagBitsKHR
-    specifying creation flags.
-  * pname:pVideoProfile is a pointer to a slink:VkVideoProfileKHR structure.
-  * pname:pictureFormat is the format of the <<resources-image-views, image
-    views>> representing decoded <<decoded-output-picture, Output>> or
-    encoded <<input-encode-picture, Input>> pictures.
-  * pname:maxCodedExtent is the maximum width and height of the coded
-    pictures that this instance will be able to support.
-  * pname:referencePicturesFormat is the format of the <<dpb, DPB>> image
-    views representing the <<reference-picture,Reference Pictures>>.
-  * pname:maxReferencePicturesSlotsCount is the maximum number of
-    <<dpb-slot,DPB Slots>> that can be activated with associated
-    <<video-picture-resources,Video Picture Resources>> for the created
-    video session.
-  * pname:maxReferencePicturesActiveCount is the maximum number of active
-    <<dpb-slot,DPB Slots>> that can be used as Dpb or Reconstructed
-    <<reference-picture,Reference Pictures>> within a single decode or
-    encode operation for the created video session.
-
-.Valid Usage
-****
-  * [[VUID-VkVideoSessionCreateInfoKHR-pVideoProfile-04845]]
-    pname:pVideoProfile must: be a pointer to a valid
-    slink:VkVideoProfileKHR structure whose pname:pNext chain must: include
-    a valid codec-specific profile structure
-  * [[VUID-VkVideoSessionCreateInfoKHR-maxReferencePicturesSlotsCount-04846]]
-    If <<reference-picture,Reference Pictures>> are required for use with
-    the created video session, the pname:maxReferencePicturesSlotsCount
-    must: be set to a value bigger than `0`
-  * [[VUID-VkVideoSessionCreateInfoKHR-maxReferencePicturesSlotsCount-04847]]
-    pname:maxReferencePicturesSlotsCount cannot: exceed the implementation
-    reported
-    slink:VkVideoCapabilitiesKHR::pname:maxReferencePicturesSlotsCount
-  * [[VUID-VkVideoSessionCreateInfoKHR-maxReferencePicturesActiveCount-04848]]
-    If <<reference-picture,Reference Pictures>> are required for use with
-    the created video session, the pname:maxReferencePicturesActiveCount
-    must: be set to a value bigger than `0`
-  * [[VUID-VkVideoSessionCreateInfoKHR-maxReferencePicturesActiveCount-04849]]
-    pname:maxReferencePicturesActiveCount cannot: exceed the implementation
-    reported
-    slink:VkVideoCapabilitiesKHR::pname:maxReferencePicturesActiveCount
-  * [[VUID-VkVideoSessionCreateInfoKHR-maxReferencePicturesActiveCount-04850]]
-    pname:maxReferencePicturesActiveCount cannot: exceed the
-    pname:maxReferencePicturesSlotsCount
-  * [[VUID-VkVideoSessionCreateInfoKHR-maxCodedExtent-04851]]
-    pname:maxCodedExtent cannot: be smaller than
-    slink:VkVideoCapabilitiesKHR::pname:minExtent and bigger than
-    slink:VkVideoCapabilitiesKHR::pname:maxExtent
-  * [[VUID-VkVideoSessionCreateInfoKHR-referencePicturesFormat-04852]]
-    pname:referencePicturesFormat must: be one of the supported formats in
-    slink:VkVideoFormatPropertiesKHR pname:format returned by the
-    flink:vkGetPhysicalDeviceVideoFormatPropertiesKHR when the
-    slink:VkPhysicalDeviceVideoFormatInfoKHR pname:imageUsage contains
-    ename:VK_IMAGE_USAGE_VIDEO_DECODE_DPB_BIT_KHR or
-    ename:VK_IMAGE_USAGE_VIDEO_ENCODE_DPB_BIT_KHR depending on the session
-    codec operation
-  * [[VUID-VkVideoSessionCreateInfoKHR-pictureFormat-04853]]
-    pname:pictureFormat for decode output must: be one of the supported
-    formats in slink:VkVideoFormatPropertiesKHR pname:format returned by the
-    flink:vkGetPhysicalDeviceVideoFormatPropertiesKHR when the
-    slink:VkPhysicalDeviceVideoFormatInfoKHR pname:imageUsage contains
-    ename:VK_IMAGE_USAGE_VIDEO_DECODE_DST_BIT_KHR
-  * [[VUID-VkVideoSessionCreateInfoKHR-pictureFormat-04854]]
-    pname:pictureFormat targeting encode operations must: be one of the
-    supported formats in slink:VkVideoFormatPropertiesKHR pname:format
-    returned by the flink:vkGetPhysicalDeviceVideoFormatPropertiesKHR when
-    the slink:VkPhysicalDeviceVideoFormatInfoKHR pname:imageUsage contains
-    ename:VK_IMAGE_USAGE_VIDEO_ENCODE_SRC_BIT_KHR
-****
-
-include::{generated}/validity/structs/VkVideoSessionCreateInfoKHR.txt[]
---
-
-[open,refpage='VkVideoSessionCreateFlagBitsKHR',desc='Video decode or encode video session creation flags',type='enums']
---
-The decode or encode session creation flags defined with the following
-enums:
-
-include::{generated}/api/enums/VkVideoSessionCreateFlagBitsKHR.txt[]
-
-  * ename:VK_VIDEO_SESSION_CREATE_PROTECTED_CONTENT_BIT_KHR - create the
-    video session for use with protected video content
---
-
-[open,refpage='VkVideoSessionCreateFlagsKHR',desc='Bitmask specifying the video decode or encode video session creation flags',type='flags']
---
-include::{generated}/api/flags/VkVideoSessionCreateFlagsKHR.txt[]
-
-tlink:VkVideoSessionCreateFlagsKHR is a bitmask type for setting a mask of
-zero or more elink:VkVideoSessionCreateFlagBitsKHR.
---
-
-
-[[video-session-destruction]]
-=== Destroying a Video Session
-
-[open,refpage='vkDestroyVideoSessionKHR',desc='Destroy decode session object',type='protos']
---
-To destroy a decode session object, call:
-
-include::{generated}/api/protos/vkDestroyVideoSessionKHR.txt[]
-
-  * pname:device is the device that was used for the creation of the video
-    session.
-  * pname:videoSession is the decode or encode video session to be
-    destroyed.
-  * pname:pAllocator controls host memory allocation as described in the
-    <<memory-allocation, Memory Allocation>> chapter.
-
-include::{generated}/validity/protos/vkDestroyVideoSessionKHR.txt[]
---
-
-
-[[video-session-memory-resource-management]]
-=== Video Session Memory Resource Management
-
-
-[[obtaining-video-session-memory-requirements]]
-==== Obtaining the Video Session Object Device Memory Requirements
-
-[open,refpage='vkGetVideoSessionMemoryRequirementsKHR',desc='Get Memory Requirements',type='protos']
---
-To get memory requirements for a video session, call:
-
-include::{generated}/api/protos/vkGetVideoSessionMemoryRequirementsKHR.txt[]
-
-  * pname:device is the logical device that owns the video session.
-  * pname:videoSession is the video session to query.
-  * pname:pVideoSessionMemoryRequirementsCount is a pointer to an integer
-    related to the number of memory heap requirements available or queried,
-    as described below.
-  * pname:pVideoSessionMemoryRequirements is `NULL` or a pointer to an array
-    of slink:VkVideoGetMemoryPropertiesKHR structures in which the memory
-    heap requirements of the video session are returned.
-
-If pname:pVideoSessionMemoryRequirements is `NULL`, then the number of
-memory heap types required for the video session is returned in
-pname:pVideoSessionMemoryRequirementsCount.
-Otherwise, pname:pVideoSessionMemoryRequirementsCount must: point to a
-variable set by the user with the number of elements in the
-pname:pVideoSessionMemoryRequirements array, and on return the variable is
-overwritten with the number of formats actually written to
-pname:pVideoSessionMemoryRequirements.
-If pname:pVideoSessionMemoryRequirementsCount is less than the number of
-memory heap types required for the video session, then at most
-pname:pVideoSessionMemoryRequirementsCount elements will be written to
-pname:pVideoSessionMemoryRequirements, and ename:VK_INCOMPLETE will be
-returned, instead of ename:VK_SUCCESS, to indicate that not all required
-memory heap types were returned.
-
-include::{generated}/validity/protos/vkGetVideoSessionMemoryRequirementsKHR.txt[]
---
-
-[open,refpage='VkVideoGetMemoryPropertiesKHR',desc='Structure specifying video session required memory heap type',type='structs']
---
-The slink:VkVideoGetMemoryPropertiesKHR structure is defined as:
-
-include::{generated}/api/structs/VkVideoGetMemoryPropertiesKHR.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:memoryBindIndex is the memory bind index of the memory heap type
-    described by the information returned in pname:pMemoryRequirements.
-  * pname:pMemoryRequirements is a pointer to a slink:VkMemoryRequirements2
-    structure in which the requested memory heap requirements for the heap
-    with index pname:memoryBindIndex are returned.
-
-include::{generated}/validity/structs/VkVideoGetMemoryPropertiesKHR.txt[]
---
-
-
-[[binding-session-memory]]
-==== Binding the Session Object Device Memory
-
-[open,refpage='vkBindVideoSessionMemoryKHR',desc='Bind Video Memory',type='protos']
---
-To attach memory to a video session object, call:
-
-include::{generated}/api/protos/vkBindVideoSessionMemoryKHR.txt[]
-
-  * pname:device is the logical device that owns the video session's memory.
-  * pname:videoSession is the video session to be bound with device memory.
-  * pname:videoSessionBindMemoryCount is the number of
-    pname:pVideoSessionBindMemories to be bound.
-  * pname:pVideoSessionBindMemories is a pointer to an array of
-    slink:VkVideoBindMemoryKHR structures specifying memory regions to be
-    bound to a device memory heap.
-
-include::{generated}/validity/protos/vkBindVideoSessionMemoryKHR.txt[]
---
-
-[open,refpage='VkVideoBindMemoryKHR',desc='Structure specifying device memory heap entry for video session object',type='structs']
---
-The slink:VkVideoBindMemoryKHR structure is defined as:
-
-include::{generated}/api/structs/VkVideoBindMemoryKHR.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:memoryBindIndex is the index of the device memory heap returned in
-    slink:VkVideoGetMemoryPropertiesKHR::pname:memoryBindIndex from
-    flink:vkGetVideoSessionMemoryRequirementsKHR.
-  * pname:memory is the allocated device memory to be bound to the video
-    session's heap with index pname:memoryBindIndex.
-  * pname:memoryOffset is the start offset of the region of pname:memory
-    which is to be bound.
-  * pname:memorySize is the size in bytes of the region of pname:memory,
-    starting from pname:memoryOffset bytes, to be bound.
-
-
-include::{generated}/validity/structs/VkVideoBindMemoryKHR.txt[]
---
-
-
-[[video-session-parameters]]
-=== Video Session Parameters
-
-This specification supports several classes of preprocessed parameters
-stored in Video Session Parameters objects.
-The Video Session Parameters objects reduces the number of parameters being
-dispatched and then processed by the implementation while recording video
-command buffers.
-
-
-[[creating-video-session-parameters]]
-=== Creating Video Session Parameters
-
-[open,refpage='VkVideoSessionParametersKHR',desc='Opaque handle to a video video session parameters object',type='handles']
---
-Video session parameter objects are represented by
-slink:VkVideoSessionParametersKHR handles:
-
-include::{generated}/api/handles/VkVideoSessionParametersKHR.txt[]
---
-
-[open,refpage='vkCreateVideoSessionParametersKHR',desc='Creates video session video session parameter object',type='protos']
---
-To create a video session parameters object, call:
-
-include::{generated}/api/protos/vkCreateVideoSessionParametersKHR.txt[]
-
-  * pname:device is the logical device that was used for the creation of the
-    video session object.
-  * pname:pCreateInfo is a pointer to
-    slink:VkVideoSessionParametersCreateInfoKHR structure specifying the
-    video session parameters.
-  * pname:pAllocator controls host memory allocation as described in the
-    <<memory-allocation, Memory Allocation>> chapter.
-  * pname:pVideoSessionParameters is a pointer to a
-    slink:VkVideoSessionParametersKHR handle in which the video session
-    parameters object is returned.
-
-include::{generated}/validity/protos/vkCreateVideoSessionParametersKHR.txt[]
---
-
-[open,refpage='VkVideoSessionParametersCreateInfoKHR',desc='Structure to set video session parameters',type='structs']
---
-The slink:VkVideoSessionParametersCreateInfoKHR structure is defined as:
-
-include::{generated}/api/structs/VkVideoSessionParametersCreateInfoKHR.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:videoSessionParametersTemplate is dlink:VK_NULL_HANDLE or a valid
-    handle to a slink:VkVideoSessionParametersKHR object.
-    If this parameter represents a valid handle, then the underlying Video
-    Session Parameters object will be used as a template for constructing
-    the new video session parameters object.
-    All of the template object's current parameters will be inherited by the
-    new object in such a case.
-    Optionally, some of the template's parameters can be updated or new
-    parameters added to the newly constructed object via the
-    extension-specific parameters.
-  * pname:videoSession is the video session object against which the video
-    session parameters object is going to be created.
-
-.Valid Usage
-****
-  * [[VUID-VkVideoSessionParametersCreateInfoKHR-videoSessionParametersTemplate-04855]]
-    If pname:videoSessionParametersTemplate represents a valid handle, it
-    must: have been created against pname:videoSession
-****
-
-include::{generated}/validity/structs/VkVideoSessionParametersCreateInfoKHR.txt[]
---
-
-
-[[UpdatingVideoSessionParameters]]
-=== Updating the parameters of the Video Session Parameters object
-
-[open,refpage='vkUpdateVideoSessionParametersKHR',desc='Update video session video session parameter object',type='protos']
---
-To update, add, or remove video session parameters state, call:
-
-include::{generated}/api/protos/vkUpdateVideoSessionParametersKHR.txt[]
-
-  * pname:device is the logical device that was used for the creation of the
-    video session object.
-  * pname:videoSessionParameters is the video session object that is going
-    to be updated.
-  * pname:pUpdateInfo is a pointer to a
-    sname:VkVideoSessionParametersUpdateInfoKHR structure containing the
-    session parameters update information.
-
-include::{generated}/validity/protos/vkUpdateVideoSessionParametersKHR.txt[]
---
-
-[open,refpage='VkVideoSessionParametersUpdateInfoKHR',desc='Structure to update video session parameters',type='structs']
---
-The sname:VkVideoSessionParametersUpdateInfoKHR structure is defined as:
-
-include::{generated}/api/structs/VkVideoSessionParametersUpdateInfoKHR.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:updateSequenceCount is the sequence number of the object update
-    with parameters, starting from `1` and incrementing the value by one
-    with each subsequent update.
-
-include::{generated}/validity/structs/VkVideoSessionParametersUpdateInfoKHR.txt[]
---
-
-
-[[destroying-video-session-parameters]]
-=== Destroying Video Session Parameters
-
-[open,refpage='vkDestroyVideoSessionParametersKHR',desc='Destroy video session parameters object',type='protos']
---
-To destroy a video session object, call:
-
-include::{generated}/api/protos/vkDestroyVideoSessionParametersKHR.txt[]
-
-  * pname:device is the device the video session was created with.
-  * pname:videoSessionParameters is the video session parameters object to
-    be destroyed.
-  * pname:pAllocator controls host memory allocation as described in the
-    <<memory-allocation, Memory Allocation>> chapter.
-
-include::{generated}/validity/protos/vkDestroyVideoSessionParametersKHR.txt[]
---
-
-
-=== Video Encode and Decode commands
-
-[open,refpage='vkCmdBeginVideoCodingKHR',desc='Start decode jobs',type='protos']
---
-To start video decode or encode operations, call:
-
-include::{generated}/api/protos/vkCmdBeginVideoCodingKHR.txt[]
-
-  * pname:commandBuffer is the command buffer to be used when recording
-    commands for the video decode or encode operations.
-  * pname:pBeginInfo is a pointer to a slink:VkVideoBeginCodingInfoKHR
-    structure.
-
-include::{generated}/validity/protos/vkCmdBeginVideoCodingKHR.txt[]
---
-
-[open,refpage='VkVideoBeginCodingInfoKHR',desc='Structure specifying parameters of decode starts',type='structs']
---
-The slink:VkVideoBeginCodingInfoKHR structure is defined as:
-
-include::{generated}/api/structs/VkVideoBeginCodingInfoKHR.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:flags is reserved for future use.
-  * pname:codecQualityPreset is a bitmask of
-    elink:VkVideoCodingQualityPresetFlagBitsKHR specifying the Video Decode
-    or Encode quality preset.
-  * pname:videoSession is the video session object to be bound for the
-    processing of the video commands.
-  * pname:videoSessionParameters is dlink:VK_NULL_HANDLE or a handle of a
-    slink:VkVideoSessionParametersKHR object to be used for the processing
-    of the video commands.
-    If dlink:VK_NULL_HANDLE, then no video session parameters apply to this
-    command buffer context.
-  * pname:referenceSlotCount is the number of reference slot entries
-    provided in pname:pReferenceSlots.
-  * pname:pReferenceSlots is a pointer to an array of
-    slink:VkVideoReferenceSlotKHR structures specifying reference slots,
-    used within the video command context between this
-    flink:vkCmdBeginVideoCodingKHR command and the
-    flink:vkCmdEndVideoCodingKHR commmand that follows.
-    Each reference slot provides a slot index and the
-    slink:VkVideoPictureResourceKHR specifying the reference picture
-    resource bound to this slot index.
-    A slot index must: not appear more than once in pname:pReferenceSlots in
-    a given command.
-
-.Valid Usage
-****
-  * [[VUID-VkVideoBeginCodingInfoKHR-referenceSlotCount-04856]]
-    slink:VkVideoBeginCodingInfoKHR::pname:referenceSlotCount must: not
-    exceed the value specified in
-    slink:VkVideoSessionCreateInfoKHR::pname:maxReferencePicturesSlotsCount
-    when creating the video session object that is being provided in
-    pname:videoSession
-  * [[VUID-VkVideoBeginCodingInfoKHR-videoSessionParameters-04857]]
-    If pname:videoSessionParameters is not dlink:VK_NULL_HANDLE, it must:
-    have been created using pname:videoSession as a parent object
-****
-
-include::{generated}/validity/structs/VkVideoBeginCodingInfoKHR.txt[]
---
-
-[open,refpage='VkVideoBeginCodingFlagsKHR',desc='Reserved for future use',type='flags']
---
-include::{generated}/api/flags/VkVideoBeginCodingFlagsKHR.txt[]
-
-tname:VkVideoBeginCodingFlagsKHR is a bitmask type for setting a mask, but
-is currently reserved for future use.
---
-
-[open,refpage='VkVideoCodingQualityPresetFlagBitsKHR',desc='Video codec profile types',type='enums']
---
-The decode preset types are defined with the following:
-
-include::{generated}/api/enums/VkVideoCodingQualityPresetFlagBitsKHR.txt[]
-
-  * ename:VK_VIDEO_CODING_QUALITY_PRESET_NORMAL_BIT_KHR defines normal
-    decode case.
-  * ename:VK_VIDEO_CODING_QUALITY_PRESET_POWER_BIT_KHR defines power
-    efficient case.
-  * ename:VK_VIDEO_CODING_QUALITY_PRESET_QUALITY_BIT_KHR defines quality
-    focus case.
---
-
-[open,refpage='VkVideoCodingQualityPresetFlagsKHR',desc='Bitmask of elink:VkVideoCodingQualityPresetFlagBitsKHR flags',type='flags']
---
-include::{generated}/api/flags/VkVideoCodingQualityPresetFlagsKHR.txt[]
-
-tlink:VkVideoCodingQualityPresetFlagsKHR is a bitmask type for setting a
-mask of zero or more elink:VkVideoCodingQualityPresetFlagBitsKHR.
---
-
-[open,refpage='VkVideoReferenceSlotKHR',desc='Structure specifying the reference picture slot',type='structs']
---
-The slink:VkVideoReferenceSlotKHR structure is defined as:
-
-include::{generated}/api/structs/VkVideoReferenceSlotKHR.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:slotIndex is the unique reference slot index used for the encode
-    or decode operation.
-  * pname:pPictureResource is a pointer to a slink:VkVideoPictureResourceKHR
-    structure describing the picture resource bound to this slot index.
-
-include::{generated}/validity/structs/VkVideoReferenceSlotKHR.txt[]
---
-
-[open,refpage='VkVideoPictureResourceKHR',desc='Structure specifying the picture resources',type='structs']
---
-The slink:VkVideoPictureResourceKHR structure is defined as:
-
-include::{generated}/api/structs/VkVideoPictureResourceKHR.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:codedOffset is the offset to be used for the picture resource.
-  * pname:codedExtent is the extent to be used for the picture resource.
-  * pname:baseArrayLayer is the first array layer to be accessed for the
-    Decode or Encode Operations.
-  * pname:imageViewBinding is a slink:VkImageView image view representing
-    this picture resource.
-
-include::{generated}/validity/structs/VkVideoPictureResourceKHR.txt[]
---
-
-
-=== End of the Video Session
-
-[open,refpage='vkCmdEndVideoCodingKHR',desc='End decode jobs',type='protos']
---
-To end video decode or encode operations, call:
-
-include::{generated}/api/protos/vkCmdEndVideoCodingKHR.txt[]
-
-  * pname:commandBuffer is the command buffer to be filled by this function.
-  * pname:pEndCodingInfo is a pointer to a slink:VkVideoEndCodingInfoKHR
-    structure.
-
-include::{generated}/validity/protos/vkCmdEndVideoCodingKHR.txt[]
---
-
-[open,refpage='VkVideoEndCodingInfoKHR',desc='Structure specifying the end of decode encode commands sequence',type='structs']
---
-The slink:VkVideoEndCodingInfoKHR structure is defined as:
-
-include::{generated}/api/structs/VkVideoEndCodingInfoKHR.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:flags is reserved for future use.
-
-include::{generated}/validity/structs/VkVideoEndCodingInfoKHR.txt[]
---
-
-[open,refpage='VkVideoEndCodingFlagsKHR',desc='Reserved for future use',type='flags']
---
-include::{generated}/api/flags/VkVideoEndCodingFlagsKHR.txt[]
-
-tname:VkVideoEndCodingFlagsKHR is a bitmask type for setting a mask, but is
-currently reserved for future use.
---
-
-
-=== Video Session Control Command
-
-[open,refpage='vkCmdControlVideoCodingKHR',desc='Set encode rate control parameters',type='protos']
---
-To apply dynamic controls to video decode or video operations, call:
-
-include::{generated}/api/protos/vkCmdControlVideoCodingKHR.txt[]
-
-  * pname:commandBuffer is the command buffer to be filled by this function
-    for setting encode rate control parameters.
-  * pname:pCodingControlInfo is a pointer to a
-    slink:VkVideoCodingControlInfoKHR structure.
-
-include::{generated}/validity/protos/vkCmdControlVideoCodingKHR.txt[]
---
-
-[open,refpage='VkVideoCodingControlInfoKHR',desc='Structure specifying parameters of decode starts',type='structs']
---
-The slink:VkVideoCodingControlInfoKHR structure is defined as:
-
-include::{generated}/api/structs/VkVideoCodingControlInfoKHR.txt[]
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-  * pname:flags is a bitmask of tlink:VkVideoCodingControlFlagsKHR
-    specifying control flags.
-
-include::{generated}/validity/structs/VkVideoCodingControlInfoKHR.txt[]
---
-
-[open,refpage='VkVideoCodingControlFlagBitsKHR',desc='Video Coding Control Command Flags',type='enums']
---
-The flink:vkCmdControlVideoCodingKHR flags are defined with the following
-enumeration:
-
-include::{generated}/api/enums/VkVideoCodingControlFlagBitsKHR.txt[]
-
-  * ename:VK_VIDEO_CODING_CONTROL_DEFAULT_KHR indicates a request for the
-    coding control paramaters to be applied to the current state of the
-    bound video session.
-  * ename:VK_VIDEO_CODING_CONTROL_RESET_BIT_KHR indicates a request for the
-    bound video session state to be reset before the coding control
-    parameters are applied.
-    The state after reset is identical to the state immediately after video
-    session creation.
---
-
-[open,refpage='VkVideoCodingControlFlagsKHR',desc='Bitmask specifying the Video Coding Control Command flink:vkCmdControlVideoCodingKHR flags',type='flags']
---
-include::{generated}/api/flags/VkVideoCodingControlFlagsKHR.txt[]
-
-tlink:VkVideoCodingControlFlagsKHR is a bitmask type for setting a mask of
-zero or more elink:VkVideoCodingControlFlagBitsKHR.
---
diff --git a/registry/vulkan/config/README.adoc b/registry/vulkan/config/README.adoc
deleted file mode 100644
index afe163e..0000000
--- a/registry/vulkan/config/README.adoc
+++ /dev/null
@@ -1,45 +0,0 @@
-// Copyright 2015-2021 The Khronos Group Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-= Vulkan Asciidoc Configuration Files
-
-== Macros
-
-The macros in `spec-macros.rb` and `spec-macros/extension.rb` are described
-in the "`Vulkan Documentation and Extensions: Procedures and Conventions`"
-document (see the link:../styleguide.txt[style guide].
-
-== Support for Math
-
-Asciidoctor is customized to insert KaTeX `<script>` tags from
-`math.js` for HTML5, and properly pass through math which has
-`\begin{}\/end{}` delimiters instead of $$\[\]\(\).
-
-For PDF builds, asciidoctor-mathematical is used to generate
-images.
-
-== Stylesheets
-
-`khronos.css` is the stylesheet used for HTML output.
-It is a slightly tweaked version of the Asciidoctor 'Colony' theme.
-
-== Chunked Spec Index
-
-`chunkindex` contains scripts for building and using a search index for the
-Vulkan chunked HTML specification.
-
-== Asciidoctor Extensions
-
-We use a number of Asciidoctor customizations written in Ruby, described
-briefly below.
-
-* `asciidoctor-mathematical-ext.rb` - make latexmath: blocks work in table cells
-* `extension-highlighter.rb` - one way of constructing a diff HTML document
-* `katex_replace.rb` - substitute KaTeX for MathJax in output HTML
-* `loadable_html.rb` - add some status messages for slow-loading documents
-* `rouge-extend-css.rb` - override parts of the 'rouge' highlighter CSS
-* `spec-macros.rb` - custom asciidoctor macros used in spec markup
-* `tilde_open_block.rb` - allow '~~~~' as an open block delimiter
-* `vuid-expander.rb` - add anchors to valid usage ID tags
-* `vu-to-json.rb` - extract valid usage statements to JSON as part of a dummy spec build
diff --git a/registry/vulkan/config/asciidoctor-mathematical-ext.rb b/registry/vulkan/config/asciidoctor-mathematical-ext.rb
deleted file mode 100644
index 62daf16..0000000
--- a/registry/vulkan/config/asciidoctor-mathematical-ext.rb
+++ /dev/null
@@ -1,23 +0,0 @@
-# Copyright 2018-2021 The Khronos Group Inc.
-#
-# SPDX-License-Identifier: Apache-2.0
-
-require 'asciidoctor/extensions'
-
-# This script makes [latexmath] blocks work within table cells.
-# See https://github.com/asciidoctor/asciidoctor-pdf/issues/740
-
-Asciidoctor::Extensions.register do
-  treeprocessor do
-    process do |doc|
-      mathematicalProcessor = MathematicalTreeprocessor.new
-      (table_blocks = doc.find_by context: :table).each do |table|
-        (table.rows[:body] + table.rows[:foot]).each do |row|
-          row.each do |cell|
-            mathematicalProcessor.process cell.inner_document if cell.style == :asciidoc
-          end
-        end
-      end
-    end
-  end
-end
diff --git a/registry/vulkan/config/attribs.txt b/registry/vulkan/config/attribs.txt
deleted file mode 100644
index f3594ff..0000000
--- a/registry/vulkan/config/attribs.txt
+++ /dev/null
@@ -1,107 +0,0 @@
-// Copyright 2015-2021 The Khronos Group Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-// Various special / math symbols, matching LaTeX names.
-// The pass:[+ ] notation avoids asciidoctor EOL treatment of the attribute.
-
-// Macro just to avoid typing the messy expression many times.
-// \' doesn't work in title, captions, link text, etc.
-:YCbCr: pass:q[Y′C~B~C~R~]
-:RGBprime: pass:q[R′G′B′]
-:prime: ′
-
-// Used when an italicized 'i' is wanted in the middle of an enum name,
-// such as `VK_IMAGE_ASPECT_PLANE__{ibit}__BIT`
-:ibit: _i_
-
-// Special symbols - not used in [eq] spans
-:sym1: ✓
-:sym2: †
-:sym3: ‡
-:reg: ®
-:trade: ™
-:harr: ↔
-
-// Math operators and logic symbols
-:times: ×
-:cdot: ⋅
-:plus: pass:[+ ]
-:geq: ≥
-:leq: ≤
-:neq: ≠
-:leftarrow: ←
-:uparrow: ↑
-:rightarrow: →
-:downarrow: ↓
-:elem: ∈
-:lnot: ¬
-:land: ∧
-:lor: ∨
-:oplus: ⊕
-:lceil: ⌈
-:rceil: ⌉
-:lfloor: ⌊
-:rfloor: ⌋
-:vert: |
-:partial: ∂
-:onehalf: ½
-:onequarter: ¼
-:ldots: …
-:forall: ∀
-:sqrt: √
-:inf: ∞
-:plusmn: ±
-
-// Greek letters
-:alpha: α
-:beta: β
-:gamma: γ
-:DeltaUpper: Δ
-:delta: δ
-:epsilon: ε
-:eta: η
-:theta: θ
-:lambda: λ
-:pi: π
-:rho: ρ
-:sigma: σ
-:tau: τ
-:phi: ϕ
-
-// Word break opportunity tag for HTML
-ifdef::backend-html5[]
-:wbro: pass:[<wbr>]
-endif::backend-html5[]
-ifndef::backend-html5[]
-:wbro:
-endif::backend-html5[]
-
-// header names
-:core_header: vulkan_core.h
-:full_header: vulkan.h
-
-// Placeholders for host synchronization block text
-:externsynctitle: Host Synchronization
-:externsyncprefix: Host access to
-
-// SPIR-V terms
-// macros are not case-sensitive but are defined as such for readability
-:ExecutionModel: code:Execution code:Model
-:ExecutionMode: code:Execution code:Mode
-:StorageClass: code:Storage code:Class
-
-// Human-readable names for XML 'specialuse' attributes, used in
-// chapters/extensions.txt for the <<extendingvulkan-specialuse-table>> table
-// as well as in some extension appendices.
-:cadsupport: CAD support
-:d3demulation: D3D support
-:devtools: Developer tools
-:debugging: Debugging tools
-:glemulation: OpenGL / ES support
-
-
-// URL prefix for the github repository containing the public specification,
-// used to generate links to separate extension proposal documents in
-// generated extension metadata.
-:specRepositoryURL: https://github.com/KhronosGroup/Vulkan-Docs/tree/main
diff --git a/registry/vulkan/config/chunkindex/README.adoc b/registry/vulkan/config/chunkindex/README.adoc
deleted file mode 100644
index b3eb47b..0000000
--- a/registry/vulkan/config/chunkindex/README.adoc
+++ /dev/null
@@ -1,36 +0,0 @@
-// Copyright 2018-2021 The Khronos Group Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-ifdef::env-github[]
-:note-caption: :information_source:
-endif::[]
-
-= Index Building For Vulkan Chunked HTML Output
-
-This directory contains scripts which help a search index, and add a
-searchbox using this index into each page of the Vulkan chunked HTML
-specification output. These files include:
-
-[options="compact"]
-  * README.adoc - this file
-  * build-index.js - build a JSON search index from generate-index.rb output
-  * chunked.css - CSS for the searchbox
-  * chunked.js - Script to load and execute the searchbox
-  * custom.patch - Patch to generated HTML to include chunked.js / chunked.css
-  * generate-index.rb - generate an index of the HTML documents
-  * lunr.js - utility functions taken from the lunr package
-
-= Credits and Licenses
-
-The indexing tools and toolchain was created by Baldur Karlsson in
-    https://github.com/baldurk/vkdocs-chunked-builder
-Files created in that project are under the Apache 2.0 license.
-
-Portions of the chunked.js script are taken from
-    https://github.com/filamentgroup/loadJS/blob/master/loadJS.js
-These portions are copyright Scott Jehl, Filament Group, Inc., under an MIT
-license.
-
-The lunr.js script is taken from the 'lunr' npm package, version 2.3.8. It
-is copyright Oliver Nightingale, under an MIT license.
diff --git a/registry/vulkan/config/chunkindex/addscript.jsmarker b/registry/vulkan/config/chunkindex/addscript.jsmarker
deleted file mode 100644
index 387d7a8..0000000
--- a/registry/vulkan/config/chunkindex/addscript.jsmarker
+++ /dev/null
@@ -1,3 +0,0 @@
-<link href="chunked.css?4" rel="stylesheet">
-<script>var searchindexurl = 'search.index.js?4' + (document.title.replace(/[^0-9.]/g, ''));</script>
-<script src="chunked.js?4"></script>
diff --git a/registry/vulkan/config/chunkindex/addscript.searchboxmarker b/registry/vulkan/config/chunkindex/addscript.searchboxmarker
deleted file mode 100644
index 7d8bfb0..0000000
--- a/registry/vulkan/config/chunkindex/addscript.searchboxmarker
+++ /dev/null
@@ -1 +0,0 @@
-<div class="searchbox"><label for="searchbox">Search: </label><input id="searchbox" type="text" disabled="disabled" value="Loading Search Data" /><div id="resultsdiv"><ol id="results"></ol></div></div>
diff --git a/registry/vulkan/config/chunkindex/addscripts.sh b/registry/vulkan/config/chunkindex/addscripts.sh
deleted file mode 100755
index dadde98..0000000
--- a/registry/vulkan/config/chunkindex/addscripts.sh
+++ /dev/null
@@ -1,30 +0,0 @@
-#!/bin/sh
-# Copyright 2020-2021 The Khronos Group Inc.
-#
-# SPDX-License-Identifier: Apache-2.0
-
-# Replace marker comments in asciidoctor-generated HTML with JavaScript
-# and HTML supporting the searchbox.
-#
-# The marker comments are inserted by config/loadable_html/extension.rb,
-# and are a stable place to add these comments, unlike the previous
-# method of using 'patch'. That could fail when moving to new
-# asciidoctor versions and style files. This can still fail, but should
-# be more robust.
-#
-# Usage: addscripts.sh input-file output-file
-
-# Find path to the script, which is also the patch to the replacements
-path=`dirname $0`
-
-input=$1
-output=$2
-test -f $input || (echo "No input file $1" ; exit 1)
-
-# Replace the first marker comment with text in addscript.jsmarker
-# Replace the second marker comment with text in addscript.searchboxmarker
-
-cp $input $output
-sed -i -e '/<\!--ChunkedSearchJSMarker-->/r '"$path/addscript.jsmarker" \
-       -e '/<\!--ChunkedSearchboxMarker-->/r '"$path/addscript.searchboxmarker" \
-       $output
diff --git a/registry/vulkan/config/chunkindex/build-index.js b/registry/vulkan/config/chunkindex/build-index.js
deleted file mode 100644
index 99d7550..0000000
--- a/registry/vulkan/config/chunkindex/build-index.js
+++ /dev/null
@@ -1,39 +0,0 @@
-// Copyright (c) 2019 Baldur Karlsson
-//
-// SPDX-License-Identifier: Apache-2.0
-
-var lunr = require('lunr'),
-    stdin = process.stdin,
-    stdout = process.stdout,
-    buffer = []
-
-stdin.resume()
-stdin.setEncoding('utf8')
-
-stdin.on('data', function (data) {
-  buffer.push(data)
-})
-
-stdin.on('end', function () {
-  var documents = JSON.parse(buffer.join(''))
-
-  var idx = lunr(function () {
-    this.ref('id')
-    this.field('title')
-    this.field('body')
-
-    documents.forEach(function (doc) {
-      this.add(doc)
-    }, this)
-  })
-
-  stdout.write("var searchindex = " + JSON.stringify(idx) + ";\n")
-
-  var searchlookup = {};
-
-  for(var i=0; i < documents.length; i++) {
-    searchlookup[documents[i].id] = documents[i].title;
-  }
-
-  stdout.write("var searchlookup = " + JSON.stringify(searchlookup) + ";\n")
-})
diff --git a/registry/vulkan/config/chunkindex/chunked.css b/registry/vulkan/config/chunkindex/chunked.css
deleted file mode 100644
index 6bedffa..0000000
--- a/registry/vulkan/config/chunkindex/chunked.css
+++ /dev/null
@@ -1,81 +0,0 @@
-/* Copyright (c) 2019 Baldur Karlsson
- *
- * SPDX-License-Identifier: Apache-2.0
- */
-
-/*
-a.headerlink { display: none; text-decoration: none; }
-
-h2:hover a.headerlink { display: inline; }
-h3:hover a.headerlink { display: inline; }
-h4:hover a.headerlink { display: inline; }
-h5:hover a.headerlink { display: inline; }
-h6:hover a.headerlink { display: inline; }
-*/
-
-div.searchbox {
-  background-color: white;
-  margin-top: 20px;
-}
-
-@media only screen and (min-width: 768px) {
-  div#toc {
-    padding-top: 6em !important;
-  }
-
-  div.searchbox {
-    display: block;
-    position: fixed;
-    left: 0px;
-    max-width: 13.5em;
-    padding-left: 20px;
-    padding-top: 20px;
-    margin-top: 0px;
-    top: 0px;
-    /* border-bottom: 1px solid black; */
-    /* box-shadow: 0px 10px 20px -10px #444444; */
-    z-index: 1000;
-  }
-}
-
-@media only screen and (min-width: 1280px) {
-  div.searchbox {
-    max-width: 18em;
-  }
-
-  div.searchbox input {
-    width: 17em;
-  }
-}
-
-div.searchbox div.results {
-  border: 1px solid black;
-}
-
-div.searchbox label {
-  display: block;
-  width: 160px;
-}
-
-div.searchbox input {
-  margin-top: 0.5em;
-  margin-bottom: 0.5em;
-}
-
-ol#results li a {
-  text-overflow: ellipsis;
-  overflow: hidden;
-  display: block;
-}
-
-.link {
-  position: absolute;
-  z-index: 1000;
-  right: 4em;
-  margin-top: 0.5em;
-  display: none;
-}
-
-.listingblock:hover .link {
-  display: block;
-}
diff --git a/registry/vulkan/config/chunkindex/chunked.js b/registry/vulkan/config/chunkindex/chunked.js
deleted file mode 100644
index e7111e2..0000000
--- a/registry/vulkan/config/chunkindex/chunked.js
+++ /dev/null
@@ -1,170 +0,0 @@
-/*! loadJS: load a JS file asynchronously. [c]2014 @scottjehl, Filament Group, Inc. (Based on http://goo.gl/REQGQ by Paul Irish). Licensed MIT */
-(function( w ){
-        var loadJS = function( src, cb, ordered ){
-                "use strict";
-                var tmp;
-                var ref = w.document.getElementsByTagName( "script" )[ 0 ];
-                var script = w.document.createElement( "script" );
-
-                if (typeof(cb) === 'boolean') {
-                        tmp = ordered;
-                        ordered = cb;
-                        cb = tmp;
-                }
-
-                script.src = src;
-                script.async = !ordered;
-                ref.parentNode.insertBefore( script, ref );
-
-                if (cb && typeof(cb) === "function") {
-                        script.onload = cb;
-                }
-                return script;
-        };
-        // commonjs
-        if( typeof module !== "undefined" ){
-                module.exports = loadJS;
-        }
-        else {
-                w.loadJS = loadJS;
-        }
-}( typeof global !== "undefined" ? global : this ));
-/*! end loadJS */
-
-// Remaining portions of this file are
-//
-// Copyright (c) 2019 Baldur Karlsson
-//
-// SPDX-License-Identifier: Apache-2.0
-
-var searchengine = undefined;
-
-// scroll to the first <a> linking to a chapter
-function scrollChapter(element, chapter) {
-  for(var i=0; i < element.children.length; i++) {
-    if(element.children[i].nodeName == "A" && element.children[i].href.indexOf(chapter) >= 0) {
-      element.children[i].scrollIntoView(true);
-      return true;
-    }
-
-    if(scrollChapter(element.children[i], chapter))
-      return true;
-  }
-
-  return false;
-}
-
-var results = undefined;
-var searchbox = undefined;
-var searchTimeout = undefined;
-
-function clearSearch() {
-  while(results.children.length > 0) {
-    results.removeChild(results.children[0]);
-  }
-
-  document.getElementById("resultsdiv").classList.remove("results");
-}
-
-function doSearch() {
-  clearSearch();
-
-  var searchtext = searchbox.value;
-
-  if(searchtext == '')
-    return;
-
-  if(searchtext.indexOf(' ') == -1 && searchtext.indexOf('\t') == -1 && searchtext.indexOf('"') == -1)
-    searchtext = searchtext + ' ' + searchtext + '*';
-
-  searchtext = searchtext.replace(/"/g, '')
-
-  var searchresults = searchengine.search(searchtext);
-
-  if(searchresults.length == 0) {
-    var r = document.createElement('LI');
-    r.innerHTML = 'No results';
-
-    results.appendChild(r);
-  }
-
-  document.getElementById("resultsdiv").classList.add("results");
-
-  for(var i=0; i < 10 && i < searchresults.length; i++) {
-    var a = document.createElement('A');
-    a.setAttribute('href', searchresults[i].ref);
-    a.innerHTML = searchlookup[searchresults[i].ref];
-
-    var r = document.createElement('LI');
-    r.appendChild(a);
-
-    results.appendChild(r);
-  }
-}
-
-function searchInput(e) {
-  if(searchTimeout !== undefined)
-    clearTimeout(searchTimeout);
-
-  searchTimeout = setTimeout(doSearch, 50);
-}
-
-function searchKeyDown(e) {
-  if(e.keyCode == 27) {
-    // escape
-    if(searchTimeout !== undefined)
-      clearTimeout(searchTimeout);
-
-    searchbox.value = '';
-
-    clearSearch();
-  } else if(e.keyCode == 10 || e.keyCode == 13) {
-    // enter/return
-    doSearch();
-  } else if(e.keyCode == 8) {
-    clearSearch();
-
-    searchInput(e);
-  }
-}
-
-document.addEventListener("DOMContentLoaded", function(event) {
-  // get the chapter name from the current URL
-  var chap = window.location.pathname.replace(/.*\//, '');
-
-  var toc = document.getElementById("toc");
-
-  // Scroll the sidebar to the appropriate chapter
-  if(chap != "") {
-    scrollChapter(toc, chap);
-    toc.scrollTop -= 96;
-  }
-
-  // add anchor links to code blocks
-  var blocks = document.getElementsByClassName("listingblock")
-
-  for(var i=0; i < blocks.length; i++) {
-    if(blocks[i].id.length > 0) {
-      var a = document.createElement("A");
-      a.innerHTML = '\u00B6';
-      a.setAttribute('class', 'link');
-      a.setAttribute('href', '#' + blocks[i].id);
-
-      blocks[i].insertBefore(a, blocks[i].childNodes[0]);
-    }
-  }
-
-  results = document.getElementById('results');
-  searchbox = document.getElementById('searchbox');
-
-  loadJS("lunr.js", function() {
-    loadJS(searchindexurl, function() {
-      searchengine = lunr.Index.load(searchindex);
-
-      searchbox.value = '';
-      searchbox.disabled = false;
-      searchbox.addEventListener('keydown', searchKeyDown, false);
-      searchbox.addEventListener('input', searchInput, false);
-    }, true);
-  }, true);
-});
diff --git a/registry/vulkan/config/chunkindex/custom.patch b/registry/vulkan/config/chunkindex/custom.patch
deleted file mode 100644
index bc2b7ce..0000000
--- a/registry/vulkan/config/chunkindex/custom.patch
+++ /dev/null
@@ -1,22 +0,0 @@
-diff --git a/vkspec.html b/vkspec.html
-index fbe650a..d665755 100644
---- a/vkspec.html
-+++ b/vkspec.html
-@@ -757,6 +757,9 @@ li > p > a[id^="VUID-"].link:hover { color: black; }
- <link rel="preload" href="../katex/fonts/KaTeX_Size3-Regular.woff2" as="font" type="font/woff2" crossorigin="">
- <link rel="preload" href="../katex/fonts/KaTeX_Size4-Regular.woff2" as="font" type="font/woff2" crossorigin="">
- <link rel="preload" href="../katex/fonts/KaTeX_Typewriter-Regular.woff2" as="font" type="font/woff2" crossorigin=""><link rel="stylesheet" href="../katex/katex.min.css">
-+<link href="chunked.css?4" rel="stylesheet">
-+<script>var searchindexurl = 'search.index.js?4' + (document.title.replace(/[^0-9.]/g, ''));</script>
-+<script src="chunked.js?4"></script>
- <style>
-     #loading_msg {
-         width: 100%;
-@@ -1318,6 +1322,7 @@ li > p > a[id^="VUID-"].link:hover { color: black; }
- </div>
- </div>
- <div id="loading_msg" class="hidden" hidden><p>Loading&hellip; please wait.</p></div>
-+<div class="searchbox"><label for="searchbox">Search: </label><input id="searchbox" type="text" disabled="disabled" value="Loading Search Data" /><div id="resultsdiv"><ol id="results"></ol></div></div>
- <div id="content" class="loadable" ><script>hideLoadableContent();</script>
- <div id="preamble">
- <div class="sectionbody">
diff --git a/registry/vulkan/config/chunkindex/generate-index.rb b/registry/vulkan/config/chunkindex/generate-index.rb
deleted file mode 100644
index bc59bc9..0000000
--- a/registry/vulkan/config/chunkindex/generate-index.rb
+++ /dev/null
@@ -1,60 +0,0 @@
-#!/usr/bin/env ruby
-#
-# Copyright (c) 2019 Baldur Karlsson
-#
-# SPDX-License-Identifier: Apache-2.0
-
-require 'pp'
-require 'json'
-
-data = []
-
-ARGV.each do |file|
-
-  curdata = nil
-  extappendix = false
-  curext = ""
-
-  File.readlines(file).each do |line|
-
-    text = line.gsub(/<\/?[^>]*>/, "")
-
-    # Special case - set up high quality results for given structs
-    if line =~ /div id="([vV][kK][^"]*)"/ then
-      id = $1
-
-      data << { :id => File.basename(file) + "#" + id, :title => id, :body => id }
-    end
-
-    if line =~ /h[0-9]\s*id="([^"]*)"/ then
-
-      id = $1
-
-      if curdata != nil then
-        data << curdata
-      end
-
-      if text =~ /Appendix.*Extensions/ then
-        extappendix = true
-      end
-
-      if extappendix and text =~ /^VK_.*/ then
-        curext = text
-      elsif curext != "" then
-        text = "#{curext.strip} - #{text}"
-      end
-
-      curdata = { :id => File.basename(file) + "#" + id, :title => text, :body => "" }
-    elsif curdata != nil then
-      curdata[:body] += " " + text
-    end
-
-  end
-
-  if curdata != nil then
-    data << curdata
-  end
-
-end
-
-puts JSON.generate(data)
diff --git a/registry/vulkan/config/chunkindex/lunr.js b/registry/vulkan/config/chunkindex/lunr.js
deleted file mode 100644
index c353765..0000000
--- a/registry/vulkan/config/chunkindex/lunr.js
+++ /dev/null
@@ -1,3475 +0,0 @@
-/**
- * lunr - http://lunrjs.com - A bit like Solr, but much smaller and not as bright - 2.3.8
- * Copyright (C) 2019 Oliver Nightingale
- * @license MIT
- */
-
-;(function(){
-
-/**
- * A convenience function for configuring and constructing
- * a new lunr Index.
- *
- * A lunr.Builder instance is created and the pipeline setup
- * with a trimmer, stop word filter and stemmer.
- *
- * This builder object is yielded to the configuration function
- * that is passed as a parameter, allowing the list of fields
- * and other builder parameters to be customised.
- *
- * All documents _must_ be added within the passed config function.
- *
- * @example
- * var idx = lunr(function () {
- *   this.field('title')
- *   this.field('body')
- *   this.ref('id')
- *
- *   documents.forEach(function (doc) {
- *     this.add(doc)
- *   }, this)
- * })
- *
- * @see {@link lunr.Builder}
- * @see {@link lunr.Pipeline}
- * @see {@link lunr.trimmer}
- * @see {@link lunr.stopWordFilter}
- * @see {@link lunr.stemmer}
- * @namespace {function} lunr
- */
-var lunr = function (config) {
-  var builder = new lunr.Builder
-
-  builder.pipeline.add(
-    lunr.trimmer,
-    lunr.stopWordFilter,
-    lunr.stemmer
-  )
-
-  builder.searchPipeline.add(
-    lunr.stemmer
-  )
-
-  config.call(builder, builder)
-  return builder.build()
-}
-
-lunr.version = "2.3.8"
-/*!
- * lunr.utils
- * Copyright (C) 2019 Oliver Nightingale
- */
-
-/**
- * A namespace containing utils for the rest of the lunr library
- * @namespace lunr.utils
- */
-lunr.utils = {}
-
-/**
- * Print a warning message to the console.
- *
- * @param {String} message The message to be printed.
- * @memberOf lunr.utils
- * @function
- */
-lunr.utils.warn = (function (global) {
-  /* eslint-disable no-console */
-  return function (message) {
-    if (global.console && console.warn) {
-      console.warn(message)
-    }
-  }
-  /* eslint-enable no-console */
-})(this)
-
-/**
- * Convert an object to a string.
- *
- * In the case of `null` and `undefined` the function returns
- * the empty string, in all other cases the result of calling
- * `toString` on the passed object is returned.
- *
- * @param {Any} obj The object to convert to a string.
- * @return {String} string representation of the passed object.
- * @memberOf lunr.utils
- */
-lunr.utils.asString = function (obj) {
-  if (obj === void 0 || obj === null) {
-    return ""
-  } else {
-    return obj.toString()
-  }
-}
-
-/**
- * Clones an object.
- *
- * Will create a copy of an existing object such that any mutations
- * on the copy cannot affect the original.
- *
- * Only shallow objects are supported, passing a nested object to this
- * function will cause a TypeError.
- *
- * Objects with primitives, and arrays of primitives are supported.
- *
- * @param {Object} obj The object to clone.
- * @return {Object} a clone of the passed object.
- * @throws {TypeError} when a nested object is passed.
- * @memberOf Utils
- */
-lunr.utils.clone = function (obj) {
-  if (obj === null || obj === undefined) {
-    return obj
-  }
-
-  var clone = Object.create(null),
-      keys = Object.keys(obj)
-
-  for (var i = 0; i < keys.length; i++) {
-    var key = keys[i],
-        val = obj[key]
-
-    if (Array.isArray(val)) {
-      clone[key] = val.slice()
-      continue
-    }
-
-    if (typeof val === 'string' ||
-        typeof val === 'number' ||
-        typeof val === 'boolean') {
-      clone[key] = val
-      continue
-    }
-
-    throw new TypeError("clone is not deep and does not support nested objects")
-  }
-
-  return clone
-}
-lunr.FieldRef = function (docRef, fieldName, stringValue) {
-  this.docRef = docRef
-  this.fieldName = fieldName
-  this._stringValue = stringValue
-}
-
-lunr.FieldRef.joiner = "/"
-
-lunr.FieldRef.fromString = function (s) {
-  var n = s.indexOf(lunr.FieldRef.joiner)
-
-  if (n === -1) {
-    throw "malformed field ref string"
-  }
-
-  var fieldRef = s.slice(0, n),
-      docRef = s.slice(n + 1)
-
-  return new lunr.FieldRef (docRef, fieldRef, s)
-}
-
-lunr.FieldRef.prototype.toString = function () {
-  if (this._stringValue == undefined) {
-    this._stringValue = this.fieldName + lunr.FieldRef.joiner + this.docRef
-  }
-
-  return this._stringValue
-}
-/*!
- * lunr.Set
- * Copyright (C) 2019 Oliver Nightingale
- */
-
-/**
- * A lunr set.
- *
- * @constructor
- */
-lunr.Set = function (elements) {
-  this.elements = Object.create(null)
-
-  if (elements) {
-    this.length = elements.length
-
-    for (var i = 0; i < this.length; i++) {
-      this.elements[elements[i]] = true
-    }
-  } else {
-    this.length = 0
-  }
-}
-
-/**
- * A complete set that contains all elements.
- *
- * @static
- * @readonly
- * @type {lunr.Set}
- */
-lunr.Set.complete = {
-  intersect: function (other) {
-    return other
-  },
-
-  union: function (other) {
-    return other
-  },
-
-  contains: function () {
-    return true
-  }
-}
-
-/**
- * An empty set that contains no elements.
- *
- * @static
- * @readonly
- * @type {lunr.Set}
- */
-lunr.Set.empty = {
-  intersect: function () {
-    return this
-  },
-
-  union: function (other) {
-    return other
-  },
-
-  contains: function () {
-    return false
-  }
-}
-
-/**
- * Returns true if this set contains the specified object.
- *
- * @param {object} object - Object whose presence in this set is to be tested.
- * @returns {boolean} - True if this set contains the specified object.
- */
-lunr.Set.prototype.contains = function (object) {
-  return !!this.elements[object]
-}
-
-/**
- * Returns a new set containing only the elements that are present in both
- * this set and the specified set.
- *
- * @param {lunr.Set} other - set to intersect with this set.
- * @returns {lunr.Set} a new set that is the intersection of this and the specified set.
- */
-
-lunr.Set.prototype.intersect = function (other) {
-  var a, b, elements, intersection = []
-
-  if (other === lunr.Set.complete) {
-    return this
-  }
-
-  if (other === lunr.Set.empty) {
-    return other
-  }
-
-  if (this.length < other.length) {
-    a = this
-    b = other
-  } else {
-    a = other
-    b = this
-  }
-
-  elements = Object.keys(a.elements)
-
-  for (var i = 0; i < elements.length; i++) {
-    var element = elements[i]
-    if (element in b.elements) {
-      intersection.push(element)
-    }
-  }
-
-  return new lunr.Set (intersection)
-}
-
-/**
- * Returns a new set combining the elements of this and the specified set.
- *
- * @param {lunr.Set} other - set to union with this set.
- * @return {lunr.Set} a new set that is the union of this and the specified set.
- */
-
-lunr.Set.prototype.union = function (other) {
-  if (other === lunr.Set.complete) {
-    return lunr.Set.complete
-  }
-
-  if (other === lunr.Set.empty) {
-    return this
-  }
-
-  return new lunr.Set(Object.keys(this.elements).concat(Object.keys(other.elements)))
-}
-/**
- * A function to calculate the inverse document frequency for
- * a posting. This is shared between the builder and the index
- *
- * @private
- * @param {object} posting - The posting for a given term
- * @param {number} documentCount - The total number of documents.
- */
-lunr.idf = function (posting, documentCount) {
-  var documentsWithTerm = 0
-
-  for (var fieldName in posting) {
-    if (fieldName == '_index') continue // Ignore the term index, its not a field
-    documentsWithTerm += Object.keys(posting[fieldName]).length
-  }
-
-  var x = (documentCount - documentsWithTerm + 0.5) / (documentsWithTerm + 0.5)
-
-  return Math.log(1 + Math.abs(x))
-}
-
-/**
- * A token wraps a string representation of a token
- * as it is passed through the text processing pipeline.
- *
- * @constructor
- * @param {string} [str=''] - The string token being wrapped.
- * @param {object} [metadata={}] - Metadata associated with this token.
- */
-lunr.Token = function (str, metadata) {
-  this.str = str || ""
-  this.metadata = metadata || {}
-}
-
-/**
- * Returns the token string that is being wrapped by this object.
- *
- * @returns {string}
- */
-lunr.Token.prototype.toString = function () {
-  return this.str
-}
-
-/**
- * A token update function is used when updating or optionally
- * when cloning a token.
- *
- * @callback lunr.Token~updateFunction
- * @param {string} str - The string representation of the token.
- * @param {Object} metadata - All metadata associated with this token.
- */
-
-/**
- * Applies the given function to the wrapped string token.
- *
- * @example
- * token.update(function (str, metadata) {
- *   return str.toUpperCase()
- * })
- *
- * @param {lunr.Token~updateFunction} fn - A function to apply to the token string.
- * @returns {lunr.Token}
- */
-lunr.Token.prototype.update = function (fn) {
-  this.str = fn(this.str, this.metadata)
-  return this
-}
-
-/**
- * Creates a clone of this token. Optionally a function can be
- * applied to the cloned token.
- *
- * @param {lunr.Token~updateFunction} [fn] - An optional function to apply to the cloned token.
- * @returns {lunr.Token}
- */
-lunr.Token.prototype.clone = function (fn) {
-  fn = fn || function (s) { return s }
-  return new lunr.Token (fn(this.str, this.metadata), this.metadata)
-}
-/*!
- * lunr.tokenizer
- * Copyright (C) 2019 Oliver Nightingale
- */
-
-/**
- * A function for splitting a string into tokens ready to be inserted into
- * the search index. Uses `lunr.tokenizer.separator` to split strings, change
- * the value of this property to change how strings are split into tokens.
- *
- * This tokenizer will convert its parameter to a string by calling `toString` and
- * then will split this string on the character in `lunr.tokenizer.separator`.
- * Arrays will have their elements converted to strings and wrapped in a lunr.Token.
- *
- * Optional metadata can be passed to the tokenizer, this metadata will be cloned and
- * added as metadata to every token that is created from the object to be tokenized.
- *
- * @static
- * @param {?(string|object|object[])} obj - The object to convert into tokens
- * @param {?object} metadata - Optional metadata to associate with every token
- * @returns {lunr.Token[]}
- * @see {@link lunr.Pipeline}
- */
-lunr.tokenizer = function (obj, metadata) {
-  if (obj == null || obj == undefined) {
-    return []
-  }
-
-  if (Array.isArray(obj)) {
-    return obj.map(function (t) {
-      return new lunr.Token(
-        lunr.utils.asString(t).toLowerCase(),
-        lunr.utils.clone(metadata)
-      )
-    })
-  }
-
-  var str = obj.toString().toLowerCase(),
-      len = str.length,
-      tokens = []
-
-  for (var sliceEnd = 0, sliceStart = 0; sliceEnd <= len; sliceEnd++) {
-    var char = str.charAt(sliceEnd),
-        sliceLength = sliceEnd - sliceStart
-
-    if ((char.match(lunr.tokenizer.separator) || sliceEnd == len)) {
-
-      if (sliceLength > 0) {
-        var tokenMetadata = lunr.utils.clone(metadata) || {}
-        tokenMetadata["position"] = [sliceStart, sliceLength]
-        tokenMetadata["index"] = tokens.length
-
-        tokens.push(
-          new lunr.Token (
-            str.slice(sliceStart, sliceEnd),
-            tokenMetadata
-          )
-        )
-      }
-
-      sliceStart = sliceEnd + 1
-    }
-
-  }
-
-  return tokens
-}
-
-/**
- * The separator used to split a string into tokens. Override this property to change the behaviour of
- * `lunr.tokenizer` behaviour when tokenizing strings. By default this splits on whitespace and hyphens.
- *
- * @static
- * @see lunr.tokenizer
- */
-lunr.tokenizer.separator = /[\s\-]+/
-/*!
- * lunr.Pipeline
- * Copyright (C) 2019 Oliver Nightingale
- */
-
-/**
- * lunr.Pipelines maintain an ordered list of functions to be applied to all
- * tokens in documents entering the search index and queries being ran against
- * the index.
- *
- * An instance of lunr.Index created with the lunr shortcut will contain a
- * pipeline with a stop word filter and an English language stemmer. Extra
- * functions can be added before or after either of these functions or these
- * default functions can be removed.
- *
- * When run the pipeline will call each function in turn, passing a token, the
- * index of that token in the original list of all tokens and finally a list of
- * all the original tokens.
- *
- * The output of functions in the pipeline will be passed to the next function
- * in the pipeline. To exclude a token from entering the index the function
- * should return undefined, the rest of the pipeline will not be called with
- * this token.
- *
- * For serialisation of pipelines to work, all functions used in an instance of
- * a pipeline should be registered with lunr.Pipeline. Registered functions can
- * then be loaded. If trying to load a serialised pipeline that uses functions
- * that are not registered an error will be thrown.
- *
- * If not planning on serialising the pipeline then registering pipeline functions
- * is not necessary.
- *
- * @constructor
- */
-lunr.Pipeline = function () {
-  this._stack = []
-}
-
-lunr.Pipeline.registeredFunctions = Object.create(null)
-
-/**
- * A pipeline function maps lunr.Token to lunr.Token. A lunr.Token contains the token
- * string as well as all known metadata. A pipeline function can mutate the token string
- * or mutate (or add) metadata for a given token.
- *
- * A pipeline function can indicate that the passed token should be discarded by returning
- * null, undefined or an empty string. This token will not be passed to any downstream pipeline
- * functions and will not be added to the index.
- *
- * Multiple tokens can be returned by returning an array of tokens. Each token will be passed
- * to any downstream pipeline functions and all will returned tokens will be added to the index.
- *
- * Any number of pipeline functions may be chained together using a lunr.Pipeline.
- *
- * @interface lunr.PipelineFunction
- * @param {lunr.Token} token - A token from the document being processed.
- * @param {number} i - The index of this token in the complete list of tokens for this document/field.
- * @param {lunr.Token[]} tokens - All tokens for this document/field.
- * @returns {(?lunr.Token|lunr.Token[])}
- */
-
-/**
- * Register a function with the pipeline.
- *
- * Functions that are used in the pipeline should be registered if the pipeline
- * needs to be serialised, or a serialised pipeline needs to be loaded.
- *
- * Registering a function does not add it to a pipeline, functions must still be
- * added to instances of the pipeline for them to be used when running a pipeline.
- *
- * @param {lunr.PipelineFunction} fn - The function to check for.
- * @param {String} label - The label to register this function with
- */
-lunr.Pipeline.registerFunction = function (fn, label) {
-  if (label in this.registeredFunctions) {
-    lunr.utils.warn('Overwriting existing registered function: ' + label)
-  }
-
-  fn.label = label
-  lunr.Pipeline.registeredFunctions[fn.label] = fn
-}
-
-/**
- * Warns if the function is not registered as a Pipeline function.
- *
- * @param {lunr.PipelineFunction} fn - The function to check for.
- * @private
- */
-lunr.Pipeline.warnIfFunctionNotRegistered = function (fn) {
-  var isRegistered = fn.label && (fn.label in this.registeredFunctions)
-
-  if (!isRegistered) {
-    lunr.utils.warn('Function is not registered with pipeline. This may cause problems when serialising the index.\n', fn)
-  }
-}
-
-/**
- * Loads a previously serialised pipeline.
- *
- * All functions to be loaded must already be registered with lunr.Pipeline.
- * If any function from the serialised data has not been registered then an
- * error will be thrown.
- *
- * @param {Object} serialised - The serialised pipeline to load.
- * @returns {lunr.Pipeline}
- */
-lunr.Pipeline.load = function (serialised) {
-  var pipeline = new lunr.Pipeline
-
-  serialised.forEach(function (fnName) {
-    var fn = lunr.Pipeline.registeredFunctions[fnName]
-
-    if (fn) {
-      pipeline.add(fn)
-    } else {
-      throw new Error('Cannot load unregistered function: ' + fnName)
-    }
-  })
-
-  return pipeline
-}
-
-/**
- * Adds new functions to the end of the pipeline.
- *
- * Logs a warning if the function has not been registered.
- *
- * @param {lunr.PipelineFunction[]} functions - Any number of functions to add to the pipeline.
- */
-lunr.Pipeline.prototype.add = function () {
-  var fns = Array.prototype.slice.call(arguments)
-
-  fns.forEach(function (fn) {
-    lunr.Pipeline.warnIfFunctionNotRegistered(fn)
-    this._stack.push(fn)
-  }, this)
-}
-
-/**
- * Adds a single function after a function that already exists in the
- * pipeline.
- *
- * Logs a warning if the function has not been registered.
- *
- * @param {lunr.PipelineFunction} existingFn - A function that already exists in the pipeline.
- * @param {lunr.PipelineFunction} newFn - The new function to add to the pipeline.
- */
-lunr.Pipeline.prototype.after = function (existingFn, newFn) {
-  lunr.Pipeline.warnIfFunctionNotRegistered(newFn)
-
-  var pos = this._stack.indexOf(existingFn)
-  if (pos == -1) {
-    throw new Error('Cannot find existingFn')
-  }
-
-  pos = pos + 1
-  this._stack.splice(pos, 0, newFn)
-}
-
-/**
- * Adds a single function before a function that already exists in the
- * pipeline.
- *
- * Logs a warning if the function has not been registered.
- *
- * @param {lunr.PipelineFunction} existingFn - A function that already exists in the pipeline.
- * @param {lunr.PipelineFunction} newFn - The new function to add to the pipeline.
- */
-lunr.Pipeline.prototype.before = function (existingFn, newFn) {
-  lunr.Pipeline.warnIfFunctionNotRegistered(newFn)
-
-  var pos = this._stack.indexOf(existingFn)
-  if (pos == -1) {
-    throw new Error('Cannot find existingFn')
-  }
-
-  this._stack.splice(pos, 0, newFn)
-}
-
-/**
- * Removes a function from the pipeline.
- *
- * @param {lunr.PipelineFunction} fn The function to remove from the pipeline.
- */
-lunr.Pipeline.prototype.remove = function (fn) {
-  var pos = this._stack.indexOf(fn)
-  if (pos == -1) {
-    return
-  }
-
-  this._stack.splice(pos, 1)
-}
-
-/**
- * Runs the current list of functions that make up the pipeline against the
- * passed tokens.
- *
- * @param {Array} tokens The tokens to run through the pipeline.
- * @returns {Array}
- */
-lunr.Pipeline.prototype.run = function (tokens) {
-  var stackLength = this._stack.length
-
-  for (var i = 0; i < stackLength; i++) {
-    var fn = this._stack[i]
-    var memo = []
-
-    for (var j = 0; j < tokens.length; j++) {
-      var result = fn(tokens[j], j, tokens)
-
-      if (result === null || result === void 0 || result === '') continue
-
-      if (Array.isArray(result)) {
-        for (var k = 0; k < result.length; k++) {
-          memo.push(result[k])
-        }
-      } else {
-        memo.push(result)
-      }
-    }
-
-    tokens = memo
-  }
-
-  return tokens
-}
-
-/**
- * Convenience method for passing a string through a pipeline and getting
- * strings out. This method takes care of wrapping the passed string in a
- * token and mapping the resulting tokens back to strings.
- *
- * @param {string} str - The string to pass through the pipeline.
- * @param {?object} metadata - Optional metadata to associate with the token
- * passed to the pipeline.
- * @returns {string[]}
- */
-lunr.Pipeline.prototype.runString = function (str, metadata) {
-  var token = new lunr.Token (str, metadata)
-
-  return this.run([token]).map(function (t) {
-    return t.toString()
-  })
-}
-
-/**
- * Resets the pipeline by removing any existing processors.
- *
- */
-lunr.Pipeline.prototype.reset = function () {
-  this._stack = []
-}
-
-/**
- * Returns a representation of the pipeline ready for serialisation.
- *
- * Logs a warning if the function has not been registered.
- *
- * @returns {Array}
- */
-lunr.Pipeline.prototype.toJSON = function () {
-  return this._stack.map(function (fn) {
-    lunr.Pipeline.warnIfFunctionNotRegistered(fn)
-
-    return fn.label
-  })
-}
-/*!
- * lunr.Vector
- * Copyright (C) 2019 Oliver Nightingale
- */
-
-/**
- * A vector is used to construct the vector space of documents and queries. These
- * vectors support operations to determine the similarity between two documents or
- * a document and a query.
- *
- * Normally no parameters are required for initializing a vector, but in the case of
- * loading a previously dumped vector the raw elements can be provided to the constructor.
- *
- * For performance reasons vectors are implemented with a flat array, where an elements
- * index is immediately followed by its value. E.g. [index, value, index, value]. This
- * allows the underlying array to be as sparse as possible and still offer decent
- * performance when being used for vector calculations.
- *
- * @constructor
- * @param {Number[]} [elements] - The flat list of element index and element value pairs.
- */
-lunr.Vector = function (elements) {
-  this._magnitude = 0
-  this.elements = elements || []
-}
-
-
-/**
- * Calculates the position within the vector to insert a given index.
- *
- * This is used internally by insert and upsert. If there are duplicate indexes then
- * the position is returned as if the value for that index were to be updated, but it
- * is the callers responsibility to check whether there is a duplicate at that index
- *
- * @param {Number} insertIdx - The index at which the element should be inserted.
- * @returns {Number}
- */
-lunr.Vector.prototype.positionForIndex = function (index) {
-  // For an empty vector the tuple can be inserted at the beginning
-  if (this.elements.length == 0) {
-    return 0
-  }
-
-  var start = 0,
-      end = this.elements.length / 2,
-      sliceLength = end - start,
-      pivotPoint = Math.floor(sliceLength / 2),
-      pivotIndex = this.elements[pivotPoint * 2]
-
-  while (sliceLength > 1) {
-    if (pivotIndex < index) {
-      start = pivotPoint
-    }
-
-    if (pivotIndex > index) {
-      end = pivotPoint
-    }
-
-    if (pivotIndex == index) {
-      break
-    }
-
-    sliceLength = end - start
-    pivotPoint = start + Math.floor(sliceLength / 2)
-    pivotIndex = this.elements[pivotPoint * 2]
-  }
-
-  if (pivotIndex == index) {
-    return pivotPoint * 2
-  }
-
-  if (pivotIndex > index) {
-    return pivotPoint * 2
-  }
-
-  if (pivotIndex < index) {
-    return (pivotPoint + 1) * 2
-  }
-}
-
-/**
- * Inserts an element at an index within the vector.
- *
- * Does not allow duplicates, will throw an error if there is already an entry
- * for this index.
- *
- * @param {Number} insertIdx - The index at which the element should be inserted.
- * @param {Number} val - The value to be inserted into the vector.
- */
-lunr.Vector.prototype.insert = function (insertIdx, val) {
-  this.upsert(insertIdx, val, function () {
-    throw "duplicate index"
-  })
-}
-
-/**
- * Inserts or updates an existing index within the vector.
- *
- * @param {Number} insertIdx - The index at which the element should be inserted.
- * @param {Number} val - The value to be inserted into the vector.
- * @param {function} fn - A function that is called for updates, the existing value and the
- * requested value are passed as arguments
- */
-lunr.Vector.prototype.upsert = function (insertIdx, val, fn) {
-  this._magnitude = 0
-  var position = this.positionForIndex(insertIdx)
-
-  if (this.elements[position] == insertIdx) {
-    this.elements[position + 1] = fn(this.elements[position + 1], val)
-  } else {
-    this.elements.splice(position, 0, insertIdx, val)
-  }
-}
-
-/**
- * Calculates the magnitude of this vector.
- *
- * @returns {Number}
- */
-lunr.Vector.prototype.magnitude = function () {
-  if (this._magnitude) return this._magnitude
-
-  var sumOfSquares = 0,
-      elementsLength = this.elements.length
-
-  for (var i = 1; i < elementsLength; i += 2) {
-    var val = this.elements[i]
-    sumOfSquares += val * val
-  }
-
-  return this._magnitude = Math.sqrt(sumOfSquares)
-}
-
-/**
- * Calculates the dot product of this vector and another vector.
- *
- * @param {lunr.Vector} otherVector - The vector to compute the dot product with.
- * @returns {Number}
- */
-lunr.Vector.prototype.dot = function (otherVector) {
-  var dotProduct = 0,
-      a = this.elements, b = otherVector.elements,
-      aLen = a.length, bLen = b.length,
-      aVal = 0, bVal = 0,
-      i = 0, j = 0
-
-  while (i < aLen && j < bLen) {
-    aVal = a[i], bVal = b[j]
-    if (aVal < bVal) {
-      i += 2
-    } else if (aVal > bVal) {
-      j += 2
-    } else if (aVal == bVal) {
-      dotProduct += a[i + 1] * b[j + 1]
-      i += 2
-      j += 2
-    }
-  }
-
-  return dotProduct
-}
-
-/**
- * Calculates the similarity between this vector and another vector.
- *
- * @param {lunr.Vector} otherVector - The other vector to calculate the
- * similarity with.
- * @returns {Number}
- */
-lunr.Vector.prototype.similarity = function (otherVector) {
-  return this.dot(otherVector) / this.magnitude() || 0
-}
-
-/**
- * Converts the vector to an array of the elements within the vector.
- *
- * @returns {Number[]}
- */
-lunr.Vector.prototype.toArray = function () {
-  var output = new Array (this.elements.length / 2)
-
-  for (var i = 1, j = 0; i < this.elements.length; i += 2, j++) {
-    output[j] = this.elements[i]
-  }
-
-  return output
-}
-
-/**
- * A JSON serializable representation of the vector.
- *
- * @returns {Number[]}
- */
-lunr.Vector.prototype.toJSON = function () {
-  return this.elements
-}
-/* eslint-disable */
-/*!
- * lunr.stemmer
- * Copyright (C) 2019 Oliver Nightingale
- * Includes code from - http://tartarus.org/~martin/PorterStemmer/js.txt
- */
-
-/**
- * lunr.stemmer is an english language stemmer, this is a JavaScript
- * implementation of the PorterStemmer taken from http://tartarus.org/~martin
- *
- * @static
- * @implements {lunr.PipelineFunction}
- * @param {lunr.Token} token - The string to stem
- * @returns {lunr.Token}
- * @see {@link lunr.Pipeline}
- * @function
- */
-lunr.stemmer = (function(){
-  var step2list = {
-      "ational" : "ate",
-      "tional" : "tion",
-      "enci" : "ence",
-      "anci" : "ance",
-      "izer" : "ize",
-      "bli" : "ble",
-      "alli" : "al",
-      "entli" : "ent",
-      "eli" : "e",
-      "ousli" : "ous",
-      "ization" : "ize",
-      "ation" : "ate",
-      "ator" : "ate",
-      "alism" : "al",
-      "iveness" : "ive",
-      "fulness" : "ful",
-      "ousness" : "ous",
-      "aliti" : "al",
-      "iviti" : "ive",
-      "biliti" : "ble",
-      "logi" : "log"
-    },
-
-    step3list = {
-      "icate" : "ic",
-      "ative" : "",
-      "alize" : "al",
-      "iciti" : "ic",
-      "ical" : "ic",
-      "ful" : "",
-      "ness" : ""
-    },
-
-    c = "[^aeiou]",          // consonant
-    v = "[aeiouy]",          // vowel
-    C = c + "[^aeiouy]*",    // consonant sequence
-    V = v + "[aeiou]*",      // vowel sequence
-
-    mgr0 = "^(" + C + ")?" + V + C,               // [C]VC... is m>0
-    meq1 = "^(" + C + ")?" + V + C + "(" + V + ")?$",  // [C]VC[V] is m=1
-    mgr1 = "^(" + C + ")?" + V + C + V + C,       // [C]VCVC... is m>1
-    s_v = "^(" + C + ")?" + v;                   // vowel in stem
-
-  var re_mgr0 = new RegExp(mgr0);
-  var re_mgr1 = new RegExp(mgr1);
-  var re_meq1 = new RegExp(meq1);
-  var re_s_v = new RegExp(s_v);
-
-  var re_1a = /^(.+?)(ss|i)es$/;
-  var re2_1a = /^(.+?)([^s])s$/;
-  var re_1b = /^(.+?)eed$/;
-  var re2_1b = /^(.+?)(ed|ing)$/;
-  var re_1b_2 = /.$/;
-  var re2_1b_2 = /(at|bl|iz)$/;
-  var re3_1b_2 = new RegExp("([^aeiouylsz])\\1$");
-  var re4_1b_2 = new RegExp("^" + C + v + "[^aeiouwxy]$");
-
-  var re_1c = /^(.+?[^aeiou])y$/;
-  var re_2 = /^(.+?)(ational|tional|enci|anci|izer|bli|alli|entli|eli|ousli|ization|ation|ator|alism|iveness|fulness|ousness|aliti|iviti|biliti|logi)$/;
-
-  var re_3 = /^(.+?)(icate|ative|alize|iciti|ical|ful|ness)$/;
-
-  var re_4 = /^(.+?)(al|ance|ence|er|ic|able|ible|ant|ement|ment|ent|ou|ism|ate|iti|ous|ive|ize)$/;
-  var re2_4 = /^(.+?)(s|t)(ion)$/;
-
-  var re_5 = /^(.+?)e$/;
-  var re_5_1 = /ll$/;
-  var re3_5 = new RegExp("^" + C + v + "[^aeiouwxy]$");
-
-  var porterStemmer = function porterStemmer(w) {
-    var stem,
-      suffix,
-      firstch,
-      re,
-      re2,
-      re3,
-      re4;
-
-    if (w.length < 3) { return w; }
-
-    firstch = w.substr(0,1);
-    if (firstch == "y") {
-      w = firstch.toUpperCase() + w.substr(1);
-    }
-
-    // Step 1a
-    re = re_1a
-    re2 = re2_1a;
-
-    if (re.test(w)) { w = w.replace(re,"$1$2"); }
-    else if (re2.test(w)) { w = w.replace(re2,"$1$2"); }
-
-    // Step 1b
-    re = re_1b;
-    re2 = re2_1b;
-    if (re.test(w)) {
-      var fp = re.exec(w);
-      re = re_mgr0;
-      if (re.test(fp[1])) {
-        re = re_1b_2;
-        w = w.replace(re,"");
-      }
-    } else if (re2.test(w)) {
-      var fp = re2.exec(w);
-      stem = fp[1];
-      re2 = re_s_v;
-      if (re2.test(stem)) {
-        w = stem;
-        re2 = re2_1b_2;
-        re3 = re3_1b_2;
-        re4 = re4_1b_2;
-        if (re2.test(w)) { w = w + "e"; }
-        else if (re3.test(w)) { re = re_1b_2; w = w.replace(re,""); }
-        else if (re4.test(w)) { w = w + "e"; }
-      }
-    }
-
-    // Step 1c - replace suffix y or Y by i if preceded by a non-vowel which is not the first letter of the word (so cry -> cri, by -> by, say -> say)
-    re = re_1c;
-    if (re.test(w)) {
-      var fp = re.exec(w);
-      stem = fp[1];
-      w = stem + "i";
-    }
-
-    // Step 2
-    re = re_2;
-    if (re.test(w)) {
-      var fp = re.exec(w);
-      stem = fp[1];
-      suffix = fp[2];
-      re = re_mgr0;
-      if (re.test(stem)) {
-        w = stem + step2list[suffix];
-      }
-    }
-
-    // Step 3
-    re = re_3;
-    if (re.test(w)) {
-      var fp = re.exec(w);
-      stem = fp[1];
-      suffix = fp[2];
-      re = re_mgr0;
-      if (re.test(stem)) {
-        w = stem + step3list[suffix];
-      }
-    }
-
-    // Step 4
-    re = re_4;
-    re2 = re2_4;
-    if (re.test(w)) {
-      var fp = re.exec(w);
-      stem = fp[1];
-      re = re_mgr1;
-      if (re.test(stem)) {
-        w = stem;
-      }
-    } else if (re2.test(w)) {
-      var fp = re2.exec(w);
-      stem = fp[1] + fp[2];
-      re2 = re_mgr1;
-      if (re2.test(stem)) {
-        w = stem;
-      }
-    }
-
-    // Step 5
-    re = re_5;
-    if (re.test(w)) {
-      var fp = re.exec(w);
-      stem = fp[1];
-      re = re_mgr1;
-      re2 = re_meq1;
-      re3 = re3_5;
-      if (re.test(stem) || (re2.test(stem) && !(re3.test(stem)))) {
-        w = stem;
-      }
-    }
-
-    re = re_5_1;
-    re2 = re_mgr1;
-    if (re.test(w) && re2.test(w)) {
-      re = re_1b_2;
-      w = w.replace(re,"");
-    }
-
-    // and turn initial Y back to y
-
-    if (firstch == "y") {
-      w = firstch.toLowerCase() + w.substr(1);
-    }
-
-    return w;
-  };
-
-  return function (token) {
-    return token.update(porterStemmer);
-  }
-})();
-
-lunr.Pipeline.registerFunction(lunr.stemmer, 'stemmer')
-/*!
- * lunr.stopWordFilter
- * Copyright (C) 2019 Oliver Nightingale
- */
-
-/**
- * lunr.generateStopWordFilter builds a stopWordFilter function from the provided
- * list of stop words.
- *
- * The built in lunr.stopWordFilter is built using this generator and can be used
- * to generate custom stopWordFilters for applications or non English languages.
- *
- * @function
- * @param {Array} token The token to pass through the filter
- * @returns {lunr.PipelineFunction}
- * @see lunr.Pipeline
- * @see lunr.stopWordFilter
- */
-lunr.generateStopWordFilter = function (stopWords) {
-  var words = stopWords.reduce(function (memo, stopWord) {
-    memo[stopWord] = stopWord
-    return memo
-  }, {})
-
-  return function (token) {
-    if (token && words[token.toString()] !== token.toString()) return token
-  }
-}
-
-/**
- * lunr.stopWordFilter is an English language stop word list filter, any words
- * contained in the list will not be passed through the filter.
- *
- * This is intended to be used in the Pipeline. If the token does not pass the
- * filter then undefined will be returned.
- *
- * @function
- * @implements {lunr.PipelineFunction}
- * @params {lunr.Token} token - A token to check for being a stop word.
- * @returns {lunr.Token}
- * @see {@link lunr.Pipeline}
- */
-lunr.stopWordFilter = lunr.generateStopWordFilter([
-  'a',
-  'able',
-  'about',
-  'across',
-  'after',
-  'all',
-  'almost',
-  'also',
-  'am',
-  'among',
-  'an',
-  'and',
-  'any',
-  'are',
-  'as',
-  'at',
-  'be',
-  'because',
-  'been',
-  'but',
-  'by',
-  'can',
-  'cannot',
-  'could',
-  'dear',
-  'did',
-  'do',
-  'does',
-  'either',
-  'else',
-  'ever',
-  'every',
-  'for',
-  'from',
-  'get',
-  'got',
-  'had',
-  'has',
-  'have',
-  'he',
-  'her',
-  'hers',
-  'him',
-  'his',
-  'how',
-  'however',
-  'i',
-  'if',
-  'in',
-  'into',
-  'is',
-  'it',
-  'its',
-  'just',
-  'least',
-  'let',
-  'like',
-  'likely',
-  'may',
-  'me',
-  'might',
-  'most',
-  'must',
-  'my',
-  'neither',
-  'no',
-  'nor',
-  'not',
-  'of',
-  'off',
-  'often',
-  'on',
-  'only',
-  'or',
-  'other',
-  'our',
-  'own',
-  'rather',
-  'said',
-  'say',
-  'says',
-  'she',
-  'should',
-  'since',
-  'so',
-  'some',
-  'than',
-  'that',
-  'the',
-  'their',
-  'them',
-  'then',
-  'there',
-  'these',
-  'they',
-  'this',
-  'tis',
-  'to',
-  'too',
-  'twas',
-  'us',
-  'wants',
-  'was',
-  'we',
-  'were',
-  'what',
-  'when',
-  'where',
-  'which',
-  'while',
-  'who',
-  'whom',
-  'why',
-  'will',
-  'with',
-  'would',
-  'yet',
-  'you',
-  'your'
-])
-
-lunr.Pipeline.registerFunction(lunr.stopWordFilter, 'stopWordFilter')
-/*!
- * lunr.trimmer
- * Copyright (C) 2019 Oliver Nightingale
- */
-
-/**
- * lunr.trimmer is a pipeline function for trimming non word
- * characters from the beginning and end of tokens before they
- * enter the index.
- *
- * This implementation may not work correctly for non latin
- * characters and should either be removed or adapted for use
- * with languages with non-latin characters.
- *
- * @static
- * @implements {lunr.PipelineFunction}
- * @param {lunr.Token} token The token to pass through the filter
- * @returns {lunr.Token}
- * @see lunr.Pipeline
- */
-lunr.trimmer = function (token) {
-  return token.update(function (s) {
-    return s.replace(/^\W+/, '').replace(/\W+$/, '')
-  })
-}
-
-lunr.Pipeline.registerFunction(lunr.trimmer, 'trimmer')
-/*!
- * lunr.TokenSet
- * Copyright (C) 2019 Oliver Nightingale
- */
-
-/**
- * A token set is used to store the unique list of all tokens
- * within an index. Token sets are also used to represent an
- * incoming query to the index, this query token set and index
- * token set are then intersected to find which tokens to look
- * up in the inverted index.
- *
- * A token set can hold multiple tokens, as in the case of the
- * index token set, or it can hold a single token as in the
- * case of a simple query token set.
- *
- * Additionally token sets are used to perform wildcard matching.
- * Leading, contained and trailing wildcards are supported, and
- * from this edit distance matching can also be provided.
- *
- * Token sets are implemented as a minimal finite state automata,
- * where both common prefixes and suffixes are shared between tokens.
- * This helps to reduce the space used for storing the token set.
- *
- * @constructor
- */
-lunr.TokenSet = function () {
-  this.final = false
-  this.edges = {}
-  this.id = lunr.TokenSet._nextId
-  lunr.TokenSet._nextId += 1
-}
-
-/**
- * Keeps track of the next, auto increment, identifier to assign
- * to a new tokenSet.
- *
- * TokenSets require a unique identifier to be correctly minimised.
- *
- * @private
- */
-lunr.TokenSet._nextId = 1
-
-/**
- * Creates a TokenSet instance from the given sorted array of words.
- *
- * @param {String[]} arr - A sorted array of strings to create the set from.
- * @returns {lunr.TokenSet}
- * @throws Will throw an error if the input array is not sorted.
- */
-lunr.TokenSet.fromArray = function (arr) {
-  var builder = new lunr.TokenSet.Builder
-
-  for (var i = 0, len = arr.length; i < len; i++) {
-    builder.insert(arr[i])
-  }
-
-  builder.finish()
-  return builder.root
-}
-
-/**
- * Creates a token set from a query clause.
- *
- * @private
- * @param {Object} clause - A single clause from lunr.Query.
- * @param {string} clause.term - The query clause term.
- * @param {number} [clause.editDistance] - The optional edit distance for the term.
- * @returns {lunr.TokenSet}
- */
-lunr.TokenSet.fromClause = function (clause) {
-  if ('editDistance' in clause) {
-    return lunr.TokenSet.fromFuzzyString(clause.term, clause.editDistance)
-  } else {
-    return lunr.TokenSet.fromString(clause.term)
-  }
-}
-
-/**
- * Creates a token set representing a single string with a specified
- * edit distance.
- *
- * Insertions, deletions, substitutions and transpositions are each
- * treated as an edit distance of 1.
- *
- * Increasing the allowed edit distance will have a dramatic impact
- * on the performance of both creating and intersecting these TokenSets.
- * It is advised to keep the edit distance less than 3.
- *
- * @param {string} str - The string to create the token set from.
- * @param {number} editDistance - The allowed edit distance to match.
- * @returns {lunr.Vector}
- */
-lunr.TokenSet.fromFuzzyString = function (str, editDistance) {
-  var root = new lunr.TokenSet
-
-  var stack = [{
-    node: root,
-    editsRemaining: editDistance,
-    str: str
-  }]
-
-  while (stack.length) {
-    var frame = stack.pop()
-
-    // no edit
-    if (frame.str.length > 0) {
-      var char = frame.str.charAt(0),
-          noEditNode
-
-      if (char in frame.node.edges) {
-        noEditNode = frame.node.edges[char]
-      } else {
-        noEditNode = new lunr.TokenSet
-        frame.node.edges[char] = noEditNode
-      }
-
-      if (frame.str.length == 1) {
-        noEditNode.final = true
-      }
-
-      stack.push({
-        node: noEditNode,
-        editsRemaining: frame.editsRemaining,
-        str: frame.str.slice(1)
-      })
-    }
-
-    if (frame.editsRemaining == 0) {
-      continue
-    }
-
-    // insertion
-    if ("*" in frame.node.edges) {
-      var insertionNode = frame.node.edges["*"]
-    } else {
-      var insertionNode = new lunr.TokenSet
-      frame.node.edges["*"] = insertionNode
-    }
-
-    if (frame.str.length == 0) {
-      insertionNode.final = true
-    }
-
-    stack.push({
-      node: insertionNode,
-      editsRemaining: frame.editsRemaining - 1,
-      str: frame.str
-    })
-
-    // deletion
-    // can only do a deletion if we have enough edits remaining
-    // and if there are characters left to delete in the string
-    if (frame.str.length > 1) {
-      stack.push({
-        node: frame.node,
-        editsRemaining: frame.editsRemaining - 1,
-        str: frame.str.slice(1)
-      })
-    }
-
-    // deletion
-    // just removing the last character from the str
-    if (frame.str.length == 1) {
-      frame.node.final = true
-    }
-
-    // substitution
-    // can only do a substitution if we have enough edits remaining
-    // and if there are characters left to substitute
-    if (frame.str.length >= 1) {
-      if ("*" in frame.node.edges) {
-        var substitutionNode = frame.node.edges["*"]
-      } else {
-        var substitutionNode = new lunr.TokenSet
-        frame.node.edges["*"] = substitutionNode
-      }
-
-      if (frame.str.length == 1) {
-        substitutionNode.final = true
-      }
-
-      stack.push({
-        node: substitutionNode,
-        editsRemaining: frame.editsRemaining - 1,
-        str: frame.str.slice(1)
-      })
-    }
-
-    // transposition
-    // can only do a transposition if there are edits remaining
-    // and there are enough characters to transpose
-    if (frame.str.length > 1) {
-      var charA = frame.str.charAt(0),
-          charB = frame.str.charAt(1),
-          transposeNode
-
-      if (charB in frame.node.edges) {
-        transposeNode = frame.node.edges[charB]
-      } else {
-        transposeNode = new lunr.TokenSet
-        frame.node.edges[charB] = transposeNode
-      }
-
-      if (frame.str.length == 1) {
-        transposeNode.final = true
-      }
-
-      stack.push({
-        node: transposeNode,
-        editsRemaining: frame.editsRemaining - 1,
-        str: charA + frame.str.slice(2)
-      })
-    }
-  }
-
-  return root
-}
-
-/**
- * Creates a TokenSet from a string.
- *
- * The string may contain one or more wildcard characters (*)
- * that will allow wildcard matching when intersecting with
- * another TokenSet.
- *
- * @param {string} str - The string to create a TokenSet from.
- * @returns {lunr.TokenSet}
- */
-lunr.TokenSet.fromString = function (str) {
-  var node = new lunr.TokenSet,
-      root = node
-
-  /*
-   * Iterates through all characters within the passed string
-   * appending a node for each character.
-   *
-   * When a wildcard character is found then a self
-   * referencing edge is introduced to continually match
-   * any number of any characters.
-   */
-  for (var i = 0, len = str.length; i < len; i++) {
-    var char = str[i],
-        final = (i == len - 1)
-
-    if (char == "*") {
-      node.edges[char] = node
-      node.final = final
-
-    } else {
-      var next = new lunr.TokenSet
-      next.final = final
-
-      node.edges[char] = next
-      node = next
-    }
-  }
-
-  return root
-}
-
-/**
- * Converts this TokenSet into an array of strings
- * contained within the TokenSet.
- *
- * This is not intended to be used on a TokenSet that
- * contains wildcards, in these cases the results are
- * undefined and are likely to cause an infinite loop.
- *
- * @returns {string[]}
- */
-lunr.TokenSet.prototype.toArray = function () {
-  var words = []
-
-  var stack = [{
-    prefix: "",
-    node: this
-  }]
-
-  while (stack.length) {
-    var frame = stack.pop(),
-        edges = Object.keys(frame.node.edges),
-        len = edges.length
-
-    if (frame.node.final) {
-      /* In Safari, at this point the prefix is sometimes corrupted, see:
-       * https://github.com/olivernn/lunr.js/issues/279 Calling any
-       * String.prototype method forces Safari to "cast" this string to what
-       * it's supposed to be, fixing the bug. */
-      frame.prefix.charAt(0)
-      words.push(frame.prefix)
-    }
-
-    for (var i = 0; i < len; i++) {
-      var edge = edges[i]
-
-      stack.push({
-        prefix: frame.prefix.concat(edge),
-        node: frame.node.edges[edge]
-      })
-    }
-  }
-
-  return words
-}
-
-/**
- * Generates a string representation of a TokenSet.
- *
- * This is intended to allow TokenSets to be used as keys
- * in objects, largely to aid the construction and minimisation
- * of a TokenSet. As such it is not designed to be a human
- * friendly representation of the TokenSet.
- *
- * @returns {string}
- */
-lunr.TokenSet.prototype.toString = function () {
-  // NOTE: Using Object.keys here as this.edges is very likely
-  // to enter 'hash-mode' with many keys being added
-  //
-  // avoiding a for-in loop here as it leads to the function
-  // being de-optimised (at least in V8). From some simple
-  // benchmarks the performance is comparable, but allowing
-  // V8 to optimize may mean easy performance wins in the future.
-
-  if (this._str) {
-    return this._str
-  }
-
-  var str = this.final ? '1' : '0',
-      labels = Object.keys(this.edges).sort(),
-      len = labels.length
-
-  for (var i = 0; i < len; i++) {
-    var label = labels[i],
-        node = this.edges[label]
-
-    str = str + label + node.id
-  }
-
-  return str
-}
-
-/**
- * Returns a new TokenSet that is the intersection of
- * this TokenSet and the passed TokenSet.
- *
- * This intersection will take into account any wildcards
- * contained within the TokenSet.
- *
- * @param {lunr.TokenSet} b - An other TokenSet to intersect with.
- * @returns {lunr.TokenSet}
- */
-lunr.TokenSet.prototype.intersect = function (b) {
-  var output = new lunr.TokenSet,
-      frame = undefined
-
-  var stack = [{
-    qNode: b,
-    output: output,
-    node: this
-  }]
-
-  while (stack.length) {
-    frame = stack.pop()
-
-    // NOTE: As with the #toString method, we are using
-    // Object.keys and a for loop instead of a for-in loop
-    // as both of these objects enter 'hash' mode, causing
-    // the function to be de-optimised in V8
-    var qEdges = Object.keys(frame.qNode.edges),
-        qLen = qEdges.length,
-        nEdges = Object.keys(frame.node.edges),
-        nLen = nEdges.length
-
-    for (var q = 0; q < qLen; q++) {
-      var qEdge = qEdges[q]
-
-      for (var n = 0; n < nLen; n++) {
-        var nEdge = nEdges[n]
-
-        if (nEdge == qEdge || qEdge == '*') {
-          var node = frame.node.edges[nEdge],
-              qNode = frame.qNode.edges[qEdge],
-              final = node.final && qNode.final,
-              next = undefined
-
-          if (nEdge in frame.output.edges) {
-            // an edge already exists for this character
-            // no need to create a new node, just set the finality
-            // bit unless this node is already final
-            next = frame.output.edges[nEdge]
-            next.final = next.final || final
-
-          } else {
-            // no edge exists yet, must create one
-            // set the finality bit and insert it
-            // into the output
-            next = new lunr.TokenSet
-            next.final = final
-            frame.output.edges[nEdge] = next
-          }
-
-          stack.push({
-            qNode: qNode,
-            output: next,
-            node: node
-          })
-        }
-      }
-    }
-  }
-
-  return output
-}
-lunr.TokenSet.Builder = function () {
-  this.previousWord = ""
-  this.root = new lunr.TokenSet
-  this.uncheckedNodes = []
-  this.minimizedNodes = {}
-}
-
-lunr.TokenSet.Builder.prototype.insert = function (word) {
-  var node,
-      commonPrefix = 0
-
-  if (word < this.previousWord) {
-    throw new Error ("Out of order word insertion")
-  }
-
-  for (var i = 0; i < word.length && i < this.previousWord.length; i++) {
-    if (word[i] != this.previousWord[i]) break
-    commonPrefix++
-  }
-
-  this.minimize(commonPrefix)
-
-  if (this.uncheckedNodes.length == 0) {
-    node = this.root
-  } else {
-    node = this.uncheckedNodes[this.uncheckedNodes.length - 1].child
-  }
-
-  for (var i = commonPrefix; i < word.length; i++) {
-    var nextNode = new lunr.TokenSet,
-        char = word[i]
-
-    node.edges[char] = nextNode
-
-    this.uncheckedNodes.push({
-      parent: node,
-      char: char,
-      child: nextNode
-    })
-
-    node = nextNode
-  }
-
-  node.final = true
-  this.previousWord = word
-}
-
-lunr.TokenSet.Builder.prototype.finish = function () {
-  this.minimize(0)
-}
-
-lunr.TokenSet.Builder.prototype.minimize = function (downTo) {
-  for (var i = this.uncheckedNodes.length - 1; i >= downTo; i--) {
-    var node = this.uncheckedNodes[i],
-        childKey = node.child.toString()
-
-    if (childKey in this.minimizedNodes) {
-      node.parent.edges[node.char] = this.minimizedNodes[childKey]
-    } else {
-      // Cache the key for this node since
-      // we know it can't change anymore
-      node.child._str = childKey
-
-      this.minimizedNodes[childKey] = node.child
-    }
-
-    this.uncheckedNodes.pop()
-  }
-}
-/*!
- * lunr.Index
- * Copyright (C) 2019 Oliver Nightingale
- */
-
-/**
- * An index contains the built index of all documents and provides a query interface
- * to the index.
- *
- * Usually instances of lunr.Index will not be created using this constructor, instead
- * lunr.Builder should be used to construct new indexes, or lunr.Index.load should be
- * used to load previously built and serialized indexes.
- *
- * @constructor
- * @param {Object} attrs - The attributes of the built search index.
- * @param {Object} attrs.invertedIndex - An index of term/field to document reference.
- * @param {Object<string, lunr.Vector>} attrs.fieldVectors - Field vectors
- * @param {lunr.TokenSet} attrs.tokenSet - An set of all corpus tokens.
- * @param {string[]} attrs.fields - The names of indexed document fields.
- * @param {lunr.Pipeline} attrs.pipeline - The pipeline to use for search terms.
- */
-lunr.Index = function (attrs) {
-  this.invertedIndex = attrs.invertedIndex
-  this.fieldVectors = attrs.fieldVectors
-  this.tokenSet = attrs.tokenSet
-  this.fields = attrs.fields
-  this.pipeline = attrs.pipeline
-}
-
-/**
- * A result contains details of a document matching a search query.
- * @typedef {Object} lunr.Index~Result
- * @property {string} ref - The reference of the document this result represents.
- * @property {number} score - A number between 0 and 1 representing how similar this document is to the query.
- * @property {lunr.MatchData} matchData - Contains metadata about this match including which term(s) caused the match.
- */
-
-/**
- * Although lunr provides the ability to create queries using lunr.Query, it also provides a simple
- * query language which itself is parsed into an instance of lunr.Query.
- *
- * For programmatically building queries it is advised to directly use lunr.Query, the query language
- * is best used for human entered text rather than program generated text.
- *
- * At its simplest queries can just be a single term, e.g. `hello`, multiple terms are also supported
- * and will be combined with OR, e.g `hello world` will match documents that contain either 'hello'
- * or 'world', though those that contain both will rank higher in the results.
- *
- * Wildcards can be included in terms to match one or more unspecified characters, these wildcards can
- * be inserted anywhere within the term, and more than one wildcard can exist in a single term. Adding
- * wildcards will increase the number of documents that will be found but can also have a negative
- * impact on query performance, especially with wildcards at the beginning of a term.
- *
- * Terms can be restricted to specific fields, e.g. `title:hello`, only documents with the term
- * hello in the title field will match this query. Using a field not present in the index will lead
- * to an error being thrown.
- *
- * Modifiers can also be added to terms, lunr supports edit distance and boost modifiers on terms. A term
- * boost will make documents matching that term score higher, e.g. `foo^5`. Edit distance is also supported
- * to provide fuzzy matching, e.g. 'hello~2' will match documents with hello with an edit distance of 2.
- * Avoid large values for edit distance to improve query performance.
- *
- * Each term also supports a presence modifier. By default a term's presence in document is optional, however
- * this can be changed to either required or prohibited. For a term's presence to be required in a document the
- * term should be prefixed with a '+', e.g. `+foo bar` is a search for documents that must contain 'foo' and
- * optionally contain 'bar'. Conversely a leading '-' sets the terms presence to prohibited, i.e. it must not
- * appear in a document, e.g. `-foo bar` is a search for documents that do not contain 'foo' but may contain 'bar'.
- *
- * To escape special characters the backslash character '\' can be used, this allows searches to include
- * characters that would normally be considered modifiers, e.g. `foo\~2` will search for a term "foo~2" instead
- * of attempting to apply a boost of 2 to the search term "foo".
- *
- * @typedef {string} lunr.Index~QueryString
- * @example <caption>Simple single term query</caption>
- * hello
- * @example <caption>Multiple term query</caption>
- * hello world
- * @example <caption>term scoped to a field</caption>
- * title:hello
- * @example <caption>term with a boost of 10</caption>
- * hello^10
- * @example <caption>term with an edit distance of 2</caption>
- * hello~2
- * @example <caption>terms with presence modifiers</caption>
- * -foo +bar baz
- */
-
-/**
- * Performs a search against the index using lunr query syntax.
- *
- * Results will be returned sorted by their score, the most relevant results
- * will be returned first.  For details on how the score is calculated, please see
- * the {@link https://lunrjs.com/guides/searching.html#scoring|guide}.
- *
- * For more programmatic querying use lunr.Index#query.
- *
- * @param {lunr.Index~QueryString} queryString - A string containing a lunr query.
- * @throws {lunr.QueryParseError} If the passed query string cannot be parsed.
- * @returns {lunr.Index~Result[]}
- */
-lunr.Index.prototype.search = function (queryString) {
-  return this.query(function (query) {
-    var parser = new lunr.QueryParser(queryString, query)
-    parser.parse()
-  })
-}
-
-/**
- * A query builder callback provides a query object to be used to express
- * the query to perform on the index.
- *
- * @callback lunr.Index~queryBuilder
- * @param {lunr.Query} query - The query object to build up.
- * @this lunr.Query
- */
-
-/**
- * Performs a query against the index using the yielded lunr.Query object.
- *
- * If performing programmatic queries against the index, this method is preferred
- * over lunr.Index#search so as to avoid the additional query parsing overhead.
- *
- * A query object is yielded to the supplied function which should be used to
- * express the query to be run against the index.
- *
- * Note that although this function takes a callback parameter it is _not_ an
- * asynchronous operation, the callback is just yielded a query object to be
- * customized.
- *
- * @param {lunr.Index~queryBuilder} fn - A function that is used to build the query.
- * @returns {lunr.Index~Result[]}
- */
-lunr.Index.prototype.query = function (fn) {
-  // for each query clause
-  // * process terms
-  // * expand terms from token set
-  // * find matching documents and metadata
-  // * get document vectors
-  // * score documents
-
-  var query = new lunr.Query(this.fields),
-      matchingFields = Object.create(null),
-      queryVectors = Object.create(null),
-      termFieldCache = Object.create(null),
-      requiredMatches = Object.create(null),
-      prohibitedMatches = Object.create(null)
-
-  /*
-   * To support field level boosts a query vector is created per
-   * field. An empty vector is eagerly created to support negated
-   * queries.
-   */
-  for (var i = 0; i < this.fields.length; i++) {
-    queryVectors[this.fields[i]] = new lunr.Vector
-  }
-
-  fn.call(query, query)
-
-  for (var i = 0; i < query.clauses.length; i++) {
-    /*
-     * Unless the pipeline has been disabled for this term, which is
-     * the case for terms with wildcards, we need to pass the clause
-     * term through the search pipeline. A pipeline returns an array
-     * of processed terms. Pipeline functions may expand the passed
-     * term, which means we may end up performing multiple index lookups
-     * for a single query term.
-     */
-    var clause = query.clauses[i],
-        terms = null,
-        clauseMatches = lunr.Set.complete
-
-    if (clause.usePipeline) {
-      terms = this.pipeline.runString(clause.term, {
-        fields: clause.fields
-      })
-    } else {
-      terms = [clause.term]
-    }
-
-    for (var m = 0; m < terms.length; m++) {
-      var term = terms[m]
-
-      /*
-       * Each term returned from the pipeline needs to use the same query
-       * clause object, e.g. the same boost and or edit distance. The
-       * simplest way to do this is to re-use the clause object but mutate
-       * its term property.
-       */
-      clause.term = term
-
-      /*
-       * From the term in the clause we create a token set which will then
-       * be used to intersect the indexes token set to get a list of terms
-       * to lookup in the inverted index
-       */
-      var termTokenSet = lunr.TokenSet.fromClause(clause),
-          expandedTerms = this.tokenSet.intersect(termTokenSet).toArray()
-
-      /*
-       * If a term marked as required does not exist in the tokenSet it is
-       * impossible for the search to return any matches. We set all the field
-       * scoped required matches set to empty and stop examining any further
-       * clauses.
-       */
-      if (expandedTerms.length === 0 && clause.presence === lunr.Query.presence.REQUIRED) {
-        for (var k = 0; k < clause.fields.length; k++) {
-          var field = clause.fields[k]
-          requiredMatches[field] = lunr.Set.empty
-        }
-
-        break
-      }
-
-      for (var j = 0; j < expandedTerms.length; j++) {
-        /*
-         * For each term get the posting and termIndex, this is required for
-         * building the query vector.
-         */
-        var expandedTerm = expandedTerms[j],
-            posting = this.invertedIndex[expandedTerm],
-            termIndex = posting._index
-
-        for (var k = 0; k < clause.fields.length; k++) {
-          /*
-           * For each field that this query term is scoped by (by default
-           * all fields are in scope) we need to get all the document refs
-           * that have this term in that field.
-           *
-           * The posting is the entry in the invertedIndex for the matching
-           * term from above.
-           */
-          var field = clause.fields[k],
-              fieldPosting = posting[field],
-              matchingDocumentRefs = Object.keys(fieldPosting),
-              termField = expandedTerm + "/" + field,
-              matchingDocumentsSet = new lunr.Set(matchingDocumentRefs)
-
-          /*
-           * if the presence of this term is required ensure that the matching
-           * documents are added to the set of required matches for this clause.
-           *
-           */
-          if (clause.presence == lunr.Query.presence.REQUIRED) {
-            clauseMatches = clauseMatches.union(matchingDocumentsSet)
-
-            if (requiredMatches[field] === undefined) {
-              requiredMatches[field] = lunr.Set.complete
-            }
-          }
-
-          /*
-           * if the presence of this term is prohibited ensure that the matching
-           * documents are added to the set of prohibited matches for this field,
-           * creating that set if it does not yet exist.
-           */
-          if (clause.presence == lunr.Query.presence.PROHIBITED) {
-            if (prohibitedMatches[field] === undefined) {
-              prohibitedMatches[field] = lunr.Set.empty
-            }
-
-            prohibitedMatches[field] = prohibitedMatches[field].union(matchingDocumentsSet)
-
-            /*
-             * Prohibited matches should not be part of the query vector used for
-             * similarity scoring and no metadata should be extracted so we continue
-             * to the next field
-             */
-            continue
-          }
-
-          /*
-           * The query field vector is populated using the termIndex found for
-           * the term and a unit value with the appropriate boost applied.
-           * Using upsert because there could already be an entry in the vector
-           * for the term we are working with. In that case we just add the scores
-           * together.
-           */
-          queryVectors[field].upsert(termIndex, clause.boost, function (a, b) { return a + b })
-
-          /**
-           * If we've already seen this term, field combo then we've already collected
-           * the matching documents and metadata, no need to go through all that again
-           */
-          if (termFieldCache[termField]) {
-            continue
-          }
-
-          for (var l = 0; l < matchingDocumentRefs.length; l++) {
-            /*
-             * All metadata for this term/field/document triple
-             * are then extracted and collected into an instance
-             * of lunr.MatchData ready to be returned in the query
-             * results
-             */
-            var matchingDocumentRef = matchingDocumentRefs[l],
-                matchingFieldRef = new lunr.FieldRef (matchingDocumentRef, field),
-                metadata = fieldPosting[matchingDocumentRef],
-                fieldMatch
-
-            if ((fieldMatch = matchingFields[matchingFieldRef]) === undefined) {
-              matchingFields[matchingFieldRef] = new lunr.MatchData (expandedTerm, field, metadata)
-            } else {
-              fieldMatch.add(expandedTerm, field, metadata)
-            }
-
-          }
-
-          termFieldCache[termField] = true
-        }
-      }
-    }
-
-    /**
-     * If the presence was required we need to update the requiredMatches field sets.
-     * We do this after all fields for the term have collected their matches because
-     * the clause terms presence is required in _any_ of the fields not _all_ of the
-     * fields.
-     */
-    if (clause.presence === lunr.Query.presence.REQUIRED) {
-      for (var k = 0; k < clause.fields.length; k++) {
-        var field = clause.fields[k]
-        requiredMatches[field] = requiredMatches[field].intersect(clauseMatches)
-      }
-    }
-  }
-
-  /**
-   * Need to combine the field scoped required and prohibited
-   * matching documents into a global set of required and prohibited
-   * matches
-   */
-  var allRequiredMatches = lunr.Set.complete,
-      allProhibitedMatches = lunr.Set.empty
-
-  for (var i = 0; i < this.fields.length; i++) {
-    var field = this.fields[i]
-
-    if (requiredMatches[field]) {
-      allRequiredMatches = allRequiredMatches.intersect(requiredMatches[field])
-    }
-
-    if (prohibitedMatches[field]) {
-      allProhibitedMatches = allProhibitedMatches.union(prohibitedMatches[field])
-    }
-  }
-
-  var matchingFieldRefs = Object.keys(matchingFields),
-      results = [],
-      matches = Object.create(null)
-
-  /*
-   * If the query is negated (contains only prohibited terms)
-   * we need to get _all_ fieldRefs currently existing in the
-   * index. This is only done when we know that the query is
-   * entirely prohibited terms to avoid any cost of getting all
-   * fieldRefs unnecessarily.
-   *
-   * Additionally, blank MatchData must be created to correctly
-   * populate the results.
-   */
-  if (query.isNegated()) {
-    matchingFieldRefs = Object.keys(this.fieldVectors)
-
-    for (var i = 0; i < matchingFieldRefs.length; i++) {
-      var matchingFieldRef = matchingFieldRefs[i]
-      var fieldRef = lunr.FieldRef.fromString(matchingFieldRef)
-      matchingFields[matchingFieldRef] = new lunr.MatchData
-    }
-  }
-
-  for (var i = 0; i < matchingFieldRefs.length; i++) {
-    /*
-     * Currently we have document fields that match the query, but we
-     * need to return documents. The matchData and scores are combined
-     * from multiple fields belonging to the same document.
-     *
-     * Scores are calculated by field, using the query vectors created
-     * above, and combined into a final document score using addition.
-     */
-    var fieldRef = lunr.FieldRef.fromString(matchingFieldRefs[i]),
-        docRef = fieldRef.docRef
-
-    if (!allRequiredMatches.contains(docRef)) {
-      continue
-    }
-
-    if (allProhibitedMatches.contains(docRef)) {
-      continue
-    }
-
-    var fieldVector = this.fieldVectors[fieldRef],
-        score = queryVectors[fieldRef.fieldName].similarity(fieldVector),
-        docMatch
-
-    if ((docMatch = matches[docRef]) !== undefined) {
-      docMatch.score += score
-      docMatch.matchData.combine(matchingFields[fieldRef])
-    } else {
-      var match = {
-        ref: docRef,
-        score: score,
-        matchData: matchingFields[fieldRef]
-      }
-      matches[docRef] = match
-      results.push(match)
-    }
-  }
-
-  /*
-   * Sort the results objects by score, highest first.
-   */
-  return results.sort(function (a, b) {
-    return b.score - a.score
-  })
-}
-
-/**
- * Prepares the index for JSON serialization.
- *
- * The schema for this JSON blob will be described in a
- * separate JSON schema file.
- *
- * @returns {Object}
- */
-lunr.Index.prototype.toJSON = function () {
-  var invertedIndex = Object.keys(this.invertedIndex)
-    .sort()
-    .map(function (term) {
-      return [term, this.invertedIndex[term]]
-    }, this)
-
-  var fieldVectors = Object.keys(this.fieldVectors)
-    .map(function (ref) {
-      return [ref, this.fieldVectors[ref].toJSON()]
-    }, this)
-
-  return {
-    version: lunr.version,
-    fields: this.fields,
-    fieldVectors: fieldVectors,
-    invertedIndex: invertedIndex,
-    pipeline: this.pipeline.toJSON()
-  }
-}
-
-/**
- * Loads a previously serialized lunr.Index
- *
- * @param {Object} serializedIndex - A previously serialized lunr.Index
- * @returns {lunr.Index}
- */
-lunr.Index.load = function (serializedIndex) {
-  var attrs = {},
-      fieldVectors = {},
-      serializedVectors = serializedIndex.fieldVectors,
-      invertedIndex = Object.create(null),
-      serializedInvertedIndex = serializedIndex.invertedIndex,
-      tokenSetBuilder = new lunr.TokenSet.Builder,
-      pipeline = lunr.Pipeline.load(serializedIndex.pipeline)
-
-  if (serializedIndex.version != lunr.version) {
-    lunr.utils.warn("Version mismatch when loading serialised index. Current version of lunr '" + lunr.version + "' does not match serialized index '" + serializedIndex.version + "'")
-  }
-
-  for (var i = 0; i < serializedVectors.length; i++) {
-    var tuple = serializedVectors[i],
-        ref = tuple[0],
-        elements = tuple[1]
-
-    fieldVectors[ref] = new lunr.Vector(elements)
-  }
-
-  for (var i = 0; i < serializedInvertedIndex.length; i++) {
-    var tuple = serializedInvertedIndex[i],
-        term = tuple[0],
-        posting = tuple[1]
-
-    tokenSetBuilder.insert(term)
-    invertedIndex[term] = posting
-  }
-
-  tokenSetBuilder.finish()
-
-  attrs.fields = serializedIndex.fields
-
-  attrs.fieldVectors = fieldVectors
-  attrs.invertedIndex = invertedIndex
-  attrs.tokenSet = tokenSetBuilder.root
-  attrs.pipeline = pipeline
-
-  return new lunr.Index(attrs)
-}
-/*!
- * lunr.Builder
- * Copyright (C) 2019 Oliver Nightingale
- */
-
-/**
- * lunr.Builder performs indexing on a set of documents and
- * returns instances of lunr.Index ready for querying.
- *
- * All configuration of the index is done via the builder, the
- * fields to index, the document reference, the text processing
- * pipeline and document scoring parameters are all set on the
- * builder before indexing.
- *
- * @constructor
- * @property {string} _ref - Internal reference to the document reference field.
- * @property {string[]} _fields - Internal reference to the document fields to index.
- * @property {object} invertedIndex - The inverted index maps terms to document fields.
- * @property {object} documentTermFrequencies - Keeps track of document term frequencies.
- * @property {object} documentLengths - Keeps track of the length of documents added to the index.
- * @property {lunr.tokenizer} tokenizer - Function for splitting strings into tokens for indexing.
- * @property {lunr.Pipeline} pipeline - The pipeline performs text processing on tokens before indexing.
- * @property {lunr.Pipeline} searchPipeline - A pipeline for processing search terms before querying the index.
- * @property {number} documentCount - Keeps track of the total number of documents indexed.
- * @property {number} _b - A parameter to control field length normalization, setting this to 0 disabled normalization, 1 fully normalizes field lengths, the default value is 0.75.
- * @property {number} _k1 - A parameter to control how quickly an increase in term frequency results in term frequency saturation, the default value is 1.2.
- * @property {number} termIndex - A counter incremented for each unique term, used to identify a terms position in the vector space.
- * @property {array} metadataWhitelist - A list of metadata keys that have been whitelisted for entry in the index.
- */
-lunr.Builder = function () {
-  this._ref = "id"
-  this._fields = Object.create(null)
-  this._documents = Object.create(null)
-  this.invertedIndex = Object.create(null)
-  this.fieldTermFrequencies = {}
-  this.fieldLengths = {}
-  this.tokenizer = lunr.tokenizer
-  this.pipeline = new lunr.Pipeline
-  this.searchPipeline = new lunr.Pipeline
-  this.documentCount = 0
-  this._b = 0.75
-  this._k1 = 1.2
-  this.termIndex = 0
-  this.metadataWhitelist = []
-}
-
-/**
- * Sets the document field used as the document reference. Every document must have this field.
- * The type of this field in the document should be a string, if it is not a string it will be
- * coerced into a string by calling toString.
- *
- * The default ref is 'id'.
- *
- * The ref should _not_ be changed during indexing, it should be set before any documents are
- * added to the index. Changing it during indexing can lead to inconsistent results.
- *
- * @param {string} ref - The name of the reference field in the document.
- */
-lunr.Builder.prototype.ref = function (ref) {
-  this._ref = ref
-}
-
-/**
- * A function that is used to extract a field from a document.
- *
- * Lunr expects a field to be at the top level of a document, if however the field
- * is deeply nested within a document an extractor function can be used to extract
- * the right field for indexing.
- *
- * @callback fieldExtractor
- * @param {object} doc - The document being added to the index.
- * @returns {?(string|object|object[])} obj - The object that will be indexed for this field.
- * @example <caption>Extracting a nested field</caption>
- * function (doc) { return doc.nested.field }
- */
-
-/**
- * Adds a field to the list of document fields that will be indexed. Every document being
- * indexed should have this field. Null values for this field in indexed documents will
- * not cause errors but will limit the chance of that document being retrieved by searches.
- *
- * All fields should be added before adding documents to the index. Adding fields after
- * a document has been indexed will have no effect on already indexed documents.
- *
- * Fields can be boosted at build time. This allows terms within that field to have more
- * importance when ranking search results. Use a field boost to specify that matches within
- * one field are more important than other fields.
- *
- * @param {string} fieldName - The name of a field to index in all documents.
- * @param {object} attributes - Optional attributes associated with this field.
- * @param {number} [attributes.boost=1] - Boost applied to all terms within this field.
- * @param {fieldExtractor} [attributes.extractor] - Function to extract a field from a document.
- * @throws {RangeError} fieldName cannot contain unsupported characters '/'
- */
-lunr.Builder.prototype.field = function (fieldName, attributes) {
-  if (/\//.test(fieldName)) {
-    throw new RangeError ("Field '" + fieldName + "' contains illegal character '/'")
-  }
-
-  this._fields[fieldName] = attributes || {}
-}
-
-/**
- * A parameter to tune the amount of field length normalisation that is applied when
- * calculating relevance scores. A value of 0 will completely disable any normalisation
- * and a value of 1 will fully normalise field lengths. The default is 0.75. Values of b
- * will be clamped to the range 0 - 1.
- *
- * @param {number} number - The value to set for this tuning parameter.
- */
-lunr.Builder.prototype.b = function (number) {
-  if (number < 0) {
-    this._b = 0
-  } else if (number > 1) {
-    this._b = 1
-  } else {
-    this._b = number
-  }
-}
-
-/**
- * A parameter that controls the speed at which a rise in term frequency results in term
- * frequency saturation. The default value is 1.2. Setting this to a higher value will give
- * slower saturation levels, a lower value will result in quicker saturation.
- *
- * @param {number} number - The value to set for this tuning parameter.
- */
-lunr.Builder.prototype.k1 = function (number) {
-  this._k1 = number
-}
-
-/**
- * Adds a document to the index.
- *
- * Before adding fields to the index the index should have been fully setup, with the document
- * ref and all fields to index already having been specified.
- *
- * The document must have a field name as specified by the ref (by default this is 'id') and
- * it should have all fields defined for indexing, though null or undefined values will not
- * cause errors.
- *
- * Entire documents can be boosted at build time. Applying a boost to a document indicates that
- * this document should rank higher in search results than other documents.
- *
- * @param {object} doc - The document to add to the index.
- * @param {object} attributes - Optional attributes associated with this document.
- * @param {number} [attributes.boost=1] - Boost applied to all terms within this document.
- */
-lunr.Builder.prototype.add = function (doc, attributes) {
-  var docRef = doc[this._ref],
-      fields = Object.keys(this._fields)
-
-  this._documents[docRef] = attributes || {}
-  this.documentCount += 1
-
-  for (var i = 0; i < fields.length; i++) {
-    var fieldName = fields[i],
-        extractor = this._fields[fieldName].extractor,
-        field = extractor ? extractor(doc) : doc[fieldName],
-        tokens = this.tokenizer(field, {
-          fields: [fieldName]
-        }),
-        terms = this.pipeline.run(tokens),
-        fieldRef = new lunr.FieldRef (docRef, fieldName),
-        fieldTerms = Object.create(null)
-
-    this.fieldTermFrequencies[fieldRef] = fieldTerms
-    this.fieldLengths[fieldRef] = 0
-
-    // store the length of this field for this document
-    this.fieldLengths[fieldRef] += terms.length
-
-    // calculate term frequencies for this field
-    for (var j = 0; j < terms.length; j++) {
-      var term = terms[j]
-
-      if (fieldTerms[term] == undefined) {
-        fieldTerms[term] = 0
-      }
-
-      fieldTerms[term] += 1
-
-      // add to inverted index
-      // create an initial posting if one doesn't exist
-      if (this.invertedIndex[term] == undefined) {
-        var posting = Object.create(null)
-        posting["_index"] = this.termIndex
-        this.termIndex += 1
-
-        for (var k = 0; k < fields.length; k++) {
-          posting[fields[k]] = Object.create(null)
-        }
-
-        this.invertedIndex[term] = posting
-      }
-
-      // add an entry for this term/fieldName/docRef to the invertedIndex
-      if (this.invertedIndex[term][fieldName][docRef] == undefined) {
-        this.invertedIndex[term][fieldName][docRef] = Object.create(null)
-      }
-
-      // store all whitelisted metadata about this token in the
-      // inverted index
-      for (var l = 0; l < this.metadataWhitelist.length; l++) {
-        var metadataKey = this.metadataWhitelist[l],
-            metadata = term.metadata[metadataKey]
-
-        if (this.invertedIndex[term][fieldName][docRef][metadataKey] == undefined) {
-          this.invertedIndex[term][fieldName][docRef][metadataKey] = []
-        }
-
-        this.invertedIndex[term][fieldName][docRef][metadataKey].push(metadata)
-      }
-    }
-
-  }
-}
-
-/**
- * Calculates the average document length for this index
- *
- * @private
- */
-lunr.Builder.prototype.calculateAverageFieldLengths = function () {
-
-  var fieldRefs = Object.keys(this.fieldLengths),
-      numberOfFields = fieldRefs.length,
-      accumulator = {},
-      documentsWithField = {}
-
-  for (var i = 0; i < numberOfFields; i++) {
-    var fieldRef = lunr.FieldRef.fromString(fieldRefs[i]),
-        field = fieldRef.fieldName
-
-    documentsWithField[field] || (documentsWithField[field] = 0)
-    documentsWithField[field] += 1
-
-    accumulator[field] || (accumulator[field] = 0)
-    accumulator[field] += this.fieldLengths[fieldRef]
-  }
-
-  var fields = Object.keys(this._fields)
-
-  for (var i = 0; i < fields.length; i++) {
-    var fieldName = fields[i]
-    accumulator[fieldName] = accumulator[fieldName] / documentsWithField[fieldName]
-  }
-
-  this.averageFieldLength = accumulator
-}
-
-/**
- * Builds a vector space model of every document using lunr.Vector
- *
- * @private
- */
-lunr.Builder.prototype.createFieldVectors = function () {
-  var fieldVectors = {},
-      fieldRefs = Object.keys(this.fieldTermFrequencies),
-      fieldRefsLength = fieldRefs.length,
-      termIdfCache = Object.create(null)
-
-  for (var i = 0; i < fieldRefsLength; i++) {
-    var fieldRef = lunr.FieldRef.fromString(fieldRefs[i]),
-        fieldName = fieldRef.fieldName,
-        fieldLength = this.fieldLengths[fieldRef],
-        fieldVector = new lunr.Vector,
-        termFrequencies = this.fieldTermFrequencies[fieldRef],
-        terms = Object.keys(termFrequencies),
-        termsLength = terms.length
-
-
-    var fieldBoost = this._fields[fieldName].boost || 1,
-        docBoost = this._documents[fieldRef.docRef].boost || 1
-
-    for (var j = 0; j < termsLength; j++) {
-      var term = terms[j],
-          tf = termFrequencies[term],
-          termIndex = this.invertedIndex[term]._index,
-          idf, score, scoreWithPrecision
-
-      if (termIdfCache[term] === undefined) {
-        idf = lunr.idf(this.invertedIndex[term], this.documentCount)
-        termIdfCache[term] = idf
-      } else {
-        idf = termIdfCache[term]
-      }
-
-      score = idf * ((this._k1 + 1) * tf) / (this._k1 * (1 - this._b + this._b * (fieldLength / this.averageFieldLength[fieldName])) + tf)
-      score *= fieldBoost
-      score *= docBoost
-      scoreWithPrecision = Math.round(score * 1000) / 1000
-      // Converts 1.23456789 to 1.234.
-      // Reducing the precision so that the vectors take up less
-      // space when serialised. Doing it now so that they behave
-      // the same before and after serialisation. Also, this is
-      // the fastest approach to reducing a number's precision in
-      // JavaScript.
-
-      fieldVector.insert(termIndex, scoreWithPrecision)
-    }
-
-    fieldVectors[fieldRef] = fieldVector
-  }
-
-  this.fieldVectors = fieldVectors
-}
-
-/**
- * Creates a token set of all tokens in the index using lunr.TokenSet
- *
- * @private
- */
-lunr.Builder.prototype.createTokenSet = function () {
-  this.tokenSet = lunr.TokenSet.fromArray(
-    Object.keys(this.invertedIndex).sort()
-  )
-}
-
-/**
- * Builds the index, creating an instance of lunr.Index.
- *
- * This completes the indexing process and should only be called
- * once all documents have been added to the index.
- *
- * @returns {lunr.Index}
- */
-lunr.Builder.prototype.build = function () {
-  this.calculateAverageFieldLengths()
-  this.createFieldVectors()
-  this.createTokenSet()
-
-  return new lunr.Index({
-    invertedIndex: this.invertedIndex,
-    fieldVectors: this.fieldVectors,
-    tokenSet: this.tokenSet,
-    fields: Object.keys(this._fields),
-    pipeline: this.searchPipeline
-  })
-}
-
-/**
- * Applies a plugin to the index builder.
- *
- * A plugin is a function that is called with the index builder as its context.
- * Plugins can be used to customise or extend the behaviour of the index
- * in some way. A plugin is just a function, that encapsulated the custom
- * behaviour that should be applied when building the index.
- *
- * The plugin function will be called with the index builder as its argument, additional
- * arguments can also be passed when calling use. The function will be called
- * with the index builder as its context.
- *
- * @param {Function} plugin The plugin to apply.
- */
-lunr.Builder.prototype.use = function (fn) {
-  var args = Array.prototype.slice.call(arguments, 1)
-  args.unshift(this)
-  fn.apply(this, args)
-}
-/**
- * Contains and collects metadata about a matching document.
- * A single instance of lunr.MatchData is returned as part of every
- * lunr.Index~Result.
- *
- * @constructor
- * @param {string} term - The term this match data is associated with
- * @param {string} field - The field in which the term was found
- * @param {object} metadata - The metadata recorded about this term in this field
- * @property {object} metadata - A cloned collection of metadata associated with this document.
- * @see {@link lunr.Index~Result}
- */
-lunr.MatchData = function (term, field, metadata) {
-  var clonedMetadata = Object.create(null),
-      metadataKeys = Object.keys(metadata || {})
-
-  // Cloning the metadata to prevent the original
-  // being mutated during match data combination.
-  // Metadata is kept in an array within the inverted
-  // index so cloning the data can be done with
-  // Array#slice
-  for (var i = 0; i < metadataKeys.length; i++) {
-    var key = metadataKeys[i]
-    clonedMetadata[key] = metadata[key].slice()
-  }
-
-  this.metadata = Object.create(null)
-
-  if (term !== undefined) {
-    this.metadata[term] = Object.create(null)
-    this.metadata[term][field] = clonedMetadata
-  }
-}
-
-/**
- * An instance of lunr.MatchData will be created for every term that matches a
- * document. However only one instance is required in a lunr.Index~Result. This
- * method combines metadata from another instance of lunr.MatchData with this
- * objects metadata.
- *
- * @param {lunr.MatchData} otherMatchData - Another instance of match data to merge with this one.
- * @see {@link lunr.Index~Result}
- */
-lunr.MatchData.prototype.combine = function (otherMatchData) {
-  var terms = Object.keys(otherMatchData.metadata)
-
-  for (var i = 0; i < terms.length; i++) {
-    var term = terms[i],
-        fields = Object.keys(otherMatchData.metadata[term])
-
-    if (this.metadata[term] == undefined) {
-      this.metadata[term] = Object.create(null)
-    }
-
-    for (var j = 0; j < fields.length; j++) {
-      var field = fields[j],
-          keys = Object.keys(otherMatchData.metadata[term][field])
-
-      if (this.metadata[term][field] == undefined) {
-        this.metadata[term][field] = Object.create(null)
-      }
-
-      for (var k = 0; k < keys.length; k++) {
-        var key = keys[k]
-
-        if (this.metadata[term][field][key] == undefined) {
-          this.metadata[term][field][key] = otherMatchData.metadata[term][field][key]
-        } else {
-          this.metadata[term][field][key] = this.metadata[term][field][key].concat(otherMatchData.metadata[term][field][key])
-        }
-
-      }
-    }
-  }
-}
-
-/**
- * Add metadata for a term/field pair to this instance of match data.
- *
- * @param {string} term - The term this match data is associated with
- * @param {string} field - The field in which the term was found
- * @param {object} metadata - The metadata recorded about this term in this field
- */
-lunr.MatchData.prototype.add = function (term, field, metadata) {
-  if (!(term in this.metadata)) {
-    this.metadata[term] = Object.create(null)
-    this.metadata[term][field] = metadata
-    return
-  }
-
-  if (!(field in this.metadata[term])) {
-    this.metadata[term][field] = metadata
-    return
-  }
-
-  var metadataKeys = Object.keys(metadata)
-
-  for (var i = 0; i < metadataKeys.length; i++) {
-    var key = metadataKeys[i]
-
-    if (key in this.metadata[term][field]) {
-      this.metadata[term][field][key] = this.metadata[term][field][key].concat(metadata[key])
-    } else {
-      this.metadata[term][field][key] = metadata[key]
-    }
-  }
-}
-/**
- * A lunr.Query provides a programmatic way of defining queries to be performed
- * against a {@link lunr.Index}.
- *
- * Prefer constructing a lunr.Query using the {@link lunr.Index#query} method
- * so the query object is pre-initialized with the right index fields.
- *
- * @constructor
- * @property {lunr.Query~Clause[]} clauses - An array of query clauses.
- * @property {string[]} allFields - An array of all available fields in a lunr.Index.
- */
-lunr.Query = function (allFields) {
-  this.clauses = []
-  this.allFields = allFields
-}
-
-/**
- * Constants for indicating what kind of automatic wildcard insertion will be used when constructing a query clause.
- *
- * This allows wildcards to be added to the beginning and end of a term without having to manually do any string
- * concatenation.
- *
- * The wildcard constants can be bitwise combined to select both leading and trailing wildcards.
- *
- * @constant
- * @default
- * @property {number} wildcard.NONE - The term will have no wildcards inserted, this is the default behaviour
- * @property {number} wildcard.LEADING - Prepend the term with a wildcard, unless a leading wildcard already exists
- * @property {number} wildcard.TRAILING - Append a wildcard to the term, unless a trailing wildcard already exists
- * @see lunr.Query~Clause
- * @see lunr.Query#clause
- * @see lunr.Query#term
- * @example <caption>query term with trailing wildcard</caption>
- * query.term('foo', { wildcard: lunr.Query.wildcard.TRAILING })
- * @example <caption>query term with leading and trailing wildcard</caption>
- * query.term('foo', {
- *   wildcard: lunr.Query.wildcard.LEADING | lunr.Query.wildcard.TRAILING
- * })
- */
-
-lunr.Query.wildcard = new String ("*")
-lunr.Query.wildcard.NONE = 0
-lunr.Query.wildcard.LEADING = 1
-lunr.Query.wildcard.TRAILING = 2
-
-/**
- * Constants for indicating what kind of presence a term must have in matching documents.
- *
- * @constant
- * @enum {number}
- * @see lunr.Query~Clause
- * @see lunr.Query#clause
- * @see lunr.Query#term
- * @example <caption>query term with required presence</caption>
- * query.term('foo', { presence: lunr.Query.presence.REQUIRED })
- */
-lunr.Query.presence = {
-  /**
-   * Term's presence in a document is optional, this is the default value.
-   */
-  OPTIONAL: 1,
-
-  /**
-   * Term's presence in a document is required, documents that do not contain
-   * this term will not be returned.
-   */
-  REQUIRED: 2,
-
-  /**
-   * Term's presence in a document is prohibited, documents that do contain
-   * this term will not be returned.
-   */
-  PROHIBITED: 3
-}
-
-/**
- * A single clause in a {@link lunr.Query} contains a term and details on how to
- * match that term against a {@link lunr.Index}.
- *
- * @typedef {Object} lunr.Query~Clause
- * @property {string[]} fields - The fields in an index this clause should be matched against.
- * @property {number} [boost=1] - Any boost that should be applied when matching this clause.
- * @property {number} [editDistance] - Whether the term should have fuzzy matching applied, and how fuzzy the match should be.
- * @property {boolean} [usePipeline] - Whether the term should be passed through the search pipeline.
- * @property {number} [wildcard=lunr.Query.wildcard.NONE] - Whether the term should have wildcards appended or prepended.
- * @property {number} [presence=lunr.Query.presence.OPTIONAL] - The terms presence in any matching documents.
- */
-
-/**
- * Adds a {@link lunr.Query~Clause} to this query.
- *
- * Unless the clause contains the fields to be matched all fields will be matched. In addition
- * a default boost of 1 is applied to the clause.
- *
- * @param {lunr.Query~Clause} clause - The clause to add to this query.
- * @see lunr.Query~Clause
- * @returns {lunr.Query}
- */
-lunr.Query.prototype.clause = function (clause) {
-  if (!('fields' in clause)) {
-    clause.fields = this.allFields
-  }
-
-  if (!('boost' in clause)) {
-    clause.boost = 1
-  }
-
-  if (!('usePipeline' in clause)) {
-    clause.usePipeline = true
-  }
-
-  if (!('wildcard' in clause)) {
-    clause.wildcard = lunr.Query.wildcard.NONE
-  }
-
-  if ((clause.wildcard & lunr.Query.wildcard.LEADING) && (clause.term.charAt(0) != lunr.Query.wildcard)) {
-    clause.term = "*" + clause.term
-  }
-
-  if ((clause.wildcard & lunr.Query.wildcard.TRAILING) && (clause.term.slice(-1) != lunr.Query.wildcard)) {
-    clause.term = "" + clause.term + "*"
-  }
-
-  if (!('presence' in clause)) {
-    clause.presence = lunr.Query.presence.OPTIONAL
-  }
-
-  this.clauses.push(clause)
-
-  return this
-}
-
-/**
- * A negated query is one in which every clause has a presence of
- * prohibited. These queries require some special processing to return
- * the expected results.
- *
- * @returns boolean
- */
-lunr.Query.prototype.isNegated = function () {
-  for (var i = 0; i < this.clauses.length; i++) {
-    if (this.clauses[i].presence != lunr.Query.presence.PROHIBITED) {
-      return false
-    }
-  }
-
-  return true
-}
-
-/**
- * Adds a term to the current query, under the covers this will create a {@link lunr.Query~Clause}
- * to the list of clauses that make up this query.
- *
- * The term is used as is, i.e. no tokenization will be performed by this method. Instead conversion
- * to a token or token-like string should be done before calling this method.
- *
- * The term will be converted to a string by calling `toString`. Multiple terms can be passed as an
- * array, each term in the array will share the same options.
- *
- * @param {object|object[]} term - The term(s) to add to the query.
- * @param {object} [options] - Any additional properties to add to the query clause.
- * @returns {lunr.Query}
- * @see lunr.Query#clause
- * @see lunr.Query~Clause
- * @example <caption>adding a single term to a query</caption>
- * query.term("foo")
- * @example <caption>adding a single term to a query and specifying search fields, term boost and automatic trailing wildcard</caption>
- * query.term("foo", {
- *   fields: ["title"],
- *   boost: 10,
- *   wildcard: lunr.Query.wildcard.TRAILING
- * })
- * @example <caption>using lunr.tokenizer to convert a string to tokens before using them as terms</caption>
- * query.term(lunr.tokenizer("foo bar"))
- */
-lunr.Query.prototype.term = function (term, options) {
-  if (Array.isArray(term)) {
-    term.forEach(function (t) { this.term(t, lunr.utils.clone(options)) }, this)
-    return this
-  }
-
-  var clause = options || {}
-  clause.term = term.toString()
-
-  this.clause(clause)
-
-  return this
-}
-lunr.QueryParseError = function (message, start, end) {
-  this.name = "QueryParseError"
-  this.message = message
-  this.start = start
-  this.end = end
-}
-
-lunr.QueryParseError.prototype = new Error
-lunr.QueryLexer = function (str) {
-  this.lexemes = []
-  this.str = str
-  this.length = str.length
-  this.pos = 0
-  this.start = 0
-  this.escapeCharPositions = []
-}
-
-lunr.QueryLexer.prototype.run = function () {
-  var state = lunr.QueryLexer.lexText
-
-  while (state) {
-    state = state(this)
-  }
-}
-
-lunr.QueryLexer.prototype.sliceString = function () {
-  var subSlices = [],
-      sliceStart = this.start,
-      sliceEnd = this.pos
-
-  for (var i = 0; i < this.escapeCharPositions.length; i++) {
-    sliceEnd = this.escapeCharPositions[i]
-    subSlices.push(this.str.slice(sliceStart, sliceEnd))
-    sliceStart = sliceEnd + 1
-  }
-
-  subSlices.push(this.str.slice(sliceStart, this.pos))
-  this.escapeCharPositions.length = 0
-
-  return subSlices.join('')
-}
-
-lunr.QueryLexer.prototype.emit = function (type) {
-  this.lexemes.push({
-    type: type,
-    str: this.sliceString(),
-    start: this.start,
-    end: this.pos
-  })
-
-  this.start = this.pos
-}
-
-lunr.QueryLexer.prototype.escapeCharacter = function () {
-  this.escapeCharPositions.push(this.pos - 1)
-  this.pos += 1
-}
-
-lunr.QueryLexer.prototype.next = function () {
-  if (this.pos >= this.length) {
-    return lunr.QueryLexer.EOS
-  }
-
-  var char = this.str.charAt(this.pos)
-  this.pos += 1
-  return char
-}
-
-lunr.QueryLexer.prototype.width = function () {
-  return this.pos - this.start
-}
-
-lunr.QueryLexer.prototype.ignore = function () {
-  if (this.start == this.pos) {
-    this.pos += 1
-  }
-
-  this.start = this.pos
-}
-
-lunr.QueryLexer.prototype.backup = function () {
-  this.pos -= 1
-}
-
-lunr.QueryLexer.prototype.acceptDigitRun = function () {
-  var char, charCode
-
-  do {
-    char = this.next()
-    charCode = char.charCodeAt(0)
-  } while (charCode > 47 && charCode < 58)
-
-  if (char != lunr.QueryLexer.EOS) {
-    this.backup()
-  }
-}
-
-lunr.QueryLexer.prototype.more = function () {
-  return this.pos < this.length
-}
-
-lunr.QueryLexer.EOS = 'EOS'
-lunr.QueryLexer.FIELD = 'FIELD'
-lunr.QueryLexer.TERM = 'TERM'
-lunr.QueryLexer.EDIT_DISTANCE = 'EDIT_DISTANCE'
-lunr.QueryLexer.BOOST = 'BOOST'
-lunr.QueryLexer.PRESENCE = 'PRESENCE'
-
-lunr.QueryLexer.lexField = function (lexer) {
-  lexer.backup()
-  lexer.emit(lunr.QueryLexer.FIELD)
-  lexer.ignore()
-  return lunr.QueryLexer.lexText
-}
-
-lunr.QueryLexer.lexTerm = function (lexer) {
-  if (lexer.width() > 1) {
-    lexer.backup()
-    lexer.emit(lunr.QueryLexer.TERM)
-  }
-
-  lexer.ignore()
-
-  if (lexer.more()) {
-    return lunr.QueryLexer.lexText
-  }
-}
-
-lunr.QueryLexer.lexEditDistance = function (lexer) {
-  lexer.ignore()
-  lexer.acceptDigitRun()
-  lexer.emit(lunr.QueryLexer.EDIT_DISTANCE)
-  return lunr.QueryLexer.lexText
-}
-
-lunr.QueryLexer.lexBoost = function (lexer) {
-  lexer.ignore()
-  lexer.acceptDigitRun()
-  lexer.emit(lunr.QueryLexer.BOOST)
-  return lunr.QueryLexer.lexText
-}
-
-lunr.QueryLexer.lexEOS = function (lexer) {
-  if (lexer.width() > 0) {
-    lexer.emit(lunr.QueryLexer.TERM)
-  }
-}
-
-// This matches the separator used when tokenising fields
-// within a document. These should match otherwise it is
-// not possible to search for some tokens within a document.
-//
-// It is possible for the user to change the separator on the
-// tokenizer so it _might_ clash with any other of the special
-// characters already used within the search string, e.g. :.
-//
-// This means that it is possible to change the separator in
-// such a way that makes some words unsearchable using a search
-// string.
-lunr.QueryLexer.termSeparator = lunr.tokenizer.separator
-
-lunr.QueryLexer.lexText = function (lexer) {
-  while (true) {
-    var char = lexer.next()
-
-    if (char == lunr.QueryLexer.EOS) {
-      return lunr.QueryLexer.lexEOS
-    }
-
-    // Escape character is '\'
-    if (char.charCodeAt(0) == 92) {
-      lexer.escapeCharacter()
-      continue
-    }
-
-    if (char == ":") {
-      return lunr.QueryLexer.lexField
-    }
-
-    if (char == "~") {
-      lexer.backup()
-      if (lexer.width() > 0) {
-        lexer.emit(lunr.QueryLexer.TERM)
-      }
-      return lunr.QueryLexer.lexEditDistance
-    }
-
-    if (char == "^") {
-      lexer.backup()
-      if (lexer.width() > 0) {
-        lexer.emit(lunr.QueryLexer.TERM)
-      }
-      return lunr.QueryLexer.lexBoost
-    }
-
-    // "+" indicates term presence is required
-    // checking for length to ensure that only
-    // leading "+" are considered
-    if (char == "+" && lexer.width() === 1) {
-      lexer.emit(lunr.QueryLexer.PRESENCE)
-      return lunr.QueryLexer.lexText
-    }
-
-    // "-" indicates term presence is prohibited
-    // checking for length to ensure that only
-    // leading "-" are considered
-    if (char == "-" && lexer.width() === 1) {
-      lexer.emit(lunr.QueryLexer.PRESENCE)
-      return lunr.QueryLexer.lexText
-    }
-
-    if (char.match(lunr.QueryLexer.termSeparator)) {
-      return lunr.QueryLexer.lexTerm
-    }
-  }
-}
-
-lunr.QueryParser = function (str, query) {
-  this.lexer = new lunr.QueryLexer (str)
-  this.query = query
-  this.currentClause = {}
-  this.lexemeIdx = 0
-}
-
-lunr.QueryParser.prototype.parse = function () {
-  this.lexer.run()
-  this.lexemes = this.lexer.lexemes
-
-  var state = lunr.QueryParser.parseClause
-
-  while (state) {
-    state = state(this)
-  }
-
-  return this.query
-}
-
-lunr.QueryParser.prototype.peekLexeme = function () {
-  return this.lexemes[this.lexemeIdx]
-}
-
-lunr.QueryParser.prototype.consumeLexeme = function () {
-  var lexeme = this.peekLexeme()
-  this.lexemeIdx += 1
-  return lexeme
-}
-
-lunr.QueryParser.prototype.nextClause = function () {
-  var completedClause = this.currentClause
-  this.query.clause(completedClause)
-  this.currentClause = {}
-}
-
-lunr.QueryParser.parseClause = function (parser) {
-  var lexeme = parser.peekLexeme()
-
-  if (lexeme == undefined) {
-    return
-  }
-
-  switch (lexeme.type) {
-    case lunr.QueryLexer.PRESENCE:
-      return lunr.QueryParser.parsePresence
-    case lunr.QueryLexer.FIELD:
-      return lunr.QueryParser.parseField
-    case lunr.QueryLexer.TERM:
-      return lunr.QueryParser.parseTerm
-    default:
-      var errorMessage = "expected either a field or a term, found " + lexeme.type
-
-      if (lexeme.str.length >= 1) {
-        errorMessage += " with value '" + lexeme.str + "'"
-      }
-
-      throw new lunr.QueryParseError (errorMessage, lexeme.start, lexeme.end)
-  }
-}
-
-lunr.QueryParser.parsePresence = function (parser) {
-  var lexeme = parser.consumeLexeme()
-
-  if (lexeme == undefined) {
-    return
-  }
-
-  switch (lexeme.str) {
-    case "-":
-      parser.currentClause.presence = lunr.Query.presence.PROHIBITED
-      break
-    case "+":
-      parser.currentClause.presence = lunr.Query.presence.REQUIRED
-      break
-    default:
-      var errorMessage = "unrecognised presence operator'" + lexeme.str + "'"
-      throw new lunr.QueryParseError (errorMessage, lexeme.start, lexeme.end)
-  }
-
-  var nextLexeme = parser.peekLexeme()
-
-  if (nextLexeme == undefined) {
-    var errorMessage = "expecting term or field, found nothing"
-    throw new lunr.QueryParseError (errorMessage, lexeme.start, lexeme.end)
-  }
-
-  switch (nextLexeme.type) {
-    case lunr.QueryLexer.FIELD:
-      return lunr.QueryParser.parseField
-    case lunr.QueryLexer.TERM:
-      return lunr.QueryParser.parseTerm
-    default:
-      var errorMessage = "expecting term or field, found '" + nextLexeme.type + "'"
-      throw new lunr.QueryParseError (errorMessage, nextLexeme.start, nextLexeme.end)
-  }
-}
-
-lunr.QueryParser.parseField = function (parser) {
-  var lexeme = parser.consumeLexeme()
-
-  if (lexeme == undefined) {
-    return
-  }
-
-  if (parser.query.allFields.indexOf(lexeme.str) == -1) {
-    var possibleFields = parser.query.allFields.map(function (f) { return "'" + f + "'" }).join(', '),
-        errorMessage = "unrecognised field '" + lexeme.str + "', possible fields: " + possibleFields
-
-    throw new lunr.QueryParseError (errorMessage, lexeme.start, lexeme.end)
-  }
-
-  parser.currentClause.fields = [lexeme.str]
-
-  var nextLexeme = parser.peekLexeme()
-
-  if (nextLexeme == undefined) {
-    var errorMessage = "expecting term, found nothing"
-    throw new lunr.QueryParseError (errorMessage, lexeme.start, lexeme.end)
-  }
-
-  switch (nextLexeme.type) {
-    case lunr.QueryLexer.TERM:
-      return lunr.QueryParser.parseTerm
-    default:
-      var errorMessage = "expecting term, found '" + nextLexeme.type + "'"
-      throw new lunr.QueryParseError (errorMessage, nextLexeme.start, nextLexeme.end)
-  }
-}
-
-lunr.QueryParser.parseTerm = function (parser) {
-  var lexeme = parser.consumeLexeme()
-
-  if (lexeme == undefined) {
-    return
-  }
-
-  parser.currentClause.term = lexeme.str.toLowerCase()
-
-  if (lexeme.str.indexOf("*") != -1) {
-    parser.currentClause.usePipeline = false
-  }
-
-  var nextLexeme = parser.peekLexeme()
-
-  if (nextLexeme == undefined) {
-    parser.nextClause()
-    return
-  }
-
-  switch (nextLexeme.type) {
-    case lunr.QueryLexer.TERM:
-      parser.nextClause()
-      return lunr.QueryParser.parseTerm
-    case lunr.QueryLexer.FIELD:
-      parser.nextClause()
-      return lunr.QueryParser.parseField
-    case lunr.QueryLexer.EDIT_DISTANCE:
-      return lunr.QueryParser.parseEditDistance
-    case lunr.QueryLexer.BOOST:
-      return lunr.QueryParser.parseBoost
-    case lunr.QueryLexer.PRESENCE:
-      parser.nextClause()
-      return lunr.QueryParser.parsePresence
-    default:
-      var errorMessage = "Unexpected lexeme type '" + nextLexeme.type + "'"
-      throw new lunr.QueryParseError (errorMessage, nextLexeme.start, nextLexeme.end)
-  }
-}
-
-lunr.QueryParser.parseEditDistance = function (parser) {
-  var lexeme = parser.consumeLexeme()
-
-  if (lexeme == undefined) {
-    return
-  }
-
-  var editDistance = parseInt(lexeme.str, 10)
-
-  if (isNaN(editDistance)) {
-    var errorMessage = "edit distance must be numeric"
-    throw new lunr.QueryParseError (errorMessage, lexeme.start, lexeme.end)
-  }
-
-  parser.currentClause.editDistance = editDistance
-
-  var nextLexeme = parser.peekLexeme()
-
-  if (nextLexeme == undefined) {
-    parser.nextClause()
-    return
-  }
-
-  switch (nextLexeme.type) {
-    case lunr.QueryLexer.TERM:
-      parser.nextClause()
-      return lunr.QueryParser.parseTerm
-    case lunr.QueryLexer.FIELD:
-      parser.nextClause()
-      return lunr.QueryParser.parseField
-    case lunr.QueryLexer.EDIT_DISTANCE:
-      return lunr.QueryParser.parseEditDistance
-    case lunr.QueryLexer.BOOST:
-      return lunr.QueryParser.parseBoost
-    case lunr.QueryLexer.PRESENCE:
-      parser.nextClause()
-      return lunr.QueryParser.parsePresence
-    default:
-      var errorMessage = "Unexpected lexeme type '" + nextLexeme.type + "'"
-      throw new lunr.QueryParseError (errorMessage, nextLexeme.start, nextLexeme.end)
-  }
-}
-
-lunr.QueryParser.parseBoost = function (parser) {
-  var lexeme = parser.consumeLexeme()
-
-  if (lexeme == undefined) {
-    return
-  }
-
-  var boost = parseInt(lexeme.str, 10)
-
-  if (isNaN(boost)) {
-    var errorMessage = "boost must be numeric"
-    throw new lunr.QueryParseError (errorMessage, lexeme.start, lexeme.end)
-  }
-
-  parser.currentClause.boost = boost
-
-  var nextLexeme = parser.peekLexeme()
-
-  if (nextLexeme == undefined) {
-    parser.nextClause()
-    return
-  }
-
-  switch (nextLexeme.type) {
-    case lunr.QueryLexer.TERM:
-      parser.nextClause()
-      return lunr.QueryParser.parseTerm
-    case lunr.QueryLexer.FIELD:
-      parser.nextClause()
-      return lunr.QueryParser.parseField
-    case lunr.QueryLexer.EDIT_DISTANCE:
-      return lunr.QueryParser.parseEditDistance
-    case lunr.QueryLexer.BOOST:
-      return lunr.QueryParser.parseBoost
-    case lunr.QueryLexer.PRESENCE:
-      parser.nextClause()
-      return lunr.QueryParser.parsePresence
-    default:
-      var errorMessage = "Unexpected lexeme type '" + nextLexeme.type + "'"
-      throw new lunr.QueryParseError (errorMessage, nextLexeme.start, nextLexeme.end)
-  }
-}
-
-  /**
-   * export the module via AMD, CommonJS or as a browser global
-   * Export code from https://github.com/umdjs/umd/blob/master/returnExports.js
-   */
-  ;(function (root, factory) {
-    if (typeof define === 'function' && define.amd) {
-      // AMD. Register as an anonymous module.
-      define(factory)
-    } else if (typeof exports === 'object') {
-      /**
-       * Node. Does not work with strict CommonJS, but
-       * only CommonJS-like enviroments that support module.exports,
-       * like Node.
-       */
-      module.exports = factory()
-    } else {
-      // Browser globals (root is window)
-      root.lunr = factory()
-    }
-  }(this, function () {
-    /**
-     * Just return a value to define the module export.
-     * This example returns an object, but the module
-     * can return a function as the exported value.
-     */
-    return lunr
-  }))
-})();
diff --git a/registry/vulkan/config/copyright-ccby.txt b/registry/vulkan/config/copyright-ccby.txt
deleted file mode 100644
index 1ffed4b..0000000
--- a/registry/vulkan/config/copyright-ccby.txt
+++ /dev/null
@@ -1,3 +0,0 @@
-Copyright 2014-2021 The Khronos Group Inc.
-
-SPDX-License-Identifier: CC-BY-4.0
diff --git a/registry/vulkan/config/extension-highlighter.rb b/registry/vulkan/config/extension-highlighter.rb
deleted file mode 100644
index b557a01..0000000
--- a/registry/vulkan/config/extension-highlighter.rb
+++ /dev/null
@@ -1,10 +0,0 @@
-# Copyright 2016-2021 The Khronos Group Inc.
-#
-# SPDX-License-Identifier: Apache-2.0
-
-RUBY_ENGINE == 'opal' ? (require 'extension-highlighter/extension') : (require_relative 'extension-highlighter/extension')
-
-Extensions.register do
-  preprocessor ExtensionHighlighterPreprocessor
-  postprocessor AddHighlighterCSS
-end
diff --git a/registry/vulkan/config/extension-highlighter/extension.rb b/registry/vulkan/config/extension-highlighter/extension.rb
deleted file mode 100644
index 62e9a6c..0000000
--- a/registry/vulkan/config/extension-highlighter/extension.rb
+++ /dev/null
@@ -1,303 +0,0 @@
-# Copyright 2016-2021 The Khronos Group Inc.
-#
-# SPDX-License-Identifier: Apache-2.0
-
-require 'asciidoctor/extensions' unless RUBY_ENGINE == 'opal'
-
-include ::Asciidoctor
-
-module Asciidoctor
-
-# Duplicate of "AnyListRx" defined by asciidoctor
-# Detects the start of any list item.
-#
-# NOTE we only have to check as far as the blank character because we know it means non-whitespace follows.
-HighlighterAnyListRx = /^(?:#{CG_BLANK}*(?:-|([*.\u2022])\1{0,4}|\d+\.|[a-zA-Z]\.|[IVXivx]+\))#{CG_BLANK}|#{CG_BLANK}*.*?(?::{2,4}|;;)(?:$|#{CG_BLANK})|<?\d+>#{CG_BLANK})/
-
-class ExtensionHighlighterPreprocessorReader < PreprocessorReader
-  def initialize document, diff_extensions, data = nil, cursor = nil
-    super(document, data, cursor)
-    @status_stack = []
-    @diff_extensions = diff_extensions
-    @tracking_target = nil
-  end
-
-  # This overrides the default preprocessor reader conditional logic such
-  # that any extensions which need highlighting and are enabled have their
-  # ifdefs left intact.
-  def preprocess_conditional_directive directive, target, delimiter, text
-    # If we're tracking a target for highlighting already, don't need to do
-    # additional processing unless we hit the end of that conditional
-    # section
-    # NOTE: This will break if for some absurd reason someone nests the same
-    # conditional inside itself.
-    if @tracking_target != nil && directive == 'endif' && @tracking_target == target.downcase
-      @tracking_target = nil
-    elsif @tracking_target
-      return super(directive, target, delimiter, text)
-    end
-
-    # If it's an ifdef or ifndef, push the directive onto a stack
-    # If it's an endif, pop the last one off.
-    # This is done to apply the next bit of logic to both the start and end
-    # of an conditional block correctly
-    status = directive
-    if directive == 'endif'
-      status = @status_stack.pop
-    else
-      @status_stack.push status
-    end
-
-    # If the status is negative, we need to still include the conditional
-    # text for the highlighter, so we replace the requirement for the
-    # extension attribute in question to be not defined with an
-    # always-undefined attribute, so that it evaluates to true when it needs
-    # to.
-    # Undefined attribute is currently just the extension with "_undefined"
-    # appended to it.
-    modified_target = target.downcase
-    if status == 'ifndef'
-      @diff_extensions.each do | extension |
-        modified_target.gsub!(extension, extension + '_undefined')
-      end
-    end
-
-    # Call the original preprocessor
-    result = super(directive, modified_target, delimiter, text)
-
-    # If any of the extensions are in the target, and the conditional text
-    # isn't flagged to be skipped, return false to prevent the preprocessor
-    # from removing the line from the processed source.
-    unless @skipping
-      @diff_extensions.each do | extension |
-        if target.downcase.include?(extension)
-          if directive != 'endif'
-            @tracking_target = target.downcase
-          end
-          return false
-        end
-      end
-    end
-    return result
-  end
-
-  # Identical to preprocess_conditional_directive, but older versions of
-  # Asciidoctor used a different name, so this is there to override the same
-  # method in older versions.
-  # This is a pure c+p job for awkward inheritance reasons (see use of
-  # the super() keyword :|)
-  # At some point, will rewrite to avoid this mess, but this fixes things
-  # for now without breaking things for anyone.
-  def preprocess_conditional_inclusion directive, target, delimiter, text
-    # If we're tracking a target for highlighting already, don't need to do
-    # additional processing unless we hit the end of that conditional
-    # section
-    # NOTE: This will break if for some absurd reason someone nests the same
-    # conditional inside itself.
-    if @tracking_target != nil && directive == 'endif' && @tracking_target == target.downcase
-      @tracking_target = nil
-    elsif @tracking_target
-      return super(directive, target, delimiter, text)
-    end
-
-    # If it's an ifdef or ifndef, push the directive onto a stack
-    # If it's an endif, pop the last one off.
-    # This is done to apply the next bit of logic to both the start and end
-    # of an conditional block correctly
-    status = directive
-    if directive == 'endif'
-      status = @status_stack.pop
-    else
-      @status_stack.push status
-    end
-
-    # If the status is negative, we need to still include the conditional
-    # text for the highlighter, so we replace the requirement for the
-    # extension attribute in question to be not defined with an
-    # always-undefined attribute, so that it evaluates to true when it needs
-    # to.
-    # Undefined attribute is currently just the extension with "_undefined"
-    # appended to it.
-    modified_target = target.downcase
-    if status == 'ifndef'
-      @diff_extensions.each do | extension |
-        modified_target.gsub!(extension, extension + '_undefined')
-      end
-    end
-
-    # Call the original preprocessor
-    result = super(directive, modified_target, delimiter, text)
-
-    # If any of the extensions are in the target, and the conditional text
-    # isn't flagged to be skipped, return false to prevent the preprocessor
-    # from removing the line from the processed source.
-    unless @skipping
-      @diff_extensions.each do | extension |
-        if target.downcase.include?(extension)
-          if directive != 'endif'
-            @tracking_target = target.downcase
-          end
-          return false
-        end
-      end
-    end
-    return result
-  end
-end
-
-class Highlighter
-  def initialize
-    @delimiter_stack = []
-    @current_anchor = 1
-  end
-
-  def highlight_marks line, previous_line, next_line
-    if !(line.start_with? 'endif')
-      # Any intact "ifdefs" are sections added by an extension, and
-      # "ifndefs" are sections removed.
-      # Currently don't track *which* extension(s) is/are responsible for
-      # the addition or removal - though it would be possible to add it.
-      if line.start_with? 'ifdef'
-        role = 'added'
-      else # if line.start_with? 'ifndef'
-        role = 'removed'
-      end
-
-      # Create an anchor with the current anchor number
-      anchor = '[[difference' + @current_anchor.to_s + ']]'
-
-      # Figure out which markup to use based on the surrounding text
-      # This is robust enough as far as I can tell, though we may want to do
-      # something more generic later since currently it relies on the fact
-      # that if you start inside a list or paragraph, you'll end in the same
-      # list or paragraph and not cross to other blocks.
-      # In practice it *might just work* but it also might not.
-      # May need to consider what to do about this in future - maybe just
-      # use open blocks for everything?
-      highlight_delimiter = :inline
-      if (HighlighterAnyListRx.match(next_line) != nil)
-        # NOTE: There's a corner case here that should never be hit (famous last words)
-        # If a line in the middle of a paragraph begins with an asterisk and
-        # then whitespace, this will think it's a list item and use the
-        # wrong delimiter.
-        # That shouldn't be a problem in practice though, it just might look
-        # a little weird.
-        highlight_delimiter = :list
-      elsif previous_line.strip.empty?
-        highlight_delimiter = :block
-      end
-
-      # Add the delimiter to the stack for the matching 'endif' to consume
-      @delimiter_stack.push highlight_delimiter
-
-      # Add an appropriate method of delimiting the highlighted areas based
-      # on the surrounding text determined above.
-      if highlight_delimiter == :block
-        return ['', anchor, ":role: #{role}", '']
-      elsif highlight_delimiter == :list
-        return ['', anchor, "[.#{role}]", '~~~~~~~~~~~~~~~~~~~~', '']
-      else #if highlight_delimiter == :inline
-        return [anchor + ' [.' + role + ']##']
-      end
-    else  # if !(line.start_with? 'endif')
-      # Increment the anchor when we see a matching endif, and generate a
-      # link to the next diff section
-      @current_anchor = @current_anchor + 1
-      anchor_link = '<<difference' + @current_anchor.to_s + ', =>>>'
-
-      # Close the delimited area according to the previously determined
-      # delimiter
-      highlight_delimiter = @delimiter_stack.pop
-      if highlight_delimiter == :block
-        return [anchor_link, '', ':role:', '']
-      elsif highlight_delimiter == :list
-        return [anchor_link, '~~~~~~~~~~~~~~~~~~~~', '']
-      else #if highlight_delimiter == :inline
-        return [anchor_link + '##']
-      end
-    end
-  end
-end
-
-# Preprocessor hook to iterate over ifdefs to prevent them from affecting asciidoctor's processing.
-class ExtensionHighlighterPreprocessor < Extensions::Preprocessor
-  def process document, reader
-
-    # Only attempt to highlight extensions that are also enabled - if one
-    # isn't, warn about it and skip highlighting that extension.
-    diff_extensions = document.attributes['diff_extensions'].downcase.split(' ')
-    actual_diff_extensions = []
-    diff_extensions.each do | extension |
-      if document.attributes.has_key?(extension)
-        actual_diff_extensions << extension
-      else
-        puts 'The ' + extension + ' extension is not enabled - changes will not be highlighted.'
-      end
-    end
-
-    # Create a new reader to return, which leaves extension ifdefs that need highlighting intact beyond the preprocess step.
-    extension_preprocessor_reader = ExtensionHighlighterPreprocessorReader.new(document, actual_diff_extensions, reader.lines)
-
-    highlighter = Highlighter.new
-    new_lines = []
-
-    # Store the old lines so we can reference them in a non-trivial fashion
-    old_lines = extension_preprocessor_reader.read_lines()
-    old_lines.each_index do | index |
-
-      # Grab the previously processed line
-      # This is used by the highlighter to figure out if the highlight will
-      # be inline, or part of a block.
-      if index > 0
-        previous_line = old_lines[index - 1]
-      else
-        previous_line = ''
-      end
-
-      # Current line to process
-      line = old_lines[index]
-
-      # Grab the next line to process
-      # This is used by the highlighter to figure out if the highlight is
-      # between list elements or not - which need special handling.
-      if index < (old_lines.length - 1)
-        next_line = old_lines[index + 1]
-      else
-        next_line = ''
-      end
-
-      # Highlight any preprocessor directives that were left intact by the
-      # custom preprocessor reader.
-      if line.start_with?( 'ifdef::', 'ifndef::', 'endif::')
-        new_lines += highlighter.highlight_marks(line, previous_line, next_line)
-      else
-        new_lines << line
-      end
-    end
-
-    # Return a new reader after preprocessing - this takes care of creating
-    # the AST from the new source.
-    Reader.new(new_lines)
-  end
-end
-
-class AddHighlighterCSS < Extensions::Postprocessor
-  HighlighterStyleCSS = [
-    '.added {',
-    '    background-color: lime;',
-    '    border-color: green;',
-    '    padding:1px;',
-    '}',
-    '.removed {',
-    '    background-color: pink;',
-    '    border-color: red;',
-    '    padding:1px;',
-    '}',
-    '</style>']
-
-  def process document, output
-    output.sub! '</style>', HighlighterStyleCSS.join("\n")
-  end
-end
-
-end
diff --git a/registry/vulkan/config/fonts/mplus1p-regular-fallback.ttf b/registry/vulkan/config/fonts/mplus1p-regular-fallback.ttf
deleted file mode 100644
index d9d2e3d..0000000
--- a/registry/vulkan/config/fonts/mplus1p-regular-fallback.ttf
+++ /dev/null
Binary files differ
diff --git a/registry/vulkan/config/katex_replace.rb b/registry/vulkan/config/katex_replace.rb
deleted file mode 100644
index f134b39..0000000
--- a/registry/vulkan/config/katex_replace.rb
+++ /dev/null
@@ -1,11 +0,0 @@
-# Copyright 2016-2021 The Khronos Group Inc.
-#
-# SPDX-License-Identifier: Apache-2.0
-
-#require 'asciidoctor/extensions' unless RUBY_ENGINE == 'opal'
-RUBY_ENGINE == 'opal' ? (require 'katex_replace/extension') : (require_relative 'katex_replace/extension')
-
-# All the inline macros we need
-Asciidoctor::Extensions.register do
-    postprocessor ReplaceMathjaxWithKatex
-end
diff --git a/registry/vulkan/config/katex_replace/extension.rb b/registry/vulkan/config/katex_replace/extension.rb
deleted file mode 100644
index ad4948f..0000000
--- a/registry/vulkan/config/katex_replace/extension.rb
+++ /dev/null
@@ -1,44 +0,0 @@
-# Copyright 2016-2021 The Khronos Group Inc.
-#
-# SPDX-License-Identifier: Apache-2.0
-
-require 'asciidoctor/extensions' unless RUBY_ENGINE == 'opal'
-
-include ::Asciidoctor
-
-class ReplaceMathjaxWithKatex < Extensions::Postprocessor
-
-  MathJaXScript = /<script type="text\/x-mathjax-config">((?!<\/script>).)+<\/script>/m
-  MathJaXCDN = /<script src="https:\/\/cdnjs.cloudflare.com\/ajax\/libs\/mathjax\/[0-9].[0-9].[0-9]\/MathJax.js\?config=[-_A-Za-z]+"><\/script>/m
-
-  def process document, output
-
-    if document.attr? 'stem'
-      katexpath = document.attr 'katexpath'
-
-      katexScript = '
-<!-- dragged in by font-awesome css included by asciidoctor, but preloaded in this extension for convenience -->
-<link rel="preload" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/fonts/fontawesome-webfont.woff2?v=4.7.0" as="font" type="font/woff2" crossorigin="">
-
-<!-- Note: Chrome needs crossorigin="" even for same-origin fonts -->
-<link rel="preload" href="../katex/fonts/KaTeX_Main-Bold.woff2" as="font" type="font/woff2" crossorigin="">
-<link rel="preload" href="../katex/fonts/KaTeX_Main-Italic.woff2" as="font" type="font/woff2" crossorigin="">
-<link rel="preload" href="../katex/fonts/KaTeX_Main-Regular.woff2" as="font" type="font/woff2" crossorigin="">
-<link rel="preload" href="../katex/fonts/KaTeX_Math-Italic.woff2" as="font" type="font/woff2" crossorigin="">
-<link rel="preload" href="../katex/fonts/KaTeX_Size1-Regular.woff2" as="font" type="font/woff2" crossorigin="">
-<link rel="preload" href="../katex/fonts/KaTeX_Size2-Regular.woff2" as="font" type="font/woff2" crossorigin="">
-<link rel="preload" href="../katex/fonts/KaTeX_Size3-Regular.woff2" as="font" type="font/woff2" crossorigin="">
-<link rel="preload" href="../katex/fonts/KaTeX_Size4-Regular.woff2" as="font" type="font/woff2" crossorigin="">
-<link rel="preload" href="../katex/fonts/KaTeX_Typewriter-Regular.woff2" as="font" type="font/woff2" crossorigin="">'
-
-      # Load KaTeX stylesheet, but we no longer run a script to convert math
-      # using KaTeX, since that's now done at spec generation time.
-      katexScript += '<link rel="stylesheet" href="' + katexpath + '/katex.min.css">'
-
-      output.sub! MathJaXScript, ''
-      output.sub! MathJaXCDN, ''
-      output.sub! /(?=<\/head>)/, katexScript
-    end
-    output
-  end
-end
diff --git a/registry/vulkan/config/khronos.css b/registry/vulkan/config/khronos.css
deleted file mode 100644
index 2530f3d..0000000
--- a/registry/vulkan/config/khronos.css
+++ /dev/null
@@ -1,732 +0,0 @@
-/*! normalize.css v2.1.2 | MIT License | git.io/normalize */
-/* ========================================================================== HTML5 display definitions ========================================================================== */
-/** Correct `block` display not defined in IE 8/9. */
-article, aside, details, figcaption, figure, footer, header, hgroup, main, nav, section, summary { display: block; }
-
-/** Correct `inline-block` display not defined in IE 8/9. */
-audio, canvas, video { display: inline-block; }
-
-/** Prevent modern browsers from displaying `audio` without controls. Remove excess height in iOS 5 devices. */
-audio:not([controls]) { display: none; height: 0; }
-
-/** Address `[hidden]` styling not present in IE 8/9. Hide the `template` element in IE, Safari, and Firefox < 22. */
-[hidden], template { display: none; }
-
-script { display: none !important; }
-
-/* ========================================================================== Base ========================================================================== */
-/** 1. Set default font family to sans-serif. 2. Prevent iOS text size adjust after orientation change, without disabling user zoom. */
-html { font-family: sans-serif; /* 1 */ -ms-text-size-adjust: 100%; /* 2 */ -webkit-text-size-adjust: 100%; /* 2 */ }
-
-/** Remove default margin. */
-body { margin: 0; }
-
-/* ========================================================================== Links ========================================================================== */
-/** Remove the gray background color from active links in IE 10. */
-a { background: transparent; }
-
-/** Address `outline` inconsistency between Chrome and other browsers. */
-a:focus { outline: thin dotted; }
-
-/** Improve readability when focused and also mouse hovered in all browsers. */
-a:active, a:hover { outline: 0; }
-
-/* ========================================================================== Typography ========================================================================== */
-/** Address variable `h1` font-size and margin within `section` and `article` contexts in Firefox 4+, Safari 5, and Chrome. */
-h1 { font-size: 2em; margin: 0.67em 0; }
-
-/** Address styling not present in IE 8/9, Safari 5, and Chrome. */
-abbr[title] { border-bottom: 1px dotted; }
-
-/** Address style set to `bolder` in Firefox 4+, Safari 5, and Chrome. */
-b, strong { font-weight: bold; }
-
-/** Address styling not present in Safari 5 and Chrome. */
-dfn { font-style: italic; }
-
-/** Address differences between Firefox and other browsers. */
-hr { -moz-box-sizing: content-box; box-sizing: content-box; height: 0; }
-
-/** Address styling not present in IE 8/9. */
-mark { background: #ff0; color: #000; }
-
-/** Correct font family set oddly in Safari 5 and Chrome. */
-code, kbd, pre, samp { font-family: monospace, serif; font-size: 1em; }
-
-/** Improve readability of pre-formatted text in all browsers. */
-pre { white-space: pre-wrap; }
-
-/** Set consistent quote types. */
-q { quotes: "\201C" "\201D" "\2018" "\2019"; }
-
-/** Address inconsistent and variable font size in all browsers. */
-small { font-size: 80%; }
-
-/** Prevent `sub` and `sup` affecting `line-height` in all browsers. */
-sub, sup { font-size: 75%; line-height: 0; position: relative; vertical-align: baseline; }
-
-sup { top: -0.5em; }
-
-sub { bottom: -0.25em; }
-
-/* ========================================================================== Embedded content ========================================================================== */
-/** Remove border when inside `a` element in IE 8/9. */
-img { border: 0; }
-
-/** Correct overflow displayed oddly in IE 9. */
-svg:not(:root) { overflow: hidden; }
-
-/* ========================================================================== Figures ========================================================================== */
-/** Address margin not present in IE 8/9 and Safari 5. */
-figure { margin: 0; }
-
-/* ========================================================================== Forms ========================================================================== */
-/** Define consistent border, margin, and padding. */
-fieldset { border: 1px solid #c0c0c0; margin: 0 2px; padding: 0.35em 0.625em 0.75em; }
-
-/** 1. Correct `color` not being inherited in IE 8/9. 2. Remove padding so people aren't caught out if they zero out fieldsets. */
-legend { border: 0; /* 1 */ padding: 0; /* 2 */ }
-
-/** 1. Correct font family not being inherited in all browsers. 2. Correct font size not being inherited in all browsers. 3. Address margins set differently in Firefox 4+, Safari 5, and Chrome. */
-button, input, select, textarea { font-family: inherit; /* 1 */ font-size: 100%; /* 2 */ margin: 0; /* 3 */ }
-
-/** Address Firefox 4+ setting `line-height` on `input` using `!important` in the UA stylesheet. */
-button, input { line-height: normal; }
-
-/** Address inconsistent `text-transform` inheritance for `button` and `select`. All other form control elements do not inherit `text-transform` values. Correct `button` style inheritance in Chrome, Safari 5+, and IE 8+. Correct `select` style inheritance in Firefox 4+ and Opera. */
-button, select { text-transform: none; }
-
-/** 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio` and `video` controls. 2. Correct inability to style clickable `input` types in iOS. 3. Improve usability and consistency of cursor style between image-type `input` and others. */
-button, html input[type="button"], input[type="reset"], input[type="submit"] { -webkit-appearance: button; /* 2 */ cursor: pointer; /* 3 */ }
-
-/** Re-set default cursor for disabled elements. */
-button[disabled], html input[disabled] { cursor: default; }
-
-/** 1. Address box sizing set to `content-box` in IE 8/9. 2. Remove excess padding in IE 8/9. */
-input[type="checkbox"], input[type="radio"] { box-sizing: border-box; /* 1 */ padding: 0; /* 2 */ }
-
-/** 1. Address `appearance` set to `searchfield` in Safari 5 and Chrome. 2. Address `box-sizing` set to `border-box` in Safari 5 and Chrome (include `-moz` to future-proof). */
-input[type="search"] { -webkit-appearance: textfield; /* 1 */ -moz-box-sizing: content-box; -webkit-box-sizing: content-box; /* 2 */ box-sizing: content-box; }
-
-/** Remove inner padding and search cancel button in Safari 5 and Chrome on OS X. */
-input[type="search"]::-webkit-search-cancel-button, input[type="search"]::-webkit-search-decoration { -webkit-appearance: none; }
-
-/** Remove inner padding and border in Firefox 4+. */
-button::-moz-focus-inner, input::-moz-focus-inner { border: 0; padding: 0; }
-
-/** 1. Remove default vertical scrollbar in IE 8/9. 2. Improve readability and alignment in all browsers. */
-textarea { overflow: auto; /* 1 */ vertical-align: top; /* 2 */ }
-
-/* ========================================================================== Tables ========================================================================== */
-/** Remove most spacing between table cells. */
-table { border-collapse: collapse; border-spacing: 0; }
-
-meta.foundation-mq-small { font-family: "only screen and (min-width: 768px)"; width: 768px; }
-
-meta.foundation-mq-medium { font-family: "only screen and (min-width:1280px)"; width: 1280px; }
-
-meta.foundation-mq-large { font-family: "only screen and (min-width:1440px)"; width: 1440px; }
-
-*, *:before, *:after { -moz-box-sizing: border-box; -webkit-box-sizing: border-box; box-sizing: border-box; }
-
-html, body { font-size: 100%; }
-
-body { background: #fff; color: #222; padding: 0; margin: 0; font-family: "Helvetica Neue", "Helvetica", Helvetica, Arial, sans-serif; font-weight: normal; font-style: normal; line-height: 1; position: relative; cursor: auto; }
-
-a:hover { cursor: pointer; }
-
-img, object, embed { max-width: 100%; height: auto; }
-
-object, embed { height: 100%; }
-
-img { -ms-interpolation-mode: bicubic; }
-
-#map_canvas img, #map_canvas embed, #map_canvas object, .map_canvas img, .map_canvas embed, .map_canvas object { max-width: none !important; }
-
-.left { float: left !important; }
-
-.right { float: right !important; }
-
-.text-left { text-align: left !important; }
-
-.text-right { text-align: right !important; }
-
-.text-center { text-align: center !important; }
-
-.text-justify { text-align: justify !important; }
-
-.hide { display: none; }
-
-.antialiased { -webkit-font-smoothing: antialiased; }
-
-img { display: inline-block; vertical-align: middle; }
-
-textarea { height: auto; min-height: 50px; }
-
-select { width: 100%; }
-
-object, svg { display: inline-block; vertical-align: middle; }
-
-.center { margin-left: auto; margin-right: auto; }
-
-.spread { width: 100%; }
-
-p.lead, .paragraph.lead > p, #preamble > .sectionbody > .paragraph:first-of-type p { font-size: 1.21875em; line-height: 1.6; }
-
-.subheader, .admonitionblock td.content > .title, .audioblock > .title, .exampleblock > .title, .imageblock > .title, .listingblock > .title, .literalblock > .title, .stemblock > .title, .openblock > .title, .paragraph > .title, .quoteblock > .title, table.tableblock > .title, .verseblock > .title, .videoblock > .title, .dlist > .title, .olist > .title, .ulist > .title, .qlist > .title, .hdlist > .title { line-height: 1.4; color: black; font-weight: 300; margin-top: 0.2em; margin-bottom: 0.5em; }
-
-/* Typography resets */
-div, dl, dt, dd, ul, ol, li, h1, h2, h3, #toctitle, .sidebarblock > .content > .title, h4, h5, h6, pre, form, p, blockquote, th, td { margin: 0; padding: 0; direction: ltr; }
-
-/* Default Link Styles */
-a { color: #0068b0; text-decoration: none; line-height: inherit; }
-a:hover, a:focus { color: #333; }
-a img { border: none; }
-
-/* Default paragraph styles */
-p { font-family: Noto, sans-serif; font-weight: normal; font-size: 1em; line-height: 1.6; margin-bottom: 0.75em; text-rendering: optimizeLegibility; }
-p aside { font-size: 0.875em; line-height: 1.35; font-style: italic; }
-
-/* Default header styles */
-h1, h2, h3, #toctitle, .sidebarblock > .content > .title, h4, h5, h6 { font-family: Noto, sans-serif; font-weight: normal; font-style: normal; color: black; text-rendering: optimizeLegibility; margin-top: 0.5em; margin-bottom: 0.5em; line-height: 1.2125em; }
-h1 small, h2 small, h3 small, #toctitle small, .sidebarblock > .content > .title small, h4 small, h5 small, h6 small { font-size: 60%; color: #4d4d4d; line-height: 0; }
-
-h1 { font-size: 2.125em; }
-
-h2 { font-size: 1.6875em; }
-
-h3, #toctitle, .sidebarblock > .content > .title { font-size: 1.375em; }
-
-h4 { font-size: 1.125em; }
-
-h5 { font-size: 1.125em; }
-
-h6 { font-size: 1em; }
-
-hr { border: solid #ddd; border-width: 1px 0 0; clear: both; margin: 1.25em 0 1.1875em; height: 0; }
-
-/* Helpful Typography Defaults */
-em, i { font-style: italic; line-height: inherit; }
-
-strong, b { font-weight: bold; line-height: inherit; }
-
-small { font-size: 60%; line-height: inherit; }
-
-code { font-family: Consolas, "Liberation Mono", Courier, monospace; font-weight: normal; color: #264357; }
-
-/* Lists */
-ul, ol, dl { font-size: 1em; line-height: 1.6; margin-bottom: 0.75em; list-style-position: outside; font-family: Noto, sans-serif; }
-
-ul, ol { margin-left: 1.5em; }
-ul.no-bullet, ol.no-bullet { margin-left: 1.5em; }
-
-/* Unordered Lists */
-ul li ul, ul li ol { margin-left: 1.25em; margin-bottom: 0; font-size: 1em; /* Override nested font-size change */ }
-ul.square li ul, ul.circle li ul, ul.disc li ul { list-style: inherit; }
-ul.square { list-style-type: square; }
-ul.circle { list-style-type: circle; }
-ul.disc { list-style-type: disc; }
-ul.no-bullet { list-style: none; }
-
-/* Ordered Lists */
-ol li ul, ol li ol { margin-left: 1.25em; margin-bottom: 0; }
-
-/* Definition Lists */
-dl dt { margin-bottom: 0.3em; font-weight: bold; }
-dl dd { margin-bottom: 0.75em; }
-
-/* Abbreviations */
-abbr, acronym { text-transform: uppercase; font-size: 90%; color: black; border-bottom: 1px dotted #ddd; cursor: help; }
-
-abbr { text-transform: none; }
-
-/* Blockquotes */
-blockquote { margin: 0 0 0.75em; padding: 0.5625em 1.25em 0 1.1875em; border-left: 1px solid #ddd; }
-blockquote cite { display: block; font-size: 0.8125em; color: #365E7A; }
-blockquote cite:before { content: "\2014 \0020"; }
-blockquote cite a, blockquote cite a:visited { color: #365E7A; }
-
-blockquote, blockquote p { line-height: 1.6; color: #333; }
-
-/* Microformats */
-.vcard { display: inline-block; margin: 0 0 1.25em 0; border: 1px solid #ddd; padding: 0.625em 0.75em; }
-.vcard li { margin: 0; display: block; }
-.vcard .fn { font-weight: bold; font-size: 0.9375em; }
-
-.vevent .summary { font-weight: bold; }
-.vevent abbr { cursor: auto; text-decoration: none; font-weight: bold; border: none; padding: 0 0.0625em; }
-
-@media only screen and (min-width: 768px) { h1, h2, h3, #toctitle, .sidebarblock > .content > .title, h4, h5, h6 { line-height: 1.4; }
-  h1 { font-size: 2.75em; }
-  h2 { font-size: 2.3125em; }
-  h3, #toctitle, .sidebarblock > .content > .title { font-size: 1.6875em; }
-  h4 { font-size: 1.4375em; } }
-/* Tables */
-table { background: #fff; margin-bottom: 1.25em; border: solid 1px #d8d8ce; }
-table thead, table tfoot { background: #eee; font-weight: bold; }
-table thead tr th, table thead tr td, table tfoot tr th, table tfoot tr td { padding: 0.5em 0.625em 0.625em; font-size: inherit; color: #222; text-align: left; }
-table tr th, table tr td { padding: 0.5625em 0.625em; font-size: inherit; color: #6d6e71; }
-table tr.even, table tr.alt, table tr:nth-of-type(even) { background: #f8f8f8; }
-table thead tr th, table tfoot tr th, table tbody tr td, table tr td, table tfoot tr td { display: table-cell; line-height: 1.4; }
-
-body { -moz-osx-font-smoothing: grayscale; -webkit-font-smoothing: antialiased; tab-size: 4; }
-
-h1, h2, h3, #toctitle, .sidebarblock > .content > .title, h4, h5, h6 { line-height: 1.4; }
-
-a:hover, a:focus { text-decoration: underline; }
-
-.clearfix:before, .clearfix:after, .float-group:before, .float-group:after { content: " "; display: table; }
-.clearfix:after, .float-group:after { clear: both; }
-
-*:not(pre) > code { font-size: inherit; font-style: normal !important; letter-spacing: 0; padding: 0; background-color: transparent; -webkit-border-radius: 0; border-radius: 0; line-height: inherit; word-wrap: break-word; }
-*:not(pre) > code.nobreak { word-wrap: normal; }
-*:not(pre) > code.nowrap { white-space: nowrap; }
-
-pre, pre > code { line-height: 1.6; color: #264357; font-family: Consolas, "Liberation Mono", Courier, monospace; font-weight: normal; }
-
-em em { font-style: normal; }
-
-strong strong { font-weight: normal; }
-
-.keyseq { color: #333333; }
-
-kbd { font-family: Consolas, "Liberation Mono", Courier, monospace; display: inline-block; color: black; font-size: 0.65em; line-height: 1.45; background-color: #f7f7f7; border: 1px solid #ccc; -webkit-border-radius: 3px; border-radius: 3px; -moz-box-shadow: 0 1px 0 rgba(0, 0, 0, 0.2), 0 0 0 0.1em white inset; -webkit-box-shadow: 0 1px 0 rgba(0, 0, 0, 0.2), 0 0 0 0.1em white inset; box-shadow: 0 1px 0 rgba(0, 0, 0, 0.2), 0 0 0 0.1em white inset; margin: 0 0.15em; padding: 0.2em 0.5em; vertical-align: middle; position: relative; top: -0.1em; white-space: nowrap; }
-
-.keyseq kbd:first-child { margin-left: 0; }
-
-.keyseq kbd:last-child { margin-right: 0; }
-
-.menuseq, .menuref { color: #000; }
-
-.menuseq b:not(.caret), .menuref { font-weight: inherit; }
-
-.menuseq { word-spacing: -0.02em; }
-.menuseq b.caret { font-size: 1.25em; line-height: 0.8; }
-.menuseq i.caret { font-weight: bold; text-align: center; width: 0.45em; }
-
-b.button:before, b.button:after { position: relative; top: -1px; font-weight: normal; }
-
-b.button:before { content: "["; padding: 0 3px 0 2px; }
-
-b.button:after { content: "]"; padding: 0 2px 0 3px; }
-
-#header, #content, #footnotes, #footer { width: 100%; margin-left: auto; margin-right: auto; margin-top: 0; margin-bottom: 0; max-width: 62.5em; *zoom: 1; position: relative; padding-left: 1.5em; padding-right: 1.5em; }
-#header:before, #header:after, #content:before, #content:after, #footnotes:before, #footnotes:after, #footer:before, #footer:after { content: " "; display: table; }
-#header:after, #content:after, #footnotes:after, #footer:after { clear: both; }
-
-#content { margin-top: 1.25em; }
-
-#content:before { content: none; }
-
-#header > h1:first-child { color: black; margin-top: 2.25rem; margin-bottom: 0; }
-#header > h1:first-child + #toc { margin-top: 8px; border-top: 1px solid #ddd; }
-#header > h1:only-child, body.toc2 #header > h1:nth-last-child(2) { border-bottom: 1px solid #ddd; padding-bottom: 8px; }
-#header .details { border-bottom: 1px solid #ddd; line-height: 1.45; padding-top: 0.25em; padding-bottom: 0.25em; padding-left: 0.25em; color: #365E7A; display: -ms-flexbox; display: -webkit-flex; display: flex; -ms-flex-flow: row wrap; -webkit-flex-flow: row wrap; flex-flow: row wrap; }
-#header .details span:first-child { margin-left: -0.125em; }
-#header .details span.email a { color: #333; }
-#header .details br { display: none; }
-#header .details br + span:before { content: "\00a0\2013\00a0"; }
-#header .details br + span.author:before { content: "\00a0\22c5\00a0"; color: #333; }
-#header .details br + span#revremark:before { content: "\00a0|\00a0"; }
-#header #revnumber { text-transform: capitalize; }
-#header #revnumber:after { content: "\00a0"; }
-
-#content > h1:first-child:not([class]) { color: black; border-bottom: 1px solid #ddd; padding-bottom: 8px; margin-top: 0; padding-top: 1rem; margin-bottom: 1.25rem; }
-
-#toc { border-bottom: 0 solid #ddd; padding-bottom: 0.5em; }
-#toc > ul { margin-left: 0.125em; }
-#toc ul.sectlevel0 > li > a { font-style: italic; }
-#toc ul.sectlevel0 ul.sectlevel1 { margin: 0.5em 0; }
-#toc ul { font-family: Noto, sans-serif; list-style-type: none; }
-#toc li { line-height: 1.3334; margin-top: 0.3334em; }
-#toc a { text-decoration: none; }
-#toc a:active { text-decoration: underline; }
-
-#toctitle { color: black; font-size: 1.2em; }
-
-@media only screen and (min-width: 768px) { #toctitle { font-size: 1.375em; }
-  body.toc2 { padding-left: 15em; padding-right: 0; }
-  #toc.toc2 { margin-top: 0 !important; background-color: #fff; position: fixed; width: 15em; left: 0; top: 0; border-right: 1px solid #ddd; border-top-width: 0 !important; border-bottom-width: 0 !important; z-index: 1000; padding: 1.25em 1em; height: 100%; overflow: auto; }
-  #toc.toc2 #toctitle { margin-top: 0; margin-bottom: 0.8rem; font-size: 1.2em; }
-  #toc.toc2 > ul { font-size: 0.9em; margin-bottom: 0; }
-  #toc.toc2 ul ul { margin-left: 0; padding-left: 1em; }
-  #toc.toc2 ul.sectlevel0 ul.sectlevel1 { padding-left: 0; margin-top: 0.5em; margin-bottom: 0.5em; }
-  body.toc2.toc-right { padding-left: 0; padding-right: 15em; }
-  body.toc2.toc-right #toc.toc2 { border-right-width: 0; border-left: 1px solid #ddd; left: auto; right: 0; } }
-@media only screen and (min-width: 1280px) { body.toc2 { padding-left: 20em; padding-right: 0; }
-  #toc.toc2 { width: 20em; }
-  #toc.toc2 #toctitle { font-size: 1.375em; }
-  #toc.toc2 > ul { font-size: 0.95em; }
-  #toc.toc2 ul ul { padding-left: 1.25em; }
-  body.toc2.toc-right { padding-left: 0; padding-right: 20em; } }
-#content #toc { border-style: solid; border-width: 1px; border-color: #e6e6e6; margin-bottom: 1.25em; padding: 1.25em; background: #fff; -webkit-border-radius: 0; border-radius: 0; }
-#content #toc > :first-child { margin-top: 0; }
-#content #toc > :last-child { margin-bottom: 0; }
-
-#footer { max-width: 100%; background-color: none; padding: 1.25em; }
-
-#footer-text { color: black; line-height: 1.44; }
-
-#content { margin-bottom: 0.625em; }
-
-.sect1 { padding-bottom: 0.625em; }
-
-@media only screen and (min-width: 768px) { #content { margin-bottom: 1.25em; }
-  .sect1 { padding-bottom: 1.25em; } }
-.sect1:last-child { padding-bottom: 0; }
-
-.sect1 + .sect1 { border-top: 0 solid #ddd; }
-
-#content h1 > a.anchor, h2 > a.anchor, h3 > a.anchor, #toctitle > a.anchor, .sidebarblock > .content > .title > a.anchor, h4 > a.anchor, h5 > a.anchor, h6 > a.anchor { position: absolute; z-index: 1001; width: 1.5ex; margin-left: -1.5ex; display: block; text-decoration: none !important; visibility: hidden; text-align: center; font-weight: normal; }
-#content h1 > a.anchor:before, h2 > a.anchor:before, h3 > a.anchor:before, #toctitle > a.anchor:before, .sidebarblock > .content > .title > a.anchor:before, h4 > a.anchor:before, h5 > a.anchor:before, h6 > a.anchor:before { content: "\00A7"; font-size: 0.85em; display: block; padding-top: 0.1em; }
-#content h1:hover > a.anchor, #content h1 > a.anchor:hover, h2:hover > a.anchor, h2 > a.anchor:hover, h3:hover > a.anchor, #toctitle:hover > a.anchor, .sidebarblock > .content > .title:hover > a.anchor, h3 > a.anchor:hover, #toctitle > a.anchor:hover, .sidebarblock > .content > .title > a.anchor:hover, h4:hover > a.anchor, h4 > a.anchor:hover, h5:hover > a.anchor, h5 > a.anchor:hover, h6:hover > a.anchor, h6 > a.anchor:hover { visibility: visible; }
-#content h1 > a.link, h2 > a.link, h3 > a.link, #toctitle > a.link, .sidebarblock > .content > .title > a.link, h4 > a.link, h5 > a.link, h6 > a.link { color: black; text-decoration: none; }
-#content h1 > a.link:hover, h2 > a.link:hover, h3 > a.link:hover, #toctitle > a.link:hover, .sidebarblock > .content > .title > a.link:hover, h4 > a.link:hover, h5 > a.link:hover, h6 > a.link:hover { color: black; }
-
-.audioblock, .imageblock, .literalblock, .listingblock, .stemblock, .videoblock { margin-bottom: 1.25em; }
-
-.admonitionblock td.content > .title, .audioblock > .title, .exampleblock > .title, .imageblock > .title, .listingblock > .title, .literalblock > .title, .stemblock > .title, .openblock > .title, .paragraph > .title, .quoteblock > .title, table.tableblock > .title, .verseblock > .title, .videoblock > .title, .dlist > .title, .olist > .title, .ulist > .title, .qlist > .title, .hdlist > .title { text-rendering: optimizeLegibility; text-align: left; }
-
-table.tableblock > caption.title { white-space: nowrap; overflow: visible; max-width: 0; }
-
-.paragraph.lead > p, #preamble > .sectionbody > .paragraph:first-of-type p { color: black; }
-
-table.tableblock #preamble > .sectionbody > .paragraph:first-of-type p { font-size: inherit; }
-
-.admonitionblock > table { border-collapse: separate; border: 0; background: none; width: 100%; }
-.admonitionblock > table td.icon { text-align: center; width: 80px; }
-.admonitionblock > table td.icon img { max-width: initial; }
-.admonitionblock > table td.icon .title { font-weight: bold; font-family: Noto, sans-serif; text-transform: uppercase; }
-.admonitionblock > table td.content { padding-left: 1.125em; padding-right: 1.25em; border-left: 1px solid #ddd; color: #365E7A; }
-.admonitionblock > table td.content > :last-child > :last-child { margin-bottom: 0; }
-
-.exampleblock > .content { border-style: solid; border-width: 1px; border-color: #e6e6e6; margin-bottom: 1.25em; padding: 1.25em; background: #fff; -webkit-border-radius: 0; border-radius: 0; }
-.exampleblock > .content > :first-child { margin-top: 0; }
-.exampleblock > .content > :last-child { margin-bottom: 0; }
-
-.sidebarblock { border-style: solid; border-width: 1px; border-color: #e6e6e6; margin-bottom: 1.25em; padding: 1.25em; background: #fff; -webkit-border-radius: 0; border-radius: 0; }
-.sidebarblock > :first-child { margin-top: 0; }
-.sidebarblock > :last-child { margin-bottom: 0; }
-.sidebarblock > .content > .title { color: black; margin-top: 0; }
-
-.exampleblock > .content > :last-child > :last-child, .exampleblock > .content .olist > ol > li:last-child > :last-child, .exampleblock > .content .ulist > ul > li:last-child > :last-child, .exampleblock > .content .qlist > ol > li:last-child > :last-child, .sidebarblock > .content > :last-child > :last-child, .sidebarblock > .content .olist > ol > li:last-child > :last-child, .sidebarblock > .content .ulist > ul > li:last-child > :last-child, .sidebarblock > .content .qlist > ol > li:last-child > :last-child { margin-bottom: 0; }
-
-.literalblock pre, .listingblock pre:not(.highlight), .listingblock pre[class="highlight"], .listingblock pre[class^="highlight "], .listingblock pre.CodeRay, .listingblock pre.prettyprint { background: #eee; }
-.sidebarblock .literalblock pre, .sidebarblock .listingblock pre:not(.highlight), .sidebarblock .listingblock pre[class="highlight"], .sidebarblock .listingblock pre[class^="highlight "], .sidebarblock .listingblock pre.CodeRay, .sidebarblock .listingblock pre.prettyprint { background: #f2f1f1; }
-
-.literalblock pre, .literalblock pre[class], .listingblock pre, .listingblock pre[class] { border: 1px hidden #666; -webkit-border-radius: 0; border-radius: 0; word-wrap: break-word; padding: 1.25em 1.5625em 1.125em 1.5625em; font-size: 0.8125em; }
-.literalblock pre.nowrap, .literalblock pre[class].nowrap, .listingblock pre.nowrap, .listingblock pre[class].nowrap { overflow-x: auto; white-space: pre; word-wrap: normal; }
-@media only screen and (min-width: 768px) { .literalblock pre, .literalblock pre[class], .listingblock pre, .listingblock pre[class] { font-size: 0.90625em; } }
-@media only screen and (min-width: 1280px) { .literalblock pre, .literalblock pre[class], .listingblock pre, .listingblock pre[class] { font-size: 1em; } }
-
-.literalblock.output pre { color: #eee; background-color: #264357; }
-
-.listingblock pre.highlightjs { padding: 0; }
-.listingblock pre.highlightjs > code { padding: 1.25em 1.5625em 1.125em 1.5625em; -webkit-border-radius: 0; border-radius: 0; }
-
-.listingblock > .content { position: relative; }
-
-.listingblock code[data-lang]:before { display: none; content: attr(data-lang); position: absolute; font-size: 0.75em; top: 0.425rem; right: 0.5rem; line-height: 1; text-transform: uppercase; color: #999; }
-
-.listingblock:hover code[data-lang]:before { display: block; }
-
-.listingblock.terminal pre .command:before { content: attr(data-prompt); padding-right: 0.5em; color: #999; }
-
-.listingblock.terminal pre .command:not([data-prompt]):before { content: "$"; }
-
-table.pyhltable { border-collapse: separate; border: 0; margin-bottom: 0; background: none; }
-
-table.pyhltable td { vertical-align: top; padding-top: 0; padding-bottom: 0; line-height: 1.6; }
-
-table.pyhltable td.code { padding-left: .75em; padding-right: 0; }
-
-pre.pygments .lineno, table.pyhltable td:not(.code) { color: #999; padding-left: 0; padding-right: .5em; border-right: 1px solid #ddd; }
-
-pre.pygments .lineno { display: inline-block; margin-right: .25em; }
-
-table.pyhltable .linenodiv { background: none !important; padding-right: 0 !important; }
-
-.quoteblock { margin: 0 1em 0.75em 1.5em; display: table; }
-.quoteblock > .title { margin-left: -1.5em; margin-bottom: 0.75em; }
-.quoteblock blockquote, .quoteblock blockquote p { color: #333; font-size: 1.15rem; line-height: 1.75; word-spacing: 0.1em; letter-spacing: 0; font-style: italic; text-align: justify; }
-.quoteblock blockquote { margin: 0; padding: 0; border: 0; }
-.quoteblock blockquote:before { content: "\201c"; float: left; font-size: 2.75em; font-weight: bold; line-height: 0.6em; margin-left: -0.6em; color: black; text-shadow: 0 1px 2px rgba(0, 0, 0, 0.1); }
-.quoteblock blockquote > .paragraph:last-child p { margin-bottom: 0; }
-.quoteblock .attribution { margin-top: 0.5em; margin-right: 0.5ex; text-align: right; }
-.quoteblock .quoteblock { margin-left: 0; margin-right: 0; padding: 0.5em 0; border-left: 3px solid #365E7A; }
-.quoteblock .quoteblock blockquote { padding: 0 0 0 0.75em; }
-.quoteblock .quoteblock blockquote:before { display: none; }
-
-.verseblock { margin: 0 1em 0.75em 1em; }
-.verseblock pre { font-family: "Open Sans", "DejaVu Sans", sans; font-size: 1.15rem; color: #333; font-weight: 300; text-rendering: optimizeLegibility; }
-.verseblock pre strong { font-weight: 400; }
-.verseblock .attribution { margin-top: 1.25rem; margin-left: 0.5ex; }
-
-.quoteblock .attribution, .verseblock .attribution { font-size: 0.8125em; line-height: 1.45; font-style: italic; }
-.quoteblock .attribution br, .verseblock .attribution br { display: none; }
-.quoteblock .attribution cite, .verseblock .attribution cite { display: block; letter-spacing: -0.025em; color: #365E7A; }
-
-.quoteblock.abstract { margin: 0 0 0.75em 0; display: block; }
-.quoteblock.abstract blockquote, .quoteblock.abstract blockquote p { text-align: left; word-spacing: 0; }
-.quoteblock.abstract blockquote:before, .quoteblock.abstract blockquote p:first-of-type:before { display: none; }
-
-table.tableblock { max-width: 100%; border-collapse: separate; }
-table.tableblock td > .paragraph:last-child p > p:last-child, table.tableblock th > p:last-child, table.tableblock td > p:last-child { margin-bottom: 0; }
-
-table.tableblock, th.tableblock, td.tableblock { border: 0 solid #d8d8ce; }
-
-table.grid-all > thead > tr > .tableblock, table.grid-all > tbody > tr > .tableblock { border-width: 0 1px 1px 0; }
-
-table.grid-all > tfoot > tr > .tableblock { border-width: 1px 1px 0 0; }
-
-table.grid-cols > * > tr > .tableblock { border-width: 0 1px 0 0; }
-
-table.grid-rows > thead > tr > .tableblock, table.grid-rows > tbody > tr > .tableblock { border-width: 0 0 1px 0; }
-
-table.grid-rows > tfoot > tr > .tableblock { border-width: 1px 0 0 0; }
-
-table.grid-all > * > tr > .tableblock:last-child, table.grid-cols > * > tr > .tableblock:last-child { border-right-width: 0; }
-
-table.grid-all > tbody > tr:last-child > .tableblock, table.grid-all > thead:last-child > tr > .tableblock, table.grid-rows > tbody > tr:last-child > .tableblock, table.grid-rows > thead:last-child > tr > .tableblock { border-bottom-width: 0; }
-
-table.frame-all { border-width: 1px; }
-
-table.frame-sides { border-width: 0 1px; }
-
-table.frame-topbot { border-width: 1px 0; }
-
-th.halign-left, td.halign-left { text-align: left; }
-
-th.halign-right, td.halign-right { text-align: right; }
-
-th.halign-center, td.halign-center { text-align: center; }
-
-th.valign-top, td.valign-top { vertical-align: top; }
-
-th.valign-bottom, td.valign-bottom { vertical-align: bottom; }
-
-th.valign-middle, td.valign-middle { vertical-align: middle; }
-
-table thead th, table tfoot th { font-weight: bold; }
-
-tbody tr th { display: table-cell; line-height: 1.4; background: #eee; }
-
-tbody tr th, tbody tr th p, tfoot tr th, tfoot tr th p { color: #222; font-weight: bold; }
-
-p.tableblock > code:only-child { background: none; padding: 0; }
-
-p.tableblock { font-size: 1em; }
-
-td > div.verse { white-space: pre; }
-
-ol { margin-left: 1.75em; }
-
-ul li ol { margin-left: 1.5em; }
-
-dl dd { margin-left: 1.125em; }
-
-dl dd:last-child, dl dd:last-child > :last-child { margin-bottom: 0; }
-
-ol > li p, ul > li p, ul dd, ol dd, .olist .olist, .ulist .ulist, .ulist .olist, .olist .ulist { margin-bottom: 0.375em; }
-
-ul.checklist, ul.none, ol.none, ul.no-bullet, ol.no-bullet, ol.unnumbered, ul.unstyled, ol.unstyled { list-style-type: none; }
-
-ul.no-bullet, ol.no-bullet, ol.unnumbered { margin-left: 0.625em; }
-
-ul.unstyled, ol.unstyled { margin-left: 0; }
-
-ul.checklist { margin-left: 0.625em; }
-
-ul.checklist li > p:first-child > .fa-square-o:first-child, ul.checklist li > p:first-child > .fa-check-square-o:first-child { width: 1.25em; font-size: 0.8em; position: relative; bottom: 0.125em; }
-
-ul.checklist li > p:first-child > input[type="checkbox"]:first-child { margin-right: 0.25em; }
-
-ul.inline { display: -ms-flexbox; display: -webkit-box; display: flex; -ms-flex-flow: row wrap; -webkit-flex-flow: row wrap; flex-flow: row wrap; list-style: none; margin: 0 0 0.375em -0.75em; }
-
-ul.inline > li { margin-left: 0.75em; }
-
-.unstyled dl dt { font-weight: normal; font-style: normal; }
-
-ol.arabic { list-style-type: decimal; }
-
-ol.decimal { list-style-type: decimal-leading-zero; }
-
-ol.loweralpha { list-style-type: lower-alpha; }
-
-ol.upperalpha { list-style-type: upper-alpha; }
-
-ol.lowerroman { list-style-type: lower-roman; }
-
-ol.upperroman { list-style-type: upper-roman; }
-
-ol.lowergreek { list-style-type: lower-greek; }
-
-.hdlist > table, .colist > table { border: 0; background: none; }
-.hdlist > table > tbody > tr, .colist > table > tbody > tr { background: none; }
-
-td.hdlist1, td.hdlist2 { vertical-align: top; padding: 0 0.625em; }
-
-td.hdlist1 { font-weight: bold; padding-bottom: 0.75em; }
-
-.literalblock + .colist, .listingblock + .colist { margin-top: -0.5em; }
-
-.colist > table tr > td:first-of-type { padding: 0.4em 0.75em 0 0.75em; line-height: 1; vertical-align: top; }
-.colist > table tr > td:first-of-type img { max-width: initial; }
-.colist > table tr > td:last-of-type { padding: 0.25em 0; }
-
-.thumb, .th { line-height: 0; display: inline-block; border: solid 4px #fff; -webkit-box-shadow: 0 0 0 1px #ddd; box-shadow: 0 0 0 1px #ddd; }
-
-.imageblock.left, .imageblock[style*="float: left"] { margin: 0.25em 0.625em 1.25em 0; }
-.imageblock.right, .imageblock[style*="float: right"] { margin: 0.25em 0 1.25em 0.625em; }
-.imageblock > .title { margin-bottom: 0; }
-.imageblock.thumb, .imageblock.th { border-width: 6px; }
-.imageblock.thumb > .title, .imageblock.th > .title { padding: 0 0.125em; }
-
-.image.left, .image.right { margin-top: 0.25em; margin-bottom: 0.25em; display: inline-block; line-height: 0; }
-.image.left { margin-right: 0.625em; }
-.image.right { margin-left: 0.625em; }
-
-a.image { text-decoration: none; display: inline-block; }
-a.image object { pointer-events: none; }
-
-sup.footnote, sup.footnoteref { font-size: 0.875em; position: static; vertical-align: super; }
-sup.footnote a, sup.footnoteref a { text-decoration: none; }
-sup.footnote a:active, sup.footnoteref a:active { text-decoration: underline; }
-
-#footnotes { padding-top: 0.75em; padding-bottom: 0.75em; margin-bottom: 0.625em; }
-#footnotes hr { width: 20%; min-width: 6.25em; margin: -0.25em 0 0.75em 0; border-width: 1px 0 0 0; }
-#footnotes .footnote { padding: 0 0.375em 0 0.225em; line-height: 1.3334; font-size: 0.875em; margin-left: 1.2em; margin-bottom: 0.2em; }
-#footnotes .footnote a:first-of-type { font-weight: bold; text-decoration: none; margin-left: -1.05em; }
-#footnotes .footnote:last-of-type { margin-bottom: 0; }
-#content #footnotes { margin-top: -0.625em; margin-bottom: 0; padding: 0.75em 0; }
-
-.gist .file-data > table { border: 0; background: #fff; width: 100%; margin-bottom: 0; }
-.gist .file-data > table td.line-data { width: 99%; }
-
-div.unbreakable { page-break-inside: avoid; }
-
-.big { font-size: larger; }
-
-.small { font-size: smaller; }
-
-.underline { text-decoration: underline; }
-
-.overline { text-decoration: overline; }
-
-.line-through { text-decoration: line-through; }
-
-.aqua { color: #00bfbf; }
-
-.aqua-background { background-color: #00fafa; }
-
-.black { color: black; }
-
-.black-background { background-color: black; }
-
-.blue { color: #0000bf; }
-
-.blue-background { background-color: #0000fa; }
-
-.fuchsia { color: #bf00bf; }
-
-.fuchsia-background { background-color: #fa00fa; }
-
-.gray { color: #606060; }
-
-.gray-background { background-color: #7d7d7d; }
-
-.green { color: #006000; }
-
-.green-background { background-color: #007d00; }
-
-.lime { color: #00bf00; }
-
-.lime-background { background-color: #00fa00; }
-
-.maroon { color: #600000; }
-
-.maroon-background { background-color: #7d0000; }
-
-.navy { color: #000060; }
-
-.navy-background { background-color: #00007d; }
-
-.olive { color: #606000; }
-
-.olive-background { background-color: #7d7d00; }
-
-.purple { color: #600060; }
-
-.purple-background { background-color: #7d007d; }
-
-.red { color: #bf0000; }
-
-.red-background { background-color: #fa0000; }
-
-.silver { color: #909090; }
-
-.silver-background { background-color: #bcbcbc; }
-
-.teal { color: #006060; }
-
-.teal-background { background-color: #007d7d; }
-
-.white { color: #bfbfbf; }
-
-.white-background { background-color: #fafafa; }
-
-.yellow { color: #bfbf00; }
-
-.yellow-background { background-color: #fafa00; }
-
-span.icon > .fa { cursor: default; }
-a span.icon > .fa { cursor: inherit; }
-
-.admonitionblock td.icon [class^="fa icon-"] { font-size: 2.5em; text-shadow: 1px 1px 2px rgba(0, 0, 0, 0.5); cursor: default; }
-.admonitionblock td.icon .icon-note:before { content: "\f05a"; color: #29475c; }
-.admonitionblock td.icon .icon-tip:before { content: "\f0eb"; text-shadow: 1px 1px 2px rgba(155, 155, 0, 0.8); color: #111; }
-.admonitionblock td.icon .icon-warning:before { content: "\f071"; color: #bf6900; }
-.admonitionblock td.icon .icon-caution:before { content: "\f06d"; color: #bf3400; }
-.admonitionblock td.icon .icon-important:before { content: "\f06a"; color: #bf0000; }
-
-.conum[data-value] { display: inline-block; color: #fff !important; background-color: black; -webkit-border-radius: 100px; border-radius: 100px; text-align: center; font-size: 0.75em; width: 1.67em; height: 1.67em; line-height: 1.67em; font-family: "Open Sans", "DejaVu Sans", sans-serif; font-style: normal; font-weight: bold; }
-.conum[data-value] * { color: #fff !important; }
-.conum[data-value] + b { display: none; }
-.conum[data-value]:after { content: attr(data-value); }
-pre .conum[data-value] { position: relative; top: -0.125em; }
-
-b.conum * { color: inherit !important; }
-
-.conum:not([data-value]):empty { display: none; }
-
-h1, h2, h3, #toctitle, .sidebarblock > .content > .title, h4, h5, h6 { border-bottom: 1px solid #ddd; }
-
-.sect1 { padding-bottom: 0; }
-
-#toctitle { color: #00406F; font-weight: normal; margin-top: 1.5em; }
-
-.sidebarblock { border-color: #aaa; }
-
-code { -webkit-border-radius: 4px; border-radius: 4px; }
-
-p.tableblock.header { color: #6d6e71; }
-
-.literalblock pre, .listingblock pre { background: #eee; }
-
-/* From https://github.com/KhronosGroup/Vulkan-Docs/pull/901 */
-a code { color: inherit; }
-
-/* From https://github.com/KhronosGroup/Vulkan-Docs/pull/1157 */
-/* Make VUID anchor handles*/
-li > p > a[id^="VUID-"] { visibility: hidden; position: absolute; z-index: 1001; width: 2.2ex; margin-left: -2.2ex; display: block; text-decoration: none !important; text-align: center; font-weight: normal; }
-
-li > p > a[id^="VUID-"]:before { content: "\00A7"; font-size: 1em; display: block; padding-top: 0em; background: #fff; }
-
-li > p:hover > a[id^="VUID-"], li > p > a[id^="VUID-"]:hover { visibility: visible; }
-
-li > p > a[id^="VUID-"].link { color: black; text-decoration: none; }
-
-/* TODO: not quite sure what these two do */
-li > p > a[id^="VUID-"].link:hover { color: black; }
-
-.vuid { color: #4d4d4d; font-family: monospace; }
diff --git a/registry/vulkan/config/loadable_html.rb b/registry/vulkan/config/loadable_html.rb
deleted file mode 100644
index 4fcb945..0000000
--- a/registry/vulkan/config/loadable_html.rb
+++ /dev/null
@@ -1,11 +0,0 @@
-# Copyright 2016-2018 The Khronos Group Inc.
-#
-# SPDX-License-Identifier: Apache-2.0
-
-#require 'asciidoctor/extensions' unless RUBY_ENGINE == 'opal'
-RUBY_ENGINE == 'opal' ? (require 'loadable_html/extension') : (require_relative 'loadable_html/extension')
-
-# All the inline macros we need
-Asciidoctor::Extensions.register do
-    postprocessor MakeHtmlLoadable
-end
diff --git a/registry/vulkan/config/loadable_html/extension.rb b/registry/vulkan/config/loadable_html/extension.rb
deleted file mode 100644
index 84cbe62..0000000
--- a/registry/vulkan/config/loadable_html/extension.rb
+++ /dev/null
@@ -1,72 +0,0 @@
-# Copyright 2016-2018 The Khronos Group Inc.
-#
-# SPDX-License-Identifier: Apache-2.0
-
-# This script adds CSS and markup to indicate the document is (perhaps
-# slowly) loading. It also inserts HTML comments marking where JavaScript
-# and HTML specific to the chunked HTML output target should be inserted.
-
-require 'asciidoctor/extensions' unless RUBY_ENGINE == 'opal'
-
-include ::Asciidoctor
-
-class MakeHtmlLoadable < Extensions::Postprocessor
-
-  def process document, output
-
-    if document.attr? 'stem'
-
-      loading_msg = '<div id="loading_msg" class="hidden" hidden><p>Loading&hellip; please wait.</p></div>'
-      loadable_class = 'class="loadable"'
-
-      loaded_script = '
-<!--ChunkedSearchJSMarker-->
-<style>
-    #loading_msg {
-        width: 100%;
-        margin-left: auto;
-        margin-right: auto;
-        margin-top: 1ex;
-        margin-bottom: 1ex;
-        max-width: 62.5em;
-        position: relative;
-        padding-left: 1.5em;
-        padding-right: 1.5em;
-    }
-    .hidden {display: none;}
-</style>
-<script>
-    function hideElement(e){
-        e.setAttribute("hidden", "");
-        e.classList.add("hidden");
-    }
-
-    function unhideElement(e){
-        e.classList.remove("hidden");
-        e.removeAttribute("hidden");
-    }
-
-    function hideLoadableContent(){
-        unhideElement( document.getElementById("loading_msg") );
-        for( var loadable of document.getElementsByClassName("loadable") ) hideElement(loadable);
-    }
-
-    function unhideLoadableContent(){
-        hideElement( document.getElementById("loading_msg") );
-        for( var loadable of document.getElementsByClassName("loadable") ) unhideElement(loadable);
-    }
-
-    window.addEventListener("load", unhideLoadableContent);
-</script>
-'
-
-      hide_script = '<script>hideLoadableContent();</script>'
-
-      output.sub! /(?=<\/head>)/, loaded_script
-      output.sub! /(<div id="content")/, '\1' + " " + loadable_class + " "
-      output.sub! /(<div id="content".*?>)/, '\1' + hide_script
-      output.sub! /(?=<div id="content")/, loading_msg + "\n" + "<!--ChunkedSearchboxMarker-->\n"
-    end
-    output
-  end
-end
diff --git a/registry/vulkan/config/makeSubmit.py b/registry/vulkan/config/makeSubmit.py
deleted file mode 100755
index a79c2ef..0000000
--- a/registry/vulkan/config/makeSubmit.py
+++ /dev/null
@@ -1,102 +0,0 @@
-#!/usr/bin/env python3
-#
-# Copyright 2016-2021 The Khronos Group Inc.
-#
-# SPDX-License-Identifier: Apache-2.0
-
-# Build Promoter submission package for a specified extension or extensions.
-# This consists of one spec with the extension(s) and all dependencies,
-# one with just the dependencies, and an htmldiff of them.
-#
-# This script lives in config/, but is executed from the parent directory.
-#
-# Usage: makeSubmit extension targets
-
-import argparse, copy, io, os, pdb, re, string, subprocess, sys
-
-def enQuote(str):
-    return '"' + str + '"'
-
-# Make a single submission target. Several are needed per document.
-#
-# outDir - where to generate intermediate and final documents
-# extensionList - list of extensions to include
-# submitName - base name of final HTML file
-# title - document title
-# target - default 'html'
-def makeTarget(outDir, extensionList, submitName, title, target):
-    print('make clean_generated')
-    print('make OUTDIR=' + outDir,
-          'IMAGEOPTS=',
-          'EXTENSIONS="' + ' '.join(extensionList) + '"',
-          'APITITLE="' + title + '"', target)
-    # Rename into submission directory
-    outFile = outDir + '/html/' + submitName + '.html'
-    print('mv', outDir + '/html/vkspec.html', enQuote(outFile))
-    # No longer needed
-    # print('mv -n', outDir + '/katex', 'out/submit/')
-
-    return outFile
-
-# Make submission for a list of required extension names
-def makeSubmit(submitName, required, target='html'):
-    global extensions
-
-    deps = []
-    for name in required:
-        if name in extensions.keys():
-            for depname in extensions[name]:
-                if (depname not in required and depname not in deps):
-                    deps.append(depname)
-
-    print('echo Required extensions:', ' '.join(required))
-    print('echo Dependent extensions:', ' '.join(deps))
-    print('')
-
-    # Generate shell commands to build the specs
-    outDir = 'submit'
-    print('mkdir -p', outDir)
-
-    # Generate spec with required extensions + dependencies
-    newSpec = makeTarget(outDir, required + deps, submitName,
-                         submitName, target)
-
-    # Generate base spec with just dependencies
-    baseSpec = makeTarget(outDir, deps, 'deps-' + submitName,
-                          '(with only dependencies of ' + submitName + ')',
-                          target)
-
-    # # Reorganize and rename them, and generate the diff spec
-    print('')
-    print('cd scripts/htmldiff')
-    print('./htmldiff',
-          enQuote('../../' + baseSpec),
-          enQuote('../../' + newSpec),
-          '>',
-           enQuote('../../submit/html/diff-' + submitName + '.html'))
-    print('cd ../../')
-
-if __name__ == '__main__':
-    parser = argparse.ArgumentParser()
-
-    parser.add_argument('-extension', action='append',
-                        default=[],
-                        help='Specify a required extension or extensions to add to targets')
-    parser.add_argument('-genpath', action='store',
-                        default='gen',
-                        help='Path to directory containing generated extDependency.py module')
-    parser.add_argument('-title', action='store',
-                        default='vkspec',
-                        help='Set the document title')
-
-    results = parser.parse_args()
-
-    # Look for extDependency.py in the specified directory
-    sys.path.insert(0, results.genpath)
-
-    # Ensure gen/extDependency.py is up-to-date before we import it.
-    subprocess.check_call(['make', 'GENERATED=' + results.genpath, 'extDependency'])
-
-    from extDependency import *
-
-    makeSubmit(results.title, results.extension)
diff --git a/registry/vulkan/config/mathtest.txt b/registry/vulkan/config/mathtest.txt
deleted file mode 100644
index 02ff24d..0000000
--- a/registry/vulkan/config/mathtest.txt
+++ /dev/null
@@ -1,953 +0,0 @@
-// Copyright 2015-2021 The Khronos Group Inc.
-//
-// SPDX-License-Identifier: Apache-2.0
-
-= Math Test
-
-This file (vkmath.txt) contains all the latexmath blocks and inlines in the
-Vulkan spec and style guide, so we can see how they're rendered with
-different methods and output formats.
-
-== File chapters/fundamentals.txt
-
-=== latexmath block 1
-
-[latexmath]
-++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-f = { c \over { 2^b - 1 } }
-++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-=== latexmath block 2
-
-[latexmath]
-++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-f = \max\left( {c \over {2^{b-1} - 1}}, -1.0 \right)
-++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-== File chapters/interfaces.txt
-
-=== latexmath inline 1
-
-latexmath:[(x,y,z,\frac{1}{w})]
-
-=== latexmath inline 2
-
-latexmath:[\frac{1}{w}]
-
-== File chapters/primsrast.txt
-
-=== latexmath block 3
-
-[latexmath]
-++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-s = {1 \over 2} + { \left( x_p - x_f \right) \over \text{size} }
-++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-[latexmath]
-++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-t = {1 \over 2} + { \left( y_p - y_f \right) \over \text{size} }
-++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-=== latexmath block 4
-
-[latexmath]
-++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-t = {{( \mathbf{p}_r - \mathbf{p}_a ) \cdot ( \mathbf{p}_b - \mathbf{p}_a )}
-    \over {\| \mathbf{p}_b - \mathbf{p}_a \|^2 }}
-++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-=== latexmath block 5
-
-[latexmath]
-++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-f = {{ (1-t) {f_a / w_a} + t { f_b / w_b} } \over
-    {(1-t) / w_a + t / w_b }}
-++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-=== latexmath block 6
-
-[latexmath]
-++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-a = -{1 \over 2}\sum_{i=0}^{n-1}
-      x_f^i y_f^{i \oplus 1} -
-      x_f^{i \oplus 1} y_f^i
-++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-=== latexmath inline 3
-
-latexmath:[x_f^i] and latexmath:[y_f^i]
-
-=== latexmath block 7
-
-[latexmath]
-++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-a = {{\mathrm{A}(p p_b p_c)} \over {\mathrm{A}(p_a p_b p_c)}}, \quad
-b = {{\mathrm{A}(p p_a p_c)} \over {\mathrm{A}(p_a p_b p_c)}}, \quad
-c = {{\mathrm{A}(p p_a p_b)} \over {\mathrm{A}(p_a p_b p_c)}},
-++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-=== latexmath block 8
-
-[latexmath]
-++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-f = { a {f_a / w_a} + b {f_b / w_b} + c {f_c / w_c} } \over
-    { {a / w_a} + {b / w_b} + {c / w_c} }
-++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-== File chapters/fundamentals.txt
-
-=== latexmath block 9
-
-[latexmath]
-++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-f = { c \over { 2^b - 1 } }
-++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-=== latexmath block 10
-
-[latexmath]
-++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-f = \max\left( {c \over {2^{b-1} - 1}}, -1.0 \right)
-++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-== File chapters/interfaces.txt
-
-=== latexmath inline 4
-
-latexmath:[(x,y,z,\frac{1}{w})]
-
-=== latexmath inline 5
-
-latexmath:[\frac{1}{w}].
-
-== File chapters/primsrast.txt
-
-=== latexmath block 11
-
-[latexmath]
-++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-s = {1 \over 2} + { \left( x_p - x_f \right) \over \text{size} }
-++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-[latexmath]
-++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-t = {1 \over 2} + { \left( y_p - y_f \right) \over \text{size} }
-++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-=== latexmath block 12
-
-[latexmath]
-++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-t = {{( \mathbf{p}_r - \mathbf{p}_a ) \cdot ( \mathbf{p}_b - \mathbf{p}_a )}
-    \over {\| \mathbf{p}_b - \mathbf{p}_a \|^2 }}
-++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-=== latexmath block 13
-
-[latexmath]
-++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-f = {{ (1-t) {f_a / w_a} + t { f_b / w_b} } \over
-    {(1-t) / w_a + t / w_b }}
-++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-=== latexmath block 14
-
-[latexmath]
-++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-a = -{1 \over 2}\sum_{i=0}^{n-1}
-      x_f^i y_f^{i \oplus 1} -
-      x_f^{i \oplus 1} y_f^i
-++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-=== latexmath inline 6
-
-latexmath:[x_f^i] and latexmath:[y_f^i]
-
-=== latexmath block 15
-
-[latexmath]
-++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-a = {{\mathrm{A}(p p_b p_c)} \over {\mathrm{A}(p_a p_b p_c)}}, \quad
-b = {{\mathrm{A}(p p_a p_c)} \over {\mathrm{A}(p_a p_b p_c)}}, \quad
-c = {{\mathrm{A}(p p_a p_b)} \over {\mathrm{A}(p_a p_b p_c)}},
-++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-=== latexmath block 16
-
-[latexmath]
-++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-f = { a {f_a / w_a} + b {f_b / w_b} + c {f_c / w_c} } \over
-    { {a / w_a} + {b / w_b} + {c / w_c} }
-++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-=== latexmath block 17
-
-[latexmath]
-++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-f = \sum_{i=1}^{n} a_i f_i
-++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-=== latexmath inline 7
-
-latexmath:[\sum_{i=1}^{n}a_i = 1].
-
-=== latexmath block 18
-
-[latexmath]
-++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-m = \sqrt{ \left({{\partial z_f} \over {\partial x_f}}\right)^2
-        +  \left({{\partial z_f} \over {\partial y_f}}\right)^2}
-++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-=== latexmath block 19
-
-[latexmath]
-++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-m = \max\left( \left| {{\partial z_f} \over {\partial x_f}} \right|,
-               \left| {{\partial z_f} \over {\partial y_f}} \right| \right)
-++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-=== latexmath block 20
-
-[latexmath]
-++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-o =
-\begin{cases}
-    m \times depthBiasSlopeFactor +
-         r \times depthBiasConstantFactor  & depthBiasClamp = 0\ or\ NaN \\
-    \min(m \times depthBiasSlopeFactor +
-         r \times depthBiasConstantFactor,
-         depthBiasClamp)                   & depthBiasClamp > 0  \\
-    \max(m \times depthBiasSlopeFactor +
-         r \times depthBiasConstantFactor,
-         depthBiasClamp)                   & depthBiasClamp < 0  \\
-\end{cases}
-++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-== File chapters/tessellation.txt
-
-=== latexmath inline 8
-
-latexmath:[\frac{1}{n}, \frac{2}{n}, \ldots, \frac{n-1}{n}]
-
-== File chapters/textures.txt
-
-=== latexmath block 21
-
-[latexmath]
-+++++++++++++++++++
-\begin{aligned}
-N               & = 9  & \text{number of mantissa bits per component} \\
-B               & = 15 & \text{exponent bias} \\
-E_{max}         & = 31 & \text{maximum possible biased exponent value} \\
-sharedexp_{max} & = \frac{(2^N-1)}{2^N} \times 2^{(E_{max}-B)}
-\end{aligned}
-+++++++++++++++++++
-
-=== latexmath block 22
-
-[latexmath]
-+++++++++++++++++++
-\begin{aligned}
-exp' =
-  \begin{cases}
-    \left \lfloor \log_2(max_{clamped}) \right \rfloor + (B+1)
-      & \text{for}\  max_{clamped} > 2^{-(B+1)} \\
-    0
-      & \text{for}\  max_{clamped} \leq 2^{-(B+1)}
-  \end{cases}
-\end{aligned}
-+++++++++++++++++++
-
-=== latexmath block 23
-
-[latexmath]
-+++++++++++++++++++
-\begin{aligned}
-max_{shared} =
-\left \lfloor
-\frac{max_{clamped}}{2^{(exp'-B-N)}}+\frac{1}{2}
-\right \rfloor
-\end{aligned}
-+++++++++++++++++++
-
-=== latexmath block 24
-
-[latexmath]
-+++++++++++++++++++
-\begin{aligned}
-exp_{shared} =
-  \begin{cases}
-    exp'   & \text{for}\  0 \leq max_{shared} < 2^N \\
-    exp'+1 & \text{for}\  max_{shared} = 2^N
-  \end{cases}
-\end{aligned}
-+++++++++++++++++++
-
-=== latexmath block 25
-
-[latexmath]
-+++++++++++++++++++
-\begin{aligned}
-red_{shared} & =
-    \left \lfloor
-    \frac{red_{clamped}}{2^{(exp_{shared}-B-N)}}+ \frac{1}{2}
-    \right \rfloor \\
-green_{shared} & =
-    \left \lfloor
-    \frac{green_{clamped}}{2^{(exp_{shared}-B-N)}}+ \frac{1}{2}
-    \right \rfloor \\
-blue_{shared} & =
-    \left \lfloor
-    \frac{blue_{clamped}}{2^{(exp_{shared}-B-N)}}+ \frac{1}{2}
-    \right \rfloor
-\end{aligned}
-+++++++++++++++++++
-
-=== latexmath block 26
-
-[latexmath]
-+++++++++++++++++++
-\begin{aligned}
-D & = 1.0 &
-  \begin{cases}
-    D_{ref} \leq D & \text{for LEQUAL}   \\
-    D_{ref} \geq D & \text{for GEQUAL}   \\
-    D_{ref} < D    & \text{for LESS}     \\
-    D_{ref} > D    & \text{for GREATER}  \\
-    D_{ref} = D    & \text{for EQUAL}    \\
-    D_{ref} \neq D & \text{for NOTEQUAL} \\
-    true           & \text{for ALWAYS}   \\
-    false          & \text{for NEVER}
-  \end{cases} \\
-D & = 0.0 & \text{otherwise}
-\end{aligned}
-+++++++++++++++++++
-
-=== latexmath block 27
-
-[latexmath]
-+++++++++++++++++++
-\begin{aligned}
-C'_{rgba}[R] & =
-  \begin{cases}
-    C_{rgba}[R] & \text{for RED swizzle}   \\
-    C_{rgba}[G] & \text{for GREEN swizzle} \\
-    C_{rgba}[B] & \text{for BLUE swizzle}  \\
-    C_{rgba}[A] & \text{for ALPHA swizzle} \\
-    0           & \text{for ZERO swizzle}  \\
-    one         & \text{for ONE swizzle} \\
-    C_{rgba}[R] & \text{for IDENTITY swizzle}
-  \end{cases}
-\end{aligned}
-+++++++++++++++++++
-
-=== latexmath block 28
-
-[latexmath]
-+++++++++++++++++++
-\begin{aligned}
-C_{rgba}[R] & \text{is the RED component} \\
-C_{rgba}[G] & \text{is the GREEN component} \\
-C_{rgba}[B] & \text{is the BLUE component} \\
-C_{rgba}[A] & \text{is the ALPHA component} \\
-one         & = 1.0\text{f}  & \text{for floating point components} \\
-one         & = 1              & \text{for integer components}
-\end{aligned}
-+++++++++++++++++++
-
-=== latexmath block 29
-
-[latexmath]
-+++++++++++++++++++
-\begin{aligned}
-dPdx_{i_1,j_0} & = dPdx_{i_0,j_0} & = P_{i_1,j_0} - P_{i_0,j_0}  \\
-dPdx_{i_1,j_1} & = dPdx_{i_0,j_1} & = P_{i_1,j_1} - P_{i_0,j_1}  \\
-\\
-dPdy_{i_0,j_1} & = dPdy_{i_0,j_0} & = P_{i_0,j_1} - P_{i_0,j_0}  \\
-dPdy_{i_1,j_1} & = dPdy_{i_1,j_0} & = P_{i_1,j_1} - P_{i_1,j_0}
-\end{aligned}
-+++++++++++++++++++
-
-=== latexmath block 30
-
-[latexmath]
-+++++++++++++++++++
-\begin{aligned}
-dPdx & =
-  \begin{cases}
-    dPdx_{i_0,j_0} & \text{preferred}\\
-    dPdx_{i_0,j_1}
-  \end{cases} \\
-dPdy & =
-  \begin{cases}
-    dPdy_{i_0,j_0} & \text{preferred}\\
-    dPdy_{i_1,j_0}
-  \end{cases}
-\end{aligned}
-+++++++++++++++++++
-
-=== latexmath block 31
-
-[latexmath]
-+++++++++++++++++++
-\begin{aligned}
-s       & = \frac{s}{q},       & \text{for 1D, 2D, or 3D image} \\
-\\
-t       & = \frac{t}{q},       & \text{for 2D or 3D image} \\
-\\
-r       & = \frac{r}{q},       & \text{for 3D image} \\
-\\
-D_{ref} & = \frac{D_{ref}}{q}, & \text{if provided}
-\end{aligned}
-+++++++++++++++++++
-
-
-=== latexmath block 32
-
-[latexmath]
-+++++++++++++++++++
-\begin{aligned}
-\partial{s}/\partial{x} & = dPdx(s), & \partial{s}/\partial{y} & = dPdy(s), & \text{for 1D, 2D, Cube, or 3D image} \\
-\partial{t}/\partial{x} & = dPdx(t), & \partial{t}/\partial{y} & = dPdy(t), & \text{for 2D, Cube, or 3D image} \\
-\partial{u}/\partial{x} & = dPdx(u), & \partial{u}/\partial{y} & = dPdy(u), & \text{for Cube or 3D image}
-\end{aligned}
-+++++++++++++++++++
-
-=== latexmath block 33
-
-[latexmath]
-++++++++++++++++++++++++
-\begin{aligned}
-s_{face} & =
-    \frac{1}{2} \times \frac{s_c}{|r_c|} + \frac{1}{2} \\
-t_{face} & =
-    \frac{1}{2} \times \frac{t_c}{|r_c|} + \frac{1}{2} \\
-\end{aligned}
-++++++++++++++++++++++++
-
-=== latexmath block 34
-
-[latexmath]
-++++++++++++++++++++++++
-\begin{aligned}
-\frac{\partial{s_{face}}}{\partial{x}} &=
-    \frac{\partial}{\partial{x}} \left ( \frac{1}{2} \times \frac{s_{c}}{|r_{c}|}
-    + \frac{1}{2}\right ) \\
-\frac{\partial{s_{face}}}{\partial{x}} &=
-    \frac{1}{2} \times \frac{\partial}{\partial{x}}
-    \left ( \frac{s_{c}}{|r_{c}|}  \right ) \\
-\frac{\partial{s_{face}}}{\partial{x}} &=
-    \frac{1}{2} \times
-    \left (
-    \frac{
-      |r_{c}| \times \partial{s_c}/\partial{x}
-      -s_c \times {\partial{r_{c}}}/{\partial{x}}}
-    {\left ( r_{c} \right )^2}
-    \right )
-\end{aligned}
-++++++++++++++++++++++++
-
-=== latexmath block 35
-
-[latexmath]
-++++++++++++++++++++++++
-\begin{aligned}
-\frac{\partial{s_{face}}}{\partial{y}} &=
-    \frac{1}{2} \times
-    \left (
-    \frac{
-      |r_{c}| \times \partial{s_c}/\partial{y}
-      -s_c \times {\partial{r_{c}}}/{\partial{y}}}
-    {\left ( r_{c} \right )^2}
-    \right )\\
-\frac{\partial{t_{face}}}{\partial{x}} &=
-    \frac{1}{2} \times
-    \left (
-    \frac{
-      |r_{c}| \times \partial{t_c}/\partial{x}
-      -t_c \times {\partial{r_{c}}}/{\partial{x}}}
-    {\left ( r_{c} \right )^2}
-    \right ) \\
-\frac{\partial{t_{face}}}{\partial{y}} &=
-    \frac{1}{2} \times
-    \left (
-    \frac{
-       |r_{c}| \times \partial{t_c}/\partial{y}
-      -t_c \times {\partial{r_{c}}}/{\partial{y}}}
-    {\left ( r_{c} \right )^2}
-    \right )
-\end{aligned}
-++++++++++++++++++++++++
-
-=== latexmath block 36
-
-[latexmath]
-++++++++++++++++++++++++
-\begin{aligned}
-\rho_{x} & = \sqrt{ m_{ux} ^{2} + m_{vx} ^{2} + m_{wx} ^{2} } \\
-\rho_{y} & = \sqrt{ m_{uy} ^{2} + m_{vy} ^{2} + m_{wy} ^{2} }
-\end{aligned}
-++++++++++++++++++++++++
-
-=== latexmath block 37
-
-  {empty}:: [eq]#f~x~# is continuous and monotonically increasing in each of
-     [eq]#m~ux~#, [eq]#m~vx~#, and [eq]#m~wx~#
-  {empty}:: [eq]#f~y~# is continuous and monotonically increasing in each of
-     [eq]#m~uy~#, [eq]#m~vy~#, and [eq]#m~wy~#
-  {empty}:: [eq]#max({vert}m~ux~{vert}, {vert}m~vx~{vert},
-     {vert}m~wx~{vert}) {leq} f~x~ {leq} {vert}m~ux~{vert} {plus}
-     {vert}m~vx~{vert} {plus} {vert}m~wx~{vert}#
-  {empty}:: [eq]#max({vert}m~uy~{vert}, {vert}m~vy~{vert},
-     {vert}m~wy~{vert}) {leq} f~y~ {leq} {vert}m~uy~{vert} {plus}
-     {vert}m~vy~{vert} {plus} {vert}m~wy~{vert}#
-
-=== latexmath block 38
-
-[latexmath]
-++++++++++++++++++++++++
-\begin{aligned}
-N & = \min \left (\left \lceil \frac{\rho_{max}}{\rho_{min}}  \right \rceil ,max_{Aniso} \right )
-\end{aligned}
-++++++++++++++++++++++++
-
-=== latexmath block 39
-
-[latexmath]
-++++++++++++++++++++++++
-\begin{aligned}
-\lambda_{base}(x,y) & =
-  \begin{cases}
-    shaderOp.Lod                                 & \text{(from optional SPIR-V operand)} \\
-    \log_2 \left ( \frac{\rho_{max}}{N} \right ) & \text{otherwise}
-  \end{cases} \\
-\lambda'(x,y)       & = \lambda_{base} + \mathbin{clamp}(sampler.bias + shaderOp.bias,-maxSamplerLodBias,maxSamplerLodBias) \\
-\lambda             & =
-  \begin{cases}
-    lod_{max}, & \lambda' > lod_{max} \\
-    \lambda',  & lod_{min} \leq \lambda' \leq lod_{max} \\
-    lod_{min}, & \lambda' < lod_{min} \\
-    undefined, & lod_{min} > lod_{max} \\
-  \end{cases}
-\end{aligned}
-++++++++++++++++++++++++
-
-=== latexmath block 40
-
-[latexmath]
-++++++++++++++++++++++++
-\begin{aligned}
-sampler.bias       & = mipLodBias & \text{(from sampler descriptor)} \\
-shaderOp.bias      & =
-  \begin{cases}
-    Bias & \text{(from optional SPIR-V operand)} \\
-    0    & \text{otherwise}
-  \end{cases} \\
-sampler.lod_{min}  & = minLod & \text{(from sampler descriptor)} \\
-shaderOp.lod_{min} & =
-  \begin{cases}
-    MinLod & \text{(from optional SPIR-V operand)} \\
-    0      & \text{otherwise}
-  \end{cases} \\
-\\
-lod_{min}          & = \max(sampler.lod_{min}, shaderOp.lod_{min}) \\
-lod_{max}          & = maxLod & \text{(from sampler descriptor)}
-\end{aligned}
-++++++++++++++++++++++++
-
-=== latexmath block 41
-
-[latexmath]
-++++++++++++++++++++++++
-\begin{aligned}
-d =
-  \begin{cases}
-    level_{base},     & \lambda \leq \frac{1}{2} \\[.5em]
-    nearest(\lambda), & \lambda > \frac{1}{2},
-                        level_{base} + \lambda \leq
-                        q + \frac{1}{2} \\[.5em]
-    q,                & \lambda > \frac{1}{2},
-                        level_{base} + \lambda > q + \frac{1}{2}
-  \end{cases}
-\end{aligned}
-++++++++++++++++++++++++
-
-=== latexmath block 42
-
-[latexmath]
-++++++++++++++++++++++++
-\begin{aligned}
-nearest(\lambda) & =
-  \begin{cases}
-    \left \lceil level_{base}+\lambda + \frac{1}{2}\right \rceil - 1, &
-        \text{preferred} \\
-    \left \lfloor level_{base}+\lambda + \frac{1}{2}\right \rfloor,   &
-        \text{alternative}
-  \end{cases}
-\end{aligned}
-++++++++++++++++++++++++
-
-=== latexmath block 43
-
-[latexmath]
-++++++++++++++++++++++++
-\begin{aligned}
-d_{hi} & =
-  \begin{cases}
-    q,                                                 & level_{base} + \lambda \geq q \\
-    \left \lfloor level_{base}+\lambda \right \rfloor, & \text{otherwise}
-  \end{cases} \\
-d_{lo} & =
-  \begin{cases}
-    q,        & level_{base} + \lambda \geq q \\
-    d_{hi}+1, & \text{otherwise}
-  \end{cases}
-\end{aligned}
-++++++++++++++++++++++++
-
-=== latexmath block 44
-
-[latexmath]
-++++++++++++++++++++++++
-\begin{aligned}
-u(x,y) & = s(x,y) \times width_{level} \\
-v(x,y) & =
-  \begin{cases}
-    0                         & \text{for 1D images} \\
-    t(x,y) \times height_{level} & \text{otherwise}
-  \end{cases} \\
-w(x,y) & =
-  \begin{cases}
-    0                         & \text{for 2D or Cube images} \\
-    r(x,y) \times depth_{level}  & \text{otherwise}
-  \end{cases} \\
-\\
-a(x,y) & =
-  \begin{cases}
-    a(x,y)                    & \text{for array images} \\
-    0                         & \text{otherwise}
-  \end{cases}
-\end{aligned}
-++++++++++++++++++++++++
-
-=== latexmath block 45
-
-[latexmath]
-++++++++++++++++++++++++
-\begin{aligned}
-\mathbin{RNE}(a) & =
-  \begin{cases}
-    \mathbin{roundTiesToEven}(a)                  & \text{preferred, from IEEE Std 754-2008 Floating-Point Arithmetic} \\
-    \left \lfloor a + \frac{1}{2} \right \rfloor & \text{alternative}
-  \end{cases}
-\end{aligned}
-++++++++++++++++++++++++
-
-=== latexmath block 46
-
-[latexmath]
-++++++++++++++++++++++++
-\begin{aligned}
-i &=
-  \begin{cases}
-    i \bmod size                                & \text{for repeat} \\
-    (size-1) - \mathbin{mirror}
-        ((i \bmod (2 \times size)) - size)      & \text{for mirrored repeat} \\
-    \mathbin{clamp}(i,0,size-1)                  & \text{for clamp to edge} \\
-    \mathbin{clamp}(i,-1,size)                   & \text{for clamp to border} \\
-    \mathbin{clamp}(\mathbin{mirror}(i),0,size-1) & \text{for mirror clamp to edge}
-  \end{cases}
-\end{aligned}
-++++++++++++++++++++++++
-
-
-=== latexmath block 47
-
-[latexmath]
-++++++++++++++++++++++++
-\begin{aligned}
-& \mathbin{mirror}(n) =
-  \begin{cases}
-    n      & \text{for}\  n \geq 0 \\
-    -(1+n) & \text{otherwise}
-  \end{cases}
-\end{aligned}
-++++++++++++++++++++++++
-
-=== latexmath block 48
-
-[latexmath]
-++++++++++++++++++++++++
-\begin{aligned}
-\tau[R] &= \tau_{i0j1}[level_{base}][comp] \\
-\tau[G] &= \tau_{i1j1}[level_{base}][comp] \\
-\tau[B] &= \tau_{i1j0}[level_{base}][comp] \\
-\tau[A] &= \tau_{i0j0}[level_{base}][comp]
-\end{aligned}
-++++++++++++++++++++++++
-
-=== latexmath block 49
-
-[latexmath]
-++++++++++++++++++++++++
-\begin{aligned}
-\tau[level_{base}][comp] &=
-  \begin{cases}
-    \tau[level_{base}][R], & \text{for}\  comp = 0 \\
-    \tau[level_{base}][G], & \text{for}\  comp = 1 \\
-    \tau[level_{base}][B], & \text{for}\  comp = 2 \\
-    \tau[level_{base}][A], & \text{for}\  comp = 3
-  \end{cases}\\
-comp & \,\text{from SPIR-V operand Component}
-\end{aligned}
-++++++++++++++++++++++++
-
-=== latexmath block 50
-
-[latexmath]
-++++++++++++++++++++++++
-\begin{aligned}
-\tau[level] &=
-  \begin{cases}
-     \tau_{ijk}[level], & \text{for 3D image} \\
-     \tau_{ij}[level],  & \text{for 2D or Cube image} \\
-     \tau_{i}[level],   & \text{for 1D image}
-   \end{cases}
-\end{aligned}
-++++++++++++++++++++++++
-
-=== latexmath block 51
-
-[latexmath]
-++++++++++++++++++++++++
-\begin{aligned}
-\tau_{3D}[level] & = (1-\alpha)(1-\beta)(1-\gamma)\tau_{i0j0k0}[level] \\
-          & \, + (\alpha)(1-\beta)(1-\gamma)\tau_{i1j0k0}[level] \\
-          & \, + (1-\alpha)(\beta)(1-\gamma)\tau_{i0j1k0}[level] \\
-          & \, + (\alpha)(\beta)(1-\gamma)\tau_{i1j1k0}[level]   \\
-          & \, + (1-\alpha)(1-\beta)(\gamma)\tau_{i0j0k1}[level] \\
-          & \, + (\alpha)(1-\beta)(\gamma)\tau_{i1j0k1}[level]   \\
-          & \, + (1-\alpha)(\beta)(\gamma)\tau_{i0j1k1}[level]   \\
-          & \, + (\alpha)(\beta)(\gamma)\tau_{i1j1k1}[level]
-\end{aligned}
-++++++++++++++++++++++++
-
-=== latexmath block 52
-
-[latexmath]
-++++++++++++++++++++++++
-\begin{aligned}
-\tau_{2D}[level] & = (1-\alpha)(1-\beta)\tau_{i0j0}[level] \\
-          & \, + (\alpha)(1-\beta)\tau_{i1j0}[level] \\
-          & \, + (1-\alpha)(\beta)\tau_{i0j1}[level] \\
-          & \, + (\alpha)(\beta)\tau_{i1j1}[level]
-\end{aligned}
-++++++++++++++++++++++++
-
-=== latexmath block 53
-
-[latexmath]
-++++++++++++++++++++++++
-\begin{aligned}
-\tau_{1D}[level] & = (1-\alpha)\tau_{i0}[level] \\
-          & \, + (\alpha)\tau_{i1}[level]
-\end{aligned}
-++++++++++++++++++++++++
-
-=== latexmath block 54
-
-[latexmath]
-++++++++++++++++++++++++
-\begin{aligned}
-\tau[level] &=
-  \begin{cases}
-     \tau_{3D}[level], & \text{for 3D image} \\
-     \tau_{2D}[level], & \text{for 2D or Cube image} \\
-     \tau_{1D}[level], & \text{for 1D image}
-   \end{cases}
-\end{aligned}
-++++++++++++++++++++++++
-
-=== latexmath block 55
-
-[latexmath]
-++++++++++++++++++++++++
-\begin{aligned}
-\tau &=
-  \begin{cases}
-    \tau[d], & \text{for mip mode BASE or NEAREST} \\
-    (1-\delta)\tau[d_{hi}]+\delta\tau[d_{lo}], & \text{for mip mode LINEAR}
-  \end{cases}
-\end{aligned}
-++++++++++++++++++++++++
-
-=== latexmath block 56
-
-[latexmath]
-++++++++++++++++++++++++
-\begin{aligned}
-\tau_{2Daniso} & =
-     \frac{1}{N}\sum_{i=1}^{N}
-     {\tau_{2D}\left (
-       u \left ( x - \frac{1}{2} + \frac{i}{N+1} , y \right ),
-         \left ( v \left (x-\frac{1}{2}+\frac{i}{N+1} \right ), y
-\right )
-     \right )},
-     & \text{when}\  \rho_{x} > \rho_{y} \\
-\tau_{2Daniso} &=
-     \frac{1}{N}\sum_{i=1}^{N}
-     {\tau_{2D}\left (
-        u \left  ( x, y - \frac{1}{2} + \frac{i}{N+1} \right ),
-          \left ( v \left (x,y-\frac{1}{2}+\frac{i}{N+1} \right )
-\right )
-     \right )},
-     & \text{when}\  \rho_{y} \geq \rho_{x}
-\end{aligned}
-++++++++++++++++++++++++
-
-== File chapters/vertexpostproc.txt
-
-=== latexmath block 57
-
-[latexmath]
-++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-\begin{array}{c}
--w_c \leq x_c \leq w_c \\
--w_c \leq y_c \leq w_c \\
-0 \leq z_c \leq w_c
-\end{array}
-++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-=== latexmath block 58
-
-[latexmath]
-++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-\left(\begin{array}{c}
-x_c \\
-y_c \\
-z_c \\
-w_c
-\end{array}\right)
-++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-=== latexmath block 59
-
-[latexmath]
-++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-\left(
-        \begin{array}{c}
-                x_d \\
-                y_d \\
-                z_d
-        \end{array}
-\right) =
-\left(
-        \begin{array}{c}
-                \frac{x_c}{w_c} \\
-                \frac{y_c}{w_c} \\
-                \frac{z_c}{w_c}
-        \end{array}
-\right)
-++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-=== latexmath inline 12
-
-latexmath:[\frac{k}{2^m - 1}]
-
-== File chapters/VK_IMG_filter_cubic/filter_cubic_texel_filtering.txt
-
-=== latexmath block 60
-
-[latexmath]
-++++++++++++++++++++++++
-\begin{aligned}
-cinterp(\tau_0, \tau_1, \tau_2, \tau_3, \omega) =
-\frac{1}{2}
-\begin{bmatrix}1 & \omega & \omega^2 & \omega^3 \end{bmatrix}
-\times
-\begin{bmatrix}
- 0 &  2 &  0 &  0 \\
--1 &  0 &  1 &  0 \\
- 2 & -5 &  4 &  1 \\
--1 &  3 & -3 &  1
-\end{bmatrix}
-\times
-\begin{bmatrix}
-\tau_0 \\
-\tau_1 \\
-\tau_2 \\
-\tau_3
-\end{bmatrix}
-\end{aligned}
-++++++++++++++++++++++++
-
-=== latexmath block 61
-
-[latexmath]
-++++++++++++++++++++++++
-\begin{aligned}
-\tau[level] &=
-  \begin{cases}
-     \tau_{2D}[level], & \text{for 2D image} \\
-     \tau_{1D}[level], & \text{for 1D image}
-   \end{cases}
-\end{aligned}
-++++++++++++++++++++++++
-
-== File chapters/VK_IMG_filter_cubic/filter_cubic_texel_selection.txt
-
-=== latexmath block 62
-
-[latexmath]
-++++++++++++++++++++++++
-\begin{aligned}
-i_{0}  & = \left \lfloor u - \frac{3}{2} \right \rfloor & i_{1} & = i_{0} + 1 & i_{2} & = i_{1} + 1 & i_{3} & = i_{2} + 1 \\[1em]
-j_{0}  & = \left \lfloor u - \frac{3}{2} \right \rfloor & j_{1} & = j_{0} + 1 & j_{2} & = j_{1} + 1 & j_{3} & = j_{2} + 1 \\
-\\
-\alpha & = \mathbin{frac} \left ( u - \frac{1}{2} \right ) \\[1em]
-\beta  & = \mathbin{frac} \left ( v - \frac{1}{2} \right )
-\end{aligned}
-++++++++++++++++++++++++
-
-== File style/writing.txt
-
-=== latexmath inline 13
-
-latexmath:[[0,1\]]
-
-=== latexmath inline 14
-
-latexmath:[\frac{1 - \frac{x}{2}}{x - 1}]
-
-=== latexmath inline 15
-
-latexmath:[\mathbf{c} = t \mathbf{c}_1 + (1-t) \mathbf{c}_2.]
-
-=== latexmath block 63
-
-[latexmath]
-+++++++++++++++++++
-\begin{aligned}
-c_{RGB} & =
-  \begin{cases}
-    \frac{c_{sRGB}}{12.92}                              & \text{for}\  c_{sRGB} \leq 0.04045 \\
-    \left ( \frac{c_{sRGB}+0.055}{1.055} \right )^{2.4} & \text{for}\  c_{sRGB} > 0.04045
-  \end{cases}
-\end{aligned}
-+++++++++++++++++++
-
-=== latexmath block 64
-
-[latexmath]
-+++++++++++++++++++
-V =
-  \begin{cases}
-    (-1)^S \times 0.0,                      & E = 0, M = 0     \\
-    (-1)^S \times 2^{-14} \times { M \over 2^{10} },
-                                            & E = 0,  M \neq 0 \\
-    (-1)^S \times 2^{E-15} \times { \left( 1 + { M \over 2^{10} } \right) },
-                                            & 0 < E < 31       \\
-    (-1)^S \times Inf,             & E = 31, M = 0             \\
-    NaN,                           & E = 31, M \neq 0
-  \end{cases}
-+++++++++++++++++++
diff --git a/registry/vulkan/config/optimize-pdf b/registry/vulkan/config/optimize-pdf
deleted file mode 100755
index 2eb2c02..0000000
--- a/registry/vulkan/config/optimize-pdf
+++ /dev/null
@@ -1,99 +0,0 @@
-#!/bin/bash
-
-# Copyright (C) 2014-2016 OpenDevise Inc. and the Asciidoctor Project
-
-# Permission is hereby granted, free of charge, to any person obtaining a copy
-# of this software and associated documentation files (the "Software"), to deal
-# in the Software without restriction, including without limitation the rights
-# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-# copies of the Software, and to permit persons to whom the Software is
-# furnished to do so, subject to the following conditions:
-
-# The above copyright notice and this permission notice shall be included in
-# all copies or substantial portions of the Software.
-
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-# THE SOFTWARE.
-
-# Optimizes and compresses the specified PDF using Ghostscript (gs).
-#
-# [NOTE]
-# You need at least Ghostscript 9.10 in order for page labels defined in the
-# PDF to be preserved (e.g., front matter pages numbered using roman numerals).
-
-if [ -z $1 ]; then
-   echo "Please supply a PDF file to optimize"
-   exit 1
-fi
-
-if [ -z $GS ]; then
-  GS=gs
-fi
-
-FILE=$1
-FILE_BASENAME=${FILE%.pdf}
-FILE_OPTIMIZED=$FILE_BASENAME-optimized.pdf
-FILE_PDFMARK=
-if [ -f "$FILE_BASENAME.pdfmark" ]; then
-  FILE_PDFMARK="$FILE_BASENAME.pdfmark"
-fi
-DOWNSAMPLE_IMAGES=true
-if [ -z $IMAGE_DPI ]; then
-  #IMAGE_DPI=150
-  IMAGE_DPI=300
-fi
-
-# /prepress defaults (see http://ghostscript.com/doc/current/Ps2pdf.htm)
-# -d{Color,Gray,Mono}ImageDownsampleType=/Bicubic
-# -dAutoFilter{Color,Gray}Images=true
-# -dOptimize=true
-# -dEmbedAllFonts=true
-# -dSubsetFonts=true
-# -dColorConversionStrategy=/LeaveColorUnchanged
-# -dUCRandBGInfo=/Preserve
-# -dCompressPages=true
-#
-# other unused settings
-# -r72
-#
-# for info about pdfmarks, see http://milan.kupcevic.net/ghostscript-ps-pdf
-#
-# to convert to grayscale, add the following (though doesn't always work)
-#
-# -dProcessColorModel=/DeviceGray \
-# -dColorConversionStrategy=/Gray \
-
-ERRFILE=$FILE_BASENAME-ERRS.optimize
-"$GS" -q -dNOPAUSE -dBATCH -dSAFER -dNOOUTERSAVE \
-  -sDEVICE=pdfwrite \
-  -dPDFSETTINGS=/prepress \
-  -dPrinted=false \
-  -dCannotEmbedFontPolicy=/Warning \
-  -dDownsampleColorImages=$DOWNSAMPLE_IMAGES \
-  -dColorImageResolution=$IMAGE_DPI \
-  -dDownsampleGrayImages=$DOWNSAMPLE_IMAGES \
-  -dGrayImageResolution=$IMAGE_DPI \
-  -dDownsampleMonoImages=$DOWNSAMPLE_IMAGES \
-  -dMonoImageResolution=$IMAGE_DPI \
-  -sOutputFile="$FILE_OPTIMIZED" \
-  "$FILE" $FILE_PDFMARK 2> $ERRFILE
-
-status=$?
-if test $status -ne 0 ; then
-    echo "$0: $GS return status = $status, aborting"
-elif grep -q Error $ERRFILE ; then
-    echo "$0: $GS succeeded but found Error in $ERRFILE (follows), aborting"
-    echo '---------- Errors from $GS ----------'
-    grep Error $ERRFILE
-    echo '-------------------------------------'
-    status=1
-else
-    rm -f $ERRFILE
-fi
-
-exit $status
diff --git a/registry/vulkan/config/rouge-extend-css.rb b/registry/vulkan/config/rouge-extend-css.rb
deleted file mode 100644
index c396216..0000000
--- a/registry/vulkan/config/rouge-extend-css.rb
+++ /dev/null
@@ -1,60 +0,0 @@
-# Copyright 2021 The Khronos Group Inc.
-#
-# SPDX-License-Identifier: Apache-2.0
-
-# Khronos overrides for Rouge 'github' theme CSS for accessibility.
-# See (note that this code is evolving, works as of asciidoctor 2.0.12):
-# https://github.com/asciidoctor/asciidoctor/blob/master/lib/asciidoctor/syntax_highlighter/rouge.rb
-
-include ::Asciidoctor
-
-class ExtendedRougeSyntaxHighlighter < (Asciidoctor::SyntaxHighlighter.for 'rouge')
-  register_for 'rouge'
-
-  # Insert rouge stylesheet from super
-  # Then replace many 'github' theme colors for accessibility compliance
-  # It would be better to use rouge's stylesheet factory, if it has one
-  def docinfo location, doc, opts
-    overrides = %(<style>
-/* Khronos overrides for Rouge 'github' theme for accessibility */
-/* Basically everything is overridden, but it's unclear how to add a new Rouge theme */
-/* Codelike overrides */
-pre.rouge .cm, pre.rouge .cp, pre.rouge .c1, pre.rouge .cs,
-pre.rouge .c, pre.rouge .ch, pre.rouge .cd, pre.rouge .cpf,
-pre.rouge .gh, pre.rouge .bp {
-  color: #5f5f5f;
-}
-/* Numberlike overrides */
-pre.rouge .mf, pre.rouge .mh, pre.rouge .il, pre.rouge .mi,
-pre.rouge .mo, pre.rouge .m, pre.rouge .mb, pre.rouge .mx {
-  color: #007f7f;
-}
-/* Namelike overrides */
-pre.rouge .ne, pre.rouge .nf, pre.rouge .fm, pre.rouge .nl {
-  color: #5f0000;
-}
-/* Other things ANDI warns about - unsure of their purposes */
-pre.rouge .go, pre.rouge .gu {
-  color: #727272;
-}
-pre.rouge .sr {
-  color: #008512;
-}
-pre.rouge .na, pre.rouge .nb {
-  color: #007f7f;
-}
-pre.rouge .no, pre.rouge .vc, pre.rouge .vg, pre.rouge .vi,
-pre.rouge .nv, pre.rouge .vm {
-  color: #007f7f;
-}
-pre.rouge .w {
-  color: #727272;
-}
-</style>)
-
-    # super can return either <style> or <link> markup, both work
-    %(#{super}
-#{overrides})
-  end
-end
-
diff --git a/registry/vulkan/config/spec-macros.rb b/registry/vulkan/config/spec-macros.rb
deleted file mode 100644
index 13aa5a1..0000000
--- a/registry/vulkan/config/spec-macros.rb
+++ /dev/null
@@ -1,40 +0,0 @@
-# Copyright 2016-2021 The Khronos Group Inc.
-#
-# SPDX-License-Identifier: Apache-2.0
-
-#require 'asciidoctor/extensions' unless RUBY_ENGINE == 'opal'
-RUBY_ENGINE == 'opal' ? (require 'spec-macros/extension') : (require_relative 'spec-macros/extension')
-
-# All the inline macros we need
-Asciidoctor::Extensions.register do
-    inline_macro CanInlineMacro
-    inline_macro CannotInlineMacro
-    inline_macro MayInlineMacro
-    inline_macro MustInlineMacro
-    inline_macro OptionalInlineMacro
-    inline_macro OptionallyInlineMacro
-    inline_macro RequiredInlineMacro
-    inline_macro ShouldInlineMacro
-    inline_macro ReflinkInlineMacro
-    inline_macro ApiextInlineMacro
-    inline_macro FlinkInlineMacro
-    inline_macro FnameInlineMacro
-    inline_macro FtextInlineMacro
-    inline_macro SnameInlineMacro
-    inline_macro SlinkInlineMacro
-    inline_macro StextInlineMacro
-    inline_macro EnameInlineMacro
-    inline_macro ElinkInlineMacro
-    inline_macro EtextInlineMacro
-    inline_macro PnameInlineMacro
-    inline_macro PtextInlineMacro
-    inline_macro DnameInlineMacro
-    inline_macro DlinkInlineMacro
-    inline_macro TnameInlineMacro
-    inline_macro TlinkInlineMacro
-    inline_macro BasetypeInlineMacro
-    inline_macro CodeInlineMacro
-    inline_macro AttrInlineMacro
-    inline_macro TagInlineMacro
-    inline_macro UndefinedInlineMacro
-end
diff --git a/registry/vulkan/config/spec-macros/extension.rb b/registry/vulkan/config/spec-macros/extension.rb
deleted file mode 100644
index adfe2e2..0000000
--- a/registry/vulkan/config/spec-macros/extension.rb
+++ /dev/null
@@ -1,307 +0,0 @@
-# Copyright 2016-2021 The Khronos Group Inc.
-#
-# SPDX-License-Identifier: Apache-2.0
-
-require 'asciidoctor/extensions' unless RUBY_ENGINE == 'opal'
-
-include ::Asciidoctor
-
-# This is the generated map of API interfaces in this spec build
-require 'api.rb'
-$apiNames = APInames.new
-
-class SpecInlineMacroBase < Extensions::InlineMacroProcessor
-    use_dsl
-    using_format :short
-end
-
-class NormativeInlineMacroBase < SpecInlineMacroBase
-    def text
-        'normative'
-    end
-
-    def process parent, target, attributes
-        create_inline parent, :quoted, '<strong class="purple">' + text + '</strong>'
-    end
-end
-
-class LinkInlineMacroBase < SpecInlineMacroBase
-    # Check if a link macro target exists - overridden by specific macros
-    # Default assumption is that it does exist
-    def exists? target
-      return true
-    end
-
-    def process parent, target, attributes
-      if not exists? target
-        # If the macro target isn't in this build, but has an alias,
-        # substitute that alias as the argument.
-        # Otherwise, turn the (attempted) link into text, and complain.
-        if $apiNames.nonexistent.has_key? target
-          oldtarget = target
-          target = $apiNames.nonexistent[oldtarget]
-          msg = 'Rewriting nonexistent link macro target: ' + @name.to_s + ':' + oldtarget + ' to ' + target
-          Asciidoctor::LoggerManager.logger.info msg
-          # Fall through
-        else
-          # Suppress warnings for apiext: macros as this is such a common case
-          if @name.to_s != 'apiext'
-            msg = 'Textifying unknown link macro target: ' + @name.to_s + ':' + target
-            Asciidoctor::LoggerManager.logger.warn msg
-          end
-          return create_inline parent, :quoted, '<code>' + target + '</code>'
-        end
-      end
-
-      if parent.document.attributes['cross-file-links']
-        return Inline.new(parent, :anchor, target, :type => :link, :target => (target + '.html'))
-      else
-        return Inline.new(parent, :anchor, target, :type => :xref, :target => ('#' + target), :attributes => {'fragment' => target, 'refid' => target})
-      end
-    end
-end
-
-class CodeInlineMacroBase < SpecInlineMacroBase
-    def process parent, target, attributes
-        create_inline parent, :quoted, '<code>' + target.gsub('&#8594;', '-&gt;') + '</code>'
-    end
-end
-
-class StrongInlineMacroBase < SpecInlineMacroBase
-    def process parent, target, attributes
-        create_inline parent, :quoted, '<code>' + target.gsub('&#8594;', '-&gt;') + '</code>'
-    end
-end
-
-class ParamInlineMacroBase < SpecInlineMacroBase
-    def process parent, target, attributes
-         create_inline parent, :quoted, '<code>' + target.gsub('&#8594;', '-&gt;') + '</code>'
-    end
-end
-
-class CanInlineMacro < NormativeInlineMacroBase
-    named :can
-    match /can:(\w*)/
-
-    def text
-        'can'
-    end
-end
-
-class CannotInlineMacro < NormativeInlineMacroBase
-    named :cannot
-    match /cannot:(\w*)/
-
-    def text
-        'cannot'
-    end
-end
-
-class MayInlineMacro < NormativeInlineMacroBase
-    named :may
-    match /may:(\w*)/
-
-    def text
-        'may'
-    end
-end
-
-class MustInlineMacro < NormativeInlineMacroBase
-    named :must
-    match /must:(\w*)/
-
-    def text
-        'must'
-    end
-end
-
-class OptionalInlineMacro < NormativeInlineMacroBase
-    named :optional
-    match /optional:(\w*)/
-
-    def text
-        'optional'
-    end
-end
-
-class OptionallyInlineMacro < NormativeInlineMacroBase
-    named :optionally
-    match /optionally:(\w*)/
-
-    def text
-        'optionally'
-    end
-end
-
-class RequiredInlineMacro < NormativeInlineMacroBase
-    named :required
-    match /required:(\w*)/
-
-    def text
-        'required'
-    end
-end
-
-class ShouldInlineMacro < NormativeInlineMacroBase
-    named :should
-    match /should:(\w*)/
-
-    def text
-        'should'
-    end
-end
-
-# Generic reference page link to any entity with an anchor/refpage
-class ReflinkInlineMacro < LinkInlineMacroBase
-    named :reflink
-    match /reflink:(\w+)/
-end
-
-# Link to an extension appendix/refpage
-class ApiextInlineMacro < LinkInlineMacroBase
-    named :apiext
-    match /apiext:(\w+)/
-
-    def exists? target
-        $apiNames.features.has_key? target
-    end
-end
-
-class FlinkInlineMacro < LinkInlineMacroBase
-    named :flink
-    match /flink:(\w+)/
-
-    def exists? target
-        $apiNames.protos.has_key? target
-    end
-end
-
-class FnameInlineMacro < CodeInlineMacroBase
-    named :fname
-    match /fname:(\w+)/
-end
-
-class FtextInlineMacro < CodeInlineMacroBase
-    named :ftext
-    match /ftext:([\w\*]+)/
-end
-
-class SnameInlineMacro < CodeInlineMacroBase
-    named :sname
-    match /sname:(\w+)/
-end
-
-class SlinkInlineMacro < LinkInlineMacroBase
-    named :slink
-    match /slink:(\w+)/
-
-    def exists? target
-        $apiNames.structs.has_key? target or $apiNames.handles.has_key? target
-    end
-end
-
-class StextInlineMacro < CodeInlineMacroBase
-    named :stext
-    match /stext:([\w\*]+)/
-end
-
-class EnameInlineMacro < CodeInlineMacroBase
-    named :ename
-    match /ename:(\w+)/
-
-    def exists? target
-        $apiNames.consts.has_key? target
-    end
-end
-
-class ElinkInlineMacro < LinkInlineMacroBase
-    named :elink
-    match /elink:(\w+)/
-
-    def exists? target
-        $apiNames.enums.has_key? target
-    end
-end
-
-class EtextInlineMacro < CodeInlineMacroBase
-    named :etext
-    match /etext:([\w\*]+)/
-end
-
-# this does not handle any [] at the moment
-
-class PnameInlineMacro < ParamInlineMacroBase
-    named :pname
-    match /pname:(\w+((\.|&#8594;)\w+)*)/
-end
-
-class PtextInlineMacro < ParamInlineMacroBase
-    named :ptext
-    match /ptext:([\w\*]+((\.|&#8594;)[\w\*]+)*)/
-end
-
-class DnameInlineMacro < CodeInlineMacroBase
-    named :dname
-    match /dname:(\w+)/
-end
-
-class DlinkInlineMacro < LinkInlineMacroBase
-    named :dlink
-    match /dlink:(\w+)/
-
-    def exists? target
-        $apiNames.defines.has_key? target
-    end
-end
-
-class TnameInlineMacro < CodeInlineMacroBase
-    named :tname
-    match /tname:(\w+)/
-end
-
-class TlinkInlineMacro < LinkInlineMacroBase
-    named :tlink
-    match /tlink:(\w+)/
-
-    def exists? target
-        $apiNames.flags.has_key? target or
-            $apiNames.funcpointers.has_key? target or
-            $apiNames.defines.has_key? target
-    end
-end
-
-class BasetypeInlineMacro < CodeInlineMacroBase
-    named :basetype
-    match /basetype:(\w+)/
-end
-
-# This doesn't include the full range of code: use
-# It allows imbedded periods (field separators) and wildcards if followed by
-# another word, and an ending wildcard.
-
-class CodeInlineMacro < CodeInlineMacroBase
-    named :code
-    match /code:(\w+([.*]\w+)*\**)/
-end
-
-# The tag: and attr: macros are only used in registry.txt
-
-class TagInlineMacro < StrongInlineMacroBase
-    named :tag
-    match /tag:(\w+)/
-end
-
-class AttrInlineMacro < StrongInlineMacroBase
-    named :attr
-    match /attr:(\w+)/
-end
-
-# Does nothing - just markup that we've considered the use case
-class UndefinedInlineMacro < SpecInlineMacroBase
-    named :undefined
-    match /undefined:/
-
-    def process parent, target, attributes
-        create_inline parent, :quoted, 'undefined'
-    end
-end
diff --git a/registry/vulkan/config/themes/pdf-theme.yml b/registry/vulkan/config/themes/pdf-theme.yml
deleted file mode 100644
index 445573f..0000000
--- a/registry/vulkan/config/themes/pdf-theme.yml
+++ /dev/null
@@ -1,35 +0,0 @@
-# Copyright 2020-2021 The Khronos Group Inc.
-# SPDX-License-Identifier: MIT
-
-# Vulkan spec PDF stylesheet
-
-extends: default
-
-# The font handling is equivalent to the bundled default-with-fallback-font-theme.yml,
-# but uses a local copy of the M+ 1p Fallback font until asciidoctor-pdf
-# updates theirs. The local copy includes a few more special characters used
-# in the spec.
-font:
-  catalog:
-    merge: true
-    # M+ 1p supports Latin, Latin-1 Supplement, Latin Extended, Greek, Cyrillic, Vietnamese, Japanese & an assortment of symbols
-    # It also provides arrows for ->, <-, => and <= replacements in case these glyphs are missing from font
-    M+ 1p Fallback: mplus1p-regular-fallback.ttf
-    Noto Emoji: GEM_FONTS_DIR/notoemoji-subset.ttf
-  fallbacks: [M+ 1p Fallback, Noto Emoji]
-
-# Add chapter names to the page footer
-footer:
-  recto:
-    right:
-      content: '{chapter-title} | {page-number}'
-  verso:
-    left:
-      content: '{page-number} | {chapter-title}'
-
-# Add a role for VUID tags
-role:
-  vuid:
-    font_family: $literal_font_family
-    font_size: round($base_font_size * 0.85)
-    font_color: 808080
diff --git a/registry/vulkan/config/tilde_open_block.rb b/registry/vulkan/config/tilde_open_block.rb
deleted file mode 100644
index 0372897..0000000
--- a/registry/vulkan/config/tilde_open_block.rb
+++ /dev/null
@@ -1,70 +0,0 @@
-# Copyright 2018-2021 The Khronos Group Inc.
-#
-# SPDX-License-Identifier: Apache-2.0
-
-require 'asciidoctor/extensions' unless RUBY_ENGINE == 'opal'
-
-include ::Asciidoctor
-
-module Asciidoctor
-
-# This addition to the parser class overrides the "is_delimited_block?"
-# method of the core parser, adding a new block delimiter of "~~~~" for open
-# blocks, which can be extended to an arbitrary number of braces to allow
-# nesting them, which is a limitation of the existing "only two dashes"
-# delimiter: https://github.com/asciidoctor/asciidoctor/issues/1121
-# The choice of tildes is based on comments in that bug.
-
-class Parser
-  # Storing the original method so we can still call it from the overriding
-  # version
-  @OLD_is_delimited_block = method(:is_delimited_block?)
-
-  # Logic here matches the original Parser#is_delimited_block? method, see
-  # there for details of base implementation.
-  def self.is_delimited_block? line, return_match_data = false
-    # Quick check for a single brace character before forwarding to the
-    # original parser method.
-    if line[0] != '~'
-      return @OLD_is_delimited_block.(line, return_match_data)
-    else
-      line_len = line.length
-      if line_len <= 4
-        tip = line
-        tl = line_len
-      else
-        tip = line[0..3]
-        tl = 4
-      end
-
-      # Hardcoded tilde delimiter, since that's the only thing this
-      # function deals with.
-      if tip == '~~~~'
-        # tip is the full line when delimiter is minimum length
-        if tl < 4 || tl == line_len
-          if return_match_data
-            context = :open
-            masq = ['comment', 'example', 'literal', 'listing', 'pass', 'quote', 'sidebar', 'source', 'verse', 'admonition', 'abstract', 'partintro'].to_set
-            BlockMatchData.new(context, masq, tip, tip)
-          else
-            true
-          end
-        elsif %(#{tip}#{tip[-1..-1] * (line_len - tl)}) == line
-          if return_match_data
-            context = :open
-            masq = ['comment', 'example', 'literal', 'listing', 'pass', 'quote', 'sidebar', 'source', 'verse', 'admonition', 'abstract', 'partintro'].to_set
-            BlockMatchData.new(context, masq, tip, line)
-          else
-            true
-          end
-        else
-          nil
-        end
-      else
-        nil
-      end
-    end
-  end
-end
-
-end
diff --git a/registry/vulkan/config/vu-to-json.rb b/registry/vulkan/config/vu-to-json.rb
deleted file mode 100644
index 2940bbc..0000000
--- a/registry/vulkan/config/vu-to-json.rb
+++ /dev/null
@@ -1,10 +0,0 @@
-# Copyright 2016-2021 The Khronos Group Inc.
-#
-# SPDX-License-Identifier: Apache-2.0
-
-RUBY_ENGINE == 'opal' ? (require 'vu-to-json/extension') : (require_relative 'vu-to-json/extension')
-
-Extensions.register do
-  preprocessor ValidUsageToJsonPreprocessor
-  treeprocessor ValidUsageToJsonTreeprocessor
-end
diff --git a/registry/vulkan/config/vu-to-json/extension.rb b/registry/vulkan/config/vu-to-json/extension.rb
deleted file mode 100644
index c78cae7..0000000
--- a/registry/vulkan/config/vu-to-json/extension.rb
+++ /dev/null
@@ -1,274 +0,0 @@
-# Copyright 2016-2021 The Khronos Group Inc.
-#
-# SPDX-License-Identifier: Apache-2.0
-
-require 'asciidoctor/extensions' unless RUBY_ENGINE == 'opal'
-
-include ::Asciidoctor
-
-module Asciidoctor
-
-class ValidUsageToJsonPreprocessorReader < PreprocessorReader
-  def process_line line
-    if line.start_with?( 'ifdef::VK_', 'ifndef::VK_', 'endif::VK_')
-      # Turn extension ifdefs into list items for when we're processing VU later.
-      return super('* ' + line)
-    else
-      return super(line)
-    end
-  end
-end
-
-# Preprocessor hook to iterate over ifdefs to prevent them from affecting asciidoctor's processing.
-class ValidUsageToJsonPreprocessor < Extensions::Preprocessor
-
-  def process document, reader
-    # Create a new reader to return, which handles turning the extension ifdefs into something else.
-    extension_preprocessor_reader = ValidUsageToJsonPreprocessorReader.new(document, reader.lines)
-
-    detected_vuid_list = []
-    extension_stack = []
-    in_validusage = :outside
-
-    # Despite replacing lines in the overridden preprocessor reader, a
-    # FIXME in Reader#peek_line suggests that this doesn't work, the new lines are simply discarded.
-    # So we just run over the new lines and do the replacement again.
-    new_lines = extension_preprocessor_reader.read_lines().flat_map do | line |
-
-      # Track whether we're in a VU block or not
-      if line.start_with?(".Valid Usage")
-        in_validusage = :about_to_enter  # About to enter VU
-      elsif in_validusage == :about_to_enter and line == '****'
-        in_validusage = :inside   # Entered VU block
-        extension_stack.each
-      elsif in_validusage == :inside and line == '****'
-        in_validusage = :outside   # Exited VU block
-      end
-
-      # Track extensions outside of the VU
-      if in_validusage == :outside and line.start_with?( 'ifdef::VK_', 'ifndef::VK_') and line.end_with?( '[]')
-        extension_stack.push line
-      elsif in_validusage == :outside and line.start_with?( 'endif::VK_')
-        extension_stack.pop
-      end
-
-      if in_validusage == :inside and line == '****'
-        # Write out the extension stack as bullets after this line
-        returned_lines = [line]
-        extension_stack.each do | extension |
-          returned_lines << ('* ' + extension)
-          # Add extra blank line to avoid this item absorbing any markup such as attributes on the next line
-          returned_lines << ''
-        end
-        returned_lines
-      elsif in_validusage == :inside and line.start_with?( 'ifdef::VK_', 'ifndef::VK_', 'endif::VK_') and line.end_with?('[]')
-        # Turn extension ifdefs into list items for when we're processing VU later.
-        ['* ' + line]
-      elsif in_validusage == :outside and line.start_with?( 'ifdef::VK_', 'ifndef::VK_', 'endif::VK_') and line.end_with?('[]')
-        # Remove the extension defines from the new lines, as we've dealt with them
-        []
-      elsif line.match(/\[\[(VUID-([^-]+)-[^\]]+)\]\]/)
-        # Add all the VUIDs into an array to guarantee they're all caught later.
-        detected_vuid_list << line.match(/(VUID-([^-]+)-[^\]]+)/)[0]
-        [line]
-      else
-        [line]
-      end
-    end
-
-    # Stash the detected vuids into a document attribute
-    document.set_attribute('detected_vuid_list', detected_vuid_list.join("\n"))
-
-    # Return a new reader after preprocessing
-    Reader.new(new_lines)
-  end
-end
-
-require 'json'
-class ValidUsageToJsonTreeprocessor < Extensions::Treeprocessor
-  def process document
-    map = {}
-
-    # Get the global vuid list
-    detected_vuid_list = document.attr('detected_vuid_list').split("\n")
-
-    map['version info'] = {
-      'schema version' => 2,
-      'api version' => document.attr('revnumber'),
-      'comment' => document.attr('revremark'),
-      'date' => document.attr('revdate')
-    }
-
-    map['validation'] = {}
-
-    error_found = false
-
-    # Need to find all valid usage blocks within a structure or function ref page section
-
-    # This is a list of all refpage types that may contain VUs
-    vu_refpage_types = [
-            'builtins',
-            'funcpointers',
-            'protos',
-            'spirv',
-            'structs',
-        ]
-
-    # Find all the open blocks
-    (document.find_by context: :open).each do |openblock|
-      # Filter out anything that's not a refpage
-      if openblock.attributes['refpage']
-        if vu_refpage_types.include? openblock.attributes['type']
-          parent = openblock.attributes['refpage']
-          # Find all the sidebars
-          (openblock.find_by context: :sidebar).each do |sidebar|
-            # Filter only the valid usage sidebars
-            if sidebar.title == "Valid Usage" || sidebar.title == "Valid Usage (Implicit)"
-              extensions = []
-              # There should be only one block - but just in case...
-              sidebar.blocks.each do |list|
-                # Iterate through all the items in the block, tracking which extensions are enabled/disabled.
-
-                attribute_replacements = list.attributes[:attribute_entries]
-
-                list.blocks.each do |item|
-                  if item.text.start_with?('ifdef::VK_')
-                    extensions << '(' + item.text[('ifdef::'.length)..-3] + ')'                # Look for "ifdef" directives and add them to the list of extensions
-                  elsif item.text.start_with?('ifndef::VK_')
-                    extensions << '!(' + item.text[('ifndef::'.length)..-3] + ')'              # Ditto for "ifndef" directives
-                  elsif item.text.start_with?('endif::VK_')
-                    extensions.slice!(-1)                                                      # Remove the last element when encountering an endif
-                  else
-                    item_text = item.text.clone
-
-                    # Replace the refpage if it's present
-                    item_text.gsub!(/\{refpage\}/i, parent)
-
-                    # Replace any attributes specified on the list (e.g. stageMask)
-                    if attribute_replacements
-                      attribute_replacements.each do |replacement|
-                        replacement_str = '\{' + replacement.name + '\}'
-                        replacement_regex = Regexp.new(replacement_str, Regexp::IGNORECASE)
-                        item_text.gsub!(replacement_regex, replacement.value)
-                      end
-                    end
-
-                    match = nil
-                    if item.text == item_text
-                      # The VUID will have been converted to a href in the general case, so find that
-                      match = /<a id=\"(VUID-[^"]+)\"[^>]*><\/a>(.*)/m.match(item_text)
-                    else
-                      # If we're doing manual attribute replacement, have to find the text of the anchor
-                      match = /\[\[(VUID-[^\]]+)\]\](.*)/m.match(item_text) # Otherwise, look for the VUID.
-                    end
-
-                    if (match != nil)
-                      vuid     = match[1]
-                      text     = match[2].gsub("\n", ' ')  # Have to forcibly remove newline characters; for some reason they're translated to the literally '\n' when converting to json.
-
-                      # Delete the vuid from the detected vuid list, so we know it's been extracted successfully
-                      if item.text == item_text
-                        # Simple if the item text hasn't been modified
-                        detected_vuid_list.delete(match[1])
-                      else
-                        # If the item text has been modified, get the vuid from the unmodified text
-                        detected_vuid_list.delete(/\[\[(VUID-([^-]+)-[^\]]+)\]\](.*)/m.match(item.text)[1])
-                      end
-
-                      # Generate the table entry
-                      entry = {'vuid' => vuid, 'text' => text}
-
-                      # Initialize the database if necessary
-                      if map['validation'][parent] == nil
-                        map['validation'][parent] = {}
-                      end
-
-                      # Figure out the name of the section the entry will be added in
-                      if extensions == []
-                        entry_section = 'core'
-                      else
-                        entry_section = extensions.join('+')
-                      end
-
-                      # Initialize the entry section if necessary
-                      if map['validation'][parent][entry_section] == nil
-                        map['validation'][parent][entry_section] = []
-                      end
-
-                      # Check for duplicate entries
-                      if map['validation'][parent][entry_section].include? entry
-                        error_found = true
-                        puts "VU Extraction Treeprocessor: ERROR - Valid Usage statement '#{entry}' is duplicated in the specification with VUID '#{vuid}'."
-                      end
-
-                      # Add the entry
-                      map['validation'][parent][entry_section] << entry
-
-                    else
-                      puts "VU Extraction Treeprocessor: WARNING - Valid Usage statement without a VUID found: "
-                      puts item_text
-                    end
-                  end
-                end
-              end
-            end
-          end
-
-        end
-      end
-    end
-
-    # Print out a list of VUIDs that were not extracted
-    if detected_vuid_list.length != 0
-      error_found = true
-      puts 'VU Extraction Treeprocessor: ERROR - Extraction failure'
-      puts
-      puts 'Some VUIDs were not successfully extracted from the specification.'
-      puts 'This is usually down to them appearing outside of a refpage (open)'
-      puts 'block; try checking where they are included.'
-      puts 'The following VUIDs were not extracted:'
-      detected_vuid_list.each do |vuid|
-        puts "\t * " + vuid
-      end
-    end
-
-    # Generate the json
-    json = JSON.pretty_generate(map)
-    outfile = document.attr('json_output')
-
-    # Verify the json against the schema, if the required gem is installed
-    begin
-      require 'json-schema'
-
-      # Read the schema in and validate against it
-      schema = IO.read(File.join(File.dirname(__FILE__), 'vu_schema.json'))
-      errors = JSON::Validator.fully_validate(schema, json, :errors_as_objects => true)
-
-      # Output errors if there were any
-      if errors != []
-        error_found = true
-        puts 'VU Extraction JSON Validator: ERROR - Validation of the json schema failed'
-        puts
-        puts 'It is likely that there is an invalid or malformed entry in the specification text,'
-        puts 'see below error messages for details, and use their VUIDs and text to correlate them to their location in the specification.'
-        puts
-
-        errors.each do |error|
-          puts error.to_s
-        end
-      end
-    rescue LoadError
-      puts 'VU Extraction JSON Validator: WARNING - "json-schema" gem missing - skipping verification of json output'
-      # error handling code here
-    end
-
-    # Write the file and exit - no further processing required.
-    IO.write(outfile, json)
-
-    if (error_found)
-      exit! 1
-    end
-    exit! 0
-  end
-end
-end
diff --git a/registry/vulkan/config/vu-to-json/vu_schema.json b/registry/vulkan/config/vu-to-json/vu_schema.json
deleted file mode 100644
index 23b248f..0000000
--- a/registry/vulkan/config/vu-to-json/vu_schema.json
+++ /dev/null
@@ -1,63 +0,0 @@
-{
-	"$schema": "http://json-schema.org/draft-04/schema#",
-	"title": "Command and Structure Validation in Vulkan",
-	"description": "A database of validatable commands and structures in the Vulkan API",
-	"type": "object",
-	"additionalProperties": false,
-	"properties": {
-		"version info": {
-			"additionalProperties": false,
-			"properties": { 
-				"schema version": {"type": "integer", "const": 2},
-				"api version": {"type": "string"},
-				"comment": {"type": "string"},
-				"date": {"type": "string"}
-			},
-			"required": [
-				"schema version",
-				"api version",
-				"comment",
-				"date"
-			]
-		},
-		"validation": {
-			"patternProperties": {
-				"^[vV]k[A-Z][A-Za-z0-9]+$": {
-					"title": "Vulkan Command or Structure",
-					"description": "Validation information for a structure or command in the Vulkan API",
-					"patternProperties": {
-						"^[\\w+!|]+$": {
-							"type": "array",
-							"uniqueItems": true,
-							"minItems": 1,
-							"items":
-							{
-								"title": "Valid Usage Statement",
-								"description": "A valid usage statement",
-								"type": "object",
-								"additionalProperties": false,
-								"properties": {
-									"vuid": {
-										"title": "Valid Usage ID",
-										"description": "String identifier for a valid usage statement, corresponding to an anchor in the spec for that statement",
-										"type": "string",
-										"pattern": "VUID-[vV]k[A-Z][A-Za-z0-9]+-[A-Za-z0-9-]*[A-Za-z0-9]"
-									},
-									"text": {
-										"title": "Valid Usage Text",
-										"description": "HTML formatted string of the valid usage statement text",
-										"type": "string"
-									}
-								},
-								"required": [
-									"vuid",
-									"text"
-								]
-							}
-						}
-					}
-				}
-			}
-		}
-	}
-}
\ No newline at end of file
diff --git a/registry/vulkan/config/vuid-expander.rb b/registry/vulkan/config/vuid-expander.rb
deleted file mode 100644
index e279b1b..0000000
--- a/registry/vulkan/config/vuid-expander.rb
+++ /dev/null
@@ -1,29 +0,0 @@
-# Copyright 2020-2021 The Khronos Group Inc.
-#
-# SPDX-License-Identifier: Apache-2.0
-
-require 'asciidoctor/extensions' unless RUBY_ENGINE == 'opal'
-
-include ::Asciidoctor
-
-class VUIDExpanderTreeprocessor < Extensions::Treeprocessor
-  def process document
-    # Find all list items inside Valid Usage sidebar blocks
-    document.find_by(context: :sidebar).each do |sidebar|
-      # Get sidebar title from instance variable to avoid side-effects from substitutions
-      if sidebar.title? and sidebar.instance_variable_get(:@title).start_with? "Valid Usage"
-        sidebar.find_by(context: :list_item) do |item|
-            # Get item text directly from instance variable to avoid inline substitutions
-            original_text = item.instance_variable_get(:@text)
-            # Find VUID anchor and append with matching VUID-styled text and line break
-            item.text = original_text.gsub(/(\[\[(VUID-[^\]]*)\]\])/, "\\1 [vuid]#\\2# +\n")
-        end
-      end
-    end
-    nil
-  end
-end
-
-Extensions.register do
-  treeprocessor VUIDExpanderTreeprocessor
-end
diff --git a/registry/vulkan/gen-script-docs.sh b/registry/vulkan/gen-script-docs.sh
deleted file mode 100755
index ef65d53..0000000
--- a/registry/vulkan/gen-script-docs.sh
+++ /dev/null
@@ -1,66 +0,0 @@
-#!/bin/sh
-# Copyright 2019-2021 The Khronos Group Inc.
-#
-# SPDX-License-Identifier: Apache-2.0
-
-# Generate documentation for the python scripts in this repo, using pdoc3:
-# https://pdoc3.github.io/pdoc/
-#
-# Output is under out/python-docs
-
-set -e
-
-# Pipe in some paths. We'll convert them to module names and document them.
-pathsToDocs() {
-    grep -v "test_" | \
-    grep -v "__init__.py" | \
-    sed -e 's/[.]py//' -e 's:/:.:g' | \
-    xargs --verbose pdoc3 --html --force --output-dir $1
-}
-
-# Main body of script
-(
-    cd $(dirname $0)
-    # Needed to complete the build - can't import genRef.py without it.
-    make gen/api.py
-
-    SPECDIR=$(pwd)
-    OUTDIR=$(pwd)/out/python-docs
-    INDEX=$OUTDIR/index.html
-    mkdir -p $OUTDIR
-    cp scripts/__init__.py.docs scripts/__init__.py
-    export PYTHONPATH=${SPECDIR}/scripts
-    (
-        # # scripts under specification
-        cd $SPECDIR/scripts
-        ls *.py
-
-        # Generate the index files
-        # echo "scripts"
-        echo "scripts.spec_tools"
-
-    ) | pathsToDocs $OUTDIR
-
-    # Generate a simple index file, since generating one with pdoc3 chokes on the Retired directory.
-    echo "<html><body><h1>Python modules</h2><ul>" > $INDEX
-    (
-        cd $SPECDIR/scripts
-        ls *.py
-    ) | while read -r fn; do
-        MODNAME=$(echo $fn | sed -r  's/([a-zA-Z_]+)([.]py)?/\1/')
-        if [ -f $OUTDIR/$MODNAME.html ]; then
-            # Only make non-dead links
-            echo "<li><a href=$MODNAME.html>$MODNAME</a></li>" >> $INDEX
-        fi
-    done
-    echo "<li><a href=spec_tools/index.html>spec_tools</a></li>" >> $INDEX
-    echo "</ul></body></html>" >> $INDEX
-
-    # Move index files to a more useful place
-    rm -rf $OUTDIR/spec_tools
-    mv $OUTDIR/scripts/spec_tools $OUTDIR/spec_tools
-    # delete duplicate generated files
-    rm -rf $OUTDIR/scripts
-
-    rm -f scripts/__init__.py
-)
diff --git a/registry/vulkan/images/DecodeSessionDpbDecodeWithOutputToReferencePictureSlot.svg b/registry/vulkan/images/DecodeSessionDpbDecodeWithOutputToReferencePictureSlot.svg
deleted file mode 100644
index f58a57d..0000000
--- a/registry/vulkan/images/DecodeSessionDpbDecodeWithOutputToReferencePictureSlot.svg
+++ /dev/null
@@ -1,696 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<svg
-   xmlns:dc="http://purl.org/dc/elements/1.1/"
-   xmlns:cc="http://creativecommons.org/ns#"
-   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
-   xmlns:svg="http://www.w3.org/2000/svg"
-   xmlns="http://www.w3.org/2000/svg"
-   xmlns:xlink="http://www.w3.org/1999/xlink"
-   version="1.1"
-   id="svg2"
-   xml:space="preserve"
-   width="690"
-   height="400"
-   viewBox="32 80 690 400"><metadata
-     id="metadata8"><rdf:RDF><cc:Work
-         rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
-           rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title></dc:title></cc:Work></rdf:RDF></metadata><defs
-     id="defs6"><linearGradient
-       id="linearGradient14225"><stop
-         style="stop-color:#000000;stop-opacity:1;"
-         offset="0"
-         id="stop14227" /><stop
-         style="stop-color:#000000;stop-opacity:0;"
-         offset="1"
-         id="stop14229" /></linearGradient><marker
-       style="overflow:visible"
-       id="marker10521"
-       refX="0"
-       refY="0"
-       orient="auto"><path
-         transform="matrix(-0.2,0,0,-0.2,-1.2,0)"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
-         d="M 0,0 5,-5 -12.5,0 5,5 0,0 Z"
-         id="path10523" /></marker><marker
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="marker10431"
-       style="overflow:visible"><path
-         id="path10433"
-         d="M 0,0 5,-5 -12.5,0 5,5 0,0 Z"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
-         transform="matrix(-0.2,0,0,-0.2,-1.2,0)" /></marker><marker
-       style="overflow:visible"
-       id="marker9980"
-       refX="0"
-       refY="0"
-       orient="auto"><path
-         transform="matrix(-0.2,0,0,-0.2,-1.2,0)"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
-         d="M 0,0 5,-5 -12.5,0 5,5 0,0 Z"
-         id="path9982" /></marker><marker
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="marker9848"
-       style="overflow:visible"><path
-         id="path9850"
-         d="M 0,0 5,-5 -12.5,0 5,5 0,0 Z"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
-         transform="matrix(-0.2,0,0,-0.2,-1.2,0)" /></marker><marker
-       style="overflow:visible"
-       id="marker9520"
-       refX="0"
-       refY="0"
-       orient="auto"><path
-         transform="matrix(-0.2,0,0,-0.2,-1.2,0)"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
-         d="M 0,0 5,-5 -12.5,0 5,5 0,0 Z"
-         id="path9522" /></marker><marker
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="marker9422"
-       style="overflow:visible"><path
-         id="path9424"
-         d="M 0,0 5,-5 -12.5,0 5,5 0,0 Z"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
-         transform="matrix(-0.2,0,0,-0.2,-1.2,0)" /></marker><marker
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="marker9412"
-       style="overflow:visible"><path
-         id="path9414"
-         d="M 0,0 5,-5 -12.5,0 5,5 0,0 Z"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
-         transform="matrix(-0.2,0,0,-0.2,-1.2,0)" /></marker><marker
-       style="overflow:visible"
-       id="Arrow1Send"
-       refX="0"
-       refY="0"
-       orient="auto"><path
-         transform="matrix(-0.2,0,0,-0.2,-1.2,0)"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
-         d="M 0,0 5,-5 -12.5,0 5,5 0,0 Z"
-         id="path8951" /></marker><clipPath
-       clipPathUnits="userSpaceOnUse"
-       id="clipPath404"><path
-         d="M 1.4305e-5,0 960.00001,0 l 0,540 L 1.4305e-5,540 Z"
-         id="path402"
-         style="clip-rule:evenodd" /></clipPath><linearGradient
-       xlink:href="#linearGradient14225"
-       id="linearGradient14233"
-       x1="532"
-       y1="350"
-       x2="592"
-       y2="350"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="translate(-50,-70.000014)" /><marker
-       style="overflow:visible"
-       id="marker9980-1"
-       refX="0"
-       refY="0"
-       orient="auto"><path
-         transform="matrix(-0.2,0,0,-0.2,-1.2,0)"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
-         d="M 0,0 5,-5 -12.5,0 5,5 0,0 Z"
-         id="path9982-1" /></marker></defs><rect
-     y="199.99998"
-     x="42"
-     height="160"
-     width="520"
-     id="rect10661"
-     style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#b3b3b3;stroke-width:4;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" /><rect
-     y="100.1"
-     x="572"
-     height="79.900002"
-     width="140"
-     id="rect10415"
-     style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#b3b3b3;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:4;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" /><rect
-     y="229.99998"
-     x="332"
-     height="110"
-     width="30"
-     id="rect8500-7"
-     style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" /><path
-     style="fill:#cccccc;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-     d="m 342,145 0,75 -5,0 10,10 10,-10 -5,0 0,-75 210,0 0,5 10,-10 -10,-10 0,5 -250,0 0,10 z"
-     id="path14627" /><rect
-     y="90"
-     x="192"
-     height="100"
-     width="120"
-     id="rect9622"
-     style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#b3b3b3;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" /><path
-     id="path9624"
-     d="m 312,140 -50,-50 0,30 -70,0 0,40 70,0 0,30 50,-50"
-     style="fill:#ffffff;fill-rule:evenodd;stroke:#000000;stroke-width:4;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /><path
-     style="fill:#cccccc;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-     d="m 72,230 0,-60 110,0 0,-5 10,10 -10,10 0,-5 -10,0 0,50 -10,0 0,-50 -50,0 0,50 -10,0 0,-50 -20,0 0,50 -10,0"
-     id="path14625" /><rect
-     y="229.99998"
-     x="62"
-     height="110"
-     width="30"
-     id="rect8498"
-     style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" /><rect
-     y="229.99998"
-     x="92"
-     height="110"
-     width="30"
-     id="rect8500"
-     style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" /><rect
-     y="229.99998"
-     x="122"
-     height="110"
-     width="30"
-     id="rect8502"
-     style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" /><rect
-     y="229.99998"
-     x="152"
-     height="110"
-     width="30"
-     id="rect8504"
-     style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" /><rect
-     y="229.99998"
-     x="182"
-     height="110"
-     width="30"
-     id="rect8506"
-     style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" /><rect
-     y="229.99998"
-     x="212"
-     height="110"
-     width="30"
-     id="rect8508"
-     style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" /><rect
-     y="229.99998"
-     x="242"
-     height="110"
-     width="30"
-     id="rect8510"
-     style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" /><rect
-     y="229.99998"
-     x="272"
-     height="110"
-     width="30"
-     id="rect8512"
-     style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" /><rect
-     y="229.99998"
-     x="302"
-     height="110"
-     width="30"
-     id="rect8498-2"
-     style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" /><rect
-     ry="0"
-     y="229.99998"
-     x="362"
-     height="110"
-     width="30"
-     id="rect8502-0"
-     style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" /><rect
-     y="229.99998"
-     x="392"
-     height="110"
-     width="30"
-     id="rect8504-9"
-     style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" /><rect
-     y="229.99998"
-     x="422"
-     height="110"
-     width="30"
-     id="rect8506-3"
-     style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" /><rect
-     y="229.99998"
-     x="452"
-     height="110"
-     width="30"
-     id="rect8508-6"
-     style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" /><path
-     style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;baseline-shift:baseline;text-anchor:start;white-space:normal;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:url(#linearGradient14233);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
-     d="m 480,227.99999 0,2 0,112 30,0 4,0 30,0 0,-114 -30,0 -4,0 -30,0 z m 4,4 26,0 0,106 -26,0 0,-106 z m 30,0 26,0 0,106 -26,0 0,-106 z"
-     id="rect8510-0" /><text
-     id="text8569"
-     y="329.9996"
-     x="77.007317"
-     style="font-style:normal;font-weight:normal;font-size:15px;line-height:125%;font-family:sans-serif;text-align:center;letter-spacing:-0.2px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-     xml:space="preserve"><tspan
-       y="329.9996"
-       x="76.907318"
-       id="tspan8571">0</tspan></text>
-<text
-     id="text8577"
-     y="329.9996"
-     x="106.87183"
-     style="font-style:normal;font-weight:normal;font-size:15px;line-height:125%;font-family:sans-serif;text-align:center;letter-spacing:-0.2px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-     xml:space="preserve"><tspan
-       y="329.9996"
-       x="106.77182"
-       id="tspan8579">1</tspan></text>
-<text
-     id="text8581"
-     y="329.9996"
-     x="137.20508"
-     style="font-style:normal;font-weight:normal;font-size:15px;line-height:125%;font-family:sans-serif;text-align:center;letter-spacing:-0.2px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-     xml:space="preserve"><tspan
-       y="329.9996"
-       x="137.10507"
-       id="tspan8583">2</tspan></text>
-<text
-     id="text8585"
-     y="329.9996"
-     x="167.03296"
-     style="font-style:normal;font-weight:normal;font-size:15px;line-height:125%;font-family:sans-serif;text-align:center;letter-spacing:-0.2px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-     xml:space="preserve"><tspan
-       y="329.9996"
-       x="166.93295"
-       id="tspan8587">3</tspan></text>
-<text
-     id="text8589"
-     y="329.9996"
-     x="197.05859"
-     style="font-style:normal;font-weight:normal;font-size:15px;line-height:125%;font-family:sans-serif;text-align:center;letter-spacing:-0.2px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-     xml:space="preserve"><tspan
-       y="329.9996"
-       x="196.95859"
-       id="tspan8591">4</tspan></text>
-<text
-     id="text8593"
-     y="329.9996"
-     x="227.08057"
-     style="font-style:normal;font-weight:normal;font-size:15px;line-height:125%;font-family:sans-serif;text-align:center;letter-spacing:-0.2px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-     xml:space="preserve"><tspan
-       y="329.9996"
-       x="226.98056"
-       id="tspan8595">5</tspan></text>
-<text
-     id="text8597"
-     y="329.9996"
-     x="256.95239"
-     style="font-style:normal;font-weight:normal;font-size:15px;line-height:125%;font-family:sans-serif;text-align:center;letter-spacing:-0.2px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-     xml:space="preserve"><tspan
-       y="329.9996"
-       x="256.85239"
-       id="tspan8599">6</tspan></text>
-<text
-     id="text8601"
-     y="329.9996"
-     x="287.0293"
-     style="font-style:normal;font-weight:normal;font-size:15px;line-height:125%;font-family:sans-serif;text-align:center;letter-spacing:-0.2px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-     xml:space="preserve"><tspan
-       y="329.9996"
-       x="286.92929"
-       id="tspan8603">7</tspan></text>
-<text
-     id="text8605"
-     y="329.9996"
-     x="317.00732"
-     style="font-style:normal;font-weight:normal;font-size:15px;line-height:125%;font-family:sans-serif;text-align:center;letter-spacing:-0.2px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-     xml:space="preserve"><tspan
-       y="329.9996"
-       x="316.90732"
-       id="tspan8607">8</tspan></text>
-<text
-     id="text8609"
-     y="329.9996"
-     x="347.05859"
-     style="font-style:normal;font-weight:normal;font-size:15px;line-height:125%;font-family:sans-serif;text-align:center;letter-spacing:-0.2px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-     xml:space="preserve"><tspan
-       y="329.9996"
-       x="346.95859"
-       id="tspan8611">9</tspan></text>
-<text
-     id="text8613"
-     y="329.9996"
-     x="376.67773"
-     style="font-style:normal;font-weight:normal;font-size:15px;line-height:125%;font-family:sans-serif;text-align:center;letter-spacing:-0.2px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-     xml:space="preserve"><tspan
-       y="329.9996"
-       x="376.57773"
-       id="tspan8615">.</tspan></text>
-<text
-     id="text8617"
-     y="329.9996"
-     x="406.87183"
-     style="font-style:normal;font-weight:normal;font-size:15px;line-height:125%;font-family:sans-serif;text-align:center;letter-spacing:-0.2px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-     xml:space="preserve"><tspan
-       y="329.9996"
-       x="406.77182"
-       id="tspan8619">.</tspan></text>
-<text
-     id="text8621"
-     y="329.9996"
-     x="436.93042"
-     style="font-style:normal;font-weight:normal;font-size:15px;line-height:125%;font-family:sans-serif;text-align:center;letter-spacing:-0.2px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-     xml:space="preserve"><tspan
-       style="letter-spacing:0px"
-       y="329.9996"
-       x="436.83041"
-       id="tspan8623">.</tspan></text>
-<text
-     id="text8625"
-     y="329.9996"
-     x="466.78027"
-     style="font-style:normal;font-weight:normal;font-size:15px;line-height:125%;font-family:sans-serif;text-align:center;letter-spacing:-0.2px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-     xml:space="preserve"><tspan
-       style="letter-spacing:0px"
-       y="329.9996"
-       x="466.6803"
-       id="tspan8627">.</tspan></text>
-<text
-     id="text8629"
-     y="329.9996"
-     x="496.60083"
-     style="font-style:normal;font-weight:normal;font-size:15px;line-height:125%;font-family:sans-serif;text-align:center;letter-spacing:-0.2px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-     xml:space="preserve"><tspan
-       style="letter-spacing:0px"
-       y="329.9996"
-       x="496.50085"
-       id="tspan8631">.</tspan></text>
-<text
-     id="text8633"
-     y="329.9996"
-     x="526.83521"
-     style="font-style:normal;font-weight:normal;font-size:15px;line-height:125%;font-family:sans-serif;text-align:center;letter-spacing:-0.2px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-     xml:space="preserve"><tspan
-       style="letter-spacing:0px"
-       y="329.9996"
-       x="526.73523"
-       id="tspan8635">.</tspan></text>
-<text
-     id="text8871"
-     y="219.99998"
-     x="247.57275"
-     style="font-style:normal;font-weight:normal;font-size:25px;line-height:125%;font-family:sans-serif;text-align:center;letter-spacing:-0.2px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-     xml:space="preserve"><tspan
-       style="font-size:17.5px;letter-spacing:0px"
-       y="219.99998"
-       x="247.47275"
-       id="tspan8873">Dpb slots</tspan></text>
-<text
-     xml:space="preserve"
-     style="font-style:normal;font-weight:normal;font-size:25px;line-height:125%;font-family:sans-serif;text-align:start;letter-spacing:-0.2px;word-spacing:0px;text-anchor:start;fill:#000000;fill-opacity:1;stroke:#b3b3b3;stroke-width:4;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;"
-     x="167.56763"
-     y="270"
-     id="text14174-3"><tspan
-       id="tspan14176-4"
-       x="167.46762"
-       y="270"
-       style="text-align:center;text-anchor:middle;stroke:#b3b3b3;stroke-width:4;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;stroke-linejoin:round;">Valid picture</tspan><tspan
-       x="167.46762"
-       y="301.25"
-       id="tspan14178-0"
-       style="text-align:center;text-anchor:middle;stroke:#b3b3b3;stroke-width:4;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;stroke-linejoin:round;">references</tspan></text>
-<text
-     xml:space="preserve"
-     style="font-style:normal;font-weight:normal;font-size:25px;line-height:125%;font-family:sans-serif;text-align:start;letter-spacing:-0.2px;word-spacing:0px;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-     x="167.56763"
-     y="270"
-     id="text14174"><tspan
-       id="tspan14176"
-       x="167.46762"
-       y="270"
-       style="text-align:center;text-anchor:middle">Valid picture</tspan><tspan
-       x="167.46762"
-       y="301.25"
-       id="tspan14178"
-       style="text-align:center;text-anchor:middle">references</tspan></text>
-<text
-     xml:space="preserve"
-     style="font-style:normal;font-weight:normal;font-size:25px;line-height:125%;font-family:sans-serif;text-align:center;letter-spacing:-0.2px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:#ffffff;stroke-width:4;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;"
-     x="406.57883"
-     y="269.7695"
-     id="text14180-3"><tspan
-       id="tspan14182-9"
-       x="406.47882"
-       y="269.7695">Unused picture</tspan><tspan
-       x="406.47882"
-       y="301.0195"
-       id="tspan14184-1">references</tspan></text>
-<text
-     xml:space="preserve"
-     style="font-style:normal;font-weight:normal;font-size:25px;line-height:125%;font-family:sans-serif;text-align:center;letter-spacing:-0.2px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-     x="406.57886"
-     y="269.7695"
-     id="text14180"><tspan
-       id="tspan14182"
-       x="406.47885"
-       y="269.7695">Unused picture</tspan><tspan
-       x="406.47885"
-       y="301.0195"
-       id="tspan14184">references</tspan></text>
-<g
-     transform="matrix(1.3333333,0,0,-1.3333333,-212.33581,674.35391)"
-     id="g398"><g
-       clip-path="url(#clipPath404)"
-       id="g400" /></g><text
-     id="text8573"
-     y="460"
-     x="142"
-     style="font-style:normal;font-weight:normal;font-size:25px;line-height:125%;font-family:sans-serif;text-align:center;letter-spacing:-0.2px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-     xml:space="preserve"><tspan
-       y="460"
-       x="142"
-       id="tspan8575" /></text>
-<rect
-     y="380"
-     x="62"
-     height="30"
-     width="30"
-     id="rect8920"
-     style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" /><rect
-     y="380"
-     x="92"
-     height="30"
-     width="30"
-     id="rect8922"
-     style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" /><path
-     id="path8926"
-     d="m 77,379.99999 0,-32"
-     style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker9422)" /><path
-     id="path8928"
-     d="m 107,379.99999 0,-32"
-     style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow1Send)" /><path
-     id="path8930"
-     d="m 137,379.99999 0,-10 30,0 0,-22"
-     style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker9412)" /><rect
-     y="380"
-     x="122"
-     height="30"
-     width="30"
-     id="rect8924"
-     style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" /><rect
-     y="380"
-     x="532.00012"
-     height="30"
-     width="30"
-     id="rect9510"
-     style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" /><path
-     id="path9512"
-     d="m 547,379.99999 0,-10 -200,0 0,-22"
-     style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker9520)" /><text
-     id="text9614"
-     y="401.5242"
-     x="295.31128"
-     style="font-style:normal;font-weight:normal;font-size:15px;line-height:125%;font-family:sans-serif;text-align:center;letter-spacing:-0.2px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-     xml:space="preserve"><tspan
-       style="font-size:17.5px;letter-spacing:0px"
-       y="401.5242"
-       x="295.31128"
-       id="tspan9616">VkVideoReferenceSlotsKHRs</tspan></text>
-<text
-     id="text9626"
-     y="149.32007"
-     x="247.53848"
-     style="font-style:normal;font-weight:normal;font-size:25px;line-height:125%;font-family:sans-serif;text-align:center;letter-spacing:-0.2px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-     xml:space="preserve"><tspan
-       style="letter-spacing:0px"
-       y="149.32007"
-       x="247.43848"
-       id="tspan9628">Decode</tspan></text>
-<text
-     id="text9964"
-     y="388"
-     x="486.00012"
-     style="font-style:normal;font-weight:normal;font-size:25px;line-height:125%;font-family:sans-serif;text-align:center;letter-spacing:-0.2px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-     xml:space="preserve"><tspan
-       style="font-size:17.5px;letter-spacing:0px"
-       y="388"
-       x="485.90012"
-       id="tspan9966">slotIndex</tspan></text>
-<text
-     id="text9968"
-     y="260"
-     x="222"
-     style="font-style:normal;font-weight:normal;font-size:25px;line-height:125%;font-family:sans-serif;text-align:center;letter-spacing:-0.2px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-     xml:space="preserve"><tspan
-       y="260"
-       x="222"
-       id="tspan9970" /></text>
-<path
-     id="path9972"
-     d="m 192,434.99998 -115,0 0,-16"
-     style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:4;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker9980)" /><text
-     id="text10056"
-     y="452.80588"
-     x="117.51691"
-     style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:17.5px;line-height:125%;font-family:sans-serif;text-indent:0;text-align:center;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:0px;word-spacing:0px;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;baseline-shift:baseline;text-anchor:middle;white-space:normal;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
-     xml:space="preserve"><tspan
-       style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:17.5px;line-height:125%;font-family:sans-serif;text-indent:0;text-align:center;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:0px;word-spacing:0px;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;baseline-shift:baseline;text-anchor:middle;white-space:normal;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
-       y="452.80588"
-       x="117.4169"
-       id="tspan10058">pReferenceSlots</tspan></text>
-<text
-     id="text10411"
-     y="710.146"
-     x="-323.39304"
-     style="font-style:normal;font-weight:normal;font-size:25px;line-height:125%;font-family:sans-serif;text-align:center;letter-spacing:-0.2px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-     xml:space="preserve"
-     transform="matrix(0,-1,1,0,0,0)"><tspan
-       style="font-size:17.5px;letter-spacing:0px"
-       y="710.146"
-       x="-323.49304"
-       id="tspan10413">dstPictureResource</tspan></text>
-<text
-     id="text10417"
-     y="131.32198"
-     x="642.00842"
-     style="font-style:normal;font-weight:normal;font-size:25px;line-height:125%;font-family:sans-serif;text-align:center;letter-spacing:-0.2px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-     xml:space="preserve"><tspan
-       style="letter-spacing:0px"
-       y="131.32198"
-       x="641.90845"
-       id="tspan10419">Decoded</tspan><tspan
-       style="letter-spacing:0px"
-       id="tspan10421"
-       y="162.57198"
-       x="641.90845">image</tspan></text>
-<path
-     id="path10513"
-     d="m 562,395 30,0 0,-206"
-     style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:12, 4;stroke-dashoffset:0;stroke-opacity:1;marker-end:url(#marker10521)" /><text
-     id="text10657"
-     y="583.05688"
-     x="-289.40112"
-     style="font-style:normal;font-weight:normal;font-size:25px;line-height:125%;font-family:sans-serif;text-align:center;letter-spacing:-0.2px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-     xml:space="preserve"
-     transform="matrix(0,-1,1,0,0,0)"><tspan
-       style="font-size:17.5px;letter-spacing:0px"
-       y="583.05688"
-       x="-289.5011"
-       id="tspan10659">pPictureResource</tspan></text>
-<text
-     id="text10706"
-     y="245.99998"
-     x="606"
-     style="font-style:normal;font-weight:normal;font-size:15px;line-height:125%;font-family:sans-serif;text-align:start;letter-spacing:0px;word-spacing:0px;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-     xml:space="preserve"><tspan
-       style="font-style:italic;font-size:15px;letter-spacing:0px"
-       y="245.99998"
-       x="606"
-       id="tspan10708">Only if</tspan><tspan
-       id="tspan10756"
-       style="font-style:italic;font-size:15px;letter-spacing:0px"
-       y="264.75"
-       x="606">the same</tspan><tspan
-       style="font-style:italic;font-size:15px;letter-spacing:0px"
-       id="tspan10710"
-       y="283.5"
-       x="606">picture</tspan><tspan
-       style="font-style:italic;font-size:15px;letter-spacing:0px"
-       id="tspan10712"
-       y="302.25"
-       x="606">resource</tspan><tspan
-       style="font-style:italic;font-size:15px;letter-spacing:0px"
-       id="tspan10714"
-       y="321"
-       x="606">is used</tspan><tspan
-       id="tspan10762"
-       style="font-style:italic;font-size:15px;letter-spacing:0px"
-       y="339.75"
-       x="606">for the</tspan><tspan
-       style="font-style:italic;font-size:15px;letter-spacing:0px"
-       id="tspan10716"
-       y="358.5"
-       x="606">decode</tspan><tspan
-       id="tspan10760"
-       style="font-style:italic;font-size:15px;letter-spacing:0px"
-       y="377.25"
-       x="606">Dpb and</tspan><tspan
-       style="font-style:italic;font-size:15px;letter-spacing:0px"
-       id="tspan10718"
-       y="396"
-       x="606">output</tspan><tspan
-       style="font-style:italic;font-size:15px;letter-spacing:0px"
-       id="tspan10720"
-       y="414.75"
-       x="606">image</tspan></text>
-<path
-     id="path10722"
-     d="m 592,210 20,19.99999"
-     style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:4,4;stroke-dashoffset:0" /><rect
-     ry="0"
-     y="229.99998"
-     x="602"
-     height="192"
-     width="79"
-     id="rect10758"
-     style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:4,4;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" /><rect
-     style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:4;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
-     id="rect14235"
-     width="240"
-     height="30"
-     x="192"
-     y="420" /><text
-     xml:space="preserve"
-     style="font-style:normal;font-weight:normal;font-size:25px;line-height:125%;font-family:sans-serif;text-align:center;letter-spacing:-0.2px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-     x="312.18799"
-     y="441.52405"
-     id="text14237"><tspan
-       id="tspan14239"
-       x="312.08798"
-       y="441.52405"
-       style="font-size:17.5px;text-align:center;text-anchor:middle">VkVideoDecodeInfoKHR</tspan></text>
-<text
-     id="text10056-1"
-     y="452.80588"
-     x="527.51691"
-     style="font-style:normal;font-weight:normal;font-size:25px;line-height:125%;font-family:sans-serif;text-align:center;letter-spacing:-0.2px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-     xml:space="preserve"><tspan
-       style="font-size:17.5px;letter-spacing:0px"
-       y="452.80588"
-       x="527.41687"
-       id="tspan10058-3">pSetupReferenceSlot</tspan></text>
-<path
-     id="path9972-0"
-     d="m 432,434.99998 115,0 0,-16"
-     style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:4;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker9980-1)" /><path
-     style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker10521)"
-     d="m 312,450 0,20 380,0 0,-282"
-     id="path14623" /><path
-     style="fill:#cccccc;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-     d="m 182,100 0,-5 10,10 -10,10 0,-5 -20,0 0,-10 z"
-     id="path14629" /><g
-     transform="translate(-1.3165542,0)"
-     id="g10096"><path
-       d="m 39.766092,94.146902 c 0,-5.92 27.68666,-10.72 61.839998,-10.72 34.14666,0 61.84,4.8 61.84,10.72 l 0,42.879988 c 0,5.92 -27.69334,10.72 -61.84,10.72 -34.153338,0 -61.839998,-4.8 -61.839998,-10.72 z"
-       style="fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none"
-       id="path392" /><path
-       d="m 163.44609,94.146902 c 0,5.919998 -27.69334,10.719988 -61.84,10.719988 -34.153338,0 -61.839998,-4.79999 -61.839998,-10.719988"
-       style="fill:none;stroke:#000000;stroke-width:1.27999997;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:8;stroke-dasharray:none;stroke-opacity:1"
-       id="path394" /><path
-       d="m 39.766092,94.146902 c 0,-5.92 27.68666,-10.72 61.839998,-10.72 34.14666,0 61.84,4.8 61.84,10.72 l 0,42.879988 c 0,5.92 -27.69334,10.72 -61.84,10.72 -34.153338,0 -61.839998,-4.8 -61.839998,-10.72 z"
-       style="fill:none;stroke:#000000;stroke-width:1.27999997;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:8;stroke-dasharray:none;stroke-opacity:1"
-       id="path396" /><text
-       xml:space="preserve"
-       style="font-style:normal;font-weight:normal;font-size:25px;line-height:125%;font-family:sans-serif;text-align:center;letter-spacing:-0.2px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-       x="101.2219"
-       y="130.51297"
-       id="text10060"><tspan
-         style="letter-spacing:0px"
-         id="tspan10062"
-         x="101.1219"
-         y="130.51297">Bitstream</tspan></text>
-</g></svg>
diff --git a/registry/vulkan/images/DecodeSessionDpbDecodeWithOutputToVkImageViewNoReferencePictureSlotUpdate.svg b/registry/vulkan/images/DecodeSessionDpbDecodeWithOutputToVkImageViewNoReferencePictureSlotUpdate.svg
deleted file mode 100644
index f2b7d22..0000000
--- a/registry/vulkan/images/DecodeSessionDpbDecodeWithOutputToVkImageViewNoReferencePictureSlotUpdate.svg
+++ /dev/null
@@ -1,593 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<svg
-   xmlns:dc="http://purl.org/dc/elements/1.1/"
-   xmlns:cc="http://creativecommons.org/ns#"
-   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
-   xmlns:svg="http://www.w3.org/2000/svg"
-   xmlns="http://www.w3.org/2000/svg"
-   xmlns:xlink="http://www.w3.org/1999/xlink"
-   viewBox="32 80 690 400"
-   height="400"
-   width="690"
-   xml:space="preserve"
-   id="svg2"
-   version="1.1"><metadata
-     id="metadata8"><rdf:RDF><cc:Work
-         rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
-           rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title></dc:title></cc:Work></rdf:RDF></metadata><defs
-     id="defs6"><linearGradient
-       id="linearGradient14225"><stop
-         id="stop14227"
-         offset="0"
-         style="stop-color:#000000;stop-opacity:1;" /><stop
-         id="stop14229"
-         offset="1"
-         style="stop-color:#000000;stop-opacity:0;" /></linearGradient><marker
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="marker10521"
-       style="overflow:visible"><path
-         id="path10523"
-         d="M 0,0 5,-5 -12.5,0 5,5 0,0 Z"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
-         transform="matrix(-0.2,0,0,-0.2,-1.2,0)" /></marker><marker
-       style="overflow:visible"
-       id="marker10431"
-       refX="0"
-       refY="0"
-       orient="auto"><path
-         transform="matrix(-0.2,0,0,-0.2,-1.2,0)"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
-         d="M 0,0 5,-5 -12.5,0 5,5 0,0 Z"
-         id="path10433" /></marker><marker
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="marker9980"
-       style="overflow:visible"><path
-         id="path9982"
-         d="M 0,0 5,-5 -12.5,0 5,5 0,0 Z"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
-         transform="matrix(-0.2,0,0,-0.2,-1.2,0)" /></marker><marker
-       style="overflow:visible"
-       id="marker9848"
-       refX="0"
-       refY="0"
-       orient="auto"><path
-         transform="matrix(-0.2,0,0,-0.2,-1.2,0)"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
-         d="M 0,0 5,-5 -12.5,0 5,5 0,0 Z"
-         id="path9850" /></marker><marker
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="marker9520"
-       style="overflow:visible"><path
-         id="path9522"
-         d="M 0,0 5,-5 -12.5,0 5,5 0,0 Z"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
-         transform="matrix(-0.2,0,0,-0.2,-1.2,0)" /></marker><marker
-       style="overflow:visible"
-       id="marker9422"
-       refX="0"
-       refY="0"
-       orient="auto"><path
-         transform="matrix(-0.2,0,0,-0.2,-1.2,0)"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
-         d="M 0,0 5,-5 -12.5,0 5,5 0,0 Z"
-         id="path9424" /></marker><marker
-       style="overflow:visible"
-       id="marker9412"
-       refX="0"
-       refY="0"
-       orient="auto"><path
-         transform="matrix(-0.2,0,0,-0.2,-1.2,0)"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
-         d="M 0,0 5,-5 -12.5,0 5,5 0,0 Z"
-         id="path9414" /></marker><marker
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="Arrow1Send"
-       style="overflow:visible"><path
-         id="path8951"
-         d="M 0,0 5,-5 -12.5,0 5,5 0,0 Z"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
-         transform="matrix(-0.2,0,0,-0.2,-1.2,0)" /></marker><clipPath
-       id="clipPath404"
-       clipPathUnits="userSpaceOnUse"><path
-         style="clip-rule:evenodd"
-         id="path402"
-         d="M 1.4305e-5,0 960.00001,0 l 0,540 L 1.4305e-5,540 Z" /></clipPath><linearGradient
-       gradientTransform="translate(-50,-70.000014)"
-       gradientUnits="userSpaceOnUse"
-       y2="350"
-       x2="592"
-       y1="350"
-       x1="532"
-       id="linearGradient14233"
-       xlink:href="#linearGradient14225" /><marker
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="marker9980-1"
-       style="overflow:visible"><path
-         id="path9982-1"
-         d="M 0,0 5,-5 -12.5,0 5,5 0,0 Z"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
-         transform="matrix(-0.2,0,0,-0.2,-1.2,0)" /></marker></defs><rect
-     style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#b3b3b3;stroke-width:4;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
-     id="rect10661"
-     width="520"
-     height="160"
-     x="42"
-     y="199.99998" /><rect
-     style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#b3b3b3;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:4;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
-     id="rect10415"
-     width="140"
-     height="79.900002"
-     x="572"
-     y="100.1" /><rect
-     style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
-     id="rect8500-7"
-     width="30"
-     height="110"
-     x="332"
-     y="229.99998" /><path
-     id="path14627"
-     d="m 562,145 0,5 10,-10 -10,-10 0,5 -250,0 0,10 z"
-     style="fill:#cccccc;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" /><rect
-     style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#b3b3b3;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
-     id="rect9622"
-     width="120"
-     height="100"
-     x="192"
-     y="90" /><path
-     style="fill:#ffffff;fill-rule:evenodd;stroke:#000000;stroke-width:4;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-     d="m 312,140 -50,-50 0,30 -70,0 0,40 70,0 0,30 50,-50"
-     id="path9624" /><path
-     id="path14625"
-     d="m 72,230 0,-60 110,0 0,-5 10,10 -10,10 0,-5 -10,0 0,50 -10,0 0,-50 -50,0 0,50 -10,0 0,-50 -20,0 0,50 -10,0"
-     style="fill:#cccccc;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" /><rect
-     style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
-     id="rect8498"
-     width="30"
-     height="110"
-     x="62"
-     y="229.99998" /><rect
-     style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
-     id="rect8500"
-     width="30"
-     height="110"
-     x="92"
-     y="229.99998" /><rect
-     style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
-     id="rect8502"
-     width="30"
-     height="110"
-     x="122"
-     y="229.99998" /><rect
-     style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
-     id="rect8504"
-     width="30"
-     height="110"
-     x="152"
-     y="229.99998" /><rect
-     style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
-     id="rect8506"
-     width="30"
-     height="110"
-     x="182"
-     y="229.99998" /><rect
-     style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
-     id="rect8508"
-     width="30"
-     height="110"
-     x="212"
-     y="229.99998" /><rect
-     style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
-     id="rect8510"
-     width="30"
-     height="110"
-     x="242"
-     y="229.99998" /><rect
-     style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
-     id="rect8512"
-     width="30"
-     height="110"
-     x="272"
-     y="229.99998" /><rect
-     style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
-     id="rect8498-2"
-     width="30"
-     height="110"
-     x="302"
-     y="229.99998" /><rect
-     style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
-     id="rect8502-0"
-     width="30"
-     height="110"
-     x="362"
-     y="229.99998"
-     ry="0" /><rect
-     style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
-     id="rect8504-9"
-     width="30"
-     height="110"
-     x="392"
-     y="229.99998" /><rect
-     style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
-     id="rect8506-3"
-     width="30"
-     height="110"
-     x="422"
-     y="229.99998" /><rect
-     style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
-     id="rect8508-6"
-     width="30"
-     height="110"
-     x="452"
-     y="229.99998" /><path
-     id="rect8510-0"
-     d="m 480,227.99999 0,2 0,112 30,0 4,0 30,0 0,-114 -30,0 -4,0 -30,0 z m 4,4 26,0 0,106 -26,0 0,-106 z m 30,0 26,0 0,106 -26,0 0,-106 z"
-     style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;baseline-shift:baseline;text-anchor:start;white-space:normal;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:url(#linearGradient14233);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" /><text
-     xml:space="preserve"
-     style="font-style:normal;font-weight:normal;font-size:15px;line-height:125%;font-family:sans-serif;text-align:center;letter-spacing:-0.2px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-     x="77.007317"
-     y="329.9996"
-     id="text8569"><tspan
-       id="tspan8571"
-       x="76.907318"
-       y="329.9996">0</tspan></text>
-<text
-     xml:space="preserve"
-     style="font-style:normal;font-weight:normal;font-size:15px;line-height:125%;font-family:sans-serif;text-align:center;letter-spacing:-0.2px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-     x="106.87183"
-     y="329.9996"
-     id="text8577"><tspan
-       id="tspan8579"
-       x="106.77182"
-       y="329.9996">1</tspan></text>
-<text
-     xml:space="preserve"
-     style="font-style:normal;font-weight:normal;font-size:15px;line-height:125%;font-family:sans-serif;text-align:center;letter-spacing:-0.2px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-     x="137.20508"
-     y="329.9996"
-     id="text8581"><tspan
-       id="tspan8583"
-       x="137.10507"
-       y="329.9996">2</tspan></text>
-<text
-     xml:space="preserve"
-     style="font-style:normal;font-weight:normal;font-size:15px;line-height:125%;font-family:sans-serif;text-align:center;letter-spacing:-0.2px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-     x="167.03296"
-     y="329.9996"
-     id="text8585"><tspan
-       id="tspan8587"
-       x="166.93295"
-       y="329.9996">3</tspan></text>
-<text
-     xml:space="preserve"
-     style="font-style:normal;font-weight:normal;font-size:15px;line-height:125%;font-family:sans-serif;text-align:center;letter-spacing:-0.2px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-     x="197.05859"
-     y="329.9996"
-     id="text8589"><tspan
-       id="tspan8591"
-       x="196.95859"
-       y="329.9996">4</tspan></text>
-<text
-     xml:space="preserve"
-     style="font-style:normal;font-weight:normal;font-size:15px;line-height:125%;font-family:sans-serif;text-align:center;letter-spacing:-0.2px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-     x="227.08057"
-     y="329.9996"
-     id="text8593"><tspan
-       id="tspan8595"
-       x="226.98056"
-       y="329.9996">5</tspan></text>
-<text
-     xml:space="preserve"
-     style="font-style:normal;font-weight:normal;font-size:15px;line-height:125%;font-family:sans-serif;text-align:center;letter-spacing:-0.2px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-     x="256.95239"
-     y="329.9996"
-     id="text8597"><tspan
-       id="tspan8599"
-       x="256.85239"
-       y="329.9996">6</tspan></text>
-<text
-     xml:space="preserve"
-     style="font-style:normal;font-weight:normal;font-size:15px;line-height:125%;font-family:sans-serif;text-align:center;letter-spacing:-0.2px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-     x="287.0293"
-     y="329.9996"
-     id="text8601"><tspan
-       id="tspan8603"
-       x="286.92929"
-       y="329.9996">7</tspan></text>
-<text
-     xml:space="preserve"
-     style="font-style:normal;font-weight:normal;font-size:15px;line-height:125%;font-family:sans-serif;text-align:center;letter-spacing:-0.2px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-     x="317.00732"
-     y="329.9996"
-     id="text8605"><tspan
-       id="tspan8607"
-       x="316.90732"
-       y="329.9996">8</tspan></text>
-<text
-     xml:space="preserve"
-     style="font-style:normal;font-weight:normal;font-size:15px;line-height:125%;font-family:sans-serif;text-align:center;letter-spacing:-0.2px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-     x="347.05859"
-     y="329.9996"
-     id="text8609"><tspan
-       id="tspan8611"
-       x="346.95859"
-       y="329.9996">9</tspan></text>
-<text
-     xml:space="preserve"
-     style="font-style:normal;font-weight:normal;font-size:15px;line-height:125%;font-family:sans-serif;text-align:center;letter-spacing:-0.2px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-     x="376.67773"
-     y="329.9996"
-     id="text8613"><tspan
-       id="tspan8615"
-       x="376.57773"
-       y="329.9996">.</tspan></text>
-<text
-     xml:space="preserve"
-     style="font-style:normal;font-weight:normal;font-size:15px;line-height:125%;font-family:sans-serif;text-align:center;letter-spacing:-0.2px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-     x="406.87183"
-     y="329.9996"
-     id="text8617"><tspan
-       id="tspan8619"
-       x="406.77182"
-       y="329.9996">.</tspan></text>
-<text
-     xml:space="preserve"
-     style="font-style:normal;font-weight:normal;font-size:15px;line-height:125%;font-family:sans-serif;text-align:center;letter-spacing:-0.2px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-     x="436.93042"
-     y="329.9996"
-     id="text8621"><tspan
-       id="tspan8623"
-       x="436.83041"
-       y="329.9996"
-       style="letter-spacing:0px">.</tspan></text>
-<text
-     xml:space="preserve"
-     style="font-style:normal;font-weight:normal;font-size:15px;line-height:125%;font-family:sans-serif;text-align:center;letter-spacing:-0.2px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-     x="466.78027"
-     y="329.9996"
-     id="text8625"><tspan
-       id="tspan8627"
-       x="466.6803"
-       y="329.9996"
-       style="letter-spacing:0px">.</tspan></text>
-<text
-     xml:space="preserve"
-     style="font-style:normal;font-weight:normal;font-size:15px;line-height:125%;font-family:sans-serif;text-align:center;letter-spacing:-0.2px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-     x="496.60083"
-     y="329.9996"
-     id="text8629"><tspan
-       id="tspan8631"
-       x="496.50085"
-       y="329.9996"
-       style="letter-spacing:0px">.</tspan></text>
-<text
-     xml:space="preserve"
-     style="font-style:normal;font-weight:normal;font-size:15px;line-height:125%;font-family:sans-serif;text-align:center;letter-spacing:-0.2px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-     x="526.83521"
-     y="329.9996"
-     id="text8633"><tspan
-       id="tspan8635"
-       x="526.73523"
-       y="329.9996"
-       style="letter-spacing:0px">.</tspan></text>
-<text
-     xml:space="preserve"
-     style="font-style:normal;font-weight:normal;font-size:25px;line-height:125%;font-family:sans-serif;text-align:center;letter-spacing:-0.2px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-     x="247.57275"
-     y="219.99998"
-     id="text8871"><tspan
-       id="tspan8873"
-       x="247.47275"
-       y="219.99998"
-       style="font-size:17.5px;letter-spacing:0px">Dpb slots</tspan></text>
-<text
-     id="text14174-3"
-     y="270"
-     x="167.56763"
-     style="font-style:normal;font-weight:normal;font-size:25px;line-height:125%;font-family:sans-serif;text-align:start;letter-spacing:-0.2px;word-spacing:0px;text-anchor:start;fill:#000000;fill-opacity:1;stroke:#b3b3b3;stroke-width:4;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;"
-     xml:space="preserve"><tspan
-       style="text-align:center;text-anchor:middle;stroke:#b3b3b3;stroke-width:4;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;stroke-linejoin:round;"
-       y="270"
-       x="167.46762"
-       id="tspan14176-4">Valid picture</tspan><tspan
-       style="text-align:center;text-anchor:middle;stroke:#b3b3b3;stroke-width:4;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;stroke-linejoin:round;"
-       id="tspan14178-0"
-       y="301.25"
-       x="167.46762">references</tspan></text>
-<text
-     id="text14174"
-     y="270"
-     x="167.56763"
-     style="font-style:normal;font-weight:normal;font-size:25px;line-height:125%;font-family:sans-serif;text-align:start;letter-spacing:-0.2px;word-spacing:0px;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-     xml:space="preserve"><tspan
-       style="text-align:center;text-anchor:middle"
-       y="270"
-       x="167.46762"
-       id="tspan14176">Valid picture</tspan><tspan
-       style="text-align:center;text-anchor:middle"
-       id="tspan14178"
-       y="301.25"
-       x="167.46762">references</tspan></text>
-<text
-     id="text14180-3"
-     y="269.7695"
-     x="406.57883"
-     style="font-style:normal;font-weight:normal;font-size:25px;line-height:125%;font-family:sans-serif;text-align:center;letter-spacing:-0.2px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:#ffffff;stroke-width:4;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;"
-     xml:space="preserve"><tspan
-       y="269.7695"
-       x="406.47882"
-       id="tspan14182-9">Unused picture</tspan><tspan
-       id="tspan14184-1"
-       y="301.0195"
-       x="406.47882">references</tspan></text>
-<text
-     id="text14180"
-     y="269.7695"
-     x="406.57886"
-     style="font-style:normal;font-weight:normal;font-size:25px;line-height:125%;font-family:sans-serif;text-align:center;letter-spacing:-0.2px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-     xml:space="preserve"><tspan
-       y="269.7695"
-       x="406.47885"
-       id="tspan14182">Unused picture</tspan><tspan
-       id="tspan14184"
-       y="301.0195"
-       x="406.47885">references</tspan></text>
-<g
-     id="g398"
-     transform="matrix(1.3333333,0,0,-1.3333333,-212.33581,674.35391)"><g
-       id="g400"
-       clip-path="url(#clipPath404)" /></g><text
-     xml:space="preserve"
-     style="font-style:normal;font-weight:normal;font-size:25px;line-height:125%;font-family:sans-serif;text-align:center;letter-spacing:-0.2px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-     x="142"
-     y="460"
-     id="text8573"><tspan
-       id="tspan8575"
-       x="142"
-       y="460" /></text>
-<rect
-     style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
-     id="rect8920"
-     width="30"
-     height="30"
-     x="62"
-     y="380" /><rect
-     style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
-     id="rect8922"
-     width="30"
-     height="30"
-     x="92"
-     y="380" /><path
-     style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker9422)"
-     d="m 77,379.99999 0,-32"
-     id="path8926" /><path
-     style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow1Send)"
-     d="m 107,379.99999 0,-32"
-     id="path8928" /><path
-     style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker9412)"
-     d="m 137,379.99999 0,-10 30,0 0,-22"
-     id="path8930" /><rect
-     style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
-     id="rect8924"
-     width="30"
-     height="30"
-     x="122"
-     y="380" /><text
-     xml:space="preserve"
-     style="font-style:normal;font-weight:normal;font-size:15px;line-height:125%;font-family:sans-serif;text-align:center;letter-spacing:-0.2px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-     x="295.31128"
-     y="401.5242"
-     id="text9614"><tspan
-       id="tspan9616"
-       x="295.31128"
-       y="401.5242"
-       style="font-size:17.5px;letter-spacing:0px">VkVideoReferenceSlotsKHRs</tspan></text>
-<text
-     xml:space="preserve"
-     style="font-style:normal;font-weight:normal;font-size:25px;line-height:125%;font-family:sans-serif;text-align:center;letter-spacing:-0.2px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-     x="247.53848"
-     y="149.32007"
-     id="text9626"><tspan
-       id="tspan9628"
-       x="247.43848"
-       y="149.32007"
-       style="letter-spacing:0px">Decode</tspan></text>
-<text
-     xml:space="preserve"
-     style="font-style:normal;font-weight:normal;font-size:25px;line-height:125%;font-family:sans-serif;text-align:center;letter-spacing:-0.2px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-     x="222"
-     y="260"
-     id="text9968"><tspan
-       id="tspan9970"
-       x="222"
-       y="260" /></text>
-<path
-     style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:4;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker9980)"
-     d="m 192,434.99998 -115,0 0,-16"
-     id="path9972" /><text
-     xml:space="preserve"
-     style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:17.5px;line-height:125%;font-family:sans-serif;text-indent:0;text-align:center;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:0px;word-spacing:0px;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;baseline-shift:baseline;text-anchor:middle;white-space:normal;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
-     x="117.51691"
-     y="452.32742"
-     id="text10056"><tspan
-       id="tspan10058"
-       x="117.4169"
-       y="452.32742"
-       style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:17.5px;line-height:125%;font-family:sans-serif;text-indent:0;text-align:center;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:0px;word-spacing:0px;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;baseline-shift:baseline;text-anchor:middle;white-space:normal;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate">pReferenceSlots</tspan></text>
-<text
-     xml:space="preserve"
-     style="font-style:normal;font-weight:normal;font-size:25px;line-height:125%;font-family:sans-serif;text-align:center;letter-spacing:-0.2px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-     x="519.72882"
-     y="452.32742"
-     id="text10411"><tspan
-       id="tspan10413"
-       x="519.62885"
-       y="452.32742"
-       style="font-size:17.5px;letter-spacing:0px">dstPictureResource</tspan></text>
-<text
-     xml:space="preserve"
-     style="font-style:normal;font-weight:normal;font-size:25px;line-height:125%;font-family:sans-serif;text-align:center;letter-spacing:-0.2px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-     x="642.00842"
-     y="131.32198"
-     id="text10417"><tspan
-       id="tspan10419"
-       x="641.90845"
-       y="131.32198"
-       style="letter-spacing:0px">Decoded</tspan><tspan
-       x="641.90845"
-       y="162.57198"
-       id="tspan10421"
-       style="letter-spacing:0px">image</tspan></text>
-<rect
-     y="420"
-     x="192"
-     height="30"
-     width="240"
-     id="rect14235"
-     style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:4;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" /><text
-     id="text14237"
-     y="441.52405"
-     x="312.18799"
-     style="font-style:normal;font-weight:normal;font-size:25px;line-height:125%;font-family:sans-serif;text-align:center;letter-spacing:-0.2px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-     xml:space="preserve"><tspan
-       style="font-size:17.5px;text-align:center;text-anchor:middle"
-       y="441.52405"
-       x="312.08798"
-       id="tspan14239">VkVideoDecodeInfoKHR</tspan></text>
-<path
-     id="path14623"
-     d="m 432,435 210,0 0,-247"
-     style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker10521)" /><path
-     id="path14629"
-     d="m 182,100 0,-5 10,10 -10,10 0,-5 -20,0 0,-10 z"
-     style="fill:#cccccc;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" /><g
-     id="g10096"
-     transform="translate(-1.3165542,0)"><path
-       id="path392"
-       style="fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none"
-       d="m 39.766092,94.146902 c 0,-5.92 27.68666,-10.72 61.839998,-10.72 34.14666,0 61.84,4.8 61.84,10.72 l 0,42.879988 c 0,5.92 -27.69334,10.72 -61.84,10.72 -34.153338,0 -61.839998,-4.8 -61.839998,-10.72 z" /><path
-       id="path394"
-       style="fill:none;stroke:#000000;stroke-width:1.27999997;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:8;stroke-dasharray:none;stroke-opacity:1"
-       d="m 163.44609,94.146902 c 0,5.919998 -27.69334,10.719988 -61.84,10.719988 -34.153338,0 -61.839998,-4.79999 -61.839998,-10.719988" /><path
-       id="path396"
-       style="fill:none;stroke:#000000;stroke-width:1.27999997;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:8;stroke-dasharray:none;stroke-opacity:1"
-       d="m 39.766092,94.146902 c 0,-5.92 27.68666,-10.72 61.839998,-10.72 34.14666,0 61.84,4.8 61.84,10.72 l 0,42.879988 c 0,5.92 -27.69334,10.72 -61.84,10.72 -34.153338,0 -61.839998,-4.8 -61.839998,-10.72 z" /><text
-       id="text10060"
-       y="130.51297"
-       x="101.2219"
-       style="font-style:normal;font-weight:normal;font-size:25px;line-height:125%;font-family:sans-serif;text-align:center;letter-spacing:-0.2px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-       xml:space="preserve"><tspan
-         y="130.51297"
-         x="101.1219"
-         id="tspan10062"
-         style="letter-spacing:0px">Bitstream</tspan></text>
-</g></svg>
diff --git a/registry/vulkan/images/README.adoc b/registry/vulkan/images/README.adoc
deleted file mode 100644
index 1783431..0000000
--- a/registry/vulkan/images/README.adoc
+++ /dev/null
@@ -1,46 +0,0 @@
-// Copyright 2014-2021 The Khronos Group Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-= Diagrams
-
-Diagrams in this folder have been created with Inkscape, using a restricted
-color palette (white, black, 50% gray and pure red), one choice of dotted
-vs. solid lines, and only two text sizes (10 and 12) using the generic
-"sans serif" font family.
-
-Size 10 fonts should only be used for incidental text for labelling in the
-middle of the diagram as an identifying mark (e.g. an example sample point);
-prefer size 12 fonts wherever possible.
-Smaller sizes are unreadable at default zoom, and larger sizes stick out and
-are jarring within the context of the specification.
-
-All diagrams are sized 1:1 so that no additional rescaling is required in
-the Specification, which would affect the font sizes.
-
-If adding any new diagrams, please try to maintain consistency with the rest
-of these diagrams in order to aid consistency and readability of the Vulkan
-specification.
-Inkscape does not need to be used, but is recommended as a powerful free
-tool for generating vector diagrams, and is known to generate diagrams
-compatible with the rest of the Vulkan toolchain.
-If using other tools, please ensure that the diagram renders correctly in
-popular browsers and in the PDF generation path for the specification.
-
-
-
-== UTF-8 Characters
-
-At the moment, the PDF conversion path only supports the Windows-1252
-character set, as we are currently using the standard fonts built into every
-PDF viewer - such that we don't have to embed a different font.
-Unfortunately these only support Windows-1252, which is a highly limited
-character set.
-
-As such, characters not in that set will not display properly when present
-in an SVG, and will fire a warning when building the PDF.
-Luckily, Inkscape has an "Object to path" function built in, which will
-convert text to a raw path, allowing these characters to be supported.
-
-Please ensure that you build the PDF before submitting any new images,
-particularly with non-standard characters, in order to catch such errors.
diff --git a/registry/vulkan/images/VideoDecodeSessionDpbStates.svg b/registry/vulkan/images/VideoDecodeSessionDpbStates.svg
deleted file mode 100644
index a9899c1..0000000
--- a/registry/vulkan/images/VideoDecodeSessionDpbStates.svg
+++ /dev/null
@@ -1,431 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<svg
-   xmlns:dc="http://purl.org/dc/elements/1.1/"
-   xmlns:cc="http://creativecommons.org/ns#"
-   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
-   xmlns:svg="http://www.w3.org/2000/svg"
-   xmlns="http://www.w3.org/2000/svg"
-   width="1280"
-   height="720"
-   viewBox="0 0 1280 720.00001"
-   id="svg6344"
-   version="1.1">
-  <defs
-     id="defs6346">
-    <marker
-       orient="auto"
-       refY="0.0"
-       refX="0.0"
-       id="marker5602"
-       style="overflow:visible;">
-      <path
-         id="path5604"
-         d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
-         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1"
-         transform="scale(0.4) rotate(180) translate(10,0)" />
-    </marker>
-    <marker
-       style="overflow:visible;"
-       id="marker12421"
-       refX="0.0"
-       refY="0.0"
-       orient="auto">
-      <path
-         transform="scale(0.4) rotate(180) translate(10,0)"
-         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1"
-         d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
-         id="path12423" />
-    </marker>
-    <marker
-       style="overflow:visible;"
-       id="marker11667"
-       refX="0.0"
-       refY="0.0"
-       orient="auto">
-      <path
-         transform="scale(0.4) rotate(180) translate(10,0)"
-         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1"
-         d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
-         id="path11669" />
-    </marker>
-    <marker
-       style="overflow:visible;"
-       id="marker11475"
-       refX="0.0"
-       refY="0.0"
-       orient="auto">
-      <path
-         transform="scale(0.4) rotate(180) translate(10,0)"
-         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1"
-         d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
-         id="path11477" />
-    </marker>
-    <marker
-       orient="auto"
-       refY="0.0"
-       refX="0.0"
-       id="Arrow1Mend"
-       style="overflow:visible;">
-      <path
-         id="path8523"
-         d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
-         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1"
-         transform="scale(0.4) rotate(180) translate(10,0)" />
-    </marker>
-    <marker
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="Arrow1Mend-7"
-       style="overflow:visible">
-      <path
-         id="path8523-9"
-         d="M 0,0 5,-5 -12.5,0 5,5 0,0 Z"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
-         transform="matrix(-0.4,0,0,-0.4,-4,0)" />
-    </marker>
-    <marker
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="Arrow1Mend-02"
-       style="overflow:visible">
-      <path
-         id="path8523-3"
-         d="M 0,0 5,-5 -12.5,0 5,5 0,0 Z"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
-         transform="matrix(-0.4,0,0,-0.4,-4,0)" />
-    </marker>
-    <marker
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="Arrow1Mend-02-5"
-       style="overflow:visible">
-      <path
-         id="path8523-3-9"
-         d="M 0,0 5,-5 -12.5,0 5,5 0,0 Z"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
-         transform="matrix(-0.4,0,0,-0.4,-4,0)" />
-    </marker>
-  </defs>
-  <metadata
-     id="metadata6349">
-    <rdf:RDF>
-      <cc:Work
-         rdf:about="">
-        <dc:format>image/svg+xml</dc:format>
-        <dc:type
-           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
-        <dc:title></dc:title>
-      </cc:Work>
-    </rdf:RDF>
-  </metadata>
-  <g
-     id="layer1"
-     transform="translate(0,-332.36216)">
-    <text
-       xml:space="preserve"
-       style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:25px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif Italic';text-align:center;letter-spacing:-0.2px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-       x="499.45706"
-       y="399.25888"
-       id="text6896"><tspan
-         x="499.35706"
-         y="399.25888"
-         id="tspan7012">New decode session Dpb</tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:25px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif Italic';text-align:center;letter-spacing:-0.2px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-       x="499.57913"
-       y="539.25891"
-       id="text6904"><tspan
-         x="499.47913"
-         y="539.25891"
-         id="tspan7014">Unused picture reference</tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:25px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif Italic';text-align:center;letter-spacing:-0.2px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-       x="499.43875"
-       y="679.25891"
-       id="text6904-2"><tspan
-         x="499.33875"
-         y="679.25891"
-         id="tspan7016">Invalid picture reference</tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:25px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif Italic';text-align:center;letter-spacing:-0.2px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-       x="499.57913"
-       y="819.25891"
-       id="text6904-0"><tspan
-         x="499.47913"
-         y="819.25891"
-         id="tspan7018">Updating picture reference</tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:25px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif Italic';text-align:center;letter-spacing:-0.2px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-       x="500.5679"
-       y="999.25891"
-       id="text6904-3"><tspan
-         x="500.4679"
-         y="999.25891"
-         id="tspan7020">Valid picture reference</tspan></text>
-    <rect
-       style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
-       id="rect7084"
-       width="360"
-       height="40"
-       x="320.00027"
-       y="372.36191" />
-    <rect
-       style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
-       id="rect7086"
-       width="360"
-       height="40"
-       x="320.00027"
-       y="512.36194" />
-    <rect
-       style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
-       id="rect7088"
-       width="360"
-       height="40"
-       x="320.00027"
-       y="652.36194" />
-    <rect
-       style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
-       id="rect7090"
-       width="360"
-       height="40"
-       x="320.00027"
-       y="792.36194" />
-    <rect
-       style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
-       id="rect7092"
-       width="360"
-       height="40"
-       x="320.00027"
-       y="972.36194" />
-    <path
-       style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker-end:url(#Arrow1Mend);color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
-       d="m 500,412.36188 0,92"
-       id="path8508" />
-    <path
-       style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker-end:url(#Arrow1Mend-7);color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
-       d="m 500,552.36188 0,92"
-       id="path8508-2" />
-    <path
-       style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker-end:url(#Arrow1Mend-02);color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
-       d="m 500,692.36188 0,92"
-       id="path8508-7" />
-    <path
-       style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker-end:url(#Arrow1Mend-02-5);color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
-       d="m 500,832.36188 0,131.99995"
-       id="path8508-7-2" />
-    <path
-       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker11475)"
-       d="m 680,992.36189 340,0 0,-320 -332,0"
-       id="path11431" />
-    <path
-       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       d="m 680,812.36189 340,0"
-       id="path11851" />
-    <path
-       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker11667)"
-       d="m 320,992.36189 -300,0 0,-459.99999 292,0"
-       id="path11853" />
-    <path
-       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       d="m 320,672.36189 -300,0"
-       id="path11855" />
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-weight:normal;font-size:25px;line-height:125%;font-family:sans-serif;text-align:center;letter-spacing:-0.2px;word-spacing:0px;text-anchor:middle;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:8;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       x="499.14578"
-       y="469.25885"
-       id="text6990"><tspan
-         x="499.04578"
-         y="469.25885"
-         id="tspan7022">Bind memory</tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-weight:normal;font-size:25px;line-height:125%;font-family:sans-serif;text-align:center;letter-spacing:-0.2px;word-spacing:0px;text-anchor:middle;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:8;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       x="500.20779"
-       y="609.25891"
-       id="text6994"><tspan
-         id="tspan6996"
-         x="500.10779"
-         y="609.25891">Activate reference Dpb slot</tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-weight:normal;font-size:25px;line-height:125%;font-family:sans-serif;text-align:center;letter-spacing:-0.2px;word-spacing:0px;text-anchor:middle;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:8;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       x="499.07864"
-       y="749.25891"
-       id="text6998"><tspan
-         id="tspan7000"
-         x="498.97864"
-         y="749.25891">Decode to a reference Dpb slot</tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-weight:normal;font-size:25px;line-height:125%;font-family:sans-serif;text-align:center;letter-spacing:-0.2px;word-spacing:0px;text-anchor:middle;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:8;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       x="500.46414"
-       y="893.63391"
-       id="text7048"><tspan
-         id="tspan7050"
-         x="500.36414"
-         y="893.63391">On successful decode operation completion,</tspan><tspan
-         x="500.36414"
-         y="924.88391"
-         id="tspan7052">set the slot as a reference picture with valid metadata</tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-weight:normal;font-size:25px;line-height:125%;font-family:sans-serif;text-align:center;letter-spacing:-0.2px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-       x="499.14578"
-       y="469.25885"
-       id="text6990-3"><tspan
-         x="499.04578"
-         y="469.25885"
-         id="tspan7022-1">Bind memory</tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-weight:normal;font-size:25px;line-height:125%;font-family:sans-serif;text-align:center;letter-spacing:-0.2px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-       x="500.20779"
-       y="609.25891"
-       id="text6994-9"><tspan
-         id="tspan6996-4"
-         x="500.10779"
-         y="609.25891">Activate reference Dpb slot</tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-weight:normal;font-size:25px;line-height:125%;font-family:sans-serif;text-align:center;letter-spacing:-0.2px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-       x="499.07864"
-       y="749.25891"
-       id="text6998-7"><tspan
-         id="tspan7000-8"
-         x="498.97864"
-         y="749.25891">Decode to a reference Dpb slot</tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-weight:normal;font-size:25px;line-height:125%;font-family:sans-serif;text-align:center;letter-spacing:-0.2px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-       x="500.46414"
-       y="893.63391"
-       id="text7048-4"><tspan
-         id="tspan7050-5"
-         x="500.36414"
-         y="893.63391">On successful decode operation completion,</tspan><tspan
-         x="500.36414"
-         y="924.88391"
-         id="tspan7052-0">set the slot as a reference picture with valid metadata</tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-weight:normal;font-size:25px;line-height:125%;font-family:sans-serif;text-align:center;letter-spacing:-0.2px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:8;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       x="167.46216"
-       y="523.63391"
-       id="text7054-3"><tspan
-         id="tspan7056-6"
-         x="167.36215"
-         y="523.63391">Deactivate</tspan><tspan
-         x="167.36215"
-         y="554.88391"
-         id="tspan7070-1">reference Dpb slot</tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-weight:normal;font-size:25px;line-height:125%;font-family:sans-serif;text-align:center;letter-spacing:-0.2px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:8;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       x="863.51117"
-       y="803.63391"
-       id="text7058-0"><tspan
-         id="tspan7060-6"
-         x="863.41119"
-         y="803.63391">Unsuccessful video</tspan><tspan
-         x="863.41119"
-         y="834.88391"
-         id="tspan7074-3">decode operation</tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-weight:normal;font-size:25px;line-height:125%;font-family:sans-serif;text-align:center;letter-spacing:-0.2px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:8;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       x="863.09003"
-       y="983.63397"
-       id="text7062-2"><tspan
-         id="tspan7064-0"
-         x="862.99005"
-         y="983.63397">Invalidate</tspan><tspan
-         x="862.99005"
-         y="1014.884"
-         id="tspan7068-6">reference Dpb slot</tspan></text>
-    <path
-       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:12, 12;stroke-dashoffset:0;stroke-opacity:1"
-       d="m 2,572.36216 1268,0"
-       id="path5364" />
-    <g
-       id="g5966"
-       transform="translate(9.9999974,-20.000007)">
-      <path
-         id="path5366"
-         d="m 849.99971,592.36217 0,60"
-         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker5602)" />
-      <path
-         id="path5368"
-         d="m 849.99971,592.36217 0,-60"
-         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker12421)" />
-    </g>
-    <g
-       id="g6010"
-       transform="translate(0,-13.103047)">
-      <text
-         id="text5810"
-         y="552.36218"
-         x="1074"
-         style="font-style:normal;font-weight:normal;font-size:25px;line-height:125%;font-family:sans-serif;text-align:center;letter-spacing:-0.2px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-         xml:space="preserve"><tspan
-           id="tspan5814"
-           y="552.36218"
-           x="1073.9">Deactivated reference Dpb slot</tspan></text>
-      <text
-         id="text5816"
-         y="632.36218"
-         x="1074"
-         style="font-style:normal;font-weight:normal;font-size:25px;line-height:125%;font-family:sans-serif;text-align:center;letter-spacing:-0.2px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-         xml:space="preserve"><tspan
-           y="632.36218"
-           x="1073.9"
-           id="tspan5818">Activated reference Dpb slot</tspan></text>
-    </g>
-    <text
-       xml:space="preserve"
-       style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:25px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif Italic';text-align:center;letter-spacing:-0.2px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-       x="1174"
-       y="747.93225"
-       id="text6016"><tspan
-         id="tspan6018"
-         x="1173.9"
-         y="747.93225">The picture</tspan><tspan
-         x="1173.9"
-         y="779.18225"
-         id="tspan6020">resource's</tspan><tspan
-         x="1173.9"
-         y="810.43225"
-         id="tspan6024">memory must</tspan><tspan
-         x="1173.9"
-         y="841.68225"
-         id="tspan6028">be resident</tspan><tspan
-         x="1173.9"
-         y="872.93225"
-         id="tspan6030">within these</tspan><tspan
-         x="1173.9"
-         y="904.18225"
-         id="tspan6032">states of</tspan><tspan
-         x="1173.9"
-         y="935.43225"
-         id="tspan6034">the slot</tspan></text>
-    <g
-       id="g6062"
-       transform="translate(0,-20.000007)">
-      <path
-         id="path6040"
-         d="m 1040,692.36216 c 40,0 0,160 40,160"
-         style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" />
-      <path
-         id="path6040-6"
-         d="m 1040,1012.3622 c 40,0 0,-160.00004 40,-160.00004"
-         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
-    </g>
-  </g>
-</svg>
diff --git a/registry/vulkan/images/accelstruct.svg b/registry/vulkan/images/accelstruct.svg
deleted file mode 100644
index 175ff40..0000000
--- a/registry/vulkan/images/accelstruct.svg
+++ /dev/null
@@ -1,325 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Created with Inkscape (http://www.inkscape.org/) -->
-
-<svg
-   xmlns:dc="http://purl.org/dc/elements/1.1/"
-   xmlns:cc="http://creativecommons.org/ns#"
-   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
-   xmlns:svg="http://www.w3.org/2000/svg"
-   xmlns="http://www.w3.org/2000/svg"
-   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
-   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
-   width="122.6349mm"
-   height="111.36717mm"
-   viewBox="0 0 122.6349 111.36717"
-   version="1.1"
-   id="svg4035"
-   inkscape:version="0.92.3 (2405546, 2018-03-11)"
-   sodipodi:docname="accelstruct.svg">
-  <defs
-     id="defs4029">
-    <marker
-       inkscape:isstock="true"
-       style="overflow:visible"
-       id="marker5699"
-       refX="0"
-       refY="0"
-       orient="auto"
-       inkscape:stockid="Arrow1Lend">
-      <path
-         transform="matrix(-0.8,0,0,-0.8,-10,0)"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         id="path5697"
-         inkscape:connector-curvature="0" />
-    </marker>
-    <marker
-       inkscape:stockid="Arrow1Lend"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="Arrow1Lend"
-       style="overflow:visible"
-       inkscape:isstock="true"
-       inkscape:collect="always">
-      <path
-         id="path4902"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         transform="matrix(-0.8,0,0,-0.8,-10,0)"
-         inkscape:connector-curvature="0" />
-    </marker>
-    <marker
-       inkscape:stockid="Arrow1Lend"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="Arrow1Lend-2"
-       style="overflow:visible"
-       inkscape:isstock="true">
-      <path
-         inkscape:connector-curvature="0"
-         id="path4902-7"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         transform="matrix(-0.8,0,0,-0.8,-10,0)" />
-    </marker>
-    <marker
-       inkscape:stockid="Arrow1Lend"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="Arrow1Lend-1"
-       style="overflow:visible"
-       inkscape:isstock="true">
-      <path
-         inkscape:connector-curvature="0"
-         id="path4902-5"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         transform="matrix(-0.8,0,0,-0.8,-10,0)" />
-    </marker>
-    <marker
-       inkscape:stockid="Arrow1Lend"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="Arrow1Lend-0"
-       style="overflow:visible"
-       inkscape:isstock="true">
-      <path
-         inkscape:connector-curvature="0"
-         id="path4902-3"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         transform="matrix(-0.8,0,0,-0.8,-10,0)" />
-    </marker>
-  </defs>
-  <sodipodi:namedview
-     id="base"
-     pagecolor="#ffffff"
-     bordercolor="#666666"
-     borderopacity="1.0"
-     inkscape:pageopacity="0.0"
-     inkscape:pageshadow="2"
-     inkscape:zoom="1.4"
-     inkscape:cx="205.45633"
-     inkscape:cy="48.906685"
-     inkscape:document-units="mm"
-     inkscape:current-layer="layer1"
-     showgrid="false"
-     inkscape:window-width="2560"
-     inkscape:window-height="1538"
-     inkscape:window-x="-8"
-     inkscape:window-y="-8"
-     inkscape:window-maximized="0" />
-  <metadata
-     id="metadata4032">
-    <rdf:RDF>
-      <cc:Work
-         rdf:about="">
-        <dc:format>image/svg+xml</dc:format>
-        <dc:type
-           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
-        <dc:title></dc:title>
-      </cc:Work>
-    </rdf:RDF>
-  </metadata>
-  <g
-     inkscape:label="Layer 1"
-     inkscape:groupmode="layer"
-     id="layer1"
-     transform="translate(-36.531136,-66.301968)">
-    <rect
-       id="rect4037"
-       width="117.55059"
-       height="33.639881"
-       x="39.498512"
-       y="66.434525"
-       style="fill:#cecece;fill-opacity:1;stroke:#000000;stroke-width:0.26511249;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
-    <rect
-       id="rect4037-1"
-       width="34.855381"
-       height="33.760372"
-       x="54.720116"
-       y="143.83646"
-       style="fill:#cecece;fill-opacity:1;stroke:#000000;stroke-width:0.14462024;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
-    <rect
-       id="rect4037-1-1"
-       width="34.855381"
-       height="33.760372"
-       x="120.36967"
-       y="143.83646"
-       style="fill:#cecece;fill-opacity:1;stroke:#000000;stroke-width:0.14462024;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
-    <rect
-       style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:0.26511249;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       id="rect4874"
-       width="34.206844"
-       height="21.355652"
-       x="36.663692"
-       y="109.68093"
-       ry="6.6145835" />
-    <rect
-       style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:0.26511249;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       id="rect4874-5"
-       width="34.206844"
-       height="21.355654"
-       x="82.682297"
-       y="109.68093"
-       ry="6.6145835" />
-    <rect
-       style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:0.26511249;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       id="rect4874-4"
-       width="34.206844"
-       height="21.355654"
-       x="124.82664"
-       y="109.68093"
-       ry="6.6145835" />
-    <path
-       style="fill:none;stroke:#000000;stroke-width:0.26458332;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow1Lend)"
-       d="m 53.861607,100.45238 v 9.07143"
-       id="path4897"
-       inkscape:connector-curvature="0" />
-    <path
-       style="fill:none;stroke:#000000;stroke-width:0.26458332;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow1Lend-2)"
-       d="m 100.35268,100.00656 v 9.07143"
-       id="path4897-7"
-       inkscape:connector-curvature="0" />
-    <path
-       style="fill:none;stroke:#000000;stroke-width:0.26458332;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow1Lend-1)"
-       d="m 141.17411,100.38454 v 9.07144"
-       id="path4897-3"
-       inkscape:connector-curvature="0" />
-    <path
-       style="fill:none;stroke:#000000;stroke-width:0.30833337;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow1Lend-0)"
-       d="m 137.20536,131.26903 v 12.31946"
-       id="path4897-4"
-       inkscape:connector-curvature="0" />
-    <path
-       style="fill:none;stroke:#000000;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker5699)"
-       d="m 52.727677,131.25744 v 7.18155 h 18.898811 v 5.29166"
-       id="path5689"
-       inkscape:connector-curvature="0" />
-    <path
-       style="fill:none;stroke:#000000;stroke-width:0.2711173px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-       d="m 100.35268,130.50149 v 7.9375 H 71.626488"
-       id="path5743"
-       inkscape:connector-curvature="0" />
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-weight:normal;font-size:10.58333302px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
-       x="46.680061"
-       y="85.333328"
-       id="text5747"><tspan
-         sodipodi:role="line"
-         x="46.680061"
-         y="85.333328"
-         style="font-size:6.3499999px;stroke-width:0.26458332"
-         id="tspan5749">Top-Level Acceleration Structure</tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-weight:normal;font-size:10.58333302px;line-height:0.75;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
-       x="55.942436"
-       y="153.21938"
-       id="text5747-1"><tspan
-         sodipodi:role="line"
-         x="55.942436"
-         y="153.21938"
-         style="font-size:4.93888903px;line-height:0px;stroke-width:0.26458332"
-         id="tspan5749-5">Bottom-Level</tspan><tspan
-         sodipodi:role="line"
-         x="55.942436"
-         y="161.15688"
-         style="font-size:4.93888903px;line-height:0px;stroke-width:0.26458332"
-         id="tspan5773">Acceleration</tspan><tspan
-         sodipodi:role="line"
-         x="55.942436"
-         y="169.09438"
-         style="font-size:4.93888903px;line-height:0px;stroke-width:0.26458332"
-         id="tspan5777">Structure</tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-weight:normal;font-size:10.58333302px;line-height:0.75;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
-       x="120.77655"
-       y="153.21938"
-       id="text5747-1-2"><tspan
-         sodipodi:role="line"
-         x="120.77655"
-         y="153.21938"
-         style="font-size:4.93888903px;line-height:0px;stroke-width:0.26458332"
-         id="tspan5749-5-0">Bottom-Level</tspan><tspan
-         sodipodi:role="line"
-         x="120.77655"
-         y="161.15688"
-         style="font-size:4.93888903px;line-height:0px;stroke-width:0.26458332"
-         id="tspan5773-3">Acceleration</tspan><tspan
-         sodipodi:role="line"
-         x="120.77655"
-         y="169.09438"
-         style="font-size:4.93888903px;line-height:0px;stroke-width:0.26458332"
-         id="tspan5777-3">Structure</tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-weight:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
-       x="41.388393"
-       y="117.02173"
-       id="text5810"><tspan
-         sodipodi:role="line"
-         id="tspan5808"
-         x="41.388393"
-         y="117.02173"
-         style="stroke-width:0.26458332">Transform</tspan><tspan
-         sodipodi:role="line"
-         x="41.388393"
-         y="122.31339"
-         style="stroke-width:0.26458332"
-         id="tspan5812">and shading</tspan><tspan
-         sodipodi:role="line"
-         x="41.388393"
-         y="127.60506"
-         style="stroke-width:0.26458332"
-         id="tspan5814">information</tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-weight:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
-       x="87.024742"
-       y="117.02173"
-       id="text5810-7"><tspan
-         sodipodi:role="line"
-         id="tspan5808-6"
-         x="87.024742"
-         y="117.02173"
-         style="stroke-width:0.26458332">Transform</tspan><tspan
-         sodipodi:role="line"
-         x="87.024742"
-         y="122.31339"
-         style="stroke-width:0.26458332"
-         id="tspan5812-7">and shading</tspan><tspan
-         sodipodi:role="line"
-         x="87.024742"
-         y="127.60506"
-         style="stroke-width:0.26458332"
-         id="tspan5814-8">information</tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-weight:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
-       x="129.92503"
-       y="117.02173"
-       id="text5810-73"><tspan
-         sodipodi:role="line"
-         id="tspan5808-5"
-         x="129.92503"
-         y="117.02173"
-         style="stroke-width:0.26458332">Transform</tspan><tspan
-         sodipodi:role="line"
-         x="129.92503"
-         y="122.31339"
-         style="stroke-width:0.26458332"
-         id="tspan5812-1">and shading</tspan><tspan
-         sodipodi:role="line"
-         x="129.92503"
-         y="127.60506"
-         style="stroke-width:0.26458332"
-         id="tspan5814-80">information</tspan></text>
-  </g>
-</svg>
diff --git a/registry/vulkan/images/base_image_sample_grid.svg b/registry/vulkan/images/base_image_sample_grid.svg
deleted file mode 100644
index 17d0832..0000000
--- a/registry/vulkan/images/base_image_sample_grid.svg
+++ /dev/null
@@ -1,666 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Created with Inkscape (http://www.inkscape.org/) -->
-
-<svg
-   xmlns:dc="http://purl.org/dc/elements/1.1/"
-   xmlns:cc="http://creativecommons.org/ns#"
-   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
-   xmlns:svg="http://www.w3.org/2000/svg"
-   xmlns="http://www.w3.org/2000/svg"
-   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
-   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
-   width="706.10547"
-   height="384.11328"
-   viewBox="0 0 186.82375 101.62997"
-   version="1.1"
-   id="svg8"
-   inkscape:version="0.92.2 (5c3e80d, 2017-08-06)"
-   sodipodi:docname="base_image_sample_grid.svg">
-  <defs
-     id="defs2">
-    <marker
-       inkscape:isstock="true"
-       style="overflow:visible"
-       id="marker1483"
-       refX="0"
-       refY="0"
-       orient="auto"
-       inkscape:stockid="Arrow1Lend">
-      <path
-         transform="matrix(-0.8,0,0,-0.8,-10,0)"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         id="path1481"
-         inkscape:connector-curvature="0" />
-    </marker>
-    <marker
-       inkscape:stockid="Arrow1Lend"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="Arrow1Lend"
-       style="overflow:visible"
-       inkscape:isstock="true"
-       inkscape:collect="always">
-      <path
-         id="path977"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         transform="matrix(-0.8,0,0,-0.8,-10,0)"
-         inkscape:connector-curvature="0" />
-    </marker>
-    <marker
-       inkscape:stockid="Arrow1Lend"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="Arrow1Lend-0"
-       style="overflow:visible"
-       inkscape:isstock="true">
-      <path
-         inkscape:connector-curvature="0"
-         id="path977-6"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         transform="matrix(-0.8,0,0,-0.8,-10,0)" />
-    </marker>
-    <marker
-       inkscape:isstock="true"
-       style="overflow:visible"
-       id="marker1483-7"
-       refX="0"
-       refY="0"
-       orient="auto"
-       inkscape:stockid="Arrow1Lend">
-      <path
-         inkscape:connector-curvature="0"
-         transform="matrix(-0.8,0,0,-0.8,-10,0)"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         id="path1481-0" />
-    </marker>
-  </defs>
-  <sodipodi:namedview
-     id="base"
-     pagecolor="#ffffff"
-     bordercolor="#666666"
-     borderopacity="1.0"
-     inkscape:pageopacity="0.0"
-     inkscape:pageshadow="2"
-     inkscape:zoom="1.48"
-     inkscape:cx="212.25143"
-     inkscape:cy="203.48463"
-     inkscape:document-units="px"
-     inkscape:current-layer="layer1"
-     showgrid="true"
-     inkscape:snap-object-midpoints="true"
-     inkscape:snap-text-baseline="true"
-     inkscape:window-width="1680"
-     inkscape:window-height="987"
-     inkscape:window-x="-8"
-     inkscape:window-y="-8"
-     inkscape:window-maximized="0"
-     fit-margin-top="1"
-     fit-margin-right="1"
-     fit-margin-bottom="1"
-     fit-margin-left="1"
-     units="px"
-     inkscape:snap-center="true">
-    <inkscape:grid
-       type="xygrid"
-       id="grid12"
-       originx="0.79995428"
-       originy="-29.882412"
-       dotted="false" />
-  </sodipodi:namedview>
-  <metadata
-     id="metadata5">
-    <rdf:RDF>
-      <cc:Work
-         rdf:about="">
-        <dc:format>image/svg+xml</dc:format>
-        <dc:type
-           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
-        <dc:title />
-      </cc:Work>
-    </rdf:RDF>
-  </metadata>
-  <g
-     inkscape:label="Layer 1"
-     inkscape:groupmode="layer"
-     id="layer1"
-     transform="translate(-6.9498988,47.8249)">
-    <g
-       id="g1953"
-       transform="translate(-2.6458349,-3.056108e-6)">
-      <text
-         id="text121"
-         y="-32.729179"
-         x="34.208187"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
-         xml:space="preserve"><tspan
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332"
-           y="-32.729179"
-           x="34.208187"
-           id="tspan119"
-           sodipodi:role="line">3</tspan></text>
-      <text
-         id="text121-3"
-         y="-14.208342"
-         x="34.208187"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
-         xml:space="preserve"><tspan
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332"
-           y="-14.208342"
-           x="34.208187"
-           id="tspan119-1"
-           sodipodi:role="line">2</tspan></text>
-      <text
-         id="text121-0"
-         y="4.3124924"
-         x="34.208187"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
-         xml:space="preserve"><tspan
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332"
-           y="4.3124924"
-           x="34.208187"
-           id="tspan119-4"
-           sodipodi:role="line">1</tspan></text>
-      <text
-         id="text121-33"
-         y="22.833326"
-         x="34.208187"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
-         xml:space="preserve"><tspan
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332"
-           y="22.833326"
-           x="34.208187"
-           id="tspan119-6"
-           sodipodi:role="line">0</tspan></text>
-      <text
-         id="text121-6"
-         y="36.062492"
-         x="47.437355"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
-         xml:space="preserve"><tspan
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332"
-           y="36.062492"
-           x="47.437355"
-           id="tspan119-11"
-           sodipodi:role="line">0</tspan></text>
-      <text
-         id="text121-30"
-         y="36.062492"
-         x="65.958191"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
-         xml:space="preserve"><tspan
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332"
-           y="36.062492"
-           x="65.958191"
-           id="tspan119-47"
-           sodipodi:role="line">1</tspan></text>
-      <text
-         id="text121-1"
-         y="36.062492"
-         x="84.479027"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
-         xml:space="preserve"><tspan
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332"
-           y="36.062492"
-           x="84.479027"
-           id="tspan119-9"
-           sodipodi:role="line">2</tspan></text>
-      <text
-         id="text121-8"
-         y="36.062492"
-         x="102.99986"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
-         xml:space="preserve"><tspan
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332"
-           y="36.062492"
-           x="102.99986"
-           id="tspan119-7"
-           sodipodi:role="line">3</tspan></text>
-      <text
-         id="text121-4"
-         y="36.062492"
-         x="121.52069"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
-         xml:space="preserve"><tspan
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332"
-           y="36.062492"
-           x="121.52069"
-           id="tspan119-0"
-           sodipodi:role="line">4</tspan></text>
-      <text
-         id="text121-7"
-         y="36.062492"
-         x="140.04152"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
-         xml:space="preserve"><tspan
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332"
-           y="36.062492"
-           x="140.04152"
-           id="tspan119-8"
-           sodipodi:role="line">5</tspan></text>
-      <text
-         id="text121-79"
-         y="36.062492"
-         x="158.56236"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
-         xml:space="preserve"><tspan
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332"
-           y="36.062492"
-           x="158.56236"
-           id="tspan119-16"
-           sodipodi:role="line">6</tspan></text>
-      <text
-         id="text121-31"
-         y="36.062492"
-         x="177.08319"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
-         xml:space="preserve"><tspan
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332"
-           y="36.062492"
-           x="177.08319"
-           id="tspan119-09"
-           sodipodi:role="line">7</tspan></text>
-      <text
-         id="text121-3-7"
-         y="-5.1587644"
-         x="34.4366"
-         style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
-         xml:space="preserve"><tspan
-           style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458332"
-           y="-5.1587644"
-           x="34.4366"
-           id="tspan119-1-8"
-           sodipodi:role="line">j</tspan></text>
-      <text
-         id="text121-3-7-3"
-         y="37.611752"
-         x="113.4819"
-         style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
-         xml:space="preserve"><tspan
-           style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458332"
-           y="37.611752"
-           x="113.4819"
-           id="tspan119-1-8-7"
-           sodipodi:role="line">i</tspan></text>
-      <g
-         style="stroke-width:0.15119047;stroke-miterlimit:4;stroke-dasharray:none"
-         transform="matrix(1.7500001,0,0,1.7500001,-25.323064,-72.260449)"
-         id="g1463">
-        <circle
-           style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15119047;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-           id="path4517"
-           cx="42.333332"
-           cy="21.833345"
-           r="0.52778977" />
-        <circle
-           style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15119047;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-           id="path4517-7"
-           cx="52.916668"
-           cy="21.833345"
-           r="0.52778977" />
-        <circle
-           style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15119047;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-           id="path4517-78"
-           cx="63.5"
-           cy="21.833345"
-           r="0.52778977" />
-        <circle
-           style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15119047;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-           id="path4517-7-9"
-           cx="74.083336"
-           cy="21.833345"
-           r="0.52778977" />
-        <circle
-           style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15119047;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-           id="path4517-0"
-           cx="84.666664"
-           cy="21.833345"
-           r="0.52778977" />
-        <circle
-           style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15119047;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-           id="path4517-7-0"
-           cx="95.25"
-           cy="21.833345"
-           r="0.52778977" />
-        <circle
-           style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15119047;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-           id="path4517-1"
-           cx="105.83334"
-           cy="21.833345"
-           r="0.52778977" />
-        <circle
-           style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15119047;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-           id="path4517-7-7"
-           cx="116.41666"
-           cy="21.833345"
-           r="0.52778977" />
-        <path
-           style="fill:none;stroke:#808080;stroke-width:0.15119047;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-           d="m 37.041666,16.541679 h 84.666664 l 1e-5,42.333333 H 37.041671 l -5e-6,-42.333333 m 10.583334,0 4e-6,42.333333 m 10.583332,0 -4e-6,-42.333333 m 10.583332,0 8e-6,42.333333 m 10.583336,0 -8e-6,-42.333333 m 10.583336,0 v 42.333333 m 10.583334,0 -1e-5,-42.333333 m 10.58333,0 1e-5,42.333333 M 121.70834,48.291681 H 37.041671 m -4e-6,-10.583336 h 84.666663 m 0,-10.583332 H 37.041667"
-           id="path1171"
-           inkscape:connector-curvature="0"
-           sodipodi:nodetypes="ccccccccccccccccccccccccc" />
-        <circle
-           style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15119047;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-           id="path4517-6"
-           cx="42.333332"
-           cy="32.416679"
-           r="0.52778977" />
-        <circle
-           style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15119047;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-           id="path4517-7-3"
-           cx="52.916668"
-           cy="32.416679"
-           r="0.52778977" />
-        <circle
-           style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15119047;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-           id="path4517-78-9"
-           cx="63.5"
-           cy="32.416679"
-           r="0.52778977" />
-        <circle
-           style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15119047;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-           id="path4517-7-9-1"
-           cx="74.083336"
-           cy="32.416679"
-           r="0.52778977" />
-        <circle
-           style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15119047;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-           id="path4517-0-6"
-           cx="84.666664"
-           cy="32.416679"
-           r="0.52778977" />
-        <circle
-           style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15119047;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-           id="path4517-7-0-8"
-           cx="95.25"
-           cy="32.416679"
-           r="0.52778977" />
-        <circle
-           style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15119047;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-           id="path4517-1-5"
-           cx="105.83334"
-           cy="32.416679"
-           r="0.52778977" />
-        <circle
-           style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15119047;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-           id="path4517-7-7-5"
-           cx="116.41665"
-           cy="32.416679"
-           r="0.52778977" />
-        <circle
-           style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15119047;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-           id="path4517-4"
-           cx="42.333332"
-           cy="43.000011"
-           r="0.52778977" />
-        <circle
-           style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15119047;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-           id="path4517-7-2"
-           cx="52.916668"
-           cy="43.000011"
-           r="0.52778977" />
-        <circle
-           style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15119047;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-           id="path4517-78-3"
-           cx="63.5"
-           cy="43.000011"
-           r="0.52778977" />
-        <circle
-           style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15119047;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-           id="path4517-7-9-0"
-           cx="74.083336"
-           cy="43.000011"
-           r="0.52778977" />
-        <circle
-           style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15119047;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-           id="path4517-0-9"
-           cx="84.666664"
-           cy="43.000011"
-           r="0.52778977" />
-        <circle
-           style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15119047;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-           id="path4517-7-0-1"
-           cx="95.25"
-           cy="43.000011"
-           r="0.52778977" />
-        <circle
-           style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15119047;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-           id="path4517-1-9"
-           cx="105.83334"
-           cy="43.000011"
-           r="0.52778977" />
-        <circle
-           style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15119047;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-           id="path4517-7-7-7"
-           cx="116.41665"
-           cy="43.000011"
-           r="0.52778977" />
-        <circle
-           style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15119047;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-           id="path4517-14"
-           cx="42.333332"
-           cy="53.583344"
-           r="0.52778977" />
-        <circle
-           style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15119047;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-           id="path4517-7-4"
-           cx="52.916668"
-           cy="53.583344"
-           r="0.52778977" />
-        <circle
-           style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15119047;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-           id="path4517-78-7"
-           cx="63.5"
-           cy="53.583344"
-           r="0.52778977" />
-        <circle
-           style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15119047;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-           id="path4517-7-9-8"
-           cx="74.083336"
-           cy="53.583344"
-           r="0.52778977" />
-        <circle
-           style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15119047;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-           id="path4517-0-7"
-           cx="84.666664"
-           cy="53.583344"
-           r="0.52778977" />
-        <circle
-           style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15119047;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-           id="path4517-7-0-9"
-           cx="95.25"
-           cy="53.583344"
-           r="0.52778977" />
-        <circle
-           style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15119047;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-           id="path4517-1-4"
-           cx="105.83334"
-           cy="53.583344"
-           r="0.52778977" />
-        <circle
-           style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15119047;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-           id="path4517-7-7-52"
-           cx="116.41665"
-           cy="53.583344"
-           r="0.52778977" />
-      </g>
-      <g
-         transform="translate(-23.812502,2.2e-6)"
-         id="g1370">
-        <text
-           xml:space="preserve"
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
-           x="54.556301"
-           y="45.537884"
-           id="text121-09-74"><tspan
-             sodipodi:role="line"
-             id="tspan119-67-18"
-             x="54.556301"
-             y="45.537884"
-             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332">0.0</tspan></text>
-        <text
-           xml:space="preserve"
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
-           x="213.32181"
-           y="45.538918"
-           id="text121-09-74-5"><tspan
-             sodipodi:role="line"
-             id="tspan119-67-18-0"
-             x="213.32181"
-             y="45.538918"
-             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332">8.0</tspan></text>
-        <path
-           style="fill:none;stroke:#000000;stroke-width:0.26458335px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow1Lend)"
-           d="m 63.312355,43.999992 h 71.437505 m 5.29167,2e-6 h 71.4375"
-           id="path972"
-           inkscape:connector-curvature="0" />
-        <text
-           xml:space="preserve"
-           style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
-           x="137.32748"
-           y="45.122406"
-           id="text121-3-7-3-3"><tspan
-             sodipodi:role="line"
-             id="tspan119-1-8-7-2"
-             x="137.32748"
-             y="45.122406"
-             style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458332">u</tspan></text>
-      </g>
-      <g
-         transform="translate(-23.812505,7.9375005)"
-         id="g1471">
-        <text
-           xml:space="preserve"
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
-           x="54.556301"
-           y="45.537884"
-           id="text121-09-74-7"><tspan
-             sodipodi:role="line"
-             id="tspan119-67-18-1"
-             x="54.556301"
-             y="45.537884"
-             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332">0.0</tspan></text>
-        <text
-           xml:space="preserve"
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
-           x="213.32181"
-           y="45.538918"
-           id="text121-09-74-5-4"><tspan
-             sodipodi:role="line"
-             id="tspan119-67-18-0-9"
-             x="213.32181"
-             y="45.538918"
-             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332">1.0</tspan></text>
-        <path
-           style="fill:none;stroke:#000000;stroke-width:0.26458335px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow1Lend-0)"
-           d="m 63.312355,43.999992 h 71.437505 m 5.29167,2e-6 h 71.4375"
-           id="path972-8"
-           inkscape:connector-curvature="0" />
-        <text
-           xml:space="preserve"
-           style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
-           x="137.32748"
-           y="45.122406"
-           id="text121-3-7-3-3-5"><tspan
-             sodipodi:role="line"
-             id="tspan119-1-8-7-2-2"
-             x="137.32748"
-             y="45.122406"
-             style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458332">s</tspan></text>
-      </g>
-      <g
-         transform="translate(-23.812501,2.6458339)"
-         id="g1597">
-        <text
-           xml:space="preserve"
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
-           x="44.034977"
-           y="-47.066288"
-           id="text121-09"><tspan
-             sodipodi:role="line"
-             id="tspan119-67"
-             x="44.034977"
-             y="-47.066288"
-             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332">4.0</tspan></text>
-        <text
-           xml:space="preserve"
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
-           x="43.972965"
-           y="32.308716"
-           id="text121-09-7"><tspan
-             sodipodi:role="line"
-             id="tspan119-67-1"
-             x="43.972965"
-             y="32.308716"
-             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332">0.0</tspan></text>
-        <path
-           inkscape:connector-curvature="0"
-           id="path1473"
-           d="M 47.437354,28.124992 V -6.2708429 m 10e-7,-5.2916661 v -34.395835"
-           style="fill:none;stroke:#000000;stroke-width:0.26458335px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker1483)" />
-        <text
-           xml:space="preserve"
-           style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
-           x="46.93816"
-           y="-7.8045983"
-           id="text121-3-7-8"><tspan
-             sodipodi:role="line"
-             id="tspan119-1-8-3"
-             x="46.93816"
-             y="-7.8045983"
-             style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458332">v</tspan></text>
-      </g>
-      <g
-         id="g1613-5"
-         transform="translate(-34.395835,2.6458339)">
-        <g
-           id="g1802">
-          <text
-             xml:space="preserve"
-             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
-             x="44.034977"
-             y="-47.066288"
-             id="text1601-4"><tspan
-               sodipodi:role="line"
-               id="tspan1599-1"
-               x="44.034977"
-               y="-47.066288"
-               style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332">1.0</tspan></text>
-          <text
-             xml:space="preserve"
-             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
-             x="43.972965"
-             y="32.308716"
-             id="text1605-6"><tspan
-               sodipodi:role="line"
-               id="tspan1603-7"
-               x="43.972965"
-               y="32.308716"
-               style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332">0.0</tspan></text>
-          <path
-             inkscape:connector-curvature="0"
-             id="path1607-6"
-             d="M 47.437354,28.124992 V -6.2708429 m 10e-7,-5.2916661 v -34.395835"
-             style="fill:none;stroke:#000000;stroke-width:0.26458335px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker1483-7)" />
-          <text
-             xml:space="preserve"
-             style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
-             x="46.93816"
-             y="-7.8045983"
-             id="text1611-4"><tspan
-               sodipodi:role="line"
-               id="tspan1609-3"
-               x="46.93816"
-               y="-7.8045983"
-               style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458332">t</tspan></text>
-        </g>
-      </g>
-    </g>
-  </g>
-</svg>
diff --git a/registry/vulkan/images/bresenham.svg b/registry/vulkan/images/bresenham.svg
deleted file mode 100644
index ca05bcb..0000000
--- a/registry/vulkan/images/bresenham.svg
+++ /dev/null
@@ -1,488 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Created with Inkscape (http://www.inkscape.org/) -->
-
-<svg
-   xmlns:dc="http://purl.org/dc/elements/1.1/"
-   xmlns:cc="http://creativecommons.org/ns#"
-   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
-   xmlns:svg="http://www.w3.org/2000/svg"
-   xmlns="http://www.w3.org/2000/svg"
-   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
-   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
-   width="391.00003"
-   height="321.00003"
-   viewBox="0 0 103.4521 84.931256"
-   version="1.1"
-   id="svg8"
-   inkscape:version="0.92.4 (5da689c313, 2019-01-14)"
-   sodipodi:docname="bresenham.svg">
-  <defs
-     id="defs2">
-    <marker
-       inkscape:stockid="Arrow2Mend"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="Arrow2Mend"
-       style="overflow:visible"
-       inkscape:isstock="true">
-      <path
-         id="path2950"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
-         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
-         transform="scale(-0.6)"
-         inkscape:connector-curvature="0" />
-    </marker>
-    <marker
-       inkscape:isstock="true"
-       style="overflow:visible"
-       id="marker1483"
-       refX="0"
-       refY="0"
-       orient="auto"
-       inkscape:stockid="Arrow1Lend">
-      <path
-         transform="matrix(-0.8,0,0,-0.8,-10,0)"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         id="path1481"
-         inkscape:connector-curvature="0" />
-    </marker>
-    <marker
-       inkscape:stockid="Arrow1Lend"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="Arrow1Lend-0"
-       style="overflow:visible"
-       inkscape:isstock="true">
-      <path
-         inkscape:connector-curvature="0"
-         id="path977-6"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         transform="matrix(-0.8,0,0,-0.8,-10,0)" />
-    </marker>
-    <marker
-       inkscape:isstock="true"
-       style="overflow:visible"
-       id="marker1483-7"
-       refX="0"
-       refY="0"
-       orient="auto"
-       inkscape:stockid="Arrow1Lend">
-      <path
-         inkscape:connector-curvature="0"
-         transform="matrix(-0.8,0,0,-0.8,-10,0)"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         id="path1481-0" />
-    </marker>
-    <marker
-       inkscape:stockid="Arrow1Mstart"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="Arrow1Mstart"
-       style="overflow:visible"
-       inkscape:isstock="true">
-      <path
-         id="path2320"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         transform="matrix(0.4,0,0,0.4,4,0)"
-         inkscape:connector-curvature="0" />
-    </marker>
-    <marker
-       inkscape:isstock="true"
-       style="overflow:visible"
-       id="marker2639"
-       refX="0"
-       refY="0"
-       orient="auto"
-       inkscape:stockid="Arrow1Mend">
-      <path
-         transform="matrix(-0.4,0,0,-0.4,-4,0)"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         id="path2637"
-         inkscape:connector-curvature="0" />
-    </marker>
-  </defs>
-  <sodipodi:namedview
-     id="base"
-     pagecolor="#ffffff"
-     bordercolor="#666666"
-     borderopacity="1.0"
-     inkscape:pageopacity="0.0"
-     inkscape:pageshadow="2"
-     inkscape:zoom="1.48"
-     inkscape:cx="208.25234"
-     inkscape:cy="168.34984"
-     inkscape:document-units="px"
-     inkscape:current-layer="layer1"
-     showgrid="true"
-     inkscape:snap-object-midpoints="true"
-     inkscape:snap-text-baseline="true"
-     inkscape:window-width="1920"
-     inkscape:window-height="935"
-     inkscape:window-x="-8"
-     inkscape:window-y="-8"
-     inkscape:window-maximized="0"
-     fit-margin-top="20"
-     fit-margin-right="20"
-     fit-margin-bottom="20"
-     fit-margin-left="20"
-     units="px"
-     inkscape:snap-center="true">
-    <inkscape:grid
-       type="xygrid"
-       id="grid12"
-       originx="-23.680211"
-       originy="-47.4927"
-       dotted="false" />
-  </sodipodi:namedview>
-  <metadata
-     id="metadata5">
-    <rdf:RDF>
-      <cc:Work
-         rdf:about="">
-        <dc:format>image/svg+xml</dc:format>
-        <dc:type
-           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
-        <dc:title></dc:title>
-      </cc:Work>
-    </rdf:RDF>
-  </metadata>
-  <g
-     inkscape:label="Layer 1"
-     inkscape:groupmode="layer"
-     id="layer1"
-     transform="translate(-31.430062,48.736474)">
-    <path
-       style="fill:none;stroke:#000000;stroke-width:0.3321186;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.99635576, 0.99635576;stroke-dashoffset:0;stroke-opacity:1"
-       d="M 101.67694,-43.312516 36.85402,21.510402"
-       id="path2597"
-       inkscape:connector-curvature="0"
-       sodipodi:nodetypes="cc" />
-    <g
-       id="g1463"
-       transform="matrix(1.7500001,0,0,1.7500001,-27.968899,-72.260452)"
-       style="stroke-width:0.15119047;stroke-miterlimit:4;stroke-dasharray:none">
-      <circle
-         r="0.52778977"
-         cy="21.833345"
-         cx="42.333332"
-         id="path4517"
-         style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15119047;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
-      <circle
-         r="0.52778977"
-         cy="21.833345"
-         cx="52.916668"
-         id="path4517-7"
-         style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15119047;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
-      <circle
-         r="0.52778977"
-         cy="21.833345"
-         cx="63.5"
-         id="path4517-78"
-         style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15119047;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
-      <circle
-         r="0.52778977"
-         cy="21.833345"
-         cx="74.083336"
-         id="path4517-7-9"
-         style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15119047;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
-      <circle
-         r="0.52778977"
-         cy="21.833345"
-         cx="84.666664"
-         id="path4517-0"
-         style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15119047;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
-      <path
-         sodipodi:nodetypes="ccccccccccccccccccccc"
-         inkscape:connector-curvature="0"
-         id="path1171"
-         d="m 37.041666,16.541677 h 52.916665 v 42.333331 l -52.91666,4e-6 -5e-6,-42.333333 m 10.583334,0 4e-6,42.333333 m 10.583332,0 -4e-6,-42.333333 m 10.583332,0 8e-6,42.333333 m 10.583336,0 -8e-6,-42.333333 m 10.583336,0 v 42.333333 m -5e-6,-10.583337 H 37.041666 m 10e-7,-10.58333 52.916664,-2e-6 m 0,-10.583333 -52.916664,3e-6"
-         style="fill:none;stroke:#808080;stroke-width:0.15119047;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
-      <circle
-         r="0.52778977"
-         cy="32.416679"
-         cx="42.333332"
-         id="path4517-6"
-         style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15119047;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
-      <circle
-         r="0.52778977"
-         cy="32.416679"
-         cx="52.916668"
-         id="path4517-7-3"
-         style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15119047;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
-      <circle
-         r="0.52778977"
-         cy="32.416679"
-         cx="63.5"
-         id="path4517-78-9"
-         style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15119047;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
-      <circle
-         r="0.52778977"
-         cy="32.416679"
-         cx="74.083336"
-         id="path4517-7-9-1"
-         style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15119047;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
-      <circle
-         r="0.52778977"
-         cy="32.416679"
-         cx="84.666664"
-         id="path4517-0-6"
-         style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15119047;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
-      <circle
-         r="0.52778977"
-         cy="43.000011"
-         cx="42.333332"
-         id="path4517-4"
-         style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15119047;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
-      <circle
-         r="0.52778977"
-         cy="43.000011"
-         cx="52.916668"
-         id="path4517-7-2"
-         style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15119047;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
-      <circle
-         r="0.52778977"
-         cy="43.000011"
-         cx="63.5"
-         id="path4517-78-3"
-         style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15119047;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
-      <circle
-         r="0.52778977"
-         cy="43.000011"
-         cx="74.083336"
-         id="path4517-7-9-0"
-         style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15119047;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
-      <circle
-         r="0.52778977"
-         cy="43.000011"
-         cx="84.666664"
-         id="path4517-0-9"
-         style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15119047;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
-      <circle
-         r="0.52778977"
-         cy="53.583344"
-         cx="42.333332"
-         id="path4517-14"
-         style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15119047;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
-      <circle
-         r="0.52778977"
-         cy="53.583344"
-         cx="52.916668"
-         id="path4517-7-4"
-         style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15119047;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
-      <circle
-         r="0.52778977"
-         cy="53.583344"
-         cx="63.5"
-         id="path4517-78-7"
-         style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15119047;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
-      <circle
-         r="0.52778977"
-         cy="53.583344"
-         cx="74.083336"
-         id="path4517-7-9-8"
-         style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15119047;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
-      <circle
-         r="0.52778977"
-         cy="53.583344"
-         cx="84.666664"
-         id="path4517-0-7"
-         style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15119047;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
-    </g>
-    <path
-       style="fill:none;stroke:#000000;stroke-width:0.3321186;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.99635576, 0.99635576;stroke-dashoffset:0;stroke-opacity:1"
-       d="M 120.19778,-43.312516 46.114437,30.770819"
-       id="path2597-8"
-       inkscape:connector-curvature="0"
-       sodipodi:nodetypes="cc" />
-    <path
-       style="fill:none;stroke:#000000;stroke-width:0.3321186;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.99635576, 0.99635576;stroke-dashoffset:0;stroke-opacity:1"
-       d="M 83.156105,-43.312516 36.85402,2.9895682"
-       id="path2597-1"
-       inkscape:connector-curvature="0"
-       sodipodi:nodetypes="cc" />
-    <path
-       style="fill:none;stroke:#000000;stroke-width:0.3321186;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.99635576, 0.99635576;stroke-dashoffset:0;stroke-opacity:1"
-       d="M 64.635271,-43.312516 36.85402,-15.531266"
-       id="path2597-1-9"
-       inkscape:connector-curvature="0"
-       sodipodi:nodetypes="cc" />
-    <path
-       style="fill:none;stroke:#000000;stroke-width:0.3321186;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.99635576, 0.99635576;stroke-dashoffset:0;stroke-opacity:1"
-       d="m 46.114437,-43.312516 -9.260417,9.260417"
-       id="path2597-1-9-6"
-       inkscape:connector-curvature="0"
-       sodipodi:nodetypes="cc" />
-    <path
-       style="fill:none;stroke:#000000;stroke-width:0.3321186;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.99635576, 0.99635576;stroke-dashoffset:0;stroke-opacity:1"
-       d="M 129.45819,-34.052099 64.635271,30.770819"
-       id="path2597-1-6"
-       inkscape:connector-curvature="0"
-       sodipodi:nodetypes="cc" />
-    <path
-       style="fill:none;stroke:#000000;stroke-width:0.3321186;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.99635576, 0.99635576;stroke-dashoffset:0;stroke-opacity:1"
-       d="M 129.45819,-15.531266 83.156105,30.770819"
-       id="path2597-1-8"
-       inkscape:connector-curvature="0"
-       sodipodi:nodetypes="cc" />
-    <path
-       style="fill:none;stroke:#000000;stroke-width:0.3321186;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.99635576, 0.99635576;stroke-dashoffset:0;stroke-opacity:1"
-       d="M 129.45819,2.9895688 101.67694,30.770819"
-       id="path2597-1-9-68"
-       inkscape:connector-curvature="0"
-       sodipodi:nodetypes="cc" />
-    <path
-       style="fill:none;stroke:#000000;stroke-width:0.3321186;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.99635576, 0.99635576;stroke-dashoffset:0;stroke-opacity:1"
-       d="m 129.45819,21.510402 -9.26042,9.260417"
-       id="path2597-1-9-68-7"
-       inkscape:connector-curvature="0"
-       sodipodi:nodetypes="cc" />
-    <path
-       style="fill:none;stroke:#000000;stroke-width:0.3321186;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.99635576, 0.99635576;stroke-dashoffset:0;stroke-opacity:1"
-       d="M 64.635271,-43.312516 36.85402,-15.531265"
-       id="path2597-1-9-4"
-       inkscape:connector-curvature="0"
-       sodipodi:nodetypes="cc" />
-    <path
-       style="fill:none;stroke:#000000;stroke-width:0.3321186;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.99635576, 0.99635576;stroke-dashoffset:0;stroke-opacity:1"
-       d="m 36.85402,-34.052099 64.82292,64.822918"
-       id="path2597-1-9-2"
-       inkscape:connector-curvature="0"
-       sodipodi:nodetypes="cc" />
-    <path
-       style="fill:none;stroke:#000000;stroke-width:0.3321186;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.99635576, 0.99635576;stroke-dashoffset:0;stroke-opacity:1"
-       d="M 36.85402,-15.531266 83.156105,30.770819"
-       id="path2597-1-9-2-0"
-       inkscape:connector-curvature="0"
-       sodipodi:nodetypes="cc" />
-    <path
-       style="fill:none;stroke:#000000;stroke-width:0.3321186;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.99635576, 0.99635576;stroke-dashoffset:0;stroke-opacity:1"
-       d="M 36.85402,2.9895681 64.635271,30.770819"
-       id="path2597-1-9-2-0-7"
-       inkscape:connector-curvature="0"
-       sodipodi:nodetypes="cc" />
-    <path
-       style="fill:none;stroke:#000000;stroke-width:0.3321186;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.99635576, 0.99635576;stroke-dashoffset:0;stroke-opacity:1"
-       d="m 36.85402,21.510402 9.260417,9.260417"
-       id="path2597-1-9-2-0-7-9"
-       inkscape:connector-curvature="0"
-       sodipodi:nodetypes="cc" />
-    <path
-       style="fill:none;stroke:#000000;stroke-width:0.3321186;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.99635576, 0.99635576;stroke-dashoffset:0;stroke-opacity:1"
-       d="m 36.85402,-34.052099 64.82292,64.822918"
-       id="path2597-1-9-2-9"
-       inkscape:connector-curvature="0"
-       sodipodi:nodetypes="cc" />
-    <path
-       style="fill:none;stroke:#000000;stroke-width:0.3321186;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.99635576, 0.99635576;stroke-dashoffset:0;stroke-opacity:1"
-       d="M 46.114437,-43.312516 120.19777,30.770819"
-       id="path2597-1-9-2-8"
-       inkscape:connector-curvature="0"
-       sodipodi:nodetypes="cc" />
-    <path
-       style="fill:none;stroke:#000000;stroke-width:0.3321186;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.99635576, 0.99635576;stroke-dashoffset:0;stroke-opacity:1"
-       d="M 64.635271,-43.312516 129.45819,21.510402"
-       id="path2597-1-9-2-8-2"
-       inkscape:connector-curvature="0"
-       sodipodi:nodetypes="cc" />
-    <path
-       style="fill:none;stroke:#000000;stroke-width:0.3321186;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.99635576, 0.99635576;stroke-dashoffset:0;stroke-opacity:1"
-       d="M 83.156105,-43.312516 129.45819,2.9895681"
-       id="path2597-1-9-2-8-2-4"
-       inkscape:connector-curvature="0"
-       sodipodi:nodetypes="cc" />
-    <path
-       style="fill:none;stroke:#000000;stroke-width:0.3321186;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.99635576, 0.99635576;stroke-dashoffset:0;stroke-opacity:1"
-       d="m 101.67694,-43.312516 27.78125,27.78125"
-       id="path2597-1-9-2-8-2-4-0"
-       inkscape:connector-curvature="0"
-       sodipodi:nodetypes="cc" />
-    <path
-       style="fill:none;stroke:#000000;stroke-width:0.3321186;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.99635576, 0.99635576;stroke-dashoffset:0;stroke-opacity:1"
-       d="m 120.19777,-43.312516 9.26042,9.260417"
-       id="path2597-1-9-2-8-2-4-0-3"
-       inkscape:connector-curvature="0"
-       sodipodi:nodetypes="cc" />
-    <path
-       style="fill:none;stroke:#000000;stroke-width:0.52999997;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow2Mend)"
-       d="M 42.145687,20.187485 118.87486,-39.343766"
-       id="path819"
-       inkscape:connector-curvature="0"
-       sodipodi:nodetypes="cc" />
-    <g
-       id="g3490"
-       transform="translate(11.90625,10.583333)"
-       style="fill:#ff0000;fill-opacity:1;stroke:#ff0000;stroke-opacity:1">
-      <path
-         sodipodi:nodetypes="cc"
-         inkscape:connector-curvature="0"
-         id="path2597-1-9-2-0-7-9-3"
-         d="m 32.88527,9.6041515 2.645834,2.6458335"
-         style="fill:#ff0000;fill-opacity:1;stroke:#ff0000;stroke-width:0.33205208;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
-      <path
-         sodipodi:nodetypes="cc"
-         inkscape:connector-curvature="0"
-         id="path2597-1-9-2-0-7-9-3-2"
-         d="M 35.531104,9.6041515 32.88527,12.249985"
-         style="fill:#ff0000;fill-opacity:1;stroke:#ff0000;stroke-width:0.33205208;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
-    </g>
-    <g
-       id="g3490-6"
-       transform="translate(30.427084,-7.9375001)"
-       style="fill:#ff0000;fill-opacity:1;stroke:#ff0000;stroke-opacity:1">
-      <path
-         sodipodi:nodetypes="cc"
-         inkscape:connector-curvature="0"
-         id="path2597-1-9-2-0-7-9-3-1"
-         d="m 32.88527,9.6041515 2.645834,2.6458335"
-         style="fill:#ff0000;fill-opacity:1;stroke:#ff0000;stroke-width:0.33205208;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
-      <path
-         sodipodi:nodetypes="cc"
-         inkscape:connector-curvature="0"
-         id="path2597-1-9-2-0-7-9-3-2-0"
-         d="M 35.531104,9.6041515 32.88527,12.249985"
-         style="fill:#ff0000;fill-opacity:1;stroke:#ff0000;stroke-width:0.33205208;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
-    </g>
-    <g
-       id="g3490-6-5"
-       transform="translate(48.947918,-26.458334)"
-       style="fill:#ff0000;fill-opacity:1;stroke:#ff0000;stroke-opacity:1">
-      <path
-         sodipodi:nodetypes="cc"
-         inkscape:connector-curvature="0"
-         id="path2597-1-9-2-0-7-9-3-1-3"
-         d="m 32.88527,9.6041515 2.645834,2.6458335"
-         style="fill:#ff0000;fill-opacity:1;stroke:#ff0000;stroke-width:0.33205208;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
-      <path
-         sodipodi:nodetypes="cc"
-         inkscape:connector-curvature="0"
-         id="path2597-1-9-2-0-7-9-3-2-0-8"
-         d="M 35.531104,9.6041515 32.88527,12.249985"
-         style="fill:#ff0000;fill-opacity:1;stroke:#ff0000;stroke-width:0.33205208;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
-    </g>
-    <g
-       id="g3490-6-5-0"
-       transform="translate(67.468751,-44.979168)"
-       style="fill:#ff0000;fill-opacity:1;stroke:#ff0000;stroke-opacity:1">
-      <path
-         sodipodi:nodetypes="cc"
-         inkscape:connector-curvature="0"
-         id="path2597-1-9-2-0-7-9-3-1-3-9"
-         d="m 32.88527,9.6041515 2.645834,2.6458335"
-         style="fill:#ff0000;fill-opacity:1;stroke:#ff0000;stroke-width:0.33205208;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
-      <path
-         sodipodi:nodetypes="cc"
-         inkscape:connector-curvature="0"
-         id="path2597-1-9-2-0-7-9-3-2-0-8-0"
-         d="M 35.531104,9.6041515 32.88527,12.249985"
-         style="fill:#ff0000;fill-opacity:1;stroke:#ff0000;stroke-width:0.33205208;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
-    </g>
-  </g>
-</svg>
diff --git a/registry/vulkan/images/chromasamples_420_xcosited_ycosited.svg b/registry/vulkan/images/chromasamples_420_xcosited_ycosited.svg
deleted file mode 100644
index 586ca58..0000000
--- a/registry/vulkan/images/chromasamples_420_xcosited_ycosited.svg
+++ /dev/null
@@ -1,388 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<svg
-   xmlns:dc="http://purl.org/dc/elements/1.1/"
-   xmlns:cc="http://creativecommons.org/ns#"
-   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
-   xmlns:svg="http://www.w3.org/2000/svg"
-   xmlns="http://www.w3.org/2000/svg"
-   version="1.1"
-   viewBox="0 0 186.82375 101.62997"
-   height="384.11328"
-   width="706.10547">
-  <defs>
-    <marker
-       id="Arrow1Lend"
-       orient="auto"
-       refY="0"
-       refX="0"       
-       style="overflow:visible">
-      <path         
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt;stroke-opacity:1"
-         transform="matrix(-0.8,0,0,-0.8,-10,0)" />
-    </marker>
-    <marker
-       id="marker1483"
-       style="overflow:visible"
-       refX="0"
-       refY="0"
-       orient="auto">
-      <path
-         transform="matrix(-0.8,0,0,-0.8,-10,0)"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt;stroke-opacity:1"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z" />
-    </marker>
-    <marker
-       style="overflow:visible"
-       id="marker1483-7"
-       refX="0"
-       refY="0"
-       orient="auto">
-      <path
-         transform="matrix(-0.8,0,0,-0.8,-10,0)"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt;stroke-opacity:1"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z" />
-    </marker>
-    <marker
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="Arrow1Lend-0"       
-       style="overflow:visible">
-      <path
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt;stroke-opacity:1"
-         transform="matrix(-0.8,0,0,-0.8,-10,0)" />
-    </marker>
-  </defs>
-  <g transform="translate(-6.9498988,47.8249)">
-    <g transform="translate(-2.6458349,-3.056108e-6)">
-      <text
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
-         x="34.208187"
-         y="-32.729179"><tspan
-           x="34.208187"
-           y="-32.729179"
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332">3</tspan></text>
-      <text
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
-         x="34.208187"
-         y="-14.208342"><tspan
-           x="34.208187"
-           y="-14.208342"
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332">2</tspan></text>
-      <text
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
-         x="34.208187"
-         y="4.3124924"><tspan
-           x="34.208187"
-           y="4.3124924"
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332">1</tspan></text>
-      <text
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
-         x="34.208187"
-         y="22.833326"><tspan
-           x="34.208187"
-           y="22.833326"
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332">0</tspan></text>
-      <text
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
-         x="47.437355"
-         y="36.062492"><tspan
-           x="47.437355"
-           y="36.062492"
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332">0</tspan></text>
-      <text
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
-         x="65.958191"
-         y="36.062492"><tspan
-           x="65.958191"
-           y="36.062492"
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332">1</tspan></text>
-      <text
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
-         x="84.479027"
-         y="36.062492"><tspan
-           x="84.479027"
-           y="36.062492"
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332">2</tspan></text>
-      <text
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
-         x="102.99986"
-         y="36.062492"><tspan
-           x="102.99986"
-           y="36.062492"
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332">3</tspan></text>
-      <text
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
-         x="121.52069"
-         y="36.062492"><tspan
-           x="121.52069"
-           y="36.062492"
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332">4</tspan></text>
-      <text
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
-         x="140.04152"
-         y="36.062492"><tspan
-           x="140.04152"
-           y="36.062492"
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332">5</tspan></text>
-      <text
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
-         x="158.56236"
-         y="36.062492"><tspan
-           x="158.56236"
-           y="36.062492"
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332">6</tspan></text>
-      <text
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
-         x="177.08319"
-         y="36.062492"><tspan
-           x="177.08319"
-           y="36.062492"
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332">7</tspan></text>
-      <text
-         style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
-         x="34.4366"
-         y="-5.1587644"><tspan
-           x="34.4366"
-           y="-5.1587644"
-           style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458332">j</tspan></text>
-      <text
-         style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
-         x="113.4819"
-         y="37.611752"><tspan
-           x="113.4819"
-           y="37.611752"
-           style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458332">i</tspan></text>
-      <g transform="translate(-25.323064 -72.260449) scale(1.75 1.75) translate(37.041666 16.541679) scale(0.25 0.25) scale(42.333333 42.333333)">
-        <path style="fill:none;stroke:black;stroke-width:0.01;stroke-linecap:square"
-              d="M0,0 H8 M0,1 H8 M0,2 H8 M0,3 H8 M0,4 H8 M0,0 V4 M1,0 V4 M2,0 V4 M3,0 V4 M4,0 V4 M5,0 V4 M6,0 V4 M7,0 V4 M8,0 V4" />
-        <circle style="fill:black;stroke:none" cx="0.5" cy="0.5" r="0.05" />
-        <circle style="fill:black;stroke:none" cx="1.5" cy="0.5" r="0.05" />
-        <circle style="fill:black;stroke:none" cx="2.5" cy="0.5" r="0.05" />
-        <circle style="fill:black;stroke:none" cx="3.5" cy="0.5" r="0.05" />
-        <circle style="fill:black;stroke:none" cx="4.5" cy="0.5" r="0.05" />
-        <circle style="fill:black;stroke:none" cx="5.5" cy="0.5" r="0.05" />
-        <circle style="fill:black;stroke:none" cx="6.5" cy="0.5" r="0.05" />
-        <circle style="fill:black;stroke:none" cx="7.5" cy="0.5" r="0.05" />
-        <circle style="fill:black;stroke:none" cx="0.5" cy="1.5" r="0.05" />
-        <circle style="fill:black;stroke:none" cx="1.5" cy="1.5" r="0.05" />
-        <circle style="fill:black;stroke:none" cx="2.5" cy="1.5" r="0.05" />
-        <circle style="fill:black;stroke:none" cx="3.5" cy="1.5" r="0.05" />
-        <circle style="fill:black;stroke:none" cx="4.5" cy="1.5" r="0.05" />
-        <circle style="fill:black;stroke:none" cx="5.5" cy="1.5" r="0.05" />
-        <circle style="fill:black;stroke:none" cx="6.5" cy="1.5" r="0.05" />
-        <circle style="fill:black;stroke:none" cx="7.5" cy="1.5" r="0.05" />
-        <circle style="fill:black;stroke:none" cx="0.5" cy="2.5" r="0.05" />
-        <circle style="fill:black;stroke:none" cx="1.5" cy="2.5" r="0.05" />
-        <circle style="fill:black;stroke:none" cx="2.5" cy="2.5" r="0.05" />
-        <circle style="fill:black;stroke:none" cx="3.5" cy="2.5" r="0.05" />
-        <circle style="fill:black;stroke:none" cx="4.5" cy="2.5" r="0.05" />
-        <circle style="fill:black;stroke:none" cx="5.5" cy="2.5" r="0.05" />
-        <circle style="fill:black;stroke:none" cx="6.5" cy="2.5" r="0.05" />
-        <circle style="fill:black;stroke:none" cx="7.5" cy="2.5" r="0.05" />
-        <circle style="fill:black;stroke:none" cx="0.5" cy="3.5" r="0.05" />
-        <circle style="fill:black;stroke:none" cx="1.5" cy="3.5" r="0.05" />
-        <circle style="fill:black;stroke:none" cx="2.5" cy="3.5" r="0.05" />
-        <circle style="fill:black;stroke:none" cx="3.5" cy="3.5" r="0.05" />
-        <circle style="fill:black;stroke:none" cx="4.5" cy="3.5" r="0.05" />
-        <circle style="fill:black;stroke:none" cx="5.5" cy="3.5" r="0.05" />
-        <circle style="fill:black;stroke:none" cx="6.5" cy="3.5" r="0.05" />
-        <circle style="fill:black;stroke:none" cx="7.5" cy="3.5" r="0.05" />
-        <path style="fill:none;stroke:red;stroke-width:0.02;stroke-linecap:square;stroke-dasharray:0.1,0.1;stroke-dashoffset:0.05"
-              d="M-0.5,0.5 h8 m-8,2 h8 m-8,2 h8m-8,-4 v4 m2,-4 v4 m2,-4 v4 m2,-4 v4 m2,-4 v4" />
-        <path style="fill:none;stroke:red;stroke-width:0.02;stroke-linecap:square"
-              d="M 0.5,1.5 m-0.08,-0.08 l0.16,0.16 m-0.16,0 l0.16,-0.16 m-0.08,0.08" />
-        <path style="fill:none;stroke:red;stroke-width:0.02;stroke-linecap:square"
-              d="M 2.5,1.5 m-0.08,-0.08 l0.16,0.16 m-0.16,0 l0.16,-0.16 m-0.08,0.08" />
-        <path style="fill:none;stroke:red;stroke-width:0.02;stroke-linecap:square"
-              d="M 4.5,1.5 m-0.08,-0.08 l0.16,0.16 m-0.16,0 l0.16,-0.16 m-0.08,0.08" />
-        <path style="fill:none;stroke:red;stroke-width:0.02;stroke-linecap:square"
-              d="M 6.5,1.5 m-0.08,-0.08 l0.16,0.16 m-0.16,0 l0.16,-0.16 m-0.08,0.08" />
-        <path style="fill:none;stroke:red;stroke-width:0.02;stroke-linecap:square"
-              d="M 0.5,3.5 m-0.08,-0.08 l0.16,0.16 m-0.16,0 l0.16,-0.16 m-0.08,0.08" />
-        <path style="fill:none;stroke:red;stroke-width:0.02;stroke-linecap:square"
-              d="M 2.5,3.5 m-0.08,-0.08 l0.16,0.16 m-0.16,0 l0.16,-0.16 m-0.08,0.08" />
-        <path style="fill:none;stroke:red;stroke-width:0.02;stroke-linecap:square"
-              d="M 4.5,3.5 m-0.08,-0.08 l0.16,0.16 m-0.16,0 l0.16,-0.16 m-0.08,0.08" />
-        <path style="fill:none;stroke:red;stroke-width:0.02;stroke-linecap:square"
-              d="M 6.5,3.5 m-0.08,-0.08 l0.16,0.16 m-0.16,0 l0.16,-0.16 m-0.08,0.08" />
-      </g>
-      <g transform="translate(-23.812502,2.2e-6)">
-        <text
-           y="45.537884"
-           x="54.556301"
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"><tspan
-             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332"
-             y="45.537884"
-             x="54.556301">0.0</tspan></text>
-        <text
-           y="45.538918"
-           x="213.32181"
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"><tspan
-             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332"
-             y="45.538918"
-             x="213.32181">8.0</tspan></text>
-        <path
-           d="m 63.312355,43.999992 h 71.437505 m 5.29167,2e-6 h 71.4375"
-           style="fill:none;stroke:#000000;stroke-width:0.26458335px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow1Lend)" />
-        <text
-           y="45.122406"
-           x="137.32748"
-           style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"><tspan
-             style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458332"
-             y="45.122406"
-             x="137.32748">u</tspan></text>
-      </g>
-      <g transform="translate(-23.812505,7.9375005)">
-        <text
-           y="45.537884"
-           x="54.556301"
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"><tspan
-             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332"
-             y="45.537884"
-             x="54.556301">0.0</tspan></text>
-        <text
-           y="45.538918"
-           x="213.32181"
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"><tspan
-             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332"
-             y="45.538918"
-             x="213.32181">1.0</tspan></text>
-        <path
-           d="m 63.312355,43.999992 h 71.437505 m 5.29167,2e-6 h 71.4375"
-           style="fill:none;stroke:#000000;stroke-width:0.26458335px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow1Lend-0)" />
-        <text
-           y="45.122406"
-           x="137.32748"
-           style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"><tspan
-             style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458332"
-             y="45.122406"
-             x="137.32748">s</tspan></text>
-      </g>
-      <g transform="translate(-23.812501,2.6458339)">
-        <text
-           y="-47.066288"
-           x="44.034977"
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"><tspan
-             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332"
-             y="-47.066288"
-             x="44.034977">4.0</tspan></text>
-        <text
-           y="32.308716"
-           x="43.972965"
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"><tspan
-             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332"
-             y="32.308716"
-             x="43.972965">0.0</tspan></text>
-        <path
-           style="fill:none;stroke:#000000;stroke-width:0.26458335px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker1483)"
-           d="M 47.437354,28.124992 V -6.2708429 m 10e-7,-5.2916661 v -34.395835" />
-        <text
-           y="-7.8045983"
-           x="46.93816"
-           style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"><tspan
-             style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458332"
-             y="-7.8045983"
-             x="46.93816">v</tspan></text>
-      </g>
-      <g transform="translate(-34.395835,2.6458339)">
-        <g>
-          <text
-             y="-47.066288"
-             x="44.034977"
-             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"><tspan
-               style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332"
-               y="-47.066288"
-               x="44.034977">1.0</tspan></text>
-          <text             
-             y="32.308716"
-             x="43.972965"
-             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"><tspan
-               style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332"
-               y="32.308716"
-               x="43.972965">0.0</tspan></text>
-          <path
-             style="fill:none;stroke:#000000;stroke-width:0.26458335px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker1483-7)"
-             d="M 47.437354,28.124992 V -6.2708429 m 10e-7,-5.2916661 v -34.395835" />
-          <text
-             y="-7.8045983"
-             x="46.93816"
-             style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"><tspan
-               style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458332"
-               y="-7.8045983"
-               x="46.93816">t</tspan></text>
-        </g>
-      </g>
-    </g>
-    <g transform="translate(-7.6312708e-7,-3.9209711e-6)">
-      <g transform="translate(1 -1)">
-        <text
-           y="-16.854183"
-           x="46.114437"
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:0.26458332"><tspan
-             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;fill-opacity:1;stroke-width:0.26458332"
-             y="-16.854183"
-             x="46.114437"><tspan
-               style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;stroke-width:0.26458332"> 0,1</tspan></tspan></text>
-        <text
-           y="-16.854183"
-           x="83.156105"
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:0.26458332"><tspan
-             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;fill-opacity:1;stroke-width:0.26458332"
-             y="-16.854183"
-             x="83.156105"><tspan
-               style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;stroke-width:0.26458332"> 1,1</tspan></tspan></text>
-        <text
-           y="-16.854183"
-           x="120.19777"
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:0.26458332"><tspan
-             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;fill-opacity:1;stroke-width:0.26458332"
-             y="-16.854183"
-             x="120.19777"><tspan
-               style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;stroke-width:0.26458332"> 2,1</tspan></tspan></text>
-        <text
-           y="-16.854183"
-           x="157.23944"
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:0.26458332"><tspan
-             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;fill-opacity:1;stroke-width:0.26458332"
-             y="-16.854183"
-             x="157.23944"><tspan
-               style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;stroke-width:0.26458332"> 3,1</tspan></tspan></text>
-        <text
-           y="20.187485"
-           x="46.114437"
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:0.26458332"><tspan
-             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;fill-opacity:1;stroke-width:0.26458332"
-             y="20.187485"
-             x="46.114437"><tspan
-               style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;stroke-width:0.26458332"> 0,0</tspan></tspan></text>
-        <text
-           y="20.187485"
-           x="83.156097"
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:0.26458332"><tspan
-             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;fill-opacity:1;stroke-width:0.26458332"
-             y="20.187485"
-             x="83.156097"><tspan
-               style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;stroke-width:0.26458332"> 1,0</tspan></tspan></text>
-        <text
-           y="20.187485"
-           x="120.19777"
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:0.26458332"><tspan
-             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;fill-opacity:1;stroke-width:0.26458332"
-             y="20.187485"
-             x="120.19777"><tspan
-               style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;stroke-width:0.26458332"> 2,0</tspan></tspan></text>
-        <text
-           y="20.187485"
-           x="157.23943"
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:0.26458332"><tspan
-             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;fill-opacity:1;stroke-width:0.26458332"
-             y="20.187485"
-             x="157.23943"><tspan
-               style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;stroke-width:0.26458332"> 3,0</tspan></tspan></text>
-      </g>
-    </g>
-  </g>
-</svg>
diff --git a/registry/vulkan/images/chromasamples_420_xcosited_ymidpoint.svg b/registry/vulkan/images/chromasamples_420_xcosited_ymidpoint.svg
deleted file mode 100644
index 1c6b316..0000000
--- a/registry/vulkan/images/chromasamples_420_xcosited_ymidpoint.svg
+++ /dev/null
@@ -1,390 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<svg
-   xmlns:dc="http://purl.org/dc/elements/1.1/"
-   xmlns:cc="http://creativecommons.org/ns#"
-   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
-   xmlns:svg="http://www.w3.org/2000/svg"
-   xmlns="http://www.w3.org/2000/svg"
-   version="1.1"
-   viewBox="0 0 186.82375 101.62997"
-   height="384.11328"
-   width="706.10547">
-  <defs>
-    <marker
-       id="Arrow1Lend"
-       orient="auto"
-       refY="0"
-       refX="0"       
-       style="overflow:visible">
-      <path         
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt;stroke-opacity:1"
-         transform="matrix(-0.8,0,0,-0.8,-10,0)" />
-    </marker>
-    <marker
-       id="marker1483"
-       style="overflow:visible"
-       refX="0"
-       refY="0"
-       orient="auto">
-      <path
-         transform="matrix(-0.8,0,0,-0.8,-10,0)"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt;stroke-opacity:1"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z" />
-    </marker>
-    <marker
-       style="overflow:visible"
-       id="marker1483-7"
-       refX="0"
-       refY="0"
-       orient="auto">
-      <path
-         transform="matrix(-0.8,0,0,-0.8,-10,0)"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt;stroke-opacity:1"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z" />
-    </marker>
-    <marker
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="Arrow1Lend-0"       
-       style="overflow:visible">
-      <path
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt;stroke-opacity:1"
-         transform="matrix(-0.8,0,0,-0.8,-10,0)" />
-    </marker>
-  </defs>
-  <g transform="translate(-6.9498988,47.8249)">
-    <g transform="translate(-2.6458349,-3.056108e-6)">
-      <text
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
-         x="34.208187"
-         y="-32.729179"><tspan
-           x="34.208187"
-           y="-32.729179"
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332">3</tspan></text>
-      <text
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
-         x="34.208187"
-         y="-14.208342"><tspan
-           x="34.208187"
-           y="-14.208342"
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332">2</tspan></text>
-      <text
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
-         x="34.208187"
-         y="4.3124924"><tspan
-           x="34.208187"
-           y="4.3124924"
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332">1</tspan></text>
-      <text
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
-         x="34.208187"
-         y="22.833326"><tspan
-           x="34.208187"
-           y="22.833326"
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332">0</tspan></text>
-      <text
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
-         x="47.437355"
-         y="36.062492"><tspan
-           x="47.437355"
-           y="36.062492"
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332">0</tspan></text>
-      <text
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
-         x="65.958191"
-         y="36.062492"><tspan
-           x="65.958191"
-           y="36.062492"
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332">1</tspan></text>
-      <text
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
-         x="84.479027"
-         y="36.062492"><tspan
-           x="84.479027"
-           y="36.062492"
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332">2</tspan></text>
-      <text
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
-         x="102.99986"
-         y="36.062492"><tspan
-           x="102.99986"
-           y="36.062492"
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332">3</tspan></text>
-      <text
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
-         x="121.52069"
-         y="36.062492"><tspan
-           x="121.52069"
-           y="36.062492"
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332">4</tspan></text>
-      <text
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
-         x="140.04152"
-         y="36.062492"><tspan
-           x="140.04152"
-           y="36.062492"
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332">5</tspan></text>
-      <text
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
-         x="158.56236"
-         y="36.062492"><tspan
-           x="158.56236"
-           y="36.062492"
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332">6</tspan></text>
-      <text
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
-         x="177.08319"
-         y="36.062492"><tspan
-           x="177.08319"
-           y="36.062492"
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332">7</tspan></text>
-      <text
-         style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
-         x="34.4366"
-         y="-5.1587644"><tspan
-           x="34.4366"
-           y="-5.1587644"
-           style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458332">j</tspan></text>
-      <text
-         style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
-         x="113.4819"
-         y="37.611752"><tspan
-           x="113.4819"
-           y="37.611752"
-           style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458332">i</tspan></text>
-      <g transform="translate(-25.323064 -72.260449) scale(1.75 1.75) translate(37.041666 16.541679) scale(0.25 0.25) scale(42.333333 42.333333)">
-        <path style="fill:none;stroke:black;stroke-width:0.01;stroke-linecap:square"
-              d="M0,0 H8 M0,1 H8 M0,2 H8 M0,3 H8 M0,4 H8 M0,0 V4 M1,0 V4 M2,0 V4 M3,0 V4 M4,0 V4 M5,0 V4 M6,0 V4 M7,0 V4 M8,0 V4" />
-        <circle style="fill:black;stroke:none" cx="0.5" cy="0.5" r="0.05" />
-        <circle style="fill:black;stroke:none" cx="1.5" cy="0.5" r="0.05" />
-        <circle style="fill:black;stroke:none" cx="2.5" cy="0.5" r="0.05" />
-        <circle style="fill:black;stroke:none" cx="3.5" cy="0.5" r="0.05" />
-        <circle style="fill:black;stroke:none" cx="4.5" cy="0.5" r="0.05" />
-        <circle style="fill:black;stroke:none" cx="5.5" cy="0.5" r="0.05" />
-        <circle style="fill:black;stroke:none" cx="6.5" cy="0.5" r="0.05" />
-        <circle style="fill:black;stroke:none" cx="7.5" cy="0.5" r="0.05" />
-        <circle style="fill:black;stroke:none" cx="0.5" cy="1.5" r="0.05" />
-        <circle style="fill:black;stroke:none" cx="1.5" cy="1.5" r="0.05" />
-        <circle style="fill:black;stroke:none" cx="2.5" cy="1.5" r="0.05" />
-        <circle style="fill:black;stroke:none" cx="3.5" cy="1.5" r="0.05" />
-        <circle style="fill:black;stroke:none" cx="4.5" cy="1.5" r="0.05" />
-        <circle style="fill:black;stroke:none" cx="5.5" cy="1.5" r="0.05" />
-        <circle style="fill:black;stroke:none" cx="6.5" cy="1.5" r="0.05" />
-        <circle style="fill:black;stroke:none" cx="7.5" cy="1.5" r="0.05" />
-        <circle style="fill:black;stroke:none" cx="0.5" cy="2.5" r="0.05" />
-        <circle style="fill:black;stroke:none" cx="1.5" cy="2.5" r="0.05" />
-        <circle style="fill:black;stroke:none" cx="2.5" cy="2.5" r="0.05" />
-        <circle style="fill:black;stroke:none" cx="3.5" cy="2.5" r="0.05" />
-        <circle style="fill:black;stroke:none" cx="4.5" cy="2.5" r="0.05" />
-        <circle style="fill:black;stroke:none" cx="5.5" cy="2.5" r="0.05" />
-        <circle style="fill:black;stroke:none" cx="6.5" cy="2.5" r="0.05" />
-        <circle style="fill:black;stroke:none" cx="7.5" cy="2.5" r="0.05" />
-        <circle style="fill:black;stroke:none" cx="0.5" cy="3.5" r="0.05" />
-        <circle style="fill:black;stroke:none" cx="1.5" cy="3.5" r="0.05" />
-        <circle style="fill:black;stroke:none" cx="2.5" cy="3.5" r="0.05" />
-        <circle style="fill:black;stroke:none" cx="3.5" cy="3.5" r="0.05" />
-        <circle style="fill:black;stroke:none" cx="4.5" cy="3.5" r="0.05" />
-        <circle style="fill:black;stroke:none" cx="5.5" cy="3.5" r="0.05" />
-        <circle style="fill:black;stroke:none" cx="6.5" cy="3.5" r="0.05" />
-        <circle style="fill:black;stroke:none" cx="7.5" cy="3.5" r="0.05" />
-        <g transform="translate(0 -0.5)">
-          <path style="fill:none;stroke:red;stroke-width:0.02;stroke-linecap:square;stroke-dasharray:0.1,0.1;stroke-dashoffset:0.05"
-                d="M-0.5,0.5 h8 m-8,2 h8 m-8,2 h8m-8,-4 v4 m2,-4 v4 m2,-4 v4 m2,-4 v4 m2,-4 v4" />
-          <path style="fill:none;stroke:red;stroke-width:0.02;stroke-linecap:square"
-                d="M 0.5,1.5 m-0.08,-0.08 l0.16,0.16 m-0.16,0 l0.16,-0.16 m-0.08,0.08" />
-          <path style="fill:none;stroke:red;stroke-width:0.02;stroke-linecap:square"
-                d="M 2.5,1.5 m-0.08,-0.08 l0.16,0.16 m-0.16,0 l0.16,-0.16 m-0.08,0.08" />
-          <path style="fill:none;stroke:red;stroke-width:0.02;stroke-linecap:square"
-                d="M 4.5,1.5 m-0.08,-0.08 l0.16,0.16 m-0.16,0 l0.16,-0.16 m-0.08,0.08" />
-          <path style="fill:none;stroke:red;stroke-width:0.02;stroke-linecap:square"
-                d="M 6.5,1.5 m-0.08,-0.08 l0.16,0.16 m-0.16,0 l0.16,-0.16 m-0.08,0.08" />
-          <path style="fill:none;stroke:red;stroke-width:0.02;stroke-linecap:square"
-                d="M 0.5,3.5 m-0.08,-0.08 l0.16,0.16 m-0.16,0 l0.16,-0.16 m-0.08,0.08" />
-          <path style="fill:none;stroke:red;stroke-width:0.02;stroke-linecap:square"
-                d="M 2.5,3.5 m-0.08,-0.08 l0.16,0.16 m-0.16,0 l0.16,-0.16 m-0.08,0.08" />
-          <path style="fill:none;stroke:red;stroke-width:0.02;stroke-linecap:square"
-                d="M 4.5,3.5 m-0.08,-0.08 l0.16,0.16 m-0.16,0 l0.16,-0.16 m-0.08,0.08" />
-          <path style="fill:none;stroke:red;stroke-width:0.02;stroke-linecap:square"
-                d="M 6.5,3.5 m-0.08,-0.08 l0.16,0.16 m-0.16,0 l0.16,-0.16 m-0.08,0.08" />
-        </g>
-      </g>
-      <g transform="translate(-23.812502,2.2e-6)">
-        <text
-           y="45.537884"
-           x="54.556301"
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"><tspan
-             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332"
-             y="45.537884"
-             x="54.556301">0.0</tspan></text>
-        <text
-           y="45.538918"
-           x="213.32181"
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"><tspan
-             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332"
-             y="45.538918"
-             x="213.32181">8.0</tspan></text>
-        <path
-           d="m 63.312355,43.999992 h 71.437505 m 5.29167,2e-6 h 71.4375"
-           style="fill:none;stroke:#000000;stroke-width:0.26458335px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow1Lend)" />
-        <text
-           y="45.122406"
-           x="137.32748"
-           style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"><tspan
-             style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458332"
-             y="45.122406"
-             x="137.32748">u</tspan></text>
-      </g>
-      <g transform="translate(-23.812505,7.9375005)">
-        <text
-           y="45.537884"
-           x="54.556301"
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"><tspan
-             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332"
-             y="45.537884"
-             x="54.556301">0.0</tspan></text>
-        <text
-           y="45.538918"
-           x="213.32181"
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"><tspan
-             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332"
-             y="45.538918"
-             x="213.32181">1.0</tspan></text>
-        <path
-           d="m 63.312355,43.999992 h 71.437505 m 5.29167,2e-6 h 71.4375"
-           style="fill:none;stroke:#000000;stroke-width:0.26458335px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow1Lend-0)" />
-        <text
-           y="45.122406"
-           x="137.32748"
-           style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"><tspan
-             style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458332"
-             y="45.122406"
-             x="137.32748">s</tspan></text>
-      </g>
-      <g transform="translate(-23.812501,2.6458339)">
-        <text
-           y="-47.066288"
-           x="44.034977"
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"><tspan
-             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332"
-             y="-47.066288"
-             x="44.034977">4.0</tspan></text>
-        <text
-           y="32.308716"
-           x="43.972965"
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"><tspan
-             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332"
-             y="32.308716"
-             x="43.972965">0.0</tspan></text>
-        <path
-           style="fill:none;stroke:#000000;stroke-width:0.26458335px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker1483)"
-           d="M 47.437354,28.124992 V -6.2708429 m 10e-7,-5.2916661 v -34.395835" />
-        <text
-           y="-7.8045983"
-           x="46.93816"
-           style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"><tspan
-             style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458332"
-             y="-7.8045983"
-             x="46.93816">v</tspan></text>
-      </g>
-      <g transform="translate(-34.395835,2.6458339)">
-        <g>
-          <text
-             y="-47.066288"
-             x="44.034977"
-             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"><tspan
-               style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332"
-               y="-47.066288"
-               x="44.034977">1.0</tspan></text>
-          <text             
-             y="32.308716"
-             x="43.972965"
-             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"><tspan
-               style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332"
-               y="32.308716"
-               x="43.972965">0.0</tspan></text>
-          <path
-             style="fill:none;stroke:#000000;stroke-width:0.26458335px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker1483-7)"
-             d="M 47.437354,28.124992 V -6.2708429 m 10e-7,-5.2916661 v -34.395835" />
-          <text
-             y="-7.8045983"
-             x="46.93816"
-             style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"><tspan
-               style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458332"
-               y="-7.8045983"
-               x="46.93816">t</tspan></text>
-        </g>
-      </g>
-    </g>
-    <g transform="translate(-7.6312708e-7,-3.9209711e-6)">
-      <g transform="translate(1 -10.26041625)">
-        <text
-           y="-16.854183"
-           x="46.114437"
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:0.26458332"><tspan
-             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;fill-opacity:1;stroke-width:0.26458332"
-             y="-16.854183"
-             x="46.114437"><tspan
-               style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;stroke-width:0.26458332"> 0,1</tspan></tspan></text>
-        <text
-           y="-16.854183"
-           x="83.156105"
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:0.26458332"><tspan
-             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;fill-opacity:1;stroke-width:0.26458332"
-             y="-16.854183"
-             x="83.156105"><tspan
-               style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;stroke-width:0.26458332"> 1,1</tspan></tspan></text>
-        <text
-           y="-16.854183"
-           x="120.19777"
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:0.26458332"><tspan
-             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;fill-opacity:1;stroke-width:0.26458332"
-             y="-16.854183"
-             x="120.19777"><tspan
-               style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;stroke-width:0.26458332"> 2,1</tspan></tspan></text>
-        <text
-           y="-16.854183"
-           x="157.23944"
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:0.26458332"><tspan
-             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;fill-opacity:1;stroke-width:0.26458332"
-             y="-16.854183"
-             x="157.23944"><tspan
-               style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;stroke-width:0.26458332"> 3,1</tspan></tspan></text>
-        <text
-           y="20.187485"
-           x="46.114437"
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:0.26458332"><tspan
-             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;fill-opacity:1;stroke-width:0.26458332"
-             y="20.187485"
-             x="46.114437"><tspan
-               style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;stroke-width:0.26458332"> 0,0</tspan></tspan></text>
-        <text
-           y="20.187485"
-           x="83.156097"
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:0.26458332"><tspan
-             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;fill-opacity:1;stroke-width:0.26458332"
-             y="20.187485"
-             x="83.156097"><tspan
-               style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;stroke-width:0.26458332"> 1,0</tspan></tspan></text>
-        <text
-           y="20.187485"
-           x="120.19777"
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:0.26458332"><tspan
-             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;fill-opacity:1;stroke-width:0.26458332"
-             y="20.187485"
-             x="120.19777"><tspan
-               style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;stroke-width:0.26458332"> 2,0</tspan></tspan></text>
-        <text
-           y="20.187485"
-           x="157.23943"
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:0.26458332"><tspan
-             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;fill-opacity:1;stroke-width:0.26458332"
-             y="20.187485"
-             x="157.23943"><tspan
-               style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;stroke-width:0.26458332"> 3,0</tspan></tspan></text>
-      </g>
-    </g>
-  </g>
-</svg>
diff --git a/registry/vulkan/images/chromasamples_420_xmidpoint_ycosited.svg b/registry/vulkan/images/chromasamples_420_xmidpoint_ycosited.svg
deleted file mode 100644
index b73f668..0000000
--- a/registry/vulkan/images/chromasamples_420_xmidpoint_ycosited.svg
+++ /dev/null
@@ -1,390 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<svg
-   xmlns:dc="http://purl.org/dc/elements/1.1/"
-   xmlns:cc="http://creativecommons.org/ns#"
-   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
-   xmlns:svg="http://www.w3.org/2000/svg"
-   xmlns="http://www.w3.org/2000/svg"
-   version="1.1"
-   viewBox="0 0 186.82375 101.62997"
-   height="384.11328"
-   width="706.10547">
-  <defs>
-    <marker
-       id="Arrow1Lend"
-       orient="auto"
-       refY="0"
-       refX="0"       
-       style="overflow:visible">
-      <path         
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt;stroke-opacity:1"
-         transform="matrix(-0.8,0,0,-0.8,-10,0)" />
-    </marker>
-    <marker
-       id="marker1483"
-       style="overflow:visible"
-       refX="0"
-       refY="0"
-       orient="auto">
-      <path
-         transform="matrix(-0.8,0,0,-0.8,-10,0)"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt;stroke-opacity:1"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z" />
-    </marker>
-    <marker
-       style="overflow:visible"
-       id="marker1483-7"
-       refX="0"
-       refY="0"
-       orient="auto">
-      <path
-         transform="matrix(-0.8,0,0,-0.8,-10,0)"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt;stroke-opacity:1"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z" />
-    </marker>
-    <marker
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="Arrow1Lend-0"       
-       style="overflow:visible">
-      <path
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt;stroke-opacity:1"
-         transform="matrix(-0.8,0,0,-0.8,-10,0)" />
-    </marker>
-  </defs>
-  <g transform="translate(-6.9498988,47.8249)">
-    <g transform="translate(-2.6458349,-3.056108e-6)">
-      <text
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
-         x="34.208187"
-         y="-32.729179"><tspan
-           x="34.208187"
-           y="-32.729179"
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332">3</tspan></text>
-      <text
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
-         x="34.208187"
-         y="-14.208342"><tspan
-           x="34.208187"
-           y="-14.208342"
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332">2</tspan></text>
-      <text
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
-         x="34.208187"
-         y="4.3124924"><tspan
-           x="34.208187"
-           y="4.3124924"
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332">1</tspan></text>
-      <text
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
-         x="34.208187"
-         y="22.833326"><tspan
-           x="34.208187"
-           y="22.833326"
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332">0</tspan></text>
-      <text
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
-         x="47.437355"
-         y="36.062492"><tspan
-           x="47.437355"
-           y="36.062492"
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332">0</tspan></text>
-      <text
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
-         x="65.958191"
-         y="36.062492"><tspan
-           x="65.958191"
-           y="36.062492"
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332">1</tspan></text>
-      <text
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
-         x="84.479027"
-         y="36.062492"><tspan
-           x="84.479027"
-           y="36.062492"
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332">2</tspan></text>
-      <text
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
-         x="102.99986"
-         y="36.062492"><tspan
-           x="102.99986"
-           y="36.062492"
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332">3</tspan></text>
-      <text
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
-         x="121.52069"
-         y="36.062492"><tspan
-           x="121.52069"
-           y="36.062492"
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332">4</tspan></text>
-      <text
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
-         x="140.04152"
-         y="36.062492"><tspan
-           x="140.04152"
-           y="36.062492"
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332">5</tspan></text>
-      <text
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
-         x="158.56236"
-         y="36.062492"><tspan
-           x="158.56236"
-           y="36.062492"
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332">6</tspan></text>
-      <text
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
-         x="177.08319"
-         y="36.062492"><tspan
-           x="177.08319"
-           y="36.062492"
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332">7</tspan></text>
-      <text
-         style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
-         x="34.4366"
-         y="-5.1587644"><tspan
-           x="34.4366"
-           y="-5.1587644"
-           style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458332">j</tspan></text>
-      <text
-         style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
-         x="113.4819"
-         y="37.611752"><tspan
-           x="113.4819"
-           y="37.611752"
-           style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458332">i</tspan></text>
-      <g transform="translate(-25.323064 -72.260449) scale(1.75 1.75) translate(37.041666 16.541679) scale(0.25 0.25) scale(42.333333 42.333333)">
-        <path style="fill:none;stroke:black;stroke-width:0.01;stroke-linecap:square"
-              d="M0,0 H8 M0,1 H8 M0,2 H8 M0,3 H8 M0,4 H8 M0,0 V4 M1,0 V4 M2,0 V4 M3,0 V4 M4,0 V4 M5,0 V4 M6,0 V4 M7,0 V4 M8,0 V4" />
-        <circle style="fill:black;stroke:none" cx="0.5" cy="0.5" r="0.05" />
-        <circle style="fill:black;stroke:none" cx="1.5" cy="0.5" r="0.05" />
-        <circle style="fill:black;stroke:none" cx="2.5" cy="0.5" r="0.05" />
-        <circle style="fill:black;stroke:none" cx="3.5" cy="0.5" r="0.05" />
-        <circle style="fill:black;stroke:none" cx="4.5" cy="0.5" r="0.05" />
-        <circle style="fill:black;stroke:none" cx="5.5" cy="0.5" r="0.05" />
-        <circle style="fill:black;stroke:none" cx="6.5" cy="0.5" r="0.05" />
-        <circle style="fill:black;stroke:none" cx="7.5" cy="0.5" r="0.05" />
-        <circle style="fill:black;stroke:none" cx="0.5" cy="1.5" r="0.05" />
-        <circle style="fill:black;stroke:none" cx="1.5" cy="1.5" r="0.05" />
-        <circle style="fill:black;stroke:none" cx="2.5" cy="1.5" r="0.05" />
-        <circle style="fill:black;stroke:none" cx="3.5" cy="1.5" r="0.05" />
-        <circle style="fill:black;stroke:none" cx="4.5" cy="1.5" r="0.05" />
-        <circle style="fill:black;stroke:none" cx="5.5" cy="1.5" r="0.05" />
-        <circle style="fill:black;stroke:none" cx="6.5" cy="1.5" r="0.05" />
-        <circle style="fill:black;stroke:none" cx="7.5" cy="1.5" r="0.05" />
-        <circle style="fill:black;stroke:none" cx="0.5" cy="2.5" r="0.05" />
-        <circle style="fill:black;stroke:none" cx="1.5" cy="2.5" r="0.05" />
-        <circle style="fill:black;stroke:none" cx="2.5" cy="2.5" r="0.05" />
-        <circle style="fill:black;stroke:none" cx="3.5" cy="2.5" r="0.05" />
-        <circle style="fill:black;stroke:none" cx="4.5" cy="2.5" r="0.05" />
-        <circle style="fill:black;stroke:none" cx="5.5" cy="2.5" r="0.05" />
-        <circle style="fill:black;stroke:none" cx="6.5" cy="2.5" r="0.05" />
-        <circle style="fill:black;stroke:none" cx="7.5" cy="2.5" r="0.05" />
-        <circle style="fill:black;stroke:none" cx="0.5" cy="3.5" r="0.05" />
-        <circle style="fill:black;stroke:none" cx="1.5" cy="3.5" r="0.05" />
-        <circle style="fill:black;stroke:none" cx="2.5" cy="3.5" r="0.05" />
-        <circle style="fill:black;stroke:none" cx="3.5" cy="3.5" r="0.05" />
-        <circle style="fill:black;stroke:none" cx="4.5" cy="3.5" r="0.05" />
-        <circle style="fill:black;stroke:none" cx="5.5" cy="3.5" r="0.05" />
-        <circle style="fill:black;stroke:none" cx="6.5" cy="3.5" r="0.05" />
-        <circle style="fill:black;stroke:none" cx="7.5" cy="3.5" r="0.05" />
-        <g transform="translate(0.5 0.0)">
-          <path style="fill:none;stroke:red;stroke-width:0.02;stroke-linecap:square;stroke-dasharray:0.1,0.1;stroke-dashoffset:0.05"
-                d="M-0.5,0.5 h8 m-8,2 h8 m-8,2 h8m-8,-4 v4 m2,-4 v4 m2,-4 v4 m2,-4 v4 m2,-4 v4" />
-          <path style="fill:none;stroke:red;stroke-width:0.02;stroke-linecap:square"
-                d="M 0.5,1.5 m-0.08,-0.08 l0.16,0.16 m-0.16,0 l0.16,-0.16 m-0.08,0.08" />
-          <path style="fill:none;stroke:red;stroke-width:0.02;stroke-linecap:square"
-                d="M 2.5,1.5 m-0.08,-0.08 l0.16,0.16 m-0.16,0 l0.16,-0.16 m-0.08,0.08" />
-          <path style="fill:none;stroke:red;stroke-width:0.02;stroke-linecap:square"
-                d="M 4.5,1.5 m-0.08,-0.08 l0.16,0.16 m-0.16,0 l0.16,-0.16 m-0.08,0.08" />
-          <path style="fill:none;stroke:red;stroke-width:0.02;stroke-linecap:square"
-                d="M 6.5,1.5 m-0.08,-0.08 l0.16,0.16 m-0.16,0 l0.16,-0.16 m-0.08,0.08" />
-          <path style="fill:none;stroke:red;stroke-width:0.02;stroke-linecap:square"
-                d="M 0.5,3.5 m-0.08,-0.08 l0.16,0.16 m-0.16,0 l0.16,-0.16 m-0.08,0.08" />
-          <path style="fill:none;stroke:red;stroke-width:0.02;stroke-linecap:square"
-                d="M 2.5,3.5 m-0.08,-0.08 l0.16,0.16 m-0.16,0 l0.16,-0.16 m-0.08,0.08" />
-          <path style="fill:none;stroke:red;stroke-width:0.02;stroke-linecap:square"
-                d="M 4.5,3.5 m-0.08,-0.08 l0.16,0.16 m-0.16,0 l0.16,-0.16 m-0.08,0.08" />
-          <path style="fill:none;stroke:red;stroke-width:0.02;stroke-linecap:square"
-                d="M 6.5,3.5 m-0.08,-0.08 l0.16,0.16 m-0.16,0 l0.16,-0.16 m-0.08,0.08" />
-        </g>
-      </g>
-      <g transform="translate(-23.812502,2.2e-6)">
-        <text
-           y="45.537884"
-           x="54.556301"
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"><tspan
-             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332"
-             y="45.537884"
-             x="54.556301">0.0</tspan></text>
-        <text
-           y="45.538918"
-           x="213.32181"
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"><tspan
-             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332"
-             y="45.538918"
-             x="213.32181">8.0</tspan></text>
-        <path
-           d="m 63.312355,43.999992 h 71.437505 m 5.29167,2e-6 h 71.4375"
-           style="fill:none;stroke:#000000;stroke-width:0.26458335px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow1Lend)" />
-        <text
-           y="45.122406"
-           x="137.32748"
-           style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"><tspan
-             style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458332"
-             y="45.122406"
-             x="137.32748">u</tspan></text>
-      </g>
-      <g transform="translate(-23.812505,7.9375005)">
-        <text
-           y="45.537884"
-           x="54.556301"
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"><tspan
-             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332"
-             y="45.537884"
-             x="54.556301">0.0</tspan></text>
-        <text
-           y="45.538918"
-           x="213.32181"
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"><tspan
-             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332"
-             y="45.538918"
-             x="213.32181">1.0</tspan></text>
-        <path
-           d="m 63.312355,43.999992 h 71.437505 m 5.29167,2e-6 h 71.4375"
-           style="fill:none;stroke:#000000;stroke-width:0.26458335px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow1Lend-0)" />
-        <text
-           y="45.122406"
-           x="137.32748"
-           style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"><tspan
-             style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458332"
-             y="45.122406"
-             x="137.32748">s</tspan></text>
-      </g>
-      <g transform="translate(-23.812501,2.6458339)">
-        <text
-           y="-47.066288"
-           x="44.034977"
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"><tspan
-             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332"
-             y="-47.066288"
-             x="44.034977">4.0</tspan></text>
-        <text
-           y="32.308716"
-           x="43.972965"
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"><tspan
-             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332"
-             y="32.308716"
-             x="43.972965">0.0</tspan></text>
-        <path
-           style="fill:none;stroke:#000000;stroke-width:0.26458335px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker1483)"
-           d="M 47.437354,28.124992 V -6.2708429 m 10e-7,-5.2916661 v -34.395835" />
-        <text
-           y="-7.8045983"
-           x="46.93816"
-           style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"><tspan
-             style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458332"
-             y="-7.8045983"
-             x="46.93816">v</tspan></text>
-      </g>
-      <g transform="translate(-34.395835,2.6458339)">
-        <g>
-          <text
-             y="-47.066288"
-             x="44.034977"
-             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"><tspan
-               style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332"
-               y="-47.066288"
-               x="44.034977">1.0</tspan></text>
-          <text             
-             y="32.308716"
-             x="43.972965"
-             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"><tspan
-               style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332"
-               y="32.308716"
-               x="43.972965">0.0</tspan></text>
-          <path
-             style="fill:none;stroke:#000000;stroke-width:0.26458335px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker1483-7)"
-             d="M 47.437354,28.124992 V -6.2708429 m 10e-7,-5.2916661 v -34.395835" />
-          <text
-             y="-7.8045983"
-             x="46.93816"
-             style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"><tspan
-               style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458332"
-               y="-7.8045983"
-               x="46.93816">t</tspan></text>
-        </g>
-      </g>
-    </g>
-    <g transform="translate(-7.6312708e-7,-3.9209711e-6)">
-      <g transform="translate(10.26041625 -1)">
-        <text
-           y="-16.854183"
-           x="46.114437"
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:0.26458332"><tspan
-             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;fill-opacity:1;stroke-width:0.26458332"
-             y="-16.854183"
-             x="46.114437"><tspan
-               style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;stroke-width:0.26458332"> 0,1</tspan></tspan></text>
-        <text
-           y="-16.854183"
-           x="83.156105"
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:0.26458332"><tspan
-             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;fill-opacity:1;stroke-width:0.26458332"
-             y="-16.854183"
-             x="83.156105"><tspan
-               style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;stroke-width:0.26458332"> 1,1</tspan></tspan></text>
-        <text
-           y="-16.854183"
-           x="120.19777"
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:0.26458332"><tspan
-             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;fill-opacity:1;stroke-width:0.26458332"
-             y="-16.854183"
-             x="120.19777"><tspan
-               style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;stroke-width:0.26458332"> 2,1</tspan></tspan></text>
-        <text
-           y="-16.854183"
-           x="157.23944"
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:0.26458332"><tspan
-             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;fill-opacity:1;stroke-width:0.26458332"
-             y="-16.854183"
-             x="157.23944"><tspan
-               style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;stroke-width:0.26458332"> 3,1</tspan></tspan></text>
-        <text
-           y="20.187485"
-           x="46.114437"
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:0.26458332"><tspan
-             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;fill-opacity:1;stroke-width:0.26458332"
-             y="20.187485"
-             x="46.114437"><tspan
-               style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;stroke-width:0.26458332"> 0,0</tspan></tspan></text>
-        <text
-           y="20.187485"
-           x="83.156097"
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:0.26458332"><tspan
-             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;fill-opacity:1;stroke-width:0.26458332"
-             y="20.187485"
-             x="83.156097"><tspan
-               style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;stroke-width:0.26458332"> 1,0</tspan></tspan></text>
-        <text
-           y="20.187485"
-           x="120.19777"
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:0.26458332"><tspan
-             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;fill-opacity:1;stroke-width:0.26458332"
-             y="20.187485"
-             x="120.19777"><tspan
-               style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;stroke-width:0.26458332"> 2,0</tspan></tspan></text>
-        <text
-           y="20.187485"
-           x="157.23943"
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:0.26458332"><tspan
-             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;fill-opacity:1;stroke-width:0.26458332"
-             y="20.187485"
-             x="157.23943"><tspan
-               style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;stroke-width:0.26458332"> 3,0</tspan></tspan></text>
-      </g>
-    </g>
-  </g>
-</svg>
diff --git a/registry/vulkan/images/chromasamples_420_xmidpoint_ymidpoint.svg b/registry/vulkan/images/chromasamples_420_xmidpoint_ymidpoint.svg
deleted file mode 100644
index 31e9b68..0000000
--- a/registry/vulkan/images/chromasamples_420_xmidpoint_ymidpoint.svg
+++ /dev/null
@@ -1,390 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<svg
-   xmlns:dc="http://purl.org/dc/elements/1.1/"
-   xmlns:cc="http://creativecommons.org/ns#"
-   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
-   xmlns:svg="http://www.w3.org/2000/svg"
-   xmlns="http://www.w3.org/2000/svg"
-   version="1.1"
-   viewBox="0 0 186.82375 101.62997"
-   height="384.11328"
-   width="706.10547">
-  <defs>
-    <marker
-       id="Arrow1Lend"
-       orient="auto"
-       refY="0"
-       refX="0"       
-       style="overflow:visible">
-      <path         
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt;stroke-opacity:1"
-         transform="matrix(-0.8,0,0,-0.8,-10,0)" />
-    </marker>
-    <marker
-       id="marker1483"
-       style="overflow:visible"
-       refX="0"
-       refY="0"
-       orient="auto">
-      <path
-         transform="matrix(-0.8,0,0,-0.8,-10,0)"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt;stroke-opacity:1"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z" />
-    </marker>
-    <marker
-       style="overflow:visible"
-       id="marker1483-7"
-       refX="0"
-       refY="0"
-       orient="auto">
-      <path
-         transform="matrix(-0.8,0,0,-0.8,-10,0)"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt;stroke-opacity:1"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z" />
-    </marker>
-    <marker
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="Arrow1Lend-0"       
-       style="overflow:visible">
-      <path
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt;stroke-opacity:1"
-         transform="matrix(-0.8,0,0,-0.8,-10,0)" />
-    </marker>
-  </defs>
-  <g transform="translate(-6.9498988,47.8249)">
-    <g transform="translate(-2.6458349,-3.056108e-6)">
-      <text
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
-         x="34.208187"
-         y="-32.729179"><tspan
-           x="34.208187"
-           y="-32.729179"
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332">3</tspan></text>
-      <text
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
-         x="34.208187"
-         y="-14.208342"><tspan
-           x="34.208187"
-           y="-14.208342"
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332">2</tspan></text>
-      <text
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
-         x="34.208187"
-         y="4.3124924"><tspan
-           x="34.208187"
-           y="4.3124924"
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332">1</tspan></text>
-      <text
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
-         x="34.208187"
-         y="22.833326"><tspan
-           x="34.208187"
-           y="22.833326"
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332">0</tspan></text>
-      <text
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
-         x="47.437355"
-         y="36.062492"><tspan
-           x="47.437355"
-           y="36.062492"
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332">0</tspan></text>
-      <text
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
-         x="65.958191"
-         y="36.062492"><tspan
-           x="65.958191"
-           y="36.062492"
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332">1</tspan></text>
-      <text
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
-         x="84.479027"
-         y="36.062492"><tspan
-           x="84.479027"
-           y="36.062492"
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332">2</tspan></text>
-      <text
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
-         x="102.99986"
-         y="36.062492"><tspan
-           x="102.99986"
-           y="36.062492"
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332">3</tspan></text>
-      <text
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
-         x="121.52069"
-         y="36.062492"><tspan
-           x="121.52069"
-           y="36.062492"
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332">4</tspan></text>
-      <text
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
-         x="140.04152"
-         y="36.062492"><tspan
-           x="140.04152"
-           y="36.062492"
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332">5</tspan></text>
-      <text
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
-         x="158.56236"
-         y="36.062492"><tspan
-           x="158.56236"
-           y="36.062492"
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332">6</tspan></text>
-      <text
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
-         x="177.08319"
-         y="36.062492"><tspan
-           x="177.08319"
-           y="36.062492"
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332">7</tspan></text>
-      <text
-         style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
-         x="34.4366"
-         y="-5.1587644"><tspan
-           x="34.4366"
-           y="-5.1587644"
-           style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458332">j</tspan></text>
-      <text
-         style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
-         x="113.4819"
-         y="37.611752"><tspan
-           x="113.4819"
-           y="37.611752"
-           style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458332">i</tspan></text>
-      <g transform="translate(-25.323064 -72.260449) scale(1.75 1.75) translate(37.041666 16.541679) scale(0.25 0.25) scale(42.333333 42.333333)">
-        <path style="fill:none;stroke:black;stroke-width:0.01;stroke-linecap:square"
-              d="M0,0 H8 M0,1 H8 M0,2 H8 M0,3 H8 M0,4 H8 M0,0 V4 M1,0 V4 M2,0 V4 M3,0 V4 M4,0 V4 M5,0 V4 M6,0 V4 M7,0 V4 M8,0 V4" />
-        <circle style="fill:black;stroke:none" cx="0.5" cy="0.5" r="0.05" />
-        <circle style="fill:black;stroke:none" cx="1.5" cy="0.5" r="0.05" />
-        <circle style="fill:black;stroke:none" cx="2.5" cy="0.5" r="0.05" />
-        <circle style="fill:black;stroke:none" cx="3.5" cy="0.5" r="0.05" />
-        <circle style="fill:black;stroke:none" cx="4.5" cy="0.5" r="0.05" />
-        <circle style="fill:black;stroke:none" cx="5.5" cy="0.5" r="0.05" />
-        <circle style="fill:black;stroke:none" cx="6.5" cy="0.5" r="0.05" />
-        <circle style="fill:black;stroke:none" cx="7.5" cy="0.5" r="0.05" />
-        <circle style="fill:black;stroke:none" cx="0.5" cy="1.5" r="0.05" />
-        <circle style="fill:black;stroke:none" cx="1.5" cy="1.5" r="0.05" />
-        <circle style="fill:black;stroke:none" cx="2.5" cy="1.5" r="0.05" />
-        <circle style="fill:black;stroke:none" cx="3.5" cy="1.5" r="0.05" />
-        <circle style="fill:black;stroke:none" cx="4.5" cy="1.5" r="0.05" />
-        <circle style="fill:black;stroke:none" cx="5.5" cy="1.5" r="0.05" />
-        <circle style="fill:black;stroke:none" cx="6.5" cy="1.5" r="0.05" />
-        <circle style="fill:black;stroke:none" cx="7.5" cy="1.5" r="0.05" />
-        <circle style="fill:black;stroke:none" cx="0.5" cy="2.5" r="0.05" />
-        <circle style="fill:black;stroke:none" cx="1.5" cy="2.5" r="0.05" />
-        <circle style="fill:black;stroke:none" cx="2.5" cy="2.5" r="0.05" />
-        <circle style="fill:black;stroke:none" cx="3.5" cy="2.5" r="0.05" />
-        <circle style="fill:black;stroke:none" cx="4.5" cy="2.5" r="0.05" />
-        <circle style="fill:black;stroke:none" cx="5.5" cy="2.5" r="0.05" />
-        <circle style="fill:black;stroke:none" cx="6.5" cy="2.5" r="0.05" />
-        <circle style="fill:black;stroke:none" cx="7.5" cy="2.5" r="0.05" />
-        <circle style="fill:black;stroke:none" cx="0.5" cy="3.5" r="0.05" />
-        <circle style="fill:black;stroke:none" cx="1.5" cy="3.5" r="0.05" />
-        <circle style="fill:black;stroke:none" cx="2.5" cy="3.5" r="0.05" />
-        <circle style="fill:black;stroke:none" cx="3.5" cy="3.5" r="0.05" />
-        <circle style="fill:black;stroke:none" cx="4.5" cy="3.5" r="0.05" />
-        <circle style="fill:black;stroke:none" cx="5.5" cy="3.5" r="0.05" />
-        <circle style="fill:black;stroke:none" cx="6.5" cy="3.5" r="0.05" />
-        <circle style="fill:black;stroke:none" cx="7.5" cy="3.5" r="0.05" />
-        <g transform="translate(0.5 -0.5)">
-          <path style="fill:none;stroke:red;stroke-width:0.02;stroke-linecap:square;stroke-dasharray:0.1,0.1;stroke-dashoffset:0.05"
-                d="M-0.5,0.5 h8 m-8,2 h8 m-8,2 h8m-8,-4 v4 m2,-4 v4 m2,-4 v4 m2,-4 v4 m2,-4 v4" />
-          <path style="fill:none;stroke:red;stroke-width:0.02;stroke-linecap:square"
-                d="M 0.5,1.5 m-0.08,-0.08 l0.16,0.16 m-0.16,0 l0.16,-0.16 m-0.08,0.08" />
-          <path style="fill:none;stroke:red;stroke-width:0.02;stroke-linecap:square"
-                d="M 2.5,1.5 m-0.08,-0.08 l0.16,0.16 m-0.16,0 l0.16,-0.16 m-0.08,0.08" />
-          <path style="fill:none;stroke:red;stroke-width:0.02;stroke-linecap:square"
-                d="M 4.5,1.5 m-0.08,-0.08 l0.16,0.16 m-0.16,0 l0.16,-0.16 m-0.08,0.08" />
-          <path style="fill:none;stroke:red;stroke-width:0.02;stroke-linecap:square"
-                d="M 6.5,1.5 m-0.08,-0.08 l0.16,0.16 m-0.16,0 l0.16,-0.16 m-0.08,0.08" />
-          <path style="fill:none;stroke:red;stroke-width:0.02;stroke-linecap:square"
-                d="M 0.5,3.5 m-0.08,-0.08 l0.16,0.16 m-0.16,0 l0.16,-0.16 m-0.08,0.08" />
-          <path style="fill:none;stroke:red;stroke-width:0.02;stroke-linecap:square"
-                d="M 2.5,3.5 m-0.08,-0.08 l0.16,0.16 m-0.16,0 l0.16,-0.16 m-0.08,0.08" />
-          <path style="fill:none;stroke:red;stroke-width:0.02;stroke-linecap:square"
-                d="M 4.5,3.5 m-0.08,-0.08 l0.16,0.16 m-0.16,0 l0.16,-0.16 m-0.08,0.08" />
-          <path style="fill:none;stroke:red;stroke-width:0.02;stroke-linecap:square"
-                d="M 6.5,3.5 m-0.08,-0.08 l0.16,0.16 m-0.16,0 l0.16,-0.16 m-0.08,0.08" />
-        </g>
-      </g>
-      <g transform="translate(-23.812502,2.2e-6)">
-        <text
-           y="45.537884"
-           x="54.556301"
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"><tspan
-             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332"
-             y="45.537884"
-             x="54.556301">0.0</tspan></text>
-        <text
-           y="45.538918"
-           x="213.32181"
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"><tspan
-             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332"
-             y="45.538918"
-             x="213.32181">8.0</tspan></text>
-        <path
-           d="m 63.312355,43.999992 h 71.437505 m 5.29167,2e-6 h 71.4375"
-           style="fill:none;stroke:#000000;stroke-width:0.26458335px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow1Lend)" />
-        <text
-           y="45.122406"
-           x="137.32748"
-           style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"><tspan
-             style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458332"
-             y="45.122406"
-             x="137.32748">u</tspan></text>
-      </g>
-      <g transform="translate(-23.812505,7.9375005)">
-        <text
-           y="45.537884"
-           x="54.556301"
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"><tspan
-             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332"
-             y="45.537884"
-             x="54.556301">0.0</tspan></text>
-        <text
-           y="45.538918"
-           x="213.32181"
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"><tspan
-             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332"
-             y="45.538918"
-             x="213.32181">1.0</tspan></text>
-        <path
-           d="m 63.312355,43.999992 h 71.437505 m 5.29167,2e-6 h 71.4375"
-           style="fill:none;stroke:#000000;stroke-width:0.26458335px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow1Lend-0)" />
-        <text
-           y="45.122406"
-           x="137.32748"
-           style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"><tspan
-             style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458332"
-             y="45.122406"
-             x="137.32748">s</tspan></text>
-      </g>
-      <g transform="translate(-23.812501,2.6458339)">
-        <text
-           y="-47.066288"
-           x="44.034977"
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"><tspan
-             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332"
-             y="-47.066288"
-             x="44.034977">4.0</tspan></text>
-        <text
-           y="32.308716"
-           x="43.972965"
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"><tspan
-             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332"
-             y="32.308716"
-             x="43.972965">0.0</tspan></text>
-        <path
-           style="fill:none;stroke:#000000;stroke-width:0.26458335px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker1483)"
-           d="M 47.437354,28.124992 V -6.2708429 m 10e-7,-5.2916661 v -34.395835" />
-        <text
-           y="-7.8045983"
-           x="46.93816"
-           style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"><tspan
-             style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458332"
-             y="-7.8045983"
-             x="46.93816">v</tspan></text>
-      </g>
-      <g transform="translate(-34.395835,2.6458339)">
-        <g>
-          <text
-             y="-47.066288"
-             x="44.034977"
-             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"><tspan
-               style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332"
-               y="-47.066288"
-               x="44.034977">1.0</tspan></text>
-          <text             
-             y="32.308716"
-             x="43.972965"
-             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"><tspan
-               style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332"
-               y="32.308716"
-               x="43.972965">0.0</tspan></text>
-          <path
-             style="fill:none;stroke:#000000;stroke-width:0.26458335px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker1483-7)"
-             d="M 47.437354,28.124992 V -6.2708429 m 10e-7,-5.2916661 v -34.395835" />
-          <text
-             y="-7.8045983"
-             x="46.93816"
-             style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"><tspan
-               style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458332"
-               y="-7.8045983"
-               x="46.93816">t</tspan></text>
-        </g>
-      </g>
-    </g>
-    <g transform="translate(-7.6312708e-7,-3.9209711e-6)">
-      <g transform="translate(10.26041625 -10.26041625)">
-        <text
-           y="-16.854183"
-           x="46.114437"
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:0.26458332"><tspan
-             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;fill-opacity:1;stroke-width:0.26458332"
-             y="-16.854183"
-             x="46.114437"><tspan
-               style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;stroke-width:0.26458332"> 0,1</tspan></tspan></text>
-        <text
-           y="-16.854183"
-           x="83.156105"
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:0.26458332"><tspan
-             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;fill-opacity:1;stroke-width:0.26458332"
-             y="-16.854183"
-             x="83.156105"><tspan
-               style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;stroke-width:0.26458332"> 1,1</tspan></tspan></text>
-        <text
-           y="-16.854183"
-           x="120.19777"
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:0.26458332"><tspan
-             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;fill-opacity:1;stroke-width:0.26458332"
-             y="-16.854183"
-             x="120.19777"><tspan
-               style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;stroke-width:0.26458332"> 2,1</tspan></tspan></text>
-        <text
-           y="-16.854183"
-           x="157.23944"
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:0.26458332"><tspan
-             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;fill-opacity:1;stroke-width:0.26458332"
-             y="-16.854183"
-             x="157.23944"><tspan
-               style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;stroke-width:0.26458332"> 3,1</tspan></tspan></text>
-        <text
-           y="20.187485"
-           x="46.114437"
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:0.26458332"><tspan
-             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;fill-opacity:1;stroke-width:0.26458332"
-             y="20.187485"
-             x="46.114437"><tspan
-               style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;stroke-width:0.26458332"> 0,0</tspan></tspan></text>
-        <text
-           y="20.187485"
-           x="83.156097"
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:0.26458332"><tspan
-             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;fill-opacity:1;stroke-width:0.26458332"
-             y="20.187485"
-             x="83.156097"><tspan
-               style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;stroke-width:0.26458332"> 1,0</tspan></tspan></text>
-        <text
-           y="20.187485"
-           x="120.19777"
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:0.26458332"><tspan
-             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;fill-opacity:1;stroke-width:0.26458332"
-             y="20.187485"
-             x="120.19777"><tspan
-               style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;stroke-width:0.26458332"> 2,0</tspan></tspan></text>
-        <text
-           y="20.187485"
-           x="157.23943"
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:0.26458332"><tspan
-             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;fill-opacity:1;stroke-width:0.26458332"
-             y="20.187485"
-             x="157.23943"><tspan
-               style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;stroke-width:0.26458332"> 3,0</tspan></tspan></text>
-      </g>
-    </g>
-  </g>
-</svg>
diff --git a/registry/vulkan/images/chromasamples_422_cosited.svg b/registry/vulkan/images/chromasamples_422_cosited.svg
deleted file mode 100644
index ea34dc1..0000000
--- a/registry/vulkan/images/chromasamples_422_cosited.svg
+++ /dev/null
@@ -1,468 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<svg
-   xmlns:dc="http://purl.org/dc/elements/1.1/"
-   xmlns:cc="http://creativecommons.org/ns#"
-   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
-   xmlns:svg="http://www.w3.org/2000/svg"
-   xmlns="http://www.w3.org/2000/svg"
-   version="1.1"
-   viewBox="0 0 186.82375 101.62997"
-   height="384.11328"
-   width="706.10547">
-  <defs>
-    <marker
-       id="Arrow1Lend"
-       orient="auto"
-       refY="0"
-       refX="0"       
-       style="overflow:visible">
-      <path         
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt;stroke-opacity:1"
-         transform="matrix(-0.8,0,0,-0.8,-10,0)" />
-    </marker>
-    <marker
-       id="marker1483"
-       style="overflow:visible"
-       refX="0"
-       refY="0"
-       orient="auto">
-      <path
-         transform="matrix(-0.8,0,0,-0.8,-10,0)"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt;stroke-opacity:1"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z" />
-    </marker>
-    <marker
-       style="overflow:visible"
-       id="marker1483-7"
-       refX="0"
-       refY="0"
-       orient="auto">
-      <path
-         transform="matrix(-0.8,0,0,-0.8,-10,0)"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt;stroke-opacity:1"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z" />
-    </marker>
-    <marker
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="Arrow1Lend-0"       
-       style="overflow:visible">
-      <path
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt;stroke-opacity:1"
-         transform="matrix(-0.8,0,0,-0.8,-10,0)" />
-    </marker>
-  </defs>
-  <g transform="translate(-6.9498988,47.8249)">
-    <g transform="translate(-2.6458349,-3.056108e-6)">
-      <text
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
-         x="34.208187"
-         y="-32.729179"><tspan
-           x="34.208187"
-           y="-32.729179"
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332">3</tspan></text>
-      <text
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
-         x="34.208187"
-         y="-14.208342"><tspan
-           x="34.208187"
-           y="-14.208342"
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332">2</tspan></text>
-      <text
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
-         x="34.208187"
-         y="4.3124924"><tspan
-           x="34.208187"
-           y="4.3124924"
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332">1</tspan></text>
-      <text
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
-         x="34.208187"
-         y="22.833326"><tspan
-           x="34.208187"
-           y="22.833326"
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332">0</tspan></text>
-      <text
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
-         x="47.437355"
-         y="36.062492"><tspan
-           x="47.437355"
-           y="36.062492"
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332">0</tspan></text>
-      <text
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
-         x="65.958191"
-         y="36.062492"><tspan
-           x="65.958191"
-           y="36.062492"
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332">1</tspan></text>
-      <text
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
-         x="84.479027"
-         y="36.062492"><tspan
-           x="84.479027"
-           y="36.062492"
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332">2</tspan></text>
-      <text
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
-         x="102.99986"
-         y="36.062492"><tspan
-           x="102.99986"
-           y="36.062492"
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332">3</tspan></text>
-      <text
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
-         x="121.52069"
-         y="36.062492"><tspan
-           x="121.52069"
-           y="36.062492"
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332">4</tspan></text>
-      <text
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
-         x="140.04152"
-         y="36.062492"><tspan
-           x="140.04152"
-           y="36.062492"
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332">5</tspan></text>
-      <text
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
-         x="158.56236"
-         y="36.062492"><tspan
-           x="158.56236"
-           y="36.062492"
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332">6</tspan></text>
-      <text
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
-         x="177.08319"
-         y="36.062492"><tspan
-           x="177.08319"
-           y="36.062492"
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332">7</tspan></text>
-      <text
-         style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
-         x="34.4366"
-         y="-5.1587644"><tspan
-           x="34.4366"
-           y="-5.1587644"
-           style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458332">j</tspan></text>
-      <text
-         style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
-         x="113.4819"
-         y="37.611752"><tspan
-           x="113.4819"
-           y="37.611752"
-           style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458332">i</tspan></text>
-      <g transform="translate(-25.323064 -72.260449) scale(1.75 1.75) translate(37.041666 16.541679) scale(0.25 0.25) scale(42.333333 42.333333)">
-        <path style="fill:none;stroke:black;stroke-width:0.01;stroke-linecap:square"
-              d="M0,0 H8 M0,1 H8 M0,2 H8 M0,3 H8 M0,4 H8 M0,0 V4 M1,0 V4 M2,0 V4 M3,0 V4 M4,0 V4 M5,0 V4 M6,0 V4 M7,0 V4 M8,0 V4" />
-        <circle style="fill:black;stroke:none" cx="0.5" cy="0.5" r="0.05" />
-        <circle style="fill:black;stroke:none" cx="1.5" cy="0.5" r="0.05" />
-        <circle style="fill:black;stroke:none" cx="2.5" cy="0.5" r="0.05" />
-        <circle style="fill:black;stroke:none" cx="3.5" cy="0.5" r="0.05" />
-        <circle style="fill:black;stroke:none" cx="4.5" cy="0.5" r="0.05" />
-        <circle style="fill:black;stroke:none" cx="5.5" cy="0.5" r="0.05" />
-        <circle style="fill:black;stroke:none" cx="6.5" cy="0.5" r="0.05" />
-        <circle style="fill:black;stroke:none" cx="7.5" cy="0.5" r="0.05" />
-        <circle style="fill:black;stroke:none" cx="0.5" cy="1.5" r="0.05" />
-        <circle style="fill:black;stroke:none" cx="1.5" cy="1.5" r="0.05" />
-        <circle style="fill:black;stroke:none" cx="2.5" cy="1.5" r="0.05" />
-        <circle style="fill:black;stroke:none" cx="3.5" cy="1.5" r="0.05" />
-        <circle style="fill:black;stroke:none" cx="4.5" cy="1.5" r="0.05" />
-        <circle style="fill:black;stroke:none" cx="5.5" cy="1.5" r="0.05" />
-        <circle style="fill:black;stroke:none" cx="6.5" cy="1.5" r="0.05" />
-        <circle style="fill:black;stroke:none" cx="7.5" cy="1.5" r="0.05" />
-        <circle style="fill:black;stroke:none" cx="0.5" cy="2.5" r="0.05" />
-        <circle style="fill:black;stroke:none" cx="1.5" cy="2.5" r="0.05" />
-        <circle style="fill:black;stroke:none" cx="2.5" cy="2.5" r="0.05" />
-        <circle style="fill:black;stroke:none" cx="3.5" cy="2.5" r="0.05" />
-        <circle style="fill:black;stroke:none" cx="4.5" cy="2.5" r="0.05" />
-        <circle style="fill:black;stroke:none" cx="5.5" cy="2.5" r="0.05" />
-        <circle style="fill:black;stroke:none" cx="6.5" cy="2.5" r="0.05" />
-        <circle style="fill:black;stroke:none" cx="7.5" cy="2.5" r="0.05" />
-        <circle style="fill:black;stroke:none" cx="0.5" cy="3.5" r="0.05" />
-        <circle style="fill:black;stroke:none" cx="1.5" cy="3.5" r="0.05" />
-        <circle style="fill:black;stroke:none" cx="2.5" cy="3.5" r="0.05" />
-        <circle style="fill:black;stroke:none" cx="3.5" cy="3.5" r="0.05" />
-        <circle style="fill:black;stroke:none" cx="4.5" cy="3.5" r="0.05" />
-        <circle style="fill:black;stroke:none" cx="5.5" cy="3.5" r="0.05" />
-        <circle style="fill:black;stroke:none" cx="6.5" cy="3.5" r="0.05" />
-        <circle style="fill:black;stroke:none" cx="7.5" cy="3.5" r="0.05" />
-        <path style="fill:none;stroke:red;stroke-width:0.02;stroke-linecap:square;stroke-dasharray:0.1,0.1;stroke-dashoffset:0.05"
-              d="M-0.5,0 h8 m-8,1 h8 m-8,1 h8 m-8,1 h8 m-8,1 h8 m-8,-4 v4 m2,-4 v4 m2,-4 v4 m2,-4 v4 m2,-4 v4" />
-        <path style="fill:none;stroke:red;stroke-width:0.02;stroke-linecap:square"
-              d="M 0.5,0.5 m-0.08,-0.08 l0.16,0.16 m-0.16,0 l0.16,-0.16 m-0.08,0.08" />
-        <path style="fill:none;stroke:red;stroke-width:0.02;stroke-linecap:square"
-              d="M 2.5,0.5 m-0.08,-0.08 l0.16,0.16 m-0.16,0 l0.16,-0.16 m-0.08,0.08" />
-        <path style="fill:none;stroke:red;stroke-width:0.02;stroke-linecap:square"
-              d="M 4.5,0.5 m-0.08,-0.08 l0.16,0.16 m-0.16,0 l0.16,-0.16 m-0.08,0.08" />
-        <path style="fill:none;stroke:red;stroke-width:0.02;stroke-linecap:square"
-              d="M 6.5,0.5 m-0.08,-0.08 l0.16,0.16 m-0.16,0 l0.16,-0.16 m-0.08,0.08" />
-        <path style="fill:none;stroke:red;stroke-width:0.02;stroke-linecap:square"
-              d="M 0.5,1.5 m-0.08,-0.08 l0.16,0.16 m-0.16,0 l0.16,-0.16 m-0.08,0.08" />
-        <path style="fill:none;stroke:red;stroke-width:0.02;stroke-linecap:square"
-              d="M 2.5,1.5 m-0.08,-0.08 l0.16,0.16 m-0.16,0 l0.16,-0.16 m-0.08,0.08" />
-        <path style="fill:none;stroke:red;stroke-width:0.02;stroke-linecap:square"
-              d="M 4.5,1.5 m-0.08,-0.08 l0.16,0.16 m-0.16,0 l0.16,-0.16 m-0.08,0.08" />
-        <path style="fill:none;stroke:red;stroke-width:0.02;stroke-linecap:square"
-              d="M 6.5,1.5 m-0.08,-0.08 l0.16,0.16 m-0.16,0 l0.16,-0.16 m-0.08,0.08" />
-        <path style="fill:none;stroke:red;stroke-width:0.02;stroke-linecap:square"
-              d="M 0.5,2.5 m-0.08,-0.08 l0.16,0.16 m-0.16,0 l0.16,-0.16 m-0.08,0.08" />
-        <path style="fill:none;stroke:red;stroke-width:0.02;stroke-linecap:square"
-              d="M 2.5,2.5 m-0.08,-0.08 l0.16,0.16 m-0.16,0 l0.16,-0.16 m-0.08,0.08" />
-        <path style="fill:none;stroke:red;stroke-width:0.02;stroke-linecap:square"
-              d="M 4.5,2.5 m-0.08,-0.08 l0.16,0.16 m-0.16,0 l0.16,-0.16 m-0.08,0.08" />
-        <path style="fill:none;stroke:red;stroke-width:0.02;stroke-linecap:square"
-              d="M 6.5,2.5 m-0.08,-0.08 l0.16,0.16 m-0.16,0 l0.16,-0.16 m-0.08,0.08" />
-        <path style="fill:none;stroke:red;stroke-width:0.02;stroke-linecap:square"
-              d="M 0.5,3.5 m-0.08,-0.08 l0.16,0.16 m-0.16,0 l0.16,-0.16 m-0.08,0.08" />
-        <path style="fill:none;stroke:red;stroke-width:0.02;stroke-linecap:square"
-              d="M 2.5,3.5 m-0.08,-0.08 l0.16,0.16 m-0.16,0 l0.16,-0.16 m-0.08,0.08" />
-        <path style="fill:none;stroke:red;stroke-width:0.02;stroke-linecap:square"
-              d="M 4.5,3.5 m-0.08,-0.08 l0.16,0.16 m-0.16,0 l0.16,-0.16 m-0.08,0.08" />
-        <path style="fill:none;stroke:red;stroke-width:0.02;stroke-linecap:square"
-              d="M 6.5,3.5 m-0.08,-0.08 l0.16,0.16 m-0.16,0 l0.16,-0.16 m-0.08,0.08" />
-      </g>
-      <g transform="translate(-23.812502,2.2e-6)">
-        <text
-           y="45.537884"
-           x="54.556301"
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"><tspan
-             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332"
-             y="45.537884"
-             x="54.556301">0.0</tspan></text>
-        <text
-           y="45.538918"
-           x="213.32181"
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"><tspan
-             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332"
-             y="45.538918"
-             x="213.32181">8.0</tspan></text>
-        <path
-           d="m 63.312355,43.999992 h 71.437505 m 5.29167,2e-6 h 71.4375"
-           style="fill:none;stroke:#000000;stroke-width:0.26458335px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow1Lend)" />
-        <text
-           y="45.122406"
-           x="137.32748"
-           style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"><tspan
-             style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458332"
-             y="45.122406"
-             x="137.32748">u</tspan></text>
-      </g>
-      <g transform="translate(-23.812505,7.9375005)">
-        <text
-           y="45.537884"
-           x="54.556301"
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"><tspan
-             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332"
-             y="45.537884"
-             x="54.556301">0.0</tspan></text>
-        <text
-           y="45.538918"
-           x="213.32181"
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"><tspan
-             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332"
-             y="45.538918"
-             x="213.32181">1.0</tspan></text>
-        <path
-           d="m 63.312355,43.999992 h 71.437505 m 5.29167,2e-6 h 71.4375"
-           style="fill:none;stroke:#000000;stroke-width:0.26458335px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow1Lend-0)" />
-        <text
-           y="45.122406"
-           x="137.32748"
-           style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"><tspan
-             style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458332"
-             y="45.122406"
-             x="137.32748">s</tspan></text>
-      </g>
-      <g transform="translate(-23.812501,2.6458339)">
-        <text
-           y="-47.066288"
-           x="44.034977"
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"><tspan
-             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332"
-             y="-47.066288"
-             x="44.034977">4.0</tspan></text>
-        <text
-           y="32.308716"
-           x="43.972965"
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"><tspan
-             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332"
-             y="32.308716"
-             x="43.972965">0.0</tspan></text>
-        <path
-           style="fill:none;stroke:#000000;stroke-width:0.26458335px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker1483)"
-           d="M 47.437354,28.124992 V -6.2708429 m 10e-7,-5.2916661 v -34.395835" />
-        <text
-           y="-7.8045983"
-           x="46.93816"
-           style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"><tspan
-             style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458332"
-             y="-7.8045983"
-             x="46.93816">v</tspan></text>
-      </g>
-      <g transform="translate(-34.395835,2.6458339)">
-        <g>
-          <text
-             y="-47.066288"
-             x="44.034977"
-             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"><tspan
-               style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332"
-               y="-47.066288"
-               x="44.034977">1.0</tspan></text>
-          <text             
-             y="32.308716"
-             x="43.972965"
-             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"><tspan
-               style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332"
-               y="32.308716"
-               x="43.972965">0.0</tspan></text>
-          <path
-             style="fill:none;stroke:#000000;stroke-width:0.26458335px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker1483-7)"
-             d="M 47.437354,28.124992 V -6.2708429 m 10e-7,-5.2916661 v -34.395835" />
-          <text
-             y="-7.8045983"
-             x="46.93816"
-             style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"><tspan
-               style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458332"
-               y="-7.8045983"
-               x="46.93816">t</tspan></text>
-        </g>
-      </g>
-    </g>
-    <g transform="translate(-7.6312708e-7,-3.9209711e-6)">
-      <g transform="translate(1 -1)">
-        <text
-           y="-16.854183"
-           x="46.114437"
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:0.26458332"><tspan
-             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;fill-opacity:1;stroke-width:0.26458332"
-             y="-16.854183"
-             x="46.114437"><tspan
-               style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;stroke-width:0.26458332"> 0,2</tspan></tspan></text>
-        <text
-           y="-16.854183"
-           x="83.156105"
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:0.26458332"><tspan
-             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;fill-opacity:1;stroke-width:0.26458332"
-             y="-16.854183"
-             x="83.156105"><tspan
-               style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;stroke-width:0.26458332"> 1,2</tspan></tspan></text>
-        <text
-           y="-16.854183"
-           x="120.19777"
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:0.26458332"><tspan
-             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;fill-opacity:1;stroke-width:0.26458332"
-             y="-16.854183"
-             x="120.19777"><tspan
-               style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;stroke-width:0.26458332"> 2,2</tspan></tspan></text>
-        <text
-           y="-16.854183"
-           x="157.23944"
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:0.26458332"><tspan
-             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;fill-opacity:1;stroke-width:0.26458332"
-             y="-16.854183"
-             x="157.23944"><tspan
-               style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;stroke-width:0.26458332"> 3,2</tspan></tspan></text>
-        <text
-           y="1.6666511"
-           x="46.114433"
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:0.26458332"><tspan
-             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;fill-opacity:1;stroke-width:0.26458332"
-             y="1.6666511"
-             x="46.114433"><tspan
-               style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;stroke-width:0.26458332"> 0,1</tspan></tspan></text>
-        <text
-           y="1.6666511"
-           x="83.15609"
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:0.26458332"><tspan
-             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;fill-opacity:1;stroke-width:0.26458332"
-             y="1.6666511"
-             x="83.15609"><tspan
-               style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;stroke-width:0.26458332"> 1,1</tspan></tspan></text>
-        <text
-           y="1.6666511"
-           x="120.19776"
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:0.26458332"><tspan
-             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;fill-opacity:1;stroke-width:0.26458332"
-             y="1.6666511"
-             x="120.19776"><tspan
-               style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;stroke-width:0.26458332"> 2,1</tspan></tspan></text>
-        <text
-           y="1.6666511"
-           x="157.23943"
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:0.26458332"><tspan
-             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;fill-opacity:1;stroke-width:0.26458332"
-             y="1.6666511"
-             x="157.23943"><tspan
-               style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;stroke-width:0.26458332"> 3,1</tspan></tspan></text>
-        <text
-           y="20.187485"
-           x="46.114437"
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:0.26458332"><tspan
-             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;fill-opacity:1;stroke-width:0.26458332"
-             y="20.187485"
-             x="46.114437"><tspan
-               style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;stroke-width:0.26458332"> 0,0</tspan></tspan></text>
-        <text
-           y="20.187485"
-           x="83.156097"
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:0.26458332"><tspan
-             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;fill-opacity:1;stroke-width:0.26458332"
-             y="20.187485"
-             x="83.156097"><tspan
-               style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;stroke-width:0.26458332"> 1,0</tspan></tspan></text>
-        <text
-           y="20.187485"
-           x="120.19777"
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:0.26458332"><tspan
-             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;fill-opacity:1;stroke-width:0.26458332"
-             y="20.187485"
-             x="120.19777"><tspan
-               style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;stroke-width:0.26458332"> 2,0</tspan></tspan></text>
-        <text
-           y="20.187485"
-           x="157.23943"
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:0.26458332"><tspan
-             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;fill-opacity:1;stroke-width:0.26458332"
-             y="20.187485"
-             x="157.23943"><tspan
-               style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;stroke-width:0.26458332"> 3,0</tspan></tspan></text>
-        <text
-           y="-35.375011"
-           x="46.114437"
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:0.26458332"><tspan
-             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;fill-opacity:1;stroke-width:0.26458332"
-             y="-35.375011"
-             x="46.114437"><tspan
-               style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;stroke-width:0.26458332"> 0,3</tspan></tspan></text>
-        <text
-           y="-35.375011"
-           x="83.156105"
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:0.26458332"><tspan
-             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;fill-opacity:1;stroke-width:0.26458332"
-             y="-35.375011"
-             x="83.156105"><tspan
-               style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;stroke-width:0.26458332"> 1,3</tspan></tspan></text>
-        <text
-           y="-35.375011"
-           x="120.19777"
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:0.26458332"><tspan
-             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;fill-opacity:1;stroke-width:0.26458332"
-             y="-35.375011"
-             x="120.19777"><tspan
-               style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;stroke-width:0.26458332"> 2,3</tspan></tspan></text>
-        <text
-           y="-35.375011"
-           x="157.23944"
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:0.26458332"><tspan
-             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;fill-opacity:1;stroke-width:0.26458332"
-             y="-35.375011"
-             x="157.23944"><tspan               
-               style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;stroke-width:0.26458332"> 3,3</tspan></tspan></text>
-      </g>
-    </g>
-  </g>
-</svg>
diff --git a/registry/vulkan/images/chromasamples_422_midpoint.svg b/registry/vulkan/images/chromasamples_422_midpoint.svg
deleted file mode 100644
index c82a4e5..0000000
--- a/registry/vulkan/images/chromasamples_422_midpoint.svg
+++ /dev/null
@@ -1,475 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<svg
-   xmlns:dc="http://purl.org/dc/elements/1.1/"
-   xmlns:cc="http://creativecommons.org/ns#"
-   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
-   xmlns:svg="http://www.w3.org/2000/svg"
-   xmlns="http://www.w3.org/2000/svg"
-   version="1.1"
-   viewBox="0 0 186.82375 101.62997"
-   height="384.11328"
-   width="706.10547">
-  <defs>
-    <marker
-       id="Arrow1Lend"
-       orient="auto"
-       refY="0"
-       refX="0"       
-       style="overflow:visible">
-      <path         
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt;stroke-opacity:1"
-         transform="matrix(-0.8,0,0,-0.8,-10,0)" />
-    </marker>
-    <marker
-       id="marker1483"
-       style="overflow:visible"
-       refX="0"
-       refY="0"
-       orient="auto">
-      <path
-         transform="matrix(-0.8,0,0,-0.8,-10,0)"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt;stroke-opacity:1"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z" />
-    </marker>
-    <marker
-       style="overflow:visible"
-       id="marker1483-7"
-       refX="0"
-       refY="0"
-       orient="auto">
-      <path
-         transform="matrix(-0.8,0,0,-0.8,-10,0)"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt;stroke-opacity:1"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z" />
-    </marker>
-    <marker
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="Arrow1Lend-0"       
-       style="overflow:visible">
-      <path
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt;stroke-opacity:1"
-         transform="matrix(-0.8,0,0,-0.8,-10,0)" />
-    </marker>
-  </defs>
-  <g transform="translate(-6.9498988,47.8249)">
-    <g transform="translate(-2.6458349,-3.056108e-6)">
-      <text
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
-         x="34.208187"
-         y="-32.729179"><tspan
-           x="34.208187"
-           y="-32.729179"
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332">3</tspan></text>
-      <text
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
-         x="34.208187"
-         y="-14.208342"><tspan
-           x="34.208187"
-           y="-14.208342"
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332">2</tspan></text>
-      <text
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
-         x="34.208187"
-         y="4.3124924"><tspan
-           x="34.208187"
-           y="4.3124924"
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332">1</tspan></text>
-      <text
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
-         x="34.208187"
-         y="22.833326"><tspan
-           x="34.208187"
-           y="22.833326"
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332">0</tspan></text>
-      <text
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
-         x="47.437355"
-         y="36.062492"><tspan
-           x="47.437355"
-           y="36.062492"
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332">0</tspan></text>
-      <text
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
-         x="65.958191"
-         y="36.062492"><tspan
-           x="65.958191"
-           y="36.062492"
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332">1</tspan></text>
-      <text
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
-         x="84.479027"
-         y="36.062492"><tspan
-           x="84.479027"
-           y="36.062492"
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332">2</tspan></text>
-      <text
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
-         x="102.99986"
-         y="36.062492"><tspan
-           x="102.99986"
-           y="36.062492"
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332">3</tspan></text>
-      <text
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
-         x="121.52069"
-         y="36.062492"><tspan
-           x="121.52069"
-           y="36.062492"
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332">4</tspan></text>
-      <text
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
-         x="140.04152"
-         y="36.062492"><tspan
-           x="140.04152"
-           y="36.062492"
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332">5</tspan></text>
-      <text
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
-         x="158.56236"
-         y="36.062492"><tspan
-           x="158.56236"
-           y="36.062492"
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332">6</tspan></text>
-      <text
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
-         x="177.08319"
-         y="36.062492"><tspan
-           x="177.08319"
-           y="36.062492"
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332">7</tspan></text>
-      <text
-         style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
-         x="34.4366"
-         y="-5.1587644"><tspan
-           x="34.4366"
-           y="-5.1587644"
-           style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458332">j</tspan></text>
-      <text
-         style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
-         x="113.4819"
-         y="37.611752"><tspan
-           x="113.4819"
-           y="37.611752"
-           style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458332">i</tspan></text>
-      <g
-          transform="translate(-25.323064 -72.260449) scale(1.75 1.75) translate(37.041666 16.541679) scale(0.25 0.25) scale(42.333333 42.333333)">
-        <path style="fill:none;stroke:black;stroke-width:0.01;stroke-linecap:square"
-              d="M0,0 H8 M0,1 H8 M0,2 H8 M0,3 H8 M0,4 H8 M0,0 V4 M1,0 V4 M2,0 V4 M3,0 V4 M4,0 V4 M5,0 V4 M6,0 V4 M7,0 V4 M8,0 V4" />
-        <circle style="fill:black;stroke:none" cx="0.5" cy="0.5" r="0.05" />
-        <circle style="fill:black;stroke:none" cx="1.5" cy="0.5" r="0.05" />
-        <circle style="fill:black;stroke:none" cx="2.5" cy="0.5" r="0.05" />
-        <circle style="fill:black;stroke:none" cx="3.5" cy="0.5" r="0.05" />
-        <circle style="fill:black;stroke:none" cx="4.5" cy="0.5" r="0.05" />
-        <circle style="fill:black;stroke:none" cx="5.5" cy="0.5" r="0.05" />
-        <circle style="fill:black;stroke:none" cx="6.5" cy="0.5" r="0.05" />
-        <circle style="fill:black;stroke:none" cx="7.5" cy="0.5" r="0.05" />
-        <circle style="fill:black;stroke:none" cx="0.5" cy="1.5" r="0.05" />
-        <circle style="fill:black;stroke:none" cx="1.5" cy="1.5" r="0.05" />
-        <circle style="fill:black;stroke:none" cx="2.5" cy="1.5" r="0.05" />
-        <circle style="fill:black;stroke:none" cx="3.5" cy="1.5" r="0.05" />
-        <circle style="fill:black;stroke:none" cx="4.5" cy="1.5" r="0.05" />
-        <circle style="fill:black;stroke:none" cx="5.5" cy="1.5" r="0.05" />
-        <circle style="fill:black;stroke:none" cx="6.5" cy="1.5" r="0.05" />
-        <circle style="fill:black;stroke:none" cx="7.5" cy="1.5" r="0.05" />
-        <circle style="fill:black;stroke:none" cx="0.5" cy="2.5" r="0.05" />
-        <circle style="fill:black;stroke:none" cx="1.5" cy="2.5" r="0.05" />
-        <circle style="fill:black;stroke:none" cx="2.5" cy="2.5" r="0.05" />
-        <circle style="fill:black;stroke:none" cx="3.5" cy="2.5" r="0.05" />
-        <circle style="fill:black;stroke:none" cx="4.5" cy="2.5" r="0.05" />
-        <circle style="fill:black;stroke:none" cx="5.5" cy="2.5" r="0.05" />
-        <circle style="fill:black;stroke:none" cx="6.5" cy="2.5" r="0.05" />
-        <circle style="fill:black;stroke:none" cx="7.5" cy="2.5" r="0.05" />
-        <circle style="fill:black;stroke:none" cx="0.5" cy="3.5" r="0.05" />
-        <circle style="fill:black;stroke:none" cx="1.5" cy="3.5" r="0.05" />
-        <circle style="fill:black;stroke:none" cx="2.5" cy="3.5" r="0.05" />
-        <circle style="fill:black;stroke:none" cx="3.5" cy="3.5" r="0.05" />
-        <circle style="fill:black;stroke:none" cx="4.5" cy="3.5" r="0.05" />
-        <circle style="fill:black;stroke:none" cx="5.5" cy="3.5" r="0.05" />
-        <circle style="fill:black;stroke:none" cx="6.5" cy="3.5" r="0.05" />
-        <circle style="fill:black;stroke:none" cx="7.5" cy="3.5" r="0.05" />
-        <g transform="translate(0.5 0.0)">
-          <path style="fill:none;stroke:red;stroke-width:0.02;stroke-linecap:square;stroke-dasharray:0.1,0.1;stroke-dashoffset:0.05"
-                d="M-0.5,0 h8 m-8,1 h8 m-8,1 h8 m-8,1 h8 m-8,1 h8 m-8,-4 v4 m2,-4 v4 m2,-4 v4 m2,-4 v4 m2,-4 v4" />
-          <path style="fill:none;stroke:red;stroke-width:0.02;stroke-linecap:square"
-                d="M 0.5,0.5 m-0.08,-0.08 l0.16,0.16 m-0.16,0 l0.16,-0.16 m-0.08,0.08" />
-          <path style="fill:none;stroke:red;stroke-width:0.02;stroke-linecap:square"
-                d="M 2.5,0.5 m-0.08,-0.08 l0.16,0.16 m-0.16,0 l0.16,-0.16 m-0.08,0.08" />
-          <path style="fill:none;stroke:red;stroke-width:0.02;stroke-linecap:square"
-                d="M 4.5,0.5 m-0.08,-0.08 l0.16,0.16 m-0.16,0 l0.16,-0.16 m-0.08,0.08" />
-          <path style="fill:none;stroke:red;stroke-width:0.02;stroke-linecap:square"
-                d="M 6.5,0.5 m-0.08,-0.08 l0.16,0.16 m-0.16,0 l0.16,-0.16 m-0.08,0.08" />
-          <path style="fill:none;stroke:red;stroke-width:0.02;stroke-linecap:square"
-                d="M 0.5,1.5 m-0.08,-0.08 l0.16,0.16 m-0.16,0 l0.16,-0.16 m-0.08,0.08" />
-          <path style="fill:none;stroke:red;stroke-width:0.02;stroke-linecap:square"
-                d="M 2.5,1.5 m-0.08,-0.08 l0.16,0.16 m-0.16,0 l0.16,-0.16 m-0.08,0.08" />
-          <path style="fill:none;stroke:red;stroke-width:0.02;stroke-linecap:square"
-                d="M 4.5,1.5 m-0.08,-0.08 l0.16,0.16 m-0.16,0 l0.16,-0.16 m-0.08,0.08" />
-          <path style="fill:none;stroke:red;stroke-width:0.02;stroke-linecap:square"
-                d="M 6.5,1.5 m-0.08,-0.08 l0.16,0.16 m-0.16,0 l0.16,-0.16 m-0.08,0.08" />
-          <path style="fill:none;stroke:red;stroke-width:0.02;stroke-linecap:square"
-                d="M 0.5,2.5 m-0.08,-0.08 l0.16,0.16 m-0.16,0 l0.16,-0.16 m-0.08,0.08" />
-          <path style="fill:none;stroke:red;stroke-width:0.02;stroke-linecap:square"
-                d="M 2.5,2.5 m-0.08,-0.08 l0.16,0.16 m-0.16,0 l0.16,-0.16 m-0.08,0.08" />
-          <path style="fill:none;stroke:red;stroke-width:0.02;stroke-linecap:square"
-                d="M 4.5,2.5 m-0.08,-0.08 l0.16,0.16 m-0.16,0 l0.16,-0.16 m-0.08,0.08" />
-          <path style="fill:none;stroke:red;stroke-width:0.02;stroke-linecap:square"
-                d="M 6.5,2.5 m-0.08,-0.08 l0.16,0.16 m-0.16,0 l0.16,-0.16 m-0.08,0.08" />
-          <path style="fill:none;stroke:red;stroke-width:0.02;stroke-linecap:square"
-                d="M 0.5,3.5 m-0.08,-0.08 l0.16,0.16 m-0.16,0 l0.16,-0.16 m-0.08,0.08" />
-          <path style="fill:none;stroke:red;stroke-width:0.02;stroke-linecap:square"
-                d="M 2.5,3.5 m-0.08,-0.08 l0.16,0.16 m-0.16,0 l0.16,-0.16 m-0.08,0.08" />
-          <path style="fill:none;stroke:red;stroke-width:0.02;stroke-linecap:square"
-                d="M 4.5,3.5 m-0.08,-0.08 l0.16,0.16 m-0.16,0 l0.16,-0.16 m-0.08,0.08" />
-          <path style="fill:none;stroke:red;stroke-width:0.02;stroke-linecap:square"
-                d="M 6.5,3.5 m-0.08,-0.08 l0.16,0.16 m-0.16,0 l0.16,-0.16 m-0.08,0.08" />
-        </g>
-      </g>
-      <g transform="translate(-23.812502,2.2e-6)">
-        <text
-           y="45.537884"
-           x="54.556301"
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"><tspan
-             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332"
-             y="45.537884"
-             x="54.556301">0.0</tspan></text>
-        <text
-           y="45.538918"
-           x="213.32181"
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"><tspan
-             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332"
-             y="45.538918"
-             x="213.32181">8.0</tspan></text>
-        <path
-           d="m 63.312355,43.999992 h 71.437505 m 5.29167,2e-6 h 71.4375"
-           style="fill:none;stroke:#000000;stroke-width:0.26458335px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow1Lend)" />
-        <text
-           y="45.122406"
-           x="137.32748"
-           style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"><tspan
-             style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458332"
-             y="45.122406"
-             x="137.32748">u</tspan></text>
-      </g>
-      <g transform="translate(-23.812505,7.9375005)">
-        <text
-           y="45.537884"
-           x="54.556301"
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
-           xml:space="preserve"><tspan
-             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332"
-             y="45.537884"
-             x="54.556301">0.0</tspan></text>
-        <text
-           y="45.538918"
-           x="213.32181"
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
-           xml:space="preserve"><tspan
-             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332"
-             y="45.538918"
-             x="213.32181">1.0</tspan></text>
-        <path
-           d="m 63.312355,43.999992 h 71.437505 m 5.29167,2e-6 h 71.4375"
-           style="fill:none;stroke:#000000;stroke-width:0.26458335px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow1Lend-0)" />
-        <text
-           y="45.122406"
-           x="137.32748"
-           style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"><tspan
-             style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458332"
-             y="45.122406"
-             x="137.32748">s</tspan></text>
-      </g>
-      <g transform="translate(-23.812501,2.6458339)">
-        <text
-           y="-47.066288"
-           x="44.034977"
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"><tspan
-             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332"
-             y="-47.066288"
-             x="44.034977">4.0</tspan></text>
-        <text
-           y="32.308716"
-           x="43.972965"
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"><tspan
-             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332"
-             y="32.308716"
-             x="43.972965">0.0</tspan></text>
-        <path
-           style="fill:none;stroke:#000000;stroke-width:0.26458335px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker1483)"
-           d="M 47.437354,28.124992 V -6.2708429 m 10e-7,-5.2916661 v -34.395835" />
-        <text
-           y="-7.8045983"
-           x="46.93816"
-           style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"><tspan
-             style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458332"
-             y="-7.8045983"
-             x="46.93816">v</tspan></text>
-      </g>
-      <g transform="translate(-34.395835,2.6458339)">
-        <g>
-          <text
-             y="-47.066288"
-             x="44.034977"
-             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"><tspan
-               style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332"
-               y="-47.066288"
-               x="44.034977">1.0</tspan></text>
-          <text
-             y="32.308716"
-             x="43.972965"
-             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
-             xml:space="preserve"><tspan
-               style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332"
-               y="32.308716"
-               x="43.972965">0.0</tspan></text>
-          <path
-             style="fill:none;stroke:#000000;stroke-width:0.26458335px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker1483-7)"
-             d="M 47.437354,28.124992 V -6.2708429 m 10e-7,-5.2916661 v -34.395835" />
-          <text
-             y="-7.8045983"
-             x="46.93816"
-             style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
-             xml:space="preserve"><tspan
-               style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458332"
-               y="-7.8045983"
-               x="46.93816">t</tspan></text>
-        </g>
-      </g>
-    </g>
-    <g transform="translate(-7.6312708e-7,-3.9209711e-6)">
-      <g transform="translate(10.26041625 -1)">
-        <text
-           y="-16.854183"
-           x="46.114437"
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:0.26458332"><tspan
-             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;fill-opacity:1;stroke-width:0.26458332"
-             y="-16.854183"
-             x="46.114437"><tspan
-               style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;stroke-width:0.26458332"> 0,2</tspan></tspan></text>
-        <text
-           y="-16.854183"
-           x="83.156105"
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:0.26458332"><tspan
-             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;fill-opacity:1;stroke-width:0.26458332"
-             y="-16.854183"
-             x="83.156105"><tspan
-               style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;stroke-width:0.26458332"> 1,2</tspan></tspan></text>
-        <text
-           y="-16.854183"
-           x="120.19777"
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:0.26458332"><tspan
-             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;fill-opacity:1;stroke-width:0.26458332"
-             y="-16.854183"
-             x="120.19777"><tspan
-               style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;stroke-width:0.26458332"> 2,2</tspan></tspan></text>
-        <text
-           y="-16.854183"
-           x="157.23944"
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:0.26458332"><tspan
-             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;fill-opacity:1;stroke-width:0.26458332"
-             y="-16.854183"
-             x="157.23944"><tspan
-               style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;stroke-width:0.26458332"> 3,2</tspan></tspan></text>
-        <text
-           y="1.6666511"
-           x="46.114433"
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:0.26458332"><tspan
-             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;fill-opacity:1;stroke-width:0.26458332"
-             y="1.6666511"
-             x="46.114433"><tspan
-               style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;stroke-width:0.26458332"> 0,1</tspan></tspan></text>
-        <text
-           y="1.6666511"
-           x="83.15609"
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:0.26458332"><tspan
-             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;fill-opacity:1;stroke-width:0.26458332"
-             y="1.6666511"
-             x="83.15609"><tspan
-               style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;stroke-width:0.26458332"> 1,1</tspan></tspan></text>
-        <text
-           y="1.6666511"
-           x="120.19776"
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:0.26458332"><tspan
-             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;fill-opacity:1;stroke-width:0.26458332"
-             y="1.6666511"
-             x="120.19776"><tspan
-               style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;stroke-width:0.26458332"> 2,1</tspan></tspan></text>
-        <text
-           y="1.6666511"
-           x="157.23943"
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:0.26458332"><tspan
-             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;fill-opacity:1;stroke-width:0.26458332"
-             y="1.6666511"
-             x="157.23943"><tspan
-               style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;stroke-width:0.26458332"> 3,1</tspan></tspan></text>
-        <text
-           y="20.187485"
-           x="46.114437"
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:0.26458332"><tspan
-             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;fill-opacity:1;stroke-width:0.26458332"
-             y="20.187485"
-             x="46.114437"><tspan
-               style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;stroke-width:0.26458332"> 0,0</tspan></tspan></text>
-        <text
-           y="20.187485"
-           x="83.156097"
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:0.26458332"><tspan
-             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;fill-opacity:1;stroke-width:0.26458332"
-             y="20.187485"
-             x="83.156097"><tspan
-               style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;stroke-width:0.26458332"> 1,0</tspan></tspan></text>
-        <text
-           y="20.187485"
-           x="120.19777"
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:0.26458332"><tspan
-             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;fill-opacity:1;stroke-width:0.26458332"
-             y="20.187485"
-             x="120.19777"><tspan
-               style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;stroke-width:0.26458332"> 2,0</tspan></tspan></text>
-        <text
-           y="20.187485"
-           x="157.23943"
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:0.26458332"><tspan
-             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;fill-opacity:1;stroke-width:0.26458332"
-             y="20.187485"
-             x="157.23943"><tspan
-               style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;stroke-width:0.26458332"> 3,0</tspan></tspan></text>
-        <text
-           y="-35.375011"
-           x="46.114437"
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:0.26458332"><tspan
-             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;fill-opacity:1;stroke-width:0.26458332"
-             y="-35.375011"
-             x="46.114437"><tspan
-               style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;stroke-width:0.26458332"> 0,3</tspan></tspan></text>
-        <text
-           y="-35.375011"
-           x="83.156105"
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:0.26458332"><tspan
-             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;fill-opacity:1;stroke-width:0.26458332"
-             y="-35.375011"
-             x="83.156105"><tspan
-               style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;stroke-width:0.26458332"> 1,3</tspan></tspan></text>
-        <text
-           y="-35.375011"
-           x="120.19777"
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:0.26458332"><tspan
-             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;fill-opacity:1;stroke-width:0.26458332"
-             y="-35.375011"
-             x="120.19777"><tspan
-               style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;stroke-width:0.26458332"> 2,3</tspan></tspan></text>
-        <text
-           y="-35.375011"
-           x="157.23944"
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:0.26458332"><tspan
-             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;fill-opacity:1;stroke-width:0.26458332"
-             y="-35.375011"
-             x="157.23944"><tspan               
-               style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;stroke-width:0.26458332"> 3,3</tspan></tspan></text>
-      </g>
-    </g>
-  </g>
-</svg>
diff --git a/registry/vulkan/images/commandbuffer_lifecycle.svg b/registry/vulkan/images/commandbuffer_lifecycle.svg
deleted file mode 100644
index be6623f..0000000
--- a/registry/vulkan/images/commandbuffer_lifecycle.svg
+++ /dev/null
@@ -1,501 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Created with Inkscape (http://www.inkscape.org/) -->
-
-<svg
-   xmlns:dc="http://purl.org/dc/elements/1.1/"
-   xmlns:cc="http://creativecommons.org/ns#"
-   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
-   xmlns:svg="http://www.w3.org/2000/svg"
-   xmlns="http://www.w3.org/2000/svg"
-   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
-   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
-   width="224.63503mm"
-   height="92.592918mm"
-   viewBox="0 0 224.63503 92.592918"
-   version="1.1"
-   id="svg8"
-   sodipodi:docname="commandbuffer_lifecycle.svg"
-   inkscape:version="0.92.4 (5da689c313, 2019-01-14)">
-  <defs
-     id="defs2">
-    <marker
-       inkscape:stockid="Arrow1Mend"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="marker5741"
-       style="overflow:visible"
-       inkscape:isstock="true">
-      <path
-         id="path5739"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         transform="matrix(-0.4,0,0,-0.4,-4,0)"
-         inkscape:connector-curvature="0" />
-    </marker>
-    <marker
-       inkscape:stockid="Arrow1Mend"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="marker5571"
-       style="overflow:visible"
-       inkscape:isstock="true">
-      <path
-         id="path5569"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         transform="matrix(-0.4,0,0,-0.4,-4,0)"
-         inkscape:connector-curvature="0" />
-    </marker>
-    <marker
-       inkscape:isstock="true"
-       style="overflow:visible"
-       id="marker3457"
-       refX="0"
-       refY="0"
-       orient="auto"
-       inkscape:stockid="Arrow1Mend"
-       inkscape:collect="always">
-      <path
-         transform="matrix(-0.4,0,0,-0.4,-4,0)"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         id="path3455"
-         inkscape:connector-curvature="0" />
-    </marker>
-    <marker
-       inkscape:stockid="Arrow1Mend"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="marker3373"
-       style="overflow:visible"
-       inkscape:isstock="true"
-       inkscape:collect="always">
-      <path
-         id="path3371"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         transform="matrix(-0.4,0,0,-0.4,-4,0)"
-         inkscape:connector-curvature="0" />
-    </marker>
-    <marker
-       inkscape:stockid="Arrow1Mstart"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="marker1404"
-       style="overflow:visible"
-       inkscape:isstock="true">
-      <path
-         id="path1402"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         transform="matrix(0.4,0,0,0.4,4,0)"
-         inkscape:connector-curvature="0" />
-    </marker>
-    <marker
-       inkscape:stockid="Arrow1Mstart"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="Arrow1Mstart"
-       style="overflow:visible"
-       inkscape:isstock="true">
-      <path
-         id="path968"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         transform="matrix(0.4,0,0,0.4,4,0)"
-         inkscape:connector-curvature="0" />
-    </marker>
-    <marker
-       inkscape:isstock="true"
-       style="overflow:visible"
-       id="marker1320"
-       refX="0"
-       refY="0"
-       orient="auto"
-       inkscape:stockid="Arrow1Mend"
-       inkscape:collect="always">
-      <path
-         transform="matrix(-0.4,0,0,-0.4,-4,0)"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         id="path1318"
-         inkscape:connector-curvature="0" />
-    </marker>
-    <marker
-       inkscape:stockid="Arrow1Mend"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="marker1274"
-       style="overflow:visible"
-       inkscape:isstock="true"
-       inkscape:collect="always">
-      <path
-         id="path1272"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         transform="matrix(-0.4,0,0,-0.4,-4,0)"
-         inkscape:connector-curvature="0" />
-    </marker>
-    <marker
-       inkscape:stockid="Arrow1Mend"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="marker1246"
-       style="overflow:visible"
-       inkscape:isstock="true">
-      <path
-         id="path1244"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         transform="matrix(-0.4,0,0,-0.4,-4,0)"
-         inkscape:connector-curvature="0" />
-    </marker>
-    <marker
-       inkscape:stockid="Arrow1Mend"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="Arrow1Mend"
-       style="overflow:visible"
-       inkscape:isstock="true">
-      <path
-         id="path971"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         transform="matrix(-0.4,0,0,-0.4,-4,0)"
-         inkscape:connector-curvature="0" />
-    </marker>
-    <marker
-       inkscape:stockid="Arrow1Mend"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="marker1274-3"
-       style="overflow:visible"
-       inkscape:isstock="true"
-       inkscape:collect="always">
-      <path
-         inkscape:connector-curvature="0"
-         id="path1272-3"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         transform="matrix(-0.4,0,0,-0.4,-4,0)" />
-    </marker>
-  </defs>
-  <sodipodi:namedview
-     id="base"
-     pagecolor="#ffffff"
-     bordercolor="#666666"
-     borderopacity="1.0"
-     inkscape:pageopacity="0.0"
-     inkscape:pageshadow="2"
-     inkscape:zoom="1.4142136"
-     inkscape:cx="405.79858"
-     inkscape:cy="139.11401"
-     inkscape:document-units="mm"
-     inkscape:current-layer="layer1"
-     showgrid="true"
-     inkscape:snap-text-baseline="true"
-     inkscape:snap-object-midpoints="true"
-     inkscape:measure-start="245,915"
-     inkscape:measure-end="570,915"
-     showguides="false"
-     fit-margin-left="1"
-     fit-margin-top="1"
-     fit-margin-right="1"
-     fit-margin-bottom="1"
-     inkscape:window-width="1920"
-     inkscape:window-height="1001"
-     inkscape:window-x="-9"
-     inkscape:window-y="-9"
-     inkscape:window-maximized="0">
-    <inkscape:grid
-       type="xygrid"
-       id="grid907"
-       originx="3.8383438"
-       originy="-212.72305" />
-  </sodipodi:namedview>
-  <metadata
-     id="metadata5">
-    <rdf:RDF>
-      <cc:Work
-         rdf:about="">
-        <dc:format>image/svg+xml</dc:format>
-        <dc:type
-           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
-        <dc:title />
-      </cc:Work>
-    </rdf:RDF>
-  </metadata>
-  <g
-     inkscape:label="Layer 1"
-     inkscape:groupmode="layer"
-     id="layer1"
-     transform="translate(3.8383438,8.3159637)">
-    <rect
-       style="fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.38502529;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
-       id="rect815-1-4-3-6-1-68-2-5"
-       width="63.499996"
-       height="7.9375005"
-       x="76.729164"
-       y="7.8066287" />
-    <text
-       id="text823-4-2-9-4-7-9-2"
-       y="13.361835"
-       x="108.38303"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.39687496"
-       xml:space="preserve"><tspan
-         id="tspan825-6-0-2-5-6-26-4"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.39687496"
-         y="13.361835"
-         x="108.38303"
-         sodipodi:role="line">Initial</tspan></text>
-    <rect
-       style="fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.38502529;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
-       id="rect815-1-4-3-6-1-68-2-5-2"
-       width="63.499996"
-       height="7.9375005"
-       x="156.10417"
-       y="37.57225" />
-    <text
-       id="text823-4-2-9-4-7-9-2-0"
-       y="43.12746"
-       x="187.75806"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.39687496"
-       xml:space="preserve"><tspan
-         id="tspan825-6-0-2-5-6-26-4-2"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.39687496"
-         y="43.12746"
-         x="187.75806"
-         sodipodi:role="line">Recording</tspan></text>
-    <rect
-       style="fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.38502529;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
-       id="rect815-1-4-3-6-1-68-2-5-7"
-       width="63.499996"
-       height="7.9375005"
-       x="23.151045"
-       y="73.291" />
-    <text
-       id="text823-4-2-9-4-7-9-2-7"
-       y="78.846207"
-       x="54.804928"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.39687496"
-       xml:space="preserve"><tspan
-         id="tspan825-6-0-2-5-6-26-4-0"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.39687496"
-         y="78.846207"
-         x="54.804928"
-         sodipodi:role="line">Pending</tspan></text>
-    <rect
-       style="fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.38502529;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
-       id="rect815-1-4-3-6-1-68-2-5-1"
-       width="63.499996"
-       height="7.9375005"
-       x="130.3073"
-       y="73.291" />
-    <text
-       id="text823-4-2-9-4-7-9-2-9"
-       y="78.846207"
-       x="161.96117"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.39687496"
-       xml:space="preserve"><tspan
-         id="tspan825-6-0-2-5-6-26-4-9"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.39687496"
-         y="78.846207"
-         x="161.96117"
-         sodipodi:role="line">Executable</tspan></text>
-    <rect
-       style="fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.38502529;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
-       id="rect815-1-4-3-6-1-68-2-5-9"
-       width="63.499996"
-       height="7.9375005"
-       x="-2.6458311"
-       y="37.57225" />
-    <text
-       id="text823-4-2-9-4-7-9-2-6"
-       y="43.12746"
-       x="29.008045"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.39687496"
-       xml:space="preserve"><tspan
-         id="tspan825-6-0-2-5-6-26-4-93"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.39687496"
-         y="43.12746"
-         x="29.008045"
-         sodipodi:role="line">Invalid</tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.39687496"
-       x="108.47915"
-       y="-4.0996227"
-       id="text905"><tspan
-         sodipodi:role="line"
-         id="tspan903"
-         x="108.47915"
-         y="-4.0996227"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.39687496">Allocate</tspan></text>
-    <path
-       style="fill:none;stroke:#000000;stroke-width:0.39749998;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow1Mend)"
-       d="m 140.22916,11.775377 c 17.40186,4.563534 31.44429,11.931433 37.70313,25.796877"
-       id="path911"
-       inkscape:connector-curvature="0"
-       sodipodi:nodetypes="cc" />
-    <path
-       style="fill:none;stroke:#000000;stroke-width:0.39687497;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1.58749987,1.58749987;stroke-dashoffset:0;stroke-opacity:1;marker-start:url(#marker1404)"
-       d="M 76.72917,11.775375 C 59.32731,16.338909 45.28488,23.706809 39.02604,37.572252"
-       id="path911-9"
-       inkscape:connector-curvature="0"
-       sodipodi:nodetypes="cc" />
-    <path
-       style="fill:none;stroke:#000000;stroke-width:0.39687496px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker1246)"
-       d="m 177.93228,45.509753 c -2.5839,12.275404 -13.84985,21.278544 -31.74999,27.781249"
-       id="path928"
-       inkscape:connector-curvature="0"
-       sodipodi:nodetypes="cc" />
-    <path
-       style="fill:none;stroke:#000000;stroke-width:0.39687497;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1.58749987,1.58749987;stroke-dashoffset:0;stroke-opacity:1;marker-start:url(#Arrow1Mstart)"
-       d="m 39.02604,45.509753 c 2.5839,12.275404 13.849846,21.278544 31.749991,27.781249"
-       id="path928-9"
-       inkscape:connector-curvature="0"
-       sodipodi:nodetypes="cc" />
-    <path
-       style="fill:none;stroke:#000000;stroke-width:0.42705935px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker1274)"
-       d="m 130.30729,77.259753 c -14.77333,2.532909 -29.48724,2.761692 -43.65625,0"
-       id="path945"
-       inkscape:connector-curvature="0"
-       sodipodi:nodetypes="cc" />
-    <path
-       style="fill:none;stroke:#000000;stroke-width:0.42705935px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker1274-3)"
-       d="m 86.651035,75.275378 c 14.773335,-2.532915 29.487245,-2.761695 43.656255,0"
-       id="path945-6"
-       inkscape:connector-curvature="0"
-       sodipodi:nodetypes="cc" />
-    <path
-       style="fill:none;stroke:#000000;stroke-width:0.39687497;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1.58749987,1.58749987;stroke-dashoffset:0;stroke-opacity:1;marker-end:url(#marker1320)"
-       d="m 156.10417,39.556628 c -33.57471,-4.289783 -37.71018,-13.456659 -47.625,-23.8125"
-       id="path3349"
-       inkscape:connector-curvature="0"
-       sodipodi:nodetypes="cc" />
-    <path
-       style="fill:none;stroke:#000000;stroke-width:0.39687497;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1.58749987,1.58749987;stroke-dashoffset:0;stroke-opacity:1;marker-end:url(#marker3373)"
-       d="M 144.19792,73.291002 C 129.70275,39.163626 116.89927,24.895373 108.47917,15.744128"
-       id="path3363"
-       inkscape:connector-curvature="0"
-       sodipodi:nodetypes="cc" />
-    <path
-       style="fill:none;stroke:#000000;stroke-width:0.39687496px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker3457)"
-       d="M 108.47917,-2.1152472 V 7.8066273"
-       id="path3447"
-       inkscape:connector-curvature="0" />
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.39687496"
-       x="164.04166"
-       y="19.712879"
-       id="text905-5"><tspan
-         sodipodi:role="line"
-         id="tspan903-4"
-         x="164.04166"
-         y="19.712879"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.39687496">Begin</tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.39687496"
-       x="171.97917"
-       y="63.369129"
-       id="text905-5-4"><tspan
-         sodipodi:role="line"
-         id="tspan903-4-1"
-         x="171.97917"
-         y="63.369129"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.39687496">End</tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.39687496"
-       x="108.47915"
-       y="83.212875"
-       id="text905-5-4-3"><tspan
-         sodipodi:role="line"
-         id="tspan903-4-1-1"
-         x="108.47915"
-         y="83.212875"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.39687496">Submission</tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.39687496"
-       x="107.73502"
-       y="71.306633"
-       id="text905-5-4-3-1"><tspan
-         sodipodi:role="line"
-         id="tspan903-4-1-1-9"
-         x="108.47916"
-         y="71.306633"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.39687496">Completion </tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:end;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:end;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.39687496;stroke-miterlimit:4;stroke-dasharray:none"
-       x="44.979168"
-       y="61.38475"
-       id="text4726"><tspan
-         sodipodi:role="line"
-         x="44.979168"
-         y="61.38475"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:end;writing-mode:lr-tb;text-anchor:end;stroke-width:0.39687496;stroke-miterlimit:4;stroke-dasharray:none"
-         id="tspan4732">Completion with</tspan><tspan
-         sodipodi:role="line"
-         x="44.979168"
-         y="66.676414"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:end;writing-mode:lr-tb;text-anchor:end;stroke-width:0.39687496;stroke-miterlimit:4;stroke-dasharray:none"
-         id="tspan11757">One Time Submit</tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:end;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:end;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.39687496"
-       x="52.916664"
-       y="19.712879"
-       id="text905-6"><tspan
-         sodipodi:role="line"
-         x="52.916664"
-         y="19.712879"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:end;writing-mode:lr-tb;text-anchor:end;stroke-width:0.39687496"
-         id="tspan3709">Reset</tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.39687496"
-       x="116.41668"
-       y="21.697252"
-       id="text905-6-3"><tspan
-         sodipodi:role="line"
-         x="116.41668"
-         y="21.697252"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.39687496"
-         id="tspan3709-2">Reset</tspan></text>
-    <path
-       style="fill:none;stroke:#000000;stroke-width:0.396875;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1.5875,1.5875;stroke-dashoffset:0;stroke-opacity:1;marker-end:url(#marker5571)"
-       d="M 156.10416,41.541003 H 60.854164"
-       id="path5557"
-       inkscape:connector-curvature="0" />
-    <path
-       style="fill:none;stroke:#000000;stroke-width:0.39687499;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1.5875, 1.5875;stroke-dashoffset:0;stroke-opacity:1;marker-end:url(#marker5741)"
-       d="M 140.22916,73.291002 C 126.33855,47.494128 119.0625,41.677088 60.854164,41.541003"
-       id="path5559"
-       inkscape:connector-curvature="0"
-       sodipodi:nodetypes="cc" />
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.39687496"
-       x="74.744797"
-       y="47.494129"
-       id="text905-6-3-4"><tspan
-         sodipodi:role="line"
-         x="74.744797"
-         y="47.494129"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.39687496"
-         id="tspan3709-2-2">Invalidate</tspan></text>
-  </g>
-</svg>
diff --git a/registry/vulkan/images/fragment_mask.svg b/registry/vulkan/images/fragment_mask.svg
deleted file mode 100644
index 3141035..0000000
--- a/registry/vulkan/images/fragment_mask.svg
+++ /dev/null
@@ -1,422 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Created with Inkscape (http://www.inkscape.org/) -->
-
-<svg
-   xmlns:dc="http://purl.org/dc/elements/1.1/"
-   xmlns:cc="http://creativecommons.org/ns#"
-   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
-   xmlns:svg="http://www.w3.org/2000/svg"
-   xmlns="http://www.w3.org/2000/svg"
-   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
-   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
-   width="113.50448mm"
-   height="43.381195mm"
-   viewBox="0 0 113.50448 43.381195"
-   version="1.1"
-   id="svg2745"
-   inkscape:version="0.92.2 (5c3e80d, 2017-08-06)"
-   sodipodi:docname="fragment_mask.svg">
-  <defs
-     id="defs2739" />
-  <sodipodi:namedview
-     id="base"
-     pagecolor="#ffffff"
-     bordercolor="#666666"
-     borderopacity="1.0"
-     inkscape:pageopacity="0.0"
-     inkscape:pageshadow="2"
-     inkscape:zoom="1.979899"
-     inkscape:cx="268.47568"
-     inkscape:cy="27.580632"
-     inkscape:document-units="mm"
-     inkscape:current-layer="layer1"
-     showgrid="true"
-     inkscape:snap-text-baseline="true"
-     inkscape:snap-object-midpoints="true"
-     inkscape:measure-start="465,840"
-     inkscape:measure-end="525,730"
-     fit-margin-left="1"
-     fit-margin-top="1"
-     fit-margin-right="1"
-     fit-margin-bottom="1"
-     inkscape:window-width="1680"
-     inkscape:window-height="987"
-     inkscape:window-x="1672"
-     inkscape:window-y="-8"
-     inkscape:window-maximized="0">
-    <inkscape:grid
-       type="xygrid"
-       id="grid3290"
-       originx="-75.481983"
-       originy="-197.30522" />
-  </sodipodi:namedview>
-  <metadata
-     id="metadata2742">
-    <rdf:RDF>
-      <cc:Work
-         rdf:about="">
-        <dc:format>image/svg+xml</dc:format>
-        <dc:type
-           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
-        <dc:title />
-      </cc:Work>
-    </rdf:RDF>
-  </metadata>
-  <g
-     inkscape:label="Layer 1"
-     inkscape:groupmode="layer"
-     id="layer1"
-     transform="translate(-75.481984,-56.313591)">
-    <rect
-       style="fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:0.26458332;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
-       id="rect4980"
-       width="15.875"
-       height="6.614583"
-       x="171.97917"
-       y="72.104164" />
-    <rect
-       style="fill:#808080;fill-opacity:1;stroke:none;stroke-width:0.26458332;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
-       id="rect4982"
-       width="15.875"
-       height="6.614583"
-       x="171.97917"
-       y="78.71875" />
-    <path
-       style="fill:#ff0000;stroke:#000000;stroke-width:0.26458332;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       d="M 108.47917,66.8125 C 87.312504,98.562495 87.312504,98.562495 87.312504,98.562495 h 42.333336 z"
-       id="path4959"
-       inkscape:connector-curvature="0" />
-    <path
-       style="fill:#808080;stroke:#000000;stroke-width:0.26458332;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       d="M 97.895833,57.552083 C 76.729173,89.302078 76.729173,89.302078 76.729173,89.302078 H 119.06251 Z"
-       id="path4959-2"
-       inkscape:connector-curvature="0" />
-    <g
-       transform="translate(-68.791667,6.6145833)"
-       id="g4020-9"
-       style="stroke-width:0.26458332;stroke-miterlimit:4;stroke-dasharray:none">
-      <circle
-         r="0.52778977"
-         cy="70.78125"
-         cx="178.59375"
-         id="path4517-78-7-8-8-9-0-5"
-         style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
-      <circle
-         r="0.52778977"
-         cy="76.072914"
-         cx="189.17708"
-         id="path4517-78-7-8-8-9-0-3-0"
-         style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
-      <circle
-         r="0.52778977"
-         cy="81.364586"
-         cx="173.30208"
-         id="path4517-78-7-8-8-9-0-4-3"
-         style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
-      <circle
-         r="0.52778977"
-         cy="86.65625"
-         cx="183.88542"
-         id="path4517-78-7-8-8-9-0-7-9"
-         style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
-    </g>
-    <rect
-       style="fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.26458332;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
-       id="rect4722"
-       width="21.148586"
-       height="40.992329"
-       x="134.9375"
-       y="57.552082"
-       ry="1.2710052e-006" />
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332;stroke-miterlimit:4;stroke-dasharray:none"
-       x="145.52083"
-       y="62.84375"
-       id="text4726"><tspan
-         sodipodi:role="line"
-         x="145.52083"
-         y="62.84375"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458332;stroke-miterlimit:4;stroke-dasharray:none"
-         id="tspan4728">Color</tspan><tspan
-         sodipodi:role="line"
-         x="145.52083"
-         y="68.135414"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458332;stroke-miterlimit:4;stroke-dasharray:none"
-         id="tspan4732">Samples</tspan></text>
-    <path
-       style="fill:none;stroke:#000000;stroke-width:0.26458332;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       d="m 134.9375,72.104167 h 21.16666"
-       id="path4734"
-       inkscape:connector-curvature="0" />
-    <path
-       style="fill:none;stroke:#000000;stroke-width:0.26458332;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       d="M 145.52083,72.104167 V 98.5625"
-       id="path4736"
-       inkscape:connector-curvature="0"
-       sodipodi:nodetypes="cc" />
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332;stroke-miterlimit:4;stroke-dasharray:none"
-       x="140.22917"
-       y="77.395836"
-       id="text4726-8"><tspan
-         sodipodi:role="line"
-         x="140.22917"
-         y="77.395836"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458332;stroke-miterlimit:4;stroke-dasharray:none"
-         id="tspan4732-2">0</tspan></text>
-    <path
-       style="fill:none;stroke:#000000;stroke-width:0.26458332;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       d="m 134.9375,78.71875 h 21.16666"
-       id="path4801"
-       inkscape:connector-curvature="0" />
-    <path
-       style="fill:none;stroke:#000000;stroke-width:0.26458332;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       d="m 134.9375,85.333333 h 21.16666"
-       id="path4803"
-       inkscape:connector-curvature="0" />
-    <path
-       style="fill:none;stroke:#000000;stroke-width:0.26458332;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       d="m 134.9375,91.947917 h 21.16666"
-       id="path4805"
-       inkscape:connector-curvature="0" />
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332;stroke-miterlimit:4;stroke-dasharray:none"
-       x="150.8125"
-       y="97.239586"
-       id="text4726-8-3"><tspan
-         sodipodi:role="line"
-         x="150.8125"
-         y="97.239586"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458332;stroke-miterlimit:4;stroke-dasharray:none"
-         id="tspan4732-2-5">0</tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332;stroke-miterlimit:4;stroke-dasharray:none"
-       x="140.22917"
-       y="84.010414"
-       id="text4726-8-2"><tspan
-         sodipodi:role="line"
-         x="140.22917"
-         y="84.010414"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458332;stroke-miterlimit:4;stroke-dasharray:none"
-         id="tspan4732-2-3">1</tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332;stroke-miterlimit:4;stroke-dasharray:none"
-       x="150.8125"
-       y="77.395836"
-       id="text4726-8-2-1"><tspan
-         sodipodi:role="line"
-         x="150.8125"
-         y="77.395836"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458332;stroke-miterlimit:4;stroke-dasharray:none"
-         id="tspan4732-2-3-2">1</tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332;stroke-miterlimit:4;stroke-dasharray:none"
-       x="150.8125"
-       y="90.625"
-       id="text4726-8-2-9"><tspan
-         sodipodi:role="line"
-         x="150.8125"
-         y="90.625"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458332;stroke-miterlimit:4;stroke-dasharray:none"
-         id="tspan4732-2-3-3">1</tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332;stroke-miterlimit:4;stroke-dasharray:none"
-       x="140.22917"
-       y="90.625"
-       id="text4726-8-2-0"><tspan
-         sodipodi:role="line"
-         x="140.22917"
-         y="90.625"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458332;stroke-miterlimit:4;stroke-dasharray:none"
-         id="tspan4732-2-3-0">2</tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332;stroke-miterlimit:4;stroke-dasharray:none"
-       x="150.8125"
-       y="84.010414"
-       id="text4726-8-2-0-2"><tspan
-         sodipodi:role="line"
-         x="150.8125"
-         y="84.010414"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458332;stroke-miterlimit:4;stroke-dasharray:none"
-         id="tspan4732-2-3-0-7">2</tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332;stroke-miterlimit:4;stroke-dasharray:none"
-       x="140.22917"
-       y="97.239586"
-       id="text4726-8-2-0-0"><tspan
-         sodipodi:role="line"
-         x="140.22917"
-         y="97.239586"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458332;stroke-miterlimit:4;stroke-dasharray:none"
-         id="tspan4732-2-3-0-6">3</tspan></text>
-    <rect
-       style="fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.26458332;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
-       id="rect4722-1"
-       width="26.458307"
-       height="40.992329"
-       x="161.39584"
-       y="57.552086"
-       ry="1.2710052e-006" />
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332;stroke-miterlimit:4;stroke-dasharray:none"
-       x="174.625"
-       y="62.84375"
-       id="text4726-6"><tspan
-         sodipodi:role="line"
-         x="174.625"
-         y="62.84375"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458332;stroke-miterlimit:4;stroke-dasharray:none"
-         id="tspan4728-4">Color</tspan><tspan
-         sodipodi:role="line"
-         x="174.625"
-         y="68.135414"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458332;stroke-miterlimit:4;stroke-dasharray:none"
-         id="tspan4732-0">Fragments</tspan></text>
-    <path
-       style="fill:none;stroke:#000000;stroke-width:0.26458332;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       d="m 161.39584,72.104167 h 26.45833"
-       id="path4734-1"
-       inkscape:connector-curvature="0" />
-    <path
-       style="fill:none;stroke:#000000;stroke-width:0.26458332;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       d="M 171.97917,72.104167 V 98.5625"
-       id="path4736-8"
-       inkscape:connector-curvature="0"
-       sodipodi:nodetypes="cc" />
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332;stroke-miterlimit:4;stroke-dasharray:none"
-       x="166.68752"
-       y="77.395836"
-       id="text4726-8-0"><tspan
-         sodipodi:role="line"
-         x="166.68752"
-         y="77.395836"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458332;stroke-miterlimit:4;stroke-dasharray:none"
-         id="tspan4732-2-0">0</tspan></text>
-    <path
-       style="fill:none;stroke:#000000;stroke-width:0.26458332;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       d="m 161.39584,78.71875 h 26.45833"
-       id="path4801-3"
-       inkscape:connector-curvature="0" />
-    <path
-       style="fill:none;stroke:#000000;stroke-width:0.26458332;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       d="m 161.39584,85.333333 h 26.45833"
-       id="path4803-2"
-       inkscape:connector-curvature="0" />
-    <path
-       style="fill:none;stroke:#000000;stroke-width:0.26458332;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       d="m 161.39584,91.947916 h 26.45833"
-       id="path4805-4"
-       inkscape:connector-curvature="0" />
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332;stroke-miterlimit:4;stroke-dasharray:none"
-       x="166.68752"
-       y="84.010414"
-       id="text4726-8-2-4"><tspan
-         sodipodi:role="line"
-         x="166.68752"
-         y="84.010414"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458332;stroke-miterlimit:4;stroke-dasharray:none"
-         id="tspan4732-2-3-9">1</tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332;stroke-miterlimit:4;stroke-dasharray:none"
-       x="166.68752"
-       y="90.625"
-       id="text4726-8-2-0-4"><tspan
-         sodipodi:role="line"
-         x="166.68752"
-         y="90.625"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458332;stroke-miterlimit:4;stroke-dasharray:none"
-         id="tspan4732-2-3-0-3">2</tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332;stroke-miterlimit:4;stroke-dasharray:none"
-       x="166.68752"
-       y="97.239594"
-       id="text4726-8-2-0-0-7"><tspan
-         sodipodi:role="line"
-         x="166.68752"
-         y="97.239594"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458332;stroke-miterlimit:4;stroke-dasharray:none"
-         id="tspan4732-2-3-0-6-4">3</tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
-       x="179.91667"
-       y="90.625008"
-       id="text4986"><tspan
-         sodipodi:role="line"
-         id="tspan4984"
-         x="179.91667"
-         y="90.625008"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458332">Unused</tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
-       x="179.91667"
-       y="97.239586"
-       id="text4986-3"><tspan
-         sodipodi:role="line"
-         id="tspan4984-2"
-         x="179.91667"
-         y="97.239586"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458332">Unused</tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.39687496;stroke-miterlimit:4;stroke-dasharray:none"
-       x="101.86459"
-       y="87.979172"
-       id="text4726-8-7"><tspan
-         sodipodi:role="line"
-         x="101.86459"
-         y="87.979172"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.39687496;stroke-miterlimit:4;stroke-dasharray:none"
-         id="tspan4732-2-7">0</tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.39687496;stroke-miterlimit:4;stroke-dasharray:none"
-       x="123.03125"
-       y="82.687508"
-       id="text4726-8-7-5"><tspan
-         sodipodi:role="line"
-         x="123.03125"
-         y="82.687508"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.39687496;stroke-miterlimit:4;stroke-dasharray:none"
-         id="tspan4732-2-7-8">1</tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.39687496;stroke-miterlimit:4;stroke-dasharray:none"
-       x="107.15625"
-       y="77.395836"
-       id="text4726-8-7-1"><tspan
-         sodipodi:role="line"
-         x="107.15625"
-         y="77.395836"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.39687496;stroke-miterlimit:4;stroke-dasharray:none"
-         id="tspan4732-2-7-1">2</tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.39687496;stroke-miterlimit:4;stroke-dasharray:none"
-       x="117.73959"
-       y="93.270836"
-       id="text4726-8-7-4"><tspan
-         sodipodi:role="line"
-         x="117.73959"
-         y="93.270836"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.39687496;stroke-miterlimit:4;stroke-dasharray:none"
-         id="tspan4732-2-7-7">3</tspan></text>
-  </g>
-</svg>
diff --git a/registry/vulkan/images/innerquad.svg b/registry/vulkan/images/innerquad.svg
deleted file mode 100644
index 04a6a19..0000000
--- a/registry/vulkan/images/innerquad.svg
+++ /dev/null
@@ -1,700 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Created with Inkscape (http://www.inkscape.org/) -->
-
-<svg
-   xmlns:dc="http://purl.org/dc/elements/1.1/"
-   xmlns:cc="http://creativecommons.org/ns#"
-   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
-   xmlns:svg="http://www.w3.org/2000/svg"
-   xmlns="http://www.w3.org/2000/svg"
-   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
-   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
-   width="213.40439mm"
-   height="82.336044mm"
-   viewBox="0 0 213.40439 82.336044"
-   version="1.1"
-   id="svg8653"
-   inkscape:version="0.92.2 (5c3e80d, 2017-08-06)"
-   sodipodi:docname="innerquad.svg">
-  <defs
-     id="defs8647" />
-  <sodipodi:namedview
-     id="base"
-     pagecolor="#ffffff"
-     bordercolor="#666666"
-     borderopacity="1.0"
-     inkscape:pageopacity="0.0"
-     inkscape:pageshadow="2"
-     inkscape:zoom="1"
-     inkscape:cx="417.43978"
-     inkscape:cy="37.024591"
-     inkscape:document-units="mm"
-     inkscape:current-layer="layer1"
-     showgrid="true"
-     inkscape:window-width="1680"
-     inkscape:window-height="987"
-     inkscape:window-x="-8"
-     inkscape:window-y="-8"
-     inkscape:window-maximized="0"
-     fit-margin-top="1"
-     fit-margin-left="1"
-     fit-margin-right="1"
-     fit-margin-bottom="1"
-     inkscape:snap-grids="true">
-    <inkscape:grid
-       type="xygrid"
-       id="grid9626"
-       originx="85.351053"
-       originy="-193.77742" />
-  </sodipodi:namedview>
-  <metadata
-     id="metadata8650">
-    <rdf:RDF>
-      <cc:Work
-         rdf:about="">
-        <dc:format>image/svg+xml</dc:format>
-        <dc:type
-           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
-        <dc:title />
-      </cc:Work>
-    </rdf:RDF>
-  </metadata>
-  <g
-     inkscape:label="Layer 1"
-     inkscape:groupmode="layer"
-     id="layer1"
-     transform="translate(85.351047,-20.886535)">
-    <path
-       style="fill:none;stroke:#ff0000;stroke-width:0.39687496;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
-       d="m 42.333339,42.999989 c 0,31.75 0,31.75 0,31.75"
-       id="path2102"
-       inkscape:connector-curvature="0" />
-    <path
-       style="fill:none;stroke:#ff0000;stroke-width:0.39687496;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
-       d="m 58.20834,42.999989 c 0,31.75 0,31.75 0,31.75"
-       id="path2104"
-       inkscape:connector-curvature="0" />
-    <path
-       style="fill:none;stroke:#ff0000;stroke-width:0.39687496;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
-       d="m 74.083339,42.999989 c 0,31.75 0,31.75 0,31.75"
-       id="path2106"
-       inkscape:connector-curvature="0" />
-    <path
-       style="fill:none;stroke:#ff0000;stroke-width:0.39687496;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
-       d="m 89.958339,42.999989 c 0,31.75 0,31.75 0,31.75"
-       id="path2108"
-       inkscape:connector-curvature="0" />
-    <path
-       style="fill:none;stroke:#ff0000;stroke-width:0.39687496;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
-       d="m 26.458339,58.874988 c 79.375001,0 79.375001,0 79.375001,0"
-       id="path2110"
-       inkscape:connector-curvature="0" />
-    <rect
-       id="rect3703-2"
-       width="111.125"
-       height="63.499981"
-       x="10.583337"
-       y="27.124992"
-       style="opacity:0.88500001;fill:none;stroke:#000000;stroke-width:0.39687496;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
-    <path
-       style="fill:none;stroke:#000000;stroke-width:0.39700006;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1.58800024,1.58800024;stroke-dashoffset:0;stroke-opacity:1"
-       d="M 26.458336,27.124995 V 42.99998"
-       id="path9655"
-       inkscape:connector-curvature="0" />
-    <path
-       style="fill:none;stroke:#000000;stroke-width:0.39700006;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1.58800024,1.58800024;stroke-dashoffset:0;stroke-opacity:1"
-       d="M 42.333337,27.124994 V 42.99998"
-       id="path9655-4"
-       inkscape:connector-curvature="0" />
-    <path
-       style="fill:none;stroke:#000000;stroke-width:0.39700006;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1.58800024,1.58800024;stroke-dashoffset:0;stroke-opacity:1"
-       d="M 58.208337,27.124994 V 42.99998"
-       id="path9655-2"
-       inkscape:connector-curvature="0" />
-    <path
-       style="fill:none;stroke:#000000;stroke-width:0.39700006;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1.58800024,1.58800024;stroke-dashoffset:0;stroke-opacity:1"
-       d="m 105.83334,42.99998 h 15.87499"
-       id="path9693"
-       inkscape:connector-curvature="0" />
-    <path
-       style="fill:none;stroke:#000000;stroke-width:0.39700006;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1.58800024,1.58800024;stroke-dashoffset:0;stroke-opacity:1"
-       d="M 10.583337,42.999995 H 26.458335"
-       id="path9693-1"
-       inkscape:connector-curvature="0" />
-    <text
-       xml:space="preserve"
-       style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.39687496"
-       x="5.5028787"
-       y="25.213295"
-       id="text5070-2-2"><tspan
-         sodipodi:role="line"
-         id="tspan5068-0-3"
-         x="5.5028787"
-         y="25.213295"
-         style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke-width:0.39687496">(0,1)</tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.39687496"
-       x="116.35319"
-       y="25.102877"
-       id="text5070-2-2-6"><tspan
-         sodipodi:role="line"
-         id="tspan5068-0-3-4"
-         x="116.35319"
-         y="25.102877"
-         style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke-width:0.39687496">(1,1)</tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.39687496"
-       x="5.313765"
-       y="94.580177"
-       id="text5070-2-2-5"><tspan
-         sodipodi:role="line"
-         id="tspan5068-0-3-3"
-         x="5.313765"
-         y="94.580177"
-         style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke-width:0.39687496">(0,0)</tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.39687496"
-       x="116.56095"
-       y="94.66819"
-       id="text5070-2-2-6-0"><tspan
-         sodipodi:role="line"
-         id="tspan5068-0-3-4-0"
-         x="116.56095"
-         y="94.66819"
-         style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke-width:0.39687496">(1,0)</tspan></text>
-    <g
-       id="g2002"
-       transform="matrix(1.5,0,0,1.5,-46.79366,-77.20566)">
-      <circle
-         r="0.52778977"
-         cy="69.582268"
-         cx="38.289722"
-         id="path4517"
-         style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.10555796;stroke-opacity:1" />
-      <circle
-         r="0.52778977"
-         cy="69.582268"
-         cx="48.873055"
-         id="path4517-7"
-         style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.10555796;stroke-opacity:1" />
-      <circle
-         r="0.52778977"
-         cy="69.582268"
-         cx="59.456387"
-         id="path4517-78"
-         style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.10555796;stroke-opacity:1" />
-      <circle
-         r="0.52778977"
-         cy="69.582268"
-         cx="70.039726"
-         id="path4517-7-9"
-         style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.10555796;stroke-opacity:1" />
-      <circle
-         r="0.52778977"
-         cy="69.582268"
-         cx="80.623055"
-         id="path4517-0"
-         style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.10555796;stroke-opacity:1" />
-      <circle
-         r="0.52778977"
-         cy="80.165604"
-         cx="38.289722"
-         id="path4517-5"
-         style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.10555796;stroke-opacity:1" />
-      <circle
-         r="0.52778977"
-         cy="80.165604"
-         cx="48.873055"
-         id="path4517-7-8"
-         style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.10555796;stroke-opacity:1" />
-      <circle
-         r="0.52778977"
-         cy="80.165604"
-         cx="59.456387"
-         id="path4517-78-7"
-         style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.10555796;stroke-opacity:1" />
-      <circle
-         r="0.52778977"
-         cy="80.165604"
-         cx="70.039726"
-         id="path4517-7-9-2"
-         style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.10555796;stroke-opacity:1" />
-      <circle
-         r="0.52778977"
-         cy="80.165604"
-         cx="80.623055"
-         id="path4517-0-0"
-         style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.10555796;stroke-opacity:1" />
-      <circle
-         r="0.52778977"
-         cy="90.74894"
-         cx="38.289722"
-         id="path4517-9"
-         style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.10555796;stroke-opacity:1" />
-      <circle
-         r="0.52778977"
-         cy="90.74894"
-         cx="48.873055"
-         id="path4517-7-87"
-         style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.10555796;stroke-opacity:1" />
-      <circle
-         r="0.52778977"
-         cy="69.582268"
-         cx="91.20639"
-         id="path4517-78-70"
-         style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.10555797;stroke-opacity:1" />
-      <circle
-         r="0.52778977"
-         cy="69.582268"
-         cx="101.78973"
-         id="path4517-7-9-7"
-         style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.10555797;stroke-opacity:1" />
-      <circle
-         r="0.52778977"
-         cy="69.582268"
-         cx="112.37305"
-         id="path4517-0-7"
-         style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.10555797;stroke-opacity:1" />
-      <circle
-         r="0.52778977"
-         cy="80.165604"
-         cx="91.20639"
-         id="path4517-78-7-5"
-         style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.10555797;stroke-opacity:1" />
-      <circle
-         r="0.52778977"
-         cy="80.165604"
-         cx="101.78973"
-         id="path4517-7-9-2-4"
-         style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.10555797;stroke-opacity:1" />
-      <circle
-         r="0.52778977"
-         cy="80.165604"
-         cx="112.37305"
-         id="path4517-0-0-0"
-         style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.10555797;stroke-opacity:1" />
-      <circle
-         r="0.52778977"
-         cy="90.74894"
-         cx="101.78973"
-         id="path4517-7-9-4-3"
-         style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.10555797;stroke-opacity:1" />
-      <circle
-         r="0.52778977"
-         cy="90.74894"
-         cx="112.37306"
-         id="path4517-0-6-7"
-         style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.10555797;stroke-opacity:1" />
-      <circle
-         transform="scale(1,-1)"
-         r="0.52778977"
-         cy="-111.9183"
-         cx="38.256454"
-         id="path4517-56"
-         style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.10555797;stroke-opacity:1" />
-      <circle
-         transform="scale(1,-1)"
-         r="0.52778977"
-         cy="-111.9183"
-         cx="48.83979"
-         id="path4517-7-2"
-         style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.10555797;stroke-opacity:1" />
-      <circle
-         transform="scale(1,-1)"
-         r="0.52778977"
-         cy="-111.9183"
-         cx="59.423122"
-         id="path4517-78-0"
-         style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.10555797;stroke-opacity:1" />
-      <circle
-         transform="scale(1,-1)"
-         r="0.52778977"
-         cy="-111.9183"
-         cx="70.006462"
-         id="path4517-7-9-8"
-         style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.10555797;stroke-opacity:1" />
-      <circle
-         transform="scale(1,-1)"
-         r="0.52778977"
-         cy="-111.9183"
-         cx="80.58979"
-         id="path4517-0-70"
-         style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.10555797;stroke-opacity:1" />
-      <circle
-         transform="scale(1,-1)"
-         r="0.52778977"
-         cy="-101.33495"
-         cx="38.256454"
-         id="path4517-5-6"
-         style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.10555797;stroke-opacity:1" />
-      <circle
-         transform="scale(1,-1)"
-         r="0.52778977"
-         cy="-101.33495"
-         cx="48.83979"
-         id="path4517-7-8-9"
-         style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.10555797;stroke-opacity:1" />
-      <circle
-         transform="scale(1,-1)"
-         r="0.52778977"
-         cy="-101.33495"
-         cx="59.423122"
-         id="path4517-78-7-9"
-         style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.10555797;stroke-opacity:1" />
-      <circle
-         transform="scale(1,-1)"
-         r="0.52778977"
-         cy="-101.33495"
-         cx="70.006462"
-         id="path4517-7-9-2-3"
-         style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.10555797;stroke-opacity:1" />
-      <circle
-         transform="scale(1,-1)"
-         r="0.52778977"
-         cy="-101.33495"
-         cx="80.58979"
-         id="path4517-0-0-4"
-         style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.10555797;stroke-opacity:1" />
-      <circle
-         transform="scale(1,-1)"
-         r="0.52778977"
-         cy="-90.751633"
-         cx="38.256454"
-         id="path4517-9-3"
-         style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.10555797;stroke-opacity:1" />
-      <circle
-         transform="scale(1,-1)"
-         r="0.52778977"
-         cy="-90.751633"
-         cx="48.83979"
-         id="path4517-7-87-0"
-         style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.10555797;stroke-opacity:1" />
-      <circle
-         transform="scale(1,-1)"
-         r="0.52778977"
-         cy="-111.9183"
-         cx="91.173119"
-         id="path4517-78-70-1"
-         style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.10555797;stroke-opacity:1" />
-      <circle
-         transform="scale(1,-1)"
-         r="0.52778977"
-         cy="-111.9183"
-         cx="101.75645"
-         id="path4517-7-9-7-7"
-         style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.10555797;stroke-opacity:1" />
-      <circle
-         transform="scale(1,-1)"
-         r="0.52778977"
-         cy="-111.9183"
-         cx="112.33977"
-         id="path4517-0-7-0"
-         style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.10555797;stroke-opacity:1" />
-      <circle
-         transform="scale(1,-1)"
-         r="0.52778977"
-         cy="-101.33495"
-         cx="91.173119"
-         id="path4517-78-7-5-9"
-         style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.10555797;stroke-opacity:1" />
-      <circle
-         transform="scale(1,-1)"
-         r="0.52778977"
-         cy="-101.33495"
-         cx="101.75645"
-         id="path4517-7-9-2-4-1"
-         style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.10555797;stroke-opacity:1" />
-      <circle
-         transform="scale(1,-1)"
-         r="0.52778977"
-         cy="-101.33495"
-         cx="112.33977"
-         id="path4517-0-0-0-1"
-         style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.10555797;stroke-opacity:1" />
-      <circle
-         transform="scale(1,-1)"
-         r="0.52778977"
-         cy="-90.751633"
-         cx="101.75645"
-         id="path4517-7-9-4-3-6"
-         style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.10555797;stroke-opacity:1" />
-      <circle
-         transform="scale(1,-1)"
-         r="0.52778977"
-         cy="-90.751633"
-         cx="112.33979"
-         id="path4517-0-6-7-6"
-         style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.10555797;stroke-opacity:1" />
-    </g>
-    <path
-       style="fill:none;stroke:#000000;stroke-width:0.39700006;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1.58800024,1.58800024;stroke-dashoffset:0;stroke-opacity:1"
-       d="M 74.083339,27.124989 V 42.999975"
-       id="path9655-2-8"
-       inkscape:connector-curvature="0" />
-    <path
-       style="fill:none;stroke:#000000;stroke-width:0.39700006;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1.58800024,1.58800024;stroke-dashoffset:0;stroke-opacity:1"
-       d="M 89.95834,27.124989 V 42.999975"
-       id="path9655-2-6"
-       inkscape:connector-curvature="0" />
-    <path
-       style="fill:none;stroke:#000000;stroke-width:0.39700006;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1.58800024,1.58800024;stroke-dashoffset:0;stroke-opacity:1"
-       d="M 105.83334,27.124989 V 42.999975"
-       id="path9655-2-7"
-       inkscape:connector-curvature="0" />
-    <path
-       style="fill:none;stroke:#000000;stroke-width:0.39700006;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1.58800024,1.58800024;stroke-dashoffset:0;stroke-opacity:1"
-       d="M 26.458339,74.749989 V 90.624975"
-       id="path9655-2-1"
-       inkscape:connector-curvature="0" />
-    <path
-       style="fill:none;stroke:#000000;stroke-width:0.39700006;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1.58800024,1.58800024;stroke-dashoffset:0;stroke-opacity:1"
-       d="M 42.33334,74.749989 V 90.624975"
-       id="path9655-2-4"
-       inkscape:connector-curvature="0" />
-    <path
-       style="fill:none;stroke:#000000;stroke-width:0.39700006;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1.58800024,1.58800024;stroke-dashoffset:0;stroke-opacity:1"
-       d="M 58.20834,74.749989 V 90.624975"
-       id="path9655-2-2"
-       inkscape:connector-curvature="0" />
-    <path
-       style="fill:none;stroke:#000000;stroke-width:0.39700006;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1.58800024,1.58800024;stroke-dashoffset:0;stroke-opacity:1"
-       d="M 74.083339,74.749989 V 90.624975"
-       id="path9655-2-88"
-       inkscape:connector-curvature="0" />
-    <path
-       style="fill:none;stroke:#000000;stroke-width:0.39700006;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1.58800024,1.58800024;stroke-dashoffset:0;stroke-opacity:1"
-       d="M 89.95834,74.749989 V 90.624975"
-       id="path9655-2-0"
-       inkscape:connector-curvature="0" />
-    <path
-       style="fill:none;stroke:#000000;stroke-width:0.39700006;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1.58800024,1.58800024;stroke-dashoffset:0;stroke-opacity:1"
-       d="M 105.83334,74.749989 V 90.624975"
-       id="path9655-2-23"
-       inkscape:connector-curvature="0" />
-    <path
-       style="fill:none;stroke:#000000;stroke-width:0.39700006;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1.58800024,1.58800024;stroke-dashoffset:0;stroke-opacity:1"
-       d="m 105.83334,58.874988 h 15.87499"
-       id="path9693-6"
-       inkscape:connector-curvature="0" />
-    <path
-       style="fill:none;stroke:#000000;stroke-width:0.39700006;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1.58800024,1.58800024;stroke-dashoffset:0;stroke-opacity:1"
-       d="m 105.83334,74.749989 h 15.87501"
-       id="path9693-9"
-       inkscape:connector-curvature="0" />
-    <path
-       style="fill:none;stroke:#000000;stroke-width:0.39700006;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1.58800024,1.58800024;stroke-dashoffset:0;stroke-opacity:1"
-       d="M 10.58334,74.749989 H 26.458333"
-       id="path9693-0"
-       inkscape:connector-curvature="0" />
-    <path
-       style="fill:none;stroke:#000000;stroke-width:0.39700006;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1.58800024,1.58800024;stroke-dashoffset:0;stroke-opacity:1"
-       d="M 10.58334,58.874988 H 26.458333"
-       id="path9693-5"
-       inkscape:connector-curvature="0" />
-    <path
-       style="fill:none;stroke:#ff0000;stroke-width:0.39687496;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
-       d="m 26.458339,42.999989 c 79.375001,0 79.375001,0 79.375001,0 v 31.75 H 26.458339 v -31.75"
-       id="path2100"
-       inkscape:connector-curvature="0" />
-    <g
-       id="g9727"
-       transform="matrix(1.5,0,0,1.5,-136.08449,-54.396465)">
-      <circle
-         r="0.52778977"
-         cy="64.922615"
-         cx="37.797619"
-         id="path4517-564"
-         style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.10555796;stroke-opacity:1" />
-      <circle
-         r="0.52778977"
-         cy="64.922615"
-         cx="48.380951"
-         id="path4517-7-24"
-         style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.10555796;stroke-opacity:1" />
-      <circle
-         r="0.52778977"
-         cy="64.922615"
-         cx="58.964283"
-         id="path4517-78-1"
-         style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.10555796;stroke-opacity:1" />
-      <circle
-         r="0.52778977"
-         cy="64.922615"
-         cx="69.547615"
-         id="path4517-7-9-77"
-         style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.10555796;stroke-opacity:1" />
-      <circle
-         r="0.52778977"
-         cy="64.922615"
-         cx="80.130943"
-         id="path4517-0-5"
-         style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.10555796;stroke-opacity:1" />
-      <circle
-         r="0.52778977"
-         cy="75.505951"
-         cx="37.797619"
-         id="path4517-5-1"
-         style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.10555796;stroke-opacity:1" />
-      <circle
-         r="0.52778977"
-         cy="75.505951"
-         cx="48.380951"
-         id="path4517-7-8-7"
-         style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.10555796;stroke-opacity:1" />
-      <circle
-         r="0.52778977"
-         cy="75.505951"
-         cx="58.964283"
-         id="path4517-78-7-8"
-         style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.10555796;stroke-opacity:1" />
-      <circle
-         r="0.52778977"
-         cy="75.505951"
-         cx="69.547615"
-         id="path4517-7-9-2-8"
-         style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.10555796;stroke-opacity:1" />
-      <circle
-         r="0.52778977"
-         cy="75.505951"
-         cx="80.130943"
-         id="path4517-0-0-1"
-         style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.10555796;stroke-opacity:1" />
-      <circle
-         r="0.52778977"
-         cy="86.089287"
-         cx="37.797619"
-         id="path4517-9-5"
-         style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.10555796;stroke-opacity:1" />
-      <circle
-         r="0.52778977"
-         cy="86.089287"
-         cx="48.380951"
-         id="path4517-7-87-3"
-         style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.10555796;stroke-opacity:1" />
-      <circle
-         r="0.52778977"
-         cy="86.089287"
-         cx="58.964283"
-         id="path4517-78-0-2"
-         style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.10555796;stroke-opacity:1" />
-      <circle
-         r="0.52778977"
-         cy="86.089287"
-         cx="69.547615"
-         id="path4517-7-9-4"
-         style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.10555796;stroke-opacity:1" />
-      <circle
-         r="0.52778977"
-         cy="86.089287"
-         cx="80.130951"
-         id="path4517-0-6"
-         style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.10555796;stroke-opacity:1" />
-    </g>
-    <rect
-       id="rect3703-2-4"
-       width="63.499992"
-       height="31.75"
-       x="-79.375"
-       y="42.999996"
-       style="opacity:0.88500001;fill:none;stroke:#000000;stroke-width:0.39687496;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
-    <path
-       style="fill:none;stroke:#000000;stroke-width:0.39700006;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1.58800024,1.58800024;stroke-dashoffset:0;stroke-opacity:1"
-       d="m -63.500001,42.999996 v 31.75"
-       id="path9655-0"
-       inkscape:connector-curvature="0" />
-    <path
-       style="fill:none;stroke:#000000;stroke-width:0.39700006;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1.58800024,1.58800024;stroke-dashoffset:0;stroke-opacity:1"
-       d="M -47.625,42.999995 V 74.749994"
-       id="path9655-4-6"
-       inkscape:connector-curvature="0" />
-    <path
-       style="fill:none;stroke:#000000;stroke-width:0.39700006;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1.58800024,1.58800024;stroke-dashoffset:0;stroke-opacity:1"
-       d="M -31.749997,42.999995 V 74.749994"
-       id="path9655-2-9"
-       inkscape:connector-curvature="0" />
-    <path
-       style="fill:none;stroke:#000000;stroke-width:0.39700006;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1.58800024,1.58800024;stroke-dashoffset:0;stroke-opacity:1"
-       d="m -31.749997,58.874995 h 15.874998"
-       id="path9693-62"
-       inkscape:connector-curvature="0" />
-    <path
-       style="fill:none;stroke:#ff0000;stroke-width:0.39687496;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
-       d="m -63.500001,58.874995 h 31.749999"
-       id="path9695"
-       inkscape:connector-curvature="0" />
-    <path
-       style="fill:none;stroke:#000000;stroke-width:0.39700006;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1.58800024,1.58800024;stroke-dashoffset:0;stroke-opacity:1"
-       d="m -79.375,58.874995 h 15.874999"
-       id="path9693-1-9"
-       inkscape:connector-curvature="0" />
-    <text
-       xml:space="preserve"
-       style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.39687496"
-       x="-84.45546"
-       y="41.088295"
-       id="text5070-2-2-9"><tspan
-         sodipodi:role="line"
-         id="tspan5068-0-3-36"
-         x="-84.45546"
-         y="41.088295"
-         style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke-width:0.39687496">(0,1)</tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.39687496"
-       x="-21.031706"
-       y="41.176315"
-       id="text5070-2-2-6-1"><tspan
-         sodipodi:role="line"
-         id="tspan5068-0-3-4-6"
-         x="-21.031706"
-         y="41.176315"
-         style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke-width:0.39687496">(1,1)</tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.39687496"
-       x="-84.644569"
-       y="78.903603"
-       id="text5070-2-2-5-5"><tspan
-         sodipodi:role="line"
-         id="tspan5068-0-3-3-4"
-         x="-84.644569"
-         y="78.903603"
-         style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke-width:0.39687496">(0,0)</tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.39687496"
-       x="-21.220816"
-       y="78.991623"
-       id="text5070-2-2-6-0-4"><tspan
-         sodipodi:role="line"
-         id="tspan5068-0-3-4-0-3"
-         x="-21.220816"
-         y="78.991623"
-         style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke-width:0.39687496">(1,0)</tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.39687496"
-       x="-52.295326"
-       y="85.413338"
-       id="text2799"><tspan
-         sodipodi:role="line"
-         id="tspan2797"
-         x="-52.295326"
-         y="85.413338"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.39687496">(a)</tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.39687496"
-       x="61.65501"
-       y="101.37095"
-       id="text2799-0"><tspan
-         sodipodi:role="line"
-         id="tspan2797-0"
-         x="61.65501"
-         y="101.37095"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.39687496">(b)</tspan></text>
-  </g>
-</svg>
diff --git a/registry/vulkan/images/innertri.svg b/registry/vulkan/images/innertri.svg
deleted file mode 100644
index 0868a3f..0000000
--- a/registry/vulkan/images/innertri.svg
+++ /dev/null
@@ -1,565 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Created with Inkscape (http://www.inkscape.org/) -->
-
-<svg
-   xmlns:dc="http://purl.org/dc/elements/1.1/"
-   xmlns:cc="http://creativecommons.org/ns#"
-   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
-   xmlns:svg="http://www.w3.org/2000/svg"
-   xmlns="http://www.w3.org/2000/svg"
-   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
-   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
-   width="180.51871mm"
-   height="75.629333mm"
-   viewBox="0 0 180.5187 75.629333"
-   version="1.1"
-   id="svg8653"
-   inkscape:version="0.92.2 (5c3e80d, 2017-08-06)"
-   sodipodi:docname="innertri.svg">
-  <defs
-     id="defs8647" />
-  <sodipodi:namedview
-     id="base"
-     pagecolor="#ffffff"
-     bordercolor="#666666"
-     borderopacity="1.0"
-     inkscape:pageopacity="0.0"
-     inkscape:pageshadow="2"
-     inkscape:zoom="1"
-     inkscape:cx="243.40083"
-     inkscape:cy="90.033505"
-     inkscape:document-units="mm"
-     inkscape:current-layer="layer1"
-     showgrid="true"
-     inkscape:window-width="1680"
-     inkscape:window-height="987"
-     inkscape:window-x="-8"
-     inkscape:window-y="-8"
-     inkscape:window-maximized="0"
-     fit-margin-top="1"
-     fit-margin-left="1"
-     fit-margin-right="1"
-     fit-margin-bottom="1"
-     inkscape:snap-grids="true">
-    <inkscape:grid
-       type="xygrid"
-       id="grid9626"
-       originx="66.42264"
-       originy="-193.13802" />
-  </sodipodi:namedview>
-  <metadata
-     id="metadata8650">
-    <rdf:RDF>
-      <cc:Work
-         rdf:about="">
-        <dc:format>image/svg+xml</dc:format>
-        <dc:type
-           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
-        <dc:title />
-      </cc:Work>
-    </rdf:RDF>
-  </metadata>
-  <g
-     inkscape:label="Layer 1"
-     inkscape:groupmode="layer"
-     id="layer1"
-     transform="translate(66.422641,-28.232645)">
-    <path
-       style="fill:none;stroke:#ff0000;stroke-width:0.39687499px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-       d="m -26.458331,61.520827 -15.875,23.812499 h 31.750001 z"
-       id="path5083"
-       inkscape:connector-curvature="0" />
-    <text
-       xml:space="preserve"
-       style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.39687499"
-       x="-33.922741"
-       y="44.355228"
-       id="text5070-2-2-9"><tspan
-         sodipodi:role="line"
-         id="tspan5068-0-3-36"
-         x="-33.922741"
-         y="44.355228"
-         style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke-width:0.39687499">(0,1,0)</tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.39687499"
-       x="-29.592077"
-       y="102.01035"
-       id="text2799"><tspan
-         sodipodi:role="line"
-         id="tspan2797"
-         x="-29.592077"
-         y="102.01035"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.39687499">(a)</tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.39687499"
-       x="65.757034"
-       y="99.802383"
-       id="text2799-0"><tspan
-         sodipodi:role="line"
-         id="tspan2797-0"
-         x="65.757034"
-         y="99.802383"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.39687499">(b)</tspan></text>
-    <circle
-       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15833695;stroke-opacity:1"
-       id="path4517-78-7-8-8"
-       cx="-26.461729"
-       cy="45.642532"
-       r="0.79168469" />
-    <circle
-       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15833695;stroke-opacity:1"
-       id="path4517-78-7-8-8-6"
-       cx="-34.399227"
-       cy="57.548782"
-       r="0.79168469" />
-    <circle
-       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15833695;stroke-opacity:1"
-       id="path4517-78-7-8-8-9"
-       cx="-42.336727"
-       cy="69.455032"
-       r="0.79168469" />
-    <circle
-       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15833695;stroke-opacity:1"
-       id="path4517-78-7-8-8-99"
-       cx="-50.274231"
-       cy="81.361282"
-       r="0.79168469" />
-    <circle
-       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15833695;stroke-opacity:1"
-       id="path4517-78-7-8-8-7"
-       cx="58.204929"
-       cy="-93.274124"
-       r="0.79168469"
-       transform="scale(-1)" />
-    <circle
-       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15833695;stroke-opacity:1"
-       id="path4517-78-7-8-8-6-5"
-       cx="18.517424"
-       cy="57.548782"
-       r="0.79168469"
-       transform="scale(-1,1)" />
-    <circle
-       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15833695;stroke-opacity:1"
-       id="path4517-78-7-8-8-9-6"
-       cx="10.579925"
-       cy="69.45504"
-       r="0.79168469"
-       transform="scale(-1,1)" />
-    <circle
-       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15833695;stroke-opacity:1"
-       id="path4517-78-7-8-8-99-1"
-       cx="2.6424396"
-       cy="81.361282"
-       r="0.79168469"
-       transform="scale(-1,1)" />
-    <circle
-       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15833695;stroke-opacity:1"
-       id="path4517-78-7-8-8-7-4"
-       cx="5.2882776"
-       cy="-93.274124"
-       r="0.79168469"
-       transform="scale(1,-1)" />
-    <circle
-       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15833695;stroke-opacity:1"
-       id="path4517-78-7-8-8-7-44"
-       cx="42.329926"
-       cy="-93.274124"
-       r="0.79168469"
-       transform="scale(-1)" />
-    <circle
-       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15833695;stroke-opacity:1"
-       id="path4517-78-7-8-8-7-9"
-       cx="26.454931"
-       cy="-93.274124"
-       r="0.79168469"
-       transform="scale(-1)" />
-    <circle
-       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15833695;stroke-opacity:1"
-       id="path4517-78-7-8-8-7-7"
-       cx="10.579925"
-       cy="-93.274124"
-       r="0.79168469"
-       transform="scale(-1)" />
-    <path
-       style="fill:none;stroke:#000000;stroke-width:0.39687499px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-       d="M -26.458331,45.645828 C -58.20833,93.270825 -58.20833,93.270825 -58.20833,93.270825 H 5.2916687 Z"
-       id="path4959"
-       inkscape:connector-curvature="0" />
-    <circle
-       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15833695;stroke-opacity:1"
-       id="path4517-78-7-8-8-6-1"
-       cx="-26.461729"
-       cy="61.517532"
-       r="0.79168469" />
-    <circle
-       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15833695;stroke-opacity:1"
-       id="path4517-78-7-8-8-6-1-4"
-       cx="-18.524229"
-       cy="73.423782"
-       r="0.79168469" />
-    <circle
-       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15833695;stroke-opacity:1"
-       id="path4517-78-7-8-8-6-1-9"
-       cx="-34.399231"
-       cy="-73.430374"
-       r="0.79168469"
-       transform="scale(1,-1)" />
-    <circle
-       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15833695;stroke-opacity:1"
-       id="path4517-78-7-8-8-6-1-9-1"
-       cx="-42.336735"
-       cy="-85.336624"
-       r="0.79168469"
-       transform="scale(1,-1)" />
-    <circle
-       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15833695;stroke-opacity:1"
-       id="path4517-78-7-8-8-6-1-9-4"
-       cx="10.57994"
-       cy="-85.336624"
-       r="0.79168469"
-       transform="scale(-1)" />
-    <circle
-       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15833695;stroke-opacity:1"
-       id="path4517-78-7-8-8-7-44-8"
-       cx="26.454931"
-       cy="-85.336624"
-       r="0.79168469"
-       transform="scale(-1)" />
-    <path
-       style="fill:none;stroke:#000000;stroke-width:0.396875;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1.5875,1.5875;stroke-dashoffset:0;stroke-opacity:1"
-       d="m -18.520831,57.552077 -7.9375,3.96875"
-       id="path5087"
-       inkscape:connector-curvature="0" />
-    <path
-       style="fill:none;stroke:#000000;stroke-width:0.396875;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1.5875,1.5875;stroke-dashoffset:0;stroke-opacity:1"
-       d="m -10.58333,69.458327 -7.937501,3.96875"
-       id="path5089"
-       inkscape:connector-curvature="0" />
-    <path
-       style="fill:none;stroke:#000000;stroke-width:0.396875;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1.5875,1.5875;stroke-dashoffset:0;stroke-opacity:1"
-       d="m -2.6458313,81.364576 c -7.9374987,3.96875 -7.9374987,3.96875 -7.9374987,3.96875"
-       id="path5091"
-       inkscape:connector-curvature="0" />
-    <path
-       style="fill:none;stroke:#000000;stroke-width:0.396875;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1.5875,1.5875;stroke-dashoffset:0;stroke-opacity:1"
-       d="m -10.58333,93.270825 c 0,-7.937499 0,-7.937499 0,-7.937499"
-       id="path5093"
-       inkscape:connector-curvature="0" />
-    <path
-       style="fill:none;stroke:#000000;stroke-width:0.396875;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1.5875,1.5875;stroke-dashoffset:0;stroke-opacity:1"
-       d="m -26.458331,93.270825 c 0,-7.937499 0,-7.937499 0,-7.937499"
-       id="path5095"
-       inkscape:connector-curvature="0" />
-    <path
-       style="fill:none;stroke:#000000;stroke-width:0.396875;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1.5875,1.5875;stroke-dashoffset:0;stroke-opacity:1"
-       d="m -42.333331,93.270825 c 0,-7.937499 0,-7.937499 0,-7.937499"
-       id="path5097"
-       inkscape:connector-curvature="0" />
-    <path
-       style="fill:none;stroke:#000000;stroke-width:0.396875;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1.5875,1.5875;stroke-dashoffset:0;stroke-opacity:1"
-       d="m -50.27083,81.364576 c 7.937499,3.96875 7.937499,3.96875 7.937499,3.96875"
-       id="path5099"
-       inkscape:connector-curvature="0" />
-    <path
-       style="fill:none;stroke:#000000;stroke-width:0.396875;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1.5875,1.5875;stroke-dashoffset:0;stroke-opacity:1"
-       d="m -42.333331,69.458327 c 7.937501,3.96875 7.937501,3.96875 7.937501,3.96875"
-       id="path5101"
-       inkscape:connector-curvature="0" />
-    <path
-       style="fill:none;stroke:#000000;stroke-width:0.396875;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1.5875,1.5875;stroke-dashoffset:0;stroke-opacity:1"
-       d="m -34.39583,57.552077 c 7.937499,3.96875 7.937499,3.96875 7.937499,3.96875"
-       id="path5103"
-       inkscape:connector-curvature="0" />
-    <text
-       xml:space="preserve"
-       style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.39687499"
-       x="-2.1713245"
-       y="97.675507"
-       id="text5070-2-2-9-3"><tspan
-         sodipodi:role="line"
-         id="tspan5068-0-3-36-1"
-         x="-2.1713245"
-         y="97.675507"
-         style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke-width:0.39687499">(1,0,0)</tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.39687499"
-       x="-65.716164"
-       y="97.612831"
-       id="text5070-2-2-9-9"><tspan
-         sodipodi:role="line"
-         id="tspan5068-0-3-36-9"
-         x="-65.716164"
-         y="97.612831"
-         style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke-width:0.39687499">(0,0,1)</tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.39687499"
-       x="58.681427"
-       y="32.448986"
-       id="text5070-2-2-9-8"><tspan
-         sodipodi:role="line"
-         id="tspan5068-0-3-36-3"
-         x="58.681427"
-         y="32.448986"
-         style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke-width:0.39687499">(0,1,0)</tspan></text>
-    <circle
-       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15833695;stroke-opacity:1"
-       id="path4517-78-7-8-8-1"
-       cx="66.142441"
-       cy="33.736286"
-       r="0.79168469" />
-    <circle
-       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15833695;stroke-opacity:1"
-       id="path4517-78-7-8-8-6-3"
-       cx="58.204941"
-       cy="45.642536"
-       r="0.79168469" />
-    <circle
-       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15833695;stroke-opacity:1"
-       id="path4517-78-7-8-8-9-2"
-       cx="50.267445"
-       cy="57.548786"
-       r="0.79168469" />
-    <circle
-       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15833695;stroke-opacity:1"
-       id="path4517-78-7-8-8-99-3"
-       cx="42.329937"
-       cy="69.455032"
-       r="0.79168469" />
-    <circle
-       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15833695;stroke-opacity:1"
-       id="path4517-78-7-8-8-7-99"
-       cx="-34.399239"
-       cy="-81.367874"
-       r="0.79168469"
-       transform="scale(-1)" />
-    <circle
-       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15833695;stroke-opacity:1"
-       id="path4517-78-7-8-8-6-5-5"
-       cx="-74.086746"
-       cy="45.642536"
-       r="0.79168469"
-       transform="scale(-1,1)" />
-    <circle
-       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15833695;stroke-opacity:1"
-       id="path4517-78-7-8-8-9-6-3"
-       cx="-82.024246"
-       cy="57.54879"
-       r="0.79168469"
-       transform="scale(-1,1)" />
-    <circle
-       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15833695;stroke-opacity:1"
-       id="path4517-78-7-8-8-99-1-9"
-       cx="-89.961716"
-       cy="69.455032"
-       r="0.79168469"
-       transform="scale(-1,1)" />
-    <circle
-       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15833695;stroke-opacity:1"
-       id="path4517-78-7-8-8-7-4-3"
-       cx="97.892448"
-       cy="-81.367874"
-       r="0.79168469"
-       transform="scale(1,-1)" />
-    <circle
-       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15833695;stroke-opacity:1"
-       id="path4517-78-7-8-8-6-1-7"
-       cx="66.142441"
-       cy="49.611282"
-       r="0.79168469" />
-    <circle
-       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15833695;stroke-opacity:1"
-       id="path4517-78-7-8-8-6-1-4-2"
-       cx="74.079941"
-       cy="61.517532"
-       r="0.79168469" />
-    <circle
-       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15833695;stroke-opacity:1"
-       id="path4517-78-7-8-8-6-1-9-9"
-       cx="58.204941"
-       cy="-61.524132"
-       r="0.79168469"
-       transform="scale(1,-1)" />
-    <circle
-       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15833695;stroke-opacity:1"
-       id="path4517-78-7-8-8-6-1-9-1-9"
-       cx="50.267433"
-       cy="-73.430374"
-       r="0.79168469"
-       transform="scale(1,-1)" />
-    <circle
-       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15833695;stroke-opacity:1"
-       id="path4517-78-7-8-8-6-1-9-4-8"
-       cx="-82.024231"
-       cy="-73.430374"
-       r="0.79168469"
-       transform="scale(-1)" />
-    <path
-       style="fill:none;stroke:#ff0000;stroke-width:0.39687499;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       d="M 66.145837,61.520831 54.239585,79.380206 h 23.8125 z"
-       id="path5083-8-8"
-       inkscape:connector-curvature="0" />
-    <circle
-       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15833695;stroke-opacity:1"
-       id="path4517-78-7-8-8-6-1-7-4"
-       cx="66.142441"
-       cy="61.517532"
-       r="0.79168469" />
-    <circle
-       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15833695;stroke-opacity:1"
-       id="path4517-78-7-8-8-6-1-9-9-2"
-       cx="54.236198"
-       cy="-79.395912"
-       r="0.79168469"
-       transform="scale(1,-1)" />
-    <circle
-       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15833695;stroke-opacity:1"
-       id="path4517-78-7-8-8-6-1-9-9-2-3"
-       cx="78.061111"
-       cy="-79.395912"
-       r="0.79168469"
-       transform="scale(1,-1)" />
-    <circle
-       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15833695;stroke-opacity:1"
-       id="path4517-78-7-8-8-6-1-7-7"
-       cx="50.267433"
-       cy="73.423782"
-       r="0.79168469" />
-    <circle
-       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15833695;stroke-opacity:1"
-       id="path4517-78-7-8-8-6-1-4-2-4"
-       cx="58.204929"
-       cy="85.33004"
-       r="0.79168469" />
-    <circle
-       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15833695;stroke-opacity:1"
-       id="path4517-78-7-8-8-6-1-9-9-5"
-       cx="42.329937"
-       cy="-85.336632"
-       r="0.79168469"
-       transform="scale(1,-1)" />
-    <circle
-       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15833695;stroke-opacity:1"
-       id="path4517-78-7-8-8-6-1-7-45"
-       cx="82.017433"
-       cy="73.423782"
-       r="0.79168469" />
-    <circle
-       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15833695;stroke-opacity:1"
-       id="path4517-78-7-8-8-6-1-4-2-6"
-       cx="89.954933"
-       cy="85.330025"
-       r="0.79168469" />
-    <circle
-       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15833695;stroke-opacity:1"
-       id="path4517-78-7-8-8-6-1-9-9-4"
-       cx="74.079948"
-       cy="-85.336632"
-       r="0.79168469"
-       transform="scale(1,-1)" />
-    <circle
-       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15833695;stroke-opacity:1"
-       id="path4517-78-7-8-8-6-1-4-2-60"
-       cx="105.82993"
-       cy="93.267532"
-       r="0.79168469" />
-    <circle
-       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15833695;stroke-opacity:1"
-       id="path4517-78-7-8-8-6-1-9-9-45"
-       cx="89.954941"
-       cy="-93.274124"
-       r="0.79168469"
-       transform="scale(1,-1)" />
-    <circle
-       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15833695;stroke-opacity:1"
-       id="path4517-78-7-8-8-6-1-4-2-7"
-       cx="42.329937"
-       cy="93.267525"
-       r="0.79168469" />
-    <circle
-       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15833695;stroke-opacity:1"
-       id="path4517-78-7-8-8-6-1-9-9-1"
-       cx="26.454943"
-       cy="-93.274124"
-       r="0.79168469"
-       transform="scale(1,-1)" />
-    <circle
-       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15833695;stroke-opacity:1"
-       id="path4517-78-7-8-8-6-1-4-2-1"
-       cx="58.204937"
-       cy="93.267532"
-       r="0.79168469" />
-    <circle
-       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15833695;stroke-opacity:1"
-       id="path4517-78-7-8-8-6-1-9-9-20"
-       cx="74.079941"
-       cy="-93.274124"
-       r="0.79168469"
-       transform="scale(1,-1)" />
-    <path
-       style="fill:none;stroke:#ff0000;stroke-width:0.39687499;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       d="M 66.145834,49.614578 42.333335,85.333328 H 89.958334 Z"
-       id="path6079"
-       inkscape:connector-curvature="0" />
-    <path
-       style="fill:none;stroke:#000000;stroke-width:0.39687499px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-       d="M 66.145834,33.739578 26.458336,93.270827 h 79.374994 z"
-       id="path6081"
-       inkscape:connector-curvature="0" />
-    <path
-       style="fill:none;stroke:#000000;stroke-width:0.396875;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1.5875,1.5875;stroke-dashoffset:0;stroke-opacity:1"
-       d="m 74.083334,45.645828 -7.9375,3.96875 -7.937499,-3.96875 v 0"
-       id="path6083"
-       inkscape:connector-curvature="0" />
-    <path
-       style="fill:none;stroke:#000000;stroke-width:0.396875;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1.5875,1.5875;stroke-dashoffset:0;stroke-opacity:1"
-       d="m 50.270834,57.552078 7.937501,3.96875 h 7.937499 7.9375 l 7.937501,-3.96875"
-       id="path6085"
-       inkscape:connector-curvature="0" />
-    <path
-       style="fill:none;stroke:#000000;stroke-width:0.396875;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1.5875,1.5875;stroke-dashoffset:0;stroke-opacity:1"
-       d="m 89.958334,69.458328 -7.937499,3.96875 -3.968751,5.953125 -3.96875,5.953125 v 7.937499"
-       id="path6087"
-       inkscape:connector-curvature="0" />
-    <path
-       style="fill:none;stroke:#000000;stroke-width:0.396875;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1.5875,1.5875;stroke-dashoffset:0;stroke-opacity:1"
-       d="m 42.333335,69.458328 7.937499,3.96875 3.96875,5.953125 3.968751,5.953125 v 7.937499"
-       id="path6089"
-       inkscape:connector-curvature="0" />
-    <path
-       style="fill:none;stroke:#000000;stroke-width:0.396875;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1.5875,1.5875;stroke-dashoffset:0;stroke-opacity:1"
-       d="m 34.395835,81.364578 7.9375,3.96875 v 7.937499"
-       id="path6091"
-       inkscape:connector-curvature="0" />
-    <path
-       style="fill:none;stroke:#000000;stroke-width:0.396875;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1.5875,1.5875;stroke-dashoffset:0;stroke-opacity:1"
-       d="m 97.895834,81.364578 -7.9375,3.96875 v 7.937499"
-       id="path6093"
-       inkscape:connector-curvature="0" />
-    <text
-       xml:space="preserve"
-       style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.39687499"
-       x="98.370346"
-       y="97.675514"
-       id="text5070-2-2-9-3-3"><tspan
-         sodipodi:role="line"
-         id="tspan5068-0-3-36-1-2"
-         x="98.370346"
-         y="97.675514"
-         style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke-width:0.39687499">(1,0,0)</tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.39687499"
-       x="19.148937"
-       y="97.811272"
-       id="text5070-2-2-9-9-1"><tspan
-         sodipodi:role="line"
-         id="tspan5068-0-3-36-9-5"
-         x="19.148937"
-         y="97.811272"
-         style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke-width:0.39687499">(0,0,1)</tspan></text>
-  </g>
-</svg>
diff --git a/registry/vulkan/images/non_strict_lines.svg b/registry/vulkan/images/non_strict_lines.svg
deleted file mode 100644
index 0474685..0000000
--- a/registry/vulkan/images/non_strict_lines.svg
+++ /dev/null
@@ -1,244 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Created with Inkscape (http://www.inkscape.org/) -->
-
-<svg
-   xmlns:dc="http://purl.org/dc/elements/1.1/"
-   xmlns:cc="http://creativecommons.org/ns#"
-   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
-   xmlns:svg="http://www.w3.org/2000/svg"
-   xmlns="http://www.w3.org/2000/svg"
-   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
-   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
-   width="152.70503mm"
-   height="83.873383mm"
-   viewBox="0 0 152.70503 83.873383"
-   version="1.1"
-   id="svg8"
-   inkscape:version="0.92.2 (5c3e80d, 2017-08-06)"
-   sodipodi:docname="non_strict_lines.svg">
-  <defs
-     id="defs2">
-    <marker
-       inkscape:isstock="true"
-       style="overflow:visible"
-       id="marker2639"
-       refX="0"
-       refY="0"
-       orient="auto"
-       inkscape:stockid="Arrow1Mend">
-      <path
-         transform="matrix(-0.4,0,0,-0.4,-4,0)"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         id="path2637"
-         inkscape:connector-curvature="0" />
-    </marker>
-    <marker
-       inkscape:stockid="Arrow1Mstart"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="Arrow1Mstart"
-       style="overflow:visible"
-       inkscape:isstock="true">
-      <path
-         id="path2320"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         transform="matrix(0.4,0,0,0.4,4,0)"
-         inkscape:connector-curvature="0" />
-    </marker>
-    <marker
-       inkscape:stockid="Arrow1Mend"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="Arrow1Mend"
-       style="overflow:visible"
-       inkscape:isstock="true"
-       inkscape:collect="always">
-      <path
-         id="path2323"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         transform="matrix(-0.4,0,0,-0.4,-4,0)"
-         inkscape:connector-curvature="0" />
-    </marker>
-  </defs>
-  <sodipodi:namedview
-     id="base"
-     pagecolor="#ffffff"
-     bordercolor="#666666"
-     borderopacity="1.0"
-     inkscape:pageopacity="0.0"
-     inkscape:pageshadow="2"
-     inkscape:zoom="1"
-     inkscape:cx="88.14801"
-     inkscape:cy="136.35995"
-     inkscape:document-units="mm"
-     inkscape:current-layer="layer1"
-     showgrid="true"
-     inkscape:snap-text-baseline="true"
-     inkscape:snap-object-midpoints="true"
-     inkscape:window-width="1680"
-     inkscape:window-height="987"
-     inkscape:window-x="1672"
-     inkscape:window-y="-8"
-     inkscape:window-maximized="0"
-     fit-margin-left="1"
-     fit-margin-top="1"
-     fit-margin-right="1"
-     fit-margin-bottom="1">
-    <inkscape:grid
-       type="xygrid"
-       id="grid815"
-       originx="-7.219306"
-       originy="-184.92629" />
-  </sodipodi:namedview>
-  <metadata
-     id="metadata5">
-    <rdf:RDF>
-      <cc:Work
-         rdf:about="">
-        <dc:format>image/svg+xml</dc:format>
-        <dc:type
-           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
-        <dc:title />
-      </cc:Work>
-    </rdf:RDF>
-  </metadata>
-  <g
-     inkscape:label="Layer 1"
-     inkscape:groupmode="layer"
-     id="layer1"
-     transform="translate(-7.2193063,-28.200331)">
-    <path
-       style="fill:none;stroke:#ff0000;stroke-width:0.52916664px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-       d="M 32.980582,89.448147 133.52226,31.239815 V 52.406479 L 32.980582,110.61481 Z"
-       id="path817"
-       inkscape:connector-curvature="0"
-       sodipodi:nodetypes="ccccc" />
-    <path
-       style="fill:none;stroke:#000000;stroke-width:0.52999997;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow1Mend)"
-       d="M 32.980582,100.03148 133.52226,41.823147"
-       id="path819"
-       inkscape:connector-curvature="0"
-       sodipodi:nodetypes="cc" />
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:end;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:end;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.52916664"
-       x="76.729164"
-       y="61.520836"
-       id="text2799"><tspan
-         sodipodi:role="line"
-         id="tspan2797"
-         x="76.729164"
-         y="61.520836"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:end;writing-mode:lr-tb;text-anchor:end;stroke-width:0.52916664">Edge 0</tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.52916664"
-       x="89.958336"
-       y="82.687508"
-       id="text2799-6"><tspan
-         sodipodi:role="line"
-         id="tspan2797-0"
-         x="89.958336"
-         y="82.687508"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.52916664">Edge 1</tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.52916664"
-       x="134.9375"
-       y="32.416672"
-       id="text2799-4"><tspan
-         sodipodi:role="line"
-         id="tspan2797-02"
-         x="134.9375"
-         y="32.416672"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.52916664">Edge 3</tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:end;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:end;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.52916664"
-       x="31.75"
-       y="109.14584"
-       id="text2799-38"><tspan
-         sodipodi:role="line"
-         id="tspan2797-4"
-         x="31.75"
-         y="109.14584"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:end;writing-mode:lr-tb;text-anchor:end;stroke-width:0.52916664">Edge 2</tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.52916664"
-       x="27.599689"
-       y="101.60439"
-       id="text2799-67"
-       transform="rotate(-30.47281)"><tspan
-         sodipodi:role="line"
-         id="tspan2797-1"
-         x="27.599689"
-         y="101.60439"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.52916664">Original</tspan><tspan
-         sodipodi:role="line"
-         x="27.599689"
-         y="106.89606"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.52916664"
-         id="tspan1613">Line</tspan></text>
-    <circle
-       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.21111594;stroke-opacity:1"
-       id="path4517-78-7-8-8-9"
-       cx="133.52223"
-       cy="41.823147"
-       r="1.0555795" />
-    <circle
-       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.21111594;stroke-opacity:1"
-       id="path4517-78-7-8-8-9-0"
-       cx="32.980579"
-       cy="100.03149"
-       r="1.0555795" />
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.52916664"
-       x="136.16811"
-       y="41.823147"
-       id="text2799-3"><tspan
-         sodipodi:role="line"
-         id="tspan2797-9"
-         x="136.16811"
-         y="41.823147"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.52916664">(Xb,Yb,Zb)</tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:end;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:end;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.52916664"
-       x="30.334751"
-       y="100.03149"
-       id="text2799-3-5"><tspan
-         sodipodi:role="line"
-         id="tspan2797-9-1"
-         x="30.334751"
-         y="100.03149"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:end;writing-mode:lr-tb;text-anchor:end;stroke-width:0.52916664">(Xa,Ya,Za)</tspan></text>
-    <path
-       style="fill:none;stroke:#000000;stroke-width:0.52899997;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1.58699992,1.58699992;stroke-dashoffset:0;stroke-opacity:1;marker-start:url(#Arrow1Mstart);marker-end:url(#marker2639)"
-       d="M 115.00141,41.823147 V 62.989813"
-       id="path2597"
-       inkscape:connector-curvature="0" />
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.52916664"
-       x="104.41809"
-       y="33.885647"
-       id="text2799-7"><tspan
-         sodipodi:role="line"
-         id="tspan2797-7"
-         x="104.41809"
-         y="33.885647"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.52916664">Line</tspan><tspan
-         sodipodi:role="line"
-         x="104.41809"
-         y="39.177315"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.52916664"
-         id="tspan2695">Width</tspan></text>
-  </g>
-</svg>
diff --git a/registry/vulkan/images/pipeline.svg b/registry/vulkan/images/pipeline.svg
deleted file mode 100644
index bf223ae..0000000
--- a/registry/vulkan/images/pipeline.svg
+++ /dev/null
@@ -1,1492 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Created with Inkscape (http://www.inkscape.org/) -->
-
-<svg
-   xmlns:dc="http://purl.org/dc/elements/1.1/"
-   xmlns:cc="http://creativecommons.org/ns#"
-   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
-   xmlns:svg="http://www.w3.org/2000/svg"
-   xmlns="http://www.w3.org/2000/svg"
-   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
-   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
-   width="775.12067"
-   height="418"
-   viewBox="0 0 775.12066 418"
-   version="1.1"
-   id="svg8"
-   sodipodi:docname="pipeline.svg"
-   inkscape:version="0.92.4 (5da689c313, 2019-01-14)">
-  <defs
-     id="defs2">
-    <marker
-       inkscape:isstock="true"
-       style="overflow:visible"
-       id="marker18097"
-       refX="0"
-       refY="0"
-       orient="auto"
-       inkscape:stockid="Arrow1Mstart">
-      <path
-         transform="matrix(0.4,0,0,0.4,4,0)"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         id="path18095"
-         inkscape:connector-curvature="0" />
-    </marker>
-    <marker
-       inkscape:isstock="true"
-       style="overflow:visible"
-       id="marker17835"
-       refX="0"
-       refY="0"
-       orient="auto"
-       inkscape:stockid="Arrow1Mstart">
-      <path
-         transform="matrix(0.4,0,0,0.4,4,0)"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         id="path17833"
-         inkscape:connector-curvature="0" />
-    </marker>
-    <marker
-       inkscape:stockid="Arrow1Mend"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="marker17557"
-       style="overflow:visible"
-       inkscape:isstock="true">
-      <path
-         id="path17555"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         transform="matrix(-0.4,0,0,-0.4,-4,0)"
-         inkscape:connector-curvature="0" />
-    </marker>
-    <marker
-       inkscape:isstock="true"
-       style="overflow:visible"
-       id="marker17291"
-       refX="0"
-       refY="0"
-       orient="auto"
-       inkscape:stockid="Arrow1Mend"
-       inkscape:collect="always">
-      <path
-         transform="matrix(-0.4,0,0,-0.4,-4,0)"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         id="path17289"
-         inkscape:connector-curvature="0" />
-    </marker>
-    <marker
-       inkscape:stockid="Arrow1Mend"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="marker17033"
-       style="overflow:visible"
-       inkscape:isstock="true"
-       inkscape:collect="always">
-      <path
-         id="path17031"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         transform="matrix(-0.4,0,0,-0.4,-4,0)"
-         inkscape:connector-curvature="0" />
-    </marker>
-    <marker
-       inkscape:isstock="true"
-       style="overflow:visible"
-       id="marker16647"
-       refX="0"
-       refY="0"
-       orient="auto"
-       inkscape:stockid="Arrow1Mend"
-       inkscape:collect="always">
-      <path
-         transform="matrix(-0.4,0,0,-0.4,-4,0)"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         id="path16645"
-         inkscape:connector-curvature="0" />
-    </marker>
-    <marker
-       inkscape:isstock="true"
-       style="overflow:visible"
-       id="marker16415"
-       refX="0"
-       refY="0"
-       orient="auto"
-       inkscape:stockid="Arrow1Mend">
-      <path
-         transform="matrix(-0.4,0,0,-0.4,-4,0)"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         id="path16413"
-         inkscape:connector-curvature="0" />
-    </marker>
-    <marker
-       inkscape:isstock="true"
-       style="overflow:visible"
-       id="marker16189"
-       refX="0"
-       refY="0"
-       orient="auto"
-       inkscape:stockid="Arrow1Mend">
-      <path
-         transform="matrix(-0.4,0,0,-0.4,-4,0)"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         id="path16187"
-         inkscape:connector-curvature="0" />
-    </marker>
-    <marker
-       inkscape:stockid="Arrow1Mend"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="marker15937"
-       style="overflow:visible"
-       inkscape:isstock="true"
-       inkscape:collect="always">
-      <path
-         id="path15935"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         transform="matrix(-0.4,0,0,-0.4,-4,0)"
-         inkscape:connector-curvature="0" />
-    </marker>
-    <marker
-       inkscape:stockid="Arrow1Mstart"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="marker12928"
-       style="overflow:visible"
-       inkscape:isstock="true"
-       inkscape:collect="always">
-      <path
-         id="path12926"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         transform="matrix(0.4,0,0,0.4,4,0)"
-         inkscape:connector-curvature="0" />
-    </marker>
-    <marker
-       inkscape:isstock="true"
-       style="overflow:visible"
-       id="marker11520"
-       refX="0"
-       refY="0"
-       orient="auto"
-       inkscape:stockid="Arrow1Mend"
-       inkscape:collect="always">
-      <path
-         transform="matrix(-0.4,0,0,-0.4,-4,0)"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         id="path11518"
-         inkscape:connector-curvature="0" />
-    </marker>
-    <marker
-       inkscape:stockid="Arrow1Mend"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="marker11322"
-       style="overflow:visible"
-       inkscape:isstock="true"
-       inkscape:collect="always">
-      <path
-         id="path11320"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         transform="matrix(-0.4,0,0,-0.4,-4,0)"
-         inkscape:connector-curvature="0" />
-    </marker>
-    <marker
-       inkscape:isstock="true"
-       style="overflow:visible"
-       id="marker11128"
-       refX="0"
-       refY="0"
-       orient="auto"
-       inkscape:stockid="Arrow1Mend"
-       inkscape:collect="always">
-      <path
-         transform="matrix(-0.4,0,0,-0.4,-4,0)"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         id="path11126"
-         inkscape:connector-curvature="0" />
-    </marker>
-    <marker
-       inkscape:isstock="true"
-       style="overflow:visible"
-       id="marker10596"
-       refX="0"
-       refY="0"
-       orient="auto"
-       inkscape:stockid="Arrow1Mend"
-       inkscape:collect="always">
-      <path
-         transform="matrix(-0.4,0,0,-0.4,-4,0)"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         id="path10594"
-         inkscape:connector-curvature="0" />
-    </marker>
-    <marker
-       inkscape:stockid="Arrow1Mend"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="marker9866"
-       style="overflow:visible"
-       inkscape:isstock="true"
-       inkscape:collect="always">
-      <path
-         id="path9864"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         transform="matrix(-0.4,0,0,-0.4,-4,0)"
-         inkscape:connector-curvature="0" />
-    </marker>
-    <marker
-       inkscape:stockid="Arrow1Mend"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="marker9512"
-       style="overflow:visible"
-       inkscape:isstock="true"
-       inkscape:collect="always">
-      <path
-         id="path9510"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         transform="matrix(-0.4,0,0,-0.4,-4,0)"
-         inkscape:connector-curvature="0" />
-    </marker>
-    <marker
-       inkscape:isstock="true"
-       style="overflow:visible"
-       id="marker8090"
-       refX="0"
-       refY="0"
-       orient="auto"
-       inkscape:stockid="Arrow1Mend"
-       inkscape:collect="always">
-      <path
-         transform="matrix(-0.4,0,0,-0.4,-4,0)"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         id="path8088"
-         inkscape:connector-curvature="0" />
-    </marker>
-    <marker
-       inkscape:stockid="Arrow1Mend"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="marker7360"
-       style="overflow:visible"
-       inkscape:isstock="true"
-       inkscape:collect="always">
-      <path
-         id="path7358"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         transform="matrix(-0.4,0,0,-0.4,-4,0)"
-         inkscape:connector-curvature="0" />
-    </marker>
-    <marker
-       inkscape:isstock="true"
-       style="overflow:visible"
-       id="marker7066"
-       refX="0"
-       refY="0"
-       orient="auto"
-       inkscape:stockid="Arrow1Mstart"
-       inkscape:collect="always">
-      <path
-         transform="matrix(0.4,0,0,0.4,4,0)"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         id="path7064"
-         inkscape:connector-curvature="0" />
-    </marker>
-    <marker
-       inkscape:stockid="Arrow1Mend"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="marker5106"
-       style="overflow:visible"
-       inkscape:isstock="true">
-      <path
-         id="path5104"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         transform="matrix(-0.4,0,0,-0.4,-4,0)"
-         inkscape:connector-curvature="0" />
-    </marker>
-    <marker
-       inkscape:isstock="true"
-       style="overflow:visible"
-       id="marker7066-0"
-       refX="0"
-       refY="0"
-       orient="auto"
-       inkscape:stockid="Arrow1Mstart">
-      <path
-         inkscape:connector-curvature="0"
-         transform="matrix(0.4,0,0,0.4,4,0)"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         id="path7064-8" />
-    </marker>
-    <marker
-       inkscape:isstock="true"
-       style="overflow:visible"
-       id="marker7208-7"
-       refX="0"
-       refY="0"
-       orient="auto"
-       inkscape:stockid="Arrow1Mend"
-       inkscape:collect="always">
-      <path
-         inkscape:connector-curvature="0"
-         transform="matrix(-0.4,0,0,-0.4,-4,0)"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         id="path7206-1" />
-    </marker>
-    <marker
-       inkscape:stockid="Arrow1Mend"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="marker17033-3"
-       style="overflow:visible"
-       inkscape:isstock="true"
-       inkscape:collect="always">
-      <path
-         id="path17031-7"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         transform="matrix(-0.4,0,0,-0.4,-4,0)"
-         inkscape:connector-curvature="0" />
-    </marker>
-    <marker
-       inkscape:stockid="Arrow1Mend"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="marker17033-3-01"
-       style="overflow:visible"
-       inkscape:isstock="true"
-       inkscape:collect="always">
-      <path
-         id="path17031-7-8"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         transform="matrix(-0.4,0,0,-0.4,-4,0)"
-         inkscape:connector-curvature="0" />
-    </marker>
-    <marker
-       inkscape:stockid="Arrow1Mend"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="marker17033-3-37"
-       style="overflow:visible"
-       inkscape:isstock="true"
-       inkscape:collect="always">
-      <path
-         id="path17031-7-0"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         transform="matrix(-0.4,0,0,-0.4,-4,0)"
-         inkscape:connector-curvature="0" />
-    </marker>
-    <marker
-       inkscape:stockid="Arrow1Mend"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="marker17033-3-37-7"
-       style="overflow:visible"
-       inkscape:isstock="true"
-       inkscape:collect="always">
-      <path
-         id="path17031-7-0-9"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         transform="matrix(-0.4,0,0,-0.4,-4,0)"
-         inkscape:connector-curvature="0" />
-    </marker>
-    <marker
-       inkscape:stockid="Arrow1Mend"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="marker17033-3-37-7-8"
-       style="overflow:visible"
-       inkscape:isstock="true"
-       inkscape:collect="always">
-      <path
-         id="path17031-7-0-9-7"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         transform="matrix(-0.4,0,0,-0.4,-4,0)"
-         inkscape:connector-curvature="0" />
-    </marker>
-    <marker
-       inkscape:stockid="Arrow1Mend"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="marker17033-3-01-3"
-       style="overflow:visible"
-       inkscape:isstock="true"
-       inkscape:collect="always">
-      <path
-         id="path17031-7-8-44"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         transform="matrix(-0.4,0,0,-0.4,-4,0)"
-         inkscape:connector-curvature="0" />
-    </marker>
-    <marker
-       inkscape:stockid="Arrow1Mstart"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="Arrow1Mstart-3"
-       style="overflow:visible"
-       inkscape:isstock="true"
-       inkscape:collect="always">
-      <path
-         id="path1382-1"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         transform="matrix(0.4,0,0,0.4,4,0)"
-         inkscape:connector-curvature="0" />
-    </marker>
-    <marker
-       inkscape:stockid="Arrow1Mend"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="marker5200-6"
-       style="overflow:visible"
-       inkscape:isstock="true">
-      <path
-         id="path5198-1"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         transform="matrix(-0.4,0,0,-0.4,-4,0)"
-         inkscape:connector-curvature="0" />
-    </marker>
-    <marker
-       inkscape:stockid="Arrow1Mend"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="marker17033-3-01-3-1"
-       style="overflow:visible"
-       inkscape:isstock="true"
-       inkscape:collect="always">
-      <path
-         id="path17031-7-8-44-8"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         transform="matrix(-0.4,0,0,-0.4,-4,0)"
-         inkscape:connector-curvature="0" />
-    </marker>
-    <marker
-       inkscape:stockid="Arrow1Mend"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="marker17033-3-37-7-8-7"
-       style="overflow:visible"
-       inkscape:isstock="true"
-       inkscape:collect="always">
-      <path
-         id="path17031-7-0-9-7-8"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         transform="matrix(-0.4,0,0,-0.4,-4,0)"
-         inkscape:connector-curvature="0" />
-    </marker>
-    <marker
-       inkscape:stockid="Arrow1Mend"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="marker17033-3-37-7-8-7-7"
-       style="overflow:visible"
-       inkscape:isstock="true"
-       inkscape:collect="always">
-      <path
-         id="path17031-7-0-9-7-8-5"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         transform="matrix(-0.4,0,0,-0.4,-4,0)"
-         inkscape:connector-curvature="0" />
-    </marker>
-    <marker
-       inkscape:stockid="Arrow1Mend"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="marker17033-3-37-7-8-7-7-5"
-       style="overflow:visible"
-       inkscape:isstock="true"
-       inkscape:collect="always">
-      <path
-         id="path17031-7-0-9-7-8-5-5"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         transform="matrix(-0.4,0,0,-0.4,-4,0)"
-         inkscape:connector-curvature="0" />
-    </marker>
-    <marker
-       inkscape:stockid="Arrow1Mend"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="marker17033-3-37-7-8-7-7-0"
-       style="overflow:visible"
-       inkscape:isstock="true"
-       inkscape:collect="always">
-      <path
-         id="path17031-7-0-9-7-8-5-2"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         transform="matrix(-0.4,0,0,-0.4,-4,0)"
-         inkscape:connector-curvature="0" />
-    </marker>
-    <marker
-       inkscape:stockid="Arrow1Mend"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="marker17033-3-37-7-8-7-7-0-51"
-       style="overflow:visible"
-       inkscape:isstock="true"
-       inkscape:collect="always">
-      <path
-         id="path17031-7-0-9-7-8-5-2-5"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         transform="matrix(-0.4,0,0,-0.4,-4,0)"
-         inkscape:connector-curvature="0" />
-    </marker>
-    <marker
-       inkscape:stockid="Arrow1Mend"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="marker9512-2"
-       style="overflow:visible"
-       inkscape:isstock="true"
-       inkscape:collect="always">
-      <path
-         id="path9510-3"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         transform="matrix(-0.4,0,0,-0.4,-4,0)"
-         inkscape:connector-curvature="0" />
-    </marker>
-  </defs>
-  <sodipodi:namedview
-     id="base"
-     pagecolor="#ffffff"
-     bordercolor="#666666"
-     borderopacity="1.0"
-     inkscape:pageopacity="0.0"
-     inkscape:pageshadow="2"
-     inkscape:zoom="2"
-     inkscape:cx="802.95319"
-     inkscape:cy="160.46629"
-     inkscape:document-units="px"
-     inkscape:current-layer="layer1"
-     showgrid="false"
-     inkscape:snap-center="true"
-     inkscape:snap-object-midpoints="true"
-     inkscape:snap-text-baseline="true"
-     inkscape:window-width="1920"
-     inkscape:window-height="1137"
-     inkscape:window-x="478"
-     inkscape:window-y="424"
-     inkscape:window-maximized="0"
-     showguides="false"
-     fit-margin-top="1"
-     fit-margin-right="1"
-     fit-margin-bottom="1"
-     fit-margin-left="1"
-     units="in"
-     inkscape:snap-others="true"
-     inkscape:snap-nodes="true"
-     inkscape:object-nodes="true"
-     height="7.5in">
-    <inkscape:grid
-       type="xygrid"
-       id="grid817"
-       originx="153.62068"
-       originy="-783.5" />
-  </sodipodi:namedview>
-  <metadata
-     id="metadata5">
-    <rdf:RDF>
-      <cc:Work
-         rdf:about="">
-        <dc:format>image/svg+xml</dc:format>
-        <dc:type
-           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
-        <dc:title />
-      </cc:Work>
-    </rdf:RDF>
-  </metadata>
-  <g
-     inkscape:label="Layer 1"
-     inkscape:groupmode="layer"
-     id="layer1"
-     transform="translate(38.615418,2.1124474)">
-    <rect
-       style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:0.89574087;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
-       id="rect815-1-2-1-2-4"
-       width="220.00002"
-       height="19.999928"
-       x="-24.994745"
-       y="269.3876" />
-    <rect
-       style="fill:#ffffff;fill-opacity:1;stroke:#ff0000;stroke-width:0.89574087;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
-       id="rect815-1-2-3-9-8"
-       width="220.00002"
-       height="19.999928"
-       x="-24.994741"
-       y="159.38759" />
-    <rect
-       style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:0.89574087;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
-       id="rect815-1-2-1"
-       width="220.00002"
-       height="19.999928"
-       x="-24.994745"
-       y="129.38759" />
-    <rect
-       style="fill:#ffffff;fill-opacity:1;stroke:#ff0000;stroke-width:0.89574087;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
-       id="rect815-1-2-3-9"
-       width="220.00002"
-       height="19.999928"
-       x="-24.994745"
-       y="99.387589" />
-    <rect
-       style="fill:#ffffff;fill-opacity:1;stroke:#ff0000;stroke-width:0.89574087;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
-       id="rect815-1-2-3"
-       width="220.00002"
-       height="19.999928"
-       x="-24.994745"
-       y="59.387589" />
-    <rect
-       style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:0.89574087;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
-       id="rect815-1"
-       width="220.00002"
-       height="19.999928"
-       x="-24.994745"
-       y="-0.6124118" />
-    <rect
-       style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:0.89574087;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
-       id="rect815-1-2"
-       width="220.00002"
-       height="19.999928"
-       x="-24.994738"
-       y="29.387552" />
-    <text
-       id="text823"
-       y="74.351746"
-       x="84.9011"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.33333302px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.26999986;stroke-miterlimit:4;stroke-dasharray:none"
-       xml:space="preserve"><tspan
-         id="tspan825"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.33333302px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke:none;stroke-width:1.26999986;stroke-miterlimit:4;stroke-dasharray:none"
-         y="74.351746"
-         x="84.9011"
-         sodipodi:role="line">Vertex Shader</tspan></text>
-    <text
-       id="text823-4"
-       y="14.133646"
-       x="84.634171"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.33333302px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.26999986"
-       xml:space="preserve"><tspan
-         id="tspan825-6"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.33333302px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:1.26999986"
-         y="14.133646"
-         x="84.634171"
-         sodipodi:role="line">Draw</tspan></text>
-    <text
-       id="text823-4-2"
-       y="43.111511"
-       x="84.539764"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.33333302px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.26999986"
-       xml:space="preserve"><tspan
-         id="tspan825-6-0"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.33333302px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:1.26999986"
-         y="43.111511"
-         x="84.539764"
-         sodipodi:role="line">Input Assembler</tspan></text>
-    <text
-       id="text823-7"
-       y="114.35175"
-       x="84.985733"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.33333302px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.26999986;stroke-miterlimit:4;stroke-dasharray:none"
-       xml:space="preserve"><tspan
-         id="tspan825-4"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.33333302px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke:none;stroke-width:1.26999986;stroke-miterlimit:4;stroke-dasharray:none"
-         y="114.35175"
-         x="84.985733"
-         sodipodi:role="line">Tessellation Control Shader</tspan></text>
-    <text
-       id="text823-4-2-6-3"
-       y="144.35175"
-       x="84.985733"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.33333302px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.26999986"
-       xml:space="preserve"><tspan
-         id="tspan825-6-0-1-5"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.33333302px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:1.26999986"
-         y="144.35175"
-         x="84.985733"
-         sodipodi:role="line">Tessellation Primitive Generator</tspan></text>
-    <text
-       id="text823-7-0"
-       y="174.35175"
-       x="84.985733"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.33333302px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.26999986;stroke-miterlimit:4;stroke-dasharray:none"
-       xml:space="preserve"><tspan
-         id="tspan825-4-7"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.33333302px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke:none;stroke-width:1.26999986;stroke-miterlimit:4;stroke-dasharray:none"
-         y="174.35175"
-         x="84.985733"
-         sodipodi:role="line">Tessellation Evaluation Shader</tspan></text>
-    <text
-       id="text823-4-2-8"
-       y="284.1662"
-       x="84.930397"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.33333302px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.26999986"
-       xml:space="preserve"><tspan
-         id="tspan825-6-0-9"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.33333302px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:1.26999986"
-         y="284.1662"
-         x="84.930397"
-         sodipodi:role="line">Rasterization</tspan></text>
-    <path
-       style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker5106)"
-       d="m 85.005262,89.387553 -119.999999,-10e-7 V 229.38755 h 120"
-       id="path4474"
-       inkscape:connector-curvature="0"
-       sodipodi:nodetypes="ccc" />
-    <rect
-       style="fill:#808080;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
-       id="rect815-1-4-3-6-1"
-       width="220"
-       height="20"
-       x="245.00526"
-       y="-0.61244744" />
-    <text
-       id="text823-4-2-9-4-7"
-       y="14.384297"
-       x="354.53976"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.33333302px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.26999986"
-       xml:space="preserve"><tspan
-         id="tspan825-6-0-2-5-6"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.33333302px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:1.26999986"
-         y="14.384297"
-         x="354.53976"
-         sodipodi:role="line">Indirect Buffer</tspan></text>
-    <path
-       style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker7360)"
-       d="m 235.00526,309.38755 v 60 h -40"
-       id="path7350"
-       inkscape:connector-curvature="0"
-       sodipodi:nodetypes="ccc" />
-    <path
-       style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker8090)"
-       d="m 245.00526,344.38755 h -5 v -5 h -10 v 5 h -35"
-       id="path8837"
-       inkscape:connector-curvature="0"
-       sodipodi:nodetypes="cccccc" />
-    <rect
-       style="fill:none;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:4, 4;stroke-dashoffset:0;stroke-opacity:1"
-       id="rect8983"
-       width="220"
-       height="165"
-       x="245.00526"
-       y="99.38755" />
-    <text
-       id="text823-4-2-9-4-7-9-85"
-       y="112.9813"
-       x="354.63092"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.33333302px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.26999986"
-       xml:space="preserve"><tspan
-         id="tspan825-6-0-2-5-6-26-7"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.33333302px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:1.26999986"
-         y="112.9813"
-         x="354.63092"
-         sodipodi:role="line">Descriptor Sets</tspan></text>
-    <path
-       style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-start:url(#marker7066-0);marker-end:url(#marker7208-7)"
-       d="m 245.00526,399.38755 h -50"
-       id="path7056-3"
-       inkscape:connector-curvature="0"
-       sodipodi:nodetypes="cc" />
-    <path
-       style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker9512)"
-       d="m 245.00526,9.3875524 h -50"
-       id="path9502"
-       inkscape:connector-curvature="0"
-       sodipodi:nodetypes="cc" />
-    <path
-       style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker9866)"
-       d="m 245.00526,44.387553 h -50"
-       id="path9856"
-       inkscape:connector-curvature="0"
-       sodipodi:nodetypes="cc" />
-    <path
-       style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-start:url(#marker7066);marker-end:url(#marker10596)"
-       d="m 245.00526,309.38755 h -20 v -5 h -10 v 5 h -20"
-       id="path10568"
-       inkscape:connector-curvature="0"
-       sodipodi:nodetypes="cccccc" />
-    <path
-       style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       d="m 245.00526,64.387553 h -25 v -20"
-       id="path11116"
-       inkscape:connector-curvature="0"
-       sodipodi:nodetypes="ccc" />
-    <path
-       style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker11128)"
-       d="m 220.00526,109.38755 h -25"
-       id="path11118"
-       inkscape:connector-curvature="0"
-       sodipodi:nodetypes="cc" />
-    <path
-       style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker11322)"
-       d="m 220.00526,169.38755 h -25"
-       id="path11312"
-       inkscape:connector-curvature="0"
-       sodipodi:nodetypes="cc" />
-    <path
-       style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker11520)"
-       d="m 220.00526,209.38755 h -25"
-       id="path11510"
-       inkscape:connector-curvature="0"
-       sodipodi:nodetypes="cc" />
-    <path
-       style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-start:url(#marker12928);marker-end:url(#marker15937)"
-       d="m 195.00526,334.38755 h 25 l 0,-264.999997 h -25"
-       id="path15909"
-       inkscape:connector-curvature="0"
-       sodipodi:nodetypes="cccc" />
-    <path
-       style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       d="m 250.00526,129.38755 h -30"
-       id="path16167"
-       inkscape:connector-curvature="0"
-       sodipodi:nodetypes="cc" />
-    <path
-       style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       d="m 250.00526,149.38755 h -30"
-       id="path16169"
-       inkscape:connector-curvature="0"
-       sodipodi:nodetypes="cc" />
-    <path
-       style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       d="m 250.00526,169.38755 h -30"
-       id="path16171"
-       inkscape:connector-curvature="0"
-       sodipodi:nodetypes="cc" />
-    <path
-       style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       d="m 250.00526,189.38755 h -30"
-       id="path16173"
-       inkscape:connector-curvature="0"
-       sodipodi:nodetypes="cc" />
-    <path
-       style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker16647)"
-       d="m 220.00526,209.38755 h 30"
-       id="path16175"
-       inkscape:connector-curvature="0"
-       sodipodi:nodetypes="cc" />
-    <path
-       style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker16189)"
-       d="m 220.00526,229.38755 h 30"
-       id="path16177"
-       inkscape:connector-curvature="0"
-       sodipodi:nodetypes="cc" />
-    <path
-       style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker16415)"
-       d="m 220.00526,249.38755 h 30"
-       id="path16179"
-       inkscape:connector-curvature="0"
-       sodipodi:nodetypes="cc" />
-    <path
-       inkscape:connector-curvature="0"
-       id="path17023"
-       d="M 625.00526,19.387552 V 169.38755"
-       style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker17033)"
-       sodipodi:nodetypes="cc" />
-    <path
-       inkscape:connector-curvature="0"
-       id="path17281"
-       d="m 490.00526,179.38755 h 25"
-       style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker17291)"
-       sodipodi:nodetypes="cc" />
-    <path
-       inkscape:connector-curvature="0"
-       id="path17547"
-       d="m 460.00526,129.38755 h 30 v 120 h -30"
-       style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker17557)"
-       sodipodi:nodetypes="cccc" />
-    <path
-       inkscape:connector-curvature="0"
-       id="path17817"
-       d="m 460.00526,149.38755 h 30"
-       style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       sodipodi:nodetypes="cc" />
-    <path
-       inkscape:connector-curvature="0"
-       id="path17819"
-       d="m 460.00526,169.38755 h 30"
-       style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       sodipodi:nodetypes="cc" />
-    <path
-       inkscape:connector-curvature="0"
-       id="path17821"
-       d="m 460.00526,189.38755 h 30"
-       style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       sodipodi:nodetypes="cc" />
-    <path
-       inkscape:connector-curvature="0"
-       id="path17823"
-       d="m 460.00526,209.38755 h 30"
-       style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-start:url(#marker18097)"
-       sodipodi:nodetypes="cc" />
-    <path
-       inkscape:connector-curvature="0"
-       id="path17825"
-       d="m 460.00526,229.38755 h 30"
-       style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-start:url(#marker17835)"
-       sodipodi:nodetypes="cc" />
-    <rect
-       style="fill:none;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:4, 4;stroke-dashoffset:0;stroke-opacity:1"
-       id="rect8983-1"
-       width="220.00002"
-       height="115.00001"
-       x="515.00525"
-       y="299.38754" />
-    <text
-       id="text823-4-2-9-4-7-9-85-3"
-       y="318.07571"
-       x="624.95642"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.33333302px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.26999986"
-       xml:space="preserve"><tspan
-         id="tspan825-6-0-2-5-6-26-7-3"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.33333302px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:1.26999986"
-         y="318.07571"
-         x="624.95642"
-         sodipodi:role="line">Legend</tspan></text>
-    <path
-       inkscape:connector-curvature="0"
-       id="path17023-1"
-       d="m 85.005263,19.387552 v 9.728741"
-       style="fill:none;stroke:#000000;stroke-width:0.87524033;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker17033-3)" />
-    <path
-       inkscape:connector-curvature="0"
-       id="path17023-1-3"
-       d="m 85.005263,79.387552 v 20"
-       style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker17033-3-01)"
-       sodipodi:nodetypes="cc" />
-    <path
-       inkscape:connector-curvature="0"
-       id="path17023-1-4"
-       d="m 85.005263,49.387552 v 9.728741"
-       style="fill:none;stroke:#000000;stroke-width:0.87524033;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker17033-3-37)" />
-    <path
-       inkscape:connector-curvature="0"
-       id="path17023-1-4-0"
-       d="m 85.005263,119.38755 v 9.72874"
-       style="fill:none;stroke:#000000;stroke-width:0.87524033;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker17033-3-37-7)" />
-    <path
-       inkscape:connector-curvature="0"
-       id="path17023-1-4-0-9"
-       d="m 85.005263,149.52318 v 9.72874"
-       style="fill:none;stroke:#000000;stroke-width:0.87524033;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker17033-3-37-7-8)" />
-    <rect
-       style="fill:#ffffff;fill-opacity:1;stroke:#ff0000;stroke-width:0.89574087;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
-       id="rect815-1-2-3-9-8-4"
-       width="220.00002"
-       height="19.999928"
-       x="-24.994745"
-       y="199.38759" />
-    <text
-       id="text823-7-9-09"
-       y="213.11151"
-       x="84.611382"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.33333302px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.26999986;stroke-miterlimit:4;stroke-dasharray:none"
-       xml:space="preserve"><tspan
-         id="tspan825-4-0-5"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.33333302px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke:none;stroke-width:1.26999986;stroke-miterlimit:4;stroke-dasharray:none"
-         y="213.11151"
-         x="84.611382"
-         sodipodi:role="line">Geometry Shader</tspan></text>
-    <path
-       inkscape:connector-curvature="0"
-       id="path17023-1-3-2"
-       d="m 85.005265,179.38755 v 20"
-       style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker17033-3-01-3)"
-       sodipodi:nodetypes="cc" />
-    <path
-       style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-start:url(#Arrow1Mstart-3);marker-end:url(#marker5200-6)"
-       d="m 85.005263,189.38755 h -120"
-       id="path4476-0"
-       inkscape:connector-curvature="0"
-       sodipodi:nodetypes="cc" />
-    <rect
-       style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:0.89574087;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
-       id="rect815-1-2-1-2"
-       width="220.00002"
-       height="19.999928"
-       x="-24.994741"
-       y="239.38759" />
-    <text
-       id="text823-4-8-5"
-       y="252.89015"
-       x="85.522842"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.33333302px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.26999986"
-       xml:space="preserve"><tspan
-         id="tspan825-6-9-2"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.33333302px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:1.26999986"
-         y="252.89015"
-         x="85.522842"
-         sodipodi:role="line">Vertex Post-Processing</tspan></text>
-    <path
-       inkscape:connector-curvature="0"
-       id="path17023-1-3-2-4"
-       d="m 85.005263,219.38755 v 20"
-       style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker17033-3-01-3-1)"
-       sodipodi:nodetypes="cc" />
-    <path
-       inkscape:connector-curvature="0"
-       id="path17023-1-4-0-9-1"
-       d="m 85.005265,259.52318 v 9.72874"
-       style="fill:none;stroke:#000000;stroke-width:0.87524033;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker17033-3-37-7-8-7)" />
-    <path
-       inkscape:connector-curvature="0"
-       id="path17023-1-4-0-9-1-8"
-       d="m 85.005265,289.52318 v 9.72874"
-       style="fill:none;stroke:#000000;stroke-width:0.87524033;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker17033-3-37-7-8-7-7)" />
-    <rect
-       style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:0.89574087;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
-       id="rect815-1-2-1-2-4-1"
-       width="220.00002"
-       height="19.999928"
-       x="-24.994745"
-       y="299.3876" />
-    <rect
-       style="fill:#ffffff;fill-opacity:1;stroke:#ff0000;stroke-width:0.89574087;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
-       id="rect815-1-2-3-9-8-4-1"
-       width="220.00002"
-       height="19.999928"
-       x="-24.994745"
-       y="329.3876" />
-    <path
-       inkscape:connector-curvature="0"
-       id="path17023-1-4-0-9-1-8-6"
-       d="m 85.005265,319.52318 v 9.72874"
-       style="fill:none;stroke:#000000;stroke-width:0.87524033;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker17033-3-37-7-8-7-7-5)" />
-    <path
-       inkscape:connector-curvature="0"
-       id="path17023-1-4-0-9-1-8-3"
-       d="m 85.005265,349.52318 v 9.72874"
-       style="fill:none;stroke:#000000;stroke-width:0.87524033;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker17033-3-37-7-8-7-7-0)" />
-    <text
-       id="text823-4-5-3"
-       y="313.07571"
-       x="84.63092"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.33333302px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.26999986"
-       xml:space="preserve"><tspan
-         id="tspan825-6-7-4"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.33333302px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:1.26999986"
-         y="313.07571"
-         x="84.63092"
-         sodipodi:role="line">Early Per-Fragment Tests</tspan></text>
-    <text
-       id="text823-7-9-0-6"
-       y="343.07571"
-       x="84.334686"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.33333302px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.26999986;stroke-miterlimit:4;stroke-dasharray:none"
-       xml:space="preserve"><tspan
-         id="tspan825-4-0-0-3"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.33333302px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke:none;stroke-width:1.26999986;stroke-miterlimit:4;stroke-dasharray:none"
-         y="343.07571"
-         x="84.334686"
-         sodipodi:role="line">Fragment Shader</tspan></text>
-    <rect
-       style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:0.89574087;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
-       id="rect815-1-2-1-2-4-1-2"
-       width="220.00002"
-       height="19.999928"
-       x="-24.994745"
-       y="359.3876" />
-    <text
-       id="text823-4-5-5-7"
-       y="372.8576"
-       x="84.63092"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.33333302px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.26999986"
-       xml:space="preserve"><tspan
-         id="tspan825-6-7-7-9"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.33333302px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:1.26999986"
-         y="372.8576"
-         x="84.63092"
-         sodipodi:role="line">Late Per-Fragment Tests</tspan></text>
-    <path
-       inkscape:connector-curvature="0"
-       id="path17023-1-4-0-9-1-8-3-2"
-       d="m 85.005265,379.52318 v 9.72874"
-       style="fill:none;stroke:#000000;stroke-width:0.87524033;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker17033-3-37-7-8-7-7-0-51)" />
-    <rect
-       style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:0.89574087;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
-       id="rect815-1-2-1-2-4-1-2-2"
-       width="220.00002"
-       height="19.999928"
-       x="-24.994745"
-       y="389.3876" />
-    <text
-       id="text823-4-2-9-4-3"
-       y="403.07571"
-       x="84.956436"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.33333302px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.26999986"
-       xml:space="preserve"><tspan
-         id="tspan825-6-0-2-5-4"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.33333302px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:1.26999986"
-         y="403.07571"
-         x="84.956436"
-         sodipodi:role="line">Blending</tspan></text>
-    <rect
-       style="fill:#808080;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
-       id="rect815-1-4-3-6-1-0"
-       width="220"
-       height="20"
-       x="245.00526"
-       y="59.387554" />
-    <rect
-       style="fill:#808080;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
-       id="rect815-1-4-3-6-1-6"
-       width="220"
-       height="20"
-       x="245.00526"
-       y="39.387554" />
-    <text
-       id="text823-4-2-9-4-7-1"
-       y="54.384296"
-       x="354.53976"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.33333302px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.26999986"
-       xml:space="preserve"><tspan
-         id="tspan825-6-0-2-5-6-2"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.33333302px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:1.26999986"
-         y="54.384296"
-         x="354.53976"
-         sodipodi:role="line">Index Buffer</tspan></text>
-    <text
-       id="text823-4-2-9-4-7-3"
-       y="74.3843"
-       x="355.19733"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.33333302px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.26999986"
-       xml:space="preserve"><tspan
-         id="tspan825-6-0-2-5-6-9"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.33333302px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:1.26999986"
-         y="74.3843"
-         x="355.19733"
-         sodipodi:role="line">Vertex Buffers</tspan></text>
-    <rect
-       style="fill:#808080;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
-       id="rect815-1-4-3-6-1-6-7"
-       width="210.00002"
-       height="19.999994"
-       x="250.00526"
-       y="119.38755" />
-    <rect
-       style="fill:#808080;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
-       id="rect815-1-4-3-6-1-6-7-2"
-       width="210.00002"
-       height="19.999994"
-       x="250.00526"
-       y="139.38754" />
-    <rect
-       style="fill:#808080;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
-       id="rect815-1-4-3-6-1-6-7-3"
-       width="210.00002"
-       height="19.999994"
-       x="250.00526"
-       y="159.38754" />
-    <rect
-       style="fill:#808080;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
-       id="rect815-1-4-3-6-1-6-7-1"
-       width="210.00002"
-       height="19.999994"
-       x="250.00526"
-       y="179.38754" />
-    <rect
-       style="fill:#808080;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
-       id="rect815-1-4-3-6-1-6-7-34"
-       width="210.00002"
-       height="19.999994"
-       x="250.00526"
-       y="199.38757" />
-    <rect
-       style="fill:#808080;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
-       id="rect815-1-4-3-6-1-6-7-7"
-       width="210.00002"
-       height="19.999994"
-       x="250.00526"
-       y="219.38757" />
-    <rect
-       style="fill:#808080;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
-       id="rect815-1-4-3-6-1-6-7-5"
-       width="210.00002"
-       height="19.999994"
-       x="250.00526"
-       y="239.38757" />
-    <text
-       id="text823-4-2-9-4-7-9-65"
-       y="134.35175"
-       x="354.63092"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.33333302px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.26999986"
-       xml:space="preserve"><tspan
-         id="tspan825-6-0-2-5-6-26-92"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.33333302px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:1.26999986"
-         y="134.35175"
-         x="354.63092"
-         sodipodi:role="line">Push Constants</tspan></text>
-    <text
-       id="text823-4-2-9-4-7-9-3-0"
-       y="154.38429"
-       x="354.70255"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.33333302px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.26999986"
-       xml:space="preserve"><tspan
-         id="tspan825-6-0-2-5-6-26-9-7"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.33333302px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:1.26999986"
-         y="154.38429"
-         x="354.70255"
-         sodipodi:role="line">Uniform Buffers</tspan></text>
-    <text
-       id="text823-4-2-9-4-7-9-2-2"
-       y="174.38429"
-       x="354.70255"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.33333302px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.26999986"
-       xml:space="preserve"><tspan
-         id="tspan825-6-0-2-5-6-26-4-3"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.33333302px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:1.26999986"
-         y="174.38429"
-         x="354.70255"
-         sodipodi:role="line">Uniform Texel Buffers</tspan></text>
-    <text
-       id="text823-4-2-9-4-7-9-8-2"
-       y="193.0757"
-       x="354.84579"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.33333302px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.26999986"
-       xml:space="preserve"><tspan
-         id="tspan825-6-0-2-5-6-26-5-1"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.33333302px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:1.26999986"
-         y="193.0757"
-         x="354.84579"
-         sodipodi:role="line">Sampled Images</tspan></text>
-    <text
-       id="text823-4-2-9-4-7-9-8-0-8"
-       y="213.10826"
-       x="354.84579"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.33333302px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.26999986"
-       xml:space="preserve"><tspan
-         id="tspan825-6-0-2-5-6-26-5-4-5"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.33333302px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:1.26999986"
-         y="213.10826"
-         x="354.84579"
-         sodipodi:role="line">Storage Buffers</tspan></text>
-    <text
-       id="text823-4-2-9-4-7-9-8-8-1"
-       y="233.10826"
-       x="354.84579"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.33333302px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.26999986"
-       xml:space="preserve"><tspan
-         id="tspan825-6-0-2-5-6-26-5-5-5"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.33333302px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:1.26999986"
-         y="233.10826"
-         x="354.84579"
-         sodipodi:role="line">Storage Texel Buffers</tspan></text>
-    <text
-       id="text823-4-2-9-4-7-9-8-05-4"
-       y="252.9455"
-       x="354.84579"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.33333302px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.26999986"
-       xml:space="preserve"><tspan
-         id="tspan825-6-0-2-5-6-26-5-3-6"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.33333302px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:1.26999986"
-         y="252.9455"
-         x="354.84579"
-         sodipodi:role="line">Storage Images</tspan></text>
-    <rect
-       style="fill:#ffffff;fill-opacity:1;stroke:#ff0000;stroke-width:0.89574087;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
-       id="rect815-1-2-3-0"
-       width="220.00002"
-       height="19.999928"
-       x="515.00525"
-       y="169.38756" />
-    <text
-       id="text823-0"
-       y="184.35172"
-       x="624.90112"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.33333302px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.26999986;stroke-miterlimit:4;stroke-dasharray:none"
-       xml:space="preserve"><tspan
-         id="tspan825-8"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.33333302px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke:none;stroke-width:1.26999986;stroke-miterlimit:4;stroke-dasharray:none"
-         y="184.35172"
-         x="624.90112"
-         sodipodi:role="line">Compute Shader</tspan></text>
-    <rect
-       style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:0.89574087;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
-       id="rect815-1-6"
-       width="220.00002"
-       height="19.999928"
-       x="515.00525"
-       y="-0.61240721" />
-    <text
-       id="text823-4-0"
-       y="13.11151"
-       x="624.93042"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.33333302px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.26999986"
-       xml:space="preserve"><tspan
-         id="tspan825-6-2"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.33333302px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:1.26999986"
-         y="13.11151"
-         x="624.93042"
-         sodipodi:role="line">Dispatch</tspan></text>
-    <rect
-       style="fill:#808080;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
-       id="rect815-1-4-3-6-1-6-6"
-       width="220"
-       height="20"
-       x="245.00526"
-       y="299.38754" />
-    <text
-       id="text823-4-2-9-4-7-9-8-05-4-5"
-       y="312.9455"
-       x="354.84576"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.33333302px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.26999986"
-       xml:space="preserve"><tspan
-         id="tspan825-6-0-2-5-6-26-5-3-6-4"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.33333302px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:1.26999986"
-         y="312.9455"
-         x="354.84576"
-         sodipodi:role="line">Depth/Stencil Attachments</tspan></text>
-    <rect
-       style="fill:#808080;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
-       id="rect815-1-4-3-6-1-6-6-4"
-       width="220"
-       height="20"
-       x="245.00526"
-       y="329.38754" />
-    <text
-       id="text823-4-2-9-4-7-9-8-05-4-5-3"
-       y="342.9455"
-       x="354.84576"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.33333302px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.26999986"
-       xml:space="preserve"><tspan
-         id="tspan825-6-0-2-5-6-26-5-3-6-4-0"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.33333302px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:1.26999986"
-         y="342.9455"
-         x="354.84576"
-         sodipodi:role="line">Input Attachments</tspan></text>
-    <rect
-       style="fill:#808080;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
-       id="rect815-1-4-3-6-1-6-6-2"
-       width="220"
-       height="20"
-       x="245.00526"
-       y="389.38754" />
-    <text
-       id="text823-4-2-9-4-7-9-8-05-4-5-6"
-       y="402.9455"
-       x="354.84576"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.33333302px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.26999986"
-       xml:space="preserve"><tspan
-         id="tspan825-6-0-2-5-6-26-5-3-6-4-6"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.33333302px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:1.26999986"
-         y="402.9455"
-         x="354.84576"
-         sodipodi:role="line">Color Attachments</tspan></text>
-    <rect
-       style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:0.89574087;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
-       id="rect815-1-26"
-       width="210.00002"
-       height="20.00001"
-       x="520.00525"
-       y="329.38754" />
-    <text
-       id="text823-4-8"
-       y="344.13358"
-       x="624.63416"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.33333302px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.26999986"
-       xml:space="preserve"><tspan
-         id="tspan825-6-1"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.33333302px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:1.26999986"
-         y="344.13358"
-         x="624.63416"
-         sodipodi:role="line">Fixed Function Stage</tspan></text>
-    <rect
-       style="fill:#ffffff;fill-opacity:1;stroke:#ff0000;stroke-width:0.89574087;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
-       id="rect815-1-2-3-0-5"
-       width="210.00002"
-       height="20.00001"
-       x="520.00525"
-       y="359.38754" />
-    <text
-       id="text823-0-2"
-       y="373.11151"
-       x="624.61139"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.33333302px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.26999986;stroke-miterlimit:4;stroke-dasharray:none"
-       xml:space="preserve"><tspan
-         id="tspan825-8-5"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.33333302px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke:none;stroke-width:1.26999986;stroke-miterlimit:4;stroke-dasharray:none"
-         y="373.11151"
-         x="624.61139"
-         sodipodi:role="line">Shader Stage</tspan></text>
-    <rect
-       style="fill:#808080;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
-       id="rect815-1-4-3-6-1-6-7-5-0"
-       width="210.00002"
-       height="19.999994"
-       x="520.00525"
-       y="389.38757" />
-    <text
-       id="text823-4-2-9-4-7-9-8-05-4-9"
-       y="402.9455"
-       x="624.84583"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.33333302px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.26999986"
-       xml:space="preserve"><tspan
-         id="tspan825-6-0-2-5-6-26-5-3-6-42"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.33333302px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:1.26999986"
-         y="402.9455"
-         x="624.84583"
-         sodipodi:role="line">Resource</tspan></text>
-    <path
-       style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker9512-2)"
-       d="m 465.00526,9.3875526 h 50"
-       id="path9502-7"
-       inkscape:connector-curvature="0"
-       sodipodi:nodetypes="cc" />
-  </g>
-</svg>
diff --git a/registry/vulkan/images/pipelinemesh.svg b/registry/vulkan/images/pipelinemesh.svg
deleted file mode 100644
index 0647d2f..0000000
--- a/registry/vulkan/images/pipelinemesh.svg
+++ /dev/null
@@ -1,1776 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Created with Inkscape (http://www.inkscape.org/) -->
-
-<svg
-   xmlns:dc="http://purl.org/dc/elements/1.1/"
-   xmlns:cc="http://creativecommons.org/ns#"
-   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
-   xmlns:svg="http://www.w3.org/2000/svg"
-   xmlns="http://www.w3.org/2000/svg"
-   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
-   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
-   width="874.4707"
-   height="448"
-   viewBox="0 0 874.4707 448"
-   version="1.1"
-   id="svg8"
-   sodipodi:docname="pipelinemesh.svg"
-   inkscape:version="0.92.4 (5da689c313, 2019-01-14)">
-  <defs
-     id="defs2">
-    <marker
-       inkscape:stockid="Arrow1Mend"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="marker19523"
-       style="overflow:visible"
-       inkscape:isstock="true">
-      <path
-         inkscape:connector-curvature="0"
-         id="path19521"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         transform="matrix(-0.4,0,0,-0.4,-4,0)" />
-    </marker>
-    <marker
-       inkscape:isstock="true"
-       style="overflow:visible"
-       id="marker15681"
-       refX="0"
-       refY="0"
-       orient="auto"
-       inkscape:stockid="Arrow1Mend"
-       inkscape:collect="always">
-      <path
-         transform="matrix(-0.4,0,0,-0.4,-4,0)"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         id="path15679"
-         inkscape:connector-curvature="0" />
-    </marker>
-    <marker
-       inkscape:stockid="Arrow1Mend"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="marker15357"
-       style="overflow:visible"
-       inkscape:isstock="true"
-       inkscape:collect="always">
-      <path
-         inkscape:connector-curvature="0"
-         id="path15355"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         transform="matrix(-0.4,0,0,-0.4,-4,0)" />
-    </marker>
-    <marker
-       inkscape:isstock="true"
-       style="overflow:visible"
-       id="marker15027"
-       refX="0"
-       refY="0"
-       orient="auto"
-       inkscape:stockid="Arrow1Mend"
-       inkscape:collect="always">
-      <path
-         transform="matrix(-0.4,0,0,-0.4,-4,0)"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         id="path15025"
-         inkscape:connector-curvature="0" />
-    </marker>
-    <marker
-       inkscape:stockid="Arrow1Mend"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="marker11209"
-       style="overflow:visible"
-       inkscape:isstock="true"
-       inkscape:collect="always">
-      <path
-         inkscape:connector-curvature="0"
-         id="path11207"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         transform="matrix(-0.4,0,0,-0.4,-4,0)" />
-    </marker>
-    <marker
-       inkscape:isstock="true"
-       style="overflow:visible"
-       id="marker10921"
-       refX="0"
-       refY="0"
-       orient="auto"
-       inkscape:stockid="Arrow1Mend"
-       inkscape:collect="always">
-      <path
-         transform="matrix(-0.4,0,0,-0.4,-4,0)"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         id="path10919"
-         inkscape:connector-curvature="0" />
-    </marker>
-    <marker
-       inkscape:stockid="Arrow1Mend"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="marker10639"
-       style="overflow:visible"
-       inkscape:isstock="true"
-       inkscape:collect="always">
-      <path
-         inkscape:connector-curvature="0"
-         id="path10637"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         transform="matrix(-0.4,0,0,-0.4,-4,0)" />
-    </marker>
-    <marker
-       inkscape:isstock="true"
-       style="overflow:visible"
-       id="marker10363"
-       refX="0"
-       refY="0"
-       orient="auto"
-       inkscape:stockid="Arrow1Mend"
-       inkscape:collect="always">
-      <path
-         transform="matrix(-0.4,0,0,-0.4,-4,0)"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         id="path10361"
-         inkscape:connector-curvature="0" />
-    </marker>
-    <marker
-       inkscape:isstock="true"
-       style="overflow:visible"
-       id="marker9769"
-       refX="0"
-       refY="0"
-       orient="auto"
-       inkscape:stockid="Arrow1Mend"
-       inkscape:collect="always">
-      <path
-         transform="matrix(-0.4,0,0,-0.4,-4,0)"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         id="path9767"
-         inkscape:connector-curvature="0" />
-    </marker>
-    <marker
-       inkscape:stockid="Arrow1Mend"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="marker9511"
-       style="overflow:visible"
-       inkscape:isstock="true"
-       inkscape:collect="always">
-      <path
-         inkscape:connector-curvature="0"
-         id="path9509"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         transform="matrix(-0.4,0,0,-0.4,-4,0)" />
-    </marker>
-    <marker
-       inkscape:isstock="true"
-       style="overflow:visible"
-       id="marker18097"
-       refX="0"
-       refY="0"
-       orient="auto"
-       inkscape:stockid="Arrow1Mstart">
-      <path
-         transform="matrix(0.4,0,0,0.4,4,0)"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         id="path18095"
-         inkscape:connector-curvature="0" />
-    </marker>
-    <marker
-       inkscape:isstock="true"
-       style="overflow:visible"
-       id="marker17835"
-       refX="0"
-       refY="0"
-       orient="auto"
-       inkscape:stockid="Arrow1Mstart">
-      <path
-         transform="matrix(0.4,0,0,0.4,4,0)"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         id="path17833"
-         inkscape:connector-curvature="0" />
-    </marker>
-    <marker
-       inkscape:stockid="Arrow1Mend"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="marker17557"
-       style="overflow:visible"
-       inkscape:isstock="true">
-      <path
-         id="path17555"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         transform="matrix(-0.4,0,0,-0.4,-4,0)"
-         inkscape:connector-curvature="0" />
-    </marker>
-    <marker
-       inkscape:isstock="true"
-       style="overflow:visible"
-       id="marker17291"
-       refX="0"
-       refY="0"
-       orient="auto"
-       inkscape:stockid="Arrow1Mend"
-       inkscape:collect="always">
-      <path
-         transform="matrix(-0.4,0,0,-0.4,-4,0)"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         id="path17289"
-         inkscape:connector-curvature="0" />
-    </marker>
-    <marker
-       inkscape:isstock="true"
-       style="overflow:visible"
-       id="marker16647"
-       refX="0"
-       refY="0"
-       orient="auto"
-       inkscape:stockid="Arrow1Mend"
-       inkscape:collect="always">
-      <path
-         transform="matrix(-0.4,0,0,-0.4,-4,0)"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         id="path16645"
-         inkscape:connector-curvature="0" />
-    </marker>
-    <marker
-       inkscape:isstock="true"
-       style="overflow:visible"
-       id="marker16415"
-       refX="0"
-       refY="0"
-       orient="auto"
-       inkscape:stockid="Arrow1Mend">
-      <path
-         transform="matrix(-0.4,0,0,-0.4,-4,0)"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         id="path16413"
-         inkscape:connector-curvature="0" />
-    </marker>
-    <marker
-       inkscape:isstock="true"
-       style="overflow:visible"
-       id="marker16189"
-       refX="0"
-       refY="0"
-       orient="auto"
-       inkscape:stockid="Arrow1Mend">
-      <path
-         transform="matrix(-0.4,0,0,-0.4,-4,0)"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         id="path16187"
-         inkscape:connector-curvature="0" />
-    </marker>
-    <marker
-       inkscape:stockid="Arrow1Mend"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="marker15937"
-       style="overflow:visible"
-       inkscape:isstock="true"
-       inkscape:collect="always">
-      <path
-         id="path15935"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         transform="matrix(-0.4,0,0,-0.4,-4,0)"
-         inkscape:connector-curvature="0" />
-    </marker>
-    <marker
-       inkscape:stockid="Arrow1Mstart"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="marker12928"
-       style="overflow:visible"
-       inkscape:isstock="true"
-       inkscape:collect="always">
-      <path
-         id="path12926"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         transform="matrix(0.4,0,0,0.4,4,0)"
-         inkscape:connector-curvature="0" />
-    </marker>
-    <marker
-       inkscape:isstock="true"
-       style="overflow:visible"
-       id="marker11520"
-       refX="0"
-       refY="0"
-       orient="auto"
-       inkscape:stockid="Arrow1Mend"
-       inkscape:collect="always">
-      <path
-         transform="matrix(-0.4,0,0,-0.4,-4,0)"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         id="path11518"
-         inkscape:connector-curvature="0" />
-    </marker>
-    <marker
-       inkscape:stockid="Arrow1Mend"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="marker11322"
-       style="overflow:visible"
-       inkscape:isstock="true"
-       inkscape:collect="always">
-      <path
-         id="path11320"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         transform="matrix(-0.4,0,0,-0.4,-4,0)"
-         inkscape:connector-curvature="0" />
-    </marker>
-    <marker
-       inkscape:isstock="true"
-       style="overflow:visible"
-       id="marker11128"
-       refX="0"
-       refY="0"
-       orient="auto"
-       inkscape:stockid="Arrow1Mend"
-       inkscape:collect="always">
-      <path
-         transform="matrix(-0.4,0,0,-0.4,-4,0)"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         id="path11126"
-         inkscape:connector-curvature="0" />
-    </marker>
-    <marker
-       inkscape:isstock="true"
-       style="overflow:visible"
-       id="marker10596"
-       refX="0"
-       refY="0"
-       orient="auto"
-       inkscape:stockid="Arrow1Mend"
-       inkscape:collect="always">
-      <path
-         transform="matrix(-0.4,0,0,-0.4,-4,0)"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         id="path10594"
-         inkscape:connector-curvature="0" />
-    </marker>
-    <marker
-       inkscape:stockid="Arrow1Mend"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="marker9866"
-       style="overflow:visible"
-       inkscape:isstock="true"
-       inkscape:collect="always">
-      <path
-         id="path9864"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         transform="matrix(-0.4,0,0,-0.4,-4,0)"
-         inkscape:connector-curvature="0" />
-    </marker>
-    <marker
-       inkscape:stockid="Arrow1Mend"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="marker9512"
-       style="overflow:visible"
-       inkscape:isstock="true"
-       inkscape:collect="always">
-      <path
-         id="path9510"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         transform="matrix(-0.4,0,0,-0.4,-4,0)"
-         inkscape:connector-curvature="0" />
-    </marker>
-    <marker
-       inkscape:isstock="true"
-       style="overflow:visible"
-       id="marker8090"
-       refX="0"
-       refY="0"
-       orient="auto"
-       inkscape:stockid="Arrow1Mend"
-       inkscape:collect="always">
-      <path
-         transform="matrix(-0.4,0,0,-0.4,-4,0)"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         id="path8088"
-         inkscape:connector-curvature="0" />
-    </marker>
-    <marker
-       inkscape:stockid="Arrow1Mend"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="marker7360"
-       style="overflow:visible"
-       inkscape:isstock="true"
-       inkscape:collect="always">
-      <path
-         id="path7358"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         transform="matrix(-0.4,0,0,-0.4,-4,0)"
-         inkscape:connector-curvature="0" />
-    </marker>
-    <marker
-       inkscape:isstock="true"
-       style="overflow:visible"
-       id="marker7066"
-       refX="0"
-       refY="0"
-       orient="auto"
-       inkscape:stockid="Arrow1Mstart"
-       inkscape:collect="always">
-      <path
-         transform="matrix(0.4,0,0,0.4,4,0)"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         id="path7064"
-         inkscape:connector-curvature="0" />
-    </marker>
-    <marker
-       inkscape:stockid="Arrow1Mend"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="marker5106"
-       style="overflow:visible"
-       inkscape:isstock="true">
-      <path
-         id="path5104"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         transform="matrix(-0.4,0,0,-0.4,-4,0)"
-         inkscape:connector-curvature="0" />
-    </marker>
-    <marker
-       inkscape:isstock="true"
-       style="overflow:visible"
-       id="marker7066-0"
-       refX="0"
-       refY="0"
-       orient="auto"
-       inkscape:stockid="Arrow1Mstart">
-      <path
-         inkscape:connector-curvature="0"
-         transform="matrix(0.4,0,0,0.4,4,0)"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         id="path7064-8" />
-    </marker>
-    <marker
-       inkscape:isstock="true"
-       style="overflow:visible"
-       id="marker7208-7"
-       refX="0"
-       refY="0"
-       orient="auto"
-       inkscape:stockid="Arrow1Mend"
-       inkscape:collect="always">
-      <path
-         inkscape:connector-curvature="0"
-         transform="matrix(-0.4,0,0,-0.4,-4,0)"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         id="path7206-1" />
-    </marker>
-    <marker
-       inkscape:stockid="Arrow1Mend"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="marker17033-3"
-       style="overflow:visible"
-       inkscape:isstock="true"
-       inkscape:collect="always">
-      <path
-         id="path17031-7"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         transform="matrix(-0.4,0,0,-0.4,-4,0)"
-         inkscape:connector-curvature="0" />
-    </marker>
-    <marker
-       inkscape:stockid="Arrow1Mend"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="marker17033-3-01"
-       style="overflow:visible"
-       inkscape:isstock="true"
-       inkscape:collect="always">
-      <path
-         id="path17031-7-8"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         transform="matrix(-0.4,0,0,-0.4,-4,0)"
-         inkscape:connector-curvature="0" />
-    </marker>
-    <marker
-       inkscape:stockid="Arrow1Mend"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="marker17033-3-37"
-       style="overflow:visible"
-       inkscape:isstock="true"
-       inkscape:collect="always">
-      <path
-         id="path17031-7-0"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         transform="matrix(-0.4,0,0,-0.4,-4,0)"
-         inkscape:connector-curvature="0" />
-    </marker>
-    <marker
-       inkscape:stockid="Arrow1Mend"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="marker17033-3-37-7"
-       style="overflow:visible"
-       inkscape:isstock="true"
-       inkscape:collect="always">
-      <path
-         id="path17031-7-0-9"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         transform="matrix(-0.4,0,0,-0.4,-4,0)"
-         inkscape:connector-curvature="0" />
-    </marker>
-    <marker
-       inkscape:stockid="Arrow1Mend"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="marker17033-3-37-7-8"
-       style="overflow:visible"
-       inkscape:isstock="true"
-       inkscape:collect="always">
-      <path
-         id="path17031-7-0-9-7"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         transform="matrix(-0.4,0,0,-0.4,-4,0)"
-         inkscape:connector-curvature="0" />
-    </marker>
-    <marker
-       inkscape:stockid="Arrow1Mend"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="marker17033-3-01-3"
-       style="overflow:visible"
-       inkscape:isstock="true"
-       inkscape:collect="always">
-      <path
-         id="path17031-7-8-44"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         transform="matrix(-0.4,0,0,-0.4,-4,0)"
-         inkscape:connector-curvature="0" />
-    </marker>
-    <marker
-       inkscape:stockid="Arrow1Mstart"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="Arrow1Mstart-3"
-       style="overflow:visible"
-       inkscape:isstock="true"
-       inkscape:collect="always">
-      <path
-         id="path1382-1"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         transform="matrix(0.4,0,0,0.4,4,0)"
-         inkscape:connector-curvature="0" />
-    </marker>
-    <marker
-       inkscape:stockid="Arrow1Mend"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="marker5200-6"
-       style="overflow:visible"
-       inkscape:isstock="true">
-      <path
-         id="path5198-1"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         transform="matrix(-0.4,0,0,-0.4,-4,0)"
-         inkscape:connector-curvature="0" />
-    </marker>
-    <marker
-       inkscape:stockid="Arrow1Mend"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="marker17033-3-01-3-1"
-       style="overflow:visible"
-       inkscape:isstock="true"
-       inkscape:collect="always">
-      <path
-         id="path17031-7-8-44-8"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         transform="matrix(-0.4,0,0,-0.4,-4,0)"
-         inkscape:connector-curvature="0" />
-    </marker>
-    <marker
-       inkscape:stockid="Arrow1Mend"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="marker17033-3-37-7-8-7"
-       style="overflow:visible"
-       inkscape:isstock="true"
-       inkscape:collect="always">
-      <path
-         id="path17031-7-0-9-7-8"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         transform="matrix(-0.4,0,0,-0.4,-4,0)"
-         inkscape:connector-curvature="0" />
-    </marker>
-    <marker
-       inkscape:stockid="Arrow1Mend"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="marker17033-3-37-7-8-7-7"
-       style="overflow:visible"
-       inkscape:isstock="true"
-       inkscape:collect="always">
-      <path
-         id="path17031-7-0-9-7-8-5"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         transform="matrix(-0.4,0,0,-0.4,-4,0)"
-         inkscape:connector-curvature="0" />
-    </marker>
-    <marker
-       inkscape:stockid="Arrow1Mend"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="marker17033-3-37-7-8-7-7-5"
-       style="overflow:visible"
-       inkscape:isstock="true"
-       inkscape:collect="always">
-      <path
-         id="path17031-7-0-9-7-8-5-5"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         transform="matrix(-0.4,0,0,-0.4,-4,0)"
-         inkscape:connector-curvature="0" />
-    </marker>
-    <marker
-       inkscape:stockid="Arrow1Mend"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="marker17033-3-37-7-8-7-7-0"
-       style="overflow:visible"
-       inkscape:isstock="true"
-       inkscape:collect="always">
-      <path
-         id="path17031-7-0-9-7-8-5-2"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         transform="matrix(-0.4,0,0,-0.4,-4,0)"
-         inkscape:connector-curvature="0" />
-    </marker>
-    <marker
-       inkscape:stockid="Arrow1Mend"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="marker17033-3-37-7-8-7-7-0-51"
-       style="overflow:visible"
-       inkscape:isstock="true"
-       inkscape:collect="always">
-      <path
-         id="path17031-7-0-9-7-8-5-2-5"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         transform="matrix(-0.4,0,0,-0.4,-4,0)"
-         inkscape:connector-curvature="0" />
-    </marker>
-    <marker
-       inkscape:stockid="Arrow1Mend"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="marker9512-2"
-       style="overflow:visible"
-       inkscape:isstock="true"
-       inkscape:collect="always">
-      <path
-         id="path9510-3"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         transform="matrix(-0.4,0,0,-0.4,-4,0)"
-         inkscape:connector-curvature="0" />
-    </marker>
-  </defs>
-  <sodipodi:namedview
-     id="base"
-     pagecolor="#ffffff"
-     bordercolor="#666666"
-     borderopacity="1.0"
-     inkscape:pageopacity="0.0"
-     inkscape:pageshadow="2"
-     inkscape:zoom="1"
-     inkscape:cx="555.30883"
-     inkscape:cy="54.623986"
-     inkscape:document-units="px"
-     inkscape:current-layer="layer1"
-     showgrid="false"
-     inkscape:snap-center="true"
-     inkscape:snap-object-midpoints="true"
-     inkscape:snap-text-baseline="false"
-     inkscape:window-width="1920"
-     inkscape:window-height="1137"
-     inkscape:window-x="1578"
-     inkscape:window-y="348"
-     inkscape:window-maximized="0"
-     showguides="false"
-     fit-margin-top="1"
-     fit-margin-right="1"
-     fit-margin-bottom="1"
-     fit-margin-left="1"
-     units="in"
-     inkscape:snap-others="true"
-     inkscape:snap-nodes="true"
-     inkscape:object-nodes="true"
-     height="7.5in">
-    <inkscape:grid
-       type="xygrid"
-       id="grid817"
-       originx="152.97068"
-       originy="-753.5" />
-  </sodipodi:namedview>
-  <metadata
-     id="metadata5">
-    <rdf:RDF>
-      <cc:Work
-         rdf:about="">
-        <dc:format>image/svg+xml</dc:format>
-        <dc:type
-           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
-        <dc:title />
-      </cc:Work>
-    </rdf:RDF>
-  </metadata>
-  <g
-     inkscape:label="Layer 1"
-     inkscape:groupmode="layer"
-     id="layer1"
-     transform="translate(37.965418,2.1124474)">
-    <rect
-       style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:0.89574087;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
-       id="rect815-1-2-1-2-4"
-       width="220.00002"
-       height="19.999928"
-       x="-24.994745"
-       y="299.3876" />
-    <rect
-       style="fill:#ffffff;fill-opacity:1;stroke:#ff0000;stroke-width:0.89574087;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
-       id="rect815-1-2-3-9-8"
-       width="220.00002"
-       height="19.999928"
-       x="-24.994741"
-       y="179.38759" />
-    <rect
-       style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:0.89574087;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
-       id="rect815-1-2-1"
-       width="220.00002"
-       height="19.999928"
-       x="-24.994745"
-       y="149.38759" />
-    <rect
-       style="fill:#ffffff;fill-opacity:1;stroke:#ff0000;stroke-width:0.89574087;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
-       id="rect815-1-2-3-9"
-       width="220.00002"
-       height="19.999928"
-       x="-24.994745"
-       y="119.38759" />
-    <rect
-       style="fill:#ffffff;fill-opacity:1;stroke:#ff0000;stroke-width:0.89574087;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
-       id="rect815-1-2-3"
-       width="220.00002"
-       height="19.999928"
-       x="-24.994745"
-       y="79.387589" />
-    <rect
-       style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:0.89574087;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
-       id="rect815-1"
-       width="220.00002"
-       height="19.999928"
-       x="-24.994745"
-       y="-0.6124118" />
-    <rect
-       style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:0.89600003;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
-       id="rect815-1-2"
-       width="220.00002"
-       height="19.999928"
-       x="-24.994738"
-       y="49.38755" />
-    <text
-       id="text823"
-       y="94.351753"
-       x="84.9011"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.33333302px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.26999986;stroke-miterlimit:4;stroke-dasharray:none"
-       xml:space="preserve"><tspan
-         id="tspan825"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.33333302px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke:none;stroke-width:1.26999986;stroke-miterlimit:4;stroke-dasharray:none"
-         y="94.351753"
-         x="84.9011"
-         sodipodi:role="line">Vertex Shader</tspan></text>
-    <text
-       id="text823-4"
-       y="14.133646"
-       x="84.634171"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.33333302px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.26999986"
-       xml:space="preserve"><tspan
-         id="tspan825-6"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.33333302px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:1.26999986"
-         y="14.133646"
-         x="84.634171"
-         sodipodi:role="line">Draw</tspan></text>
-    <text
-       id="text823-4-2"
-       y="63.111511"
-       x="84.539764"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.33333302px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.26999986"
-       xml:space="preserve"><tspan
-         id="tspan825-6-0"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.33333302px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:1.26999986"
-         y="63.111511"
-         x="84.539764"
-         sodipodi:role="line">Input Assembler</tspan></text>
-    <text
-       id="text823-7"
-       y="134.35175"
-       x="84.985733"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.33333302px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.26999986;stroke-miterlimit:4;stroke-dasharray:none"
-       xml:space="preserve"><tspan
-         id="tspan825-4"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.33333302px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke:none;stroke-width:1.26999986;stroke-miterlimit:4;stroke-dasharray:none"
-         y="134.35175"
-         x="84.985733"
-         sodipodi:role="line">Tessellation Control Shader</tspan></text>
-    <text
-       id="text823-4-2-6-3"
-       y="164.35175"
-       x="84.985733"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.33333302px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.26999986"
-       xml:space="preserve"><tspan
-         id="tspan825-6-0-1-5"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.33333302px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:1.26999986"
-         y="164.35175"
-         x="84.985733"
-         sodipodi:role="line">Tessellation Primitive Generator</tspan></text>
-    <text
-       id="text823-7-0"
-       y="194.35175"
-       x="84.985733"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.33333302px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.26999986;stroke-miterlimit:4;stroke-dasharray:none"
-       xml:space="preserve"><tspan
-         id="tspan825-4-7"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.33333302px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke:none;stroke-width:1.26999986;stroke-miterlimit:4;stroke-dasharray:none"
-         y="194.35175"
-         x="84.985733"
-         sodipodi:role="line">Tessellation Evaluation Shader</tspan></text>
-    <text
-       id="text823-4-2-8"
-       y="314.1662"
-       x="84.930397"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.33333302px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.26999986"
-       xml:space="preserve"><tspan
-         id="tspan825-6-0-9"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.33333302px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:1.26999986"
-         y="314.1662"
-         x="84.930397"
-         sodipodi:role="line">Rasterization</tspan></text>
-    <path
-       style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker5106)"
-       d="M 85.005262,109.38755 H -34.994737 v 140 h 120"
-       id="path4474"
-       inkscape:connector-curvature="0"
-       sodipodi:nodetypes="ccc" />
-    <rect
-       style="fill:#808080;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
-       id="rect815-1-4-3-6-1"
-       width="220"
-       height="20"
-       x="245.00526"
-       y="-0.61244744" />
-    <text
-       id="text823-4-2-9-4-7"
-       y="14.384297"
-       x="354.53976"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.33333302px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.26999986"
-       xml:space="preserve"><tspan
-         id="tspan825-6-0-2-5-6"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.33333302px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:1.26999986"
-         y="14.384297"
-         x="354.53976"
-         sodipodi:role="line">Indirect Buffer</tspan></text>
-    <path
-       style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker7360)"
-       d="m 235.00526,339.38755 v 60 h -40"
-       id="path7350"
-       inkscape:connector-curvature="0"
-       sodipodi:nodetypes="ccc" />
-    <path
-       style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker8090)"
-       d="m 245.00526,374.38755 h -5 v -5 h -10 v 5 h -35"
-       id="path8837"
-       inkscape:connector-curvature="0"
-       sodipodi:nodetypes="cccccc" />
-    <rect
-       style="fill:none;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:4, 4;stroke-dashoffset:0;stroke-opacity:1"
-       id="rect8983"
-       width="220"
-       height="165"
-       x="245.00526"
-       y="99.38755" />
-    <text
-       id="text823-4-2-9-4-7-9-85"
-       y="112.9813"
-       x="354.63092"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.33333302px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.26999986"
-       xml:space="preserve"><tspan
-         id="tspan825-6-0-2-5-6-26-7"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.33333302px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:1.26999986"
-         y="112.9813"
-         x="354.63092"
-         sodipodi:role="line">Descriptor Sets</tspan></text>
-    <path
-       style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-start:url(#marker7066-0);marker-end:url(#marker7208-7)"
-       d="m 245.00526,429.38755 h -50"
-       id="path7056-3"
-       inkscape:connector-curvature="0"
-       sodipodi:nodetypes="cc" />
-    <path
-       style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker9512)"
-       d="m 245.00526,9.3875524 h -50"
-       id="path9502"
-       inkscape:connector-curvature="0"
-       sodipodi:nodetypes="cc" />
-    <path
-       style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker9866)"
-       d="m 220.00526,59.387553 h -25"
-       id="path9856"
-       inkscape:connector-curvature="0"
-       sodipodi:nodetypes="cc" />
-    <path
-       style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-start:url(#marker7066);marker-end:url(#marker10596)"
-       d="m 245.00526,339.38755 h -20 v -5 h -10 v 5 h -20"
-       id="path10568"
-       inkscape:connector-curvature="0"
-       sodipodi:nodetypes="cccccc" />
-    <path
-       style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       d="m 245.00526,49.387553 h -25 v 20 h 25"
-       id="path11116"
-       inkscape:connector-curvature="0"
-       sodipodi:nodetypes="cccc" />
-    <path
-       style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker11128)"
-       d="m 220.00526,129.38755 h -25"
-       id="path11118"
-       inkscape:connector-curvature="0"
-       sodipodi:nodetypes="cc" />
-    <path
-       style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker11322)"
-       d="m 220.00526,189.38755 h -25"
-       id="path11312"
-       inkscape:connector-curvature="0"
-       sodipodi:nodetypes="cc" />
-    <path
-       style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker11520)"
-       d="m 220.00526,229.38755 h -25"
-       id="path11510"
-       inkscape:connector-curvature="0"
-       sodipodi:nodetypes="cc" />
-    <path
-       style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-start:url(#marker12928);marker-end:url(#marker15937)"
-       d="m 195.00526,364.38755 h 25 V 89.387553 h -25"
-       id="path15909"
-       inkscape:connector-curvature="0"
-       sodipodi:nodetypes="cccc" />
-    <path
-       style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       d="m 250.00526,129.38755 h -30"
-       id="path16167"
-       inkscape:connector-curvature="0"
-       sodipodi:nodetypes="cc" />
-    <path
-       style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       d="m 250.00526,149.38755 h -30"
-       id="path16169"
-       inkscape:connector-curvature="0"
-       sodipodi:nodetypes="cc" />
-    <path
-       style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       d="m 250.00526,169.38755 h -30"
-       id="path16171"
-       inkscape:connector-curvature="0"
-       sodipodi:nodetypes="cc" />
-    <path
-       style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       d="m 250.00526,189.38755 h -30"
-       id="path16173"
-       inkscape:connector-curvature="0"
-       sodipodi:nodetypes="cc" />
-    <path
-       style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker16647)"
-       d="m 220.00526,209.38755 h 30"
-       id="path16175"
-       inkscape:connector-curvature="0"
-       sodipodi:nodetypes="cc" />
-    <path
-       style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker16189)"
-       d="m 220.00526,229.38755 h 30"
-       id="path16177"
-       inkscape:connector-curvature="0"
-       sodipodi:nodetypes="cc" />
-    <path
-       style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker16415)"
-       d="m 220.00526,249.38755 h 30"
-       id="path16179"
-       inkscape:connector-curvature="0"
-       sodipodi:nodetypes="cc" />
-    <path
-       inkscape:connector-curvature="0"
-       id="path17281"
-       d="M 490.00526,129.38755 V 59.387553 h 90 v -5 h 10 v 5 h 105"
-       style="fill:none;stroke:#000000;stroke-width:1.02551627;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker17291)"
-       sodipodi:nodetypes="ccccccc" />
-    <path
-       inkscape:connector-curvature="0"
-       id="path17547"
-       d="m 460.00526,129.38755 h 30 v 120 h -30"
-       style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker17557)"
-       sodipodi:nodetypes="cccc" />
-    <path
-       inkscape:connector-curvature="0"
-       id="path17817"
-       d="m 460.00526,149.38755 h 30"
-       style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       sodipodi:nodetypes="cc" />
-    <path
-       inkscape:connector-curvature="0"
-       id="path17819"
-       d="m 460.00526,169.38755 h 30"
-       style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       sodipodi:nodetypes="cc" />
-    <path
-       inkscape:connector-curvature="0"
-       id="path17821"
-       d="m 460.00526,189.38755 h 30"
-       style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       sodipodi:nodetypes="cc" />
-    <path
-       inkscape:connector-curvature="0"
-       id="path17823"
-       d="m 460.00526,209.38755 h 30"
-       style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-start:url(#marker18097)"
-       sodipodi:nodetypes="cc" />
-    <path
-       inkscape:connector-curvature="0"
-       id="path17825"
-       d="m 460.00526,229.38755 h 30"
-       style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-start:url(#marker17835)"
-       sodipodi:nodetypes="cc" />
-    <rect
-       style="fill:none;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:4, 4;stroke-dashoffset:0;stroke-opacity:1"
-       id="rect8983-1"
-       width="220.00002"
-       height="115.00001"
-       x="615.00525"
-       y="329.38754" />
-    <text
-       id="text823-4-2-9-4-7-9-85-3"
-       y="348.07571"
-       x="724.95642"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.33333302px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.26999986"
-       xml:space="preserve"><tspan
-         id="tspan825-6-0-2-5-6-26-7-3"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.33333302px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:1.26999986"
-         y="348.07571"
-         x="724.95642"
-         sodipodi:role="line">Legend</tspan></text>
-    <path
-       inkscape:connector-curvature="0"
-       id="path17023-1"
-       d="m 85.005262,19.387553 10e-7,29.72874"
-       style="fill:none;stroke:#000000;stroke-width:0.87524033;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker17033-3)"
-       sodipodi:nodetypes="cc" />
-    <path
-       inkscape:connector-curvature="0"
-       id="path17023-1-3"
-       d="m 85.005263,99.38755 v 20"
-       style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker17033-3-01)"
-       sodipodi:nodetypes="cc" />
-    <path
-       inkscape:connector-curvature="0"
-       id="path17023-1-4"
-       d="m 85.005263,69.387552 v 9.728741"
-       style="fill:none;stroke:#000000;stroke-width:0.87524033;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker17033-3-37)" />
-    <path
-       inkscape:connector-curvature="0"
-       id="path17023-1-4-0"
-       d="m 85.005263,139.38755 v 9.72874"
-       style="fill:none;stroke:#000000;stroke-width:0.87524033;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker17033-3-37-7)" />
-    <path
-       inkscape:connector-curvature="0"
-       id="path17023-1-4-0-9"
-       d="m 85.005263,169.52318 v 9.72874"
-       style="fill:none;stroke:#000000;stroke-width:0.87524033;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker17033-3-37-7-8)" />
-    <rect
-       style="fill:#ffffff;fill-opacity:1;stroke:#ff0000;stroke-width:0.89574087;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
-       id="rect815-1-2-3-9-8-4"
-       width="220.00002"
-       height="19.999928"
-       x="-24.994745"
-       y="219.38759" />
-    <text
-       id="text823-7-9-09"
-       y="233.11151"
-       x="84.611382"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.33333302px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.26999986;stroke-miterlimit:4;stroke-dasharray:none"
-       xml:space="preserve"><tspan
-         id="tspan825-4-0-5"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.33333302px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke:none;stroke-width:1.26999986;stroke-miterlimit:4;stroke-dasharray:none"
-         y="233.11151"
-         x="84.611382"
-         sodipodi:role="line">Geometry Shader</tspan></text>
-    <path
-       inkscape:connector-curvature="0"
-       id="path17023-1-3-2"
-       d="m 85.005265,199.38755 v 20"
-       style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker17033-3-01-3)"
-       sodipodi:nodetypes="cc" />
-    <path
-       style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-start:url(#Arrow1Mstart-3);marker-end:url(#marker5200-6)"
-       d="m 85.005263,209.38755 h -120"
-       id="path4476-0"
-       inkscape:connector-curvature="0"
-       sodipodi:nodetypes="cc" />
-    <rect
-       style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:0.89574087;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
-       id="rect815-1-2-1-2"
-       width="220.00002"
-       height="19.999928"
-       x="-24.994741"
-       y="269.38757" />
-    <text
-       id="text823-4-8-5"
-       y="282.89014"
-       x="85.522842"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.33333302px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.26999986"
-       xml:space="preserve"><tspan
-         id="tspan825-6-9-2"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.33333302px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:1.26999986"
-         y="282.89014"
-         x="85.522842"
-         sodipodi:role="line">Vertex Post-Processing</tspan></text>
-    <path
-       inkscape:connector-curvature="0"
-       id="path17023-1-3-2-4"
-       d="m 85.005263,239.38755 v 20"
-       style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker17033-3-01-3-1)"
-       sodipodi:nodetypes="cc" />
-    <path
-       inkscape:connector-curvature="0"
-       id="path17023-1-4-0-9-1"
-       d="m 85.005265,289.52318 v 9.72874"
-       style="fill:none;stroke:#000000;stroke-width:0.87524033;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker17033-3-37-7-8-7)" />
-    <path
-       inkscape:connector-curvature="0"
-       id="path17023-1-4-0-9-1-8"
-       d="m 85.005265,319.52318 v 9.72874"
-       style="fill:none;stroke:#000000;stroke-width:0.87524033;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker17033-3-37-7-8-7-7)" />
-    <rect
-       style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:0.89574087;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
-       id="rect815-1-2-1-2-4-1"
-       width="220.00002"
-       height="19.999928"
-       x="-24.994745"
-       y="329.3876" />
-    <rect
-       style="fill:#ffffff;fill-opacity:1;stroke:#ff0000;stroke-width:0.89574087;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
-       id="rect815-1-2-3-9-8-4-1"
-       width="220.00002"
-       height="19.999928"
-       x="-24.994745"
-       y="359.3876" />
-    <path
-       inkscape:connector-curvature="0"
-       id="path17023-1-4-0-9-1-8-6"
-       d="m 85.005265,349.52318 v 9.72874"
-       style="fill:none;stroke:#000000;stroke-width:0.87524033;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker17033-3-37-7-8-7-7-5)" />
-    <path
-       inkscape:connector-curvature="0"
-       id="path17023-1-4-0-9-1-8-3"
-       d="m 85.005265,379.52318 v 9.72874"
-       style="fill:none;stroke:#000000;stroke-width:0.87524033;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker17033-3-37-7-8-7-7-0)" />
-    <text
-       id="text823-4-5-3"
-       y="343.07571"
-       x="84.63092"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.33333302px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.26999986"
-       xml:space="preserve"><tspan
-         id="tspan825-6-7-4"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.33333302px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:1.26999986"
-         y="343.07571"
-         x="84.63092"
-         sodipodi:role="line">Early Per-Fragment Tests</tspan></text>
-    <text
-       id="text823-7-9-0-6"
-       y="373.07571"
-       x="84.334686"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.33333302px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.26999986;stroke-miterlimit:4;stroke-dasharray:none"
-       xml:space="preserve"><tspan
-         id="tspan825-4-0-0-3"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.33333302px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke:none;stroke-width:1.26999986;stroke-miterlimit:4;stroke-dasharray:none"
-         y="373.07571"
-         x="84.334686"
-         sodipodi:role="line">Fragment Shader</tspan></text>
-    <rect
-       style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:0.89574087;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
-       id="rect815-1-2-1-2-4-1-2"
-       width="220.00002"
-       height="19.999928"
-       x="-24.994745"
-       y="389.3876" />
-    <text
-       id="text823-4-5-5-7"
-       y="402.8576"
-       x="84.63092"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.33333302px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.26999986"
-       xml:space="preserve"><tspan
-         id="tspan825-6-7-7-9"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.33333302px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:1.26999986"
-         y="402.8576"
-         x="84.63092"
-         sodipodi:role="line">Late Per-Fragment Tests</tspan></text>
-    <path
-       inkscape:connector-curvature="0"
-       id="path17023-1-4-0-9-1-8-3-2"
-       d="m 85.005265,409.52318 v 9.72874"
-       style="fill:none;stroke:#000000;stroke-width:0.87524033;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker17033-3-37-7-8-7-7-0-51)" />
-    <rect
-       style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:0.89574087;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
-       id="rect815-1-2-1-2-4-1-2-2"
-       width="220.00002"
-       height="19.999928"
-       x="-24.994745"
-       y="419.3876" />
-    <text
-       id="text823-4-2-9-4-3"
-       y="433.07571"
-       x="84.956436"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.33333302px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.26999986"
-       xml:space="preserve"><tspan
-         id="tspan825-6-0-2-5-4"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.33333302px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:1.26999986"
-         y="433.07571"
-         x="84.956436"
-         sodipodi:role="line">Blending</tspan></text>
-    <rect
-       style="fill:#808080;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
-       id="rect815-1-4-3-6-1-0"
-       width="220"
-       height="20"
-       x="245.00526"
-       y="59.387554" />
-    <rect
-       style="fill:#808080;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
-       id="rect815-1-4-3-6-1-6"
-       width="220"
-       height="20"
-       x="245.00526"
-       y="39.387554" />
-    <text
-       id="text823-4-2-9-4-7-1"
-       y="54.384296"
-       x="354.53976"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.33333302px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.26999986"
-       xml:space="preserve"><tspan
-         id="tspan825-6-0-2-5-6-2"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.33333302px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:1.26999986"
-         y="54.384296"
-         x="354.53976"
-         sodipodi:role="line">Index Buffer</tspan></text>
-    <text
-       id="text823-4-2-9-4-7-3"
-       y="74.3843"
-       x="355.19733"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.33333302px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.26999986"
-       xml:space="preserve"><tspan
-         id="tspan825-6-0-2-5-6-9"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.33333302px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:1.26999986"
-         y="74.3843"
-         x="355.19733"
-         sodipodi:role="line">Vertex Buffers</tspan></text>
-    <rect
-       style="fill:#808080;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
-       id="rect815-1-4-3-6-1-6-7"
-       width="210.00002"
-       height="19.999994"
-       x="250.00526"
-       y="119.38755" />
-    <rect
-       style="fill:#808080;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
-       id="rect815-1-4-3-6-1-6-7-2"
-       width="210.00002"
-       height="19.999994"
-       x="250.00526"
-       y="139.38754" />
-    <rect
-       style="fill:#808080;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
-       id="rect815-1-4-3-6-1-6-7-3"
-       width="210.00002"
-       height="19.999994"
-       x="250.00526"
-       y="159.38754" />
-    <rect
-       style="fill:#808080;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
-       id="rect815-1-4-3-6-1-6-7-1"
-       width="210.00002"
-       height="19.999994"
-       x="250.00526"
-       y="179.38754" />
-    <rect
-       style="fill:#808080;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
-       id="rect815-1-4-3-6-1-6-7-34"
-       width="210.00002"
-       height="19.999994"
-       x="250.00526"
-       y="199.38757" />
-    <rect
-       style="fill:#808080;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
-       id="rect815-1-4-3-6-1-6-7-7"
-       width="210.00002"
-       height="19.999994"
-       x="250.00526"
-       y="219.38757" />
-    <rect
-       style="fill:#808080;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
-       id="rect815-1-4-3-6-1-6-7-5"
-       width="210.00002"
-       height="19.999994"
-       x="250.00526"
-       y="239.38757" />
-    <text
-       id="text823-4-2-9-4-7-9-65"
-       y="134.35175"
-       x="354.63092"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.33333302px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.26999986"
-       xml:space="preserve"><tspan
-         id="tspan825-6-0-2-5-6-26-92"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.33333302px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:1.26999986"
-         y="134.35175"
-         x="354.63092"
-         sodipodi:role="line">Push Constants</tspan></text>
-    <text
-       id="text823-4-2-9-4-7-9-3-0"
-       y="154.38429"
-       x="354.70255"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.33333302px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.26999986"
-       xml:space="preserve"><tspan
-         id="tspan825-6-0-2-5-6-26-9-7"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.33333302px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:1.26999986"
-         y="154.38429"
-         x="354.70255"
-         sodipodi:role="line">Uniform Buffers</tspan></text>
-    <text
-       id="text823-4-2-9-4-7-9-2-2"
-       y="174.38429"
-       x="354.70255"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.33333302px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.26999986"
-       xml:space="preserve"><tspan
-         id="tspan825-6-0-2-5-6-26-4-3"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.33333302px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:1.26999986"
-         y="174.38429"
-         x="354.70255"
-         sodipodi:role="line">Uniform Texel Buffers</tspan></text>
-    <text
-       id="text823-4-2-9-4-7-9-8-2"
-       y="193.0757"
-       x="354.84579"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.33333302px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.26999986"
-       xml:space="preserve"><tspan
-         id="tspan825-6-0-2-5-6-26-5-1"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.33333302px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:1.26999986"
-         y="193.0757"
-         x="354.84579"
-         sodipodi:role="line">Sampled Images</tspan></text>
-    <text
-       id="text823-4-2-9-4-7-9-8-0-8"
-       y="213.10826"
-       x="354.84579"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.33333302px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.26999986"
-       xml:space="preserve"><tspan
-         id="tspan825-6-0-2-5-6-26-5-4-5"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.33333302px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:1.26999986"
-         y="213.10826"
-         x="354.84579"
-         sodipodi:role="line">Storage Buffers</tspan></text>
-    <text
-       id="text823-4-2-9-4-7-9-8-8-1"
-       y="233.10826"
-       x="354.84579"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.33333302px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.26999986"
-       xml:space="preserve"><tspan
-         id="tspan825-6-0-2-5-6-26-5-5-5"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.33333302px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:1.26999986"
-         y="233.10826"
-         x="354.84579"
-         sodipodi:role="line">Storage Texel Buffers</tspan></text>
-    <text
-       id="text823-4-2-9-4-7-9-8-05-4"
-       y="252.9455"
-       x="354.84579"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.33333302px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.26999986"
-       xml:space="preserve"><tspan
-         id="tspan825-6-0-2-5-6-26-5-3-6"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.33333302px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:1.26999986"
-         y="252.9455"
-         x="354.84579"
-         sodipodi:role="line">Storage Images</tspan></text>
-    <rect
-       style="fill:#ffffff;fill-opacity:1;stroke:#ff0000;stroke-width:0.89600003;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
-       id="rect815-1-2-3-0"
-       width="140.00005"
-       height="19.999928"
-       x="515.00525"
-       y="119.38759" />
-    <text
-       id="text823-0"
-       y="134.35175"
-       x="584.98572"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.33333302px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.26999986;stroke-miterlimit:4;stroke-dasharray:none"
-       xml:space="preserve"><tspan
-         id="tspan825-8"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.33333302px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke:none;stroke-width:1.26999986;stroke-miterlimit:4;stroke-dasharray:none"
-         y="134.35175"
-         x="584.98572"
-         sodipodi:role="line">Task Shader</tspan></text>
-    <rect
-       style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:0.89600003;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
-       id="rect815-1-6"
-       width="140.00005"
-       height="19.999928"
-       x="515.00525"
-       y="-0.61240721" />
-    <text
-       id="text823-4-0"
-       y="13.111511"
-       x="584.93042"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.33333302px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.26999986"
-       xml:space="preserve"><tspan
-         id="tspan825-6-2"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.33333302px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:1.26999986"
-         y="13.111511"
-         x="584.93042"
-         sodipodi:role="line">DrawMeshTasks</tspan></text>
-    <rect
-       style="fill:#808080;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
-       id="rect815-1-4-3-6-1-6-6"
-       width="220"
-       height="20"
-       x="245.00526"
-       y="329.38754" />
-    <text
-       id="text823-4-2-9-4-7-9-8-05-4-5"
-       y="342.9455"
-       x="354.84576"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.33333302px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.26999986"
-       xml:space="preserve"><tspan
-         id="tspan825-6-0-2-5-6-26-5-3-6-4"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.33333302px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:1.26999986"
-         y="342.9455"
-         x="354.84576"
-         sodipodi:role="line">Depth/Stencil Attachments</tspan></text>
-    <rect
-       style="fill:#808080;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
-       id="rect815-1-4-3-6-1-6-6-4"
-       width="220"
-       height="20"
-       x="245.00526"
-       y="359.38754" />
-    <text
-       id="text823-4-2-9-4-7-9-8-05-4-5-3"
-       y="372.9455"
-       x="354.84576"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.33333302px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.26999986"
-       xml:space="preserve"><tspan
-         id="tspan825-6-0-2-5-6-26-5-3-6-4-0"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.33333302px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:1.26999986"
-         y="372.9455"
-         x="354.84576"
-         sodipodi:role="line">Input Attachments</tspan></text>
-    <rect
-       style="fill:#808080;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
-       id="rect815-1-4-3-6-1-6-6-2"
-       width="220"
-       height="20"
-       x="245.00526"
-       y="419.38754" />
-    <text
-       id="text823-4-2-9-4-7-9-8-05-4-5-6"
-       y="432.9455"
-       x="354.84576"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.33333302px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.26999986"
-       xml:space="preserve"><tspan
-         id="tspan825-6-0-2-5-6-26-5-3-6-4-6"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.33333302px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:1.26999986"
-         y="432.9455"
-         x="354.84576"
-         sodipodi:role="line">Color Attachments</tspan></text>
-    <rect
-       style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:0.89574087;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
-       id="rect815-1-26"
-       width="210.00002"
-       height="20.00001"
-       x="620.00525"
-       y="359.38754" />
-    <text
-       id="text823-4-8"
-       y="374.13358"
-       x="724.63416"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.33333302px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.26999986"
-       xml:space="preserve"><tspan
-         id="tspan825-6-1"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.33333302px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:1.26999986"
-         y="374.13358"
-         x="724.63416"
-         sodipodi:role="line">Fixed Function Stage</tspan></text>
-    <rect
-       style="fill:#ffffff;fill-opacity:1;stroke:#ff0000;stroke-width:0.89574087;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
-       id="rect815-1-2-3-0-5"
-       width="210.00002"
-       height="20.00001"
-       x="620.00525"
-       y="389.38754" />
-    <text
-       id="text823-0-2"
-       y="403.11151"
-       x="724.61139"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.33333302px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.26999986;stroke-miterlimit:4;stroke-dasharray:none"
-       xml:space="preserve"><tspan
-         id="tspan825-8-5"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.33333302px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke:none;stroke-width:1.26999986;stroke-miterlimit:4;stroke-dasharray:none"
-         y="403.11151"
-         x="724.61139"
-         sodipodi:role="line">Shader Stage</tspan></text>
-    <rect
-       style="fill:#808080;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
-       id="rect815-1-4-3-6-1-6-7-5-0"
-       width="210.00002"
-       height="19.999994"
-       x="620.00525"
-       y="419.38757" />
-    <text
-       id="text823-4-2-9-4-7-9-8-05-4-9"
-       y="432.9455"
-       x="724.84583"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.33333302px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.26999986"
-       xml:space="preserve"><tspan
-         id="tspan825-6-0-2-5-6-26-5-3-6-42"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.33333302px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:1.26999986"
-         y="432.9455"
-         x="724.84583"
-         sodipodi:role="line"> Resource</tspan></text>
-    <path
-       style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker9512-2)"
-       d="m 465.00526,9.3875526 h 50"
-       id="path9502-7"
-       inkscape:connector-curvature="0"
-       sodipodi:nodetypes="cc" />
-    <rect
-       style="fill:#ffffff;fill-opacity:1;stroke:#ff0000;stroke-width:0.89600003;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
-       id="rect815-1-2-3-0-0"
-       width="140.00005"
-       height="19.999928"
-       x="695.00519"
-       y="49.387558" />
-    <text
-       id="text823-0-5"
-       y="63.111511"
-       x="764.61139"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.33333302px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.26999986;stroke-miterlimit:4;stroke-dasharray:none"
-       xml:space="preserve"><tspan
-         id="tspan825-8-6"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.33333302px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke:none;stroke-width:1.26999986;stroke-miterlimit:4;stroke-dasharray:none"
-         y="63.111511"
-         x="764.61139"
-         sodipodi:role="line">Compute Shader</tspan></text>
-    <rect
-       style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:0.89600003;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
-       id="rect815-1-6-0"
-       width="140.00005"
-       height="19.999928"
-       x="695.00519"
-       y="-0.61240697" />
-    <text
-       id="text823-4-0-3"
-       y="13.111515"
-       x="764.93036"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.33333302px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.26999986"
-       xml:space="preserve"><tspan
-         id="tspan825-6-2-2"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.33333302px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:1.26999986"
-         y="13.111515"
-         x="764.93036"
-         sodipodi:role="line">Dispatch</tspan></text>
-    <rect
-       style="fill:#ffffff;fill-opacity:1;stroke:#ff0000;stroke-width:0.89600003;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
-       id="rect815-1-2-3-0-8"
-       width="140.00005"
-       height="19.999928"
-       x="514.35425"
-       y="219.38757" />
-    <rect
-       style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:0.89600003;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
-       id="rect815-1-2-9"
-       width="140.00002"
-       height="19.999928"
-       x="515.00525"
-       y="89.387589" />
-    <text
-       id="text823-4-2-83"
-       y="104.35175"
-       x="584.98572"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.33333302px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.26999986"
-       xml:space="preserve"><tspan
-         id="tspan825-6-0-4"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.33333302px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:1.26999986"
-         y="104.35175"
-         x="584.98572"
-         sodipodi:role="line">Task Assembler</tspan></text>
-    <rect
-       style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:0.89600003;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
-       id="rect815-1-2-9-1"
-       width="140.00002"
-       height="19.999928"
-       x="514.35425"
-       y="189.38757" />
-    <text
-       id="text823-4-2-83-4"
-       y="204.35175"
-       x="584.33472"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.33333302px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.26999986"
-       xml:space="preserve"><tspan
-         id="tspan825-6-0-4-8"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.33333302px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:1.26999986"
-         y="204.35175"
-         x="584.33472"
-         sodipodi:role="line">Mesh Assembler</tspan></text>
-    <text
-       id="text823-4-2-83-4-8"
-       y="234.35173"
-       x="583.68372"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.33333302px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.26999986"
-       xml:space="preserve"><tspan
-         id="tspan825-6-0-4-8-9"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.33333302px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:1.26999986"
-         y="234.35173"
-         x="583.68372"
-         sodipodi:role="line">Mesh Shader</tspan></text>
-    <path
-       style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker9511)"
-       d="m 585.00526,19.387553 v 70"
-       id="path9501"
-       inkscape:connector-curvature="0"
-       sodipodi:nodetypes="cc" />
-    <path
-       style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker9769)"
-       d="m 585.00526,109.38755 v 10"
-       id="path9759"
-       inkscape:connector-curvature="0" />
-    <path
-       style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker10363)"
-       d="m 585.00526,79.387553 h 80 v 69.999997 h -80"
-       id="path10353"
-       inkscape:connector-curvature="0"
-       sodipodi:nodetypes="ccc" />
-    <path
-       style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker10639)"
-       d="m 585.00526,139.38755 v 50"
-       id="path10629"
-       inkscape:connector-curvature="0"
-       sodipodi:nodetypes="cc" />
-    <path
-       style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker10921)"
-       d="m 584.3542,209.38753 v 10"
-       id="path10911"
-       inkscape:connector-curvature="0" />
-    <path
-       style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker11209)"
-       d="m 585.00526,239.38755 v 40 h -360 v -5 h -10 v 5 h -20"
-       id="path11199"
-       inkscape:connector-curvature="0"
-       sodipodi:nodetypes="ccccccc" />
-    <path
-       style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker15027)"
-       d="M 490.00526,9.3875526 V 29.387553 h 90 v -5 h 10 v 5 h 85 V 9.3875526 h 20"
-       id="path15017"
-       inkscape:connector-curvature="0" />
-    <path
-       style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker15357)"
-       d="m 490.00526,129.38755 23.98327,-0.0793"
-       id="path15347"
-       inkscape:connector-curvature="0" />
-    <path
-       style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker15681)"
-       d="m 489.3542,229.38753 24.69038,0.0769"
-       id="path15671"
-       inkscape:connector-curvature="0"
-       sodipodi:nodetypes="cc" />
-    <path
-       style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker19523)"
-       d="m 760.00526,19.387553 0,30"
-       id="path21617"
-       inkscape:connector-curvature="0"
-       sodipodi:nodetypes="cc" />
-  </g>
-</svg>
diff --git a/registry/vulkan/images/pixel_index_1x1.svg b/registry/vulkan/images/pixel_index_1x1.svg
deleted file mode 100644
index badc184..0000000
--- a/registry/vulkan/images/pixel_index_1x1.svg
+++ /dev/null
@@ -1,183 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<svg
-   xmlns:dc="http://purl.org/dc/elements/1.1/"
-   xmlns:cc="http://creativecommons.org/ns#"
-   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
-   xmlns:svg="http://www.w3.org/2000/svg"
-   xmlns="http://www.w3.org/2000/svg"
-   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
-   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
-   sodipodi:docname="pixel_index_1x1.svg"
-   inkscape:version="1.0 (4035a4fb49, 2020-05-01)"
-   id="svg8"
-   version="1.1"
-   viewBox="0 0 27.77969 26.901191"
-   height="101.67381"
-   width="104.99409">
-  <defs
-     id="defs2">
-    <marker
-       inkscape:stockid="Arrow1Lend"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="marker1483"
-       style="overflow:visible"
-       inkscape:isstock="true">
-      <path
-         inkscape:connector-curvature="0"
-         id="path1481"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
-         transform="matrix(-0.8,0,0,-0.8,-10,0)" />
-    </marker>
-    <marker
-       inkscape:collect="always"
-       inkscape:isstock="true"
-       style="overflow:visible"
-       id="Arrow1Lend"
-       refX="0"
-       refY="0"
-       orient="auto"
-       inkscape:stockid="Arrow1Lend">
-      <path
-         inkscape:connector-curvature="0"
-         transform="matrix(-0.8,0,0,-0.8,-10,0)"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         id="path977" />
-    </marker>
-  </defs>
-  <sodipodi:namedview
-     inkscape:document-rotation="0"
-     inkscape:snap-center="true"
-     units="px"
-     fit-margin-left="1"
-     fit-margin-bottom="1"
-     fit-margin-right="1"
-     fit-margin-top="1"
-     inkscape:window-maximized="0"
-     inkscape:window-y="0"
-     inkscape:window-x="0"
-     inkscape:window-height="1018"
-     inkscape:window-width="960"
-     inkscape:snap-text-baseline="true"
-     inkscape:snap-object-midpoints="true"
-     showgrid="true"
-     inkscape:current-layer="layer1"
-     inkscape:document-units="px"
-     inkscape:cy="13.121973"
-     inkscape:cx="4.4991286"
-     inkscape:zoom="2.0930361"
-     inkscape:pageshadow="2"
-     inkscape:pageopacity="0.0"
-     borderopacity="1.0"
-     bordercolor="#666666"
-     pagecolor="#ffffff"
-     id="base">
-    <inkscape:grid
-       dotted="false"
-       originy="-89.436898"
-       originx="-20.366723"
-       id="grid12"
-       type="xygrid" />
-  </sodipodi:namedview>
-  <metadata
-     id="metadata5">
-    <rdf:RDF>
-      <cc:Work
-         rdf:about="">
-        <dc:format>image/svg+xml</dc:format>
-        <dc:type
-           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
-        <dc:title></dc:title>
-      </cc:Work>
-    </rdf:RDF>
-  </metadata>
-  <g
-     transform="translate(-28.116567,-11.729621)"
-     id="layer1"
-     inkscape:groupmode="layer"
-     inkscape:label="Layer 1">
-    <path
-       sodipodi:nodetypes="ccccc"
-       inkscape:connector-curvature="0"
-       id="path1171"
-       d="m 36.854018,12.251027 18.520828,1.8e-5 v 18.520833 l -18.520817,-0.001 -1.1e-5,-18.519799"
-       style="fill:none;stroke:#808080;stroke-width:0.264583;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
-    <g
-       id="g271"
-       transform="translate(-22.751249,-5.5676023)">
-      <text
-         id="text121-3-7-8-0"
-         y="43.525604"
-         x="69.692329"
-         style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.82223px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
-         xml:space="preserve"><tspan
-           id="tspan265"
-           sodipodi:role="line"
-           x="69.692329"
-           y="43.525604">x</tspan></text>
-      <text
-         xml:space="preserve"
-         style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
-         x="67.711052"
-         y="42.973698"
-         id="text121-3-7-8-9-1"><tspan
-           style="stroke-width:0.264583"
-           sodipodi:role="line"
-           id="tspan239-0"
-           x="67.711052"
-           y="42.973698">f</tspan></text>
-    </g>
-    <path
-       sodipodi:nodetypes="cccc"
-       inkscape:connector-curvature="0"
-       id="path972"
-       d="m 36.854018,36.062494 6.614579,10e-4 m 5.291666,0 6.614583,-9.1e-5"
-       style="fill:none;stroke:#000000;stroke-width:0.132291px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow1Lend)" />
-    <path
-       sodipodi:nodetypes="cccc"
-       style="fill:none;stroke:#000000;stroke-width:0.132291px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker1483)"
-       d="m 31.562353,30.77186 -2e-6,-6.614583 m 0,-5.291666 3e-6,-6.614582"
-       id="path1473"
-       inkscape:connector-curvature="0" />
-    <g
-       transform="translate(0.83905268,0.28766514)"
-       id="g545">
-      <g
-         transform="translate(-3.7341421,26.933758)"
-         id="g277">
-        <text
-           id="text121-3-7-8"
-           y="-4.0993972"
-           x="35.296494"
-           style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.82222px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
-           xml:space="preserve"><tspan
-             style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.82222px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.264583"
-             y="-4.0993972"
-             x="35.296494"
-             id="tspan119-1-8-3"
-             sodipodi:role="line">y</tspan></text>
-        <text
-           xml:space="preserve"
-           style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
-           x="33.31522"
-           y="-4.6513033"
-           id="text121-3-7-8-9"><tspan
-             sodipodi:role="line"
-             id="tspan239"
-             x="33.31522"
-             y="-4.6513033">f</tspan></text>
-      </g>
-    </g>
-    <text
-       transform="scale(0.98828059,1.0118584)"
-       style="stroke-width:0.00380337"
-       id="text23"
-       font-size="4.18372px"
-       fill="#ff0000"
-       y="22.779236"
-       x="45.329342">0</text>
-  </g>
-</svg>
diff --git a/registry/vulkan/images/pixel_index_1x2.svg b/registry/vulkan/images/pixel_index_1x2.svg
deleted file mode 100644
index 5ae23af..0000000
--- a/registry/vulkan/images/pixel_index_1x2.svg
+++ /dev/null
@@ -1,188 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<svg
-   xmlns:dc="http://purl.org/dc/elements/1.1/"
-   xmlns:cc="http://creativecommons.org/ns#"
-   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
-   xmlns:svg="http://www.w3.org/2000/svg"
-   xmlns="http://www.w3.org/2000/svg"
-   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
-   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
-   sodipodi:docname="pixel_index_1x2.svg"
-   inkscape:version="1.0 (4035a4fb49, 2020-05-01)"
-   id="svg8"
-   version="1.1"
-   viewBox="0 0 27.779696 45.528409"
-   height="172.07588"
-   width="104.99412">
-  <defs
-     id="defs2">
-    <marker
-       inkscape:stockid="Arrow1Lend"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="marker1483"
-       style="overflow:visible"
-       inkscape:isstock="true">
-      <path
-         inkscape:connector-curvature="0"
-         id="path1481"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
-         transform="matrix(-0.8,0,0,-0.8,-10,0)" />
-    </marker>
-    <marker
-       inkscape:collect="always"
-       inkscape:isstock="true"
-       style="overflow:visible"
-       id="Arrow1Lend"
-       refX="0"
-       refY="0"
-       orient="auto"
-       inkscape:stockid="Arrow1Lend">
-      <path
-         inkscape:connector-curvature="0"
-         transform="matrix(-0.8,0,0,-0.8,-10,0)"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         id="path977" />
-    </marker>
-  </defs>
-  <sodipodi:namedview
-     showguides="false"
-     inkscape:document-rotation="0"
-     inkscape:snap-center="true"
-     units="px"
-     fit-margin-left="1"
-     fit-margin-bottom="1"
-     fit-margin-right="1"
-     fit-margin-top="1"
-     inkscape:window-maximized="0"
-     inkscape:window-y="0"
-     inkscape:window-x="954"
-     inkscape:window-height="1010"
-     inkscape:window-width="958"
-     inkscape:snap-text-baseline="true"
-     inkscape:snap-object-midpoints="true"
-     showgrid="true"
-     inkscape:current-layer="layer1"
-     inkscape:document-units="px"
-     inkscape:cy="-15.114603"
-     inkscape:cx="29.873733"
-     inkscape:zoom="1.48"
-     inkscape:pageshadow="2"
-     inkscape:pageopacity="0.0"
-     borderopacity="1.0"
-     bordercolor="#666666"
-     pagecolor="#ffffff"
-     id="base">
-    <inkscape:grid
-       dotted="false"
-       originy="-70.809709"
-       originx="-20.366718"
-       id="grid12"
-       type="xygrid" />
-  </sodipodi:namedview>
-  <metadata
-     id="metadata5">
-    <rdf:RDF>
-      <cc:Work
-         rdf:about="">
-        <dc:format>image/svg+xml</dc:format>
-        <dc:type
-           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
-        <dc:title />
-      </cc:Work>
-    </rdf:RDF>
-  </metadata>
-  <g
-     transform="translate(-28.116567,6.8975958)"
-     id="layer1"
-     inkscape:groupmode="layer"
-     inkscape:label="Layer 1">
-    <path
-       sodipodi:nodetypes="ccccccc"
-       inkscape:connector-curvature="0"
-       id="path1171"
-       d="m 36.854017,-6.2698068 h 18.520834 l 10e-7,37.0416328 -18.520823,-0.001 -1.2e-5,-37.0406328 m 18.520835,18.5208318 -18.520823,-10e-4"
-       style="fill:none;stroke:#808080;stroke-width:0.264583;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
-    <g
-       id="g271"
-       transform="translate(-22.751244,-5.5676207)">
-      <text
-         id="text121-3-7-8-0"
-         y="43.525604"
-         x="69.692329"
-         style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.82223px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
-         xml:space="preserve"><tspan
-           id="tspan265"
-           sodipodi:role="line"
-           x="69.692329"
-           y="43.525604">x</tspan></text>
-      <text
-         xml:space="preserve"
-         style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
-         x="67.711052"
-         y="42.973698"
-         id="text121-3-7-8-9-1"><tspan
-           style="stroke-width:0.264583"
-           sodipodi:role="line"
-           id="tspan239-0"
-           x="67.711052"
-           y="42.973698">f</tspan></text>
-    </g>
-    <path
-       sodipodi:nodetypes="cccc"
-       inkscape:connector-curvature="0"
-       id="path972"
-       d="m 36.854018,36.062494 6.614584,10e-4 m 5.291667,0 6.614583,-6.3e-5"
-       style="fill:none;stroke:#000000;stroke-width:0.132291px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow1Lend)" />
-    <path
-       sodipodi:nodetypes="cccc"
-       style="fill:none;stroke:#000000;stroke-width:0.187088px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker1483)"
-       d="m 31.562353,30.77186 -3e-6,-15.875 m 0,-5.2916663 4e-6,-15.8750005"
-       id="path1473"
-       inkscape:connector-curvature="0" />
-    <g
-       id="g277"
-       transform="translate(-2.8950905,17.961006)">
-      <text
-         xml:space="preserve"
-         style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.82222px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
-         x="35.296494"
-         y="-4.0993972"
-         id="text121-3-7-8"><tspan
-           sodipodi:role="line"
-           id="tspan119-1-8-3"
-           x="35.296494"
-           y="-4.0993972"
-           style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.82222px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.264583">y</tspan></text>
-      <text
-         id="text121-3-7-8-9"
-         y="-4.6513033"
-         x="33.31522"
-         style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
-         xml:space="preserve"><tspan
-           y="-4.6513033"
-           x="33.31522"
-           id="tspan239"
-           sodipodi:role="line">f</tspan></text>
-    </g>
-    <text
-       transform="scale(0.98828058,1.0118584)"
-       style="stroke-width:0.00380336"
-       id="text23"
-       font-size="4.18372px"
-       fill="#ff0000"
-       y="22.674101"
-       x="45.329342">0</text>
-    <text
-       transform="scale(0.98828058,1.0118584)"
-       style="stroke-width:0.00380336"
-       id="text23-7"
-       font-size="4.18372px"
-       fill="#ff0000"
-       y="4.4754329"
-       x="45.329346">1</text>
-  </g>
-</svg>
diff --git a/registry/vulkan/images/pixel_index_1x4.svg b/registry/vulkan/images/pixel_index_1x4.svg
deleted file mode 100644
index 87e8f78..0000000
--- a/registry/vulkan/images/pixel_index_1x4.svg
+++ /dev/null
@@ -1,202 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<svg
-   xmlns:dc="http://purl.org/dc/elements/1.1/"
-   xmlns:cc="http://creativecommons.org/ns#"
-   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
-   xmlns:svg="http://www.w3.org/2000/svg"
-   xmlns="http://www.w3.org/2000/svg"
-   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
-   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
-   sodipodi:docname="pixel_index_1x4.svg"
-   inkscape:version="1.0 (4035a4fb49, 2020-05-01)"
-   id="svg8"
-   version="1.1"
-   viewBox="0 0 27.779696 82.720522"
-   height="312.6445"
-   width="104.99412">
-  <defs
-     id="defs2">
-    <marker
-       inkscape:stockid="Arrow1Lend"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="marker1483"
-       style="overflow:visible"
-       inkscape:isstock="true">
-      <path
-         inkscape:connector-curvature="0"
-         id="path1481"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
-         transform="matrix(-0.8,0,0,-0.8,-10,0)" />
-    </marker>
-    <marker
-       inkscape:collect="always"
-       inkscape:isstock="true"
-       style="overflow:visible"
-       id="Arrow1Lend"
-       refX="0"
-       refY="0"
-       orient="auto"
-       inkscape:stockid="Arrow1Lend">
-      <path
-         inkscape:connector-curvature="0"
-         transform="matrix(-0.8,0,0,-0.8,-10,0)"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         id="path977" />
-    </marker>
-  </defs>
-  <sodipodi:namedview
-     inkscape:document-rotation="0"
-     inkscape:snap-center="true"
-     units="px"
-     fit-margin-left="1"
-     fit-margin-bottom="1"
-     fit-margin-right="1"
-     fit-margin-top="1"
-     inkscape:window-maximized="0"
-     inkscape:window-y="0"
-     inkscape:window-x="954"
-     inkscape:window-height="1010"
-     inkscape:window-width="958"
-     inkscape:snap-text-baseline="true"
-     inkscape:snap-object-midpoints="true"
-     showgrid="true"
-     inkscape:current-layer="layer1"
-     inkscape:document-units="px"
-     inkscape:cy="285.32692"
-     inkscape:cx="152.58531"
-     inkscape:zoom="1.48"
-     inkscape:pageshadow="2"
-     inkscape:pageopacity="0.0"
-     borderopacity="1.0"
-     bordercolor="#666666"
-     pagecolor="#ffffff"
-     id="base">
-    <inkscape:grid
-       dotted="false"
-       originy="-33.617598"
-       originx="-20.366717"
-       id="grid12"
-       type="xygrid" />
-  </sodipodi:namedview>
-  <metadata
-     id="metadata5">
-    <rdf:RDF>
-      <cc:Work
-         rdf:about="">
-        <dc:format>image/svg+xml</dc:format>
-        <dc:type
-           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
-        <dc:title />
-      </cc:Work>
-    </rdf:RDF>
-  </metadata>
-  <g
-     transform="translate(-28.116567,44.089711)"
-     id="layer1"
-     inkscape:groupmode="layer"
-     inkscape:label="Layer 1">
-    <path
-       sodipodi:nodetypes="ccccccccccc"
-       inkscape:connector-curvature="0"
-       id="path1171"
-       d="m 36.85402,-43.312509 18.520832,10e-4 v 74.083335 l -18.520823,-0.001 -9e-6,-74.083337 m 18.520832,55.563536 -18.520823,-10e-4 m -7e-6,-18.5208395 18.52083,0.00101 m 0,-18.5208335 -18.52083,-9.73e-4"
-       style="fill:none;stroke:#808080;stroke-width:0.264583;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
-    <g
-       id="g271"
-       transform="translate(-22.751244,-5.5676207)">
-      <text
-         id="text121-3-7-8-0"
-         y="43.525604"
-         x="69.692329"
-         style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.82223px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
-         xml:space="preserve"><tspan
-           id="tspan265"
-           sodipodi:role="line"
-           x="69.692329"
-           y="43.525604">x</tspan></text>
-      <text
-         xml:space="preserve"
-         style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
-         x="67.711052"
-         y="42.973698"
-         id="text121-3-7-8-9-1"><tspan
-           style="stroke-width:0.264583"
-           sodipodi:role="line"
-           id="tspan239-0"
-           x="67.711052"
-           y="42.973698">f</tspan></text>
-    </g>
-    <path
-       sodipodi:nodetypes="cccc"
-       inkscape:connector-curvature="0"
-       id="path972"
-       d="m 36.854018,36.062494 6.614584,10e-4 m 5.291667,0 6.614583,-6.3e-5"
-       style="fill:none;stroke:#000000;stroke-width:0.132291px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow1Lend)" />
-    <path
-       style="fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker1483)"
-       d="M 31.562353,30.77186 V -3.6239751 m 10e-7,-5.2916661 V -43.311476"
-       id="path1473"
-       inkscape:connector-curvature="0" />
-    <g
-       id="g277"
-       transform="translate(-2.9074896,-0.27595285)">
-      <text
-         xml:space="preserve"
-         style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.82222px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
-         x="35.296494"
-         y="-4.0993972"
-         id="text121-3-7-8"><tspan
-           sodipodi:role="line"
-           id="tspan119-1-8-3"
-           x="35.296494"
-           y="-4.0993972"
-           style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.82222px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.264583">y</tspan></text>
-      <text
-         id="text121-3-7-8-9"
-         y="-4.6513033"
-         x="33.31522"
-         style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
-         xml:space="preserve"><tspan
-           y="-4.6513033"
-           x="33.31522"
-           id="tspan239"
-           sodipodi:role="line">f</tspan></text>
-    </g>
-    <text
-       transform="scale(0.98828058,1.0118584)"
-       style="stroke-width:0.00380336"
-       id="text23"
-       font-size="4.18372px"
-       fill="#ff0000"
-       y="22.525417"
-       x="45.329342">0</text>
-    <text
-       transform="scale(0.98828058,1.0118584)"
-       style="stroke-width:0.00380336"
-       id="text23-7"
-       font-size="4.18372px"
-       fill="#ff0000"
-       y="4.3267488"
-       x="45.329346">1</text>
-    <text
-       transform="scale(0.98828058,1.0118584)"
-       style="stroke-width:0.00380336"
-       id="text23-2"
-       font-size="4.18372px"
-       fill="#ff0000"
-       y="-13.977032"
-       x="45.32935">2</text>
-    <text
-       transform="scale(0.98828058,1.0118584)"
-       style="stroke-width:0.00380336"
-       id="text23-8"
-       font-size="4.18372px"
-       fill="#ff0000"
-       y="-32.385925"
-       x="45.329346">3</text>
-  </g>
-</svg>
diff --git a/registry/vulkan/images/pixel_index_2x1.svg b/registry/vulkan/images/pixel_index_2x1.svg
deleted file mode 100644
index 6a9ee26..0000000
--- a/registry/vulkan/images/pixel_index_2x1.svg
+++ /dev/null
@@ -1,191 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<svg
-   xmlns:dc="http://purl.org/dc/elements/1.1/"
-   xmlns:cc="http://creativecommons.org/ns#"
-   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
-   xmlns:svg="http://www.w3.org/2000/svg"
-   xmlns="http://www.w3.org/2000/svg"
-   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
-   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
-   sodipodi:docname="pixel_index_2x1.svg"
-   inkscape:version="1.0 (4035a4fb49, 2020-05-01)"
-   id="svg8"
-   version="1.1"
-   viewBox="0 0 46.406909 26.901191"
-   height="101.67381"
-   width="175.39618">
-  <defs
-     id="defs2">
-    <marker
-       inkscape:stockid="Arrow1Lend"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="marker1483"
-       style="overflow:visible"
-       inkscape:isstock="true">
-      <path
-         inkscape:connector-curvature="0"
-         id="path1481"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
-         transform="matrix(-0.8,0,0,-0.8,-10,0)" />
-    </marker>
-    <marker
-       inkscape:collect="always"
-       inkscape:isstock="true"
-       style="overflow:visible"
-       id="Arrow1Lend"
-       refX="0"
-       refY="0"
-       orient="auto"
-       inkscape:stockid="Arrow1Lend">
-      <path
-         inkscape:connector-curvature="0"
-         transform="matrix(-0.8,0,0,-0.8,-10,0)"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         id="path977" />
-    </marker>
-  </defs>
-  <sodipodi:namedview
-     inkscape:document-rotation="0"
-     inkscape:snap-center="true"
-     units="px"
-     fit-margin-left="1"
-     fit-margin-bottom="1"
-     fit-margin-right="1"
-     fit-margin-top="1"
-     inkscape:window-maximized="0"
-     inkscape:window-y="0"
-     inkscape:window-x="0"
-     inkscape:window-height="1018"
-     inkscape:window-width="960"
-     inkscape:snap-text-baseline="true"
-     inkscape:snap-object-midpoints="true"
-     showgrid="true"
-     inkscape:current-layer="layer1"
-     inkscape:document-units="px"
-     inkscape:cy="-37.066166"
-     inkscape:cx="161.67627"
-     inkscape:zoom="1.48"
-     inkscape:pageshadow="2"
-     inkscape:pageopacity="0.0"
-     borderopacity="1.0"
-     bordercolor="#666666"
-     pagecolor="#ffffff"
-     id="base">
-    <inkscape:grid
-       dotted="false"
-       originy="-89.436907"
-       originx="-20.366719"
-       id="grid12"
-       type="xygrid" />
-  </sodipodi:namedview>
-  <metadata
-     id="metadata5">
-    <rdf:RDF>
-      <cc:Work
-         rdf:about="">
-        <dc:format>image/svg+xml</dc:format>
-        <dc:type
-           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
-        <dc:title />
-      </cc:Work>
-    </rdf:RDF>
-  </metadata>
-  <g
-     transform="translate(-28.116567,-11.729621)"
-     id="layer1"
-     inkscape:groupmode="layer"
-     inkscape:label="Layer 1">
-    <path
-       sodipodi:nodetypes="ccccccc"
-       inkscape:connector-curvature="0"
-       id="path1171"
-       d="m 36.854018,12.251027 37.041663,9e-6 v 18.520833 l -37.041652,-10e-4 -1.1e-5,-18.519799 m 18.520834,0 1.1e-5,18.519799"
-       style="fill:none;stroke:#808080;stroke-width:0.264583;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
-    <g
-       id="g271"
-       transform="translate(-13.49083,-5.5676114)">
-      <text
-         id="text121-3-7-8-0"
-         y="43.525604"
-         x="69.692329"
-         style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.82223px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
-         xml:space="preserve"><tspan
-           id="tspan265"
-           sodipodi:role="line"
-           x="69.692329"
-           y="43.525604">x</tspan></text>
-      <text
-         xml:space="preserve"
-         style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
-         x="67.711052"
-         y="42.973698"
-         id="text121-3-7-8-9-1"><tspan
-           style="stroke-width:0.264583"
-           sodipodi:role="line"
-           id="tspan239-0"
-           x="67.711052"
-           y="42.973698">f</tspan></text>
-    </g>
-    <path
-       sodipodi:nodetypes="cccc"
-       inkscape:connector-curvature="0"
-       id="path972"
-       d="m 36.854018,36.062494 15.874997,10e-4 m 5.291667,0 15.874999,-4.1e-5"
-       style="fill:none;stroke:#000000;stroke-width:0.187088px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow1Lend)" />
-    <path
-       sodipodi:nodetypes="cccc"
-       style="fill:none;stroke:#000000;stroke-width:0.132291px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker1483)"
-       d="m 31.562353,30.77186 -2e-6,-6.614583 m 0,-5.291666 3e-6,-6.614582"
-       id="path1473"
-       inkscape:connector-curvature="0" />
-    <g
-       transform="translate(0.83905268,0.28766514)"
-       id="g545">
-      <g
-         transform="translate(-3.7341421,26.933758)"
-         id="g277">
-        <text
-           id="text121-3-7-8"
-           y="-4.0993972"
-           x="35.296494"
-           style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.82222px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
-           xml:space="preserve"><tspan
-             style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.82222px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.264583"
-             y="-4.0993972"
-             x="35.296494"
-             id="tspan119-1-8-3"
-             sodipodi:role="line">y</tspan></text>
-        <text
-           xml:space="preserve"
-           style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
-           x="33.31522"
-           y="-4.6513033"
-           id="text121-3-7-8-9"><tspan
-             sodipodi:role="line"
-             id="tspan239"
-             x="33.31522"
-             y="-4.6513033">f</tspan></text>
-      </g>
-    </g>
-    <text
-       transform="scale(0.98828058,1.0118584)"
-       style="stroke-width:0.00380336"
-       id="text23"
-       font-size="4.18372px"
-       fill="#ff0000"
-       y="22.779236"
-       x="45.329342">0</text>
-    <text
-       transform="scale(0.98828058,1.0118584)"
-       style="stroke-width:0.00380336"
-       id="text23-7"
-       font-size="4.18372px"
-       fill="#ff0000"
-       y="22.884348"
-       x="64.069801">1</text>
-  </g>
-</svg>
diff --git a/registry/vulkan/images/pixel_index_2x2.svg b/registry/vulkan/images/pixel_index_2x2.svg
deleted file mode 100644
index 67474cf..0000000
--- a/registry/vulkan/images/pixel_index_2x2.svg
+++ /dev/null
@@ -1,203 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<svg
-   xmlns:dc="http://purl.org/dc/elements/1.1/"
-   xmlns:cc="http://creativecommons.org/ns#"
-   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
-   xmlns:svg="http://www.w3.org/2000/svg"
-   xmlns="http://www.w3.org/2000/svg"
-   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
-   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
-   width="175.39619"
-   height="172.07588"
-   viewBox="0 0 46.406913 45.528409"
-   version="1.1"
-   id="svg8"
-   inkscape:version="1.0 (4035a4fb49, 2020-05-01)"
-   sodipodi:docname="pixel_index_2x2.svg">
-  <defs
-     id="defs2">
-    <marker
-       inkscape:isstock="true"
-       style="overflow:visible"
-       id="marker1483"
-       refX="0"
-       refY="0"
-       orient="auto"
-       inkscape:stockid="Arrow1Lend">
-      <path
-         transform="matrix(-0.8,0,0,-0.8,-10,0)"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         id="path1481"
-         inkscape:connector-curvature="0" />
-    </marker>
-    <marker
-       inkscape:stockid="Arrow1Lend"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="Arrow1Lend"
-       style="overflow:visible"
-       inkscape:isstock="true"
-       inkscape:collect="always">
-      <path
-         id="path977"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
-         transform="matrix(-0.8,0,0,-0.8,-10,0)"
-         inkscape:connector-curvature="0" />
-    </marker>
-  </defs>
-  <sodipodi:namedview
-     id="base"
-     pagecolor="#ffffff"
-     bordercolor="#666666"
-     borderopacity="1.0"
-     inkscape:pageopacity="0.0"
-     inkscape:pageshadow="2"
-     inkscape:zoom="1.48"
-     inkscape:cx="169.6136"
-     inkscape:cy="69.828393"
-     inkscape:document-units="px"
-     inkscape:current-layer="layer1"
-     showgrid="true"
-     inkscape:snap-object-midpoints="true"
-     inkscape:snap-text-baseline="true"
-     inkscape:window-width="1920"
-     inkscape:window-height="1018"
-     inkscape:window-x="-1926"
-     inkscape:window-y="-6"
-     inkscape:window-maximized="1"
-     fit-margin-top="1"
-     fit-margin-right="1"
-     fit-margin-bottom="1"
-     fit-margin-left="1"
-     units="px"
-     inkscape:snap-center="true"
-     inkscape:document-rotation="0">
-    <inkscape:grid
-       type="xygrid"
-       id="grid12"
-       originx="-20.366717"
-       originy="-70.809709"
-       dotted="false" />
-  </sodipodi:namedview>
-  <metadata
-     id="metadata5">
-    <rdf:RDF>
-      <cc:Work
-         rdf:about="">
-        <dc:format>image/svg+xml</dc:format>
-        <dc:type
-           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
-        <dc:title />
-      </cc:Work>
-    </rdf:RDF>
-  </metadata>
-  <g
-     inkscape:label="Layer 1"
-     inkscape:groupmode="layer"
-     id="layer1"
-     transform="translate(-28.116567,6.8975975)">
-    <path
-       style="fill:none;stroke:#808080;stroke-width:0.264583;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       d="m 36.854018,-6.2698085 h 37.041668 l 10e-7,37.0416345 -37.041658,-0.001 -1.1e-5,-37.0406345 m 18.520834,0 1.1e-5,37.0406345 m 18.520824,-18.519802 -37.041658,-10e-4"
-       id="path1171"
-       inkscape:connector-curvature="0"
-       sodipodi:nodetypes="ccccccccc" />
-    <g
-       transform="translate(-13.490826,-5.5676219)"
-       id="g271">
-      <text
-         xml:space="preserve"
-         style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.82223px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
-         x="69.692329"
-         y="43.525604"
-         id="text121-3-7-8-0"><tspan
-           y="43.525604"
-           x="69.692329"
-           sodipodi:role="line"
-           id="tspan265">x</tspan></text>
-      <text
-         id="text121-3-7-8-9-1"
-         y="42.973698"
-         x="67.711052"
-         style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
-         xml:space="preserve"><tspan
-           y="42.973698"
-           x="67.711052"
-           id="tspan239-0"
-           sodipodi:role="line"
-           style="stroke-width:0.264583">f</tspan></text>
-    </g>
-    <path
-       style="fill:none;stroke:#000000;stroke-width:0.187088px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow1Lend)"
-       d="m 36.854018,36.062494 15.875002,10e-4 m 5.291666,0 15.875001,-3.1e-5"
-       id="path972"
-       inkscape:connector-curvature="0"
-       sodipodi:nodetypes="cccc" />
-    <path
-       sodipodi:nodetypes="cccc"
-       inkscape:connector-curvature="0"
-       id="path1473"
-       d="m 31.562353,30.77186 -1e-6,-15.875001 m 0,-5.2916671 2e-6,-15.8750004"
-       style="fill:none;stroke:#000000;stroke-width:0.187088px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker1483)" />
-    <g
-       transform="translate(-2.8950893,17.961004)"
-       id="g277">
-      <text
-         id="text121-3-7-8"
-         y="-4.0993972"
-         x="35.296494"
-         style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.82222px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
-         xml:space="preserve"><tspan
-           style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.82222px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.264583"
-           y="-4.0993972"
-           x="35.296494"
-           id="tspan119-1-8-3"
-           sodipodi:role="line">y</tspan></text>
-      <text
-         xml:space="preserve"
-         style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
-         x="33.31522"
-         y="-4.6513033"
-         id="text121-3-7-8-9"><tspan
-           sodipodi:role="line"
-           id="tspan239"
-           x="33.31522"
-           y="-4.6513033">f</tspan></text>
-    </g>
-    <text
-       transform="scale(0.98828058,1.0118584)"
-       style="stroke-width:0.00380336"
-       id="text23"
-       font-size="4.18372px"
-       fill="#ff0000"
-       y="22.674099"
-       x="45.329342">0</text>
-    <text
-       transform="scale(0.98828058,1.0118584)"
-       style="stroke-width:0.00380336"
-       id="text23-7"
-       font-size="4.18372px"
-       fill="#ff0000"
-       y="22.779211"
-       x="64.069809">1</text>
-    <text
-       transform="scale(0.98828058,1.0118584)"
-       style="stroke-width:0.00380336"
-       id="text23-2"
-       font-size="4.18372px"
-       fill="#ff0000"
-       y="4.4754314"
-       x="45.32935">2</text>
-    <text
-       transform="scale(0.98828058,1.0118584)"
-       style="stroke-width:0.00380336"
-       id="text23-8"
-       font-size="4.18372px"
-       fill="#ff0000"
-       y="4.3703194"
-       x="64.069809">3</text>
-  </g>
-</svg>
diff --git a/registry/vulkan/images/pixel_index_2x4.svg b/registry/vulkan/images/pixel_index_2x4.svg
deleted file mode 100644
index 2fb6e49..0000000
--- a/registry/vulkan/images/pixel_index_2x4.svg
+++ /dev/null
@@ -1,234 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<svg
-   xmlns:dc="http://purl.org/dc/elements/1.1/"
-   xmlns:cc="http://creativecommons.org/ns#"
-   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
-   xmlns:svg="http://www.w3.org/2000/svg"
-   xmlns="http://www.w3.org/2000/svg"
-   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
-   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
-   sodipodi:docname="pixel_index_2x4.svg"
-   inkscape:version="1.0 (4035a4fb49, 2020-05-01)"
-   id="svg8"
-   version="1.1"
-   viewBox="0 0 46.406913 82.720522"
-   height="312.6445"
-   width="175.39619">
-  <defs
-     id="defs2">
-    <marker
-       inkscape:stockid="Arrow1Lend"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="marker1483"
-       style="overflow:visible"
-       inkscape:isstock="true">
-      <path
-         inkscape:connector-curvature="0"
-         id="path1481"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
-         transform="matrix(-0.8,0,0,-0.8,-10,0)" />
-    </marker>
-    <marker
-       inkscape:collect="always"
-       inkscape:isstock="true"
-       style="overflow:visible"
-       id="Arrow1Lend"
-       refX="0"
-       refY="0"
-       orient="auto"
-       inkscape:stockid="Arrow1Lend">
-      <path
-         inkscape:connector-curvature="0"
-         transform="matrix(-0.8,0,0,-0.8,-10,0)"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         id="path977" />
-    </marker>
-  </defs>
-  <sodipodi:namedview
-     inkscape:document-rotation="0"
-     inkscape:snap-center="true"
-     units="px"
-     fit-margin-left="1"
-     fit-margin-bottom="1"
-     fit-margin-right="1"
-     fit-margin-top="1"
-     inkscape:window-maximized="1"
-     inkscape:window-y="-6"
-     inkscape:window-x="-1926"
-     inkscape:window-height="1018"
-     inkscape:window-width="1920"
-     inkscape:snap-text-baseline="true"
-     inkscape:snap-object-midpoints="true"
-     showgrid="true"
-     inkscape:current-layer="layer1"
-     inkscape:document-units="px"
-     inkscape:cy="208.74124"
-     inkscape:cx="196.91567"
-     inkscape:zoom="1.48"
-     inkscape:pageshadow="2"
-     inkscape:pageopacity="0.0"
-     borderopacity="1.0"
-     bordercolor="#666666"
-     pagecolor="#ffffff"
-     id="base">
-    <inkscape:grid
-       dotted="false"
-       originy="-33.617599"
-       originx="-20.366716"
-       id="grid12"
-       type="xygrid" />
-  </sodipodi:namedview>
-  <metadata
-     id="metadata5">
-    <rdf:RDF>
-      <cc:Work
-         rdf:about="">
-        <dc:format>image/svg+xml</dc:format>
-        <dc:type
-           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
-        <dc:title />
-      </cc:Work>
-    </rdf:RDF>
-  </metadata>
-  <g
-     transform="translate(-28.116567,44.089711)"
-     id="layer1"
-     inkscape:groupmode="layer"
-     inkscape:label="Layer 1">
-    <path
-       sodipodi:nodetypes="ccccccccccccc"
-       inkscape:connector-curvature="0"
-       id="path1171"
-       d="m 36.85402,-43.312509 37.041667,10e-4 v 74.083335 l -37.041658,-0.001 -9e-6,-74.083337 m 18.520836,0 7e-6,74.083337 m 18.520824,-18.519802 -37.041658,-10e-4 m -7e-6,-18.5208395 37.041665,0.00101 m 0,-18.5208335 -37.041665,-9.76e-4"
-       style="fill:none;stroke:#808080;stroke-width:0.264583;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
-    <g
-       id="g271"
-       transform="translate(-13.490826,-5.5676219)">
-      <text
-         id="text121-3-7-8-0"
-         y="43.525604"
-         x="69.692329"
-         style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.82223px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
-         xml:space="preserve"><tspan
-           id="tspan265"
-           sodipodi:role="line"
-           x="69.692329"
-           y="43.525604">x</tspan></text>
-      <text
-         xml:space="preserve"
-         style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
-         x="67.711052"
-         y="42.973698"
-         id="text121-3-7-8-9-1"><tspan
-           style="stroke-width:0.264583"
-           sodipodi:role="line"
-           id="tspan239-0"
-           x="67.711052"
-           y="42.973698">f</tspan></text>
-    </g>
-    <path
-       sodipodi:nodetypes="cccc"
-       inkscape:connector-curvature="0"
-       id="path972"
-       d="m 36.854018,36.062494 15.875002,10e-4 m 5.291666,0 15.875001,-3.1e-5"
-       style="fill:none;stroke:#000000;stroke-width:0.187088px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow1Lend)" />
-    <path
-       style="fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker1483)"
-       d="M 31.562353,30.77186 V -3.6239751 m 10e-7,-5.2916661 V -43.311476"
-       id="path1473"
-       inkscape:connector-curvature="0" />
-    <g
-       id="g277"
-       transform="translate(-2.9074896,-0.27595285)">
-      <text
-         xml:space="preserve"
-         style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.82222px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
-         x="35.296494"
-         y="-4.0993972"
-         id="text121-3-7-8"><tspan
-           sodipodi:role="line"
-           id="tspan119-1-8-3"
-           x="35.296494"
-           y="-4.0993972"
-           style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.82222px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.264583">y</tspan></text>
-      <text
-         id="text121-3-7-8-9"
-         y="-4.6513033"
-         x="33.31522"
-         style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
-         xml:space="preserve"><tspan
-           y="-4.6513033"
-           x="33.31522"
-           id="tspan239"
-           sodipodi:role="line">f</tspan></text>
-    </g>
-    <text
-       transform="scale(0.98828058,1.0118584)"
-       style="stroke-width:0.00380336"
-       id="text23"
-       font-size="4.18372px"
-       fill="#ff0000"
-       y="22.525415"
-       x="45.329342">0</text>
-    <text
-       transform="scale(0.98828058,1.0118584)"
-       style="stroke-width:0.00380336"
-       id="text23-7"
-       font-size="4.18372px"
-       fill="#ff0000"
-       y="22.630529"
-       x="64.069809">1</text>
-    <text
-       transform="scale(0.98828058,1.0118584)"
-       style="stroke-width:0.00380336"
-       id="text23-2"
-       font-size="4.18372px"
-       fill="#ff0000"
-       y="4.3267484"
-       x="45.32935">2</text>
-    <text
-       transform="scale(0.98828058,1.0118584)"
-       style="stroke-width:0.00380336"
-       id="text23-8"
-       font-size="4.18372px"
-       fill="#ff0000"
-       y="4.2216382"
-       x="64.069809">3</text>
-    <text
-       transform="scale(0.98828058,1.0118584)"
-       style="stroke-width:0.00380336"
-       id="text23-1"
-       font-size="4.18372px"
-       fill="#ff0000"
-       y="-14.082145"
-       x="64.069801">5</text>
-    <text
-       transform="scale(0.98828058,1.0118584)"
-       style="letter-spacing:0px;stroke-width:0.00380336"
-       id="text23-11"
-       font-size="4.18372px"
-       fill="#ff0000"
-       y="-14.082145"
-       x="45.329342">4</text>
-    <text
-       transform="scale(0.98828058,1.0118584)"
-       style="stroke-width:0.00380336"
-       id="text23-27"
-       font-size="4.18372px"
-       fill="#ff0000"
-       y="-32.385925"
-       x="64.069809">7</text>
-    <text
-       transform="scale(0.98828058,1.0118584)"
-       style="stroke-width:0.00380336"
-       id="text23-77"
-       font-size="4.18372px"
-       fill="#ff0000"
-       y="-32.385925"
-       x="45.329342">6</text>
-  </g>
-</svg>
diff --git a/registry/vulkan/images/pixel_index_4x1.svg b/registry/vulkan/images/pixel_index_4x1.svg
deleted file mode 100644
index cd94695..0000000
--- a/registry/vulkan/images/pixel_index_4x1.svg
+++ /dev/null
@@ -1,207 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<svg
-   xmlns:dc="http://purl.org/dc/elements/1.1/"
-   xmlns:cc="http://creativecommons.org/ns#"
-   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
-   xmlns:svg="http://www.w3.org/2000/svg"
-   xmlns="http://www.w3.org/2000/svg"
-   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
-   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
-   sodipodi:docname="pixel_index_4x1.svg"
-   inkscape:version="1.0 (4035a4fb49, 2020-05-01)"
-   id="svg8"
-   version="1.1"
-   viewBox="0 0 83.599029 26.901193"
-   height="101.67381"
-   width="315.96481">
-  <defs
-     id="defs2">
-    <marker
-       inkscape:stockid="Arrow1Lend"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="marker1483"
-       style="overflow:visible"
-       inkscape:isstock="true">
-      <path
-         inkscape:connector-curvature="0"
-         id="path1481"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
-         transform="matrix(-0.8,0,0,-0.8,-10,0)" />
-    </marker>
-    <marker
-       inkscape:collect="always"
-       inkscape:isstock="true"
-       style="overflow:visible"
-       id="Arrow1Lend"
-       refX="0"
-       refY="0"
-       orient="auto"
-       inkscape:stockid="Arrow1Lend">
-      <path
-         inkscape:connector-curvature="0"
-         transform="matrix(-0.8,0,0,-0.8,-10,0)"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         id="path977" />
-    </marker>
-  </defs>
-  <sodipodi:namedview
-     inkscape:document-rotation="0"
-     inkscape:snap-center="true"
-     units="px"
-     fit-margin-left="1"
-     fit-margin-bottom="1"
-     fit-margin-right="1"
-     fit-margin-top="1"
-     inkscape:window-maximized="0"
-     inkscape:window-y="0"
-     inkscape:window-x="0"
-     inkscape:window-height="1018"
-     inkscape:window-width="960"
-     inkscape:snap-text-baseline="true"
-     inkscape:snap-object-midpoints="true"
-     showgrid="true"
-     inkscape:current-layer="layer1"
-     inkscape:document-units="px"
-     inkscape:cy="-24.670431"
-     inkscape:cx="169.31763"
-     inkscape:zoom="2.0930361"
-     inkscape:pageshadow="2"
-     inkscape:pageopacity="0.0"
-     borderopacity="1.0"
-     bordercolor="#666666"
-     pagecolor="#ffffff"
-     id="base">
-    <inkscape:grid
-       dotted="false"
-       originy="-89.436916"
-       originx="-20.366717"
-       id="grid12"
-       type="xygrid" />
-  </sodipodi:namedview>
-  <metadata
-     id="metadata5">
-    <rdf:RDF>
-      <cc:Work
-         rdf:about="">
-        <dc:format>image/svg+xml</dc:format>
-        <dc:type
-           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
-        <dc:title />
-      </cc:Work>
-    </rdf:RDF>
-  </metadata>
-  <g
-     transform="translate(-28.116567,-11.729621)"
-     id="layer1"
-     inkscape:groupmode="layer"
-     inkscape:label="Layer 1">
-    <path
-       sodipodi:nodetypes="ccccccccccc"
-       inkscape:connector-curvature="0"
-       id="path1171"
-       d="m 36.854018,12.251027 h 74.083332 l 1e-5,18.520799 -74.083331,-0.001 -1.1e-5,-18.519799 m 18.520834,0 1.1e-5,18.519799 m 18.520832,0 -1e-5,-18.519799 m 18.520834,0 1.5e-5,18.519799"
-       style="fill:none;stroke:#808080;stroke-width:0.264583;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
-    <g
-       id="g271"
-       transform="translate(5.0424113,-5.8514966)">
-      <text
-         id="text121-3-7-8-0"
-         y="43.525604"
-         x="69.692329"
-         style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.82223px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
-         xml:space="preserve"><tspan
-           id="tspan265"
-           sodipodi:role="line"
-           x="69.692329"
-           y="43.525604">x</tspan></text>
-      <text
-         xml:space="preserve"
-         style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
-         x="67.711052"
-         y="42.973698"
-         id="text121-3-7-8-9-1"><tspan
-           style="stroke-width:0.264583"
-           sodipodi:role="line"
-           id="tspan239-0"
-           x="67.711052"
-           y="42.973698">f</tspan></text>
-    </g>
-    <path
-       sodipodi:nodetypes="cccc"
-       inkscape:connector-curvature="0"
-       id="path972"
-       d="m 36.854018,36.062494 34.395836,10e-4 m 5.291669,0 h 34.395837"
-       style="fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow1Lend)" />
-    <path
-       sodipodi:nodetypes="cccc"
-       style="fill:none;stroke:#000000;stroke-width:0.132291px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker1483)"
-       d="m 31.562353,30.77186 -2e-6,-6.614583 m 0,-5.291666 3e-6,-6.614582"
-       id="path1473"
-       inkscape:connector-curvature="0" />
-    <g
-       transform="translate(0.83905268,0.28766514)"
-       id="g545">
-      <g
-         transform="translate(-3.7341421,26.933758)"
-         id="g277">
-        <text
-           id="text121-3-7-8"
-           y="-4.0993972"
-           x="35.296494"
-           style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.82222px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
-           xml:space="preserve"><tspan
-             style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.82222px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.264583"
-             y="-4.0993972"
-             x="35.296494"
-             id="tspan119-1-8-3"
-             sodipodi:role="line">y</tspan></text>
-        <text
-           xml:space="preserve"
-           style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
-           x="33.31522"
-           y="-4.6513033"
-           id="text121-3-7-8-9"><tspan
-             sodipodi:role="line"
-             id="tspan239"
-             x="33.31522"
-             y="-4.6513033">f</tspan></text>
-      </g>
-    </g>
-    <text
-       transform="scale(0.98828058,1.0118584)"
-       style="stroke-width:0.00380336"
-       id="text23"
-       font-size="4.18372px"
-       fill="#ff0000"
-       y="22.779238"
-       x="45.329342">0</text>
-    <text
-       transform="scale(0.98828058,1.0118584)"
-       style="stroke-width:0.00380336"
-       id="text23-7"
-       font-size="4.18372px"
-       fill="#ff0000"
-       y="22.88435"
-       x="64.069809">1</text>
-    <text
-       transform="scale(0.98828058,1.0118584)"
-       style="stroke-width:0.00380336"
-       id="text23-2"
-       font-size="4.18372px"
-       fill="#ff0000"
-       y="22.88435"
-       x="82.810272">2</text>
-    <text
-       transform="scale(0.98828058,1.0118584)"
-       style="stroke-width:0.00380336"
-       id="text23-8"
-       font-size="4.18372px"
-       fill="#ff0000"
-       y="22.779238"
-       x="101.55073">3</text>
-  </g>
-</svg>
diff --git a/registry/vulkan/images/pixel_index_4x2.svg b/registry/vulkan/images/pixel_index_4x2.svg
deleted file mode 100644
index 9ae27fe..0000000
--- a/registry/vulkan/images/pixel_index_4x2.svg
+++ /dev/null
@@ -1,235 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<svg
-   xmlns:dc="http://purl.org/dc/elements/1.1/"
-   xmlns:cc="http://creativecommons.org/ns#"
-   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
-   xmlns:svg="http://www.w3.org/2000/svg"
-   xmlns="http://www.w3.org/2000/svg"
-   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
-   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
-   sodipodi:docname="pixel_index_4x2.svg"
-   inkscape:version="1.0 (4035a4fb49, 2020-05-01)"
-   id="svg8"
-   version="1.1"
-   viewBox="0 0 83.599029 45.528413"
-   height="172.0759"
-   width="315.96481">
-  <defs
-     id="defs2">
-    <marker
-       inkscape:stockid="Arrow1Lend"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="marker1483"
-       style="overflow:visible"
-       inkscape:isstock="true">
-      <path
-         inkscape:connector-curvature="0"
-         id="path1481"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
-         transform="matrix(-0.8,0,0,-0.8,-10,0)" />
-    </marker>
-    <marker
-       inkscape:collect="always"
-       inkscape:isstock="true"
-       style="overflow:visible"
-       id="Arrow1Lend"
-       refX="0"
-       refY="0"
-       orient="auto"
-       inkscape:stockid="Arrow1Lend">
-      <path
-         inkscape:connector-curvature="0"
-         transform="matrix(-0.8,0,0,-0.8,-10,0)"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         id="path977" />
-    </marker>
-  </defs>
-  <sodipodi:namedview
-     inkscape:document-rotation="0"
-     inkscape:snap-center="true"
-     units="px"
-     fit-margin-left="1"
-     fit-margin-bottom="1"
-     fit-margin-right="1"
-     fit-margin-top="1"
-     inkscape:window-maximized="0"
-     inkscape:window-y="0"
-     inkscape:window-x="0"
-     inkscape:window-height="1018"
-     inkscape:window-width="960"
-     inkscape:snap-text-baseline="true"
-     inkscape:snap-object-midpoints="true"
-     showgrid="true"
-     inkscape:current-layer="layer1"
-     inkscape:document-units="px"
-     inkscape:cy="106.05324"
-     inkscape:cx="172.63552"
-     inkscape:zoom="1.7437838"
-     inkscape:pageshadow="2"
-     inkscape:pageopacity="0.0"
-     borderopacity="1.0"
-     bordercolor="#666666"
-     pagecolor="#ffffff"
-     id="base">
-    <inkscape:grid
-       dotted="false"
-       originy="-70.809709"
-       originx="-20.366716"
-       id="grid12"
-       type="xygrid" />
-  </sodipodi:namedview>
-  <metadata
-     id="metadata5">
-    <rdf:RDF>
-      <cc:Work
-         rdf:about="">
-        <dc:format>image/svg+xml</dc:format>
-        <dc:type
-           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
-        <dc:title></dc:title>
-      </cc:Work>
-    </rdf:RDF>
-  </metadata>
-  <g
-     transform="translate(-28.116567,6.8975986)"
-     id="layer1"
-     inkscape:groupmode="layer"
-     inkscape:label="Layer 1">
-    <path
-       sodipodi:nodetypes="ccccccccccccc"
-       inkscape:connector-curvature="0"
-       id="path1171"
-       d="m 36.854019,-6.2698096 h 74.083331 l 1e-5,37.0416356 -74.083331,-0.001 -10e-6,-37.0406356 m 18.520834,0 10e-6,37.0406356 m 18.520832,0 -8e-6,-37.0406356 m 18.520833,0 1.4e-5,37.0406356 m 18.520826,-18.519802 -74.083331,-10e-4"
-       style="fill:none;stroke:#808080;stroke-width:0.264583;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
-    <g
-       id="g271"
-       transform="translate(5.0424113,-5.8514966)">
-      <text
-         id="text121-3-7-8-0"
-         y="43.525604"
-         x="69.692329"
-         style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.82223px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
-         xml:space="preserve"><tspan
-           id="tspan265"
-           sodipodi:role="line"
-           x="69.692329"
-           y="43.525604">x</tspan></text>
-      <text
-         xml:space="preserve"
-         style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
-         x="67.711052"
-         y="42.973698"
-         id="text121-3-7-8-9-1"><tspan
-           style="stroke-width:0.264583"
-           sodipodi:role="line"
-           id="tspan239-0"
-           x="67.711052"
-           y="42.973698">f</tspan></text>
-    </g>
-    <path
-       sodipodi:nodetypes="cccc"
-       inkscape:connector-curvature="0"
-       id="path972"
-       d="m 36.854018,36.062494 34.395836,10e-4 m 5.291669,0 h 34.395837"
-       style="fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow1Lend)" />
-    <path
-       sodipodi:nodetypes="cccc"
-       style="fill:none;stroke:#000000;stroke-width:0.187088px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker1483)"
-       d="m 31.562353,30.77186 -1e-6,-15.875002 m 0,-5.2916673 2e-6,-15.8750003"
-       id="path1473"
-       inkscape:connector-curvature="0" />
-    <g
-       id="g277"
-       transform="translate(-2.9074907,18.244879)">
-      <text
-         xml:space="preserve"
-         style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.82222px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
-         x="35.296494"
-         y="-4.0993972"
-         id="text121-3-7-8"><tspan
-           sodipodi:role="line"
-           id="tspan119-1-8-3"
-           x="35.296494"
-           y="-4.0993972"
-           style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.82222px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.264583">y</tspan></text>
-      <text
-         id="text121-3-7-8-9"
-         y="-4.6513033"
-         x="33.31522"
-         style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
-         xml:space="preserve"><tspan
-           y="-4.6513033"
-           x="33.31522"
-           id="tspan239"
-           sodipodi:role="line">f</tspan></text>
-    </g>
-    <text
-       x="45.329342"
-       y="22.674097"
-       fill="#ff0000"
-       font-size="4.18372px"
-       id="text23"
-       style="stroke-width:0.00380336"
-       transform="scale(0.98828058,1.0118584)">0</text>
-    <text
-       x="64.069809"
-       y="22.779209"
-       fill="#ff0000"
-       font-size="4.18372px"
-       id="text23-7"
-       style="stroke-width:0.00380336"
-       transform="scale(0.98828058,1.0118584)">1</text>
-    <text
-       x="82.810272"
-       y="22.779209"
-       fill="#ff0000"
-       font-size="4.18372px"
-       id="text23-2"
-       style="stroke-width:0.00380336"
-       transform="scale(0.98828058,1.0118584)">2</text>
-    <text
-       x="101.55073"
-       y="22.674097"
-       fill="#ff0000"
-       font-size="4.18372px"
-       id="text23-8"
-       style="stroke-width:0.00380336"
-       transform="scale(0.98828058,1.0118584)">3</text>
-    <text
-       x="101.55073"
-       y="4.370317"
-       fill="#ff0000"
-       font-size="4.18372px"
-       id="text23-27"
-       style="stroke-width:0.00380336"
-       transform="scale(0.98828058,1.0118584)">7</text>
-    <text
-       x="82.810265"
-       y="4.370317"
-       fill="#ff0000"
-       font-size="4.18372px"
-       id="text23-77"
-       style="stroke-width:0.00380336"
-       transform="scale(0.98828058,1.0118584)">6</text>
-    <text
-       x="64.069801"
-       y="4.370317"
-       fill="#ff0000"
-       font-size="4.18372px"
-       id="text23-1"
-       style="stroke-width:0.00380336"
-       transform="scale(0.98828058,1.0118584)">5</text>
-    <text
-       x="45.329342"
-       y="4.370317"
-       fill="#ff0000"
-       font-size="4.18372px"
-       id="text23-11"
-       style="letter-spacing:0px;stroke-width:0.00380336"
-       transform="scale(0.98828058,1.0118584)">4</text>
-  </g>
-</svg>
diff --git a/registry/vulkan/images/pixel_index_4x4.svg b/registry/vulkan/images/pixel_index_4x4.svg
deleted file mode 100644
index 73c0738..0000000
--- a/registry/vulkan/images/pixel_index_4x4.svg
+++ /dev/null
@@ -1,298 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<svg
-   xmlns:dc="http://purl.org/dc/elements/1.1/"
-   xmlns:cc="http://creativecommons.org/ns#"
-   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
-   xmlns:svg="http://www.w3.org/2000/svg"
-   xmlns="http://www.w3.org/2000/svg"
-   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
-   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
-   width="315.96481"
-   height="312.6445"
-   viewBox="0 0 83.599029 82.720522"
-   version="1.1"
-   id="svg8"
-   inkscape:version="1.0 (4035a4fb49, 2020-05-01)"
-   sodipodi:docname="pixel_index_4x4.svg">
-  <defs
-     id="defs2">
-    <marker
-       inkscape:isstock="true"
-       style="overflow:visible"
-       id="marker1483"
-       refX="0"
-       refY="0"
-       orient="auto"
-       inkscape:stockid="Arrow1Lend">
-      <path
-         transform="matrix(-0.8,0,0,-0.8,-10,0)"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         id="path1481"
-         inkscape:connector-curvature="0" />
-    </marker>
-    <marker
-       inkscape:stockid="Arrow1Lend"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="Arrow1Lend"
-       style="overflow:visible"
-       inkscape:isstock="true"
-       inkscape:collect="always">
-      <path
-         id="path977"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
-         transform="matrix(-0.8,0,0,-0.8,-10,0)"
-         inkscape:connector-curvature="0" />
-    </marker>
-  </defs>
-  <sodipodi:namedview
-     id="base"
-     pagecolor="#ffffff"
-     bordercolor="#666666"
-     borderopacity="1.0"
-     inkscape:pageopacity="0.0"
-     inkscape:pageshadow="2"
-     inkscape:zoom="2.0930361"
-     inkscape:cx="170.48768"
-     inkscape:cy="152.56606"
-     inkscape:document-units="px"
-     inkscape:current-layer="layer1"
-     showgrid="true"
-     inkscape:snap-object-midpoints="true"
-     inkscape:snap-text-baseline="true"
-     inkscape:window-width="960"
-     inkscape:window-height="1018"
-     inkscape:window-x="0"
-     inkscape:window-y="0"
-     inkscape:window-maximized="0"
-     fit-margin-top="1"
-     fit-margin-right="1"
-     fit-margin-bottom="1"
-     fit-margin-left="1"
-     units="px"
-     inkscape:snap-center="true"
-     inkscape:document-rotation="0">
-    <inkscape:grid
-       type="xygrid"
-       id="grid12"
-       originx="-20.366714"
-       originy="-33.617597"
-       dotted="false" />
-  </sodipodi:namedview>
-  <metadata
-     id="metadata5">
-    <rdf:RDF>
-      <cc:Work
-         rdf:about="">
-        <dc:format>image/svg+xml</dc:format>
-        <dc:type
-           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
-        <dc:title />
-      </cc:Work>
-    </rdf:RDF>
-  </metadata>
-  <g
-     inkscape:label="Layer 1"
-     inkscape:groupmode="layer"
-     id="layer1"
-     transform="translate(-28.116566,44.089714)">
-    <path
-       style="fill:none;stroke:#808080;stroke-width:0.264583;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       d="m 36.85402,-43.312509 74.08334,10e-4 v 74.083335 l -74.083331,-0.001 -9e-6,-74.083337 m 18.520836,0 7e-6,74.083337 m 18.520832,0 -7e-6,-74.083337 m 18.520832,0 1.4e-5,74.083337 m 18.520826,-18.519802 -74.083331,-10e-4 m -7e-6,-18.5208395 74.083338,0.00103 m 0,-18.5208335 -74.083338,-0.001"
-       id="path1171"
-       inkscape:connector-curvature="0"
-       sodipodi:nodetypes="ccccccccccccccccc" />
-    <g
-       transform="translate(5.0424113,-5.8514966)"
-       id="g271">
-      <text
-         xml:space="preserve"
-         style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.82223px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
-         x="69.692329"
-         y="43.525604"
-         id="text121-3-7-8-0"><tspan
-           y="43.525604"
-           x="69.692329"
-           sodipodi:role="line"
-           id="tspan265">x</tspan></text>
-      <text
-         id="text121-3-7-8-9-1"
-         y="42.973698"
-         x="67.711052"
-         style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
-         xml:space="preserve"><tspan
-           y="42.973698"
-           x="67.711052"
-           id="tspan239-0"
-           sodipodi:role="line"
-           style="stroke-width:0.264583">f</tspan></text>
-    </g>
-    <path
-       style="fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow1Lend)"
-       d="m 36.854018,36.062494 34.395836,10e-4 m 5.291669,0 h 34.395837"
-       id="path972"
-       inkscape:connector-curvature="0"
-       sodipodi:nodetypes="cccc" />
-    <path
-       inkscape:connector-curvature="0"
-       id="path1473"
-       d="M 31.562353,30.77186 V -3.6239751 m 10e-7,-5.2916661 V -43.311476"
-       style="fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker1483)" />
-    <g
-       transform="translate(-2.9074896,-0.27595285)"
-       id="g277">
-      <text
-         id="text121-3-7-8"
-         y="-4.0993972"
-         x="35.296494"
-         style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.82222px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
-         xml:space="preserve"><tspan
-           style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.82222px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.264583"
-           y="-4.0993972"
-           x="35.296494"
-           id="tspan119-1-8-3"
-           sodipodi:role="line">y</tspan></text>
-      <text
-         xml:space="preserve"
-         style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
-         x="33.31522"
-         y="-4.6513033"
-         id="text121-3-7-8-9"><tspan
-           sodipodi:role="line"
-           id="tspan239"
-           x="33.31522"
-           y="-4.6513033">f</tspan></text>
-    </g>
-    <text
-       transform="scale(0.98828058,1.0118584)"
-       style="stroke-width:0.00380336"
-       id="text23"
-       font-size="4.18372px"
-       fill="#ff0000"
-       y="22.777164"
-       x="45.30484">0</text>
-    <text
-       transform="scale(0.98828058,1.0118584)"
-       style="stroke-width:0.00380336"
-       id="text23-7"
-       font-size="4.18372px"
-       fill="#ff0000"
-       y="22.882277"
-       x="64.045311">1</text>
-    <text
-       transform="scale(0.98828058,1.0118584)"
-       style="stroke-width:0.00380336"
-       id="text23-2"
-       font-size="4.18372px"
-       fill="#ff0000"
-       y="22.882277"
-       x="82.785767">2</text>
-    <text
-       transform="scale(0.98828058,1.0118584)"
-       style="stroke-width:0.00380336"
-       id="text23-8"
-       font-size="4.18372px"
-       fill="#ff0000"
-       y="22.777164"
-       x="101.52623">3</text>
-    <text
-       transform="scale(0.98828058,1.0118584)"
-       style="stroke-width:0.00380336"
-       id="text23-27"
-       font-size="4.18372px"
-       fill="#ff0000"
-       y="4.4733834"
-       x="101.52623">7</text>
-    <text
-       transform="scale(0.98828058,1.0118584)"
-       style="stroke-width:0.00380336"
-       id="text23-77"
-       font-size="4.18372px"
-       fill="#ff0000"
-       y="4.4733834"
-       x="82.785759">6</text>
-    <text
-       transform="scale(0.98828058,1.0118584)"
-       style="stroke-width:0.00380336"
-       id="text23-1"
-       font-size="4.18372px"
-       fill="#ff0000"
-       y="4.4733834"
-       x="64.045296">5</text>
-    <text
-       transform="scale(0.98828058,1.0118584)"
-       style="letter-spacing:0px;stroke-width:0.00380336"
-       id="text23-11"
-       font-size="4.18372px"
-       fill="#ff0000"
-       y="4.4733834"
-       x="45.30484">4</text>
-    <text
-       transform="scale(0.98828058,1.0118584)"
-       style="letter-spacing:0px;stroke-width:0.00380336"
-       id="text23-86"
-       font-size="4.18372px"
-       fill="#ff0000"
-       y="-13.858997"
-       x="45.288502">8</text>
-    <text
-       transform="scale(0.98828058,1.0118584)"
-       style="letter-spacing:0px;stroke-width:0.00380336"
-       id="text23-7-0"
-       font-size="4.18372px"
-       fill="#ff0000"
-       y="-13.753885"
-       x="64.028969">9</text>
-    <text
-       transform="scale(0.98828058,1.0118584)"
-       style="letter-spacing:0px;stroke-width:0.00380336"
-       id="text23-2-7"
-       font-size="4.18372px"
-       fill="#ff0000"
-       y="-13.828354"
-       x="81.334328">10</text>
-    <text
-       transform="scale(0.98828058,1.0118584)"
-       style="letter-spacing:0px;stroke-width:0.00380336"
-       id="text23-8-8"
-       font-size="4.18372px"
-       fill="#ff0000"
-       y="-13.822226"
-       x="100.15957">11</text>
-    <text
-       transform="scale(0.98828058,1.0118584)"
-       style="letter-spacing:0px;stroke-width:0.00380336"
-       id="text23-27-2"
-       font-size="4.18372px"
-       fill="#ff0000"
-       y="-32.157669"
-       x="100.08501">15</text>
-    <text
-       transform="scale(0.98828058,1.0118584)"
-       style="letter-spacing:0px;stroke-width:0.00380336"
-       id="text23-77-7"
-       font-size="4.18372px"
-       fill="#ff0000"
-       y="-32.126007"
-       x="81.297562">14</text>
-    <text
-       transform="scale(0.98828058,1.0118584)"
-       style="letter-spacing:0px;stroke-width:0.00380336"
-       id="text23-1-9"
-       font-size="4.18372px"
-       fill="#ff0000"
-       y="-32.131111"
-       x="62.613274">13</text>
-    <text
-       transform="scale(0.98828058,1.0118584)"
-       style="letter-spacing:0px;stroke-width:0.00380336"
-       id="text23-11-4"
-       font-size="4.18372px"
-       fill="#ff0000"
-       y="-32.099449"
-       x="43.851364">12</text>
-  </g>
-</svg>
diff --git a/registry/vulkan/images/primitive_topology_key_adjacency_edge.svg b/registry/vulkan/images/primitive_topology_key_adjacency_edge.svg
deleted file mode 100644
index 0ab1a88..0000000
--- a/registry/vulkan/images/primitive_topology_key_adjacency_edge.svg
+++ /dev/null
@@ -1,77 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Created with Inkscape (http://www.inkscape.org/) -->
-
-<svg
-   xmlns:dc="http://purl.org/dc/elements/1.1/"
-   xmlns:cc="http://creativecommons.org/ns#"
-   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
-   xmlns:svg="http://www.w3.org/2000/svg"
-   xmlns="http://www.w3.org/2000/svg"
-   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
-   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
-   width="82"
-   height="3"
-   viewBox="0 0 82.000001 3.0000001"
-   version="1.1"
-   id="svg8653"
-   inkscape:version="0.92.4 (5da689c313, 2019-01-14)"
-   sodipodi:docname="primitive_topology_key_adjacency_edge.svg">
-  <defs
-     id="defs8647" />
-  <sodipodi:namedview
-     id="base"
-     pagecolor="#ffffff"
-     bordercolor="#666666"
-     borderopacity="1.0"
-     inkscape:pageopacity="0.0"
-     inkscape:pageshadow="2"
-     inkscape:zoom="2.8284271"
-     inkscape:cx="-161.7899"
-     inkscape:cy="-70.775023"
-     inkscape:document-units="px"
-     inkscape:current-layer="layer1"
-     showgrid="true"
-     inkscape:window-width="2233"
-     inkscape:window-height="1343"
-     inkscape:window-x="392"
-     inkscape:window-y="296"
-     inkscape:window-maximized="0"
-     fit-margin-top="1"
-     fit-margin-left="1"
-     fit-margin-right="1"
-     fit-margin-bottom="1"
-     inkscape:snap-grids="true"
-     inkscape:snap-text-baseline="true"
-     inkscape:snap-object-midpoints="true"
-     units="px"
-     borderlayer="false">
-    <inkscape:grid
-       type="xygrid"
-       id="grid9626"
-       originx="-309"
-       originy="-623.50003" />
-  </sodipodi:namedview>
-  <metadata
-     id="metadata8650">
-    <rdf:RDF>
-      <cc:Work
-         rdf:about="">
-        <dc:format>image/svg+xml</dc:format>
-        <dc:type
-           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
-        <dc:title />
-      </cc:Work>
-    </rdf:RDF>
-  </metadata>
-  <g
-     inkscape:label="Layer 1"
-     inkscape:groupmode="layer"
-     id="layer1"
-     transform="translate(-321.53439,204.53503)">
-    <path
-       style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:4, 4;stroke-dashoffset:0;stroke-opacity:1"
-       d="m 322.53439,-203.03503 h 80"
-       id="path2033"
-       inkscape:connector-curvature="0" />
-  </g>
-</svg>
diff --git a/registry/vulkan/images/primitive_topology_key_edge.svg b/registry/vulkan/images/primitive_topology_key_edge.svg
deleted file mode 100644
index d954122..0000000
--- a/registry/vulkan/images/primitive_topology_key_edge.svg
+++ /dev/null
@@ -1,77 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Created with Inkscape (http://www.inkscape.org/) -->
-
-<svg
-   xmlns:dc="http://purl.org/dc/elements/1.1/"
-   xmlns:cc="http://creativecommons.org/ns#"
-   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
-   xmlns:svg="http://www.w3.org/2000/svg"
-   xmlns="http://www.w3.org/2000/svg"
-   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
-   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
-   width="82"
-   height="3"
-   viewBox="0 0 82.000001 3.0000001"
-   version="1.1"
-   id="svg8653"
-   inkscape:version="0.92.4 (5da689c313, 2019-01-14)"
-   sodipodi:docname="primitive_topology_key_edge.svg">
-  <defs
-     id="defs8647" />
-  <sodipodi:namedview
-     id="base"
-     pagecolor="#ffffff"
-     bordercolor="#666666"
-     borderopacity="1.0"
-     inkscape:pageopacity="0.0"
-     inkscape:pageshadow="2"
-     inkscape:zoom="2.8284271"
-     inkscape:cx="-155.7795"
-     inkscape:cy="-4.5582473"
-     inkscape:document-units="px"
-     inkscape:current-layer="layer1"
-     showgrid="true"
-     inkscape:window-width="2262"
-     inkscape:window-height="1507"
-     inkscape:window-x="482"
-     inkscape:window-y="385"
-     inkscape:window-maximized="0"
-     fit-margin-top="1"
-     fit-margin-left="1"
-     fit-margin-right="1"
-     fit-margin-bottom="1"
-     inkscape:snap-grids="true"
-     inkscape:snap-text-baseline="true"
-     inkscape:snap-object-midpoints="true"
-     units="px"
-     borderlayer="false">
-    <inkscape:grid
-       type="xygrid"
-       id="grid9626"
-       originx="-309"
-       originy="-648.50003" />
-  </sodipodi:namedview>
-  <metadata
-     id="metadata8650">
-    <rdf:RDF>
-      <cc:Work
-         rdf:about="">
-        <dc:format>image/svg+xml</dc:format>
-        <dc:type
-           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
-        <dc:title />
-      </cc:Work>
-    </rdf:RDF>
-  </metadata>
-  <g
-     inkscape:label="Layer 1"
-     inkscape:groupmode="layer"
-     id="layer1"
-     transform="translate(-321.53439,229.53503)">
-    <path
-       style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
-       d="m 322.53439,-228.03503 h 80"
-       id="path2033-1"
-       inkscape:connector-curvature="0" />
-  </g>
-</svg>
diff --git a/registry/vulkan/images/primitive_topology_key_provoking_vertex.svg b/registry/vulkan/images/primitive_topology_key_provoking_vertex.svg
deleted file mode 100644
index bfeca33..0000000
--- a/registry/vulkan/images/primitive_topology_key_provoking_vertex.svg
+++ /dev/null
@@ -1,83 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Created with Inkscape (http://www.inkscape.org/) -->
-
-<svg
-   xmlns:dc="http://purl.org/dc/elements/1.1/"
-   xmlns:cc="http://creativecommons.org/ns#"
-   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
-   xmlns:svg="http://www.w3.org/2000/svg"
-   xmlns="http://www.w3.org/2000/svg"
-   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
-   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
-   width="15.714849"
-   height="10.938762"
-   viewBox="0 0 15.714849 10.938762"
-   version="1.1"
-   id="svg8653"
-   inkscape:version="0.92.4 (5da689c313, 2019-01-14)"
-   sodipodi:docname="primitive_topology_key_provoking_vertex.svg">
-  <defs
-     id="defs8647" />
-  <sodipodi:namedview
-     id="base"
-     pagecolor="#ffffff"
-     bordercolor="#666666"
-     borderopacity="1.0"
-     inkscape:pageopacity="0.0"
-     inkscape:pageshadow="2"
-     inkscape:zoom="2.8284271"
-     inkscape:cx="-138.70844"
-     inkscape:cy="-55.865628"
-     inkscape:document-units="px"
-     inkscape:current-layer="layer1"
-     showgrid="true"
-     inkscape:window-width="2595"
-     inkscape:window-height="1495"
-     inkscape:window-x="481"
-     inkscape:window-y="191"
-     inkscape:window-maximized="0"
-     fit-margin-top="1"
-     fit-margin-left="1"
-     fit-margin-right="1"
-     fit-margin-bottom="1"
-     inkscape:snap-grids="true"
-     inkscape:snap-text-baseline="true"
-     inkscape:snap-object-midpoints="true"
-     units="px"
-     borderlayer="false">
-    <inkscape:grid
-       type="xygrid"
-       id="grid9626"
-       originx="-90.509107"
-       originy="-595.50917" />
-  </sodipodi:namedview>
-  <metadata
-     id="metadata8650">
-    <rdf:RDF>
-      <cc:Work
-         rdf:about="">
-        <dc:format>image/svg+xml</dc:format>
-        <dc:type
-           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
-        <dc:title />
-      </cc:Work>
-    </rdf:RDF>
-  </metadata>
-  <g
-     inkscape:label="Layer 1"
-     inkscape:groupmode="layer"
-     id="layer1"
-     transform="translate(-103.0435,184.48292)">
-    <circle
-       style="fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       id="path4517-0-8-5-91-0-3-8"
-       cx="107.53439"
-       cy="-178.03505"
-       r="3.4908931" />
-    <path
-       style="fill:none;stroke:#fa0000;stroke-width:1.00157475;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       d="m 107.53439,-178.035 10,-5"
-       id="path4672"
-       inkscape:connector-curvature="0" />
-  </g>
-</svg>
diff --git a/registry/vulkan/images/primitive_topology_key_vertex.svg b/registry/vulkan/images/primitive_topology_key_vertex.svg
deleted file mode 100644
index 9f71fcb..0000000
--- a/registry/vulkan/images/primitive_topology_key_vertex.svg
+++ /dev/null
@@ -1,78 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Created with Inkscape (http://www.inkscape.org/) -->
-
-<svg
-   xmlns:dc="http://purl.org/dc/elements/1.1/"
-   xmlns:cc="http://creativecommons.org/ns#"
-   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
-   xmlns:svg="http://www.w3.org/2000/svg"
-   xmlns="http://www.w3.org/2000/svg"
-   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
-   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
-   width="8.9817867"
-   height="8.9817867"
-   viewBox="0 0 8.9817868 8.981787"
-   version="1.1"
-   id="svg8653"
-   inkscape:version="0.92.4 (5da689c313, 2019-01-14)"
-   sodipodi:docname="primitive_topology_key_vertex.svg">
-  <defs
-     id="defs8647" />
-  <sodipodi:namedview
-     id="base"
-     pagecolor="#ffffff"
-     bordercolor="#666666"
-     borderopacity="1.0"
-     inkscape:pageopacity="0.0"
-     inkscape:pageshadow="2"
-     inkscape:zoom="2.8284271"
-     inkscape:cx="100.2616"
-     inkscape:cy="-104.45147"
-     inkscape:document-units="px"
-     inkscape:current-layer="layer1"
-     showgrid="true"
-     inkscape:window-width="1920"
-     inkscape:window-height="1001"
-     inkscape:window-x="-9"
-     inkscape:window-y="-9"
-     inkscape:window-maximized="0"
-     fit-margin-top="1"
-     fit-margin-left="1"
-     fit-margin-right="1"
-     fit-margin-bottom="1"
-     inkscape:snap-grids="true"
-     inkscape:snap-text-baseline="true"
-     inkscape:snap-object-midpoints="true"
-     units="px"
-     borderlayer="false">
-    <inkscape:grid
-       type="xygrid"
-       id="grid9626"
-       originx="-90.50911"
-       originy="-645.50922" />
-  </sodipodi:namedview>
-  <metadata
-     id="metadata8650">
-    <rdf:RDF>
-      <cc:Work
-         rdf:about="">
-        <dc:format>image/svg+xml</dc:format>
-        <dc:type
-           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
-        <dc:title />
-      </cc:Work>
-    </rdf:RDF>
-  </metadata>
-  <g
-     inkscape:label="Layer 1"
-     inkscape:groupmode="layer"
-     id="layer1"
-     transform="translate(-103.0435,232.526)">
-    <circle
-       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       id="path4517-0-8-5-2-3"
-       cx="107.53439"
-       cy="-228.03511"
-       r="3.4908931" />
-  </g>
-</svg>
diff --git a/registry/vulkan/images/primitive_topology_key_vertex_number.svg b/registry/vulkan/images/primitive_topology_key_vertex_number.svg
deleted file mode 100644
index 35b432f..0000000
--- a/registry/vulkan/images/primitive_topology_key_vertex_number.svg
+++ /dev/null
@@ -1,83 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Created with Inkscape (http://www.inkscape.org/) -->
-
-<svg
-   xmlns:dc="http://purl.org/dc/elements/1.1/"
-   xmlns:cc="http://creativecommons.org/ns#"
-   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
-   xmlns:svg="http://www.w3.org/2000/svg"
-   xmlns="http://www.w3.org/2000/svg"
-   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
-   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
-   width="9.578125"
-   height="13.875"
-   viewBox="0 0 9.5781251 13.875"
-   version="1.1"
-   id="svg8653"
-   inkscape:version="0.92.4 (5da689c313, 2019-01-14)"
-   sodipodi:docname="primitive_topology_key_vertex_number.svg">
-  <defs
-     id="defs8647" />
-  <sodipodi:namedview
-     id="base"
-     pagecolor="#ffffff"
-     bordercolor="#666666"
-     borderopacity="1.0"
-     inkscape:pageopacity="0.0"
-     inkscape:pageshadow="2"
-     inkscape:zoom="2.8284271"
-     inkscape:cx="78.58644"
-     inkscape:cy="-69.568388"
-     inkscape:document-units="px"
-     inkscape:current-layer="layer1"
-     showgrid="true"
-     inkscape:window-width="1920"
-     inkscape:window-height="1001"
-     inkscape:window-x="-9"
-     inkscape:window-y="-9"
-     inkscape:window-maximized="0"
-     fit-margin-top="1"
-     fit-margin-left="1"
-     fit-margin-right="1"
-     fit-margin-bottom="1"
-     inkscape:snap-grids="true"
-     inkscape:snap-text-baseline="true"
-     inkscape:snap-object-midpoints="true"
-     units="px"
-     borderlayer="false">
-    <inkscape:grid
-       type="xygrid"
-       id="grid9626"
-       originx="-90.367191"
-       originy="-618.75784" />
-  </sodipodi:namedview>
-  <metadata
-     id="metadata8650">
-    <rdf:RDF>
-      <cc:Work
-         rdf:about="">
-        <dc:format>image/svg+xml</dc:format>
-        <dc:type
-           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
-        <dc:title></dc:title>
-      </cc:Work>
-    </rdf:RDF>
-  </metadata>
-  <g
-     inkscape:label="Layer 1"
-     inkscape:groupmode="layer"
-     id="layer1"
-     transform="translate(-102.90158,210.66786)">
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
-       x="107.53439"
-       y="-198.03505"
-       id="text5070-2-2-9-9-41-9"><tspan
-         sodipodi:role="line"
-         id="tspan5068-0-3-36-9-1-5"
-         x="107.53439"
-         y="-198.03505"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">5</tspan></text>
-  </g>
-</svg>
diff --git a/registry/vulkan/images/primitive_topology_key_winding_order.svg b/registry/vulkan/images/primitive_topology_key_winding_order.svg
deleted file mode 100644
index 139675d..0000000
--- a/registry/vulkan/images/primitive_topology_key_winding_order.svg
+++ /dev/null
@@ -1,141 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Created with Inkscape (http://www.inkscape.org/) -->
-
-<svg
-   xmlns:dc="http://purl.org/dc/elements/1.1/"
-   xmlns:cc="http://creativecommons.org/ns#"
-   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
-   xmlns:svg="http://www.w3.org/2000/svg"
-   xmlns="http://www.w3.org/2000/svg"
-   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
-   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
-   width="55.063816"
-   height="46.178829"
-   viewBox="0 0 55.063817 46.17883"
-   version="1.1"
-   id="svg8653"
-   inkscape:version="0.92.4 (5da689c313, 2019-01-14)"
-   sodipodi:docname="primitive_topology_key_winding_order.svg">
-  <defs
-     id="defs8647">
-    <marker
-       inkscape:isstock="true"
-       style="overflow:visible"
-       id="marker3039-1"
-       refX="0"
-       refY="0"
-       orient="auto"
-       inkscape:stockid="Arrow1Mend">
-      <path
-         transform="matrix(-0.4,0,0,-0.4,-4,0)"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         id="path3037-0"
-         inkscape:connector-curvature="0" />
-    </marker>
-    <marker
-       inkscape:isstock="true"
-       style="overflow:visible"
-       id="marker2891-6"
-       refX="0"
-       refY="0"
-       orient="auto"
-       inkscape:stockid="Arrow1Mend">
-      <path
-         transform="matrix(-0.4,0,0,-0.4,-4,0)"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         id="path2889-6"
-         inkscape:connector-curvature="0" />
-    </marker>
-    <marker
-       inkscape:stockid="Arrow1Mend"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="Arrow1Mend-80"
-       style="overflow:visible"
-       inkscape:isstock="true"
-       inkscape:collect="always">
-      <path
-         id="path890-0"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         transform="matrix(-0.4,0,0,-0.4,-4,0)"
-         inkscape:connector-curvature="0" />
-    </marker>
-  </defs>
-  <sodipodi:namedview
-     id="base"
-     pagecolor="#ffffff"
-     bordercolor="#666666"
-     borderopacity="1.0"
-     inkscape:pageopacity="0.0"
-     inkscape:pageshadow="2"
-     inkscape:zoom="2.8284271"
-     inkscape:cx="-140.55056"
-     inkscape:cy="-8.4326646"
-     inkscape:document-units="px"
-     inkscape:current-layer="layer1"
-     showgrid="true"
-     inkscape:window-width="1920"
-     inkscape:window-height="1001"
-     inkscape:window-x="-9"
-     inkscape:window-y="-9"
-     inkscape:window-maximized="0"
-     fit-margin-top="1"
-     fit-margin-left="1"
-     fit-margin-right="1"
-     fit-margin-bottom="1"
-     inkscape:snap-grids="true"
-     inkscape:snap-text-baseline="true"
-     inkscape:snap-object-midpoints="true"
-     units="px"
-     borderlayer="false">
-    <inkscape:grid
-       type="xygrid"
-       id="grid9626"
-       originx="-307.02933"
-       originy="-566.46097" />
-  </sodipodi:namedview>
-  <metadata
-     id="metadata8650">
-    <rdf:RDF>
-      <cc:Work
-         rdf:about="">
-        <dc:format>image/svg+xml</dc:format>
-        <dc:type
-           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
-        <dc:title></dc:title>
-      </cc:Work>
-    </rdf:RDF>
-  </metadata>
-  <g
-     inkscape:label="Layer 1"
-     inkscape:groupmode="layer"
-     id="layer1"
-     transform="translate(-319.56371,190.6748)">
-    <g
-       id="g4389-89"
-       transform="translate(255,-44.999995)">
-      <path
-         sodipodi:nodetypes="cc"
-         inkscape:connector-curvature="0"
-         id="path1868-79"
-         d="m 67.534393,-113.0351 20,-30"
-         style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker3039-1)" />
-      <path
-         sodipodi:nodetypes="cc"
-         inkscape:connector-curvature="0"
-         id="path1870-3"
-         d="m 97.534393,-143.0351 19.999997,30"
-         style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker2891-6)" />
-      <path
-         sodipodi:nodetypes="cc"
-         inkscape:connector-curvature="0"
-         id="path1872-9"
-         d="M 117.53439,-103.0351 H 67.534393"
-         style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow1Mend-80)" />
-    </g>
-  </g>
-</svg>
diff --git a/registry/vulkan/images/primitive_topology_line_list.svg b/registry/vulkan/images/primitive_topology_line_list.svg
deleted file mode 100644
index ff4710d..0000000
--- a/registry/vulkan/images/primitive_topology_line_list.svg
+++ /dev/null
@@ -1,278 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Created with Inkscape (http://www.inkscape.org/) -->
-
-<svg
-   xmlns:dc="http://purl.org/dc/elements/1.1/"
-   xmlns:cc="http://creativecommons.org/ns#"
-   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
-   xmlns:svg="http://www.w3.org/2000/svg"
-   xmlns="http://www.w3.org/2000/svg"
-   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
-   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
-   width="89.898438"
-   height="107.35807"
-   viewBox="0 0 89.898439 107.35807"
-   version="1.1"
-   id="svg8653"
-   inkscape:version="0.92.2 5c3e80d, 2017-08-06"
-   sodipodi:docname="primitive_topology_line_list.svg">
-  <defs
-     id="defs8647">
-    <marker
-       inkscape:isstock="true"
-       style="overflow:visible;"
-       id="marker5891"
-       refX="0.0"
-       refY="0.0"
-       orient="auto"
-       inkscape:stockid="Arrow1Mend">
-      <path
-         transform="scale(0.4) rotate(180) translate(10,0)"
-         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1"
-         d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
-         id="path5889" />
-    </marker>
-    <inkscape:path-effect
-       only_selected="false"
-       apply_with_weight="true"
-       apply_no_weight="true"
-       helper_size="0"
-       steps="2"
-       weight="33.333333"
-       is_visible="true"
-       id="path-effect5887"
-       effect="bspline" />
-    <marker
-       inkscape:stockid="Arrow1Mend"
-       orient="auto"
-       refY="0.0"
-       refX="0.0"
-       id="Arrow1Mend"
-       style="overflow:visible;"
-       inkscape:isstock="true"
-       inkscape:collect="always">
-      <path
-         id="path5594"
-         d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
-         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1"
-         transform="scale(0.4) rotate(180) translate(10,0)" />
-    </marker>
-    <inkscape:path-effect
-       effect="bspline"
-       id="path-effect5583"
-       is_visible="true"
-       weight="33.333333"
-       steps="2"
-       helper_size="0"
-       apply_no_weight="true"
-       apply_with_weight="true"
-       only_selected="false" />
-    <inkscape:path-effect
-       only_selected="false"
-       apply_with_weight="true"
-       apply_no_weight="true"
-       helper_size="0"
-       steps="2"
-       weight="33.333333"
-       is_visible="true"
-       id="path-effect5395"
-       effect="bspline" />
-    <inkscape:path-effect
-       effect="bspline"
-       id="path-effect5371"
-       is_visible="true"
-       weight="33.333333"
-       steps="2"
-       helper_size="0"
-       apply_no_weight="true"
-       apply_with_weight="true"
-       only_selected="false" />
-    <marker
-       inkscape:stockid="Arrow1Mstart"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="marker6744-8-2"
-       style="overflow:visible"
-       inkscape:isstock="true">
-      <path
-         inkscape:connector-curvature="0"
-         id="path6742-9-67"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         style="fill:#fb0000;fill-opacity:1;fill-rule:evenodd;stroke:#fb0000;stroke-width:1.00000003pt;stroke-opacity:1"
-         transform="matrix(0.4,0,0,0.4,4,0)" />
-    </marker>
-    <marker
-       inkscape:stockid="Arrow1Mstart"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="marker6744-8-2-2"
-       style="overflow:visible"
-       inkscape:isstock="true">
-      <path
-         inkscape:connector-curvature="0"
-         id="path6742-9-67-5"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         style="fill:#fb0000;fill-opacity:1;fill-rule:evenodd;stroke:#fb0000;stroke-width:1.00000003pt;stroke-opacity:1"
-         transform="matrix(0.4,0,0,0.4,4,0)" />
-    </marker>
-  </defs>
-  <sodipodi:namedview
-     id="base"
-     pagecolor="#ffffff"
-     bordercolor="#666666"
-     borderopacity="1.0"
-     inkscape:pageopacity="0.0"
-     inkscape:pageshadow="2"
-     inkscape:zoom="8.9402749"
-     inkscape:cx="44.90625"
-     inkscape:cy="53.682942"
-     inkscape:document-units="px"
-     inkscape:current-layer="layer1"
-     showgrid="true"
-     inkscape:window-width="1920"
-     inkscape:window-height="1001"
-     inkscape:window-x="-9"
-     inkscape:window-y="-9"
-     inkscape:window-maximized="0"
-     fit-margin-top="1"
-     fit-margin-left="1"
-     fit-margin-right="1"
-     fit-margin-bottom="1"
-     inkscape:snap-grids="true"
-     inkscape:snap-text-baseline="true"
-     inkscape:snap-object-midpoints="true"
-     units="px"
-     borderlayer="false">
-    <inkscape:grid
-       type="xygrid"
-       id="grid9626"
-       originx="-74.976564"
-       originy="-495.50911" />
-  </sodipodi:namedview>
-  <metadata
-     id="metadata8650">
-    <rdf:RDF>
-      <cc:Work
-         rdf:about="">
-        <dc:format>image/svg+xml</dc:format>
-        <dc:type
-           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
-        <dc:title />
-      </cc:Work>
-    </rdf:RDF>
-  </metadata>
-  <g
-     inkscape:label="Layer 1"
-     inkscape:groupmode="layer"
-     id="layer1"
-     transform="translate(-87.510956,180.90228)">
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
-       x="92.534393"
-       y="-168.0351"
-       id="text5070-2-2-9-9"><tspan
-         sodipodi:role="line"
-         id="tspan5068-0-3-36-9"
-         x="92.534393"
-         y="-168.0351"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">0</tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
-       x="92.534393"
-       y="-88.035103"
-       id="text5070-2-2-9-9-7"><tspan
-         sodipodi:role="line"
-         id="tspan5068-0-3-36-9-6"
-         x="92.534393"
-         y="-88.035103"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">2</tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
-       x="172.53439"
-       y="-168.0351"
-       id="text5070-2-2-9-9-6"><tspan
-         sodipodi:role="line"
-         id="tspan5068-0-3-36-9-4"
-         x="172.53439"
-         y="-168.0351"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">1</tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
-       x="172.53439"
-       y="-88.035103"
-       id="text5070-2-2-9-9-77"><tspan
-         sodipodi:role="line"
-         id="tspan5068-0-3-36-9-5"
-         x="172.53439"
-         y="-88.035103"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">3</tspan></text>
-    <circle
-       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       id="path4517-0-8-5-2"
-       cx="172.53439"
-       cy="-158.03511"
-       r="3.4908931" />
-    <circle
-       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       id="path4517-0-8-5-2-4"
-       cx="172.53439"
-       cy="-78.035103"
-       r="3.4908931" />
-    <path
-       style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-       d="M 92.534393,-158.0351 H 172.53439"
-       id="path2033"
-       inkscape:connector-curvature="0" />
-    <path
-       style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-       d="M 92.534393,-78.035103 H 172.53439"
-       id="path2033-5"
-       inkscape:connector-curvature="0" />
-    <circle
-       style="fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       id="path4517-0-8-5-91-0-3"
-       cx="92.534393"
-       cy="-78.035103"
-       r="3.4908931" />
-    <circle
-       style="fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       id="path4517-0-8-5-91-0-3-8"
-       cx="92.534393"
-       cy="-158.0351"
-       r="3.4908931" />
-    <path
-       style="fill:none;stroke:#ff0000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-       d="m 92.534392,-158.0351 c 3.334534,-1.66727 6.667865,-3.33393 9.999998,-5"
-       id="path5369"
-       inkscape:connector-curvature="0"
-       inkscape:path-effect="#path-effect5371"
-       inkscape:original-d="m 92.534392,-158.0351 c 3.334333,-1.66767 6.667667,-3.33433 9.999998,-5" />
-    <path
-       inkscape:original-d="m 92.534392,-78.0351 c 3.334333,-1.66767 6.667667,-3.33433 9.999998,-5"
-       inkscape:path-effect="#path-effect5395"
-       inkscape:connector-curvature="0"
-       id="path5393"
-       d="m 92.534392,-78.0351 c 3.334534,-1.667267 6.667865,-3.333933 9.999998,-5"
-       style="fill:none;stroke:#ff0000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
-    <path
-       style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow1Mend)"
-       d="m 107.53439,-163.0351 c 16.66767,0 33.33433,0 50,0"
-       id="path5581"
-       inkscape:connector-curvature="0"
-       inkscape:path-effect="#path-effect5583"
-       inkscape:original-d="m 107.53439,-163.0351 c 16.66767,-0.001 33.33433,-0.001 50,0" />
-    <path
-       inkscape:original-d="m 107.53439,-83.0351 c 16.66767,-0.001 33.33433,-0.001 50,0"
-       inkscape:path-effect="#path-effect5887"
-       inkscape:connector-curvature="0"
-       id="path5885"
-       d="m 107.53439,-83.0351 c 16.66767,0 33.33433,0 50,0"
-       style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker5891)" />
-  </g>
-</svg>
diff --git a/registry/vulkan/images/primitive_topology_line_list_last.svg b/registry/vulkan/images/primitive_topology_line_list_last.svg
deleted file mode 100644
index f1afd4b..0000000
--- a/registry/vulkan/images/primitive_topology_line_list_last.svg
+++ /dev/null
@@ -1,278 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Created with Inkscape (http://www.inkscape.org/) -->
-
-<svg
-   xmlns:dc="http://purl.org/dc/elements/1.1/"
-   xmlns:cc="http://creativecommons.org/ns#"
-   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
-   xmlns:svg="http://www.w3.org/2000/svg"
-   xmlns="http://www.w3.org/2000/svg"
-   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
-   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
-   width="89.898438"
-   height="107.35807"
-   viewBox="0 0 89.898439 107.35807"
-   version="1.1"
-   id="svg8653"
-   inkscape:version="0.92.2 5c3e80d, 2017-08-06"
-   sodipodi:docname="primitive_topology_line_list_last.svg">
-  <defs
-     id="defs8647">
-    <marker
-       inkscape:isstock="true"
-       style="overflow:visible;"
-       id="marker5891"
-       refX="0.0"
-       refY="0.0"
-       orient="auto"
-       inkscape:stockid="Arrow1Mend">
-      <path
-         transform="scale(0.4) rotate(180) translate(10,0)"
-         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1"
-         d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
-         id="path5889" />
-    </marker>
-    <inkscape:path-effect
-       only_selected="false"
-       apply_with_weight="true"
-       apply_no_weight="true"
-       helper_size="0"
-       steps="2"
-       weight="33.333333"
-       is_visible="true"
-       id="path-effect5887"
-       effect="bspline" />
-    <marker
-       inkscape:stockid="Arrow1Mend"
-       orient="auto"
-       refY="0.0"
-       refX="0.0"
-       id="Arrow1Mend"
-       style="overflow:visible;"
-       inkscape:isstock="true"
-       inkscape:collect="always">
-      <path
-         id="path5594"
-         d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
-         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1"
-         transform="scale(0.4) rotate(180) translate(10,0)" />
-    </marker>
-    <inkscape:path-effect
-       effect="bspline"
-       id="path-effect5583"
-       is_visible="true"
-       weight="33.333333"
-       steps="2"
-       helper_size="0"
-       apply_no_weight="true"
-       apply_with_weight="true"
-       only_selected="false" />
-    <inkscape:path-effect
-       only_selected="false"
-       apply_with_weight="true"
-       apply_no_weight="true"
-       helper_size="0"
-       steps="2"
-       weight="33.333333"
-       is_visible="true"
-       id="path-effect5395"
-       effect="bspline" />
-    <inkscape:path-effect
-       effect="bspline"
-       id="path-effect5371"
-       is_visible="true"
-       weight="33.333333"
-       steps="2"
-       helper_size="0"
-       apply_no_weight="true"
-       apply_with_weight="true"
-       only_selected="false" />
-    <marker
-       inkscape:stockid="Arrow1Mstart"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="marker6744-8-2"
-       style="overflow:visible"
-       inkscape:isstock="true">
-      <path
-         inkscape:connector-curvature="0"
-         id="path6742-9-67"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         style="fill:#fb0000;fill-opacity:1;fill-rule:evenodd;stroke:#fb0000;stroke-width:1.00000003pt;stroke-opacity:1"
-         transform="matrix(0.4,0,0,0.4,4,0)" />
-    </marker>
-    <marker
-       inkscape:stockid="Arrow1Mstart"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="marker6744-8-2-2"
-       style="overflow:visible"
-       inkscape:isstock="true">
-      <path
-         inkscape:connector-curvature="0"
-         id="path6742-9-67-5"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         style="fill:#fb0000;fill-opacity:1;fill-rule:evenodd;stroke:#fb0000;stroke-width:1.00000003pt;stroke-opacity:1"
-         transform="matrix(0.4,0,0,0.4,4,0)" />
-    </marker>
-  </defs>
-  <sodipodi:namedview
-     id="base"
-     pagecolor="#ffffff"
-     bordercolor="#666666"
-     borderopacity="1.0"
-     inkscape:pageopacity="0.0"
-     inkscape:pageshadow="2"
-     inkscape:zoom="8.9402749"
-     inkscape:cx="24.772641"
-     inkscape:cy="53.682942"
-     inkscape:document-units="px"
-     inkscape:current-layer="layer1"
-     showgrid="true"
-     inkscape:window-width="1920"
-     inkscape:window-height="1155"
-     inkscape:window-x="0"
-     inkscape:window-y="1"
-     inkscape:window-maximized="1"
-     fit-margin-top="1"
-     fit-margin-left="1"
-     fit-margin-right="1"
-     fit-margin-bottom="1"
-     inkscape:snap-grids="true"
-     inkscape:snap-text-baseline="true"
-     inkscape:snap-object-midpoints="true"
-     units="px"
-     borderlayer="false">
-    <inkscape:grid
-       type="xygrid"
-       id="grid9626"
-       originx="-74.976564"
-       originy="-495.50911" />
-  </sodipodi:namedview>
-  <metadata
-     id="metadata8650">
-    <rdf:RDF>
-      <cc:Work
-         rdf:about="">
-        <dc:format>image/svg+xml</dc:format>
-        <dc:type
-           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
-        <dc:title />
-      </cc:Work>
-    </rdf:RDF>
-  </metadata>
-  <g
-     inkscape:label="Layer 1"
-     inkscape:groupmode="layer"
-     id="layer1"
-     transform="translate(-87.510956,180.90228)">
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
-       x="92.534393"
-       y="-168.0351"
-       id="text5070-2-2-9-9"><tspan
-         sodipodi:role="line"
-         id="tspan5068-0-3-36-9"
-         x="92.534393"
-         y="-168.0351"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">0</tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
-       x="92.534393"
-       y="-88.035103"
-       id="text5070-2-2-9-9-7"><tspan
-         sodipodi:role="line"
-         id="tspan5068-0-3-36-9-6"
-         x="92.534393"
-         y="-88.035103"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">2</tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
-       x="172.53439"
-       y="-168.0351"
-       id="text5070-2-2-9-9-6"><tspan
-         sodipodi:role="line"
-         id="tspan5068-0-3-36-9-4"
-         x="172.53439"
-         y="-168.0351"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">1</tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
-       x="172.53439"
-       y="-88.035103"
-       id="text5070-2-2-9-9-77"><tspan
-         sodipodi:role="line"
-         id="tspan5068-0-3-36-9-5"
-         x="172.53439"
-         y="-88.035103"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">3</tspan></text>
-    <path
-       style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-       d="M 92.534393,-158.0351 H 172.53439"
-       id="path2033"
-       inkscape:connector-curvature="0" />
-    <path
-       style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-       d="M 92.534393,-78.035103 H 172.53439"
-       id="path2033-5"
-       inkscape:connector-curvature="0" />
-    <circle
-       style="fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       id="path4517-0-8-5-2-4"
-       cx="172.53439"
-       cy="-78.035103"
-       r="3.4908931" />
-    <circle
-       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       id="path4517-0-8-5-91-0-3"
-       cx="92.534393"
-       cy="-78.035103"
-       r="3.4908931" />
-    <circle
-       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       id="path4517-0-8-5-91-0-3-8"
-       cx="92.534393"
-       cy="-158.0351"
-       r="3.4908931" />
-    <path
-       style="fill:none;stroke:#ff0000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-       d="m 172.53439,-158.0351 c -3.33453,-1.66727 -6.66787,-3.33393 -10,-5"
-       id="path5369"
-       inkscape:connector-curvature="0"
-       inkscape:path-effect="#path-effect5371"
-       inkscape:original-d="m 172.53439,-158.0351 c -3.33433,-1.66767 -6.66767,-3.33433 -10,-5" />
-    <path
-       inkscape:original-d="m 172.53439,-78.0351 c -3.33433,-1.66767 -6.66767,-3.33433 -10,-5"
-       inkscape:path-effect="#path-effect5395"
-       inkscape:connector-curvature="0"
-       id="path5393"
-       d="m 172.53439,-78.0351 c -3.33453,-1.667266 -6.66787,-3.333934 -10,-5"
-       style="fill:none;stroke:#ff0000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
-    <path
-       style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow1Mend)"
-       d="m 107.53439,-163.0351 c 16.66767,0 33.33433,0 50,0"
-       id="path5581"
-       inkscape:connector-curvature="0"
-       inkscape:path-effect="#path-effect5583"
-       inkscape:original-d="m 107.53439,-163.0351 c 16.66767,-0.001 33.33433,-0.001 50,0" />
-    <path
-       inkscape:original-d="m 107.53439,-83.0351 c 16.66767,-0.001 33.33433,-0.001 50,0"
-       inkscape:path-effect="#path-effect5887"
-       inkscape:connector-curvature="0"
-       id="path5885"
-       d="m 107.53439,-83.0351 c 16.66767,0 33.33433,0 50,0"
-       style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker5891)" />
-    <circle
-       style="fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       id="path4517-0-8-5-2"
-       cx="172.53439"
-       cy="-158.03511"
-       r="3.4908931" />
-  </g>
-</svg>
diff --git a/registry/vulkan/images/primitive_topology_line_list_with_adjacency.svg b/registry/vulkan/images/primitive_topology_line_list_with_adjacency.svg
deleted file mode 100644
index 2976295..0000000
--- a/registry/vulkan/images/primitive_topology_line_list_with_adjacency.svg
+++ /dev/null
@@ -1,356 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Created with Inkscape (http://www.inkscape.org/) -->
-
-<svg
-   xmlns:dc="http://purl.org/dc/elements/1.1/"
-   xmlns:cc="http://creativecommons.org/ns#"
-   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
-   xmlns:svg="http://www.w3.org/2000/svg"
-   xmlns="http://www.w3.org/2000/svg"
-   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
-   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
-   width="250.5625"
-   height="107.36588"
-   viewBox="0 0 250.5625 107.36588"
-   version="1.1"
-   id="svg8653"
-   inkscape:version="0.92.2 5c3e80d, 2017-08-06"
-   sodipodi:docname="primitive_topology_line_list_with_adjacency.svg">
-  <defs
-     id="defs8647">
-    <marker
-       inkscape:isstock="true"
-       style="overflow:visible;"
-       id="marker9663"
-       refX="0.0"
-       refY="0.0"
-       orient="auto"
-       inkscape:stockid="Arrow1Mend">
-      <path
-         transform="scale(0.4) rotate(180) translate(10,0)"
-         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1"
-         d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
-         id="path9661" />
-    </marker>
-    <inkscape:path-effect
-       only_selected="false"
-       apply_with_weight="true"
-       apply_no_weight="true"
-       helper_size="0"
-       steps="2"
-       weight="33.333333"
-       is_visible="true"
-       id="path-effect9659"
-       effect="bspline" />
-    <inkscape:path-effect
-       only_selected="false"
-       apply_with_weight="true"
-       apply_no_weight="true"
-       helper_size="0"
-       steps="2"
-       weight="33.333333"
-       is_visible="true"
-       id="path-effect9655"
-       effect="bspline" />
-    <inkscape:path-effect
-       effect="bspline"
-       id="path-effect9645"
-       is_visible="true"
-       weight="33.333333"
-       steps="2"
-       helper_size="0"
-       apply_no_weight="true"
-       apply_with_weight="true"
-       only_selected="false" />
-    <marker
-       inkscape:stockid="Arrow1Mend"
-       orient="auto"
-       refY="0.0"
-       refX="0.0"
-       id="Arrow1Mend"
-       style="overflow:visible;"
-       inkscape:isstock="true"
-       inkscape:collect="always">
-      <path
-         id="path5594"
-         d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
-         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1"
-         transform="scale(0.4) rotate(180) translate(10,0)" />
-    </marker>
-    <inkscape:path-effect
-       effect="bspline"
-       id="path-effect9609"
-       is_visible="true"
-       weight="33.333333"
-       steps="2"
-       helper_size="0"
-       apply_no_weight="true"
-       apply_with_weight="true"
-       only_selected="false" />
-    <marker
-       inkscape:stockid="Arrow1Mstart"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="marker6744-8-2"
-       style="overflow:visible"
-       inkscape:isstock="true">
-      <path
-         inkscape:connector-curvature="0"
-         id="path6742-9-67"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         style="fill:#fb0000;fill-opacity:1;fill-rule:evenodd;stroke:#fb0000;stroke-width:1.00000003pt;stroke-opacity:1"
-         transform="matrix(0.4,0,0,0.4,4,0)" />
-    </marker>
-    <marker
-       inkscape:stockid="Arrow1Mstart"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="marker6744-8-2-3"
-       style="overflow:visible"
-       inkscape:isstock="true">
-      <path
-         inkscape:connector-curvature="0"
-         id="path6742-9-67-0"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         style="fill:#fb0000;fill-opacity:1;fill-rule:evenodd;stroke:#fb0000;stroke-width:1.00000003pt;stroke-opacity:1"
-         transform="matrix(0.4,0,0,0.4,4,0)" />
-    </marker>
-  </defs>
-  <sodipodi:namedview
-     id="base"
-     pagecolor="#ffffff"
-     bordercolor="#666666"
-     borderopacity="1.0"
-     inkscape:pageopacity="0.0"
-     inkscape:pageshadow="2"
-     inkscape:zoom="5.7069807"
-     inkscape:cx="125.23828"
-     inkscape:cy="53.682935"
-     inkscape:document-units="px"
-     inkscape:current-layer="layer1"
-     showgrid="true"
-     inkscape:window-width="1920"
-     inkscape:window-height="1001"
-     inkscape:window-x="-9"
-     inkscape:window-y="-9"
-     inkscape:window-maximized="0"
-     fit-margin-top="1"
-     fit-margin-left="1"
-     fit-margin-right="1"
-     fit-margin-bottom="1"
-     inkscape:snap-grids="true"
-     inkscape:snap-text-baseline="true"
-     inkscape:snap-object-midpoints="true"
-     units="px"
-     borderlayer="false">
-    <inkscape:grid
-       type="xygrid"
-       id="grid9626"
-       originx="5.4921875"
-       originy="-495.5091" />
-  </sodipodi:namedview>
-  <metadata
-     id="metadata8650">
-    <rdf:RDF>
-      <cc:Work
-         rdf:about="">
-        <dc:format>image/svg+xml</dc:format>
-        <dc:type
-           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
-        <dc:title />
-      </cc:Work>
-    </rdf:RDF>
-  </metadata>
-  <g
-     inkscape:label="Layer 1"
-     inkscape:groupmode="layer"
-     id="layer1"
-     transform="translate(-7.0422058,180.9101)">
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
-       x="12.534393"
-       y="-168.0351"
-       id="text5070-2-2-9-9"><tspan
-         sodipodi:role="line"
-         id="tspan5068-0-3-36-9"
-         x="12.534393"
-         y="-168.0351"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">0</tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
-       x="172.53439"
-       y="-168.0351"
-       id="text5070-2-2-9-9-7"><tspan
-         sodipodi:role="line"
-         id="tspan5068-0-3-36-9-6"
-         x="172.53439"
-         y="-168.0351"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">2</tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
-       x="92.534393"
-       y="-168.0351"
-       id="text5070-2-2-9-9-6"><tspan
-         sodipodi:role="line"
-         id="tspan5068-0-3-36-9-4"
-         x="92.534393"
-         y="-168.0351"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">1</tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
-       x="252.53439"
-       y="-168.0351"
-       id="text5070-2-2-9-9-77"><tspan
-         sodipodi:role="line"
-         id="tspan5068-0-3-36-9-5"
-         x="252.53439"
-         y="-168.0351"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">3</tspan></text>
-    <circle
-       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       id="path4517-0-8-5-8"
-       cx="12.534393"
-       cy="-158.03511"
-       r="3.4908931" />
-    <circle
-       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       id="path4517-0-8-5-2"
-       cx="172.53439"
-       cy="-158.03511"
-       r="3.4908931" />
-    <circle
-       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       id="path4517-0-8-5-5-0"
-       cx="252.53439"
-       cy="-158.03511"
-       r="3.4908931" />
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
-       x="12.534393"
-       y="-88.035088"
-       id="text5070-2-2-9-9-0"><tspan
-         sodipodi:role="line"
-         id="tspan5068-0-3-36-9-1"
-         x="12.534393"
-         y="-88.035088"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">4</tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
-       x="172.53439"
-       y="-88.035088"
-       id="text5070-2-2-9-9-7-3"><tspan
-         sodipodi:role="line"
-         id="tspan5068-0-3-36-9-6-8"
-         x="172.53439"
-         y="-88.035088"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">6</tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
-       x="92.534393"
-       y="-88.035088"
-       id="text5070-2-2-9-9-6-4"><tspan
-         sodipodi:role="line"
-         id="tspan5068-0-3-36-9-4-1"
-         x="92.534393"
-         y="-88.035088"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">5</tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
-       x="252.53439"
-       y="-88.035088"
-       id="text5070-2-2-9-9-77-7"><tspan
-         sodipodi:role="line"
-         id="tspan5068-0-3-36-9-5-3"
-         x="252.53439"
-         y="-88.035088"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">7</tspan></text>
-    <circle
-       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       id="path4517-0-8-5-8-7"
-       cx="12.534393"
-       cy="-78.035103"
-       r="3.4908931" />
-    <circle
-       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       id="path4517-0-8-5-2-4"
-       cx="172.53439"
-       cy="-78.035103"
-       r="3.4908931" />
-    <circle
-       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       id="path4517-0-8-5-5-0-2"
-       cx="252.53439"
-       cy="-78.035103"
-       r="3.4908931" />
-    <path
-       style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:4, 4;stroke-dashoffset:0;stroke-opacity:1"
-       d="m 12.534393,-158.0351 h 80 m 79.999997,0 h 80"
-       id="path2031"
-       inkscape:connector-curvature="0" />
-    <path
-       style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-       d="M 92.534393,-158.0351 H 172.53439"
-       id="path2033"
-       inkscape:connector-curvature="0" />
-    <path
-       style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:4, 4;stroke-dashoffset:0;stroke-opacity:1"
-       d="m 12.534393,-78.035103 h 80 m 79.999997,0 h 80"
-       id="path2031-2"
-       inkscape:connector-curvature="0" />
-    <path
-       style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-       d="M 92.534393,-78.035103 H 172.53439"
-       id="path2033-5"
-       inkscape:connector-curvature="0" />
-    <circle
-       style="fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       id="path4517-0-8-5-91-0-3"
-       cx="92.534393"
-       cy="-158.03511"
-       r="3.4908931" />
-    <circle
-       style="fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       id="path4517-0-8-5-91-0-3-9"
-       cx="92.534393"
-       cy="-78.035118"
-       r="3.4908931" />
-    <path
-       style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow1Mend)"
-       d="m 107.5344,-83.035117 c 16.66766,0 33.33433,0 50,0"
-       id="path9607"
-       inkscape:connector-curvature="0"
-       inkscape:path-effect="#path-effect9609"
-       inkscape:original-d="m 107.5344,-83.035117 c 16.66766,-0.001 33.33433,-0.001 50,0" />
-    <path
-       style="fill:none;stroke:#ff0000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-       d="m 92.534393,-78.03512 c 3.334531,-1.667265 6.667866,-3.333932 9.999997,-4.999997"
-       id="path9643"
-       inkscape:connector-curvature="0"
-       inkscape:path-effect="#path-effect9645"
-       inkscape:original-d="m 92.534393,-78.03512 c 3.334334,-1.66766 6.667667,-3.33433 9.999997,-4.999997" />
-    <path
-       inkscape:original-d="m 107.5344,-163.03511 c 16.66766,-0.001 33.33433,-0.001 50,0"
-       inkscape:path-effect="#path-effect9655"
-       inkscape:connector-curvature="0"
-       id="path9653"
-       d="m 107.5344,-163.03511 c 16.66766,0 33.33433,0 50,0"
-       style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker9663)" />
-    <path
-       inkscape:original-d="m 92.534393,-158.03512 c 3.334334,-1.66766 6.667667,-3.33433 9.999997,-4.99999"
-       inkscape:path-effect="#path-effect9659"
-       inkscape:connector-curvature="0"
-       id="path9657"
-       d="m 92.534393,-158.03512 c 3.334532,-1.66726 6.667868,-3.33393 9.999997,-4.99999"
-       style="fill:none;stroke:#ff0000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
-  </g>
-</svg>
diff --git a/registry/vulkan/images/primitive_topology_line_list_with_adjacency_last.svg b/registry/vulkan/images/primitive_topology_line_list_with_adjacency_last.svg
deleted file mode 100644
index 938b50b..0000000
--- a/registry/vulkan/images/primitive_topology_line_list_with_adjacency_last.svg
+++ /dev/null
@@ -1,356 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Created with Inkscape (http://www.inkscape.org/) -->
-
-<svg
-   xmlns:dc="http://purl.org/dc/elements/1.1/"
-   xmlns:cc="http://creativecommons.org/ns#"
-   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
-   xmlns:svg="http://www.w3.org/2000/svg"
-   xmlns="http://www.w3.org/2000/svg"
-   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
-   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
-   width="250.5625"
-   height="107.36588"
-   viewBox="0 0 250.5625 107.36588"
-   version="1.1"
-   id="svg8653"
-   inkscape:version="0.92.2 5c3e80d, 2017-08-06"
-   sodipodi:docname="primitive_topology_line_list_with_adjacency_last.svg">
-  <defs
-     id="defs8647">
-    <marker
-       inkscape:isstock="true"
-       style="overflow:visible;"
-       id="marker9663"
-       refX="0.0"
-       refY="0.0"
-       orient="auto"
-       inkscape:stockid="Arrow1Mend">
-      <path
-         transform="scale(0.4) rotate(180) translate(10,0)"
-         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1"
-         d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
-         id="path9661" />
-    </marker>
-    <inkscape:path-effect
-       only_selected="false"
-       apply_with_weight="true"
-       apply_no_weight="true"
-       helper_size="0"
-       steps="2"
-       weight="33.333333"
-       is_visible="true"
-       id="path-effect9659"
-       effect="bspline" />
-    <inkscape:path-effect
-       only_selected="false"
-       apply_with_weight="true"
-       apply_no_weight="true"
-       helper_size="0"
-       steps="2"
-       weight="33.333333"
-       is_visible="true"
-       id="path-effect9655"
-       effect="bspline" />
-    <inkscape:path-effect
-       effect="bspline"
-       id="path-effect9645"
-       is_visible="true"
-       weight="33.333333"
-       steps="2"
-       helper_size="0"
-       apply_no_weight="true"
-       apply_with_weight="true"
-       only_selected="false" />
-    <marker
-       inkscape:stockid="Arrow1Mend"
-       orient="auto"
-       refY="0.0"
-       refX="0.0"
-       id="Arrow1Mend"
-       style="overflow:visible;"
-       inkscape:isstock="true"
-       inkscape:collect="always">
-      <path
-         id="path5594"
-         d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
-         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1"
-         transform="scale(0.4) rotate(180) translate(10,0)" />
-    </marker>
-    <inkscape:path-effect
-       effect="bspline"
-       id="path-effect9609"
-       is_visible="true"
-       weight="33.333333"
-       steps="2"
-       helper_size="0"
-       apply_no_weight="true"
-       apply_with_weight="true"
-       only_selected="false" />
-    <marker
-       inkscape:stockid="Arrow1Mstart"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="marker6744-8-2"
-       style="overflow:visible"
-       inkscape:isstock="true">
-      <path
-         inkscape:connector-curvature="0"
-         id="path6742-9-67"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         style="fill:#fb0000;fill-opacity:1;fill-rule:evenodd;stroke:#fb0000;stroke-width:1.00000003pt;stroke-opacity:1"
-         transform="matrix(0.4,0,0,0.4,4,0)" />
-    </marker>
-    <marker
-       inkscape:stockid="Arrow1Mstart"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="marker6744-8-2-3"
-       style="overflow:visible"
-       inkscape:isstock="true">
-      <path
-         inkscape:connector-curvature="0"
-         id="path6742-9-67-0"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         style="fill:#fb0000;fill-opacity:1;fill-rule:evenodd;stroke:#fb0000;stroke-width:1.00000003pt;stroke-opacity:1"
-         transform="matrix(0.4,0,0,0.4,4,0)" />
-    </marker>
-  </defs>
-  <sodipodi:namedview
-     id="base"
-     pagecolor="#ffffff"
-     bordercolor="#666666"
-     borderopacity="1.0"
-     inkscape:pageopacity="0.0"
-     inkscape:pageshadow="2"
-     inkscape:zoom="5.7069807"
-     inkscape:cx="125.23828"
-     inkscape:cy="53.682935"
-     inkscape:document-units="px"
-     inkscape:current-layer="layer1"
-     showgrid="true"
-     inkscape:window-width="1920"
-     inkscape:window-height="1155"
-     inkscape:window-x="0"
-     inkscape:window-y="1"
-     inkscape:window-maximized="1"
-     fit-margin-top="1"
-     fit-margin-left="1"
-     fit-margin-right="1"
-     fit-margin-bottom="1"
-     inkscape:snap-grids="true"
-     inkscape:snap-text-baseline="true"
-     inkscape:snap-object-midpoints="true"
-     units="px"
-     borderlayer="false">
-    <inkscape:grid
-       type="xygrid"
-       id="grid9626"
-       originx="5.4921875"
-       originy="-495.5091" />
-  </sodipodi:namedview>
-  <metadata
-     id="metadata8650">
-    <rdf:RDF>
-      <cc:Work
-         rdf:about="">
-        <dc:format>image/svg+xml</dc:format>
-        <dc:type
-           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
-        <dc:title />
-      </cc:Work>
-    </rdf:RDF>
-  </metadata>
-  <g
-     inkscape:label="Layer 1"
-     inkscape:groupmode="layer"
-     id="layer1"
-     transform="translate(-7.0422058,180.9101)">
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
-       x="12.534393"
-       y="-168.0351"
-       id="text5070-2-2-9-9"><tspan
-         sodipodi:role="line"
-         id="tspan5068-0-3-36-9"
-         x="12.534393"
-         y="-168.0351"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">0</tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
-       x="172.53439"
-       y="-168.0351"
-       id="text5070-2-2-9-9-7"><tspan
-         sodipodi:role="line"
-         id="tspan5068-0-3-36-9-6"
-         x="172.53439"
-         y="-168.0351"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">2</tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
-       x="92.534393"
-       y="-168.0351"
-       id="text5070-2-2-9-9-6"><tspan
-         sodipodi:role="line"
-         id="tspan5068-0-3-36-9-4"
-         x="92.534393"
-         y="-168.0351"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">1</tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
-       x="252.53439"
-       y="-168.0351"
-       id="text5070-2-2-9-9-77"><tspan
-         sodipodi:role="line"
-         id="tspan5068-0-3-36-9-5"
-         x="252.53439"
-         y="-168.0351"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">3</tspan></text>
-    <circle
-       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       id="path4517-0-8-5-8"
-       cx="12.534393"
-       cy="-158.03511"
-       r="3.4908931" />
-    <circle
-       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       id="path4517-0-8-5-5-0"
-       cx="252.53439"
-       cy="-158.03511"
-       r="3.4908931" />
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
-       x="12.534393"
-       y="-88.035088"
-       id="text5070-2-2-9-9-0"><tspan
-         sodipodi:role="line"
-         id="tspan5068-0-3-36-9-1"
-         x="12.534393"
-         y="-88.035088"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">4</tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
-       x="172.53439"
-       y="-88.035088"
-       id="text5070-2-2-9-9-7-3"><tspan
-         sodipodi:role="line"
-         id="tspan5068-0-3-36-9-6-8"
-         x="172.53439"
-         y="-88.035088"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">6</tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
-       x="92.534393"
-       y="-88.035088"
-       id="text5070-2-2-9-9-6-4"><tspan
-         sodipodi:role="line"
-         id="tspan5068-0-3-36-9-4-1"
-         x="92.534393"
-         y="-88.035088"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">5</tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
-       x="252.53439"
-       y="-88.035088"
-       id="text5070-2-2-9-9-77-7"><tspan
-         sodipodi:role="line"
-         id="tspan5068-0-3-36-9-5-3"
-         x="252.53439"
-         y="-88.035088"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">7</tspan></text>
-    <circle
-       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       id="path4517-0-8-5-8-7"
-       cx="12.534393"
-       cy="-78.035103"
-       r="3.4908931" />
-    <circle
-       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       id="path4517-0-8-5-5-0-2"
-       cx="252.53439"
-       cy="-78.035103"
-       r="3.4908931" />
-    <path
-       style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:4, 4;stroke-dashoffset:0;stroke-opacity:1"
-       d="m 12.534393,-158.0351 h 80 m 79.999997,0 h 80"
-       id="path2031"
-       inkscape:connector-curvature="0" />
-    <path
-       style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-       d="M 92.534393,-158.0351 H 172.53439"
-       id="path2033"
-       inkscape:connector-curvature="0" />
-    <circle
-       style="fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       id="path4517-0-8-5-2"
-       cx="172.53439"
-       cy="-158.03511"
-       r="3.4908931" />
-    <path
-       style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:4, 4;stroke-dashoffset:0;stroke-opacity:1"
-       d="m 12.534393,-78.035103 h 80 m 79.999997,0 h 80"
-       id="path2031-2"
-       inkscape:connector-curvature="0" />
-    <path
-       style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-       d="M 92.534393,-78.035103 H 172.53439"
-       id="path2033-5"
-       inkscape:connector-curvature="0" />
-    <circle
-       style="fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       id="path4517-0-8-5-2-4"
-       cx="172.53439"
-       cy="-78.035103"
-       r="3.4908931" />
-    <circle
-       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       id="path4517-0-8-5-91-0-3"
-       cx="92.534393"
-       cy="-158.03511"
-       r="3.4908931" />
-    <circle
-       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       id="path4517-0-8-5-91-0-3-9"
-       cx="92.534393"
-       cy="-78.035118"
-       r="3.4908931" />
-    <path
-       style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow1Mend)"
-       d="m 107.5344,-83.035117 c 16.66766,0 33.33433,0 50,0"
-       id="path9607"
-       inkscape:connector-curvature="0"
-       inkscape:path-effect="#path-effect9609"
-       inkscape:original-d="m 107.5344,-83.035117 c 16.66766,-0.001 33.33433,-0.001 50,0" />
-    <path
-       style="fill:none;stroke:#ff0000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-       d="m 172.53439,-78.035117 c -3.33453,-1.667265 -6.66786,-3.333931 -9.99999,-4.999997"
-       id="path9643"
-       inkscape:connector-curvature="0"
-       inkscape:path-effect="#path-effect9645"
-       inkscape:original-d="m 172.53439,-78.035117 c -3.33433,-1.66766 -6.66766,-3.33433 -9.99999,-4.999997" />
-    <path
-       inkscape:original-d="m 107.5344,-163.03511 c 16.66766,-0.001 33.33433,-0.001 50,0"
-       inkscape:path-effect="#path-effect9655"
-       inkscape:connector-curvature="0"
-       id="path9653"
-       d="m 107.5344,-163.03511 c 16.66766,0 33.33433,0 50,0"
-       style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker9663)" />
-    <path
-       inkscape:original-d="m 172.53439,-158.03512 c -3.33433,-1.66766 -6.66766,-3.33433 -9.99999,-4.99999"
-       inkscape:path-effect="#path-effect9659"
-       inkscape:connector-curvature="0"
-       id="path9657"
-       d="m 172.53439,-158.03512 c -3.33453,-1.66726 -6.66786,-3.33393 -9.99999,-4.99999"
-       style="fill:none;stroke:#ff0000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
-  </g>
-</svg>
diff --git a/registry/vulkan/images/primitive_topology_line_strip.svg b/registry/vulkan/images/primitive_topology_line_strip.svg
deleted file mode 100644
index a54fabb..0000000
--- a/registry/vulkan/images/primitive_topology_line_strip.svg
+++ /dev/null
@@ -1,348 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Created with Inkscape (http://www.inkscape.org/) -->
-
-<svg
-   xmlns:dc="http://purl.org/dc/elements/1.1/"
-   xmlns:cc="http://creativecommons.org/ns#"
-   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
-   xmlns:svg="http://www.w3.org/2000/svg"
-   xmlns="http://www.w3.org/2000/svg"
-   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
-   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
-   width="249.89841"
-   height="27.365885"
-   viewBox="0 0 249.89841 27.365885"
-   version="1.1"
-   id="svg8653"
-   inkscape:version="0.92.2 5c3e80d, 2017-08-06"
-   sodipodi:docname="primitive_topology_line_strip.svg">
-  <defs
-     id="defs8647">
-    <marker
-       inkscape:stockid="Arrow1Mend"
-       orient="auto"
-       refY="0.0"
-       refX="0.0"
-       id="marker17322"
-       style="overflow:visible;"
-       inkscape:isstock="true">
-      <path
-         id="path17320"
-         d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
-         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1"
-         transform="scale(0.4) rotate(180) translate(10,0)" />
-    </marker>
-    <inkscape:path-effect
-       effect="bspline"
-       id="path-effect17318"
-       is_visible="true"
-       weight="33.333333"
-       steps="2"
-       helper_size="0"
-       apply_no_weight="true"
-       apply_with_weight="true"
-       only_selected="false" />
-    <marker
-       inkscape:isstock="true"
-       style="overflow:visible;"
-       id="marker16960"
-       refX="0.0"
-       refY="0.0"
-       orient="auto"
-       inkscape:stockid="Arrow1Mend"
-       inkscape:collect="always">
-      <path
-         transform="scale(0.4) rotate(180) translate(10,0)"
-         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1"
-         d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
-         id="path16958" />
-    </marker>
-    <inkscape:path-effect
-       only_selected="false"
-       apply_with_weight="true"
-       apply_no_weight="true"
-       helper_size="0"
-       steps="2"
-       weight="33.333333"
-       is_visible="true"
-       id="path-effect16956"
-       effect="bspline" />
-    <marker
-       inkscape:stockid="Arrow1Mend"
-       orient="auto"
-       refY="0.0"
-       refX="0.0"
-       id="Arrow1Mend"
-       style="overflow:visible;"
-       inkscape:isstock="true"
-       inkscape:collect="always">
-      <path
-         id="path879"
-         d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
-         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1"
-         transform="scale(0.4) rotate(180) translate(10,0)" />
-    </marker>
-    <inkscape:path-effect
-       effect="bspline"
-       id="path-effect16309"
-       is_visible="true"
-       weight="33.333333"
-       steps="2"
-       helper_size="0"
-       apply_no_weight="true"
-       apply_with_weight="true"
-       only_selected="false" />
-    <inkscape:path-effect
-       effect="bspline"
-       id="path-effect16305"
-       is_visible="true"
-       weight="33.333333"
-       steps="2"
-       helper_size="0"
-       apply_no_weight="true"
-       apply_with_weight="true"
-       only_selected="false" />
-    <inkscape:path-effect
-       effect="bspline"
-       id="path-effect16301"
-       is_visible="true"
-       weight="33.333333"
-       steps="2"
-       helper_size="0"
-       apply_no_weight="true"
-       apply_with_weight="true"
-       only_selected="false" />
-    <inkscape:path-effect
-       only_selected="false"
-       apply_with_weight="true"
-       apply_no_weight="true"
-       helper_size="0"
-       steps="2"
-       weight="33.333333"
-       is_visible="true"
-       id="path-effect16297"
-       effect="bspline" />
-    <inkscape:path-effect
-       effect="bspline"
-       id="path-effect16293"
-       is_visible="true"
-       weight="33.333333"
-       steps="2"
-       helper_size="0"
-       apply_no_weight="true"
-       apply_with_weight="true"
-       only_selected="false" />
-    <marker
-       inkscape:stockid="Arrow1Mstart"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="marker6744-8-2"
-       style="overflow:visible"
-       inkscape:isstock="true">
-      <path
-         inkscape:connector-curvature="0"
-         id="path6742-9-67"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         style="fill:#fb0000;fill-opacity:1;fill-rule:evenodd;stroke:#fb0000;stroke-width:1.00000003pt;stroke-opacity:1"
-         transform="matrix(0.4,0,0,0.4,4,0)" />
-    </marker>
-    <marker
-       inkscape:stockid="Arrow1Mstart"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="marker6744-8-2-1"
-       style="overflow:visible"
-       inkscape:isstock="true">
-      <path
-         inkscape:connector-curvature="0"
-         id="path6742-9-67-6"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         style="fill:#fb0000;fill-opacity:1;fill-rule:evenodd;stroke:#fb0000;stroke-width:1.00000003pt;stroke-opacity:1"
-         transform="matrix(0.4,0,0,0.4,4,0)" />
-    </marker>
-    <marker
-       inkscape:stockid="Arrow1Mstart"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="marker6744-8-2-4"
-       style="overflow:visible"
-       inkscape:isstock="true">
-      <path
-         inkscape:connector-curvature="0"
-         id="path6742-9-67-9"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         style="fill:#fb0000;fill-opacity:1;fill-rule:evenodd;stroke:#fb0000;stroke-width:1.00000003pt;stroke-opacity:1"
-         transform="matrix(0.4,0,0,0.4,4,0)" />
-    </marker>
-  </defs>
-  <sodipodi:namedview
-     id="base"
-     pagecolor="#ffffff"
-     bordercolor="#666666"
-     borderopacity="1.0"
-     inkscape:pageopacity="0.0"
-     inkscape:pageshadow="2"
-     inkscape:zoom="5.7213473"
-     inkscape:cx="124.90623"
-     inkscape:cy="13.682937"
-     inkscape:document-units="px"
-     inkscape:current-layer="layer1"
-     showgrid="true"
-     inkscape:window-width="1920"
-     inkscape:window-height="1001"
-     inkscape:window-x="-9"
-     inkscape:window-y="-9"
-     inkscape:window-maximized="0"
-     fit-margin-top="1"
-     fit-margin-left="1"
-     fit-margin-right="1"
-     fit-margin-bottom="1"
-     inkscape:snap-grids="true"
-     inkscape:snap-text-baseline="true"
-     inkscape:snap-object-midpoints="true"
-     units="px"
-     borderlayer="false">
-    <inkscape:grid
-       type="xygrid"
-       id="grid9626"
-       originx="-314.97657"
-       originy="-495.50911" />
-  </sodipodi:namedview>
-  <metadata
-     id="metadata8650">
-    <rdf:RDF>
-      <cc:Work
-         rdf:about="">
-        <dc:format>image/svg+xml</dc:format>
-        <dc:type
-           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
-        <dc:title />
-      </cc:Work>
-    </rdf:RDF>
-  </metadata>
-  <g
-     inkscape:label="Layer 1"
-     inkscape:groupmode="layer"
-     id="layer1"
-     transform="translate(-327.51096,100.9101)">
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
-       x="332.53439"
-       y="-88.035095"
-       id="text5070-2-2-9-9-8"><tspan
-         sodipodi:role="line"
-         id="tspan5068-0-3-36-9-9"
-         x="332.53439"
-         y="-88.035095"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">0</tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
-       x="492.53439"
-       y="-88.035095"
-       id="text5070-2-2-9-9-7-7"><tspan
-         sodipodi:role="line"
-         id="tspan5068-0-3-36-9-6-6"
-         x="492.53439"
-         y="-88.035095"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">2</tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
-       x="412.53439"
-       y="-88.035095"
-       id="text5070-2-2-9-9-6-2"><tspan
-         sodipodi:role="line"
-         id="tspan5068-0-3-36-9-4-8"
-         x="412.53439"
-         y="-88.035095"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">1</tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
-       x="572.53436"
-       y="-88.035095"
-       id="text5070-2-2-9-9-77-5"><tspan
-         sodipodi:role="line"
-         id="tspan5068-0-3-36-9-5-1"
-         x="572.53436"
-         y="-88.035095"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">3</tspan></text>
-    <circle
-       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       id="path4517-0-8-5-5-0-7"
-       cx="572.53436"
-       cy="-78.035103"
-       r="3.4908931" />
-    <path
-       style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-       d="m 332.53439,-78.0351 240,-5e-6"
-       id="path2085"
-       inkscape:connector-curvature="0"
-       sodipodi:nodetypes="cc" />
-    <circle
-       style="fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       id="path4517-0-8-5-91-0-3"
-       cx="332.53439"
-       cy="-78.035103"
-       r="3.4908931" />
-    <circle
-       style="fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       id="path4517-0-8-5-91-0-3-9"
-       cx="412.53439"
-       cy="-78.035103"
-       r="3.4908931" />
-    <circle
-       style="fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       id="path4517-0-8-5-91-0-3-1"
-       cx="492.53439"
-       cy="-78.035103"
-       r="3.4908931" />
-    <path
-       style="fill:none;stroke:#ff0000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-       d="m 332.53439,-78.035105 c 3.33453,-1.667265 6.66787,-3.333935 10,-5"
-       id="path16291"
-       inkscape:connector-curvature="0"
-       inkscape:path-effect="#path-effect16293"
-       inkscape:original-d="m 332.53439,-78.035105 c 3.33433,-1.667667 6.66767,-3.334334 10,-5" />
-    <path
-       inkscape:original-d="m 412.53439,-78.035105 c 3.33433,-1.66766 6.66767,-3.33433 10,-5"
-       inkscape:path-effect="#path-effect16297"
-       inkscape:connector-curvature="0"
-       id="path16295"
-       d="m 412.53439,-78.035105 c 3.33453,-1.667264 6.66787,-3.333934 10,-5"
-       style="fill:none;stroke:#ff0000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
-    <path
-       style="fill:none;stroke:#ff0000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-       d="m 492.53439,-78.035105 c 3.33453,-1.667264 6.66787,-3.333934 10,-5"
-       id="path16299"
-       inkscape:connector-curvature="0"
-       inkscape:path-effect="#path-effect16301"
-       inkscape:original-d="m 492.53439,-78.035105 c 3.33433,-1.66766 6.66767,-3.33433 10,-5" />
-    <path
-       style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow1Mend)"
-       d="m 347.53439,-83.035105 c 16.66767,0 33.33433,0 50,0"
-       id="path16307"
-       inkscape:connector-curvature="0"
-       inkscape:path-effect="#path-effect16309"
-       inkscape:original-d="m 347.53439,-83.035105 c 16.66767,-0.001 33.33433,-0.001 50,0" />
-    <path
-       inkscape:original-d="m 427.53439,-83.035105 c 16.66767,-0.001 33.33433,-0.001 50,0"
-       inkscape:path-effect="#path-effect16956"
-       inkscape:connector-curvature="0"
-       id="path16954"
-       d="m 427.53439,-83.035105 c 16.66767,0 33.33433,0 50,0"
-       style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker16960)" />
-    <path
-       style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker17322)"
-       d="m 507.53439,-83.035105 c 16.66767,0 33.33433,0 50,0"
-       id="path17316"
-       inkscape:connector-curvature="0"
-       inkscape:path-effect="#path-effect17318"
-       inkscape:original-d="m 507.53439,-83.035105 c 16.66767,-0.001 33.33433,-0.001 50,0" />
-  </g>
-</svg>
diff --git a/registry/vulkan/images/primitive_topology_line_strip_last.svg b/registry/vulkan/images/primitive_topology_line_strip_last.svg
deleted file mode 100644
index 3675568..0000000
--- a/registry/vulkan/images/primitive_topology_line_strip_last.svg
+++ /dev/null
@@ -1,415 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Created with Inkscape (http://www.inkscape.org/) -->
-
-<svg
-   xmlns:dc="http://purl.org/dc/elements/1.1/"
-   xmlns:cc="http://creativecommons.org/ns#"
-   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
-   xmlns:svg="http://www.w3.org/2000/svg"
-   xmlns="http://www.w3.org/2000/svg"
-   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
-   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
-   width="249.89841"
-   height="27.365885"
-   viewBox="0 0 249.89841 27.365885"
-   version="1.1"
-   id="svg8653"
-   inkscape:version="0.92.2 5c3e80d, 2017-08-06"
-   sodipodi:docname="primitive_topology_line_strip_last.svg">
-  <defs
-     id="defs8647">
-    <inkscape:path-effect
-       only_selected="false"
-       apply_with_weight="true"
-       apply_no_weight="true"
-       helper_size="0"
-       steps="2"
-       weight="33.333333"
-       is_visible="true"
-       id="path-effect16289"
-       effect="bspline" />
-    <inkscape:path-effect
-       only_selected="false"
-       apply_with_weight="true"
-       apply_no_weight="true"
-       helper_size="0"
-       steps="2"
-       weight="33.333333"
-       is_visible="true"
-       id="path-effect16285"
-       effect="bspline" />
-    <inkscape:path-effect
-       effect="bspline"
-       id="path-effect16277"
-       is_visible="true"
-       weight="33.333333"
-       steps="2"
-       helper_size="0"
-       apply_no_weight="true"
-       apply_with_weight="true"
-       only_selected="false" />
-    <marker
-       inkscape:stockid="Arrow1Mend"
-       orient="auto"
-       refY="0.0"
-       refX="0.0"
-       id="marker15787"
-       style="overflow:visible;"
-       inkscape:isstock="true">
-      <path
-         id="path15785"
-         d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
-         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1"
-         transform="scale(0.4) rotate(180) translate(10,0)" />
-    </marker>
-    <inkscape:path-effect
-       effect="bspline"
-       id="path-effect15783"
-       is_visible="true"
-       weight="33.333333"
-       steps="2"
-       helper_size="0"
-       apply_no_weight="true"
-       apply_with_weight="true"
-       only_selected="false" />
-    <marker
-       inkscape:isstock="true"
-       style="overflow:visible;"
-       id="marker15347"
-       refX="0.0"
-       refY="0.0"
-       orient="auto"
-       inkscape:stockid="Arrow1Mend"
-       inkscape:collect="always">
-      <path
-         transform="scale(0.4) rotate(180) translate(10,0)"
-         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1"
-         d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
-         id="path15345" />
-    </marker>
-    <inkscape:path-effect
-       only_selected="false"
-       apply_with_weight="true"
-       apply_no_weight="true"
-       helper_size="0"
-       steps="2"
-       weight="33.333333"
-       is_visible="true"
-       id="path-effect15343"
-       effect="bspline" />
-    <inkscape:path-effect
-       effect="bspline"
-       id="path-effect15333"
-       is_visible="true"
-       weight="33.333333"
-       steps="2"
-       helper_size="0"
-       apply_no_weight="true"
-       apply_with_weight="true"
-       only_selected="false" />
-    <inkscape:path-effect
-       only_selected="false"
-       apply_with_weight="true"
-       apply_no_weight="true"
-       helper_size="0"
-       steps="2"
-       weight="33.333333"
-       is_visible="true"
-       id="path-effect15318"
-       effect="bspline" />
-    <inkscape:path-effect
-       effect="bspline"
-       id="path-effect15314"
-       is_visible="true"
-       weight="33.333333"
-       steps="2"
-       helper_size="0"
-       apply_no_weight="true"
-       apply_with_weight="true"
-       only_selected="false" />
-    <marker
-       inkscape:stockid="Arrow1Mend"
-       orient="auto"
-       refY="0.0"
-       refX="0.0"
-       id="Arrow1Mend"
-       style="overflow:visible;"
-       inkscape:isstock="true"
-       inkscape:collect="always">
-      <path
-         id="path879"
-         d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
-         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1"
-         transform="scale(0.4) rotate(180) translate(10,0)" />
-    </marker>
-    <marker
-       inkscape:stockid="Arrow1Lend"
-       orient="auto"
-       refY="0.0"
-       refX="0.0"
-       id="Arrow1Lend"
-       style="overflow:visible;"
-       inkscape:isstock="true">
-      <path
-         id="path873"
-         d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
-         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1"
-         transform="scale(0.8) rotate(180) translate(12.5,0)" />
-    </marker>
-    <inkscape:path-effect
-       effect="bspline"
-       id="path-effect15228"
-       is_visible="true"
-       weight="33.333333"
-       steps="2"
-       helper_size="0"
-       apply_no_weight="true"
-       apply_with_weight="true"
-       only_selected="false" />
-    <inkscape:path-effect
-       effect="bspline"
-       id="path-effect15118"
-       is_visible="true"
-       weight="33.333333"
-       steps="2"
-       helper_size="0"
-       apply_no_weight="true"
-       apply_with_weight="true"
-       only_selected="false" />
-    <inkscape:path-effect
-       only_selected="false"
-       apply_with_weight="true"
-       apply_no_weight="true"
-       helper_size="0"
-       steps="2"
-       weight="33.333333"
-       is_visible="true"
-       id="path-effect15114"
-       effect="bspline" />
-    <inkscape:path-effect
-       effect="bspline"
-       id="path-effect15071"
-       is_visible="true"
-       weight="33.333333"
-       steps="2"
-       helper_size="0"
-       apply_no_weight="true"
-       apply_with_weight="true"
-       only_selected="false" />
-    <marker
-       inkscape:stockid="Arrow1Mstart"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="marker6744-8-2"
-       style="overflow:visible"
-       inkscape:isstock="true">
-      <path
-         inkscape:connector-curvature="0"
-         id="path6742-9-67"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         style="fill:#fb0000;fill-opacity:1;fill-rule:evenodd;stroke:#fb0000;stroke-width:1.00000003pt;stroke-opacity:1"
-         transform="matrix(0.4,0,0,0.4,4,0)" />
-    </marker>
-    <marker
-       inkscape:stockid="Arrow1Mstart"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="marker6744-8-2-1"
-       style="overflow:visible"
-       inkscape:isstock="true">
-      <path
-         inkscape:connector-curvature="0"
-         id="path6742-9-67-6"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         style="fill:#fb0000;fill-opacity:1;fill-rule:evenodd;stroke:#fb0000;stroke-width:1.00000003pt;stroke-opacity:1"
-         transform="matrix(0.4,0,0,0.4,4,0)" />
-    </marker>
-    <marker
-       inkscape:stockid="Arrow1Mstart"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="marker6744-8-2-4"
-       style="overflow:visible"
-       inkscape:isstock="true">
-      <path
-         inkscape:connector-curvature="0"
-         id="path6742-9-67-9"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         style="fill:#fb0000;fill-opacity:1;fill-rule:evenodd;stroke:#fb0000;stroke-width:1.00000003pt;stroke-opacity:1"
-         transform="matrix(0.4,0,0,0.4,4,0)" />
-    </marker>
-  </defs>
-  <sodipodi:namedview
-     id="base"
-     pagecolor="#ffffff"
-     bordercolor="#666666"
-     borderopacity="1.0"
-     inkscape:pageopacity="0.0"
-     inkscape:pageshadow="2"
-     inkscape:zoom="5.7213473"
-     inkscape:cx="124.90623"
-     inkscape:cy="13.682936"
-     inkscape:document-units="px"
-     inkscape:current-layer="layer1"
-     showgrid="true"
-     inkscape:window-width="1920"
-     inkscape:window-height="1155"
-     inkscape:window-x="0"
-     inkscape:window-y="1"
-     inkscape:window-maximized="1"
-     fit-margin-top="1"
-     fit-margin-left="1"
-     fit-margin-right="1"
-     fit-margin-bottom="1"
-     inkscape:snap-grids="true"
-     inkscape:snap-text-baseline="true"
-     inkscape:snap-object-midpoints="true"
-     units="px"
-     borderlayer="false">
-    <inkscape:grid
-       type="xygrid"
-       id="grid9626"
-       originx="-314.97657"
-       originy="-495.50911" />
-  </sodipodi:namedview>
-  <metadata
-     id="metadata8650">
-    <rdf:RDF>
-      <cc:Work
-         rdf:about="">
-        <dc:format>image/svg+xml</dc:format>
-        <dc:type
-           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
-        <dc:title />
-      </cc:Work>
-    </rdf:RDF>
-  </metadata>
-  <g
-     inkscape:label="Layer 1"
-     inkscape:groupmode="layer"
-     id="layer1"
-     transform="translate(-327.51096,100.9101)">
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
-       x="332.53439"
-       y="-88.035095"
-       id="text5070-2-2-9-9-8"><tspan
-         sodipodi:role="line"
-         id="tspan5068-0-3-36-9-9"
-         x="332.53439"
-         y="-88.035095"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">0</tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
-       x="492.53439"
-       y="-88.035095"
-       id="text5070-2-2-9-9-7-7"><tspan
-         sodipodi:role="line"
-         id="tspan5068-0-3-36-9-6-6"
-         x="492.53439"
-         y="-88.035095"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">2</tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
-       x="412.53439"
-       y="-88.035095"
-       id="text5070-2-2-9-9-6-2"><tspan
-         sodipodi:role="line"
-         id="tspan5068-0-3-36-9-4-8"
-         x="412.53439"
-         y="-88.035095"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">1</tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
-       x="572.53436"
-       y="-88.035095"
-       id="text5070-2-2-9-9-77-5"><tspan
-         sodipodi:role="line"
-         id="tspan5068-0-3-36-9-5-1"
-         x="572.53436"
-         y="-88.035095"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">3</tspan></text>
-    <circle
-       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       id="path4517-0-8-5-5-0-7"
-       cx="332.53439"
-       cy="-78.035103"
-       r="3.4908931" />
-    <path
-       style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-       d="m 332.53439,-78.0351 240,-5e-6"
-       id="path2085"
-       inkscape:connector-curvature="0"
-       sodipodi:nodetypes="cc" />
-    <circle
-       style="fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       id="path4517-0-8-5-91-0-3"
-       cx="-412.53439"
-       cy="-78.035103"
-       r="3.4908931"
-       transform="scale(-1,1)" />
-    <circle
-       style="fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       id="path4517-0-8-5-91-0-3-9"
-       cx="-492.53439"
-       cy="-78.035103"
-       r="3.4908931"
-       transform="scale(-1,1)" />
-    <circle
-       style="fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       id="path4517-0-8-5-91-0-3-1"
-       cx="-572.53436"
-       cy="-78.03511"
-       r="3.4908931"
-       transform="scale(-1,1)" />
-    <path
-       style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow1Mend)"
-       d="m 347.53439,-83.035105 c 16.66767,0 33.33433,0 50,0"
-       id="path15226"
-       inkscape:connector-curvature="0"
-       inkscape:path-effect="#path-effect15228"
-       inkscape:original-d="m 347.53439,-83.035105 c 16.66767,-0.001 33.33433,-0.001 50,0" />
-    <path
-       inkscape:original-d="m 427.53439,-83.035105 c 16.66767,-0.001 33.33433,-0.001 50,0"
-       inkscape:path-effect="#path-effect15343"
-       inkscape:connector-curvature="0"
-       id="path15341"
-       d="m 427.53439,-83.035105 c 16.66767,0 33.33433,0 50,0"
-       style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker15347)" />
-    <path
-       style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker15787)"
-       d="m 507.53439,-83.035105 c 16.66767,0 33.33433,0 50,0"
-       id="path15781"
-       inkscape:connector-curvature="0"
-       inkscape:path-effect="#path-effect15783"
-       inkscape:original-d="m 507.53439,-83.035105 c 16.66767,-0.001 33.33433,-0.001 50,0" />
-    <path
-       style="fill:none;stroke:#fa0000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-       d="m 412.53439,-78.035105 c -3.33293,-1.666465 -6.66627,-3.333135 -10,-5"
-       id="path16275"
-       inkscape:connector-curvature="0"
-       inkscape:path-effect="#path-effect16277"
-       inkscape:original-d="m 412.53439,-78.035105 c -3.33233,-1.667667 -6.66567,-3.334334 -10,-5" />
-    <path
-       inkscape:original-d="m 492.53439,-78.035105 c -3.33233,-1.667667 -6.66567,-3.334334 -10,-5"
-       inkscape:path-effect="#path-effect16285"
-       inkscape:connector-curvature="0"
-       id="path16283"
-       d="m 492.53439,-78.035105 c -3.33293,-1.666465 -6.66627,-3.333135 -10,-5"
-       style="fill:none;stroke:#fa0000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
-    <path
-       inkscape:original-d="m 572.53439,-78.035105 c -3.33233,-1.667667 -6.66567,-3.334334 -10,-5"
-       inkscape:path-effect="#path-effect16289"
-       inkscape:connector-curvature="0"
-       id="path16287"
-       d="m 572.53439,-78.035105 c -3.33293,-1.666465 -6.66627,-3.333135 -10,-5"
-       style="fill:none;stroke:#fa0000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
-  </g>
-</svg>
diff --git a/registry/vulkan/images/primitive_topology_line_strip_with_adjacency.svg b/registry/vulkan/images/primitive_topology_line_strip_with_adjacency.svg
deleted file mode 100644
index aeecd76..0000000
--- a/registry/vulkan/images/primitive_topology_line_strip_with_adjacency.svg
+++ /dev/null
@@ -1,346 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Created with Inkscape (http://www.inkscape.org/) -->
-
-<svg
-   xmlns:dc="http://purl.org/dc/elements/1.1/"
-   xmlns:cc="http://creativecommons.org/ns#"
-   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
-   xmlns:svg="http://www.w3.org/2000/svg"
-   xmlns="http://www.w3.org/2000/svg"
-   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
-   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
-   width="409.96866"
-   height="27.365885"
-   viewBox="0 0 409.96867 27.365885"
-   version="1.1"
-   id="svg8653"
-   inkscape:version="0.92.2 5c3e80d, 2017-08-06"
-   sodipodi:docname="primitive_topology_line_strip_with_adjacency.svg">
-  <defs
-     id="defs8647">
-    <inkscape:path-effect
-       effect="bspline"
-       id="path-effect11628"
-       is_visible="true"
-       weight="33.333333"
-       steps="2"
-       helper_size="0"
-       apply_no_weight="true"
-       apply_with_weight="true"
-       only_selected="false" />
-    <inkscape:path-effect
-       effect="bspline"
-       id="path-effect11624"
-       is_visible="true"
-       weight="33.333333"
-       steps="2"
-       helper_size="0"
-       apply_no_weight="true"
-       apply_with_weight="true"
-       only_selected="false" />
-    <inkscape:path-effect
-       only_selected="false"
-       apply_with_weight="true"
-       apply_no_weight="true"
-       helper_size="0"
-       steps="2"
-       weight="33.333333"
-       is_visible="true"
-       id="path-effect11620"
-       effect="bspline" />
-    <inkscape:path-effect
-       only_selected="false"
-       apply_with_weight="true"
-       apply_no_weight="true"
-       helper_size="0"
-       steps="2"
-       weight="33.333333"
-       is_visible="true"
-       id="path-effect11616"
-       effect="bspline" />
-    <marker
-       inkscape:stockid="Arrow1Mend"
-       orient="auto"
-       refY="0.0"
-       refX="0.0"
-       id="Arrow1Mend"
-       style="overflow:visible;"
-       inkscape:isstock="true">
-      <path
-         id="path5594"
-         d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
-         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1"
-         transform="scale(0.4) rotate(180) translate(10,0)" />
-    </marker>
-    <inkscape:path-effect
-       effect="bspline"
-       id="path-effect11574"
-       is_visible="true"
-       weight="33.333333"
-       steps="2"
-       helper_size="0"
-       apply_no_weight="true"
-       apply_with_weight="true"
-       only_selected="false" />
-    <inkscape:path-effect
-       effect="bspline"
-       id="path-effect11552"
-       is_visible="true"
-       weight="33.333333"
-       steps="2"
-       helper_size="0"
-       apply_no_weight="true"
-       apply_with_weight="true"
-       only_selected="false" />
-    <marker
-       inkscape:stockid="Arrow1Mstart"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="marker6744-8-2"
-       style="overflow:visible"
-       inkscape:isstock="true">
-      <path
-         inkscape:connector-curvature="0"
-         id="path6742-9-67"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         style="fill:#fb0000;fill-opacity:1;fill-rule:evenodd;stroke:#fb0000;stroke-width:1.00000003pt;stroke-opacity:1"
-         transform="matrix(0.4,0,0,0.4,4,0)" />
-    </marker>
-    <marker
-       inkscape:stockid="Arrow1Mstart"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="marker6744-8-2-4"
-       style="overflow:visible"
-       inkscape:isstock="true">
-      <path
-         inkscape:connector-curvature="0"
-         id="path6742-9-67-1"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         style="fill:#fb0000;fill-opacity:1;fill-rule:evenodd;stroke:#fb0000;stroke-width:1.00000003pt;stroke-opacity:1"
-         transform="matrix(0.4,0,0,0.4,4,0)" />
-    </marker>
-    <marker
-       inkscape:stockid="Arrow1Mstart"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="marker6744-8-2-0"
-       style="overflow:visible"
-       inkscape:isstock="true">
-      <path
-         inkscape:connector-curvature="0"
-         id="path6742-9-67-7"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         style="fill:#fb0000;fill-opacity:1;fill-rule:evenodd;stroke:#fb0000;stroke-width:1.00000003pt;stroke-opacity:1"
-         transform="matrix(0.4,0,0,0.4,4,0)" />
-    </marker>
-  </defs>
-  <sodipodi:namedview
-     id="base"
-     pagecolor="#ffffff"
-     bordercolor="#666666"
-     borderopacity="1.0"
-     inkscape:pageopacity="0.0"
-     inkscape:pageshadow="2"
-     inkscape:zoom="3.4729165"
-     inkscape:cx="204.84761"
-     inkscape:cy="13.682936"
-     inkscape:document-units="px"
-     inkscape:current-layer="layer1"
-     showgrid="true"
-     inkscape:window-width="1920"
-     inkscape:window-height="1001"
-     inkscape:window-x="-9"
-     inkscape:window-y="-9"
-     inkscape:window-maximized="0"
-     fit-margin-top="1"
-     fit-margin-left="1"
-     fit-margin-right="1"
-     fit-margin-bottom="1"
-     inkscape:snap-grids="true"
-     inkscape:snap-text-baseline="true"
-     inkscape:snap-object-midpoints="true"
-     units="px"
-     borderlayer="false">
-    <inkscape:grid
-       type="xygrid"
-       id="grid9626"
-       originx="-314.97657"
-       originy="-495.50911" />
-  </sodipodi:namedview>
-  <metadata
-     id="metadata8650">
-    <rdf:RDF>
-      <cc:Work
-         rdf:about="">
-        <dc:format>image/svg+xml</dc:format>
-        <dc:type
-           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
-        <dc:title />
-      </cc:Work>
-    </rdf:RDF>
-  </metadata>
-  <g
-     inkscape:label="Layer 1"
-     inkscape:groupmode="layer"
-     id="layer1"
-     transform="translate(-327.51096,100.9101)">
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
-       x="332.53439"
-       y="-88.035095"
-       id="text5070-2-2-9-9-8"><tspan
-         sodipodi:role="line"
-         id="tspan5068-0-3-36-9-9"
-         x="332.53439"
-         y="-88.035095"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">0</tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
-       x="492.53439"
-       y="-88.035095"
-       id="text5070-2-2-9-9-7-7"><tspan
-         sodipodi:role="line"
-         id="tspan5068-0-3-36-9-6-6"
-         x="492.53439"
-         y="-88.035095"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">2</tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
-       x="412.53439"
-       y="-88.035095"
-       id="text5070-2-2-9-9-6-2"><tspan
-         sodipodi:role="line"
-         id="tspan5068-0-3-36-9-4-8"
-         x="412.53439"
-         y="-88.035095"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">1</tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
-       x="572.53436"
-       y="-88.035095"
-       id="text5070-2-2-9-9-77-5"><tspan
-         sodipodi:role="line"
-         id="tspan5068-0-3-36-9-5-1"
-         x="572.53436"
-         y="-88.035095"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">3</tspan></text>
-    <circle
-       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       id="path4517-0-8-5-8-8"
-       cx="332.53439"
-       cy="-78.035103"
-       r="3.4908931" />
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
-       x="652.53436"
-       y="-88.035103"
-       id="text5070-2-2-9-9-7-7-4"><tspan
-         sodipodi:role="line"
-         id="tspan5068-0-3-36-9-6-6-9"
-         x="652.53436"
-         y="-88.035103"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">4</tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
-       x="732.5343"
-       y="-88.035103"
-       id="text5070-2-2-9-9-77-5-0"><tspan
-         sodipodi:role="line"
-         id="tspan5068-0-3-36-9-5-1-5"
-         x="732.5343"
-         y="-88.035103"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">5</tspan></text>
-    <circle
-       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       id="path4517-0-8-5-2-2-2"
-       cx="652.53436"
-       cy="-78.035103"
-       r="3.4908931" />
-    <circle
-       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       id="path4517-0-8-5-5-0-7-1"
-       cx="732.5343"
-       cy="-78.035103"
-       r="3.4908931" />
-    <path
-       style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:4, 4;stroke-dashoffset:0;stroke-opacity:1"
-       d="m 332.53439,-78.035103 h 80 m 240,0 h 80"
-       id="path2083"
-       inkscape:connector-curvature="0" />
-    <path
-       style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-       d="m 412.53439,-78.035103 h 240"
-       id="path2085"
-       inkscape:connector-curvature="0" />
-    <circle
-       style="fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       id="path4517-0-8-5-91-0-3"
-       cx="412.53439"
-       cy="-78.035103"
-       r="3.4908931" />
-    <circle
-       style="fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       id="path4517-0-8-5-91-0-3-9"
-       cx="492.53439"
-       cy="-78.035103"
-       r="3.4908931" />
-    <circle
-       style="fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       id="path4517-0-8-5-91-0-3-6"
-       cx="572.53442"
-       cy="-78.035103"
-       r="3.4908931" />
-    <path
-       style="fill:none;stroke:#ff0000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-       d="m 412.53439,-78.035105 c 3.33453,-1.667265 6.66787,-3.333935 10,-5"
-       id="path11550"
-       inkscape:connector-curvature="0"
-       inkscape:path-effect="#path-effect11552"
-       inkscape:original-d="m 412.53439,-78.035105 c 3.33433,-1.667667 6.66767,-3.334334 10,-5" />
-    <path
-       style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow1Mend)"
-       d="m 427.53439,-83.035105 c 16.66767,0 33.33433,0 50,0"
-       id="path11572"
-       inkscape:connector-curvature="0"
-       inkscape:path-effect="#path-effect11574"
-       inkscape:original-d="m 427.53439,-83.035105 c 16.66767,-0.001 33.33433,-0.001 50,0" />
-    <path
-       inkscape:original-d="m 492.53439,-78.035105 c 3.33433,-1.667667 6.66767,-3.334334 10,-5"
-       inkscape:path-effect="#path-effect11616"
-       inkscape:connector-curvature="0"
-       id="path11614"
-       d="m 492.53439,-78.035105 c 3.33453,-1.667265 6.66787,-3.333935 10,-5"
-       style="fill:none;stroke:#ff0000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
-    <path
-       inkscape:original-d="m 507.53439,-83.035105 c 16.66767,-0.001 33.33433,-0.001 50,0"
-       inkscape:path-effect="#path-effect11620"
-       inkscape:connector-curvature="0"
-       id="path11618"
-       d="m 507.53439,-83.035105 c 16.66767,0 33.33433,0 50,0"
-       style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow1Mend)" />
-    <path
-       style="fill:none;stroke:#f50000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-       d="m 572.53439,-78.035105 c 3.33453,-1.667265 6.66787,-3.333935 10,-5"
-       id="path11622"
-       inkscape:connector-curvature="0"
-       inkscape:path-effect="#path-effect11624"
-       inkscape:original-d="m 572.53439,-78.035105 c 3.33433,-1.667667 6.66767,-3.334334 10,-5" />
-    <path
-       style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow1Mend)"
-       d="m 587.53439,-83.035105 c 16.66767,0 33.33433,0 50,0"
-       id="path11626"
-       inkscape:connector-curvature="0"
-       inkscape:path-effect="#path-effect11628"
-       inkscape:original-d="m 587.53439,-83.035105 c 16.66767,-0.001 33.33433,-0.001 50,0" />
-  </g>
-</svg>
diff --git a/registry/vulkan/images/primitive_topology_line_strip_with_adjacency_last.svg b/registry/vulkan/images/primitive_topology_line_strip_with_adjacency_last.svg
deleted file mode 100644
index 986b1b4..0000000
--- a/registry/vulkan/images/primitive_topology_line_strip_with_adjacency_last.svg
+++ /dev/null
@@ -1,346 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Created with Inkscape (http://www.inkscape.org/) -->
-
-<svg
-   xmlns:dc="http://purl.org/dc/elements/1.1/"
-   xmlns:cc="http://creativecommons.org/ns#"
-   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
-   xmlns:svg="http://www.w3.org/2000/svg"
-   xmlns="http://www.w3.org/2000/svg"
-   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
-   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
-   width="409.96866"
-   height="27.365885"
-   viewBox="0 0 409.96867 27.365885"
-   version="1.1"
-   id="svg8653"
-   inkscape:version="0.92.2 5c3e80d, 2017-08-06"
-   sodipodi:docname="primitive_topology_line_strip_with_adjacency_last.svg">
-  <defs
-     id="defs8647">
-    <inkscape:path-effect
-       effect="bspline"
-       id="path-effect11628"
-       is_visible="true"
-       weight="33.333333"
-       steps="2"
-       helper_size="0"
-       apply_no_weight="true"
-       apply_with_weight="true"
-       only_selected="false" />
-    <inkscape:path-effect
-       effect="bspline"
-       id="path-effect11624"
-       is_visible="true"
-       weight="33.333333"
-       steps="2"
-       helper_size="0"
-       apply_no_weight="true"
-       apply_with_weight="true"
-       only_selected="false" />
-    <inkscape:path-effect
-       only_selected="false"
-       apply_with_weight="true"
-       apply_no_weight="true"
-       helper_size="0"
-       steps="2"
-       weight="33.333333"
-       is_visible="true"
-       id="path-effect11620"
-       effect="bspline" />
-    <inkscape:path-effect
-       only_selected="false"
-       apply_with_weight="true"
-       apply_no_weight="true"
-       helper_size="0"
-       steps="2"
-       weight="33.333333"
-       is_visible="true"
-       id="path-effect11616"
-       effect="bspline" />
-    <marker
-       inkscape:stockid="Arrow1Mend"
-       orient="auto"
-       refY="0.0"
-       refX="0.0"
-       id="Arrow1Mend"
-       style="overflow:visible;"
-       inkscape:isstock="true">
-      <path
-         id="path5594"
-         d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
-         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1"
-         transform="scale(0.4) rotate(180) translate(10,0)" />
-    </marker>
-    <inkscape:path-effect
-       effect="bspline"
-       id="path-effect11574"
-       is_visible="true"
-       weight="33.333333"
-       steps="2"
-       helper_size="0"
-       apply_no_weight="true"
-       apply_with_weight="true"
-       only_selected="false" />
-    <inkscape:path-effect
-       effect="bspline"
-       id="path-effect11552"
-       is_visible="true"
-       weight="33.333333"
-       steps="2"
-       helper_size="0"
-       apply_no_weight="true"
-       apply_with_weight="true"
-       only_selected="false" />
-    <marker
-       inkscape:stockid="Arrow1Mstart"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="marker6744-8-2"
-       style="overflow:visible"
-       inkscape:isstock="true">
-      <path
-         inkscape:connector-curvature="0"
-         id="path6742-9-67"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         style="fill:#fb0000;fill-opacity:1;fill-rule:evenodd;stroke:#fb0000;stroke-width:1.00000003pt;stroke-opacity:1"
-         transform="matrix(0.4,0,0,0.4,4,0)" />
-    </marker>
-    <marker
-       inkscape:stockid="Arrow1Mstart"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="marker6744-8-2-4"
-       style="overflow:visible"
-       inkscape:isstock="true">
-      <path
-         inkscape:connector-curvature="0"
-         id="path6742-9-67-1"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         style="fill:#fb0000;fill-opacity:1;fill-rule:evenodd;stroke:#fb0000;stroke-width:1.00000003pt;stroke-opacity:1"
-         transform="matrix(0.4,0,0,0.4,4,0)" />
-    </marker>
-    <marker
-       inkscape:stockid="Arrow1Mstart"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="marker6744-8-2-0"
-       style="overflow:visible"
-       inkscape:isstock="true">
-      <path
-         inkscape:connector-curvature="0"
-         id="path6742-9-67-7"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         style="fill:#fb0000;fill-opacity:1;fill-rule:evenodd;stroke:#fb0000;stroke-width:1.00000003pt;stroke-opacity:1"
-         transform="matrix(0.4,0,0,0.4,4,0)" />
-    </marker>
-  </defs>
-  <sodipodi:namedview
-     id="base"
-     pagecolor="#ffffff"
-     bordercolor="#666666"
-     borderopacity="1.0"
-     inkscape:pageopacity="0.0"
-     inkscape:pageshadow="2"
-     inkscape:zoom="3.4729165"
-     inkscape:cx="204.84761"
-     inkscape:cy="13.682937"
-     inkscape:document-units="px"
-     inkscape:current-layer="layer1"
-     showgrid="true"
-     inkscape:window-width="1920"
-     inkscape:window-height="1155"
-     inkscape:window-x="0"
-     inkscape:window-y="1"
-     inkscape:window-maximized="1"
-     fit-margin-top="1"
-     fit-margin-left="1"
-     fit-margin-right="1"
-     fit-margin-bottom="1"
-     inkscape:snap-grids="true"
-     inkscape:snap-text-baseline="true"
-     inkscape:snap-object-midpoints="true"
-     units="px"
-     borderlayer="false">
-    <inkscape:grid
-       type="xygrid"
-       id="grid9626"
-       originx="-314.97657"
-       originy="-495.50911" />
-  </sodipodi:namedview>
-  <metadata
-     id="metadata8650">
-    <rdf:RDF>
-      <cc:Work
-         rdf:about="">
-        <dc:format>image/svg+xml</dc:format>
-        <dc:type
-           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
-        <dc:title />
-      </cc:Work>
-    </rdf:RDF>
-  </metadata>
-  <g
-     inkscape:label="Layer 1"
-     inkscape:groupmode="layer"
-     id="layer1"
-     transform="translate(-327.51096,100.9101)">
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
-       x="332.53439"
-       y="-88.035095"
-       id="text5070-2-2-9-9-8"><tspan
-         sodipodi:role="line"
-         id="tspan5068-0-3-36-9-9"
-         x="332.53439"
-         y="-88.035095"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">0</tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
-       x="492.53439"
-       y="-88.035095"
-       id="text5070-2-2-9-9-7-7"><tspan
-         sodipodi:role="line"
-         id="tspan5068-0-3-36-9-6-6"
-         x="492.53439"
-         y="-88.035095"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">2</tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
-       x="412.53439"
-       y="-88.035095"
-       id="text5070-2-2-9-9-6-2"><tspan
-         sodipodi:role="line"
-         id="tspan5068-0-3-36-9-4-8"
-         x="412.53439"
-         y="-88.035095"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">1</tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
-       x="572.53436"
-       y="-88.035095"
-       id="text5070-2-2-9-9-77-5"><tspan
-         sodipodi:role="line"
-         id="tspan5068-0-3-36-9-5-1"
-         x="572.53436"
-         y="-88.035095"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">3</tspan></text>
-    <circle
-       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       id="path4517-0-8-5-8-8"
-       cx="332.53439"
-       cy="-78.035103"
-       r="3.4908931" />
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
-       x="652.53436"
-       y="-88.035103"
-       id="text5070-2-2-9-9-7-7-4"><tspan
-         sodipodi:role="line"
-         id="tspan5068-0-3-36-9-6-6-9"
-         x="652.53436"
-         y="-88.035103"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">4</tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
-       x="732.5343"
-       y="-88.035103"
-       id="text5070-2-2-9-9-77-5-0"><tspan
-         sodipodi:role="line"
-         id="tspan5068-0-3-36-9-5-1-5"
-         x="732.5343"
-         y="-88.035103"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">5</tspan></text>
-    <circle
-       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       id="path4517-0-8-5-5-0-7-1"
-       cx="732.5343"
-       cy="-78.035103"
-       r="3.4908931" />
-    <path
-       style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:4, 4;stroke-dashoffset:0;stroke-opacity:1"
-       d="m 332.53439,-78.035103 h 80 m 240,0 h 80"
-       id="path2083"
-       inkscape:connector-curvature="0" />
-    <path
-       style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-       d="m 412.53439,-78.035103 h 240"
-       id="path2085"
-       inkscape:connector-curvature="0" />
-    <circle
-       style="fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       id="path4517-0-8-5-2-2-2"
-       cx="652.53436"
-       cy="-78.035103"
-       r="3.4908931" />
-    <circle
-       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       id="path4517-0-8-5-91-0-3"
-       cx="412.53439"
-       cy="-78.035103"
-       r="3.4908931" />
-    <circle
-       style="fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       id="path4517-0-8-5-91-0-3-9"
-       cx="492.53439"
-       cy="-78.035103"
-       r="3.4908931" />
-    <circle
-       style="fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       id="path4517-0-8-5-91-0-3-6"
-       cx="572.53442"
-       cy="-78.035103"
-       r="3.4908931" />
-    <path
-       style="fill:none;stroke:#ff0000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-       d="m 492.53439,-78.035105 c -3.33453,-1.667265 -6.66787,-3.333935 -10,-5"
-       id="path11550"
-       inkscape:connector-curvature="0"
-       inkscape:path-effect="#path-effect11552"
-       inkscape:original-d="m 492.53439,-78.035105 c -3.33433,-1.667667 -6.66767,-3.334334 -10,-5" />
-    <path
-       style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow1Mend)"
-       d="m 427.53439,-83.035105 c 16.66767,0 33.33433,0 50,0"
-       id="path11572"
-       inkscape:connector-curvature="0"
-       inkscape:path-effect="#path-effect11574"
-       inkscape:original-d="m 427.53439,-83.035105 c 16.66767,-0.001 33.33433,-0.001 50,0" />
-    <path
-       inkscape:original-d="m 572.53439,-78.035105 c -3.33433,-1.667667 -6.66767,-3.334334 -10,-5"
-       inkscape:path-effect="#path-effect11616"
-       inkscape:connector-curvature="0"
-       id="path11614"
-       d="m 572.53439,-78.035105 c -3.33453,-1.667265 -6.66787,-3.333935 -10,-5"
-       style="fill:none;stroke:#ff0000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
-    <path
-       inkscape:original-d="m 507.53439,-83.035105 c 16.66767,-0.001 33.33433,-0.001 50,0"
-       inkscape:path-effect="#path-effect11620"
-       inkscape:connector-curvature="0"
-       id="path11618"
-       d="m 507.53439,-83.035105 c 16.66767,0 33.33433,0 50,0"
-       style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow1Mend)" />
-    <path
-       style="fill:none;stroke:#ff0000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-       d="m 652.53439,-78.035105 c -3.33453,-1.667265 -6.66787,-3.333935 -10,-5"
-       id="path11622"
-       inkscape:connector-curvature="0"
-       inkscape:path-effect="#path-effect11624"
-       inkscape:original-d="m 652.53439,-78.035105 c -3.33433,-1.667667 -6.66767,-3.334334 -10,-5" />
-    <path
-       style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow1Mend)"
-       d="m 587.53439,-83.035105 c 16.66767,0 33.33433,0 50,0"
-       id="path11626"
-       inkscape:connector-curvature="0"
-       inkscape:path-effect="#path-effect11628"
-       inkscape:original-d="m 587.53439,-83.035105 c 16.66767,-0.001 33.33433,-0.001 50,0" />
-  </g>
-</svg>
diff --git a/registry/vulkan/images/primitive_topology_point_list.svg b/registry/vulkan/images/primitive_topology_point_list.svg
deleted file mode 100644
index 44c1371..0000000
--- a/registry/vulkan/images/primitive_topology_point_list.svg
+++ /dev/null
@@ -1,877 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Created with Inkscape (http://www.inkscape.org/) -->
-
-<svg
-   xmlns:dc="http://purl.org/dc/elements/1.1/"
-   xmlns:cc="http://creativecommons.org/ns#"
-   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
-   xmlns:svg="http://www.w3.org/2000/svg"
-   xmlns="http://www.w3.org/2000/svg"
-   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
-   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
-   width="200.14062"
-   height="147.16275"
-   viewBox="0 0 200.14063 147.16275"
-   version="1.1"
-   id="svg8653"
-   inkscape:version="0.92.4 (5da689c313, 2019-01-14)"
-   sodipodi:docname="primitive_topology_point_list.svg">
-  <defs
-     id="defs8647">
-    <marker
-       inkscape:stockid="Arrow1Mstart"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="marker6744"
-       style="overflow:visible"
-       inkscape:isstock="true">
-      <path
-         id="path6742"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         transform="matrix(0.4,0,0,0.4,4,0)"
-         inkscape:connector-curvature="0" />
-    </marker>
-    <marker
-       inkscape:stockid="Arrow1Mstart"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="marker6464"
-       style="overflow:visible"
-       inkscape:isstock="true">
-      <path
-         id="path6462"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         transform="matrix(0.4,0,0,0.4,4,0)"
-         inkscape:connector-curvature="0" />
-    </marker>
-    <marker
-       inkscape:isstock="true"
-       style="overflow:visible"
-       id="marker3039"
-       refX="0"
-       refY="0"
-       orient="auto"
-       inkscape:stockid="Arrow1Mend">
-      <path
-         transform="matrix(-0.4,0,0,-0.4,-4,0)"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         id="path3037"
-         inkscape:connector-curvature="0" />
-    </marker>
-    <marker
-       inkscape:isstock="true"
-       style="overflow:visible"
-       id="marker2891"
-       refX="0"
-       refY="0"
-       orient="auto"
-       inkscape:stockid="Arrow1Mend">
-      <path
-         transform="matrix(-0.4,0,0,-0.4,-4,0)"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         id="path2889"
-         inkscape:connector-curvature="0" />
-    </marker>
-    <marker
-       inkscape:isstock="true"
-       style="overflow:visible"
-       id="marker2335"
-       refX="0"
-       refY="0"
-       orient="auto"
-       inkscape:stockid="Arrow1Mstart">
-      <path
-         transform="matrix(0.4,0,0,0.4,4,0)"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         id="path2333"
-         inkscape:connector-curvature="0" />
-    </marker>
-    <marker
-       inkscape:stockid="Torso"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="Torso"
-       style="overflow:visible"
-       inkscape:isstock="true">
-      <g
-         id="g1107"
-         transform="scale(0.7)"
-         style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-opacity:1">
-        <path
-           id="path1093"
-           d="m -4.7792281,-3.239542 c 2.350374,0.3659393 5.30026732,1.9375477 5.03715532,3.62748546 C -0.00518779,2.0778819 -2.2126741,2.6176539 -4.5630471,2.2517169 -6.9134221,1.8857769 -8.521035,0.75201414 -8.257922,-0.93792336 -7.994809,-2.6278615 -7.1296041,-3.6054813 -4.7792281,-3.239542 Z"
-           style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.25;stroke-opacity:1"
-           inkscape:connector-curvature="0" />
-        <path
-           id="path1095"
-           d="M 4.4598789,0.08866574 C -2.5564571,-4.378332 5.2248769,-3.9061806 -0.84829578,-8.7197331"
-           style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-           inkscape:connector-curvature="0" />
-        <path
-           id="path1097"
-           d="M 4.9298719,0.05752074 C -1.3872731,1.7494689 1.8027579,5.4782079 -4.9448731,7.5462725"
-           style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-           inkscape:connector-curvature="0" />
-        <rect
-           id="rect1099"
-           transform="matrix(0.527536,-0.849533,0.887668,0.460484,0,0)"
-           y="-1.7408575"
-           x="-10.391706"
-           height="2.7608147"
-           width="2.6366582"
-           style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1" />
-        <rect
-           id="rect1101"
-           transform="matrix(0.671205,-0.741272,0.790802,0.612072,0,0)"
-           y="-7.9629307"
-           x="4.9587269"
-           height="2.8614161"
-           width="2.7327356"
-           style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1" />
-        <path
-           id="path1103"
-           transform="matrix(0,-1.109517,1.109517,0,25.96648,19.71619)"
-           d="m 16.779951,-28.685045 a 0.60731727,0.60731727 0 1 0 -1.214634,0 0.60731727,0.60731727 0 1 0 1.214634,0 z"
-           style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-           inkscape:connector-curvature="0" />
-        <path
-           id="path1105"
-           transform="matrix(0,-1.109517,1.109517,0,26.8245,16.99126)"
-           d="m 16.779951,-28.685045 a 0.60731727,0.60731727 0 1 0 -1.214634,0 0.60731727,0.60731727 0 1 0 1.214634,0 z"
-           style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-           inkscape:connector-curvature="0" />
-      </g>
-    </marker>
-    <marker
-       inkscape:stockid="Tail"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="Tail"
-       style="overflow:visible"
-       inkscape:isstock="true">
-      <g
-         id="g929"
-         transform="scale(-1.2)"
-         style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-opacity:1">
-        <path
-           id="path917"
-           d="M -3.8048674,-3.9585227 0.54352094,0"
-           style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.80000001;stroke-linecap:round;stroke-opacity:1"
-           inkscape:connector-curvature="0" />
-        <path
-           id="path919"
-           d="M -1.2866832,-3.9585227 3.0617053,0"
-           style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.80000001;stroke-linecap:round;stroke-opacity:1"
-           inkscape:connector-curvature="0" />
-        <path
-           id="path921"
-           d="M 1.3053582,-3.9585227 5.6537466,0"
-           style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.80000001;stroke-linecap:round;stroke-opacity:1"
-           inkscape:connector-curvature="0" />
-        <path
-           id="path923"
-           d="M -3.8048674,4.1775838 0.54352094,0.21974226"
-           style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.80000001;stroke-linecap:round;stroke-opacity:1"
-           inkscape:connector-curvature="0" />
-        <path
-           id="path925"
-           d="M -1.2866832,4.1775838 3.0617053,0.21974226"
-           style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.80000001;stroke-linecap:round;stroke-opacity:1"
-           inkscape:connector-curvature="0" />
-        <path
-           id="path927"
-           d="M 1.3053582,4.1775838 5.6537466,0.21974226"
-           style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.80000001;stroke-linecap:round;stroke-opacity:1"
-           inkscape:connector-curvature="0" />
-      </g>
-    </marker>
-    <marker
-       inkscape:stockid="Legs"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="Legs"
-       style="overflow:visible"
-       inkscape:isstock="true">
-      <g
-         id="g1090"
-         transform="scale(-0.7)"
-         style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-opacity:1">
-        <g
-           id="g1084"
-           transform="matrix(0,-1,-1,0,20.70862,21.31391)"
-           style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-opacity:1">
-          <path
-             id="path1080"
-             d="m 21.22125,20.67536 c -6.910151,4.721157 -2.454525,6.606844 -5.841071,13.443235"
-             style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-             inkscape:connector-curvature="0" />
-          <path
-             id="path1082"
-             d="m 21.39811,20.54812 c -1.360509,8.347524 3.536072,8.76994 4.505041,13.824958"
-             style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-             inkscape:connector-curvature="0" />
-        </g>
-        <path
-           id="path1086"
-           d="m -14.09007,-6.7318716 -0.922168,4.043383 3.962751,-1.22307 z"
-           style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-           inkscape:connector-curvature="0" />
-        <path
-           id="path1088"
-           d="m -15.215679,4.5567534 1.874127,3.699613 2.266874,-3.472855 z"
-           style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-           inkscape:connector-curvature="0" />
-      </g>
-    </marker>
-    <marker
-       inkscape:stockid="Scissors"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="Scissors"
-       style="overflow:visible"
-       inkscape:isstock="true">
-      <path
-         id="schere"
-         d="M 9.0898857,-3.6061018 C 8.1198849,-4.7769976 6.3697607,-4.7358294 5.0623558,-4.2327734 l -8.2124046,3.0779029 c -2.3882933,-1.3067135 -4.7482873,-0.9325372 -4.7482873,-1.5687873 0,-0.4973164 0.4566662,-0.3883222 0.3883068,-1.6831941 -0.065635,-1.2432767 -1.3635771,-2.1630796 -2.5903987,-2.0816435 -1.227271,-0.00735 -2.499439,0.9331613 -2.510341,2.2300611 -0.09143,1.3063864 1.007209,2.5196896 2.306764,2.6052316 1.5223406,0.2266616 4.218258,-0.6955566 5.482945,1.57086006 -0.9422847,1.73825774 -2.6140244,1.74307674 -4.1255107,1.65607034 -1.2548743,-0.072235 -2.7620933,0.2873979 -3.3606483,1.5208605 -0.578367,1.1820862 -0.0112,2.8646022 1.316749,3.226412 1.3401912,0.4918277 3.1806689,-0.129711 3.4993722,-1.6707242 0.2456585,-1.187823 -0.5953659,-1.7459574 -0.2725074,-2.1771537 0.2436135,-0.32536 1.7907806,-0.1368452 4.5471053,-1.3748244 L 5.6763468,4.2330688 C 6.8000164,4.5467672 8.1730685,4.5362646 9.1684433,3.4313614 l -9.22008423,-3.48508362 z m -18.3078016,-1.900504 c 1.294559,0.7227998 1.1888392,2.6835702 -0.1564272,3.0632889 -1.2165179,0.423661 -2.7710269,-0.7589694 -2.3831779,-2.0774648 0.227148,-1.0818519 1.653387,-1.480632 2.5396051,-0.9858241 z m 0.056264,8.0173649 c 1.3508301,0.4988648 1.1214429,2.7844356 -0.2522207,3.091609 -0.9110594,0.3163391 -2.2135494,-0.1387976 -2.3056964,-1.2121394 -0.177609,-1.305055 1.356085,-2.4841482 2.5579171,-1.8794696 z"
-         style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-opacity:1"
-         inkscape:connector-curvature="0" />
-    </marker>
-    <marker
-       inkscape:stockid="TriangleInS"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="TriangleInS"
-       style="overflow:visible"
-       inkscape:isstock="true">
-      <path
-         id="path1020"
-         d="M 5.77,0 -2.88,5 V -5 Z"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         transform="scale(-0.2)"
-         inkscape:connector-curvature="0" />
-    </marker>
-    <marker
-       inkscape:stockid="DiamondS"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="DiamondS"
-       style="overflow:visible"
-       inkscape:isstock="true">
-      <path
-         id="path966"
-         d="M 0,-7.0710768 -7.0710894,0 0,7.0710589 7.0710462,0 Z"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         transform="scale(0.2)"
-         inkscape:connector-curvature="0" />
-    </marker>
-    <marker
-       inkscape:stockid="Arrow2Send"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="Arrow2Send"
-       style="overflow:visible"
-       inkscape:isstock="true">
-      <path
-         id="path914"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
-         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
-         transform="matrix(-0.3,0,0,-0.3,0.69,0)"
-         inkscape:connector-curvature="0" />
-    </marker>
-    <marker
-       inkscape:stockid="Arrow2Mend"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="Arrow2Mend"
-       style="overflow:visible"
-       inkscape:isstock="true">
-      <path
-         id="path908"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
-         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
-         transform="scale(-0.6)"
-         inkscape:connector-curvature="0" />
-    </marker>
-    <marker
-       inkscape:stockid="TriangleInM"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="TriangleInM"
-       style="overflow:visible"
-       inkscape:isstock="true">
-      <path
-         id="path1017"
-         d="M 5.77,0 -2.88,5 V -5 Z"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         transform="scale(-0.4)"
-         inkscape:connector-curvature="0" />
-    </marker>
-    <marker
-       inkscape:stockid="Arrow1Lend"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="Arrow1Lend"
-       style="overflow:visible"
-       inkscape:isstock="true">
-      <path
-         id="path884"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         transform="matrix(-0.8,0,0,-0.8,-10,0)"
-         inkscape:connector-curvature="0" />
-    </marker>
-    <marker
-       inkscape:isstock="true"
-       style="overflow:visible"
-       id="marker3039-4"
-       refX="0"
-       refY="0"
-       orient="auto"
-       inkscape:stockid="Arrow1Mend">
-      <path
-         inkscape:connector-curvature="0"
-         transform="matrix(-0.4,0,0,-0.4,-4,0)"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         id="path3037-9" />
-    </marker>
-    <marker
-       inkscape:isstock="true"
-       style="overflow:visible"
-       id="marker2891-6"
-       refX="0"
-       refY="0"
-       orient="auto"
-       inkscape:stockid="Arrow1Mend">
-      <path
-         inkscape:connector-curvature="0"
-         transform="matrix(-0.4,0,0,-0.4,-4,0)"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         id="path2889-8" />
-    </marker>
-    <marker
-       inkscape:isstock="true"
-       style="overflow:visible"
-       id="marker3039-0"
-       refX="0"
-       refY="0"
-       orient="auto"
-       inkscape:stockid="Arrow1Mend">
-      <path
-         inkscape:connector-curvature="0"
-         transform="matrix(-0.4,0,0,-0.4,-4,0)"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         id="path3037-5" />
-    </marker>
-    <marker
-       inkscape:isstock="true"
-       style="overflow:visible"
-       id="marker2891-7"
-       refX="0"
-       refY="0"
-       orient="auto"
-       inkscape:stockid="Arrow1Mend">
-      <path
-         inkscape:connector-curvature="0"
-         transform="matrix(-0.4,0,0,-0.4,-4,0)"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         id="path2889-5" />
-    </marker>
-    <marker
-       inkscape:isstock="true"
-       style="overflow:visible"
-       id="marker3039-9"
-       refX="0"
-       refY="0"
-       orient="auto"
-       inkscape:stockid="Arrow1Mend">
-      <path
-         inkscape:connector-curvature="0"
-         transform="matrix(-0.4,0,0,-0.4,-4,0)"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         id="path3037-2" />
-    </marker>
-    <marker
-       inkscape:isstock="true"
-       style="overflow:visible"
-       id="marker2891-0"
-       refX="0"
-       refY="0"
-       orient="auto"
-       inkscape:stockid="Arrow1Mend">
-      <path
-         inkscape:connector-curvature="0"
-         transform="matrix(-0.4,0,0,-0.4,-4,0)"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         id="path2889-4" />
-    </marker>
-    <marker
-       inkscape:isstock="true"
-       style="overflow:visible"
-       id="marker3039-1"
-       refX="0"
-       refY="0"
-       orient="auto"
-       inkscape:stockid="Arrow1Mend">
-      <path
-         inkscape:connector-curvature="0"
-         transform="matrix(-0.4,0,0,-0.4,-4,0)"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         id="path3037-99" />
-    </marker>
-    <marker
-       inkscape:isstock="true"
-       style="overflow:visible"
-       id="marker2891-75"
-       refX="0"
-       refY="0"
-       orient="auto"
-       inkscape:stockid="Arrow1Mend">
-      <path
-         inkscape:connector-curvature="0"
-         transform="matrix(-0.4,0,0,-0.4,-4,0)"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         id="path2889-3" />
-    </marker>
-    <marker
-       inkscape:isstock="true"
-       style="overflow:visible"
-       id="marker3039-6"
-       refX="0"
-       refY="0"
-       orient="auto"
-       inkscape:stockid="Arrow1Mend">
-      <path
-         inkscape:connector-curvature="0"
-         transform="matrix(-0.4,0,0,-0.4,-4,0)"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         id="path3037-0" />
-    </marker>
-    <marker
-       inkscape:isstock="true"
-       style="overflow:visible"
-       id="marker2891-8"
-       refX="0"
-       refY="0"
-       orient="auto"
-       inkscape:stockid="Arrow1Mend">
-      <path
-         inkscape:connector-curvature="0"
-         transform="matrix(-0.4,0,0,-0.4,-4,0)"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         id="path2889-7" />
-    </marker>
-    <marker
-       inkscape:isstock="true"
-       style="overflow:visible"
-       id="marker3039-6-3"
-       refX="0"
-       refY="0"
-       orient="auto"
-       inkscape:stockid="Arrow1Mend">
-      <path
-         inkscape:connector-curvature="0"
-         transform="matrix(-0.4,0,0,-0.4,-4,0)"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         id="path3037-0-2" />
-    </marker>
-    <marker
-       inkscape:isstock="true"
-       style="overflow:visible"
-       id="marker2891-8-3"
-       refX="0"
-       refY="0"
-       orient="auto"
-       inkscape:stockid="Arrow1Mend">
-      <path
-         inkscape:connector-curvature="0"
-         transform="matrix(-0.4,0,0,-0.4,-4,0)"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         id="path2889-7-1" />
-    </marker>
-    <marker
-       inkscape:isstock="true"
-       style="overflow:visible"
-       id="marker3039-1-9"
-       refX="0"
-       refY="0"
-       orient="auto"
-       inkscape:stockid="Arrow1Mend">
-      <path
-         inkscape:connector-curvature="0"
-         transform="matrix(-0.4,0,0,-0.4,-4,0)"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         id="path3037-99-5" />
-    </marker>
-    <marker
-       inkscape:isstock="true"
-       style="overflow:visible"
-       id="marker2891-75-9"
-       refX="0"
-       refY="0"
-       orient="auto"
-       inkscape:stockid="Arrow1Mend">
-      <path
-         inkscape:connector-curvature="0"
-         transform="matrix(-0.4,0,0,-0.4,-4,0)"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         id="path2889-3-1" />
-    </marker>
-    <marker
-       inkscape:isstock="true"
-       style="overflow:visible"
-       id="marker3039-2"
-       refX="0"
-       refY="0"
-       orient="auto"
-       inkscape:stockid="Arrow1Mend">
-      <path
-         inkscape:connector-curvature="0"
-         transform="matrix(-0.4,0,0,-0.4,-4,0)"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         id="path3037-53" />
-    </marker>
-    <marker
-       inkscape:isstock="true"
-       style="overflow:visible"
-       id="marker2891-5"
-       refX="0"
-       refY="0"
-       orient="auto"
-       inkscape:stockid="Arrow1Mend">
-      <path
-         inkscape:connector-curvature="0"
-         transform="matrix(-0.4,0,0,-0.4,-4,0)"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         id="path2889-6" />
-    </marker>
-    <marker
-       inkscape:stockid="Arrow1Mstart"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="marker6464-8"
-       style="overflow:visible"
-       inkscape:isstock="true">
-      <path
-         inkscape:connector-curvature="0"
-         id="path6462-2"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         transform="matrix(0.4,0,0,0.4,4,0)" />
-    </marker>
-    <marker
-       inkscape:stockid="Arrow1Mstart"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="marker6744-8"
-       style="overflow:visible"
-       inkscape:isstock="true">
-      <path
-         inkscape:connector-curvature="0"
-         id="path6742-9"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         transform="matrix(0.4,0,0,0.4,4,0)" />
-    </marker>
-    <marker
-       inkscape:stockid="Arrow1Mstart"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="marker6464-0"
-       style="overflow:visible"
-       inkscape:isstock="true">
-      <path
-         inkscape:connector-curvature="0"
-         id="path6462-5"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         transform="matrix(0.4,0,0,0.4,4,0)" />
-    </marker>
-    <marker
-       inkscape:stockid="Arrow1Mstart"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="marker6744-88"
-       style="overflow:visible"
-       inkscape:isstock="true">
-      <path
-         inkscape:connector-curvature="0"
-         id="path6742-5"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         transform="matrix(0.4,0,0,0.4,4,0)" />
-    </marker>
-    <marker
-       inkscape:isstock="true"
-       style="overflow:visible"
-       id="marker3039-1-9-3"
-       refX="0"
-       refY="0"
-       orient="auto"
-       inkscape:stockid="Arrow1Mend">
-      <path
-         inkscape:connector-curvature="0"
-         transform="matrix(-0.4,0,0,-0.4,-4,0)"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         id="path3037-99-5-6" />
-    </marker>
-    <marker
-       inkscape:isstock="true"
-       style="overflow:visible"
-       id="marker2891-75-9-2"
-       refX="0"
-       refY="0"
-       orient="auto"
-       inkscape:stockid="Arrow1Mend">
-      <path
-         inkscape:connector-curvature="0"
-         transform="matrix(-0.4,0,0,-0.4,-4,0)"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         id="path2889-3-1-7" />
-    </marker>
-    <marker
-       inkscape:isstock="true"
-       style="overflow:visible"
-       id="marker3039-2-4"
-       refX="0"
-       refY="0"
-       orient="auto"
-       inkscape:stockid="Arrow1Mend">
-      <path
-         inkscape:connector-curvature="0"
-         transform="matrix(-0.4,0,0,-0.4,-4,0)"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         id="path3037-53-9" />
-    </marker>
-    <marker
-       inkscape:isstock="true"
-       style="overflow:visible"
-       id="marker2891-5-1"
-       refX="0"
-       refY="0"
-       orient="auto"
-       inkscape:stockid="Arrow1Mend">
-      <path
-         inkscape:connector-curvature="0"
-         transform="matrix(-0.4,0,0,-0.4,-4,0)"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         id="path2889-6-6" />
-    </marker>
-    <marker
-       inkscape:isstock="true"
-       style="overflow:visible"
-       id="marker3039-1-9-3-5"
-       refX="0"
-       refY="0"
-       orient="auto"
-       inkscape:stockid="Arrow1Mend">
-      <path
-         inkscape:connector-curvature="0"
-         transform="matrix(-0.4,0,0,-0.4,-4,0)"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         id="path3037-99-5-6-2" />
-    </marker>
-    <marker
-       inkscape:isstock="true"
-       style="overflow:visible"
-       id="marker2891-75-9-2-5"
-       refX="0"
-       refY="0"
-       orient="auto"
-       inkscape:stockid="Arrow1Mend">
-      <path
-         inkscape:connector-curvature="0"
-         transform="matrix(-0.4,0,0,-0.4,-4,0)"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         id="path2889-3-1-7-1" />
-    </marker>
-  </defs>
-  <sodipodi:namedview
-     id="base"
-     pagecolor="#ffffff"
-     bordercolor="#666666"
-     borderopacity="1.0"
-     inkscape:pageopacity="0.0"
-     inkscape:pageshadow="2"
-     inkscape:zoom="2.8284272"
-     inkscape:cx="118.95274"
-     inkscape:cy="44.306863"
-     inkscape:document-units="px"
-     inkscape:current-layer="layer1"
-     showgrid="true"
-     inkscape:window-width="1920"
-     inkscape:window-height="1001"
-     inkscape:window-x="-9"
-     inkscape:window-y="-9"
-     inkscape:window-maximized="0"
-     fit-margin-top="1"
-     fit-margin-left="1"
-     fit-margin-right="1"
-     fit-margin-bottom="1"
-     inkscape:snap-grids="true"
-     inkscape:snap-text-baseline="true"
-     inkscape:snap-object-midpoints="true"
-     units="px"
-     borderlayer="false">
-    <inkscape:grid
-       type="xygrid"
-       id="grid9626"
-       originx="64.835941"
-       originy="-455.50911" />
-  </sodipodi:namedview>
-  <metadata
-     id="metadata8650">
-    <rdf:RDF>
-      <cc:Work
-         rdf:about="">
-        <dc:format>image/svg+xml</dc:format>
-        <dc:type
-           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
-        <dc:title />
-      </cc:Work>
-    </rdf:RDF>
-  </metadata>
-  <g
-     inkscape:label="Layer 1"
-     inkscape:groupmode="layer"
-     id="layer1"
-     transform="translate(52.301544,180.70697)">
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
-       x="12.534395"
-       y="-108.03511"
-       id="text5070-2-2-9-9"><tspan
-         sodipodi:role="line"
-         id="tspan5068-0-3-36-9"
-         x="12.534395"
-         y="-108.03511"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">0</tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
-       x="142.53439"
-       y="-118.03511"
-       id="text5070-2-2-9-9-1"><tspan
-         sodipodi:role="line"
-         id="tspan5068-0-3-36-9-3"
-         x="142.53439"
-         y="-118.03511"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">4</tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
-       x="-47.465607"
-       y="-148.03511"
-       id="text5070-2-2-9-9-7"><tspan
-         sodipodi:role="line"
-         id="tspan5068-0-3-36-9-6"
-         x="-47.465607"
-         y="-148.03511"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">2</tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
-       x="52.534393"
-       y="-168.0351"
-       id="text5070-2-2-9-9-6"><tspan
-         sodipodi:role="line"
-         id="tspan5068-0-3-36-9-4"
-         x="52.534393"
-         y="-168.0351"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">1</tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
-       x="92.534393"
-       y="-48.03511"
-       id="text5070-2-2-9-9-77"><tspan
-         sodipodi:role="line"
-         id="tspan5068-0-3-36-9-5"
-         x="92.534393"
-         y="-48.03511"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">3</tspan></text>
-    <circle
-       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       id="path4517-0-8-5-8"
-       cx="142.53439"
-       cy="-108.03511"
-       r="3.4908931" />
-    <circle
-       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       id="path4517-0-8-5-91"
-       cx="52.534393"
-       cy="-158.03511"
-       r="3.4908931" />
-    <circle
-       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       id="path4517-0-8-5-2"
-       cx="92.534393"
-       cy="-38.03511"
-       r="3.4908931" />
-    <circle
-       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       id="path4517-0-8-5-25"
-       cx="-47.465607"
-       cy="-138.03511"
-       r="3.4908931" />
-    <circle
-       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       id="path4517-0-8-5-5"
-       cx="12.534393"
-       cy="-98.03511"
-       r="3.4908931" />
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-weight:normal;font-size:40px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none"
-       x="572.53442"
-       y="-168.03511"
-       id="text11340"><tspan
-         sodipodi:role="line"
-         id="tspan11338"
-         x="572.53442"
-         y="-131.5419" /></text>
-  </g>
-</svg>
diff --git a/registry/vulkan/images/primitive_topology_triangle_fan.svg b/registry/vulkan/images/primitive_topology_triangle_fan.svg
deleted file mode 100644
index 79315f8..0000000
--- a/registry/vulkan/images/primitive_topology_triangle_fan.svg
+++ /dev/null
@@ -1,472 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Created with Inkscape (http://www.inkscape.org/) -->
-
-<svg
-   xmlns:dc="http://purl.org/dc/elements/1.1/"
-   xmlns:cc="http://creativecommons.org/ns#"
-   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
-   xmlns:svg="http://www.w3.org/2000/svg"
-   xmlns="http://www.w3.org/2000/svg"
-   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
-   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
-   width="169.79558"
-   height="104.11718"
-   viewBox="0 0 169.79558 104.11718"
-   version="1.1"
-   id="svg8653"
-   inkscape:version="0.92.2 5c3e80d, 2017-08-06"
-   sodipodi:docname="primitive_topology_triangle_fan.svg">
-  <defs
-     id="defs8647">
-    <inkscape:path-effect
-       effect="bspline"
-       id="path-effect17027"
-       is_visible="true"
-       weight="33.333333"
-       steps="2"
-       helper_size="0"
-       apply_no_weight="true"
-       apply_with_weight="true"
-       only_selected="false" />
-    <inkscape:path-effect
-       only_selected="false"
-       apply_with_weight="true"
-       apply_no_weight="true"
-       helper_size="0"
-       steps="2"
-       weight="33.333333"
-       is_visible="true"
-       id="path-effect17023"
-       effect="bspline" />
-    <inkscape:path-effect
-       effect="bspline"
-       id="path-effect16947"
-       is_visible="true"
-       weight="33.333333"
-       steps="2"
-       helper_size="0"
-       apply_no_weight="true"
-       apply_with_weight="true"
-       only_selected="false" />
-    <marker
-       inkscape:stockid="Arrow1Mstart"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="marker6744"
-       style="overflow:visible"
-       inkscape:isstock="true">
-      <path
-         id="path6742"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         transform="matrix(0.4,0,0,0.4,4,0)"
-         inkscape:connector-curvature="0" />
-    </marker>
-    <marker
-       inkscape:stockid="Arrow1Mstart"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="marker6464"
-       style="overflow:visible"
-       inkscape:isstock="true">
-      <path
-         id="path6462"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         transform="matrix(0.4,0,0,0.4,4,0)"
-         inkscape:connector-curvature="0" />
-    </marker>
-    <marker
-       inkscape:isstock="true"
-       style="overflow:visible"
-       id="marker2471"
-       refX="0"
-       refY="0"
-       orient="auto"
-       inkscape:stockid="Arrow1Mstart"
-       inkscape:collect="always">
-      <path
-         transform="matrix(0.4,0,0,0.4,4,0)"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         id="path2469"
-         inkscape:connector-curvature="0" />
-    </marker>
-    <marker
-       inkscape:isstock="true"
-       style="overflow:visible"
-       id="marker3039-1-9"
-       refX="0"
-       refY="0"
-       orient="auto"
-       inkscape:stockid="Arrow1Mend">
-      <path
-         inkscape:connector-curvature="0"
-         transform="matrix(-0.4,0,0,-0.4,-4,0)"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         id="path3037-99-5" />
-    </marker>
-    <marker
-       inkscape:isstock="true"
-       style="overflow:visible"
-       id="marker2891-75-9"
-       refX="0"
-       refY="0"
-       orient="auto"
-       inkscape:stockid="Arrow1Mend">
-      <path
-         inkscape:connector-curvature="0"
-         transform="matrix(-0.4,0,0,-0.4,-4,0)"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         id="path2889-3-1" />
-    </marker>
-    <marker
-       inkscape:stockid="Arrow1Mend"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="Arrow1Mend-9-0"
-       style="overflow:visible"
-       inkscape:isstock="true"
-       inkscape:collect="always">
-      <path
-         inkscape:connector-curvature="0"
-         id="path890-9-1"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         transform="matrix(-0.4,0,0,-0.4,-4,0)" />
-    </marker>
-    <marker
-       inkscape:isstock="true"
-       style="overflow:visible"
-       id="marker3039-2"
-       refX="0"
-       refY="0"
-       orient="auto"
-       inkscape:stockid="Arrow1Mend">
-      <path
-         inkscape:connector-curvature="0"
-         transform="matrix(-0.4,0,0,-0.4,-4,0)"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         id="path3037-53" />
-    </marker>
-    <marker
-       inkscape:isstock="true"
-       style="overflow:visible"
-       id="marker2891-5"
-       refX="0"
-       refY="0"
-       orient="auto"
-       inkscape:stockid="Arrow1Mend">
-      <path
-         inkscape:connector-curvature="0"
-         transform="matrix(-0.4,0,0,-0.4,-4,0)"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         id="path2889-6" />
-    </marker>
-    <marker
-       inkscape:stockid="Arrow1Mend"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="Arrow1Mend-7"
-       style="overflow:visible"
-       inkscape:isstock="true"
-       inkscape:collect="always">
-      <path
-         inkscape:connector-curvature="0"
-         id="path890-92"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         transform="matrix(-0.4,0,0,-0.4,-4,0)" />
-    </marker>
-    <marker
-       inkscape:stockid="Arrow1Mstart"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="marker6744-8-2"
-       style="overflow:visible"
-       inkscape:isstock="true">
-      <path
-         inkscape:connector-curvature="0"
-         id="path6742-9-67"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         style="fill:#fb0000;fill-opacity:1;fill-rule:evenodd;stroke:#fb0000;stroke-width:1.00000003pt;stroke-opacity:1"
-         transform="matrix(0.4,0,0,0.4,4,0)" />
-    </marker>
-    <marker
-       inkscape:stockid="Arrow1Mstart"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="marker6464-8-13-5-7"
-       style="overflow:visible"
-       inkscape:isstock="true">
-      <path
-         inkscape:connector-curvature="0"
-         id="path6462-2-3-3-9"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         style="fill:#ff0000;fill-opacity:1;fill-rule:evenodd;stroke:#fb0000;stroke-width:1.00000003pt;stroke-opacity:1"
-         transform="matrix(0.4,0,0,0.4,4,0)" />
-    </marker>
-    <marker
-       inkscape:stockid="Arrow1Mstart"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="marker6464-8-13-5-7-2"
-       style="overflow:visible"
-       inkscape:isstock="true">
-      <path
-         inkscape:connector-curvature="0"
-         id="path6462-2-3-3-9-5"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         style="fill:#ff0000;fill-opacity:1;fill-rule:evenodd;stroke:#fb0000;stroke-width:1.00000003pt;stroke-opacity:1"
-         transform="matrix(0.4,0,0,0.4,4,0)" />
-    </marker>
-  </defs>
-  <sodipodi:namedview
-     id="base"
-     pagecolor="#ffffff"
-     bordercolor="#666666"
-     borderopacity="1.0"
-     inkscape:pageopacity="0.0"
-     inkscape:pageshadow="2"
-     inkscape:zoom="8.4447374"
-     inkscape:cx="84.839197"
-     inkscape:cy="52.066398"
-     inkscape:document-units="px"
-     inkscape:current-layer="layer1"
-     showgrid="true"
-     inkscape:window-width="1920"
-     inkscape:window-height="1001"
-     inkscape:window-x="-9"
-     inkscape:window-y="-9"
-     inkscape:window-maximized="0"
-     fit-margin-top="1"
-     fit-margin-left="1"
-     fit-margin-right="1"
-     fit-margin-bottom="1"
-     inkscape:snap-grids="true"
-     inkscape:snap-text-baseline="true"
-     inkscape:snap-object-midpoints="true"
-     units="px"
-     borderlayer="false">
-    <inkscape:grid
-       type="xygrid"
-       id="grid9626"
-       originx="-235.50911"
-       originy="-498.75781" />
-  </sodipodi:namedview>
-  <metadata
-     id="metadata8650">
-    <rdf:RDF>
-      <cc:Work
-         rdf:about="">
-        <dc:format>image/svg+xml</dc:format>
-        <dc:type
-           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
-        <dc:title />
-      </cc:Work>
-    </rdf:RDF>
-  </metadata>
-  <g
-     inkscape:label="Layer 1"
-     inkscape:groupmode="layer"
-     id="layer1"
-     transform="translate(-248.0435,180.9101)">
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
-       x="332.53439"
-       y="-78.035103"
-       id="text5070-2-2-9-9-75"><tspan
-         sodipodi:role="line"
-         id="tspan5068-0-3-36-9-68"
-         x="332.53439"
-         y="-78.035103"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">0</tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
-       x="412.53439"
-       y="-78.035103"
-       id="text5070-2-2-9-9-1-4"><tspan
-         sodipodi:role="line"
-         id="tspan5068-0-3-36-9-3-6"
-         x="412.53439"
-         y="-78.035103"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">4</tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
-       x="292.53439"
-       y="-168.0351"
-       id="text5070-2-2-9-9-7-4"><tspan
-         sodipodi:role="line"
-         id="tspan5068-0-3-36-9-6-3"
-         x="292.53439"
-         y="-168.0351"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">2</tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
-       x="252.53439"
-       y="-78.035103"
-       id="text5070-2-2-9-9-6-2"><tspan
-         sodipodi:role="line"
-         id="tspan5068-0-3-36-9-4-4"
-         x="252.53439"
-         y="-78.035103"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">1</tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
-       x="372.53439"
-       y="-168.0351"
-       id="text5070-2-2-9-9-77-2"><tspan
-         sodipodi:role="line"
-         id="tspan5068-0-3-36-9-5-2"
-         x="372.53439"
-         y="-168.0351"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">3</tspan></text>
-    <circle
-       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       id="path4517-0-8-5-8-0"
-       cx="412.53439"
-       cy="-98.035095"
-       r="3.4908931" />
-    <path
-       style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-       d="m 252.53439,-98.0351 40,-59.99999 h 80 l 40,59.99999 z m 40,-59.99999 40,59.99999 40,-59.99999"
-       id="path875-4"
-       inkscape:connector-curvature="0" />
-    <g
-       id="g4389-3"
-       transform="translate(200,6.6621094e-6)">
-      <path
-         sodipodi:nodetypes="cc"
-         inkscape:connector-curvature="0"
-         id="path1868-1"
-         d="m 67.534393,-113.0351 20,-30"
-         style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker3039-2)" />
-      <path
-         sodipodi:nodetypes="cc"
-         inkscape:connector-curvature="0"
-         id="path1870-2"
-         d="m 97.534393,-143.0351 19.999997,30"
-         style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker2891-5)" />
-      <path
-         sodipodi:nodetypes="cc"
-         inkscape:connector-curvature="0"
-         id="path1872-1"
-         d="M 117.53439,-103.0351 H 67.534393"
-         style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow1Mend-7)" />
-    </g>
-    <g
-       transform="translate(279.66144,0.68117665)"
-       id="g4389-5-5">
-      <path
-         sodipodi:nodetypes="cc"
-         inkscape:connector-curvature="0"
-         id="path1868-6-6"
-         d="m 67.534393,-113.0351 20,-30"
-         style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker3039-1-9)" />
-      <path
-         sodipodi:nodetypes="cc"
-         inkscape:connector-curvature="0"
-         id="path1870-4-3"
-         d="m 97.534393,-143.0351 19.999997,30"
-         style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker2891-75-9)" />
-      <path
-         sodipodi:nodetypes="cc"
-         inkscape:connector-curvature="0"
-         id="path1872-0-9"
-         d="M 117.53439,-103.0351 H 67.534393"
-         style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow1Mend-9-0)" />
-    </g>
-    <g
-       id="g7055"
-       transform="translate(30,-9.9999914)">
-      <path
-         sodipodi:nodetypes="cc"
-         inkscape:connector-curvature="0"
-         id="path1868-08-3"
-         d="m 277.53439,-133.0351 20,30"
-         style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:url(#marker6464)" />
-      <path
-         sodipodi:nodetypes="cc"
-         inkscape:connector-curvature="0"
-         id="path1870-9-9"
-         d="m 307.53439,-103.0351 20,-30"
-         style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:url(#marker2471)" />
-      <path
-         sodipodi:nodetypes="cc"
-         inkscape:connector-curvature="0"
-         id="path1872-2-3"
-         d="m 327.53439,-143.0351 h -50"
-         style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:url(#marker6744)" />
-    </g>
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-weight:normal;font-size:40px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none"
-       x="572.53442"
-       y="-168.03511"
-       id="text11340"><tspan
-         sodipodi:role="line"
-         id="tspan11338"
-         x="572.53442"
-         y="-132.64449" /></text>
-    <circle
-       style="fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       id="path4517-0-8-5-91-0-3"
-       cx="292.53439"
-       cy="-158.03511"
-       r="3.4908931" />
-    <circle
-       style="fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       id="path4517-0-8-5-2-9"
-       cx="252.53439"
-       cy="-98.03511"
-       r="3.4908931" />
-    <circle
-       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       id="path4517-0-8-5-2-9-7"
-       cx="332.53439"
-       cy="-98.03511"
-       r="3.4908931" />
-    <circle
-       style="fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       id="path4517-0-8-5-2-9-6"
-       cx="372.53439"
-       cy="158.03511"
-       r="3.4908931"
-       transform="scale(1,-1)" />
-    <path
-       style="fill:none;stroke:#ff0000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-       d="m 252.53439,-98.03511 c 3.21845,-1.609226 6.66787,-3.33393 10,-5"
-       id="path16945"
-       inkscape:connector-curvature="0"
-       inkscape:path-effect="#path-effect16947"
-       inkscape:original-d="m 252.53439,-98.03511 c 3.20124,-1.643652 6.66767,-3.33433 10,-5" />
-    <path
-       style="fill:none;stroke:#ff0000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-       d="m 292.53439,-158.03511 c 3.33373,1.66687 6.66707,3.33353 10,5"
-       id="path17025"
-       inkscape:connector-curvature="0"
-       inkscape:path-effect="#path-effect17027"
-       inkscape:original-d="m 292.53439,-158.03511 c 3.33433,1.66567 6.66767,3.33233 10,5" />
-    <path
-       style="fill:none;stroke:#ff0000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-       d="m 372.53439,-158.03511 v 12"
-       id="path17029"
-       inkscape:connector-curvature="0" />
-  </g>
-</svg>
diff --git a/registry/vulkan/images/primitive_topology_triangle_fan_last.svg b/registry/vulkan/images/primitive_topology_triangle_fan_last.svg
deleted file mode 100644
index 7fcf9cb..0000000
--- a/registry/vulkan/images/primitive_topology_triangle_fan_last.svg
+++ /dev/null
@@ -1,472 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Created with Inkscape (http://www.inkscape.org/) -->
-
-<svg
-   xmlns:dc="http://purl.org/dc/elements/1.1/"
-   xmlns:cc="http://creativecommons.org/ns#"
-   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
-   xmlns:svg="http://www.w3.org/2000/svg"
-   xmlns="http://www.w3.org/2000/svg"
-   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
-   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
-   width="169.79558"
-   height="104.11718"
-   viewBox="0 0 169.79558 104.11718"
-   version="1.1"
-   id="svg8653"
-   inkscape:version="0.92.2 5c3e80d, 2017-08-06"
-   sodipodi:docname="primitive_topology_triangle_fan_last.svg">
-  <defs
-     id="defs8647">
-    <inkscape:path-effect
-       effect="bspline"
-       id="path-effect17027"
-       is_visible="true"
-       weight="33.333333"
-       steps="2"
-       helper_size="0"
-       apply_no_weight="true"
-       apply_with_weight="true"
-       only_selected="false" />
-    <inkscape:path-effect
-       only_selected="false"
-       apply_with_weight="true"
-       apply_no_weight="true"
-       helper_size="0"
-       steps="2"
-       weight="33.333333"
-       is_visible="true"
-       id="path-effect17023"
-       effect="bspline" />
-    <inkscape:path-effect
-       effect="bspline"
-       id="path-effect16947"
-       is_visible="true"
-       weight="33.333333"
-       steps="2"
-       helper_size="0"
-       apply_no_weight="true"
-       apply_with_weight="true"
-       only_selected="false" />
-    <marker
-       inkscape:stockid="Arrow1Mstart"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="marker6744"
-       style="overflow:visible"
-       inkscape:isstock="true">
-      <path
-         id="path6742"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         transform="matrix(0.4,0,0,0.4,4,0)"
-         inkscape:connector-curvature="0" />
-    </marker>
-    <marker
-       inkscape:stockid="Arrow1Mstart"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="marker6464"
-       style="overflow:visible"
-       inkscape:isstock="true">
-      <path
-         id="path6462"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         transform="matrix(0.4,0,0,0.4,4,0)"
-         inkscape:connector-curvature="0" />
-    </marker>
-    <marker
-       inkscape:isstock="true"
-       style="overflow:visible"
-       id="marker2471"
-       refX="0"
-       refY="0"
-       orient="auto"
-       inkscape:stockid="Arrow1Mstart"
-       inkscape:collect="always">
-      <path
-         transform="matrix(0.4,0,0,0.4,4,0)"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         id="path2469"
-         inkscape:connector-curvature="0" />
-    </marker>
-    <marker
-       inkscape:isstock="true"
-       style="overflow:visible"
-       id="marker3039-1-9"
-       refX="0"
-       refY="0"
-       orient="auto"
-       inkscape:stockid="Arrow1Mend">
-      <path
-         inkscape:connector-curvature="0"
-         transform="matrix(-0.4,0,0,-0.4,-4,0)"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         id="path3037-99-5" />
-    </marker>
-    <marker
-       inkscape:isstock="true"
-       style="overflow:visible"
-       id="marker2891-75-9"
-       refX="0"
-       refY="0"
-       orient="auto"
-       inkscape:stockid="Arrow1Mend">
-      <path
-         inkscape:connector-curvature="0"
-         transform="matrix(-0.4,0,0,-0.4,-4,0)"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         id="path2889-3-1" />
-    </marker>
-    <marker
-       inkscape:stockid="Arrow1Mend"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="Arrow1Mend-9-0"
-       style="overflow:visible"
-       inkscape:isstock="true"
-       inkscape:collect="always">
-      <path
-         inkscape:connector-curvature="0"
-         id="path890-9-1"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         transform="matrix(-0.4,0,0,-0.4,-4,0)" />
-    </marker>
-    <marker
-       inkscape:isstock="true"
-       style="overflow:visible"
-       id="marker3039-2"
-       refX="0"
-       refY="0"
-       orient="auto"
-       inkscape:stockid="Arrow1Mend">
-      <path
-         inkscape:connector-curvature="0"
-         transform="matrix(-0.4,0,0,-0.4,-4,0)"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         id="path3037-53" />
-    </marker>
-    <marker
-       inkscape:isstock="true"
-       style="overflow:visible"
-       id="marker2891-5"
-       refX="0"
-       refY="0"
-       orient="auto"
-       inkscape:stockid="Arrow1Mend">
-      <path
-         inkscape:connector-curvature="0"
-         transform="matrix(-0.4,0,0,-0.4,-4,0)"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         id="path2889-6" />
-    </marker>
-    <marker
-       inkscape:stockid="Arrow1Mend"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="Arrow1Mend-7"
-       style="overflow:visible"
-       inkscape:isstock="true"
-       inkscape:collect="always">
-      <path
-         inkscape:connector-curvature="0"
-         id="path890-92"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         transform="matrix(-0.4,0,0,-0.4,-4,0)" />
-    </marker>
-    <marker
-       inkscape:stockid="Arrow1Mstart"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="marker6744-8-2"
-       style="overflow:visible"
-       inkscape:isstock="true">
-      <path
-         inkscape:connector-curvature="0"
-         id="path6742-9-67"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         style="fill:#fb0000;fill-opacity:1;fill-rule:evenodd;stroke:#fb0000;stroke-width:1.00000003pt;stroke-opacity:1"
-         transform="matrix(0.4,0,0,0.4,4,0)" />
-    </marker>
-    <marker
-       inkscape:stockid="Arrow1Mstart"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="marker6464-8-13-5-7"
-       style="overflow:visible"
-       inkscape:isstock="true">
-      <path
-         inkscape:connector-curvature="0"
-         id="path6462-2-3-3-9"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         style="fill:#ff0000;fill-opacity:1;fill-rule:evenodd;stroke:#fb0000;stroke-width:1.00000003pt;stroke-opacity:1"
-         transform="matrix(0.4,0,0,0.4,4,0)" />
-    </marker>
-    <marker
-       inkscape:stockid="Arrow1Mstart"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="marker6464-8-13-5-7-2"
-       style="overflow:visible"
-       inkscape:isstock="true">
-      <path
-         inkscape:connector-curvature="0"
-         id="path6462-2-3-3-9-5"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         style="fill:#ff0000;fill-opacity:1;fill-rule:evenodd;stroke:#fb0000;stroke-width:1.00000003pt;stroke-opacity:1"
-         transform="matrix(0.4,0,0,0.4,4,0)" />
-    </marker>
-  </defs>
-  <sodipodi:namedview
-     id="base"
-     pagecolor="#ffffff"
-     bordercolor="#666666"
-     borderopacity="1.0"
-     inkscape:pageopacity="0.0"
-     inkscape:pageshadow="2"
-     inkscape:zoom="8.4447374"
-     inkscape:cx="84.839197"
-     inkscape:cy="52.066398"
-     inkscape:document-units="px"
-     inkscape:current-layer="layer1"
-     showgrid="true"
-     inkscape:window-width="1920"
-     inkscape:window-height="1155"
-     inkscape:window-x="0"
-     inkscape:window-y="1"
-     inkscape:window-maximized="1"
-     fit-margin-top="1"
-     fit-margin-left="1"
-     fit-margin-right="1"
-     fit-margin-bottom="1"
-     inkscape:snap-grids="true"
-     inkscape:snap-text-baseline="true"
-     inkscape:snap-object-midpoints="true"
-     units="px"
-     borderlayer="false">
-    <inkscape:grid
-       type="xygrid"
-       id="grid9626"
-       originx="-235.50911"
-       originy="-498.75781" />
-  </sodipodi:namedview>
-  <metadata
-     id="metadata8650">
-    <rdf:RDF>
-      <cc:Work
-         rdf:about="">
-        <dc:format>image/svg+xml</dc:format>
-        <dc:type
-           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
-        <dc:title />
-      </cc:Work>
-    </rdf:RDF>
-  </metadata>
-  <g
-     inkscape:label="Layer 1"
-     inkscape:groupmode="layer"
-     id="layer1"
-     transform="translate(-248.0435,180.9101)">
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
-       x="332.53439"
-       y="-78.035103"
-       id="text5070-2-2-9-9-75"><tspan
-         sodipodi:role="line"
-         id="tspan5068-0-3-36-9-68"
-         x="332.53439"
-         y="-78.035103"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">0</tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
-       x="412.53439"
-       y="-78.035103"
-       id="text5070-2-2-9-9-1-4"><tspan
-         sodipodi:role="line"
-         id="tspan5068-0-3-36-9-3-6"
-         x="412.53439"
-         y="-78.035103"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">4</tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
-       x="292.53439"
-       y="-168.0351"
-       id="text5070-2-2-9-9-7-4"><tspan
-         sodipodi:role="line"
-         id="tspan5068-0-3-36-9-6-3"
-         x="292.53439"
-         y="-168.0351"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">2</tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
-       x="252.53439"
-       y="-78.035103"
-       id="text5070-2-2-9-9-6-2"><tspan
-         sodipodi:role="line"
-         id="tspan5068-0-3-36-9-4-4"
-         x="252.53439"
-         y="-78.035103"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">1</tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
-       x="372.53439"
-       y="-168.0351"
-       id="text5070-2-2-9-9-77-2"><tspan
-         sodipodi:role="line"
-         id="tspan5068-0-3-36-9-5-2"
-         x="372.53439"
-         y="-168.0351"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">3</tspan></text>
-    <path
-       style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-       d="m 252.53439,-98.0351 40,-59.99999 h 80 l 40,59.99999 z m 40,-59.99999 40,59.99999 40,-59.99999"
-       id="path875-4"
-       inkscape:connector-curvature="0" />
-    <circle
-       style="fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       id="path4517-0-8-5-8-0"
-       cx="412.53439"
-       cy="-98.035095"
-       r="3.4908931" />
-    <g
-       id="g4389-3"
-       transform="translate(200,6.6621094e-6)">
-      <path
-         sodipodi:nodetypes="cc"
-         inkscape:connector-curvature="0"
-         id="path1868-1"
-         d="m 67.534393,-113.0351 20,-30"
-         style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker3039-2)" />
-      <path
-         sodipodi:nodetypes="cc"
-         inkscape:connector-curvature="0"
-         id="path1870-2"
-         d="m 97.534393,-143.0351 19.999997,30"
-         style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker2891-5)" />
-      <path
-         sodipodi:nodetypes="cc"
-         inkscape:connector-curvature="0"
-         id="path1872-1"
-         d="M 117.53439,-103.0351 H 67.534393"
-         style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow1Mend-7)" />
-    </g>
-    <g
-       transform="translate(279.66144,0.68117665)"
-       id="g4389-5-5">
-      <path
-         sodipodi:nodetypes="cc"
-         inkscape:connector-curvature="0"
-         id="path1868-6-6"
-         d="m 67.534393,-113.0351 20,-30"
-         style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker3039-1-9)" />
-      <path
-         sodipodi:nodetypes="cc"
-         inkscape:connector-curvature="0"
-         id="path1870-4-3"
-         d="m 97.534393,-143.0351 19.999997,30"
-         style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker2891-75-9)" />
-      <path
-         sodipodi:nodetypes="cc"
-         inkscape:connector-curvature="0"
-         id="path1872-0-9"
-         d="M 117.53439,-103.0351 H 67.534393"
-         style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow1Mend-9-0)" />
-    </g>
-    <g
-       id="g7055"
-       transform="translate(30,-9.9999914)">
-      <path
-         sodipodi:nodetypes="cc"
-         inkscape:connector-curvature="0"
-         id="path1868-08-3"
-         d="m 277.53439,-133.0351 20,30"
-         style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:url(#marker6464)" />
-      <path
-         sodipodi:nodetypes="cc"
-         inkscape:connector-curvature="0"
-         id="path1870-9-9"
-         d="m 307.53439,-103.0351 20,-30"
-         style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:url(#marker2471)" />
-      <path
-         sodipodi:nodetypes="cc"
-         inkscape:connector-curvature="0"
-         id="path1872-2-3"
-         d="m 327.53439,-143.0351 h -50"
-         style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:url(#marker6744)" />
-    </g>
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-weight:normal;font-size:40px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none"
-       x="572.53442"
-       y="-168.03511"
-       id="text11340"><tspan
-         sodipodi:role="line"
-         id="tspan11338"
-         x="572.53442"
-         y="-132.64449" /></text>
-    <circle
-       style="fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       id="path4517-0-8-5-91-0-3"
-       cx="292.53439"
-       cy="-158.03511"
-       r="3.4908931" />
-    <circle
-       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       id="path4517-0-8-5-2-9"
-       cx="252.53439"
-       cy="-98.03511"
-       r="3.4908931" />
-    <circle
-       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       id="path4517-0-8-5-2-9-7"
-       cx="332.53439"
-       cy="-98.03511"
-       r="3.4908931" />
-    <circle
-       style="fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       id="path4517-0-8-5-2-9-6"
-       cx="372.53439"
-       cy="158.03511"
-       r="3.4908931"
-       transform="scale(1,-1)" />
-    <path
-       style="fill:none;stroke:#ff0000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-       d="m 412.53439,-98.03511 c -3.21845,-1.609226 -6.66787,-3.33393 -10,-5"
-       id="path16945"
-       inkscape:connector-curvature="0"
-       inkscape:path-effect="#path-effect16947"
-       inkscape:original-d="m 412.53439,-98.03511 c -3.20124,-1.643652 -6.66767,-3.33433 -10,-5" />
-    <path
-       style="fill:none;stroke:#ff0000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-       d="m 372.53439,-158.03511 c -3.33373,1.66687 -6.66707,3.33353 -10,5"
-       id="path17025"
-       inkscape:connector-curvature="0"
-       inkscape:path-effect="#path-effect17027"
-       inkscape:original-d="m 372.53439,-158.03511 c -3.33433,1.66567 -6.66767,3.33233 -10,5" />
-    <path
-       style="fill:none;stroke:#ff0000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-       d="m 292.53439,-158.03511 v 12"
-       id="path17029"
-       inkscape:connector-curvature="0" />
-  </g>
-</svg>
diff --git a/registry/vulkan/images/primitive_topology_triangle_list.svg b/registry/vulkan/images/primitive_topology_triangle_list.svg
deleted file mode 100644
index 86fbe83..0000000
--- a/registry/vulkan/images/primitive_topology_triangle_list.svg
+++ /dev/null
@@ -1,395 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Created with Inkscape (http://www.inkscape.org/) -->
-
-<svg
-   xmlns:dc="http://purl.org/dc/elements/1.1/"
-   xmlns:cc="http://creativecommons.org/ns#"
-   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
-   xmlns:svg="http://www.w3.org/2000/svg"
-   xmlns="http://www.w3.org/2000/svg"
-   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
-   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
-   width="210.32816"
-   height="104.11718"
-   viewBox="0 0 210.32816 104.11718"
-   version="1.1"
-   id="svg8653"
-   inkscape:version="0.92.2 5c3e80d, 2017-08-06"
-   sodipodi:docname="primitive_topology_triangle_list.svg">
-  <defs
-     id="defs8647">
-    <inkscape:path-effect
-       effect="bspline"
-       id="path-effect18703"
-       is_visible="true"
-       weight="33.333333"
-       steps="2"
-       helper_size="0"
-       apply_no_weight="true"
-       apply_with_weight="true"
-       only_selected="false" />
-    <inkscape:path-effect
-       effect="bspline"
-       id="path-effect18651"
-       is_visible="true"
-       weight="33.333333"
-       steps="2"
-       helper_size="0"
-       apply_no_weight="true"
-       apply_with_weight="true"
-       only_selected="false" />
-    <marker
-       inkscape:isstock="true"
-       style="overflow:visible"
-       id="marker3039-2-4"
-       refX="0"
-       refY="0"
-       orient="auto"
-       inkscape:stockid="Arrow1Mend">
-      <path
-         inkscape:connector-curvature="0"
-         transform="matrix(-0.4,0,0,-0.4,-4,0)"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         id="path3037-53-9" />
-    </marker>
-    <marker
-       inkscape:isstock="true"
-       style="overflow:visible"
-       id="marker2891-5-1"
-       refX="0"
-       refY="0"
-       orient="auto"
-       inkscape:stockid="Arrow1Mend">
-      <path
-         inkscape:connector-curvature="0"
-         transform="matrix(-0.4,0,0,-0.4,-4,0)"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         id="path2889-6-6" />
-    </marker>
-    <marker
-       inkscape:stockid="Arrow1Mend"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="Arrow1Mend-7-3"
-       style="overflow:visible"
-       inkscape:isstock="true"
-       inkscape:collect="always">
-      <path
-         inkscape:connector-curvature="0"
-         id="path890-92-9"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         transform="matrix(-0.4,0,0,-0.4,-4,0)" />
-    </marker>
-    <marker
-       inkscape:stockid="Arrow1Mstart"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="marker6464-5"
-       style="overflow:visible"
-       inkscape:isstock="true">
-      <path
-         id="path6462-51"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         transform="matrix(0.4,0,0,0.4,4,0)"
-         inkscape:connector-curvature="0" />
-    </marker>
-    <marker
-       inkscape:isstock="true"
-       style="overflow:visible"
-       id="marker2471"
-       refX="0"
-       refY="0"
-       orient="auto"
-       inkscape:stockid="Arrow1Mstart"
-       inkscape:collect="always">
-      <path
-         transform="matrix(0.4,0,0,0.4,4,0)"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         id="path2469"
-         inkscape:connector-curvature="0" />
-    </marker>
-    <marker
-       inkscape:stockid="Arrow1Mstart"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="marker6744-4"
-       style="overflow:visible"
-       inkscape:isstock="true">
-      <path
-         id="path6742-54"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         transform="matrix(0.4,0,0,0.4,4,0)"
-         inkscape:connector-curvature="0" />
-    </marker>
-    <marker
-       inkscape:stockid="Arrow1Mstart"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="marker6464-8-13-5"
-       style="overflow:visible"
-       inkscape:isstock="true">
-      <path
-         inkscape:connector-curvature="0"
-         id="path6462-2-3-3"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         style="fill:#fb0000;fill-opacity:1;fill-rule:evenodd;stroke:#fb0000;stroke-width:1.00000003pt;stroke-opacity:1"
-         transform="matrix(0.4,0,0,0.4,4,0)" />
-    </marker>
-    <marker
-       inkscape:stockid="Arrow1Mstart"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="marker6744-8-2"
-       style="overflow:visible"
-       inkscape:isstock="true">
-      <path
-         inkscape:connector-curvature="0"
-         id="path6742-9-67"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         style="fill:#fb0000;fill-opacity:1;fill-rule:evenodd;stroke:#fb0000;stroke-width:1.00000003pt;stroke-opacity:1"
-         transform="matrix(0.4,0,0,0.4,4,0)" />
-    </marker>
-  </defs>
-  <sodipodi:namedview
-     id="base"
-     pagecolor="#ffffff"
-     bordercolor="#666666"
-     borderopacity="1.0"
-     inkscape:pageopacity="0.0"
-     inkscape:pageshadow="2"
-     inkscape:zoom="6.8002841"
-     inkscape:cx="105.09767"
-     inkscape:cy="52.066398"
-     inkscape:document-units="px"
-     inkscape:current-layer="layer1"
-     showgrid="true"
-     inkscape:window-width="1920"
-     inkscape:window-height="1001"
-     inkscape:window-x="-9"
-     inkscape:window-y="-9"
-     inkscape:window-maximized="0"
-     fit-margin-top="1"
-     fit-margin-left="1"
-     fit-margin-right="1"
-     fit-margin-bottom="1"
-     inkscape:snap-grids="true"
-     inkscape:snap-text-baseline="true"
-     inkscape:snap-object-midpoints="true"
-     units="px"
-     borderlayer="false">
-    <inkscape:grid
-       type="xygrid"
-       id="grid9626"
-       originx="-474.97657"
-       originy="-498.75782" />
-  </sodipodi:namedview>
-  <metadata
-     id="metadata8650">
-    <rdf:RDF>
-      <cc:Work
-         rdf:about="">
-        <dc:format>image/svg+xml</dc:format>
-        <dc:type
-           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
-        <dc:title />
-      </cc:Work>
-    </rdf:RDF>
-  </metadata>
-  <g
-     inkscape:label="Layer 1"
-     inkscape:groupmode="layer"
-     id="layer1"
-     transform="translate(-487.51096,180.9101)">
-    <path
-       style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-       d="m 612.53439,-158.0351 40,59.999997 40,-59.999997 z"
-       id="path11344"
-       inkscape:connector-curvature="0" />
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
-       x="572.53442"
-       y="-78.035103"
-       id="text5070-2-2-9-9-75-8"><tspan
-         sodipodi:role="line"
-         id="tspan5068-0-3-36-9-68-4"
-         x="572.53442"
-         y="-78.035103"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">2</tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
-       x="532.53436"
-       y="-168.03508"
-       id="text5070-2-2-9-9-7-4-5"><tspan
-         sodipodi:role="line"
-         id="tspan5068-0-3-36-9-6-3-1"
-         x="532.53436"
-         y="-168.03508"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">1</tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
-       x="492.53439"
-       y="-78.035103"
-       id="text5070-2-2-9-9-6-2-2"><tspan
-         sodipodi:role="line"
-         id="tspan5068-0-3-36-9-4-4-0"
-         x="492.53439"
-         y="-78.035103"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">0</tspan></text>
-    <circle
-       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       id="path4517-0-8-5-91-9-3"
-       cx="532.53436"
-       cy="-158.03508"
-       r="3.4908931" />
-    <circle
-       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       id="path4517-0-8-5-25-0-0"
-       cx="572.53442"
-       cy="-98.035103"
-       r="3.4908931" />
-    <g
-       id="g4389-3-6"
-       transform="translate(440,2.147998e-5)">
-      <path
-         sodipodi:nodetypes="cc"
-         inkscape:connector-curvature="0"
-         id="path1868-1-8"
-         d="m 67.534393,-113.0351 20,-30"
-         style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker3039-2-4)" />
-      <path
-         sodipodi:nodetypes="cc"
-         inkscape:connector-curvature="0"
-         id="path1870-2-7"
-         d="m 97.534393,-143.0351 19.999997,30"
-         style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker2891-5-1)" />
-      <path
-         sodipodi:nodetypes="cc"
-         inkscape:connector-curvature="0"
-         id="path1872-1-0"
-         d="M 117.53439,-103.0351 H 67.534393"
-         style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow1Mend-7-3)" />
-    </g>
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
-       x="612.53442"
-       y="-168.0351"
-       id="text5070-2-2-9-9-75-8-3"><tspan
-         sodipodi:role="line"
-         id="tspan5068-0-3-36-9-68-4-4"
-         x="612.53442"
-         y="-168.0351"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">3</tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
-       x="652.53442"
-       y="-78.035103"
-       id="text5070-2-2-9-9-1-4-2"><tspan
-         sodipodi:role="line"
-         id="tspan5068-0-3-36-9-3-6-1"
-         x="652.53442"
-         y="-78.035103"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">5</tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
-       x="692.53442"
-       y="-168.0351"
-       id="text5070-2-2-9-9-77-2-4"><tspan
-         sodipodi:role="line"
-         id="tspan5068-0-3-36-9-5-2-0"
-         x="692.53442"
-         y="-168.0351"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">4</tspan></text>
-    <circle
-       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       id="path4517-0-8-5-8-0-3"
-       cx="652.53442"
-       cy="-98.035103"
-       r="3.4908931" />
-    <circle
-       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       id="path4517-0-8-5-25-0-0-6"
-       cx="692.53442"
-       cy="-158.0351"
-       r="3.4908931" />
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-weight:normal;font-size:40px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none"
-       x="572.53442"
-       y="-168.03511"
-       id="text11340"><tspan
-         sodipodi:role="line"
-         id="tspan11338"
-         x="572.53442"
-         y="-132.64449" /></text>
-    <path
-       style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-       d="m 492.53439,-98.035095 40,-59.999995 40,59.999995 z"
-       id="path11342"
-       inkscape:connector-curvature="0" />
-    <g
-       id="g7055"
-       transform="translate(350.00001,-10)">
-      <path
-         sodipodi:nodetypes="cc"
-         inkscape:connector-curvature="0"
-         id="path1868-08-3"
-         d="m 277.53439,-133.0351 20,30"
-         style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:url(#marker6464-5)" />
-      <path
-         sodipodi:nodetypes="cc"
-         inkscape:connector-curvature="0"
-         id="path1870-9-9"
-         d="m 307.53439,-103.0351 20,-30"
-         style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:url(#marker2471)" />
-      <path
-         sodipodi:nodetypes="cc"
-         inkscape:connector-curvature="0"
-         id="path1872-2-3"
-         d="m 327.53439,-143.0351 h -50"
-         style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:url(#marker6744-4)" />
-    </g>
-    <circle
-       style="fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       id="path4517-0-8-5-91-0-97"
-       cx="492.53439"
-       cy="-98.035103"
-       r="3.4908931" />
-    <circle
-       style="fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       id="path4517-0-8-5-91-0-3"
-       cx="612.53442"
-       cy="-158.0351"
-       r="3.4908931" />
-    <path
-       style="fill:none;stroke:#ff0000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-       d="m 492.53439,-98.0351 c 3.33453,-1.667265 6.66787,-3.33393 10,-5"
-       id="path18649"
-       inkscape:connector-curvature="0"
-       inkscape:path-effect="#path-effect18651"
-       inkscape:original-d="m 492.53439,-98.0351 c 3.33433,-1.667667 6.66767,-3.33433 10,-5" />
-    <path
-       style="fill:none;stroke:#ff0000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-       d="m 612.53439,-158.0351 c 3.29595,1.64798 6.66707,3.33353 10,5"
-       id="path18701"
-       inkscape:connector-curvature="0"
-       inkscape:path-effect="#path-effect18703"
-       inkscape:original-d="m 612.53439,-158.0351 c 3.32464,1.5906 6.66767,3.33233 10,5" />
-  </g>
-</svg>
diff --git a/registry/vulkan/images/primitive_topology_triangle_list_last.svg b/registry/vulkan/images/primitive_topology_triangle_list_last.svg
deleted file mode 100644
index c9b7b58..0000000
--- a/registry/vulkan/images/primitive_topology_triangle_list_last.svg
+++ /dev/null
@@ -1,417 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Created with Inkscape (http://www.inkscape.org/) -->
-
-<svg
-   xmlns:dc="http://purl.org/dc/elements/1.1/"
-   xmlns:cc="http://creativecommons.org/ns#"
-   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
-   xmlns:svg="http://www.w3.org/2000/svg"
-   xmlns="http://www.w3.org/2000/svg"
-   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
-   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
-   width="210.32816"
-   height="104.11718"
-   viewBox="0 0 210.32816 104.11718"
-   version="1.1"
-   id="svg8653"
-   inkscape:version="0.92.2 5c3e80d, 2017-08-06"
-   sodipodi:docname="primitive_topology_triangle_list_last.svg">
-  <defs
-     id="defs8647">
-    <inkscape:path-effect
-       effect="bspline"
-       id="path-effect19538"
-       is_visible="true"
-       weight="33.333333"
-       steps="2"
-       helper_size="0"
-       apply_no_weight="true"
-       apply_with_weight="true"
-       only_selected="false" />
-    <inkscape:path-effect
-       effect="bspline"
-       id="path-effect19486"
-       is_visible="true"
-       weight="33.333333"
-       steps="2"
-       helper_size="0"
-       apply_no_weight="true"
-       apply_with_weight="true"
-       only_selected="false" />
-    <inkscape:path-effect
-       effect="bspline"
-       id="path-effect18703"
-       is_visible="true"
-       weight="33.333333"
-       steps="2"
-       helper_size="0"
-       apply_no_weight="true"
-       apply_with_weight="true"
-       only_selected="false" />
-    <inkscape:path-effect
-       effect="bspline"
-       id="path-effect18651"
-       is_visible="true"
-       weight="33.333333"
-       steps="2"
-       helper_size="0"
-       apply_no_weight="true"
-       apply_with_weight="true"
-       only_selected="false" />
-    <marker
-       inkscape:isstock="true"
-       style="overflow:visible"
-       id="marker3039-2-4"
-       refX="0"
-       refY="0"
-       orient="auto"
-       inkscape:stockid="Arrow1Mend">
-      <path
-         inkscape:connector-curvature="0"
-         transform="matrix(-0.4,0,0,-0.4,-4,0)"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         id="path3037-53-9" />
-    </marker>
-    <marker
-       inkscape:isstock="true"
-       style="overflow:visible"
-       id="marker2891-5-1"
-       refX="0"
-       refY="0"
-       orient="auto"
-       inkscape:stockid="Arrow1Mend">
-      <path
-         inkscape:connector-curvature="0"
-         transform="matrix(-0.4,0,0,-0.4,-4,0)"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         id="path2889-6-6" />
-    </marker>
-    <marker
-       inkscape:stockid="Arrow1Mend"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="Arrow1Mend-7-3"
-       style="overflow:visible"
-       inkscape:isstock="true"
-       inkscape:collect="always">
-      <path
-         inkscape:connector-curvature="0"
-         id="path890-92-9"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         transform="matrix(-0.4,0,0,-0.4,-4,0)" />
-    </marker>
-    <marker
-       inkscape:stockid="Arrow1Mstart"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="marker6464-5"
-       style="overflow:visible"
-       inkscape:isstock="true">
-      <path
-         id="path6462-51"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         transform="matrix(0.4,0,0,0.4,4,0)"
-         inkscape:connector-curvature="0" />
-    </marker>
-    <marker
-       inkscape:isstock="true"
-       style="overflow:visible"
-       id="marker2471"
-       refX="0"
-       refY="0"
-       orient="auto"
-       inkscape:stockid="Arrow1Mstart"
-       inkscape:collect="always">
-      <path
-         transform="matrix(0.4,0,0,0.4,4,0)"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         id="path2469"
-         inkscape:connector-curvature="0" />
-    </marker>
-    <marker
-       inkscape:stockid="Arrow1Mstart"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="marker6744-4"
-       style="overflow:visible"
-       inkscape:isstock="true">
-      <path
-         id="path6742-54"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         transform="matrix(0.4,0,0,0.4,4,0)"
-         inkscape:connector-curvature="0" />
-    </marker>
-    <marker
-       inkscape:stockid="Arrow1Mstart"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="marker6464-8-13-5"
-       style="overflow:visible"
-       inkscape:isstock="true">
-      <path
-         inkscape:connector-curvature="0"
-         id="path6462-2-3-3"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         style="fill:#fb0000;fill-opacity:1;fill-rule:evenodd;stroke:#fb0000;stroke-width:1.00000003pt;stroke-opacity:1"
-         transform="matrix(0.4,0,0,0.4,4,0)" />
-    </marker>
-    <marker
-       inkscape:stockid="Arrow1Mstart"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="marker6744-8-2"
-       style="overflow:visible"
-       inkscape:isstock="true">
-      <path
-         inkscape:connector-curvature="0"
-         id="path6742-9-67"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         style="fill:#fb0000;fill-opacity:1;fill-rule:evenodd;stroke:#fb0000;stroke-width:1.00000003pt;stroke-opacity:1"
-         transform="matrix(0.4,0,0,0.4,4,0)" />
-    </marker>
-  </defs>
-  <sodipodi:namedview
-     id="base"
-     pagecolor="#ffffff"
-     bordercolor="#666666"
-     borderopacity="1.0"
-     inkscape:pageopacity="0.0"
-     inkscape:pageshadow="2"
-     inkscape:zoom="6.8002841"
-     inkscape:cx="105.09767"
-     inkscape:cy="52.066398"
-     inkscape:document-units="px"
-     inkscape:current-layer="layer1"
-     showgrid="true"
-     inkscape:window-width="1920"
-     inkscape:window-height="1155"
-     inkscape:window-x="0"
-     inkscape:window-y="1"
-     inkscape:window-maximized="1"
-     fit-margin-top="1"
-     fit-margin-left="1"
-     fit-margin-right="1"
-     fit-margin-bottom="1"
-     inkscape:snap-grids="true"
-     inkscape:snap-text-baseline="true"
-     inkscape:snap-object-midpoints="true"
-     units="px"
-     borderlayer="false"
-     inkscape:snap-nodes="true"
-     inkscape:snap-global="true">
-    <inkscape:grid
-       type="xygrid"
-       id="grid9626"
-       originx="-474.97657"
-       originy="-498.75782" />
-  </sodipodi:namedview>
-  <metadata
-     id="metadata8650">
-    <rdf:RDF>
-      <cc:Work
-         rdf:about="">
-        <dc:format>image/svg+xml</dc:format>
-        <dc:type
-           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
-        <dc:title />
-      </cc:Work>
-    </rdf:RDF>
-  </metadata>
-  <g
-     inkscape:label="Layer 1"
-     inkscape:groupmode="layer"
-     id="layer1"
-     transform="translate(-487.51096,180.9101)">
-    <path
-       style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-       d="m 612.53439,-158.0351 40,59.999997 40,-59.999997 z"
-       id="path11344"
-       inkscape:connector-curvature="0" />
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
-       x="572.53442"
-       y="-78.035103"
-       id="text5070-2-2-9-9-75-8"><tspan
-         sodipodi:role="line"
-         id="tspan5068-0-3-36-9-68-4"
-         x="572.53442"
-         y="-78.035103"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">2</tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
-       x="532.53436"
-       y="-168.03508"
-       id="text5070-2-2-9-9-7-4-5"><tspan
-         sodipodi:role="line"
-         id="tspan5068-0-3-36-9-6-3-1"
-         x="532.53436"
-         y="-168.03508"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">1</tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
-       x="492.53439"
-       y="-78.035103"
-       id="text5070-2-2-9-9-6-2-2"><tspan
-         sodipodi:role="line"
-         id="tspan5068-0-3-36-9-4-4-0"
-         x="492.53439"
-         y="-78.035103"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">0</tspan></text>
-    <circle
-       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       id="path4517-0-8-5-91-9-3"
-       cx="532.53436"
-       cy="-158.03508"
-       r="3.4908931" />
-    <g
-       id="g4389-3-6"
-       transform="translate(440,2.147998e-5)">
-      <path
-         sodipodi:nodetypes="cc"
-         inkscape:connector-curvature="0"
-         id="path1868-1-8"
-         d="m 67.534393,-113.0351 20,-30"
-         style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker3039-2-4)" />
-      <path
-         sodipodi:nodetypes="cc"
-         inkscape:connector-curvature="0"
-         id="path1870-2-7"
-         d="m 97.534393,-143.0351 19.999997,30"
-         style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker2891-5-1)" />
-      <path
-         sodipodi:nodetypes="cc"
-         inkscape:connector-curvature="0"
-         id="path1872-1-0"
-         d="M 117.53439,-103.0351 H 67.534393"
-         style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow1Mend-7-3)" />
-    </g>
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
-       x="612.53442"
-       y="-168.0351"
-       id="text5070-2-2-9-9-75-8-3"><tspan
-         sodipodi:role="line"
-         id="tspan5068-0-3-36-9-68-4-4"
-         x="612.53442"
-         y="-168.0351"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">3</tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
-       x="652.53442"
-       y="-78.035103"
-       id="text5070-2-2-9-9-1-4-2"><tspan
-         sodipodi:role="line"
-         id="tspan5068-0-3-36-9-3-6-1"
-         x="652.53442"
-         y="-78.035103"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">5</tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
-       x="692.53442"
-       y="-168.0351"
-       id="text5070-2-2-9-9-77-2-4"><tspan
-         sodipodi:role="line"
-         id="tspan5068-0-3-36-9-5-2-0"
-         x="692.53442"
-         y="-168.0351"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">4</tspan></text>
-    <circle
-       style="fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       id="path4517-0-8-5-8-0-3"
-       cx="652.53442"
-       cy="-98.035103"
-       r="3.4908931" />
-    <circle
-       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       id="path4517-0-8-5-25-0-0-6"
-       cx="692.53442"
-       cy="-158.0351"
-       r="3.4908931" />
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-weight:normal;font-size:40px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none"
-       x="572.53442"
-       y="-168.03511"
-       id="text11340"><tspan
-         sodipodi:role="line"
-         id="tspan11338"
-         x="572.53442"
-         y="-132.64449" /></text>
-    <path
-       style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-       d="m 492.53439,-98.035095 40,-59.999995 40,59.999995 z"
-       id="path11342"
-       inkscape:connector-curvature="0" />
-    <circle
-       style="fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       id="path4517-0-8-5-25-0-0"
-       cx="572.53442"
-       cy="-98.035103"
-       r="3.4908931" />
-    <g
-       id="g7055"
-       transform="translate(350.00001,-10)">
-      <path
-         sodipodi:nodetypes="cc"
-         inkscape:connector-curvature="0"
-         id="path1868-08-3"
-         d="m 277.53439,-133.0351 20,30"
-         style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:url(#marker6464-5)" />
-      <path
-         sodipodi:nodetypes="cc"
-         inkscape:connector-curvature="0"
-         id="path1870-9-9"
-         d="m 307.53439,-103.0351 20,-30"
-         style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:url(#marker2471)" />
-      <path
-         sodipodi:nodetypes="cc"
-         inkscape:connector-curvature="0"
-         id="path1872-2-3"
-         d="m 327.53439,-143.0351 h -50"
-         style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:url(#marker6744-4)" />
-    </g>
-    <circle
-       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       id="path4517-0-8-5-91-0-97"
-       cx="492.53439"
-       cy="-98.035103"
-       r="3.4908931" />
-    <circle
-       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       id="path4517-0-8-5-91-0-3"
-       cx="612.53442"
-       cy="-158.0351"
-       r="3.4908931" />
-    <path
-       style="fill:none;stroke:#ff0000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-       d="m 572.53439,-98.0351 c -3.33453,-1.667265 -6.66787,-3.33393 -10,-5"
-       id="path18649"
-       inkscape:connector-curvature="0"
-       inkscape:path-effect="#path-effect18651"
-       inkscape:original-d="m 572.53439,-98.0351 c -3.33433,-1.667667 -6.66767,-3.33433 -10,-5" />
-    <path
-       style="fill:none;stroke:#ff0000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-       d="m 652.53439,-98.0351 c 0,-3.94922 0,-7.89745 0,-11.84467"
-       id="path19536"
-       inkscape:connector-curvature="0"
-       inkscape:path-effect="#path-effect19538"
-       inkscape:original-d="m 652.53439,-98.0351 c 10e-4,-3.94922 10e-4,-7.89745 0,-11.84467" />
-  </g>
-</svg>
diff --git a/registry/vulkan/images/primitive_topology_triangle_list_with_adjacency.svg b/registry/vulkan/images/primitive_topology_triangle_list_with_adjacency.svg
deleted file mode 100644
index fc240d4..0000000
--- a/registry/vulkan/images/primitive_topology_triangle_list_with_adjacency.svg
+++ /dev/null
@@ -1,502 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Created with Inkscape (http://www.inkscape.org/) -->
-
-<svg
-   xmlns:dc="http://purl.org/dc/elements/1.1/"
-   xmlns:cc="http://creativecommons.org/ns#"
-   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
-   xmlns:svg="http://www.w3.org/2000/svg"
-   xmlns="http://www.w3.org/2000/svg"
-   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
-   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
-   width="409.51437"
-   height="165.99219"
-   viewBox="0 0 409.51438 165.99219"
-   version="1.1"
-   id="svg8653"
-   inkscape:version="0.92.2 5c3e80d, 2017-08-06"
-   sodipodi:docname="primitive_topology_triangle_list_with_adjacency.svg">
-  <defs
-     id="defs8647">
-    <inkscape:path-effect
-       effect="bspline"
-       id="path-effect20425"
-       is_visible="true"
-       weight="33.333333"
-       steps="2"
-       helper_size="0"
-       apply_no_weight="true"
-       apply_with_weight="true"
-       only_selected="false" />
-    <inkscape:path-effect
-       effect="bspline"
-       id="path-effect20373"
-       is_visible="true"
-       weight="33.333333"
-       steps="2"
-       helper_size="0"
-       apply_no_weight="true"
-       apply_with_weight="true"
-       only_selected="false" />
-    <marker
-       inkscape:isstock="true"
-       style="overflow:visible"
-       id="marker3039"
-       refX="0"
-       refY="0"
-       orient="auto"
-       inkscape:stockid="Arrow1Mend">
-      <path
-         transform="matrix(-0.4,0,0,-0.4,-4,0)"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         id="path3037"
-         inkscape:connector-curvature="0" />
-    </marker>
-    <marker
-       inkscape:isstock="true"
-       style="overflow:visible"
-       id="marker2891"
-       refX="0"
-       refY="0"
-       orient="auto"
-       inkscape:stockid="Arrow1Mend">
-      <path
-         transform="matrix(-0.4,0,0,-0.4,-4,0)"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         id="path2889"
-         inkscape:connector-curvature="0" />
-    </marker>
-    <marker
-       inkscape:stockid="Arrow1Mend"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="Arrow1Mend"
-       style="overflow:visible"
-       inkscape:isstock="true"
-       inkscape:collect="always">
-      <path
-         id="path890"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         transform="matrix(-0.4,0,0,-0.4,-4,0)"
-         inkscape:connector-curvature="0" />
-    </marker>
-    <marker
-       inkscape:stockid="Arrow1Mstart"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="marker6464-8"
-       style="overflow:visible"
-       inkscape:isstock="true">
-      <path
-         inkscape:connector-curvature="0"
-         id="path6462-2"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         transform="matrix(0.4,0,0,0.4,4,0)" />
-    </marker>
-    <marker
-       inkscape:isstock="true"
-       style="overflow:visible"
-       id="marker2471-7"
-       refX="0"
-       refY="0"
-       orient="auto"
-       inkscape:stockid="Arrow1Mstart"
-       inkscape:collect="always">
-      <path
-         inkscape:connector-curvature="0"
-         transform="matrix(0.4,0,0,0.4,4,0)"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         id="path2469-6" />
-    </marker>
-    <marker
-       inkscape:stockid="Arrow1Mstart"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="marker6744-8"
-       style="overflow:visible"
-       inkscape:isstock="true">
-      <path
-         inkscape:connector-curvature="0"
-         id="path6742-9"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         transform="matrix(0.4,0,0,0.4,4,0)" />
-    </marker>
-    <marker
-       inkscape:stockid="Arrow1Mstart"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="marker6744-8-2"
-       style="overflow:visible"
-       inkscape:isstock="true">
-      <path
-         inkscape:connector-curvature="0"
-         id="path6742-9-67"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         style="fill:#fb0000;fill-opacity:1;fill-rule:evenodd;stroke:#fb0000;stroke-width:1.00000003pt;stroke-opacity:1"
-         transform="matrix(0.4,0,0,0.4,4,0)" />
-    </marker>
-    <marker
-       inkscape:stockid="Arrow1Mstart"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="marker6464-8-13-5"
-       style="overflow:visible"
-       inkscape:isstock="true">
-      <path
-         inkscape:connector-curvature="0"
-         id="path6462-2-3-3"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         style="fill:#fb0000;fill-opacity:1;fill-rule:evenodd;stroke:#fb0000;stroke-width:1.00000003pt;stroke-opacity:1"
-         transform="matrix(0.4,0,0,0.4,4,0)" />
-    </marker>
-  </defs>
-  <sodipodi:namedview
-     id="base"
-     pagecolor="#ffffff"
-     bordercolor="#666666"
-     borderopacity="1.0"
-     inkscape:pageopacity="0.0"
-     inkscape:pageshadow="2"
-     inkscape:zoom="3.4752572"
-     inkscape:cx="204.72593"
-     inkscape:cy="83.003907"
-     inkscape:document-units="px"
-     inkscape:current-layer="layer1"
-     showgrid="true"
-     inkscape:window-width="1920"
-     inkscape:window-height="1001"
-     inkscape:window-x="-9"
-     inkscape:window-y="-9"
-     inkscape:window-maximized="0"
-     fit-margin-top="1"
-     fit-margin-left="1"
-     fit-margin-right="1"
-     fit-margin-bottom="1"
-     inkscape:snap-grids="true"
-     inkscape:snap-text-baseline="true"
-     inkscape:snap-object-midpoints="true"
-     units="px"
-     borderlayer="false">
-    <inkscape:grid
-       type="xygrid"
-       id="grid9626"
-       originx="4.4908931"
-       originy="-436.88283" />
-  </sodipodi:namedview>
-  <metadata
-     id="metadata8650">
-    <rdf:RDF>
-      <cc:Work
-         rdf:about="">
-        <dc:format>image/svg+xml</dc:format>
-        <dc:type
-           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
-        <dc:title />
-      </cc:Work>
-    </rdf:RDF>
-  </metadata>
-  <g
-     inkscape:label="Layer 1"
-     inkscape:groupmode="layer"
-     id="layer1"
-     transform="translate(-8.0435002,180.91011)">
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
-       x="52.534393"
-       y="-78.03511"
-       id="text5070-2-2-9-9"><tspan
-         sodipodi:role="line"
-         id="tspan5068-0-3-36-9"
-         x="52.534393"
-         y="-78.03511"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">0</tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
-       x="132.53439"
-       y="-78.03511"
-       id="text5070-2-2-9-9-1"><tspan
-         sodipodi:role="line"
-         id="tspan5068-0-3-36-9-3"
-         x="132.53439"
-         y="-78.03511"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">4</tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
-       x="92.534393"
-       y="-168.03511"
-       id="text5070-2-2-9-9-7"><tspan
-         sodipodi:role="line"
-         id="tspan5068-0-3-36-9-6"
-         x="92.534393"
-         y="-168.03511"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">2</tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
-       x="12.534393"
-       y="-168.03511"
-       id="text5070-2-2-9-9-6"><tspan
-         sodipodi:role="line"
-         id="tspan5068-0-3-36-9-4"
-         x="12.534393"
-         y="-168.03511"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">1</tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
-       x="92.534393"
-       y="-18.03511"
-       id="text5070-2-2-9-9-41"><tspan
-         sodipodi:role="line"
-         id="tspan5068-0-3-36-9-1"
-         x="92.534393"
-         y="-18.03511"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">5</tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
-       x="172.53439"
-       y="-168.03511"
-       id="text5070-2-2-9-9-77"><tspan
-         sodipodi:role="line"
-         id="tspan5068-0-3-36-9-5"
-         x="172.53439"
-         y="-168.03511"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">3</tspan></text>
-    <circle
-       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       id="path4517-0-8-5-8"
-       cx="12.534393"
-       cy="-158.03511"
-       r="3.4908931" />
-    <circle
-       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       id="path4517-0-8-5-91"
-       cx="92.534393"
-       cy="-158.03511"
-       r="3.4908931" />
-    <circle
-       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       id="path4517-0-8-5-2"
-       cx="172.53439"
-       cy="-158.03511"
-       r="3.4908931" />
-    <circle
-       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       id="path4517-0-8-5-25"
-       cx="132.53439"
-       cy="-98.03511"
-       r="3.4908931" />
-    <circle
-       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       id="path4517-0-8-5-80"
-       cx="92.534393"
-       cy="-38.035107"
-       r="3.4908931" />
-    <path
-       style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:4, 4;stroke-dashoffset:0;stroke-opacity:1"
-       d="m 12.534393,-158.03511 80,120.000002 79.999997,-120.000002 z"
-       id="path1690"
-       inkscape:connector-curvature="0" />
-    <path
-       style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-       d="m 52.534393,-98.035108 40,-60.000002 39.999997,60.000002 z"
-       id="path1700"
-       inkscape:connector-curvature="0" />
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
-       x="292.53439"
-       y="-106.41011"
-       id="text5070-2-2-9-9-54"><tspan
-         sodipodi:role="line"
-         id="tspan5068-0-3-36-9-0"
-         x="292.53439"
-         y="-106.41011"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">6</tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
-       x="372.53442"
-       y="-106.4023"
-       id="text5070-2-2-9-9-1-5"><tspan
-         sodipodi:role="line"
-         id="tspan5068-0-3-36-9-3-0"
-         x="372.53442"
-         y="-106.4023"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">8</tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
-       x="332.53442"
-       y="-16.16011"
-       id="text5070-2-2-9-9-7-9"><tspan
-         sodipodi:role="line"
-         id="tspan5068-0-3-36-9-6-2"
-         x="332.53442"
-         y="-16.16011"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">10</tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
-       x="252.53439"
-       y="-16.363235"
-       id="text5070-2-2-9-9-6-9"><tspan
-         sodipodi:role="line"
-         id="tspan5068-0-3-36-9-4-1"
-         x="252.53439"
-         y="-16.363235"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">11</tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
-       x="332.53442"
-       y="-166.64449"
-       id="text5070-2-2-9-9-41-9"><tspan
-         sodipodi:role="line"
-         id="tspan5068-0-3-36-9-1-7"
-         x="332.53442"
-         y="-166.64449"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">7</tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
-       x="412.53442"
-       y="-16.402298"
-       id="text5070-2-2-9-9-77-2"><tspan
-         sodipodi:role="line"
-         id="tspan5068-0-3-36-9-5-8"
-         x="412.53442"
-         y="-16.402298"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">9</tspan></text>
-    <circle
-       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       id="path4517-0-8-5-8-7"
-       cx="252.53439"
-       cy="38.03511"
-       r="3.4908931"
-       transform="scale(1,-1)" />
-    <circle
-       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       id="path4517-0-8-5-91-3"
-       cx="332.53442"
-       cy="38.03511"
-       r="3.4908931"
-       transform="scale(1,-1)" />
-    <circle
-       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       id="path4517-0-8-5-2-2"
-       cx="412.53442"
-       cy="38.03511"
-       r="3.4908931"
-       transform="scale(1,-1)" />
-    <circle
-       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       id="path4517-0-8-5-25-6"
-       cx="372.53442"
-       cy="98.03511"
-       r="3.4908931"
-       transform="scale(1,-1)" />
-    <circle
-       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       id="path4517-0-8-5-80-2"
-       cx="332.53442"
-       cy="158.03511"
-       r="3.4908931"
-       transform="scale(1,-1)" />
-    <path
-       style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:4, 4;stroke-dashoffset:0;stroke-opacity:1"
-       d="m 252.53439,-38.03511 80,-120 80,120 z"
-       id="path1690-4"
-       inkscape:connector-curvature="0" />
-    <path
-       style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-       d="m 292.53439,-98.03511 40,60 40,-60 z"
-       id="path1700-3"
-       inkscape:connector-curvature="0" />
-    <g
-       id="g4389"
-       transform="translate(2.0000015e-7,-2.5e-6)">
-      <path
-         sodipodi:nodetypes="cc"
-         inkscape:connector-curvature="0"
-         id="path1868"
-         d="m 67.534393,-113.0351 20,-30"
-         style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker3039)" />
-      <path
-         sodipodi:nodetypes="cc"
-         inkscape:connector-curvature="0"
-         id="path1870"
-         d="m 97.534393,-143.0351 19.999997,30"
-         style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker2891)" />
-      <path
-         sodipodi:nodetypes="cc"
-         inkscape:connector-curvature="0"
-         id="path1872"
-         d="M 117.53439,-103.0351 H 67.534393"
-         style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow1Mend)" />
-    </g>
-    <g
-       transform="translate(30.000003,49.999997)"
-       id="g7055-4">
-      <path
-         sodipodi:nodetypes="cc"
-         inkscape:connector-curvature="0"
-         id="path1868-08-3-3"
-         d="m 277.53439,-133.0351 20,30"
-         style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:url(#marker6464-8)" />
-      <path
-         sodipodi:nodetypes="cc"
-         inkscape:connector-curvature="0"
-         id="path1870-9-9-3"
-         d="m 307.53439,-103.0351 20,-30"
-         style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:url(#marker2471-7)" />
-      <path
-         sodipodi:nodetypes="cc"
-         inkscape:connector-curvature="0"
-         id="path1872-2-3-1"
-         d="m 327.53439,-143.0351 h -50"
-         style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:url(#marker6744-8)" />
-    </g>
-    <circle
-       style="fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       id="path4517-0-8-5-91-0-3"
-       cx="292.53439"
-       cy="-98.035088"
-       r="3.4908931" />
-    <circle
-       style="fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       id="path4517-0-8-5-91-0-97"
-       cx="52.534393"
-       cy="-98.035095"
-       r="3.4908931" />
-    <path
-       style="fill:none;stroke:#ff0000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-       d="m 52.534393,-98.035092 c 3.334533,-1.667266 6.667869,-3.333938 10,-4.999998"
-       id="path20371"
-       inkscape:connector-curvature="0"
-       inkscape:path-effect="#path-effect20373"
-       inkscape:original-d="m 52.534393,-98.035092 c 3.334333,-1.667667 6.667667,-3.334338 10,-4.999998" />
-    <path
-       style="fill:none;stroke:#ff0000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-       d="m 292.53439,-98.035092 c 3.33374,1.666869 6.66707,3.333535 10,5"
-       id="path20423"
-       inkscape:connector-curvature="0"
-       inkscape:path-effect="#path-effect20425"
-       inkscape:original-d="m 292.53439,-98.035092 c 3.33434,1.665666 6.66767,3.332333 10,5" />
-  </g>
-</svg>
diff --git a/registry/vulkan/images/primitive_topology_triangle_list_with_adjacency_last.svg b/registry/vulkan/images/primitive_topology_triangle_list_with_adjacency_last.svg
deleted file mode 100644
index 236238b..0000000
--- a/registry/vulkan/images/primitive_topology_triangle_list_with_adjacency_last.svg
+++ /dev/null
@@ -1,513 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Created with Inkscape (http://www.inkscape.org/) -->
-
-<svg
-   xmlns:dc="http://purl.org/dc/elements/1.1/"
-   xmlns:cc="http://creativecommons.org/ns#"
-   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
-   xmlns:svg="http://www.w3.org/2000/svg"
-   xmlns="http://www.w3.org/2000/svg"
-   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
-   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
-   width="409.51437"
-   height="165.99219"
-   viewBox="0 0 409.51438 165.99219"
-   version="1.1"
-   id="svg8653"
-   inkscape:version="0.92.2 5c3e80d, 2017-08-06"
-   sodipodi:docname="primitive_topology_triangle_list_with_adjacency_last.svg">
-  <defs
-     id="defs8647">
-    <inkscape:path-effect
-       effect="bspline"
-       id="path-effect21296"
-       is_visible="true"
-       weight="33.333333"
-       steps="2"
-       helper_size="0"
-       apply_no_weight="true"
-       apply_with_weight="true"
-       only_selected="false" />
-    <inkscape:path-effect
-       effect="bspline"
-       id="path-effect20425"
-       is_visible="true"
-       weight="33.333333"
-       steps="2"
-       helper_size="0"
-       apply_no_weight="true"
-       apply_with_weight="true"
-       only_selected="false" />
-    <inkscape:path-effect
-       effect="bspline"
-       id="path-effect20373"
-       is_visible="true"
-       weight="33.333333"
-       steps="2"
-       helper_size="0"
-       apply_no_weight="true"
-       apply_with_weight="true"
-       only_selected="false" />
-    <marker
-       inkscape:isstock="true"
-       style="overflow:visible"
-       id="marker3039"
-       refX="0"
-       refY="0"
-       orient="auto"
-       inkscape:stockid="Arrow1Mend">
-      <path
-         transform="matrix(-0.4,0,0,-0.4,-4,0)"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         id="path3037"
-         inkscape:connector-curvature="0" />
-    </marker>
-    <marker
-       inkscape:isstock="true"
-       style="overflow:visible"
-       id="marker2891"
-       refX="0"
-       refY="0"
-       orient="auto"
-       inkscape:stockid="Arrow1Mend">
-      <path
-         transform="matrix(-0.4,0,0,-0.4,-4,0)"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         id="path2889"
-         inkscape:connector-curvature="0" />
-    </marker>
-    <marker
-       inkscape:stockid="Arrow1Mend"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="Arrow1Mend"
-       style="overflow:visible"
-       inkscape:isstock="true"
-       inkscape:collect="always">
-      <path
-         id="path890"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         transform="matrix(-0.4,0,0,-0.4,-4,0)"
-         inkscape:connector-curvature="0" />
-    </marker>
-    <marker
-       inkscape:stockid="Arrow1Mstart"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="marker6464-8"
-       style="overflow:visible"
-       inkscape:isstock="true">
-      <path
-         inkscape:connector-curvature="0"
-         id="path6462-2"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         transform="matrix(0.4,0,0,0.4,4,0)" />
-    </marker>
-    <marker
-       inkscape:isstock="true"
-       style="overflow:visible"
-       id="marker2471-7"
-       refX="0"
-       refY="0"
-       orient="auto"
-       inkscape:stockid="Arrow1Mstart"
-       inkscape:collect="always">
-      <path
-         inkscape:connector-curvature="0"
-         transform="matrix(0.4,0,0,0.4,4,0)"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         id="path2469-6" />
-    </marker>
-    <marker
-       inkscape:stockid="Arrow1Mstart"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="marker6744-8"
-       style="overflow:visible"
-       inkscape:isstock="true">
-      <path
-         inkscape:connector-curvature="0"
-         id="path6742-9"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         transform="matrix(0.4,0,0,0.4,4,0)" />
-    </marker>
-    <marker
-       inkscape:stockid="Arrow1Mstart"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="marker6744-8-2"
-       style="overflow:visible"
-       inkscape:isstock="true">
-      <path
-         inkscape:connector-curvature="0"
-         id="path6742-9-67"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         style="fill:#fb0000;fill-opacity:1;fill-rule:evenodd;stroke:#fb0000;stroke-width:1.00000003pt;stroke-opacity:1"
-         transform="matrix(0.4,0,0,0.4,4,0)" />
-    </marker>
-    <marker
-       inkscape:stockid="Arrow1Mstart"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="marker6464-8-13-5"
-       style="overflow:visible"
-       inkscape:isstock="true">
-      <path
-         inkscape:connector-curvature="0"
-         id="path6462-2-3-3"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         style="fill:#fb0000;fill-opacity:1;fill-rule:evenodd;stroke:#fb0000;stroke-width:1.00000003pt;stroke-opacity:1"
-         transform="matrix(0.4,0,0,0.4,4,0)" />
-    </marker>
-  </defs>
-  <sodipodi:namedview
-     id="base"
-     pagecolor="#ffffff"
-     bordercolor="#666666"
-     borderopacity="1.0"
-     inkscape:pageopacity="0.0"
-     inkscape:pageshadow="2"
-     inkscape:zoom="3.4752572"
-     inkscape:cx="204.72593"
-     inkscape:cy="83.003907"
-     inkscape:document-units="px"
-     inkscape:current-layer="layer1"
-     showgrid="true"
-     inkscape:window-width="1920"
-     inkscape:window-height="1155"
-     inkscape:window-x="0"
-     inkscape:window-y="1"
-     inkscape:window-maximized="1"
-     fit-margin-top="1"
-     fit-margin-left="1"
-     fit-margin-right="1"
-     fit-margin-bottom="1"
-     inkscape:snap-grids="true"
-     inkscape:snap-text-baseline="true"
-     inkscape:snap-object-midpoints="true"
-     units="px"
-     borderlayer="false"
-     inkscape:snap-global="true">
-    <inkscape:grid
-       type="xygrid"
-       id="grid9626"
-       originx="4.4908931"
-       originy="-436.88283" />
-  </sodipodi:namedview>
-  <metadata
-     id="metadata8650">
-    <rdf:RDF>
-      <cc:Work
-         rdf:about="">
-        <dc:format>image/svg+xml</dc:format>
-        <dc:type
-           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
-        <dc:title />
-      </cc:Work>
-    </rdf:RDF>
-  </metadata>
-  <g
-     inkscape:label="Layer 1"
-     inkscape:groupmode="layer"
-     id="layer1"
-     transform="translate(-8.0435002,180.91011)">
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
-       x="52.534393"
-       y="-78.03511"
-       id="text5070-2-2-9-9"><tspan
-         sodipodi:role="line"
-         id="tspan5068-0-3-36-9"
-         x="52.534393"
-         y="-78.03511"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">0</tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
-       x="132.53439"
-       y="-78.03511"
-       id="text5070-2-2-9-9-1"><tspan
-         sodipodi:role="line"
-         id="tspan5068-0-3-36-9-3"
-         x="132.53439"
-         y="-78.03511"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">4</tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
-       x="92.534393"
-       y="-168.03511"
-       id="text5070-2-2-9-9-7"><tspan
-         sodipodi:role="line"
-         id="tspan5068-0-3-36-9-6"
-         x="92.534393"
-         y="-168.03511"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">2</tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
-       x="12.534393"
-       y="-168.03511"
-       id="text5070-2-2-9-9-6"><tspan
-         sodipodi:role="line"
-         id="tspan5068-0-3-36-9-4"
-         x="12.534393"
-         y="-168.03511"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">1</tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
-       x="92.534393"
-       y="-18.03511"
-       id="text5070-2-2-9-9-41"><tspan
-         sodipodi:role="line"
-         id="tspan5068-0-3-36-9-1"
-         x="92.534393"
-         y="-18.03511"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">5</tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
-       x="172.53439"
-       y="-168.03511"
-       id="text5070-2-2-9-9-77"><tspan
-         sodipodi:role="line"
-         id="tspan5068-0-3-36-9-5"
-         x="172.53439"
-         y="-168.03511"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">3</tspan></text>
-    <circle
-       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       id="path4517-0-8-5-8"
-       cx="12.534393"
-       cy="-158.03511"
-       r="3.4908931" />
-    <circle
-       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       id="path4517-0-8-5-91"
-       cx="92.534393"
-       cy="-158.03511"
-       r="3.4908931" />
-    <circle
-       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       id="path4517-0-8-5-2"
-       cx="172.53439"
-       cy="-158.03511"
-       r="3.4908931" />
-    <circle
-       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       id="path4517-0-8-5-80"
-       cx="92.534393"
-       cy="-38.035107"
-       r="3.4908931" />
-    <path
-       style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:4, 4;stroke-dashoffset:0;stroke-opacity:1"
-       d="m 12.534393,-158.03511 80,120.000002 79.999997,-120.000002 z"
-       id="path1690"
-       inkscape:connector-curvature="0" />
-    <path
-       style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-       d="m 52.534393,-98.035108 40,-60.000002 39.999997,60.000002 z"
-       id="path1700"
-       inkscape:connector-curvature="0" />
-    <circle
-       style="fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       id="path4517-0-8-5-25"
-       cx="132.53439"
-       cy="-98.03511"
-       r="3.4908931" />
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
-       x="292.53439"
-       y="-106.41011"
-       id="text5070-2-2-9-9-54"><tspan
-         sodipodi:role="line"
-         id="tspan5068-0-3-36-9-0"
-         x="292.53439"
-         y="-106.41011"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">6</tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
-       x="372.53442"
-       y="-106.4023"
-       id="text5070-2-2-9-9-1-5"><tspan
-         sodipodi:role="line"
-         id="tspan5068-0-3-36-9-3-0"
-         x="372.53442"
-         y="-106.4023"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">8</tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
-       x="332.53442"
-       y="-16.16011"
-       id="text5070-2-2-9-9-7-9"><tspan
-         sodipodi:role="line"
-         id="tspan5068-0-3-36-9-6-2"
-         x="332.53442"
-         y="-16.16011"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">10</tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
-       x="252.53439"
-       y="-16.363235"
-       id="text5070-2-2-9-9-6-9"><tspan
-         sodipodi:role="line"
-         id="tspan5068-0-3-36-9-4-1"
-         x="252.53439"
-         y="-16.363235"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">11</tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
-       x="332.53442"
-       y="-166.64449"
-       id="text5070-2-2-9-9-41-9"><tspan
-         sodipodi:role="line"
-         id="tspan5068-0-3-36-9-1-7"
-         x="332.53442"
-         y="-166.64449"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">7</tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
-       x="412.53442"
-       y="-16.402298"
-       id="text5070-2-2-9-9-77-2"><tspan
-         sodipodi:role="line"
-         id="tspan5068-0-3-36-9-5-8"
-         x="412.53442"
-         y="-16.402298"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">9</tspan></text>
-    <circle
-       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       id="path4517-0-8-5-8-7"
-       cx="252.53439"
-       cy="38.03511"
-       r="3.4908931"
-       transform="scale(1,-1)" />
-    <circle
-       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       id="path4517-0-8-5-2-2"
-       cx="412.53442"
-       cy="38.03511"
-       r="3.4908931"
-       transform="scale(1,-1)" />
-    <circle
-       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       id="path4517-0-8-5-25-6"
-       cx="372.53442"
-       cy="98.03511"
-       r="3.4908931"
-       transform="scale(1,-1)" />
-    <circle
-       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       id="path4517-0-8-5-80-2"
-       cx="332.53442"
-       cy="158.03511"
-       r="3.4908931"
-       transform="scale(1,-1)" />
-    <path
-       style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:4, 4;stroke-dashoffset:0;stroke-opacity:1"
-       d="m 252.53439,-38.03511 80,-120 80,120 z"
-       id="path1690-4"
-       inkscape:connector-curvature="0" />
-    <path
-       style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-       d="m 292.53439,-98.03511 40,60 40,-60 z"
-       id="path1700-3"
-       inkscape:connector-curvature="0" />
-    <circle
-       style="fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       id="path4517-0-8-5-91-3"
-       cx="332.53442"
-       cy="38.03511"
-       r="3.4908931"
-       transform="scale(1,-1)" />
-    <g
-       id="g4389"
-       transform="translate(2.0000015e-7,-2.5e-6)">
-      <path
-         sodipodi:nodetypes="cc"
-         inkscape:connector-curvature="0"
-         id="path1868"
-         d="m 67.534393,-113.0351 20,-30"
-         style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker3039)" />
-      <path
-         sodipodi:nodetypes="cc"
-         inkscape:connector-curvature="0"
-         id="path1870"
-         d="m 97.534393,-143.0351 19.999997,30"
-         style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker2891)" />
-      <path
-         sodipodi:nodetypes="cc"
-         inkscape:connector-curvature="0"
-         id="path1872"
-         d="M 117.53439,-103.0351 H 67.534393"
-         style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow1Mend)" />
-    </g>
-    <g
-       transform="translate(30.000003,49.999997)"
-       id="g7055-4">
-      <path
-         sodipodi:nodetypes="cc"
-         inkscape:connector-curvature="0"
-         id="path1868-08-3-3"
-         d="m 277.53439,-133.0351 20,30"
-         style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:url(#marker6464-8)" />
-      <path
-         sodipodi:nodetypes="cc"
-         inkscape:connector-curvature="0"
-         id="path1870-9-9-3"
-         d="m 307.53439,-103.0351 20,-30"
-         style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:url(#marker2471-7)" />
-      <path
-         sodipodi:nodetypes="cc"
-         inkscape:connector-curvature="0"
-         id="path1872-2-3-1"
-         d="m 327.53439,-143.0351 h -50"
-         style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:url(#marker6744-8)" />
-    </g>
-    <circle
-       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       id="path4517-0-8-5-91-0-3"
-       cx="292.53439"
-       cy="-98.035088"
-       r="3.4908931" />
-    <circle
-       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       id="path4517-0-8-5-91-0-97"
-       cx="52.534393"
-       cy="-98.035095"
-       r="3.4908931" />
-    <path
-       style="fill:none;stroke:#ff0000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-       d="m 132.53439,-98.035092 c -3.33453,-1.667265 -6.66786,-3.333928 -10,-4.999998"
-       id="path20371"
-       inkscape:connector-curvature="0"
-       inkscape:path-effect="#path-effect20373"
-       inkscape:original-d="m 132.53439,-98.035092 c -3.33433,-1.667667 -6.66766,-3.334338 -10,-4.999998" />
-    <path
-       style="fill:none;stroke:#ff0000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-       d="m 332.53439,-38.03509 c 0,-4.18888 0,-8.37676 0,-12.56364"
-       id="path21294"
-       inkscape:connector-curvature="0"
-       inkscape:path-effect="#path-effect21296"
-       inkscape:original-d="m 332.53439,-38.03509 c 0.001,-4.18888 0.001,-8.37676 0,-12.56364" />
-  </g>
-</svg>
diff --git a/registry/vulkan/images/primitive_topology_triangle_strip.svg b/registry/vulkan/images/primitive_topology_triangle_strip.svg
deleted file mode 100644
index 964174d..0000000
--- a/registry/vulkan/images/primitive_topology_triangle_strip.svg
+++ /dev/null
@@ -1,1092 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Created with Inkscape (http://www.inkscape.org/) -->
-
-<svg
-   xmlns:dc="http://purl.org/dc/elements/1.1/"
-   xmlns:cc="http://creativecommons.org/ns#"
-   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
-   xmlns:svg="http://www.w3.org/2000/svg"
-   xmlns="http://www.w3.org/2000/svg"
-   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
-   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
-   width="170.32812"
-   height="104.11719"
-   viewBox="0 0 170.32813 104.11719"
-   version="1.1"
-   id="svg8653"
-   inkscape:version="0.92.2 5c3e80d, 2017-08-06"
-   sodipodi:docname="primitive_topology_triangle_strip.svg">
-  <defs
-     id="defs8647">
-    <inkscape:path-effect
-       only_selected="false"
-       apply_with_weight="true"
-       apply_no_weight="true"
-       helper_size="0"
-       steps="2"
-       weight="33.333333"
-       is_visible="true"
-       id="path-effect15046"
-       effect="bspline" />
-    <inkscape:path-effect
-       effect="bspline"
-       id="path-effect15034"
-       is_visible="true"
-       weight="33.333333"
-       steps="2"
-       helper_size="0"
-       apply_no_weight="true"
-       apply_with_weight="true"
-       only_selected="false" />
-    <inkscape:path-effect
-       effect="bspline"
-       id="path-effect14676"
-       is_visible="true"
-       weight="33.333333"
-       steps="2"
-       helper_size="0"
-       apply_no_weight="true"
-       apply_with_weight="true"
-       only_selected="false" />
-    <marker
-       inkscape:stockid="Arrow1Mstart"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="marker6744"
-       style="overflow:visible"
-       inkscape:isstock="true">
-      <path
-         id="path6742"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         transform="matrix(0.4,0,0,0.4,4,0)"
-         inkscape:connector-curvature="0" />
-    </marker>
-    <marker
-       inkscape:stockid="Arrow1Mstart"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="marker6464"
-       style="overflow:visible"
-       inkscape:isstock="true">
-      <path
-         id="path6462"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         transform="matrix(0.4,0,0,0.4,4,0)"
-         inkscape:connector-curvature="0" />
-    </marker>
-    <marker
-       inkscape:isstock="true"
-       style="overflow:visible"
-       id="marker3039"
-       refX="0"
-       refY="0"
-       orient="auto"
-       inkscape:stockid="Arrow1Mend">
-      <path
-         transform="matrix(-0.4,0,0,-0.4,-4,0)"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         id="path3037"
-         inkscape:connector-curvature="0" />
-    </marker>
-    <marker
-       inkscape:isstock="true"
-       style="overflow:visible"
-       id="marker2891"
-       refX="0"
-       refY="0"
-       orient="auto"
-       inkscape:stockid="Arrow1Mend">
-      <path
-         transform="matrix(-0.4,0,0,-0.4,-4,0)"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         id="path2889"
-         inkscape:connector-curvature="0" />
-    </marker>
-    <marker
-       inkscape:stockid="Arrow1Mend"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="Arrow1Mend"
-       style="overflow:visible"
-       inkscape:isstock="true"
-       inkscape:collect="always">
-      <path
-         id="path890"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         transform="matrix(-0.4,0,0,-0.4,-4,0)"
-         inkscape:connector-curvature="0" />
-    </marker>
-    <marker
-       inkscape:isstock="true"
-       style="overflow:visible"
-       id="marker2335"
-       refX="0"
-       refY="0"
-       orient="auto"
-       inkscape:stockid="Arrow1Mstart">
-      <path
-         transform="matrix(0.4,0,0,0.4,4,0)"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         id="path2333"
-         inkscape:connector-curvature="0" />
-    </marker>
-    <marker
-       inkscape:stockid="Torso"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="Torso"
-       style="overflow:visible"
-       inkscape:isstock="true">
-      <g
-         id="g1107"
-         transform="scale(0.7)"
-         style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-opacity:1">
-        <path
-           id="path1093"
-           d="m -4.7792281,-3.239542 c 2.350374,0.3659393 5.30026732,1.9375477 5.03715532,3.62748546 C -0.00518779,2.0778819 -2.2126741,2.6176539 -4.5630471,2.2517169 -6.9134221,1.8857769 -8.521035,0.75201414 -8.257922,-0.93792336 -7.994809,-2.6278615 -7.1296041,-3.6054813 -4.7792281,-3.239542 Z"
-           style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.25;stroke-opacity:1"
-           inkscape:connector-curvature="0" />
-        <path
-           id="path1095"
-           d="M 4.4598789,0.08866574 C -2.5564571,-4.378332 5.2248769,-3.9061806 -0.84829578,-8.7197331"
-           style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-           inkscape:connector-curvature="0" />
-        <path
-           id="path1097"
-           d="M 4.9298719,0.05752074 C -1.3872731,1.7494689 1.8027579,5.4782079 -4.9448731,7.5462725"
-           style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-           inkscape:connector-curvature="0" />
-        <rect
-           id="rect1099"
-           transform="matrix(0.527536,-0.849533,0.887668,0.460484,0,0)"
-           y="-1.7408575"
-           x="-10.391706"
-           height="2.7608147"
-           width="2.6366582"
-           style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1" />
-        <rect
-           id="rect1101"
-           transform="matrix(0.671205,-0.741272,0.790802,0.612072,0,0)"
-           y="-7.9629307"
-           x="4.9587269"
-           height="2.8614161"
-           width="2.7327356"
-           style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1" />
-        <path
-           id="path1103"
-           transform="matrix(0,-1.109517,1.109517,0,25.96648,19.71619)"
-           d="m 16.779951,-28.685045 a 0.60731727,0.60731727 0 1 0 -1.214634,0 0.60731727,0.60731727 0 1 0 1.214634,0 z"
-           style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-           inkscape:connector-curvature="0" />
-        <path
-           id="path1105"
-           transform="matrix(0,-1.109517,1.109517,0,26.8245,16.99126)"
-           d="m 16.779951,-28.685045 a 0.60731727,0.60731727 0 1 0 -1.214634,0 0.60731727,0.60731727 0 1 0 1.214634,0 z"
-           style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-           inkscape:connector-curvature="0" />
-      </g>
-    </marker>
-    <marker
-       inkscape:stockid="Tail"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="Tail"
-       style="overflow:visible"
-       inkscape:isstock="true">
-      <g
-         id="g929"
-         transform="scale(-1.2)"
-         style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-opacity:1">
-        <path
-           id="path917"
-           d="M -3.8048674,-3.9585227 0.54352094,0"
-           style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.80000001;stroke-linecap:round;stroke-opacity:1"
-           inkscape:connector-curvature="0" />
-        <path
-           id="path919"
-           d="M -1.2866832,-3.9585227 3.0617053,0"
-           style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.80000001;stroke-linecap:round;stroke-opacity:1"
-           inkscape:connector-curvature="0" />
-        <path
-           id="path921"
-           d="M 1.3053582,-3.9585227 5.6537466,0"
-           style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.80000001;stroke-linecap:round;stroke-opacity:1"
-           inkscape:connector-curvature="0" />
-        <path
-           id="path923"
-           d="M -3.8048674,4.1775838 0.54352094,0.21974226"
-           style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.80000001;stroke-linecap:round;stroke-opacity:1"
-           inkscape:connector-curvature="0" />
-        <path
-           id="path925"
-           d="M -1.2866832,4.1775838 3.0617053,0.21974226"
-           style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.80000001;stroke-linecap:round;stroke-opacity:1"
-           inkscape:connector-curvature="0" />
-        <path
-           id="path927"
-           d="M 1.3053582,4.1775838 5.6537466,0.21974226"
-           style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.80000001;stroke-linecap:round;stroke-opacity:1"
-           inkscape:connector-curvature="0" />
-      </g>
-    </marker>
-    <marker
-       inkscape:stockid="Legs"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="Legs"
-       style="overflow:visible"
-       inkscape:isstock="true">
-      <g
-         id="g1090"
-         transform="scale(-0.7)"
-         style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-opacity:1">
-        <g
-           id="g1084"
-           transform="matrix(0,-1,-1,0,20.70862,21.31391)"
-           style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-opacity:1">
-          <path
-             id="path1080"
-             d="m 21.22125,20.67536 c -6.910151,4.721157 -2.454525,6.606844 -5.841071,13.443235"
-             style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-             inkscape:connector-curvature="0" />
-          <path
-             id="path1082"
-             d="m 21.39811,20.54812 c -1.360509,8.347524 3.536072,8.76994 4.505041,13.824958"
-             style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-             inkscape:connector-curvature="0" />
-        </g>
-        <path
-           id="path1086"
-           d="m -14.09007,-6.7318716 -0.922168,4.043383 3.962751,-1.22307 z"
-           style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-           inkscape:connector-curvature="0" />
-        <path
-           id="path1088"
-           d="m -15.215679,4.5567534 1.874127,3.699613 2.266874,-3.472855 z"
-           style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-           inkscape:connector-curvature="0" />
-      </g>
-    </marker>
-    <marker
-       inkscape:stockid="Scissors"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="Scissors"
-       style="overflow:visible"
-       inkscape:isstock="true">
-      <path
-         id="schere"
-         d="M 9.0898857,-3.6061018 C 8.1198849,-4.7769976 6.3697607,-4.7358294 5.0623558,-4.2327734 l -8.2124046,3.0779029 c -2.3882933,-1.3067135 -4.7482873,-0.9325372 -4.7482873,-1.5687873 0,-0.4973164 0.4566662,-0.3883222 0.3883068,-1.6831941 -0.065635,-1.2432767 -1.3635771,-2.1630796 -2.5903987,-2.0816435 -1.227271,-0.00735 -2.499439,0.9331613 -2.510341,2.2300611 -0.09143,1.3063864 1.007209,2.5196896 2.306764,2.6052316 1.5223406,0.2266616 4.218258,-0.6955566 5.482945,1.57086006 -0.9422847,1.73825774 -2.6140244,1.74307674 -4.1255107,1.65607034 -1.2548743,-0.072235 -2.7620933,0.2873979 -3.3606483,1.5208605 -0.578367,1.1820862 -0.0112,2.8646022 1.316749,3.226412 1.3401912,0.4918277 3.1806689,-0.129711 3.4993722,-1.6707242 0.2456585,-1.187823 -0.5953659,-1.7459574 -0.2725074,-2.1771537 0.2436135,-0.32536 1.7907806,-0.1368452 4.5471053,-1.3748244 L 5.6763468,4.2330688 C 6.8000164,4.5467672 8.1730685,4.5362646 9.1684433,3.4313614 l -9.22008423,-3.48508362 z m -18.3078016,-1.900504 c 1.294559,0.7227998 1.1888392,2.6835702 -0.1564272,3.0632889 -1.2165179,0.423661 -2.7710269,-0.7589694 -2.3831779,-2.0774648 0.227148,-1.0818519 1.653387,-1.480632 2.5396051,-0.9858241 z m 0.056264,8.0173649 c 1.3508301,0.4988648 1.1214429,2.7844356 -0.2522207,3.091609 -0.9110594,0.3163391 -2.2135494,-0.1387976 -2.3056964,-1.2121394 -0.177609,-1.305055 1.356085,-2.4841482 2.5579171,-1.8794696 z"
-         style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-opacity:1"
-         inkscape:connector-curvature="0" />
-    </marker>
-    <marker
-       inkscape:stockid="TriangleInS"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="TriangleInS"
-       style="overflow:visible"
-       inkscape:isstock="true">
-      <path
-         id="path1020"
-         d="M 5.77,0 -2.88,5 V -5 Z"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         transform="scale(-0.2)"
-         inkscape:connector-curvature="0" />
-    </marker>
-    <marker
-       inkscape:stockid="DiamondS"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="DiamondS"
-       style="overflow:visible"
-       inkscape:isstock="true">
-      <path
-         id="path966"
-         d="M 0,-7.0710768 -7.0710894,0 0,7.0710589 7.0710462,0 Z"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         transform="scale(0.2)"
-         inkscape:connector-curvature="0" />
-    </marker>
-    <marker
-       inkscape:stockid="Arrow2Send"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="Arrow2Send"
-       style="overflow:visible"
-       inkscape:isstock="true">
-      <path
-         id="path914"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
-         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
-         transform="matrix(-0.3,0,0,-0.3,0.69,0)"
-         inkscape:connector-curvature="0" />
-    </marker>
-    <marker
-       inkscape:stockid="Arrow2Mend"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="Arrow2Mend"
-       style="overflow:visible"
-       inkscape:isstock="true">
-      <path
-         id="path908"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
-         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
-         transform="scale(-0.6)"
-         inkscape:connector-curvature="0" />
-    </marker>
-    <marker
-       inkscape:stockid="TriangleInM"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="TriangleInM"
-       style="overflow:visible"
-       inkscape:isstock="true">
-      <path
-         id="path1017"
-         d="M 5.77,0 -2.88,5 V -5 Z"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         transform="scale(-0.4)"
-         inkscape:connector-curvature="0" />
-    </marker>
-    <marker
-       inkscape:stockid="Arrow1Lend"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="Arrow1Lend"
-       style="overflow:visible"
-       inkscape:isstock="true">
-      <path
-         id="path884"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         transform="matrix(-0.8,0,0,-0.8,-10,0)"
-         inkscape:connector-curvature="0" />
-    </marker>
-    <marker
-       inkscape:isstock="true"
-       style="overflow:visible"
-       id="marker3039-4"
-       refX="0"
-       refY="0"
-       orient="auto"
-       inkscape:stockid="Arrow1Mend">
-      <path
-         inkscape:connector-curvature="0"
-         transform="matrix(-0.4,0,0,-0.4,-4,0)"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         id="path3037-9" />
-    </marker>
-    <marker
-       inkscape:isstock="true"
-       style="overflow:visible"
-       id="marker2891-6"
-       refX="0"
-       refY="0"
-       orient="auto"
-       inkscape:stockid="Arrow1Mend">
-      <path
-         inkscape:connector-curvature="0"
-         transform="matrix(-0.4,0,0,-0.4,-4,0)"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         id="path2889-8" />
-    </marker>
-    <marker
-       inkscape:isstock="true"
-       style="overflow:visible"
-       id="marker3039-0"
-       refX="0"
-       refY="0"
-       orient="auto"
-       inkscape:stockid="Arrow1Mend">
-      <path
-         inkscape:connector-curvature="0"
-         transform="matrix(-0.4,0,0,-0.4,-4,0)"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         id="path3037-5" />
-    </marker>
-    <marker
-       inkscape:isstock="true"
-       style="overflow:visible"
-       id="marker2891-7"
-       refX="0"
-       refY="0"
-       orient="auto"
-       inkscape:stockid="Arrow1Mend">
-      <path
-         inkscape:connector-curvature="0"
-         transform="matrix(-0.4,0,0,-0.4,-4,0)"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         id="path2889-5" />
-    </marker>
-    <marker
-       inkscape:isstock="true"
-       style="overflow:visible"
-       id="marker3039-9"
-       refX="0"
-       refY="0"
-       orient="auto"
-       inkscape:stockid="Arrow1Mend">
-      <path
-         inkscape:connector-curvature="0"
-         transform="matrix(-0.4,0,0,-0.4,-4,0)"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         id="path3037-2" />
-    </marker>
-    <marker
-       inkscape:isstock="true"
-       style="overflow:visible"
-       id="marker2891-0"
-       refX="0"
-       refY="0"
-       orient="auto"
-       inkscape:stockid="Arrow1Mend">
-      <path
-         inkscape:connector-curvature="0"
-         transform="matrix(-0.4,0,0,-0.4,-4,0)"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         id="path2889-4" />
-    </marker>
-    <marker
-       inkscape:isstock="true"
-       style="overflow:visible"
-       id="marker3039-1"
-       refX="0"
-       refY="0"
-       orient="auto"
-       inkscape:stockid="Arrow1Mend">
-      <path
-         inkscape:connector-curvature="0"
-         transform="matrix(-0.4,0,0,-0.4,-4,0)"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         id="path3037-99" />
-    </marker>
-    <marker
-       inkscape:isstock="true"
-       style="overflow:visible"
-       id="marker2891-75"
-       refX="0"
-       refY="0"
-       orient="auto"
-       inkscape:stockid="Arrow1Mend">
-      <path
-         inkscape:connector-curvature="0"
-         transform="matrix(-0.4,0,0,-0.4,-4,0)"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         id="path2889-3" />
-    </marker>
-    <marker
-       inkscape:stockid="Arrow1Mend"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="Arrow1Mend-9"
-       style="overflow:visible"
-       inkscape:isstock="true"
-       inkscape:collect="always">
-      <path
-         inkscape:connector-curvature="0"
-         id="path890-9"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         transform="matrix(-0.4,0,0,-0.4,-4,0)" />
-    </marker>
-    <marker
-       inkscape:isstock="true"
-       style="overflow:visible"
-       id="marker3039-6"
-       refX="0"
-       refY="0"
-       orient="auto"
-       inkscape:stockid="Arrow1Mend">
-      <path
-         inkscape:connector-curvature="0"
-         transform="matrix(-0.4,0,0,-0.4,-4,0)"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         id="path3037-0" />
-    </marker>
-    <marker
-       inkscape:isstock="true"
-       style="overflow:visible"
-       id="marker2891-8"
-       refX="0"
-       refY="0"
-       orient="auto"
-       inkscape:stockid="Arrow1Mend">
-      <path
-         inkscape:connector-curvature="0"
-         transform="matrix(-0.4,0,0,-0.4,-4,0)"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         id="path2889-7" />
-    </marker>
-    <marker
-       inkscape:isstock="true"
-       style="overflow:visible"
-       id="marker3039-6-3"
-       refX="0"
-       refY="0"
-       orient="auto"
-       inkscape:stockid="Arrow1Mend">
-      <path
-         inkscape:connector-curvature="0"
-         transform="matrix(-0.4,0,0,-0.4,-4,0)"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         id="path3037-0-2" />
-    </marker>
-    <marker
-       inkscape:isstock="true"
-       style="overflow:visible"
-       id="marker2891-8-3"
-       refX="0"
-       refY="0"
-       orient="auto"
-       inkscape:stockid="Arrow1Mend">
-      <path
-         inkscape:connector-curvature="0"
-         transform="matrix(-0.4,0,0,-0.4,-4,0)"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         id="path2889-7-1" />
-    </marker>
-    <marker
-       inkscape:isstock="true"
-       style="overflow:visible"
-       id="marker3039-1-9"
-       refX="0"
-       refY="0"
-       orient="auto"
-       inkscape:stockid="Arrow1Mend">
-      <path
-         inkscape:connector-curvature="0"
-         transform="matrix(-0.4,0,0,-0.4,-4,0)"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         id="path3037-99-5" />
-    </marker>
-    <marker
-       inkscape:isstock="true"
-       style="overflow:visible"
-       id="marker2891-75-9"
-       refX="0"
-       refY="0"
-       orient="auto"
-       inkscape:stockid="Arrow1Mend">
-      <path
-         inkscape:connector-curvature="0"
-         transform="matrix(-0.4,0,0,-0.4,-4,0)"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         id="path2889-3-1" />
-    </marker>
-    <marker
-       inkscape:isstock="true"
-       style="overflow:visible"
-       id="marker3039-2"
-       refX="0"
-       refY="0"
-       orient="auto"
-       inkscape:stockid="Arrow1Mend">
-      <path
-         inkscape:connector-curvature="0"
-         transform="matrix(-0.4,0,0,-0.4,-4,0)"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         id="path3037-53" />
-    </marker>
-    <marker
-       inkscape:isstock="true"
-       style="overflow:visible"
-       id="marker2891-5"
-       refX="0"
-       refY="0"
-       orient="auto"
-       inkscape:stockid="Arrow1Mend">
-      <path
-         inkscape:connector-curvature="0"
-         transform="matrix(-0.4,0,0,-0.4,-4,0)"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         id="path2889-6" />
-    </marker>
-    <marker
-       inkscape:stockid="Arrow1Mstart"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="marker6464-8"
-       style="overflow:visible"
-       inkscape:isstock="true">
-      <path
-         inkscape:connector-curvature="0"
-         id="path6462-2"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         transform="matrix(0.4,0,0,0.4,4,0)" />
-    </marker>
-    <marker
-       inkscape:isstock="true"
-       style="overflow:visible"
-       id="marker2471-7"
-       refX="0"
-       refY="0"
-       orient="auto"
-       inkscape:stockid="Arrow1Mstart"
-       inkscape:collect="always">
-      <path
-         inkscape:connector-curvature="0"
-         transform="matrix(0.4,0,0,0.4,4,0)"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         id="path2469-6" />
-    </marker>
-    <marker
-       inkscape:stockid="Arrow1Mstart"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="marker6744-8"
-       style="overflow:visible"
-       inkscape:isstock="true">
-      <path
-         inkscape:connector-curvature="0"
-         id="path6742-9"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         transform="matrix(0.4,0,0,0.4,4,0)" />
-    </marker>
-    <marker
-       inkscape:stockid="Arrow1Mstart"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="marker6464-0"
-       style="overflow:visible"
-       inkscape:isstock="true">
-      <path
-         inkscape:connector-curvature="0"
-         id="path6462-5"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         transform="matrix(0.4,0,0,0.4,4,0)" />
-    </marker>
-    <marker
-       inkscape:stockid="Arrow1Mstart"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="marker6744-88"
-       style="overflow:visible"
-       inkscape:isstock="true">
-      <path
-         inkscape:connector-curvature="0"
-         id="path6742-5"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         transform="matrix(0.4,0,0,0.4,4,0)" />
-    </marker>
-    <marker
-       inkscape:isstock="true"
-       style="overflow:visible"
-       id="marker3039-1-9-3"
-       refX="0"
-       refY="0"
-       orient="auto"
-       inkscape:stockid="Arrow1Mend">
-      <path
-         inkscape:connector-curvature="0"
-         transform="matrix(-0.4,0,0,-0.4,-4,0)"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         id="path3037-99-5-6" />
-    </marker>
-    <marker
-       inkscape:isstock="true"
-       style="overflow:visible"
-       id="marker2891-75-9-2"
-       refX="0"
-       refY="0"
-       orient="auto"
-       inkscape:stockid="Arrow1Mend">
-      <path
-         inkscape:connector-curvature="0"
-         transform="matrix(-0.4,0,0,-0.4,-4,0)"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         id="path2889-3-1-7" />
-    </marker>
-    <marker
-       inkscape:isstock="true"
-       style="overflow:visible"
-       id="marker3039-2-4"
-       refX="0"
-       refY="0"
-       orient="auto"
-       inkscape:stockid="Arrow1Mend">
-      <path
-         inkscape:connector-curvature="0"
-         transform="matrix(-0.4,0,0,-0.4,-4,0)"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         id="path3037-53-9" />
-    </marker>
-    <marker
-       inkscape:isstock="true"
-       style="overflow:visible"
-       id="marker2891-5-1"
-       refX="0"
-       refY="0"
-       orient="auto"
-       inkscape:stockid="Arrow1Mend">
-      <path
-         inkscape:connector-curvature="0"
-         transform="matrix(-0.4,0,0,-0.4,-4,0)"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         id="path2889-6-6" />
-    </marker>
-    <marker
-       inkscape:isstock="true"
-       style="overflow:visible"
-       id="marker3039-1-9-3-5"
-       refX="0"
-       refY="0"
-       orient="auto"
-       inkscape:stockid="Arrow1Mend">
-      <path
-         inkscape:connector-curvature="0"
-         transform="matrix(-0.4,0,0,-0.4,-4,0)"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         id="path3037-99-5-6-2" />
-    </marker>
-    <marker
-       inkscape:isstock="true"
-       style="overflow:visible"
-       id="marker2891-75-9-2-5"
-       refX="0"
-       refY="0"
-       orient="auto"
-       inkscape:stockid="Arrow1Mend">
-      <path
-         inkscape:connector-curvature="0"
-         transform="matrix(-0.4,0,0,-0.4,-4,0)"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         id="path2889-3-1-7-1" />
-    </marker>
-    <marker
-       inkscape:stockid="Arrow1Mstart"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="marker6464-8-13-5"
-       style="overflow:visible"
-       inkscape:isstock="true">
-      <path
-         inkscape:connector-curvature="0"
-         id="path6462-2-3-3"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         style="fill:#fb0000;fill-opacity:1;fill-rule:evenodd;stroke:#fb0000;stroke-width:1.00000003pt;stroke-opacity:1"
-         transform="matrix(0.4,0,0,0.4,4,0)" />
-    </marker>
-    <marker
-       inkscape:stockid="Arrow1Mstart"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="marker6464-8-13-5-9"
-       style="overflow:visible"
-       inkscape:isstock="true">
-      <path
-         inkscape:connector-curvature="0"
-         id="path6462-2-3-3-2"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         style="fill:#fb0000;fill-opacity:1;fill-rule:evenodd;stroke:#fb0000;stroke-width:1.00000003pt;stroke-opacity:1"
-         transform="matrix(0.4,0,0,0.4,4,0)" />
-    </marker>
-    <marker
-       inkscape:stockid="Arrow1Mstart"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="marker6744-8-2"
-       style="overflow:visible"
-       inkscape:isstock="true">
-      <path
-         inkscape:connector-curvature="0"
-         id="path6742-9-67"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         style="fill:#fb0000;fill-opacity:1;fill-rule:evenodd;stroke:#fb0000;stroke-width:1.00000003pt;stroke-opacity:1"
-         transform="matrix(0.4,0,0,0.4,4,0)" />
-    </marker>
-  </defs>
-  <sodipodi:namedview
-     id="base"
-     pagecolor="#ffffff"
-     bordercolor="#666666"
-     borderopacity="1.0"
-     inkscape:pageopacity="0.0"
-     inkscape:pageshadow="2"
-     inkscape:zoom="8.4291088"
-     inkscape:cx="84.97902"
-     inkscape:cy="52.066407"
-     inkscape:document-units="px"
-     inkscape:current-layer="layer1"
-     showgrid="true"
-     inkscape:window-width="1920"
-     inkscape:window-height="1001"
-     inkscape:window-x="-9"
-     inkscape:window-y="-9"
-     inkscape:window-maximized="0"
-     fit-margin-top="1"
-     fit-margin-left="1"
-     fit-margin-right="1"
-     fit-margin-bottom="1"
-     inkscape:snap-grids="true"
-     inkscape:snap-text-baseline="true"
-     inkscape:snap-object-midpoints="true"
-     units="px"
-     borderlayer="false">
-    <inkscape:grid
-       type="xygrid"
-       id="grid9626"
-       originx="5.0234376"
-       originy="-498.75782" />
-  </sodipodi:namedview>
-  <metadata
-     id="metadata8650">
-    <rdf:RDF>
-      <cc:Work
-         rdf:about="">
-        <dc:format>image/svg+xml</dc:format>
-        <dc:type
-           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
-        <dc:title />
-      </cc:Work>
-    </rdf:RDF>
-  </metadata>
-  <g
-     inkscape:label="Layer 1"
-     inkscape:groupmode="layer"
-     id="layer1"
-     transform="translate(-7.5109558,180.91011)">
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
-       x="12.534393"
-       y="-78.03511"
-       id="text5070-2-2-9-9"><tspan
-         sodipodi:role="line"
-         id="tspan5068-0-3-36-9"
-         x="12.534393"
-         y="-78.03511"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">0</tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
-       x="172.53439"
-       y="-78.035103"
-       id="text5070-2-2-9-9-1"><tspan
-         sodipodi:role="line"
-         id="tspan5068-0-3-36-9-3"
-         x="172.53439"
-         y="-78.035103"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">4</tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
-       x="92.534393"
-       y="-78.035103"
-       id="text5070-2-2-9-9-7"><tspan
-         sodipodi:role="line"
-         id="tspan5068-0-3-36-9-6"
-         x="92.534393"
-         y="-78.035103"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">2</tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
-       x="52.534393"
-       y="-168.0351"
-       id="text5070-2-2-9-9-6"><tspan
-         sodipodi:role="line"
-         id="tspan5068-0-3-36-9-4"
-         x="52.534393"
-         y="-168.0351"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">1</tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
-       x="132.53439"
-       y="-168.03511"
-       id="text5070-2-2-9-9-77"><tspan
-         sodipodi:role="line"
-         id="tspan5068-0-3-36-9-5"
-         x="132.53439"
-         y="-168.03511"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">3</tspan></text>
-    <circle
-       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       id="path4517-0-8-5-8"
-       cx="172.53439"
-       cy="-98.035103"
-       r="3.4908931" />
-    <circle
-       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       id="path4517-0-8-5-2"
-       cx="132.53439"
-       cy="-158.03511"
-       r="3.4908931" />
-    <path
-       style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-       d="m 12.534393,-98.035106 40,-59.999994 h 79.999997 l 40,59.999994 z m 40,-59.999994 39.999997,59.999994 40,-59.999994"
-       id="path875"
-       inkscape:connector-curvature="0" />
-    <g
-       id="g4389"
-       transform="translate(-40,-2.5e-6)">
-      <path
-         sodipodi:nodetypes="cc"
-         inkscape:connector-curvature="0"
-         id="path1868"
-         d="m 67.534393,-113.0351 20,-30"
-         style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker3039)" />
-      <path
-         sodipodi:nodetypes="cc"
-         inkscape:connector-curvature="0"
-         id="path1870"
-         d="m 97.534393,-143.0351 19.999997,30"
-         style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker2891)" />
-      <path
-         sodipodi:nodetypes="cc"
-         inkscape:connector-curvature="0"
-         id="path1872"
-         d="M 117.53439,-103.0351 H 67.534393"
-         style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow1Mend)" />
-    </g>
-    <g
-       transform="translate(39.661444,0.68117295)"
-       id="g4389-5">
-      <path
-         sodipodi:nodetypes="cc"
-         inkscape:connector-curvature="0"
-         id="path1868-6"
-         d="m 67.534393,-113.0351 20,-30"
-         style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker3039-1)" />
-      <path
-         sodipodi:nodetypes="cc"
-         inkscape:connector-curvature="0"
-         id="path1870-4"
-         d="m 97.534393,-143.0351 19.999997,30"
-         style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker2891-75)" />
-      <path
-         sodipodi:nodetypes="cc"
-         inkscape:connector-curvature="0"
-         id="path1872-0"
-         d="M 117.53439,-103.0351 H 67.534393"
-         style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow1Mend-9)" />
-    </g>
-    <g
-       transform="translate(-210,-10.000003)"
-       id="g7055-4">
-      <path
-         sodipodi:nodetypes="cc"
-         inkscape:connector-curvature="0"
-         id="path1868-08-3-3"
-         d="m 277.53439,-133.0351 20,30"
-         style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:url(#marker6464-8)" />
-      <path
-         sodipodi:nodetypes="cc"
-         inkscape:connector-curvature="0"
-         id="path1870-9-9-3"
-         d="m 307.53439,-103.0351 20,-30"
-         style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:url(#marker2471-7)" />
-      <path
-         sodipodi:nodetypes="cc"
-         inkscape:connector-curvature="0"
-         id="path1872-2-3-1"
-         d="m 327.53439,-143.0351 h -50"
-         style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:url(#marker6744-8)" />
-    </g>
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-weight:normal;font-size:40px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none"
-       x="572.53442"
-       y="-168.03511"
-       id="text11340"><tspan
-         sodipodi:role="line"
-         id="tspan11338"
-         x="572.53442"
-         y="-132.64449" /></text>
-    <circle
-       style="fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       id="path4517-0-8-5-91-0-97"
-       cx="12.872943"
-       cy="-98.716286"
-       r="3.4908931" />
-    <circle
-       style="fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       id="path4517-0-8-5-91-0-97-3"
-       cx="92.534393"
-       cy="-98.035103"
-       r="3.4908931" />
-    <circle
-       style="fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       id="path4517-0-8-5-91-0-3"
-       cx="52.534393"
-       cy="-158.0351"
-       r="3.4908931" />
-    <path
-       style="fill:none;stroke:#f50000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-       d="m 12.534393,-98.035103 c 3.334534,-1.667266 6.667869,-3.333937 10.000001,-4.999997"
-       id="path14674"
-       inkscape:connector-curvature="0"
-       inkscape:path-effect="#path-effect14676"
-       inkscape:original-d="m 12.534393,-98.035103 c 3.334334,-1.667666 6.667667,-3.334337 10.000001,-4.999997" />
-    <path
-       style="fill:none;stroke:#ff0000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-       d="m 52.534394,-158.0351 c 3.33373,1.66687 6.667065,3.33353 10,5"
-       id="path15032"
-       inkscape:connector-curvature="0"
-       inkscape:path-effect="#path-effect15034"
-       inkscape:original-d="m 52.534394,-158.0351 c 3.334333,1.66566 6.667666,3.33233 10,5" />
-    <path
-       inkscape:original-d="m 92.534393,-98.035103 c 3.334334,-1.667666 6.667667,-3.334337 9.999997,-4.999997"
-       inkscape:path-effect="#path-effect15046"
-       inkscape:connector-curvature="0"
-       id="path15044"
-       d="m 92.534393,-98.035103 c 3.334534,-1.667266 6.667869,-3.333937 9.999997,-4.999997"
-       style="fill:none;stroke:#f50000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
-  </g>
-</svg>
diff --git a/registry/vulkan/images/primitive_topology_triangle_strip_last.svg b/registry/vulkan/images/primitive_topology_triangle_strip_last.svg
deleted file mode 100644
index cde5f46..0000000
--- a/registry/vulkan/images/primitive_topology_triangle_strip_last.svg
+++ /dev/null
@@ -1,1092 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Created with Inkscape (http://www.inkscape.org/) -->
-
-<svg
-   xmlns:dc="http://purl.org/dc/elements/1.1/"
-   xmlns:cc="http://creativecommons.org/ns#"
-   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
-   xmlns:svg="http://www.w3.org/2000/svg"
-   xmlns="http://www.w3.org/2000/svg"
-   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
-   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
-   width="170.32812"
-   height="104.11719"
-   viewBox="0 0 170.32813 104.11719"
-   version="1.1"
-   id="svg8653"
-   inkscape:version="0.92.2 5c3e80d, 2017-08-06"
-   sodipodi:docname="primitive_topology_triangle_strip_last.svg">
-  <defs
-     id="defs8647">
-    <inkscape:path-effect
-       only_selected="false"
-       apply_with_weight="true"
-       apply_no_weight="true"
-       helper_size="0"
-       steps="2"
-       weight="33.333333"
-       is_visible="true"
-       id="path-effect15046"
-       effect="bspline" />
-    <inkscape:path-effect
-       effect="bspline"
-       id="path-effect15034"
-       is_visible="true"
-       weight="33.333333"
-       steps="2"
-       helper_size="0"
-       apply_no_weight="true"
-       apply_with_weight="true"
-       only_selected="false" />
-    <inkscape:path-effect
-       effect="bspline"
-       id="path-effect14676"
-       is_visible="true"
-       weight="33.333333"
-       steps="2"
-       helper_size="0"
-       apply_no_weight="true"
-       apply_with_weight="true"
-       only_selected="false" />
-    <marker
-       inkscape:stockid="Arrow1Mstart"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="marker6744"
-       style="overflow:visible"
-       inkscape:isstock="true">
-      <path
-         id="path6742"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         transform="matrix(0.4,0,0,0.4,4,0)"
-         inkscape:connector-curvature="0" />
-    </marker>
-    <marker
-       inkscape:stockid="Arrow1Mstart"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="marker6464"
-       style="overflow:visible"
-       inkscape:isstock="true">
-      <path
-         id="path6462"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         transform="matrix(0.4,0,0,0.4,4,0)"
-         inkscape:connector-curvature="0" />
-    </marker>
-    <marker
-       inkscape:isstock="true"
-       style="overflow:visible"
-       id="marker3039"
-       refX="0"
-       refY="0"
-       orient="auto"
-       inkscape:stockid="Arrow1Mend">
-      <path
-         transform="matrix(-0.4,0,0,-0.4,-4,0)"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         id="path3037"
-         inkscape:connector-curvature="0" />
-    </marker>
-    <marker
-       inkscape:isstock="true"
-       style="overflow:visible"
-       id="marker2891"
-       refX="0"
-       refY="0"
-       orient="auto"
-       inkscape:stockid="Arrow1Mend">
-      <path
-         transform="matrix(-0.4,0,0,-0.4,-4,0)"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         id="path2889"
-         inkscape:connector-curvature="0" />
-    </marker>
-    <marker
-       inkscape:stockid="Arrow1Mend"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="Arrow1Mend"
-       style="overflow:visible"
-       inkscape:isstock="true"
-       inkscape:collect="always">
-      <path
-         id="path890"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         transform="matrix(-0.4,0,0,-0.4,-4,0)"
-         inkscape:connector-curvature="0" />
-    </marker>
-    <marker
-       inkscape:isstock="true"
-       style="overflow:visible"
-       id="marker2335"
-       refX="0"
-       refY="0"
-       orient="auto"
-       inkscape:stockid="Arrow1Mstart">
-      <path
-         transform="matrix(0.4,0,0,0.4,4,0)"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         id="path2333"
-         inkscape:connector-curvature="0" />
-    </marker>
-    <marker
-       inkscape:stockid="Torso"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="Torso"
-       style="overflow:visible"
-       inkscape:isstock="true">
-      <g
-         id="g1107"
-         transform="scale(0.7)"
-         style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-opacity:1">
-        <path
-           id="path1093"
-           d="m -4.7792281,-3.239542 c 2.350374,0.3659393 5.30026732,1.9375477 5.03715532,3.62748546 C -0.00518779,2.0778819 -2.2126741,2.6176539 -4.5630471,2.2517169 -6.9134221,1.8857769 -8.521035,0.75201414 -8.257922,-0.93792336 -7.994809,-2.6278615 -7.1296041,-3.6054813 -4.7792281,-3.239542 Z"
-           style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.25;stroke-opacity:1"
-           inkscape:connector-curvature="0" />
-        <path
-           id="path1095"
-           d="M 4.4598789,0.08866574 C -2.5564571,-4.378332 5.2248769,-3.9061806 -0.84829578,-8.7197331"
-           style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-           inkscape:connector-curvature="0" />
-        <path
-           id="path1097"
-           d="M 4.9298719,0.05752074 C -1.3872731,1.7494689 1.8027579,5.4782079 -4.9448731,7.5462725"
-           style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-           inkscape:connector-curvature="0" />
-        <rect
-           id="rect1099"
-           transform="matrix(0.527536,-0.849533,0.887668,0.460484,0,0)"
-           y="-1.7408575"
-           x="-10.391706"
-           height="2.7608147"
-           width="2.6366582"
-           style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1" />
-        <rect
-           id="rect1101"
-           transform="matrix(0.671205,-0.741272,0.790802,0.612072,0,0)"
-           y="-7.9629307"
-           x="4.9587269"
-           height="2.8614161"
-           width="2.7327356"
-           style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1" />
-        <path
-           id="path1103"
-           transform="matrix(0,-1.109517,1.109517,0,25.96648,19.71619)"
-           d="m 16.779951,-28.685045 a 0.60731727,0.60731727 0 1 0 -1.214634,0 0.60731727,0.60731727 0 1 0 1.214634,0 z"
-           style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-           inkscape:connector-curvature="0" />
-        <path
-           id="path1105"
-           transform="matrix(0,-1.109517,1.109517,0,26.8245,16.99126)"
-           d="m 16.779951,-28.685045 a 0.60731727,0.60731727 0 1 0 -1.214634,0 0.60731727,0.60731727 0 1 0 1.214634,0 z"
-           style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-           inkscape:connector-curvature="0" />
-      </g>
-    </marker>
-    <marker
-       inkscape:stockid="Tail"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="Tail"
-       style="overflow:visible"
-       inkscape:isstock="true">
-      <g
-         id="g929"
-         transform="scale(-1.2)"
-         style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-opacity:1">
-        <path
-           id="path917"
-           d="M -3.8048674,-3.9585227 0.54352094,0"
-           style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.80000001;stroke-linecap:round;stroke-opacity:1"
-           inkscape:connector-curvature="0" />
-        <path
-           id="path919"
-           d="M -1.2866832,-3.9585227 3.0617053,0"
-           style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.80000001;stroke-linecap:round;stroke-opacity:1"
-           inkscape:connector-curvature="0" />
-        <path
-           id="path921"
-           d="M 1.3053582,-3.9585227 5.6537466,0"
-           style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.80000001;stroke-linecap:round;stroke-opacity:1"
-           inkscape:connector-curvature="0" />
-        <path
-           id="path923"
-           d="M -3.8048674,4.1775838 0.54352094,0.21974226"
-           style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.80000001;stroke-linecap:round;stroke-opacity:1"
-           inkscape:connector-curvature="0" />
-        <path
-           id="path925"
-           d="M -1.2866832,4.1775838 3.0617053,0.21974226"
-           style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.80000001;stroke-linecap:round;stroke-opacity:1"
-           inkscape:connector-curvature="0" />
-        <path
-           id="path927"
-           d="M 1.3053582,4.1775838 5.6537466,0.21974226"
-           style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.80000001;stroke-linecap:round;stroke-opacity:1"
-           inkscape:connector-curvature="0" />
-      </g>
-    </marker>
-    <marker
-       inkscape:stockid="Legs"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="Legs"
-       style="overflow:visible"
-       inkscape:isstock="true">
-      <g
-         id="g1090"
-         transform="scale(-0.7)"
-         style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-opacity:1">
-        <g
-           id="g1084"
-           transform="matrix(0,-1,-1,0,20.70862,21.31391)"
-           style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-opacity:1">
-          <path
-             id="path1080"
-             d="m 21.22125,20.67536 c -6.910151,4.721157 -2.454525,6.606844 -5.841071,13.443235"
-             style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-             inkscape:connector-curvature="0" />
-          <path
-             id="path1082"
-             d="m 21.39811,20.54812 c -1.360509,8.347524 3.536072,8.76994 4.505041,13.824958"
-             style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-             inkscape:connector-curvature="0" />
-        </g>
-        <path
-           id="path1086"
-           d="m -14.09007,-6.7318716 -0.922168,4.043383 3.962751,-1.22307 z"
-           style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-           inkscape:connector-curvature="0" />
-        <path
-           id="path1088"
-           d="m -15.215679,4.5567534 1.874127,3.699613 2.266874,-3.472855 z"
-           style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-           inkscape:connector-curvature="0" />
-      </g>
-    </marker>
-    <marker
-       inkscape:stockid="Scissors"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="Scissors"
-       style="overflow:visible"
-       inkscape:isstock="true">
-      <path
-         id="schere"
-         d="M 9.0898857,-3.6061018 C 8.1198849,-4.7769976 6.3697607,-4.7358294 5.0623558,-4.2327734 l -8.2124046,3.0779029 c -2.3882933,-1.3067135 -4.7482873,-0.9325372 -4.7482873,-1.5687873 0,-0.4973164 0.4566662,-0.3883222 0.3883068,-1.6831941 -0.065635,-1.2432767 -1.3635771,-2.1630796 -2.5903987,-2.0816435 -1.227271,-0.00735 -2.499439,0.9331613 -2.510341,2.2300611 -0.09143,1.3063864 1.007209,2.5196896 2.306764,2.6052316 1.5223406,0.2266616 4.218258,-0.6955566 5.482945,1.57086006 -0.9422847,1.73825774 -2.6140244,1.74307674 -4.1255107,1.65607034 -1.2548743,-0.072235 -2.7620933,0.2873979 -3.3606483,1.5208605 -0.578367,1.1820862 -0.0112,2.8646022 1.316749,3.226412 1.3401912,0.4918277 3.1806689,-0.129711 3.4993722,-1.6707242 0.2456585,-1.187823 -0.5953659,-1.7459574 -0.2725074,-2.1771537 0.2436135,-0.32536 1.7907806,-0.1368452 4.5471053,-1.3748244 L 5.6763468,4.2330688 C 6.8000164,4.5467672 8.1730685,4.5362646 9.1684433,3.4313614 l -9.22008423,-3.48508362 z m -18.3078016,-1.900504 c 1.294559,0.7227998 1.1888392,2.6835702 -0.1564272,3.0632889 -1.2165179,0.423661 -2.7710269,-0.7589694 -2.3831779,-2.0774648 0.227148,-1.0818519 1.653387,-1.480632 2.5396051,-0.9858241 z m 0.056264,8.0173649 c 1.3508301,0.4988648 1.1214429,2.7844356 -0.2522207,3.091609 -0.9110594,0.3163391 -2.2135494,-0.1387976 -2.3056964,-1.2121394 -0.177609,-1.305055 1.356085,-2.4841482 2.5579171,-1.8794696 z"
-         style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-opacity:1"
-         inkscape:connector-curvature="0" />
-    </marker>
-    <marker
-       inkscape:stockid="TriangleInS"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="TriangleInS"
-       style="overflow:visible"
-       inkscape:isstock="true">
-      <path
-         id="path1020"
-         d="M 5.77,0 -2.88,5 V -5 Z"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         transform="scale(-0.2)"
-         inkscape:connector-curvature="0" />
-    </marker>
-    <marker
-       inkscape:stockid="DiamondS"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="DiamondS"
-       style="overflow:visible"
-       inkscape:isstock="true">
-      <path
-         id="path966"
-         d="M 0,-7.0710768 -7.0710894,0 0,7.0710589 7.0710462,0 Z"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         transform="scale(0.2)"
-         inkscape:connector-curvature="0" />
-    </marker>
-    <marker
-       inkscape:stockid="Arrow2Send"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="Arrow2Send"
-       style="overflow:visible"
-       inkscape:isstock="true">
-      <path
-         id="path914"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
-         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
-         transform="matrix(-0.3,0,0,-0.3,0.69,0)"
-         inkscape:connector-curvature="0" />
-    </marker>
-    <marker
-       inkscape:stockid="Arrow2Mend"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="Arrow2Mend"
-       style="overflow:visible"
-       inkscape:isstock="true">
-      <path
-         id="path908"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
-         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
-         transform="scale(-0.6)"
-         inkscape:connector-curvature="0" />
-    </marker>
-    <marker
-       inkscape:stockid="TriangleInM"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="TriangleInM"
-       style="overflow:visible"
-       inkscape:isstock="true">
-      <path
-         id="path1017"
-         d="M 5.77,0 -2.88,5 V -5 Z"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         transform="scale(-0.4)"
-         inkscape:connector-curvature="0" />
-    </marker>
-    <marker
-       inkscape:stockid="Arrow1Lend"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="Arrow1Lend"
-       style="overflow:visible"
-       inkscape:isstock="true">
-      <path
-         id="path884"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         transform="matrix(-0.8,0,0,-0.8,-10,0)"
-         inkscape:connector-curvature="0" />
-    </marker>
-    <marker
-       inkscape:isstock="true"
-       style="overflow:visible"
-       id="marker3039-4"
-       refX="0"
-       refY="0"
-       orient="auto"
-       inkscape:stockid="Arrow1Mend">
-      <path
-         inkscape:connector-curvature="0"
-         transform="matrix(-0.4,0,0,-0.4,-4,0)"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         id="path3037-9" />
-    </marker>
-    <marker
-       inkscape:isstock="true"
-       style="overflow:visible"
-       id="marker2891-6"
-       refX="0"
-       refY="0"
-       orient="auto"
-       inkscape:stockid="Arrow1Mend">
-      <path
-         inkscape:connector-curvature="0"
-         transform="matrix(-0.4,0,0,-0.4,-4,0)"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         id="path2889-8" />
-    </marker>
-    <marker
-       inkscape:isstock="true"
-       style="overflow:visible"
-       id="marker3039-0"
-       refX="0"
-       refY="0"
-       orient="auto"
-       inkscape:stockid="Arrow1Mend">
-      <path
-         inkscape:connector-curvature="0"
-         transform="matrix(-0.4,0,0,-0.4,-4,0)"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         id="path3037-5" />
-    </marker>
-    <marker
-       inkscape:isstock="true"
-       style="overflow:visible"
-       id="marker2891-7"
-       refX="0"
-       refY="0"
-       orient="auto"
-       inkscape:stockid="Arrow1Mend">
-      <path
-         inkscape:connector-curvature="0"
-         transform="matrix(-0.4,0,0,-0.4,-4,0)"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         id="path2889-5" />
-    </marker>
-    <marker
-       inkscape:isstock="true"
-       style="overflow:visible"
-       id="marker3039-9"
-       refX="0"
-       refY="0"
-       orient="auto"
-       inkscape:stockid="Arrow1Mend">
-      <path
-         inkscape:connector-curvature="0"
-         transform="matrix(-0.4,0,0,-0.4,-4,0)"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         id="path3037-2" />
-    </marker>
-    <marker
-       inkscape:isstock="true"
-       style="overflow:visible"
-       id="marker2891-0"
-       refX="0"
-       refY="0"
-       orient="auto"
-       inkscape:stockid="Arrow1Mend">
-      <path
-         inkscape:connector-curvature="0"
-         transform="matrix(-0.4,0,0,-0.4,-4,0)"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         id="path2889-4" />
-    </marker>
-    <marker
-       inkscape:isstock="true"
-       style="overflow:visible"
-       id="marker3039-1"
-       refX="0"
-       refY="0"
-       orient="auto"
-       inkscape:stockid="Arrow1Mend">
-      <path
-         inkscape:connector-curvature="0"
-         transform="matrix(-0.4,0,0,-0.4,-4,0)"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         id="path3037-99" />
-    </marker>
-    <marker
-       inkscape:isstock="true"
-       style="overflow:visible"
-       id="marker2891-75"
-       refX="0"
-       refY="0"
-       orient="auto"
-       inkscape:stockid="Arrow1Mend">
-      <path
-         inkscape:connector-curvature="0"
-         transform="matrix(-0.4,0,0,-0.4,-4,0)"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         id="path2889-3" />
-    </marker>
-    <marker
-       inkscape:stockid="Arrow1Mend"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="Arrow1Mend-9"
-       style="overflow:visible"
-       inkscape:isstock="true"
-       inkscape:collect="always">
-      <path
-         inkscape:connector-curvature="0"
-         id="path890-9"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         transform="matrix(-0.4,0,0,-0.4,-4,0)" />
-    </marker>
-    <marker
-       inkscape:isstock="true"
-       style="overflow:visible"
-       id="marker3039-6"
-       refX="0"
-       refY="0"
-       orient="auto"
-       inkscape:stockid="Arrow1Mend">
-      <path
-         inkscape:connector-curvature="0"
-         transform="matrix(-0.4,0,0,-0.4,-4,0)"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         id="path3037-0" />
-    </marker>
-    <marker
-       inkscape:isstock="true"
-       style="overflow:visible"
-       id="marker2891-8"
-       refX="0"
-       refY="0"
-       orient="auto"
-       inkscape:stockid="Arrow1Mend">
-      <path
-         inkscape:connector-curvature="0"
-         transform="matrix(-0.4,0,0,-0.4,-4,0)"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         id="path2889-7" />
-    </marker>
-    <marker
-       inkscape:isstock="true"
-       style="overflow:visible"
-       id="marker3039-6-3"
-       refX="0"
-       refY="0"
-       orient="auto"
-       inkscape:stockid="Arrow1Mend">
-      <path
-         inkscape:connector-curvature="0"
-         transform="matrix(-0.4,0,0,-0.4,-4,0)"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         id="path3037-0-2" />
-    </marker>
-    <marker
-       inkscape:isstock="true"
-       style="overflow:visible"
-       id="marker2891-8-3"
-       refX="0"
-       refY="0"
-       orient="auto"
-       inkscape:stockid="Arrow1Mend">
-      <path
-         inkscape:connector-curvature="0"
-         transform="matrix(-0.4,0,0,-0.4,-4,0)"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         id="path2889-7-1" />
-    </marker>
-    <marker
-       inkscape:isstock="true"
-       style="overflow:visible"
-       id="marker3039-1-9"
-       refX="0"
-       refY="0"
-       orient="auto"
-       inkscape:stockid="Arrow1Mend">
-      <path
-         inkscape:connector-curvature="0"
-         transform="matrix(-0.4,0,0,-0.4,-4,0)"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         id="path3037-99-5" />
-    </marker>
-    <marker
-       inkscape:isstock="true"
-       style="overflow:visible"
-       id="marker2891-75-9"
-       refX="0"
-       refY="0"
-       orient="auto"
-       inkscape:stockid="Arrow1Mend">
-      <path
-         inkscape:connector-curvature="0"
-         transform="matrix(-0.4,0,0,-0.4,-4,0)"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         id="path2889-3-1" />
-    </marker>
-    <marker
-       inkscape:isstock="true"
-       style="overflow:visible"
-       id="marker3039-2"
-       refX="0"
-       refY="0"
-       orient="auto"
-       inkscape:stockid="Arrow1Mend">
-      <path
-         inkscape:connector-curvature="0"
-         transform="matrix(-0.4,0,0,-0.4,-4,0)"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         id="path3037-53" />
-    </marker>
-    <marker
-       inkscape:isstock="true"
-       style="overflow:visible"
-       id="marker2891-5"
-       refX="0"
-       refY="0"
-       orient="auto"
-       inkscape:stockid="Arrow1Mend">
-      <path
-         inkscape:connector-curvature="0"
-         transform="matrix(-0.4,0,0,-0.4,-4,0)"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         id="path2889-6" />
-    </marker>
-    <marker
-       inkscape:stockid="Arrow1Mstart"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="marker6464-8"
-       style="overflow:visible"
-       inkscape:isstock="true">
-      <path
-         inkscape:connector-curvature="0"
-         id="path6462-2"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         transform="matrix(0.4,0,0,0.4,4,0)" />
-    </marker>
-    <marker
-       inkscape:isstock="true"
-       style="overflow:visible"
-       id="marker2471-7"
-       refX="0"
-       refY="0"
-       orient="auto"
-       inkscape:stockid="Arrow1Mstart"
-       inkscape:collect="always">
-      <path
-         inkscape:connector-curvature="0"
-         transform="matrix(0.4,0,0,0.4,4,0)"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         id="path2469-6" />
-    </marker>
-    <marker
-       inkscape:stockid="Arrow1Mstart"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="marker6744-8"
-       style="overflow:visible"
-       inkscape:isstock="true">
-      <path
-         inkscape:connector-curvature="0"
-         id="path6742-9"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         transform="matrix(0.4,0,0,0.4,4,0)" />
-    </marker>
-    <marker
-       inkscape:stockid="Arrow1Mstart"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="marker6464-0"
-       style="overflow:visible"
-       inkscape:isstock="true">
-      <path
-         inkscape:connector-curvature="0"
-         id="path6462-5"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         transform="matrix(0.4,0,0,0.4,4,0)" />
-    </marker>
-    <marker
-       inkscape:stockid="Arrow1Mstart"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="marker6744-88"
-       style="overflow:visible"
-       inkscape:isstock="true">
-      <path
-         inkscape:connector-curvature="0"
-         id="path6742-5"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         transform="matrix(0.4,0,0,0.4,4,0)" />
-    </marker>
-    <marker
-       inkscape:isstock="true"
-       style="overflow:visible"
-       id="marker3039-1-9-3"
-       refX="0"
-       refY="0"
-       orient="auto"
-       inkscape:stockid="Arrow1Mend">
-      <path
-         inkscape:connector-curvature="0"
-         transform="matrix(-0.4,0,0,-0.4,-4,0)"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         id="path3037-99-5-6" />
-    </marker>
-    <marker
-       inkscape:isstock="true"
-       style="overflow:visible"
-       id="marker2891-75-9-2"
-       refX="0"
-       refY="0"
-       orient="auto"
-       inkscape:stockid="Arrow1Mend">
-      <path
-         inkscape:connector-curvature="0"
-         transform="matrix(-0.4,0,0,-0.4,-4,0)"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         id="path2889-3-1-7" />
-    </marker>
-    <marker
-       inkscape:isstock="true"
-       style="overflow:visible"
-       id="marker3039-2-4"
-       refX="0"
-       refY="0"
-       orient="auto"
-       inkscape:stockid="Arrow1Mend">
-      <path
-         inkscape:connector-curvature="0"
-         transform="matrix(-0.4,0,0,-0.4,-4,0)"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         id="path3037-53-9" />
-    </marker>
-    <marker
-       inkscape:isstock="true"
-       style="overflow:visible"
-       id="marker2891-5-1"
-       refX="0"
-       refY="0"
-       orient="auto"
-       inkscape:stockid="Arrow1Mend">
-      <path
-         inkscape:connector-curvature="0"
-         transform="matrix(-0.4,0,0,-0.4,-4,0)"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         id="path2889-6-6" />
-    </marker>
-    <marker
-       inkscape:isstock="true"
-       style="overflow:visible"
-       id="marker3039-1-9-3-5"
-       refX="0"
-       refY="0"
-       orient="auto"
-       inkscape:stockid="Arrow1Mend">
-      <path
-         inkscape:connector-curvature="0"
-         transform="matrix(-0.4,0,0,-0.4,-4,0)"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         id="path3037-99-5-6-2" />
-    </marker>
-    <marker
-       inkscape:isstock="true"
-       style="overflow:visible"
-       id="marker2891-75-9-2-5"
-       refX="0"
-       refY="0"
-       orient="auto"
-       inkscape:stockid="Arrow1Mend">
-      <path
-         inkscape:connector-curvature="0"
-         transform="matrix(-0.4,0,0,-0.4,-4,0)"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         id="path2889-3-1-7-1" />
-    </marker>
-    <marker
-       inkscape:stockid="Arrow1Mstart"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="marker6464-8-13-5"
-       style="overflow:visible"
-       inkscape:isstock="true">
-      <path
-         inkscape:connector-curvature="0"
-         id="path6462-2-3-3"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         style="fill:#fb0000;fill-opacity:1;fill-rule:evenodd;stroke:#fb0000;stroke-width:1.00000003pt;stroke-opacity:1"
-         transform="matrix(0.4,0,0,0.4,4,0)" />
-    </marker>
-    <marker
-       inkscape:stockid="Arrow1Mstart"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="marker6464-8-13-5-9"
-       style="overflow:visible"
-       inkscape:isstock="true">
-      <path
-         inkscape:connector-curvature="0"
-         id="path6462-2-3-3-2"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         style="fill:#fb0000;fill-opacity:1;fill-rule:evenodd;stroke:#fb0000;stroke-width:1.00000003pt;stroke-opacity:1"
-         transform="matrix(0.4,0,0,0.4,4,0)" />
-    </marker>
-    <marker
-       inkscape:stockid="Arrow1Mstart"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="marker6744-8-2"
-       style="overflow:visible"
-       inkscape:isstock="true">
-      <path
-         inkscape:connector-curvature="0"
-         id="path6742-9-67"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         style="fill:#fb0000;fill-opacity:1;fill-rule:evenodd;stroke:#fb0000;stroke-width:1.00000003pt;stroke-opacity:1"
-         transform="matrix(0.4,0,0,0.4,4,0)" />
-    </marker>
-  </defs>
-  <sodipodi:namedview
-     id="base"
-     pagecolor="#ffffff"
-     bordercolor="#666666"
-     borderopacity="1.0"
-     inkscape:pageopacity="0.0"
-     inkscape:pageshadow="2"
-     inkscape:zoom="8.4172201"
-     inkscape:cx="85.097656"
-     inkscape:cy="52.066407"
-     inkscape:document-units="px"
-     inkscape:current-layer="layer1"
-     showgrid="true"
-     inkscape:window-width="1920"
-     inkscape:window-height="1155"
-     inkscape:window-x="0"
-     inkscape:window-y="1"
-     inkscape:window-maximized="1"
-     fit-margin-top="1"
-     fit-margin-left="1"
-     fit-margin-right="1"
-     fit-margin-bottom="1"
-     inkscape:snap-grids="true"
-     inkscape:snap-text-baseline="true"
-     inkscape:snap-object-midpoints="true"
-     units="px"
-     borderlayer="false">
-    <inkscape:grid
-       type="xygrid"
-       id="grid9626"
-       originx="5.0234376"
-       originy="-498.75782" />
-  </sodipodi:namedview>
-  <metadata
-     id="metadata8650">
-    <rdf:RDF>
-      <cc:Work
-         rdf:about="">
-        <dc:format>image/svg+xml</dc:format>
-        <dc:type
-           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
-        <dc:title />
-      </cc:Work>
-    </rdf:RDF>
-  </metadata>
-  <g
-     inkscape:label="Layer 1"
-     inkscape:groupmode="layer"
-     id="layer1"
-     transform="translate(-7.5109558,180.91011)">
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
-       x="12.534393"
-       y="-78.03511"
-       id="text5070-2-2-9-9"><tspan
-         sodipodi:role="line"
-         id="tspan5068-0-3-36-9"
-         x="12.534393"
-         y="-78.03511"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">0</tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
-       x="172.53439"
-       y="-78.035103"
-       id="text5070-2-2-9-9-1"><tspan
-         sodipodi:role="line"
-         id="tspan5068-0-3-36-9-3"
-         x="172.53439"
-         y="-78.035103"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">4</tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
-       x="92.534393"
-       y="-78.035103"
-       id="text5070-2-2-9-9-7"><tspan
-         sodipodi:role="line"
-         id="tspan5068-0-3-36-9-6"
-         x="92.534393"
-         y="-78.035103"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">2</tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
-       x="52.534393"
-       y="-168.0351"
-       id="text5070-2-2-9-9-6"><tspan
-         sodipodi:role="line"
-         id="tspan5068-0-3-36-9-4"
-         x="52.534393"
-         y="-168.0351"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">1</tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
-       x="132.53439"
-       y="-168.03511"
-       id="text5070-2-2-9-9-77"><tspan
-         sodipodi:role="line"
-         id="tspan5068-0-3-36-9-5"
-         x="132.53439"
-         y="-168.03511"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">3</tspan></text>
-    <path
-       style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-       d="m 12.534393,-98.035106 40,-59.999994 h 79.999997 l 40,59.999994 z m 40,-59.999994 39.999997,59.999994 40,-59.999994"
-       id="path875"
-       inkscape:connector-curvature="0" />
-    <circle
-       style="fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       id="path4517-0-8-5-2"
-       cx="132.53439"
-       cy="-158.03511"
-       r="3.4908931" />
-    <circle
-       style="fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       id="path4517-0-8-5-8"
-       cx="172.53439"
-       cy="-98.035103"
-       r="3.4908931" />
-    <g
-       id="g4389"
-       transform="translate(-40,-2.5e-6)">
-      <path
-         sodipodi:nodetypes="cc"
-         inkscape:connector-curvature="0"
-         id="path1868"
-         d="m 67.534393,-113.0351 20,-30"
-         style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker3039)" />
-      <path
-         sodipodi:nodetypes="cc"
-         inkscape:connector-curvature="0"
-         id="path1870"
-         d="m 97.534393,-143.0351 19.999997,30"
-         style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker2891)" />
-      <path
-         sodipodi:nodetypes="cc"
-         inkscape:connector-curvature="0"
-         id="path1872"
-         d="M 117.53439,-103.0351 H 67.534393"
-         style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow1Mend)" />
-    </g>
-    <g
-       transform="translate(39.661444,0.68117295)"
-       id="g4389-5">
-      <path
-         sodipodi:nodetypes="cc"
-         inkscape:connector-curvature="0"
-         id="path1868-6"
-         d="m 67.534393,-113.0351 20,-30"
-         style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker3039-1)" />
-      <path
-         sodipodi:nodetypes="cc"
-         inkscape:connector-curvature="0"
-         id="path1870-4"
-         d="m 97.534393,-143.0351 19.999997,30"
-         style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker2891-75)" />
-      <path
-         sodipodi:nodetypes="cc"
-         inkscape:connector-curvature="0"
-         id="path1872-0"
-         d="M 117.53439,-103.0351 H 67.534393"
-         style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow1Mend-9)" />
-    </g>
-    <g
-       transform="translate(-210,-10.000003)"
-       id="g7055-4">
-      <path
-         sodipodi:nodetypes="cc"
-         inkscape:connector-curvature="0"
-         id="path1868-08-3-3"
-         d="m 277.53439,-133.0351 20,30"
-         style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:url(#marker6464-8)" />
-      <path
-         sodipodi:nodetypes="cc"
-         inkscape:connector-curvature="0"
-         id="path1870-9-9-3"
-         d="m 307.53439,-103.0351 20,-30"
-         style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:url(#marker2471-7)" />
-      <path
-         sodipodi:nodetypes="cc"
-         inkscape:connector-curvature="0"
-         id="path1872-2-3-1"
-         d="m 327.53439,-143.0351 h -50"
-         style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:url(#marker6744-8)" />
-    </g>
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-weight:normal;font-size:40px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none"
-       x="572.53442"
-       y="-168.03511"
-       id="text11340"><tspan
-         sodipodi:role="line"
-         id="tspan11338"
-         x="572.53442"
-         y="-132.64449" /></text>
-    <circle
-       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       id="path4517-0-8-5-91-0-97"
-       cx="12.872943"
-       cy="-98.716286"
-       r="3.4908931" />
-    <circle
-       style="fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       id="path4517-0-8-5-91-0-97-3"
-       cx="92.534393"
-       cy="-98.035103"
-       r="3.4908931" />
-    <circle
-       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       id="path4517-0-8-5-91-0-3"
-       cx="52.534393"
-       cy="-158.0351"
-       r="3.4908931" />
-    <path
-       style="fill:none;stroke:#ff0000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-       d="m 92.534393,-98.035103 c -3.334534,-1.667266 -6.667869,-3.333937 -10.000001,-4.999997"
-       id="path14674"
-       inkscape:connector-curvature="0"
-       inkscape:path-effect="#path-effect14676"
-       inkscape:original-d="m 92.534393,-98.035103 c -3.334334,-1.667666 -6.667667,-3.334337 -10.000001,-4.999997" />
-    <path
-       style="fill:none;stroke:#ff0000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-       d="m 133.53439,-158.0351 c -3.33373,1.66686 -6.66706,3.33353 -10,5"
-       id="path15032"
-       inkscape:connector-curvature="0"
-       inkscape:path-effect="#path-effect15034"
-       inkscape:original-d="m 133.53439,-158.0351 c -3.33433,1.66566 -6.66766,3.33233 -10,5" />
-    <path
-       inkscape:original-d="m 172.53439,-98.035103 c -3.33433,-1.667666 -6.66766,-3.334337 -9.99999,-4.999997"
-       inkscape:path-effect="#path-effect15046"
-       inkscape:connector-curvature="0"
-       id="path15044"
-       d="m 172.53439,-98.035103 c -3.33453,-1.667266 -6.66786,-3.333937 -9.99999,-4.999997"
-       style="fill:none;stroke:#ff0000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
-  </g>
-</svg>
diff --git a/registry/vulkan/images/primitive_topology_triangle_strip_with_adjacency.svg b/registry/vulkan/images/primitive_topology_triangle_strip_with_adjacency.svg
deleted file mode 100644
index 5defb88..0000000
--- a/registry/vulkan/images/primitive_topology_triangle_strip_with_adjacency.svg
+++ /dev/null
@@ -1,1846 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Created with Inkscape (http://www.inkscape.org/) -->
-
-<svg
-   xmlns:dc="http://purl.org/dc/elements/1.1/"
-   xmlns:cc="http://creativecommons.org/ns#"
-   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
-   xmlns:svg="http://www.w3.org/2000/svg"
-   xmlns="http://www.w3.org/2000/svg"
-   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
-   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
-   width="613.95959"
-   height="463.875"
-   viewBox="0 0 613.9596 463.875"
-   version="1.1"
-   id="svg8653"
-   inkscape:version="0.92.2 5c3e80d, 2017-08-06"
-   sodipodi:docname="primitive_topology_triangle_strip_with_adjacency.svg">
-  <defs
-     id="defs8647">
-    <inkscape:path-effect
-       effect="bspline"
-       id="path-effect24990"
-       is_visible="true"
-       weight="33.333333"
-       steps="2"
-       helper_size="0"
-       apply_no_weight="true"
-       apply_with_weight="true"
-       only_selected="false" />
-    <inkscape:path-effect
-       effect="bspline"
-       id="path-effect24986"
-       is_visible="true"
-       weight="33.333333"
-       steps="2"
-       helper_size="0"
-       apply_no_weight="true"
-       apply_with_weight="true"
-       only_selected="false" />
-    <inkscape:path-effect
-       effect="bspline"
-       id="path-effect24982"
-       is_visible="true"
-       weight="33.333333"
-       steps="2"
-       helper_size="0"
-       apply_no_weight="true"
-       apply_with_weight="true"
-       only_selected="false" />
-    <inkscape:path-effect
-       effect="bspline"
-       id="path-effect24978"
-       is_visible="true"
-       weight="33.333333"
-       steps="2"
-       helper_size="0"
-       apply_no_weight="true"
-       apply_with_weight="true"
-       only_selected="false" />
-    <inkscape:path-effect
-       effect="bspline"
-       id="path-effect24974"
-       is_visible="true"
-       weight="33.333333"
-       steps="2"
-       helper_size="0"
-       apply_no_weight="true"
-       apply_with_weight="true"
-       only_selected="false" />
-    <inkscape:path-effect
-       effect="bspline"
-       id="path-effect24970"
-       is_visible="true"
-       weight="33.333333"
-       steps="2"
-       helper_size="0"
-       apply_no_weight="true"
-       apply_with_weight="true"
-       only_selected="false" />
-    <inkscape:path-effect
-       effect="bspline"
-       id="path-effect24966"
-       is_visible="true"
-       weight="33.333333"
-       steps="2"
-       helper_size="0"
-       apply_no_weight="true"
-       apply_with_weight="true"
-       only_selected="false" />
-    <inkscape:path-effect
-       effect="bspline"
-       id="path-effect24962"
-       is_visible="true"
-       weight="33.333333"
-       steps="2"
-       helper_size="0"
-       apply_no_weight="true"
-       apply_with_weight="true"
-       only_selected="false" />
-    <inkscape:path-effect
-       effect="bspline"
-       id="path-effect24958"
-       is_visible="true"
-       weight="33.333333"
-       steps="2"
-       helper_size="0"
-       apply_no_weight="true"
-       apply_with_weight="true"
-       only_selected="false" />
-    <inkscape:path-effect
-       effect="bspline"
-       id="path-effect24666"
-       is_visible="true"
-       weight="33.333333"
-       steps="2"
-       helper_size="0"
-       apply_no_weight="true"
-       apply_with_weight="true"
-       only_selected="false" />
-    <marker
-       inkscape:stockid="Arrow1Mstart"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="marker6464-8"
-       style="overflow:visible"
-       inkscape:isstock="true">
-      <path
-         inkscape:connector-curvature="0"
-         id="path6462-2"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         transform="matrix(0.4,0,0,0.4,4,0)" />
-    </marker>
-    <marker
-       inkscape:isstock="true"
-       style="overflow:visible"
-       id="marker2471-7"
-       refX="0"
-       refY="0"
-       orient="auto"
-       inkscape:stockid="Arrow1Mstart"
-       inkscape:collect="always">
-      <path
-         inkscape:connector-curvature="0"
-         transform="matrix(0.4,0,0,0.4,4,0)"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         id="path2469-6" />
-    </marker>
-    <marker
-       inkscape:stockid="Arrow1Mstart"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="marker6744-8"
-       style="overflow:visible"
-       inkscape:isstock="true">
-      <path
-         inkscape:connector-curvature="0"
-         id="path6742-9"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         transform="matrix(0.4,0,0,0.4,4,0)" />
-    </marker>
-    <marker
-       inkscape:stockid="Arrow1Mstart"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="marker6464-8-0"
-       style="overflow:visible"
-       inkscape:isstock="true">
-      <path
-         inkscape:connector-curvature="0"
-         id="path6462-2-2"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         transform="matrix(0.4,0,0,0.4,4,0)" />
-    </marker>
-    <marker
-       inkscape:isstock="true"
-       style="overflow:visible"
-       id="marker2471-7-8"
-       refX="0"
-       refY="0"
-       orient="auto"
-       inkscape:stockid="Arrow1Mstart"
-       inkscape:collect="always">
-      <path
-         inkscape:connector-curvature="0"
-         transform="matrix(0.4,0,0,0.4,4,0)"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         id="path2469-6-7" />
-    </marker>
-    <marker
-       inkscape:stockid="Arrow1Mstart"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="marker6744-8-7"
-       style="overflow:visible"
-       inkscape:isstock="true">
-      <path
-         inkscape:connector-curvature="0"
-         id="path6742-9-5"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         transform="matrix(0.4,0,0,0.4,4,0)" />
-    </marker>
-    <marker
-       inkscape:stockid="Arrow1Mstart"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="marker6464-8-07"
-       style="overflow:visible"
-       inkscape:isstock="true">
-      <path
-         inkscape:connector-curvature="0"
-         id="path6462-2-5"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         transform="matrix(0.4,0,0,0.4,4,0)" />
-    </marker>
-    <marker
-       inkscape:isstock="true"
-       style="overflow:visible"
-       id="marker2471-7-4"
-       refX="0"
-       refY="0"
-       orient="auto"
-       inkscape:stockid="Arrow1Mstart"
-       inkscape:collect="always">
-      <path
-         inkscape:connector-curvature="0"
-         transform="matrix(0.4,0,0,0.4,4,0)"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         id="path2469-6-5" />
-    </marker>
-    <marker
-       inkscape:stockid="Arrow1Mstart"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="marker6744-8-4"
-       style="overflow:visible"
-       inkscape:isstock="true">
-      <path
-         inkscape:connector-curvature="0"
-         id="path6742-9-6"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         transform="matrix(0.4,0,0,0.4,4,0)" />
-    </marker>
-    <marker
-       inkscape:stockid="Arrow1Mstart"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="marker6464-8-1"
-       style="overflow:visible"
-       inkscape:isstock="true">
-      <path
-         inkscape:connector-curvature="0"
-         id="path6462-2-4"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         transform="matrix(0.4,0,0,0.4,4,0)" />
-    </marker>
-    <marker
-       inkscape:isstock="true"
-       style="overflow:visible"
-       id="marker2471-7-0"
-       refX="0"
-       refY="0"
-       orient="auto"
-       inkscape:stockid="Arrow1Mstart"
-       inkscape:collect="always">
-      <path
-         inkscape:connector-curvature="0"
-         transform="matrix(0.4,0,0,0.4,4,0)"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         id="path2469-6-9" />
-    </marker>
-    <marker
-       inkscape:stockid="Arrow1Mstart"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="marker6744-8-5"
-       style="overflow:visible"
-       inkscape:isstock="true">
-      <path
-         inkscape:connector-curvature="0"
-         id="path6742-9-3"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         transform="matrix(0.4,0,0,0.4,4,0)" />
-    </marker>
-    <marker
-       inkscape:isstock="true"
-       style="overflow:visible"
-       id="marker3039"
-       refX="0"
-       refY="0"
-       orient="auto"
-       inkscape:stockid="Arrow1Mend">
-      <path
-         transform="matrix(-0.4,0,0,-0.4,-4,0)"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         id="path3037"
-         inkscape:connector-curvature="0" />
-    </marker>
-    <marker
-       inkscape:isstock="true"
-       style="overflow:visible"
-       id="marker2891"
-       refX="0"
-       refY="0"
-       orient="auto"
-       inkscape:stockid="Arrow1Mend">
-      <path
-         transform="matrix(-0.4,0,0,-0.4,-4,0)"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         id="path2889"
-         inkscape:connector-curvature="0" />
-    </marker>
-    <marker
-       inkscape:stockid="Arrow1Mend"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="Arrow1Mend"
-       style="overflow:visible"
-       inkscape:isstock="true"
-       inkscape:collect="always">
-      <path
-         id="path890"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         transform="matrix(-0.4,0,0,-0.4,-4,0)"
-         inkscape:connector-curvature="0" />
-    </marker>
-    <marker
-       inkscape:isstock="true"
-       style="overflow:visible"
-       id="marker3039-8"
-       refX="0"
-       refY="0"
-       orient="auto"
-       inkscape:stockid="Arrow1Mend">
-      <path
-         transform="matrix(-0.4,0,0,-0.4,-4,0)"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         id="path3037-8"
-         inkscape:connector-curvature="0" />
-    </marker>
-    <marker
-       inkscape:isstock="true"
-       style="overflow:visible"
-       id="marker2891-8"
-       refX="0"
-       refY="0"
-       orient="auto"
-       inkscape:stockid="Arrow1Mend">
-      <path
-         transform="matrix(-0.4,0,0,-0.4,-4,0)"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         id="path2889-5"
-         inkscape:connector-curvature="0" />
-    </marker>
-    <marker
-       inkscape:stockid="Arrow1Mend"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="Arrow1Mend-2"
-       style="overflow:visible"
-       inkscape:isstock="true"
-       inkscape:collect="always">
-      <path
-         id="path890-4"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         transform="matrix(-0.4,0,0,-0.4,-4,0)"
-         inkscape:connector-curvature="0" />
-    </marker>
-    <marker
-       inkscape:isstock="true"
-       style="overflow:visible"
-       id="marker3039-6"
-       refX="0"
-       refY="0"
-       orient="auto"
-       inkscape:stockid="Arrow1Mend">
-      <path
-         transform="matrix(-0.4,0,0,-0.4,-4,0)"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         id="path3037-2"
-         inkscape:connector-curvature="0" />
-    </marker>
-    <marker
-       inkscape:isstock="true"
-       style="overflow:visible"
-       id="marker2891-1"
-       refX="0"
-       refY="0"
-       orient="auto"
-       inkscape:stockid="Arrow1Mend">
-      <path
-         transform="matrix(-0.4,0,0,-0.4,-4,0)"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         id="path2889-55"
-         inkscape:connector-curvature="0" />
-    </marker>
-    <marker
-       inkscape:stockid="Arrow1Mend"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="Arrow1Mend-6"
-       style="overflow:visible"
-       inkscape:isstock="true"
-       inkscape:collect="always">
-      <path
-         id="path890-6"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         transform="matrix(-0.4,0,0,-0.4,-4,0)"
-         inkscape:connector-curvature="0" />
-    </marker>
-    <marker
-       inkscape:isstock="true"
-       style="overflow:visible"
-       id="marker3039-2"
-       refX="0"
-       refY="0"
-       orient="auto"
-       inkscape:stockid="Arrow1Mend">
-      <path
-         transform="matrix(-0.4,0,0,-0.4,-4,0)"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         id="path3037-6"
-         inkscape:connector-curvature="0" />
-    </marker>
-    <marker
-       inkscape:isstock="true"
-       style="overflow:visible"
-       id="marker2891-11"
-       refX="0"
-       refY="0"
-       orient="auto"
-       inkscape:stockid="Arrow1Mend">
-      <path
-         transform="matrix(-0.4,0,0,-0.4,-4,0)"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         id="path2889-3"
-         inkscape:connector-curvature="0" />
-    </marker>
-    <marker
-       inkscape:stockid="Arrow1Mend"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="Arrow1Mend-8"
-       style="overflow:visible"
-       inkscape:isstock="true"
-       inkscape:collect="always">
-      <path
-         id="path890-7"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         transform="matrix(-0.4,0,0,-0.4,-4,0)"
-         inkscape:connector-curvature="0" />
-    </marker>
-    <marker
-       inkscape:isstock="true"
-       style="overflow:visible"
-       id="marker3039-3"
-       refX="0"
-       refY="0"
-       orient="auto"
-       inkscape:stockid="Arrow1Mend">
-      <path
-         transform="matrix(-0.4,0,0,-0.4,-4,0)"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         id="path3037-7"
-         inkscape:connector-curvature="0" />
-    </marker>
-    <marker
-       inkscape:isstock="true"
-       style="overflow:visible"
-       id="marker2891-7"
-       refX="0"
-       refY="0"
-       orient="auto"
-       inkscape:stockid="Arrow1Mend">
-      <path
-         transform="matrix(-0.4,0,0,-0.4,-4,0)"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         id="path2889-7"
-         inkscape:connector-curvature="0" />
-    </marker>
-    <marker
-       inkscape:stockid="Arrow1Mend"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="Arrow1Mend-9"
-       style="overflow:visible"
-       inkscape:isstock="true"
-       inkscape:collect="always">
-      <path
-         id="path890-71"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         transform="matrix(-0.4,0,0,-0.4,-4,0)"
-         inkscape:connector-curvature="0" />
-    </marker>
-    <marker
-       inkscape:isstock="true"
-       style="overflow:visible"
-       id="marker3039-7"
-       refX="0"
-       refY="0"
-       orient="auto"
-       inkscape:stockid="Arrow1Mend">
-      <path
-         transform="matrix(-0.4,0,0,-0.4,-4,0)"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         id="path3037-70"
-         inkscape:connector-curvature="0" />
-    </marker>
-    <marker
-       inkscape:isstock="true"
-       style="overflow:visible"
-       id="marker2891-71"
-       refX="0"
-       refY="0"
-       orient="auto"
-       inkscape:stockid="Arrow1Mend">
-      <path
-         transform="matrix(-0.4,0,0,-0.4,-4,0)"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         id="path2889-2"
-         inkscape:connector-curvature="0" />
-    </marker>
-    <marker
-       inkscape:stockid="Arrow1Mend"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="Arrow1Mend-0"
-       style="overflow:visible"
-       inkscape:isstock="true"
-       inkscape:collect="always">
-      <path
-         id="path890-1"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         transform="matrix(-0.4,0,0,-0.4,-4,0)"
-         inkscape:connector-curvature="0" />
-    </marker>
-    <marker
-       inkscape:stockid="Arrow1Mstart"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="marker6744-8-79"
-       style="overflow:visible"
-       inkscape:isstock="true">
-      <path
-         inkscape:connector-curvature="0"
-         id="path6742-9-7"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         style="fill:#ff0000;fill-opacity:1;fill-rule:evenodd;stroke:#fe0000;stroke-width:1.00000003pt;stroke-opacity:1"
-         transform="matrix(0.4,0,0,0.4,4,0)" />
-    </marker>
-    <marker
-       inkscape:stockid="Arrow1Mstart"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="marker6464-8-13"
-       style="overflow:visible"
-       inkscape:isstock="true">
-      <path
-         inkscape:connector-curvature="0"
-         id="path6462-2-3"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         style="fill:#fb0000;fill-opacity:1;fill-rule:evenodd;stroke:#fb0000;stroke-width:1.00000003pt;stroke-opacity:1"
-         transform="matrix(0.4,0,0,0.4,4,0)" />
-    </marker>
-    <marker
-       inkscape:stockid="Arrow1Mstart"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="marker6744-8-2"
-       style="overflow:visible"
-       inkscape:isstock="true">
-      <path
-         inkscape:connector-curvature="0"
-         id="path6742-9-67"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         style="fill:#fb0000;fill-opacity:1;fill-rule:evenodd;stroke:#fb0000;stroke-width:1.00000003pt;stroke-opacity:1"
-         transform="matrix(0.4,0,0,0.4,4,0)" />
-    </marker>
-    <marker
-       inkscape:stockid="Arrow1Mstart"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="marker6464-8-13-5"
-       style="overflow:visible"
-       inkscape:isstock="true">
-      <path
-         inkscape:connector-curvature="0"
-         id="path6462-2-3-3"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         style="fill:#fb0000;fill-opacity:1;fill-rule:evenodd;stroke:#fb0000;stroke-width:1.00000003pt;stroke-opacity:1"
-         transform="matrix(0.4,0,0,0.4,4,0)" />
-    </marker>
-    <marker
-       inkscape:stockid="Arrow1Mstart"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="marker6464-8-13-5-4"
-       style="overflow:visible"
-       inkscape:isstock="true">
-      <path
-         inkscape:connector-curvature="0"
-         id="path6462-2-3-3-6"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         style="fill:#fb0000;fill-opacity:1;fill-rule:evenodd;stroke:#fb0000;stroke-width:1.00000003pt;stroke-opacity:1"
-         transform="matrix(0.4,0,0,0.4,4,0)" />
-    </marker>
-    <marker
-       inkscape:stockid="Arrow1Mstart"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="marker6464-8-13-5-6"
-       style="overflow:visible"
-       inkscape:isstock="true">
-      <path
-         inkscape:connector-curvature="0"
-         id="path6462-2-3-3-7"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         style="fill:#fb0000;fill-opacity:1;fill-rule:evenodd;stroke:#fb0000;stroke-width:1.00000003pt;stroke-opacity:1"
-         transform="matrix(0.4,0,0,0.4,4,0)" />
-    </marker>
-    <marker
-       inkscape:stockid="Arrow1Mstart"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="marker6464-8-13-5-2"
-       style="overflow:visible"
-       inkscape:isstock="true">
-      <path
-         inkscape:connector-curvature="0"
-         id="path6462-2-3-3-4"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         style="fill:#fb0000;fill-opacity:1;fill-rule:evenodd;stroke:#fb0000;stroke-width:1.00000003pt;stroke-opacity:1"
-         transform="matrix(0.4,0,0,0.4,4,0)" />
-    </marker>
-    <marker
-       inkscape:stockid="Arrow1Mstart"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="marker6464-8-13-5-0"
-       style="overflow:visible"
-       inkscape:isstock="true">
-      <path
-         inkscape:connector-curvature="0"
-         id="path6462-2-3-3-74"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         style="fill:#fb0000;fill-opacity:1;fill-rule:evenodd;stroke:#fb0000;stroke-width:1.00000003pt;stroke-opacity:1"
-         transform="matrix(0.4,0,0,0.4,4,0)" />
-    </marker>
-    <marker
-       inkscape:stockid="Arrow1Mstart"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="marker6464-8-13-5-1"
-       style="overflow:visible"
-       inkscape:isstock="true">
-      <path
-         inkscape:connector-curvature="0"
-         id="path6462-2-3-3-2"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         style="fill:#fb0000;fill-opacity:1;fill-rule:evenodd;stroke:#fb0000;stroke-width:1.00000003pt;stroke-opacity:1"
-         transform="matrix(0.4,0,0,0.4,4,0)" />
-    </marker>
-    <marker
-       inkscape:stockid="Arrow1Mstart"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="marker6464-8-13-5-9"
-       style="overflow:visible"
-       inkscape:isstock="true">
-      <path
-         inkscape:connector-curvature="0"
-         id="path6462-2-3-3-1"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         style="fill:#fb0000;fill-opacity:1;fill-rule:evenodd;stroke:#fb0000;stroke-width:1.00000003pt;stroke-opacity:1"
-         transform="matrix(0.4,0,0,0.4,4,0)" />
-    </marker>
-    <marker
-       inkscape:stockid="Arrow1Mstart"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="marker6464-8-13-5-29"
-       style="overflow:visible"
-       inkscape:isstock="true">
-      <path
-         inkscape:connector-curvature="0"
-         id="path6462-2-3-3-15"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         style="fill:#fb0000;fill-opacity:1;fill-rule:evenodd;stroke:#fb0000;stroke-width:1.00000003pt;stroke-opacity:1"
-         transform="matrix(0.4,0,0,0.4,4,0)" />
-    </marker>
-    <marker
-       inkscape:stockid="Arrow1Mstart"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="marker6464-8-13-5-41"
-       style="overflow:visible"
-       inkscape:isstock="true">
-      <path
-         inkscape:connector-curvature="0"
-         id="path6462-2-3-3-8"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         style="fill:#fb0000;fill-opacity:1;fill-rule:evenodd;stroke:#fb0000;stroke-width:1.00000003pt;stroke-opacity:1"
-         transform="matrix(0.4,0,0,0.4,4,0)" />
-    </marker>
-    <marker
-       inkscape:stockid="Arrow1Mstart"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="marker6464-8-13-5-5"
-       style="overflow:visible"
-       inkscape:isstock="true">
-      <path
-         inkscape:connector-curvature="0"
-         id="path6462-2-3-3-5"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         style="fill:#fb0000;fill-opacity:1;fill-rule:evenodd;stroke:#fb0000;stroke-width:1.00000003pt;stroke-opacity:1"
-         transform="matrix(0.4,0,0,0.4,4,0)" />
-    </marker>
-    <marker
-       inkscape:stockid="Arrow1Mstart"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="marker6464-8-13-5-3"
-       style="overflow:visible"
-       inkscape:isstock="true">
-      <path
-         inkscape:connector-curvature="0"
-         id="path6462-2-3-3-69"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         style="fill:#fb0000;fill-opacity:1;fill-rule:evenodd;stroke:#fb0000;stroke-width:1.00000003pt;stroke-opacity:1"
-         transform="matrix(0.4,0,0,0.4,4,0)" />
-    </marker>
-    <marker
-       inkscape:stockid="Arrow1Mstart"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="marker6744-8-2-5"
-       style="overflow:visible"
-       inkscape:isstock="true">
-      <path
-         inkscape:connector-curvature="0"
-         id="path6742-9-67-0"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         style="fill:#fb0000;fill-opacity:1;fill-rule:evenodd;stroke:#fb0000;stroke-width:1.00000003pt;stroke-opacity:1"
-         transform="matrix(0.4,0,0,0.4,4,0)" />
-    </marker>
-    <marker
-       inkscape:stockid="Arrow1Mstart"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="marker6744-8-2-5-2"
-       style="overflow:visible"
-       inkscape:isstock="true">
-      <path
-         inkscape:connector-curvature="0"
-         id="path6742-9-67-0-8"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         style="fill:#fb0000;fill-opacity:1;fill-rule:evenodd;stroke:#fb0000;stroke-width:1.00000003pt;stroke-opacity:1"
-         transform="matrix(0.4,0,0,0.4,4,0)" />
-    </marker>
-    <marker
-       inkscape:stockid="Arrow1Mstart"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="marker6744-8-2-5-5"
-       style="overflow:visible"
-       inkscape:isstock="true">
-      <path
-         inkscape:connector-curvature="0"
-         id="path6742-9-67-0-5"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         style="fill:#fb0000;fill-opacity:1;fill-rule:evenodd;stroke:#fb0000;stroke-width:1.00000003pt;stroke-opacity:1"
-         transform="matrix(0.4,0,0,0.4,4,0)" />
-    </marker>
-    <marker
-       inkscape:stockid="Arrow1Mstart"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="marker6744-8-2-5-27"
-       style="overflow:visible"
-       inkscape:isstock="true">
-      <path
-         inkscape:connector-curvature="0"
-         id="path6742-9-67-0-88"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         style="fill:#fb0000;fill-opacity:1;fill-rule:evenodd;stroke:#fb0000;stroke-width:1.00000003pt;stroke-opacity:1"
-         transform="matrix(0.4,0,0,0.4,4,0)" />
-    </marker>
-  </defs>
-  <sodipodi:namedview
-     id="base"
-     pagecolor="#ffffff"
-     bordercolor="#666666"
-     borderopacity="1.0"
-     inkscape:pageopacity="0.0"
-     inkscape:pageshadow="2"
-     inkscape:zoom="4.5916511"
-     inkscape:cx="415.89334"
-     inkscape:cy="107.69634"
-     inkscape:document-units="px"
-     inkscape:current-layer="layer1"
-     showgrid="true"
-     inkscape:window-width="1920"
-     inkscape:window-height="1001"
-     inkscape:window-x="-9"
-     inkscape:window-y="-9"
-     inkscape:window-maximized="0"
-     fit-margin-top="1"
-     fit-margin-left="1"
-     fit-margin-right="1"
-     fit-margin-bottom="1"
-     inkscape:snap-grids="true"
-     inkscape:snap-text-baseline="true"
-     inkscape:snap-object-midpoints="true"
-     units="px"
-     borderlayer="false">
-    <inkscape:grid
-       type="xygrid"
-       id="grid9626"
-       originx="4.490893"
-       originy="-198.75781" />
-  </sodipodi:namedview>
-  <metadata
-     id="metadata8650">
-    <rdf:RDF>
-      <cc:Work
-         rdf:about="">
-        <dc:format>image/svg+xml</dc:format>
-        <dc:type
-           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
-        <dc:title />
-      </cc:Work>
-    </rdf:RDF>
-  </metadata>
-  <g
-     inkscape:label="Layer 1"
-     inkscape:groupmode="layer"
-     id="layer1"
-     transform="translate(-8.0435002,240.66792)">
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
-       x="52.534393"
-       y="-78.03511"
-       id="text5070-2-2-9-9"><tspan
-         sodipodi:role="line"
-         id="tspan5068-0-3-36-9"
-         x="52.534393"
-         y="-78.03511"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">0</tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
-       x="132.53439"
-       y="-78.03511"
-       id="text5070-2-2-9-9-1"><tspan
-         sodipodi:role="line"
-         id="tspan5068-0-3-36-9-3"
-         x="132.53439"
-         y="-78.03511"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">4</tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
-       x="92.534393"
-       y="-168.03511"
-       id="text5070-2-2-9-9-7"><tspan
-         sodipodi:role="line"
-         id="tspan5068-0-3-36-9-6"
-         x="92.534393"
-         y="-168.03511"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">2</tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
-       x="12.534393"
-       y="-168.03511"
-       id="text5070-2-2-9-9-6"><tspan
-         sodipodi:role="line"
-         id="tspan5068-0-3-36-9-4"
-         x="12.534393"
-         y="-168.03511"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">1</tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
-       x="172.53439"
-       y="-168.03511"
-       id="text5070-2-2-9-9-41"><tspan
-         sodipodi:role="line"
-         id="tspan5068-0-3-36-9-1"
-         x="172.53439"
-         y="-168.03511"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">5</tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
-       x="92.534393"
-       y="-18.035109"
-       id="text5070-2-2-9-9-77"><tspan
-         sodipodi:role="line"
-         id="tspan5068-0-3-36-9-5"
-         x="92.534393"
-         y="-18.035109"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">3</tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
-       x="412.53439"
-       y="-168.03511"
-       id="text5070-2-2-9-9-7-8"><tspan
-         sodipodi:role="line"
-         id="tspan5068-0-3-36-9-6-7"
-         x="412.53439"
-         y="-168.03511"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">2</tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
-       x="492.53439"
-       y="-168.03511"
-       id="text5070-2-2-9-9-41-2"><tspan
-         sodipodi:role="line"
-         id="tspan5068-0-3-36-9-1-4"
-         x="492.53439"
-         y="-168.03511"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">6</tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
-       x="452.53439"
-       y="-228.03511"
-       id="text5070-2-2-9-9-6-1-2"><tspan
-         sodipodi:role="line"
-         id="tspan5068-0-3-36-9-4-3-4"
-         x="452.53439"
-         y="-228.03511"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">5</tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
-       x="532.53436"
-       y="-78.03511"
-       id="text5070-2-2-9-9-6-1-7"><tspan
-         sodipodi:role="line"
-         id="tspan5068-0-3-36-9-4-3-7"
-         x="532.53436"
-         y="-78.03511"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">7</tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
-       x="172.53439"
-       y="221.96489"
-       id="text5070-2-2-9-9-6-1-7-9"><tspan
-         sodipodi:role="line"
-         id="tspan5068-0-3-36-9-4-3-7-1"
-         x="172.53439"
-         y="221.96489"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">7</tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
-       x="212.53439"
-       y="161.96489"
-       id="text5070-2-2-9-9-6-1-7-9-3"><tspan
-         sodipodi:role="line"
-         id="tspan5068-0-3-36-9-4-3-7-1-4"
-         x="212.53439"
-         y="161.96489"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">8</tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
-       x="252.53439"
-       y="71.96489"
-       id="text5070-2-2-9-9-6-1-7-9-8"><tspan
-         sodipodi:role="line"
-         id="tspan5068-0-3-36-9-4-3-7-1-7"
-         x="252.53439"
-         y="71.96489"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">9</tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
-       x="492.53439"
-       y="221.96489"
-       id="text5070-2-2-9-9-6-1-7-9-7"><tspan
-         sodipodi:role="line"
-         id="tspan5068-0-3-36-9-4-3-7-1-5"
-         x="492.53439"
-         y="221.96489"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">7</tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
-       x="532.53436"
-       y="161.96489"
-       id="text5070-2-2-9-9-6-1-7-9-3-2"><tspan
-         sodipodi:role="line"
-         id="tspan5068-0-3-36-9-4-3-7-1-4-6"
-         x="532.53436"
-         y="161.96489"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">8</tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
-       x="572.53436"
-       y="71.96489"
-       id="text5070-2-2-9-9-6-1-7-9-8-9"><tspan
-         sodipodi:role="line"
-         id="tspan5068-0-3-36-9-4-3-7-1-7-6"
-         x="572.53436"
-         y="71.96489"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">10</tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
-       x="532.53436"
-       y="11.964892"
-       id="text5070-2-2-9-9-6-1-7-9-8-9-9"><tspan
-         sodipodi:role="line"
-         id="tspan5068-0-3-36-9-4-3-7-1-7-6-5"
-         x="532.53436"
-         y="11.964892"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">9</tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
-       x="612.53436"
-       y="161.96489"
-       id="text5070-2-2-9-9-6-1-7-9-8-9-2"><tspan
-         sodipodi:role="line"
-         id="tspan5068-0-3-36-9-4-3-7-1-7-6-6"
-         x="612.53436"
-         y="161.96489"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">11</tspan></text>
-    <circle
-       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       id="path4517-0-8-5-8"
-       cx="12.534393"
-       cy="-158.03511"
-       r="3.4908931" />
-    <circle
-       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       id="path4517-0-8-5-91"
-       cx="92.534393"
-       cy="-158.03511"
-       r="3.4908931" />
-    <circle
-       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       id="path4517-0-8-5-2"
-       cx="172.53439"
-       cy="-158.03511"
-       r="3.4908931" />
-    <circle
-       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       id="path4517-0-8-5-25"
-       cx="132.53439"
-       cy="-98.03511"
-       r="3.4908931" />
-    <circle
-       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       id="path4517-0-8-5-80"
-       cx="92.534393"
-       cy="-38.035107"
-       r="3.4908931" />
-    <circle
-       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       id="path4517-0-8-5-8-2"
-       cx="332.53439"
-       cy="-158.03511"
-       r="3.4908931" />
-    <circle
-       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       id="path4517-0-8-5-2-9"
-       cx="492.53439"
-       cy="-158.03511"
-       r="3.4908931" />
-    <circle
-       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       id="path4517-0-8-5-25-1"
-       cx="452.53439"
-       cy="-98.03511"
-       r="3.4908931" />
-    <circle
-       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       id="path4517-0-8-5-80-9"
-       cx="412.53439"
-       cy="-38.035107"
-       r="3.4908931" />
-    <circle
-       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       id="path4517-0-8-5-91-0-5"
-       cx="452.53439"
-       cy="-218.03511"
-       r="3.4908931" />
-    <circle
-       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       id="path4517-0-8-5-91-0-1"
-       cx="532.53442"
-       cy="-98.035118"
-       r="3.4908931" />
-    <circle
-       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       id="path4517-0-8-5-8-2-7"
-       cx="12.534395"
-       cy="81.96489"
-       r="3.4908931" />
-    <circle
-       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       id="path4517-0-8-5-80-9-8"
-       cx="92.534393"
-       cy="201.96487"
-       r="3.4908931" />
-    <circle
-       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       id="path4517-0-8-5-91-0-5-9"
-       cx="132.53439"
-       cy="21.964891"
-       r="3.4908931" />
-    <circle
-       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       id="path4517-0-8-5-91-0-1-0"
-       cx="212.53442"
-       cy="141.96487"
-       r="3.4908931" />
-    <circle
-       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       id="path4517-0-8-5-25-1-0-8"
-       cx="172.53439"
-       cy="201.96487"
-       r="3.4908931" />
-    <circle
-       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       id="path4517-0-8-5-25-1-0-6"
-       cx="252.53439"
-       cy="81.964874"
-       r="3.4908931" />
-    <circle
-       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       id="path4517-0-8-5-8-2-7-9"
-       cx="332.53439"
-       cy="81.96489"
-       r="3.4908931" />
-    <circle
-       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       id="path4517-0-8-5-80-9-8-2"
-       cx="412.53439"
-       cy="201.96487"
-       r="3.4908931" />
-    <circle
-       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       id="path4517-0-8-5-91-0-5-9-0"
-       cx="452.53442"
-       cy="21.964899"
-       r="3.4908931" />
-    <circle
-       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       id="path4517-0-8-5-91-0-1-0-9"
-       cx="532.53442"
-       cy="141.96489"
-       r="3.4908931" />
-    <circle
-       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       id="path4517-0-8-5-25-1-0-8-1"
-       cx="492.53442"
-       cy="201.96487"
-       r="3.4908931" />
-    <circle
-       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       id="path4517-0-8-5-25-1-0-6-1"
-       cx="572.53436"
-       cy="81.964867"
-       r="3.4908931" />
-    <circle
-       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       id="path4517-0-8-5-91-0-5-9-0-9"
-       cx="532.53442"
-       cy="21.964895"
-       r="3.4908931" />
-    <circle
-       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       id="path4517-0-8-5-91-0-5-9-0-3"
-       cx="612.53442"
-       cy="141.96489"
-       r="3.4908931" />
-    <path
-       style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:4, 4;stroke-dashoffset:0;stroke-opacity:1"
-       d="m 12.534393,-158.03511 80,120.000002 79.999997,-120.000002 z"
-       id="path1690"
-       inkscape:connector-curvature="0" />
-    <path
-       style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:4, 4;stroke-dashoffset:0;stroke-opacity:1"
-       d="m 332.53439,-158.03511 80,120.000002 40,-60 h 80 l -80,-120.000002 -40,60 z"
-       id="path1694"
-       inkscape:connector-curvature="0" />
-    <path
-       style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:4, 4;stroke-dashoffset:0;stroke-opacity:1"
-       d="m 12.534393,81.964892 80,119.999998 39.999997,-60 40,60 80,-119.999998 h -80 l -40,-60 -39.999997,60 z"
-       id="path1696"
-       inkscape:connector-curvature="0" />
-    <path
-       style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:4, 4;stroke-dashoffset:0;stroke-opacity:1"
-       d="m 332.53439,81.964892 h 80 l 40,-60 40,60 40,-60 80,119.999998 h -80 l -40,60 -40,-60 -40,60 z"
-       id="path1698"
-       inkscape:connector-curvature="0"
-       sodipodi:nodetypes="ccccccccccc" />
-    <path
-       style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-       d="m 52.534393,-98.035108 40,-60.000002 39.999997,60.000002 z"
-       id="path1700"
-       inkscape:connector-curvature="0" />
-    <path
-       style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-       d="m 372.53439,-98.035108 40,-60.000002 h 80 l -40,60.000002 z m 40,-60.000002 40,60.000002"
-       id="path1702"
-       inkscape:connector-curvature="0" />
-    <path
-       style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-       d="m 52.534393,141.96489 40,-59.999998 h 79.999997 l 40,59.999998 h -80 z m 40,-59.999998 39.999997,59.999998 40,-59.999998"
-       id="path1706"
-       inkscape:connector-curvature="0" />
-    <path
-       style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-       d="m 372.53439,141.96489 40,-59.999998 h 160 l -40,59.999998 z m 40,-59.999998 40,59.999998 40,-59.999998 40,59.999998"
-       id="path1712"
-       inkscape:connector-curvature="0" />
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
-       x="372.53439"
-       y="-78.03511"
-       id="text5070-2-2-9-9-5"><tspan
-         sodipodi:role="line"
-         id="tspan5068-0-3-36-9-20"
-         x="372.53439"
-         y="-78.03511"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">0</tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
-       x="452.53439"
-       y="-78.03511"
-       id="text5070-2-2-9-9-1-9"><tspan
-         sodipodi:role="line"
-         id="tspan5068-0-3-36-9-3-9"
-         x="452.53439"
-         y="-78.03511"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">4</tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
-       x="332.53439"
-       y="-168.03511"
-       id="text5070-2-2-9-9-6-5"><tspan
-         sodipodi:role="line"
-         id="tspan5068-0-3-36-9-4-2"
-         x="332.53439"
-         y="-168.03511"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">1</tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
-       x="412.53439"
-       y="-18.035109"
-       id="text5070-2-2-9-9-77-5"><tspan
-         sodipodi:role="line"
-         id="tspan5068-0-3-36-9-5-2"
-         x="412.53439"
-         y="-18.035109"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">3</tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
-       x="92.534393"
-       y="71.96489"
-       id="text5070-2-2-9-9-7-8-5"><tspan
-         sodipodi:role="line"
-         id="tspan5068-0-3-36-9-6-7-8"
-         x="92.534393"
-         y="71.96489"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">2</tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
-       x="172.53439"
-       y="71.96489"
-       id="text5070-2-2-9-9-41-2-93"><tspan
-         sodipodi:role="line"
-         id="tspan5068-0-3-36-9-1-4-4"
-         x="172.53439"
-         y="71.96489"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">6</tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
-       x="132.53438"
-       y="11.964892"
-       id="text5070-2-2-9-9-6-1-2-6"><tspan
-         sodipodi:role="line"
-         id="tspan5068-0-3-36-9-4-3-4-4"
-         x="132.53438"
-         y="11.964892"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">5</tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
-       x="52.534393"
-       y="161.96489"
-       id="text5070-2-2-9-9-5-5"><tspan
-         sodipodi:role="line"
-         id="tspan5068-0-3-36-9-20-4"
-         x="52.534393"
-         y="161.96489"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">0</tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
-       x="132.53438"
-       y="161.96489"
-       id="text5070-2-2-9-9-1-9-4"><tspan
-         sodipodi:role="line"
-         id="tspan5068-0-3-36-9-3-9-9"
-         x="132.53438"
-         y="161.96489"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">4</tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
-       x="12.534393"
-       y="71.96489"
-       id="text5070-2-2-9-9-6-5-0"><tspan
-         sodipodi:role="line"
-         id="tspan5068-0-3-36-9-4-2-8"
-         x="12.534393"
-         y="71.96489"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">1</tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
-       x="92.534393"
-       y="221.96489"
-       id="text5070-2-2-9-9-77-5-6"><tspan
-         sodipodi:role="line"
-         id="tspan5068-0-3-36-9-5-2-6"
-         x="92.534393"
-         y="221.96489"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">3</tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
-       x="412.53439"
-       y="71.96489"
-       id="text5070-2-2-9-9-7-8-6"><tspan
-         sodipodi:role="line"
-         id="tspan5068-0-3-36-9-6-7-9"
-         x="412.53439"
-         y="71.96489"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">2</tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
-       x="492.53439"
-       y="71.96489"
-       id="text5070-2-2-9-9-41-2-97"><tspan
-         sodipodi:role="line"
-         id="tspan5068-0-3-36-9-1-4-81"
-         x="492.53439"
-         y="71.96489"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">6</tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
-       x="452.53436"
-       y="11.964892"
-       id="text5070-2-2-9-9-6-1-2-9"><tspan
-         sodipodi:role="line"
-         id="tspan5068-0-3-36-9-4-3-4-7"
-         x="452.53436"
-         y="11.964892"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">5</tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
-       x="372.53439"
-       y="161.96489"
-       id="text5070-2-2-9-9-5-7"><tspan
-         sodipodi:role="line"
-         id="tspan5068-0-3-36-9-20-0"
-         x="372.53439"
-         y="161.96489"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">0</tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
-       x="452.53436"
-       y="161.96489"
-       id="text5070-2-2-9-9-1-9-6"><tspan
-         sodipodi:role="line"
-         id="tspan5068-0-3-36-9-3-9-8"
-         x="452.53436"
-         y="161.96489"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">4</tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
-       x="332.53439"
-       y="71.96489"
-       id="text5070-2-2-9-9-6-5-07"><tspan
-         sodipodi:role="line"
-         id="tspan5068-0-3-36-9-4-2-1"
-         x="332.53439"
-         y="71.96489"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">1</tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
-       x="412.53439"
-       y="221.96487"
-       id="text5070-2-2-9-9-77-5-9"><tspan
-         sodipodi:role="line"
-         id="tspan5068-0-3-36-9-5-2-1"
-         x="412.53439"
-         y="221.96487"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">3</tspan></text>
-    <g
-       transform="translate(150,-10.00001)"
-       id="g7055-4">
-      <path
-         sodipodi:nodetypes="cc"
-         inkscape:connector-curvature="0"
-         id="path1868-08-3-3"
-         d="m 277.53439,-133.0351 20,30"
-         style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:url(#marker6464-8)" />
-      <path
-         sodipodi:nodetypes="cc"
-         inkscape:connector-curvature="0"
-         id="path1870-9-9-3"
-         d="m 307.53439,-103.0351 20,-30"
-         style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:url(#marker2471-7)" />
-      <path
-         sodipodi:nodetypes="cc"
-         inkscape:connector-curvature="0"
-         id="path1872-2-3-1"
-         d="m 327.53439,-143.0351 h -50"
-         style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:url(#marker6744-8)" />
-    </g>
-    <g
-       transform="translate(-170,229.99999)"
-       id="g7055-4-8">
-      <path
-         sodipodi:nodetypes="cc"
-         inkscape:connector-curvature="0"
-         id="path1868-08-3-3-3"
-         d="m 277.53439,-133.0351 20,30"
-         style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:url(#marker6464-8-0)" />
-      <path
-         sodipodi:nodetypes="cc"
-         inkscape:connector-curvature="0"
-         id="path1870-9-9-3-7"
-         d="m 307.53439,-103.0351 20,-30"
-         style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:url(#marker2471-7-8)" />
-      <path
-         sodipodi:nodetypes="cc"
-         inkscape:connector-curvature="0"
-         id="path1872-2-3-1-8"
-         d="m 327.53439,-143.0351 h -50"
-         style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:url(#marker6744-8-7)" />
-    </g>
-    <g
-       transform="translate(150,229.99999)"
-       id="g7055-4-7">
-      <path
-         sodipodi:nodetypes="cc"
-         inkscape:connector-curvature="0"
-         id="path1868-08-3-3-9"
-         d="m 277.53439,-133.0351 20,30"
-         style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:url(#marker6464-8-07)" />
-      <path
-         sodipodi:nodetypes="cc"
-         inkscape:connector-curvature="0"
-         id="path1870-9-9-3-8"
-         d="m 307.53439,-103.0351 20,-30"
-         style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:url(#marker2471-7-4)" />
-      <path
-         sodipodi:nodetypes="cc"
-         inkscape:connector-curvature="0"
-         id="path1872-2-3-1-9"
-         d="m 327.53439,-143.0351 h -50"
-         style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:url(#marker6744-8-4)" />
-    </g>
-    <g
-       transform="translate(230,229.99999)"
-       id="g7055-4-9">
-      <path
-         sodipodi:nodetypes="cc"
-         inkscape:connector-curvature="0"
-         id="path1868-08-3-3-36"
-         d="m 277.53439,-133.0351 20,30"
-         style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:url(#marker6464-8-1)" />
-      <path
-         sodipodi:nodetypes="cc"
-         inkscape:connector-curvature="0"
-         id="path1870-9-9-3-75"
-         d="m 307.53439,-103.0351 20,-30"
-         style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:url(#marker2471-7-0)" />
-      <path
-         sodipodi:nodetypes="cc"
-         inkscape:connector-curvature="0"
-         id="path1872-2-3-1-5"
-         d="m 327.53439,-143.0351 h -50"
-         style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:url(#marker6744-8-5)" />
-    </g>
-    <g
-       id="g4389"
-       transform="translate(1.000012e-7,-1e-5)">
-      <path
-         sodipodi:nodetypes="cc"
-         inkscape:connector-curvature="0"
-         id="path1868"
-         d="m 67.534393,-113.0351 20,-30"
-         style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker3039)" />
-      <path
-         sodipodi:nodetypes="cc"
-         inkscape:connector-curvature="0"
-         id="path1870"
-         d="m 97.534393,-143.0351 19.999997,30"
-         style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker2891)" />
-      <path
-         sodipodi:nodetypes="cc"
-         inkscape:connector-curvature="0"
-         id="path1872"
-         d="M 117.53439,-103.0351 H 67.534393"
-         style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow1Mend)" />
-    </g>
-    <g
-       id="g4389-8"
-       transform="translate(320,-1e-5)">
-      <path
-         sodipodi:nodetypes="cc"
-         inkscape:connector-curvature="0"
-         id="path1868-7"
-         d="m 67.534393,-113.0351 20,-30"
-         style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker3039-8)" />
-      <path
-         sodipodi:nodetypes="cc"
-         inkscape:connector-curvature="0"
-         id="path1870-4"
-         d="m 97.534393,-143.0351 19.999997,30"
-         style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker2891-8)" />
-      <path
-         sodipodi:nodetypes="cc"
-         inkscape:connector-curvature="0"
-         id="path1872-2"
-         d="M 117.53439,-103.0351 H 67.534393"
-         style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow1Mend-2)" />
-    </g>
-    <g
-       id="g4389-0"
-       transform="translate(1.0000121e-7,239.99999)">
-      <path
-         sodipodi:nodetypes="cc"
-         inkscape:connector-curvature="0"
-         id="path1868-9"
-         d="m 67.534393,-113.0351 20,-30"
-         style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker3039-6)" />
-      <path
-         sodipodi:nodetypes="cc"
-         inkscape:connector-curvature="0"
-         id="path1870-8"
-         d="m 97.534393,-143.0351 19.999997,30"
-         style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker2891-1)" />
-      <path
-         sodipodi:nodetypes="cc"
-         inkscape:connector-curvature="0"
-         id="path1872-6"
-         d="M 117.53439,-103.0351 H 67.534393"
-         style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow1Mend-6)" />
-    </g>
-    <g
-       id="g4389-9"
-       transform="translate(80,239.99999)">
-      <path
-         sodipodi:nodetypes="cc"
-         inkscape:connector-curvature="0"
-         id="path1868-4"
-         d="m 67.534393,-113.0351 20,-30"
-         style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker3039-2)" />
-      <path
-         sodipodi:nodetypes="cc"
-         inkscape:connector-curvature="0"
-         id="path1870-5"
-         d="m 97.534393,-143.0351 19.999997,30"
-         style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker2891-11)" />
-      <path
-         sodipodi:nodetypes="cc"
-         inkscape:connector-curvature="0"
-         id="path1872-0"
-         d="M 117.53439,-103.0351 H 67.534393"
-         style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow1Mend-8)" />
-    </g>
-    <g
-       id="g4389-3"
-       transform="translate(320,239.99999)">
-      <path
-         sodipodi:nodetypes="cc"
-         inkscape:connector-curvature="0"
-         id="path1868-1"
-         d="m 67.534393,-113.0351 20,-30"
-         style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker3039-3)" />
-      <path
-         sodipodi:nodetypes="cc"
-         inkscape:connector-curvature="0"
-         id="path1870-2"
-         d="m 97.534393,-143.0351 19.999997,30"
-         style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker2891-7)" />
-      <path
-         sodipodi:nodetypes="cc"
-         inkscape:connector-curvature="0"
-         id="path1872-28"
-         d="M 117.53439,-103.0351 H 67.534393"
-         style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow1Mend-9)" />
-    </g>
-    <g
-       id="g4389-1"
-       transform="translate(400,239.99999)">
-      <path
-         sodipodi:nodetypes="cc"
-         inkscape:connector-curvature="0"
-         id="path1868-3"
-         d="m 67.534393,-113.0351 20,-30"
-         style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker3039-7)" />
-      <path
-         sodipodi:nodetypes="cc"
-         inkscape:connector-curvature="0"
-         id="path1870-0"
-         d="m 97.534393,-143.0351 19.999997,30"
-         style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker2891-71)" />
-      <path
-         sodipodi:nodetypes="cc"
-         inkscape:connector-curvature="0"
-         id="path1872-1"
-         d="M 117.53439,-103.0351 H 67.534393"
-         style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow1Mend-0)" />
-    </g>
-    <circle
-       style="fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       id="path4517-0-8-5-91-0"
-       cx="412.53439"
-       cy="-158.03511"
-       r="3.4908931" />
-    <circle
-       style="fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       id="path4517-0-8-5-5-3"
-       cx="372.53439"
-       cy="-98.03511"
-       r="3.4908931" />
-    <circle
-       style="fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       id="path4517-0-8-5-5"
-       cx="52.534393"
-       cy="-98.03511"
-       r="3.4908931" />
-    <circle
-       style="fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       id="path4517-0-8-5-91-0-97-2"
-       cx="52.534393"
-       cy="141.96489"
-       r="3.4908931" />
-    <circle
-       style="fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       id="path4517-0-8-5-91-0-97-6"
-       cx="132.53439"
-       cy="141.96489"
-       r="3.4908931" />
-    <circle
-       style="fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       id="path4517-0-8-5-91-0-97-0"
-       cx="372.53439"
-       cy="141.96489"
-       r="3.4908931" />
-    <circle
-       style="fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       id="path4517-0-8-5-91-0-97-26"
-       cx="452.53439"
-       cy="141.96489"
-       r="3.4908931" />
-    <circle
-       style="fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       id="path4517-0-8-5-91-0-3-1-1"
-       cx="92.534393"
-       cy="81.96489"
-       r="3.4908931" />
-    <circle
-       style="fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       id="path4517-0-8-5-91-0-3-1"
-       cx="412.53439"
-       cy="81.96489"
-       r="3.4908931" />
-    <circle
-       style="fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       id="path4517-0-8-5-91-0-3-1-2"
-       cx="492.53439"
-       cy="81.96489"
-       r="3.4908931" />
-    <circle
-       r="3.4908931"
-       cy="81.96489"
-       cx="172.53439"
-       id="circle9368"
-       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
-    <path
-       style="fill:none;stroke:#ff0000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-       d="m 52.534393,-98.03511 c 3.334534,-1.667267 6.667866,-3.33393 10,-5"
-       id="path24664"
-       inkscape:connector-curvature="0"
-       inkscape:path-effect="#path-effect24666"
-       inkscape:original-d="m 52.534393,-98.03511 c 3.334333,-1.66767 6.667667,-3.33433 10,-5" />
-    <path
-       style="fill:none;stroke:#ff0000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-       d="m 372.53439,-98.03511 c 3.53989,-1.769946 6.66787,-3.33393 10,-5"
-       id="path24956"
-       inkscape:connector-curvature="0"
-       inkscape:path-effect="#path-effect24958"
-       inkscape:original-d="m 372.53439,-98.03511 c 3.53813,-1.77347 6.66767,-3.33433 10,-5" />
-    <path
-       style="fill:none;stroke:#ff0000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-       d="m 412.53439,-158.03511 c 3.33374,1.66687 6.66707,3.33353 10,5"
-       id="path24960"
-       inkscape:connector-curvature="0"
-       inkscape:path-effect="#path-effect24962"
-       inkscape:original-d="m 412.53439,-158.03511 c 3.33434,1.66567 6.66767,3.33233 10,5" />
-    <path
-       style="fill:none;stroke:#ff0000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-       d="m 52.534393,141.96489 c 3.334534,-1.66727 6.667866,-3.33393 10,-5"
-       id="path24964"
-       inkscape:connector-curvature="0"
-       inkscape:path-effect="#path-effect24966"
-       inkscape:original-d="m 52.534393,141.96489 c 3.334333,-1.66767 6.667667,-3.33433 10,-5" />
-    <path
-       style="fill:none;stroke:#ff0000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-       d="m 92.534393,81.96489 c 3.333734,1.666868 6.667065,3.333534 9.999997,5"
-       id="path24968"
-       inkscape:connector-curvature="0"
-       inkscape:path-effect="#path-effect24970"
-       inkscape:original-d="m 92.534393,81.96489 c 3.334333,1.66567 6.667667,3.33233 9.999997,5" />
-    <path
-       style="fill:none;stroke:#ff0000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-       d="m 132.53439,141.96489 c 3.33454,-1.66727 6.66787,-3.33393 10,-5"
-       id="path24972"
-       inkscape:connector-curvature="0"
-       inkscape:path-effect="#path-effect24974"
-       inkscape:original-d="m 132.53439,141.96489 c 3.33434,-1.66767 6.66767,-3.33433 10,-5" />
-    <path
-       style="fill:none;stroke:#ff0000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-       d="m 372.53439,141.96489 c 3.33454,-1.66727 6.66787,-3.33393 10,-5"
-       id="path24976"
-       inkscape:connector-curvature="0"
-       inkscape:path-effect="#path-effect24978"
-       inkscape:original-d="m 372.53439,141.96489 c 3.33434,-1.66767 6.66767,-3.33433 10,-5" />
-    <path
-       style="fill:none;stroke:#ff0000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-       d="m 412.53439,81.96489 c 3.33374,1.66687 6.66707,3.333534 10,5"
-       id="path24980"
-       inkscape:connector-curvature="0"
-       inkscape:path-effect="#path-effect24982"
-       inkscape:original-d="m 412.53439,81.96489 c 3.33434,1.66567 6.66767,3.33233 10,5" />
-    <path
-       style="fill:none;stroke:#ff0000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-       d="m 452.53439,141.96489 c 3.33454,-1.66727 6.66787,-3.33393 10,-5"
-       id="path24984"
-       inkscape:connector-curvature="0"
-       inkscape:path-effect="#path-effect24986"
-       inkscape:original-d="m 452.53439,141.96489 c 3.33434,-1.66767 6.66767,-3.33433 10,-5" />
-    <path
-       style="fill:none;stroke:#ff0000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-       d="m 492.53439,81.96489 c 3.33374,1.66687 6.66707,3.333534 10,5"
-       id="path24988"
-       inkscape:connector-curvature="0"
-       inkscape:path-effect="#path-effect24990"
-       inkscape:original-d="m 492.53439,81.96489 c 3.33434,1.66567 6.66767,3.33233 10,5" />
-  </g>
-</svg>
diff --git a/registry/vulkan/images/primitive_topology_triangle_strip_with_adjacency_last.svg b/registry/vulkan/images/primitive_topology_triangle_strip_with_adjacency_last.svg
deleted file mode 100644
index e23948a..0000000
--- a/registry/vulkan/images/primitive_topology_triangle_strip_with_adjacency_last.svg
+++ /dev/null
@@ -1,1846 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Created with Inkscape (http://www.inkscape.org/) -->
-
-<svg
-   xmlns:dc="http://purl.org/dc/elements/1.1/"
-   xmlns:cc="http://creativecommons.org/ns#"
-   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
-   xmlns:svg="http://www.w3.org/2000/svg"
-   xmlns="http://www.w3.org/2000/svg"
-   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
-   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
-   width="613.95959"
-   height="463.875"
-   viewBox="0 0 613.9596 463.875"
-   version="1.1"
-   id="svg8653"
-   inkscape:version="0.92.2 5c3e80d, 2017-08-06"
-   sodipodi:docname="primitive_topology_triangle_strip_with_adjacency_last.svg">
-  <defs
-     id="defs8647">
-    <inkscape:path-effect
-       effect="bspline"
-       id="path-effect24990"
-       is_visible="true"
-       weight="33.333333"
-       steps="2"
-       helper_size="0"
-       apply_no_weight="true"
-       apply_with_weight="true"
-       only_selected="false" />
-    <inkscape:path-effect
-       effect="bspline"
-       id="path-effect24986"
-       is_visible="true"
-       weight="33.333333"
-       steps="2"
-       helper_size="0"
-       apply_no_weight="true"
-       apply_with_weight="true"
-       only_selected="false" />
-    <inkscape:path-effect
-       effect="bspline"
-       id="path-effect24982"
-       is_visible="true"
-       weight="33.333333"
-       steps="2"
-       helper_size="0"
-       apply_no_weight="true"
-       apply_with_weight="true"
-       only_selected="false" />
-    <inkscape:path-effect
-       effect="bspline"
-       id="path-effect24978"
-       is_visible="true"
-       weight="33.333333"
-       steps="2"
-       helper_size="0"
-       apply_no_weight="true"
-       apply_with_weight="true"
-       only_selected="false" />
-    <inkscape:path-effect
-       effect="bspline"
-       id="path-effect24974"
-       is_visible="true"
-       weight="33.333333"
-       steps="2"
-       helper_size="0"
-       apply_no_weight="true"
-       apply_with_weight="true"
-       only_selected="false" />
-    <inkscape:path-effect
-       effect="bspline"
-       id="path-effect24970"
-       is_visible="true"
-       weight="33.333333"
-       steps="2"
-       helper_size="0"
-       apply_no_weight="true"
-       apply_with_weight="true"
-       only_selected="false" />
-    <inkscape:path-effect
-       effect="bspline"
-       id="path-effect24966"
-       is_visible="true"
-       weight="33.333333"
-       steps="2"
-       helper_size="0"
-       apply_no_weight="true"
-       apply_with_weight="true"
-       only_selected="false" />
-    <inkscape:path-effect
-       effect="bspline"
-       id="path-effect24962"
-       is_visible="true"
-       weight="33.333333"
-       steps="2"
-       helper_size="0"
-       apply_no_weight="true"
-       apply_with_weight="true"
-       only_selected="false" />
-    <inkscape:path-effect
-       effect="bspline"
-       id="path-effect24958"
-       is_visible="true"
-       weight="33.333333"
-       steps="2"
-       helper_size="0"
-       apply_no_weight="true"
-       apply_with_weight="true"
-       only_selected="false" />
-    <inkscape:path-effect
-       effect="bspline"
-       id="path-effect24666"
-       is_visible="true"
-       weight="33.333333"
-       steps="2"
-       helper_size="0"
-       apply_no_weight="true"
-       apply_with_weight="true"
-       only_selected="false" />
-    <marker
-       inkscape:stockid="Arrow1Mstart"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="marker6464-8"
-       style="overflow:visible"
-       inkscape:isstock="true">
-      <path
-         inkscape:connector-curvature="0"
-         id="path6462-2"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         transform="matrix(0.4,0,0,0.4,4,0)" />
-    </marker>
-    <marker
-       inkscape:isstock="true"
-       style="overflow:visible"
-       id="marker2471-7"
-       refX="0"
-       refY="0"
-       orient="auto"
-       inkscape:stockid="Arrow1Mstart"
-       inkscape:collect="always">
-      <path
-         inkscape:connector-curvature="0"
-         transform="matrix(0.4,0,0,0.4,4,0)"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         id="path2469-6" />
-    </marker>
-    <marker
-       inkscape:stockid="Arrow1Mstart"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="marker6744-8"
-       style="overflow:visible"
-       inkscape:isstock="true">
-      <path
-         inkscape:connector-curvature="0"
-         id="path6742-9"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         transform="matrix(0.4,0,0,0.4,4,0)" />
-    </marker>
-    <marker
-       inkscape:stockid="Arrow1Mstart"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="marker6464-8-0"
-       style="overflow:visible"
-       inkscape:isstock="true">
-      <path
-         inkscape:connector-curvature="0"
-         id="path6462-2-2"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         transform="matrix(0.4,0,0,0.4,4,0)" />
-    </marker>
-    <marker
-       inkscape:isstock="true"
-       style="overflow:visible"
-       id="marker2471-7-8"
-       refX="0"
-       refY="0"
-       orient="auto"
-       inkscape:stockid="Arrow1Mstart"
-       inkscape:collect="always">
-      <path
-         inkscape:connector-curvature="0"
-         transform="matrix(0.4,0,0,0.4,4,0)"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         id="path2469-6-7" />
-    </marker>
-    <marker
-       inkscape:stockid="Arrow1Mstart"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="marker6744-8-7"
-       style="overflow:visible"
-       inkscape:isstock="true">
-      <path
-         inkscape:connector-curvature="0"
-         id="path6742-9-5"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         transform="matrix(0.4,0,0,0.4,4,0)" />
-    </marker>
-    <marker
-       inkscape:stockid="Arrow1Mstart"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="marker6464-8-07"
-       style="overflow:visible"
-       inkscape:isstock="true">
-      <path
-         inkscape:connector-curvature="0"
-         id="path6462-2-5"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         transform="matrix(0.4,0,0,0.4,4,0)" />
-    </marker>
-    <marker
-       inkscape:isstock="true"
-       style="overflow:visible"
-       id="marker2471-7-4"
-       refX="0"
-       refY="0"
-       orient="auto"
-       inkscape:stockid="Arrow1Mstart"
-       inkscape:collect="always">
-      <path
-         inkscape:connector-curvature="0"
-         transform="matrix(0.4,0,0,0.4,4,0)"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         id="path2469-6-5" />
-    </marker>
-    <marker
-       inkscape:stockid="Arrow1Mstart"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="marker6744-8-4"
-       style="overflow:visible"
-       inkscape:isstock="true">
-      <path
-         inkscape:connector-curvature="0"
-         id="path6742-9-6"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         transform="matrix(0.4,0,0,0.4,4,0)" />
-    </marker>
-    <marker
-       inkscape:stockid="Arrow1Mstart"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="marker6464-8-1"
-       style="overflow:visible"
-       inkscape:isstock="true">
-      <path
-         inkscape:connector-curvature="0"
-         id="path6462-2-4"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         transform="matrix(0.4,0,0,0.4,4,0)" />
-    </marker>
-    <marker
-       inkscape:isstock="true"
-       style="overflow:visible"
-       id="marker2471-7-0"
-       refX="0"
-       refY="0"
-       orient="auto"
-       inkscape:stockid="Arrow1Mstart"
-       inkscape:collect="always">
-      <path
-         inkscape:connector-curvature="0"
-         transform="matrix(0.4,0,0,0.4,4,0)"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         id="path2469-6-9" />
-    </marker>
-    <marker
-       inkscape:stockid="Arrow1Mstart"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="marker6744-8-5"
-       style="overflow:visible"
-       inkscape:isstock="true">
-      <path
-         inkscape:connector-curvature="0"
-         id="path6742-9-3"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         transform="matrix(0.4,0,0,0.4,4,0)" />
-    </marker>
-    <marker
-       inkscape:isstock="true"
-       style="overflow:visible"
-       id="marker3039"
-       refX="0"
-       refY="0"
-       orient="auto"
-       inkscape:stockid="Arrow1Mend">
-      <path
-         transform="matrix(-0.4,0,0,-0.4,-4,0)"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         id="path3037"
-         inkscape:connector-curvature="0" />
-    </marker>
-    <marker
-       inkscape:isstock="true"
-       style="overflow:visible"
-       id="marker2891"
-       refX="0"
-       refY="0"
-       orient="auto"
-       inkscape:stockid="Arrow1Mend">
-      <path
-         transform="matrix(-0.4,0,0,-0.4,-4,0)"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         id="path2889"
-         inkscape:connector-curvature="0" />
-    </marker>
-    <marker
-       inkscape:stockid="Arrow1Mend"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="Arrow1Mend"
-       style="overflow:visible"
-       inkscape:isstock="true"
-       inkscape:collect="always">
-      <path
-         id="path890"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         transform="matrix(-0.4,0,0,-0.4,-4,0)"
-         inkscape:connector-curvature="0" />
-    </marker>
-    <marker
-       inkscape:isstock="true"
-       style="overflow:visible"
-       id="marker3039-8"
-       refX="0"
-       refY="0"
-       orient="auto"
-       inkscape:stockid="Arrow1Mend">
-      <path
-         transform="matrix(-0.4,0,0,-0.4,-4,0)"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         id="path3037-8"
-         inkscape:connector-curvature="0" />
-    </marker>
-    <marker
-       inkscape:isstock="true"
-       style="overflow:visible"
-       id="marker2891-8"
-       refX="0"
-       refY="0"
-       orient="auto"
-       inkscape:stockid="Arrow1Mend">
-      <path
-         transform="matrix(-0.4,0,0,-0.4,-4,0)"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         id="path2889-5"
-         inkscape:connector-curvature="0" />
-    </marker>
-    <marker
-       inkscape:stockid="Arrow1Mend"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="Arrow1Mend-2"
-       style="overflow:visible"
-       inkscape:isstock="true"
-       inkscape:collect="always">
-      <path
-         id="path890-4"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         transform="matrix(-0.4,0,0,-0.4,-4,0)"
-         inkscape:connector-curvature="0" />
-    </marker>
-    <marker
-       inkscape:isstock="true"
-       style="overflow:visible"
-       id="marker3039-6"
-       refX="0"
-       refY="0"
-       orient="auto"
-       inkscape:stockid="Arrow1Mend">
-      <path
-         transform="matrix(-0.4,0,0,-0.4,-4,0)"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         id="path3037-2"
-         inkscape:connector-curvature="0" />
-    </marker>
-    <marker
-       inkscape:isstock="true"
-       style="overflow:visible"
-       id="marker2891-1"
-       refX="0"
-       refY="0"
-       orient="auto"
-       inkscape:stockid="Arrow1Mend">
-      <path
-         transform="matrix(-0.4,0,0,-0.4,-4,0)"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         id="path2889-55"
-         inkscape:connector-curvature="0" />
-    </marker>
-    <marker
-       inkscape:stockid="Arrow1Mend"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="Arrow1Mend-6"
-       style="overflow:visible"
-       inkscape:isstock="true"
-       inkscape:collect="always">
-      <path
-         id="path890-6"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         transform="matrix(-0.4,0,0,-0.4,-4,0)"
-         inkscape:connector-curvature="0" />
-    </marker>
-    <marker
-       inkscape:isstock="true"
-       style="overflow:visible"
-       id="marker3039-2"
-       refX="0"
-       refY="0"
-       orient="auto"
-       inkscape:stockid="Arrow1Mend">
-      <path
-         transform="matrix(-0.4,0,0,-0.4,-4,0)"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         id="path3037-6"
-         inkscape:connector-curvature="0" />
-    </marker>
-    <marker
-       inkscape:isstock="true"
-       style="overflow:visible"
-       id="marker2891-11"
-       refX="0"
-       refY="0"
-       orient="auto"
-       inkscape:stockid="Arrow1Mend">
-      <path
-         transform="matrix(-0.4,0,0,-0.4,-4,0)"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         id="path2889-3"
-         inkscape:connector-curvature="0" />
-    </marker>
-    <marker
-       inkscape:stockid="Arrow1Mend"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="Arrow1Mend-8"
-       style="overflow:visible"
-       inkscape:isstock="true"
-       inkscape:collect="always">
-      <path
-         id="path890-7"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         transform="matrix(-0.4,0,0,-0.4,-4,0)"
-         inkscape:connector-curvature="0" />
-    </marker>
-    <marker
-       inkscape:isstock="true"
-       style="overflow:visible"
-       id="marker3039-3"
-       refX="0"
-       refY="0"
-       orient="auto"
-       inkscape:stockid="Arrow1Mend">
-      <path
-         transform="matrix(-0.4,0,0,-0.4,-4,0)"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         id="path3037-7"
-         inkscape:connector-curvature="0" />
-    </marker>
-    <marker
-       inkscape:isstock="true"
-       style="overflow:visible"
-       id="marker2891-7"
-       refX="0"
-       refY="0"
-       orient="auto"
-       inkscape:stockid="Arrow1Mend">
-      <path
-         transform="matrix(-0.4,0,0,-0.4,-4,0)"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         id="path2889-7"
-         inkscape:connector-curvature="0" />
-    </marker>
-    <marker
-       inkscape:stockid="Arrow1Mend"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="Arrow1Mend-9"
-       style="overflow:visible"
-       inkscape:isstock="true"
-       inkscape:collect="always">
-      <path
-         id="path890-71"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         transform="matrix(-0.4,0,0,-0.4,-4,0)"
-         inkscape:connector-curvature="0" />
-    </marker>
-    <marker
-       inkscape:isstock="true"
-       style="overflow:visible"
-       id="marker3039-7"
-       refX="0"
-       refY="0"
-       orient="auto"
-       inkscape:stockid="Arrow1Mend">
-      <path
-         transform="matrix(-0.4,0,0,-0.4,-4,0)"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         id="path3037-70"
-         inkscape:connector-curvature="0" />
-    </marker>
-    <marker
-       inkscape:isstock="true"
-       style="overflow:visible"
-       id="marker2891-71"
-       refX="0"
-       refY="0"
-       orient="auto"
-       inkscape:stockid="Arrow1Mend">
-      <path
-         transform="matrix(-0.4,0,0,-0.4,-4,0)"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         id="path2889-2"
-         inkscape:connector-curvature="0" />
-    </marker>
-    <marker
-       inkscape:stockid="Arrow1Mend"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="Arrow1Mend-0"
-       style="overflow:visible"
-       inkscape:isstock="true"
-       inkscape:collect="always">
-      <path
-         id="path890-1"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         transform="matrix(-0.4,0,0,-0.4,-4,0)"
-         inkscape:connector-curvature="0" />
-    </marker>
-    <marker
-       inkscape:stockid="Arrow1Mstart"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="marker6744-8-79"
-       style="overflow:visible"
-       inkscape:isstock="true">
-      <path
-         inkscape:connector-curvature="0"
-         id="path6742-9-7"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         style="fill:#ff0000;fill-opacity:1;fill-rule:evenodd;stroke:#fe0000;stroke-width:1.00000003pt;stroke-opacity:1"
-         transform="matrix(0.4,0,0,0.4,4,0)" />
-    </marker>
-    <marker
-       inkscape:stockid="Arrow1Mstart"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="marker6464-8-13"
-       style="overflow:visible"
-       inkscape:isstock="true">
-      <path
-         inkscape:connector-curvature="0"
-         id="path6462-2-3"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         style="fill:#fb0000;fill-opacity:1;fill-rule:evenodd;stroke:#fb0000;stroke-width:1.00000003pt;stroke-opacity:1"
-         transform="matrix(0.4,0,0,0.4,4,0)" />
-    </marker>
-    <marker
-       inkscape:stockid="Arrow1Mstart"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="marker6744-8-2"
-       style="overflow:visible"
-       inkscape:isstock="true">
-      <path
-         inkscape:connector-curvature="0"
-         id="path6742-9-67"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         style="fill:#fb0000;fill-opacity:1;fill-rule:evenodd;stroke:#fb0000;stroke-width:1.00000003pt;stroke-opacity:1"
-         transform="matrix(0.4,0,0,0.4,4,0)" />
-    </marker>
-    <marker
-       inkscape:stockid="Arrow1Mstart"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="marker6464-8-13-5"
-       style="overflow:visible"
-       inkscape:isstock="true">
-      <path
-         inkscape:connector-curvature="0"
-         id="path6462-2-3-3"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         style="fill:#fb0000;fill-opacity:1;fill-rule:evenodd;stroke:#fb0000;stroke-width:1.00000003pt;stroke-opacity:1"
-         transform="matrix(0.4,0,0,0.4,4,0)" />
-    </marker>
-    <marker
-       inkscape:stockid="Arrow1Mstart"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="marker6464-8-13-5-4"
-       style="overflow:visible"
-       inkscape:isstock="true">
-      <path
-         inkscape:connector-curvature="0"
-         id="path6462-2-3-3-6"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         style="fill:#fb0000;fill-opacity:1;fill-rule:evenodd;stroke:#fb0000;stroke-width:1.00000003pt;stroke-opacity:1"
-         transform="matrix(0.4,0,0,0.4,4,0)" />
-    </marker>
-    <marker
-       inkscape:stockid="Arrow1Mstart"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="marker6464-8-13-5-6"
-       style="overflow:visible"
-       inkscape:isstock="true">
-      <path
-         inkscape:connector-curvature="0"
-         id="path6462-2-3-3-7"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         style="fill:#fb0000;fill-opacity:1;fill-rule:evenodd;stroke:#fb0000;stroke-width:1.00000003pt;stroke-opacity:1"
-         transform="matrix(0.4,0,0,0.4,4,0)" />
-    </marker>
-    <marker
-       inkscape:stockid="Arrow1Mstart"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="marker6464-8-13-5-2"
-       style="overflow:visible"
-       inkscape:isstock="true">
-      <path
-         inkscape:connector-curvature="0"
-         id="path6462-2-3-3-4"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         style="fill:#fb0000;fill-opacity:1;fill-rule:evenodd;stroke:#fb0000;stroke-width:1.00000003pt;stroke-opacity:1"
-         transform="matrix(0.4,0,0,0.4,4,0)" />
-    </marker>
-    <marker
-       inkscape:stockid="Arrow1Mstart"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="marker6464-8-13-5-0"
-       style="overflow:visible"
-       inkscape:isstock="true">
-      <path
-         inkscape:connector-curvature="0"
-         id="path6462-2-3-3-74"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         style="fill:#fb0000;fill-opacity:1;fill-rule:evenodd;stroke:#fb0000;stroke-width:1.00000003pt;stroke-opacity:1"
-         transform="matrix(0.4,0,0,0.4,4,0)" />
-    </marker>
-    <marker
-       inkscape:stockid="Arrow1Mstart"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="marker6464-8-13-5-1"
-       style="overflow:visible"
-       inkscape:isstock="true">
-      <path
-         inkscape:connector-curvature="0"
-         id="path6462-2-3-3-2"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         style="fill:#fb0000;fill-opacity:1;fill-rule:evenodd;stroke:#fb0000;stroke-width:1.00000003pt;stroke-opacity:1"
-         transform="matrix(0.4,0,0,0.4,4,0)" />
-    </marker>
-    <marker
-       inkscape:stockid="Arrow1Mstart"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="marker6464-8-13-5-9"
-       style="overflow:visible"
-       inkscape:isstock="true">
-      <path
-         inkscape:connector-curvature="0"
-         id="path6462-2-3-3-1"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         style="fill:#fb0000;fill-opacity:1;fill-rule:evenodd;stroke:#fb0000;stroke-width:1.00000003pt;stroke-opacity:1"
-         transform="matrix(0.4,0,0,0.4,4,0)" />
-    </marker>
-    <marker
-       inkscape:stockid="Arrow1Mstart"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="marker6464-8-13-5-29"
-       style="overflow:visible"
-       inkscape:isstock="true">
-      <path
-         inkscape:connector-curvature="0"
-         id="path6462-2-3-3-15"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         style="fill:#fb0000;fill-opacity:1;fill-rule:evenodd;stroke:#fb0000;stroke-width:1.00000003pt;stroke-opacity:1"
-         transform="matrix(0.4,0,0,0.4,4,0)" />
-    </marker>
-    <marker
-       inkscape:stockid="Arrow1Mstart"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="marker6464-8-13-5-41"
-       style="overflow:visible"
-       inkscape:isstock="true">
-      <path
-         inkscape:connector-curvature="0"
-         id="path6462-2-3-3-8"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         style="fill:#fb0000;fill-opacity:1;fill-rule:evenodd;stroke:#fb0000;stroke-width:1.00000003pt;stroke-opacity:1"
-         transform="matrix(0.4,0,0,0.4,4,0)" />
-    </marker>
-    <marker
-       inkscape:stockid="Arrow1Mstart"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="marker6464-8-13-5-5"
-       style="overflow:visible"
-       inkscape:isstock="true">
-      <path
-         inkscape:connector-curvature="0"
-         id="path6462-2-3-3-5"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         style="fill:#fb0000;fill-opacity:1;fill-rule:evenodd;stroke:#fb0000;stroke-width:1.00000003pt;stroke-opacity:1"
-         transform="matrix(0.4,0,0,0.4,4,0)" />
-    </marker>
-    <marker
-       inkscape:stockid="Arrow1Mstart"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="marker6464-8-13-5-3"
-       style="overflow:visible"
-       inkscape:isstock="true">
-      <path
-         inkscape:connector-curvature="0"
-         id="path6462-2-3-3-69"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         style="fill:#fb0000;fill-opacity:1;fill-rule:evenodd;stroke:#fb0000;stroke-width:1.00000003pt;stroke-opacity:1"
-         transform="matrix(0.4,0,0,0.4,4,0)" />
-    </marker>
-    <marker
-       inkscape:stockid="Arrow1Mstart"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="marker6744-8-2-5"
-       style="overflow:visible"
-       inkscape:isstock="true">
-      <path
-         inkscape:connector-curvature="0"
-         id="path6742-9-67-0"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         style="fill:#fb0000;fill-opacity:1;fill-rule:evenodd;stroke:#fb0000;stroke-width:1.00000003pt;stroke-opacity:1"
-         transform="matrix(0.4,0,0,0.4,4,0)" />
-    </marker>
-    <marker
-       inkscape:stockid="Arrow1Mstart"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="marker6744-8-2-5-2"
-       style="overflow:visible"
-       inkscape:isstock="true">
-      <path
-         inkscape:connector-curvature="0"
-         id="path6742-9-67-0-8"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         style="fill:#fb0000;fill-opacity:1;fill-rule:evenodd;stroke:#fb0000;stroke-width:1.00000003pt;stroke-opacity:1"
-         transform="matrix(0.4,0,0,0.4,4,0)" />
-    </marker>
-    <marker
-       inkscape:stockid="Arrow1Mstart"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="marker6744-8-2-5-5"
-       style="overflow:visible"
-       inkscape:isstock="true">
-      <path
-         inkscape:connector-curvature="0"
-         id="path6742-9-67-0-5"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         style="fill:#fb0000;fill-opacity:1;fill-rule:evenodd;stroke:#fb0000;stroke-width:1.00000003pt;stroke-opacity:1"
-         transform="matrix(0.4,0,0,0.4,4,0)" />
-    </marker>
-    <marker
-       inkscape:stockid="Arrow1Mstart"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="marker6744-8-2-5-27"
-       style="overflow:visible"
-       inkscape:isstock="true">
-      <path
-         inkscape:connector-curvature="0"
-         id="path6742-9-67-0-88"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         style="fill:#fb0000;fill-opacity:1;fill-rule:evenodd;stroke:#fb0000;stroke-width:1.00000003pt;stroke-opacity:1"
-         transform="matrix(0.4,0,0,0.4,4,0)" />
-    </marker>
-  </defs>
-  <sodipodi:namedview
-     id="base"
-     pagecolor="#ffffff"
-     bordercolor="#666666"
-     borderopacity="1.0"
-     inkscape:pageopacity="0.0"
-     inkscape:pageshadow="2"
-     inkscape:zoom="5.366358"
-     inkscape:cx="118.66396"
-     inkscape:cy="99.021623"
-     inkscape:document-units="px"
-     inkscape:current-layer="layer1"
-     showgrid="true"
-     inkscape:window-width="1920"
-     inkscape:window-height="1155"
-     inkscape:window-x="0"
-     inkscape:window-y="1"
-     inkscape:window-maximized="1"
-     fit-margin-top="1"
-     fit-margin-left="1"
-     fit-margin-right="1"
-     fit-margin-bottom="1"
-     inkscape:snap-grids="true"
-     inkscape:snap-text-baseline="true"
-     inkscape:snap-object-midpoints="true"
-     units="px"
-     borderlayer="false">
-    <inkscape:grid
-       type="xygrid"
-       id="grid9626"
-       originx="4.490893"
-       originy="-198.75781" />
-  </sodipodi:namedview>
-  <metadata
-     id="metadata8650">
-    <rdf:RDF>
-      <cc:Work
-         rdf:about="">
-        <dc:format>image/svg+xml</dc:format>
-        <dc:type
-           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
-        <dc:title />
-      </cc:Work>
-    </rdf:RDF>
-  </metadata>
-  <g
-     inkscape:label="Layer 1"
-     inkscape:groupmode="layer"
-     id="layer1"
-     transform="translate(-8.0435002,240.66792)">
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
-       x="52.534393"
-       y="-78.03511"
-       id="text5070-2-2-9-9"><tspan
-         sodipodi:role="line"
-         id="tspan5068-0-3-36-9"
-         x="52.534393"
-         y="-78.03511"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">0</tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
-       x="132.53439"
-       y="-78.03511"
-       id="text5070-2-2-9-9-1"><tspan
-         sodipodi:role="line"
-         id="tspan5068-0-3-36-9-3"
-         x="132.53439"
-         y="-78.03511"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">4</tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
-       x="92.534393"
-       y="-168.03511"
-       id="text5070-2-2-9-9-7"><tspan
-         sodipodi:role="line"
-         id="tspan5068-0-3-36-9-6"
-         x="92.534393"
-         y="-168.03511"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">2</tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
-       x="12.534393"
-       y="-168.03511"
-       id="text5070-2-2-9-9-6"><tspan
-         sodipodi:role="line"
-         id="tspan5068-0-3-36-9-4"
-         x="12.534393"
-         y="-168.03511"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">1</tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
-       x="172.53439"
-       y="-168.03511"
-       id="text5070-2-2-9-9-41"><tspan
-         sodipodi:role="line"
-         id="tspan5068-0-3-36-9-1"
-         x="172.53439"
-         y="-168.03511"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">5</tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
-       x="92.534393"
-       y="-18.035109"
-       id="text5070-2-2-9-9-77"><tspan
-         sodipodi:role="line"
-         id="tspan5068-0-3-36-9-5"
-         x="92.534393"
-         y="-18.035109"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">3</tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
-       x="412.53439"
-       y="-168.03511"
-       id="text5070-2-2-9-9-7-8"><tspan
-         sodipodi:role="line"
-         id="tspan5068-0-3-36-9-6-7"
-         x="412.53439"
-         y="-168.03511"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">2</tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
-       x="492.53439"
-       y="-168.03511"
-       id="text5070-2-2-9-9-41-2"><tspan
-         sodipodi:role="line"
-         id="tspan5068-0-3-36-9-1-4"
-         x="492.53439"
-         y="-168.03511"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">6</tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
-       x="452.53439"
-       y="-228.03511"
-       id="text5070-2-2-9-9-6-1-2"><tspan
-         sodipodi:role="line"
-         id="tspan5068-0-3-36-9-4-3-4"
-         x="452.53439"
-         y="-228.03511"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">5</tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
-       x="532.53436"
-       y="-78.03511"
-       id="text5070-2-2-9-9-6-1-7"><tspan
-         sodipodi:role="line"
-         id="tspan5068-0-3-36-9-4-3-7"
-         x="532.53436"
-         y="-78.03511"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">7</tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
-       x="172.53439"
-       y="221.96489"
-       id="text5070-2-2-9-9-6-1-7-9"><tspan
-         sodipodi:role="line"
-         id="tspan5068-0-3-36-9-4-3-7-1"
-         x="172.53439"
-         y="221.96489"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">7</tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
-       x="212.53439"
-       y="161.96489"
-       id="text5070-2-2-9-9-6-1-7-9-3"><tspan
-         sodipodi:role="line"
-         id="tspan5068-0-3-36-9-4-3-7-1-4"
-         x="212.53439"
-         y="161.96489"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">8</tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
-       x="252.53439"
-       y="71.96489"
-       id="text5070-2-2-9-9-6-1-7-9-8"><tspan
-         sodipodi:role="line"
-         id="tspan5068-0-3-36-9-4-3-7-1-7"
-         x="252.53439"
-         y="71.96489"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">9</tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
-       x="492.53439"
-       y="221.96489"
-       id="text5070-2-2-9-9-6-1-7-9-7"><tspan
-         sodipodi:role="line"
-         id="tspan5068-0-3-36-9-4-3-7-1-5"
-         x="492.53439"
-         y="221.96489"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">7</tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
-       x="532.53436"
-       y="161.96489"
-       id="text5070-2-2-9-9-6-1-7-9-3-2"><tspan
-         sodipodi:role="line"
-         id="tspan5068-0-3-36-9-4-3-7-1-4-6"
-         x="532.53436"
-         y="161.96489"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">8</tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
-       x="572.53436"
-       y="71.96489"
-       id="text5070-2-2-9-9-6-1-7-9-8-9"><tspan
-         sodipodi:role="line"
-         id="tspan5068-0-3-36-9-4-3-7-1-7-6"
-         x="572.53436"
-         y="71.96489"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">10</tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
-       x="532.53436"
-       y="11.964892"
-       id="text5070-2-2-9-9-6-1-7-9-8-9-9"><tspan
-         sodipodi:role="line"
-         id="tspan5068-0-3-36-9-4-3-7-1-7-6-5"
-         x="532.53436"
-         y="11.964892"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">9</tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
-       x="612.53436"
-       y="161.96489"
-       id="text5070-2-2-9-9-6-1-7-9-8-9-2"><tspan
-         sodipodi:role="line"
-         id="tspan5068-0-3-36-9-4-3-7-1-7-6-6"
-         x="612.53436"
-         y="161.96489"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">11</tspan></text>
-    <circle
-       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       id="path4517-0-8-5-8"
-       cx="12.534393"
-       cy="-158.03511"
-       r="3.4908931" />
-    <circle
-       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       id="path4517-0-8-5-91"
-       cx="92.534393"
-       cy="-158.03511"
-       r="3.4908931" />
-    <circle
-       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       id="path4517-0-8-5-2"
-       cx="172.53439"
-       cy="-158.03511"
-       r="3.4908931" />
-    <circle
-       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       id="path4517-0-8-5-80"
-       cx="92.534393"
-       cy="-38.035107"
-       r="3.4908931" />
-    <circle
-       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       id="path4517-0-8-5-8-2"
-       cx="332.53439"
-       cy="-158.03511"
-       r="3.4908931" />
-    <circle
-       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       id="path4517-0-8-5-80-9"
-       cx="412.53439"
-       cy="-38.035107"
-       r="3.4908931" />
-    <circle
-       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       id="path4517-0-8-5-91-0-5"
-       cx="452.53439"
-       cy="-218.03511"
-       r="3.4908931" />
-    <circle
-       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       id="path4517-0-8-5-91-0-1"
-       cx="532.53442"
-       cy="-98.035118"
-       r="3.4908931" />
-    <circle
-       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       id="path4517-0-8-5-8-2-7"
-       cx="12.534395"
-       cy="81.96489"
-       r="3.4908931" />
-    <circle
-       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       id="path4517-0-8-5-80-9-8"
-       cx="92.534393"
-       cy="201.96487"
-       r="3.4908931" />
-    <circle
-       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       id="path4517-0-8-5-91-0-5-9"
-       cx="132.53439"
-       cy="21.964891"
-       r="3.4908931" />
-    <circle
-       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       id="path4517-0-8-5-25-1-0-8"
-       cx="172.53439"
-       cy="201.96487"
-       r="3.4908931" />
-    <path
-       style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:4, 4;stroke-dashoffset:0;stroke-opacity:1"
-       d="m 12.534393,81.964892 80,119.999998 39.999997,-60 40,60 80,-119.999998 h -80 l -40,-60 -39.999997,60 z"
-       id="path1696"
-       inkscape:connector-curvature="0" />
-    <circle
-       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       id="path4517-0-8-5-25-1-0-6"
-       cx="252.53439"
-       cy="81.964874"
-       r="3.4908931" />
-    <circle
-       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       id="path4517-0-8-5-8-2-7-9"
-       cx="332.53439"
-       cy="81.96489"
-       r="3.4908931" />
-    <circle
-       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       id="path4517-0-8-5-80-9-8-2"
-       cx="412.53439"
-       cy="201.96487"
-       r="3.4908931" />
-    <circle
-       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       id="path4517-0-8-5-91-0-5-9-0"
-       cx="452.53442"
-       cy="21.964899"
-       r="3.4908931" />
-    <circle
-       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       id="path4517-0-8-5-25-1-0-8-1"
-       cx="492.53442"
-       cy="201.96487"
-       r="3.4908931" />
-    <circle
-       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       id="path4517-0-8-5-91-0-5-9-0-9"
-       cx="532.53442"
-       cy="21.964895"
-       r="3.4908931" />
-    <circle
-       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       id="path4517-0-8-5-91-0-5-9-0-3"
-       cx="612.53442"
-       cy="141.96489"
-       r="3.4908931" />
-    <path
-       style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:4, 4;stroke-dashoffset:0;stroke-opacity:1"
-       d="m 12.534393,-158.03511 80,120.000002 79.999997,-120.000002 z"
-       id="path1690"
-       inkscape:connector-curvature="0" />
-    <path
-       style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:4, 4;stroke-dashoffset:0;stroke-opacity:1"
-       d="m 332.53439,-158.03511 80,120.000002 40,-60 h 80 l -80,-120.000002 -40,60 z"
-       id="path1694"
-       inkscape:connector-curvature="0" />
-    <path
-       style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:4, 4;stroke-dashoffset:0;stroke-opacity:1"
-       d="m 332.53439,81.964892 h 80 l 40,-60 40,60 40,-60 80,119.999998 h -80 l -40,60 -40,-60 -40,60 z"
-       id="path1698"
-       inkscape:connector-curvature="0"
-       sodipodi:nodetypes="ccccccccccc" />
-    <path
-       style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-       d="m 52.534393,-98.035108 40,-60.000002 39.999997,60.000002 z"
-       id="path1700"
-       inkscape:connector-curvature="0" />
-    <circle
-       style="fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       id="path4517-0-8-5-25"
-       cx="132.53439"
-       cy="-98.03511"
-       r="3.4908931" />
-    <path
-       style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-       d="m 372.53439,-98.035108 40,-60.000002 h 80 l -40,60.000002 z m 40,-60.000002 40,60.000002"
-       id="path1702"
-       inkscape:connector-curvature="0" />
-    <circle
-       style="fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       id="path4517-0-8-5-2-9"
-       cx="492.53439"
-       cy="-158.03511"
-       r="3.4908931" />
-    <circle
-       style="fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       id="path4517-0-8-5-25-1"
-       cx="452.53439"
-       cy="-98.03511"
-       r="3.4908931" />
-    <path
-       style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-       d="m 52.534393,141.96489 40,-59.999998 h 79.999997 l 40,59.999998 h -80 z m 40,-59.999998 39.999997,59.999998 40,-59.999998"
-       id="path1706"
-       inkscape:connector-curvature="0" />
-    <circle
-       style="fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       id="path4517-0-8-5-91-0-1-0"
-       cx="212.53442"
-       cy="141.96487"
-       r="3.4908931" />
-    <path
-       style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-       d="m 372.53439,141.96489 40,-59.999998 h 160 l -40,59.999998 z m 40,-59.999998 40,59.999998 40,-59.999998 40,59.999998"
-       id="path1712"
-       inkscape:connector-curvature="0" />
-    <circle
-       style="fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       id="path4517-0-8-5-25-1-0-6-1"
-       cx="572.53436"
-       cy="81.964867"
-       r="3.4908931" />
-    <circle
-       style="fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       id="path4517-0-8-5-91-0-1-0-9"
-       cx="532.53442"
-       cy="141.96489"
-       r="3.4908931" />
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
-       x="372.53439"
-       y="-78.03511"
-       id="text5070-2-2-9-9-5"><tspan
-         sodipodi:role="line"
-         id="tspan5068-0-3-36-9-20"
-         x="372.53439"
-         y="-78.03511"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">0</tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
-       x="452.53439"
-       y="-78.03511"
-       id="text5070-2-2-9-9-1-9"><tspan
-         sodipodi:role="line"
-         id="tspan5068-0-3-36-9-3-9"
-         x="452.53439"
-         y="-78.03511"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">4</tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
-       x="332.53439"
-       y="-168.03511"
-       id="text5070-2-2-9-9-6-5"><tspan
-         sodipodi:role="line"
-         id="tspan5068-0-3-36-9-4-2"
-         x="332.53439"
-         y="-168.03511"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">1</tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
-       x="412.53439"
-       y="-18.035109"
-       id="text5070-2-2-9-9-77-5"><tspan
-         sodipodi:role="line"
-         id="tspan5068-0-3-36-9-5-2"
-         x="412.53439"
-         y="-18.035109"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">3</tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
-       x="92.534393"
-       y="71.96489"
-       id="text5070-2-2-9-9-7-8-5"><tspan
-         sodipodi:role="line"
-         id="tspan5068-0-3-36-9-6-7-8"
-         x="92.534393"
-         y="71.96489"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">2</tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
-       x="172.53439"
-       y="71.96489"
-       id="text5070-2-2-9-9-41-2-93"><tspan
-         sodipodi:role="line"
-         id="tspan5068-0-3-36-9-1-4-4"
-         x="172.53439"
-         y="71.96489"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">6</tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
-       x="132.53438"
-       y="11.964892"
-       id="text5070-2-2-9-9-6-1-2-6"><tspan
-         sodipodi:role="line"
-         id="tspan5068-0-3-36-9-4-3-4-4"
-         x="132.53438"
-         y="11.964892"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">5</tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
-       x="52.534393"
-       y="161.96489"
-       id="text5070-2-2-9-9-5-5"><tspan
-         sodipodi:role="line"
-         id="tspan5068-0-3-36-9-20-4"
-         x="52.534393"
-         y="161.96489"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">0</tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
-       x="132.53438"
-       y="161.96489"
-       id="text5070-2-2-9-9-1-9-4"><tspan
-         sodipodi:role="line"
-         id="tspan5068-0-3-36-9-3-9-9"
-         x="132.53438"
-         y="161.96489"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">4</tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
-       x="12.534393"
-       y="71.96489"
-       id="text5070-2-2-9-9-6-5-0"><tspan
-         sodipodi:role="line"
-         id="tspan5068-0-3-36-9-4-2-8"
-         x="12.534393"
-         y="71.96489"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">1</tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
-       x="92.534393"
-       y="221.96489"
-       id="text5070-2-2-9-9-77-5-6"><tspan
-         sodipodi:role="line"
-         id="tspan5068-0-3-36-9-5-2-6"
-         x="92.534393"
-         y="221.96489"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">3</tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
-       x="412.53439"
-       y="71.96489"
-       id="text5070-2-2-9-9-7-8-6"><tspan
-         sodipodi:role="line"
-         id="tspan5068-0-3-36-9-6-7-9"
-         x="412.53439"
-         y="71.96489"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">2</tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
-       x="492.53439"
-       y="71.96489"
-       id="text5070-2-2-9-9-41-2-97"><tspan
-         sodipodi:role="line"
-         id="tspan5068-0-3-36-9-1-4-81"
-         x="492.53439"
-         y="71.96489"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">6</tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
-       x="452.53436"
-       y="11.964892"
-       id="text5070-2-2-9-9-6-1-2-9"><tspan
-         sodipodi:role="line"
-         id="tspan5068-0-3-36-9-4-3-4-7"
-         x="452.53436"
-         y="11.964892"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">5</tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
-       x="372.53439"
-       y="161.96489"
-       id="text5070-2-2-9-9-5-7"><tspan
-         sodipodi:role="line"
-         id="tspan5068-0-3-36-9-20-0"
-         x="372.53439"
-         y="161.96489"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">0</tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
-       x="452.53436"
-       y="161.96489"
-       id="text5070-2-2-9-9-1-9-6"><tspan
-         sodipodi:role="line"
-         id="tspan5068-0-3-36-9-3-9-8"
-         x="452.53436"
-         y="161.96489"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">4</tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
-       x="332.53439"
-       y="71.96489"
-       id="text5070-2-2-9-9-6-5-07"><tspan
-         sodipodi:role="line"
-         id="tspan5068-0-3-36-9-4-2-1"
-         x="332.53439"
-         y="71.96489"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">1</tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
-       x="412.53439"
-       y="221.96487"
-       id="text5070-2-2-9-9-77-5-9"><tspan
-         sodipodi:role="line"
-         id="tspan5068-0-3-36-9-5-2-1"
-         x="412.53439"
-         y="221.96487"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">3</tspan></text>
-    <g
-       transform="translate(150,-10.00001)"
-       id="g7055-4">
-      <path
-         sodipodi:nodetypes="cc"
-         inkscape:connector-curvature="0"
-         id="path1868-08-3-3"
-         d="m 277.53439,-133.0351 20,30"
-         style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:url(#marker6464-8)" />
-      <path
-         sodipodi:nodetypes="cc"
-         inkscape:connector-curvature="0"
-         id="path1870-9-9-3"
-         d="m 307.53439,-103.0351 20,-30"
-         style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:url(#marker2471-7)" />
-      <path
-         sodipodi:nodetypes="cc"
-         inkscape:connector-curvature="0"
-         id="path1872-2-3-1"
-         d="m 327.53439,-143.0351 h -50"
-         style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:url(#marker6744-8)" />
-    </g>
-    <g
-       transform="translate(-170,229.99999)"
-       id="g7055-4-8">
-      <path
-         sodipodi:nodetypes="cc"
-         inkscape:connector-curvature="0"
-         id="path1868-08-3-3-3"
-         d="m 277.53439,-133.0351 20,30"
-         style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:url(#marker6464-8-0)" />
-      <path
-         sodipodi:nodetypes="cc"
-         inkscape:connector-curvature="0"
-         id="path1870-9-9-3-7"
-         d="m 307.53439,-103.0351 20,-30"
-         style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:url(#marker2471-7-8)" />
-      <path
-         sodipodi:nodetypes="cc"
-         inkscape:connector-curvature="0"
-         id="path1872-2-3-1-8"
-         d="m 327.53439,-143.0351 h -50"
-         style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:url(#marker6744-8-7)" />
-    </g>
-    <g
-       transform="translate(150,229.99999)"
-       id="g7055-4-7">
-      <path
-         sodipodi:nodetypes="cc"
-         inkscape:connector-curvature="0"
-         id="path1868-08-3-3-9"
-         d="m 277.53439,-133.0351 20,30"
-         style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:url(#marker6464-8-07)" />
-      <path
-         sodipodi:nodetypes="cc"
-         inkscape:connector-curvature="0"
-         id="path1870-9-9-3-8"
-         d="m 307.53439,-103.0351 20,-30"
-         style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:url(#marker2471-7-4)" />
-      <path
-         sodipodi:nodetypes="cc"
-         inkscape:connector-curvature="0"
-         id="path1872-2-3-1-9"
-         d="m 327.53439,-143.0351 h -50"
-         style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:url(#marker6744-8-4)" />
-    </g>
-    <g
-       transform="translate(230,229.99999)"
-       id="g7055-4-9">
-      <path
-         sodipodi:nodetypes="cc"
-         inkscape:connector-curvature="0"
-         id="path1868-08-3-3-36"
-         d="m 277.53439,-133.0351 20,30"
-         style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:url(#marker6464-8-1)" />
-      <path
-         sodipodi:nodetypes="cc"
-         inkscape:connector-curvature="0"
-         id="path1870-9-9-3-75"
-         d="m 307.53439,-103.0351 20,-30"
-         style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:url(#marker2471-7-0)" />
-      <path
-         sodipodi:nodetypes="cc"
-         inkscape:connector-curvature="0"
-         id="path1872-2-3-1-5"
-         d="m 327.53439,-143.0351 h -50"
-         style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:url(#marker6744-8-5)" />
-    </g>
-    <g
-       id="g4389"
-       transform="translate(1.000012e-7,-1e-5)">
-      <path
-         sodipodi:nodetypes="cc"
-         inkscape:connector-curvature="0"
-         id="path1868"
-         d="m 67.534393,-113.0351 20,-30"
-         style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker3039)" />
-      <path
-         sodipodi:nodetypes="cc"
-         inkscape:connector-curvature="0"
-         id="path1870"
-         d="m 97.534393,-143.0351 19.999997,30"
-         style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker2891)" />
-      <path
-         sodipodi:nodetypes="cc"
-         inkscape:connector-curvature="0"
-         id="path1872"
-         d="M 117.53439,-103.0351 H 67.534393"
-         style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow1Mend)" />
-    </g>
-    <g
-       id="g4389-8"
-       transform="translate(320,-1e-5)">
-      <path
-         sodipodi:nodetypes="cc"
-         inkscape:connector-curvature="0"
-         id="path1868-7"
-         d="m 67.534393,-113.0351 20,-30"
-         style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker3039-8)" />
-      <path
-         sodipodi:nodetypes="cc"
-         inkscape:connector-curvature="0"
-         id="path1870-4"
-         d="m 97.534393,-143.0351 19.999997,30"
-         style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker2891-8)" />
-      <path
-         sodipodi:nodetypes="cc"
-         inkscape:connector-curvature="0"
-         id="path1872-2"
-         d="M 117.53439,-103.0351 H 67.534393"
-         style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow1Mend-2)" />
-    </g>
-    <g
-       id="g4389-0"
-       transform="translate(1.0000121e-7,239.99999)">
-      <path
-         sodipodi:nodetypes="cc"
-         inkscape:connector-curvature="0"
-         id="path1868-9"
-         d="m 67.534393,-113.0351 20,-30"
-         style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker3039-6)" />
-      <path
-         sodipodi:nodetypes="cc"
-         inkscape:connector-curvature="0"
-         id="path1870-8"
-         d="m 97.534393,-143.0351 19.999997,30"
-         style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker2891-1)" />
-      <path
-         sodipodi:nodetypes="cc"
-         inkscape:connector-curvature="0"
-         id="path1872-6"
-         d="M 117.53439,-103.0351 H 67.534393"
-         style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow1Mend-6)" />
-    </g>
-    <g
-       id="g4389-9"
-       transform="translate(80,239.99999)">
-      <path
-         sodipodi:nodetypes="cc"
-         inkscape:connector-curvature="0"
-         id="path1868-4"
-         d="m 67.534393,-113.0351 20,-30"
-         style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker3039-2)" />
-      <path
-         sodipodi:nodetypes="cc"
-         inkscape:connector-curvature="0"
-         id="path1870-5"
-         d="m 97.534393,-143.0351 19.999997,30"
-         style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker2891-11)" />
-      <path
-         sodipodi:nodetypes="cc"
-         inkscape:connector-curvature="0"
-         id="path1872-0"
-         d="M 117.53439,-103.0351 H 67.534393"
-         style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow1Mend-8)" />
-    </g>
-    <g
-       id="g4389-3"
-       transform="translate(320,239.99999)">
-      <path
-         sodipodi:nodetypes="cc"
-         inkscape:connector-curvature="0"
-         id="path1868-1"
-         d="m 67.534393,-113.0351 20,-30"
-         style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker3039-3)" />
-      <path
-         sodipodi:nodetypes="cc"
-         inkscape:connector-curvature="0"
-         id="path1870-2"
-         d="m 97.534393,-143.0351 19.999997,30"
-         style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker2891-7)" />
-      <path
-         sodipodi:nodetypes="cc"
-         inkscape:connector-curvature="0"
-         id="path1872-28"
-         d="M 117.53439,-103.0351 H 67.534393"
-         style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow1Mend-9)" />
-    </g>
-    <g
-       id="g4389-1"
-       transform="translate(400,239.99999)">
-      <path
-         sodipodi:nodetypes="cc"
-         inkscape:connector-curvature="0"
-         id="path1868-3"
-         d="m 67.534393,-113.0351 20,-30"
-         style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker3039-7)" />
-      <path
-         sodipodi:nodetypes="cc"
-         inkscape:connector-curvature="0"
-         id="path1870-0"
-         d="m 97.534393,-143.0351 19.999997,30"
-         style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker2891-71)" />
-      <path
-         sodipodi:nodetypes="cc"
-         inkscape:connector-curvature="0"
-         id="path1872-1"
-         d="M 117.53439,-103.0351 H 67.534393"
-         style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow1Mend-0)" />
-    </g>
-    <circle
-       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       id="path4517-0-8-5-91-0"
-       cx="412.53439"
-       cy="-158.03511"
-       r="3.4908931" />
-    <circle
-       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       id="path4517-0-8-5-5-3"
-       cx="372.53439"
-       cy="-98.03511"
-       r="3.4908931" />
-    <circle
-       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       id="path4517-0-8-5-5"
-       cx="52.534393"
-       cy="-98.03511"
-       r="3.4908931" />
-    <circle
-       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       id="path4517-0-8-5-91-0-97-2"
-       cx="52.534393"
-       cy="141.96489"
-       r="3.4908931" />
-    <circle
-       style="fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       id="path4517-0-8-5-91-0-97-6"
-       cx="132.53439"
-       cy="141.96489"
-       r="3.4908931" />
-    <circle
-       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       id="path4517-0-8-5-91-0-97-0"
-       cx="372.53439"
-       cy="141.96489"
-       r="3.4908931" />
-    <circle
-       style="fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       id="path4517-0-8-5-91-0-97-26"
-       cx="452.53439"
-       cy="141.96489"
-       r="3.4908931" />
-    <circle
-       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       id="path4517-0-8-5-91-0-3-1-1"
-       cx="92.534393"
-       cy="81.96489"
-       r="3.4908931" />
-    <circle
-       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       id="path4517-0-8-5-91-0-3-1"
-       cx="412.53439"
-       cy="81.96489"
-       r="3.4908931" />
-    <circle
-       style="fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       id="path4517-0-8-5-91-0-3-1-2"
-       cx="492.53439"
-       cy="81.96489"
-       r="3.4908931" />
-    <circle
-       r="3.4908931"
-       cy="81.96489"
-       cx="172.53439"
-       id="circle9368"
-       style="fill:#f20000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
-    <path
-       style="fill:none;stroke:#ff0000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-       d="m 132.53439,-98.03511 c -3.33453,-1.667266 -6.66786,-3.33393 -10,-5"
-       id="path24664"
-       inkscape:connector-curvature="0"
-       inkscape:path-effect="#path-effect24666"
-       inkscape:original-d="m 132.53439,-98.03511 c -3.33433,-1.66767 -6.66766,-3.33433 -10,-5" />
-    <path
-       style="fill:none;stroke:#ff0000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-       d="m 452.53439,-98.03511 c -3.53989,-1.769946 -6.66787,-3.33393 -10,-5"
-       id="path24956"
-       inkscape:connector-curvature="0"
-       inkscape:path-effect="#path-effect24958"
-       inkscape:original-d="m 452.53439,-98.03511 c -3.53813,-1.77347 -6.66767,-3.33433 -10,-5" />
-    <path
-       style="fill:none;stroke:#ff0000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-       d="m 492.53439,-158.03511 c -3.33374,1.66687 -6.66707,3.33353 -10,5"
-       id="path24960"
-       inkscape:connector-curvature="0"
-       inkscape:path-effect="#path-effect24962"
-       inkscape:original-d="m 492.53439,-158.03511 c -3.33434,1.66567 -6.66767,3.33233 -10,5" />
-    <path
-       style="fill:none;stroke:#ff0000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-       d="m 132.53439,141.96489 c -3.33453,-1.66727 -6.66786,-3.33393 -10,-5"
-       id="path24964"
-       inkscape:connector-curvature="0"
-       inkscape:path-effect="#path-effect24966"
-       inkscape:original-d="m 132.53439,141.96489 c -3.33433,-1.66767 -6.66766,-3.33433 -10,-5" />
-    <path
-       style="fill:none;stroke:#ff0000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-       d="m 172.53439,81.96489 c -3.33373,1.666867 -6.66706,3.333533 -9.99999,5"
-       id="path24968"
-       inkscape:connector-curvature="0"
-       inkscape:path-effect="#path-effect24970"
-       inkscape:original-d="m 172.53439,81.96489 c -3.33433,1.66567 -6.66766,3.33233 -9.99999,5" />
-    <path
-       style="fill:none;stroke:#ff0000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-       d="m 212.53439,141.96489 c -3.33454,-1.66727 -6.66787,-3.33393 -10,-5"
-       id="path24972"
-       inkscape:connector-curvature="0"
-       inkscape:path-effect="#path-effect24974"
-       inkscape:original-d="m 212.53439,141.96489 c -3.33434,-1.66767 -6.66767,-3.33433 -10,-5" />
-    <path
-       style="fill:none;stroke:#ff0000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-       d="m 452.53439,141.96489 c -3.33454,-1.66727 -6.66787,-3.33393 -10,-5"
-       id="path24976"
-       inkscape:connector-curvature="0"
-       inkscape:path-effect="#path-effect24978"
-       inkscape:original-d="m 452.53439,141.96489 c -3.33434,-1.66767 -6.66767,-3.33433 -10,-5" />
-    <path
-       style="fill:none;stroke:#ff0000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-       d="m 492.53439,81.96489 c -3.33374,1.66687 -6.66707,3.333534 -10,5"
-       id="path24980"
-       inkscape:connector-curvature="0"
-       inkscape:path-effect="#path-effect24982"
-       inkscape:original-d="m 492.53439,81.96489 c -3.33434,1.66567 -6.66767,3.33233 -10,5" />
-    <path
-       style="fill:none;stroke:#ff0000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-       d="m 532.53439,141.96489 c -3.33454,-1.66727 -6.66787,-3.33393 -10,-5"
-       id="path24984"
-       inkscape:connector-curvature="0"
-       inkscape:path-effect="#path-effect24986"
-       inkscape:original-d="m 532.53439,141.96489 c -3.33434,-1.66767 -6.66767,-3.33433 -10,-5" />
-    <path
-       style="fill:none;stroke:#ff0000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-       d="m 572.53439,81.96489 c -3.33374,1.66687 -6.66707,3.333534 -10,5"
-       id="path24988"
-       inkscape:connector-curvature="0"
-       inkscape:path-effect="#path-effect24990"
-       inkscape:original-d="m 572.53439,81.96489 c -3.33434,1.66567 -6.66767,3.33233 -10,5" />
-  </g>
-</svg>
diff --git a/registry/vulkan/images/ray_intersection_candidate.svg b/registry/vulkan/images/ray_intersection_candidate.svg
deleted file mode 100644
index 13cb7c2..0000000
--- a/registry/vulkan/images/ray_intersection_candidate.svg
+++ /dev/null
@@ -1,45 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
-  "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-
-<svg xmlns="http://www.w3.org/2000/svg" version="1.1" viewBox="-125 20 450 100">
-  <defs>
-    <marker id="lineend" viewBox="0 0 1 3" refX="1" refY="1.5" markerWidth="1" markerHeight="3" orient="auto">
-      <rect width="1" height="3" x="0" y="0" fill="black" />
-    </marker>
-    <!-- The VKSpec SVG to PDF doesn't like auto-start-reverse -->
-    <marker id="linestart" viewBox="0 0 1 3" refX="0" refY="1.5" markerWidth="1" markerHeight="3" orient="auto">
-      <rect width="1" height="3" x="0" y="0" fill="black" />
-    </marker>
-    <marker id="arrow" viewBox="0 0 2 3" refX="1" refY="1.5" markerWidth="3" markerHeight="4" orient="auto">
-      <path d="M 0 0.5 l 0.5 -0.5 l 1.5 1.5 l -1.5 1.5 l -0.5 -0.5 l 1 -1 z" style="fill:black;" stroke-linecap="butt" />
-    </marker>
-  </defs>
-
-  <line x1="200" y1="50" x2="250" y2="37.5" style="stroke:black;stroke-width:2;" stroke-dasharray="3,3" />
-  <circle fill="#008000" r="3" cx="200" cy="50" />
-  <line x1="150" y1="62.5" x2="200" y2="50" style="stroke:black;stroke-width:2;" />
-  <path d="M 150 100 L 100 50 L 200 25 z" fill="#FF8080" opacity="0.75" stroke="none" />
-  <circle fill="#FF0000" r="3" cx="150" cy="62.5" />
-  <line x1="100" y1="75" x2="150" y2="62.5" style="stroke:black;stroke-width:2;" />
-  <circle fill="#0000FF" r="3" cx="100" cy="75" />
-  <line x1="50" y1="87.5" x2="100" y2="75" style="stroke:black;stroke-width:2;" stroke-dasharray="3,3" />
-  <path d="M 0 100 l 25 -6.125 l 25 -6.125" style="stroke:black;stroke-width:2;" marker-end="url(#lineend)" marker-mid="url(#arrow)" marker-start="url(#linestart)"/>
-  <line x1="-50" y1="112.5" x2="0" y2="100" style="stroke:black;stroke-width:2;" stroke-dasharray="3,3" />
-  <text x="-3.75" y="93" style="font-style:normal;font-weight:bold;font-size:11px;font-family:serif;">o</text>
-  <text x="20" y="86.875" style="font-style:normal;font-weight:bold;font-size:11px;font-family:serif;">d</text>
-  <text x="82.5" y="90" style="font-style:normal;font-weight:bold;font-size:11px;font-family:serif;">o</text>
-  <text x="90" y="91" style="font-style:italic;font-weight:normal;font-size:11px;font-family:serif;">+</text>
-  <text x="100" y="90" style="font-style:italic;font-weight:normal;font-size:11px;font-family:serif;">t</text>
-  <text x="104" y="92" style="font-style:italic;font-weight:normal;font-size:6px;font-family:serif;">min</text>
-  <text x="115" y="90" style="font-style:normal;font-weight:bold;font-size:11px;font-family:serif;">d</text>
-  <text x="134.5" y="55" style="font-style:normal;font-weight:bold;font-size:11px;font-family:serif;">o</text>
-  <text x="141" y="56" style="font-style:italic;font-weight:normal;font-size:11px;font-family:serif;">+</text>
-  <text x="150" y="55" style="font-style:italic;font-weight:normal;font-size:11px;font-family:serif;">t</text>
-  <text x="155" y="55" style="font-style:normal;font-weight:bold;font-size:11px;font-family:serif;">d</text>
-  <text x="182.5" y="65" style="font-style:normal;font-weight:bold;font-size:11px;font-family:serif;">o</text>
-  <text x="190" y="66" style="font-style:italic;font-weight:normal;font-size:11px;font-family:serif;">+</text>
-  <text x="200" y="65" style="font-style:italic;font-weight:normal;font-size:11px;font-family:serif;">t</text>
-  <text x="204" y="67" style="font-style:italic;font-weight:normal;font-size:6px;font-family:serif;">max</text>
-  <text x="216" y="65" style="font-style:normal;font-weight:bold;font-size:11px;font-family:serif;">d</text>
-</svg>
diff --git a/registry/vulkan/images/ray_tracing_execution.svg b/registry/vulkan/images/ray_tracing_execution.svg
deleted file mode 100644
index 079f41c..0000000
--- a/registry/vulkan/images/ray_tracing_execution.svg
+++ /dev/null
@@ -1,414 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Created with Inkscape (http://www.inkscape.org/) -->
-
-<svg
-   xmlns:dc="http://purl.org/dc/elements/1.1/"
-   xmlns:cc="http://creativecommons.org/ns#"
-   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
-   xmlns:svg="http://www.w3.org/2000/svg"
-   xmlns="http://www.w3.org/2000/svg"
-   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
-   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
-   width="454.53473"
-   height="183.80112"
-   viewBox="0 0 454.53472 183.80112"
-   version="1.1"
-   id="svg8"
-   sodipodi:docname="ray_tracing_execution.svg"
-   inkscape:version="0.92.4 (5da689c313, 2019-01-14)">
-  <defs
-     id="defs2">
-    <marker
-       inkscape:stockid="Arrow1Mend"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="marker9512-2-2-4-7"
-       style="overflow:visible"
-       inkscape:isstock="true"
-       inkscape:collect="always">
-      <path
-         id="path9510-2-3-81-1"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         transform="matrix(-0.4,0,0,-0.4,-4,0)"
-         inkscape:connector-curvature="0" />
-    </marker>
-    <marker
-       inkscape:stockid="Arrow1Mend"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="marker9512-2-2-4-7-1"
-       style="overflow:visible"
-       inkscape:isstock="true"
-       inkscape:collect="always">
-      <path
-         id="path9510-2-3-81-1-2"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         transform="matrix(-0.4,0,0,-0.4,-4,0)"
-         inkscape:connector-curvature="0" />
-    </marker>
-    <marker
-       inkscape:stockid="Arrow1Mend"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="marker9512-2-2-8-1-7-0"
-       style="overflow:visible"
-       inkscape:isstock="true"
-       inkscape:collect="always">
-      <path
-         id="path9510-2-3-8-2-1-9"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         transform="matrix(-0.4,0,0,-0.4,-4,0)"
-         inkscape:connector-curvature="0" />
-    </marker>
-    <marker
-       inkscape:stockid="Arrow1Mend"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="marker9512-2-2-8-1-7-05"
-       style="overflow:visible"
-       inkscape:isstock="true"
-       inkscape:collect="always">
-      <path
-         id="path9510-2-3-8-2-1-3"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         transform="matrix(-0.4,0,0,-0.4,-4,0)"
-         inkscape:connector-curvature="0" />
-    </marker>
-    <marker
-       inkscape:stockid="Arrow1Mend"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="marker9512-2-2-8-1-7-05-1"
-       style="overflow:visible"
-       inkscape:isstock="true"
-       inkscape:collect="always">
-      <path
-         id="path9510-2-3-8-2-1-3-9"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         transform="matrix(-0.4,0,0,-0.4,-4,0)"
-         inkscape:connector-curvature="0" />
-    </marker>
-    <marker
-       inkscape:stockid="Arrow1Mend"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="marker9512-2-2-4-7-13"
-       style="overflow:visible"
-       inkscape:isstock="true"
-       inkscape:collect="always">
-      <path
-         id="path9510-2-3-81-1-8"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         transform="matrix(-0.4,0,0,-0.4,-4,0)"
-         inkscape:connector-curvature="0" />
-    </marker>
-    <marker
-       inkscape:stockid="Arrow1Mend"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="marker9512-2-2-4-7-1-3"
-       style="overflow:visible"
-       inkscape:isstock="true"
-       inkscape:collect="always">
-      <path
-         id="path9510-2-3-81-1-2-3"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         transform="matrix(-0.4,0,0,-0.4,-4,0)"
-         inkscape:connector-curvature="0" />
-    </marker>
-  </defs>
-  <sodipodi:namedview
-     id="base"
-     pagecolor="#ffffff"
-     bordercolor="#666666"
-     borderopacity="1.0"
-     inkscape:pageopacity="0.0"
-     inkscape:pageshadow="2"
-     inkscape:zoom="2.0000001"
-     inkscape:cx="263.45186"
-     inkscape:cy="204.85377"
-     inkscape:document-units="px"
-     inkscape:current-layer="layer1"
-     showgrid="false"
-     inkscape:snap-center="true"
-     inkscape:snap-object-midpoints="true"
-     inkscape:snap-text-baseline="true"
-     inkscape:window-width="1920"
-     inkscape:window-height="1001"
-     inkscape:window-x="-9"
-     inkscape:window-y="-9"
-     inkscape:window-maximized="0"
-     showguides="false"
-     fit-margin-top="1"
-     fit-margin-right="1"
-     fit-margin-bottom="1"
-     fit-margin-left="1"
-     units="in"
-     inkscape:snap-others="true"
-     inkscape:snap-nodes="true"
-     inkscape:object-nodes="true"
-     height="7.5in">
-    <inkscape:grid
-       type="xygrid"
-       id="grid817"
-       originx="79.262856"
-       originy="-1225.558" />
-  </sodipodi:namedview>
-  <metadata
-     id="metadata5">
-    <rdf:RDF>
-      <cc:Work
-         rdf:about="">
-        <dc:format>image/svg+xml</dc:format>
-        <dc:type
-           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
-        <dc:title></dc:title>
-      </cc:Work>
-    </rdf:RDF>
-  </metadata>
-  <g
-     inkscape:label="Layer 1"
-     inkscape:groupmode="layer"
-     id="layer1"
-     transform="translate(-35.742392,209.97146)">
-    <g
-       id="g1684"
-       transform="translate(76.761047,177.11848)">
-      <rect
-         y="-385.62808"
-         x="196.64136"
-         height="47.54937"
-         width="98.349922"
-         id="rect815-1-6-5-1-3-2-0"
-         style="fill:#ffffff;fill-opacity:1;stroke:#ff0000;stroke-width:0.92372322;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
-      <text
-         xml:space="preserve"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.33333302px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.26999986;stroke-miterlimit:4;stroke-dasharray:none"
-         x="246.41849"
-         y="-357.55588"
-         id="text823-0-2-6-1-7-2-1"><tspan
-           y="-357.55588"
-           x="246.41849"
-           id="tspan981"
-           sodipodi:role="line">Any-Hit</tspan></text>
-    </g>
-    <g
-       transform="translate(-36.358826,-133.79857)"
-       id="g988-3">
-      <g
-         id="g4763">
-        <rect
-           style="fill:#ffffff;fill-opacity:1;stroke:#ff0000;stroke-width:0.92372322;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
-           id="rect815-1-6-5-1-3-2-0-7"
-           width="98.349922"
-           height="47.54937"
-           x="191.76122"
-           y="-74.711029" />
-        <text
-           id="text823-0-2-6-1-7-2-1-1"
-           y="-46.1577"
-           x="241.06639"
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.33333302px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.26999986;stroke-miterlimit:4;stroke-dasharray:none"
-           xml:space="preserve"><tspan
-             sodipodi:role="line"
-             id="tspan8376"
-             x="241.06639"
-             y="-46.1577">Intersection</tspan></text>
-      </g>
-    </g>
-    <text
-       id="text823-0-2-6-1-7-2-1-9-1"
-       y="-113.86218"
-       x="438.78833"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.33333302px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.26999986;stroke-miterlimit:4;stroke-dasharray:none"
-       xml:space="preserve"><tspan
-         sodipodi:role="line"
-         id="tspan6495"
-         x="438.78833"
-         y="-113.86218">Hit?</tspan></text>
-    <g
-       id="g7686"
-       transform="translate(-211.72239,-23.523486)">
-      <rect
-         y="-184.80975"
-         x="600.11108"
-         height="47.54937"
-         width="98.349922"
-         id="rect815-1-6-5-1-3-0-9"
-         style="fill:#ffffff;fill-opacity:1;stroke:#ff0000;stroke-width:0.92372322;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
-      <text
-         xml:space="preserve"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.33333302px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.26999986;stroke-miterlimit:4;stroke-dasharray:none"
-         x="649.0517"
-         y="-156.07088"
-         id="text823-0-2-6-1-7-4-9"><tspan
-           y="-156.07088"
-           x="649.0517"
-           id="tspan6645"
-           sodipodi:role="line">Closest Hit</tspan></text>
-    </g>
-    <g
-       transform="translate(196.84052,-0.4705565)"
-       id="g988-3-6">
-      <g
-         id="g4763-9">
-        <rect
-           style="fill:#ffffff;fill-opacity:1;stroke:#ff0000;stroke-width:0.92372322;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
-           id="rect815-1-6-5-1-3-2-0-7-3"
-           width="98.349922"
-           height="47.54937"
-           x="191.76122"
-           y="-74.711029" />
-        <text
-           id="text823-0-2-6-1-7-2-1-1-5"
-           y="-46.144676"
-           x="240.56183"
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.33333302px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.26999986;stroke-miterlimit:4;stroke-dasharray:none"
-           xml:space="preserve"><tspan
-             sodipodi:role="line"
-             id="tspan6647"
-             x="240.56183"
-             y="-46.144676">Miss</tspan></text>
-      </g>
-    </g>
-    <path
-       style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker9512-2-2-4-7)"
-       d="m 439.07803,-95.453012 v 17.927004"
-       id="path9502-8-53-6-5"
-       inkscape:connector-curvature="0"
-       sodipodi:nodetypes="cc" />
-    <rect
-       style="fill:none;stroke:#000000;stroke-width:1.44848073;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
-       id="rect3643-7-6"
-       width="54.151859"
-       height="54.151859"
-       x="354.16718"
-       y="78.002197"
-       transform="matrix(0.90285598,-0.42994311,0.90285598,0.42994311,0,0)" />
-    <path
-       style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker9512-2-2-4-7-1)"
-       d="m 439.07803,-142.01745 v -16.38351"
-       id="path9502-8-53-6-5-2"
-       inkscape:connector-curvature="0"
-       sodipodi:nodetypes="cc" />
-    <text
-       id="text823-0-2-6-1-7-2-1-5-2-2"
-       y="-145.3622"
-       x="431.07803"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.33333302px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.26999986;stroke-miterlimit:4;stroke-dasharray:none"
-       xml:space="preserve"><tspan
-         sodipodi:role="line"
-         id="tspan9812-5-3"
-         x="431.07803"
-         y="-145.3622">Y</tspan></text>
-    <text
-       id="text823-0-2-6-1-7-2-1-5-1-3"
-       y="-82.515198"
-       x="431.065"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.33333302px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.26999986;stroke-miterlimit:4;stroke-dasharray:none"
-       xml:space="preserve"><tspan
-         sodipodi:role="line"
-         id="tspan10386-33"
-         x="431.065"
-         y="-82.515198">N</tspan></text>
-    <g
-       id="g988-0"
-       transform="translate(-277.43985,-72.408014)">
-      <g
-         id="g1576">
-        <rect
-           style="fill:#ffffff;fill-opacity:1;stroke:#ff0000;stroke-width:0.92372322;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
-           id="rect815-1-6-5-1-3-2-0-6"
-           width="98.349922"
-           height="47.54937"
-           x="314.6441"
-           y="-70.14447" />
-        <text
-           id="text823-0-2-6-1-7-2-1-8"
-           y="-50.072266"
-           x="364.42123"
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.33333302px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.26999986;stroke-miterlimit:4;stroke-dasharray:none"
-           xml:space="preserve"><tspan
-             y="-50.072266"
-             x="364.42123"
-             id="tspan1568"
-             sodipodi:role="line">Ray</tspan><tspan
-             y="-33.405598"
-             x="364.42123"
-             id="tspan1570"
-             sodipodi:role="line">Generation</tspan></text>
-      </g>
-    </g>
-    <rect
-       style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:0.92372322;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
-       id="rect815-1-6-3"
-       width="215.34993"
-       height="47.54937"
-       x="155.40239"
-       y="-142.5096" />
-    <text
-       id="text823-0-2-6"
-       y="-130.43739"
-       x="263.56888"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.33333302px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.26999986;stroke-miterlimit:4;stroke-dasharray:none"
-       xml:space="preserve"><tspan
-         y="-130.43739"
-         x="263.56888"
-         id="tspan947-5"
-         sodipodi:role="line">Acceleration</tspan><tspan
-         id="tspan1116"
-         y="-113.77073"
-         x="263.56888"
-         sodipodi:role="line">Structure</tspan><tspan
-         id="tspan1118"
-         y="-97.104057"
-         x="263.56888"
-         sodipodi:role="line">Traversal</tspan></text>
-    <path
-       style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker9512-2-2-8-1-7-0)"
-       d="m 135.82735,-118.73491 h 17.927"
-       id="path9502-8-53-7-5-7-6"
-       inkscape:connector-curvature="0"
-       sodipodi:nodetypes="cc" />
-    <path
-       style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker9512-2-2-8-1-7-05)"
-       d="M 370.25969,-118.73523 H 388.1867"
-       id="path9502-8-53-7-5-7-0"
-       inkscape:connector-curvature="0"
-       sodipodi:nodetypes="cc" />
-    <path
-       style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker9512-2-2-8-1-7-05-1)"
-       d="m 254.12852,-184.73491 h 17.92701"
-       id="path9502-8-53-7-5-7-0-2"
-       inkscape:connector-curvature="0"
-       sodipodi:nodetypes="cc" />
-    <path
-       style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker9512-2-2-4-7-13)"
-       d="m 323.17953,-161.4009 v 17.927"
-       id="path9502-8-53-6-5-25"
-       inkscape:connector-curvature="0"
-       sodipodi:nodetypes="cc" />
-    <path
-       style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker9512-2-2-4-7-1-3)"
-       d="m 204.70756,-142.77917 v -16.38351"
-       id="path9502-8-53-6-5-2-9"
-       inkscape:connector-curvature="0"
-       sodipodi:nodetypes="cc"
-       inkscape:transform-center-x="-208"
-       inkscape:transform-center-y="18.485341" />
-  </g>
-</svg>
diff --git a/registry/vulkan/images/sample_count_1.svg b/registry/vulkan/images/sample_count_1.svg
deleted file mode 100644
index bfae69c..0000000
--- a/registry/vulkan/images/sample_count_1.svg
+++ /dev/null
@@ -1,24 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg width="160" height="160" viewBox="-500 -500 11000 11000" xmlns="http://www.w3.org/2000/svg" version="1.1">
-	<desc>VK_SAMPLE_COUNT_1_BIT</desc>
-	<defs>
-		<marker id="Triangle" viewBox="0 0 10 10" refX="0" refY="5" markerUnits="strokeWidth" markerWidth="8" markerHeight="8" orient="auto">
-			<path d="M 0 0 L 10 5 L 0 10 z" />
-		</marker>
-	</defs>
-	<g>
-		<!-- Axises -->
-		<line x1="00000" x2="10000" y1="00000" y2="00000" stroke-width="00050" stroke="black" marker-end="url(#Triangle)" />
-		<line x1="00000" x2="00000" y1="00000" y2="10000" stroke-width="00050" stroke="black" marker-end="url(#Triangle)" />
-		<!-- Helper-lines -->
-		<line x1="00000" x2="10000" y1="10000" y2="10000" stroke-width="00010" stroke="black" stroke-dasharray="00100" />
-		<line x1="10000" x2="10000" y1="00000" y2="10000" stroke-width="00010" stroke="black" stroke-dasharray="00100" />
-		<!-- Helper-lines horizontal -->
-		<line x1="00000" x2="10000" y1="05000" y2="05000" stroke-width="00010" stroke="black" stroke-dasharray="00100" />
-		<!-- Helper-lines vertical -->
-		<line x1="05000" x2="05000" y1="00000" y2="10000" stroke-width="00010" stroke="black" stroke-dasharray="00100" />
-		<!-- Dots -->
-		<circle cx="05000" cy="05000" r="00200" fill="black" /><text x="05000" y="05000" fill="red" font-size="01100" transform="translate(00200 -00200)">0</text>
-	</g>
-</svg>
diff --git a/registry/vulkan/images/sample_count_16.svg b/registry/vulkan/images/sample_count_16.svg
deleted file mode 100644
index ce38c9b..0000000
--- a/registry/vulkan/images/sample_count_16.svg
+++ /dev/null
@@ -1,69 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg width="160" height="160" viewBox="-500 -500 11000 11000" xmlns="http://www.w3.org/2000/svg" version="1.1">
-	<desc>VK_SAMPLE_COUNT_16_BIT</desc>
-	<defs>
-		<marker id="Triangle" viewBox="0 0 10 10" refX="0" refY="5" markerUnits="strokeWidth" markerWidth="8" markerHeight="8" orient="auto">
-			<path d="M 0 0 L 10 5 L 0 10 z" />
-		</marker>
-	</defs>
-	<g>
-		<!-- Axises -->
-		<line x1="00000" x2="10000" y1="00000" y2="00000" stroke-width="00050" stroke="black" marker-end="url(#Triangle)" />
-		<line x1="00000" x2="00000" y1="00000" y2="10000" stroke-width="00050" stroke="black" marker-end="url(#Triangle)" />
-		<!-- Helper-lines -->
-		<line x1="00000" x2="10000" y1="10000" y2="10000" stroke-width="00010" stroke="black" stroke-dasharray="00100" />
-		<line x1="10000" x2="10000" y1="00000" y2="10000" stroke-width="00010" stroke="black" stroke-dasharray="00100" />
-		<!-- Helper-lines horizontal -->
-		<line x1="00000" x2="10000" y1="00000" y2="00000" stroke-width="00010" stroke="black" stroke-dasharray="00100" />
-		<line x1="00000" x2="10000" y1="00625" y2="00625" stroke-width="00010" stroke="black" stroke-dasharray="00100" />
-		<line x1="00000" x2="10000" y1="01250" y2="01250" stroke-width="00010" stroke="black" stroke-dasharray="00100" />
-		<line x1="00000" x2="10000" y1="01875" y2="01875" stroke-width="00010" stroke="black" stroke-dasharray="00100" />
-		<line x1="00000" x2="10000" y1="02500" y2="02500" stroke-width="00010" stroke="black" stroke-dasharray="00100" />
-		<line x1="00000" x2="10000" y1="03125" y2="03125" stroke-width="00010" stroke="black" stroke-dasharray="00100" />
-		<line x1="00000" x2="10000" y1="03750" y2="03750" stroke-width="00010" stroke="black" stroke-dasharray="00100" />
-		<line x1="00000" x2="10000" y1="04375" y2="04375" stroke-width="00010" stroke="black" stroke-dasharray="00100" />
-		<line x1="00000" x2="10000" y1="05000" y2="05000" stroke-width="00010" stroke="black" stroke-dasharray="00100" />
-		<line x1="00000" x2="10000" y1="05625" y2="05625" stroke-width="00010" stroke="black" stroke-dasharray="00100" />
-		<line x1="00000" x2="10000" y1="06250" y2="06250" stroke-width="00010" stroke="black" stroke-dasharray="00100" />
-		<line x1="00000" x2="10000" y1="06875" y2="06875" stroke-width="00010" stroke="black" stroke-dasharray="00100" />
-		<line x1="00000" x2="10000" y1="07500" y2="07500" stroke-width="00010" stroke="black" stroke-dasharray="00100" />
-		<line x1="00000" x2="10000" y1="08125" y2="08125" stroke-width="00010" stroke="black" stroke-dasharray="00100" />
-		<line x1="00000" x2="10000" y1="08750" y2="08750" stroke-width="00010" stroke="black" stroke-dasharray="00100" />
-		<line x1="00000" x2="10000" y1="09375" y2="09375" stroke-width="00010" stroke="black" stroke-dasharray="00100" />
-		<!-- Helper-lines vertical -->
-		<line x1="00000" x2="00000" y1="00000" y2="10000" stroke-width="00010" stroke="black" stroke-dasharray="00100" />
-		<line x1="00625" x2="00625" y1="00000" y2="10000" stroke-width="00010" stroke="black" stroke-dasharray="00100" />
-		<line x1="01250" x2="01250" y1="00000" y2="10000" stroke-width="00010" stroke="black" stroke-dasharray="00100" />
-		<line x1="01875" x2="01875" y1="00000" y2="10000" stroke-width="00010" stroke="black" stroke-dasharray="00100" />
-		<line x1="02500" x2="02500" y1="00000" y2="10000" stroke-width="00010" stroke="black" stroke-dasharray="00100" />
-		<line x1="03125" x2="03125" y1="00000" y2="10000" stroke-width="00010" stroke="black" stroke-dasharray="00100" />
-		<line x1="03750" x2="03750" y1="00000" y2="10000" stroke-width="00010" stroke="black" stroke-dasharray="00100" />
-		<line x1="04375" x2="04375" y1="00000" y2="10000" stroke-width="00010" stroke="black" stroke-dasharray="00100" />
-		<line x1="05000" x2="05000" y1="00000" y2="10000" stroke-width="00010" stroke="black" stroke-dasharray="00100" />
-		<line x1="05625" x2="05625" y1="00000" y2="10000" stroke-width="00010" stroke="black" stroke-dasharray="00100" />
-		<line x1="06250" x2="06250" y1="00000" y2="10000" stroke-width="00010" stroke="black" stroke-dasharray="00100" />
-		<line x1="06875" x2="06875" y1="00000" y2="10000" stroke-width="00010" stroke="black" stroke-dasharray="00100" />
-		<line x1="07500" x2="07500" y1="00000" y2="10000" stroke-width="00010" stroke="black" stroke-dasharray="00100" />
-		<line x1="08125" x2="08125" y1="00000" y2="10000" stroke-width="00010" stroke="black" stroke-dasharray="00100" />
-		<line x1="08750" x2="08750" y1="00000" y2="10000" stroke-width="00010" stroke="black" stroke-dasharray="00100" />
-		<line x1="09375" x2="09375" y1="00000" y2="10000" stroke-width="00010" stroke="black" stroke-dasharray="00100" />
-		<!-- Dots -->
-		<circle cx="05625" cy="05625" r="00200" fill="black" /><text x="05625" y="05625" fill="red" font-size="01100" transform="translate(00200 -00200)">0</text>
-		<circle cx="04375" cy="03125" r="00200" fill="black" /><text x="04375" y="03125" fill="red" font-size="01100" transform="translate(00200 -00200)">1</text>
-		<circle cx="03125" cy="06250" r="00200" fill="black" /><text x="03125" y="06250" fill="red" font-size="01100" transform="translate(00200 -00200)">2</text>
-		<circle cx="07500" cy="04375" r="00200" fill="black" /><text x="07500" y="04375" fill="red" font-size="01100" transform="translate(00200 -00200)">3</text>
-		<circle cx="01875" cy="03750" r="00200" fill="black" /><text x="01875" y="03750" fill="red" font-size="01100" transform="translate(00200 -00200)">4</text>
-		<circle cx="06250" cy="08125" r="00200" fill="black" /><text x="06250" y="08125" fill="red" font-size="01100" transform="translate(00200 -00200)">5</text>
-		<circle cx="08125" cy="06875" r="00200" fill="black" /><text x="08125" y="06875" fill="red" font-size="01100" transform="translate(00200 -00200)">6</text>
-		<circle cx="06875" cy="01875" r="00200" fill="black" /><text x="06875" y="01875" fill="red" font-size="01100" transform="translate(00200 -00200)">7</text>
-		<circle cx="03750" cy="08750" r="00200" fill="black" /><text x="03750" y="08750" fill="red" font-size="01100" transform="translate(00200 -00200)">8</text>
-		<circle cx="05000" cy="00625" r="00200" fill="black" /><text x="05000" y="00625" fill="red" font-size="01100" transform="translate(00400  00400)">9</text>
-		<circle cx="02500" cy="01250" r="00200" fill="black" /><text x="02500" y="01250" fill="red" font-size="01100" transform="translate(00200 -00200)">10</text>
-		<circle cx="01250" cy="07500" r="00200" fill="black" /><text x="01250" y="07500" fill="red" font-size="01100" transform="translate(00200 -00200)">11</text>
-		<circle cx="00000" cy="05000" r="00200" fill="black" /><text x="00000" y="05000" fill="red" font-size="01100" transform="translate(00200 -00200)">12</text>
-		<circle cx="09375" cy="02500" r="00200" fill="black" /><text x="09375" y="02500" fill="red" font-size="01100" transform="translate(00000 -00400)">13</text>
-		<circle cx="08750" cy="09375" r="00200" fill="black" /><text x="08750" y="09375" fill="red" font-size="01100" transform="translate(00200 -00200)">14</text>
-		<circle cx="00625" cy="00000" r="00200" fill="black" /><text x="00625" y="00000" fill="red" font-size="01100" transform="translate(00200  00800)">15</text>
-	</g>
-</svg>
diff --git a/registry/vulkan/images/sample_count_2.svg b/registry/vulkan/images/sample_count_2.svg
deleted file mode 100644
index 91fd4d9..0000000
--- a/registry/vulkan/images/sample_count_2.svg
+++ /dev/null
@@ -1,27 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg width="160" height="160" viewBox="-500 -500 11000 11000" xmlns="http://www.w3.org/2000/svg" version="1.1">
-	<desc>VK_SAMPLE_COUNT_2_BIT</desc>
-	<defs>
-		<marker id="Triangle" viewBox="0 0 10 10" refX="0" refY="5" markerUnits="strokeWidth" markerWidth="8" markerHeight="8" orient="auto">
-			<path d="M 0 0 L 10 5 L 0 10 z" />
-		</marker>
-	</defs>
-	<g>
-		<!-- Axises -->
-		<line x1="00000" x2="10000" y1="00000" y2="00000" stroke-width="00050" stroke="black" marker-end="url(#Triangle)" />
-		<line x1="00000" x2="00000" y1="00000" y2="10000" stroke-width="00050" stroke="black" marker-end="url(#Triangle)" />
-		<!-- Helper-lines -->
-		<line x1="00000" x2="10000" y1="10000" y2="10000" stroke-width="00010" stroke="black" stroke-dasharray="00100" />
-		<line x1="10000" x2="10000" y1="00000" y2="10000" stroke-width="00010" stroke="black" stroke-dasharray="00100" />
-		<!-- Helper-lines horizontal -->
-		<line x1="00000" x2="10000" y1="02500" y2="02500" stroke-width="00010" stroke="black" stroke-dasharray="00100" />
-		<line x1="00000" x2="10000" y1="07500" y2="07500" stroke-width="00010" stroke="black" stroke-dasharray="00100" />
-		<!-- Helper-lines vertical -->
-		<line x1="02500" x2="02500" y1="00000" y2="10000" stroke-width="00010" stroke="black" stroke-dasharray="00100" />
-		<line x1="07500" x2="07500" y1="00000" y2="10000" stroke-width="00010" stroke="black" stroke-dasharray="00100" />
-		<!-- Dots -->
-		<circle cx="07500" cy="07500" r="00200" fill="black" /><text x="07500" y="07500" fill="red" font-size="01100" transform="translate(00200 -00200)">0</text>
-		<circle cx="02500" cy="02500" r="00200" fill="black" /><text x="02500" y="02500" fill="red" font-size="01100" transform="translate(00200 -00200)">1</text>
-	</g>
-</svg>
diff --git a/registry/vulkan/images/sample_count_4.svg b/registry/vulkan/images/sample_count_4.svg
deleted file mode 100644
index f4bcc7e..0000000
--- a/registry/vulkan/images/sample_count_4.svg
+++ /dev/null
@@ -1,33 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg width="160" height="160" viewBox="-500 -500 11000 11000" xmlns="http://www.w3.org/2000/svg" version="1.1">
-	<desc>VK_SAMPLE_COUNT_4_BIT</desc>
-	<defs>
-		<marker id="Triangle" viewBox="0 0 10 10" refX="0" refY="5" markerUnits="strokeWidth" markerWidth="8" markerHeight="8" orient="auto">
-			<path d="M 0 0 L 10 5 L 0 10 z" />
-		</marker>
-	</defs>
-	<g>
-		<!-- Axises -->
-		<line x1="00000" x2="10000" y1="00000" y2="00000" stroke-width="00050" stroke="black" marker-end="url(#Triangle)" />
-		<line x1="00000" x2="00000" y1="00000" y2="10000" stroke-width="00050" stroke="black" marker-end="url(#Triangle)" />
-		<!-- Helper-lines -->
-		<line x1="00000" x2="10000" y1="10000" y2="10000" stroke-width="00010" stroke="black" stroke-dasharray="00100" />
-		<line x1="10000" x2="10000" y1="00000" y2="10000" stroke-width="00010" stroke="black" stroke-dasharray="00100" />
-		<!-- Helper-lines horizontal -->
-		<line x1="00000" x2="10000" y1="01250" y2="01250" stroke-width="00010" stroke="black" stroke-dasharray="00100" />
-		<line x1="00000" x2="10000" y1="03750" y2="03750" stroke-width="00010" stroke="black" stroke-dasharray="00100" />
-		<line x1="00000" x2="10000" y1="06250" y2="06250" stroke-width="00010" stroke="black" stroke-dasharray="00100" />
-		<line x1="00000" x2="10000" y1="08750" y2="08750" stroke-width="00010" stroke="black" stroke-dasharray="00100" />
-		<!-- Helper-lines vertical -->
-		<line x1="01250" x2="01250" y1="00000" y2="10000" stroke-width="00010" stroke="black" stroke-dasharray="00100" />
-		<line x1="03750" x2="03750" y1="00000" y2="10000" stroke-width="00010" stroke="black" stroke-dasharray="00100" />
-		<line x1="06250" x2="06250" y1="00000" y2="10000" stroke-width="00010" stroke="black" stroke-dasharray="00100" />
-		<line x1="08750" x2="08750" y1="00000" y2="10000" stroke-width="00010" stroke="black" stroke-dasharray="00100" />
-		<!-- Dots -->
-		<circle cx="03750" cy="01250" r="00200" fill="black" /><text x="03750" y="01250" fill="red" font-size="01100" transform="translate(00200 -00200)">0</text>
-		<circle cx="08750" cy="03750" r="00200" fill="black" /><text x="08750" y="03750" fill="red" font-size="01100" transform="translate(00200 -00200)">1</text>
-		<circle cx="01250" cy="06250" r="00200" fill="black" /><text x="01250" y="06250" fill="red" font-size="01100" transform="translate(00200 -00200)">2</text>
-		<circle cx="06250" cy="08750" r="00200" fill="black" /><text x="06250" y="08750" fill="red" font-size="01100" transform="translate(00200 -00200)">3</text>
-	</g>
-</svg>
diff --git a/registry/vulkan/images/sample_count_8.svg b/registry/vulkan/images/sample_count_8.svg
deleted file mode 100644
index 0a86371..0000000
--- a/registry/vulkan/images/sample_count_8.svg
+++ /dev/null
@@ -1,45 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg width="160" height="160" viewBox="-500 -500 11000 11000" xmlns="http://www.w3.org/2000/svg" version="1.1">
-	<desc>VK_SAMPLE_COUNT_8_BIT</desc>
-	<defs>
-		<marker id="Triangle" viewBox="0 0 10 10" refX="0" refY="5" markerUnits="strokeWidth" markerWidth="8" markerHeight="8" orient="auto">
-			<path d="M 0 0 L 10 5 L 0 10 z" />
-		</marker>
-	</defs>
-	<g>
-		<!-- Axises -->
-		<line x1="00000" x2="10000" y1="00000" y2="00000" stroke-width="00050" stroke="black" marker-end="url(#Triangle)" />
-		<line x1="00000" x2="00000" y1="00000" y2="10000" stroke-width="00050" stroke="black" marker-end="url(#Triangle)" />
-		<!-- Helper-lines -->
-		<line x1="00000" x2="10000" y1="10000" y2="10000" stroke-width="00010" stroke="black" stroke-dasharray="00100" />
-		<line x1="10000" x2="10000" y1="00000" y2="10000" stroke-width="00010" stroke="black" stroke-dasharray="00100" />
-		<!-- Helper-lines horizontal -->
-		<line x1="00000" x2="10000" y1="00625" y2="00625" stroke-width="00010" stroke="black" stroke-dasharray="00100" />
-		<line x1="00000" x2="10000" y1="01875" y2="01875" stroke-width="00010" stroke="black" stroke-dasharray="00100" />
-		<line x1="00000" x2="10000" y1="03125" y2="03125" stroke-width="00010" stroke="black" stroke-dasharray="00100" />
-		<line x1="00000" x2="10000" y1="04375" y2="04375" stroke-width="00010" stroke="black" stroke-dasharray="00100" />
-		<line x1="00000" x2="10000" y1="05625" y2="05625" stroke-width="00010" stroke="black" stroke-dasharray="00100" />
-		<line x1="00000" x2="10000" y1="06875" y2="06875" stroke-width="00010" stroke="black" stroke-dasharray="00100" />
-		<line x1="00000" x2="10000" y1="08125" y2="08125" stroke-width="00010" stroke="black" stroke-dasharray="00100" />
-		<line x1="00000" x2="10000" y1="09375" y2="09375" stroke-width="00010" stroke="black" stroke-dasharray="00100" />
-		<!-- Helper-lines vertical -->
-		<line x1="00625" x2="00625" y1="00000" y2="10000" stroke-width="00010" stroke="black" stroke-dasharray="00100" />
-		<line x1="01875" x2="01875" y1="00000" y2="10000" stroke-width="00010" stroke="black" stroke-dasharray="00100" />
-		<line x1="03125" x2="03125" y1="00000" y2="10000" stroke-width="00010" stroke="black" stroke-dasharray="00100" />
-		<line x1="04375" x2="04375" y1="00000" y2="10000" stroke-width="00010" stroke="black" stroke-dasharray="00100" />
-		<line x1="05625" x2="05625" y1="00000" y2="10000" stroke-width="00010" stroke="black" stroke-dasharray="00100" />
-		<line x1="06875" x2="06875" y1="00000" y2="10000" stroke-width="00010" stroke="black" stroke-dasharray="00100" />
-		<line x1="08125" x2="08125" y1="00000" y2="10000" stroke-width="00010" stroke="black" stroke-dasharray="00100" />
-		<line x1="09375" x2="09375" y1="00000" y2="10000" stroke-width="00010" stroke="black" stroke-dasharray="00100" />
-		<!-- Dots -->
-		<circle cx="05625" cy="03125" r="00200" fill="black" /><text x="05625" y="03125" fill="red" font-size="01100" transform="translate(00200 -00200)">0</text>
-		<circle cx="04375" cy="06875" r="00200" fill="black" /><text x="04375" y="06875" fill="red" font-size="01100" transform="translate(00200 -00200)">1</text>
-		<circle cx="08125" cy="05625" r="00200" fill="black" /><text x="08125" y="05625" fill="red" font-size="01100" transform="translate(00200 -00200)">2</text>
-		<circle cx="03125" cy="01875" r="00200" fill="black" /><text x="03125" y="01875" fill="red" font-size="01100" transform="translate(00200 -00200)">3</text>
-		<circle cx="01875" cy="08125" r="00200" fill="black" /><text x="01875" y="08125" fill="red" font-size="01100" transform="translate(00200 -00200)">4</text>
-		<circle cx="00625" cy="04375" r="00200" fill="black" /><text x="00625" y="04375" fill="red" font-size="01100" transform="translate(00200 -00200)">5</text>
-		<circle cx="06875" cy="09375" r="00200" fill="black" /><text x="06875" y="09375" fill="red" font-size="01100" transform="translate(00200 -00200)">6</text>
-		<circle cx="09375" cy="00625" r="00200" fill="black" /><text x="09375" y="00625" fill="red" font-size="01100" transform="translate(00200  00700)">7</text>
-	</g>
-</svg>
diff --git a/registry/vulkan/images/sparseimage.svg b/registry/vulkan/images/sparseimage.svg
deleted file mode 100644
index 1cf04ea..0000000
--- a/registry/vulkan/images/sparseimage.svg
+++ /dev/null
@@ -1,361 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Created with Inkscape (http://www.inkscape.org/) -->
-
-<svg
-   xmlns:dc="http://purl.org/dc/elements/1.1/"
-   xmlns:cc="http://creativecommons.org/ns#"
-   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
-   xmlns:svg="http://www.w3.org/2000/svg"
-   xmlns="http://www.w3.org/2000/svg"
-   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
-   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
-   width="213.37727mm"
-   height="140.93106mm"
-   viewBox="0 0 213.37728 140.93106"
-   version="1.1"
-   id="svg5072"
-   inkscape:version="0.92.2 (5c3e80d, 2017-08-06)"
-   sodipodi:docname="sparseimage.svg">
-  <defs
-     id="defs5066" />
-  <sodipodi:namedview
-     id="base"
-     pagecolor="#ffffff"
-     bordercolor="#666666"
-     borderopacity="1.0"
-     inkscape:pageopacity="0.0"
-     inkscape:pageshadow="2"
-     inkscape:zoom="1"
-     inkscape:cx="312.27341"
-     inkscape:cy="211.10847"
-     inkscape:document-units="mm"
-     inkscape:current-layer="g1301"
-     showgrid="true"
-     inkscape:measure-start="50,1040"
-     inkscape:measure-end="50,900"
-     inkscape:snap-object-midpoints="true"
-     inkscape:snap-grids="true"
-     inkscape:snap-text-baseline="true"
-     fit-margin-left="1"
-     fit-margin-top="1"
-     fit-margin-right="1"
-     fit-margin-bottom="1"
-     inkscape:window-width="1680"
-     inkscape:window-height="987"
-     inkscape:window-x="1672"
-     inkscape:window-y="-8"
-     inkscape:window-maximized="0">
-    <inkscape:grid
-       type="xygrid"
-       id="grid5617"
-       originx="5.8699871"
-       originy="-141.02337" />
-  </sodipodi:namedview>
-  <metadata
-     id="metadata5069">
-    <rdf:RDF>
-      <cc:Work
-         rdf:about="">
-        <dc:format>image/svg+xml</dc:format>
-        <dc:type
-           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
-        <dc:title />
-      </cc:Work>
-    </rdf:RDF>
-  </metadata>
-  <g
-     inkscape:label="Layer 1"
-     inkscape:groupmode="layer"
-     id="layer1"
-     transform="translate(5.8699864,-15.045569)">
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-weight:normal;font-size:10.58333302px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
-       x="39.6875"
-       y="19.1875"
-       id="text7094"><tspan
-         sodipodi:role="line"
-         id="tspan7092"
-         x="39.6875"
-         y="19.1875"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458332">Array Layer 0</tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-weight:normal;font-size:10.58333302px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
-       x="97.895836"
-       y="19.187496"
-       id="text7094-5"><tspan
-         sodipodi:role="line"
-         id="tspan7092-3"
-         x="97.895836"
-         y="19.187496"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458332">Array Layer 1</tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-weight:normal;font-size:10.58333302px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
-       x="156.10417"
-       y="19.187496"
-       id="text7094-6"><tspan
-         sodipodi:role="line"
-         id="tspan7092-0"
-         x="156.10417"
-         y="19.187496"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458332">Array Layer 2</tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
-       x="2.6458335"
-       y="48.291668"
-       id="text7094-67"><tspan
-         sodipodi:role="line"
-         x="2.6458335"
-         y="48.291668"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458332"
-         id="tspan7152">Mip</tspan><tspan
-         sodipodi:role="line"
-         x="2.6458337"
-         y="53.583336"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458332"
-         id="tspan7156">Level 0</tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
-       x="2.6458335"
-       y="93.270836"
-       id="text7094-67-1"><tspan
-         sodipodi:role="line"
-         x="2.6458335"
-         y="93.270836"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458332"
-         id="tspan7152-2">Mip</tspan><tspan
-         sodipodi:role="line"
-         x="2.6458337"
-         y="98.5625"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458332"
-         id="tspan7156-6">Level 1</tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
-       x="2.6458335"
-       y="138.25"
-       id="text7094-67-2"><tspan
-         sodipodi:role="line"
-         x="2.6458335"
-         y="138.25"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458332"
-         id="tspan7152-4">Mip</tspan><tspan
-         sodipodi:role="line"
-         x="2.6458337"
-         y="143.54167"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458332"
-         id="tspan7156-0">Level 3</tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
-       x="2.6458335"
-       y="119.72918"
-       id="text7094-67-2-8"><tspan
-         sodipodi:role="line"
-         x="2.6458335"
-         y="119.72918"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458332"
-         id="tspan7152-4-0">Mip</tspan><tspan
-         sodipodi:role="line"
-         x="2.6458337"
-         y="125.02084"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458332"
-         id="tspan7156-0-1">Level 2</tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
-       x="2.6458335"
-       y="154.125"
-       id="text7094-67-2-1"><tspan
-         sodipodi:role="line"
-         x="2.6458333"
-         y="154.125"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458332"
-         id="tspan7156-0-4">Mip Tail</tspan></text>
-    <g
-       id="g1301"
-       transform="translate(1.3229072,-3.1985317e-5)">
-      <rect
-         y="147.51044"
-         x="150.8125"
-         height="5.2916665"
-         width="5.2916665"
-         id="rect6319-7-9-4"
-         style="fill:#ff0000;fill-opacity:1;stroke:#000000;stroke-width:0.26458332;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
-      <rect
-         y="139.57294"
-         x="150.8125"
-         height="5.2916675"
-         width="5.2916675"
-         id="rect5619-4-1-6-6-0-6-8"
-         style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:0.26499999;stroke-miterlimit:4;stroke-dasharray:1.05999995,1.05999995;stroke-dashoffset:0;stroke-opacity:1" />
-      <rect
-         y="131.63542"
-         x="150.8125"
-         height="5.2916675"
-         width="5.2916675"
-         id="rect5619-6-8-6-5-2"
-         style="fill:#808080;fill-opacity:1;stroke:#000000;stroke-width:0.26458332;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
-      <rect
-         y="125.02087"
-         x="149.48959"
-         height="29.104164"
-         width="55.5625"
-         id="rect8983-1"
-         style="fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.26458332;stroke-miterlimit:4;stroke-dasharray:1.05833327,1.05833327;stroke-dashoffset:0;stroke-opacity:1" />
-      <text
-         xml:space="preserve"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.39687499"
-         x="177.27084"
-         y="128.98961"
-         id="text823-4-2-9-4-7-9-85-3"><tspan
-           sodipodi:role="line"
-           x="177.27084"
-           y="128.98961"
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.39687499"
-           id="tspan825-6-0-2-5-6-26-7-3">Legend</tspan></text>
-      <text
-         xml:space="preserve"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.39687499"
-         x="157.42709"
-         y="135.6042"
-         id="text823-4-2-9-4-7-9-85-3-6"><tspan
-           sodipodi:role="line"
-           x="157.42709"
-           y="135.6042"
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.39687499"
-           id="tspan825-6-0-2-5-6-26-7-3-4">Image Pixel Data</tspan></text>
-      <text
-         xml:space="preserve"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.39687499"
-         x="157.42709"
-         y="143.5417"
-         id="text823-4-2-9-4-7-9-85-3-6-5"><tspan
-           sodipodi:role="line"
-           x="157.42709"
-           y="143.5417"
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.39687499"
-           id="tspan825-6-0-2-5-6-26-7-3-4-2">Sparse Memory Block</tspan></text>
-      <text
-         xml:space="preserve"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.39687499"
-         x="157.42709"
-         y="151.4792"
-         id="text823-4-2-9-4-7-9-85-3-6-6"><tspan
-           sodipodi:role="line"
-           x="157.42709"
-           y="151.4792"
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.39687499"
-           id="tspan825-6-0-2-5-6-26-7-3-4-1">Mip Tail Data</tspan></text>
-      <path
-         style="fill:#808080;fill-opacity:1;stroke:#000000;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-         d="M 11.90626,21.833365 H 64.822927 V 74.750031 H 11.90626 Z m 5.291667,0 V 74.750031 M 27.78126,21.833365 v 52.916666 m -5.291667,0 V 21.833365 m 10.583334,0 v 52.916666 m 5.291666,0 V 21.833365 m 5.291667,0 v 52.916666 m 5.291667,0 V 21.833365 m 5.291666,0 v 52.916666 m 5.291667,0 V 21.833365 m 5.291667,5.291666 H 11.90626 m 0,5.291667 h 52.916667 m 0,5.291667 H 11.90626 m 0,5.291666 h 52.916667 m 0,5.291667 H 11.90626 m 0,5.291667 h 52.916667 m 0,5.291666 H 11.90626 m 0,5.291667 h 52.916667 m 0,5.291667 H 11.90626"
-         id="path1236"
-         inkscape:connector-curvature="0" />
-      <path
-         style="fill:#808080;fill-opacity:1;stroke:#000000;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-         d="M 70.114593,21.833366 H 123.03125 V 74.750031 H 70.114593 Z m 5.29167,0 V 74.750031 M 85.989596,21.833366 v 52.916665 m -5.291669,0 V 21.833366 m 10.583336,0 v 52.916665 m 5.291661,0 V 21.833366 m 5.291666,0 v 52.916665 m 5.29167,0 V 21.833366 m 5.29166,0 v 52.916665 m 5.29167,0 V 21.833366 m 5.29166,5.291666 H 70.114593 m 0,5.291666 h 52.916657 m 0,5.291667 H 70.114593 m 0,5.291666 h 52.916657 m 0,5.291667 H 70.114593 m 0,5.291667 h 52.916657 m 0,5.291666 H 70.114593 m 0,5.291667 h 52.916657 m 0,5.291667 H 70.114593"
-         id="path1236-3"
-         inkscape:connector-curvature="0" />
-      <path
-         style="fill:#808080;fill-opacity:1;stroke:#000000;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-         d="m 128.32292,21.833365 h 52.91667 v 52.916666 h -52.91667 z m 5.29167,0 v 52.916666 m 10.58333,-52.916666 v 52.916666 m -5.29166,0 V 21.833365 m 10.58333,0 v 52.916666 m 5.29167,0 V 21.833365 m 5.29166,0 v 52.916666 m 5.29167,0 V 21.833365 m 5.29167,0 v 52.916666 m 5.29166,0 V 21.833365 m 5.29167,5.291666 h -52.91667 m 0,5.291667 h 52.91667 m 0,5.291667 h -52.91667 m 0,5.291666 h 52.91667 m 0,5.291667 h -52.91667 m 0,5.291667 h 52.91667 m 0,5.291666 h -52.91667 m 0,5.291667 h 52.91667 m 0,5.291667 h -52.91667"
-         id="path1236-1"
-         inkscape:connector-curvature="0" />
-      <path
-         id="path1299"
-         d="M 11.90626,80.041698 H 38.364398 V 106.49984 H 11.90626 Z m 5.291628,0 V 106.49984 M 22.489515,80.041698 V 106.49984 M 27.781142,80.041698 V 106.49984 M 33.07277,80.041698 v 26.458142 m -21.16651,-5.29163 h 26.458138 m 0,-5.291628 H 11.90626 m 0,-5.291627 h 26.458138 m 0,-5.29163 H 11.90626"
-         style="fill:#808080;fill-opacity:1;stroke:#000000;stroke-width:0.25399813px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-         inkscape:connector-curvature="0" />
-      <path
-         id="path1299-5"
-         d="M 70.114593,80.041698 H 96.572734 V 106.49984 H 70.114593 Z m 5.29163,0 V 106.49984 M 80.69785,80.041698 v 26.458142 m 5.291627,-26.458142 v 26.458142 m 5.291627,-26.458142 v 26.458142 m -21.166511,-5.29163 h 26.458141 m 0,-5.291628 H 70.114593 m 0,-5.291627 h 26.458141 m 0,-5.29163 H 70.114593"
-         style="fill:#808080;fill-opacity:1;stroke:#000000;stroke-width:0.25399813px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-         inkscape:connector-curvature="0" />
-      <path
-         id="path1299-7"
-         d="m 128.32292,80.041698 h 26.45814 v 26.458142 h -26.45814 z m 5.29163,0 v 26.458142 m 5.29163,-26.458142 v 26.458142 m 5.29162,-26.458142 v 26.458142 m 5.29163,-26.458142 v 26.458142 m -21.16651,-5.29163 h 26.45814 m 0,-5.291628 h -26.45814 m 0,-5.291627 h 26.45814 m 0,-5.29163 h -26.45814"
-         style="fill:#808080;fill-opacity:1;stroke:#000000;stroke-width:0.25399813px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-         inkscape:connector-curvature="0" />
-      <path
-         style="fill:#ff0000;stroke:#000000;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-         d="m 11.90626,148.83337 h 10.583332 v 5.29167 H 11.90626 Z m 5.291667,0 v 5.29167"
-         id="path1160"
-         inkscape:connector-curvature="0" />
-      <path
-         style="fill:none;stroke:#000000;stroke-width:0.26458332;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1.05833334, 1.05833334;stroke-dashoffset:0;stroke-opacity:1"
-         d="m 18.52084,143.54172 h 3.96875 V 132.95838 H 11.90626 v 3.96875 m 5.29166,0 v -3.96875 m 1.32292,5.29167 h 3.96875"
-         id="path1094-0"
-         inkscape:connector-curvature="0" />
-      <path
-         style="fill:#808080;fill-opacity:1;stroke:#000000;stroke-width:0.26458332;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
-         d="m 17.19792,143.54172 v -6.61459 m 1.32292,1.32292 h -6.61458 m 6.61458,5.29167 h -6.61458 v -6.61459 h 6.61458 v 6.61459"
-         id="path1111-1"
-         inkscape:connector-curvature="0" />
-      <path
-         style="fill:#808080;fill-opacity:1;stroke:#000000;stroke-width:0.26458332;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
-         d="m 11.90626,114.43753 v 13.22916 H 25.13542 V 114.43753 H 11.90626 m 5.291659,0 v 13.22916 m 5.291671,0 v -13.22916 m -10.58333,2.64584 h 13.22916 m -13.22916,5.29166 h 13.22916"
-         id="path1124-3"
-         inkscape:connector-curvature="0" />
-      <path
-         style="fill:none;stroke:#000000;stroke-width:0.26458332;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1.05833335, 1.05833335;stroke-dashoffset:0;stroke-opacity:1"
-         d="m 25.13543,127.66669 h 2.645831 V 111.7917 H 11.90626 v 2.64584 m 5.29167,-2.64584 v 2.64584 m 5.29166,-2.64584 v 2.64584 m 5.291671,2.64583 H 25.13543 m 2.645831,5.29166 H 25.13543"
-         id="path1141-9"
-         inkscape:connector-curvature="0" />
-      <path
-         style="fill:#ff0000;stroke:#000000;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-         d="m 70.114594,148.83338 h 10.583332 v 5.29167 H 70.114594 Z m 5.291666,0 v 5.29167"
-         id="path1160-3"
-         inkscape:connector-curvature="0" />
-      <path
-         style="fill:none;stroke:#000000;stroke-width:0.26458332;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1.05833335, 1.05833335;stroke-dashoffset:0;stroke-opacity:1"
-         d="m 76.729174,143.54171 h 3.96875 v -10.58334 h -10.58333 v 3.96875 m 5.29166,0 v -3.96875 m 1.32292,5.29167 h 3.96875"
-         id="path1094-0-5"
-         inkscape:connector-curvature="0" />
-      <path
-         style="fill:#808080;fill-opacity:1;stroke:#000000;stroke-width:0.26458332;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
-         d="m 75.406254,143.54171 v -6.61459 m 1.32292,1.32292 h -6.61458 m 6.61458,5.29167 h -6.61458 v -6.61459 h 6.61458 v 6.61459"
-         id="path1111-1-6"
-         inkscape:connector-curvature="0" />
-      <path
-         style="fill:#808080;fill-opacity:1;stroke:#000000;stroke-width:0.26458332;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
-         d="m 70.114594,114.43754 v 13.22916 h 13.22916 v -13.22916 h -13.22916 m 5.291659,0 v 13.22916 m 5.291671,0 v -13.22916 m -10.58333,2.64584 h 13.22916 m -13.22916,5.29166 h 13.22916"
-         id="path1124-3-4"
-         inkscape:connector-curvature="0" />
-      <path
-         style="fill:none;stroke:#000000;stroke-width:0.26458332;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1.05833336, 1.05833336;stroke-dashoffset:0;stroke-opacity:1"
-         d="m 83.343764,127.6667 h 2.645831 V 111.79171 H 70.114594 v 2.64584 m 5.29167,-2.64584 v 2.64584 m 5.29166,-2.64584 v 2.64584 m 5.291671,2.64583 h -2.645831 m 2.645831,5.29166 h -2.645831"
-         id="path1141-9-1"
-         inkscape:connector-curvature="0" />
-      <path
-         style="fill:#ff0000;stroke:#000000;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-         d="m 128.32293,148.83338 h 10.58333 v 5.29167 h -10.58333 z m 5.29167,0 v 5.29167"
-         id="path1160-0"
-         inkscape:connector-curvature="0" />
-      <path
-         style="fill:none;stroke:#000000;stroke-width:0.26458332;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1.05833335, 1.05833335;stroke-dashoffset:0;stroke-opacity:1"
-         d="m 134.93751,143.54171 h 3.96875 v -10.58334 h -10.58333 v 3.96875 m 5.29166,0 v -3.96875 m 1.32292,5.29167 h 3.96875"
-         id="path1094-0-9"
-         inkscape:connector-curvature="0" />
-      <path
-         style="fill:#808080;fill-opacity:1;stroke:#000000;stroke-width:0.26458332;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
-         d="m 133.61459,143.54171 v -6.61459 m 1.32292,1.32292 h -6.61458 m 6.61458,5.29167 h -6.61458 v -6.61459 h 6.61458 v 6.61459"
-         id="path1111-1-1"
-         inkscape:connector-curvature="0" />
-      <path
-         style="fill:#808080;fill-opacity:1;stroke:#000000;stroke-width:0.26458332;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
-         d="m 128.32293,114.43754 v 13.22916 h 13.22916 v -13.22916 h -13.22916 m 5.29166,0 v 13.22916 m 5.29167,0 v -13.22916 m -10.58333,2.64584 h 13.22916 m -13.22916,5.29166 h 13.22916"
-         id="path1124-3-5"
-         inkscape:connector-curvature="0" />
-      <path
-         style="fill:none;stroke:#000000;stroke-width:0.26458332;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1.05833336, 1.05833336;stroke-dashoffset:0;stroke-opacity:1"
-         d="m 141.5521,127.6667 h 2.64583 v -15.87499 h -15.875 v 2.64584 m 5.29167,-2.64584 v 2.64584 m 5.29166,-2.64584 v 2.64584 m 5.29167,2.64583 h -2.64583 m 2.64583,5.29166 h -2.64583"
-         id="path1141-9-5"
-         inkscape:connector-curvature="0" />
-    </g>
-  </g>
-</svg>
diff --git a/registry/vulkan/images/sparseimage_alignedmipsize.svg b/registry/vulkan/images/sparseimage_alignedmipsize.svg
deleted file mode 100644
index db50839..0000000
--- a/registry/vulkan/images/sparseimage_alignedmipsize.svg
+++ /dev/null
@@ -1,270 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Created with Inkscape (http://www.inkscape.org/) -->
-
-<svg
-   xmlns:dc="http://purl.org/dc/elements/1.1/"
-   xmlns:cc="http://creativecommons.org/ns#"
-   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
-   xmlns:svg="http://www.w3.org/2000/svg"
-   xmlns="http://www.w3.org/2000/svg"
-   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
-   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
-   width="213.37727mm"
-   height="126.98255mm"
-   viewBox="0 0 213.37728 126.98255"
-   version="1.1"
-   id="svg5072"
-   inkscape:version="0.92.2 (5c3e80d, 2017-08-06)"
-   sodipodi:docname="sparseimage_alignedmipsize.svg">
-  <sodipodi:namedview
-     id="base"
-     pagecolor="#ffffff"
-     bordercolor="#666666"
-     borderopacity="1.0"
-     inkscape:pageopacity="0.0"
-     inkscape:pageshadow="2"
-     inkscape:zoom="1.4"
-     inkscape:cx="320.51149"
-     inkscape:cy="359.79403"
-     inkscape:document-units="mm"
-     inkscape:current-layer="layer1"
-     showgrid="true"
-     inkscape:measure-start="50,1040"
-     inkscape:measure-end="50,900"
-     inkscape:snap-object-midpoints="true"
-     inkscape:snap-grids="true"
-     inkscape:snap-text-baseline="true"
-     fit-margin-left="1"
-     fit-margin-top="1"
-     fit-margin-right="1"
-     fit-margin-bottom="1"
-     inkscape:window-width="1680"
-     inkscape:window-height="987"
-     inkscape:window-x="1672"
-     inkscape:window-y="-8"
-     inkscape:window-maximized="0">
-    <inkscape:grid
-       type="xygrid"
-       id="grid5617"
-       originx="5.8699868"
-       originy="-154.97188" />
-  </sodipodi:namedview>
-  <metadata
-     id="metadata5069">
-    <rdf:RDF>
-      <cc:Work
-         rdf:about="">
-        <dc:format>image/svg+xml</dc:format>
-        <dc:type
-           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
-        <dc:title />
-      </cc:Work>
-    </rdf:RDF>
-  </metadata>
-  <g
-     inkscape:label="Layer 1"
-     inkscape:groupmode="layer"
-     id="layer1"
-     transform="translate(5.8699862,-15.045569)">
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-weight:normal;font-size:10.58333302px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
-       x="39.6875"
-       y="19.1875"
-       id="text7094"><tspan
-         sodipodi:role="line"
-         id="tspan7092"
-         x="39.6875"
-         y="19.1875"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458332">Array Layer 0</tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-weight:normal;font-size:10.58333302px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
-       x="97.895836"
-       y="19.187496"
-       id="text7094-5"><tspan
-         sodipodi:role="line"
-         id="tspan7092-3"
-         x="97.895836"
-         y="19.187496"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458332">Array Layer 1</tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-weight:normal;font-size:10.58333302px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
-       x="156.10417"
-       y="19.187496"
-       id="text7094-6"><tspan
-         sodipodi:role="line"
-         id="tspan7092-0"
-         x="156.10417"
-         y="19.187496"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458332">Array Layer 2</tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
-       x="2.6458335"
-       y="48.291668"
-       id="text7094-67"><tspan
-         sodipodi:role="line"
-         x="2.6458335"
-         y="48.291668"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458332"
-         id="tspan7152">Mip</tspan><tspan
-         sodipodi:role="line"
-         x="2.6458337"
-         y="53.583336"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458332"
-         id="tspan7156">Level 0</tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
-       x="2.6458335"
-       y="93.270836"
-       id="text7094-67-1"><tspan
-         sodipodi:role="line"
-         x="2.6458335"
-         y="93.270836"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458332"
-         id="tspan7152-2">Mip</tspan><tspan
-         sodipodi:role="line"
-         x="2.6458337"
-         y="98.5625"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458332"
-         id="tspan7156-6">Level 1</tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
-       x="2.6458337"
-       y="127.66666"
-       id="text7094-67-2-1"><tspan
-         sodipodi:role="line"
-         x="2.6458335"
-         y="127.66666"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458332"
-         id="tspan7156-0-4">Mip Tail</tspan></text>
-    <g
-       transform="translate(1.3229068,-13.229199)"
-       id="g1301">
-      <rect
-         y="147.51044"
-         x="150.8125"
-         height="5.2916665"
-         width="5.2916665"
-         id="rect6319-7-9-4"
-         style="fill:#ff0000;fill-opacity:1;stroke:#000000;stroke-width:0.26458332;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
-      <rect
-         y="139.57294"
-         x="150.8125"
-         height="5.2916675"
-         width="5.2916675"
-         id="rect5619-4-1-6-6-0-6-8"
-         style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:0.26499999;stroke-miterlimit:4;stroke-dasharray:1.05999995,1.05999995;stroke-dashoffset:0;stroke-opacity:1" />
-      <rect
-         y="131.63542"
-         x="150.8125"
-         height="5.2916675"
-         width="5.2916675"
-         id="rect5619-6-8-6-5-2"
-         style="fill:#808080;fill-opacity:1;stroke:#000000;stroke-width:0.26458332;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
-      <rect
-         y="125.02087"
-         x="149.48959"
-         height="29.104164"
-         width="55.5625"
-         id="rect8983-1"
-         style="fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.265;stroke-miterlimit:4;stroke-dasharray:1.06,1.06;stroke-dashoffset:0;stroke-opacity:1" />
-      <text
-         xml:space="preserve"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.39687499"
-         x="177.27084"
-         y="128.98961"
-         id="text823-4-2-9-4-7-9-85-3"><tspan
-           sodipodi:role="line"
-           x="177.27084"
-           y="128.98961"
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.39687499"
-           id="tspan825-6-0-2-5-6-26-7-3">Legend</tspan></text>
-      <text
-         xml:space="preserve"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.39687499"
-         x="157.42709"
-         y="135.6042"
-         id="text823-4-2-9-4-7-9-85-3-6"><tspan
-           sodipodi:role="line"
-           x="157.42709"
-           y="135.6042"
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.39687499"
-           id="tspan825-6-0-2-5-6-26-7-3-4">Image Pixel Data</tspan></text>
-      <text
-         xml:space="preserve"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.39687499"
-         x="157.42709"
-         y="143.5417"
-         id="text823-4-2-9-4-7-9-85-3-6-5"><tspan
-           sodipodi:role="line"
-           x="157.42709"
-           y="143.5417"
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.39687499"
-           id="tspan825-6-0-2-5-6-26-7-3-4-2">Sparse Memory Block</tspan></text>
-      <text
-         xml:space="preserve"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.39687499"
-         x="157.42709"
-         y="151.4792"
-         id="text823-4-2-9-4-7-9-85-3-6-6"><tspan
-           sodipodi:role="line"
-           x="157.42709"
-           y="151.4792"
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.39687499"
-           id="tspan825-6-0-2-5-6-26-7-3-4-1">Mip Tail Data</tspan></text>
-    </g>
-    <path
-       style="fill:#808080;fill-opacity:1;stroke:#000000;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-       d="M 13.229167,21.833334 H 66.145833 V 74.75 H 13.229167 Z m 5.291667,0 V 74.75 M 29.104167,21.833334 V 74.75 m -5.291667,0 V 21.833334 m 10.583334,0 V 74.75 m 5.291666,0 V 21.833334 m 5.291666,0 V 74.75 m 5.291667,0 V 21.833334 m 5.291667,0 V 74.75 m 5.291666,0 V 21.833334 M 66.145833,27.125 H 13.229167 m 0,5.291667 h 52.916666 m 0,5.291667 H 13.229167 m 0,5.291666 h 52.916666 m 0,5.291667 H 13.229167 m 0,5.291667 h 52.916666 m 0,5.291666 H 13.229167 m 0,5.291667 h 52.916666 m 0,5.291667 H 13.229167"
-       id="path1236"
-       inkscape:connector-curvature="0" />
-    <path
-       style="fill:#808080;fill-opacity:1;stroke:#000000;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-       d="M 71.437501,21.833335 H 124.35416 V 74.75 H 71.437501 Z m 5.291667,0 V 74.75 M 87.312501,21.833335 V 74.75 m -5.291667,0 V 21.833335 m 10.583334,0 V 74.75 m 5.291666,0 V 21.833335 m 5.291666,0 V 74.75 m 5.29167,0 V 21.833335 m 5.29166,0 V 74.75 m 5.29167,0 V 21.833335 m 5.29166,5.291666 H 71.437501 m 0,5.291666 h 52.916659 m 0,5.291667 H 71.437501 m 0,5.291666 h 52.916659 m 0,5.291667 H 71.437501 m 0,5.291667 h 52.916659 m 0,5.291666 H 71.437501 m 0,5.291667 h 52.916659 m 0,5.291667 H 71.437501"
-       id="path1236-3"
-       inkscape:connector-curvature="0" />
-    <path
-       style="fill:#808080;fill-opacity:1;stroke:#000000;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-       d="M 129.64583,21.833334 H 182.5625 V 74.75 h -52.91667 z m 5.29167,0 V 74.75 M 145.52083,21.833334 V 74.75 m -5.29166,0 V 21.833334 m 10.58333,0 V 74.75 m 5.29167,0 V 21.833334 m 5.29166,0 V 74.75 m 5.29167,0 V 21.833334 m 5.29167,0 V 74.75 m 5.29166,0 V 21.833334 M 182.5625,27.125 h -52.91667 m 0,5.291667 h 52.91667 m 0,5.291667 h -52.91667 m 0,5.291666 h 52.91667 m 0,5.291667 h -52.91667 m 0,5.291667 h 52.91667 m 0,5.291666 h -52.91667 m 0,5.291667 h 52.91667 m 0,5.291667 h -52.91667"
-       id="path1236-1"
-       inkscape:connector-curvature="0" />
-    <path
-       id="path1299"
-       d="M 13.229167,80.041667 H 39.687305 V 106.49981 H 13.229167 Z m 5.291628,0 v 26.458143 m 5.291627,-26.458143 v 26.458143 m 5.291627,-26.458143 v 26.458143 m 5.291628,-26.458143 v 26.458143 m -21.16651,-5.29163 h 26.458138 m 0,-5.291631 H 13.229167 m 0,-5.291627 h 26.458138 m 0,-5.291628 H 13.229167"
-       style="fill:#808080;stroke:#000000;stroke-width:0.25399813px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;fill-opacity:1"
-       inkscape:connector-curvature="0" />
-    <path
-       id="path1299-5"
-       d="M 71.437501,80.041667 H 97.895639 V 106.49981 H 71.437501 Z m 5.291628,0 v 26.458143 m 5.291627,-26.458143 v 26.458143 m 5.291627,-26.458143 v 26.458143 m 5.291628,-26.458143 v 26.458143 m -21.16651,-5.29163 h 26.458138 m 0,-5.291631 H 71.437501 m 0,-5.291627 h 26.458138 m 0,-5.291628 H 71.437501"
-       style="fill:#808080;fill-opacity:1;stroke:#000000;stroke-width:0.25399813px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       inkscape:connector-curvature="0" />
-    <path
-       id="path1299-7"
-       d="m 129.64583,80.041667 h 26.45814 v 26.458143 h -26.45814 z m 5.29163,0 v 26.458143 m 5.29163,-26.458143 v 26.458143 m 5.29162,-26.458143 v 26.458143 m 5.29163,-26.458143 v 26.458143 m -21.16651,-5.29163 h 26.45814 m 0,-5.291631 h -26.45814 m 0,-5.291627 h 26.45814 m 0,-5.291628 h -26.45814"
-       style="fill:#808080;fill-opacity:1;stroke:#000000;stroke-width:0.25399813px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       inkscape:connector-curvature="0" />
-    <path
-       id="path1299-6"
-       d="m 13.229167,111.79167 15.875001,-3e-5 v 26.45815 l -15.875001,3e-5 z m 5.291629,0 v 26.45815 m 5.291627,-26.45815 v 26.45815 m -10.583256,-5.29163 15.875001,-3e-5 m 0,-5.29164 -15.875001,3e-5 m 0,-5.29162 15.875001,-3e-5 m 0,-5.29163 -15.875001,3e-5"
-       style="fill:#ff0000;fill-opacity:1;stroke:#000000;stroke-width:0.25399813px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       inkscape:connector-curvature="0"
-       sodipodi:nodetypes="ccccccccccccccccc" />
-    <path
-       id="path1299-6-4"
-       d="m 71.437501,111.79167 15.875001,-3e-5 v 26.45815 l -15.875001,3e-5 z m 5.291628,0 v 26.45815 m 5.291628,-26.45815 v 26.45815 m -10.583256,-5.29163 15.875001,-3e-5 m 0,-5.29164 -15.875001,3e-5 m 0,-5.29162 15.875001,-3e-5 m 0,-5.29163 -15.875001,3e-5"
-       style="fill:#ff0000;fill-opacity:1;stroke:#000000;stroke-width:0.25399813px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       inkscape:connector-curvature="0"
-       sodipodi:nodetypes="ccccccccccccccccc" />
-    <path
-       id="path1299-6-8"
-       d="m 129.64583,111.79167 15.875,-3e-5 v 26.45815 l -15.875,3e-5 z m 5.29163,0 v 26.45815 m 5.29162,-26.45815 v 26.45815 m -10.58325,-5.29163 15.875,-3e-5 m 0,-5.29164 -15.875,3e-5 m 0,-5.29162 15.875,-3e-5 m 0,-5.29163 -15.875,3e-5"
-       style="fill:#ff0000;fill-opacity:1;stroke:#000000;stroke-width:0.25399813px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       inkscape:connector-curvature="0"
-       sodipodi:nodetypes="ccccccccccccccccc" />
-  </g>
-</svg>
diff --git a/registry/vulkan/images/sparseimage_alignedmipsize_singlemiptail.svg b/registry/vulkan/images/sparseimage_alignedmipsize_singlemiptail.svg
deleted file mode 100644
index 74707a3..0000000
--- a/registry/vulkan/images/sparseimage_alignedmipsize_singlemiptail.svg
+++ /dev/null
@@ -1,260 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Created with Inkscape (http://www.inkscape.org/) -->
-
-<svg
-   xmlns:dc="http://purl.org/dc/elements/1.1/"
-   xmlns:cc="http://creativecommons.org/ns#"
-   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
-   xmlns:svg="http://www.w3.org/2000/svg"
-   xmlns="http://www.w3.org/2000/svg"
-   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
-   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
-   width="213.37727mm"
-   height="126.98255mm"
-   viewBox="0 0 213.37728 126.98255"
-   version="1.1"
-   id="svg5072"
-   inkscape:version="0.92.2 (5c3e80d, 2017-08-06)"
-   sodipodi:docname="sparseimage_alignedmipsize_singlemiptail.svg">
-  <defs
-     id="defs5066" />
-  <sodipodi:namedview
-     id="base"
-     pagecolor="#ffffff"
-     bordercolor="#666666"
-     borderopacity="1.0"
-     inkscape:pageopacity="0.0"
-     inkscape:pageshadow="2"
-     inkscape:zoom="1.4"
-     inkscape:cx="386.2212"
-     inkscape:cy="333.12919"
-     inkscape:document-units="mm"
-     inkscape:current-layer="layer1"
-     showgrid="true"
-     inkscape:measure-start="50,1040"
-     inkscape:measure-end="50,900"
-     inkscape:snap-object-midpoints="true"
-     inkscape:snap-grids="true"
-     inkscape:snap-text-baseline="true"
-     fit-margin-left="1"
-     fit-margin-top="1"
-     fit-margin-right="1"
-     fit-margin-bottom="1"
-     inkscape:window-width="1680"
-     inkscape:window-height="987"
-     inkscape:window-x="-8"
-     inkscape:window-y="-8"
-     inkscape:window-maximized="0">
-    <inkscape:grid
-       type="xygrid"
-       id="grid5617"
-       originx="5.8699868"
-       originy="-154.97188" />
-  </sodipodi:namedview>
-  <metadata
-     id="metadata5069">
-    <rdf:RDF>
-      <cc:Work
-         rdf:about="">
-        <dc:format>image/svg+xml</dc:format>
-        <dc:type
-           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
-        <dc:title />
-      </cc:Work>
-    </rdf:RDF>
-  </metadata>
-  <g
-     inkscape:label="Layer 1"
-     inkscape:groupmode="layer"
-     id="layer1"
-     transform="translate(5.8699862,-15.045569)">
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-weight:normal;font-size:10.58333302px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
-       x="39.6875"
-       y="19.1875"
-       id="text7094"><tspan
-         sodipodi:role="line"
-         id="tspan7092"
-         x="39.6875"
-         y="19.1875"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458332">Array Layer 0</tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-weight:normal;font-size:10.58333302px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
-       x="97.895836"
-       y="19.187496"
-       id="text7094-5"><tspan
-         sodipodi:role="line"
-         id="tspan7092-3"
-         x="97.895836"
-         y="19.187496"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458332">Array Layer 1</tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-weight:normal;font-size:10.58333302px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
-       x="156.10417"
-       y="19.187496"
-       id="text7094-6"><tspan
-         sodipodi:role="line"
-         id="tspan7092-0"
-         x="156.10417"
-         y="19.187496"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458332">Array Layer 2</tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
-       x="2.6458335"
-       y="48.291668"
-       id="text7094-67"><tspan
-         sodipodi:role="line"
-         x="2.6458335"
-         y="48.291668"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458332"
-         id="tspan7152">Mip</tspan><tspan
-         sodipodi:role="line"
-         x="2.6458337"
-         y="53.583336"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458332"
-         id="tspan7156">Level 0</tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
-       x="2.6458335"
-       y="93.270836"
-       id="text7094-67-1"><tspan
-         sodipodi:role="line"
-         x="2.6458335"
-         y="93.270836"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458332"
-         id="tspan7152-2">Mip</tspan><tspan
-         sodipodi:role="line"
-         x="2.6458337"
-         y="98.5625"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458332"
-         id="tspan7156-6">Level 1</tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
-       x="2.6458337"
-       y="127.66666"
-       id="text7094-67-2-1"><tspan
-         sodipodi:role="line"
-         x="2.6458335"
-         y="127.66666"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458332"
-         id="tspan7156-0-4">Mip Tail</tspan></text>
-    <g
-       transform="translate(1.3229068,-13.229199)"
-       id="g1301">
-      <rect
-         y="147.51044"
-         x="150.8125"
-         height="5.2916665"
-         width="5.2916665"
-         id="rect6319-7-9-4"
-         style="fill:#ff0000;fill-opacity:1;stroke:#000000;stroke-width:0.26458332;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
-      <rect
-         y="139.57294"
-         x="150.8125"
-         height="5.2916675"
-         width="5.2916675"
-         id="rect5619-4-1-6-6-0-6-8"
-         style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:0.26458332;stroke-miterlimit:4;stroke-dasharray:1.05833327,1.05833327;stroke-dashoffset:0;stroke-opacity:1" />
-      <rect
-         y="131.63542"
-         x="150.8125"
-         height="5.2916675"
-         width="5.2916675"
-         id="rect5619-6-8-6-5-2"
-         style="fill:#808080;fill-opacity:1;stroke:#000000;stroke-width:0.26458332;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
-      <rect
-         y="125.02087"
-         x="149.48959"
-         height="29.104164"
-         width="55.5625"
-         id="rect8983-1"
-         style="fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.26499999;stroke-miterlimit:4;stroke-dasharray:1.05999995,1.05999995;stroke-dashoffset:0;stroke-opacity:1" />
-      <text
-         xml:space="preserve"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.39687499"
-         x="177.27084"
-         y="128.98961"
-         id="text823-4-2-9-4-7-9-85-3"><tspan
-           sodipodi:role="line"
-           x="177.27084"
-           y="128.98961"
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.39687499"
-           id="tspan825-6-0-2-5-6-26-7-3">Legend</tspan></text>
-      <text
-         xml:space="preserve"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.39687499"
-         x="157.42709"
-         y="135.6042"
-         id="text823-4-2-9-4-7-9-85-3-6"><tspan
-           sodipodi:role="line"
-           x="157.42709"
-           y="135.6042"
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.39687499"
-           id="tspan825-6-0-2-5-6-26-7-3-4">Image Pixel Data</tspan></text>
-      <text
-         xml:space="preserve"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.39687499"
-         x="157.42709"
-         y="143.5417"
-         id="text823-4-2-9-4-7-9-85-3-6-5"><tspan
-           sodipodi:role="line"
-           x="157.42709"
-           y="143.5417"
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.39687499"
-           id="tspan825-6-0-2-5-6-26-7-3-4-2">Sparse Memory Block</tspan></text>
-      <text
-         xml:space="preserve"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.39687499"
-         x="157.42709"
-         y="151.4792"
-         id="text823-4-2-9-4-7-9-85-3-6-6"><tspan
-           sodipodi:role="line"
-           x="157.42709"
-           y="151.4792"
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.39687499"
-           id="tspan825-6-0-2-5-6-26-7-3-4-1">Mip Tail Data</tspan></text>
-    </g>
-    <path
-       style="fill:#808080;fill-opacity:1;stroke:#000000;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-       d="M 13.229167,21.833334 H 66.145833 V 74.75 H 13.229167 Z m 5.291667,0 V 74.75 M 29.104167,21.833334 V 74.75 m -5.291667,0 V 21.833334 m 10.583334,0 V 74.75 m 5.291666,0 V 21.833334 m 5.291666,0 V 74.75 m 5.291667,0 V 21.833334 m 5.291667,0 V 74.75 m 5.291666,0 V 21.833334 M 66.145833,27.125 H 13.229167 m 0,5.291666 h 52.916666 m 0,5.291667 H 13.229167 m 0,5.291666 h 52.916666 m 0,5.291667 H 13.229167 m 0,5.291668 h 52.916666 m 0,5.291666 H 13.229167 m 0,5.291667 h 52.916666 m 0,5.291667 H 13.229167"
-       id="path1236"
-       inkscape:connector-curvature="0" />
-    <path
-       style="fill:#808080;fill-opacity:1;stroke:#000000;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-       d="m 71.4375,21.833335 h 52.91666 V 74.75 H 71.4375 Z m 5.291669,0 V 74.75 M 87.312502,21.833335 V 74.75 m -5.291669,0 V 21.833335 m 10.583336,0 V 74.75 m 5.291664,0 V 21.833335 m 5.291667,0 V 74.75 m 5.29167,0 V 21.833335 m 5.29166,0 V 74.75 m 5.29167,0 V 21.833335 m 5.29166,5.291666 H 71.4375 m 0,5.291665 h 52.91666 m 0,5.291667 H 71.4375 m 0,5.291666 h 52.91666 m 0,5.291667 H 71.4375 m 0,5.291668 h 52.91666 m 0,5.291666 H 71.4375 m 0,5.291667 h 52.91666 m 0,5.291667 H 71.4375"
-       id="path1236-3"
-       inkscape:connector-curvature="0" />
-    <path
-       style="fill:#808080;fill-opacity:1;stroke:#000000;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-       d="M 129.64583,21.833334 H 182.5625 V 74.75 h -52.91667 z m 5.29167,0 V 74.75 M 145.52083,21.833334 V 74.75 m -5.29166,0 V 21.833334 m 10.58333,0 V 74.75 m 5.29167,0 V 21.833334 m 5.29166,0 V 74.75 m 5.29167,0 V 21.833334 m 5.29167,0 V 74.75 m 5.29166,0 V 21.833334 M 182.5625,27.125 h -52.91667 m 0,5.291666 h 52.91667 m 0,5.291667 h -52.91667 m 0,5.291666 h 52.91667 m 0,5.291667 h -52.91667 m 0,5.291668 h 52.91667 m 0,5.291666 h -52.91667 m 0,5.291667 h 52.91667 m 0,5.291667 h -52.91667"
-       id="path1236-1"
-       inkscape:connector-curvature="0" />
-    <path
-       id="path1299"
-       d="M 13.229167,80.041667 H 39.687304 V 106.49981 H 13.229167 Z m 5.291628,0 v 26.458143 m 5.291627,-26.458143 v 26.458143 m 5.291627,-26.458143 v 26.458143 m 5.291628,-26.458143 v 26.458143 m -21.16651,-5.29163 h 26.458137 m 0,-5.291629 H 13.229167 m 0,-5.291627 h 26.458137 m 0,-5.29163 H 13.229167"
-       style="fill:#808080;fill-opacity:1;stroke:#000000;stroke-width:0.25399813px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       inkscape:connector-curvature="0" />
-    <path
-       id="path1299-5"
-       d="M 71.4375,80.041667 H 97.895643 V 106.49981 H 71.4375 Z m 5.291629,0 V 106.49981 M 82.020756,80.041667 V 106.49981 M 87.312383,80.041667 V 106.49981 M 92.60401,80.041667 V 106.49981 M 71.4375,101.20818 h 26.458143 m 0,-5.291629 H 71.4375 m 0,-5.291627 h 26.458143 m 0,-5.29163 H 71.4375"
-       style="fill:#808080;fill-opacity:1;stroke:#000000;stroke-width:0.25399813px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       inkscape:connector-curvature="0" />
-    <path
-       id="path1299-7"
-       d="m 129.64583,80.041667 h 26.45814 v 26.458143 h -26.45814 z m 5.29163,0 v 26.458143 m 5.29163,-26.458143 v 26.458143 m 5.29162,-26.458143 v 26.458143 m 5.29163,-26.458143 v 26.458143 m -21.16651,-5.29163 h 26.45814 m 0,-5.291629 h -26.45814 m 0,-5.291627 h 26.45814 m 0,-5.29163 h -26.45814"
-       style="fill:#808080;fill-opacity:1;stroke:#000000;stroke-width:0.25399813px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       inkscape:connector-curvature="0" />
-    <path
-       style="fill:#ff0000;fill-opacity:1;stroke:#000000;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-       d="m 13.229167,111.79167 h 47.625 V 138.25 h -47.625 z m 5.291667,0 V 138.25 M 29.104167,111.79167 V 138.25 m -5.291667,0 v -26.45833 m 10.583334,0 V 138.25 m 5.291666,0 v -26.45833 m 5.291666,0 V 138.25 m 5.291667,0 v -26.45833 m 5.291667,0 V 138.25 m 5.291667,-21.16666 h -47.625 m 0,5.29166 h 47.625 m 0,5.29167 h -47.625 m 0,5.29167 h 47.625"
-       id="path1236-7"
-       inkscape:connector-curvature="0"
-       sodipodi:nodetypes="ccccccccccccccccccccccccccccc" />
-  </g>
-</svg>
diff --git a/registry/vulkan/images/sparseimage_multiaspect.svg b/registry/vulkan/images/sparseimage_multiaspect.svg
deleted file mode 100644
index 810fbf6..0000000
--- a/registry/vulkan/images/sparseimage_multiaspect.svg
+++ /dev/null
@@ -1,339 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Created with Inkscape (http://www.inkscape.org/) -->
-
-<svg
-   xmlns:dc="http://purl.org/dc/elements/1.1/"
-   xmlns:cc="http://creativecommons.org/ns#"
-   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
-   xmlns:svg="http://www.w3.org/2000/svg"
-   xmlns="http://www.w3.org/2000/svg"
-   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
-   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
-   width="163.10645mm"
-   height="156.29341mm"
-   viewBox="0 0 163.10645 156.29341"
-   version="1.1"
-   id="svg5072"
-   sodipodi:docname="sparseimage_multiaspect.svg"
-   inkscape:version="0.92.2 (5c3e80d, 2017-08-06)">
-  <defs
-     id="defs5066" />
-  <sodipodi:namedview
-     id="base"
-     pagecolor="#ffffff"
-     bordercolor="#666666"
-     borderopacity="1.0"
-     inkscape:pageopacity="0.0"
-     inkscape:pageshadow="2"
-     inkscape:zoom="1.4142136"
-     inkscape:cx="287.95243"
-     inkscape:cy="224.95974"
-     inkscape:document-units="mm"
-     inkscape:current-layer="layer1"
-     showgrid="true"
-     inkscape:measure-start="50,1040"
-     inkscape:measure-end="50,900"
-     inkscape:snap-object-midpoints="true"
-     inkscape:snap-grids="true"
-     inkscape:snap-text-baseline="true"
-     fit-margin-left="1"
-     fit-margin-top="1"
-     fit-margin-right="1"
-     fit-margin-bottom="1"
-     inkscape:window-width="1680"
-     inkscape:window-height="987"
-     inkscape:window-x="1672"
-     inkscape:window-y="-8"
-     inkscape:window-maximized="0"
-     showguides="false">
-    <inkscape:grid
-       type="xygrid"
-       id="grid5617"
-       originx="5.8699862"
-       originy="-125.73543" />
-  </sodipodi:namedview>
-  <metadata
-     id="metadata5069">
-    <rdf:RDF>
-      <cc:Work
-         rdf:about="">
-        <dc:format>image/svg+xml</dc:format>
-        <dc:type
-           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
-        <dc:title />
-      </cc:Work>
-    </rdf:RDF>
-  </metadata>
-  <g
-     inkscape:label="Layer 1"
-     inkscape:groupmode="layer"
-     id="layer1"
-     transform="translate(5.8699859,-14.971155)">
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-weight:normal;font-size:10.58333302px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
-       x="39.6875"
-       y="19.1875"
-       id="text7094"><tspan
-         sodipodi:role="line"
-         id="tspan7092"
-         x="39.6875"
-         y="19.1875"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458332">Depth</tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-weight:normal;font-size:10.58333302px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
-       x="97.895836"
-       y="19.187496"
-       id="text7094-5"><tspan
-         sodipodi:role="line"
-         id="tspan7092-3"
-         x="97.895836"
-         y="19.187496"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458332">Stencil</tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
-       x="2.6458335"
-       y="48.291668"
-       id="text7094-67"><tspan
-         sodipodi:role="line"
-         x="2.6458335"
-         y="48.291668"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458332"
-         id="tspan7152">Mip</tspan><tspan
-         sodipodi:role="line"
-         x="2.6458337"
-         y="53.583336"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458332"
-         id="tspan7156">Level 0</tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
-       x="2.6458335"
-       y="93.270836"
-       id="text7094-67-1"><tspan
-         sodipodi:role="line"
-         x="2.6458335"
-         y="93.270836"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458332"
-         id="tspan7152-2">Mip</tspan><tspan
-         sodipodi:role="line"
-         x="2.6458337"
-         y="98.5625"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458332"
-         id="tspan7156-6">Level 1</tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
-       x="2.645834"
-       y="148.83334"
-       id="text7094-67-2"><tspan
-         sodipodi:role="line"
-         x="2.645834"
-         y="148.83334"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458332"
-         id="tspan7152-4">Mip</tspan><tspan
-         sodipodi:role="line"
-         x="2.6458342"
-         y="154.12502"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458332"
-         id="tspan7156-0">Level 3</tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
-       x="2.6458337"
-       y="125.02084"
-       id="text7094-67-2-8"><tspan
-         sodipodi:role="line"
-         x="2.6458337"
-         y="125.02084"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458332"
-         id="tspan7152-4-0">Mip</tspan><tspan
-         sodipodi:role="line"
-         x="2.645834"
-         y="130.31252"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458332"
-         id="tspan7156-0-1">Level 2</tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
-       x="2.645834"
-       y="170"
-       id="text7094-67-2-1"><tspan
-         sodipodi:role="line"
-         x="2.6458337"
-         y="170"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458332"
-         id="tspan7156-0-4">Mip Tail</tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
-       x="142.875"
-       y="78.71875"
-       id="text7094-67-2-1-1"><tspan
-         sodipodi:role="line"
-         x="142.875"
-         y="78.71875"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458332"
-         id="tspan7156-0-4-5">Mip Tail</tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-weight:normal;font-size:10.58333302px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
-       x="142.875"
-       y="19.187498"
-       id="text7094-4"><tspan
-         sodipodi:role="line"
-         id="tspan7092-8"
-         x="142.875"
-         y="19.187498"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458332">Metadata</tspan></text>
-    <g
-       transform="translate(-48.947927,15.874963)"
-       id="g1301">
-      <rect
-         y="147.51044"
-         x="150.8125"
-         height="5.2916665"
-         width="5.2916665"
-         id="rect6319-7-9-4"
-         style="fill:#ff0000;fill-opacity:1;stroke:#000000;stroke-width:0.26458332;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
-      <rect
-         y="139.57294"
-         x="150.8125"
-         height="5.2916675"
-         width="5.2916675"
-         id="rect5619-4-1-6-6-0-6-8"
-         style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:0.26499999;stroke-miterlimit:4;stroke-dasharray:1.05999995,1.05999995;stroke-dashoffset:0;stroke-opacity:1" />
-      <rect
-         y="131.63542"
-         x="150.8125"
-         height="5.2916675"
-         width="5.2916675"
-         id="rect5619-6-8-6-5-2"
-         style="fill:#808080;fill-opacity:1;stroke:#000000;stroke-width:0.26458332;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
-      <rect
-         y="125.02087"
-         x="149.48959"
-         height="29.104164"
-         width="55.5625"
-         id="rect8983-1"
-         style="fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.26458332;stroke-miterlimit:4;stroke-dasharray:1.05833327,1.05833327;stroke-dashoffset:0;stroke-opacity:1" />
-      <text
-         xml:space="preserve"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.39687499"
-         x="177.27084"
-         y="128.98961"
-         id="text823-4-2-9-4-7-9-85-3"><tspan
-           sodipodi:role="line"
-           x="177.27084"
-           y="128.98961"
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.39687499"
-           id="tspan825-6-0-2-5-6-26-7-3">Legend</tspan></text>
-      <text
-         xml:space="preserve"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.39687499"
-         x="157.42709"
-         y="135.6042"
-         id="text823-4-2-9-4-7-9-85-3-6"><tspan
-           sodipodi:role="line"
-           x="157.42709"
-           y="135.6042"
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.39687499"
-           id="tspan825-6-0-2-5-6-26-7-3-4">Image Pixel Data</tspan></text>
-      <text
-         xml:space="preserve"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.39687499"
-         x="157.42709"
-         y="143.5417"
-         id="text823-4-2-9-4-7-9-85-3-6-5"><tspan
-           sodipodi:role="line"
-           x="157.42709"
-           y="143.5417"
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.39687499"
-           id="tspan825-6-0-2-5-6-26-7-3-4-2">Sparse Memory Block</tspan></text>
-      <text
-         xml:space="preserve"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.39687499"
-         x="157.42709"
-         y="151.4792"
-         id="text823-4-2-9-4-7-9-85-3-6-6"><tspan
-           sodipodi:role="line"
-           x="157.42709"
-           y="151.4792"
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.39687499"
-           id="tspan825-6-0-2-5-6-26-7-3-4-1">Mip Tail Data</tspan></text>
-    </g>
-    <path
-       style="fill:none;stroke:#000000;stroke-width:0.26499999;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1.05999995, 1.05999995;stroke-dashoffset:0;stroke-opacity:1"
-       d="m 84.666666,138.25 h 7.9375 V 117.08333 H 71.437499 v 7.9375 m 10.583336,0 v -7.9375 m 2.645833,10.58334 h 7.9375"
-       id="path1094"
-       inkscape:connector-curvature="0" />
-    <path
-       style="fill:#808080;fill-opacity:1;stroke:#000000;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-       d="m 82.020834,138.25 v -13.22917 m 2.645833,2.64584 H 71.4375 M 84.666665,138.25 H 71.437498 V 125.02083 H 84.666667 V 138.25"
-       id="path1111"
-       inkscape:connector-curvature="0" />
-    <path
-       style="fill:#808080;fill-opacity:1;stroke:#000000;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-       d="M 71.437498,85.333322 V 111.79166 H 97.895831 V 85.333322 H 71.437498 m 10.583336,0 v 26.458338 m 10.583333,0 V 85.333322 M 71.4375,90.624992 H 97.895834 M 71.4375,101.20833 h 26.458334"
-       id="path1124"
-       inkscape:connector-curvature="0" />
-    <path
-       style="fill:none;stroke:#000000;stroke-width:0.26458332;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1.05833328, 1.05833328;stroke-dashoffset:0;stroke-opacity:1"
-       d="m 97.89584,111.79166 h 5.29166 V 80.041662 H 71.437502 v 5.29167 m 10.583336,-5.29167 v 5.29167 m 10.583334,-5.29167 v 5.29167 m 10.583328,5.29166 h -5.29166 m 5.29166,10.583338 h -5.29166"
-       id="path1141"
-       inkscape:connector-curvature="0" />
-    <path
-       style="fill:#ff0000;stroke:#000000;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-       d="m 71.437498,159.41666 h 21.166667 v 10.58333 H 71.437498 Z m 10.583336,0 0,10.58334"
-       id="path1158"
-       inkscape:connector-curvature="0" />
-    <path
-       style="fill:#ff0000;stroke:#000000;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-       d="m 13.229167,164.70833 h 10.583332 v 5.29166 H 13.229167 Z m 5.291667,0 0,5.29167"
-       id="path1160"
-       inkscape:connector-curvature="0" />
-    <path
-       style="fill:none;stroke:#000000;stroke-width:0.26458332;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1.05833333, 1.05833333;stroke-dashoffset:0;stroke-opacity:1"
-       d="m 19.843747,154.125 h 3.96875 v -10.58334 h -10.58333 v 3.96875 m 5.29166,0 v -3.96875 m 1.32292,5.29167 h 3.96875"
-       id="path1094-0"
-       inkscape:connector-curvature="0" />
-    <path
-       style="fill:#808080;fill-opacity:1;stroke:#000000;stroke-width:0.26458332;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
-       d="m 18.520827,154.125 v -6.61459 m 1.32292,1.32292 h -6.61458 m 6.61458,5.29167 h -6.61458 v -6.61459 h 6.61458 v 6.61459"
-       id="path1111-1"
-       inkscape:connector-curvature="0" />
-    <path
-       style="fill:#808080;fill-opacity:1;stroke:#000000;stroke-width:0.26458332;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
-       d="m 13.229167,119.72916 v 13.22917 H 26.458326 V 119.72916 H 13.229167 m 5.291659,0 v 13.22917 m 5.291671,0 v -13.22917 m -10.58333,2.64584 h 13.229159 m -13.229159,5.29167 h 13.229159"
-       id="path1124-3"
-       inkscape:connector-curvature="0" />
-    <path
-       style="fill:none;stroke:#000000;stroke-width:0.26458332;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1.05833334, 1.05833334;stroke-dashoffset:0;stroke-opacity:1"
-       d="m 26.458337,132.95833 h 2.64583 v -15.875 h -15.875 v 2.64584 m 5.29167,-2.64584 v 2.64584 m 5.29166,-2.64584 v 2.64584 m 5.29167,2.64583 h -2.64583 m 2.64583,5.29167 h -2.64583"
-       id="path1141-9"
-       inkscape:connector-curvature="0" />
-    <path
-       style="fill:#808080;stroke:#000000;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-       d="M 13.229167,80.041662 H 39.6875 V 106.5 H 13.229167 V 80.041662 m 5.291667,0 V 106.5 M 23.8125,80.041662 V 106.5 M 29.104167,80.041662 V 106.5 M 34.395834,80.041662 V 106.5 M 13.229167,101.20833 H 39.6875 m 0,-5.291668 H 13.229167 m 0,-5.291667 H 39.6875 m 0,-5.291666 H 13.229167"
-       id="path1204"
-       inkscape:connector-curvature="0" />
-    <path
-       style="fill:#808080;stroke:#000000;stroke-width:0.26458333;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none"
-       d="m 71.4375,21.83333 h 52.91667 V 74.750015 H 71.4375 V 21.83333 m 10.583334,0 V 74.750015 M 92.604166,21.83333 V 74.750015 M 103.1875,21.83333 V 74.750015 M 113.77084,21.83333 V 74.750015 M 71.4375,64.166665 h 52.91667 m 0,-10.583335 H 71.4375 m 0,-10.583334 h 52.91667 m 0,-10.583332 H 71.4375"
-       id="path1204-2"
-       inkscape:connector-curvature="0" />
-    <path
-       style="fill:#808080;stroke:#000000;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;fill-opacity:1"
-       d="M 13.229167,21.83333 H 66.145833 V 74.749996 H 13.229167 Z m 5.291667,0 V 74.749996 M 29.104167,21.83333 v 52.916666 m -5.291667,0 V 21.83333 m 10.583334,0 v 52.916666 m 5.291666,0 V 21.83333 m 5.291667,0 v 52.916666 m 5.291666,0 V 21.83333 m 5.291667,0 v 52.916666 m 5.291667,0 V 21.83333 m 5.291666,5.291666 H 13.229167 m 0,5.291667 h 52.916666 m 0,5.291667 H 13.229167 m 0,5.291666 h 52.916666 m 0,5.291667 H 13.229167 m 0,5.291667 h 52.916666 m 0,5.291666 H 13.229167 m 0,5.291667 h 52.916666 m 0,5.291667 H 13.229167"
-       id="path1236"
-       inkscape:connector-curvature="0" />
-    <path
-       style="fill:#ff0000;fill-opacity:1;stroke:#000000;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-       d="m 129.64583,21.83333 h 26.45834 v 52.916664 h -26.45834 z m 5.29167,0 V 74.749994 M 145.52083,21.83333 v 52.916664 m -5.29167,0 V 21.83333 m 10.58334,0 v 52.916664 m 5.29167,-47.624998 h -26.45834 m 0,5.291667 h 26.45834 m 0,5.291667 h -26.45834 m 0,5.291666 h 26.45834 m 0,5.291668 h -26.45834 m 0,5.29167 h 26.45834 m 0,5.29166 h -26.45834 m 0,5.29167 h 26.45834 m 0,5.29167 h -26.45834"
-       id="path1236-8"
-       inkscape:connector-curvature="0"
-       sodipodi:nodetypes="ccccccccccccccccccccccccccccccc" />
-  </g>
-</svg>
diff --git a/registry/vulkan/images/sparseimage_singlemiptail.svg b/registry/vulkan/images/sparseimage_singlemiptail.svg
deleted file mode 100644
index 70533e0..0000000
--- a/registry/vulkan/images/sparseimage_singlemiptail.svg
+++ /dev/null
@@ -1,352 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Created with Inkscape (http://www.inkscape.org/) -->
-
-<svg
-   xmlns:dc="http://purl.org/dc/elements/1.1/"
-   xmlns:cc="http://creativecommons.org/ns#"
-   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
-   xmlns:svg="http://www.w3.org/2000/svg"
-   xmlns="http://www.w3.org/2000/svg"
-   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
-   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
-   width="213.37727mm"
-   height="140.93106mm"
-   viewBox="0 0 213.37728 140.93106"
-   version="1.1"
-   id="svg5072"
-   sodipodi:docname="sparseimage_singlemiptail.svg"
-   inkscape:version="0.92.2 (5c3e80d, 2017-08-06)">
-  <defs
-     id="defs5066" />
-  <sodipodi:namedview
-     id="base"
-     pagecolor="#ffffff"
-     bordercolor="#666666"
-     borderopacity="1.0"
-     inkscape:pageopacity="0.0"
-     inkscape:pageshadow="2"
-     inkscape:zoom="1.4"
-     inkscape:cx="395.52786"
-     inkscape:cy="210.32605"
-     inkscape:document-units="mm"
-     inkscape:current-layer="layer1"
-     showgrid="true"
-     inkscape:measure-start="50,1040"
-     inkscape:measure-end="50,900"
-     inkscape:snap-object-midpoints="true"
-     inkscape:snap-grids="true"
-     inkscape:snap-text-baseline="true"
-     fit-margin-left="1"
-     fit-margin-top="1"
-     fit-margin-right="1"
-     fit-margin-bottom="1"
-     inkscape:window-width="1680"
-     inkscape:window-height="987"
-     inkscape:window-x="1672"
-     inkscape:window-y="-8"
-     inkscape:window-maximized="0">
-    <inkscape:grid
-       type="xygrid"
-       id="grid5617"
-       originx="5.869987"
-       originy="-141.02337" />
-  </sodipodi:namedview>
-  <metadata
-     id="metadata5069">
-    <rdf:RDF>
-      <cc:Work
-         rdf:about="">
-        <dc:format>image/svg+xml</dc:format>
-        <dc:type
-           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
-        <dc:title />
-      </cc:Work>
-    </rdf:RDF>
-  </metadata>
-  <g
-     inkscape:label="Layer 1"
-     inkscape:groupmode="layer"
-     id="layer1"
-     transform="translate(5.8699864,-15.045569)">
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-weight:normal;font-size:10.58333302px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
-       x="39.6875"
-       y="19.1875"
-       id="text7094"><tspan
-         sodipodi:role="line"
-         id="tspan7092"
-         x="39.6875"
-         y="19.1875"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458332">Array Layer 0</tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-weight:normal;font-size:10.58333302px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
-       x="97.895836"
-       y="19.187496"
-       id="text7094-5"><tspan
-         sodipodi:role="line"
-         id="tspan7092-3"
-         x="97.895836"
-         y="19.187496"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458332">Array Layer 1</tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-weight:normal;font-size:10.58333302px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
-       x="156.10417"
-       y="19.187496"
-       id="text7094-6"><tspan
-         sodipodi:role="line"
-         id="tspan7092-0"
-         x="156.10417"
-         y="19.187496"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458332">Array Layer 2</tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
-       x="2.6458335"
-       y="48.291668"
-       id="text7094-67"><tspan
-         sodipodi:role="line"
-         x="2.6458335"
-         y="48.291668"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458332"
-         id="tspan7152">Mip</tspan><tspan
-         sodipodi:role="line"
-         x="2.6458337"
-         y="53.583336"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458332"
-         id="tspan7156">Level 0</tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
-       x="2.6458335"
-       y="93.270836"
-       id="text7094-67-1"><tspan
-         sodipodi:role="line"
-         x="2.6458335"
-         y="93.270836"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458332"
-         id="tspan7152-2">Mip</tspan><tspan
-         sodipodi:role="line"
-         x="2.6458337"
-         y="98.5625"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458332"
-         id="tspan7156-6">Level 1</tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
-       x="2.6458335"
-       y="138.25"
-       id="text7094-67-2"><tspan
-         sodipodi:role="line"
-         x="2.6458335"
-         y="138.25"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458332"
-         id="tspan7152-4">Mip</tspan><tspan
-         sodipodi:role="line"
-         x="2.6458337"
-         y="143.54167"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458332"
-         id="tspan7156-0">Level 3</tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
-       x="2.6458335"
-       y="119.72918"
-       id="text7094-67-2-8"><tspan
-         sodipodi:role="line"
-         x="2.6458335"
-         y="119.72918"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458332"
-         id="tspan7152-4-0">Mip</tspan><tspan
-         sodipodi:role="line"
-         x="2.6458337"
-         y="125.02084"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458332"
-         id="tspan7156-0-1">Level 2</tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
-       x="2.6458335"
-       y="154.125"
-       id="text7094-67-2-1"><tspan
-         sodipodi:role="line"
-         x="2.6458333"
-         y="154.125"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458332"
-         id="tspan7156-0-4">Mip Tail</tspan></text>
-    <g
-       transform="translate(1.3229071,-3.1985317e-5)"
-       id="g1301">
-      <rect
-         y="147.51044"
-         x="150.8125"
-         height="5.2916665"
-         width="5.2916665"
-         id="rect6319-7-9-4"
-         style="fill:#ff0000;fill-opacity:1;stroke:#000000;stroke-width:0.26458332;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
-      <rect
-         y="139.57294"
-         x="150.8125"
-         height="5.2916675"
-         width="5.2916675"
-         id="rect5619-4-1-6-6-0-6-8"
-         style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:0.26499999;stroke-miterlimit:4;stroke-dasharray:1.05999995,1.05999995;stroke-dashoffset:0;stroke-opacity:1" />
-      <rect
-         y="131.63542"
-         x="150.8125"
-         height="5.2916675"
-         width="5.2916675"
-         id="rect5619-6-8-6-5-2"
-         style="fill:#808080;fill-opacity:1;stroke:#000000;stroke-width:0.26458332;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
-      <rect
-         y="125.02087"
-         x="149.48959"
-         height="29.104164"
-         width="55.5625"
-         id="rect8983-1"
-         style="fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.26458332;stroke-miterlimit:4;stroke-dasharray:1.05833327,1.05833327;stroke-dashoffset:0;stroke-opacity:1" />
-      <text
-         xml:space="preserve"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.39687499"
-         x="177.27084"
-         y="128.98961"
-         id="text823-4-2-9-4-7-9-85-3"><tspan
-           sodipodi:role="line"
-           x="177.27084"
-           y="128.98961"
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.39687499"
-           id="tspan825-6-0-2-5-6-26-7-3">Legend</tspan></text>
-      <text
-         xml:space="preserve"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.39687499"
-         x="157.42709"
-         y="135.6042"
-         id="text823-4-2-9-4-7-9-85-3-6"><tspan
-           sodipodi:role="line"
-           x="157.42709"
-           y="135.6042"
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.39687499"
-           id="tspan825-6-0-2-5-6-26-7-3-4">Image Pixel Data</tspan></text>
-      <text
-         xml:space="preserve"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.39687499"
-         x="157.42709"
-         y="143.5417"
-         id="text823-4-2-9-4-7-9-85-3-6-5"><tspan
-           sodipodi:role="line"
-           x="157.42709"
-           y="143.5417"
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.39687499"
-           id="tspan825-6-0-2-5-6-26-7-3-4-2">Sparse Memory Block</tspan></text>
-      <text
-         xml:space="preserve"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.39687499"
-         x="157.42709"
-         y="151.4792"
-         id="text823-4-2-9-4-7-9-85-3-6-6"><tspan
-           sodipodi:role="line"
-           x="157.42709"
-           y="151.4792"
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.39687499"
-           id="tspan825-6-0-2-5-6-26-7-3-4-1">Mip Tail Data</tspan></text>
-    </g>
-    <path
-       style="fill:#808080;fill-opacity:1;stroke:#000000;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-       d="M 13.229167,21.833333 H 66.145834 V 74.749999 H 13.229167 Z m 5.291667,0 V 74.749999 M 29.104168,21.833333 v 52.916666 m -5.291668,0 V 21.833333 m 10.583334,0 v 52.916666 m 5.291667,0 V 21.833333 m 5.291666,0 v 52.916666 m 5.291667,0 V 21.833333 m 5.291667,0 v 52.916666 m 5.291666,0 V 21.833333 m 5.291667,5.291666 H 13.229167 m 0,5.291667 h 52.916667 m 0,5.291667 H 13.229167 m 0,5.291666 h 52.916667 m 0,5.291667 H 13.229167 m 0,5.291667 h 52.916667 m 0,5.291666 H 13.229167 m 0,5.291667 h 52.916667 m 0,5.291667 H 13.229167"
-       id="path1236"
-       inkscape:connector-curvature="0" />
-    <path
-       style="fill:#808080;fill-opacity:1;stroke:#000000;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-       d="M 71.437501,21.833334 H 124.35417 V 74.749999 H 71.437501 Z m 5.291669,0 V 74.749999 M 87.312503,21.833334 v 52.916665 m -5.291669,0 V 21.833334 m 10.583336,0 v 52.916665 m 5.291657,0 V 21.833334 m 5.291673,0 v 52.916665 m 5.29167,0 V 21.833334 m 5.29166,0 v 52.916665 m 5.29168,0 V 21.833334 M 124.35417,27.125 H 71.437501 m 0,5.291666 h 52.916669 m 0,5.291667 H 71.437501 m 0,5.291666 h 52.916669 m 0,5.291667 H 71.437501 m 0,5.291667 h 52.916669 m 0,5.291666 H 71.437501 m 0,5.291667 h 52.916669 m 0,5.291667 H 71.437501"
-       id="path1236-3"
-       inkscape:connector-curvature="0" />
-    <path
-       style="fill:#808080;fill-opacity:1;stroke:#000000;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-       d="m 129.64584,21.833333 h 52.91667 v 52.916666 h -52.91667 z m 5.29167,0 v 52.916666 m 10.58333,-52.916666 v 52.916666 m -5.29166,0 V 21.833333 m 10.58333,0 v 52.916666 m 5.29167,0 V 21.833333 m 5.29166,0 v 52.916666 m 5.29167,0 V 21.833333 m 5.29167,0 v 52.916666 m 5.29166,0 V 21.833333 m 5.29167,5.291666 h -52.91667 m 0,5.291667 h 52.91667 m 0,5.291667 h -52.91667 m 0,5.291666 h 52.91667 m 0,5.291667 h -52.91667 m 0,5.291667 h 52.91667 m 0,5.291666 h -52.91667 m 0,5.291667 h 52.91667 m 0,5.291667 h -52.91667"
-       id="path1236-1"
-       inkscape:connector-curvature="0" />
-    <path
-       id="path1299"
-       d="M 13.229167,80.041666 H 39.687305 V 106.49981 H 13.229167 Z m 5.291628,0 V 106.49981 M 23.812422,80.041666 V 106.49981 M 29.10405,80.041666 v 26.458144 m 5.291628,-26.458144 v 26.458144 m -21.166511,-5.29163 h 26.458138 m 0,-5.29163 H 13.229167 m 0,-5.291627 h 26.458138 m 0,-5.29163 H 13.229167"
-       style="fill:#808080;fill-opacity:1;stroke:#000000;stroke-width:0.25399813px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       inkscape:connector-curvature="0" />
-    <path
-       id="path1299-5"
-       d="M 71.437501,80.041666 H 97.895647 V 106.49981 H 71.437501 Z m 5.291629,0 v 26.458144 m 5.291627,-26.458144 v 26.458144 m 5.291627,-26.458144 v 26.458144 m 5.291627,-26.458144 v 26.458144 m -21.16651,-5.29163 h 26.458146 m 0,-5.29163 H 71.437501 m 0,-5.291627 h 26.458146 m 0,-5.29163 H 71.437501"
-       style="fill:#808080;fill-opacity:1;stroke:#000000;stroke-width:0.25399813px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       inkscape:connector-curvature="0" />
-    <path
-       id="path1299-7"
-       d="m 129.64584,80.041666 h 26.45814 v 26.458144 h -26.45814 z m 5.29163,0 v 26.458144 m 5.29163,-26.458144 v 26.458144 m 5.29162,-26.458144 v 26.458144 m 5.29163,-26.458144 v 26.458144 m -21.16651,-5.29163 h 26.45814 m 0,-5.29163 h -26.45814 m 0,-5.291627 h 26.45814 m 0,-5.29163 h -26.45814"
-       style="fill:#808080;fill-opacity:1;stroke:#000000;stroke-width:0.25399813px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       inkscape:connector-curvature="0" />
-    <path
-       style="fill:none;stroke:#000000;stroke-width:0.26458332;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1.05833335, 1.05833335;stroke-dashoffset:0;stroke-opacity:1"
-       d="m 19.843748,143.5417 h 3.96875 V 132.95836 H 13.229167 v 3.96875 m 5.29166,0 v -3.96875 m 1.322921,5.29167 h 3.96875"
-       id="path1094-0"
-       inkscape:connector-curvature="0" />
-    <path
-       style="fill:#808080;fill-opacity:1;stroke:#000000;stroke-width:0.26458332;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
-       d="m 18.520827,143.5417 v -6.61459 m 1.322921,1.32292 h -6.614581 m 6.614581,5.29167 h -6.614581 v -6.61459 h 6.614581 v 6.61459"
-       id="path1111-1"
-       inkscape:connector-curvature="0" />
-    <path
-       style="fill:#808080;fill-opacity:1;stroke:#000000;stroke-width:0.26458332;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
-       d="m 13.229167,114.43752 v 13.22916 h 13.22916 v -13.22916 h -13.22916 m 5.291659,0 v 13.22916 m 5.291672,0 v -13.22916 m -10.583331,2.64584 h 13.22916 m -13.22916,5.29166 h 13.22916"
-       id="path1124-3"
-       inkscape:connector-curvature="0" />
-    <path
-       style="fill:none;stroke:#000000;stroke-width:0.26458332;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1.05833336, 1.05833336;stroke-dashoffset:0;stroke-opacity:1"
-       d="m 26.458338,127.66668 h 2.64583 V 111.79169 H 13.229167 v 2.64584 m 5.29167,-2.64584 v 2.64584 m 5.291661,-2.64584 v 2.64584 m 5.29167,2.64583 h -2.64583 m 2.64583,5.29166 h -2.64583"
-       id="path1141-9"
-       inkscape:connector-curvature="0" />
-    <path
-       style="fill:none;stroke:#000000;stroke-width:0.26458332;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1.05833336, 1.05833336;stroke-dashoffset:0;stroke-opacity:1"
-       d="m 78.052081,143.54169 h 3.96875 v -10.58334 h -10.58333 v 3.96875 m 5.291661,0 v -3.96875 m 1.322919,5.29167 h 3.96875"
-       id="path1094-0-5"
-       inkscape:connector-curvature="0" />
-    <path
-       style="fill:#808080;fill-opacity:1;stroke:#000000;stroke-width:0.26458332;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
-       d="m 76.729162,143.54169 v -6.61459 m 1.322919,1.32292 h -6.61458 m 6.61458,5.29167 h -6.61458 v -6.61459 h 6.61458 v 6.61459"
-       id="path1111-1-6"
-       inkscape:connector-curvature="0" />
-    <path
-       style="fill:#808080;fill-opacity:1;stroke:#000000;stroke-width:0.26458332;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
-       d="m 71.437501,114.43751 v 13.22916 H 84.666662 V 114.43751 H 71.437501 m 5.291661,0 v 13.22916 m 5.291669,0 v -13.22916 m -10.58333,2.64584 h 13.229161 m -13.229161,5.29166 h 13.229161"
-       id="path1124-3-4"
-       inkscape:connector-curvature="0" />
-    <path
-       style="fill:none;stroke:#000000;stroke-width:0.26458332;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1.05833337, 1.05833337;stroke-dashoffset:0;stroke-opacity:1"
-       d="m 84.666673,127.66667 h 2.64583 V 111.79168 H 71.437501 v 2.64584 m 5.291672,-2.64584 v 2.64584 m 5.291658,-2.64584 v 2.64584 m 5.291672,2.64583 h -2.64583 m 2.64583,5.29166 h -2.64583"
-       id="path1141-9-1"
-       inkscape:connector-curvature="0" />
-    <path
-       style="fill:none;stroke:#000000;stroke-width:0.26458332;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1.05833336, 1.05833336;stroke-dashoffset:0;stroke-opacity:1"
-       d="m 136.26043,143.54169 h 3.96875 v -10.58334 h -10.58333 v 3.96875 m 5.29166,0 v -3.96875 m 1.32292,5.29167 h 3.96875"
-       id="path1094-0-9"
-       inkscape:connector-curvature="0" />
-    <path
-       style="fill:#808080;fill-opacity:1;stroke:#000000;stroke-width:0.26458332;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
-       d="m 134.93751,143.54169 v -6.61459 m 1.32292,1.32292 h -6.61458 m 6.61458,5.29167 h -6.61458 v -6.61459 h 6.61458 v 6.61459"
-       id="path1111-1-1"
-       inkscape:connector-curvature="0" />
-    <path
-       style="fill:#808080;fill-opacity:1;stroke:#000000;stroke-width:0.26458332;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
-       d="m 129.64585,114.43751 v 13.22916 h 13.22916 v -13.22916 h -13.22916 m 5.29166,0 v 13.22916 m 5.29167,0 v -13.22916 m -10.58333,2.64584 h 13.22916 m -13.22916,5.29166 h 13.22916"
-       id="path1124-3-5"
-       inkscape:connector-curvature="0" />
-    <path
-       style="fill:none;stroke:#000000;stroke-width:0.26458332;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1.05833337, 1.05833337;stroke-dashoffset:0;stroke-opacity:1"
-       d="m 142.87502,127.66667 h 2.64583 v -15.87499 h -15.875 v 2.64584 m 5.29167,-2.64584 v 2.64584 m 5.29166,-2.64584 v 2.64584 m 5.29167,2.64583 h -2.64583 m 2.64583,5.29166 h -2.64583"
-       id="path1141-9-5"
-       inkscape:connector-curvature="0" />
-    <path
-       style="fill:#ff0000;fill-opacity:1;stroke:#000000;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-       d="m 13.229168,148.83333 h 31.75 l 10e-7,5.29167 H 13.229168 Z m 5.291667,0 v 5.29167 m 10.583333,-5.29167 v 5.29167 m -5.291667,0 v -5.29167 m 10.583333,0 v 5.29167 m 5.291667,0 v -5.29167"
-       id="path1236-4"
-       inkscape:connector-curvature="0"
-       sodipodi:nodetypes="ccccccccccccccc" />
-  </g>
-</svg>
diff --git a/registry/vulkan/images/tessparam.svg b/registry/vulkan/images/tessparam.svg
deleted file mode 100644
index 42279f0..0000000
--- a/registry/vulkan/images/tessparam.svg
+++ /dev/null
@@ -1,467 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Created with Inkscape (http://www.inkscape.org/) -->
-
-<svg
-   xmlns:dc="http://purl.org/dc/elements/1.1/"
-   xmlns:cc="http://creativecommons.org/ns#"
-   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
-   xmlns:svg="http://www.w3.org/2000/svg"
-   xmlns="http://www.w3.org/2000/svg"
-   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
-   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
-   width="158.03326mm"
-   height="140.22618mm"
-   viewBox="0 0 158.03326 140.22618"
-   version="1.1"
-   id="svg3252"
-   inkscape:version="0.92.2 (5c3e80d, 2017-08-06)"
-   sodipodi:docname="tessparam.svg">
-  <defs
-     id="defs3246">
-    <marker
-       inkscape:stockid="Arrow1Mend"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="Arrow1Mend"
-       style="overflow:visible"
-       inkscape:isstock="true">
-      <path
-         id="path1632"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         transform="matrix(-0.4,0,0,-0.4,-4,0)"
-         inkscape:connector-curvature="0" />
-    </marker>
-    <marker
-       inkscape:stockid="Arrow1Mstart"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="Arrow1Mstart"
-       style="overflow:visible"
-       inkscape:isstock="true">
-      <path
-         id="path1629"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         transform="matrix(0.4,0,0,0.4,4,0)"
-         inkscape:connector-curvature="0" />
-    </marker>
-  </defs>
-  <sodipodi:namedview
-     id="base"
-     pagecolor="#ffffff"
-     bordercolor="#666666"
-     borderopacity="1.0"
-     inkscape:pageopacity="0.0"
-     inkscape:pageshadow="2"
-     inkscape:zoom="1"
-     inkscape:cx="227.37134"
-     inkscape:cy="188.15798"
-     inkscape:document-units="mm"
-     inkscape:current-layer="layer1"
-     showgrid="true"
-     inkscape:snap-object-midpoints="true"
-     inkscape:snap-text-baseline="true"
-     inkscape:window-width="1680"
-     inkscape:window-height="987"
-     inkscape:window-x="1672"
-     inkscape:window-y="-8"
-     inkscape:window-maximized="0"
-     fit-margin-left="1"
-     fit-margin-top="1"
-     fit-margin-right="1"
-     fit-margin-bottom="1">
-    <inkscape:grid
-       type="xygrid"
-       id="grid3797"
-       originx="-70.89992"
-       originy="-158.47658" />
-  </sodipodi:namedview>
-  <metadata
-     id="metadata3249">
-    <rdf:RDF>
-      <cc:Work
-         rdf:about="">
-        <dc:format>image/svg+xml</dc:format>
-        <dc:type
-           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
-        <dc:title />
-      </cc:Work>
-    </rdf:RDF>
-  </metadata>
-  <g
-     inkscape:label="Layer 1"
-     inkscape:groupmode="layer"
-     id="layer1"
-     transform="translate(-70.899921,1.7027598)">
-    <path
-       style="fill:none;stroke:#000000;stroke-width:0.39687496;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       d="m 188.9636,20.372957 -15.87499,23.812497 h 31.75 z"
-       id="path5083"
-       inkscape:connector-curvature="0" />
-    <path
-       style="fill:none;stroke:#000000;stroke-width:0.39687496;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       d="m 188.9636,4.497957 c -31.74999,47.624997 -31.74999,47.624997 -31.74999,47.624997 h 63.5 z"
-       id="path4959"
-       inkscape:connector-curvature="0" />
-    <rect
-       style="fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.39687496;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
-       id="rect5129"
-       width="31.750002"
-       height="31.750002"
-       x="89.744835"
-       y="12.435457" />
-    <rect
-       style="fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.39687496;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
-       id="rect5129-4"
-       width="47.624992"
-       height="47.624992"
-       x="81.80735"
-       y="4.4979587" />
-    <path
-       style="fill:none;stroke:#000000;stroke-width:0.39687496px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-       d="m 129.43237,127.5292 h 47.625"
-       id="path5163"
-       inkscape:connector-curvature="0" />
-    <path
-       style="fill:none;stroke:#000000;stroke-width:0.39687496px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-       d="m 129.43237,119.59171 h 47.625"
-       id="path5165"
-       inkscape:connector-curvature="0" />
-    <path
-       style="fill:none;stroke:#000000;stroke-width:0.39687496px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-       d="m 129.43237,111.6542 h 47.625"
-       id="path5167"
-       inkscape:connector-curvature="0" />
-    <path
-       style="fill:none;stroke:#000000;stroke-width:0.39687496px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-       d="m 129.43237,103.7167 h 47.625"
-       id="path5169"
-       inkscape:connector-curvature="0" />
-    <path
-       style="fill:none;stroke:#000000;stroke-width:0.39687496px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-       d="m 129.43237,95.779205 h 47.625"
-       id="path5171"
-       inkscape:connector-curvature="0" />
-    <path
-       style="fill:none;stroke:#000000;stroke-width:0.39687496px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-       d="m 129.43237,87.841704 h 47.625"
-       id="path5173"
-       inkscape:connector-curvature="0" />
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-weight:normal;font-size:15.875px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.39687496"
-       x="139.35422"
-       y="64.029213"
-       id="text5179"><tspan
-         sodipodi:role="line"
-         id="tspan5177"
-         x="139.35422"
-         y="78.512459"
-         style="stroke-width:0.39687496" /></text>
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.39687496"
-       x="153.24486"
-       y="81.888588"
-       id="text2799"><tspan
-         sodipodi:role="line"
-         id="tspan2797"
-         x="153.24486"
-         y="81.888588"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.39687496">(no edge)</tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.39687496"
-       x="129.43236"
-       y="77.91983"
-       id="text2799-3"><tspan
-         sodipodi:role="line"
-         id="tspan2797-9"
-         x="129.43236"
-         y="77.91983"
-         style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.39687496">(0,1)</tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.39687496"
-       x="177.05736"
-       y="77.91983"
-       id="text2799-3-1"><tspan
-         sodipodi:role="line"
-         id="tspan2797-9-7"
-         x="177.05736"
-         y="77.91983"
-         style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.39687496">(1,1)</tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.39687496"
-       x="129.43236"
-       y="131.49797"
-       id="text2799-3-1-8"><tspan
-         sodipodi:role="line"
-         id="tspan2797-9-7-2"
-         x="129.43236"
-         y="131.49797"
-         style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.39687496">(0,0)</tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.39687496"
-       x="177.05736"
-       y="131.49796"
-       id="text2799-3-1-7"><tspan
-         sodipodi:role="line"
-         id="tspan2797-9-7-0"
-         x="177.05736"
-         y="131.49796"
-         style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.39687496">(1,0)</tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.39687496"
-       x="188.96361"
-       y="2.5135815"
-       id="text5070-2-2-9"><tspan
-         sodipodi:role="line"
-         id="tspan5068-0-3-36"
-         x="188.96361"
-         y="2.5135815"
-         style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:0.39687496">(0,1,0)</tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.39687496"
-       x="220.71503"
-       y="55.833858"
-       id="text5070-2-2-9-3"><tspan
-         sodipodi:role="line"
-         id="tspan5068-0-3-36-1"
-         x="220.71503"
-         y="55.833858"
-         style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:0.39687496">(1,0,0)</tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.39687496"
-       x="157.17018"
-       y="55.771183"
-       id="text5070-2-2-9-9"><tspan
-         sodipodi:role="line"
-         id="tspan5068-0-3-36-9"
-         x="157.17018"
-         y="55.771183"
-         style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:0.39687496">(0,0,1)</tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.39687496"
-       x="81.807327"
-       y="2.5135815"
-       id="text2799-3-7"><tspan
-         sodipodi:role="line"
-         id="tspan2797-9-70"
-         x="81.807327"
-         y="2.5135815"
-         style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.39687496">(0,1)</tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.39687496"
-       x="129.43236"
-       y="2.5135815"
-       id="text2799-3-1-5"><tspan
-         sodipodi:role="line"
-         id="tspan2797-9-7-3"
-         x="129.43236"
-         y="2.5135815"
-         style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.39687496">(1,1)</tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.39687496"
-       x="81.807327"
-       y="56.091732"
-       id="text2799-3-1-8-0"><tspan
-         sodipodi:role="line"
-         id="tspan2797-9-7-2-0"
-         x="81.807327"
-         y="56.091732"
-         style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.39687496">(0,0)</tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.39687496"
-       x="129.43236"
-       y="56.091721"
-       id="text2799-3-1-7-3"><tspan
-         sodipodi:role="line"
-         id="tspan2797-9-7-0-2"
-         x="129.43236"
-         y="56.091721"
-         style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.39687496">(1,0)</tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.39687496"
-       x="113.55736"
-       y="105.70109"
-       id="text2799-38"><tspan
-         sodipodi:role="line"
-         id="tspan2797-6"
-         x="113.55736"
-         y="105.70109"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.39687496">OL0</tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.39687496"
-       x="153.24486"
-       y="131.49796"
-       id="text2799-38-8"><tspan
-         sodipodi:role="line"
-         id="tspan2797-6-4"
-         x="153.24486"
-         y="131.49796"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.39687496">OL1</tspan></text>
-    <path
-       style="fill:none;stroke:#000000;stroke-width:0.39700006;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1.58800024,1.58800024;stroke-dashoffset:0;stroke-opacity:1;marker-start:url(#Arrow1Mstart);marker-end:url(#Arrow1Mend)"
-       d="M 119.51048,79.904208 V 127.52921"
-       id="path8332"
-       inkscape:connector-curvature="0" />
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.39687496"
-       x="75.854202"
-       y="28.310455"
-       id="text2799-38-88"><tspan
-         sodipodi:role="line"
-         id="tspan2797-6-9"
-         x="75.854202"
-         y="28.310455"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.39687496">OL0</tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.39687496"
-       x="105.61983"
-       y="56.091705"
-       id="text2799-38-8-5"><tspan
-         sodipodi:role="line"
-         id="tspan2797-6-4-0"
-         x="105.61983"
-         y="56.091705"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.39687496">OL1</tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.39687496"
-       x="105.61983"
-       y="2.5135815"
-       id="text2799-38-8-5-0"><tspan
-         sodipodi:role="line"
-         id="tspan2797-6-4-0-5"
-         x="105.61983"
-         y="2.5135815"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.39687496">OL3</tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.39687496"
-       x="135.38548"
-       y="28.310455"
-       id="text2799-38-8-5-1"><tspan
-         sodipodi:role="line"
-         id="tspan2797-6-4-0-6"
-         x="135.38548"
-         y="28.310455"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.39687496">OL2</tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.39687496"
-       x="105.61983"
-       y="16.404205"
-       id="text2799-38-8-5-3"><tspan
-         sodipodi:role="line"
-         id="tspan2797-6-4-0-9"
-         x="105.61983"
-         y="16.404205"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.39687496">IL0</tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.39687496"
-       x="95.697983"
-       y="28.310455"
-       id="text2799-38-8-5-7"><tspan
-         sodipodi:role="line"
-         id="tspan2797-6-4-0-0"
-         x="95.697983"
-         y="28.310455"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.39687496">IL1</tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.39687496"
-       x="167.13547"
-       y="28.310455"
-       id="text2799-38-88-3"><tspan
-         sodipodi:role="line"
-         id="tspan2797-6-9-9"
-         x="167.13547"
-         y="28.310455"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.39687496">OL0</tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.39687496"
-       x="210.79172"
-       y="28.310455"
-       id="text2799-38-8-5-1-8"><tspan
-         sodipodi:role="line"
-         id="tspan2797-6-4-0-6-8"
-         x="210.79172"
-         y="28.310455"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.39687496">OL2</tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.39687496"
-       x="188.96361"
-       y="56.091709"
-       id="text2799-38-8-5-2"><tspan
-         sodipodi:role="line"
-         id="tspan2797-6-4-0-56"
-         x="188.96361"
-         y="56.091709"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.39687496">OL1</tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.39687496"
-       x="188.96361"
-       y="36.247959"
-       id="text2799-38-8-5-3-1"><tspan
-         sodipodi:role="line"
-         id="tspan2797-6-4-0-9-0"
-         x="188.96361"
-         y="36.247959"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.39687496">IL0</tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.39687496"
-       x="105.61983"
-       y="62.04483"
-       id="text2799-30"><tspan
-         sodipodi:role="line"
-         id="tspan2797-0"
-         x="105.61983"
-         y="62.04483"
-         style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.39687496">Quads</tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.39687496"
-       x="188.96361"
-       y="62.04483"
-       id="text2799-30-4"><tspan
-         sodipodi:role="line"
-         id="tspan2797-0-8"
-         x="188.96361"
-         y="62.04483"
-         style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.39687496">Triangles</tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.39687496"
-       x="153.24486"
-       y="137.45108"
-       id="text2799-30-5"><tspan
-         sodipodi:role="line"
-         id="tspan2797-0-80"
-         x="153.24486"
-         y="137.45108"
-         style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.39687496">Isolines</tspan></text>
-  </g>
-</svg>
diff --git a/registry/vulkan/images/tessparamUL.svg b/registry/vulkan/images/tessparamUL.svg
deleted file mode 100644
index 779e538..0000000
--- a/registry/vulkan/images/tessparamUL.svg
+++ /dev/null
@@ -1,467 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Created with Inkscape (http://www.inkscape.org/) -->
-
-<svg
-   xmlns:dc="http://purl.org/dc/elements/1.1/"
-   xmlns:cc="http://creativecommons.org/ns#"
-   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
-   xmlns:svg="http://www.w3.org/2000/svg"
-   xmlns="http://www.w3.org/2000/svg"
-   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
-   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
-   width="158.03326mm"
-   height="140.2262mm"
-   viewBox="0 0 158.03326 140.2262"
-   version="1.1"
-   id="svg3252"
-   sodipodi:docname="tessparamUL.svg"
-   inkscape:version="0.92.2 (5c3e80d, 2017-08-06)">
-  <defs
-     id="defs3246">
-    <marker
-       inkscape:stockid="Arrow1Mend"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="Arrow1Mend"
-       style="overflow:visible"
-       inkscape:isstock="true">
-      <path
-         id="path1632"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         transform="matrix(-0.4,0,0,-0.4,-4,0)"
-         inkscape:connector-curvature="0" />
-    </marker>
-    <marker
-       inkscape:stockid="Arrow1Mstart"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="Arrow1Mstart"
-       style="overflow:visible"
-       inkscape:isstock="true">
-      <path
-         id="path1629"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         transform="matrix(0.4,0,0,0.4,4,0)"
-         inkscape:connector-curvature="0" />
-    </marker>
-  </defs>
-  <sodipodi:namedview
-     id="base"
-     pagecolor="#ffffff"
-     bordercolor="#666666"
-     borderopacity="1.0"
-     inkscape:pageopacity="0.0"
-     inkscape:pageshadow="2"
-     inkscape:zoom="1"
-     inkscape:cx="62.03704"
-     inkscape:cy="267.41508"
-     inkscape:document-units="mm"
-     inkscape:current-layer="layer1"
-     showgrid="true"
-     inkscape:snap-object-midpoints="true"
-     inkscape:snap-text-baseline="true"
-     inkscape:window-width="1680"
-     inkscape:window-height="987"
-     inkscape:window-x="1672"
-     inkscape:window-y="-8"
-     inkscape:window-maximized="0"
-     fit-margin-left="1"
-     fit-margin-top="1"
-     fit-margin-right="1"
-     fit-margin-bottom="1">
-    <inkscape:grid
-       type="xygrid"
-       id="grid3797"
-       originx="-70.89992"
-       originy="-158.47658" />
-  </sodipodi:namedview>
-  <metadata
-     id="metadata3249">
-    <rdf:RDF>
-      <cc:Work
-         rdf:about="">
-        <dc:format>image/svg+xml</dc:format>
-        <dc:type
-           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
-        <dc:title />
-      </cc:Work>
-    </rdf:RDF>
-  </metadata>
-  <g
-     inkscape:label="Layer 1"
-     inkscape:groupmode="layer"
-     id="layer1"
-     transform="translate(-70.899921,1.7027646)">
-    <path
-       style="fill:none;stroke:#000000;stroke-width:0.39687496;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       d="M 188.9636,35.609765 173.08861,11.797268 h 31.75 z"
-       id="path5083"
-       inkscape:connector-curvature="0" />
-    <path
-       style="fill:none;stroke:#000000;stroke-width:0.39687496;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       d="M 188.9636,51.484765 C 157.21361,3.859768 157.21361,3.859768 157.21361,3.859768 h 63.5 z"
-       id="path4959"
-       inkscape:connector-curvature="0" />
-    <rect
-       style="fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.39687496;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
-       id="rect5129"
-       width="31.750002"
-       height="31.750002"
-       x="89.744835"
-       y="12.435458" />
-    <rect
-       style="fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.39687496;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
-       id="rect5129-4"
-       width="47.624992"
-       height="47.624992"
-       x="81.80735"
-       y="4.4979596" />
-    <path
-       style="fill:none;stroke:#000000;stroke-width:0.39687496px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-       d="m 129.64583,80.041678 h 47.625"
-       id="path5163"
-       inkscape:connector-curvature="0" />
-    <path
-       style="fill:none;stroke:#000000;stroke-width:0.39687496px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-       d="m 129.64583,119.72918 h 47.625"
-       id="path5165"
-       inkscape:connector-curvature="0" />
-    <path
-       style="fill:none;stroke:#000000;stroke-width:0.39687496px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-       d="m 129.64583,111.79168 h 47.625"
-       id="path5167"
-       inkscape:connector-curvature="0" />
-    <path
-       style="fill:none;stroke:#000000;stroke-width:0.39687496px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-       d="m 129.64583,103.85418 h 47.625"
-       id="path5169"
-       inkscape:connector-curvature="0" />
-    <path
-       style="fill:none;stroke:#000000;stroke-width:0.39687496px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-       d="m 129.64583,95.916678 h 47.625"
-       id="path5171"
-       inkscape:connector-curvature="0" />
-    <path
-       style="fill:none;stroke:#000000;stroke-width:0.39687496px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-       d="m 129.64583,87.979178 h 47.625"
-       id="path5173"
-       inkscape:connector-curvature="0" />
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-weight:normal;font-size:15.875px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.39687496"
-       x="139.35422"
-       y="64.029213"
-       id="text5179"><tspan
-         sodipodi:role="line"
-         id="tspan5177"
-         x="139.35422"
-         y="78.512459"
-         style="stroke-width:0.39687496" /></text>
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.39687496"
-       x="153.45833"
-       y="127.66668"
-       id="text2799"><tspan
-         sodipodi:role="line"
-         id="tspan2797"
-         x="153.45833"
-         y="127.66668"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.39687496">(no edge)</tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.39687496"
-       x="129.43236"
-       y="131.49797"
-       id="text2799-3"><tspan
-         sodipodi:role="line"
-         id="tspan2797-9"
-         x="129.43236"
-         y="131.49797"
-         style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.39687496">(0,1)</tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.39687496"
-       x="177.05736"
-       y="131.49797"
-       id="text2799-3-1"><tspan
-         sodipodi:role="line"
-         id="tspan2797-9-7"
-         x="177.05736"
-         y="131.49797"
-         style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.39687496">(1,1)</tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.39687496"
-       x="129.43236"
-       y="77.91983"
-       id="text2799-3-1-8"><tspan
-         sodipodi:role="line"
-         id="tspan2797-9-7-2"
-         x="129.43236"
-         y="77.91983"
-         style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.39687496">(0,0)</tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.39687496"
-       x="177.05736"
-       y="77.919846"
-       id="text2799-3-1-7"><tspan
-         sodipodi:role="line"
-         id="tspan2797-9-7-0"
-         x="177.05736"
-         y="77.919846"
-         style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.39687496">(1,0)</tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.39687496"
-       x="188.96361"
-       y="55.833851"
-       id="text5070-2-2-9"><tspan
-         sodipodi:role="line"
-         id="tspan5068-0-3-36"
-         x="188.96361"
-         y="55.833851"
-         style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:0.39687496">(0,1,0)</tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.39687496"
-       x="220.71503"
-       y="2.5135767"
-       id="text5070-2-2-9-3"><tspan
-         sodipodi:role="line"
-         id="tspan5068-0-3-36-1"
-         x="220.71503"
-         y="2.5135767"
-         style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:0.39687496">(1,0,0)</tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.39687496"
-       x="157.17018"
-       y="2.5762503"
-       id="text5070-2-2-9-9"><tspan
-         sodipodi:role="line"
-         id="tspan5068-0-3-36-9"
-         x="157.17018"
-         y="2.5762503"
-         style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:0.39687496">(0,0,1)</tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.39687496"
-       x="81.807327"
-       y="56.091728"
-       id="text2799-3-7"><tspan
-         sodipodi:role="line"
-         id="tspan2797-9-70"
-         x="81.807327"
-         y="56.091728"
-         style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.39687496">(0,1)</tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.39687496"
-       x="129.43236"
-       y="56.091728"
-       id="text2799-3-1-5"><tspan
-         sodipodi:role="line"
-         id="tspan2797-9-7-3"
-         x="129.43236"
-         y="56.091728"
-         style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.39687496">(1,1)</tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.39687496"
-       x="81.807327"
-       y="2.5135767"
-       id="text2799-3-1-8-0"><tspan
-         sodipodi:role="line"
-         id="tspan2797-9-7-2-0"
-         x="81.807327"
-         y="2.5135767"
-         style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.39687496">(0,0)</tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.39687496"
-       x="129.43236"
-       y="2.5135882"
-       id="text2799-3-1-7-3"><tspan
-         sodipodi:role="line"
-         id="tspan2797-9-7-0-2"
-         x="129.43236"
-         y="2.5135882"
-         style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.39687496">(1,0)</tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.39687496"
-       x="113.55736"
-       y="105.70109"
-       id="text2799-38"><tspan
-         sodipodi:role="line"
-         id="tspan2797-6"
-         x="113.55736"
-         y="105.70109"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.39687496">OL0</tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.39687496"
-       x="153.24486"
-       y="131.49796"
-       id="text2799-38-8"><tspan
-         sodipodi:role="line"
-         id="tspan2797-6-4"
-         x="153.24486"
-         y="131.49796"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.39687496">OL1</tspan></text>
-    <path
-       style="fill:none;stroke:#000000;stroke-width:0.397;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1.588,1.588;stroke-dashoffset:0;stroke-opacity:1;marker-start:url(#Arrow1Mstart);marker-end:url(#Arrow1Mend)"
-       d="M 119.51048,79.904209 V 127.52921"
-       id="path8332"
-       inkscape:connector-curvature="0" />
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.39687496"
-       x="75.854202"
-       y="28.310457"
-       id="text2799-38-88"><tspan
-         sodipodi:role="line"
-         id="tspan2797-6-9"
-         x="75.854202"
-         y="28.310457"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.39687496">OL0</tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.39687496"
-       x="105.61983"
-       y="56.091705"
-       id="text2799-38-8-5"><tspan
-         sodipodi:role="line"
-         id="tspan2797-6-4-0"
-         x="105.61983"
-         y="56.091705"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.39687496">OL3</tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.39687496"
-       x="105.61983"
-       y="2.5135825"
-       id="text2799-38-8-5-0"><tspan
-         sodipodi:role="line"
-         id="tspan2797-6-4-0-5"
-         x="105.61983"
-         y="2.5135825"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.39687496">OL1</tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.39687496"
-       x="135.38548"
-       y="28.310457"
-       id="text2799-38-8-5-1"><tspan
-         sodipodi:role="line"
-         id="tspan2797-6-4-0-6"
-         x="135.38548"
-         y="28.310457"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.39687496">OL2</tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.39687496"
-       x="105.61983"
-       y="16.404207"
-       id="text2799-38-8-5-3"><tspan
-         sodipodi:role="line"
-         id="tspan2797-6-4-0-9"
-         x="105.61983"
-         y="16.404207"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.39687496">IL0</tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.39687496"
-       x="95.697983"
-       y="28.310457"
-       id="text2799-38-8-5-7"><tspan
-         sodipodi:role="line"
-         id="tspan2797-6-4-0-0"
-         x="95.697983"
-         y="28.310457"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.39687496">IL1</tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.39687496"
-       x="167.13547"
-       y="28.310457"
-       id="text2799-38-88-3"><tspan
-         sodipodi:role="line"
-         id="tspan2797-6-9-9"
-         x="167.13547"
-         y="28.310457"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.39687496">OL0</tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.39687496"
-       x="210.79172"
-       y="28.310457"
-       id="text2799-38-8-5-1-8"><tspan
-         sodipodi:role="line"
-         id="tspan2797-6-4-0-6-8"
-         x="210.79172"
-         y="28.310457"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.39687496">OL2</tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.39687496"
-       x="188.96361"
-       y="2.5135882"
-       id="text2799-38-8-5-2"><tspan
-         sodipodi:role="line"
-         id="tspan2797-6-4-0-56"
-         x="188.96361"
-         y="2.5135882"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.39687496">OL1</tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.39687496"
-       x="188.96361"
-       y="22.357338"
-       id="text2799-38-8-5-3-1"><tspan
-         sodipodi:role="line"
-         id="tspan2797-6-4-0-9-0"
-         x="188.96361"
-         y="22.357338"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.39687496">IL0</tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.39687496"
-       x="105.61983"
-       y="62.04483"
-       id="text2799-30"><tspan
-         sodipodi:role="line"
-         id="tspan2797-0"
-         x="105.61983"
-         y="62.04483"
-         style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.39687496">Quads</tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.39687496"
-       x="188.96361"
-       y="62.04483"
-       id="text2799-30-4"><tspan
-         sodipodi:role="line"
-         id="tspan2797-0-8"
-         x="188.96361"
-         y="62.04483"
-         style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.39687496">Triangles</tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.39687496"
-       x="153.24486"
-       y="137.45108"
-       id="text2799-30-5"><tspan
-         sodipodi:role="line"
-         id="tspan2797-0-80"
-         x="153.24486"
-         y="137.45108"
-         style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.39687496">Isolines</tspan></text>
-  </g>
-</svg>
diff --git a/registry/vulkan/images/vulkantexture0-corner-alternative-a-ll.svg b/registry/vulkan/images/vulkantexture0-corner-alternative-a-ll.svg
deleted file mode 100644
index e25a550..0000000
--- a/registry/vulkan/images/vulkantexture0-corner-alternative-a-ll.svg
+++ /dev/null
@@ -1,1174 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Created with Inkscape (http://www.inkscape.org/) -->
-
-<svg
-   xmlns:dc="http://purl.org/dc/elements/1.1/"
-   xmlns:cc="http://creativecommons.org/ns#"
-   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
-   xmlns:svg="http://www.w3.org/2000/svg"
-   xmlns="http://www.w3.org/2000/svg"
-   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
-   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
-   width="706.10547"
-   height="384.11328"
-   viewBox="0 0 186.82375 101.62997"
-   version="1.1"
-   id="svg8"
-   inkscape:version="0.92.4 (5da689c313, 2019-01-14)"
-   sodipodi:docname="vulkantexture0-corner-alternative-a-ll.svg">
-  <defs
-     id="defs2">
-    <marker
-       inkscape:stockid="Arrow1Mend"
-       orient="auto"
-       refY="0.0"
-       refX="0.0"
-       id="marker2415"
-       style="overflow:visible;"
-       inkscape:isstock="true">
-      <path
-         id="path2413"
-         d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
-         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1"
-         transform="scale(0.4) rotate(180) translate(10,0)" />
-    </marker>
-    <marker
-       inkscape:isstock="true"
-       style="overflow:visible;"
-       id="marker1517"
-       refX="0.0"
-       refY="0.0"
-       orient="auto"
-       inkscape:stockid="Arrow1Mend"
-       inkscape:collect="always">
-      <path
-         transform="scale(0.4) rotate(180) translate(10,0)"
-         style="fill-rule:evenodd;stroke:#ff0000;stroke-width:1pt;stroke-opacity:1;fill:#ff0000;fill-opacity:1"
-         d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
-         id="path1515" />
-    </marker>
-    <marker
-       inkscape:stockid="Arrow2Lend"
-       orient="auto"
-       refY="0.0"
-       refX="0.0"
-       id="Arrow2Lend"
-       style="overflow:visible;"
-       inkscape:isstock="true">
-      <path
-         id="path1144"
-         style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round;stroke:#ff0000;stroke-opacity:1;fill:#ff0000;fill-opacity:1"
-         d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z "
-         transform="scale(1.1) rotate(180) translate(1,0)" />
-    </marker>
-    <marker
-       inkscape:isstock="true"
-       style="overflow:visible"
-       id="marker1073"
-       refX="0"
-       refY="0"
-       orient="auto"
-       inkscape:stockid="Arrow1Lend">
-      <path
-         transform="matrix(-0.8,0,0,-0.8,-10,0)"
-         style="fill:#ff0000;fill-opacity:1;fill-rule:evenodd;stroke:#ff0000;stroke-width:1.00000003pt;stroke-opacity:1"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         id="path1071"
-         inkscape:connector-curvature="0" />
-    </marker>
-    <marker
-       inkscape:stockid="Arrow1Lend"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="Arrow1Lend-0"
-       style="overflow:visible"
-       inkscape:isstock="true">
-      <path
-         inkscape:connector-curvature="0"
-         id="path977-6"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         transform="matrix(-0.8,0,0,-0.8,-10,0)" />
-    </marker>
-    <marker
-       inkscape:isstock="true"
-       style="overflow:visible"
-       id="marker1483-7"
-       refX="0"
-       refY="0"
-       orient="auto"
-       inkscape:stockid="Arrow1Lend">
-      <path
-         inkscape:connector-curvature="0"
-         transform="matrix(-0.8,0,0,-0.8,-10,0)"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         id="path1481-0" />
-    </marker>
-    <marker
-       inkscape:stockid="Arrow1Mend"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="marker2415-4"
-       style="overflow:visible"
-       inkscape:isstock="true">
-      <path
-         inkscape:connector-curvature="0"
-         id="path2413-3"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         transform="matrix(-0.4,0,0,-0.4,-4,0)" />
-    </marker>
-    <marker
-       inkscape:isstock="true"
-       style="overflow:visible"
-       id="marker1483-7-3"
-       refX="0"
-       refY="0"
-       orient="auto"
-       inkscape:stockid="Arrow1Lend">
-      <path
-         inkscape:connector-curvature="0"
-         transform="matrix(-0.8,0,0,-0.8,-10,0)"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
-         d="M 0,0 5,-5 -12.5,0 5,5 z"
-         id="path1481-0-6" />
-    </marker>
-    <marker
-       inkscape:isstock="true"
-       style="overflow:visible"
-       id="marker1483"
-       refX="0"
-       refY="0"
-       orient="auto"
-       inkscape:stockid="Arrow1Lend"
-       inkscape:collect="always">
-      <path
-         transform="matrix(-0.8,0,0,-0.8,-10,0)"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
-         d="M 0,0 5,-5 -12.5,0 5,5 z"
-         id="path1481"
-         inkscape:connector-curvature="0" />
-    </marker>
-  </defs>
-  <sodipodi:namedview
-     id="base"
-     pagecolor="#ffffff"
-     bordercolor="#666666"
-     borderopacity="1.0"
-     inkscape:pageopacity="0.0"
-     inkscape:pageshadow="2"
-     inkscape:zoom="2.13"
-     inkscape:cx="363.68234"
-     inkscape:cy="168.13361"
-     inkscape:document-units="px"
-     inkscape:current-layer="g3888"
-     showgrid="true"
-     inkscape:snap-object-midpoints="true"
-     inkscape:snap-text-baseline="true"
-     inkscape:window-width="2252"
-     inkscape:window-height="1477"
-     inkscape:window-x="586"
-     inkscape:window-y="360"
-     inkscape:window-maximized="0"
-     fit-margin-top="1"
-     fit-margin-right="1"
-     fit-margin-bottom="1"
-     fit-margin-left="1"
-     units="px"
-     inkscape:snap-center="false"
-     inkscape:snap-global="false">
-    <inkscape:grid
-       type="xygrid"
-       id="grid12"
-       originx="0.79995428"
-       originy="-29.882412"
-       dotted="false" />
-  </sodipodi:namedview>
-  <metadata
-     id="metadata5">
-    <rdf:RDF>
-      <cc:Work
-         rdf:about="">
-        <dc:format>image/svg+xml</dc:format>
-        <dc:type
-           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
-        <dc:title />
-      </cc:Work>
-    </rdf:RDF>
-  </metadata>
-  <g
-     inkscape:label="Layer 1"
-     inkscape:groupmode="layer"
-     id="layer1"
-     transform="translate(-6.9498988,47.8249)">
-    <g
-       id="g3888">
-      <text
-         id="text121-6"
-         y="36.062489"
-         x="44.791519"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none"
-         xml:space="preserve"><tspan
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;writing-mode:lr-tb;text-anchor:start"
-           y="36.062489"
-           x="44.791519"
-           id="tspan119-11"
-           sodipodi:role="line">0</tspan></text>
-      <text
-         id="text121-30"
-         y="36.062489"
-         x="63.312355"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none"
-         xml:space="preserve"><tspan
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;writing-mode:lr-tb;text-anchor:start"
-           y="36.062489"
-           x="63.312355"
-           id="tspan119-47"
-           sodipodi:role="line">1</tspan></text>
-      <text
-         id="text121-1"
-         y="36.062489"
-         x="81.833191"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none"
-         xml:space="preserve"><tspan
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;writing-mode:lr-tb;text-anchor:start"
-           y="36.062489"
-           x="81.833191"
-           id="tspan119-9"
-           sodipodi:role="line">2</tspan></text>
-      <text
-         id="text121-8"
-         y="36.062489"
-         x="100.35403"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none"
-         xml:space="preserve"><tspan
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;writing-mode:lr-tb;text-anchor:start"
-           y="36.062489"
-           x="100.35403"
-           id="tspan119-7"
-           sodipodi:role="line">3</tspan></text>
-      <text
-         id="text121-4"
-         y="36.062489"
-         x="118.87486"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none"
-         xml:space="preserve"><tspan
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;writing-mode:lr-tb;text-anchor:start"
-           y="36.062489"
-           x="118.87486"
-           id="tspan119-0"
-           sodipodi:role="line">4</tspan></text>
-      <text
-         id="text121-7"
-         y="36.062489"
-         x="137.39569"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none"
-         xml:space="preserve"><tspan
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;writing-mode:lr-tb;text-anchor:start"
-           y="36.062489"
-           x="137.39569"
-           id="tspan119-8"
-           sodipodi:role="line">5</tspan></text>
-      <text
-         id="text121-79"
-         y="36.062489"
-         x="155.91653"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none"
-         xml:space="preserve"><tspan
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;writing-mode:lr-tb;text-anchor:start"
-           y="36.062489"
-           x="155.91653"
-           id="tspan119-16"
-           sodipodi:role="line">6</tspan></text>
-      <text
-         id="text121-31"
-         y="36.062489"
-         x="174.43736"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none"
-         xml:space="preserve"><tspan
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;writing-mode:lr-tb;text-anchor:start"
-           y="36.062489"
-           x="174.43736"
-           id="tspan119-09"
-           sodipodi:role="line">7</tspan></text>
-      <text
-         id="text121-3-7-3"
-         y="37.611748"
-         x="110.83607"
-         style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none"
-         xml:space="preserve"><tspan
-           style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';text-align:center;writing-mode:lr-tb;text-anchor:middle"
-           y="37.611748"
-           x="110.83607"
-           id="tspan119-1-8-7"
-           sodipodi:role="line">i</tspan></text>
-      <text
-         id="text121-09-74"
-         y="45.537884"
-         x="28.097963"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none"
-         xml:space="preserve"><tspan
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;writing-mode:lr-tb;text-anchor:start"
-           y="45.537884"
-           x="28.097963"
-           id="tspan119-67-18"
-           sodipodi:role="line">0.0</tspan></text>
-      <text
-         id="text121-09-74-5"
-         y="45.538918"
-         x="178.39691"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none"
-         xml:space="preserve"><tspan
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;writing-mode:lr-tb;text-anchor:start"
-           y="45.538918"
-           x="178.39691"
-           id="tspan119-67-18-0"
-           sodipodi:role="line">7.0</tspan></text>
-      <path
-         inkscape:connector-curvature="0"
-         id="path972"
-         d="m 46.370385,43.993174 h 62.452355 m 4.6261,2e-6 h 62.45235"
-         style="fill:none;stroke:#000000;stroke-width:0.26458335;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-end:url(#marker1483-7)" />
-      <text
-         id="text121-3-7-3-3"
-         y="45.122406"
-         x="110.86915"
-         style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none"
-         xml:space="preserve"><tspan
-           style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';text-align:center;writing-mode:lr-tb;text-anchor:middle"
-           y="45.122406"
-           x="110.86915"
-           id="tspan119-1-8-7-2"
-           sodipodi:role="line">u</tspan></text>
-      <text
-         id="text121-09-74-7"
-         y="53.47538"
-         x="28.097961"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none"
-         xml:space="preserve"><tspan
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;writing-mode:lr-tb;text-anchor:start"
-           y="53.47538"
-           x="28.097961"
-           id="tspan119-67-18-1"
-           sodipodi:role="line">0.0</tspan></text>
-      <text
-         id="text121-09-74-5-4"
-         y="53.476414"
-         x="178.39691"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none"
-         xml:space="preserve"><tspan
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;writing-mode:lr-tb;text-anchor:start"
-           y="53.476414"
-           x="178.39691"
-           id="tspan119-67-18-0-9"
-           sodipodi:role="line">1.0</tspan></text>
-      <path
-         inkscape:connector-curvature="0"
-         id="path972-8"
-         d="m 46.370382,51.944306 h 62.452358 m 4.6261,2e-6 h 62.45235"
-         style="fill:none;stroke:#000000;stroke-width:0.26458335;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-end:url(#Arrow1Lend-0)" />
-      <text
-         id="text121-3-7-3-3-5"
-         y="53.059902"
-         x="110.86914"
-         style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none"
-         xml:space="preserve"><tspan
-           style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';text-align:center;writing-mode:lr-tb;text-anchor:middle"
-           y="53.059902"
-           x="110.86914"
-           id="tspan119-1-8-7-2-2"
-           sodipodi:role="line">s</tspan></text>
-      <g
-         id="g3616">
-        <text
-           xml:space="preserve"
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none"
-           x="31.562353"
-           y="-32.729183"
-           id="text121"><tspan
-             sodipodi:role="line"
-             id="tspan119"
-             x="31.562353"
-             y="-32.729183"
-             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;writing-mode:lr-tb;text-anchor:start">3</tspan></text>
-        <text
-           xml:space="preserve"
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none"
-           x="31.562353"
-           y="-14.208344"
-           id="text121-3"><tspan
-             sodipodi:role="line"
-             id="tspan119-1"
-             x="31.562353"
-             y="-14.208344"
-             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;writing-mode:lr-tb;text-anchor:start">2</tspan></text>
-        <text
-           xml:space="preserve"
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none"
-           x="31.562353"
-           y="4.3124895"
-           id="text121-0"><tspan
-             sodipodi:role="line"
-             id="tspan119-4"
-             x="31.562353"
-             y="4.3124895"
-             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;writing-mode:lr-tb;text-anchor:start">1</tspan></text>
-        <text
-           xml:space="preserve"
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none"
-           x="31.562353"
-           y="22.833323"
-           id="text121-33"><tspan
-             sodipodi:role="line"
-             id="tspan119-6"
-             x="31.562353"
-             y="22.833323"
-             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;writing-mode:lr-tb;text-anchor:start">0</tspan></text>
-        <text
-           xml:space="preserve"
-           style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none"
-           x="31.790766"
-           y="-5.1587672"
-           id="text121-3-7"><tspan
-             sodipodi:role="line"
-             id="tspan119-1-8"
-             x="31.790766"
-             y="-5.1587672"
-             style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';text-align:center;writing-mode:lr-tb;text-anchor:middle">j</tspan></text>
-      </g>
-      <path
-         sodipodi:nodetypes="cc"
-         style="fill:#000000;stroke:#000000;stroke-width:0.26458335;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-end:url(#marker2415-4)"
-         d="m 138.95715,21.362502 11.90625,0"
-         id="path2429-6"
-         inkscape:connector-curvature="0" />
-      <path
-         d="m 149.99415,19.474237 h -0.38861 v -0.241846 q -0.16743,0.144694 -0.34933,0.22531 -0.1819,0.08062 -0.39481,0.08062 -0.41341,0 -0.65732,-0.318327 -0.24185,-0.318327 -0.24185,-0.882633 0,-0.293522 0.0827,-0.522966 0.0847,-0.229443 0.22738,-0.390674 0.14056,-0.157096 0.3266,-0.239778 0.1881,-0.08268 0.3886,-0.08268 0.1819,0 0.32246,0.04548 0.14056,0.04547 0.29559,0.12609 v -0.107487 h 0.38861 z m -0.38861,-0.568441 v -1.314648 q -0.15709,-0.07028 -0.28112,-0.101286 -0.12402,-0.03307 -0.27078,-0.03307 -0.3266,0 -0.5085,0.227377 -0.1819,0.227376 -0.1819,0.644921 0,0.411345 0.14056,0.626319 0.14056,0.212907 0.45062,0.212907 0.16537,0 0.33486,-0.07235 0.1695,-0.07441 0.31626,-0.19017 z"
-         style="font-size:4.23333311px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:1.25;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal'"
-         id="path1089"
-         inkscape:connector-curvature="0" />
-      <g
-         transform="translate(0,-0.5291654)"
-         id="g3789">
-        <path
-           style="fill:none;stroke:#ff0000;stroke-width:0.30418205px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker1517)"
-           d="M 138.6988,21.49061 65.777117,3.8028339"
-           id="path1842"
-           inkscape:connector-curvature="0"
-           sodipodi:nodetypes="cc" />
-        <g
-           id="g3589"
-           transform="matrix(1,0,0,-1,3.1750002,24.485338)">
-          <path
-             d="m 100.72287,12.249991 h -0.34236 q -0.14534,0.235774 -0.239,0.510305 -0.0937,0.274531 -0.0937,0.573286 0,0.306828 0.0743,0.591048 0.0743,0.285836 0.21801,0.561981 0.13726,0.261613 0.32782,0.495772 0.19217,0.234158 0.4231,0.445708 h 0.36496 v -0.01616 q -0.18409,-0.135656 -0.38434,-0.34397 -0.19863,-0.208322 -0.3585,-0.460244 -0.16311,-0.256767 -0.26646,-0.566827 -0.10174,-0.308444 -0.10174,-0.6508 0,-0.350429 0.10174,-0.637879 0.10173,-0.289066 0.27614,-0.486082 z"
-             style="font-size:2.11666656px;font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:1.25;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#f40000;fill-opacity:1;stroke:none;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic'"
-             id="path1095"
-             inkscape:connector-curvature="0" />
-          <path
-             d="m 103.46979,12.915325 h -2.24146 l 1.46309,2.404569 h 0.42633 z m -0.35366,0.259997 -0.2713,1.863582 -1.13042,-1.863582 z"
-             style="font-size:2.11666656px;font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:1.25;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#f40000;fill-opacity:1;stroke:none;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic'"
-             id="path1097"
-             inkscape:connector-curvature="0" />
-          <path
-             d="m 104.70195,15.336043 -0.0727,-0.314903 h -0.34236 l 0.0727,0.314903 z m -0.16148,-0.616888 -0.41665,-1.80383 h -0.30359 l 0.41664,1.80383 z"
-             style="font-size:2.11666656px;font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:1.25;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#f40000;fill-opacity:1;stroke:none;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic'"
-             id="path1099"
-             inkscape:connector-curvature="0" />
-          <path
-             d="m 105.47872,13.375569 -0.70087,-1.057753 h -0.23577 l 0.52322,1.057753 z"
-             style="font-size:2.11666656px;font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:1.25;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#f40000;fill-opacity:1;stroke:none;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic'"
-             id="path1101"
-             inkscape:connector-curvature="0" />
-          <path
-             d="m 107.98502,12.915325 h -2.24146 l 1.46309,2.404569 h 0.42633 z m -0.35366,0.259997 -0.2713,1.863582 -1.13042,-1.863582 z"
-             style="font-size:2.11666656px;font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:1.25;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#f40000;fill-opacity:1;stroke:none;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic'"
-             id="path1103"
-             inkscape:connector-curvature="0" />
-          <path
-             d="m 109.38352,15.02114 h -0.34559 l 0.0727,0.314903 h 0.34559 z m -0.51677,-2.149416 q -0.0727,-0.313289 -0.25838,-0.476392 -0.1841,-0.163105 -0.45863,-0.163105 -0.0646,0 -0.16956,0.01297 -0.10497,0.01297 -0.17279,0.0323 l 0.063,0.276146 h 0.0161 q 0.0468,-0.021 0.11142,-0.04038 0.063,-0.02098 0.14696,-0.02098 0.11304,0 0.18894,0.03553 0.0775,0.03391 0.12596,0.10336 0.0468,0.06783 0.0775,0.169562 0.0307,0.100125 0.0549,0.209936 l 0.33751,1.464705 h -0.37627 l 0.0565,0.243847 h 0.6831 z"
-             style="font-size:2.11666656px;font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:1.25;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#f40000;fill-opacity:1;stroke:none;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic'"
-             id="path1105"
-             inkscape:connector-curvature="0" />
-          <path
-             d="m 110.65766,14.344502 q 0,-0.305214 -0.0759,-0.597509 -0.0759,-0.29068 -0.2164,-0.555522 -0.1405,-0.264841 -0.33267,-0.500614 -0.19217,-0.237389 -0.41825,-0.440866 h -0.36497 v 0.01616 q 0.18572,0.138875 0.38273,0.342357 0.19863,0.201861 0.36012,0.461857 0.1841,0.297139 0.27615,0.595894 0.092,0.298755 0.092,0.621731 0,0.343972 -0.10173,0.633038 -0.10012,0.29068 -0.27614,0.490925 v 0.01616 h 0.34235 q 0.14372,-0.234158 0.23739,-0.508689 0.0953,-0.272916 0.0953,-0.5749 z"
-             style="font-size:2.11666656px;font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:1.25;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#f40000;fill-opacity:1;stroke:none;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic'"
-             id="path1107"
-             inkscape:connector-curvature="0" />
-        </g>
-      </g>
-      <circle
-         transform="matrix(1.7500001,0,0,-1.7500001,-27.968899,59.718761)"
-         sodipodi:ry="0.52778977"
-         sodipodi:rx="0.52778977"
-         sodipodi:cy="21.833345"
-         sodipodi:cx="42.333332"
-         d="m 42.861122,21.833345 c 0,0.291491 -0.2363,0.52779 -0.52779,0.52779 -0.29149,0 -0.52779,-0.236299 -0.52779,-0.52779 0,-0.29149 0.2363,-0.527789 0.52779,-0.527789 0.29149,0 0.52779,0.236299 0.52779,0.527789 z"
-         r="0.52778977"
-         cy="21.833345"
-         cx="42.333332"
-         id="path4517"
-         style="fill:#000000;fill-opacity:1;stroke:none" />
-      <circle
-         transform="matrix(1.7500001,0,0,-1.7500001,-27.968899,59.718761)"
-         sodipodi:ry="0.52778977"
-         sodipodi:rx="0.52778977"
-         sodipodi:cy="21.833345"
-         sodipodi:cx="52.916668"
-         d="m 53.444458,21.833345 c 0,0.291491 -0.2363,0.52779 -0.52779,0.52779 -0.29149,0 -0.52779,-0.236299 -0.52779,-0.52779 0,-0.29149 0.2363,-0.527789 0.52779,-0.527789 0.29149,0 0.52779,0.236299 0.52779,0.527789 z"
-         r="0.52778977"
-         cy="21.833345"
-         cx="52.916668"
-         id="path4517-7"
-         style="fill:#000000;fill-opacity:1;stroke:none" />
-      <circle
-         transform="matrix(1.7500001,0,0,-1.7500001,-27.968899,59.718761)"
-         sodipodi:ry="0.52778977"
-         sodipodi:rx="0.52778977"
-         sodipodi:cy="21.833345"
-         sodipodi:cx="63.5"
-         d="m 64.02779,21.833345 c 0,0.291491 -0.2363,0.52779 -0.52779,0.52779 -0.29149,0 -0.52779,-0.236299 -0.52779,-0.52779 0,-0.29149 0.2363,-0.527789 0.52779,-0.527789 0.29149,0 0.52779,0.236299 0.52779,0.527789 z"
-         r="0.52778977"
-         cy="21.833345"
-         cx="63.5"
-         id="path4517-78"
-         style="fill:#000000;fill-opacity:1;stroke:none" />
-      <circle
-         transform="matrix(1.7500001,0,0,-1.7500001,-27.968899,59.718761)"
-         sodipodi:ry="0.52778977"
-         sodipodi:rx="0.52778977"
-         sodipodi:cy="21.833345"
-         sodipodi:cx="74.083336"
-         d="m 74.611126,21.833345 c 0,0.291491 -0.2363,0.52779 -0.52779,0.52779 -0.29149,0 -0.52779,-0.236299 -0.52779,-0.52779 0,-0.29149 0.2363,-0.527789 0.52779,-0.527789 0.29149,0 0.52779,0.236299 0.52779,0.527789 z"
-         r="0.52778977"
-         cy="21.833345"
-         cx="74.083336"
-         id="path4517-7-9"
-         style="fill:#000000;fill-opacity:1;stroke:none" />
-      <circle
-         transform="matrix(1.7500001,0,0,-1.7500001,-27.968899,59.718761)"
-         sodipodi:ry="0.52778977"
-         sodipodi:rx="0.52778977"
-         sodipodi:cy="21.833345"
-         sodipodi:cx="84.666664"
-         d="m 85.194454,21.833345 c 0,0.291491 -0.2363,0.52779 -0.52779,0.52779 -0.29149,0 -0.52779,-0.236299 -0.52779,-0.52779 0,-0.29149 0.2363,-0.527789 0.52779,-0.527789 0.29149,0 0.52779,0.236299 0.52779,0.527789 z"
-         r="0.52778977"
-         cy="21.833345"
-         cx="84.666664"
-         id="path4517-0"
-         style="fill:#000000;fill-opacity:1;stroke:none" />
-      <circle
-         transform="matrix(1.7500001,0,0,-1.7500001,-27.968899,59.718761)"
-         sodipodi:ry="0.52778977"
-         sodipodi:rx="0.52778977"
-         sodipodi:cy="21.833345"
-         sodipodi:cx="95.25"
-         d="m 95.77779,21.833345 c 0,0.291491 -0.2363,0.52779 -0.52779,0.52779 -0.29149,0 -0.52779,-0.236299 -0.52779,-0.52779 0,-0.29149 0.2363,-0.527789 0.52779,-0.527789 0.29149,0 0.52779,0.236299 0.52779,0.527789 z"
-         r="0.52778977"
-         cy="21.833345"
-         cx="95.25"
-         id="path4517-7-0"
-         style="fill:#000000;fill-opacity:1;stroke:none" />
-      <circle
-         transform="matrix(1.7500001,0,0,-1.7500001,-27.968899,59.718761)"
-         sodipodi:ry="0.52778977"
-         sodipodi:rx="0.52778977"
-         sodipodi:cy="21.833345"
-         sodipodi:cx="105.83334"
-         d="m 106.36113,21.833345 c 0,0.291491 -0.2363,0.52779 -0.52779,0.52779 -0.29149,0 -0.52779,-0.236299 -0.52779,-0.52779 0,-0.29149 0.2363,-0.527789 0.52779,-0.527789 0.29149,0 0.52779,0.236299 0.52779,0.527789 z"
-         r="0.52778977"
-         cy="21.833345"
-         cx="105.83334"
-         id="path4517-1"
-         style="fill:#000000;fill-opacity:1;stroke:none" />
-      <circle
-         transform="matrix(1.7500001,0,0,-1.7500001,-27.968899,59.718761)"
-         sodipodi:ry="0.52778977"
-         sodipodi:rx="0.52778977"
-         sodipodi:cy="21.833345"
-         sodipodi:cx="116.41666"
-         d="m 116.94445,21.833345 c 0,0.291491 -0.2363,0.52779 -0.52779,0.52779 -0.29149,0 -0.52779,-0.236299 -0.52779,-0.52779 0,-0.29149 0.2363,-0.527789 0.52779,-0.527789 0.29149,0 0.52779,0.236299 0.52779,0.527789 z"
-         r="0.52778977"
-         cy="21.833345"
-         cx="116.41666"
-         id="path4517-7-7"
-         style="fill:#000000;fill-opacity:1;stroke:none" />
-      <path
-         inkscape:connector-curvature="0"
-         id="path4001"
-         d="M 46.354042,21.403099 H 175.91759 l 2e-5,-55.744758 H 46.35405 l -8e-6,55.744758"
-         style="fill:none;stroke:#808080;stroke-width:0.21462008;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
-      <path
-         inkscape:connector-curvature="0"
-         id="path3999"
-         d="m 64.882195,21.263491 7e-6,-55.597833"
-         style="fill:none;stroke:#808080;stroke-width:0.22925246;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
-      <path
-         inkscape:connector-curvature="0"
-         id="path3997"
-         d="m 83.4101,-34.334342 -7e-6,55.597833"
-         style="fill:none;stroke:#808080;stroke-width:0.22925246;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
-      <path
-         inkscape:connector-curvature="0"
-         id="path3995"
-         d="m 101.938,21.263491 2e-5,-55.597833"
-         style="fill:none;stroke:#808080;stroke-width:0.22925246;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
-      <path
-         inkscape:connector-curvature="0"
-         id="path3993"
-         d="m 120.46594,-34.334342 -1e-5,55.597833"
-         style="fill:none;stroke:#808080;stroke-width:0.22925246;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
-      <path
-         inkscape:connector-curvature="0"
-         id="path3991"
-         d="M 138.99384,21.263491 V -34.334342"
-         style="fill:none;stroke:#808080;stroke-width:0.22925246;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
-      <path
-         inkscape:connector-curvature="0"
-         id="path3989"
-         d="m 157.52174,-34.334342 -1e-5,55.597833"
-         style="fill:none;stroke:#808080;stroke-width:0.22925246;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
-      <path
-         inkscape:connector-curvature="0"
-         id="path3985"
-         d="M 175.63671,-15.804515 H 46.370365"
-         style="fill:none;stroke:#808080;stroke-width:0.24724816;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
-      <path
-         inkscape:connector-curvature="0"
-         id="path3983"
-         d="M 46.370358,2.733655 H 175.63669"
-         style="fill:none;stroke:#808080;stroke-width:0.24724816;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
-      <circle
-         transform="matrix(1.7500001,0,0,-1.7500001,-27.968899,59.718761)"
-         sodipodi:ry="0.52778977"
-         sodipodi:rx="0.52778977"
-         sodipodi:cy="32.416679"
-         sodipodi:cx="42.333332"
-         d="m 42.861122,32.416679 c 0,0.291491 -0.2363,0.52779 -0.52779,0.52779 -0.29149,0 -0.52779,-0.236299 -0.52779,-0.52779 0,-0.29149 0.2363,-0.527789 0.52779,-0.527789 0.29149,0 0.52779,0.236299 0.52779,0.527789 z"
-         r="0.52778977"
-         cy="32.416679"
-         cx="42.333332"
-         id="path4517-6"
-         style="fill:#000000;fill-opacity:1;stroke:none" />
-      <circle
-         transform="matrix(1.7500001,0,0,-1.7500001,-27.968899,59.718761)"
-         sodipodi:ry="0.52778977"
-         sodipodi:rx="0.52778977"
-         sodipodi:cy="32.416679"
-         sodipodi:cx="52.916668"
-         d="m 53.444458,32.416679 c 0,0.291491 -0.2363,0.52779 -0.52779,0.52779 -0.29149,0 -0.52779,-0.236299 -0.52779,-0.52779 0,-0.29149 0.2363,-0.527789 0.52779,-0.527789 0.29149,0 0.52779,0.236299 0.52779,0.527789 z"
-         r="0.52778977"
-         cy="32.416679"
-         cx="52.916668"
-         id="path4517-7-3"
-         style="fill:#000000;fill-opacity:1;stroke:none" />
-      <circle
-         transform="matrix(1.7500001,0,0,-1.7500001,-27.968899,59.718761)"
-         sodipodi:ry="0.52778977"
-         sodipodi:rx="0.52778977"
-         sodipodi:cy="32.416679"
-         sodipodi:cx="63.5"
-         d="m 64.02779,32.416679 c 0,0.291491 -0.2363,0.52779 -0.52779,0.52779 -0.29149,0 -0.52779,-0.236299 -0.52779,-0.52779 0,-0.29149 0.2363,-0.527789 0.52779,-0.527789 0.29149,0 0.52779,0.236299 0.52779,0.527789 z"
-         r="0.52778977"
-         cy="32.416679"
-         cx="63.5"
-         id="path4517-78-9"
-         style="fill:#000000;fill-opacity:1;stroke:none" />
-      <circle
-         transform="matrix(1.7500001,0,0,-1.7500001,-27.968899,59.718761)"
-         sodipodi:ry="0.52778977"
-         sodipodi:rx="0.52778977"
-         sodipodi:cy="32.416679"
-         sodipodi:cx="74.083336"
-         d="m 74.611126,32.416679 c 0,0.291491 -0.2363,0.52779 -0.52779,0.52779 -0.29149,0 -0.52779,-0.236299 -0.52779,-0.52779 0,-0.29149 0.2363,-0.527789 0.52779,-0.527789 0.29149,0 0.52779,0.236299 0.52779,0.527789 z"
-         r="0.52778977"
-         cy="32.416679"
-         cx="74.083336"
-         id="path4517-7-9-1"
-         style="fill:#000000;fill-opacity:1;stroke:none" />
-      <circle
-         transform="matrix(1.7500001,0,0,-1.7500001,-27.968899,59.718761)"
-         sodipodi:ry="0.52778977"
-         sodipodi:rx="0.52778977"
-         sodipodi:cy="32.416679"
-         sodipodi:cx="84.666664"
-         d="m 85.194454,32.416679 c 0,0.291491 -0.2363,0.52779 -0.52779,0.52779 -0.29149,0 -0.52779,-0.236299 -0.52779,-0.52779 0,-0.29149 0.2363,-0.527789 0.52779,-0.527789 0.29149,0 0.52779,0.236299 0.52779,0.527789 z"
-         r="0.52778977"
-         cy="32.416679"
-         cx="84.666664"
-         id="path4517-0-6"
-         style="fill:#000000;fill-opacity:1;stroke:none" />
-      <circle
-         transform="matrix(1.7500001,0,0,-1.7500001,-27.968899,59.718761)"
-         sodipodi:ry="0.52778977"
-         sodipodi:rx="0.52778977"
-         sodipodi:cy="32.416679"
-         sodipodi:cx="95.25"
-         d="m 95.77779,32.416679 c 0,0.291491 -0.2363,0.52779 -0.52779,0.52779 -0.29149,0 -0.52779,-0.236299 -0.52779,-0.52779 0,-0.29149 0.2363,-0.527789 0.52779,-0.527789 0.29149,0 0.52779,0.236299 0.52779,0.527789 z"
-         r="0.52778977"
-         cy="32.416679"
-         cx="95.25"
-         id="path4517-7-0-8"
-         style="fill:#000000;fill-opacity:1;stroke:none" />
-      <circle
-         transform="matrix(1.7500001,0,0,-1.7500001,-27.968899,59.718761)"
-         sodipodi:ry="0.52778977"
-         sodipodi:rx="0.52778977"
-         sodipodi:cy="32.416679"
-         sodipodi:cx="105.83334"
-         d="m 106.36113,32.416679 c 0,0.291491 -0.2363,0.52779 -0.52779,0.52779 -0.29149,0 -0.52779,-0.236299 -0.52779,-0.52779 0,-0.29149 0.2363,-0.527789 0.52779,-0.527789 0.29149,0 0.52779,0.236299 0.52779,0.527789 z"
-         r="0.52778977"
-         cy="32.416679"
-         cx="105.83334"
-         id="path4517-1-5"
-         style="fill:#000000;fill-opacity:1;stroke:none" />
-      <circle
-         transform="matrix(1.7500001,0,0,-1.7500001,-27.968899,59.718761)"
-         sodipodi:ry="0.52778977"
-         sodipodi:rx="0.52778977"
-         sodipodi:cy="32.416679"
-         sodipodi:cx="116.41665"
-         d="m 116.94444,32.416679 c 0,0.291491 -0.2363,0.52779 -0.52779,0.52779 -0.29149,0 -0.52779,-0.236299 -0.52779,-0.52779 0,-0.29149 0.2363,-0.527789 0.52779,-0.527789 0.29149,0 0.52779,0.236299 0.52779,0.527789 z"
-         r="0.52778977"
-         cy="32.416679"
-         cx="116.41665"
-         id="path4517-7-7-5"
-         style="fill:#000000;fill-opacity:1;stroke:none" />
-      <circle
-         transform="matrix(1.7500001,0,0,-1.7500001,-27.968899,59.718761)"
-         sodipodi:ry="0.52778977"
-         sodipodi:rx="0.52778977"
-         sodipodi:cy="43.000011"
-         sodipodi:cx="42.333332"
-         d="m 42.861122,43.000011 c 0,0.291491 -0.2363,0.52779 -0.52779,0.52779 -0.29149,0 -0.52779,-0.236299 -0.52779,-0.52779 0,-0.29149 0.2363,-0.527789 0.52779,-0.527789 0.29149,0 0.52779,0.236299 0.52779,0.527789 z"
-         r="0.52778977"
-         cy="43.000011"
-         cx="42.333332"
-         id="path4517-4"
-         style="fill:#000000;fill-opacity:1;stroke:none" />
-      <circle
-         transform="matrix(1.7500001,0,0,-1.7500001,-27.968899,59.718761)"
-         sodipodi:ry="0.52778977"
-         sodipodi:rx="0.52778977"
-         sodipodi:cy="43.000011"
-         sodipodi:cx="52.916668"
-         d="m 53.444458,43.000011 c 0,0.291491 -0.2363,0.52779 -0.52779,0.52779 -0.29149,0 -0.52779,-0.236299 -0.52779,-0.52779 0,-0.29149 0.2363,-0.527789 0.52779,-0.527789 0.29149,0 0.52779,0.236299 0.52779,0.527789 z"
-         r="0.52778977"
-         cy="43.000011"
-         cx="52.916668"
-         id="path4517-7-2"
-         style="fill:#000000;fill-opacity:1;stroke:none" />
-      <circle
-         transform="matrix(1.7500001,0,0,-1.7500001,-27.968899,59.718761)"
-         sodipodi:ry="0.52778977"
-         sodipodi:rx="0.52778977"
-         sodipodi:cy="43.000011"
-         sodipodi:cx="63.5"
-         d="m 64.02779,43.000011 c 0,0.291491 -0.2363,0.52779 -0.52779,0.52779 -0.29149,0 -0.52779,-0.236299 -0.52779,-0.52779 0,-0.29149 0.2363,-0.527789 0.52779,-0.527789 0.29149,0 0.52779,0.236299 0.52779,0.527789 z"
-         r="0.52778977"
-         cy="43.000011"
-         cx="63.5"
-         id="path4517-78-3"
-         style="fill:#000000;fill-opacity:1;stroke:none" />
-      <circle
-         transform="matrix(1.7500001,0,0,-1.7500001,-27.968899,59.718761)"
-         sodipodi:ry="0.52778977"
-         sodipodi:rx="0.52778977"
-         sodipodi:cy="43.000011"
-         sodipodi:cx="74.083336"
-         d="m 74.611126,43.000011 c 0,0.291491 -0.2363,0.52779 -0.52779,0.52779 -0.29149,0 -0.52779,-0.236299 -0.52779,-0.52779 0,-0.29149 0.2363,-0.527789 0.52779,-0.527789 0.29149,0 0.52779,0.236299 0.52779,0.527789 z"
-         r="0.52778977"
-         cy="43.000011"
-         cx="74.083336"
-         id="path4517-7-9-0"
-         style="fill:#000000;fill-opacity:1;stroke:none" />
-      <circle
-         transform="matrix(1.7500001,0,0,-1.7500001,-27.968899,59.718761)"
-         sodipodi:ry="0.52778977"
-         sodipodi:rx="0.52778977"
-         sodipodi:cy="43.000011"
-         sodipodi:cx="84.666664"
-         d="m 85.194454,43.000011 c 0,0.291491 -0.2363,0.52779 -0.52779,0.52779 -0.29149,0 -0.52779,-0.236299 -0.52779,-0.52779 0,-0.29149 0.2363,-0.527789 0.52779,-0.527789 0.29149,0 0.52779,0.236299 0.52779,0.527789 z"
-         r="0.52778977"
-         cy="43.000011"
-         cx="84.666664"
-         id="path4517-0-9"
-         style="fill:#000000;fill-opacity:1;stroke:none" />
-      <circle
-         transform="matrix(1.7500001,0,0,-1.7500001,-27.968899,59.718761)"
-         sodipodi:ry="0.52778977"
-         sodipodi:rx="0.52778977"
-         sodipodi:cy="43.000011"
-         sodipodi:cx="95.25"
-         d="m 95.77779,43.000011 c 0,0.291491 -0.2363,0.52779 -0.52779,0.52779 -0.29149,0 -0.52779,-0.236299 -0.52779,-0.52779 0,-0.29149 0.2363,-0.527789 0.52779,-0.527789 0.29149,0 0.52779,0.236299 0.52779,0.527789 z"
-         r="0.52778977"
-         cy="43.000011"
-         cx="95.25"
-         id="path4517-7-0-1"
-         style="fill:#000000;fill-opacity:1;stroke:none" />
-      <circle
-         transform="matrix(1.7500001,0,0,-1.7500001,-27.968899,59.718761)"
-         sodipodi:ry="0.52778977"
-         sodipodi:rx="0.52778977"
-         sodipodi:cy="43.000011"
-         sodipodi:cx="105.83334"
-         d="m 106.36113,43.000011 c 0,0.291491 -0.2363,0.52779 -0.52779,0.52779 -0.29149,0 -0.52779,-0.236299 -0.52779,-0.52779 0,-0.29149 0.2363,-0.527789 0.52779,-0.527789 0.29149,0 0.52779,0.236299 0.52779,0.527789 z"
-         r="0.52778977"
-         cy="43.000011"
-         cx="105.83334"
-         id="path4517-1-9"
-         style="fill:#000000;fill-opacity:1;stroke:none" />
-      <circle
-         transform="matrix(1.7500001,0,0,-1.7500001,-27.968899,59.718761)"
-         sodipodi:ry="0.52778977"
-         sodipodi:rx="0.52778977"
-         sodipodi:cy="43.000011"
-         sodipodi:cx="116.41665"
-         d="m 116.94444,43.000011 c 0,0.291491 -0.2363,0.52779 -0.52779,0.52779 -0.29149,0 -0.52779,-0.236299 -0.52779,-0.52779 0,-0.29149 0.2363,-0.527789 0.52779,-0.527789 0.29149,0 0.52779,0.236299 0.52779,0.527789 z"
-         r="0.52778977"
-         cy="43.000011"
-         cx="116.41665"
-         id="path4517-7-7-7"
-         style="fill:#000000;fill-opacity:1;stroke:none" />
-      <circle
-         transform="matrix(1.7500001,0,0,-1.7500001,-27.968899,59.718761)"
-         sodipodi:ry="0.52778977"
-         sodipodi:rx="0.52778977"
-         sodipodi:cy="53.583344"
-         sodipodi:cx="42.333332"
-         d="m 42.861122,53.583344 c 0,0.29149 -0.2363,0.527789 -0.52779,0.527789 -0.29149,0 -0.52779,-0.236299 -0.52779,-0.527789 0,-0.291491 0.2363,-0.52779 0.52779,-0.52779 0.29149,0 0.52779,0.236299 0.52779,0.52779 z"
-         r="0.52778977"
-         cy="53.583344"
-         cx="42.333332"
-         id="path4517-14"
-         style="fill:#000000;fill-opacity:1;stroke:none" />
-      <circle
-         transform="matrix(1.7500001,0,0,-1.7500001,-27.968899,59.718761)"
-         sodipodi:ry="0.52778977"
-         sodipodi:rx="0.52778977"
-         sodipodi:cy="53.583344"
-         sodipodi:cx="52.916668"
-         d="m 53.444458,53.583344 c 0,0.29149 -0.2363,0.527789 -0.52779,0.527789 -0.29149,0 -0.52779,-0.236299 -0.52779,-0.527789 0,-0.291491 0.2363,-0.52779 0.52779,-0.52779 0.29149,0 0.52779,0.236299 0.52779,0.52779 z"
-         r="0.52778977"
-         cy="53.583344"
-         cx="52.916668"
-         id="path4517-7-4"
-         style="fill:#000000;fill-opacity:1;stroke:none" />
-      <circle
-         transform="matrix(1.7500001,0,0,-1.7500001,-27.968899,59.718761)"
-         sodipodi:ry="0.52778977"
-         sodipodi:rx="0.52778977"
-         sodipodi:cy="53.583344"
-         sodipodi:cx="63.5"
-         d="m 64.02779,53.583344 c 0,0.29149 -0.2363,0.527789 -0.52779,0.527789 -0.29149,0 -0.52779,-0.236299 -0.52779,-0.527789 0,-0.291491 0.2363,-0.52779 0.52779,-0.52779 0.29149,0 0.52779,0.236299 0.52779,0.52779 z"
-         r="0.52778977"
-         cy="53.583344"
-         cx="63.5"
-         id="path4517-78-7"
-         style="fill:#000000;fill-opacity:1;stroke:none" />
-      <circle
-         transform="matrix(1.7500001,0,0,-1.7500001,-27.968899,59.718761)"
-         sodipodi:ry="0.52778977"
-         sodipodi:rx="0.52778977"
-         sodipodi:cy="53.583344"
-         sodipodi:cx="74.083336"
-         d="m 74.611126,53.583344 c 0,0.29149 -0.2363,0.527789 -0.52779,0.527789 -0.29149,0 -0.52779,-0.236299 -0.52779,-0.527789 0,-0.291491 0.2363,-0.52779 0.52779,-0.52779 0.29149,0 0.52779,0.236299 0.52779,0.52779 z"
-         r="0.52778977"
-         cy="53.583344"
-         cx="74.083336"
-         id="path4517-7-9-8"
-         style="fill:#000000;fill-opacity:1;stroke:none" />
-      <circle
-         transform="matrix(1.7500001,0,0,-1.7500001,-27.968899,59.718761)"
-         sodipodi:ry="0.52778977"
-         sodipodi:rx="0.52778977"
-         sodipodi:cy="53.583344"
-         sodipodi:cx="84.666664"
-         d="m 85.194454,53.583344 c 0,0.29149 -0.2363,0.527789 -0.52779,0.527789 -0.29149,0 -0.52779,-0.236299 -0.52779,-0.527789 0,-0.291491 0.2363,-0.52779 0.52779,-0.52779 0.29149,0 0.52779,0.236299 0.52779,0.52779 z"
-         r="0.52778977"
-         cy="53.583344"
-         cx="84.666664"
-         id="path4517-0-7"
-         style="fill:#000000;fill-opacity:1;stroke:none" />
-      <circle
-         transform="matrix(1.7500001,0,0,-1.7500001,-27.968899,59.718761)"
-         sodipodi:ry="0.52778977"
-         sodipodi:rx="0.52778977"
-         sodipodi:cy="53.583344"
-         sodipodi:cx="95.25"
-         d="m 95.77779,53.583344 c 0,0.29149 -0.2363,0.527789 -0.52779,0.527789 -0.29149,0 -0.52779,-0.236299 -0.52779,-0.527789 0,-0.291491 0.2363,-0.52779 0.52779,-0.52779 0.29149,0 0.52779,0.236299 0.52779,0.52779 z"
-         r="0.52778977"
-         cy="53.583344"
-         cx="95.25"
-         id="path4517-7-0-9"
-         style="fill:#000000;fill-opacity:1;stroke:none" />
-      <circle
-         transform="matrix(1.7500001,0,0,-1.7500001,-27.968899,59.718761)"
-         sodipodi:ry="0.52778977"
-         sodipodi:rx="0.52778977"
-         sodipodi:cy="53.583344"
-         sodipodi:cx="105.83334"
-         d="m 106.36113,53.583344 c 0,0.29149 -0.2363,0.527789 -0.52779,0.527789 -0.29149,0 -0.52779,-0.236299 -0.52779,-0.527789 0,-0.291491 0.2363,-0.52779 0.52779,-0.52779 0.29149,0 0.52779,0.236299 0.52779,0.52779 z"
-         r="0.52778977"
-         cy="53.583344"
-         cx="105.83334"
-         id="path4517-1-4"
-         style="fill:#000000;fill-opacity:1;stroke:none" />
-      <circle
-         transform="matrix(1.7500001,0,0,-1.7500001,-27.968899,59.718761)"
-         sodipodi:ry="0.52778977"
-         sodipodi:rx="0.52778977"
-         sodipodi:cy="53.583344"
-         sodipodi:cx="116.41665"
-         d="m 116.94444,53.583344 c 0,0.29149 -0.2363,0.527789 -0.52779,0.527789 -0.29149,0 -0.52779,-0.236299 -0.52779,-0.527789 0,-0.291491 0.2363,-0.52779 0.52779,-0.52779 0.29149,0 0.52779,0.236299 0.52779,0.52779 z"
-         r="0.52778977"
-         cy="53.583344"
-         cx="116.41665"
-         id="path4517-7-7-52"
-         style="fill:#000000;fill-opacity:1;stroke:none" />
-      <path
-         sodipodi:nodetypes="cc"
-         inkscape:connector-curvature="0"
-         id="path3054-3"
-         d="M 150.88949,7.2579058 V 21.607707"
-         style="fill:none;stroke:#808080;stroke-width:0.16467975;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
-      <path
-         inkscape:connector-curvature="0"
-         id="path3054"
-         d="m 138.98324,9.3395719 h 14.55208"
-         style="fill:none;stroke:#808080;stroke-width:0.13229167;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
-      <rect
-         transform="scale(1,-1)"
-         y="-9.6041584"
-         x="58.020679"
-         height="37.041668"
-         width="37.041668"
-         id="rect1609"
-         style="fill:none;stroke:#ff0000;stroke-width:0.5291667;stroke-linecap:square;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:2.11666671, 2.11666671;stroke-dashoffset:0" />
-      <rect
-         transform="scale(1,-1)"
-         y="-28.124992"
-         x="132.10402"
-         height="37.041668"
-         width="37.041668"
-         id="rect1609-6"
-         style="fill:none;stroke:#ff0000;stroke-width:0.5291667;stroke-linecap:square;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:2.11666671, 2.11666671;stroke-dashoffset:0" />
-      <path
-         d="m 142.6419,12.250012 q 0,0.417545 -0.27906,0.690397 -0.27698,0.272852 -0.70073,0.272852 -0.1633,0 -0.3452,-0.04547 -0.1819,-0.04547 -0.31212,-0.132291 v 0.983919 h -0.38861 v -3.079917 q 0,-0.463021 0.26045,-0.725537 0.26252,-0.2625172 0.72347,-0.2625172 0.18603,0 0.339,0.04548 0.15503,0.04341 0.27698,0.1384922 0.11783,0.08888 0.1881,0.231511 0.0703,0.142627 0.0703,0.330729 0,0.262516 -0.14469,0.458887 -0.14262,0.194303 -0.40514,0.270784 v 0.03514 q 0.32866,0.05374 0.52296,0.26045 0.19431,0.204639 0.19431,0.5271 z m -0.40101,-0.01034 q 0,-0.183969 -0.0724,-0.297657 -0.0703,-0.115755 -0.19017,-0.179834 -0.12196,-0.06615 -0.27285,-0.08888 -0.1509,-0.02274 -0.30179,-0.02274 h -0.0744 v -0.33073 h 0.0744 q 0.13642,0 0.27078,-0.02894 0.13436,-0.03101 0.21497,-0.09302 0.0951,-0.07028 0.14056,-0.171566 0.0475,-0.101286 0.0475,-0.276986 0,-0.23151 -0.14262,-0.351399 -0.14263,-0.11989 -0.36794,-0.11989 -0.1509,0 -0.25838,0.05581 -0.10749,0.05374 -0.1757,0.144694 -0.0661,0.09095 -0.0971,0.212907 -0.031,0.119889 -0.031,0.248047 v 1.781804 q 0.13642,0.07855 0.29145,0.111621 0.15503,0.03101 0.30386,0.03101 0.30799,0 0.47336,-0.161231 0.16743,-0.163297 0.16743,-0.46302 z"
-         style="font-size:4.23333311px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:1.25;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal'"
-         id="path1092"
-         inkscape:connector-curvature="0" />
-      <path
-         sodipodi:nodetypes="cc"
-         style="fill:#000000;stroke:#000000;stroke-width:0.26458335;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-end:url(#marker2415)"
-         d="m 138.98319,21.245824 0,-11.9062496"
-         id="path2429"
-         inkscape:connector-curvature="0" />
-      <g
-         id="g3740">
-        <text
-           xml:space="preserve"
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none"
-           x="138.71861"
-           y="6.2589712"
-           id="text5070-2-1"><tspan
-             sodipodi:role="line"
-             id="tspan5068-0-6"
-             x="138.71861"
-             y="6.2589712"
-             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:3.52777743px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f40000;fill-opacity:1"><tspan
-               style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:3.52777743px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#000000"
-               id="tspan7821"> i0j1</tspan></tspan></text>
-        <text
-           xml:space="preserve"
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none"
-           x="157.23944"
-           y="6.2589712"
-           id="text5070-2-1-7"><tspan
-             y="6.2589712"
-             x="157.23944"
-             id="tspan4060"
-             sodipodi:role="line"
-             style="font-size:3.52777696px;line-height:0"> i1j1</tspan></text>
-        <text
-           xml:space="preserve"
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none"
-           x="138.71861"
-           y="24.779802"
-           id="text5070-2-1-0"><tspan
-             y="24.779802"
-             x="138.71861"
-             id="tspan4064"
-             sodipodi:role="line"
-             style="font-size:3.52777696px;line-height:0"> i0j0</tspan></text>
-        <text
-           xml:space="preserve"
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none"
-           x="157.23944"
-           y="24.779802"
-           id="text5070-2-1-2"><tspan
-             y="24.779802"
-             x="157.23944"
-             id="tspan4054"
-             sodipodi:role="line"
-             style="font-size:3.52777696px;line-height:0"> i1j0</tspan><tspan
-             y="26.980595"
-             x="157.23944"
-             id="tspan4056"
-             sodipodi:role="line"
-             style="font-size:3.52777696px;line-height:0"> </tspan></text>
-      </g>
-      <g
-         id="g3768">
-        <circle
-           style="fill:#ff0000;fill-opacity:1;stroke:none"
-           id="path4517-0-8"
-           cx="150.62486"
-           cy="-22.145849"
-           r="0.92363214"
-           d="m 151.54849,-22.145849 c 0,0.510108 -0.41352,0.923632 -0.92363,0.923632 -0.51011,0 -0.92363,-0.413524 -0.92363,-0.923632 0,-0.510108 0.41352,-0.923632 0.92363,-0.923632 0.51011,0 0.92363,0.413524 0.92363,0.923632 z"
-           sodipodi:cx="150.62486"
-           sodipodi:cy="-22.145849"
-           sodipodi:rx="0.92363214"
-           sodipodi:ry="0.92363214"
-           transform="matrix(1,0,0,-1,0,-12.541691)" />
-        <text
-           xml:space="preserve"
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none"
-           x="152.21477"
-           y="10.830611"
-           id="text5070-2"><tspan
-             sodipodi:role="line"
-             id="tspan5068-0"
-             x="152.21477"
-             y="10.830611"
-             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:3.52777743px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f40000;fill-opacity:1">(u,v)</tspan></text>
-      </g>
-      <g
-         id="g3754">
-        <text
-           xml:space="preserve"
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none"
-           x="64.635269"
-           y="-16.495201"
-           id="text5070-2-1-06"><tspan
-             y="-16.495201"
-             x="64.635269"
-             id="tspan4046"
-             sodipodi:role="line"
-             style="font-size:3.52777696px;line-height:0.34999999"> i0j1'</tspan></text>
-        <text
-           xml:space="preserve"
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none"
-           x="83.156105"
-           y="-16.495201"
-           id="text5070-2-1-25"><tspan
-             y="-16.495201"
-             x="83.156105"
-             id="tspan4048"
-             sodipodi:role="line"
-             style="font-size:3.52777696px;line-height:0.34999999"> i1j1'</tspan></text>
-        <text
-           xml:space="preserve"
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none"
-           x="64.635269"
-           y="2.0256376"
-           id="text5070-2-1-75"><tspan
-             y="2.0256376"
-             x="64.635269"
-             id="tspan4044"
-             sodipodi:role="line"
-             style="font-size:3.52777696px;line-height:0.34999999"> i0j0'</tspan></text>
-        <text
-           xml:space="preserve"
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none"
-           x="83.156105"
-           y="2.0256376"
-           id="text5070-2-1-3"><tspan
-             y="2.0256376"
-             x="83.156105"
-             id="tspan4050"
-             sodipodi:role="line"
-             style="font-size:3.52777696px;line-height:0.34999999"> i1j0'</tspan></text>
-      </g>
-      <text
-         id="text121-09"
-         y="-35.953781"
-         x="17.576641"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none"
-         xml:space="preserve"><tspan
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;writing-mode:lr-tb;text-anchor:start"
-           y="-35.953781"
-           x="17.576641"
-           id="tspan119-67"
-           sodipodi:role="line">3.0</tspan></text>
-      <text
-         id="text121-09-7"
-         y="25.429537"
-         x="17.514629"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none"
-         xml:space="preserve"><tspan
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;writing-mode:lr-tb;text-anchor:start"
-           y="25.429537"
-           x="17.514629"
-           id="tspan119-67-1"
-           sodipodi:role="line">0.0</tspan></text>
-      <path
-         style="fill:none;stroke:#000000;stroke-width:0.26458335;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-end:url(#marker1483)"
-         d="M 20.993481,21.52766 V -4.4080825 m 1e-6,-3.990115 V -34.333941"
-         id="path1473"
-         inkscape:connector-curvature="0" />
-      <text
-         id="text121-3-7-8"
-         y="-5.1587696"
-         x="20.479824"
-         style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none"
-         xml:space="preserve"><tspan
-           style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';text-align:center;writing-mode:lr-tb;text-anchor:middle"
-           y="-5.1587696"
-           x="20.479824"
-           id="tspan119-1-8-3"
-           sodipodi:role="line">v</tspan></text>
-      <text
-         xml:space="preserve"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none"
-         x="6.9933071"
-         y="-35.953781"
-         id="text1601-4"><tspan
-           sodipodi:role="line"
-           id="tspan1599-1"
-           x="6.9933071"
-           y="-35.953781"
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;writing-mode:lr-tb;text-anchor:start">1.0</tspan></text>
-      <text
-         xml:space="preserve"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none"
-         x="6.9312954"
-         y="25.429537"
-         id="text1605-6"><tspan
-           sodipodi:role="line"
-           id="tspan1603-7"
-           x="6.9312954"
-           y="25.429537"
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;writing-mode:lr-tb;text-anchor:start">0.0</tspan></text>
-      <path
-         inkscape:connector-curvature="0"
-         id="path1607-6"
-         d="M 10.381221,21.52766 V -4.4080825 m 10e-7,-3.990115 V -34.333941"
-         style="fill:none;stroke:#000000;stroke-width:0.26458335;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-end:url(#marker1483-7)" />
-      <text
-         xml:space="preserve"
-         style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none"
-         x="9.8964901"
-         y="-5.1587696"
-         id="text1611-4"><tspan
-           sodipodi:role="line"
-           id="tspan1609-3"
-           x="9.8964901"
-           y="-5.1587696"
-           style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';text-align:center;writing-mode:lr-tb;text-anchor:middle">t</tspan></text>
-    </g>
-  </g>
-</svg>
diff --git a/registry/vulkan/images/vulkantexture0-ll.svg b/registry/vulkan/images/vulkantexture0-ll.svg
deleted file mode 100644
index 765293d..0000000
--- a/registry/vulkan/images/vulkantexture0-ll.svg
+++ /dev/null
@@ -1,1215 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Created with Inkscape (http://www.inkscape.org/) -->
-
-<svg
-   xmlns:dc="http://purl.org/dc/elements/1.1/"
-   xmlns:cc="http://creativecommons.org/ns#"
-   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
-   xmlns:svg="http://www.w3.org/2000/svg"
-   xmlns="http://www.w3.org/2000/svg"
-   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
-   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
-   width="706.10547"
-   height="384.11328"
-   viewBox="0 0 186.82375 101.62997"
-   version="1.1"
-   id="svg8"
-   inkscape:version="0.92.4 (5da689c313, 2019-01-14)"
-   sodipodi:docname="vulkantexture0-ll.svg">
-  <defs
-     id="defs2">
-    <marker
-       inkscape:stockid="Arrow1Mend"
-       orient="auto"
-       refY="0.0"
-       refX="0.0"
-       id="marker2415"
-       style="overflow:visible;"
-       inkscape:isstock="true">
-      <path
-         id="path2413"
-         d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
-         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1"
-         transform="scale(0.4) rotate(180) translate(10,0)" />
-    </marker>
-    <marker
-       inkscape:isstock="true"
-       style="overflow:visible;"
-       id="marker1517"
-       refX="0.0"
-       refY="0.0"
-       orient="auto"
-       inkscape:stockid="Arrow1Mend"
-       inkscape:collect="always">
-      <path
-         transform="scale(0.4) rotate(180) translate(10,0)"
-         style="fill-rule:evenodd;stroke:#ff0000;stroke-width:1pt;stroke-opacity:1;fill:#ff0000;fill-opacity:1"
-         d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
-         id="path1515" />
-    </marker>
-    <marker
-       inkscape:stockid="Arrow1Mend"
-       orient="auto"
-       refY="0.0"
-       refX="0.0"
-       id="Arrow1Mend"
-       style="overflow:visible;"
-       inkscape:isstock="true"
-       inkscape:collect="always">
-      <path
-         id="path1132"
-         d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
-         style="fill-rule:evenodd;stroke:#ff0000;stroke-width:1pt;stroke-opacity:1;fill:#ff0000;fill-opacity:1"
-         transform="scale(0.4) rotate(180) translate(10,0)" />
-    </marker>
-    <marker
-       inkscape:stockid="Arrow2Lend"
-       orient="auto"
-       refY="0.0"
-       refX="0.0"
-       id="Arrow2Lend"
-       style="overflow:visible;"
-       inkscape:isstock="true">
-      <path
-         id="path1144"
-         style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round;stroke:#ff0000;stroke-opacity:1;fill:#ff0000;fill-opacity:1"
-         d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z "
-         transform="scale(1.1) rotate(180) translate(1,0)" />
-    </marker>
-    <marker
-       inkscape:isstock="true"
-       style="overflow:visible"
-       id="marker1073"
-       refX="0"
-       refY="0"
-       orient="auto"
-       inkscape:stockid="Arrow1Lend">
-      <path
-         transform="matrix(-0.8,0,0,-0.8,-10,0)"
-         style="fill:#ff0000;fill-opacity:1;fill-rule:evenodd;stroke:#ff0000;stroke-width:1.00000003pt;stroke-opacity:1"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         id="path1071"
-         inkscape:connector-curvature="0" />
-    </marker>
-    <marker
-       inkscape:isstock="true"
-       style="overflow:visible"
-       id="marker1483"
-       refX="0"
-       refY="0"
-       orient="auto"
-       inkscape:stockid="Arrow1Lend"
-       inkscape:collect="always">
-      <path
-         transform="matrix(-0.8,0,0,-0.8,-10,0)"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         id="path1481"
-         inkscape:connector-curvature="0" />
-    </marker>
-    <marker
-       inkscape:stockid="Arrow1Lend"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="Arrow1Lend"
-       style="overflow:visible"
-       inkscape:isstock="true"
-       inkscape:collect="always">
-      <path
-         id="path977"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         transform="matrix(-0.8,0,0,-0.8,-10,0)"
-         inkscape:connector-curvature="0" />
-    </marker>
-    <marker
-       inkscape:stockid="Arrow1Lend"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="Arrow1Lend-0"
-       style="overflow:visible"
-       inkscape:isstock="true">
-      <path
-         inkscape:connector-curvature="0"
-         id="path977-6"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         transform="matrix(-0.8,0,0,-0.8,-10,0)" />
-    </marker>
-    <marker
-       inkscape:isstock="true"
-       style="overflow:visible"
-       id="marker1483-7"
-       refX="0"
-       refY="0"
-       orient="auto"
-       inkscape:stockid="Arrow1Lend">
-      <path
-         inkscape:connector-curvature="0"
-         transform="matrix(-0.8,0,0,-0.8,-10,0)"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         id="path1481-0" />
-    </marker>
-    <marker
-       inkscape:stockid="Arrow1Mend"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="marker2415-4"
-       style="overflow:visible"
-       inkscape:isstock="true">
-      <path
-         inkscape:connector-curvature="0"
-         id="path2413-3"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         transform="matrix(-0.4,0,0,-0.4,-4,0)" />
-    </marker>
-  </defs>
-  <sodipodi:namedview
-     id="base"
-     pagecolor="#ffffff"
-     bordercolor="#666666"
-     borderopacity="1.0"
-     inkscape:pageopacity="0.0"
-     inkscape:pageshadow="2"
-     inkscape:zoom="2"
-     inkscape:cx="409.64232"
-     inkscape:cy="185.01098"
-     inkscape:document-units="px"
-     inkscape:current-layer="g3740"
-     showgrid="true"
-     inkscape:snap-object-midpoints="true"
-     inkscape:snap-text-baseline="true"
-     inkscape:window-width="1920"
-     inkscape:window-height="1057"
-     inkscape:window-x="1928"
-     inkscape:window-y="31"
-     inkscape:window-maximized="0"
-     fit-margin-top="1"
-     fit-margin-right="1"
-     fit-margin-bottom="1"
-     fit-margin-left="1"
-     units="px"
-     inkscape:snap-center="false"
-     inkscape:snap-global="false">
-    <inkscape:grid
-       type="xygrid"
-       id="grid12"
-       originx="0.79995428"
-       originy="-29.882412"
-       dotted="false" />
-  </sodipodi:namedview>
-  <metadata
-     id="metadata5">
-    <rdf:RDF>
-      <cc:Work
-         rdf:about="">
-        <dc:format>image/svg+xml</dc:format>
-        <dc:type
-           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
-        <dc:title />
-      </cc:Work>
-    </rdf:RDF>
-  </metadata>
-  <g
-     inkscape:label="Layer 1"
-     inkscape:groupmode="layer"
-     id="layer1"
-     transform="translate(-6.9498988,47.8249)">
-    <g
-       id="g3888">
-      <g
-         id="g3699">
-        <g
-           id="g3675">
-          <text
-             id="text121-6"
-             y="36.062489"
-             x="44.791519"
-             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none"
-             xml:space="preserve"><tspan
-               style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;writing-mode:lr-tb;text-anchor:start"
-               y="36.062489"
-               x="44.791519"
-               id="tspan119-11"
-               sodipodi:role="line">0</tspan></text>
-          <text
-             id="text121-30"
-             y="36.062489"
-             x="63.312355"
-             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none"
-             xml:space="preserve"><tspan
-               style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;writing-mode:lr-tb;text-anchor:start"
-               y="36.062489"
-               x="63.312355"
-               id="tspan119-47"
-               sodipodi:role="line">1</tspan></text>
-          <text
-             id="text121-1"
-             y="36.062489"
-             x="81.833191"
-             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none"
-             xml:space="preserve"><tspan
-               style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;writing-mode:lr-tb;text-anchor:start"
-               y="36.062489"
-               x="81.833191"
-               id="tspan119-9"
-               sodipodi:role="line">2</tspan></text>
-          <text
-             id="text121-8"
-             y="36.062489"
-             x="100.35403"
-             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none"
-             xml:space="preserve"><tspan
-               style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;writing-mode:lr-tb;text-anchor:start"
-               y="36.062489"
-               x="100.35403"
-               id="tspan119-7"
-               sodipodi:role="line">3</tspan></text>
-          <text
-             id="text121-4"
-             y="36.062489"
-             x="118.87486"
-             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none"
-             xml:space="preserve"><tspan
-               style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;writing-mode:lr-tb;text-anchor:start"
-               y="36.062489"
-               x="118.87486"
-               id="tspan119-0"
-               sodipodi:role="line">4</tspan></text>
-          <text
-             id="text121-7"
-             y="36.062489"
-             x="137.39569"
-             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none"
-             xml:space="preserve"><tspan
-               style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;writing-mode:lr-tb;text-anchor:start"
-               y="36.062489"
-               x="137.39569"
-               id="tspan119-8"
-               sodipodi:role="line">5</tspan></text>
-          <text
-             id="text121-79"
-             y="36.062489"
-             x="155.91653"
-             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none"
-             xml:space="preserve"><tspan
-               style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;writing-mode:lr-tb;text-anchor:start"
-               y="36.062489"
-               x="155.91653"
-               id="tspan119-16"
-               sodipodi:role="line">6</tspan></text>
-          <text
-             id="text121-31"
-             y="36.062489"
-             x="174.43736"
-             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none"
-             xml:space="preserve"><tspan
-               style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;writing-mode:lr-tb;text-anchor:start"
-               y="36.062489"
-               x="174.43736"
-               id="tspan119-09"
-               sodipodi:role="line">7</tspan></text>
-          <text
-             id="text121-3-7-3"
-             y="37.611748"
-             x="110.83607"
-             style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none"
-             xml:space="preserve"><tspan
-               style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';text-align:center;writing-mode:lr-tb;text-anchor:middle"
-               y="37.611748"
-               x="110.83607"
-               id="tspan119-1-8-7"
-               sodipodi:role="line">i</tspan></text>
-        </g>
-        <g
-           id="g3666">
-          <text
-             id="text121-09-74"
-             y="45.537884"
-             x="28.097963"
-             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none"
-             xml:space="preserve"><tspan
-               style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;writing-mode:lr-tb;text-anchor:start"
-               y="45.537884"
-               x="28.097963"
-               id="tspan119-67-18"
-               sodipodi:role="line">0.0</tspan></text>
-          <text
-             id="text121-09-74-5"
-             y="45.538918"
-             x="186.86346"
-             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none"
-             xml:space="preserve"><tspan
-               style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;writing-mode:lr-tb;text-anchor:start"
-               y="45.538918"
-               x="186.86346"
-               id="tspan119-67-18-0"
-               sodipodi:role="line">8.0</tspan></text>
-          <path
-             inkscape:connector-curvature="0"
-             id="path972"
-             d="m 36.854018,43.999991 h 71.437502 m 5.29167,2e-6 h 71.4375"
-             style="fill:none;stroke:#000000;stroke-width:0.26458335px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow1Lend)" />
-          <text
-             id="text121-3-7-3-3"
-             y="45.122406"
-             x="110.86915"
-             style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none"
-             xml:space="preserve"><tspan
-               style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';text-align:center;writing-mode:lr-tb;text-anchor:middle"
-               y="45.122406"
-               x="110.86915"
-               id="tspan119-1-8-7-2"
-               sodipodi:role="line">u</tspan></text>
-        </g>
-        <g
-           id="g3657">
-          <text
-             id="text121-09-74-7"
-             y="53.47538"
-             x="28.097961"
-             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none"
-             xml:space="preserve"><tspan
-               style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;writing-mode:lr-tb;text-anchor:start"
-               y="53.47538"
-               x="28.097961"
-               id="tspan119-67-18-1"
-               sodipodi:role="line">0.0</tspan></text>
-          <text
-             id="text121-09-74-5-4"
-             y="53.476414"
-             x="186.86346"
-             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none"
-             xml:space="preserve"><tspan
-               style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;writing-mode:lr-tb;text-anchor:start"
-               y="53.476414"
-               x="186.86346"
-               id="tspan119-67-18-0-9"
-               sodipodi:role="line">1.0</tspan></text>
-          <path
-             inkscape:connector-curvature="0"
-             id="path972-8"
-             d="m 36.854015,51.937489 h 71.437505 m 5.29167,2e-6 h 71.4375"
-             style="fill:none;stroke:#000000;stroke-width:0.26458335px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow1Lend-0)" />
-          <text
-             id="text121-3-7-3-3-5"
-             y="53.059902"
-             x="110.86914"
-             style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none"
-             xml:space="preserve"><tspan
-               style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';text-align:center;writing-mode:lr-tb;text-anchor:middle"
-               y="53.059902"
-               x="110.86914"
-               id="tspan119-1-8-7-2-2"
-               sodipodi:role="line">s</tspan></text>
-        </g>
-      </g>
-      <g
-         id="g3628">
-        <g
-           id="g3616">
-          <text
-             id="text121"
-             y="-32.729183"
-             x="31.562353"
-             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none"
-             xml:space="preserve"><tspan
-               style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;writing-mode:lr-tb;text-anchor:start"
-               y="-32.729183"
-               x="31.562353"
-               id="tspan119"
-               sodipodi:role="line">3</tspan></text>
-          <text
-             id="text121-3"
-             y="-14.208344"
-             x="31.562353"
-             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none"
-             xml:space="preserve"><tspan
-               style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;writing-mode:lr-tb;text-anchor:start"
-               y="-14.208344"
-               x="31.562353"
-               id="tspan119-1"
-               sodipodi:role="line">2</tspan></text>
-          <text
-             id="text121-0"
-             y="4.3124895"
-             x="31.562353"
-             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none"
-             xml:space="preserve"><tspan
-               style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;writing-mode:lr-tb;text-anchor:start"
-               y="4.3124895"
-               x="31.562353"
-               id="tspan119-4"
-               sodipodi:role="line">1</tspan></text>
-          <text
-             id="text121-33"
-             y="22.833323"
-             x="31.562353"
-             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none"
-             xml:space="preserve"><tspan
-               style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;writing-mode:lr-tb;text-anchor:start"
-               y="22.833323"
-               x="31.562353"
-               id="tspan119-6"
-               sodipodi:role="line">0</tspan></text>
-          <text
-             id="text121-3-7"
-             y="-5.1587672"
-             x="31.790766"
-             style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none"
-             xml:space="preserve"><tspan
-               style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';text-align:center;writing-mode:lr-tb;text-anchor:middle"
-               y="-5.1587672"
-               x="31.790766"
-               id="tspan119-1-8"
-               sodipodi:role="line">j</tspan></text>
-        </g>
-        <g
-           id="g3607">
-          <text
-             id="text121-09"
-             y="-44.420456"
-             x="17.576641"
-             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none"
-             xml:space="preserve"><tspan
-               style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;writing-mode:lr-tb;text-anchor:start"
-               y="-44.420456"
-               x="17.576641"
-               id="tspan119-67"
-               sodipodi:role="line">4.0</tspan></text>
-          <text
-             id="text121-09-7"
-             y="34.954548"
-             x="17.514629"
-             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none"
-             xml:space="preserve"><tspan
-               style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;writing-mode:lr-tb;text-anchor:start"
-               y="34.954548"
-               x="17.514629"
-               id="tspan119-67-1"
-               sodipodi:role="line">0.0</tspan></text>
-          <path
-             style="fill:none;stroke:#000000;stroke-width:0.26458335px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker1483)"
-             d="M 20.979018,30.770823 V -3.6250121 m 1e-6,-5.2916661 V -43.312513"
-             id="path1473"
-             inkscape:connector-curvature="0" />
-          <text
-             id="text121-3-7-8"
-             y="-5.1587677"
-             x="20.479824"
-             style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none"
-             xml:space="preserve"><tspan
-               style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';text-align:center;writing-mode:lr-tb;text-anchor:middle"
-               y="-5.1587677"
-               x="20.479824"
-               id="tspan119-1-8-3"
-               sodipodi:role="line">v</tspan></text>
-        </g>
-        <g
-           id="g3598">
-          <text
-             xml:space="preserve"
-             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none"
-             x="6.9933071"
-             y="-44.420456"
-             id="text1601-4"><tspan
-               sodipodi:role="line"
-               id="tspan1599-1"
-               x="6.9933071"
-               y="-44.420456"
-               style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;writing-mode:lr-tb;text-anchor:start">1.0</tspan></text>
-          <text
-             xml:space="preserve"
-             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none"
-             x="6.9312954"
-             y="34.954548"
-             id="text1605-6"><tspan
-               sodipodi:role="line"
-               id="tspan1603-7"
-               x="6.9312954"
-               y="34.954548"
-               style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;writing-mode:lr-tb;text-anchor:start">0.0</tspan></text>
-          <path
-             inkscape:connector-curvature="0"
-             id="path1607-6"
-             d="M 10.395684,30.770823 V -3.6250121 m 1e-6,-5.2916661 V -43.312513"
-             style="fill:none;stroke:#000000;stroke-width:0.26458335px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker1483-7)" />
-          <text
-             xml:space="preserve"
-             style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none"
-             x="9.8964901"
-             y="-5.1587677"
-             id="text1611-4"><tspan
-               sodipodi:role="line"
-               id="tspan1609-3"
-               x="9.8964901"
-               y="-5.1587677"
-               style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';text-align:center;writing-mode:lr-tb;text-anchor:middle">t</tspan></text>
-        </g>
-      </g>
-      <g
-         id="g3695">
-        <path
-           inkscape:connector-curvature="0"
-           id="path2429-6"
-           d="m 129.43215,30.887503 11.90625,0"
-           style="fill:#000000;stroke:#000000;stroke-width:0.26458335;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-end:url(#marker2415-4)"
-           sodipodi:nodetypes="cc" />
-        <path
-           inkscape:connector-curvature="0"
-           id="path1089"
-           style="font-size:4.23333311px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:1.25;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal'"
-           d="m 145.23168,32.17424 h -0.38861 v -0.241846 q -0.16743,0.144694 -0.34933,0.22531 -0.1819,0.08062 -0.39481,0.08062 -0.41341,0 -0.65732,-0.318327 -0.24185,-0.318327 -0.24185,-0.882633 0,-0.293522 0.0827,-0.522966 0.0847,-0.229443 0.22738,-0.390674 0.14056,-0.157096 0.3266,-0.239778 0.1881,-0.08268 0.3886,-0.08268 0.1819,0 0.32246,0.04548 0.14056,0.04547 0.29559,0.12609 v -0.107487 h 0.38861 z m -0.38861,-0.568441 v -1.314648 q -0.15709,-0.07028 -0.28112,-0.101286 -0.12402,-0.03307 -0.27078,-0.03307 -0.3266,0 -0.5085,0.227377 -0.1819,0.227376 -0.1819,0.644921 0,0.411345 0.14056,0.626319 0.14056,0.212907 0.45062,0.212907 0.16537,0 0.33486,-0.07235 0.1695,-0.07441 0.31626,-0.19017 z" />
-      </g>
-      <g
-         id="g3800">
-        <g
-           id="g3789">
-          <path
-             sodipodi:nodetypes="cc"
-             inkscape:connector-curvature="0"
-             id="path1842"
-             d="M 138.6988,21.49061 65.777117,3.8028339"
-             style="fill:none;stroke:#ff0000;stroke-width:0.30418205px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker1517)" />
-          <g
-             transform="matrix(1,0,0,-1,3.1750002,24.485338)"
-             id="g3589">
-            <path
-               inkscape:connector-curvature="0"
-               id="path1095"
-               style="font-size:2.11666656px;font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:1.25;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#f40000;fill-opacity:1;stroke:none;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic'"
-               d="m 100.72287,12.249991 h -0.34236 q -0.14534,0.235774 -0.239,0.510305 -0.0937,0.274531 -0.0937,0.573286 0,0.306828 0.0743,0.591048 0.0743,0.285836 0.21801,0.561981 0.13726,0.261613 0.32782,0.495772 0.19217,0.234158 0.4231,0.445708 h 0.36496 v -0.01616 q -0.18409,-0.135656 -0.38434,-0.34397 -0.19863,-0.208322 -0.3585,-0.460244 -0.16311,-0.256767 -0.26646,-0.566827 -0.10174,-0.308444 -0.10174,-0.6508 0,-0.350429 0.10174,-0.637879 0.10173,-0.289066 0.27614,-0.486082 z" />
-            <path
-               inkscape:connector-curvature="0"
-               id="path1097"
-               style="font-size:2.11666656px;font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:1.25;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#f40000;fill-opacity:1;stroke:none;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic'"
-               d="m 103.46979,12.915325 h -2.24146 l 1.46309,2.404569 h 0.42633 z m -0.35366,0.259997 -0.2713,1.863582 -1.13042,-1.863582 z" />
-            <path
-               inkscape:connector-curvature="0"
-               id="path1099"
-               style="font-size:2.11666656px;font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:1.25;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#f40000;fill-opacity:1;stroke:none;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic'"
-               d="m 104.70195,15.336043 -0.0727,-0.314903 h -0.34236 l 0.0727,0.314903 z m -0.16148,-0.616888 -0.41665,-1.80383 h -0.30359 l 0.41664,1.80383 z" />
-            <path
-               inkscape:connector-curvature="0"
-               id="path1101"
-               style="font-size:2.11666656px;font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:1.25;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#f40000;fill-opacity:1;stroke:none;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic'"
-               d="m 105.47872,13.375569 -0.70087,-1.057753 h -0.23577 l 0.52322,1.057753 z" />
-            <path
-               inkscape:connector-curvature="0"
-               id="path1103"
-               style="font-size:2.11666656px;font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:1.25;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#f40000;fill-opacity:1;stroke:none;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic'"
-               d="m 107.98502,12.915325 h -2.24146 l 1.46309,2.404569 h 0.42633 z m -0.35366,0.259997 -0.2713,1.863582 -1.13042,-1.863582 z" />
-            <path
-               inkscape:connector-curvature="0"
-               id="path1105"
-               style="font-size:2.11666656px;font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:1.25;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#f40000;fill-opacity:1;stroke:none;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic'"
-               d="m 109.38352,15.02114 h -0.34559 l 0.0727,0.314903 h 0.34559 z m -0.51677,-2.149416 q -0.0727,-0.313289 -0.25838,-0.476392 -0.1841,-0.163105 -0.45863,-0.163105 -0.0646,0 -0.16956,0.01297 -0.10497,0.01297 -0.17279,0.0323 l 0.063,0.276146 h 0.0161 q 0.0468,-0.021 0.11142,-0.04038 0.063,-0.02098 0.14696,-0.02098 0.11304,0 0.18894,0.03553 0.0775,0.03391 0.12596,0.10336 0.0468,0.06783 0.0775,0.169562 0.0307,0.100125 0.0549,0.209936 l 0.33751,1.464705 h -0.37627 l 0.0565,0.243847 h 0.6831 z" />
-            <path
-               inkscape:connector-curvature="0"
-               id="path1107"
-               style="font-size:2.11666656px;font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:1.25;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#f40000;fill-opacity:1;stroke:none;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic'"
-               d="m 110.65766,14.344502 q 0,-0.305214 -0.0759,-0.597509 -0.0759,-0.29068 -0.2164,-0.555522 -0.1405,-0.264841 -0.33267,-0.500614 -0.19217,-0.237389 -0.41825,-0.440866 h -0.36497 v 0.01616 q 0.18572,0.138875 0.38273,0.342357 0.19863,0.201861 0.36012,0.461857 0.1841,0.297139 0.27615,0.595894 0.092,0.298755 0.092,0.621731 0,0.343972 -0.10173,0.633038 -0.10012,0.29068 -0.27614,0.490925 v 0.01616 h 0.34235 q 0.14372,-0.234158 0.23739,-0.508689 0.0953,-0.272916 0.0953,-0.5749 z" />
-          </g>
-        </g>
-        <circle
-           style="fill:#000000;fill-opacity:1;stroke:none"
-           id="path4517"
-           cx="42.333332"
-           cy="21.833345"
-           r="0.52778977"
-           d="m 42.861122,21.833345 c 0,0.291491 -0.2363,0.52779 -0.52779,0.52779 -0.29149,0 -0.52779,-0.236299 -0.52779,-0.52779 0,-0.29149 0.2363,-0.527789 0.52779,-0.527789 0.29149,0 0.52779,0.236299 0.52779,0.527789 z"
-           sodipodi:cx="42.333332"
-           sodipodi:cy="21.833345"
-           sodipodi:rx="0.52778977"
-           sodipodi:ry="0.52778977"
-           transform="matrix(1.7500001,0,0,-1.7500001,-27.968899,59.718761)" />
-        <circle
-           style="fill:#000000;fill-opacity:1;stroke:none"
-           id="path4517-7"
-           cx="52.916668"
-           cy="21.833345"
-           r="0.52778977"
-           d="m 53.444458,21.833345 c 0,0.291491 -0.2363,0.52779 -0.52779,0.52779 -0.29149,0 -0.52779,-0.236299 -0.52779,-0.52779 0,-0.29149 0.2363,-0.527789 0.52779,-0.527789 0.29149,0 0.52779,0.236299 0.52779,0.527789 z"
-           sodipodi:cx="52.916668"
-           sodipodi:cy="21.833345"
-           sodipodi:rx="0.52778977"
-           sodipodi:ry="0.52778977"
-           transform="matrix(1.7500001,0,0,-1.7500001,-27.968899,59.718761)" />
-        <circle
-           style="fill:#000000;fill-opacity:1;stroke:none"
-           id="path4517-78"
-           cx="63.5"
-           cy="21.833345"
-           r="0.52778977"
-           d="m 64.02779,21.833345 c 0,0.291491 -0.2363,0.52779 -0.52779,0.52779 -0.29149,0 -0.52779,-0.236299 -0.52779,-0.52779 0,-0.29149 0.2363,-0.527789 0.52779,-0.527789 0.29149,0 0.52779,0.236299 0.52779,0.527789 z"
-           sodipodi:cx="63.5"
-           sodipodi:cy="21.833345"
-           sodipodi:rx="0.52778977"
-           sodipodi:ry="0.52778977"
-           transform="matrix(1.7500001,0,0,-1.7500001,-27.968899,59.718761)" />
-        <circle
-           style="fill:#000000;fill-opacity:1;stroke:none"
-           id="path4517-7-9"
-           cx="74.083336"
-           cy="21.833345"
-           r="0.52778977"
-           d="m 74.611126,21.833345 c 0,0.291491 -0.2363,0.52779 -0.52779,0.52779 -0.29149,0 -0.52779,-0.236299 -0.52779,-0.52779 0,-0.29149 0.2363,-0.527789 0.52779,-0.527789 0.29149,0 0.52779,0.236299 0.52779,0.527789 z"
-           sodipodi:cx="74.083336"
-           sodipodi:cy="21.833345"
-           sodipodi:rx="0.52778977"
-           sodipodi:ry="0.52778977"
-           transform="matrix(1.7500001,0,0,-1.7500001,-27.968899,59.718761)" />
-        <circle
-           style="fill:#000000;fill-opacity:1;stroke:none"
-           id="path4517-0"
-           cx="84.666664"
-           cy="21.833345"
-           r="0.52778977"
-           d="m 85.194454,21.833345 c 0,0.291491 -0.2363,0.52779 -0.52779,0.52779 -0.29149,0 -0.52779,-0.236299 -0.52779,-0.52779 0,-0.29149 0.2363,-0.527789 0.52779,-0.527789 0.29149,0 0.52779,0.236299 0.52779,0.527789 z"
-           sodipodi:cx="84.666664"
-           sodipodi:cy="21.833345"
-           sodipodi:rx="0.52778977"
-           sodipodi:ry="0.52778977"
-           transform="matrix(1.7500001,0,0,-1.7500001,-27.968899,59.718761)" />
-        <circle
-           style="fill:#000000;fill-opacity:1;stroke:none"
-           id="path4517-7-0"
-           cx="95.25"
-           cy="21.833345"
-           r="0.52778977"
-           d="m 95.77779,21.833345 c 0,0.291491 -0.2363,0.52779 -0.52779,0.52779 -0.29149,0 -0.52779,-0.236299 -0.52779,-0.52779 0,-0.29149 0.2363,-0.527789 0.52779,-0.527789 0.29149,0 0.52779,0.236299 0.52779,0.527789 z"
-           sodipodi:cx="95.25"
-           sodipodi:cy="21.833345"
-           sodipodi:rx="0.52778977"
-           sodipodi:ry="0.52778977"
-           transform="matrix(1.7500001,0,0,-1.7500001,-27.968899,59.718761)" />
-        <circle
-           style="fill:#000000;fill-opacity:1;stroke:none"
-           id="path4517-1"
-           cx="105.83334"
-           cy="21.833345"
-           r="0.52778977"
-           d="m 106.36113,21.833345 c 0,0.291491 -0.2363,0.52779 -0.52779,0.52779 -0.29149,0 -0.52779,-0.236299 -0.52779,-0.52779 0,-0.29149 0.2363,-0.527789 0.52779,-0.527789 0.29149,0 0.52779,0.236299 0.52779,0.527789 z"
-           sodipodi:cx="105.83334"
-           sodipodi:cy="21.833345"
-           sodipodi:rx="0.52778977"
-           sodipodi:ry="0.52778977"
-           transform="matrix(1.7500001,0,0,-1.7500001,-27.968899,59.718761)" />
-        <circle
-           style="fill:#000000;fill-opacity:1;stroke:none"
-           id="path4517-7-7"
-           cx="116.41666"
-           cy="21.833345"
-           r="0.52778977"
-           d="m 116.94445,21.833345 c 0,0.291491 -0.2363,0.52779 -0.52779,0.52779 -0.29149,0 -0.52779,-0.236299 -0.52779,-0.52779 0,-0.29149 0.2363,-0.527789 0.52779,-0.527789 0.29149,0 0.52779,0.236299 0.52779,0.527789 z"
-           sodipodi:cx="116.41666"
-           sodipodi:cy="21.833345"
-           sodipodi:rx="0.52778977"
-           sodipodi:ry="0.52778977"
-           transform="matrix(1.7500001,0,0,-1.7500001,-27.968899,59.718761)" />
-        <path
-           style="fill:none;stroke:#808080;stroke-width:0.26458335;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
-           d="m 36.85402,30.770821 h 148.16667 l 2e-5,-74.083337 H 36.854029 l -9e-6,74.083337 m 18.520836,0 7e-6,-74.083337 m 18.520832,0 -7e-6,74.083337 m 18.520832,0 1.4e-5,-74.083337 m 18.520836,0 -1e-5,74.083337 m 18.52084,0 v -74.083337 m 18.52083,0 -1e-5,74.083337 m 18.52082,0 2e-5,-74.083337 m 18.52085,18.52083 H 36.854029 m -7e-6,18.5208395 H 185.02069 m 0,18.5208325 H 36.854022"
-           id="path1171"
-           inkscape:connector-curvature="0"
-           sodipodi:nodetypes="ccccccccccccccccccccccccc" />
-        <circle
-           style="fill:#000000;fill-opacity:1;stroke:none"
-           id="path4517-6"
-           cx="42.333332"
-           cy="32.416679"
-           r="0.52778977"
-           d="m 42.861122,32.416679 c 0,0.291491 -0.2363,0.52779 -0.52779,0.52779 -0.29149,0 -0.52779,-0.236299 -0.52779,-0.52779 0,-0.29149 0.2363,-0.527789 0.52779,-0.527789 0.29149,0 0.52779,0.236299 0.52779,0.527789 z"
-           sodipodi:cx="42.333332"
-           sodipodi:cy="32.416679"
-           sodipodi:rx="0.52778977"
-           sodipodi:ry="0.52778977"
-           transform="matrix(1.7500001,0,0,-1.7500001,-27.968899,59.718761)" />
-        <circle
-           style="fill:#000000;fill-opacity:1;stroke:none"
-           id="path4517-7-3"
-           cx="52.916668"
-           cy="32.416679"
-           r="0.52778977"
-           d="m 53.444458,32.416679 c 0,0.291491 -0.2363,0.52779 -0.52779,0.52779 -0.29149,0 -0.52779,-0.236299 -0.52779,-0.52779 0,-0.29149 0.2363,-0.527789 0.52779,-0.527789 0.29149,0 0.52779,0.236299 0.52779,0.527789 z"
-           sodipodi:cx="52.916668"
-           sodipodi:cy="32.416679"
-           sodipodi:rx="0.52778977"
-           sodipodi:ry="0.52778977"
-           transform="matrix(1.7500001,0,0,-1.7500001,-27.968899,59.718761)" />
-        <circle
-           style="fill:#000000;fill-opacity:1;stroke:none"
-           id="path4517-78-9"
-           cx="63.5"
-           cy="32.416679"
-           r="0.52778977"
-           d="m 64.02779,32.416679 c 0,0.291491 -0.2363,0.52779 -0.52779,0.52779 -0.29149,0 -0.52779,-0.236299 -0.52779,-0.52779 0,-0.29149 0.2363,-0.527789 0.52779,-0.527789 0.29149,0 0.52779,0.236299 0.52779,0.527789 z"
-           sodipodi:cx="63.5"
-           sodipodi:cy="32.416679"
-           sodipodi:rx="0.52778977"
-           sodipodi:ry="0.52778977"
-           transform="matrix(1.7500001,0,0,-1.7500001,-27.968899,59.718761)" />
-        <circle
-           style="fill:#000000;fill-opacity:1;stroke:none"
-           id="path4517-7-9-1"
-           cx="74.083336"
-           cy="32.416679"
-           r="0.52778977"
-           d="m 74.611126,32.416679 c 0,0.291491 -0.2363,0.52779 -0.52779,0.52779 -0.29149,0 -0.52779,-0.236299 -0.52779,-0.52779 0,-0.29149 0.2363,-0.527789 0.52779,-0.527789 0.29149,0 0.52779,0.236299 0.52779,0.527789 z"
-           sodipodi:cx="74.083336"
-           sodipodi:cy="32.416679"
-           sodipodi:rx="0.52778977"
-           sodipodi:ry="0.52778977"
-           transform="matrix(1.7500001,0,0,-1.7500001,-27.968899,59.718761)" />
-        <circle
-           style="fill:#000000;fill-opacity:1;stroke:none"
-           id="path4517-0-6"
-           cx="84.666664"
-           cy="32.416679"
-           r="0.52778977"
-           d="m 85.194454,32.416679 c 0,0.291491 -0.2363,0.52779 -0.52779,0.52779 -0.29149,0 -0.52779,-0.236299 -0.52779,-0.52779 0,-0.29149 0.2363,-0.527789 0.52779,-0.527789 0.29149,0 0.52779,0.236299 0.52779,0.527789 z"
-           sodipodi:cx="84.666664"
-           sodipodi:cy="32.416679"
-           sodipodi:rx="0.52778977"
-           sodipodi:ry="0.52778977"
-           transform="matrix(1.7500001,0,0,-1.7500001,-27.968899,59.718761)" />
-        <circle
-           style="fill:#000000;fill-opacity:1;stroke:none"
-           id="path4517-7-0-8"
-           cx="95.25"
-           cy="32.416679"
-           r="0.52778977"
-           d="m 95.77779,32.416679 c 0,0.291491 -0.2363,0.52779 -0.52779,0.52779 -0.29149,0 -0.52779,-0.236299 -0.52779,-0.52779 0,-0.29149 0.2363,-0.527789 0.52779,-0.527789 0.29149,0 0.52779,0.236299 0.52779,0.527789 z"
-           sodipodi:cx="95.25"
-           sodipodi:cy="32.416679"
-           sodipodi:rx="0.52778977"
-           sodipodi:ry="0.52778977"
-           transform="matrix(1.7500001,0,0,-1.7500001,-27.968899,59.718761)" />
-        <circle
-           style="fill:#000000;fill-opacity:1;stroke:none"
-           id="path4517-1-5"
-           cx="105.83334"
-           cy="32.416679"
-           r="0.52778977"
-           d="m 106.36113,32.416679 c 0,0.291491 -0.2363,0.52779 -0.52779,0.52779 -0.29149,0 -0.52779,-0.236299 -0.52779,-0.52779 0,-0.29149 0.2363,-0.527789 0.52779,-0.527789 0.29149,0 0.52779,0.236299 0.52779,0.527789 z"
-           sodipodi:cx="105.83334"
-           sodipodi:cy="32.416679"
-           sodipodi:rx="0.52778977"
-           sodipodi:ry="0.52778977"
-           transform="matrix(1.7500001,0,0,-1.7500001,-27.968899,59.718761)" />
-        <circle
-           style="fill:#000000;fill-opacity:1;stroke:none"
-           id="path4517-7-7-5"
-           cx="116.41665"
-           cy="32.416679"
-           r="0.52778977"
-           d="m 116.94444,32.416679 c 0,0.291491 -0.2363,0.52779 -0.52779,0.52779 -0.29149,0 -0.52779,-0.236299 -0.52779,-0.52779 0,-0.29149 0.2363,-0.527789 0.52779,-0.527789 0.29149,0 0.52779,0.236299 0.52779,0.527789 z"
-           sodipodi:cx="116.41665"
-           sodipodi:cy="32.416679"
-           sodipodi:rx="0.52778977"
-           sodipodi:ry="0.52778977"
-           transform="matrix(1.7500001,0,0,-1.7500001,-27.968899,59.718761)" />
-        <circle
-           style="fill:#000000;fill-opacity:1;stroke:none"
-           id="path4517-4"
-           cx="42.333332"
-           cy="43.000011"
-           r="0.52778977"
-           d="m 42.861122,43.000011 c 0,0.291491 -0.2363,0.52779 -0.52779,0.52779 -0.29149,0 -0.52779,-0.236299 -0.52779,-0.52779 0,-0.29149 0.2363,-0.527789 0.52779,-0.527789 0.29149,0 0.52779,0.236299 0.52779,0.527789 z"
-           sodipodi:cx="42.333332"
-           sodipodi:cy="43.000011"
-           sodipodi:rx="0.52778977"
-           sodipodi:ry="0.52778977"
-           transform="matrix(1.7500001,0,0,-1.7500001,-27.968899,59.718761)" />
-        <circle
-           style="fill:#000000;fill-opacity:1;stroke:none"
-           id="path4517-7-2"
-           cx="52.916668"
-           cy="43.000011"
-           r="0.52778977"
-           d="m 53.444458,43.000011 c 0,0.291491 -0.2363,0.52779 -0.52779,0.52779 -0.29149,0 -0.52779,-0.236299 -0.52779,-0.52779 0,-0.29149 0.2363,-0.527789 0.52779,-0.527789 0.29149,0 0.52779,0.236299 0.52779,0.527789 z"
-           sodipodi:cx="52.916668"
-           sodipodi:cy="43.000011"
-           sodipodi:rx="0.52778977"
-           sodipodi:ry="0.52778977"
-           transform="matrix(1.7500001,0,0,-1.7500001,-27.968899,59.718761)" />
-        <circle
-           style="fill:#000000;fill-opacity:1;stroke:none"
-           id="path4517-78-3"
-           cx="63.5"
-           cy="43.000011"
-           r="0.52778977"
-           d="m 64.02779,43.000011 c 0,0.291491 -0.2363,0.52779 -0.52779,0.52779 -0.29149,0 -0.52779,-0.236299 -0.52779,-0.52779 0,-0.29149 0.2363,-0.527789 0.52779,-0.527789 0.29149,0 0.52779,0.236299 0.52779,0.527789 z"
-           sodipodi:cx="63.5"
-           sodipodi:cy="43.000011"
-           sodipodi:rx="0.52778977"
-           sodipodi:ry="0.52778977"
-           transform="matrix(1.7500001,0,0,-1.7500001,-27.968899,59.718761)" />
-        <circle
-           style="fill:#000000;fill-opacity:1;stroke:none"
-           id="path4517-7-9-0"
-           cx="74.083336"
-           cy="43.000011"
-           r="0.52778977"
-           d="m 74.611126,43.000011 c 0,0.291491 -0.2363,0.52779 -0.52779,0.52779 -0.29149,0 -0.52779,-0.236299 -0.52779,-0.52779 0,-0.29149 0.2363,-0.527789 0.52779,-0.527789 0.29149,0 0.52779,0.236299 0.52779,0.527789 z"
-           sodipodi:cx="74.083336"
-           sodipodi:cy="43.000011"
-           sodipodi:rx="0.52778977"
-           sodipodi:ry="0.52778977"
-           transform="matrix(1.7500001,0,0,-1.7500001,-27.968899,59.718761)" />
-        <circle
-           style="fill:#000000;fill-opacity:1;stroke:none"
-           id="path4517-0-9"
-           cx="84.666664"
-           cy="43.000011"
-           r="0.52778977"
-           d="m 85.194454,43.000011 c 0,0.291491 -0.2363,0.52779 -0.52779,0.52779 -0.29149,0 -0.52779,-0.236299 -0.52779,-0.52779 0,-0.29149 0.2363,-0.527789 0.52779,-0.527789 0.29149,0 0.52779,0.236299 0.52779,0.527789 z"
-           sodipodi:cx="84.666664"
-           sodipodi:cy="43.000011"
-           sodipodi:rx="0.52778977"
-           sodipodi:ry="0.52778977"
-           transform="matrix(1.7500001,0,0,-1.7500001,-27.968899,59.718761)" />
-        <circle
-           style="fill:#000000;fill-opacity:1;stroke:none"
-           id="path4517-7-0-1"
-           cx="95.25"
-           cy="43.000011"
-           r="0.52778977"
-           d="m 95.77779,43.000011 c 0,0.291491 -0.2363,0.52779 -0.52779,0.52779 -0.29149,0 -0.52779,-0.236299 -0.52779,-0.52779 0,-0.29149 0.2363,-0.527789 0.52779,-0.527789 0.29149,0 0.52779,0.236299 0.52779,0.527789 z"
-           sodipodi:cx="95.25"
-           sodipodi:cy="43.000011"
-           sodipodi:rx="0.52778977"
-           sodipodi:ry="0.52778977"
-           transform="matrix(1.7500001,0,0,-1.7500001,-27.968899,59.718761)" />
-        <circle
-           style="fill:#000000;fill-opacity:1;stroke:none"
-           id="path4517-1-9"
-           cx="105.83334"
-           cy="43.000011"
-           r="0.52778977"
-           d="m 106.36113,43.000011 c 0,0.291491 -0.2363,0.52779 -0.52779,0.52779 -0.29149,0 -0.52779,-0.236299 -0.52779,-0.52779 0,-0.29149 0.2363,-0.527789 0.52779,-0.527789 0.29149,0 0.52779,0.236299 0.52779,0.527789 z"
-           sodipodi:cx="105.83334"
-           sodipodi:cy="43.000011"
-           sodipodi:rx="0.52778977"
-           sodipodi:ry="0.52778977"
-           transform="matrix(1.7500001,0,0,-1.7500001,-27.968899,59.718761)" />
-        <circle
-           style="fill:#000000;fill-opacity:1;stroke:none"
-           id="path4517-7-7-7"
-           cx="116.41665"
-           cy="43.000011"
-           r="0.52778977"
-           d="m 116.94444,43.000011 c 0,0.291491 -0.2363,0.52779 -0.52779,0.52779 -0.29149,0 -0.52779,-0.236299 -0.52779,-0.52779 0,-0.29149 0.2363,-0.527789 0.52779,-0.527789 0.29149,0 0.52779,0.236299 0.52779,0.527789 z"
-           sodipodi:cx="116.41665"
-           sodipodi:cy="43.000011"
-           sodipodi:rx="0.52778977"
-           sodipodi:ry="0.52778977"
-           transform="matrix(1.7500001,0,0,-1.7500001,-27.968899,59.718761)" />
-        <circle
-           style="fill:#000000;fill-opacity:1;stroke:none"
-           id="path4517-14"
-           cx="42.333332"
-           cy="53.583344"
-           r="0.52778977"
-           d="m 42.861122,53.583344 c 0,0.29149 -0.2363,0.527789 -0.52779,0.527789 -0.29149,0 -0.52779,-0.236299 -0.52779,-0.527789 0,-0.291491 0.2363,-0.52779 0.52779,-0.52779 0.29149,0 0.52779,0.236299 0.52779,0.52779 z"
-           sodipodi:cx="42.333332"
-           sodipodi:cy="53.583344"
-           sodipodi:rx="0.52778977"
-           sodipodi:ry="0.52778977"
-           transform="matrix(1.7500001,0,0,-1.7500001,-27.968899,59.718761)" />
-        <circle
-           style="fill:#000000;fill-opacity:1;stroke:none"
-           id="path4517-7-4"
-           cx="52.916668"
-           cy="53.583344"
-           r="0.52778977"
-           d="m 53.444458,53.583344 c 0,0.29149 -0.2363,0.527789 -0.52779,0.527789 -0.29149,0 -0.52779,-0.236299 -0.52779,-0.527789 0,-0.291491 0.2363,-0.52779 0.52779,-0.52779 0.29149,0 0.52779,0.236299 0.52779,0.52779 z"
-           sodipodi:cx="52.916668"
-           sodipodi:cy="53.583344"
-           sodipodi:rx="0.52778977"
-           sodipodi:ry="0.52778977"
-           transform="matrix(1.7500001,0,0,-1.7500001,-27.968899,59.718761)" />
-        <circle
-           style="fill:#000000;fill-opacity:1;stroke:none"
-           id="path4517-78-7"
-           cx="63.5"
-           cy="53.583344"
-           r="0.52778977"
-           d="m 64.02779,53.583344 c 0,0.29149 -0.2363,0.527789 -0.52779,0.527789 -0.29149,0 -0.52779,-0.236299 -0.52779,-0.527789 0,-0.291491 0.2363,-0.52779 0.52779,-0.52779 0.29149,0 0.52779,0.236299 0.52779,0.52779 z"
-           sodipodi:cx="63.5"
-           sodipodi:cy="53.583344"
-           sodipodi:rx="0.52778977"
-           sodipodi:ry="0.52778977"
-           transform="matrix(1.7500001,0,0,-1.7500001,-27.968899,59.718761)" />
-        <circle
-           style="fill:#000000;fill-opacity:1;stroke:none"
-           id="path4517-7-9-8"
-           cx="74.083336"
-           cy="53.583344"
-           r="0.52778977"
-           d="m 74.611126,53.583344 c 0,0.29149 -0.2363,0.527789 -0.52779,0.527789 -0.29149,0 -0.52779,-0.236299 -0.52779,-0.527789 0,-0.291491 0.2363,-0.52779 0.52779,-0.52779 0.29149,0 0.52779,0.236299 0.52779,0.52779 z"
-           sodipodi:cx="74.083336"
-           sodipodi:cy="53.583344"
-           sodipodi:rx="0.52778977"
-           sodipodi:ry="0.52778977"
-           transform="matrix(1.7500001,0,0,-1.7500001,-27.968899,59.718761)" />
-        <circle
-           style="fill:#000000;fill-opacity:1;stroke:none"
-           id="path4517-0-7"
-           cx="84.666664"
-           cy="53.583344"
-           r="0.52778977"
-           d="m 85.194454,53.583344 c 0,0.29149 -0.2363,0.527789 -0.52779,0.527789 -0.29149,0 -0.52779,-0.236299 -0.52779,-0.527789 0,-0.291491 0.2363,-0.52779 0.52779,-0.52779 0.29149,0 0.52779,0.236299 0.52779,0.52779 z"
-           sodipodi:cx="84.666664"
-           sodipodi:cy="53.583344"
-           sodipodi:rx="0.52778977"
-           sodipodi:ry="0.52778977"
-           transform="matrix(1.7500001,0,0,-1.7500001,-27.968899,59.718761)" />
-        <circle
-           style="fill:#000000;fill-opacity:1;stroke:none"
-           id="path4517-7-0-9"
-           cx="95.25"
-           cy="53.583344"
-           r="0.52778977"
-           d="m 95.77779,53.583344 c 0,0.29149 -0.2363,0.527789 -0.52779,0.527789 -0.29149,0 -0.52779,-0.236299 -0.52779,-0.527789 0,-0.291491 0.2363,-0.52779 0.52779,-0.52779 0.29149,0 0.52779,0.236299 0.52779,0.52779 z"
-           sodipodi:cx="95.25"
-           sodipodi:cy="53.583344"
-           sodipodi:rx="0.52778977"
-           sodipodi:ry="0.52778977"
-           transform="matrix(1.7500001,0,0,-1.7500001,-27.968899,59.718761)" />
-        <circle
-           style="fill:#000000;fill-opacity:1;stroke:none"
-           id="path4517-1-4"
-           cx="105.83334"
-           cy="53.583344"
-           r="0.52778977"
-           d="m 106.36113,53.583344 c 0,0.29149 -0.2363,0.527789 -0.52779,0.527789 -0.29149,0 -0.52779,-0.236299 -0.52779,-0.527789 0,-0.291491 0.2363,-0.52779 0.52779,-0.52779 0.29149,0 0.52779,0.236299 0.52779,0.52779 z"
-           sodipodi:cx="105.83334"
-           sodipodi:cy="53.583344"
-           sodipodi:rx="0.52778977"
-           sodipodi:ry="0.52778977"
-           transform="matrix(1.7500001,0,0,-1.7500001,-27.968899,59.718761)" />
-        <circle
-           style="fill:#000000;fill-opacity:1;stroke:none"
-           id="path4517-7-7-52"
-           cx="116.41665"
-           cy="53.583344"
-           r="0.52778977"
-           d="m 116.94444,53.583344 c 0,0.29149 -0.2363,0.527789 -0.52779,0.527789 -0.29149,0 -0.52779,-0.236299 -0.52779,-0.527789 0,-0.291491 0.2363,-0.52779 0.52779,-0.52779 0.29149,0 0.52779,0.236299 0.52779,0.52779 z"
-           sodipodi:cx="116.41665"
-           sodipodi:cy="53.583344"
-           sodipodi:rx="0.52778977"
-           sodipodi:ry="0.52778977"
-           transform="matrix(1.7500001,0,0,-1.7500001,-27.968899,59.718761)" />
-        <path
-           style="fill:none;stroke:#808080;stroke-width:0.16467975;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
-           d="M 141.36444,16.782908 V 31.13271"
-           id="path3054-3"
-           inkscape:connector-curvature="0"
-           sodipodi:nodetypes="cc" />
-        <path
-           style="fill:none;stroke:#808080;stroke-width:0.13229167;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
-           d="m 129.45819,18.864575 h 14.55208"
-           id="path3054"
-           inkscape:connector-curvature="0" />
-        <rect
-           style="fill:none;stroke:#ff0000;stroke-width:0.5291667;stroke-linecap:square;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:2.11666671, 2.11666671;stroke-dashoffset:0"
-           id="rect1609"
-           width="37.041668"
-           height="37.041668"
-           x="58.020679"
-           y="-9.6041584"
-           transform="scale(1,-1)" />
-        <rect
-           style="fill:none;stroke:#ff0000;stroke-width:0.5291667;stroke-linecap:square;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:2.11666671, 2.11666671;stroke-dashoffset:0"
-           id="rect1609-6"
-           width="37.041668"
-           height="37.041668"
-           x="132.10402"
-           y="-28.124992"
-           transform="scale(1,-1)" />
-        <g
-           id="g3736">
-          <path
-             d="m 130.47105,15.425011 q 0,0.417545 -0.27906,0.690397 -0.27698,0.272851 -0.70073,0.272851 -0.1633,0 -0.3452,-0.04547 -0.1819,-0.04547 -0.31212,-0.132291 v 0.983919 h -0.38861 v -3.079915 q 0,-0.463021 0.26045,-0.725537 0.26252,-0.262517 0.72347,-0.262517 0.18603,0 0.339,0.04548 0.15503,0.04341 0.27698,0.138492 0.11783,0.08888 0.1881,0.231511 0.0703,0.142627 0.0703,0.330729 0,0.262516 -0.14469,0.458887 -0.14262,0.194303 -0.40514,0.270784 v 0.03514 q 0.32866,0.05374 0.52296,0.260449 0.19431,0.204639 0.19431,0.5271 z m -0.40101,-0.01034 q 0,-0.183969 -0.0724,-0.297657 -0.0703,-0.115755 -0.19017,-0.179834 -0.12196,-0.06615 -0.27285,-0.08888 -0.1509,-0.02274 -0.30179,-0.02274 h -0.0744 v -0.330729 h 0.0744 q 0.13642,0 0.27078,-0.02894 0.13436,-0.03101 0.21497,-0.09302 0.0951,-0.07028 0.14056,-0.171566 0.0475,-0.101286 0.0475,-0.276986 0,-0.23151 -0.14262,-0.351399 -0.14263,-0.11989 -0.36794,-0.11989 -0.1509,0 -0.25838,0.05581 -0.10749,0.05374 -0.1757,0.144694 -0.0661,0.09095 -0.0971,0.212907 -0.031,0.119889 -0.031,0.248047 v 1.781803 q 0.13642,0.07855 0.29145,0.111621 0.15503,0.03101 0.30386,0.03101 0.30799,0 0.47336,-0.161231 0.16743,-0.163297 0.16743,-0.46302 z"
-             style="font-size:4.23333311px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:1.25;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal'"
-             id="path1092"
-             inkscape:connector-curvature="0" />
-          <path
-             sodipodi:nodetypes="cc"
-             style="fill:#000000;stroke:#000000;stroke-width:0.26458335;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-end:url(#marker2415)"
-             d="m 129.45819,30.770825 0,-11.90625"
-             id="path2429"
-             inkscape:connector-curvature="0" />
-        </g>
-        <g
-           id="g3740">
-          <text
-             id="text5070-2-1"
-             y="6.2589712"
-             x="138.71861"
-             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none"
-             xml:space="preserve"><tspan
-               style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:3.52777743px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f40000;fill-opacity:1"
-               y="6.2589712"
-               x="138.71861"
-               id="tspan5068-0-6"
-               sodipodi:role="line"><tspan
-                 id="tspan7821"
-                 style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:3.52777743px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#000000"> i0j1</tspan></tspan></text>
-          <text
-             id="text5070-2-1-7"
-             y="6.2589712"
-             x="157.23944"
-             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none"
-             xml:space="preserve"><tspan
-               sodipodi:role="line"
-               id="tspan4060"
-               x="157.23944"
-               y="6.2589712"
-               style="font-size:3.52777696px;line-height:1.25"> i1j1</tspan></text>
-          <text
-             id="text5070-2-1-0"
-             y="24.779802"
-             x="138.71861"
-             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none"
-             xml:space="preserve"><tspan
-               sodipodi:role="line"
-               id="tspan4064"
-               x="138.71861"
-               y="24.779802"
-               style="font-size:3.52777696px;line-height:1.25"> i0j0</tspan></text>
-          <text
-             id="text5070-2-1-2"
-             y="24.779802"
-             x="157.23944"
-             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none"
-             xml:space="preserve"><tspan
-               sodipodi:role="line"
-               id="tspan4054"
-               x="157.23944"
-               y="24.779802"
-               style="font-size:3.52777696px;line-height:1.25"> i1j0</tspan><tspan
-               sodipodi:role="line"
-               id="tspan4056"
-               x="157.23944"
-               y="29.189524"
-               style="font-size:3.52777696px;line-height:1.25"> </tspan></text>
-        </g>
-        <g
-           id="g3778">
-          <path
-             sodipodi:nodetypes="cc"
-             inkscape:connector-curvature="0"
-             id="path1063"
-             d="m 150.36028,9.868741 -8.20209,8.202084"
-             style="fill:none;stroke:#ff0000;stroke-width:0.26458335px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow1Mend)" />
-          <g
-             id="g3773">
-            <circle
-               style="fill:#ff0000;fill-opacity:1;stroke:none"
-               id="path4517-0-8-5"
-               cx="141.36444"
-               cy="-31.406267"
-               r="0.92363214"
-               d="m 142.28807,-31.406267 c 0,0.510108 -0.41352,0.923632 -0.92363,0.923632 -0.51011,0 -0.92363,-0.413524 -0.92363,-0.923632 0,-0.510108 0.41352,-0.923632 0.92363,-0.923632 0.51011,0 0.92363,0.413524 0.92363,0.923632 z"
-               sodipodi:cx="141.36444"
-               sodipodi:cy="-31.406267"
-               sodipodi:rx="0.92363214"
-               sodipodi:ry="0.92363214"
-               transform="matrix(1,0,0,-1,0,-12.541691)" />
-            <text
-               xml:space="preserve"
-               style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none"
-               x="143.54691"
-               y="20.09103"
-               id="text5070"><tspan
-                 sodipodi:role="line"
-                 id="tspan5068"
-                 x="143.54691"
-                 y="20.09103"
-                 style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:3.52777743px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f40000;fill-opacity:1">(u-0.5,v-0.5)</tspan></text>
-          </g>
-          <g
-             id="g3768">
-            <circle
-               style="fill:#ff0000;fill-opacity:1;stroke:none"
-               id="path4517-0-8"
-               cx="150.62486"
-               cy="-22.145849"
-               r="0.92363214"
-               d="m 151.54849,-22.145849 c 0,0.510108 -0.41352,0.923632 -0.92363,0.923632 -0.51011,0 -0.92363,-0.413524 -0.92363,-0.923632 0,-0.510108 0.41352,-0.923632 0.92363,-0.923632 0.51011,0 0.92363,0.413524 0.92363,0.923632 z"
-               sodipodi:cx="150.62486"
-               sodipodi:cy="-22.145849"
-               sodipodi:rx="0.92363214"
-               sodipodi:ry="0.92363214"
-               transform="matrix(1,0,0,-1,0,-12.541691)" />
-            <text
-               xml:space="preserve"
-               style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none"
-               x="152.21477"
-               y="10.830611"
-               id="text5070-2"><tspan
-                 sodipodi:role="line"
-                 id="tspan5068-0"
-                 x="152.21477"
-                 y="10.830611"
-                 style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:3.52777743px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f40000;fill-opacity:1">(u,v)</tspan></text>
-          </g>
-        </g>
-        <g
-           id="g3754">
-          <text
-             id="text5070-2-1-06"
-             y="-16.495201"
-             x="64.635269"
-             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none"
-             xml:space="preserve"><tspan
-               sodipodi:role="line"
-               id="tspan4046"
-               x="64.635269"
-               y="-16.495201"
-               style="font-size:3.52777696px;line-height:0.34999999"> i0j1'</tspan></text>
-          <text
-             id="text5070-2-1-25"
-             y="-16.495201"
-             x="83.156105"
-             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none"
-             xml:space="preserve"><tspan
-               sodipodi:role="line"
-               id="tspan4048"
-               x="83.156105"
-               y="-16.495201"
-               style="font-size:3.52777696px;line-height:0.34999999"> i1j1'</tspan></text>
-          <text
-             id="text5070-2-1-75"
-             y="2.0256376"
-             x="64.635269"
-             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none"
-             xml:space="preserve"><tspan
-               sodipodi:role="line"
-               id="tspan4044"
-               x="64.635269"
-               y="2.0256376"
-               style="font-size:3.52777696px;line-height:0.34999999"> i0j0'</tspan></text>
-          <text
-             id="text5070-2-1-3"
-             y="2.0256376"
-             x="83.156105"
-             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none"
-             xml:space="preserve"><tspan
-               sodipodi:role="line"
-               id="tspan4050"
-               x="83.156105"
-               y="2.0256376"
-               style="font-size:3.52777696px;line-height:0.34999999"> i1j0'</tspan></text>
-        </g>
-      </g>
-    </g>
-  </g>
-</svg>
diff --git a/registry/vulkan/images/vulkantexture0.svg b/registry/vulkan/images/vulkantexture0.svg
deleted file mode 100644
index b3c1d6c..0000000
--- a/registry/vulkan/images/vulkantexture0.svg
+++ /dev/null
@@ -1,1005 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Created with Inkscape (http://www.inkscape.org/) -->
-
-<svg
-   xmlns:dc="http://purl.org/dc/elements/1.1/"
-   xmlns:cc="http://creativecommons.org/ns#"
-   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
-   xmlns:svg="http://www.w3.org/2000/svg"
-   xmlns="http://www.w3.org/2000/svg"
-   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
-   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
-   width="706.10547"
-   height="384.11328"
-   viewBox="0 0 186.82375 101.62997"
-   version="1.1"
-   id="svg8"
-   inkscape:version="0.92.2 (5c3e80d, 2017-08-06)"
-   sodipodi:docname="vulkantexture0.svg">
-  <defs
-     id="defs2">
-    <marker
-       inkscape:stockid="Arrow1Mend"
-       orient="auto"
-       refY="0.0"
-       refX="0.0"
-       id="marker2415"
-       style="overflow:visible;"
-       inkscape:isstock="true">
-      <path
-         id="path2413"
-         d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
-         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1"
-         transform="scale(0.4) rotate(180) translate(10,0)" />
-    </marker>
-    <marker
-       inkscape:isstock="true"
-       style="overflow:visible;"
-       id="marker1517"
-       refX="0.0"
-       refY="0.0"
-       orient="auto"
-       inkscape:stockid="Arrow1Mend"
-       inkscape:collect="always">
-      <path
-         transform="scale(0.4) rotate(180) translate(10,0)"
-         style="fill-rule:evenodd;stroke:#ff0000;stroke-width:1pt;stroke-opacity:1;fill:#ff0000;fill-opacity:1"
-         d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
-         id="path1515" />
-    </marker>
-    <marker
-       inkscape:stockid="Arrow1Mend"
-       orient="auto"
-       refY="0.0"
-       refX="0.0"
-       id="Arrow1Mend"
-       style="overflow:visible;"
-       inkscape:isstock="true"
-       inkscape:collect="always">
-      <path
-         id="path1132"
-         d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
-         style="fill-rule:evenodd;stroke:#ff0000;stroke-width:1pt;stroke-opacity:1;fill:#ff0000;fill-opacity:1"
-         transform="scale(0.4) rotate(180) translate(10,0)" />
-    </marker>
-    <marker
-       inkscape:stockid="Arrow2Lend"
-       orient="auto"
-       refY="0.0"
-       refX="0.0"
-       id="Arrow2Lend"
-       style="overflow:visible;"
-       inkscape:isstock="true">
-      <path
-         id="path1144"
-         style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round;stroke:#ff0000;stroke-opacity:1;fill:#ff0000;fill-opacity:1"
-         d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z "
-         transform="scale(1.1) rotate(180) translate(1,0)" />
-    </marker>
-    <marker
-       inkscape:isstock="true"
-       style="overflow:visible"
-       id="marker1073"
-       refX="0"
-       refY="0"
-       orient="auto"
-       inkscape:stockid="Arrow1Lend">
-      <path
-         transform="matrix(-0.8,0,0,-0.8,-10,0)"
-         style="fill:#ff0000;fill-opacity:1;fill-rule:evenodd;stroke:#ff0000;stroke-width:1.00000003pt;stroke-opacity:1"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         id="path1071"
-         inkscape:connector-curvature="0" />
-    </marker>
-    <marker
-       inkscape:isstock="true"
-       style="overflow:visible"
-       id="marker1483"
-       refX="0"
-       refY="0"
-       orient="auto"
-       inkscape:stockid="Arrow1Lend"
-       inkscape:collect="always">
-      <path
-         transform="matrix(-0.8,0,0,-0.8,-10,0)"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         id="path1481"
-         inkscape:connector-curvature="0" />
-    </marker>
-    <marker
-       inkscape:stockid="Arrow1Lend"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="Arrow1Lend"
-       style="overflow:visible"
-       inkscape:isstock="true"
-       inkscape:collect="always">
-      <path
-         id="path977"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         transform="matrix(-0.8,0,0,-0.8,-10,0)"
-         inkscape:connector-curvature="0" />
-    </marker>
-    <marker
-       inkscape:stockid="Arrow1Lend"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="Arrow1Lend-0"
-       style="overflow:visible"
-       inkscape:isstock="true">
-      <path
-         inkscape:connector-curvature="0"
-         id="path977-6"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         transform="matrix(-0.8,0,0,-0.8,-10,0)" />
-    </marker>
-    <marker
-       inkscape:isstock="true"
-       style="overflow:visible"
-       id="marker1483-7"
-       refX="0"
-       refY="0"
-       orient="auto"
-       inkscape:stockid="Arrow1Lend">
-      <path
-         inkscape:connector-curvature="0"
-         transform="matrix(-0.8,0,0,-0.8,-10,0)"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         id="path1481-0" />
-    </marker>
-    <marker
-       inkscape:stockid="Arrow1Mend"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="marker2415-4"
-       style="overflow:visible"
-       inkscape:isstock="true">
-      <path
-         inkscape:connector-curvature="0"
-         id="path2413-3"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         transform="matrix(-0.4,0,0,-0.4,-4,0)" />
-    </marker>
-  </defs>
-  <sodipodi:namedview
-     id="base"
-     pagecolor="#ffffff"
-     bordercolor="#666666"
-     borderopacity="1.0"
-     inkscape:pageopacity="0.0"
-     inkscape:pageshadow="2"
-     inkscape:zoom="1.4142136"
-     inkscape:cx="409.64232"
-     inkscape:cy="244.46273"
-     inkscape:document-units="px"
-     inkscape:current-layer="layer1"
-     showgrid="true"
-     inkscape:snap-object-midpoints="true"
-     inkscape:snap-text-baseline="true"
-     inkscape:window-width="1680"
-     inkscape:window-height="987"
-     inkscape:window-x="1672"
-     inkscape:window-y="-8"
-     inkscape:window-maximized="0"
-     fit-margin-top="1"
-     fit-margin-right="1"
-     fit-margin-bottom="1"
-     fit-margin-left="1"
-     units="px"
-     inkscape:snap-center="false">
-    <inkscape:grid
-       type="xygrid"
-       id="grid12"
-       originx="0.79995428"
-       originy="-29.882412"
-       dotted="false" />
-  </sodipodi:namedview>
-  <metadata
-     id="metadata5">
-    <rdf:RDF>
-      <cc:Work
-         rdf:about="">
-        <dc:format>image/svg+xml</dc:format>
-        <dc:type
-           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
-        <dc:title />
-      </cc:Work>
-    </rdf:RDF>
-  </metadata>
-  <g
-     inkscape:label="Layer 1"
-     inkscape:groupmode="layer"
-     id="layer1"
-     transform="translate(-6.9498988,47.8249)">
-    <path
-       style="fill:none;stroke:#808080;stroke-width:0.13229167;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       d="m 141.36444,-24.791682 v -9.260417"
-       id="path3054-3"
-       inkscape:connector-curvature="0"
-       sodipodi:nodetypes="cc" />
-    <path
-       style="fill:none;stroke:#808080;stroke-width:0.13229167;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none"
-       d="m 129.45819,-31.406266 h 14.55208"
-       id="path3054"
-       inkscape:connector-curvature="0" />
-    <g
-       id="g1953"
-       transform="translate(-2.6458349,-3.056108e-6)">
-      <text
-         id="text121"
-         y="-32.729179"
-         x="34.208187"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
-         xml:space="preserve"><tspan
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332"
-           y="-32.729179"
-           x="34.208187"
-           id="tspan119"
-           sodipodi:role="line">3</tspan></text>
-      <text
-         id="text121-3"
-         y="-14.208342"
-         x="34.208187"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
-         xml:space="preserve"><tspan
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332"
-           y="-14.208342"
-           x="34.208187"
-           id="tspan119-1"
-           sodipodi:role="line">2</tspan></text>
-      <text
-         id="text121-0"
-         y="4.3124924"
-         x="34.208187"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
-         xml:space="preserve"><tspan
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332"
-           y="4.3124924"
-           x="34.208187"
-           id="tspan119-4"
-           sodipodi:role="line">1</tspan></text>
-      <text
-         id="text121-33"
-         y="22.833326"
-         x="34.208187"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
-         xml:space="preserve"><tspan
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332"
-           y="22.833326"
-           x="34.208187"
-           id="tspan119-6"
-           sodipodi:role="line">0</tspan></text>
-      <text
-         id="text121-6"
-         y="36.062492"
-         x="47.437355"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
-         xml:space="preserve"><tspan
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332"
-           y="36.062492"
-           x="47.437355"
-           id="tspan119-11"
-           sodipodi:role="line">0</tspan></text>
-      <text
-         id="text121-30"
-         y="36.062492"
-         x="65.958191"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
-         xml:space="preserve"><tspan
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332"
-           y="36.062492"
-           x="65.958191"
-           id="tspan119-47"
-           sodipodi:role="line">1</tspan></text>
-      <text
-         id="text121-1"
-         y="36.062492"
-         x="84.479027"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
-         xml:space="preserve"><tspan
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332"
-           y="36.062492"
-           x="84.479027"
-           id="tspan119-9"
-           sodipodi:role="line">2</tspan></text>
-      <text
-         id="text121-8"
-         y="36.062492"
-         x="102.99986"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
-         xml:space="preserve"><tspan
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332"
-           y="36.062492"
-           x="102.99986"
-           id="tspan119-7"
-           sodipodi:role="line">3</tspan></text>
-      <text
-         id="text121-4"
-         y="36.062492"
-         x="121.52069"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
-         xml:space="preserve"><tspan
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332"
-           y="36.062492"
-           x="121.52069"
-           id="tspan119-0"
-           sodipodi:role="line">4</tspan></text>
-      <text
-         id="text121-7"
-         y="36.062492"
-         x="140.04152"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
-         xml:space="preserve"><tspan
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332"
-           y="36.062492"
-           x="140.04152"
-           id="tspan119-8"
-           sodipodi:role="line">5</tspan></text>
-      <text
-         id="text121-79"
-         y="36.062492"
-         x="158.56236"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
-         xml:space="preserve"><tspan
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332"
-           y="36.062492"
-           x="158.56236"
-           id="tspan119-16"
-           sodipodi:role="line">6</tspan></text>
-      <text
-         id="text121-31"
-         y="36.062492"
-         x="177.08319"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
-         xml:space="preserve"><tspan
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332"
-           y="36.062492"
-           x="177.08319"
-           id="tspan119-09"
-           sodipodi:role="line">7</tspan></text>
-      <text
-         id="text121-3-7"
-         y="-5.1587644"
-         x="34.4366"
-         style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
-         xml:space="preserve"><tspan
-           style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458332"
-           y="-5.1587644"
-           x="34.4366"
-           id="tspan119-1-8"
-           sodipodi:role="line">j</tspan></text>
-      <text
-         id="text121-3-7-3"
-         y="37.611752"
-         x="113.4819"
-         style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
-         xml:space="preserve"><tspan
-           style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458332"
-           y="37.611752"
-           x="113.4819"
-           id="tspan119-1-8-7"
-           sodipodi:role="line">i</tspan></text>
-      <g
-         style="stroke-width:0.15119047;stroke-miterlimit:4;stroke-dasharray:none"
-         transform="matrix(1.7500001,0,0,1.7500001,-25.323064,-72.260449)"
-         id="g1463">
-        <circle
-           style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15119047;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-           id="path4517"
-           cx="42.333332"
-           cy="21.833345"
-           r="0.52778977" />
-        <circle
-           style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15119047;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-           id="path4517-7"
-           cx="52.916668"
-           cy="21.833345"
-           r="0.52778977" />
-        <circle
-           style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15119047;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-           id="path4517-78"
-           cx="63.5"
-           cy="21.833345"
-           r="0.52778977" />
-        <circle
-           style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15119047;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-           id="path4517-7-9"
-           cx="74.083336"
-           cy="21.833345"
-           r="0.52778977" />
-        <circle
-           style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15119047;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-           id="path4517-0"
-           cx="84.666664"
-           cy="21.833345"
-           r="0.52778977" />
-        <circle
-           style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15119047;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-           id="path4517-7-0"
-           cx="95.25"
-           cy="21.833345"
-           r="0.52778977" />
-        <circle
-           style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15119047;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-           id="path4517-1"
-           cx="105.83334"
-           cy="21.833345"
-           r="0.52778977" />
-        <circle
-           style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15119047;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-           id="path4517-7-7"
-           cx="116.41666"
-           cy="21.833345"
-           r="0.52778977" />
-        <path
-           style="fill:none;stroke:#808080;stroke-width:0.15119047;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-           d="m 37.041666,16.541679 h 84.666664 l 1e-5,42.333333 H 37.041671 l -5e-6,-42.333333 m 10.583334,0 4e-6,42.333333 m 10.583332,0 -4e-6,-42.333333 m 10.583332,0 8e-6,42.333333 m 10.583336,0 -8e-6,-42.333333 m 10.583336,0 v 42.333333 m 10.583334,0 -1e-5,-42.333333 m 10.58333,0 1e-5,42.333333 M 121.70834,48.291681 H 37.041671 m -4e-6,-10.583336 h 84.666663 m 0,-10.583332 H 37.041667"
-           id="path1171"
-           inkscape:connector-curvature="0"
-           sodipodi:nodetypes="ccccccccccccccccccccccccc" />
-        <circle
-           style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15119047;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-           id="path4517-6"
-           cx="42.333332"
-           cy="32.416679"
-           r="0.52778977" />
-        <circle
-           style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15119047;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-           id="path4517-7-3"
-           cx="52.916668"
-           cy="32.416679"
-           r="0.52778977" />
-        <circle
-           style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15119047;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-           id="path4517-78-9"
-           cx="63.5"
-           cy="32.416679"
-           r="0.52778977" />
-        <circle
-           style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15119047;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-           id="path4517-7-9-1"
-           cx="74.083336"
-           cy="32.416679"
-           r="0.52778977" />
-        <circle
-           style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15119047;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-           id="path4517-0-6"
-           cx="84.666664"
-           cy="32.416679"
-           r="0.52778977" />
-        <circle
-           style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15119047;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-           id="path4517-7-0-8"
-           cx="95.25"
-           cy="32.416679"
-           r="0.52778977" />
-        <circle
-           style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15119047;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-           id="path4517-1-5"
-           cx="105.83334"
-           cy="32.416679"
-           r="0.52778977" />
-        <circle
-           style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15119047;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-           id="path4517-7-7-5"
-           cx="116.41665"
-           cy="32.416679"
-           r="0.52778977" />
-        <circle
-           style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15119047;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-           id="path4517-4"
-           cx="42.333332"
-           cy="43.000011"
-           r="0.52778977" />
-        <circle
-           style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15119047;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-           id="path4517-7-2"
-           cx="52.916668"
-           cy="43.000011"
-           r="0.52778977" />
-        <circle
-           style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15119047;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-           id="path4517-78-3"
-           cx="63.5"
-           cy="43.000011"
-           r="0.52778977" />
-        <circle
-           style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15119047;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-           id="path4517-7-9-0"
-           cx="74.083336"
-           cy="43.000011"
-           r="0.52778977" />
-        <circle
-           style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15119047;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-           id="path4517-0-9"
-           cx="84.666664"
-           cy="43.000011"
-           r="0.52778977" />
-        <circle
-           style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15119047;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-           id="path4517-7-0-1"
-           cx="95.25"
-           cy="43.000011"
-           r="0.52778977" />
-        <circle
-           style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15119047;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-           id="path4517-1-9"
-           cx="105.83334"
-           cy="43.000011"
-           r="0.52778977" />
-        <circle
-           style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15119047;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-           id="path4517-7-7-7"
-           cx="116.41665"
-           cy="43.000011"
-           r="0.52778977" />
-        <circle
-           style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15119047;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-           id="path4517-14"
-           cx="42.333332"
-           cy="53.583344"
-           r="0.52778977" />
-        <circle
-           style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15119047;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-           id="path4517-7-4"
-           cx="52.916668"
-           cy="53.583344"
-           r="0.52778977" />
-        <circle
-           style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15119047;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-           id="path4517-78-7"
-           cx="63.5"
-           cy="53.583344"
-           r="0.52778977" />
-        <circle
-           style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15119047;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-           id="path4517-7-9-8"
-           cx="74.083336"
-           cy="53.583344"
-           r="0.52778977" />
-        <circle
-           style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15119047;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-           id="path4517-0-7"
-           cx="84.666664"
-           cy="53.583344"
-           r="0.52778977" />
-        <circle
-           style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15119047;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-           id="path4517-7-0-9"
-           cx="95.25"
-           cy="53.583344"
-           r="0.52778977" />
-        <circle
-           style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15119047;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-           id="path4517-1-4"
-           cx="105.83334"
-           cy="53.583344"
-           r="0.52778977" />
-        <circle
-           style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15119047;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-           id="path4517-7-7-52"
-           cx="116.41665"
-           cy="53.583344"
-           r="0.52778977" />
-      </g>
-      <g
-         transform="translate(-23.812502,2.2e-6)"
-         id="g1370">
-        <text
-           xml:space="preserve"
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
-           x="54.556301"
-           y="45.537884"
-           id="text121-09-74"><tspan
-             sodipodi:role="line"
-             id="tspan119-67-18"
-             x="54.556301"
-             y="45.537884"
-             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332">0.0</tspan></text>
-        <text
-           xml:space="preserve"
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
-           x="213.32181"
-           y="45.538918"
-           id="text121-09-74-5"><tspan
-             sodipodi:role="line"
-             id="tspan119-67-18-0"
-             x="213.32181"
-             y="45.538918"
-             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332">8.0</tspan></text>
-        <path
-           style="fill:none;stroke:#000000;stroke-width:0.26458335px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow1Lend)"
-           d="m 63.312355,43.999992 h 71.437505 m 5.29167,2e-6 h 71.4375"
-           id="path972"
-           inkscape:connector-curvature="0" />
-        <text
-           xml:space="preserve"
-           style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
-           x="137.32748"
-           y="45.122406"
-           id="text121-3-7-3-3"><tspan
-             sodipodi:role="line"
-             id="tspan119-1-8-7-2"
-             x="137.32748"
-             y="45.122406"
-             style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458332">u</tspan></text>
-      </g>
-      <g
-         transform="translate(-23.812505,7.9375005)"
-         id="g1471">
-        <text
-           xml:space="preserve"
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
-           x="54.556301"
-           y="45.537884"
-           id="text121-09-74-7"><tspan
-             sodipodi:role="line"
-             id="tspan119-67-18-1"
-             x="54.556301"
-             y="45.537884"
-             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332">0.0</tspan></text>
-        <text
-           xml:space="preserve"
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
-           x="213.32181"
-           y="45.538918"
-           id="text121-09-74-5-4"><tspan
-             sodipodi:role="line"
-             id="tspan119-67-18-0-9"
-             x="213.32181"
-             y="45.538918"
-             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332">1.0</tspan></text>
-        <path
-           style="fill:none;stroke:#000000;stroke-width:0.26458335px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow1Lend-0)"
-           d="m 63.312355,43.999992 h 71.437505 m 5.29167,2e-6 h 71.4375"
-           id="path972-8"
-           inkscape:connector-curvature="0" />
-        <text
-           xml:space="preserve"
-           style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
-           x="137.32748"
-           y="45.122406"
-           id="text121-3-7-3-3-5"><tspan
-             sodipodi:role="line"
-             id="tspan119-1-8-7-2-2"
-             x="137.32748"
-             y="45.122406"
-             style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458332">s</tspan></text>
-      </g>
-      <g
-         transform="translate(-23.812501,2.6458339)"
-         id="g1597">
-        <text
-           xml:space="preserve"
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
-           x="44.034977"
-           y="-47.066288"
-           id="text121-09"><tspan
-             sodipodi:role="line"
-             id="tspan119-67"
-             x="44.034977"
-             y="-47.066288"
-             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332">4.0</tspan></text>
-        <text
-           xml:space="preserve"
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
-           x="43.972965"
-           y="32.308716"
-           id="text121-09-7"><tspan
-             sodipodi:role="line"
-             id="tspan119-67-1"
-             x="43.972965"
-             y="32.308716"
-             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332">0.0</tspan></text>
-        <path
-           inkscape:connector-curvature="0"
-           id="path1473"
-           d="M 47.437354,28.124992 V -6.2708429 m 10e-7,-5.2916661 v -34.395835"
-           style="fill:none;stroke:#000000;stroke-width:0.26458335px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker1483)" />
-        <text
-           xml:space="preserve"
-           style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
-           x="46.93816"
-           y="-7.8045983"
-           id="text121-3-7-8"><tspan
-             sodipodi:role="line"
-             id="tspan119-1-8-3"
-             x="46.93816"
-             y="-7.8045983"
-             style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458332">v</tspan></text>
-      </g>
-      <g
-         id="g1613-5"
-         transform="translate(-34.395835,2.6458339)">
-        <g
-           id="g1802">
-          <text
-             xml:space="preserve"
-             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
-             x="44.034977"
-             y="-47.066288"
-             id="text1601-4"><tspan
-               sodipodi:role="line"
-               id="tspan1599-1"
-               x="44.034977"
-               y="-47.066288"
-               style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332">1.0</tspan></text>
-          <text
-             xml:space="preserve"
-             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
-             x="43.972965"
-             y="32.308716"
-             id="text1605-6"><tspan
-               sodipodi:role="line"
-               id="tspan1603-7"
-               x="43.972965"
-               y="32.308716"
-               style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332">0.0</tspan></text>
-          <path
-             inkscape:connector-curvature="0"
-             id="path1607-6"
-             d="M 47.437354,28.124992 V -6.2708429 m 10e-7,-5.2916661 v -34.395835"
-             style="fill:none;stroke:#000000;stroke-width:0.26458335px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker1483-7)" />
-          <text
-             xml:space="preserve"
-             style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
-             x="46.93816"
-             y="-7.8045983"
-             id="text1611-4"><tspan
-               sodipodi:role="line"
-               id="tspan1609-3"
-               x="46.93816"
-               y="-7.8045983"
-               style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458332">t</tspan></text>
-        </g>
-      </g>
-    </g>
-    <rect
-       style="fill:none;fill-opacity:1;stroke:#ff0000;stroke-width:0.52916668;stroke-linecap:square;stroke-miterlimit:4;stroke-dasharray:2.11666671,2.11666671;stroke-dashoffset:0;stroke-opacity:1"
-       id="rect1609"
-       width="37.041668"
-       height="37.041668"
-       x="58.020679"
-       y="-22.145849" />
-    <rect
-       style="fill:none;fill-opacity:1;stroke:#ff0000;stroke-width:0.52916668;stroke-linecap:square;stroke-miterlimit:4;stroke-dasharray:2.11666671,2.11666671;stroke-dashoffset:0;stroke-opacity:1"
-       id="rect1609-6"
-       width="37.041668"
-       height="37.041668"
-       x="132.10402"
-       y="-40.666683" />
-    <path
-       style="fill:none;stroke:#ff0000;stroke-width:0.26458335px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker1517)"
-       d="M 138.7186,-34.0521 84.479021,-16.060432"
-       id="path1842"
-       inkscape:connector-curvature="0"
-       sodipodi:nodetypes="cc" />
-    <circle
-       style="fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:0.26458335;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       id="path4517-0-8"
-       cx="150.62486"
-       cy="-22.145849"
-       r="0.92363214" />
-    <circle
-       style="fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:0.26458335;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       id="path4517-0-8-5"
-       cx="141.36444"
-       cy="-31.406267"
-       r="0.92363214" />
-    <path
-       style="fill:none;stroke:#ff0000;stroke-width:0.26458335px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow1Mend)"
-       d="m 150.36028,-22.410432 -8.20209,-8.202084"
-       id="path1063"
-       inkscape:connector-curvature="0"
-       sodipodi:nodetypes="cc" />
-    <path
-       inkscape:connector-curvature="0"
-       id="path2429"
-       d="m 129.45819,-43.312516 0,11.90625"
-       style="fill:#000000;stroke:#000000;stroke-width:0.26458335;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker2415)"
-       sodipodi:nodetypes="cc" />
-    <g
-       aria-label="β"
-       style="font-style:normal;font-weight:normal;font-size:10.58333302px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
-       id="text4435-7"
-       transform="translate(39.406026,-59.711681)">
-      <path
-         d="m 91.06502,15.340827 q 0,0.417545 -0.279053,0.690397 -0.276985,0.272851 -0.700732,0.272851 -0.163298,0 -0.345199,-0.04547 -0.181901,-0.04547 -0.312125,-0.132291 v 0.983919 h -0.388607 v -3.079915 q 0,-0.463021 0.260449,-0.725537 0.262517,-0.262517 0.72347,-0.262517 0.186035,0 0.338998,0.04548 0.155029,0.04341 0.276985,0.138492 0.117823,0.08888 0.188103,0.231511 0.07028,0.142627 0.07028,0.330729 0,0.262516 -0.144694,0.458887 -0.142626,0.194303 -0.405143,0.270784 v 0.03514 q 0.328662,0.05374 0.522966,0.260449 0.194303,0.204639 0.194303,0.5271 z m -0.401009,-0.01034 q 0,-0.183969 -0.07235,-0.297657 -0.07028,-0.115755 -0.190169,-0.179834 -0.121957,-0.06615 -0.272852,-0.08888 -0.150895,-0.02274 -0.30179,-0.02274 h -0.07441 v -0.330729 h 0.07441 q 0.136426,0 0.270784,-0.02894 0.134359,-0.03101 0.214974,-0.09302 0.09508,-0.07028 0.14056,-0.171566 0.04754,-0.101286 0.04754,-0.276986 0,-0.23151 -0.142627,-0.351399 -0.142627,-0.11989 -0.367937,-0.11989 -0.150895,0 -0.258382,0.05581 -0.107487,0.05374 -0.1757,0.144694 -0.06614,0.09095 -0.09715,0.212907 -0.03101,0.119889 -0.03101,0.248047 v 1.781803 q 0.136426,0.07855 0.291455,0.111621 0.155029,0.03101 0.303857,0.03101 0.307992,0 0.473356,-0.161231 0.167432,-0.163297 0.167432,-0.46302 z"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#000000;stroke-width:0.26458332"
-         id="path1092"
-         inkscape:connector-curvature="0" />
-    </g>
-    <path
-       inkscape:connector-curvature="0"
-       id="path2429-6"
-       d="m 129.45819,-24.791682 11.90625,0"
-       style="fill:#000000;stroke:#000000;stroke-width:0.26458335;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker2415-4)"
-       sodipodi:nodetypes="cc" />
-    <g
-       aria-label="α"
-       style="font-style:normal;font-weight:normal;font-size:10.58333302px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
-       id="text4435"
-       transform="translate(39.583579,-51.952863)">
-      <path
-         d="M 89.567652,28.315626 H 89.179045 V 28.07378 q -0.167432,0.144694 -0.349333,0.22531 -0.181901,0.08062 -0.394808,0.08062 -0.413411,0 -0.657324,-0.318327 -0.241845,-0.318327 -0.241845,-0.882633 0,-0.293522 0.08268,-0.522966 0.08475,-0.229443 0.227376,-0.390674 0.14056,-0.157096 0.326595,-0.239778 0.188102,-0.08268 0.388607,-0.08268 0.181901,0 0.322461,0.04548 0.14056,0.04547 0.295589,0.12609 v -0.107487 h 0.388607 z m -0.388607,-0.568441 v -1.314648 q -0.157096,-0.07028 -0.28112,-0.101286 -0.124023,-0.03307 -0.270784,-0.03307 -0.326595,0 -0.508496,0.227377 -0.181901,0.227376 -0.181901,0.644921 0,0.411345 0.14056,0.626319 0.140559,0.212907 0.450618,0.212907 0.165365,0 0.334863,-0.07235 0.169499,-0.07441 0.31626,-0.19017 z"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#000000;stroke-width:0.26458332"
-         id="path1089"
-         inkscape:connector-curvature="0" />
-    </g>
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:3.52777743px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
-       x="138.71861"
-       y="-35.375015"
-       id="text5070-2-1"><tspan
-         sodipodi:role="line"
-         id="tspan5068-0-6"
-         x="138.71861"
-         y="-35.375015"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:3.52777743px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f40000;fill-opacity:1;stroke-width:0.26458332"><tspan
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:3.52777743px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#000000;stroke-width:0.26458332"
-           id="tspan7821"> i0j0</tspan></tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:3.52777743px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
-       x="157.23944"
-       y="-35.375015"
-       id="text5070-2-1-7"><tspan
-         sodipodi:role="line"
-         id="tspan5068-0-6-0"
-         x="157.23944"
-         y="-35.375015"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:3.52777743px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f40000;fill-opacity:1;stroke-width:0.26458332"><tspan
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:3.52777743px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#000000;stroke-width:0.26458332"
-           id="tspan7821-1"> i1j0</tspan></tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:3.52777743px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
-       x="138.71861"
-       y="-16.854183"
-       id="text5070-2-1-0"><tspan
-         sodipodi:role="line"
-         id="tspan5068-0-6-9"
-         x="138.71861"
-         y="-16.854183"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:3.52777743px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f40000;fill-opacity:1;stroke-width:0.26458332"><tspan
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:3.52777743px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#000000;stroke-width:0.26458332"
-           id="tspan7821-8"> i0j1</tspan></tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:3.52777743px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
-       x="157.23944"
-       y="-16.854183"
-       id="text5070-2-1-2"><tspan
-         sodipodi:role="line"
-         id="tspan5068-0-6-6"
-         x="157.23944"
-         y="-16.854183"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:3.52777743px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f40000;fill-opacity:1;stroke-width:0.26458332"><tspan
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:3.52777743px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#000000;stroke-width:0.26458332"
-           id="tspan7821-9"> i1j1</tspan></tspan></text>
-    <g
-       aria-label="(Δi,Δj)"
-       style="font-style:normal;font-weight:normal;font-size:10.58333302px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
-       id="text5070-2-2"
-       transform="matrix(1.5625,0,0,1.5625,-11.182435,-64.739243)">
-      <path
-         d="m 71.619395,25.566439 h -0.219108 q -0.09302,-0.150895 -0.152962,-0.326595 -0.05994,-0.1757 -0.05994,-0.366903 0,-0.19637 0.04754,-0.378271 0.04754,-0.182935 0.139527,-0.359668 0.08785,-0.167432 0.209806,-0.317294 0.12299,-0.149861 0.270784,-0.285253 h 0.233578 v 0.01034 q -0.117822,0.08682 -0.24598,0.220141 -0.127124,0.133326 -0.229443,0.294556 -0.104387,0.164331 -0.170532,0.362769 -0.06511,0.197404 -0.06511,0.416512 0,0.224275 0.06511,0.408243 0.06511,0.185002 0.176733,0.311092 z"
-         style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.11666656px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f40000;fill-opacity:1;stroke-width:0.26458332"
-         id="path1095"
-         inkscape:connector-curvature="0" />
-      <path
-         d="m 73.377427,25.140625 h -1.434538 l 0.936377,-1.538924 h 0.272852 z m -0.226343,-0.166398 -0.173633,-1.192692 -0.72347,1.192692 z"
-         style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.11666656px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f40000;fill-opacity:1;stroke-width:0.26458332"
-         id="path1097"
-         inkscape:connector-curvature="0" />
-      <path
-         d="m 74.166009,23.591366 -0.04651,0.201538 H 73.90039 l 0.04651,-0.201538 z m -0.103353,0.394808 -0.26665,1.154451 h -0.194303 l 0.26665,-1.154451 z"
-         style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.11666656px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f40000;fill-opacity:1;stroke-width:0.26458332"
-         id="path1099"
-         inkscape:connector-curvature="0" />
-      <path
-         d="m 74.663137,24.846069 -0.448552,0.676962 H 74.06369 l 0.334863,-0.676962 z"
-         style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.11666656px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f40000;fill-opacity:1;stroke-width:0.26458332"
-         id="path1101"
-         inkscape:connector-curvature="0" />
-      <path
-         d="m 76.267173,25.140625 h -1.434538 l 0.936377,-1.538924 h 0.272852 z m -0.226343,-0.166398 -0.173632,-1.192692 -0.723471,1.192692 z"
-         style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.11666656px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f40000;fill-opacity:1;stroke-width:0.26458332"
-         id="path1103"
-         inkscape:connector-curvature="0" />
-      <path
-         d="m 77.162209,23.792904 h -0.221175 l 0.04651,-0.201538 h 0.221175 z M 76.83148,25.16853 q -0.04651,0.200505 -0.165365,0.304891 -0.117822,0.104387 -0.293522,0.104387 -0.04134,0 -0.10852,-0.0083 -0.06718,-0.0083 -0.110588,-0.02067 l 0.04031,-0.176734 h 0.01033 q 0.02997,0.01344 0.07131,0.02584 0.04031,0.01343 0.09405,0.01343 0.07235,0 0.120922,-0.02274 0.04961,-0.0217 0.08062,-0.06615 0.02997,-0.04341 0.04961,-0.10852 0.01964,-0.06408 0.03514,-0.134359 l 0.216007,-0.937411 h -0.240812 l 0.03617,-0.156062 h 0.437182 z"
-         style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.11666656px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f40000;fill-opacity:1;stroke-width:0.26458332"
-         id="path1105"
-         inkscape:connector-curvature="0" />
-      <path
-         d="m 77.977663,24.225952 q 0,0.195337 -0.04858,0.382406 -0.04858,0.186035 -0.138493,0.355534 -0.08992,0.169498 -0.212907,0.320393 -0.12299,0.151929 -0.267684,0.282154 h -0.233577 v -0.01034 q 0.118856,-0.08888 0.244946,-0.219108 0.127124,-0.129191 0.230477,-0.295589 0.117822,-0.190169 0.176733,-0.381372 0.05891,-0.191203 0.05891,-0.397908 0,-0.220142 -0.06511,-0.405144 -0.06408,-0.186035 -0.176733,-0.314192 v -0.01034 h 0.219108 q 0.09198,0.149861 0.151929,0.325561 0.06098,0.174666 0.06098,0.367936 z"
-         style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.11666656px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f40000;fill-opacity:1;stroke-width:0.26458332"
-         id="path1107"
-         inkscape:connector-curvature="0" />
-    </g>
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:3.52777743px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
-       x="143.54691"
-       y="-30.420969"
-       id="text5070"><tspan
-         sodipodi:role="line"
-         id="tspan5068"
-         x="143.54691"
-         y="-30.420969"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:3.52777743px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f40000;fill-opacity:1;stroke-width:0.26458332">(u-0.5, v-0.5)</tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:3.52777743px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
-       x="152.21477"
-       y="-21.160551"
-       id="text5070-2"><tspan
-         sodipodi:role="line"
-         id="tspan5068-0"
-         x="152.21477"
-         y="-21.160551"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:3.52777743px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f40000;fill-opacity:1;stroke-width:0.26458332">(u, v)</tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:3.52777743px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
-       x="64.635269"
-       y="-16.854183"
-       id="text5070-2-1-06"><tspan
-         sodipodi:role="line"
-         id="tspan5068-0-6-3"
-         x="64.635269"
-         y="-16.854183"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:3.52777743px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f40000;fill-opacity:1;stroke-width:0.26458332"><tspan
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:3.52777743px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#000000;stroke-width:0.26458332"
-           id="tspan7821-86"> i0j0'</tspan></tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:3.52777743px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
-       x="83.156105"
-       y="-16.854183"
-       id="text5070-2-1-25"><tspan
-         sodipodi:role="line"
-         id="tspan5068-0-6-7"
-         x="83.156105"
-         y="-16.854183"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:3.52777743px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f40000;fill-opacity:1;stroke-width:0.26458332"><tspan
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:3.52777743px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#000000;stroke-width:0.26458332"
-           id="tspan7821-7"> i1j0'</tspan></tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:3.52777743px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
-       x="64.635269"
-       y="1.6666514"
-       id="text5070-2-1-75"><tspan
-         sodipodi:role="line"
-         id="tspan5068-0-6-2"
-         x="64.635269"
-         y="1.6666514"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:3.52777743px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f40000;fill-opacity:1;stroke-width:0.26458332"><tspan
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:3.52777743px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#000000;stroke-width:0.26458332"
-           id="tspan7821-3"> i0j1'</tspan></tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:3.52777743px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
-       x="83.156105"
-       y="1.6666514"
-       id="text5070-2-1-3"><tspan
-         sodipodi:role="line"
-         id="tspan5068-0-6-8"
-         x="83.156105"
-         y="1.6666514"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:3.52777743px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f40000;fill-opacity:1;stroke-width:0.26458332"><tspan
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:3.52777743px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#000000;stroke-width:0.26458332"
-           id="tspan7821-4"> i1j1'</tspan></tspan></text>
-  </g>
-</svg>
diff --git a/registry/vulkan/images/vulkantexture1-ll.svg b/registry/vulkan/images/vulkantexture1-ll.svg
deleted file mode 100644
index e5dc411..0000000
--- a/registry/vulkan/images/vulkantexture1-ll.svg
+++ /dev/null
@@ -1,1008 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Created with Inkscape (http://www.inkscape.org/) -->
-
-<svg
-   xmlns:dc="http://purl.org/dc/elements/1.1/"
-   xmlns:cc="http://creativecommons.org/ns#"
-   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
-   xmlns:svg="http://www.w3.org/2000/svg"
-   xmlns="http://www.w3.org/2000/svg"
-   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
-   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
-   width="706.10547"
-   height="384.11328"
-   viewBox="0 0 186.82375 101.62997"
-   version="1.1"
-   id="svg8"
-   inkscape:version="0.92.4 (5da689c313, 2019-01-14)"
-   sodipodi:docname="vulkantexture1-ll.svg">
-  <defs
-     id="defs2">
-    <marker
-       inkscape:stockid="Arrow1Mend"
-       orient="auto"
-       refY="0.0"
-       refX="0.0"
-       id="marker2415"
-       style="overflow:visible;"
-       inkscape:isstock="true">
-      <path
-         id="path2413"
-         d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
-         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1"
-         transform="scale(0.4) rotate(180) translate(10,0)" />
-    </marker>
-    <marker
-       inkscape:isstock="true"
-       style="overflow:visible;"
-       id="marker1517"
-       refX="0.0"
-       refY="0.0"
-       orient="auto"
-       inkscape:stockid="Arrow1Mend"
-       inkscape:collect="always">
-      <path
-         transform="scale(0.4) rotate(180) translate(10,0)"
-         style="fill-rule:evenodd;stroke:#ff0000;stroke-width:1pt;stroke-opacity:1;fill:#ff0000;fill-opacity:1"
-         d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
-         id="path1515" />
-    </marker>
-    <marker
-       inkscape:stockid="Arrow2Lend"
-       orient="auto"
-       refY="0.0"
-       refX="0.0"
-       id="Arrow2Lend"
-       style="overflow:visible;"
-       inkscape:isstock="true">
-      <path
-         id="path1144"
-         style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round;stroke:#ff0000;stroke-opacity:1;fill:#ff0000;fill-opacity:1"
-         d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z "
-         transform="scale(1.1) rotate(180) translate(1,0)" />
-    </marker>
-    <marker
-       inkscape:isstock="true"
-       style="overflow:visible"
-       id="marker1073"
-       refX="0"
-       refY="0"
-       orient="auto"
-       inkscape:stockid="Arrow1Lend">
-      <path
-         transform="matrix(-0.8,0,0,-0.8,-10,0)"
-         style="fill:#ff0000;fill-opacity:1;fill-rule:evenodd;stroke:#ff0000;stroke-width:1.00000003pt;stroke-opacity:1"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         id="path1071"
-         inkscape:connector-curvature="0" />
-    </marker>
-    <marker
-       inkscape:isstock="true"
-       style="overflow:visible"
-       id="marker1483"
-       refX="0"
-       refY="0"
-       orient="auto"
-       inkscape:stockid="Arrow1Lend"
-       inkscape:collect="always">
-      <path
-         transform="matrix(-0.8,0,0,-0.8,-10,0)"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         id="path1481"
-         inkscape:connector-curvature="0" />
-    </marker>
-    <marker
-       inkscape:stockid="Arrow1Lend"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="Arrow1Lend"
-       style="overflow:visible"
-       inkscape:isstock="true"
-       inkscape:collect="always">
-      <path
-         id="path977"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         transform="matrix(-0.8,0,0,-0.8,-10,0)"
-         inkscape:connector-curvature="0" />
-    </marker>
-    <marker
-       inkscape:stockid="Arrow1Lend"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="Arrow1Lend-0"
-       style="overflow:visible"
-       inkscape:isstock="true">
-      <path
-         inkscape:connector-curvature="0"
-         id="path977-6"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         transform="matrix(-0.8,0,0,-0.8,-10,0)" />
-    </marker>
-    <marker
-       inkscape:isstock="true"
-       style="overflow:visible"
-       id="marker1483-7"
-       refX="0"
-       refY="0"
-       orient="auto"
-       inkscape:stockid="Arrow1Lend">
-      <path
-         inkscape:connector-curvature="0"
-         transform="matrix(-0.8,0,0,-0.8,-10,0)"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         id="path1481-0" />
-    </marker>
-    <marker
-       inkscape:stockid="Arrow1Mend"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="marker2415-4"
-       style="overflow:visible"
-       inkscape:isstock="true">
-      <path
-         inkscape:connector-curvature="0"
-         id="path2413-3"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         transform="matrix(-0.4,0,0,-0.4,-4,0)" />
-    </marker>
-  </defs>
-  <sodipodi:namedview
-     id="base"
-     pagecolor="#ffffff"
-     bordercolor="#666666"
-     borderopacity="1.0"
-     inkscape:pageopacity="0.0"
-     inkscape:pageshadow="2"
-     inkscape:zoom="2"
-     inkscape:cx="423.62557"
-     inkscape:cy="183.39269"
-     inkscape:document-units="px"
-     inkscape:current-layer="layer1"
-     showgrid="true"
-     inkscape:snap-object-midpoints="true"
-     inkscape:snap-text-baseline="true"
-     inkscape:window-width="2199"
-     inkscape:window-height="1151"
-     inkscape:window-x="356"
-     inkscape:window-y="398"
-     inkscape:window-maximized="0"
-     fit-margin-top="1"
-     fit-margin-right="1"
-     fit-margin-bottom="1"
-     fit-margin-left="1"
-     units="px"
-     inkscape:snap-center="false">
-    <inkscape:grid
-       type="xygrid"
-       id="grid12"
-       originx="0.79995428"
-       originy="-29.882412"
-       dotted="false" />
-  </sodipodi:namedview>
-  <metadata
-     id="metadata5">
-    <rdf:RDF>
-      <cc:Work
-         rdf:about="">
-        <dc:format>image/svg+xml</dc:format>
-        <dc:type
-           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
-        <dc:title />
-      </cc:Work>
-    </rdf:RDF>
-  </metadata>
-  <g
-     inkscape:label="Layer 1"
-     inkscape:groupmode="layer"
-     id="layer1"
-     transform="translate(-6.9498988,47.8249)">
-    <path
-       style="fill:none;stroke:#ff0000;stroke-width:0.26458335px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker1517)"
-       d="M 157.23948,2.9895792 102.99988,-15.002089"
-       id="path1842"
-       inkscape:connector-curvature="0"
-       sodipodi:nodetypes="cc" />
-    <g
-       id="g1953"
-       transform="translate(-2.6458349,-3.056108e-6)">
-      <text
-         id="text121"
-         y="-32.729179"
-         x="34.208187"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
-         xml:space="preserve"><tspan
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332"
-           y="-32.729179"
-           x="34.208187"
-           id="tspan119"
-           sodipodi:role="line">3</tspan></text>
-      <text
-         id="text121-3"
-         y="-14.208342"
-         x="34.208187"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
-         xml:space="preserve"><tspan
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332"
-           y="-14.208342"
-           x="34.208187"
-           id="tspan119-1"
-           sodipodi:role="line">2</tspan></text>
-      <text
-         id="text121-0"
-         y="4.3124924"
-         x="34.208187"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
-         xml:space="preserve"><tspan
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332"
-           y="4.3124924"
-           x="34.208187"
-           id="tspan119-4"
-           sodipodi:role="line">1</tspan></text>
-      <text
-         id="text121-33"
-         y="22.833326"
-         x="34.208187"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
-         xml:space="preserve"><tspan
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332"
-           y="22.833326"
-           x="34.208187"
-           id="tspan119-6"
-           sodipodi:role="line">0</tspan></text>
-      <text
-         id="text121-6"
-         y="36.062492"
-         x="47.437355"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
-         xml:space="preserve"><tspan
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332"
-           y="36.062492"
-           x="47.437355"
-           id="tspan119-11"
-           sodipodi:role="line">0</tspan></text>
-      <text
-         id="text121-30"
-         y="36.062492"
-         x="65.958191"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
-         xml:space="preserve"><tspan
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332"
-           y="36.062492"
-           x="65.958191"
-           id="tspan119-47"
-           sodipodi:role="line">1</tspan></text>
-      <text
-         id="text121-1"
-         y="36.062492"
-         x="84.479027"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
-         xml:space="preserve"><tspan
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332"
-           y="36.062492"
-           x="84.479027"
-           id="tspan119-9"
-           sodipodi:role="line">2</tspan></text>
-      <text
-         id="text121-8"
-         y="36.062492"
-         x="102.99986"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
-         xml:space="preserve"><tspan
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332"
-           y="36.062492"
-           x="102.99986"
-           id="tspan119-7"
-           sodipodi:role="line">3</tspan></text>
-      <text
-         id="text121-4"
-         y="36.062492"
-         x="121.52069"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
-         xml:space="preserve"><tspan
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332"
-           y="36.062492"
-           x="121.52069"
-           id="tspan119-0"
-           sodipodi:role="line">4</tspan></text>
-      <text
-         id="text121-7"
-         y="36.062492"
-         x="140.04152"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
-         xml:space="preserve"><tspan
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332"
-           y="36.062492"
-           x="140.04152"
-           id="tspan119-8"
-           sodipodi:role="line">5</tspan></text>
-      <text
-         id="text121-79"
-         y="36.062492"
-         x="158.56236"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
-         xml:space="preserve"><tspan
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332"
-           y="36.062492"
-           x="158.56236"
-           id="tspan119-16"
-           sodipodi:role="line">6</tspan></text>
-      <text
-         id="text121-31"
-         y="36.062492"
-         x="177.08319"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
-         xml:space="preserve"><tspan
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332"
-           y="36.062492"
-           x="177.08319"
-           id="tspan119-09"
-           sodipodi:role="line">7</tspan></text>
-      <text
-         id="text121-3-7"
-         y="-5.1587644"
-         x="34.4366"
-         style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
-         xml:space="preserve"><tspan
-           style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458332"
-           y="-5.1587644"
-           x="34.4366"
-           id="tspan119-1-8"
-           sodipodi:role="line">j</tspan></text>
-      <text
-         id="text121-3-7-3"
-         y="37.611752"
-         x="113.4819"
-         style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
-         xml:space="preserve"><tspan
-           style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458332"
-           y="37.611752"
-           x="113.4819"
-           id="tspan119-1-8-7"
-           sodipodi:role="line">i</tspan></text>
-      <g
-         transform="translate(-23.812502,2.2e-6)"
-         id="g1370">
-        <text
-           xml:space="preserve"
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
-           x="54.556301"
-           y="45.537884"
-           id="text121-09-74"><tspan
-             sodipodi:role="line"
-             id="tspan119-67-18"
-             x="54.556301"
-             y="45.537884"
-             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332">0.0</tspan></text>
-        <text
-           xml:space="preserve"
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
-           x="213.32181"
-           y="45.538918"
-           id="text121-09-74-5"><tspan
-             sodipodi:role="line"
-             id="tspan119-67-18-0"
-             x="213.32181"
-             y="45.538918"
-             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332">8.0</tspan></text>
-        <path
-           style="fill:none;stroke:#000000;stroke-width:0.26458335px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow1Lend)"
-           d="m 63.312355,43.999992 h 71.437505 m 5.29167,2e-6 h 71.4375"
-           id="path972"
-           inkscape:connector-curvature="0" />
-        <text
-           xml:space="preserve"
-           style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
-           x="137.32748"
-           y="45.122406"
-           id="text121-3-7-3-3"><tspan
-             sodipodi:role="line"
-             id="tspan119-1-8-7-2"
-             x="137.32748"
-             y="45.122406"
-             style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458332">u</tspan></text>
-      </g>
-      <g
-         transform="translate(-23.812505,7.9375005)"
-         id="g1471">
-        <text
-           xml:space="preserve"
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
-           x="54.556301"
-           y="45.537884"
-           id="text121-09-74-7"><tspan
-             sodipodi:role="line"
-             id="tspan119-67-18-1"
-             x="54.556301"
-             y="45.537884"
-             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332">0.0</tspan></text>
-        <text
-           xml:space="preserve"
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
-           x="213.32181"
-           y="45.538918"
-           id="text121-09-74-5-4"><tspan
-             sodipodi:role="line"
-             id="tspan119-67-18-0-9"
-             x="213.32181"
-             y="45.538918"
-             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332">1.0</tspan></text>
-        <path
-           style="fill:none;stroke:#000000;stroke-width:0.26458335px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow1Lend-0)"
-           d="m 63.312355,43.999992 h 71.437505 m 5.29167,2e-6 h 71.4375"
-           id="path972-8"
-           inkscape:connector-curvature="0" />
-        <text
-           xml:space="preserve"
-           style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
-           x="137.32748"
-           y="45.122406"
-           id="text121-3-7-3-3-5"><tspan
-             sodipodi:role="line"
-             id="tspan119-1-8-7-2-2"
-             x="137.32748"
-             y="45.122406"
-             style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458332">s</tspan></text>
-      </g>
-      <g
-         transform="translate(-23.812501,2.6458339)"
-         id="g1597">
-        <text
-           xml:space="preserve"
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
-           x="44.034977"
-           y="-47.066288"
-           id="text121-09"><tspan
-             sodipodi:role="line"
-             id="tspan119-67"
-             x="44.034977"
-             y="-47.066288"
-             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332">4.0</tspan></text>
-        <text
-           xml:space="preserve"
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
-           x="43.972965"
-           y="32.308716"
-           id="text121-09-7"><tspan
-             sodipodi:role="line"
-             id="tspan119-67-1"
-             x="43.972965"
-             y="32.308716"
-             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332">0.0</tspan></text>
-        <path
-           inkscape:connector-curvature="0"
-           id="path1473"
-           d="M 47.437354,28.124992 V -6.2708429 m 10e-7,-5.2916661 v -34.395835"
-           style="fill:none;stroke:#000000;stroke-width:0.26458335px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker1483)" />
-        <text
-           xml:space="preserve"
-           style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
-           x="46.93816"
-           y="-7.8045983"
-           id="text121-3-7-8"><tspan
-             sodipodi:role="line"
-             id="tspan119-1-8-3"
-             x="46.93816"
-             y="-7.8045983"
-             style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458332">v</tspan></text>
-      </g>
-      <g
-         id="g1613-5"
-         transform="translate(-34.395835,2.6458339)">
-        <g
-           id="g1802">
-          <text
-             xml:space="preserve"
-             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
-             x="44.034977"
-             y="-47.066288"
-             id="text1601-4"><tspan
-               sodipodi:role="line"
-               id="tspan1599-1"
-               x="44.034977"
-               y="-47.066288"
-               style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332">1.0</tspan></text>
-          <text
-             xml:space="preserve"
-             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
-             x="43.972965"
-             y="32.308716"
-             id="text1605-6"><tspan
-               sodipodi:role="line"
-               id="tspan1603-7"
-               x="43.972965"
-               y="32.308716"
-               style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332">0.0</tspan></text>
-          <path
-             inkscape:connector-curvature="0"
-             id="path1607-6"
-             d="M 47.437354,28.124992 V -6.2708429 m 10e-7,-5.2916661 v -34.395835"
-             style="fill:none;stroke:#000000;stroke-width:0.26458335px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker1483-7)" />
-          <text
-             xml:space="preserve"
-             style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
-             x="46.93816"
-             y="-7.8045983"
-             id="text1611-4"><tspan
-               sodipodi:role="line"
-               id="tspan1609-3"
-               x="46.93816"
-               y="-7.8045983"
-               style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458332">t</tspan></text>
-        </g>
-      </g>
-    </g>
-    <g
-       style="stroke-width:0.15119047;stroke-miterlimit:4;stroke-dasharray:none"
-       transform="matrix(1.7500001,0,0,-1.7500001,-27.968899,59.718765)"
-       id="g1463">
-      <circle
-         sodipodi:ry="0.52778977"
-         sodipodi:rx="0.52778977"
-         sodipodi:cy="21.833345"
-         sodipodi:cx="42.333332"
-         style="fill:#000000;fill-opacity:1;stroke:none"
-         id="path4517"
-         cx="42.333332"
-         cy="21.833345"
-         r="0.52778977"
-         d="m 42.861122,21.833345 c 0,0.291491 -0.2363,0.52779 -0.52779,0.52779 -0.29149,0 -0.52779,-0.236299 -0.52779,-0.52779 0,-0.29149 0.2363,-0.527789 0.52779,-0.527789 0.29149,0 0.52779,0.236299 0.52779,0.527789 z" />
-      <circle
-         sodipodi:ry="0.52778977"
-         sodipodi:rx="0.52778977"
-         sodipodi:cy="21.833345"
-         sodipodi:cx="52.916668"
-         style="fill:#000000;fill-opacity:1;stroke:none"
-         id="path4517-7"
-         cx="52.916668"
-         cy="21.833345"
-         r="0.52778977"
-         d="m 53.444458,21.833345 c 0,0.291491 -0.2363,0.52779 -0.52779,0.52779 -0.29149,0 -0.52779,-0.236299 -0.52779,-0.52779 0,-0.29149 0.2363,-0.527789 0.52779,-0.527789 0.29149,0 0.52779,0.236299 0.52779,0.527789 z" />
-      <circle
-         sodipodi:ry="0.52778977"
-         sodipodi:rx="0.52778977"
-         sodipodi:cy="21.833345"
-         sodipodi:cx="63.5"
-         style="fill:#000000;fill-opacity:1;stroke:none"
-         id="path4517-78"
-         cx="63.5"
-         cy="21.833345"
-         r="0.52778977"
-         d="m 64.02779,21.833345 c 0,0.291491 -0.2363,0.52779 -0.52779,0.52779 -0.29149,0 -0.52779,-0.236299 -0.52779,-0.52779 0,-0.29149 0.2363,-0.527789 0.52779,-0.527789 0.29149,0 0.52779,0.236299 0.52779,0.527789 z" />
-      <circle
-         sodipodi:ry="0.52778977"
-         sodipodi:rx="0.52778977"
-         sodipodi:cy="21.833345"
-         sodipodi:cx="74.083336"
-         style="fill:#000000;fill-opacity:1;stroke:none"
-         id="path4517-7-9"
-         cx="74.083336"
-         cy="21.833345"
-         r="0.52778977"
-         d="m 74.611126,21.833345 c 0,0.291491 -0.2363,0.52779 -0.52779,0.52779 -0.29149,0 -0.52779,-0.236299 -0.52779,-0.52779 0,-0.29149 0.2363,-0.527789 0.52779,-0.527789 0.29149,0 0.52779,0.236299 0.52779,0.527789 z" />
-      <circle
-         sodipodi:ry="0.52778977"
-         sodipodi:rx="0.52778977"
-         sodipodi:cy="21.833345"
-         sodipodi:cx="84.666664"
-         style="fill:#000000;fill-opacity:1;stroke:none"
-         id="path4517-0"
-         cx="84.666664"
-         cy="21.833345"
-         r="0.52778977"
-         d="m 85.194454,21.833345 c 0,0.291491 -0.2363,0.52779 -0.52779,0.52779 -0.29149,0 -0.52779,-0.236299 -0.52779,-0.52779 0,-0.29149 0.2363,-0.527789 0.52779,-0.527789 0.29149,0 0.52779,0.236299 0.52779,0.527789 z" />
-      <circle
-         sodipodi:ry="0.52778977"
-         sodipodi:rx="0.52778977"
-         sodipodi:cy="21.833345"
-         sodipodi:cx="95.25"
-         style="fill:#000000;fill-opacity:1;stroke:none"
-         id="path4517-7-0"
-         cx="95.25"
-         cy="21.833345"
-         r="0.52778977"
-         d="m 95.77779,21.833345 c 0,0.291491 -0.2363,0.52779 -0.52779,0.52779 -0.29149,0 -0.52779,-0.236299 -0.52779,-0.52779 0,-0.29149 0.2363,-0.527789 0.52779,-0.527789 0.29149,0 0.52779,0.236299 0.52779,0.527789 z" />
-      <circle
-         sodipodi:ry="0.52778977"
-         sodipodi:rx="0.52778977"
-         sodipodi:cy="21.833345"
-         sodipodi:cx="105.83334"
-         style="fill:#000000;fill-opacity:1;stroke:none"
-         id="path4517-1"
-         cx="105.83334"
-         cy="21.833345"
-         r="0.52778977"
-         d="m 106.36113,21.833345 c 0,0.291491 -0.2363,0.52779 -0.52779,0.52779 -0.29149,0 -0.52779,-0.236299 -0.52779,-0.52779 0,-0.29149 0.2363,-0.527789 0.52779,-0.527789 0.29149,0 0.52779,0.236299 0.52779,0.527789 z" />
-      <circle
-         sodipodi:ry="0.52778977"
-         sodipodi:rx="0.52778977"
-         sodipodi:cy="21.833345"
-         sodipodi:cx="116.41666"
-         style="fill:#000000;fill-opacity:1;stroke:none"
-         id="path4517-7-7"
-         cx="116.41666"
-         cy="21.833345"
-         r="0.52778977"
-         d="m 116.94445,21.833345 c 0,0.291491 -0.2363,0.52779 -0.52779,0.52779 -0.29149,0 -0.52779,-0.236299 -0.52779,-0.52779 0,-0.29149 0.2363,-0.527789 0.52779,-0.527789 0.29149,0 0.52779,0.236299 0.52779,0.527789 z" />
-        <path transform="translate(37.041666 16.541679) scale(0.25 0.25) scale(42.333333 42.333333)" style="fill:none;stroke:#808080;stroke-width:0.015;stroke-linecap:square"
-              d="M0,0 H8 M0,1 H8 M0,2 H8 M0,3 H8 M0,4 H8 M0,0 V4 M1,0 V4 M2,0 V4 M3,0 V4 M4,0 V4 M5,0 V4 M6,0 V4 M7,0 V4 M8,0 V4" />
-      <circle
-         sodipodi:ry="0.52778977"
-         sodipodi:rx="0.52778977"
-         sodipodi:cy="32.416679"
-         sodipodi:cx="42.333332"
-         style="fill:#000000;fill-opacity:1;stroke:none"
-         id="path4517-6"
-         cx="42.333332"
-         cy="32.416679"
-         r="0.52778977"
-         d="m 42.861122,32.416679 c 0,0.291491 -0.2363,0.52779 -0.52779,0.52779 -0.29149,0 -0.52779,-0.236299 -0.52779,-0.52779 0,-0.29149 0.2363,-0.527789 0.52779,-0.527789 0.29149,0 0.52779,0.236299 0.52779,0.527789 z" />
-      <circle
-         sodipodi:ry="0.52778977"
-         sodipodi:rx="0.52778977"
-         sodipodi:cy="32.416679"
-         sodipodi:cx="52.916668"
-         style="fill:#000000;fill-opacity:1;stroke:none"
-         id="path4517-7-3"
-         cx="52.916668"
-         cy="32.416679"
-         r="0.52778977"
-         d="m 53.444458,32.416679 c 0,0.291491 -0.2363,0.52779 -0.52779,0.52779 -0.29149,0 -0.52779,-0.236299 -0.52779,-0.52779 0,-0.29149 0.2363,-0.527789 0.52779,-0.527789 0.29149,0 0.52779,0.236299 0.52779,0.527789 z" />
-      <circle
-         sodipodi:ry="0.52778977"
-         sodipodi:rx="0.52778977"
-         sodipodi:cy="32.416679"
-         sodipodi:cx="63.5"
-         style="fill:#000000;fill-opacity:1;stroke:none"
-         id="path4517-78-9"
-         cx="63.5"
-         cy="32.416679"
-         r="0.52778977"
-         d="m 64.02779,32.416679 c 0,0.291491 -0.2363,0.52779 -0.52779,0.52779 -0.29149,0 -0.52779,-0.236299 -0.52779,-0.52779 0,-0.29149 0.2363,-0.527789 0.52779,-0.527789 0.29149,0 0.52779,0.236299 0.52779,0.527789 z" />
-      <circle
-         sodipodi:ry="0.52778977"
-         sodipodi:rx="0.52778977"
-         sodipodi:cy="32.416679"
-         sodipodi:cx="74.083336"
-         style="fill:#000000;fill-opacity:1;stroke:none"
-         id="path4517-7-9-1"
-         cx="74.083336"
-         cy="32.416679"
-         r="0.52778977"
-         d="m 74.611126,32.416679 c 0,0.291491 -0.2363,0.52779 -0.52779,0.52779 -0.29149,0 -0.52779,-0.236299 -0.52779,-0.52779 0,-0.29149 0.2363,-0.527789 0.52779,-0.527789 0.29149,0 0.52779,0.236299 0.52779,0.527789 z" />
-      <circle
-         sodipodi:ry="0.52778977"
-         sodipodi:rx="0.52778977"
-         sodipodi:cy="32.416679"
-         sodipodi:cx="84.666664"
-         style="fill:#000000;fill-opacity:1;stroke:none"
-         id="path4517-0-6"
-         cx="84.666664"
-         cy="32.416679"
-         r="0.52778977"
-         d="m 85.194454,32.416679 c 0,0.291491 -0.2363,0.52779 -0.52779,0.52779 -0.29149,0 -0.52779,-0.236299 -0.52779,-0.52779 0,-0.29149 0.2363,-0.527789 0.52779,-0.527789 0.29149,0 0.52779,0.236299 0.52779,0.527789 z" />
-      <circle
-         sodipodi:ry="0.52778977"
-         sodipodi:rx="0.52778977"
-         sodipodi:cy="32.416679"
-         sodipodi:cx="95.25"
-         style="fill:#000000;fill-opacity:1;stroke:none"
-         id="path4517-7-0-8"
-         cx="95.25"
-         cy="32.416679"
-         r="0.52778977"
-         d="m 95.77779,32.416679 c 0,0.291491 -0.2363,0.52779 -0.52779,0.52779 -0.29149,0 -0.52779,-0.236299 -0.52779,-0.52779 0,-0.29149 0.2363,-0.527789 0.52779,-0.527789 0.29149,0 0.52779,0.236299 0.52779,0.527789 z" />
-      <circle
-         sodipodi:ry="0.52778977"
-         sodipodi:rx="0.52778977"
-         sodipodi:cy="32.416679"
-         sodipodi:cx="105.83334"
-         style="fill:#000000;fill-opacity:1;stroke:none"
-         id="path4517-1-5"
-         cx="105.83334"
-         cy="32.416679"
-         r="0.52778977"
-         d="m 106.36113,32.416679 c 0,0.291491 -0.2363,0.52779 -0.52779,0.52779 -0.29149,0 -0.52779,-0.236299 -0.52779,-0.52779 0,-0.29149 0.2363,-0.527789 0.52779,-0.527789 0.29149,0 0.52779,0.236299 0.52779,0.527789 z" />
-      <circle
-         sodipodi:ry="0.52778977"
-         sodipodi:rx="0.52778977"
-         sodipodi:cy="32.416679"
-         sodipodi:cx="116.41665"
-         style="fill:#000000;fill-opacity:1;stroke:none"
-         id="path4517-7-7-5"
-         cx="116.41665"
-         cy="32.416679"
-         r="0.52778977"
-         d="m 116.94444,32.416679 c 0,0.291491 -0.2363,0.52779 -0.52779,0.52779 -0.29149,0 -0.52779,-0.236299 -0.52779,-0.52779 0,-0.29149 0.2363,-0.527789 0.52779,-0.527789 0.29149,0 0.52779,0.236299 0.52779,0.527789 z" />
-      <circle
-         sodipodi:ry="0.52778977"
-         sodipodi:rx="0.52778977"
-         sodipodi:cy="43.000011"
-         sodipodi:cx="42.333332"
-         style="fill:#000000;fill-opacity:1;stroke:none"
-         id="path4517-4"
-         cx="42.333332"
-         cy="43.000011"
-         r="0.52778977"
-         d="m 42.861122,43.000011 c 0,0.291491 -0.2363,0.52779 -0.52779,0.52779 -0.29149,0 -0.52779,-0.236299 -0.52779,-0.52779 0,-0.29149 0.2363,-0.527789 0.52779,-0.527789 0.29149,0 0.52779,0.236299 0.52779,0.527789 z" />
-      <circle
-         sodipodi:ry="0.52778977"
-         sodipodi:rx="0.52778977"
-         sodipodi:cy="43.000011"
-         sodipodi:cx="52.916668"
-         style="fill:#000000;fill-opacity:1;stroke:none"
-         id="path4517-7-2"
-         cx="52.916668"
-         cy="43.000011"
-         r="0.52778977"
-         d="m 53.444458,43.000011 c 0,0.291491 -0.2363,0.52779 -0.52779,0.52779 -0.29149,0 -0.52779,-0.236299 -0.52779,-0.52779 0,-0.29149 0.2363,-0.527789 0.52779,-0.527789 0.29149,0 0.52779,0.236299 0.52779,0.527789 z" />
-      <circle
-         sodipodi:ry="0.52778977"
-         sodipodi:rx="0.52778977"
-         sodipodi:cy="43.000011"
-         sodipodi:cx="63.5"
-         style="fill:#000000;fill-opacity:1;stroke:none"
-         id="path4517-78-3"
-         cx="63.5"
-         cy="43.000011"
-         r="0.52778977"
-         d="m 64.02779,43.000011 c 0,0.291491 -0.2363,0.52779 -0.52779,0.52779 -0.29149,0 -0.52779,-0.236299 -0.52779,-0.52779 0,-0.29149 0.2363,-0.527789 0.52779,-0.527789 0.29149,0 0.52779,0.236299 0.52779,0.527789 z" />
-      <circle
-         sodipodi:ry="0.52778977"
-         sodipodi:rx="0.52778977"
-         sodipodi:cy="43.000011"
-         sodipodi:cx="74.083336"
-         style="fill:#000000;fill-opacity:1;stroke:none"
-         id="path4517-7-9-0"
-         cx="74.083336"
-         cy="43.000011"
-         r="0.52778977"
-         d="m 74.611126,43.000011 c 0,0.291491 -0.2363,0.52779 -0.52779,0.52779 -0.29149,0 -0.52779,-0.236299 -0.52779,-0.52779 0,-0.29149 0.2363,-0.527789 0.52779,-0.527789 0.29149,0 0.52779,0.236299 0.52779,0.527789 z" />
-      <circle
-         sodipodi:ry="0.52778977"
-         sodipodi:rx="0.52778977"
-         sodipodi:cy="43.000011"
-         sodipodi:cx="84.666664"
-         style="fill:#000000;fill-opacity:1;stroke:none"
-         id="path4517-0-9"
-         cx="84.666664"
-         cy="43.000011"
-         r="0.52778977"
-         d="m 85.194454,43.000011 c 0,0.291491 -0.2363,0.52779 -0.52779,0.52779 -0.29149,0 -0.52779,-0.236299 -0.52779,-0.52779 0,-0.29149 0.2363,-0.527789 0.52779,-0.527789 0.29149,0 0.52779,0.236299 0.52779,0.527789 z" />
-      <circle
-         sodipodi:ry="0.52778977"
-         sodipodi:rx="0.52778977"
-         sodipodi:cy="43.000011"
-         sodipodi:cx="95.25"
-         style="fill:#000000;fill-opacity:1;stroke:none"
-         id="path4517-7-0-1"
-         cx="95.25"
-         cy="43.000011"
-         r="0.52778977"
-         d="m 95.77779,43.000011 c 0,0.291491 -0.2363,0.52779 -0.52779,0.52779 -0.29149,0 -0.52779,-0.236299 -0.52779,-0.52779 0,-0.29149 0.2363,-0.527789 0.52779,-0.527789 0.29149,0 0.52779,0.236299 0.52779,0.527789 z" />
-      <circle
-         sodipodi:ry="0.52778977"
-         sodipodi:rx="0.52778977"
-         sodipodi:cy="43.000011"
-         sodipodi:cx="105.83334"
-         style="fill:#000000;fill-opacity:1;stroke:none"
-         id="path4517-1-9"
-         cx="105.83334"
-         cy="43.000011"
-         r="0.52778977"
-         d="m 106.36113,43.000011 c 0,0.291491 -0.2363,0.52779 -0.52779,0.52779 -0.29149,0 -0.52779,-0.236299 -0.52779,-0.52779 0,-0.29149 0.2363,-0.527789 0.52779,-0.527789 0.29149,0 0.52779,0.236299 0.52779,0.527789 z" />
-      <circle
-         sodipodi:ry="0.52778977"
-         sodipodi:rx="0.52778977"
-         sodipodi:cy="43.000011"
-         sodipodi:cx="116.41665"
-         style="fill:#000000;fill-opacity:1;stroke:none"
-         id="path4517-7-7-7"
-         cx="116.41665"
-         cy="43.000011"
-         r="0.52778977"
-         d="m 116.94444,43.000011 c 0,0.291491 -0.2363,0.52779 -0.52779,0.52779 -0.29149,0 -0.52779,-0.236299 -0.52779,-0.52779 0,-0.29149 0.2363,-0.527789 0.52779,-0.527789 0.29149,0 0.52779,0.236299 0.52779,0.527789 z" />
-      <circle
-         sodipodi:ry="0.52778977"
-         sodipodi:rx="0.52778977"
-         sodipodi:cy="53.583344"
-         sodipodi:cx="42.333332"
-         style="fill:#000000;fill-opacity:1;stroke:none"
-         id="path4517-14"
-         cx="42.333332"
-         cy="53.583344"
-         r="0.52778977"
-         d="m 42.861122,53.583344 c 0,0.29149 -0.2363,0.527789 -0.52779,0.527789 -0.29149,0 -0.52779,-0.236299 -0.52779,-0.527789 0,-0.291491 0.2363,-0.52779 0.52779,-0.52779 0.29149,0 0.52779,0.236299 0.52779,0.52779 z" />
-      <circle
-         sodipodi:ry="0.52778977"
-         sodipodi:rx="0.52778977"
-         sodipodi:cy="53.583344"
-         sodipodi:cx="52.916668"
-         style="fill:#000000;fill-opacity:1;stroke:none"
-         id="path4517-7-4"
-         cx="52.916668"
-         cy="53.583344"
-         r="0.52778977"
-         d="m 53.444458,53.583344 c 0,0.29149 -0.2363,0.527789 -0.52779,0.527789 -0.29149,0 -0.52779,-0.236299 -0.52779,-0.527789 0,-0.291491 0.2363,-0.52779 0.52779,-0.52779 0.29149,0 0.52779,0.236299 0.52779,0.52779 z" />
-      <circle
-         sodipodi:ry="0.52778977"
-         sodipodi:rx="0.52778977"
-         sodipodi:cy="53.583344"
-         sodipodi:cx="63.5"
-         style="fill:#000000;fill-opacity:1;stroke:none"
-         id="path4517-78-7"
-         cx="63.5"
-         cy="53.583344"
-         r="0.52778977"
-         d="m 64.02779,53.583344 c 0,0.29149 -0.2363,0.527789 -0.52779,0.527789 -0.29149,0 -0.52779,-0.236299 -0.52779,-0.527789 0,-0.291491 0.2363,-0.52779 0.52779,-0.52779 0.29149,0 0.52779,0.236299 0.52779,0.52779 z" />
-      <circle
-         sodipodi:ry="0.52778977"
-         sodipodi:rx="0.52778977"
-         sodipodi:cy="53.583344"
-         sodipodi:cx="74.083336"
-         style="fill:#000000;fill-opacity:1;stroke:none"
-         id="path4517-7-9-8"
-         cx="74.083336"
-         cy="53.583344"
-         r="0.52778977"
-         d="m 74.611126,53.583344 c 0,0.29149 -0.2363,0.527789 -0.52779,0.527789 -0.29149,0 -0.52779,-0.236299 -0.52779,-0.527789 0,-0.291491 0.2363,-0.52779 0.52779,-0.52779 0.29149,0 0.52779,0.236299 0.52779,0.52779 z" />
-      <circle
-         sodipodi:ry="0.52778977"
-         sodipodi:rx="0.52778977"
-         sodipodi:cy="53.583344"
-         sodipodi:cx="84.666664"
-         style="fill:#000000;fill-opacity:1;stroke:none"
-         id="path4517-0-7"
-         cx="84.666664"
-         cy="53.583344"
-         r="0.52778977"
-         d="m 85.194454,53.583344 c 0,0.29149 -0.2363,0.527789 -0.52779,0.527789 -0.29149,0 -0.52779,-0.236299 -0.52779,-0.527789 0,-0.291491 0.2363,-0.52779 0.52779,-0.52779 0.29149,0 0.52779,0.236299 0.52779,0.52779 z" />
-      <circle
-         sodipodi:ry="0.52778977"
-         sodipodi:rx="0.52778977"
-         sodipodi:cy="53.583344"
-         sodipodi:cx="95.25"
-         style="fill:#000000;fill-opacity:1;stroke:none"
-         id="path4517-7-0-9"
-         cx="95.25"
-         cy="53.583344"
-         r="0.52778977"
-         d="m 95.77779,53.583344 c 0,0.29149 -0.2363,0.527789 -0.52779,0.527789 -0.29149,0 -0.52779,-0.236299 -0.52779,-0.527789 0,-0.291491 0.2363,-0.52779 0.52779,-0.52779 0.29149,0 0.52779,0.236299 0.52779,0.52779 z" />
-      <circle
-         sodipodi:ry="0.52778977"
-         sodipodi:rx="0.52778977"
-         sodipodi:cy="53.583344"
-         sodipodi:cx="105.83334"
-         style="fill:#000000;fill-opacity:1;stroke:none"
-         id="path4517-1-4"
-         cx="105.83334"
-         cy="53.583344"
-         r="0.52778977"
-         d="m 106.36113,53.583344 c 0,0.29149 -0.2363,0.527789 -0.52779,0.527789 -0.29149,0 -0.52779,-0.236299 -0.52779,-0.527789 0,-0.291491 0.2363,-0.52779 0.52779,-0.52779 0.29149,0 0.52779,0.236299 0.52779,0.52779 z" />
-      <circle
-         sodipodi:ry="0.52778977"
-         sodipodi:rx="0.52778977"
-         sodipodi:cy="53.583344"
-         sodipodi:cx="116.41665"
-         style="fill:#000000;fill-opacity:1;stroke:none"
-         id="path4517-7-7-52"
-         cx="116.41665"
-         cy="53.583344"
-         r="0.52778977"
-         d="m 116.94444,53.583344 c 0,0.29149 -0.2363,0.527789 -0.52779,0.527789 -0.29149,0 -0.52779,-0.236299 -0.52779,-0.527789 0,-0.291491 0.2363,-0.52779 0.52779,-0.52779 0.29149,0 0.52779,0.236299 0.52779,0.52779 z" />
-    </g>
-    <rect
-       style="fill:none;stroke:#ff0000;stroke-width:0.5291667;stroke-linecap:square;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:2.11666671, 2.11666671;stroke-dashoffset:0"
-       id="rect1609"
-       width="18.520826"
-       height="18.520876"
-       x="86.066528"
-       y="-0.079162598"
-       transform="scale(1,-1)" />
-    <rect
-       style="fill:none;stroke:#ff0000;stroke-width:0.5291667;stroke-linecap:square;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:2.11666671, 2.11666671;stroke-dashoffset:0"
-       id="rect1609-6"
-       width="18.520836"
-       height="18.520834"
-       x="141.62901"
-       y="-18.600004"
-       transform="scale(1,-1)" />
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none"
-       x="155.65187"
-       y="7.3173094"
-       id="text5070-2-1-0"><tspan
-         sodipodi:role="line"
-         id="tspan5068-0-6-9"
-         x="155.65187"
-         y="7.3173094"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:3.52777743px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f40000;fill-opacity:1"><tspan
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:3.52777743px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#000000"
-           id="tspan7821-8"> ij</tspan></tspan></text>
-    <g
-       aria-label="(Δi,Δj)"
-       style="font-size:10.58333302px;font-style:normal;font-weight:normal;line-height:1.25;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:sans-serif"
-       id="text5070-2-2"
-       transform="matrix(1.5625,0,0,1.5625,-1.1282694,-44.645549)">
-      <path
-         d="m 71.619395,25.566439 h -0.219108 q -0.09302,-0.150895 -0.152962,-0.326595 -0.05994,-0.1757 -0.05994,-0.366903 0,-0.19637 0.04754,-0.378271 0.04754,-0.182935 0.139527,-0.359668 0.08785,-0.167432 0.209806,-0.317294 0.12299,-0.149861 0.270784,-0.285253 h 0.233578 v 0.01034 q -0.117822,0.08682 -0.24598,0.220141 -0.127124,0.133326 -0.229443,0.294556 -0.104387,0.164331 -0.170532,0.362769 -0.06511,0.197404 -0.06511,0.416512 0,0.224275 0.06511,0.408243 0.06511,0.185002 0.176733,0.311092 z"
-         style="font-size:2.11666656px;font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f40000;fill-opacity:1;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic'"
-         id="path1095"
-         inkscape:connector-curvature="0" />
-      <path
-         d="m 73.377427,25.140625 h -1.434538 l 0.936377,-1.538924 h 0.272852 z m -0.226343,-0.166398 -0.173633,-1.192692 -0.72347,1.192692 z"
-         style="font-size:2.11666656px;font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f40000;fill-opacity:1;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic'"
-         id="path1097"
-         inkscape:connector-curvature="0" />
-      <path
-         d="m 74.166009,23.591366 -0.04651,0.201538 H 73.90039 l 0.04651,-0.201538 z m -0.103353,0.394808 -0.26665,1.154451 h -0.194303 l 0.26665,-1.154451 z"
-         style="font-size:2.11666656px;font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f40000;fill-opacity:1;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic'"
-         id="path1099"
-         inkscape:connector-curvature="0" />
-      <path
-         d="m 74.663137,24.846069 -0.448552,0.676962 H 74.06369 l 0.334863,-0.676962 z"
-         style="font-size:2.11666656px;font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f40000;fill-opacity:1;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic'"
-         id="path1101"
-         inkscape:connector-curvature="0" />
-      <path
-         d="m 76.267173,25.140625 h -1.434538 l 0.936377,-1.538924 h 0.272852 z m -0.226343,-0.166398 -0.173632,-1.192692 -0.723471,1.192692 z"
-         style="font-size:2.11666656px;font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f40000;fill-opacity:1;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic'"
-         id="path1103"
-         inkscape:connector-curvature="0" />
-      <path
-         d="m 77.162209,23.792904 h -0.221175 l 0.04651,-0.201538 h 0.221175 z M 76.83148,25.16853 q -0.04651,0.200505 -0.165365,0.304891 -0.117822,0.104387 -0.293522,0.104387 -0.04134,0 -0.10852,-0.0083 -0.06718,-0.0083 -0.110588,-0.02067 l 0.04031,-0.176734 h 0.01033 q 0.02997,0.01344 0.07131,0.02584 0.04031,0.01343 0.09405,0.01343 0.07235,0 0.120922,-0.02274 0.04961,-0.0217 0.08062,-0.06615 0.02997,-0.04341 0.04961,-0.10852 0.01964,-0.06408 0.03514,-0.134359 l 0.216007,-0.937411 h -0.240812 l 0.03617,-0.156062 h 0.437182 z"
-         style="font-size:2.11666656px;font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f40000;fill-opacity:1;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic'"
-         id="path1105"
-         inkscape:connector-curvature="0" />
-      <path
-         d="m 77.977663,24.225952 q 0,0.195337 -0.04858,0.382406 -0.04858,0.186035 -0.138493,0.355534 -0.08992,0.169498 -0.212907,0.320393 -0.12299,0.151929 -0.267684,0.282154 h -0.233577 v -0.01034 q 0.118856,-0.08888 0.244946,-0.219108 0.127124,-0.129191 0.230477,-0.295589 0.117822,-0.190169 0.176733,-0.381372 0.05891,-0.191203 0.05891,-0.397908 0,-0.220142 -0.06511,-0.405144 -0.06408,-0.186035 -0.176733,-0.314192 v -0.01034 h 0.219108 q 0.09198,0.149861 0.151929,0.325561 0.06098,0.174666 0.06098,0.367936 z"
-         style="font-size:2.11666656px;font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f40000;fill-opacity:1;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic'"
-         id="path1107"
-         inkscape:connector-curvature="0" />
-    </g>
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none"
-       x="99.560272"
-       y="-10.14519"
-       id="text5070-2-1-3"><tspan
-         sodipodi:role="line"
-         id="tspan5068-0-6-8"
-         x="99.560272"
-         y="-10.14519"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:3.52777743px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f40000;fill-opacity:1"><tspan
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:3.52777743px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#000000"
-           id="tspan7821-4"> ij'</tspan></tspan></text>
-    <circle
-       style="fill:#ff0000;fill-opacity:1;stroke:none"
-       id="path4517-0-8"
-       cx="150.62486"
-       cy="-22.145849"
-       r="0.92363214"
-       d="m 151.54849,-22.145849 c 0,0.510108 -0.41352,0.923632 -0.92363,0.923632 -0.51011,0 -0.92363,-0.413524 -0.92363,-0.923632 0,-0.510108 0.41352,-0.923632 0.92363,-0.923632 0.51011,0 0.92363,0.413524 0.92363,0.923632 z"
-       sodipodi:cx="150.62486"
-       sodipodi:cy="-22.145849"
-       sodipodi:rx="0.92363214"
-       sodipodi:ry="0.92363214"
-       transform="matrix(1,0,0,-1,0,-12.541691)" />
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none"
-       x="151.68561"
-       y="10.830611"
-       id="text5070-2"><tspan
-         sodipodi:role="line"
-         id="tspan5068-0"
-         x="151.68561"
-         y="10.830611"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:3.52777743px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f40000;fill-opacity:1">(u,v)</tspan></text>
-  </g>
-</svg>
diff --git a/registry/vulkan/images/vulkantexture1.svg b/registry/vulkan/images/vulkantexture1.svg
deleted file mode 100644
index fc5a04a..0000000
--- a/registry/vulkan/images/vulkantexture1.svg
+++ /dev/null
@@ -1,827 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Created with Inkscape (http://www.inkscape.org/) -->
-
-<svg
-   xmlns:dc="http://purl.org/dc/elements/1.1/"
-   xmlns:cc="http://creativecommons.org/ns#"
-   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
-   xmlns:svg="http://www.w3.org/2000/svg"
-   xmlns="http://www.w3.org/2000/svg"
-   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
-   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
-   width="706.10547"
-   height="384.11328"
-   viewBox="0 0 186.82375 101.62997"
-   version="1.1"
-   id="svg8"
-   inkscape:version="0.92.2 (5c3e80d, 2017-08-06)"
-   sodipodi:docname="vulkantexture1.svg">
-  <defs
-     id="defs2">
-    <marker
-       inkscape:stockid="Arrow1Mend"
-       orient="auto"
-       refY="0.0"
-       refX="0.0"
-       id="marker2415"
-       style="overflow:visible;"
-       inkscape:isstock="true">
-      <path
-         id="path2413"
-         d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
-         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1"
-         transform="scale(0.4) rotate(180) translate(10,0)" />
-    </marker>
-    <marker
-       inkscape:isstock="true"
-       style="overflow:visible;"
-       id="marker1517"
-       refX="0.0"
-       refY="0.0"
-       orient="auto"
-       inkscape:stockid="Arrow1Mend"
-       inkscape:collect="always">
-      <path
-         transform="scale(0.4) rotate(180) translate(10,0)"
-         style="fill-rule:evenodd;stroke:#ff0000;stroke-width:1pt;stroke-opacity:1;fill:#ff0000;fill-opacity:1"
-         d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
-         id="path1515" />
-    </marker>
-    <marker
-       inkscape:stockid="Arrow2Lend"
-       orient="auto"
-       refY="0.0"
-       refX="0.0"
-       id="Arrow2Lend"
-       style="overflow:visible;"
-       inkscape:isstock="true">
-      <path
-         id="path1144"
-         style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round;stroke:#ff0000;stroke-opacity:1;fill:#ff0000;fill-opacity:1"
-         d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z "
-         transform="scale(1.1) rotate(180) translate(1,0)" />
-    </marker>
-    <marker
-       inkscape:isstock="true"
-       style="overflow:visible"
-       id="marker1073"
-       refX="0"
-       refY="0"
-       orient="auto"
-       inkscape:stockid="Arrow1Lend">
-      <path
-         transform="matrix(-0.8,0,0,-0.8,-10,0)"
-         style="fill:#ff0000;fill-opacity:1;fill-rule:evenodd;stroke:#ff0000;stroke-width:1.00000003pt;stroke-opacity:1"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         id="path1071"
-         inkscape:connector-curvature="0" />
-    </marker>
-    <marker
-       inkscape:isstock="true"
-       style="overflow:visible"
-       id="marker1483"
-       refX="0"
-       refY="0"
-       orient="auto"
-       inkscape:stockid="Arrow1Lend"
-       inkscape:collect="always">
-      <path
-         transform="matrix(-0.8,0,0,-0.8,-10,0)"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         id="path1481"
-         inkscape:connector-curvature="0" />
-    </marker>
-    <marker
-       inkscape:stockid="Arrow1Lend"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="Arrow1Lend"
-       style="overflow:visible"
-       inkscape:isstock="true"
-       inkscape:collect="always">
-      <path
-         id="path977"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         transform="matrix(-0.8,0,0,-0.8,-10,0)"
-         inkscape:connector-curvature="0" />
-    </marker>
-    <marker
-       inkscape:stockid="Arrow1Lend"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="Arrow1Lend-0"
-       style="overflow:visible"
-       inkscape:isstock="true">
-      <path
-         inkscape:connector-curvature="0"
-         id="path977-6"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         transform="matrix(-0.8,0,0,-0.8,-10,0)" />
-    </marker>
-    <marker
-       inkscape:isstock="true"
-       style="overflow:visible"
-       id="marker1483-7"
-       refX="0"
-       refY="0"
-       orient="auto"
-       inkscape:stockid="Arrow1Lend">
-      <path
-         inkscape:connector-curvature="0"
-         transform="matrix(-0.8,0,0,-0.8,-10,0)"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         id="path1481-0" />
-    </marker>
-    <marker
-       inkscape:stockid="Arrow1Mend"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="marker2415-4"
-       style="overflow:visible"
-       inkscape:isstock="true">
-      <path
-         inkscape:connector-curvature="0"
-         id="path2413-3"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         transform="matrix(-0.4,0,0,-0.4,-4,0)" />
-    </marker>
-  </defs>
-  <sodipodi:namedview
-     id="base"
-     pagecolor="#ffffff"
-     bordercolor="#666666"
-     borderopacity="1.0"
-     inkscape:pageopacity="0.0"
-     inkscape:pageshadow="2"
-     inkscape:zoom="2"
-     inkscape:cx="423.62557"
-     inkscape:cy="223.39269"
-     inkscape:document-units="px"
-     inkscape:current-layer="layer1"
-     showgrid="true"
-     inkscape:snap-object-midpoints="true"
-     inkscape:snap-text-baseline="true"
-     inkscape:window-width="1680"
-     inkscape:window-height="987"
-     inkscape:window-x="1672"
-     inkscape:window-y="-8"
-     inkscape:window-maximized="0"
-     fit-margin-top="1"
-     fit-margin-right="1"
-     fit-margin-bottom="1"
-     fit-margin-left="1"
-     units="px"
-     inkscape:snap-center="false">
-    <inkscape:grid
-       type="xygrid"
-       id="grid12"
-       originx="0.79995428"
-       originy="-29.882412"
-       dotted="false" />
-  </sodipodi:namedview>
-  <metadata
-     id="metadata5">
-    <rdf:RDF>
-      <cc:Work
-         rdf:about="">
-        <dc:format>image/svg+xml</dc:format>
-        <dc:type
-           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
-        <dc:title></dc:title>
-      </cc:Work>
-    </rdf:RDF>
-  </metadata>
-  <g
-     inkscape:label="Layer 1"
-     inkscape:groupmode="layer"
-     id="layer1"
-     transform="translate(-6.9498988,47.8249)">
-    <g
-       id="g1953"
-       transform="translate(-2.6458349,-3.056108e-6)">
-      <text
-         id="text121"
-         y="-32.729179"
-         x="34.208187"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
-         xml:space="preserve"><tspan
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332"
-           y="-32.729179"
-           x="34.208187"
-           id="tspan119"
-           sodipodi:role="line">3</tspan></text>
-      <text
-         id="text121-3"
-         y="-14.208342"
-         x="34.208187"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
-         xml:space="preserve"><tspan
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332"
-           y="-14.208342"
-           x="34.208187"
-           id="tspan119-1"
-           sodipodi:role="line">2</tspan></text>
-      <text
-         id="text121-0"
-         y="4.3124924"
-         x="34.208187"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
-         xml:space="preserve"><tspan
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332"
-           y="4.3124924"
-           x="34.208187"
-           id="tspan119-4"
-           sodipodi:role="line">1</tspan></text>
-      <text
-         id="text121-33"
-         y="22.833326"
-         x="34.208187"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
-         xml:space="preserve"><tspan
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332"
-           y="22.833326"
-           x="34.208187"
-           id="tspan119-6"
-           sodipodi:role="line">0</tspan></text>
-      <text
-         id="text121-6"
-         y="36.062492"
-         x="47.437355"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
-         xml:space="preserve"><tspan
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332"
-           y="36.062492"
-           x="47.437355"
-           id="tspan119-11"
-           sodipodi:role="line">0</tspan></text>
-      <text
-         id="text121-30"
-         y="36.062492"
-         x="65.958191"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
-         xml:space="preserve"><tspan
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332"
-           y="36.062492"
-           x="65.958191"
-           id="tspan119-47"
-           sodipodi:role="line">1</tspan></text>
-      <text
-         id="text121-1"
-         y="36.062492"
-         x="84.479027"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
-         xml:space="preserve"><tspan
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332"
-           y="36.062492"
-           x="84.479027"
-           id="tspan119-9"
-           sodipodi:role="line">2</tspan></text>
-      <text
-         id="text121-8"
-         y="36.062492"
-         x="102.99986"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
-         xml:space="preserve"><tspan
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332"
-           y="36.062492"
-           x="102.99986"
-           id="tspan119-7"
-           sodipodi:role="line">3</tspan></text>
-      <text
-         id="text121-4"
-         y="36.062492"
-         x="121.52069"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
-         xml:space="preserve"><tspan
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332"
-           y="36.062492"
-           x="121.52069"
-           id="tspan119-0"
-           sodipodi:role="line">4</tspan></text>
-      <text
-         id="text121-7"
-         y="36.062492"
-         x="140.04152"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
-         xml:space="preserve"><tspan
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332"
-           y="36.062492"
-           x="140.04152"
-           id="tspan119-8"
-           sodipodi:role="line">5</tspan></text>
-      <text
-         id="text121-79"
-         y="36.062492"
-         x="158.56236"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
-         xml:space="preserve"><tspan
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332"
-           y="36.062492"
-           x="158.56236"
-           id="tspan119-16"
-           sodipodi:role="line">6</tspan></text>
-      <text
-         id="text121-31"
-         y="36.062492"
-         x="177.08319"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
-         xml:space="preserve"><tspan
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332"
-           y="36.062492"
-           x="177.08319"
-           id="tspan119-09"
-           sodipodi:role="line">7</tspan></text>
-      <text
-         id="text121-3-7"
-         y="-5.1587644"
-         x="34.4366"
-         style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
-         xml:space="preserve"><tspan
-           style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458332"
-           y="-5.1587644"
-           x="34.4366"
-           id="tspan119-1-8"
-           sodipodi:role="line">j</tspan></text>
-      <text
-         id="text121-3-7-3"
-         y="37.611752"
-         x="113.4819"
-         style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
-         xml:space="preserve"><tspan
-           style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458332"
-           y="37.611752"
-           x="113.4819"
-           id="tspan119-1-8-7"
-           sodipodi:role="line">i</tspan></text>
-      <g
-         style="stroke-width:0.15119047;stroke-miterlimit:4;stroke-dasharray:none"
-         transform="matrix(1.7500001,0,0,1.7500001,-25.323064,-72.260449)"
-         id="g1463">
-        <circle
-           style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15119047;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-           id="path4517"
-           cx="42.333332"
-           cy="21.833345"
-           r="0.52778977" />
-        <circle
-           style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15119047;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-           id="path4517-7"
-           cx="52.916668"
-           cy="21.833345"
-           r="0.52778977" />
-        <circle
-           style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15119047;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-           id="path4517-78"
-           cx="63.5"
-           cy="21.833345"
-           r="0.52778977" />
-        <circle
-           style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15119047;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-           id="path4517-7-9"
-           cx="74.083336"
-           cy="21.833345"
-           r="0.52778977" />
-        <circle
-           style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15119047;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-           id="path4517-0"
-           cx="84.666664"
-           cy="21.833345"
-           r="0.52778977" />
-        <circle
-           style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15119047;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-           id="path4517-7-0"
-           cx="95.25"
-           cy="21.833345"
-           r="0.52778977" />
-        <circle
-           style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15119047;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-           id="path4517-1"
-           cx="105.83334"
-           cy="21.833345"
-           r="0.52778977" />
-        <circle
-           style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15119047;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-           id="path4517-7-7"
-           cx="116.41666"
-           cy="21.833345"
-           r="0.52778977" />
-        <path
-           style="fill:none;stroke:#808080;stroke-width:0.15119047;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-           d="m 37.041666,16.541679 h 84.666664 l 1e-5,42.333333 H 37.041671 l -5e-6,-42.333333 m 10.583334,0 4e-6,42.333333 m 10.583332,0 -4e-6,-42.333333 m 10.583332,0 8e-6,42.333333 m 10.583336,0 -8e-6,-42.333333 m 10.583336,0 v 42.333333 m 10.583334,0 -1e-5,-42.333333 m 10.58333,0 1e-5,42.333333 M 121.70834,48.291681 H 37.041671 m -4e-6,-10.583336 h 84.666663 m 0,-10.583332 H 37.041667"
-           id="path1171"
-           inkscape:connector-curvature="0"
-           sodipodi:nodetypes="ccccccccccccccccccccccccc" />
-        <circle
-           style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15119047;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-           id="path4517-6"
-           cx="42.333332"
-           cy="32.416679"
-           r="0.52778977" />
-        <circle
-           style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15119047;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-           id="path4517-7-3"
-           cx="52.916668"
-           cy="32.416679"
-           r="0.52778977" />
-        <circle
-           style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15119047;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-           id="path4517-78-9"
-           cx="63.5"
-           cy="32.416679"
-           r="0.52778977" />
-        <circle
-           style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15119047;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-           id="path4517-7-9-1"
-           cx="74.083336"
-           cy="32.416679"
-           r="0.52778977" />
-        <circle
-           style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15119047;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-           id="path4517-0-6"
-           cx="84.666664"
-           cy="32.416679"
-           r="0.52778977" />
-        <circle
-           style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15119047;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-           id="path4517-7-0-8"
-           cx="95.25"
-           cy="32.416679"
-           r="0.52778977" />
-        <circle
-           style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15119047;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-           id="path4517-1-5"
-           cx="105.83334"
-           cy="32.416679"
-           r="0.52778977" />
-        <circle
-           style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15119047;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-           id="path4517-7-7-5"
-           cx="116.41665"
-           cy="32.416679"
-           r="0.52778977" />
-        <circle
-           style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15119047;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-           id="path4517-4"
-           cx="42.333332"
-           cy="43.000011"
-           r="0.52778977" />
-        <circle
-           style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15119047;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-           id="path4517-7-2"
-           cx="52.916668"
-           cy="43.000011"
-           r="0.52778977" />
-        <circle
-           style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15119047;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-           id="path4517-78-3"
-           cx="63.5"
-           cy="43.000011"
-           r="0.52778977" />
-        <circle
-           style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15119047;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-           id="path4517-7-9-0"
-           cx="74.083336"
-           cy="43.000011"
-           r="0.52778977" />
-        <circle
-           style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15119047;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-           id="path4517-0-9"
-           cx="84.666664"
-           cy="43.000011"
-           r="0.52778977" />
-        <circle
-           style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15119047;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-           id="path4517-7-0-1"
-           cx="95.25"
-           cy="43.000011"
-           r="0.52778977" />
-        <circle
-           style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15119047;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-           id="path4517-1-9"
-           cx="105.83334"
-           cy="43.000011"
-           r="0.52778977" />
-        <circle
-           style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15119047;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-           id="path4517-7-7-7"
-           cx="116.41665"
-           cy="43.000011"
-           r="0.52778977" />
-        <circle
-           style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15119047;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-           id="path4517-14"
-           cx="42.333332"
-           cy="53.583344"
-           r="0.52778977" />
-        <circle
-           style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15119047;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-           id="path4517-7-4"
-           cx="52.916668"
-           cy="53.583344"
-           r="0.52778977" />
-        <circle
-           style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15119047;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-           id="path4517-78-7"
-           cx="63.5"
-           cy="53.583344"
-           r="0.52778977" />
-        <circle
-           style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15119047;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-           id="path4517-7-9-8"
-           cx="74.083336"
-           cy="53.583344"
-           r="0.52778977" />
-        <circle
-           style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15119047;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-           id="path4517-0-7"
-           cx="84.666664"
-           cy="53.583344"
-           r="0.52778977" />
-        <circle
-           style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15119047;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-           id="path4517-7-0-9"
-           cx="95.25"
-           cy="53.583344"
-           r="0.52778977" />
-        <circle
-           style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15119047;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-           id="path4517-1-4"
-           cx="105.83334"
-           cy="53.583344"
-           r="0.52778977" />
-        <circle
-           style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15119047;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-           id="path4517-7-7-52"
-           cx="116.41665"
-           cy="53.583344"
-           r="0.52778977" />
-      </g>
-      <g
-         transform="translate(-23.812502,2.2e-6)"
-         id="g1370">
-        <text
-           xml:space="preserve"
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
-           x="54.556301"
-           y="45.537884"
-           id="text121-09-74"><tspan
-             sodipodi:role="line"
-             id="tspan119-67-18"
-             x="54.556301"
-             y="45.537884"
-             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332">0.0</tspan></text>
-        <text
-           xml:space="preserve"
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
-           x="213.32181"
-           y="45.538918"
-           id="text121-09-74-5"><tspan
-             sodipodi:role="line"
-             id="tspan119-67-18-0"
-             x="213.32181"
-             y="45.538918"
-             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332">8.0</tspan></text>
-        <path
-           style="fill:none;stroke:#000000;stroke-width:0.26458335px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow1Lend)"
-           d="m 63.312355,43.999992 h 71.437505 m 5.29167,2e-6 h 71.4375"
-           id="path972"
-           inkscape:connector-curvature="0" />
-        <text
-           xml:space="preserve"
-           style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
-           x="137.32748"
-           y="45.122406"
-           id="text121-3-7-3-3"><tspan
-             sodipodi:role="line"
-             id="tspan119-1-8-7-2"
-             x="137.32748"
-             y="45.122406"
-             style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458332">u</tspan></text>
-      </g>
-      <g
-         transform="translate(-23.812505,7.9375005)"
-         id="g1471">
-        <text
-           xml:space="preserve"
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
-           x="54.556301"
-           y="45.537884"
-           id="text121-09-74-7"><tspan
-             sodipodi:role="line"
-             id="tspan119-67-18-1"
-             x="54.556301"
-             y="45.537884"
-             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332">0.0</tspan></text>
-        <text
-           xml:space="preserve"
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
-           x="213.32181"
-           y="45.538918"
-           id="text121-09-74-5-4"><tspan
-             sodipodi:role="line"
-             id="tspan119-67-18-0-9"
-             x="213.32181"
-             y="45.538918"
-             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332">1.0</tspan></text>
-        <path
-           style="fill:none;stroke:#000000;stroke-width:0.26458335px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow1Lend-0)"
-           d="m 63.312355,43.999992 h 71.437505 m 5.29167,2e-6 h 71.4375"
-           id="path972-8"
-           inkscape:connector-curvature="0" />
-        <text
-           xml:space="preserve"
-           style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
-           x="137.32748"
-           y="45.122406"
-           id="text121-3-7-3-3-5"><tspan
-             sodipodi:role="line"
-             id="tspan119-1-8-7-2-2"
-             x="137.32748"
-             y="45.122406"
-             style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458332">s</tspan></text>
-      </g>
-      <g
-         transform="translate(-23.812501,2.6458339)"
-         id="g1597">
-        <text
-           xml:space="preserve"
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
-           x="44.034977"
-           y="-47.066288"
-           id="text121-09"><tspan
-             sodipodi:role="line"
-             id="tspan119-67"
-             x="44.034977"
-             y="-47.066288"
-             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332">4.0</tspan></text>
-        <text
-           xml:space="preserve"
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
-           x="43.972965"
-           y="32.308716"
-           id="text121-09-7"><tspan
-             sodipodi:role="line"
-             id="tspan119-67-1"
-             x="43.972965"
-             y="32.308716"
-             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332">0.0</tspan></text>
-        <path
-           inkscape:connector-curvature="0"
-           id="path1473"
-           d="M 47.437354,28.124992 V -6.2708429 m 10e-7,-5.2916661 v -34.395835"
-           style="fill:none;stroke:#000000;stroke-width:0.26458335px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker1483)" />
-        <text
-           xml:space="preserve"
-           style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
-           x="46.93816"
-           y="-7.8045983"
-           id="text121-3-7-8"><tspan
-             sodipodi:role="line"
-             id="tspan119-1-8-3"
-             x="46.93816"
-             y="-7.8045983"
-             style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458332">v</tspan></text>
-      </g>
-      <g
-         id="g1613-5"
-         transform="translate(-34.395835,2.6458339)">
-        <g
-           id="g1802">
-          <text
-             xml:space="preserve"
-             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
-             x="44.034977"
-             y="-47.066288"
-             id="text1601-4"><tspan
-               sodipodi:role="line"
-               id="tspan1599-1"
-               x="44.034977"
-               y="-47.066288"
-               style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332">1.0</tspan></text>
-          <text
-             xml:space="preserve"
-             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
-             x="43.972965"
-             y="32.308716"
-             id="text1605-6"><tspan
-               sodipodi:role="line"
-               id="tspan1603-7"
-               x="43.972965"
-               y="32.308716"
-               style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332">0.0</tspan></text>
-          <path
-             inkscape:connector-curvature="0"
-             id="path1607-6"
-             d="M 47.437354,28.124992 V -6.2708429 m 10e-7,-5.2916661 v -34.395835"
-             style="fill:none;stroke:#000000;stroke-width:0.26458335px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker1483-7)" />
-          <text
-             xml:space="preserve"
-             style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
-             x="46.93816"
-             y="-7.8045983"
-             id="text1611-4"><tspan
-               sodipodi:role="line"
-               id="tspan1609-3"
-               x="46.93816"
-               y="-7.8045983"
-               style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458332">t</tspan></text>
-        </g>
-      </g>
-    </g>
-    <rect
-       style="fill:none;fill-opacity:1;stroke:#ff0000;stroke-width:0.5291667;stroke-linecap:square;stroke-miterlimit:4;stroke-dasharray:2.11666671, 2.11666671;stroke-dashoffset:0;stroke-opacity:1"
-       id="rect1609"
-       width="18.520826"
-       height="18.520876"
-       x="76.541519"
-       y="-3.6250155" />
-    <rect
-       style="fill:none;fill-opacity:1;stroke:#ff0000;stroke-width:0.5291667;stroke-linecap:square;stroke-miterlimit:4;stroke-dasharray:2.11666671, 2.11666671;stroke-dashoffset:0;stroke-opacity:1"
-       id="rect1609-6"
-       width="18.520836"
-       height="18.520834"
-       x="132.10402"
-       y="-22.145849" />
-    <path
-       style="fill:none;stroke:#ff0000;stroke-width:0.26458335px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker1517)"
-       d="M 138.71861,-15.531266 84.479023,2.4604027"
-       id="path1842"
-       inkscape:connector-curvature="0"
-       sodipodi:nodetypes="cc" />
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:3.52777743px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
-       x="138.71861"
-       y="-16.854183"
-       id="text5070-2-1-0"><tspan
-         sodipodi:role="line"
-         id="tspan5068-0-6-9"
-         x="138.71861"
-         y="-16.854183"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:3.52777743px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f40000;fill-opacity:1;stroke-width:0.26458332"><tspan
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:3.52777743px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#000000;stroke-width:0.26458332"
-           id="tspan7821-8"> ij</tspan></tspan></text>
-    <g
-       aria-label="(Δi,Δj)"
-       style="font-style:normal;font-weight:normal;font-size:10.58333302px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
-       id="text5070-2-2"
-       transform="matrix(1.5625,0,0,1.5625,-11.182435,-46.21841)">
-      <path
-         d="m 71.619395,25.566439 h -0.219108 q -0.09302,-0.150895 -0.152962,-0.326595 -0.05994,-0.1757 -0.05994,-0.366903 0,-0.19637 0.04754,-0.378271 0.04754,-0.182935 0.139527,-0.359668 0.08785,-0.167432 0.209806,-0.317294 0.12299,-0.149861 0.270784,-0.285253 h 0.233578 v 0.01034 q -0.117822,0.08682 -0.24598,0.220141 -0.127124,0.133326 -0.229443,0.294556 -0.104387,0.164331 -0.170532,0.362769 -0.06511,0.197404 -0.06511,0.416512 0,0.224275 0.06511,0.408243 0.06511,0.185002 0.176733,0.311092 z"
-         style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.11666656px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f40000;fill-opacity:1;stroke-width:0.26458332"
-         id="path1095"
-         inkscape:connector-curvature="0" />
-      <path
-         d="m 73.377427,25.140625 h -1.434538 l 0.936377,-1.538924 h 0.272852 z m -0.226343,-0.166398 -0.173633,-1.192692 -0.72347,1.192692 z"
-         style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.11666656px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f40000;fill-opacity:1;stroke-width:0.26458332"
-         id="path1097"
-         inkscape:connector-curvature="0" />
-      <path
-         d="m 74.166009,23.591366 -0.04651,0.201538 H 73.90039 l 0.04651,-0.201538 z m -0.103353,0.394808 -0.26665,1.154451 h -0.194303 l 0.26665,-1.154451 z"
-         style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.11666656px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f40000;fill-opacity:1;stroke-width:0.26458332"
-         id="path1099"
-         inkscape:connector-curvature="0" />
-      <path
-         d="m 74.663137,24.846069 -0.448552,0.676962 H 74.06369 l 0.334863,-0.676962 z"
-         style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.11666656px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f40000;fill-opacity:1;stroke-width:0.26458332"
-         id="path1101"
-         inkscape:connector-curvature="0" />
-      <path
-         d="m 76.267173,25.140625 h -1.434538 l 0.936377,-1.538924 h 0.272852 z m -0.226343,-0.166398 -0.173632,-1.192692 -0.723471,1.192692 z"
-         style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.11666656px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f40000;fill-opacity:1;stroke-width:0.26458332"
-         id="path1103"
-         inkscape:connector-curvature="0" />
-      <path
-         d="m 77.162209,23.792904 h -0.221175 l 0.04651,-0.201538 h 0.221175 z M 76.83148,25.16853 q -0.04651,0.200505 -0.165365,0.304891 -0.117822,0.104387 -0.293522,0.104387 -0.04134,0 -0.10852,-0.0083 -0.06718,-0.0083 -0.110588,-0.02067 l 0.04031,-0.176734 h 0.01033 q 0.02997,0.01344 0.07131,0.02584 0.04031,0.01343 0.09405,0.01343 0.07235,0 0.120922,-0.02274 0.04961,-0.0217 0.08062,-0.06615 0.02997,-0.04341 0.04961,-0.10852 0.01964,-0.06408 0.03514,-0.134359 l 0.216007,-0.937411 h -0.240812 l 0.03617,-0.156062 h 0.437182 z"
-         style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.11666656px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f40000;fill-opacity:1;stroke-width:0.26458332"
-         id="path1105"
-         inkscape:connector-curvature="0" />
-      <path
-         d="m 77.977663,24.225952 q 0,0.195337 -0.04858,0.382406 -0.04858,0.186035 -0.138493,0.355534 -0.08992,0.169498 -0.212907,0.320393 -0.12299,0.151929 -0.267684,0.282154 h -0.233577 v -0.01034 q 0.118856,-0.08888 0.244946,-0.219108 0.127124,-0.129191 0.230477,-0.295589 0.117822,-0.190169 0.176733,-0.381372 0.05891,-0.191203 0.05891,-0.397908 0,-0.220142 -0.06511,-0.405144 -0.06408,-0.186035 -0.176733,-0.314192 v -0.01034 h 0.219108 q 0.09198,0.149861 0.151929,0.325561 0.06098,0.174666 0.06098,0.367936 z"
-         style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.11666656px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f40000;fill-opacity:1;stroke-width:0.26458332"
-         id="path1107"
-         inkscape:connector-curvature="0" />
-    </g>
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:3.52777743px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
-       x="83.156105"
-       y="1.6666514"
-       id="text5070-2-1-3"><tspan
-         sodipodi:role="line"
-         id="tspan5068-0-6-8"
-         x="83.156105"
-         y="1.6666514"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:3.52777743px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f40000;fill-opacity:1;stroke-width:0.26458332"><tspan
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:3.52777743px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#000000;stroke-width:0.26458332"
-           id="tspan7821-4"> ij'</tspan></tspan></text>
-  </g>
-</svg>
diff --git a/registry/vulkan/installRelease b/registry/vulkan/installRelease
deleted file mode 100755
index 6353a00..0000000
--- a/registry/vulkan/installRelease
+++ /dev/null
@@ -1,44 +0,0 @@
-#!/usr/bin/env bash
-#
-# Copyright 2016-2021 The Khronos Group Inc.
-#
-# SPDX-License-Identifier: Apache-2.0
-
-# Install release build with buildRelease into /promoters
-#
-# Essentially replaced by genRelease
-
-# Root of the Vulkan git repo
-root=/home/tree/git/vulkan
-
-# Directory with generated specs (core and core+WSI)
-genspec=$root/out
-
-# Promoter Vulkan directory in SVN
-svnroot=/home/tree/khronos
-promo=$svnroot/promoters/specs/candidates/vulkan
-
-# Directory name for this release
-date=`date +%Y%m%d`
-
-install=$promo/$date
-if test -d $install ; then
-    echo "Target directory $install already exists, may overwrite! Continuing..."
-else
-    echo "Creating target directory $install"
-    mkdir $install
-fi
-
-# Copy various files
-cp $genspec/promoter.html $install/index.html
-mkdir $install/core $install/wsi
-cp -rp $genspec/core $genspec/wsi $genspec/df $install
-
-echo "**** Specs are copied to $install"
-echo "**** Please ensure that:"
-echo "**** * The right files are all there"
-echo "**** * The Data Format spec is also there"
-echo "**** * Everything is added to SVN and committed to the server"
-echo "You can get there by:"
-echo "cd $promo"
-echo "svn add $date"
diff --git a/registry/vulkan/katex/README.md b/registry/vulkan/katex/README.md
deleted file mode 100644
index 5868416..0000000
--- a/registry/vulkan/katex/README.md
+++ /dev/null
@@ -1,91 +0,0 @@
-# [<img src="https://katex.org/img/katex-logo-black.svg" width="130" alt="KaTeX">](https://katex.org/)
-[![npm](https://img.shields.io/npm/v/katex.svg)](https://www.npmjs.com/package/katex)
-[![CircleCI](https://circleci.com/gh/KaTeX/KaTeX.svg?style=shield)](https://circleci.com/gh/KaTeX/KaTeX)
-[![codecov](https://codecov.io/gh/KaTeX/KaTeX/branch/master/graph/badge.svg)](https://codecov.io/gh/KaTeX/KaTeX)
-[![Join the chat at https://gitter.im/KaTeX/KaTeX](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/KaTeX/KaTeX?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
-[![Dependabot Status](https://api.dependabot.com/badges/status?host=github&repo=KaTeX/KaTeX)](https://dependabot.com)
-[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/katex/badge?style=rounded)](https://www.jsdelivr.com/package/npm/katex)
-![](https://img.badgesize.io/KaTeX/KaTeX/v0.11.1/dist/katex.min.js?compression=gzip)
-
-KaTeX is a fast, easy-to-use JavaScript library for TeX math rendering on the web.
-
- * **Fast:** KaTeX renders its math synchronously and doesn't need to reflow the page. See how it compares to a competitor in [this speed test](http://www.intmath.com/cg5/katex-mathjax-comparison.php).
- * **Print quality:** KaTeX's layout is based on Donald Knuth's TeX, the gold standard for math typesetting.
- * **Self contained:** KaTeX has no dependencies and can easily be bundled with your website resources.
- * **Server side rendering:** KaTeX produces the same output regardless of browser or environment, so you can pre-render expressions using Node.js and send them as plain HTML.
-
-KaTeX is compatible with all major browsers, including Chrome, Safari, Firefox, Opera, Edge, and IE 9–11.
-
-KaTeX supports much (but not all) of LaTeX and many LaTeX packages. See the [list of supported functions](https://katex.org/docs/supported.html).
-
-Try out KaTeX [on the demo page](https://katex.org/#demo)!
-
-## Getting started
-
-### Starter template
-
-```html
-<!DOCTYPE html>
-<!-- KaTeX requires the use of the HTML5 doctype. Without it, KaTeX may not render properly -->
-<html>
-  <head>
-    <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/katex@0.11.1/dist/katex.min.css" integrity="sha384-zB1R0rpPzHqg7Kpt0Aljp8JPLqbXI3bhnPWROx27a9N0Ll6ZP/+DiW/UqRcLbRjq" crossorigin="anonymous">
-
-    <!-- The loading of KaTeX is deferred to speed up page rendering -->
-    <script defer src="https://cdn.jsdelivr.net/npm/katex@0.11.1/dist/katex.min.js" integrity="sha384-y23I5Q6l+B6vatafAwxRu/0oK/79VlbSz7Q9aiSZUvyWYIYsd+qj+o24G5ZU2zJz" crossorigin="anonymous"></script>
-
-    <!-- To automatically render math in text elements, include the auto-render extension: -->
-    <script defer src="https://cdn.jsdelivr.net/npm/katex@0.11.1/dist/contrib/auto-render.min.js" integrity="sha384-kWPLUVMOks5AQFrykwIup5lo0m3iMkkHrD0uJ4H5cjeGihAutqP0yW0J6dpFiVkI" crossorigin="anonymous"
-        onload="renderMathInElement(document.body);"></script>
-  </head>
-  ...
-</html>
-```
-
-You can also [download KaTeX](https://github.com/KaTeX/KaTeX/releases) and host it yourself.
-
-For details on how to configure auto-render extension, refer to [the documentation](https://katex.org/docs/autorender.html).
-
-### API
-
-Call `katex.render` to render a TeX expression directly into a DOM element.
-For example:
-
-```js
-katex.render("c = \\pm\\sqrt{a^2 + b^2}", element, {
-    throwOnError: false
-});
-```
-
-Call `katex.renderToString` to generate an HTML string of the rendered math,
-e.g., for server-side rendering.  For example:
-
-```js
-var html = katex.renderToString("c = \\pm\\sqrt{a^2 + b^2}", {
-    throwOnError: false
-});
-// '<span class="katex">...</span>'
-```
-
-Make sure to include the CSS and font files in both cases.
-If you are doing all rendering on the server, there is no need to include the
-JavaScript on the client.
-
-The examples above use the `throwOnError: false` option, which renders invalid
-inputs as the TeX source code in red (by default), with the error message as
-hover text.  For other available options, see the
-[API documentation](https://katex.org/docs/api.html),
-[options documentation](https://katex.org/docs/options.html), and
-[handling errors documentation](https://katex.org/docs/error.html).
-
-## Demo and Documentation
-
-Learn more about using KaTeX [on the website](https://katex.org)!
-
-## Contributing
-
-See [CONTRIBUTING.md](CONTRIBUTING.md)
-
-## License
-
-KaTeX is licensed under the [MIT License](http://opensource.org/licenses/MIT).
diff --git a/registry/vulkan/katex/contrib/auto-render.js b/registry/vulkan/katex/contrib/auto-render.js
deleted file mode 100644
index d31cc7c..0000000
--- a/registry/vulkan/katex/contrib/auto-render.js
+++ /dev/null
@@ -1,339 +0,0 @@
-(function webpackUniversalModuleDefinition(root, factory) {
-	if(typeof exports === 'object' && typeof module === 'object')
-		module.exports = factory(require("katex"));
-	else if(typeof define === 'function' && define.amd)
-		define(["katex"], factory);
-	else if(typeof exports === 'object')
-		exports["renderMathInElement"] = factory(require("katex"));
-	else
-		root["renderMathInElement"] = factory(root["katex"]);
-})((typeof self !== 'undefined' ? self : this), function(__WEBPACK_EXTERNAL_MODULE__0__) {
-return /******/ (function(modules) { // webpackBootstrap
-/******/ 	// The module cache
-/******/ 	var installedModules = {};
-/******/
-/******/ 	// The require function
-/******/ 	function __webpack_require__(moduleId) {
-/******/
-/******/ 		// Check if module is in cache
-/******/ 		if(installedModules[moduleId]) {
-/******/ 			return installedModules[moduleId].exports;
-/******/ 		}
-/******/ 		// Create a new module (and put it into the cache)
-/******/ 		var module = installedModules[moduleId] = {
-/******/ 			i: moduleId,
-/******/ 			l: false,
-/******/ 			exports: {}
-/******/ 		};
-/******/
-/******/ 		// Execute the module function
-/******/ 		modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
-/******/
-/******/ 		// Flag the module as loaded
-/******/ 		module.l = true;
-/******/
-/******/ 		// Return the exports of the module
-/******/ 		return module.exports;
-/******/ 	}
-/******/
-/******/
-/******/ 	// expose the modules object (__webpack_modules__)
-/******/ 	__webpack_require__.m = modules;
-/******/
-/******/ 	// expose the module cache
-/******/ 	__webpack_require__.c = installedModules;
-/******/
-/******/ 	// define getter function for harmony exports
-/******/ 	__webpack_require__.d = function(exports, name, getter) {
-/******/ 		if(!__webpack_require__.o(exports, name)) {
-/******/ 			Object.defineProperty(exports, name, { enumerable: true, get: getter });
-/******/ 		}
-/******/ 	};
-/******/
-/******/ 	// define __esModule on exports
-/******/ 	__webpack_require__.r = function(exports) {
-/******/ 		if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
-/******/ 			Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
-/******/ 		}
-/******/ 		Object.defineProperty(exports, '__esModule', { value: true });
-/******/ 	};
-/******/
-/******/ 	// create a fake namespace object
-/******/ 	// mode & 1: value is a module id, require it
-/******/ 	// mode & 2: merge all properties of value into the ns
-/******/ 	// mode & 4: return value when already ns object
-/******/ 	// mode & 8|1: behave like require
-/******/ 	__webpack_require__.t = function(value, mode) {
-/******/ 		if(mode & 1) value = __webpack_require__(value);
-/******/ 		if(mode & 8) return value;
-/******/ 		if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
-/******/ 		var ns = Object.create(null);
-/******/ 		__webpack_require__.r(ns);
-/******/ 		Object.defineProperty(ns, 'default', { enumerable: true, value: value });
-/******/ 		if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
-/******/ 		return ns;
-/******/ 	};
-/******/
-/******/ 	// getDefaultExport function for compatibility with non-harmony modules
-/******/ 	__webpack_require__.n = function(module) {
-/******/ 		var getter = module && module.__esModule ?
-/******/ 			function getDefault() { return module['default']; } :
-/******/ 			function getModuleExports() { return module; };
-/******/ 		__webpack_require__.d(getter, 'a', getter);
-/******/ 		return getter;
-/******/ 	};
-/******/
-/******/ 	// Object.prototype.hasOwnProperty.call
-/******/ 	__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
-/******/
-/******/ 	// __webpack_public_path__
-/******/ 	__webpack_require__.p = "";
-/******/
-/******/
-/******/ 	// Load entry module and return exports
-/******/ 	return __webpack_require__(__webpack_require__.s = 1);
-/******/ })
-/************************************************************************/
-/******/ ([
-/* 0 */
-/***/ (function(module, exports) {
-
-module.exports = __WEBPACK_EXTERNAL_MODULE__0__;
-
-/***/ }),
-/* 1 */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-
-// EXTERNAL MODULE: external "katex"
-var external_katex_ = __webpack_require__(0);
-var external_katex_default = /*#__PURE__*/__webpack_require__.n(external_katex_);
-
-// CONCATENATED MODULE: ./contrib/auto-render/splitAtDelimiters.js
-/* eslint no-constant-condition:0 */
-var findEndOfMath = function findEndOfMath(delimiter, text, startIndex) {
-  // Adapted from
-  // https://github.com/Khan/perseus/blob/master/src/perseus-markdown.jsx
-  var index = startIndex;
-  var braceLevel = 0;
-  var delimLength = delimiter.length;
-
-  while (index < text.length) {
-    var character = text[index];
-
-    if (braceLevel <= 0 && text.slice(index, index + delimLength) === delimiter) {
-      return index;
-    } else if (character === "\\") {
-      index++;
-    } else if (character === "{") {
-      braceLevel++;
-    } else if (character === "}") {
-      braceLevel--;
-    }
-
-    index++;
-  }
-
-  return -1;
-};
-
-var splitAtDelimiters = function splitAtDelimiters(startData, leftDelim, rightDelim, display) {
-  var finalData = [];
-
-  for (var i = 0; i < startData.length; i++) {
-    if (startData[i].type === "text") {
-      var text = startData[i].data;
-      var lookingForLeft = true;
-      var currIndex = 0;
-      var nextIndex = void 0;
-      nextIndex = text.indexOf(leftDelim);
-
-      if (nextIndex !== -1) {
-        currIndex = nextIndex;
-        finalData.push({
-          type: "text",
-          data: text.slice(0, currIndex)
-        });
-        lookingForLeft = false;
-      }
-
-      while (true) {
-        if (lookingForLeft) {
-          nextIndex = text.indexOf(leftDelim, currIndex);
-
-          if (nextIndex === -1) {
-            break;
-          }
-
-          finalData.push({
-            type: "text",
-            data: text.slice(currIndex, nextIndex)
-          });
-          currIndex = nextIndex;
-        } else {
-          nextIndex = findEndOfMath(rightDelim, text, currIndex + leftDelim.length);
-
-          if (nextIndex === -1) {
-            break;
-          }
-
-          finalData.push({
-            type: "math",
-            data: text.slice(currIndex + leftDelim.length, nextIndex),
-            rawData: text.slice(currIndex, nextIndex + rightDelim.length),
-            display: display
-          });
-          currIndex = nextIndex + rightDelim.length;
-        }
-
-        lookingForLeft = !lookingForLeft;
-      }
-
-      finalData.push({
-        type: "text",
-        data: text.slice(currIndex)
-      });
-    } else {
-      finalData.push(startData[i]);
-    }
-  }
-
-  return finalData;
-};
-
-/* harmony default export */ var auto_render_splitAtDelimiters = (splitAtDelimiters);
-// CONCATENATED MODULE: ./contrib/auto-render/auto-render.js
-/* eslint no-console:0 */
-
-
-
-var auto_render_splitWithDelimiters = function splitWithDelimiters(text, delimiters) {
-  var data = [{
-    type: "text",
-    data: text
-  }];
-
-  for (var i = 0; i < delimiters.length; i++) {
-    var delimiter = delimiters[i];
-    data = auto_render_splitAtDelimiters(data, delimiter.left, delimiter.right, delimiter.display || false);
-  }
-
-  return data;
-};
-/* Note: optionsCopy is mutated by this method. If it is ever exposed in the
- * API, we should copy it before mutating.
- */
-
-
-var auto_render_renderMathInText = function renderMathInText(text, optionsCopy) {
-  var data = auto_render_splitWithDelimiters(text, optionsCopy.delimiters);
-  var fragment = document.createDocumentFragment();
-
-  for (var i = 0; i < data.length; i++) {
-    if (data[i].type === "text") {
-      fragment.appendChild(document.createTextNode(data[i].data));
-    } else {
-      var span = document.createElement("span");
-      var math = data[i].data; // Override any display mode defined in the settings with that
-      // defined by the text itself
-
-      optionsCopy.displayMode = data[i].display;
-
-      try {
-        if (optionsCopy.preProcess) {
-          math = optionsCopy.preProcess(math);
-        }
-
-        external_katex_default.a.render(math, span, optionsCopy);
-      } catch (e) {
-        if (!(e instanceof external_katex_default.a.ParseError)) {
-          throw e;
-        }
-
-        optionsCopy.errorCallback("KaTeX auto-render: Failed to parse `" + data[i].data + "` with ", e);
-        fragment.appendChild(document.createTextNode(data[i].rawData));
-        continue;
-      }
-
-      fragment.appendChild(span);
-    }
-  }
-
-  return fragment;
-};
-
-var renderElem = function renderElem(elem, optionsCopy) {
-  for (var i = 0; i < elem.childNodes.length; i++) {
-    var childNode = elem.childNodes[i];
-
-    if (childNode.nodeType === 3) {
-      // Text node
-      var frag = auto_render_renderMathInText(childNode.textContent, optionsCopy);
-      i += frag.childNodes.length - 1;
-      elem.replaceChild(frag, childNode);
-    } else if (childNode.nodeType === 1) {
-      (function () {
-        // Element node
-        var className = ' ' + childNode.className + ' ';
-        var shouldRender = optionsCopy.ignoredTags.indexOf(childNode.nodeName.toLowerCase()) === -1 && optionsCopy.ignoredClasses.every(function (x) {
-          return className.indexOf(' ' + x + ' ') === -1;
-        });
-
-        if (shouldRender) {
-          renderElem(childNode, optionsCopy);
-        }
-      })();
-    } // Otherwise, it's something else, and ignore it.
-
-  }
-};
-
-var renderMathInElement = function renderMathInElement(elem, options) {
-  if (!elem) {
-    throw new Error("No element provided to render");
-  }
-
-  var optionsCopy = {}; // Object.assign(optionsCopy, option)
-
-  for (var option in options) {
-    if (options.hasOwnProperty(option)) {
-      optionsCopy[option] = options[option];
-    }
-  } // default options
-
-
-  optionsCopy.delimiters = optionsCopy.delimiters || [{
-    left: "$$",
-    right: "$$",
-    display: true
-  }, {
-    left: "\\(",
-    right: "\\)",
-    display: false
-  }, // LaTeX uses $…$, but it ruins the display of normal `$` in text:
-  // {left: "$", right: "$", display: false},
-  //  \[…\] must come last in this array. Otherwise, renderMathInElement
-  //  will search for \[ before it searches for $$ or  \(
-  // That makes it susceptible to finding a \\[0.3em] row delimiter and
-  // treating it as if it were the start of a KaTeX math zone.
-  {
-    left: "\\[",
-    right: "\\]",
-    display: true
-  }];
-  optionsCopy.ignoredTags = optionsCopy.ignoredTags || ["script", "noscript", "style", "textarea", "pre", "code"];
-  optionsCopy.ignoredClasses = optionsCopy.ignoredClasses || [];
-  optionsCopy.errorCallback = optionsCopy.errorCallback || console.error; // Enable sharing of global macros defined via `\gdef` between different
-  // math elements within a single call to `renderMathInElement`.
-
-  optionsCopy.macros = optionsCopy.macros || {};
-  renderElem(elem, optionsCopy);
-};
-
-/* harmony default export */ var auto_render = __webpack_exports__["default"] = (renderMathInElement);
-
-/***/ })
-/******/ ])["default"];
-});
\ No newline at end of file
diff --git a/registry/vulkan/katex/contrib/auto-render.min.js b/registry/vulkan/katex/contrib/auto-render.min.js
deleted file mode 100644
index 3a6d663..0000000
--- a/registry/vulkan/katex/contrib/auto-render.min.js
+++ /dev/null
@@ -1 +0,0 @@
-!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t(require("katex")):"function"==typeof define&&define.amd?define(["katex"],t):"object"==typeof exports?exports.renderMathInElement=t(require("katex")):e.renderMathInElement=t(e.katex)}("undefined"!=typeof self?self:this,function(e){return function(e){var t={};function r(n){if(t[n])return t[n].exports;var o=t[n]={i:n,l:!1,exports:{}};return e[n].call(o.exports,o,o.exports,r),o.l=!0,o.exports}return r.m=e,r.c=t,r.d=function(e,t,n){r.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n})},r.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.t=function(e,t){if(1&t&&(e=r(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(r.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)r.d(n,o,function(t){return e[t]}.bind(null,o));return n},r.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return r.d(t,"a",t),t},r.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},r.p="",r(r.s=1)}([function(t,r){t.exports=e},function(e,t,r){"use strict";r.r(t);var n=r(0),o=r.n(n),a=function(e,t,r){for(var n=r,o=0,a=e.length;n<t.length;){var i=t[n];if(o<=0&&t.slice(n,n+a)===e)return n;"\\"===i?n++:"{"===i?o++:"}"===i&&o--,n++}return-1},i=function(e,t,r,n){for(var o=[],i=0;i<e.length;i++)if("text"===e[i].type){var l=e[i].data,d=!0,s=0,f=void 0;for(-1!==(f=l.indexOf(t))&&(s=f,o.push({type:"text",data:l.slice(0,s)}),d=!1);;){if(d){if(-1===(f=l.indexOf(t,s)))break;o.push({type:"text",data:l.slice(s,f)}),s=f}else{if(-1===(f=a(r,l,s+t.length)))break;o.push({type:"math",data:l.slice(s+t.length,f),rawData:l.slice(s,f+r.length),display:n}),s=f+r.length}d=!d}o.push({type:"text",data:l.slice(s)})}else o.push(e[i]);return o},l=function(e,t){for(var r=function(e,t){for(var r=[{type:"text",data:e}],n=0;n<t.length;n++){var o=t[n];r=i(r,o.left,o.right,o.display||!1)}return r}(e,t.delimiters),n=document.createDocumentFragment(),a=0;a<r.length;a++)if("text"===r[a].type)n.appendChild(document.createTextNode(r[a].data));else{var l=document.createElement("span"),d=r[a].data;t.displayMode=r[a].display;try{t.preProcess&&(d=t.preProcess(d)),o.a.render(d,l,t)}catch(e){if(!(e instanceof o.a.ParseError))throw e;t.errorCallback("KaTeX auto-render: Failed to parse `"+r[a].data+"` with ",e),n.appendChild(document.createTextNode(r[a].rawData));continue}n.appendChild(l)}return n};t.default=function(e,t){if(!e)throw new Error("No element provided to render");var r={};for(var n in t)t.hasOwnProperty(n)&&(r[n]=t[n]);r.delimiters=r.delimiters||[{left:"$$",right:"$$",display:!0},{left:"\\(",right:"\\)",display:!1},{left:"\\[",right:"\\]",display:!0}],r.ignoredTags=r.ignoredTags||["script","noscript","style","textarea","pre","code"],r.ignoredClasses=r.ignoredClasses||[],r.errorCallback=r.errorCallback||console.error,r.macros=r.macros||{},function e(t,r){for(var n=0;n<t.childNodes.length;n++){var o=t.childNodes[n];if(3===o.nodeType){var a=l(o.textContent,r);n+=a.childNodes.length-1,t.replaceChild(a,o)}else 1===o.nodeType&&function(){var t=" "+o.className+" ";-1===r.ignoredTags.indexOf(o.nodeName.toLowerCase())&&r.ignoredClasses.every(function(e){return-1===t.indexOf(" "+e+" ")})&&e(o,r)}()}}(e,r)}}]).default});
\ No newline at end of file
diff --git a/registry/vulkan/katex/contrib/auto-render.mjs b/registry/vulkan/katex/contrib/auto-render.mjs
deleted file mode 100644
index 58de8b6..0000000
--- a/registry/vulkan/katex/contrib/auto-render.mjs
+++ /dev/null
@@ -1,215 +0,0 @@
-import katex from '../katex.mjs';
-
-/* eslint no-constant-condition:0 */
-const findEndOfMath = function findEndOfMath(delimiter, text, startIndex) {
-  // Adapted from
-  // https://github.com/Khan/perseus/blob/master/src/perseus-markdown.jsx
-  let index = startIndex;
-  let braceLevel = 0;
-  const delimLength = delimiter.length;
-
-  while (index < text.length) {
-    const character = text[index];
-
-    if (braceLevel <= 0 && text.slice(index, index + delimLength) === delimiter) {
-      return index;
-    } else if (character === "\\") {
-      index++;
-    } else if (character === "{") {
-      braceLevel++;
-    } else if (character === "}") {
-      braceLevel--;
-    }
-
-    index++;
-  }
-
-  return -1;
-};
-
-const splitAtDelimiters = function splitAtDelimiters(startData, leftDelim, rightDelim, display) {
-  const finalData = [];
-
-  for (let i = 0; i < startData.length; i++) {
-    if (startData[i].type === "text") {
-      const text = startData[i].data;
-      let lookingForLeft = true;
-      let currIndex = 0;
-      let nextIndex;
-      nextIndex = text.indexOf(leftDelim);
-
-      if (nextIndex !== -1) {
-        currIndex = nextIndex;
-        finalData.push({
-          type: "text",
-          data: text.slice(0, currIndex)
-        });
-        lookingForLeft = false;
-      }
-
-      while (true) {
-        if (lookingForLeft) {
-          nextIndex = text.indexOf(leftDelim, currIndex);
-
-          if (nextIndex === -1) {
-            break;
-          }
-
-          finalData.push({
-            type: "text",
-            data: text.slice(currIndex, nextIndex)
-          });
-          currIndex = nextIndex;
-        } else {
-          nextIndex = findEndOfMath(rightDelim, text, currIndex + leftDelim.length);
-
-          if (nextIndex === -1) {
-            break;
-          }
-
-          finalData.push({
-            type: "math",
-            data: text.slice(currIndex + leftDelim.length, nextIndex),
-            rawData: text.slice(currIndex, nextIndex + rightDelim.length),
-            display: display
-          });
-          currIndex = nextIndex + rightDelim.length;
-        }
-
-        lookingForLeft = !lookingForLeft;
-      }
-
-      finalData.push({
-        type: "text",
-        data: text.slice(currIndex)
-      });
-    } else {
-      finalData.push(startData[i]);
-    }
-  }
-
-  return finalData;
-};
-
-/* eslint no-console:0 */
-
-const splitWithDelimiters = function splitWithDelimiters(text, delimiters) {
-  let data = [{
-    type: "text",
-    data: text
-  }];
-
-  for (let i = 0; i < delimiters.length; i++) {
-    const delimiter = delimiters[i];
-    data = splitAtDelimiters(data, delimiter.left, delimiter.right, delimiter.display || false);
-  }
-
-  return data;
-};
-/* Note: optionsCopy is mutated by this method. If it is ever exposed in the
- * API, we should copy it before mutating.
- */
-
-
-const renderMathInText = function renderMathInText(text, optionsCopy) {
-  const data = splitWithDelimiters(text, optionsCopy.delimiters);
-  const fragment = document.createDocumentFragment();
-
-  for (let i = 0; i < data.length; i++) {
-    if (data[i].type === "text") {
-      fragment.appendChild(document.createTextNode(data[i].data));
-    } else {
-      const span = document.createElement("span");
-      let math = data[i].data; // Override any display mode defined in the settings with that
-      // defined by the text itself
-
-      optionsCopy.displayMode = data[i].display;
-
-      try {
-        if (optionsCopy.preProcess) {
-          math = optionsCopy.preProcess(math);
-        }
-
-        katex.render(math, span, optionsCopy);
-      } catch (e) {
-        if (!(e instanceof katex.ParseError)) {
-          throw e;
-        }
-
-        optionsCopy.errorCallback("KaTeX auto-render: Failed to parse `" + data[i].data + "` with ", e);
-        fragment.appendChild(document.createTextNode(data[i].rawData));
-        continue;
-      }
-
-      fragment.appendChild(span);
-    }
-  }
-
-  return fragment;
-};
-
-const renderElem = function renderElem(elem, optionsCopy) {
-  for (let i = 0; i < elem.childNodes.length; i++) {
-    const childNode = elem.childNodes[i];
-
-    if (childNode.nodeType === 3) {
-      // Text node
-      const frag = renderMathInText(childNode.textContent, optionsCopy);
-      i += frag.childNodes.length - 1;
-      elem.replaceChild(frag, childNode);
-    } else if (childNode.nodeType === 1) {
-      // Element node
-      const className = ' ' + childNode.className + ' ';
-      const shouldRender = optionsCopy.ignoredTags.indexOf(childNode.nodeName.toLowerCase()) === -1 && optionsCopy.ignoredClasses.every(x => className.indexOf(' ' + x + ' ') === -1);
-
-      if (shouldRender) {
-        renderElem(childNode, optionsCopy);
-      }
-    } // Otherwise, it's something else, and ignore it.
-
-  }
-};
-
-const renderMathInElement = function renderMathInElement(elem, options) {
-  if (!elem) {
-    throw new Error("No element provided to render");
-  }
-
-  const optionsCopy = {}; // Object.assign(optionsCopy, option)
-
-  for (const option in options) {
-    if (options.hasOwnProperty(option)) {
-      optionsCopy[option] = options[option];
-    }
-  } // default options
-
-
-  optionsCopy.delimiters = optionsCopy.delimiters || [{
-    left: "$$",
-    right: "$$",
-    display: true
-  }, {
-    left: "\\(",
-    right: "\\)",
-    display: false
-  }, // LaTeX uses $…$, but it ruins the display of normal `$` in text:
-  // {left: "$", right: "$", display: false},
-  //  \[…\] must come last in this array. Otherwise, renderMathInElement
-  //  will search for \[ before it searches for $$ or  \(
-  // That makes it susceptible to finding a \\[0.3em] row delimiter and
-  // treating it as if it were the start of a KaTeX math zone.
-  {
-    left: "\\[",
-    right: "\\]",
-    display: true
-  }];
-  optionsCopy.ignoredTags = optionsCopy.ignoredTags || ["script", "noscript", "style", "textarea", "pre", "code"];
-  optionsCopy.ignoredClasses = optionsCopy.ignoredClasses || [];
-  optionsCopy.errorCallback = optionsCopy.errorCallback || console.error; // Enable sharing of global macros defined via `\gdef` between different
-  // math elements within a single call to `renderMathInElement`.
-
-  optionsCopy.macros = optionsCopy.macros || {};
-  renderElem(elem, optionsCopy);
-};
-
-export default renderMathInElement;
diff --git a/registry/vulkan/katex/contrib/copy-tex.css b/registry/vulkan/katex/contrib/copy-tex.css
deleted file mode 100644
index 90801d8..0000000
--- a/registry/vulkan/katex/contrib/copy-tex.css
+++ /dev/null
@@ -1,14 +0,0 @@
-/* Force selection of entire .katex/.katex-display blocks, so that we can
- * copy/paste the entire source code.  If you omit this CSS, partial
- * selections of a formula will work, but will copy the ugly HTML
- * representation instead of the LaTeX source code.  (Full selections will
- * still produce the LaTeX source code.)
- */
-.katex,
-.katex-display {
-    user-select: all;
-    -moz-user-select: all;
-    -webkit-user-select: all;
-    -ms-user-select: all;
-}
-
diff --git a/registry/vulkan/katex/contrib/copy-tex.js b/registry/vulkan/katex/contrib/copy-tex.js
deleted file mode 100644
index 4649f8f..0000000
--- a/registry/vulkan/katex/contrib/copy-tex.js
+++ /dev/null
@@ -1,213 +0,0 @@
-(function webpackUniversalModuleDefinition(root, factory) {
-	if(typeof exports === 'object' && typeof module === 'object')
-		module.exports = factory();
-	else if(typeof define === 'function' && define.amd)
-		define([], factory);
-	else {
-		var a = factory();
-		for(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];
-	}
-})((typeof self !== 'undefined' ? self : this), function() {
-return /******/ (function(modules) { // webpackBootstrap
-/******/ 	// The module cache
-/******/ 	var installedModules = {};
-/******/
-/******/ 	// The require function
-/******/ 	function __webpack_require__(moduleId) {
-/******/
-/******/ 		// Check if module is in cache
-/******/ 		if(installedModules[moduleId]) {
-/******/ 			return installedModules[moduleId].exports;
-/******/ 		}
-/******/ 		// Create a new module (and put it into the cache)
-/******/ 		var module = installedModules[moduleId] = {
-/******/ 			i: moduleId,
-/******/ 			l: false,
-/******/ 			exports: {}
-/******/ 		};
-/******/
-/******/ 		// Execute the module function
-/******/ 		modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
-/******/
-/******/ 		// Flag the module as loaded
-/******/ 		module.l = true;
-/******/
-/******/ 		// Return the exports of the module
-/******/ 		return module.exports;
-/******/ 	}
-/******/
-/******/
-/******/ 	// expose the modules object (__webpack_modules__)
-/******/ 	__webpack_require__.m = modules;
-/******/
-/******/ 	// expose the module cache
-/******/ 	__webpack_require__.c = installedModules;
-/******/
-/******/ 	// define getter function for harmony exports
-/******/ 	__webpack_require__.d = function(exports, name, getter) {
-/******/ 		if(!__webpack_require__.o(exports, name)) {
-/******/ 			Object.defineProperty(exports, name, { enumerable: true, get: getter });
-/******/ 		}
-/******/ 	};
-/******/
-/******/ 	// define __esModule on exports
-/******/ 	__webpack_require__.r = function(exports) {
-/******/ 		if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
-/******/ 			Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
-/******/ 		}
-/******/ 		Object.defineProperty(exports, '__esModule', { value: true });
-/******/ 	};
-/******/
-/******/ 	// create a fake namespace object
-/******/ 	// mode & 1: value is a module id, require it
-/******/ 	// mode & 2: merge all properties of value into the ns
-/******/ 	// mode & 4: return value when already ns object
-/******/ 	// mode & 8|1: behave like require
-/******/ 	__webpack_require__.t = function(value, mode) {
-/******/ 		if(mode & 1) value = __webpack_require__(value);
-/******/ 		if(mode & 8) return value;
-/******/ 		if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
-/******/ 		var ns = Object.create(null);
-/******/ 		__webpack_require__.r(ns);
-/******/ 		Object.defineProperty(ns, 'default', { enumerable: true, value: value });
-/******/ 		if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
-/******/ 		return ns;
-/******/ 	};
-/******/
-/******/ 	// getDefaultExport function for compatibility with non-harmony modules
-/******/ 	__webpack_require__.n = function(module) {
-/******/ 		var getter = module && module.__esModule ?
-/******/ 			function getDefault() { return module['default']; } :
-/******/ 			function getModuleExports() { return module; };
-/******/ 		__webpack_require__.d(getter, 'a', getter);
-/******/ 		return getter;
-/******/ 	};
-/******/
-/******/ 	// Object.prototype.hasOwnProperty.call
-/******/ 	__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
-/******/
-/******/ 	// __webpack_public_path__
-/******/ 	__webpack_require__.p = "";
-/******/
-/******/
-/******/ 	// Load entry module and return exports
-/******/ 	return __webpack_require__(__webpack_require__.s = 1);
-/******/ })
-/************************************************************************/
-/******/ ([
-/* 0 */
-/***/ (function(module, exports, __webpack_require__) {
-
-// extracted by mini-css-extract-plugin
-
-/***/ }),
-/* 1 */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-
-// EXTERNAL MODULE: ./contrib/copy-tex/copy-tex.css
-var copy_tex = __webpack_require__(0);
-
-// CONCATENATED MODULE: ./contrib/copy-tex/katex2tex.js
-// Set these to how you want inline and display math to be delimited.
-var defaultCopyDelimiters = {
-  inline: ['$', '$'],
-  // alternative: ['\(', '\)']
-  display: ['$$', '$$'] // alternative: ['\[', '\]']
-
-}; // Replace .katex elements with their TeX source (<annotation> element).
-// Modifies fragment in-place.  Useful for writing your own 'copy' handler,
-// as in copy-tex.js.
-
-var katexReplaceWithTex = function katexReplaceWithTex(fragment, copyDelimiters) {
-  if (copyDelimiters === void 0) {
-    copyDelimiters = defaultCopyDelimiters;
-  }
-
-  // Remove .katex-html blocks that are preceded by .katex-mathml blocks
-  // (which will get replaced below).
-  var katexHtml = fragment.querySelectorAll('.katex-mathml + .katex-html');
-
-  for (var i = 0; i < katexHtml.length; i++) {
-    var element = katexHtml[i];
-
-    if (element.remove) {
-      element.remove(null);
-    } else {
-      element.parentNode.removeChild(element);
-    }
-  } // Replace .katex-mathml elements with their annotation (TeX source)
-  // descendant, with inline delimiters.
-
-
-  var katexMathml = fragment.querySelectorAll('.katex-mathml');
-
-  for (var _i = 0; _i < katexMathml.length; _i++) {
-    var _element = katexMathml[_i];
-
-    var texSource = _element.querySelector('annotation');
-
-    if (texSource) {
-      if (_element.replaceWith) {
-        _element.replaceWith(texSource);
-      } else {
-        _element.parentNode.replaceChild(texSource, _element);
-      }
-
-      texSource.innerHTML = copyDelimiters.inline[0] + texSource.innerHTML + copyDelimiters.inline[1];
-    }
-  } // Switch display math to display delimiters.
-
-
-  var displays = fragment.querySelectorAll('.katex-display annotation');
-
-  for (var _i2 = 0; _i2 < displays.length; _i2++) {
-    var _element2 = displays[_i2];
-    _element2.innerHTML = copyDelimiters.display[0] + _element2.innerHTML.substr(copyDelimiters.inline[0].length, _element2.innerHTML.length - copyDelimiters.inline[0].length - copyDelimiters.inline[1].length) + copyDelimiters.display[1];
-  }
-
-  return fragment;
-};
-/* harmony default export */ var katex2tex = (katexReplaceWithTex);
-// CONCATENATED MODULE: ./contrib/copy-tex/copy-tex.js
- // Global copy handler to modify behavior on .katex elements.
-
-document.addEventListener('copy', function (event) {
-  var selection = window.getSelection();
-
-  if (selection.isCollapsed) {
-    return; // default action OK if selection is empty
-  }
-
-  var fragment = selection.getRangeAt(0).cloneContents();
-
-  if (!fragment.querySelector('.katex-mathml')) {
-    return; // default action OK if no .katex-mathml elements
-  } // Preserve usual HTML copy/paste behavior.
-
-
-  var html = [];
-
-  for (var i = 0; i < fragment.childNodes.length; i++) {
-    html.push(fragment.childNodes[i].outerHTML);
-  }
-
-  event.clipboardData.setData('text/html', html.join('')); // Rewrite plain-text version.
-
-  event.clipboardData.setData('text/plain', katex2tex(fragment).textContent); // Prevent normal copy handling.
-
-  event.preventDefault();
-});
-// CONCATENATED MODULE: ./contrib/copy-tex/copy-tex.webpack.js
-/**
- * This is the webpack entry point for KaTeX. As ECMAScript doesn't support
- * CSS modules natively, a separate entry point is used.
- */
-
-
-
-/***/ })
-/******/ ])["default"];
-});
\ No newline at end of file
diff --git a/registry/vulkan/katex/contrib/copy-tex.min.css b/registry/vulkan/katex/contrib/copy-tex.min.css
deleted file mode 100644
index 555ed11..0000000
--- a/registry/vulkan/katex/contrib/copy-tex.min.css
+++ /dev/null
@@ -1 +0,0 @@
-.katex,.katex-display{user-select:all;-moz-user-select:all;-webkit-user-select:all;-ms-user-select:all}
diff --git a/registry/vulkan/katex/contrib/copy-tex.min.js b/registry/vulkan/katex/contrib/copy-tex.min.js
deleted file mode 100644
index e0354d6..0000000
--- a/registry/vulkan/katex/contrib/copy-tex.min.js
+++ /dev/null
@@ -1 +0,0 @@
-!function(e,t){if("object"==typeof exports&&"object"==typeof module)module.exports=t();else if("function"==typeof define&&define.amd)define([],t);else{var n=t();for(var r in n)("object"==typeof exports?exports:e)[r]=n[r]}}("undefined"!=typeof self?self:this,function(){return function(e){var t={};function n(r){if(t[r])return t[r].exports;var o=t[r]={i:r,l:!1,exports:{}};return e[r].call(o.exports,o,o.exports,n),o.l=!0,o.exports}return n.m=e,n.c=t,n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)n.d(r,o,function(t){return e[t]}.bind(null,o));return r},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="",n(n.s=1)}([function(e,t,n){},function(e,t,n){"use strict";n.r(t);n(0);var r={inline:["$","$"],display:["$$","$$"]},o=function(e,t){void 0===t&&(t=r);for(var n=e.querySelectorAll(".katex-mathml + .katex-html"),o=0;o<n.length;o++){var l=n[o];l.remove?l.remove(null):l.parentNode.removeChild(l)}for(var i=e.querySelectorAll(".katex-mathml"),a=0;a<i.length;a++){var u=i[a],f=u.querySelector("annotation");f&&(u.replaceWith?u.replaceWith(f):u.parentNode.replaceChild(f,u),f.innerHTML=t.inline[0]+f.innerHTML+t.inline[1])}for(var c=e.querySelectorAll(".katex-display annotation"),d=0;d<c.length;d++){var p=c[d];p.innerHTML=t.display[0]+p.innerHTML.substr(t.inline[0].length,p.innerHTML.length-t.inline[0].length-t.inline[1].length)+t.display[1]}return e};document.addEventListener("copy",function(e){var t=window.getSelection();if(!t.isCollapsed){var n=t.getRangeAt(0).cloneContents();if(n.querySelector(".katex-mathml")){for(var r=[],l=0;l<n.childNodes.length;l++)r.push(n.childNodes[l].outerHTML);e.clipboardData.setData("text/html",r.join("")),e.clipboardData.setData("text/plain",o(n).textContent),e.preventDefault()}}})}]).default});
\ No newline at end of file
diff --git a/registry/vulkan/katex/contrib/copy-tex.mjs b/registry/vulkan/katex/contrib/copy-tex.mjs
deleted file mode 100644
index b6ed1ee..0000000
--- a/registry/vulkan/katex/contrib/copy-tex.mjs
+++ /dev/null
@@ -1,85 +0,0 @@
-// Set these to how you want inline and display math to be delimited.
-const defaultCopyDelimiters = {
-  inline: ['$', '$'],
-  // alternative: ['\(', '\)']
-  display: ['$$', '$$'] // alternative: ['\[', '\]']
-
-}; // Replace .katex elements with their TeX source (<annotation> element).
-// Modifies fragment in-place.  Useful for writing your own 'copy' handler,
-// as in copy-tex.js.
-
-const katexReplaceWithTex = function katexReplaceWithTex(fragment, copyDelimiters) {
-  if (copyDelimiters === void 0) {
-    copyDelimiters = defaultCopyDelimiters;
-  }
-
-  // Remove .katex-html blocks that are preceded by .katex-mathml blocks
-  // (which will get replaced below).
-  const katexHtml = fragment.querySelectorAll('.katex-mathml + .katex-html');
-
-  for (let i = 0; i < katexHtml.length; i++) {
-    const element = katexHtml[i];
-
-    if (element.remove) {
-      element.remove(null);
-    } else {
-      element.parentNode.removeChild(element);
-    }
-  } // Replace .katex-mathml elements with their annotation (TeX source)
-  // descendant, with inline delimiters.
-
-
-  const katexMathml = fragment.querySelectorAll('.katex-mathml');
-
-  for (let i = 0; i < katexMathml.length; i++) {
-    const element = katexMathml[i];
-    const texSource = element.querySelector('annotation');
-
-    if (texSource) {
-      if (element.replaceWith) {
-        element.replaceWith(texSource);
-      } else {
-        element.parentNode.replaceChild(texSource, element);
-      }
-
-      texSource.innerHTML = copyDelimiters.inline[0] + texSource.innerHTML + copyDelimiters.inline[1];
-    }
-  } // Switch display math to display delimiters.
-
-
-  const displays = fragment.querySelectorAll('.katex-display annotation');
-
-  for (let i = 0; i < displays.length; i++) {
-    const element = displays[i];
-    element.innerHTML = copyDelimiters.display[0] + element.innerHTML.substr(copyDelimiters.inline[0].length, element.innerHTML.length - copyDelimiters.inline[0].length - copyDelimiters.inline[1].length) + copyDelimiters.display[1];
-  }
-
-  return fragment;
-};
-
-document.addEventListener('copy', function (event) {
-  const selection = window.getSelection();
-
-  if (selection.isCollapsed) {
-    return; // default action OK if selection is empty
-  }
-
-  const fragment = selection.getRangeAt(0).cloneContents();
-
-  if (!fragment.querySelector('.katex-mathml')) {
-    return; // default action OK if no .katex-mathml elements
-  } // Preserve usual HTML copy/paste behavior.
-
-
-  const html = [];
-
-  for (let i = 0; i < fragment.childNodes.length; i++) {
-    html.push(fragment.childNodes[i].outerHTML);
-  }
-
-  event.clipboardData.setData('text/html', html.join('')); // Rewrite plain-text version.
-
-  event.clipboardData.setData('text/plain', katexReplaceWithTex(fragment).textContent); // Prevent normal copy handling.
-
-  event.preventDefault();
-});
diff --git a/registry/vulkan/katex/contrib/mathtex-script-type.js b/registry/vulkan/katex/contrib/mathtex-script-type.js
deleted file mode 100644
index daa01a6..0000000
--- a/registry/vulkan/katex/contrib/mathtex-script-type.js
+++ /dev/null
@@ -1,137 +0,0 @@
-(function webpackUniversalModuleDefinition(root, factory) {
-	if(typeof exports === 'object' && typeof module === 'object')
-		module.exports = factory(require("katex"));
-	else if(typeof define === 'function' && define.amd)
-		define(["katex"], factory);
-	else {
-		var a = typeof exports === 'object' ? factory(require("katex")) : factory(root["katex"]);
-		for(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];
-	}
-})((typeof self !== 'undefined' ? self : this), function(__WEBPACK_EXTERNAL_MODULE__0__) {
-return /******/ (function(modules) { // webpackBootstrap
-/******/ 	// The module cache
-/******/ 	var installedModules = {};
-/******/
-/******/ 	// The require function
-/******/ 	function __webpack_require__(moduleId) {
-/******/
-/******/ 		// Check if module is in cache
-/******/ 		if(installedModules[moduleId]) {
-/******/ 			return installedModules[moduleId].exports;
-/******/ 		}
-/******/ 		// Create a new module (and put it into the cache)
-/******/ 		var module = installedModules[moduleId] = {
-/******/ 			i: moduleId,
-/******/ 			l: false,
-/******/ 			exports: {}
-/******/ 		};
-/******/
-/******/ 		// Execute the module function
-/******/ 		modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
-/******/
-/******/ 		// Flag the module as loaded
-/******/ 		module.l = true;
-/******/
-/******/ 		// Return the exports of the module
-/******/ 		return module.exports;
-/******/ 	}
-/******/
-/******/
-/******/ 	// expose the modules object (__webpack_modules__)
-/******/ 	__webpack_require__.m = modules;
-/******/
-/******/ 	// expose the module cache
-/******/ 	__webpack_require__.c = installedModules;
-/******/
-/******/ 	// define getter function for harmony exports
-/******/ 	__webpack_require__.d = function(exports, name, getter) {
-/******/ 		if(!__webpack_require__.o(exports, name)) {
-/******/ 			Object.defineProperty(exports, name, { enumerable: true, get: getter });
-/******/ 		}
-/******/ 	};
-/******/
-/******/ 	// define __esModule on exports
-/******/ 	__webpack_require__.r = function(exports) {
-/******/ 		if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
-/******/ 			Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
-/******/ 		}
-/******/ 		Object.defineProperty(exports, '__esModule', { value: true });
-/******/ 	};
-/******/
-/******/ 	// create a fake namespace object
-/******/ 	// mode & 1: value is a module id, require it
-/******/ 	// mode & 2: merge all properties of value into the ns
-/******/ 	// mode & 4: return value when already ns object
-/******/ 	// mode & 8|1: behave like require
-/******/ 	__webpack_require__.t = function(value, mode) {
-/******/ 		if(mode & 1) value = __webpack_require__(value);
-/******/ 		if(mode & 8) return value;
-/******/ 		if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
-/******/ 		var ns = Object.create(null);
-/******/ 		__webpack_require__.r(ns);
-/******/ 		Object.defineProperty(ns, 'default', { enumerable: true, value: value });
-/******/ 		if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
-/******/ 		return ns;
-/******/ 	};
-/******/
-/******/ 	// getDefaultExport function for compatibility with non-harmony modules
-/******/ 	__webpack_require__.n = function(module) {
-/******/ 		var getter = module && module.__esModule ?
-/******/ 			function getDefault() { return module['default']; } :
-/******/ 			function getModuleExports() { return module; };
-/******/ 		__webpack_require__.d(getter, 'a', getter);
-/******/ 		return getter;
-/******/ 	};
-/******/
-/******/ 	// Object.prototype.hasOwnProperty.call
-/******/ 	__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
-/******/
-/******/ 	// __webpack_public_path__
-/******/ 	__webpack_require__.p = "";
-/******/
-/******/
-/******/ 	// Load entry module and return exports
-/******/ 	return __webpack_require__(__webpack_require__.s = 1);
-/******/ })
-/************************************************************************/
-/******/ ([
-/* 0 */
-/***/ (function(module, exports) {
-
-module.exports = __WEBPACK_EXTERNAL_MODULE__0__;
-
-/***/ }),
-/* 1 */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var katex__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(0);
-/* harmony import */ var katex__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(katex__WEBPACK_IMPORTED_MODULE_0__);
-
-var scripts = document.body.getElementsByTagName("script");
-scripts = Array.prototype.slice.call(scripts);
-scripts.forEach(function (script) {
-  if (!script.type || !script.type.match(/math\/tex/i)) {
-    return -1;
-  }
-
-  var display = script.type.match(/mode\s*=\s*display(;|\s|\n|$)/) != null;
-  var katexElement = document.createElement(display ? "div" : "span");
-  katexElement.setAttribute("class", display ? "equation" : "inline-equation");
-
-  try {
-    katex__WEBPACK_IMPORTED_MODULE_0___default.a.render(script.text, katexElement, {
-      displayMode: display
-    });
-  } catch (err) {
-    //console.error(err); linter doesn't like this
-    katexElement.textContent = script.text;
-  }
-
-  script.parentNode.replaceChild(katexElement, script);
-});
-
-/***/ })
-/******/ ])["default"];
-});
\ No newline at end of file
diff --git a/registry/vulkan/katex/contrib/mathtex-script-type.min.js b/registry/vulkan/katex/contrib/mathtex-script-type.min.js
deleted file mode 100644
index ae9f528..0000000
--- a/registry/vulkan/katex/contrib/mathtex-script-type.min.js
+++ /dev/null
@@ -1 +0,0 @@
-!function(e,t){if("object"==typeof exports&&"object"==typeof module)module.exports=t(require("katex"));else if("function"==typeof define&&define.amd)define(["katex"],t);else{var r="object"==typeof exports?t(require("katex")):t(e.katex);for(var n in r)("object"==typeof exports?exports:e)[n]=r[n]}}("undefined"!=typeof self?self:this,function(e){return function(e){var t={};function r(n){if(t[n])return t[n].exports;var o=t[n]={i:n,l:!1,exports:{}};return e[n].call(o.exports,o,o.exports,r),o.l=!0,o.exports}return r.m=e,r.c=t,r.d=function(e,t,n){r.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n})},r.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.t=function(e,t){if(1&t&&(e=r(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(r.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)r.d(n,o,function(t){return e[t]}.bind(null,o));return n},r.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return r.d(t,"a",t),t},r.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},r.p="",r(r.s=1)}([function(t,r){t.exports=e},function(e,t,r){"use strict";r.r(t);var n=r(0),o=r.n(n),u=document.body.getElementsByTagName("script");(u=Array.prototype.slice.call(u)).forEach(function(e){if(!e.type||!e.type.match(/math\/tex/i))return-1;var t=null!=e.type.match(/mode\s*=\s*display(;|\s|\n|$)/),r=document.createElement(t?"div":"span");r.setAttribute("class",t?"equation":"inline-equation");try{o.a.render(e.text,r,{displayMode:t})}catch(t){r.textContent=e.text}e.parentNode.replaceChild(r,e)})}]).default});
\ No newline at end of file
diff --git a/registry/vulkan/katex/contrib/mathtex-script-type.mjs b/registry/vulkan/katex/contrib/mathtex-script-type.mjs
deleted file mode 100644
index 7cfb90e..0000000
--- a/registry/vulkan/katex/contrib/mathtex-script-type.mjs
+++ /dev/null
@@ -1,24 +0,0 @@
-import katex from '../katex.mjs';
-
-let scripts = document.body.getElementsByTagName("script");
-scripts = Array.prototype.slice.call(scripts);
-scripts.forEach(function (script) {
-  if (!script.type || !script.type.match(/math\/tex/i)) {
-    return -1;
-  }
-
-  const display = script.type.match(/mode\s*=\s*display(;|\s|\n|$)/) != null;
-  const katexElement = document.createElement(display ? "div" : "span");
-  katexElement.setAttribute("class", display ? "equation" : "inline-equation");
-
-  try {
-    katex.render(script.text, katexElement, {
-      displayMode: display
-    });
-  } catch (err) {
-    //console.error(err); linter doesn't like this
-    katexElement.textContent = script.text;
-  }
-
-  script.parentNode.replaceChild(katexElement, script);
-});
diff --git a/registry/vulkan/katex/contrib/mhchem.js b/registry/vulkan/katex/contrib/mhchem.js
deleted file mode 100644
index f84566e..0000000
--- a/registry/vulkan/katex/contrib/mhchem.js
+++ /dev/null
@@ -1,3241 +0,0 @@
-(function webpackUniversalModuleDefinition(root, factory) {
-	if(typeof exports === 'object' && typeof module === 'object')
-		module.exports = factory(require("katex"));
-	else if(typeof define === 'function' && define.amd)
-		define(["katex"], factory);
-	else {
-		var a = typeof exports === 'object' ? factory(require("katex")) : factory(root["katex"]);
-		for(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];
-	}
-})((typeof self !== 'undefined' ? self : this), function(__WEBPACK_EXTERNAL_MODULE__0__) {
-return /******/ (function(modules) { // webpackBootstrap
-/******/ 	// The module cache
-/******/ 	var installedModules = {};
-/******/
-/******/ 	// The require function
-/******/ 	function __webpack_require__(moduleId) {
-/******/
-/******/ 		// Check if module is in cache
-/******/ 		if(installedModules[moduleId]) {
-/******/ 			return installedModules[moduleId].exports;
-/******/ 		}
-/******/ 		// Create a new module (and put it into the cache)
-/******/ 		var module = installedModules[moduleId] = {
-/******/ 			i: moduleId,
-/******/ 			l: false,
-/******/ 			exports: {}
-/******/ 		};
-/******/
-/******/ 		// Execute the module function
-/******/ 		modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
-/******/
-/******/ 		// Flag the module as loaded
-/******/ 		module.l = true;
-/******/
-/******/ 		// Return the exports of the module
-/******/ 		return module.exports;
-/******/ 	}
-/******/
-/******/
-/******/ 	// expose the modules object (__webpack_modules__)
-/******/ 	__webpack_require__.m = modules;
-/******/
-/******/ 	// expose the module cache
-/******/ 	__webpack_require__.c = installedModules;
-/******/
-/******/ 	// define getter function for harmony exports
-/******/ 	__webpack_require__.d = function(exports, name, getter) {
-/******/ 		if(!__webpack_require__.o(exports, name)) {
-/******/ 			Object.defineProperty(exports, name, { enumerable: true, get: getter });
-/******/ 		}
-/******/ 	};
-/******/
-/******/ 	// define __esModule on exports
-/******/ 	__webpack_require__.r = function(exports) {
-/******/ 		if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
-/******/ 			Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
-/******/ 		}
-/******/ 		Object.defineProperty(exports, '__esModule', { value: true });
-/******/ 	};
-/******/
-/******/ 	// create a fake namespace object
-/******/ 	// mode & 1: value is a module id, require it
-/******/ 	// mode & 2: merge all properties of value into the ns
-/******/ 	// mode & 4: return value when already ns object
-/******/ 	// mode & 8|1: behave like require
-/******/ 	__webpack_require__.t = function(value, mode) {
-/******/ 		if(mode & 1) value = __webpack_require__(value);
-/******/ 		if(mode & 8) return value;
-/******/ 		if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
-/******/ 		var ns = Object.create(null);
-/******/ 		__webpack_require__.r(ns);
-/******/ 		Object.defineProperty(ns, 'default', { enumerable: true, value: value });
-/******/ 		if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
-/******/ 		return ns;
-/******/ 	};
-/******/
-/******/ 	// getDefaultExport function for compatibility with non-harmony modules
-/******/ 	__webpack_require__.n = function(module) {
-/******/ 		var getter = module && module.__esModule ?
-/******/ 			function getDefault() { return module['default']; } :
-/******/ 			function getModuleExports() { return module; };
-/******/ 		__webpack_require__.d(getter, 'a', getter);
-/******/ 		return getter;
-/******/ 	};
-/******/
-/******/ 	// Object.prototype.hasOwnProperty.call
-/******/ 	__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
-/******/
-/******/ 	// __webpack_public_path__
-/******/ 	__webpack_require__.p = "";
-/******/
-/******/
-/******/ 	// Load entry module and return exports
-/******/ 	return __webpack_require__(__webpack_require__.s = 1);
-/******/ })
-/************************************************************************/
-/******/ ([
-/* 0 */
-/***/ (function(module, exports) {
-
-module.exports = __WEBPACK_EXTERNAL_MODULE__0__;
-
-/***/ }),
-/* 1 */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var katex__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(0);
-/* harmony import */ var katex__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(katex__WEBPACK_IMPORTED_MODULE_0__);
-/* eslint-disable */
-
-/* -*- Mode: Javascript; indent-tabs-mode:nil; js-indent-level: 2 -*- */
-
-/* vim: set ts=2 et sw=2 tw=80: */
-
-/*************************************************************
- *
- *  KaTeX mhchem.js
- *
- *  This file implements a KaTeX version of mhchem version 3.3.0.
- *  It is adapted from MathJax/extensions/TeX/mhchem.js
- *  It differs from the MathJax version as follows:
- *    1. The interface is changed so that it can be called from KaTeX, not MathJax.
- *    2. \rlap and \llap are replaced with \mathrlap and \mathllap.
- *    3. Four lines of code are edited in order to use \raisebox instead of \raise.
- *    4. The reaction arrow code is simplified. All reaction arrows are rendered
- *       using KaTeX extensible arrows instead of building non-extensible arrows.
- *    5. \tripledash vertical alignment is slightly adjusted.
- *
- *    This code, as other KaTeX code, is released under the MIT license.
- * 
- * /*************************************************************
- *
- *  MathJax/extensions/TeX/mhchem.js
- *
- *  Implements the \ce command for handling chemical formulas
- *  from the mhchem LaTeX package.
- *
- *  ---------------------------------------------------------------------
- *
- *  Copyright (c) 2011-2015 The MathJax Consortium
- *  Copyright (c) 2015-2018 Martin Hensel
- *
- *  Licensed under the Apache License, Version 2.0 (the "License");
- *  you may not use this file except in compliance with the License.
- *  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing, software
- *  distributed under the License is distributed on an "AS IS" BASIS,
- *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *  See the License for the specific language governing permissions and
- *  limitations under the License.
- */
-//
-// Coding Style
-//   - use '' for identifiers that can by minified/uglified
-//   - use "" for strings that need to stay untouched
-// version: "3.3.0" for MathJax and KaTeX
-// Add \ce, \pu, and \tripledash to the KaTeX macros.
-katex__WEBPACK_IMPORTED_MODULE_0___default.a.__defineMacro("\\ce", function (context) {
-  return chemParse(context.consumeArgs(1)[0], "ce");
-});
-
-katex__WEBPACK_IMPORTED_MODULE_0___default.a.__defineMacro("\\pu", function (context) {
-  return chemParse(context.consumeArgs(1)[0], "pu");
-}); //  Needed for \bond for the ~ forms
-//  Raise by 2.56mu, not 2mu. We're raising a hyphen-minus, U+002D, not 
-//  a mathematical minus, U+2212. So we need that extra 0.56.
-
-
-katex__WEBPACK_IMPORTED_MODULE_0___default.a.__defineMacro("\\tripledash", "{\\vphantom{-}\\raisebox{2.56mu}{$\\mkern2mu" + "\\tiny\\text{-}\\mkern1mu\\text{-}\\mkern1mu\\text{-}\\mkern2mu$}}");
-
- //
-//  This is the main function for handing the \ce and \pu commands.
-//  It takes the argument to \ce or \pu and returns the corresponding TeX string.
-//
-
-var chemParse = function chemParse(tokens, stateMachine) {
-  // Recreate the argument string from KaTeX's array of tokens.
-  var str = "";
-  var expectedLoc = tokens[tokens.length - 1].loc.start;
-
-  for (var i = tokens.length - 1; i >= 0; i--) {
-    if (tokens[i].loc.start > expectedLoc) {
-      // context.consumeArgs has eaten a space.
-      str += " ";
-      expectedLoc = tokens[i].loc.start;
-    }
-
-    str += tokens[i].text;
-    expectedLoc += tokens[i].text.length;
-  }
-
-  var tex = texify.go(mhchemParser.go(str, stateMachine));
-  return tex;
-}; //
-// Core parser for mhchem syntax  (recursive)
-//
-
-/** @type {MhchemParser} */
-
-
-var mhchemParser = {
-  //
-  // Parses mchem \ce syntax
-  //
-  // Call like
-  //   go("H2O");
-  //
-  go: function go(input, stateMachine) {
-    if (!input) {
-      return [];
-    }
-
-    if (stateMachine === undefined) {
-      stateMachine = 'ce';
-    }
-
-    var state = '0'; //
-    // String buffers for parsing:
-    //
-    // buffer.a == amount
-    // buffer.o == element
-    // buffer.b == left-side superscript
-    // buffer.p == left-side subscript
-    // buffer.q == right-side subscript
-    // buffer.d == right-side superscript
-    //
-    // buffer.r == arrow
-    // buffer.rdt == arrow, script above, type
-    // buffer.rd == arrow, script above, content
-    // buffer.rqt == arrow, script below, type
-    // buffer.rq == arrow, script below, content
-    //
-    // buffer.text_
-    // buffer.rm
-    // etc.
-    //
-    // buffer.parenthesisLevel == int, starting at 0
-    // buffer.sb == bool, space before
-    // buffer.beginsWithBond == bool
-    //
-    // These letters are also used as state names.
-    //
-    // Other states:
-    // 0 == begin of main part (arrow/operator unlikely)
-    // 1 == next entity
-    // 2 == next entity (arrow/operator unlikely)
-    // 3 == next atom
-    // c == macro
-    //
-
-    /** @type {Buffer} */
-
-    var buffer = {};
-    buffer['parenthesisLevel'] = 0;
-    input = input.replace(/\n/g, " ");
-    input = input.replace(/[\u2212\u2013\u2014\u2010]/g, "-");
-    input = input.replace(/[\u2026]/g, "..."); //
-    // Looks through mhchemParser.transitions, to execute a matching action
-    // (recursive)
-    //
-
-    var lastInput;
-    var watchdog = 10;
-    /** @type {ParserOutput[]} */
-
-    var output = [];
-
-    while (true) {
-      if (lastInput !== input) {
-        watchdog = 10;
-        lastInput = input;
-      } else {
-        watchdog--;
-      } //
-      // Find actions in transition table
-      //
-
-
-      var machine = mhchemParser.stateMachines[stateMachine];
-      var t = machine.transitions[state] || machine.transitions['*'];
-
-      iterateTransitions: for (var i = 0; i < t.length; i++) {
-        var matches = mhchemParser.patterns.match_(t[i].pattern, input);
-
-        if (matches) {
-          //
-          // Execute actions
-          //
-          var task = t[i].task;
-
-          for (var iA = 0; iA < task.action_.length; iA++) {
-            var o; //
-            // Find and execute action
-            //
-
-            if (machine.actions[task.action_[iA].type_]) {
-              o = machine.actions[task.action_[iA].type_](buffer, matches.match_, task.action_[iA].option);
-            } else if (mhchemParser.actions[task.action_[iA].type_]) {
-              o = mhchemParser.actions[task.action_[iA].type_](buffer, matches.match_, task.action_[iA].option);
-            } else {
-              throw ["MhchemBugA", "mhchem bug A. Please report. (" + task.action_[iA].type_ + ")"]; // Trying to use non-existing action
-            } //
-            // Add output
-            //
-
-
-            mhchemParser.concatArray(output, o);
-          } //
-          // Set next state,
-          // Shorten input,
-          // Continue with next character
-          //   (= apply only one transition per position)
-          //
-
-
-          state = task.nextState || state;
-
-          if (input.length > 0) {
-            if (!task.revisit) {
-              input = matches.remainder;
-            }
-
-            if (!task.toContinue) {
-              break iterateTransitions;
-            }
-          } else {
-            return output;
-          }
-        }
-      } //
-      // Prevent infinite loop
-      //
-
-
-      if (watchdog <= 0) {
-        throw ["MhchemBugU", "mhchem bug U. Please report."]; // Unexpected character
-      }
-    }
-  },
-  concatArray: function concatArray(a, b) {
-    if (b) {
-      if (Array.isArray(b)) {
-        for (var iB = 0; iB < b.length; iB++) {
-          a.push(b[iB]);
-        }
-      } else {
-        a.push(b);
-      }
-    }
-  },
-  patterns: {
-    //
-    // Matching patterns
-    // either regexps or function that return null or {match_:"a", remainder:"bc"}
-    //
-    patterns: {
-      // property names must not look like integers ("2") for correct property traversal order, later on
-      'empty': /^$/,
-      'else': /^./,
-      'else2': /^./,
-      'space': /^\s/,
-      'space A': /^\s(?=[A-Z\\$])/,
-      'space$': /^\s$/,
-      'a-z': /^[a-z]/,
-      'x': /^x/,
-      'x$': /^x$/,
-      'i$': /^i$/,
-      'letters': /^(?:[a-zA-Z\u03B1-\u03C9\u0391-\u03A9?@]|(?:\\(?:alpha|beta|gamma|delta|epsilon|zeta|eta|theta|iota|kappa|lambda|mu|nu|xi|omicron|pi|rho|sigma|tau|upsilon|phi|chi|psi|omega|Gamma|Delta|Theta|Lambda|Xi|Pi|Sigma|Upsilon|Phi|Psi|Omega)(?:\s+|\{\}|(?![a-zA-Z]))))+/,
-      '\\greek': /^\\(?:alpha|beta|gamma|delta|epsilon|zeta|eta|theta|iota|kappa|lambda|mu|nu|xi|omicron|pi|rho|sigma|tau|upsilon|phi|chi|psi|omega|Gamma|Delta|Theta|Lambda|Xi|Pi|Sigma|Upsilon|Phi|Psi|Omega)(?:\s+|\{\}|(?![a-zA-Z]))/,
-      'one lowercase latin letter $': /^(?:([a-z])(?:$|[^a-zA-Z]))$/,
-      '$one lowercase latin letter$ $': /^\$(?:([a-z])(?:$|[^a-zA-Z]))\$$/,
-      'one lowercase greek letter $': /^(?:\$?[\u03B1-\u03C9]\$?|\$?\\(?:alpha|beta|gamma|delta|epsilon|zeta|eta|theta|iota|kappa|lambda|mu|nu|xi|omicron|pi|rho|sigma|tau|upsilon|phi|chi|psi|omega)\s*\$?)(?:\s+|\{\}|(?![a-zA-Z]))$/,
-      'digits': /^[0-9]+/,
-      '-9.,9': /^[+\-]?(?:[0-9]+(?:[,.][0-9]+)?|[0-9]*(?:\.[0-9]+))/,
-      '-9.,9 no missing 0': /^[+\-]?[0-9]+(?:[.,][0-9]+)?/,
-      '(-)(9.,9)(e)(99)': function e99(input) {
-        var m = input.match(/^(\+\-|\+\/\-|\+|\-|\\pm\s?)?([0-9]+(?:[,.][0-9]+)?|[0-9]*(?:\.[0-9]+))?(\((?:[0-9]+(?:[,.][0-9]+)?|[0-9]*(?:\.[0-9]+))\))?(?:([eE]|\s*(\*|x|\\times|\u00D7)\s*10\^)([+\-]?[0-9]+|\{[+\-]?[0-9]+\}))?/);
-
-        if (m && m[0]) {
-          return {
-            match_: m.splice(1),
-            remainder: input.substr(m[0].length)
-          };
-        }
-
-        return null;
-      },
-      '(-)(9)^(-9)': function _(input) {
-        var m = input.match(/^(\+\-|\+\/\-|\+|\-|\\pm\s?)?([0-9]+(?:[,.][0-9]+)?|[0-9]*(?:\.[0-9]+)?)\^([+\-]?[0-9]+|\{[+\-]?[0-9]+\})/);
-
-        if (m && m[0]) {
-          return {
-            match_: m.splice(1),
-            remainder: input.substr(m[0].length)
-          };
-        }
-
-        return null;
-      },
-      'state of aggregation $': function stateOfAggregation$(input) {
-        // ... or crystal system
-        var a = mhchemParser.patterns.findObserveGroups(input, "", /^\([a-z]{1,3}(?=[\),])/, ")", ""); // (aq), (aq,$\infty$), (aq, sat)
-
-        if (a && a.remainder.match(/^($|[\s,;\)\]\}])/)) {
-          return a;
-        } //  AND end of 'phrase'
-
-
-        var m = input.match(/^(?:\((?:\\ca\s?)?\$[amothc]\$\))/); // OR crystal system ($o$) (\ca$c$)
-
-        if (m) {
-          return {
-            match_: m[0],
-            remainder: input.substr(m[0].length)
-          };
-        }
-
-        return null;
-      },
-      '_{(state of aggregation)}$': /^_\{(\([a-z]{1,3}\))\}/,
-      '{[(': /^(?:\\\{|\[|\()/,
-      ')]}': /^(?:\)|\]|\\\})/,
-      ', ': /^[,;]\s*/,
-      ',': /^[,;]/,
-      '.': /^[.]/,
-      '. ': /^([.\u22C5\u00B7\u2022])\s*/,
-      '...': /^\.\.\.(?=$|[^.])/,
-      '* ': /^([*])\s*/,
-      '^{(...)}': function _(input) {
-        return mhchemParser.patterns.findObserveGroups(input, "^{", "", "", "}");
-      },
-      '^($...$)': function $$(input) {
-        return mhchemParser.patterns.findObserveGroups(input, "^", "$", "$", "");
-      },
-      '^a': /^\^([0-9]+|[^\\_])/,
-      '^\\x{}{}': function x(input) {
-        return mhchemParser.patterns.findObserveGroups(input, "^", /^\\[a-zA-Z]+\{/, "}", "", "", "{", "}", "", true);
-      },
-      '^\\x{}': function x(input) {
-        return mhchemParser.patterns.findObserveGroups(input, "^", /^\\[a-zA-Z]+\{/, "}", "");
-      },
-      '^\\x': /^\^(\\[a-zA-Z]+)\s*/,
-      '^(-1)': /^\^(-?\d+)/,
-      '\'': /^'/,
-      '_{(...)}': function _(input) {
-        return mhchemParser.patterns.findObserveGroups(input, "_{", "", "", "}");
-      },
-      '_($...$)': function _$$(input) {
-        return mhchemParser.patterns.findObserveGroups(input, "_", "$", "$", "");
-      },
-      '_9': /^_([+\-]?[0-9]+|[^\\])/,
-      '_\\x{}{}': function _X(input) {
-        return mhchemParser.patterns.findObserveGroups(input, "_", /^\\[a-zA-Z]+\{/, "}", "", "", "{", "}", "", true);
-      },
-      '_\\x{}': function _X(input) {
-        return mhchemParser.patterns.findObserveGroups(input, "_", /^\\[a-zA-Z]+\{/, "}", "");
-      },
-      '_\\x': /^_(\\[a-zA-Z]+)\s*/,
-      '^_': /^(?:\^(?=_)|\_(?=\^)|[\^_]$)/,
-      '{}': /^\{\}/,
-      '{...}': function _(input) {
-        return mhchemParser.patterns.findObserveGroups(input, "", "{", "}", "");
-      },
-      '{(...)}': function _(input) {
-        return mhchemParser.patterns.findObserveGroups(input, "{", "", "", "}");
-      },
-      '$...$': function $$(input) {
-        return mhchemParser.patterns.findObserveGroups(input, "", "$", "$", "");
-      },
-      '${(...)}$': function $$(input) {
-        return mhchemParser.patterns.findObserveGroups(input, "${", "", "", "}$");
-      },
-      '$(...)$': function $$(input) {
-        return mhchemParser.patterns.findObserveGroups(input, "$", "", "", "$");
-      },
-      '=<>': /^[=<>]/,
-      '#': /^[#\u2261]/,
-      '+': /^\+/,
-      '-$': /^-(?=[\s_},;\]/]|$|\([a-z]+\))/,
-      // -space -, -; -] -/ -$ -state-of-aggregation
-      '-9': /^-(?=[0-9])/,
-      '- orbital overlap': /^-(?=(?:[spd]|sp)(?:$|[\s,;\)\]\}]))/,
-      '-': /^-/,
-      'pm-operator': /^(?:\\pm|\$\\pm\$|\+-|\+\/-)/,
-      'operator': /^(?:\+|(?:[\-=<>]|<<|>>|\\approx|\$\\approx\$)(?=\s|$|-?[0-9]))/,
-      'arrowUpDown': /^(?:v|\(v\)|\^|\(\^\))(?=$|[\s,;\)\]\}])/,
-      '\\bond{(...)}': function bond(input) {
-        return mhchemParser.patterns.findObserveGroups(input, "\\bond{", "", "", "}");
-      },
-      '->': /^(?:<->|<-->|->|<-|<=>>|<<=>|<=>|[\u2192\u27F6\u21CC])/,
-      'CMT': /^[CMT](?=\[)/,
-      '[(...)]': function _(input) {
-        return mhchemParser.patterns.findObserveGroups(input, "[", "", "", "]");
-      },
-      '1st-level escape': /^(&|\\\\|\\hline)\s*/,
-      '\\,': /^(?:\\[,\ ;:])/,
-      // \\x - but output no space before
-      '\\x{}{}': function x(input) {
-        return mhchemParser.patterns.findObserveGroups(input, "", /^\\[a-zA-Z]+\{/, "}", "", "", "{", "}", "", true);
-      },
-      '\\x{}': function x(input) {
-        return mhchemParser.patterns.findObserveGroups(input, "", /^\\[a-zA-Z]+\{/, "}", "");
-      },
-      '\\ca': /^\\ca(?:\s+|(?![a-zA-Z]))/,
-      '\\x': /^(?:\\[a-zA-Z]+\s*|\\[_&{}%])/,
-      'orbital': /^(?:[0-9]{1,2}[spdfgh]|[0-9]{0,2}sp)(?=$|[^a-zA-Z])/,
-      // only those with numbers in front, because the others will be formatted correctly anyway
-      'others': /^[\/~|]/,
-      '\\frac{(...)}': function frac(input) {
-        return mhchemParser.patterns.findObserveGroups(input, "\\frac{", "", "", "}", "{", "", "", "}");
-      },
-      '\\overset{(...)}': function overset(input) {
-        return mhchemParser.patterns.findObserveGroups(input, "\\overset{", "", "", "}", "{", "", "", "}");
-      },
-      "\\underset{(...)}": function underset(input) {
-        return mhchemParser.patterns.findObserveGroups(input, "\\underset{", "", "", "}", "{", "", "", "}");
-      },
-      "\\underbrace{(...)}": function underbrace(input) {
-        return mhchemParser.patterns.findObserveGroups(input, "\\underbrace{", "", "", "}_", "{", "", "", "}");
-      },
-      '\\color{(...)}0': function color0(input) {
-        return mhchemParser.patterns.findObserveGroups(input, "\\color{", "", "", "}");
-      },
-      '\\color{(...)}{(...)}1': function color1(input) {
-        return mhchemParser.patterns.findObserveGroups(input, "\\color{", "", "", "}", "{", "", "", "}");
-      },
-      '\\color(...){(...)}2': function color2(input) {
-        return mhchemParser.patterns.findObserveGroups(input, "\\color", "\\", "", /^(?=\{)/, "{", "", "", "}");
-      },
-      '\\ce{(...)}': function ce(input) {
-        return mhchemParser.patterns.findObserveGroups(input, "\\ce{", "", "", "}");
-      },
-      'oxidation$': /^(?:[+-][IVX]+|\\pm\s*0|\$\\pm\$\s*0)$/,
-      'd-oxidation$': /^(?:[+-]?\s?[IVX]+|\\pm\s*0|\$\\pm\$\s*0)$/,
-      // 0 could be oxidation or charge
-      'roman numeral': /^[IVX]+/,
-      '1/2$': /^[+\-]?(?:[0-9]+|\$[a-z]\$|[a-z])\/[0-9]+(?:\$[a-z]\$|[a-z])?$/,
-      'amount': function amount(input) {
-        var match; // e.g. 2, 0.5, 1/2, -2, n/2, +;  $a$ could be added later in parsing
-
-        match = input.match(/^(?:(?:(?:\([+\-]?[0-9]+\/[0-9]+\)|[+\-]?(?:[0-9]+|\$[a-z]\$|[a-z])\/[0-9]+|[+\-]?[0-9]+[.,][0-9]+|[+\-]?\.[0-9]+|[+\-]?[0-9]+)(?:[a-z](?=\s*[A-Z]))?)|[+\-]?[a-z](?=\s*[A-Z])|\+(?!\s))/);
-
-        if (match) {
-          return {
-            match_: match[0],
-            remainder: input.substr(match[0].length)
-          };
-        }
-
-        var a = mhchemParser.patterns.findObserveGroups(input, "", "$", "$", "");
-
-        if (a) {
-          // e.g. $2n-1$, $-$
-          match = a.match_.match(/^\$(?:\(?[+\-]?(?:[0-9]*[a-z]?[+\-])?[0-9]*[a-z](?:[+\-][0-9]*[a-z]?)?\)?|\+|-)\$$/);
-
-          if (match) {
-            return {
-              match_: match[0],
-              remainder: input.substr(match[0].length)
-            };
-          }
-        }
-
-        return null;
-      },
-      'amount2': function amount2(input) {
-        return this['amount'](input);
-      },
-      '(KV letters),': /^(?:[A-Z][a-z]{0,2}|i)(?=,)/,
-      'formula$': function formula$(input) {
-        if (input.match(/^\([a-z]+\)$/)) {
-          return null;
-        } // state of aggregation = no formula
-
-
-        var match = input.match(/^(?:[a-z]|(?:[0-9\ \+\-\,\.\(\)]+[a-z])+[0-9\ \+\-\,\.\(\)]*|(?:[a-z][0-9\ \+\-\,\.\(\)]+)+[a-z]?)$/);
-
-        if (match) {
-          return {
-            match_: match[0],
-            remainder: input.substr(match[0].length)
-          };
-        }
-
-        return null;
-      },
-      'uprightEntities': /^(?:pH|pOH|pC|pK|iPr|iBu)(?=$|[^a-zA-Z])/,
-      '/': /^\s*(\/)\s*/,
-      '//': /^\s*(\/\/)\s*/,
-      '*': /^\s*[*.]\s*/
-    },
-    findObserveGroups: function findObserveGroups(input, begExcl, begIncl, endIncl, endExcl, beg2Excl, beg2Incl, end2Incl, end2Excl, combine) {
-      /** @type {{(input: string, pattern: string | RegExp): string | string[] | null;}} */
-      var _match = function _match(input, pattern) {
-        if (typeof pattern === "string") {
-          if (input.indexOf(pattern) !== 0) {
-            return null;
-          }
-
-          return pattern;
-        } else {
-          var match = input.match(pattern);
-
-          if (!match) {
-            return null;
-          }
-
-          return match[0];
-        }
-      };
-      /** @type {{(input: string, i: number, endChars: string | RegExp): {endMatchBegin: number, endMatchEnd: number} | null;}} */
-
-
-      var _findObserveGroups = function _findObserveGroups(input, i, endChars) {
-        var braces = 0;
-
-        while (i < input.length) {
-          var a = input.charAt(i);
-
-          var match = _match(input.substr(i), endChars);
-
-          if (match !== null && braces === 0) {
-            return {
-              endMatchBegin: i,
-              endMatchEnd: i + match.length
-            };
-          } else if (a === "{") {
-            braces++;
-          } else if (a === "}") {
-            if (braces === 0) {
-              throw ["ExtraCloseMissingOpen", "Extra close brace or missing open brace"];
-            } else {
-              braces--;
-            }
-          }
-
-          i++;
-        }
-
-        if (braces > 0) {
-          return null;
-        }
-
-        return null;
-      };
-
-      var match = _match(input, begExcl);
-
-      if (match === null) {
-        return null;
-      }
-
-      input = input.substr(match.length);
-      match = _match(input, begIncl);
-
-      if (match === null) {
-        return null;
-      }
-
-      var e = _findObserveGroups(input, match.length, endIncl || endExcl);
-
-      if (e === null) {
-        return null;
-      }
-
-      var match1 = input.substring(0, endIncl ? e.endMatchEnd : e.endMatchBegin);
-
-      if (!(beg2Excl || beg2Incl)) {
-        return {
-          match_: match1,
-          remainder: input.substr(e.endMatchEnd)
-        };
-      } else {
-        var group2 = this.findObserveGroups(input.substr(e.endMatchEnd), beg2Excl, beg2Incl, end2Incl, end2Excl);
-
-        if (group2 === null) {
-          return null;
-        }
-        /** @type {string[]} */
-
-
-        var matchRet = [match1, group2.match_];
-        return {
-          match_: combine ? matchRet.join("") : matchRet,
-          remainder: group2.remainder
-        };
-      }
-    },
-    //
-    // Matching function
-    // e.g. match("a", input) will look for the regexp called "a" and see if it matches
-    // returns null or {match_:"a", remainder:"bc"}
-    //
-    match_: function match_(m, input) {
-      var pattern = mhchemParser.patterns.patterns[m];
-
-      if (pattern === undefined) {
-        throw ["MhchemBugP", "mhchem bug P. Please report. (" + m + ")"]; // Trying to use non-existing pattern
-      } else if (typeof pattern === "function") {
-        return mhchemParser.patterns.patterns[m](input); // cannot use cached var pattern here, because some pattern functions need this===mhchemParser
-      } else {
-        // RegExp
-        var match = input.match(pattern);
-
-        if (match) {
-          var mm;
-
-          if (match[2]) {
-            mm = [match[1], match[2]];
-          } else if (match[1]) {
-            mm = match[1];
-          } else {
-            mm = match[0];
-          }
-
-          return {
-            match_: mm,
-            remainder: input.substr(match[0].length)
-          };
-        }
-
-        return null;
-      }
-    }
-  },
-  //
-  // Generic state machine actions
-  //
-  actions: {
-    'a=': function a(buffer, m) {
-      buffer.a = (buffer.a || "") + m;
-    },
-    'b=': function b(buffer, m) {
-      buffer.b = (buffer.b || "") + m;
-    },
-    'p=': function p(buffer, m) {
-      buffer.p = (buffer.p || "") + m;
-    },
-    'o=': function o(buffer, m) {
-      buffer.o = (buffer.o || "") + m;
-    },
-    'q=': function q(buffer, m) {
-      buffer.q = (buffer.q || "") + m;
-    },
-    'd=': function d(buffer, m) {
-      buffer.d = (buffer.d || "") + m;
-    },
-    'rm=': function rm(buffer, m) {
-      buffer.rm = (buffer.rm || "") + m;
-    },
-    'text=': function text(buffer, m) {
-      buffer.text_ = (buffer.text_ || "") + m;
-    },
-    'insert': function insert(buffer, m, a) {
-      return {
-        type_: a
-      };
-    },
-    'insert+p1': function insertP1(buffer, m, a) {
-      return {
-        type_: a,
-        p1: m
-      };
-    },
-    'insert+p1+p2': function insertP1P2(buffer, m, a) {
-      return {
-        type_: a,
-        p1: m[0],
-        p2: m[1]
-      };
-    },
-    'copy': function copy(buffer, m) {
-      return m;
-    },
-    'rm': function rm(buffer, m) {
-      return {
-        type_: 'rm',
-        p1: m || ""
-      };
-    },
-    'text': function text(buffer, m) {
-      return mhchemParser.go(m, 'text');
-    },
-    '{text}': function text(buffer, m) {
-      var ret = ["{"];
-      mhchemParser.concatArray(ret, mhchemParser.go(m, 'text'));
-      ret.push("}");
-      return ret;
-    },
-    'tex-math': function texMath(buffer, m) {
-      return mhchemParser.go(m, 'tex-math');
-    },
-    'tex-math tight': function texMathTight(buffer, m) {
-      return mhchemParser.go(m, 'tex-math tight');
-    },
-    'bond': function bond(buffer, m, k) {
-      return {
-        type_: 'bond',
-        kind_: k || m
-      };
-    },
-    'color0-output': function color0Output(buffer, m) {
-      return {
-        type_: 'color0',
-        color: m[0]
-      };
-    },
-    'ce': function ce(buffer, m) {
-      return mhchemParser.go(m);
-    },
-    '1/2': function _(buffer, m) {
-      /** @type {ParserOutput[]} */
-      var ret = [];
-
-      if (m.match(/^[+\-]/)) {
-        ret.push(m.substr(0, 1));
-        m = m.substr(1);
-      }
-
-      var n = m.match(/^([0-9]+|\$[a-z]\$|[a-z])\/([0-9]+)(\$[a-z]\$|[a-z])?$/);
-      n[1] = n[1].replace(/\$/g, "");
-      ret.push({
-        type_: 'frac',
-        p1: n[1],
-        p2: n[2]
-      });
-
-      if (n[3]) {
-        n[3] = n[3].replace(/\$/g, "");
-        ret.push({
-          type_: 'tex-math',
-          p1: n[3]
-        });
-      }
-
-      return ret;
-    },
-    '9,9': function _(buffer, m) {
-      return mhchemParser.go(m, '9,9');
-    }
-  },
-  //
-  // createTransitions
-  // convert  { 'letter': { 'state': { action_: 'output' } } }  to  { 'state' => [ { pattern: 'letter', task: { action_: [{type_: 'output'}] } } ] }
-  // with expansion of 'a|b' to 'a' and 'b' (at 2 places)
-  //
-  createTransitions: function createTransitions(o) {
-    var pattern, state;
-    /** @type {string[]} */
-
-    var stateArray;
-    var i; //
-    // 1. Collect all states
-    //
-
-    /** @type {Transitions} */
-
-    var transitions = {};
-
-    for (pattern in o) {
-      for (state in o[pattern]) {
-        stateArray = state.split("|");
-        o[pattern][state].stateArray = stateArray;
-
-        for (i = 0; i < stateArray.length; i++) {
-          transitions[stateArray[i]] = [];
-        }
-      }
-    } //
-    // 2. Fill states
-    //
-
-
-    for (pattern in o) {
-      for (state in o[pattern]) {
-        stateArray = o[pattern][state].stateArray || [];
-
-        for (i = 0; i < stateArray.length; i++) {
-          //
-          // 2a. Normalize actions into array:  'text=' ==> [{type_:'text='}]
-          // (Note to myself: Resolving the function here would be problematic. It would need .bind (for *this*) and currying (for *option*).)
-          //
-
-          /** @type {any} */
-          var p = o[pattern][state];
-
-          if (p.action_) {
-            p.action_ = [].concat(p.action_);
-
-            for (var k = 0; k < p.action_.length; k++) {
-              if (typeof p.action_[k] === "string") {
-                p.action_[k] = {
-                  type_: p.action_[k]
-                };
-              }
-            }
-          } else {
-            p.action_ = [];
-          } //
-          // 2.b Multi-insert
-          //
-
-
-          var patternArray = pattern.split("|");
-
-          for (var j = 0; j < patternArray.length; j++) {
-            if (stateArray[i] === '*') {
-              // insert into all
-              for (var t in transitions) {
-                transitions[t].push({
-                  pattern: patternArray[j],
-                  task: p
-                });
-              }
-            } else {
-              transitions[stateArray[i]].push({
-                pattern: patternArray[j],
-                task: p
-              });
-            }
-          }
-        }
-      }
-    }
-
-    return transitions;
-  },
-  stateMachines: {}
-}; //
-// Definition of state machines
-//
-
-mhchemParser.stateMachines = {
-  //
-  // \ce state machines
-  //
-  //#region ce
-  'ce': {
-    // main parser
-    transitions: mhchemParser.createTransitions({
-      'empty': {
-        '*': {
-          action_: 'output'
-        }
-      },
-      'else': {
-        '0|1|2': {
-          action_: 'beginsWithBond=false',
-          revisit: true,
-          toContinue: true
-        }
-      },
-      'oxidation$': {
-        '0': {
-          action_: 'oxidation-output'
-        }
-      },
-      'CMT': {
-        'r': {
-          action_: 'rdt=',
-          nextState: 'rt'
-        },
-        'rd': {
-          action_: 'rqt=',
-          nextState: 'rdt'
-        }
-      },
-      'arrowUpDown': {
-        '0|1|2|as': {
-          action_: ['sb=false', 'output', 'operator'],
-          nextState: '1'
-        }
-      },
-      'uprightEntities': {
-        '0|1|2': {
-          action_: ['o=', 'output'],
-          nextState: '1'
-        }
-      },
-      'orbital': {
-        '0|1|2|3': {
-          action_: 'o=',
-          nextState: 'o'
-        }
-      },
-      '->': {
-        '0|1|2|3': {
-          action_: 'r=',
-          nextState: 'r'
-        },
-        'a|as': {
-          action_: ['output', 'r='],
-          nextState: 'r'
-        },
-        '*': {
-          action_: ['output', 'r='],
-          nextState: 'r'
-        }
-      },
-      '+': {
-        'o': {
-          action_: 'd= kv',
-          nextState: 'd'
-        },
-        'd|D': {
-          action_: 'd=',
-          nextState: 'd'
-        },
-        'q': {
-          action_: 'd=',
-          nextState: 'qd'
-        },
-        'qd|qD': {
-          action_: 'd=',
-          nextState: 'qd'
-        },
-        'dq': {
-          action_: ['output', 'd='],
-          nextState: 'd'
-        },
-        '3': {
-          action_: ['sb=false', 'output', 'operator'],
-          nextState: '0'
-        }
-      },
-      'amount': {
-        '0|2': {
-          action_: 'a=',
-          nextState: 'a'
-        }
-      },
-      'pm-operator': {
-        '0|1|2|a|as': {
-          action_: ['sb=false', 'output', {
-            type_: 'operator',
-            option: '\\pm'
-          }],
-          nextState: '0'
-        }
-      },
-      'operator': {
-        '0|1|2|a|as': {
-          action_: ['sb=false', 'output', 'operator'],
-          nextState: '0'
-        }
-      },
-      '-$': {
-        'o|q': {
-          action_: ['charge or bond', 'output'],
-          nextState: 'qd'
-        },
-        'd': {
-          action_: 'd=',
-          nextState: 'd'
-        },
-        'D': {
-          action_: ['output', {
-            type_: 'bond',
-            option: "-"
-          }],
-          nextState: '3'
-        },
-        'q': {
-          action_: 'd=',
-          nextState: 'qd'
-        },
-        'qd': {
-          action_: 'd=',
-          nextState: 'qd'
-        },
-        'qD|dq': {
-          action_: ['output', {
-            type_: 'bond',
-            option: "-"
-          }],
-          nextState: '3'
-        }
-      },
-      '-9': {
-        '3|o': {
-          action_: ['output', {
-            type_: 'insert',
-            option: 'hyphen'
-          }],
-          nextState: '3'
-        }
-      },
-      '- orbital overlap': {
-        'o': {
-          action_: ['output', {
-            type_: 'insert',
-            option: 'hyphen'
-          }],
-          nextState: '2'
-        },
-        'd': {
-          action_: ['output', {
-            type_: 'insert',
-            option: 'hyphen'
-          }],
-          nextState: '2'
-        }
-      },
-      '-': {
-        '0|1|2': {
-          action_: [{
-            type_: 'output',
-            option: 1
-          }, 'beginsWithBond=true', {
-            type_: 'bond',
-            option: "-"
-          }],
-          nextState: '3'
-        },
-        '3': {
-          action_: {
-            type_: 'bond',
-            option: "-"
-          }
-        },
-        'a': {
-          action_: ['output', {
-            type_: 'insert',
-            option: 'hyphen'
-          }],
-          nextState: '2'
-        },
-        'as': {
-          action_: [{
-            type_: 'output',
-            option: 2
-          }, {
-            type_: 'bond',
-            option: "-"
-          }],
-          nextState: '3'
-        },
-        'b': {
-          action_: 'b='
-        },
-        'o': {
-          action_: {
-            type_: '- after o/d',
-            option: false
-          },
-          nextState: '2'
-        },
-        'q': {
-          action_: {
-            type_: '- after o/d',
-            option: false
-          },
-          nextState: '2'
-        },
-        'd|qd|dq': {
-          action_: {
-            type_: '- after o/d',
-            option: true
-          },
-          nextState: '2'
-        },
-        'D|qD|p': {
-          action_: ['output', {
-            type_: 'bond',
-            option: "-"
-          }],
-          nextState: '3'
-        }
-      },
-      'amount2': {
-        '1|3': {
-          action_: 'a=',
-          nextState: 'a'
-        }
-      },
-      'letters': {
-        '0|1|2|3|a|as|b|p|bp|o': {
-          action_: 'o=',
-          nextState: 'o'
-        },
-        'q|dq': {
-          action_: ['output', 'o='],
-          nextState: 'o'
-        },
-        'd|D|qd|qD': {
-          action_: 'o after d',
-          nextState: 'o'
-        }
-      },
-      'digits': {
-        'o': {
-          action_: 'q=',
-          nextState: 'q'
-        },
-        'd|D': {
-          action_: 'q=',
-          nextState: 'dq'
-        },
-        'q': {
-          action_: ['output', 'o='],
-          nextState: 'o'
-        },
-        'a': {
-          action_: 'o=',
-          nextState: 'o'
-        }
-      },
-      'space A': {
-        'b|p|bp': {}
-      },
-      'space': {
-        'a': {
-          nextState: 'as'
-        },
-        '0': {
-          action_: 'sb=false'
-        },
-        '1|2': {
-          action_: 'sb=true'
-        },
-        'r|rt|rd|rdt|rdq': {
-          action_: 'output',
-          nextState: '0'
-        },
-        '*': {
-          action_: ['output', 'sb=true'],
-          nextState: '1'
-        }
-      },
-      '1st-level escape': {
-        '1|2': {
-          action_: ['output', {
-            type_: 'insert+p1',
-            option: '1st-level escape'
-          }]
-        },
-        '*': {
-          action_: ['output', {
-            type_: 'insert+p1',
-            option: '1st-level escape'
-          }],
-          nextState: '0'
-        }
-      },
-      '[(...)]': {
-        'r|rt': {
-          action_: 'rd=',
-          nextState: 'rd'
-        },
-        'rd|rdt': {
-          action_: 'rq=',
-          nextState: 'rdq'
-        }
-      },
-      '...': {
-        'o|d|D|dq|qd|qD': {
-          action_: ['output', {
-            type_: 'bond',
-            option: "..."
-          }],
-          nextState: '3'
-        },
-        '*': {
-          action_: [{
-            type_: 'output',
-            option: 1
-          }, {
-            type_: 'insert',
-            option: 'ellipsis'
-          }],
-          nextState: '1'
-        }
-      },
-      '. |* ': {
-        '*': {
-          action_: ['output', {
-            type_: 'insert',
-            option: 'addition compound'
-          }],
-          nextState: '1'
-        }
-      },
-      'state of aggregation $': {
-        '*': {
-          action_: ['output', 'state of aggregation'],
-          nextState: '1'
-        }
-      },
-      '{[(': {
-        'a|as|o': {
-          action_: ['o=', 'output', 'parenthesisLevel++'],
-          nextState: '2'
-        },
-        '0|1|2|3': {
-          action_: ['o=', 'output', 'parenthesisLevel++'],
-          nextState: '2'
-        },
-        '*': {
-          action_: ['output', 'o=', 'output', 'parenthesisLevel++'],
-          nextState: '2'
-        }
-      },
-      ')]}': {
-        '0|1|2|3|b|p|bp|o': {
-          action_: ['o=', 'parenthesisLevel--'],
-          nextState: 'o'
-        },
-        'a|as|d|D|q|qd|qD|dq': {
-          action_: ['output', 'o=', 'parenthesisLevel--'],
-          nextState: 'o'
-        }
-      },
-      ', ': {
-        '*': {
-          action_: ['output', 'comma'],
-          nextState: '0'
-        }
-      },
-      '^_': {
-        // ^ and _ without a sensible argument
-        '*': {}
-      },
-      '^{(...)}|^($...$)': {
-        '0|1|2|as': {
-          action_: 'b=',
-          nextState: 'b'
-        },
-        'p': {
-          action_: 'b=',
-          nextState: 'bp'
-        },
-        '3|o': {
-          action_: 'd= kv',
-          nextState: 'D'
-        },
-        'q': {
-          action_: 'd=',
-          nextState: 'qD'
-        },
-        'd|D|qd|qD|dq': {
-          action_: ['output', 'd='],
-          nextState: 'D'
-        }
-      },
-      '^a|^\\x{}{}|^\\x{}|^\\x|\'': {
-        '0|1|2|as': {
-          action_: 'b=',
-          nextState: 'b'
-        },
-        'p': {
-          action_: 'b=',
-          nextState: 'bp'
-        },
-        '3|o': {
-          action_: 'd= kv',
-          nextState: 'd'
-        },
-        'q': {
-          action_: 'd=',
-          nextState: 'qd'
-        },
-        'd|qd|D|qD': {
-          action_: 'd='
-        },
-        'dq': {
-          action_: ['output', 'd='],
-          nextState: 'd'
-        }
-      },
-      '_{(state of aggregation)}$': {
-        'd|D|q|qd|qD|dq': {
-          action_: ['output', 'q='],
-          nextState: 'q'
-        }
-      },
-      '_{(...)}|_($...$)|_9|_\\x{}{}|_\\x{}|_\\x': {
-        '0|1|2|as': {
-          action_: 'p=',
-          nextState: 'p'
-        },
-        'b': {
-          action_: 'p=',
-          nextState: 'bp'
-        },
-        '3|o': {
-          action_: 'q=',
-          nextState: 'q'
-        },
-        'd|D': {
-          action_: 'q=',
-          nextState: 'dq'
-        },
-        'q|qd|qD|dq': {
-          action_: ['output', 'q='],
-          nextState: 'q'
-        }
-      },
-      '=<>': {
-        '0|1|2|3|a|as|o|q|d|D|qd|qD|dq': {
-          action_: [{
-            type_: 'output',
-            option: 2
-          }, 'bond'],
-          nextState: '3'
-        }
-      },
-      '#': {
-        '0|1|2|3|a|as|o': {
-          action_: [{
-            type_: 'output',
-            option: 2
-          }, {
-            type_: 'bond',
-            option: "#"
-          }],
-          nextState: '3'
-        }
-      },
-      '{}': {
-        '*': {
-          action_: {
-            type_: 'output',
-            option: 1
-          },
-          nextState: '1'
-        }
-      },
-      '{...}': {
-        '0|1|2|3|a|as|b|p|bp': {
-          action_: 'o=',
-          nextState: 'o'
-        },
-        'o|d|D|q|qd|qD|dq': {
-          action_: ['output', 'o='],
-          nextState: 'o'
-        }
-      },
-      '$...$': {
-        'a': {
-          action_: 'a='
-        },
-        // 2$n$
-        '0|1|2|3|as|b|p|bp|o': {
-          action_: 'o=',
-          nextState: 'o'
-        },
-        // not 'amount'
-        'as|o': {
-          action_: 'o='
-        },
-        'q|d|D|qd|qD|dq': {
-          action_: ['output', 'o='],
-          nextState: 'o'
-        }
-      },
-      '\\bond{(...)}': {
-        '*': {
-          action_: [{
-            type_: 'output',
-            option: 2
-          }, 'bond'],
-          nextState: "3"
-        }
-      },
-      '\\frac{(...)}': {
-        '*': {
-          action_: [{
-            type_: 'output',
-            option: 1
-          }, 'frac-output'],
-          nextState: '3'
-        }
-      },
-      '\\overset{(...)}': {
-        '*': {
-          action_: [{
-            type_: 'output',
-            option: 2
-          }, 'overset-output'],
-          nextState: '3'
-        }
-      },
-      "\\underset{(...)}": {
-        '*': {
-          action_: [{
-            type_: 'output',
-            option: 2
-          }, 'underset-output'],
-          nextState: '3'
-        }
-      },
-      "\\underbrace{(...)}": {
-        '*': {
-          action_: [{
-            type_: 'output',
-            option: 2
-          }, 'underbrace-output'],
-          nextState: '3'
-        }
-      },
-      '\\color{(...)}{(...)}1|\\color(...){(...)}2': {
-        '*': {
-          action_: [{
-            type_: 'output',
-            option: 2
-          }, 'color-output'],
-          nextState: '3'
-        }
-      },
-      '\\color{(...)}0': {
-        '*': {
-          action_: [{
-            type_: 'output',
-            option: 2
-          }, 'color0-output']
-        }
-      },
-      '\\ce{(...)}': {
-        '*': {
-          action_: [{
-            type_: 'output',
-            option: 2
-          }, 'ce'],
-          nextState: '3'
-        }
-      },
-      '\\,': {
-        '*': {
-          action_: [{
-            type_: 'output',
-            option: 1
-          }, 'copy'],
-          nextState: '1'
-        }
-      },
-      '\\x{}{}|\\x{}|\\x': {
-        '0|1|2|3|a|as|b|p|bp|o|c0': {
-          action_: ['o=', 'output'],
-          nextState: '3'
-        },
-        '*': {
-          action_: ['output', 'o=', 'output'],
-          nextState: '3'
-        }
-      },
-      'others': {
-        '*': {
-          action_: [{
-            type_: 'output',
-            option: 1
-          }, 'copy'],
-          nextState: '3'
-        }
-      },
-      'else2': {
-        'a': {
-          action_: 'a to o',
-          nextState: 'o',
-          revisit: true
-        },
-        'as': {
-          action_: ['output', 'sb=true'],
-          nextState: '1',
-          revisit: true
-        },
-        'r|rt|rd|rdt|rdq': {
-          action_: ['output'],
-          nextState: '0',
-          revisit: true
-        },
-        '*': {
-          action_: ['output', 'copy'],
-          nextState: '3'
-        }
-      }
-    }),
-    actions: {
-      'o after d': function oAfterD(buffer, m) {
-        var ret;
-
-        if ((buffer.d || "").match(/^[0-9]+$/)) {
-          var tmp = buffer.d;
-          buffer.d = undefined;
-          ret = this['output'](buffer);
-          buffer.b = tmp;
-        } else {
-          ret = this['output'](buffer);
-        }
-
-        mhchemParser.actions['o='](buffer, m);
-        return ret;
-      },
-      'd= kv': function dKv(buffer, m) {
-        buffer.d = m;
-        buffer.dType = 'kv';
-      },
-      'charge or bond': function chargeOrBond(buffer, m) {
-        if (buffer['beginsWithBond']) {
-          /** @type {ParserOutput[]} */
-          var ret = [];
-          mhchemParser.concatArray(ret, this['output'](buffer));
-          mhchemParser.concatArray(ret, mhchemParser.actions['bond'](buffer, m, "-"));
-          return ret;
-        } else {
-          buffer.d = m;
-        }
-      },
-      '- after o/d': function afterOD(buffer, m, isAfterD) {
-        var c1 = mhchemParser.patterns.match_('orbital', buffer.o || "");
-        var c2 = mhchemParser.patterns.match_('one lowercase greek letter $', buffer.o || "");
-        var c3 = mhchemParser.patterns.match_('one lowercase latin letter $', buffer.o || "");
-        var c4 = mhchemParser.patterns.match_('$one lowercase latin letter$ $', buffer.o || "");
-        var hyphenFollows = m === "-" && (c1 && c1.remainder === "" || c2 || c3 || c4);
-
-        if (hyphenFollows && !buffer.a && !buffer.b && !buffer.p && !buffer.d && !buffer.q && !c1 && c3) {
-          buffer.o = '$' + buffer.o + '$';
-        }
-        /** @type {ParserOutput[]} */
-
-
-        var ret = [];
-
-        if (hyphenFollows) {
-          mhchemParser.concatArray(ret, this['output'](buffer));
-          ret.push({
-            type_: 'hyphen'
-          });
-        } else {
-          c1 = mhchemParser.patterns.match_('digits', buffer.d || "");
-
-          if (isAfterD && c1 && c1.remainder === '') {
-            mhchemParser.concatArray(ret, mhchemParser.actions['d='](buffer, m));
-            mhchemParser.concatArray(ret, this['output'](buffer));
-          } else {
-            mhchemParser.concatArray(ret, this['output'](buffer));
-            mhchemParser.concatArray(ret, mhchemParser.actions['bond'](buffer, m, "-"));
-          }
-        }
-
-        return ret;
-      },
-      'a to o': function aToO(buffer) {
-        buffer.o = buffer.a;
-        buffer.a = undefined;
-      },
-      'sb=true': function sbTrue(buffer) {
-        buffer.sb = true;
-      },
-      'sb=false': function sbFalse(buffer) {
-        buffer.sb = false;
-      },
-      'beginsWithBond=true': function beginsWithBondTrue(buffer) {
-        buffer['beginsWithBond'] = true;
-      },
-      'beginsWithBond=false': function beginsWithBondFalse(buffer) {
-        buffer['beginsWithBond'] = false;
-      },
-      'parenthesisLevel++': function parenthesisLevel(buffer) {
-        buffer['parenthesisLevel']++;
-      },
-      'parenthesisLevel--': function parenthesisLevel(buffer) {
-        buffer['parenthesisLevel']--;
-      },
-      'state of aggregation': function stateOfAggregation(buffer, m) {
-        return {
-          type_: 'state of aggregation',
-          p1: mhchemParser.go(m, 'o')
-        };
-      },
-      'comma': function comma(buffer, m) {
-        var a = m.replace(/\s*$/, '');
-        var withSpace = a !== m;
-
-        if (withSpace && buffer['parenthesisLevel'] === 0) {
-          return {
-            type_: 'comma enumeration L',
-            p1: a
-          };
-        } else {
-          return {
-            type_: 'comma enumeration M',
-            p1: a
-          };
-        }
-      },
-      'output': function output(buffer, m, entityFollows) {
-        // entityFollows:
-        //   undefined = if we have nothing else to output, also ignore the just read space (buffer.sb)
-        //   1 = an entity follows, never omit the space if there was one just read before (can only apply to state 1)
-        //   2 = 1 + the entity can have an amount, so output a\, instead of converting it to o (can only apply to states a|as)
-
-        /** @type {ParserOutput | ParserOutput[]} */
-        var ret;
-
-        if (!buffer.r) {
-          ret = [];
-
-          if (!buffer.a && !buffer.b && !buffer.p && !buffer.o && !buffer.q && !buffer.d && !entityFollows) {//ret = [];
-          } else {
-            if (buffer.sb) {
-              ret.push({
-                type_: 'entitySkip'
-              });
-            }
-
-            if (!buffer.o && !buffer.q && !buffer.d && !buffer.b && !buffer.p && entityFollows !== 2) {
-              buffer.o = buffer.a;
-              buffer.a = undefined;
-            } else if (!buffer.o && !buffer.q && !buffer.d && (buffer.b || buffer.p)) {
-              buffer.o = buffer.a;
-              buffer.d = buffer.b;
-              buffer.q = buffer.p;
-              buffer.a = buffer.b = buffer.p = undefined;
-            } else {
-              if (buffer.o && buffer.dType === 'kv' && mhchemParser.patterns.match_('d-oxidation$', buffer.d || "")) {
-                buffer.dType = 'oxidation';
-              } else if (buffer.o && buffer.dType === 'kv' && !buffer.q) {
-                buffer.dType = undefined;
-              }
-            }
-
-            ret.push({
-              type_: 'chemfive',
-              a: mhchemParser.go(buffer.a, 'a'),
-              b: mhchemParser.go(buffer.b, 'bd'),
-              p: mhchemParser.go(buffer.p, 'pq'),
-              o: mhchemParser.go(buffer.o, 'o'),
-              q: mhchemParser.go(buffer.q, 'pq'),
-              d: mhchemParser.go(buffer.d, buffer.dType === 'oxidation' ? 'oxidation' : 'bd'),
-              dType: buffer.dType
-            });
-          }
-        } else {
-          // r
-
-          /** @type {ParserOutput[]} */
-          var rd;
-
-          if (buffer.rdt === 'M') {
-            rd = mhchemParser.go(buffer.rd, 'tex-math');
-          } else if (buffer.rdt === 'T') {
-            rd = [{
-              type_: 'text',
-              p1: buffer.rd || ""
-            }];
-          } else {
-            rd = mhchemParser.go(buffer.rd);
-          }
-          /** @type {ParserOutput[]} */
-
-
-          var rq;
-
-          if (buffer.rqt === 'M') {
-            rq = mhchemParser.go(buffer.rq, 'tex-math');
-          } else if (buffer.rqt === 'T') {
-            rq = [{
-              type_: 'text',
-              p1: buffer.rq || ""
-            }];
-          } else {
-            rq = mhchemParser.go(buffer.rq);
-          }
-
-          ret = {
-            type_: 'arrow',
-            r: buffer.r,
-            rd: rd,
-            rq: rq
-          };
-        }
-
-        for (var p in buffer) {
-          if (p !== 'parenthesisLevel' && p !== 'beginsWithBond') {
-            delete buffer[p];
-          }
-        }
-
-        return ret;
-      },
-      'oxidation-output': function oxidationOutput(buffer, m) {
-        var ret = ["{"];
-        mhchemParser.concatArray(ret, mhchemParser.go(m, 'oxidation'));
-        ret.push("}");
-        return ret;
-      },
-      'frac-output': function fracOutput(buffer, m) {
-        return {
-          type_: 'frac-ce',
-          p1: mhchemParser.go(m[0]),
-          p2: mhchemParser.go(m[1])
-        };
-      },
-      'overset-output': function oversetOutput(buffer, m) {
-        return {
-          type_: 'overset',
-          p1: mhchemParser.go(m[0]),
-          p2: mhchemParser.go(m[1])
-        };
-      },
-      'underset-output': function undersetOutput(buffer, m) {
-        return {
-          type_: 'underset',
-          p1: mhchemParser.go(m[0]),
-          p2: mhchemParser.go(m[1])
-        };
-      },
-      'underbrace-output': function underbraceOutput(buffer, m) {
-        return {
-          type_: 'underbrace',
-          p1: mhchemParser.go(m[0]),
-          p2: mhchemParser.go(m[1])
-        };
-      },
-      'color-output': function colorOutput(buffer, m) {
-        return {
-          type_: 'color',
-          color1: m[0],
-          color2: mhchemParser.go(m[1])
-        };
-      },
-      'r=': function r(buffer, m) {
-        buffer.r = m;
-      },
-      'rdt=': function rdt(buffer, m) {
-        buffer.rdt = m;
-      },
-      'rd=': function rd(buffer, m) {
-        buffer.rd = m;
-      },
-      'rqt=': function rqt(buffer, m) {
-        buffer.rqt = m;
-      },
-      'rq=': function rq(buffer, m) {
-        buffer.rq = m;
-      },
-      'operator': function operator(buffer, m, p1) {
-        return {
-          type_: 'operator',
-          kind_: p1 || m
-        };
-      }
-    }
-  },
-  'a': {
-    transitions: mhchemParser.createTransitions({
-      'empty': {
-        '*': {}
-      },
-      '1/2$': {
-        '0': {
-          action_: '1/2'
-        }
-      },
-      'else': {
-        '0': {
-          nextState: '1',
-          revisit: true
-        }
-      },
-      '$(...)$': {
-        '*': {
-          action_: 'tex-math tight',
-          nextState: '1'
-        }
-      },
-      ',': {
-        '*': {
-          action_: {
-            type_: 'insert',
-            option: 'commaDecimal'
-          }
-        }
-      },
-      'else2': {
-        '*': {
-          action_: 'copy'
-        }
-      }
-    }),
-    actions: {}
-  },
-  'o': {
-    transitions: mhchemParser.createTransitions({
-      'empty': {
-        '*': {}
-      },
-      '1/2$': {
-        '0': {
-          action_: '1/2'
-        }
-      },
-      'else': {
-        '0': {
-          nextState: '1',
-          revisit: true
-        }
-      },
-      'letters': {
-        '*': {
-          action_: 'rm'
-        }
-      },
-      '\\ca': {
-        '*': {
-          action_: {
-            type_: 'insert',
-            option: 'circa'
-          }
-        }
-      },
-      '\\x{}{}|\\x{}|\\x': {
-        '*': {
-          action_: 'copy'
-        }
-      },
-      '${(...)}$|$(...)$': {
-        '*': {
-          action_: 'tex-math'
-        }
-      },
-      '{(...)}': {
-        '*': {
-          action_: '{text}'
-        }
-      },
-      'else2': {
-        '*': {
-          action_: 'copy'
-        }
-      }
-    }),
-    actions: {}
-  },
-  'text': {
-    transitions: mhchemParser.createTransitions({
-      'empty': {
-        '*': {
-          action_: 'output'
-        }
-      },
-      '{...}': {
-        '*': {
-          action_: 'text='
-        }
-      },
-      '${(...)}$|$(...)$': {
-        '*': {
-          action_: 'tex-math'
-        }
-      },
-      '\\greek': {
-        '*': {
-          action_: ['output', 'rm']
-        }
-      },
-      '\\,|\\x{}{}|\\x{}|\\x': {
-        '*': {
-          action_: ['output', 'copy']
-        }
-      },
-      'else': {
-        '*': {
-          action_: 'text='
-        }
-      }
-    }),
-    actions: {
-      'output': function output(buffer) {
-        if (buffer.text_) {
-          /** @type {ParserOutput} */
-          var ret = {
-            type_: 'text',
-            p1: buffer.text_
-          };
-
-          for (var p in buffer) {
-            delete buffer[p];
-          }
-
-          return ret;
-        }
-      }
-    }
-  },
-  'pq': {
-    transitions: mhchemParser.createTransitions({
-      'empty': {
-        '*': {}
-      },
-      'state of aggregation $': {
-        '*': {
-          action_: 'state of aggregation'
-        }
-      },
-      'i$': {
-        '0': {
-          nextState: '!f',
-          revisit: true
-        }
-      },
-      '(KV letters),': {
-        '0': {
-          action_: 'rm',
-          nextState: '0'
-        }
-      },
-      'formula$': {
-        '0': {
-          nextState: 'f',
-          revisit: true
-        }
-      },
-      '1/2$': {
-        '0': {
-          action_: '1/2'
-        }
-      },
-      'else': {
-        '0': {
-          nextState: '!f',
-          revisit: true
-        }
-      },
-      '${(...)}$|$(...)$': {
-        '*': {
-          action_: 'tex-math'
-        }
-      },
-      '{(...)}': {
-        '*': {
-          action_: 'text'
-        }
-      },
-      'a-z': {
-        'f': {
-          action_: 'tex-math'
-        }
-      },
-      'letters': {
-        '*': {
-          action_: 'rm'
-        }
-      },
-      '-9.,9': {
-        '*': {
-          action_: '9,9'
-        }
-      },
-      ',': {
-        '*': {
-          action_: {
-            type_: 'insert+p1',
-            option: 'comma enumeration S'
-          }
-        }
-      },
-      '\\color{(...)}{(...)}1|\\color(...){(...)}2': {
-        '*': {
-          action_: 'color-output'
-        }
-      },
-      '\\color{(...)}0': {
-        '*': {
-          action_: 'color0-output'
-        }
-      },
-      '\\ce{(...)}': {
-        '*': {
-          action_: 'ce'
-        }
-      },
-      '\\,|\\x{}{}|\\x{}|\\x': {
-        '*': {
-          action_: 'copy'
-        }
-      },
-      'else2': {
-        '*': {
-          action_: 'copy'
-        }
-      }
-    }),
-    actions: {
-      'state of aggregation': function stateOfAggregation(buffer, m) {
-        return {
-          type_: 'state of aggregation subscript',
-          p1: mhchemParser.go(m, 'o')
-        };
-      },
-      'color-output': function colorOutput(buffer, m) {
-        return {
-          type_: 'color',
-          color1: m[0],
-          color2: mhchemParser.go(m[1], 'pq')
-        };
-      }
-    }
-  },
-  'bd': {
-    transitions: mhchemParser.createTransitions({
-      'empty': {
-        '*': {}
-      },
-      'x$': {
-        '0': {
-          nextState: '!f',
-          revisit: true
-        }
-      },
-      'formula$': {
-        '0': {
-          nextState: 'f',
-          revisit: true
-        }
-      },
-      'else': {
-        '0': {
-          nextState: '!f',
-          revisit: true
-        }
-      },
-      '-9.,9 no missing 0': {
-        '*': {
-          action_: '9,9'
-        }
-      },
-      '.': {
-        '*': {
-          action_: {
-            type_: 'insert',
-            option: 'electron dot'
-          }
-        }
-      },
-      'a-z': {
-        'f': {
-          action_: 'tex-math'
-        }
-      },
-      'x': {
-        '*': {
-          action_: {
-            type_: 'insert',
-            option: 'KV x'
-          }
-        }
-      },
-      'letters': {
-        '*': {
-          action_: 'rm'
-        }
-      },
-      '\'': {
-        '*': {
-          action_: {
-            type_: 'insert',
-            option: 'prime'
-          }
-        }
-      },
-      '${(...)}$|$(...)$': {
-        '*': {
-          action_: 'tex-math'
-        }
-      },
-      '{(...)}': {
-        '*': {
-          action_: 'text'
-        }
-      },
-      '\\color{(...)}{(...)}1|\\color(...){(...)}2': {
-        '*': {
-          action_: 'color-output'
-        }
-      },
-      '\\color{(...)}0': {
-        '*': {
-          action_: 'color0-output'
-        }
-      },
-      '\\ce{(...)}': {
-        '*': {
-          action_: 'ce'
-        }
-      },
-      '\\,|\\x{}{}|\\x{}|\\x': {
-        '*': {
-          action_: 'copy'
-        }
-      },
-      'else2': {
-        '*': {
-          action_: 'copy'
-        }
-      }
-    }),
-    actions: {
-      'color-output': function colorOutput(buffer, m) {
-        return {
-          type_: 'color',
-          color1: m[0],
-          color2: mhchemParser.go(m[1], 'bd')
-        };
-      }
-    }
-  },
-  'oxidation': {
-    transitions: mhchemParser.createTransitions({
-      'empty': {
-        '*': {}
-      },
-      'roman numeral': {
-        '*': {
-          action_: 'roman-numeral'
-        }
-      },
-      '${(...)}$|$(...)$': {
-        '*': {
-          action_: 'tex-math'
-        }
-      },
-      'else': {
-        '*': {
-          action_: 'copy'
-        }
-      }
-    }),
-    actions: {
-      'roman-numeral': function romanNumeral(buffer, m) {
-        return {
-          type_: 'roman numeral',
-          p1: m || ""
-        };
-      }
-    }
-  },
-  'tex-math': {
-    transitions: mhchemParser.createTransitions({
-      'empty': {
-        '*': {
-          action_: 'output'
-        }
-      },
-      '\\ce{(...)}': {
-        '*': {
-          action_: ['output', 'ce']
-        }
-      },
-      '{...}|\\,|\\x{}{}|\\x{}|\\x': {
-        '*': {
-          action_: 'o='
-        }
-      },
-      'else': {
-        '*': {
-          action_: 'o='
-        }
-      }
-    }),
-    actions: {
-      'output': function output(buffer) {
-        if (buffer.o) {
-          /** @type {ParserOutput} */
-          var ret = {
-            type_: 'tex-math',
-            p1: buffer.o
-          };
-
-          for (var p in buffer) {
-            delete buffer[p];
-          }
-
-          return ret;
-        }
-      }
-    }
-  },
-  'tex-math tight': {
-    transitions: mhchemParser.createTransitions({
-      'empty': {
-        '*': {
-          action_: 'output'
-        }
-      },
-      '\\ce{(...)}': {
-        '*': {
-          action_: ['output', 'ce']
-        }
-      },
-      '{...}|\\,|\\x{}{}|\\x{}|\\x': {
-        '*': {
-          action_: 'o='
-        }
-      },
-      '-|+': {
-        '*': {
-          action_: 'tight operator'
-        }
-      },
-      'else': {
-        '*': {
-          action_: 'o='
-        }
-      }
-    }),
-    actions: {
-      'tight operator': function tightOperator(buffer, m) {
-        buffer.o = (buffer.o || "") + "{" + m + "}";
-      },
-      'output': function output(buffer) {
-        if (buffer.o) {
-          /** @type {ParserOutput} */
-          var ret = {
-            type_: 'tex-math',
-            p1: buffer.o
-          };
-
-          for (var p in buffer) {
-            delete buffer[p];
-          }
-
-          return ret;
-        }
-      }
-    }
-  },
-  '9,9': {
-    transitions: mhchemParser.createTransitions({
-      'empty': {
-        '*': {}
-      },
-      ',': {
-        '*': {
-          action_: 'comma'
-        }
-      },
-      'else': {
-        '*': {
-          action_: 'copy'
-        }
-      }
-    }),
-    actions: {
-      'comma': function comma() {
-        return {
-          type_: 'commaDecimal'
-        };
-      }
-    }
-  },
-  //#endregion
-  //
-  // \pu state machines
-  //
-  //#region pu
-  'pu': {
-    transitions: mhchemParser.createTransitions({
-      'empty': {
-        '*': {
-          action_: 'output'
-        }
-      },
-      'space$': {
-        '*': {
-          action_: ['output', 'space']
-        }
-      },
-      '{[(|)]}': {
-        '0|a': {
-          action_: 'copy'
-        }
-      },
-      '(-)(9)^(-9)': {
-        '0': {
-          action_: 'number^',
-          nextState: 'a'
-        }
-      },
-      '(-)(9.,9)(e)(99)': {
-        '0': {
-          action_: 'enumber',
-          nextState: 'a'
-        }
-      },
-      'space': {
-        '0|a': {}
-      },
-      'pm-operator': {
-        '0|a': {
-          action_: {
-            type_: 'operator',
-            option: '\\pm'
-          },
-          nextState: '0'
-        }
-      },
-      'operator': {
-        '0|a': {
-          action_: 'copy',
-          nextState: '0'
-        }
-      },
-      '//': {
-        'd': {
-          action_: 'o=',
-          nextState: '/'
-        }
-      },
-      '/': {
-        'd': {
-          action_: 'o=',
-          nextState: '/'
-        }
-      },
-      '{...}|else': {
-        '0|d': {
-          action_: 'd=',
-          nextState: 'd'
-        },
-        'a': {
-          action_: ['space', 'd='],
-          nextState: 'd'
-        },
-        '/|q': {
-          action_: 'q=',
-          nextState: 'q'
-        }
-      }
-    }),
-    actions: {
-      'enumber': function enumber(buffer, m) {
-        /** @type {ParserOutput[]} */
-        var ret = [];
-
-        if (m[0] === "+-" || m[0] === "+/-") {
-          ret.push("\\pm ");
-        } else if (m[0]) {
-          ret.push(m[0]);
-        }
-
-        if (m[1]) {
-          mhchemParser.concatArray(ret, mhchemParser.go(m[1], 'pu-9,9'));
-
-          if (m[2]) {
-            if (m[2].match(/[,.]/)) {
-              mhchemParser.concatArray(ret, mhchemParser.go(m[2], 'pu-9,9'));
-            } else {
-              ret.push(m[2]);
-            }
-          }
-
-          m[3] = m[4] || m[3];
-
-          if (m[3]) {
-            m[3] = m[3].trim();
-
-            if (m[3] === "e" || m[3].substr(0, 1) === "*") {
-              ret.push({
-                type_: 'cdot'
-              });
-            } else {
-              ret.push({
-                type_: 'times'
-              });
-            }
-          }
-        }
-
-        if (m[3]) {
-          ret.push("10^{" + m[5] + "}");
-        }
-
-        return ret;
-      },
-      'number^': function number(buffer, m) {
-        /** @type {ParserOutput[]} */
-        var ret = [];
-
-        if (m[0] === "+-" || m[0] === "+/-") {
-          ret.push("\\pm ");
-        } else if (m[0]) {
-          ret.push(m[0]);
-        }
-
-        mhchemParser.concatArray(ret, mhchemParser.go(m[1], 'pu-9,9'));
-        ret.push("^{" + m[2] + "}");
-        return ret;
-      },
-      'operator': function operator(buffer, m, p1) {
-        return {
-          type_: 'operator',
-          kind_: p1 || m
-        };
-      },
-      'space': function space() {
-        return {
-          type_: 'pu-space-1'
-        };
-      },
-      'output': function output(buffer) {
-        /** @type {ParserOutput | ParserOutput[]} */
-        var ret;
-        var md = mhchemParser.patterns.match_('{(...)}', buffer.d || "");
-
-        if (md && md.remainder === '') {
-          buffer.d = md.match_;
-        }
-
-        var mq = mhchemParser.patterns.match_('{(...)}', buffer.q || "");
-
-        if (mq && mq.remainder === '') {
-          buffer.q = mq.match_;
-        }
-
-        if (buffer.d) {
-          buffer.d = buffer.d.replace(/\u00B0C|\^oC|\^{o}C/g, "{}^{\\circ}C");
-          buffer.d = buffer.d.replace(/\u00B0F|\^oF|\^{o}F/g, "{}^{\\circ}F");
-        }
-
-        if (buffer.q) {
-          // fraction
-          buffer.q = buffer.q.replace(/\u00B0C|\^oC|\^{o}C/g, "{}^{\\circ}C");
-          buffer.q = buffer.q.replace(/\u00B0F|\^oF|\^{o}F/g, "{}^{\\circ}F");
-          var b5 = {
-            d: mhchemParser.go(buffer.d, 'pu'),
-            q: mhchemParser.go(buffer.q, 'pu')
-          };
-
-          if (buffer.o === '//') {
-            ret = {
-              type_: 'pu-frac',
-              p1: b5.d,
-              p2: b5.q
-            };
-          } else {
-            ret = b5.d;
-
-            if (b5.d.length > 1 || b5.q.length > 1) {
-              ret.push({
-                type_: ' / '
-              });
-            } else {
-              ret.push({
-                type_: '/'
-              });
-            }
-
-            mhchemParser.concatArray(ret, b5.q);
-          }
-        } else {
-          // no fraction
-          ret = mhchemParser.go(buffer.d, 'pu-2');
-        }
-
-        for (var p in buffer) {
-          delete buffer[p];
-        }
-
-        return ret;
-      }
-    }
-  },
-  'pu-2': {
-    transitions: mhchemParser.createTransitions({
-      'empty': {
-        '*': {
-          action_: 'output'
-        }
-      },
-      '*': {
-        '*': {
-          action_: ['output', 'cdot'],
-          nextState: '0'
-        }
-      },
-      '\\x': {
-        '*': {
-          action_: 'rm='
-        }
-      },
-      'space': {
-        '*': {
-          action_: ['output', 'space'],
-          nextState: '0'
-        }
-      },
-      '^{(...)}|^(-1)': {
-        '1': {
-          action_: '^(-1)'
-        }
-      },
-      '-9.,9': {
-        '0': {
-          action_: 'rm=',
-          nextState: '0'
-        },
-        '1': {
-          action_: '^(-1)',
-          nextState: '0'
-        }
-      },
-      '{...}|else': {
-        '*': {
-          action_: 'rm=',
-          nextState: '1'
-        }
-      }
-    }),
-    actions: {
-      'cdot': function cdot() {
-        return {
-          type_: 'tight cdot'
-        };
-      },
-      '^(-1)': function _(buffer, m) {
-        buffer.rm += "^{" + m + "}";
-      },
-      'space': function space() {
-        return {
-          type_: 'pu-space-2'
-        };
-      },
-      'output': function output(buffer) {
-        /** @type {ParserOutput | ParserOutput[]} */
-        var ret = [];
-
-        if (buffer.rm) {
-          var mrm = mhchemParser.patterns.match_('{(...)}', buffer.rm || "");
-
-          if (mrm && mrm.remainder === '') {
-            ret = mhchemParser.go(mrm.match_, 'pu');
-          } else {
-            ret = {
-              type_: 'rm',
-              p1: buffer.rm
-            };
-          }
-        }
-
-        for (var p in buffer) {
-          delete buffer[p];
-        }
-
-        return ret;
-      }
-    }
-  },
-  'pu-9,9': {
-    transitions: mhchemParser.createTransitions({
-      'empty': {
-        '0': {
-          action_: 'output-0'
-        },
-        'o': {
-          action_: 'output-o'
-        }
-      },
-      ',': {
-        '0': {
-          action_: ['output-0', 'comma'],
-          nextState: 'o'
-        }
-      },
-      '.': {
-        '0': {
-          action_: ['output-0', 'copy'],
-          nextState: 'o'
-        }
-      },
-      'else': {
-        '*': {
-          action_: 'text='
-        }
-      }
-    }),
-    actions: {
-      'comma': function comma() {
-        return {
-          type_: 'commaDecimal'
-        };
-      },
-      'output-0': function output0(buffer) {
-        /** @type {ParserOutput[]} */
-        var ret = [];
-        buffer.text_ = buffer.text_ || "";
-
-        if (buffer.text_.length > 4) {
-          var a = buffer.text_.length % 3;
-
-          if (a === 0) {
-            a = 3;
-          }
-
-          for (var i = buffer.text_.length - 3; i > 0; i -= 3) {
-            ret.push(buffer.text_.substr(i, 3));
-            ret.push({
-              type_: '1000 separator'
-            });
-          }
-
-          ret.push(buffer.text_.substr(0, a));
-          ret.reverse();
-        } else {
-          ret.push(buffer.text_);
-        }
-
-        for (var p in buffer) {
-          delete buffer[p];
-        }
-
-        return ret;
-      },
-      'output-o': function outputO(buffer) {
-        /** @type {ParserOutput[]} */
-        var ret = [];
-        buffer.text_ = buffer.text_ || "";
-
-        if (buffer.text_.length > 4) {
-          var a = buffer.text_.length - 3;
-
-          for (var i = 0; i < a; i += 3) {
-            ret.push(buffer.text_.substr(i, 3));
-            ret.push({
-              type_: '1000 separator'
-            });
-          }
-
-          ret.push(buffer.text_.substr(i));
-        } else {
-          ret.push(buffer.text_);
-        }
-
-        for (var p in buffer) {
-          delete buffer[p];
-        }
-
-        return ret;
-      }
-    } //#endregion
-
-  }
-}; //
-// texify: Take MhchemParser output and convert it to TeX
-//
-
-/** @type {Texify} */
-
-var texify = {
-  go: function go(input, isInner) {
-    // (recursive, max 4 levels)
-    if (!input) {
-      return "";
-    }
-
-    var res = "";
-    var cee = false;
-
-    for (var i = 0; i < input.length; i++) {
-      var inputi = input[i];
-
-      if (typeof inputi === "string") {
-        res += inputi;
-      } else {
-        res += texify._go2(inputi);
-
-        if (inputi.type_ === '1st-level escape') {
-          cee = true;
-        }
-      }
-    }
-
-    if (!isInner && !cee && res) {
-      res = "{" + res + "}";
-    }
-
-    return res;
-  },
-  _goInner: function _goInner(input) {
-    if (!input) {
-      return input;
-    }
-
-    return texify.go(input, true);
-  },
-  _go2: function _go2(buf) {
-    /** @type {undefined | string} */
-    var res;
-
-    switch (buf.type_) {
-      case 'chemfive':
-        res = "";
-        var b5 = {
-          a: texify._goInner(buf.a),
-          b: texify._goInner(buf.b),
-          p: texify._goInner(buf.p),
-          o: texify._goInner(buf.o),
-          q: texify._goInner(buf.q),
-          d: texify._goInner(buf.d)
-        }; //
-        // a
-        //
-
-        if (b5.a) {
-          if (b5.a.match(/^[+\-]/)) {
-            b5.a = "{" + b5.a + "}";
-          }
-
-          res += b5.a + "\\,";
-        } //
-        // b and p
-        //
-
-
-        if (b5.b || b5.p) {
-          res += "{\\vphantom{X}}";
-          res += "^{\\hphantom{" + (b5.b || "") + "}}_{\\hphantom{" + (b5.p || "") + "}}";
-          res += "{\\vphantom{X}}";
-          res += "^{\\smash[t]{\\vphantom{2}}\\mathllap{" + (b5.b || "") + "}}";
-          res += "_{\\vphantom{2}\\mathllap{\\smash[t]{" + (b5.p || "") + "}}}";
-        } //
-        // o
-        //
-
-
-        if (b5.o) {
-          if (b5.o.match(/^[+\-]/)) {
-            b5.o = "{" + b5.o + "}";
-          }
-
-          res += b5.o;
-        } //
-        // q and d
-        //
-
-
-        if (buf.dType === 'kv') {
-          if (b5.d || b5.q) {
-            res += "{\\vphantom{X}}";
-          }
-
-          if (b5.d) {
-            res += "^{" + b5.d + "}";
-          }
-
-          if (b5.q) {
-            res += "_{\\smash[t]{" + b5.q + "}}";
-          }
-        } else if (buf.dType === 'oxidation') {
-          if (b5.d) {
-            res += "{\\vphantom{X}}";
-            res += "^{" + b5.d + "}";
-          }
-
-          if (b5.q) {
-            res += "{\\vphantom{X}}";
-            res += "_{\\smash[t]{" + b5.q + "}}";
-          }
-        } else {
-          if (b5.q) {
-            res += "{\\vphantom{X}}";
-            res += "_{\\smash[t]{" + b5.q + "}}";
-          }
-
-          if (b5.d) {
-            res += "{\\vphantom{X}}";
-            res += "^{" + b5.d + "}";
-          }
-        }
-
-        break;
-
-      case 'rm':
-        res = "\\mathrm{" + buf.p1 + "}";
-        break;
-
-      case 'text':
-        if (buf.p1.match(/[\^_]/)) {
-          buf.p1 = buf.p1.replace(" ", "~").replace("-", "\\text{-}");
-          res = "\\mathrm{" + buf.p1 + "}";
-        } else {
-          res = "\\text{" + buf.p1 + "}";
-        }
-
-        break;
-
-      case 'roman numeral':
-        res = "\\mathrm{" + buf.p1 + "}";
-        break;
-
-      case 'state of aggregation':
-        res = "\\mskip2mu " + texify._goInner(buf.p1);
-        break;
-
-      case 'state of aggregation subscript':
-        res = "\\mskip1mu " + texify._goInner(buf.p1);
-        break;
-
-      case 'bond':
-        res = texify._getBond(buf.kind_);
-
-        if (!res) {
-          throw ["MhchemErrorBond", "mhchem Error. Unknown bond type (" + buf.kind_ + ")"];
-        }
-
-        break;
-
-      case 'frac':
-        var c = "\\frac{" + buf.p1 + "}{" + buf.p2 + "}";
-        res = "\\mathchoice{\\textstyle" + c + "}{" + c + "}{" + c + "}{" + c + "}";
-        break;
-
-      case 'pu-frac':
-        var d = "\\frac{" + texify._goInner(buf.p1) + "}{" + texify._goInner(buf.p2) + "}";
-        res = "\\mathchoice{\\textstyle" + d + "}{" + d + "}{" + d + "}{" + d + "}";
-        break;
-
-      case 'tex-math':
-        res = buf.p1 + " ";
-        break;
-
-      case 'frac-ce':
-        res = "\\frac{" + texify._goInner(buf.p1) + "}{" + texify._goInner(buf.p2) + "}";
-        break;
-
-      case 'overset':
-        res = "\\overset{" + texify._goInner(buf.p1) + "}{" + texify._goInner(buf.p2) + "}";
-        break;
-
-      case 'underset':
-        res = "\\underset{" + texify._goInner(buf.p1) + "}{" + texify._goInner(buf.p2) + "}";
-        break;
-
-      case 'underbrace':
-        res = "\\underbrace{" + texify._goInner(buf.p1) + "}_{" + texify._goInner(buf.p2) + "}";
-        break;
-
-      case 'color':
-        res = "{\\color{" + buf.color1 + "}{" + texify._goInner(buf.color2) + "}}";
-        break;
-
-      case 'color0':
-        res = "\\color{" + buf.color + "}";
-        break;
-
-      case 'arrow':
-        var b6 = {
-          rd: texify._goInner(buf.rd),
-          rq: texify._goInner(buf.rq)
-        };
-
-        var arrow = "\\x" + texify._getArrow(buf.r);
-
-        if (b6.rq) {
-          arrow += "[{" + b6.rq + "}]";
-        }
-
-        if (b6.rd) {
-          arrow += "{" + b6.rd + "}";
-        } else {
-          arrow += "{}";
-        }
-
-        res = arrow;
-        break;
-
-      case 'operator':
-        res = texify._getOperator(buf.kind_);
-        break;
-
-      case '1st-level escape':
-        res = buf.p1 + " "; // &, \\\\, \\hlin
-
-        break;
-
-      case 'space':
-        res = " ";
-        break;
-
-      case 'entitySkip':
-        res = "~";
-        break;
-
-      case 'pu-space-1':
-        res = "~";
-        break;
-
-      case 'pu-space-2':
-        res = "\\mkern3mu ";
-        break;
-
-      case '1000 separator':
-        res = "\\mkern2mu ";
-        break;
-
-      case 'commaDecimal':
-        res = "{,}";
-        break;
-
-      case 'comma enumeration L':
-        res = "{" + buf.p1 + "}\\mkern6mu ";
-        break;
-
-      case 'comma enumeration M':
-        res = "{" + buf.p1 + "}\\mkern3mu ";
-        break;
-
-      case 'comma enumeration S':
-        res = "{" + buf.p1 + "}\\mkern1mu ";
-        break;
-
-      case 'hyphen':
-        res = "\\text{-}";
-        break;
-
-      case 'addition compound':
-        res = "\\,{\\cdot}\\,";
-        break;
-
-      case 'electron dot':
-        res = "\\mkern1mu \\bullet\\mkern1mu ";
-        break;
-
-      case 'KV x':
-        res = "{\\times}";
-        break;
-
-      case 'prime':
-        res = "\\prime ";
-        break;
-
-      case 'cdot':
-        res = "\\cdot ";
-        break;
-
-      case 'tight cdot':
-        res = "\\mkern1mu{\\cdot}\\mkern1mu ";
-        break;
-
-      case 'times':
-        res = "\\times ";
-        break;
-
-      case 'circa':
-        res = "{\\sim}";
-        break;
-
-      case '^':
-        res = "uparrow";
-        break;
-
-      case 'v':
-        res = "downarrow";
-        break;
-
-      case 'ellipsis':
-        res = "\\ldots ";
-        break;
-
-      case '/':
-        res = "/";
-        break;
-
-      case ' / ':
-        res = "\\,/\\,";
-        break;
-
-      default:
-        assertNever(buf);
-        throw ["MhchemBugT", "mhchem bug T. Please report."];
-      // Missing texify rule or unknown MhchemParser output
-    }
-
-    assertString(res);
-    return res;
-  },
-  _getArrow: function _getArrow(a) {
-    switch (a) {
-      case "->":
-        return "rightarrow";
-
-      case "\u2192":
-        return "rightarrow";
-
-      case "\u27F6":
-        return "rightarrow";
-
-      case "<-":
-        return "leftarrow";
-
-      case "<->":
-        return "leftrightarrow";
-
-      case "<-->":
-        return "rightleftarrows";
-
-      case "<=>":
-        return "rightleftharpoons";
-
-      case "\u21CC":
-        return "rightleftharpoons";
-
-      case "<=>>":
-        return "rightequilibrium";
-
-      case "<<=>":
-        return "leftequilibrium";
-
-      default:
-        assertNever(a);
-        throw ["MhchemBugT", "mhchem bug T. Please report."];
-    }
-  },
-  _getBond: function _getBond(a) {
-    switch (a) {
-      case "-":
-        return "{-}";
-
-      case "1":
-        return "{-}";
-
-      case "=":
-        return "{=}";
-
-      case "2":
-        return "{=}";
-
-      case "#":
-        return "{\\equiv}";
-
-      case "3":
-        return "{\\equiv}";
-
-      case "~":
-        return "{\\tripledash}";
-
-      case "~-":
-        return "{\\mathrlap{\\raisebox{-.1em}{$-$}}\\raisebox{.1em}{$\\tripledash$}}";
-
-      case "~=":
-        return "{\\mathrlap{\\raisebox{-.2em}{$-$}}\\mathrlap{\\raisebox{.2em}{$\\tripledash$}}-}";
-
-      case "~--":
-        return "{\\mathrlap{\\raisebox{-.2em}{$-$}}\\mathrlap{\\raisebox{.2em}{$\\tripledash$}}-}";
-
-      case "-~-":
-        return "{\\mathrlap{\\raisebox{-.2em}{$-$}}\\mathrlap{\\raisebox{.2em}{$-$}}\\tripledash}";
-
-      case "...":
-        return "{{\\cdot}{\\cdot}{\\cdot}}";
-
-      case "....":
-        return "{{\\cdot}{\\cdot}{\\cdot}{\\cdot}}";
-
-      case "->":
-        return "{\\rightarrow}";
-
-      case "<-":
-        return "{\\leftarrow}";
-
-      case "<":
-        return "{<}";
-
-      case ">":
-        return "{>}";
-
-      default:
-        assertNever(a);
-        throw ["MhchemBugT", "mhchem bug T. Please report."];
-    }
-  },
-  _getOperator: function _getOperator(a) {
-    switch (a) {
-      case "+":
-        return " {}+{} ";
-
-      case "-":
-        return " {}-{} ";
-
-      case "=":
-        return " {}={} ";
-
-      case "<":
-        return " {}<{} ";
-
-      case ">":
-        return " {}>{} ";
-
-      case "<<":
-        return " {}\\ll{} ";
-
-      case ">>":
-        return " {}\\gg{} ";
-
-      case "\\pm":
-        return " {}\\pm{} ";
-
-      case "\\approx":
-        return " {}\\approx{} ";
-
-      case "$\\approx$":
-        return " {}\\approx{} ";
-
-      case "v":
-        return " \\downarrow{} ";
-
-      case "(v)":
-        return " \\downarrow{} ";
-
-      case "^":
-        return " \\uparrow{} ";
-
-      case "(^)":
-        return " \\uparrow{} ";
-
-      default:
-        assertNever(a);
-        throw ["MhchemBugT", "mhchem bug T. Please report."];
-    }
-  }
-}; //
-// Helpers for code anaylsis
-// Will show type error at calling position
-//
-
-/** @param {number} a */
-
-function assertNever(a) {}
-/** @param {string} a */
-
-
-function assertString(a) {}
-
-/***/ })
-/******/ ])["default"];
-});
\ No newline at end of file
diff --git a/registry/vulkan/katex/contrib/mhchem.min.js b/registry/vulkan/katex/contrib/mhchem.min.js
deleted file mode 100644
index 8fd9cca..0000000
--- a/registry/vulkan/katex/contrib/mhchem.min.js
+++ /dev/null
@@ -1 +0,0 @@
-!function(t,e){if("object"==typeof exports&&"object"==typeof module)module.exports=e(require("katex"));else if("function"==typeof define&&define.amd)define(["katex"],e);else{var n="object"==typeof exports?e(require("katex")):e(t.katex);for(var o in n)("object"==typeof exports?exports:t)[o]=n[o]}}("undefined"!=typeof self?self:this,function(t){return function(t){var e={};function n(o){if(e[o])return e[o].exports;var a=e[o]={i:o,l:!1,exports:{}};return t[o].call(a.exports,a,a.exports,n),a.l=!0,a.exports}return n.m=t,n.c=e,n.d=function(t,e,o){n.o(t,e)||Object.defineProperty(t,e,{enumerable:!0,get:o})},n.r=function(t){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},n.t=function(t,e){if(1&e&&(t=n(t)),8&e)return t;if(4&e&&"object"==typeof t&&t&&t.__esModule)return t;var o=Object.create(null);if(n.r(o),Object.defineProperty(o,"default",{enumerable:!0,value:t}),2&e&&"string"!=typeof t)for(var a in t)n.d(o,a,function(e){return t[e]}.bind(null,a));return o},n.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return n.d(e,"a",e),e},n.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},n.p="",n(n.s=1)}([function(e,n){e.exports=t},function(t,e,n){"use strict";n.r(e);var o=n(0),a=n.n(o);a.a.__defineMacro("\\ce",function(t){return r(t.consumeArgs(1)[0],"ce")}),a.a.__defineMacro("\\pu",function(t){return r(t.consumeArgs(1)[0],"pu")}),a.a.__defineMacro("\\tripledash","{\\vphantom{-}\\raisebox{2.56mu}{$\\mkern2mu\\tiny\\text{-}\\mkern1mu\\text{-}\\mkern1mu\\text{-}\\mkern2mu$}}");var r=function(t,e){for(var n="",o=t[t.length-1].loc.start,a=t.length-1;a>=0;a--)t[a].loc.start>o&&(n+=" ",o=t[a].loc.start),n+=t[a].text,o+=t[a].text.length;return c.go(i.go(n,e))},i={go:function(t,e){if(!t)return[];void 0===e&&(e="ce");var n,o="0",a={};a.parenthesisLevel=0,t=(t=(t=t.replace(/\n/g," ")).replace(/[\u2212\u2013\u2014\u2010]/g,"-")).replace(/[\u2026]/g,"...");for(var r=10,c=[];;){n!==t?(r=10,n=t):r--;var u=i.stateMachines[e],p=u.transitions[o]||u.transitions["*"];t:for(var s=0;s<p.length;s++){var _=i.patterns.match_(p[s].pattern,t);if(_){for(var d=p[s].task,m=0;m<d.action_.length;m++){var l;if(u.actions[d.action_[m].type_])l=u.actions[d.action_[m].type_](a,_.match_,d.action_[m].option);else{if(!i.actions[d.action_[m].type_])throw["MhchemBugA","mhchem bug A. Please report. ("+d.action_[m].type_+")"];l=i.actions[d.action_[m].type_](a,_.match_,d.action_[m].option)}i.concatArray(c,l)}if(o=d.nextState||o,!(t.length>0))return c;if(d.revisit||(t=_.remainder),!d.toContinue)break t}}if(r<=0)throw["MhchemBugU","mhchem bug U. Please report."]}},concatArray:function(t,e){if(e)if(Array.isArray(e))for(var n=0;n<e.length;n++)t.push(e[n]);else t.push(e)},patterns:{patterns:{empty:/^$/,else:/^./,else2:/^./,space:/^\s/,"space A":/^\s(?=[A-Z\\$])/,space$:/^\s$/,"a-z":/^[a-z]/,x:/^x/,x$:/^x$/,i$:/^i$/,letters:/^(?:[a-zA-Z\u03B1-\u03C9\u0391-\u03A9?@]|(?:\\(?:alpha|beta|gamma|delta|epsilon|zeta|eta|theta|iota|kappa|lambda|mu|nu|xi|omicron|pi|rho|sigma|tau|upsilon|phi|chi|psi|omega|Gamma|Delta|Theta|Lambda|Xi|Pi|Sigma|Upsilon|Phi|Psi|Omega)(?:\s+|\{\}|(?![a-zA-Z]))))+/,"\\greek":/^\\(?:alpha|beta|gamma|delta|epsilon|zeta|eta|theta|iota|kappa|lambda|mu|nu|xi|omicron|pi|rho|sigma|tau|upsilon|phi|chi|psi|omega|Gamma|Delta|Theta|Lambda|Xi|Pi|Sigma|Upsilon|Phi|Psi|Omega)(?:\s+|\{\}|(?![a-zA-Z]))/,"one lowercase latin letter $":/^(?:([a-z])(?:$|[^a-zA-Z]))$/,"$one lowercase latin letter$ $":/^\$(?:([a-z])(?:$|[^a-zA-Z]))\$$/,"one lowercase greek letter $":/^(?:\$?[\u03B1-\u03C9]\$?|\$?\\(?:alpha|beta|gamma|delta|epsilon|zeta|eta|theta|iota|kappa|lambda|mu|nu|xi|omicron|pi|rho|sigma|tau|upsilon|phi|chi|psi|omega)\s*\$?)(?:\s+|\{\}|(?![a-zA-Z]))$/,digits:/^[0-9]+/,"-9.,9":/^[+\-]?(?:[0-9]+(?:[,.][0-9]+)?|[0-9]*(?:\.[0-9]+))/,"-9.,9 no missing 0":/^[+\-]?[0-9]+(?:[.,][0-9]+)?/,"(-)(9.,9)(e)(99)":function(t){var e=t.match(/^(\+\-|\+\/\-|\+|\-|\\pm\s?)?([0-9]+(?:[,.][0-9]+)?|[0-9]*(?:\.[0-9]+))?(\((?:[0-9]+(?:[,.][0-9]+)?|[0-9]*(?:\.[0-9]+))\))?(?:([eE]|\s*(\*|x|\\times|\u00D7)\s*10\^)([+\-]?[0-9]+|\{[+\-]?[0-9]+\}))?/);return e&&e[0]?{match_:e.splice(1),remainder:t.substr(e[0].length)}:null},"(-)(9)^(-9)":function(t){var e=t.match(/^(\+\-|\+\/\-|\+|\-|\\pm\s?)?([0-9]+(?:[,.][0-9]+)?|[0-9]*(?:\.[0-9]+)?)\^([+\-]?[0-9]+|\{[+\-]?[0-9]+\})/);return e&&e[0]?{match_:e.splice(1),remainder:t.substr(e[0].length)}:null},"state of aggregation $":function(t){var e=i.patterns.findObserveGroups(t,"",/^\([a-z]{1,3}(?=[\),])/,")","");if(e&&e.remainder.match(/^($|[\s,;\)\]\}])/))return e;var n=t.match(/^(?:\((?:\\ca\s?)?\$[amothc]\$\))/);return n?{match_:n[0],remainder:t.substr(n[0].length)}:null},"_{(state of aggregation)}$":/^_\{(\([a-z]{1,3}\))\}/,"{[(":/^(?:\\\{|\[|\()/,")]}":/^(?:\)|\]|\\\})/,", ":/^[,;]\s*/,",":/^[,;]/,".":/^[.]/,". ":/^([.\u22C5\u00B7\u2022])\s*/,"...":/^\.\.\.(?=$|[^.])/,"* ":/^([*])\s*/,"^{(...)}":function(t){return i.patterns.findObserveGroups(t,"^{","","","}")},"^($...$)":function(t){return i.patterns.findObserveGroups(t,"^","$","$","")},"^a":/^\^([0-9]+|[^\\_])/,"^\\x{}{}":function(t){return i.patterns.findObserveGroups(t,"^",/^\\[a-zA-Z]+\{/,"}","","","{","}","",!0)},"^\\x{}":function(t){return i.patterns.findObserveGroups(t,"^",/^\\[a-zA-Z]+\{/,"}","")},"^\\x":/^\^(\\[a-zA-Z]+)\s*/,"^(-1)":/^\^(-?\d+)/,"'":/^'/,"_{(...)}":function(t){return i.patterns.findObserveGroups(t,"_{","","","}")},"_($...$)":function(t){return i.patterns.findObserveGroups(t,"_","$","$","")},_9:/^_([+\-]?[0-9]+|[^\\])/,"_\\x{}{}":function(t){return i.patterns.findObserveGroups(t,"_",/^\\[a-zA-Z]+\{/,"}","","","{","}","",!0)},"_\\x{}":function(t){return i.patterns.findObserveGroups(t,"_",/^\\[a-zA-Z]+\{/,"}","")},"_\\x":/^_(\\[a-zA-Z]+)\s*/,"^_":/^(?:\^(?=_)|\_(?=\^)|[\^_]$)/,"{}":/^\{\}/,"{...}":function(t){return i.patterns.findObserveGroups(t,"","{","}","")},"{(...)}":function(t){return i.patterns.findObserveGroups(t,"{","","","}")},"$...$":function(t){return i.patterns.findObserveGroups(t,"","$","$","")},"${(...)}$":function(t){return i.patterns.findObserveGroups(t,"${","","","}$")},"$(...)$":function(t){return i.patterns.findObserveGroups(t,"$","","","$")},"=<>":/^[=<>]/,"#":/^[#\u2261]/,"+":/^\+/,"-$":/^-(?=[\s_},;\]\/]|$|\([a-z]+\))/,"-9":/^-(?=[0-9])/,"- orbital overlap":/^-(?=(?:[spd]|sp)(?:$|[\s,;\)\]\}]))/,"-":/^-/,"pm-operator":/^(?:\\pm|\$\\pm\$|\+-|\+\/-)/,operator:/^(?:\+|(?:[\-=<>]|<<|>>|\\approx|\$\\approx\$)(?=\s|$|-?[0-9]))/,arrowUpDown:/^(?:v|\(v\)|\^|\(\^\))(?=$|[\s,;\)\]\}])/,"\\bond{(...)}":function(t){return i.patterns.findObserveGroups(t,"\\bond{","","","}")},"->":/^(?:<->|<-->|->|<-|<=>>|<<=>|<=>|[\u2192\u27F6\u21CC])/,CMT:/^[CMT](?=\[)/,"[(...)]":function(t){return i.patterns.findObserveGroups(t,"[","","","]")},"1st-level escape":/^(&|\\\\|\\hline)\s*/,"\\,":/^(?:\\[,\ ;:])/,"\\x{}{}":function(t){return i.patterns.findObserveGroups(t,"",/^\\[a-zA-Z]+\{/,"}","","","{","}","",!0)},"\\x{}":function(t){return i.patterns.findObserveGroups(t,"",/^\\[a-zA-Z]+\{/,"}","")},"\\ca":/^\\ca(?:\s+|(?![a-zA-Z]))/,"\\x":/^(?:\\[a-zA-Z]+\s*|\\[_&{}%])/,orbital:/^(?:[0-9]{1,2}[spdfgh]|[0-9]{0,2}sp)(?=$|[^a-zA-Z])/,others:/^[\/~|]/,"\\frac{(...)}":function(t){return i.patterns.findObserveGroups(t,"\\frac{","","","}","{","","","}")},"\\overset{(...)}":function(t){return i.patterns.findObserveGroups(t,"\\overset{","","","}","{","","","}")},"\\underset{(...)}":function(t){return i.patterns.findObserveGroups(t,"\\underset{","","","}","{","","","}")},"\\underbrace{(...)}":function(t){return i.patterns.findObserveGroups(t,"\\underbrace{","","","}_","{","","","}")},"\\color{(...)}0":function(t){return i.patterns.findObserveGroups(t,"\\color{","","","}")},"\\color{(...)}{(...)}1":function(t){return i.patterns.findObserveGroups(t,"\\color{","","","}","{","","","}")},"\\color(...){(...)}2":function(t){return i.patterns.findObserveGroups(t,"\\color","\\","",/^(?=\{)/,"{","","","}")},"\\ce{(...)}":function(t){return i.patterns.findObserveGroups(t,"\\ce{","","","}")},oxidation$:/^(?:[+-][IVX]+|\\pm\s*0|\$\\pm\$\s*0)$/,"d-oxidation$":/^(?:[+-]?\s?[IVX]+|\\pm\s*0|\$\\pm\$\s*0)$/,"roman numeral":/^[IVX]+/,"1/2$":/^[+\-]?(?:[0-9]+|\$[a-z]\$|[a-z])\/[0-9]+(?:\$[a-z]\$|[a-z])?$/,amount:function(t){var e;if(e=t.match(/^(?:(?:(?:\([+\-]?[0-9]+\/[0-9]+\)|[+\-]?(?:[0-9]+|\$[a-z]\$|[a-z])\/[0-9]+|[+\-]?[0-9]+[.,][0-9]+|[+\-]?\.[0-9]+|[+\-]?[0-9]+)(?:[a-z](?=\s*[A-Z]))?)|[+\-]?[a-z](?=\s*[A-Z])|\+(?!\s))/))return{match_:e[0],remainder:t.substr(e[0].length)};var n=i.patterns.findObserveGroups(t,"","$","$","");return n&&(e=n.match_.match(/^\$(?:\(?[+\-]?(?:[0-9]*[a-z]?[+\-])?[0-9]*[a-z](?:[+\-][0-9]*[a-z]?)?\)?|\+|-)\$$/))?{match_:e[0],remainder:t.substr(e[0].length)}:null},amount2:function(t){return this.amount(t)},"(KV letters),":/^(?:[A-Z][a-z]{0,2}|i)(?=,)/,formula$:function(t){if(t.match(/^\([a-z]+\)$/))return null;var e=t.match(/^(?:[a-z]|(?:[0-9\ \+\-\,\.\(\)]+[a-z])+[0-9\ \+\-\,\.\(\)]*|(?:[a-z][0-9\ \+\-\,\.\(\)]+)+[a-z]?)$/);return e?{match_:e[0],remainder:t.substr(e[0].length)}:null},uprightEntities:/^(?:pH|pOH|pC|pK|iPr|iBu)(?=$|[^a-zA-Z])/,"/":/^\s*(\/)\s*/,"//":/^\s*(\/\/)\s*/,"*":/^\s*[*.]\s*/},findObserveGroups:function(t,e,n,o,a,r,i,c,u,p){var s=function(t,e){if("string"==typeof e)return 0!==t.indexOf(e)?null:e;var n=t.match(e);return n?n[0]:null},_=s(t,e);if(null===_)return null;if(t=t.substr(_.length),null===(_=s(t,n)))return null;var d=function(t,e,n){for(var o=0;e<t.length;){var a=t.charAt(e),r=s(t.substr(e),n);if(null!==r&&0===o)return{endMatchBegin:e,endMatchEnd:e+r.length};if("{"===a)o++;else if("}"===a){if(0===o)throw["ExtraCloseMissingOpen","Extra close brace or missing open brace"];o--}e++}return null}(t,_.length,o||a);if(null===d)return null;var m=t.substring(0,o?d.endMatchEnd:d.endMatchBegin);if(r||i){var l=this.findObserveGroups(t.substr(d.endMatchEnd),r,i,c,u);if(null===l)return null;var f=[m,l.match_];return{match_:p?f.join(""):f,remainder:l.remainder}}return{match_:m,remainder:t.substr(d.endMatchEnd)}},match_:function(t,e){var n=i.patterns.patterns[t];if(void 0===n)throw["MhchemBugP","mhchem bug P. Please report. ("+t+")"];if("function"==typeof n)return i.patterns.patterns[t](e);var o=e.match(n);return o?{match_:o[2]?[o[1],o[2]]:o[1]?o[1]:o[0],remainder:e.substr(o[0].length)}:null}},actions:{"a=":function(t,e){t.a=(t.a||"")+e},"b=":function(t,e){t.b=(t.b||"")+e},"p=":function(t,e){t.p=(t.p||"")+e},"o=":function(t,e){t.o=(t.o||"")+e},"q=":function(t,e){t.q=(t.q||"")+e},"d=":function(t,e){t.d=(t.d||"")+e},"rm=":function(t,e){t.rm=(t.rm||"")+e},"text=":function(t,e){t.text_=(t.text_||"")+e},insert:function(t,e,n){return{type_:n}},"insert+p1":function(t,e,n){return{type_:n,p1:e}},"insert+p1+p2":function(t,e,n){return{type_:n,p1:e[0],p2:e[1]}},copy:function(t,e){return e},rm:function(t,e){return{type_:"rm",p1:e||""}},text:function(t,e){return i.go(e,"text")},"{text}":function(t,e){var n=["{"];return i.concatArray(n,i.go(e,"text")),n.push("}"),n},"tex-math":function(t,e){return i.go(e,"tex-math")},"tex-math tight":function(t,e){return i.go(e,"tex-math tight")},bond:function(t,e,n){return{type_:"bond",kind_:n||e}},"color0-output":function(t,e){return{type_:"color0",color:e[0]}},ce:function(t,e){return i.go(e)},"1/2":function(t,e){var n=[];e.match(/^[+\-]/)&&(n.push(e.substr(0,1)),e=e.substr(1));var o=e.match(/^([0-9]+|\$[a-z]\$|[a-z])\/([0-9]+)(\$[a-z]\$|[a-z])?$/);return o[1]=o[1].replace(/\$/g,""),n.push({type_:"frac",p1:o[1],p2:o[2]}),o[3]&&(o[3]=o[3].replace(/\$/g,""),n.push({type_:"tex-math",p1:o[3]})),n},"9,9":function(t,e){return i.go(e,"9,9")}},createTransitions:function(t){var e,n,o,a,r={};for(e in t)for(n in t[e])for(o=n.split("|"),t[e][n].stateArray=o,a=0;a<o.length;a++)r[o[a]]=[];for(e in t)for(n in t[e])for(o=t[e][n].stateArray||[],a=0;a<o.length;a++){var i=t[e][n];if(i.action_){i.action_=[].concat(i.action_);for(var c=0;c<i.action_.length;c++)"string"==typeof i.action_[c]&&(i.action_[c]={type_:i.action_[c]})}else i.action_=[];for(var u=e.split("|"),p=0;p<u.length;p++)if("*"===o[a])for(var s in r)r[s].push({pattern:u[p],task:i});else r[o[a]].push({pattern:u[p],task:i})}return r},stateMachines:{}};i.stateMachines={ce:{transitions:i.createTransitions({empty:{"*":{action_:"output"}},else:{"0|1|2":{action_:"beginsWithBond=false",revisit:!0,toContinue:!0}},oxidation$:{0:{action_:"oxidation-output"}},CMT:{r:{action_:"rdt=",nextState:"rt"},rd:{action_:"rqt=",nextState:"rdt"}},arrowUpDown:{"0|1|2|as":{action_:["sb=false","output","operator"],nextState:"1"}},uprightEntities:{"0|1|2":{action_:["o=","output"],nextState:"1"}},orbital:{"0|1|2|3":{action_:"o=",nextState:"o"}},"->":{"0|1|2|3":{action_:"r=",nextState:"r"},"a|as":{action_:["output","r="],nextState:"r"},"*":{action_:["output","r="],nextState:"r"}},"+":{o:{action_:"d= kv",nextState:"d"},"d|D":{action_:"d=",nextState:"d"},q:{action_:"d=",nextState:"qd"},"qd|qD":{action_:"d=",nextState:"qd"},dq:{action_:["output","d="],nextState:"d"},3:{action_:["sb=false","output","operator"],nextState:"0"}},amount:{"0|2":{action_:"a=",nextState:"a"}},"pm-operator":{"0|1|2|a|as":{action_:["sb=false","output",{type_:"operator",option:"\\pm"}],nextState:"0"}},operator:{"0|1|2|a|as":{action_:["sb=false","output","operator"],nextState:"0"}},"-$":{"o|q":{action_:["charge or bond","output"],nextState:"qd"},d:{action_:"d=",nextState:"d"},D:{action_:["output",{type_:"bond",option:"-"}],nextState:"3"},q:{action_:"d=",nextState:"qd"},qd:{action_:"d=",nextState:"qd"},"qD|dq":{action_:["output",{type_:"bond",option:"-"}],nextState:"3"}},"-9":{"3|o":{action_:["output",{type_:"insert",option:"hyphen"}],nextState:"3"}},"- orbital overlap":{o:{action_:["output",{type_:"insert",option:"hyphen"}],nextState:"2"},d:{action_:["output",{type_:"insert",option:"hyphen"}],nextState:"2"}},"-":{"0|1|2":{action_:[{type_:"output",option:1},"beginsWithBond=true",{type_:"bond",option:"-"}],nextState:"3"},3:{action_:{type_:"bond",option:"-"}},a:{action_:["output",{type_:"insert",option:"hyphen"}],nextState:"2"},as:{action_:[{type_:"output",option:2},{type_:"bond",option:"-"}],nextState:"3"},b:{action_:"b="},o:{action_:{type_:"- after o/d",option:!1},nextState:"2"},q:{action_:{type_:"- after o/d",option:!1},nextState:"2"},"d|qd|dq":{action_:{type_:"- after o/d",option:!0},nextState:"2"},"D|qD|p":{action_:["output",{type_:"bond",option:"-"}],nextState:"3"}},amount2:{"1|3":{action_:"a=",nextState:"a"}},letters:{"0|1|2|3|a|as|b|p|bp|o":{action_:"o=",nextState:"o"},"q|dq":{action_:["output","o="],nextState:"o"},"d|D|qd|qD":{action_:"o after d",nextState:"o"}},digits:{o:{action_:"q=",nextState:"q"},"d|D":{action_:"q=",nextState:"dq"},q:{action_:["output","o="],nextState:"o"},a:{action_:"o=",nextState:"o"}},"space A":{"b|p|bp":{}},space:{a:{nextState:"as"},0:{action_:"sb=false"},"1|2":{action_:"sb=true"},"r|rt|rd|rdt|rdq":{action_:"output",nextState:"0"},"*":{action_:["output","sb=true"],nextState:"1"}},"1st-level escape":{"1|2":{action_:["output",{type_:"insert+p1",option:"1st-level escape"}]},"*":{action_:["output",{type_:"insert+p1",option:"1st-level escape"}],nextState:"0"}},"[(...)]":{"r|rt":{action_:"rd=",nextState:"rd"},"rd|rdt":{action_:"rq=",nextState:"rdq"}},"...":{"o|d|D|dq|qd|qD":{action_:["output",{type_:"bond",option:"..."}],nextState:"3"},"*":{action_:[{type_:"output",option:1},{type_:"insert",option:"ellipsis"}],nextState:"1"}},". |* ":{"*":{action_:["output",{type_:"insert",option:"addition compound"}],nextState:"1"}},"state of aggregation $":{"*":{action_:["output","state of aggregation"],nextState:"1"}},"{[(":{"a|as|o":{action_:["o=","output","parenthesisLevel++"],nextState:"2"},"0|1|2|3":{action_:["o=","output","parenthesisLevel++"],nextState:"2"},"*":{action_:["output","o=","output","parenthesisLevel++"],nextState:"2"}},")]}":{"0|1|2|3|b|p|bp|o":{action_:["o=","parenthesisLevel--"],nextState:"o"},"a|as|d|D|q|qd|qD|dq":{action_:["output","o=","parenthesisLevel--"],nextState:"o"}},", ":{"*":{action_:["output","comma"],nextState:"0"}},"^_":{"*":{}},"^{(...)}|^($...$)":{"0|1|2|as":{action_:"b=",nextState:"b"},p:{action_:"b=",nextState:"bp"},"3|o":{action_:"d= kv",nextState:"D"},q:{action_:"d=",nextState:"qD"},"d|D|qd|qD|dq":{action_:["output","d="],nextState:"D"}},"^a|^\\x{}{}|^\\x{}|^\\x|'":{"0|1|2|as":{action_:"b=",nextState:"b"},p:{action_:"b=",nextState:"bp"},"3|o":{action_:"d= kv",nextState:"d"},q:{action_:"d=",nextState:"qd"},"d|qd|D|qD":{action_:"d="},dq:{action_:["output","d="],nextState:"d"}},"_{(state of aggregation)}$":{"d|D|q|qd|qD|dq":{action_:["output","q="],nextState:"q"}},"_{(...)}|_($...$)|_9|_\\x{}{}|_\\x{}|_\\x":{"0|1|2|as":{action_:"p=",nextState:"p"},b:{action_:"p=",nextState:"bp"},"3|o":{action_:"q=",nextState:"q"},"d|D":{action_:"q=",nextState:"dq"},"q|qd|qD|dq":{action_:["output","q="],nextState:"q"}},"=<>":{"0|1|2|3|a|as|o|q|d|D|qd|qD|dq":{action_:[{type_:"output",option:2},"bond"],nextState:"3"}},"#":{"0|1|2|3|a|as|o":{action_:[{type_:"output",option:2},{type_:"bond",option:"#"}],nextState:"3"}},"{}":{"*":{action_:{type_:"output",option:1},nextState:"1"}},"{...}":{"0|1|2|3|a|as|b|p|bp":{action_:"o=",nextState:"o"},"o|d|D|q|qd|qD|dq":{action_:["output","o="],nextState:"o"}},"$...$":{a:{action_:"a="},"0|1|2|3|as|b|p|bp|o":{action_:"o=",nextState:"o"},"as|o":{action_:"o="},"q|d|D|qd|qD|dq":{action_:["output","o="],nextState:"o"}},"\\bond{(...)}":{"*":{action_:[{type_:"output",option:2},"bond"],nextState:"3"}},"\\frac{(...)}":{"*":{action_:[{type_:"output",option:1},"frac-output"],nextState:"3"}},"\\overset{(...)}":{"*":{action_:[{type_:"output",option:2},"overset-output"],nextState:"3"}},"\\underset{(...)}":{"*":{action_:[{type_:"output",option:2},"underset-output"],nextState:"3"}},"\\underbrace{(...)}":{"*":{action_:[{type_:"output",option:2},"underbrace-output"],nextState:"3"}},"\\color{(...)}{(...)}1|\\color(...){(...)}2":{"*":{action_:[{type_:"output",option:2},"color-output"],nextState:"3"}},"\\color{(...)}0":{"*":{action_:[{type_:"output",option:2},"color0-output"]}},"\\ce{(...)}":{"*":{action_:[{type_:"output",option:2},"ce"],nextState:"3"}},"\\,":{"*":{action_:[{type_:"output",option:1},"copy"],nextState:"1"}},"\\x{}{}|\\x{}|\\x":{"0|1|2|3|a|as|b|p|bp|o|c0":{action_:["o=","output"],nextState:"3"},"*":{action_:["output","o=","output"],nextState:"3"}},others:{"*":{action_:[{type_:"output",option:1},"copy"],nextState:"3"}},else2:{a:{action_:"a to o",nextState:"o",revisit:!0},as:{action_:["output","sb=true"],nextState:"1",revisit:!0},"r|rt|rd|rdt|rdq":{action_:["output"],nextState:"0",revisit:!0},"*":{action_:["output","copy"],nextState:"3"}}}),actions:{"o after d":function(t,e){var n;if((t.d||"").match(/^[0-9]+$/)){var o=t.d;t.d=void 0,n=this.output(t),t.b=o}else n=this.output(t);return i.actions["o="](t,e),n},"d= kv":function(t,e){t.d=e,t.dType="kv"},"charge or bond":function(t,e){if(t.beginsWithBond){var n=[];return i.concatArray(n,this.output(t)),i.concatArray(n,i.actions.bond(t,e,"-")),n}t.d=e},"- after o/d":function(t,e,n){var o=i.patterns.match_("orbital",t.o||""),a=i.patterns.match_("one lowercase greek letter $",t.o||""),r=i.patterns.match_("one lowercase latin letter $",t.o||""),c=i.patterns.match_("$one lowercase latin letter$ $",t.o||""),u="-"===e&&(o&&""===o.remainder||a||r||c);!u||t.a||t.b||t.p||t.d||t.q||o||!r||(t.o="$"+t.o+"$");var p=[];return u?(i.concatArray(p,this.output(t)),p.push({type_:"hyphen"})):(o=i.patterns.match_("digits",t.d||""),n&&o&&""===o.remainder?(i.concatArray(p,i.actions["d="](t,e)),i.concatArray(p,this.output(t))):(i.concatArray(p,this.output(t)),i.concatArray(p,i.actions.bond(t,e,"-")))),p},"a to o":function(t){t.o=t.a,t.a=void 0},"sb=true":function(t){t.sb=!0},"sb=false":function(t){t.sb=!1},"beginsWithBond=true":function(t){t.beginsWithBond=!0},"beginsWithBond=false":function(t){t.beginsWithBond=!1},"parenthesisLevel++":function(t){t.parenthesisLevel++},"parenthesisLevel--":function(t){t.parenthesisLevel--},"state of aggregation":function(t,e){return{type_:"state of aggregation",p1:i.go(e,"o")}},comma:function(t,e){var n=e.replace(/\s*$/,"");return n!==e&&0===t.parenthesisLevel?{type_:"comma enumeration L",p1:n}:{type_:"comma enumeration M",p1:n}},output:function(t,e,n){var o,a,r;t.r?(a="M"===t.rdt?i.go(t.rd,"tex-math"):"T"===t.rdt?[{type_:"text",p1:t.rd||""}]:i.go(t.rd),r="M"===t.rqt?i.go(t.rq,"tex-math"):"T"===t.rqt?[{type_:"text",p1:t.rq||""}]:i.go(t.rq),o={type_:"arrow",r:t.r,rd:a,rq:r}):(o=[],(t.a||t.b||t.p||t.o||t.q||t.d||n)&&(t.sb&&o.push({type_:"entitySkip"}),t.o||t.q||t.d||t.b||t.p||2===n?t.o||t.q||t.d||!t.b&&!t.p?t.o&&"kv"===t.dType&&i.patterns.match_("d-oxidation$",t.d||"")?t.dType="oxidation":t.o&&"kv"===t.dType&&!t.q&&(t.dType=void 0):(t.o=t.a,t.d=t.b,t.q=t.p,t.a=t.b=t.p=void 0):(t.o=t.a,t.a=void 0),o.push({type_:"chemfive",a:i.go(t.a,"a"),b:i.go(t.b,"bd"),p:i.go(t.p,"pq"),o:i.go(t.o,"o"),q:i.go(t.q,"pq"),d:i.go(t.d,"oxidation"===t.dType?"oxidation":"bd"),dType:t.dType})));for(var c in t)"parenthesisLevel"!==c&&"beginsWithBond"!==c&&delete t[c];return o},"oxidation-output":function(t,e){var n=["{"];return i.concatArray(n,i.go(e,"oxidation")),n.push("}"),n},"frac-output":function(t,e){return{type_:"frac-ce",p1:i.go(e[0]),p2:i.go(e[1])}},"overset-output":function(t,e){return{type_:"overset",p1:i.go(e[0]),p2:i.go(e[1])}},"underset-output":function(t,e){return{type_:"underset",p1:i.go(e[0]),p2:i.go(e[1])}},"underbrace-output":function(t,e){return{type_:"underbrace",p1:i.go(e[0]),p2:i.go(e[1])}},"color-output":function(t,e){return{type_:"color",color1:e[0],color2:i.go(e[1])}},"r=":function(t,e){t.r=e},"rdt=":function(t,e){t.rdt=e},"rd=":function(t,e){t.rd=e},"rqt=":function(t,e){t.rqt=e},"rq=":function(t,e){t.rq=e},operator:function(t,e,n){return{type_:"operator",kind_:n||e}}}},a:{transitions:i.createTransitions({empty:{"*":{}},"1/2$":{0:{action_:"1/2"}},else:{0:{nextState:"1",revisit:!0}},"$(...)$":{"*":{action_:"tex-math tight",nextState:"1"}},",":{"*":{action_:{type_:"insert",option:"commaDecimal"}}},else2:{"*":{action_:"copy"}}}),actions:{}},o:{transitions:i.createTransitions({empty:{"*":{}},"1/2$":{0:{action_:"1/2"}},else:{0:{nextState:"1",revisit:!0}},letters:{"*":{action_:"rm"}},"\\ca":{"*":{action_:{type_:"insert",option:"circa"}}},"\\x{}{}|\\x{}|\\x":{"*":{action_:"copy"}},"${(...)}$|$(...)$":{"*":{action_:"tex-math"}},"{(...)}":{"*":{action_:"{text}"}},else2:{"*":{action_:"copy"}}}),actions:{}},text:{transitions:i.createTransitions({empty:{"*":{action_:"output"}},"{...}":{"*":{action_:"text="}},"${(...)}$|$(...)$":{"*":{action_:"tex-math"}},"\\greek":{"*":{action_:["output","rm"]}},"\\,|\\x{}{}|\\x{}|\\x":{"*":{action_:["output","copy"]}},else:{"*":{action_:"text="}}}),actions:{output:function(t){if(t.text_){var e={type_:"text",p1:t.text_};for(var n in t)delete t[n];return e}}}},pq:{transitions:i.createTransitions({empty:{"*":{}},"state of aggregation $":{"*":{action_:"state of aggregation"}},i$:{0:{nextState:"!f",revisit:!0}},"(KV letters),":{0:{action_:"rm",nextState:"0"}},formula$:{0:{nextState:"f",revisit:!0}},"1/2$":{0:{action_:"1/2"}},else:{0:{nextState:"!f",revisit:!0}},"${(...)}$|$(...)$":{"*":{action_:"tex-math"}},"{(...)}":{"*":{action_:"text"}},"a-z":{f:{action_:"tex-math"}},letters:{"*":{action_:"rm"}},"-9.,9":{"*":{action_:"9,9"}},",":{"*":{action_:{type_:"insert+p1",option:"comma enumeration S"}}},"\\color{(...)}{(...)}1|\\color(...){(...)}2":{"*":{action_:"color-output"}},"\\color{(...)}0":{"*":{action_:"color0-output"}},"\\ce{(...)}":{"*":{action_:"ce"}},"\\,|\\x{}{}|\\x{}|\\x":{"*":{action_:"copy"}},else2:{"*":{action_:"copy"}}}),actions:{"state of aggregation":function(t,e){return{type_:"state of aggregation subscript",p1:i.go(e,"o")}},"color-output":function(t,e){return{type_:"color",color1:e[0],color2:i.go(e[1],"pq")}}}},bd:{transitions:i.createTransitions({empty:{"*":{}},x$:{0:{nextState:"!f",revisit:!0}},formula$:{0:{nextState:"f",revisit:!0}},else:{0:{nextState:"!f",revisit:!0}},"-9.,9 no missing 0":{"*":{action_:"9,9"}},".":{"*":{action_:{type_:"insert",option:"electron dot"}}},"a-z":{f:{action_:"tex-math"}},x:{"*":{action_:{type_:"insert",option:"KV x"}}},letters:{"*":{action_:"rm"}},"'":{"*":{action_:{type_:"insert",option:"prime"}}},"${(...)}$|$(...)$":{"*":{action_:"tex-math"}},"{(...)}":{"*":{action_:"text"}},"\\color{(...)}{(...)}1|\\color(...){(...)}2":{"*":{action_:"color-output"}},"\\color{(...)}0":{"*":{action_:"color0-output"}},"\\ce{(...)}":{"*":{action_:"ce"}},"\\,|\\x{}{}|\\x{}|\\x":{"*":{action_:"copy"}},else2:{"*":{action_:"copy"}}}),actions:{"color-output":function(t,e){return{type_:"color",color1:e[0],color2:i.go(e[1],"bd")}}}},oxidation:{transitions:i.createTransitions({empty:{"*":{}},"roman numeral":{"*":{action_:"roman-numeral"}},"${(...)}$|$(...)$":{"*":{action_:"tex-math"}},else:{"*":{action_:"copy"}}}),actions:{"roman-numeral":function(t,e){return{type_:"roman numeral",p1:e||""}}}},"tex-math":{transitions:i.createTransitions({empty:{"*":{action_:"output"}},"\\ce{(...)}":{"*":{action_:["output","ce"]}},"{...}|\\,|\\x{}{}|\\x{}|\\x":{"*":{action_:"o="}},else:{"*":{action_:"o="}}}),actions:{output:function(t){if(t.o){var e={type_:"tex-math",p1:t.o};for(var n in t)delete t[n];return e}}}},"tex-math tight":{transitions:i.createTransitions({empty:{"*":{action_:"output"}},"\\ce{(...)}":{"*":{action_:["output","ce"]}},"{...}|\\,|\\x{}{}|\\x{}|\\x":{"*":{action_:"o="}},"-|+":{"*":{action_:"tight operator"}},else:{"*":{action_:"o="}}}),actions:{"tight operator":function(t,e){t.o=(t.o||"")+"{"+e+"}"},output:function(t){if(t.o){var e={type_:"tex-math",p1:t.o};for(var n in t)delete t[n];return e}}}},"9,9":{transitions:i.createTransitions({empty:{"*":{}},",":{"*":{action_:"comma"}},else:{"*":{action_:"copy"}}}),actions:{comma:function(){return{type_:"commaDecimal"}}}},pu:{transitions:i.createTransitions({empty:{"*":{action_:"output"}},space$:{"*":{action_:["output","space"]}},"{[(|)]}":{"0|a":{action_:"copy"}},"(-)(9)^(-9)":{0:{action_:"number^",nextState:"a"}},"(-)(9.,9)(e)(99)":{0:{action_:"enumber",nextState:"a"}},space:{"0|a":{}},"pm-operator":{"0|a":{action_:{type_:"operator",option:"\\pm"},nextState:"0"}},operator:{"0|a":{action_:"copy",nextState:"0"}},"//":{d:{action_:"o=",nextState:"/"}},"/":{d:{action_:"o=",nextState:"/"}},"{...}|else":{"0|d":{action_:"d=",nextState:"d"},a:{action_:["space","d="],nextState:"d"},"/|q":{action_:"q=",nextState:"q"}}}),actions:{enumber:function(t,e){var n=[];return"+-"===e[0]||"+/-"===e[0]?n.push("\\pm "):e[0]&&n.push(e[0]),e[1]&&(i.concatArray(n,i.go(e[1],"pu-9,9")),e[2]&&(e[2].match(/[,.]/)?i.concatArray(n,i.go(e[2],"pu-9,9")):n.push(e[2])),e[3]=e[4]||e[3],e[3]&&(e[3]=e[3].trim(),"e"===e[3]||"*"===e[3].substr(0,1)?n.push({type_:"cdot"}):n.push({type_:"times"}))),e[3]&&n.push("10^{"+e[5]+"}"),n},"number^":function(t,e){var n=[];return"+-"===e[0]||"+/-"===e[0]?n.push("\\pm "):e[0]&&n.push(e[0]),i.concatArray(n,i.go(e[1],"pu-9,9")),n.push("^{"+e[2]+"}"),n},operator:function(t,e,n){return{type_:"operator",kind_:n||e}},space:function(){return{type_:"pu-space-1"}},output:function(t){var e,n=i.patterns.match_("{(...)}",t.d||"");n&&""===n.remainder&&(t.d=n.match_);var o=i.patterns.match_("{(...)}",t.q||"");if(o&&""===o.remainder&&(t.q=o.match_),t.d&&(t.d=t.d.replace(/\u00B0C|\^oC|\^{o}C/g,"{}^{\\circ}C"),t.d=t.d.replace(/\u00B0F|\^oF|\^{o}F/g,"{}^{\\circ}F")),t.q){t.q=t.q.replace(/\u00B0C|\^oC|\^{o}C/g,"{}^{\\circ}C"),t.q=t.q.replace(/\u00B0F|\^oF|\^{o}F/g,"{}^{\\circ}F");var a={d:i.go(t.d,"pu"),q:i.go(t.q,"pu")};"//"===t.o?e={type_:"pu-frac",p1:a.d,p2:a.q}:(e=a.d,a.d.length>1||a.q.length>1?e.push({type_:" / "}):e.push({type_:"/"}),i.concatArray(e,a.q))}else e=i.go(t.d,"pu-2");for(var r in t)delete t[r];return e}}},"pu-2":{transitions:i.createTransitions({empty:{"*":{action_:"output"}},"*":{"*":{action_:["output","cdot"],nextState:"0"}},"\\x":{"*":{action_:"rm="}},space:{"*":{action_:["output","space"],nextState:"0"}},"^{(...)}|^(-1)":{1:{action_:"^(-1)"}},"-9.,9":{0:{action_:"rm=",nextState:"0"},1:{action_:"^(-1)",nextState:"0"}},"{...}|else":{"*":{action_:"rm=",nextState:"1"}}}),actions:{cdot:function(){return{type_:"tight cdot"}},"^(-1)":function(t,e){t.rm+="^{"+e+"}"},space:function(){return{type_:"pu-space-2"}},output:function(t){var e=[];if(t.rm){var n=i.patterns.match_("{(...)}",t.rm||"");e=n&&""===n.remainder?i.go(n.match_,"pu"):{type_:"rm",p1:t.rm}}for(var o in t)delete t[o];return e}}},"pu-9,9":{transitions:i.createTransitions({empty:{0:{action_:"output-0"},o:{action_:"output-o"}},",":{0:{action_:["output-0","comma"],nextState:"o"}},".":{0:{action_:["output-0","copy"],nextState:"o"}},else:{"*":{action_:"text="}}}),actions:{comma:function(){return{type_:"commaDecimal"}},"output-0":function(t){var e=[];if(t.text_=t.text_||"",t.text_.length>4){var n=t.text_.length%3;0===n&&(n=3);for(var o=t.text_.length-3;o>0;o-=3)e.push(t.text_.substr(o,3)),e.push({type_:"1000 separator"});e.push(t.text_.substr(0,n)),e.reverse()}else e.push(t.text_);for(var a in t)delete t[a];return e},"output-o":function(t){var e=[];if(t.text_=t.text_||"",t.text_.length>4){for(var n=t.text_.length-3,o=0;o<n;o+=3)e.push(t.text_.substr(o,3)),e.push({type_:"1000 separator"});e.push(t.text_.substr(o))}else e.push(t.text_);for(var a in t)delete t[a];return e}}}};var c={go:function(t,e){if(!t)return"";for(var n="",o=!1,a=0;a<t.length;a++){var r=t[a];"string"==typeof r?n+=r:(n+=c._go2(r),"1st-level escape"===r.type_&&(o=!0))}return e||o||!n||(n="{"+n+"}"),n},_goInner:function(t){return t?c.go(t,!0):t},_go2:function(t){var e;switch(t.type_){case"chemfive":e="";var n={a:c._goInner(t.a),b:c._goInner(t.b),p:c._goInner(t.p),o:c._goInner(t.o),q:c._goInner(t.q),d:c._goInner(t.d)};n.a&&(n.a.match(/^[+\-]/)&&(n.a="{"+n.a+"}"),e+=n.a+"\\,"),(n.b||n.p)&&(e+="{\\vphantom{X}}",e+="^{\\hphantom{"+(n.b||"")+"}}_{\\hphantom{"+(n.p||"")+"}}",e+="{\\vphantom{X}}",e+="^{\\smash[t]{\\vphantom{2}}\\mathllap{"+(n.b||"")+"}}",e+="_{\\vphantom{2}\\mathllap{\\smash[t]{"+(n.p||"")+"}}}"),n.o&&(n.o.match(/^[+\-]/)&&(n.o="{"+n.o+"}"),e+=n.o),"kv"===t.dType?((n.d||n.q)&&(e+="{\\vphantom{X}}"),n.d&&(e+="^{"+n.d+"}"),n.q&&(e+="_{\\smash[t]{"+n.q+"}}")):"oxidation"===t.dType?(n.d&&(e+="{\\vphantom{X}}",e+="^{"+n.d+"}"),n.q&&(e+="{\\vphantom{X}}",e+="_{\\smash[t]{"+n.q+"}}")):(n.q&&(e+="{\\vphantom{X}}",e+="_{\\smash[t]{"+n.q+"}}"),n.d&&(e+="{\\vphantom{X}}",e+="^{"+n.d+"}"));break;case"rm":e="\\mathrm{"+t.p1+"}";break;case"text":t.p1.match(/[\^_]/)?(t.p1=t.p1.replace(" ","~").replace("-","\\text{-}"),e="\\mathrm{"+t.p1+"}"):e="\\text{"+t.p1+"}";break;case"roman numeral":e="\\mathrm{"+t.p1+"}";break;case"state of aggregation":e="\\mskip2mu "+c._goInner(t.p1);break;case"state of aggregation subscript":e="\\mskip1mu "+c._goInner(t.p1);break;case"bond":if(!(e=c._getBond(t.kind_)))throw["MhchemErrorBond","mhchem Error. Unknown bond type ("+t.kind_+")"];break;case"frac":var o="\\frac{"+t.p1+"}{"+t.p2+"}";e="\\mathchoice{\\textstyle"+o+"}{"+o+"}{"+o+"}{"+o+"}";break;case"pu-frac":var a="\\frac{"+c._goInner(t.p1)+"}{"+c._goInner(t.p2)+"}";e="\\mathchoice{\\textstyle"+a+"}{"+a+"}{"+a+"}{"+a+"}";break;case"tex-math":e=t.p1+" ";break;case"frac-ce":e="\\frac{"+c._goInner(t.p1)+"}{"+c._goInner(t.p2)+"}";break;case"overset":e="\\overset{"+c._goInner(t.p1)+"}{"+c._goInner(t.p2)+"}";break;case"underset":e="\\underset{"+c._goInner(t.p1)+"}{"+c._goInner(t.p2)+"}";break;case"underbrace":e="\\underbrace{"+c._goInner(t.p1)+"}_{"+c._goInner(t.p2)+"}";break;case"color":e="{\\color{"+t.color1+"}{"+c._goInner(t.color2)+"}}";break;case"color0":e="\\color{"+t.color+"}";break;case"arrow":var r={rd:c._goInner(t.rd),rq:c._goInner(t.rq)},i="\\x"+c._getArrow(t.r);r.rq&&(i+="[{"+r.rq+"}]"),e=i+=r.rd?"{"+r.rd+"}":"{}";break;case"operator":e=c._getOperator(t.kind_);break;case"1st-level escape":e=t.p1+" ";break;case"space":e=" ";break;case"entitySkip":case"pu-space-1":e="~";break;case"pu-space-2":e="\\mkern3mu ";break;case"1000 separator":e="\\mkern2mu ";break;case"commaDecimal":e="{,}";break;case"comma enumeration L":e="{"+t.p1+"}\\mkern6mu ";break;case"comma enumeration M":e="{"+t.p1+"}\\mkern3mu ";break;case"comma enumeration S":e="{"+t.p1+"}\\mkern1mu ";break;case"hyphen":e="\\text{-}";break;case"addition compound":e="\\,{\\cdot}\\,";break;case"electron dot":e="\\mkern1mu \\bullet\\mkern1mu ";break;case"KV x":e="{\\times}";break;case"prime":e="\\prime ";break;case"cdot":e="\\cdot ";break;case"tight cdot":e="\\mkern1mu{\\cdot}\\mkern1mu ";break;case"times":e="\\times ";break;case"circa":e="{\\sim}";break;case"^":e="uparrow";break;case"v":e="downarrow";break;case"ellipsis":e="\\ldots ";break;case"/":e="/";break;case" / ":e="\\,/\\,";break;default:throw["MhchemBugT","mhchem bug T. Please report."]}return e},_getArrow:function(t){switch(t){case"->":case"\u2192":case"\u27f6":return"rightarrow";case"<-":return"leftarrow";case"<->":return"leftrightarrow";case"<--\x3e":return"rightleftarrows";case"<=>":case"\u21cc":return"rightleftharpoons";case"<=>>":return"rightequilibrium";case"<<=>":return"leftequilibrium";default:throw["MhchemBugT","mhchem bug T. Please report."]}},_getBond:function(t){switch(t){case"-":case"1":return"{-}";case"=":case"2":return"{=}";case"#":case"3":return"{\\equiv}";case"~":return"{\\tripledash}";case"~-":return"{\\mathrlap{\\raisebox{-.1em}{$-$}}\\raisebox{.1em}{$\\tripledash$}}";case"~=":case"~--":return"{\\mathrlap{\\raisebox{-.2em}{$-$}}\\mathrlap{\\raisebox{.2em}{$\\tripledash$}}-}";case"-~-":return"{\\mathrlap{\\raisebox{-.2em}{$-$}}\\mathrlap{\\raisebox{.2em}{$-$}}\\tripledash}";case"...":return"{{\\cdot}{\\cdot}{\\cdot}}";case"....":return"{{\\cdot}{\\cdot}{\\cdot}{\\cdot}}";case"->":return"{\\rightarrow}";case"<-":return"{\\leftarrow}";case"<":return"{<}";case">":return"{>}";default:throw["MhchemBugT","mhchem bug T. Please report."]}},_getOperator:function(t){switch(t){case"+":return" {}+{} ";case"-":return" {}-{} ";case"=":return" {}={} ";case"<":return" {}<{} ";case">":return" {}>{} ";case"<<":return" {}\\ll{} ";case">>":return" {}\\gg{} ";case"\\pm":return" {}\\pm{} ";case"\\approx":case"$\\approx$":return" {}\\approx{} ";case"v":case"(v)":return" \\downarrow{} ";case"^":case"(^)":return" \\uparrow{} ";default:throw["MhchemBugT","mhchem bug T. Please report."]}}}}]).default});
\ No newline at end of file
diff --git a/registry/vulkan/katex/contrib/mhchem.mjs b/registry/vulkan/katex/contrib/mhchem.mjs
deleted file mode 100644
index 46241b5..0000000
--- a/registry/vulkan/katex/contrib/mhchem.mjs
+++ /dev/null
@@ -1,3109 +0,0 @@
-import katex from '../katex.mjs';
-
-/* eslint-disable */
-
-/* -*- Mode: Javascript; indent-tabs-mode:nil; js-indent-level: 2 -*- */
-
-/* vim: set ts=2 et sw=2 tw=80: */
-
-/*************************************************************
- *
- *  KaTeX mhchem.js
- *
- *  This file implements a KaTeX version of mhchem version 3.3.0.
- *  It is adapted from MathJax/extensions/TeX/mhchem.js
- *  It differs from the MathJax version as follows:
- *    1. The interface is changed so that it can be called from KaTeX, not MathJax.
- *    2. \rlap and \llap are replaced with \mathrlap and \mathllap.
- *    3. Four lines of code are edited in order to use \raisebox instead of \raise.
- *    4. The reaction arrow code is simplified. All reaction arrows are rendered
- *       using KaTeX extensible arrows instead of building non-extensible arrows.
- *    5. \tripledash vertical alignment is slightly adjusted.
- *
- *    This code, as other KaTeX code, is released under the MIT license.
- * 
- * /*************************************************************
- *
- *  MathJax/extensions/TeX/mhchem.js
- *
- *  Implements the \ce command for handling chemical formulas
- *  from the mhchem LaTeX package.
- *
- *  ---------------------------------------------------------------------
- *
- *  Copyright (c) 2011-2015 The MathJax Consortium
- *  Copyright (c) 2015-2018 Martin Hensel
- *
- *  Licensed under the Apache License, Version 2.0 (the "License");
- *  you may not use this file except in compliance with the License.
- *  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing, software
- *  distributed under the License is distributed on an "AS IS" BASIS,
- *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *  See the License for the specific language governing permissions and
- *  limitations under the License.
- */
-//
-// Coding Style
-//   - use '' for identifiers that can by minified/uglified
-//   - use "" for strings that need to stay untouched
-// version: "3.3.0" for MathJax and KaTeX
-// Add \ce, \pu, and \tripledash to the KaTeX macros.
-katex.__defineMacro("\\ce", function (context) {
-  return chemParse(context.consumeArgs(1)[0], "ce");
-});
-
-katex.__defineMacro("\\pu", function (context) {
-  return chemParse(context.consumeArgs(1)[0], "pu");
-}); //  Needed for \bond for the ~ forms
-//  Raise by 2.56mu, not 2mu. We're raising a hyphen-minus, U+002D, not 
-//  a mathematical minus, U+2212. So we need that extra 0.56.
-
-
-katex.__defineMacro("\\tripledash", "{\\vphantom{-}\\raisebox{2.56mu}{$\\mkern2mu" + "\\tiny\\text{-}\\mkern1mu\\text{-}\\mkern1mu\\text{-}\\mkern2mu$}}");
-//  This is the main function for handing the \ce and \pu commands.
-//  It takes the argument to \ce or \pu and returns the corresponding TeX string.
-//
-
-var chemParse = function chemParse(tokens, stateMachine) {
-  // Recreate the argument string from KaTeX's array of tokens.
-  var str = "";
-  var expectedLoc = tokens[tokens.length - 1].loc.start;
-
-  for (var i = tokens.length - 1; i >= 0; i--) {
-    if (tokens[i].loc.start > expectedLoc) {
-      // context.consumeArgs has eaten a space.
-      str += " ";
-      expectedLoc = tokens[i].loc.start;
-    }
-
-    str += tokens[i].text;
-    expectedLoc += tokens[i].text.length;
-  }
-
-  var tex = texify.go(mhchemParser.go(str, stateMachine));
-  return tex;
-}; //
-// Core parser for mhchem syntax  (recursive)
-//
-
-/** @type {MhchemParser} */
-
-
-var mhchemParser = {
-  //
-  // Parses mchem \ce syntax
-  //
-  // Call like
-  //   go("H2O");
-  //
-  go: function go(input, stateMachine) {
-    if (!input) {
-      return [];
-    }
-
-    if (stateMachine === undefined) {
-      stateMachine = 'ce';
-    }
-
-    var state = '0'; //
-    // String buffers for parsing:
-    //
-    // buffer.a == amount
-    // buffer.o == element
-    // buffer.b == left-side superscript
-    // buffer.p == left-side subscript
-    // buffer.q == right-side subscript
-    // buffer.d == right-side superscript
-    //
-    // buffer.r == arrow
-    // buffer.rdt == arrow, script above, type
-    // buffer.rd == arrow, script above, content
-    // buffer.rqt == arrow, script below, type
-    // buffer.rq == arrow, script below, content
-    //
-    // buffer.text_
-    // buffer.rm
-    // etc.
-    //
-    // buffer.parenthesisLevel == int, starting at 0
-    // buffer.sb == bool, space before
-    // buffer.beginsWithBond == bool
-    //
-    // These letters are also used as state names.
-    //
-    // Other states:
-    // 0 == begin of main part (arrow/operator unlikely)
-    // 1 == next entity
-    // 2 == next entity (arrow/operator unlikely)
-    // 3 == next atom
-    // c == macro
-    //
-
-    /** @type {Buffer} */
-
-    var buffer = {};
-    buffer['parenthesisLevel'] = 0;
-    input = input.replace(/\n/g, " ");
-    input = input.replace(/[\u2212\u2013\u2014\u2010]/g, "-");
-    input = input.replace(/[\u2026]/g, "..."); //
-    // Looks through mhchemParser.transitions, to execute a matching action
-    // (recursive)
-    //
-
-    var lastInput;
-    var watchdog = 10;
-    /** @type {ParserOutput[]} */
-
-    var output = [];
-
-    while (true) {
-      if (lastInput !== input) {
-        watchdog = 10;
-        lastInput = input;
-      } else {
-        watchdog--;
-      } //
-      // Find actions in transition table
-      //
-
-
-      var machine = mhchemParser.stateMachines[stateMachine];
-      var t = machine.transitions[state] || machine.transitions['*'];
-
-      iterateTransitions: for (var i = 0; i < t.length; i++) {
-        var matches = mhchemParser.patterns.match_(t[i].pattern, input);
-
-        if (matches) {
-          //
-          // Execute actions
-          //
-          var task = t[i].task;
-
-          for (var iA = 0; iA < task.action_.length; iA++) {
-            var o; //
-            // Find and execute action
-            //
-
-            if (machine.actions[task.action_[iA].type_]) {
-              o = machine.actions[task.action_[iA].type_](buffer, matches.match_, task.action_[iA].option);
-            } else if (mhchemParser.actions[task.action_[iA].type_]) {
-              o = mhchemParser.actions[task.action_[iA].type_](buffer, matches.match_, task.action_[iA].option);
-            } else {
-              throw ["MhchemBugA", "mhchem bug A. Please report. (" + task.action_[iA].type_ + ")"]; // Trying to use non-existing action
-            } //
-            // Add output
-            //
-
-
-            mhchemParser.concatArray(output, o);
-          } //
-          // Set next state,
-          // Shorten input,
-          // Continue with next character
-          //   (= apply only one transition per position)
-          //
-
-
-          state = task.nextState || state;
-
-          if (input.length > 0) {
-            if (!task.revisit) {
-              input = matches.remainder;
-            }
-
-            if (!task.toContinue) {
-              break iterateTransitions;
-            }
-          } else {
-            return output;
-          }
-        }
-      } //
-      // Prevent infinite loop
-      //
-
-
-      if (watchdog <= 0) {
-        throw ["MhchemBugU", "mhchem bug U. Please report."]; // Unexpected character
-      }
-    }
-  },
-  concatArray: function concatArray(a, b) {
-    if (b) {
-      if (Array.isArray(b)) {
-        for (var iB = 0; iB < b.length; iB++) {
-          a.push(b[iB]);
-        }
-      } else {
-        a.push(b);
-      }
-    }
-  },
-  patterns: {
-    //
-    // Matching patterns
-    // either regexps or function that return null or {match_:"a", remainder:"bc"}
-    //
-    patterns: {
-      // property names must not look like integers ("2") for correct property traversal order, later on
-      'empty': /^$/,
-      'else': /^./,
-      'else2': /^./,
-      'space': /^\s/,
-      'space A': /^\s(?=[A-Z\\$])/,
-      'space$': /^\s$/,
-      'a-z': /^[a-z]/,
-      'x': /^x/,
-      'x$': /^x$/,
-      'i$': /^i$/,
-      'letters': /^(?:[a-zA-Z\u03B1-\u03C9\u0391-\u03A9?@]|(?:\\(?:alpha|beta|gamma|delta|epsilon|zeta|eta|theta|iota|kappa|lambda|mu|nu|xi|omicron|pi|rho|sigma|tau|upsilon|phi|chi|psi|omega|Gamma|Delta|Theta|Lambda|Xi|Pi|Sigma|Upsilon|Phi|Psi|Omega)(?:\s+|\{\}|(?![a-zA-Z]))))+/,
-      '\\greek': /^\\(?:alpha|beta|gamma|delta|epsilon|zeta|eta|theta|iota|kappa|lambda|mu|nu|xi|omicron|pi|rho|sigma|tau|upsilon|phi|chi|psi|omega|Gamma|Delta|Theta|Lambda|Xi|Pi|Sigma|Upsilon|Phi|Psi|Omega)(?:\s+|\{\}|(?![a-zA-Z]))/,
-      'one lowercase latin letter $': /^(?:([a-z])(?:$|[^a-zA-Z]))$/,
-      '$one lowercase latin letter$ $': /^\$(?:([a-z])(?:$|[^a-zA-Z]))\$$/,
-      'one lowercase greek letter $': /^(?:\$?[\u03B1-\u03C9]\$?|\$?\\(?:alpha|beta|gamma|delta|epsilon|zeta|eta|theta|iota|kappa|lambda|mu|nu|xi|omicron|pi|rho|sigma|tau|upsilon|phi|chi|psi|omega)\s*\$?)(?:\s+|\{\}|(?![a-zA-Z]))$/,
-      'digits': /^[0-9]+/,
-      '-9.,9': /^[+\-]?(?:[0-9]+(?:[,.][0-9]+)?|[0-9]*(?:\.[0-9]+))/,
-      '-9.,9 no missing 0': /^[+\-]?[0-9]+(?:[.,][0-9]+)?/,
-      '(-)(9.,9)(e)(99)': function e99(input) {
-        var m = input.match(/^(\+\-|\+\/\-|\+|\-|\\pm\s?)?([0-9]+(?:[,.][0-9]+)?|[0-9]*(?:\.[0-9]+))?(\((?:[0-9]+(?:[,.][0-9]+)?|[0-9]*(?:\.[0-9]+))\))?(?:([eE]|\s*(\*|x|\\times|\u00D7)\s*10\^)([+\-]?[0-9]+|\{[+\-]?[0-9]+\}))?/);
-
-        if (m && m[0]) {
-          return {
-            match_: m.splice(1),
-            remainder: input.substr(m[0].length)
-          };
-        }
-
-        return null;
-      },
-      '(-)(9)^(-9)': function _(input) {
-        var m = input.match(/^(\+\-|\+\/\-|\+|\-|\\pm\s?)?([0-9]+(?:[,.][0-9]+)?|[0-9]*(?:\.[0-9]+)?)\^([+\-]?[0-9]+|\{[+\-]?[0-9]+\})/);
-
-        if (m && m[0]) {
-          return {
-            match_: m.splice(1),
-            remainder: input.substr(m[0].length)
-          };
-        }
-
-        return null;
-      },
-      'state of aggregation $': function stateOfAggregation$(input) {
-        // ... or crystal system
-        var a = mhchemParser.patterns.findObserveGroups(input, "", /^\([a-z]{1,3}(?=[\),])/, ")", ""); // (aq), (aq,$\infty$), (aq, sat)
-
-        if (a && a.remainder.match(/^($|[\s,;\)\]\}])/)) {
-          return a;
-        } //  AND end of 'phrase'
-
-
-        var m = input.match(/^(?:\((?:\\ca\s?)?\$[amothc]\$\))/); // OR crystal system ($o$) (\ca$c$)
-
-        if (m) {
-          return {
-            match_: m[0],
-            remainder: input.substr(m[0].length)
-          };
-        }
-
-        return null;
-      },
-      '_{(state of aggregation)}$': /^_\{(\([a-z]{1,3}\))\}/,
-      '{[(': /^(?:\\\{|\[|\()/,
-      ')]}': /^(?:\)|\]|\\\})/,
-      ', ': /^[,;]\s*/,
-      ',': /^[,;]/,
-      '.': /^[.]/,
-      '. ': /^([.\u22C5\u00B7\u2022])\s*/,
-      '...': /^\.\.\.(?=$|[^.])/,
-      '* ': /^([*])\s*/,
-      '^{(...)}': function _(input) {
-        return mhchemParser.patterns.findObserveGroups(input, "^{", "", "", "}");
-      },
-      '^($...$)': function $$(input) {
-        return mhchemParser.patterns.findObserveGroups(input, "^", "$", "$", "");
-      },
-      '^a': /^\^([0-9]+|[^\\_])/,
-      '^\\x{}{}': function x(input) {
-        return mhchemParser.patterns.findObserveGroups(input, "^", /^\\[a-zA-Z]+\{/, "}", "", "", "{", "}", "", true);
-      },
-      '^\\x{}': function x(input) {
-        return mhchemParser.patterns.findObserveGroups(input, "^", /^\\[a-zA-Z]+\{/, "}", "");
-      },
-      '^\\x': /^\^(\\[a-zA-Z]+)\s*/,
-      '^(-1)': /^\^(-?\d+)/,
-      '\'': /^'/,
-      '_{(...)}': function _(input) {
-        return mhchemParser.patterns.findObserveGroups(input, "_{", "", "", "}");
-      },
-      '_($...$)': function _$$(input) {
-        return mhchemParser.patterns.findObserveGroups(input, "_", "$", "$", "");
-      },
-      '_9': /^_([+\-]?[0-9]+|[^\\])/,
-      '_\\x{}{}': function _X(input) {
-        return mhchemParser.patterns.findObserveGroups(input, "_", /^\\[a-zA-Z]+\{/, "}", "", "", "{", "}", "", true);
-      },
-      '_\\x{}': function _X(input) {
-        return mhchemParser.patterns.findObserveGroups(input, "_", /^\\[a-zA-Z]+\{/, "}", "");
-      },
-      '_\\x': /^_(\\[a-zA-Z]+)\s*/,
-      '^_': /^(?:\^(?=_)|\_(?=\^)|[\^_]$)/,
-      '{}': /^\{\}/,
-      '{...}': function _(input) {
-        return mhchemParser.patterns.findObserveGroups(input, "", "{", "}", "");
-      },
-      '{(...)}': function _(input) {
-        return mhchemParser.patterns.findObserveGroups(input, "{", "", "", "}");
-      },
-      '$...$': function $$(input) {
-        return mhchemParser.patterns.findObserveGroups(input, "", "$", "$", "");
-      },
-      '${(...)}$': function $$(input) {
-        return mhchemParser.patterns.findObserveGroups(input, "${", "", "", "}$");
-      },
-      '$(...)$': function $$(input) {
-        return mhchemParser.patterns.findObserveGroups(input, "$", "", "", "$");
-      },
-      '=<>': /^[=<>]/,
-      '#': /^[#\u2261]/,
-      '+': /^\+/,
-      '-$': /^-(?=[\s_},;\]/]|$|\([a-z]+\))/,
-      // -space -, -; -] -/ -$ -state-of-aggregation
-      '-9': /^-(?=[0-9])/,
-      '- orbital overlap': /^-(?=(?:[spd]|sp)(?:$|[\s,;\)\]\}]))/,
-      '-': /^-/,
-      'pm-operator': /^(?:\\pm|\$\\pm\$|\+-|\+\/-)/,
-      'operator': /^(?:\+|(?:[\-=<>]|<<|>>|\\approx|\$\\approx\$)(?=\s|$|-?[0-9]))/,
-      'arrowUpDown': /^(?:v|\(v\)|\^|\(\^\))(?=$|[\s,;\)\]\}])/,
-      '\\bond{(...)}': function bond(input) {
-        return mhchemParser.patterns.findObserveGroups(input, "\\bond{", "", "", "}");
-      },
-      '->': /^(?:<->|<-->|->|<-|<=>>|<<=>|<=>|[\u2192\u27F6\u21CC])/,
-      'CMT': /^[CMT](?=\[)/,
-      '[(...)]': function _(input) {
-        return mhchemParser.patterns.findObserveGroups(input, "[", "", "", "]");
-      },
-      '1st-level escape': /^(&|\\\\|\\hline)\s*/,
-      '\\,': /^(?:\\[,\ ;:])/,
-      // \\x - but output no space before
-      '\\x{}{}': function x(input) {
-        return mhchemParser.patterns.findObserveGroups(input, "", /^\\[a-zA-Z]+\{/, "}", "", "", "{", "}", "", true);
-      },
-      '\\x{}': function x(input) {
-        return mhchemParser.patterns.findObserveGroups(input, "", /^\\[a-zA-Z]+\{/, "}", "");
-      },
-      '\\ca': /^\\ca(?:\s+|(?![a-zA-Z]))/,
-      '\\x': /^(?:\\[a-zA-Z]+\s*|\\[_&{}%])/,
-      'orbital': /^(?:[0-9]{1,2}[spdfgh]|[0-9]{0,2}sp)(?=$|[^a-zA-Z])/,
-      // only those with numbers in front, because the others will be formatted correctly anyway
-      'others': /^[\/~|]/,
-      '\\frac{(...)}': function frac(input) {
-        return mhchemParser.patterns.findObserveGroups(input, "\\frac{", "", "", "}", "{", "", "", "}");
-      },
-      '\\overset{(...)}': function overset(input) {
-        return mhchemParser.patterns.findObserveGroups(input, "\\overset{", "", "", "}", "{", "", "", "}");
-      },
-      '\\underset{(...)}': function underset(input) {
-        return mhchemParser.patterns.findObserveGroups(input, "\\underset{", "", "", "}", "{", "", "", "}");
-      },
-      '\\underbrace{(...)}': function underbrace(input) {
-        return mhchemParser.patterns.findObserveGroups(input, "\\underbrace{", "", "", "}_", "{", "", "", "}");
-      },
-      '\\color{(...)}0': function color0(input) {
-        return mhchemParser.patterns.findObserveGroups(input, "\\color{", "", "", "}");
-      },
-      '\\color{(...)}{(...)}1': function color1(input) {
-        return mhchemParser.patterns.findObserveGroups(input, "\\color{", "", "", "}", "{", "", "", "}");
-      },
-      '\\color(...){(...)}2': function color2(input) {
-        return mhchemParser.patterns.findObserveGroups(input, "\\color", "\\", "", /^(?=\{)/, "{", "", "", "}");
-      },
-      '\\ce{(...)}': function ce(input) {
-        return mhchemParser.patterns.findObserveGroups(input, "\\ce{", "", "", "}");
-      },
-      'oxidation$': /^(?:[+-][IVX]+|\\pm\s*0|\$\\pm\$\s*0)$/,
-      'd-oxidation$': /^(?:[+-]?\s?[IVX]+|\\pm\s*0|\$\\pm\$\s*0)$/,
-      // 0 could be oxidation or charge
-      'roman numeral': /^[IVX]+/,
-      '1/2$': /^[+\-]?(?:[0-9]+|\$[a-z]\$|[a-z])\/[0-9]+(?:\$[a-z]\$|[a-z])?$/,
-      'amount': function amount(input) {
-        var match; // e.g. 2, 0.5, 1/2, -2, n/2, +;  $a$ could be added later in parsing
-
-        match = input.match(/^(?:(?:(?:\([+\-]?[0-9]+\/[0-9]+\)|[+\-]?(?:[0-9]+|\$[a-z]\$|[a-z])\/[0-9]+|[+\-]?[0-9]+[.,][0-9]+|[+\-]?\.[0-9]+|[+\-]?[0-9]+)(?:[a-z](?=\s*[A-Z]))?)|[+\-]?[a-z](?=\s*[A-Z])|\+(?!\s))/);
-
-        if (match) {
-          return {
-            match_: match[0],
-            remainder: input.substr(match[0].length)
-          };
-        }
-
-        var a = mhchemParser.patterns.findObserveGroups(input, "", "$", "$", "");
-
-        if (a) {
-          // e.g. $2n-1$, $-$
-          match = a.match_.match(/^\$(?:\(?[+\-]?(?:[0-9]*[a-z]?[+\-])?[0-9]*[a-z](?:[+\-][0-9]*[a-z]?)?\)?|\+|-)\$$/);
-
-          if (match) {
-            return {
-              match_: match[0],
-              remainder: input.substr(match[0].length)
-            };
-          }
-        }
-
-        return null;
-      },
-      'amount2': function amount2(input) {
-        return this['amount'](input);
-      },
-      '(KV letters),': /^(?:[A-Z][a-z]{0,2}|i)(?=,)/,
-      'formula$': function formula$(input) {
-        if (input.match(/^\([a-z]+\)$/)) {
-          return null;
-        } // state of aggregation = no formula
-
-
-        var match = input.match(/^(?:[a-z]|(?:[0-9\ \+\-\,\.\(\)]+[a-z])+[0-9\ \+\-\,\.\(\)]*|(?:[a-z][0-9\ \+\-\,\.\(\)]+)+[a-z]?)$/);
-
-        if (match) {
-          return {
-            match_: match[0],
-            remainder: input.substr(match[0].length)
-          };
-        }
-
-        return null;
-      },
-      'uprightEntities': /^(?:pH|pOH|pC|pK|iPr|iBu)(?=$|[^a-zA-Z])/,
-      '/': /^\s*(\/)\s*/,
-      '//': /^\s*(\/\/)\s*/,
-      '*': /^\s*[*.]\s*/
-    },
-    findObserveGroups: function findObserveGroups(input, begExcl, begIncl, endIncl, endExcl, beg2Excl, beg2Incl, end2Incl, end2Excl, combine) {
-      /** @type {{(input: string, pattern: string | RegExp): string | string[] | null;}} */
-      var _match = function _match(input, pattern) {
-        if (typeof pattern === "string") {
-          if (input.indexOf(pattern) !== 0) {
-            return null;
-          }
-
-          return pattern;
-        } else {
-          var match = input.match(pattern);
-
-          if (!match) {
-            return null;
-          }
-
-          return match[0];
-        }
-      };
-      /** @type {{(input: string, i: number, endChars: string | RegExp): {endMatchBegin: number, endMatchEnd: number} | null;}} */
-
-
-      var _findObserveGroups = function _findObserveGroups(input, i, endChars) {
-        var braces = 0;
-
-        while (i < input.length) {
-          var a = input.charAt(i);
-
-          var match = _match(input.substr(i), endChars);
-
-          if (match !== null && braces === 0) {
-            return {
-              endMatchBegin: i,
-              endMatchEnd: i + match.length
-            };
-          } else if (a === "{") {
-            braces++;
-          } else if (a === "}") {
-            if (braces === 0) {
-              throw ["ExtraCloseMissingOpen", "Extra close brace or missing open brace"];
-            } else {
-              braces--;
-            }
-          }
-
-          i++;
-        }
-
-        if (braces > 0) {
-          return null;
-        }
-
-        return null;
-      };
-
-      var match = _match(input, begExcl);
-
-      if (match === null) {
-        return null;
-      }
-
-      input = input.substr(match.length);
-      match = _match(input, begIncl);
-
-      if (match === null) {
-        return null;
-      }
-
-      var e = _findObserveGroups(input, match.length, endIncl || endExcl);
-
-      if (e === null) {
-        return null;
-      }
-
-      var match1 = input.substring(0, endIncl ? e.endMatchEnd : e.endMatchBegin);
-
-      if (!(beg2Excl || beg2Incl)) {
-        return {
-          match_: match1,
-          remainder: input.substr(e.endMatchEnd)
-        };
-      } else {
-        var group2 = this.findObserveGroups(input.substr(e.endMatchEnd), beg2Excl, beg2Incl, end2Incl, end2Excl);
-
-        if (group2 === null) {
-          return null;
-        }
-        /** @type {string[]} */
-
-
-        var matchRet = [match1, group2.match_];
-        return {
-          match_: combine ? matchRet.join("") : matchRet,
-          remainder: group2.remainder
-        };
-      }
-    },
-    //
-    // Matching function
-    // e.g. match("a", input) will look for the regexp called "a" and see if it matches
-    // returns null or {match_:"a", remainder:"bc"}
-    //
-    match_: function match_(m, input) {
-      var pattern = mhchemParser.patterns.patterns[m];
-
-      if (pattern === undefined) {
-        throw ["MhchemBugP", "mhchem bug P. Please report. (" + m + ")"]; // Trying to use non-existing pattern
-      } else if (typeof pattern === "function") {
-        return mhchemParser.patterns.patterns[m](input); // cannot use cached var pattern here, because some pattern functions need this===mhchemParser
-      } else {
-        // RegExp
-        var match = input.match(pattern);
-
-        if (match) {
-          var mm;
-
-          if (match[2]) {
-            mm = [match[1], match[2]];
-          } else if (match[1]) {
-            mm = match[1];
-          } else {
-            mm = match[0];
-          }
-
-          return {
-            match_: mm,
-            remainder: input.substr(match[0].length)
-          };
-        }
-
-        return null;
-      }
-    }
-  },
-  //
-  // Generic state machine actions
-  //
-  actions: {
-    'a=': function a(buffer, m) {
-      buffer.a = (buffer.a || "") + m;
-    },
-    'b=': function b(buffer, m) {
-      buffer.b = (buffer.b || "") + m;
-    },
-    'p=': function p(buffer, m) {
-      buffer.p = (buffer.p || "") + m;
-    },
-    'o=': function o(buffer, m) {
-      buffer.o = (buffer.o || "") + m;
-    },
-    'q=': function q(buffer, m) {
-      buffer.q = (buffer.q || "") + m;
-    },
-    'd=': function d(buffer, m) {
-      buffer.d = (buffer.d || "") + m;
-    },
-    'rm=': function rm(buffer, m) {
-      buffer.rm = (buffer.rm || "") + m;
-    },
-    'text=': function text(buffer, m) {
-      buffer.text_ = (buffer.text_ || "") + m;
-    },
-    'insert': function insert(buffer, m, a) {
-      return {
-        type_: a
-      };
-    },
-    'insert+p1': function insertP1(buffer, m, a) {
-      return {
-        type_: a,
-        p1: m
-      };
-    },
-    'insert+p1+p2': function insertP1P2(buffer, m, a) {
-      return {
-        type_: a,
-        p1: m[0],
-        p2: m[1]
-      };
-    },
-    'copy': function copy(buffer, m) {
-      return m;
-    },
-    'rm': function rm(buffer, m) {
-      return {
-        type_: 'rm',
-        p1: m || ""
-      };
-    },
-    'text': function text(buffer, m) {
-      return mhchemParser.go(m, 'text');
-    },
-    '{text}': function text(buffer, m) {
-      var ret = ["{"];
-      mhchemParser.concatArray(ret, mhchemParser.go(m, 'text'));
-      ret.push("}");
-      return ret;
-    },
-    'tex-math': function texMath(buffer, m) {
-      return mhchemParser.go(m, 'tex-math');
-    },
-    'tex-math tight': function texMathTight(buffer, m) {
-      return mhchemParser.go(m, 'tex-math tight');
-    },
-    'bond': function bond(buffer, m, k) {
-      return {
-        type_: 'bond',
-        kind_: k || m
-      };
-    },
-    'color0-output': function color0Output(buffer, m) {
-      return {
-        type_: 'color0',
-        color: m[0]
-      };
-    },
-    'ce': function ce(buffer, m) {
-      return mhchemParser.go(m);
-    },
-    '1/2': function _(buffer, m) {
-      /** @type {ParserOutput[]} */
-      var ret = [];
-
-      if (m.match(/^[+\-]/)) {
-        ret.push(m.substr(0, 1));
-        m = m.substr(1);
-      }
-
-      var n = m.match(/^([0-9]+|\$[a-z]\$|[a-z])\/([0-9]+)(\$[a-z]\$|[a-z])?$/);
-      n[1] = n[1].replace(/\$/g, "");
-      ret.push({
-        type_: 'frac',
-        p1: n[1],
-        p2: n[2]
-      });
-
-      if (n[3]) {
-        n[3] = n[3].replace(/\$/g, "");
-        ret.push({
-          type_: 'tex-math',
-          p1: n[3]
-        });
-      }
-
-      return ret;
-    },
-    '9,9': function _(buffer, m) {
-      return mhchemParser.go(m, '9,9');
-    }
-  },
-  //
-  // createTransitions
-  // convert  { 'letter': { 'state': { action_: 'output' } } }  to  { 'state' => [ { pattern: 'letter', task: { action_: [{type_: 'output'}] } } ] }
-  // with expansion of 'a|b' to 'a' and 'b' (at 2 places)
-  //
-  createTransitions: function createTransitions(o) {
-    var pattern, state;
-    /** @type {string[]} */
-
-    var stateArray;
-    var i; //
-    // 1. Collect all states
-    //
-
-    /** @type {Transitions} */
-
-    var transitions = {};
-
-    for (pattern in o) {
-      for (state in o[pattern]) {
-        stateArray = state.split("|");
-        o[pattern][state].stateArray = stateArray;
-
-        for (i = 0; i < stateArray.length; i++) {
-          transitions[stateArray[i]] = [];
-        }
-      }
-    } //
-    // 2. Fill states
-    //
-
-
-    for (pattern in o) {
-      for (state in o[pattern]) {
-        stateArray = o[pattern][state].stateArray || [];
-
-        for (i = 0; i < stateArray.length; i++) {
-          //
-          // 2a. Normalize actions into array:  'text=' ==> [{type_:'text='}]
-          // (Note to myself: Resolving the function here would be problematic. It would need .bind (for *this*) and currying (for *option*).)
-          //
-
-          /** @type {any} */
-          var p = o[pattern][state];
-
-          if (p.action_) {
-            p.action_ = [].concat(p.action_);
-
-            for (var k = 0; k < p.action_.length; k++) {
-              if (typeof p.action_[k] === "string") {
-                p.action_[k] = {
-                  type_: p.action_[k]
-                };
-              }
-            }
-          } else {
-            p.action_ = [];
-          } //
-          // 2.b Multi-insert
-          //
-
-
-          var patternArray = pattern.split("|");
-
-          for (var j = 0; j < patternArray.length; j++) {
-            if (stateArray[i] === '*') {
-              // insert into all
-              for (var t in transitions) {
-                transitions[t].push({
-                  pattern: patternArray[j],
-                  task: p
-                });
-              }
-            } else {
-              transitions[stateArray[i]].push({
-                pattern: patternArray[j],
-                task: p
-              });
-            }
-          }
-        }
-      }
-    }
-
-    return transitions;
-  },
-  stateMachines: {}
-}; //
-// Definition of state machines
-//
-
-mhchemParser.stateMachines = {
-  //
-  // \ce state machines
-  //
-  //#region ce
-  'ce': {
-    // main parser
-    transitions: mhchemParser.createTransitions({
-      'empty': {
-        '*': {
-          action_: 'output'
-        }
-      },
-      'else': {
-        '0|1|2': {
-          action_: 'beginsWithBond=false',
-          revisit: true,
-          toContinue: true
-        }
-      },
-      'oxidation$': {
-        '0': {
-          action_: 'oxidation-output'
-        }
-      },
-      'CMT': {
-        'r': {
-          action_: 'rdt=',
-          nextState: 'rt'
-        },
-        'rd': {
-          action_: 'rqt=',
-          nextState: 'rdt'
-        }
-      },
-      'arrowUpDown': {
-        '0|1|2|as': {
-          action_: ['sb=false', 'output', 'operator'],
-          nextState: '1'
-        }
-      },
-      'uprightEntities': {
-        '0|1|2': {
-          action_: ['o=', 'output'],
-          nextState: '1'
-        }
-      },
-      'orbital': {
-        '0|1|2|3': {
-          action_: 'o=',
-          nextState: 'o'
-        }
-      },
-      '->': {
-        '0|1|2|3': {
-          action_: 'r=',
-          nextState: 'r'
-        },
-        'a|as': {
-          action_: ['output', 'r='],
-          nextState: 'r'
-        },
-        '*': {
-          action_: ['output', 'r='],
-          nextState: 'r'
-        }
-      },
-      '+': {
-        'o': {
-          action_: 'd= kv',
-          nextState: 'd'
-        },
-        'd|D': {
-          action_: 'd=',
-          nextState: 'd'
-        },
-        'q': {
-          action_: 'd=',
-          nextState: 'qd'
-        },
-        'qd|qD': {
-          action_: 'd=',
-          nextState: 'qd'
-        },
-        'dq': {
-          action_: ['output', 'd='],
-          nextState: 'd'
-        },
-        '3': {
-          action_: ['sb=false', 'output', 'operator'],
-          nextState: '0'
-        }
-      },
-      'amount': {
-        '0|2': {
-          action_: 'a=',
-          nextState: 'a'
-        }
-      },
-      'pm-operator': {
-        '0|1|2|a|as': {
-          action_: ['sb=false', 'output', {
-            type_: 'operator',
-            option: '\\pm'
-          }],
-          nextState: '0'
-        }
-      },
-      'operator': {
-        '0|1|2|a|as': {
-          action_: ['sb=false', 'output', 'operator'],
-          nextState: '0'
-        }
-      },
-      '-$': {
-        'o|q': {
-          action_: ['charge or bond', 'output'],
-          nextState: 'qd'
-        },
-        'd': {
-          action_: 'd=',
-          nextState: 'd'
-        },
-        'D': {
-          action_: ['output', {
-            type_: 'bond',
-            option: "-"
-          }],
-          nextState: '3'
-        },
-        'q': {
-          action_: 'd=',
-          nextState: 'qd'
-        },
-        'qd': {
-          action_: 'd=',
-          nextState: 'qd'
-        },
-        'qD|dq': {
-          action_: ['output', {
-            type_: 'bond',
-            option: "-"
-          }],
-          nextState: '3'
-        }
-      },
-      '-9': {
-        '3|o': {
-          action_: ['output', {
-            type_: 'insert',
-            option: 'hyphen'
-          }],
-          nextState: '3'
-        }
-      },
-      '- orbital overlap': {
-        'o': {
-          action_: ['output', {
-            type_: 'insert',
-            option: 'hyphen'
-          }],
-          nextState: '2'
-        },
-        'd': {
-          action_: ['output', {
-            type_: 'insert',
-            option: 'hyphen'
-          }],
-          nextState: '2'
-        }
-      },
-      '-': {
-        '0|1|2': {
-          action_: [{
-            type_: 'output',
-            option: 1
-          }, 'beginsWithBond=true', {
-            type_: 'bond',
-            option: "-"
-          }],
-          nextState: '3'
-        },
-        '3': {
-          action_: {
-            type_: 'bond',
-            option: "-"
-          }
-        },
-        'a': {
-          action_: ['output', {
-            type_: 'insert',
-            option: 'hyphen'
-          }],
-          nextState: '2'
-        },
-        'as': {
-          action_: [{
-            type_: 'output',
-            option: 2
-          }, {
-            type_: 'bond',
-            option: "-"
-          }],
-          nextState: '3'
-        },
-        'b': {
-          action_: 'b='
-        },
-        'o': {
-          action_: {
-            type_: '- after o/d',
-            option: false
-          },
-          nextState: '2'
-        },
-        'q': {
-          action_: {
-            type_: '- after o/d',
-            option: false
-          },
-          nextState: '2'
-        },
-        'd|qd|dq': {
-          action_: {
-            type_: '- after o/d',
-            option: true
-          },
-          nextState: '2'
-        },
-        'D|qD|p': {
-          action_: ['output', {
-            type_: 'bond',
-            option: "-"
-          }],
-          nextState: '3'
-        }
-      },
-      'amount2': {
-        '1|3': {
-          action_: 'a=',
-          nextState: 'a'
-        }
-      },
-      'letters': {
-        '0|1|2|3|a|as|b|p|bp|o': {
-          action_: 'o=',
-          nextState: 'o'
-        },
-        'q|dq': {
-          action_: ['output', 'o='],
-          nextState: 'o'
-        },
-        'd|D|qd|qD': {
-          action_: 'o after d',
-          nextState: 'o'
-        }
-      },
-      'digits': {
-        'o': {
-          action_: 'q=',
-          nextState: 'q'
-        },
-        'd|D': {
-          action_: 'q=',
-          nextState: 'dq'
-        },
-        'q': {
-          action_: ['output', 'o='],
-          nextState: 'o'
-        },
-        'a': {
-          action_: 'o=',
-          nextState: 'o'
-        }
-      },
-      'space A': {
-        'b|p|bp': {}
-      },
-      'space': {
-        'a': {
-          nextState: 'as'
-        },
-        '0': {
-          action_: 'sb=false'
-        },
-        '1|2': {
-          action_: 'sb=true'
-        },
-        'r|rt|rd|rdt|rdq': {
-          action_: 'output',
-          nextState: '0'
-        },
-        '*': {
-          action_: ['output', 'sb=true'],
-          nextState: '1'
-        }
-      },
-      '1st-level escape': {
-        '1|2': {
-          action_: ['output', {
-            type_: 'insert+p1',
-            option: '1st-level escape'
-          }]
-        },
-        '*': {
-          action_: ['output', {
-            type_: 'insert+p1',
-            option: '1st-level escape'
-          }],
-          nextState: '0'
-        }
-      },
-      '[(...)]': {
-        'r|rt': {
-          action_: 'rd=',
-          nextState: 'rd'
-        },
-        'rd|rdt': {
-          action_: 'rq=',
-          nextState: 'rdq'
-        }
-      },
-      '...': {
-        'o|d|D|dq|qd|qD': {
-          action_: ['output', {
-            type_: 'bond',
-            option: "..."
-          }],
-          nextState: '3'
-        },
-        '*': {
-          action_: [{
-            type_: 'output',
-            option: 1
-          }, {
-            type_: 'insert',
-            option: 'ellipsis'
-          }],
-          nextState: '1'
-        }
-      },
-      '. |* ': {
-        '*': {
-          action_: ['output', {
-            type_: 'insert',
-            option: 'addition compound'
-          }],
-          nextState: '1'
-        }
-      },
-      'state of aggregation $': {
-        '*': {
-          action_: ['output', 'state of aggregation'],
-          nextState: '1'
-        }
-      },
-      '{[(': {
-        'a|as|o': {
-          action_: ['o=', 'output', 'parenthesisLevel++'],
-          nextState: '2'
-        },
-        '0|1|2|3': {
-          action_: ['o=', 'output', 'parenthesisLevel++'],
-          nextState: '2'
-        },
-        '*': {
-          action_: ['output', 'o=', 'output', 'parenthesisLevel++'],
-          nextState: '2'
-        }
-      },
-      ')]}': {
-        '0|1|2|3|b|p|bp|o': {
-          action_: ['o=', 'parenthesisLevel--'],
-          nextState: 'o'
-        },
-        'a|as|d|D|q|qd|qD|dq': {
-          action_: ['output', 'o=', 'parenthesisLevel--'],
-          nextState: 'o'
-        }
-      },
-      ', ': {
-        '*': {
-          action_: ['output', 'comma'],
-          nextState: '0'
-        }
-      },
-      '^_': {
-        // ^ and _ without a sensible argument
-        '*': {}
-      },
-      '^{(...)}|^($...$)': {
-        '0|1|2|as': {
-          action_: 'b=',
-          nextState: 'b'
-        },
-        'p': {
-          action_: 'b=',
-          nextState: 'bp'
-        },
-        '3|o': {
-          action_: 'd= kv',
-          nextState: 'D'
-        },
-        'q': {
-          action_: 'd=',
-          nextState: 'qD'
-        },
-        'd|D|qd|qD|dq': {
-          action_: ['output', 'd='],
-          nextState: 'D'
-        }
-      },
-      '^a|^\\x{}{}|^\\x{}|^\\x|\'': {
-        '0|1|2|as': {
-          action_: 'b=',
-          nextState: 'b'
-        },
-        'p': {
-          action_: 'b=',
-          nextState: 'bp'
-        },
-        '3|o': {
-          action_: 'd= kv',
-          nextState: 'd'
-        },
-        'q': {
-          action_: 'd=',
-          nextState: 'qd'
-        },
-        'd|qd|D|qD': {
-          action_: 'd='
-        },
-        'dq': {
-          action_: ['output', 'd='],
-          nextState: 'd'
-        }
-      },
-      '_{(state of aggregation)}$': {
-        'd|D|q|qd|qD|dq': {
-          action_: ['output', 'q='],
-          nextState: 'q'
-        }
-      },
-      '_{(...)}|_($...$)|_9|_\\x{}{}|_\\x{}|_\\x': {
-        '0|1|2|as': {
-          action_: 'p=',
-          nextState: 'p'
-        },
-        'b': {
-          action_: 'p=',
-          nextState: 'bp'
-        },
-        '3|o': {
-          action_: 'q=',
-          nextState: 'q'
-        },
-        'd|D': {
-          action_: 'q=',
-          nextState: 'dq'
-        },
-        'q|qd|qD|dq': {
-          action_: ['output', 'q='],
-          nextState: 'q'
-        }
-      },
-      '=<>': {
-        '0|1|2|3|a|as|o|q|d|D|qd|qD|dq': {
-          action_: [{
-            type_: 'output',
-            option: 2
-          }, 'bond'],
-          nextState: '3'
-        }
-      },
-      '#': {
-        '0|1|2|3|a|as|o': {
-          action_: [{
-            type_: 'output',
-            option: 2
-          }, {
-            type_: 'bond',
-            option: "#"
-          }],
-          nextState: '3'
-        }
-      },
-      '{}': {
-        '*': {
-          action_: {
-            type_: 'output',
-            option: 1
-          },
-          nextState: '1'
-        }
-      },
-      '{...}': {
-        '0|1|2|3|a|as|b|p|bp': {
-          action_: 'o=',
-          nextState: 'o'
-        },
-        'o|d|D|q|qd|qD|dq': {
-          action_: ['output', 'o='],
-          nextState: 'o'
-        }
-      },
-      '$...$': {
-        'a': {
-          action_: 'a='
-        },
-        // 2$n$
-        '0|1|2|3|as|b|p|bp|o': {
-          action_: 'o=',
-          nextState: 'o'
-        },
-        // not 'amount'
-        'as|o': {
-          action_: 'o='
-        },
-        'q|d|D|qd|qD|dq': {
-          action_: ['output', 'o='],
-          nextState: 'o'
-        }
-      },
-      '\\bond{(...)}': {
-        '*': {
-          action_: [{
-            type_: 'output',
-            option: 2
-          }, 'bond'],
-          nextState: "3"
-        }
-      },
-      '\\frac{(...)}': {
-        '*': {
-          action_: [{
-            type_: 'output',
-            option: 1
-          }, 'frac-output'],
-          nextState: '3'
-        }
-      },
-      '\\overset{(...)}': {
-        '*': {
-          action_: [{
-            type_: 'output',
-            option: 2
-          }, 'overset-output'],
-          nextState: '3'
-        }
-      },
-      '\\underset{(...)}': {
-        '*': {
-          action_: [{
-            type_: 'output',
-            option: 2
-          }, 'underset-output'],
-          nextState: '3'
-        }
-      },
-      '\\underbrace{(...)}': {
-        '*': {
-          action_: [{
-            type_: 'output',
-            option: 2
-          }, 'underbrace-output'],
-          nextState: '3'
-        }
-      },
-      '\\color{(...)}{(...)}1|\\color(...){(...)}2': {
-        '*': {
-          action_: [{
-            type_: 'output',
-            option: 2
-          }, 'color-output'],
-          nextState: '3'
-        }
-      },
-      '\\color{(...)}0': {
-        '*': {
-          action_: [{
-            type_: 'output',
-            option: 2
-          }, 'color0-output']
-        }
-      },
-      '\\ce{(...)}': {
-        '*': {
-          action_: [{
-            type_: 'output',
-            option: 2
-          }, 'ce'],
-          nextState: '3'
-        }
-      },
-      '\\,': {
-        '*': {
-          action_: [{
-            type_: 'output',
-            option: 1
-          }, 'copy'],
-          nextState: '1'
-        }
-      },
-      '\\x{}{}|\\x{}|\\x': {
-        '0|1|2|3|a|as|b|p|bp|o|c0': {
-          action_: ['o=', 'output'],
-          nextState: '3'
-        },
-        '*': {
-          action_: ['output', 'o=', 'output'],
-          nextState: '3'
-        }
-      },
-      'others': {
-        '*': {
-          action_: [{
-            type_: 'output',
-            option: 1
-          }, 'copy'],
-          nextState: '3'
-        }
-      },
-      'else2': {
-        'a': {
-          action_: 'a to o',
-          nextState: 'o',
-          revisit: true
-        },
-        'as': {
-          action_: ['output', 'sb=true'],
-          nextState: '1',
-          revisit: true
-        },
-        'r|rt|rd|rdt|rdq': {
-          action_: ['output'],
-          nextState: '0',
-          revisit: true
-        },
-        '*': {
-          action_: ['output', 'copy'],
-          nextState: '3'
-        }
-      }
-    }),
-    actions: {
-      'o after d': function oAfterD(buffer, m) {
-        var ret;
-
-        if ((buffer.d || "").match(/^[0-9]+$/)) {
-          var tmp = buffer.d;
-          buffer.d = undefined;
-          ret = this['output'](buffer);
-          buffer.b = tmp;
-        } else {
-          ret = this['output'](buffer);
-        }
-
-        mhchemParser.actions['o='](buffer, m);
-        return ret;
-      },
-      'd= kv': function dKv(buffer, m) {
-        buffer.d = m;
-        buffer.dType = 'kv';
-      },
-      'charge or bond': function chargeOrBond(buffer, m) {
-        if (buffer['beginsWithBond']) {
-          /** @type {ParserOutput[]} */
-          var ret = [];
-          mhchemParser.concatArray(ret, this['output'](buffer));
-          mhchemParser.concatArray(ret, mhchemParser.actions['bond'](buffer, m, "-"));
-          return ret;
-        } else {
-          buffer.d = m;
-        }
-      },
-      '- after o/d': function afterOD(buffer, m, isAfterD) {
-        var c1 = mhchemParser.patterns.match_('orbital', buffer.o || "");
-        var c2 = mhchemParser.patterns.match_('one lowercase greek letter $', buffer.o || "");
-        var c3 = mhchemParser.patterns.match_('one lowercase latin letter $', buffer.o || "");
-        var c4 = mhchemParser.patterns.match_('$one lowercase latin letter$ $', buffer.o || "");
-        var hyphenFollows = m === "-" && (c1 && c1.remainder === "" || c2 || c3 || c4);
-
-        if (hyphenFollows && !buffer.a && !buffer.b && !buffer.p && !buffer.d && !buffer.q && !c1 && c3) {
-          buffer.o = '$' + buffer.o + '$';
-        }
-        /** @type {ParserOutput[]} */
-
-
-        var ret = [];
-
-        if (hyphenFollows) {
-          mhchemParser.concatArray(ret, this['output'](buffer));
-          ret.push({
-            type_: 'hyphen'
-          });
-        } else {
-          c1 = mhchemParser.patterns.match_('digits', buffer.d || "");
-
-          if (isAfterD && c1 && c1.remainder === '') {
-            mhchemParser.concatArray(ret, mhchemParser.actions['d='](buffer, m));
-            mhchemParser.concatArray(ret, this['output'](buffer));
-          } else {
-            mhchemParser.concatArray(ret, this['output'](buffer));
-            mhchemParser.concatArray(ret, mhchemParser.actions['bond'](buffer, m, "-"));
-          }
-        }
-
-        return ret;
-      },
-      'a to o': function aToO(buffer) {
-        buffer.o = buffer.a;
-        buffer.a = undefined;
-      },
-      'sb=true': function sbTrue(buffer) {
-        buffer.sb = true;
-      },
-      'sb=false': function sbFalse(buffer) {
-        buffer.sb = false;
-      },
-      'beginsWithBond=true': function beginsWithBondTrue(buffer) {
-        buffer['beginsWithBond'] = true;
-      },
-      'beginsWithBond=false': function beginsWithBondFalse(buffer) {
-        buffer['beginsWithBond'] = false;
-      },
-      'parenthesisLevel++': function parenthesisLevel(buffer) {
-        buffer['parenthesisLevel']++;
-      },
-      'parenthesisLevel--': function parenthesisLevel(buffer) {
-        buffer['parenthesisLevel']--;
-      },
-      'state of aggregation': function stateOfAggregation(buffer, m) {
-        return {
-          type_: 'state of aggregation',
-          p1: mhchemParser.go(m, 'o')
-        };
-      },
-      'comma': function comma(buffer, m) {
-        var a = m.replace(/\s*$/, '');
-        var withSpace = a !== m;
-
-        if (withSpace && buffer['parenthesisLevel'] === 0) {
-          return {
-            type_: 'comma enumeration L',
-            p1: a
-          };
-        } else {
-          return {
-            type_: 'comma enumeration M',
-            p1: a
-          };
-        }
-      },
-      'output': function output(buffer, m, entityFollows) {
-        // entityFollows:
-        //   undefined = if we have nothing else to output, also ignore the just read space (buffer.sb)
-        //   1 = an entity follows, never omit the space if there was one just read before (can only apply to state 1)
-        //   2 = 1 + the entity can have an amount, so output a\, instead of converting it to o (can only apply to states a|as)
-
-        /** @type {ParserOutput | ParserOutput[]} */
-        var ret;
-
-        if (!buffer.r) {
-          ret = [];
-
-          if (!buffer.a && !buffer.b && !buffer.p && !buffer.o && !buffer.q && !buffer.d && !entityFollows) ; else {
-            if (buffer.sb) {
-              ret.push({
-                type_: 'entitySkip'
-              });
-            }
-
-            if (!buffer.o && !buffer.q && !buffer.d && !buffer.b && !buffer.p && entityFollows !== 2) {
-              buffer.o = buffer.a;
-              buffer.a = undefined;
-            } else if (!buffer.o && !buffer.q && !buffer.d && (buffer.b || buffer.p)) {
-              buffer.o = buffer.a;
-              buffer.d = buffer.b;
-              buffer.q = buffer.p;
-              buffer.a = buffer.b = buffer.p = undefined;
-            } else {
-              if (buffer.o && buffer.dType === 'kv' && mhchemParser.patterns.match_('d-oxidation$', buffer.d || "")) {
-                buffer.dType = 'oxidation';
-              } else if (buffer.o && buffer.dType === 'kv' && !buffer.q) {
-                buffer.dType = undefined;
-              }
-            }
-
-            ret.push({
-              type_: 'chemfive',
-              a: mhchemParser.go(buffer.a, 'a'),
-              b: mhchemParser.go(buffer.b, 'bd'),
-              p: mhchemParser.go(buffer.p, 'pq'),
-              o: mhchemParser.go(buffer.o, 'o'),
-              q: mhchemParser.go(buffer.q, 'pq'),
-              d: mhchemParser.go(buffer.d, buffer.dType === 'oxidation' ? 'oxidation' : 'bd'),
-              dType: buffer.dType
-            });
-          }
-        } else {
-          // r
-
-          /** @type {ParserOutput[]} */
-          var rd;
-
-          if (buffer.rdt === 'M') {
-            rd = mhchemParser.go(buffer.rd, 'tex-math');
-          } else if (buffer.rdt === 'T') {
-            rd = [{
-              type_: 'text',
-              p1: buffer.rd || ""
-            }];
-          } else {
-            rd = mhchemParser.go(buffer.rd);
-          }
-          /** @type {ParserOutput[]} */
-
-
-          var rq;
-
-          if (buffer.rqt === 'M') {
-            rq = mhchemParser.go(buffer.rq, 'tex-math');
-          } else if (buffer.rqt === 'T') {
-            rq = [{
-              type_: 'text',
-              p1: buffer.rq || ""
-            }];
-          } else {
-            rq = mhchemParser.go(buffer.rq);
-          }
-
-          ret = {
-            type_: 'arrow',
-            r: buffer.r,
-            rd: rd,
-            rq: rq
-          };
-        }
-
-        for (var p in buffer) {
-          if (p !== 'parenthesisLevel' && p !== 'beginsWithBond') {
-            delete buffer[p];
-          }
-        }
-
-        return ret;
-      },
-      'oxidation-output': function oxidationOutput(buffer, m) {
-        var ret = ["{"];
-        mhchemParser.concatArray(ret, mhchemParser.go(m, 'oxidation'));
-        ret.push("}");
-        return ret;
-      },
-      'frac-output': function fracOutput(buffer, m) {
-        return {
-          type_: 'frac-ce',
-          p1: mhchemParser.go(m[0]),
-          p2: mhchemParser.go(m[1])
-        };
-      },
-      'overset-output': function oversetOutput(buffer, m) {
-        return {
-          type_: 'overset',
-          p1: mhchemParser.go(m[0]),
-          p2: mhchemParser.go(m[1])
-        };
-      },
-      'underset-output': function undersetOutput(buffer, m) {
-        return {
-          type_: 'underset',
-          p1: mhchemParser.go(m[0]),
-          p2: mhchemParser.go(m[1])
-        };
-      },
-      'underbrace-output': function underbraceOutput(buffer, m) {
-        return {
-          type_: 'underbrace',
-          p1: mhchemParser.go(m[0]),
-          p2: mhchemParser.go(m[1])
-        };
-      },
-      'color-output': function colorOutput(buffer, m) {
-        return {
-          type_: 'color',
-          color1: m[0],
-          color2: mhchemParser.go(m[1])
-        };
-      },
-      'r=': function r(buffer, m) {
-        buffer.r = m;
-      },
-      'rdt=': function rdt(buffer, m) {
-        buffer.rdt = m;
-      },
-      'rd=': function rd(buffer, m) {
-        buffer.rd = m;
-      },
-      'rqt=': function rqt(buffer, m) {
-        buffer.rqt = m;
-      },
-      'rq=': function rq(buffer, m) {
-        buffer.rq = m;
-      },
-      'operator': function operator(buffer, m, p1) {
-        return {
-          type_: 'operator',
-          kind_: p1 || m
-        };
-      }
-    }
-  },
-  'a': {
-    transitions: mhchemParser.createTransitions({
-      'empty': {
-        '*': {}
-      },
-      '1/2$': {
-        '0': {
-          action_: '1/2'
-        }
-      },
-      'else': {
-        '0': {
-          nextState: '1',
-          revisit: true
-        }
-      },
-      '$(...)$': {
-        '*': {
-          action_: 'tex-math tight',
-          nextState: '1'
-        }
-      },
-      ',': {
-        '*': {
-          action_: {
-            type_: 'insert',
-            option: 'commaDecimal'
-          }
-        }
-      },
-      'else2': {
-        '*': {
-          action_: 'copy'
-        }
-      }
-    }),
-    actions: {}
-  },
-  'o': {
-    transitions: mhchemParser.createTransitions({
-      'empty': {
-        '*': {}
-      },
-      '1/2$': {
-        '0': {
-          action_: '1/2'
-        }
-      },
-      'else': {
-        '0': {
-          nextState: '1',
-          revisit: true
-        }
-      },
-      'letters': {
-        '*': {
-          action_: 'rm'
-        }
-      },
-      '\\ca': {
-        '*': {
-          action_: {
-            type_: 'insert',
-            option: 'circa'
-          }
-        }
-      },
-      '\\x{}{}|\\x{}|\\x': {
-        '*': {
-          action_: 'copy'
-        }
-      },
-      '${(...)}$|$(...)$': {
-        '*': {
-          action_: 'tex-math'
-        }
-      },
-      '{(...)}': {
-        '*': {
-          action_: '{text}'
-        }
-      },
-      'else2': {
-        '*': {
-          action_: 'copy'
-        }
-      }
-    }),
-    actions: {}
-  },
-  'text': {
-    transitions: mhchemParser.createTransitions({
-      'empty': {
-        '*': {
-          action_: 'output'
-        }
-      },
-      '{...}': {
-        '*': {
-          action_: 'text='
-        }
-      },
-      '${(...)}$|$(...)$': {
-        '*': {
-          action_: 'tex-math'
-        }
-      },
-      '\\greek': {
-        '*': {
-          action_: ['output', 'rm']
-        }
-      },
-      '\\,|\\x{}{}|\\x{}|\\x': {
-        '*': {
-          action_: ['output', 'copy']
-        }
-      },
-      'else': {
-        '*': {
-          action_: 'text='
-        }
-      }
-    }),
-    actions: {
-      'output': function output(buffer) {
-        if (buffer.text_) {
-          /** @type {ParserOutput} */
-          var ret = {
-            type_: 'text',
-            p1: buffer.text_
-          };
-
-          for (var p in buffer) {
-            delete buffer[p];
-          }
-
-          return ret;
-        }
-      }
-    }
-  },
-  'pq': {
-    transitions: mhchemParser.createTransitions({
-      'empty': {
-        '*': {}
-      },
-      'state of aggregation $': {
-        '*': {
-          action_: 'state of aggregation'
-        }
-      },
-      'i$': {
-        '0': {
-          nextState: '!f',
-          revisit: true
-        }
-      },
-      '(KV letters),': {
-        '0': {
-          action_: 'rm',
-          nextState: '0'
-        }
-      },
-      'formula$': {
-        '0': {
-          nextState: 'f',
-          revisit: true
-        }
-      },
-      '1/2$': {
-        '0': {
-          action_: '1/2'
-        }
-      },
-      'else': {
-        '0': {
-          nextState: '!f',
-          revisit: true
-        }
-      },
-      '${(...)}$|$(...)$': {
-        '*': {
-          action_: 'tex-math'
-        }
-      },
-      '{(...)}': {
-        '*': {
-          action_: 'text'
-        }
-      },
-      'a-z': {
-        'f': {
-          action_: 'tex-math'
-        }
-      },
-      'letters': {
-        '*': {
-          action_: 'rm'
-        }
-      },
-      '-9.,9': {
-        '*': {
-          action_: '9,9'
-        }
-      },
-      ',': {
-        '*': {
-          action_: {
-            type_: 'insert+p1',
-            option: 'comma enumeration S'
-          }
-        }
-      },
-      '\\color{(...)}{(...)}1|\\color(...){(...)}2': {
-        '*': {
-          action_: 'color-output'
-        }
-      },
-      '\\color{(...)}0': {
-        '*': {
-          action_: 'color0-output'
-        }
-      },
-      '\\ce{(...)}': {
-        '*': {
-          action_: 'ce'
-        }
-      },
-      '\\,|\\x{}{}|\\x{}|\\x': {
-        '*': {
-          action_: 'copy'
-        }
-      },
-      'else2': {
-        '*': {
-          action_: 'copy'
-        }
-      }
-    }),
-    actions: {
-      'state of aggregation': function stateOfAggregation(buffer, m) {
-        return {
-          type_: 'state of aggregation subscript',
-          p1: mhchemParser.go(m, 'o')
-        };
-      },
-      'color-output': function colorOutput(buffer, m) {
-        return {
-          type_: 'color',
-          color1: m[0],
-          color2: mhchemParser.go(m[1], 'pq')
-        };
-      }
-    }
-  },
-  'bd': {
-    transitions: mhchemParser.createTransitions({
-      'empty': {
-        '*': {}
-      },
-      'x$': {
-        '0': {
-          nextState: '!f',
-          revisit: true
-        }
-      },
-      'formula$': {
-        '0': {
-          nextState: 'f',
-          revisit: true
-        }
-      },
-      'else': {
-        '0': {
-          nextState: '!f',
-          revisit: true
-        }
-      },
-      '-9.,9 no missing 0': {
-        '*': {
-          action_: '9,9'
-        }
-      },
-      '.': {
-        '*': {
-          action_: {
-            type_: 'insert',
-            option: 'electron dot'
-          }
-        }
-      },
-      'a-z': {
-        'f': {
-          action_: 'tex-math'
-        }
-      },
-      'x': {
-        '*': {
-          action_: {
-            type_: 'insert',
-            option: 'KV x'
-          }
-        }
-      },
-      'letters': {
-        '*': {
-          action_: 'rm'
-        }
-      },
-      '\'': {
-        '*': {
-          action_: {
-            type_: 'insert',
-            option: 'prime'
-          }
-        }
-      },
-      '${(...)}$|$(...)$': {
-        '*': {
-          action_: 'tex-math'
-        }
-      },
-      '{(...)}': {
-        '*': {
-          action_: 'text'
-        }
-      },
-      '\\color{(...)}{(...)}1|\\color(...){(...)}2': {
-        '*': {
-          action_: 'color-output'
-        }
-      },
-      '\\color{(...)}0': {
-        '*': {
-          action_: 'color0-output'
-        }
-      },
-      '\\ce{(...)}': {
-        '*': {
-          action_: 'ce'
-        }
-      },
-      '\\,|\\x{}{}|\\x{}|\\x': {
-        '*': {
-          action_: 'copy'
-        }
-      },
-      'else2': {
-        '*': {
-          action_: 'copy'
-        }
-      }
-    }),
-    actions: {
-      'color-output': function colorOutput(buffer, m) {
-        return {
-          type_: 'color',
-          color1: m[0],
-          color2: mhchemParser.go(m[1], 'bd')
-        };
-      }
-    }
-  },
-  'oxidation': {
-    transitions: mhchemParser.createTransitions({
-      'empty': {
-        '*': {}
-      },
-      'roman numeral': {
-        '*': {
-          action_: 'roman-numeral'
-        }
-      },
-      '${(...)}$|$(...)$': {
-        '*': {
-          action_: 'tex-math'
-        }
-      },
-      'else': {
-        '*': {
-          action_: 'copy'
-        }
-      }
-    }),
-    actions: {
-      'roman-numeral': function romanNumeral(buffer, m) {
-        return {
-          type_: 'roman numeral',
-          p1: m || ""
-        };
-      }
-    }
-  },
-  'tex-math': {
-    transitions: mhchemParser.createTransitions({
-      'empty': {
-        '*': {
-          action_: 'output'
-        }
-      },
-      '\\ce{(...)}': {
-        '*': {
-          action_: ['output', 'ce']
-        }
-      },
-      '{...}|\\,|\\x{}{}|\\x{}|\\x': {
-        '*': {
-          action_: 'o='
-        }
-      },
-      'else': {
-        '*': {
-          action_: 'o='
-        }
-      }
-    }),
-    actions: {
-      'output': function output(buffer) {
-        if (buffer.o) {
-          /** @type {ParserOutput} */
-          var ret = {
-            type_: 'tex-math',
-            p1: buffer.o
-          };
-
-          for (var p in buffer) {
-            delete buffer[p];
-          }
-
-          return ret;
-        }
-      }
-    }
-  },
-  'tex-math tight': {
-    transitions: mhchemParser.createTransitions({
-      'empty': {
-        '*': {
-          action_: 'output'
-        }
-      },
-      '\\ce{(...)}': {
-        '*': {
-          action_: ['output', 'ce']
-        }
-      },
-      '{...}|\\,|\\x{}{}|\\x{}|\\x': {
-        '*': {
-          action_: 'o='
-        }
-      },
-      '-|+': {
-        '*': {
-          action_: 'tight operator'
-        }
-      },
-      'else': {
-        '*': {
-          action_: 'o='
-        }
-      }
-    }),
-    actions: {
-      'tight operator': function tightOperator(buffer, m) {
-        buffer.o = (buffer.o || "") + "{" + m + "}";
-      },
-      'output': function output(buffer) {
-        if (buffer.o) {
-          /** @type {ParserOutput} */
-          var ret = {
-            type_: 'tex-math',
-            p1: buffer.o
-          };
-
-          for (var p in buffer) {
-            delete buffer[p];
-          }
-
-          return ret;
-        }
-      }
-    }
-  },
-  '9,9': {
-    transitions: mhchemParser.createTransitions({
-      'empty': {
-        '*': {}
-      },
-      ',': {
-        '*': {
-          action_: 'comma'
-        }
-      },
-      'else': {
-        '*': {
-          action_: 'copy'
-        }
-      }
-    }),
-    actions: {
-      'comma': function comma() {
-        return {
-          type_: 'commaDecimal'
-        };
-      }
-    }
-  },
-  //#endregion
-  //
-  // \pu state machines
-  //
-  //#region pu
-  'pu': {
-    transitions: mhchemParser.createTransitions({
-      'empty': {
-        '*': {
-          action_: 'output'
-        }
-      },
-      'space$': {
-        '*': {
-          action_: ['output', 'space']
-        }
-      },
-      '{[(|)]}': {
-        '0|a': {
-          action_: 'copy'
-        }
-      },
-      '(-)(9)^(-9)': {
-        '0': {
-          action_: 'number^',
-          nextState: 'a'
-        }
-      },
-      '(-)(9.,9)(e)(99)': {
-        '0': {
-          action_: 'enumber',
-          nextState: 'a'
-        }
-      },
-      'space': {
-        '0|a': {}
-      },
-      'pm-operator': {
-        '0|a': {
-          action_: {
-            type_: 'operator',
-            option: '\\pm'
-          },
-          nextState: '0'
-        }
-      },
-      'operator': {
-        '0|a': {
-          action_: 'copy',
-          nextState: '0'
-        }
-      },
-      '//': {
-        'd': {
-          action_: 'o=',
-          nextState: '/'
-        }
-      },
-      '/': {
-        'd': {
-          action_: 'o=',
-          nextState: '/'
-        }
-      },
-      '{...}|else': {
-        '0|d': {
-          action_: 'd=',
-          nextState: 'd'
-        },
-        'a': {
-          action_: ['space', 'd='],
-          nextState: 'd'
-        },
-        '/|q': {
-          action_: 'q=',
-          nextState: 'q'
-        }
-      }
-    }),
-    actions: {
-      'enumber': function enumber(buffer, m) {
-        /** @type {ParserOutput[]} */
-        var ret = [];
-
-        if (m[0] === "+-" || m[0] === "+/-") {
-          ret.push("\\pm ");
-        } else if (m[0]) {
-          ret.push(m[0]);
-        }
-
-        if (m[1]) {
-          mhchemParser.concatArray(ret, mhchemParser.go(m[1], 'pu-9,9'));
-
-          if (m[2]) {
-            if (m[2].match(/[,.]/)) {
-              mhchemParser.concatArray(ret, mhchemParser.go(m[2], 'pu-9,9'));
-            } else {
-              ret.push(m[2]);
-            }
-          }
-
-          m[3] = m[4] || m[3];
-
-          if (m[3]) {
-            m[3] = m[3].trim();
-
-            if (m[3] === "e" || m[3].substr(0, 1) === "*") {
-              ret.push({
-                type_: 'cdot'
-              });
-            } else {
-              ret.push({
-                type_: 'times'
-              });
-            }
-          }
-        }
-
-        if (m[3]) {
-          ret.push("10^{" + m[5] + "}");
-        }
-
-        return ret;
-      },
-      'number^': function number(buffer, m) {
-        /** @type {ParserOutput[]} */
-        var ret = [];
-
-        if (m[0] === "+-" || m[0] === "+/-") {
-          ret.push("\\pm ");
-        } else if (m[0]) {
-          ret.push(m[0]);
-        }
-
-        mhchemParser.concatArray(ret, mhchemParser.go(m[1], 'pu-9,9'));
-        ret.push("^{" + m[2] + "}");
-        return ret;
-      },
-      'operator': function operator(buffer, m, p1) {
-        return {
-          type_: 'operator',
-          kind_: p1 || m
-        };
-      },
-      'space': function space() {
-        return {
-          type_: 'pu-space-1'
-        };
-      },
-      'output': function output(buffer) {
-        /** @type {ParserOutput | ParserOutput[]} */
-        var ret;
-        var md = mhchemParser.patterns.match_('{(...)}', buffer.d || "");
-
-        if (md && md.remainder === '') {
-          buffer.d = md.match_;
-        }
-
-        var mq = mhchemParser.patterns.match_('{(...)}', buffer.q || "");
-
-        if (mq && mq.remainder === '') {
-          buffer.q = mq.match_;
-        }
-
-        if (buffer.d) {
-          buffer.d = buffer.d.replace(/\u00B0C|\^oC|\^{o}C/g, "{}^{\\circ}C");
-          buffer.d = buffer.d.replace(/\u00B0F|\^oF|\^{o}F/g, "{}^{\\circ}F");
-        }
-
-        if (buffer.q) {
-          // fraction
-          buffer.q = buffer.q.replace(/\u00B0C|\^oC|\^{o}C/g, "{}^{\\circ}C");
-          buffer.q = buffer.q.replace(/\u00B0F|\^oF|\^{o}F/g, "{}^{\\circ}F");
-          var b5 = {
-            d: mhchemParser.go(buffer.d, 'pu'),
-            q: mhchemParser.go(buffer.q, 'pu')
-          };
-
-          if (buffer.o === '//') {
-            ret = {
-              type_: 'pu-frac',
-              p1: b5.d,
-              p2: b5.q
-            };
-          } else {
-            ret = b5.d;
-
-            if (b5.d.length > 1 || b5.q.length > 1) {
-              ret.push({
-                type_: ' / '
-              });
-            } else {
-              ret.push({
-                type_: '/'
-              });
-            }
-
-            mhchemParser.concatArray(ret, b5.q);
-          }
-        } else {
-          // no fraction
-          ret = mhchemParser.go(buffer.d, 'pu-2');
-        }
-
-        for (var p in buffer) {
-          delete buffer[p];
-        }
-
-        return ret;
-      }
-    }
-  },
-  'pu-2': {
-    transitions: mhchemParser.createTransitions({
-      'empty': {
-        '*': {
-          action_: 'output'
-        }
-      },
-      '*': {
-        '*': {
-          action_: ['output', 'cdot'],
-          nextState: '0'
-        }
-      },
-      '\\x': {
-        '*': {
-          action_: 'rm='
-        }
-      },
-      'space': {
-        '*': {
-          action_: ['output', 'space'],
-          nextState: '0'
-        }
-      },
-      '^{(...)}|^(-1)': {
-        '1': {
-          action_: '^(-1)'
-        }
-      },
-      '-9.,9': {
-        '0': {
-          action_: 'rm=',
-          nextState: '0'
-        },
-        '1': {
-          action_: '^(-1)',
-          nextState: '0'
-        }
-      },
-      '{...}|else': {
-        '*': {
-          action_: 'rm=',
-          nextState: '1'
-        }
-      }
-    }),
-    actions: {
-      'cdot': function cdot() {
-        return {
-          type_: 'tight cdot'
-        };
-      },
-      '^(-1)': function _(buffer, m) {
-        buffer.rm += "^{" + m + "}";
-      },
-      'space': function space() {
-        return {
-          type_: 'pu-space-2'
-        };
-      },
-      'output': function output(buffer) {
-        /** @type {ParserOutput | ParserOutput[]} */
-        var ret = [];
-
-        if (buffer.rm) {
-          var mrm = mhchemParser.patterns.match_('{(...)}', buffer.rm || "");
-
-          if (mrm && mrm.remainder === '') {
-            ret = mhchemParser.go(mrm.match_, 'pu');
-          } else {
-            ret = {
-              type_: 'rm',
-              p1: buffer.rm
-            };
-          }
-        }
-
-        for (var p in buffer) {
-          delete buffer[p];
-        }
-
-        return ret;
-      }
-    }
-  },
-  'pu-9,9': {
-    transitions: mhchemParser.createTransitions({
-      'empty': {
-        '0': {
-          action_: 'output-0'
-        },
-        'o': {
-          action_: 'output-o'
-        }
-      },
-      ',': {
-        '0': {
-          action_: ['output-0', 'comma'],
-          nextState: 'o'
-        }
-      },
-      '.': {
-        '0': {
-          action_: ['output-0', 'copy'],
-          nextState: 'o'
-        }
-      },
-      'else': {
-        '*': {
-          action_: 'text='
-        }
-      }
-    }),
-    actions: {
-      'comma': function comma() {
-        return {
-          type_: 'commaDecimal'
-        };
-      },
-      'output-0': function output0(buffer) {
-        /** @type {ParserOutput[]} */
-        var ret = [];
-        buffer.text_ = buffer.text_ || "";
-
-        if (buffer.text_.length > 4) {
-          var a = buffer.text_.length % 3;
-
-          if (a === 0) {
-            a = 3;
-          }
-
-          for (var i = buffer.text_.length - 3; i > 0; i -= 3) {
-            ret.push(buffer.text_.substr(i, 3));
-            ret.push({
-              type_: '1000 separator'
-            });
-          }
-
-          ret.push(buffer.text_.substr(0, a));
-          ret.reverse();
-        } else {
-          ret.push(buffer.text_);
-        }
-
-        for (var p in buffer) {
-          delete buffer[p];
-        }
-
-        return ret;
-      },
-      'output-o': function outputO(buffer) {
-        /** @type {ParserOutput[]} */
-        var ret = [];
-        buffer.text_ = buffer.text_ || "";
-
-        if (buffer.text_.length > 4) {
-          var a = buffer.text_.length - 3;
-
-          for (var i = 0; i < a; i += 3) {
-            ret.push(buffer.text_.substr(i, 3));
-            ret.push({
-              type_: '1000 separator'
-            });
-          }
-
-          ret.push(buffer.text_.substr(i));
-        } else {
-          ret.push(buffer.text_);
-        }
-
-        for (var p in buffer) {
-          delete buffer[p];
-        }
-
-        return ret;
-      }
-    } //#endregion
-
-  }
-}; //
-// texify: Take MhchemParser output and convert it to TeX
-//
-
-/** @type {Texify} */
-
-var texify = {
-  go: function go(input, isInner) {
-    // (recursive, max 4 levels)
-    if (!input) {
-      return "";
-    }
-
-    var res = "";
-    var cee = false;
-
-    for (var i = 0; i < input.length; i++) {
-      var inputi = input[i];
-
-      if (typeof inputi === "string") {
-        res += inputi;
-      } else {
-        res += texify._go2(inputi);
-
-        if (inputi.type_ === '1st-level escape') {
-          cee = true;
-        }
-      }
-    }
-
-    if (!isInner && !cee && res) {
-      res = "{" + res + "}";
-    }
-
-    return res;
-  },
-  _goInner: function _goInner(input) {
-    if (!input) {
-      return input;
-    }
-
-    return texify.go(input, true);
-  },
-  _go2: function _go2(buf) {
-    /** @type {undefined | string} */
-    var res;
-
-    switch (buf.type_) {
-      case 'chemfive':
-        res = "";
-        var b5 = {
-          a: texify._goInner(buf.a),
-          b: texify._goInner(buf.b),
-          p: texify._goInner(buf.p),
-          o: texify._goInner(buf.o),
-          q: texify._goInner(buf.q),
-          d: texify._goInner(buf.d)
-        }; //
-        // a
-        //
-
-        if (b5.a) {
-          if (b5.a.match(/^[+\-]/)) {
-            b5.a = "{" + b5.a + "}";
-          }
-
-          res += b5.a + "\\,";
-        } //
-        // b and p
-        //
-
-
-        if (b5.b || b5.p) {
-          res += "{\\vphantom{X}}";
-          res += "^{\\hphantom{" + (b5.b || "") + "}}_{\\hphantom{" + (b5.p || "") + "}}";
-          res += "{\\vphantom{X}}";
-          res += "^{\\smash[t]{\\vphantom{2}}\\mathllap{" + (b5.b || "") + "}}";
-          res += "_{\\vphantom{2}\\mathllap{\\smash[t]{" + (b5.p || "") + "}}}";
-        } //
-        // o
-        //
-
-
-        if (b5.o) {
-          if (b5.o.match(/^[+\-]/)) {
-            b5.o = "{" + b5.o + "}";
-          }
-
-          res += b5.o;
-        } //
-        // q and d
-        //
-
-
-        if (buf.dType === 'kv') {
-          if (b5.d || b5.q) {
-            res += "{\\vphantom{X}}";
-          }
-
-          if (b5.d) {
-            res += "^{" + b5.d + "}";
-          }
-
-          if (b5.q) {
-            res += "_{\\smash[t]{" + b5.q + "}}";
-          }
-        } else if (buf.dType === 'oxidation') {
-          if (b5.d) {
-            res += "{\\vphantom{X}}";
-            res += "^{" + b5.d + "}";
-          }
-
-          if (b5.q) {
-            res += "{\\vphantom{X}}";
-            res += "_{\\smash[t]{" + b5.q + "}}";
-          }
-        } else {
-          if (b5.q) {
-            res += "{\\vphantom{X}}";
-            res += "_{\\smash[t]{" + b5.q + "}}";
-          }
-
-          if (b5.d) {
-            res += "{\\vphantom{X}}";
-            res += "^{" + b5.d + "}";
-          }
-        }
-
-        break;
-
-      case 'rm':
-        res = "\\mathrm{" + buf.p1 + "}";
-        break;
-
-      case 'text':
-        if (buf.p1.match(/[\^_]/)) {
-          buf.p1 = buf.p1.replace(" ", "~").replace("-", "\\text{-}");
-          res = "\\mathrm{" + buf.p1 + "}";
-        } else {
-          res = "\\text{" + buf.p1 + "}";
-        }
-
-        break;
-
-      case 'roman numeral':
-        res = "\\mathrm{" + buf.p1 + "}";
-        break;
-
-      case 'state of aggregation':
-        res = "\\mskip2mu " + texify._goInner(buf.p1);
-        break;
-
-      case 'state of aggregation subscript':
-        res = "\\mskip1mu " + texify._goInner(buf.p1);
-        break;
-
-      case 'bond':
-        res = texify._getBond(buf.kind_);
-
-        if (!res) {
-          throw ["MhchemErrorBond", "mhchem Error. Unknown bond type (" + buf.kind_ + ")"];
-        }
-
-        break;
-
-      case 'frac':
-        var c = "\\frac{" + buf.p1 + "}{" + buf.p2 + "}";
-        res = "\\mathchoice{\\textstyle" + c + "}{" + c + "}{" + c + "}{" + c + "}";
-        break;
-
-      case 'pu-frac':
-        var d = "\\frac{" + texify._goInner(buf.p1) + "}{" + texify._goInner(buf.p2) + "}";
-        res = "\\mathchoice{\\textstyle" + d + "}{" + d + "}{" + d + "}{" + d + "}";
-        break;
-
-      case 'tex-math':
-        res = buf.p1 + " ";
-        break;
-
-      case 'frac-ce':
-        res = "\\frac{" + texify._goInner(buf.p1) + "}{" + texify._goInner(buf.p2) + "}";
-        break;
-
-      case 'overset':
-        res = "\\overset{" + texify._goInner(buf.p1) + "}{" + texify._goInner(buf.p2) + "}";
-        break;
-
-      case 'underset':
-        res = "\\underset{" + texify._goInner(buf.p1) + "}{" + texify._goInner(buf.p2) + "}";
-        break;
-
-      case 'underbrace':
-        res = "\\underbrace{" + texify._goInner(buf.p1) + "}_{" + texify._goInner(buf.p2) + "}";
-        break;
-
-      case 'color':
-        res = "{\\color{" + buf.color1 + "}{" + texify._goInner(buf.color2) + "}}";
-        break;
-
-      case 'color0':
-        res = "\\color{" + buf.color + "}";
-        break;
-
-      case 'arrow':
-        var b6 = {
-          rd: texify._goInner(buf.rd),
-          rq: texify._goInner(buf.rq)
-        };
-
-        var arrow = "\\x" + texify._getArrow(buf.r);
-
-        if (b6.rq) {
-          arrow += "[{" + b6.rq + "}]";
-        }
-
-        if (b6.rd) {
-          arrow += "{" + b6.rd + "}";
-        } else {
-          arrow += "{}";
-        }
-
-        res = arrow;
-        break;
-
-      case 'operator':
-        res = texify._getOperator(buf.kind_);
-        break;
-
-      case '1st-level escape':
-        res = buf.p1 + " "; // &, \\\\, \\hlin
-
-        break;
-
-      case 'space':
-        res = " ";
-        break;
-
-      case 'entitySkip':
-        res = "~";
-        break;
-
-      case 'pu-space-1':
-        res = "~";
-        break;
-
-      case 'pu-space-2':
-        res = "\\mkern3mu ";
-        break;
-
-      case '1000 separator':
-        res = "\\mkern2mu ";
-        break;
-
-      case 'commaDecimal':
-        res = "{,}";
-        break;
-
-      case 'comma enumeration L':
-        res = "{" + buf.p1 + "}\\mkern6mu ";
-        break;
-
-      case 'comma enumeration M':
-        res = "{" + buf.p1 + "}\\mkern3mu ";
-        break;
-
-      case 'comma enumeration S':
-        res = "{" + buf.p1 + "}\\mkern1mu ";
-        break;
-
-      case 'hyphen':
-        res = "\\text{-}";
-        break;
-
-      case 'addition compound':
-        res = "\\,{\\cdot}\\,";
-        break;
-
-      case 'electron dot':
-        res = "\\mkern1mu \\bullet\\mkern1mu ";
-        break;
-
-      case 'KV x':
-        res = "{\\times}";
-        break;
-
-      case 'prime':
-        res = "\\prime ";
-        break;
-
-      case 'cdot':
-        res = "\\cdot ";
-        break;
-
-      case 'tight cdot':
-        res = "\\mkern1mu{\\cdot}\\mkern1mu ";
-        break;
-
-      case 'times':
-        res = "\\times ";
-        break;
-
-      case 'circa':
-        res = "{\\sim}";
-        break;
-
-      case '^':
-        res = "uparrow";
-        break;
-
-      case 'v':
-        res = "downarrow";
-        break;
-
-      case 'ellipsis':
-        res = "\\ldots ";
-        break;
-
-      case '/':
-        res = "/";
-        break;
-
-      case ' / ':
-        res = "\\,/\\,";
-        break;
-
-      default:
-        throw ["MhchemBugT", "mhchem bug T. Please report."];
-      // Missing texify rule or unknown MhchemParser output
-    }
-    return res;
-  },
-  _getArrow: function _getArrow(a) {
-    switch (a) {
-      case "->":
-        return "rightarrow";
-
-      case "\u2192":
-        return "rightarrow";
-
-      case "\u27F6":
-        return "rightarrow";
-
-      case "<-":
-        return "leftarrow";
-
-      case "<->":
-        return "leftrightarrow";
-
-      case "<-->":
-        return "rightleftarrows";
-
-      case "<=>":
-        return "rightleftharpoons";
-
-      case "\u21CC":
-        return "rightleftharpoons";
-
-      case "<=>>":
-        return "rightequilibrium";
-
-      case "<<=>":
-        return "leftequilibrium";
-
-      default:
-        throw ["MhchemBugT", "mhchem bug T. Please report."];
-    }
-  },
-  _getBond: function _getBond(a) {
-    switch (a) {
-      case "-":
-        return "{-}";
-
-      case "1":
-        return "{-}";
-
-      case "=":
-        return "{=}";
-
-      case "2":
-        return "{=}";
-
-      case "#":
-        return "{\\equiv}";
-
-      case "3":
-        return "{\\equiv}";
-
-      case "~":
-        return "{\\tripledash}";
-
-      case "~-":
-        return "{\\mathrlap{\\raisebox{-.1em}{$-$}}\\raisebox{.1em}{$\\tripledash$}}";
-
-      case "~=":
-        return "{\\mathrlap{\\raisebox{-.2em}{$-$}}\\mathrlap{\\raisebox{.2em}{$\\tripledash$}}-}";
-
-      case "~--":
-        return "{\\mathrlap{\\raisebox{-.2em}{$-$}}\\mathrlap{\\raisebox{.2em}{$\\tripledash$}}-}";
-
-      case "-~-":
-        return "{\\mathrlap{\\raisebox{-.2em}{$-$}}\\mathrlap{\\raisebox{.2em}{$-$}}\\tripledash}";
-
-      case "...":
-        return "{{\\cdot}{\\cdot}{\\cdot}}";
-
-      case "....":
-        return "{{\\cdot}{\\cdot}{\\cdot}{\\cdot}}";
-
-      case "->":
-        return "{\\rightarrow}";
-
-      case "<-":
-        return "{\\leftarrow}";
-
-      case "<":
-        return "{<}";
-
-      case ">":
-        return "{>}";
-
-      default:
-        throw ["MhchemBugT", "mhchem bug T. Please report."];
-    }
-  },
-  _getOperator: function _getOperator(a) {
-    switch (a) {
-      case "+":
-        return " {}+{} ";
-
-      case "-":
-        return " {}-{} ";
-
-      case "=":
-        return " {}={} ";
-
-      case "<":
-        return " {}<{} ";
-
-      case ">":
-        return " {}>{} ";
-
-      case "<<":
-        return " {}\\ll{} ";
-
-      case ">>":
-        return " {}\\gg{} ";
-
-      case "\\pm":
-        return " {}\\pm{} ";
-
-      case "\\approx":
-        return " {}\\approx{} ";
-
-      case "$\\approx$":
-        return " {}\\approx{} ";
-
-      case "v":
-        return " \\downarrow{} ";
-
-      case "(v)":
-        return " \\downarrow{} ";
-
-      case "^":
-        return " \\uparrow{} ";
-
-      case "(^)":
-        return " \\uparrow{} ";
-
-      default:
-        throw ["MhchemBugT", "mhchem bug T. Please report."];
-    }
-  }
-}; //
diff --git a/registry/vulkan/katex/contrib/render-a11y-string.js b/registry/vulkan/katex/contrib/render-a11y-string.js
deleted file mode 100644
index 34643ec..0000000
--- a/registry/vulkan/katex/contrib/render-a11y-string.js
+++ /dev/null
@@ -1,858 +0,0 @@
-(function webpackUniversalModuleDefinition(root, factory) {
-	if(typeof exports === 'object' && typeof module === 'object')
-		module.exports = factory(require("katex"));
-	else if(typeof define === 'function' && define.amd)
-		define(["katex"], factory);
-	else {
-		var a = typeof exports === 'object' ? factory(require("katex")) : factory(root["katex"]);
-		for(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];
-	}
-})((typeof self !== 'undefined' ? self : this), function(__WEBPACK_EXTERNAL_MODULE__0__) {
-return /******/ (function(modules) { // webpackBootstrap
-/******/ 	// The module cache
-/******/ 	var installedModules = {};
-/******/
-/******/ 	// The require function
-/******/ 	function __webpack_require__(moduleId) {
-/******/
-/******/ 		// Check if module is in cache
-/******/ 		if(installedModules[moduleId]) {
-/******/ 			return installedModules[moduleId].exports;
-/******/ 		}
-/******/ 		// Create a new module (and put it into the cache)
-/******/ 		var module = installedModules[moduleId] = {
-/******/ 			i: moduleId,
-/******/ 			l: false,
-/******/ 			exports: {}
-/******/ 		};
-/******/
-/******/ 		// Execute the module function
-/******/ 		modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
-/******/
-/******/ 		// Flag the module as loaded
-/******/ 		module.l = true;
-/******/
-/******/ 		// Return the exports of the module
-/******/ 		return module.exports;
-/******/ 	}
-/******/
-/******/
-/******/ 	// expose the modules object (__webpack_modules__)
-/******/ 	__webpack_require__.m = modules;
-/******/
-/******/ 	// expose the module cache
-/******/ 	__webpack_require__.c = installedModules;
-/******/
-/******/ 	// define getter function for harmony exports
-/******/ 	__webpack_require__.d = function(exports, name, getter) {
-/******/ 		if(!__webpack_require__.o(exports, name)) {
-/******/ 			Object.defineProperty(exports, name, { enumerable: true, get: getter });
-/******/ 		}
-/******/ 	};
-/******/
-/******/ 	// define __esModule on exports
-/******/ 	__webpack_require__.r = function(exports) {
-/******/ 		if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
-/******/ 			Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
-/******/ 		}
-/******/ 		Object.defineProperty(exports, '__esModule', { value: true });
-/******/ 	};
-/******/
-/******/ 	// create a fake namespace object
-/******/ 	// mode & 1: value is a module id, require it
-/******/ 	// mode & 2: merge all properties of value into the ns
-/******/ 	// mode & 4: return value when already ns object
-/******/ 	// mode & 8|1: behave like require
-/******/ 	__webpack_require__.t = function(value, mode) {
-/******/ 		if(mode & 1) value = __webpack_require__(value);
-/******/ 		if(mode & 8) return value;
-/******/ 		if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
-/******/ 		var ns = Object.create(null);
-/******/ 		__webpack_require__.r(ns);
-/******/ 		Object.defineProperty(ns, 'default', { enumerable: true, value: value });
-/******/ 		if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
-/******/ 		return ns;
-/******/ 	};
-/******/
-/******/ 	// getDefaultExport function for compatibility with non-harmony modules
-/******/ 	__webpack_require__.n = function(module) {
-/******/ 		var getter = module && module.__esModule ?
-/******/ 			function getDefault() { return module['default']; } :
-/******/ 			function getModuleExports() { return module; };
-/******/ 		__webpack_require__.d(getter, 'a', getter);
-/******/ 		return getter;
-/******/ 	};
-/******/
-/******/ 	// Object.prototype.hasOwnProperty.call
-/******/ 	__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
-/******/
-/******/ 	// __webpack_public_path__
-/******/ 	__webpack_require__.p = "";
-/******/
-/******/
-/******/ 	// Load entry module and return exports
-/******/ 	return __webpack_require__(__webpack_require__.s = 1);
-/******/ })
-/************************************************************************/
-/******/ ([
-/* 0 */
-/***/ (function(module, exports) {
-
-module.exports = __WEBPACK_EXTERNAL_MODULE__0__;
-
-/***/ }),
-/* 1 */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var katex__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(0);
-/* harmony import */ var katex__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(katex__WEBPACK_IMPORTED_MODULE_0__);
-/**
- * renderA11yString returns a readable string.
- *
- * In some cases the string will have the proper semantic math
- * meaning,:
- *   renderA11yString("\\frac{1}{2}"")
- *   -> "start fraction, 1, divided by, 2, end fraction"
- *
- * However, other cases do not:
- *   renderA11yString("f(x) = x^2")
- *   -> "f, left parenthesis, x, right parenthesis, equals, x, squared"
- *
- * The commas in the string aim to increase ease of understanding
- * when read by a screenreader.
- */
-// NOTE: since we're importing types here these files won't actually be
-// included in the build.
-// $FlowIgnore: we import the types directly anyways
-
-var stringMap = {
-  "(": "left parenthesis",
-  ")": "right parenthesis",
-  "[": "open bracket",
-  "]": "close bracket",
-  "\\{": "left brace",
-  "\\}": "right brace",
-  "\\lvert": "open vertical bar",
-  "\\rvert": "close vertical bar",
-  "|": "vertical bar",
-  "\\uparrow": "up arrow",
-  "\\Uparrow": "up arrow",
-  "\\downarrow": "down arrow",
-  "\\Downarrow": "down arrow",
-  "\\updownarrow": "up down arrow",
-  "\\leftarrow": "left arrow",
-  "\\Leftarrow": "left arrow",
-  "\\rightarrow": "right arrow",
-  "\\Rightarrow": "right arrow",
-  "\\langle": "open angle",
-  "\\rangle": "close angle",
-  "\\lfloor": "open floor",
-  "\\rfloor": "close floor",
-  "\\int": "integral",
-  "\\intop": "integral",
-  "\\lim": "limit",
-  "\\ln": "natural log",
-  "\\log": "log",
-  "\\sin": "sine",
-  "\\cos": "cosine",
-  "\\tan": "tangent",
-  "\\cot": "cotangent",
-  "\\sum": "sum",
-  "/": "slash",
-  ",": "comma",
-  ".": "point",
-  "-": "negative",
-  "+": "plus",
-  "~": "tilde",
-  ":": "colon",
-  "?": "question mark",
-  "'": "apostrophe",
-  "\\%": "percent",
-  " ": "space",
-  "\\ ": "space",
-  "\\$": "dollar sign",
-  "\\angle": "angle",
-  "\\degree": "degree",
-  "\\circ": "circle",
-  "\\vec": "vector",
-  "\\triangle": "triangle",
-  "\\pi": "pi",
-  "\\prime": "prime",
-  "\\infty": "infinity",
-  "\\alpha": "alpha",
-  "\\beta": "beta",
-  "\\gamma": "gamma",
-  "\\omega": "omega",
-  "\\theta": "theta",
-  "\\sigma": "sigma",
-  "\\lambda": "lambda",
-  "\\tau": "tau",
-  "\\Delta": "delta",
-  "\\delta": "delta",
-  "\\mu": "mu",
-  "\\rho": "rho",
-  "\\nabla": "del",
-  "\\ell": "ell",
-  "\\ldots": "dots",
-  // TODO: add entries for all accents
-  "\\hat": "hat",
-  "\\acute": "acute"
-};
-var powerMap = {
-  "prime": "prime",
-  "degree": "degrees",
-  "circle": "degrees",
-  "2": "squared",
-  "3": "cubed"
-};
-var openMap = {
-  "|": "open vertical bar",
-  ".": ""
-};
-var closeMap = {
-  "|": "close vertical bar",
-  ".": ""
-};
-var binMap = {
-  "+": "plus",
-  "-": "minus",
-  "\\pm": "plus minus",
-  "\\cdot": "dot",
-  "*": "times",
-  "/": "divided by",
-  "\\times": "times",
-  "\\div": "divided by",
-  "\\circ": "circle",
-  "\\bullet": "bullet"
-};
-var relMap = {
-  "=": "equals",
-  "\\approx": "approximately equals",
-  "≠": "does not equal",
-  "\\geq": "is greater than or equal to",
-  "\\ge": "is greater than or equal to",
-  "\\leq": "is less than or equal to",
-  "\\le": "is less than or equal to",
-  ">": "is greater than",
-  "<": "is less than",
-  "\\leftarrow": "left arrow",
-  "\\Leftarrow": "left arrow",
-  "\\rightarrow": "right arrow",
-  "\\Rightarrow": "right arrow",
-  ":": "colon"
-};
-var accentUnderMap = {
-  "\\underleftarrow": "left arrow",
-  "\\underrightarrow": "right arrow",
-  "\\underleftrightarrow": "left-right arrow",
-  "\\undergroup": "group",
-  "\\underlinesegment": "line segment",
-  "\\utilde": "tilde"
-};
-
-var buildString = function buildString(str, type, a11yStrings) {
-  if (!str) {
-    return;
-  }
-
-  var ret;
-
-  if (type === "open") {
-    ret = str in openMap ? openMap[str] : stringMap[str] || str;
-  } else if (type === "close") {
-    ret = str in closeMap ? closeMap[str] : stringMap[str] || str;
-  } else if (type === "bin") {
-    ret = binMap[str] || str;
-  } else if (type === "rel") {
-    ret = relMap[str] || str;
-  } else {
-    ret = stringMap[str] || str;
-  } // If the text to add is a number and there is already a string
-  // in the list and the last string is a number then we should
-  // combine them into a single number
-
-
-  if (/^\d+$/.test(ret) && a11yStrings.length > 0 && // TODO(kevinb): check that the last item in a11yStrings is a string
-  // I think we might be able to drop the nested arrays, which would make
-  // this easier to type - $FlowFixMe
-  /^\d+$/.test(a11yStrings[a11yStrings.length - 1])) {
-    a11yStrings[a11yStrings.length - 1] += ret;
-  } else if (ret) {
-    a11yStrings.push(ret);
-  }
-};
-
-var buildRegion = function buildRegion(a11yStrings, callback) {
-  var regionStrings = [];
-  a11yStrings.push(regionStrings);
-  callback(regionStrings);
-};
-
-var handleObject = function handleObject(tree, a11yStrings, atomType) {
-  // Everything else is assumed to be an object...
-  switch (tree.type) {
-    case "accent":
-      {
-        buildRegion(a11yStrings, function (a11yStrings) {
-          buildA11yStrings(tree.base, a11yStrings, atomType);
-          a11yStrings.push("with");
-          buildString(tree.label, "normal", a11yStrings);
-          a11yStrings.push("on top");
-        });
-        break;
-      }
-
-    case "accentUnder":
-      {
-        buildRegion(a11yStrings, function (a11yStrings) {
-          buildA11yStrings(tree.base, a11yStrings, atomType);
-          a11yStrings.push("with");
-          buildString(accentUnderMap[tree.label], "normal", a11yStrings);
-          a11yStrings.push("underneath");
-        });
-        break;
-      }
-
-    case "accent-token":
-      {
-        // Used internally by accent symbols.
-        break;
-      }
-
-    case "atom":
-      {
-        var text = tree.text;
-
-        switch (tree.family) {
-          case "bin":
-            {
-              buildString(text, "bin", a11yStrings);
-              break;
-            }
-
-          case "close":
-            {
-              buildString(text, "close", a11yStrings);
-              break;
-            }
-          // TODO(kevinb): figure out what should be done for inner
-
-          case "inner":
-            {
-              buildString(tree.text, "inner", a11yStrings);
-              break;
-            }
-
-          case "open":
-            {
-              buildString(text, "open", a11yStrings);
-              break;
-            }
-
-          case "punct":
-            {
-              buildString(text, "punct", a11yStrings);
-              break;
-            }
-
-          case "rel":
-            {
-              buildString(text, "rel", a11yStrings);
-              break;
-            }
-
-          default:
-            {
-              tree.family;
-              throw new Error("\"" + tree.family + "\" is not a valid atom type");
-            }
-        }
-
-        break;
-      }
-
-    case "color":
-      {
-        var color = tree.color.replace(/katex-/, "");
-        buildRegion(a11yStrings, function (regionStrings) {
-          regionStrings.push("start color " + color);
-          buildA11yStrings(tree.body, regionStrings, atomType);
-          regionStrings.push("end color " + color);
-        });
-        break;
-      }
-
-    case "color-token":
-      {
-        // Used by \color, \colorbox, and \fcolorbox but not directly rendered.
-        // It's a leaf node and has no children so just break.
-        break;
-      }
-
-    case "delimsizing":
-      {
-        if (tree.delim && tree.delim !== ".") {
-          buildString(tree.delim, "normal", a11yStrings);
-        }
-
-        break;
-      }
-
-    case "genfrac":
-      {
-        buildRegion(a11yStrings, function (regionStrings) {
-          // genfrac can have unbalanced delimiters
-          var leftDelim = tree.leftDelim,
-              rightDelim = tree.rightDelim; // NOTE: Not sure if this is a safe assumption
-          // hasBarLine true -> fraction, false -> binomial
-
-          if (tree.hasBarLine) {
-            regionStrings.push("start fraction");
-            leftDelim && buildString(leftDelim, "open", regionStrings);
-            buildA11yStrings(tree.numer, regionStrings, atomType);
-            regionStrings.push("divided by");
-            buildA11yStrings(tree.denom, regionStrings, atomType);
-            rightDelim && buildString(rightDelim, "close", regionStrings);
-            regionStrings.push("end fraction");
-          } else {
-            regionStrings.push("start binomial");
-            leftDelim && buildString(leftDelim, "open", regionStrings);
-            buildA11yStrings(tree.numer, regionStrings, atomType);
-            regionStrings.push("over");
-            buildA11yStrings(tree.denom, regionStrings, atomType);
-            rightDelim && buildString(rightDelim, "close", regionStrings);
-            regionStrings.push("end binomial");
-          }
-        });
-        break;
-      }
-
-    case "kern":
-      {
-        // No op: we don't attempt to present kerning information
-        // to the screen reader.
-        break;
-      }
-
-    case "leftright":
-      {
-        buildRegion(a11yStrings, function (regionStrings) {
-          buildString(tree.left, "open", regionStrings);
-          buildA11yStrings(tree.body, regionStrings, atomType);
-          buildString(tree.right, "close", regionStrings);
-        });
-        break;
-      }
-
-    case "leftright-right":
-      {
-        // TODO: double check that this is a no-op
-        break;
-      }
-
-    case "lap":
-      {
-        buildA11yStrings(tree.body, a11yStrings, atomType);
-        break;
-      }
-
-    case "mathord":
-      {
-        buildString(tree.text, "normal", a11yStrings);
-        break;
-      }
-
-    case "op":
-      {
-        var body = tree.body,
-            name = tree.name;
-
-        if (body) {
-          buildA11yStrings(body, a11yStrings, atomType);
-        } else if (name) {
-          buildString(name, "normal", a11yStrings);
-        }
-
-        break;
-      }
-
-    case "op-token":
-      {
-        // Used internally by operator symbols.
-        buildString(tree.text, atomType, a11yStrings);
-        break;
-      }
-
-    case "ordgroup":
-      {
-        buildA11yStrings(tree.body, a11yStrings, atomType);
-        break;
-      }
-
-    case "overline":
-      {
-        buildRegion(a11yStrings, function (a11yStrings) {
-          a11yStrings.push("start overline");
-          buildA11yStrings(tree.body, a11yStrings, atomType);
-          a11yStrings.push("end overline");
-        });
-        break;
-      }
-
-    case "phantom":
-      {
-        a11yStrings.push("empty space");
-        break;
-      }
-
-    case "raisebox":
-      {
-        buildA11yStrings(tree.body, a11yStrings, atomType);
-        break;
-      }
-
-    case "rule":
-      {
-        a11yStrings.push("rectangle");
-        break;
-      }
-
-    case "sizing":
-      {
-        buildA11yStrings(tree.body, a11yStrings, atomType);
-        break;
-      }
-
-    case "spacing":
-      {
-        a11yStrings.push("space");
-        break;
-      }
-
-    case "styling":
-      {
-        // We ignore the styling and just pass through the contents
-        buildA11yStrings(tree.body, a11yStrings, atomType);
-        break;
-      }
-
-    case "sqrt":
-      {
-        buildRegion(a11yStrings, function (regionStrings) {
-          var body = tree.body,
-              index = tree.index;
-
-          if (index) {
-            var indexString = flatten(buildA11yStrings(index, [], atomType)).join(",");
-
-            if (indexString === "3") {
-              regionStrings.push("cube root of");
-              buildA11yStrings(body, regionStrings, atomType);
-              regionStrings.push("end cube root");
-              return;
-            }
-
-            regionStrings.push("root");
-            regionStrings.push("start index");
-            buildA11yStrings(index, regionStrings, atomType);
-            regionStrings.push("end index");
-            return;
-          }
-
-          regionStrings.push("square root of");
-          buildA11yStrings(body, regionStrings, atomType);
-          regionStrings.push("end square root");
-        });
-        break;
-      }
-
-    case "supsub":
-      {
-        var base = tree.base,
-            sub = tree.sub,
-            sup = tree.sup;
-        var isLog = false;
-
-        if (base) {
-          buildA11yStrings(base, a11yStrings, atomType);
-          isLog = base.type === "op" && base.name === "\\log";
-        }
-
-        if (sub) {
-          var regionName = isLog ? "base" : "subscript";
-          buildRegion(a11yStrings, function (regionStrings) {
-            regionStrings.push("start " + regionName);
-            buildA11yStrings(sub, regionStrings, atomType);
-            regionStrings.push("end " + regionName);
-          });
-        }
-
-        if (sup) {
-          buildRegion(a11yStrings, function (regionStrings) {
-            var supString = flatten(buildA11yStrings(sup, [], atomType)).join(",");
-
-            if (supString in powerMap) {
-              regionStrings.push(powerMap[supString]);
-              return;
-            }
-
-            regionStrings.push("start superscript");
-            buildA11yStrings(sup, regionStrings, atomType);
-            regionStrings.push("end superscript");
-          });
-        }
-
-        break;
-      }
-
-    case "text":
-      {
-        // TODO: handle other fonts
-        if (tree.font === "\\textbf") {
-          buildRegion(a11yStrings, function (regionStrings) {
-            regionStrings.push("start bold text");
-            buildA11yStrings(tree.body, regionStrings, atomType);
-            regionStrings.push("end bold text");
-          });
-          break;
-        }
-
-        buildRegion(a11yStrings, function (regionStrings) {
-          regionStrings.push("start text");
-          buildA11yStrings(tree.body, regionStrings, atomType);
-          regionStrings.push("end text");
-        });
-        break;
-      }
-
-    case "textord":
-      {
-        buildString(tree.text, atomType, a11yStrings);
-        break;
-      }
-
-    case "smash":
-      {
-        buildA11yStrings(tree.body, a11yStrings, atomType);
-        break;
-      }
-
-    case "enclose":
-      {
-        // TODO: create a map for these.
-        // TODO: differentiate between a body with a single atom, e.g.
-        // "cancel a" instead of "start cancel, a, end cancel"
-        if (/cancel/.test(tree.label)) {
-          buildRegion(a11yStrings, function (regionStrings) {
-            regionStrings.push("start cancel");
-            buildA11yStrings(tree.body, regionStrings, atomType);
-            regionStrings.push("end cancel");
-          });
-          break;
-        } else if (/box/.test(tree.label)) {
-          buildRegion(a11yStrings, function (regionStrings) {
-            regionStrings.push("start box");
-            buildA11yStrings(tree.body, regionStrings, atomType);
-            regionStrings.push("end box");
-          });
-          break;
-        } else if (/sout/.test(tree.label)) {
-          buildRegion(a11yStrings, function (regionStrings) {
-            regionStrings.push("start strikeout");
-            buildA11yStrings(tree.body, regionStrings, atomType);
-            regionStrings.push("end strikeout");
-          });
-          break;
-        }
-
-        throw new Error("KaTeX-a11y: enclose node with " + tree.label + " not supported yet");
-      }
-
-    case "vphantom":
-      {
-        throw new Error("KaTeX-a11y: vphantom not implemented yet");
-      }
-
-    case "hphantom":
-      {
-        throw new Error("KaTeX-a11y: hphantom not implemented yet");
-      }
-
-    case "operatorname":
-      {
-        buildA11yStrings(tree.body, a11yStrings, atomType);
-        break;
-      }
-
-    case "array":
-      {
-        throw new Error("KaTeX-a11y: array not implemented yet");
-      }
-
-    case "raw":
-      {
-        throw new Error("KaTeX-a11y: raw not implemented yet");
-      }
-
-    case "size":
-      {
-        // Although there are nodes of type "size" in the parse tree, they have
-        // no semantic meaning and should be ignored.
-        break;
-      }
-
-    case "url":
-      {
-        throw new Error("KaTeX-a11y: url not implemented yet");
-      }
-
-    case "tag":
-      {
-        throw new Error("KaTeX-a11y: tag not implemented yet");
-      }
-
-    case "verb":
-      {
-        buildString("start verbatim", "normal", a11yStrings);
-        buildString(tree.body, "normal", a11yStrings);
-        buildString("end verbatim", "normal", a11yStrings);
-        break;
-      }
-
-    case "environment":
-      {
-        throw new Error("KaTeX-a11y: environment not implemented yet");
-      }
-
-    case "horizBrace":
-      {
-        buildString("start " + tree.label.slice(1), "normal", a11yStrings);
-        buildA11yStrings(tree.base, a11yStrings, atomType);
-        buildString("end " + tree.label.slice(1), "normal", a11yStrings);
-        break;
-      }
-
-    case "infix":
-      {
-        // All infix nodes are replace with other nodes.
-        break;
-      }
-
-    case "includegraphics":
-      {
-        throw new Error("KaTeX-a11y: includegraphics not implemented yet");
-      }
-
-    case "font":
-      {
-        // TODO: callout the start/end of specific fonts
-        // TODO: map \BBb{N} to "the naturals" or something like that
-        buildA11yStrings(tree.body, a11yStrings, atomType);
-        break;
-      }
-
-    case "href":
-      {
-        throw new Error("KaTeX-a11y: href not implemented yet");
-      }
-
-    case "cr":
-      {
-        // This is used by environments.
-        throw new Error("KaTeX-a11y: cr not implemented yet");
-      }
-
-    case "underline":
-      {
-        buildRegion(a11yStrings, function (a11yStrings) {
-          a11yStrings.push("start underline");
-          buildA11yStrings(tree.body, a11yStrings, atomType);
-          a11yStrings.push("end underline");
-        });
-        break;
-      }
-
-    case "xArrow":
-      {
-        throw new Error("KaTeX-a11y: xArrow not implemented yet");
-      }
-
-    case "mclass":
-      {
-        // \neq and \ne are macros so we let "htmlmathml" render the mathmal
-        // side of things and extract the text from that.
-        var _atomType = tree.mclass.slice(1); // $FlowFixMe: drop the leading "m" from the values in mclass
-
-
-        buildA11yStrings(tree.body, a11yStrings, _atomType);
-        break;
-      }
-
-    case "mathchoice":
-      {
-        // TODO: track which which style we're using, e.g. dispaly, text, etc.
-        // default to text style if even that may not be the correct style
-        buildA11yStrings(tree.text, a11yStrings, atomType);
-        break;
-      }
-
-    case "htmlmathml":
-      {
-        buildA11yStrings(tree.mathml, a11yStrings, atomType);
-        break;
-      }
-
-    case "middle":
-      {
-        buildString(tree.delim, atomType, a11yStrings);
-        break;
-      }
-
-    default:
-      tree.type;
-      throw new Error("KaTeX a11y un-recognized type: " + tree.type);
-  }
-};
-
-var buildA11yStrings = function buildA11yStrings(tree, a11yStrings, atomType) {
-  if (a11yStrings === void 0) {
-    a11yStrings = [];
-  }
-
-  if (tree instanceof Array) {
-    for (var i = 0; i < tree.length; i++) {
-      buildA11yStrings(tree[i], a11yStrings, atomType);
-    }
-  } else {
-    handleObject(tree, a11yStrings, atomType);
-  }
-
-  return a11yStrings;
-};
-
-var flatten = function flatten(array) {
-  var result = [];
-  array.forEach(function (item) {
-    if (item instanceof Array) {
-      result = result.concat(flatten(item));
-    } else {
-      result.push(item);
-    }
-  });
-  return result;
-};
-
-var renderA11yString = function renderA11yString(text, settings) {
-  var tree = katex__WEBPACK_IMPORTED_MODULE_0___default.a.__parse(text, settings);
-
-  var a11yStrings = buildA11yStrings(tree, [], "normal");
-  return flatten(a11yStrings).join(", ");
-};
-
-/* harmony default export */ __webpack_exports__["default"] = (renderA11yString);
-
-/***/ })
-/******/ ])["default"];
-});
\ No newline at end of file
diff --git a/registry/vulkan/katex/contrib/render-a11y-string.min.js b/registry/vulkan/katex/contrib/render-a11y-string.min.js
deleted file mode 100644
index 0dcac27..0000000
--- a/registry/vulkan/katex/contrib/render-a11y-string.min.js
+++ /dev/null
@@ -1 +0,0 @@
-!function(e,r){if("object"==typeof exports&&"object"==typeof module)module.exports=r(require("katex"));else if("function"==typeof define&&define.amd)define(["katex"],r);else{var t="object"==typeof exports?r(require("katex")):r(e.katex);for(var a in t)("object"==typeof exports?exports:e)[a]=t[a]}}("undefined"!=typeof self?self:this,function(e){return function(e){var r={};function t(a){if(r[a])return r[a].exports;var o=r[a]={i:a,l:!1,exports:{}};return e[a].call(o.exports,o,o.exports,t),o.l=!0,o.exports}return t.m=e,t.c=r,t.d=function(e,r,a){t.o(e,r)||Object.defineProperty(e,r,{enumerable:!0,get:a})},t.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},t.t=function(e,r){if(1&r&&(e=t(e)),8&r)return e;if(4&r&&"object"==typeof e&&e&&e.__esModule)return e;var a=Object.create(null);if(t.r(a),Object.defineProperty(a,"default",{enumerable:!0,value:e}),2&r&&"string"!=typeof e)for(var o in e)t.d(a,o,function(r){return e[r]}.bind(null,o));return a},t.n=function(e){var r=e&&e.__esModule?function(){return e.default}:function(){return e};return t.d(r,"a",r),r},t.o=function(e,r){return Object.prototype.hasOwnProperty.call(e,r)},t.p="",t(t.s=1)}([function(r,t){r.exports=e},function(e,r,t){"use strict";t.r(r);var a=t(0),o=t.n(a),n={"(":"left parenthesis",")":"right parenthesis","[":"open bracket","]":"close bracket","\\{":"left brace","\\}":"right brace","\\lvert":"open vertical bar","\\rvert":"close vertical bar","|":"vertical bar","\\uparrow":"up arrow","\\Uparrow":"up arrow","\\downarrow":"down arrow","\\Downarrow":"down arrow","\\updownarrow":"up down arrow","\\leftarrow":"left arrow","\\Leftarrow":"left arrow","\\rightarrow":"right arrow","\\Rightarrow":"right arrow","\\langle":"open angle","\\rangle":"close angle","\\lfloor":"open floor","\\rfloor":"close floor","\\int":"integral","\\intop":"integral","\\lim":"limit","\\ln":"natural log","\\log":"log","\\sin":"sine","\\cos":"cosine","\\tan":"tangent","\\cot":"cotangent","\\sum":"sum","/":"slash",",":"comma",".":"point","-":"negative","+":"plus","~":"tilde",":":"colon","?":"question mark","'":"apostrophe","\\%":"percent"," ":"space","\\ ":"space","\\$":"dollar sign","\\angle":"angle","\\degree":"degree","\\circ":"circle","\\vec":"vector","\\triangle":"triangle","\\pi":"pi","\\prime":"prime","\\infty":"infinity","\\alpha":"alpha","\\beta":"beta","\\gamma":"gamma","\\omega":"omega","\\theta":"theta","\\sigma":"sigma","\\lambda":"lambda","\\tau":"tau","\\Delta":"delta","\\delta":"delta","\\mu":"mu","\\rho":"rho","\\nabla":"del","\\ell":"ell","\\ldots":"dots","\\hat":"hat","\\acute":"acute"},s={prime:"prime",degree:"degrees",circle:"degrees",2:"squared",3:"cubed"},i={"|":"open vertical bar",".":""},l={"|":"close vertical bar",".":""},c={"+":"plus","-":"minus","\\pm":"plus minus","\\cdot":"dot","*":"times","/":"divided by","\\times":"times","\\div":"divided by","\\circ":"circle","\\bullet":"bullet"},u={"=":"equals","\\approx":"approximately equals","\u2260":"does not equal","\\geq":"is greater than or equal to","\\ge":"is greater than or equal to","\\leq":"is less than or equal to","\\le":"is less than or equal to",">":"is greater than","<":"is less than","\\leftarrow":"left arrow","\\Leftarrow":"left arrow","\\rightarrow":"right arrow","\\Rightarrow":"right arrow",":":"colon"},p={"\\underleftarrow":"left arrow","\\underrightarrow":"right arrow","\\underleftrightarrow":"left-right arrow","\\undergroup":"group","\\underlinesegment":"line segment","\\utilde":"tilde"},d=function(e,r,t){var a;e&&(/^\d+$/.test(a="open"===r?e in i?i[e]:n[e]||e:"close"===r?e in l?l[e]:n[e]||e:"bin"===r?c[e]||e:"rel"===r?u[e]||e:n[e]||e)&&t.length>0&&/^\d+$/.test(t[t.length-1])?t[t.length-1]+=a:a&&t.push(a))},b=function(e,r){var t=[];e.push(t),r(t)},h=function(e,r,t){switch(e.type){case"accent":b(r,function(r){f(e.base,r,t),r.push("with"),d(e.label,"normal",r),r.push("on top")});break;case"accentUnder":b(r,function(r){f(e.base,r,t),r.push("with"),d(p[e.label],"normal",r),r.push("underneath")});break;case"accent-token":break;case"atom":var a=e.text;switch(e.family){case"bin":d(a,"bin",r);break;case"close":d(a,"close",r);break;case"inner":d(e.text,"inner",r);break;case"open":d(a,"open",r);break;case"punct":d(a,"punct",r);break;case"rel":d(a,"rel",r);break;default:throw e.family,new Error('"'+e.family+'" is not a valid atom type')}break;case"color":var o=e.color.replace(/katex-/,"");b(r,function(r){r.push("start color "+o),f(e.body,r,t),r.push("end color "+o)});break;case"color-token":break;case"delimsizing":e.delim&&"."!==e.delim&&d(e.delim,"normal",r);break;case"genfrac":b(r,function(r){var a=e.leftDelim,o=e.rightDelim;e.hasBarLine?(r.push("start fraction"),a&&d(a,"open",r),f(e.numer,r,t),r.push("divided by"),f(e.denom,r,t),o&&d(o,"close",r),r.push("end fraction")):(r.push("start binomial"),a&&d(a,"open",r),f(e.numer,r,t),r.push("over"),f(e.denom,r,t),o&&d(o,"close",r),r.push("end binomial"))});break;case"kern":break;case"leftright":b(r,function(r){d(e.left,"open",r),f(e.body,r,t),d(e.right,"close",r)});break;case"leftright-right":break;case"lap":f(e.body,r,t);break;case"mathord":d(e.text,"normal",r);break;case"op":var n=e.body,i=e.name;n?f(n,r,t):i&&d(i,"normal",r);break;case"op-token":d(e.text,t,r);break;case"ordgroup":f(e.body,r,t);break;case"overline":b(r,function(r){r.push("start overline"),f(e.body,r,t),r.push("end overline")});break;case"phantom":r.push("empty space");break;case"raisebox":f(e.body,r,t);break;case"rule":r.push("rectangle");break;case"sizing":f(e.body,r,t);break;case"spacing":r.push("space");break;case"styling":f(e.body,r,t);break;case"sqrt":b(r,function(r){var a=e.body,o=e.index;if(o)return"3"===m(f(o,[],t)).join(",")?(r.push("cube root of"),f(a,r,t),void r.push("end cube root")):(r.push("root"),r.push("start index"),f(o,r,t),void r.push("end index"));r.push("square root of"),f(a,r,t),r.push("end square root")});break;case"supsub":var l=e.base,c=e.sub,u=e.sup,h=!1;if(l&&(f(l,r,t),h="op"===l.type&&"\\log"===l.name),c){var y=h?"base":"subscript";b(r,function(e){e.push("start "+y),f(c,e,t),e.push("end "+y)})}u&&b(r,function(e){var r=m(f(u,[],t)).join(",");r in s?e.push(s[r]):(e.push("start superscript"),f(u,e,t),e.push("end superscript"))});break;case"text":if("\\textbf"===e.font){b(r,function(r){r.push("start bold text"),f(e.body,r,t),r.push("end bold text")});break}b(r,function(r){r.push("start text"),f(e.body,r,t),r.push("end text")});break;case"textord":d(e.text,t,r);break;case"smash":f(e.body,r,t);break;case"enclose":if(/cancel/.test(e.label)){b(r,function(r){r.push("start cancel"),f(e.body,r,t),r.push("end cancel")});break}if(/box/.test(e.label)){b(r,function(r){r.push("start box"),f(e.body,r,t),r.push("end box")});break}if(/sout/.test(e.label)){b(r,function(r){r.push("start strikeout"),f(e.body,r,t),r.push("end strikeout")});break}throw new Error("KaTeX-a11y: enclose node with "+e.label+" not supported yet");case"vphantom":throw new Error("KaTeX-a11y: vphantom not implemented yet");case"hphantom":throw new Error("KaTeX-a11y: hphantom not implemented yet");case"operatorname":f(e.body,r,t);break;case"array":throw new Error("KaTeX-a11y: array not implemented yet");case"raw":throw new Error("KaTeX-a11y: raw not implemented yet");case"size":break;case"url":throw new Error("KaTeX-a11y: url not implemented yet");case"tag":throw new Error("KaTeX-a11y: tag not implemented yet");case"verb":d("start verbatim","normal",r),d(e.body,"normal",r),d("end verbatim","normal",r);break;case"environment":throw new Error("KaTeX-a11y: environment not implemented yet");case"horizBrace":d("start "+e.label.slice(1),"normal",r),f(e.base,r,t),d("end "+e.label.slice(1),"normal",r);break;case"infix":break;case"includegraphics":throw new Error("KaTeX-a11y: includegraphics not implemented yet");case"font":f(e.body,r,t);break;case"href":throw new Error("KaTeX-a11y: href not implemented yet");case"cr":throw new Error("KaTeX-a11y: cr not implemented yet");case"underline":b(r,function(r){r.push("start underline"),f(e.body,r,t),r.push("end underline")});break;case"xArrow":throw new Error("KaTeX-a11y: xArrow not implemented yet");case"mclass":var g=e.mclass.slice(1);f(e.body,r,g);break;case"mathchoice":f(e.text,r,t);break;case"htmlmathml":f(e.mathml,r,t);break;case"middle":d(e.delim,t,r);break;default:throw e.type,new Error("KaTeX a11y un-recognized type: "+e.type)}},f=function e(r,t,a){if(void 0===t&&(t=[]),r instanceof Array)for(var o=0;o<r.length;o++)e(r[o],t,a);else h(r,t,a);return t},m=function e(r){var t=[];return r.forEach(function(r){r instanceof Array?t=t.concat(e(r)):t.push(r)}),t};r.default=function(e,r){var t=o.a.__parse(e,r),a=f(t,[],"normal");return m(a).join(", ")}}]).default});
\ No newline at end of file
diff --git a/registry/vulkan/katex/contrib/render-a11y-string.mjs b/registry/vulkan/katex/contrib/render-a11y-string.mjs
deleted file mode 100644
index fc63bfc..0000000
--- a/registry/vulkan/katex/contrib/render-a11y-string.mjs
+++ /dev/null
@@ -1,741 +0,0 @@
-import katex from '../katex.mjs';
-
-/**
- * renderA11yString returns a readable string.
- *
- * In some cases the string will have the proper semantic math
- * meaning,:
- *   renderA11yString("\\frac{1}{2}"")
- *   -> "start fraction, 1, divided by, 2, end fraction"
- *
- * However, other cases do not:
- *   renderA11yString("f(x) = x^2")
- *   -> "f, left parenthesis, x, right parenthesis, equals, x, squared"
- *
- * The commas in the string aim to increase ease of understanding
- * when read by a screenreader.
- */
-const stringMap = {
-  "(": "left parenthesis",
-  ")": "right parenthesis",
-  "[": "open bracket",
-  "]": "close bracket",
-  "\\{": "left brace",
-  "\\}": "right brace",
-  "\\lvert": "open vertical bar",
-  "\\rvert": "close vertical bar",
-  "|": "vertical bar",
-  "\\uparrow": "up arrow",
-  "\\Uparrow": "up arrow",
-  "\\downarrow": "down arrow",
-  "\\Downarrow": "down arrow",
-  "\\updownarrow": "up down arrow",
-  "\\leftarrow": "left arrow",
-  "\\Leftarrow": "left arrow",
-  "\\rightarrow": "right arrow",
-  "\\Rightarrow": "right arrow",
-  "\\langle": "open angle",
-  "\\rangle": "close angle",
-  "\\lfloor": "open floor",
-  "\\rfloor": "close floor",
-  "\\int": "integral",
-  "\\intop": "integral",
-  "\\lim": "limit",
-  "\\ln": "natural log",
-  "\\log": "log",
-  "\\sin": "sine",
-  "\\cos": "cosine",
-  "\\tan": "tangent",
-  "\\cot": "cotangent",
-  "\\sum": "sum",
-  "/": "slash",
-  ",": "comma",
-  ".": "point",
-  "-": "negative",
-  "+": "plus",
-  "~": "tilde",
-  ":": "colon",
-  "?": "question mark",
-  "'": "apostrophe",
-  "\\%": "percent",
-  " ": "space",
-  "\\ ": "space",
-  "\\$": "dollar sign",
-  "\\angle": "angle",
-  "\\degree": "degree",
-  "\\circ": "circle",
-  "\\vec": "vector",
-  "\\triangle": "triangle",
-  "\\pi": "pi",
-  "\\prime": "prime",
-  "\\infty": "infinity",
-  "\\alpha": "alpha",
-  "\\beta": "beta",
-  "\\gamma": "gamma",
-  "\\omega": "omega",
-  "\\theta": "theta",
-  "\\sigma": "sigma",
-  "\\lambda": "lambda",
-  "\\tau": "tau",
-  "\\Delta": "delta",
-  "\\delta": "delta",
-  "\\mu": "mu",
-  "\\rho": "rho",
-  "\\nabla": "del",
-  "\\ell": "ell",
-  "\\ldots": "dots",
-  // TODO: add entries for all accents
-  "\\hat": "hat",
-  "\\acute": "acute"
-};
-const powerMap = {
-  "prime": "prime",
-  "degree": "degrees",
-  "circle": "degrees",
-  "2": "squared",
-  "3": "cubed"
-};
-const openMap = {
-  "|": "open vertical bar",
-  ".": ""
-};
-const closeMap = {
-  "|": "close vertical bar",
-  ".": ""
-};
-const binMap = {
-  "+": "plus",
-  "-": "minus",
-  "\\pm": "plus minus",
-  "\\cdot": "dot",
-  "*": "times",
-  "/": "divided by",
-  "\\times": "times",
-  "\\div": "divided by",
-  "\\circ": "circle",
-  "\\bullet": "bullet"
-};
-const relMap = {
-  "=": "equals",
-  "\\approx": "approximately equals",
-  "≠": "does not equal",
-  "\\geq": "is greater than or equal to",
-  "\\ge": "is greater than or equal to",
-  "\\leq": "is less than or equal to",
-  "\\le": "is less than or equal to",
-  ">": "is greater than",
-  "<": "is less than",
-  "\\leftarrow": "left arrow",
-  "\\Leftarrow": "left arrow",
-  "\\rightarrow": "right arrow",
-  "\\Rightarrow": "right arrow",
-  ":": "colon"
-};
-const accentUnderMap = {
-  "\\underleftarrow": "left arrow",
-  "\\underrightarrow": "right arrow",
-  "\\underleftrightarrow": "left-right arrow",
-  "\\undergroup": "group",
-  "\\underlinesegment": "line segment",
-  "\\utilde": "tilde"
-};
-
-const buildString = (str, type, a11yStrings) => {
-  if (!str) {
-    return;
-  }
-
-  let ret;
-
-  if (type === "open") {
-    ret = str in openMap ? openMap[str] : stringMap[str] || str;
-  } else if (type === "close") {
-    ret = str in closeMap ? closeMap[str] : stringMap[str] || str;
-  } else if (type === "bin") {
-    ret = binMap[str] || str;
-  } else if (type === "rel") {
-    ret = relMap[str] || str;
-  } else {
-    ret = stringMap[str] || str;
-  } // If the text to add is a number and there is already a string
-  // in the list and the last string is a number then we should
-  // combine them into a single number
-
-
-  if (/^\d+$/.test(ret) && a11yStrings.length > 0 && // TODO(kevinb): check that the last item in a11yStrings is a string
-  // I think we might be able to drop the nested arrays, which would make
-  // this easier to type - $FlowFixMe
-  /^\d+$/.test(a11yStrings[a11yStrings.length - 1])) {
-    a11yStrings[a11yStrings.length - 1] += ret;
-  } else if (ret) {
-    a11yStrings.push(ret);
-  }
-};
-
-const buildRegion = (a11yStrings, callback) => {
-  const regionStrings = [];
-  a11yStrings.push(regionStrings);
-  callback(regionStrings);
-};
-
-const handleObject = (tree, a11yStrings, atomType) => {
-  // Everything else is assumed to be an object...
-  switch (tree.type) {
-    case "accent":
-      {
-        buildRegion(a11yStrings, a11yStrings => {
-          buildA11yStrings(tree.base, a11yStrings, atomType);
-          a11yStrings.push("with");
-          buildString(tree.label, "normal", a11yStrings);
-          a11yStrings.push("on top");
-        });
-        break;
-      }
-
-    case "accentUnder":
-      {
-        buildRegion(a11yStrings, a11yStrings => {
-          buildA11yStrings(tree.base, a11yStrings, atomType);
-          a11yStrings.push("with");
-          buildString(accentUnderMap[tree.label], "normal", a11yStrings);
-          a11yStrings.push("underneath");
-        });
-        break;
-      }
-
-    case "accent-token":
-      {
-        // Used internally by accent symbols.
-        break;
-      }
-
-    case "atom":
-      {
-        const text = tree.text;
-
-        switch (tree.family) {
-          case "bin":
-            {
-              buildString(text, "bin", a11yStrings);
-              break;
-            }
-
-          case "close":
-            {
-              buildString(text, "close", a11yStrings);
-              break;
-            }
-          // TODO(kevinb): figure out what should be done for inner
-
-          case "inner":
-            {
-              buildString(tree.text, "inner", a11yStrings);
-              break;
-            }
-
-          case "open":
-            {
-              buildString(text, "open", a11yStrings);
-              break;
-            }
-
-          case "punct":
-            {
-              buildString(text, "punct", a11yStrings);
-              break;
-            }
-
-          case "rel":
-            {
-              buildString(text, "rel", a11yStrings);
-              break;
-            }
-
-          default:
-            {
-              tree.family;
-              throw new Error(`"${tree.family}" is not a valid atom type`);
-            }
-        }
-
-        break;
-      }
-
-    case "color":
-      {
-        const color = tree.color.replace(/katex-/, "");
-        buildRegion(a11yStrings, regionStrings => {
-          regionStrings.push("start color " + color);
-          buildA11yStrings(tree.body, regionStrings, atomType);
-          regionStrings.push("end color " + color);
-        });
-        break;
-      }
-
-    case "color-token":
-      {
-        // Used by \color, \colorbox, and \fcolorbox but not directly rendered.
-        // It's a leaf node and has no children so just break.
-        break;
-      }
-
-    case "delimsizing":
-      {
-        if (tree.delim && tree.delim !== ".") {
-          buildString(tree.delim, "normal", a11yStrings);
-        }
-
-        break;
-      }
-
-    case "genfrac":
-      {
-        buildRegion(a11yStrings, regionStrings => {
-          // genfrac can have unbalanced delimiters
-          const leftDelim = tree.leftDelim,
-                rightDelim = tree.rightDelim; // NOTE: Not sure if this is a safe assumption
-          // hasBarLine true -> fraction, false -> binomial
-
-          if (tree.hasBarLine) {
-            regionStrings.push("start fraction");
-            leftDelim && buildString(leftDelim, "open", regionStrings);
-            buildA11yStrings(tree.numer, regionStrings, atomType);
-            regionStrings.push("divided by");
-            buildA11yStrings(tree.denom, regionStrings, atomType);
-            rightDelim && buildString(rightDelim, "close", regionStrings);
-            regionStrings.push("end fraction");
-          } else {
-            regionStrings.push("start binomial");
-            leftDelim && buildString(leftDelim, "open", regionStrings);
-            buildA11yStrings(tree.numer, regionStrings, atomType);
-            regionStrings.push("over");
-            buildA11yStrings(tree.denom, regionStrings, atomType);
-            rightDelim && buildString(rightDelim, "close", regionStrings);
-            regionStrings.push("end binomial");
-          }
-        });
-        break;
-      }
-
-    case "kern":
-      {
-        // No op: we don't attempt to present kerning information
-        // to the screen reader.
-        break;
-      }
-
-    case "leftright":
-      {
-        buildRegion(a11yStrings, regionStrings => {
-          buildString(tree.left, "open", regionStrings);
-          buildA11yStrings(tree.body, regionStrings, atomType);
-          buildString(tree.right, "close", regionStrings);
-        });
-        break;
-      }
-
-    case "leftright-right":
-      {
-        // TODO: double check that this is a no-op
-        break;
-      }
-
-    case "lap":
-      {
-        buildA11yStrings(tree.body, a11yStrings, atomType);
-        break;
-      }
-
-    case "mathord":
-      {
-        buildString(tree.text, "normal", a11yStrings);
-        break;
-      }
-
-    case "op":
-      {
-        const body = tree.body,
-              name = tree.name;
-
-        if (body) {
-          buildA11yStrings(body, a11yStrings, atomType);
-        } else if (name) {
-          buildString(name, "normal", a11yStrings);
-        }
-
-        break;
-      }
-
-    case "op-token":
-      {
-        // Used internally by operator symbols.
-        buildString(tree.text, atomType, a11yStrings);
-        break;
-      }
-
-    case "ordgroup":
-      {
-        buildA11yStrings(tree.body, a11yStrings, atomType);
-        break;
-      }
-
-    case "overline":
-      {
-        buildRegion(a11yStrings, function (a11yStrings) {
-          a11yStrings.push("start overline");
-          buildA11yStrings(tree.body, a11yStrings, atomType);
-          a11yStrings.push("end overline");
-        });
-        break;
-      }
-
-    case "phantom":
-      {
-        a11yStrings.push("empty space");
-        break;
-      }
-
-    case "raisebox":
-      {
-        buildA11yStrings(tree.body, a11yStrings, atomType);
-        break;
-      }
-
-    case "rule":
-      {
-        a11yStrings.push("rectangle");
-        break;
-      }
-
-    case "sizing":
-      {
-        buildA11yStrings(tree.body, a11yStrings, atomType);
-        break;
-      }
-
-    case "spacing":
-      {
-        a11yStrings.push("space");
-        break;
-      }
-
-    case "styling":
-      {
-        // We ignore the styling and just pass through the contents
-        buildA11yStrings(tree.body, a11yStrings, atomType);
-        break;
-      }
-
-    case "sqrt":
-      {
-        buildRegion(a11yStrings, regionStrings => {
-          const body = tree.body,
-                index = tree.index;
-
-          if (index) {
-            const indexString = flatten(buildA11yStrings(index, [], atomType)).join(",");
-
-            if (indexString === "3") {
-              regionStrings.push("cube root of");
-              buildA11yStrings(body, regionStrings, atomType);
-              regionStrings.push("end cube root");
-              return;
-            }
-
-            regionStrings.push("root");
-            regionStrings.push("start index");
-            buildA11yStrings(index, regionStrings, atomType);
-            regionStrings.push("end index");
-            return;
-          }
-
-          regionStrings.push("square root of");
-          buildA11yStrings(body, regionStrings, atomType);
-          regionStrings.push("end square root");
-        });
-        break;
-      }
-
-    case "supsub":
-      {
-        const base = tree.base,
-              sub = tree.sub,
-              sup = tree.sup;
-        let isLog = false;
-
-        if (base) {
-          buildA11yStrings(base, a11yStrings, atomType);
-          isLog = base.type === "op" && base.name === "\\log";
-        }
-
-        if (sub) {
-          const regionName = isLog ? "base" : "subscript";
-          buildRegion(a11yStrings, function (regionStrings) {
-            regionStrings.push(`start ${regionName}`);
-            buildA11yStrings(sub, regionStrings, atomType);
-            regionStrings.push(`end ${regionName}`);
-          });
-        }
-
-        if (sup) {
-          buildRegion(a11yStrings, function (regionStrings) {
-            const supString = flatten(buildA11yStrings(sup, [], atomType)).join(",");
-
-            if (supString in powerMap) {
-              regionStrings.push(powerMap[supString]);
-              return;
-            }
-
-            regionStrings.push("start superscript");
-            buildA11yStrings(sup, regionStrings, atomType);
-            regionStrings.push("end superscript");
-          });
-        }
-
-        break;
-      }
-
-    case "text":
-      {
-        // TODO: handle other fonts
-        if (tree.font === "\\textbf") {
-          buildRegion(a11yStrings, function (regionStrings) {
-            regionStrings.push("start bold text");
-            buildA11yStrings(tree.body, regionStrings, atomType);
-            regionStrings.push("end bold text");
-          });
-          break;
-        }
-
-        buildRegion(a11yStrings, function (regionStrings) {
-          regionStrings.push("start text");
-          buildA11yStrings(tree.body, regionStrings, atomType);
-          regionStrings.push("end text");
-        });
-        break;
-      }
-
-    case "textord":
-      {
-        buildString(tree.text, atomType, a11yStrings);
-        break;
-      }
-
-    case "smash":
-      {
-        buildA11yStrings(tree.body, a11yStrings, atomType);
-        break;
-      }
-
-    case "enclose":
-      {
-        // TODO: create a map for these.
-        // TODO: differentiate between a body with a single atom, e.g.
-        // "cancel a" instead of "start cancel, a, end cancel"
-        if (/cancel/.test(tree.label)) {
-          buildRegion(a11yStrings, function (regionStrings) {
-            regionStrings.push("start cancel");
-            buildA11yStrings(tree.body, regionStrings, atomType);
-            regionStrings.push("end cancel");
-          });
-          break;
-        } else if (/box/.test(tree.label)) {
-          buildRegion(a11yStrings, function (regionStrings) {
-            regionStrings.push("start box");
-            buildA11yStrings(tree.body, regionStrings, atomType);
-            regionStrings.push("end box");
-          });
-          break;
-        } else if (/sout/.test(tree.label)) {
-          buildRegion(a11yStrings, function (regionStrings) {
-            regionStrings.push("start strikeout");
-            buildA11yStrings(tree.body, regionStrings, atomType);
-            regionStrings.push("end strikeout");
-          });
-          break;
-        }
-
-        throw new Error(`KaTeX-a11y: enclose node with ${tree.label} not supported yet`);
-      }
-
-    case "vphantom":
-      {
-        throw new Error("KaTeX-a11y: vphantom not implemented yet");
-      }
-
-    case "hphantom":
-      {
-        throw new Error("KaTeX-a11y: hphantom not implemented yet");
-      }
-
-    case "operatorname":
-      {
-        buildA11yStrings(tree.body, a11yStrings, atomType);
-        break;
-      }
-
-    case "array":
-      {
-        throw new Error("KaTeX-a11y: array not implemented yet");
-      }
-
-    case "raw":
-      {
-        throw new Error("KaTeX-a11y: raw not implemented yet");
-      }
-
-    case "size":
-      {
-        // Although there are nodes of type "size" in the parse tree, they have
-        // no semantic meaning and should be ignored.
-        break;
-      }
-
-    case "url":
-      {
-        throw new Error("KaTeX-a11y: url not implemented yet");
-      }
-
-    case "tag":
-      {
-        throw new Error("KaTeX-a11y: tag not implemented yet");
-      }
-
-    case "verb":
-      {
-        buildString(`start verbatim`, "normal", a11yStrings);
-        buildString(tree.body, "normal", a11yStrings);
-        buildString(`end verbatim`, "normal", a11yStrings);
-        break;
-      }
-
-    case "environment":
-      {
-        throw new Error("KaTeX-a11y: environment not implemented yet");
-      }
-
-    case "horizBrace":
-      {
-        buildString(`start ${tree.label.slice(1)}`, "normal", a11yStrings);
-        buildA11yStrings(tree.base, a11yStrings, atomType);
-        buildString(`end ${tree.label.slice(1)}`, "normal", a11yStrings);
-        break;
-      }
-
-    case "infix":
-      {
-        // All infix nodes are replace with other nodes.
-        break;
-      }
-
-    case "includegraphics":
-      {
-        throw new Error("KaTeX-a11y: includegraphics not implemented yet");
-      }
-
-    case "font":
-      {
-        // TODO: callout the start/end of specific fonts
-        // TODO: map \BBb{N} to "the naturals" or something like that
-        buildA11yStrings(tree.body, a11yStrings, atomType);
-        break;
-      }
-
-    case "href":
-      {
-        throw new Error("KaTeX-a11y: href not implemented yet");
-      }
-
-    case "cr":
-      {
-        // This is used by environments.
-        throw new Error("KaTeX-a11y: cr not implemented yet");
-      }
-
-    case "underline":
-      {
-        buildRegion(a11yStrings, function (a11yStrings) {
-          a11yStrings.push("start underline");
-          buildA11yStrings(tree.body, a11yStrings, atomType);
-          a11yStrings.push("end underline");
-        });
-        break;
-      }
-
-    case "xArrow":
-      {
-        throw new Error("KaTeX-a11y: xArrow not implemented yet");
-      }
-
-    case "mclass":
-      {
-        // \neq and \ne are macros so we let "htmlmathml" render the mathmal
-        // side of things and extract the text from that.
-        const atomType = tree.mclass.slice(1); // $FlowFixMe: drop the leading "m" from the values in mclass
-
-        buildA11yStrings(tree.body, a11yStrings, atomType);
-        break;
-      }
-
-    case "mathchoice":
-      {
-        // TODO: track which which style we're using, e.g. dispaly, text, etc.
-        // default to text style if even that may not be the correct style
-        buildA11yStrings(tree.text, a11yStrings, atomType);
-        break;
-      }
-
-    case "htmlmathml":
-      {
-        buildA11yStrings(tree.mathml, a11yStrings, atomType);
-        break;
-      }
-
-    case "middle":
-      {
-        buildString(tree.delim, atomType, a11yStrings);
-        break;
-      }
-
-    default:
-      tree.type;
-      throw new Error("KaTeX a11y un-recognized type: " + tree.type);
-  }
-};
-
-const buildA11yStrings = function buildA11yStrings(tree, a11yStrings, atomType) {
-  if (a11yStrings === void 0) {
-    a11yStrings = [];
-  }
-
-  if (tree instanceof Array) {
-    for (let i = 0; i < tree.length; i++) {
-      buildA11yStrings(tree[i], a11yStrings, atomType);
-    }
-  } else {
-    handleObject(tree, a11yStrings, atomType);
-  }
-
-  return a11yStrings;
-};
-
-const flatten = function flatten(array) {
-  let result = [];
-  array.forEach(function (item) {
-    if (item instanceof Array) {
-      result = result.concat(flatten(item));
-    } else {
-      result.push(item);
-    }
-  });
-  return result;
-};
-
-const renderA11yString = function renderA11yString(text, settings) {
-  const tree = katex.__parse(text, settings);
-
-  const a11yStrings = buildA11yStrings(tree, [], "normal");
-  return flatten(a11yStrings).join(", ");
-};
-
-export default renderA11yString;
diff --git a/registry/vulkan/katex/fonts/KaTeX_AMS-Regular.ttf b/registry/vulkan/katex/fonts/KaTeX_AMS-Regular.ttf
deleted file mode 100644
index afcd2eb..0000000
--- a/registry/vulkan/katex/fonts/KaTeX_AMS-Regular.ttf
+++ /dev/null
Binary files differ
diff --git a/registry/vulkan/katex/fonts/KaTeX_AMS-Regular.woff b/registry/vulkan/katex/fonts/KaTeX_AMS-Regular.woff
deleted file mode 100644
index 4f57515..0000000
--- a/registry/vulkan/katex/fonts/KaTeX_AMS-Regular.woff
+++ /dev/null
Binary files differ
diff --git a/registry/vulkan/katex/fonts/KaTeX_AMS-Regular.woff2 b/registry/vulkan/katex/fonts/KaTeX_AMS-Regular.woff2
deleted file mode 100644
index b982d6e..0000000
--- a/registry/vulkan/katex/fonts/KaTeX_AMS-Regular.woff2
+++ /dev/null
Binary files differ
diff --git a/registry/vulkan/katex/fonts/KaTeX_Caligraphic-Bold.ttf b/registry/vulkan/katex/fonts/KaTeX_Caligraphic-Bold.ttf
deleted file mode 100644
index f84148d..0000000
--- a/registry/vulkan/katex/fonts/KaTeX_Caligraphic-Bold.ttf
+++ /dev/null
Binary files differ
diff --git a/registry/vulkan/katex/fonts/KaTeX_Caligraphic-Bold.woff b/registry/vulkan/katex/fonts/KaTeX_Caligraphic-Bold.woff
deleted file mode 100644
index ab56ab7..0000000
--- a/registry/vulkan/katex/fonts/KaTeX_Caligraphic-Bold.woff
+++ /dev/null
Binary files differ
diff --git a/registry/vulkan/katex/fonts/KaTeX_Caligraphic-Bold.woff2 b/registry/vulkan/katex/fonts/KaTeX_Caligraphic-Bold.woff2
deleted file mode 100644
index 710c261..0000000
--- a/registry/vulkan/katex/fonts/KaTeX_Caligraphic-Bold.woff2
+++ /dev/null
Binary files differ
diff --git a/registry/vulkan/katex/fonts/KaTeX_Caligraphic-Regular.ttf b/registry/vulkan/katex/fonts/KaTeX_Caligraphic-Regular.ttf
deleted file mode 100644
index 97814db..0000000
--- a/registry/vulkan/katex/fonts/KaTeX_Caligraphic-Regular.ttf
+++ /dev/null
Binary files differ
diff --git a/registry/vulkan/katex/fonts/KaTeX_Caligraphic-Regular.woff b/registry/vulkan/katex/fonts/KaTeX_Caligraphic-Regular.woff
deleted file mode 100644
index aec8a33..0000000
--- a/registry/vulkan/katex/fonts/KaTeX_Caligraphic-Regular.woff
+++ /dev/null
Binary files differ
diff --git a/registry/vulkan/katex/fonts/KaTeX_Caligraphic-Regular.woff2 b/registry/vulkan/katex/fonts/KaTeX_Caligraphic-Regular.woff2
deleted file mode 100644
index ee5193d..0000000
--- a/registry/vulkan/katex/fonts/KaTeX_Caligraphic-Regular.woff2
+++ /dev/null
Binary files differ
diff --git a/registry/vulkan/katex/fonts/KaTeX_Fraktur-Bold.ttf b/registry/vulkan/katex/fonts/KaTeX_Fraktur-Bold.ttf
deleted file mode 100644
index 483a7cd..0000000
--- a/registry/vulkan/katex/fonts/KaTeX_Fraktur-Bold.ttf
+++ /dev/null
Binary files differ
diff --git a/registry/vulkan/katex/fonts/KaTeX_Fraktur-Bold.woff b/registry/vulkan/katex/fonts/KaTeX_Fraktur-Bold.woff
deleted file mode 100644
index 189fea5..0000000
--- a/registry/vulkan/katex/fonts/KaTeX_Fraktur-Bold.woff
+++ /dev/null
Binary files differ
diff --git a/registry/vulkan/katex/fonts/KaTeX_Fraktur-Bold.woff2 b/registry/vulkan/katex/fonts/KaTeX_Fraktur-Bold.woff2
deleted file mode 100644
index dc3bd4c..0000000
--- a/registry/vulkan/katex/fonts/KaTeX_Fraktur-Bold.woff2
+++ /dev/null
Binary files differ
diff --git a/registry/vulkan/katex/fonts/KaTeX_Fraktur-Regular.ttf b/registry/vulkan/katex/fonts/KaTeX_Fraktur-Regular.ttf
deleted file mode 100644
index 9aa5f67..0000000
--- a/registry/vulkan/katex/fonts/KaTeX_Fraktur-Regular.ttf
+++ /dev/null
Binary files differ
diff --git a/registry/vulkan/katex/fonts/KaTeX_Fraktur-Regular.woff b/registry/vulkan/katex/fonts/KaTeX_Fraktur-Regular.woff
deleted file mode 100644
index d01450e..0000000
--- a/registry/vulkan/katex/fonts/KaTeX_Fraktur-Regular.woff
+++ /dev/null
Binary files differ
diff --git a/registry/vulkan/katex/fonts/KaTeX_Fraktur-Regular.woff2 b/registry/vulkan/katex/fonts/KaTeX_Fraktur-Regular.woff2
deleted file mode 100644
index 7eeba37..0000000
--- a/registry/vulkan/katex/fonts/KaTeX_Fraktur-Regular.woff2
+++ /dev/null
Binary files differ
diff --git a/registry/vulkan/katex/fonts/KaTeX_Main-Bold.ttf b/registry/vulkan/katex/fonts/KaTeX_Main-Bold.ttf
deleted file mode 100644
index dc0185a..0000000
--- a/registry/vulkan/katex/fonts/KaTeX_Main-Bold.ttf
+++ /dev/null
Binary files differ
diff --git a/registry/vulkan/katex/fonts/KaTeX_Main-Bold.woff b/registry/vulkan/katex/fonts/KaTeX_Main-Bold.woff
deleted file mode 100644
index acf48e6..0000000
--- a/registry/vulkan/katex/fonts/KaTeX_Main-Bold.woff
+++ /dev/null
Binary files differ
diff --git a/registry/vulkan/katex/fonts/KaTeX_Main-Bold.woff2 b/registry/vulkan/katex/fonts/KaTeX_Main-Bold.woff2
deleted file mode 100644
index cf5abab..0000000
--- a/registry/vulkan/katex/fonts/KaTeX_Main-Bold.woff2
+++ /dev/null
Binary files differ
diff --git a/registry/vulkan/katex/fonts/KaTeX_Main-BoldItalic.ttf b/registry/vulkan/katex/fonts/KaTeX_Main-BoldItalic.ttf
deleted file mode 100644
index 4346f17..0000000
--- a/registry/vulkan/katex/fonts/KaTeX_Main-BoldItalic.ttf
+++ /dev/null
Binary files differ
diff --git a/registry/vulkan/katex/fonts/KaTeX_Main-BoldItalic.woff b/registry/vulkan/katex/fonts/KaTeX_Main-BoldItalic.woff
deleted file mode 100644
index d2cfe4e..0000000
--- a/registry/vulkan/katex/fonts/KaTeX_Main-BoldItalic.woff
+++ /dev/null
Binary files differ
diff --git a/registry/vulkan/katex/fonts/KaTeX_Main-BoldItalic.woff2 b/registry/vulkan/katex/fonts/KaTeX_Main-BoldItalic.woff2
deleted file mode 100644
index d0178f4..0000000
--- a/registry/vulkan/katex/fonts/KaTeX_Main-BoldItalic.woff2
+++ /dev/null
Binary files differ
diff --git a/registry/vulkan/katex/fonts/KaTeX_Main-Italic.ttf b/registry/vulkan/katex/fonts/KaTeX_Main-Italic.ttf
deleted file mode 100644
index f2c3eba..0000000
--- a/registry/vulkan/katex/fonts/KaTeX_Main-Italic.ttf
+++ /dev/null
Binary files differ
diff --git a/registry/vulkan/katex/fonts/KaTeX_Main-Italic.woff b/registry/vulkan/katex/fonts/KaTeX_Main-Italic.woff
deleted file mode 100644
index 1184295..0000000
--- a/registry/vulkan/katex/fonts/KaTeX_Main-Italic.woff
+++ /dev/null
Binary files differ
diff --git a/registry/vulkan/katex/fonts/KaTeX_Main-Italic.woff2 b/registry/vulkan/katex/fonts/KaTeX_Main-Italic.woff2
deleted file mode 100644
index aa05e14..0000000
--- a/registry/vulkan/katex/fonts/KaTeX_Main-Italic.woff2
+++ /dev/null
Binary files differ
diff --git a/registry/vulkan/katex/fonts/KaTeX_Main-Regular.ttf b/registry/vulkan/katex/fonts/KaTeX_Main-Regular.ttf
deleted file mode 100644
index 8acb365..0000000
--- a/registry/vulkan/katex/fonts/KaTeX_Main-Regular.ttf
+++ /dev/null
Binary files differ
diff --git a/registry/vulkan/katex/fonts/KaTeX_Main-Regular.woff b/registry/vulkan/katex/fonts/KaTeX_Main-Regular.woff
deleted file mode 100644
index 9f8228f..0000000
--- a/registry/vulkan/katex/fonts/KaTeX_Main-Regular.woff
+++ /dev/null
Binary files differ
diff --git a/registry/vulkan/katex/fonts/KaTeX_Main-Regular.woff2 b/registry/vulkan/katex/fonts/KaTeX_Main-Regular.woff2
deleted file mode 100644
index e3f71eb..0000000
--- a/registry/vulkan/katex/fonts/KaTeX_Main-Regular.woff2
+++ /dev/null
Binary files differ
diff --git a/registry/vulkan/katex/fonts/KaTeX_Math-BoldItalic.ttf b/registry/vulkan/katex/fonts/KaTeX_Math-BoldItalic.ttf
deleted file mode 100644
index a645df6..0000000
--- a/registry/vulkan/katex/fonts/KaTeX_Math-BoldItalic.ttf
+++ /dev/null
Binary files differ
diff --git a/registry/vulkan/katex/fonts/KaTeX_Math-BoldItalic.woff b/registry/vulkan/katex/fonts/KaTeX_Math-BoldItalic.woff
deleted file mode 100644
index 87d4f22..0000000
--- a/registry/vulkan/katex/fonts/KaTeX_Math-BoldItalic.woff
+++ /dev/null
Binary files differ
diff --git a/registry/vulkan/katex/fonts/KaTeX_Math-BoldItalic.woff2 b/registry/vulkan/katex/fonts/KaTeX_Math-BoldItalic.woff2
deleted file mode 100644
index 83b4996..0000000
--- a/registry/vulkan/katex/fonts/KaTeX_Math-BoldItalic.woff2
+++ /dev/null
Binary files differ
diff --git a/registry/vulkan/katex/fonts/KaTeX_Math-Italic.ttf b/registry/vulkan/katex/fonts/KaTeX_Math-Italic.ttf
deleted file mode 100644
index 9c38359..0000000
--- a/registry/vulkan/katex/fonts/KaTeX_Math-Italic.ttf
+++ /dev/null
Binary files differ
diff --git a/registry/vulkan/katex/fonts/KaTeX_Math-Italic.woff b/registry/vulkan/katex/fonts/KaTeX_Math-Italic.woff
deleted file mode 100644
index 959746e..0000000
--- a/registry/vulkan/katex/fonts/KaTeX_Math-Italic.woff
+++ /dev/null
Binary files differ
diff --git a/registry/vulkan/katex/fonts/KaTeX_Math-Italic.woff2 b/registry/vulkan/katex/fonts/KaTeX_Math-Italic.woff2
deleted file mode 100644
index e3ea522..0000000
--- a/registry/vulkan/katex/fonts/KaTeX_Math-Italic.woff2
+++ /dev/null
Binary files differ
diff --git a/registry/vulkan/katex/fonts/KaTeX_SansSerif-Bold.ttf b/registry/vulkan/katex/fonts/KaTeX_SansSerif-Bold.ttf
deleted file mode 100644
index ff10851..0000000
--- a/registry/vulkan/katex/fonts/KaTeX_SansSerif-Bold.ttf
+++ /dev/null
Binary files differ
diff --git a/registry/vulkan/katex/fonts/KaTeX_SansSerif-Bold.woff b/registry/vulkan/katex/fonts/KaTeX_SansSerif-Bold.woff
deleted file mode 100644
index f0d6ea7..0000000
--- a/registry/vulkan/katex/fonts/KaTeX_SansSerif-Bold.woff
+++ /dev/null
Binary files differ
diff --git a/registry/vulkan/katex/fonts/KaTeX_SansSerif-Bold.woff2 b/registry/vulkan/katex/fonts/KaTeX_SansSerif-Bold.woff2
deleted file mode 100644
index 4cf8f14..0000000
--- a/registry/vulkan/katex/fonts/KaTeX_SansSerif-Bold.woff2
+++ /dev/null
Binary files differ
diff --git a/registry/vulkan/katex/fonts/KaTeX_SansSerif-Italic.ttf b/registry/vulkan/katex/fonts/KaTeX_SansSerif-Italic.ttf
deleted file mode 100644
index 3dd7671..0000000
--- a/registry/vulkan/katex/fonts/KaTeX_SansSerif-Italic.ttf
+++ /dev/null
Binary files differ
diff --git a/registry/vulkan/katex/fonts/KaTeX_SansSerif-Italic.woff b/registry/vulkan/katex/fonts/KaTeX_SansSerif-Italic.woff
deleted file mode 100644
index 9da0dfe..0000000
--- a/registry/vulkan/katex/fonts/KaTeX_SansSerif-Italic.woff
+++ /dev/null
Binary files differ
diff --git a/registry/vulkan/katex/fonts/KaTeX_SansSerif-Italic.woff2 b/registry/vulkan/katex/fonts/KaTeX_SansSerif-Italic.woff2
deleted file mode 100644
index ce19ae0..0000000
--- a/registry/vulkan/katex/fonts/KaTeX_SansSerif-Italic.woff2
+++ /dev/null
Binary files differ
diff --git a/registry/vulkan/katex/fonts/KaTeX_SansSerif-Regular.ttf b/registry/vulkan/katex/fonts/KaTeX_SansSerif-Regular.ttf
deleted file mode 100644
index f117cd6..0000000
--- a/registry/vulkan/katex/fonts/KaTeX_SansSerif-Regular.ttf
+++ /dev/null
Binary files differ
diff --git a/registry/vulkan/katex/fonts/KaTeX_SansSerif-Regular.woff b/registry/vulkan/katex/fonts/KaTeX_SansSerif-Regular.woff
deleted file mode 100644
index 6ed9878..0000000
--- a/registry/vulkan/katex/fonts/KaTeX_SansSerif-Regular.woff
+++ /dev/null
Binary files differ
diff --git a/registry/vulkan/katex/fonts/KaTeX_SansSerif-Regular.woff2 b/registry/vulkan/katex/fonts/KaTeX_SansSerif-Regular.woff2
deleted file mode 100644
index 2761149..0000000
--- a/registry/vulkan/katex/fonts/KaTeX_SansSerif-Regular.woff2
+++ /dev/null
Binary files differ
diff --git a/registry/vulkan/katex/fonts/KaTeX_Script-Regular.ttf b/registry/vulkan/katex/fonts/KaTeX_Script-Regular.ttf
deleted file mode 100644
index e6f3454..0000000
--- a/registry/vulkan/katex/fonts/KaTeX_Script-Regular.ttf
+++ /dev/null
Binary files differ
diff --git a/registry/vulkan/katex/fonts/KaTeX_Script-Regular.woff b/registry/vulkan/katex/fonts/KaTeX_Script-Regular.woff
deleted file mode 100644
index 4a48e65..0000000
--- a/registry/vulkan/katex/fonts/KaTeX_Script-Regular.woff
+++ /dev/null
Binary files differ
diff --git a/registry/vulkan/katex/fonts/KaTeX_Script-Regular.woff2 b/registry/vulkan/katex/fonts/KaTeX_Script-Regular.woff2
deleted file mode 100644
index b0aed19..0000000
--- a/registry/vulkan/katex/fonts/KaTeX_Script-Regular.woff2
+++ /dev/null
Binary files differ
diff --git a/registry/vulkan/katex/fonts/KaTeX_Size1-Regular.ttf b/registry/vulkan/katex/fonts/KaTeX_Size1-Regular.ttf
deleted file mode 100644
index 37faa0f..0000000
--- a/registry/vulkan/katex/fonts/KaTeX_Size1-Regular.ttf
+++ /dev/null
Binary files differ
diff --git a/registry/vulkan/katex/fonts/KaTeX_Size1-Regular.woff b/registry/vulkan/katex/fonts/KaTeX_Size1-Regular.woff
deleted file mode 100644
index 0832f7a..0000000
--- a/registry/vulkan/katex/fonts/KaTeX_Size1-Regular.woff
+++ /dev/null
Binary files differ
diff --git a/registry/vulkan/katex/fonts/KaTeX_Size1-Regular.woff2 b/registry/vulkan/katex/fonts/KaTeX_Size1-Regular.woff2
deleted file mode 100644
index 483e7b6..0000000
--- a/registry/vulkan/katex/fonts/KaTeX_Size1-Regular.woff2
+++ /dev/null
Binary files differ
diff --git a/registry/vulkan/katex/fonts/KaTeX_Size2-Regular.ttf b/registry/vulkan/katex/fonts/KaTeX_Size2-Regular.ttf
deleted file mode 100644
index cf32623..0000000
--- a/registry/vulkan/katex/fonts/KaTeX_Size2-Regular.ttf
+++ /dev/null
Binary files differ
diff --git a/registry/vulkan/katex/fonts/KaTeX_Size2-Regular.woff b/registry/vulkan/katex/fonts/KaTeX_Size2-Regular.woff
deleted file mode 100644
index 14f6485..0000000
--- a/registry/vulkan/katex/fonts/KaTeX_Size2-Regular.woff
+++ /dev/null
Binary files differ
diff --git a/registry/vulkan/katex/fonts/KaTeX_Size2-Regular.woff2 b/registry/vulkan/katex/fonts/KaTeX_Size2-Regular.woff2
deleted file mode 100644
index 5ff7060..0000000
--- a/registry/vulkan/katex/fonts/KaTeX_Size2-Regular.woff2
+++ /dev/null
Binary files differ
diff --git a/registry/vulkan/katex/fonts/KaTeX_Size3-Regular.ttf b/registry/vulkan/katex/fonts/KaTeX_Size3-Regular.ttf
deleted file mode 100644
index ff7e2b9..0000000
--- a/registry/vulkan/katex/fonts/KaTeX_Size3-Regular.ttf
+++ /dev/null
Binary files differ
diff --git a/registry/vulkan/katex/fonts/KaTeX_Size3-Regular.woff b/registry/vulkan/katex/fonts/KaTeX_Size3-Regular.woff
deleted file mode 100644
index d3626ce..0000000
--- a/registry/vulkan/katex/fonts/KaTeX_Size3-Regular.woff
+++ /dev/null
Binary files differ
diff --git a/registry/vulkan/katex/fonts/KaTeX_Size3-Regular.woff2 b/registry/vulkan/katex/fonts/KaTeX_Size3-Regular.woff2
deleted file mode 100644
index e45ca49..0000000
--- a/registry/vulkan/katex/fonts/KaTeX_Size3-Regular.woff2
+++ /dev/null
Binary files differ
diff --git a/registry/vulkan/katex/fonts/KaTeX_Size4-Regular.ttf b/registry/vulkan/katex/fonts/KaTeX_Size4-Regular.ttf
deleted file mode 100644
index 3034091..0000000
--- a/registry/vulkan/katex/fonts/KaTeX_Size4-Regular.ttf
+++ /dev/null
Binary files differ
diff --git a/registry/vulkan/katex/fonts/KaTeX_Size4-Regular.woff b/registry/vulkan/katex/fonts/KaTeX_Size4-Regular.woff
deleted file mode 100644
index 93c57a6..0000000
--- a/registry/vulkan/katex/fonts/KaTeX_Size4-Regular.woff
+++ /dev/null
Binary files differ
diff --git a/registry/vulkan/katex/fonts/KaTeX_Size4-Regular.woff2 b/registry/vulkan/katex/fonts/KaTeX_Size4-Regular.woff2
deleted file mode 100644
index 53b65af..0000000
--- a/registry/vulkan/katex/fonts/KaTeX_Size4-Regular.woff2
+++ /dev/null
Binary files differ
diff --git a/registry/vulkan/katex/fonts/KaTeX_Typewriter-Regular.ttf b/registry/vulkan/katex/fonts/KaTeX_Typewriter-Regular.ttf
deleted file mode 100644
index 2fd8529..0000000
--- a/registry/vulkan/katex/fonts/KaTeX_Typewriter-Regular.ttf
+++ /dev/null
Binary files differ
diff --git a/registry/vulkan/katex/fonts/KaTeX_Typewriter-Regular.woff b/registry/vulkan/katex/fonts/KaTeX_Typewriter-Regular.woff
deleted file mode 100644
index e90fa2b..0000000
--- a/registry/vulkan/katex/fonts/KaTeX_Typewriter-Regular.woff
+++ /dev/null
Binary files differ
diff --git a/registry/vulkan/katex/fonts/KaTeX_Typewriter-Regular.woff2 b/registry/vulkan/katex/fonts/KaTeX_Typewriter-Regular.woff2
deleted file mode 100644
index e40ab15..0000000
--- a/registry/vulkan/katex/fonts/KaTeX_Typewriter-Regular.woff2
+++ /dev/null
Binary files differ
diff --git a/registry/vulkan/katex/katex.css b/registry/vulkan/katex/katex.css
deleted file mode 100644
index 7c97e92..0000000
--- a/registry/vulkan/katex/katex.css
+++ /dev/null
@@ -1,1012 +0,0 @@
-/* stylelint-disable font-family-no-missing-generic-family-keyword */
-@font-face {
-  font-family: 'KaTeX_AMS';
-  src: url(fonts/KaTeX_AMS-Regular.woff2) format('woff2'), url(fonts/KaTeX_AMS-Regular.woff) format('woff'), url(fonts/KaTeX_AMS-Regular.ttf) format('truetype');
-  font-weight: normal;
-  font-style: normal;
-}
-@font-face {
-  font-family: 'KaTeX_Caligraphic';
-  src: url(fonts/KaTeX_Caligraphic-Bold.woff2) format('woff2'), url(fonts/KaTeX_Caligraphic-Bold.woff) format('woff'), url(fonts/KaTeX_Caligraphic-Bold.ttf) format('truetype');
-  font-weight: bold;
-  font-style: normal;
-}
-@font-face {
-  font-family: 'KaTeX_Caligraphic';
-  src: url(fonts/KaTeX_Caligraphic-Regular.woff2) format('woff2'), url(fonts/KaTeX_Caligraphic-Regular.woff) format('woff'), url(fonts/KaTeX_Caligraphic-Regular.ttf) format('truetype');
-  font-weight: normal;
-  font-style: normal;
-}
-@font-face {
-  font-family: 'KaTeX_Fraktur';
-  src: url(fonts/KaTeX_Fraktur-Bold.woff2) format('woff2'), url(fonts/KaTeX_Fraktur-Bold.woff) format('woff'), url(fonts/KaTeX_Fraktur-Bold.ttf) format('truetype');
-  font-weight: bold;
-  font-style: normal;
-}
-@font-face {
-  font-family: 'KaTeX_Fraktur';
-  src: url(fonts/KaTeX_Fraktur-Regular.woff2) format('woff2'), url(fonts/KaTeX_Fraktur-Regular.woff) format('woff'), url(fonts/KaTeX_Fraktur-Regular.ttf) format('truetype');
-  font-weight: normal;
-  font-style: normal;
-}
-@font-face {
-  font-family: 'KaTeX_Main';
-  src: url(fonts/KaTeX_Main-Bold.woff2) format('woff2'), url(fonts/KaTeX_Main-Bold.woff) format('woff'), url(fonts/KaTeX_Main-Bold.ttf) format('truetype');
-  font-weight: bold;
-  font-style: normal;
-}
-@font-face {
-  font-family: 'KaTeX_Main';
-  src: url(fonts/KaTeX_Main-BoldItalic.woff2) format('woff2'), url(fonts/KaTeX_Main-BoldItalic.woff) format('woff'), url(fonts/KaTeX_Main-BoldItalic.ttf) format('truetype');
-  font-weight: bold;
-  font-style: italic;
-}
-@font-face {
-  font-family: 'KaTeX_Main';
-  src: url(fonts/KaTeX_Main-Italic.woff2) format('woff2'), url(fonts/KaTeX_Main-Italic.woff) format('woff'), url(fonts/KaTeX_Main-Italic.ttf) format('truetype');
-  font-weight: normal;
-  font-style: italic;
-}
-@font-face {
-  font-family: 'KaTeX_Main';
-  src: url(fonts/KaTeX_Main-Regular.woff2) format('woff2'), url(fonts/KaTeX_Main-Regular.woff) format('woff'), url(fonts/KaTeX_Main-Regular.ttf) format('truetype');
-  font-weight: normal;
-  font-style: normal;
-}
-@font-face {
-  font-family: 'KaTeX_Math';
-  src: url(fonts/KaTeX_Math-BoldItalic.woff2) format('woff2'), url(fonts/KaTeX_Math-BoldItalic.woff) format('woff'), url(fonts/KaTeX_Math-BoldItalic.ttf) format('truetype');
-  font-weight: bold;
-  font-style: italic;
-}
-@font-face {
-  font-family: 'KaTeX_Math';
-  src: url(fonts/KaTeX_Math-Italic.woff2) format('woff2'), url(fonts/KaTeX_Math-Italic.woff) format('woff'), url(fonts/KaTeX_Math-Italic.ttf) format('truetype');
-  font-weight: normal;
-  font-style: italic;
-}
-@font-face {
-  font-family: 'KaTeX_SansSerif';
-  src: url(fonts/KaTeX_SansSerif-Bold.woff2) format('woff2'), url(fonts/KaTeX_SansSerif-Bold.woff) format('woff'), url(fonts/KaTeX_SansSerif-Bold.ttf) format('truetype');
-  font-weight: bold;
-  font-style: normal;
-}
-@font-face {
-  font-family: 'KaTeX_SansSerif';
-  src: url(fonts/KaTeX_SansSerif-Italic.woff2) format('woff2'), url(fonts/KaTeX_SansSerif-Italic.woff) format('woff'), url(fonts/KaTeX_SansSerif-Italic.ttf) format('truetype');
-  font-weight: normal;
-  font-style: italic;
-}
-@font-face {
-  font-family: 'KaTeX_SansSerif';
-  src: url(fonts/KaTeX_SansSerif-Regular.woff2) format('woff2'), url(fonts/KaTeX_SansSerif-Regular.woff) format('woff'), url(fonts/KaTeX_SansSerif-Regular.ttf) format('truetype');
-  font-weight: normal;
-  font-style: normal;
-}
-@font-face {
-  font-family: 'KaTeX_Script';
-  src: url(fonts/KaTeX_Script-Regular.woff2) format('woff2'), url(fonts/KaTeX_Script-Regular.woff) format('woff'), url(fonts/KaTeX_Script-Regular.ttf) format('truetype');
-  font-weight: normal;
-  font-style: normal;
-}
-@font-face {
-  font-family: 'KaTeX_Size1';
-  src: url(fonts/KaTeX_Size1-Regular.woff2) format('woff2'), url(fonts/KaTeX_Size1-Regular.woff) format('woff'), url(fonts/KaTeX_Size1-Regular.ttf) format('truetype');
-  font-weight: normal;
-  font-style: normal;
-}
-@font-face {
-  font-family: 'KaTeX_Size2';
-  src: url(fonts/KaTeX_Size2-Regular.woff2) format('woff2'), url(fonts/KaTeX_Size2-Regular.woff) format('woff'), url(fonts/KaTeX_Size2-Regular.ttf) format('truetype');
-  font-weight: normal;
-  font-style: normal;
-}
-@font-face {
-  font-family: 'KaTeX_Size3';
-  src: url(fonts/KaTeX_Size3-Regular.woff2) format('woff2'), url(fonts/KaTeX_Size3-Regular.woff) format('woff'), url(fonts/KaTeX_Size3-Regular.ttf) format('truetype');
-  font-weight: normal;
-  font-style: normal;
-}
-@font-face {
-  font-family: 'KaTeX_Size4';
-  src: url(fonts/KaTeX_Size4-Regular.woff2) format('woff2'), url(fonts/KaTeX_Size4-Regular.woff) format('woff'), url(fonts/KaTeX_Size4-Regular.ttf) format('truetype');
-  font-weight: normal;
-  font-style: normal;
-}
-@font-face {
-  font-family: 'KaTeX_Typewriter';
-  src: url(fonts/KaTeX_Typewriter-Regular.woff2) format('woff2'), url(fonts/KaTeX_Typewriter-Regular.woff) format('woff'), url(fonts/KaTeX_Typewriter-Regular.ttf) format('truetype');
-  font-weight: normal;
-  font-style: normal;
-}
-.katex {
-  font: normal 1.21em KaTeX_Main, Times New Roman, serif;
-  line-height: 1.2;
-  text-indent: 0;
-  text-rendering: auto;
-}
-.katex * {
-  -ms-high-contrast-adjust: none !important;
-}
-.katex .katex-version::after {
-  content: "0.11.1";
-}
-.katex .katex-mathml {
-  position: absolute;
-  clip: rect(1px, 1px, 1px, 1px);
-  padding: 0;
-  border: 0;
-  height: 1px;
-  width: 1px;
-  overflow: hidden;
-}
-.katex .katex-html {
-  /* \newline is an empty block at top level, between .base elements */
-}
-.katex .katex-html > .newline {
-  display: block;
-}
-.katex .base {
-  position: relative;
-  display: inline-block;
-  white-space: nowrap;
-  width: min-content;
-}
-.katex .strut {
-  display: inline-block;
-}
-.katex .textbf {
-  font-weight: bold;
-}
-.katex .textit {
-  font-style: italic;
-}
-.katex .textrm {
-  font-family: KaTeX_Main;
-}
-.katex .textsf {
-  font-family: KaTeX_SansSerif;
-}
-.katex .texttt {
-  font-family: KaTeX_Typewriter;
-}
-.katex .mathdefault {
-  font-family: KaTeX_Math;
-  font-style: italic;
-}
-.katex .mathit {
-  font-family: KaTeX_Main;
-  font-style: italic;
-}
-.katex .mathrm {
-  font-style: normal;
-}
-.katex .mathbf {
-  font-family: KaTeX_Main;
-  font-weight: bold;
-}
-.katex .boldsymbol {
-  font-family: KaTeX_Math;
-  font-weight: bold;
-  font-style: italic;
-}
-.katex .amsrm {
-  font-family: KaTeX_AMS;
-}
-.katex .mathbb,
-.katex .textbb {
-  font-family: KaTeX_AMS;
-}
-.katex .mathcal {
-  font-family: KaTeX_Caligraphic;
-}
-.katex .mathfrak,
-.katex .textfrak {
-  font-family: KaTeX_Fraktur;
-}
-.katex .mathtt {
-  font-family: KaTeX_Typewriter;
-}
-.katex .mathscr,
-.katex .textscr {
-  font-family: KaTeX_Script;
-}
-.katex .mathsf,
-.katex .textsf {
-  font-family: KaTeX_SansSerif;
-}
-.katex .mathboldsf,
-.katex .textboldsf {
-  font-family: KaTeX_SansSerif;
-  font-weight: bold;
-}
-.katex .mathitsf,
-.katex .textitsf {
-  font-family: KaTeX_SansSerif;
-  font-style: italic;
-}
-.katex .mainrm {
-  font-family: KaTeX_Main;
-  font-style: normal;
-}
-.katex .vlist-t {
-  display: inline-table;
-  table-layout: fixed;
-}
-.katex .vlist-r {
-  display: table-row;
-}
-.katex .vlist {
-  display: table-cell;
-  vertical-align: bottom;
-  position: relative;
-}
-.katex .vlist > span {
-  display: block;
-  height: 0;
-  position: relative;
-}
-.katex .vlist > span > span {
-  display: inline-block;
-}
-.katex .vlist > span > .pstrut {
-  overflow: hidden;
-  width: 0;
-}
-.katex .vlist-t2 {
-  margin-right: -2px;
-}
-.katex .vlist-s {
-  display: table-cell;
-  vertical-align: bottom;
-  font-size: 1px;
-  width: 2px;
-  min-width: 2px;
-}
-.katex .msupsub {
-  text-align: left;
-}
-.katex .mfrac > span > span {
-  text-align: center;
-}
-.katex .mfrac .frac-line {
-  display: inline-block;
-  width: 100%;
-  border-bottom-style: solid;
-}
-.katex .mfrac .frac-line,
-.katex .overline .overline-line,
-.katex .underline .underline-line,
-.katex .hline,
-.katex .hdashline,
-.katex .rule {
-  min-height: 1px;
-}
-.katex .mspace {
-  display: inline-block;
-}
-.katex .llap,
-.katex .rlap,
-.katex .clap {
-  width: 0;
-  position: relative;
-}
-.katex .llap > .inner,
-.katex .rlap > .inner,
-.katex .clap > .inner {
-  position: absolute;
-}
-.katex .llap > .fix,
-.katex .rlap > .fix,
-.katex .clap > .fix {
-  display: inline-block;
-}
-.katex .llap > .inner {
-  right: 0;
-}
-.katex .rlap > .inner,
-.katex .clap > .inner {
-  left: 0;
-}
-.katex .clap > .inner > span {
-  margin-left: -50%;
-  margin-right: 50%;
-}
-.katex .rule {
-  display: inline-block;
-  border: solid 0;
-  position: relative;
-}
-.katex .overline .overline-line,
-.katex .underline .underline-line,
-.katex .hline {
-  display: inline-block;
-  width: 100%;
-  border-bottom-style: solid;
-}
-.katex .hdashline {
-  display: inline-block;
-  width: 100%;
-  border-bottom-style: dashed;
-}
-.katex .sqrt > .root {
-  margin-left: 0.27777778em;
-  margin-right: -0.55555556em;
-}
-.katex .sizing.reset-size1.size1,
-.katex .fontsize-ensurer.reset-size1.size1 {
-  font-size: 1em;
-}
-.katex .sizing.reset-size1.size2,
-.katex .fontsize-ensurer.reset-size1.size2 {
-  font-size: 1.2em;
-}
-.katex .sizing.reset-size1.size3,
-.katex .fontsize-ensurer.reset-size1.size3 {
-  font-size: 1.4em;
-}
-.katex .sizing.reset-size1.size4,
-.katex .fontsize-ensurer.reset-size1.size4 {
-  font-size: 1.6em;
-}
-.katex .sizing.reset-size1.size5,
-.katex .fontsize-ensurer.reset-size1.size5 {
-  font-size: 1.8em;
-}
-.katex .sizing.reset-size1.size6,
-.katex .fontsize-ensurer.reset-size1.size6 {
-  font-size: 2em;
-}
-.katex .sizing.reset-size1.size7,
-.katex .fontsize-ensurer.reset-size1.size7 {
-  font-size: 2.4em;
-}
-.katex .sizing.reset-size1.size8,
-.katex .fontsize-ensurer.reset-size1.size8 {
-  font-size: 2.88em;
-}
-.katex .sizing.reset-size1.size9,
-.katex .fontsize-ensurer.reset-size1.size9 {
-  font-size: 3.456em;
-}
-.katex .sizing.reset-size1.size10,
-.katex .fontsize-ensurer.reset-size1.size10 {
-  font-size: 4.148em;
-}
-.katex .sizing.reset-size1.size11,
-.katex .fontsize-ensurer.reset-size1.size11 {
-  font-size: 4.976em;
-}
-.katex .sizing.reset-size2.size1,
-.katex .fontsize-ensurer.reset-size2.size1 {
-  font-size: 0.83333333em;
-}
-.katex .sizing.reset-size2.size2,
-.katex .fontsize-ensurer.reset-size2.size2 {
-  font-size: 1em;
-}
-.katex .sizing.reset-size2.size3,
-.katex .fontsize-ensurer.reset-size2.size3 {
-  font-size: 1.16666667em;
-}
-.katex .sizing.reset-size2.size4,
-.katex .fontsize-ensurer.reset-size2.size4 {
-  font-size: 1.33333333em;
-}
-.katex .sizing.reset-size2.size5,
-.katex .fontsize-ensurer.reset-size2.size5 {
-  font-size: 1.5em;
-}
-.katex .sizing.reset-size2.size6,
-.katex .fontsize-ensurer.reset-size2.size6 {
-  font-size: 1.66666667em;
-}
-.katex .sizing.reset-size2.size7,
-.katex .fontsize-ensurer.reset-size2.size7 {
-  font-size: 2em;
-}
-.katex .sizing.reset-size2.size8,
-.katex .fontsize-ensurer.reset-size2.size8 {
-  font-size: 2.4em;
-}
-.katex .sizing.reset-size2.size9,
-.katex .fontsize-ensurer.reset-size2.size9 {
-  font-size: 2.88em;
-}
-.katex .sizing.reset-size2.size10,
-.katex .fontsize-ensurer.reset-size2.size10 {
-  font-size: 3.45666667em;
-}
-.katex .sizing.reset-size2.size11,
-.katex .fontsize-ensurer.reset-size2.size11 {
-  font-size: 4.14666667em;
-}
-.katex .sizing.reset-size3.size1,
-.katex .fontsize-ensurer.reset-size3.size1 {
-  font-size: 0.71428571em;
-}
-.katex .sizing.reset-size3.size2,
-.katex .fontsize-ensurer.reset-size3.size2 {
-  font-size: 0.85714286em;
-}
-.katex .sizing.reset-size3.size3,
-.katex .fontsize-ensurer.reset-size3.size3 {
-  font-size: 1em;
-}
-.katex .sizing.reset-size3.size4,
-.katex .fontsize-ensurer.reset-size3.size4 {
-  font-size: 1.14285714em;
-}
-.katex .sizing.reset-size3.size5,
-.katex .fontsize-ensurer.reset-size3.size5 {
-  font-size: 1.28571429em;
-}
-.katex .sizing.reset-size3.size6,
-.katex .fontsize-ensurer.reset-size3.size6 {
-  font-size: 1.42857143em;
-}
-.katex .sizing.reset-size3.size7,
-.katex .fontsize-ensurer.reset-size3.size7 {
-  font-size: 1.71428571em;
-}
-.katex .sizing.reset-size3.size8,
-.katex .fontsize-ensurer.reset-size3.size8 {
-  font-size: 2.05714286em;
-}
-.katex .sizing.reset-size3.size9,
-.katex .fontsize-ensurer.reset-size3.size9 {
-  font-size: 2.46857143em;
-}
-.katex .sizing.reset-size3.size10,
-.katex .fontsize-ensurer.reset-size3.size10 {
-  font-size: 2.96285714em;
-}
-.katex .sizing.reset-size3.size11,
-.katex .fontsize-ensurer.reset-size3.size11 {
-  font-size: 3.55428571em;
-}
-.katex .sizing.reset-size4.size1,
-.katex .fontsize-ensurer.reset-size4.size1 {
-  font-size: 0.625em;
-}
-.katex .sizing.reset-size4.size2,
-.katex .fontsize-ensurer.reset-size4.size2 {
-  font-size: 0.75em;
-}
-.katex .sizing.reset-size4.size3,
-.katex .fontsize-ensurer.reset-size4.size3 {
-  font-size: 0.875em;
-}
-.katex .sizing.reset-size4.size4,
-.katex .fontsize-ensurer.reset-size4.size4 {
-  font-size: 1em;
-}
-.katex .sizing.reset-size4.size5,
-.katex .fontsize-ensurer.reset-size4.size5 {
-  font-size: 1.125em;
-}
-.katex .sizing.reset-size4.size6,
-.katex .fontsize-ensurer.reset-size4.size6 {
-  font-size: 1.25em;
-}
-.katex .sizing.reset-size4.size7,
-.katex .fontsize-ensurer.reset-size4.size7 {
-  font-size: 1.5em;
-}
-.katex .sizing.reset-size4.size8,
-.katex .fontsize-ensurer.reset-size4.size8 {
-  font-size: 1.8em;
-}
-.katex .sizing.reset-size4.size9,
-.katex .fontsize-ensurer.reset-size4.size9 {
-  font-size: 2.16em;
-}
-.katex .sizing.reset-size4.size10,
-.katex .fontsize-ensurer.reset-size4.size10 {
-  font-size: 2.5925em;
-}
-.katex .sizing.reset-size4.size11,
-.katex .fontsize-ensurer.reset-size4.size11 {
-  font-size: 3.11em;
-}
-.katex .sizing.reset-size5.size1,
-.katex .fontsize-ensurer.reset-size5.size1 {
-  font-size: 0.55555556em;
-}
-.katex .sizing.reset-size5.size2,
-.katex .fontsize-ensurer.reset-size5.size2 {
-  font-size: 0.66666667em;
-}
-.katex .sizing.reset-size5.size3,
-.katex .fontsize-ensurer.reset-size5.size3 {
-  font-size: 0.77777778em;
-}
-.katex .sizing.reset-size5.size4,
-.katex .fontsize-ensurer.reset-size5.size4 {
-  font-size: 0.88888889em;
-}
-.katex .sizing.reset-size5.size5,
-.katex .fontsize-ensurer.reset-size5.size5 {
-  font-size: 1em;
-}
-.katex .sizing.reset-size5.size6,
-.katex .fontsize-ensurer.reset-size5.size6 {
-  font-size: 1.11111111em;
-}
-.katex .sizing.reset-size5.size7,
-.katex .fontsize-ensurer.reset-size5.size7 {
-  font-size: 1.33333333em;
-}
-.katex .sizing.reset-size5.size8,
-.katex .fontsize-ensurer.reset-size5.size8 {
-  font-size: 1.6em;
-}
-.katex .sizing.reset-size5.size9,
-.katex .fontsize-ensurer.reset-size5.size9 {
-  font-size: 1.92em;
-}
-.katex .sizing.reset-size5.size10,
-.katex .fontsize-ensurer.reset-size5.size10 {
-  font-size: 2.30444444em;
-}
-.katex .sizing.reset-size5.size11,
-.katex .fontsize-ensurer.reset-size5.size11 {
-  font-size: 2.76444444em;
-}
-.katex .sizing.reset-size6.size1,
-.katex .fontsize-ensurer.reset-size6.size1 {
-  font-size: 0.5em;
-}
-.katex .sizing.reset-size6.size2,
-.katex .fontsize-ensurer.reset-size6.size2 {
-  font-size: 0.6em;
-}
-.katex .sizing.reset-size6.size3,
-.katex .fontsize-ensurer.reset-size6.size3 {
-  font-size: 0.7em;
-}
-.katex .sizing.reset-size6.size4,
-.katex .fontsize-ensurer.reset-size6.size4 {
-  font-size: 0.8em;
-}
-.katex .sizing.reset-size6.size5,
-.katex .fontsize-ensurer.reset-size6.size5 {
-  font-size: 0.9em;
-}
-.katex .sizing.reset-size6.size6,
-.katex .fontsize-ensurer.reset-size6.size6 {
-  font-size: 1em;
-}
-.katex .sizing.reset-size6.size7,
-.katex .fontsize-ensurer.reset-size6.size7 {
-  font-size: 1.2em;
-}
-.katex .sizing.reset-size6.size8,
-.katex .fontsize-ensurer.reset-size6.size8 {
-  font-size: 1.44em;
-}
-.katex .sizing.reset-size6.size9,
-.katex .fontsize-ensurer.reset-size6.size9 {
-  font-size: 1.728em;
-}
-.katex .sizing.reset-size6.size10,
-.katex .fontsize-ensurer.reset-size6.size10 {
-  font-size: 2.074em;
-}
-.katex .sizing.reset-size6.size11,
-.katex .fontsize-ensurer.reset-size6.size11 {
-  font-size: 2.488em;
-}
-.katex .sizing.reset-size7.size1,
-.katex .fontsize-ensurer.reset-size7.size1 {
-  font-size: 0.41666667em;
-}
-.katex .sizing.reset-size7.size2,
-.katex .fontsize-ensurer.reset-size7.size2 {
-  font-size: 0.5em;
-}
-.katex .sizing.reset-size7.size3,
-.katex .fontsize-ensurer.reset-size7.size3 {
-  font-size: 0.58333333em;
-}
-.katex .sizing.reset-size7.size4,
-.katex .fontsize-ensurer.reset-size7.size4 {
-  font-size: 0.66666667em;
-}
-.katex .sizing.reset-size7.size5,
-.katex .fontsize-ensurer.reset-size7.size5 {
-  font-size: 0.75em;
-}
-.katex .sizing.reset-size7.size6,
-.katex .fontsize-ensurer.reset-size7.size6 {
-  font-size: 0.83333333em;
-}
-.katex .sizing.reset-size7.size7,
-.katex .fontsize-ensurer.reset-size7.size7 {
-  font-size: 1em;
-}
-.katex .sizing.reset-size7.size8,
-.katex .fontsize-ensurer.reset-size7.size8 {
-  font-size: 1.2em;
-}
-.katex .sizing.reset-size7.size9,
-.katex .fontsize-ensurer.reset-size7.size9 {
-  font-size: 1.44em;
-}
-.katex .sizing.reset-size7.size10,
-.katex .fontsize-ensurer.reset-size7.size10 {
-  font-size: 1.72833333em;
-}
-.katex .sizing.reset-size7.size11,
-.katex .fontsize-ensurer.reset-size7.size11 {
-  font-size: 2.07333333em;
-}
-.katex .sizing.reset-size8.size1,
-.katex .fontsize-ensurer.reset-size8.size1 {
-  font-size: 0.34722222em;
-}
-.katex .sizing.reset-size8.size2,
-.katex .fontsize-ensurer.reset-size8.size2 {
-  font-size: 0.41666667em;
-}
-.katex .sizing.reset-size8.size3,
-.katex .fontsize-ensurer.reset-size8.size3 {
-  font-size: 0.48611111em;
-}
-.katex .sizing.reset-size8.size4,
-.katex .fontsize-ensurer.reset-size8.size4 {
-  font-size: 0.55555556em;
-}
-.katex .sizing.reset-size8.size5,
-.katex .fontsize-ensurer.reset-size8.size5 {
-  font-size: 0.625em;
-}
-.katex .sizing.reset-size8.size6,
-.katex .fontsize-ensurer.reset-size8.size6 {
-  font-size: 0.69444444em;
-}
-.katex .sizing.reset-size8.size7,
-.katex .fontsize-ensurer.reset-size8.size7 {
-  font-size: 0.83333333em;
-}
-.katex .sizing.reset-size8.size8,
-.katex .fontsize-ensurer.reset-size8.size8 {
-  font-size: 1em;
-}
-.katex .sizing.reset-size8.size9,
-.katex .fontsize-ensurer.reset-size8.size9 {
-  font-size: 1.2em;
-}
-.katex .sizing.reset-size8.size10,
-.katex .fontsize-ensurer.reset-size8.size10 {
-  font-size: 1.44027778em;
-}
-.katex .sizing.reset-size8.size11,
-.katex .fontsize-ensurer.reset-size8.size11 {
-  font-size: 1.72777778em;
-}
-.katex .sizing.reset-size9.size1,
-.katex .fontsize-ensurer.reset-size9.size1 {
-  font-size: 0.28935185em;
-}
-.katex .sizing.reset-size9.size2,
-.katex .fontsize-ensurer.reset-size9.size2 {
-  font-size: 0.34722222em;
-}
-.katex .sizing.reset-size9.size3,
-.katex .fontsize-ensurer.reset-size9.size3 {
-  font-size: 0.40509259em;
-}
-.katex .sizing.reset-size9.size4,
-.katex .fontsize-ensurer.reset-size9.size4 {
-  font-size: 0.46296296em;
-}
-.katex .sizing.reset-size9.size5,
-.katex .fontsize-ensurer.reset-size9.size5 {
-  font-size: 0.52083333em;
-}
-.katex .sizing.reset-size9.size6,
-.katex .fontsize-ensurer.reset-size9.size6 {
-  font-size: 0.5787037em;
-}
-.katex .sizing.reset-size9.size7,
-.katex .fontsize-ensurer.reset-size9.size7 {
-  font-size: 0.69444444em;
-}
-.katex .sizing.reset-size9.size8,
-.katex .fontsize-ensurer.reset-size9.size8 {
-  font-size: 0.83333333em;
-}
-.katex .sizing.reset-size9.size9,
-.katex .fontsize-ensurer.reset-size9.size9 {
-  font-size: 1em;
-}
-.katex .sizing.reset-size9.size10,
-.katex .fontsize-ensurer.reset-size9.size10 {
-  font-size: 1.20023148em;
-}
-.katex .sizing.reset-size9.size11,
-.katex .fontsize-ensurer.reset-size9.size11 {
-  font-size: 1.43981481em;
-}
-.katex .sizing.reset-size10.size1,
-.katex .fontsize-ensurer.reset-size10.size1 {
-  font-size: 0.24108004em;
-}
-.katex .sizing.reset-size10.size2,
-.katex .fontsize-ensurer.reset-size10.size2 {
-  font-size: 0.28929605em;
-}
-.katex .sizing.reset-size10.size3,
-.katex .fontsize-ensurer.reset-size10.size3 {
-  font-size: 0.33751205em;
-}
-.katex .sizing.reset-size10.size4,
-.katex .fontsize-ensurer.reset-size10.size4 {
-  font-size: 0.38572806em;
-}
-.katex .sizing.reset-size10.size5,
-.katex .fontsize-ensurer.reset-size10.size5 {
-  font-size: 0.43394407em;
-}
-.katex .sizing.reset-size10.size6,
-.katex .fontsize-ensurer.reset-size10.size6 {
-  font-size: 0.48216008em;
-}
-.katex .sizing.reset-size10.size7,
-.katex .fontsize-ensurer.reset-size10.size7 {
-  font-size: 0.57859209em;
-}
-.katex .sizing.reset-size10.size8,
-.katex .fontsize-ensurer.reset-size10.size8 {
-  font-size: 0.69431051em;
-}
-.katex .sizing.reset-size10.size9,
-.katex .fontsize-ensurer.reset-size10.size9 {
-  font-size: 0.83317261em;
-}
-.katex .sizing.reset-size10.size10,
-.katex .fontsize-ensurer.reset-size10.size10 {
-  font-size: 1em;
-}
-.katex .sizing.reset-size10.size11,
-.katex .fontsize-ensurer.reset-size10.size11 {
-  font-size: 1.19961427em;
-}
-.katex .sizing.reset-size11.size1,
-.katex .fontsize-ensurer.reset-size11.size1 {
-  font-size: 0.20096463em;
-}
-.katex .sizing.reset-size11.size2,
-.katex .fontsize-ensurer.reset-size11.size2 {
-  font-size: 0.24115756em;
-}
-.katex .sizing.reset-size11.size3,
-.katex .fontsize-ensurer.reset-size11.size3 {
-  font-size: 0.28135048em;
-}
-.katex .sizing.reset-size11.size4,
-.katex .fontsize-ensurer.reset-size11.size4 {
-  font-size: 0.32154341em;
-}
-.katex .sizing.reset-size11.size5,
-.katex .fontsize-ensurer.reset-size11.size5 {
-  font-size: 0.36173633em;
-}
-.katex .sizing.reset-size11.size6,
-.katex .fontsize-ensurer.reset-size11.size6 {
-  font-size: 0.40192926em;
-}
-.katex .sizing.reset-size11.size7,
-.katex .fontsize-ensurer.reset-size11.size7 {
-  font-size: 0.48231511em;
-}
-.katex .sizing.reset-size11.size8,
-.katex .fontsize-ensurer.reset-size11.size8 {
-  font-size: 0.57877814em;
-}
-.katex .sizing.reset-size11.size9,
-.katex .fontsize-ensurer.reset-size11.size9 {
-  font-size: 0.69453376em;
-}
-.katex .sizing.reset-size11.size10,
-.katex .fontsize-ensurer.reset-size11.size10 {
-  font-size: 0.83360129em;
-}
-.katex .sizing.reset-size11.size11,
-.katex .fontsize-ensurer.reset-size11.size11 {
-  font-size: 1em;
-}
-.katex .delimsizing.size1 {
-  font-family: KaTeX_Size1;
-}
-.katex .delimsizing.size2 {
-  font-family: KaTeX_Size2;
-}
-.katex .delimsizing.size3 {
-  font-family: KaTeX_Size3;
-}
-.katex .delimsizing.size4 {
-  font-family: KaTeX_Size4;
-}
-.katex .delimsizing.mult .delim-size1 > span {
-  font-family: KaTeX_Size1;
-}
-.katex .delimsizing.mult .delim-size4 > span {
-  font-family: KaTeX_Size4;
-}
-.katex .nulldelimiter {
-  display: inline-block;
-  width: 0.12em;
-}
-.katex .delimcenter {
-  position: relative;
-}
-.katex .op-symbol {
-  position: relative;
-}
-.katex .op-symbol.small-op {
-  font-family: KaTeX_Size1;
-}
-.katex .op-symbol.large-op {
-  font-family: KaTeX_Size2;
-}
-.katex .op-limits > .vlist-t {
-  text-align: center;
-}
-.katex .accent > .vlist-t {
-  text-align: center;
-}
-.katex .accent .accent-body {
-  position: relative;
-}
-.katex .accent .accent-body:not(.accent-full) {
-  width: 0;
-}
-.katex .overlay {
-  display: block;
-}
-.katex .mtable .vertical-separator {
-  display: inline-block;
-  min-width: 1px;
-}
-.katex .mtable .arraycolsep {
-  display: inline-block;
-}
-.katex .mtable .col-align-c > .vlist-t {
-  text-align: center;
-}
-.katex .mtable .col-align-l > .vlist-t {
-  text-align: left;
-}
-.katex .mtable .col-align-r > .vlist-t {
-  text-align: right;
-}
-.katex .svg-align {
-  text-align: left;
-}
-.katex svg {
-  display: block;
-  position: absolute;
-  width: 100%;
-  height: inherit;
-  fill: currentColor;
-  stroke: currentColor;
-  fill-rule: nonzero;
-  fill-opacity: 1;
-  stroke-width: 1;
-  stroke-linecap: butt;
-  stroke-linejoin: miter;
-  stroke-miterlimit: 4;
-  stroke-dasharray: none;
-  stroke-dashoffset: 0;
-  stroke-opacity: 1;
-}
-.katex svg path {
-  stroke: none;
-}
-.katex img {
-  border-style: none;
-  min-width: 0;
-  min-height: 0;
-  max-width: none;
-  max-height: none;
-}
-.katex .stretchy {
-  width: 100%;
-  display: block;
-  position: relative;
-  overflow: hidden;
-}
-.katex .stretchy::before,
-.katex .stretchy::after {
-  content: "";
-}
-.katex .hide-tail {
-  width: 100%;
-  position: relative;
-  overflow: hidden;
-}
-.katex .halfarrow-left {
-  position: absolute;
-  left: 0;
-  width: 50.2%;
-  overflow: hidden;
-}
-.katex .halfarrow-right {
-  position: absolute;
-  right: 0;
-  width: 50.2%;
-  overflow: hidden;
-}
-.katex .brace-left {
-  position: absolute;
-  left: 0;
-  width: 25.1%;
-  overflow: hidden;
-}
-.katex .brace-center {
-  position: absolute;
-  left: 25%;
-  width: 50%;
-  overflow: hidden;
-}
-.katex .brace-right {
-  position: absolute;
-  right: 0;
-  width: 25.1%;
-  overflow: hidden;
-}
-.katex .x-arrow-pad {
-  padding: 0 0.5em;
-}
-.katex .x-arrow,
-.katex .mover,
-.katex .munder {
-  text-align: center;
-}
-.katex .boxpad {
-  padding: 0 0.3em 0 0.3em;
-}
-.katex .fbox,
-.katex .fcolorbox {
-  box-sizing: border-box;
-  border: 0.04em solid;
-}
-.katex .cancel-pad {
-  padding: 0 0.2em 0 0.2em;
-}
-.katex .cancel-lap {
-  margin-left: -0.2em;
-  margin-right: -0.2em;
-}
-.katex .sout {
-  border-bottom-style: solid;
-  border-bottom-width: 0.08em;
-}
-.katex-display {
-  display: block;
-  margin: 1em 0;
-  text-align: center;
-}
-.katex-display > .katex {
-  display: block;
-  text-align: center;
-  white-space: nowrap;
-}
-.katex-display > .katex > .katex-html {
-  display: block;
-  position: relative;
-}
-.katex-display > .katex > .katex-html > .tag {
-  position: absolute;
-  right: 0;
-}
-.katex-display.leqno > .katex > .katex-html > .tag {
-  left: 0;
-  right: auto;
-}
-.katex-display.fleqn > .katex {
-  text-align: left;
-}
-
diff --git a/registry/vulkan/katex/katex.js b/registry/vulkan/katex/katex.js
deleted file mode 100644
index 2aa2c91..0000000
--- a/registry/vulkan/katex/katex.js
+++ /dev/null
@@ -1,17425 +0,0 @@
-(function webpackUniversalModuleDefinition(root, factory) {
-	if(typeof exports === 'object' && typeof module === 'object')
-		module.exports = factory();
-	else if(typeof define === 'function' && define.amd)
-		define([], factory);
-	else if(typeof exports === 'object')
-		exports["katex"] = factory();
-	else
-		root["katex"] = factory();
-})((typeof self !== 'undefined' ? self : this), function() {
-return /******/ (function(modules) { // webpackBootstrap
-/******/ 	// The module cache
-/******/ 	var installedModules = {};
-/******/
-/******/ 	// The require function
-/******/ 	function __webpack_require__(moduleId) {
-/******/
-/******/ 		// Check if module is in cache
-/******/ 		if(installedModules[moduleId]) {
-/******/ 			return installedModules[moduleId].exports;
-/******/ 		}
-/******/ 		// Create a new module (and put it into the cache)
-/******/ 		var module = installedModules[moduleId] = {
-/******/ 			i: moduleId,
-/******/ 			l: false,
-/******/ 			exports: {}
-/******/ 		};
-/******/
-/******/ 		// Execute the module function
-/******/ 		modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
-/******/
-/******/ 		// Flag the module as loaded
-/******/ 		module.l = true;
-/******/
-/******/ 		// Return the exports of the module
-/******/ 		return module.exports;
-/******/ 	}
-/******/
-/******/
-/******/ 	// expose the modules object (__webpack_modules__)
-/******/ 	__webpack_require__.m = modules;
-/******/
-/******/ 	// expose the module cache
-/******/ 	__webpack_require__.c = installedModules;
-/******/
-/******/ 	// define getter function for harmony exports
-/******/ 	__webpack_require__.d = function(exports, name, getter) {
-/******/ 		if(!__webpack_require__.o(exports, name)) {
-/******/ 			Object.defineProperty(exports, name, { enumerable: true, get: getter });
-/******/ 		}
-/******/ 	};
-/******/
-/******/ 	// define __esModule on exports
-/******/ 	__webpack_require__.r = function(exports) {
-/******/ 		if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
-/******/ 			Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
-/******/ 		}
-/******/ 		Object.defineProperty(exports, '__esModule', { value: true });
-/******/ 	};
-/******/
-/******/ 	// create a fake namespace object
-/******/ 	// mode & 1: value is a module id, require it
-/******/ 	// mode & 2: merge all properties of value into the ns
-/******/ 	// mode & 4: return value when already ns object
-/******/ 	// mode & 8|1: behave like require
-/******/ 	__webpack_require__.t = function(value, mode) {
-/******/ 		if(mode & 1) value = __webpack_require__(value);
-/******/ 		if(mode & 8) return value;
-/******/ 		if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
-/******/ 		var ns = Object.create(null);
-/******/ 		__webpack_require__.r(ns);
-/******/ 		Object.defineProperty(ns, 'default', { enumerable: true, value: value });
-/******/ 		if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
-/******/ 		return ns;
-/******/ 	};
-/******/
-/******/ 	// getDefaultExport function for compatibility with non-harmony modules
-/******/ 	__webpack_require__.n = function(module) {
-/******/ 		var getter = module && module.__esModule ?
-/******/ 			function getDefault() { return module['default']; } :
-/******/ 			function getModuleExports() { return module; };
-/******/ 		__webpack_require__.d(getter, 'a', getter);
-/******/ 		return getter;
-/******/ 	};
-/******/
-/******/ 	// Object.prototype.hasOwnProperty.call
-/******/ 	__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
-/******/
-/******/ 	// __webpack_public_path__
-/******/ 	__webpack_require__.p = "";
-/******/
-/******/
-/******/ 	// Load entry module and return exports
-/******/ 	return __webpack_require__(__webpack_require__.s = 1);
-/******/ })
-/************************************************************************/
-/******/ ([
-/* 0 */
-/***/ (function(module, exports, __webpack_require__) {
-
-// extracted by mini-css-extract-plugin
-
-/***/ }),
-/* 1 */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-
-// EXTERNAL MODULE: ./src/katex.less
-var katex = __webpack_require__(0);
-
-// CONCATENATED MODULE: ./src/SourceLocation.js
-/**
- * Lexing or parsing positional information for error reporting.
- * This object is immutable.
- */
-var SourceLocation =
-/*#__PURE__*/
-function () {
-  // The + prefix indicates that these fields aren't writeable
-  // Lexer holding the input string.
-  // Start offset, zero-based inclusive.
-  // End offset, zero-based exclusive.
-  function SourceLocation(lexer, start, end) {
-    this.lexer = void 0;
-    this.start = void 0;
-    this.end = void 0;
-    this.lexer = lexer;
-    this.start = start;
-    this.end = end;
-  }
-  /**
-   * Merges two `SourceLocation`s from location providers, given they are
-   * provided in order of appearance.
-   * - Returns the first one's location if only the first is provided.
-   * - Returns a merged range of the first and the last if both are provided
-   *   and their lexers match.
-   * - Otherwise, returns null.
-   */
-
-
-  SourceLocation.range = function range(first, second) {
-    if (!second) {
-      return first && first.loc;
-    } else if (!first || !first.loc || !second.loc || first.loc.lexer !== second.loc.lexer) {
-      return null;
-    } else {
-      return new SourceLocation(first.loc.lexer, first.loc.start, second.loc.end);
-    }
-  };
-
-  return SourceLocation;
-}();
-
-
-// CONCATENATED MODULE: ./src/Token.js
-
-/**
- * Interface required to break circular dependency between Token, Lexer, and
- * ParseError.
- */
-
-/**
- * The resulting token returned from `lex`.
- *
- * It consists of the token text plus some position information.
- * The position information is essentially a range in an input string,
- * but instead of referencing the bare input string, we refer to the lexer.
- * That way it is possible to attach extra metadata to the input string,
- * like for example a file name or similar.
- *
- * The position information is optional, so it is OK to construct synthetic
- * tokens if appropriate. Not providing available position information may
- * lead to degraded error reporting, though.
- */
-var Token_Token =
-/*#__PURE__*/
-function () {
-  function Token(text, // the text of this token
-  loc) {
-    this.text = void 0;
-    this.loc = void 0;
-    this.text = text;
-    this.loc = loc;
-  }
-  /**
-   * Given a pair of tokens (this and endToken), compute a `Token` encompassing
-   * the whole input range enclosed by these two.
-   */
-
-
-  var _proto = Token.prototype;
-
-  _proto.range = function range(endToken, // last token of the range, inclusive
-  text) // the text of the newly constructed token
-  {
-    return new Token(text, SourceLocation.range(this, endToken));
-  };
-
-  return Token;
-}();
-// CONCATENATED MODULE: ./src/ParseError.js
-
-
-/**
- * This is the ParseError class, which is the main error thrown by KaTeX
- * functions when something has gone wrong. This is used to distinguish internal
- * errors from errors in the expression that the user provided.
- *
- * If possible, a caller should provide a Token or ParseNode with information
- * about where in the source string the problem occurred.
- */
-var ParseError = // Error position based on passed-in Token or ParseNode.
-function ParseError(message, // The error message
-token) // An object providing position information
-{
-  this.position = void 0;
-  var error = "KaTeX parse error: " + message;
-  var start;
-  var loc = token && token.loc;
-
-  if (loc && loc.start <= loc.end) {
-    // If we have the input and a position, make the error a bit fancier
-    // Get the input
-    var input = loc.lexer.input; // Prepend some information
-
-    start = loc.start;
-    var end = loc.end;
-
-    if (start === input.length) {
-      error += " at end of input: ";
-    } else {
-      error += " at position " + (start + 1) + ": ";
-    } // Underline token in question using combining underscores
-
-
-    var underlined = input.slice(start, end).replace(/[^]/g, "$&\u0332"); // Extract some context from the input and add it to the error
-
-    var left;
-
-    if (start > 15) {
-      left = "…" + input.slice(start - 15, start);
-    } else {
-      left = input.slice(0, start);
-    }
-
-    var right;
-
-    if (end + 15 < input.length) {
-      right = input.slice(end, end + 15) + "…";
-    } else {
-      right = input.slice(end);
-    }
-
-    error += left + underlined + right;
-  } // Some hackery to make ParseError a prototype of Error
-  // See http://stackoverflow.com/a/8460753
-
-
-  var self = new Error(error);
-  self.name = "ParseError"; // $FlowFixMe
-
-  self.__proto__ = ParseError.prototype; // $FlowFixMe
-
-  self.position = start;
-  return self;
-}; // $FlowFixMe More hackery
-
-
-ParseError.prototype.__proto__ = Error.prototype;
-/* harmony default export */ var src_ParseError = (ParseError);
-// CONCATENATED MODULE: ./src/utils.js
-/**
- * This file contains a list of utility functions which are useful in other
- * files.
- */
-
-/**
- * Return whether an element is contained in a list
- */
-var contains = function contains(list, elem) {
-  return list.indexOf(elem) !== -1;
-};
-/**
- * Provide a default value if a setting is undefined
- * NOTE: Couldn't use `T` as the output type due to facebook/flow#5022.
- */
-
-
-var deflt = function deflt(setting, defaultIfUndefined) {
-  return setting === undefined ? defaultIfUndefined : setting;
-}; // hyphenate and escape adapted from Facebook's React under Apache 2 license
-
-
-var uppercase = /([A-Z])/g;
-
-var hyphenate = function hyphenate(str) {
-  return str.replace(uppercase, "-$1").toLowerCase();
-};
-
-var ESCAPE_LOOKUP = {
-  "&": "&amp;",
-  ">": "&gt;",
-  "<": "&lt;",
-  "\"": "&quot;",
-  "'": "&#x27;"
-};
-var ESCAPE_REGEX = /[&><"']/g;
-/**
- * Escapes text to prevent scripting attacks.
- */
-
-function utils_escape(text) {
-  return String(text).replace(ESCAPE_REGEX, function (match) {
-    return ESCAPE_LOOKUP[match];
-  });
-}
-/**
- * Sometimes we want to pull out the innermost element of a group. In most
- * cases, this will just be the group itself, but when ordgroups and colors have
- * a single element, we want to pull that out.
- */
-
-
-var getBaseElem = function getBaseElem(group) {
-  if (group.type === "ordgroup") {
-    if (group.body.length === 1) {
-      return getBaseElem(group.body[0]);
-    } else {
-      return group;
-    }
-  } else if (group.type === "color") {
-    if (group.body.length === 1) {
-      return getBaseElem(group.body[0]);
-    } else {
-      return group;
-    }
-  } else if (group.type === "font") {
-    return getBaseElem(group.body);
-  } else {
-    return group;
-  }
-};
-/**
- * TeXbook algorithms often reference "character boxes", which are simply groups
- * with a single character in them. To decide if something is a character box,
- * we find its innermost group, and see if it is a single character.
- */
-
-
-var utils_isCharacterBox = function isCharacterBox(group) {
-  var baseElem = getBaseElem(group); // These are all they types of groups which hold single characters
-
-  return baseElem.type === "mathord" || baseElem.type === "textord" || baseElem.type === "atom";
-};
-
-var assert = function assert(value) {
-  if (!value) {
-    throw new Error('Expected non-null, but got ' + String(value));
-  }
-
-  return value;
-};
-/**
- * Return the protocol of a URL, or "_relative" if the URL does not specify a
- * protocol (and thus is relative).
- */
-
-var protocolFromUrl = function protocolFromUrl(url) {
-  var protocol = /^\s*([^\\/#]*?)(?::|&#0*58|&#x0*3a)/i.exec(url);
-  return protocol != null ? protocol[1] : "_relative";
-};
-/* harmony default export */ var utils = ({
-  contains: contains,
-  deflt: deflt,
-  escape: utils_escape,
-  hyphenate: hyphenate,
-  getBaseElem: getBaseElem,
-  isCharacterBox: utils_isCharacterBox,
-  protocolFromUrl: protocolFromUrl
-});
-// CONCATENATED MODULE: ./src/Settings.js
-/* eslint no-console:0 */
-
-/**
- * This is a module for storing settings passed into KaTeX. It correctly handles
- * default settings.
- */
-
-
-
-
-/**
- * The main Settings object
- *
- * The current options stored are:
- *  - displayMode: Whether the expression should be typeset as inline math
- *                 (false, the default), meaning that the math starts in
- *                 \textstyle and is placed in an inline-block); or as display
- *                 math (true), meaning that the math starts in \displaystyle
- *                 and is placed in a block with vertical margin.
- */
-var Settings_Settings =
-/*#__PURE__*/
-function () {
-  function Settings(options) {
-    this.displayMode = void 0;
-    this.output = void 0;
-    this.leqno = void 0;
-    this.fleqn = void 0;
-    this.throwOnError = void 0;
-    this.errorColor = void 0;
-    this.macros = void 0;
-    this.minRuleThickness = void 0;
-    this.colorIsTextColor = void 0;
-    this.strict = void 0;
-    this.trust = void 0;
-    this.maxSize = void 0;
-    this.maxExpand = void 0;
-    // allow null options
-    options = options || {};
-    this.displayMode = utils.deflt(options.displayMode, false);
-    this.output = utils.deflt(options.output, "htmlAndMathml");
-    this.leqno = utils.deflt(options.leqno, false);
-    this.fleqn = utils.deflt(options.fleqn, false);
-    this.throwOnError = utils.deflt(options.throwOnError, true);
-    this.errorColor = utils.deflt(options.errorColor, "#cc0000");
-    this.macros = options.macros || {};
-    this.minRuleThickness = Math.max(0, utils.deflt(options.minRuleThickness, 0));
-    this.colorIsTextColor = utils.deflt(options.colorIsTextColor, false);
-    this.strict = utils.deflt(options.strict, "warn");
-    this.trust = utils.deflt(options.trust, false);
-    this.maxSize = Math.max(0, utils.deflt(options.maxSize, Infinity));
-    this.maxExpand = Math.max(0, utils.deflt(options.maxExpand, 1000));
-  }
-  /**
-   * Report nonstrict (non-LaTeX-compatible) input.
-   * Can safely not be called if `this.strict` is false in JavaScript.
-   */
-
-
-  var _proto = Settings.prototype;
-
-  _proto.reportNonstrict = function reportNonstrict(errorCode, errorMsg, token) {
-    var strict = this.strict;
-
-    if (typeof strict === "function") {
-      // Allow return value of strict function to be boolean or string
-      // (or null/undefined, meaning no further processing).
-      strict = strict(errorCode, errorMsg, token);
-    }
-
-    if (!strict || strict === "ignore") {
-      return;
-    } else if (strict === true || strict === "error") {
-      throw new src_ParseError("LaTeX-incompatible input and strict mode is set to 'error': " + (errorMsg + " [" + errorCode + "]"), token);
-    } else if (strict === "warn") {
-      typeof console !== "undefined" && console.warn("LaTeX-incompatible input and strict mode is set to 'warn': " + (errorMsg + " [" + errorCode + "]"));
-    } else {
-      // won't happen in type-safe code
-      typeof console !== "undefined" && console.warn("LaTeX-incompatible input and strict mode is set to " + ("unrecognized '" + strict + "': " + errorMsg + " [" + errorCode + "]"));
-    }
-  }
-  /**
-   * Check whether to apply strict (LaTeX-adhering) behavior for unusual
-   * input (like `\\`).  Unlike `nonstrict`, will not throw an error;
-   * instead, "error" translates to a return value of `true`, while "ignore"
-   * translates to a return value of `false`.  May still print a warning:
-   * "warn" prints a warning and returns `false`.
-   * This is for the second category of `errorCode`s listed in the README.
-   */
-  ;
-
-  _proto.useStrictBehavior = function useStrictBehavior(errorCode, errorMsg, token) {
-    var strict = this.strict;
-
-    if (typeof strict === "function") {
-      // Allow return value of strict function to be boolean or string
-      // (or null/undefined, meaning no further processing).
-      // But catch any exceptions thrown by function, treating them
-      // like "error".
-      try {
-        strict = strict(errorCode, errorMsg, token);
-      } catch (error) {
-        strict = "error";
-      }
-    }
-
-    if (!strict || strict === "ignore") {
-      return false;
-    } else if (strict === true || strict === "error") {
-      return true;
-    } else if (strict === "warn") {
-      typeof console !== "undefined" && console.warn("LaTeX-incompatible input and strict mode is set to 'warn': " + (errorMsg + " [" + errorCode + "]"));
-      return false;
-    } else {
-      // won't happen in type-safe code
-      typeof console !== "undefined" && console.warn("LaTeX-incompatible input and strict mode is set to " + ("unrecognized '" + strict + "': " + errorMsg + " [" + errorCode + "]"));
-      return false;
-    }
-  }
-  /**
-   * Check whether to test potentially dangerous input, and return
-   * `true` (trusted) or `false` (untrusted).  The sole argument `context`
-   * should be an object with `command` field specifying the relevant LaTeX
-   * command (as a string starting with `\`), and any other arguments, etc.
-   * If `context` has a `url` field, a `protocol` field will automatically
-   * get added by this function (changing the specified object).
-   */
-  ;
-
-  _proto.isTrusted = function isTrusted(context) {
-    if (context.url && !context.protocol) {
-      context.protocol = utils.protocolFromUrl(context.url);
-    }
-
-    var trust = typeof this.trust === "function" ? this.trust(context) : this.trust;
-    return Boolean(trust);
-  };
-
-  return Settings;
-}();
-
-
-// CONCATENATED MODULE: ./src/Style.js
-/**
- * This file contains information and classes for the various kinds of styles
- * used in TeX. It provides a generic `Style` class, which holds information
- * about a specific style. It then provides instances of all the different kinds
- * of styles possible, and provides functions to move between them and get
- * information about them.
- */
-
-/**
- * The main style class. Contains a unique id for the style, a size (which is
- * the same for cramped and uncramped version of a style), and a cramped flag.
- */
-var Style =
-/*#__PURE__*/
-function () {
-  function Style(id, size, cramped) {
-    this.id = void 0;
-    this.size = void 0;
-    this.cramped = void 0;
-    this.id = id;
-    this.size = size;
-    this.cramped = cramped;
-  }
-  /**
-   * Get the style of a superscript given a base in the current style.
-   */
-
-
-  var _proto = Style.prototype;
-
-  _proto.sup = function sup() {
-    return Style_styles[_sup[this.id]];
-  }
-  /**
-   * Get the style of a subscript given a base in the current style.
-   */
-  ;
-
-  _proto.sub = function sub() {
-    return Style_styles[_sub[this.id]];
-  }
-  /**
-   * Get the style of a fraction numerator given the fraction in the current
-   * style.
-   */
-  ;
-
-  _proto.fracNum = function fracNum() {
-    return Style_styles[_fracNum[this.id]];
-  }
-  /**
-   * Get the style of a fraction denominator given the fraction in the current
-   * style.
-   */
-  ;
-
-  _proto.fracDen = function fracDen() {
-    return Style_styles[_fracDen[this.id]];
-  }
-  /**
-   * Get the cramped version of a style (in particular, cramping a cramped style
-   * doesn't change the style).
-   */
-  ;
-
-  _proto.cramp = function cramp() {
-    return Style_styles[_cramp[this.id]];
-  }
-  /**
-   * Get a text or display version of this style.
-   */
-  ;
-
-  _proto.text = function text() {
-    return Style_styles[_text[this.id]];
-  }
-  /**
-   * Return true if this style is tightly spaced (scriptstyle/scriptscriptstyle)
-   */
-  ;
-
-  _proto.isTight = function isTight() {
-    return this.size >= 2;
-  };
-
-  return Style;
-}(); // Export an interface for type checking, but don't expose the implementation.
-// This way, no more styles can be generated.
-
-
-// IDs of the different styles
-var D = 0;
-var Dc = 1;
-var T = 2;
-var Tc = 3;
-var S = 4;
-var Sc = 5;
-var SS = 6;
-var SSc = 7; // Instances of the different styles
-
-var Style_styles = [new Style(D, 0, false), new Style(Dc, 0, true), new Style(T, 1, false), new Style(Tc, 1, true), new Style(S, 2, false), new Style(Sc, 2, true), new Style(SS, 3, false), new Style(SSc, 3, true)]; // Lookup tables for switching from one style to another
-
-var _sup = [S, Sc, S, Sc, SS, SSc, SS, SSc];
-var _sub = [Sc, Sc, Sc, Sc, SSc, SSc, SSc, SSc];
-var _fracNum = [T, Tc, S, Sc, SS, SSc, SS, SSc];
-var _fracDen = [Tc, Tc, Sc, Sc, SSc, SSc, SSc, SSc];
-var _cramp = [Dc, Dc, Tc, Tc, Sc, Sc, SSc, SSc];
-var _text = [D, Dc, T, Tc, T, Tc, T, Tc]; // We only export some of the styles.
-
-/* harmony default export */ var src_Style = ({
-  DISPLAY: Style_styles[D],
-  TEXT: Style_styles[T],
-  SCRIPT: Style_styles[S],
-  SCRIPTSCRIPT: Style_styles[SS]
-});
-// CONCATENATED MODULE: ./src/unicodeScripts.js
-/*
- * This file defines the Unicode scripts and script families that we
- * support. To add new scripts or families, just add a new entry to the
- * scriptData array below. Adding scripts to the scriptData array allows
- * characters from that script to appear in \text{} environments.
- */
-
-/**
- * Each script or script family has a name and an array of blocks.
- * Each block is an array of two numbers which specify the start and
- * end points (inclusive) of a block of Unicode codepoints.
- */
-
-/**
- * Unicode block data for the families of scripts we support in \text{}.
- * Scripts only need to appear here if they do not have font metrics.
- */
-var scriptData = [{
-  // Latin characters beyond the Latin-1 characters we have metrics for.
-  // Needed for Czech, Hungarian and Turkish text, for example.
-  name: 'latin',
-  blocks: [[0x0100, 0x024f], // Latin Extended-A and Latin Extended-B
-  [0x0300, 0x036f]]
-}, {
-  // The Cyrillic script used by Russian and related languages.
-  // A Cyrillic subset used to be supported as explicitly defined
-  // symbols in symbols.js
-  name: 'cyrillic',
-  blocks: [[0x0400, 0x04ff]]
-}, {
-  // The Brahmic scripts of South and Southeast Asia
-  // Devanagari (0900–097F)
-  // Bengali (0980–09FF)
-  // Gurmukhi (0A00–0A7F)
-  // Gujarati (0A80–0AFF)
-  // Oriya (0B00–0B7F)
-  // Tamil (0B80–0BFF)
-  // Telugu (0C00–0C7F)
-  // Kannada (0C80–0CFF)
-  // Malayalam (0D00–0D7F)
-  // Sinhala (0D80–0DFF)
-  // Thai (0E00–0E7F)
-  // Lao (0E80–0EFF)
-  // Tibetan (0F00–0FFF)
-  // Myanmar (1000–109F)
-  name: 'brahmic',
-  blocks: [[0x0900, 0x109F]]
-}, {
-  name: 'georgian',
-  blocks: [[0x10A0, 0x10ff]]
-}, {
-  // Chinese and Japanese.
-  // The "k" in cjk is for Korean, but we've separated Korean out
-  name: "cjk",
-  blocks: [[0x3000, 0x30FF], // CJK symbols and punctuation, Hiragana, Katakana
-  [0x4E00, 0x9FAF], // CJK ideograms
-  [0xFF00, 0xFF60]]
-}, {
-  // Korean
-  name: 'hangul',
-  blocks: [[0xAC00, 0xD7AF]]
-}];
-/**
- * Given a codepoint, return the name of the script or script family
- * it is from, or null if it is not part of a known block
- */
-
-function scriptFromCodepoint(codepoint) {
-  for (var i = 0; i < scriptData.length; i++) {
-    var script = scriptData[i];
-
-    for (var _i = 0; _i < script.blocks.length; _i++) {
-      var block = script.blocks[_i];
-
-      if (codepoint >= block[0] && codepoint <= block[1]) {
-        return script.name;
-      }
-    }
-  }
-
-  return null;
-}
-/**
- * A flattened version of all the supported blocks in a single array.
- * This is an optimization to make supportedCodepoint() fast.
- */
-
-var allBlocks = [];
-scriptData.forEach(function (s) {
-  return s.blocks.forEach(function (b) {
-    return allBlocks.push.apply(allBlocks, b);
-  });
-});
-/**
- * Given a codepoint, return true if it falls within one of the
- * scripts or script families defined above and false otherwise.
- *
- * Micro benchmarks shows that this is faster than
- * /[\u3000-\u30FF\u4E00-\u9FAF\uFF00-\uFF60\uAC00-\uD7AF\u0900-\u109F]/.test()
- * in Firefox, Chrome and Node.
- */
-
-function supportedCodepoint(codepoint) {
-  for (var i = 0; i < allBlocks.length; i += 2) {
-    if (codepoint >= allBlocks[i] && codepoint <= allBlocks[i + 1]) {
-      return true;
-    }
-  }
-
-  return false;
-}
-// CONCATENATED MODULE: ./src/svgGeometry.js
-/**
- * This file provides support to domTree.js and delimiter.js.
- * It's a storehouse of path geometry for SVG images.
- */
-// In all paths below, the viewBox-to-em scale is 1000:1.
-var hLinePad = 80; // padding above a sqrt viniculum. Prevents image cropping.
-// The viniculum of a \sqrt can be made thicker by a KaTeX rendering option.
-// Think of variable extraViniculum as two detours in the SVG path.
-// The detour begins at the lower left of the area labeled extraViniculum below.
-// The detour proceeds one extraViniculum distance up and slightly to the right,
-// displacing the radiused corner between surd and viniculum. The radius is
-// traversed as usual, then the detour resumes. It goes right, to the end of
-// the very long viniculumn, then down one extraViniculum distance,
-// after which it resumes regular path geometry for the radical.
-
-/*                                                  viniculum
-                                                   /
-         /▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒←extraViniculum
-        / █████████████████████←0.04em (40 unit) std viniculum thickness
-       / /
-      / /
-     / /\
-    / / surd
-*/
-
-var sqrtMain = function sqrtMain(extraViniculum, hLinePad) {
-  // sqrtMain path geometry is from glyph U221A in the font KaTeX Main
-  return "M95," + (622 + extraViniculum + hLinePad) + "\nc-2.7,0,-7.17,-2.7,-13.5,-8c-5.8,-5.3,-9.5,-10,-9.5,-14\nc0,-2,0.3,-3.3,1,-4c1.3,-2.7,23.83,-20.7,67.5,-54\nc44.2,-33.3,65.8,-50.3,66.5,-51c1.3,-1.3,3,-2,5,-2c4.7,0,8.7,3.3,12,10\ns173,378,173,378c0.7,0,35.3,-71,104,-213c68.7,-142,137.5,-285,206.5,-429\nc69,-144,104.5,-217.7,106.5,-221\nl" + extraViniculum / 2.075 + " -" + extraViniculum + "\nc5.3,-9.3,12,-14,20,-14\nH400000v" + (40 + extraViniculum) + "H845.2724\ns-225.272,467,-225.272,467s-235,486,-235,486c-2.7,4.7,-9,7,-19,7\nc-6,0,-10,-1,-12,-3s-194,-422,-194,-422s-65,47,-65,47z\nM" + (834 + extraViniculum) + " " + hLinePad + "h400000v" + (40 + extraViniculum) + "h-400000z";
-};
-
-var sqrtSize1 = function sqrtSize1(extraViniculum, hLinePad) {
-  // size1 is from glyph U221A in the font KaTeX_Size1-Regular
-  return "M263," + (601 + extraViniculum + hLinePad) + "c0.7,0,18,39.7,52,119\nc34,79.3,68.167,158.7,102.5,238c34.3,79.3,51.8,119.3,52.5,120\nc340,-704.7,510.7,-1060.3,512,-1067\nl" + extraViniculum / 2.084 + " -" + extraViniculum + "\nc4.7,-7.3,11,-11,19,-11\nH40000v" + (40 + extraViniculum) + "H1012.3\ns-271.3,567,-271.3,567c-38.7,80.7,-84,175,-136,283c-52,108,-89.167,185.3,-111.5,232\nc-22.3,46.7,-33.8,70.3,-34.5,71c-4.7,4.7,-12.3,7,-23,7s-12,-1,-12,-1\ns-109,-253,-109,-253c-72.7,-168,-109.3,-252,-110,-252c-10.7,8,-22,16.7,-34,26\nc-22,17.3,-33.3,26,-34,26s-26,-26,-26,-26s76,-59,76,-59s76,-60,76,-60z\nM" + (1001 + extraViniculum) + " " + hLinePad + "h400000v" + (40 + extraViniculum) + "h-400000z";
-};
-
-var sqrtSize2 = function sqrtSize2(extraViniculum, hLinePad) {
-  // size2 is from glyph U221A in the font KaTeX_Size2-Regular
-  return "M983 " + (10 + extraViniculum + hLinePad) + "\nl" + extraViniculum / 3.13 + " -" + extraViniculum + "\nc4,-6.7,10,-10,18,-10 H400000v" + (40 + extraViniculum) + "\nH1013.1s-83.4,268,-264.1,840c-180.7,572,-277,876.3,-289,913c-4.7,4.7,-12.7,7,-24,7\ns-12,0,-12,0c-1.3,-3.3,-3.7,-11.7,-7,-25c-35.3,-125.3,-106.7,-373.3,-214,-744\nc-10,12,-21,25,-33,39s-32,39,-32,39c-6,-5.3,-15,-14,-27,-26s25,-30,25,-30\nc26.7,-32.7,52,-63,76,-91s52,-60,52,-60s208,722,208,722\nc56,-175.3,126.3,-397.3,211,-666c84.7,-268.7,153.8,-488.2,207.5,-658.5\nc53.7,-170.3,84.5,-266.8,92.5,-289.5z\nM" + (1001 + extraViniculum) + " " + hLinePad + "h400000v" + (40 + extraViniculum) + "h-400000z";
-};
-
-var sqrtSize3 = function sqrtSize3(extraViniculum, hLinePad) {
-  // size3 is from glyph U221A in the font KaTeX_Size3-Regular
-  return "M424," + (2398 + extraViniculum + hLinePad) + "\nc-1.3,-0.7,-38.5,-172,-111.5,-514c-73,-342,-109.8,-513.3,-110.5,-514\nc0,-2,-10.7,14.3,-32,49c-4.7,7.3,-9.8,15.7,-15.5,25c-5.7,9.3,-9.8,16,-12.5,20\ns-5,7,-5,7c-4,-3.3,-8.3,-7.7,-13,-13s-13,-13,-13,-13s76,-122,76,-122s77,-121,77,-121\ns209,968,209,968c0,-2,84.7,-361.7,254,-1079c169.3,-717.3,254.7,-1077.7,256,-1081\nl" + extraViniculum / 4.223 + " -" + extraViniculum + "c4,-6.7,10,-10,18,-10 H400000\nv" + (40 + extraViniculum) + "H1014.6\ns-87.3,378.7,-272.6,1166c-185.3,787.3,-279.3,1182.3,-282,1185\nc-2,6,-10,9,-24,9\nc-8,0,-12,-0.7,-12,-2z M" + (1001 + extraViniculum) + " " + hLinePad + "\nh400000v" + (40 + extraViniculum) + "h-400000z";
-};
-
-var sqrtSize4 = function sqrtSize4(extraViniculum, hLinePad) {
-  // size4 is from glyph U221A in the font KaTeX_Size4-Regular
-  return "M473," + (2713 + extraViniculum + hLinePad) + "\nc339.3,-1799.3,509.3,-2700,510,-2702 l" + extraViniculum / 5.298 + " -" + extraViniculum + "\nc3.3,-7.3,9.3,-11,18,-11 H400000v" + (40 + extraViniculum) + "H1017.7\ns-90.5,478,-276.2,1466c-185.7,988,-279.5,1483,-281.5,1485c-2,6,-10,9,-24,9\nc-8,0,-12,-0.7,-12,-2c0,-1.3,-5.3,-32,-16,-92c-50.7,-293.3,-119.7,-693.3,-207,-1200\nc0,-1.3,-5.3,8.7,-16,30c-10.7,21.3,-21.3,42.7,-32,64s-16,33,-16,33s-26,-26,-26,-26\ns76,-153,76,-153s77,-151,77,-151c0.7,0.7,35.7,202,105,604c67.3,400.7,102,602.7,104,\n606zM" + (1001 + extraViniculum) + " " + hLinePad + "h400000v" + (40 + extraViniculum) + "H1017.7z";
-};
-
-var sqrtTall = function sqrtTall(extraViniculum, hLinePad, viewBoxHeight) {
-  // sqrtTall is from glyph U23B7 in the font KaTeX_Size4-Regular
-  // One path edge has a variable length. It runs vertically from the viniculumn
-  // to a point near (14 units) the bottom of the surd. The viniculum
-  // is normally 40 units thick. So the length of the line in question is:
-  var vertSegment = viewBoxHeight - 54 - hLinePad - extraViniculum;
-  return "M702 " + (extraViniculum + hLinePad) + "H400000" + (40 + extraViniculum) + "\nH742v" + vertSegment + "l-4 4-4 4c-.667.7 -2 1.5-4 2.5s-4.167 1.833-6.5 2.5-5.5 1-9.5 1\nh-12l-28-84c-16.667-52-96.667 -294.333-240-727l-212 -643 -85 170\nc-4-3.333-8.333-7.667-13 -13l-13-13l77-155 77-156c66 199.333 139 419.667\n219 661 l218 661zM702 " + hLinePad + "H400000v" + (40 + extraViniculum) + "H742z";
-};
-
-var sqrtPath = function sqrtPath(size, extraViniculum, viewBoxHeight) {
-  extraViniculum = 1000 * extraViniculum; // Convert from document ems to viewBox.
-
-  var path = "";
-
-  switch (size) {
-    case "sqrtMain":
-      path = sqrtMain(extraViniculum, hLinePad);
-      break;
-
-    case "sqrtSize1":
-      path = sqrtSize1(extraViniculum, hLinePad);
-      break;
-
-    case "sqrtSize2":
-      path = sqrtSize2(extraViniculum, hLinePad);
-      break;
-
-    case "sqrtSize3":
-      path = sqrtSize3(extraViniculum, hLinePad);
-      break;
-
-    case "sqrtSize4":
-      path = sqrtSize4(extraViniculum, hLinePad);
-      break;
-
-    case "sqrtTall":
-      path = sqrtTall(extraViniculum, hLinePad, viewBoxHeight);
-  }
-
-  return path;
-};
-var svgGeometry_path = {
-  // The doubleleftarrow geometry is from glyph U+21D0 in the font KaTeX Main
-  doubleleftarrow: "M262 157\nl10-10c34-36 62.7-77 86-123 3.3-8 5-13.3 5-16 0-5.3-6.7-8-20-8-7.3\n 0-12.2.5-14.5 1.5-2.3 1-4.8 4.5-7.5 10.5-49.3 97.3-121.7 169.3-217 216-28\n 14-57.3 25-88 33-6.7 2-11 3.8-13 5.5-2 1.7-3 4.2-3 7.5s1 5.8 3 7.5\nc2 1.7 6.3 3.5 13 5.5 68 17.3 128.2 47.8 180.5 91.5 52.3 43.7 93.8 96.2 124.5\n 157.5 9.3 8 15.3 12.3 18 13h6c12-.7 18-4 18-10 0-2-1.7-7-5-15-23.3-46-52-87\n-86-123l-10-10h399738v-40H218c328 0 0 0 0 0l-10-8c-26.7-20-65.7-43-117-69 2.7\n-2 6-3.7 10-5 36.7-16 72.3-37.3 107-64l10-8h399782v-40z\nm8 0v40h399730v-40zm0 194v40h399730v-40z",
-  // doublerightarrow is from glyph U+21D2 in font KaTeX Main
-  doublerightarrow: "M399738 392l\n-10 10c-34 36-62.7 77-86 123-3.3 8-5 13.3-5 16 0 5.3 6.7 8 20 8 7.3 0 12.2-.5\n 14.5-1.5 2.3-1 4.8-4.5 7.5-10.5 49.3-97.3 121.7-169.3 217-216 28-14 57.3-25 88\n-33 6.7-2 11-3.8 13-5.5 2-1.7 3-4.2 3-7.5s-1-5.8-3-7.5c-2-1.7-6.3-3.5-13-5.5-68\n-17.3-128.2-47.8-180.5-91.5-52.3-43.7-93.8-96.2-124.5-157.5-9.3-8-15.3-12.3-18\n-13h-6c-12 .7-18 4-18 10 0 2 1.7 7 5 15 23.3 46 52 87 86 123l10 10H0v40h399782\nc-328 0 0 0 0 0l10 8c26.7 20 65.7 43 117 69-2.7 2-6 3.7-10 5-36.7 16-72.3 37.3\n-107 64l-10 8H0v40zM0 157v40h399730v-40zm0 194v40h399730v-40z",
-  // leftarrow is from glyph U+2190 in font KaTeX Main
-  leftarrow: "M400000 241H110l3-3c68.7-52.7 113.7-120\n 135-202 4-14.7 6-23 6-25 0-7.3-7-11-21-11-8 0-13.2.8-15.5 2.5-2.3 1.7-4.2 5.8\n-5.5 12.5-1.3 4.7-2.7 10.3-4 17-12 48.7-34.8 92-68.5 130S65.3 228.3 18 247\nc-10 4-16 7.7-18 11 0 8.7 6 14.3 18 17 47.3 18.7 87.8 47 121.5 85S196 441.3 208\n 490c.7 2 1.3 5 2 9s1.2 6.7 1.5 8c.3 1.3 1 3.3 2 6s2.2 4.5 3.5 5.5c1.3 1 3.3\n 1.8 6 2.5s6 1 10 1c14 0 21-3.7 21-11 0-2-2-10.3-6-25-20-79.3-65-146.7-135-202\n l-3-3h399890zM100 241v40h399900v-40z",
-  // overbrace is from glyphs U+23A9/23A8/23A7 in font KaTeX_Size4-Regular
-  leftbrace: "M6 548l-6-6v-35l6-11c56-104 135.3-181.3 238-232 57.3-28.7 117\n-45 179-50h399577v120H403c-43.3 7-81 15-113 26-100.7 33-179.7 91-237 174-2.7\n 5-6 9-10 13-.7 1-7.3 1-20 1H6z",
-  leftbraceunder: "M0 6l6-6h17c12.688 0 19.313.3 20 1 4 4 7.313 8.3 10 13\n 35.313 51.3 80.813 93.8 136.5 127.5 55.688 33.7 117.188 55.8 184.5 66.5.688\n 0 2 .3 4 1 18.688 2.7 76 4.3 172 5h399450v120H429l-6-1c-124.688-8-235-61.7\n-331-161C60.687 138.7 32.312 99.3 7 54L0 41V6z",
-  // overgroup is from the MnSymbol package (public domain)
-  leftgroup: "M400000 80\nH435C64 80 168.3 229.4 21 260c-5.9 1.2-18 0-18 0-2 0-3-1-3-3v-38C76 61 257 0\n 435 0h399565z",
-  leftgroupunder: "M400000 262\nH435C64 262 168.3 112.6 21 82c-5.9-1.2-18 0-18 0-2 0-3 1-3 3v38c76 158 257 219\n 435 219h399565z",
-  // Harpoons are from glyph U+21BD in font KaTeX Main
-  leftharpoon: "M0 267c.7 5.3 3 10 7 14h399993v-40H93c3.3\n-3.3 10.2-9.5 20.5-18.5s17.8-15.8 22.5-20.5c50.7-52 88-110.3 112-175 4-11.3 5\n-18.3 3-21-1.3-4-7.3-6-18-6-8 0-13 .7-15 2s-4.7 6.7-8 16c-42 98.7-107.3 174.7\n-196 228-6.7 4.7-10.7 8-12 10-1.3 2-2 5.7-2 11zm100-26v40h399900v-40z",
-  leftharpoonplus: "M0 267c.7 5.3 3 10 7 14h399993v-40H93c3.3-3.3 10.2-9.5\n 20.5-18.5s17.8-15.8 22.5-20.5c50.7-52 88-110.3 112-175 4-11.3 5-18.3 3-21-1.3\n-4-7.3-6-18-6-8 0-13 .7-15 2s-4.7 6.7-8 16c-42 98.7-107.3 174.7-196 228-6.7 4.7\n-10.7 8-12 10-1.3 2-2 5.7-2 11zm100-26v40h399900v-40zM0 435v40h400000v-40z\nm0 0v40h400000v-40z",
-  leftharpoondown: "M7 241c-4 4-6.333 8.667-7 14 0 5.333.667 9 2 11s5.333\n 5.333 12 10c90.667 54 156 130 196 228 3.333 10.667 6.333 16.333 9 17 2 .667 5\n 1 9 1h5c10.667 0 16.667-2 18-6 2-2.667 1-9.667-3-21-32-87.333-82.667-157.667\n-152-211l-3-3h399907v-40zM93 281 H400000 v-40L7 241z",
-  leftharpoondownplus: "M7 435c-4 4-6.3 8.7-7 14 0 5.3.7 9 2 11s5.3 5.3 12\n 10c90.7 54 156 130 196 228 3.3 10.7 6.3 16.3 9 17 2 .7 5 1 9 1h5c10.7 0 16.7\n-2 18-6 2-2.7 1-9.7-3-21-32-87.3-82.7-157.7-152-211l-3-3h399907v-40H7zm93 0\nv40h399900v-40zM0 241v40h399900v-40zm0 0v40h399900v-40z",
-  // hook is from glyph U+21A9 in font KaTeX Main
-  lefthook: "M400000 281 H103s-33-11.2-61-33.5S0 197.3 0 164s14.2-61.2 42.5\n-83.5C70.8 58.2 104 47 142 47 c16.7 0 25 6.7 25 20 0 12-8.7 18.7-26 20-40 3.3\n-68.7 15.7-86 37-10 12-15 25.3-15 40 0 22.7 9.8 40.7 29.5 54 19.7 13.3 43.5 21\n 71.5 23h399859zM103 281v-40h399897v40z",
-  leftlinesegment: "M40 281 V428 H0 V94 H40 V241 H400000 v40z\nM40 281 V428 H0 V94 H40 V241 H400000 v40z",
-  leftmapsto: "M40 281 V448H0V74H40V241H400000v40z\nM40 281 V448H0V74H40V241H400000v40z",
-  // tofrom is from glyph U+21C4 in font KaTeX AMS Regular
-  leftToFrom: "M0 147h400000v40H0zm0 214c68 40 115.7 95.7 143 167h22c15.3 0 23\n-.3 23-1 0-1.3-5.3-13.7-16-37-18-35.3-41.3-69-70-101l-7-8h399905v-40H95l7-8\nc28.7-32 52-65.7 70-101 10.7-23.3 16-35.7 16-37 0-.7-7.7-1-23-1h-22C115.7 265.3\n 68 321 0 361zm0-174v-40h399900v40zm100 154v40h399900v-40z",
-  longequal: "M0 50 h400000 v40H0z m0 194h40000v40H0z\nM0 50 h400000 v40H0z m0 194h40000v40H0z",
-  midbrace: "M200428 334\nc-100.7-8.3-195.3-44-280-108-55.3-42-101.7-93-139-153l-9-14c-2.7 4-5.7 8.7-9 14\n-53.3 86.7-123.7 153-211 199-66.7 36-137.3 56.3-212 62H0V214h199568c178.3-11.7\n 311.7-78.3 403-201 6-8 9.7-12 11-12 .7-.7 6.7-1 18-1s17.3.3 18 1c1.3 0 5 4 11\n 12 44.7 59.3 101.3 106.3 170 141s145.3 54.3 229 60h199572v120z",
-  midbraceunder: "M199572 214\nc100.7 8.3 195.3 44 280 108 55.3 42 101.7 93 139 153l9 14c2.7-4 5.7-8.7 9-14\n 53.3-86.7 123.7-153 211-199 66.7-36 137.3-56.3 212-62h199568v120H200432c-178.3\n 11.7-311.7 78.3-403 201-6 8-9.7 12-11 12-.7.7-6.7 1-18 1s-17.3-.3-18-1c-1.3 0\n-5-4-11-12-44.7-59.3-101.3-106.3-170-141s-145.3-54.3-229-60H0V214z",
-  oiintSize1: "M512.6 71.6c272.6 0 320.3 106.8 320.3 178.2 0 70.8-47.7 177.6\n-320.3 177.6S193.1 320.6 193.1 249.8c0-71.4 46.9-178.2 319.5-178.2z\nm368.1 178.2c0-86.4-60.9-215.4-368.1-215.4-306.4 0-367.3 129-367.3 215.4 0 85.8\n60.9 214.8 367.3 214.8 307.2 0 368.1-129 368.1-214.8z",
-  oiintSize2: "M757.8 100.1c384.7 0 451.1 137.6 451.1 230 0 91.3-66.4 228.8\n-451.1 228.8-386.3 0-452.7-137.5-452.7-228.8 0-92.4 66.4-230 452.7-230z\nm502.4 230c0-111.2-82.4-277.2-502.4-277.2s-504 166-504 277.2\nc0 110 84 276 504 276s502.4-166 502.4-276z",
-  oiiintSize1: "M681.4 71.6c408.9 0 480.5 106.8 480.5 178.2 0 70.8-71.6 177.6\n-480.5 177.6S202.1 320.6 202.1 249.8c0-71.4 70.5-178.2 479.3-178.2z\nm525.8 178.2c0-86.4-86.8-215.4-525.7-215.4-437.9 0-524.7 129-524.7 215.4 0\n85.8 86.8 214.8 524.7 214.8 438.9 0 525.7-129 525.7-214.8z",
-  oiiintSize2: "M1021.2 53c603.6 0 707.8 165.8 707.8 277.2 0 110-104.2 275.8\n-707.8 275.8-606 0-710.2-165.8-710.2-275.8C311 218.8 415.2 53 1021.2 53z\nm770.4 277.1c0-131.2-126.4-327.6-770.5-327.6S248.4 198.9 248.4 330.1\nc0 130 128.8 326.4 772.7 326.4s770.5-196.4 770.5-326.4z",
-  rightarrow: "M0 241v40h399891c-47.3 35.3-84 78-110 128\n-16.7 32-27.7 63.7-33 95 0 1.3-.2 2.7-.5 4-.3 1.3-.5 2.3-.5 3 0 7.3 6.7 11 20\n 11 8 0 13.2-.8 15.5-2.5 2.3-1.7 4.2-5.5 5.5-11.5 2-13.3 5.7-27 11-41 14.7-44.7\n 39-84.5 73-119.5s73.7-60.2 119-75.5c6-2 9-5.7 9-11s-3-9-9-11c-45.3-15.3-85\n-40.5-119-75.5s-58.3-74.8-73-119.5c-4.7-14-8.3-27.3-11-40-1.3-6.7-3.2-10.8-5.5\n-12.5-2.3-1.7-7.5-2.5-15.5-2.5-14 0-21 3.7-21 11 0 2 2 10.3 6 25 20.7 83.3 67\n 151.7 139 205zm0 0v40h399900v-40z",
-  rightbrace: "M400000 542l\n-6 6h-17c-12.7 0-19.3-.3-20-1-4-4-7.3-8.3-10-13-35.3-51.3-80.8-93.8-136.5-127.5\ns-117.2-55.8-184.5-66.5c-.7 0-2-.3-4-1-18.7-2.7-76-4.3-172-5H0V214h399571l6 1\nc124.7 8 235 61.7 331 161 31.3 33.3 59.7 72.7 85 118l7 13v35z",
-  rightbraceunder: "M399994 0l6 6v35l-6 11c-56 104-135.3 181.3-238 232-57.3\n 28.7-117 45-179 50H-300V214h399897c43.3-7 81-15 113-26 100.7-33 179.7-91 237\n-174 2.7-5 6-9 10-13 .7-1 7.3-1 20-1h17z",
-  rightgroup: "M0 80h399565c371 0 266.7 149.4 414 180 5.9 1.2 18 0 18 0 2 0\n 3-1 3-3v-38c-76-158-257-219-435-219H0z",
-  rightgroupunder: "M0 262h399565c371 0 266.7-149.4 414-180 5.9-1.2 18 0 18\n 0 2 0 3 1 3 3v38c-76 158-257 219-435 219H0z",
-  rightharpoon: "M0 241v40h399993c4.7-4.7 7-9.3 7-14 0-9.3\n-3.7-15.3-11-18-92.7-56.7-159-133.7-199-231-3.3-9.3-6-14.7-8-16-2-1.3-7-2-15-2\n-10.7 0-16.7 2-18 6-2 2.7-1 9.7 3 21 15.3 42 36.7 81.8 64 119.5 27.3 37.7 58\n 69.2 92 94.5zm0 0v40h399900v-40z",
-  rightharpoonplus: "M0 241v40h399993c4.7-4.7 7-9.3 7-14 0-9.3-3.7-15.3-11\n-18-92.7-56.7-159-133.7-199-231-3.3-9.3-6-14.7-8-16-2-1.3-7-2-15-2-10.7 0-16.7\n 2-18 6-2 2.7-1 9.7 3 21 15.3 42 36.7 81.8 64 119.5 27.3 37.7 58 69.2 92 94.5z\nm0 0v40h399900v-40z m100 194v40h399900v-40zm0 0v40h399900v-40z",
-  rightharpoondown: "M399747 511c0 7.3 6.7 11 20 11 8 0 13-.8 15-2.5s4.7-6.8\n 8-15.5c40-94 99.3-166.3 178-217 13.3-8 20.3-12.3 21-13 5.3-3.3 8.5-5.8 9.5\n-7.5 1-1.7 1.5-5.2 1.5-10.5s-2.3-10.3-7-15H0v40h399908c-34 25.3-64.7 57-92 95\n-27.3 38-48.7 77.7-64 119-3.3 8.7-5 14-5 16zM0 241v40h399900v-40z",
-  rightharpoondownplus: "M399747 705c0 7.3 6.7 11 20 11 8 0 13-.8\n 15-2.5s4.7-6.8 8-15.5c40-94 99.3-166.3 178-217 13.3-8 20.3-12.3 21-13 5.3-3.3\n 8.5-5.8 9.5-7.5 1-1.7 1.5-5.2 1.5-10.5s-2.3-10.3-7-15H0v40h399908c-34 25.3\n-64.7 57-92 95-27.3 38-48.7 77.7-64 119-3.3 8.7-5 14-5 16zM0 435v40h399900v-40z\nm0-194v40h400000v-40zm0 0v40h400000v-40z",
-  righthook: "M399859 241c-764 0 0 0 0 0 40-3.3 68.7-15.7 86-37 10-12 15-25.3\n 15-40 0-22.7-9.8-40.7-29.5-54-19.7-13.3-43.5-21-71.5-23-17.3-1.3-26-8-26-20 0\n-13.3 8.7-20 26-20 38 0 71 11.2 99 33.5 0 0 7 5.6 21 16.7 14 11.2 21 33.5 21\n 66.8s-14 61.2-42 83.5c-28 22.3-61 33.5-99 33.5L0 241z M0 281v-40h399859v40z",
-  rightlinesegment: "M399960 241 V94 h40 V428 h-40 V281 H0 v-40z\nM399960 241 V94 h40 V428 h-40 V281 H0 v-40z",
-  rightToFrom: "M400000 167c-70.7-42-118-97.7-142-167h-23c-15.3 0-23 .3-23\n 1 0 1.3 5.3 13.7 16 37 18 35.3 41.3 69 70 101l7 8H0v40h399905l-7 8c-28.7 32\n-52 65.7-70 101-10.7 23.3-16 35.7-16 37 0 .7 7.7 1 23 1h23c24-69.3 71.3-125 142\n-167z M100 147v40h399900v-40zM0 341v40h399900v-40z",
-  // twoheadleftarrow is from glyph U+219E in font KaTeX AMS Regular
-  twoheadleftarrow: "M0 167c68 40\n 115.7 95.7 143 167h22c15.3 0 23-.3 23-1 0-1.3-5.3-13.7-16-37-18-35.3-41.3-69\n-70-101l-7-8h125l9 7c50.7 39.3 85 86 103 140h46c0-4.7-6.3-18.7-19-42-18-35.3\n-40-67.3-66-96l-9-9h399716v-40H284l9-9c26-28.7 48-60.7 66-96 12.7-23.333 19\n-37.333 19-42h-46c-18 54-52.3 100.7-103 140l-9 7H95l7-8c28.7-32 52-65.7 70-101\n 10.7-23.333 16-35.7 16-37 0-.7-7.7-1-23-1h-22C115.7 71.3 68 127 0 167z",
-  twoheadrightarrow: "M400000 167\nc-68-40-115.7-95.7-143-167h-22c-15.3 0-23 .3-23 1 0 1.3 5.3 13.7 16 37 18 35.3\n 41.3 69 70 101l7 8h-125l-9-7c-50.7-39.3-85-86-103-140h-46c0 4.7 6.3 18.7 19 42\n 18 35.3 40 67.3 66 96l9 9H0v40h399716l-9 9c-26 28.7-48 60.7-66 96-12.7 23.333\n-19 37.333-19 42h46c18-54 52.3-100.7 103-140l9-7h125l-7 8c-28.7 32-52 65.7-70\n 101-10.7 23.333-16 35.7-16 37 0 .7 7.7 1 23 1h22c27.3-71.3 75-127 143-167z",
-  // tilde1 is a modified version of a glyph from the MnSymbol package
-  tilde1: "M200 55.538c-77 0-168 73.953-177 73.953-3 0-7\n-2.175-9-5.437L2 97c-1-2-2-4-2-6 0-4 2-7 5-9l20-12C116 12 171 0 207 0c86 0\n 114 68 191 68 78 0 168-68 177-68 4 0 7 2 9 5l12 19c1 2.175 2 4.35 2 6.525 0\n 4.35-2 7.613-5 9.788l-19 13.05c-92 63.077-116.937 75.308-183 76.128\n-68.267.847-113-73.952-191-73.952z",
-  // ditto tilde2, tilde3, & tilde4
-  tilde2: "M344 55.266c-142 0-300.638 81.316-311.5 86.418\n-8.01 3.762-22.5 10.91-23.5 5.562L1 120c-1-2-1-3-1-4 0-5 3-9 8-10l18.4-9C160.9\n 31.9 283 0 358 0c148 0 188 122 331 122s314-97 326-97c4 0 8 2 10 7l7 21.114\nc1 2.14 1 3.21 1 4.28 0 5.347-3 9.626-7 10.696l-22.3 12.622C852.6 158.372 751\n 181.476 676 181.476c-149 0-189-126.21-332-126.21z",
-  tilde3: "M786 59C457 59 32 175.242 13 175.242c-6 0-10-3.457\n-11-10.37L.15 138c-1-7 3-12 10-13l19.2-6.4C378.4 40.7 634.3 0 804.3 0c337 0\n 411.8 157 746.8 157 328 0 754-112 773-112 5 0 10 3 11 9l1 14.075c1 8.066-.697\n 16.595-6.697 17.492l-21.052 7.31c-367.9 98.146-609.15 122.696-778.15 122.696\n -338 0-409-156.573-744-156.573z",
-  tilde4: "M786 58C457 58 32 177.487 13 177.487c-6 0-10-3.345\n-11-10.035L.15 143c-1-7 3-12 10-13l22-6.7C381.2 35 637.15 0 807.15 0c337 0 409\n 177 744 177 328 0 754-127 773-127 5 0 10 3 11 9l1 14.794c1 7.805-3 13.38-9\n 14.495l-20.7 5.574c-366.85 99.79-607.3 139.372-776.3 139.372-338 0-409\n -175.236-744-175.236z",
-  // vec is from glyph U+20D7 in font KaTeX Main
-  vec: "M377 20c0-5.333 1.833-10 5.5-14S391 0 397 0c4.667 0 8.667 1.667 12 5\n3.333 2.667 6.667 9 10 19 6.667 24.667 20.333 43.667 41 57 7.333 4.667 11\n10.667 11 18 0 6-1 10-3 12s-6.667 5-14 9c-28.667 14.667-53.667 35.667-75 63\n-1.333 1.333-3.167 3.5-5.5 6.5s-4 4.833-5 5.5c-1 .667-2.5 1.333-4.5 2s-4.333 1\n-7 1c-4.667 0-9.167-1.833-13.5-5.5S337 184 337 178c0-12.667 15.667-32.333 47-59\nH213l-171-1c-8.667-6-13-12.333-13-19 0-4.667 4.333-11.333 13-20h359\nc-16-25.333-24-45-24-59z",
-  // widehat1 is a modified version of a glyph from the MnSymbol package
-  widehat1: "M529 0h5l519 115c5 1 9 5 9 10 0 1-1 2-1 3l-4 22\nc-1 5-5 9-11 9h-2L532 67 19 159h-2c-5 0-9-4-11-9l-5-22c-1-6 2-12 8-13z",
-  // ditto widehat2, widehat3, & widehat4
-  widehat2: "M1181 0h2l1171 176c6 0 10 5 10 11l-2 23c-1 6-5 10\n-11 10h-1L1182 67 15 220h-1c-6 0-10-4-11-10l-2-23c-1-6 4-11 10-11z",
-  widehat3: "M1181 0h2l1171 236c6 0 10 5 10 11l-2 23c-1 6-5 10\n-11 10h-1L1182 67 15 280h-1c-6 0-10-4-11-10l-2-23c-1-6 4-11 10-11z",
-  widehat4: "M1181 0h2l1171 296c6 0 10 5 10 11l-2 23c-1 6-5 10\n-11 10h-1L1182 67 15 340h-1c-6 0-10-4-11-10l-2-23c-1-6 4-11 10-11z",
-  // widecheck paths are all inverted versions of widehat
-  widecheck1: "M529,159h5l519,-115c5,-1,9,-5,9,-10c0,-1,-1,-2,-1,-3l-4,-22c-1,\n-5,-5,-9,-11,-9h-2l-512,92l-513,-92h-2c-5,0,-9,4,-11,9l-5,22c-1,6,2,12,8,13z",
-  widecheck2: "M1181,220h2l1171,-176c6,0,10,-5,10,-11l-2,-23c-1,-6,-5,-10,\n-11,-10h-1l-1168,153l-1167,-153h-1c-6,0,-10,4,-11,10l-2,23c-1,6,4,11,10,11z",
-  widecheck3: "M1181,280h2l1171,-236c6,0,10,-5,10,-11l-2,-23c-1,-6,-5,-10,\n-11,-10h-1l-1168,213l-1167,-213h-1c-6,0,-10,4,-11,10l-2,23c-1,6,4,11,10,11z",
-  widecheck4: "M1181,340h2l1171,-296c6,0,10,-5,10,-11l-2,-23c-1,-6,-5,-10,\n-11,-10h-1l-1168,273l-1167,-273h-1c-6,0,-10,4,-11,10l-2,23c-1,6,4,11,10,11z",
-  // The next ten paths support reaction arrows from the mhchem package.
-  // Arrows for \ce{<-->} are offset from xAxis by 0.22ex, per mhchem in LaTeX
-  // baraboveleftarrow is mostly from from glyph U+2190 in font KaTeX Main
-  baraboveleftarrow: "M400000 620h-399890l3 -3c68.7 -52.7 113.7 -120 135 -202\nc4 -14.7 6 -23 6 -25c0 -7.3 -7 -11 -21 -11c-8 0 -13.2 0.8 -15.5 2.5\nc-2.3 1.7 -4.2 5.8 -5.5 12.5c-1.3 4.7 -2.7 10.3 -4 17c-12 48.7 -34.8 92 -68.5 130\ns-74.2 66.3 -121.5 85c-10 4 -16 7.7 -18 11c0 8.7 6 14.3 18 17c47.3 18.7 87.8 47\n121.5 85s56.5 81.3 68.5 130c0.7 2 1.3 5 2 9s1.2 6.7 1.5 8c0.3 1.3 1 3.3 2 6\ns2.2 4.5 3.5 5.5c1.3 1 3.3 1.8 6 2.5s6 1 10 1c14 0 21 -3.7 21 -11\nc0 -2 -2 -10.3 -6 -25c-20 -79.3 -65 -146.7 -135 -202l-3 -3h399890z\nM100 620v40h399900v-40z M0 241v40h399900v-40zM0 241v40h399900v-40z",
-  // rightarrowabovebar is mostly from glyph U+2192, KaTeX Main
-  rightarrowabovebar: "M0 241v40h399891c-47.3 35.3-84 78-110 128-16.7 32\n-27.7 63.7-33 95 0 1.3-.2 2.7-.5 4-.3 1.3-.5 2.3-.5 3 0 7.3 6.7 11 20 11 8 0\n13.2-.8 15.5-2.5 2.3-1.7 4.2-5.5 5.5-11.5 2-13.3 5.7-27 11-41 14.7-44.7 39\n-84.5 73-119.5s73.7-60.2 119-75.5c6-2 9-5.7 9-11s-3-9-9-11c-45.3-15.3-85-40.5\n-119-75.5s-58.3-74.8-73-119.5c-4.7-14-8.3-27.3-11-40-1.3-6.7-3.2-10.8-5.5\n-12.5-2.3-1.7-7.5-2.5-15.5-2.5-14 0-21 3.7-21 11 0 2 2 10.3 6 25 20.7 83.3 67\n151.7 139 205zm96 379h399894v40H0zm0 0h399904v40H0z",
-  // The short left harpoon has 0.5em (i.e. 500 units) kern on the left end.
-  // Ref from mhchem.sty: \rlap{\raisebox{-.22ex}{$\kern0.5em
-  baraboveshortleftharpoon: "M507,435c-4,4,-6.3,8.7,-7,14c0,5.3,0.7,9,2,11\nc1.3,2,5.3,5.3,12,10c90.7,54,156,130,196,228c3.3,10.7,6.3,16.3,9,17\nc2,0.7,5,1,9,1c0,0,5,0,5,0c10.7,0,16.7,-2,18,-6c2,-2.7,1,-9.7,-3,-21\nc-32,-87.3,-82.7,-157.7,-152,-211c0,0,-3,-3,-3,-3l399351,0l0,-40\nc-398570,0,-399437,0,-399437,0z M593 435 v40 H399500 v-40z\nM0 281 v-40 H399908 v40z M0 281 v-40 H399908 v40z",
-  rightharpoonaboveshortbar: "M0,241 l0,40c399126,0,399993,0,399993,0\nc4.7,-4.7,7,-9.3,7,-14c0,-9.3,-3.7,-15.3,-11,-18c-92.7,-56.7,-159,-133.7,-199,\n-231c-3.3,-9.3,-6,-14.7,-8,-16c-2,-1.3,-7,-2,-15,-2c-10.7,0,-16.7,2,-18,6\nc-2,2.7,-1,9.7,3,21c15.3,42,36.7,81.8,64,119.5c27.3,37.7,58,69.2,92,94.5z\nM0 241 v40 H399908 v-40z M0 475 v-40 H399500 v40z M0 475 v-40 H399500 v40z",
-  shortbaraboveleftharpoon: "M7,435c-4,4,-6.3,8.7,-7,14c0,5.3,0.7,9,2,11\nc1.3,2,5.3,5.3,12,10c90.7,54,156,130,196,228c3.3,10.7,6.3,16.3,9,17c2,0.7,5,1,9,\n1c0,0,5,0,5,0c10.7,0,16.7,-2,18,-6c2,-2.7,1,-9.7,-3,-21c-32,-87.3,-82.7,-157.7,\n-152,-211c0,0,-3,-3,-3,-3l399907,0l0,-40c-399126,0,-399993,0,-399993,0z\nM93 435 v40 H400000 v-40z M500 241 v40 H400000 v-40z M500 241 v40 H400000 v-40z",
-  shortrightharpoonabovebar: "M53,241l0,40c398570,0,399437,0,399437,0\nc4.7,-4.7,7,-9.3,7,-14c0,-9.3,-3.7,-15.3,-11,-18c-92.7,-56.7,-159,-133.7,-199,\n-231c-3.3,-9.3,-6,-14.7,-8,-16c-2,-1.3,-7,-2,-15,-2c-10.7,0,-16.7,2,-18,6\nc-2,2.7,-1,9.7,3,21c15.3,42,36.7,81.8,64,119.5c27.3,37.7,58,69.2,92,94.5z\nM500 241 v40 H399408 v-40z M500 435 v40 H400000 v-40z"
-};
-// CONCATENATED MODULE: ./src/tree.js
-
-
-/**
- * This node represents a document fragment, which contains elements, but when
- * placed into the DOM doesn't have any representation itself. It only contains
- * children and doesn't have any DOM node properties.
- */
-var tree_DocumentFragment =
-/*#__PURE__*/
-function () {
-  // HtmlDomNode
-  // Never used; needed for satisfying interface.
-  function DocumentFragment(children) {
-    this.children = void 0;
-    this.classes = void 0;
-    this.height = void 0;
-    this.depth = void 0;
-    this.maxFontSize = void 0;
-    this.style = void 0;
-    this.children = children;
-    this.classes = [];
-    this.height = 0;
-    this.depth = 0;
-    this.maxFontSize = 0;
-    this.style = {};
-  }
-
-  var _proto = DocumentFragment.prototype;
-
-  _proto.hasClass = function hasClass(className) {
-    return utils.contains(this.classes, className);
-  }
-  /** Convert the fragment into a node. */
-  ;
-
-  _proto.toNode = function toNode() {
-    var frag = document.createDocumentFragment();
-
-    for (var i = 0; i < this.children.length; i++) {
-      frag.appendChild(this.children[i].toNode());
-    }
-
-    return frag;
-  }
-  /** Convert the fragment into HTML markup. */
-  ;
-
-  _proto.toMarkup = function toMarkup() {
-    var markup = ""; // Simply concatenate the markup for the children together.
-
-    for (var i = 0; i < this.children.length; i++) {
-      markup += this.children[i].toMarkup();
-    }
-
-    return markup;
-  }
-  /**
-   * Converts the math node into a string, similar to innerText. Applies to
-   * MathDomNode's only.
-   */
-  ;
-
-  _proto.toText = function toText() {
-    // To avoid this, we would subclass documentFragment separately for
-    // MathML, but polyfills for subclassing is expensive per PR 1469.
-    // $FlowFixMe: Only works for ChildType = MathDomNode.
-    var toText = function toText(child) {
-      return child.toText();
-    };
-
-    return this.children.map(toText).join("");
-  };
-
-  return DocumentFragment;
-}();
-// CONCATENATED MODULE: ./src/domTree.js
-/**
- * These objects store the data about the DOM nodes we create, as well as some
- * extra data. They can then be transformed into real DOM nodes with the
- * `toNode` function or HTML markup using `toMarkup`. They are useful for both
- * storing extra properties on the nodes, as well as providing a way to easily
- * work with the DOM.
- *
- * Similar functions for working with MathML nodes exist in mathMLTree.js.
- *
- * TODO: refactor `span` and `anchor` into common superclass when
- * target environments support class inheritance
- */
-
-
-
-
-
-/**
- * Create an HTML className based on a list of classes. In addition to joining
- * with spaces, we also remove empty classes.
- */
-var createClass = function createClass(classes) {
-  return classes.filter(function (cls) {
-    return cls;
-  }).join(" ");
-};
-
-var initNode = function initNode(classes, options, style) {
-  this.classes = classes || [];
-  this.attributes = {};
-  this.height = 0;
-  this.depth = 0;
-  this.maxFontSize = 0;
-  this.style = style || {};
-
-  if (options) {
-    if (options.style.isTight()) {
-      this.classes.push("mtight");
-    }
-
-    var color = options.getColor();
-
-    if (color) {
-      this.style.color = color;
-    }
-  }
-};
-/**
- * Convert into an HTML node
- */
-
-
-var _toNode = function toNode(tagName) {
-  var node = document.createElement(tagName); // Apply the class
-
-  node.className = createClass(this.classes); // Apply inline styles
-
-  for (var style in this.style) {
-    if (this.style.hasOwnProperty(style)) {
-      // $FlowFixMe Flow doesn't seem to understand span.style's type.
-      node.style[style] = this.style[style];
-    }
-  } // Apply attributes
-
-
-  for (var attr in this.attributes) {
-    if (this.attributes.hasOwnProperty(attr)) {
-      node.setAttribute(attr, this.attributes[attr]);
-    }
-  } // Append the children, also as HTML nodes
-
-
-  for (var i = 0; i < this.children.length; i++) {
-    node.appendChild(this.children[i].toNode());
-  }
-
-  return node;
-};
-/**
- * Convert into an HTML markup string
- */
-
-
-var _toMarkup = function toMarkup(tagName) {
-  var markup = "<" + tagName; // Add the class
-
-  if (this.classes.length) {
-    markup += " class=\"" + utils.escape(createClass(this.classes)) + "\"";
-  }
-
-  var styles = ""; // Add the styles, after hyphenation
-
-  for (var style in this.style) {
-    if (this.style.hasOwnProperty(style)) {
-      styles += utils.hyphenate(style) + ":" + this.style[style] + ";";
-    }
-  }
-
-  if (styles) {
-    markup += " style=\"" + utils.escape(styles) + "\"";
-  } // Add the attributes
-
-
-  for (var attr in this.attributes) {
-    if (this.attributes.hasOwnProperty(attr)) {
-      markup += " " + attr + "=\"" + utils.escape(this.attributes[attr]) + "\"";
-    }
-  }
-
-  markup += ">"; // Add the markup of the children, also as markup
-
-  for (var i = 0; i < this.children.length; i++) {
-    markup += this.children[i].toMarkup();
-  }
-
-  markup += "</" + tagName + ">";
-  return markup;
-}; // Making the type below exact with all optional fields doesn't work due to
-// - https://github.com/facebook/flow/issues/4582
-// - https://github.com/facebook/flow/issues/5688
-// However, since *all* fields are optional, $Shape<> works as suggested in 5688
-// above.
-// This type does not include all CSS properties. Additional properties should
-// be added as needed.
-
-
-/**
- * This node represents a span node, with a className, a list of children, and
- * an inline style. It also contains information about its height, depth, and
- * maxFontSize.
- *
- * Represents two types with different uses: SvgSpan to wrap an SVG and DomSpan
- * otherwise. This typesafety is important when HTML builders access a span's
- * children.
- */
-var domTree_Span =
-/*#__PURE__*/
-function () {
-  function Span(classes, children, options, style) {
-    this.children = void 0;
-    this.attributes = void 0;
-    this.classes = void 0;
-    this.height = void 0;
-    this.depth = void 0;
-    this.width = void 0;
-    this.maxFontSize = void 0;
-    this.style = void 0;
-    initNode.call(this, classes, options, style);
-    this.children = children || [];
-  }
-  /**
-   * Sets an arbitrary attribute on the span. Warning: use this wisely. Not
-   * all browsers support attributes the same, and having too many custom
-   * attributes is probably bad.
-   */
-
-
-  var _proto = Span.prototype;
-
-  _proto.setAttribute = function setAttribute(attribute, value) {
-    this.attributes[attribute] = value;
-  };
-
-  _proto.hasClass = function hasClass(className) {
-    return utils.contains(this.classes, className);
-  };
-
-  _proto.toNode = function toNode() {
-    return _toNode.call(this, "span");
-  };
-
-  _proto.toMarkup = function toMarkup() {
-    return _toMarkup.call(this, "span");
-  };
-
-  return Span;
-}();
-/**
- * This node represents an anchor (<a>) element with a hyperlink.  See `span`
- * for further details.
- */
-
-var domTree_Anchor =
-/*#__PURE__*/
-function () {
-  function Anchor(href, classes, children, options) {
-    this.children = void 0;
-    this.attributes = void 0;
-    this.classes = void 0;
-    this.height = void 0;
-    this.depth = void 0;
-    this.maxFontSize = void 0;
-    this.style = void 0;
-    initNode.call(this, classes, options);
-    this.children = children || [];
-    this.setAttribute('href', href);
-  }
-
-  var _proto2 = Anchor.prototype;
-
-  _proto2.setAttribute = function setAttribute(attribute, value) {
-    this.attributes[attribute] = value;
-  };
-
-  _proto2.hasClass = function hasClass(className) {
-    return utils.contains(this.classes, className);
-  };
-
-  _proto2.toNode = function toNode() {
-    return _toNode.call(this, "a");
-  };
-
-  _proto2.toMarkup = function toMarkup() {
-    return _toMarkup.call(this, "a");
-  };
-
-  return Anchor;
-}();
-/**
- * This node represents an image embed (<img>) element.
- */
-
-var domTree_Img =
-/*#__PURE__*/
-function () {
-  function Img(src, alt, style) {
-    this.src = void 0;
-    this.alt = void 0;
-    this.classes = void 0;
-    this.height = void 0;
-    this.depth = void 0;
-    this.maxFontSize = void 0;
-    this.style = void 0;
-    this.alt = alt;
-    this.src = src;
-    this.classes = ["mord"];
-    this.style = style;
-  }
-
-  var _proto3 = Img.prototype;
-
-  _proto3.hasClass = function hasClass(className) {
-    return utils.contains(this.classes, className);
-  };
-
-  _proto3.toNode = function toNode() {
-    var node = document.createElement("img");
-    node.src = this.src;
-    node.alt = this.alt;
-    node.className = "mord"; // Apply inline styles
-
-    for (var style in this.style) {
-      if (this.style.hasOwnProperty(style)) {
-        // $FlowFixMe
-        node.style[style] = this.style[style];
-      }
-    }
-
-    return node;
-  };
-
-  _proto3.toMarkup = function toMarkup() {
-    var markup = "<img  src='" + this.src + " 'alt='" + this.alt + "' "; // Add the styles, after hyphenation
-
-    var styles = "";
-
-    for (var style in this.style) {
-      if (this.style.hasOwnProperty(style)) {
-        styles += utils.hyphenate(style) + ":" + this.style[style] + ";";
-      }
-    }
-
-    if (styles) {
-      markup += " style=\"" + utils.escape(styles) + "\"";
-    }
-
-    markup += "'/>";
-    return markup;
-  };
-
-  return Img;
-}();
-var iCombinations = {
-  'î': "\u0131\u0302",
-  'ï': "\u0131\u0308",
-  'í': "\u0131\u0301",
-  // 'ī': '\u0131\u0304', // enable when we add Extended Latin
-  'ì': "\u0131\u0300"
-};
-/**
- * A symbol node contains information about a single symbol. It either renders
- * to a single text node, or a span with a single text node in it, depending on
- * whether it has CSS classes, styles, or needs italic correction.
- */
-
-var domTree_SymbolNode =
-/*#__PURE__*/
-function () {
-  function SymbolNode(text, height, depth, italic, skew, width, classes, style) {
-    this.text = void 0;
-    this.height = void 0;
-    this.depth = void 0;
-    this.italic = void 0;
-    this.skew = void 0;
-    this.width = void 0;
-    this.maxFontSize = void 0;
-    this.classes = void 0;
-    this.style = void 0;
-    this.text = text;
-    this.height = height || 0;
-    this.depth = depth || 0;
-    this.italic = italic || 0;
-    this.skew = skew || 0;
-    this.width = width || 0;
-    this.classes = classes || [];
-    this.style = style || {};
-    this.maxFontSize = 0; // Mark text from non-Latin scripts with specific classes so that we
-    // can specify which fonts to use.  This allows us to render these
-    // characters with a serif font in situations where the browser would
-    // either default to a sans serif or render a placeholder character.
-    // We use CSS class names like cjk_fallback, hangul_fallback and
-    // brahmic_fallback. See ./unicodeScripts.js for the set of possible
-    // script names
-
-    var script = scriptFromCodepoint(this.text.charCodeAt(0));
-
-    if (script) {
-      this.classes.push(script + "_fallback");
-    }
-
-    if (/[îïíì]/.test(this.text)) {
-      // add ī when we add Extended Latin
-      this.text = iCombinations[this.text];
-    }
-  }
-
-  var _proto4 = SymbolNode.prototype;
-
-  _proto4.hasClass = function hasClass(className) {
-    return utils.contains(this.classes, className);
-  }
-  /**
-   * Creates a text node or span from a symbol node. Note that a span is only
-   * created if it is needed.
-   */
-  ;
-
-  _proto4.toNode = function toNode() {
-    var node = document.createTextNode(this.text);
-    var span = null;
-
-    if (this.italic > 0) {
-      span = document.createElement("span");
-      span.style.marginRight = this.italic + "em";
-    }
-
-    if (this.classes.length > 0) {
-      span = span || document.createElement("span");
-      span.className = createClass(this.classes);
-    }
-
-    for (var style in this.style) {
-      if (this.style.hasOwnProperty(style)) {
-        span = span || document.createElement("span"); // $FlowFixMe Flow doesn't seem to understand span.style's type.
-
-        span.style[style] = this.style[style];
-      }
-    }
-
-    if (span) {
-      span.appendChild(node);
-      return span;
-    } else {
-      return node;
-    }
-  }
-  /**
-   * Creates markup for a symbol node.
-   */
-  ;
-
-  _proto4.toMarkup = function toMarkup() {
-    // TODO(alpert): More duplication than I'd like from
-    // span.prototype.toMarkup and symbolNode.prototype.toNode...
-    var needsSpan = false;
-    var markup = "<span";
-
-    if (this.classes.length) {
-      needsSpan = true;
-      markup += " class=\"";
-      markup += utils.escape(createClass(this.classes));
-      markup += "\"";
-    }
-
-    var styles = "";
-
-    if (this.italic > 0) {
-      styles += "margin-right:" + this.italic + "em;";
-    }
-
-    for (var style in this.style) {
-      if (this.style.hasOwnProperty(style)) {
-        styles += utils.hyphenate(style) + ":" + this.style[style] + ";";
-      }
-    }
-
-    if (styles) {
-      needsSpan = true;
-      markup += " style=\"" + utils.escape(styles) + "\"";
-    }
-
-    var escaped = utils.escape(this.text);
-
-    if (needsSpan) {
-      markup += ">";
-      markup += escaped;
-      markup += "</span>";
-      return markup;
-    } else {
-      return escaped;
-    }
-  };
-
-  return SymbolNode;
-}();
-/**
- * SVG nodes are used to render stretchy wide elements.
- */
-
-var SvgNode =
-/*#__PURE__*/
-function () {
-  function SvgNode(children, attributes) {
-    this.children = void 0;
-    this.attributes = void 0;
-    this.children = children || [];
-    this.attributes = attributes || {};
-  }
-
-  var _proto5 = SvgNode.prototype;
-
-  _proto5.toNode = function toNode() {
-    var svgNS = "http://www.w3.org/2000/svg";
-    var node = document.createElementNS(svgNS, "svg"); // Apply attributes
-
-    for (var attr in this.attributes) {
-      if (Object.prototype.hasOwnProperty.call(this.attributes, attr)) {
-        node.setAttribute(attr, this.attributes[attr]);
-      }
-    }
-
-    for (var i = 0; i < this.children.length; i++) {
-      node.appendChild(this.children[i].toNode());
-    }
-
-    return node;
-  };
-
-  _proto5.toMarkup = function toMarkup() {
-    var markup = "<svg"; // Apply attributes
-
-    for (var attr in this.attributes) {
-      if (Object.prototype.hasOwnProperty.call(this.attributes, attr)) {
-        markup += " " + attr + "='" + this.attributes[attr] + "'";
-      }
-    }
-
-    markup += ">";
-
-    for (var i = 0; i < this.children.length; i++) {
-      markup += this.children[i].toMarkup();
-    }
-
-    markup += "</svg>";
-    return markup;
-  };
-
-  return SvgNode;
-}();
-var domTree_PathNode =
-/*#__PURE__*/
-function () {
-  function PathNode(pathName, alternate) {
-    this.pathName = void 0;
-    this.alternate = void 0;
-    this.pathName = pathName;
-    this.alternate = alternate; // Used only for \sqrt
-  }
-
-  var _proto6 = PathNode.prototype;
-
-  _proto6.toNode = function toNode() {
-    var svgNS = "http://www.w3.org/2000/svg";
-    var node = document.createElementNS(svgNS, "path");
-
-    if (this.alternate) {
-      node.setAttribute("d", this.alternate);
-    } else {
-      node.setAttribute("d", svgGeometry_path[this.pathName]);
-    }
-
-    return node;
-  };
-
-  _proto6.toMarkup = function toMarkup() {
-    if (this.alternate) {
-      return "<path d='" + this.alternate + "'/>";
-    } else {
-      return "<path d='" + svgGeometry_path[this.pathName] + "'/>";
-    }
-  };
-
-  return PathNode;
-}();
-var LineNode =
-/*#__PURE__*/
-function () {
-  function LineNode(attributes) {
-    this.attributes = void 0;
-    this.attributes = attributes || {};
-  }
-
-  var _proto7 = LineNode.prototype;
-
-  _proto7.toNode = function toNode() {
-    var svgNS = "http://www.w3.org/2000/svg";
-    var node = document.createElementNS(svgNS, "line"); // Apply attributes
-
-    for (var attr in this.attributes) {
-      if (Object.prototype.hasOwnProperty.call(this.attributes, attr)) {
-        node.setAttribute(attr, this.attributes[attr]);
-      }
-    }
-
-    return node;
-  };
-
-  _proto7.toMarkup = function toMarkup() {
-    var markup = "<line";
-
-    for (var attr in this.attributes) {
-      if (Object.prototype.hasOwnProperty.call(this.attributes, attr)) {
-        markup += " " + attr + "='" + this.attributes[attr] + "'";
-      }
-    }
-
-    markup += "/>";
-    return markup;
-  };
-
-  return LineNode;
-}();
-function assertSymbolDomNode(group) {
-  if (group instanceof domTree_SymbolNode) {
-    return group;
-  } else {
-    throw new Error("Expected symbolNode but got " + String(group) + ".");
-  }
-}
-function assertSpan(group) {
-  if (group instanceof domTree_Span) {
-    return group;
-  } else {
-    throw new Error("Expected span<HtmlDomNode> but got " + String(group) + ".");
-  }
-}
-// CONCATENATED MODULE: ./submodules/katex-fonts/fontMetricsData.js
-// This file is GENERATED by buildMetrics.sh. DO NOT MODIFY.
-/* harmony default export */ var fontMetricsData = ({
-  "AMS-Regular": {
-    "65": [0, 0.68889, 0, 0, 0.72222],
-    "66": [0, 0.68889, 0, 0, 0.66667],
-    "67": [0, 0.68889, 0, 0, 0.72222],
-    "68": [0, 0.68889, 0, 0, 0.72222],
-    "69": [0, 0.68889, 0, 0, 0.66667],
-    "70": [0, 0.68889, 0, 0, 0.61111],
-    "71": [0, 0.68889, 0, 0, 0.77778],
-    "72": [0, 0.68889, 0, 0, 0.77778],
-    "73": [0, 0.68889, 0, 0, 0.38889],
-    "74": [0.16667, 0.68889, 0, 0, 0.5],
-    "75": [0, 0.68889, 0, 0, 0.77778],
-    "76": [0, 0.68889, 0, 0, 0.66667],
-    "77": [0, 0.68889, 0, 0, 0.94445],
-    "78": [0, 0.68889, 0, 0, 0.72222],
-    "79": [0.16667, 0.68889, 0, 0, 0.77778],
-    "80": [0, 0.68889, 0, 0, 0.61111],
-    "81": [0.16667, 0.68889, 0, 0, 0.77778],
-    "82": [0, 0.68889, 0, 0, 0.72222],
-    "83": [0, 0.68889, 0, 0, 0.55556],
-    "84": [0, 0.68889, 0, 0, 0.66667],
-    "85": [0, 0.68889, 0, 0, 0.72222],
-    "86": [0, 0.68889, 0, 0, 0.72222],
-    "87": [0, 0.68889, 0, 0, 1.0],
-    "88": [0, 0.68889, 0, 0, 0.72222],
-    "89": [0, 0.68889, 0, 0, 0.72222],
-    "90": [0, 0.68889, 0, 0, 0.66667],
-    "107": [0, 0.68889, 0, 0, 0.55556],
-    "165": [0, 0.675, 0.025, 0, 0.75],
-    "174": [0.15559, 0.69224, 0, 0, 0.94666],
-    "240": [0, 0.68889, 0, 0, 0.55556],
-    "295": [0, 0.68889, 0, 0, 0.54028],
-    "710": [0, 0.825, 0, 0, 2.33334],
-    "732": [0, 0.9, 0, 0, 2.33334],
-    "770": [0, 0.825, 0, 0, 2.33334],
-    "771": [0, 0.9, 0, 0, 2.33334],
-    "989": [0.08167, 0.58167, 0, 0, 0.77778],
-    "1008": [0, 0.43056, 0.04028, 0, 0.66667],
-    "8245": [0, 0.54986, 0, 0, 0.275],
-    "8463": [0, 0.68889, 0, 0, 0.54028],
-    "8487": [0, 0.68889, 0, 0, 0.72222],
-    "8498": [0, 0.68889, 0, 0, 0.55556],
-    "8502": [0, 0.68889, 0, 0, 0.66667],
-    "8503": [0, 0.68889, 0, 0, 0.44445],
-    "8504": [0, 0.68889, 0, 0, 0.66667],
-    "8513": [0, 0.68889, 0, 0, 0.63889],
-    "8592": [-0.03598, 0.46402, 0, 0, 0.5],
-    "8594": [-0.03598, 0.46402, 0, 0, 0.5],
-    "8602": [-0.13313, 0.36687, 0, 0, 1.0],
-    "8603": [-0.13313, 0.36687, 0, 0, 1.0],
-    "8606": [0.01354, 0.52239, 0, 0, 1.0],
-    "8608": [0.01354, 0.52239, 0, 0, 1.0],
-    "8610": [0.01354, 0.52239, 0, 0, 1.11111],
-    "8611": [0.01354, 0.52239, 0, 0, 1.11111],
-    "8619": [0, 0.54986, 0, 0, 1.0],
-    "8620": [0, 0.54986, 0, 0, 1.0],
-    "8621": [-0.13313, 0.37788, 0, 0, 1.38889],
-    "8622": [-0.13313, 0.36687, 0, 0, 1.0],
-    "8624": [0, 0.69224, 0, 0, 0.5],
-    "8625": [0, 0.69224, 0, 0, 0.5],
-    "8630": [0, 0.43056, 0, 0, 1.0],
-    "8631": [0, 0.43056, 0, 0, 1.0],
-    "8634": [0.08198, 0.58198, 0, 0, 0.77778],
-    "8635": [0.08198, 0.58198, 0, 0, 0.77778],
-    "8638": [0.19444, 0.69224, 0, 0, 0.41667],
-    "8639": [0.19444, 0.69224, 0, 0, 0.41667],
-    "8642": [0.19444, 0.69224, 0, 0, 0.41667],
-    "8643": [0.19444, 0.69224, 0, 0, 0.41667],
-    "8644": [0.1808, 0.675, 0, 0, 1.0],
-    "8646": [0.1808, 0.675, 0, 0, 1.0],
-    "8647": [0.1808, 0.675, 0, 0, 1.0],
-    "8648": [0.19444, 0.69224, 0, 0, 0.83334],
-    "8649": [0.1808, 0.675, 0, 0, 1.0],
-    "8650": [0.19444, 0.69224, 0, 0, 0.83334],
-    "8651": [0.01354, 0.52239, 0, 0, 1.0],
-    "8652": [0.01354, 0.52239, 0, 0, 1.0],
-    "8653": [-0.13313, 0.36687, 0, 0, 1.0],
-    "8654": [-0.13313, 0.36687, 0, 0, 1.0],
-    "8655": [-0.13313, 0.36687, 0, 0, 1.0],
-    "8666": [0.13667, 0.63667, 0, 0, 1.0],
-    "8667": [0.13667, 0.63667, 0, 0, 1.0],
-    "8669": [-0.13313, 0.37788, 0, 0, 1.0],
-    "8672": [-0.064, 0.437, 0, 0, 1.334],
-    "8674": [-0.064, 0.437, 0, 0, 1.334],
-    "8705": [0, 0.825, 0, 0, 0.5],
-    "8708": [0, 0.68889, 0, 0, 0.55556],
-    "8709": [0.08167, 0.58167, 0, 0, 0.77778],
-    "8717": [0, 0.43056, 0, 0, 0.42917],
-    "8722": [-0.03598, 0.46402, 0, 0, 0.5],
-    "8724": [0.08198, 0.69224, 0, 0, 0.77778],
-    "8726": [0.08167, 0.58167, 0, 0, 0.77778],
-    "8733": [0, 0.69224, 0, 0, 0.77778],
-    "8736": [0, 0.69224, 0, 0, 0.72222],
-    "8737": [0, 0.69224, 0, 0, 0.72222],
-    "8738": [0.03517, 0.52239, 0, 0, 0.72222],
-    "8739": [0.08167, 0.58167, 0, 0, 0.22222],
-    "8740": [0.25142, 0.74111, 0, 0, 0.27778],
-    "8741": [0.08167, 0.58167, 0, 0, 0.38889],
-    "8742": [0.25142, 0.74111, 0, 0, 0.5],
-    "8756": [0, 0.69224, 0, 0, 0.66667],
-    "8757": [0, 0.69224, 0, 0, 0.66667],
-    "8764": [-0.13313, 0.36687, 0, 0, 0.77778],
-    "8765": [-0.13313, 0.37788, 0, 0, 0.77778],
-    "8769": [-0.13313, 0.36687, 0, 0, 0.77778],
-    "8770": [-0.03625, 0.46375, 0, 0, 0.77778],
-    "8774": [0.30274, 0.79383, 0, 0, 0.77778],
-    "8776": [-0.01688, 0.48312, 0, 0, 0.77778],
-    "8778": [0.08167, 0.58167, 0, 0, 0.77778],
-    "8782": [0.06062, 0.54986, 0, 0, 0.77778],
-    "8783": [0.06062, 0.54986, 0, 0, 0.77778],
-    "8785": [0.08198, 0.58198, 0, 0, 0.77778],
-    "8786": [0.08198, 0.58198, 0, 0, 0.77778],
-    "8787": [0.08198, 0.58198, 0, 0, 0.77778],
-    "8790": [0, 0.69224, 0, 0, 0.77778],
-    "8791": [0.22958, 0.72958, 0, 0, 0.77778],
-    "8796": [0.08198, 0.91667, 0, 0, 0.77778],
-    "8806": [0.25583, 0.75583, 0, 0, 0.77778],
-    "8807": [0.25583, 0.75583, 0, 0, 0.77778],
-    "8808": [0.25142, 0.75726, 0, 0, 0.77778],
-    "8809": [0.25142, 0.75726, 0, 0, 0.77778],
-    "8812": [0.25583, 0.75583, 0, 0, 0.5],
-    "8814": [0.20576, 0.70576, 0, 0, 0.77778],
-    "8815": [0.20576, 0.70576, 0, 0, 0.77778],
-    "8816": [0.30274, 0.79383, 0, 0, 0.77778],
-    "8817": [0.30274, 0.79383, 0, 0, 0.77778],
-    "8818": [0.22958, 0.72958, 0, 0, 0.77778],
-    "8819": [0.22958, 0.72958, 0, 0, 0.77778],
-    "8822": [0.1808, 0.675, 0, 0, 0.77778],
-    "8823": [0.1808, 0.675, 0, 0, 0.77778],
-    "8828": [0.13667, 0.63667, 0, 0, 0.77778],
-    "8829": [0.13667, 0.63667, 0, 0, 0.77778],
-    "8830": [0.22958, 0.72958, 0, 0, 0.77778],
-    "8831": [0.22958, 0.72958, 0, 0, 0.77778],
-    "8832": [0.20576, 0.70576, 0, 0, 0.77778],
-    "8833": [0.20576, 0.70576, 0, 0, 0.77778],
-    "8840": [0.30274, 0.79383, 0, 0, 0.77778],
-    "8841": [0.30274, 0.79383, 0, 0, 0.77778],
-    "8842": [0.13597, 0.63597, 0, 0, 0.77778],
-    "8843": [0.13597, 0.63597, 0, 0, 0.77778],
-    "8847": [0.03517, 0.54986, 0, 0, 0.77778],
-    "8848": [0.03517, 0.54986, 0, 0, 0.77778],
-    "8858": [0.08198, 0.58198, 0, 0, 0.77778],
-    "8859": [0.08198, 0.58198, 0, 0, 0.77778],
-    "8861": [0.08198, 0.58198, 0, 0, 0.77778],
-    "8862": [0, 0.675, 0, 0, 0.77778],
-    "8863": [0, 0.675, 0, 0, 0.77778],
-    "8864": [0, 0.675, 0, 0, 0.77778],
-    "8865": [0, 0.675, 0, 0, 0.77778],
-    "8872": [0, 0.69224, 0, 0, 0.61111],
-    "8873": [0, 0.69224, 0, 0, 0.72222],
-    "8874": [0, 0.69224, 0, 0, 0.88889],
-    "8876": [0, 0.68889, 0, 0, 0.61111],
-    "8877": [0, 0.68889, 0, 0, 0.61111],
-    "8878": [0, 0.68889, 0, 0, 0.72222],
-    "8879": [0, 0.68889, 0, 0, 0.72222],
-    "8882": [0.03517, 0.54986, 0, 0, 0.77778],
-    "8883": [0.03517, 0.54986, 0, 0, 0.77778],
-    "8884": [0.13667, 0.63667, 0, 0, 0.77778],
-    "8885": [0.13667, 0.63667, 0, 0, 0.77778],
-    "8888": [0, 0.54986, 0, 0, 1.11111],
-    "8890": [0.19444, 0.43056, 0, 0, 0.55556],
-    "8891": [0.19444, 0.69224, 0, 0, 0.61111],
-    "8892": [0.19444, 0.69224, 0, 0, 0.61111],
-    "8901": [0, 0.54986, 0, 0, 0.27778],
-    "8903": [0.08167, 0.58167, 0, 0, 0.77778],
-    "8905": [0.08167, 0.58167, 0, 0, 0.77778],
-    "8906": [0.08167, 0.58167, 0, 0, 0.77778],
-    "8907": [0, 0.69224, 0, 0, 0.77778],
-    "8908": [0, 0.69224, 0, 0, 0.77778],
-    "8909": [-0.03598, 0.46402, 0, 0, 0.77778],
-    "8910": [0, 0.54986, 0, 0, 0.76042],
-    "8911": [0, 0.54986, 0, 0, 0.76042],
-    "8912": [0.03517, 0.54986, 0, 0, 0.77778],
-    "8913": [0.03517, 0.54986, 0, 0, 0.77778],
-    "8914": [0, 0.54986, 0, 0, 0.66667],
-    "8915": [0, 0.54986, 0, 0, 0.66667],
-    "8916": [0, 0.69224, 0, 0, 0.66667],
-    "8918": [0.0391, 0.5391, 0, 0, 0.77778],
-    "8919": [0.0391, 0.5391, 0, 0, 0.77778],
-    "8920": [0.03517, 0.54986, 0, 0, 1.33334],
-    "8921": [0.03517, 0.54986, 0, 0, 1.33334],
-    "8922": [0.38569, 0.88569, 0, 0, 0.77778],
-    "8923": [0.38569, 0.88569, 0, 0, 0.77778],
-    "8926": [0.13667, 0.63667, 0, 0, 0.77778],
-    "8927": [0.13667, 0.63667, 0, 0, 0.77778],
-    "8928": [0.30274, 0.79383, 0, 0, 0.77778],
-    "8929": [0.30274, 0.79383, 0, 0, 0.77778],
-    "8934": [0.23222, 0.74111, 0, 0, 0.77778],
-    "8935": [0.23222, 0.74111, 0, 0, 0.77778],
-    "8936": [0.23222, 0.74111, 0, 0, 0.77778],
-    "8937": [0.23222, 0.74111, 0, 0, 0.77778],
-    "8938": [0.20576, 0.70576, 0, 0, 0.77778],
-    "8939": [0.20576, 0.70576, 0, 0, 0.77778],
-    "8940": [0.30274, 0.79383, 0, 0, 0.77778],
-    "8941": [0.30274, 0.79383, 0, 0, 0.77778],
-    "8994": [0.19444, 0.69224, 0, 0, 0.77778],
-    "8995": [0.19444, 0.69224, 0, 0, 0.77778],
-    "9416": [0.15559, 0.69224, 0, 0, 0.90222],
-    "9484": [0, 0.69224, 0, 0, 0.5],
-    "9488": [0, 0.69224, 0, 0, 0.5],
-    "9492": [0, 0.37788, 0, 0, 0.5],
-    "9496": [0, 0.37788, 0, 0, 0.5],
-    "9585": [0.19444, 0.68889, 0, 0, 0.88889],
-    "9586": [0.19444, 0.74111, 0, 0, 0.88889],
-    "9632": [0, 0.675, 0, 0, 0.77778],
-    "9633": [0, 0.675, 0, 0, 0.77778],
-    "9650": [0, 0.54986, 0, 0, 0.72222],
-    "9651": [0, 0.54986, 0, 0, 0.72222],
-    "9654": [0.03517, 0.54986, 0, 0, 0.77778],
-    "9660": [0, 0.54986, 0, 0, 0.72222],
-    "9661": [0, 0.54986, 0, 0, 0.72222],
-    "9664": [0.03517, 0.54986, 0, 0, 0.77778],
-    "9674": [0.11111, 0.69224, 0, 0, 0.66667],
-    "9733": [0.19444, 0.69224, 0, 0, 0.94445],
-    "10003": [0, 0.69224, 0, 0, 0.83334],
-    "10016": [0, 0.69224, 0, 0, 0.83334],
-    "10731": [0.11111, 0.69224, 0, 0, 0.66667],
-    "10846": [0.19444, 0.75583, 0, 0, 0.61111],
-    "10877": [0.13667, 0.63667, 0, 0, 0.77778],
-    "10878": [0.13667, 0.63667, 0, 0, 0.77778],
-    "10885": [0.25583, 0.75583, 0, 0, 0.77778],
-    "10886": [0.25583, 0.75583, 0, 0, 0.77778],
-    "10887": [0.13597, 0.63597, 0, 0, 0.77778],
-    "10888": [0.13597, 0.63597, 0, 0, 0.77778],
-    "10889": [0.26167, 0.75726, 0, 0, 0.77778],
-    "10890": [0.26167, 0.75726, 0, 0, 0.77778],
-    "10891": [0.48256, 0.98256, 0, 0, 0.77778],
-    "10892": [0.48256, 0.98256, 0, 0, 0.77778],
-    "10901": [0.13667, 0.63667, 0, 0, 0.77778],
-    "10902": [0.13667, 0.63667, 0, 0, 0.77778],
-    "10933": [0.25142, 0.75726, 0, 0, 0.77778],
-    "10934": [0.25142, 0.75726, 0, 0, 0.77778],
-    "10935": [0.26167, 0.75726, 0, 0, 0.77778],
-    "10936": [0.26167, 0.75726, 0, 0, 0.77778],
-    "10937": [0.26167, 0.75726, 0, 0, 0.77778],
-    "10938": [0.26167, 0.75726, 0, 0, 0.77778],
-    "10949": [0.25583, 0.75583, 0, 0, 0.77778],
-    "10950": [0.25583, 0.75583, 0, 0, 0.77778],
-    "10955": [0.28481, 0.79383, 0, 0, 0.77778],
-    "10956": [0.28481, 0.79383, 0, 0, 0.77778],
-    "57350": [0.08167, 0.58167, 0, 0, 0.22222],
-    "57351": [0.08167, 0.58167, 0, 0, 0.38889],
-    "57352": [0.08167, 0.58167, 0, 0, 0.77778],
-    "57353": [0, 0.43056, 0.04028, 0, 0.66667],
-    "57356": [0.25142, 0.75726, 0, 0, 0.77778],
-    "57357": [0.25142, 0.75726, 0, 0, 0.77778],
-    "57358": [0.41951, 0.91951, 0, 0, 0.77778],
-    "57359": [0.30274, 0.79383, 0, 0, 0.77778],
-    "57360": [0.30274, 0.79383, 0, 0, 0.77778],
-    "57361": [0.41951, 0.91951, 0, 0, 0.77778],
-    "57366": [0.25142, 0.75726, 0, 0, 0.77778],
-    "57367": [0.25142, 0.75726, 0, 0, 0.77778],
-    "57368": [0.25142, 0.75726, 0, 0, 0.77778],
-    "57369": [0.25142, 0.75726, 0, 0, 0.77778],
-    "57370": [0.13597, 0.63597, 0, 0, 0.77778],
-    "57371": [0.13597, 0.63597, 0, 0, 0.77778]
-  },
-  "Caligraphic-Regular": {
-    "48": [0, 0.43056, 0, 0, 0.5],
-    "49": [0, 0.43056, 0, 0, 0.5],
-    "50": [0, 0.43056, 0, 0, 0.5],
-    "51": [0.19444, 0.43056, 0, 0, 0.5],
-    "52": [0.19444, 0.43056, 0, 0, 0.5],
-    "53": [0.19444, 0.43056, 0, 0, 0.5],
-    "54": [0, 0.64444, 0, 0, 0.5],
-    "55": [0.19444, 0.43056, 0, 0, 0.5],
-    "56": [0, 0.64444, 0, 0, 0.5],
-    "57": [0.19444, 0.43056, 0, 0, 0.5],
-    "65": [0, 0.68333, 0, 0.19445, 0.79847],
-    "66": [0, 0.68333, 0.03041, 0.13889, 0.65681],
-    "67": [0, 0.68333, 0.05834, 0.13889, 0.52653],
-    "68": [0, 0.68333, 0.02778, 0.08334, 0.77139],
-    "69": [0, 0.68333, 0.08944, 0.11111, 0.52778],
-    "70": [0, 0.68333, 0.09931, 0.11111, 0.71875],
-    "71": [0.09722, 0.68333, 0.0593, 0.11111, 0.59487],
-    "72": [0, 0.68333, 0.00965, 0.11111, 0.84452],
-    "73": [0, 0.68333, 0.07382, 0, 0.54452],
-    "74": [0.09722, 0.68333, 0.18472, 0.16667, 0.67778],
-    "75": [0, 0.68333, 0.01445, 0.05556, 0.76195],
-    "76": [0, 0.68333, 0, 0.13889, 0.68972],
-    "77": [0, 0.68333, 0, 0.13889, 1.2009],
-    "78": [0, 0.68333, 0.14736, 0.08334, 0.82049],
-    "79": [0, 0.68333, 0.02778, 0.11111, 0.79611],
-    "80": [0, 0.68333, 0.08222, 0.08334, 0.69556],
-    "81": [0.09722, 0.68333, 0, 0.11111, 0.81667],
-    "82": [0, 0.68333, 0, 0.08334, 0.8475],
-    "83": [0, 0.68333, 0.075, 0.13889, 0.60556],
-    "84": [0, 0.68333, 0.25417, 0, 0.54464],
-    "85": [0, 0.68333, 0.09931, 0.08334, 0.62583],
-    "86": [0, 0.68333, 0.08222, 0, 0.61278],
-    "87": [0, 0.68333, 0.08222, 0.08334, 0.98778],
-    "88": [0, 0.68333, 0.14643, 0.13889, 0.7133],
-    "89": [0.09722, 0.68333, 0.08222, 0.08334, 0.66834],
-    "90": [0, 0.68333, 0.07944, 0.13889, 0.72473]
-  },
-  "Fraktur-Regular": {
-    "33": [0, 0.69141, 0, 0, 0.29574],
-    "34": [0, 0.69141, 0, 0, 0.21471],
-    "38": [0, 0.69141, 0, 0, 0.73786],
-    "39": [0, 0.69141, 0, 0, 0.21201],
-    "40": [0.24982, 0.74947, 0, 0, 0.38865],
-    "41": [0.24982, 0.74947, 0, 0, 0.38865],
-    "42": [0, 0.62119, 0, 0, 0.27764],
-    "43": [0.08319, 0.58283, 0, 0, 0.75623],
-    "44": [0, 0.10803, 0, 0, 0.27764],
-    "45": [0.08319, 0.58283, 0, 0, 0.75623],
-    "46": [0, 0.10803, 0, 0, 0.27764],
-    "47": [0.24982, 0.74947, 0, 0, 0.50181],
-    "48": [0, 0.47534, 0, 0, 0.50181],
-    "49": [0, 0.47534, 0, 0, 0.50181],
-    "50": [0, 0.47534, 0, 0, 0.50181],
-    "51": [0.18906, 0.47534, 0, 0, 0.50181],
-    "52": [0.18906, 0.47534, 0, 0, 0.50181],
-    "53": [0.18906, 0.47534, 0, 0, 0.50181],
-    "54": [0, 0.69141, 0, 0, 0.50181],
-    "55": [0.18906, 0.47534, 0, 0, 0.50181],
-    "56": [0, 0.69141, 0, 0, 0.50181],
-    "57": [0.18906, 0.47534, 0, 0, 0.50181],
-    "58": [0, 0.47534, 0, 0, 0.21606],
-    "59": [0.12604, 0.47534, 0, 0, 0.21606],
-    "61": [-0.13099, 0.36866, 0, 0, 0.75623],
-    "63": [0, 0.69141, 0, 0, 0.36245],
-    "65": [0, 0.69141, 0, 0, 0.7176],
-    "66": [0, 0.69141, 0, 0, 0.88397],
-    "67": [0, 0.69141, 0, 0, 0.61254],
-    "68": [0, 0.69141, 0, 0, 0.83158],
-    "69": [0, 0.69141, 0, 0, 0.66278],
-    "70": [0.12604, 0.69141, 0, 0, 0.61119],
-    "71": [0, 0.69141, 0, 0, 0.78539],
-    "72": [0.06302, 0.69141, 0, 0, 0.7203],
-    "73": [0, 0.69141, 0, 0, 0.55448],
-    "74": [0.12604, 0.69141, 0, 0, 0.55231],
-    "75": [0, 0.69141, 0, 0, 0.66845],
-    "76": [0, 0.69141, 0, 0, 0.66602],
-    "77": [0, 0.69141, 0, 0, 1.04953],
-    "78": [0, 0.69141, 0, 0, 0.83212],
-    "79": [0, 0.69141, 0, 0, 0.82699],
-    "80": [0.18906, 0.69141, 0, 0, 0.82753],
-    "81": [0.03781, 0.69141, 0, 0, 0.82699],
-    "82": [0, 0.69141, 0, 0, 0.82807],
-    "83": [0, 0.69141, 0, 0, 0.82861],
-    "84": [0, 0.69141, 0, 0, 0.66899],
-    "85": [0, 0.69141, 0, 0, 0.64576],
-    "86": [0, 0.69141, 0, 0, 0.83131],
-    "87": [0, 0.69141, 0, 0, 1.04602],
-    "88": [0, 0.69141, 0, 0, 0.71922],
-    "89": [0.18906, 0.69141, 0, 0, 0.83293],
-    "90": [0.12604, 0.69141, 0, 0, 0.60201],
-    "91": [0.24982, 0.74947, 0, 0, 0.27764],
-    "93": [0.24982, 0.74947, 0, 0, 0.27764],
-    "94": [0, 0.69141, 0, 0, 0.49965],
-    "97": [0, 0.47534, 0, 0, 0.50046],
-    "98": [0, 0.69141, 0, 0, 0.51315],
-    "99": [0, 0.47534, 0, 0, 0.38946],
-    "100": [0, 0.62119, 0, 0, 0.49857],
-    "101": [0, 0.47534, 0, 0, 0.40053],
-    "102": [0.18906, 0.69141, 0, 0, 0.32626],
-    "103": [0.18906, 0.47534, 0, 0, 0.5037],
-    "104": [0.18906, 0.69141, 0, 0, 0.52126],
-    "105": [0, 0.69141, 0, 0, 0.27899],
-    "106": [0, 0.69141, 0, 0, 0.28088],
-    "107": [0, 0.69141, 0, 0, 0.38946],
-    "108": [0, 0.69141, 0, 0, 0.27953],
-    "109": [0, 0.47534, 0, 0, 0.76676],
-    "110": [0, 0.47534, 0, 0, 0.52666],
-    "111": [0, 0.47534, 0, 0, 0.48885],
-    "112": [0.18906, 0.52396, 0, 0, 0.50046],
-    "113": [0.18906, 0.47534, 0, 0, 0.48912],
-    "114": [0, 0.47534, 0, 0, 0.38919],
-    "115": [0, 0.47534, 0, 0, 0.44266],
-    "116": [0, 0.62119, 0, 0, 0.33301],
-    "117": [0, 0.47534, 0, 0, 0.5172],
-    "118": [0, 0.52396, 0, 0, 0.5118],
-    "119": [0, 0.52396, 0, 0, 0.77351],
-    "120": [0.18906, 0.47534, 0, 0, 0.38865],
-    "121": [0.18906, 0.47534, 0, 0, 0.49884],
-    "122": [0.18906, 0.47534, 0, 0, 0.39054],
-    "8216": [0, 0.69141, 0, 0, 0.21471],
-    "8217": [0, 0.69141, 0, 0, 0.21471],
-    "58112": [0, 0.62119, 0, 0, 0.49749],
-    "58113": [0, 0.62119, 0, 0, 0.4983],
-    "58114": [0.18906, 0.69141, 0, 0, 0.33328],
-    "58115": [0.18906, 0.69141, 0, 0, 0.32923],
-    "58116": [0.18906, 0.47534, 0, 0, 0.50343],
-    "58117": [0, 0.69141, 0, 0, 0.33301],
-    "58118": [0, 0.62119, 0, 0, 0.33409],
-    "58119": [0, 0.47534, 0, 0, 0.50073]
-  },
-  "Main-Bold": {
-    "33": [0, 0.69444, 0, 0, 0.35],
-    "34": [0, 0.69444, 0, 0, 0.60278],
-    "35": [0.19444, 0.69444, 0, 0, 0.95833],
-    "36": [0.05556, 0.75, 0, 0, 0.575],
-    "37": [0.05556, 0.75, 0, 0, 0.95833],
-    "38": [0, 0.69444, 0, 0, 0.89444],
-    "39": [0, 0.69444, 0, 0, 0.31944],
-    "40": [0.25, 0.75, 0, 0, 0.44722],
-    "41": [0.25, 0.75, 0, 0, 0.44722],
-    "42": [0, 0.75, 0, 0, 0.575],
-    "43": [0.13333, 0.63333, 0, 0, 0.89444],
-    "44": [0.19444, 0.15556, 0, 0, 0.31944],
-    "45": [0, 0.44444, 0, 0, 0.38333],
-    "46": [0, 0.15556, 0, 0, 0.31944],
-    "47": [0.25, 0.75, 0, 0, 0.575],
-    "48": [0, 0.64444, 0, 0, 0.575],
-    "49": [0, 0.64444, 0, 0, 0.575],
-    "50": [0, 0.64444, 0, 0, 0.575],
-    "51": [0, 0.64444, 0, 0, 0.575],
-    "52": [0, 0.64444, 0, 0, 0.575],
-    "53": [0, 0.64444, 0, 0, 0.575],
-    "54": [0, 0.64444, 0, 0, 0.575],
-    "55": [0, 0.64444, 0, 0, 0.575],
-    "56": [0, 0.64444, 0, 0, 0.575],
-    "57": [0, 0.64444, 0, 0, 0.575],
-    "58": [0, 0.44444, 0, 0, 0.31944],
-    "59": [0.19444, 0.44444, 0, 0, 0.31944],
-    "60": [0.08556, 0.58556, 0, 0, 0.89444],
-    "61": [-0.10889, 0.39111, 0, 0, 0.89444],
-    "62": [0.08556, 0.58556, 0, 0, 0.89444],
-    "63": [0, 0.69444, 0, 0, 0.54305],
-    "64": [0, 0.69444, 0, 0, 0.89444],
-    "65": [0, 0.68611, 0, 0, 0.86944],
-    "66": [0, 0.68611, 0, 0, 0.81805],
-    "67": [0, 0.68611, 0, 0, 0.83055],
-    "68": [0, 0.68611, 0, 0, 0.88194],
-    "69": [0, 0.68611, 0, 0, 0.75555],
-    "70": [0, 0.68611, 0, 0, 0.72361],
-    "71": [0, 0.68611, 0, 0, 0.90416],
-    "72": [0, 0.68611, 0, 0, 0.9],
-    "73": [0, 0.68611, 0, 0, 0.43611],
-    "74": [0, 0.68611, 0, 0, 0.59444],
-    "75": [0, 0.68611, 0, 0, 0.90138],
-    "76": [0, 0.68611, 0, 0, 0.69166],
-    "77": [0, 0.68611, 0, 0, 1.09166],
-    "78": [0, 0.68611, 0, 0, 0.9],
-    "79": [0, 0.68611, 0, 0, 0.86388],
-    "80": [0, 0.68611, 0, 0, 0.78611],
-    "81": [0.19444, 0.68611, 0, 0, 0.86388],
-    "82": [0, 0.68611, 0, 0, 0.8625],
-    "83": [0, 0.68611, 0, 0, 0.63889],
-    "84": [0, 0.68611, 0, 0, 0.8],
-    "85": [0, 0.68611, 0, 0, 0.88472],
-    "86": [0, 0.68611, 0.01597, 0, 0.86944],
-    "87": [0, 0.68611, 0.01597, 0, 1.18888],
-    "88": [0, 0.68611, 0, 0, 0.86944],
-    "89": [0, 0.68611, 0.02875, 0, 0.86944],
-    "90": [0, 0.68611, 0, 0, 0.70277],
-    "91": [0.25, 0.75, 0, 0, 0.31944],
-    "92": [0.25, 0.75, 0, 0, 0.575],
-    "93": [0.25, 0.75, 0, 0, 0.31944],
-    "94": [0, 0.69444, 0, 0, 0.575],
-    "95": [0.31, 0.13444, 0.03194, 0, 0.575],
-    "97": [0, 0.44444, 0, 0, 0.55902],
-    "98": [0, 0.69444, 0, 0, 0.63889],
-    "99": [0, 0.44444, 0, 0, 0.51111],
-    "100": [0, 0.69444, 0, 0, 0.63889],
-    "101": [0, 0.44444, 0, 0, 0.52708],
-    "102": [0, 0.69444, 0.10903, 0, 0.35139],
-    "103": [0.19444, 0.44444, 0.01597, 0, 0.575],
-    "104": [0, 0.69444, 0, 0, 0.63889],
-    "105": [0, 0.69444, 0, 0, 0.31944],
-    "106": [0.19444, 0.69444, 0, 0, 0.35139],
-    "107": [0, 0.69444, 0, 0, 0.60694],
-    "108": [0, 0.69444, 0, 0, 0.31944],
-    "109": [0, 0.44444, 0, 0, 0.95833],
-    "110": [0, 0.44444, 0, 0, 0.63889],
-    "111": [0, 0.44444, 0, 0, 0.575],
-    "112": [0.19444, 0.44444, 0, 0, 0.63889],
-    "113": [0.19444, 0.44444, 0, 0, 0.60694],
-    "114": [0, 0.44444, 0, 0, 0.47361],
-    "115": [0, 0.44444, 0, 0, 0.45361],
-    "116": [0, 0.63492, 0, 0, 0.44722],
-    "117": [0, 0.44444, 0, 0, 0.63889],
-    "118": [0, 0.44444, 0.01597, 0, 0.60694],
-    "119": [0, 0.44444, 0.01597, 0, 0.83055],
-    "120": [0, 0.44444, 0, 0, 0.60694],
-    "121": [0.19444, 0.44444, 0.01597, 0, 0.60694],
-    "122": [0, 0.44444, 0, 0, 0.51111],
-    "123": [0.25, 0.75, 0, 0, 0.575],
-    "124": [0.25, 0.75, 0, 0, 0.31944],
-    "125": [0.25, 0.75, 0, 0, 0.575],
-    "126": [0.35, 0.34444, 0, 0, 0.575],
-    "168": [0, 0.69444, 0, 0, 0.575],
-    "172": [0, 0.44444, 0, 0, 0.76666],
-    "176": [0, 0.69444, 0, 0, 0.86944],
-    "177": [0.13333, 0.63333, 0, 0, 0.89444],
-    "184": [0.17014, 0, 0, 0, 0.51111],
-    "198": [0, 0.68611, 0, 0, 1.04166],
-    "215": [0.13333, 0.63333, 0, 0, 0.89444],
-    "216": [0.04861, 0.73472, 0, 0, 0.89444],
-    "223": [0, 0.69444, 0, 0, 0.59722],
-    "230": [0, 0.44444, 0, 0, 0.83055],
-    "247": [0.13333, 0.63333, 0, 0, 0.89444],
-    "248": [0.09722, 0.54167, 0, 0, 0.575],
-    "305": [0, 0.44444, 0, 0, 0.31944],
-    "338": [0, 0.68611, 0, 0, 1.16944],
-    "339": [0, 0.44444, 0, 0, 0.89444],
-    "567": [0.19444, 0.44444, 0, 0, 0.35139],
-    "710": [0, 0.69444, 0, 0, 0.575],
-    "711": [0, 0.63194, 0, 0, 0.575],
-    "713": [0, 0.59611, 0, 0, 0.575],
-    "714": [0, 0.69444, 0, 0, 0.575],
-    "715": [0, 0.69444, 0, 0, 0.575],
-    "728": [0, 0.69444, 0, 0, 0.575],
-    "729": [0, 0.69444, 0, 0, 0.31944],
-    "730": [0, 0.69444, 0, 0, 0.86944],
-    "732": [0, 0.69444, 0, 0, 0.575],
-    "733": [0, 0.69444, 0, 0, 0.575],
-    "915": [0, 0.68611, 0, 0, 0.69166],
-    "916": [0, 0.68611, 0, 0, 0.95833],
-    "920": [0, 0.68611, 0, 0, 0.89444],
-    "923": [0, 0.68611, 0, 0, 0.80555],
-    "926": [0, 0.68611, 0, 0, 0.76666],
-    "928": [0, 0.68611, 0, 0, 0.9],
-    "931": [0, 0.68611, 0, 0, 0.83055],
-    "933": [0, 0.68611, 0, 0, 0.89444],
-    "934": [0, 0.68611, 0, 0, 0.83055],
-    "936": [0, 0.68611, 0, 0, 0.89444],
-    "937": [0, 0.68611, 0, 0, 0.83055],
-    "8211": [0, 0.44444, 0.03194, 0, 0.575],
-    "8212": [0, 0.44444, 0.03194, 0, 1.14999],
-    "8216": [0, 0.69444, 0, 0, 0.31944],
-    "8217": [0, 0.69444, 0, 0, 0.31944],
-    "8220": [0, 0.69444, 0, 0, 0.60278],
-    "8221": [0, 0.69444, 0, 0, 0.60278],
-    "8224": [0.19444, 0.69444, 0, 0, 0.51111],
-    "8225": [0.19444, 0.69444, 0, 0, 0.51111],
-    "8242": [0, 0.55556, 0, 0, 0.34444],
-    "8407": [0, 0.72444, 0.15486, 0, 0.575],
-    "8463": [0, 0.69444, 0, 0, 0.66759],
-    "8465": [0, 0.69444, 0, 0, 0.83055],
-    "8467": [0, 0.69444, 0, 0, 0.47361],
-    "8472": [0.19444, 0.44444, 0, 0, 0.74027],
-    "8476": [0, 0.69444, 0, 0, 0.83055],
-    "8501": [0, 0.69444, 0, 0, 0.70277],
-    "8592": [-0.10889, 0.39111, 0, 0, 1.14999],
-    "8593": [0.19444, 0.69444, 0, 0, 0.575],
-    "8594": [-0.10889, 0.39111, 0, 0, 1.14999],
-    "8595": [0.19444, 0.69444, 0, 0, 0.575],
-    "8596": [-0.10889, 0.39111, 0, 0, 1.14999],
-    "8597": [0.25, 0.75, 0, 0, 0.575],
-    "8598": [0.19444, 0.69444, 0, 0, 1.14999],
-    "8599": [0.19444, 0.69444, 0, 0, 1.14999],
-    "8600": [0.19444, 0.69444, 0, 0, 1.14999],
-    "8601": [0.19444, 0.69444, 0, 0, 1.14999],
-    "8636": [-0.10889, 0.39111, 0, 0, 1.14999],
-    "8637": [-0.10889, 0.39111, 0, 0, 1.14999],
-    "8640": [-0.10889, 0.39111, 0, 0, 1.14999],
-    "8641": [-0.10889, 0.39111, 0, 0, 1.14999],
-    "8656": [-0.10889, 0.39111, 0, 0, 1.14999],
-    "8657": [0.19444, 0.69444, 0, 0, 0.70277],
-    "8658": [-0.10889, 0.39111, 0, 0, 1.14999],
-    "8659": [0.19444, 0.69444, 0, 0, 0.70277],
-    "8660": [-0.10889, 0.39111, 0, 0, 1.14999],
-    "8661": [0.25, 0.75, 0, 0, 0.70277],
-    "8704": [0, 0.69444, 0, 0, 0.63889],
-    "8706": [0, 0.69444, 0.06389, 0, 0.62847],
-    "8707": [0, 0.69444, 0, 0, 0.63889],
-    "8709": [0.05556, 0.75, 0, 0, 0.575],
-    "8711": [0, 0.68611, 0, 0, 0.95833],
-    "8712": [0.08556, 0.58556, 0, 0, 0.76666],
-    "8715": [0.08556, 0.58556, 0, 0, 0.76666],
-    "8722": [0.13333, 0.63333, 0, 0, 0.89444],
-    "8723": [0.13333, 0.63333, 0, 0, 0.89444],
-    "8725": [0.25, 0.75, 0, 0, 0.575],
-    "8726": [0.25, 0.75, 0, 0, 0.575],
-    "8727": [-0.02778, 0.47222, 0, 0, 0.575],
-    "8728": [-0.02639, 0.47361, 0, 0, 0.575],
-    "8729": [-0.02639, 0.47361, 0, 0, 0.575],
-    "8730": [0.18, 0.82, 0, 0, 0.95833],
-    "8733": [0, 0.44444, 0, 0, 0.89444],
-    "8734": [0, 0.44444, 0, 0, 1.14999],
-    "8736": [0, 0.69224, 0, 0, 0.72222],
-    "8739": [0.25, 0.75, 0, 0, 0.31944],
-    "8741": [0.25, 0.75, 0, 0, 0.575],
-    "8743": [0, 0.55556, 0, 0, 0.76666],
-    "8744": [0, 0.55556, 0, 0, 0.76666],
-    "8745": [0, 0.55556, 0, 0, 0.76666],
-    "8746": [0, 0.55556, 0, 0, 0.76666],
-    "8747": [0.19444, 0.69444, 0.12778, 0, 0.56875],
-    "8764": [-0.10889, 0.39111, 0, 0, 0.89444],
-    "8768": [0.19444, 0.69444, 0, 0, 0.31944],
-    "8771": [0.00222, 0.50222, 0, 0, 0.89444],
-    "8776": [0.02444, 0.52444, 0, 0, 0.89444],
-    "8781": [0.00222, 0.50222, 0, 0, 0.89444],
-    "8801": [0.00222, 0.50222, 0, 0, 0.89444],
-    "8804": [0.19667, 0.69667, 0, 0, 0.89444],
-    "8805": [0.19667, 0.69667, 0, 0, 0.89444],
-    "8810": [0.08556, 0.58556, 0, 0, 1.14999],
-    "8811": [0.08556, 0.58556, 0, 0, 1.14999],
-    "8826": [0.08556, 0.58556, 0, 0, 0.89444],
-    "8827": [0.08556, 0.58556, 0, 0, 0.89444],
-    "8834": [0.08556, 0.58556, 0, 0, 0.89444],
-    "8835": [0.08556, 0.58556, 0, 0, 0.89444],
-    "8838": [0.19667, 0.69667, 0, 0, 0.89444],
-    "8839": [0.19667, 0.69667, 0, 0, 0.89444],
-    "8846": [0, 0.55556, 0, 0, 0.76666],
-    "8849": [0.19667, 0.69667, 0, 0, 0.89444],
-    "8850": [0.19667, 0.69667, 0, 0, 0.89444],
-    "8851": [0, 0.55556, 0, 0, 0.76666],
-    "8852": [0, 0.55556, 0, 0, 0.76666],
-    "8853": [0.13333, 0.63333, 0, 0, 0.89444],
-    "8854": [0.13333, 0.63333, 0, 0, 0.89444],
-    "8855": [0.13333, 0.63333, 0, 0, 0.89444],
-    "8856": [0.13333, 0.63333, 0, 0, 0.89444],
-    "8857": [0.13333, 0.63333, 0, 0, 0.89444],
-    "8866": [0, 0.69444, 0, 0, 0.70277],
-    "8867": [0, 0.69444, 0, 0, 0.70277],
-    "8868": [0, 0.69444, 0, 0, 0.89444],
-    "8869": [0, 0.69444, 0, 0, 0.89444],
-    "8900": [-0.02639, 0.47361, 0, 0, 0.575],
-    "8901": [-0.02639, 0.47361, 0, 0, 0.31944],
-    "8902": [-0.02778, 0.47222, 0, 0, 0.575],
-    "8968": [0.25, 0.75, 0, 0, 0.51111],
-    "8969": [0.25, 0.75, 0, 0, 0.51111],
-    "8970": [0.25, 0.75, 0, 0, 0.51111],
-    "8971": [0.25, 0.75, 0, 0, 0.51111],
-    "8994": [-0.13889, 0.36111, 0, 0, 1.14999],
-    "8995": [-0.13889, 0.36111, 0, 0, 1.14999],
-    "9651": [0.19444, 0.69444, 0, 0, 1.02222],
-    "9657": [-0.02778, 0.47222, 0, 0, 0.575],
-    "9661": [0.19444, 0.69444, 0, 0, 1.02222],
-    "9667": [-0.02778, 0.47222, 0, 0, 0.575],
-    "9711": [0.19444, 0.69444, 0, 0, 1.14999],
-    "9824": [0.12963, 0.69444, 0, 0, 0.89444],
-    "9825": [0.12963, 0.69444, 0, 0, 0.89444],
-    "9826": [0.12963, 0.69444, 0, 0, 0.89444],
-    "9827": [0.12963, 0.69444, 0, 0, 0.89444],
-    "9837": [0, 0.75, 0, 0, 0.44722],
-    "9838": [0.19444, 0.69444, 0, 0, 0.44722],
-    "9839": [0.19444, 0.69444, 0, 0, 0.44722],
-    "10216": [0.25, 0.75, 0, 0, 0.44722],
-    "10217": [0.25, 0.75, 0, 0, 0.44722],
-    "10815": [0, 0.68611, 0, 0, 0.9],
-    "10927": [0.19667, 0.69667, 0, 0, 0.89444],
-    "10928": [0.19667, 0.69667, 0, 0, 0.89444],
-    "57376": [0.19444, 0.69444, 0, 0, 0]
-  },
-  "Main-BoldItalic": {
-    "33": [0, 0.69444, 0.11417, 0, 0.38611],
-    "34": [0, 0.69444, 0.07939, 0, 0.62055],
-    "35": [0.19444, 0.69444, 0.06833, 0, 0.94444],
-    "37": [0.05556, 0.75, 0.12861, 0, 0.94444],
-    "38": [0, 0.69444, 0.08528, 0, 0.88555],
-    "39": [0, 0.69444, 0.12945, 0, 0.35555],
-    "40": [0.25, 0.75, 0.15806, 0, 0.47333],
-    "41": [0.25, 0.75, 0.03306, 0, 0.47333],
-    "42": [0, 0.75, 0.14333, 0, 0.59111],
-    "43": [0.10333, 0.60333, 0.03306, 0, 0.88555],
-    "44": [0.19444, 0.14722, 0, 0, 0.35555],
-    "45": [0, 0.44444, 0.02611, 0, 0.41444],
-    "46": [0, 0.14722, 0, 0, 0.35555],
-    "47": [0.25, 0.75, 0.15806, 0, 0.59111],
-    "48": [0, 0.64444, 0.13167, 0, 0.59111],
-    "49": [0, 0.64444, 0.13167, 0, 0.59111],
-    "50": [0, 0.64444, 0.13167, 0, 0.59111],
-    "51": [0, 0.64444, 0.13167, 0, 0.59111],
-    "52": [0.19444, 0.64444, 0.13167, 0, 0.59111],
-    "53": [0, 0.64444, 0.13167, 0, 0.59111],
-    "54": [0, 0.64444, 0.13167, 0, 0.59111],
-    "55": [0.19444, 0.64444, 0.13167, 0, 0.59111],
-    "56": [0, 0.64444, 0.13167, 0, 0.59111],
-    "57": [0, 0.64444, 0.13167, 0, 0.59111],
-    "58": [0, 0.44444, 0.06695, 0, 0.35555],
-    "59": [0.19444, 0.44444, 0.06695, 0, 0.35555],
-    "61": [-0.10889, 0.39111, 0.06833, 0, 0.88555],
-    "63": [0, 0.69444, 0.11472, 0, 0.59111],
-    "64": [0, 0.69444, 0.09208, 0, 0.88555],
-    "65": [0, 0.68611, 0, 0, 0.86555],
-    "66": [0, 0.68611, 0.0992, 0, 0.81666],
-    "67": [0, 0.68611, 0.14208, 0, 0.82666],
-    "68": [0, 0.68611, 0.09062, 0, 0.87555],
-    "69": [0, 0.68611, 0.11431, 0, 0.75666],
-    "70": [0, 0.68611, 0.12903, 0, 0.72722],
-    "71": [0, 0.68611, 0.07347, 0, 0.89527],
-    "72": [0, 0.68611, 0.17208, 0, 0.8961],
-    "73": [0, 0.68611, 0.15681, 0, 0.47166],
-    "74": [0, 0.68611, 0.145, 0, 0.61055],
-    "75": [0, 0.68611, 0.14208, 0, 0.89499],
-    "76": [0, 0.68611, 0, 0, 0.69777],
-    "77": [0, 0.68611, 0.17208, 0, 1.07277],
-    "78": [0, 0.68611, 0.17208, 0, 0.8961],
-    "79": [0, 0.68611, 0.09062, 0, 0.85499],
-    "80": [0, 0.68611, 0.0992, 0, 0.78721],
-    "81": [0.19444, 0.68611, 0.09062, 0, 0.85499],
-    "82": [0, 0.68611, 0.02559, 0, 0.85944],
-    "83": [0, 0.68611, 0.11264, 0, 0.64999],
-    "84": [0, 0.68611, 0.12903, 0, 0.7961],
-    "85": [0, 0.68611, 0.17208, 0, 0.88083],
-    "86": [0, 0.68611, 0.18625, 0, 0.86555],
-    "87": [0, 0.68611, 0.18625, 0, 1.15999],
-    "88": [0, 0.68611, 0.15681, 0, 0.86555],
-    "89": [0, 0.68611, 0.19803, 0, 0.86555],
-    "90": [0, 0.68611, 0.14208, 0, 0.70888],
-    "91": [0.25, 0.75, 0.1875, 0, 0.35611],
-    "93": [0.25, 0.75, 0.09972, 0, 0.35611],
-    "94": [0, 0.69444, 0.06709, 0, 0.59111],
-    "95": [0.31, 0.13444, 0.09811, 0, 0.59111],
-    "97": [0, 0.44444, 0.09426, 0, 0.59111],
-    "98": [0, 0.69444, 0.07861, 0, 0.53222],
-    "99": [0, 0.44444, 0.05222, 0, 0.53222],
-    "100": [0, 0.69444, 0.10861, 0, 0.59111],
-    "101": [0, 0.44444, 0.085, 0, 0.53222],
-    "102": [0.19444, 0.69444, 0.21778, 0, 0.4],
-    "103": [0.19444, 0.44444, 0.105, 0, 0.53222],
-    "104": [0, 0.69444, 0.09426, 0, 0.59111],
-    "105": [0, 0.69326, 0.11387, 0, 0.35555],
-    "106": [0.19444, 0.69326, 0.1672, 0, 0.35555],
-    "107": [0, 0.69444, 0.11111, 0, 0.53222],
-    "108": [0, 0.69444, 0.10861, 0, 0.29666],
-    "109": [0, 0.44444, 0.09426, 0, 0.94444],
-    "110": [0, 0.44444, 0.09426, 0, 0.64999],
-    "111": [0, 0.44444, 0.07861, 0, 0.59111],
-    "112": [0.19444, 0.44444, 0.07861, 0, 0.59111],
-    "113": [0.19444, 0.44444, 0.105, 0, 0.53222],
-    "114": [0, 0.44444, 0.11111, 0, 0.50167],
-    "115": [0, 0.44444, 0.08167, 0, 0.48694],
-    "116": [0, 0.63492, 0.09639, 0, 0.385],
-    "117": [0, 0.44444, 0.09426, 0, 0.62055],
-    "118": [0, 0.44444, 0.11111, 0, 0.53222],
-    "119": [0, 0.44444, 0.11111, 0, 0.76777],
-    "120": [0, 0.44444, 0.12583, 0, 0.56055],
-    "121": [0.19444, 0.44444, 0.105, 0, 0.56166],
-    "122": [0, 0.44444, 0.13889, 0, 0.49055],
-    "126": [0.35, 0.34444, 0.11472, 0, 0.59111],
-    "163": [0, 0.69444, 0, 0, 0.86853],
-    "168": [0, 0.69444, 0.11473, 0, 0.59111],
-    "176": [0, 0.69444, 0, 0, 0.94888],
-    "184": [0.17014, 0, 0, 0, 0.53222],
-    "198": [0, 0.68611, 0.11431, 0, 1.02277],
-    "216": [0.04861, 0.73472, 0.09062, 0, 0.88555],
-    "223": [0.19444, 0.69444, 0.09736, 0, 0.665],
-    "230": [0, 0.44444, 0.085, 0, 0.82666],
-    "248": [0.09722, 0.54167, 0.09458, 0, 0.59111],
-    "305": [0, 0.44444, 0.09426, 0, 0.35555],
-    "338": [0, 0.68611, 0.11431, 0, 1.14054],
-    "339": [0, 0.44444, 0.085, 0, 0.82666],
-    "567": [0.19444, 0.44444, 0.04611, 0, 0.385],
-    "710": [0, 0.69444, 0.06709, 0, 0.59111],
-    "711": [0, 0.63194, 0.08271, 0, 0.59111],
-    "713": [0, 0.59444, 0.10444, 0, 0.59111],
-    "714": [0, 0.69444, 0.08528, 0, 0.59111],
-    "715": [0, 0.69444, 0, 0, 0.59111],
-    "728": [0, 0.69444, 0.10333, 0, 0.59111],
-    "729": [0, 0.69444, 0.12945, 0, 0.35555],
-    "730": [0, 0.69444, 0, 0, 0.94888],
-    "732": [0, 0.69444, 0.11472, 0, 0.59111],
-    "733": [0, 0.69444, 0.11472, 0, 0.59111],
-    "915": [0, 0.68611, 0.12903, 0, 0.69777],
-    "916": [0, 0.68611, 0, 0, 0.94444],
-    "920": [0, 0.68611, 0.09062, 0, 0.88555],
-    "923": [0, 0.68611, 0, 0, 0.80666],
-    "926": [0, 0.68611, 0.15092, 0, 0.76777],
-    "928": [0, 0.68611, 0.17208, 0, 0.8961],
-    "931": [0, 0.68611, 0.11431, 0, 0.82666],
-    "933": [0, 0.68611, 0.10778, 0, 0.88555],
-    "934": [0, 0.68611, 0.05632, 0, 0.82666],
-    "936": [0, 0.68611, 0.10778, 0, 0.88555],
-    "937": [0, 0.68611, 0.0992, 0, 0.82666],
-    "8211": [0, 0.44444, 0.09811, 0, 0.59111],
-    "8212": [0, 0.44444, 0.09811, 0, 1.18221],
-    "8216": [0, 0.69444, 0.12945, 0, 0.35555],
-    "8217": [0, 0.69444, 0.12945, 0, 0.35555],
-    "8220": [0, 0.69444, 0.16772, 0, 0.62055],
-    "8221": [0, 0.69444, 0.07939, 0, 0.62055]
-  },
-  "Main-Italic": {
-    "33": [0, 0.69444, 0.12417, 0, 0.30667],
-    "34": [0, 0.69444, 0.06961, 0, 0.51444],
-    "35": [0.19444, 0.69444, 0.06616, 0, 0.81777],
-    "37": [0.05556, 0.75, 0.13639, 0, 0.81777],
-    "38": [0, 0.69444, 0.09694, 0, 0.76666],
-    "39": [0, 0.69444, 0.12417, 0, 0.30667],
-    "40": [0.25, 0.75, 0.16194, 0, 0.40889],
-    "41": [0.25, 0.75, 0.03694, 0, 0.40889],
-    "42": [0, 0.75, 0.14917, 0, 0.51111],
-    "43": [0.05667, 0.56167, 0.03694, 0, 0.76666],
-    "44": [0.19444, 0.10556, 0, 0, 0.30667],
-    "45": [0, 0.43056, 0.02826, 0, 0.35778],
-    "46": [0, 0.10556, 0, 0, 0.30667],
-    "47": [0.25, 0.75, 0.16194, 0, 0.51111],
-    "48": [0, 0.64444, 0.13556, 0, 0.51111],
-    "49": [0, 0.64444, 0.13556, 0, 0.51111],
-    "50": [0, 0.64444, 0.13556, 0, 0.51111],
-    "51": [0, 0.64444, 0.13556, 0, 0.51111],
-    "52": [0.19444, 0.64444, 0.13556, 0, 0.51111],
-    "53": [0, 0.64444, 0.13556, 0, 0.51111],
-    "54": [0, 0.64444, 0.13556, 0, 0.51111],
-    "55": [0.19444, 0.64444, 0.13556, 0, 0.51111],
-    "56": [0, 0.64444, 0.13556, 0, 0.51111],
-    "57": [0, 0.64444, 0.13556, 0, 0.51111],
-    "58": [0, 0.43056, 0.0582, 0, 0.30667],
-    "59": [0.19444, 0.43056, 0.0582, 0, 0.30667],
-    "61": [-0.13313, 0.36687, 0.06616, 0, 0.76666],
-    "63": [0, 0.69444, 0.1225, 0, 0.51111],
-    "64": [0, 0.69444, 0.09597, 0, 0.76666],
-    "65": [0, 0.68333, 0, 0, 0.74333],
-    "66": [0, 0.68333, 0.10257, 0, 0.70389],
-    "67": [0, 0.68333, 0.14528, 0, 0.71555],
-    "68": [0, 0.68333, 0.09403, 0, 0.755],
-    "69": [0, 0.68333, 0.12028, 0, 0.67833],
-    "70": [0, 0.68333, 0.13305, 0, 0.65277],
-    "71": [0, 0.68333, 0.08722, 0, 0.77361],
-    "72": [0, 0.68333, 0.16389, 0, 0.74333],
-    "73": [0, 0.68333, 0.15806, 0, 0.38555],
-    "74": [0, 0.68333, 0.14028, 0, 0.525],
-    "75": [0, 0.68333, 0.14528, 0, 0.76888],
-    "76": [0, 0.68333, 0, 0, 0.62722],
-    "77": [0, 0.68333, 0.16389, 0, 0.89666],
-    "78": [0, 0.68333, 0.16389, 0, 0.74333],
-    "79": [0, 0.68333, 0.09403, 0, 0.76666],
-    "80": [0, 0.68333, 0.10257, 0, 0.67833],
-    "81": [0.19444, 0.68333, 0.09403, 0, 0.76666],
-    "82": [0, 0.68333, 0.03868, 0, 0.72944],
-    "83": [0, 0.68333, 0.11972, 0, 0.56222],
-    "84": [0, 0.68333, 0.13305, 0, 0.71555],
-    "85": [0, 0.68333, 0.16389, 0, 0.74333],
-    "86": [0, 0.68333, 0.18361, 0, 0.74333],
-    "87": [0, 0.68333, 0.18361, 0, 0.99888],
-    "88": [0, 0.68333, 0.15806, 0, 0.74333],
-    "89": [0, 0.68333, 0.19383, 0, 0.74333],
-    "90": [0, 0.68333, 0.14528, 0, 0.61333],
-    "91": [0.25, 0.75, 0.1875, 0, 0.30667],
-    "93": [0.25, 0.75, 0.10528, 0, 0.30667],
-    "94": [0, 0.69444, 0.06646, 0, 0.51111],
-    "95": [0.31, 0.12056, 0.09208, 0, 0.51111],
-    "97": [0, 0.43056, 0.07671, 0, 0.51111],
-    "98": [0, 0.69444, 0.06312, 0, 0.46],
-    "99": [0, 0.43056, 0.05653, 0, 0.46],
-    "100": [0, 0.69444, 0.10333, 0, 0.51111],
-    "101": [0, 0.43056, 0.07514, 0, 0.46],
-    "102": [0.19444, 0.69444, 0.21194, 0, 0.30667],
-    "103": [0.19444, 0.43056, 0.08847, 0, 0.46],
-    "104": [0, 0.69444, 0.07671, 0, 0.51111],
-    "105": [0, 0.65536, 0.1019, 0, 0.30667],
-    "106": [0.19444, 0.65536, 0.14467, 0, 0.30667],
-    "107": [0, 0.69444, 0.10764, 0, 0.46],
-    "108": [0, 0.69444, 0.10333, 0, 0.25555],
-    "109": [0, 0.43056, 0.07671, 0, 0.81777],
-    "110": [0, 0.43056, 0.07671, 0, 0.56222],
-    "111": [0, 0.43056, 0.06312, 0, 0.51111],
-    "112": [0.19444, 0.43056, 0.06312, 0, 0.51111],
-    "113": [0.19444, 0.43056, 0.08847, 0, 0.46],
-    "114": [0, 0.43056, 0.10764, 0, 0.42166],
-    "115": [0, 0.43056, 0.08208, 0, 0.40889],
-    "116": [0, 0.61508, 0.09486, 0, 0.33222],
-    "117": [0, 0.43056, 0.07671, 0, 0.53666],
-    "118": [0, 0.43056, 0.10764, 0, 0.46],
-    "119": [0, 0.43056, 0.10764, 0, 0.66444],
-    "120": [0, 0.43056, 0.12042, 0, 0.46389],
-    "121": [0.19444, 0.43056, 0.08847, 0, 0.48555],
-    "122": [0, 0.43056, 0.12292, 0, 0.40889],
-    "126": [0.35, 0.31786, 0.11585, 0, 0.51111],
-    "163": [0, 0.69444, 0, 0, 0.76909],
-    "168": [0, 0.66786, 0.10474, 0, 0.51111],
-    "176": [0, 0.69444, 0, 0, 0.83129],
-    "184": [0.17014, 0, 0, 0, 0.46],
-    "198": [0, 0.68333, 0.12028, 0, 0.88277],
-    "216": [0.04861, 0.73194, 0.09403, 0, 0.76666],
-    "223": [0.19444, 0.69444, 0.10514, 0, 0.53666],
-    "230": [0, 0.43056, 0.07514, 0, 0.71555],
-    "248": [0.09722, 0.52778, 0.09194, 0, 0.51111],
-    "305": [0, 0.43056, 0, 0.02778, 0.32246],
-    "338": [0, 0.68333, 0.12028, 0, 0.98499],
-    "339": [0, 0.43056, 0.07514, 0, 0.71555],
-    "567": [0.19444, 0.43056, 0, 0.08334, 0.38403],
-    "710": [0, 0.69444, 0.06646, 0, 0.51111],
-    "711": [0, 0.62847, 0.08295, 0, 0.51111],
-    "713": [0, 0.56167, 0.10333, 0, 0.51111],
-    "714": [0, 0.69444, 0.09694, 0, 0.51111],
-    "715": [0, 0.69444, 0, 0, 0.51111],
-    "728": [0, 0.69444, 0.10806, 0, 0.51111],
-    "729": [0, 0.66786, 0.11752, 0, 0.30667],
-    "730": [0, 0.69444, 0, 0, 0.83129],
-    "732": [0, 0.66786, 0.11585, 0, 0.51111],
-    "733": [0, 0.69444, 0.1225, 0, 0.51111],
-    "915": [0, 0.68333, 0.13305, 0, 0.62722],
-    "916": [0, 0.68333, 0, 0, 0.81777],
-    "920": [0, 0.68333, 0.09403, 0, 0.76666],
-    "923": [0, 0.68333, 0, 0, 0.69222],
-    "926": [0, 0.68333, 0.15294, 0, 0.66444],
-    "928": [0, 0.68333, 0.16389, 0, 0.74333],
-    "931": [0, 0.68333, 0.12028, 0, 0.71555],
-    "933": [0, 0.68333, 0.11111, 0, 0.76666],
-    "934": [0, 0.68333, 0.05986, 0, 0.71555],
-    "936": [0, 0.68333, 0.11111, 0, 0.76666],
-    "937": [0, 0.68333, 0.10257, 0, 0.71555],
-    "8211": [0, 0.43056, 0.09208, 0, 0.51111],
-    "8212": [0, 0.43056, 0.09208, 0, 1.02222],
-    "8216": [0, 0.69444, 0.12417, 0, 0.30667],
-    "8217": [0, 0.69444, 0.12417, 0, 0.30667],
-    "8220": [0, 0.69444, 0.1685, 0, 0.51444],
-    "8221": [0, 0.69444, 0.06961, 0, 0.51444],
-    "8463": [0, 0.68889, 0, 0, 0.54028]
-  },
-  "Main-Regular": {
-    "32": [0, 0, 0, 0, 0.25],
-    "33": [0, 0.69444, 0, 0, 0.27778],
-    "34": [0, 0.69444, 0, 0, 0.5],
-    "35": [0.19444, 0.69444, 0, 0, 0.83334],
-    "36": [0.05556, 0.75, 0, 0, 0.5],
-    "37": [0.05556, 0.75, 0, 0, 0.83334],
-    "38": [0, 0.69444, 0, 0, 0.77778],
-    "39": [0, 0.69444, 0, 0, 0.27778],
-    "40": [0.25, 0.75, 0, 0, 0.38889],
-    "41": [0.25, 0.75, 0, 0, 0.38889],
-    "42": [0, 0.75, 0, 0, 0.5],
-    "43": [0.08333, 0.58333, 0, 0, 0.77778],
-    "44": [0.19444, 0.10556, 0, 0, 0.27778],
-    "45": [0, 0.43056, 0, 0, 0.33333],
-    "46": [0, 0.10556, 0, 0, 0.27778],
-    "47": [0.25, 0.75, 0, 0, 0.5],
-    "48": [0, 0.64444, 0, 0, 0.5],
-    "49": [0, 0.64444, 0, 0, 0.5],
-    "50": [0, 0.64444, 0, 0, 0.5],
-    "51": [0, 0.64444, 0, 0, 0.5],
-    "52": [0, 0.64444, 0, 0, 0.5],
-    "53": [0, 0.64444, 0, 0, 0.5],
-    "54": [0, 0.64444, 0, 0, 0.5],
-    "55": [0, 0.64444, 0, 0, 0.5],
-    "56": [0, 0.64444, 0, 0, 0.5],
-    "57": [0, 0.64444, 0, 0, 0.5],
-    "58": [0, 0.43056, 0, 0, 0.27778],
-    "59": [0.19444, 0.43056, 0, 0, 0.27778],
-    "60": [0.0391, 0.5391, 0, 0, 0.77778],
-    "61": [-0.13313, 0.36687, 0, 0, 0.77778],
-    "62": [0.0391, 0.5391, 0, 0, 0.77778],
-    "63": [0, 0.69444, 0, 0, 0.47222],
-    "64": [0, 0.69444, 0, 0, 0.77778],
-    "65": [0, 0.68333, 0, 0, 0.75],
-    "66": [0, 0.68333, 0, 0, 0.70834],
-    "67": [0, 0.68333, 0, 0, 0.72222],
-    "68": [0, 0.68333, 0, 0, 0.76389],
-    "69": [0, 0.68333, 0, 0, 0.68056],
-    "70": [0, 0.68333, 0, 0, 0.65278],
-    "71": [0, 0.68333, 0, 0, 0.78472],
-    "72": [0, 0.68333, 0, 0, 0.75],
-    "73": [0, 0.68333, 0, 0, 0.36111],
-    "74": [0, 0.68333, 0, 0, 0.51389],
-    "75": [0, 0.68333, 0, 0, 0.77778],
-    "76": [0, 0.68333, 0, 0, 0.625],
-    "77": [0, 0.68333, 0, 0, 0.91667],
-    "78": [0, 0.68333, 0, 0, 0.75],
-    "79": [0, 0.68333, 0, 0, 0.77778],
-    "80": [0, 0.68333, 0, 0, 0.68056],
-    "81": [0.19444, 0.68333, 0, 0, 0.77778],
-    "82": [0, 0.68333, 0, 0, 0.73611],
-    "83": [0, 0.68333, 0, 0, 0.55556],
-    "84": [0, 0.68333, 0, 0, 0.72222],
-    "85": [0, 0.68333, 0, 0, 0.75],
-    "86": [0, 0.68333, 0.01389, 0, 0.75],
-    "87": [0, 0.68333, 0.01389, 0, 1.02778],
-    "88": [0, 0.68333, 0, 0, 0.75],
-    "89": [0, 0.68333, 0.025, 0, 0.75],
-    "90": [0, 0.68333, 0, 0, 0.61111],
-    "91": [0.25, 0.75, 0, 0, 0.27778],
-    "92": [0.25, 0.75, 0, 0, 0.5],
-    "93": [0.25, 0.75, 0, 0, 0.27778],
-    "94": [0, 0.69444, 0, 0, 0.5],
-    "95": [0.31, 0.12056, 0.02778, 0, 0.5],
-    "97": [0, 0.43056, 0, 0, 0.5],
-    "98": [0, 0.69444, 0, 0, 0.55556],
-    "99": [0, 0.43056, 0, 0, 0.44445],
-    "100": [0, 0.69444, 0, 0, 0.55556],
-    "101": [0, 0.43056, 0, 0, 0.44445],
-    "102": [0, 0.69444, 0.07778, 0, 0.30556],
-    "103": [0.19444, 0.43056, 0.01389, 0, 0.5],
-    "104": [0, 0.69444, 0, 0, 0.55556],
-    "105": [0, 0.66786, 0, 0, 0.27778],
-    "106": [0.19444, 0.66786, 0, 0, 0.30556],
-    "107": [0, 0.69444, 0, 0, 0.52778],
-    "108": [0, 0.69444, 0, 0, 0.27778],
-    "109": [0, 0.43056, 0, 0, 0.83334],
-    "110": [0, 0.43056, 0, 0, 0.55556],
-    "111": [0, 0.43056, 0, 0, 0.5],
-    "112": [0.19444, 0.43056, 0, 0, 0.55556],
-    "113": [0.19444, 0.43056, 0, 0, 0.52778],
-    "114": [0, 0.43056, 0, 0, 0.39167],
-    "115": [0, 0.43056, 0, 0, 0.39445],
-    "116": [0, 0.61508, 0, 0, 0.38889],
-    "117": [0, 0.43056, 0, 0, 0.55556],
-    "118": [0, 0.43056, 0.01389, 0, 0.52778],
-    "119": [0, 0.43056, 0.01389, 0, 0.72222],
-    "120": [0, 0.43056, 0, 0, 0.52778],
-    "121": [0.19444, 0.43056, 0.01389, 0, 0.52778],
-    "122": [0, 0.43056, 0, 0, 0.44445],
-    "123": [0.25, 0.75, 0, 0, 0.5],
-    "124": [0.25, 0.75, 0, 0, 0.27778],
-    "125": [0.25, 0.75, 0, 0, 0.5],
-    "126": [0.35, 0.31786, 0, 0, 0.5],
-    "160": [0, 0, 0, 0, 0.25],
-    "167": [0.19444, 0.69444, 0, 0, 0.44445],
-    "168": [0, 0.66786, 0, 0, 0.5],
-    "172": [0, 0.43056, 0, 0, 0.66667],
-    "176": [0, 0.69444, 0, 0, 0.75],
-    "177": [0.08333, 0.58333, 0, 0, 0.77778],
-    "182": [0.19444, 0.69444, 0, 0, 0.61111],
-    "184": [0.17014, 0, 0, 0, 0.44445],
-    "198": [0, 0.68333, 0, 0, 0.90278],
-    "215": [0.08333, 0.58333, 0, 0, 0.77778],
-    "216": [0.04861, 0.73194, 0, 0, 0.77778],
-    "223": [0, 0.69444, 0, 0, 0.5],
-    "230": [0, 0.43056, 0, 0, 0.72222],
-    "247": [0.08333, 0.58333, 0, 0, 0.77778],
-    "248": [0.09722, 0.52778, 0, 0, 0.5],
-    "305": [0, 0.43056, 0, 0, 0.27778],
-    "338": [0, 0.68333, 0, 0, 1.01389],
-    "339": [0, 0.43056, 0, 0, 0.77778],
-    "567": [0.19444, 0.43056, 0, 0, 0.30556],
-    "710": [0, 0.69444, 0, 0, 0.5],
-    "711": [0, 0.62847, 0, 0, 0.5],
-    "713": [0, 0.56778, 0, 0, 0.5],
-    "714": [0, 0.69444, 0, 0, 0.5],
-    "715": [0, 0.69444, 0, 0, 0.5],
-    "728": [0, 0.69444, 0, 0, 0.5],
-    "729": [0, 0.66786, 0, 0, 0.27778],
-    "730": [0, 0.69444, 0, 0, 0.75],
-    "732": [0, 0.66786, 0, 0, 0.5],
-    "733": [0, 0.69444, 0, 0, 0.5],
-    "915": [0, 0.68333, 0, 0, 0.625],
-    "916": [0, 0.68333, 0, 0, 0.83334],
-    "920": [0, 0.68333, 0, 0, 0.77778],
-    "923": [0, 0.68333, 0, 0, 0.69445],
-    "926": [0, 0.68333, 0, 0, 0.66667],
-    "928": [0, 0.68333, 0, 0, 0.75],
-    "931": [0, 0.68333, 0, 0, 0.72222],
-    "933": [0, 0.68333, 0, 0, 0.77778],
-    "934": [0, 0.68333, 0, 0, 0.72222],
-    "936": [0, 0.68333, 0, 0, 0.77778],
-    "937": [0, 0.68333, 0, 0, 0.72222],
-    "8211": [0, 0.43056, 0.02778, 0, 0.5],
-    "8212": [0, 0.43056, 0.02778, 0, 1.0],
-    "8216": [0, 0.69444, 0, 0, 0.27778],
-    "8217": [0, 0.69444, 0, 0, 0.27778],
-    "8220": [0, 0.69444, 0, 0, 0.5],
-    "8221": [0, 0.69444, 0, 0, 0.5],
-    "8224": [0.19444, 0.69444, 0, 0, 0.44445],
-    "8225": [0.19444, 0.69444, 0, 0, 0.44445],
-    "8230": [0, 0.12, 0, 0, 1.172],
-    "8242": [0, 0.55556, 0, 0, 0.275],
-    "8407": [0, 0.71444, 0.15382, 0, 0.5],
-    "8463": [0, 0.68889, 0, 0, 0.54028],
-    "8465": [0, 0.69444, 0, 0, 0.72222],
-    "8467": [0, 0.69444, 0, 0.11111, 0.41667],
-    "8472": [0.19444, 0.43056, 0, 0.11111, 0.63646],
-    "8476": [0, 0.69444, 0, 0, 0.72222],
-    "8501": [0, 0.69444, 0, 0, 0.61111],
-    "8592": [-0.13313, 0.36687, 0, 0, 1.0],
-    "8593": [0.19444, 0.69444, 0, 0, 0.5],
-    "8594": [-0.13313, 0.36687, 0, 0, 1.0],
-    "8595": [0.19444, 0.69444, 0, 0, 0.5],
-    "8596": [-0.13313, 0.36687, 0, 0, 1.0],
-    "8597": [0.25, 0.75, 0, 0, 0.5],
-    "8598": [0.19444, 0.69444, 0, 0, 1.0],
-    "8599": [0.19444, 0.69444, 0, 0, 1.0],
-    "8600": [0.19444, 0.69444, 0, 0, 1.0],
-    "8601": [0.19444, 0.69444, 0, 0, 1.0],
-    "8614": [0.011, 0.511, 0, 0, 1.0],
-    "8617": [0.011, 0.511, 0, 0, 1.126],
-    "8618": [0.011, 0.511, 0, 0, 1.126],
-    "8636": [-0.13313, 0.36687, 0, 0, 1.0],
-    "8637": [-0.13313, 0.36687, 0, 0, 1.0],
-    "8640": [-0.13313, 0.36687, 0, 0, 1.0],
-    "8641": [-0.13313, 0.36687, 0, 0, 1.0],
-    "8652": [0.011, 0.671, 0, 0, 1.0],
-    "8656": [-0.13313, 0.36687, 0, 0, 1.0],
-    "8657": [0.19444, 0.69444, 0, 0, 0.61111],
-    "8658": [-0.13313, 0.36687, 0, 0, 1.0],
-    "8659": [0.19444, 0.69444, 0, 0, 0.61111],
-    "8660": [-0.13313, 0.36687, 0, 0, 1.0],
-    "8661": [0.25, 0.75, 0, 0, 0.61111],
-    "8704": [0, 0.69444, 0, 0, 0.55556],
-    "8706": [0, 0.69444, 0.05556, 0.08334, 0.5309],
-    "8707": [0, 0.69444, 0, 0, 0.55556],
-    "8709": [0.05556, 0.75, 0, 0, 0.5],
-    "8711": [0, 0.68333, 0, 0, 0.83334],
-    "8712": [0.0391, 0.5391, 0, 0, 0.66667],
-    "8715": [0.0391, 0.5391, 0, 0, 0.66667],
-    "8722": [0.08333, 0.58333, 0, 0, 0.77778],
-    "8723": [0.08333, 0.58333, 0, 0, 0.77778],
-    "8725": [0.25, 0.75, 0, 0, 0.5],
-    "8726": [0.25, 0.75, 0, 0, 0.5],
-    "8727": [-0.03472, 0.46528, 0, 0, 0.5],
-    "8728": [-0.05555, 0.44445, 0, 0, 0.5],
-    "8729": [-0.05555, 0.44445, 0, 0, 0.5],
-    "8730": [0.2, 0.8, 0, 0, 0.83334],
-    "8733": [0, 0.43056, 0, 0, 0.77778],
-    "8734": [0, 0.43056, 0, 0, 1.0],
-    "8736": [0, 0.69224, 0, 0, 0.72222],
-    "8739": [0.25, 0.75, 0, 0, 0.27778],
-    "8741": [0.25, 0.75, 0, 0, 0.5],
-    "8743": [0, 0.55556, 0, 0, 0.66667],
-    "8744": [0, 0.55556, 0, 0, 0.66667],
-    "8745": [0, 0.55556, 0, 0, 0.66667],
-    "8746": [0, 0.55556, 0, 0, 0.66667],
-    "8747": [0.19444, 0.69444, 0.11111, 0, 0.41667],
-    "8764": [-0.13313, 0.36687, 0, 0, 0.77778],
-    "8768": [0.19444, 0.69444, 0, 0, 0.27778],
-    "8771": [-0.03625, 0.46375, 0, 0, 0.77778],
-    "8773": [-0.022, 0.589, 0, 0, 1.0],
-    "8776": [-0.01688, 0.48312, 0, 0, 0.77778],
-    "8781": [-0.03625, 0.46375, 0, 0, 0.77778],
-    "8784": [-0.133, 0.67, 0, 0, 0.778],
-    "8801": [-0.03625, 0.46375, 0, 0, 0.77778],
-    "8804": [0.13597, 0.63597, 0, 0, 0.77778],
-    "8805": [0.13597, 0.63597, 0, 0, 0.77778],
-    "8810": [0.0391, 0.5391, 0, 0, 1.0],
-    "8811": [0.0391, 0.5391, 0, 0, 1.0],
-    "8826": [0.0391, 0.5391, 0, 0, 0.77778],
-    "8827": [0.0391, 0.5391, 0, 0, 0.77778],
-    "8834": [0.0391, 0.5391, 0, 0, 0.77778],
-    "8835": [0.0391, 0.5391, 0, 0, 0.77778],
-    "8838": [0.13597, 0.63597, 0, 0, 0.77778],
-    "8839": [0.13597, 0.63597, 0, 0, 0.77778],
-    "8846": [0, 0.55556, 0, 0, 0.66667],
-    "8849": [0.13597, 0.63597, 0, 0, 0.77778],
-    "8850": [0.13597, 0.63597, 0, 0, 0.77778],
-    "8851": [0, 0.55556, 0, 0, 0.66667],
-    "8852": [0, 0.55556, 0, 0, 0.66667],
-    "8853": [0.08333, 0.58333, 0, 0, 0.77778],
-    "8854": [0.08333, 0.58333, 0, 0, 0.77778],
-    "8855": [0.08333, 0.58333, 0, 0, 0.77778],
-    "8856": [0.08333, 0.58333, 0, 0, 0.77778],
-    "8857": [0.08333, 0.58333, 0, 0, 0.77778],
-    "8866": [0, 0.69444, 0, 0, 0.61111],
-    "8867": [0, 0.69444, 0, 0, 0.61111],
-    "8868": [0, 0.69444, 0, 0, 0.77778],
-    "8869": [0, 0.69444, 0, 0, 0.77778],
-    "8872": [0.249, 0.75, 0, 0, 0.867],
-    "8900": [-0.05555, 0.44445, 0, 0, 0.5],
-    "8901": [-0.05555, 0.44445, 0, 0, 0.27778],
-    "8902": [-0.03472, 0.46528, 0, 0, 0.5],
-    "8904": [0.005, 0.505, 0, 0, 0.9],
-    "8942": [0.03, 0.9, 0, 0, 0.278],
-    "8943": [-0.19, 0.31, 0, 0, 1.172],
-    "8945": [-0.1, 0.82, 0, 0, 1.282],
-    "8968": [0.25, 0.75, 0, 0, 0.44445],
-    "8969": [0.25, 0.75, 0, 0, 0.44445],
-    "8970": [0.25, 0.75, 0, 0, 0.44445],
-    "8971": [0.25, 0.75, 0, 0, 0.44445],
-    "8994": [-0.14236, 0.35764, 0, 0, 1.0],
-    "8995": [-0.14236, 0.35764, 0, 0, 1.0],
-    "9136": [0.244, 0.744, 0, 0, 0.412],
-    "9137": [0.244, 0.744, 0, 0, 0.412],
-    "9651": [0.19444, 0.69444, 0, 0, 0.88889],
-    "9657": [-0.03472, 0.46528, 0, 0, 0.5],
-    "9661": [0.19444, 0.69444, 0, 0, 0.88889],
-    "9667": [-0.03472, 0.46528, 0, 0, 0.5],
-    "9711": [0.19444, 0.69444, 0, 0, 1.0],
-    "9824": [0.12963, 0.69444, 0, 0, 0.77778],
-    "9825": [0.12963, 0.69444, 0, 0, 0.77778],
-    "9826": [0.12963, 0.69444, 0, 0, 0.77778],
-    "9827": [0.12963, 0.69444, 0, 0, 0.77778],
-    "9837": [0, 0.75, 0, 0, 0.38889],
-    "9838": [0.19444, 0.69444, 0, 0, 0.38889],
-    "9839": [0.19444, 0.69444, 0, 0, 0.38889],
-    "10216": [0.25, 0.75, 0, 0, 0.38889],
-    "10217": [0.25, 0.75, 0, 0, 0.38889],
-    "10222": [0.244, 0.744, 0, 0, 0.412],
-    "10223": [0.244, 0.744, 0, 0, 0.412],
-    "10229": [0.011, 0.511, 0, 0, 1.609],
-    "10230": [0.011, 0.511, 0, 0, 1.638],
-    "10231": [0.011, 0.511, 0, 0, 1.859],
-    "10232": [0.024, 0.525, 0, 0, 1.609],
-    "10233": [0.024, 0.525, 0, 0, 1.638],
-    "10234": [0.024, 0.525, 0, 0, 1.858],
-    "10236": [0.011, 0.511, 0, 0, 1.638],
-    "10815": [0, 0.68333, 0, 0, 0.75],
-    "10927": [0.13597, 0.63597, 0, 0, 0.77778],
-    "10928": [0.13597, 0.63597, 0, 0, 0.77778],
-    "57376": [0.19444, 0.69444, 0, 0, 0]
-  },
-  "Math-BoldItalic": {
-    "65": [0, 0.68611, 0, 0, 0.86944],
-    "66": [0, 0.68611, 0.04835, 0, 0.8664],
-    "67": [0, 0.68611, 0.06979, 0, 0.81694],
-    "68": [0, 0.68611, 0.03194, 0, 0.93812],
-    "69": [0, 0.68611, 0.05451, 0, 0.81007],
-    "70": [0, 0.68611, 0.15972, 0, 0.68889],
-    "71": [0, 0.68611, 0, 0, 0.88673],
-    "72": [0, 0.68611, 0.08229, 0, 0.98229],
-    "73": [0, 0.68611, 0.07778, 0, 0.51111],
-    "74": [0, 0.68611, 0.10069, 0, 0.63125],
-    "75": [0, 0.68611, 0.06979, 0, 0.97118],
-    "76": [0, 0.68611, 0, 0, 0.75555],
-    "77": [0, 0.68611, 0.11424, 0, 1.14201],
-    "78": [0, 0.68611, 0.11424, 0, 0.95034],
-    "79": [0, 0.68611, 0.03194, 0, 0.83666],
-    "80": [0, 0.68611, 0.15972, 0, 0.72309],
-    "81": [0.19444, 0.68611, 0, 0, 0.86861],
-    "82": [0, 0.68611, 0.00421, 0, 0.87235],
-    "83": [0, 0.68611, 0.05382, 0, 0.69271],
-    "84": [0, 0.68611, 0.15972, 0, 0.63663],
-    "85": [0, 0.68611, 0.11424, 0, 0.80027],
-    "86": [0, 0.68611, 0.25555, 0, 0.67778],
-    "87": [0, 0.68611, 0.15972, 0, 1.09305],
-    "88": [0, 0.68611, 0.07778, 0, 0.94722],
-    "89": [0, 0.68611, 0.25555, 0, 0.67458],
-    "90": [0, 0.68611, 0.06979, 0, 0.77257],
-    "97": [0, 0.44444, 0, 0, 0.63287],
-    "98": [0, 0.69444, 0, 0, 0.52083],
-    "99": [0, 0.44444, 0, 0, 0.51342],
-    "100": [0, 0.69444, 0, 0, 0.60972],
-    "101": [0, 0.44444, 0, 0, 0.55361],
-    "102": [0.19444, 0.69444, 0.11042, 0, 0.56806],
-    "103": [0.19444, 0.44444, 0.03704, 0, 0.5449],
-    "104": [0, 0.69444, 0, 0, 0.66759],
-    "105": [0, 0.69326, 0, 0, 0.4048],
-    "106": [0.19444, 0.69326, 0.0622, 0, 0.47083],
-    "107": [0, 0.69444, 0.01852, 0, 0.6037],
-    "108": [0, 0.69444, 0.0088, 0, 0.34815],
-    "109": [0, 0.44444, 0, 0, 1.0324],
-    "110": [0, 0.44444, 0, 0, 0.71296],
-    "111": [0, 0.44444, 0, 0, 0.58472],
-    "112": [0.19444, 0.44444, 0, 0, 0.60092],
-    "113": [0.19444, 0.44444, 0.03704, 0, 0.54213],
-    "114": [0, 0.44444, 0.03194, 0, 0.5287],
-    "115": [0, 0.44444, 0, 0, 0.53125],
-    "116": [0, 0.63492, 0, 0, 0.41528],
-    "117": [0, 0.44444, 0, 0, 0.68102],
-    "118": [0, 0.44444, 0.03704, 0, 0.56666],
-    "119": [0, 0.44444, 0.02778, 0, 0.83148],
-    "120": [0, 0.44444, 0, 0, 0.65903],
-    "121": [0.19444, 0.44444, 0.03704, 0, 0.59028],
-    "122": [0, 0.44444, 0.04213, 0, 0.55509],
-    "915": [0, 0.68611, 0.15972, 0, 0.65694],
-    "916": [0, 0.68611, 0, 0, 0.95833],
-    "920": [0, 0.68611, 0.03194, 0, 0.86722],
-    "923": [0, 0.68611, 0, 0, 0.80555],
-    "926": [0, 0.68611, 0.07458, 0, 0.84125],
-    "928": [0, 0.68611, 0.08229, 0, 0.98229],
-    "931": [0, 0.68611, 0.05451, 0, 0.88507],
-    "933": [0, 0.68611, 0.15972, 0, 0.67083],
-    "934": [0, 0.68611, 0, 0, 0.76666],
-    "936": [0, 0.68611, 0.11653, 0, 0.71402],
-    "937": [0, 0.68611, 0.04835, 0, 0.8789],
-    "945": [0, 0.44444, 0, 0, 0.76064],
-    "946": [0.19444, 0.69444, 0.03403, 0, 0.65972],
-    "947": [0.19444, 0.44444, 0.06389, 0, 0.59003],
-    "948": [0, 0.69444, 0.03819, 0, 0.52222],
-    "949": [0, 0.44444, 0, 0, 0.52882],
-    "950": [0.19444, 0.69444, 0.06215, 0, 0.50833],
-    "951": [0.19444, 0.44444, 0.03704, 0, 0.6],
-    "952": [0, 0.69444, 0.03194, 0, 0.5618],
-    "953": [0, 0.44444, 0, 0, 0.41204],
-    "954": [0, 0.44444, 0, 0, 0.66759],
-    "955": [0, 0.69444, 0, 0, 0.67083],
-    "956": [0.19444, 0.44444, 0, 0, 0.70787],
-    "957": [0, 0.44444, 0.06898, 0, 0.57685],
-    "958": [0.19444, 0.69444, 0.03021, 0, 0.50833],
-    "959": [0, 0.44444, 0, 0, 0.58472],
-    "960": [0, 0.44444, 0.03704, 0, 0.68241],
-    "961": [0.19444, 0.44444, 0, 0, 0.6118],
-    "962": [0.09722, 0.44444, 0.07917, 0, 0.42361],
-    "963": [0, 0.44444, 0.03704, 0, 0.68588],
-    "964": [0, 0.44444, 0.13472, 0, 0.52083],
-    "965": [0, 0.44444, 0.03704, 0, 0.63055],
-    "966": [0.19444, 0.44444, 0, 0, 0.74722],
-    "967": [0.19444, 0.44444, 0, 0, 0.71805],
-    "968": [0.19444, 0.69444, 0.03704, 0, 0.75833],
-    "969": [0, 0.44444, 0.03704, 0, 0.71782],
-    "977": [0, 0.69444, 0, 0, 0.69155],
-    "981": [0.19444, 0.69444, 0, 0, 0.7125],
-    "982": [0, 0.44444, 0.03194, 0, 0.975],
-    "1009": [0.19444, 0.44444, 0, 0, 0.6118],
-    "1013": [0, 0.44444, 0, 0, 0.48333]
-  },
-  "Math-Italic": {
-    "65": [0, 0.68333, 0, 0.13889, 0.75],
-    "66": [0, 0.68333, 0.05017, 0.08334, 0.75851],
-    "67": [0, 0.68333, 0.07153, 0.08334, 0.71472],
-    "68": [0, 0.68333, 0.02778, 0.05556, 0.82792],
-    "69": [0, 0.68333, 0.05764, 0.08334, 0.7382],
-    "70": [0, 0.68333, 0.13889, 0.08334, 0.64306],
-    "71": [0, 0.68333, 0, 0.08334, 0.78625],
-    "72": [0, 0.68333, 0.08125, 0.05556, 0.83125],
-    "73": [0, 0.68333, 0.07847, 0.11111, 0.43958],
-    "74": [0, 0.68333, 0.09618, 0.16667, 0.55451],
-    "75": [0, 0.68333, 0.07153, 0.05556, 0.84931],
-    "76": [0, 0.68333, 0, 0.02778, 0.68056],
-    "77": [0, 0.68333, 0.10903, 0.08334, 0.97014],
-    "78": [0, 0.68333, 0.10903, 0.08334, 0.80347],
-    "79": [0, 0.68333, 0.02778, 0.08334, 0.76278],
-    "80": [0, 0.68333, 0.13889, 0.08334, 0.64201],
-    "81": [0.19444, 0.68333, 0, 0.08334, 0.79056],
-    "82": [0, 0.68333, 0.00773, 0.08334, 0.75929],
-    "83": [0, 0.68333, 0.05764, 0.08334, 0.6132],
-    "84": [0, 0.68333, 0.13889, 0.08334, 0.58438],
-    "85": [0, 0.68333, 0.10903, 0.02778, 0.68278],
-    "86": [0, 0.68333, 0.22222, 0, 0.58333],
-    "87": [0, 0.68333, 0.13889, 0, 0.94445],
-    "88": [0, 0.68333, 0.07847, 0.08334, 0.82847],
-    "89": [0, 0.68333, 0.22222, 0, 0.58056],
-    "90": [0, 0.68333, 0.07153, 0.08334, 0.68264],
-    "97": [0, 0.43056, 0, 0, 0.52859],
-    "98": [0, 0.69444, 0, 0, 0.42917],
-    "99": [0, 0.43056, 0, 0.05556, 0.43276],
-    "100": [0, 0.69444, 0, 0.16667, 0.52049],
-    "101": [0, 0.43056, 0, 0.05556, 0.46563],
-    "102": [0.19444, 0.69444, 0.10764, 0.16667, 0.48959],
-    "103": [0.19444, 0.43056, 0.03588, 0.02778, 0.47697],
-    "104": [0, 0.69444, 0, 0, 0.57616],
-    "105": [0, 0.65952, 0, 0, 0.34451],
-    "106": [0.19444, 0.65952, 0.05724, 0, 0.41181],
-    "107": [0, 0.69444, 0.03148, 0, 0.5206],
-    "108": [0, 0.69444, 0.01968, 0.08334, 0.29838],
-    "109": [0, 0.43056, 0, 0, 0.87801],
-    "110": [0, 0.43056, 0, 0, 0.60023],
-    "111": [0, 0.43056, 0, 0.05556, 0.48472],
-    "112": [0.19444, 0.43056, 0, 0.08334, 0.50313],
-    "113": [0.19444, 0.43056, 0.03588, 0.08334, 0.44641],
-    "114": [0, 0.43056, 0.02778, 0.05556, 0.45116],
-    "115": [0, 0.43056, 0, 0.05556, 0.46875],
-    "116": [0, 0.61508, 0, 0.08334, 0.36111],
-    "117": [0, 0.43056, 0, 0.02778, 0.57246],
-    "118": [0, 0.43056, 0.03588, 0.02778, 0.48472],
-    "119": [0, 0.43056, 0.02691, 0.08334, 0.71592],
-    "120": [0, 0.43056, 0, 0.02778, 0.57153],
-    "121": [0.19444, 0.43056, 0.03588, 0.05556, 0.49028],
-    "122": [0, 0.43056, 0.04398, 0.05556, 0.46505],
-    "915": [0, 0.68333, 0.13889, 0.08334, 0.61528],
-    "916": [0, 0.68333, 0, 0.16667, 0.83334],
-    "920": [0, 0.68333, 0.02778, 0.08334, 0.76278],
-    "923": [0, 0.68333, 0, 0.16667, 0.69445],
-    "926": [0, 0.68333, 0.07569, 0.08334, 0.74236],
-    "928": [0, 0.68333, 0.08125, 0.05556, 0.83125],
-    "931": [0, 0.68333, 0.05764, 0.08334, 0.77986],
-    "933": [0, 0.68333, 0.13889, 0.05556, 0.58333],
-    "934": [0, 0.68333, 0, 0.08334, 0.66667],
-    "936": [0, 0.68333, 0.11, 0.05556, 0.61222],
-    "937": [0, 0.68333, 0.05017, 0.08334, 0.7724],
-    "945": [0, 0.43056, 0.0037, 0.02778, 0.6397],
-    "946": [0.19444, 0.69444, 0.05278, 0.08334, 0.56563],
-    "947": [0.19444, 0.43056, 0.05556, 0, 0.51773],
-    "948": [0, 0.69444, 0.03785, 0.05556, 0.44444],
-    "949": [0, 0.43056, 0, 0.08334, 0.46632],
-    "950": [0.19444, 0.69444, 0.07378, 0.08334, 0.4375],
-    "951": [0.19444, 0.43056, 0.03588, 0.05556, 0.49653],
-    "952": [0, 0.69444, 0.02778, 0.08334, 0.46944],
-    "953": [0, 0.43056, 0, 0.05556, 0.35394],
-    "954": [0, 0.43056, 0, 0, 0.57616],
-    "955": [0, 0.69444, 0, 0, 0.58334],
-    "956": [0.19444, 0.43056, 0, 0.02778, 0.60255],
-    "957": [0, 0.43056, 0.06366, 0.02778, 0.49398],
-    "958": [0.19444, 0.69444, 0.04601, 0.11111, 0.4375],
-    "959": [0, 0.43056, 0, 0.05556, 0.48472],
-    "960": [0, 0.43056, 0.03588, 0, 0.57003],
-    "961": [0.19444, 0.43056, 0, 0.08334, 0.51702],
-    "962": [0.09722, 0.43056, 0.07986, 0.08334, 0.36285],
-    "963": [0, 0.43056, 0.03588, 0, 0.57141],
-    "964": [0, 0.43056, 0.1132, 0.02778, 0.43715],
-    "965": [0, 0.43056, 0.03588, 0.02778, 0.54028],
-    "966": [0.19444, 0.43056, 0, 0.08334, 0.65417],
-    "967": [0.19444, 0.43056, 0, 0.05556, 0.62569],
-    "968": [0.19444, 0.69444, 0.03588, 0.11111, 0.65139],
-    "969": [0, 0.43056, 0.03588, 0, 0.62245],
-    "977": [0, 0.69444, 0, 0.08334, 0.59144],
-    "981": [0.19444, 0.69444, 0, 0.08334, 0.59583],
-    "982": [0, 0.43056, 0.02778, 0, 0.82813],
-    "1009": [0.19444, 0.43056, 0, 0.08334, 0.51702],
-    "1013": [0, 0.43056, 0, 0.05556, 0.4059]
-  },
-  "Math-Regular": {
-    "65": [0, 0.68333, 0, 0.13889, 0.75],
-    "66": [0, 0.68333, 0.05017, 0.08334, 0.75851],
-    "67": [0, 0.68333, 0.07153, 0.08334, 0.71472],
-    "68": [0, 0.68333, 0.02778, 0.05556, 0.82792],
-    "69": [0, 0.68333, 0.05764, 0.08334, 0.7382],
-    "70": [0, 0.68333, 0.13889, 0.08334, 0.64306],
-    "71": [0, 0.68333, 0, 0.08334, 0.78625],
-    "72": [0, 0.68333, 0.08125, 0.05556, 0.83125],
-    "73": [0, 0.68333, 0.07847, 0.11111, 0.43958],
-    "74": [0, 0.68333, 0.09618, 0.16667, 0.55451],
-    "75": [0, 0.68333, 0.07153, 0.05556, 0.84931],
-    "76": [0, 0.68333, 0, 0.02778, 0.68056],
-    "77": [0, 0.68333, 0.10903, 0.08334, 0.97014],
-    "78": [0, 0.68333, 0.10903, 0.08334, 0.80347],
-    "79": [0, 0.68333, 0.02778, 0.08334, 0.76278],
-    "80": [0, 0.68333, 0.13889, 0.08334, 0.64201],
-    "81": [0.19444, 0.68333, 0, 0.08334, 0.79056],
-    "82": [0, 0.68333, 0.00773, 0.08334, 0.75929],
-    "83": [0, 0.68333, 0.05764, 0.08334, 0.6132],
-    "84": [0, 0.68333, 0.13889, 0.08334, 0.58438],
-    "85": [0, 0.68333, 0.10903, 0.02778, 0.68278],
-    "86": [0, 0.68333, 0.22222, 0, 0.58333],
-    "87": [0, 0.68333, 0.13889, 0, 0.94445],
-    "88": [0, 0.68333, 0.07847, 0.08334, 0.82847],
-    "89": [0, 0.68333, 0.22222, 0, 0.58056],
-    "90": [0, 0.68333, 0.07153, 0.08334, 0.68264],
-    "97": [0, 0.43056, 0, 0, 0.52859],
-    "98": [0, 0.69444, 0, 0, 0.42917],
-    "99": [0, 0.43056, 0, 0.05556, 0.43276],
-    "100": [0, 0.69444, 0, 0.16667, 0.52049],
-    "101": [0, 0.43056, 0, 0.05556, 0.46563],
-    "102": [0.19444, 0.69444, 0.10764, 0.16667, 0.48959],
-    "103": [0.19444, 0.43056, 0.03588, 0.02778, 0.47697],
-    "104": [0, 0.69444, 0, 0, 0.57616],
-    "105": [0, 0.65952, 0, 0, 0.34451],
-    "106": [0.19444, 0.65952, 0.05724, 0, 0.41181],
-    "107": [0, 0.69444, 0.03148, 0, 0.5206],
-    "108": [0, 0.69444, 0.01968, 0.08334, 0.29838],
-    "109": [0, 0.43056, 0, 0, 0.87801],
-    "110": [0, 0.43056, 0, 0, 0.60023],
-    "111": [0, 0.43056, 0, 0.05556, 0.48472],
-    "112": [0.19444, 0.43056, 0, 0.08334, 0.50313],
-    "113": [0.19444, 0.43056, 0.03588, 0.08334, 0.44641],
-    "114": [0, 0.43056, 0.02778, 0.05556, 0.45116],
-    "115": [0, 0.43056, 0, 0.05556, 0.46875],
-    "116": [0, 0.61508, 0, 0.08334, 0.36111],
-    "117": [0, 0.43056, 0, 0.02778, 0.57246],
-    "118": [0, 0.43056, 0.03588, 0.02778, 0.48472],
-    "119": [0, 0.43056, 0.02691, 0.08334, 0.71592],
-    "120": [0, 0.43056, 0, 0.02778, 0.57153],
-    "121": [0.19444, 0.43056, 0.03588, 0.05556, 0.49028],
-    "122": [0, 0.43056, 0.04398, 0.05556, 0.46505],
-    "915": [0, 0.68333, 0.13889, 0.08334, 0.61528],
-    "916": [0, 0.68333, 0, 0.16667, 0.83334],
-    "920": [0, 0.68333, 0.02778, 0.08334, 0.76278],
-    "923": [0, 0.68333, 0, 0.16667, 0.69445],
-    "926": [0, 0.68333, 0.07569, 0.08334, 0.74236],
-    "928": [0, 0.68333, 0.08125, 0.05556, 0.83125],
-    "931": [0, 0.68333, 0.05764, 0.08334, 0.77986],
-    "933": [0, 0.68333, 0.13889, 0.05556, 0.58333],
-    "934": [0, 0.68333, 0, 0.08334, 0.66667],
-    "936": [0, 0.68333, 0.11, 0.05556, 0.61222],
-    "937": [0, 0.68333, 0.05017, 0.08334, 0.7724],
-    "945": [0, 0.43056, 0.0037, 0.02778, 0.6397],
-    "946": [0.19444, 0.69444, 0.05278, 0.08334, 0.56563],
-    "947": [0.19444, 0.43056, 0.05556, 0, 0.51773],
-    "948": [0, 0.69444, 0.03785, 0.05556, 0.44444],
-    "949": [0, 0.43056, 0, 0.08334, 0.46632],
-    "950": [0.19444, 0.69444, 0.07378, 0.08334, 0.4375],
-    "951": [0.19444, 0.43056, 0.03588, 0.05556, 0.49653],
-    "952": [0, 0.69444, 0.02778, 0.08334, 0.46944],
-    "953": [0, 0.43056, 0, 0.05556, 0.35394],
-    "954": [0, 0.43056, 0, 0, 0.57616],
-    "955": [0, 0.69444, 0, 0, 0.58334],
-    "956": [0.19444, 0.43056, 0, 0.02778, 0.60255],
-    "957": [0, 0.43056, 0.06366, 0.02778, 0.49398],
-    "958": [0.19444, 0.69444, 0.04601, 0.11111, 0.4375],
-    "959": [0, 0.43056, 0, 0.05556, 0.48472],
-    "960": [0, 0.43056, 0.03588, 0, 0.57003],
-    "961": [0.19444, 0.43056, 0, 0.08334, 0.51702],
-    "962": [0.09722, 0.43056, 0.07986, 0.08334, 0.36285],
-    "963": [0, 0.43056, 0.03588, 0, 0.57141],
-    "964": [0, 0.43056, 0.1132, 0.02778, 0.43715],
-    "965": [0, 0.43056, 0.03588, 0.02778, 0.54028],
-    "966": [0.19444, 0.43056, 0, 0.08334, 0.65417],
-    "967": [0.19444, 0.43056, 0, 0.05556, 0.62569],
-    "968": [0.19444, 0.69444, 0.03588, 0.11111, 0.65139],
-    "969": [0, 0.43056, 0.03588, 0, 0.62245],
-    "977": [0, 0.69444, 0, 0.08334, 0.59144],
-    "981": [0.19444, 0.69444, 0, 0.08334, 0.59583],
-    "982": [0, 0.43056, 0.02778, 0, 0.82813],
-    "1009": [0.19444, 0.43056, 0, 0.08334, 0.51702],
-    "1013": [0, 0.43056, 0, 0.05556, 0.4059]
-  },
-  "SansSerif-Bold": {
-    "33": [0, 0.69444, 0, 0, 0.36667],
-    "34": [0, 0.69444, 0, 0, 0.55834],
-    "35": [0.19444, 0.69444, 0, 0, 0.91667],
-    "36": [0.05556, 0.75, 0, 0, 0.55],
-    "37": [0.05556, 0.75, 0, 0, 1.02912],
-    "38": [0, 0.69444, 0, 0, 0.83056],
-    "39": [0, 0.69444, 0, 0, 0.30556],
-    "40": [0.25, 0.75, 0, 0, 0.42778],
-    "41": [0.25, 0.75, 0, 0, 0.42778],
-    "42": [0, 0.75, 0, 0, 0.55],
-    "43": [0.11667, 0.61667, 0, 0, 0.85556],
-    "44": [0.10556, 0.13056, 0, 0, 0.30556],
-    "45": [0, 0.45833, 0, 0, 0.36667],
-    "46": [0, 0.13056, 0, 0, 0.30556],
-    "47": [0.25, 0.75, 0, 0, 0.55],
-    "48": [0, 0.69444, 0, 0, 0.55],
-    "49": [0, 0.69444, 0, 0, 0.55],
-    "50": [0, 0.69444, 0, 0, 0.55],
-    "51": [0, 0.69444, 0, 0, 0.55],
-    "52": [0, 0.69444, 0, 0, 0.55],
-    "53": [0, 0.69444, 0, 0, 0.55],
-    "54": [0, 0.69444, 0, 0, 0.55],
-    "55": [0, 0.69444, 0, 0, 0.55],
-    "56": [0, 0.69444, 0, 0, 0.55],
-    "57": [0, 0.69444, 0, 0, 0.55],
-    "58": [0, 0.45833, 0, 0, 0.30556],
-    "59": [0.10556, 0.45833, 0, 0, 0.30556],
-    "61": [-0.09375, 0.40625, 0, 0, 0.85556],
-    "63": [0, 0.69444, 0, 0, 0.51945],
-    "64": [0, 0.69444, 0, 0, 0.73334],
-    "65": [0, 0.69444, 0, 0, 0.73334],
-    "66": [0, 0.69444, 0, 0, 0.73334],
-    "67": [0, 0.69444, 0, 0, 0.70278],
-    "68": [0, 0.69444, 0, 0, 0.79445],
-    "69": [0, 0.69444, 0, 0, 0.64167],
-    "70": [0, 0.69444, 0, 0, 0.61111],
-    "71": [0, 0.69444, 0, 0, 0.73334],
-    "72": [0, 0.69444, 0, 0, 0.79445],
-    "73": [0, 0.69444, 0, 0, 0.33056],
-    "74": [0, 0.69444, 0, 0, 0.51945],
-    "75": [0, 0.69444, 0, 0, 0.76389],
-    "76": [0, 0.69444, 0, 0, 0.58056],
-    "77": [0, 0.69444, 0, 0, 0.97778],
-    "78": [0, 0.69444, 0, 0, 0.79445],
-    "79": [0, 0.69444, 0, 0, 0.79445],
-    "80": [0, 0.69444, 0, 0, 0.70278],
-    "81": [0.10556, 0.69444, 0, 0, 0.79445],
-    "82": [0, 0.69444, 0, 0, 0.70278],
-    "83": [0, 0.69444, 0, 0, 0.61111],
-    "84": [0, 0.69444, 0, 0, 0.73334],
-    "85": [0, 0.69444, 0, 0, 0.76389],
-    "86": [0, 0.69444, 0.01528, 0, 0.73334],
-    "87": [0, 0.69444, 0.01528, 0, 1.03889],
-    "88": [0, 0.69444, 0, 0, 0.73334],
-    "89": [0, 0.69444, 0.0275, 0, 0.73334],
-    "90": [0, 0.69444, 0, 0, 0.67223],
-    "91": [0.25, 0.75, 0, 0, 0.34306],
-    "93": [0.25, 0.75, 0, 0, 0.34306],
-    "94": [0, 0.69444, 0, 0, 0.55],
-    "95": [0.35, 0.10833, 0.03056, 0, 0.55],
-    "97": [0, 0.45833, 0, 0, 0.525],
-    "98": [0, 0.69444, 0, 0, 0.56111],
-    "99": [0, 0.45833, 0, 0, 0.48889],
-    "100": [0, 0.69444, 0, 0, 0.56111],
-    "101": [0, 0.45833, 0, 0, 0.51111],
-    "102": [0, 0.69444, 0.07639, 0, 0.33611],
-    "103": [0.19444, 0.45833, 0.01528, 0, 0.55],
-    "104": [0, 0.69444, 0, 0, 0.56111],
-    "105": [0, 0.69444, 0, 0, 0.25556],
-    "106": [0.19444, 0.69444, 0, 0, 0.28611],
-    "107": [0, 0.69444, 0, 0, 0.53056],
-    "108": [0, 0.69444, 0, 0, 0.25556],
-    "109": [0, 0.45833, 0, 0, 0.86667],
-    "110": [0, 0.45833, 0, 0, 0.56111],
-    "111": [0, 0.45833, 0, 0, 0.55],
-    "112": [0.19444, 0.45833, 0, 0, 0.56111],
-    "113": [0.19444, 0.45833, 0, 0, 0.56111],
-    "114": [0, 0.45833, 0.01528, 0, 0.37222],
-    "115": [0, 0.45833, 0, 0, 0.42167],
-    "116": [0, 0.58929, 0, 0, 0.40417],
-    "117": [0, 0.45833, 0, 0, 0.56111],
-    "118": [0, 0.45833, 0.01528, 0, 0.5],
-    "119": [0, 0.45833, 0.01528, 0, 0.74445],
-    "120": [0, 0.45833, 0, 0, 0.5],
-    "121": [0.19444, 0.45833, 0.01528, 0, 0.5],
-    "122": [0, 0.45833, 0, 0, 0.47639],
-    "126": [0.35, 0.34444, 0, 0, 0.55],
-    "168": [0, 0.69444, 0, 0, 0.55],
-    "176": [0, 0.69444, 0, 0, 0.73334],
-    "180": [0, 0.69444, 0, 0, 0.55],
-    "184": [0.17014, 0, 0, 0, 0.48889],
-    "305": [0, 0.45833, 0, 0, 0.25556],
-    "567": [0.19444, 0.45833, 0, 0, 0.28611],
-    "710": [0, 0.69444, 0, 0, 0.55],
-    "711": [0, 0.63542, 0, 0, 0.55],
-    "713": [0, 0.63778, 0, 0, 0.55],
-    "728": [0, 0.69444, 0, 0, 0.55],
-    "729": [0, 0.69444, 0, 0, 0.30556],
-    "730": [0, 0.69444, 0, 0, 0.73334],
-    "732": [0, 0.69444, 0, 0, 0.55],
-    "733": [0, 0.69444, 0, 0, 0.55],
-    "915": [0, 0.69444, 0, 0, 0.58056],
-    "916": [0, 0.69444, 0, 0, 0.91667],
-    "920": [0, 0.69444, 0, 0, 0.85556],
-    "923": [0, 0.69444, 0, 0, 0.67223],
-    "926": [0, 0.69444, 0, 0, 0.73334],
-    "928": [0, 0.69444, 0, 0, 0.79445],
-    "931": [0, 0.69444, 0, 0, 0.79445],
-    "933": [0, 0.69444, 0, 0, 0.85556],
-    "934": [0, 0.69444, 0, 0, 0.79445],
-    "936": [0, 0.69444, 0, 0, 0.85556],
-    "937": [0, 0.69444, 0, 0, 0.79445],
-    "8211": [0, 0.45833, 0.03056, 0, 0.55],
-    "8212": [0, 0.45833, 0.03056, 0, 1.10001],
-    "8216": [0, 0.69444, 0, 0, 0.30556],
-    "8217": [0, 0.69444, 0, 0, 0.30556],
-    "8220": [0, 0.69444, 0, 0, 0.55834],
-    "8221": [0, 0.69444, 0, 0, 0.55834]
-  },
-  "SansSerif-Italic": {
-    "33": [0, 0.69444, 0.05733, 0, 0.31945],
-    "34": [0, 0.69444, 0.00316, 0, 0.5],
-    "35": [0.19444, 0.69444, 0.05087, 0, 0.83334],
-    "36": [0.05556, 0.75, 0.11156, 0, 0.5],
-    "37": [0.05556, 0.75, 0.03126, 0, 0.83334],
-    "38": [0, 0.69444, 0.03058, 0, 0.75834],
-    "39": [0, 0.69444, 0.07816, 0, 0.27778],
-    "40": [0.25, 0.75, 0.13164, 0, 0.38889],
-    "41": [0.25, 0.75, 0.02536, 0, 0.38889],
-    "42": [0, 0.75, 0.11775, 0, 0.5],
-    "43": [0.08333, 0.58333, 0.02536, 0, 0.77778],
-    "44": [0.125, 0.08333, 0, 0, 0.27778],
-    "45": [0, 0.44444, 0.01946, 0, 0.33333],
-    "46": [0, 0.08333, 0, 0, 0.27778],
-    "47": [0.25, 0.75, 0.13164, 0, 0.5],
-    "48": [0, 0.65556, 0.11156, 0, 0.5],
-    "49": [0, 0.65556, 0.11156, 0, 0.5],
-    "50": [0, 0.65556, 0.11156, 0, 0.5],
-    "51": [0, 0.65556, 0.11156, 0, 0.5],
-    "52": [0, 0.65556, 0.11156, 0, 0.5],
-    "53": [0, 0.65556, 0.11156, 0, 0.5],
-    "54": [0, 0.65556, 0.11156, 0, 0.5],
-    "55": [0, 0.65556, 0.11156, 0, 0.5],
-    "56": [0, 0.65556, 0.11156, 0, 0.5],
-    "57": [0, 0.65556, 0.11156, 0, 0.5],
-    "58": [0, 0.44444, 0.02502, 0, 0.27778],
-    "59": [0.125, 0.44444, 0.02502, 0, 0.27778],
-    "61": [-0.13, 0.37, 0.05087, 0, 0.77778],
-    "63": [0, 0.69444, 0.11809, 0, 0.47222],
-    "64": [0, 0.69444, 0.07555, 0, 0.66667],
-    "65": [0, 0.69444, 0, 0, 0.66667],
-    "66": [0, 0.69444, 0.08293, 0, 0.66667],
-    "67": [0, 0.69444, 0.11983, 0, 0.63889],
-    "68": [0, 0.69444, 0.07555, 0, 0.72223],
-    "69": [0, 0.69444, 0.11983, 0, 0.59722],
-    "70": [0, 0.69444, 0.13372, 0, 0.56945],
-    "71": [0, 0.69444, 0.11983, 0, 0.66667],
-    "72": [0, 0.69444, 0.08094, 0, 0.70834],
-    "73": [0, 0.69444, 0.13372, 0, 0.27778],
-    "74": [0, 0.69444, 0.08094, 0, 0.47222],
-    "75": [0, 0.69444, 0.11983, 0, 0.69445],
-    "76": [0, 0.69444, 0, 0, 0.54167],
-    "77": [0, 0.69444, 0.08094, 0, 0.875],
-    "78": [0, 0.69444, 0.08094, 0, 0.70834],
-    "79": [0, 0.69444, 0.07555, 0, 0.73611],
-    "80": [0, 0.69444, 0.08293, 0, 0.63889],
-    "81": [0.125, 0.69444, 0.07555, 0, 0.73611],
-    "82": [0, 0.69444, 0.08293, 0, 0.64584],
-    "83": [0, 0.69444, 0.09205, 0, 0.55556],
-    "84": [0, 0.69444, 0.13372, 0, 0.68056],
-    "85": [0, 0.69444, 0.08094, 0, 0.6875],
-    "86": [0, 0.69444, 0.1615, 0, 0.66667],
-    "87": [0, 0.69444, 0.1615, 0, 0.94445],
-    "88": [0, 0.69444, 0.13372, 0, 0.66667],
-    "89": [0, 0.69444, 0.17261, 0, 0.66667],
-    "90": [0, 0.69444, 0.11983, 0, 0.61111],
-    "91": [0.25, 0.75, 0.15942, 0, 0.28889],
-    "93": [0.25, 0.75, 0.08719, 0, 0.28889],
-    "94": [0, 0.69444, 0.0799, 0, 0.5],
-    "95": [0.35, 0.09444, 0.08616, 0, 0.5],
-    "97": [0, 0.44444, 0.00981, 0, 0.48056],
-    "98": [0, 0.69444, 0.03057, 0, 0.51667],
-    "99": [0, 0.44444, 0.08336, 0, 0.44445],
-    "100": [0, 0.69444, 0.09483, 0, 0.51667],
-    "101": [0, 0.44444, 0.06778, 0, 0.44445],
-    "102": [0, 0.69444, 0.21705, 0, 0.30556],
-    "103": [0.19444, 0.44444, 0.10836, 0, 0.5],
-    "104": [0, 0.69444, 0.01778, 0, 0.51667],
-    "105": [0, 0.67937, 0.09718, 0, 0.23889],
-    "106": [0.19444, 0.67937, 0.09162, 0, 0.26667],
-    "107": [0, 0.69444, 0.08336, 0, 0.48889],
-    "108": [0, 0.69444, 0.09483, 0, 0.23889],
-    "109": [0, 0.44444, 0.01778, 0, 0.79445],
-    "110": [0, 0.44444, 0.01778, 0, 0.51667],
-    "111": [0, 0.44444, 0.06613, 0, 0.5],
-    "112": [0.19444, 0.44444, 0.0389, 0, 0.51667],
-    "113": [0.19444, 0.44444, 0.04169, 0, 0.51667],
-    "114": [0, 0.44444, 0.10836, 0, 0.34167],
-    "115": [0, 0.44444, 0.0778, 0, 0.38333],
-    "116": [0, 0.57143, 0.07225, 0, 0.36111],
-    "117": [0, 0.44444, 0.04169, 0, 0.51667],
-    "118": [0, 0.44444, 0.10836, 0, 0.46111],
-    "119": [0, 0.44444, 0.10836, 0, 0.68334],
-    "120": [0, 0.44444, 0.09169, 0, 0.46111],
-    "121": [0.19444, 0.44444, 0.10836, 0, 0.46111],
-    "122": [0, 0.44444, 0.08752, 0, 0.43472],
-    "126": [0.35, 0.32659, 0.08826, 0, 0.5],
-    "168": [0, 0.67937, 0.06385, 0, 0.5],
-    "176": [0, 0.69444, 0, 0, 0.73752],
-    "184": [0.17014, 0, 0, 0, 0.44445],
-    "305": [0, 0.44444, 0.04169, 0, 0.23889],
-    "567": [0.19444, 0.44444, 0.04169, 0, 0.26667],
-    "710": [0, 0.69444, 0.0799, 0, 0.5],
-    "711": [0, 0.63194, 0.08432, 0, 0.5],
-    "713": [0, 0.60889, 0.08776, 0, 0.5],
-    "714": [0, 0.69444, 0.09205, 0, 0.5],
-    "715": [0, 0.69444, 0, 0, 0.5],
-    "728": [0, 0.69444, 0.09483, 0, 0.5],
-    "729": [0, 0.67937, 0.07774, 0, 0.27778],
-    "730": [0, 0.69444, 0, 0, 0.73752],
-    "732": [0, 0.67659, 0.08826, 0, 0.5],
-    "733": [0, 0.69444, 0.09205, 0, 0.5],
-    "915": [0, 0.69444, 0.13372, 0, 0.54167],
-    "916": [0, 0.69444, 0, 0, 0.83334],
-    "920": [0, 0.69444, 0.07555, 0, 0.77778],
-    "923": [0, 0.69444, 0, 0, 0.61111],
-    "926": [0, 0.69444, 0.12816, 0, 0.66667],
-    "928": [0, 0.69444, 0.08094, 0, 0.70834],
-    "931": [0, 0.69444, 0.11983, 0, 0.72222],
-    "933": [0, 0.69444, 0.09031, 0, 0.77778],
-    "934": [0, 0.69444, 0.04603, 0, 0.72222],
-    "936": [0, 0.69444, 0.09031, 0, 0.77778],
-    "937": [0, 0.69444, 0.08293, 0, 0.72222],
-    "8211": [0, 0.44444, 0.08616, 0, 0.5],
-    "8212": [0, 0.44444, 0.08616, 0, 1.0],
-    "8216": [0, 0.69444, 0.07816, 0, 0.27778],
-    "8217": [0, 0.69444, 0.07816, 0, 0.27778],
-    "8220": [0, 0.69444, 0.14205, 0, 0.5],
-    "8221": [0, 0.69444, 0.00316, 0, 0.5]
-  },
-  "SansSerif-Regular": {
-    "33": [0, 0.69444, 0, 0, 0.31945],
-    "34": [0, 0.69444, 0, 0, 0.5],
-    "35": [0.19444, 0.69444, 0, 0, 0.83334],
-    "36": [0.05556, 0.75, 0, 0, 0.5],
-    "37": [0.05556, 0.75, 0, 0, 0.83334],
-    "38": [0, 0.69444, 0, 0, 0.75834],
-    "39": [0, 0.69444, 0, 0, 0.27778],
-    "40": [0.25, 0.75, 0, 0, 0.38889],
-    "41": [0.25, 0.75, 0, 0, 0.38889],
-    "42": [0, 0.75, 0, 0, 0.5],
-    "43": [0.08333, 0.58333, 0, 0, 0.77778],
-    "44": [0.125, 0.08333, 0, 0, 0.27778],
-    "45": [0, 0.44444, 0, 0, 0.33333],
-    "46": [0, 0.08333, 0, 0, 0.27778],
-    "47": [0.25, 0.75, 0, 0, 0.5],
-    "48": [0, 0.65556, 0, 0, 0.5],
-    "49": [0, 0.65556, 0, 0, 0.5],
-    "50": [0, 0.65556, 0, 0, 0.5],
-    "51": [0, 0.65556, 0, 0, 0.5],
-    "52": [0, 0.65556, 0, 0, 0.5],
-    "53": [0, 0.65556, 0, 0, 0.5],
-    "54": [0, 0.65556, 0, 0, 0.5],
-    "55": [0, 0.65556, 0, 0, 0.5],
-    "56": [0, 0.65556, 0, 0, 0.5],
-    "57": [0, 0.65556, 0, 0, 0.5],
-    "58": [0, 0.44444, 0, 0, 0.27778],
-    "59": [0.125, 0.44444, 0, 0, 0.27778],
-    "61": [-0.13, 0.37, 0, 0, 0.77778],
-    "63": [0, 0.69444, 0, 0, 0.47222],
-    "64": [0, 0.69444, 0, 0, 0.66667],
-    "65": [0, 0.69444, 0, 0, 0.66667],
-    "66": [0, 0.69444, 0, 0, 0.66667],
-    "67": [0, 0.69444, 0, 0, 0.63889],
-    "68": [0, 0.69444, 0, 0, 0.72223],
-    "69": [0, 0.69444, 0, 0, 0.59722],
-    "70": [0, 0.69444, 0, 0, 0.56945],
-    "71": [0, 0.69444, 0, 0, 0.66667],
-    "72": [0, 0.69444, 0, 0, 0.70834],
-    "73": [0, 0.69444, 0, 0, 0.27778],
-    "74": [0, 0.69444, 0, 0, 0.47222],
-    "75": [0, 0.69444, 0, 0, 0.69445],
-    "76": [0, 0.69444, 0, 0, 0.54167],
-    "77": [0, 0.69444, 0, 0, 0.875],
-    "78": [0, 0.69444, 0, 0, 0.70834],
-    "79": [0, 0.69444, 0, 0, 0.73611],
-    "80": [0, 0.69444, 0, 0, 0.63889],
-    "81": [0.125, 0.69444, 0, 0, 0.73611],
-    "82": [0, 0.69444, 0, 0, 0.64584],
-    "83": [0, 0.69444, 0, 0, 0.55556],
-    "84": [0, 0.69444, 0, 0, 0.68056],
-    "85": [0, 0.69444, 0, 0, 0.6875],
-    "86": [0, 0.69444, 0.01389, 0, 0.66667],
-    "87": [0, 0.69444, 0.01389, 0, 0.94445],
-    "88": [0, 0.69444, 0, 0, 0.66667],
-    "89": [0, 0.69444, 0.025, 0, 0.66667],
-    "90": [0, 0.69444, 0, 0, 0.61111],
-    "91": [0.25, 0.75, 0, 0, 0.28889],
-    "93": [0.25, 0.75, 0, 0, 0.28889],
-    "94": [0, 0.69444, 0, 0, 0.5],
-    "95": [0.35, 0.09444, 0.02778, 0, 0.5],
-    "97": [0, 0.44444, 0, 0, 0.48056],
-    "98": [0, 0.69444, 0, 0, 0.51667],
-    "99": [0, 0.44444, 0, 0, 0.44445],
-    "100": [0, 0.69444, 0, 0, 0.51667],
-    "101": [0, 0.44444, 0, 0, 0.44445],
-    "102": [0, 0.69444, 0.06944, 0, 0.30556],
-    "103": [0.19444, 0.44444, 0.01389, 0, 0.5],
-    "104": [0, 0.69444, 0, 0, 0.51667],
-    "105": [0, 0.67937, 0, 0, 0.23889],
-    "106": [0.19444, 0.67937, 0, 0, 0.26667],
-    "107": [0, 0.69444, 0, 0, 0.48889],
-    "108": [0, 0.69444, 0, 0, 0.23889],
-    "109": [0, 0.44444, 0, 0, 0.79445],
-    "110": [0, 0.44444, 0, 0, 0.51667],
-    "111": [0, 0.44444, 0, 0, 0.5],
-    "112": [0.19444, 0.44444, 0, 0, 0.51667],
-    "113": [0.19444, 0.44444, 0, 0, 0.51667],
-    "114": [0, 0.44444, 0.01389, 0, 0.34167],
-    "115": [0, 0.44444, 0, 0, 0.38333],
-    "116": [0, 0.57143, 0, 0, 0.36111],
-    "117": [0, 0.44444, 0, 0, 0.51667],
-    "118": [0, 0.44444, 0.01389, 0, 0.46111],
-    "119": [0, 0.44444, 0.01389, 0, 0.68334],
-    "120": [0, 0.44444, 0, 0, 0.46111],
-    "121": [0.19444, 0.44444, 0.01389, 0, 0.46111],
-    "122": [0, 0.44444, 0, 0, 0.43472],
-    "126": [0.35, 0.32659, 0, 0, 0.5],
-    "168": [0, 0.67937, 0, 0, 0.5],
-    "176": [0, 0.69444, 0, 0, 0.66667],
-    "184": [0.17014, 0, 0, 0, 0.44445],
-    "305": [0, 0.44444, 0, 0, 0.23889],
-    "567": [0.19444, 0.44444, 0, 0, 0.26667],
-    "710": [0, 0.69444, 0, 0, 0.5],
-    "711": [0, 0.63194, 0, 0, 0.5],
-    "713": [0, 0.60889, 0, 0, 0.5],
-    "714": [0, 0.69444, 0, 0, 0.5],
-    "715": [0, 0.69444, 0, 0, 0.5],
-    "728": [0, 0.69444, 0, 0, 0.5],
-    "729": [0, 0.67937, 0, 0, 0.27778],
-    "730": [0, 0.69444, 0, 0, 0.66667],
-    "732": [0, 0.67659, 0, 0, 0.5],
-    "733": [0, 0.69444, 0, 0, 0.5],
-    "915": [0, 0.69444, 0, 0, 0.54167],
-    "916": [0, 0.69444, 0, 0, 0.83334],
-    "920": [0, 0.69444, 0, 0, 0.77778],
-    "923": [0, 0.69444, 0, 0, 0.61111],
-    "926": [0, 0.69444, 0, 0, 0.66667],
-    "928": [0, 0.69444, 0, 0, 0.70834],
-    "931": [0, 0.69444, 0, 0, 0.72222],
-    "933": [0, 0.69444, 0, 0, 0.77778],
-    "934": [0, 0.69444, 0, 0, 0.72222],
-    "936": [0, 0.69444, 0, 0, 0.77778],
-    "937": [0, 0.69444, 0, 0, 0.72222],
-    "8211": [0, 0.44444, 0.02778, 0, 0.5],
-    "8212": [0, 0.44444, 0.02778, 0, 1.0],
-    "8216": [0, 0.69444, 0, 0, 0.27778],
-    "8217": [0, 0.69444, 0, 0, 0.27778],
-    "8220": [0, 0.69444, 0, 0, 0.5],
-    "8221": [0, 0.69444, 0, 0, 0.5]
-  },
-  "Script-Regular": {
-    "65": [0, 0.7, 0.22925, 0, 0.80253],
-    "66": [0, 0.7, 0.04087, 0, 0.90757],
-    "67": [0, 0.7, 0.1689, 0, 0.66619],
-    "68": [0, 0.7, 0.09371, 0, 0.77443],
-    "69": [0, 0.7, 0.18583, 0, 0.56162],
-    "70": [0, 0.7, 0.13634, 0, 0.89544],
-    "71": [0, 0.7, 0.17322, 0, 0.60961],
-    "72": [0, 0.7, 0.29694, 0, 0.96919],
-    "73": [0, 0.7, 0.19189, 0, 0.80907],
-    "74": [0.27778, 0.7, 0.19189, 0, 1.05159],
-    "75": [0, 0.7, 0.31259, 0, 0.91364],
-    "76": [0, 0.7, 0.19189, 0, 0.87373],
-    "77": [0, 0.7, 0.15981, 0, 1.08031],
-    "78": [0, 0.7, 0.3525, 0, 0.9015],
-    "79": [0, 0.7, 0.08078, 0, 0.73787],
-    "80": [0, 0.7, 0.08078, 0, 1.01262],
-    "81": [0, 0.7, 0.03305, 0, 0.88282],
-    "82": [0, 0.7, 0.06259, 0, 0.85],
-    "83": [0, 0.7, 0.19189, 0, 0.86767],
-    "84": [0, 0.7, 0.29087, 0, 0.74697],
-    "85": [0, 0.7, 0.25815, 0, 0.79996],
-    "86": [0, 0.7, 0.27523, 0, 0.62204],
-    "87": [0, 0.7, 0.27523, 0, 0.80532],
-    "88": [0, 0.7, 0.26006, 0, 0.94445],
-    "89": [0, 0.7, 0.2939, 0, 0.70961],
-    "90": [0, 0.7, 0.24037, 0, 0.8212]
-  },
-  "Size1-Regular": {
-    "40": [0.35001, 0.85, 0, 0, 0.45834],
-    "41": [0.35001, 0.85, 0, 0, 0.45834],
-    "47": [0.35001, 0.85, 0, 0, 0.57778],
-    "91": [0.35001, 0.85, 0, 0, 0.41667],
-    "92": [0.35001, 0.85, 0, 0, 0.57778],
-    "93": [0.35001, 0.85, 0, 0, 0.41667],
-    "123": [0.35001, 0.85, 0, 0, 0.58334],
-    "125": [0.35001, 0.85, 0, 0, 0.58334],
-    "710": [0, 0.72222, 0, 0, 0.55556],
-    "732": [0, 0.72222, 0, 0, 0.55556],
-    "770": [0, 0.72222, 0, 0, 0.55556],
-    "771": [0, 0.72222, 0, 0, 0.55556],
-    "8214": [-0.00099, 0.601, 0, 0, 0.77778],
-    "8593": [1e-05, 0.6, 0, 0, 0.66667],
-    "8595": [1e-05, 0.6, 0, 0, 0.66667],
-    "8657": [1e-05, 0.6, 0, 0, 0.77778],
-    "8659": [1e-05, 0.6, 0, 0, 0.77778],
-    "8719": [0.25001, 0.75, 0, 0, 0.94445],
-    "8720": [0.25001, 0.75, 0, 0, 0.94445],
-    "8721": [0.25001, 0.75, 0, 0, 1.05556],
-    "8730": [0.35001, 0.85, 0, 0, 1.0],
-    "8739": [-0.00599, 0.606, 0, 0, 0.33333],
-    "8741": [-0.00599, 0.606, 0, 0, 0.55556],
-    "8747": [0.30612, 0.805, 0.19445, 0, 0.47222],
-    "8748": [0.306, 0.805, 0.19445, 0, 0.47222],
-    "8749": [0.306, 0.805, 0.19445, 0, 0.47222],
-    "8750": [0.30612, 0.805, 0.19445, 0, 0.47222],
-    "8896": [0.25001, 0.75, 0, 0, 0.83334],
-    "8897": [0.25001, 0.75, 0, 0, 0.83334],
-    "8898": [0.25001, 0.75, 0, 0, 0.83334],
-    "8899": [0.25001, 0.75, 0, 0, 0.83334],
-    "8968": [0.35001, 0.85, 0, 0, 0.47222],
-    "8969": [0.35001, 0.85, 0, 0, 0.47222],
-    "8970": [0.35001, 0.85, 0, 0, 0.47222],
-    "8971": [0.35001, 0.85, 0, 0, 0.47222],
-    "9168": [-0.00099, 0.601, 0, 0, 0.66667],
-    "10216": [0.35001, 0.85, 0, 0, 0.47222],
-    "10217": [0.35001, 0.85, 0, 0, 0.47222],
-    "10752": [0.25001, 0.75, 0, 0, 1.11111],
-    "10753": [0.25001, 0.75, 0, 0, 1.11111],
-    "10754": [0.25001, 0.75, 0, 0, 1.11111],
-    "10756": [0.25001, 0.75, 0, 0, 0.83334],
-    "10758": [0.25001, 0.75, 0, 0, 0.83334]
-  },
-  "Size2-Regular": {
-    "40": [0.65002, 1.15, 0, 0, 0.59722],
-    "41": [0.65002, 1.15, 0, 0, 0.59722],
-    "47": [0.65002, 1.15, 0, 0, 0.81111],
-    "91": [0.65002, 1.15, 0, 0, 0.47222],
-    "92": [0.65002, 1.15, 0, 0, 0.81111],
-    "93": [0.65002, 1.15, 0, 0, 0.47222],
-    "123": [0.65002, 1.15, 0, 0, 0.66667],
-    "125": [0.65002, 1.15, 0, 0, 0.66667],
-    "710": [0, 0.75, 0, 0, 1.0],
-    "732": [0, 0.75, 0, 0, 1.0],
-    "770": [0, 0.75, 0, 0, 1.0],
-    "771": [0, 0.75, 0, 0, 1.0],
-    "8719": [0.55001, 1.05, 0, 0, 1.27778],
-    "8720": [0.55001, 1.05, 0, 0, 1.27778],
-    "8721": [0.55001, 1.05, 0, 0, 1.44445],
-    "8730": [0.65002, 1.15, 0, 0, 1.0],
-    "8747": [0.86225, 1.36, 0.44445, 0, 0.55556],
-    "8748": [0.862, 1.36, 0.44445, 0, 0.55556],
-    "8749": [0.862, 1.36, 0.44445, 0, 0.55556],
-    "8750": [0.86225, 1.36, 0.44445, 0, 0.55556],
-    "8896": [0.55001, 1.05, 0, 0, 1.11111],
-    "8897": [0.55001, 1.05, 0, 0, 1.11111],
-    "8898": [0.55001, 1.05, 0, 0, 1.11111],
-    "8899": [0.55001, 1.05, 0, 0, 1.11111],
-    "8968": [0.65002, 1.15, 0, 0, 0.52778],
-    "8969": [0.65002, 1.15, 0, 0, 0.52778],
-    "8970": [0.65002, 1.15, 0, 0, 0.52778],
-    "8971": [0.65002, 1.15, 0, 0, 0.52778],
-    "10216": [0.65002, 1.15, 0, 0, 0.61111],
-    "10217": [0.65002, 1.15, 0, 0, 0.61111],
-    "10752": [0.55001, 1.05, 0, 0, 1.51112],
-    "10753": [0.55001, 1.05, 0, 0, 1.51112],
-    "10754": [0.55001, 1.05, 0, 0, 1.51112],
-    "10756": [0.55001, 1.05, 0, 0, 1.11111],
-    "10758": [0.55001, 1.05, 0, 0, 1.11111]
-  },
-  "Size3-Regular": {
-    "40": [0.95003, 1.45, 0, 0, 0.73611],
-    "41": [0.95003, 1.45, 0, 0, 0.73611],
-    "47": [0.95003, 1.45, 0, 0, 1.04445],
-    "91": [0.95003, 1.45, 0, 0, 0.52778],
-    "92": [0.95003, 1.45, 0, 0, 1.04445],
-    "93": [0.95003, 1.45, 0, 0, 0.52778],
-    "123": [0.95003, 1.45, 0, 0, 0.75],
-    "125": [0.95003, 1.45, 0, 0, 0.75],
-    "710": [0, 0.75, 0, 0, 1.44445],
-    "732": [0, 0.75, 0, 0, 1.44445],
-    "770": [0, 0.75, 0, 0, 1.44445],
-    "771": [0, 0.75, 0, 0, 1.44445],
-    "8730": [0.95003, 1.45, 0, 0, 1.0],
-    "8968": [0.95003, 1.45, 0, 0, 0.58334],
-    "8969": [0.95003, 1.45, 0, 0, 0.58334],
-    "8970": [0.95003, 1.45, 0, 0, 0.58334],
-    "8971": [0.95003, 1.45, 0, 0, 0.58334],
-    "10216": [0.95003, 1.45, 0, 0, 0.75],
-    "10217": [0.95003, 1.45, 0, 0, 0.75]
-  },
-  "Size4-Regular": {
-    "40": [1.25003, 1.75, 0, 0, 0.79167],
-    "41": [1.25003, 1.75, 0, 0, 0.79167],
-    "47": [1.25003, 1.75, 0, 0, 1.27778],
-    "91": [1.25003, 1.75, 0, 0, 0.58334],
-    "92": [1.25003, 1.75, 0, 0, 1.27778],
-    "93": [1.25003, 1.75, 0, 0, 0.58334],
-    "123": [1.25003, 1.75, 0, 0, 0.80556],
-    "125": [1.25003, 1.75, 0, 0, 0.80556],
-    "710": [0, 0.825, 0, 0, 1.8889],
-    "732": [0, 0.825, 0, 0, 1.8889],
-    "770": [0, 0.825, 0, 0, 1.8889],
-    "771": [0, 0.825, 0, 0, 1.8889],
-    "8730": [1.25003, 1.75, 0, 0, 1.0],
-    "8968": [1.25003, 1.75, 0, 0, 0.63889],
-    "8969": [1.25003, 1.75, 0, 0, 0.63889],
-    "8970": [1.25003, 1.75, 0, 0, 0.63889],
-    "8971": [1.25003, 1.75, 0, 0, 0.63889],
-    "9115": [0.64502, 1.155, 0, 0, 0.875],
-    "9116": [1e-05, 0.6, 0, 0, 0.875],
-    "9117": [0.64502, 1.155, 0, 0, 0.875],
-    "9118": [0.64502, 1.155, 0, 0, 0.875],
-    "9119": [1e-05, 0.6, 0, 0, 0.875],
-    "9120": [0.64502, 1.155, 0, 0, 0.875],
-    "9121": [0.64502, 1.155, 0, 0, 0.66667],
-    "9122": [-0.00099, 0.601, 0, 0, 0.66667],
-    "9123": [0.64502, 1.155, 0, 0, 0.66667],
-    "9124": [0.64502, 1.155, 0, 0, 0.66667],
-    "9125": [-0.00099, 0.601, 0, 0, 0.66667],
-    "9126": [0.64502, 1.155, 0, 0, 0.66667],
-    "9127": [1e-05, 0.9, 0, 0, 0.88889],
-    "9128": [0.65002, 1.15, 0, 0, 0.88889],
-    "9129": [0.90001, 0, 0, 0, 0.88889],
-    "9130": [0, 0.3, 0, 0, 0.88889],
-    "9131": [1e-05, 0.9, 0, 0, 0.88889],
-    "9132": [0.65002, 1.15, 0, 0, 0.88889],
-    "9133": [0.90001, 0, 0, 0, 0.88889],
-    "9143": [0.88502, 0.915, 0, 0, 1.05556],
-    "10216": [1.25003, 1.75, 0, 0, 0.80556],
-    "10217": [1.25003, 1.75, 0, 0, 0.80556],
-    "57344": [-0.00499, 0.605, 0, 0, 1.05556],
-    "57345": [-0.00499, 0.605, 0, 0, 1.05556],
-    "57680": [0, 0.12, 0, 0, 0.45],
-    "57681": [0, 0.12, 0, 0, 0.45],
-    "57682": [0, 0.12, 0, 0, 0.45],
-    "57683": [0, 0.12, 0, 0, 0.45]
-  },
-  "Typewriter-Regular": {
-    "32": [0, 0, 0, 0, 0.525],
-    "33": [0, 0.61111, 0, 0, 0.525],
-    "34": [0, 0.61111, 0, 0, 0.525],
-    "35": [0, 0.61111, 0, 0, 0.525],
-    "36": [0.08333, 0.69444, 0, 0, 0.525],
-    "37": [0.08333, 0.69444, 0, 0, 0.525],
-    "38": [0, 0.61111, 0, 0, 0.525],
-    "39": [0, 0.61111, 0, 0, 0.525],
-    "40": [0.08333, 0.69444, 0, 0, 0.525],
-    "41": [0.08333, 0.69444, 0, 0, 0.525],
-    "42": [0, 0.52083, 0, 0, 0.525],
-    "43": [-0.08056, 0.53055, 0, 0, 0.525],
-    "44": [0.13889, 0.125, 0, 0, 0.525],
-    "45": [-0.08056, 0.53055, 0, 0, 0.525],
-    "46": [0, 0.125, 0, 0, 0.525],
-    "47": [0.08333, 0.69444, 0, 0, 0.525],
-    "48": [0, 0.61111, 0, 0, 0.525],
-    "49": [0, 0.61111, 0, 0, 0.525],
-    "50": [0, 0.61111, 0, 0, 0.525],
-    "51": [0, 0.61111, 0, 0, 0.525],
-    "52": [0, 0.61111, 0, 0, 0.525],
-    "53": [0, 0.61111, 0, 0, 0.525],
-    "54": [0, 0.61111, 0, 0, 0.525],
-    "55": [0, 0.61111, 0, 0, 0.525],
-    "56": [0, 0.61111, 0, 0, 0.525],
-    "57": [0, 0.61111, 0, 0, 0.525],
-    "58": [0, 0.43056, 0, 0, 0.525],
-    "59": [0.13889, 0.43056, 0, 0, 0.525],
-    "60": [-0.05556, 0.55556, 0, 0, 0.525],
-    "61": [-0.19549, 0.41562, 0, 0, 0.525],
-    "62": [-0.05556, 0.55556, 0, 0, 0.525],
-    "63": [0, 0.61111, 0, 0, 0.525],
-    "64": [0, 0.61111, 0, 0, 0.525],
-    "65": [0, 0.61111, 0, 0, 0.525],
-    "66": [0, 0.61111, 0, 0, 0.525],
-    "67": [0, 0.61111, 0, 0, 0.525],
-    "68": [0, 0.61111, 0, 0, 0.525],
-    "69": [0, 0.61111, 0, 0, 0.525],
-    "70": [0, 0.61111, 0, 0, 0.525],
-    "71": [0, 0.61111, 0, 0, 0.525],
-    "72": [0, 0.61111, 0, 0, 0.525],
-    "73": [0, 0.61111, 0, 0, 0.525],
-    "74": [0, 0.61111, 0, 0, 0.525],
-    "75": [0, 0.61111, 0, 0, 0.525],
-    "76": [0, 0.61111, 0, 0, 0.525],
-    "77": [0, 0.61111, 0, 0, 0.525],
-    "78": [0, 0.61111, 0, 0, 0.525],
-    "79": [0, 0.61111, 0, 0, 0.525],
-    "80": [0, 0.61111, 0, 0, 0.525],
-    "81": [0.13889, 0.61111, 0, 0, 0.525],
-    "82": [0, 0.61111, 0, 0, 0.525],
-    "83": [0, 0.61111, 0, 0, 0.525],
-    "84": [0, 0.61111, 0, 0, 0.525],
-    "85": [0, 0.61111, 0, 0, 0.525],
-    "86": [0, 0.61111, 0, 0, 0.525],
-    "87": [0, 0.61111, 0, 0, 0.525],
-    "88": [0, 0.61111, 0, 0, 0.525],
-    "89": [0, 0.61111, 0, 0, 0.525],
-    "90": [0, 0.61111, 0, 0, 0.525],
-    "91": [0.08333, 0.69444, 0, 0, 0.525],
-    "92": [0.08333, 0.69444, 0, 0, 0.525],
-    "93": [0.08333, 0.69444, 0, 0, 0.525],
-    "94": [0, 0.61111, 0, 0, 0.525],
-    "95": [0.09514, 0, 0, 0, 0.525],
-    "96": [0, 0.61111, 0, 0, 0.525],
-    "97": [0, 0.43056, 0, 0, 0.525],
-    "98": [0, 0.61111, 0, 0, 0.525],
-    "99": [0, 0.43056, 0, 0, 0.525],
-    "100": [0, 0.61111, 0, 0, 0.525],
-    "101": [0, 0.43056, 0, 0, 0.525],
-    "102": [0, 0.61111, 0, 0, 0.525],
-    "103": [0.22222, 0.43056, 0, 0, 0.525],
-    "104": [0, 0.61111, 0, 0, 0.525],
-    "105": [0, 0.61111, 0, 0, 0.525],
-    "106": [0.22222, 0.61111, 0, 0, 0.525],
-    "107": [0, 0.61111, 0, 0, 0.525],
-    "108": [0, 0.61111, 0, 0, 0.525],
-    "109": [0, 0.43056, 0, 0, 0.525],
-    "110": [0, 0.43056, 0, 0, 0.525],
-    "111": [0, 0.43056, 0, 0, 0.525],
-    "112": [0.22222, 0.43056, 0, 0, 0.525],
-    "113": [0.22222, 0.43056, 0, 0, 0.525],
-    "114": [0, 0.43056, 0, 0, 0.525],
-    "115": [0, 0.43056, 0, 0, 0.525],
-    "116": [0, 0.55358, 0, 0, 0.525],
-    "117": [0, 0.43056, 0, 0, 0.525],
-    "118": [0, 0.43056, 0, 0, 0.525],
-    "119": [0, 0.43056, 0, 0, 0.525],
-    "120": [0, 0.43056, 0, 0, 0.525],
-    "121": [0.22222, 0.43056, 0, 0, 0.525],
-    "122": [0, 0.43056, 0, 0, 0.525],
-    "123": [0.08333, 0.69444, 0, 0, 0.525],
-    "124": [0.08333, 0.69444, 0, 0, 0.525],
-    "125": [0.08333, 0.69444, 0, 0, 0.525],
-    "126": [0, 0.61111, 0, 0, 0.525],
-    "127": [0, 0.61111, 0, 0, 0.525],
-    "160": [0, 0, 0, 0, 0.525],
-    "176": [0, 0.61111, 0, 0, 0.525],
-    "184": [0.19445, 0, 0, 0, 0.525],
-    "305": [0, 0.43056, 0, 0, 0.525],
-    "567": [0.22222, 0.43056, 0, 0, 0.525],
-    "711": [0, 0.56597, 0, 0, 0.525],
-    "713": [0, 0.56555, 0, 0, 0.525],
-    "714": [0, 0.61111, 0, 0, 0.525],
-    "715": [0, 0.61111, 0, 0, 0.525],
-    "728": [0, 0.61111, 0, 0, 0.525],
-    "730": [0, 0.61111, 0, 0, 0.525],
-    "770": [0, 0.61111, 0, 0, 0.525],
-    "771": [0, 0.61111, 0, 0, 0.525],
-    "776": [0, 0.61111, 0, 0, 0.525],
-    "915": [0, 0.61111, 0, 0, 0.525],
-    "916": [0, 0.61111, 0, 0, 0.525],
-    "920": [0, 0.61111, 0, 0, 0.525],
-    "923": [0, 0.61111, 0, 0, 0.525],
-    "926": [0, 0.61111, 0, 0, 0.525],
-    "928": [0, 0.61111, 0, 0, 0.525],
-    "931": [0, 0.61111, 0, 0, 0.525],
-    "933": [0, 0.61111, 0, 0, 0.525],
-    "934": [0, 0.61111, 0, 0, 0.525],
-    "936": [0, 0.61111, 0, 0, 0.525],
-    "937": [0, 0.61111, 0, 0, 0.525],
-    "8216": [0, 0.61111, 0, 0, 0.525],
-    "8217": [0, 0.61111, 0, 0, 0.525],
-    "8242": [0, 0.61111, 0, 0, 0.525],
-    "9251": [0.11111, 0.21944, 0, 0, 0.525]
-  }
-});
-// CONCATENATED MODULE: ./src/fontMetrics.js
-
-
-/**
- * This file contains metrics regarding fonts and individual symbols. The sigma
- * and xi variables, as well as the metricMap map contain data extracted from
- * TeX, TeX font metrics, and the TTF files. These data are then exposed via the
- * `metrics` variable and the getCharacterMetrics function.
- */
-// In TeX, there are actually three sets of dimensions, one for each of
-// textstyle (size index 5 and higher: >=9pt), scriptstyle (size index 3 and 4:
-// 7-8pt), and scriptscriptstyle (size index 1 and 2: 5-6pt).  These are
-// provided in the the arrays below, in that order.
-//
-// The font metrics are stored in fonts cmsy10, cmsy7, and cmsy5 respsectively.
-// This was determined by running the following script:
-//
-//     latex -interaction=nonstopmode \
-//     '\documentclass{article}\usepackage{amsmath}\begin{document}' \
-//     '$a$ \expandafter\show\the\textfont2' \
-//     '\expandafter\show\the\scriptfont2' \
-//     '\expandafter\show\the\scriptscriptfont2' \
-//     '\stop'
-//
-// The metrics themselves were retreived using the following commands:
-//
-//     tftopl cmsy10
-//     tftopl cmsy7
-//     tftopl cmsy5
-//
-// The output of each of these commands is quite lengthy.  The only part we
-// care about is the FONTDIMEN section. Each value is measured in EMs.
-var sigmasAndXis = {
-  slant: [0.250, 0.250, 0.250],
-  // sigma1
-  space: [0.000, 0.000, 0.000],
-  // sigma2
-  stretch: [0.000, 0.000, 0.000],
-  // sigma3
-  shrink: [0.000, 0.000, 0.000],
-  // sigma4
-  xHeight: [0.431, 0.431, 0.431],
-  // sigma5
-  quad: [1.000, 1.171, 1.472],
-  // sigma6
-  extraSpace: [0.000, 0.000, 0.000],
-  // sigma7
-  num1: [0.677, 0.732, 0.925],
-  // sigma8
-  num2: [0.394, 0.384, 0.387],
-  // sigma9
-  num3: [0.444, 0.471, 0.504],
-  // sigma10
-  denom1: [0.686, 0.752, 1.025],
-  // sigma11
-  denom2: [0.345, 0.344, 0.532],
-  // sigma12
-  sup1: [0.413, 0.503, 0.504],
-  // sigma13
-  sup2: [0.363, 0.431, 0.404],
-  // sigma14
-  sup3: [0.289, 0.286, 0.294],
-  // sigma15
-  sub1: [0.150, 0.143, 0.200],
-  // sigma16
-  sub2: [0.247, 0.286, 0.400],
-  // sigma17
-  supDrop: [0.386, 0.353, 0.494],
-  // sigma18
-  subDrop: [0.050, 0.071, 0.100],
-  // sigma19
-  delim1: [2.390, 1.700, 1.980],
-  // sigma20
-  delim2: [1.010, 1.157, 1.420],
-  // sigma21
-  axisHeight: [0.250, 0.250, 0.250],
-  // sigma22
-  // These font metrics are extracted from TeX by using tftopl on cmex10.tfm;
-  // they correspond to the font parameters of the extension fonts (family 3).
-  // See the TeXbook, page 441. In AMSTeX, the extension fonts scale; to
-  // match cmex7, we'd use cmex7.tfm values for script and scriptscript
-  // values.
-  defaultRuleThickness: [0.04, 0.049, 0.049],
-  // xi8; cmex7: 0.049
-  bigOpSpacing1: [0.111, 0.111, 0.111],
-  // xi9
-  bigOpSpacing2: [0.166, 0.166, 0.166],
-  // xi10
-  bigOpSpacing3: [0.2, 0.2, 0.2],
-  // xi11
-  bigOpSpacing4: [0.6, 0.611, 0.611],
-  // xi12; cmex7: 0.611
-  bigOpSpacing5: [0.1, 0.143, 0.143],
-  // xi13; cmex7: 0.143
-  // The \sqrt rule width is taken from the height of the surd character.
-  // Since we use the same font at all sizes, this thickness doesn't scale.
-  sqrtRuleThickness: [0.04, 0.04, 0.04],
-  // This value determines how large a pt is, for metrics which are defined
-  // in terms of pts.
-  // This value is also used in katex.less; if you change it make sure the
-  // values match.
-  ptPerEm: [10.0, 10.0, 10.0],
-  // The space between adjacent `|` columns in an array definition. From
-  // `\showthe\doublerulesep` in LaTeX. Equals 2.0 / ptPerEm.
-  doubleRuleSep: [0.2, 0.2, 0.2],
-  // The width of separator lines in {array} environments. From
-  // `\showthe\arrayrulewidth` in LaTeX. Equals 0.4 / ptPerEm.
-  arrayRuleWidth: [0.04, 0.04, 0.04],
-  // Two values from LaTeX source2e:
-  fboxsep: [0.3, 0.3, 0.3],
-  //        3 pt / ptPerEm
-  fboxrule: [0.04, 0.04, 0.04] // 0.4 pt / ptPerEm
-
-}; // This map contains a mapping from font name and character code to character
-// metrics, including height, depth, italic correction, and skew (kern from the
-// character to the corresponding \skewchar)
-// This map is generated via `make metrics`. It should not be changed manually.
-
- // These are very rough approximations.  We default to Times New Roman which
-// should have Latin-1 and Cyrillic characters, but may not depending on the
-// operating system.  The metrics do not account for extra height from the
-// accents.  In the case of Cyrillic characters which have both ascenders and
-// descenders we prefer approximations with ascenders, primarily to prevent
-// the fraction bar or root line from intersecting the glyph.
-// TODO(kevinb) allow union of multiple glyph metrics for better accuracy.
-
-var extraCharacterMap = {
-  // Latin-1
-  'Å': 'A',
-  'Ç': 'C',
-  'Ð': 'D',
-  'Þ': 'o',
-  'å': 'a',
-  'ç': 'c',
-  'ð': 'd',
-  'þ': 'o',
-  // Cyrillic
-  'А': 'A',
-  'Б': 'B',
-  'В': 'B',
-  'Г': 'F',
-  'Д': 'A',
-  'Е': 'E',
-  'Ж': 'K',
-  'З': '3',
-  'И': 'N',
-  'Й': 'N',
-  'К': 'K',
-  'Л': 'N',
-  'М': 'M',
-  'Н': 'H',
-  'О': 'O',
-  'П': 'N',
-  'Р': 'P',
-  'С': 'C',
-  'Т': 'T',
-  'У': 'y',
-  'Ф': 'O',
-  'Х': 'X',
-  'Ц': 'U',
-  'Ч': 'h',
-  'Ш': 'W',
-  'Щ': 'W',
-  'Ъ': 'B',
-  'Ы': 'X',
-  'Ь': 'B',
-  'Э': '3',
-  'Ю': 'X',
-  'Я': 'R',
-  'а': 'a',
-  'б': 'b',
-  'в': 'a',
-  'г': 'r',
-  'д': 'y',
-  'е': 'e',
-  'ж': 'm',
-  'з': 'e',
-  'и': 'n',
-  'й': 'n',
-  'к': 'n',
-  'л': 'n',
-  'м': 'm',
-  'н': 'n',
-  'о': 'o',
-  'п': 'n',
-  'р': 'p',
-  'с': 'c',
-  'т': 'o',
-  'у': 'y',
-  'ф': 'b',
-  'х': 'x',
-  'ц': 'n',
-  'ч': 'n',
-  'ш': 'w',
-  'щ': 'w',
-  'ъ': 'a',
-  'ы': 'm',
-  'ь': 'a',
-  'э': 'e',
-  'ю': 'm',
-  'я': 'r'
-};
-
-/**
- * This function adds new font metrics to default metricMap
- * It can also override existing metrics
- */
-function setFontMetrics(fontName, metrics) {
-  fontMetricsData[fontName] = metrics;
-}
-/**
- * This function is a convenience function for looking up information in the
- * metricMap table. It takes a character as a string, and a font.
- *
- * Note: the `width` property may be undefined if fontMetricsData.js wasn't
- * built using `Make extended_metrics`.
- */
-
-function getCharacterMetrics(character, font, mode) {
-  if (!fontMetricsData[font]) {
-    throw new Error("Font metrics not found for font: " + font + ".");
-  }
-
-  var ch = character.charCodeAt(0);
-  var metrics = fontMetricsData[font][ch];
-
-  if (!metrics && character[0] in extraCharacterMap) {
-    ch = extraCharacterMap[character[0]].charCodeAt(0);
-    metrics = fontMetricsData[font][ch];
-  }
-
-  if (!metrics && mode === 'text') {
-    // We don't typically have font metrics for Asian scripts.
-    // But since we support them in text mode, we need to return
-    // some sort of metrics.
-    // So if the character is in a script we support but we
-    // don't have metrics for it, just use the metrics for
-    // the Latin capital letter M. This is close enough because
-    // we (currently) only care about the height of the glpyh
-    // not its width.
-    if (supportedCodepoint(ch)) {
-      metrics = fontMetricsData[font][77]; // 77 is the charcode for 'M'
-    }
-  }
-
-  if (metrics) {
-    return {
-      depth: metrics[0],
-      height: metrics[1],
-      italic: metrics[2],
-      skew: metrics[3],
-      width: metrics[4]
-    };
-  }
-}
-var fontMetricsBySizeIndex = {};
-/**
- * Get the font metrics for a given size.
- */
-
-function getGlobalMetrics(size) {
-  var sizeIndex;
-
-  if (size >= 5) {
-    sizeIndex = 0;
-  } else if (size >= 3) {
-    sizeIndex = 1;
-  } else {
-    sizeIndex = 2;
-  }
-
-  if (!fontMetricsBySizeIndex[sizeIndex]) {
-    var metrics = fontMetricsBySizeIndex[sizeIndex] = {
-      cssEmPerMu: sigmasAndXis.quad[sizeIndex] / 18
-    };
-
-    for (var key in sigmasAndXis) {
-      if (sigmasAndXis.hasOwnProperty(key)) {
-        metrics[key] = sigmasAndXis[key][sizeIndex];
-      }
-    }
-  }
-
-  return fontMetricsBySizeIndex[sizeIndex];
-}
-// CONCATENATED MODULE: ./src/symbols.js
-/**
- * This file holds a list of all no-argument functions and single-character
- * symbols (like 'a' or ';').
- *
- * For each of the symbols, there are three properties they can have:
- * - font (required): the font to be used for this symbol. Either "main" (the
-     normal font), or "ams" (the ams fonts).
- * - group (required): the ParseNode group type the symbol should have (i.e.
-     "textord", "mathord", etc).
-     See https://github.com/KaTeX/KaTeX/wiki/Examining-TeX#group-types
- * - replace: the character that this symbol or function should be
- *   replaced with (i.e. "\phi" has a replace value of "\u03d5", the phi
- *   character in the main font).
- *
- * The outermost map in the table indicates what mode the symbols should be
- * accepted in (e.g. "math" or "text").
- */
-// Some of these have a "-token" suffix since these are also used as `ParseNode`
-// types for raw text tokens, and we want to avoid conflicts with higher-level
-// `ParseNode` types. These `ParseNode`s are constructed within `Parser` by
-// looking up the `symbols` map.
-var ATOMS = {
-  "bin": 1,
-  "close": 1,
-  "inner": 1,
-  "open": 1,
-  "punct": 1,
-  "rel": 1
-};
-var NON_ATOMS = {
-  "accent-token": 1,
-  "mathord": 1,
-  "op-token": 1,
-  "spacing": 1,
-  "textord": 1
-};
-var symbols = {
-  "math": {},
-  "text": {}
-};
-/* harmony default export */ var src_symbols = (symbols);
-/** `acceptUnicodeChar = true` is only applicable if `replace` is set. */
-
-function defineSymbol(mode, font, group, replace, name, acceptUnicodeChar) {
-  symbols[mode][name] = {
-    font: font,
-    group: group,
-    replace: replace
-  };
-
-  if (acceptUnicodeChar && replace) {
-    symbols[mode][replace] = symbols[mode][name];
-  }
-} // Some abbreviations for commonly used strings.
-// This helps minify the code, and also spotting typos using jshint.
-// modes:
-
-var symbols_math = "math";
-var symbols_text = "text"; // fonts:
-
-var main = "main";
-var ams = "ams"; // groups:
-
-var symbols_accent = "accent-token";
-var bin = "bin";
-var symbols_close = "close";
-var symbols_inner = "inner";
-var mathord = "mathord";
-var op = "op-token";
-var symbols_open = "open";
-var punct = "punct";
-var rel = "rel";
-var symbols_spacing = "spacing";
-var symbols_textord = "textord"; // Now comes the symbol table
-// Relation Symbols
-
-defineSymbol(symbols_math, main, rel, "\u2261", "\\equiv", true);
-defineSymbol(symbols_math, main, rel, "\u227A", "\\prec", true);
-defineSymbol(symbols_math, main, rel, "\u227B", "\\succ", true);
-defineSymbol(symbols_math, main, rel, "\u223C", "\\sim", true);
-defineSymbol(symbols_math, main, rel, "\u22A5", "\\perp");
-defineSymbol(symbols_math, main, rel, "\u2AAF", "\\preceq", true);
-defineSymbol(symbols_math, main, rel, "\u2AB0", "\\succeq", true);
-defineSymbol(symbols_math, main, rel, "\u2243", "\\simeq", true);
-defineSymbol(symbols_math, main, rel, "\u2223", "\\mid", true);
-defineSymbol(symbols_math, main, rel, "\u226A", "\\ll", true);
-defineSymbol(symbols_math, main, rel, "\u226B", "\\gg", true);
-defineSymbol(symbols_math, main, rel, "\u224D", "\\asymp", true);
-defineSymbol(symbols_math, main, rel, "\u2225", "\\parallel");
-defineSymbol(symbols_math, main, rel, "\u22C8", "\\bowtie", true);
-defineSymbol(symbols_math, main, rel, "\u2323", "\\smile", true);
-defineSymbol(symbols_math, main, rel, "\u2291", "\\sqsubseteq", true);
-defineSymbol(symbols_math, main, rel, "\u2292", "\\sqsupseteq", true);
-defineSymbol(symbols_math, main, rel, "\u2250", "\\doteq", true);
-defineSymbol(symbols_math, main, rel, "\u2322", "\\frown", true);
-defineSymbol(symbols_math, main, rel, "\u220B", "\\ni", true);
-defineSymbol(symbols_math, main, rel, "\u221D", "\\propto", true);
-defineSymbol(symbols_math, main, rel, "\u22A2", "\\vdash", true);
-defineSymbol(symbols_math, main, rel, "\u22A3", "\\dashv", true);
-defineSymbol(symbols_math, main, rel, "\u220B", "\\owns"); // Punctuation
-
-defineSymbol(symbols_math, main, punct, ".", "\\ldotp");
-defineSymbol(symbols_math, main, punct, "\u22C5", "\\cdotp"); // Misc Symbols
-
-defineSymbol(symbols_math, main, symbols_textord, "#", "\\#");
-defineSymbol(symbols_text, main, symbols_textord, "#", "\\#");
-defineSymbol(symbols_math, main, symbols_textord, "&", "\\&");
-defineSymbol(symbols_text, main, symbols_textord, "&", "\\&");
-defineSymbol(symbols_math, main, symbols_textord, "\u2135", "\\aleph", true);
-defineSymbol(symbols_math, main, symbols_textord, "\u2200", "\\forall", true);
-defineSymbol(symbols_math, main, symbols_textord, "\u210F", "\\hbar", true);
-defineSymbol(symbols_math, main, symbols_textord, "\u2203", "\\exists", true);
-defineSymbol(symbols_math, main, symbols_textord, "\u2207", "\\nabla", true);
-defineSymbol(symbols_math, main, symbols_textord, "\u266D", "\\flat", true);
-defineSymbol(symbols_math, main, symbols_textord, "\u2113", "\\ell", true);
-defineSymbol(symbols_math, main, symbols_textord, "\u266E", "\\natural", true);
-defineSymbol(symbols_math, main, symbols_textord, "\u2663", "\\clubsuit", true);
-defineSymbol(symbols_math, main, symbols_textord, "\u2118", "\\wp", true);
-defineSymbol(symbols_math, main, symbols_textord, "\u266F", "\\sharp", true);
-defineSymbol(symbols_math, main, symbols_textord, "\u2662", "\\diamondsuit", true);
-defineSymbol(symbols_math, main, symbols_textord, "\u211C", "\\Re", true);
-defineSymbol(symbols_math, main, symbols_textord, "\u2661", "\\heartsuit", true);
-defineSymbol(symbols_math, main, symbols_textord, "\u2111", "\\Im", true);
-defineSymbol(symbols_math, main, symbols_textord, "\u2660", "\\spadesuit", true);
-defineSymbol(symbols_text, main, symbols_textord, "\xA7", "\\S", true);
-defineSymbol(symbols_text, main, symbols_textord, "\xB6", "\\P", true); // Math and Text
-
-defineSymbol(symbols_math, main, symbols_textord, "\u2020", "\\dag");
-defineSymbol(symbols_text, main, symbols_textord, "\u2020", "\\dag");
-defineSymbol(symbols_text, main, symbols_textord, "\u2020", "\\textdagger");
-defineSymbol(symbols_math, main, symbols_textord, "\u2021", "\\ddag");
-defineSymbol(symbols_text, main, symbols_textord, "\u2021", "\\ddag");
-defineSymbol(symbols_text, main, symbols_textord, "\u2021", "\\textdaggerdbl"); // Large Delimiters
-
-defineSymbol(symbols_math, main, symbols_close, "\u23B1", "\\rmoustache", true);
-defineSymbol(symbols_math, main, symbols_open, "\u23B0", "\\lmoustache", true);
-defineSymbol(symbols_math, main, symbols_close, "\u27EF", "\\rgroup", true);
-defineSymbol(symbols_math, main, symbols_open, "\u27EE", "\\lgroup", true); // Binary Operators
-
-defineSymbol(symbols_math, main, bin, "\u2213", "\\mp", true);
-defineSymbol(symbols_math, main, bin, "\u2296", "\\ominus", true);
-defineSymbol(symbols_math, main, bin, "\u228E", "\\uplus", true);
-defineSymbol(symbols_math, main, bin, "\u2293", "\\sqcap", true);
-defineSymbol(symbols_math, main, bin, "\u2217", "\\ast");
-defineSymbol(symbols_math, main, bin, "\u2294", "\\sqcup", true);
-defineSymbol(symbols_math, main, bin, "\u25EF", "\\bigcirc");
-defineSymbol(symbols_math, main, bin, "\u2219", "\\bullet");
-defineSymbol(symbols_math, main, bin, "\u2021", "\\ddagger");
-defineSymbol(symbols_math, main, bin, "\u2240", "\\wr", true);
-defineSymbol(symbols_math, main, bin, "\u2A3F", "\\amalg");
-defineSymbol(symbols_math, main, bin, "&", "\\And"); // from amsmath
-// Arrow Symbols
-
-defineSymbol(symbols_math, main, rel, "\u27F5", "\\longleftarrow", true);
-defineSymbol(symbols_math, main, rel, "\u21D0", "\\Leftarrow", true);
-defineSymbol(symbols_math, main, rel, "\u27F8", "\\Longleftarrow", true);
-defineSymbol(symbols_math, main, rel, "\u27F6", "\\longrightarrow", true);
-defineSymbol(symbols_math, main, rel, "\u21D2", "\\Rightarrow", true);
-defineSymbol(symbols_math, main, rel, "\u27F9", "\\Longrightarrow", true);
-defineSymbol(symbols_math, main, rel, "\u2194", "\\leftrightarrow", true);
-defineSymbol(symbols_math, main, rel, "\u27F7", "\\longleftrightarrow", true);
-defineSymbol(symbols_math, main, rel, "\u21D4", "\\Leftrightarrow", true);
-defineSymbol(symbols_math, main, rel, "\u27FA", "\\Longleftrightarrow", true);
-defineSymbol(symbols_math, main, rel, "\u21A6", "\\mapsto", true);
-defineSymbol(symbols_math, main, rel, "\u27FC", "\\longmapsto", true);
-defineSymbol(symbols_math, main, rel, "\u2197", "\\nearrow", true);
-defineSymbol(symbols_math, main, rel, "\u21A9", "\\hookleftarrow", true);
-defineSymbol(symbols_math, main, rel, "\u21AA", "\\hookrightarrow", true);
-defineSymbol(symbols_math, main, rel, "\u2198", "\\searrow", true);
-defineSymbol(symbols_math, main, rel, "\u21BC", "\\leftharpoonup", true);
-defineSymbol(symbols_math, main, rel, "\u21C0", "\\rightharpoonup", true);
-defineSymbol(symbols_math, main, rel, "\u2199", "\\swarrow", true);
-defineSymbol(symbols_math, main, rel, "\u21BD", "\\leftharpoondown", true);
-defineSymbol(symbols_math, main, rel, "\u21C1", "\\rightharpoondown", true);
-defineSymbol(symbols_math, main, rel, "\u2196", "\\nwarrow", true);
-defineSymbol(symbols_math, main, rel, "\u21CC", "\\rightleftharpoons", true); // AMS Negated Binary Relations
-
-defineSymbol(symbols_math, ams, rel, "\u226E", "\\nless", true); // Symbol names preceeded by "@" each have a corresponding macro.
-
-defineSymbol(symbols_math, ams, rel, "\uE010", "\\@nleqslant");
-defineSymbol(symbols_math, ams, rel, "\uE011", "\\@nleqq");
-defineSymbol(symbols_math, ams, rel, "\u2A87", "\\lneq", true);
-defineSymbol(symbols_math, ams, rel, "\u2268", "\\lneqq", true);
-defineSymbol(symbols_math, ams, rel, "\uE00C", "\\@lvertneqq");
-defineSymbol(symbols_math, ams, rel, "\u22E6", "\\lnsim", true);
-defineSymbol(symbols_math, ams, rel, "\u2A89", "\\lnapprox", true);
-defineSymbol(symbols_math, ams, rel, "\u2280", "\\nprec", true); // unicode-math maps \u22e0 to \npreccurlyeq. We'll use the AMS synonym.
-
-defineSymbol(symbols_math, ams, rel, "\u22E0", "\\npreceq", true);
-defineSymbol(symbols_math, ams, rel, "\u22E8", "\\precnsim", true);
-defineSymbol(symbols_math, ams, rel, "\u2AB9", "\\precnapprox", true);
-defineSymbol(symbols_math, ams, rel, "\u2241", "\\nsim", true);
-defineSymbol(symbols_math, ams, rel, "\uE006", "\\@nshortmid");
-defineSymbol(symbols_math, ams, rel, "\u2224", "\\nmid", true);
-defineSymbol(symbols_math, ams, rel, "\u22AC", "\\nvdash", true);
-defineSymbol(symbols_math, ams, rel, "\u22AD", "\\nvDash", true);
-defineSymbol(symbols_math, ams, rel, "\u22EA", "\\ntriangleleft");
-defineSymbol(symbols_math, ams, rel, "\u22EC", "\\ntrianglelefteq", true);
-defineSymbol(symbols_math, ams, rel, "\u228A", "\\subsetneq", true);
-defineSymbol(symbols_math, ams, rel, "\uE01A", "\\@varsubsetneq");
-defineSymbol(symbols_math, ams, rel, "\u2ACB", "\\subsetneqq", true);
-defineSymbol(symbols_math, ams, rel, "\uE017", "\\@varsubsetneqq");
-defineSymbol(symbols_math, ams, rel, "\u226F", "\\ngtr", true);
-defineSymbol(symbols_math, ams, rel, "\uE00F", "\\@ngeqslant");
-defineSymbol(symbols_math, ams, rel, "\uE00E", "\\@ngeqq");
-defineSymbol(symbols_math, ams, rel, "\u2A88", "\\gneq", true);
-defineSymbol(symbols_math, ams, rel, "\u2269", "\\gneqq", true);
-defineSymbol(symbols_math, ams, rel, "\uE00D", "\\@gvertneqq");
-defineSymbol(symbols_math, ams, rel, "\u22E7", "\\gnsim", true);
-defineSymbol(symbols_math, ams, rel, "\u2A8A", "\\gnapprox", true);
-defineSymbol(symbols_math, ams, rel, "\u2281", "\\nsucc", true); // unicode-math maps \u22e1 to \nsucccurlyeq. We'll use the AMS synonym.
-
-defineSymbol(symbols_math, ams, rel, "\u22E1", "\\nsucceq", true);
-defineSymbol(symbols_math, ams, rel, "\u22E9", "\\succnsim", true);
-defineSymbol(symbols_math, ams, rel, "\u2ABA", "\\succnapprox", true); // unicode-math maps \u2246 to \simneqq. We'll use the AMS synonym.
-
-defineSymbol(symbols_math, ams, rel, "\u2246", "\\ncong", true);
-defineSymbol(symbols_math, ams, rel, "\uE007", "\\@nshortparallel");
-defineSymbol(symbols_math, ams, rel, "\u2226", "\\nparallel", true);
-defineSymbol(symbols_math, ams, rel, "\u22AF", "\\nVDash", true);
-defineSymbol(symbols_math, ams, rel, "\u22EB", "\\ntriangleright");
-defineSymbol(symbols_math, ams, rel, "\u22ED", "\\ntrianglerighteq", true);
-defineSymbol(symbols_math, ams, rel, "\uE018", "\\@nsupseteqq");
-defineSymbol(symbols_math, ams, rel, "\u228B", "\\supsetneq", true);
-defineSymbol(symbols_math, ams, rel, "\uE01B", "\\@varsupsetneq");
-defineSymbol(symbols_math, ams, rel, "\u2ACC", "\\supsetneqq", true);
-defineSymbol(symbols_math, ams, rel, "\uE019", "\\@varsupsetneqq");
-defineSymbol(symbols_math, ams, rel, "\u22AE", "\\nVdash", true);
-defineSymbol(symbols_math, ams, rel, "\u2AB5", "\\precneqq", true);
-defineSymbol(symbols_math, ams, rel, "\u2AB6", "\\succneqq", true);
-defineSymbol(symbols_math, ams, rel, "\uE016", "\\@nsubseteqq");
-defineSymbol(symbols_math, ams, bin, "\u22B4", "\\unlhd");
-defineSymbol(symbols_math, ams, bin, "\u22B5", "\\unrhd"); // AMS Negated Arrows
-
-defineSymbol(symbols_math, ams, rel, "\u219A", "\\nleftarrow", true);
-defineSymbol(symbols_math, ams, rel, "\u219B", "\\nrightarrow", true);
-defineSymbol(symbols_math, ams, rel, "\u21CD", "\\nLeftarrow", true);
-defineSymbol(symbols_math, ams, rel, "\u21CF", "\\nRightarrow", true);
-defineSymbol(symbols_math, ams, rel, "\u21AE", "\\nleftrightarrow", true);
-defineSymbol(symbols_math, ams, rel, "\u21CE", "\\nLeftrightarrow", true); // AMS Misc
-
-defineSymbol(symbols_math, ams, rel, "\u25B3", "\\vartriangle");
-defineSymbol(symbols_math, ams, symbols_textord, "\u210F", "\\hslash");
-defineSymbol(symbols_math, ams, symbols_textord, "\u25BD", "\\triangledown");
-defineSymbol(symbols_math, ams, symbols_textord, "\u25CA", "\\lozenge");
-defineSymbol(symbols_math, ams, symbols_textord, "\u24C8", "\\circledS");
-defineSymbol(symbols_math, ams, symbols_textord, "\xAE", "\\circledR");
-defineSymbol(symbols_text, ams, symbols_textord, "\xAE", "\\circledR");
-defineSymbol(symbols_math, ams, symbols_textord, "\u2221", "\\measuredangle", true);
-defineSymbol(symbols_math, ams, symbols_textord, "\u2204", "\\nexists");
-defineSymbol(symbols_math, ams, symbols_textord, "\u2127", "\\mho");
-defineSymbol(symbols_math, ams, symbols_textord, "\u2132", "\\Finv", true);
-defineSymbol(symbols_math, ams, symbols_textord, "\u2141", "\\Game", true);
-defineSymbol(symbols_math, ams, symbols_textord, "\u2035", "\\backprime");
-defineSymbol(symbols_math, ams, symbols_textord, "\u25B2", "\\blacktriangle");
-defineSymbol(symbols_math, ams, symbols_textord, "\u25BC", "\\blacktriangledown");
-defineSymbol(symbols_math, ams, symbols_textord, "\u25A0", "\\blacksquare");
-defineSymbol(symbols_math, ams, symbols_textord, "\u29EB", "\\blacklozenge");
-defineSymbol(symbols_math, ams, symbols_textord, "\u2605", "\\bigstar");
-defineSymbol(symbols_math, ams, symbols_textord, "\u2222", "\\sphericalangle", true);
-defineSymbol(symbols_math, ams, symbols_textord, "\u2201", "\\complement", true); // unicode-math maps U+F0 (ð) to \matheth. We map to AMS function \eth
-
-defineSymbol(symbols_math, ams, symbols_textord, "\xF0", "\\eth", true);
-defineSymbol(symbols_math, ams, symbols_textord, "\u2571", "\\diagup");
-defineSymbol(symbols_math, ams, symbols_textord, "\u2572", "\\diagdown");
-defineSymbol(symbols_math, ams, symbols_textord, "\u25A1", "\\square");
-defineSymbol(symbols_math, ams, symbols_textord, "\u25A1", "\\Box");
-defineSymbol(symbols_math, ams, symbols_textord, "\u25CA", "\\Diamond"); // unicode-math maps U+A5 to \mathyen. We map to AMS function \yen
-
-defineSymbol(symbols_math, ams, symbols_textord, "\xA5", "\\yen", true);
-defineSymbol(symbols_text, ams, symbols_textord, "\xA5", "\\yen", true);
-defineSymbol(symbols_math, ams, symbols_textord, "\u2713", "\\checkmark", true);
-defineSymbol(symbols_text, ams, symbols_textord, "\u2713", "\\checkmark"); // AMS Hebrew
-
-defineSymbol(symbols_math, ams, symbols_textord, "\u2136", "\\beth", true);
-defineSymbol(symbols_math, ams, symbols_textord, "\u2138", "\\daleth", true);
-defineSymbol(symbols_math, ams, symbols_textord, "\u2137", "\\gimel", true); // AMS Greek
-
-defineSymbol(symbols_math, ams, symbols_textord, "\u03DD", "\\digamma", true);
-defineSymbol(symbols_math, ams, symbols_textord, "\u03F0", "\\varkappa"); // AMS Delimiters
-
-defineSymbol(symbols_math, ams, symbols_open, "\u250C", "\\ulcorner", true);
-defineSymbol(symbols_math, ams, symbols_close, "\u2510", "\\urcorner", true);
-defineSymbol(symbols_math, ams, symbols_open, "\u2514", "\\llcorner", true);
-defineSymbol(symbols_math, ams, symbols_close, "\u2518", "\\lrcorner", true); // AMS Binary Relations
-
-defineSymbol(symbols_math, ams, rel, "\u2266", "\\leqq", true);
-defineSymbol(symbols_math, ams, rel, "\u2A7D", "\\leqslant", true);
-defineSymbol(symbols_math, ams, rel, "\u2A95", "\\eqslantless", true);
-defineSymbol(symbols_math, ams, rel, "\u2272", "\\lesssim", true);
-defineSymbol(symbols_math, ams, rel, "\u2A85", "\\lessapprox", true);
-defineSymbol(symbols_math, ams, rel, "\u224A", "\\approxeq", true);
-defineSymbol(symbols_math, ams, bin, "\u22D6", "\\lessdot");
-defineSymbol(symbols_math, ams, rel, "\u22D8", "\\lll", true);
-defineSymbol(symbols_math, ams, rel, "\u2276", "\\lessgtr", true);
-defineSymbol(symbols_math, ams, rel, "\u22DA", "\\lesseqgtr", true);
-defineSymbol(symbols_math, ams, rel, "\u2A8B", "\\lesseqqgtr", true);
-defineSymbol(symbols_math, ams, rel, "\u2251", "\\doteqdot");
-defineSymbol(symbols_math, ams, rel, "\u2253", "\\risingdotseq", true);
-defineSymbol(symbols_math, ams, rel, "\u2252", "\\fallingdotseq", true);
-defineSymbol(symbols_math, ams, rel, "\u223D", "\\backsim", true);
-defineSymbol(symbols_math, ams, rel, "\u22CD", "\\backsimeq", true);
-defineSymbol(symbols_math, ams, rel, "\u2AC5", "\\subseteqq", true);
-defineSymbol(symbols_math, ams, rel, "\u22D0", "\\Subset", true);
-defineSymbol(symbols_math, ams, rel, "\u228F", "\\sqsubset", true);
-defineSymbol(symbols_math, ams, rel, "\u227C", "\\preccurlyeq", true);
-defineSymbol(symbols_math, ams, rel, "\u22DE", "\\curlyeqprec", true);
-defineSymbol(symbols_math, ams, rel, "\u227E", "\\precsim", true);
-defineSymbol(symbols_math, ams, rel, "\u2AB7", "\\precapprox", true);
-defineSymbol(symbols_math, ams, rel, "\u22B2", "\\vartriangleleft");
-defineSymbol(symbols_math, ams, rel, "\u22B4", "\\trianglelefteq");
-defineSymbol(symbols_math, ams, rel, "\u22A8", "\\vDash", true);
-defineSymbol(symbols_math, ams, rel, "\u22AA", "\\Vvdash", true);
-defineSymbol(symbols_math, ams, rel, "\u2323", "\\smallsmile");
-defineSymbol(symbols_math, ams, rel, "\u2322", "\\smallfrown");
-defineSymbol(symbols_math, ams, rel, "\u224F", "\\bumpeq", true);
-defineSymbol(symbols_math, ams, rel, "\u224E", "\\Bumpeq", true);
-defineSymbol(symbols_math, ams, rel, "\u2267", "\\geqq", true);
-defineSymbol(symbols_math, ams, rel, "\u2A7E", "\\geqslant", true);
-defineSymbol(symbols_math, ams, rel, "\u2A96", "\\eqslantgtr", true);
-defineSymbol(symbols_math, ams, rel, "\u2273", "\\gtrsim", true);
-defineSymbol(symbols_math, ams, rel, "\u2A86", "\\gtrapprox", true);
-defineSymbol(symbols_math, ams, bin, "\u22D7", "\\gtrdot");
-defineSymbol(symbols_math, ams, rel, "\u22D9", "\\ggg", true);
-defineSymbol(symbols_math, ams, rel, "\u2277", "\\gtrless", true);
-defineSymbol(symbols_math, ams, rel, "\u22DB", "\\gtreqless", true);
-defineSymbol(symbols_math, ams, rel, "\u2A8C", "\\gtreqqless", true);
-defineSymbol(symbols_math, ams, rel, "\u2256", "\\eqcirc", true);
-defineSymbol(symbols_math, ams, rel, "\u2257", "\\circeq", true);
-defineSymbol(symbols_math, ams, rel, "\u225C", "\\triangleq", true);
-defineSymbol(symbols_math, ams, rel, "\u223C", "\\thicksim");
-defineSymbol(symbols_math, ams, rel, "\u2248", "\\thickapprox");
-defineSymbol(symbols_math, ams, rel, "\u2AC6", "\\supseteqq", true);
-defineSymbol(symbols_math, ams, rel, "\u22D1", "\\Supset", true);
-defineSymbol(symbols_math, ams, rel, "\u2290", "\\sqsupset", true);
-defineSymbol(symbols_math, ams, rel, "\u227D", "\\succcurlyeq", true);
-defineSymbol(symbols_math, ams, rel, "\u22DF", "\\curlyeqsucc", true);
-defineSymbol(symbols_math, ams, rel, "\u227F", "\\succsim", true);
-defineSymbol(symbols_math, ams, rel, "\u2AB8", "\\succapprox", true);
-defineSymbol(symbols_math, ams, rel, "\u22B3", "\\vartriangleright");
-defineSymbol(symbols_math, ams, rel, "\u22B5", "\\trianglerighteq");
-defineSymbol(symbols_math, ams, rel, "\u22A9", "\\Vdash", true);
-defineSymbol(symbols_math, ams, rel, "\u2223", "\\shortmid");
-defineSymbol(symbols_math, ams, rel, "\u2225", "\\shortparallel");
-defineSymbol(symbols_math, ams, rel, "\u226C", "\\between", true);
-defineSymbol(symbols_math, ams, rel, "\u22D4", "\\pitchfork", true);
-defineSymbol(symbols_math, ams, rel, "\u221D", "\\varpropto");
-defineSymbol(symbols_math, ams, rel, "\u25C0", "\\blacktriangleleft"); // unicode-math says that \therefore is a mathord atom.
-// We kept the amssymb atom type, which is rel.
-
-defineSymbol(symbols_math, ams, rel, "\u2234", "\\therefore", true);
-defineSymbol(symbols_math, ams, rel, "\u220D", "\\backepsilon");
-defineSymbol(symbols_math, ams, rel, "\u25B6", "\\blacktriangleright"); // unicode-math says that \because is a mathord atom.
-// We kept the amssymb atom type, which is rel.
-
-defineSymbol(symbols_math, ams, rel, "\u2235", "\\because", true);
-defineSymbol(symbols_math, ams, rel, "\u22D8", "\\llless");
-defineSymbol(symbols_math, ams, rel, "\u22D9", "\\gggtr");
-defineSymbol(symbols_math, ams, bin, "\u22B2", "\\lhd");
-defineSymbol(symbols_math, ams, bin, "\u22B3", "\\rhd");
-defineSymbol(symbols_math, ams, rel, "\u2242", "\\eqsim", true);
-defineSymbol(symbols_math, main, rel, "\u22C8", "\\Join");
-defineSymbol(symbols_math, ams, rel, "\u2251", "\\Doteq", true); // AMS Binary Operators
-
-defineSymbol(symbols_math, ams, bin, "\u2214", "\\dotplus", true);
-defineSymbol(symbols_math, ams, bin, "\u2216", "\\smallsetminus");
-defineSymbol(symbols_math, ams, bin, "\u22D2", "\\Cap", true);
-defineSymbol(symbols_math, ams, bin, "\u22D3", "\\Cup", true);
-defineSymbol(symbols_math, ams, bin, "\u2A5E", "\\doublebarwedge", true);
-defineSymbol(symbols_math, ams, bin, "\u229F", "\\boxminus", true);
-defineSymbol(symbols_math, ams, bin, "\u229E", "\\boxplus", true);
-defineSymbol(symbols_math, ams, bin, "\u22C7", "\\divideontimes", true);
-defineSymbol(symbols_math, ams, bin, "\u22C9", "\\ltimes", true);
-defineSymbol(symbols_math, ams, bin, "\u22CA", "\\rtimes", true);
-defineSymbol(symbols_math, ams, bin, "\u22CB", "\\leftthreetimes", true);
-defineSymbol(symbols_math, ams, bin, "\u22CC", "\\rightthreetimes", true);
-defineSymbol(symbols_math, ams, bin, "\u22CF", "\\curlywedge", true);
-defineSymbol(symbols_math, ams, bin, "\u22CE", "\\curlyvee", true);
-defineSymbol(symbols_math, ams, bin, "\u229D", "\\circleddash", true);
-defineSymbol(symbols_math, ams, bin, "\u229B", "\\circledast", true);
-defineSymbol(symbols_math, ams, bin, "\u22C5", "\\centerdot");
-defineSymbol(symbols_math, ams, bin, "\u22BA", "\\intercal", true);
-defineSymbol(symbols_math, ams, bin, "\u22D2", "\\doublecap");
-defineSymbol(symbols_math, ams, bin, "\u22D3", "\\doublecup");
-defineSymbol(symbols_math, ams, bin, "\u22A0", "\\boxtimes", true); // AMS Arrows
-// Note: unicode-math maps \u21e2 to their own function \rightdasharrow.
-// We'll map it to AMS function \dashrightarrow. It produces the same atom.
-
-defineSymbol(symbols_math, ams, rel, "\u21E2", "\\dashrightarrow", true); // unicode-math maps \u21e0 to \leftdasharrow. We'll use the AMS synonym.
-
-defineSymbol(symbols_math, ams, rel, "\u21E0", "\\dashleftarrow", true);
-defineSymbol(symbols_math, ams, rel, "\u21C7", "\\leftleftarrows", true);
-defineSymbol(symbols_math, ams, rel, "\u21C6", "\\leftrightarrows", true);
-defineSymbol(symbols_math, ams, rel, "\u21DA", "\\Lleftarrow", true);
-defineSymbol(symbols_math, ams, rel, "\u219E", "\\twoheadleftarrow", true);
-defineSymbol(symbols_math, ams, rel, "\u21A2", "\\leftarrowtail", true);
-defineSymbol(symbols_math, ams, rel, "\u21AB", "\\looparrowleft", true);
-defineSymbol(symbols_math, ams, rel, "\u21CB", "\\leftrightharpoons", true);
-defineSymbol(symbols_math, ams, rel, "\u21B6", "\\curvearrowleft", true); // unicode-math maps \u21ba to \acwopencirclearrow. We'll use the AMS synonym.
-
-defineSymbol(symbols_math, ams, rel, "\u21BA", "\\circlearrowleft", true);
-defineSymbol(symbols_math, ams, rel, "\u21B0", "\\Lsh", true);
-defineSymbol(symbols_math, ams, rel, "\u21C8", "\\upuparrows", true);
-defineSymbol(symbols_math, ams, rel, "\u21BF", "\\upharpoonleft", true);
-defineSymbol(symbols_math, ams, rel, "\u21C3", "\\downharpoonleft", true);
-defineSymbol(symbols_math, ams, rel, "\u22B8", "\\multimap", true);
-defineSymbol(symbols_math, ams, rel, "\u21AD", "\\leftrightsquigarrow", true);
-defineSymbol(symbols_math, ams, rel, "\u21C9", "\\rightrightarrows", true);
-defineSymbol(symbols_math, ams, rel, "\u21C4", "\\rightleftarrows", true);
-defineSymbol(symbols_math, ams, rel, "\u21A0", "\\twoheadrightarrow", true);
-defineSymbol(symbols_math, ams, rel, "\u21A3", "\\rightarrowtail", true);
-defineSymbol(symbols_math, ams, rel, "\u21AC", "\\looparrowright", true);
-defineSymbol(symbols_math, ams, rel, "\u21B7", "\\curvearrowright", true); // unicode-math maps \u21bb to \cwopencirclearrow. We'll use the AMS synonym.
-
-defineSymbol(symbols_math, ams, rel, "\u21BB", "\\circlearrowright", true);
-defineSymbol(symbols_math, ams, rel, "\u21B1", "\\Rsh", true);
-defineSymbol(symbols_math, ams, rel, "\u21CA", "\\downdownarrows", true);
-defineSymbol(symbols_math, ams, rel, "\u21BE", "\\upharpoonright", true);
-defineSymbol(symbols_math, ams, rel, "\u21C2", "\\downharpoonright", true);
-defineSymbol(symbols_math, ams, rel, "\u21DD", "\\rightsquigarrow", true);
-defineSymbol(symbols_math, ams, rel, "\u21DD", "\\leadsto");
-defineSymbol(symbols_math, ams, rel, "\u21DB", "\\Rrightarrow", true);
-defineSymbol(symbols_math, ams, rel, "\u21BE", "\\restriction");
-defineSymbol(symbols_math, main, symbols_textord, "\u2018", "`");
-defineSymbol(symbols_math, main, symbols_textord, "$", "\\$");
-defineSymbol(symbols_text, main, symbols_textord, "$", "\\$");
-defineSymbol(symbols_text, main, symbols_textord, "$", "\\textdollar");
-defineSymbol(symbols_math, main, symbols_textord, "%", "\\%");
-defineSymbol(symbols_text, main, symbols_textord, "%", "\\%");
-defineSymbol(symbols_math, main, symbols_textord, "_", "\\_");
-defineSymbol(symbols_text, main, symbols_textord, "_", "\\_");
-defineSymbol(symbols_text, main, symbols_textord, "_", "\\textunderscore");
-defineSymbol(symbols_math, main, symbols_textord, "\u2220", "\\angle", true);
-defineSymbol(symbols_math, main, symbols_textord, "\u221E", "\\infty", true);
-defineSymbol(symbols_math, main, symbols_textord, "\u2032", "\\prime");
-defineSymbol(symbols_math, main, symbols_textord, "\u25B3", "\\triangle");
-defineSymbol(symbols_math, main, symbols_textord, "\u0393", "\\Gamma", true);
-defineSymbol(symbols_math, main, symbols_textord, "\u0394", "\\Delta", true);
-defineSymbol(symbols_math, main, symbols_textord, "\u0398", "\\Theta", true);
-defineSymbol(symbols_math, main, symbols_textord, "\u039B", "\\Lambda", true);
-defineSymbol(symbols_math, main, symbols_textord, "\u039E", "\\Xi", true);
-defineSymbol(symbols_math, main, symbols_textord, "\u03A0", "\\Pi", true);
-defineSymbol(symbols_math, main, symbols_textord, "\u03A3", "\\Sigma", true);
-defineSymbol(symbols_math, main, symbols_textord, "\u03A5", "\\Upsilon", true);
-defineSymbol(symbols_math, main, symbols_textord, "\u03A6", "\\Phi", true);
-defineSymbol(symbols_math, main, symbols_textord, "\u03A8", "\\Psi", true);
-defineSymbol(symbols_math, main, symbols_textord, "\u03A9", "\\Omega", true);
-defineSymbol(symbols_math, main, symbols_textord, "A", "\u0391");
-defineSymbol(symbols_math, main, symbols_textord, "B", "\u0392");
-defineSymbol(symbols_math, main, symbols_textord, "E", "\u0395");
-defineSymbol(symbols_math, main, symbols_textord, "Z", "\u0396");
-defineSymbol(symbols_math, main, symbols_textord, "H", "\u0397");
-defineSymbol(symbols_math, main, symbols_textord, "I", "\u0399");
-defineSymbol(symbols_math, main, symbols_textord, "K", "\u039A");
-defineSymbol(symbols_math, main, symbols_textord, "M", "\u039C");
-defineSymbol(symbols_math, main, symbols_textord, "N", "\u039D");
-defineSymbol(symbols_math, main, symbols_textord, "O", "\u039F");
-defineSymbol(symbols_math, main, symbols_textord, "P", "\u03A1");
-defineSymbol(symbols_math, main, symbols_textord, "T", "\u03A4");
-defineSymbol(symbols_math, main, symbols_textord, "X", "\u03A7");
-defineSymbol(symbols_math, main, symbols_textord, "\xAC", "\\neg", true);
-defineSymbol(symbols_math, main, symbols_textord, "\xAC", "\\lnot");
-defineSymbol(symbols_math, main, symbols_textord, "\u22A4", "\\top");
-defineSymbol(symbols_math, main, symbols_textord, "\u22A5", "\\bot");
-defineSymbol(symbols_math, main, symbols_textord, "\u2205", "\\emptyset");
-defineSymbol(symbols_math, ams, symbols_textord, "\u2205", "\\varnothing");
-defineSymbol(symbols_math, main, mathord, "\u03B1", "\\alpha", true);
-defineSymbol(symbols_math, main, mathord, "\u03B2", "\\beta", true);
-defineSymbol(symbols_math, main, mathord, "\u03B3", "\\gamma", true);
-defineSymbol(symbols_math, main, mathord, "\u03B4", "\\delta", true);
-defineSymbol(symbols_math, main, mathord, "\u03F5", "\\epsilon", true);
-defineSymbol(symbols_math, main, mathord, "\u03B6", "\\zeta", true);
-defineSymbol(symbols_math, main, mathord, "\u03B7", "\\eta", true);
-defineSymbol(symbols_math, main, mathord, "\u03B8", "\\theta", true);
-defineSymbol(symbols_math, main, mathord, "\u03B9", "\\iota", true);
-defineSymbol(symbols_math, main, mathord, "\u03BA", "\\kappa", true);
-defineSymbol(symbols_math, main, mathord, "\u03BB", "\\lambda", true);
-defineSymbol(symbols_math, main, mathord, "\u03BC", "\\mu", true);
-defineSymbol(symbols_math, main, mathord, "\u03BD", "\\nu", true);
-defineSymbol(symbols_math, main, mathord, "\u03BE", "\\xi", true);
-defineSymbol(symbols_math, main, mathord, "\u03BF", "\\omicron", true);
-defineSymbol(symbols_math, main, mathord, "\u03C0", "\\pi", true);
-defineSymbol(symbols_math, main, mathord, "\u03C1", "\\rho", true);
-defineSymbol(symbols_math, main, mathord, "\u03C3", "\\sigma", true);
-defineSymbol(symbols_math, main, mathord, "\u03C4", "\\tau", true);
-defineSymbol(symbols_math, main, mathord, "\u03C5", "\\upsilon", true);
-defineSymbol(symbols_math, main, mathord, "\u03D5", "\\phi", true);
-defineSymbol(symbols_math, main, mathord, "\u03C7", "\\chi", true);
-defineSymbol(symbols_math, main, mathord, "\u03C8", "\\psi", true);
-defineSymbol(symbols_math, main, mathord, "\u03C9", "\\omega", true);
-defineSymbol(symbols_math, main, mathord, "\u03B5", "\\varepsilon", true);
-defineSymbol(symbols_math, main, mathord, "\u03D1", "\\vartheta", true);
-defineSymbol(symbols_math, main, mathord, "\u03D6", "\\varpi", true);
-defineSymbol(symbols_math, main, mathord, "\u03F1", "\\varrho", true);
-defineSymbol(symbols_math, main, mathord, "\u03C2", "\\varsigma", true);
-defineSymbol(symbols_math, main, mathord, "\u03C6", "\\varphi", true);
-defineSymbol(symbols_math, main, bin, "\u2217", "*");
-defineSymbol(symbols_math, main, bin, "+", "+");
-defineSymbol(symbols_math, main, bin, "\u2212", "-");
-defineSymbol(symbols_math, main, bin, "\u22C5", "\\cdot", true);
-defineSymbol(symbols_math, main, bin, "\u2218", "\\circ");
-defineSymbol(symbols_math, main, bin, "\xF7", "\\div", true);
-defineSymbol(symbols_math, main, bin, "\xB1", "\\pm", true);
-defineSymbol(symbols_math, main, bin, "\xD7", "\\times", true);
-defineSymbol(symbols_math, main, bin, "\u2229", "\\cap", true);
-defineSymbol(symbols_math, main, bin, "\u222A", "\\cup", true);
-defineSymbol(symbols_math, main, bin, "\u2216", "\\setminus");
-defineSymbol(symbols_math, main, bin, "\u2227", "\\land");
-defineSymbol(symbols_math, main, bin, "\u2228", "\\lor");
-defineSymbol(symbols_math, main, bin, "\u2227", "\\wedge", true);
-defineSymbol(symbols_math, main, bin, "\u2228", "\\vee", true);
-defineSymbol(symbols_math, main, symbols_textord, "\u221A", "\\surd");
-defineSymbol(symbols_math, main, symbols_open, "(", "(");
-defineSymbol(symbols_math, main, symbols_open, "[", "[");
-defineSymbol(symbols_math, main, symbols_open, "\u27E8", "\\langle", true);
-defineSymbol(symbols_math, main, symbols_open, "\u2223", "\\lvert");
-defineSymbol(symbols_math, main, symbols_open, "\u2225", "\\lVert");
-defineSymbol(symbols_math, main, symbols_close, ")", ")");
-defineSymbol(symbols_math, main, symbols_close, "]", "]");
-defineSymbol(symbols_math, main, symbols_close, "?", "?");
-defineSymbol(symbols_math, main, symbols_close, "!", "!");
-defineSymbol(symbols_math, main, symbols_close, "\u27E9", "\\rangle", true);
-defineSymbol(symbols_math, main, symbols_close, "\u2223", "\\rvert");
-defineSymbol(symbols_math, main, symbols_close, "\u2225", "\\rVert");
-defineSymbol(symbols_math, main, rel, "=", "=");
-defineSymbol(symbols_math, main, rel, "<", "<");
-defineSymbol(symbols_math, main, rel, ">", ">");
-defineSymbol(symbols_math, main, rel, ":", ":");
-defineSymbol(symbols_math, main, rel, "\u2248", "\\approx", true);
-defineSymbol(symbols_math, main, rel, "\u2245", "\\cong", true);
-defineSymbol(symbols_math, main, rel, "\u2265", "\\ge");
-defineSymbol(symbols_math, main, rel, "\u2265", "\\geq", true);
-defineSymbol(symbols_math, main, rel, "\u2190", "\\gets");
-defineSymbol(symbols_math, main, rel, ">", "\\gt");
-defineSymbol(symbols_math, main, rel, "\u2208", "\\in", true);
-defineSymbol(symbols_math, main, rel, "\uE020", "\\@not");
-defineSymbol(symbols_math, main, rel, "\u2282", "\\subset", true);
-defineSymbol(symbols_math, main, rel, "\u2283", "\\supset", true);
-defineSymbol(symbols_math, main, rel, "\u2286", "\\subseteq", true);
-defineSymbol(symbols_math, main, rel, "\u2287", "\\supseteq", true);
-defineSymbol(symbols_math, ams, rel, "\u2288", "\\nsubseteq", true);
-defineSymbol(symbols_math, ams, rel, "\u2289", "\\nsupseteq", true);
-defineSymbol(symbols_math, main, rel, "\u22A8", "\\models");
-defineSymbol(symbols_math, main, rel, "\u2190", "\\leftarrow", true);
-defineSymbol(symbols_math, main, rel, "\u2264", "\\le");
-defineSymbol(symbols_math, main, rel, "\u2264", "\\leq", true);
-defineSymbol(symbols_math, main, rel, "<", "\\lt");
-defineSymbol(symbols_math, main, rel, "\u2192", "\\rightarrow", true);
-defineSymbol(symbols_math, main, rel, "\u2192", "\\to");
-defineSymbol(symbols_math, ams, rel, "\u2271", "\\ngeq", true);
-defineSymbol(symbols_math, ams, rel, "\u2270", "\\nleq", true);
-defineSymbol(symbols_math, main, symbols_spacing, "\xA0", "\\ ");
-defineSymbol(symbols_math, main, symbols_spacing, "\xA0", "~");
-defineSymbol(symbols_math, main, symbols_spacing, "\xA0", "\\space"); // Ref: LaTeX Source 2e: \DeclareRobustCommand{\nobreakspace}{%
-
-defineSymbol(symbols_math, main, symbols_spacing, "\xA0", "\\nobreakspace");
-defineSymbol(symbols_text, main, symbols_spacing, "\xA0", "\\ ");
-defineSymbol(symbols_text, main, symbols_spacing, "\xA0", "~");
-defineSymbol(symbols_text, main, symbols_spacing, "\xA0", "\\space");
-defineSymbol(symbols_text, main, symbols_spacing, "\xA0", "\\nobreakspace");
-defineSymbol(symbols_math, main, symbols_spacing, null, "\\nobreak");
-defineSymbol(symbols_math, main, symbols_spacing, null, "\\allowbreak");
-defineSymbol(symbols_math, main, punct, ",", ",");
-defineSymbol(symbols_math, main, punct, ";", ";");
-defineSymbol(symbols_math, ams, bin, "\u22BC", "\\barwedge", true);
-defineSymbol(symbols_math, ams, bin, "\u22BB", "\\veebar", true);
-defineSymbol(symbols_math, main, bin, "\u2299", "\\odot", true);
-defineSymbol(symbols_math, main, bin, "\u2295", "\\oplus", true);
-defineSymbol(symbols_math, main, bin, "\u2297", "\\otimes", true);
-defineSymbol(symbols_math, main, symbols_textord, "\u2202", "\\partial", true);
-defineSymbol(symbols_math, main, bin, "\u2298", "\\oslash", true);
-defineSymbol(symbols_math, ams, bin, "\u229A", "\\circledcirc", true);
-defineSymbol(symbols_math, ams, bin, "\u22A1", "\\boxdot", true);
-defineSymbol(symbols_math, main, bin, "\u25B3", "\\bigtriangleup");
-defineSymbol(symbols_math, main, bin, "\u25BD", "\\bigtriangledown");
-defineSymbol(symbols_math, main, bin, "\u2020", "\\dagger");
-defineSymbol(symbols_math, main, bin, "\u22C4", "\\diamond");
-defineSymbol(symbols_math, main, bin, "\u22C6", "\\star");
-defineSymbol(symbols_math, main, bin, "\u25C3", "\\triangleleft");
-defineSymbol(symbols_math, main, bin, "\u25B9", "\\triangleright");
-defineSymbol(symbols_math, main, symbols_open, "{", "\\{");
-defineSymbol(symbols_text, main, symbols_textord, "{", "\\{");
-defineSymbol(symbols_text, main, symbols_textord, "{", "\\textbraceleft");
-defineSymbol(symbols_math, main, symbols_close, "}", "\\}");
-defineSymbol(symbols_text, main, symbols_textord, "}", "\\}");
-defineSymbol(symbols_text, main, symbols_textord, "}", "\\textbraceright");
-defineSymbol(symbols_math, main, symbols_open, "{", "\\lbrace");
-defineSymbol(symbols_math, main, symbols_close, "}", "\\rbrace");
-defineSymbol(symbols_math, main, symbols_open, "[", "\\lbrack");
-defineSymbol(symbols_text, main, symbols_textord, "[", "\\lbrack");
-defineSymbol(symbols_math, main, symbols_close, "]", "\\rbrack");
-defineSymbol(symbols_text, main, symbols_textord, "]", "\\rbrack");
-defineSymbol(symbols_math, main, symbols_open, "(", "\\lparen");
-defineSymbol(symbols_math, main, symbols_close, ")", "\\rparen");
-defineSymbol(symbols_text, main, symbols_textord, "<", "\\textless"); // in T1 fontenc
-
-defineSymbol(symbols_text, main, symbols_textord, ">", "\\textgreater"); // in T1 fontenc
-
-defineSymbol(symbols_math, main, symbols_open, "\u230A", "\\lfloor", true);
-defineSymbol(symbols_math, main, symbols_close, "\u230B", "\\rfloor", true);
-defineSymbol(symbols_math, main, symbols_open, "\u2308", "\\lceil", true);
-defineSymbol(symbols_math, main, symbols_close, "\u2309", "\\rceil", true);
-defineSymbol(symbols_math, main, symbols_textord, "\\", "\\backslash");
-defineSymbol(symbols_math, main, symbols_textord, "\u2223", "|");
-defineSymbol(symbols_math, main, symbols_textord, "\u2223", "\\vert");
-defineSymbol(symbols_text, main, symbols_textord, "|", "\\textbar"); // in T1 fontenc
-
-defineSymbol(symbols_math, main, symbols_textord, "\u2225", "\\|");
-defineSymbol(symbols_math, main, symbols_textord, "\u2225", "\\Vert");
-defineSymbol(symbols_text, main, symbols_textord, "\u2225", "\\textbardbl");
-defineSymbol(symbols_text, main, symbols_textord, "~", "\\textasciitilde");
-defineSymbol(symbols_text, main, symbols_textord, "\\", "\\textbackslash");
-defineSymbol(symbols_text, main, symbols_textord, "^", "\\textasciicircum");
-defineSymbol(symbols_math, main, rel, "\u2191", "\\uparrow", true);
-defineSymbol(symbols_math, main, rel, "\u21D1", "\\Uparrow", true);
-defineSymbol(symbols_math, main, rel, "\u2193", "\\downarrow", true);
-defineSymbol(symbols_math, main, rel, "\u21D3", "\\Downarrow", true);
-defineSymbol(symbols_math, main, rel, "\u2195", "\\updownarrow", true);
-defineSymbol(symbols_math, main, rel, "\u21D5", "\\Updownarrow", true);
-defineSymbol(symbols_math, main, op, "\u2210", "\\coprod");
-defineSymbol(symbols_math, main, op, "\u22C1", "\\bigvee");
-defineSymbol(symbols_math, main, op, "\u22C0", "\\bigwedge");
-defineSymbol(symbols_math, main, op, "\u2A04", "\\biguplus");
-defineSymbol(symbols_math, main, op, "\u22C2", "\\bigcap");
-defineSymbol(symbols_math, main, op, "\u22C3", "\\bigcup");
-defineSymbol(symbols_math, main, op, "\u222B", "\\int");
-defineSymbol(symbols_math, main, op, "\u222B", "\\intop");
-defineSymbol(symbols_math, main, op, "\u222C", "\\iint");
-defineSymbol(symbols_math, main, op, "\u222D", "\\iiint");
-defineSymbol(symbols_math, main, op, "\u220F", "\\prod");
-defineSymbol(symbols_math, main, op, "\u2211", "\\sum");
-defineSymbol(symbols_math, main, op, "\u2A02", "\\bigotimes");
-defineSymbol(symbols_math, main, op, "\u2A01", "\\bigoplus");
-defineSymbol(symbols_math, main, op, "\u2A00", "\\bigodot");
-defineSymbol(symbols_math, main, op, "\u222E", "\\oint");
-defineSymbol(symbols_math, main, op, "\u222F", "\\oiint");
-defineSymbol(symbols_math, main, op, "\u2230", "\\oiiint");
-defineSymbol(symbols_math, main, op, "\u2A06", "\\bigsqcup");
-defineSymbol(symbols_math, main, op, "\u222B", "\\smallint");
-defineSymbol(symbols_text, main, symbols_inner, "\u2026", "\\textellipsis");
-defineSymbol(symbols_math, main, symbols_inner, "\u2026", "\\mathellipsis");
-defineSymbol(symbols_text, main, symbols_inner, "\u2026", "\\ldots", true);
-defineSymbol(symbols_math, main, symbols_inner, "\u2026", "\\ldots", true);
-defineSymbol(symbols_math, main, symbols_inner, "\u22EF", "\\@cdots", true);
-defineSymbol(symbols_math, main, symbols_inner, "\u22F1", "\\ddots", true);
-defineSymbol(symbols_math, main, symbols_textord, "\u22EE", "\\varvdots"); // \vdots is a macro
-
-defineSymbol(symbols_math, main, symbols_accent, "\u02CA", "\\acute");
-defineSymbol(symbols_math, main, symbols_accent, "\u02CB", "\\grave");
-defineSymbol(symbols_math, main, symbols_accent, "\xA8", "\\ddot");
-defineSymbol(symbols_math, main, symbols_accent, "~", "\\tilde");
-defineSymbol(symbols_math, main, symbols_accent, "\u02C9", "\\bar");
-defineSymbol(symbols_math, main, symbols_accent, "\u02D8", "\\breve");
-defineSymbol(symbols_math, main, symbols_accent, "\u02C7", "\\check");
-defineSymbol(symbols_math, main, symbols_accent, "^", "\\hat");
-defineSymbol(symbols_math, main, symbols_accent, "\u20D7", "\\vec");
-defineSymbol(symbols_math, main, symbols_accent, "\u02D9", "\\dot");
-defineSymbol(symbols_math, main, symbols_accent, "\u02DA", "\\mathring");
-defineSymbol(symbols_math, main, mathord, "\u0131", "\\imath", true);
-defineSymbol(symbols_math, main, mathord, "\u0237", "\\jmath", true);
-defineSymbol(symbols_text, main, symbols_textord, "\u0131", "\\i", true);
-defineSymbol(symbols_text, main, symbols_textord, "\u0237", "\\j", true);
-defineSymbol(symbols_text, main, symbols_textord, "\xDF", "\\ss", true);
-defineSymbol(symbols_text, main, symbols_textord, "\xE6", "\\ae", true);
-defineSymbol(symbols_text, main, symbols_textord, "\xE6", "\\ae", true);
-defineSymbol(symbols_text, main, symbols_textord, "\u0153", "\\oe", true);
-defineSymbol(symbols_text, main, symbols_textord, "\xF8", "\\o", true);
-defineSymbol(symbols_text, main, symbols_textord, "\xC6", "\\AE", true);
-defineSymbol(symbols_text, main, symbols_textord, "\u0152", "\\OE", true);
-defineSymbol(symbols_text, main, symbols_textord, "\xD8", "\\O", true);
-defineSymbol(symbols_text, main, symbols_accent, "\u02CA", "\\'"); // acute
-
-defineSymbol(symbols_text, main, symbols_accent, "\u02CB", "\\`"); // grave
-
-defineSymbol(symbols_text, main, symbols_accent, "\u02C6", "\\^"); // circumflex
-
-defineSymbol(symbols_text, main, symbols_accent, "\u02DC", "\\~"); // tilde
-
-defineSymbol(symbols_text, main, symbols_accent, "\u02C9", "\\="); // macron
-
-defineSymbol(symbols_text, main, symbols_accent, "\u02D8", "\\u"); // breve
-
-defineSymbol(symbols_text, main, symbols_accent, "\u02D9", "\\."); // dot above
-
-defineSymbol(symbols_text, main, symbols_accent, "\u02DA", "\\r"); // ring above
-
-defineSymbol(symbols_text, main, symbols_accent, "\u02C7", "\\v"); // caron
-
-defineSymbol(symbols_text, main, symbols_accent, "\xA8", '\\"'); // diaresis
-
-defineSymbol(symbols_text, main, symbols_accent, "\u02DD", "\\H"); // double acute
-
-defineSymbol(symbols_text, main, symbols_accent, "\u25EF", "\\textcircled"); // \bigcirc glyph
-// These ligatures are detected and created in Parser.js's `formLigatures`.
-
-var ligatures = {
-  "--": true,
-  "---": true,
-  "``": true,
-  "''": true
-};
-defineSymbol(symbols_text, main, symbols_textord, "\u2013", "--");
-defineSymbol(symbols_text, main, symbols_textord, "\u2013", "\\textendash");
-defineSymbol(symbols_text, main, symbols_textord, "\u2014", "---");
-defineSymbol(symbols_text, main, symbols_textord, "\u2014", "\\textemdash");
-defineSymbol(symbols_text, main, symbols_textord, "\u2018", "`");
-defineSymbol(symbols_text, main, symbols_textord, "\u2018", "\\textquoteleft");
-defineSymbol(symbols_text, main, symbols_textord, "\u2019", "'");
-defineSymbol(symbols_text, main, symbols_textord, "\u2019", "\\textquoteright");
-defineSymbol(symbols_text, main, symbols_textord, "\u201C", "``");
-defineSymbol(symbols_text, main, symbols_textord, "\u201C", "\\textquotedblleft");
-defineSymbol(symbols_text, main, symbols_textord, "\u201D", "''");
-defineSymbol(symbols_text, main, symbols_textord, "\u201D", "\\textquotedblright"); //  \degree from gensymb package
-
-defineSymbol(symbols_math, main, symbols_textord, "\xB0", "\\degree", true);
-defineSymbol(symbols_text, main, symbols_textord, "\xB0", "\\degree"); // \textdegree from inputenc package
-
-defineSymbol(symbols_text, main, symbols_textord, "\xB0", "\\textdegree", true); // TODO: In LaTeX, \pounds can generate a different character in text and math
-// mode, but among our fonts, only Main-Italic defines this character "163".
-
-defineSymbol(symbols_math, main, mathord, "\xA3", "\\pounds");
-defineSymbol(symbols_math, main, mathord, "\xA3", "\\mathsterling", true);
-defineSymbol(symbols_text, main, mathord, "\xA3", "\\pounds");
-defineSymbol(symbols_text, main, mathord, "\xA3", "\\textsterling", true);
-defineSymbol(symbols_math, ams, symbols_textord, "\u2720", "\\maltese");
-defineSymbol(symbols_text, ams, symbols_textord, "\u2720", "\\maltese");
-defineSymbol(symbols_text, main, symbols_spacing, "\xA0", "\\ ");
-defineSymbol(symbols_text, main, symbols_spacing, "\xA0", " ");
-defineSymbol(symbols_text, main, symbols_spacing, "\xA0", "~"); // There are lots of symbols which are the same, so we add them in afterwards.
-// All of these are textords in math mode
-
-var mathTextSymbols = "0123456789/@.\"";
-
-for (var symbols_i = 0; symbols_i < mathTextSymbols.length; symbols_i++) {
-  var symbols_ch = mathTextSymbols.charAt(symbols_i);
-  defineSymbol(symbols_math, main, symbols_textord, symbols_ch, symbols_ch);
-} // All of these are textords in text mode
-
-
-var textSymbols = "0123456789!@*()-=+[]<>|\";:?/.,";
-
-for (var src_symbols_i = 0; src_symbols_i < textSymbols.length; src_symbols_i++) {
-  var _ch = textSymbols.charAt(src_symbols_i);
-
-  defineSymbol(symbols_text, main, symbols_textord, _ch, _ch);
-} // All of these are textords in text mode, and mathords in math mode
-
-
-var letters = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
-
-for (var symbols_i2 = 0; symbols_i2 < letters.length; symbols_i2++) {
-  var _ch2 = letters.charAt(symbols_i2);
-
-  defineSymbol(symbols_math, main, mathord, _ch2, _ch2);
-  defineSymbol(symbols_text, main, symbols_textord, _ch2, _ch2);
-} // Blackboard bold and script letters in Unicode range
-
-
-defineSymbol(symbols_math, ams, symbols_textord, "C", "\u2102"); // blackboard bold
-
-defineSymbol(symbols_text, ams, symbols_textord, "C", "\u2102");
-defineSymbol(symbols_math, ams, symbols_textord, "H", "\u210D");
-defineSymbol(symbols_text, ams, symbols_textord, "H", "\u210D");
-defineSymbol(symbols_math, ams, symbols_textord, "N", "\u2115");
-defineSymbol(symbols_text, ams, symbols_textord, "N", "\u2115");
-defineSymbol(symbols_math, ams, symbols_textord, "P", "\u2119");
-defineSymbol(symbols_text, ams, symbols_textord, "P", "\u2119");
-defineSymbol(symbols_math, ams, symbols_textord, "Q", "\u211A");
-defineSymbol(symbols_text, ams, symbols_textord, "Q", "\u211A");
-defineSymbol(symbols_math, ams, symbols_textord, "R", "\u211D");
-defineSymbol(symbols_text, ams, symbols_textord, "R", "\u211D");
-defineSymbol(symbols_math, ams, symbols_textord, "Z", "\u2124");
-defineSymbol(symbols_text, ams, symbols_textord, "Z", "\u2124");
-defineSymbol(symbols_math, main, mathord, "h", "\u210E"); // italic h, Planck constant
-
-defineSymbol(symbols_text, main, mathord, "h", "\u210E"); // The next loop loads wide (surrogate pair) characters.
-// We support some letters in the Unicode range U+1D400 to U+1D7FF,
-// Mathematical Alphanumeric Symbols.
-// Some editors do not deal well with wide characters. So don't write the
-// string into this file. Instead, create the string from the surrogate pair.
-
-var symbols_wideChar = "";
-
-for (var symbols_i3 = 0; symbols_i3 < letters.length; symbols_i3++) {
-  var _ch3 = letters.charAt(symbols_i3); // The hex numbers in the next line are a surrogate pair.
-  // 0xD835 is the high surrogate for all letters in the range we support.
-  // 0xDC00 is the low surrogate for bold A.
-
-
-  symbols_wideChar = String.fromCharCode(0xD835, 0xDC00 + symbols_i3); // A-Z a-z bold
-
-  defineSymbol(symbols_math, main, mathord, _ch3, symbols_wideChar);
-  defineSymbol(symbols_text, main, symbols_textord, _ch3, symbols_wideChar);
-  symbols_wideChar = String.fromCharCode(0xD835, 0xDC34 + symbols_i3); // A-Z a-z italic
-
-  defineSymbol(symbols_math, main, mathord, _ch3, symbols_wideChar);
-  defineSymbol(symbols_text, main, symbols_textord, _ch3, symbols_wideChar);
-  symbols_wideChar = String.fromCharCode(0xD835, 0xDC68 + symbols_i3); // A-Z a-z bold italic
-
-  defineSymbol(symbols_math, main, mathord, _ch3, symbols_wideChar);
-  defineSymbol(symbols_text, main, symbols_textord, _ch3, symbols_wideChar);
-  symbols_wideChar = String.fromCharCode(0xD835, 0xDD04 + symbols_i3); // A-Z a-z Fractur
-
-  defineSymbol(symbols_math, main, mathord, _ch3, symbols_wideChar);
-  defineSymbol(symbols_text, main, symbols_textord, _ch3, symbols_wideChar);
-  symbols_wideChar = String.fromCharCode(0xD835, 0xDDA0 + symbols_i3); // A-Z a-z sans-serif
-
-  defineSymbol(symbols_math, main, mathord, _ch3, symbols_wideChar);
-  defineSymbol(symbols_text, main, symbols_textord, _ch3, symbols_wideChar);
-  symbols_wideChar = String.fromCharCode(0xD835, 0xDDD4 + symbols_i3); // A-Z a-z sans bold
-
-  defineSymbol(symbols_math, main, mathord, _ch3, symbols_wideChar);
-  defineSymbol(symbols_text, main, symbols_textord, _ch3, symbols_wideChar);
-  symbols_wideChar = String.fromCharCode(0xD835, 0xDE08 + symbols_i3); // A-Z a-z sans italic
-
-  defineSymbol(symbols_math, main, mathord, _ch3, symbols_wideChar);
-  defineSymbol(symbols_text, main, symbols_textord, _ch3, symbols_wideChar);
-  symbols_wideChar = String.fromCharCode(0xD835, 0xDE70 + symbols_i3); // A-Z a-z monospace
-
-  defineSymbol(symbols_math, main, mathord, _ch3, symbols_wideChar);
-  defineSymbol(symbols_text, main, symbols_textord, _ch3, symbols_wideChar);
-
-  if (symbols_i3 < 26) {
-    // KaTeX fonts have only capital letters for blackboard bold and script.
-    // See exception for k below.
-    symbols_wideChar = String.fromCharCode(0xD835, 0xDD38 + symbols_i3); // A-Z double struck
-
-    defineSymbol(symbols_math, main, mathord, _ch3, symbols_wideChar);
-    defineSymbol(symbols_text, main, symbols_textord, _ch3, symbols_wideChar);
-    symbols_wideChar = String.fromCharCode(0xD835, 0xDC9C + symbols_i3); // A-Z script
-
-    defineSymbol(symbols_math, main, mathord, _ch3, symbols_wideChar);
-    defineSymbol(symbols_text, main, symbols_textord, _ch3, symbols_wideChar);
-  } // TODO: Add bold script when it is supported by a KaTeX font.
-
-} // "k" is the only double struck lower case letter in the KaTeX fonts.
-
-
-symbols_wideChar = String.fromCharCode(0xD835, 0xDD5C); // k double struck
-
-defineSymbol(symbols_math, main, mathord, "k", symbols_wideChar);
-defineSymbol(symbols_text, main, symbols_textord, "k", symbols_wideChar); // Next, some wide character numerals
-
-for (var symbols_i4 = 0; symbols_i4 < 10; symbols_i4++) {
-  var _ch4 = symbols_i4.toString();
-
-  symbols_wideChar = String.fromCharCode(0xD835, 0xDFCE + symbols_i4); // 0-9 bold
-
-  defineSymbol(symbols_math, main, mathord, _ch4, symbols_wideChar);
-  defineSymbol(symbols_text, main, symbols_textord, _ch4, symbols_wideChar);
-  symbols_wideChar = String.fromCharCode(0xD835, 0xDFE2 + symbols_i4); // 0-9 sans serif
-
-  defineSymbol(symbols_math, main, mathord, _ch4, symbols_wideChar);
-  defineSymbol(symbols_text, main, symbols_textord, _ch4, symbols_wideChar);
-  symbols_wideChar = String.fromCharCode(0xD835, 0xDFEC + symbols_i4); // 0-9 bold sans
-
-  defineSymbol(symbols_math, main, mathord, _ch4, symbols_wideChar);
-  defineSymbol(symbols_text, main, symbols_textord, _ch4, symbols_wideChar);
-  symbols_wideChar = String.fromCharCode(0xD835, 0xDFF6 + symbols_i4); // 0-9 monospace
-
-  defineSymbol(symbols_math, main, mathord, _ch4, symbols_wideChar);
-  defineSymbol(symbols_text, main, symbols_textord, _ch4, symbols_wideChar);
-} // We add these Latin-1 letters as symbols for backwards-compatibility,
-// but they are not actually in the font, nor are they supported by the
-// Unicode accent mechanism, so they fall back to Times font and look ugly.
-// TODO(edemaine): Fix this.
-
-
-var extraLatin = "ÇÐÞçþ";
-
-for (var _i5 = 0; _i5 < extraLatin.length; _i5++) {
-  var _ch5 = extraLatin.charAt(_i5);
-
-  defineSymbol(symbols_math, main, mathord, _ch5, _ch5);
-  defineSymbol(symbols_text, main, symbols_textord, _ch5, _ch5);
-}
-
-defineSymbol(symbols_text, main, symbols_textord, "ð", "ð"); // Unicode versions of existing characters
-
-defineSymbol(symbols_text, main, symbols_textord, "\u2013", "–");
-defineSymbol(symbols_text, main, symbols_textord, "\u2014", "—");
-defineSymbol(symbols_text, main, symbols_textord, "\u2018", "‘");
-defineSymbol(symbols_text, main, symbols_textord, "\u2019", "’");
-defineSymbol(symbols_text, main, symbols_textord, "\u201C", "“");
-defineSymbol(symbols_text, main, symbols_textord, "\u201D", "”");
-// CONCATENATED MODULE: ./src/wide-character.js
-/**
- * This file provides support for Unicode range U+1D400 to U+1D7FF,
- * Mathematical Alphanumeric Symbols.
- *
- * Function wideCharacterFont takes a wide character as input and returns
- * the font information necessary to render it properly.
- */
-
-/**
- * Data below is from https://www.unicode.org/charts/PDF/U1D400.pdf
- * That document sorts characters into groups by font type, say bold or italic.
- *
- * In the arrays below, each subarray consists three elements:
- *      * The CSS class of that group when in math mode.
- *      * The CSS class of that group when in text mode.
- *      * The font name, so that KaTeX can get font metrics.
- */
-
-var wideLatinLetterData = [["mathbf", "textbf", "Main-Bold"], // A-Z bold upright
-["mathbf", "textbf", "Main-Bold"], // a-z bold upright
-["mathdefault", "textit", "Math-Italic"], // A-Z italic
-["mathdefault", "textit", "Math-Italic"], // a-z italic
-["boldsymbol", "boldsymbol", "Main-BoldItalic"], // A-Z bold italic
-["boldsymbol", "boldsymbol", "Main-BoldItalic"], // a-z bold italic
-// Map fancy A-Z letters to script, not calligraphic.
-// This aligns with unicode-math and math fonts (except Cambria Math).
-["mathscr", "textscr", "Script-Regular"], // A-Z script
-["", "", ""], // a-z script.  No font
-["", "", ""], // A-Z bold script. No font
-["", "", ""], // a-z bold script. No font
-["mathfrak", "textfrak", "Fraktur-Regular"], // A-Z Fraktur
-["mathfrak", "textfrak", "Fraktur-Regular"], // a-z Fraktur
-["mathbb", "textbb", "AMS-Regular"], // A-Z double-struck
-["mathbb", "textbb", "AMS-Regular"], // k double-struck
-["", "", ""], // A-Z bold Fraktur No font metrics
-["", "", ""], // a-z bold Fraktur.   No font.
-["mathsf", "textsf", "SansSerif-Regular"], // A-Z sans-serif
-["mathsf", "textsf", "SansSerif-Regular"], // a-z sans-serif
-["mathboldsf", "textboldsf", "SansSerif-Bold"], // A-Z bold sans-serif
-["mathboldsf", "textboldsf", "SansSerif-Bold"], // a-z bold sans-serif
-["mathitsf", "textitsf", "SansSerif-Italic"], // A-Z italic sans-serif
-["mathitsf", "textitsf", "SansSerif-Italic"], // a-z italic sans-serif
-["", "", ""], // A-Z bold italic sans. No font
-["", "", ""], // a-z bold italic sans. No font
-["mathtt", "texttt", "Typewriter-Regular"], // A-Z monospace
-["mathtt", "texttt", "Typewriter-Regular"]];
-var wideNumeralData = [["mathbf", "textbf", "Main-Bold"], // 0-9 bold
-["", "", ""], // 0-9 double-struck. No KaTeX font.
-["mathsf", "textsf", "SansSerif-Regular"], // 0-9 sans-serif
-["mathboldsf", "textboldsf", "SansSerif-Bold"], // 0-9 bold sans-serif
-["mathtt", "texttt", "Typewriter-Regular"]];
-var wide_character_wideCharacterFont = function wideCharacterFont(wideChar, mode) {
-  // IE doesn't support codePointAt(). So work with the surrogate pair.
-  var H = wideChar.charCodeAt(0); // high surrogate
-
-  var L = wideChar.charCodeAt(1); // low surrogate
-
-  var codePoint = (H - 0xD800) * 0x400 + (L - 0xDC00) + 0x10000;
-  var j = mode === "math" ? 0 : 1; // column index for CSS class.
-
-  if (0x1D400 <= codePoint && codePoint < 0x1D6A4) {
-    // wideLatinLetterData contains exactly 26 chars on each row.
-    // So we can calculate the relevant row. No traverse necessary.
-    var i = Math.floor((codePoint - 0x1D400) / 26);
-    return [wideLatinLetterData[i][2], wideLatinLetterData[i][j]];
-  } else if (0x1D7CE <= codePoint && codePoint <= 0x1D7FF) {
-    // Numerals, ten per row.
-    var _i = Math.floor((codePoint - 0x1D7CE) / 10);
-
-    return [wideNumeralData[_i][2], wideNumeralData[_i][j]];
-  } else if (codePoint === 0x1D6A5 || codePoint === 0x1D6A6) {
-    // dotless i or j
-    return [wideLatinLetterData[0][2], wideLatinLetterData[0][j]];
-  } else if (0x1D6A6 < codePoint && codePoint < 0x1D7CE) {
-    // Greek letters. Not supported, yet.
-    return ["", ""];
-  } else {
-    // We don't support any wide characters outside 1D400–1D7FF.
-    throw new src_ParseError("Unsupported character: " + wideChar);
-  }
-};
-// CONCATENATED MODULE: ./src/Options.js
-/**
- * This file contains information about the options that the Parser carries
- * around with it while parsing. Data is held in an `Options` object, and when
- * recursing, a new `Options` object can be created with the `.with*` and
- * `.reset` functions.
- */
-
-var sizeStyleMap = [// Each element contains [textsize, scriptsize, scriptscriptsize].
-// The size mappings are taken from TeX with \normalsize=10pt.
-[1, 1, 1], // size1: [5, 5, 5]              \tiny
-[2, 1, 1], // size2: [6, 5, 5]
-[3, 1, 1], // size3: [7, 5, 5]              \scriptsize
-[4, 2, 1], // size4: [8, 6, 5]              \footnotesize
-[5, 2, 1], // size5: [9, 6, 5]              \small
-[6, 3, 1], // size6: [10, 7, 5]             \normalsize
-[7, 4, 2], // size7: [12, 8, 6]             \large
-[8, 6, 3], // size8: [14.4, 10, 7]          \Large
-[9, 7, 6], // size9: [17.28, 12, 10]        \LARGE
-[10, 8, 7], // size10: [20.74, 14.4, 12]     \huge
-[11, 10, 9]];
-var sizeMultipliers = [// fontMetrics.js:getGlobalMetrics also uses size indexes, so if
-// you change size indexes, change that function.
-0.5, 0.6, 0.7, 0.8, 0.9, 1.0, 1.2, 1.44, 1.728, 2.074, 2.488];
-
-var sizeAtStyle = function sizeAtStyle(size, style) {
-  return style.size < 2 ? size : sizeStyleMap[size - 1][style.size - 1];
-}; // In these types, "" (empty string) means "no change".
-
-
-/**
- * This is the main options class. It contains the current style, size, color,
- * and font.
- *
- * Options objects should not be modified. To create a new Options with
- * different properties, call a `.having*` method.
- */
-var Options_Options =
-/*#__PURE__*/
-function () {
-  // A font family applies to a group of fonts (i.e. SansSerif), while a font
-  // represents a specific font (i.e. SansSerif Bold).
-  // See: https://tex.stackexchange.com/questions/22350/difference-between-textrm-and-mathrm
-
-  /**
-   * The base size index.
-   */
-  function Options(data) {
-    this.style = void 0;
-    this.color = void 0;
-    this.size = void 0;
-    this.textSize = void 0;
-    this.phantom = void 0;
-    this.font = void 0;
-    this.fontFamily = void 0;
-    this.fontWeight = void 0;
-    this.fontShape = void 0;
-    this.sizeMultiplier = void 0;
-    this.maxSize = void 0;
-    this.minRuleThickness = void 0;
-    this._fontMetrics = void 0;
-    this.style = data.style;
-    this.color = data.color;
-    this.size = data.size || Options.BASESIZE;
-    this.textSize = data.textSize || this.size;
-    this.phantom = !!data.phantom;
-    this.font = data.font || "";
-    this.fontFamily = data.fontFamily || "";
-    this.fontWeight = data.fontWeight || '';
-    this.fontShape = data.fontShape || '';
-    this.sizeMultiplier = sizeMultipliers[this.size - 1];
-    this.maxSize = data.maxSize;
-    this.minRuleThickness = data.minRuleThickness;
-    this._fontMetrics = undefined;
-  }
-  /**
-   * Returns a new options object with the same properties as "this".  Properties
-   * from "extension" will be copied to the new options object.
-   */
-
-
-  var _proto = Options.prototype;
-
-  _proto.extend = function extend(extension) {
-    var data = {
-      style: this.style,
-      size: this.size,
-      textSize: this.textSize,
-      color: this.color,
-      phantom: this.phantom,
-      font: this.font,
-      fontFamily: this.fontFamily,
-      fontWeight: this.fontWeight,
-      fontShape: this.fontShape,
-      maxSize: this.maxSize,
-      minRuleThickness: this.minRuleThickness
-    };
-
-    for (var key in extension) {
-      if (extension.hasOwnProperty(key)) {
-        data[key] = extension[key];
-      }
-    }
-
-    return new Options(data);
-  }
-  /**
-   * Return an options object with the given style. If `this.style === style`,
-   * returns `this`.
-   */
-  ;
-
-  _proto.havingStyle = function havingStyle(style) {
-    if (this.style === style) {
-      return this;
-    } else {
-      return this.extend({
-        style: style,
-        size: sizeAtStyle(this.textSize, style)
-      });
-    }
-  }
-  /**
-   * Return an options object with a cramped version of the current style. If
-   * the current style is cramped, returns `this`.
-   */
-  ;
-
-  _proto.havingCrampedStyle = function havingCrampedStyle() {
-    return this.havingStyle(this.style.cramp());
-  }
-  /**
-   * Return an options object with the given size and in at least `\textstyle`.
-   * Returns `this` if appropriate.
-   */
-  ;
-
-  _proto.havingSize = function havingSize(size) {
-    if (this.size === size && this.textSize === size) {
-      return this;
-    } else {
-      return this.extend({
-        style: this.style.text(),
-        size: size,
-        textSize: size,
-        sizeMultiplier: sizeMultipliers[size - 1]
-      });
-    }
-  }
-  /**
-   * Like `this.havingSize(BASESIZE).havingStyle(style)`. If `style` is omitted,
-   * changes to at least `\textstyle`.
-   */
-  ;
-
-  _proto.havingBaseStyle = function havingBaseStyle(style) {
-    style = style || this.style.text();
-    var wantSize = sizeAtStyle(Options.BASESIZE, style);
-
-    if (this.size === wantSize && this.textSize === Options.BASESIZE && this.style === style) {
-      return this;
-    } else {
-      return this.extend({
-        style: style,
-        size: wantSize
-      });
-    }
-  }
-  /**
-   * Remove the effect of sizing changes such as \Huge.
-   * Keep the effect of the current style, such as \scriptstyle.
-   */
-  ;
-
-  _proto.havingBaseSizing = function havingBaseSizing() {
-    var size;
-
-    switch (this.style.id) {
-      case 4:
-      case 5:
-        size = 3; // normalsize in scriptstyle
-
-        break;
-
-      case 6:
-      case 7:
-        size = 1; // normalsize in scriptscriptstyle
-
-        break;
-
-      default:
-        size = 6;
-      // normalsize in textstyle or displaystyle
-    }
-
-    return this.extend({
-      style: this.style.text(),
-      size: size
-    });
-  }
-  /**
-   * Create a new options object with the given color.
-   */
-  ;
-
-  _proto.withColor = function withColor(color) {
-    return this.extend({
-      color: color
-    });
-  }
-  /**
-   * Create a new options object with "phantom" set to true.
-   */
-  ;
-
-  _proto.withPhantom = function withPhantom() {
-    return this.extend({
-      phantom: true
-    });
-  }
-  /**
-   * Creates a new options object with the given math font or old text font.
-   * @type {[type]}
-   */
-  ;
-
-  _proto.withFont = function withFont(font) {
-    return this.extend({
-      font: font
-    });
-  }
-  /**
-   * Create a new options objects with the given fontFamily.
-   */
-  ;
-
-  _proto.withTextFontFamily = function withTextFontFamily(fontFamily) {
-    return this.extend({
-      fontFamily: fontFamily,
-      font: ""
-    });
-  }
-  /**
-   * Creates a new options object with the given font weight
-   */
-  ;
-
-  _proto.withTextFontWeight = function withTextFontWeight(fontWeight) {
-    return this.extend({
-      fontWeight: fontWeight,
-      font: ""
-    });
-  }
-  /**
-   * Creates a new options object with the given font weight
-   */
-  ;
-
-  _proto.withTextFontShape = function withTextFontShape(fontShape) {
-    return this.extend({
-      fontShape: fontShape,
-      font: ""
-    });
-  }
-  /**
-   * Return the CSS sizing classes required to switch from enclosing options
-   * `oldOptions` to `this`. Returns an array of classes.
-   */
-  ;
-
-  _proto.sizingClasses = function sizingClasses(oldOptions) {
-    if (oldOptions.size !== this.size) {
-      return ["sizing", "reset-size" + oldOptions.size, "size" + this.size];
-    } else {
-      return [];
-    }
-  }
-  /**
-   * Return the CSS sizing classes required to switch to the base size. Like
-   * `this.havingSize(BASESIZE).sizingClasses(this)`.
-   */
-  ;
-
-  _proto.baseSizingClasses = function baseSizingClasses() {
-    if (this.size !== Options.BASESIZE) {
-      return ["sizing", "reset-size" + this.size, "size" + Options.BASESIZE];
-    } else {
-      return [];
-    }
-  }
-  /**
-   * Return the font metrics for this size.
-   */
-  ;
-
-  _proto.fontMetrics = function fontMetrics() {
-    if (!this._fontMetrics) {
-      this._fontMetrics = getGlobalMetrics(this.size);
-    }
-
-    return this._fontMetrics;
-  }
-  /**
-   * Gets the CSS color of the current options object
-   */
-  ;
-
-  _proto.getColor = function getColor() {
-    if (this.phantom) {
-      return "transparent";
-    } else {
-      return this.color;
-    }
-  };
-
-  return Options;
-}();
-
-Options_Options.BASESIZE = 6;
-/* harmony default export */ var src_Options = (Options_Options);
-// CONCATENATED MODULE: ./src/units.js
-/**
- * This file does conversion between units.  In particular, it provides
- * calculateSize to convert other units into ems.
- */
-
- // This table gives the number of TeX pts in one of each *absolute* TeX unit.
-// Thus, multiplying a length by this number converts the length from units
-// into pts.  Dividing the result by ptPerEm gives the number of ems
-// *assuming* a font size of ptPerEm (normal size, normal style).
-
-var ptPerUnit = {
-  // https://en.wikibooks.org/wiki/LaTeX/Lengths and
-  // https://tex.stackexchange.com/a/8263
-  "pt": 1,
-  // TeX point
-  "mm": 7227 / 2540,
-  // millimeter
-  "cm": 7227 / 254,
-  // centimeter
-  "in": 72.27,
-  // inch
-  "bp": 803 / 800,
-  // big (PostScript) points
-  "pc": 12,
-  // pica
-  "dd": 1238 / 1157,
-  // didot
-  "cc": 14856 / 1157,
-  // cicero (12 didot)
-  "nd": 685 / 642,
-  // new didot
-  "nc": 1370 / 107,
-  // new cicero (12 new didot)
-  "sp": 1 / 65536,
-  // scaled point (TeX's internal smallest unit)
-  // https://tex.stackexchange.com/a/41371
-  "px": 803 / 800 // \pdfpxdimen defaults to 1 bp in pdfTeX and LuaTeX
-
-}; // Dictionary of relative units, for fast validity testing.
-
-var relativeUnit = {
-  "ex": true,
-  "em": true,
-  "mu": true
-};
-
-/**
- * Determine whether the specified unit (either a string defining the unit
- * or a "size" parse node containing a unit field) is valid.
- */
-var validUnit = function validUnit(unit) {
-  if (typeof unit !== "string") {
-    unit = unit.unit;
-  }
-
-  return unit in ptPerUnit || unit in relativeUnit || unit === "ex";
-};
-/*
- * Convert a "size" parse node (with numeric "number" and string "unit" fields,
- * as parsed by functions.js argType "size") into a CSS em value for the
- * current style/scale.  `options` gives the current options.
- */
-
-var units_calculateSize = function calculateSize(sizeValue, options) {
-  var scale;
-
-  if (sizeValue.unit in ptPerUnit) {
-    // Absolute units
-    scale = ptPerUnit[sizeValue.unit] // Convert unit to pt
-    / options.fontMetrics().ptPerEm // Convert pt to CSS em
-    / options.sizeMultiplier; // Unscale to make absolute units
-  } else if (sizeValue.unit === "mu") {
-    // `mu` units scale with scriptstyle/scriptscriptstyle.
-    scale = options.fontMetrics().cssEmPerMu;
-  } else {
-    // Other relative units always refer to the *textstyle* font
-    // in the current size.
-    var unitOptions;
-
-    if (options.style.isTight()) {
-      // isTight() means current style is script/scriptscript.
-      unitOptions = options.havingStyle(options.style.text());
-    } else {
-      unitOptions = options;
-    } // TODO: In TeX these units are relative to the quad of the current
-    // *text* font, e.g. cmr10. KaTeX instead uses values from the
-    // comparably-sized *Computer Modern symbol* font. At 10pt, these
-    // match. At 7pt and 5pt, they differ: cmr7=1.138894, cmsy7=1.170641;
-    // cmr5=1.361133, cmsy5=1.472241. Consider $\scriptsize a\kern1emb$.
-    // TeX \showlists shows a kern of 1.13889 * fontsize;
-    // KaTeX shows a kern of 1.171 * fontsize.
-
-
-    if (sizeValue.unit === "ex") {
-      scale = unitOptions.fontMetrics().xHeight;
-    } else if (sizeValue.unit === "em") {
-      scale = unitOptions.fontMetrics().quad;
-    } else {
-      throw new src_ParseError("Invalid unit: '" + sizeValue.unit + "'");
-    }
-
-    if (unitOptions !== options) {
-      scale *= unitOptions.sizeMultiplier / options.sizeMultiplier;
-    }
-  }
-
-  return Math.min(sizeValue.number * scale, options.maxSize);
-};
-// CONCATENATED MODULE: ./src/buildCommon.js
-/* eslint no-console:0 */
-
-/**
- * This module contains general functions that can be used for building
- * different kinds of domTree nodes in a consistent manner.
- */
-
-
-
-
-
-
-
-// The following have to be loaded from Main-Italic font, using class mathit
-var mathitLetters = ["\\imath", "ı", // dotless i
-"\\jmath", "ȷ", // dotless j
-"\\pounds", "\\mathsterling", "\\textsterling", "£"];
-/**
- * Looks up the given symbol in fontMetrics, after applying any symbol
- * replacements defined in symbol.js
- */
-
-var buildCommon_lookupSymbol = function lookupSymbol(value, // TODO(#963): Use a union type for this.
-fontName, mode) {
-  // Replace the value with its replaced value from symbol.js
-  if (src_symbols[mode][value] && src_symbols[mode][value].replace) {
-    value = src_symbols[mode][value].replace;
-  }
-
-  return {
-    value: value,
-    metrics: getCharacterMetrics(value, fontName, mode)
-  };
-};
-/**
- * Makes a symbolNode after translation via the list of symbols in symbols.js.
- * Correctly pulls out metrics for the character, and optionally takes a list of
- * classes to be attached to the node.
- *
- * TODO: make argument order closer to makeSpan
- * TODO: add a separate argument for math class (e.g. `mop`, `mbin`), which
- * should if present come first in `classes`.
- * TODO(#953): Make `options` mandatory and always pass it in.
- */
-
-
-var buildCommon_makeSymbol = function makeSymbol(value, fontName, mode, options, classes) {
-  var lookup = buildCommon_lookupSymbol(value, fontName, mode);
-  var metrics = lookup.metrics;
-  value = lookup.value;
-  var symbolNode;
-
-  if (metrics) {
-    var italic = metrics.italic;
-
-    if (mode === "text" || options && options.font === "mathit") {
-      italic = 0;
-    }
-
-    symbolNode = new domTree_SymbolNode(value, metrics.height, metrics.depth, italic, metrics.skew, metrics.width, classes);
-  } else {
-    // TODO(emily): Figure out a good way to only print this in development
-    typeof console !== "undefined" && console.warn("No character metrics " + ("for '" + value + "' in style '" + fontName + "' and mode '" + mode + "'"));
-    symbolNode = new domTree_SymbolNode(value, 0, 0, 0, 0, 0, classes);
-  }
-
-  if (options) {
-    symbolNode.maxFontSize = options.sizeMultiplier;
-
-    if (options.style.isTight()) {
-      symbolNode.classes.push("mtight");
-    }
-
-    var color = options.getColor();
-
-    if (color) {
-      symbolNode.style.color = color;
-    }
-  }
-
-  return symbolNode;
-};
-/**
- * Makes a symbol in Main-Regular or AMS-Regular.
- * Used for rel, bin, open, close, inner, and punct.
- */
-
-
-var buildCommon_mathsym = function mathsym(value, mode, options, classes) {
-  if (classes === void 0) {
-    classes = [];
-  }
-
-  // Decide what font to render the symbol in by its entry in the symbols
-  // table.
-  // Have a special case for when the value = \ because the \ is used as a
-  // textord in unsupported command errors but cannot be parsed as a regular
-  // text ordinal and is therefore not present as a symbol in the symbols
-  // table for text, as well as a special case for boldsymbol because it
-  // can be used for bold + and -
-  if (options.font === "boldsymbol" && buildCommon_lookupSymbol(value, "Main-Bold", mode).metrics) {
-    return buildCommon_makeSymbol(value, "Main-Bold", mode, options, classes.concat(["mathbf"]));
-  } else if (value === "\\" || src_symbols[mode][value].font === "main") {
-    return buildCommon_makeSymbol(value, "Main-Regular", mode, options, classes);
-  } else {
-    return buildCommon_makeSymbol(value, "AMS-Regular", mode, options, classes.concat(["amsrm"]));
-  }
-};
-/**
- * Determines which of the two font names (Main-Italic and Math-Italic) and
- * corresponding style tags (maindefault or mathit) to use for default math font,
- * depending on the symbol.
- */
-
-
-var buildCommon_mathdefault = function mathdefault(value, mode, options, classes) {
-  if (/[0-9]/.test(value.charAt(0)) || // glyphs for \imath and \jmath do not exist in Math-Italic so we
-  // need to use Main-Italic instead
-  utils.contains(mathitLetters, value)) {
-    return {
-      fontName: "Main-Italic",
-      fontClass: "mathit"
-    };
-  } else {
-    return {
-      fontName: "Math-Italic",
-      fontClass: "mathdefault"
-    };
-  }
-};
-/**
- * Determines which of the font names (Main-Italic, Math-Italic, and Caligraphic)
- * and corresponding style tags (mathit, mathdefault, or mathcal) to use for font
- * "mathnormal", depending on the symbol.  Use this function instead of fontMap for
- * font "mathnormal".
- */
-
-
-var buildCommon_mathnormal = function mathnormal(value, mode, options, classes) {
-  if (utils.contains(mathitLetters, value)) {
-    return {
-      fontName: "Main-Italic",
-      fontClass: "mathit"
-    };
-  } else if (/[0-9]/.test(value.charAt(0))) {
-    return {
-      fontName: "Caligraphic-Regular",
-      fontClass: "mathcal"
-    };
-  } else {
-    return {
-      fontName: "Math-Italic",
-      fontClass: "mathdefault"
-    };
-  }
-};
-/**
- * Determines which of the two font names (Main-Bold and Math-BoldItalic) and
- * corresponding style tags (mathbf or boldsymbol) to use for font "boldsymbol",
- * depending on the symbol.  Use this function instead of fontMap for font
- * "boldsymbol".
- */
-
-
-var boldsymbol = function boldsymbol(value, mode, options, classes) {
-  if (buildCommon_lookupSymbol(value, "Math-BoldItalic", mode).metrics) {
-    return {
-      fontName: "Math-BoldItalic",
-      fontClass: "boldsymbol"
-    };
-  } else {
-    // Some glyphs do not exist in Math-BoldItalic so we need to use
-    // Main-Bold instead.
-    return {
-      fontName: "Main-Bold",
-      fontClass: "mathbf"
-    };
-  }
-};
-/**
- * Makes either a mathord or textord in the correct font and color.
- */
-
-
-var buildCommon_makeOrd = function makeOrd(group, options, type) {
-  var mode = group.mode;
-  var text = group.text;
-  var classes = ["mord"]; // Math mode or Old font (i.e. \rm)
-
-  var isFont = mode === "math" || mode === "text" && options.font;
-  var fontOrFamily = isFont ? options.font : options.fontFamily;
-
-  if (text.charCodeAt(0) === 0xD835) {
-    // surrogate pairs get special treatment
-    var _wideCharacterFont = wide_character_wideCharacterFont(text, mode),
-        wideFontName = _wideCharacterFont[0],
-        wideFontClass = _wideCharacterFont[1];
-
-    return buildCommon_makeSymbol(text, wideFontName, mode, options, classes.concat(wideFontClass));
-  } else if (fontOrFamily) {
-    var fontName;
-    var fontClasses;
-
-    if (fontOrFamily === "boldsymbol" || fontOrFamily === "mathnormal") {
-      var fontData = fontOrFamily === "boldsymbol" ? boldsymbol(text, mode, options, classes) : buildCommon_mathnormal(text, mode, options, classes);
-      fontName = fontData.fontName;
-      fontClasses = [fontData.fontClass];
-    } else if (utils.contains(mathitLetters, text)) {
-      fontName = "Main-Italic";
-      fontClasses = ["mathit"];
-    } else if (isFont) {
-      fontName = fontMap[fontOrFamily].fontName;
-      fontClasses = [fontOrFamily];
-    } else {
-      fontName = retrieveTextFontName(fontOrFamily, options.fontWeight, options.fontShape);
-      fontClasses = [fontOrFamily, options.fontWeight, options.fontShape];
-    }
-
-    if (buildCommon_lookupSymbol(text, fontName, mode).metrics) {
-      return buildCommon_makeSymbol(text, fontName, mode, options, classes.concat(fontClasses));
-    } else if (ligatures.hasOwnProperty(text) && fontName.substr(0, 10) === "Typewriter") {
-      // Deconstruct ligatures in monospace fonts (\texttt, \tt).
-      var parts = [];
-
-      for (var i = 0; i < text.length; i++) {
-        parts.push(buildCommon_makeSymbol(text[i], fontName, mode, options, classes.concat(fontClasses)));
-      }
-
-      return buildCommon_makeFragment(parts);
-    }
-  } // Makes a symbol in the default font for mathords and textords.
-
-
-  if (type === "mathord") {
-    var fontLookup = buildCommon_mathdefault(text, mode, options, classes);
-    return buildCommon_makeSymbol(text, fontLookup.fontName, mode, options, classes.concat([fontLookup.fontClass]));
-  } else if (type === "textord") {
-    var font = src_symbols[mode][text] && src_symbols[mode][text].font;
-
-    if (font === "ams") {
-      var _fontName = retrieveTextFontName("amsrm", options.fontWeight, options.fontShape);
-
-      return buildCommon_makeSymbol(text, _fontName, mode, options, classes.concat("amsrm", options.fontWeight, options.fontShape));
-    } else if (font === "main" || !font) {
-      var _fontName2 = retrieveTextFontName("textrm", options.fontWeight, options.fontShape);
-
-      return buildCommon_makeSymbol(text, _fontName2, mode, options, classes.concat(options.fontWeight, options.fontShape));
-    } else {
-      // fonts added by plugins
-      var _fontName3 = retrieveTextFontName(font, options.fontWeight, options.fontShape); // We add font name as a css class
-
-
-      return buildCommon_makeSymbol(text, _fontName3, mode, options, classes.concat(_fontName3, options.fontWeight, options.fontShape));
-    }
-  } else {
-    throw new Error("unexpected type: " + type + " in makeOrd");
-  }
-};
-/**
- * Returns true if subsequent symbolNodes have the same classes, skew, maxFont,
- * and styles.
- */
-
-
-var buildCommon_canCombine = function canCombine(prev, next) {
-  if (createClass(prev.classes) !== createClass(next.classes) || prev.skew !== next.skew || prev.maxFontSize !== next.maxFontSize) {
-    return false;
-  }
-
-  for (var style in prev.style) {
-    if (prev.style.hasOwnProperty(style) && prev.style[style] !== next.style[style]) {
-      return false;
-    }
-  }
-
-  for (var _style in next.style) {
-    if (next.style.hasOwnProperty(_style) && prev.style[_style] !== next.style[_style]) {
-      return false;
-    }
-  }
-
-  return true;
-};
-/**
- * Combine consequetive domTree.symbolNodes into a single symbolNode.
- * Note: this function mutates the argument.
- */
-
-
-var buildCommon_tryCombineChars = function tryCombineChars(chars) {
-  for (var i = 0; i < chars.length - 1; i++) {
-    var prev = chars[i];
-    var next = chars[i + 1];
-
-    if (prev instanceof domTree_SymbolNode && next instanceof domTree_SymbolNode && buildCommon_canCombine(prev, next)) {
-      prev.text += next.text;
-      prev.height = Math.max(prev.height, next.height);
-      prev.depth = Math.max(prev.depth, next.depth); // Use the last character's italic correction since we use
-      // it to add padding to the right of the span created from
-      // the combined characters.
-
-      prev.italic = next.italic;
-      chars.splice(i + 1, 1);
-      i--;
-    }
-  }
-
-  return chars;
-};
-/**
- * Calculate the height, depth, and maxFontSize of an element based on its
- * children.
- */
-
-
-var sizeElementFromChildren = function sizeElementFromChildren(elem) {
-  var height = 0;
-  var depth = 0;
-  var maxFontSize = 0;
-
-  for (var i = 0; i < elem.children.length; i++) {
-    var child = elem.children[i];
-
-    if (child.height > height) {
-      height = child.height;
-    }
-
-    if (child.depth > depth) {
-      depth = child.depth;
-    }
-
-    if (child.maxFontSize > maxFontSize) {
-      maxFontSize = child.maxFontSize;
-    }
-  }
-
-  elem.height = height;
-  elem.depth = depth;
-  elem.maxFontSize = maxFontSize;
-};
-/**
- * Makes a span with the given list of classes, list of children, and options.
- *
- * TODO(#953): Ensure that `options` is always provided (currently some call
- * sites don't pass it) and make the type below mandatory.
- * TODO: add a separate argument for math class (e.g. `mop`, `mbin`), which
- * should if present come first in `classes`.
- */
-
-
-var buildCommon_makeSpan = function makeSpan(classes, children, options, style) {
-  var span = new domTree_Span(classes, children, options, style);
-  sizeElementFromChildren(span);
-  return span;
-}; // SVG one is simpler -- doesn't require height, depth, max-font setting.
-// This is also a separate method for typesafety.
-
-
-var buildCommon_makeSvgSpan = function makeSvgSpan(classes, children, options, style) {
-  return new domTree_Span(classes, children, options, style);
-};
-
-var makeLineSpan = function makeLineSpan(className, options, thickness) {
-  var line = buildCommon_makeSpan([className], [], options);
-  line.height = Math.max(thickness || options.fontMetrics().defaultRuleThickness, options.minRuleThickness);
-  line.style.borderBottomWidth = line.height + "em";
-  line.maxFontSize = 1.0;
-  return line;
-};
-/**
- * Makes an anchor with the given href, list of classes, list of children,
- * and options.
- */
-
-
-var buildCommon_makeAnchor = function makeAnchor(href, classes, children, options) {
-  var anchor = new domTree_Anchor(href, classes, children, options);
-  sizeElementFromChildren(anchor);
-  return anchor;
-};
-/**
- * Makes a document fragment with the given list of children.
- */
-
-
-var buildCommon_makeFragment = function makeFragment(children) {
-  var fragment = new tree_DocumentFragment(children);
-  sizeElementFromChildren(fragment);
-  return fragment;
-};
-/**
- * Wraps group in a span if it's a document fragment, allowing to apply classes
- * and styles
- */
-
-
-var buildCommon_wrapFragment = function wrapFragment(group, options) {
-  if (group instanceof tree_DocumentFragment) {
-    return buildCommon_makeSpan([], [group], options);
-  }
-
-  return group;
-}; // These are exact object types to catch typos in the names of the optional fields.
-
-
-// Computes the updated `children` list and the overall depth.
-//
-// This helper function for makeVList makes it easier to enforce type safety by
-// allowing early exits (returns) in the logic.
-var getVListChildrenAndDepth = function getVListChildrenAndDepth(params) {
-  if (params.positionType === "individualShift") {
-    var oldChildren = params.children;
-    var children = [oldChildren[0]]; // Add in kerns to the list of params.children to get each element to be
-    // shifted to the correct specified shift
-
-    var _depth = -oldChildren[0].shift - oldChildren[0].elem.depth;
-
-    var currPos = _depth;
-
-    for (var i = 1; i < oldChildren.length; i++) {
-      var diff = -oldChildren[i].shift - currPos - oldChildren[i].elem.depth;
-      var size = diff - (oldChildren[i - 1].elem.height + oldChildren[i - 1].elem.depth);
-      currPos = currPos + diff;
-      children.push({
-        type: "kern",
-        size: size
-      });
-      children.push(oldChildren[i]);
-    }
-
-    return {
-      children: children,
-      depth: _depth
-    };
-  }
-
-  var depth;
-
-  if (params.positionType === "top") {
-    // We always start at the bottom, so calculate the bottom by adding up
-    // all the sizes
-    var bottom = params.positionData;
-
-    for (var _i = 0; _i < params.children.length; _i++) {
-      var child = params.children[_i];
-      bottom -= child.type === "kern" ? child.size : child.elem.height + child.elem.depth;
-    }
-
-    depth = bottom;
-  } else if (params.positionType === "bottom") {
-    depth = -params.positionData;
-  } else {
-    var firstChild = params.children[0];
-
-    if (firstChild.type !== "elem") {
-      throw new Error('First child must have type "elem".');
-    }
-
-    if (params.positionType === "shift") {
-      depth = -firstChild.elem.depth - params.positionData;
-    } else if (params.positionType === "firstBaseline") {
-      depth = -firstChild.elem.depth;
-    } else {
-      throw new Error("Invalid positionType " + params.positionType + ".");
-    }
-  }
-
-  return {
-    children: params.children,
-    depth: depth
-  };
-};
-/**
- * Makes a vertical list by stacking elements and kerns on top of each other.
- * Allows for many different ways of specifying the positioning method.
- *
- * See VListParam documentation above.
- */
-
-
-var buildCommon_makeVList = function makeVList(params, options) {
-  var _getVListChildrenAndD = getVListChildrenAndDepth(params),
-      children = _getVListChildrenAndD.children,
-      depth = _getVListChildrenAndD.depth; // Create a strut that is taller than any list item. The strut is added to
-  // each item, where it will determine the item's baseline. Since it has
-  // `overflow:hidden`, the strut's top edge will sit on the item's line box's
-  // top edge and the strut's bottom edge will sit on the item's baseline,
-  // with no additional line-height spacing. This allows the item baseline to
-  // be positioned precisely without worrying about font ascent and
-  // line-height.
-
-
-  var pstrutSize = 0;
-
-  for (var i = 0; i < children.length; i++) {
-    var child = children[i];
-
-    if (child.type === "elem") {
-      var elem = child.elem;
-      pstrutSize = Math.max(pstrutSize, elem.maxFontSize, elem.height);
-    }
-  }
-
-  pstrutSize += 2;
-  var pstrut = buildCommon_makeSpan(["pstrut"], []);
-  pstrut.style.height = pstrutSize + "em"; // Create a new list of actual children at the correct offsets
-
-  var realChildren = [];
-  var minPos = depth;
-  var maxPos = depth;
-  var currPos = depth;
-
-  for (var _i2 = 0; _i2 < children.length; _i2++) {
-    var _child = children[_i2];
-
-    if (_child.type === "kern") {
-      currPos += _child.size;
-    } else {
-      var _elem = _child.elem;
-      var classes = _child.wrapperClasses || [];
-      var style = _child.wrapperStyle || {};
-      var childWrap = buildCommon_makeSpan(classes, [pstrut, _elem], undefined, style);
-      childWrap.style.top = -pstrutSize - currPos - _elem.depth + "em";
-
-      if (_child.marginLeft) {
-        childWrap.style.marginLeft = _child.marginLeft;
-      }
-
-      if (_child.marginRight) {
-        childWrap.style.marginRight = _child.marginRight;
-      }
-
-      realChildren.push(childWrap);
-      currPos += _elem.height + _elem.depth;
-    }
-
-    minPos = Math.min(minPos, currPos);
-    maxPos = Math.max(maxPos, currPos);
-  } // The vlist contents go in a table-cell with `vertical-align:bottom`.
-  // This cell's bottom edge will determine the containing table's baseline
-  // without overly expanding the containing line-box.
-
-
-  var vlist = buildCommon_makeSpan(["vlist"], realChildren);
-  vlist.style.height = maxPos + "em"; // A second row is used if necessary to represent the vlist's depth.
-
-  var rows;
-
-  if (minPos < 0) {
-    // We will define depth in an empty span with display: table-cell.
-    // It should render with the height that we define. But Chrome, in
-    // contenteditable mode only, treats that span as if it contains some
-    // text content. And that min-height over-rides our desired height.
-    // So we put another empty span inside the depth strut span.
-    var emptySpan = buildCommon_makeSpan([], []);
-    var depthStrut = buildCommon_makeSpan(["vlist"], [emptySpan]);
-    depthStrut.style.height = -minPos + "em"; // Safari wants the first row to have inline content; otherwise it
-    // puts the bottom of the *second* row on the baseline.
-
-    var topStrut = buildCommon_makeSpan(["vlist-s"], [new domTree_SymbolNode("\u200B")]);
-    rows = [buildCommon_makeSpan(["vlist-r"], [vlist, topStrut]), buildCommon_makeSpan(["vlist-r"], [depthStrut])];
-  } else {
-    rows = [buildCommon_makeSpan(["vlist-r"], [vlist])];
-  }
-
-  var vtable = buildCommon_makeSpan(["vlist-t"], rows);
-
-  if (rows.length === 2) {
-    vtable.classes.push("vlist-t2");
-  }
-
-  vtable.height = maxPos;
-  vtable.depth = -minPos;
-  return vtable;
-}; // Glue is a concept from TeX which is a flexible space between elements in
-// either a vertical or horizontal list. In KaTeX, at least for now, it's
-// static space between elements in a horizontal layout.
-
-
-var buildCommon_makeGlue = function makeGlue(measurement, options) {
-  // Make an empty span for the space
-  var rule = buildCommon_makeSpan(["mspace"], [], options);
-  var size = units_calculateSize(measurement, options);
-  rule.style.marginRight = size + "em";
-  return rule;
-}; // Takes font options, and returns the appropriate fontLookup name
-
-
-var retrieveTextFontName = function retrieveTextFontName(fontFamily, fontWeight, fontShape) {
-  var baseFontName = "";
-
-  switch (fontFamily) {
-    case "amsrm":
-      baseFontName = "AMS";
-      break;
-
-    case "textrm":
-      baseFontName = "Main";
-      break;
-
-    case "textsf":
-      baseFontName = "SansSerif";
-      break;
-
-    case "texttt":
-      baseFontName = "Typewriter";
-      break;
-
-    default:
-      baseFontName = fontFamily;
-    // use fonts added by a plugin
-  }
-
-  var fontStylesName;
-
-  if (fontWeight === "textbf" && fontShape === "textit") {
-    fontStylesName = "BoldItalic";
-  } else if (fontWeight === "textbf") {
-    fontStylesName = "Bold";
-  } else if (fontWeight === "textit") {
-    fontStylesName = "Italic";
-  } else {
-    fontStylesName = "Regular";
-  }
-
-  return baseFontName + "-" + fontStylesName;
-};
-/**
- * Maps TeX font commands to objects containing:
- * - variant: string used for "mathvariant" attribute in buildMathML.js
- * - fontName: the "style" parameter to fontMetrics.getCharacterMetrics
- */
-// A map between tex font commands an MathML mathvariant attribute values
-
-
-var fontMap = {
-  // styles
-  "mathbf": {
-    variant: "bold",
-    fontName: "Main-Bold"
-  },
-  "mathrm": {
-    variant: "normal",
-    fontName: "Main-Regular"
-  },
-  "textit": {
-    variant: "italic",
-    fontName: "Main-Italic"
-  },
-  "mathit": {
-    variant: "italic",
-    fontName: "Main-Italic"
-  },
-  // Default math font, "mathnormal" and "boldsymbol" are missing because they
-  // require the use of several fonts: Main-Italic and Math-Italic for default
-  // math font, Main-Italic, Math-Italic, Caligraphic for "mathnormal", and
-  // Math-BoldItalic and Main-Bold for "boldsymbol".  This is handled by a
-  // special case in makeOrd which ends up calling mathdefault, mathnormal,
-  // and boldsymbol.
-  // families
-  "mathbb": {
-    variant: "double-struck",
-    fontName: "AMS-Regular"
-  },
-  "mathcal": {
-    variant: "script",
-    fontName: "Caligraphic-Regular"
-  },
-  "mathfrak": {
-    variant: "fraktur",
-    fontName: "Fraktur-Regular"
-  },
-  "mathscr": {
-    variant: "script",
-    fontName: "Script-Regular"
-  },
-  "mathsf": {
-    variant: "sans-serif",
-    fontName: "SansSerif-Regular"
-  },
-  "mathtt": {
-    variant: "monospace",
-    fontName: "Typewriter-Regular"
-  }
-};
-var svgData = {
-  //   path, width, height
-  vec: ["vec", 0.471, 0.714],
-  // values from the font glyph
-  oiintSize1: ["oiintSize1", 0.957, 0.499],
-  // oval to overlay the integrand
-  oiintSize2: ["oiintSize2", 1.472, 0.659],
-  oiiintSize1: ["oiiintSize1", 1.304, 0.499],
-  oiiintSize2: ["oiiintSize2", 1.98, 0.659]
-};
-
-var buildCommon_staticSvg = function staticSvg(value, options) {
-  // Create a span with inline SVG for the element.
-  var _svgData$value = svgData[value],
-      pathName = _svgData$value[0],
-      width = _svgData$value[1],
-      height = _svgData$value[2];
-  var path = new domTree_PathNode(pathName);
-  var svgNode = new SvgNode([path], {
-    "width": width + "em",
-    "height": height + "em",
-    // Override CSS rule `.katex svg { width: 100% }`
-    "style": "width:" + width + "em",
-    "viewBox": "0 0 " + 1000 * width + " " + 1000 * height,
-    "preserveAspectRatio": "xMinYMin"
-  });
-  var span = buildCommon_makeSvgSpan(["overlay"], [svgNode], options);
-  span.height = height;
-  span.style.height = height + "em";
-  span.style.width = width + "em";
-  return span;
-};
-
-/* harmony default export */ var buildCommon = ({
-  fontMap: fontMap,
-  makeSymbol: buildCommon_makeSymbol,
-  mathsym: buildCommon_mathsym,
-  makeSpan: buildCommon_makeSpan,
-  makeSvgSpan: buildCommon_makeSvgSpan,
-  makeLineSpan: makeLineSpan,
-  makeAnchor: buildCommon_makeAnchor,
-  makeFragment: buildCommon_makeFragment,
-  wrapFragment: buildCommon_wrapFragment,
-  makeVList: buildCommon_makeVList,
-  makeOrd: buildCommon_makeOrd,
-  makeGlue: buildCommon_makeGlue,
-  staticSvg: buildCommon_staticSvg,
-  svgData: svgData,
-  tryCombineChars: buildCommon_tryCombineChars
-});
-// CONCATENATED MODULE: ./src/parseNode.js
-
-
-/**
- * Asserts that the node is of the given type and returns it with stricter
- * typing. Throws if the node's type does not match.
- */
-function assertNodeType(node, type) {
-  var typedNode = checkNodeType(node, type);
-
-  if (!typedNode) {
-    throw new Error("Expected node of type " + type + ", but got " + (node ? "node of type " + node.type : String(node)));
-  } // $FlowFixMe: Unsure why.
-
-
-  return typedNode;
-}
-/**
- * Returns the node more strictly typed iff it is of the given type. Otherwise,
- * returns null.
- */
-
-function checkNodeType(node, type) {
-  if (node && node.type === type) {
-    // The definition of ParseNode<TYPE> doesn't communicate to flow that
-    // `type: TYPE` (as that's not explicitly mentioned anywhere), though that
-    // happens to be true for all our value types.
-    // $FlowFixMe
-    return node;
-  }
-
-  return null;
-}
-/**
- * Asserts that the node is of the given type and returns it with stricter
- * typing. Throws if the node's type does not match.
- */
-
-function assertAtomFamily(node, family) {
-  var typedNode = checkAtomFamily(node, family);
-
-  if (!typedNode) {
-    throw new Error("Expected node of type \"atom\" and family \"" + family + "\", but got " + (node ? node.type === "atom" ? "atom of family " + node.family : "node of type " + node.type : String(node)));
-  }
-
-  return typedNode;
-}
-/**
- * Returns the node more strictly typed iff it is of the given type. Otherwise,
- * returns null.
- */
-
-function checkAtomFamily(node, family) {
-  return node && node.type === "atom" && node.family === family ? node : null;
-}
-/**
- * Returns the node more strictly typed iff it is of the given type. Otherwise,
- * returns null.
- */
-
-function assertSymbolNodeType(node) {
-  var typedNode = checkSymbolNodeType(node);
-
-  if (!typedNode) {
-    throw new Error("Expected node of symbol group type, but got " + (node ? "node of type " + node.type : String(node)));
-  }
-
-  return typedNode;
-}
-/**
- * Returns the node more strictly typed iff it is of the given type. Otherwise,
- * returns null.
- */
-
-function checkSymbolNodeType(node) {
-  if (node && (node.type === "atom" || NON_ATOMS.hasOwnProperty(node.type))) {
-    // $FlowFixMe
-    return node;
-  }
-
-  return null;
-}
-// CONCATENATED MODULE: ./src/spacingData.js
-/**
- * Describes spaces between different classes of atoms.
- */
-var thinspace = {
-  number: 3,
-  unit: "mu"
-};
-var mediumspace = {
-  number: 4,
-  unit: "mu"
-};
-var thickspace = {
-  number: 5,
-  unit: "mu"
-}; // Making the type below exact with all optional fields doesn't work due to
-// - https://github.com/facebook/flow/issues/4582
-// - https://github.com/facebook/flow/issues/5688
-// However, since *all* fields are optional, $Shape<> works as suggested in 5688
-// above.
-
-// Spacing relationships for display and text styles
-var spacings = {
-  mord: {
-    mop: thinspace,
-    mbin: mediumspace,
-    mrel: thickspace,
-    minner: thinspace
-  },
-  mop: {
-    mord: thinspace,
-    mop: thinspace,
-    mrel: thickspace,
-    minner: thinspace
-  },
-  mbin: {
-    mord: mediumspace,
-    mop: mediumspace,
-    mopen: mediumspace,
-    minner: mediumspace
-  },
-  mrel: {
-    mord: thickspace,
-    mop: thickspace,
-    mopen: thickspace,
-    minner: thickspace
-  },
-  mopen: {},
-  mclose: {
-    mop: thinspace,
-    mbin: mediumspace,
-    mrel: thickspace,
-    minner: thinspace
-  },
-  mpunct: {
-    mord: thinspace,
-    mop: thinspace,
-    mrel: thickspace,
-    mopen: thinspace,
-    mclose: thinspace,
-    mpunct: thinspace,
-    minner: thinspace
-  },
-  minner: {
-    mord: thinspace,
-    mop: thinspace,
-    mbin: mediumspace,
-    mrel: thickspace,
-    mopen: thinspace,
-    mpunct: thinspace,
-    minner: thinspace
-  }
-}; // Spacing relationships for script and scriptscript styles
-
-var tightSpacings = {
-  mord: {
-    mop: thinspace
-  },
-  mop: {
-    mord: thinspace,
-    mop: thinspace
-  },
-  mbin: {},
-  mrel: {},
-  mopen: {},
-  mclose: {
-    mop: thinspace
-  },
-  mpunct: {},
-  minner: {
-    mop: thinspace
-  }
-};
-// CONCATENATED MODULE: ./src/defineFunction.js
-
-
-/**
- * All registered functions.
- * `functions.js` just exports this same dictionary again and makes it public.
- * `Parser.js` requires this dictionary.
- */
-var _functions = {};
-/**
- * All HTML builders. Should be only used in the `define*` and the `build*ML`
- * functions.
- */
-
-var _htmlGroupBuilders = {};
-/**
- * All MathML builders. Should be only used in the `define*` and the `build*ML`
- * functions.
- */
-
-var _mathmlGroupBuilders = {};
-function defineFunction(_ref) {
-  var type = _ref.type,
-      names = _ref.names,
-      props = _ref.props,
-      handler = _ref.handler,
-      htmlBuilder = _ref.htmlBuilder,
-      mathmlBuilder = _ref.mathmlBuilder;
-  // Set default values of functions
-  var data = {
-    type: type,
-    numArgs: props.numArgs,
-    argTypes: props.argTypes,
-    greediness: props.greediness === undefined ? 1 : props.greediness,
-    allowedInText: !!props.allowedInText,
-    allowedInMath: props.allowedInMath === undefined ? true : props.allowedInMath,
-    numOptionalArgs: props.numOptionalArgs || 0,
-    infix: !!props.infix,
-    handler: handler
-  };
-
-  for (var i = 0; i < names.length; ++i) {
-    _functions[names[i]] = data;
-  }
-
-  if (type) {
-    if (htmlBuilder) {
-      _htmlGroupBuilders[type] = htmlBuilder;
-    }
-
-    if (mathmlBuilder) {
-      _mathmlGroupBuilders[type] = mathmlBuilder;
-    }
-  }
-}
-/**
- * Use this to register only the HTML and MathML builders for a function (e.g.
- * if the function's ParseNode is generated in Parser.js rather than via a
- * stand-alone handler provided to `defineFunction`).
- */
-
-function defineFunctionBuilders(_ref2) {
-  var type = _ref2.type,
-      htmlBuilder = _ref2.htmlBuilder,
-      mathmlBuilder = _ref2.mathmlBuilder;
-  defineFunction({
-    type: type,
-    names: [],
-    props: {
-      numArgs: 0
-    },
-    handler: function handler() {
-      throw new Error('Should never be called.');
-    },
-    htmlBuilder: htmlBuilder,
-    mathmlBuilder: mathmlBuilder
-  });
-} // Since the corresponding buildHTML/buildMathML function expects a
-// list of elements, we normalize for different kinds of arguments
-
-var defineFunction_ordargument = function ordargument(arg) {
-  var node = checkNodeType(arg, "ordgroup");
-  return node ? node.body : [arg];
-};
-// CONCATENATED MODULE: ./src/buildHTML.js
-/**
- * This file does the main work of building a domTree structure from a parse
- * tree. The entry point is the `buildHTML` function, which takes a parse tree.
- * Then, the buildExpression, buildGroup, and various groupBuilders functions
- * are called, to produce a final HTML tree.
- */
-
-
-
-
-
-
-
-
-
-var buildHTML_makeSpan = buildCommon.makeSpan; // Binary atoms (first class `mbin`) change into ordinary atoms (`mord`)
-// depending on their surroundings. See TeXbook pg. 442-446, Rules 5 and 6,
-// and the text before Rule 19.
-
-var binLeftCanceller = ["leftmost", "mbin", "mopen", "mrel", "mop", "mpunct"];
-var binRightCanceller = ["rightmost", "mrel", "mclose", "mpunct"];
-var styleMap = {
-  "display": src_Style.DISPLAY,
-  "text": src_Style.TEXT,
-  "script": src_Style.SCRIPT,
-  "scriptscript": src_Style.SCRIPTSCRIPT
-};
-var DomEnum = {
-  mord: "mord",
-  mop: "mop",
-  mbin: "mbin",
-  mrel: "mrel",
-  mopen: "mopen",
-  mclose: "mclose",
-  mpunct: "mpunct",
-  minner: "minner"
-};
-
-/**
- * Take a list of nodes, build them in order, and return a list of the built
- * nodes. documentFragments are flattened into their contents, so the
- * returned list contains no fragments. `isRealGroup` is true if `expression`
- * is a real group (no atoms will be added on either side), as opposed to
- * a partial group (e.g. one created by \color). `surrounding` is an array
- * consisting type of nodes that will be added to the left and right.
- */
-var buildHTML_buildExpression = function buildExpression(expression, options, isRealGroup, surrounding) {
-  if (surrounding === void 0) {
-    surrounding = [null, null];
-  }
-
-  // Parse expressions into `groups`.
-  var groups = [];
-
-  for (var i = 0; i < expression.length; i++) {
-    var output = buildHTML_buildGroup(expression[i], options);
-
-    if (output instanceof tree_DocumentFragment) {
-      var children = output.children;
-      groups.push.apply(groups, children);
-    } else {
-      groups.push(output);
-    }
-  } // If `expression` is a partial group, let the parent handle spacings
-  // to avoid processing groups multiple times.
-
-
-  if (!isRealGroup) {
-    return groups;
-  }
-
-  var glueOptions = options;
-
-  if (expression.length === 1) {
-    var node = checkNodeType(expression[0], "sizing") || checkNodeType(expression[0], "styling");
-
-    if (!node) {// No match.
-    } else if (node.type === "sizing") {
-      glueOptions = options.havingSize(node.size);
-    } else if (node.type === "styling") {
-      glueOptions = options.havingStyle(styleMap[node.style]);
-    }
-  } // Dummy spans for determining spacings between surrounding atoms.
-  // If `expression` has no atoms on the left or right, class "leftmost"
-  // or "rightmost", respectively, is used to indicate it.
-
-
-  var dummyPrev = buildHTML_makeSpan([surrounding[0] || "leftmost"], [], options);
-  var dummyNext = buildHTML_makeSpan([surrounding[1] || "rightmost"], [], options); // TODO: These code assumes that a node's math class is the first element
-  // of its `classes` array. A later cleanup should ensure this, for
-  // instance by changing the signature of `makeSpan`.
-  // Before determining what spaces to insert, perform bin cancellation.
-  // Binary operators change to ordinary symbols in some contexts.
-
-  traverseNonSpaceNodes(groups, function (node, prev) {
-    var prevType = prev.classes[0];
-    var type = node.classes[0];
-
-    if (prevType === "mbin" && utils.contains(binRightCanceller, type)) {
-      prev.classes[0] = "mord";
-    } else if (type === "mbin" && utils.contains(binLeftCanceller, prevType)) {
-      node.classes[0] = "mord";
-    }
-  }, {
-    node: dummyPrev
-  }, dummyNext);
-  traverseNonSpaceNodes(groups, function (node, prev) {
-    var prevType = getTypeOfDomTree(prev);
-    var type = getTypeOfDomTree(node); // 'mtight' indicates that the node is script or scriptscript style.
-
-    var space = prevType && type ? node.hasClass("mtight") ? tightSpacings[prevType][type] : spacings[prevType][type] : null;
-
-    if (space) {
-      // Insert glue (spacing) after the `prev`.
-      return buildCommon.makeGlue(space, glueOptions);
-    }
-  }, {
-    node: dummyPrev
-  }, dummyNext);
-  return groups;
-}; // Depth-first traverse non-space `nodes`, calling `callback` with the current and
-// previous node as arguments, optionally returning a node to insert after the
-// previous node. `prev` is an object with the previous node and `insertAfter`
-// function to insert after it. `next` is a node that will be added to the right.
-// Used for bin cancellation and inserting spacings.
-
-var traverseNonSpaceNodes = function traverseNonSpaceNodes(nodes, callback, prev, next) {
-  if (next) {
-    // temporarily append the right node, if exists
-    nodes.push(next);
-  }
-
-  var i = 0;
-
-  for (; i < nodes.length; i++) {
-    var node = nodes[i];
-    var partialGroup = buildHTML_checkPartialGroup(node);
-
-    if (partialGroup) {
-      // Recursive DFS
-      // $FlowFixMe: make nodes a $ReadOnlyArray by returning a new array
-      traverseNonSpaceNodes(partialGroup.children, callback, prev);
-      continue;
-    } // Ignore explicit spaces (e.g., \;, \,) when determining what implicit
-    // spacing should go between atoms of different classes
-
-
-    if (node.classes[0] === "mspace") {
-      continue;
-    }
-
-    var result = callback(node, prev.node);
-
-    if (result) {
-      if (prev.insertAfter) {
-        prev.insertAfter(result);
-      } else {
-        // insert at front
-        nodes.unshift(result);
-        i++;
-      }
-    }
-
-    prev.node = node;
-
-    prev.insertAfter = function (index) {
-      return function (n) {
-        nodes.splice(index + 1, 0, n);
-        i++;
-      };
-    }(i);
-  }
-
-  if (next) {
-    nodes.pop();
-  }
-}; // Check if given node is a partial group, i.e., does not affect spacing around.
-
-
-var buildHTML_checkPartialGroup = function checkPartialGroup(node) {
-  if (node instanceof tree_DocumentFragment || node instanceof domTree_Anchor) {
-    return node;
-  }
-
-  return null;
-}; // Return the outermost node of a domTree.
-
-
-var getOutermostNode = function getOutermostNode(node, side) {
-  var partialGroup = buildHTML_checkPartialGroup(node);
-
-  if (partialGroup) {
-    var children = partialGroup.children;
-
-    if (children.length) {
-      if (side === "right") {
-        return getOutermostNode(children[children.length - 1], "right");
-      } else if (side === "left") {
-        return getOutermostNode(children[0], "left");
-      }
-    }
-  }
-
-  return node;
-}; // Return math atom class (mclass) of a domTree.
-// If `side` is given, it will get the type of the outermost node at given side.
-
-
-var getTypeOfDomTree = function getTypeOfDomTree(node, side) {
-  if (!node) {
-    return null;
-  }
-
-  if (side) {
-    node = getOutermostNode(node, side);
-  } // This makes a lot of assumptions as to where the type of atom
-  // appears.  We should do a better job of enforcing this.
-
-
-  return DomEnum[node.classes[0]] || null;
-};
-var makeNullDelimiter = function makeNullDelimiter(options, classes) {
-  var moreClasses = ["nulldelimiter"].concat(options.baseSizingClasses());
-  return buildHTML_makeSpan(classes.concat(moreClasses));
-};
-/**
- * buildGroup is the function that takes a group and calls the correct groupType
- * function for it. It also handles the interaction of size and style changes
- * between parents and children.
- */
-
-var buildHTML_buildGroup = function buildGroup(group, options, baseOptions) {
-  if (!group) {
-    return buildHTML_makeSpan();
-  }
-
-  if (_htmlGroupBuilders[group.type]) {
-    // Call the groupBuilders function
-    var groupNode = _htmlGroupBuilders[group.type](group, options); // If the size changed between the parent and the current group, account
-    // for that size difference.
-
-    if (baseOptions && options.size !== baseOptions.size) {
-      groupNode = buildHTML_makeSpan(options.sizingClasses(baseOptions), [groupNode], options);
-      var multiplier = options.sizeMultiplier / baseOptions.sizeMultiplier;
-      groupNode.height *= multiplier;
-      groupNode.depth *= multiplier;
-    }
-
-    return groupNode;
-  } else {
-    throw new src_ParseError("Got group of unknown type: '" + group.type + "'");
-  }
-};
-/**
- * Combine an array of HTML DOM nodes (e.g., the output of `buildExpression`)
- * into an unbreakable HTML node of class .base, with proper struts to
- * guarantee correct vertical extent.  `buildHTML` calls this repeatedly to
- * make up the entire expression as a sequence of unbreakable units.
- */
-
-function buildHTMLUnbreakable(children, options) {
-  // Compute height and depth of this chunk.
-  var body = buildHTML_makeSpan(["base"], children, options); // Add strut, which ensures that the top of the HTML element falls at
-  // the height of the expression, and the bottom of the HTML element
-  // falls at the depth of the expression.
-  // We used to have separate top and bottom struts, where the bottom strut
-  // would like to use `vertical-align: top`, but in IE 9 this lowers the
-  // baseline of the box to the bottom of this strut (instead of staying in
-  // the normal place) so we use an absolute value for vertical-align instead.
-
-  var strut = buildHTML_makeSpan(["strut"]);
-  strut.style.height = body.height + body.depth + "em";
-  strut.style.verticalAlign = -body.depth + "em";
-  body.children.unshift(strut);
-  return body;
-}
-/**
- * Take an entire parse tree, and build it into an appropriate set of HTML
- * nodes.
- */
-
-
-function buildHTML(tree, options) {
-  // Strip off outer tag wrapper for processing below.
-  var tag = null;
-
-  if (tree.length === 1 && tree[0].type === "tag") {
-    tag = tree[0].tag;
-    tree = tree[0].body;
-  } // Build the expression contained in the tree
-
-
-  var expression = buildHTML_buildExpression(tree, options, true);
-  var children = []; // Create one base node for each chunk between potential line breaks.
-  // The TeXBook [p.173] says "A formula will be broken only after a
-  // relation symbol like $=$ or $<$ or $\rightarrow$, or after a binary
-  // operation symbol like $+$ or $-$ or $\times$, where the relation or
-  // binary operation is on the ``outer level'' of the formula (i.e., not
-  // enclosed in {...} and not part of an \over construction)."
-
-  var parts = [];
-
-  for (var i = 0; i < expression.length; i++) {
-    parts.push(expression[i]);
-
-    if (expression[i].hasClass("mbin") || expression[i].hasClass("mrel") || expression[i].hasClass("allowbreak")) {
-      // Put any post-operator glue on same line as operator.
-      // Watch for \nobreak along the way, and stop at \newline.
-      var nobreak = false;
-
-      while (i < expression.length - 1 && expression[i + 1].hasClass("mspace") && !expression[i + 1].hasClass("newline")) {
-        i++;
-        parts.push(expression[i]);
-
-        if (expression[i].hasClass("nobreak")) {
-          nobreak = true;
-        }
-      } // Don't allow break if \nobreak among the post-operator glue.
-
-
-      if (!nobreak) {
-        children.push(buildHTMLUnbreakable(parts, options));
-        parts = [];
-      }
-    } else if (expression[i].hasClass("newline")) {
-      // Write the line except the newline
-      parts.pop();
-
-      if (parts.length > 0) {
-        children.push(buildHTMLUnbreakable(parts, options));
-        parts = [];
-      } // Put the newline at the top level
-
-
-      children.push(expression[i]);
-    }
-  }
-
-  if (parts.length > 0) {
-    children.push(buildHTMLUnbreakable(parts, options));
-  } // Now, if there was a tag, build it too and append it as a final child.
-
-
-  var tagChild;
-
-  if (tag) {
-    tagChild = buildHTMLUnbreakable(buildHTML_buildExpression(tag, options, true));
-    tagChild.classes = ["tag"];
-    children.push(tagChild);
-  }
-
-  var htmlNode = buildHTML_makeSpan(["katex-html"], children);
-  htmlNode.setAttribute("aria-hidden", "true"); // Adjust the strut of the tag to be the maximum height of all children
-  // (the height of the enclosing htmlNode) for proper vertical alignment.
-
-  if (tagChild) {
-    var strut = tagChild.children[0];
-    strut.style.height = htmlNode.height + htmlNode.depth + "em";
-    strut.style.verticalAlign = -htmlNode.depth + "em";
-  }
-
-  return htmlNode;
-}
-// CONCATENATED MODULE: ./src/mathMLTree.js
-/**
- * These objects store data about MathML nodes. This is the MathML equivalent
- * of the types in domTree.js. Since MathML handles its own rendering, and
- * since we're mainly using MathML to improve accessibility, we don't manage
- * any of the styling state that the plain DOM nodes do.
- *
- * The `toNode` and `toMarkup` functions work simlarly to how they do in
- * domTree.js, creating namespaced DOM nodes and HTML text markup respectively.
- */
-
-
-function newDocumentFragment(children) {
-  return new tree_DocumentFragment(children);
-}
-/**
- * This node represents a general purpose MathML node of any type. The
- * constructor requires the type of node to create (for example, `"mo"` or
- * `"mspace"`, corresponding to `<mo>` and `<mspace>` tags).
- */
-
-var mathMLTree_MathNode =
-/*#__PURE__*/
-function () {
-  function MathNode(type, children) {
-    this.type = void 0;
-    this.attributes = void 0;
-    this.children = void 0;
-    this.type = type;
-    this.attributes = {};
-    this.children = children || [];
-  }
-  /**
-   * Sets an attribute on a MathML node. MathML depends on attributes to convey a
-   * semantic content, so this is used heavily.
-   */
-
-
-  var _proto = MathNode.prototype;
-
-  _proto.setAttribute = function setAttribute(name, value) {
-    this.attributes[name] = value;
-  }
-  /**
-   * Gets an attribute on a MathML node.
-   */
-  ;
-
-  _proto.getAttribute = function getAttribute(name) {
-    return this.attributes[name];
-  }
-  /**
-   * Converts the math node into a MathML-namespaced DOM element.
-   */
-  ;
-
-  _proto.toNode = function toNode() {
-    var node = document.createElementNS("http://www.w3.org/1998/Math/MathML", this.type);
-
-    for (var attr in this.attributes) {
-      if (Object.prototype.hasOwnProperty.call(this.attributes, attr)) {
-        node.setAttribute(attr, this.attributes[attr]);
-      }
-    }
-
-    for (var i = 0; i < this.children.length; i++) {
-      node.appendChild(this.children[i].toNode());
-    }
-
-    return node;
-  }
-  /**
-   * Converts the math node into an HTML markup string.
-   */
-  ;
-
-  _proto.toMarkup = function toMarkup() {
-    var markup = "<" + this.type; // Add the attributes
-
-    for (var attr in this.attributes) {
-      if (Object.prototype.hasOwnProperty.call(this.attributes, attr)) {
-        markup += " " + attr + "=\"";
-        markup += utils.escape(this.attributes[attr]);
-        markup += "\"";
-      }
-    }
-
-    markup += ">";
-
-    for (var i = 0; i < this.children.length; i++) {
-      markup += this.children[i].toMarkup();
-    }
-
-    markup += "</" + this.type + ">";
-    return markup;
-  }
-  /**
-   * Converts the math node into a string, similar to innerText, but escaped.
-   */
-  ;
-
-  _proto.toText = function toText() {
-    return this.children.map(function (child) {
-      return child.toText();
-    }).join("");
-  };
-
-  return MathNode;
-}();
-/**
- * This node represents a piece of text.
- */
-
-var mathMLTree_TextNode =
-/*#__PURE__*/
-function () {
-  function TextNode(text) {
-    this.text = void 0;
-    this.text = text;
-  }
-  /**
-   * Converts the text node into a DOM text node.
-   */
-
-
-  var _proto2 = TextNode.prototype;
-
-  _proto2.toNode = function toNode() {
-    return document.createTextNode(this.text);
-  }
-  /**
-   * Converts the text node into escaped HTML markup
-   * (representing the text itself).
-   */
-  ;
-
-  _proto2.toMarkup = function toMarkup() {
-    return utils.escape(this.toText());
-  }
-  /**
-   * Converts the text node into a string
-   * (representing the text iteself).
-   */
-  ;
-
-  _proto2.toText = function toText() {
-    return this.text;
-  };
-
-  return TextNode;
-}();
-/**
- * This node represents a space, but may render as <mspace.../> or as text,
- * depending on the width.
- */
-
-var SpaceNode =
-/*#__PURE__*/
-function () {
-  /**
-   * Create a Space node with width given in CSS ems.
-   */
-  function SpaceNode(width) {
-    this.width = void 0;
-    this.character = void 0;
-    this.width = width; // See https://www.w3.org/TR/2000/WD-MathML2-20000328/chapter6.html
-    // for a table of space-like characters.  We use Unicode
-    // representations instead of &LongNames; as it's not clear how to
-    // make the latter via document.createTextNode.
-
-    if (width >= 0.05555 && width <= 0.05556) {
-      this.character = "\u200A"; // &VeryThinSpace;
-    } else if (width >= 0.1666 && width <= 0.1667) {
-      this.character = "\u2009"; // &ThinSpace;
-    } else if (width >= 0.2222 && width <= 0.2223) {
-      this.character = "\u2005"; // &MediumSpace;
-    } else if (width >= 0.2777 && width <= 0.2778) {
-      this.character = "\u2005\u200A"; // &ThickSpace;
-    } else if (width >= -0.05556 && width <= -0.05555) {
-      this.character = "\u200A\u2063"; // &NegativeVeryThinSpace;
-    } else if (width >= -0.1667 && width <= -0.1666) {
-      this.character = "\u2009\u2063"; // &NegativeThinSpace;
-    } else if (width >= -0.2223 && width <= -0.2222) {
-      this.character = "\u205F\u2063"; // &NegativeMediumSpace;
-    } else if (width >= -0.2778 && width <= -0.2777) {
-      this.character = "\u2005\u2063"; // &NegativeThickSpace;
-    } else {
-      this.character = null;
-    }
-  }
-  /**
-   * Converts the math node into a MathML-namespaced DOM element.
-   */
-
-
-  var _proto3 = SpaceNode.prototype;
-
-  _proto3.toNode = function toNode() {
-    if (this.character) {
-      return document.createTextNode(this.character);
-    } else {
-      var node = document.createElementNS("http://www.w3.org/1998/Math/MathML", "mspace");
-      node.setAttribute("width", this.width + "em");
-      return node;
-    }
-  }
-  /**
-   * Converts the math node into an HTML markup string.
-   */
-  ;
-
-  _proto3.toMarkup = function toMarkup() {
-    if (this.character) {
-      return "<mtext>" + this.character + "</mtext>";
-    } else {
-      return "<mspace width=\"" + this.width + "em\"/>";
-    }
-  }
-  /**
-   * Converts the math node into a string, similar to innerText.
-   */
-  ;
-
-  _proto3.toText = function toText() {
-    if (this.character) {
-      return this.character;
-    } else {
-      return " ";
-    }
-  };
-
-  return SpaceNode;
-}();
-
-/* harmony default export */ var mathMLTree = ({
-  MathNode: mathMLTree_MathNode,
-  TextNode: mathMLTree_TextNode,
-  SpaceNode: SpaceNode,
-  newDocumentFragment: newDocumentFragment
-});
-// CONCATENATED MODULE: ./src/buildMathML.js
-/**
- * This file converts a parse tree into a cooresponding MathML tree. The main
- * entry point is the `buildMathML` function, which takes a parse tree from the
- * parser.
- */
-
-
-
-
-
-
-
-
-
-/**
- * Takes a symbol and converts it into a MathML text node after performing
- * optional replacement from symbols.js.
- */
-var buildMathML_makeText = function makeText(text, mode, options) {
-  if (src_symbols[mode][text] && src_symbols[mode][text].replace && text.charCodeAt(0) !== 0xD835 && !(ligatures.hasOwnProperty(text) && options && (options.fontFamily && options.fontFamily.substr(4, 2) === "tt" || options.font && options.font.substr(4, 2) === "tt"))) {
-    text = src_symbols[mode][text].replace;
-  }
-
-  return new mathMLTree.TextNode(text);
-};
-/**
- * Wrap the given array of nodes in an <mrow> node if needed, i.e.,
- * unless the array has length 1.  Always returns a single node.
- */
-
-var buildMathML_makeRow = function makeRow(body) {
-  if (body.length === 1) {
-    return body[0];
-  } else {
-    return new mathMLTree.MathNode("mrow", body);
-  }
-};
-/**
- * Returns the math variant as a string or null if none is required.
- */
-
-var buildMathML_getVariant = function getVariant(group, options) {
-  // Handle \text... font specifiers as best we can.
-  // MathML has a limited list of allowable mathvariant specifiers; see
-  // https://www.w3.org/TR/MathML3/chapter3.html#presm.commatt
-  if (options.fontFamily === "texttt") {
-    return "monospace";
-  } else if (options.fontFamily === "textsf") {
-    if (options.fontShape === "textit" && options.fontWeight === "textbf") {
-      return "sans-serif-bold-italic";
-    } else if (options.fontShape === "textit") {
-      return "sans-serif-italic";
-    } else if (options.fontWeight === "textbf") {
-      return "bold-sans-serif";
-    } else {
-      return "sans-serif";
-    }
-  } else if (options.fontShape === "textit" && options.fontWeight === "textbf") {
-    return "bold-italic";
-  } else if (options.fontShape === "textit") {
-    return "italic";
-  } else if (options.fontWeight === "textbf") {
-    return "bold";
-  }
-
-  var font = options.font;
-
-  if (!font || font === "mathnormal") {
-    return null;
-  }
-
-  var mode = group.mode;
-
-  if (font === "mathit") {
-    return "italic";
-  } else if (font === "boldsymbol") {
-    return "bold-italic";
-  } else if (font === "mathbf") {
-    return "bold";
-  } else if (font === "mathbb") {
-    return "double-struck";
-  } else if (font === "mathfrak") {
-    return "fraktur";
-  } else if (font === "mathscr" || font === "mathcal") {
-    // MathML makes no distinction between script and caligrahpic
-    return "script";
-  } else if (font === "mathsf") {
-    return "sans-serif";
-  } else if (font === "mathtt") {
-    return "monospace";
-  }
-
-  var text = group.text;
-
-  if (utils.contains(["\\imath", "\\jmath"], text)) {
-    return null;
-  }
-
-  if (src_symbols[mode][text] && src_symbols[mode][text].replace) {
-    text = src_symbols[mode][text].replace;
-  }
-
-  var fontName = buildCommon.fontMap[font].fontName;
-
-  if (getCharacterMetrics(text, fontName, mode)) {
-    return buildCommon.fontMap[font].variant;
-  }
-
-  return null;
-};
-/**
- * Takes a list of nodes, builds them, and returns a list of the generated
- * MathML nodes.  Also combine consecutive <mtext> outputs into a single
- * <mtext> tag.
- */
-
-var buildMathML_buildExpression = function buildExpression(expression, options, isOrdgroup) {
-  if (expression.length === 1) {
-    var group = buildMathML_buildGroup(expression[0], options);
-
-    if (isOrdgroup && group instanceof mathMLTree_MathNode && group.type === "mo") {
-      // When TeX writers want to suppress spacing on an operator,
-      // they often put the operator by itself inside braces.
-      group.setAttribute("lspace", "0em");
-      group.setAttribute("rspace", "0em");
-    }
-
-    return [group];
-  }
-
-  var groups = [];
-  var lastGroup;
-
-  for (var i = 0; i < expression.length; i++) {
-    var _group = buildMathML_buildGroup(expression[i], options);
-
-    if (_group instanceof mathMLTree_MathNode && lastGroup instanceof mathMLTree_MathNode) {
-      // Concatenate adjacent <mtext>s
-      if (_group.type === 'mtext' && lastGroup.type === 'mtext' && _group.getAttribute('mathvariant') === lastGroup.getAttribute('mathvariant')) {
-        var _lastGroup$children;
-
-        (_lastGroup$children = lastGroup.children).push.apply(_lastGroup$children, _group.children);
-
-        continue; // Concatenate adjacent <mn>s
-      } else if (_group.type === 'mn' && lastGroup.type === 'mn') {
-        var _lastGroup$children2;
-
-        (_lastGroup$children2 = lastGroup.children).push.apply(_lastGroup$children2, _group.children);
-
-        continue; // Concatenate <mn>...</mn> followed by <mi>.</mi>
-      } else if (_group.type === 'mi' && _group.children.length === 1 && lastGroup.type === 'mn') {
-        var child = _group.children[0];
-
-        if (child instanceof mathMLTree_TextNode && child.text === '.') {
-          var _lastGroup$children3;
-
-          (_lastGroup$children3 = lastGroup.children).push.apply(_lastGroup$children3, _group.children);
-
-          continue;
-        }
-      } else if (lastGroup.type === 'mi' && lastGroup.children.length === 1) {
-        var lastChild = lastGroup.children[0];
-
-        if (lastChild instanceof mathMLTree_TextNode && lastChild.text === "\u0338" && (_group.type === 'mo' || _group.type === 'mi' || _group.type === 'mn')) {
-          var _child = _group.children[0];
-
-          if (_child instanceof mathMLTree_TextNode && _child.text.length > 0) {
-            // Overlay with combining character long solidus
-            _child.text = _child.text.slice(0, 1) + "\u0338" + _child.text.slice(1);
-            groups.pop();
-          }
-        }
-      }
-    }
-
-    groups.push(_group);
-    lastGroup = _group;
-  }
-
-  return groups;
-};
-/**
- * Equivalent to buildExpression, but wraps the elements in an <mrow>
- * if there's more than one.  Returns a single node instead of an array.
- */
-
-var buildExpressionRow = function buildExpressionRow(expression, options, isOrdgroup) {
-  return buildMathML_makeRow(buildMathML_buildExpression(expression, options, isOrdgroup));
-};
-/**
- * Takes a group from the parser and calls the appropriate groupBuilders function
- * on it to produce a MathML node.
- */
-
-var buildMathML_buildGroup = function buildGroup(group, options) {
-  if (!group) {
-    return new mathMLTree.MathNode("mrow");
-  }
-
-  if (_mathmlGroupBuilders[group.type]) {
-    // Call the groupBuilders function
-    var result = _mathmlGroupBuilders[group.type](group, options);
-    return result;
-  } else {
-    throw new src_ParseError("Got group of unknown type: '" + group.type + "'");
-  }
-};
-/**
- * Takes a full parse tree and settings and builds a MathML representation of
- * it. In particular, we put the elements from building the parse tree into a
- * <semantics> tag so we can also include that TeX source as an annotation.
- *
- * Note that we actually return a domTree element with a `<math>` inside it so
- * we can do appropriate styling.
- */
-
-function buildMathML(tree, texExpression, options, forMathmlOnly) {
-  var expression = buildMathML_buildExpression(tree, options); // Wrap up the expression in an mrow so it is presented in the semantics
-  // tag correctly, unless it's a single <mrow> or <mtable>.
-
-  var wrapper;
-
-  if (expression.length === 1 && expression[0] instanceof mathMLTree_MathNode && utils.contains(["mrow", "mtable"], expression[0].type)) {
-    wrapper = expression[0];
-  } else {
-    wrapper = new mathMLTree.MathNode("mrow", expression);
-  } // Build a TeX annotation of the source
-
-
-  var annotation = new mathMLTree.MathNode("annotation", [new mathMLTree.TextNode(texExpression)]);
-  annotation.setAttribute("encoding", "application/x-tex");
-  var semantics = new mathMLTree.MathNode("semantics", [wrapper, annotation]);
-  var math = new mathMLTree.MathNode("math", [semantics]);
-  math.setAttribute("xmlns", "http://www.w3.org/1998/Math/MathML"); // You can't style <math> nodes, so we wrap the node in a span.
-  // NOTE: The span class is not typed to have <math> nodes as children, and
-  // we don't want to make the children type more generic since the children
-  // of span are expected to have more fields in `buildHtml` contexts.
-
-  var wrapperClass = forMathmlOnly ? "katex" : "katex-mathml"; // $FlowFixMe
-
-  return buildCommon.makeSpan([wrapperClass], [math]);
-}
-// CONCATENATED MODULE: ./src/buildTree.js
-
-
-
-
-
-
-
-var buildTree_optionsFromSettings = function optionsFromSettings(settings) {
-  return new src_Options({
-    style: settings.displayMode ? src_Style.DISPLAY : src_Style.TEXT,
-    maxSize: settings.maxSize,
-    minRuleThickness: settings.minRuleThickness
-  });
-};
-
-var buildTree_displayWrap = function displayWrap(node, settings) {
-  if (settings.displayMode) {
-    var classes = ["katex-display"];
-
-    if (settings.leqno) {
-      classes.push("leqno");
-    }
-
-    if (settings.fleqn) {
-      classes.push("fleqn");
-    }
-
-    node = buildCommon.makeSpan(classes, [node]);
-  }
-
-  return node;
-};
-
-var buildTree_buildTree = function buildTree(tree, expression, settings) {
-  var options = buildTree_optionsFromSettings(settings);
-  var katexNode;
-
-  if (settings.output === "mathml") {
-    return buildMathML(tree, expression, options, true);
-  } else if (settings.output === "html") {
-    var htmlNode = buildHTML(tree, options);
-    katexNode = buildCommon.makeSpan(["katex"], [htmlNode]);
-  } else {
-    var mathMLNode = buildMathML(tree, expression, options, false);
-
-    var _htmlNode = buildHTML(tree, options);
-
-    katexNode = buildCommon.makeSpan(["katex"], [mathMLNode, _htmlNode]);
-  }
-
-  return buildTree_displayWrap(katexNode, settings);
-};
-var buildTree_buildHTMLTree = function buildHTMLTree(tree, expression, settings) {
-  var options = buildTree_optionsFromSettings(settings);
-  var htmlNode = buildHTML(tree, options);
-  var katexNode = buildCommon.makeSpan(["katex"], [htmlNode]);
-  return buildTree_displayWrap(katexNode, settings);
-};
-/* harmony default export */ var src_buildTree = (buildTree_buildTree);
-// CONCATENATED MODULE: ./src/stretchy.js
-/**
- * This file provides support to buildMathML.js and buildHTML.js
- * for stretchy wide elements rendered from SVG files
- * and other CSS trickery.
- */
-
-
-
-
-var stretchyCodePoint = {
-  widehat: "^",
-  widecheck: "ˇ",
-  widetilde: "~",
-  utilde: "~",
-  overleftarrow: "\u2190",
-  underleftarrow: "\u2190",
-  xleftarrow: "\u2190",
-  overrightarrow: "\u2192",
-  underrightarrow: "\u2192",
-  xrightarrow: "\u2192",
-  underbrace: "\u23DF",
-  overbrace: "\u23DE",
-  overgroup: "\u23E0",
-  undergroup: "\u23E1",
-  overleftrightarrow: "\u2194",
-  underleftrightarrow: "\u2194",
-  xleftrightarrow: "\u2194",
-  Overrightarrow: "\u21D2",
-  xRightarrow: "\u21D2",
-  overleftharpoon: "\u21BC",
-  xleftharpoonup: "\u21BC",
-  overrightharpoon: "\u21C0",
-  xrightharpoonup: "\u21C0",
-  xLeftarrow: "\u21D0",
-  xLeftrightarrow: "\u21D4",
-  xhookleftarrow: "\u21A9",
-  xhookrightarrow: "\u21AA",
-  xmapsto: "\u21A6",
-  xrightharpoondown: "\u21C1",
-  xleftharpoondown: "\u21BD",
-  xrightleftharpoons: "\u21CC",
-  xleftrightharpoons: "\u21CB",
-  xtwoheadleftarrow: "\u219E",
-  xtwoheadrightarrow: "\u21A0",
-  xlongequal: "=",
-  xtofrom: "\u21C4",
-  xrightleftarrows: "\u21C4",
-  xrightequilibrium: "\u21CC",
-  // Not a perfect match.
-  xleftequilibrium: "\u21CB" // None better available.
-
-};
-
-var stretchy_mathMLnode = function mathMLnode(label) {
-  var node = new mathMLTree.MathNode("mo", [new mathMLTree.TextNode(stretchyCodePoint[label.substr(1)])]);
-  node.setAttribute("stretchy", "true");
-  return node;
-}; // Many of the KaTeX SVG images have been adapted from glyphs in KaTeX fonts.
-// Copyright (c) 2009-2010, Design Science, Inc. (<www.mathjax.org>)
-// Copyright (c) 2014-2017 Khan Academy (<www.khanacademy.org>)
-// Licensed under the SIL Open Font License, Version 1.1.
-// See \nhttp://scripts.sil.org/OFL
-// Very Long SVGs
-//    Many of the KaTeX stretchy wide elements use a long SVG image and an
-//    overflow: hidden tactic to achieve a stretchy image while avoiding
-//    distortion of arrowheads or brace corners.
-//    The SVG typically contains a very long (400 em) arrow.
-//    The SVG is in a container span that has overflow: hidden, so the span
-//    acts like a window that exposes only part of the  SVG.
-//    The SVG always has a longer, thinner aspect ratio than the container span.
-//    After the SVG fills 100% of the height of the container span,
-//    there is a long arrow shaft left over. That left-over shaft is not shown.
-//    Instead, it is sliced off because the span's CSS has overflow: hidden.
-//    Thus, the reader sees an arrow that matches the subject matter width
-//    without distortion.
-//    Some functions, such as \cancel, need to vary their aspect ratio. These
-//    functions do not get the overflow SVG treatment.
-// Second Brush Stroke
-//    Low resolution monitors struggle to display images in fine detail.
-//    So browsers apply anti-aliasing. A long straight arrow shaft therefore
-//    will sometimes appear as if it has a blurred edge.
-//    To mitigate this, these SVG files contain a second "brush-stroke" on the
-//    arrow shafts. That is, a second long thin rectangular SVG path has been
-//    written directly on top of each arrow shaft. This reinforcement causes
-//    some of the screen pixels to display as black instead of the anti-aliased
-//    gray pixel that a  single path would generate. So we get arrow shafts
-//    whose edges appear to be sharper.
-// In the katexImagesData object just below, the dimensions all
-// correspond to path geometry inside the relevant SVG.
-// For example, \overrightarrow uses the same arrowhead as glyph U+2192
-// from the KaTeX Main font. The scaling factor is 1000.
-// That is, inside the font, that arrowhead is 522 units tall, which
-// corresponds to 0.522 em inside the document.
-
-
-var katexImagesData = {
-  //   path(s), minWidth, height, align
-  overrightarrow: [["rightarrow"], 0.888, 522, "xMaxYMin"],
-  overleftarrow: [["leftarrow"], 0.888, 522, "xMinYMin"],
-  underrightarrow: [["rightarrow"], 0.888, 522, "xMaxYMin"],
-  underleftarrow: [["leftarrow"], 0.888, 522, "xMinYMin"],
-  xrightarrow: [["rightarrow"], 1.469, 522, "xMaxYMin"],
-  xleftarrow: [["leftarrow"], 1.469, 522, "xMinYMin"],
-  Overrightarrow: [["doublerightarrow"], 0.888, 560, "xMaxYMin"],
-  xRightarrow: [["doublerightarrow"], 1.526, 560, "xMaxYMin"],
-  xLeftarrow: [["doubleleftarrow"], 1.526, 560, "xMinYMin"],
-  overleftharpoon: [["leftharpoon"], 0.888, 522, "xMinYMin"],
-  xleftharpoonup: [["leftharpoon"], 0.888, 522, "xMinYMin"],
-  xleftharpoondown: [["leftharpoondown"], 0.888, 522, "xMinYMin"],
-  overrightharpoon: [["rightharpoon"], 0.888, 522, "xMaxYMin"],
-  xrightharpoonup: [["rightharpoon"], 0.888, 522, "xMaxYMin"],
-  xrightharpoondown: [["rightharpoondown"], 0.888, 522, "xMaxYMin"],
-  xlongequal: [["longequal"], 0.888, 334, "xMinYMin"],
-  xtwoheadleftarrow: [["twoheadleftarrow"], 0.888, 334, "xMinYMin"],
-  xtwoheadrightarrow: [["twoheadrightarrow"], 0.888, 334, "xMaxYMin"],
-  overleftrightarrow: [["leftarrow", "rightarrow"], 0.888, 522],
-  overbrace: [["leftbrace", "midbrace", "rightbrace"], 1.6, 548],
-  underbrace: [["leftbraceunder", "midbraceunder", "rightbraceunder"], 1.6, 548],
-  underleftrightarrow: [["leftarrow", "rightarrow"], 0.888, 522],
-  xleftrightarrow: [["leftarrow", "rightarrow"], 1.75, 522],
-  xLeftrightarrow: [["doubleleftarrow", "doublerightarrow"], 1.75, 560],
-  xrightleftharpoons: [["leftharpoondownplus", "rightharpoonplus"], 1.75, 716],
-  xleftrightharpoons: [["leftharpoonplus", "rightharpoondownplus"], 1.75, 716],
-  xhookleftarrow: [["leftarrow", "righthook"], 1.08, 522],
-  xhookrightarrow: [["lefthook", "rightarrow"], 1.08, 522],
-  overlinesegment: [["leftlinesegment", "rightlinesegment"], 0.888, 522],
-  underlinesegment: [["leftlinesegment", "rightlinesegment"], 0.888, 522],
-  overgroup: [["leftgroup", "rightgroup"], 0.888, 342],
-  undergroup: [["leftgroupunder", "rightgroupunder"], 0.888, 342],
-  xmapsto: [["leftmapsto", "rightarrow"], 1.5, 522],
-  xtofrom: [["leftToFrom", "rightToFrom"], 1.75, 528],
-  // The next three arrows are from the mhchem package.
-  // In mhchem.sty, min-length is 2.0em. But these arrows might appear in the
-  // document as \xrightarrow or \xrightleftharpoons. Those have
-  // min-length = 1.75em, so we set min-length on these next three to match.
-  xrightleftarrows: [["baraboveleftarrow", "rightarrowabovebar"], 1.75, 901],
-  xrightequilibrium: [["baraboveshortleftharpoon", "rightharpoonaboveshortbar"], 1.75, 716],
-  xleftequilibrium: [["shortbaraboveleftharpoon", "shortrightharpoonabovebar"], 1.75, 716]
-};
-
-var groupLength = function groupLength(arg) {
-  if (arg.type === "ordgroup") {
-    return arg.body.length;
-  } else {
-    return 1;
-  }
-};
-
-var stretchy_svgSpan = function svgSpan(group, options) {
-  // Create a span with inline SVG for the element.
-  function buildSvgSpan_() {
-    var viewBoxWidth = 400000; // default
-
-    var label = group.label.substr(1);
-
-    if (utils.contains(["widehat", "widecheck", "widetilde", "utilde"], label)) {
-      // Each type in the `if` statement corresponds to one of the ParseNode
-      // types below. This narrowing is required to access `grp.base`.
-      var grp = group; // There are four SVG images available for each function.
-      // Choose a taller image when there are more characters.
-
-      var numChars = groupLength(grp.base);
-      var viewBoxHeight;
-      var pathName;
-
-      var _height;
-
-      if (numChars > 5) {
-        if (label === "widehat" || label === "widecheck") {
-          viewBoxHeight = 420;
-          viewBoxWidth = 2364;
-          _height = 0.42;
-          pathName = label + "4";
-        } else {
-          viewBoxHeight = 312;
-          viewBoxWidth = 2340;
-          _height = 0.34;
-          pathName = "tilde4";
-        }
-      } else {
-        var imgIndex = [1, 1, 2, 2, 3, 3][numChars];
-
-        if (label === "widehat" || label === "widecheck") {
-          viewBoxWidth = [0, 1062, 2364, 2364, 2364][imgIndex];
-          viewBoxHeight = [0, 239, 300, 360, 420][imgIndex];
-          _height = [0, 0.24, 0.3, 0.3, 0.36, 0.42][imgIndex];
-          pathName = label + imgIndex;
-        } else {
-          viewBoxWidth = [0, 600, 1033, 2339, 2340][imgIndex];
-          viewBoxHeight = [0, 260, 286, 306, 312][imgIndex];
-          _height = [0, 0.26, 0.286, 0.3, 0.306, 0.34][imgIndex];
-          pathName = "tilde" + imgIndex;
-        }
-      }
-
-      var path = new domTree_PathNode(pathName);
-      var svgNode = new SvgNode([path], {
-        "width": "100%",
-        "height": _height + "em",
-        "viewBox": "0 0 " + viewBoxWidth + " " + viewBoxHeight,
-        "preserveAspectRatio": "none"
-      });
-      return {
-        span: buildCommon.makeSvgSpan([], [svgNode], options),
-        minWidth: 0,
-        height: _height
-      };
-    } else {
-      var spans = [];
-      var data = katexImagesData[label];
-      var paths = data[0],
-          _minWidth = data[1],
-          _viewBoxHeight = data[2];
-
-      var _height2 = _viewBoxHeight / 1000;
-
-      var numSvgChildren = paths.length;
-      var widthClasses;
-      var aligns;
-
-      if (numSvgChildren === 1) {
-        // $FlowFixMe: All these cases must be of the 4-tuple type.
-        var align1 = data[3];
-        widthClasses = ["hide-tail"];
-        aligns = [align1];
-      } else if (numSvgChildren === 2) {
-        widthClasses = ["halfarrow-left", "halfarrow-right"];
-        aligns = ["xMinYMin", "xMaxYMin"];
-      } else if (numSvgChildren === 3) {
-        widthClasses = ["brace-left", "brace-center", "brace-right"];
-        aligns = ["xMinYMin", "xMidYMin", "xMaxYMin"];
-      } else {
-        throw new Error("Correct katexImagesData or update code here to support\n                    " + numSvgChildren + " children.");
-      }
-
-      for (var i = 0; i < numSvgChildren; i++) {
-        var _path = new domTree_PathNode(paths[i]);
-
-        var _svgNode = new SvgNode([_path], {
-          "width": "400em",
-          "height": _height2 + "em",
-          "viewBox": "0 0 " + viewBoxWidth + " " + _viewBoxHeight,
-          "preserveAspectRatio": aligns[i] + " slice"
-        });
-
-        var _span = buildCommon.makeSvgSpan([widthClasses[i]], [_svgNode], options);
-
-        if (numSvgChildren === 1) {
-          return {
-            span: _span,
-            minWidth: _minWidth,
-            height: _height2
-          };
-        } else {
-          _span.style.height = _height2 + "em";
-          spans.push(_span);
-        }
-      }
-
-      return {
-        span: buildCommon.makeSpan(["stretchy"], spans, options),
-        minWidth: _minWidth,
-        height: _height2
-      };
-    }
-  } // buildSvgSpan_()
-
-
-  var _buildSvgSpan_ = buildSvgSpan_(),
-      span = _buildSvgSpan_.span,
-      minWidth = _buildSvgSpan_.minWidth,
-      height = _buildSvgSpan_.height; // Note that we are returning span.depth = 0.
-  // Any adjustments relative to the baseline must be done in buildHTML.
-
-
-  span.height = height;
-  span.style.height = height + "em";
-
-  if (minWidth > 0) {
-    span.style.minWidth = minWidth + "em";
-  }
-
-  return span;
-};
-
-var stretchy_encloseSpan = function encloseSpan(inner, label, pad, options) {
-  // Return an image span for \cancel, \bcancel, \xcancel, or \fbox
-  var img;
-  var totalHeight = inner.height + inner.depth + 2 * pad;
-
-  if (/fbox|color/.test(label)) {
-    img = buildCommon.makeSpan(["stretchy", label], [], options);
-
-    if (label === "fbox") {
-      var color = options.color && options.getColor();
-
-      if (color) {
-        img.style.borderColor = color;
-      }
-    }
-  } else {
-    // \cancel, \bcancel, or \xcancel
-    // Since \cancel's SVG is inline and it omits the viewBox attribute,
-    // its stroke-width will not vary with span area.
-    var lines = [];
-
-    if (/^[bx]cancel$/.test(label)) {
-      lines.push(new LineNode({
-        "x1": "0",
-        "y1": "0",
-        "x2": "100%",
-        "y2": "100%",
-        "stroke-width": "0.046em"
-      }));
-    }
-
-    if (/^x?cancel$/.test(label)) {
-      lines.push(new LineNode({
-        "x1": "0",
-        "y1": "100%",
-        "x2": "100%",
-        "y2": "0",
-        "stroke-width": "0.046em"
-      }));
-    }
-
-    var svgNode = new SvgNode(lines, {
-      "width": "100%",
-      "height": totalHeight + "em"
-    });
-    img = buildCommon.makeSvgSpan([], [svgNode], options);
-  }
-
-  img.height = totalHeight;
-  img.style.height = totalHeight + "em";
-  return img;
-};
-
-/* harmony default export */ var stretchy = ({
-  encloseSpan: stretchy_encloseSpan,
-  mathMLnode: stretchy_mathMLnode,
-  svgSpan: stretchy_svgSpan
-});
-// CONCATENATED MODULE: ./src/functions/accent.js
-
-
-
-
-
-
-
-
-
-// NOTE: Unlike most `htmlBuilder`s, this one handles not only "accent", but
-var accent_htmlBuilder = function htmlBuilder(grp, options) {
-  // Accents are handled in the TeXbook pg. 443, rule 12.
-  var base;
-  var group;
-  var supSub = checkNodeType(grp, "supsub");
-  var supSubGroup;
-
-  if (supSub) {
-    // If our base is a character box, and we have superscripts and
-    // subscripts, the supsub will defer to us. In particular, we want
-    // to attach the superscripts and subscripts to the inner body (so
-    // that the position of the superscripts and subscripts won't be
-    // affected by the height of the accent). We accomplish this by
-    // sticking the base of the accent into the base of the supsub, and
-    // rendering that, while keeping track of where the accent is.
-    // The real accent group is the base of the supsub group
-    group = assertNodeType(supSub.base, "accent"); // The character box is the base of the accent group
-
-    base = group.base; // Stick the character box into the base of the supsub group
-
-    supSub.base = base; // Rerender the supsub group with its new base, and store that
-    // result.
-
-    supSubGroup = assertSpan(buildHTML_buildGroup(supSub, options)); // reset original base
-
-    supSub.base = group;
-  } else {
-    group = assertNodeType(grp, "accent");
-    base = group.base;
-  } // Build the base group
-
-
-  var body = buildHTML_buildGroup(base, options.havingCrampedStyle()); // Does the accent need to shift for the skew of a character?
-
-  var mustShift = group.isShifty && utils.isCharacterBox(base); // Calculate the skew of the accent. This is based on the line "If the
-  // nucleus is not a single character, let s = 0; otherwise set s to the
-  // kern amount for the nucleus followed by the \skewchar of its font."
-  // Note that our skew metrics are just the kern between each character
-  // and the skewchar.
-
-  var skew = 0;
-
-  if (mustShift) {
-    // If the base is a character box, then we want the skew of the
-    // innermost character. To do that, we find the innermost character:
-    var baseChar = utils.getBaseElem(base); // Then, we render its group to get the symbol inside it
-
-    var baseGroup = buildHTML_buildGroup(baseChar, options.havingCrampedStyle()); // Finally, we pull the skew off of the symbol.
-
-    skew = assertSymbolDomNode(baseGroup).skew; // Note that we now throw away baseGroup, because the layers we
-    // removed with getBaseElem might contain things like \color which
-    // we can't get rid of.
-    // TODO(emily): Find a better way to get the skew
-  } // calculate the amount of space between the body and the accent
-
-
-  var clearance = Math.min(body.height, options.fontMetrics().xHeight); // Build the accent
-
-  var accentBody;
-
-  if (!group.isStretchy) {
-    var accent;
-    var width;
-
-    if (group.label === "\\vec") {
-      // Before version 0.9, \vec used the combining font glyph U+20D7.
-      // But browsers, especially Safari, are not consistent in how they
-      // render combining characters when not preceded by a character.
-      // So now we use an SVG.
-      // If Safari reforms, we should consider reverting to the glyph.
-      accent = buildCommon.staticSvg("vec", options);
-      width = buildCommon.svgData.vec[1];
-    } else {
-      accent = buildCommon.makeOrd({
-        mode: group.mode,
-        text: group.label
-      }, options, "textord");
-      accent = assertSymbolDomNode(accent); // Remove the italic correction of the accent, because it only serves to
-      // shift the accent over to a place we don't want.
-
-      accent.italic = 0;
-      width = accent.width;
-    }
-
-    accentBody = buildCommon.makeSpan(["accent-body"], [accent]); // "Full" accents expand the width of the resulting symbol to be
-    // at least the width of the accent, and overlap directly onto the
-    // character without any vertical offset.
-
-    var accentFull = group.label === "\\textcircled";
-
-    if (accentFull) {
-      accentBody.classes.push('accent-full');
-      clearance = body.height;
-    } // Shift the accent over by the skew.
-
-
-    var left = skew; // CSS defines `.katex .accent .accent-body:not(.accent-full) { width: 0 }`
-    // so that the accent doesn't contribute to the bounding box.
-    // We need to shift the character by its width (effectively half
-    // its width) to compensate.
-
-    if (!accentFull) {
-      left -= width / 2;
-    }
-
-    accentBody.style.left = left + "em"; // \textcircled uses the \bigcirc glyph, so it needs some
-    // vertical adjustment to match LaTeX.
-
-    if (group.label === "\\textcircled") {
-      accentBody.style.top = ".2em";
-    }
-
-    accentBody = buildCommon.makeVList({
-      positionType: "firstBaseline",
-      children: [{
-        type: "elem",
-        elem: body
-      }, {
-        type: "kern",
-        size: -clearance
-      }, {
-        type: "elem",
-        elem: accentBody
-      }]
-    }, options);
-  } else {
-    accentBody = stretchy.svgSpan(group, options);
-    accentBody = buildCommon.makeVList({
-      positionType: "firstBaseline",
-      children: [{
-        type: "elem",
-        elem: body
-      }, {
-        type: "elem",
-        elem: accentBody,
-        wrapperClasses: ["svg-align"],
-        wrapperStyle: skew > 0 ? {
-          width: "calc(100% - " + 2 * skew + "em)",
-          marginLeft: 2 * skew + "em"
-        } : undefined
-      }]
-    }, options);
-  }
-
-  var accentWrap = buildCommon.makeSpan(["mord", "accent"], [accentBody], options);
-
-  if (supSubGroup) {
-    // Here, we replace the "base" child of the supsub with our newly
-    // generated accent.
-    supSubGroup.children[0] = accentWrap; // Since we don't rerun the height calculation after replacing the
-    // accent, we manually recalculate height.
-
-    supSubGroup.height = Math.max(accentWrap.height, supSubGroup.height); // Accents should always be ords, even when their innards are not.
-
-    supSubGroup.classes[0] = "mord";
-    return supSubGroup;
-  } else {
-    return accentWrap;
-  }
-};
-
-var accent_mathmlBuilder = function mathmlBuilder(group, options) {
-  var accentNode = group.isStretchy ? stretchy.mathMLnode(group.label) : new mathMLTree.MathNode("mo", [buildMathML_makeText(group.label, group.mode)]);
-  var node = new mathMLTree.MathNode("mover", [buildMathML_buildGroup(group.base, options), accentNode]);
-  node.setAttribute("accent", "true");
-  return node;
-};
-
-var NON_STRETCHY_ACCENT_REGEX = new RegExp(["\\acute", "\\grave", "\\ddot", "\\tilde", "\\bar", "\\breve", "\\check", "\\hat", "\\vec", "\\dot", "\\mathring"].map(function (accent) {
-  return "\\" + accent;
-}).join("|")); // Accents
-
-defineFunction({
-  type: "accent",
-  names: ["\\acute", "\\grave", "\\ddot", "\\tilde", "\\bar", "\\breve", "\\check", "\\hat", "\\vec", "\\dot", "\\mathring", "\\widecheck", "\\widehat", "\\widetilde", "\\overrightarrow", "\\overleftarrow", "\\Overrightarrow", "\\overleftrightarrow", "\\overgroup", "\\overlinesegment", "\\overleftharpoon", "\\overrightharpoon"],
-  props: {
-    numArgs: 1
-  },
-  handler: function handler(context, args) {
-    var base = args[0];
-    var isStretchy = !NON_STRETCHY_ACCENT_REGEX.test(context.funcName);
-    var isShifty = !isStretchy || context.funcName === "\\widehat" || context.funcName === "\\widetilde" || context.funcName === "\\widecheck";
-    return {
-      type: "accent",
-      mode: context.parser.mode,
-      label: context.funcName,
-      isStretchy: isStretchy,
-      isShifty: isShifty,
-      base: base
-    };
-  },
-  htmlBuilder: accent_htmlBuilder,
-  mathmlBuilder: accent_mathmlBuilder
-}); // Text-mode accents
-
-defineFunction({
-  type: "accent",
-  names: ["\\'", "\\`", "\\^", "\\~", "\\=", "\\u", "\\.", '\\"', "\\r", "\\H", "\\v", "\\textcircled"],
-  props: {
-    numArgs: 1,
-    allowedInText: true,
-    allowedInMath: false
-  },
-  handler: function handler(context, args) {
-    var base = args[0];
-    return {
-      type: "accent",
-      mode: context.parser.mode,
-      label: context.funcName,
-      isStretchy: false,
-      isShifty: true,
-      base: base
-    };
-  },
-  htmlBuilder: accent_htmlBuilder,
-  mathmlBuilder: accent_mathmlBuilder
-});
-// CONCATENATED MODULE: ./src/functions/accentunder.js
-// Horizontal overlap functions
-
-
-
-
-
-
-defineFunction({
-  type: "accentUnder",
-  names: ["\\underleftarrow", "\\underrightarrow", "\\underleftrightarrow", "\\undergroup", "\\underlinesegment", "\\utilde"],
-  props: {
-    numArgs: 1
-  },
-  handler: function handler(_ref, args) {
-    var parser = _ref.parser,
-        funcName = _ref.funcName;
-    var base = args[0];
-    return {
-      type: "accentUnder",
-      mode: parser.mode,
-      label: funcName,
-      base: base
-    };
-  },
-  htmlBuilder: function htmlBuilder(group, options) {
-    // Treat under accents much like underlines.
-    var innerGroup = buildHTML_buildGroup(group.base, options);
-    var accentBody = stretchy.svgSpan(group, options);
-    var kern = group.label === "\\utilde" ? 0.12 : 0; // Generate the vlist, with the appropriate kerns
-
-    var vlist = buildCommon.makeVList({
-      positionType: "bottom",
-      positionData: accentBody.height + kern,
-      children: [{
-        type: "elem",
-        elem: accentBody,
-        wrapperClasses: ["svg-align"]
-      }, {
-        type: "kern",
-        size: kern
-      }, {
-        type: "elem",
-        elem: innerGroup
-      }]
-    }, options);
-    return buildCommon.makeSpan(["mord", "accentunder"], [vlist], options);
-  },
-  mathmlBuilder: function mathmlBuilder(group, options) {
-    var accentNode = stretchy.mathMLnode(group.label);
-    var node = new mathMLTree.MathNode("munder", [buildMathML_buildGroup(group.base, options), accentNode]);
-    node.setAttribute("accentunder", "true");
-    return node;
-  }
-});
-// CONCATENATED MODULE: ./src/functions/arrow.js
-
-
-
-
-
-
-
-// Helper function
-var arrow_paddedNode = function paddedNode(group) {
-  var node = new mathMLTree.MathNode("mpadded", group ? [group] : []);
-  node.setAttribute("width", "+0.6em");
-  node.setAttribute("lspace", "0.3em");
-  return node;
-}; // Stretchy arrows with an optional argument
-
-
-defineFunction({
-  type: "xArrow",
-  names: ["\\xleftarrow", "\\xrightarrow", "\\xLeftarrow", "\\xRightarrow", "\\xleftrightarrow", "\\xLeftrightarrow", "\\xhookleftarrow", "\\xhookrightarrow", "\\xmapsto", "\\xrightharpoondown", "\\xrightharpoonup", "\\xleftharpoondown", "\\xleftharpoonup", "\\xrightleftharpoons", "\\xleftrightharpoons", "\\xlongequal", "\\xtwoheadrightarrow", "\\xtwoheadleftarrow", "\\xtofrom", // The next 3 functions are here to support the mhchem extension.
-  // Direct use of these functions is discouraged and may break someday.
-  "\\xrightleftarrows", "\\xrightequilibrium", "\\xleftequilibrium"],
-  props: {
-    numArgs: 1,
-    numOptionalArgs: 1
-  },
-  handler: function handler(_ref, args, optArgs) {
-    var parser = _ref.parser,
-        funcName = _ref.funcName;
-    return {
-      type: "xArrow",
-      mode: parser.mode,
-      label: funcName,
-      body: args[0],
-      below: optArgs[0]
-    };
-  },
-  // Flow is unable to correctly infer the type of `group`, even though it's
-  // unamibiguously determined from the passed-in `type` above.
-  htmlBuilder: function htmlBuilder(group, options) {
-    var style = options.style; // Build the argument groups in the appropriate style.
-    // Ref: amsmath.dtx:   \hbox{$\scriptstyle\mkern#3mu{#6}\mkern#4mu$}%
-    // Some groups can return document fragments.  Handle those by wrapping
-    // them in a span.
-
-    var newOptions = options.havingStyle(style.sup());
-    var upperGroup = buildCommon.wrapFragment(buildHTML_buildGroup(group.body, newOptions, options), options);
-    upperGroup.classes.push("x-arrow-pad");
-    var lowerGroup;
-
-    if (group.below) {
-      // Build the lower group
-      newOptions = options.havingStyle(style.sub());
-      lowerGroup = buildCommon.wrapFragment(buildHTML_buildGroup(group.below, newOptions, options), options);
-      lowerGroup.classes.push("x-arrow-pad");
-    }
-
-    var arrowBody = stretchy.svgSpan(group, options); // Re shift: Note that stretchy.svgSpan returned arrowBody.depth = 0.
-    // The point we want on the math axis is at 0.5 * arrowBody.height.
-
-    var arrowShift = -options.fontMetrics().axisHeight + 0.5 * arrowBody.height; // 2 mu kern. Ref: amsmath.dtx: #7\if0#2\else\mkern#2mu\fi
-
-    var upperShift = -options.fontMetrics().axisHeight - 0.5 * arrowBody.height - 0.111; // 0.111 em = 2 mu
-
-    if (upperGroup.depth > 0.25 || group.label === "\\xleftequilibrium") {
-      upperShift -= upperGroup.depth; // shift up if depth encroaches
-    } // Generate the vlist
-
-
-    var vlist;
-
-    if (lowerGroup) {
-      var lowerShift = -options.fontMetrics().axisHeight + lowerGroup.height + 0.5 * arrowBody.height + 0.111;
-      vlist = buildCommon.makeVList({
-        positionType: "individualShift",
-        children: [{
-          type: "elem",
-          elem: upperGroup,
-          shift: upperShift
-        }, {
-          type: "elem",
-          elem: arrowBody,
-          shift: arrowShift
-        }, {
-          type: "elem",
-          elem: lowerGroup,
-          shift: lowerShift
-        }]
-      }, options);
-    } else {
-      vlist = buildCommon.makeVList({
-        positionType: "individualShift",
-        children: [{
-          type: "elem",
-          elem: upperGroup,
-          shift: upperShift
-        }, {
-          type: "elem",
-          elem: arrowBody,
-          shift: arrowShift
-        }]
-      }, options);
-    } // $FlowFixMe: Replace this with passing "svg-align" into makeVList.
-
-
-    vlist.children[0].children[0].children[1].classes.push("svg-align");
-    return buildCommon.makeSpan(["mrel", "x-arrow"], [vlist], options);
-  },
-  mathmlBuilder: function mathmlBuilder(group, options) {
-    var arrowNode = stretchy.mathMLnode(group.label);
-    var node;
-
-    if (group.body) {
-      var upperNode = arrow_paddedNode(buildMathML_buildGroup(group.body, options));
-
-      if (group.below) {
-        var lowerNode = arrow_paddedNode(buildMathML_buildGroup(group.below, options));
-        node = new mathMLTree.MathNode("munderover", [arrowNode, lowerNode, upperNode]);
-      } else {
-        node = new mathMLTree.MathNode("mover", [arrowNode, upperNode]);
-      }
-    } else if (group.below) {
-      var _lowerNode = arrow_paddedNode(buildMathML_buildGroup(group.below, options));
-
-      node = new mathMLTree.MathNode("munder", [arrowNode, _lowerNode]);
-    } else {
-      // This should never happen.
-      // Parser.js throws an error if there is no argument.
-      node = arrow_paddedNode();
-      node = new mathMLTree.MathNode("mover", [arrowNode, node]);
-    }
-
-    return node;
-  }
-});
-// CONCATENATED MODULE: ./src/functions/char.js
-
-
- // \@char is an internal function that takes a grouped decimal argument like
-// {123} and converts into symbol with code 123.  It is used by the *macro*
-// \char defined in macros.js.
-
-defineFunction({
-  type: "textord",
-  names: ["\\@char"],
-  props: {
-    numArgs: 1,
-    allowedInText: true
-  },
-  handler: function handler(_ref, args) {
-    var parser = _ref.parser;
-    var arg = assertNodeType(args[0], "ordgroup");
-    var group = arg.body;
-    var number = "";
-
-    for (var i = 0; i < group.length; i++) {
-      var node = assertNodeType(group[i], "textord");
-      number += node.text;
-    }
-
-    var code = parseInt(number);
-
-    if (isNaN(code)) {
-      throw new src_ParseError("\\@char has non-numeric argument " + number);
-    }
-
-    return {
-      type: "textord",
-      mode: parser.mode,
-      text: String.fromCharCode(code)
-    };
-  }
-});
-// CONCATENATED MODULE: ./src/functions/color.js
-
-
-
-
-
-
-
-var color_htmlBuilder = function htmlBuilder(group, options) {
-  var elements = buildHTML_buildExpression(group.body, options.withColor(group.color), false); // \color isn't supposed to affect the type of the elements it contains.
-  // To accomplish this, we wrap the results in a fragment, so the inner
-  // elements will be able to directly interact with their neighbors. For
-  // example, `\color{red}{2 +} 3` has the same spacing as `2 + 3`
-
-  return buildCommon.makeFragment(elements);
-};
-
-var color_mathmlBuilder = function mathmlBuilder(group, options) {
-  var inner = buildMathML_buildExpression(group.body, options.withColor(group.color));
-  var node = new mathMLTree.MathNode("mstyle", inner);
-  node.setAttribute("mathcolor", group.color);
-  return node;
-};
-
-defineFunction({
-  type: "color",
-  names: ["\\textcolor"],
-  props: {
-    numArgs: 2,
-    allowedInText: true,
-    greediness: 3,
-    argTypes: ["color", "original"]
-  },
-  handler: function handler(_ref, args) {
-    var parser = _ref.parser;
-    var color = assertNodeType(args[0], "color-token").color;
-    var body = args[1];
-    return {
-      type: "color",
-      mode: parser.mode,
-      color: color,
-      body: defineFunction_ordargument(body)
-    };
-  },
-  htmlBuilder: color_htmlBuilder,
-  mathmlBuilder: color_mathmlBuilder
-});
-defineFunction({
-  type: "color",
-  names: ["\\color"],
-  props: {
-    numArgs: 1,
-    allowedInText: true,
-    greediness: 3,
-    argTypes: ["color"]
-  },
-  handler: function handler(_ref2, args) {
-    var parser = _ref2.parser,
-        breakOnTokenText = _ref2.breakOnTokenText;
-    var color = assertNodeType(args[0], "color-token").color; // Set macro \current@color in current namespace to store the current
-    // color, mimicking the behavior of color.sty.
-    // This is currently used just to correctly color a \right
-    // that follows a \color command.
-
-    parser.gullet.macros.set("\\current@color", color); // Parse out the implicit body that should be colored.
-
-    var body = parser.parseExpression(true, breakOnTokenText);
-    return {
-      type: "color",
-      mode: parser.mode,
-      color: color,
-      body: body
-    };
-  },
-  htmlBuilder: color_htmlBuilder,
-  mathmlBuilder: color_mathmlBuilder
-});
-// CONCATENATED MODULE: ./src/functions/cr.js
-// Row breaks within tabular environments, and line breaks at top level
-
-
-
-
-
- // \\ is a macro mapping to either \cr or \newline.  Because they have the
-// same signature, we implement them as one megafunction, with newRow
-// indicating whether we're in the \cr case, and newLine indicating whether
-// to break the line in the \newline case.
-
-defineFunction({
-  type: "cr",
-  names: ["\\cr", "\\newline"],
-  props: {
-    numArgs: 0,
-    numOptionalArgs: 1,
-    argTypes: ["size"],
-    allowedInText: true
-  },
-  handler: function handler(_ref, args, optArgs) {
-    var parser = _ref.parser,
-        funcName = _ref.funcName;
-    var size = optArgs[0];
-    var newRow = funcName === "\\cr";
-    var newLine = false;
-
-    if (!newRow) {
-      if (parser.settings.displayMode && parser.settings.useStrictBehavior("newLineInDisplayMode", "In LaTeX, \\\\ or \\newline " + "does nothing in display mode")) {
-        newLine = false;
-      } else {
-        newLine = true;
-      }
-    }
-
-    return {
-      type: "cr",
-      mode: parser.mode,
-      newLine: newLine,
-      newRow: newRow,
-      size: size && assertNodeType(size, "size").value
-    };
-  },
-  // The following builders are called only at the top level,
-  // not within tabular/array environments.
-  htmlBuilder: function htmlBuilder(group, options) {
-    if (group.newRow) {
-      throw new src_ParseError("\\cr valid only within a tabular/array environment");
-    }
-
-    var span = buildCommon.makeSpan(["mspace"], [], options);
-
-    if (group.newLine) {
-      span.classes.push("newline");
-
-      if (group.size) {
-        span.style.marginTop = units_calculateSize(group.size, options) + "em";
-      }
-    }
-
-    return span;
-  },
-  mathmlBuilder: function mathmlBuilder(group, options) {
-    var node = new mathMLTree.MathNode("mspace");
-
-    if (group.newLine) {
-      node.setAttribute("linebreak", "newline");
-
-      if (group.size) {
-        node.setAttribute("height", units_calculateSize(group.size, options) + "em");
-      }
-    }
-
-    return node;
-  }
-});
-// CONCATENATED MODULE: ./src/delimiter.js
-/**
- * This file deals with creating delimiters of various sizes. The TeXbook
- * discusses these routines on page 441-442, in the "Another subroutine sets box
- * x to a specified variable delimiter" paragraph.
- *
- * There are three main routines here. `makeSmallDelim` makes a delimiter in the
- * normal font, but in either text, script, or scriptscript style.
- * `makeLargeDelim` makes a delimiter in textstyle, but in one of the Size1,
- * Size2, Size3, or Size4 fonts. `makeStackedDelim` makes a delimiter out of
- * smaller pieces that are stacked on top of one another.
- *
- * The functions take a parameter `center`, which determines if the delimiter
- * should be centered around the axis.
- *
- * Then, there are three exposed functions. `sizedDelim` makes a delimiter in
- * one of the given sizes. This is used for things like `\bigl`.
- * `customSizedDelim` makes a delimiter with a given total height+depth. It is
- * called in places like `\sqrt`. `leftRightDelim` makes an appropriate
- * delimiter which surrounds an expression of a given height an depth. It is
- * used in `\left` and `\right`.
- */
-
-
-
-
-
-
-
-
-
-/**
- * Get the metrics for a given symbol and font, after transformation (i.e.
- * after following replacement from symbols.js)
- */
-var delimiter_getMetrics = function getMetrics(symbol, font, mode) {
-  var replace = src_symbols.math[symbol] && src_symbols.math[symbol].replace;
-  var metrics = getCharacterMetrics(replace || symbol, font, mode);
-
-  if (!metrics) {
-    throw new Error("Unsupported symbol " + symbol + " and font size " + font + ".");
-  }
-
-  return metrics;
-};
-/**
- * Puts a delimiter span in a given style, and adds appropriate height, depth,
- * and maxFontSizes.
- */
-
-
-var delimiter_styleWrap = function styleWrap(delim, toStyle, options, classes) {
-  var newOptions = options.havingBaseStyle(toStyle);
-  var span = buildCommon.makeSpan(classes.concat(newOptions.sizingClasses(options)), [delim], options);
-  var delimSizeMultiplier = newOptions.sizeMultiplier / options.sizeMultiplier;
-  span.height *= delimSizeMultiplier;
-  span.depth *= delimSizeMultiplier;
-  span.maxFontSize = newOptions.sizeMultiplier;
-  return span;
-};
-
-var centerSpan = function centerSpan(span, options, style) {
-  var newOptions = options.havingBaseStyle(style);
-  var shift = (1 - options.sizeMultiplier / newOptions.sizeMultiplier) * options.fontMetrics().axisHeight;
-  span.classes.push("delimcenter");
-  span.style.top = shift + "em";
-  span.height -= shift;
-  span.depth += shift;
-};
-/**
- * Makes a small delimiter. This is a delimiter that comes in the Main-Regular
- * font, but is restyled to either be in textstyle, scriptstyle, or
- * scriptscriptstyle.
- */
-
-
-var delimiter_makeSmallDelim = function makeSmallDelim(delim, style, center, options, mode, classes) {
-  var text = buildCommon.makeSymbol(delim, "Main-Regular", mode, options);
-  var span = delimiter_styleWrap(text, style, options, classes);
-
-  if (center) {
-    centerSpan(span, options, style);
-  }
-
-  return span;
-};
-/**
- * Builds a symbol in the given font size (note size is an integer)
- */
-
-
-var delimiter_mathrmSize = function mathrmSize(value, size, mode, options) {
-  return buildCommon.makeSymbol(value, "Size" + size + "-Regular", mode, options);
-};
-/**
- * Makes a large delimiter. This is a delimiter that comes in the Size1, Size2,
- * Size3, or Size4 fonts. It is always rendered in textstyle.
- */
-
-
-var delimiter_makeLargeDelim = function makeLargeDelim(delim, size, center, options, mode, classes) {
-  var inner = delimiter_mathrmSize(delim, size, mode, options);
-  var span = delimiter_styleWrap(buildCommon.makeSpan(["delimsizing", "size" + size], [inner], options), src_Style.TEXT, options, classes);
-
-  if (center) {
-    centerSpan(span, options, src_Style.TEXT);
-  }
-
-  return span;
-};
-/**
- * Make an inner span with the given offset and in the given font. This is used
- * in `makeStackedDelim` to make the stacking pieces for the delimiter.
- */
-
-
-var delimiter_makeInner = function makeInner(symbol, font, mode) {
-  var sizeClass; // Apply the correct CSS class to choose the right font.
-
-  if (font === "Size1-Regular") {
-    sizeClass = "delim-size1";
-  } else
-    /* if (font === "Size4-Regular") */
-    {
-      sizeClass = "delim-size4";
-    }
-
-  var inner = buildCommon.makeSpan(["delimsizinginner", sizeClass], [buildCommon.makeSpan([], [buildCommon.makeSymbol(symbol, font, mode)])]); // Since this will be passed into `makeVList` in the end, wrap the element
-  // in the appropriate tag that VList uses.
-
-  return {
-    type: "elem",
-    elem: inner
-  };
-}; // Helper for makeStackedDelim
-
-
-var lap = {
-  type: "kern",
-  size: -0.005
-};
-/**
- * Make a stacked delimiter out of a given delimiter, with the total height at
- * least `heightTotal`. This routine is mentioned on page 442 of the TeXbook.
- */
-
-var delimiter_makeStackedDelim = function makeStackedDelim(delim, heightTotal, center, options, mode, classes) {
-  // There are four parts, the top, an optional middle, a repeated part, and a
-  // bottom.
-  var top;
-  var middle;
-  var repeat;
-  var bottom;
-  top = repeat = bottom = delim;
-  middle = null; // Also keep track of what font the delimiters are in
-
-  var font = "Size1-Regular"; // We set the parts and font based on the symbol. Note that we use
-  // '\u23d0' instead of '|' and '\u2016' instead of '\\|' for the
-  // repeats of the arrows
-
-  if (delim === "\\uparrow") {
-    repeat = bottom = "\u23D0";
-  } else if (delim === "\\Uparrow") {
-    repeat = bottom = "\u2016";
-  } else if (delim === "\\downarrow") {
-    top = repeat = "\u23D0";
-  } else if (delim === "\\Downarrow") {
-    top = repeat = "\u2016";
-  } else if (delim === "\\updownarrow") {
-    top = "\\uparrow";
-    repeat = "\u23D0";
-    bottom = "\\downarrow";
-  } else if (delim === "\\Updownarrow") {
-    top = "\\Uparrow";
-    repeat = "\u2016";
-    bottom = "\\Downarrow";
-  } else if (delim === "[" || delim === "\\lbrack") {
-    top = "\u23A1";
-    repeat = "\u23A2";
-    bottom = "\u23A3";
-    font = "Size4-Regular";
-  } else if (delim === "]" || delim === "\\rbrack") {
-    top = "\u23A4";
-    repeat = "\u23A5";
-    bottom = "\u23A6";
-    font = "Size4-Regular";
-  } else if (delim === "\\lfloor" || delim === "\u230A") {
-    repeat = top = "\u23A2";
-    bottom = "\u23A3";
-    font = "Size4-Regular";
-  } else if (delim === "\\lceil" || delim === "\u2308") {
-    top = "\u23A1";
-    repeat = bottom = "\u23A2";
-    font = "Size4-Regular";
-  } else if (delim === "\\rfloor" || delim === "\u230B") {
-    repeat = top = "\u23A5";
-    bottom = "\u23A6";
-    font = "Size4-Regular";
-  } else if (delim === "\\rceil" || delim === "\u2309") {
-    top = "\u23A4";
-    repeat = bottom = "\u23A5";
-    font = "Size4-Regular";
-  } else if (delim === "(" || delim === "\\lparen") {
-    top = "\u239B";
-    repeat = "\u239C";
-    bottom = "\u239D";
-    font = "Size4-Regular";
-  } else if (delim === ")" || delim === "\\rparen") {
-    top = "\u239E";
-    repeat = "\u239F";
-    bottom = "\u23A0";
-    font = "Size4-Regular";
-  } else if (delim === "\\{" || delim === "\\lbrace") {
-    top = "\u23A7";
-    middle = "\u23A8";
-    bottom = "\u23A9";
-    repeat = "\u23AA";
-    font = "Size4-Regular";
-  } else if (delim === "\\}" || delim === "\\rbrace") {
-    top = "\u23AB";
-    middle = "\u23AC";
-    bottom = "\u23AD";
-    repeat = "\u23AA";
-    font = "Size4-Regular";
-  } else if (delim === "\\lgroup" || delim === "\u27EE") {
-    top = "\u23A7";
-    bottom = "\u23A9";
-    repeat = "\u23AA";
-    font = "Size4-Regular";
-  } else if (delim === "\\rgroup" || delim === "\u27EF") {
-    top = "\u23AB";
-    bottom = "\u23AD";
-    repeat = "\u23AA";
-    font = "Size4-Regular";
-  } else if (delim === "\\lmoustache" || delim === "\u23B0") {
-    top = "\u23A7";
-    bottom = "\u23AD";
-    repeat = "\u23AA";
-    font = "Size4-Regular";
-  } else if (delim === "\\rmoustache" || delim === "\u23B1") {
-    top = "\u23AB";
-    bottom = "\u23A9";
-    repeat = "\u23AA";
-    font = "Size4-Regular";
-  } // Get the metrics of the four sections
-
-
-  var topMetrics = delimiter_getMetrics(top, font, mode);
-  var topHeightTotal = topMetrics.height + topMetrics.depth;
-  var repeatMetrics = delimiter_getMetrics(repeat, font, mode);
-  var repeatHeightTotal = repeatMetrics.height + repeatMetrics.depth;
-  var bottomMetrics = delimiter_getMetrics(bottom, font, mode);
-  var bottomHeightTotal = bottomMetrics.height + bottomMetrics.depth;
-  var middleHeightTotal = 0;
-  var middleFactor = 1;
-
-  if (middle !== null) {
-    var middleMetrics = delimiter_getMetrics(middle, font, mode);
-    middleHeightTotal = middleMetrics.height + middleMetrics.depth;
-    middleFactor = 2; // repeat symmetrically above and below middle
-  } // Calcuate the minimal height that the delimiter can have.
-  // It is at least the size of the top, bottom, and optional middle combined.
-
-
-  var minHeight = topHeightTotal + bottomHeightTotal + middleHeightTotal; // Compute the number of copies of the repeat symbol we will need
-
-  var repeatCount = Math.max(0, Math.ceil((heightTotal - minHeight) / (middleFactor * repeatHeightTotal))); // Compute the total height of the delimiter including all the symbols
-
-  var realHeightTotal = minHeight + repeatCount * middleFactor * repeatHeightTotal; // The center of the delimiter is placed at the center of the axis. Note
-  // that in this context, "center" means that the delimiter should be
-  // centered around the axis in the current style, while normally it is
-  // centered around the axis in textstyle.
-
-  var axisHeight = options.fontMetrics().axisHeight;
-
-  if (center) {
-    axisHeight *= options.sizeMultiplier;
-  } // Calculate the depth
-
-
-  var depth = realHeightTotal / 2 - axisHeight; // This function differs from the TeX procedure in one way.
-  // We shift each repeat element downwards by 0.005em, to prevent a gap
-  // due to browser floating point rounding error.
-  // Then, at the last element-to element joint, we add one extra repeat
-  // element to cover the gap created by the shifts.
-  // Find the shift needed to align the upper end of the extra element at a point
-  // 0.005em above the lower end of the top element.
-
-  var shiftOfExtraElement = (repeatCount + 1) * 0.005 - repeatHeightTotal; // Now, we start building the pieces that will go into the vlist
-  // Keep a list of the inner pieces
-
-  var inners = []; // Add the bottom symbol
-
-  inners.push(delimiter_makeInner(bottom, font, mode));
-
-  if (middle === null) {
-    // Add that many symbols
-    for (var i = 0; i < repeatCount; i++) {
-      inners.push(lap); // overlap
-
-      inners.push(delimiter_makeInner(repeat, font, mode));
-    }
-  } else {
-    // When there is a middle bit, we need the middle part and two repeated
-    // sections
-    for (var _i = 0; _i < repeatCount; _i++) {
-      inners.push(lap);
-      inners.push(delimiter_makeInner(repeat, font, mode));
-    } // Insert one extra repeat element.
-
-
-    inners.push({
-      type: "kern",
-      size: shiftOfExtraElement
-    });
-    inners.push(delimiter_makeInner(repeat, font, mode));
-    inners.push(lap); // Now insert the middle of the brace.
-
-    inners.push(delimiter_makeInner(middle, font, mode));
-
-    for (var _i2 = 0; _i2 < repeatCount; _i2++) {
-      inners.push(lap);
-      inners.push(delimiter_makeInner(repeat, font, mode));
-    }
-  } // To cover the gap create by the overlaps, insert one more repeat element,
-  // at a position that juts 0.005 above the bottom of the top element.
-
-
-  inners.push({
-    type: "kern",
-    size: shiftOfExtraElement
-  });
-  inners.push(delimiter_makeInner(repeat, font, mode));
-  inners.push(lap); // Add the top symbol
-
-  inners.push(delimiter_makeInner(top, font, mode)); // Finally, build the vlist
-
-  var newOptions = options.havingBaseStyle(src_Style.TEXT);
-  var inner = buildCommon.makeVList({
-    positionType: "bottom",
-    positionData: depth,
-    children: inners
-  }, newOptions);
-  return delimiter_styleWrap(buildCommon.makeSpan(["delimsizing", "mult"], [inner], newOptions), src_Style.TEXT, options, classes);
-}; // All surds have 0.08em padding above the viniculum inside the SVG.
-// That keeps browser span height rounding error from pinching the line.
-
-
-var vbPad = 80; // padding above the surd, measured inside the viewBox.
-
-var emPad = 0.08; // padding, in ems, measured in the document.
-
-var delimiter_sqrtSvg = function sqrtSvg(sqrtName, height, viewBoxHeight, extraViniculum, options) {
-  var path = sqrtPath(sqrtName, extraViniculum, viewBoxHeight);
-  var pathNode = new domTree_PathNode(sqrtName, path);
-  var svg = new SvgNode([pathNode], {
-    // Note: 1000:1 ratio of viewBox to document em width.
-    "width": "400em",
-    "height": height + "em",
-    "viewBox": "0 0 400000 " + viewBoxHeight,
-    "preserveAspectRatio": "xMinYMin slice"
-  });
-  return buildCommon.makeSvgSpan(["hide-tail"], [svg], options);
-};
-/**
- * Make a sqrt image of the given height,
- */
-
-
-var makeSqrtImage = function makeSqrtImage(height, options) {
-  // Define a newOptions that removes the effect of size changes such as \Huge.
-  // We don't pick different a height surd for \Huge. For it, we scale up.
-  var newOptions = options.havingBaseSizing(); // Pick the desired surd glyph from a sequence of surds.
-
-  var delim = traverseSequence("\\surd", height * newOptions.sizeMultiplier, stackLargeDelimiterSequence, newOptions);
-  var sizeMultiplier = newOptions.sizeMultiplier; // default
-  // The standard sqrt SVGs each have a 0.04em thick viniculum.
-  // If Settings.minRuleThickness is larger than that, we add extraViniculum.
-
-  var extraViniculum = Math.max(0, options.minRuleThickness - options.fontMetrics().sqrtRuleThickness); // Create a span containing an SVG image of a sqrt symbol.
-
-  var span;
-  var spanHeight = 0;
-  var texHeight = 0;
-  var viewBoxHeight = 0;
-  var advanceWidth; // We create viewBoxes with 80 units of "padding" above each surd.
-  // Then browser rounding error on the parent span height will not
-  // encroach on the ink of the viniculum. But that padding is not
-  // included in the TeX-like `height` used for calculation of
-  // vertical alignment. So texHeight = span.height < span.style.height.
-
-  if (delim.type === "small") {
-    // Get an SVG that is derived from glyph U+221A in font KaTeX-Main.
-    // 1000 unit normal glyph height.
-    viewBoxHeight = 1000 + 1000 * extraViniculum + vbPad;
-
-    if (height < 1.0) {
-      sizeMultiplier = 1.0; // mimic a \textfont radical
-    } else if (height < 1.4) {
-      sizeMultiplier = 0.7; // mimic a \scriptfont radical
-    }
-
-    spanHeight = (1.0 + extraViniculum + emPad) / sizeMultiplier;
-    texHeight = (1.00 + extraViniculum) / sizeMultiplier;
-    span = delimiter_sqrtSvg("sqrtMain", spanHeight, viewBoxHeight, extraViniculum, options);
-    span.style.minWidth = "0.853em";
-    advanceWidth = 0.833 / sizeMultiplier; // from the font.
-  } else if (delim.type === "large") {
-    // These SVGs come from fonts: KaTeX_Size1, _Size2, etc.
-    viewBoxHeight = (1000 + vbPad) * sizeToMaxHeight[delim.size];
-    texHeight = (sizeToMaxHeight[delim.size] + extraViniculum) / sizeMultiplier;
-    spanHeight = (sizeToMaxHeight[delim.size] + extraViniculum + emPad) / sizeMultiplier;
-    span = delimiter_sqrtSvg("sqrtSize" + delim.size, spanHeight, viewBoxHeight, extraViniculum, options);
-    span.style.minWidth = "1.02em";
-    advanceWidth = 1.0 / sizeMultiplier; // 1.0 from the font.
-  } else {
-    // Tall sqrt. In TeX, this would be stacked using multiple glyphs.
-    // We'll use a single SVG to accomplish the same thing.
-    spanHeight = height + extraViniculum + emPad;
-    texHeight = height + extraViniculum;
-    viewBoxHeight = Math.floor(1000 * height + extraViniculum) + vbPad;
-    span = delimiter_sqrtSvg("sqrtTall", spanHeight, viewBoxHeight, extraViniculum, options);
-    span.style.minWidth = "0.742em";
-    advanceWidth = 1.056;
-  }
-
-  span.height = texHeight;
-  span.style.height = spanHeight + "em";
-  return {
-    span: span,
-    advanceWidth: advanceWidth,
-    // Calculate the actual line width.
-    // This actually should depend on the chosen font -- e.g. \boldmath
-    // should use the thicker surd symbols from e.g. KaTeX_Main-Bold, and
-    // have thicker rules.
-    ruleWidth: (options.fontMetrics().sqrtRuleThickness + extraViniculum) * sizeMultiplier
-  };
-}; // There are three kinds of delimiters, delimiters that stack when they become
-// too large
-
-
-var stackLargeDelimiters = ["(", "\\lparen", ")", "\\rparen", "[", "\\lbrack", "]", "\\rbrack", "\\{", "\\lbrace", "\\}", "\\rbrace", "\\lfloor", "\\rfloor", "\u230A", "\u230B", "\\lceil", "\\rceil", "\u2308", "\u2309", "\\surd"]; // delimiters that always stack
-
-var stackAlwaysDelimiters = ["\\uparrow", "\\downarrow", "\\updownarrow", "\\Uparrow", "\\Downarrow", "\\Updownarrow", "|", "\\|", "\\vert", "\\Vert", "\\lvert", "\\rvert", "\\lVert", "\\rVert", "\\lgroup", "\\rgroup", "\u27EE", "\u27EF", "\\lmoustache", "\\rmoustache", "\u23B0", "\u23B1"]; // and delimiters that never stack
-
-var stackNeverDelimiters = ["<", ">", "\\langle", "\\rangle", "/", "\\backslash", "\\lt", "\\gt"]; // Metrics of the different sizes. Found by looking at TeX's output of
-// $\bigl| // \Bigl| \biggl| \Biggl| \showlists$
-// Used to create stacked delimiters of appropriate sizes in makeSizedDelim.
-
-var sizeToMaxHeight = [0, 1.2, 1.8, 2.4, 3.0];
-/**
- * Used to create a delimiter of a specific size, where `size` is 1, 2, 3, or 4.
- */
-
-var delimiter_makeSizedDelim = function makeSizedDelim(delim, size, options, mode, classes) {
-  // < and > turn into \langle and \rangle in delimiters
-  if (delim === "<" || delim === "\\lt" || delim === "\u27E8") {
-    delim = "\\langle";
-  } else if (delim === ">" || delim === "\\gt" || delim === "\u27E9") {
-    delim = "\\rangle";
-  } // Sized delimiters are never centered.
-
-
-  if (utils.contains(stackLargeDelimiters, delim) || utils.contains(stackNeverDelimiters, delim)) {
-    return delimiter_makeLargeDelim(delim, size, false, options, mode, classes);
-  } else if (utils.contains(stackAlwaysDelimiters, delim)) {
-    return delimiter_makeStackedDelim(delim, sizeToMaxHeight[size], false, options, mode, classes);
-  } else {
-    throw new src_ParseError("Illegal delimiter: '" + delim + "'");
-  }
-};
-/**
- * There are three different sequences of delimiter sizes that the delimiters
- * follow depending on the kind of delimiter. This is used when creating custom
- * sized delimiters to decide whether to create a small, large, or stacked
- * delimiter.
- *
- * In real TeX, these sequences aren't explicitly defined, but are instead
- * defined inside the font metrics. Since there are only three sequences that
- * are possible for the delimiters that TeX defines, it is easier to just encode
- * them explicitly here.
- */
-
-
-// Delimiters that never stack try small delimiters and large delimiters only
-var stackNeverDelimiterSequence = [{
-  type: "small",
-  style: src_Style.SCRIPTSCRIPT
-}, {
-  type: "small",
-  style: src_Style.SCRIPT
-}, {
-  type: "small",
-  style: src_Style.TEXT
-}, {
-  type: "large",
-  size: 1
-}, {
-  type: "large",
-  size: 2
-}, {
-  type: "large",
-  size: 3
-}, {
-  type: "large",
-  size: 4
-}]; // Delimiters that always stack try the small delimiters first, then stack
-
-var stackAlwaysDelimiterSequence = [{
-  type: "small",
-  style: src_Style.SCRIPTSCRIPT
-}, {
-  type: "small",
-  style: src_Style.SCRIPT
-}, {
-  type: "small",
-  style: src_Style.TEXT
-}, {
-  type: "stack"
-}]; // Delimiters that stack when large try the small and then large delimiters, and
-// stack afterwards
-
-var stackLargeDelimiterSequence = [{
-  type: "small",
-  style: src_Style.SCRIPTSCRIPT
-}, {
-  type: "small",
-  style: src_Style.SCRIPT
-}, {
-  type: "small",
-  style: src_Style.TEXT
-}, {
-  type: "large",
-  size: 1
-}, {
-  type: "large",
-  size: 2
-}, {
-  type: "large",
-  size: 3
-}, {
-  type: "large",
-  size: 4
-}, {
-  type: "stack"
-}];
-/**
- * Get the font used in a delimiter based on what kind of delimiter it is.
- * TODO(#963) Use more specific font family return type once that is introduced.
- */
-
-var delimTypeToFont = function delimTypeToFont(type) {
-  if (type.type === "small") {
-    return "Main-Regular";
-  } else if (type.type === "large") {
-    return "Size" + type.size + "-Regular";
-  } else if (type.type === "stack") {
-    return "Size4-Regular";
-  } else {
-    throw new Error("Add support for delim type '" + type.type + "' here.");
-  }
-};
-/**
- * Traverse a sequence of types of delimiters to decide what kind of delimiter
- * should be used to create a delimiter of the given height+depth.
- */
-
-
-var traverseSequence = function traverseSequence(delim, height, sequence, options) {
-  // Here, we choose the index we should start at in the sequences. In smaller
-  // sizes (which correspond to larger numbers in style.size) we start earlier
-  // in the sequence. Thus, scriptscript starts at index 3-3=0, script starts
-  // at index 3-2=1, text starts at 3-1=2, and display starts at min(2,3-0)=2
-  var start = Math.min(2, 3 - options.style.size);
-
-  for (var i = start; i < sequence.length; i++) {
-    if (sequence[i].type === "stack") {
-      // This is always the last delimiter, so we just break the loop now.
-      break;
-    }
-
-    var metrics = delimiter_getMetrics(delim, delimTypeToFont(sequence[i]), "math");
-    var heightDepth = metrics.height + metrics.depth; // Small delimiters are scaled down versions of the same font, so we
-    // account for the style change size.
-
-    if (sequence[i].type === "small") {
-      var newOptions = options.havingBaseStyle(sequence[i].style);
-      heightDepth *= newOptions.sizeMultiplier;
-    } // Check if the delimiter at this size works for the given height.
-
-
-    if (heightDepth > height) {
-      return sequence[i];
-    }
-  } // If we reached the end of the sequence, return the last sequence element.
-
-
-  return sequence[sequence.length - 1];
-};
-/**
- * Make a delimiter of a given height+depth, with optional centering. Here, we
- * traverse the sequences, and create a delimiter that the sequence tells us to.
- */
-
-
-var delimiter_makeCustomSizedDelim = function makeCustomSizedDelim(delim, height, center, options, mode, classes) {
-  if (delim === "<" || delim === "\\lt" || delim === "\u27E8") {
-    delim = "\\langle";
-  } else if (delim === ">" || delim === "\\gt" || delim === "\u27E9") {
-    delim = "\\rangle";
-  } // Decide what sequence to use
-
-
-  var sequence;
-
-  if (utils.contains(stackNeverDelimiters, delim)) {
-    sequence = stackNeverDelimiterSequence;
-  } else if (utils.contains(stackLargeDelimiters, delim)) {
-    sequence = stackLargeDelimiterSequence;
-  } else {
-    sequence = stackAlwaysDelimiterSequence;
-  } // Look through the sequence
-
-
-  var delimType = traverseSequence(delim, height, sequence, options); // Get the delimiter from font glyphs.
-  // Depending on the sequence element we decided on, call the
-  // appropriate function.
-
-  if (delimType.type === "small") {
-    return delimiter_makeSmallDelim(delim, delimType.style, center, options, mode, classes);
-  } else if (delimType.type === "large") {
-    return delimiter_makeLargeDelim(delim, delimType.size, center, options, mode, classes);
-  } else
-    /* if (delimType.type === "stack") */
-    {
-      return delimiter_makeStackedDelim(delim, height, center, options, mode, classes);
-    }
-};
-/**
- * Make a delimiter for use with `\left` and `\right`, given a height and depth
- * of an expression that the delimiters surround.
- */
-
-
-var makeLeftRightDelim = function makeLeftRightDelim(delim, height, depth, options, mode, classes) {
-  // We always center \left/\right delimiters, so the axis is always shifted
-  var axisHeight = options.fontMetrics().axisHeight * options.sizeMultiplier; // Taken from TeX source, tex.web, function make_left_right
-
-  var delimiterFactor = 901;
-  var delimiterExtend = 5.0 / options.fontMetrics().ptPerEm;
-  var maxDistFromAxis = Math.max(height - axisHeight, depth + axisHeight);
-  var totalHeight = Math.max( // In real TeX, calculations are done using integral values which are
-  // 65536 per pt, or 655360 per em. So, the division here truncates in
-  // TeX but doesn't here, producing different results. If we wanted to
-  // exactly match TeX's calculation, we could do
-  //   Math.floor(655360 * maxDistFromAxis / 500) *
-  //    delimiterFactor / 655360
-  // (To see the difference, compare
-  //    x^{x^{\left(\rule{0.1em}{0.68em}\right)}}
-  // in TeX and KaTeX)
-  maxDistFromAxis / 500 * delimiterFactor, 2 * maxDistFromAxis - delimiterExtend); // Finally, we defer to `makeCustomSizedDelim` with our calculated total
-  // height
-
-  return delimiter_makeCustomSizedDelim(delim, totalHeight, true, options, mode, classes);
-};
-
-/* harmony default export */ var delimiter = ({
-  sqrtImage: makeSqrtImage,
-  sizedDelim: delimiter_makeSizedDelim,
-  customSizedDelim: delimiter_makeCustomSizedDelim,
-  leftRightDelim: makeLeftRightDelim
-});
-// CONCATENATED MODULE: ./src/functions/delimsizing.js
-
-
-
-
-
-
-
-
-
-// Extra data needed for the delimiter handler down below
-var delimiterSizes = {
-  "\\bigl": {
-    mclass: "mopen",
-    size: 1
-  },
-  "\\Bigl": {
-    mclass: "mopen",
-    size: 2
-  },
-  "\\biggl": {
-    mclass: "mopen",
-    size: 3
-  },
-  "\\Biggl": {
-    mclass: "mopen",
-    size: 4
-  },
-  "\\bigr": {
-    mclass: "mclose",
-    size: 1
-  },
-  "\\Bigr": {
-    mclass: "mclose",
-    size: 2
-  },
-  "\\biggr": {
-    mclass: "mclose",
-    size: 3
-  },
-  "\\Biggr": {
-    mclass: "mclose",
-    size: 4
-  },
-  "\\bigm": {
-    mclass: "mrel",
-    size: 1
-  },
-  "\\Bigm": {
-    mclass: "mrel",
-    size: 2
-  },
-  "\\biggm": {
-    mclass: "mrel",
-    size: 3
-  },
-  "\\Biggm": {
-    mclass: "mrel",
-    size: 4
-  },
-  "\\big": {
-    mclass: "mord",
-    size: 1
-  },
-  "\\Big": {
-    mclass: "mord",
-    size: 2
-  },
-  "\\bigg": {
-    mclass: "mord",
-    size: 3
-  },
-  "\\Bigg": {
-    mclass: "mord",
-    size: 4
-  }
-};
-var delimiters = ["(", "\\lparen", ")", "\\rparen", "[", "\\lbrack", "]", "\\rbrack", "\\{", "\\lbrace", "\\}", "\\rbrace", "\\lfloor", "\\rfloor", "\u230A", "\u230B", "\\lceil", "\\rceil", "\u2308", "\u2309", "<", ">", "\\langle", "\u27E8", "\\rangle", "\u27E9", "\\lt", "\\gt", "\\lvert", "\\rvert", "\\lVert", "\\rVert", "\\lgroup", "\\rgroup", "\u27EE", "\u27EF", "\\lmoustache", "\\rmoustache", "\u23B0", "\u23B1", "/", "\\backslash", "|", "\\vert", "\\|", "\\Vert", "\\uparrow", "\\Uparrow", "\\downarrow", "\\Downarrow", "\\updownarrow", "\\Updownarrow", "."];
-
-// Delimiter functions
-function checkDelimiter(delim, context) {
-  var symDelim = checkSymbolNodeType(delim);
-
-  if (symDelim && utils.contains(delimiters, symDelim.text)) {
-    return symDelim;
-  } else {
-    throw new src_ParseError("Invalid delimiter: '" + (symDelim ? symDelim.text : JSON.stringify(delim)) + "' after '" + context.funcName + "'", delim);
-  }
-}
-
-defineFunction({
-  type: "delimsizing",
-  names: ["\\bigl", "\\Bigl", "\\biggl", "\\Biggl", "\\bigr", "\\Bigr", "\\biggr", "\\Biggr", "\\bigm", "\\Bigm", "\\biggm", "\\Biggm", "\\big", "\\Big", "\\bigg", "\\Bigg"],
-  props: {
-    numArgs: 1
-  },
-  handler: function handler(context, args) {
-    var delim = checkDelimiter(args[0], context);
-    return {
-      type: "delimsizing",
-      mode: context.parser.mode,
-      size: delimiterSizes[context.funcName].size,
-      mclass: delimiterSizes[context.funcName].mclass,
-      delim: delim.text
-    };
-  },
-  htmlBuilder: function htmlBuilder(group, options) {
-    if (group.delim === ".") {
-      // Empty delimiters still count as elements, even though they don't
-      // show anything.
-      return buildCommon.makeSpan([group.mclass]);
-    } // Use delimiter.sizedDelim to generate the delimiter.
-
-
-    return delimiter.sizedDelim(group.delim, group.size, options, group.mode, [group.mclass]);
-  },
-  mathmlBuilder: function mathmlBuilder(group) {
-    var children = [];
-
-    if (group.delim !== ".") {
-      children.push(buildMathML_makeText(group.delim, group.mode));
-    }
-
-    var node = new mathMLTree.MathNode("mo", children);
-
-    if (group.mclass === "mopen" || group.mclass === "mclose") {
-      // Only some of the delimsizing functions act as fences, and they
-      // return "mopen" or "mclose" mclass.
-      node.setAttribute("fence", "true");
-    } else {
-      // Explicitly disable fencing if it's not a fence, to override the
-      // defaults.
-      node.setAttribute("fence", "false");
-    }
-
-    return node;
-  }
-});
-
-function assertParsed(group) {
-  if (!group.body) {
-    throw new Error("Bug: The leftright ParseNode wasn't fully parsed.");
-  }
-}
-
-defineFunction({
-  type: "leftright-right",
-  names: ["\\right"],
-  props: {
-    numArgs: 1
-  },
-  handler: function handler(context, args) {
-    // \left case below triggers parsing of \right in
-    //   `const right = parser.parseFunction();`
-    // uses this return value.
-    var color = context.parser.gullet.macros.get("\\current@color");
-
-    if (color && typeof color !== "string") {
-      throw new src_ParseError("\\current@color set to non-string in \\right");
-    }
-
-    return {
-      type: "leftright-right",
-      mode: context.parser.mode,
-      delim: checkDelimiter(args[0], context).text,
-      color: color // undefined if not set via \color
-
-    };
-  }
-});
-defineFunction({
-  type: "leftright",
-  names: ["\\left"],
-  props: {
-    numArgs: 1
-  },
-  handler: function handler(context, args) {
-    var delim = checkDelimiter(args[0], context);
-    var parser = context.parser; // Parse out the implicit body
-
-    ++parser.leftrightDepth; // parseExpression stops before '\\right'
-
-    var body = parser.parseExpression(false);
-    --parser.leftrightDepth; // Check the next token
-
-    parser.expect("\\right", false);
-    var right = assertNodeType(parser.parseFunction(), "leftright-right");
-    return {
-      type: "leftright",
-      mode: parser.mode,
-      body: body,
-      left: delim.text,
-      right: right.delim,
-      rightColor: right.color
-    };
-  },
-  htmlBuilder: function htmlBuilder(group, options) {
-    assertParsed(group); // Build the inner expression
-
-    var inner = buildHTML_buildExpression(group.body, options, true, ["mopen", "mclose"]);
-    var innerHeight = 0;
-    var innerDepth = 0;
-    var hadMiddle = false; // Calculate its height and depth
-
-    for (var i = 0; i < inner.length; i++) {
-      // Property `isMiddle` not defined on `span`. See comment in
-      // "middle"'s htmlBuilder.
-      // $FlowFixMe
-      if (inner[i].isMiddle) {
-        hadMiddle = true;
-      } else {
-        innerHeight = Math.max(inner[i].height, innerHeight);
-        innerDepth = Math.max(inner[i].depth, innerDepth);
-      }
-    } // The size of delimiters is the same, regardless of what style we are
-    // in. Thus, to correctly calculate the size of delimiter we need around
-    // a group, we scale down the inner size based on the size.
-
-
-    innerHeight *= options.sizeMultiplier;
-    innerDepth *= options.sizeMultiplier;
-    var leftDelim;
-
-    if (group.left === ".") {
-      // Empty delimiters in \left and \right make null delimiter spaces.
-      leftDelim = makeNullDelimiter(options, ["mopen"]);
-    } else {
-      // Otherwise, use leftRightDelim to generate the correct sized
-      // delimiter.
-      leftDelim = delimiter.leftRightDelim(group.left, innerHeight, innerDepth, options, group.mode, ["mopen"]);
-    } // Add it to the beginning of the expression
-
-
-    inner.unshift(leftDelim); // Handle middle delimiters
-
-    if (hadMiddle) {
-      for (var _i = 1; _i < inner.length; _i++) {
-        var middleDelim = inner[_i]; // Property `isMiddle` not defined on `span`. See comment in
-        // "middle"'s htmlBuilder.
-        // $FlowFixMe
-
-        var isMiddle = middleDelim.isMiddle;
-
-        if (isMiddle) {
-          // Apply the options that were active when \middle was called
-          inner[_i] = delimiter.leftRightDelim(isMiddle.delim, innerHeight, innerDepth, isMiddle.options, group.mode, []);
-        }
-      }
-    }
-
-    var rightDelim; // Same for the right delimiter, but using color specified by \color
-
-    if (group.right === ".") {
-      rightDelim = makeNullDelimiter(options, ["mclose"]);
-    } else {
-      var colorOptions = group.rightColor ? options.withColor(group.rightColor) : options;
-      rightDelim = delimiter.leftRightDelim(group.right, innerHeight, innerDepth, colorOptions, group.mode, ["mclose"]);
-    } // Add it to the end of the expression.
-
-
-    inner.push(rightDelim);
-    return buildCommon.makeSpan(["minner"], inner, options);
-  },
-  mathmlBuilder: function mathmlBuilder(group, options) {
-    assertParsed(group);
-    var inner = buildMathML_buildExpression(group.body, options);
-
-    if (group.left !== ".") {
-      var leftNode = new mathMLTree.MathNode("mo", [buildMathML_makeText(group.left, group.mode)]);
-      leftNode.setAttribute("fence", "true");
-      inner.unshift(leftNode);
-    }
-
-    if (group.right !== ".") {
-      var rightNode = new mathMLTree.MathNode("mo", [buildMathML_makeText(group.right, group.mode)]);
-      rightNode.setAttribute("fence", "true");
-
-      if (group.rightColor) {
-        rightNode.setAttribute("mathcolor", group.rightColor);
-      }
-
-      inner.push(rightNode);
-    }
-
-    return buildMathML_makeRow(inner);
-  }
-});
-defineFunction({
-  type: "middle",
-  names: ["\\middle"],
-  props: {
-    numArgs: 1
-  },
-  handler: function handler(context, args) {
-    var delim = checkDelimiter(args[0], context);
-
-    if (!context.parser.leftrightDepth) {
-      throw new src_ParseError("\\middle without preceding \\left", delim);
-    }
-
-    return {
-      type: "middle",
-      mode: context.parser.mode,
-      delim: delim.text
-    };
-  },
-  htmlBuilder: function htmlBuilder(group, options) {
-    var middleDelim;
-
-    if (group.delim === ".") {
-      middleDelim = makeNullDelimiter(options, []);
-    } else {
-      middleDelim = delimiter.sizedDelim(group.delim, 1, options, group.mode, []);
-      var isMiddle = {
-        delim: group.delim,
-        options: options
-      }; // Property `isMiddle` not defined on `span`. It is only used in
-      // this file above.
-      // TODO: Fix this violation of the `span` type and possibly rename
-      // things since `isMiddle` sounds like a boolean, but is a struct.
-      // $FlowFixMe
-
-      middleDelim.isMiddle = isMiddle;
-    }
-
-    return middleDelim;
-  },
-  mathmlBuilder: function mathmlBuilder(group, options) {
-    // A Firefox \middle will strech a character vertically only if it
-    // is in the fence part of the operator dictionary at:
-    // https://www.w3.org/TR/MathML3/appendixc.html.
-    // So we need to avoid U+2223 and use plain "|" instead.
-    var textNode = group.delim === "\\vert" || group.delim === "|" ? buildMathML_makeText("|", "text") : buildMathML_makeText(group.delim, group.mode);
-    var middleNode = new mathMLTree.MathNode("mo", [textNode]);
-    middleNode.setAttribute("fence", "true"); // MathML gives 5/18em spacing to each <mo> element.
-    // \middle should get delimiter spacing instead.
-
-    middleNode.setAttribute("lspace", "0.05em");
-    middleNode.setAttribute("rspace", "0.05em");
-    return middleNode;
-  }
-});
-// CONCATENATED MODULE: ./src/functions/enclose.js
-
-
-
-
-
-
-
-
-
-var enclose_htmlBuilder = function htmlBuilder(group, options) {
-  // \cancel, \bcancel, \xcancel, \sout, \fbox, \colorbox, \fcolorbox
-  // Some groups can return document fragments.  Handle those by wrapping
-  // them in a span.
-  var inner = buildCommon.wrapFragment(buildHTML_buildGroup(group.body, options), options);
-  var label = group.label.substr(1);
-  var scale = options.sizeMultiplier;
-  var img;
-  var imgShift = 0; // In the LaTeX cancel package, line geometry is slightly different
-  // depending on whether the subject is wider than it is tall, or vice versa.
-  // We don't know the width of a group, so as a proxy, we test if
-  // the subject is a single character. This captures most of the
-  // subjects that should get the "tall" treatment.
-
-  var isSingleChar = utils.isCharacterBox(group.body);
-
-  if (label === "sout") {
-    img = buildCommon.makeSpan(["stretchy", "sout"]);
-    img.height = options.fontMetrics().defaultRuleThickness / scale;
-    imgShift = -0.5 * options.fontMetrics().xHeight;
-  } else {
-    // Add horizontal padding
-    if (/cancel/.test(label)) {
-      if (!isSingleChar) {
-        inner.classes.push("cancel-pad");
-      }
-    } else {
-      inner.classes.push("boxpad");
-    } // Add vertical padding
-
-
-    var vertPad = 0;
-    var ruleThickness = 0; // ref: cancel package: \advance\totalheight2\p@ % "+2"
-
-    if (/box/.test(label)) {
-      ruleThickness = Math.max(options.fontMetrics().fboxrule, // default
-      options.minRuleThickness // User override.
-      );
-      vertPad = options.fontMetrics().fboxsep + (label === "colorbox" ? 0 : ruleThickness);
-    } else {
-      vertPad = isSingleChar ? 0.2 : 0;
-    }
-
-    img = stretchy.encloseSpan(inner, label, vertPad, options);
-
-    if (/fbox|boxed|fcolorbox/.test(label)) {
-      img.style.borderStyle = "solid";
-      img.style.borderWidth = ruleThickness + "em";
-    }
-
-    imgShift = inner.depth + vertPad;
-
-    if (group.backgroundColor) {
-      img.style.backgroundColor = group.backgroundColor;
-
-      if (group.borderColor) {
-        img.style.borderColor = group.borderColor;
-      }
-    }
-  }
-
-  var vlist;
-
-  if (group.backgroundColor) {
-    vlist = buildCommon.makeVList({
-      positionType: "individualShift",
-      children: [// Put the color background behind inner;
-      {
-        type: "elem",
-        elem: img,
-        shift: imgShift
-      }, {
-        type: "elem",
-        elem: inner,
-        shift: 0
-      }]
-    }, options);
-  } else {
-    vlist = buildCommon.makeVList({
-      positionType: "individualShift",
-      children: [// Write the \cancel stroke on top of inner.
-      {
-        type: "elem",
-        elem: inner,
-        shift: 0
-      }, {
-        type: "elem",
-        elem: img,
-        shift: imgShift,
-        wrapperClasses: /cancel/.test(label) ? ["svg-align"] : []
-      }]
-    }, options);
-  }
-
-  if (/cancel/.test(label)) {
-    // The cancel package documentation says that cancel lines add their height
-    // to the expression, but tests show that isn't how it actually works.
-    vlist.height = inner.height;
-    vlist.depth = inner.depth;
-  }
-
-  if (/cancel/.test(label) && !isSingleChar) {
-    // cancel does not create horiz space for its line extension.
-    return buildCommon.makeSpan(["mord", "cancel-lap"], [vlist], options);
-  } else {
-    return buildCommon.makeSpan(["mord"], [vlist], options);
-  }
-};
-
-var enclose_mathmlBuilder = function mathmlBuilder(group, options) {
-  var fboxsep = 0;
-  var node = new mathMLTree.MathNode(group.label.indexOf("colorbox") > -1 ? "mpadded" : "menclose", [buildMathML_buildGroup(group.body, options)]);
-
-  switch (group.label) {
-    case "\\cancel":
-      node.setAttribute("notation", "updiagonalstrike");
-      break;
-
-    case "\\bcancel":
-      node.setAttribute("notation", "downdiagonalstrike");
-      break;
-
-    case "\\sout":
-      node.setAttribute("notation", "horizontalstrike");
-      break;
-
-    case "\\fbox":
-      node.setAttribute("notation", "box");
-      break;
-
-    case "\\fcolorbox":
-    case "\\colorbox":
-      // <menclose> doesn't have a good notation option. So use <mpadded>
-      // instead. Set some attributes that come included with <menclose>.
-      fboxsep = options.fontMetrics().fboxsep * options.fontMetrics().ptPerEm;
-      node.setAttribute("width", "+" + 2 * fboxsep + "pt");
-      node.setAttribute("height", "+" + 2 * fboxsep + "pt");
-      node.setAttribute("lspace", fboxsep + "pt"); //
-
-      node.setAttribute("voffset", fboxsep + "pt");
-
-      if (group.label === "\\fcolorbox") {
-        var thk = Math.max(options.fontMetrics().fboxrule, // default
-        options.minRuleThickness // user override
-        );
-        node.setAttribute("style", "border: " + thk + "em solid " + String(group.borderColor));
-      }
-
-      break;
-
-    case "\\xcancel":
-      node.setAttribute("notation", "updiagonalstrike downdiagonalstrike");
-      break;
-  }
-
-  if (group.backgroundColor) {
-    node.setAttribute("mathbackground", group.backgroundColor);
-  }
-
-  return node;
-};
-
-defineFunction({
-  type: "enclose",
-  names: ["\\colorbox"],
-  props: {
-    numArgs: 2,
-    allowedInText: true,
-    greediness: 3,
-    argTypes: ["color", "text"]
-  },
-  handler: function handler(_ref, args, optArgs) {
-    var parser = _ref.parser,
-        funcName = _ref.funcName;
-    var color = assertNodeType(args[0], "color-token").color;
-    var body = args[1];
-    return {
-      type: "enclose",
-      mode: parser.mode,
-      label: funcName,
-      backgroundColor: color,
-      body: body
-    };
-  },
-  htmlBuilder: enclose_htmlBuilder,
-  mathmlBuilder: enclose_mathmlBuilder
-});
-defineFunction({
-  type: "enclose",
-  names: ["\\fcolorbox"],
-  props: {
-    numArgs: 3,
-    allowedInText: true,
-    greediness: 3,
-    argTypes: ["color", "color", "text"]
-  },
-  handler: function handler(_ref2, args, optArgs) {
-    var parser = _ref2.parser,
-        funcName = _ref2.funcName;
-    var borderColor = assertNodeType(args[0], "color-token").color;
-    var backgroundColor = assertNodeType(args[1], "color-token").color;
-    var body = args[2];
-    return {
-      type: "enclose",
-      mode: parser.mode,
-      label: funcName,
-      backgroundColor: backgroundColor,
-      borderColor: borderColor,
-      body: body
-    };
-  },
-  htmlBuilder: enclose_htmlBuilder,
-  mathmlBuilder: enclose_mathmlBuilder
-});
-defineFunction({
-  type: "enclose",
-  names: ["\\fbox"],
-  props: {
-    numArgs: 1,
-    argTypes: ["hbox"],
-    allowedInText: true
-  },
-  handler: function handler(_ref3, args) {
-    var parser = _ref3.parser;
-    return {
-      type: "enclose",
-      mode: parser.mode,
-      label: "\\fbox",
-      body: args[0]
-    };
-  }
-});
-defineFunction({
-  type: "enclose",
-  names: ["\\cancel", "\\bcancel", "\\xcancel", "\\sout"],
-  props: {
-    numArgs: 1
-  },
-  handler: function handler(_ref4, args, optArgs) {
-    var parser = _ref4.parser,
-        funcName = _ref4.funcName;
-    var body = args[0];
-    return {
-      type: "enclose",
-      mode: parser.mode,
-      label: funcName,
-      body: body
-    };
-  },
-  htmlBuilder: enclose_htmlBuilder,
-  mathmlBuilder: enclose_mathmlBuilder
-});
-// CONCATENATED MODULE: ./src/defineEnvironment.js
-
-
-/**
- * All registered environments.
- * `environments.js` exports this same dictionary again and makes it public.
- * `Parser.js` requires this dictionary via `environments.js`.
- */
-var _environments = {};
-function defineEnvironment(_ref) {
-  var type = _ref.type,
-      names = _ref.names,
-      props = _ref.props,
-      handler = _ref.handler,
-      htmlBuilder = _ref.htmlBuilder,
-      mathmlBuilder = _ref.mathmlBuilder;
-  // Set default values of environments.
-  var data = {
-    type: type,
-    numArgs: props.numArgs || 0,
-    greediness: 1,
-    allowedInText: false,
-    numOptionalArgs: 0,
-    handler: handler
-  };
-
-  for (var i = 0; i < names.length; ++i) {
-    // TODO: The value type of _environments should be a type union of all
-    // possible `EnvSpec<>` possibilities instead of `EnvSpec<*>`, which is
-    // an existential type.
-    // $FlowFixMe
-    _environments[names[i]] = data;
-  }
-
-  if (htmlBuilder) {
-    _htmlGroupBuilders[type] = htmlBuilder;
-  }
-
-  if (mathmlBuilder) {
-    _mathmlGroupBuilders[type] = mathmlBuilder;
-  }
-}
-// CONCATENATED MODULE: ./src/environments/array.js
-
-
-
-
-
-
-
-
-
-
-
-
-
-function getHLines(parser) {
-  // Return an array. The array length = number of hlines.
-  // Each element in the array tells if the line is dashed.
-  var hlineInfo = [];
-  parser.consumeSpaces();
-  var nxt = parser.fetch().text;
-
-  while (nxt === "\\hline" || nxt === "\\hdashline") {
-    parser.consume();
-    hlineInfo.push(nxt === "\\hdashline");
-    parser.consumeSpaces();
-    nxt = parser.fetch().text;
-  }
-
-  return hlineInfo;
-}
-/**
- * Parse the body of the environment, with rows delimited by \\ and
- * columns delimited by &, and create a nested list in row-major order
- * with one group per cell.  If given an optional argument style
- * ("text", "display", etc.), then each cell is cast into that style.
- */
-
-
-function parseArray(parser, _ref, style) {
-  var hskipBeforeAndAfter = _ref.hskipBeforeAndAfter,
-      addJot = _ref.addJot,
-      cols = _ref.cols,
-      arraystretch = _ref.arraystretch,
-      colSeparationType = _ref.colSeparationType;
-  // Parse body of array with \\ temporarily mapped to \cr
-  parser.gullet.beginGroup();
-  parser.gullet.macros.set("\\\\", "\\cr"); // Get current arraystretch if it's not set by the environment
-
-  if (!arraystretch) {
-    var stretch = parser.gullet.expandMacroAsText("\\arraystretch");
-
-    if (stretch == null) {
-      // Default \arraystretch from lttab.dtx
-      arraystretch = 1;
-    } else {
-      arraystretch = parseFloat(stretch);
-
-      if (!arraystretch || arraystretch < 0) {
-        throw new src_ParseError("Invalid \\arraystretch: " + stretch);
-      }
-    }
-  } // Start group for first cell
-
-
-  parser.gullet.beginGroup();
-  var row = [];
-  var body = [row];
-  var rowGaps = [];
-  var hLinesBeforeRow = []; // Test for \hline at the top of the array.
-
-  hLinesBeforeRow.push(getHLines(parser));
-
-  while (true) {
-    // eslint-disable-line no-constant-condition
-    // Parse each cell in its own group (namespace)
-    var cell = parser.parseExpression(false, "\\cr");
-    parser.gullet.endGroup();
-    parser.gullet.beginGroup();
-    cell = {
-      type: "ordgroup",
-      mode: parser.mode,
-      body: cell
-    };
-
-    if (style) {
-      cell = {
-        type: "styling",
-        mode: parser.mode,
-        style: style,
-        body: [cell]
-      };
-    }
-
-    row.push(cell);
-    var next = parser.fetch().text;
-
-    if (next === "&") {
-      parser.consume();
-    } else if (next === "\\end") {
-      // Arrays terminate newlines with `\crcr` which consumes a `\cr` if
-      // the last line is empty.
-      // NOTE: Currently, `cell` is the last item added into `row`.
-      if (row.length === 1 && cell.type === "styling" && cell.body[0].body.length === 0) {
-        body.pop();
-      }
-
-      if (hLinesBeforeRow.length < body.length + 1) {
-        hLinesBeforeRow.push([]);
-      }
-
-      break;
-    } else if (next === "\\cr") {
-      var cr = assertNodeType(parser.parseFunction(), "cr");
-      rowGaps.push(cr.size); // check for \hline(s) following the row separator
-
-      hLinesBeforeRow.push(getHLines(parser));
-      row = [];
-      body.push(row);
-    } else {
-      throw new src_ParseError("Expected & or \\\\ or \\cr or \\end", parser.nextToken);
-    }
-  } // End cell group
-
-
-  parser.gullet.endGroup(); // End array group defining \\
-
-  parser.gullet.endGroup();
-  return {
-    type: "array",
-    mode: parser.mode,
-    addJot: addJot,
-    arraystretch: arraystretch,
-    body: body,
-    cols: cols,
-    rowGaps: rowGaps,
-    hskipBeforeAndAfter: hskipBeforeAndAfter,
-    hLinesBeforeRow: hLinesBeforeRow,
-    colSeparationType: colSeparationType
-  };
-} // Decides on a style for cells in an array according to whether the given
-// environment name starts with the letter 'd'.
-
-
-function dCellStyle(envName) {
-  if (envName.substr(0, 1) === "d") {
-    return "display";
-  } else {
-    return "text";
-  }
-}
-
-var array_htmlBuilder = function htmlBuilder(group, options) {
-  var r;
-  var c;
-  var nr = group.body.length;
-  var hLinesBeforeRow = group.hLinesBeforeRow;
-  var nc = 0;
-  var body = new Array(nr);
-  var hlines = [];
-  var ruleThickness = Math.max( // From LaTeX \showthe\arrayrulewidth. Equals 0.04 em.
-  options.fontMetrics().arrayRuleWidth, options.minRuleThickness // User override.
-  ); // Horizontal spacing
-
-  var pt = 1 / options.fontMetrics().ptPerEm;
-  var arraycolsep = 5 * pt; // default value, i.e. \arraycolsep in article.cls
-
-  if (group.colSeparationType && group.colSeparationType === "small") {
-    // We're in a {smallmatrix}. Default column space is \thickspace,
-    // i.e. 5/18em = 0.2778em, per amsmath.dtx for {smallmatrix}.
-    // But that needs adjustment because LaTeX applies \scriptstyle to the
-    // entire array, including the colspace, but this function applies
-    // \scriptstyle only inside each element.
-    var localMultiplier = options.havingStyle(src_Style.SCRIPT).sizeMultiplier;
-    arraycolsep = 0.2778 * (localMultiplier / options.sizeMultiplier);
-  } // Vertical spacing
-
-
-  var baselineskip = 12 * pt; // see size10.clo
-  // Default \jot from ltmath.dtx
-  // TODO(edemaine): allow overriding \jot via \setlength (#687)
-
-  var jot = 3 * pt;
-  var arrayskip = group.arraystretch * baselineskip;
-  var arstrutHeight = 0.7 * arrayskip; // \strutbox in ltfsstrc.dtx and
-
-  var arstrutDepth = 0.3 * arrayskip; // \@arstrutbox in lttab.dtx
-
-  var totalHeight = 0; // Set a position for \hline(s) at the top of the array, if any.
-
-  function setHLinePos(hlinesInGap) {
-    for (var i = 0; i < hlinesInGap.length; ++i) {
-      if (i > 0) {
-        totalHeight += 0.25;
-      }
-
-      hlines.push({
-        pos: totalHeight,
-        isDashed: hlinesInGap[i]
-      });
-    }
-  }
-
-  setHLinePos(hLinesBeforeRow[0]);
-
-  for (r = 0; r < group.body.length; ++r) {
-    var inrow = group.body[r];
-    var height = arstrutHeight; // \@array adds an \@arstrut
-
-    var depth = arstrutDepth; // to each tow (via the template)
-
-    if (nc < inrow.length) {
-      nc = inrow.length;
-    }
-
-    var outrow = new Array(inrow.length);
-
-    for (c = 0; c < inrow.length; ++c) {
-      var elt = buildHTML_buildGroup(inrow[c], options);
-
-      if (depth < elt.depth) {
-        depth = elt.depth;
-      }
-
-      if (height < elt.height) {
-        height = elt.height;
-      }
-
-      outrow[c] = elt;
-    }
-
-    var rowGap = group.rowGaps[r];
-    var gap = 0;
-
-    if (rowGap) {
-      gap = units_calculateSize(rowGap, options);
-
-      if (gap > 0) {
-        // \@argarraycr
-        gap += arstrutDepth;
-
-        if (depth < gap) {
-          depth = gap; // \@xargarraycr
-        }
-
-        gap = 0;
-      }
-    } // In AMS multiline environments such as aligned and gathered, rows
-    // correspond to lines that have additional \jot added to the
-    // \baselineskip via \openup.
-
-
-    if (group.addJot) {
-      depth += jot;
-    }
-
-    outrow.height = height;
-    outrow.depth = depth;
-    totalHeight += height;
-    outrow.pos = totalHeight;
-    totalHeight += depth + gap; // \@yargarraycr
-
-    body[r] = outrow; // Set a position for \hline(s), if any.
-
-    setHLinePos(hLinesBeforeRow[r + 1]);
-  }
-
-  var offset = totalHeight / 2 + options.fontMetrics().axisHeight;
-  var colDescriptions = group.cols || [];
-  var cols = [];
-  var colSep;
-  var colDescrNum;
-
-  for (c = 0, colDescrNum = 0; // Continue while either there are more columns or more column
-  // descriptions, so trailing separators don't get lost.
-  c < nc || colDescrNum < colDescriptions.length; ++c, ++colDescrNum) {
-    var colDescr = colDescriptions[colDescrNum] || {};
-    var firstSeparator = true;
-
-    while (colDescr.type === "separator") {
-      // If there is more than one separator in a row, add a space
-      // between them.
-      if (!firstSeparator) {
-        colSep = buildCommon.makeSpan(["arraycolsep"], []);
-        colSep.style.width = options.fontMetrics().doubleRuleSep + "em";
-        cols.push(colSep);
-      }
-
-      if (colDescr.separator === "|" || colDescr.separator === ":") {
-        var lineType = colDescr.separator === "|" ? "solid" : "dashed";
-        var separator = buildCommon.makeSpan(["vertical-separator"], [], options);
-        separator.style.height = totalHeight + "em";
-        separator.style.borderRightWidth = ruleThickness + "em";
-        separator.style.borderRightStyle = lineType;
-        separator.style.margin = "0 -" + ruleThickness / 2 + "em";
-        separator.style.verticalAlign = -(totalHeight - offset) + "em";
-        cols.push(separator);
-      } else {
-        throw new src_ParseError("Invalid separator type: " + colDescr.separator);
-      }
-
-      colDescrNum++;
-      colDescr = colDescriptions[colDescrNum] || {};
-      firstSeparator = false;
-    }
-
-    if (c >= nc) {
-      continue;
-    }
-
-    var sepwidth = void 0;
-
-    if (c > 0 || group.hskipBeforeAndAfter) {
-      sepwidth = utils.deflt(colDescr.pregap, arraycolsep);
-
-      if (sepwidth !== 0) {
-        colSep = buildCommon.makeSpan(["arraycolsep"], []);
-        colSep.style.width = sepwidth + "em";
-        cols.push(colSep);
-      }
-    }
-
-    var col = [];
-
-    for (r = 0; r < nr; ++r) {
-      var row = body[r];
-      var elem = row[c];
-
-      if (!elem) {
-        continue;
-      }
-
-      var shift = row.pos - offset;
-      elem.depth = row.depth;
-      elem.height = row.height;
-      col.push({
-        type: "elem",
-        elem: elem,
-        shift: shift
-      });
-    }
-
-    col = buildCommon.makeVList({
-      positionType: "individualShift",
-      children: col
-    }, options);
-    col = buildCommon.makeSpan(["col-align-" + (colDescr.align || "c")], [col]);
-    cols.push(col);
-
-    if (c < nc - 1 || group.hskipBeforeAndAfter) {
-      sepwidth = utils.deflt(colDescr.postgap, arraycolsep);
-
-      if (sepwidth !== 0) {
-        colSep = buildCommon.makeSpan(["arraycolsep"], []);
-        colSep.style.width = sepwidth + "em";
-        cols.push(colSep);
-      }
-    }
-  }
-
-  body = buildCommon.makeSpan(["mtable"], cols); // Add \hline(s), if any.
-
-  if (hlines.length > 0) {
-    var line = buildCommon.makeLineSpan("hline", options, ruleThickness);
-    var dashes = buildCommon.makeLineSpan("hdashline", options, ruleThickness);
-    var vListElems = [{
-      type: "elem",
-      elem: body,
-      shift: 0
-    }];
-
-    while (hlines.length > 0) {
-      var hline = hlines.pop();
-      var lineShift = hline.pos - offset;
-
-      if (hline.isDashed) {
-        vListElems.push({
-          type: "elem",
-          elem: dashes,
-          shift: lineShift
-        });
-      } else {
-        vListElems.push({
-          type: "elem",
-          elem: line,
-          shift: lineShift
-        });
-      }
-    }
-
-    body = buildCommon.makeVList({
-      positionType: "individualShift",
-      children: vListElems
-    }, options);
-  }
-
-  return buildCommon.makeSpan(["mord"], [body], options);
-};
-
-var alignMap = {
-  c: "center ",
-  l: "left ",
-  r: "right "
-};
-
-var array_mathmlBuilder = function mathmlBuilder(group, options) {
-  var table = new mathMLTree.MathNode("mtable", group.body.map(function (row) {
-    return new mathMLTree.MathNode("mtr", row.map(function (cell) {
-      return new mathMLTree.MathNode("mtd", [buildMathML_buildGroup(cell, options)]);
-    }));
-  })); // Set column alignment, row spacing, column spacing, and
-  // array lines by setting attributes on the table element.
-  // Set the row spacing. In MathML, we specify a gap distance.
-  // We do not use rowGap[] because MathML automatically increases
-  // cell height with the height/depth of the element content.
-  // LaTeX \arraystretch multiplies the row baseline-to-baseline distance.
-  // We simulate this by adding (arraystretch - 1)em to the gap. This
-  // does a reasonable job of adjusting arrays containing 1 em tall content.
-  // The 0.16 and 0.09 values are found emprically. They produce an array
-  // similar to LaTeX and in which content does not interfere with \hines.
-
-  var gap = group.arraystretch === 0.5 ? 0.1 // {smallmatrix}, {subarray}
-  : 0.16 + group.arraystretch - 1 + (group.addJot ? 0.09 : 0);
-  table.setAttribute("rowspacing", gap + "em"); // MathML table lines go only between cells.
-  // To place a line on an edge we'll use <menclose>, if necessary.
-
-  var menclose = "";
-  var align = "";
-
-  if (group.cols) {
-    // Find column alignment, column spacing, and  vertical lines.
-    var cols = group.cols;
-    var columnLines = "";
-    var prevTypeWasAlign = false;
-    var iStart = 0;
-    var iEnd = cols.length;
-
-    if (cols[0].type === "separator") {
-      menclose += "top ";
-      iStart = 1;
-    }
-
-    if (cols[cols.length - 1].type === "separator") {
-      menclose += "bottom ";
-      iEnd -= 1;
-    }
-
-    for (var i = iStart; i < iEnd; i++) {
-      if (cols[i].type === "align") {
-        align += alignMap[cols[i].align];
-
-        if (prevTypeWasAlign) {
-          columnLines += "none ";
-        }
-
-        prevTypeWasAlign = true;
-      } else if (cols[i].type === "separator") {
-        // MathML accepts only single lines between cells.
-        // So we read only the first of consecutive separators.
-        if (prevTypeWasAlign) {
-          columnLines += cols[i].separator === "|" ? "solid " : "dashed ";
-          prevTypeWasAlign = false;
-        }
-      }
-    }
-
-    table.setAttribute("columnalign", align.trim());
-
-    if (/[sd]/.test(columnLines)) {
-      table.setAttribute("columnlines", columnLines.trim());
-    }
-  } // Set column spacing.
-
-
-  if (group.colSeparationType === "align") {
-    var _cols = group.cols || [];
-
-    var spacing = "";
-
-    for (var _i = 1; _i < _cols.length; _i++) {
-      spacing += _i % 2 ? "0em " : "1em ";
-    }
-
-    table.setAttribute("columnspacing", spacing.trim());
-  } else if (group.colSeparationType === "alignat") {
-    table.setAttribute("columnspacing", "0em");
-  } else if (group.colSeparationType === "small") {
-    table.setAttribute("columnspacing", "0.2778em");
-  } else {
-    table.setAttribute("columnspacing", "1em");
-  } // Address \hline and \hdashline
-
-
-  var rowLines = "";
-  var hlines = group.hLinesBeforeRow;
-  menclose += hlines[0].length > 0 ? "left " : "";
-  menclose += hlines[hlines.length - 1].length > 0 ? "right " : "";
-
-  for (var _i2 = 1; _i2 < hlines.length - 1; _i2++) {
-    rowLines += hlines[_i2].length === 0 ? "none " // MathML accepts only a single line between rows. Read one element.
-    : hlines[_i2][0] ? "dashed " : "solid ";
-  }
-
-  if (/[sd]/.test(rowLines)) {
-    table.setAttribute("rowlines", rowLines.trim());
-  }
-
-  if (menclose !== "") {
-    table = new mathMLTree.MathNode("menclose", [table]);
-    table.setAttribute("notation", menclose.trim());
-  }
-
-  if (group.arraystretch && group.arraystretch < 1) {
-    // A small array. Wrap in scriptstyle so row gap is not too large.
-    table = new mathMLTree.MathNode("mstyle", [table]);
-    table.setAttribute("scriptlevel", "1");
-  }
-
-  return table;
-}; // Convenience function for aligned and alignedat environments.
-
-
-var array_alignedHandler = function alignedHandler(context, args) {
-  var cols = [];
-  var res = parseArray(context.parser, {
-    cols: cols,
-    addJot: true
-  }, "display"); // Determining number of columns.
-  // 1. If the first argument is given, we use it as a number of columns,
-  //    and makes sure that each row doesn't exceed that number.
-  // 2. Otherwise, just count number of columns = maximum number
-  //    of cells in each row ("aligned" mode -- isAligned will be true).
-  //
-  // At the same time, prepend empty group {} at beginning of every second
-  // cell in each row (starting with second cell) so that operators become
-  // binary.  This behavior is implemented in amsmath's \start@aligned.
-
-  var numMaths;
-  var numCols = 0;
-  var emptyGroup = {
-    type: "ordgroup",
-    mode: context.mode,
-    body: []
-  };
-  var ordgroup = checkNodeType(args[0], "ordgroup");
-
-  if (ordgroup) {
-    var arg0 = "";
-
-    for (var i = 0; i < ordgroup.body.length; i++) {
-      var textord = assertNodeType(ordgroup.body[i], "textord");
-      arg0 += textord.text;
-    }
-
-    numMaths = Number(arg0);
-    numCols = numMaths * 2;
-  }
-
-  var isAligned = !numCols;
-  res.body.forEach(function (row) {
-    for (var _i3 = 1; _i3 < row.length; _i3 += 2) {
-      // Modify ordgroup node within styling node
-      var styling = assertNodeType(row[_i3], "styling");
-
-      var _ordgroup = assertNodeType(styling.body[0], "ordgroup");
-
-      _ordgroup.body.unshift(emptyGroup);
-    }
-
-    if (!isAligned) {
-      // Case 1
-      var curMaths = row.length / 2;
-
-      if (numMaths < curMaths) {
-        throw new src_ParseError("Too many math in a row: " + ("expected " + numMaths + ", but got " + curMaths), row[0]);
-      }
-    } else if (numCols < row.length) {
-      // Case 2
-      numCols = row.length;
-    }
-  }); // Adjusting alignment.
-  // In aligned mode, we add one \qquad between columns;
-  // otherwise we add nothing.
-
-  for (var _i4 = 0; _i4 < numCols; ++_i4) {
-    var align = "r";
-    var pregap = 0;
-
-    if (_i4 % 2 === 1) {
-      align = "l";
-    } else if (_i4 > 0 && isAligned) {
-      // "aligned" mode.
-      pregap = 1; // add one \quad
-    }
-
-    cols[_i4] = {
-      type: "align",
-      align: align,
-      pregap: pregap,
-      postgap: 0
-    };
-  }
-
-  res.colSeparationType = isAligned ? "align" : "alignat";
-  return res;
-}; // Arrays are part of LaTeX, defined in lttab.dtx so its documentation
-// is part of the source2e.pdf file of LaTeX2e source documentation.
-// {darray} is an {array} environment where cells are set in \displaystyle,
-// as defined in nccmath.sty.
-
-
-defineEnvironment({
-  type: "array",
-  names: ["array", "darray"],
-  props: {
-    numArgs: 1
-  },
-  handler: function handler(context, args) {
-    // Since no types are specified above, the two possibilities are
-    // - The argument is wrapped in {} or [], in which case Parser's
-    //   parseGroup() returns an "ordgroup" wrapping some symbol node.
-    // - The argument is a bare symbol node.
-    var symNode = checkSymbolNodeType(args[0]);
-    var colalign = symNode ? [args[0]] : assertNodeType(args[0], "ordgroup").body;
-    var cols = colalign.map(function (nde) {
-      var node = assertSymbolNodeType(nde);
-      var ca = node.text;
-
-      if ("lcr".indexOf(ca) !== -1) {
-        return {
-          type: "align",
-          align: ca
-        };
-      } else if (ca === "|") {
-        return {
-          type: "separator",
-          separator: "|"
-        };
-      } else if (ca === ":") {
-        return {
-          type: "separator",
-          separator: ":"
-        };
-      }
-
-      throw new src_ParseError("Unknown column alignment: " + ca, nde);
-    });
-    var res = {
-      cols: cols,
-      hskipBeforeAndAfter: true // \@preamble in lttab.dtx
-
-    };
-    return parseArray(context.parser, res, dCellStyle(context.envName));
-  },
-  htmlBuilder: array_htmlBuilder,
-  mathmlBuilder: array_mathmlBuilder
-}); // The matrix environments of amsmath builds on the array environment
-// of LaTeX, which is discussed above.
-
-defineEnvironment({
-  type: "array",
-  names: ["matrix", "pmatrix", "bmatrix", "Bmatrix", "vmatrix", "Vmatrix"],
-  props: {
-    numArgs: 0
-  },
-  handler: function handler(context) {
-    var delimiters = {
-      "matrix": null,
-      "pmatrix": ["(", ")"],
-      "bmatrix": ["[", "]"],
-      "Bmatrix": ["\\{", "\\}"],
-      "vmatrix": ["|", "|"],
-      "Vmatrix": ["\\Vert", "\\Vert"]
-    }[context.envName]; // \hskip -\arraycolsep in amsmath
-
-    var payload = {
-      hskipBeforeAndAfter: false
-    };
-    var res = parseArray(context.parser, payload, dCellStyle(context.envName));
-    return delimiters ? {
-      type: "leftright",
-      mode: context.mode,
-      body: [res],
-      left: delimiters[0],
-      right: delimiters[1],
-      rightColor: undefined // \right uninfluenced by \color in array
-
-    } : res;
-  },
-  htmlBuilder: array_htmlBuilder,
-  mathmlBuilder: array_mathmlBuilder
-});
-defineEnvironment({
-  type: "array",
-  names: ["smallmatrix"],
-  props: {
-    numArgs: 0
-  },
-  handler: function handler(context) {
-    var payload = {
-      arraystretch: 0.5
-    };
-    var res = parseArray(context.parser, payload, "script");
-    res.colSeparationType = "small";
-    return res;
-  },
-  htmlBuilder: array_htmlBuilder,
-  mathmlBuilder: array_mathmlBuilder
-});
-defineEnvironment({
-  type: "array",
-  names: ["subarray"],
-  props: {
-    numArgs: 1
-  },
-  handler: function handler(context, args) {
-    // Parsing of {subarray} is similar to {array}
-    var symNode = checkSymbolNodeType(args[0]);
-    var colalign = symNode ? [args[0]] : assertNodeType(args[0], "ordgroup").body;
-    var cols = colalign.map(function (nde) {
-      var node = assertSymbolNodeType(nde);
-      var ca = node.text; // {subarray} only recognizes "l" & "c"
-
-      if ("lc".indexOf(ca) !== -1) {
-        return {
-          type: "align",
-          align: ca
-        };
-      }
-
-      throw new src_ParseError("Unknown column alignment: " + ca, nde);
-    });
-
-    if (cols.length > 1) {
-      throw new src_ParseError("{subarray} can contain only one column");
-    }
-
-    var res = {
-      cols: cols,
-      hskipBeforeAndAfter: false,
-      arraystretch: 0.5
-    };
-    res = parseArray(context.parser, res, "script");
-
-    if (res.body[0].length > 1) {
-      throw new src_ParseError("{subarray} can contain only one column");
-    }
-
-    return res;
-  },
-  htmlBuilder: array_htmlBuilder,
-  mathmlBuilder: array_mathmlBuilder
-}); // A cases environment (in amsmath.sty) is almost equivalent to
-// \def\arraystretch{1.2}%
-// \left\{\begin{array}{@{}l@{\quad}l@{}} … \end{array}\right.
-// {dcases} is a {cases} environment where cells are set in \displaystyle,
-// as defined in mathtools.sty.
-
-defineEnvironment({
-  type: "array",
-  names: ["cases", "dcases"],
-  props: {
-    numArgs: 0
-  },
-  handler: function handler(context) {
-    var payload = {
-      arraystretch: 1.2,
-      cols: [{
-        type: "align",
-        align: "l",
-        pregap: 0,
-        // TODO(kevinb) get the current style.
-        // For now we use the metrics for TEXT style which is what we were
-        // doing before.  Before attempting to get the current style we
-        // should look at TeX's behavior especially for \over and matrices.
-        postgap: 1.0
-        /* 1em quad */
-
-      }, {
-        type: "align",
-        align: "l",
-        pregap: 0,
-        postgap: 0
-      }]
-    };
-    var res = parseArray(context.parser, payload, dCellStyle(context.envName));
-    return {
-      type: "leftright",
-      mode: context.mode,
-      body: [res],
-      left: "\\{",
-      right: ".",
-      rightColor: undefined
-    };
-  },
-  htmlBuilder: array_htmlBuilder,
-  mathmlBuilder: array_mathmlBuilder
-}); // An aligned environment is like the align* environment
-// except it operates within math mode.
-// Note that we assume \nomallineskiplimit to be zero,
-// so that \strut@ is the same as \strut.
-
-defineEnvironment({
-  type: "array",
-  names: ["aligned"],
-  props: {
-    numArgs: 0
-  },
-  handler: array_alignedHandler,
-  htmlBuilder: array_htmlBuilder,
-  mathmlBuilder: array_mathmlBuilder
-}); // A gathered environment is like an array environment with one centered
-// column, but where rows are considered lines so get \jot line spacing
-// and contents are set in \displaystyle.
-
-defineEnvironment({
-  type: "array",
-  names: ["gathered"],
-  props: {
-    numArgs: 0
-  },
-  handler: function handler(context) {
-    var res = {
-      cols: [{
-        type: "align",
-        align: "c"
-      }],
-      addJot: true
-    };
-    return parseArray(context.parser, res, "display");
-  },
-  htmlBuilder: array_htmlBuilder,
-  mathmlBuilder: array_mathmlBuilder
-}); // alignat environment is like an align environment, but one must explicitly
-// specify maximum number of columns in each row, and can adjust spacing between
-// each columns.
-
-defineEnvironment({
-  type: "array",
-  names: ["alignedat"],
-  // One for numbered and for unnumbered;
-  // but, KaTeX doesn't supports math numbering yet,
-  // they make no difference for now.
-  props: {
-    numArgs: 1
-  },
-  handler: array_alignedHandler,
-  htmlBuilder: array_htmlBuilder,
-  mathmlBuilder: array_mathmlBuilder
-}); // Catch \hline outside array environment
-
-defineFunction({
-  type: "text",
-  // Doesn't matter what this is.
-  names: ["\\hline", "\\hdashline"],
-  props: {
-    numArgs: 0,
-    allowedInText: true,
-    allowedInMath: true
-  },
-  handler: function handler(context, args) {
-    throw new src_ParseError(context.funcName + " valid only within array environment");
-  }
-});
-// CONCATENATED MODULE: ./src/environments.js
-
-var environments = _environments;
-/* harmony default export */ var src_environments = (environments); // All environment definitions should be imported below
-
-
-// CONCATENATED MODULE: ./src/functions/environment.js
-
-
-
- // Environment delimiters. HTML/MathML rendering is defined in the corresponding
-// defineEnvironment definitions.
-// $FlowFixMe, "environment" handler returns an environment ParseNode
-
-defineFunction({
-  type: "environment",
-  names: ["\\begin", "\\end"],
-  props: {
-    numArgs: 1,
-    argTypes: ["text"]
-  },
-  handler: function handler(_ref, args) {
-    var parser = _ref.parser,
-        funcName = _ref.funcName;
-    var nameGroup = args[0];
-
-    if (nameGroup.type !== "ordgroup") {
-      throw new src_ParseError("Invalid environment name", nameGroup);
-    }
-
-    var envName = "";
-
-    for (var i = 0; i < nameGroup.body.length; ++i) {
-      envName += assertNodeType(nameGroup.body[i], "textord").text;
-    }
-
-    if (funcName === "\\begin") {
-      // begin...end is similar to left...right
-      if (!src_environments.hasOwnProperty(envName)) {
-        throw new src_ParseError("No such environment: " + envName, nameGroup);
-      } // Build the environment object. Arguments and other information will
-      // be made available to the begin and end methods using properties.
-
-
-      var env = src_environments[envName];
-
-      var _parser$parseArgument = parser.parseArguments("\\begin{" + envName + "}", env),
-          _args = _parser$parseArgument.args,
-          optArgs = _parser$parseArgument.optArgs;
-
-      var context = {
-        mode: parser.mode,
-        envName: envName,
-        parser: parser
-      };
-      var result = env.handler(context, _args, optArgs);
-      parser.expect("\\end", false);
-      var endNameToken = parser.nextToken;
-      var end = assertNodeType(parser.parseFunction(), "environment");
-
-      if (end.name !== envName) {
-        throw new src_ParseError("Mismatch: \\begin{" + envName + "} matched by \\end{" + end.name + "}", endNameToken);
-      }
-
-      return result;
-    }
-
-    return {
-      type: "environment",
-      mode: parser.mode,
-      name: envName,
-      nameGroup: nameGroup
-    };
-  }
-});
-// CONCATENATED MODULE: ./src/functions/mclass.js
-
-
-
-
-
-
-var mclass_makeSpan = buildCommon.makeSpan;
-
-function mclass_htmlBuilder(group, options) {
-  var elements = buildHTML_buildExpression(group.body, options, true);
-  return mclass_makeSpan([group.mclass], elements, options);
-}
-
-function mclass_mathmlBuilder(group, options) {
-  var node;
-  var inner = buildMathML_buildExpression(group.body, options);
-
-  if (group.mclass === "minner") {
-    return mathMLTree.newDocumentFragment(inner);
-  } else if (group.mclass === "mord") {
-    if (group.isCharacterBox) {
-      node = inner[0];
-      node.type = "mi";
-    } else {
-      node = new mathMLTree.MathNode("mi", inner);
-    }
-  } else {
-    if (group.isCharacterBox) {
-      node = inner[0];
-      node.type = "mo";
-    } else {
-      node = new mathMLTree.MathNode("mo", inner);
-    } // Set spacing based on what is the most likely adjacent atom type.
-    // See TeXbook p170.
-
-
-    if (group.mclass === "mbin") {
-      node.attributes.lspace = "0.22em"; // medium space
-
-      node.attributes.rspace = "0.22em";
-    } else if (group.mclass === "mpunct") {
-      node.attributes.lspace = "0em";
-      node.attributes.rspace = "0.17em"; // thinspace
-    } else if (group.mclass === "mopen" || group.mclass === "mclose") {
-      node.attributes.lspace = "0em";
-      node.attributes.rspace = "0em";
-    } // MathML <mo> default space is 5/18 em, so <mrel> needs no action.
-    // Ref: https://developer.mozilla.org/en-US/docs/Web/MathML/Element/mo
-
-  }
-
-  return node;
-} // Math class commands except \mathop
-
-
-defineFunction({
-  type: "mclass",
-  names: ["\\mathord", "\\mathbin", "\\mathrel", "\\mathopen", "\\mathclose", "\\mathpunct", "\\mathinner"],
-  props: {
-    numArgs: 1
-  },
-  handler: function handler(_ref, args) {
-    var parser = _ref.parser,
-        funcName = _ref.funcName;
-    var body = args[0];
-    return {
-      type: "mclass",
-      mode: parser.mode,
-      mclass: "m" + funcName.substr(5),
-      // TODO(kevinb): don't prefix with 'm'
-      body: defineFunction_ordargument(body),
-      isCharacterBox: utils.isCharacterBox(body)
-    };
-  },
-  htmlBuilder: mclass_htmlBuilder,
-  mathmlBuilder: mclass_mathmlBuilder
-});
-var binrelClass = function binrelClass(arg) {
-  // \binrel@ spacing varies with (bin|rel|ord) of the atom in the argument.
-  // (by rendering separately and with {}s before and after, and measuring
-  // the change in spacing).  We'll do roughly the same by detecting the
-  // atom type directly.
-  var atom = arg.type === "ordgroup" && arg.body.length ? arg.body[0] : arg;
-
-  if (atom.type === "atom" && (atom.family === "bin" || atom.family === "rel")) {
-    return "m" + atom.family;
-  } else {
-    return "mord";
-  }
-}; // \@binrel{x}{y} renders like y but as mbin/mrel/mord if x is mbin/mrel/mord.
-// This is equivalent to \binrel@{x}\binrel@@{y} in AMSTeX.
-
-defineFunction({
-  type: "mclass",
-  names: ["\\@binrel"],
-  props: {
-    numArgs: 2
-  },
-  handler: function handler(_ref2, args) {
-    var parser = _ref2.parser;
-    return {
-      type: "mclass",
-      mode: parser.mode,
-      mclass: binrelClass(args[0]),
-      body: [args[1]],
-      isCharacterBox: utils.isCharacterBox(args[1])
-    };
-  }
-}); // Build a relation or stacked op by placing one symbol on top of another
-
-defineFunction({
-  type: "mclass",
-  names: ["\\stackrel", "\\overset", "\\underset"],
-  props: {
-    numArgs: 2
-  },
-  handler: function handler(_ref3, args) {
-    var parser = _ref3.parser,
-        funcName = _ref3.funcName;
-    var baseArg = args[1];
-    var shiftedArg = args[0];
-    var mclass;
-
-    if (funcName !== "\\stackrel") {
-      // LaTeX applies \binrel spacing to \overset and \underset.
-      mclass = binrelClass(baseArg);
-    } else {
-      mclass = "mrel"; // for \stackrel
-    }
-
-    var baseOp = {
-      type: "op",
-      mode: baseArg.mode,
-      limits: true,
-      alwaysHandleSupSub: true,
-      parentIsSupSub: false,
-      symbol: false,
-      suppressBaseShift: funcName !== "\\stackrel",
-      body: defineFunction_ordargument(baseArg)
-    };
-    var supsub = {
-      type: "supsub",
-      mode: shiftedArg.mode,
-      base: baseOp,
-      sup: funcName === "\\underset" ? null : shiftedArg,
-      sub: funcName === "\\underset" ? shiftedArg : null
-    };
-    return {
-      type: "mclass",
-      mode: parser.mode,
-      mclass: mclass,
-      body: [supsub],
-      isCharacterBox: utils.isCharacterBox(supsub)
-    };
-  },
-  htmlBuilder: mclass_htmlBuilder,
-  mathmlBuilder: mclass_mathmlBuilder
-});
-// CONCATENATED MODULE: ./src/functions/font.js
-// TODO(kevinb): implement \\sl and \\sc
-
-
-
-
-
-
-var font_htmlBuilder = function htmlBuilder(group, options) {
-  var font = group.font;
-  var newOptions = options.withFont(font);
-  return buildHTML_buildGroup(group.body, newOptions);
-};
-
-var font_mathmlBuilder = function mathmlBuilder(group, options) {
-  var font = group.font;
-  var newOptions = options.withFont(font);
-  return buildMathML_buildGroup(group.body, newOptions);
-};
-
-var fontAliases = {
-  "\\Bbb": "\\mathbb",
-  "\\bold": "\\mathbf",
-  "\\frak": "\\mathfrak",
-  "\\bm": "\\boldsymbol"
-};
-defineFunction({
-  type: "font",
-  names: [// styles, except \boldsymbol defined below
-  "\\mathrm", "\\mathit", "\\mathbf", "\\mathnormal", // families
-  "\\mathbb", "\\mathcal", "\\mathfrak", "\\mathscr", "\\mathsf", "\\mathtt", // aliases, except \bm defined below
-  "\\Bbb", "\\bold", "\\frak"],
-  props: {
-    numArgs: 1,
-    greediness: 2
-  },
-  handler: function handler(_ref, args) {
-    var parser = _ref.parser,
-        funcName = _ref.funcName;
-    var body = args[0];
-    var func = funcName;
-
-    if (func in fontAliases) {
-      func = fontAliases[func];
-    }
-
-    return {
-      type: "font",
-      mode: parser.mode,
-      font: func.slice(1),
-      body: body
-    };
-  },
-  htmlBuilder: font_htmlBuilder,
-  mathmlBuilder: font_mathmlBuilder
-});
-defineFunction({
-  type: "mclass",
-  names: ["\\boldsymbol", "\\bm"],
-  props: {
-    numArgs: 1,
-    greediness: 2
-  },
-  handler: function handler(_ref2, args) {
-    var parser = _ref2.parser;
-    var body = args[0];
-    var isCharacterBox = utils.isCharacterBox(body); // amsbsy.sty's \boldsymbol uses \binrel spacing to inherit the
-    // argument's bin|rel|ord status
-
-    return {
-      type: "mclass",
-      mode: parser.mode,
-      mclass: binrelClass(body),
-      body: [{
-        type: "font",
-        mode: parser.mode,
-        font: "boldsymbol",
-        body: body
-      }],
-      isCharacterBox: isCharacterBox
-    };
-  }
-}); // Old font changing functions
-
-defineFunction({
-  type: "font",
-  names: ["\\rm", "\\sf", "\\tt", "\\bf", "\\it"],
-  props: {
-    numArgs: 0,
-    allowedInText: true
-  },
-  handler: function handler(_ref3, args) {
-    var parser = _ref3.parser,
-        funcName = _ref3.funcName,
-        breakOnTokenText = _ref3.breakOnTokenText;
-    var mode = parser.mode;
-    var body = parser.parseExpression(true, breakOnTokenText);
-    var style = "math" + funcName.slice(1);
-    return {
-      type: "font",
-      mode: mode,
-      font: style,
-      body: {
-        type: "ordgroup",
-        mode: parser.mode,
-        body: body
-      }
-    };
-  },
-  htmlBuilder: font_htmlBuilder,
-  mathmlBuilder: font_mathmlBuilder
-});
-// CONCATENATED MODULE: ./src/functions/genfrac.js
-
-
-
-
-
-
-
-
-
-
-
-var genfrac_adjustStyle = function adjustStyle(size, originalStyle) {
-  // Figure out what style this fraction should be in based on the
-  // function used
-  var style = originalStyle;
-
-  if (size === "display") {
-    // Get display style as a default.
-    // If incoming style is sub/sup, use style.text() to get correct size.
-    style = style.id >= src_Style.SCRIPT.id ? style.text() : src_Style.DISPLAY;
-  } else if (size === "text" && style.size === src_Style.DISPLAY.size) {
-    // We're in a \tfrac but incoming style is displaystyle, so:
-    style = src_Style.TEXT;
-  } else if (size === "script") {
-    style = src_Style.SCRIPT;
-  } else if (size === "scriptscript") {
-    style = src_Style.SCRIPTSCRIPT;
-  }
-
-  return style;
-};
-
-var genfrac_htmlBuilder = function htmlBuilder(group, options) {
-  // Fractions are handled in the TeXbook on pages 444-445, rules 15(a-e).
-  var style = genfrac_adjustStyle(group.size, options.style);
-  var nstyle = style.fracNum();
-  var dstyle = style.fracDen();
-  var newOptions;
-  newOptions = options.havingStyle(nstyle);
-  var numerm = buildHTML_buildGroup(group.numer, newOptions, options);
-
-  if (group.continued) {
-    // \cfrac inserts a \strut into the numerator.
-    // Get \strut dimensions from TeXbook page 353.
-    var hStrut = 8.5 / options.fontMetrics().ptPerEm;
-    var dStrut = 3.5 / options.fontMetrics().ptPerEm;
-    numerm.height = numerm.height < hStrut ? hStrut : numerm.height;
-    numerm.depth = numerm.depth < dStrut ? dStrut : numerm.depth;
-  }
-
-  newOptions = options.havingStyle(dstyle);
-  var denomm = buildHTML_buildGroup(group.denom, newOptions, options);
-  var rule;
-  var ruleWidth;
-  var ruleSpacing;
-
-  if (group.hasBarLine) {
-    if (group.barSize) {
-      ruleWidth = units_calculateSize(group.barSize, options);
-      rule = buildCommon.makeLineSpan("frac-line", options, ruleWidth);
-    } else {
-      rule = buildCommon.makeLineSpan("frac-line", options);
-    }
-
-    ruleWidth = rule.height;
-    ruleSpacing = rule.height;
-  } else {
-    rule = null;
-    ruleWidth = 0;
-    ruleSpacing = options.fontMetrics().defaultRuleThickness;
-  } // Rule 15b
-
-
-  var numShift;
-  var clearance;
-  var denomShift;
-
-  if (style.size === src_Style.DISPLAY.size || group.size === "display") {
-    numShift = options.fontMetrics().num1;
-
-    if (ruleWidth > 0) {
-      clearance = 3 * ruleSpacing;
-    } else {
-      clearance = 7 * ruleSpacing;
-    }
-
-    denomShift = options.fontMetrics().denom1;
-  } else {
-    if (ruleWidth > 0) {
-      numShift = options.fontMetrics().num2;
-      clearance = ruleSpacing;
-    } else {
-      numShift = options.fontMetrics().num3;
-      clearance = 3 * ruleSpacing;
-    }
-
-    denomShift = options.fontMetrics().denom2;
-  }
-
-  var frac;
-
-  if (!rule) {
-    // Rule 15c
-    var candidateClearance = numShift - numerm.depth - (denomm.height - denomShift);
-
-    if (candidateClearance < clearance) {
-      numShift += 0.5 * (clearance - candidateClearance);
-      denomShift += 0.5 * (clearance - candidateClearance);
-    }
-
-    frac = buildCommon.makeVList({
-      positionType: "individualShift",
-      children: [{
-        type: "elem",
-        elem: denomm,
-        shift: denomShift
-      }, {
-        type: "elem",
-        elem: numerm,
-        shift: -numShift
-      }]
-    }, options);
-  } else {
-    // Rule 15d
-    var axisHeight = options.fontMetrics().axisHeight;
-
-    if (numShift - numerm.depth - (axisHeight + 0.5 * ruleWidth) < clearance) {
-      numShift += clearance - (numShift - numerm.depth - (axisHeight + 0.5 * ruleWidth));
-    }
-
-    if (axisHeight - 0.5 * ruleWidth - (denomm.height - denomShift) < clearance) {
-      denomShift += clearance - (axisHeight - 0.5 * ruleWidth - (denomm.height - denomShift));
-    }
-
-    var midShift = -(axisHeight - 0.5 * ruleWidth);
-    frac = buildCommon.makeVList({
-      positionType: "individualShift",
-      children: [{
-        type: "elem",
-        elem: denomm,
-        shift: denomShift
-      }, {
-        type: "elem",
-        elem: rule,
-        shift: midShift
-      }, {
-        type: "elem",
-        elem: numerm,
-        shift: -numShift
-      }]
-    }, options);
-  } // Since we manually change the style sometimes (with \dfrac or \tfrac),
-  // account for the possible size change here.
-
-
-  newOptions = options.havingStyle(style);
-  frac.height *= newOptions.sizeMultiplier / options.sizeMultiplier;
-  frac.depth *= newOptions.sizeMultiplier / options.sizeMultiplier; // Rule 15e
-
-  var delimSize;
-
-  if (style.size === src_Style.DISPLAY.size) {
-    delimSize = options.fontMetrics().delim1;
-  } else {
-    delimSize = options.fontMetrics().delim2;
-  }
-
-  var leftDelim;
-  var rightDelim;
-
-  if (group.leftDelim == null) {
-    leftDelim = makeNullDelimiter(options, ["mopen"]);
-  } else {
-    leftDelim = delimiter.customSizedDelim(group.leftDelim, delimSize, true, options.havingStyle(style), group.mode, ["mopen"]);
-  }
-
-  if (group.continued) {
-    rightDelim = buildCommon.makeSpan([]); // zero width for \cfrac
-  } else if (group.rightDelim == null) {
-    rightDelim = makeNullDelimiter(options, ["mclose"]);
-  } else {
-    rightDelim = delimiter.customSizedDelim(group.rightDelim, delimSize, true, options.havingStyle(style), group.mode, ["mclose"]);
-  }
-
-  return buildCommon.makeSpan(["mord"].concat(newOptions.sizingClasses(options)), [leftDelim, buildCommon.makeSpan(["mfrac"], [frac]), rightDelim], options);
-};
-
-var genfrac_mathmlBuilder = function mathmlBuilder(group, options) {
-  var node = new mathMLTree.MathNode("mfrac", [buildMathML_buildGroup(group.numer, options), buildMathML_buildGroup(group.denom, options)]);
-
-  if (!group.hasBarLine) {
-    node.setAttribute("linethickness", "0px");
-  } else if (group.barSize) {
-    var ruleWidth = units_calculateSize(group.barSize, options);
-    node.setAttribute("linethickness", ruleWidth + "em");
-  }
-
-  var style = genfrac_adjustStyle(group.size, options.style);
-
-  if (style.size !== options.style.size) {
-    node = new mathMLTree.MathNode("mstyle", [node]);
-    var isDisplay = style.size === src_Style.DISPLAY.size ? "true" : "false";
-    node.setAttribute("displaystyle", isDisplay);
-    node.setAttribute("scriptlevel", "0");
-  }
-
-  if (group.leftDelim != null || group.rightDelim != null) {
-    var withDelims = [];
-
-    if (group.leftDelim != null) {
-      var leftOp = new mathMLTree.MathNode("mo", [new mathMLTree.TextNode(group.leftDelim.replace("\\", ""))]);
-      leftOp.setAttribute("fence", "true");
-      withDelims.push(leftOp);
-    }
-
-    withDelims.push(node);
-
-    if (group.rightDelim != null) {
-      var rightOp = new mathMLTree.MathNode("mo", [new mathMLTree.TextNode(group.rightDelim.replace("\\", ""))]);
-      rightOp.setAttribute("fence", "true");
-      withDelims.push(rightOp);
-    }
-
-    return buildMathML_makeRow(withDelims);
-  }
-
-  return node;
-};
-
-defineFunction({
-  type: "genfrac",
-  names: ["\\cfrac", "\\dfrac", "\\frac", "\\tfrac", "\\dbinom", "\\binom", "\\tbinom", "\\\\atopfrac", // can’t be entered directly
-  "\\\\bracefrac", "\\\\brackfrac"],
-  props: {
-    numArgs: 2,
-    greediness: 2
-  },
-  handler: function handler(_ref, args) {
-    var parser = _ref.parser,
-        funcName = _ref.funcName;
-    var numer = args[0];
-    var denom = args[1];
-    var hasBarLine;
-    var leftDelim = null;
-    var rightDelim = null;
-    var size = "auto";
-
-    switch (funcName) {
-      case "\\cfrac":
-      case "\\dfrac":
-      case "\\frac":
-      case "\\tfrac":
-        hasBarLine = true;
-        break;
-
-      case "\\\\atopfrac":
-        hasBarLine = false;
-        break;
-
-      case "\\dbinom":
-      case "\\binom":
-      case "\\tbinom":
-        hasBarLine = false;
-        leftDelim = "(";
-        rightDelim = ")";
-        break;
-
-      case "\\\\bracefrac":
-        hasBarLine = false;
-        leftDelim = "\\{";
-        rightDelim = "\\}";
-        break;
-
-      case "\\\\brackfrac":
-        hasBarLine = false;
-        leftDelim = "[";
-        rightDelim = "]";
-        break;
-
-      default:
-        throw new Error("Unrecognized genfrac command");
-    }
-
-    switch (funcName) {
-      case "\\cfrac":
-      case "\\dfrac":
-      case "\\dbinom":
-        size = "display";
-        break;
-
-      case "\\tfrac":
-      case "\\tbinom":
-        size = "text";
-        break;
-    }
-
-    return {
-      type: "genfrac",
-      mode: parser.mode,
-      continued: funcName === "\\cfrac",
-      numer: numer,
-      denom: denom,
-      hasBarLine: hasBarLine,
-      leftDelim: leftDelim,
-      rightDelim: rightDelim,
-      size: size,
-      barSize: null
-    };
-  },
-  htmlBuilder: genfrac_htmlBuilder,
-  mathmlBuilder: genfrac_mathmlBuilder
-}); // Infix generalized fractions -- these are not rendered directly, but replaced
-// immediately by one of the variants above.
-
-defineFunction({
-  type: "infix",
-  names: ["\\over", "\\choose", "\\atop", "\\brace", "\\brack"],
-  props: {
-    numArgs: 0,
-    infix: true
-  },
-  handler: function handler(_ref2) {
-    var parser = _ref2.parser,
-        funcName = _ref2.funcName,
-        token = _ref2.token;
-    var replaceWith;
-
-    switch (funcName) {
-      case "\\over":
-        replaceWith = "\\frac";
-        break;
-
-      case "\\choose":
-        replaceWith = "\\binom";
-        break;
-
-      case "\\atop":
-        replaceWith = "\\\\atopfrac";
-        break;
-
-      case "\\brace":
-        replaceWith = "\\\\bracefrac";
-        break;
-
-      case "\\brack":
-        replaceWith = "\\\\brackfrac";
-        break;
-
-      default:
-        throw new Error("Unrecognized infix genfrac command");
-    }
-
-    return {
-      type: "infix",
-      mode: parser.mode,
-      replaceWith: replaceWith,
-      token: token
-    };
-  }
-});
-var stylArray = ["display", "text", "script", "scriptscript"];
-
-var delimFromValue = function delimFromValue(delimString) {
-  var delim = null;
-
-  if (delimString.length > 0) {
-    delim = delimString;
-    delim = delim === "." ? null : delim;
-  }
-
-  return delim;
-};
-
-defineFunction({
-  type: "genfrac",
-  names: ["\\genfrac"],
-  props: {
-    numArgs: 6,
-    greediness: 6,
-    argTypes: ["math", "math", "size", "text", "math", "math"]
-  },
-  handler: function handler(_ref3, args) {
-    var parser = _ref3.parser;
-    var numer = args[4];
-    var denom = args[5]; // Look into the parse nodes to get the desired delimiters.
-
-    var leftNode = checkNodeType(args[0], "atom");
-
-    if (leftNode) {
-      leftNode = assertAtomFamily(args[0], "open");
-    }
-
-    var leftDelim = leftNode ? delimFromValue(leftNode.text) : null;
-    var rightNode = checkNodeType(args[1], "atom");
-
-    if (rightNode) {
-      rightNode = assertAtomFamily(args[1], "close");
-    }
-
-    var rightDelim = rightNode ? delimFromValue(rightNode.text) : null;
-    var barNode = assertNodeType(args[2], "size");
-    var hasBarLine;
-    var barSize = null;
-
-    if (barNode.isBlank) {
-      // \genfrac acts differently than \above.
-      // \genfrac treats an empty size group as a signal to use a
-      // standard bar size. \above would see size = 0 and omit the bar.
-      hasBarLine = true;
-    } else {
-      barSize = barNode.value;
-      hasBarLine = barSize.number > 0;
-    } // Find out if we want displaystyle, textstyle, etc.
-
-
-    var size = "auto";
-    var styl = checkNodeType(args[3], "ordgroup");
-
-    if (styl) {
-      if (styl.body.length > 0) {
-        var textOrd = assertNodeType(styl.body[0], "textord");
-        size = stylArray[Number(textOrd.text)];
-      }
-    } else {
-      styl = assertNodeType(args[3], "textord");
-      size = stylArray[Number(styl.text)];
-    }
-
-    return {
-      type: "genfrac",
-      mode: parser.mode,
-      numer: numer,
-      denom: denom,
-      continued: false,
-      hasBarLine: hasBarLine,
-      barSize: barSize,
-      leftDelim: leftDelim,
-      rightDelim: rightDelim,
-      size: size
-    };
-  },
-  htmlBuilder: genfrac_htmlBuilder,
-  mathmlBuilder: genfrac_mathmlBuilder
-}); // \above is an infix fraction that also defines a fraction bar size.
-
-defineFunction({
-  type: "infix",
-  names: ["\\above"],
-  props: {
-    numArgs: 1,
-    argTypes: ["size"],
-    infix: true
-  },
-  handler: function handler(_ref4, args) {
-    var parser = _ref4.parser,
-        funcName = _ref4.funcName,
-        token = _ref4.token;
-    return {
-      type: "infix",
-      mode: parser.mode,
-      replaceWith: "\\\\abovefrac",
-      size: assertNodeType(args[0], "size").value,
-      token: token
-    };
-  }
-});
-defineFunction({
-  type: "genfrac",
-  names: ["\\\\abovefrac"],
-  props: {
-    numArgs: 3,
-    argTypes: ["math", "size", "math"]
-  },
-  handler: function handler(_ref5, args) {
-    var parser = _ref5.parser,
-        funcName = _ref5.funcName;
-    var numer = args[0];
-    var barSize = assert(assertNodeType(args[1], "infix").size);
-    var denom = args[2];
-    var hasBarLine = barSize.number > 0;
-    return {
-      type: "genfrac",
-      mode: parser.mode,
-      numer: numer,
-      denom: denom,
-      continued: false,
-      hasBarLine: hasBarLine,
-      barSize: barSize,
-      leftDelim: null,
-      rightDelim: null,
-      size: "auto"
-    };
-  },
-  htmlBuilder: genfrac_htmlBuilder,
-  mathmlBuilder: genfrac_mathmlBuilder
-});
-// CONCATENATED MODULE: ./src/functions/horizBrace.js
-
-
-
-
-
-
-
-
-// NOTE: Unlike most `htmlBuilder`s, this one handles not only "horizBrace", but
-var horizBrace_htmlBuilder = function htmlBuilder(grp, options) {
-  var style = options.style; // Pull out the `ParseNode<"horizBrace">` if `grp` is a "supsub" node.
-
-  var supSubGroup;
-  var group;
-  var supSub = checkNodeType(grp, "supsub");
-
-  if (supSub) {
-    // Ref: LaTeX source2e: }}}}\limits}
-    // i.e. LaTeX treats the brace similar to an op and passes it
-    // with \limits, so we need to assign supsub style.
-    supSubGroup = supSub.sup ? buildHTML_buildGroup(supSub.sup, options.havingStyle(style.sup()), options) : buildHTML_buildGroup(supSub.sub, options.havingStyle(style.sub()), options);
-    group = assertNodeType(supSub.base, "horizBrace");
-  } else {
-    group = assertNodeType(grp, "horizBrace");
-  } // Build the base group
-
-
-  var body = buildHTML_buildGroup(group.base, options.havingBaseStyle(src_Style.DISPLAY)); // Create the stretchy element
-
-  var braceBody = stretchy.svgSpan(group, options); // Generate the vlist, with the appropriate kerns        ┏━━━━━━━━┓
-  // This first vlist contains the content and the brace:   equation
-
-  var vlist;
-
-  if (group.isOver) {
-    vlist = buildCommon.makeVList({
-      positionType: "firstBaseline",
-      children: [{
-        type: "elem",
-        elem: body
-      }, {
-        type: "kern",
-        size: 0.1
-      }, {
-        type: "elem",
-        elem: braceBody
-      }]
-    }, options); // $FlowFixMe: Replace this with passing "svg-align" into makeVList.
-
-    vlist.children[0].children[0].children[1].classes.push("svg-align");
-  } else {
-    vlist = buildCommon.makeVList({
-      positionType: "bottom",
-      positionData: body.depth + 0.1 + braceBody.height,
-      children: [{
-        type: "elem",
-        elem: braceBody
-      }, {
-        type: "kern",
-        size: 0.1
-      }, {
-        type: "elem",
-        elem: body
-      }]
-    }, options); // $FlowFixMe: Replace this with passing "svg-align" into makeVList.
-
-    vlist.children[0].children[0].children[0].classes.push("svg-align");
-  }
-
-  if (supSubGroup) {
-    // To write the supsub, wrap the first vlist in another vlist:
-    // They can't all go in the same vlist, because the note might be
-    // wider than the equation. We want the equation to control the
-    // brace width.
-    //      note          long note           long note
-    //   ┏━━━━━━━━┓   or    ┏━━━┓     not    ┏━━━━━━━━━┓
-    //    equation           eqn                 eqn
-    var vSpan = buildCommon.makeSpan(["mord", group.isOver ? "mover" : "munder"], [vlist], options);
-
-    if (group.isOver) {
-      vlist = buildCommon.makeVList({
-        positionType: "firstBaseline",
-        children: [{
-          type: "elem",
-          elem: vSpan
-        }, {
-          type: "kern",
-          size: 0.2
-        }, {
-          type: "elem",
-          elem: supSubGroup
-        }]
-      }, options);
-    } else {
-      vlist = buildCommon.makeVList({
-        positionType: "bottom",
-        positionData: vSpan.depth + 0.2 + supSubGroup.height + supSubGroup.depth,
-        children: [{
-          type: "elem",
-          elem: supSubGroup
-        }, {
-          type: "kern",
-          size: 0.2
-        }, {
-          type: "elem",
-          elem: vSpan
-        }]
-      }, options);
-    }
-  }
-
-  return buildCommon.makeSpan(["mord", group.isOver ? "mover" : "munder"], [vlist], options);
-};
-
-var horizBrace_mathmlBuilder = function mathmlBuilder(group, options) {
-  var accentNode = stretchy.mathMLnode(group.label);
-  return new mathMLTree.MathNode(group.isOver ? "mover" : "munder", [buildMathML_buildGroup(group.base, options), accentNode]);
-}; // Horizontal stretchy braces
-
-
-defineFunction({
-  type: "horizBrace",
-  names: ["\\overbrace", "\\underbrace"],
-  props: {
-    numArgs: 1
-  },
-  handler: function handler(_ref, args) {
-    var parser = _ref.parser,
-        funcName = _ref.funcName;
-    return {
-      type: "horizBrace",
-      mode: parser.mode,
-      label: funcName,
-      isOver: /^\\over/.test(funcName),
-      base: args[0]
-    };
-  },
-  htmlBuilder: horizBrace_htmlBuilder,
-  mathmlBuilder: horizBrace_mathmlBuilder
-});
-// CONCATENATED MODULE: ./src/functions/href.js
-
-
-
-
-
-
-defineFunction({
-  type: "href",
-  names: ["\\href"],
-  props: {
-    numArgs: 2,
-    argTypes: ["url", "original"],
-    allowedInText: true
-  },
-  handler: function handler(_ref, args) {
-    var parser = _ref.parser;
-    var body = args[1];
-    var href = assertNodeType(args[0], "url").url;
-
-    if (!parser.settings.isTrusted({
-      command: "\\href",
-      url: href
-    })) {
-      return parser.formatUnsupportedCmd("\\href");
-    }
-
-    return {
-      type: "href",
-      mode: parser.mode,
-      href: href,
-      body: defineFunction_ordargument(body)
-    };
-  },
-  htmlBuilder: function htmlBuilder(group, options) {
-    var elements = buildHTML_buildExpression(group.body, options, false);
-    return buildCommon.makeAnchor(group.href, [], elements, options);
-  },
-  mathmlBuilder: function mathmlBuilder(group, options) {
-    var math = buildExpressionRow(group.body, options);
-
-    if (!(math instanceof mathMLTree_MathNode)) {
-      math = new mathMLTree_MathNode("mrow", [math]);
-    }
-
-    math.setAttribute("href", group.href);
-    return math;
-  }
-});
-defineFunction({
-  type: "href",
-  names: ["\\url"],
-  props: {
-    numArgs: 1,
-    argTypes: ["url"],
-    allowedInText: true
-  },
-  handler: function handler(_ref2, args) {
-    var parser = _ref2.parser;
-    var href = assertNodeType(args[0], "url").url;
-
-    if (!parser.settings.isTrusted({
-      command: "\\url",
-      url: href
-    })) {
-      return parser.formatUnsupportedCmd("\\url");
-    }
-
-    var chars = [];
-
-    for (var i = 0; i < href.length; i++) {
-      var c = href[i];
-
-      if (c === "~") {
-        c = "\\textasciitilde";
-      }
-
-      chars.push({
-        type: "textord",
-        mode: "text",
-        text: c
-      });
-    }
-
-    var body = {
-      type: "text",
-      mode: parser.mode,
-      font: "\\texttt",
-      body: chars
-    };
-    return {
-      type: "href",
-      mode: parser.mode,
-      href: href,
-      body: defineFunction_ordargument(body)
-    };
-  }
-});
-// CONCATENATED MODULE: ./src/functions/htmlmathml.js
-
-
-
-
-defineFunction({
-  type: "htmlmathml",
-  names: ["\\html@mathml"],
-  props: {
-    numArgs: 2,
-    allowedInText: true
-  },
-  handler: function handler(_ref, args) {
-    var parser = _ref.parser;
-    return {
-      type: "htmlmathml",
-      mode: parser.mode,
-      html: defineFunction_ordargument(args[0]),
-      mathml: defineFunction_ordargument(args[1])
-    };
-  },
-  htmlBuilder: function htmlBuilder(group, options) {
-    var elements = buildHTML_buildExpression(group.html, options, false);
-    return buildCommon.makeFragment(elements);
-  },
-  mathmlBuilder: function mathmlBuilder(group, options) {
-    return buildExpressionRow(group.mathml, options);
-  }
-});
-// CONCATENATED MODULE: ./src/functions/includegraphics.js
-
-
-
-
-
-
-
-var includegraphics_sizeData = function sizeData(str) {
-  if (/^[-+]? *(\d+(\.\d*)?|\.\d+)$/.test(str)) {
-    // str is a number with no unit specified.
-    // default unit is bp, per graphix package.
-    return {
-      number: +str,
-      unit: "bp"
-    };
-  } else {
-    var match = /([-+]?) *(\d+(?:\.\d*)?|\.\d+) *([a-z]{2})/.exec(str);
-
-    if (!match) {
-      throw new src_ParseError("Invalid size: '" + str + "' in \\includegraphics");
-    }
-
-    var data = {
-      number: +(match[1] + match[2]),
-      // sign + magnitude, cast to number
-      unit: match[3]
-    };
-
-    if (!validUnit(data)) {
-      throw new src_ParseError("Invalid unit: '" + data.unit + "' in \\includegraphics.");
-    }
-
-    return data;
-  }
-};
-
-defineFunction({
-  type: "includegraphics",
-  names: ["\\includegraphics"],
-  props: {
-    numArgs: 1,
-    numOptionalArgs: 1,
-    argTypes: ["raw", "url"],
-    allowedInText: false
-  },
-  handler: function handler(_ref, args, optArgs) {
-    var parser = _ref.parser;
-    var width = {
-      number: 0,
-      unit: "em"
-    };
-    var height = {
-      number: 0.9,
-      unit: "em"
-    }; // sorta character sized.
-
-    var totalheight = {
-      number: 0,
-      unit: "em"
-    };
-    var alt = "";
-
-    if (optArgs[0]) {
-      var attributeStr = assertNodeType(optArgs[0], "raw").string; // Parser.js does not parse key/value pairs. We get a string.
-
-      var attributes = attributeStr.split(",");
-
-      for (var i = 0; i < attributes.length; i++) {
-        var keyVal = attributes[i].split("=");
-
-        if (keyVal.length === 2) {
-          var str = keyVal[1].trim();
-
-          switch (keyVal[0].trim()) {
-            case "alt":
-              alt = str;
-              break;
-
-            case "width":
-              width = includegraphics_sizeData(str);
-              break;
-
-            case "height":
-              height = includegraphics_sizeData(str);
-              break;
-
-            case "totalheight":
-              totalheight = includegraphics_sizeData(str);
-              break;
-
-            default:
-              throw new src_ParseError("Invalid key: '" + keyVal[0] + "' in \\includegraphics.");
-          }
-        }
-      }
-    }
-
-    var src = assertNodeType(args[0], "url").url;
-
-    if (alt === "") {
-      // No alt given. Use the file name. Strip away the path.
-      alt = src;
-      alt = alt.replace(/^.*[\\/]/, '');
-      alt = alt.substring(0, alt.lastIndexOf('.'));
-    }
-
-    if (!parser.settings.isTrusted({
-      command: "\\includegraphics",
-      url: src
-    })) {
-      return parser.formatUnsupportedCmd("\\includegraphics");
-    }
-
-    return {
-      type: "includegraphics",
-      mode: parser.mode,
-      alt: alt,
-      width: width,
-      height: height,
-      totalheight: totalheight,
-      src: src
-    };
-  },
-  htmlBuilder: function htmlBuilder(group, options) {
-    var height = units_calculateSize(group.height, options);
-    var depth = 0;
-
-    if (group.totalheight.number > 0) {
-      depth = units_calculateSize(group.totalheight, options) - height;
-      depth = Number(depth.toFixed(2));
-    }
-
-    var width = 0;
-
-    if (group.width.number > 0) {
-      width = units_calculateSize(group.width, options);
-    }
-
-    var style = {
-      height: height + depth + "em"
-    };
-
-    if (width > 0) {
-      style.width = width + "em";
-    }
-
-    if (depth > 0) {
-      style.verticalAlign = -depth + "em";
-    }
-
-    var node = new domTree_Img(group.src, group.alt, style);
-    node.height = height;
-    node.depth = depth;
-    return node;
-  },
-  mathmlBuilder: function mathmlBuilder(group, options) {
-    var node = new mathMLTree.MathNode("mglyph", []);
-    node.setAttribute("alt", group.alt);
-    var height = units_calculateSize(group.height, options);
-    var depth = 0;
-
-    if (group.totalheight.number > 0) {
-      depth = units_calculateSize(group.totalheight, options) - height;
-      depth = depth.toFixed(2);
-      node.setAttribute("valign", "-" + depth + "em");
-    }
-
-    node.setAttribute("height", height + depth + "em");
-
-    if (group.width.number > 0) {
-      var width = units_calculateSize(group.width, options);
-      node.setAttribute("width", width + "em");
-    }
-
-    node.setAttribute("src", group.src);
-    return node;
-  }
-});
-// CONCATENATED MODULE: ./src/functions/kern.js
-// Horizontal spacing commands
-
-
-
-
- // TODO: \hskip and \mskip should support plus and minus in lengths
-
-defineFunction({
-  type: "kern",
-  names: ["\\kern", "\\mkern", "\\hskip", "\\mskip"],
-  props: {
-    numArgs: 1,
-    argTypes: ["size"],
-    allowedInText: true
-  },
-  handler: function handler(_ref, args) {
-    var parser = _ref.parser,
-        funcName = _ref.funcName;
-    var size = assertNodeType(args[0], "size");
-
-    if (parser.settings.strict) {
-      var mathFunction = funcName[1] === 'm'; // \mkern, \mskip
-
-      var muUnit = size.value.unit === 'mu';
-
-      if (mathFunction) {
-        if (!muUnit) {
-          parser.settings.reportNonstrict("mathVsTextUnits", "LaTeX's " + funcName + " supports only mu units, " + ("not " + size.value.unit + " units"));
-        }
-
-        if (parser.mode !== "math") {
-          parser.settings.reportNonstrict("mathVsTextUnits", "LaTeX's " + funcName + " works only in math mode");
-        }
-      } else {
-        // !mathFunction
-        if (muUnit) {
-          parser.settings.reportNonstrict("mathVsTextUnits", "LaTeX's " + funcName + " doesn't support mu units");
-        }
-      }
-    }
-
-    return {
-      type: "kern",
-      mode: parser.mode,
-      dimension: size.value
-    };
-  },
-  htmlBuilder: function htmlBuilder(group, options) {
-    return buildCommon.makeGlue(group.dimension, options);
-  },
-  mathmlBuilder: function mathmlBuilder(group, options) {
-    var dimension = units_calculateSize(group.dimension, options);
-    return new mathMLTree.SpaceNode(dimension);
-  }
-});
-// CONCATENATED MODULE: ./src/functions/lap.js
-// Horizontal overlap functions
-
-
-
-
-
-defineFunction({
-  type: "lap",
-  names: ["\\mathllap", "\\mathrlap", "\\mathclap"],
-  props: {
-    numArgs: 1,
-    allowedInText: true
-  },
-  handler: function handler(_ref, args) {
-    var parser = _ref.parser,
-        funcName = _ref.funcName;
-    var body = args[0];
-    return {
-      type: "lap",
-      mode: parser.mode,
-      alignment: funcName.slice(5),
-      body: body
-    };
-  },
-  htmlBuilder: function htmlBuilder(group, options) {
-    // mathllap, mathrlap, mathclap
-    var inner;
-
-    if (group.alignment === "clap") {
-      // ref: https://www.math.lsu.edu/~aperlis/publications/mathclap/
-      inner = buildCommon.makeSpan([], [buildHTML_buildGroup(group.body, options)]); // wrap, since CSS will center a .clap > .inner > span
-
-      inner = buildCommon.makeSpan(["inner"], [inner], options);
-    } else {
-      inner = buildCommon.makeSpan(["inner"], [buildHTML_buildGroup(group.body, options)]);
-    }
-
-    var fix = buildCommon.makeSpan(["fix"], []);
-    var node = buildCommon.makeSpan([group.alignment], [inner, fix], options); // At this point, we have correctly set horizontal alignment of the
-    // two items involved in the lap.
-    // Next, use a strut to set the height of the HTML bounding box.
-    // Otherwise, a tall argument may be misplaced.
-
-    var strut = buildCommon.makeSpan(["strut"]);
-    strut.style.height = node.height + node.depth + "em";
-    strut.style.verticalAlign = -node.depth + "em";
-    node.children.unshift(strut); // Next, prevent vertical misplacement when next to something tall.
-
-    node = buildCommon.makeVList({
-      positionType: "firstBaseline",
-      children: [{
-        type: "elem",
-        elem: node
-      }]
-    }, options); // Get the horizontal spacing correct relative to adjacent items.
-
-    return buildCommon.makeSpan(["mord"], [node], options);
-  },
-  mathmlBuilder: function mathmlBuilder(group, options) {
-    // mathllap, mathrlap, mathclap
-    var node = new mathMLTree.MathNode("mpadded", [buildMathML_buildGroup(group.body, options)]);
-
-    if (group.alignment !== "rlap") {
-      var offset = group.alignment === "llap" ? "-1" : "-0.5";
-      node.setAttribute("lspace", offset + "width");
-    }
-
-    node.setAttribute("width", "0px");
-    return node;
-  }
-});
-// CONCATENATED MODULE: ./src/functions/math.js
-
- // Switching from text mode back to math mode
-
-defineFunction({
-  type: "styling",
-  names: ["\\(", "$"],
-  props: {
-    numArgs: 0,
-    allowedInText: true,
-    allowedInMath: false
-  },
-  handler: function handler(_ref, args) {
-    var funcName = _ref.funcName,
-        parser = _ref.parser;
-    var outerMode = parser.mode;
-    parser.switchMode("math");
-    var close = funcName === "\\(" ? "\\)" : "$";
-    var body = parser.parseExpression(false, close);
-    parser.expect(close);
-    parser.switchMode(outerMode);
-    return {
-      type: "styling",
-      mode: parser.mode,
-      style: "text",
-      body: body
-    };
-  }
-}); // Check for extra closing math delimiters
-
-defineFunction({
-  type: "text",
-  // Doesn't matter what this is.
-  names: ["\\)", "\\]"],
-  props: {
-    numArgs: 0,
-    allowedInText: true,
-    allowedInMath: false
-  },
-  handler: function handler(context, args) {
-    throw new src_ParseError("Mismatched " + context.funcName);
-  }
-});
-// CONCATENATED MODULE: ./src/functions/mathchoice.js
-
-
-
-
-
-
-var mathchoice_chooseMathStyle = function chooseMathStyle(group, options) {
-  switch (options.style.size) {
-    case src_Style.DISPLAY.size:
-      return group.display;
-
-    case src_Style.TEXT.size:
-      return group.text;
-
-    case src_Style.SCRIPT.size:
-      return group.script;
-
-    case src_Style.SCRIPTSCRIPT.size:
-      return group.scriptscript;
-
-    default:
-      return group.text;
-  }
-};
-
-defineFunction({
-  type: "mathchoice",
-  names: ["\\mathchoice"],
-  props: {
-    numArgs: 4
-  },
-  handler: function handler(_ref, args) {
-    var parser = _ref.parser;
-    return {
-      type: "mathchoice",
-      mode: parser.mode,
-      display: defineFunction_ordargument(args[0]),
-      text: defineFunction_ordargument(args[1]),
-      script: defineFunction_ordargument(args[2]),
-      scriptscript: defineFunction_ordargument(args[3])
-    };
-  },
-  htmlBuilder: function htmlBuilder(group, options) {
-    var body = mathchoice_chooseMathStyle(group, options);
-    var elements = buildHTML_buildExpression(body, options, false);
-    return buildCommon.makeFragment(elements);
-  },
-  mathmlBuilder: function mathmlBuilder(group, options) {
-    var body = mathchoice_chooseMathStyle(group, options);
-    return buildExpressionRow(body, options);
-  }
-});
-// CONCATENATED MODULE: ./src/functions/utils/assembleSupSub.js
-
-
-// For an operator with limits, assemble the base, sup, and sub into a span.
-var assembleSupSub_assembleSupSub = function assembleSupSub(base, supGroup, subGroup, options, style, slant, baseShift) {
-  // IE 8 clips \int if it is in a display: inline-block. We wrap it
-  // in a new span so it is an inline, and works.
-  base = buildCommon.makeSpan([], [base]);
-  var sub;
-  var sup; // We manually have to handle the superscripts and subscripts. This,
-  // aside from the kern calculations, is copied from supsub.
-
-  if (supGroup) {
-    var elem = buildHTML_buildGroup(supGroup, options.havingStyle(style.sup()), options);
-    sup = {
-      elem: elem,
-      kern: Math.max(options.fontMetrics().bigOpSpacing1, options.fontMetrics().bigOpSpacing3 - elem.depth)
-    };
-  }
-
-  if (subGroup) {
-    var _elem = buildHTML_buildGroup(subGroup, options.havingStyle(style.sub()), options);
-
-    sub = {
-      elem: _elem,
-      kern: Math.max(options.fontMetrics().bigOpSpacing2, options.fontMetrics().bigOpSpacing4 - _elem.height)
-    };
-  } // Build the final group as a vlist of the possible subscript, base,
-  // and possible superscript.
-
-
-  var finalGroup;
-
-  if (sup && sub) {
-    var bottom = options.fontMetrics().bigOpSpacing5 + sub.elem.height + sub.elem.depth + sub.kern + base.depth + baseShift;
-    finalGroup = buildCommon.makeVList({
-      positionType: "bottom",
-      positionData: bottom,
-      children: [{
-        type: "kern",
-        size: options.fontMetrics().bigOpSpacing5
-      }, {
-        type: "elem",
-        elem: sub.elem,
-        marginLeft: -slant + "em"
-      }, {
-        type: "kern",
-        size: sub.kern
-      }, {
-        type: "elem",
-        elem: base
-      }, {
-        type: "kern",
-        size: sup.kern
-      }, {
-        type: "elem",
-        elem: sup.elem,
-        marginLeft: slant + "em"
-      }, {
-        type: "kern",
-        size: options.fontMetrics().bigOpSpacing5
-      }]
-    }, options);
-  } else if (sub) {
-    var top = base.height - baseShift; // Shift the limits by the slant of the symbol. Note
-    // that we are supposed to shift the limits by 1/2 of the slant,
-    // but since we are centering the limits adding a full slant of
-    // margin will shift by 1/2 that.
-
-    finalGroup = buildCommon.makeVList({
-      positionType: "top",
-      positionData: top,
-      children: [{
-        type: "kern",
-        size: options.fontMetrics().bigOpSpacing5
-      }, {
-        type: "elem",
-        elem: sub.elem,
-        marginLeft: -slant + "em"
-      }, {
-        type: "kern",
-        size: sub.kern
-      }, {
-        type: "elem",
-        elem: base
-      }]
-    }, options);
-  } else if (sup) {
-    var _bottom = base.depth + baseShift;
-
-    finalGroup = buildCommon.makeVList({
-      positionType: "bottom",
-      positionData: _bottom,
-      children: [{
-        type: "elem",
-        elem: base
-      }, {
-        type: "kern",
-        size: sup.kern
-      }, {
-        type: "elem",
-        elem: sup.elem,
-        marginLeft: slant + "em"
-      }, {
-        type: "kern",
-        size: options.fontMetrics().bigOpSpacing5
-      }]
-    }, options);
-  } else {
-    // This case probably shouldn't occur (this would mean the
-    // supsub was sending us a group with no superscript or
-    // subscript) but be safe.
-    return base;
-  }
-
-  return buildCommon.makeSpan(["mop", "op-limits"], [finalGroup], options);
-};
-// CONCATENATED MODULE: ./src/functions/op.js
-// Limits, symbols
-
-
-
-
-
-
-
-
-
-
-// Most operators have a large successor symbol, but these don't.
-var noSuccessor = ["\\smallint"]; // NOTE: Unlike most `htmlBuilder`s, this one handles not only "op", but also
-// "supsub" since some of them (like \int) can affect super/subscripting.
-
-var op_htmlBuilder = function htmlBuilder(grp, options) {
-  // Operators are handled in the TeXbook pg. 443-444, rule 13(a).
-  var supGroup;
-  var subGroup;
-  var hasLimits = false;
-  var group;
-  var supSub = checkNodeType(grp, "supsub");
-
-  if (supSub) {
-    // If we have limits, supsub will pass us its group to handle. Pull
-    // out the superscript and subscript and set the group to the op in
-    // its base.
-    supGroup = supSub.sup;
-    subGroup = supSub.sub;
-    group = assertNodeType(supSub.base, "op");
-    hasLimits = true;
-  } else {
-    group = assertNodeType(grp, "op");
-  }
-
-  var style = options.style;
-  var large = false;
-
-  if (style.size === src_Style.DISPLAY.size && group.symbol && !utils.contains(noSuccessor, group.name)) {
-    // Most symbol operators get larger in displaystyle (rule 13)
-    large = true;
-  }
-
-  var base;
-
-  if (group.symbol) {
-    // If this is a symbol, create the symbol.
-    var fontName = large ? "Size2-Regular" : "Size1-Regular";
-    var stash = "";
-
-    if (group.name === "\\oiint" || group.name === "\\oiiint") {
-      // No font glyphs yet, so use a glyph w/o the oval.
-      // TODO: When font glyphs are available, delete this code.
-      stash = group.name.substr(1); // $FlowFixMe
-
-      group.name = stash === "oiint" ? "\\iint" : "\\iiint";
-    }
-
-    base = buildCommon.makeSymbol(group.name, fontName, "math", options, ["mop", "op-symbol", large ? "large-op" : "small-op"]);
-
-    if (stash.length > 0) {
-      // We're in \oiint or \oiiint. Overlay the oval.
-      // TODO: When font glyphs are available, delete this code.
-      var italic = base.italic;
-      var oval = buildCommon.staticSvg(stash + "Size" + (large ? "2" : "1"), options);
-      base = buildCommon.makeVList({
-        positionType: "individualShift",
-        children: [{
-          type: "elem",
-          elem: base,
-          shift: 0
-        }, {
-          type: "elem",
-          elem: oval,
-          shift: large ? 0.08 : 0
-        }]
-      }, options); // $FlowFixMe
-
-      group.name = "\\" + stash;
-      base.classes.unshift("mop"); // $FlowFixMe
-
-      base.italic = italic;
-    }
-  } else if (group.body) {
-    // If this is a list, compose that list.
-    var inner = buildHTML_buildExpression(group.body, options, true);
-
-    if (inner.length === 1 && inner[0] instanceof domTree_SymbolNode) {
-      base = inner[0];
-      base.classes[0] = "mop"; // replace old mclass
-    } else {
-      base = buildCommon.makeSpan(["mop"], buildCommon.tryCombineChars(inner), options);
-    }
-  } else {
-    // Otherwise, this is a text operator. Build the text from the
-    // operator's name.
-    // TODO(emily): Add a space in the middle of some of these
-    // operators, like \limsup
-    var output = [];
-
-    for (var i = 1; i < group.name.length; i++) {
-      output.push(buildCommon.mathsym(group.name[i], group.mode, options));
-    }
-
-    base = buildCommon.makeSpan(["mop"], output, options);
-  } // If content of op is a single symbol, shift it vertically.
-
-
-  var baseShift = 0;
-  var slant = 0;
-
-  if ((base instanceof domTree_SymbolNode || group.name === "\\oiint" || group.name === "\\oiiint") && !group.suppressBaseShift) {
-    // We suppress the shift of the base of \overset and \underset. Otherwise,
-    // shift the symbol so its center lies on the axis (rule 13). It
-    // appears that our fonts have the centers of the symbols already
-    // almost on the axis, so these numbers are very small. Note we
-    // don't actually apply this here, but instead it is used either in
-    // the vlist creation or separately when there are no limits.
-    baseShift = (base.height - base.depth) / 2 - options.fontMetrics().axisHeight; // The slant of the symbol is just its italic correction.
-    // $FlowFixMe
-
-    slant = base.italic;
-  }
-
-  if (hasLimits) {
-    return assembleSupSub_assembleSupSub(base, supGroup, subGroup, options, style, slant, baseShift);
-  } else {
-    if (baseShift) {
-      base.style.position = "relative";
-      base.style.top = baseShift + "em";
-    }
-
-    return base;
-  }
-};
-
-var op_mathmlBuilder = function mathmlBuilder(group, options) {
-  var node;
-
-  if (group.symbol) {
-    // This is a symbol. Just add the symbol.
-    node = new mathMLTree_MathNode("mo", [buildMathML_makeText(group.name, group.mode)]);
-
-    if (utils.contains(noSuccessor, group.name)) {
-      node.setAttribute("largeop", "false");
-    }
-  } else if (group.body) {
-    // This is an operator with children. Add them.
-    node = new mathMLTree_MathNode("mo", buildMathML_buildExpression(group.body, options));
-  } else {
-    // This is a text operator. Add all of the characters from the
-    // operator's name.
-    node = new mathMLTree_MathNode("mi", [new mathMLTree_TextNode(group.name.slice(1))]); // Append an <mo>&ApplyFunction;</mo>.
-    // ref: https://www.w3.org/TR/REC-MathML/chap3_2.html#sec3.2.4
-
-    var operator = new mathMLTree_MathNode("mo", [buildMathML_makeText("\u2061", "text")]);
-
-    if (group.parentIsSupSub) {
-      node = new mathMLTree_MathNode("mo", [node, operator]);
-    } else {
-      node = newDocumentFragment([node, operator]);
-    }
-  }
-
-  return node;
-};
-
-var singleCharBigOps = {
-  "\u220F": "\\prod",
-  "\u2210": "\\coprod",
-  "\u2211": "\\sum",
-  "\u22C0": "\\bigwedge",
-  "\u22C1": "\\bigvee",
-  "\u22C2": "\\bigcap",
-  "\u22C3": "\\bigcup",
-  "\u2A00": "\\bigodot",
-  "\u2A01": "\\bigoplus",
-  "\u2A02": "\\bigotimes",
-  "\u2A04": "\\biguplus",
-  "\u2A06": "\\bigsqcup"
-};
-defineFunction({
-  type: "op",
-  names: ["\\coprod", "\\bigvee", "\\bigwedge", "\\biguplus", "\\bigcap", "\\bigcup", "\\intop", "\\prod", "\\sum", "\\bigotimes", "\\bigoplus", "\\bigodot", "\\bigsqcup", "\\smallint", "\u220F", "\u2210", "\u2211", "\u22C0", "\u22C1", "\u22C2", "\u22C3", "\u2A00", "\u2A01", "\u2A02", "\u2A04", "\u2A06"],
-  props: {
-    numArgs: 0
-  },
-  handler: function handler(_ref, args) {
-    var parser = _ref.parser,
-        funcName = _ref.funcName;
-    var fName = funcName;
-
-    if (fName.length === 1) {
-      fName = singleCharBigOps[fName];
-    }
-
-    return {
-      type: "op",
-      mode: parser.mode,
-      limits: true,
-      parentIsSupSub: false,
-      symbol: true,
-      name: fName
-    };
-  },
-  htmlBuilder: op_htmlBuilder,
-  mathmlBuilder: op_mathmlBuilder
-}); // Note: calling defineFunction with a type that's already been defined only
-// works because the same htmlBuilder and mathmlBuilder are being used.
-
-defineFunction({
-  type: "op",
-  names: ["\\mathop"],
-  props: {
-    numArgs: 1
-  },
-  handler: function handler(_ref2, args) {
-    var parser = _ref2.parser;
-    var body = args[0];
-    return {
-      type: "op",
-      mode: parser.mode,
-      limits: false,
-      parentIsSupSub: false,
-      symbol: false,
-      body: defineFunction_ordargument(body)
-    };
-  },
-  htmlBuilder: op_htmlBuilder,
-  mathmlBuilder: op_mathmlBuilder
-}); // There are 2 flags for operators; whether they produce limits in
-// displaystyle, and whether they are symbols and should grow in
-// displaystyle. These four groups cover the four possible choices.
-
-var singleCharIntegrals = {
-  "\u222B": "\\int",
-  "\u222C": "\\iint",
-  "\u222D": "\\iiint",
-  "\u222E": "\\oint",
-  "\u222F": "\\oiint",
-  "\u2230": "\\oiiint"
-}; // No limits, not symbols
-
-defineFunction({
-  type: "op",
-  names: ["\\arcsin", "\\arccos", "\\arctan", "\\arctg", "\\arcctg", "\\arg", "\\ch", "\\cos", "\\cosec", "\\cosh", "\\cot", "\\cotg", "\\coth", "\\csc", "\\ctg", "\\cth", "\\deg", "\\dim", "\\exp", "\\hom", "\\ker", "\\lg", "\\ln", "\\log", "\\sec", "\\sin", "\\sinh", "\\sh", "\\tan", "\\tanh", "\\tg", "\\th"],
-  props: {
-    numArgs: 0
-  },
-  handler: function handler(_ref3) {
-    var parser = _ref3.parser,
-        funcName = _ref3.funcName;
-    return {
-      type: "op",
-      mode: parser.mode,
-      limits: false,
-      parentIsSupSub: false,
-      symbol: false,
-      name: funcName
-    };
-  },
-  htmlBuilder: op_htmlBuilder,
-  mathmlBuilder: op_mathmlBuilder
-}); // Limits, not symbols
-
-defineFunction({
-  type: "op",
-  names: ["\\det", "\\gcd", "\\inf", "\\lim", "\\max", "\\min", "\\Pr", "\\sup"],
-  props: {
-    numArgs: 0
-  },
-  handler: function handler(_ref4) {
-    var parser = _ref4.parser,
-        funcName = _ref4.funcName;
-    return {
-      type: "op",
-      mode: parser.mode,
-      limits: true,
-      parentIsSupSub: false,
-      symbol: false,
-      name: funcName
-    };
-  },
-  htmlBuilder: op_htmlBuilder,
-  mathmlBuilder: op_mathmlBuilder
-}); // No limits, symbols
-
-defineFunction({
-  type: "op",
-  names: ["\\int", "\\iint", "\\iiint", "\\oint", "\\oiint", "\\oiiint", "\u222B", "\u222C", "\u222D", "\u222E", "\u222F", "\u2230"],
-  props: {
-    numArgs: 0
-  },
-  handler: function handler(_ref5) {
-    var parser = _ref5.parser,
-        funcName = _ref5.funcName;
-    var fName = funcName;
-
-    if (fName.length === 1) {
-      fName = singleCharIntegrals[fName];
-    }
-
-    return {
-      type: "op",
-      mode: parser.mode,
-      limits: false,
-      parentIsSupSub: false,
-      symbol: true,
-      name: fName
-    };
-  },
-  htmlBuilder: op_htmlBuilder,
-  mathmlBuilder: op_mathmlBuilder
-});
-// CONCATENATED MODULE: ./src/functions/operatorname.js
-
-
-
-
-
-
-
-
-// NOTE: Unlike most `htmlBuilder`s, this one handles not only
-// "operatorname", but also  "supsub" since \operatorname* can
-var operatorname_htmlBuilder = function htmlBuilder(grp, options) {
-  // Operators are handled in the TeXbook pg. 443-444, rule 13(a).
-  var supGroup;
-  var subGroup;
-  var hasLimits = false;
-  var group;
-  var supSub = checkNodeType(grp, "supsub");
-
-  if (supSub) {
-    // If we have limits, supsub will pass us its group to handle. Pull
-    // out the superscript and subscript and set the group to the op in
-    // its base.
-    supGroup = supSub.sup;
-    subGroup = supSub.sub;
-    group = assertNodeType(supSub.base, "operatorname");
-    hasLimits = true;
-  } else {
-    group = assertNodeType(grp, "operatorname");
-  }
-
-  var base;
-
-  if (group.body.length > 0) {
-    var body = group.body.map(function (child) {
-      // $FlowFixMe: Check if the node has a string `text` property.
-      var childText = child.text;
-
-      if (typeof childText === "string") {
-        return {
-          type: "textord",
-          mode: child.mode,
-          text: childText
-        };
-      } else {
-        return child;
-      }
-    }); // Consolidate function names into symbol characters.
-
-    var expression = buildHTML_buildExpression(body, options.withFont("mathrm"), true);
-
-    for (var i = 0; i < expression.length; i++) {
-      var child = expression[i];
-
-      if (child instanceof domTree_SymbolNode) {
-        // Per amsopn package,
-        // change minus to hyphen and \ast to asterisk
-        child.text = child.text.replace(/\u2212/, "-").replace(/\u2217/, "*");
-      }
-    }
-
-    base = buildCommon.makeSpan(["mop"], expression, options);
-  } else {
-    base = buildCommon.makeSpan(["mop"], [], options);
-  }
-
-  if (hasLimits) {
-    return assembleSupSub_assembleSupSub(base, supGroup, subGroup, options, options.style, 0, 0);
-  } else {
-    return base;
-  }
-};
-
-var operatorname_mathmlBuilder = function mathmlBuilder(group, options) {
-  // The steps taken here are similar to the html version.
-  var expression = buildMathML_buildExpression(group.body, options.withFont("mathrm")); // Is expression a string or has it something like a fraction?
-
-  var isAllString = true; // default
-
-  for (var i = 0; i < expression.length; i++) {
-    var node = expression[i];
-
-    if (node instanceof mathMLTree.SpaceNode) {// Do nothing
-    } else if (node instanceof mathMLTree.MathNode) {
-      switch (node.type) {
-        case "mi":
-        case "mn":
-        case "ms":
-        case "mspace":
-        case "mtext":
-          break;
-        // Do nothing yet.
-
-        case "mo":
-          {
-            var child = node.children[0];
-
-            if (node.children.length === 1 && child instanceof mathMLTree.TextNode) {
-              child.text = child.text.replace(/\u2212/, "-").replace(/\u2217/, "*");
-            } else {
-              isAllString = false;
-            }
-
-            break;
-          }
-
-        default:
-          isAllString = false;
-      }
-    } else {
-      isAllString = false;
-    }
-  }
-
-  if (isAllString) {
-    // Write a single TextNode instead of multiple nested tags.
-    var word = expression.map(function (node) {
-      return node.toText();
-    }).join("");
-    expression = [new mathMLTree.TextNode(word)];
-  }
-
-  var identifier = new mathMLTree.MathNode("mi", expression);
-  identifier.setAttribute("mathvariant", "normal"); // \u2061 is the same as &ApplyFunction;
-  // ref: https://www.w3schools.com/charsets/ref_html_entities_a.asp
-
-  var operator = new mathMLTree.MathNode("mo", [buildMathML_makeText("\u2061", "text")]);
-
-  if (group.parentIsSupSub) {
-    return new mathMLTree.MathNode("mo", [identifier, operator]);
-  } else {
-    return mathMLTree.newDocumentFragment([identifier, operator]);
-  }
-}; // \operatorname
-// amsopn.dtx: \mathop{#1\kern\z@\operator@font#3}\newmcodes@
-
-
-defineFunction({
-  type: "operatorname",
-  names: ["\\operatorname", "\\operatorname*"],
-  props: {
-    numArgs: 1
-  },
-  handler: function handler(_ref, args) {
-    var parser = _ref.parser,
-        funcName = _ref.funcName;
-    var body = args[0];
-    return {
-      type: "operatorname",
-      mode: parser.mode,
-      body: defineFunction_ordargument(body),
-      alwaysHandleSupSub: funcName === "\\operatorname*",
-      limits: false,
-      parentIsSupSub: false
-    };
-  },
-  htmlBuilder: operatorname_htmlBuilder,
-  mathmlBuilder: operatorname_mathmlBuilder
-});
-// CONCATENATED MODULE: ./src/functions/ordgroup.js
-
-
-
-
-defineFunctionBuilders({
-  type: "ordgroup",
-  htmlBuilder: function htmlBuilder(group, options) {
-    if (group.semisimple) {
-      return buildCommon.makeFragment(buildHTML_buildExpression(group.body, options, false));
-    }
-
-    return buildCommon.makeSpan(["mord"], buildHTML_buildExpression(group.body, options, true), options);
-  },
-  mathmlBuilder: function mathmlBuilder(group, options) {
-    return buildExpressionRow(group.body, options, true);
-  }
-});
-// CONCATENATED MODULE: ./src/functions/overline.js
-
-
-
-
-
-defineFunction({
-  type: "overline",
-  names: ["\\overline"],
-  props: {
-    numArgs: 1
-  },
-  handler: function handler(_ref, args) {
-    var parser = _ref.parser;
-    var body = args[0];
-    return {
-      type: "overline",
-      mode: parser.mode,
-      body: body
-    };
-  },
-  htmlBuilder: function htmlBuilder(group, options) {
-    // Overlines are handled in the TeXbook pg 443, Rule 9.
-    // Build the inner group in the cramped style.
-    var innerGroup = buildHTML_buildGroup(group.body, options.havingCrampedStyle()); // Create the line above the body
-
-    var line = buildCommon.makeLineSpan("overline-line", options); // Generate the vlist, with the appropriate kerns
-
-    var defaultRuleThickness = options.fontMetrics().defaultRuleThickness;
-    var vlist = buildCommon.makeVList({
-      positionType: "firstBaseline",
-      children: [{
-        type: "elem",
-        elem: innerGroup
-      }, {
-        type: "kern",
-        size: 3 * defaultRuleThickness
-      }, {
-        type: "elem",
-        elem: line
-      }, {
-        type: "kern",
-        size: defaultRuleThickness
-      }]
-    }, options);
-    return buildCommon.makeSpan(["mord", "overline"], [vlist], options);
-  },
-  mathmlBuilder: function mathmlBuilder(group, options) {
-    var operator = new mathMLTree.MathNode("mo", [new mathMLTree.TextNode("\u203E")]);
-    operator.setAttribute("stretchy", "true");
-    var node = new mathMLTree.MathNode("mover", [buildMathML_buildGroup(group.body, options), operator]);
-    node.setAttribute("accent", "true");
-    return node;
-  }
-});
-// CONCATENATED MODULE: ./src/functions/phantom.js
-
-
-
-
-
-defineFunction({
-  type: "phantom",
-  names: ["\\phantom"],
-  props: {
-    numArgs: 1,
-    allowedInText: true
-  },
-  handler: function handler(_ref, args) {
-    var parser = _ref.parser;
-    var body = args[0];
-    return {
-      type: "phantom",
-      mode: parser.mode,
-      body: defineFunction_ordargument(body)
-    };
-  },
-  htmlBuilder: function htmlBuilder(group, options) {
-    var elements = buildHTML_buildExpression(group.body, options.withPhantom(), false); // \phantom isn't supposed to affect the elements it contains.
-    // See "color" for more details.
-
-    return buildCommon.makeFragment(elements);
-  },
-  mathmlBuilder: function mathmlBuilder(group, options) {
-    var inner = buildMathML_buildExpression(group.body, options);
-    return new mathMLTree.MathNode("mphantom", inner);
-  }
-});
-defineFunction({
-  type: "hphantom",
-  names: ["\\hphantom"],
-  props: {
-    numArgs: 1,
-    allowedInText: true
-  },
-  handler: function handler(_ref2, args) {
-    var parser = _ref2.parser;
-    var body = args[0];
-    return {
-      type: "hphantom",
-      mode: parser.mode,
-      body: body
-    };
-  },
-  htmlBuilder: function htmlBuilder(group, options) {
-    var node = buildCommon.makeSpan([], [buildHTML_buildGroup(group.body, options.withPhantom())]);
-    node.height = 0;
-    node.depth = 0;
-
-    if (node.children) {
-      for (var i = 0; i < node.children.length; i++) {
-        node.children[i].height = 0;
-        node.children[i].depth = 0;
-      }
-    } // See smash for comment re: use of makeVList
-
-
-    node = buildCommon.makeVList({
-      positionType: "firstBaseline",
-      children: [{
-        type: "elem",
-        elem: node
-      }]
-    }, options); // For spacing, TeX treats \smash as a math group (same spacing as ord).
-
-    return buildCommon.makeSpan(["mord"], [node], options);
-  },
-  mathmlBuilder: function mathmlBuilder(group, options) {
-    var inner = buildMathML_buildExpression(defineFunction_ordargument(group.body), options);
-    var phantom = new mathMLTree.MathNode("mphantom", inner);
-    var node = new mathMLTree.MathNode("mpadded", [phantom]);
-    node.setAttribute("height", "0px");
-    node.setAttribute("depth", "0px");
-    return node;
-  }
-});
-defineFunction({
-  type: "vphantom",
-  names: ["\\vphantom"],
-  props: {
-    numArgs: 1,
-    allowedInText: true
-  },
-  handler: function handler(_ref3, args) {
-    var parser = _ref3.parser;
-    var body = args[0];
-    return {
-      type: "vphantom",
-      mode: parser.mode,
-      body: body
-    };
-  },
-  htmlBuilder: function htmlBuilder(group, options) {
-    var inner = buildCommon.makeSpan(["inner"], [buildHTML_buildGroup(group.body, options.withPhantom())]);
-    var fix = buildCommon.makeSpan(["fix"], []);
-    return buildCommon.makeSpan(["mord", "rlap"], [inner, fix], options);
-  },
-  mathmlBuilder: function mathmlBuilder(group, options) {
-    var inner = buildMathML_buildExpression(defineFunction_ordargument(group.body), options);
-    var phantom = new mathMLTree.MathNode("mphantom", inner);
-    var node = new mathMLTree.MathNode("mpadded", [phantom]);
-    node.setAttribute("width", "0px");
-    return node;
-  }
-});
-// CONCATENATED MODULE: ./src/functions/raisebox.js
-
-
-
-
-
-
- // Box manipulation
-
-defineFunction({
-  type: "raisebox",
-  names: ["\\raisebox"],
-  props: {
-    numArgs: 2,
-    argTypes: ["size", "hbox"],
-    allowedInText: true
-  },
-  handler: function handler(_ref, args) {
-    var parser = _ref.parser;
-    var amount = assertNodeType(args[0], "size").value;
-    var body = args[1];
-    return {
-      type: "raisebox",
-      mode: parser.mode,
-      dy: amount,
-      body: body
-    };
-  },
-  htmlBuilder: function htmlBuilder(group, options) {
-    var body = buildHTML_buildGroup(group.body, options);
-    var dy = units_calculateSize(group.dy, options);
-    return buildCommon.makeVList({
-      positionType: "shift",
-      positionData: -dy,
-      children: [{
-        type: "elem",
-        elem: body
-      }]
-    }, options);
-  },
-  mathmlBuilder: function mathmlBuilder(group, options) {
-    var node = new mathMLTree.MathNode("mpadded", [buildMathML_buildGroup(group.body, options)]);
-    var dy = group.dy.number + group.dy.unit;
-    node.setAttribute("voffset", dy);
-    return node;
-  }
-});
-// CONCATENATED MODULE: ./src/functions/rule.js
-
-
-
-
-
-defineFunction({
-  type: "rule",
-  names: ["\\rule"],
-  props: {
-    numArgs: 2,
-    numOptionalArgs: 1,
-    argTypes: ["size", "size", "size"]
-  },
-  handler: function handler(_ref, args, optArgs) {
-    var parser = _ref.parser;
-    var shift = optArgs[0];
-    var width = assertNodeType(args[0], "size");
-    var height = assertNodeType(args[1], "size");
-    return {
-      type: "rule",
-      mode: parser.mode,
-      shift: shift && assertNodeType(shift, "size").value,
-      width: width.value,
-      height: height.value
-    };
-  },
-  htmlBuilder: function htmlBuilder(group, options) {
-    // Make an empty span for the rule
-    var rule = buildCommon.makeSpan(["mord", "rule"], [], options); // Calculate the shift, width, and height of the rule, and account for units
-
-    var width = units_calculateSize(group.width, options);
-    var height = units_calculateSize(group.height, options);
-    var shift = group.shift ? units_calculateSize(group.shift, options) : 0; // Style the rule to the right size
-
-    rule.style.borderRightWidth = width + "em";
-    rule.style.borderTopWidth = height + "em";
-    rule.style.bottom = shift + "em"; // Record the height and width
-
-    rule.width = width;
-    rule.height = height + shift;
-    rule.depth = -shift; // Font size is the number large enough that the browser will
-    // reserve at least `absHeight` space above the baseline.
-    // The 1.125 factor was empirically determined
-
-    rule.maxFontSize = height * 1.125 * options.sizeMultiplier;
-    return rule;
-  },
-  mathmlBuilder: function mathmlBuilder(group, options) {
-    var width = units_calculateSize(group.width, options);
-    var height = units_calculateSize(group.height, options);
-    var shift = group.shift ? units_calculateSize(group.shift, options) : 0;
-    var color = options.color && options.getColor() || "black";
-    var rule = new mathMLTree.MathNode("mspace");
-    rule.setAttribute("mathbackground", color);
-    rule.setAttribute("width", width + "em");
-    rule.setAttribute("height", height + "em");
-    var wrapper = new mathMLTree.MathNode("mpadded", [rule]);
-
-    if (shift >= 0) {
-      wrapper.setAttribute("height", "+" + shift + "em");
-    } else {
-      wrapper.setAttribute("height", shift + "em");
-      wrapper.setAttribute("depth", "+" + -shift + "em");
-    }
-
-    wrapper.setAttribute("voffset", shift + "em");
-    return wrapper;
-  }
-});
-// CONCATENATED MODULE: ./src/functions/sizing.js
-
-
-
-
-
-function sizingGroup(value, options, baseOptions) {
-  var inner = buildHTML_buildExpression(value, options, false);
-  var multiplier = options.sizeMultiplier / baseOptions.sizeMultiplier; // Add size-resetting classes to the inner list and set maxFontSize
-  // manually. Handle nested size changes.
-
-  for (var i = 0; i < inner.length; i++) {
-    var pos = inner[i].classes.indexOf("sizing");
-
-    if (pos < 0) {
-      Array.prototype.push.apply(inner[i].classes, options.sizingClasses(baseOptions));
-    } else if (inner[i].classes[pos + 1] === "reset-size" + options.size) {
-      // This is a nested size change: e.g., inner[i] is the "b" in
-      // `\Huge a \small b`. Override the old size (the `reset-` class)
-      // but not the new size.
-      inner[i].classes[pos + 1] = "reset-size" + baseOptions.size;
-    }
-
-    inner[i].height *= multiplier;
-    inner[i].depth *= multiplier;
-  }
-
-  return buildCommon.makeFragment(inner);
-}
-var sizeFuncs = ["\\tiny", "\\sixptsize", "\\scriptsize", "\\footnotesize", "\\small", "\\normalsize", "\\large", "\\Large", "\\LARGE", "\\huge", "\\Huge"];
-var sizing_htmlBuilder = function htmlBuilder(group, options) {
-  // Handle sizing operators like \Huge. Real TeX doesn't actually allow
-  // these functions inside of math expressions, so we do some special
-  // handling.
-  var newOptions = options.havingSize(group.size);
-  return sizingGroup(group.body, newOptions, options);
-};
-defineFunction({
-  type: "sizing",
-  names: sizeFuncs,
-  props: {
-    numArgs: 0,
-    allowedInText: true
-  },
-  handler: function handler(_ref, args) {
-    var breakOnTokenText = _ref.breakOnTokenText,
-        funcName = _ref.funcName,
-        parser = _ref.parser;
-    var body = parser.parseExpression(false, breakOnTokenText);
-    return {
-      type: "sizing",
-      mode: parser.mode,
-      // Figure out what size to use based on the list of functions above
-      size: sizeFuncs.indexOf(funcName) + 1,
-      body: body
-    };
-  },
-  htmlBuilder: sizing_htmlBuilder,
-  mathmlBuilder: function mathmlBuilder(group, options) {
-    var newOptions = options.havingSize(group.size);
-    var inner = buildMathML_buildExpression(group.body, newOptions);
-    var node = new mathMLTree.MathNode("mstyle", inner); // TODO(emily): This doesn't produce the correct size for nested size
-    // changes, because we don't keep state of what style we're currently
-    // in, so we can't reset the size to normal before changing it.  Now
-    // that we're passing an options parameter we should be able to fix
-    // this.
-
-    node.setAttribute("mathsize", newOptions.sizeMultiplier + "em");
-    return node;
-  }
-});
-// CONCATENATED MODULE: ./src/functions/smash.js
-// smash, with optional [tb], as in AMS
-
-
-
-
-
-
-defineFunction({
-  type: "smash",
-  names: ["\\smash"],
-  props: {
-    numArgs: 1,
-    numOptionalArgs: 1,
-    allowedInText: true
-  },
-  handler: function handler(_ref, args, optArgs) {
-    var parser = _ref.parser;
-    var smashHeight = false;
-    var smashDepth = false;
-    var tbArg = optArgs[0] && assertNodeType(optArgs[0], "ordgroup");
-
-    if (tbArg) {
-      // Optional [tb] argument is engaged.
-      // ref: amsmath: \renewcommand{\smash}[1][tb]{%
-      //               def\mb@t{\ht}\def\mb@b{\dp}\def\mb@tb{\ht\z@\z@\dp}%
-      var letter = "";
-
-      for (var i = 0; i < tbArg.body.length; ++i) {
-        var node = tbArg.body[i]; // $FlowFixMe: Not every node type has a `text` property.
-
-        letter = node.text;
-
-        if (letter === "t") {
-          smashHeight = true;
-        } else if (letter === "b") {
-          smashDepth = true;
-        } else {
-          smashHeight = false;
-          smashDepth = false;
-          break;
-        }
-      }
-    } else {
-      smashHeight = true;
-      smashDepth = true;
-    }
-
-    var body = args[0];
-    return {
-      type: "smash",
-      mode: parser.mode,
-      body: body,
-      smashHeight: smashHeight,
-      smashDepth: smashDepth
-    };
-  },
-  htmlBuilder: function htmlBuilder(group, options) {
-    var node = buildCommon.makeSpan([], [buildHTML_buildGroup(group.body, options)]);
-
-    if (!group.smashHeight && !group.smashDepth) {
-      return node;
-    }
-
-    if (group.smashHeight) {
-      node.height = 0; // In order to influence makeVList, we have to reset the children.
-
-      if (node.children) {
-        for (var i = 0; i < node.children.length; i++) {
-          node.children[i].height = 0;
-        }
-      }
-    }
-
-    if (group.smashDepth) {
-      node.depth = 0;
-
-      if (node.children) {
-        for (var _i = 0; _i < node.children.length; _i++) {
-          node.children[_i].depth = 0;
-        }
-      }
-    } // At this point, we've reset the TeX-like height and depth values.
-    // But the span still has an HTML line height.
-    // makeVList applies "display: table-cell", which prevents the browser
-    // from acting on that line height. So we'll call makeVList now.
-
-
-    var smashedNode = buildCommon.makeVList({
-      positionType: "firstBaseline",
-      children: [{
-        type: "elem",
-        elem: node
-      }]
-    }, options); // For spacing, TeX treats \hphantom as a math group (same spacing as ord).
-
-    return buildCommon.makeSpan(["mord"], [smashedNode], options);
-  },
-  mathmlBuilder: function mathmlBuilder(group, options) {
-    var node = new mathMLTree.MathNode("mpadded", [buildMathML_buildGroup(group.body, options)]);
-
-    if (group.smashHeight) {
-      node.setAttribute("height", "0px");
-    }
-
-    if (group.smashDepth) {
-      node.setAttribute("depth", "0px");
-    }
-
-    return node;
-  }
-});
-// CONCATENATED MODULE: ./src/functions/sqrt.js
-
-
-
-
-
-
-
-defineFunction({
-  type: "sqrt",
-  names: ["\\sqrt"],
-  props: {
-    numArgs: 1,
-    numOptionalArgs: 1
-  },
-  handler: function handler(_ref, args, optArgs) {
-    var parser = _ref.parser;
-    var index = optArgs[0];
-    var body = args[0];
-    return {
-      type: "sqrt",
-      mode: parser.mode,
-      body: body,
-      index: index
-    };
-  },
-  htmlBuilder: function htmlBuilder(group, options) {
-    // Square roots are handled in the TeXbook pg. 443, Rule 11.
-    // First, we do the same steps as in overline to build the inner group
-    // and line
-    var inner = buildHTML_buildGroup(group.body, options.havingCrampedStyle());
-
-    if (inner.height === 0) {
-      // Render a small surd.
-      inner.height = options.fontMetrics().xHeight;
-    } // Some groups can return document fragments.  Handle those by wrapping
-    // them in a span.
-
-
-    inner = buildCommon.wrapFragment(inner, options); // Calculate the minimum size for the \surd delimiter
-
-    var metrics = options.fontMetrics();
-    var theta = metrics.defaultRuleThickness;
-    var phi = theta;
-
-    if (options.style.id < src_Style.TEXT.id) {
-      phi = options.fontMetrics().xHeight;
-    } // Calculate the clearance between the body and line
-
-
-    var lineClearance = theta + phi / 4;
-    var minDelimiterHeight = inner.height + inner.depth + lineClearance + theta; // Create a sqrt SVG of the required minimum size
-
-    var _delimiter$sqrtImage = delimiter.sqrtImage(minDelimiterHeight, options),
-        img = _delimiter$sqrtImage.span,
-        ruleWidth = _delimiter$sqrtImage.ruleWidth,
-        advanceWidth = _delimiter$sqrtImage.advanceWidth;
-
-    var delimDepth = img.height - ruleWidth; // Adjust the clearance based on the delimiter size
-
-    if (delimDepth > inner.height + inner.depth + lineClearance) {
-      lineClearance = (lineClearance + delimDepth - inner.height - inner.depth) / 2;
-    } // Shift the sqrt image
-
-
-    var imgShift = img.height - inner.height - lineClearance - ruleWidth;
-    inner.style.paddingLeft = advanceWidth + "em"; // Overlay the image and the argument.
-
-    var body = buildCommon.makeVList({
-      positionType: "firstBaseline",
-      children: [{
-        type: "elem",
-        elem: inner,
-        wrapperClasses: ["svg-align"]
-      }, {
-        type: "kern",
-        size: -(inner.height + imgShift)
-      }, {
-        type: "elem",
-        elem: img
-      }, {
-        type: "kern",
-        size: ruleWidth
-      }]
-    }, options);
-
-    if (!group.index) {
-      return buildCommon.makeSpan(["mord", "sqrt"], [body], options);
-    } else {
-      // Handle the optional root index
-      // The index is always in scriptscript style
-      var newOptions = options.havingStyle(src_Style.SCRIPTSCRIPT);
-      var rootm = buildHTML_buildGroup(group.index, newOptions, options); // The amount the index is shifted by. This is taken from the TeX
-      // source, in the definition of `\r@@t`.
-
-      var toShift = 0.6 * (body.height - body.depth); // Build a VList with the superscript shifted up correctly
-
-      var rootVList = buildCommon.makeVList({
-        positionType: "shift",
-        positionData: -toShift,
-        children: [{
-          type: "elem",
-          elem: rootm
-        }]
-      }, options); // Add a class surrounding it so we can add on the appropriate
-      // kerning
-
-      var rootVListWrap = buildCommon.makeSpan(["root"], [rootVList]);
-      return buildCommon.makeSpan(["mord", "sqrt"], [rootVListWrap, body], options);
-    }
-  },
-  mathmlBuilder: function mathmlBuilder(group, options) {
-    var body = group.body,
-        index = group.index;
-    return index ? new mathMLTree.MathNode("mroot", [buildMathML_buildGroup(body, options), buildMathML_buildGroup(index, options)]) : new mathMLTree.MathNode("msqrt", [buildMathML_buildGroup(body, options)]);
-  }
-});
-// CONCATENATED MODULE: ./src/functions/styling.js
-
-
-
-
-
-var styling_styleMap = {
-  "display": src_Style.DISPLAY,
-  "text": src_Style.TEXT,
-  "script": src_Style.SCRIPT,
-  "scriptscript": src_Style.SCRIPTSCRIPT
-};
-defineFunction({
-  type: "styling",
-  names: ["\\displaystyle", "\\textstyle", "\\scriptstyle", "\\scriptscriptstyle"],
-  props: {
-    numArgs: 0,
-    allowedInText: true
-  },
-  handler: function handler(_ref, args) {
-    var breakOnTokenText = _ref.breakOnTokenText,
-        funcName = _ref.funcName,
-        parser = _ref.parser;
-    // parse out the implicit body
-    var body = parser.parseExpression(true, breakOnTokenText); // TODO: Refactor to avoid duplicating styleMap in multiple places (e.g.
-    // here and in buildHTML and de-dupe the enumeration of all the styles).
-    // $FlowFixMe: The names above exactly match the styles.
-
-    var style = funcName.slice(1, funcName.length - 5);
-    return {
-      type: "styling",
-      mode: parser.mode,
-      // Figure out what style to use by pulling out the style from
-      // the function name
-      style: style,
-      body: body
-    };
-  },
-  htmlBuilder: function htmlBuilder(group, options) {
-    // Style changes are handled in the TeXbook on pg. 442, Rule 3.
-    var newStyle = styling_styleMap[group.style];
-    var newOptions = options.havingStyle(newStyle).withFont('');
-    return sizingGroup(group.body, newOptions, options);
-  },
-  mathmlBuilder: function mathmlBuilder(group, options) {
-    // Figure out what style we're changing to.
-    var newStyle = styling_styleMap[group.style];
-    var newOptions = options.havingStyle(newStyle);
-    var inner = buildMathML_buildExpression(group.body, newOptions);
-    var node = new mathMLTree.MathNode("mstyle", inner);
-    var styleAttributes = {
-      "display": ["0", "true"],
-      "text": ["0", "false"],
-      "script": ["1", "false"],
-      "scriptscript": ["2", "false"]
-    };
-    var attr = styleAttributes[group.style];
-    node.setAttribute("scriptlevel", attr[0]);
-    node.setAttribute("displaystyle", attr[1]);
-    return node;
-  }
-});
-// CONCATENATED MODULE: ./src/functions/supsub.js
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-/**
- * Sometimes, groups perform special rules when they have superscripts or
- * subscripts attached to them. This function lets the `supsub` group know that
- * Sometimes, groups perform special rules when they have superscripts or
- * its inner element should handle the superscripts and subscripts instead of
- * handling them itself.
- */
-var supsub_htmlBuilderDelegate = function htmlBuilderDelegate(group, options) {
-  var base = group.base;
-
-  if (!base) {
-    return null;
-  } else if (base.type === "op") {
-    // Operators handle supsubs differently when they have limits
-    // (e.g. `\displaystyle\sum_2^3`)
-    var delegate = base.limits && (options.style.size === src_Style.DISPLAY.size || base.alwaysHandleSupSub);
-    return delegate ? op_htmlBuilder : null;
-  } else if (base.type === "operatorname") {
-    var _delegate = base.alwaysHandleSupSub && (options.style.size === src_Style.DISPLAY.size || base.limits);
-
-    return _delegate ? operatorname_htmlBuilder : null;
-  } else if (base.type === "accent") {
-    return utils.isCharacterBox(base.base) ? accent_htmlBuilder : null;
-  } else if (base.type === "horizBrace") {
-    var isSup = !group.sub;
-    return isSup === base.isOver ? horizBrace_htmlBuilder : null;
-  } else {
-    return null;
-  }
-}; // Super scripts and subscripts, whose precise placement can depend on other
-// functions that precede them.
-
-
-defineFunctionBuilders({
-  type: "supsub",
-  htmlBuilder: function htmlBuilder(group, options) {
-    // Superscript and subscripts are handled in the TeXbook on page
-    // 445-446, rules 18(a-f).
-    // Here is where we defer to the inner group if it should handle
-    // superscripts and subscripts itself.
-    var builderDelegate = supsub_htmlBuilderDelegate(group, options);
-
-    if (builderDelegate) {
-      return builderDelegate(group, options);
-    }
-
-    var valueBase = group.base,
-        valueSup = group.sup,
-        valueSub = group.sub;
-    var base = buildHTML_buildGroup(valueBase, options);
-    var supm;
-    var subm;
-    var metrics = options.fontMetrics(); // Rule 18a
-
-    var supShift = 0;
-    var subShift = 0;
-    var isCharacterBox = valueBase && utils.isCharacterBox(valueBase);
-
-    if (valueSup) {
-      var newOptions = options.havingStyle(options.style.sup());
-      supm = buildHTML_buildGroup(valueSup, newOptions, options);
-
-      if (!isCharacterBox) {
-        supShift = base.height - newOptions.fontMetrics().supDrop * newOptions.sizeMultiplier / options.sizeMultiplier;
-      }
-    }
-
-    if (valueSub) {
-      var _newOptions = options.havingStyle(options.style.sub());
-
-      subm = buildHTML_buildGroup(valueSub, _newOptions, options);
-
-      if (!isCharacterBox) {
-        subShift = base.depth + _newOptions.fontMetrics().subDrop * _newOptions.sizeMultiplier / options.sizeMultiplier;
-      }
-    } // Rule 18c
-
-
-    var minSupShift;
-
-    if (options.style === src_Style.DISPLAY) {
-      minSupShift = metrics.sup1;
-    } else if (options.style.cramped) {
-      minSupShift = metrics.sup3;
-    } else {
-      minSupShift = metrics.sup2;
-    } // scriptspace is a font-size-independent size, so scale it
-    // appropriately for use as the marginRight.
-
-
-    var multiplier = options.sizeMultiplier;
-    var marginRight = 0.5 / metrics.ptPerEm / multiplier + "em";
-    var marginLeft = null;
-
-    if (subm) {
-      // Subscripts shouldn't be shifted by the base's italic correction.
-      // Account for that by shifting the subscript back the appropriate
-      // amount. Note we only do this when the base is a single symbol.
-      var isOiint = group.base && group.base.type === "op" && group.base.name && (group.base.name === "\\oiint" || group.base.name === "\\oiiint");
-
-      if (base instanceof domTree_SymbolNode || isOiint) {
-        // $FlowFixMe
-        marginLeft = -base.italic + "em";
-      }
-    }
-
-    var supsub;
-
-    if (supm && subm) {
-      supShift = Math.max(supShift, minSupShift, supm.depth + 0.25 * metrics.xHeight);
-      subShift = Math.max(subShift, metrics.sub2);
-      var ruleWidth = metrics.defaultRuleThickness; // Rule 18e
-
-      var maxWidth = 4 * ruleWidth;
-
-      if (supShift - supm.depth - (subm.height - subShift) < maxWidth) {
-        subShift = maxWidth - (supShift - supm.depth) + subm.height;
-        var psi = 0.8 * metrics.xHeight - (supShift - supm.depth);
-
-        if (psi > 0) {
-          supShift += psi;
-          subShift -= psi;
-        }
-      }
-
-      var vlistElem = [{
-        type: "elem",
-        elem: subm,
-        shift: subShift,
-        marginRight: marginRight,
-        marginLeft: marginLeft
-      }, {
-        type: "elem",
-        elem: supm,
-        shift: -supShift,
-        marginRight: marginRight
-      }];
-      supsub = buildCommon.makeVList({
-        positionType: "individualShift",
-        children: vlistElem
-      }, options);
-    } else if (subm) {
-      // Rule 18b
-      subShift = Math.max(subShift, metrics.sub1, subm.height - 0.8 * metrics.xHeight);
-      var _vlistElem = [{
-        type: "elem",
-        elem: subm,
-        marginLeft: marginLeft,
-        marginRight: marginRight
-      }];
-      supsub = buildCommon.makeVList({
-        positionType: "shift",
-        positionData: subShift,
-        children: _vlistElem
-      }, options);
-    } else if (supm) {
-      // Rule 18c, d
-      supShift = Math.max(supShift, minSupShift, supm.depth + 0.25 * metrics.xHeight);
-      supsub = buildCommon.makeVList({
-        positionType: "shift",
-        positionData: -supShift,
-        children: [{
-          type: "elem",
-          elem: supm,
-          marginRight: marginRight
-        }]
-      }, options);
-    } else {
-      throw new Error("supsub must have either sup or sub.");
-    } // Wrap the supsub vlist in a span.msupsub to reset text-align.
-
-
-    var mclass = getTypeOfDomTree(base, "right") || "mord";
-    return buildCommon.makeSpan([mclass], [base, buildCommon.makeSpan(["msupsub"], [supsub])], options);
-  },
-  mathmlBuilder: function mathmlBuilder(group, options) {
-    // Is the inner group a relevant horizonal brace?
-    var isBrace = false;
-    var isOver;
-    var isSup;
-    var horizBrace = checkNodeType(group.base, "horizBrace");
-
-    if (horizBrace) {
-      isSup = !!group.sup;
-
-      if (isSup === horizBrace.isOver) {
-        isBrace = true;
-        isOver = horizBrace.isOver;
-      }
-    }
-
-    if (group.base && (group.base.type === "op" || group.base.type === "operatorname")) {
-      group.base.parentIsSupSub = true;
-    }
-
-    var children = [buildMathML_buildGroup(group.base, options)];
-
-    if (group.sub) {
-      children.push(buildMathML_buildGroup(group.sub, options));
-    }
-
-    if (group.sup) {
-      children.push(buildMathML_buildGroup(group.sup, options));
-    }
-
-    var nodeType;
-
-    if (isBrace) {
-      nodeType = isOver ? "mover" : "munder";
-    } else if (!group.sub) {
-      var base = group.base;
-
-      if (base && base.type === "op" && base.limits && (options.style === src_Style.DISPLAY || base.alwaysHandleSupSub)) {
-        nodeType = "mover";
-      } else if (base && base.type === "operatorname" && base.alwaysHandleSupSub && (base.limits || options.style === src_Style.DISPLAY)) {
-        nodeType = "mover";
-      } else {
-        nodeType = "msup";
-      }
-    } else if (!group.sup) {
-      var _base = group.base;
-
-      if (_base && _base.type === "op" && _base.limits && (options.style === src_Style.DISPLAY || _base.alwaysHandleSupSub)) {
-        nodeType = "munder";
-      } else if (_base && _base.type === "operatorname" && _base.alwaysHandleSupSub && (_base.limits || options.style === src_Style.DISPLAY)) {
-        nodeType = "munder";
-      } else {
-        nodeType = "msub";
-      }
-    } else {
-      var _base2 = group.base;
-
-      if (_base2 && _base2.type === "op" && _base2.limits && options.style === src_Style.DISPLAY) {
-        nodeType = "munderover";
-      } else if (_base2 && _base2.type === "operatorname" && _base2.alwaysHandleSupSub && (options.style === src_Style.DISPLAY || _base2.limits)) {
-        nodeType = "munderover";
-      } else {
-        nodeType = "msubsup";
-      }
-    }
-
-    var node = new mathMLTree.MathNode(nodeType, children);
-    return node;
-  }
-});
-// CONCATENATED MODULE: ./src/functions/symbolsOp.js
-
-
-
- // Operator ParseNodes created in Parser.js from symbol Groups in src/symbols.js.
-
-defineFunctionBuilders({
-  type: "atom",
-  htmlBuilder: function htmlBuilder(group, options) {
-    return buildCommon.mathsym(group.text, group.mode, options, ["m" + group.family]);
-  },
-  mathmlBuilder: function mathmlBuilder(group, options) {
-    var node = new mathMLTree.MathNode("mo", [buildMathML_makeText(group.text, group.mode)]);
-
-    if (group.family === "bin") {
-      var variant = buildMathML_getVariant(group, options);
-
-      if (variant === "bold-italic") {
-        node.setAttribute("mathvariant", variant);
-      }
-    } else if (group.family === "punct") {
-      node.setAttribute("separator", "true");
-    } else if (group.family === "open" || group.family === "close") {
-      // Delims built here should not stretch vertically.
-      // See delimsizing.js for stretchy delims.
-      node.setAttribute("stretchy", "false");
-    }
-
-    return node;
-  }
-});
-// CONCATENATED MODULE: ./src/functions/symbolsOrd.js
-
-
-
-
-// "mathord" and "textord" ParseNodes created in Parser.js from symbol Groups in
-var defaultVariant = {
-  "mi": "italic",
-  "mn": "normal",
-  "mtext": "normal"
-};
-defineFunctionBuilders({
-  type: "mathord",
-  htmlBuilder: function htmlBuilder(group, options) {
-    return buildCommon.makeOrd(group, options, "mathord");
-  },
-  mathmlBuilder: function mathmlBuilder(group, options) {
-    var node = new mathMLTree.MathNode("mi", [buildMathML_makeText(group.text, group.mode, options)]);
-    var variant = buildMathML_getVariant(group, options) || "italic";
-
-    if (variant !== defaultVariant[node.type]) {
-      node.setAttribute("mathvariant", variant);
-    }
-
-    return node;
-  }
-});
-defineFunctionBuilders({
-  type: "textord",
-  htmlBuilder: function htmlBuilder(group, options) {
-    return buildCommon.makeOrd(group, options, "textord");
-  },
-  mathmlBuilder: function mathmlBuilder(group, options) {
-    var text = buildMathML_makeText(group.text, group.mode, options);
-    var variant = buildMathML_getVariant(group, options) || "normal";
-    var node;
-
-    if (group.mode === 'text') {
-      node = new mathMLTree.MathNode("mtext", [text]);
-    } else if (/[0-9]/.test(group.text)) {
-      // TODO(kevinb) merge adjacent <mn> nodes
-      // do it as a post processing step
-      node = new mathMLTree.MathNode("mn", [text]);
-    } else if (group.text === "\\prime") {
-      node = new mathMLTree.MathNode("mo", [text]);
-    } else {
-      node = new mathMLTree.MathNode("mi", [text]);
-    }
-
-    if (variant !== defaultVariant[node.type]) {
-      node.setAttribute("mathvariant", variant);
-    }
-
-    return node;
-  }
-});
-// CONCATENATED MODULE: ./src/functions/symbolsSpacing.js
-
-
-
- // A map of CSS-based spacing functions to their CSS class.
-
-var cssSpace = {
-  "\\nobreak": "nobreak",
-  "\\allowbreak": "allowbreak"
-}; // A lookup table to determine whether a spacing function/symbol should be
-// treated like a regular space character.  If a symbol or command is a key
-// in this table, then it should be a regular space character.  Furthermore,
-// the associated value may have a `className` specifying an extra CSS class
-// to add to the created `span`.
-
-var regularSpace = {
-  " ": {},
-  "\\ ": {},
-  "~": {
-    className: "nobreak"
-  },
-  "\\space": {},
-  "\\nobreakspace": {
-    className: "nobreak"
-  }
-}; // ParseNode<"spacing"> created in Parser.js from the "spacing" symbol Groups in
-// src/symbols.js.
-
-defineFunctionBuilders({
-  type: "spacing",
-  htmlBuilder: function htmlBuilder(group, options) {
-    if (regularSpace.hasOwnProperty(group.text)) {
-      var className = regularSpace[group.text].className || ""; // Spaces are generated by adding an actual space. Each of these
-      // things has an entry in the symbols table, so these will be turned
-      // into appropriate outputs.
-
-      if (group.mode === "text") {
-        var ord = buildCommon.makeOrd(group, options, "textord");
-        ord.classes.push(className);
-        return ord;
-      } else {
-        return buildCommon.makeSpan(["mspace", className], [buildCommon.mathsym(group.text, group.mode, options)], options);
-      }
-    } else if (cssSpace.hasOwnProperty(group.text)) {
-      // Spaces based on just a CSS class.
-      return buildCommon.makeSpan(["mspace", cssSpace[group.text]], [], options);
-    } else {
-      throw new src_ParseError("Unknown type of space \"" + group.text + "\"");
-    }
-  },
-  mathmlBuilder: function mathmlBuilder(group, options) {
-    var node;
-
-    if (regularSpace.hasOwnProperty(group.text)) {
-      node = new mathMLTree.MathNode("mtext", [new mathMLTree.TextNode("\xA0")]);
-    } else if (cssSpace.hasOwnProperty(group.text)) {
-      // CSS-based MathML spaces (\nobreak, \allowbreak) are ignored
-      return new mathMLTree.MathNode("mspace");
-    } else {
-      throw new src_ParseError("Unknown type of space \"" + group.text + "\"");
-    }
-
-    return node;
-  }
-});
-// CONCATENATED MODULE: ./src/functions/tag.js
-
-
-
-
-var tag_pad = function pad() {
-  var padNode = new mathMLTree.MathNode("mtd", []);
-  padNode.setAttribute("width", "50%");
-  return padNode;
-};
-
-defineFunctionBuilders({
-  type: "tag",
-  mathmlBuilder: function mathmlBuilder(group, options) {
-    var table = new mathMLTree.MathNode("mtable", [new mathMLTree.MathNode("mtr", [tag_pad(), new mathMLTree.MathNode("mtd", [buildExpressionRow(group.body, options)]), tag_pad(), new mathMLTree.MathNode("mtd", [buildExpressionRow(group.tag, options)])])]);
-    table.setAttribute("width", "100%");
-    return table; // TODO: Left-aligned tags.
-    // Currently, the group and options passed here do not contain
-    // enough info to set tag alignment. `leqno` is in Settings but it is
-    // not passed to Options. On the HTML side, leqno is
-    // set by a CSS class applied in buildTree.js. That would have worked
-    // in MathML if browsers supported <mlabeledtr>. Since they don't, we
-    // need to rewrite the way this function is called.
-  }
-});
-// CONCATENATED MODULE: ./src/functions/text.js
-
-
-
- // Non-mathy text, possibly in a font
-
-var textFontFamilies = {
-  "\\text": undefined,
-  "\\textrm": "textrm",
-  "\\textsf": "textsf",
-  "\\texttt": "texttt",
-  "\\textnormal": "textrm"
-};
-var textFontWeights = {
-  "\\textbf": "textbf",
-  "\\textmd": "textmd"
-};
-var textFontShapes = {
-  "\\textit": "textit",
-  "\\textup": "textup"
-};
-
-var optionsWithFont = function optionsWithFont(group, options) {
-  var font = group.font; // Checks if the argument is a font family or a font style.
-
-  if (!font) {
-    return options;
-  } else if (textFontFamilies[font]) {
-    return options.withTextFontFamily(textFontFamilies[font]);
-  } else if (textFontWeights[font]) {
-    return options.withTextFontWeight(textFontWeights[font]);
-  } else {
-    return options.withTextFontShape(textFontShapes[font]);
-  }
-};
-
-defineFunction({
-  type: "text",
-  names: [// Font families
-  "\\text", "\\textrm", "\\textsf", "\\texttt", "\\textnormal", // Font weights
-  "\\textbf", "\\textmd", // Font Shapes
-  "\\textit", "\\textup"],
-  props: {
-    numArgs: 1,
-    argTypes: ["text"],
-    greediness: 2,
-    allowedInText: true
-  },
-  handler: function handler(_ref, args) {
-    var parser = _ref.parser,
-        funcName = _ref.funcName;
-    var body = args[0];
-    return {
-      type: "text",
-      mode: parser.mode,
-      body: defineFunction_ordargument(body),
-      font: funcName
-    };
-  },
-  htmlBuilder: function htmlBuilder(group, options) {
-    var newOptions = optionsWithFont(group, options);
-    var inner = buildHTML_buildExpression(group.body, newOptions, true);
-    return buildCommon.makeSpan(["mord", "text"], buildCommon.tryCombineChars(inner), newOptions);
-  },
-  mathmlBuilder: function mathmlBuilder(group, options) {
-    var newOptions = optionsWithFont(group, options);
-    return buildExpressionRow(group.body, newOptions);
-  }
-});
-// CONCATENATED MODULE: ./src/functions/underline.js
-
-
-
-
-
-defineFunction({
-  type: "underline",
-  names: ["\\underline"],
-  props: {
-    numArgs: 1,
-    allowedInText: true
-  },
-  handler: function handler(_ref, args) {
-    var parser = _ref.parser;
-    return {
-      type: "underline",
-      mode: parser.mode,
-      body: args[0]
-    };
-  },
-  htmlBuilder: function htmlBuilder(group, options) {
-    // Underlines are handled in the TeXbook pg 443, Rule 10.
-    // Build the inner group.
-    var innerGroup = buildHTML_buildGroup(group.body, options); // Create the line to go below the body
-
-    var line = buildCommon.makeLineSpan("underline-line", options); // Generate the vlist, with the appropriate kerns
-
-    var defaultRuleThickness = options.fontMetrics().defaultRuleThickness;
-    var vlist = buildCommon.makeVList({
-      positionType: "top",
-      positionData: innerGroup.height,
-      children: [{
-        type: "kern",
-        size: defaultRuleThickness
-      }, {
-        type: "elem",
-        elem: line
-      }, {
-        type: "kern",
-        size: 3 * defaultRuleThickness
-      }, {
-        type: "elem",
-        elem: innerGroup
-      }]
-    }, options);
-    return buildCommon.makeSpan(["mord", "underline"], [vlist], options);
-  },
-  mathmlBuilder: function mathmlBuilder(group, options) {
-    var operator = new mathMLTree.MathNode("mo", [new mathMLTree.TextNode("\u203E")]);
-    operator.setAttribute("stretchy", "true");
-    var node = new mathMLTree.MathNode("munder", [buildMathML_buildGroup(group.body, options), operator]);
-    node.setAttribute("accentunder", "true");
-    return node;
-  }
-});
-// CONCATENATED MODULE: ./src/functions/verb.js
-
-
-
-
-defineFunction({
-  type: "verb",
-  names: ["\\verb"],
-  props: {
-    numArgs: 0,
-    allowedInText: true
-  },
-  handler: function handler(context, args, optArgs) {
-    // \verb and \verb* are dealt with directly in Parser.js.
-    // If we end up here, it's because of a failure to match the two delimiters
-    // in the regex in Lexer.js.  LaTeX raises the following error when \verb is
-    // terminated by end of line (or file).
-    throw new src_ParseError("\\verb ended by end of line instead of matching delimiter");
-  },
-  htmlBuilder: function htmlBuilder(group, options) {
-    var text = makeVerb(group);
-    var body = []; // \verb enters text mode and therefore is sized like \textstyle
-
-    var newOptions = options.havingStyle(options.style.text());
-
-    for (var i = 0; i < text.length; i++) {
-      var c = text[i];
-
-      if (c === '~') {
-        c = '\\textasciitilde';
-      }
-
-      body.push(buildCommon.makeSymbol(c, "Typewriter-Regular", group.mode, newOptions, ["mord", "texttt"]));
-    }
-
-    return buildCommon.makeSpan(["mord", "text"].concat(newOptions.sizingClasses(options)), buildCommon.tryCombineChars(body), newOptions);
-  },
-  mathmlBuilder: function mathmlBuilder(group, options) {
-    var text = new mathMLTree.TextNode(makeVerb(group));
-    var node = new mathMLTree.MathNode("mtext", [text]);
-    node.setAttribute("mathvariant", "monospace");
-    return node;
-  }
-});
-/**
- * Converts verb group into body string.
- *
- * \verb* replaces each space with an open box \u2423
- * \verb replaces each space with a no-break space \xA0
- */
-
-var makeVerb = function makeVerb(group) {
-  return group.body.replace(/ /g, group.star ? "\u2423" : '\xA0');
-};
-// CONCATENATED MODULE: ./src/functions.js
-/** Include this to ensure that all functions are defined. */
-
-var functions = _functions;
-/* harmony default export */ var src_functions = (functions); // TODO(kevinb): have functions return an object and call defineFunction with
-// that object in this file instead of relying on side-effects.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-// CONCATENATED MODULE: ./src/Lexer.js
-/**
- * The Lexer class handles tokenizing the input in various ways. Since our
- * parser expects us to be able to backtrack, the lexer allows lexing from any
- * given starting point.
- *
- * Its main exposed function is the `lex` function, which takes a position to
- * lex from and a type of token to lex. It defers to the appropriate `_innerLex`
- * function.
- *
- * The various `_innerLex` functions perform the actual lexing of different
- * kinds.
- */
-
-
-
-
-/* The following tokenRegex
- * - matches typical whitespace (but not NBSP etc.) using its first group
- * - does not match any control character \x00-\x1f except whitespace
- * - does not match a bare backslash
- * - matches any ASCII character except those just mentioned
- * - does not match the BMP private use area \uE000-\uF8FF
- * - does not match bare surrogate code units
- * - matches any BMP character except for those just described
- * - matches any valid Unicode surrogate pair
- * - matches a backslash followed by one or more letters
- * - matches a backslash followed by any BMP character, including newline
- * Just because the Lexer matches something doesn't mean it's valid input:
- * If there is no matching function or symbol definition, the Parser will
- * still reject the input.
- */
-var spaceRegexString = "[ \r\n\t]";
-var controlWordRegexString = "\\\\[a-zA-Z@]+";
-var controlSymbolRegexString = "\\\\[^\uD800-\uDFFF]";
-var controlWordWhitespaceRegexString = "" + controlWordRegexString + spaceRegexString + "*";
-var controlWordWhitespaceRegex = new RegExp("^(" + controlWordRegexString + ")" + spaceRegexString + "*$");
-var combiningDiacriticalMarkString = "[\u0300-\u036F]";
-var combiningDiacriticalMarksEndRegex = new RegExp(combiningDiacriticalMarkString + "+$");
-var tokenRegexString = "(" + spaceRegexString + "+)|" + // whitespace
-"([!-\\[\\]-\u2027\u202A-\uD7FF\uF900-\uFFFF]" + ( // single codepoint
-combiningDiacriticalMarkString + "*") + // ...plus accents
-"|[\uD800-\uDBFF][\uDC00-\uDFFF]" + ( // surrogate pair
-combiningDiacriticalMarkString + "*") + // ...plus accents
-"|\\\\verb\\*([^]).*?\\3" + // \verb*
-"|\\\\verb([^*a-zA-Z]).*?\\4" + // \verb unstarred
-"|\\\\operatorname\\*" + ( // \operatorname*
-"|" + controlWordWhitespaceRegexString) + ( // \macroName + spaces
-"|" + controlSymbolRegexString + ")"); // \\, \', etc.
-
-/** Main Lexer class */
-
-var Lexer_Lexer =
-/*#__PURE__*/
-function () {
-  // category codes, only supports comment characters (14) for now
-  function Lexer(input, settings) {
-    this.input = void 0;
-    this.settings = void 0;
-    this.tokenRegex = void 0;
-    this.catcodes = void 0;
-    // Separate accents from characters
-    this.input = input;
-    this.settings = settings;
-    this.tokenRegex = new RegExp(tokenRegexString, 'g');
-    this.catcodes = {
-      "%": 14 // comment character
-
-    };
-  }
-
-  var _proto = Lexer.prototype;
-
-  _proto.setCatcode = function setCatcode(char, code) {
-    this.catcodes[char] = code;
-  }
-  /**
-   * This function lexes a single token.
-   */
-  ;
-
-  _proto.lex = function lex() {
-    var input = this.input;
-    var pos = this.tokenRegex.lastIndex;
-
-    if (pos === input.length) {
-      return new Token_Token("EOF", new SourceLocation(this, pos, pos));
-    }
-
-    var match = this.tokenRegex.exec(input);
-
-    if (match === null || match.index !== pos) {
-      throw new src_ParseError("Unexpected character: '" + input[pos] + "'", new Token_Token(input[pos], new SourceLocation(this, pos, pos + 1)));
-    }
-
-    var text = match[2] || " ";
-
-    if (this.catcodes[text] === 14) {
-      // comment character
-      var nlIndex = input.indexOf('\n', this.tokenRegex.lastIndex);
-
-      if (nlIndex === -1) {
-        this.tokenRegex.lastIndex = input.length; // EOF
-
-        this.settings.reportNonstrict("commentAtEnd", "% comment has no terminating newline; LaTeX would " + "fail because of commenting the end of math mode (e.g. $)");
-      } else {
-        this.tokenRegex.lastIndex = nlIndex + 1;
-      }
-
-      return this.lex();
-    } // Trim any trailing whitespace from control word match
-
-
-    var controlMatch = text.match(controlWordWhitespaceRegex);
-
-    if (controlMatch) {
-      text = controlMatch[1];
-    }
-
-    return new Token_Token(text, new SourceLocation(this, pos, this.tokenRegex.lastIndex));
-  };
-
-  return Lexer;
-}();
-
-
-// CONCATENATED MODULE: ./src/Namespace.js
-/**
- * A `Namespace` refers to a space of nameable things like macros or lengths,
- * which can be `set` either globally or local to a nested group, using an
- * undo stack similar to how TeX implements this functionality.
- * Performance-wise, `get` and local `set` take constant time, while global
- * `set` takes time proportional to the depth of group nesting.
- */
-
-
-var Namespace_Namespace =
-/*#__PURE__*/
-function () {
-  /**
-   * Both arguments are optional.  The first argument is an object of
-   * built-in mappings which never change.  The second argument is an object
-   * of initial (global-level) mappings, which will constantly change
-   * according to any global/top-level `set`s done.
-   */
-  function Namespace(builtins, globalMacros) {
-    if (builtins === void 0) {
-      builtins = {};
-    }
-
-    if (globalMacros === void 0) {
-      globalMacros = {};
-    }
-
-    this.current = void 0;
-    this.builtins = void 0;
-    this.undefStack = void 0;
-    this.current = globalMacros;
-    this.builtins = builtins;
-    this.undefStack = [];
-  }
-  /**
-   * Start a new nested group, affecting future local `set`s.
-   */
-
-
-  var _proto = Namespace.prototype;
-
-  _proto.beginGroup = function beginGroup() {
-    this.undefStack.push({});
-  }
-  /**
-   * End current nested group, restoring values before the group began.
-   */
-  ;
-
-  _proto.endGroup = function endGroup() {
-    if (this.undefStack.length === 0) {
-      throw new src_ParseError("Unbalanced namespace destruction: attempt " + "to pop global namespace; please report this as a bug");
-    }
-
-    var undefs = this.undefStack.pop();
-
-    for (var undef in undefs) {
-      if (undefs.hasOwnProperty(undef)) {
-        if (undefs[undef] === undefined) {
-          delete this.current[undef];
-        } else {
-          this.current[undef] = undefs[undef];
-        }
-      }
-    }
-  }
-  /**
-   * Detect whether `name` has a definition.  Equivalent to
-   * `get(name) != null`.
-   */
-  ;
-
-  _proto.has = function has(name) {
-    return this.current.hasOwnProperty(name) || this.builtins.hasOwnProperty(name);
-  }
-  /**
-   * Get the current value of a name, or `undefined` if there is no value.
-   *
-   * Note: Do not use `if (namespace.get(...))` to detect whether a macro
-   * is defined, as the definition may be the empty string which evaluates
-   * to `false` in JavaScript.  Use `if (namespace.get(...) != null)` or
-   * `if (namespace.has(...))`.
-   */
-  ;
-
-  _proto.get = function get(name) {
-    if (this.current.hasOwnProperty(name)) {
-      return this.current[name];
-    } else {
-      return this.builtins[name];
-    }
-  }
-  /**
-   * Set the current value of a name, and optionally set it globally too.
-   * Local set() sets the current value and (when appropriate) adds an undo
-   * operation to the undo stack.  Global set() may change the undo
-   * operation at every level, so takes time linear in their number.
-   */
-  ;
-
-  _proto.set = function set(name, value, global) {
-    if (global === void 0) {
-      global = false;
-    }
-
-    if (global) {
-      // Global set is equivalent to setting in all groups.  Simulate this
-      // by destroying any undos currently scheduled for this name,
-      // and adding an undo with the *new* value (in case it later gets
-      // locally reset within this environment).
-      for (var i = 0; i < this.undefStack.length; i++) {
-        delete this.undefStack[i][name];
-      }
-
-      if (this.undefStack.length > 0) {
-        this.undefStack[this.undefStack.length - 1][name] = value;
-      }
-    } else {
-      // Undo this set at end of this group (possibly to `undefined`),
-      // unless an undo is already in place, in which case that older
-      // value is the correct one.
-      var top = this.undefStack[this.undefStack.length - 1];
-
-      if (top && !top.hasOwnProperty(name)) {
-        top[name] = this.current[name];
-      }
-    }
-
-    this.current[name] = value;
-  };
-
-  return Namespace;
-}();
-
-
-// CONCATENATED MODULE: ./src/macros.js
-/**
- * Predefined macros for KaTeX.
- * This can be used to define some commands in terms of others.
- */
-
-
-
-
-
-var builtinMacros = {};
-/* harmony default export */ var macros = (builtinMacros); // This function might one day accept an additional argument and do more things.
-
-function defineMacro(name, body) {
-  builtinMacros[name] = body;
-} //////////////////////////////////////////////////////////////////////
-// macro tools
-// LaTeX's \@firstoftwo{#1}{#2} expands to #1, skipping #2
-// TeX source: \long\def\@firstoftwo#1#2{#1}
-
-defineMacro("\\@firstoftwo", function (context) {
-  var args = context.consumeArgs(2);
-  return {
-    tokens: args[0],
-    numArgs: 0
-  };
-}); // LaTeX's \@secondoftwo{#1}{#2} expands to #2, skipping #1
-// TeX source: \long\def\@secondoftwo#1#2{#2}
-
-defineMacro("\\@secondoftwo", function (context) {
-  var args = context.consumeArgs(2);
-  return {
-    tokens: args[1],
-    numArgs: 0
-  };
-}); // LaTeX's \@ifnextchar{#1}{#2}{#3} looks ahead to the next (unexpanded)
-// symbol.  If it matches #1, then the macro expands to #2; otherwise, #3.
-// Note, however, that it does not consume the next symbol in either case.
-
-defineMacro("\\@ifnextchar", function (context) {
-  var args = context.consumeArgs(3); // symbol, if, else
-
-  var nextToken = context.future();
-
-  if (args[0].length === 1 && args[0][0].text === nextToken.text) {
-    return {
-      tokens: args[1],
-      numArgs: 0
-    };
-  } else {
-    return {
-      tokens: args[2],
-      numArgs: 0
-    };
-  }
-}); // LaTeX's \@ifstar{#1}{#2} looks ahead to the next (unexpanded) symbol.
-// If it is `*`, then it consumes the symbol, and the macro expands to #1;
-// otherwise, the macro expands to #2 (without consuming the symbol).
-// TeX source: \def\@ifstar#1{\@ifnextchar *{\@firstoftwo{#1}}}
-
-defineMacro("\\@ifstar", "\\@ifnextchar *{\\@firstoftwo{#1}}"); // LaTeX's \TextOrMath{#1}{#2} expands to #1 in text mode, #2 in math mode
-
-defineMacro("\\TextOrMath", function (context) {
-  var args = context.consumeArgs(2);
-
-  if (context.mode === 'text') {
-    return {
-      tokens: args[0],
-      numArgs: 0
-    };
-  } else {
-    return {
-      tokens: args[1],
-      numArgs: 0
-    };
-  }
-}); // Lookup table for parsing numbers in base 8 through 16
-
-var digitToNumber = {
-  "0": 0,
-  "1": 1,
-  "2": 2,
-  "3": 3,
-  "4": 4,
-  "5": 5,
-  "6": 6,
-  "7": 7,
-  "8": 8,
-  "9": 9,
-  "a": 10,
-  "A": 10,
-  "b": 11,
-  "B": 11,
-  "c": 12,
-  "C": 12,
-  "d": 13,
-  "D": 13,
-  "e": 14,
-  "E": 14,
-  "f": 15,
-  "F": 15
-}; // TeX \char makes a literal character (catcode 12) using the following forms:
-// (see The TeXBook, p. 43)
-//   \char123  -- decimal
-//   \char'123 -- octal
-//   \char"123 -- hex
-//   \char`x   -- character that can be written (i.e. isn't active)
-//   \char`\x  -- character that cannot be written (e.g. %)
-// These all refer to characters from the font, so we turn them into special
-// calls to a function \@char dealt with in the Parser.
-
-defineMacro("\\char", function (context) {
-  var token = context.popToken();
-  var base;
-  var number = '';
-
-  if (token.text === "'") {
-    base = 8;
-    token = context.popToken();
-  } else if (token.text === '"') {
-    base = 16;
-    token = context.popToken();
-  } else if (token.text === "`") {
-    token = context.popToken();
-
-    if (token.text[0] === "\\") {
-      number = token.text.charCodeAt(1);
-    } else if (token.text === "EOF") {
-      throw new src_ParseError("\\char` missing argument");
-    } else {
-      number = token.text.charCodeAt(0);
-    }
-  } else {
-    base = 10;
-  }
-
-  if (base) {
-    // Parse a number in the given base, starting with first `token`.
-    number = digitToNumber[token.text];
-
-    if (number == null || number >= base) {
-      throw new src_ParseError("Invalid base-" + base + " digit " + token.text);
-    }
-
-    var digit;
-
-    while ((digit = digitToNumber[context.future().text]) != null && digit < base) {
-      number *= base;
-      number += digit;
-      context.popToken();
-    }
-  }
-
-  return "\\@char{" + number + "}";
-}); // Basic support for macro definitions:
-//     \def\macro{expansion}
-//     \def\macro#1{expansion}
-//     \def\macro#1#2{expansion}
-//     \def\macro#1#2#3#4#5#6#7#8#9{expansion}
-// Also the \gdef and \global\def equivalents
-
-var macros_def = function def(context, global) {
-  var arg = context.consumeArgs(1)[0];
-
-  if (arg.length !== 1) {
-    throw new src_ParseError("\\gdef's first argument must be a macro name");
-  }
-
-  var name = arg[0].text; // Count argument specifiers, and check they are in the order #1 #2 ...
-
-  var numArgs = 0;
-  arg = context.consumeArgs(1)[0];
-
-  while (arg.length === 1 && arg[0].text === "#") {
-    arg = context.consumeArgs(1)[0];
-
-    if (arg.length !== 1) {
-      throw new src_ParseError("Invalid argument number length \"" + arg.length + "\"");
-    }
-
-    if (!/^[1-9]$/.test(arg[0].text)) {
-      throw new src_ParseError("Invalid argument number \"" + arg[0].text + "\"");
-    }
-
-    numArgs++;
-
-    if (parseInt(arg[0].text) !== numArgs) {
-      throw new src_ParseError("Argument number \"" + arg[0].text + "\" out of order");
-    }
-
-    arg = context.consumeArgs(1)[0];
-  } // Final arg is the expansion of the macro
-
-
-  context.macros.set(name, {
-    tokens: arg,
-    numArgs: numArgs
-  }, global);
-  return '';
-};
-
-defineMacro("\\gdef", function (context) {
-  return macros_def(context, true);
-});
-defineMacro("\\def", function (context) {
-  return macros_def(context, false);
-});
-defineMacro("\\global", function (context) {
-  var next = context.consumeArgs(1)[0];
-
-  if (next.length !== 1) {
-    throw new src_ParseError("Invalid command after \\global");
-  }
-
-  var command = next[0].text; // TODO: Should expand command
-
-  if (command === "\\def") {
-    // \global\def is equivalent to \gdef
-    return macros_def(context, true);
-  } else {
-    throw new src_ParseError("Invalid command '" + command + "' after \\global");
-  }
-}); // \newcommand{\macro}[args]{definition}
-// \renewcommand{\macro}[args]{definition}
-// TODO: Optional arguments: \newcommand{\macro}[args][default]{definition}
-
-var macros_newcommand = function newcommand(context, existsOK, nonexistsOK) {
-  var arg = context.consumeArgs(1)[0];
-
-  if (arg.length !== 1) {
-    throw new src_ParseError("\\newcommand's first argument must be a macro name");
-  }
-
-  var name = arg[0].text;
-  var exists = context.isDefined(name);
-
-  if (exists && !existsOK) {
-    throw new src_ParseError("\\newcommand{" + name + "} attempting to redefine " + (name + "; use \\renewcommand"));
-  }
-
-  if (!exists && !nonexistsOK) {
-    throw new src_ParseError("\\renewcommand{" + name + "} when command " + name + " " + "does not yet exist; use \\newcommand");
-  }
-
-  var numArgs = 0;
-  arg = context.consumeArgs(1)[0];
-
-  if (arg.length === 1 && arg[0].text === "[") {
-    var argText = '';
-    var token = context.expandNextToken();
-
-    while (token.text !== "]" && token.text !== "EOF") {
-      // TODO: Should properly expand arg, e.g., ignore {}s
-      argText += token.text;
-      token = context.expandNextToken();
-    }
-
-    if (!argText.match(/^\s*[0-9]+\s*$/)) {
-      throw new src_ParseError("Invalid number of arguments: " + argText);
-    }
-
-    numArgs = parseInt(argText);
-    arg = context.consumeArgs(1)[0];
-  } // Final arg is the expansion of the macro
-
-
-  context.macros.set(name, {
-    tokens: arg,
-    numArgs: numArgs
-  });
-  return '';
-};
-
-defineMacro("\\newcommand", function (context) {
-  return macros_newcommand(context, false, true);
-});
-defineMacro("\\renewcommand", function (context) {
-  return macros_newcommand(context, true, false);
-});
-defineMacro("\\providecommand", function (context) {
-  return macros_newcommand(context, true, true);
-}); //////////////////////////////////////////////////////////////////////
-// Grouping
-// \let\bgroup={ \let\egroup=}
-
-defineMacro("\\bgroup", "{");
-defineMacro("\\egroup", "}"); // Symbols from latex.ltx:
-// \def\lq{`}
-// \def\rq{'}
-// \def \aa {\r a}
-// \def \AA {\r A}
-
-defineMacro("\\lq", "`");
-defineMacro("\\rq", "'");
-defineMacro("\\aa", "\\r a");
-defineMacro("\\AA", "\\r A"); // Copyright (C) and registered (R) symbols. Use raw symbol in MathML.
-// \DeclareTextCommandDefault{\textcopyright}{\textcircled{c}}
-// \DeclareTextCommandDefault{\textregistered}{\textcircled{%
-//      \check@mathfonts\fontsize\sf@size\z@\math@fontsfalse\selectfont R}}
-// \DeclareRobustCommand{\copyright}{%
-//    \ifmmode{\nfss@text{\textcopyright}}\else\textcopyright\fi}
-
-defineMacro("\\textcopyright", "\\html@mathml{\\textcircled{c}}{\\char`©}");
-defineMacro("\\copyright", "\\TextOrMath{\\textcopyright}{\\text{\\textcopyright}}");
-defineMacro("\\textregistered", "\\html@mathml{\\textcircled{\\scriptsize R}}{\\char`®}"); // Characters omitted from Unicode range 1D400–1D7FF
-
-defineMacro("\u212C", "\\mathscr{B}"); // script
-
-defineMacro("\u2130", "\\mathscr{E}");
-defineMacro("\u2131", "\\mathscr{F}");
-defineMacro("\u210B", "\\mathscr{H}");
-defineMacro("\u2110", "\\mathscr{I}");
-defineMacro("\u2112", "\\mathscr{L}");
-defineMacro("\u2133", "\\mathscr{M}");
-defineMacro("\u211B", "\\mathscr{R}");
-defineMacro("\u212D", "\\mathfrak{C}"); // Fraktur
-
-defineMacro("\u210C", "\\mathfrak{H}");
-defineMacro("\u2128", "\\mathfrak{Z}"); // Define \Bbbk with a macro that works in both HTML and MathML.
-
-defineMacro("\\Bbbk", "\\Bbb{k}"); // Unicode middle dot
-// The KaTeX fonts do not contain U+00B7. Instead, \cdotp displays
-// the dot at U+22C5 and gives it punct spacing.
-
-defineMacro("\xB7", "\\cdotp"); // \llap and \rlap render their contents in text mode
-
-defineMacro("\\llap", "\\mathllap{\\textrm{#1}}");
-defineMacro("\\rlap", "\\mathrlap{\\textrm{#1}}");
-defineMacro("\\clap", "\\mathclap{\\textrm{#1}}"); // \not is defined by base/fontmath.ltx via
-// \DeclareMathSymbol{\not}{\mathrel}{symbols}{"36}
-// It's thus treated like a \mathrel, but defined by a symbol that has zero
-// width but extends to the right.  We use \rlap to get that spacing.
-// For MathML we write U+0338 here. buildMathML.js will then do the overlay.
-
-defineMacro("\\not", '\\html@mathml{\\mathrel{\\mathrlap\\@not}}{\\char"338}'); // Negated symbols from base/fontmath.ltx:
-// \def\neq{\not=} \let\ne=\neq
-// \DeclareRobustCommand
-//   \notin{\mathrel{\m@th\mathpalette\c@ncel\in}}
-// \def\c@ncel#1#2{\m@th\ooalign{$\hfil#1\mkern1mu/\hfil$\crcr$#1#2$}}
-
-defineMacro("\\neq", "\\html@mathml{\\mathrel{\\not=}}{\\mathrel{\\char`≠}}");
-defineMacro("\\ne", "\\neq");
-defineMacro("\u2260", "\\neq");
-defineMacro("\\notin", "\\html@mathml{\\mathrel{{\\in}\\mathllap{/\\mskip1mu}}}" + "{\\mathrel{\\char`∉}}");
-defineMacro("\u2209", "\\notin"); // Unicode stacked relations
-
-defineMacro("\u2258", "\\html@mathml{" + "\\mathrel{=\\kern{-1em}\\raisebox{0.4em}{$\\scriptsize\\frown$}}" + "}{\\mathrel{\\char`\u2258}}");
-defineMacro("\u2259", "\\html@mathml{\\stackrel{\\tiny\\wedge}{=}}{\\mathrel{\\char`\u2258}}");
-defineMacro("\u225A", "\\html@mathml{\\stackrel{\\tiny\\vee}{=}}{\\mathrel{\\char`\u225A}}");
-defineMacro("\u225B", "\\html@mathml{\\stackrel{\\scriptsize\\star}{=}}" + "{\\mathrel{\\char`\u225B}}");
-defineMacro("\u225D", "\\html@mathml{\\stackrel{\\tiny\\mathrm{def}}{=}}" + "{\\mathrel{\\char`\u225D}}");
-defineMacro("\u225E", "\\html@mathml{\\stackrel{\\tiny\\mathrm{m}}{=}}" + "{\\mathrel{\\char`\u225E}}");
-defineMacro("\u225F", "\\html@mathml{\\stackrel{\\tiny?}{=}}{\\mathrel{\\char`\u225F}}"); // Misc Unicode
-
-defineMacro("\u27C2", "\\perp");
-defineMacro("\u203C", "\\mathclose{!\\mkern-0.8mu!}");
-defineMacro("\u220C", "\\notni");
-defineMacro("\u231C", "\\ulcorner");
-defineMacro("\u231D", "\\urcorner");
-defineMacro("\u231E", "\\llcorner");
-defineMacro("\u231F", "\\lrcorner");
-defineMacro("\xA9", "\\copyright");
-defineMacro("\xAE", "\\textregistered");
-defineMacro("\uFE0F", "\\textregistered"); //////////////////////////////////////////////////////////////////////
-// LaTeX_2ε
-// \vdots{\vbox{\baselineskip4\p@  \lineskiplimit\z@
-// \kern6\p@\hbox{.}\hbox{.}\hbox{.}}}
-// We'll call \varvdots, which gets a glyph from symbols.js.
-// The zero-width rule gets us an equivalent to the vertical 6pt kern.
-
-defineMacro("\\vdots", "\\mathord{\\varvdots\\rule{0pt}{15pt}}");
-defineMacro("\u22EE", "\\vdots"); //////////////////////////////////////////////////////////////////////
-// amsmath.sty
-// http://mirrors.concertpass.com/tex-archive/macros/latex/required/amsmath/amsmath.pdf
-// Italic Greek capital letters.  AMS defines these with \DeclareMathSymbol,
-// but they are equivalent to \mathit{\Letter}.
-
-defineMacro("\\varGamma", "\\mathit{\\Gamma}");
-defineMacro("\\varDelta", "\\mathit{\\Delta}");
-defineMacro("\\varTheta", "\\mathit{\\Theta}");
-defineMacro("\\varLambda", "\\mathit{\\Lambda}");
-defineMacro("\\varXi", "\\mathit{\\Xi}");
-defineMacro("\\varPi", "\\mathit{\\Pi}");
-defineMacro("\\varSigma", "\\mathit{\\Sigma}");
-defineMacro("\\varUpsilon", "\\mathit{\\Upsilon}");
-defineMacro("\\varPhi", "\\mathit{\\Phi}");
-defineMacro("\\varPsi", "\\mathit{\\Psi}");
-defineMacro("\\varOmega", "\\mathit{\\Omega}"); //\newcommand{\substack}[1]{\subarray{c}#1\endsubarray}
-
-defineMacro("\\substack", "\\begin{subarray}{c}#1\\end{subarray}"); // \renewcommand{\colon}{\nobreak\mskip2mu\mathpunct{}\nonscript
-// \mkern-\thinmuskip{:}\mskip6muplus1mu\relax}
-
-defineMacro("\\colon", "\\nobreak\\mskip2mu\\mathpunct{}" + "\\mathchoice{\\mkern-3mu}{\\mkern-3mu}{}{}{:}\\mskip6mu"); // \newcommand{\boxed}[1]{\fbox{\m@th$\displaystyle#1$}}
-
-defineMacro("\\boxed", "\\fbox{$\\displaystyle{#1}$}"); // \def\iff{\DOTSB\;\Longleftrightarrow\;}
-// \def\implies{\DOTSB\;\Longrightarrow\;}
-// \def\impliedby{\DOTSB\;\Longleftarrow\;}
-
-defineMacro("\\iff", "\\DOTSB\\;\\Longleftrightarrow\\;");
-defineMacro("\\implies", "\\DOTSB\\;\\Longrightarrow\\;");
-defineMacro("\\impliedby", "\\DOTSB\\;\\Longleftarrow\\;"); // AMSMath's automatic \dots, based on \mdots@@ macro.
-
-var dotsByToken = {
-  ',': '\\dotsc',
-  '\\not': '\\dotsb',
-  // \keybin@ checks for the following:
-  '+': '\\dotsb',
-  '=': '\\dotsb',
-  '<': '\\dotsb',
-  '>': '\\dotsb',
-  '-': '\\dotsb',
-  '*': '\\dotsb',
-  ':': '\\dotsb',
-  // Symbols whose definition starts with \DOTSB:
-  '\\DOTSB': '\\dotsb',
-  '\\coprod': '\\dotsb',
-  '\\bigvee': '\\dotsb',
-  '\\bigwedge': '\\dotsb',
-  '\\biguplus': '\\dotsb',
-  '\\bigcap': '\\dotsb',
-  '\\bigcup': '\\dotsb',
-  '\\prod': '\\dotsb',
-  '\\sum': '\\dotsb',
-  '\\bigotimes': '\\dotsb',
-  '\\bigoplus': '\\dotsb',
-  '\\bigodot': '\\dotsb',
-  '\\bigsqcup': '\\dotsb',
-  '\\And': '\\dotsb',
-  '\\longrightarrow': '\\dotsb',
-  '\\Longrightarrow': '\\dotsb',
-  '\\longleftarrow': '\\dotsb',
-  '\\Longleftarrow': '\\dotsb',
-  '\\longleftrightarrow': '\\dotsb',
-  '\\Longleftrightarrow': '\\dotsb',
-  '\\mapsto': '\\dotsb',
-  '\\longmapsto': '\\dotsb',
-  '\\hookrightarrow': '\\dotsb',
-  '\\doteq': '\\dotsb',
-  // Symbols whose definition starts with \mathbin:
-  '\\mathbin': '\\dotsb',
-  // Symbols whose definition starts with \mathrel:
-  '\\mathrel': '\\dotsb',
-  '\\relbar': '\\dotsb',
-  '\\Relbar': '\\dotsb',
-  '\\xrightarrow': '\\dotsb',
-  '\\xleftarrow': '\\dotsb',
-  // Symbols whose definition starts with \DOTSI:
-  '\\DOTSI': '\\dotsi',
-  '\\int': '\\dotsi',
-  '\\oint': '\\dotsi',
-  '\\iint': '\\dotsi',
-  '\\iiint': '\\dotsi',
-  '\\iiiint': '\\dotsi',
-  '\\idotsint': '\\dotsi',
-  // Symbols whose definition starts with \DOTSX:
-  '\\DOTSX': '\\dotsx'
-};
-defineMacro("\\dots", function (context) {
-  // TODO: If used in text mode, should expand to \textellipsis.
-  // However, in KaTeX, \textellipsis and \ldots behave the same
-  // (in text mode), and it's unlikely we'd see any of the math commands
-  // that affect the behavior of \dots when in text mode.  So fine for now
-  // (until we support \ifmmode ... \else ... \fi).
-  var thedots = '\\dotso';
-  var next = context.expandAfterFuture().text;
-
-  if (next in dotsByToken) {
-    thedots = dotsByToken[next];
-  } else if (next.substr(0, 4) === '\\not') {
-    thedots = '\\dotsb';
-  } else if (next in src_symbols.math) {
-    if (utils.contains(['bin', 'rel'], src_symbols.math[next].group)) {
-      thedots = '\\dotsb';
-    }
-  }
-
-  return thedots;
-});
-var spaceAfterDots = {
-  // \rightdelim@ checks for the following:
-  ')': true,
-  ']': true,
-  '\\rbrack': true,
-  '\\}': true,
-  '\\rbrace': true,
-  '\\rangle': true,
-  '\\rceil': true,
-  '\\rfloor': true,
-  '\\rgroup': true,
-  '\\rmoustache': true,
-  '\\right': true,
-  '\\bigr': true,
-  '\\biggr': true,
-  '\\Bigr': true,
-  '\\Biggr': true,
-  // \extra@ also tests for the following:
-  '$': true,
-  // \extrap@ checks for the following:
-  ';': true,
-  '.': true,
-  ',': true
-};
-defineMacro("\\dotso", function (context) {
-  var next = context.future().text;
-
-  if (next in spaceAfterDots) {
-    return "\\ldots\\,";
-  } else {
-    return "\\ldots";
-  }
-});
-defineMacro("\\dotsc", function (context) {
-  var next = context.future().text; // \dotsc uses \extra@ but not \extrap@, instead specially checking for
-  // ';' and '.', but doesn't check for ','.
-
-  if (next in spaceAfterDots && next !== ',') {
-    return "\\ldots\\,";
-  } else {
-    return "\\ldots";
-  }
-});
-defineMacro("\\cdots", function (context) {
-  var next = context.future().text;
-
-  if (next in spaceAfterDots) {
-    return "\\@cdots\\,";
-  } else {
-    return "\\@cdots";
-  }
-});
-defineMacro("\\dotsb", "\\cdots");
-defineMacro("\\dotsm", "\\cdots");
-defineMacro("\\dotsi", "\\!\\cdots"); // amsmath doesn't actually define \dotsx, but \dots followed by a macro
-// starting with \DOTSX implies \dotso, and then \extra@ detects this case
-// and forces the added `\,`.
-
-defineMacro("\\dotsx", "\\ldots\\,"); // \let\DOTSI\relax
-// \let\DOTSB\relax
-// \let\DOTSX\relax
-
-defineMacro("\\DOTSI", "\\relax");
-defineMacro("\\DOTSB", "\\relax");
-defineMacro("\\DOTSX", "\\relax"); // Spacing, based on amsmath.sty's override of LaTeX defaults
-// \DeclareRobustCommand{\tmspace}[3]{%
-//   \ifmmode\mskip#1#2\else\kern#1#3\fi\relax}
-
-defineMacro("\\tmspace", "\\TextOrMath{\\kern#1#3}{\\mskip#1#2}\\relax"); // \renewcommand{\,}{\tmspace+\thinmuskip{.1667em}}
-// TODO: math mode should use \thinmuskip
-
-defineMacro("\\,", "\\tmspace+{3mu}{.1667em}"); // \let\thinspace\,
-
-defineMacro("\\thinspace", "\\,"); // \def\>{\mskip\medmuskip}
-// \renewcommand{\:}{\tmspace+\medmuskip{.2222em}}
-// TODO: \> and math mode of \: should use \medmuskip = 4mu plus 2mu minus 4mu
-
-defineMacro("\\>", "\\mskip{4mu}");
-defineMacro("\\:", "\\tmspace+{4mu}{.2222em}"); // \let\medspace\:
-
-defineMacro("\\medspace", "\\:"); // \renewcommand{\;}{\tmspace+\thickmuskip{.2777em}}
-// TODO: math mode should use \thickmuskip = 5mu plus 5mu
-
-defineMacro("\\;", "\\tmspace+{5mu}{.2777em}"); // \let\thickspace\;
-
-defineMacro("\\thickspace", "\\;"); // \renewcommand{\!}{\tmspace-\thinmuskip{.1667em}}
-// TODO: math mode should use \thinmuskip
-
-defineMacro("\\!", "\\tmspace-{3mu}{.1667em}"); // \let\negthinspace\!
-
-defineMacro("\\negthinspace", "\\!"); // \newcommand{\negmedspace}{\tmspace-\medmuskip{.2222em}}
-// TODO: math mode should use \medmuskip
-
-defineMacro("\\negmedspace", "\\tmspace-{4mu}{.2222em}"); // \newcommand{\negthickspace}{\tmspace-\thickmuskip{.2777em}}
-// TODO: math mode should use \thickmuskip
-
-defineMacro("\\negthickspace", "\\tmspace-{5mu}{.277em}"); // \def\enspace{\kern.5em }
-
-defineMacro("\\enspace", "\\kern.5em "); // \def\enskip{\hskip.5em\relax}
-
-defineMacro("\\enskip", "\\hskip.5em\\relax"); // \def\quad{\hskip1em\relax}
-
-defineMacro("\\quad", "\\hskip1em\\relax"); // \def\qquad{\hskip2em\relax}
-
-defineMacro("\\qquad", "\\hskip2em\\relax"); // \tag@in@display form of \tag
-
-defineMacro("\\tag", "\\@ifstar\\tag@literal\\tag@paren");
-defineMacro("\\tag@paren", "\\tag@literal{({#1})}");
-defineMacro("\\tag@literal", function (context) {
-  if (context.macros.get("\\df@tag")) {
-    throw new src_ParseError("Multiple \\tag");
-  }
-
-  return "\\gdef\\df@tag{\\text{#1}}";
-}); // \renewcommand{\bmod}{\nonscript\mskip-\medmuskip\mkern5mu\mathbin
-//   {\operator@font mod}\penalty900
-//   \mkern5mu\nonscript\mskip-\medmuskip}
-// \newcommand{\pod}[1]{\allowbreak
-//   \if@display\mkern18mu\else\mkern8mu\fi(#1)}
-// \renewcommand{\pmod}[1]{\pod{{\operator@font mod}\mkern6mu#1}}
-// \newcommand{\mod}[1]{\allowbreak\if@display\mkern18mu
-//   \else\mkern12mu\fi{\operator@font mod}\,\,#1}
-// TODO: math mode should use \medmuskip = 4mu plus 2mu minus 4mu
-
-defineMacro("\\bmod", "\\mathchoice{\\mskip1mu}{\\mskip1mu}{\\mskip5mu}{\\mskip5mu}" + "\\mathbin{\\rm mod}" + "\\mathchoice{\\mskip1mu}{\\mskip1mu}{\\mskip5mu}{\\mskip5mu}");
-defineMacro("\\pod", "\\allowbreak" + "\\mathchoice{\\mkern18mu}{\\mkern8mu}{\\mkern8mu}{\\mkern8mu}(#1)");
-defineMacro("\\pmod", "\\pod{{\\rm mod}\\mkern6mu#1}");
-defineMacro("\\mod", "\\allowbreak" + "\\mathchoice{\\mkern18mu}{\\mkern12mu}{\\mkern12mu}{\\mkern12mu}" + "{\\rm mod}\\,\\,#1"); // \pmb    --   A simulation of bold.
-// The version in ambsy.sty works by typesetting three copies of the argument
-// with small offsets. We use two copies. We omit the vertical offset because
-// of rendering problems that makeVList encounters in Safari.
-
-defineMacro("\\pmb", "\\html@mathml{" + "\\@binrel{#1}{\\mathrlap{#1}\\kern0.5px#1}}" + "{\\mathbf{#1}}"); //////////////////////////////////////////////////////////////////////
-// LaTeX source2e
-// \\ defaults to \newline, but changes to \cr within array environment
-
-defineMacro("\\\\", "\\newline"); // \def\TeX{T\kern-.1667em\lower.5ex\hbox{E}\kern-.125emX\@}
-// TODO: Doesn't normally work in math mode because \@ fails.  KaTeX doesn't
-// support \@ yet, so that's omitted, and we add \text so that the result
-// doesn't look funny in math mode.
-
-defineMacro("\\TeX", "\\textrm{\\html@mathml{" + "T\\kern-.1667em\\raisebox{-.5ex}{E}\\kern-.125emX" + "}{TeX}}"); // \DeclareRobustCommand{\LaTeX}{L\kern-.36em%
-//         {\sbox\z@ T%
-//          \vbox to\ht\z@{\hbox{\check@mathfonts
-//                               \fontsize\sf@size\z@
-//                               \math@fontsfalse\selectfont
-//                               A}%
-//                         \vss}%
-//         }%
-//         \kern-.15em%
-//         \TeX}
-// This code aligns the top of the A with the T (from the perspective of TeX's
-// boxes, though visually the A appears to extend above slightly).
-// We compute the corresponding \raisebox when A is rendered in \normalsize
-// \scriptstyle, which has a scale factor of 0.7 (see Options.js).
-
-var latexRaiseA = fontMetricsData['Main-Regular']["T".charCodeAt(0)][1] - 0.7 * fontMetricsData['Main-Regular']["A".charCodeAt(0)][1] + "em";
-defineMacro("\\LaTeX", "\\textrm{\\html@mathml{" + ("L\\kern-.36em\\raisebox{" + latexRaiseA + "}{\\scriptstyle A}") + "\\kern-.15em\\TeX}{LaTeX}}"); // New KaTeX logo based on tweaking LaTeX logo
-
-defineMacro("\\KaTeX", "\\textrm{\\html@mathml{" + ("K\\kern-.17em\\raisebox{" + latexRaiseA + "}{\\scriptstyle A}") + "\\kern-.15em\\TeX}{KaTeX}}"); // \DeclareRobustCommand\hspace{\@ifstar\@hspacer\@hspace}
-// \def\@hspace#1{\hskip  #1\relax}
-// \def\@hspacer#1{\vrule \@width\z@\nobreak
-//                 \hskip #1\hskip \z@skip}
-
-defineMacro("\\hspace", "\\@ifstar\\@hspacer\\@hspace");
-defineMacro("\\@hspace", "\\hskip #1\\relax");
-defineMacro("\\@hspacer", "\\rule{0pt}{0pt}\\hskip #1\\relax"); //////////////////////////////////////////////////////////////////////
-// mathtools.sty
-//\providecommand\ordinarycolon{:}
-
-defineMacro("\\ordinarycolon", ":"); //\def\vcentcolon{\mathrel{\mathop\ordinarycolon}}
-//TODO(edemaine): Not yet centered. Fix via \raisebox or #726
-
-defineMacro("\\vcentcolon", "\\mathrel{\\mathop\\ordinarycolon}"); // \providecommand*\dblcolon{\vcentcolon\mathrel{\mkern-.9mu}\vcentcolon}
-
-defineMacro("\\dblcolon", "\\html@mathml{" + "\\mathrel{\\vcentcolon\\mathrel{\\mkern-.9mu}\\vcentcolon}}" + "{\\mathop{\\char\"2237}}"); // \providecommand*\coloneqq{\vcentcolon\mathrel{\mkern-1.2mu}=}
-
-defineMacro("\\coloneqq", "\\html@mathml{" + "\\mathrel{\\vcentcolon\\mathrel{\\mkern-1.2mu}=}}" + "{\\mathop{\\char\"2254}}"); // ≔
-// \providecommand*\Coloneqq{\dblcolon\mathrel{\mkern-1.2mu}=}
-
-defineMacro("\\Coloneqq", "\\html@mathml{" + "\\mathrel{\\dblcolon\\mathrel{\\mkern-1.2mu}=}}" + "{\\mathop{\\char\"2237\\char\"3d}}"); // \providecommand*\coloneq{\vcentcolon\mathrel{\mkern-1.2mu}\mathrel{-}}
-
-defineMacro("\\coloneq", "\\html@mathml{" + "\\mathrel{\\vcentcolon\\mathrel{\\mkern-1.2mu}\\mathrel{-}}}" + "{\\mathop{\\char\"3a\\char\"2212}}"); // \providecommand*\Coloneq{\dblcolon\mathrel{\mkern-1.2mu}\mathrel{-}}
-
-defineMacro("\\Coloneq", "\\html@mathml{" + "\\mathrel{\\dblcolon\\mathrel{\\mkern-1.2mu}\\mathrel{-}}}" + "{\\mathop{\\char\"2237\\char\"2212}}"); // \providecommand*\eqqcolon{=\mathrel{\mkern-1.2mu}\vcentcolon}
-
-defineMacro("\\eqqcolon", "\\html@mathml{" + "\\mathrel{=\\mathrel{\\mkern-1.2mu}\\vcentcolon}}" + "{\\mathop{\\char\"2255}}"); // ≕
-// \providecommand*\Eqqcolon{=\mathrel{\mkern-1.2mu}\dblcolon}
-
-defineMacro("\\Eqqcolon", "\\html@mathml{" + "\\mathrel{=\\mathrel{\\mkern-1.2mu}\\dblcolon}}" + "{\\mathop{\\char\"3d\\char\"2237}}"); // \providecommand*\eqcolon{\mathrel{-}\mathrel{\mkern-1.2mu}\vcentcolon}
-
-defineMacro("\\eqcolon", "\\html@mathml{" + "\\mathrel{\\mathrel{-}\\mathrel{\\mkern-1.2mu}\\vcentcolon}}" + "{\\mathop{\\char\"2239}}"); // \providecommand*\Eqcolon{\mathrel{-}\mathrel{\mkern-1.2mu}\dblcolon}
-
-defineMacro("\\Eqcolon", "\\html@mathml{" + "\\mathrel{\\mathrel{-}\\mathrel{\\mkern-1.2mu}\\dblcolon}}" + "{\\mathop{\\char\"2212\\char\"2237}}"); // \providecommand*\colonapprox{\vcentcolon\mathrel{\mkern-1.2mu}\approx}
-
-defineMacro("\\colonapprox", "\\html@mathml{" + "\\mathrel{\\vcentcolon\\mathrel{\\mkern-1.2mu}\\approx}}" + "{\\mathop{\\char\"3a\\char\"2248}}"); // \providecommand*\Colonapprox{\dblcolon\mathrel{\mkern-1.2mu}\approx}
-
-defineMacro("\\Colonapprox", "\\html@mathml{" + "\\mathrel{\\dblcolon\\mathrel{\\mkern-1.2mu}\\approx}}" + "{\\mathop{\\char\"2237\\char\"2248}}"); // \providecommand*\colonsim{\vcentcolon\mathrel{\mkern-1.2mu}\sim}
-
-defineMacro("\\colonsim", "\\html@mathml{" + "\\mathrel{\\vcentcolon\\mathrel{\\mkern-1.2mu}\\sim}}" + "{\\mathop{\\char\"3a\\char\"223c}}"); // \providecommand*\Colonsim{\dblcolon\mathrel{\mkern-1.2mu}\sim}
-
-defineMacro("\\Colonsim", "\\html@mathml{" + "\\mathrel{\\dblcolon\\mathrel{\\mkern-1.2mu}\\sim}}" + "{\\mathop{\\char\"2237\\char\"223c}}"); // Some Unicode characters are implemented with macros to mathtools functions.
-
-defineMacro("\u2237", "\\dblcolon"); // ::
-
-defineMacro("\u2239", "\\eqcolon"); // -:
-
-defineMacro("\u2254", "\\coloneqq"); // :=
-
-defineMacro("\u2255", "\\eqqcolon"); // =:
-
-defineMacro("\u2A74", "\\Coloneqq"); // ::=
-//////////////////////////////////////////////////////////////////////
-// colonequals.sty
-// Alternate names for mathtools's macros:
-
-defineMacro("\\ratio", "\\vcentcolon");
-defineMacro("\\coloncolon", "\\dblcolon");
-defineMacro("\\colonequals", "\\coloneqq");
-defineMacro("\\coloncolonequals", "\\Coloneqq");
-defineMacro("\\equalscolon", "\\eqqcolon");
-defineMacro("\\equalscoloncolon", "\\Eqqcolon");
-defineMacro("\\colonminus", "\\coloneq");
-defineMacro("\\coloncolonminus", "\\Coloneq");
-defineMacro("\\minuscolon", "\\eqcolon");
-defineMacro("\\minuscoloncolon", "\\Eqcolon"); // \colonapprox name is same in mathtools and colonequals.
-
-defineMacro("\\coloncolonapprox", "\\Colonapprox"); // \colonsim name is same in mathtools and colonequals.
-
-defineMacro("\\coloncolonsim", "\\Colonsim"); // Additional macros, implemented by analogy with mathtools definitions:
-
-defineMacro("\\simcolon", "\\mathrel{\\sim\\mathrel{\\mkern-1.2mu}\\vcentcolon}");
-defineMacro("\\simcoloncolon", "\\mathrel{\\sim\\mathrel{\\mkern-1.2mu}\\dblcolon}");
-defineMacro("\\approxcolon", "\\mathrel{\\approx\\mathrel{\\mkern-1.2mu}\\vcentcolon}");
-defineMacro("\\approxcoloncolon", "\\mathrel{\\approx\\mathrel{\\mkern-1.2mu}\\dblcolon}"); // Present in newtxmath, pxfonts and txfonts
-
-defineMacro("\\notni", "\\html@mathml{\\not\\ni}{\\mathrel{\\char`\u220C}}");
-defineMacro("\\limsup", "\\DOTSB\\operatorname*{lim\\,sup}");
-defineMacro("\\liminf", "\\DOTSB\\operatorname*{lim\\,inf}"); //////////////////////////////////////////////////////////////////////
-// MathML alternates for KaTeX glyphs in the Unicode private area
-
-defineMacro("\\gvertneqq", "\\html@mathml{\\@gvertneqq}{\u2269}");
-defineMacro("\\lvertneqq", "\\html@mathml{\\@lvertneqq}{\u2268}");
-defineMacro("\\ngeqq", "\\html@mathml{\\@ngeqq}{\u2271}");
-defineMacro("\\ngeqslant", "\\html@mathml{\\@ngeqslant}{\u2271}");
-defineMacro("\\nleqq", "\\html@mathml{\\@nleqq}{\u2270}");
-defineMacro("\\nleqslant", "\\html@mathml{\\@nleqslant}{\u2270}");
-defineMacro("\\nshortmid", "\\html@mathml{\\@nshortmid}{∤}");
-defineMacro("\\nshortparallel", "\\html@mathml{\\@nshortparallel}{∦}");
-defineMacro("\\nsubseteqq", "\\html@mathml{\\@nsubseteqq}{\u2288}");
-defineMacro("\\nsupseteqq", "\\html@mathml{\\@nsupseteqq}{\u2289}");
-defineMacro("\\varsubsetneq", "\\html@mathml{\\@varsubsetneq}{⊊}");
-defineMacro("\\varsubsetneqq", "\\html@mathml{\\@varsubsetneqq}{⫋}");
-defineMacro("\\varsupsetneq", "\\html@mathml{\\@varsupsetneq}{⊋}");
-defineMacro("\\varsupsetneqq", "\\html@mathml{\\@varsupsetneqq}{⫌}"); //////////////////////////////////////////////////////////////////////
-// stmaryrd and semantic
-// The stmaryrd and semantic packages render the next four items by calling a
-// glyph. Those glyphs do not exist in the KaTeX fonts. Hence the macros.
-
-defineMacro("\\llbracket", "\\html@mathml{" + "\\mathopen{[\\mkern-3.2mu[}}" + "{\\mathopen{\\char`\u27E6}}");
-defineMacro("\\rrbracket", "\\html@mathml{" + "\\mathclose{]\\mkern-3.2mu]}}" + "{\\mathclose{\\char`\u27E7}}");
-defineMacro("\u27E6", "\\llbracket"); // blackboard bold [
-
-defineMacro("\u27E7", "\\rrbracket"); // blackboard bold ]
-
-defineMacro("\\lBrace", "\\html@mathml{" + "\\mathopen{\\{\\mkern-3.2mu[}}" + "{\\mathopen{\\char`\u2983}}");
-defineMacro("\\rBrace", "\\html@mathml{" + "\\mathclose{]\\mkern-3.2mu\\}}}" + "{\\mathclose{\\char`\u2984}}");
-defineMacro("\u2983", "\\lBrace"); // blackboard bold {
-
-defineMacro("\u2984", "\\rBrace"); // blackboard bold }
-// TODO: Create variable sized versions of the last two items. I believe that
-// will require new font glyphs.
-//////////////////////////////////////////////////////////////////////
-// texvc.sty
-// The texvc package contains macros available in mediawiki pages.
-// We omit the functions deprecated at
-// https://en.wikipedia.org/wiki/Help:Displaying_a_formula#Deprecated_syntax
-// We also omit texvc's \O, which conflicts with \text{\O}
-
-defineMacro("\\darr", "\\downarrow");
-defineMacro("\\dArr", "\\Downarrow");
-defineMacro("\\Darr", "\\Downarrow");
-defineMacro("\\lang", "\\langle");
-defineMacro("\\rang", "\\rangle");
-defineMacro("\\uarr", "\\uparrow");
-defineMacro("\\uArr", "\\Uparrow");
-defineMacro("\\Uarr", "\\Uparrow");
-defineMacro("\\N", "\\mathbb{N}");
-defineMacro("\\R", "\\mathbb{R}");
-defineMacro("\\Z", "\\mathbb{Z}");
-defineMacro("\\alef", "\\aleph");
-defineMacro("\\alefsym", "\\aleph");
-defineMacro("\\Alpha", "\\mathrm{A}");
-defineMacro("\\Beta", "\\mathrm{B}");
-defineMacro("\\bull", "\\bullet");
-defineMacro("\\Chi", "\\mathrm{X}");
-defineMacro("\\clubs", "\\clubsuit");
-defineMacro("\\cnums", "\\mathbb{C}");
-defineMacro("\\Complex", "\\mathbb{C}");
-defineMacro("\\Dagger", "\\ddagger");
-defineMacro("\\diamonds", "\\diamondsuit");
-defineMacro("\\empty", "\\emptyset");
-defineMacro("\\Epsilon", "\\mathrm{E}");
-defineMacro("\\Eta", "\\mathrm{H}");
-defineMacro("\\exist", "\\exists");
-defineMacro("\\harr", "\\leftrightarrow");
-defineMacro("\\hArr", "\\Leftrightarrow");
-defineMacro("\\Harr", "\\Leftrightarrow");
-defineMacro("\\hearts", "\\heartsuit");
-defineMacro("\\image", "\\Im");
-defineMacro("\\infin", "\\infty");
-defineMacro("\\Iota", "\\mathrm{I}");
-defineMacro("\\isin", "\\in");
-defineMacro("\\Kappa", "\\mathrm{K}");
-defineMacro("\\larr", "\\leftarrow");
-defineMacro("\\lArr", "\\Leftarrow");
-defineMacro("\\Larr", "\\Leftarrow");
-defineMacro("\\lrarr", "\\leftrightarrow");
-defineMacro("\\lrArr", "\\Leftrightarrow");
-defineMacro("\\Lrarr", "\\Leftrightarrow");
-defineMacro("\\Mu", "\\mathrm{M}");
-defineMacro("\\natnums", "\\mathbb{N}");
-defineMacro("\\Nu", "\\mathrm{N}");
-defineMacro("\\Omicron", "\\mathrm{O}");
-defineMacro("\\plusmn", "\\pm");
-defineMacro("\\rarr", "\\rightarrow");
-defineMacro("\\rArr", "\\Rightarrow");
-defineMacro("\\Rarr", "\\Rightarrow");
-defineMacro("\\real", "\\Re");
-defineMacro("\\reals", "\\mathbb{R}");
-defineMacro("\\Reals", "\\mathbb{R}");
-defineMacro("\\Rho", "\\mathrm{P}");
-defineMacro("\\sdot", "\\cdot");
-defineMacro("\\sect", "\\S");
-defineMacro("\\spades", "\\spadesuit");
-defineMacro("\\sub", "\\subset");
-defineMacro("\\sube", "\\subseteq");
-defineMacro("\\supe", "\\supseteq");
-defineMacro("\\Tau", "\\mathrm{T}");
-defineMacro("\\thetasym", "\\vartheta"); // TODO: defineMacro("\\varcoppa", "\\\mbox{\\coppa}");
-
-defineMacro("\\weierp", "\\wp");
-defineMacro("\\Zeta", "\\mathrm{Z}"); //////////////////////////////////////////////////////////////////////
-// statmath.sty
-// https://ctan.math.illinois.edu/macros/latex/contrib/statmath/statmath.pdf
-
-defineMacro("\\argmin", "\\DOTSB\\operatorname*{arg\\,min}");
-defineMacro("\\argmax", "\\DOTSB\\operatorname*{arg\\,max}");
-defineMacro("\\plim", "\\DOTSB\\mathop{\\operatorname{plim}}\\limits"); // Custom Khan Academy colors, should be moved to an optional package
-
-defineMacro("\\blue", "\\textcolor{##6495ed}{#1}");
-defineMacro("\\orange", "\\textcolor{##ffa500}{#1}");
-defineMacro("\\pink", "\\textcolor{##ff00af}{#1}");
-defineMacro("\\red", "\\textcolor{##df0030}{#1}");
-defineMacro("\\green", "\\textcolor{##28ae7b}{#1}");
-defineMacro("\\gray", "\\textcolor{gray}{#1}");
-defineMacro("\\purple", "\\textcolor{##9d38bd}{#1}");
-defineMacro("\\blueA", "\\textcolor{##ccfaff}{#1}");
-defineMacro("\\blueB", "\\textcolor{##80f6ff}{#1}");
-defineMacro("\\blueC", "\\textcolor{##63d9ea}{#1}");
-defineMacro("\\blueD", "\\textcolor{##11accd}{#1}");
-defineMacro("\\blueE", "\\textcolor{##0c7f99}{#1}");
-defineMacro("\\tealA", "\\textcolor{##94fff5}{#1}");
-defineMacro("\\tealB", "\\textcolor{##26edd5}{#1}");
-defineMacro("\\tealC", "\\textcolor{##01d1c1}{#1}");
-defineMacro("\\tealD", "\\textcolor{##01a995}{#1}");
-defineMacro("\\tealE", "\\textcolor{##208170}{#1}");
-defineMacro("\\greenA", "\\textcolor{##b6ffb0}{#1}");
-defineMacro("\\greenB", "\\textcolor{##8af281}{#1}");
-defineMacro("\\greenC", "\\textcolor{##74cf70}{#1}");
-defineMacro("\\greenD", "\\textcolor{##1fab54}{#1}");
-defineMacro("\\greenE", "\\textcolor{##0d923f}{#1}");
-defineMacro("\\goldA", "\\textcolor{##ffd0a9}{#1}");
-defineMacro("\\goldB", "\\textcolor{##ffbb71}{#1}");
-defineMacro("\\goldC", "\\textcolor{##ff9c39}{#1}");
-defineMacro("\\goldD", "\\textcolor{##e07d10}{#1}");
-defineMacro("\\goldE", "\\textcolor{##a75a05}{#1}");
-defineMacro("\\redA", "\\textcolor{##fca9a9}{#1}");
-defineMacro("\\redB", "\\textcolor{##ff8482}{#1}");
-defineMacro("\\redC", "\\textcolor{##f9685d}{#1}");
-defineMacro("\\redD", "\\textcolor{##e84d39}{#1}");
-defineMacro("\\redE", "\\textcolor{##bc2612}{#1}");
-defineMacro("\\maroonA", "\\textcolor{##ffbde0}{#1}");
-defineMacro("\\maroonB", "\\textcolor{##ff92c6}{#1}");
-defineMacro("\\maroonC", "\\textcolor{##ed5fa6}{#1}");
-defineMacro("\\maroonD", "\\textcolor{##ca337c}{#1}");
-defineMacro("\\maroonE", "\\textcolor{##9e034e}{#1}");
-defineMacro("\\purpleA", "\\textcolor{##ddd7ff}{#1}");
-defineMacro("\\purpleB", "\\textcolor{##c6b9fc}{#1}");
-defineMacro("\\purpleC", "\\textcolor{##aa87ff}{#1}");
-defineMacro("\\purpleD", "\\textcolor{##7854ab}{#1}");
-defineMacro("\\purpleE", "\\textcolor{##543b78}{#1}");
-defineMacro("\\mintA", "\\textcolor{##f5f9e8}{#1}");
-defineMacro("\\mintB", "\\textcolor{##edf2df}{#1}");
-defineMacro("\\mintC", "\\textcolor{##e0e5cc}{#1}");
-defineMacro("\\grayA", "\\textcolor{##f6f7f7}{#1}");
-defineMacro("\\grayB", "\\textcolor{##f0f1f2}{#1}");
-defineMacro("\\grayC", "\\textcolor{##e3e5e6}{#1}");
-defineMacro("\\grayD", "\\textcolor{##d6d8da}{#1}");
-defineMacro("\\grayE", "\\textcolor{##babec2}{#1}");
-defineMacro("\\grayF", "\\textcolor{##888d93}{#1}");
-defineMacro("\\grayG", "\\textcolor{##626569}{#1}");
-defineMacro("\\grayH", "\\textcolor{##3b3e40}{#1}");
-defineMacro("\\grayI", "\\textcolor{##21242c}{#1}");
-defineMacro("\\kaBlue", "\\textcolor{##314453}{#1}");
-defineMacro("\\kaGreen", "\\textcolor{##71B307}{#1}");
-// CONCATENATED MODULE: ./src/MacroExpander.js
-/**
- * This file contains the “gullet” where macros are expanded
- * until only non-macro tokens remain.
- */
-
-
-
-
-
-
-
-// List of commands that act like macros but aren't defined as a macro,
-// function, or symbol.  Used in `isDefined`.
-var implicitCommands = {
-  "\\relax": true,
-  // MacroExpander.js
-  "^": true,
-  // Parser.js
-  "_": true,
-  // Parser.js
-  "\\limits": true,
-  // Parser.js
-  "\\nolimits": true // Parser.js
-
-};
-
-var MacroExpander_MacroExpander =
-/*#__PURE__*/
-function () {
-  function MacroExpander(input, settings, mode) {
-    this.settings = void 0;
-    this.expansionCount = void 0;
-    this.lexer = void 0;
-    this.macros = void 0;
-    this.stack = void 0;
-    this.mode = void 0;
-    this.settings = settings;
-    this.expansionCount = 0;
-    this.feed(input); // Make new global namespace
-
-    this.macros = new Namespace_Namespace(macros, settings.macros);
-    this.mode = mode;
-    this.stack = []; // contains tokens in REVERSE order
-  }
-  /**
-   * Feed a new input string to the same MacroExpander
-   * (with existing macros etc.).
-   */
-
-
-  var _proto = MacroExpander.prototype;
-
-  _proto.feed = function feed(input) {
-    this.lexer = new Lexer_Lexer(input, this.settings);
-  }
-  /**
-   * Switches between "text" and "math" modes.
-   */
-  ;
-
-  _proto.switchMode = function switchMode(newMode) {
-    this.mode = newMode;
-  }
-  /**
-   * Start a new group nesting within all namespaces.
-   */
-  ;
-
-  _proto.beginGroup = function beginGroup() {
-    this.macros.beginGroup();
-  }
-  /**
-   * End current group nesting within all namespaces.
-   */
-  ;
-
-  _proto.endGroup = function endGroup() {
-    this.macros.endGroup();
-  }
-  /**
-   * Returns the topmost token on the stack, without expanding it.
-   * Similar in behavior to TeX's `\futurelet`.
-   */
-  ;
-
-  _proto.future = function future() {
-    if (this.stack.length === 0) {
-      this.pushToken(this.lexer.lex());
-    }
-
-    return this.stack[this.stack.length - 1];
-  }
-  /**
-   * Remove and return the next unexpanded token.
-   */
-  ;
-
-  _proto.popToken = function popToken() {
-    this.future(); // ensure non-empty stack
-
-    return this.stack.pop();
-  }
-  /**
-   * Add a given token to the token stack.  In particular, this get be used
-   * to put back a token returned from one of the other methods.
-   */
-  ;
-
-  _proto.pushToken = function pushToken(token) {
-    this.stack.push(token);
-  }
-  /**
-   * Append an array of tokens to the token stack.
-   */
-  ;
-
-  _proto.pushTokens = function pushTokens(tokens) {
-    var _this$stack;
-
-    (_this$stack = this.stack).push.apply(_this$stack, tokens);
-  }
-  /**
-   * Consume all following space tokens, without expansion.
-   */
-  ;
-
-  _proto.consumeSpaces = function consumeSpaces() {
-    for (;;) {
-      var token = this.future();
-
-      if (token.text === " ") {
-        this.stack.pop();
-      } else {
-        break;
-      }
-    }
-  }
-  /**
-   * Consume the specified number of arguments from the token stream,
-   * and return the resulting array of arguments.
-   */
-  ;
-
-  _proto.consumeArgs = function consumeArgs(numArgs) {
-    var args = []; // obtain arguments, either single token or balanced {…} group
-
-    for (var i = 0; i < numArgs; ++i) {
-      this.consumeSpaces(); // ignore spaces before each argument
-
-      var startOfArg = this.popToken();
-
-      if (startOfArg.text === "{") {
-        var arg = [];
-        var depth = 1;
-
-        while (depth !== 0) {
-          var tok = this.popToken();
-          arg.push(tok);
-
-          if (tok.text === "{") {
-            ++depth;
-          } else if (tok.text === "}") {
-            --depth;
-          } else if (tok.text === "EOF") {
-            throw new src_ParseError("End of input in macro argument", startOfArg);
-          }
-        }
-
-        arg.pop(); // remove last }
-
-        arg.reverse(); // like above, to fit in with stack order
-
-        args[i] = arg;
-      } else if (startOfArg.text === "EOF") {
-        throw new src_ParseError("End of input expecting macro argument");
-      } else {
-        args[i] = [startOfArg];
-      }
-    }
-
-    return args;
-  }
-  /**
-   * Expand the next token only once if possible.
-   *
-   * If the token is expanded, the resulting tokens will be pushed onto
-   * the stack in reverse order and will be returned as an array,
-   * also in reverse order.
-   *
-   * If not, the next token will be returned without removing it
-   * from the stack.  This case can be detected by a `Token` return value
-   * instead of an `Array` return value.
-   *
-   * In either case, the next token will be on the top of the stack,
-   * or the stack will be empty.
-   *
-   * Used to implement `expandAfterFuture` and `expandNextToken`.
-   *
-   * At the moment, macro expansion doesn't handle delimited macros,
-   * i.e. things like those defined by \def\foo#1\end{…}.
-   * See the TeX book page 202ff. for details on how those should behave.
-   */
-  ;
-
-  _proto.expandOnce = function expandOnce() {
-    var topToken = this.popToken();
-    var name = topToken.text;
-
-    var expansion = this._getExpansion(name);
-
-    if (expansion == null) {
-      // mainly checking for undefined here
-      // Fully expanded
-      this.pushToken(topToken);
-      return topToken;
-    }
-
-    this.expansionCount++;
-
-    if (this.expansionCount > this.settings.maxExpand) {
-      throw new src_ParseError("Too many expansions: infinite loop or " + "need to increase maxExpand setting");
-    }
-
-    var tokens = expansion.tokens;
-
-    if (expansion.numArgs) {
-      var args = this.consumeArgs(expansion.numArgs); // paste arguments in place of the placeholders
-
-      tokens = tokens.slice(); // make a shallow copy
-
-      for (var i = tokens.length - 1; i >= 0; --i) {
-        var tok = tokens[i];
-
-        if (tok.text === "#") {
-          if (i === 0) {
-            throw new src_ParseError("Incomplete placeholder at end of macro body", tok);
-          }
-
-          tok = tokens[--i]; // next token on stack
-
-          if (tok.text === "#") {
-            // ## → #
-            tokens.splice(i + 1, 1); // drop first #
-          } else if (/^[1-9]$/.test(tok.text)) {
-            var _tokens;
-
-            // replace the placeholder with the indicated argument
-            (_tokens = tokens).splice.apply(_tokens, [i, 2].concat(args[+tok.text - 1]));
-          } else {
-            throw new src_ParseError("Not a valid argument number", tok);
-          }
-        }
-      }
-    } // Concatenate expansion onto top of stack.
-
-
-    this.pushTokens(tokens);
-    return tokens;
-  }
-  /**
-   * Expand the next token only once (if possible), and return the resulting
-   * top token on the stack (without removing anything from the stack).
-   * Similar in behavior to TeX's `\expandafter\futurelet`.
-   * Equivalent to expandOnce() followed by future().
-   */
-  ;
-
-  _proto.expandAfterFuture = function expandAfterFuture() {
-    this.expandOnce();
-    return this.future();
-  }
-  /**
-   * Recursively expand first token, then return first non-expandable token.
-   */
-  ;
-
-  _proto.expandNextToken = function expandNextToken() {
-    for (;;) {
-      var expanded = this.expandOnce(); // expandOnce returns Token if and only if it's fully expanded.
-
-      if (expanded instanceof Token_Token) {
-        // \relax stops the expansion, but shouldn't get returned (a
-        // null return value couldn't get implemented as a function).
-        if (expanded.text === "\\relax") {
-          this.stack.pop();
-        } else {
-          return this.stack.pop(); // === expanded
-        }
-      }
-    } // Flow unable to figure out that this pathway is impossible.
-    // https://github.com/facebook/flow/issues/4808
-
-
-    throw new Error(); // eslint-disable-line no-unreachable
-  }
-  /**
-   * Fully expand the given macro name and return the resulting list of
-   * tokens, or return `undefined` if no such macro is defined.
-   */
-  ;
-
-  _proto.expandMacro = function expandMacro(name) {
-    if (!this.macros.get(name)) {
-      return undefined;
-    }
-
-    var output = [];
-    var oldStackLength = this.stack.length;
-    this.pushToken(new Token_Token(name));
-
-    while (this.stack.length > oldStackLength) {
-      var expanded = this.expandOnce(); // expandOnce returns Token if and only if it's fully expanded.
-
-      if (expanded instanceof Token_Token) {
-        output.push(this.stack.pop());
-      }
-    }
-
-    return output;
-  }
-  /**
-   * Fully expand the given macro name and return the result as a string,
-   * or return `undefined` if no such macro is defined.
-   */
-  ;
-
-  _proto.expandMacroAsText = function expandMacroAsText(name) {
-    var tokens = this.expandMacro(name);
-
-    if (tokens) {
-      return tokens.map(function (token) {
-        return token.text;
-      }).join("");
-    } else {
-      return tokens;
-    }
-  }
-  /**
-   * Returns the expanded macro as a reversed array of tokens and a macro
-   * argument count.  Or returns `null` if no such macro.
-   */
-  ;
-
-  _proto._getExpansion = function _getExpansion(name) {
-    var definition = this.macros.get(name);
-
-    if (definition == null) {
-      // mainly checking for undefined here
-      return definition;
-    }
-
-    var expansion = typeof definition === "function" ? definition(this) : definition;
-
-    if (typeof expansion === "string") {
-      var numArgs = 0;
-
-      if (expansion.indexOf("#") !== -1) {
-        var stripped = expansion.replace(/##/g, "");
-
-        while (stripped.indexOf("#" + (numArgs + 1)) !== -1) {
-          ++numArgs;
-        }
-      }
-
-      var bodyLexer = new Lexer_Lexer(expansion, this.settings);
-      var tokens = [];
-      var tok = bodyLexer.lex();
-
-      while (tok.text !== "EOF") {
-        tokens.push(tok);
-        tok = bodyLexer.lex();
-      }
-
-      tokens.reverse(); // to fit in with stack using push and pop
-
-      var expanded = {
-        tokens: tokens,
-        numArgs: numArgs
-      };
-      return expanded;
-    }
-
-    return expansion;
-  }
-  /**
-   * Determine whether a command is currently "defined" (has some
-   * functionality), meaning that it's a macro (in the current group),
-   * a function, a symbol, or one of the special commands listed in
-   * `implicitCommands`.
-   */
-  ;
-
-  _proto.isDefined = function isDefined(name) {
-    return this.macros.has(name) || src_functions.hasOwnProperty(name) || src_symbols.math.hasOwnProperty(name) || src_symbols.text.hasOwnProperty(name) || implicitCommands.hasOwnProperty(name);
-  };
-
-  return MacroExpander;
-}();
-
-
-// CONCATENATED MODULE: ./src/unicodeAccents.js
-// Mapping of Unicode accent characters to their LaTeX equivalent in text and
-// math mode (when they exist).
-/* harmony default export */ var unicodeAccents = ({
-  "\u0301": {
-    text: "\\'",
-    math: '\\acute'
-  },
-  "\u0300": {
-    text: '\\`',
-    math: '\\grave'
-  },
-  "\u0308": {
-    text: '\\"',
-    math: '\\ddot'
-  },
-  "\u0303": {
-    text: '\\~',
-    math: '\\tilde'
-  },
-  "\u0304": {
-    text: '\\=',
-    math: '\\bar'
-  },
-  "\u0306": {
-    text: "\\u",
-    math: '\\breve'
-  },
-  "\u030C": {
-    text: '\\v',
-    math: '\\check'
-  },
-  "\u0302": {
-    text: '\\^',
-    math: '\\hat'
-  },
-  "\u0307": {
-    text: '\\.',
-    math: '\\dot'
-  },
-  "\u030A": {
-    text: '\\r',
-    math: '\\mathring'
-  },
-  "\u030B": {
-    text: '\\H'
-  }
-});
-// CONCATENATED MODULE: ./src/unicodeSymbols.js
-// This file is GENERATED by unicodeMake.js. DO NOT MODIFY.
-/* harmony default export */ var unicodeSymbols = ({
-  "\xE1": "a\u0301",
-  // á = \'{a}
-  "\xE0": "a\u0300",
-  // à = \`{a}
-  "\xE4": "a\u0308",
-  // ä = \"{a}
-  "\u01DF": "a\u0308\u0304",
-  // ǟ = \"\={a}
-  "\xE3": "a\u0303",
-  // ã = \~{a}
-  "\u0101": "a\u0304",
-  // ā = \={a}
-  "\u0103": "a\u0306",
-  // ă = \u{a}
-  "\u1EAF": "a\u0306\u0301",
-  // ắ = \u\'{a}
-  "\u1EB1": "a\u0306\u0300",
-  // ằ = \u\`{a}
-  "\u1EB5": "a\u0306\u0303",
-  // ẵ = \u\~{a}
-  "\u01CE": "a\u030C",
-  // ǎ = \v{a}
-  "\xE2": "a\u0302",
-  // â = \^{a}
-  "\u1EA5": "a\u0302\u0301",
-  // ấ = \^\'{a}
-  "\u1EA7": "a\u0302\u0300",
-  // ầ = \^\`{a}
-  "\u1EAB": "a\u0302\u0303",
-  // ẫ = \^\~{a}
-  "\u0227": "a\u0307",
-  // ȧ = \.{a}
-  "\u01E1": "a\u0307\u0304",
-  // ǡ = \.\={a}
-  "\xE5": "a\u030A",
-  // å = \r{a}
-  "\u01FB": "a\u030A\u0301",
-  // ǻ = \r\'{a}
-  "\u1E03": "b\u0307",
-  // ḃ = \.{b}
-  "\u0107": "c\u0301",
-  // ć = \'{c}
-  "\u010D": "c\u030C",
-  // č = \v{c}
-  "\u0109": "c\u0302",
-  // ĉ = \^{c}
-  "\u010B": "c\u0307",
-  // ċ = \.{c}
-  "\u010F": "d\u030C",
-  // ď = \v{d}
-  "\u1E0B": "d\u0307",
-  // ḋ = \.{d}
-  "\xE9": "e\u0301",
-  // é = \'{e}
-  "\xE8": "e\u0300",
-  // è = \`{e}
-  "\xEB": "e\u0308",
-  // ë = \"{e}
-  "\u1EBD": "e\u0303",
-  // ẽ = \~{e}
-  "\u0113": "e\u0304",
-  // ē = \={e}
-  "\u1E17": "e\u0304\u0301",
-  // ḗ = \=\'{e}
-  "\u1E15": "e\u0304\u0300",
-  // ḕ = \=\`{e}
-  "\u0115": "e\u0306",
-  // ĕ = \u{e}
-  "\u011B": "e\u030C",
-  // ě = \v{e}
-  "\xEA": "e\u0302",
-  // ê = \^{e}
-  "\u1EBF": "e\u0302\u0301",
-  // ế = \^\'{e}
-  "\u1EC1": "e\u0302\u0300",
-  // ề = \^\`{e}
-  "\u1EC5": "e\u0302\u0303",
-  // ễ = \^\~{e}
-  "\u0117": "e\u0307",
-  // ė = \.{e}
-  "\u1E1F": "f\u0307",
-  // ḟ = \.{f}
-  "\u01F5": "g\u0301",
-  // ǵ = \'{g}
-  "\u1E21": "g\u0304",
-  // ḡ = \={g}
-  "\u011F": "g\u0306",
-  // ğ = \u{g}
-  "\u01E7": "g\u030C",
-  // ǧ = \v{g}
-  "\u011D": "g\u0302",
-  // ĝ = \^{g}
-  "\u0121": "g\u0307",
-  // ġ = \.{g}
-  "\u1E27": "h\u0308",
-  // ḧ = \"{h}
-  "\u021F": "h\u030C",
-  // ȟ = \v{h}
-  "\u0125": "h\u0302",
-  // ĥ = \^{h}
-  "\u1E23": "h\u0307",
-  // ḣ = \.{h}
-  "\xED": "i\u0301",
-  // í = \'{i}
-  "\xEC": "i\u0300",
-  // ì = \`{i}
-  "\xEF": "i\u0308",
-  // ï = \"{i}
-  "\u1E2F": "i\u0308\u0301",
-  // ḯ = \"\'{i}
-  "\u0129": "i\u0303",
-  // ĩ = \~{i}
-  "\u012B": "i\u0304",
-  // ī = \={i}
-  "\u012D": "i\u0306",
-  // ĭ = \u{i}
-  "\u01D0": "i\u030C",
-  // ǐ = \v{i}
-  "\xEE": "i\u0302",
-  // î = \^{i}
-  "\u01F0": "j\u030C",
-  // ǰ = \v{j}
-  "\u0135": "j\u0302",
-  // ĵ = \^{j}
-  "\u1E31": "k\u0301",
-  // ḱ = \'{k}
-  "\u01E9": "k\u030C",
-  // ǩ = \v{k}
-  "\u013A": "l\u0301",
-  // ĺ = \'{l}
-  "\u013E": "l\u030C",
-  // ľ = \v{l}
-  "\u1E3F": "m\u0301",
-  // ḿ = \'{m}
-  "\u1E41": "m\u0307",
-  // ṁ = \.{m}
-  "\u0144": "n\u0301",
-  // ń = \'{n}
-  "\u01F9": "n\u0300",
-  // ǹ = \`{n}
-  "\xF1": "n\u0303",
-  // ñ = \~{n}
-  "\u0148": "n\u030C",
-  // ň = \v{n}
-  "\u1E45": "n\u0307",
-  // ṅ = \.{n}
-  "\xF3": "o\u0301",
-  // ó = \'{o}
-  "\xF2": "o\u0300",
-  // ò = \`{o}
-  "\xF6": "o\u0308",
-  // ö = \"{o}
-  "\u022B": "o\u0308\u0304",
-  // ȫ = \"\={o}
-  "\xF5": "o\u0303",
-  // õ = \~{o}
-  "\u1E4D": "o\u0303\u0301",
-  // ṍ = \~\'{o}
-  "\u1E4F": "o\u0303\u0308",
-  // ṏ = \~\"{o}
-  "\u022D": "o\u0303\u0304",
-  // ȭ = \~\={o}
-  "\u014D": "o\u0304",
-  // ō = \={o}
-  "\u1E53": "o\u0304\u0301",
-  // ṓ = \=\'{o}
-  "\u1E51": "o\u0304\u0300",
-  // ṑ = \=\`{o}
-  "\u014F": "o\u0306",
-  // ŏ = \u{o}
-  "\u01D2": "o\u030C",
-  // ǒ = \v{o}
-  "\xF4": "o\u0302",
-  // ô = \^{o}
-  "\u1ED1": "o\u0302\u0301",
-  // ố = \^\'{o}
-  "\u1ED3": "o\u0302\u0300",
-  // ồ = \^\`{o}
-  "\u1ED7": "o\u0302\u0303",
-  // ỗ = \^\~{o}
-  "\u022F": "o\u0307",
-  // ȯ = \.{o}
-  "\u0231": "o\u0307\u0304",
-  // ȱ = \.\={o}
-  "\u0151": "o\u030B",
-  // ő = \H{o}
-  "\u1E55": "p\u0301",
-  // ṕ = \'{p}
-  "\u1E57": "p\u0307",
-  // ṗ = \.{p}
-  "\u0155": "r\u0301",
-  // ŕ = \'{r}
-  "\u0159": "r\u030C",
-  // ř = \v{r}
-  "\u1E59": "r\u0307",
-  // ṙ = \.{r}
-  "\u015B": "s\u0301",
-  // ś = \'{s}
-  "\u1E65": "s\u0301\u0307",
-  // ṥ = \'\.{s}
-  "\u0161": "s\u030C",
-  // š = \v{s}
-  "\u1E67": "s\u030C\u0307",
-  // ṧ = \v\.{s}
-  "\u015D": "s\u0302",
-  // ŝ = \^{s}
-  "\u1E61": "s\u0307",
-  // ṡ = \.{s}
-  "\u1E97": "t\u0308",
-  // ẗ = \"{t}
-  "\u0165": "t\u030C",
-  // ť = \v{t}
-  "\u1E6B": "t\u0307",
-  // ṫ = \.{t}
-  "\xFA": "u\u0301",
-  // ú = \'{u}
-  "\xF9": "u\u0300",
-  // ù = \`{u}
-  "\xFC": "u\u0308",
-  // ü = \"{u}
-  "\u01D8": "u\u0308\u0301",
-  // ǘ = \"\'{u}
-  "\u01DC": "u\u0308\u0300",
-  // ǜ = \"\`{u}
-  "\u01D6": "u\u0308\u0304",
-  // ǖ = \"\={u}
-  "\u01DA": "u\u0308\u030C",
-  // ǚ = \"\v{u}
-  "\u0169": "u\u0303",
-  // ũ = \~{u}
-  "\u1E79": "u\u0303\u0301",
-  // ṹ = \~\'{u}
-  "\u016B": "u\u0304",
-  // ū = \={u}
-  "\u1E7B": "u\u0304\u0308",
-  // ṻ = \=\"{u}
-  "\u016D": "u\u0306",
-  // ŭ = \u{u}
-  "\u01D4": "u\u030C",
-  // ǔ = \v{u}
-  "\xFB": "u\u0302",
-  // û = \^{u}
-  "\u016F": "u\u030A",
-  // ů = \r{u}
-  "\u0171": "u\u030B",
-  // ű = \H{u}
-  "\u1E7D": "v\u0303",
-  // ṽ = \~{v}
-  "\u1E83": "w\u0301",
-  // ẃ = \'{w}
-  "\u1E81": "w\u0300",
-  // ẁ = \`{w}
-  "\u1E85": "w\u0308",
-  // ẅ = \"{w}
-  "\u0175": "w\u0302",
-  // ŵ = \^{w}
-  "\u1E87": "w\u0307",
-  // ẇ = \.{w}
-  "\u1E98": "w\u030A",
-  // ẘ = \r{w}
-  "\u1E8D": "x\u0308",
-  // ẍ = \"{x}
-  "\u1E8B": "x\u0307",
-  // ẋ = \.{x}
-  "\xFD": "y\u0301",
-  // ý = \'{y}
-  "\u1EF3": "y\u0300",
-  // ỳ = \`{y}
-  "\xFF": "y\u0308",
-  // ÿ = \"{y}
-  "\u1EF9": "y\u0303",
-  // ỹ = \~{y}
-  "\u0233": "y\u0304",
-  // ȳ = \={y}
-  "\u0177": "y\u0302",
-  // ŷ = \^{y}
-  "\u1E8F": "y\u0307",
-  // ẏ = \.{y}
-  "\u1E99": "y\u030A",
-  // ẙ = \r{y}
-  "\u017A": "z\u0301",
-  // ź = \'{z}
-  "\u017E": "z\u030C",
-  // ž = \v{z}
-  "\u1E91": "z\u0302",
-  // ẑ = \^{z}
-  "\u017C": "z\u0307",
-  // ż = \.{z}
-  "\xC1": "A\u0301",
-  // Á = \'{A}
-  "\xC0": "A\u0300",
-  // À = \`{A}
-  "\xC4": "A\u0308",
-  // Ä = \"{A}
-  "\u01DE": "A\u0308\u0304",
-  // Ǟ = \"\={A}
-  "\xC3": "A\u0303",
-  // Ã = \~{A}
-  "\u0100": "A\u0304",
-  // Ā = \={A}
-  "\u0102": "A\u0306",
-  // Ă = \u{A}
-  "\u1EAE": "A\u0306\u0301",
-  // Ắ = \u\'{A}
-  "\u1EB0": "A\u0306\u0300",
-  // Ằ = \u\`{A}
-  "\u1EB4": "A\u0306\u0303",
-  // Ẵ = \u\~{A}
-  "\u01CD": "A\u030C",
-  // Ǎ = \v{A}
-  "\xC2": "A\u0302",
-  // Â = \^{A}
-  "\u1EA4": "A\u0302\u0301",
-  // Ấ = \^\'{A}
-  "\u1EA6": "A\u0302\u0300",
-  // Ầ = \^\`{A}
-  "\u1EAA": "A\u0302\u0303",
-  // Ẫ = \^\~{A}
-  "\u0226": "A\u0307",
-  // Ȧ = \.{A}
-  "\u01E0": "A\u0307\u0304",
-  // Ǡ = \.\={A}
-  "\xC5": "A\u030A",
-  // Å = \r{A}
-  "\u01FA": "A\u030A\u0301",
-  // Ǻ = \r\'{A}
-  "\u1E02": "B\u0307",
-  // Ḃ = \.{B}
-  "\u0106": "C\u0301",
-  // Ć = \'{C}
-  "\u010C": "C\u030C",
-  // Č = \v{C}
-  "\u0108": "C\u0302",
-  // Ĉ = \^{C}
-  "\u010A": "C\u0307",
-  // Ċ = \.{C}
-  "\u010E": "D\u030C",
-  // Ď = \v{D}
-  "\u1E0A": "D\u0307",
-  // Ḋ = \.{D}
-  "\xC9": "E\u0301",
-  // É = \'{E}
-  "\xC8": "E\u0300",
-  // È = \`{E}
-  "\xCB": "E\u0308",
-  // Ë = \"{E}
-  "\u1EBC": "E\u0303",
-  // Ẽ = \~{E}
-  "\u0112": "E\u0304",
-  // Ē = \={E}
-  "\u1E16": "E\u0304\u0301",
-  // Ḗ = \=\'{E}
-  "\u1E14": "E\u0304\u0300",
-  // Ḕ = \=\`{E}
-  "\u0114": "E\u0306",
-  // Ĕ = \u{E}
-  "\u011A": "E\u030C",
-  // Ě = \v{E}
-  "\xCA": "E\u0302",
-  // Ê = \^{E}
-  "\u1EBE": "E\u0302\u0301",
-  // Ế = \^\'{E}
-  "\u1EC0": "E\u0302\u0300",
-  // Ề = \^\`{E}
-  "\u1EC4": "E\u0302\u0303",
-  // Ễ = \^\~{E}
-  "\u0116": "E\u0307",
-  // Ė = \.{E}
-  "\u1E1E": "F\u0307",
-  // Ḟ = \.{F}
-  "\u01F4": "G\u0301",
-  // Ǵ = \'{G}
-  "\u1E20": "G\u0304",
-  // Ḡ = \={G}
-  "\u011E": "G\u0306",
-  // Ğ = \u{G}
-  "\u01E6": "G\u030C",
-  // Ǧ = \v{G}
-  "\u011C": "G\u0302",
-  // Ĝ = \^{G}
-  "\u0120": "G\u0307",
-  // Ġ = \.{G}
-  "\u1E26": "H\u0308",
-  // Ḧ = \"{H}
-  "\u021E": "H\u030C",
-  // Ȟ = \v{H}
-  "\u0124": "H\u0302",
-  // Ĥ = \^{H}
-  "\u1E22": "H\u0307",
-  // Ḣ = \.{H}
-  "\xCD": "I\u0301",
-  // Í = \'{I}
-  "\xCC": "I\u0300",
-  // Ì = \`{I}
-  "\xCF": "I\u0308",
-  // Ï = \"{I}
-  "\u1E2E": "I\u0308\u0301",
-  // Ḯ = \"\'{I}
-  "\u0128": "I\u0303",
-  // Ĩ = \~{I}
-  "\u012A": "I\u0304",
-  // Ī = \={I}
-  "\u012C": "I\u0306",
-  // Ĭ = \u{I}
-  "\u01CF": "I\u030C",
-  // Ǐ = \v{I}
-  "\xCE": "I\u0302",
-  // Î = \^{I}
-  "\u0130": "I\u0307",
-  // İ = \.{I}
-  "\u0134": "J\u0302",
-  // Ĵ = \^{J}
-  "\u1E30": "K\u0301",
-  // Ḱ = \'{K}
-  "\u01E8": "K\u030C",
-  // Ǩ = \v{K}
-  "\u0139": "L\u0301",
-  // Ĺ = \'{L}
-  "\u013D": "L\u030C",
-  // Ľ = \v{L}
-  "\u1E3E": "M\u0301",
-  // Ḿ = \'{M}
-  "\u1E40": "M\u0307",
-  // Ṁ = \.{M}
-  "\u0143": "N\u0301",
-  // Ń = \'{N}
-  "\u01F8": "N\u0300",
-  // Ǹ = \`{N}
-  "\xD1": "N\u0303",
-  // Ñ = \~{N}
-  "\u0147": "N\u030C",
-  // Ň = \v{N}
-  "\u1E44": "N\u0307",
-  // Ṅ = \.{N}
-  "\xD3": "O\u0301",
-  // Ó = \'{O}
-  "\xD2": "O\u0300",
-  // Ò = \`{O}
-  "\xD6": "O\u0308",
-  // Ö = \"{O}
-  "\u022A": "O\u0308\u0304",
-  // Ȫ = \"\={O}
-  "\xD5": "O\u0303",
-  // Õ = \~{O}
-  "\u1E4C": "O\u0303\u0301",
-  // Ṍ = \~\'{O}
-  "\u1E4E": "O\u0303\u0308",
-  // Ṏ = \~\"{O}
-  "\u022C": "O\u0303\u0304",
-  // Ȭ = \~\={O}
-  "\u014C": "O\u0304",
-  // Ō = \={O}
-  "\u1E52": "O\u0304\u0301",
-  // Ṓ = \=\'{O}
-  "\u1E50": "O\u0304\u0300",
-  // Ṑ = \=\`{O}
-  "\u014E": "O\u0306",
-  // Ŏ = \u{O}
-  "\u01D1": "O\u030C",
-  // Ǒ = \v{O}
-  "\xD4": "O\u0302",
-  // Ô = \^{O}
-  "\u1ED0": "O\u0302\u0301",
-  // Ố = \^\'{O}
-  "\u1ED2": "O\u0302\u0300",
-  // Ồ = \^\`{O}
-  "\u1ED6": "O\u0302\u0303",
-  // Ỗ = \^\~{O}
-  "\u022E": "O\u0307",
-  // Ȯ = \.{O}
-  "\u0230": "O\u0307\u0304",
-  // Ȱ = \.\={O}
-  "\u0150": "O\u030B",
-  // Ő = \H{O}
-  "\u1E54": "P\u0301",
-  // Ṕ = \'{P}
-  "\u1E56": "P\u0307",
-  // Ṗ = \.{P}
-  "\u0154": "R\u0301",
-  // Ŕ = \'{R}
-  "\u0158": "R\u030C",
-  // Ř = \v{R}
-  "\u1E58": "R\u0307",
-  // Ṙ = \.{R}
-  "\u015A": "S\u0301",
-  // Ś = \'{S}
-  "\u1E64": "S\u0301\u0307",
-  // Ṥ = \'\.{S}
-  "\u0160": "S\u030C",
-  // Š = \v{S}
-  "\u1E66": "S\u030C\u0307",
-  // Ṧ = \v\.{S}
-  "\u015C": "S\u0302",
-  // Ŝ = \^{S}
-  "\u1E60": "S\u0307",
-  // Ṡ = \.{S}
-  "\u0164": "T\u030C",
-  // Ť = \v{T}
-  "\u1E6A": "T\u0307",
-  // Ṫ = \.{T}
-  "\xDA": "U\u0301",
-  // Ú = \'{U}
-  "\xD9": "U\u0300",
-  // Ù = \`{U}
-  "\xDC": "U\u0308",
-  // Ü = \"{U}
-  "\u01D7": "U\u0308\u0301",
-  // Ǘ = \"\'{U}
-  "\u01DB": "U\u0308\u0300",
-  // Ǜ = \"\`{U}
-  "\u01D5": "U\u0308\u0304",
-  // Ǖ = \"\={U}
-  "\u01D9": "U\u0308\u030C",
-  // Ǚ = \"\v{U}
-  "\u0168": "U\u0303",
-  // Ũ = \~{U}
-  "\u1E78": "U\u0303\u0301",
-  // Ṹ = \~\'{U}
-  "\u016A": "U\u0304",
-  // Ū = \={U}
-  "\u1E7A": "U\u0304\u0308",
-  // Ṻ = \=\"{U}
-  "\u016C": "U\u0306",
-  // Ŭ = \u{U}
-  "\u01D3": "U\u030C",
-  // Ǔ = \v{U}
-  "\xDB": "U\u0302",
-  // Û = \^{U}
-  "\u016E": "U\u030A",
-  // Ů = \r{U}
-  "\u0170": "U\u030B",
-  // Ű = \H{U}
-  "\u1E7C": "V\u0303",
-  // Ṽ = \~{V}
-  "\u1E82": "W\u0301",
-  // Ẃ = \'{W}
-  "\u1E80": "W\u0300",
-  // Ẁ = \`{W}
-  "\u1E84": "W\u0308",
-  // Ẅ = \"{W}
-  "\u0174": "W\u0302",
-  // Ŵ = \^{W}
-  "\u1E86": "W\u0307",
-  // Ẇ = \.{W}
-  "\u1E8C": "X\u0308",
-  // Ẍ = \"{X}
-  "\u1E8A": "X\u0307",
-  // Ẋ = \.{X}
-  "\xDD": "Y\u0301",
-  // Ý = \'{Y}
-  "\u1EF2": "Y\u0300",
-  // Ỳ = \`{Y}
-  "\u0178": "Y\u0308",
-  // Ÿ = \"{Y}
-  "\u1EF8": "Y\u0303",
-  // Ỹ = \~{Y}
-  "\u0232": "Y\u0304",
-  // Ȳ = \={Y}
-  "\u0176": "Y\u0302",
-  // Ŷ = \^{Y}
-  "\u1E8E": "Y\u0307",
-  // Ẏ = \.{Y}
-  "\u0179": "Z\u0301",
-  // Ź = \'{Z}
-  "\u017D": "Z\u030C",
-  // Ž = \v{Z}
-  "\u1E90": "Z\u0302",
-  // Ẑ = \^{Z}
-  "\u017B": "Z\u0307",
-  // Ż = \.{Z}
-  "\u03AC": "\u03B1\u0301",
-  // ά = \'{α}
-  "\u1F70": "\u03B1\u0300",
-  // ὰ = \`{α}
-  "\u1FB1": "\u03B1\u0304",
-  // ᾱ = \={α}
-  "\u1FB0": "\u03B1\u0306",
-  // ᾰ = \u{α}
-  "\u03AD": "\u03B5\u0301",
-  // έ = \'{ε}
-  "\u1F72": "\u03B5\u0300",
-  // ὲ = \`{ε}
-  "\u03AE": "\u03B7\u0301",
-  // ή = \'{η}
-  "\u1F74": "\u03B7\u0300",
-  // ὴ = \`{η}
-  "\u03AF": "\u03B9\u0301",
-  // ί = \'{ι}
-  "\u1F76": "\u03B9\u0300",
-  // ὶ = \`{ι}
-  "\u03CA": "\u03B9\u0308",
-  // ϊ = \"{ι}
-  "\u0390": "\u03B9\u0308\u0301",
-  // ΐ = \"\'{ι}
-  "\u1FD2": "\u03B9\u0308\u0300",
-  // ῒ = \"\`{ι}
-  "\u1FD1": "\u03B9\u0304",
-  // ῑ = \={ι}
-  "\u1FD0": "\u03B9\u0306",
-  // ῐ = \u{ι}
-  "\u03CC": "\u03BF\u0301",
-  // ό = \'{ο}
-  "\u1F78": "\u03BF\u0300",
-  // ὸ = \`{ο}
-  "\u03CD": "\u03C5\u0301",
-  // ύ = \'{υ}
-  "\u1F7A": "\u03C5\u0300",
-  // ὺ = \`{υ}
-  "\u03CB": "\u03C5\u0308",
-  // ϋ = \"{υ}
-  "\u03B0": "\u03C5\u0308\u0301",
-  // ΰ = \"\'{υ}
-  "\u1FE2": "\u03C5\u0308\u0300",
-  // ῢ = \"\`{υ}
-  "\u1FE1": "\u03C5\u0304",
-  // ῡ = \={υ}
-  "\u1FE0": "\u03C5\u0306",
-  // ῠ = \u{υ}
-  "\u03CE": "\u03C9\u0301",
-  // ώ = \'{ω}
-  "\u1F7C": "\u03C9\u0300",
-  // ὼ = \`{ω}
-  "\u038E": "\u03A5\u0301",
-  // Ύ = \'{Υ}
-  "\u1FEA": "\u03A5\u0300",
-  // Ὺ = \`{Υ}
-  "\u03AB": "\u03A5\u0308",
-  // Ϋ = \"{Υ}
-  "\u1FE9": "\u03A5\u0304",
-  // Ῡ = \={Υ}
-  "\u1FE8": "\u03A5\u0306",
-  // Ῠ = \u{Υ}
-  "\u038F": "\u03A9\u0301",
-  // Ώ = \'{Ω}
-  "\u1FFA": "\u03A9\u0300" // Ὼ = \`{Ω}
-
-});
-// CONCATENATED MODULE: ./src/Parser.js
-/* eslint no-constant-condition:0 */
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-/**
- * This file contains the parser used to parse out a TeX expression from the
- * input. Since TeX isn't context-free, standard parsers don't work particularly
- * well.
- *
- * The strategy of this parser is as such:
- *
- * The main functions (the `.parse...` ones) take a position in the current
- * parse string to parse tokens from. The lexer (found in Lexer.js, stored at
- * this.gullet.lexer) also supports pulling out tokens at arbitrary places. When
- * individual tokens are needed at a position, the lexer is called to pull out a
- * token, which is then used.
- *
- * The parser has a property called "mode" indicating the mode that
- * the parser is currently in. Currently it has to be one of "math" or
- * "text", which denotes whether the current environment is a math-y
- * one or a text-y one (e.g. inside \text). Currently, this serves to
- * limit the functions which can be used in text mode.
- *
- * The main functions then return an object which contains the useful data that
- * was parsed at its given point, and a new position at the end of the parsed
- * data. The main functions can call each other and continue the parsing by
- * using the returned position as a new starting point.
- *
- * There are also extra `.handle...` functions, which pull out some reused
- * functionality into self-contained functions.
- *
- * The functions return ParseNodes.
- */
-var Parser_Parser =
-/*#__PURE__*/
-function () {
-  function Parser(input, settings) {
-    this.mode = void 0;
-    this.gullet = void 0;
-    this.settings = void 0;
-    this.leftrightDepth = void 0;
-    this.nextToken = void 0;
-    // Start in math mode
-    this.mode = "math"; // Create a new macro expander (gullet) and (indirectly via that) also a
-    // new lexer (mouth) for this parser (stomach, in the language of TeX)
-
-    this.gullet = new MacroExpander_MacroExpander(input, settings, this.mode); // Store the settings for use in parsing
-
-    this.settings = settings; // Count leftright depth (for \middle errors)
-
-    this.leftrightDepth = 0;
-  }
-  /**
-   * Checks a result to make sure it has the right type, and throws an
-   * appropriate error otherwise.
-   */
-
-
-  var _proto = Parser.prototype;
-
-  _proto.expect = function expect(text, consume) {
-    if (consume === void 0) {
-      consume = true;
-    }
-
-    if (this.fetch().text !== text) {
-      throw new src_ParseError("Expected '" + text + "', got '" + this.fetch().text + "'", this.fetch());
-    }
-
-    if (consume) {
-      this.consume();
-    }
-  }
-  /**
-   * Discards the current lookahead token, considering it consumed.
-   */
-  ;
-
-  _proto.consume = function consume() {
-    this.nextToken = null;
-  }
-  /**
-   * Return the current lookahead token, or if there isn't one (at the
-   * beginning, or if the previous lookahead token was consume()d),
-   * fetch the next token as the new lookahead token and return it.
-   */
-  ;
-
-  _proto.fetch = function fetch() {
-    if (this.nextToken == null) {
-      this.nextToken = this.gullet.expandNextToken();
-    }
-
-    return this.nextToken;
-  }
-  /**
-   * Switches between "text" and "math" modes.
-   */
-  ;
-
-  _proto.switchMode = function switchMode(newMode) {
-    this.mode = newMode;
-    this.gullet.switchMode(newMode);
-  }
-  /**
-   * Main parsing function, which parses an entire input.
-   */
-  ;
-
-  _proto.parse = function parse() {
-    // Create a group namespace for the math expression.
-    // (LaTeX creates a new group for every $...$, $$...$$, \[...\].)
-    this.gullet.beginGroup(); // Use old \color behavior (same as LaTeX's \textcolor) if requested.
-    // We do this within the group for the math expression, so it doesn't
-    // pollute settings.macros.
-
-    if (this.settings.colorIsTextColor) {
-      this.gullet.macros.set("\\color", "\\textcolor");
-    } // Try to parse the input
-
-
-    var parse = this.parseExpression(false); // If we succeeded, make sure there's an EOF at the end
-
-    this.expect("EOF"); // End the group namespace for the expression
-
-    this.gullet.endGroup();
-    return parse;
-  };
-
-  _proto.parseExpression = function parseExpression(breakOnInfix, breakOnTokenText) {
-    var body = []; // Keep adding atoms to the body until we can't parse any more atoms (either
-    // we reached the end, a }, or a \right)
-
-    while (true) {
-      // Ignore spaces in math mode
-      if (this.mode === "math") {
-        this.consumeSpaces();
-      }
-
-      var lex = this.fetch();
-
-      if (Parser.endOfExpression.indexOf(lex.text) !== -1) {
-        break;
-      }
-
-      if (breakOnTokenText && lex.text === breakOnTokenText) {
-        break;
-      }
-
-      if (breakOnInfix && src_functions[lex.text] && src_functions[lex.text].infix) {
-        break;
-      }
-
-      var atom = this.parseAtom(breakOnTokenText);
-
-      if (!atom) {
-        break;
-      }
-
-      body.push(atom);
-    }
-
-    if (this.mode === "text") {
-      this.formLigatures(body);
-    }
-
-    return this.handleInfixNodes(body);
-  }
-  /**
-   * Rewrites infix operators such as \over with corresponding commands such
-   * as \frac.
-   *
-   * There can only be one infix operator per group.  If there's more than one
-   * then the expression is ambiguous.  This can be resolved by adding {}.
-   */
-  ;
-
-  _proto.handleInfixNodes = function handleInfixNodes(body) {
-    var overIndex = -1;
-    var funcName;
-
-    for (var i = 0; i < body.length; i++) {
-      var node = checkNodeType(body[i], "infix");
-
-      if (node) {
-        if (overIndex !== -1) {
-          throw new src_ParseError("only one infix operator per group", node.token);
-        }
-
-        overIndex = i;
-        funcName = node.replaceWith;
-      }
-    }
-
-    if (overIndex !== -1 && funcName) {
-      var numerNode;
-      var denomNode;
-      var numerBody = body.slice(0, overIndex);
-      var denomBody = body.slice(overIndex + 1);
-
-      if (numerBody.length === 1 && numerBody[0].type === "ordgroup") {
-        numerNode = numerBody[0];
-      } else {
-        numerNode = {
-          type: "ordgroup",
-          mode: this.mode,
-          body: numerBody
-        };
-      }
-
-      if (denomBody.length === 1 && denomBody[0].type === "ordgroup") {
-        denomNode = denomBody[0];
-      } else {
-        denomNode = {
-          type: "ordgroup",
-          mode: this.mode,
-          body: denomBody
-        };
-      }
-
-      var _node;
-
-      if (funcName === "\\\\abovefrac") {
-        _node = this.callFunction(funcName, [numerNode, body[overIndex], denomNode], []);
-      } else {
-        _node = this.callFunction(funcName, [numerNode, denomNode], []);
-      }
-
-      return [_node];
-    } else {
-      return body;
-    }
-  } // The greediness of a superscript or subscript
-  ;
-
-  /**
-   * Handle a subscript or superscript with nice errors.
-   */
-  _proto.handleSupSubscript = function handleSupSubscript(name) {
-    var symbolToken = this.fetch();
-    var symbol = symbolToken.text;
-    this.consume();
-    var group = this.parseGroup(name, false, Parser.SUPSUB_GREEDINESS, undefined, undefined, true); // ignore spaces before sup/subscript argument
-
-    if (!group) {
-      throw new src_ParseError("Expected group after '" + symbol + "'", symbolToken);
-    }
-
-    return group;
-  }
-  /**
-   * Converts the textual input of an unsupported command into a text node
-   * contained within a color node whose color is determined by errorColor
-   */
-  ;
-
-  _proto.formatUnsupportedCmd = function formatUnsupportedCmd(text) {
-    var textordArray = [];
-
-    for (var i = 0; i < text.length; i++) {
-      textordArray.push({
-        type: "textord",
-        mode: "text",
-        text: text[i]
-      });
-    }
-
-    var textNode = {
-      type: "text",
-      mode: this.mode,
-      body: textordArray
-    };
-    var colorNode = {
-      type: "color",
-      mode: this.mode,
-      color: this.settings.errorColor,
-      body: [textNode]
-    };
-    return colorNode;
-  }
-  /**
-   * Parses a group with optional super/subscripts.
-   */
-  ;
-
-  _proto.parseAtom = function parseAtom(breakOnTokenText) {
-    // The body of an atom is an implicit group, so that things like
-    // \left(x\right)^2 work correctly.
-    var base = this.parseGroup("atom", false, null, breakOnTokenText); // In text mode, we don't have superscripts or subscripts
-
-    if (this.mode === "text") {
-      return base;
-    } // Note that base may be empty (i.e. null) at this point.
-
-
-    var superscript;
-    var subscript;
-
-    while (true) {
-      // Guaranteed in math mode, so eat any spaces first.
-      this.consumeSpaces(); // Lex the first token
-
-      var lex = this.fetch();
-
-      if (lex.text === "\\limits" || lex.text === "\\nolimits") {
-        // We got a limit control
-        var opNode = checkNodeType(base, "op");
-
-        if (opNode) {
-          var limits = lex.text === "\\limits";
-          opNode.limits = limits;
-          opNode.alwaysHandleSupSub = true;
-        } else {
-          opNode = checkNodeType(base, "operatorname");
-
-          if (opNode && opNode.alwaysHandleSupSub) {
-            var _limits = lex.text === "\\limits";
-
-            opNode.limits = _limits;
-          } else {
-            throw new src_ParseError("Limit controls must follow a math operator", lex);
-          }
-        }
-
-        this.consume();
-      } else if (lex.text === "^") {
-        // We got a superscript start
-        if (superscript) {
-          throw new src_ParseError("Double superscript", lex);
-        }
-
-        superscript = this.handleSupSubscript("superscript");
-      } else if (lex.text === "_") {
-        // We got a subscript start
-        if (subscript) {
-          throw new src_ParseError("Double subscript", lex);
-        }
-
-        subscript = this.handleSupSubscript("subscript");
-      } else if (lex.text === "'") {
-        // We got a prime
-        if (superscript) {
-          throw new src_ParseError("Double superscript", lex);
-        }
-
-        var prime = {
-          type: "textord",
-          mode: this.mode,
-          text: "\\prime"
-        }; // Many primes can be grouped together, so we handle this here
-
-        var primes = [prime];
-        this.consume(); // Keep lexing tokens until we get something that's not a prime
-
-        while (this.fetch().text === "'") {
-          // For each one, add another prime to the list
-          primes.push(prime);
-          this.consume();
-        } // If there's a superscript following the primes, combine that
-        // superscript in with the primes.
-
-
-        if (this.fetch().text === "^") {
-          primes.push(this.handleSupSubscript("superscript"));
-        } // Put everything into an ordgroup as the superscript
-
-
-        superscript = {
-          type: "ordgroup",
-          mode: this.mode,
-          body: primes
-        };
-      } else {
-        // If it wasn't ^, _, or ', stop parsing super/subscripts
-        break;
-      }
-    } // Base must be set if superscript or subscript are set per logic above,
-    // but need to check here for type check to pass.
-
-
-    if (superscript || subscript) {
-      // If we got either a superscript or subscript, create a supsub
-      return {
-        type: "supsub",
-        mode: this.mode,
-        base: base,
-        sup: superscript,
-        sub: subscript
-      };
-    } else {
-      // Otherwise return the original body
-      return base;
-    }
-  }
-  /**
-   * Parses an entire function, including its base and all of its arguments.
-   */
-  ;
-
-  _proto.parseFunction = function parseFunction(breakOnTokenText, name, // For error reporting.
-  greediness) {
-    var token = this.fetch();
-    var func = token.text;
-    var funcData = src_functions[func];
-
-    if (!funcData) {
-      return null;
-    }
-
-    this.consume(); // consume command token
-
-    if (greediness != null && funcData.greediness <= greediness) {
-      throw new src_ParseError("Got function '" + func + "' with no arguments" + (name ? " as " + name : ""), token);
-    } else if (this.mode === "text" && !funcData.allowedInText) {
-      throw new src_ParseError("Can't use function '" + func + "' in text mode", token);
-    } else if (this.mode === "math" && funcData.allowedInMath === false) {
-      throw new src_ParseError("Can't use function '" + func + "' in math mode", token);
-    }
-
-    var _this$parseArguments = this.parseArguments(func, funcData),
-        args = _this$parseArguments.args,
-        optArgs = _this$parseArguments.optArgs;
-
-    return this.callFunction(func, args, optArgs, token, breakOnTokenText);
-  }
-  /**
-   * Call a function handler with a suitable context and arguments.
-   */
-  ;
-
-  _proto.callFunction = function callFunction(name, args, optArgs, token, breakOnTokenText) {
-    var context = {
-      funcName: name,
-      parser: this,
-      token: token,
-      breakOnTokenText: breakOnTokenText
-    };
-    var func = src_functions[name];
-
-    if (func && func.handler) {
-      return func.handler(context, args, optArgs);
-    } else {
-      throw new src_ParseError("No function handler for " + name);
-    }
-  }
-  /**
-   * Parses the arguments of a function or environment
-   */
-  ;
-
-  _proto.parseArguments = function parseArguments(func, // Should look like "\name" or "\begin{name}".
-  funcData) {
-    var totalArgs = funcData.numArgs + funcData.numOptionalArgs;
-
-    if (totalArgs === 0) {
-      return {
-        args: [],
-        optArgs: []
-      };
-    }
-
-    var baseGreediness = funcData.greediness;
-    var args = [];
-    var optArgs = [];
-
-    for (var i = 0; i < totalArgs; i++) {
-      var argType = funcData.argTypes && funcData.argTypes[i];
-      var isOptional = i < funcData.numOptionalArgs; // Ignore spaces between arguments.  As the TeXbook says:
-      // "After you have said ‘\def\row#1#2{...}’, you are allowed to
-      //  put spaces between the arguments (e.g., ‘\row x n’), because
-      //  TeX doesn’t use single spaces as undelimited arguments."
-
-      var consumeSpaces = i > 0 && !isOptional || // Also consume leading spaces in math mode, as parseSymbol
-      // won't know what to do with them.  This can only happen with
-      // macros, e.g. \frac\foo\foo where \foo expands to a space symbol.
-      // In LaTeX, the \foo's get treated as (blank) arguments.
-      // In KaTeX, for now, both spaces will get consumed.
-      // TODO(edemaine)
-      i === 0 && !isOptional && this.mode === "math";
-      var arg = this.parseGroupOfType("argument to '" + func + "'", argType, isOptional, baseGreediness, consumeSpaces);
-
-      if (!arg) {
-        if (isOptional) {
-          optArgs.push(null);
-          continue;
-        }
-
-        throw new src_ParseError("Expected group after '" + func + "'", this.fetch());
-      }
-
-      (isOptional ? optArgs : args).push(arg);
-    }
-
-    return {
-      args: args,
-      optArgs: optArgs
-    };
-  }
-  /**
-   * Parses a group when the mode is changing.
-   */
-  ;
-
-  _proto.parseGroupOfType = function parseGroupOfType(name, type, optional, greediness, consumeSpaces) {
-    switch (type) {
-      case "color":
-        if (consumeSpaces) {
-          this.consumeSpaces();
-        }
-
-        return this.parseColorGroup(optional);
-
-      case "size":
-        if (consumeSpaces) {
-          this.consumeSpaces();
-        }
-
-        return this.parseSizeGroup(optional);
-
-      case "url":
-        return this.parseUrlGroup(optional, consumeSpaces);
-
-      case "math":
-      case "text":
-        return this.parseGroup(name, optional, greediness, undefined, type, consumeSpaces);
-
-      case "hbox":
-        {
-          // hbox argument type wraps the argument in the equivalent of
-          // \hbox, which is like \text but switching to \textstyle size.
-          var group = this.parseGroup(name, optional, greediness, undefined, "text", consumeSpaces);
-
-          if (!group) {
-            return group;
-          }
-
-          var styledGroup = {
-            type: "styling",
-            mode: group.mode,
-            body: [group],
-            style: "text" // simulate \textstyle
-
-          };
-          return styledGroup;
-        }
-
-      case "raw":
-        {
-          if (consumeSpaces) {
-            this.consumeSpaces();
-          }
-
-          if (optional && this.fetch().text === "{") {
-            return null;
-          }
-
-          var token = this.parseStringGroup("raw", optional, true);
-
-          if (token) {
-            return {
-              type: "raw",
-              mode: "text",
-              string: token.text
-            };
-          } else {
-            throw new src_ParseError("Expected raw group", this.fetch());
-          }
-        }
-
-      case "original":
-      case null:
-      case undefined:
-        return this.parseGroup(name, optional, greediness, undefined, undefined, consumeSpaces);
-
-      default:
-        throw new src_ParseError("Unknown group type as " + name, this.fetch());
-    }
-  }
-  /**
-   * Discard any space tokens, fetching the next non-space token.
-   */
-  ;
-
-  _proto.consumeSpaces = function consumeSpaces() {
-    while (this.fetch().text === " ") {
-      this.consume();
-    }
-  }
-  /**
-   * Parses a group, essentially returning the string formed by the
-   * brace-enclosed tokens plus some position information.
-   */
-  ;
-
-  _proto.parseStringGroup = function parseStringGroup(modeName, // Used to describe the mode in error messages.
-  optional, raw) {
-    var groupBegin = optional ? "[" : "{";
-    var groupEnd = optional ? "]" : "}";
-    var beginToken = this.fetch();
-
-    if (beginToken.text !== groupBegin) {
-      if (optional) {
-        return null;
-      } else if (raw && beginToken.text !== "EOF" && /[^{}[\]]/.test(beginToken.text)) {
-        this.consume();
-        return beginToken;
-      }
-    }
-
-    var outerMode = this.mode;
-    this.mode = "text";
-    this.expect(groupBegin);
-    var str = "";
-    var firstToken = this.fetch();
-    var nested = 0; // allow nested braces in raw string group
-
-    var lastToken = firstToken;
-    var nextToken;
-
-    while ((nextToken = this.fetch()).text !== groupEnd || raw && nested > 0) {
-      switch (nextToken.text) {
-        case "EOF":
-          throw new src_ParseError("Unexpected end of input in " + modeName, firstToken.range(lastToken, str));
-
-        case groupBegin:
-          nested++;
-          break;
-
-        case groupEnd:
-          nested--;
-          break;
-      }
-
-      lastToken = nextToken;
-      str += lastToken.text;
-      this.consume();
-    }
-
-    this.expect(groupEnd);
-    this.mode = outerMode;
-    return firstToken.range(lastToken, str);
-  }
-  /**
-   * Parses a regex-delimited group: the largest sequence of tokens
-   * whose concatenated strings match `regex`. Returns the string
-   * formed by the tokens plus some position information.
-   */
-  ;
-
-  _proto.parseRegexGroup = function parseRegexGroup(regex, modeName) {
-    var outerMode = this.mode;
-    this.mode = "text";
-    var firstToken = this.fetch();
-    var lastToken = firstToken;
-    var str = "";
-    var nextToken;
-
-    while ((nextToken = this.fetch()).text !== "EOF" && regex.test(str + nextToken.text)) {
-      lastToken = nextToken;
-      str += lastToken.text;
-      this.consume();
-    }
-
-    if (str === "") {
-      throw new src_ParseError("Invalid " + modeName + ": '" + firstToken.text + "'", firstToken);
-    }
-
-    this.mode = outerMode;
-    return firstToken.range(lastToken, str);
-  }
-  /**
-   * Parses a color description.
-   */
-  ;
-
-  _proto.parseColorGroup = function parseColorGroup(optional) {
-    var res = this.parseStringGroup("color", optional);
-
-    if (!res) {
-      return null;
-    }
-
-    var match = /^(#[a-f0-9]{3}|#?[a-f0-9]{6}|[a-z]+)$/i.exec(res.text);
-
-    if (!match) {
-      throw new src_ParseError("Invalid color: '" + res.text + "'", res);
-    }
-
-    var color = match[0];
-
-    if (/^[0-9a-f]{6}$/i.test(color)) {
-      // We allow a 6-digit HTML color spec without a leading "#".
-      // This follows the xcolor package's HTML color model.
-      // Predefined color names are all missed by this RegEx pattern.
-      color = "#" + color;
-    }
-
-    return {
-      type: "color-token",
-      mode: this.mode,
-      color: color
-    };
-  }
-  /**
-   * Parses a size specification, consisting of magnitude and unit.
-   */
-  ;
-
-  _proto.parseSizeGroup = function parseSizeGroup(optional) {
-    var res;
-    var isBlank = false;
-
-    if (!optional && this.fetch().text !== "{") {
-      res = this.parseRegexGroup(/^[-+]? *(?:$|\d+|\d+\.\d*|\.\d*) *[a-z]{0,2} *$/, "size");
-    } else {
-      res = this.parseStringGroup("size", optional);
-    }
-
-    if (!res) {
-      return null;
-    }
-
-    if (!optional && res.text.length === 0) {
-      // Because we've tested for what is !optional, this block won't
-      // affect \kern, \hspace, etc. It will capture the mandatory arguments
-      // to \genfrac and \above.
-      res.text = "0pt"; // Enable \above{}
-
-      isBlank = true; // This is here specifically for \genfrac
-    }
-
-    var match = /([-+]?) *(\d+(?:\.\d*)?|\.\d+) *([a-z]{2})/.exec(res.text);
-
-    if (!match) {
-      throw new src_ParseError("Invalid size: '" + res.text + "'", res);
-    }
-
-    var data = {
-      number: +(match[1] + match[2]),
-      // sign + magnitude, cast to number
-      unit: match[3]
-    };
-
-    if (!validUnit(data)) {
-      throw new src_ParseError("Invalid unit: '" + data.unit + "'", res);
-    }
-
-    return {
-      type: "size",
-      mode: this.mode,
-      value: data,
-      isBlank: isBlank
-    };
-  }
-  /**
-   * Parses an URL, checking escaped letters and allowed protocols,
-   * and setting the catcode of % as an active character (as in \hyperref).
-   */
-  ;
-
-  _proto.parseUrlGroup = function parseUrlGroup(optional, consumeSpaces) {
-    this.gullet.lexer.setCatcode("%", 13); // active character
-
-    var res = this.parseStringGroup("url", optional, true); // get raw string
-
-    this.gullet.lexer.setCatcode("%", 14); // comment character
-
-    if (!res) {
-      return null;
-    } // hyperref package allows backslashes alone in href, but doesn't
-    // generate valid links in such cases; we interpret this as
-    // "undefined" behaviour, and keep them as-is. Some browser will
-    // replace backslashes with forward slashes.
-
-
-    var url = res.text.replace(/\\([#$%&~_^{}])/g, '$1');
-    return {
-      type: "url",
-      mode: this.mode,
-      url: url
-    };
-  }
-  /**
-   * If `optional` is false or absent, this parses an ordinary group,
-   * which is either a single nucleus (like "x") or an expression
-   * in braces (like "{x+y}") or an implicit group, a group that starts
-   * at the current position, and ends right before a higher explicit
-   * group ends, or at EOF.
-   * If `optional` is true, it parses either a bracket-delimited expression
-   * (like "[x+y]") or returns null to indicate the absence of a
-   * bracket-enclosed group.
-   * If `mode` is present, switches to that mode while parsing the group,
-   * and switches back after.
-   */
-  ;
-
-  _proto.parseGroup = function parseGroup(name, // For error reporting.
-  optional, greediness, breakOnTokenText, mode, consumeSpaces) {
-    // Switch to specified mode
-    var outerMode = this.mode;
-
-    if (mode) {
-      this.switchMode(mode);
-    } // Consume spaces if requested, crucially *after* we switch modes,
-    // so that the next non-space token is parsed in the correct mode.
-
-
-    if (consumeSpaces) {
-      this.consumeSpaces();
-    } // Get first token
-
-
-    var firstToken = this.fetch();
-    var text = firstToken.text;
-    var result; // Try to parse an open brace or \begingroup
-
-    if (optional ? text === "[" : text === "{" || text === "\\begingroup") {
-      this.consume();
-      var groupEnd = Parser.endOfGroup[text]; // Start a new group namespace
-
-      this.gullet.beginGroup(); // If we get a brace, parse an expression
-
-      var expression = this.parseExpression(false, groupEnd);
-      var lastToken = this.fetch(); // Check that we got a matching closing brace
-
-      this.expect(groupEnd); // End group namespace
-
-      this.gullet.endGroup();
-      result = {
-        type: "ordgroup",
-        mode: this.mode,
-        loc: SourceLocation.range(firstToken, lastToken),
-        body: expression,
-        // A group formed by \begingroup...\endgroup is a semi-simple group
-        // which doesn't affect spacing in math mode, i.e., is transparent.
-        // https://tex.stackexchange.com/questions/1930/when-should-one-
-        // use-begingroup-instead-of-bgroup
-        semisimple: text === "\\begingroup" || undefined
-      };
-    } else if (optional) {
-      // Return nothing for an optional group
-      result = null;
-    } else {
-      // If there exists a function with this name, parse the function.
-      // Otherwise, just return a nucleus
-      result = this.parseFunction(breakOnTokenText, name, greediness) || this.parseSymbol();
-
-      if (result == null && text[0] === "\\" && !implicitCommands.hasOwnProperty(text)) {
-        if (this.settings.throwOnError) {
-          throw new src_ParseError("Undefined control sequence: " + text, firstToken);
-        }
-
-        result = this.formatUnsupportedCmd(text);
-        this.consume();
-      }
-    } // Switch mode back
-
-
-    if (mode) {
-      this.switchMode(outerMode);
-    }
-
-    return result;
-  }
-  /**
-   * Form ligature-like combinations of characters for text mode.
-   * This includes inputs like "--", "---", "``" and "''".
-   * The result will simply replace multiple textord nodes with a single
-   * character in each value by a single textord node having multiple
-   * characters in its value.  The representation is still ASCII source.
-   * The group will be modified in place.
-   */
-  ;
-
-  _proto.formLigatures = function formLigatures(group) {
-    var n = group.length - 1;
-
-    for (var i = 0; i < n; ++i) {
-      var a = group[i]; // $FlowFixMe: Not every node type has a `text` property.
-
-      var v = a.text;
-
-      if (v === "-" && group[i + 1].text === "-") {
-        if (i + 1 < n && group[i + 2].text === "-") {
-          group.splice(i, 3, {
-            type: "textord",
-            mode: "text",
-            loc: SourceLocation.range(a, group[i + 2]),
-            text: "---"
-          });
-          n -= 2;
-        } else {
-          group.splice(i, 2, {
-            type: "textord",
-            mode: "text",
-            loc: SourceLocation.range(a, group[i + 1]),
-            text: "--"
-          });
-          n -= 1;
-        }
-      }
-
-      if ((v === "'" || v === "`") && group[i + 1].text === v) {
-        group.splice(i, 2, {
-          type: "textord",
-          mode: "text",
-          loc: SourceLocation.range(a, group[i + 1]),
-          text: v + v
-        });
-        n -= 1;
-      }
-    }
-  }
-  /**
-   * Parse a single symbol out of the string. Here, we handle single character
-   * symbols and special functions like \verb.
-   */
-  ;
-
-  _proto.parseSymbol = function parseSymbol() {
-    var nucleus = this.fetch();
-    var text = nucleus.text;
-
-    if (/^\\verb[^a-zA-Z]/.test(text)) {
-      this.consume();
-      var arg = text.slice(5);
-      var star = arg.charAt(0) === "*";
-
-      if (star) {
-        arg = arg.slice(1);
-      } // Lexer's tokenRegex is constructed to always have matching
-      // first/last characters.
-
-
-      if (arg.length < 2 || arg.charAt(0) !== arg.slice(-1)) {
-        throw new src_ParseError("\\verb assertion failed --\n                    please report what input caused this bug");
-      }
-
-      arg = arg.slice(1, -1); // remove first and last char
-
-      return {
-        type: "verb",
-        mode: "text",
-        body: arg,
-        star: star
-      };
-    } // At this point, we should have a symbol, possibly with accents.
-    // First expand any accented base symbol according to unicodeSymbols.
-
-
-    if (unicodeSymbols.hasOwnProperty(text[0]) && !src_symbols[this.mode][text[0]]) {
-      // This behavior is not strict (XeTeX-compatible) in math mode.
-      if (this.settings.strict && this.mode === "math") {
-        this.settings.reportNonstrict("unicodeTextInMathMode", "Accented Unicode text character \"" + text[0] + "\" used in " + "math mode", nucleus);
-      }
-
-      text = unicodeSymbols[text[0]] + text.substr(1);
-    } // Strip off any combining characters
-
-
-    var match = combiningDiacriticalMarksEndRegex.exec(text);
-
-    if (match) {
-      text = text.substring(0, match.index);
-
-      if (text === 'i') {
-        text = "\u0131"; // dotless i, in math and text mode
-      } else if (text === 'j') {
-        text = "\u0237"; // dotless j, in math and text mode
-      }
-    } // Recognize base symbol
-
-
-    var symbol;
-
-    if (src_symbols[this.mode][text]) {
-      if (this.settings.strict && this.mode === 'math' && extraLatin.indexOf(text) >= 0) {
-        this.settings.reportNonstrict("unicodeTextInMathMode", "Latin-1/Unicode text character \"" + text[0] + "\" used in " + "math mode", nucleus);
-      }
-
-      var group = src_symbols[this.mode][text].group;
-      var loc = SourceLocation.range(nucleus);
-      var s;
-
-      if (ATOMS.hasOwnProperty(group)) {
-        // $FlowFixMe
-        var family = group;
-        s = {
-          type: "atom",
-          mode: this.mode,
-          family: family,
-          loc: loc,
-          text: text
-        };
-      } else {
-        // $FlowFixMe
-        s = {
-          type: group,
-          mode: this.mode,
-          loc: loc,
-          text: text
-        };
-      }
-
-      symbol = s;
-    } else if (text.charCodeAt(0) >= 0x80) {
-      // no symbol for e.g. ^
-      if (this.settings.strict) {
-        if (!supportedCodepoint(text.charCodeAt(0))) {
-          this.settings.reportNonstrict("unknownSymbol", "Unrecognized Unicode character \"" + text[0] + "\"" + (" (" + text.charCodeAt(0) + ")"), nucleus);
-        } else if (this.mode === "math") {
-          this.settings.reportNonstrict("unicodeTextInMathMode", "Unicode text character \"" + text[0] + "\" used in math mode", nucleus);
-        }
-      } // All nonmathematical Unicode characters are rendered as if they
-      // are in text mode (wrapped in \text) because that's what it
-      // takes to render them in LaTeX.  Setting `mode: this.mode` is
-      // another natural choice (the user requested math mode), but
-      // this makes it more difficult for getCharacterMetrics() to
-      // distinguish Unicode characters without metrics and those for
-      // which we want to simulate the letter M.
-
-
-      symbol = {
-        type: "textord",
-        mode: "text",
-        loc: SourceLocation.range(nucleus),
-        text: text
-      };
-    } else {
-      return null; // EOF, ^, _, {, }, etc.
-    }
-
-    this.consume(); // Transform combining characters into accents
-
-    if (match) {
-      for (var i = 0; i < match[0].length; i++) {
-        var accent = match[0][i];
-
-        if (!unicodeAccents[accent]) {
-          throw new src_ParseError("Unknown accent ' " + accent + "'", nucleus);
-        }
-
-        var command = unicodeAccents[accent][this.mode];
-
-        if (!command) {
-          throw new src_ParseError("Accent " + accent + " unsupported in " + this.mode + " mode", nucleus);
-        }
-
-        symbol = {
-          type: "accent",
-          mode: this.mode,
-          loc: SourceLocation.range(nucleus),
-          label: command,
-          isStretchy: false,
-          isShifty: true,
-          base: symbol
-        };
-      }
-    }
-
-    return symbol;
-  };
-
-  return Parser;
-}();
-
-Parser_Parser.endOfExpression = ["}", "\\endgroup", "\\end", "\\right", "&"];
-Parser_Parser.endOfGroup = {
-  "[": "]",
-  "{": "}",
-  "\\begingroup": "\\endgroup"
-  /**
-   * Parses an "expression", which is a list of atoms.
-   *
-   * `breakOnInfix`: Should the parsing stop when we hit infix nodes? This
-   *                 happens when functions have higher precendence han infix
-   *                 nodes in implicit parses.
-   *
-   * `breakOnTokenText`: The text of the token that the expression should end
-   *                     with, or `null` if something else should end the
-   *                     expression.
-   */
-
-};
-Parser_Parser.SUPSUB_GREEDINESS = 1;
-
-// CONCATENATED MODULE: ./src/parseTree.js
-/**
- * Provides a single function for parsing an expression using a Parser
- * TODO(emily): Remove this
- */
-
-
-
-/**
- * Parses an expression using a Parser, then returns the parsed result.
- */
-var parseTree_parseTree = function parseTree(toParse, settings) {
-  if (!(typeof toParse === 'string' || toParse instanceof String)) {
-    throw new TypeError('KaTeX can only parse string typed expression');
-  }
-
-  var parser = new Parser_Parser(toParse, settings); // Blank out any \df@tag to avoid spurious "Duplicate \tag" errors
-
-  delete parser.gullet.macros.current["\\df@tag"];
-  var tree = parser.parse(); // If the input used \tag, it will set the \df@tag macro to the tag.
-  // In this case, we separately parse the tag and wrap the tree.
-
-  if (parser.gullet.macros.get("\\df@tag")) {
-    if (!settings.displayMode) {
-      throw new src_ParseError("\\tag works only in display equations");
-    }
-
-    parser.gullet.feed("\\df@tag");
-    tree = [{
-      type: "tag",
-      mode: "text",
-      body: tree,
-      tag: parser.parse()
-    }];
-  }
-
-  return tree;
-};
-
-/* harmony default export */ var src_parseTree = (parseTree_parseTree);
-// CONCATENATED MODULE: ./katex.js
-/* eslint no-console:0 */
-
-/**
- * This is the main entry point for KaTeX. Here, we expose functions for
- * rendering expressions either to DOM nodes or to markup strings.
- *
- * We also expose the ParseError class to check if errors thrown from KaTeX are
- * errors in the expression, or errors in javascript handling.
- */
-
-
-
-
-
-
-
-
-
-
-/**
- * Parse and build an expression, and place that expression in the DOM node
- * given.
- */
-var katex_render = function render(expression, baseNode, options) {
-  baseNode.textContent = "";
-  var node = katex_renderToDomTree(expression, options).toNode();
-  baseNode.appendChild(node);
-}; // KaTeX's styles don't work properly in quirks mode. Print out an error, and
-// disable rendering.
-
-
-if (typeof document !== "undefined") {
-  if (document.compatMode !== "CSS1Compat") {
-    typeof console !== "undefined" && console.warn("Warning: KaTeX doesn't work in quirks mode. Make sure your " + "website has a suitable doctype.");
-
-    katex_render = function render() {
-      throw new src_ParseError("KaTeX doesn't work in quirks mode.");
-    };
-  }
-}
-/**
- * Parse and build an expression, and return the markup for that.
- */
-
-
-var renderToString = function renderToString(expression, options) {
-  var markup = katex_renderToDomTree(expression, options).toMarkup();
-  return markup;
-};
-/**
- * Parse an expression and return the parse tree.
- */
-
-
-var katex_generateParseTree = function generateParseTree(expression, options) {
-  var settings = new Settings_Settings(options);
-  return src_parseTree(expression, settings);
-};
-/**
- * If the given error is a KaTeX ParseError and options.throwOnError is false,
- * renders the invalid LaTeX as a span with hover title giving the KaTeX
- * error message.  Otherwise, simply throws the error.
- */
-
-
-var katex_renderError = function renderError(error, expression, options) {
-  if (options.throwOnError || !(error instanceof src_ParseError)) {
-    throw error;
-  }
-
-  var node = buildCommon.makeSpan(["katex-error"], [new domTree_SymbolNode(expression)]);
-  node.setAttribute("title", error.toString());
-  node.setAttribute("style", "color:" + options.errorColor);
-  return node;
-};
-/**
- * Generates and returns the katex build tree. This is used for advanced
- * use cases (like rendering to custom output).
- */
-
-
-var katex_renderToDomTree = function renderToDomTree(expression, options) {
-  var settings = new Settings_Settings(options);
-
-  try {
-    var tree = src_parseTree(expression, settings);
-    return buildTree_buildTree(tree, expression, settings);
-  } catch (error) {
-    return katex_renderError(error, expression, settings);
-  }
-};
-/**
- * Generates and returns the katex build tree, with just HTML (no MathML).
- * This is used for advanced use cases (like rendering to custom output).
- */
-
-
-var katex_renderToHTMLTree = function renderToHTMLTree(expression, options) {
-  var settings = new Settings_Settings(options);
-
-  try {
-    var tree = src_parseTree(expression, settings);
-    return buildTree_buildHTMLTree(tree, expression, settings);
-  } catch (error) {
-    return katex_renderError(error, expression, settings);
-  }
-};
-
-/* harmony default export */ var katex_0 = ({
-  /**
-   * Current KaTeX version
-   */
-  version: "0.11.1",
-
-  /**
-   * Renders the given LaTeX into an HTML+MathML combination, and adds
-   * it as a child to the specified DOM node.
-   */
-  render: katex_render,
-
-  /**
-   * Renders the given LaTeX into an HTML+MathML combination string,
-   * for sending to the client.
-   */
-  renderToString: renderToString,
-
-  /**
-   * KaTeX error, usually during parsing.
-   */
-  ParseError: src_ParseError,
-
-  /**
-   * Parses the given LaTeX into KaTeX's internal parse tree structure,
-   * without rendering to HTML or MathML.
-   *
-   * NOTE: This method is not currently recommended for public use.
-   * The internal tree representation is unstable and is very likely
-   * to change. Use at your own risk.
-   */
-  __parse: katex_generateParseTree,
-
-  /**
-   * Renders the given LaTeX into an HTML+MathML internal DOM tree
-   * representation, without flattening that representation to a string.
-   *
-   * NOTE: This method is not currently recommended for public use.
-   * The internal tree representation is unstable and is very likely
-   * to change. Use at your own risk.
-   */
-  __renderToDomTree: katex_renderToDomTree,
-
-  /**
-   * Renders the given LaTeX into an HTML internal DOM tree representation,
-   * without MathML and without flattening that representation to a string.
-   *
-   * NOTE: This method is not currently recommended for public use.
-   * The internal tree representation is unstable and is very likely
-   * to change. Use at your own risk.
-   */
-  __renderToHTMLTree: katex_renderToHTMLTree,
-
-  /**
-   * extends internal font metrics object with a new object
-   * each key in the new object represents a font name
-  */
-  __setFontMetrics: setFontMetrics,
-
-  /**
-   * adds a new symbol to builtin symbols table
-   */
-  __defineSymbol: defineSymbol,
-
-  /**
-   * adds a new macro to builtin macro list
-   */
-  __defineMacro: defineMacro,
-
-  /**
-   * Expose the dom tree node types, which can be useful for type checking nodes.
-   *
-   * NOTE: This method is not currently recommended for public use.
-   * The internal tree representation is unstable and is very likely
-   * to change. Use at your own risk.
-   */
-  __domTree: {
-    Span: domTree_Span,
-    Anchor: domTree_Anchor,
-    SymbolNode: domTree_SymbolNode,
-    SvgNode: SvgNode,
-    PathNode: domTree_PathNode,
-    LineNode: LineNode
-  }
-});
-// CONCATENATED MODULE: ./katex.webpack.js
-/**
- * This is the webpack entry point for KaTeX. As ECMAScript, flow[1] and jest[2]
- * doesn't support CSS modules natively, a separate entry point is used and
- * it is not flowtyped.
- *
- * [1] https://gist.github.com/lambdahands/d19e0da96285b749f0ef
- * [2] https://facebook.github.io/jest/docs/en/webpack.html
- */
-
-
-/* harmony default export */ var katex_webpack = __webpack_exports__["default"] = (katex_0);
-
-/***/ })
-/******/ ])["default"];
-});
\ No newline at end of file
diff --git a/registry/vulkan/katex/katex.min.css b/registry/vulkan/katex/katex.min.css
deleted file mode 100644
index c0cd145..0000000
--- a/registry/vulkan/katex/katex.min.css
+++ /dev/null
@@ -1 +0,0 @@
-@font-face{font-family:KaTeX_AMS;src:url(fonts/KaTeX_AMS-Regular.woff2) format("woff2"),url(fonts/KaTeX_AMS-Regular.woff) format("woff"),url(fonts/KaTeX_AMS-Regular.ttf) format("truetype");font-weight:400;font-style:normal}@font-face{font-family:KaTeX_Caligraphic;src:url(fonts/KaTeX_Caligraphic-Bold.woff2) format("woff2"),url(fonts/KaTeX_Caligraphic-Bold.woff) format("woff"),url(fonts/KaTeX_Caligraphic-Bold.ttf) format("truetype");font-weight:700;font-style:normal}@font-face{font-family:KaTeX_Caligraphic;src:url(fonts/KaTeX_Caligraphic-Regular.woff2) format("woff2"),url(fonts/KaTeX_Caligraphic-Regular.woff) format("woff"),url(fonts/KaTeX_Caligraphic-Regular.ttf) format("truetype");font-weight:400;font-style:normal}@font-face{font-family:KaTeX_Fraktur;src:url(fonts/KaTeX_Fraktur-Bold.woff2) format("woff2"),url(fonts/KaTeX_Fraktur-Bold.woff) format("woff"),url(fonts/KaTeX_Fraktur-Bold.ttf) format("truetype");font-weight:700;font-style:normal}@font-face{font-family:KaTeX_Fraktur;src:url(fonts/KaTeX_Fraktur-Regular.woff2) format("woff2"),url(fonts/KaTeX_Fraktur-Regular.woff) format("woff"),url(fonts/KaTeX_Fraktur-Regular.ttf) format("truetype");font-weight:400;font-style:normal}@font-face{font-family:KaTeX_Main;src:url(fonts/KaTeX_Main-Bold.woff2) format("woff2"),url(fonts/KaTeX_Main-Bold.woff) format("woff"),url(fonts/KaTeX_Main-Bold.ttf) format("truetype");font-weight:700;font-style:normal}@font-face{font-family:KaTeX_Main;src:url(fonts/KaTeX_Main-BoldItalic.woff2) format("woff2"),url(fonts/KaTeX_Main-BoldItalic.woff) format("woff"),url(fonts/KaTeX_Main-BoldItalic.ttf) format("truetype");font-weight:700;font-style:italic}@font-face{font-family:KaTeX_Main;src:url(fonts/KaTeX_Main-Italic.woff2) format("woff2"),url(fonts/KaTeX_Main-Italic.woff) format("woff"),url(fonts/KaTeX_Main-Italic.ttf) format("truetype");font-weight:400;font-style:italic}@font-face{font-family:KaTeX_Main;src:url(fonts/KaTeX_Main-Regular.woff2) format("woff2"),url(fonts/KaTeX_Main-Regular.woff) format("woff"),url(fonts/KaTeX_Main-Regular.ttf) format("truetype");font-weight:400;font-style:normal}@font-face{font-family:KaTeX_Math;src:url(fonts/KaTeX_Math-BoldItalic.woff2) format("woff2"),url(fonts/KaTeX_Math-BoldItalic.woff) format("woff"),url(fonts/KaTeX_Math-BoldItalic.ttf) format("truetype");font-weight:700;font-style:italic}@font-face{font-family:KaTeX_Math;src:url(fonts/KaTeX_Math-Italic.woff2) format("woff2"),url(fonts/KaTeX_Math-Italic.woff) format("woff"),url(fonts/KaTeX_Math-Italic.ttf) format("truetype");font-weight:400;font-style:italic}@font-face{font-family:"KaTeX_SansSerif";src:url(fonts/KaTeX_SansSerif-Bold.woff2) format("woff2"),url(fonts/KaTeX_SansSerif-Bold.woff) format("woff"),url(fonts/KaTeX_SansSerif-Bold.ttf) format("truetype");font-weight:700;font-style:normal}@font-face{font-family:"KaTeX_SansSerif";src:url(fonts/KaTeX_SansSerif-Italic.woff2) format("woff2"),url(fonts/KaTeX_SansSerif-Italic.woff) format("woff"),url(fonts/KaTeX_SansSerif-Italic.ttf) format("truetype");font-weight:400;font-style:italic}@font-face{font-family:"KaTeX_SansSerif";src:url(fonts/KaTeX_SansSerif-Regular.woff2) format("woff2"),url(fonts/KaTeX_SansSerif-Regular.woff) format("woff"),url(fonts/KaTeX_SansSerif-Regular.ttf) format("truetype");font-weight:400;font-style:normal}@font-face{font-family:KaTeX_Script;src:url(fonts/KaTeX_Script-Regular.woff2) format("woff2"),url(fonts/KaTeX_Script-Regular.woff) format("woff"),url(fonts/KaTeX_Script-Regular.ttf) format("truetype");font-weight:400;font-style:normal}@font-face{font-family:KaTeX_Size1;src:url(fonts/KaTeX_Size1-Regular.woff2) format("woff2"),url(fonts/KaTeX_Size1-Regular.woff) format("woff"),url(fonts/KaTeX_Size1-Regular.ttf) format("truetype");font-weight:400;font-style:normal}@font-face{font-family:KaTeX_Size2;src:url(fonts/KaTeX_Size2-Regular.woff2) format("woff2"),url(fonts/KaTeX_Size2-Regular.woff) format("woff"),url(fonts/KaTeX_Size2-Regular.ttf) format("truetype");font-weight:400;font-style:normal}@font-face{font-family:KaTeX_Size3;src:url(fonts/KaTeX_Size3-Regular.woff2) format("woff2"),url(fonts/KaTeX_Size3-Regular.woff) format("woff"),url(fonts/KaTeX_Size3-Regular.ttf) format("truetype");font-weight:400;font-style:normal}@font-face{font-family:KaTeX_Size4;src:url(fonts/KaTeX_Size4-Regular.woff2) format("woff2"),url(fonts/KaTeX_Size4-Regular.woff) format("woff"),url(fonts/KaTeX_Size4-Regular.ttf) format("truetype");font-weight:400;font-style:normal}@font-face{font-family:KaTeX_Typewriter;src:url(fonts/KaTeX_Typewriter-Regular.woff2) format("woff2"),url(fonts/KaTeX_Typewriter-Regular.woff) format("woff"),url(fonts/KaTeX_Typewriter-Regular.ttf) format("truetype");font-weight:400;font-style:normal}.katex{font:normal 1.21em KaTeX_Main,Times New Roman,serif;line-height:1.2;text-indent:0;text-rendering:auto}.katex *{-ms-high-contrast-adjust:none!important}.katex .katex-version:after{content:"0.11.1"}.katex .katex-mathml{position:absolute;clip:rect(1px,1px,1px,1px);padding:0;border:0;height:1px;width:1px;overflow:hidden}.katex .katex-html>.newline{display:block}.katex .base{position:relative;white-space:nowrap;width:min-content}.katex .base,.katex .strut{display:inline-block}.katex .textbf{font-weight:700}.katex .textit{font-style:italic}.katex .textrm{font-family:KaTeX_Main}.katex .textsf{font-family:KaTeX_SansSerif}.katex .texttt{font-family:KaTeX_Typewriter}.katex .mathdefault{font-family:KaTeX_Math;font-style:italic}.katex .mathit{font-family:KaTeX_Main;font-style:italic}.katex .mathrm{font-style:normal}.katex .mathbf{font-family:KaTeX_Main;font-weight:700}.katex .boldsymbol{font-family:KaTeX_Math;font-weight:700;font-style:italic}.katex .amsrm,.katex .mathbb,.katex .textbb{font-family:KaTeX_AMS}.katex .mathcal{font-family:KaTeX_Caligraphic}.katex .mathfrak,.katex .textfrak{font-family:KaTeX_Fraktur}.katex .mathtt{font-family:KaTeX_Typewriter}.katex .mathscr,.katex .textscr{font-family:KaTeX_Script}.katex .mathsf,.katex .textsf{font-family:KaTeX_SansSerif}.katex .mathboldsf,.katex .textboldsf{font-family:KaTeX_SansSerif;font-weight:700}.katex .mathitsf,.katex .textitsf{font-family:KaTeX_SansSerif;font-style:italic}.katex .mainrm{font-family:KaTeX_Main;font-style:normal}.katex .vlist-t{display:inline-table;table-layout:fixed}.katex .vlist-r{display:table-row}.katex .vlist{display:table-cell;vertical-align:bottom;position:relative}.katex .vlist>span{display:block;height:0;position:relative}.katex .vlist>span>span{display:inline-block}.katex .vlist>span>.pstrut{overflow:hidden;width:0}.katex .vlist-t2{margin-right:-2px}.katex .vlist-s{display:table-cell;vertical-align:bottom;font-size:1px;width:2px;min-width:2px}.katex .msupsub{text-align:left}.katex .mfrac>span>span{text-align:center}.katex .mfrac .frac-line{display:inline-block;width:100%;border-bottom-style:solid}.katex .hdashline,.katex .hline,.katex .mfrac .frac-line,.katex .overline .overline-line,.katex .rule,.katex .underline .underline-line{min-height:1px}.katex .mspace{display:inline-block}.katex .clap,.katex .llap,.katex .rlap{width:0;position:relative}.katex .clap>.inner,.katex .llap>.inner,.katex .rlap>.inner{position:absolute}.katex .clap>.fix,.katex .llap>.fix,.katex .rlap>.fix{display:inline-block}.katex .llap>.inner{right:0}.katex .clap>.inner,.katex .rlap>.inner{left:0}.katex .clap>.inner>span{margin-left:-50%;margin-right:50%}.katex .rule{display:inline-block;border:0 solid;position:relative}.katex .hline,.katex .overline .overline-line,.katex .underline .underline-line{display:inline-block;width:100%;border-bottom-style:solid}.katex .hdashline{display:inline-block;width:100%;border-bottom-style:dashed}.katex .sqrt>.root{margin-left:.27777778em;margin-right:-.55555556em}.katex .fontsize-ensurer.reset-size1.size1,.katex .sizing.reset-size1.size1{font-size:1em}.katex .fontsize-ensurer.reset-size1.size2,.katex .sizing.reset-size1.size2{font-size:1.2em}.katex .fontsize-ensurer.reset-size1.size3,.katex .sizing.reset-size1.size3{font-size:1.4em}.katex .fontsize-ensurer.reset-size1.size4,.katex .sizing.reset-size1.size4{font-size:1.6em}.katex .fontsize-ensurer.reset-size1.size5,.katex .sizing.reset-size1.size5{font-size:1.8em}.katex .fontsize-ensurer.reset-size1.size6,.katex .sizing.reset-size1.size6{font-size:2em}.katex .fontsize-ensurer.reset-size1.size7,.katex .sizing.reset-size1.size7{font-size:2.4em}.katex .fontsize-ensurer.reset-size1.size8,.katex .sizing.reset-size1.size8{font-size:2.88em}.katex .fontsize-ensurer.reset-size1.size9,.katex .sizing.reset-size1.size9{font-size:3.456em}.katex .fontsize-ensurer.reset-size1.size10,.katex .sizing.reset-size1.size10{font-size:4.148em}.katex .fontsize-ensurer.reset-size1.size11,.katex .sizing.reset-size1.size11{font-size:4.976em}.katex .fontsize-ensurer.reset-size2.size1,.katex .sizing.reset-size2.size1{font-size:.83333333em}.katex .fontsize-ensurer.reset-size2.size2,.katex .sizing.reset-size2.size2{font-size:1em}.katex .fontsize-ensurer.reset-size2.size3,.katex .sizing.reset-size2.size3{font-size:1.16666667em}.katex .fontsize-ensurer.reset-size2.size4,.katex .sizing.reset-size2.size4{font-size:1.33333333em}.katex .fontsize-ensurer.reset-size2.size5,.katex .sizing.reset-size2.size5{font-size:1.5em}.katex .fontsize-ensurer.reset-size2.size6,.katex .sizing.reset-size2.size6{font-size:1.66666667em}.katex .fontsize-ensurer.reset-size2.size7,.katex .sizing.reset-size2.size7{font-size:2em}.katex .fontsize-ensurer.reset-size2.size8,.katex .sizing.reset-size2.size8{font-size:2.4em}.katex .fontsize-ensurer.reset-size2.size9,.katex .sizing.reset-size2.size9{font-size:2.88em}.katex .fontsize-ensurer.reset-size2.size10,.katex .sizing.reset-size2.size10{font-size:3.45666667em}.katex .fontsize-ensurer.reset-size2.size11,.katex .sizing.reset-size2.size11{font-size:4.14666667em}.katex .fontsize-ensurer.reset-size3.size1,.katex .sizing.reset-size3.size1{font-size:.71428571em}.katex .fontsize-ensurer.reset-size3.size2,.katex .sizing.reset-size3.size2{font-size:.85714286em}.katex .fontsize-ensurer.reset-size3.size3,.katex .sizing.reset-size3.size3{font-size:1em}.katex .fontsize-ensurer.reset-size3.size4,.katex .sizing.reset-size3.size4{font-size:1.14285714em}.katex .fontsize-ensurer.reset-size3.size5,.katex .sizing.reset-size3.size5{font-size:1.28571429em}.katex .fontsize-ensurer.reset-size3.size6,.katex .sizing.reset-size3.size6{font-size:1.42857143em}.katex .fontsize-ensurer.reset-size3.size7,.katex .sizing.reset-size3.size7{font-size:1.71428571em}.katex .fontsize-ensurer.reset-size3.size8,.katex .sizing.reset-size3.size8{font-size:2.05714286em}.katex .fontsize-ensurer.reset-size3.size9,.katex .sizing.reset-size3.size9{font-size:2.46857143em}.katex .fontsize-ensurer.reset-size3.size10,.katex .sizing.reset-size3.size10{font-size:2.96285714em}.katex .fontsize-ensurer.reset-size3.size11,.katex .sizing.reset-size3.size11{font-size:3.55428571em}.katex .fontsize-ensurer.reset-size4.size1,.katex .sizing.reset-size4.size1{font-size:.625em}.katex .fontsize-ensurer.reset-size4.size2,.katex .sizing.reset-size4.size2{font-size:.75em}.katex .fontsize-ensurer.reset-size4.size3,.katex .sizing.reset-size4.size3{font-size:.875em}.katex .fontsize-ensurer.reset-size4.size4,.katex .sizing.reset-size4.size4{font-size:1em}.katex .fontsize-ensurer.reset-size4.size5,.katex .sizing.reset-size4.size5{font-size:1.125em}.katex .fontsize-ensurer.reset-size4.size6,.katex .sizing.reset-size4.size6{font-size:1.25em}.katex .fontsize-ensurer.reset-size4.size7,.katex .sizing.reset-size4.size7{font-size:1.5em}.katex .fontsize-ensurer.reset-size4.size8,.katex .sizing.reset-size4.size8{font-size:1.8em}.katex .fontsize-ensurer.reset-size4.size9,.katex .sizing.reset-size4.size9{font-size:2.16em}.katex .fontsize-ensurer.reset-size4.size10,.katex .sizing.reset-size4.size10{font-size:2.5925em}.katex .fontsize-ensurer.reset-size4.size11,.katex .sizing.reset-size4.size11{font-size:3.11em}.katex .fontsize-ensurer.reset-size5.size1,.katex .sizing.reset-size5.size1{font-size:.55555556em}.katex .fontsize-ensurer.reset-size5.size2,.katex .sizing.reset-size5.size2{font-size:.66666667em}.katex .fontsize-ensurer.reset-size5.size3,.katex .sizing.reset-size5.size3{font-size:.77777778em}.katex .fontsize-ensurer.reset-size5.size4,.katex .sizing.reset-size5.size4{font-size:.88888889em}.katex .fontsize-ensurer.reset-size5.size5,.katex .sizing.reset-size5.size5{font-size:1em}.katex .fontsize-ensurer.reset-size5.size6,.katex .sizing.reset-size5.size6{font-size:1.11111111em}.katex .fontsize-ensurer.reset-size5.size7,.katex .sizing.reset-size5.size7{font-size:1.33333333em}.katex .fontsize-ensurer.reset-size5.size8,.katex .sizing.reset-size5.size8{font-size:1.6em}.katex .fontsize-ensurer.reset-size5.size9,.katex .sizing.reset-size5.size9{font-size:1.92em}.katex .fontsize-ensurer.reset-size5.size10,.katex .sizing.reset-size5.size10{font-size:2.30444444em}.katex .fontsize-ensurer.reset-size5.size11,.katex .sizing.reset-size5.size11{font-size:2.76444444em}.katex .fontsize-ensurer.reset-size6.size1,.katex .sizing.reset-size6.size1{font-size:.5em}.katex .fontsize-ensurer.reset-size6.size2,.katex .sizing.reset-size6.size2{font-size:.6em}.katex .fontsize-ensurer.reset-size6.size3,.katex .sizing.reset-size6.size3{font-size:.7em}.katex .fontsize-ensurer.reset-size6.size4,.katex .sizing.reset-size6.size4{font-size:.8em}.katex .fontsize-ensurer.reset-size6.size5,.katex .sizing.reset-size6.size5{font-size:.9em}.katex .fontsize-ensurer.reset-size6.size6,.katex .sizing.reset-size6.size6{font-size:1em}.katex .fontsize-ensurer.reset-size6.size7,.katex .sizing.reset-size6.size7{font-size:1.2em}.katex .fontsize-ensurer.reset-size6.size8,.katex .sizing.reset-size6.size8{font-size:1.44em}.katex .fontsize-ensurer.reset-size6.size9,.katex .sizing.reset-size6.size9{font-size:1.728em}.katex .fontsize-ensurer.reset-size6.size10,.katex .sizing.reset-size6.size10{font-size:2.074em}.katex .fontsize-ensurer.reset-size6.size11,.katex .sizing.reset-size6.size11{font-size:2.488em}.katex .fontsize-ensurer.reset-size7.size1,.katex .sizing.reset-size7.size1{font-size:.41666667em}.katex .fontsize-ensurer.reset-size7.size2,.katex .sizing.reset-size7.size2{font-size:.5em}.katex .fontsize-ensurer.reset-size7.size3,.katex .sizing.reset-size7.size3{font-size:.58333333em}.katex .fontsize-ensurer.reset-size7.size4,.katex .sizing.reset-size7.size4{font-size:.66666667em}.katex .fontsize-ensurer.reset-size7.size5,.katex .sizing.reset-size7.size5{font-size:.75em}.katex .fontsize-ensurer.reset-size7.size6,.katex .sizing.reset-size7.size6{font-size:.83333333em}.katex .fontsize-ensurer.reset-size7.size7,.katex .sizing.reset-size7.size7{font-size:1em}.katex .fontsize-ensurer.reset-size7.size8,.katex .sizing.reset-size7.size8{font-size:1.2em}.katex .fontsize-ensurer.reset-size7.size9,.katex .sizing.reset-size7.size9{font-size:1.44em}.katex .fontsize-ensurer.reset-size7.size10,.katex .sizing.reset-size7.size10{font-size:1.72833333em}.katex .fontsize-ensurer.reset-size7.size11,.katex .sizing.reset-size7.size11{font-size:2.07333333em}.katex .fontsize-ensurer.reset-size8.size1,.katex .sizing.reset-size8.size1{font-size:.34722222em}.katex .fontsize-ensurer.reset-size8.size2,.katex .sizing.reset-size8.size2{font-size:.41666667em}.katex .fontsize-ensurer.reset-size8.size3,.katex .sizing.reset-size8.size3{font-size:.48611111em}.katex .fontsize-ensurer.reset-size8.size4,.katex .sizing.reset-size8.size4{font-size:.55555556em}.katex .fontsize-ensurer.reset-size8.size5,.katex .sizing.reset-size8.size5{font-size:.625em}.katex .fontsize-ensurer.reset-size8.size6,.katex .sizing.reset-size8.size6{font-size:.69444444em}.katex .fontsize-ensurer.reset-size8.size7,.katex .sizing.reset-size8.size7{font-size:.83333333em}.katex .fontsize-ensurer.reset-size8.size8,.katex .sizing.reset-size8.size8{font-size:1em}.katex .fontsize-ensurer.reset-size8.size9,.katex .sizing.reset-size8.size9{font-size:1.2em}.katex .fontsize-ensurer.reset-size8.size10,.katex .sizing.reset-size8.size10{font-size:1.44027778em}.katex .fontsize-ensurer.reset-size8.size11,.katex .sizing.reset-size8.size11{font-size:1.72777778em}.katex .fontsize-ensurer.reset-size9.size1,.katex .sizing.reset-size9.size1{font-size:.28935185em}.katex .fontsize-ensurer.reset-size9.size2,.katex .sizing.reset-size9.size2{font-size:.34722222em}.katex .fontsize-ensurer.reset-size9.size3,.katex .sizing.reset-size9.size3{font-size:.40509259em}.katex .fontsize-ensurer.reset-size9.size4,.katex .sizing.reset-size9.size4{font-size:.46296296em}.katex .fontsize-ensurer.reset-size9.size5,.katex .sizing.reset-size9.size5{font-size:.52083333em}.katex .fontsize-ensurer.reset-size9.size6,.katex .sizing.reset-size9.size6{font-size:.5787037em}.katex .fontsize-ensurer.reset-size9.size7,.katex .sizing.reset-size9.size7{font-size:.69444444em}.katex .fontsize-ensurer.reset-size9.size8,.katex .sizing.reset-size9.size8{font-size:.83333333em}.katex .fontsize-ensurer.reset-size9.size9,.katex .sizing.reset-size9.size9{font-size:1em}.katex .fontsize-ensurer.reset-size9.size10,.katex .sizing.reset-size9.size10{font-size:1.20023148em}.katex .fontsize-ensurer.reset-size9.size11,.katex .sizing.reset-size9.size11{font-size:1.43981481em}.katex .fontsize-ensurer.reset-size10.size1,.katex .sizing.reset-size10.size1{font-size:.24108004em}.katex .fontsize-ensurer.reset-size10.size2,.katex .sizing.reset-size10.size2{font-size:.28929605em}.katex .fontsize-ensurer.reset-size10.size3,.katex .sizing.reset-size10.size3{font-size:.33751205em}.katex .fontsize-ensurer.reset-size10.size4,.katex .sizing.reset-size10.size4{font-size:.38572806em}.katex .fontsize-ensurer.reset-size10.size5,.katex .sizing.reset-size10.size5{font-size:.43394407em}.katex .fontsize-ensurer.reset-size10.size6,.katex .sizing.reset-size10.size6{font-size:.48216008em}.katex .fontsize-ensurer.reset-size10.size7,.katex .sizing.reset-size10.size7{font-size:.57859209em}.katex .fontsize-ensurer.reset-size10.size8,.katex .sizing.reset-size10.size8{font-size:.69431051em}.katex .fontsize-ensurer.reset-size10.size9,.katex .sizing.reset-size10.size9{font-size:.83317261em}.katex .fontsize-ensurer.reset-size10.size10,.katex .sizing.reset-size10.size10{font-size:1em}.katex .fontsize-ensurer.reset-size10.size11,.katex .sizing.reset-size10.size11{font-size:1.19961427em}.katex .fontsize-ensurer.reset-size11.size1,.katex .sizing.reset-size11.size1{font-size:.20096463em}.katex .fontsize-ensurer.reset-size11.size2,.katex .sizing.reset-size11.size2{font-size:.24115756em}.katex .fontsize-ensurer.reset-size11.size3,.katex .sizing.reset-size11.size3{font-size:.28135048em}.katex .fontsize-ensurer.reset-size11.size4,.katex .sizing.reset-size11.size4{font-size:.32154341em}.katex .fontsize-ensurer.reset-size11.size5,.katex .sizing.reset-size11.size5{font-size:.36173633em}.katex .fontsize-ensurer.reset-size11.size6,.katex .sizing.reset-size11.size6{font-size:.40192926em}.katex .fontsize-ensurer.reset-size11.size7,.katex .sizing.reset-size11.size7{font-size:.48231511em}.katex .fontsize-ensurer.reset-size11.size8,.katex .sizing.reset-size11.size8{font-size:.57877814em}.katex .fontsize-ensurer.reset-size11.size9,.katex .sizing.reset-size11.size9{font-size:.69453376em}.katex .fontsize-ensurer.reset-size11.size10,.katex .sizing.reset-size11.size10{font-size:.83360129em}.katex .fontsize-ensurer.reset-size11.size11,.katex .sizing.reset-size11.size11{font-size:1em}.katex .delimsizing.size1{font-family:KaTeX_Size1}.katex .delimsizing.size2{font-family:KaTeX_Size2}.katex .delimsizing.size3{font-family:KaTeX_Size3}.katex .delimsizing.size4{font-family:KaTeX_Size4}.katex .delimsizing.mult .delim-size1>span{font-family:KaTeX_Size1}.katex .delimsizing.mult .delim-size4>span{font-family:KaTeX_Size4}.katex .nulldelimiter{display:inline-block;width:.12em}.katex .delimcenter,.katex .op-symbol{position:relative}.katex .op-symbol.small-op{font-family:KaTeX_Size1}.katex .op-symbol.large-op{font-family:KaTeX_Size2}.katex .op-limits>.vlist-t{text-align:center}.katex .accent>.vlist-t{text-align:center}.katex .accent .accent-body{position:relative}.katex .accent .accent-body:not(.accent-full){width:0}.katex .overlay{display:block}.katex .mtable .vertical-separator{display:inline-block;min-width:1px}.katex .mtable .arraycolsep{display:inline-block}.katex .mtable .col-align-c>.vlist-t{text-align:center}.katex .mtable .col-align-l>.vlist-t{text-align:left}.katex .mtable .col-align-r>.vlist-t{text-align:right}.katex .svg-align{text-align:left}.katex svg{display:block;position:absolute;width:100%;height:inherit;fill:currentColor;stroke:currentColor;fill-rule:nonzero;fill-opacity:1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1}.katex svg path{stroke:none}.katex img{border-style:none;min-width:0;min-height:0;max-width:none;max-height:none}.katex .stretchy{width:100%;display:block;position:relative;overflow:hidden}.katex .stretchy:after,.katex .stretchy:before{content:""}.katex .hide-tail{width:100%;position:relative;overflow:hidden}.katex .halfarrow-left{position:absolute;left:0;width:50.2%;overflow:hidden}.katex .halfarrow-right{position:absolute;right:0;width:50.2%;overflow:hidden}.katex .brace-left{position:absolute;left:0;width:25.1%;overflow:hidden}.katex .brace-center{position:absolute;left:25%;width:50%;overflow:hidden}.katex .brace-right{position:absolute;right:0;width:25.1%;overflow:hidden}.katex .x-arrow-pad{padding:0 .5em}.katex .mover,.katex .munder,.katex .x-arrow{text-align:center}.katex .boxpad{padding:0 .3em}.katex .fbox,.katex .fcolorbox{box-sizing:border-box;border:.04em solid}.katex .cancel-pad{padding:0 .2em}.katex .cancel-lap{margin-left:-.2em;margin-right:-.2em}.katex .sout{border-bottom-style:solid;border-bottom-width:.08em}.katex-display{display:block;margin:1em 0;text-align:center}.katex-display>.katex{display:block;text-align:center;white-space:nowrap}.katex-display>.katex>.katex-html{display:block;position:relative}.katex-display>.katex>.katex-html>.tag{position:absolute;right:0}.katex-display.leqno>.katex>.katex-html>.tag{left:0;right:auto}.katex-display.fleqn>.katex{text-align:left}
diff --git a/registry/vulkan/katex/katex.min.js b/registry/vulkan/katex/katex.min.js
deleted file mode 100644
index 906ce12..0000000
--- a/registry/vulkan/katex/katex.min.js
+++ /dev/null
@@ -1 +0,0 @@
-!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.katex=e():t.katex=e()}("undefined"!=typeof self?self:this,function(){return function(t){var e={};function r(a){if(e[a])return e[a].exports;var n=e[a]={i:a,l:!1,exports:{}};return t[a].call(n.exports,n,n.exports,r),n.l=!0,n.exports}return r.m=t,r.c=e,r.d=function(t,e,a){r.o(t,e)||Object.defineProperty(t,e,{enumerable:!0,get:a})},r.r=function(t){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},r.t=function(t,e){if(1&e&&(t=r(t)),8&e)return t;if(4&e&&"object"==typeof t&&t&&t.__esModule)return t;var a=Object.create(null);if(r.r(a),Object.defineProperty(a,"default",{enumerable:!0,value:t}),2&e&&"string"!=typeof t)for(var n in t)r.d(a,n,function(e){return t[e]}.bind(null,n));return a},r.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return r.d(e,"a",e),e},r.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},r.p="",r(r.s=1)}([function(t,e,r){},function(t,e,r){"use strict";r.r(e);r(0);var a=function(){function t(t,e,r){this.lexer=void 0,this.start=void 0,this.end=void 0,this.lexer=t,this.start=e,this.end=r}return t.range=function(e,r){return r?e&&e.loc&&r.loc&&e.loc.lexer===r.loc.lexer?new t(e.loc.lexer,e.loc.start,r.loc.end):null:e&&e.loc},t}(),n=function(){function t(t,e){this.text=void 0,this.loc=void 0,this.text=t,this.loc=e}return t.prototype.range=function(e,r){return new t(r,a.range(this,e))},t}(),i=function t(e,r){this.position=void 0;var a,n="KaTeX parse error: "+e,i=r&&r.loc;if(i&&i.start<=i.end){var o=i.lexer.input;a=i.start;var s=i.end;a===o.length?n+=" at end of input: ":n+=" at position "+(a+1)+": ";var h=o.slice(a,s).replace(/[^]/g,"$&\u0332");n+=(a>15?"\u2026"+o.slice(a-15,a):o.slice(0,a))+h+(s+15<o.length?o.slice(s,s+15)+"\u2026":o.slice(s))}var l=new Error(n);return l.name="ParseError",l.__proto__=t.prototype,l.position=a,l};i.prototype.__proto__=Error.prototype;var o=i,s=/([A-Z])/g,h={"&":"&amp;",">":"&gt;","<":"&lt;",'"':"&quot;","'":"&#x27;"},l=/[&><"']/g;var m=function t(e){return"ordgroup"===e.type?1===e.body.length?t(e.body[0]):e:"color"===e.type?1===e.body.length?t(e.body[0]):e:"font"===e.type?t(e.body):e},c={contains:function(t,e){return-1!==t.indexOf(e)},deflt:function(t,e){return void 0===t?e:t},escape:function(t){return String(t).replace(l,function(t){return h[t]})},hyphenate:function(t){return t.replace(s,"-$1").toLowerCase()},getBaseElem:m,isCharacterBox:function(t){var e=m(t);return"mathord"===e.type||"textord"===e.type||"atom"===e.type},protocolFromUrl:function(t){var e=/^\s*([^\\\/#]*?)(?::|&#0*58|&#x0*3a)/i.exec(t);return null!=e?e[1]:"_relative"}},u=function(){function t(t){this.displayMode=void 0,this.output=void 0,this.leqno=void 0,this.fleqn=void 0,this.throwOnError=void 0,this.errorColor=void 0,this.macros=void 0,this.minRuleThickness=void 0,this.colorIsTextColor=void 0,this.strict=void 0,this.trust=void 0,this.maxSize=void 0,this.maxExpand=void 0,t=t||{},this.displayMode=c.deflt(t.displayMode,!1),this.output=c.deflt(t.output,"htmlAndMathml"),this.leqno=c.deflt(t.leqno,!1),this.fleqn=c.deflt(t.fleqn,!1),this.throwOnError=c.deflt(t.throwOnError,!0),this.errorColor=c.deflt(t.errorColor,"#cc0000"),this.macros=t.macros||{},this.minRuleThickness=Math.max(0,c.deflt(t.minRuleThickness,0)),this.colorIsTextColor=c.deflt(t.colorIsTextColor,!1),this.strict=c.deflt(t.strict,"warn"),this.trust=c.deflt(t.trust,!1),this.maxSize=Math.max(0,c.deflt(t.maxSize,1/0)),this.maxExpand=Math.max(0,c.deflt(t.maxExpand,1e3))}var e=t.prototype;return e.reportNonstrict=function(t,e,r){var a=this.strict;if("function"==typeof a&&(a=a(t,e,r)),a&&"ignore"!==a){if(!0===a||"error"===a)throw new o("LaTeX-incompatible input and strict mode is set to 'error': "+e+" ["+t+"]",r);"warn"===a?"undefined"!=typeof console&&console.warn("LaTeX-incompatible input and strict mode is set to 'warn': "+e+" ["+t+"]"):"undefined"!=typeof console&&console.warn("LaTeX-incompatible input and strict mode is set to unrecognized '"+a+"': "+e+" ["+t+"]")}},e.useStrictBehavior=function(t,e,r){var a=this.strict;if("function"==typeof a)try{a=a(t,e,r)}catch(t){a="error"}return!(!a||"ignore"===a)&&(!0===a||"error"===a||("warn"===a?("undefined"!=typeof console&&console.warn("LaTeX-incompatible input and strict mode is set to 'warn': "+e+" ["+t+"]"),!1):("undefined"!=typeof console&&console.warn("LaTeX-incompatible input and strict mode is set to unrecognized '"+a+"': "+e+" ["+t+"]"),!1)))},e.isTrusted=function(t){t.url&&!t.protocol&&(t.protocol=c.protocolFromUrl(t.url));var e="function"==typeof this.trust?this.trust(t):this.trust;return Boolean(e)},t}(),p=function(){function t(t,e,r){this.id=void 0,this.size=void 0,this.cramped=void 0,this.id=t,this.size=e,this.cramped=r}var e=t.prototype;return e.sup=function(){return d[f[this.id]]},e.sub=function(){return d[g[this.id]]},e.fracNum=function(){return d[x[this.id]]},e.fracDen=function(){return d[v[this.id]]},e.cramp=function(){return d[b[this.id]]},e.text=function(){return d[y[this.id]]},e.isTight=function(){return this.size>=2},t}(),d=[new p(0,0,!1),new p(1,0,!0),new p(2,1,!1),new p(3,1,!0),new p(4,2,!1),new p(5,2,!0),new p(6,3,!1),new p(7,3,!0)],f=[4,5,4,5,6,7,6,7],g=[5,5,5,5,7,7,7,7],x=[2,3,4,5,6,7,6,7],v=[3,3,5,5,7,7,7,7],b=[1,1,3,3,5,5,7,7],y=[0,1,2,3,2,3,2,3],w={DISPLAY:d[0],TEXT:d[2],SCRIPT:d[4],SCRIPTSCRIPT:d[6]},k=[{name:"latin",blocks:[[256,591],[768,879]]},{name:"cyrillic",blocks:[[1024,1279]]},{name:"brahmic",blocks:[[2304,4255]]},{name:"georgian",blocks:[[4256,4351]]},{name:"cjk",blocks:[[12288,12543],[19968,40879],[65280,65376]]},{name:"hangul",blocks:[[44032,55215]]}];var S=[];function M(t){for(var e=0;e<S.length;e+=2)if(t>=S[e]&&t<=S[e+1])return!0;return!1}k.forEach(function(t){return t.blocks.forEach(function(t){return S.push.apply(S,t)})});var z={doubleleftarrow:"M262 157\nl10-10c34-36 62.7-77 86-123 3.3-8 5-13.3 5-16 0-5.3-6.7-8-20-8-7.3\n 0-12.2.5-14.5 1.5-2.3 1-4.8 4.5-7.5 10.5-49.3 97.3-121.7 169.3-217 216-28\n 14-57.3 25-88 33-6.7 2-11 3.8-13 5.5-2 1.7-3 4.2-3 7.5s1 5.8 3 7.5\nc2 1.7 6.3 3.5 13 5.5 68 17.3 128.2 47.8 180.5 91.5 52.3 43.7 93.8 96.2 124.5\n 157.5 9.3 8 15.3 12.3 18 13h6c12-.7 18-4 18-10 0-2-1.7-7-5-15-23.3-46-52-87\n-86-123l-10-10h399738v-40H218c328 0 0 0 0 0l-10-8c-26.7-20-65.7-43-117-69 2.7\n-2 6-3.7 10-5 36.7-16 72.3-37.3 107-64l10-8h399782v-40z\nm8 0v40h399730v-40zm0 194v40h399730v-40z",doublerightarrow:"M399738 392l\n-10 10c-34 36-62.7 77-86 123-3.3 8-5 13.3-5 16 0 5.3 6.7 8 20 8 7.3 0 12.2-.5\n 14.5-1.5 2.3-1 4.8-4.5 7.5-10.5 49.3-97.3 121.7-169.3 217-216 28-14 57.3-25 88\n-33 6.7-2 11-3.8 13-5.5 2-1.7 3-4.2 3-7.5s-1-5.8-3-7.5c-2-1.7-6.3-3.5-13-5.5-68\n-17.3-128.2-47.8-180.5-91.5-52.3-43.7-93.8-96.2-124.5-157.5-9.3-8-15.3-12.3-18\n-13h-6c-12 .7-18 4-18 10 0 2 1.7 7 5 15 23.3 46 52 87 86 123l10 10H0v40h399782\nc-328 0 0 0 0 0l10 8c26.7 20 65.7 43 117 69-2.7 2-6 3.7-10 5-36.7 16-72.3 37.3\n-107 64l-10 8H0v40zM0 157v40h399730v-40zm0 194v40h399730v-40z",leftarrow:"M400000 241H110l3-3c68.7-52.7 113.7-120\n 135-202 4-14.7 6-23 6-25 0-7.3-7-11-21-11-8 0-13.2.8-15.5 2.5-2.3 1.7-4.2 5.8\n-5.5 12.5-1.3 4.7-2.7 10.3-4 17-12 48.7-34.8 92-68.5 130S65.3 228.3 18 247\nc-10 4-16 7.7-18 11 0 8.7 6 14.3 18 17 47.3 18.7 87.8 47 121.5 85S196 441.3 208\n 490c.7 2 1.3 5 2 9s1.2 6.7 1.5 8c.3 1.3 1 3.3 2 6s2.2 4.5 3.5 5.5c1.3 1 3.3\n 1.8 6 2.5s6 1 10 1c14 0 21-3.7 21-11 0-2-2-10.3-6-25-20-79.3-65-146.7-135-202\n l-3-3h399890zM100 241v40h399900v-40z",leftbrace:"M6 548l-6-6v-35l6-11c56-104 135.3-181.3 238-232 57.3-28.7 117\n-45 179-50h399577v120H403c-43.3 7-81 15-113 26-100.7 33-179.7 91-237 174-2.7\n 5-6 9-10 13-.7 1-7.3 1-20 1H6z",leftbraceunder:"M0 6l6-6h17c12.688 0 19.313.3 20 1 4 4 7.313 8.3 10 13\n 35.313 51.3 80.813 93.8 136.5 127.5 55.688 33.7 117.188 55.8 184.5 66.5.688\n 0 2 .3 4 1 18.688 2.7 76 4.3 172 5h399450v120H429l-6-1c-124.688-8-235-61.7\n-331-161C60.687 138.7 32.312 99.3 7 54L0 41V6z",leftgroup:"M400000 80\nH435C64 80 168.3 229.4 21 260c-5.9 1.2-18 0-18 0-2 0-3-1-3-3v-38C76 61 257 0\n 435 0h399565z",leftgroupunder:"M400000 262\nH435C64 262 168.3 112.6 21 82c-5.9-1.2-18 0-18 0-2 0-3 1-3 3v38c76 158 257 219\n 435 219h399565z",leftharpoon:"M0 267c.7 5.3 3 10 7 14h399993v-40H93c3.3\n-3.3 10.2-9.5 20.5-18.5s17.8-15.8 22.5-20.5c50.7-52 88-110.3 112-175 4-11.3 5\n-18.3 3-21-1.3-4-7.3-6-18-6-8 0-13 .7-15 2s-4.7 6.7-8 16c-42 98.7-107.3 174.7\n-196 228-6.7 4.7-10.7 8-12 10-1.3 2-2 5.7-2 11zm100-26v40h399900v-40z",leftharpoonplus:"M0 267c.7 5.3 3 10 7 14h399993v-40H93c3.3-3.3 10.2-9.5\n 20.5-18.5s17.8-15.8 22.5-20.5c50.7-52 88-110.3 112-175 4-11.3 5-18.3 3-21-1.3\n-4-7.3-6-18-6-8 0-13 .7-15 2s-4.7 6.7-8 16c-42 98.7-107.3 174.7-196 228-6.7 4.7\n-10.7 8-12 10-1.3 2-2 5.7-2 11zm100-26v40h399900v-40zM0 435v40h400000v-40z\nm0 0v40h400000v-40z",leftharpoondown:"M7 241c-4 4-6.333 8.667-7 14 0 5.333.667 9 2 11s5.333\n 5.333 12 10c90.667 54 156 130 196 228 3.333 10.667 6.333 16.333 9 17 2 .667 5\n 1 9 1h5c10.667 0 16.667-2 18-6 2-2.667 1-9.667-3-21-32-87.333-82.667-157.667\n-152-211l-3-3h399907v-40zM93 281 H400000 v-40L7 241z",leftharpoondownplus:"M7 435c-4 4-6.3 8.7-7 14 0 5.3.7 9 2 11s5.3 5.3 12\n 10c90.7 54 156 130 196 228 3.3 10.7 6.3 16.3 9 17 2 .7 5 1 9 1h5c10.7 0 16.7\n-2 18-6 2-2.7 1-9.7-3-21-32-87.3-82.7-157.7-152-211l-3-3h399907v-40H7zm93 0\nv40h399900v-40zM0 241v40h399900v-40zm0 0v40h399900v-40z",lefthook:"M400000 281 H103s-33-11.2-61-33.5S0 197.3 0 164s14.2-61.2 42.5\n-83.5C70.8 58.2 104 47 142 47 c16.7 0 25 6.7 25 20 0 12-8.7 18.7-26 20-40 3.3\n-68.7 15.7-86 37-10 12-15 25.3-15 40 0 22.7 9.8 40.7 29.5 54 19.7 13.3 43.5 21\n 71.5 23h399859zM103 281v-40h399897v40z",leftlinesegment:"M40 281 V428 H0 V94 H40 V241 H400000 v40z\nM40 281 V428 H0 V94 H40 V241 H400000 v40z",leftmapsto:"M40 281 V448H0V74H40V241H400000v40z\nM40 281 V448H0V74H40V241H400000v40z",leftToFrom:"M0 147h400000v40H0zm0 214c68 40 115.7 95.7 143 167h22c15.3 0 23\n-.3 23-1 0-1.3-5.3-13.7-16-37-18-35.3-41.3-69-70-101l-7-8h399905v-40H95l7-8\nc28.7-32 52-65.7 70-101 10.7-23.3 16-35.7 16-37 0-.7-7.7-1-23-1h-22C115.7 265.3\n 68 321 0 361zm0-174v-40h399900v40zm100 154v40h399900v-40z",longequal:"M0 50 h400000 v40H0z m0 194h40000v40H0z\nM0 50 h400000 v40H0z m0 194h40000v40H0z",midbrace:"M200428 334\nc-100.7-8.3-195.3-44-280-108-55.3-42-101.7-93-139-153l-9-14c-2.7 4-5.7 8.7-9 14\n-53.3 86.7-123.7 153-211 199-66.7 36-137.3 56.3-212 62H0V214h199568c178.3-11.7\n 311.7-78.3 403-201 6-8 9.7-12 11-12 .7-.7 6.7-1 18-1s17.3.3 18 1c1.3 0 5 4 11\n 12 44.7 59.3 101.3 106.3 170 141s145.3 54.3 229 60h199572v120z",midbraceunder:"M199572 214\nc100.7 8.3 195.3 44 280 108 55.3 42 101.7 93 139 153l9 14c2.7-4 5.7-8.7 9-14\n 53.3-86.7 123.7-153 211-199 66.7-36 137.3-56.3 212-62h199568v120H200432c-178.3\n 11.7-311.7 78.3-403 201-6 8-9.7 12-11 12-.7.7-6.7 1-18 1s-17.3-.3-18-1c-1.3 0\n-5-4-11-12-44.7-59.3-101.3-106.3-170-141s-145.3-54.3-229-60H0V214z",oiintSize1:"M512.6 71.6c272.6 0 320.3 106.8 320.3 178.2 0 70.8-47.7 177.6\n-320.3 177.6S193.1 320.6 193.1 249.8c0-71.4 46.9-178.2 319.5-178.2z\nm368.1 178.2c0-86.4-60.9-215.4-368.1-215.4-306.4 0-367.3 129-367.3 215.4 0 85.8\n60.9 214.8 367.3 214.8 307.2 0 368.1-129 368.1-214.8z",oiintSize2:"M757.8 100.1c384.7 0 451.1 137.6 451.1 230 0 91.3-66.4 228.8\n-451.1 228.8-386.3 0-452.7-137.5-452.7-228.8 0-92.4 66.4-230 452.7-230z\nm502.4 230c0-111.2-82.4-277.2-502.4-277.2s-504 166-504 277.2\nc0 110 84 276 504 276s502.4-166 502.4-276z",oiiintSize1:"M681.4 71.6c408.9 0 480.5 106.8 480.5 178.2 0 70.8-71.6 177.6\n-480.5 177.6S202.1 320.6 202.1 249.8c0-71.4 70.5-178.2 479.3-178.2z\nm525.8 178.2c0-86.4-86.8-215.4-525.7-215.4-437.9 0-524.7 129-524.7 215.4 0\n85.8 86.8 214.8 524.7 214.8 438.9 0 525.7-129 525.7-214.8z",oiiintSize2:"M1021.2 53c603.6 0 707.8 165.8 707.8 277.2 0 110-104.2 275.8\n-707.8 275.8-606 0-710.2-165.8-710.2-275.8C311 218.8 415.2 53 1021.2 53z\nm770.4 277.1c0-131.2-126.4-327.6-770.5-327.6S248.4 198.9 248.4 330.1\nc0 130 128.8 326.4 772.7 326.4s770.5-196.4 770.5-326.4z",rightarrow:"M0 241v40h399891c-47.3 35.3-84 78-110 128\n-16.7 32-27.7 63.7-33 95 0 1.3-.2 2.7-.5 4-.3 1.3-.5 2.3-.5 3 0 7.3 6.7 11 20\n 11 8 0 13.2-.8 15.5-2.5 2.3-1.7 4.2-5.5 5.5-11.5 2-13.3 5.7-27 11-41 14.7-44.7\n 39-84.5 73-119.5s73.7-60.2 119-75.5c6-2 9-5.7 9-11s-3-9-9-11c-45.3-15.3-85\n-40.5-119-75.5s-58.3-74.8-73-119.5c-4.7-14-8.3-27.3-11-40-1.3-6.7-3.2-10.8-5.5\n-12.5-2.3-1.7-7.5-2.5-15.5-2.5-14 0-21 3.7-21 11 0 2 2 10.3 6 25 20.7 83.3 67\n 151.7 139 205zm0 0v40h399900v-40z",rightbrace:"M400000 542l\n-6 6h-17c-12.7 0-19.3-.3-20-1-4-4-7.3-8.3-10-13-35.3-51.3-80.8-93.8-136.5-127.5\ns-117.2-55.8-184.5-66.5c-.7 0-2-.3-4-1-18.7-2.7-76-4.3-172-5H0V214h399571l6 1\nc124.7 8 235 61.7 331 161 31.3 33.3 59.7 72.7 85 118l7 13v35z",rightbraceunder:"M399994 0l6 6v35l-6 11c-56 104-135.3 181.3-238 232-57.3\n 28.7-117 45-179 50H-300V214h399897c43.3-7 81-15 113-26 100.7-33 179.7-91 237\n-174 2.7-5 6-9 10-13 .7-1 7.3-1 20-1h17z",rightgroup:"M0 80h399565c371 0 266.7 149.4 414 180 5.9 1.2 18 0 18 0 2 0\n 3-1 3-3v-38c-76-158-257-219-435-219H0z",rightgroupunder:"M0 262h399565c371 0 266.7-149.4 414-180 5.9-1.2 18 0 18\n 0 2 0 3 1 3 3v38c-76 158-257 219-435 219H0z",rightharpoon:"M0 241v40h399993c4.7-4.7 7-9.3 7-14 0-9.3\n-3.7-15.3-11-18-92.7-56.7-159-133.7-199-231-3.3-9.3-6-14.7-8-16-2-1.3-7-2-15-2\n-10.7 0-16.7 2-18 6-2 2.7-1 9.7 3 21 15.3 42 36.7 81.8 64 119.5 27.3 37.7 58\n 69.2 92 94.5zm0 0v40h399900v-40z",rightharpoonplus:"M0 241v40h399993c4.7-4.7 7-9.3 7-14 0-9.3-3.7-15.3-11\n-18-92.7-56.7-159-133.7-199-231-3.3-9.3-6-14.7-8-16-2-1.3-7-2-15-2-10.7 0-16.7\n 2-18 6-2 2.7-1 9.7 3 21 15.3 42 36.7 81.8 64 119.5 27.3 37.7 58 69.2 92 94.5z\nm0 0v40h399900v-40z m100 194v40h399900v-40zm0 0v40h399900v-40z",rightharpoondown:"M399747 511c0 7.3 6.7 11 20 11 8 0 13-.8 15-2.5s4.7-6.8\n 8-15.5c40-94 99.3-166.3 178-217 13.3-8 20.3-12.3 21-13 5.3-3.3 8.5-5.8 9.5\n-7.5 1-1.7 1.5-5.2 1.5-10.5s-2.3-10.3-7-15H0v40h399908c-34 25.3-64.7 57-92 95\n-27.3 38-48.7 77.7-64 119-3.3 8.7-5 14-5 16zM0 241v40h399900v-40z",rightharpoondownplus:"M399747 705c0 7.3 6.7 11 20 11 8 0 13-.8\n 15-2.5s4.7-6.8 8-15.5c40-94 99.3-166.3 178-217 13.3-8 20.3-12.3 21-13 5.3-3.3\n 8.5-5.8 9.5-7.5 1-1.7 1.5-5.2 1.5-10.5s-2.3-10.3-7-15H0v40h399908c-34 25.3\n-64.7 57-92 95-27.3 38-48.7 77.7-64 119-3.3 8.7-5 14-5 16zM0 435v40h399900v-40z\nm0-194v40h400000v-40zm0 0v40h400000v-40z",righthook:"M399859 241c-764 0 0 0 0 0 40-3.3 68.7-15.7 86-37 10-12 15-25.3\n 15-40 0-22.7-9.8-40.7-29.5-54-19.7-13.3-43.5-21-71.5-23-17.3-1.3-26-8-26-20 0\n-13.3 8.7-20 26-20 38 0 71 11.2 99 33.5 0 0 7 5.6 21 16.7 14 11.2 21 33.5 21\n 66.8s-14 61.2-42 83.5c-28 22.3-61 33.5-99 33.5L0 241z M0 281v-40h399859v40z",rightlinesegment:"M399960 241 V94 h40 V428 h-40 V281 H0 v-40z\nM399960 241 V94 h40 V428 h-40 V281 H0 v-40z",rightToFrom:"M400000 167c-70.7-42-118-97.7-142-167h-23c-15.3 0-23 .3-23\n 1 0 1.3 5.3 13.7 16 37 18 35.3 41.3 69 70 101l7 8H0v40h399905l-7 8c-28.7 32\n-52 65.7-70 101-10.7 23.3-16 35.7-16 37 0 .7 7.7 1 23 1h23c24-69.3 71.3-125 142\n-167z M100 147v40h399900v-40zM0 341v40h399900v-40z",twoheadleftarrow:"M0 167c68 40\n 115.7 95.7 143 167h22c15.3 0 23-.3 23-1 0-1.3-5.3-13.7-16-37-18-35.3-41.3-69\n-70-101l-7-8h125l9 7c50.7 39.3 85 86 103 140h46c0-4.7-6.3-18.7-19-42-18-35.3\n-40-67.3-66-96l-9-9h399716v-40H284l9-9c26-28.7 48-60.7 66-96 12.7-23.333 19\n-37.333 19-42h-46c-18 54-52.3 100.7-103 140l-9 7H95l7-8c28.7-32 52-65.7 70-101\n 10.7-23.333 16-35.7 16-37 0-.7-7.7-1-23-1h-22C115.7 71.3 68 127 0 167z",twoheadrightarrow:"M400000 167\nc-68-40-115.7-95.7-143-167h-22c-15.3 0-23 .3-23 1 0 1.3 5.3 13.7 16 37 18 35.3\n 41.3 69 70 101l7 8h-125l-9-7c-50.7-39.3-85-86-103-140h-46c0 4.7 6.3 18.7 19 42\n 18 35.3 40 67.3 66 96l9 9H0v40h399716l-9 9c-26 28.7-48 60.7-66 96-12.7 23.333\n-19 37.333-19 42h46c18-54 52.3-100.7 103-140l9-7h125l-7 8c-28.7 32-52 65.7-70\n 101-10.7 23.333-16 35.7-16 37 0 .7 7.7 1 23 1h22c27.3-71.3 75-127 143-167z",tilde1:"M200 55.538c-77 0-168 73.953-177 73.953-3 0-7\n-2.175-9-5.437L2 97c-1-2-2-4-2-6 0-4 2-7 5-9l20-12C116 12 171 0 207 0c86 0\n 114 68 191 68 78 0 168-68 177-68 4 0 7 2 9 5l12 19c1 2.175 2 4.35 2 6.525 0\n 4.35-2 7.613-5 9.788l-19 13.05c-92 63.077-116.937 75.308-183 76.128\n-68.267.847-113-73.952-191-73.952z",tilde2:"M344 55.266c-142 0-300.638 81.316-311.5 86.418\n-8.01 3.762-22.5 10.91-23.5 5.562L1 120c-1-2-1-3-1-4 0-5 3-9 8-10l18.4-9C160.9\n 31.9 283 0 358 0c148 0 188 122 331 122s314-97 326-97c4 0 8 2 10 7l7 21.114\nc1 2.14 1 3.21 1 4.28 0 5.347-3 9.626-7 10.696l-22.3 12.622C852.6 158.372 751\n 181.476 676 181.476c-149 0-189-126.21-332-126.21z",tilde3:"M786 59C457 59 32 175.242 13 175.242c-6 0-10-3.457\n-11-10.37L.15 138c-1-7 3-12 10-13l19.2-6.4C378.4 40.7 634.3 0 804.3 0c337 0\n 411.8 157 746.8 157 328 0 754-112 773-112 5 0 10 3 11 9l1 14.075c1 8.066-.697\n 16.595-6.697 17.492l-21.052 7.31c-367.9 98.146-609.15 122.696-778.15 122.696\n -338 0-409-156.573-744-156.573z",tilde4:"M786 58C457 58 32 177.487 13 177.487c-6 0-10-3.345\n-11-10.035L.15 143c-1-7 3-12 10-13l22-6.7C381.2 35 637.15 0 807.15 0c337 0 409\n 177 744 177 328 0 754-127 773-127 5 0 10 3 11 9l1 14.794c1 7.805-3 13.38-9\n 14.495l-20.7 5.574c-366.85 99.79-607.3 139.372-776.3 139.372-338 0-409\n -175.236-744-175.236z",vec:"M377 20c0-5.333 1.833-10 5.5-14S391 0 397 0c4.667 0 8.667 1.667 12 5\n3.333 2.667 6.667 9 10 19 6.667 24.667 20.333 43.667 41 57 7.333 4.667 11\n10.667 11 18 0 6-1 10-3 12s-6.667 5-14 9c-28.667 14.667-53.667 35.667-75 63\n-1.333 1.333-3.167 3.5-5.5 6.5s-4 4.833-5 5.5c-1 .667-2.5 1.333-4.5 2s-4.333 1\n-7 1c-4.667 0-9.167-1.833-13.5-5.5S337 184 337 178c0-12.667 15.667-32.333 47-59\nH213l-171-1c-8.667-6-13-12.333-13-19 0-4.667 4.333-11.333 13-20h359\nc-16-25.333-24-45-24-59z",widehat1:"M529 0h5l519 115c5 1 9 5 9 10 0 1-1 2-1 3l-4 22\nc-1 5-5 9-11 9h-2L532 67 19 159h-2c-5 0-9-4-11-9l-5-22c-1-6 2-12 8-13z",widehat2:"M1181 0h2l1171 176c6 0 10 5 10 11l-2 23c-1 6-5 10\n-11 10h-1L1182 67 15 220h-1c-6 0-10-4-11-10l-2-23c-1-6 4-11 10-11z",widehat3:"M1181 0h2l1171 236c6 0 10 5 10 11l-2 23c-1 6-5 10\n-11 10h-1L1182 67 15 280h-1c-6 0-10-4-11-10l-2-23c-1-6 4-11 10-11z",widehat4:"M1181 0h2l1171 296c6 0 10 5 10 11l-2 23c-1 6-5 10\n-11 10h-1L1182 67 15 340h-1c-6 0-10-4-11-10l-2-23c-1-6 4-11 10-11z",widecheck1:"M529,159h5l519,-115c5,-1,9,-5,9,-10c0,-1,-1,-2,-1,-3l-4,-22c-1,\n-5,-5,-9,-11,-9h-2l-512,92l-513,-92h-2c-5,0,-9,4,-11,9l-5,22c-1,6,2,12,8,13z",widecheck2:"M1181,220h2l1171,-176c6,0,10,-5,10,-11l-2,-23c-1,-6,-5,-10,\n-11,-10h-1l-1168,153l-1167,-153h-1c-6,0,-10,4,-11,10l-2,23c-1,6,4,11,10,11z",widecheck3:"M1181,280h2l1171,-236c6,0,10,-5,10,-11l-2,-23c-1,-6,-5,-10,\n-11,-10h-1l-1168,213l-1167,-213h-1c-6,0,-10,4,-11,10l-2,23c-1,6,4,11,10,11z",widecheck4:"M1181,340h2l1171,-296c6,0,10,-5,10,-11l-2,-23c-1,-6,-5,-10,\n-11,-10h-1l-1168,273l-1167,-273h-1c-6,0,-10,4,-11,10l-2,23c-1,6,4,11,10,11z",baraboveleftarrow:"M400000 620h-399890l3 -3c68.7 -52.7 113.7 -120 135 -202\nc4 -14.7 6 -23 6 -25c0 -7.3 -7 -11 -21 -11c-8 0 -13.2 0.8 -15.5 2.5\nc-2.3 1.7 -4.2 5.8 -5.5 12.5c-1.3 4.7 -2.7 10.3 -4 17c-12 48.7 -34.8 92 -68.5 130\ns-74.2 66.3 -121.5 85c-10 4 -16 7.7 -18 11c0 8.7 6 14.3 18 17c47.3 18.7 87.8 47\n121.5 85s56.5 81.3 68.5 130c0.7 2 1.3 5 2 9s1.2 6.7 1.5 8c0.3 1.3 1 3.3 2 6\ns2.2 4.5 3.5 5.5c1.3 1 3.3 1.8 6 2.5s6 1 10 1c14 0 21 -3.7 21 -11\nc0 -2 -2 -10.3 -6 -25c-20 -79.3 -65 -146.7 -135 -202l-3 -3h399890z\nM100 620v40h399900v-40z M0 241v40h399900v-40zM0 241v40h399900v-40z",rightarrowabovebar:"M0 241v40h399891c-47.3 35.3-84 78-110 128-16.7 32\n-27.7 63.7-33 95 0 1.3-.2 2.7-.5 4-.3 1.3-.5 2.3-.5 3 0 7.3 6.7 11 20 11 8 0\n13.2-.8 15.5-2.5 2.3-1.7 4.2-5.5 5.5-11.5 2-13.3 5.7-27 11-41 14.7-44.7 39\n-84.5 73-119.5s73.7-60.2 119-75.5c6-2 9-5.7 9-11s-3-9-9-11c-45.3-15.3-85-40.5\n-119-75.5s-58.3-74.8-73-119.5c-4.7-14-8.3-27.3-11-40-1.3-6.7-3.2-10.8-5.5\n-12.5-2.3-1.7-7.5-2.5-15.5-2.5-14 0-21 3.7-21 11 0 2 2 10.3 6 25 20.7 83.3 67\n151.7 139 205zm96 379h399894v40H0zm0 0h399904v40H0z",baraboveshortleftharpoon:"M507,435c-4,4,-6.3,8.7,-7,14c0,5.3,0.7,9,2,11\nc1.3,2,5.3,5.3,12,10c90.7,54,156,130,196,228c3.3,10.7,6.3,16.3,9,17\nc2,0.7,5,1,9,1c0,0,5,0,5,0c10.7,0,16.7,-2,18,-6c2,-2.7,1,-9.7,-3,-21\nc-32,-87.3,-82.7,-157.7,-152,-211c0,0,-3,-3,-3,-3l399351,0l0,-40\nc-398570,0,-399437,0,-399437,0z M593 435 v40 H399500 v-40z\nM0 281 v-40 H399908 v40z M0 281 v-40 H399908 v40z",rightharpoonaboveshortbar:"M0,241 l0,40c399126,0,399993,0,399993,0\nc4.7,-4.7,7,-9.3,7,-14c0,-9.3,-3.7,-15.3,-11,-18c-92.7,-56.7,-159,-133.7,-199,\n-231c-3.3,-9.3,-6,-14.7,-8,-16c-2,-1.3,-7,-2,-15,-2c-10.7,0,-16.7,2,-18,6\nc-2,2.7,-1,9.7,3,21c15.3,42,36.7,81.8,64,119.5c27.3,37.7,58,69.2,92,94.5z\nM0 241 v40 H399908 v-40z M0 475 v-40 H399500 v40z M0 475 v-40 H399500 v40z",shortbaraboveleftharpoon:"M7,435c-4,4,-6.3,8.7,-7,14c0,5.3,0.7,9,2,11\nc1.3,2,5.3,5.3,12,10c90.7,54,156,130,196,228c3.3,10.7,6.3,16.3,9,17c2,0.7,5,1,9,\n1c0,0,5,0,5,0c10.7,0,16.7,-2,18,-6c2,-2.7,1,-9.7,-3,-21c-32,-87.3,-82.7,-157.7,\n-152,-211c0,0,-3,-3,-3,-3l399907,0l0,-40c-399126,0,-399993,0,-399993,0z\nM93 435 v40 H400000 v-40z M500 241 v40 H400000 v-40z M500 241 v40 H400000 v-40z",shortrightharpoonabovebar:"M53,241l0,40c398570,0,399437,0,399437,0\nc4.7,-4.7,7,-9.3,7,-14c0,-9.3,-3.7,-15.3,-11,-18c-92.7,-56.7,-159,-133.7,-199,\n-231c-3.3,-9.3,-6,-14.7,-8,-16c-2,-1.3,-7,-2,-15,-2c-10.7,0,-16.7,2,-18,6\nc-2,2.7,-1,9.7,3,21c15.3,42,36.7,81.8,64,119.5c27.3,37.7,58,69.2,92,94.5z\nM500 241 v40 H399408 v-40z M500 435 v40 H400000 v-40z"},A=function(){function t(t){this.children=void 0,this.classes=void 0,this.height=void 0,this.depth=void 0,this.maxFontSize=void 0,this.style=void 0,this.children=t,this.classes=[],this.height=0,this.depth=0,this.maxFontSize=0,this.style={}}var e=t.prototype;return e.hasClass=function(t){return c.contains(this.classes,t)},e.toNode=function(){for(var t=document.createDocumentFragment(),e=0;e<this.children.length;e++)t.appendChild(this.children[e].toNode());return t},e.toMarkup=function(){for(var t="",e=0;e<this.children.length;e++)t+=this.children[e].toMarkup();return t},e.toText=function(){var t=function(t){return t.toText()};return this.children.map(t).join("")},t}(),T=function(t){return t.filter(function(t){return t}).join(" ")},B=function(t,e,r){if(this.classes=t||[],this.attributes={},this.height=0,this.depth=0,this.maxFontSize=0,this.style=r||{},e){e.style.isTight()&&this.classes.push("mtight");var a=e.getColor();a&&(this.style.color=a)}},C=function(t){var e=document.createElement(t);for(var r in e.className=T(this.classes),this.style)this.style.hasOwnProperty(r)&&(e.style[r]=this.style[r]);for(var a in this.attributes)this.attributes.hasOwnProperty(a)&&e.setAttribute(a,this.attributes[a]);for(var n=0;n<this.children.length;n++)e.appendChild(this.children[n].toNode());return e},q=function(t){var e="<"+t;this.classes.length&&(e+=' class="'+c.escape(T(this.classes))+'"');var r="";for(var a in this.style)this.style.hasOwnProperty(a)&&(r+=c.hyphenate(a)+":"+this.style[a]+";");for(var n in r&&(e+=' style="'+c.escape(r)+'"'),this.attributes)this.attributes.hasOwnProperty(n)&&(e+=" "+n+'="'+c.escape(this.attributes[n])+'"');e+=">";for(var i=0;i<this.children.length;i++)e+=this.children[i].toMarkup();return e+="</"+t+">"},N=function(){function t(t,e,r,a){this.children=void 0,this.attributes=void 0,this.classes=void 0,this.height=void 0,this.depth=void 0,this.width=void 0,this.maxFontSize=void 0,this.style=void 0,B.call(this,t,r,a),this.children=e||[]}var e=t.prototype;return e.setAttribute=function(t,e){this.attributes[t]=e},e.hasClass=function(t){return c.contains(this.classes,t)},e.toNode=function(){return C.call(this,"span")},e.toMarkup=function(){return q.call(this,"span")},t}(),I=function(){function t(t,e,r,a){this.children=void 0,this.attributes=void 0,this.classes=void 0,this.height=void 0,this.depth=void 0,this.maxFontSize=void 0,this.style=void 0,B.call(this,e,a),this.children=r||[],this.setAttribute("href",t)}var e=t.prototype;return e.setAttribute=function(t,e){this.attributes[t]=e},e.hasClass=function(t){return c.contains(this.classes,t)},e.toNode=function(){return C.call(this,"a")},e.toMarkup=function(){return q.call(this,"a")},t}(),R=function(){function t(t,e,r){this.src=void 0,this.alt=void 0,this.classes=void 0,this.height=void 0,this.depth=void 0,this.maxFontSize=void 0,this.style=void 0,this.alt=e,this.src=t,this.classes=["mord"],this.style=r}var e=t.prototype;return e.hasClass=function(t){return c.contains(this.classes,t)},e.toNode=function(){var t=document.createElement("img");for(var e in t.src=this.src,t.alt=this.alt,t.className="mord",this.style)this.style.hasOwnProperty(e)&&(t.style[e]=this.style[e]);return t},e.toMarkup=function(){var t="<img  src='"+this.src+" 'alt='"+this.alt+"' ",e="";for(var r in this.style)this.style.hasOwnProperty(r)&&(e+=c.hyphenate(r)+":"+this.style[r]+";");return e&&(t+=' style="'+c.escape(e)+'"'),t+="'/>"},t}(),O={"\xee":"\u0131\u0302","\xef":"\u0131\u0308","\xed":"\u0131\u0301","\xec":"\u0131\u0300"},E=function(){function t(t,e,r,a,n,i,o,s){this.text=void 0,this.height=void 0,this.depth=void 0,this.italic=void 0,this.skew=void 0,this.width=void 0,this.maxFontSize=void 0,this.classes=void 0,this.style=void 0,this.text=t,this.height=e||0,this.depth=r||0,this.italic=a||0,this.skew=n||0,this.width=i||0,this.classes=o||[],this.style=s||{},this.maxFontSize=0;var h=function(t){for(var e=0;e<k.length;e++)for(var r=k[e],a=0;a<r.blocks.length;a++){var n=r.blocks[a];if(t>=n[0]&&t<=n[1])return r.name}return null}(this.text.charCodeAt(0));h&&this.classes.push(h+"_fallback"),/[\xee\xef\xed\xec]/.test(this.text)&&(this.text=O[this.text])}var e=t.prototype;return e.hasClass=function(t){return c.contains(this.classes,t)},e.toNode=function(){var t=document.createTextNode(this.text),e=null;for(var r in this.italic>0&&((e=document.createElement("span")).style.marginRight=this.italic+"em"),this.classes.length>0&&((e=e||document.createElement("span")).className=T(this.classes)),this.style)this.style.hasOwnProperty(r)&&((e=e||document.createElement("span")).style[r]=this.style[r]);return e?(e.appendChild(t),e):t},e.toMarkup=function(){var t=!1,e="<span";this.classes.length&&(t=!0,e+=' class="',e+=c.escape(T(this.classes)),e+='"');var r="";for(var a in this.italic>0&&(r+="margin-right:"+this.italic+"em;"),this.style)this.style.hasOwnProperty(a)&&(r+=c.hyphenate(a)+":"+this.style[a]+";");r&&(t=!0,e+=' style="'+c.escape(r)+'"');var n=c.escape(this.text);return t?(e+=">",e+=n,e+="</span>"):n},t}(),L=function(){function t(t,e){this.children=void 0,this.attributes=void 0,this.children=t||[],this.attributes=e||{}}var e=t.prototype;return e.toNode=function(){var t=document.createElementNS("http://www.w3.org/2000/svg","svg");for(var e in this.attributes)Object.prototype.hasOwnProperty.call(this.attributes,e)&&t.setAttribute(e,this.attributes[e]);for(var r=0;r<this.children.length;r++)t.appendChild(this.children[r].toNode());return t},e.toMarkup=function(){var t="<svg";for(var e in this.attributes)Object.prototype.hasOwnProperty.call(this.attributes,e)&&(t+=" "+e+"='"+this.attributes[e]+"'");t+=">";for(var r=0;r<this.children.length;r++)t+=this.children[r].toMarkup();return t+="</svg>"},t}(),H=function(){function t(t,e){this.pathName=void 0,this.alternate=void 0,this.pathName=t,this.alternate=e}var e=t.prototype;return e.toNode=function(){var t=document.createElementNS("http://www.w3.org/2000/svg","path");return this.alternate?t.setAttribute("d",this.alternate):t.setAttribute("d",z[this.pathName]),t},e.toMarkup=function(){return this.alternate?"<path d='"+this.alternate+"'/>":"<path d='"+z[this.pathName]+"'/>"},t}(),P=function(){function t(t){this.attributes=void 0,this.attributes=t||{}}var e=t.prototype;return e.toNode=function(){var t=document.createElementNS("http://www.w3.org/2000/svg","line");for(var e in this.attributes)Object.prototype.hasOwnProperty.call(this.attributes,e)&&t.setAttribute(e,this.attributes[e]);return t},e.toMarkup=function(){var t="<line";for(var e in this.attributes)Object.prototype.hasOwnProperty.call(this.attributes,e)&&(t+=" "+e+"='"+this.attributes[e]+"'");return t+="/>"},t}();function D(t){if(t instanceof E)return t;throw new Error("Expected symbolNode but got "+String(t)+".")}var F={"AMS-Regular":{65:[0,.68889,0,0,.72222],66:[0,.68889,0,0,.66667],67:[0,.68889,0,0,.72222],68:[0,.68889,0,0,.72222],69:[0,.68889,0,0,.66667],70:[0,.68889,0,0,.61111],71:[0,.68889,0,0,.77778],72:[0,.68889,0,0,.77778],73:[0,.68889,0,0,.38889],74:[.16667,.68889,0,0,.5],75:[0,.68889,0,0,.77778],76:[0,.68889,0,0,.66667],77:[0,.68889,0,0,.94445],78:[0,.68889,0,0,.72222],79:[.16667,.68889,0,0,.77778],80:[0,.68889,0,0,.61111],81:[.16667,.68889,0,0,.77778],82:[0,.68889,0,0,.72222],83:[0,.68889,0,0,.55556],84:[0,.68889,0,0,.66667],85:[0,.68889,0,0,.72222],86:[0,.68889,0,0,.72222],87:[0,.68889,0,0,1],88:[0,.68889,0,0,.72222],89:[0,.68889,0,0,.72222],90:[0,.68889,0,0,.66667],107:[0,.68889,0,0,.55556],165:[0,.675,.025,0,.75],174:[.15559,.69224,0,0,.94666],240:[0,.68889,0,0,.55556],295:[0,.68889,0,0,.54028],710:[0,.825,0,0,2.33334],732:[0,.9,0,0,2.33334],770:[0,.825,0,0,2.33334],771:[0,.9,0,0,2.33334],989:[.08167,.58167,0,0,.77778],1008:[0,.43056,.04028,0,.66667],8245:[0,.54986,0,0,.275],8463:[0,.68889,0,0,.54028],8487:[0,.68889,0,0,.72222],8498:[0,.68889,0,0,.55556],8502:[0,.68889,0,0,.66667],8503:[0,.68889,0,0,.44445],8504:[0,.68889,0,0,.66667],8513:[0,.68889,0,0,.63889],8592:[-.03598,.46402,0,0,.5],8594:[-.03598,.46402,0,0,.5],8602:[-.13313,.36687,0,0,1],8603:[-.13313,.36687,0,0,1],8606:[.01354,.52239,0,0,1],8608:[.01354,.52239,0,0,1],8610:[.01354,.52239,0,0,1.11111],8611:[.01354,.52239,0,0,1.11111],8619:[0,.54986,0,0,1],8620:[0,.54986,0,0,1],8621:[-.13313,.37788,0,0,1.38889],8622:[-.13313,.36687,0,0,1],8624:[0,.69224,0,0,.5],8625:[0,.69224,0,0,.5],8630:[0,.43056,0,0,1],8631:[0,.43056,0,0,1],8634:[.08198,.58198,0,0,.77778],8635:[.08198,.58198,0,0,.77778],8638:[.19444,.69224,0,0,.41667],8639:[.19444,.69224,0,0,.41667],8642:[.19444,.69224,0,0,.41667],8643:[.19444,.69224,0,0,.41667],8644:[.1808,.675,0,0,1],8646:[.1808,.675,0,0,1],8647:[.1808,.675,0,0,1],8648:[.19444,.69224,0,0,.83334],8649:[.1808,.675,0,0,1],8650:[.19444,.69224,0,0,.83334],8651:[.01354,.52239,0,0,1],8652:[.01354,.52239,0,0,1],8653:[-.13313,.36687,0,0,1],8654:[-.13313,.36687,0,0,1],8655:[-.13313,.36687,0,0,1],8666:[.13667,.63667,0,0,1],8667:[.13667,.63667,0,0,1],8669:[-.13313,.37788,0,0,1],8672:[-.064,.437,0,0,1.334],8674:[-.064,.437,0,0,1.334],8705:[0,.825,0,0,.5],8708:[0,.68889,0,0,.55556],8709:[.08167,.58167,0,0,.77778],8717:[0,.43056,0,0,.42917],8722:[-.03598,.46402,0,0,.5],8724:[.08198,.69224,0,0,.77778],8726:[.08167,.58167,0,0,.77778],8733:[0,.69224,0,0,.77778],8736:[0,.69224,0,0,.72222],8737:[0,.69224,0,0,.72222],8738:[.03517,.52239,0,0,.72222],8739:[.08167,.58167,0,0,.22222],8740:[.25142,.74111,0,0,.27778],8741:[.08167,.58167,0,0,.38889],8742:[.25142,.74111,0,0,.5],8756:[0,.69224,0,0,.66667],8757:[0,.69224,0,0,.66667],8764:[-.13313,.36687,0,0,.77778],8765:[-.13313,.37788,0,0,.77778],8769:[-.13313,.36687,0,0,.77778],8770:[-.03625,.46375,0,0,.77778],8774:[.30274,.79383,0,0,.77778],8776:[-.01688,.48312,0,0,.77778],8778:[.08167,.58167,0,0,.77778],8782:[.06062,.54986,0,0,.77778],8783:[.06062,.54986,0,0,.77778],8785:[.08198,.58198,0,0,.77778],8786:[.08198,.58198,0,0,.77778],8787:[.08198,.58198,0,0,.77778],8790:[0,.69224,0,0,.77778],8791:[.22958,.72958,0,0,.77778],8796:[.08198,.91667,0,0,.77778],8806:[.25583,.75583,0,0,.77778],8807:[.25583,.75583,0,0,.77778],8808:[.25142,.75726,0,0,.77778],8809:[.25142,.75726,0,0,.77778],8812:[.25583,.75583,0,0,.5],8814:[.20576,.70576,0,0,.77778],8815:[.20576,.70576,0,0,.77778],8816:[.30274,.79383,0,0,.77778],8817:[.30274,.79383,0,0,.77778],8818:[.22958,.72958,0,0,.77778],8819:[.22958,.72958,0,0,.77778],8822:[.1808,.675,0,0,.77778],8823:[.1808,.675,0,0,.77778],8828:[.13667,.63667,0,0,.77778],8829:[.13667,.63667,0,0,.77778],8830:[.22958,.72958,0,0,.77778],8831:[.22958,.72958,0,0,.77778],8832:[.20576,.70576,0,0,.77778],8833:[.20576,.70576,0,0,.77778],8840:[.30274,.79383,0,0,.77778],8841:[.30274,.79383,0,0,.77778],8842:[.13597,.63597,0,0,.77778],8843:[.13597,.63597,0,0,.77778],8847:[.03517,.54986,0,0,.77778],8848:[.03517,.54986,0,0,.77778],8858:[.08198,.58198,0,0,.77778],8859:[.08198,.58198,0,0,.77778],8861:[.08198,.58198,0,0,.77778],8862:[0,.675,0,0,.77778],8863:[0,.675,0,0,.77778],8864:[0,.675,0,0,.77778],8865:[0,.675,0,0,.77778],8872:[0,.69224,0,0,.61111],8873:[0,.69224,0,0,.72222],8874:[0,.69224,0,0,.88889],8876:[0,.68889,0,0,.61111],8877:[0,.68889,0,0,.61111],8878:[0,.68889,0,0,.72222],8879:[0,.68889,0,0,.72222],8882:[.03517,.54986,0,0,.77778],8883:[.03517,.54986,0,0,.77778],8884:[.13667,.63667,0,0,.77778],8885:[.13667,.63667,0,0,.77778],8888:[0,.54986,0,0,1.11111],8890:[.19444,.43056,0,0,.55556],8891:[.19444,.69224,0,0,.61111],8892:[.19444,.69224,0,0,.61111],8901:[0,.54986,0,0,.27778],8903:[.08167,.58167,0,0,.77778],8905:[.08167,.58167,0,0,.77778],8906:[.08167,.58167,0,0,.77778],8907:[0,.69224,0,0,.77778],8908:[0,.69224,0,0,.77778],8909:[-.03598,.46402,0,0,.77778],8910:[0,.54986,0,0,.76042],8911:[0,.54986,0,0,.76042],8912:[.03517,.54986,0,0,.77778],8913:[.03517,.54986,0,0,.77778],8914:[0,.54986,0,0,.66667],8915:[0,.54986,0,0,.66667],8916:[0,.69224,0,0,.66667],8918:[.0391,.5391,0,0,.77778],8919:[.0391,.5391,0,0,.77778],8920:[.03517,.54986,0,0,1.33334],8921:[.03517,.54986,0,0,1.33334],8922:[.38569,.88569,0,0,.77778],8923:[.38569,.88569,0,0,.77778],8926:[.13667,.63667,0,0,.77778],8927:[.13667,.63667,0,0,.77778],8928:[.30274,.79383,0,0,.77778],8929:[.30274,.79383,0,0,.77778],8934:[.23222,.74111,0,0,.77778],8935:[.23222,.74111,0,0,.77778],8936:[.23222,.74111,0,0,.77778],8937:[.23222,.74111,0,0,.77778],8938:[.20576,.70576,0,0,.77778],8939:[.20576,.70576,0,0,.77778],8940:[.30274,.79383,0,0,.77778],8941:[.30274,.79383,0,0,.77778],8994:[.19444,.69224,0,0,.77778],8995:[.19444,.69224,0,0,.77778],9416:[.15559,.69224,0,0,.90222],9484:[0,.69224,0,0,.5],9488:[0,.69224,0,0,.5],9492:[0,.37788,0,0,.5],9496:[0,.37788,0,0,.5],9585:[.19444,.68889,0,0,.88889],9586:[.19444,.74111,0,0,.88889],9632:[0,.675,0,0,.77778],9633:[0,.675,0,0,.77778],9650:[0,.54986,0,0,.72222],9651:[0,.54986,0,0,.72222],9654:[.03517,.54986,0,0,.77778],9660:[0,.54986,0,0,.72222],9661:[0,.54986,0,0,.72222],9664:[.03517,.54986,0,0,.77778],9674:[.11111,.69224,0,0,.66667],9733:[.19444,.69224,0,0,.94445],10003:[0,.69224,0,0,.83334],10016:[0,.69224,0,0,.83334],10731:[.11111,.69224,0,0,.66667],10846:[.19444,.75583,0,0,.61111],10877:[.13667,.63667,0,0,.77778],10878:[.13667,.63667,0,0,.77778],10885:[.25583,.75583,0,0,.77778],10886:[.25583,.75583,0,0,.77778],10887:[.13597,.63597,0,0,.77778],10888:[.13597,.63597,0,0,.77778],10889:[.26167,.75726,0,0,.77778],10890:[.26167,.75726,0,0,.77778],10891:[.48256,.98256,0,0,.77778],10892:[.48256,.98256,0,0,.77778],10901:[.13667,.63667,0,0,.77778],10902:[.13667,.63667,0,0,.77778],10933:[.25142,.75726,0,0,.77778],10934:[.25142,.75726,0,0,.77778],10935:[.26167,.75726,0,0,.77778],10936:[.26167,.75726,0,0,.77778],10937:[.26167,.75726,0,0,.77778],10938:[.26167,.75726,0,0,.77778],10949:[.25583,.75583,0,0,.77778],10950:[.25583,.75583,0,0,.77778],10955:[.28481,.79383,0,0,.77778],10956:[.28481,.79383,0,0,.77778],57350:[.08167,.58167,0,0,.22222],57351:[.08167,.58167,0,0,.38889],57352:[.08167,.58167,0,0,.77778],57353:[0,.43056,.04028,0,.66667],57356:[.25142,.75726,0,0,.77778],57357:[.25142,.75726,0,0,.77778],57358:[.41951,.91951,0,0,.77778],57359:[.30274,.79383,0,0,.77778],57360:[.30274,.79383,0,0,.77778],57361:[.41951,.91951,0,0,.77778],57366:[.25142,.75726,0,0,.77778],57367:[.25142,.75726,0,0,.77778],57368:[.25142,.75726,0,0,.77778],57369:[.25142,.75726,0,0,.77778],57370:[.13597,.63597,0,0,.77778],57371:[.13597,.63597,0,0,.77778]},"Caligraphic-Regular":{48:[0,.43056,0,0,.5],49:[0,.43056,0,0,.5],50:[0,.43056,0,0,.5],51:[.19444,.43056,0,0,.5],52:[.19444,.43056,0,0,.5],53:[.19444,.43056,0,0,.5],54:[0,.64444,0,0,.5],55:[.19444,.43056,0,0,.5],56:[0,.64444,0,0,.5],57:[.19444,.43056,0,0,.5],65:[0,.68333,0,.19445,.79847],66:[0,.68333,.03041,.13889,.65681],67:[0,.68333,.05834,.13889,.52653],68:[0,.68333,.02778,.08334,.77139],69:[0,.68333,.08944,.11111,.52778],70:[0,.68333,.09931,.11111,.71875],71:[.09722,.68333,.0593,.11111,.59487],72:[0,.68333,.00965,.11111,.84452],73:[0,.68333,.07382,0,.54452],74:[.09722,.68333,.18472,.16667,.67778],75:[0,.68333,.01445,.05556,.76195],76:[0,.68333,0,.13889,.68972],77:[0,.68333,0,.13889,1.2009],78:[0,.68333,.14736,.08334,.82049],79:[0,.68333,.02778,.11111,.79611],80:[0,.68333,.08222,.08334,.69556],81:[.09722,.68333,0,.11111,.81667],82:[0,.68333,0,.08334,.8475],83:[0,.68333,.075,.13889,.60556],84:[0,.68333,.25417,0,.54464],85:[0,.68333,.09931,.08334,.62583],86:[0,.68333,.08222,0,.61278],87:[0,.68333,.08222,.08334,.98778],88:[0,.68333,.14643,.13889,.7133],89:[.09722,.68333,.08222,.08334,.66834],90:[0,.68333,.07944,.13889,.72473]},"Fraktur-Regular":{33:[0,.69141,0,0,.29574],34:[0,.69141,0,0,.21471],38:[0,.69141,0,0,.73786],39:[0,.69141,0,0,.21201],40:[.24982,.74947,0,0,.38865],41:[.24982,.74947,0,0,.38865],42:[0,.62119,0,0,.27764],43:[.08319,.58283,0,0,.75623],44:[0,.10803,0,0,.27764],45:[.08319,.58283,0,0,.75623],46:[0,.10803,0,0,.27764],47:[.24982,.74947,0,0,.50181],48:[0,.47534,0,0,.50181],49:[0,.47534,0,0,.50181],50:[0,.47534,0,0,.50181],51:[.18906,.47534,0,0,.50181],52:[.18906,.47534,0,0,.50181],53:[.18906,.47534,0,0,.50181],54:[0,.69141,0,0,.50181],55:[.18906,.47534,0,0,.50181],56:[0,.69141,0,0,.50181],57:[.18906,.47534,0,0,.50181],58:[0,.47534,0,0,.21606],59:[.12604,.47534,0,0,.21606],61:[-.13099,.36866,0,0,.75623],63:[0,.69141,0,0,.36245],65:[0,.69141,0,0,.7176],66:[0,.69141,0,0,.88397],67:[0,.69141,0,0,.61254],68:[0,.69141,0,0,.83158],69:[0,.69141,0,0,.66278],70:[.12604,.69141,0,0,.61119],71:[0,.69141,0,0,.78539],72:[.06302,.69141,0,0,.7203],73:[0,.69141,0,0,.55448],74:[.12604,.69141,0,0,.55231],75:[0,.69141,0,0,.66845],76:[0,.69141,0,0,.66602],77:[0,.69141,0,0,1.04953],78:[0,.69141,0,0,.83212],79:[0,.69141,0,0,.82699],80:[.18906,.69141,0,0,.82753],81:[.03781,.69141,0,0,.82699],82:[0,.69141,0,0,.82807],83:[0,.69141,0,0,.82861],84:[0,.69141,0,0,.66899],85:[0,.69141,0,0,.64576],86:[0,.69141,0,0,.83131],87:[0,.69141,0,0,1.04602],88:[0,.69141,0,0,.71922],89:[.18906,.69141,0,0,.83293],90:[.12604,.69141,0,0,.60201],91:[.24982,.74947,0,0,.27764],93:[.24982,.74947,0,0,.27764],94:[0,.69141,0,0,.49965],97:[0,.47534,0,0,.50046],98:[0,.69141,0,0,.51315],99:[0,.47534,0,0,.38946],100:[0,.62119,0,0,.49857],101:[0,.47534,0,0,.40053],102:[.18906,.69141,0,0,.32626],103:[.18906,.47534,0,0,.5037],104:[.18906,.69141,0,0,.52126],105:[0,.69141,0,0,.27899],106:[0,.69141,0,0,.28088],107:[0,.69141,0,0,.38946],108:[0,.69141,0,0,.27953],109:[0,.47534,0,0,.76676],110:[0,.47534,0,0,.52666],111:[0,.47534,0,0,.48885],112:[.18906,.52396,0,0,.50046],113:[.18906,.47534,0,0,.48912],114:[0,.47534,0,0,.38919],115:[0,.47534,0,0,.44266],116:[0,.62119,0,0,.33301],117:[0,.47534,0,0,.5172],118:[0,.52396,0,0,.5118],119:[0,.52396,0,0,.77351],120:[.18906,.47534,0,0,.38865],121:[.18906,.47534,0,0,.49884],122:[.18906,.47534,0,0,.39054],8216:[0,.69141,0,0,.21471],8217:[0,.69141,0,0,.21471],58112:[0,.62119,0,0,.49749],58113:[0,.62119,0,0,.4983],58114:[.18906,.69141,0,0,.33328],58115:[.18906,.69141,0,0,.32923],58116:[.18906,.47534,0,0,.50343],58117:[0,.69141,0,0,.33301],58118:[0,.62119,0,0,.33409],58119:[0,.47534,0,0,.50073]},"Main-Bold":{33:[0,.69444,0,0,.35],34:[0,.69444,0,0,.60278],35:[.19444,.69444,0,0,.95833],36:[.05556,.75,0,0,.575],37:[.05556,.75,0,0,.95833],38:[0,.69444,0,0,.89444],39:[0,.69444,0,0,.31944],40:[.25,.75,0,0,.44722],41:[.25,.75,0,0,.44722],42:[0,.75,0,0,.575],43:[.13333,.63333,0,0,.89444],44:[.19444,.15556,0,0,.31944],45:[0,.44444,0,0,.38333],46:[0,.15556,0,0,.31944],47:[.25,.75,0,0,.575],48:[0,.64444,0,0,.575],49:[0,.64444,0,0,.575],50:[0,.64444,0,0,.575],51:[0,.64444,0,0,.575],52:[0,.64444,0,0,.575],53:[0,.64444,0,0,.575],54:[0,.64444,0,0,.575],55:[0,.64444,0,0,.575],56:[0,.64444,0,0,.575],57:[0,.64444,0,0,.575],58:[0,.44444,0,0,.31944],59:[.19444,.44444,0,0,.31944],60:[.08556,.58556,0,0,.89444],61:[-.10889,.39111,0,0,.89444],62:[.08556,.58556,0,0,.89444],63:[0,.69444,0,0,.54305],64:[0,.69444,0,0,.89444],65:[0,.68611,0,0,.86944],66:[0,.68611,0,0,.81805],67:[0,.68611,0,0,.83055],68:[0,.68611,0,0,.88194],69:[0,.68611,0,0,.75555],70:[0,.68611,0,0,.72361],71:[0,.68611,0,0,.90416],72:[0,.68611,0,0,.9],73:[0,.68611,0,0,.43611],74:[0,.68611,0,0,.59444],75:[0,.68611,0,0,.90138],76:[0,.68611,0,0,.69166],77:[0,.68611,0,0,1.09166],78:[0,.68611,0,0,.9],79:[0,.68611,0,0,.86388],80:[0,.68611,0,0,.78611],81:[.19444,.68611,0,0,.86388],82:[0,.68611,0,0,.8625],83:[0,.68611,0,0,.63889],84:[0,.68611,0,0,.8],85:[0,.68611,0,0,.88472],86:[0,.68611,.01597,0,.86944],87:[0,.68611,.01597,0,1.18888],88:[0,.68611,0,0,.86944],89:[0,.68611,.02875,0,.86944],90:[0,.68611,0,0,.70277],91:[.25,.75,0,0,.31944],92:[.25,.75,0,0,.575],93:[.25,.75,0,0,.31944],94:[0,.69444,0,0,.575],95:[.31,.13444,.03194,0,.575],97:[0,.44444,0,0,.55902],98:[0,.69444,0,0,.63889],99:[0,.44444,0,0,.51111],100:[0,.69444,0,0,.63889],101:[0,.44444,0,0,.52708],102:[0,.69444,.10903,0,.35139],103:[.19444,.44444,.01597,0,.575],104:[0,.69444,0,0,.63889],105:[0,.69444,0,0,.31944],106:[.19444,.69444,0,0,.35139],107:[0,.69444,0,0,.60694],108:[0,.69444,0,0,.31944],109:[0,.44444,0,0,.95833],110:[0,.44444,0,0,.63889],111:[0,.44444,0,0,.575],112:[.19444,.44444,0,0,.63889],113:[.19444,.44444,0,0,.60694],114:[0,.44444,0,0,.47361],115:[0,.44444,0,0,.45361],116:[0,.63492,0,0,.44722],117:[0,.44444,0,0,.63889],118:[0,.44444,.01597,0,.60694],119:[0,.44444,.01597,0,.83055],120:[0,.44444,0,0,.60694],121:[.19444,.44444,.01597,0,.60694],122:[0,.44444,0,0,.51111],123:[.25,.75,0,0,.575],124:[.25,.75,0,0,.31944],125:[.25,.75,0,0,.575],126:[.35,.34444,0,0,.575],168:[0,.69444,0,0,.575],172:[0,.44444,0,0,.76666],176:[0,.69444,0,0,.86944],177:[.13333,.63333,0,0,.89444],184:[.17014,0,0,0,.51111],198:[0,.68611,0,0,1.04166],215:[.13333,.63333,0,0,.89444],216:[.04861,.73472,0,0,.89444],223:[0,.69444,0,0,.59722],230:[0,.44444,0,0,.83055],247:[.13333,.63333,0,0,.89444],248:[.09722,.54167,0,0,.575],305:[0,.44444,0,0,.31944],338:[0,.68611,0,0,1.16944],339:[0,.44444,0,0,.89444],567:[.19444,.44444,0,0,.35139],710:[0,.69444,0,0,.575],711:[0,.63194,0,0,.575],713:[0,.59611,0,0,.575],714:[0,.69444,0,0,.575],715:[0,.69444,0,0,.575],728:[0,.69444,0,0,.575],729:[0,.69444,0,0,.31944],730:[0,.69444,0,0,.86944],732:[0,.69444,0,0,.575],733:[0,.69444,0,0,.575],915:[0,.68611,0,0,.69166],916:[0,.68611,0,0,.95833],920:[0,.68611,0,0,.89444],923:[0,.68611,0,0,.80555],926:[0,.68611,0,0,.76666],928:[0,.68611,0,0,.9],931:[0,.68611,0,0,.83055],933:[0,.68611,0,0,.89444],934:[0,.68611,0,0,.83055],936:[0,.68611,0,0,.89444],937:[0,.68611,0,0,.83055],8211:[0,.44444,.03194,0,.575],8212:[0,.44444,.03194,0,1.14999],8216:[0,.69444,0,0,.31944],8217:[0,.69444,0,0,.31944],8220:[0,.69444,0,0,.60278],8221:[0,.69444,0,0,.60278],8224:[.19444,.69444,0,0,.51111],8225:[.19444,.69444,0,0,.51111],8242:[0,.55556,0,0,.34444],8407:[0,.72444,.15486,0,.575],8463:[0,.69444,0,0,.66759],8465:[0,.69444,0,0,.83055],8467:[0,.69444,0,0,.47361],8472:[.19444,.44444,0,0,.74027],8476:[0,.69444,0,0,.83055],8501:[0,.69444,0,0,.70277],8592:[-.10889,.39111,0,0,1.14999],8593:[.19444,.69444,0,0,.575],8594:[-.10889,.39111,0,0,1.14999],8595:[.19444,.69444,0,0,.575],8596:[-.10889,.39111,0,0,1.14999],8597:[.25,.75,0,0,.575],8598:[.19444,.69444,0,0,1.14999],8599:[.19444,.69444,0,0,1.14999],8600:[.19444,.69444,0,0,1.14999],8601:[.19444,.69444,0,0,1.14999],8636:[-.10889,.39111,0,0,1.14999],8637:[-.10889,.39111,0,0,1.14999],8640:[-.10889,.39111,0,0,1.14999],8641:[-.10889,.39111,0,0,1.14999],8656:[-.10889,.39111,0,0,1.14999],8657:[.19444,.69444,0,0,.70277],8658:[-.10889,.39111,0,0,1.14999],8659:[.19444,.69444,0,0,.70277],8660:[-.10889,.39111,0,0,1.14999],8661:[.25,.75,0,0,.70277],8704:[0,.69444,0,0,.63889],8706:[0,.69444,.06389,0,.62847],8707:[0,.69444,0,0,.63889],8709:[.05556,.75,0,0,.575],8711:[0,.68611,0,0,.95833],8712:[.08556,.58556,0,0,.76666],8715:[.08556,.58556,0,0,.76666],8722:[.13333,.63333,0,0,.89444],8723:[.13333,.63333,0,0,.89444],8725:[.25,.75,0,0,.575],8726:[.25,.75,0,0,.575],8727:[-.02778,.47222,0,0,.575],8728:[-.02639,.47361,0,0,.575],8729:[-.02639,.47361,0,0,.575],8730:[.18,.82,0,0,.95833],8733:[0,.44444,0,0,.89444],8734:[0,.44444,0,0,1.14999],8736:[0,.69224,0,0,.72222],8739:[.25,.75,0,0,.31944],8741:[.25,.75,0,0,.575],8743:[0,.55556,0,0,.76666],8744:[0,.55556,0,0,.76666],8745:[0,.55556,0,0,.76666],8746:[0,.55556,0,0,.76666],8747:[.19444,.69444,.12778,0,.56875],8764:[-.10889,.39111,0,0,.89444],8768:[.19444,.69444,0,0,.31944],8771:[.00222,.50222,0,0,.89444],8776:[.02444,.52444,0,0,.89444],8781:[.00222,.50222,0,0,.89444],8801:[.00222,.50222,0,0,.89444],8804:[.19667,.69667,0,0,.89444],8805:[.19667,.69667,0,0,.89444],8810:[.08556,.58556,0,0,1.14999],8811:[.08556,.58556,0,0,1.14999],8826:[.08556,.58556,0,0,.89444],8827:[.08556,.58556,0,0,.89444],8834:[.08556,.58556,0,0,.89444],8835:[.08556,.58556,0,0,.89444],8838:[.19667,.69667,0,0,.89444],8839:[.19667,.69667,0,0,.89444],8846:[0,.55556,0,0,.76666],8849:[.19667,.69667,0,0,.89444],8850:[.19667,.69667,0,0,.89444],8851:[0,.55556,0,0,.76666],8852:[0,.55556,0,0,.76666],8853:[.13333,.63333,0,0,.89444],8854:[.13333,.63333,0,0,.89444],8855:[.13333,.63333,0,0,.89444],8856:[.13333,.63333,0,0,.89444],8857:[.13333,.63333,0,0,.89444],8866:[0,.69444,0,0,.70277],8867:[0,.69444,0,0,.70277],8868:[0,.69444,0,0,.89444],8869:[0,.69444,0,0,.89444],8900:[-.02639,.47361,0,0,.575],8901:[-.02639,.47361,0,0,.31944],8902:[-.02778,.47222,0,0,.575],8968:[.25,.75,0,0,.51111],8969:[.25,.75,0,0,.51111],8970:[.25,.75,0,0,.51111],8971:[.25,.75,0,0,.51111],8994:[-.13889,.36111,0,0,1.14999],8995:[-.13889,.36111,0,0,1.14999],9651:[.19444,.69444,0,0,1.02222],9657:[-.02778,.47222,0,0,.575],9661:[.19444,.69444,0,0,1.02222],9667:[-.02778,.47222,0,0,.575],9711:[.19444,.69444,0,0,1.14999],9824:[.12963,.69444,0,0,.89444],9825:[.12963,.69444,0,0,.89444],9826:[.12963,.69444,0,0,.89444],9827:[.12963,.69444,0,0,.89444],9837:[0,.75,0,0,.44722],9838:[.19444,.69444,0,0,.44722],9839:[.19444,.69444,0,0,.44722],10216:[.25,.75,0,0,.44722],10217:[.25,.75,0,0,.44722],10815:[0,.68611,0,0,.9],10927:[.19667,.69667,0,0,.89444],10928:[.19667,.69667,0,0,.89444],57376:[.19444,.69444,0,0,0]},"Main-BoldItalic":{33:[0,.69444,.11417,0,.38611],34:[0,.69444,.07939,0,.62055],35:[.19444,.69444,.06833,0,.94444],37:[.05556,.75,.12861,0,.94444],38:[0,.69444,.08528,0,.88555],39:[0,.69444,.12945,0,.35555],40:[.25,.75,.15806,0,.47333],41:[.25,.75,.03306,0,.47333],42:[0,.75,.14333,0,.59111],43:[.10333,.60333,.03306,0,.88555],44:[.19444,.14722,0,0,.35555],45:[0,.44444,.02611,0,.41444],46:[0,.14722,0,0,.35555],47:[.25,.75,.15806,0,.59111],48:[0,.64444,.13167,0,.59111],49:[0,.64444,.13167,0,.59111],50:[0,.64444,.13167,0,.59111],51:[0,.64444,.13167,0,.59111],52:[.19444,.64444,.13167,0,.59111],53:[0,.64444,.13167,0,.59111],54:[0,.64444,.13167,0,.59111],55:[.19444,.64444,.13167,0,.59111],56:[0,.64444,.13167,0,.59111],57:[0,.64444,.13167,0,.59111],58:[0,.44444,.06695,0,.35555],59:[.19444,.44444,.06695,0,.35555],61:[-.10889,.39111,.06833,0,.88555],63:[0,.69444,.11472,0,.59111],64:[0,.69444,.09208,0,.88555],65:[0,.68611,0,0,.86555],66:[0,.68611,.0992,0,.81666],67:[0,.68611,.14208,0,.82666],68:[0,.68611,.09062,0,.87555],69:[0,.68611,.11431,0,.75666],70:[0,.68611,.12903,0,.72722],71:[0,.68611,.07347,0,.89527],72:[0,.68611,.17208,0,.8961],73:[0,.68611,.15681,0,.47166],74:[0,.68611,.145,0,.61055],75:[0,.68611,.14208,0,.89499],76:[0,.68611,0,0,.69777],77:[0,.68611,.17208,0,1.07277],78:[0,.68611,.17208,0,.8961],79:[0,.68611,.09062,0,.85499],80:[0,.68611,.0992,0,.78721],81:[.19444,.68611,.09062,0,.85499],82:[0,.68611,.02559,0,.85944],83:[0,.68611,.11264,0,.64999],84:[0,.68611,.12903,0,.7961],85:[0,.68611,.17208,0,.88083],86:[0,.68611,.18625,0,.86555],87:[0,.68611,.18625,0,1.15999],88:[0,.68611,.15681,0,.86555],89:[0,.68611,.19803,0,.86555],90:[0,.68611,.14208,0,.70888],91:[.25,.75,.1875,0,.35611],93:[.25,.75,.09972,0,.35611],94:[0,.69444,.06709,0,.59111],95:[.31,.13444,.09811,0,.59111],97:[0,.44444,.09426,0,.59111],98:[0,.69444,.07861,0,.53222],99:[0,.44444,.05222,0,.53222],100:[0,.69444,.10861,0,.59111],101:[0,.44444,.085,0,.53222],102:[.19444,.69444,.21778,0,.4],103:[.19444,.44444,.105,0,.53222],104:[0,.69444,.09426,0,.59111],105:[0,.69326,.11387,0,.35555],106:[.19444,.69326,.1672,0,.35555],107:[0,.69444,.11111,0,.53222],108:[0,.69444,.10861,0,.29666],109:[0,.44444,.09426,0,.94444],110:[0,.44444,.09426,0,.64999],111:[0,.44444,.07861,0,.59111],112:[.19444,.44444,.07861,0,.59111],113:[.19444,.44444,.105,0,.53222],114:[0,.44444,.11111,0,.50167],115:[0,.44444,.08167,0,.48694],116:[0,.63492,.09639,0,.385],117:[0,.44444,.09426,0,.62055],118:[0,.44444,.11111,0,.53222],119:[0,.44444,.11111,0,.76777],120:[0,.44444,.12583,0,.56055],121:[.19444,.44444,.105,0,.56166],122:[0,.44444,.13889,0,.49055],126:[.35,.34444,.11472,0,.59111],163:[0,.69444,0,0,.86853],168:[0,.69444,.11473,0,.59111],176:[0,.69444,0,0,.94888],184:[.17014,0,0,0,.53222],198:[0,.68611,.11431,0,1.02277],216:[.04861,.73472,.09062,0,.88555],223:[.19444,.69444,.09736,0,.665],230:[0,.44444,.085,0,.82666],248:[.09722,.54167,.09458,0,.59111],305:[0,.44444,.09426,0,.35555],338:[0,.68611,.11431,0,1.14054],339:[0,.44444,.085,0,.82666],567:[.19444,.44444,.04611,0,.385],710:[0,.69444,.06709,0,.59111],711:[0,.63194,.08271,0,.59111],713:[0,.59444,.10444,0,.59111],714:[0,.69444,.08528,0,.59111],715:[0,.69444,0,0,.59111],728:[0,.69444,.10333,0,.59111],729:[0,.69444,.12945,0,.35555],730:[0,.69444,0,0,.94888],732:[0,.69444,.11472,0,.59111],733:[0,.69444,.11472,0,.59111],915:[0,.68611,.12903,0,.69777],916:[0,.68611,0,0,.94444],920:[0,.68611,.09062,0,.88555],923:[0,.68611,0,0,.80666],926:[0,.68611,.15092,0,.76777],928:[0,.68611,.17208,0,.8961],931:[0,.68611,.11431,0,.82666],933:[0,.68611,.10778,0,.88555],934:[0,.68611,.05632,0,.82666],936:[0,.68611,.10778,0,.88555],937:[0,.68611,.0992,0,.82666],8211:[0,.44444,.09811,0,.59111],8212:[0,.44444,.09811,0,1.18221],8216:[0,.69444,.12945,0,.35555],8217:[0,.69444,.12945,0,.35555],8220:[0,.69444,.16772,0,.62055],8221:[0,.69444,.07939,0,.62055]},"Main-Italic":{33:[0,.69444,.12417,0,.30667],34:[0,.69444,.06961,0,.51444],35:[.19444,.69444,.06616,0,.81777],37:[.05556,.75,.13639,0,.81777],38:[0,.69444,.09694,0,.76666],39:[0,.69444,.12417,0,.30667],40:[.25,.75,.16194,0,.40889],41:[.25,.75,.03694,0,.40889],42:[0,.75,.14917,0,.51111],43:[.05667,.56167,.03694,0,.76666],44:[.19444,.10556,0,0,.30667],45:[0,.43056,.02826,0,.35778],46:[0,.10556,0,0,.30667],47:[.25,.75,.16194,0,.51111],48:[0,.64444,.13556,0,.51111],49:[0,.64444,.13556,0,.51111],50:[0,.64444,.13556,0,.51111],51:[0,.64444,.13556,0,.51111],52:[.19444,.64444,.13556,0,.51111],53:[0,.64444,.13556,0,.51111],54:[0,.64444,.13556,0,.51111],55:[.19444,.64444,.13556,0,.51111],56:[0,.64444,.13556,0,.51111],57:[0,.64444,.13556,0,.51111],58:[0,.43056,.0582,0,.30667],59:[.19444,.43056,.0582,0,.30667],61:[-.13313,.36687,.06616,0,.76666],63:[0,.69444,.1225,0,.51111],64:[0,.69444,.09597,0,.76666],65:[0,.68333,0,0,.74333],66:[0,.68333,.10257,0,.70389],67:[0,.68333,.14528,0,.71555],68:[0,.68333,.09403,0,.755],69:[0,.68333,.12028,0,.67833],70:[0,.68333,.13305,0,.65277],71:[0,.68333,.08722,0,.77361],72:[0,.68333,.16389,0,.74333],73:[0,.68333,.15806,0,.38555],74:[0,.68333,.14028,0,.525],75:[0,.68333,.14528,0,.76888],76:[0,.68333,0,0,.62722],77:[0,.68333,.16389,0,.89666],78:[0,.68333,.16389,0,.74333],79:[0,.68333,.09403,0,.76666],80:[0,.68333,.10257,0,.67833],81:[.19444,.68333,.09403,0,.76666],82:[0,.68333,.03868,0,.72944],83:[0,.68333,.11972,0,.56222],84:[0,.68333,.13305,0,.71555],85:[0,.68333,.16389,0,.74333],86:[0,.68333,.18361,0,.74333],87:[0,.68333,.18361,0,.99888],88:[0,.68333,.15806,0,.74333],89:[0,.68333,.19383,0,.74333],90:[0,.68333,.14528,0,.61333],91:[.25,.75,.1875,0,.30667],93:[.25,.75,.10528,0,.30667],94:[0,.69444,.06646,0,.51111],95:[.31,.12056,.09208,0,.51111],97:[0,.43056,.07671,0,.51111],98:[0,.69444,.06312,0,.46],99:[0,.43056,.05653,0,.46],100:[0,.69444,.10333,0,.51111],101:[0,.43056,.07514,0,.46],102:[.19444,.69444,.21194,0,.30667],103:[.19444,.43056,.08847,0,.46],104:[0,.69444,.07671,0,.51111],105:[0,.65536,.1019,0,.30667],106:[.19444,.65536,.14467,0,.30667],107:[0,.69444,.10764,0,.46],108:[0,.69444,.10333,0,.25555],109:[0,.43056,.07671,0,.81777],110:[0,.43056,.07671,0,.56222],111:[0,.43056,.06312,0,.51111],112:[.19444,.43056,.06312,0,.51111],113:[.19444,.43056,.08847,0,.46],114:[0,.43056,.10764,0,.42166],115:[0,.43056,.08208,0,.40889],116:[0,.61508,.09486,0,.33222],117:[0,.43056,.07671,0,.53666],118:[0,.43056,.10764,0,.46],119:[0,.43056,.10764,0,.66444],120:[0,.43056,.12042,0,.46389],121:[.19444,.43056,.08847,0,.48555],122:[0,.43056,.12292,0,.40889],126:[.35,.31786,.11585,0,.51111],163:[0,.69444,0,0,.76909],168:[0,.66786,.10474,0,.51111],176:[0,.69444,0,0,.83129],184:[.17014,0,0,0,.46],198:[0,.68333,.12028,0,.88277],216:[.04861,.73194,.09403,0,.76666],223:[.19444,.69444,.10514,0,.53666],230:[0,.43056,.07514,0,.71555],248:[.09722,.52778,.09194,0,.51111],305:[0,.43056,0,.02778,.32246],338:[0,.68333,.12028,0,.98499],339:[0,.43056,.07514,0,.71555],567:[.19444,.43056,0,.08334,.38403],710:[0,.69444,.06646,0,.51111],711:[0,.62847,.08295,0,.51111],713:[0,.56167,.10333,0,.51111],714:[0,.69444,.09694,0,.51111],715:[0,.69444,0,0,.51111],728:[0,.69444,.10806,0,.51111],729:[0,.66786,.11752,0,.30667],730:[0,.69444,0,0,.83129],732:[0,.66786,.11585,0,.51111],733:[0,.69444,.1225,0,.51111],915:[0,.68333,.13305,0,.62722],916:[0,.68333,0,0,.81777],920:[0,.68333,.09403,0,.76666],923:[0,.68333,0,0,.69222],926:[0,.68333,.15294,0,.66444],928:[0,.68333,.16389,0,.74333],931:[0,.68333,.12028,0,.71555],933:[0,.68333,.11111,0,.76666],934:[0,.68333,.05986,0,.71555],936:[0,.68333,.11111,0,.76666],937:[0,.68333,.10257,0,.71555],8211:[0,.43056,.09208,0,.51111],8212:[0,.43056,.09208,0,1.02222],8216:[0,.69444,.12417,0,.30667],8217:[0,.69444,.12417,0,.30667],8220:[0,.69444,.1685,0,.51444],8221:[0,.69444,.06961,0,.51444],8463:[0,.68889,0,0,.54028]},"Main-Regular":{32:[0,0,0,0,.25],33:[0,.69444,0,0,.27778],34:[0,.69444,0,0,.5],35:[.19444,.69444,0,0,.83334],36:[.05556,.75,0,0,.5],37:[.05556,.75,0,0,.83334],38:[0,.69444,0,0,.77778],39:[0,.69444,0,0,.27778],40:[.25,.75,0,0,.38889],41:[.25,.75,0,0,.38889],42:[0,.75,0,0,.5],43:[.08333,.58333,0,0,.77778],44:[.19444,.10556,0,0,.27778],45:[0,.43056,0,0,.33333],46:[0,.10556,0,0,.27778],47:[.25,.75,0,0,.5],48:[0,.64444,0,0,.5],49:[0,.64444,0,0,.5],50:[0,.64444,0,0,.5],51:[0,.64444,0,0,.5],52:[0,.64444,0,0,.5],53:[0,.64444,0,0,.5],54:[0,.64444,0,0,.5],55:[0,.64444,0,0,.5],56:[0,.64444,0,0,.5],57:[0,.64444,0,0,.5],58:[0,.43056,0,0,.27778],59:[.19444,.43056,0,0,.27778],60:[.0391,.5391,0,0,.77778],61:[-.13313,.36687,0,0,.77778],62:[.0391,.5391,0,0,.77778],63:[0,.69444,0,0,.47222],64:[0,.69444,0,0,.77778],65:[0,.68333,0,0,.75],66:[0,.68333,0,0,.70834],67:[0,.68333,0,0,.72222],68:[0,.68333,0,0,.76389],69:[0,.68333,0,0,.68056],70:[0,.68333,0,0,.65278],71:[0,.68333,0,0,.78472],72:[0,.68333,0,0,.75],73:[0,.68333,0,0,.36111],74:[0,.68333,0,0,.51389],75:[0,.68333,0,0,.77778],76:[0,.68333,0,0,.625],77:[0,.68333,0,0,.91667],78:[0,.68333,0,0,.75],79:[0,.68333,0,0,.77778],80:[0,.68333,0,0,.68056],81:[.19444,.68333,0,0,.77778],82:[0,.68333,0,0,.73611],83:[0,.68333,0,0,.55556],84:[0,.68333,0,0,.72222],85:[0,.68333,0,0,.75],86:[0,.68333,.01389,0,.75],87:[0,.68333,.01389,0,1.02778],88:[0,.68333,0,0,.75],89:[0,.68333,.025,0,.75],90:[0,.68333,0,0,.61111],91:[.25,.75,0,0,.27778],92:[.25,.75,0,0,.5],93:[.25,.75,0,0,.27778],94:[0,.69444,0,0,.5],95:[.31,.12056,.02778,0,.5],97:[0,.43056,0,0,.5],98:[0,.69444,0,0,.55556],99:[0,.43056,0,0,.44445],100:[0,.69444,0,0,.55556],101:[0,.43056,0,0,.44445],102:[0,.69444,.07778,0,.30556],103:[.19444,.43056,.01389,0,.5],104:[0,.69444,0,0,.55556],105:[0,.66786,0,0,.27778],106:[.19444,.66786,0,0,.30556],107:[0,.69444,0,0,.52778],108:[0,.69444,0,0,.27778],109:[0,.43056,0,0,.83334],110:[0,.43056,0,0,.55556],111:[0,.43056,0,0,.5],112:[.19444,.43056,0,0,.55556],113:[.19444,.43056,0,0,.52778],114:[0,.43056,0,0,.39167],115:[0,.43056,0,0,.39445],116:[0,.61508,0,0,.38889],117:[0,.43056,0,0,.55556],118:[0,.43056,.01389,0,.52778],119:[0,.43056,.01389,0,.72222],120:[0,.43056,0,0,.52778],121:[.19444,.43056,.01389,0,.52778],122:[0,.43056,0,0,.44445],123:[.25,.75,0,0,.5],124:[.25,.75,0,0,.27778],125:[.25,.75,0,0,.5],126:[.35,.31786,0,0,.5],160:[0,0,0,0,.25],167:[.19444,.69444,0,0,.44445],168:[0,.66786,0,0,.5],172:[0,.43056,0,0,.66667],176:[0,.69444,0,0,.75],177:[.08333,.58333,0,0,.77778],182:[.19444,.69444,0,0,.61111],184:[.17014,0,0,0,.44445],198:[0,.68333,0,0,.90278],215:[.08333,.58333,0,0,.77778],216:[.04861,.73194,0,0,.77778],223:[0,.69444,0,0,.5],230:[0,.43056,0,0,.72222],247:[.08333,.58333,0,0,.77778],248:[.09722,.52778,0,0,.5],305:[0,.43056,0,0,.27778],338:[0,.68333,0,0,1.01389],339:[0,.43056,0,0,.77778],567:[.19444,.43056,0,0,.30556],710:[0,.69444,0,0,.5],711:[0,.62847,0,0,.5],713:[0,.56778,0,0,.5],714:[0,.69444,0,0,.5],715:[0,.69444,0,0,.5],728:[0,.69444,0,0,.5],729:[0,.66786,0,0,.27778],730:[0,.69444,0,0,.75],732:[0,.66786,0,0,.5],733:[0,.69444,0,0,.5],915:[0,.68333,0,0,.625],916:[0,.68333,0,0,.83334],920:[0,.68333,0,0,.77778],923:[0,.68333,0,0,.69445],926:[0,.68333,0,0,.66667],928:[0,.68333,0,0,.75],931:[0,.68333,0,0,.72222],933:[0,.68333,0,0,.77778],934:[0,.68333,0,0,.72222],936:[0,.68333,0,0,.77778],937:[0,.68333,0,0,.72222],8211:[0,.43056,.02778,0,.5],8212:[0,.43056,.02778,0,1],8216:[0,.69444,0,0,.27778],8217:[0,.69444,0,0,.27778],8220:[0,.69444,0,0,.5],8221:[0,.69444,0,0,.5],8224:[.19444,.69444,0,0,.44445],8225:[.19444,.69444,0,0,.44445],8230:[0,.12,0,0,1.172],8242:[0,.55556,0,0,.275],8407:[0,.71444,.15382,0,.5],8463:[0,.68889,0,0,.54028],8465:[0,.69444,0,0,.72222],8467:[0,.69444,0,.11111,.41667],8472:[.19444,.43056,0,.11111,.63646],8476:[0,.69444,0,0,.72222],8501:[0,.69444,0,0,.61111],8592:[-.13313,.36687,0,0,1],8593:[.19444,.69444,0,0,.5],8594:[-.13313,.36687,0,0,1],8595:[.19444,.69444,0,0,.5],8596:[-.13313,.36687,0,0,1],8597:[.25,.75,0,0,.5],8598:[.19444,.69444,0,0,1],8599:[.19444,.69444,0,0,1],8600:[.19444,.69444,0,0,1],8601:[.19444,.69444,0,0,1],8614:[.011,.511,0,0,1],8617:[.011,.511,0,0,1.126],8618:[.011,.511,0,0,1.126],8636:[-.13313,.36687,0,0,1],8637:[-.13313,.36687,0,0,1],8640:[-.13313,.36687,0,0,1],8641:[-.13313,.36687,0,0,1],8652:[.011,.671,0,0,1],8656:[-.13313,.36687,0,0,1],8657:[.19444,.69444,0,0,.61111],8658:[-.13313,.36687,0,0,1],8659:[.19444,.69444,0,0,.61111],8660:[-.13313,.36687,0,0,1],8661:[.25,.75,0,0,.61111],8704:[0,.69444,0,0,.55556],8706:[0,.69444,.05556,.08334,.5309],8707:[0,.69444,0,0,.55556],8709:[.05556,.75,0,0,.5],8711:[0,.68333,0,0,.83334],8712:[.0391,.5391,0,0,.66667],8715:[.0391,.5391,0,0,.66667],8722:[.08333,.58333,0,0,.77778],8723:[.08333,.58333,0,0,.77778],8725:[.25,.75,0,0,.5],8726:[.25,.75,0,0,.5],8727:[-.03472,.46528,0,0,.5],8728:[-.05555,.44445,0,0,.5],8729:[-.05555,.44445,0,0,.5],8730:[.2,.8,0,0,.83334],8733:[0,.43056,0,0,.77778],8734:[0,.43056,0,0,1],8736:[0,.69224,0,0,.72222],8739:[.25,.75,0,0,.27778],8741:[.25,.75,0,0,.5],8743:[0,.55556,0,0,.66667],8744:[0,.55556,0,0,.66667],8745:[0,.55556,0,0,.66667],8746:[0,.55556,0,0,.66667],8747:[.19444,.69444,.11111,0,.41667],8764:[-.13313,.36687,0,0,.77778],8768:[.19444,.69444,0,0,.27778],8771:[-.03625,.46375,0,0,.77778],8773:[-.022,.589,0,0,1],8776:[-.01688,.48312,0,0,.77778],8781:[-.03625,.46375,0,0,.77778],8784:[-.133,.67,0,0,.778],8801:[-.03625,.46375,0,0,.77778],8804:[.13597,.63597,0,0,.77778],8805:[.13597,.63597,0,0,.77778],8810:[.0391,.5391,0,0,1],8811:[.0391,.5391,0,0,1],8826:[.0391,.5391,0,0,.77778],8827:[.0391,.5391,0,0,.77778],8834:[.0391,.5391,0,0,.77778],8835:[.0391,.5391,0,0,.77778],8838:[.13597,.63597,0,0,.77778],8839:[.13597,.63597,0,0,.77778],8846:[0,.55556,0,0,.66667],8849:[.13597,.63597,0,0,.77778],8850:[.13597,.63597,0,0,.77778],8851:[0,.55556,0,0,.66667],8852:[0,.55556,0,0,.66667],8853:[.08333,.58333,0,0,.77778],8854:[.08333,.58333,0,0,.77778],8855:[.08333,.58333,0,0,.77778],8856:[.08333,.58333,0,0,.77778],8857:[.08333,.58333,0,0,.77778],8866:[0,.69444,0,0,.61111],8867:[0,.69444,0,0,.61111],8868:[0,.69444,0,0,.77778],8869:[0,.69444,0,0,.77778],8872:[.249,.75,0,0,.867],8900:[-.05555,.44445,0,0,.5],8901:[-.05555,.44445,0,0,.27778],8902:[-.03472,.46528,0,0,.5],8904:[.005,.505,0,0,.9],8942:[.03,.9,0,0,.278],8943:[-.19,.31,0,0,1.172],8945:[-.1,.82,0,0,1.282],8968:[.25,.75,0,0,.44445],8969:[.25,.75,0,0,.44445],8970:[.25,.75,0,0,.44445],8971:[.25,.75,0,0,.44445],8994:[-.14236,.35764,0,0,1],8995:[-.14236,.35764,0,0,1],9136:[.244,.744,0,0,.412],9137:[.244,.744,0,0,.412],9651:[.19444,.69444,0,0,.88889],9657:[-.03472,.46528,0,0,.5],9661:[.19444,.69444,0,0,.88889],9667:[-.03472,.46528,0,0,.5],9711:[.19444,.69444,0,0,1],9824:[.12963,.69444,0,0,.77778],9825:[.12963,.69444,0,0,.77778],9826:[.12963,.69444,0,0,.77778],9827:[.12963,.69444,0,0,.77778],9837:[0,.75,0,0,.38889],9838:[.19444,.69444,0,0,.38889],9839:[.19444,.69444,0,0,.38889],10216:[.25,.75,0,0,.38889],10217:[.25,.75,0,0,.38889],10222:[.244,.744,0,0,.412],10223:[.244,.744,0,0,.412],10229:[.011,.511,0,0,1.609],10230:[.011,.511,0,0,1.638],10231:[.011,.511,0,0,1.859],10232:[.024,.525,0,0,1.609],10233:[.024,.525,0,0,1.638],10234:[.024,.525,0,0,1.858],10236:[.011,.511,0,0,1.638],10815:[0,.68333,0,0,.75],10927:[.13597,.63597,0,0,.77778],10928:[.13597,.63597,0,0,.77778],57376:[.19444,.69444,0,0,0]},"Math-BoldItalic":{65:[0,.68611,0,0,.86944],66:[0,.68611,.04835,0,.8664],67:[0,.68611,.06979,0,.81694],68:[0,.68611,.03194,0,.93812],69:[0,.68611,.05451,0,.81007],70:[0,.68611,.15972,0,.68889],71:[0,.68611,0,0,.88673],72:[0,.68611,.08229,0,.98229],73:[0,.68611,.07778,0,.51111],74:[0,.68611,.10069,0,.63125],75:[0,.68611,.06979,0,.97118],76:[0,.68611,0,0,.75555],77:[0,.68611,.11424,0,1.14201],78:[0,.68611,.11424,0,.95034],79:[0,.68611,.03194,0,.83666],80:[0,.68611,.15972,0,.72309],81:[.19444,.68611,0,0,.86861],82:[0,.68611,.00421,0,.87235],83:[0,.68611,.05382,0,.69271],84:[0,.68611,.15972,0,.63663],85:[0,.68611,.11424,0,.80027],86:[0,.68611,.25555,0,.67778],87:[0,.68611,.15972,0,1.09305],88:[0,.68611,.07778,0,.94722],89:[0,.68611,.25555,0,.67458],90:[0,.68611,.06979,0,.77257],97:[0,.44444,0,0,.63287],98:[0,.69444,0,0,.52083],99:[0,.44444,0,0,.51342],100:[0,.69444,0,0,.60972],101:[0,.44444,0,0,.55361],102:[.19444,.69444,.11042,0,.56806],103:[.19444,.44444,.03704,0,.5449],104:[0,.69444,0,0,.66759],105:[0,.69326,0,0,.4048],106:[.19444,.69326,.0622,0,.47083],107:[0,.69444,.01852,0,.6037],108:[0,.69444,.0088,0,.34815],109:[0,.44444,0,0,1.0324],110:[0,.44444,0,0,.71296],111:[0,.44444,0,0,.58472],112:[.19444,.44444,0,0,.60092],113:[.19444,.44444,.03704,0,.54213],114:[0,.44444,.03194,0,.5287],115:[0,.44444,0,0,.53125],116:[0,.63492,0,0,.41528],117:[0,.44444,0,0,.68102],118:[0,.44444,.03704,0,.56666],119:[0,.44444,.02778,0,.83148],120:[0,.44444,0,0,.65903],121:[.19444,.44444,.03704,0,.59028],122:[0,.44444,.04213,0,.55509],915:[0,.68611,.15972,0,.65694],916:[0,.68611,0,0,.95833],920:[0,.68611,.03194,0,.86722],923:[0,.68611,0,0,.80555],926:[0,.68611,.07458,0,.84125],928:[0,.68611,.08229,0,.98229],931:[0,.68611,.05451,0,.88507],933:[0,.68611,.15972,0,.67083],934:[0,.68611,0,0,.76666],936:[0,.68611,.11653,0,.71402],937:[0,.68611,.04835,0,.8789],945:[0,.44444,0,0,.76064],946:[.19444,.69444,.03403,0,.65972],947:[.19444,.44444,.06389,0,.59003],948:[0,.69444,.03819,0,.52222],949:[0,.44444,0,0,.52882],950:[.19444,.69444,.06215,0,.50833],951:[.19444,.44444,.03704,0,.6],952:[0,.69444,.03194,0,.5618],953:[0,.44444,0,0,.41204],954:[0,.44444,0,0,.66759],955:[0,.69444,0,0,.67083],956:[.19444,.44444,0,0,.70787],957:[0,.44444,.06898,0,.57685],958:[.19444,.69444,.03021,0,.50833],959:[0,.44444,0,0,.58472],960:[0,.44444,.03704,0,.68241],961:[.19444,.44444,0,0,.6118],962:[.09722,.44444,.07917,0,.42361],963:[0,.44444,.03704,0,.68588],964:[0,.44444,.13472,0,.52083],965:[0,.44444,.03704,0,.63055],966:[.19444,.44444,0,0,.74722],967:[.19444,.44444,0,0,.71805],968:[.19444,.69444,.03704,0,.75833],969:[0,.44444,.03704,0,.71782],977:[0,.69444,0,0,.69155],981:[.19444,.69444,0,0,.7125],982:[0,.44444,.03194,0,.975],1009:[.19444,.44444,0,0,.6118],1013:[0,.44444,0,0,.48333]},"Math-Italic":{65:[0,.68333,0,.13889,.75],66:[0,.68333,.05017,.08334,.75851],67:[0,.68333,.07153,.08334,.71472],68:[0,.68333,.02778,.05556,.82792],69:[0,.68333,.05764,.08334,.7382],70:[0,.68333,.13889,.08334,.64306],71:[0,.68333,0,.08334,.78625],72:[0,.68333,.08125,.05556,.83125],73:[0,.68333,.07847,.11111,.43958],74:[0,.68333,.09618,.16667,.55451],75:[0,.68333,.07153,.05556,.84931],76:[0,.68333,0,.02778,.68056],77:[0,.68333,.10903,.08334,.97014],78:[0,.68333,.10903,.08334,.80347],79:[0,.68333,.02778,.08334,.76278],80:[0,.68333,.13889,.08334,.64201],81:[.19444,.68333,0,.08334,.79056],82:[0,.68333,.00773,.08334,.75929],83:[0,.68333,.05764,.08334,.6132],84:[0,.68333,.13889,.08334,.58438],85:[0,.68333,.10903,.02778,.68278],86:[0,.68333,.22222,0,.58333],87:[0,.68333,.13889,0,.94445],88:[0,.68333,.07847,.08334,.82847],89:[0,.68333,.22222,0,.58056],90:[0,.68333,.07153,.08334,.68264],97:[0,.43056,0,0,.52859],98:[0,.69444,0,0,.42917],99:[0,.43056,0,.05556,.43276],100:[0,.69444,0,.16667,.52049],101:[0,.43056,0,.05556,.46563],102:[.19444,.69444,.10764,.16667,.48959],103:[.19444,.43056,.03588,.02778,.47697],104:[0,.69444,0,0,.57616],105:[0,.65952,0,0,.34451],106:[.19444,.65952,.05724,0,.41181],107:[0,.69444,.03148,0,.5206],108:[0,.69444,.01968,.08334,.29838],109:[0,.43056,0,0,.87801],110:[0,.43056,0,0,.60023],111:[0,.43056,0,.05556,.48472],112:[.19444,.43056,0,.08334,.50313],113:[.19444,.43056,.03588,.08334,.44641],114:[0,.43056,.02778,.05556,.45116],115:[0,.43056,0,.05556,.46875],116:[0,.61508,0,.08334,.36111],117:[0,.43056,0,.02778,.57246],118:[0,.43056,.03588,.02778,.48472],119:[0,.43056,.02691,.08334,.71592],120:[0,.43056,0,.02778,.57153],121:[.19444,.43056,.03588,.05556,.49028],122:[0,.43056,.04398,.05556,.46505],915:[0,.68333,.13889,.08334,.61528],916:[0,.68333,0,.16667,.83334],920:[0,.68333,.02778,.08334,.76278],923:[0,.68333,0,.16667,.69445],926:[0,.68333,.07569,.08334,.74236],928:[0,.68333,.08125,.05556,.83125],931:[0,.68333,.05764,.08334,.77986],933:[0,.68333,.13889,.05556,.58333],934:[0,.68333,0,.08334,.66667],936:[0,.68333,.11,.05556,.61222],937:[0,.68333,.05017,.08334,.7724],945:[0,.43056,.0037,.02778,.6397],946:[.19444,.69444,.05278,.08334,.56563],947:[.19444,.43056,.05556,0,.51773],948:[0,.69444,.03785,.05556,.44444],949:[0,.43056,0,.08334,.46632],950:[.19444,.69444,.07378,.08334,.4375],951:[.19444,.43056,.03588,.05556,.49653],952:[0,.69444,.02778,.08334,.46944],953:[0,.43056,0,.05556,.35394],954:[0,.43056,0,0,.57616],955:[0,.69444,0,0,.58334],956:[.19444,.43056,0,.02778,.60255],957:[0,.43056,.06366,.02778,.49398],958:[.19444,.69444,.04601,.11111,.4375],959:[0,.43056,0,.05556,.48472],960:[0,.43056,.03588,0,.57003],961:[.19444,.43056,0,.08334,.51702],962:[.09722,.43056,.07986,.08334,.36285],963:[0,.43056,.03588,0,.57141],964:[0,.43056,.1132,.02778,.43715],965:[0,.43056,.03588,.02778,.54028],966:[.19444,.43056,0,.08334,.65417],967:[.19444,.43056,0,.05556,.62569],968:[.19444,.69444,.03588,.11111,.65139],969:[0,.43056,.03588,0,.62245],977:[0,.69444,0,.08334,.59144],981:[.19444,.69444,0,.08334,.59583],982:[0,.43056,.02778,0,.82813],1009:[.19444,.43056,0,.08334,.51702],1013:[0,.43056,0,.05556,.4059]},"Math-Regular":{65:[0,.68333,0,.13889,.75],66:[0,.68333,.05017,.08334,.75851],67:[0,.68333,.07153,.08334,.71472],68:[0,.68333,.02778,.05556,.82792],69:[0,.68333,.05764,.08334,.7382],70:[0,.68333,.13889,.08334,.64306],71:[0,.68333,0,.08334,.78625],72:[0,.68333,.08125,.05556,.83125],73:[0,.68333,.07847,.11111,.43958],74:[0,.68333,.09618,.16667,.55451],75:[0,.68333,.07153,.05556,.84931],76:[0,.68333,0,.02778,.68056],77:[0,.68333,.10903,.08334,.97014],78:[0,.68333,.10903,.08334,.80347],79:[0,.68333,.02778,.08334,.76278],80:[0,.68333,.13889,.08334,.64201],81:[.19444,.68333,0,.08334,.79056],82:[0,.68333,.00773,.08334,.75929],83:[0,.68333,.05764,.08334,.6132],84:[0,.68333,.13889,.08334,.58438],85:[0,.68333,.10903,.02778,.68278],86:[0,.68333,.22222,0,.58333],87:[0,.68333,.13889,0,.94445],88:[0,.68333,.07847,.08334,.82847],89:[0,.68333,.22222,0,.58056],90:[0,.68333,.07153,.08334,.68264],97:[0,.43056,0,0,.52859],98:[0,.69444,0,0,.42917],99:[0,.43056,0,.05556,.43276],100:[0,.69444,0,.16667,.52049],101:[0,.43056,0,.05556,.46563],102:[.19444,.69444,.10764,.16667,.48959],103:[.19444,.43056,.03588,.02778,.47697],104:[0,.69444,0,0,.57616],105:[0,.65952,0,0,.34451],106:[.19444,.65952,.05724,0,.41181],107:[0,.69444,.03148,0,.5206],108:[0,.69444,.01968,.08334,.29838],109:[0,.43056,0,0,.87801],110:[0,.43056,0,0,.60023],111:[0,.43056,0,.05556,.48472],112:[.19444,.43056,0,.08334,.50313],113:[.19444,.43056,.03588,.08334,.44641],114:[0,.43056,.02778,.05556,.45116],115:[0,.43056,0,.05556,.46875],116:[0,.61508,0,.08334,.36111],117:[0,.43056,0,.02778,.57246],118:[0,.43056,.03588,.02778,.48472],119:[0,.43056,.02691,.08334,.71592],120:[0,.43056,0,.02778,.57153],121:[.19444,.43056,.03588,.05556,.49028],122:[0,.43056,.04398,.05556,.46505],915:[0,.68333,.13889,.08334,.61528],916:[0,.68333,0,.16667,.83334],920:[0,.68333,.02778,.08334,.76278],923:[0,.68333,0,.16667,.69445],926:[0,.68333,.07569,.08334,.74236],928:[0,.68333,.08125,.05556,.83125],931:[0,.68333,.05764,.08334,.77986],933:[0,.68333,.13889,.05556,.58333],934:[0,.68333,0,.08334,.66667],936:[0,.68333,.11,.05556,.61222],937:[0,.68333,.05017,.08334,.7724],945:[0,.43056,.0037,.02778,.6397],946:[.19444,.69444,.05278,.08334,.56563],947:[.19444,.43056,.05556,0,.51773],948:[0,.69444,.03785,.05556,.44444],949:[0,.43056,0,.08334,.46632],950:[.19444,.69444,.07378,.08334,.4375],951:[.19444,.43056,.03588,.05556,.49653],952:[0,.69444,.02778,.08334,.46944],953:[0,.43056,0,.05556,.35394],954:[0,.43056,0,0,.57616],955:[0,.69444,0,0,.58334],956:[.19444,.43056,0,.02778,.60255],957:[0,.43056,.06366,.02778,.49398],958:[.19444,.69444,.04601,.11111,.4375],959:[0,.43056,0,.05556,.48472],960:[0,.43056,.03588,0,.57003],961:[.19444,.43056,0,.08334,.51702],962:[.09722,.43056,.07986,.08334,.36285],963:[0,.43056,.03588,0,.57141],964:[0,.43056,.1132,.02778,.43715],965:[0,.43056,.03588,.02778,.54028],966:[.19444,.43056,0,.08334,.65417],967:[.19444,.43056,0,.05556,.62569],968:[.19444,.69444,.03588,.11111,.65139],969:[0,.43056,.03588,0,.62245],977:[0,.69444,0,.08334,.59144],981:[.19444,.69444,0,.08334,.59583],982:[0,.43056,.02778,0,.82813],1009:[.19444,.43056,0,.08334,.51702],1013:[0,.43056,0,.05556,.4059]},"SansSerif-Bold":{33:[0,.69444,0,0,.36667],34:[0,.69444,0,0,.55834],35:[.19444,.69444,0,0,.91667],36:[.05556,.75,0,0,.55],37:[.05556,.75,0,0,1.02912],38:[0,.69444,0,0,.83056],39:[0,.69444,0,0,.30556],40:[.25,.75,0,0,.42778],41:[.25,.75,0,0,.42778],42:[0,.75,0,0,.55],43:[.11667,.61667,0,0,.85556],44:[.10556,.13056,0,0,.30556],45:[0,.45833,0,0,.36667],46:[0,.13056,0,0,.30556],47:[.25,.75,0,0,.55],48:[0,.69444,0,0,.55],49:[0,.69444,0,0,.55],50:[0,.69444,0,0,.55],51:[0,.69444,0,0,.55],52:[0,.69444,0,0,.55],53:[0,.69444,0,0,.55],54:[0,.69444,0,0,.55],55:[0,.69444,0,0,.55],56:[0,.69444,0,0,.55],57:[0,.69444,0,0,.55],58:[0,.45833,0,0,.30556],59:[.10556,.45833,0,0,.30556],61:[-.09375,.40625,0,0,.85556],63:[0,.69444,0,0,.51945],64:[0,.69444,0,0,.73334],65:[0,.69444,0,0,.73334],66:[0,.69444,0,0,.73334],67:[0,.69444,0,0,.70278],68:[0,.69444,0,0,.79445],69:[0,.69444,0,0,.64167],70:[0,.69444,0,0,.61111],71:[0,.69444,0,0,.73334],72:[0,.69444,0,0,.79445],73:[0,.69444,0,0,.33056],74:[0,.69444,0,0,.51945],75:[0,.69444,0,0,.76389],76:[0,.69444,0,0,.58056],77:[0,.69444,0,0,.97778],78:[0,.69444,0,0,.79445],79:[0,.69444,0,0,.79445],80:[0,.69444,0,0,.70278],81:[.10556,.69444,0,0,.79445],82:[0,.69444,0,0,.70278],83:[0,.69444,0,0,.61111],84:[0,.69444,0,0,.73334],85:[0,.69444,0,0,.76389],86:[0,.69444,.01528,0,.73334],87:[0,.69444,.01528,0,1.03889],88:[0,.69444,0,0,.73334],89:[0,.69444,.0275,0,.73334],90:[0,.69444,0,0,.67223],91:[.25,.75,0,0,.34306],93:[.25,.75,0,0,.34306],94:[0,.69444,0,0,.55],95:[.35,.10833,.03056,0,.55],97:[0,.45833,0,0,.525],98:[0,.69444,0,0,.56111],99:[0,.45833,0,0,.48889],100:[0,.69444,0,0,.56111],101:[0,.45833,0,0,.51111],102:[0,.69444,.07639,0,.33611],103:[.19444,.45833,.01528,0,.55],104:[0,.69444,0,0,.56111],105:[0,.69444,0,0,.25556],106:[.19444,.69444,0,0,.28611],107:[0,.69444,0,0,.53056],108:[0,.69444,0,0,.25556],109:[0,.45833,0,0,.86667],110:[0,.45833,0,0,.56111],111:[0,.45833,0,0,.55],112:[.19444,.45833,0,0,.56111],113:[.19444,.45833,0,0,.56111],114:[0,.45833,.01528,0,.37222],115:[0,.45833,0,0,.42167],116:[0,.58929,0,0,.40417],117:[0,.45833,0,0,.56111],118:[0,.45833,.01528,0,.5],119:[0,.45833,.01528,0,.74445],120:[0,.45833,0,0,.5],121:[.19444,.45833,.01528,0,.5],122:[0,.45833,0,0,.47639],126:[.35,.34444,0,0,.55],168:[0,.69444,0,0,.55],176:[0,.69444,0,0,.73334],180:[0,.69444,0,0,.55],184:[.17014,0,0,0,.48889],305:[0,.45833,0,0,.25556],567:[.19444,.45833,0,0,.28611],710:[0,.69444,0,0,.55],711:[0,.63542,0,0,.55],713:[0,.63778,0,0,.55],728:[0,.69444,0,0,.55],729:[0,.69444,0,0,.30556],730:[0,.69444,0,0,.73334],732:[0,.69444,0,0,.55],733:[0,.69444,0,0,.55],915:[0,.69444,0,0,.58056],916:[0,.69444,0,0,.91667],920:[0,.69444,0,0,.85556],923:[0,.69444,0,0,.67223],926:[0,.69444,0,0,.73334],928:[0,.69444,0,0,.79445],931:[0,.69444,0,0,.79445],933:[0,.69444,0,0,.85556],934:[0,.69444,0,0,.79445],936:[0,.69444,0,0,.85556],937:[0,.69444,0,0,.79445],8211:[0,.45833,.03056,0,.55],8212:[0,.45833,.03056,0,1.10001],8216:[0,.69444,0,0,.30556],8217:[0,.69444,0,0,.30556],8220:[0,.69444,0,0,.55834],8221:[0,.69444,0,0,.55834]},"SansSerif-Italic":{33:[0,.69444,.05733,0,.31945],34:[0,.69444,.00316,0,.5],35:[.19444,.69444,.05087,0,.83334],36:[.05556,.75,.11156,0,.5],37:[.05556,.75,.03126,0,.83334],38:[0,.69444,.03058,0,.75834],39:[0,.69444,.07816,0,.27778],40:[.25,.75,.13164,0,.38889],41:[.25,.75,.02536,0,.38889],42:[0,.75,.11775,0,.5],43:[.08333,.58333,.02536,0,.77778],44:[.125,.08333,0,0,.27778],45:[0,.44444,.01946,0,.33333],46:[0,.08333,0,0,.27778],47:[.25,.75,.13164,0,.5],48:[0,.65556,.11156,0,.5],49:[0,.65556,.11156,0,.5],50:[0,.65556,.11156,0,.5],51:[0,.65556,.11156,0,.5],52:[0,.65556,.11156,0,.5],53:[0,.65556,.11156,0,.5],54:[0,.65556,.11156,0,.5],55:[0,.65556,.11156,0,.5],56:[0,.65556,.11156,0,.5],57:[0,.65556,.11156,0,.5],58:[0,.44444,.02502,0,.27778],59:[.125,.44444,.02502,0,.27778],61:[-.13,.37,.05087,0,.77778],63:[0,.69444,.11809,0,.47222],64:[0,.69444,.07555,0,.66667],65:[0,.69444,0,0,.66667],66:[0,.69444,.08293,0,.66667],67:[0,.69444,.11983,0,.63889],68:[0,.69444,.07555,0,.72223],69:[0,.69444,.11983,0,.59722],70:[0,.69444,.13372,0,.56945],71:[0,.69444,.11983,0,.66667],72:[0,.69444,.08094,0,.70834],73:[0,.69444,.13372,0,.27778],74:[0,.69444,.08094,0,.47222],75:[0,.69444,.11983,0,.69445],76:[0,.69444,0,0,.54167],77:[0,.69444,.08094,0,.875],78:[0,.69444,.08094,0,.70834],79:[0,.69444,.07555,0,.73611],80:[0,.69444,.08293,0,.63889],81:[.125,.69444,.07555,0,.73611],82:[0,.69444,.08293,0,.64584],83:[0,.69444,.09205,0,.55556],84:[0,.69444,.13372,0,.68056],85:[0,.69444,.08094,0,.6875],86:[0,.69444,.1615,0,.66667],87:[0,.69444,.1615,0,.94445],88:[0,.69444,.13372,0,.66667],89:[0,.69444,.17261,0,.66667],90:[0,.69444,.11983,0,.61111],91:[.25,.75,.15942,0,.28889],93:[.25,.75,.08719,0,.28889],94:[0,.69444,.0799,0,.5],95:[.35,.09444,.08616,0,.5],97:[0,.44444,.00981,0,.48056],98:[0,.69444,.03057,0,.51667],99:[0,.44444,.08336,0,.44445],100:[0,.69444,.09483,0,.51667],101:[0,.44444,.06778,0,.44445],102:[0,.69444,.21705,0,.30556],103:[.19444,.44444,.10836,0,.5],104:[0,.69444,.01778,0,.51667],105:[0,.67937,.09718,0,.23889],106:[.19444,.67937,.09162,0,.26667],107:[0,.69444,.08336,0,.48889],108:[0,.69444,.09483,0,.23889],109:[0,.44444,.01778,0,.79445],110:[0,.44444,.01778,0,.51667],111:[0,.44444,.06613,0,.5],112:[.19444,.44444,.0389,0,.51667],113:[.19444,.44444,.04169,0,.51667],114:[0,.44444,.10836,0,.34167],115:[0,.44444,.0778,0,.38333],116:[0,.57143,.07225,0,.36111],117:[0,.44444,.04169,0,.51667],118:[0,.44444,.10836,0,.46111],119:[0,.44444,.10836,0,.68334],120:[0,.44444,.09169,0,.46111],121:[.19444,.44444,.10836,0,.46111],122:[0,.44444,.08752,0,.43472],126:[.35,.32659,.08826,0,.5],168:[0,.67937,.06385,0,.5],176:[0,.69444,0,0,.73752],184:[.17014,0,0,0,.44445],305:[0,.44444,.04169,0,.23889],567:[.19444,.44444,.04169,0,.26667],710:[0,.69444,.0799,0,.5],711:[0,.63194,.08432,0,.5],713:[0,.60889,.08776,0,.5],714:[0,.69444,.09205,0,.5],715:[0,.69444,0,0,.5],728:[0,.69444,.09483,0,.5],729:[0,.67937,.07774,0,.27778],730:[0,.69444,0,0,.73752],732:[0,.67659,.08826,0,.5],733:[0,.69444,.09205,0,.5],915:[0,.69444,.13372,0,.54167],916:[0,.69444,0,0,.83334],920:[0,.69444,.07555,0,.77778],923:[0,.69444,0,0,.61111],926:[0,.69444,.12816,0,.66667],928:[0,.69444,.08094,0,.70834],931:[0,.69444,.11983,0,.72222],933:[0,.69444,.09031,0,.77778],934:[0,.69444,.04603,0,.72222],936:[0,.69444,.09031,0,.77778],937:[0,.69444,.08293,0,.72222],8211:[0,.44444,.08616,0,.5],8212:[0,.44444,.08616,0,1],8216:[0,.69444,.07816,0,.27778],8217:[0,.69444,.07816,0,.27778],8220:[0,.69444,.14205,0,.5],8221:[0,.69444,.00316,0,.5]},"SansSerif-Regular":{33:[0,.69444,0,0,.31945],34:[0,.69444,0,0,.5],35:[.19444,.69444,0,0,.83334],36:[.05556,.75,0,0,.5],37:[.05556,.75,0,0,.83334],38:[0,.69444,0,0,.75834],39:[0,.69444,0,0,.27778],40:[.25,.75,0,0,.38889],41:[.25,.75,0,0,.38889],42:[0,.75,0,0,.5],43:[.08333,.58333,0,0,.77778],44:[.125,.08333,0,0,.27778],45:[0,.44444,0,0,.33333],46:[0,.08333,0,0,.27778],47:[.25,.75,0,0,.5],48:[0,.65556,0,0,.5],49:[0,.65556,0,0,.5],50:[0,.65556,0,0,.5],51:[0,.65556,0,0,.5],52:[0,.65556,0,0,.5],53:[0,.65556,0,0,.5],54:[0,.65556,0,0,.5],55:[0,.65556,0,0,.5],56:[0,.65556,0,0,.5],57:[0,.65556,0,0,.5],58:[0,.44444,0,0,.27778],59:[.125,.44444,0,0,.27778],61:[-.13,.37,0,0,.77778],63:[0,.69444,0,0,.47222],64:[0,.69444,0,0,.66667],65:[0,.69444,0,0,.66667],66:[0,.69444,0,0,.66667],67:[0,.69444,0,0,.63889],68:[0,.69444,0,0,.72223],69:[0,.69444,0,0,.59722],70:[0,.69444,0,0,.56945],71:[0,.69444,0,0,.66667],72:[0,.69444,0,0,.70834],73:[0,.69444,0,0,.27778],74:[0,.69444,0,0,.47222],75:[0,.69444,0,0,.69445],76:[0,.69444,0,0,.54167],77:[0,.69444,0,0,.875],78:[0,.69444,0,0,.70834],79:[0,.69444,0,0,.73611],80:[0,.69444,0,0,.63889],81:[.125,.69444,0,0,.73611],82:[0,.69444,0,0,.64584],83:[0,.69444,0,0,.55556],84:[0,.69444,0,0,.68056],85:[0,.69444,0,0,.6875],86:[0,.69444,.01389,0,.66667],87:[0,.69444,.01389,0,.94445],88:[0,.69444,0,0,.66667],89:[0,.69444,.025,0,.66667],90:[0,.69444,0,0,.61111],91:[.25,.75,0,0,.28889],93:[.25,.75,0,0,.28889],94:[0,.69444,0,0,.5],95:[.35,.09444,.02778,0,.5],97:[0,.44444,0,0,.48056],98:[0,.69444,0,0,.51667],99:[0,.44444,0,0,.44445],100:[0,.69444,0,0,.51667],101:[0,.44444,0,0,.44445],102:[0,.69444,.06944,0,.30556],103:[.19444,.44444,.01389,0,.5],104:[0,.69444,0,0,.51667],105:[0,.67937,0,0,.23889],106:[.19444,.67937,0,0,.26667],107:[0,.69444,0,0,.48889],108:[0,.69444,0,0,.23889],109:[0,.44444,0,0,.79445],110:[0,.44444,0,0,.51667],111:[0,.44444,0,0,.5],112:[.19444,.44444,0,0,.51667],113:[.19444,.44444,0,0,.51667],114:[0,.44444,.01389,0,.34167],115:[0,.44444,0,0,.38333],116:[0,.57143,0,0,.36111],117:[0,.44444,0,0,.51667],118:[0,.44444,.01389,0,.46111],119:[0,.44444,.01389,0,.68334],120:[0,.44444,0,0,.46111],121:[.19444,.44444,.01389,0,.46111],122:[0,.44444,0,0,.43472],126:[.35,.32659,0,0,.5],168:[0,.67937,0,0,.5],176:[0,.69444,0,0,.66667],184:[.17014,0,0,0,.44445],305:[0,.44444,0,0,.23889],567:[.19444,.44444,0,0,.26667],710:[0,.69444,0,0,.5],711:[0,.63194,0,0,.5],713:[0,.60889,0,0,.5],714:[0,.69444,0,0,.5],715:[0,.69444,0,0,.5],728:[0,.69444,0,0,.5],729:[0,.67937,0,0,.27778],730:[0,.69444,0,0,.66667],732:[0,.67659,0,0,.5],733:[0,.69444,0,0,.5],915:[0,.69444,0,0,.54167],916:[0,.69444,0,0,.83334],920:[0,.69444,0,0,.77778],923:[0,.69444,0,0,.61111],926:[0,.69444,0,0,.66667],928:[0,.69444,0,0,.70834],931:[0,.69444,0,0,.72222],933:[0,.69444,0,0,.77778],934:[0,.69444,0,0,.72222],936:[0,.69444,0,0,.77778],937:[0,.69444,0,0,.72222],8211:[0,.44444,.02778,0,.5],8212:[0,.44444,.02778,0,1],8216:[0,.69444,0,0,.27778],8217:[0,.69444,0,0,.27778],8220:[0,.69444,0,0,.5],8221:[0,.69444,0,0,.5]},"Script-Regular":{65:[0,.7,.22925,0,.80253],66:[0,.7,.04087,0,.90757],67:[0,.7,.1689,0,.66619],68:[0,.7,.09371,0,.77443],69:[0,.7,.18583,0,.56162],70:[0,.7,.13634,0,.89544],71:[0,.7,.17322,0,.60961],72:[0,.7,.29694,0,.96919],73:[0,.7,.19189,0,.80907],74:[.27778,.7,.19189,0,1.05159],75:[0,.7,.31259,0,.91364],76:[0,.7,.19189,0,.87373],77:[0,.7,.15981,0,1.08031],78:[0,.7,.3525,0,.9015],79:[0,.7,.08078,0,.73787],80:[0,.7,.08078,0,1.01262],81:[0,.7,.03305,0,.88282],82:[0,.7,.06259,0,.85],83:[0,.7,.19189,0,.86767],84:[0,.7,.29087,0,.74697],85:[0,.7,.25815,0,.79996],86:[0,.7,.27523,0,.62204],87:[0,.7,.27523,0,.80532],88:[0,.7,.26006,0,.94445],89:[0,.7,.2939,0,.70961],90:[0,.7,.24037,0,.8212]},"Size1-Regular":{40:[.35001,.85,0,0,.45834],41:[.35001,.85,0,0,.45834],47:[.35001,.85,0,0,.57778],91:[.35001,.85,0,0,.41667],92:[.35001,.85,0,0,.57778],93:[.35001,.85,0,0,.41667],123:[.35001,.85,0,0,.58334],125:[.35001,.85,0,0,.58334],710:[0,.72222,0,0,.55556],732:[0,.72222,0,0,.55556],770:[0,.72222,0,0,.55556],771:[0,.72222,0,0,.55556],8214:[-99e-5,.601,0,0,.77778],8593:[1e-5,.6,0,0,.66667],8595:[1e-5,.6,0,0,.66667],8657:[1e-5,.6,0,0,.77778],8659:[1e-5,.6,0,0,.77778],8719:[.25001,.75,0,0,.94445],8720:[.25001,.75,0,0,.94445],8721:[.25001,.75,0,0,1.05556],8730:[.35001,.85,0,0,1],8739:[-.00599,.606,0,0,.33333],8741:[-.00599,.606,0,0,.55556],8747:[.30612,.805,.19445,0,.47222],8748:[.306,.805,.19445,0,.47222],8749:[.306,.805,.19445,0,.47222],8750:[.30612,.805,.19445,0,.47222],8896:[.25001,.75,0,0,.83334],8897:[.25001,.75,0,0,.83334],8898:[.25001,.75,0,0,.83334],8899:[.25001,.75,0,0,.83334],8968:[.35001,.85,0,0,.47222],8969:[.35001,.85,0,0,.47222],8970:[.35001,.85,0,0,.47222],8971:[.35001,.85,0,0,.47222],9168:[-99e-5,.601,0,0,.66667],10216:[.35001,.85,0,0,.47222],10217:[.35001,.85,0,0,.47222],10752:[.25001,.75,0,0,1.11111],10753:[.25001,.75,0,0,1.11111],10754:[.25001,.75,0,0,1.11111],10756:[.25001,.75,0,0,.83334],10758:[.25001,.75,0,0,.83334]},"Size2-Regular":{40:[.65002,1.15,0,0,.59722],41:[.65002,1.15,0,0,.59722],47:[.65002,1.15,0,0,.81111],91:[.65002,1.15,0,0,.47222],92:[.65002,1.15,0,0,.81111],93:[.65002,1.15,0,0,.47222],123:[.65002,1.15,0,0,.66667],125:[.65002,1.15,0,0,.66667],710:[0,.75,0,0,1],732:[0,.75,0,0,1],770:[0,.75,0,0,1],771:[0,.75,0,0,1],8719:[.55001,1.05,0,0,1.27778],8720:[.55001,1.05,0,0,1.27778],8721:[.55001,1.05,0,0,1.44445],8730:[.65002,1.15,0,0,1],8747:[.86225,1.36,.44445,0,.55556],8748:[.862,1.36,.44445,0,.55556],8749:[.862,1.36,.44445,0,.55556],8750:[.86225,1.36,.44445,0,.55556],8896:[.55001,1.05,0,0,1.11111],8897:[.55001,1.05,0,0,1.11111],8898:[.55001,1.05,0,0,1.11111],8899:[.55001,1.05,0,0,1.11111],8968:[.65002,1.15,0,0,.52778],8969:[.65002,1.15,0,0,.52778],8970:[.65002,1.15,0,0,.52778],8971:[.65002,1.15,0,0,.52778],10216:[.65002,1.15,0,0,.61111],10217:[.65002,1.15,0,0,.61111],10752:[.55001,1.05,0,0,1.51112],10753:[.55001,1.05,0,0,1.51112],10754:[.55001,1.05,0,0,1.51112],10756:[.55001,1.05,0,0,1.11111],10758:[.55001,1.05,0,0,1.11111]},"Size3-Regular":{40:[.95003,1.45,0,0,.73611],41:[.95003,1.45,0,0,.73611],47:[.95003,1.45,0,0,1.04445],91:[.95003,1.45,0,0,.52778],92:[.95003,1.45,0,0,1.04445],93:[.95003,1.45,0,0,.52778],123:[.95003,1.45,0,0,.75],125:[.95003,1.45,0,0,.75],710:[0,.75,0,0,1.44445],732:[0,.75,0,0,1.44445],770:[0,.75,0,0,1.44445],771:[0,.75,0,0,1.44445],8730:[.95003,1.45,0,0,1],8968:[.95003,1.45,0,0,.58334],8969:[.95003,1.45,0,0,.58334],8970:[.95003,1.45,0,0,.58334],8971:[.95003,1.45,0,0,.58334],10216:[.95003,1.45,0,0,.75],10217:[.95003,1.45,0,0,.75]},"Size4-Regular":{40:[1.25003,1.75,0,0,.79167],41:[1.25003,1.75,0,0,.79167],47:[1.25003,1.75,0,0,1.27778],91:[1.25003,1.75,0,0,.58334],92:[1.25003,1.75,0,0,1.27778],93:[1.25003,1.75,0,0,.58334],123:[1.25003,1.75,0,0,.80556],125:[1.25003,1.75,0,0,.80556],710:[0,.825,0,0,1.8889],732:[0,.825,0,0,1.8889],770:[0,.825,0,0,1.8889],771:[0,.825,0,0,1.8889],8730:[1.25003,1.75,0,0,1],8968:[1.25003,1.75,0,0,.63889],8969:[1.25003,1.75,0,0,.63889],8970:[1.25003,1.75,0,0,.63889],8971:[1.25003,1.75,0,0,.63889],9115:[.64502,1.155,0,0,.875],9116:[1e-5,.6,0,0,.875],9117:[.64502,1.155,0,0,.875],9118:[.64502,1.155,0,0,.875],9119:[1e-5,.6,0,0,.875],9120:[.64502,1.155,0,0,.875],9121:[.64502,1.155,0,0,.66667],9122:[-99e-5,.601,0,0,.66667],9123:[.64502,1.155,0,0,.66667],9124:[.64502,1.155,0,0,.66667],9125:[-99e-5,.601,0,0,.66667],9126:[.64502,1.155,0,0,.66667],9127:[1e-5,.9,0,0,.88889],9128:[.65002,1.15,0,0,.88889],9129:[.90001,0,0,0,.88889],9130:[0,.3,0,0,.88889],9131:[1e-5,.9,0,0,.88889],9132:[.65002,1.15,0,0,.88889],9133:[.90001,0,0,0,.88889],9143:[.88502,.915,0,0,1.05556],10216:[1.25003,1.75,0,0,.80556],10217:[1.25003,1.75,0,0,.80556],57344:[-.00499,.605,0,0,1.05556],57345:[-.00499,.605,0,0,1.05556],57680:[0,.12,0,0,.45],57681:[0,.12,0,0,.45],57682:[0,.12,0,0,.45],57683:[0,.12,0,0,.45]},"Typewriter-Regular":{32:[0,0,0,0,.525],33:[0,.61111,0,0,.525],34:[0,.61111,0,0,.525],35:[0,.61111,0,0,.525],36:[.08333,.69444,0,0,.525],37:[.08333,.69444,0,0,.525],38:[0,.61111,0,0,.525],39:[0,.61111,0,0,.525],40:[.08333,.69444,0,0,.525],41:[.08333,.69444,0,0,.525],42:[0,.52083,0,0,.525],43:[-.08056,.53055,0,0,.525],44:[.13889,.125,0,0,.525],45:[-.08056,.53055,0,0,.525],46:[0,.125,0,0,.525],47:[.08333,.69444,0,0,.525],48:[0,.61111,0,0,.525],49:[0,.61111,0,0,.525],50:[0,.61111,0,0,.525],51:[0,.61111,0,0,.525],52:[0,.61111,0,0,.525],53:[0,.61111,0,0,.525],54:[0,.61111,0,0,.525],55:[0,.61111,0,0,.525],56:[0,.61111,0,0,.525],57:[0,.61111,0,0,.525],58:[0,.43056,0,0,.525],59:[.13889,.43056,0,0,.525],60:[-.05556,.55556,0,0,.525],61:[-.19549,.41562,0,0,.525],62:[-.05556,.55556,0,0,.525],63:[0,.61111,0,0,.525],64:[0,.61111,0,0,.525],65:[0,.61111,0,0,.525],66:[0,.61111,0,0,.525],67:[0,.61111,0,0,.525],68:[0,.61111,0,0,.525],69:[0,.61111,0,0,.525],70:[0,.61111,0,0,.525],71:[0,.61111,0,0,.525],72:[0,.61111,0,0,.525],73:[0,.61111,0,0,.525],74:[0,.61111,0,0,.525],75:[0,.61111,0,0,.525],76:[0,.61111,0,0,.525],77:[0,.61111,0,0,.525],78:[0,.61111,0,0,.525],79:[0,.61111,0,0,.525],80:[0,.61111,0,0,.525],81:[.13889,.61111,0,0,.525],82:[0,.61111,0,0,.525],83:[0,.61111,0,0,.525],84:[0,.61111,0,0,.525],85:[0,.61111,0,0,.525],86:[0,.61111,0,0,.525],87:[0,.61111,0,0,.525],88:[0,.61111,0,0,.525],89:[0,.61111,0,0,.525],90:[0,.61111,0,0,.525],91:[.08333,.69444,0,0,.525],92:[.08333,.69444,0,0,.525],93:[.08333,.69444,0,0,.525],94:[0,.61111,0,0,.525],95:[.09514,0,0,0,.525],96:[0,.61111,0,0,.525],97:[0,.43056,0,0,.525],98:[0,.61111,0,0,.525],99:[0,.43056,0,0,.525],100:[0,.61111,0,0,.525],101:[0,.43056,0,0,.525],102:[0,.61111,0,0,.525],103:[.22222,.43056,0,0,.525],104:[0,.61111,0,0,.525],105:[0,.61111,0,0,.525],106:[.22222,.61111,0,0,.525],107:[0,.61111,0,0,.525],108:[0,.61111,0,0,.525],109:[0,.43056,0,0,.525],110:[0,.43056,0,0,.525],111:[0,.43056,0,0,.525],112:[.22222,.43056,0,0,.525],113:[.22222,.43056,0,0,.525],114:[0,.43056,0,0,.525],115:[0,.43056,0,0,.525],116:[0,.55358,0,0,.525],117:[0,.43056,0,0,.525],118:[0,.43056,0,0,.525],119:[0,.43056,0,0,.525],120:[0,.43056,0,0,.525],121:[.22222,.43056,0,0,.525],122:[0,.43056,0,0,.525],123:[.08333,.69444,0,0,.525],124:[.08333,.69444,0,0,.525],125:[.08333,.69444,0,0,.525],126:[0,.61111,0,0,.525],127:[0,.61111,0,0,.525],160:[0,0,0,0,.525],176:[0,.61111,0,0,.525],184:[.19445,0,0,0,.525],305:[0,.43056,0,0,.525],567:[.22222,.43056,0,0,.525],711:[0,.56597,0,0,.525],713:[0,.56555,0,0,.525],714:[0,.61111,0,0,.525],715:[0,.61111,0,0,.525],728:[0,.61111,0,0,.525],730:[0,.61111,0,0,.525],770:[0,.61111,0,0,.525],771:[0,.61111,0,0,.525],776:[0,.61111,0,0,.525],915:[0,.61111,0,0,.525],916:[0,.61111,0,0,.525],920:[0,.61111,0,0,.525],923:[0,.61111,0,0,.525],926:[0,.61111,0,0,.525],928:[0,.61111,0,0,.525],931:[0,.61111,0,0,.525],933:[0,.61111,0,0,.525],934:[0,.61111,0,0,.525],936:[0,.61111,0,0,.525],937:[0,.61111,0,0,.525],8216:[0,.61111,0,0,.525],8217:[0,.61111,0,0,.525],8242:[0,.61111,0,0,.525],9251:[.11111,.21944,0,0,.525]}},V={slant:[.25,.25,.25],space:[0,0,0],stretch:[0,0,0],shrink:[0,0,0],xHeight:[.431,.431,.431],quad:[1,1.171,1.472],extraSpace:[0,0,0],num1:[.677,.732,.925],num2:[.394,.384,.387],num3:[.444,.471,.504],denom1:[.686,.752,1.025],denom2:[.345,.344,.532],sup1:[.413,.503,.504],sup2:[.363,.431,.404],sup3:[.289,.286,.294],sub1:[.15,.143,.2],sub2:[.247,.286,.4],supDrop:[.386,.353,.494],subDrop:[.05,.071,.1],delim1:[2.39,1.7,1.98],delim2:[1.01,1.157,1.42],axisHeight:[.25,.25,.25],defaultRuleThickness:[.04,.049,.049],bigOpSpacing1:[.111,.111,.111],bigOpSpacing2:[.166,.166,.166],bigOpSpacing3:[.2,.2,.2],bigOpSpacing4:[.6,.611,.611],bigOpSpacing5:[.1,.143,.143],sqrtRuleThickness:[.04,.04,.04],ptPerEm:[10,10,10],doubleRuleSep:[.2,.2,.2],arrayRuleWidth:[.04,.04,.04],fboxsep:[.3,.3,.3],fboxrule:[.04,.04,.04]},U={"\xc5":"A","\xc7":"C","\xd0":"D","\xde":"o","\xe5":"a","\xe7":"c","\xf0":"d","\xfe":"o","\u0410":"A","\u0411":"B","\u0412":"B","\u0413":"F","\u0414":"A","\u0415":"E","\u0416":"K","\u0417":"3","\u0418":"N","\u0419":"N","\u041a":"K","\u041b":"N","\u041c":"M","\u041d":"H","\u041e":"O","\u041f":"N","\u0420":"P","\u0421":"C","\u0422":"T","\u0423":"y","\u0424":"O","\u0425":"X","\u0426":"U","\u0427":"h","\u0428":"W","\u0429":"W","\u042a":"B","\u042b":"X","\u042c":"B","\u042d":"3","\u042e":"X","\u042f":"R","\u0430":"a","\u0431":"b","\u0432":"a","\u0433":"r","\u0434":"y","\u0435":"e","\u0436":"m","\u0437":"e","\u0438":"n","\u0439":"n","\u043a":"n","\u043b":"n","\u043c":"m","\u043d":"n","\u043e":"o","\u043f":"n","\u0440":"p","\u0441":"c","\u0442":"o","\u0443":"y","\u0444":"b","\u0445":"x","\u0446":"n","\u0447":"n","\u0448":"w","\u0449":"w","\u044a":"a","\u044b":"m","\u044c":"a","\u044d":"e","\u044e":"m","\u044f":"r"};function G(t,e,r){if(!F[e])throw new Error("Font metrics not found for font: "+e+".");var a=t.charCodeAt(0),n=F[e][a];if(!n&&t[0]in U&&(a=U[t[0]].charCodeAt(0),n=F[e][a]),n||"text"!==r||M(a)&&(n=F[e][77]),n)return{depth:n[0],height:n[1],italic:n[2],skew:n[3],width:n[4]}}var Y={};var W={bin:1,close:1,inner:1,open:1,punct:1,rel:1},X={"accent-token":1,mathord:1,"op-token":1,spacing:1,textord:1},_={math:{},text:{}},j=_;function $(t,e,r,a,n,i){_[t][n]={font:e,group:r,replace:a},i&&a&&(_[t][a]=_[t][n])}var Z="main",K="ams",J="bin",Q="mathord",tt="op-token",et="rel";$("math",Z,et,"\u2261","\\equiv",!0),$("math",Z,et,"\u227a","\\prec",!0),$("math",Z,et,"\u227b","\\succ",!0),$("math",Z,et,"\u223c","\\sim",!0),$("math",Z,et,"\u22a5","\\perp"),$("math",Z,et,"\u2aaf","\\preceq",!0),$("math",Z,et,"\u2ab0","\\succeq",!0),$("math",Z,et,"\u2243","\\simeq",!0),$("math",Z,et,"\u2223","\\mid",!0),$("math",Z,et,"\u226a","\\ll",!0),$("math",Z,et,"\u226b","\\gg",!0),$("math",Z,et,"\u224d","\\asymp",!0),$("math",Z,et,"\u2225","\\parallel"),$("math",Z,et,"\u22c8","\\bowtie",!0),$("math",Z,et,"\u2323","\\smile",!0),$("math",Z,et,"\u2291","\\sqsubseteq",!0),$("math",Z,et,"\u2292","\\sqsupseteq",!0),$("math",Z,et,"\u2250","\\doteq",!0),$("math",Z,et,"\u2322","\\frown",!0),$("math",Z,et,"\u220b","\\ni",!0),$("math",Z,et,"\u221d","\\propto",!0),$("math",Z,et,"\u22a2","\\vdash",!0),$("math",Z,et,"\u22a3","\\dashv",!0),$("math",Z,et,"\u220b","\\owns"),$("math",Z,"punct",".","\\ldotp"),$("math",Z,"punct","\u22c5","\\cdotp"),$("math",Z,"textord","#","\\#"),$("text",Z,"textord","#","\\#"),$("math",Z,"textord","&","\\&"),$("text",Z,"textord","&","\\&"),$("math",Z,"textord","\u2135","\\aleph",!0),$("math",Z,"textord","\u2200","\\forall",!0),$("math",Z,"textord","\u210f","\\hbar",!0),$("math",Z,"textord","\u2203","\\exists",!0),$("math",Z,"textord","\u2207","\\nabla",!0),$("math",Z,"textord","\u266d","\\flat",!0),$("math",Z,"textord","\u2113","\\ell",!0),$("math",Z,"textord","\u266e","\\natural",!0),$("math",Z,"textord","\u2663","\\clubsuit",!0),$("math",Z,"textord","\u2118","\\wp",!0),$("math",Z,"textord","\u266f","\\sharp",!0),$("math",Z,"textord","\u2662","\\diamondsuit",!0),$("math",Z,"textord","\u211c","\\Re",!0),$("math",Z,"textord","\u2661","\\heartsuit",!0),$("math",Z,"textord","\u2111","\\Im",!0),$("math",Z,"textord","\u2660","\\spadesuit",!0),$("text",Z,"textord","\xa7","\\S",!0),$("text",Z,"textord","\xb6","\\P",!0),$("math",Z,"textord","\u2020","\\dag"),$("text",Z,"textord","\u2020","\\dag"),$("text",Z,"textord","\u2020","\\textdagger"),$("math",Z,"textord","\u2021","\\ddag"),$("text",Z,"textord","\u2021","\\ddag"),$("text",Z,"textord","\u2021","\\textdaggerdbl"),$("math",Z,"close","\u23b1","\\rmoustache",!0),$("math",Z,"open","\u23b0","\\lmoustache",!0),$("math",Z,"close","\u27ef","\\rgroup",!0),$("math",Z,"open","\u27ee","\\lgroup",!0),$("math",Z,J,"\u2213","\\mp",!0),$("math",Z,J,"\u2296","\\ominus",!0),$("math",Z,J,"\u228e","\\uplus",!0),$("math",Z,J,"\u2293","\\sqcap",!0),$("math",Z,J,"\u2217","\\ast"),$("math",Z,J,"\u2294","\\sqcup",!0),$("math",Z,J,"\u25ef","\\bigcirc"),$("math",Z,J,"\u2219","\\bullet"),$("math",Z,J,"\u2021","\\ddagger"),$("math",Z,J,"\u2240","\\wr",!0),$("math",Z,J,"\u2a3f","\\amalg"),$("math",Z,J,"&","\\And"),$("math",Z,et,"\u27f5","\\longleftarrow",!0),$("math",Z,et,"\u21d0","\\Leftarrow",!0),$("math",Z,et,"\u27f8","\\Longleftarrow",!0),$("math",Z,et,"\u27f6","\\longrightarrow",!0),$("math",Z,et,"\u21d2","\\Rightarrow",!0),$("math",Z,et,"\u27f9","\\Longrightarrow",!0),$("math",Z,et,"\u2194","\\leftrightarrow",!0),$("math",Z,et,"\u27f7","\\longleftrightarrow",!0),$("math",Z,et,"\u21d4","\\Leftrightarrow",!0),$("math",Z,et,"\u27fa","\\Longleftrightarrow",!0),$("math",Z,et,"\u21a6","\\mapsto",!0),$("math",Z,et,"\u27fc","\\longmapsto",!0),$("math",Z,et,"\u2197","\\nearrow",!0),$("math",Z,et,"\u21a9","\\hookleftarrow",!0),$("math",Z,et,"\u21aa","\\hookrightarrow",!0),$("math",Z,et,"\u2198","\\searrow",!0),$("math",Z,et,"\u21bc","\\leftharpoonup",!0),$("math",Z,et,"\u21c0","\\rightharpoonup",!0),$("math",Z,et,"\u2199","\\swarrow",!0),$("math",Z,et,"\u21bd","\\leftharpoondown",!0),$("math",Z,et,"\u21c1","\\rightharpoondown",!0),$("math",Z,et,"\u2196","\\nwarrow",!0),$("math",Z,et,"\u21cc","\\rightleftharpoons",!0),$("math",K,et,"\u226e","\\nless",!0),$("math",K,et,"\ue010","\\@nleqslant"),$("math",K,et,"\ue011","\\@nleqq"),$("math",K,et,"\u2a87","\\lneq",!0),$("math",K,et,"\u2268","\\lneqq",!0),$("math",K,et,"\ue00c","\\@lvertneqq"),$("math",K,et,"\u22e6","\\lnsim",!0),$("math",K,et,"\u2a89","\\lnapprox",!0),$("math",K,et,"\u2280","\\nprec",!0),$("math",K,et,"\u22e0","\\npreceq",!0),$("math",K,et,"\u22e8","\\precnsim",!0),$("math",K,et,"\u2ab9","\\precnapprox",!0),$("math",K,et,"\u2241","\\nsim",!0),$("math",K,et,"\ue006","\\@nshortmid"),$("math",K,et,"\u2224","\\nmid",!0),$("math",K,et,"\u22ac","\\nvdash",!0),$("math",K,et,"\u22ad","\\nvDash",!0),$("math",K,et,"\u22ea","\\ntriangleleft"),$("math",K,et,"\u22ec","\\ntrianglelefteq",!0),$("math",K,et,"\u228a","\\subsetneq",!0),$("math",K,et,"\ue01a","\\@varsubsetneq"),$("math",K,et,"\u2acb","\\subsetneqq",!0),$("math",K,et,"\ue017","\\@varsubsetneqq"),$("math",K,et,"\u226f","\\ngtr",!0),$("math",K,et,"\ue00f","\\@ngeqslant"),$("math",K,et,"\ue00e","\\@ngeqq"),$("math",K,et,"\u2a88","\\gneq",!0),$("math",K,et,"\u2269","\\gneqq",!0),$("math",K,et,"\ue00d","\\@gvertneqq"),$("math",K,et,"\u22e7","\\gnsim",!0),$("math",K,et,"\u2a8a","\\gnapprox",!0),$("math",K,et,"\u2281","\\nsucc",!0),$("math",K,et,"\u22e1","\\nsucceq",!0),$("math",K,et,"\u22e9","\\succnsim",!0),$("math",K,et,"\u2aba","\\succnapprox",!0),$("math",K,et,"\u2246","\\ncong",!0),$("math",K,et,"\ue007","\\@nshortparallel"),$("math",K,et,"\u2226","\\nparallel",!0),$("math",K,et,"\u22af","\\nVDash",!0),$("math",K,et,"\u22eb","\\ntriangleright"),$("math",K,et,"\u22ed","\\ntrianglerighteq",!0),$("math",K,et,"\ue018","\\@nsupseteqq"),$("math",K,et,"\u228b","\\supsetneq",!0),$("math",K,et,"\ue01b","\\@varsupsetneq"),$("math",K,et,"\u2acc","\\supsetneqq",!0),$("math",K,et,"\ue019","\\@varsupsetneqq"),$("math",K,et,"\u22ae","\\nVdash",!0),$("math",K,et,"\u2ab5","\\precneqq",!0),$("math",K,et,"\u2ab6","\\succneqq",!0),$("math",K,et,"\ue016","\\@nsubseteqq"),$("math",K,J,"\u22b4","\\unlhd"),$("math",K,J,"\u22b5","\\unrhd"),$("math",K,et,"\u219a","\\nleftarrow",!0),$("math",K,et,"\u219b","\\nrightarrow",!0),$("math",K,et,"\u21cd","\\nLeftarrow",!0),$("math",K,et,"\u21cf","\\nRightarrow",!0),$("math",K,et,"\u21ae","\\nleftrightarrow",!0),$("math",K,et,"\u21ce","\\nLeftrightarrow",!0),$("math",K,et,"\u25b3","\\vartriangle"),$("math",K,"textord","\u210f","\\hslash"),$("math",K,"textord","\u25bd","\\triangledown"),$("math",K,"textord","\u25ca","\\lozenge"),$("math",K,"textord","\u24c8","\\circledS"),$("math",K,"textord","\xae","\\circledR"),$("text",K,"textord","\xae","\\circledR"),$("math",K,"textord","\u2221","\\measuredangle",!0),$("math",K,"textord","\u2204","\\nexists"),$("math",K,"textord","\u2127","\\mho"),$("math",K,"textord","\u2132","\\Finv",!0),$("math",K,"textord","\u2141","\\Game",!0),$("math",K,"textord","\u2035","\\backprime"),$("math",K,"textord","\u25b2","\\blacktriangle"),$("math",K,"textord","\u25bc","\\blacktriangledown"),$("math",K,"textord","\u25a0","\\blacksquare"),$("math",K,"textord","\u29eb","\\blacklozenge"),$("math",K,"textord","\u2605","\\bigstar"),$("math",K,"textord","\u2222","\\sphericalangle",!0),$("math",K,"textord","\u2201","\\complement",!0),$("math",K,"textord","\xf0","\\eth",!0),$("math",K,"textord","\u2571","\\diagup"),$("math",K,"textord","\u2572","\\diagdown"),$("math",K,"textord","\u25a1","\\square"),$("math",K,"textord","\u25a1","\\Box"),$("math",K,"textord","\u25ca","\\Diamond"),$("math",K,"textord","\xa5","\\yen",!0),$("text",K,"textord","\xa5","\\yen",!0),$("math",K,"textord","\u2713","\\checkmark",!0),$("text",K,"textord","\u2713","\\checkmark"),$("math",K,"textord","\u2136","\\beth",!0),$("math",K,"textord","\u2138","\\daleth",!0),$("math",K,"textord","\u2137","\\gimel",!0),$("math",K,"textord","\u03dd","\\digamma",!0),$("math",K,"textord","\u03f0","\\varkappa"),$("math",K,"open","\u250c","\\ulcorner",!0),$("math",K,"close","\u2510","\\urcorner",!0),$("math",K,"open","\u2514","\\llcorner",!0),$("math",K,"close","\u2518","\\lrcorner",!0),$("math",K,et,"\u2266","\\leqq",!0),$("math",K,et,"\u2a7d","\\leqslant",!0),$("math",K,et,"\u2a95","\\eqslantless",!0),$("math",K,et,"\u2272","\\lesssim",!0),$("math",K,et,"\u2a85","\\lessapprox",!0),$("math",K,et,"\u224a","\\approxeq",!0),$("math",K,J,"\u22d6","\\lessdot"),$("math",K,et,"\u22d8","\\lll",!0),$("math",K,et,"\u2276","\\lessgtr",!0),$("math",K,et,"\u22da","\\lesseqgtr",!0),$("math",K,et,"\u2a8b","\\lesseqqgtr",!0),$("math",K,et,"\u2251","\\doteqdot"),$("math",K,et,"\u2253","\\risingdotseq",!0),$("math",K,et,"\u2252","\\fallingdotseq",!0),$("math",K,et,"\u223d","\\backsim",!0),$("math",K,et,"\u22cd","\\backsimeq",!0),$("math",K,et,"\u2ac5","\\subseteqq",!0),$("math",K,et,"\u22d0","\\Subset",!0),$("math",K,et,"\u228f","\\sqsubset",!0),$("math",K,et,"\u227c","\\preccurlyeq",!0),$("math",K,et,"\u22de","\\curlyeqprec",!0),$("math",K,et,"\u227e","\\precsim",!0),$("math",K,et,"\u2ab7","\\precapprox",!0),$("math",K,et,"\u22b2","\\vartriangleleft"),$("math",K,et,"\u22b4","\\trianglelefteq"),$("math",K,et,"\u22a8","\\vDash",!0),$("math",K,et,"\u22aa","\\Vvdash",!0),$("math",K,et,"\u2323","\\smallsmile"),$("math",K,et,"\u2322","\\smallfrown"),$("math",K,et,"\u224f","\\bumpeq",!0),$("math",K,et,"\u224e","\\Bumpeq",!0),$("math",K,et,"\u2267","\\geqq",!0),$("math",K,et,"\u2a7e","\\geqslant",!0),$("math",K,et,"\u2a96","\\eqslantgtr",!0),$("math",K,et,"\u2273","\\gtrsim",!0),$("math",K,et,"\u2a86","\\gtrapprox",!0),$("math",K,J,"\u22d7","\\gtrdot"),$("math",K,et,"\u22d9","\\ggg",!0),$("math",K,et,"\u2277","\\gtrless",!0),$("math",K,et,"\u22db","\\gtreqless",!0),$("math",K,et,"\u2a8c","\\gtreqqless",!0),$("math",K,et,"\u2256","\\eqcirc",!0),$("math",K,et,"\u2257","\\circeq",!0),$("math",K,et,"\u225c","\\triangleq",!0),$("math",K,et,"\u223c","\\thicksim"),$("math",K,et,"\u2248","\\thickapprox"),$("math",K,et,"\u2ac6","\\supseteqq",!0),$("math",K,et,"\u22d1","\\Supset",!0),$("math",K,et,"\u2290","\\sqsupset",!0),$("math",K,et,"\u227d","\\succcurlyeq",!0),$("math",K,et,"\u22df","\\curlyeqsucc",!0),$("math",K,et,"\u227f","\\succsim",!0),$("math",K,et,"\u2ab8","\\succapprox",!0),$("math",K,et,"\u22b3","\\vartriangleright"),$("math",K,et,"\u22b5","\\trianglerighteq"),$("math",K,et,"\u22a9","\\Vdash",!0),$("math",K,et,"\u2223","\\shortmid"),$("math",K,et,"\u2225","\\shortparallel"),$("math",K,et,"\u226c","\\between",!0),$("math",K,et,"\u22d4","\\pitchfork",!0),$("math",K,et,"\u221d","\\varpropto"),$("math",K,et,"\u25c0","\\blacktriangleleft"),$("math",K,et,"\u2234","\\therefore",!0),$("math",K,et,"\u220d","\\backepsilon"),$("math",K,et,"\u25b6","\\blacktriangleright"),$("math",K,et,"\u2235","\\because",!0),$("math",K,et,"\u22d8","\\llless"),$("math",K,et,"\u22d9","\\gggtr"),$("math",K,J,"\u22b2","\\lhd"),$("math",K,J,"\u22b3","\\rhd"),$("math",K,et,"\u2242","\\eqsim",!0),$("math",Z,et,"\u22c8","\\Join"),$("math",K,et,"\u2251","\\Doteq",!0),$("math",K,J,"\u2214","\\dotplus",!0),$("math",K,J,"\u2216","\\smallsetminus"),$("math",K,J,"\u22d2","\\Cap",!0),$("math",K,J,"\u22d3","\\Cup",!0),$("math",K,J,"\u2a5e","\\doublebarwedge",!0),$("math",K,J,"\u229f","\\boxminus",!0),$("math",K,J,"\u229e","\\boxplus",!0),$("math",K,J,"\u22c7","\\divideontimes",!0),$("math",K,J,"\u22c9","\\ltimes",!0),$("math",K,J,"\u22ca","\\rtimes",!0),$("math",K,J,"\u22cb","\\leftthreetimes",!0),$("math",K,J,"\u22cc","\\rightthreetimes",!0),$("math",K,J,"\u22cf","\\curlywedge",!0),$("math",K,J,"\u22ce","\\curlyvee",!0),$("math",K,J,"\u229d","\\circleddash",!0),$("math",K,J,"\u229b","\\circledast",!0),$("math",K,J,"\u22c5","\\centerdot"),$("math",K,J,"\u22ba","\\intercal",!0),$("math",K,J,"\u22d2","\\doublecap"),$("math",K,J,"\u22d3","\\doublecup"),$("math",K,J,"\u22a0","\\boxtimes",!0),$("math",K,et,"\u21e2","\\dashrightarrow",!0),$("math",K,et,"\u21e0","\\dashleftarrow",!0),$("math",K,et,"\u21c7","\\leftleftarrows",!0),$("math",K,et,"\u21c6","\\leftrightarrows",!0),$("math",K,et,"\u21da","\\Lleftarrow",!0),$("math",K,et,"\u219e","\\twoheadleftarrow",!0),$("math",K,et,"\u21a2","\\leftarrowtail",!0),$("math",K,et,"\u21ab","\\looparrowleft",!0),$("math",K,et,"\u21cb","\\leftrightharpoons",!0),$("math",K,et,"\u21b6","\\curvearrowleft",!0),$("math",K,et,"\u21ba","\\circlearrowleft",!0),$("math",K,et,"\u21b0","\\Lsh",!0),$("math",K,et,"\u21c8","\\upuparrows",!0),$("math",K,et,"\u21bf","\\upharpoonleft",!0),$("math",K,et,"\u21c3","\\downharpoonleft",!0),$("math",K,et,"\u22b8","\\multimap",!0),$("math",K,et,"\u21ad","\\leftrightsquigarrow",!0),$("math",K,et,"\u21c9","\\rightrightarrows",!0),$("math",K,et,"\u21c4","\\rightleftarrows",!0),$("math",K,et,"\u21a0","\\twoheadrightarrow",!0),$("math",K,et,"\u21a3","\\rightarrowtail",!0),$("math",K,et,"\u21ac","\\looparrowright",!0),$("math",K,et,"\u21b7","\\curvearrowright",!0),$("math",K,et,"\u21bb","\\circlearrowright",!0),$("math",K,et,"\u21b1","\\Rsh",!0),$("math",K,et,"\u21ca","\\downdownarrows",!0),$("math",K,et,"\u21be","\\upharpoonright",!0),$("math",K,et,"\u21c2","\\downharpoonright",!0),$("math",K,et,"\u21dd","\\rightsquigarrow",!0),$("math",K,et,"\u21dd","\\leadsto"),$("math",K,et,"\u21db","\\Rrightarrow",!0),$("math",K,et,"\u21be","\\restriction"),$("math",Z,"textord","\u2018","`"),$("math",Z,"textord","$","\\$"),$("text",Z,"textord","$","\\$"),$("text",Z,"textord","$","\\textdollar"),$("math",Z,"textord","%","\\%"),$("text",Z,"textord","%","\\%"),$("math",Z,"textord","_","\\_"),$("text",Z,"textord","_","\\_"),$("text",Z,"textord","_","\\textunderscore"),$("math",Z,"textord","\u2220","\\angle",!0),$("math",Z,"textord","\u221e","\\infty",!0),$("math",Z,"textord","\u2032","\\prime"),$("math",Z,"textord","\u25b3","\\triangle"),$("math",Z,"textord","\u0393","\\Gamma",!0),$("math",Z,"textord","\u0394","\\Delta",!0),$("math",Z,"textord","\u0398","\\Theta",!0),$("math",Z,"textord","\u039b","\\Lambda",!0),$("math",Z,"textord","\u039e","\\Xi",!0),$("math",Z,"textord","\u03a0","\\Pi",!0),$("math",Z,"textord","\u03a3","\\Sigma",!0),$("math",Z,"textord","\u03a5","\\Upsilon",!0),$("math",Z,"textord","\u03a6","\\Phi",!0),$("math",Z,"textord","\u03a8","\\Psi",!0),$("math",Z,"textord","\u03a9","\\Omega",!0),$("math",Z,"textord","A","\u0391"),$("math",Z,"textord","B","\u0392"),$("math",Z,"textord","E","\u0395"),$("math",Z,"textord","Z","\u0396"),$("math",Z,"textord","H","\u0397"),$("math",Z,"textord","I","\u0399"),$("math",Z,"textord","K","\u039a"),$("math",Z,"textord","M","\u039c"),$("math",Z,"textord","N","\u039d"),$("math",Z,"textord","O","\u039f"),$("math",Z,"textord","P","\u03a1"),$("math",Z,"textord","T","\u03a4"),$("math",Z,"textord","X","\u03a7"),$("math",Z,"textord","\xac","\\neg",!0),$("math",Z,"textord","\xac","\\lnot"),$("math",Z,"textord","\u22a4","\\top"),$("math",Z,"textord","\u22a5","\\bot"),$("math",Z,"textord","\u2205","\\emptyset"),$("math",K,"textord","\u2205","\\varnothing"),$("math",Z,Q,"\u03b1","\\alpha",!0),$("math",Z,Q,"\u03b2","\\beta",!0),$("math",Z,Q,"\u03b3","\\gamma",!0),$("math",Z,Q,"\u03b4","\\delta",!0),$("math",Z,Q,"\u03f5","\\epsilon",!0),$("math",Z,Q,"\u03b6","\\zeta",!0),$("math",Z,Q,"\u03b7","\\eta",!0),$("math",Z,Q,"\u03b8","\\theta",!0),$("math",Z,Q,"\u03b9","\\iota",!0),$("math",Z,Q,"\u03ba","\\kappa",!0),$("math",Z,Q,"\u03bb","\\lambda",!0),$("math",Z,Q,"\u03bc","\\mu",!0),$("math",Z,Q,"\u03bd","\\nu",!0),$("math",Z,Q,"\u03be","\\xi",!0),$("math",Z,Q,"\u03bf","\\omicron",!0),$("math",Z,Q,"\u03c0","\\pi",!0),$("math",Z,Q,"\u03c1","\\rho",!0),$("math",Z,Q,"\u03c3","\\sigma",!0),$("math",Z,Q,"\u03c4","\\tau",!0),$("math",Z,Q,"\u03c5","\\upsilon",!0),$("math",Z,Q,"\u03d5","\\phi",!0),$("math",Z,Q,"\u03c7","\\chi",!0),$("math",Z,Q,"\u03c8","\\psi",!0),$("math",Z,Q,"\u03c9","\\omega",!0),$("math",Z,Q,"\u03b5","\\varepsilon",!0),$("math",Z,Q,"\u03d1","\\vartheta",!0),$("math",Z,Q,"\u03d6","\\varpi",!0),$("math",Z,Q,"\u03f1","\\varrho",!0),$("math",Z,Q,"\u03c2","\\varsigma",!0),$("math",Z,Q,"\u03c6","\\varphi",!0),$("math",Z,J,"\u2217","*"),$("math",Z,J,"+","+"),$("math",Z,J,"\u2212","-"),$("math",Z,J,"\u22c5","\\cdot",!0),$("math",Z,J,"\u2218","\\circ"),$("math",Z,J,"\xf7","\\div",!0),$("math",Z,J,"\xb1","\\pm",!0),$("math",Z,J,"\xd7","\\times",!0),$("math",Z,J,"\u2229","\\cap",!0),$("math",Z,J,"\u222a","\\cup",!0),$("math",Z,J,"\u2216","\\setminus"),$("math",Z,J,"\u2227","\\land"),$("math",Z,J,"\u2228","\\lor"),$("math",Z,J,"\u2227","\\wedge",!0),$("math",Z,J,"\u2228","\\vee",!0),$("math",Z,"textord","\u221a","\\surd"),$("math",Z,"open","(","("),$("math",Z,"open","[","["),$("math",Z,"open","\u27e8","\\langle",!0),$("math",Z,"open","\u2223","\\lvert"),$("math",Z,"open","\u2225","\\lVert"),$("math",Z,"close",")",")"),$("math",Z,"close","]","]"),$("math",Z,"close","?","?"),$("math",Z,"close","!","!"),$("math",Z,"close","\u27e9","\\rangle",!0),$("math",Z,"close","\u2223","\\rvert"),$("math",Z,"close","\u2225","\\rVert"),$("math",Z,et,"=","="),$("math",Z,et,"<","<"),$("math",Z,et,">",">"),$("math",Z,et,":",":"),$("math",Z,et,"\u2248","\\approx",!0),$("math",Z,et,"\u2245","\\cong",!0),$("math",Z,et,"\u2265","\\ge"),$("math",Z,et,"\u2265","\\geq",!0),$("math",Z,et,"\u2190","\\gets"),$("math",Z,et,">","\\gt"),$("math",Z,et,"\u2208","\\in",!0),$("math",Z,et,"\ue020","\\@not"),$("math",Z,et,"\u2282","\\subset",!0),$("math",Z,et,"\u2283","\\supset",!0),$("math",Z,et,"\u2286","\\subseteq",!0),$("math",Z,et,"\u2287","\\supseteq",!0),$("math",K,et,"\u2288","\\nsubseteq",!0),$("math",K,et,"\u2289","\\nsupseteq",!0),$("math",Z,et,"\u22a8","\\models"),$("math",Z,et,"\u2190","\\leftarrow",!0),$("math",Z,et,"\u2264","\\le"),$("math",Z,et,"\u2264","\\leq",!0),$("math",Z,et,"<","\\lt"),$("math",Z,et,"\u2192","\\rightarrow",!0),$("math",Z,et,"\u2192","\\to"),$("math",K,et,"\u2271","\\ngeq",!0),$("math",K,et,"\u2270","\\nleq",!0),$("math",Z,"spacing","\xa0","\\ "),$("math",Z,"spacing","\xa0","~"),$("math",Z,"spacing","\xa0","\\space"),$("math",Z,"spacing","\xa0","\\nobreakspace"),$("text",Z,"spacing","\xa0","\\ "),$("text",Z,"spacing","\xa0","~"),$("text",Z,"spacing","\xa0","\\space"),$("text",Z,"spacing","\xa0","\\nobreakspace"),$("math",Z,"spacing",null,"\\nobreak"),$("math",Z,"spacing",null,"\\allowbreak"),$("math",Z,"punct",",",","),$("math",Z,"punct",";",";"),$("math",K,J,"\u22bc","\\barwedge",!0),$("math",K,J,"\u22bb","\\veebar",!0),$("math",Z,J,"\u2299","\\odot",!0),$("math",Z,J,"\u2295","\\oplus",!0),$("math",Z,J,"\u2297","\\otimes",!0),$("math",Z,"textord","\u2202","\\partial",!0),$("math",Z,J,"\u2298","\\oslash",!0),$("math",K,J,"\u229a","\\circledcirc",!0),$("math",K,J,"\u22a1","\\boxdot",!0),$("math",Z,J,"\u25b3","\\bigtriangleup"),$("math",Z,J,"\u25bd","\\bigtriangledown"),$("math",Z,J,"\u2020","\\dagger"),$("math",Z,J,"\u22c4","\\diamond"),$("math",Z,J,"\u22c6","\\star"),$("math",Z,J,"\u25c3","\\triangleleft"),$("math",Z,J,"\u25b9","\\triangleright"),$("math",Z,"open","{","\\{"),$("text",Z,"textord","{","\\{"),$("text",Z,"textord","{","\\textbraceleft"),$("math",Z,"close","}","\\}"),$("text",Z,"textord","}","\\}"),$("text",Z,"textord","}","\\textbraceright"),$("math",Z,"open","{","\\lbrace"),$("math",Z,"close","}","\\rbrace"),$("math",Z,"open","[","\\lbrack"),$("text",Z,"textord","[","\\lbrack"),$("math",Z,"close","]","\\rbrack"),$("text",Z,"textord","]","\\rbrack"),$("math",Z,"open","(","\\lparen"),$("math",Z,"close",")","\\rparen"),$("text",Z,"textord","<","\\textless"),$("text",Z,"textord",">","\\textgreater"),$("math",Z,"open","\u230a","\\lfloor",!0),$("math",Z,"close","\u230b","\\rfloor",!0),$("math",Z,"open","\u2308","\\lceil",!0),$("math",Z,"close","\u2309","\\rceil",!0),$("math",Z,"textord","\\","\\backslash"),$("math",Z,"textord","\u2223","|"),$("math",Z,"textord","\u2223","\\vert"),$("text",Z,"textord","|","\\textbar"),$("math",Z,"textord","\u2225","\\|"),$("math",Z,"textord","\u2225","\\Vert"),$("text",Z,"textord","\u2225","\\textbardbl"),$("text",Z,"textord","~","\\textasciitilde"),$("text",Z,"textord","\\","\\textbackslash"),$("text",Z,"textord","^","\\textasciicircum"),$("math",Z,et,"\u2191","\\uparrow",!0),$("math",Z,et,"\u21d1","\\Uparrow",!0),$("math",Z,et,"\u2193","\\downarrow",!0),$("math",Z,et,"\u21d3","\\Downarrow",!0),$("math",Z,et,"\u2195","\\updownarrow",!0),$("math",Z,et,"\u21d5","\\Updownarrow",!0),$("math",Z,tt,"\u2210","\\coprod"),$("math",Z,tt,"\u22c1","\\bigvee"),$("math",Z,tt,"\u22c0","\\bigwedge"),$("math",Z,tt,"\u2a04","\\biguplus"),$("math",Z,tt,"\u22c2","\\bigcap"),$("math",Z,tt,"\u22c3","\\bigcup"),$("math",Z,tt,"\u222b","\\int"),$("math",Z,tt,"\u222b","\\intop"),$("math",Z,tt,"\u222c","\\iint"),$("math",Z,tt,"\u222d","\\iiint"),$("math",Z,tt,"\u220f","\\prod"),$("math",Z,tt,"\u2211","\\sum"),$("math",Z,tt,"\u2a02","\\bigotimes"),$("math",Z,tt,"\u2a01","\\bigoplus"),$("math",Z,tt,"\u2a00","\\bigodot"),$("math",Z,tt,"\u222e","\\oint"),$("math",Z,tt,"\u222f","\\oiint"),$("math",Z,tt,"\u2230","\\oiiint"),$("math",Z,tt,"\u2a06","\\bigsqcup"),$("math",Z,tt,"\u222b","\\smallint"),$("text",Z,"inner","\u2026","\\textellipsis"),$("math",Z,"inner","\u2026","\\mathellipsis"),$("text",Z,"inner","\u2026","\\ldots",!0),$("math",Z,"inner","\u2026","\\ldots",!0),$("math",Z,"inner","\u22ef","\\@cdots",!0),$("math",Z,"inner","\u22f1","\\ddots",!0),$("math",Z,"textord","\u22ee","\\varvdots"),$("math",Z,"accent-token","\u02ca","\\acute"),$("math",Z,"accent-token","\u02cb","\\grave"),$("math",Z,"accent-token","\xa8","\\ddot"),$("math",Z,"accent-token","~","\\tilde"),$("math",Z,"accent-token","\u02c9","\\bar"),$("math",Z,"accent-token","\u02d8","\\breve"),$("math",Z,"accent-token","\u02c7","\\check"),$("math",Z,"accent-token","^","\\hat"),$("math",Z,"accent-token","\u20d7","\\vec"),$("math",Z,"accent-token","\u02d9","\\dot"),$("math",Z,"accent-token","\u02da","\\mathring"),$("math",Z,Q,"\u0131","\\imath",!0),$("math",Z,Q,"\u0237","\\jmath",!0),$("text",Z,"textord","\u0131","\\i",!0),$("text",Z,"textord","\u0237","\\j",!0),$("text",Z,"textord","\xdf","\\ss",!0),$("text",Z,"textord","\xe6","\\ae",!0),$("text",Z,"textord","\xe6","\\ae",!0),$("text",Z,"textord","\u0153","\\oe",!0),$("text",Z,"textord","\xf8","\\o",!0),$("text",Z,"textord","\xc6","\\AE",!0),$("text",Z,"textord","\u0152","\\OE",!0),$("text",Z,"textord","\xd8","\\O",!0),$("text",Z,"accent-token","\u02ca","\\'"),$("text",Z,"accent-token","\u02cb","\\`"),$("text",Z,"accent-token","\u02c6","\\^"),$("text",Z,"accent-token","\u02dc","\\~"),$("text",Z,"accent-token","\u02c9","\\="),$("text",Z,"accent-token","\u02d8","\\u"),$("text",Z,"accent-token","\u02d9","\\."),$("text",Z,"accent-token","\u02da","\\r"),$("text",Z,"accent-token","\u02c7","\\v"),$("text",Z,"accent-token","\xa8",'\\"'),$("text",Z,"accent-token","\u02dd","\\H"),$("text",Z,"accent-token","\u25ef","\\textcircled");var rt={"--":!0,"---":!0,"``":!0,"''":!0};$("text",Z,"textord","\u2013","--"),$("text",Z,"textord","\u2013","\\textendash"),$("text",Z,"textord","\u2014","---"),$("text",Z,"textord","\u2014","\\textemdash"),$("text",Z,"textord","\u2018","`"),$("text",Z,"textord","\u2018","\\textquoteleft"),$("text",Z,"textord","\u2019","'"),$("text",Z,"textord","\u2019","\\textquoteright"),$("text",Z,"textord","\u201c","``"),$("text",Z,"textord","\u201c","\\textquotedblleft"),$("text",Z,"textord","\u201d","''"),$("text",Z,"textord","\u201d","\\textquotedblright"),$("math",Z,"textord","\xb0","\\degree",!0),$("text",Z,"textord","\xb0","\\degree"),$("text",Z,"textord","\xb0","\\textdegree",!0),$("math",Z,Q,"\xa3","\\pounds"),$("math",Z,Q,"\xa3","\\mathsterling",!0),$("text",Z,Q,"\xa3","\\pounds"),$("text",Z,Q,"\xa3","\\textsterling",!0),$("math",K,"textord","\u2720","\\maltese"),$("text",K,"textord","\u2720","\\maltese"),$("text",Z,"spacing","\xa0","\\ "),$("text",Z,"spacing","\xa0"," "),$("text",Z,"spacing","\xa0","~");for(var at=0;at<'0123456789/@."'.length;at++){var nt='0123456789/@."'.charAt(at);$("math",Z,"textord",nt,nt)}for(var it=0;it<'0123456789!@*()-=+[]<>|";:?/.,'.length;it++){var ot='0123456789!@*()-=+[]<>|";:?/.,'.charAt(it);$("text",Z,"textord",ot,ot)}for(var st="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz",ht=0;ht<st.length;ht++){var lt=st.charAt(ht);$("math",Z,Q,lt,lt),$("text",Z,"textord",lt,lt)}$("math",K,"textord","C","\u2102"),$("text",K,"textord","C","\u2102"),$("math",K,"textord","H","\u210d"),$("text",K,"textord","H","\u210d"),$("math",K,"textord","N","\u2115"),$("text",K,"textord","N","\u2115"),$("math",K,"textord","P","\u2119"),$("text",K,"textord","P","\u2119"),$("math",K,"textord","Q","\u211a"),$("text",K,"textord","Q","\u211a"),$("math",K,"textord","R","\u211d"),$("text",K,"textord","R","\u211d"),$("math",K,"textord","Z","\u2124"),$("text",K,"textord","Z","\u2124"),$("math",Z,Q,"h","\u210e"),$("text",Z,Q,"h","\u210e");for(var mt="",ct=0;ct<st.length;ct++){var ut=st.charAt(ct);$("math",Z,Q,ut,mt=String.fromCharCode(55349,56320+ct)),$("text",Z,"textord",ut,mt),$("math",Z,Q,ut,mt=String.fromCharCode(55349,56372+ct)),$("text",Z,"textord",ut,mt),$("math",Z,Q,ut,mt=String.fromCharCode(55349,56424+ct)),$("text",Z,"textord",ut,mt),$("math",Z,Q,ut,mt=String.fromCharCode(55349,56580+ct)),$("text",Z,"textord",ut,mt),$("math",Z,Q,ut,mt=String.fromCharCode(55349,56736+ct)),$("text",Z,"textord",ut,mt),$("math",Z,Q,ut,mt=String.fromCharCode(55349,56788+ct)),$("text",Z,"textord",ut,mt),$("math",Z,Q,ut,mt=String.fromCharCode(55349,56840+ct)),$("text",Z,"textord",ut,mt),$("math",Z,Q,ut,mt=String.fromCharCode(55349,56944+ct)),$("text",Z,"textord",ut,mt),ct<26&&($("math",Z,Q,ut,mt=String.fromCharCode(55349,56632+ct)),$("text",Z,"textord",ut,mt),$("math",Z,Q,ut,mt=String.fromCharCode(55349,56476+ct)),$("text",Z,"textord",ut,mt))}$("math",Z,Q,"k",mt=String.fromCharCode(55349,56668)),$("text",Z,"textord","k",mt);for(var pt=0;pt<10;pt++){var dt=pt.toString();$("math",Z,Q,dt,mt=String.fromCharCode(55349,57294+pt)),$("text",Z,"textord",dt,mt),$("math",Z,Q,dt,mt=String.fromCharCode(55349,57314+pt)),$("text",Z,"textord",dt,mt),$("math",Z,Q,dt,mt=String.fromCharCode(55349,57324+pt)),$("text",Z,"textord",dt,mt),$("math",Z,Q,dt,mt=String.fromCharCode(55349,57334+pt)),$("text",Z,"textord",dt,mt)}for(var ft=0;ft<"\xc7\xd0\xde\xe7\xfe".length;ft++){var gt="\xc7\xd0\xde\xe7\xfe".charAt(ft);$("math",Z,Q,gt,gt),$("text",Z,"textord",gt,gt)}$("text",Z,"textord","\xf0","\xf0"),$("text",Z,"textord","\u2013","\u2013"),$("text",Z,"textord","\u2014","\u2014"),$("text",Z,"textord","\u2018","\u2018"),$("text",Z,"textord","\u2019","\u2019"),$("text",Z,"textord","\u201c","\u201c"),$("text",Z,"textord","\u201d","\u201d");var xt=[["mathbf","textbf","Main-Bold"],["mathbf","textbf","Main-Bold"],["mathdefault","textit","Math-Italic"],["mathdefault","textit","Math-Italic"],["boldsymbol","boldsymbol","Main-BoldItalic"],["boldsymbol","boldsymbol","Main-BoldItalic"],["mathscr","textscr","Script-Regular"],["","",""],["","",""],["","",""],["mathfrak","textfrak","Fraktur-Regular"],["mathfrak","textfrak","Fraktur-Regular"],["mathbb","textbb","AMS-Regular"],["mathbb","textbb","AMS-Regular"],["","",""],["","",""],["mathsf","textsf","SansSerif-Regular"],["mathsf","textsf","SansSerif-Regular"],["mathboldsf","textboldsf","SansSerif-Bold"],["mathboldsf","textboldsf","SansSerif-Bold"],["mathitsf","textitsf","SansSerif-Italic"],["mathitsf","textitsf","SansSerif-Italic"],["","",""],["","",""],["mathtt","texttt","Typewriter-Regular"],["mathtt","texttt","Typewriter-Regular"]],vt=[["mathbf","textbf","Main-Bold"],["","",""],["mathsf","textsf","SansSerif-Regular"],["mathboldsf","textboldsf","SansSerif-Bold"],["mathtt","texttt","Typewriter-Regular"]],bt=[[1,1,1],[2,1,1],[3,1,1],[4,2,1],[5,2,1],[6,3,1],[7,4,2],[8,6,3],[9,7,6],[10,8,7],[11,10,9]],yt=[.5,.6,.7,.8,.9,1,1.2,1.44,1.728,2.074,2.488],wt=function(t,e){return e.size<2?t:bt[t-1][e.size-1]},kt=function(){function t(e){this.style=void 0,this.color=void 0,this.size=void 0,this.textSize=void 0,this.phantom=void 0,this.font=void 0,this.fontFamily=void 0,this.fontWeight=void 0,this.fontShape=void 0,this.sizeMultiplier=void 0,this.maxSize=void 0,this.minRuleThickness=void 0,this._fontMetrics=void 0,this.style=e.style,this.color=e.color,this.size=e.size||t.BASESIZE,this.textSize=e.textSize||this.size,this.phantom=!!e.phantom,this.font=e.font||"",this.fontFamily=e.fontFamily||"",this.fontWeight=e.fontWeight||"",this.fontShape=e.fontShape||"",this.sizeMultiplier=yt[this.size-1],this.maxSize=e.maxSize,this.minRuleThickness=e.minRuleThickness,this._fontMetrics=void 0}var e=t.prototype;return e.extend=function(e){var r={style:this.style,size:this.size,textSize:this.textSize,color:this.color,phantom:this.phantom,font:this.font,fontFamily:this.fontFamily,fontWeight:this.fontWeight,fontShape:this.fontShape,maxSize:this.maxSize,minRuleThickness:this.minRuleThickness};for(var a in e)e.hasOwnProperty(a)&&(r[a]=e[a]);return new t(r)},e.havingStyle=function(t){return this.style===t?this:this.extend({style:t,size:wt(this.textSize,t)})},e.havingCrampedStyle=function(){return this.havingStyle(this.style.cramp())},e.havingSize=function(t){return this.size===t&&this.textSize===t?this:this.extend({style:this.style.text(),size:t,textSize:t,sizeMultiplier:yt[t-1]})},e.havingBaseStyle=function(e){e=e||this.style.text();var r=wt(t.BASESIZE,e);return this.size===r&&this.textSize===t.BASESIZE&&this.style===e?this:this.extend({style:e,size:r})},e.havingBaseSizing=function(){var t;switch(this.style.id){case 4:case 5:t=3;break;case 6:case 7:t=1;break;default:t=6}return this.extend({style:this.style.text(),size:t})},e.withColor=function(t){return this.extend({color:t})},e.withPhantom=function(){return this.extend({phantom:!0})},e.withFont=function(t){return this.extend({font:t})},e.withTextFontFamily=function(t){return this.extend({fontFamily:t,font:""})},e.withTextFontWeight=function(t){return this.extend({fontWeight:t,font:""})},e.withTextFontShape=function(t){return this.extend({fontShape:t,font:""})},e.sizingClasses=function(t){return t.size!==this.size?["sizing","reset-size"+t.size,"size"+this.size]:[]},e.baseSizingClasses=function(){return this.size!==t.BASESIZE?["sizing","reset-size"+this.size,"size"+t.BASESIZE]:[]},e.fontMetrics=function(){return this._fontMetrics||(this._fontMetrics=function(t){var e;if(!Y[e=t>=5?0:t>=3?1:2]){var r=Y[e]={cssEmPerMu:V.quad[e]/18};for(var a in V)V.hasOwnProperty(a)&&(r[a]=V[a][e])}return Y[e]}(this.size)),this._fontMetrics},e.getColor=function(){return this.phantom?"transparent":this.color},t}();kt.BASESIZE=6;var St=kt,Mt={pt:1,mm:7227/2540,cm:7227/254,in:72.27,bp:1.00375,pc:12,dd:1238/1157,cc:14856/1157,nd:685/642,nc:1370/107,sp:1/65536,px:1.00375},zt={ex:!0,em:!0,mu:!0},At=function(t){return"string"!=typeof t&&(t=t.unit),t in Mt||t in zt||"ex"===t},Tt=function(t,e){var r;if(t.unit in Mt)r=Mt[t.unit]/e.fontMetrics().ptPerEm/e.sizeMultiplier;else if("mu"===t.unit)r=e.fontMetrics().cssEmPerMu;else{var a;if(a=e.style.isTight()?e.havingStyle(e.style.text()):e,"ex"===t.unit)r=a.fontMetrics().xHeight;else{if("em"!==t.unit)throw new o("Invalid unit: '"+t.unit+"'");r=a.fontMetrics().quad}a!==e&&(r*=a.sizeMultiplier/e.sizeMultiplier)}return Math.min(t.number*r,e.maxSize)},Bt=["\\imath","\u0131","\\jmath","\u0237","\\pounds","\\mathsterling","\\textsterling","\xa3"],Ct=function(t,e,r){return j[r][t]&&j[r][t].replace&&(t=j[r][t].replace),{value:t,metrics:G(t,e,r)}},qt=function(t,e,r,a,n){var i,o=Ct(t,e,r),s=o.metrics;if(t=o.value,s){var h=s.italic;("text"===r||a&&"mathit"===a.font)&&(h=0),i=new E(t,s.height,s.depth,h,s.skew,s.width,n)}else"undefined"!=typeof console&&console.warn("No character metrics for '"+t+"' in style '"+e+"' and mode '"+r+"'"),i=new E(t,0,0,0,0,0,n);if(a){i.maxFontSize=a.sizeMultiplier,a.style.isTight()&&i.classes.push("mtight");var l=a.getColor();l&&(i.style.color=l)}return i},Nt=function(t,e){if(T(t.classes)!==T(e.classes)||t.skew!==e.skew||t.maxFontSize!==e.maxFontSize)return!1;for(var r in t.style)if(t.style.hasOwnProperty(r)&&t.style[r]!==e.style[r])return!1;for(var a in e.style)if(e.style.hasOwnProperty(a)&&t.style[a]!==e.style[a])return!1;return!0},It=function(t){for(var e=0,r=0,a=0,n=0;n<t.children.length;n++){var i=t.children[n];i.height>e&&(e=i.height),i.depth>r&&(r=i.depth),i.maxFontSize>a&&(a=i.maxFontSize)}t.height=e,t.depth=r,t.maxFontSize=a},Rt=function(t,e,r,a){var n=new N(t,e,r,a);return It(n),n},Ot=function(t,e,r,a){return new N(t,e,r,a)},Et=function(t){var e=new A(t);return It(e),e},Lt=function(t,e,r){var a="";switch(t){case"amsrm":a="AMS";break;case"textrm":a="Main";break;case"textsf":a="SansSerif";break;case"texttt":a="Typewriter";break;default:a=t}return a+"-"+("textbf"===e&&"textit"===r?"BoldItalic":"textbf"===e?"Bold":"textit"===e?"Italic":"Regular")},Ht={mathbf:{variant:"bold",fontName:"Main-Bold"},mathrm:{variant:"normal",fontName:"Main-Regular"},textit:{variant:"italic",fontName:"Main-Italic"},mathit:{variant:"italic",fontName:"Main-Italic"},mathbb:{variant:"double-struck",fontName:"AMS-Regular"},mathcal:{variant:"script",fontName:"Caligraphic-Regular"},mathfrak:{variant:"fraktur",fontName:"Fraktur-Regular"},mathscr:{variant:"script",fontName:"Script-Regular"},mathsf:{variant:"sans-serif",fontName:"SansSerif-Regular"},mathtt:{variant:"monospace",fontName:"Typewriter-Regular"}},Pt={vec:["vec",.471,.714],oiintSize1:["oiintSize1",.957,.499],oiintSize2:["oiintSize2",1.472,.659],oiiintSize1:["oiiintSize1",1.304,.499],oiiintSize2:["oiiintSize2",1.98,.659]},Dt={fontMap:Ht,makeSymbol:qt,mathsym:function(t,e,r,a){return void 0===a&&(a=[]),"boldsymbol"===r.font&&Ct(t,"Main-Bold",e).metrics?qt(t,"Main-Bold",e,r,a.concat(["mathbf"])):"\\"===t||"main"===j[e][t].font?qt(t,"Main-Regular",e,r,a):qt(t,"AMS-Regular",e,r,a.concat(["amsrm"]))},makeSpan:Rt,makeSvgSpan:Ot,makeLineSpan:function(t,e,r){var a=Rt([t],[],e);return a.height=Math.max(r||e.fontMetrics().defaultRuleThickness,e.minRuleThickness),a.style.borderBottomWidth=a.height+"em",a.maxFontSize=1,a},makeAnchor:function(t,e,r,a){var n=new I(t,e,r,a);return It(n),n},makeFragment:Et,wrapFragment:function(t,e){return t instanceof A?Rt([],[t],e):t},makeVList:function(t,e){for(var r=function(t){if("individualShift"===t.positionType){for(var e=t.children,r=[e[0]],a=-e[0].shift-e[0].elem.depth,n=a,i=1;i<e.length;i++){var o=-e[i].shift-n-e[i].elem.depth,s=o-(e[i-1].elem.height+e[i-1].elem.depth);n+=o,r.push({type:"kern",size:s}),r.push(e[i])}return{children:r,depth:a}}var h;if("top"===t.positionType){for(var l=t.positionData,m=0;m<t.children.length;m++){var c=t.children[m];l-="kern"===c.type?c.size:c.elem.height+c.elem.depth}h=l}else if("bottom"===t.positionType)h=-t.positionData;else{var u=t.children[0];if("elem"!==u.type)throw new Error('First child must have type "elem".');if("shift"===t.positionType)h=-u.elem.depth-t.positionData;else{if("firstBaseline"!==t.positionType)throw new Error("Invalid positionType "+t.positionType+".");h=-u.elem.depth}}return{children:t.children,depth:h}}(t),a=r.children,n=r.depth,i=0,o=0;o<a.length;o++){var s=a[o];if("elem"===s.type){var h=s.elem;i=Math.max(i,h.maxFontSize,h.height)}}i+=2;var l=Rt(["pstrut"],[]);l.style.height=i+"em";for(var m=[],c=n,u=n,p=n,d=0;d<a.length;d++){var f=a[d];if("kern"===f.type)p+=f.size;else{var g=f.elem,x=f.wrapperClasses||[],v=f.wrapperStyle||{},b=Rt(x,[l,g],void 0,v);b.style.top=-i-p-g.depth+"em",f.marginLeft&&(b.style.marginLeft=f.marginLeft),f.marginRight&&(b.style.marginRight=f.marginRight),m.push(b),p+=g.height+g.depth}c=Math.min(c,p),u=Math.max(u,p)}var y,w=Rt(["vlist"],m);if(w.style.height=u+"em",c<0){var k=Rt([],[]),S=Rt(["vlist"],[k]);S.style.height=-c+"em";var M=Rt(["vlist-s"],[new E("\u200b")]);y=[Rt(["vlist-r"],[w,M]),Rt(["vlist-r"],[S])]}else y=[Rt(["vlist-r"],[w])];var z=Rt(["vlist-t"],y);return 2===y.length&&z.classes.push("vlist-t2"),z.height=u,z.depth=-c,z},makeOrd:function(t,e,r){var a,n=t.mode,i=t.text,s=["mord"],h="math"===n||"text"===n&&e.font,l=h?e.font:e.fontFamily;if(55349===i.charCodeAt(0)){var m=function(t,e){var r=1024*(t.charCodeAt(0)-55296)+(t.charCodeAt(1)-56320)+65536,a="math"===e?0:1;if(119808<=r&&r<120484){var n=Math.floor((r-119808)/26);return[xt[n][2],xt[n][a]]}if(120782<=r&&r<=120831){var i=Math.floor((r-120782)/10);return[vt[i][2],vt[i][a]]}if(120485===r||120486===r)return[xt[0][2],xt[0][a]];if(120486<r&&r<120782)return["",""];throw new o("Unsupported character: "+t)}(i,n),u=m[0],p=m[1];return qt(i,u,n,e,s.concat(p))}if(l){var d,f;if("boldsymbol"===l||"mathnormal"===l){var g="boldsymbol"===l?function(t,e,r,a){return Ct(t,"Math-BoldItalic",e).metrics?{fontName:"Math-BoldItalic",fontClass:"boldsymbol"}:{fontName:"Main-Bold",fontClass:"mathbf"}}(i,n):(a=i,c.contains(Bt,a)?{fontName:"Main-Italic",fontClass:"mathit"}:/[0-9]/.test(a.charAt(0))?{fontName:"Caligraphic-Regular",fontClass:"mathcal"}:{fontName:"Math-Italic",fontClass:"mathdefault"});d=g.fontName,f=[g.fontClass]}else c.contains(Bt,i)?(d="Main-Italic",f=["mathit"]):h?(d=Ht[l].fontName,f=[l]):(d=Lt(l,e.fontWeight,e.fontShape),f=[l,e.fontWeight,e.fontShape]);if(Ct(i,d,n).metrics)return qt(i,d,n,e,s.concat(f));if(rt.hasOwnProperty(i)&&"Typewriter"===d.substr(0,10)){for(var x=[],v=0;v<i.length;v++)x.push(qt(i[v],d,n,e,s.concat(f)));return Et(x)}}if("mathord"===r){var b=function(t,e,r,a){return/[0-9]/.test(t.charAt(0))||c.contains(Bt,t)?{fontName:"Main-Italic",fontClass:"mathit"}:{fontName:"Math-Italic",fontClass:"mathdefault"}}(i);return qt(i,b.fontName,n,e,s.concat([b.fontClass]))}if("textord"===r){var y=j[n][i]&&j[n][i].font;if("ams"===y){var w=Lt("amsrm",e.fontWeight,e.fontShape);return qt(i,w,n,e,s.concat("amsrm",e.fontWeight,e.fontShape))}if("main"!==y&&y){var k=Lt(y,e.fontWeight,e.fontShape);return qt(i,k,n,e,s.concat(k,e.fontWeight,e.fontShape))}var S=Lt("textrm",e.fontWeight,e.fontShape);return qt(i,S,n,e,s.concat(e.fontWeight,e.fontShape))}throw new Error("unexpected type: "+r+" in makeOrd")},makeGlue:function(t,e){var r=Rt(["mspace"],[],e),a=Tt(t,e);return r.style.marginRight=a+"em",r},staticSvg:function(t,e){var r=Pt[t],a=r[0],n=r[1],i=r[2],o=new H(a),s=new L([o],{width:n+"em",height:i+"em",style:"width:"+n+"em",viewBox:"0 0 "+1e3*n+" "+1e3*i,preserveAspectRatio:"xMinYMin"}),h=Ot(["overlay"],[s],e);return h.height=i,h.style.height=i+"em",h.style.width=n+"em",h},svgData:Pt,tryCombineChars:function(t){for(var e=0;e<t.length-1;e++){var r=t[e],a=t[e+1];r instanceof E&&a instanceof E&&Nt(r,a)&&(r.text+=a.text,r.height=Math.max(r.height,a.height),r.depth=Math.max(r.depth,a.depth),r.italic=a.italic,t.splice(e+1,1),e--)}return t}};function Ft(t,e){var r=Vt(t,e);if(!r)throw new Error("Expected node of type "+e+", but got "+(t?"node of type "+t.type:String(t)));return r}function Vt(t,e){return t&&t.type===e?t:null}function Ut(t,e){var r=function(t,e){return t&&"atom"===t.type&&t.family===e?t:null}(t,e);if(!r)throw new Error('Expected node of type "atom" and family "'+e+'", but got '+(t?"atom"===t.type?"atom of family "+t.family:"node of type "+t.type:String(t)));return r}function Gt(t){var e=Yt(t);if(!e)throw new Error("Expected node of symbol group type, but got "+(t?"node of type "+t.type:String(t)));return e}function Yt(t){return t&&("atom"===t.type||X.hasOwnProperty(t.type))?t:null}var Wt={number:3,unit:"mu"},Xt={number:4,unit:"mu"},_t={number:5,unit:"mu"},jt={mord:{mop:Wt,mbin:Xt,mrel:_t,minner:Wt},mop:{mord:Wt,mop:Wt,mrel:_t,minner:Wt},mbin:{mord:Xt,mop:Xt,mopen:Xt,minner:Xt},mrel:{mord:_t,mop:_t,mopen:_t,minner:_t},mopen:{},mclose:{mop:Wt,mbin:Xt,mrel:_t,minner:Wt},mpunct:{mord:Wt,mop:Wt,mrel:_t,mopen:Wt,mclose:Wt,mpunct:Wt,minner:Wt},minner:{mord:Wt,mop:Wt,mbin:Xt,mrel:_t,mopen:Wt,mpunct:Wt,minner:Wt}},$t={mord:{mop:Wt},mop:{mord:Wt,mop:Wt},mbin:{},mrel:{},mopen:{},mclose:{mop:Wt},mpunct:{},minner:{mop:Wt}},Zt={},Kt={},Jt={};function Qt(t){for(var e=t.type,r=t.names,a=t.props,n=t.handler,i=t.htmlBuilder,o=t.mathmlBuilder,s={type:e,numArgs:a.numArgs,argTypes:a.argTypes,greediness:void 0===a.greediness?1:a.greediness,allowedInText:!!a.allowedInText,allowedInMath:void 0===a.allowedInMath||a.allowedInMath,numOptionalArgs:a.numOptionalArgs||0,infix:!!a.infix,handler:n},h=0;h<r.length;++h)Zt[r[h]]=s;e&&(i&&(Kt[e]=i),o&&(Jt[e]=o))}function te(t){Qt({type:t.type,names:[],props:{numArgs:0},handler:function(){throw new Error("Should never be called.")},htmlBuilder:t.htmlBuilder,mathmlBuilder:t.mathmlBuilder})}var ee=function(t){var e=Vt(t,"ordgroup");return e?e.body:[t]},re=Dt.makeSpan,ae=["leftmost","mbin","mopen","mrel","mop","mpunct"],ne=["rightmost","mrel","mclose","mpunct"],ie={display:w.DISPLAY,text:w.TEXT,script:w.SCRIPT,scriptscript:w.SCRIPTSCRIPT},oe={mord:"mord",mop:"mop",mbin:"mbin",mrel:"mrel",mopen:"mopen",mclose:"mclose",mpunct:"mpunct",minner:"minner"},se=function(t,e,r,a){void 0===a&&(a=[null,null]);for(var n=[],i=0;i<t.length;i++){var o=ue(t[i],e);if(o instanceof A){var s=o.children;n.push.apply(n,s)}else n.push(o)}if(!r)return n;var h=e;if(1===t.length){var l=Vt(t[0],"sizing")||Vt(t[0],"styling");l&&("sizing"===l.type?h=e.havingSize(l.size):"styling"===l.type&&(h=e.havingStyle(ie[l.style])))}var m=re([a[0]||"leftmost"],[],e),u=re([a[1]||"rightmost"],[],e);return he(n,function(t,e){var r=e.classes[0],a=t.classes[0];"mbin"===r&&c.contains(ne,a)?e.classes[0]="mord":"mbin"===a&&c.contains(ae,r)&&(t.classes[0]="mord")},{node:m},u),he(n,function(t,e){var r=me(e),a=me(t),n=r&&a?t.hasClass("mtight")?$t[r][a]:jt[r][a]:null;if(n)return Dt.makeGlue(n,h)},{node:m},u),n},he=function t(e,r,a,n){n&&e.push(n);for(var i=0;i<e.length;i++){var o=e[i],s=le(o);if(s)t(s.children,r,a);else if("mspace"!==o.classes[0]){var h=r(o,a.node);h&&(a.insertAfter?a.insertAfter(h):(e.unshift(h),i++)),a.node=o,a.insertAfter=function(t){return function(r){e.splice(t+1,0,r),i++}}(i)}}n&&e.pop()},le=function(t){return t instanceof A||t instanceof I?t:null},me=function(t,e){return t?(e&&(t=function t(e,r){var a=le(e);if(a){var n=a.children;if(n.length){if("right"===r)return t(n[n.length-1],"right");if("left"===r)return t(n[0],"left")}}return e}(t,e)),oe[t.classes[0]]||null):null},ce=function(t,e){var r=["nulldelimiter"].concat(t.baseSizingClasses());return re(e.concat(r))},ue=function(t,e,r){if(!t)return re();if(Kt[t.type]){var a=Kt[t.type](t,e);if(r&&e.size!==r.size){a=re(e.sizingClasses(r),[a],e);var n=e.sizeMultiplier/r.sizeMultiplier;a.height*=n,a.depth*=n}return a}throw new o("Got group of unknown type: '"+t.type+"'")};function pe(t,e){var r=re(["base"],t,e),a=re(["strut"]);return a.style.height=r.height+r.depth+"em",a.style.verticalAlign=-r.depth+"em",r.children.unshift(a),r}function de(t,e){var r=null;1===t.length&&"tag"===t[0].type&&(r=t[0].tag,t=t[0].body);for(var a,n=se(t,e,!0),i=[],o=[],s=0;s<n.length;s++)if(o.push(n[s]),n[s].hasClass("mbin")||n[s].hasClass("mrel")||n[s].hasClass("allowbreak")){for(var h=!1;s<n.length-1&&n[s+1].hasClass("mspace")&&!n[s+1].hasClass("newline");)s++,o.push(n[s]),n[s].hasClass("nobreak")&&(h=!0);h||(i.push(pe(o,e)),o=[])}else n[s].hasClass("newline")&&(o.pop(),o.length>0&&(i.push(pe(o,e)),o=[]),i.push(n[s]));o.length>0&&i.push(pe(o,e)),r&&((a=pe(se(r,e,!0))).classes=["tag"],i.push(a));var l=re(["katex-html"],i);if(l.setAttribute("aria-hidden","true"),a){var m=a.children[0];m.style.height=l.height+l.depth+"em",m.style.verticalAlign=-l.depth+"em"}return l}function fe(t){return new A(t)}var ge=function(){function t(t,e){this.type=void 0,this.attributes=void 0,this.children=void 0,this.type=t,this.attributes={},this.children=e||[]}var e=t.prototype;return e.setAttribute=function(t,e){this.attributes[t]=e},e.getAttribute=function(t){return this.attributes[t]},e.toNode=function(){var t=document.createElementNS("http://www.w3.org/1998/Math/MathML",this.type);for(var e in this.attributes)Object.prototype.hasOwnProperty.call(this.attributes,e)&&t.setAttribute(e,this.attributes[e]);for(var r=0;r<this.children.length;r++)t.appendChild(this.children[r].toNode());return t},e.toMarkup=function(){var t="<"+this.type;for(var e in this.attributes)Object.prototype.hasOwnProperty.call(this.attributes,e)&&(t+=" "+e+'="',t+=c.escape(this.attributes[e]),t+='"');t+=">";for(var r=0;r<this.children.length;r++)t+=this.children[r].toMarkup();return t+="</"+this.type+">"},e.toText=function(){return this.children.map(function(t){return t.toText()}).join("")},t}(),xe=function(){function t(t){this.text=void 0,this.text=t}var e=t.prototype;return e.toNode=function(){return document.createTextNode(this.text)},e.toMarkup=function(){return c.escape(this.toText())},e.toText=function(){return this.text},t}(),ve={MathNode:ge,TextNode:xe,SpaceNode:function(){function t(t){this.width=void 0,this.character=void 0,this.width=t,this.character=t>=.05555&&t<=.05556?"\u200a":t>=.1666&&t<=.1667?"\u2009":t>=.2222&&t<=.2223?"\u2005":t>=.2777&&t<=.2778?"\u2005\u200a":t>=-.05556&&t<=-.05555?"\u200a\u2063":t>=-.1667&&t<=-.1666?"\u2009\u2063":t>=-.2223&&t<=-.2222?"\u205f\u2063":t>=-.2778&&t<=-.2777?"\u2005\u2063":null}var e=t.prototype;return e.toNode=function(){if(this.character)return document.createTextNode(this.character);var t=document.createElementNS("http://www.w3.org/1998/Math/MathML","mspace");return t.setAttribute("width",this.width+"em"),t},e.toMarkup=function(){return this.character?"<mtext>"+this.character+"</mtext>":'<mspace width="'+this.width+'em"/>'},e.toText=function(){return this.character?this.character:" "},t}(),newDocumentFragment:fe},be=function(t,e,r){return!j[e][t]||!j[e][t].replace||55349===t.charCodeAt(0)||rt.hasOwnProperty(t)&&r&&(r.fontFamily&&"tt"===r.fontFamily.substr(4,2)||r.font&&"tt"===r.font.substr(4,2))||(t=j[e][t].replace),new ve.TextNode(t)},ye=function(t){return 1===t.length?t[0]:new ve.MathNode("mrow",t)},we=function(t,e){if("texttt"===e.fontFamily)return"monospace";if("textsf"===e.fontFamily)return"textit"===e.fontShape&&"textbf"===e.fontWeight?"sans-serif-bold-italic":"textit"===e.fontShape?"sans-serif-italic":"textbf"===e.fontWeight?"bold-sans-serif":"sans-serif";if("textit"===e.fontShape&&"textbf"===e.fontWeight)return"bold-italic";if("textit"===e.fontShape)return"italic";if("textbf"===e.fontWeight)return"bold";var r=e.font;if(!r||"mathnormal"===r)return null;var a=t.mode;if("mathit"===r)return"italic";if("boldsymbol"===r)return"bold-italic";if("mathbf"===r)return"bold";if("mathbb"===r)return"double-struck";if("mathfrak"===r)return"fraktur";if("mathscr"===r||"mathcal"===r)return"script";if("mathsf"===r)return"sans-serif";if("mathtt"===r)return"monospace";var n=t.text;return c.contains(["\\imath","\\jmath"],n)?null:(j[a][n]&&j[a][n].replace&&(n=j[a][n].replace),G(n,Dt.fontMap[r].fontName,a)?Dt.fontMap[r].variant:null)},ke=function(t,e,r){if(1===t.length){var a=Me(t[0],e);return r&&a instanceof ge&&"mo"===a.type&&(a.setAttribute("lspace","0em"),a.setAttribute("rspace","0em")),[a]}for(var n,i=[],o=0;o<t.length;o++){var s=Me(t[o],e);if(s instanceof ge&&n instanceof ge){if("mtext"===s.type&&"mtext"===n.type&&s.getAttribute("mathvariant")===n.getAttribute("mathvariant")){var h;(h=n.children).push.apply(h,s.children);continue}if("mn"===s.type&&"mn"===n.type){var l;(l=n.children).push.apply(l,s.children);continue}if("mi"===s.type&&1===s.children.length&&"mn"===n.type){var m=s.children[0];if(m instanceof xe&&"."===m.text){var c;(c=n.children).push.apply(c,s.children);continue}}else if("mi"===n.type&&1===n.children.length){var u=n.children[0];if(u instanceof xe&&"\u0338"===u.text&&("mo"===s.type||"mi"===s.type||"mn"===s.type)){var p=s.children[0];p instanceof xe&&p.text.length>0&&(p.text=p.text.slice(0,1)+"\u0338"+p.text.slice(1),i.pop())}}}i.push(s),n=s}return i},Se=function(t,e,r){return ye(ke(t,e,r))},Me=function(t,e){if(!t)return new ve.MathNode("mrow");if(Jt[t.type])return Jt[t.type](t,e);throw new o("Got group of unknown type: '"+t.type+"'")};function ze(t,e,r,a){var n,i=ke(t,r);n=1===i.length&&i[0]instanceof ge&&c.contains(["mrow","mtable"],i[0].type)?i[0]:new ve.MathNode("mrow",i);var o=new ve.MathNode("annotation",[new ve.TextNode(e)]);o.setAttribute("encoding","application/x-tex");var s=new ve.MathNode("semantics",[n,o]),h=new ve.MathNode("math",[s]);h.setAttribute("xmlns","http://www.w3.org/1998/Math/MathML");var l=a?"katex":"katex-mathml";return Dt.makeSpan([l],[h])}var Ae=function(t){return new St({style:t.displayMode?w.DISPLAY:w.TEXT,maxSize:t.maxSize,minRuleThickness:t.minRuleThickness})},Te=function(t,e){if(e.displayMode){var r=["katex-display"];e.leqno&&r.push("leqno"),e.fleqn&&r.push("fleqn"),t=Dt.makeSpan(r,[t])}return t},Be=function(t,e,r){var a,n=Ae(r);if("mathml"===r.output)return ze(t,e,n,!0);if("html"===r.output){var i=de(t,n);a=Dt.makeSpan(["katex"],[i])}else{var o=ze(t,e,n,!1),s=de(t,n);a=Dt.makeSpan(["katex"],[o,s])}return Te(a,r)},Ce={widehat:"^",widecheck:"\u02c7",widetilde:"~",utilde:"~",overleftarrow:"\u2190",underleftarrow:"\u2190",xleftarrow:"\u2190",overrightarrow:"\u2192",underrightarrow:"\u2192",xrightarrow:"\u2192",underbrace:"\u23df",overbrace:"\u23de",overgroup:"\u23e0",undergroup:"\u23e1",overleftrightarrow:"\u2194",underleftrightarrow:"\u2194",xleftrightarrow:"\u2194",Overrightarrow:"\u21d2",xRightarrow:"\u21d2",overleftharpoon:"\u21bc",xleftharpoonup:"\u21bc",overrightharpoon:"\u21c0",xrightharpoonup:"\u21c0",xLeftarrow:"\u21d0",xLeftrightarrow:"\u21d4",xhookleftarrow:"\u21a9",xhookrightarrow:"\u21aa",xmapsto:"\u21a6",xrightharpoondown:"\u21c1",xleftharpoondown:"\u21bd",xrightleftharpoons:"\u21cc",xleftrightharpoons:"\u21cb",xtwoheadleftarrow:"\u219e",xtwoheadrightarrow:"\u21a0",xlongequal:"=",xtofrom:"\u21c4",xrightleftarrows:"\u21c4",xrightequilibrium:"\u21cc",xleftequilibrium:"\u21cb"},qe={overrightarrow:[["rightarrow"],.888,522,"xMaxYMin"],overleftarrow:[["leftarrow"],.888,522,"xMinYMin"],underrightarrow:[["rightarrow"],.888,522,"xMaxYMin"],underleftarrow:[["leftarrow"],.888,522,"xMinYMin"],xrightarrow:[["rightarrow"],1.469,522,"xMaxYMin"],xleftarrow:[["leftarrow"],1.469,522,"xMinYMin"],Overrightarrow:[["doublerightarrow"],.888,560,"xMaxYMin"],xRightarrow:[["doublerightarrow"],1.526,560,"xMaxYMin"],xLeftarrow:[["doubleleftarrow"],1.526,560,"xMinYMin"],overleftharpoon:[["leftharpoon"],.888,522,"xMinYMin"],xleftharpoonup:[["leftharpoon"],.888,522,"xMinYMin"],xleftharpoondown:[["leftharpoondown"],.888,522,"xMinYMin"],overrightharpoon:[["rightharpoon"],.888,522,"xMaxYMin"],xrightharpoonup:[["rightharpoon"],.888,522,"xMaxYMin"],xrightharpoondown:[["rightharpoondown"],.888,522,"xMaxYMin"],xlongequal:[["longequal"],.888,334,"xMinYMin"],xtwoheadleftarrow:[["twoheadleftarrow"],.888,334,"xMinYMin"],xtwoheadrightarrow:[["twoheadrightarrow"],.888,334,"xMaxYMin"],overleftrightarrow:[["leftarrow","rightarrow"],.888,522],overbrace:[["leftbrace","midbrace","rightbrace"],1.6,548],underbrace:[["leftbraceunder","midbraceunder","rightbraceunder"],1.6,548],underleftrightarrow:[["leftarrow","rightarrow"],.888,522],xleftrightarrow:[["leftarrow","rightarrow"],1.75,522],xLeftrightarrow:[["doubleleftarrow","doublerightarrow"],1.75,560],xrightleftharpoons:[["leftharpoondownplus","rightharpoonplus"],1.75,716],xleftrightharpoons:[["leftharpoonplus","rightharpoondownplus"],1.75,716],xhookleftarrow:[["leftarrow","righthook"],1.08,522],xhookrightarrow:[["lefthook","rightarrow"],1.08,522],overlinesegment:[["leftlinesegment","rightlinesegment"],.888,522],underlinesegment:[["leftlinesegment","rightlinesegment"],.888,522],overgroup:[["leftgroup","rightgroup"],.888,342],undergroup:[["leftgroupunder","rightgroupunder"],.888,342],xmapsto:[["leftmapsto","rightarrow"],1.5,522],xtofrom:[["leftToFrom","rightToFrom"],1.75,528],xrightleftarrows:[["baraboveleftarrow","rightarrowabovebar"],1.75,901],xrightequilibrium:[["baraboveshortleftharpoon","rightharpoonaboveshortbar"],1.75,716],xleftequilibrium:[["shortbaraboveleftharpoon","shortrightharpoonabovebar"],1.75,716]},Ne=function(t){return"ordgroup"===t.type?t.body.length:1},Ie=function(t,e,r,a){var n,i=t.height+t.depth+2*r;if(/fbox|color/.test(e)){if(n=Dt.makeSpan(["stretchy",e],[],a),"fbox"===e){var o=a.color&&a.getColor();o&&(n.style.borderColor=o)}}else{var s=[];/^[bx]cancel$/.test(e)&&s.push(new P({x1:"0",y1:"0",x2:"100%",y2:"100%","stroke-width":"0.046em"})),/^x?cancel$/.test(e)&&s.push(new P({x1:"0",y1:"100%",x2:"100%",y2:"0","stroke-width":"0.046em"}));var h=new L(s,{width:"100%",height:i+"em"});n=Dt.makeSvgSpan([],[h],a)}return n.height=i,n.style.height=i+"em",n},Re=function(t){var e=new ve.MathNode("mo",[new ve.TextNode(Ce[t.substr(1)])]);return e.setAttribute("stretchy","true"),e},Oe=function(t,e){var r=function(){var r=4e5,a=t.label.substr(1);if(c.contains(["widehat","widecheck","widetilde","utilde"],a)){var n,i,o,s=Ne(t.base);if(s>5)"widehat"===a||"widecheck"===a?(n=420,r=2364,o=.42,i=a+"4"):(n=312,r=2340,o=.34,i="tilde4");else{var h=[1,1,2,2,3,3][s];"widehat"===a||"widecheck"===a?(r=[0,1062,2364,2364,2364][h],n=[0,239,300,360,420][h],o=[0,.24,.3,.3,.36,.42][h],i=a+h):(r=[0,600,1033,2339,2340][h],n=[0,260,286,306,312][h],o=[0,.26,.286,.3,.306,.34][h],i="tilde"+h)}var l=new H(i),m=new L([l],{width:"100%",height:o+"em",viewBox:"0 0 "+r+" "+n,preserveAspectRatio:"none"});return{span:Dt.makeSvgSpan([],[m],e),minWidth:0,height:o}}var u,p,d=[],f=qe[a],g=f[0],x=f[1],v=f[2],b=v/1e3,y=g.length;if(1===y)u=["hide-tail"],p=[f[3]];else if(2===y)u=["halfarrow-left","halfarrow-right"],p=["xMinYMin","xMaxYMin"];else{if(3!==y)throw new Error("Correct katexImagesData or update code here to support\n                    "+y+" children.");u=["brace-left","brace-center","brace-right"],p=["xMinYMin","xMidYMin","xMaxYMin"]}for(var w=0;w<y;w++){var k=new H(g[w]),S=new L([k],{width:"400em",height:b+"em",viewBox:"0 0 "+r+" "+v,preserveAspectRatio:p[w]+" slice"}),M=Dt.makeSvgSpan([u[w]],[S],e);if(1===y)return{span:M,minWidth:x,height:b};M.style.height=b+"em",d.push(M)}return{span:Dt.makeSpan(["stretchy"],d,e),minWidth:x,height:b}}(),a=r.span,n=r.minWidth,i=r.height;return a.height=i,a.style.height=i+"em",n>0&&(a.style.minWidth=n+"em"),a},Ee=function(t,e){var r,a,n,i=Vt(t,"supsub");i?(r=(a=Ft(i.base,"accent")).base,i.base=r,n=function(t){if(t instanceof N)return t;throw new Error("Expected span<HtmlDomNode> but got "+String(t)+".")}(ue(i,e)),i.base=a):r=(a=Ft(t,"accent")).base;var o=ue(r,e.havingCrampedStyle()),s=0;if(a.isShifty&&c.isCharacterBox(r)){var h=c.getBaseElem(r);s=D(ue(h,e.havingCrampedStyle())).skew}var l,m=Math.min(o.height,e.fontMetrics().xHeight);if(a.isStretchy)l=Oe(a,e),l=Dt.makeVList({positionType:"firstBaseline",children:[{type:"elem",elem:o},{type:"elem",elem:l,wrapperClasses:["svg-align"],wrapperStyle:s>0?{width:"calc(100% - "+2*s+"em)",marginLeft:2*s+"em"}:void 0}]},e);else{var u,p;"\\vec"===a.label?(u=Dt.staticSvg("vec",e),p=Dt.svgData.vec[1]):((u=D(u=Dt.makeOrd({mode:a.mode,text:a.label},e,"textord"))).italic=0,p=u.width),l=Dt.makeSpan(["accent-body"],[u]);var d="\\textcircled"===a.label;d&&(l.classes.push("accent-full"),m=o.height);var f=s;d||(f-=p/2),l.style.left=f+"em","\\textcircled"===a.label&&(l.style.top=".2em"),l=Dt.makeVList({positionType:"firstBaseline",children:[{type:"elem",elem:o},{type:"kern",size:-m},{type:"elem",elem:l}]},e)}var g=Dt.makeSpan(["mord","accent"],[l],e);return n?(n.children[0]=g,n.height=Math.max(g.height,n.height),n.classes[0]="mord",n):g},Le=function(t,e){var r=t.isStretchy?Re(t.label):new ve.MathNode("mo",[be(t.label,t.mode)]),a=new ve.MathNode("mover",[Me(t.base,e),r]);return a.setAttribute("accent","true"),a},He=new RegExp(["\\acute","\\grave","\\ddot","\\tilde","\\bar","\\breve","\\check","\\hat","\\vec","\\dot","\\mathring"].map(function(t){return"\\"+t}).join("|"));Qt({type:"accent",names:["\\acute","\\grave","\\ddot","\\tilde","\\bar","\\breve","\\check","\\hat","\\vec","\\dot","\\mathring","\\widecheck","\\widehat","\\widetilde","\\overrightarrow","\\overleftarrow","\\Overrightarrow","\\overleftrightarrow","\\overgroup","\\overlinesegment","\\overleftharpoon","\\overrightharpoon"],props:{numArgs:1},handler:function(t,e){var r=e[0],a=!He.test(t.funcName),n=!a||"\\widehat"===t.funcName||"\\widetilde"===t.funcName||"\\widecheck"===t.funcName;return{type:"accent",mode:t.parser.mode,label:t.funcName,isStretchy:a,isShifty:n,base:r}},htmlBuilder:Ee,mathmlBuilder:Le}),Qt({type:"accent",names:["\\'","\\`","\\^","\\~","\\=","\\u","\\.",'\\"',"\\r","\\H","\\v","\\textcircled"],props:{numArgs:1,allowedInText:!0,allowedInMath:!1},handler:function(t,e){var r=e[0];return{type:"accent",mode:t.parser.mode,label:t.funcName,isStretchy:!1,isShifty:!0,base:r}},htmlBuilder:Ee,mathmlBuilder:Le}),Qt({type:"accentUnder",names:["\\underleftarrow","\\underrightarrow","\\underleftrightarrow","\\undergroup","\\underlinesegment","\\utilde"],props:{numArgs:1},handler:function(t,e){var r=t.parser,a=t.funcName,n=e[0];return{type:"accentUnder",mode:r.mode,label:a,base:n}},htmlBuilder:function(t,e){var r=ue(t.base,e),a=Oe(t,e),n="\\utilde"===t.label?.12:0,i=Dt.makeVList({positionType:"bottom",positionData:a.height+n,children:[{type:"elem",elem:a,wrapperClasses:["svg-align"]},{type:"kern",size:n},{type:"elem",elem:r}]},e);return Dt.makeSpan(["mord","accentunder"],[i],e)},mathmlBuilder:function(t,e){var r=Re(t.label),a=new ve.MathNode("munder",[Me(t.base,e),r]);return a.setAttribute("accentunder","true"),a}});var Pe=function(t){var e=new ve.MathNode("mpadded",t?[t]:[]);return e.setAttribute("width","+0.6em"),e.setAttribute("lspace","0.3em"),e};Qt({type:"xArrow",names:["\\xleftarrow","\\xrightarrow","\\xLeftarrow","\\xRightarrow","\\xleftrightarrow","\\xLeftrightarrow","\\xhookleftarrow","\\xhookrightarrow","\\xmapsto","\\xrightharpoondown","\\xrightharpoonup","\\xleftharpoondown","\\xleftharpoonup","\\xrightleftharpoons","\\xleftrightharpoons","\\xlongequal","\\xtwoheadrightarrow","\\xtwoheadleftarrow","\\xtofrom","\\xrightleftarrows","\\xrightequilibrium","\\xleftequilibrium"],props:{numArgs:1,numOptionalArgs:1},handler:function(t,e,r){var a=t.parser,n=t.funcName;return{type:"xArrow",mode:a.mode,label:n,body:e[0],below:r[0]}},htmlBuilder:function(t,e){var r,a=e.style,n=e.havingStyle(a.sup()),i=Dt.wrapFragment(ue(t.body,n,e),e);i.classes.push("x-arrow-pad"),t.below&&(n=e.havingStyle(a.sub()),(r=Dt.wrapFragment(ue(t.below,n,e),e)).classes.push("x-arrow-pad"));var o,s=Oe(t,e),h=-e.fontMetrics().axisHeight+.5*s.height,l=-e.fontMetrics().axisHeight-.5*s.height-.111;if((i.depth>.25||"\\xleftequilibrium"===t.label)&&(l-=i.depth),r){var m=-e.fontMetrics().axisHeight+r.height+.5*s.height+.111;o=Dt.makeVList({positionType:"individualShift",children:[{type:"elem",elem:i,shift:l},{type:"elem",elem:s,shift:h},{type:"elem",elem:r,shift:m}]},e)}else o=Dt.makeVList({positionType:"individualShift",children:[{type:"elem",elem:i,shift:l},{type:"elem",elem:s,shift:h}]},e);return o.children[0].children[0].children[1].classes.push("svg-align"),Dt.makeSpan(["mrel","x-arrow"],[o],e)},mathmlBuilder:function(t,e){var r,a=Re(t.label);if(t.body){var n=Pe(Me(t.body,e));if(t.below){var i=Pe(Me(t.below,e));r=new ve.MathNode("munderover",[a,i,n])}else r=new ve.MathNode("mover",[a,n])}else if(t.below){var o=Pe(Me(t.below,e));r=new ve.MathNode("munder",[a,o])}else r=Pe(),r=new ve.MathNode("mover",[a,r]);return r}}),Qt({type:"textord",names:["\\@char"],props:{numArgs:1,allowedInText:!0},handler:function(t,e){for(var r=t.parser,a=Ft(e[0],"ordgroup").body,n="",i=0;i<a.length;i++){n+=Ft(a[i],"textord").text}var s=parseInt(n);if(isNaN(s))throw new o("\\@char has non-numeric argument "+n);return{type:"textord",mode:r.mode,text:String.fromCharCode(s)}}});var De=function(t,e){var r=se(t.body,e.withColor(t.color),!1);return Dt.makeFragment(r)},Fe=function(t,e){var r=ke(t.body,e.withColor(t.color)),a=new ve.MathNode("mstyle",r);return a.setAttribute("mathcolor",t.color),a};Qt({type:"color",names:["\\textcolor"],props:{numArgs:2,allowedInText:!0,greediness:3,argTypes:["color","original"]},handler:function(t,e){var r=t.parser,a=Ft(e[0],"color-token").color,n=e[1];return{type:"color",mode:r.mode,color:a,body:ee(n)}},htmlBuilder:De,mathmlBuilder:Fe}),Qt({type:"color",names:["\\color"],props:{numArgs:1,allowedInText:!0,greediness:3,argTypes:["color"]},handler:function(t,e){var r=t.parser,a=t.breakOnTokenText,n=Ft(e[0],"color-token").color;r.gullet.macros.set("\\current@color",n);var i=r.parseExpression(!0,a);return{type:"color",mode:r.mode,color:n,body:i}},htmlBuilder:De,mathmlBuilder:Fe}),Qt({type:"cr",names:["\\cr","\\newline"],props:{numArgs:0,numOptionalArgs:1,argTypes:["size"],allowedInText:!0},handler:function(t,e,r){var a=t.parser,n=t.funcName,i=r[0],o="\\cr"===n,s=!1;return o||(s=!a.settings.displayMode||!a.settings.useStrictBehavior("newLineInDisplayMode","In LaTeX, \\\\ or \\newline does nothing in display mode")),{type:"cr",mode:a.mode,newLine:s,newRow:o,size:i&&Ft(i,"size").value}},htmlBuilder:function(t,e){if(t.newRow)throw new o("\\cr valid only within a tabular/array environment");var r=Dt.makeSpan(["mspace"],[],e);return t.newLine&&(r.classes.push("newline"),t.size&&(r.style.marginTop=Tt(t.size,e)+"em")),r},mathmlBuilder:function(t,e){var r=new ve.MathNode("mspace");return t.newLine&&(r.setAttribute("linebreak","newline"),t.size&&r.setAttribute("height",Tt(t.size,e)+"em")),r}});var Ve=function(t,e,r){var a=G(j.math[t]&&j.math[t].replace||t,e,r);if(!a)throw new Error("Unsupported symbol "+t+" and font size "+e+".");return a},Ue=function(t,e,r,a){var n=r.havingBaseStyle(e),i=Dt.makeSpan(a.concat(n.sizingClasses(r)),[t],r),o=n.sizeMultiplier/r.sizeMultiplier;return i.height*=o,i.depth*=o,i.maxFontSize=n.sizeMultiplier,i},Ge=function(t,e,r){var a=e.havingBaseStyle(r),n=(1-e.sizeMultiplier/a.sizeMultiplier)*e.fontMetrics().axisHeight;t.classes.push("delimcenter"),t.style.top=n+"em",t.height-=n,t.depth+=n},Ye=function(t,e,r,a,n,i){var o=function(t,e,r,a){return Dt.makeSymbol(t,"Size"+e+"-Regular",r,a)}(t,e,n,a),s=Ue(Dt.makeSpan(["delimsizing","size"+e],[o],a),w.TEXT,a,i);return r&&Ge(s,a,w.TEXT),s},We=function(t,e,r){var a;return a="Size1-Regular"===e?"delim-size1":"delim-size4",{type:"elem",elem:Dt.makeSpan(["delimsizinginner",a],[Dt.makeSpan([],[Dt.makeSymbol(t,e,r)])])}},Xe={type:"kern",size:-.005},_e=function(t,e,r,a,n,i){var o,s,h,l;o=h=l=t,s=null;var m="Size1-Regular";"\\uparrow"===t?h=l="\u23d0":"\\Uparrow"===t?h=l="\u2016":"\\downarrow"===t?o=h="\u23d0":"\\Downarrow"===t?o=h="\u2016":"\\updownarrow"===t?(o="\\uparrow",h="\u23d0",l="\\downarrow"):"\\Updownarrow"===t?(o="\\Uparrow",h="\u2016",l="\\Downarrow"):"["===t||"\\lbrack"===t?(o="\u23a1",h="\u23a2",l="\u23a3",m="Size4-Regular"):"]"===t||"\\rbrack"===t?(o="\u23a4",h="\u23a5",l="\u23a6",m="Size4-Regular"):"\\lfloor"===t||"\u230a"===t?(h=o="\u23a2",l="\u23a3",m="Size4-Regular"):"\\lceil"===t||"\u2308"===t?(o="\u23a1",h=l="\u23a2",m="Size4-Regular"):"\\rfloor"===t||"\u230b"===t?(h=o="\u23a5",l="\u23a6",m="Size4-Regular"):"\\rceil"===t||"\u2309"===t?(o="\u23a4",h=l="\u23a5",m="Size4-Regular"):"("===t||"\\lparen"===t?(o="\u239b",h="\u239c",l="\u239d",m="Size4-Regular"):")"===t||"\\rparen"===t?(o="\u239e",h="\u239f",l="\u23a0",m="Size4-Regular"):"\\{"===t||"\\lbrace"===t?(o="\u23a7",s="\u23a8",l="\u23a9",h="\u23aa",m="Size4-Regular"):"\\}"===t||"\\rbrace"===t?(o="\u23ab",s="\u23ac",l="\u23ad",h="\u23aa",m="Size4-Regular"):"\\lgroup"===t||"\u27ee"===t?(o="\u23a7",l="\u23a9",h="\u23aa",m="Size4-Regular"):"\\rgroup"===t||"\u27ef"===t?(o="\u23ab",l="\u23ad",h="\u23aa",m="Size4-Regular"):"\\lmoustache"===t||"\u23b0"===t?(o="\u23a7",l="\u23ad",h="\u23aa",m="Size4-Regular"):"\\rmoustache"!==t&&"\u23b1"!==t||(o="\u23ab",l="\u23a9",h="\u23aa",m="Size4-Regular");var c=Ve(o,m,n),u=c.height+c.depth,p=Ve(h,m,n),d=p.height+p.depth,f=Ve(l,m,n),g=f.height+f.depth,x=0,v=1;if(null!==s){var b=Ve(s,m,n);x=b.height+b.depth,v=2}var y=u+g+x,k=Math.max(0,Math.ceil((e-y)/(v*d))),S=y+k*v*d,M=a.fontMetrics().axisHeight;r&&(M*=a.sizeMultiplier);var z=S/2-M,A=.005*(k+1)-d,T=[];if(T.push(We(l,m,n)),null===s)for(var B=0;B<k;B++)T.push(Xe),T.push(We(h,m,n));else{for(var C=0;C<k;C++)T.push(Xe),T.push(We(h,m,n));T.push({type:"kern",size:A}),T.push(We(h,m,n)),T.push(Xe),T.push(We(s,m,n));for(var q=0;q<k;q++)T.push(Xe),T.push(We(h,m,n))}T.push({type:"kern",size:A}),T.push(We(h,m,n)),T.push(Xe),T.push(We(o,m,n));var N=a.havingBaseStyle(w.TEXT),I=Dt.makeVList({positionType:"bottom",positionData:z,children:T},N);return Ue(Dt.makeSpan(["delimsizing","mult"],[I],N),w.TEXT,a,i)},je=function(t,e,r,a,n){var i=function(t,e,r){e*=1e3;var a="";switch(t){case"sqrtMain":a=function(t,e){return"M95,"+(622+t+e)+"\nc-2.7,0,-7.17,-2.7,-13.5,-8c-5.8,-5.3,-9.5,-10,-9.5,-14\nc0,-2,0.3,-3.3,1,-4c1.3,-2.7,23.83,-20.7,67.5,-54\nc44.2,-33.3,65.8,-50.3,66.5,-51c1.3,-1.3,3,-2,5,-2c4.7,0,8.7,3.3,12,10\ns173,378,173,378c0.7,0,35.3,-71,104,-213c68.7,-142,137.5,-285,206.5,-429\nc69,-144,104.5,-217.7,106.5,-221\nl"+t/2.075+" -"+t+"\nc5.3,-9.3,12,-14,20,-14\nH400000v"+(40+t)+"H845.2724\ns-225.272,467,-225.272,467s-235,486,-235,486c-2.7,4.7,-9,7,-19,7\nc-6,0,-10,-1,-12,-3s-194,-422,-194,-422s-65,47,-65,47z\nM"+(834+t)+" "+e+"h400000v"+(40+t)+"h-400000z"}(e,80);break;case"sqrtSize1":a=function(t,e){return"M263,"+(601+t+e)+"c0.7,0,18,39.7,52,119\nc34,79.3,68.167,158.7,102.5,238c34.3,79.3,51.8,119.3,52.5,120\nc340,-704.7,510.7,-1060.3,512,-1067\nl"+t/2.084+" -"+t+"\nc4.7,-7.3,11,-11,19,-11\nH40000v"+(40+t)+"H1012.3\ns-271.3,567,-271.3,567c-38.7,80.7,-84,175,-136,283c-52,108,-89.167,185.3,-111.5,232\nc-22.3,46.7,-33.8,70.3,-34.5,71c-4.7,4.7,-12.3,7,-23,7s-12,-1,-12,-1\ns-109,-253,-109,-253c-72.7,-168,-109.3,-252,-110,-252c-10.7,8,-22,16.7,-34,26\nc-22,17.3,-33.3,26,-34,26s-26,-26,-26,-26s76,-59,76,-59s76,-60,76,-60z\nM"+(1001+t)+" "+e+"h400000v"+(40+t)+"h-400000z"}(e,80);break;case"sqrtSize2":a=function(t,e){return"M983 "+(10+t+e)+"\nl"+t/3.13+" -"+t+"\nc4,-6.7,10,-10,18,-10 H400000v"+(40+t)+"\nH1013.1s-83.4,268,-264.1,840c-180.7,572,-277,876.3,-289,913c-4.7,4.7,-12.7,7,-24,7\ns-12,0,-12,0c-1.3,-3.3,-3.7,-11.7,-7,-25c-35.3,-125.3,-106.7,-373.3,-214,-744\nc-10,12,-21,25,-33,39s-32,39,-32,39c-6,-5.3,-15,-14,-27,-26s25,-30,25,-30\nc26.7,-32.7,52,-63,76,-91s52,-60,52,-60s208,722,208,722\nc56,-175.3,126.3,-397.3,211,-666c84.7,-268.7,153.8,-488.2,207.5,-658.5\nc53.7,-170.3,84.5,-266.8,92.5,-289.5z\nM"+(1001+t)+" "+e+"h400000v"+(40+t)+"h-400000z"}(e,80);break;case"sqrtSize3":a=function(t,e){return"M424,"+(2398+t+e)+"\nc-1.3,-0.7,-38.5,-172,-111.5,-514c-73,-342,-109.8,-513.3,-110.5,-514\nc0,-2,-10.7,14.3,-32,49c-4.7,7.3,-9.8,15.7,-15.5,25c-5.7,9.3,-9.8,16,-12.5,20\ns-5,7,-5,7c-4,-3.3,-8.3,-7.7,-13,-13s-13,-13,-13,-13s76,-122,76,-122s77,-121,77,-121\ns209,968,209,968c0,-2,84.7,-361.7,254,-1079c169.3,-717.3,254.7,-1077.7,256,-1081\nl"+t/4.223+" -"+t+"c4,-6.7,10,-10,18,-10 H400000\nv"+(40+t)+"H1014.6\ns-87.3,378.7,-272.6,1166c-185.3,787.3,-279.3,1182.3,-282,1185\nc-2,6,-10,9,-24,9\nc-8,0,-12,-0.7,-12,-2z M"+(1001+t)+" "+e+"\nh400000v"+(40+t)+"h-400000z"}(e,80);break;case"sqrtSize4":a=function(t,e){return"M473,"+(2713+t+e)+"\nc339.3,-1799.3,509.3,-2700,510,-2702 l"+t/5.298+" -"+t+"\nc3.3,-7.3,9.3,-11,18,-11 H400000v"+(40+t)+"H1017.7\ns-90.5,478,-276.2,1466c-185.7,988,-279.5,1483,-281.5,1485c-2,6,-10,9,-24,9\nc-8,0,-12,-0.7,-12,-2c0,-1.3,-5.3,-32,-16,-92c-50.7,-293.3,-119.7,-693.3,-207,-1200\nc0,-1.3,-5.3,8.7,-16,30c-10.7,21.3,-21.3,42.7,-32,64s-16,33,-16,33s-26,-26,-26,-26\ns76,-153,76,-153s77,-151,77,-151c0.7,0.7,35.7,202,105,604c67.3,400.7,102,602.7,104,\n606zM"+(1001+t)+" "+e+"h400000v"+(40+t)+"H1017.7z"}(e,80);break;case"sqrtTall":a=function(t,e,r){return"M702 "+(t+e)+"H400000"+(40+t)+"\nH742v"+(r-54-e-t)+"l-4 4-4 4c-.667.7 -2 1.5-4 2.5s-4.167 1.833-6.5 2.5-5.5 1-9.5 1\nh-12l-28-84c-16.667-52-96.667 -294.333-240-727l-212 -643 -85 170\nc-4-3.333-8.333-7.667-13 -13l-13-13l77-155 77-156c66 199.333 139 419.667\n219 661 l218 661zM702 "+e+"H400000v"+(40+t)+"H742z"}(e,80,r)}return a}(t,a,r),o=new H(t,i),s=new L([o],{width:"400em",height:e+"em",viewBox:"0 0 400000 "+r,preserveAspectRatio:"xMinYMin slice"});return Dt.makeSvgSpan(["hide-tail"],[s],n)},$e=["(","\\lparen",")","\\rparen","[","\\lbrack","]","\\rbrack","\\{","\\lbrace","\\}","\\rbrace","\\lfloor","\\rfloor","\u230a","\u230b","\\lceil","\\rceil","\u2308","\u2309","\\surd"],Ze=["\\uparrow","\\downarrow","\\updownarrow","\\Uparrow","\\Downarrow","\\Updownarrow","|","\\|","\\vert","\\Vert","\\lvert","\\rvert","\\lVert","\\rVert","\\lgroup","\\rgroup","\u27ee","\u27ef","\\lmoustache","\\rmoustache","\u23b0","\u23b1"],Ke=["<",">","\\langle","\\rangle","/","\\backslash","\\lt","\\gt"],Je=[0,1.2,1.8,2.4,3],Qe=[{type:"small",style:w.SCRIPTSCRIPT},{type:"small",style:w.SCRIPT},{type:"small",style:w.TEXT},{type:"large",size:1},{type:"large",size:2},{type:"large",size:3},{type:"large",size:4}],tr=[{type:"small",style:w.SCRIPTSCRIPT},{type:"small",style:w.SCRIPT},{type:"small",style:w.TEXT},{type:"stack"}],er=[{type:"small",style:w.SCRIPTSCRIPT},{type:"small",style:w.SCRIPT},{type:"small",style:w.TEXT},{type:"large",size:1},{type:"large",size:2},{type:"large",size:3},{type:"large",size:4},{type:"stack"}],rr=function(t){if("small"===t.type)return"Main-Regular";if("large"===t.type)return"Size"+t.size+"-Regular";if("stack"===t.type)return"Size4-Regular";throw new Error("Add support for delim type '"+t.type+"' here.")},ar=function(t,e,r,a){for(var n=Math.min(2,3-a.style.size);n<r.length&&"stack"!==r[n].type;n++){var i=Ve(t,rr(r[n]),"math"),o=i.height+i.depth;if("small"===r[n].type&&(o*=a.havingBaseStyle(r[n].style).sizeMultiplier),o>e)return r[n]}return r[r.length-1]},nr=function(t,e,r,a,n,i){var o;"<"===t||"\\lt"===t||"\u27e8"===t?t="\\langle":">"!==t&&"\\gt"!==t&&"\u27e9"!==t||(t="\\rangle"),o=c.contains(Ke,t)?Qe:c.contains($e,t)?er:tr;var s=ar(t,e,o,a);return"small"===s.type?function(t,e,r,a,n,i){var o=Dt.makeSymbol(t,"Main-Regular",n,a),s=Ue(o,e,a,i);return r&&Ge(s,a,e),s}(t,s.style,r,a,n,i):"large"===s.type?Ye(t,s.size,r,a,n,i):_e(t,e,r,a,n,i)},ir=function(t,e){var r,a,n=e.havingBaseSizing(),i=ar("\\surd",t*n.sizeMultiplier,er,n),o=n.sizeMultiplier,s=Math.max(0,e.minRuleThickness-e.fontMetrics().sqrtRuleThickness),h=0,l=0,m=0;return"small"===i.type?(t<1?o=1:t<1.4&&(o=.7),l=(1+s)/o,(r=je("sqrtMain",h=(1+s+.08)/o,m=1e3+1e3*s+80,s,e)).style.minWidth="0.853em",a=.833/o):"large"===i.type?(m=1080*Je[i.size],l=(Je[i.size]+s)/o,h=(Je[i.size]+s+.08)/o,(r=je("sqrtSize"+i.size,h,m,s,e)).style.minWidth="1.02em",a=1/o):(h=t+s+.08,l=t+s,m=Math.floor(1e3*t+s)+80,(r=je("sqrtTall",h,m,s,e)).style.minWidth="0.742em",a=1.056),r.height=l,r.style.height=h+"em",{span:r,advanceWidth:a,ruleWidth:(e.fontMetrics().sqrtRuleThickness+s)*o}},or=function(t,e,r,a,n){if("<"===t||"\\lt"===t||"\u27e8"===t?t="\\langle":">"!==t&&"\\gt"!==t&&"\u27e9"!==t||(t="\\rangle"),c.contains($e,t)||c.contains(Ke,t))return Ye(t,e,!1,r,a,n);if(c.contains(Ze,t))return _e(t,Je[e],!1,r,a,n);throw new o("Illegal delimiter: '"+t+"'")},sr=nr,hr=function(t,e,r,a,n,i){var o=a.fontMetrics().axisHeight*a.sizeMultiplier,s=5/a.fontMetrics().ptPerEm,h=Math.max(e-o,r+o),l=Math.max(h/500*901,2*h-s);return nr(t,l,!0,a,n,i)},lr={"\\bigl":{mclass:"mopen",size:1},"\\Bigl":{mclass:"mopen",size:2},"\\biggl":{mclass:"mopen",size:3},"\\Biggl":{mclass:"mopen",size:4},"\\bigr":{mclass:"mclose",size:1},"\\Bigr":{mclass:"mclose",size:2},"\\biggr":{mclass:"mclose",size:3},"\\Biggr":{mclass:"mclose",size:4},"\\bigm":{mclass:"mrel",size:1},"\\Bigm":{mclass:"mrel",size:2},"\\biggm":{mclass:"mrel",size:3},"\\Biggm":{mclass:"mrel",size:4},"\\big":{mclass:"mord",size:1},"\\Big":{mclass:"mord",size:2},"\\bigg":{mclass:"mord",size:3},"\\Bigg":{mclass:"mord",size:4}},mr=["(","\\lparen",")","\\rparen","[","\\lbrack","]","\\rbrack","\\{","\\lbrace","\\}","\\rbrace","\\lfloor","\\rfloor","\u230a","\u230b","\\lceil","\\rceil","\u2308","\u2309","<",">","\\langle","\u27e8","\\rangle","\u27e9","\\lt","\\gt","\\lvert","\\rvert","\\lVert","\\rVert","\\lgroup","\\rgroup","\u27ee","\u27ef","\\lmoustache","\\rmoustache","\u23b0","\u23b1","/","\\backslash","|","\\vert","\\|","\\Vert","\\uparrow","\\Uparrow","\\downarrow","\\Downarrow","\\updownarrow","\\Updownarrow","."];function cr(t,e){var r=Yt(t);if(r&&c.contains(mr,r.text))return r;throw new o("Invalid delimiter: '"+(r?r.text:JSON.stringify(t))+"' after '"+e.funcName+"'",t)}function ur(t){if(!t.body)throw new Error("Bug: The leftright ParseNode wasn't fully parsed.")}Qt({type:"delimsizing",names:["\\bigl","\\Bigl","\\biggl","\\Biggl","\\bigr","\\Bigr","\\biggr","\\Biggr","\\bigm","\\Bigm","\\biggm","\\Biggm","\\big","\\Big","\\bigg","\\Bigg"],props:{numArgs:1},handler:function(t,e){var r=cr(e[0],t);return{type:"delimsizing",mode:t.parser.mode,size:lr[t.funcName].size,mclass:lr[t.funcName].mclass,delim:r.text}},htmlBuilder:function(t,e){return"."===t.delim?Dt.makeSpan([t.mclass]):or(t.delim,t.size,e,t.mode,[t.mclass])},mathmlBuilder:function(t){var e=[];"."!==t.delim&&e.push(be(t.delim,t.mode));var r=new ve.MathNode("mo",e);return"mopen"===t.mclass||"mclose"===t.mclass?r.setAttribute("fence","true"):r.setAttribute("fence","false"),r}}),Qt({type:"leftright-right",names:["\\right"],props:{numArgs:1},handler:function(t,e){var r=t.parser.gullet.macros.get("\\current@color");if(r&&"string"!=typeof r)throw new o("\\current@color set to non-string in \\right");return{type:"leftright-right",mode:t.parser.mode,delim:cr(e[0],t).text,color:r}}}),Qt({type:"leftright",names:["\\left"],props:{numArgs:1},handler:function(t,e){var r=cr(e[0],t),a=t.parser;++a.leftrightDepth;var n=a.parseExpression(!1);--a.leftrightDepth,a.expect("\\right",!1);var i=Ft(a.parseFunction(),"leftright-right");return{type:"leftright",mode:a.mode,body:n,left:r.text,right:i.delim,rightColor:i.color}},htmlBuilder:function(t,e){ur(t);for(var r,a,n=se(t.body,e,!0,["mopen","mclose"]),i=0,o=0,s=!1,h=0;h<n.length;h++)n[h].isMiddle?s=!0:(i=Math.max(n[h].height,i),o=Math.max(n[h].depth,o));if(i*=e.sizeMultiplier,o*=e.sizeMultiplier,r="."===t.left?ce(e,["mopen"]):hr(t.left,i,o,e,t.mode,["mopen"]),n.unshift(r),s)for(var l=1;l<n.length;l++){var m=n[l].isMiddle;m&&(n[l]=hr(m.delim,i,o,m.options,t.mode,[]))}if("."===t.right)a=ce(e,["mclose"]);else{var c=t.rightColor?e.withColor(t.rightColor):e;a=hr(t.right,i,o,c,t.mode,["mclose"])}return n.push(a),Dt.makeSpan(["minner"],n,e)},mathmlBuilder:function(t,e){ur(t);var r=ke(t.body,e);if("."!==t.left){var a=new ve.MathNode("mo",[be(t.left,t.mode)]);a.setAttribute("fence","true"),r.unshift(a)}if("."!==t.right){var n=new ve.MathNode("mo",[be(t.right,t.mode)]);n.setAttribute("fence","true"),t.rightColor&&n.setAttribute("mathcolor",t.rightColor),r.push(n)}return ye(r)}}),Qt({type:"middle",names:["\\middle"],props:{numArgs:1},handler:function(t,e){var r=cr(e[0],t);if(!t.parser.leftrightDepth)throw new o("\\middle without preceding \\left",r);return{type:"middle",mode:t.parser.mode,delim:r.text}},htmlBuilder:function(t,e){var r;if("."===t.delim)r=ce(e,[]);else{r=or(t.delim,1,e,t.mode,[]);var a={delim:t.delim,options:e};r.isMiddle=a}return r},mathmlBuilder:function(t,e){var r="\\vert"===t.delim||"|"===t.delim?be("|","text"):be(t.delim,t.mode),a=new ve.MathNode("mo",[r]);return a.setAttribute("fence","true"),a.setAttribute("lspace","0.05em"),a.setAttribute("rspace","0.05em"),a}});var pr=function(t,e){var r,a,n=Dt.wrapFragment(ue(t.body,e),e),i=t.label.substr(1),o=e.sizeMultiplier,s=0,h=c.isCharacterBox(t.body);if("sout"===i)(r=Dt.makeSpan(["stretchy","sout"])).height=e.fontMetrics().defaultRuleThickness/o,s=-.5*e.fontMetrics().xHeight;else{/cancel/.test(i)?h||n.classes.push("cancel-pad"):n.classes.push("boxpad");var l=0,m=0;/box/.test(i)?(m=Math.max(e.fontMetrics().fboxrule,e.minRuleThickness),l=e.fontMetrics().fboxsep+("colorbox"===i?0:m)):l=h?.2:0,r=Ie(n,i,l,e),/fbox|boxed|fcolorbox/.test(i)&&(r.style.borderStyle="solid",r.style.borderWidth=m+"em"),s=n.depth+l,t.backgroundColor&&(r.style.backgroundColor=t.backgroundColor,t.borderColor&&(r.style.borderColor=t.borderColor))}return a=t.backgroundColor?Dt.makeVList({positionType:"individualShift",children:[{type:"elem",elem:r,shift:s},{type:"elem",elem:n,shift:0}]},e):Dt.makeVList({positionType:"individualShift",children:[{type:"elem",elem:n,shift:0},{type:"elem",elem:r,shift:s,wrapperClasses:/cancel/.test(i)?["svg-align"]:[]}]},e),/cancel/.test(i)&&(a.height=n.height,a.depth=n.depth),/cancel/.test(i)&&!h?Dt.makeSpan(["mord","cancel-lap"],[a],e):Dt.makeSpan(["mord"],[a],e)},dr=function(t,e){var r=0,a=new ve.MathNode(t.label.indexOf("colorbox")>-1?"mpadded":"menclose",[Me(t.body,e)]);switch(t.label){case"\\cancel":a.setAttribute("notation","updiagonalstrike");break;case"\\bcancel":a.setAttribute("notation","downdiagonalstrike");break;case"\\sout":a.setAttribute("notation","horizontalstrike");break;case"\\fbox":a.setAttribute("notation","box");break;case"\\fcolorbox":case"\\colorbox":if(r=e.fontMetrics().fboxsep*e.fontMetrics().ptPerEm,a.setAttribute("width","+"+2*r+"pt"),a.setAttribute("height","+"+2*r+"pt"),a.setAttribute("lspace",r+"pt"),a.setAttribute("voffset",r+"pt"),"\\fcolorbox"===t.label){var n=Math.max(e.fontMetrics().fboxrule,e.minRuleThickness);a.setAttribute("style","border: "+n+"em solid "+String(t.borderColor))}break;case"\\xcancel":a.setAttribute("notation","updiagonalstrike downdiagonalstrike")}return t.backgroundColor&&a.setAttribute("mathbackground",t.backgroundColor),a};Qt({type:"enclose",names:["\\colorbox"],props:{numArgs:2,allowedInText:!0,greediness:3,argTypes:["color","text"]},handler:function(t,e,r){var a=t.parser,n=t.funcName,i=Ft(e[0],"color-token").color,o=e[1];return{type:"enclose",mode:a.mode,label:n,backgroundColor:i,body:o}},htmlBuilder:pr,mathmlBuilder:dr}),Qt({type:"enclose",names:["\\fcolorbox"],props:{numArgs:3,allowedInText:!0,greediness:3,argTypes:["color","color","text"]},handler:function(t,e,r){var a=t.parser,n=t.funcName,i=Ft(e[0],"color-token").color,o=Ft(e[1],"color-token").color,s=e[2];return{type:"enclose",mode:a.mode,label:n,backgroundColor:o,borderColor:i,body:s}},htmlBuilder:pr,mathmlBuilder:dr}),Qt({type:"enclose",names:["\\fbox"],props:{numArgs:1,argTypes:["hbox"],allowedInText:!0},handler:function(t,e){return{type:"enclose",mode:t.parser.mode,label:"\\fbox",body:e[0]}}}),Qt({type:"enclose",names:["\\cancel","\\bcancel","\\xcancel","\\sout"],props:{numArgs:1},handler:function(t,e,r){var a=t.parser,n=t.funcName,i=e[0];return{type:"enclose",mode:a.mode,label:n,body:i}},htmlBuilder:pr,mathmlBuilder:dr});var fr={};function gr(t){for(var e=t.type,r=t.names,a=t.props,n=t.handler,i=t.htmlBuilder,o=t.mathmlBuilder,s={type:e,numArgs:a.numArgs||0,greediness:1,allowedInText:!1,numOptionalArgs:0,handler:n},h=0;h<r.length;++h)fr[r[h]]=s;i&&(Kt[e]=i),o&&(Jt[e]=o)}function xr(t){var e=[];t.consumeSpaces();for(var r=t.fetch().text;"\\hline"===r||"\\hdashline"===r;)t.consume(),e.push("\\hdashline"===r),t.consumeSpaces(),r=t.fetch().text;return e}function vr(t,e,r){var a=e.hskipBeforeAndAfter,n=e.addJot,i=e.cols,s=e.arraystretch,h=e.colSeparationType;if(t.gullet.beginGroup(),t.gullet.macros.set("\\\\","\\cr"),!s){var l=t.gullet.expandMacroAsText("\\arraystretch");if(null==l)s=1;else if(!(s=parseFloat(l))||s<0)throw new o("Invalid \\arraystretch: "+l)}t.gullet.beginGroup();var m=[],c=[m],u=[],p=[];for(p.push(xr(t));;){var d=t.parseExpression(!1,"\\cr");t.gullet.endGroup(),t.gullet.beginGroup(),d={type:"ordgroup",mode:t.mode,body:d},r&&(d={type:"styling",mode:t.mode,style:r,body:[d]}),m.push(d);var f=t.fetch().text;if("&"===f)t.consume();else{if("\\end"===f){1===m.length&&"styling"===d.type&&0===d.body[0].body.length&&c.pop(),p.length<c.length+1&&p.push([]);break}if("\\cr"!==f)throw new o("Expected & or \\\\ or \\cr or \\end",t.nextToken);var g=Ft(t.parseFunction(),"cr");u.push(g.size),p.push(xr(t)),m=[],c.push(m)}}return t.gullet.endGroup(),t.gullet.endGroup(),{type:"array",mode:t.mode,addJot:n,arraystretch:s,body:c,cols:i,rowGaps:u,hskipBeforeAndAfter:a,hLinesBeforeRow:p,colSeparationType:h}}function br(t){return"d"===t.substr(0,1)?"display":"text"}var yr=function(t,e){var r,a,n=t.body.length,i=t.hLinesBeforeRow,s=0,h=new Array(n),l=[],m=Math.max(e.fontMetrics().arrayRuleWidth,e.minRuleThickness),u=1/e.fontMetrics().ptPerEm,p=5*u;t.colSeparationType&&"small"===t.colSeparationType&&(p=e.havingStyle(w.SCRIPT).sizeMultiplier/e.sizeMultiplier*.2778);var d=12*u,f=3*u,g=t.arraystretch*d,x=.7*g,v=.3*g,b=0;function y(t){for(var e=0;e<t.length;++e)e>0&&(b+=.25),l.push({pos:b,isDashed:t[e]})}for(y(i[0]),r=0;r<t.body.length;++r){var k=t.body[r],S=x,M=v;s<k.length&&(s=k.length);var z=new Array(k.length);for(a=0;a<k.length;++a){var A=ue(k[a],e);M<A.depth&&(M=A.depth),S<A.height&&(S=A.height),z[a]=A}var T=t.rowGaps[r],B=0;T&&(B=Tt(T,e))>0&&(M<(B+=v)&&(M=B),B=0),t.addJot&&(M+=f),z.height=S,z.depth=M,b+=S,z.pos=b,b+=M+B,h[r]=z,y(i[r+1])}var C,q,N=b/2+e.fontMetrics().axisHeight,I=t.cols||[],R=[];for(a=0,q=0;a<s||q<I.length;++a,++q){for(var O=I[q]||{},E=!0;"separator"===O.type;){if(E||((C=Dt.makeSpan(["arraycolsep"],[])).style.width=e.fontMetrics().doubleRuleSep+"em",R.push(C)),"|"!==O.separator&&":"!==O.separator)throw new o("Invalid separator type: "+O.separator);var L="|"===O.separator?"solid":"dashed",H=Dt.makeSpan(["vertical-separator"],[],e);H.style.height=b+"em",H.style.borderRightWidth=m+"em",H.style.borderRightStyle=L,H.style.margin="0 -"+m/2+"em",H.style.verticalAlign=-(b-N)+"em",R.push(H),O=I[++q]||{},E=!1}if(!(a>=s)){var P=void 0;(a>0||t.hskipBeforeAndAfter)&&0!==(P=c.deflt(O.pregap,p))&&((C=Dt.makeSpan(["arraycolsep"],[])).style.width=P+"em",R.push(C));var D=[];for(r=0;r<n;++r){var F=h[r],V=F[a];if(V){var U=F.pos-N;V.depth=F.depth,V.height=F.height,D.push({type:"elem",elem:V,shift:U})}}D=Dt.makeVList({positionType:"individualShift",children:D},e),D=Dt.makeSpan(["col-align-"+(O.align||"c")],[D]),R.push(D),(a<s-1||t.hskipBeforeAndAfter)&&0!==(P=c.deflt(O.postgap,p))&&((C=Dt.makeSpan(["arraycolsep"],[])).style.width=P+"em",R.push(C))}}if(h=Dt.makeSpan(["mtable"],R),l.length>0){for(var G=Dt.makeLineSpan("hline",e,m),Y=Dt.makeLineSpan("hdashline",e,m),W=[{type:"elem",elem:h,shift:0}];l.length>0;){var X=l.pop(),_=X.pos-N;X.isDashed?W.push({type:"elem",elem:Y,shift:_}):W.push({type:"elem",elem:G,shift:_})}h=Dt.makeVList({positionType:"individualShift",children:W},e)}return Dt.makeSpan(["mord"],[h],e)},wr={c:"center ",l:"left ",r:"right "},kr=function(t,e){var r=new ve.MathNode("mtable",t.body.map(function(t){return new ve.MathNode("mtr",t.map(function(t){return new ve.MathNode("mtd",[Me(t,e)])}))})),a=.5===t.arraystretch?.1:.16+t.arraystretch-1+(t.addJot?.09:0);r.setAttribute("rowspacing",a+"em");var n="",i="";if(t.cols){var o=t.cols,s="",h=!1,l=0,m=o.length;"separator"===o[0].type&&(n+="top ",l=1),"separator"===o[o.length-1].type&&(n+="bottom ",m-=1);for(var c=l;c<m;c++)"align"===o[c].type?(i+=wr[o[c].align],h&&(s+="none "),h=!0):"separator"===o[c].type&&h&&(s+="|"===o[c].separator?"solid ":"dashed ",h=!1);r.setAttribute("columnalign",i.trim()),/[sd]/.test(s)&&r.setAttribute("columnlines",s.trim())}if("align"===t.colSeparationType){for(var u=t.cols||[],p="",d=1;d<u.length;d++)p+=d%2?"0em ":"1em ";r.setAttribute("columnspacing",p.trim())}else"alignat"===t.colSeparationType?r.setAttribute("columnspacing","0em"):"small"===t.colSeparationType?r.setAttribute("columnspacing","0.2778em"):r.setAttribute("columnspacing","1em");var f="",g=t.hLinesBeforeRow;n+=g[0].length>0?"left ":"",n+=g[g.length-1].length>0?"right ":"";for(var x=1;x<g.length-1;x++)f+=0===g[x].length?"none ":g[x][0]?"dashed ":"solid ";return/[sd]/.test(f)&&r.setAttribute("rowlines",f.trim()),""!==n&&(r=new ve.MathNode("menclose",[r])).setAttribute("notation",n.trim()),t.arraystretch&&t.arraystretch<1&&(r=new ve.MathNode("mstyle",[r])).setAttribute("scriptlevel","1"),r},Sr=function(t,e){var r,a=[],n=vr(t.parser,{cols:a,addJot:!0},"display"),i=0,s={type:"ordgroup",mode:t.mode,body:[]},h=Vt(e[0],"ordgroup");if(h){for(var l="",m=0;m<h.body.length;m++){l+=Ft(h.body[m],"textord").text}r=Number(l),i=2*r}var c=!i;n.body.forEach(function(t){for(var e=1;e<t.length;e+=2){var a=Ft(t[e],"styling");Ft(a.body[0],"ordgroup").body.unshift(s)}if(c)i<t.length&&(i=t.length);else{var n=t.length/2;if(r<n)throw new o("Too many math in a row: expected "+r+", but got "+n,t[0])}});for(var u=0;u<i;++u){var p="r",d=0;u%2==1?p="l":u>0&&c&&(d=1),a[u]={type:"align",align:p,pregap:d,postgap:0}}return n.colSeparationType=c?"align":"alignat",n};gr({type:"array",names:["array","darray"],props:{numArgs:1},handler:function(t,e){var r={cols:(Yt(e[0])?[e[0]]:Ft(e[0],"ordgroup").body).map(function(t){var e=Gt(t).text;if(-1!=="lcr".indexOf(e))return{type:"align",align:e};if("|"===e)return{type:"separator",separator:"|"};if(":"===e)return{type:"separator",separator:":"};throw new o("Unknown column alignment: "+e,t)}),hskipBeforeAndAfter:!0};return vr(t.parser,r,br(t.envName))},htmlBuilder:yr,mathmlBuilder:kr}),gr({type:"array",names:["matrix","pmatrix","bmatrix","Bmatrix","vmatrix","Vmatrix"],props:{numArgs:0},handler:function(t){var e={matrix:null,pmatrix:["(",")"],bmatrix:["[","]"],Bmatrix:["\\{","\\}"],vmatrix:["|","|"],Vmatrix:["\\Vert","\\Vert"]}[t.envName],r=vr(t.parser,{hskipBeforeAndAfter:!1},br(t.envName));return e?{type:"leftright",mode:t.mode,body:[r],left:e[0],right:e[1],rightColor:void 0}:r},htmlBuilder:yr,mathmlBuilder:kr}),gr({type:"array",names:["smallmatrix"],props:{numArgs:0},handler:function(t){var e=vr(t.parser,{arraystretch:.5},"script");return e.colSeparationType="small",e},htmlBuilder:yr,mathmlBuilder:kr}),gr({type:"array",names:["subarray"],props:{numArgs:1},handler:function(t,e){var r=(Yt(e[0])?[e[0]]:Ft(e[0],"ordgroup").body).map(function(t){var e=Gt(t).text;if(-1!=="lc".indexOf(e))return{type:"align",align:e};throw new o("Unknown column alignment: "+e,t)});if(r.length>1)throw new o("{subarray} can contain only one column");var a={cols:r,hskipBeforeAndAfter:!1,arraystretch:.5};if((a=vr(t.parser,a,"script")).body[0].length>1)throw new o("{subarray} can contain only one column");return a},htmlBuilder:yr,mathmlBuilder:kr}),gr({type:"array",names:["cases","dcases"],props:{numArgs:0},handler:function(t){var e=vr(t.parser,{arraystretch:1.2,cols:[{type:"align",align:"l",pregap:0,postgap:1},{type:"align",align:"l",pregap:0,postgap:0}]},br(t.envName));return{type:"leftright",mode:t.mode,body:[e],left:"\\{",right:".",rightColor:void 0}},htmlBuilder:yr,mathmlBuilder:kr}),gr({type:"array",names:["aligned"],props:{numArgs:0},handler:Sr,htmlBuilder:yr,mathmlBuilder:kr}),gr({type:"array",names:["gathered"],props:{numArgs:0},handler:function(t){return vr(t.parser,{cols:[{type:"align",align:"c"}],addJot:!0},"display")},htmlBuilder:yr,mathmlBuilder:kr}),gr({type:"array",names:["alignedat"],props:{numArgs:1},handler:Sr,htmlBuilder:yr,mathmlBuilder:kr}),Qt({type:"text",names:["\\hline","\\hdashline"],props:{numArgs:0,allowedInText:!0,allowedInMath:!0},handler:function(t,e){throw new o(t.funcName+" valid only within array environment")}});var Mr=fr;Qt({type:"environment",names:["\\begin","\\end"],props:{numArgs:1,argTypes:["text"]},handler:function(t,e){var r=t.parser,a=t.funcName,n=e[0];if("ordgroup"!==n.type)throw new o("Invalid environment name",n);for(var i="",s=0;s<n.body.length;++s)i+=Ft(n.body[s],"textord").text;if("\\begin"===a){if(!Mr.hasOwnProperty(i))throw new o("No such environment: "+i,n);var h=Mr[i],l=r.parseArguments("\\begin{"+i+"}",h),m=l.args,c=l.optArgs,u={mode:r.mode,envName:i,parser:r},p=h.handler(u,m,c);r.expect("\\end",!1);var d=r.nextToken,f=Ft(r.parseFunction(),"environment");if(f.name!==i)throw new o("Mismatch: \\begin{"+i+"} matched by \\end{"+f.name+"}",d);return p}return{type:"environment",mode:r.mode,name:i,nameGroup:n}}});var zr=Dt.makeSpan;function Ar(t,e){var r=se(t.body,e,!0);return zr([t.mclass],r,e)}function Tr(t,e){var r,a=ke(t.body,e);return"minner"===t.mclass?ve.newDocumentFragment(a):("mord"===t.mclass?t.isCharacterBox?(r=a[0]).type="mi":r=new ve.MathNode("mi",a):(t.isCharacterBox?(r=a[0]).type="mo":r=new ve.MathNode("mo",a),"mbin"===t.mclass?(r.attributes.lspace="0.22em",r.attributes.rspace="0.22em"):"mpunct"===t.mclass?(r.attributes.lspace="0em",r.attributes.rspace="0.17em"):"mopen"!==t.mclass&&"mclose"!==t.mclass||(r.attributes.lspace="0em",r.attributes.rspace="0em")),r)}Qt({type:"mclass",names:["\\mathord","\\mathbin","\\mathrel","\\mathopen","\\mathclose","\\mathpunct","\\mathinner"],props:{numArgs:1},handler:function(t,e){var r=t.parser,a=t.funcName,n=e[0];return{type:"mclass",mode:r.mode,mclass:"m"+a.substr(5),body:ee(n),isCharacterBox:c.isCharacterBox(n)}},htmlBuilder:Ar,mathmlBuilder:Tr});var Br=function(t){var e="ordgroup"===t.type&&t.body.length?t.body[0]:t;return"atom"!==e.type||"bin"!==e.family&&"rel"!==e.family?"mord":"m"+e.family};Qt({type:"mclass",names:["\\@binrel"],props:{numArgs:2},handler:function(t,e){return{type:"mclass",mode:t.parser.mode,mclass:Br(e[0]),body:[e[1]],isCharacterBox:c.isCharacterBox(e[1])}}}),Qt({type:"mclass",names:["\\stackrel","\\overset","\\underset"],props:{numArgs:2},handler:function(t,e){var r,a=t.parser,n=t.funcName,i=e[1],o=e[0];r="\\stackrel"!==n?Br(i):"mrel";var s={type:"op",mode:i.mode,limits:!0,alwaysHandleSupSub:!0,parentIsSupSub:!1,symbol:!1,suppressBaseShift:"\\stackrel"!==n,body:ee(i)},h={type:"supsub",mode:o.mode,base:s,sup:"\\underset"===n?null:o,sub:"\\underset"===n?o:null};return{type:"mclass",mode:a.mode,mclass:r,body:[h],isCharacterBox:c.isCharacterBox(h)}},htmlBuilder:Ar,mathmlBuilder:Tr});var Cr=function(t,e){var r=t.font,a=e.withFont(r);return ue(t.body,a)},qr=function(t,e){var r=t.font,a=e.withFont(r);return Me(t.body,a)},Nr={"\\Bbb":"\\mathbb","\\bold":"\\mathbf","\\frak":"\\mathfrak","\\bm":"\\boldsymbol"};Qt({type:"font",names:["\\mathrm","\\mathit","\\mathbf","\\mathnormal","\\mathbb","\\mathcal","\\mathfrak","\\mathscr","\\mathsf","\\mathtt","\\Bbb","\\bold","\\frak"],props:{numArgs:1,greediness:2},handler:function(t,e){var r=t.parser,a=t.funcName,n=e[0],i=a;return i in Nr&&(i=Nr[i]),{type:"font",mode:r.mode,font:i.slice(1),body:n}},htmlBuilder:Cr,mathmlBuilder:qr}),Qt({type:"mclass",names:["\\boldsymbol","\\bm"],props:{numArgs:1,greediness:2},handler:function(t,e){var r=t.parser,a=e[0],n=c.isCharacterBox(a);return{type:"mclass",mode:r.mode,mclass:Br(a),body:[{type:"font",mode:r.mode,font:"boldsymbol",body:a}],isCharacterBox:n}}}),Qt({type:"font",names:["\\rm","\\sf","\\tt","\\bf","\\it"],props:{numArgs:0,allowedInText:!0},handler:function(t,e){var r=t.parser,a=t.funcName,n=t.breakOnTokenText,i=r.mode,o=r.parseExpression(!0,n);return{type:"font",mode:i,font:"math"+a.slice(1),body:{type:"ordgroup",mode:r.mode,body:o}}},htmlBuilder:Cr,mathmlBuilder:qr});var Ir=function(t,e){var r=e;return"display"===t?r=r.id>=w.SCRIPT.id?r.text():w.DISPLAY:"text"===t&&r.size===w.DISPLAY.size?r=w.TEXT:"script"===t?r=w.SCRIPT:"scriptscript"===t&&(r=w.SCRIPTSCRIPT),r},Rr=function(t,e){var r,a=Ir(t.size,e.style),n=a.fracNum(),i=a.fracDen();r=e.havingStyle(n);var o=ue(t.numer,r,e);if(t.continued){var s=8.5/e.fontMetrics().ptPerEm,h=3.5/e.fontMetrics().ptPerEm;o.height=o.height<s?s:o.height,o.depth=o.depth<h?h:o.depth}r=e.havingStyle(i);var l,m,c,u,p,d,f,g,x,v,b=ue(t.denom,r,e);if(t.hasBarLine?(t.barSize?(m=Tt(t.barSize,e),l=Dt.makeLineSpan("frac-line",e,m)):l=Dt.makeLineSpan("frac-line",e),m=l.height,c=l.height):(l=null,m=0,c=e.fontMetrics().defaultRuleThickness),a.size===w.DISPLAY.size||"display"===t.size?(u=e.fontMetrics().num1,p=m>0?3*c:7*c,d=e.fontMetrics().denom1):(m>0?(u=e.fontMetrics().num2,p=c):(u=e.fontMetrics().num3,p=3*c),d=e.fontMetrics().denom2),l){var y=e.fontMetrics().axisHeight;u-o.depth-(y+.5*m)<p&&(u+=p-(u-o.depth-(y+.5*m))),y-.5*m-(b.height-d)<p&&(d+=p-(y-.5*m-(b.height-d)));var k=-(y-.5*m);f=Dt.makeVList({positionType:"individualShift",children:[{type:"elem",elem:b,shift:d},{type:"elem",elem:l,shift:k},{type:"elem",elem:o,shift:-u}]},e)}else{var S=u-o.depth-(b.height-d);S<p&&(u+=.5*(p-S),d+=.5*(p-S)),f=Dt.makeVList({positionType:"individualShift",children:[{type:"elem",elem:b,shift:d},{type:"elem",elem:o,shift:-u}]},e)}return r=e.havingStyle(a),f.height*=r.sizeMultiplier/e.sizeMultiplier,f.depth*=r.sizeMultiplier/e.sizeMultiplier,g=a.size===w.DISPLAY.size?e.fontMetrics().delim1:e.fontMetrics().delim2,x=null==t.leftDelim?ce(e,["mopen"]):sr(t.leftDelim,g,!0,e.havingStyle(a),t.mode,["mopen"]),v=t.continued?Dt.makeSpan([]):null==t.rightDelim?ce(e,["mclose"]):sr(t.rightDelim,g,!0,e.havingStyle(a),t.mode,["mclose"]),Dt.makeSpan(["mord"].concat(r.sizingClasses(e)),[x,Dt.makeSpan(["mfrac"],[f]),v],e)},Or=function(t,e){var r=new ve.MathNode("mfrac",[Me(t.numer,e),Me(t.denom,e)]);if(t.hasBarLine){if(t.barSize){var a=Tt(t.barSize,e);r.setAttribute("linethickness",a+"em")}}else r.setAttribute("linethickness","0px");var n=Ir(t.size,e.style);if(n.size!==e.style.size){r=new ve.MathNode("mstyle",[r]);var i=n.size===w.DISPLAY.size?"true":"false";r.setAttribute("displaystyle",i),r.setAttribute("scriptlevel","0")}if(null!=t.leftDelim||null!=t.rightDelim){var o=[];if(null!=t.leftDelim){var s=new ve.MathNode("mo",[new ve.TextNode(t.leftDelim.replace("\\",""))]);s.setAttribute("fence","true"),o.push(s)}if(o.push(r),null!=t.rightDelim){var h=new ve.MathNode("mo",[new ve.TextNode(t.rightDelim.replace("\\",""))]);h.setAttribute("fence","true"),o.push(h)}return ye(o)}return r};Qt({type:"genfrac",names:["\\cfrac","\\dfrac","\\frac","\\tfrac","\\dbinom","\\binom","\\tbinom","\\\\atopfrac","\\\\bracefrac","\\\\brackfrac"],props:{numArgs:2,greediness:2},handler:function(t,e){var r,a=t.parser,n=t.funcName,i=e[0],o=e[1],s=null,h=null,l="auto";switch(n){case"\\cfrac":case"\\dfrac":case"\\frac":case"\\tfrac":r=!0;break;case"\\\\atopfrac":r=!1;break;case"\\dbinom":case"\\binom":case"\\tbinom":r=!1,s="(",h=")";break;case"\\\\bracefrac":r=!1,s="\\{",h="\\}";break;case"\\\\brackfrac":r=!1,s="[",h="]";break;default:throw new Error("Unrecognized genfrac command")}switch(n){case"\\cfrac":case"\\dfrac":case"\\dbinom":l="display";break;case"\\tfrac":case"\\tbinom":l="text"}return{type:"genfrac",mode:a.mode,continued:"\\cfrac"===n,numer:i,denom:o,hasBarLine:r,leftDelim:s,rightDelim:h,size:l,barSize:null}},htmlBuilder:Rr,mathmlBuilder:Or}),Qt({type:"infix",names:["\\over","\\choose","\\atop","\\brace","\\brack"],props:{numArgs:0,infix:!0},handler:function(t){var e,r=t.parser,a=t.funcName,n=t.token;switch(a){case"\\over":e="\\frac";break;case"\\choose":e="\\binom";break;case"\\atop":e="\\\\atopfrac";break;case"\\brace":e="\\\\bracefrac";break;case"\\brack":e="\\\\brackfrac";break;default:throw new Error("Unrecognized infix genfrac command")}return{type:"infix",mode:r.mode,replaceWith:e,token:n}}});var Er=["display","text","script","scriptscript"],Lr=function(t){var e=null;return t.length>0&&(e="."===(e=t)?null:e),e};Qt({type:"genfrac",names:["\\genfrac"],props:{numArgs:6,greediness:6,argTypes:["math","math","size","text","math","math"]},handler:function(t,e){var r=t.parser,a=e[4],n=e[5],i=Vt(e[0],"atom");i&&(i=Ut(e[0],"open"));var o=i?Lr(i.text):null,s=Vt(e[1],"atom");s&&(s=Ut(e[1],"close"));var h,l=s?Lr(s.text):null,m=Ft(e[2],"size"),c=null;h=!!m.isBlank||(c=m.value).number>0;var u="auto",p=Vt(e[3],"ordgroup");if(p){if(p.body.length>0){var d=Ft(p.body[0],"textord");u=Er[Number(d.text)]}}else p=Ft(e[3],"textord"),u=Er[Number(p.text)];return{type:"genfrac",mode:r.mode,numer:a,denom:n,continued:!1,hasBarLine:h,barSize:c,leftDelim:o,rightDelim:l,size:u}},htmlBuilder:Rr,mathmlBuilder:Or}),Qt({type:"infix",names:["\\above"],props:{numArgs:1,argTypes:["size"],infix:!0},handler:function(t,e){var r=t.parser,a=(t.funcName,t.token);return{type:"infix",mode:r.mode,replaceWith:"\\\\abovefrac",size:Ft(e[0],"size").value,token:a}}}),Qt({type:"genfrac",names:["\\\\abovefrac"],props:{numArgs:3,argTypes:["math","size","math"]},handler:function(t,e){var r=t.parser,a=(t.funcName,e[0]),n=function(t){if(!t)throw new Error("Expected non-null, but got "+String(t));return t}(Ft(e[1],"infix").size),i=e[2],o=n.number>0;return{type:"genfrac",mode:r.mode,numer:a,denom:i,continued:!1,hasBarLine:o,barSize:n,leftDelim:null,rightDelim:null,size:"auto"}},htmlBuilder:Rr,mathmlBuilder:Or});var Hr=function(t,e){var r,a,n=e.style,i=Vt(t,"supsub");i?(r=i.sup?ue(i.sup,e.havingStyle(n.sup()),e):ue(i.sub,e.havingStyle(n.sub()),e),a=Ft(i.base,"horizBrace")):a=Ft(t,"horizBrace");var o,s=ue(a.base,e.havingBaseStyle(w.DISPLAY)),h=Oe(a,e);if(a.isOver?(o=Dt.makeVList({positionType:"firstBaseline",children:[{type:"elem",elem:s},{type:"kern",size:.1},{type:"elem",elem:h}]},e)).children[0].children[0].children[1].classes.push("svg-align"):(o=Dt.makeVList({positionType:"bottom",positionData:s.depth+.1+h.height,children:[{type:"elem",elem:h},{type:"kern",size:.1},{type:"elem",elem:s}]},e)).children[0].children[0].children[0].classes.push("svg-align"),r){var l=Dt.makeSpan(["mord",a.isOver?"mover":"munder"],[o],e);o=a.isOver?Dt.makeVList({positionType:"firstBaseline",children:[{type:"elem",elem:l},{type:"kern",size:.2},{type:"elem",elem:r}]},e):Dt.makeVList({positionType:"bottom",positionData:l.depth+.2+r.height+r.depth,children:[{type:"elem",elem:r},{type:"kern",size:.2},{type:"elem",elem:l}]},e)}return Dt.makeSpan(["mord",a.isOver?"mover":"munder"],[o],e)};Qt({type:"horizBrace",names:["\\overbrace","\\underbrace"],props:{numArgs:1},handler:function(t,e){var r=t.parser,a=t.funcName;return{type:"horizBrace",mode:r.mode,label:a,isOver:/^\\over/.test(a),base:e[0]}},htmlBuilder:Hr,mathmlBuilder:function(t,e){var r=Re(t.label);return new ve.MathNode(t.isOver?"mover":"munder",[Me(t.base,e),r])}}),Qt({type:"href",names:["\\href"],props:{numArgs:2,argTypes:["url","original"],allowedInText:!0},handler:function(t,e){var r=t.parser,a=e[1],n=Ft(e[0],"url").url;return r.settings.isTrusted({command:"\\href",url:n})?{type:"href",mode:r.mode,href:n,body:ee(a)}:r.formatUnsupportedCmd("\\href")},htmlBuilder:function(t,e){var r=se(t.body,e,!1);return Dt.makeAnchor(t.href,[],r,e)},mathmlBuilder:function(t,e){var r=Se(t.body,e);return r instanceof ge||(r=new ge("mrow",[r])),r.setAttribute("href",t.href),r}}),Qt({type:"href",names:["\\url"],props:{numArgs:1,argTypes:["url"],allowedInText:!0},handler:function(t,e){var r=t.parser,a=Ft(e[0],"url").url;if(!r.settings.isTrusted({command:"\\url",url:a}))return r.formatUnsupportedCmd("\\url");for(var n=[],i=0;i<a.length;i++){var o=a[i];"~"===o&&(o="\\textasciitilde"),n.push({type:"textord",mode:"text",text:o})}var s={type:"text",mode:r.mode,font:"\\texttt",body:n};return{type:"href",mode:r.mode,href:a,body:ee(s)}}}),Qt({type:"htmlmathml",names:["\\html@mathml"],props:{numArgs:2,allowedInText:!0},handler:function(t,e){return{type:"htmlmathml",mode:t.parser.mode,html:ee(e[0]),mathml:ee(e[1])}},htmlBuilder:function(t,e){var r=se(t.html,e,!1);return Dt.makeFragment(r)},mathmlBuilder:function(t,e){return Se(t.mathml,e)}});var Pr=function(t){if(/^[-+]? *(\d+(\.\d*)?|\.\d+)$/.test(t))return{number:+t,unit:"bp"};var e=/([-+]?) *(\d+(?:\.\d*)?|\.\d+) *([a-z]{2})/.exec(t);if(!e)throw new o("Invalid size: '"+t+"' in \\includegraphics");var r={number:+(e[1]+e[2]),unit:e[3]};if(!At(r))throw new o("Invalid unit: '"+r.unit+"' in \\includegraphics.");return r};Qt({type:"includegraphics",names:["\\includegraphics"],props:{numArgs:1,numOptionalArgs:1,argTypes:["raw","url"],allowedInText:!1},handler:function(t,e,r){var a=t.parser,n={number:0,unit:"em"},i={number:.9,unit:"em"},s={number:0,unit:"em"},h="";if(r[0])for(var l=Ft(r[0],"raw").string.split(","),m=0;m<l.length;m++){var c=l[m].split("=");if(2===c.length){var u=c[1].trim();switch(c[0].trim()){case"alt":h=u;break;case"width":n=Pr(u);break;case"height":i=Pr(u);break;case"totalheight":s=Pr(u);break;default:throw new o("Invalid key: '"+c[0]+"' in \\includegraphics.")}}}var p=Ft(e[0],"url").url;return""===h&&(h=(h=(h=p).replace(/^.*[\\\/]/,"")).substring(0,h.lastIndexOf("."))),a.settings.isTrusted({command:"\\includegraphics",url:p})?{type:"includegraphics",mode:a.mode,alt:h,width:n,height:i,totalheight:s,src:p}:a.formatUnsupportedCmd("\\includegraphics")},htmlBuilder:function(t,e){var r=Tt(t.height,e),a=0;t.totalheight.number>0&&(a=Tt(t.totalheight,e)-r,a=Number(a.toFixed(2)));var n=0;t.width.number>0&&(n=Tt(t.width,e));var i={height:r+a+"em"};n>0&&(i.width=n+"em"),a>0&&(i.verticalAlign=-a+"em");var o=new R(t.src,t.alt,i);return o.height=r,o.depth=a,o},mathmlBuilder:function(t,e){var r=new ve.MathNode("mglyph",[]);r.setAttribute("alt",t.alt);var a=Tt(t.height,e),n=0;if(t.totalheight.number>0&&(n=(n=Tt(t.totalheight,e)-a).toFixed(2),r.setAttribute("valign","-"+n+"em")),r.setAttribute("height",a+n+"em"),t.width.number>0){var i=Tt(t.width,e);r.setAttribute("width",i+"em")}return r.setAttribute("src",t.src),r}}),Qt({type:"kern",names:["\\kern","\\mkern","\\hskip","\\mskip"],props:{numArgs:1,argTypes:["size"],allowedInText:!0},handler:function(t,e){var r=t.parser,a=t.funcName,n=Ft(e[0],"size");if(r.settings.strict){var i="m"===a[1],o="mu"===n.value.unit;i?(o||r.settings.reportNonstrict("mathVsTextUnits","LaTeX's "+a+" supports only mu units, not "+n.value.unit+" units"),"math"!==r.mode&&r.settings.reportNonstrict("mathVsTextUnits","LaTeX's "+a+" works only in math mode")):o&&r.settings.reportNonstrict("mathVsTextUnits","LaTeX's "+a+" doesn't support mu units")}return{type:"kern",mode:r.mode,dimension:n.value}},htmlBuilder:function(t,e){return Dt.makeGlue(t.dimension,e)},mathmlBuilder:function(t,e){var r=Tt(t.dimension,e);return new ve.SpaceNode(r)}}),Qt({type:"lap",names:["\\mathllap","\\mathrlap","\\mathclap"],props:{numArgs:1,allowedInText:!0},handler:function(t,e){var r=t.parser,a=t.funcName,n=e[0];return{type:"lap",mode:r.mode,alignment:a.slice(5),body:n}},htmlBuilder:function(t,e){var r;"clap"===t.alignment?(r=Dt.makeSpan([],[ue(t.body,e)]),r=Dt.makeSpan(["inner"],[r],e)):r=Dt.makeSpan(["inner"],[ue(t.body,e)]);var a=Dt.makeSpan(["fix"],[]),n=Dt.makeSpan([t.alignment],[r,a],e),i=Dt.makeSpan(["strut"]);return i.style.height=n.height+n.depth+"em",i.style.verticalAlign=-n.depth+"em",n.children.unshift(i),n=Dt.makeVList({positionType:"firstBaseline",children:[{type:"elem",elem:n}]},e),Dt.makeSpan(["mord"],[n],e)},mathmlBuilder:function(t,e){var r=new ve.MathNode("mpadded",[Me(t.body,e)]);if("rlap"!==t.alignment){var a="llap"===t.alignment?"-1":"-0.5";r.setAttribute("lspace",a+"width")}return r.setAttribute("width","0px"),r}}),Qt({type:"styling",names:["\\(","$"],props:{numArgs:0,allowedInText:!0,allowedInMath:!1},handler:function(t,e){var r=t.funcName,a=t.parser,n=a.mode;a.switchMode("math");var i="\\("===r?"\\)":"$",o=a.parseExpression(!1,i);return a.expect(i),a.switchMode(n),{type:"styling",mode:a.mode,style:"text",body:o}}}),Qt({type:"text",names:["\\)","\\]"],props:{numArgs:0,allowedInText:!0,allowedInMath:!1},handler:function(t,e){throw new o("Mismatched "+t.funcName)}});var Dr=function(t,e){switch(e.style.size){case w.DISPLAY.size:return t.display;case w.TEXT.size:return t.text;case w.SCRIPT.size:return t.script;case w.SCRIPTSCRIPT.size:return t.scriptscript;default:return t.text}};Qt({type:"mathchoice",names:["\\mathchoice"],props:{numArgs:4},handler:function(t,e){return{type:"mathchoice",mode:t.parser.mode,display:ee(e[0]),text:ee(e[1]),script:ee(e[2]),scriptscript:ee(e[3])}},htmlBuilder:function(t,e){var r=Dr(t,e),a=se(r,e,!1);return Dt.makeFragment(a)},mathmlBuilder:function(t,e){var r=Dr(t,e);return Se(r,e)}});var Fr=function(t,e,r,a,n,i,o){var s,h,l;if(t=Dt.makeSpan([],[t]),e){var m=ue(e,a.havingStyle(n.sup()),a);h={elem:m,kern:Math.max(a.fontMetrics().bigOpSpacing1,a.fontMetrics().bigOpSpacing3-m.depth)}}if(r){var c=ue(r,a.havingStyle(n.sub()),a);s={elem:c,kern:Math.max(a.fontMetrics().bigOpSpacing2,a.fontMetrics().bigOpSpacing4-c.height)}}if(h&&s){var u=a.fontMetrics().bigOpSpacing5+s.elem.height+s.elem.depth+s.kern+t.depth+o;l=Dt.makeVList({positionType:"bottom",positionData:u,children:[{type:"kern",size:a.fontMetrics().bigOpSpacing5},{type:"elem",elem:s.elem,marginLeft:-i+"em"},{type:"kern",size:s.kern},{type:"elem",elem:t},{type:"kern",size:h.kern},{type:"elem",elem:h.elem,marginLeft:i+"em"},{type:"kern",size:a.fontMetrics().bigOpSpacing5}]},a)}else if(s){var p=t.height-o;l=Dt.makeVList({positionType:"top",positionData:p,children:[{type:"kern",size:a.fontMetrics().bigOpSpacing5},{type:"elem",elem:s.elem,marginLeft:-i+"em"},{type:"kern",size:s.kern},{type:"elem",elem:t}]},a)}else{if(!h)return t;var d=t.depth+o;l=Dt.makeVList({positionType:"bottom",positionData:d,children:[{type:"elem",elem:t},{type:"kern",size:h.kern},{type:"elem",elem:h.elem,marginLeft:i+"em"},{type:"kern",size:a.fontMetrics().bigOpSpacing5}]},a)}return Dt.makeSpan(["mop","op-limits"],[l],a)},Vr=["\\smallint"],Ur=function(t,e){var r,a,n,i=!1,o=Vt(t,"supsub");o?(r=o.sup,a=o.sub,n=Ft(o.base,"op"),i=!0):n=Ft(t,"op");var s,h=e.style,l=!1;if(h.size===w.DISPLAY.size&&n.symbol&&!c.contains(Vr,n.name)&&(l=!0),n.symbol){var m=l?"Size2-Regular":"Size1-Regular",u="";if("\\oiint"!==n.name&&"\\oiiint"!==n.name||(u=n.name.substr(1),n.name="oiint"===u?"\\iint":"\\iiint"),s=Dt.makeSymbol(n.name,m,"math",e,["mop","op-symbol",l?"large-op":"small-op"]),u.length>0){var p=s.italic,d=Dt.staticSvg(u+"Size"+(l?"2":"1"),e);s=Dt.makeVList({positionType:"individualShift",children:[{type:"elem",elem:s,shift:0},{type:"elem",elem:d,shift:l?.08:0}]},e),n.name="\\"+u,s.classes.unshift("mop"),s.italic=p}}else if(n.body){var f=se(n.body,e,!0);1===f.length&&f[0]instanceof E?(s=f[0]).classes[0]="mop":s=Dt.makeSpan(["mop"],Dt.tryCombineChars(f),e)}else{for(var g=[],x=1;x<n.name.length;x++)g.push(Dt.mathsym(n.name[x],n.mode,e));s=Dt.makeSpan(["mop"],g,e)}var v=0,b=0;return(s instanceof E||"\\oiint"===n.name||"\\oiiint"===n.name)&&!n.suppressBaseShift&&(v=(s.height-s.depth)/2-e.fontMetrics().axisHeight,b=s.italic),i?Fr(s,r,a,e,h,b,v):(v&&(s.style.position="relative",s.style.top=v+"em"),s)},Gr=function(t,e){var r;if(t.symbol)r=new ge("mo",[be(t.name,t.mode)]),c.contains(Vr,t.name)&&r.setAttribute("largeop","false");else if(t.body)r=new ge("mo",ke(t.body,e));else{r=new ge("mi",[new xe(t.name.slice(1))]);var a=new ge("mo",[be("\u2061","text")]);r=t.parentIsSupSub?new ge("mo",[r,a]):fe([r,a])}return r},Yr={"\u220f":"\\prod","\u2210":"\\coprod","\u2211":"\\sum","\u22c0":"\\bigwedge","\u22c1":"\\bigvee","\u22c2":"\\bigcap","\u22c3":"\\bigcup","\u2a00":"\\bigodot","\u2a01":"\\bigoplus","\u2a02":"\\bigotimes","\u2a04":"\\biguplus","\u2a06":"\\bigsqcup"};Qt({type:"op",names:["\\coprod","\\bigvee","\\bigwedge","\\biguplus","\\bigcap","\\bigcup","\\intop","\\prod","\\sum","\\bigotimes","\\bigoplus","\\bigodot","\\bigsqcup","\\smallint","\u220f","\u2210","\u2211","\u22c0","\u22c1","\u22c2","\u22c3","\u2a00","\u2a01","\u2a02","\u2a04","\u2a06"],props:{numArgs:0},handler:function(t,e){var r=t.parser,a=t.funcName;return 1===a.length&&(a=Yr[a]),{type:"op",mode:r.mode,limits:!0,parentIsSupSub:!1,symbol:!0,name:a}},htmlBuilder:Ur,mathmlBuilder:Gr}),Qt({type:"op",names:["\\mathop"],props:{numArgs:1},handler:function(t,e){var r=t.parser,a=e[0];return{type:"op",mode:r.mode,limits:!1,parentIsSupSub:!1,symbol:!1,body:ee(a)}},htmlBuilder:Ur,mathmlBuilder:Gr});var Wr={"\u222b":"\\int","\u222c":"\\iint","\u222d":"\\iiint","\u222e":"\\oint","\u222f":"\\oiint","\u2230":"\\oiiint"};Qt({type:"op",names:["\\arcsin","\\arccos","\\arctan","\\arctg","\\arcctg","\\arg","\\ch","\\cos","\\cosec","\\cosh","\\cot","\\cotg","\\coth","\\csc","\\ctg","\\cth","\\deg","\\dim","\\exp","\\hom","\\ker","\\lg","\\ln","\\log","\\sec","\\sin","\\sinh","\\sh","\\tan","\\tanh","\\tg","\\th"],props:{numArgs:0},handler:function(t){var e=t.parser,r=t.funcName;return{type:"op",mode:e.mode,limits:!1,parentIsSupSub:!1,symbol:!1,name:r}},htmlBuilder:Ur,mathmlBuilder:Gr}),Qt({type:"op",names:["\\det","\\gcd","\\inf","\\lim","\\max","\\min","\\Pr","\\sup"],props:{numArgs:0},handler:function(t){var e=t.parser,r=t.funcName;return{type:"op",mode:e.mode,limits:!0,parentIsSupSub:!1,symbol:!1,name:r}},htmlBuilder:Ur,mathmlBuilder:Gr}),Qt({type:"op",names:["\\int","\\iint","\\iiint","\\oint","\\oiint","\\oiiint","\u222b","\u222c","\u222d","\u222e","\u222f","\u2230"],props:{numArgs:0},handler:function(t){var e=t.parser,r=t.funcName;return 1===r.length&&(r=Wr[r]),{type:"op",mode:e.mode,limits:!1,parentIsSupSub:!1,symbol:!0,name:r}},htmlBuilder:Ur,mathmlBuilder:Gr});var Xr=function(t,e){var r,a,n,i,o=!1,s=Vt(t,"supsub");if(s?(r=s.sup,a=s.sub,n=Ft(s.base,"operatorname"),o=!0):n=Ft(t,"operatorname"),n.body.length>0){for(var h=n.body.map(function(t){var e=t.text;return"string"==typeof e?{type:"textord",mode:t.mode,text:e}:t}),l=se(h,e.withFont("mathrm"),!0),m=0;m<l.length;m++){var c=l[m];c instanceof E&&(c.text=c.text.replace(/\u2212/,"-").replace(/\u2217/,"*"))}i=Dt.makeSpan(["mop"],l,e)}else i=Dt.makeSpan(["mop"],[],e);return o?Fr(i,r,a,e,e.style,0,0):i};function _r(t,e,r){for(var a=se(t,e,!1),n=e.sizeMultiplier/r.sizeMultiplier,i=0;i<a.length;i++){var o=a[i].classes.indexOf("sizing");o<0?Array.prototype.push.apply(a[i].classes,e.sizingClasses(r)):a[i].classes[o+1]==="reset-size"+e.size&&(a[i].classes[o+1]="reset-size"+r.size),a[i].height*=n,a[i].depth*=n}return Dt.makeFragment(a)}Qt({type:"operatorname",names:["\\operatorname","\\operatorname*"],props:{numArgs:1},handler:function(t,e){var r=t.parser,a=t.funcName,n=e[0];return{type:"operatorname",mode:r.mode,body:ee(n),alwaysHandleSupSub:"\\operatorname*"===a,limits:!1,parentIsSupSub:!1}},htmlBuilder:Xr,mathmlBuilder:function(t,e){for(var r=ke(t.body,e.withFont("mathrm")),a=!0,n=0;n<r.length;n++){var i=r[n];if(i instanceof ve.SpaceNode);else if(i instanceof ve.MathNode)switch(i.type){case"mi":case"mn":case"ms":case"mspace":case"mtext":break;case"mo":var o=i.children[0];1===i.children.length&&o instanceof ve.TextNode?o.text=o.text.replace(/\u2212/,"-").replace(/\u2217/,"*"):a=!1;break;default:a=!1}else a=!1}if(a){var s=r.map(function(t){return t.toText()}).join("");r=[new ve.TextNode(s)]}var h=new ve.MathNode("mi",r);h.setAttribute("mathvariant","normal");var l=new ve.MathNode("mo",[be("\u2061","text")]);return t.parentIsSupSub?new ve.MathNode("mo",[h,l]):ve.newDocumentFragment([h,l])}}),te({type:"ordgroup",htmlBuilder:function(t,e){return t.semisimple?Dt.makeFragment(se(t.body,e,!1)):Dt.makeSpan(["mord"],se(t.body,e,!0),e)},mathmlBuilder:function(t,e){return Se(t.body,e,!0)}}),Qt({type:"overline",names:["\\overline"],props:{numArgs:1},handler:function(t,e){var r=t.parser,a=e[0];return{type:"overline",mode:r.mode,body:a}},htmlBuilder:function(t,e){var r=ue(t.body,e.havingCrampedStyle()),a=Dt.makeLineSpan("overline-line",e),n=e.fontMetrics().defaultRuleThickness,i=Dt.makeVList({positionType:"firstBaseline",children:[{type:"elem",elem:r},{type:"kern",size:3*n},{type:"elem",elem:a},{type:"kern",size:n}]},e);return Dt.makeSpan(["mord","overline"],[i],e)},mathmlBuilder:function(t,e){var r=new ve.MathNode("mo",[new ve.TextNode("\u203e")]);r.setAttribute("stretchy","true");var a=new ve.MathNode("mover",[Me(t.body,e),r]);return a.setAttribute("accent","true"),a}}),Qt({type:"phantom",names:["\\phantom"],props:{numArgs:1,allowedInText:!0},handler:function(t,e){var r=t.parser,a=e[0];return{type:"phantom",mode:r.mode,body:ee(a)}},htmlBuilder:function(t,e){var r=se(t.body,e.withPhantom(),!1);return Dt.makeFragment(r)},mathmlBuilder:function(t,e){var r=ke(t.body,e);return new ve.MathNode("mphantom",r)}}),Qt({type:"hphantom",names:["\\hphantom"],props:{numArgs:1,allowedInText:!0},handler:function(t,e){var r=t.parser,a=e[0];return{type:"hphantom",mode:r.mode,body:a}},htmlBuilder:function(t,e){var r=Dt.makeSpan([],[ue(t.body,e.withPhantom())]);if(r.height=0,r.depth=0,r.children)for(var a=0;a<r.children.length;a++)r.children[a].height=0,r.children[a].depth=0;return r=Dt.makeVList({positionType:"firstBaseline",children:[{type:"elem",elem:r}]},e),Dt.makeSpan(["mord"],[r],e)},mathmlBuilder:function(t,e){var r=ke(ee(t.body),e),a=new ve.MathNode("mphantom",r),n=new ve.MathNode("mpadded",[a]);return n.setAttribute("height","0px"),n.setAttribute("depth","0px"),n}}),Qt({type:"vphantom",names:["\\vphantom"],props:{numArgs:1,allowedInText:!0},handler:function(t,e){var r=t.parser,a=e[0];return{type:"vphantom",mode:r.mode,body:a}},htmlBuilder:function(t,e){var r=Dt.makeSpan(["inner"],[ue(t.body,e.withPhantom())]),a=Dt.makeSpan(["fix"],[]);return Dt.makeSpan(["mord","rlap"],[r,a],e)},mathmlBuilder:function(t,e){var r=ke(ee(t.body),e),a=new ve.MathNode("mphantom",r),n=new ve.MathNode("mpadded",[a]);return n.setAttribute("width","0px"),n}}),Qt({type:"raisebox",names:["\\raisebox"],props:{numArgs:2,argTypes:["size","hbox"],allowedInText:!0},handler:function(t,e){var r=t.parser,a=Ft(e[0],"size").value,n=e[1];return{type:"raisebox",mode:r.mode,dy:a,body:n}},htmlBuilder:function(t,e){var r=ue(t.body,e),a=Tt(t.dy,e);return Dt.makeVList({positionType:"shift",positionData:-a,children:[{type:"elem",elem:r}]},e)},mathmlBuilder:function(t,e){var r=new ve.MathNode("mpadded",[Me(t.body,e)]),a=t.dy.number+t.dy.unit;return r.setAttribute("voffset",a),r}}),Qt({type:"rule",names:["\\rule"],props:{numArgs:2,numOptionalArgs:1,argTypes:["size","size","size"]},handler:function(t,e,r){var a=t.parser,n=r[0],i=Ft(e[0],"size"),o=Ft(e[1],"size");return{type:"rule",mode:a.mode,shift:n&&Ft(n,"size").value,width:i.value,height:o.value}},htmlBuilder:function(t,e){var r=Dt.makeSpan(["mord","rule"],[],e),a=Tt(t.width,e),n=Tt(t.height,e),i=t.shift?Tt(t.shift,e):0;return r.style.borderRightWidth=a+"em",r.style.borderTopWidth=n+"em",r.style.bottom=i+"em",r.width=a,r.height=n+i,r.depth=-i,r.maxFontSize=1.125*n*e.sizeMultiplier,r},mathmlBuilder:function(t,e){var r=Tt(t.width,e),a=Tt(t.height,e),n=t.shift?Tt(t.shift,e):0,i=e.color&&e.getColor()||"black",o=new ve.MathNode("mspace");o.setAttribute("mathbackground",i),o.setAttribute("width",r+"em"),o.setAttribute("height",a+"em");var s=new ve.MathNode("mpadded",[o]);return n>=0?s.setAttribute("height","+"+n+"em"):(s.setAttribute("height",n+"em"),s.setAttribute("depth","+"+-n+"em")),s.setAttribute("voffset",n+"em"),s}});var jr=["\\tiny","\\sixptsize","\\scriptsize","\\footnotesize","\\small","\\normalsize","\\large","\\Large","\\LARGE","\\huge","\\Huge"];Qt({type:"sizing",names:jr,props:{numArgs:0,allowedInText:!0},handler:function(t,e){var r=t.breakOnTokenText,a=t.funcName,n=t.parser,i=n.parseExpression(!1,r);return{type:"sizing",mode:n.mode,size:jr.indexOf(a)+1,body:i}},htmlBuilder:function(t,e){var r=e.havingSize(t.size);return _r(t.body,r,e)},mathmlBuilder:function(t,e){var r=e.havingSize(t.size),a=ke(t.body,r),n=new ve.MathNode("mstyle",a);return n.setAttribute("mathsize",r.sizeMultiplier+"em"),n}}),Qt({type:"smash",names:["\\smash"],props:{numArgs:1,numOptionalArgs:1,allowedInText:!0},handler:function(t,e,r){var a=t.parser,n=!1,i=!1,o=r[0]&&Ft(r[0],"ordgroup");if(o)for(var s="",h=0;h<o.body.length;++h){if("t"===(s=o.body[h].text))n=!0;else{if("b"!==s){n=!1,i=!1;break}i=!0}}else n=!0,i=!0;var l=e[0];return{type:"smash",mode:a.mode,body:l,smashHeight:n,smashDepth:i}},htmlBuilder:function(t,e){var r=Dt.makeSpan([],[ue(t.body,e)]);if(!t.smashHeight&&!t.smashDepth)return r;if(t.smashHeight&&(r.height=0,r.children))for(var a=0;a<r.children.length;a++)r.children[a].height=0;if(t.smashDepth&&(r.depth=0,r.children))for(var n=0;n<r.children.length;n++)r.children[n].depth=0;var i=Dt.makeVList({positionType:"firstBaseline",children:[{type:"elem",elem:r}]},e);return Dt.makeSpan(["mord"],[i],e)},mathmlBuilder:function(t,e){var r=new ve.MathNode("mpadded",[Me(t.body,e)]);return t.smashHeight&&r.setAttribute("height","0px"),t.smashDepth&&r.setAttribute("depth","0px"),r}}),Qt({type:"sqrt",names:["\\sqrt"],props:{numArgs:1,numOptionalArgs:1},handler:function(t,e,r){var a=t.parser,n=r[0],i=e[0];return{type:"sqrt",mode:a.mode,body:i,index:n}},htmlBuilder:function(t,e){var r=ue(t.body,e.havingCrampedStyle());0===r.height&&(r.height=e.fontMetrics().xHeight),r=Dt.wrapFragment(r,e);var a=e.fontMetrics().defaultRuleThickness,n=a;e.style.id<w.TEXT.id&&(n=e.fontMetrics().xHeight);var i=a+n/4,o=r.height+r.depth+i+a,s=ir(o,e),h=s.span,l=s.ruleWidth,m=s.advanceWidth,c=h.height-l;c>r.height+r.depth+i&&(i=(i+c-r.height-r.depth)/2);var u=h.height-r.height-i-l;r.style.paddingLeft=m+"em";var p=Dt.makeVList({positionType:"firstBaseline",children:[{type:"elem",elem:r,wrapperClasses:["svg-align"]},{type:"kern",size:-(r.height+u)},{type:"elem",elem:h},{type:"kern",size:l}]},e);if(t.index){var d=e.havingStyle(w.SCRIPTSCRIPT),f=ue(t.index,d,e),g=.6*(p.height-p.depth),x=Dt.makeVList({positionType:"shift",positionData:-g,children:[{type:"elem",elem:f}]},e),v=Dt.makeSpan(["root"],[x]);return Dt.makeSpan(["mord","sqrt"],[v,p],e)}return Dt.makeSpan(["mord","sqrt"],[p],e)},mathmlBuilder:function(t,e){var r=t.body,a=t.index;return a?new ve.MathNode("mroot",[Me(r,e),Me(a,e)]):new ve.MathNode("msqrt",[Me(r,e)])}});var $r={display:w.DISPLAY,text:w.TEXT,script:w.SCRIPT,scriptscript:w.SCRIPTSCRIPT};Qt({type:"styling",names:["\\displaystyle","\\textstyle","\\scriptstyle","\\scriptscriptstyle"],props:{numArgs:0,allowedInText:!0},handler:function(t,e){var r=t.breakOnTokenText,a=t.funcName,n=t.parser,i=n.parseExpression(!0,r),o=a.slice(1,a.length-5);return{type:"styling",mode:n.mode,style:o,body:i}},htmlBuilder:function(t,e){var r=$r[t.style],a=e.havingStyle(r).withFont("");return _r(t.body,a,e)},mathmlBuilder:function(t,e){var r=$r[t.style],a=e.havingStyle(r),n=ke(t.body,a),i=new ve.MathNode("mstyle",n),o={display:["0","true"],text:["0","false"],script:["1","false"],scriptscript:["2","false"]}[t.style];return i.setAttribute("scriptlevel",o[0]),i.setAttribute("displaystyle",o[1]),i}});te({type:"supsub",htmlBuilder:function(t,e){var r=function(t,e){var r=t.base;return r?"op"===r.type?r.limits&&(e.style.size===w.DISPLAY.size||r.alwaysHandleSupSub)?Ur:null:"operatorname"===r.type?r.alwaysHandleSupSub&&(e.style.size===w.DISPLAY.size||r.limits)?Xr:null:"accent"===r.type?c.isCharacterBox(r.base)?Ee:null:"horizBrace"===r.type&&!t.sub===r.isOver?Hr:null:null}(t,e);if(r)return r(t,e);var a,n,i,o=t.base,s=t.sup,h=t.sub,l=ue(o,e),m=e.fontMetrics(),u=0,p=0,d=o&&c.isCharacterBox(o);if(s){var f=e.havingStyle(e.style.sup());a=ue(s,f,e),d||(u=l.height-f.fontMetrics().supDrop*f.sizeMultiplier/e.sizeMultiplier)}if(h){var g=e.havingStyle(e.style.sub());n=ue(h,g,e),d||(p=l.depth+g.fontMetrics().subDrop*g.sizeMultiplier/e.sizeMultiplier)}i=e.style===w.DISPLAY?m.sup1:e.style.cramped?m.sup3:m.sup2;var x,v=e.sizeMultiplier,b=.5/m.ptPerEm/v+"em",y=null;if(n){var k=t.base&&"op"===t.base.type&&t.base.name&&("\\oiint"===t.base.name||"\\oiiint"===t.base.name);(l instanceof E||k)&&(y=-l.italic+"em")}if(a&&n){u=Math.max(u,i,a.depth+.25*m.xHeight),p=Math.max(p,m.sub2);var S=4*m.defaultRuleThickness;if(u-a.depth-(n.height-p)<S){p=S-(u-a.depth)+n.height;var M=.8*m.xHeight-(u-a.depth);M>0&&(u+=M,p-=M)}var z=[{type:"elem",elem:n,shift:p,marginRight:b,marginLeft:y},{type:"elem",elem:a,shift:-u,marginRight:b}];x=Dt.makeVList({positionType:"individualShift",children:z},e)}else if(n){p=Math.max(p,m.sub1,n.height-.8*m.xHeight);var A=[{type:"elem",elem:n,marginLeft:y,marginRight:b}];x=Dt.makeVList({positionType:"shift",positionData:p,children:A},e)}else{if(!a)throw new Error("supsub must have either sup or sub.");u=Math.max(u,i,a.depth+.25*m.xHeight),x=Dt.makeVList({positionType:"shift",positionData:-u,children:[{type:"elem",elem:a,marginRight:b}]},e)}var T=me(l,"right")||"mord";return Dt.makeSpan([T],[l,Dt.makeSpan(["msupsub"],[x])],e)},mathmlBuilder:function(t,e){var r,a=!1,n=Vt(t.base,"horizBrace");n&&!!t.sup===n.isOver&&(a=!0,r=n.isOver),!t.base||"op"!==t.base.type&&"operatorname"!==t.base.type||(t.base.parentIsSupSub=!0);var i,o=[Me(t.base,e)];if(t.sub&&o.push(Me(t.sub,e)),t.sup&&o.push(Me(t.sup,e)),a)i=r?"mover":"munder";else if(t.sub)if(t.sup){var s=t.base;i=s&&"op"===s.type&&s.limits&&e.style===w.DISPLAY?"munderover":s&&"operatorname"===s.type&&s.alwaysHandleSupSub&&(e.style===w.DISPLAY||s.limits)?"munderover":"msubsup"}else{var h=t.base;i=h&&"op"===h.type&&h.limits&&(e.style===w.DISPLAY||h.alwaysHandleSupSub)?"munder":h&&"operatorname"===h.type&&h.alwaysHandleSupSub&&(h.limits||e.style===w.DISPLAY)?"munder":"msub"}else{var l=t.base;i=l&&"op"===l.type&&l.limits&&(e.style===w.DISPLAY||l.alwaysHandleSupSub)?"mover":l&&"operatorname"===l.type&&l.alwaysHandleSupSub&&(l.limits||e.style===w.DISPLAY)?"mover":"msup"}return new ve.MathNode(i,o)}}),te({type:"atom",htmlBuilder:function(t,e){return Dt.mathsym(t.text,t.mode,e,["m"+t.family])},mathmlBuilder:function(t,e){var r=new ve.MathNode("mo",[be(t.text,t.mode)]);if("bin"===t.family){var a=we(t,e);"bold-italic"===a&&r.setAttribute("mathvariant",a)}else"punct"===t.family?r.setAttribute("separator","true"):"open"!==t.family&&"close"!==t.family||r.setAttribute("stretchy","false");return r}});var Zr={mi:"italic",mn:"normal",mtext:"normal"};te({type:"mathord",htmlBuilder:function(t,e){return Dt.makeOrd(t,e,"mathord")},mathmlBuilder:function(t,e){var r=new ve.MathNode("mi",[be(t.text,t.mode,e)]),a=we(t,e)||"italic";return a!==Zr[r.type]&&r.setAttribute("mathvariant",a),r}}),te({type:"textord",htmlBuilder:function(t,e){return Dt.makeOrd(t,e,"textord")},mathmlBuilder:function(t,e){var r,a=be(t.text,t.mode,e),n=we(t,e)||"normal";return r="text"===t.mode?new ve.MathNode("mtext",[a]):/[0-9]/.test(t.text)?new ve.MathNode("mn",[a]):"\\prime"===t.text?new ve.MathNode("mo",[a]):new ve.MathNode("mi",[a]),n!==Zr[r.type]&&r.setAttribute("mathvariant",n),r}});var Kr={"\\nobreak":"nobreak","\\allowbreak":"allowbreak"},Jr={" ":{},"\\ ":{},"~":{className:"nobreak"},"\\space":{},"\\nobreakspace":{className:"nobreak"}};te({type:"spacing",htmlBuilder:function(t,e){if(Jr.hasOwnProperty(t.text)){var r=Jr[t.text].className||"";if("text"===t.mode){var a=Dt.makeOrd(t,e,"textord");return a.classes.push(r),a}return Dt.makeSpan(["mspace",r],[Dt.mathsym(t.text,t.mode,e)],e)}if(Kr.hasOwnProperty(t.text))return Dt.makeSpan(["mspace",Kr[t.text]],[],e);throw new o('Unknown type of space "'+t.text+'"')},mathmlBuilder:function(t,e){if(!Jr.hasOwnProperty(t.text)){if(Kr.hasOwnProperty(t.text))return new ve.MathNode("mspace");throw new o('Unknown type of space "'+t.text+'"')}return new ve.MathNode("mtext",[new ve.TextNode("\xa0")])}});var Qr=function(){var t=new ve.MathNode("mtd",[]);return t.setAttribute("width","50%"),t};te({type:"tag",mathmlBuilder:function(t,e){var r=new ve.MathNode("mtable",[new ve.MathNode("mtr",[Qr(),new ve.MathNode("mtd",[Se(t.body,e)]),Qr(),new ve.MathNode("mtd",[Se(t.tag,e)])])]);return r.setAttribute("width","100%"),r}});var ta={"\\text":void 0,"\\textrm":"textrm","\\textsf":"textsf","\\texttt":"texttt","\\textnormal":"textrm"},ea={"\\textbf":"textbf","\\textmd":"textmd"},ra={"\\textit":"textit","\\textup":"textup"},aa=function(t,e){var r=t.font;return r?ta[r]?e.withTextFontFamily(ta[r]):ea[r]?e.withTextFontWeight(ea[r]):e.withTextFontShape(ra[r]):e};Qt({type:"text",names:["\\text","\\textrm","\\textsf","\\texttt","\\textnormal","\\textbf","\\textmd","\\textit","\\textup"],props:{numArgs:1,argTypes:["text"],greediness:2,allowedInText:!0},handler:function(t,e){var r=t.parser,a=t.funcName,n=e[0];return{type:"text",mode:r.mode,body:ee(n),font:a}},htmlBuilder:function(t,e){var r=aa(t,e),a=se(t.body,r,!0);return Dt.makeSpan(["mord","text"],Dt.tryCombineChars(a),r)},mathmlBuilder:function(t,e){var r=aa(t,e);return Se(t.body,r)}}),Qt({type:"underline",names:["\\underline"],props:{numArgs:1,allowedInText:!0},handler:function(t,e){return{type:"underline",mode:t.parser.mode,body:e[0]}},htmlBuilder:function(t,e){var r=ue(t.body,e),a=Dt.makeLineSpan("underline-line",e),n=e.fontMetrics().defaultRuleThickness,i=Dt.makeVList({positionType:"top",positionData:r.height,children:[{type:"kern",size:n},{type:"elem",elem:a},{type:"kern",size:3*n},{type:"elem",elem:r}]},e);return Dt.makeSpan(["mord","underline"],[i],e)},mathmlBuilder:function(t,e){var r=new ve.MathNode("mo",[new ve.TextNode("\u203e")]);r.setAttribute("stretchy","true");var a=new ve.MathNode("munder",[Me(t.body,e),r]);return a.setAttribute("accentunder","true"),a}}),Qt({type:"verb",names:["\\verb"],props:{numArgs:0,allowedInText:!0},handler:function(t,e,r){throw new o("\\verb ended by end of line instead of matching delimiter")},htmlBuilder:function(t,e){for(var r=na(t),a=[],n=e.havingStyle(e.style.text()),i=0;i<r.length;i++){var o=r[i];"~"===o&&(o="\\textasciitilde"),a.push(Dt.makeSymbol(o,"Typewriter-Regular",t.mode,n,["mord","texttt"]))}return Dt.makeSpan(["mord","text"].concat(n.sizingClasses(e)),Dt.tryCombineChars(a),n)},mathmlBuilder:function(t,e){var r=new ve.TextNode(na(t)),a=new ve.MathNode("mtext",[r]);return a.setAttribute("mathvariant","monospace"),a}});var na=function(t){return t.body.replace(/ /g,t.star?"\u2423":"\xa0")},ia=Zt,oa=new RegExp("^(\\\\[a-zA-Z@]+)[ \r\n\t]*$"),sa=new RegExp("[\u0300-\u036f]+$"),ha="([ \r\n\t]+)|([!-\\[\\]-\u2027\u202a-\ud7ff\uf900-\uffff][\u0300-\u036f]*|[\ud800-\udbff][\udc00-\udfff][\u0300-\u036f]*|\\\\verb\\*([^]).*?\\3|\\\\verb([^*a-zA-Z]).*?\\4|\\\\operatorname\\*|\\\\[a-zA-Z@]+[ \r\n\t]*|\\\\[^\ud800-\udfff])",la=function(){function t(t,e){this.input=void 0,this.settings=void 0,this.tokenRegex=void 0,this.catcodes=void 0,this.input=t,this.settings=e,this.tokenRegex=new RegExp(ha,"g"),this.catcodes={"%":14}}var e=t.prototype;return e.setCatcode=function(t,e){this.catcodes[t]=e},e.lex=function(){var t=this.input,e=this.tokenRegex.lastIndex;if(e===t.length)return new n("EOF",new a(this,e,e));var r=this.tokenRegex.exec(t);if(null===r||r.index!==e)throw new o("Unexpected character: '"+t[e]+"'",new n(t[e],new a(this,e,e+1)));var i=r[2]||" ";if(14===this.catcodes[i]){var s=t.indexOf("\n",this.tokenRegex.lastIndex);return-1===s?(this.tokenRegex.lastIndex=t.length,this.settings.reportNonstrict("commentAtEnd","% comment has no terminating newline; LaTeX would fail because of commenting the end of math mode (e.g. $)")):this.tokenRegex.lastIndex=s+1,this.lex()}var h=i.match(oa);return h&&(i=h[1]),new n(i,new a(this,e,this.tokenRegex.lastIndex))},t}(),ma=function(){function t(t,e){void 0===t&&(t={}),void 0===e&&(e={}),this.current=void 0,this.builtins=void 0,this.undefStack=void 0,this.current=e,this.builtins=t,this.undefStack=[]}var e=t.prototype;return e.beginGroup=function(){this.undefStack.push({})},e.endGroup=function(){if(0===this.undefStack.length)throw new o("Unbalanced namespace destruction: attempt to pop global namespace; please report this as a bug");var t=this.undefStack.pop();for(var e in t)t.hasOwnProperty(e)&&(void 0===t[e]?delete this.current[e]:this.current[e]=t[e])},e.has=function(t){return this.current.hasOwnProperty(t)||this.builtins.hasOwnProperty(t)},e.get=function(t){return this.current.hasOwnProperty(t)?this.current[t]:this.builtins[t]},e.set=function(t,e,r){if(void 0===r&&(r=!1),r){for(var a=0;a<this.undefStack.length;a++)delete this.undefStack[a][t];this.undefStack.length>0&&(this.undefStack[this.undefStack.length-1][t]=e)}else{var n=this.undefStack[this.undefStack.length-1];n&&!n.hasOwnProperty(t)&&(n[t]=this.current[t])}this.current[t]=e},t}(),ca={},ua=ca;function pa(t,e){ca[t]=e}pa("\\@firstoftwo",function(t){return{tokens:t.consumeArgs(2)[0],numArgs:0}}),pa("\\@secondoftwo",function(t){return{tokens:t.consumeArgs(2)[1],numArgs:0}}),pa("\\@ifnextchar",function(t){var e=t.consumeArgs(3),r=t.future();return 1===e[0].length&&e[0][0].text===r.text?{tokens:e[1],numArgs:0}:{tokens:e[2],numArgs:0}}),pa("\\@ifstar","\\@ifnextchar *{\\@firstoftwo{#1}}"),pa("\\TextOrMath",function(t){var e=t.consumeArgs(2);return"text"===t.mode?{tokens:e[0],numArgs:0}:{tokens:e[1],numArgs:0}});var da={0:0,1:1,2:2,3:3,4:4,5:5,6:6,7:7,8:8,9:9,a:10,A:10,b:11,B:11,c:12,C:12,d:13,D:13,e:14,E:14,f:15,F:15};pa("\\char",function(t){var e,r=t.popToken(),a="";if("'"===r.text)e=8,r=t.popToken();else if('"'===r.text)e=16,r=t.popToken();else if("`"===r.text)if("\\"===(r=t.popToken()).text[0])a=r.text.charCodeAt(1);else{if("EOF"===r.text)throw new o("\\char` missing argument");a=r.text.charCodeAt(0)}else e=10;if(e){if(null==(a=da[r.text])||a>=e)throw new o("Invalid base-"+e+" digit "+r.text);for(var n;null!=(n=da[t.future().text])&&n<e;)a*=e,a+=n,t.popToken()}return"\\@char{"+a+"}"});var fa=function(t,e){var r=t.consumeArgs(1)[0];if(1!==r.length)throw new o("\\gdef's first argument must be a macro name");var a=r[0].text,n=0;for(r=t.consumeArgs(1)[0];1===r.length&&"#"===r[0].text;){if(1!==(r=t.consumeArgs(1)[0]).length)throw new o('Invalid argument number length "'+r.length+'"');if(!/^[1-9]$/.test(r[0].text))throw new o('Invalid argument number "'+r[0].text+'"');if(n++,parseInt(r[0].text)!==n)throw new o('Argument number "'+r[0].text+'" out of order');r=t.consumeArgs(1)[0]}return t.macros.set(a,{tokens:r,numArgs:n},e),""};pa("\\gdef",function(t){return fa(t,!0)}),pa("\\def",function(t){return fa(t,!1)}),pa("\\global",function(t){var e=t.consumeArgs(1)[0];if(1!==e.length)throw new o("Invalid command after \\global");var r=e[0].text;if("\\def"===r)return fa(t,!0);throw new o("Invalid command '"+r+"' after \\global")});var ga=function(t,e,r){var a=t.consumeArgs(1)[0];if(1!==a.length)throw new o("\\newcommand's first argument must be a macro name");var n=a[0].text,i=t.isDefined(n);if(i&&!e)throw new o("\\newcommand{"+n+"} attempting to redefine "+n+"; use \\renewcommand");if(!i&&!r)throw new o("\\renewcommand{"+n+"} when command "+n+" does not yet exist; use \\newcommand");var s=0;if(1===(a=t.consumeArgs(1)[0]).length&&"["===a[0].text){for(var h="",l=t.expandNextToken();"]"!==l.text&&"EOF"!==l.text;)h+=l.text,l=t.expandNextToken();if(!h.match(/^\s*[0-9]+\s*$/))throw new o("Invalid number of arguments: "+h);s=parseInt(h),a=t.consumeArgs(1)[0]}return t.macros.set(n,{tokens:a,numArgs:s}),""};pa("\\newcommand",function(t){return ga(t,!1,!0)}),pa("\\renewcommand",function(t){return ga(t,!0,!1)}),pa("\\providecommand",function(t){return ga(t,!0,!0)}),pa("\\bgroup","{"),pa("\\egroup","}"),pa("\\lq","`"),pa("\\rq","'"),pa("\\aa","\\r a"),pa("\\AA","\\r A"),pa("\\textcopyright","\\html@mathml{\\textcircled{c}}{\\char`\xa9}"),pa("\\copyright","\\TextOrMath{\\textcopyright}{\\text{\\textcopyright}}"),pa("\\textregistered","\\html@mathml{\\textcircled{\\scriptsize R}}{\\char`\xae}"),pa("\u212c","\\mathscr{B}"),pa("\u2130","\\mathscr{E}"),pa("\u2131","\\mathscr{F}"),pa("\u210b","\\mathscr{H}"),pa("\u2110","\\mathscr{I}"),pa("\u2112","\\mathscr{L}"),pa("\u2133","\\mathscr{M}"),pa("\u211b","\\mathscr{R}"),pa("\u212d","\\mathfrak{C}"),pa("\u210c","\\mathfrak{H}"),pa("\u2128","\\mathfrak{Z}"),pa("\\Bbbk","\\Bbb{k}"),pa("\xb7","\\cdotp"),pa("\\llap","\\mathllap{\\textrm{#1}}"),pa("\\rlap","\\mathrlap{\\textrm{#1}}"),pa("\\clap","\\mathclap{\\textrm{#1}}"),pa("\\not",'\\html@mathml{\\mathrel{\\mathrlap\\@not}}{\\char"338}'),pa("\\neq","\\html@mathml{\\mathrel{\\not=}}{\\mathrel{\\char`\u2260}}"),pa("\\ne","\\neq"),pa("\u2260","\\neq"),pa("\\notin","\\html@mathml{\\mathrel{{\\in}\\mathllap{/\\mskip1mu}}}{\\mathrel{\\char`\u2209}}"),pa("\u2209","\\notin"),pa("\u2258","\\html@mathml{\\mathrel{=\\kern{-1em}\\raisebox{0.4em}{$\\scriptsize\\frown$}}}{\\mathrel{\\char`\u2258}}"),pa("\u2259","\\html@mathml{\\stackrel{\\tiny\\wedge}{=}}{\\mathrel{\\char`\u2258}}"),pa("\u225a","\\html@mathml{\\stackrel{\\tiny\\vee}{=}}{\\mathrel{\\char`\u225a}}"),pa("\u225b","\\html@mathml{\\stackrel{\\scriptsize\\star}{=}}{\\mathrel{\\char`\u225b}}"),pa("\u225d","\\html@mathml{\\stackrel{\\tiny\\mathrm{def}}{=}}{\\mathrel{\\char`\u225d}}"),pa("\u225e","\\html@mathml{\\stackrel{\\tiny\\mathrm{m}}{=}}{\\mathrel{\\char`\u225e}}"),pa("\u225f","\\html@mathml{\\stackrel{\\tiny?}{=}}{\\mathrel{\\char`\u225f}}"),pa("\u27c2","\\perp"),pa("\u203c","\\mathclose{!\\mkern-0.8mu!}"),pa("\u220c","\\notni"),pa("\u231c","\\ulcorner"),pa("\u231d","\\urcorner"),pa("\u231e","\\llcorner"),pa("\u231f","\\lrcorner"),pa("\xa9","\\copyright"),pa("\xae","\\textregistered"),pa("\ufe0f","\\textregistered"),pa("\\vdots","\\mathord{\\varvdots\\rule{0pt}{15pt}}"),pa("\u22ee","\\vdots"),pa("\\varGamma","\\mathit{\\Gamma}"),pa("\\varDelta","\\mathit{\\Delta}"),pa("\\varTheta","\\mathit{\\Theta}"),pa("\\varLambda","\\mathit{\\Lambda}"),pa("\\varXi","\\mathit{\\Xi}"),pa("\\varPi","\\mathit{\\Pi}"),pa("\\varSigma","\\mathit{\\Sigma}"),pa("\\varUpsilon","\\mathit{\\Upsilon}"),pa("\\varPhi","\\mathit{\\Phi}"),pa("\\varPsi","\\mathit{\\Psi}"),pa("\\varOmega","\\mathit{\\Omega}"),pa("\\substack","\\begin{subarray}{c}#1\\end{subarray}"),pa("\\colon","\\nobreak\\mskip2mu\\mathpunct{}\\mathchoice{\\mkern-3mu}{\\mkern-3mu}{}{}{:}\\mskip6mu"),pa("\\boxed","\\fbox{$\\displaystyle{#1}$}"),pa("\\iff","\\DOTSB\\;\\Longleftrightarrow\\;"),pa("\\implies","\\DOTSB\\;\\Longrightarrow\\;"),pa("\\impliedby","\\DOTSB\\;\\Longleftarrow\\;");var xa={",":"\\dotsc","\\not":"\\dotsb","+":"\\dotsb","=":"\\dotsb","<":"\\dotsb",">":"\\dotsb","-":"\\dotsb","*":"\\dotsb",":":"\\dotsb","\\DOTSB":"\\dotsb","\\coprod":"\\dotsb","\\bigvee":"\\dotsb","\\bigwedge":"\\dotsb","\\biguplus":"\\dotsb","\\bigcap":"\\dotsb","\\bigcup":"\\dotsb","\\prod":"\\dotsb","\\sum":"\\dotsb","\\bigotimes":"\\dotsb","\\bigoplus":"\\dotsb","\\bigodot":"\\dotsb","\\bigsqcup":"\\dotsb","\\And":"\\dotsb","\\longrightarrow":"\\dotsb","\\Longrightarrow":"\\dotsb","\\longleftarrow":"\\dotsb","\\Longleftarrow":"\\dotsb","\\longleftrightarrow":"\\dotsb","\\Longleftrightarrow":"\\dotsb","\\mapsto":"\\dotsb","\\longmapsto":"\\dotsb","\\hookrightarrow":"\\dotsb","\\doteq":"\\dotsb","\\mathbin":"\\dotsb","\\mathrel":"\\dotsb","\\relbar":"\\dotsb","\\Relbar":"\\dotsb","\\xrightarrow":"\\dotsb","\\xleftarrow":"\\dotsb","\\DOTSI":"\\dotsi","\\int":"\\dotsi","\\oint":"\\dotsi","\\iint":"\\dotsi","\\iiint":"\\dotsi","\\iiiint":"\\dotsi","\\idotsint":"\\dotsi","\\DOTSX":"\\dotsx"};pa("\\dots",function(t){var e="\\dotso",r=t.expandAfterFuture().text;return r in xa?e=xa[r]:"\\not"===r.substr(0,4)?e="\\dotsb":r in j.math&&c.contains(["bin","rel"],j.math[r].group)&&(e="\\dotsb"),e});var va={")":!0,"]":!0,"\\rbrack":!0,"\\}":!0,"\\rbrace":!0,"\\rangle":!0,"\\rceil":!0,"\\rfloor":!0,"\\rgroup":!0,"\\rmoustache":!0,"\\right":!0,"\\bigr":!0,"\\biggr":!0,"\\Bigr":!0,"\\Biggr":!0,$:!0,";":!0,".":!0,",":!0};pa("\\dotso",function(t){return t.future().text in va?"\\ldots\\,":"\\ldots"}),pa("\\dotsc",function(t){var e=t.future().text;return e in va&&","!==e?"\\ldots\\,":"\\ldots"}),pa("\\cdots",function(t){return t.future().text in va?"\\@cdots\\,":"\\@cdots"}),pa("\\dotsb","\\cdots"),pa("\\dotsm","\\cdots"),pa("\\dotsi","\\!\\cdots"),pa("\\dotsx","\\ldots\\,"),pa("\\DOTSI","\\relax"),pa("\\DOTSB","\\relax"),pa("\\DOTSX","\\relax"),pa("\\tmspace","\\TextOrMath{\\kern#1#3}{\\mskip#1#2}\\relax"),pa("\\,","\\tmspace+{3mu}{.1667em}"),pa("\\thinspace","\\,"),pa("\\>","\\mskip{4mu}"),pa("\\:","\\tmspace+{4mu}{.2222em}"),pa("\\medspace","\\:"),pa("\\;","\\tmspace+{5mu}{.2777em}"),pa("\\thickspace","\\;"),pa("\\!","\\tmspace-{3mu}{.1667em}"),pa("\\negthinspace","\\!"),pa("\\negmedspace","\\tmspace-{4mu}{.2222em}"),pa("\\negthickspace","\\tmspace-{5mu}{.277em}"),pa("\\enspace","\\kern.5em "),pa("\\enskip","\\hskip.5em\\relax"),pa("\\quad","\\hskip1em\\relax"),pa("\\qquad","\\hskip2em\\relax"),pa("\\tag","\\@ifstar\\tag@literal\\tag@paren"),pa("\\tag@paren","\\tag@literal{({#1})}"),pa("\\tag@literal",function(t){if(t.macros.get("\\df@tag"))throw new o("Multiple \\tag");return"\\gdef\\df@tag{\\text{#1}}"}),pa("\\bmod","\\mathchoice{\\mskip1mu}{\\mskip1mu}{\\mskip5mu}{\\mskip5mu}\\mathbin{\\rm mod}\\mathchoice{\\mskip1mu}{\\mskip1mu}{\\mskip5mu}{\\mskip5mu}"),pa("\\pod","\\allowbreak\\mathchoice{\\mkern18mu}{\\mkern8mu}{\\mkern8mu}{\\mkern8mu}(#1)"),pa("\\pmod","\\pod{{\\rm mod}\\mkern6mu#1}"),pa("\\mod","\\allowbreak\\mathchoice{\\mkern18mu}{\\mkern12mu}{\\mkern12mu}{\\mkern12mu}{\\rm mod}\\,\\,#1"),pa("\\pmb","\\html@mathml{\\@binrel{#1}{\\mathrlap{#1}\\kern0.5px#1}}{\\mathbf{#1}}"),pa("\\\\","\\newline"),pa("\\TeX","\\textrm{\\html@mathml{T\\kern-.1667em\\raisebox{-.5ex}{E}\\kern-.125emX}{TeX}}");var ba=F["Main-Regular"]["T".charCodeAt(0)][1]-.7*F["Main-Regular"]["A".charCodeAt(0)][1]+"em";pa("\\LaTeX","\\textrm{\\html@mathml{L\\kern-.36em\\raisebox{"+ba+"}{\\scriptstyle A}\\kern-.15em\\TeX}{LaTeX}}"),pa("\\KaTeX","\\textrm{\\html@mathml{K\\kern-.17em\\raisebox{"+ba+"}{\\scriptstyle A}\\kern-.15em\\TeX}{KaTeX}}"),pa("\\hspace","\\@ifstar\\@hspacer\\@hspace"),pa("\\@hspace","\\hskip #1\\relax"),pa("\\@hspacer","\\rule{0pt}{0pt}\\hskip #1\\relax"),pa("\\ordinarycolon",":"),pa("\\vcentcolon","\\mathrel{\\mathop\\ordinarycolon}"),pa("\\dblcolon",'\\html@mathml{\\mathrel{\\vcentcolon\\mathrel{\\mkern-.9mu}\\vcentcolon}}{\\mathop{\\char"2237}}'),pa("\\coloneqq",'\\html@mathml{\\mathrel{\\vcentcolon\\mathrel{\\mkern-1.2mu}=}}{\\mathop{\\char"2254}}'),pa("\\Coloneqq",'\\html@mathml{\\mathrel{\\dblcolon\\mathrel{\\mkern-1.2mu}=}}{\\mathop{\\char"2237\\char"3d}}'),pa("\\coloneq",'\\html@mathml{\\mathrel{\\vcentcolon\\mathrel{\\mkern-1.2mu}\\mathrel{-}}}{\\mathop{\\char"3a\\char"2212}}'),pa("\\Coloneq",'\\html@mathml{\\mathrel{\\dblcolon\\mathrel{\\mkern-1.2mu}\\mathrel{-}}}{\\mathop{\\char"2237\\char"2212}}'),pa("\\eqqcolon",'\\html@mathml{\\mathrel{=\\mathrel{\\mkern-1.2mu}\\vcentcolon}}{\\mathop{\\char"2255}}'),pa("\\Eqqcolon",'\\html@mathml{\\mathrel{=\\mathrel{\\mkern-1.2mu}\\dblcolon}}{\\mathop{\\char"3d\\char"2237}}'),pa("\\eqcolon",'\\html@mathml{\\mathrel{\\mathrel{-}\\mathrel{\\mkern-1.2mu}\\vcentcolon}}{\\mathop{\\char"2239}}'),pa("\\Eqcolon",'\\html@mathml{\\mathrel{\\mathrel{-}\\mathrel{\\mkern-1.2mu}\\dblcolon}}{\\mathop{\\char"2212\\char"2237}}'),pa("\\colonapprox",'\\html@mathml{\\mathrel{\\vcentcolon\\mathrel{\\mkern-1.2mu}\\approx}}{\\mathop{\\char"3a\\char"2248}}'),pa("\\Colonapprox",'\\html@mathml{\\mathrel{\\dblcolon\\mathrel{\\mkern-1.2mu}\\approx}}{\\mathop{\\char"2237\\char"2248}}'),pa("\\colonsim",'\\html@mathml{\\mathrel{\\vcentcolon\\mathrel{\\mkern-1.2mu}\\sim}}{\\mathop{\\char"3a\\char"223c}}'),pa("\\Colonsim",'\\html@mathml{\\mathrel{\\dblcolon\\mathrel{\\mkern-1.2mu}\\sim}}{\\mathop{\\char"2237\\char"223c}}'),pa("\u2237","\\dblcolon"),pa("\u2239","\\eqcolon"),pa("\u2254","\\coloneqq"),pa("\u2255","\\eqqcolon"),pa("\u2a74","\\Coloneqq"),pa("\\ratio","\\vcentcolon"),pa("\\coloncolon","\\dblcolon"),pa("\\colonequals","\\coloneqq"),pa("\\coloncolonequals","\\Coloneqq"),pa("\\equalscolon","\\eqqcolon"),pa("\\equalscoloncolon","\\Eqqcolon"),pa("\\colonminus","\\coloneq"),pa("\\coloncolonminus","\\Coloneq"),pa("\\minuscolon","\\eqcolon"),pa("\\minuscoloncolon","\\Eqcolon"),pa("\\coloncolonapprox","\\Colonapprox"),pa("\\coloncolonsim","\\Colonsim"),pa("\\simcolon","\\mathrel{\\sim\\mathrel{\\mkern-1.2mu}\\vcentcolon}"),pa("\\simcoloncolon","\\mathrel{\\sim\\mathrel{\\mkern-1.2mu}\\dblcolon}"),pa("\\approxcolon","\\mathrel{\\approx\\mathrel{\\mkern-1.2mu}\\vcentcolon}"),pa("\\approxcoloncolon","\\mathrel{\\approx\\mathrel{\\mkern-1.2mu}\\dblcolon}"),pa("\\notni","\\html@mathml{\\not\\ni}{\\mathrel{\\char`\u220c}}"),pa("\\limsup","\\DOTSB\\operatorname*{lim\\,sup}"),pa("\\liminf","\\DOTSB\\operatorname*{lim\\,inf}"),pa("\\gvertneqq","\\html@mathml{\\@gvertneqq}{\u2269}"),pa("\\lvertneqq","\\html@mathml{\\@lvertneqq}{\u2268}"),pa("\\ngeqq","\\html@mathml{\\@ngeqq}{\u2271}"),pa("\\ngeqslant","\\html@mathml{\\@ngeqslant}{\u2271}"),pa("\\nleqq","\\html@mathml{\\@nleqq}{\u2270}"),pa("\\nleqslant","\\html@mathml{\\@nleqslant}{\u2270}"),pa("\\nshortmid","\\html@mathml{\\@nshortmid}{\u2224}"),pa("\\nshortparallel","\\html@mathml{\\@nshortparallel}{\u2226}"),pa("\\nsubseteqq","\\html@mathml{\\@nsubseteqq}{\u2288}"),pa("\\nsupseteqq","\\html@mathml{\\@nsupseteqq}{\u2289}"),pa("\\varsubsetneq","\\html@mathml{\\@varsubsetneq}{\u228a}"),pa("\\varsubsetneqq","\\html@mathml{\\@varsubsetneqq}{\u2acb}"),pa("\\varsupsetneq","\\html@mathml{\\@varsupsetneq}{\u228b}"),pa("\\varsupsetneqq","\\html@mathml{\\@varsupsetneqq}{\u2acc}"),pa("\\llbracket","\\html@mathml{\\mathopen{[\\mkern-3.2mu[}}{\\mathopen{\\char`\u27e6}}"),pa("\\rrbracket","\\html@mathml{\\mathclose{]\\mkern-3.2mu]}}{\\mathclose{\\char`\u27e7}}"),pa("\u27e6","\\llbracket"),pa("\u27e7","\\rrbracket"),pa("\\lBrace","\\html@mathml{\\mathopen{\\{\\mkern-3.2mu[}}{\\mathopen{\\char`\u2983}}"),pa("\\rBrace","\\html@mathml{\\mathclose{]\\mkern-3.2mu\\}}}{\\mathclose{\\char`\u2984}}"),pa("\u2983","\\lBrace"),pa("\u2984","\\rBrace"),pa("\\darr","\\downarrow"),pa("\\dArr","\\Downarrow"),pa("\\Darr","\\Downarrow"),pa("\\lang","\\langle"),pa("\\rang","\\rangle"),pa("\\uarr","\\uparrow"),pa("\\uArr","\\Uparrow"),pa("\\Uarr","\\Uparrow"),pa("\\N","\\mathbb{N}"),pa("\\R","\\mathbb{R}"),pa("\\Z","\\mathbb{Z}"),pa("\\alef","\\aleph"),pa("\\alefsym","\\aleph"),pa("\\Alpha","\\mathrm{A}"),pa("\\Beta","\\mathrm{B}"),pa("\\bull","\\bullet"),pa("\\Chi","\\mathrm{X}"),pa("\\clubs","\\clubsuit"),pa("\\cnums","\\mathbb{C}"),pa("\\Complex","\\mathbb{C}"),pa("\\Dagger","\\ddagger"),pa("\\diamonds","\\diamondsuit"),pa("\\empty","\\emptyset"),pa("\\Epsilon","\\mathrm{E}"),pa("\\Eta","\\mathrm{H}"),pa("\\exist","\\exists"),pa("\\harr","\\leftrightarrow"),pa("\\hArr","\\Leftrightarrow"),pa("\\Harr","\\Leftrightarrow"),pa("\\hearts","\\heartsuit"),pa("\\image","\\Im"),pa("\\infin","\\infty"),pa("\\Iota","\\mathrm{I}"),pa("\\isin","\\in"),pa("\\Kappa","\\mathrm{K}"),pa("\\larr","\\leftarrow"),pa("\\lArr","\\Leftarrow"),pa("\\Larr","\\Leftarrow"),pa("\\lrarr","\\leftrightarrow"),pa("\\lrArr","\\Leftrightarrow"),pa("\\Lrarr","\\Leftrightarrow"),pa("\\Mu","\\mathrm{M}"),pa("\\natnums","\\mathbb{N}"),pa("\\Nu","\\mathrm{N}"),pa("\\Omicron","\\mathrm{O}"),pa("\\plusmn","\\pm"),pa("\\rarr","\\rightarrow"),pa("\\rArr","\\Rightarrow"),pa("\\Rarr","\\Rightarrow"),pa("\\real","\\Re"),pa("\\reals","\\mathbb{R}"),pa("\\Reals","\\mathbb{R}"),pa("\\Rho","\\mathrm{P}"),pa("\\sdot","\\cdot"),pa("\\sect","\\S"),pa("\\spades","\\spadesuit"),pa("\\sub","\\subset"),pa("\\sube","\\subseteq"),pa("\\supe","\\supseteq"),pa("\\Tau","\\mathrm{T}"),pa("\\thetasym","\\vartheta"),pa("\\weierp","\\wp"),pa("\\Zeta","\\mathrm{Z}"),pa("\\argmin","\\DOTSB\\operatorname*{arg\\,min}"),pa("\\argmax","\\DOTSB\\operatorname*{arg\\,max}"),pa("\\plim","\\DOTSB\\mathop{\\operatorname{plim}}\\limits"),pa("\\blue","\\textcolor{##6495ed}{#1}"),pa("\\orange","\\textcolor{##ffa500}{#1}"),pa("\\pink","\\textcolor{##ff00af}{#1}"),pa("\\red","\\textcolor{##df0030}{#1}"),pa("\\green","\\textcolor{##28ae7b}{#1}"),pa("\\gray","\\textcolor{gray}{#1}"),pa("\\purple","\\textcolor{##9d38bd}{#1}"),pa("\\blueA","\\textcolor{##ccfaff}{#1}"),pa("\\blueB","\\textcolor{##80f6ff}{#1}"),pa("\\blueC","\\textcolor{##63d9ea}{#1}"),pa("\\blueD","\\textcolor{##11accd}{#1}"),pa("\\blueE","\\textcolor{##0c7f99}{#1}"),pa("\\tealA","\\textcolor{##94fff5}{#1}"),pa("\\tealB","\\textcolor{##26edd5}{#1}"),pa("\\tealC","\\textcolor{##01d1c1}{#1}"),pa("\\tealD","\\textcolor{##01a995}{#1}"),pa("\\tealE","\\textcolor{##208170}{#1}"),pa("\\greenA","\\textcolor{##b6ffb0}{#1}"),pa("\\greenB","\\textcolor{##8af281}{#1}"),pa("\\greenC","\\textcolor{##74cf70}{#1}"),pa("\\greenD","\\textcolor{##1fab54}{#1}"),pa("\\greenE","\\textcolor{##0d923f}{#1}"),pa("\\goldA","\\textcolor{##ffd0a9}{#1}"),pa("\\goldB","\\textcolor{##ffbb71}{#1}"),pa("\\goldC","\\textcolor{##ff9c39}{#1}"),pa("\\goldD","\\textcolor{##e07d10}{#1}"),pa("\\goldE","\\textcolor{##a75a05}{#1}"),pa("\\redA","\\textcolor{##fca9a9}{#1}"),pa("\\redB","\\textcolor{##ff8482}{#1}"),pa("\\redC","\\textcolor{##f9685d}{#1}"),pa("\\redD","\\textcolor{##e84d39}{#1}"),pa("\\redE","\\textcolor{##bc2612}{#1}"),pa("\\maroonA","\\textcolor{##ffbde0}{#1}"),pa("\\maroonB","\\textcolor{##ff92c6}{#1}"),pa("\\maroonC","\\textcolor{##ed5fa6}{#1}"),pa("\\maroonD","\\textcolor{##ca337c}{#1}"),pa("\\maroonE","\\textcolor{##9e034e}{#1}"),pa("\\purpleA","\\textcolor{##ddd7ff}{#1}"),pa("\\purpleB","\\textcolor{##c6b9fc}{#1}"),pa("\\purpleC","\\textcolor{##aa87ff}{#1}"),pa("\\purpleD","\\textcolor{##7854ab}{#1}"),pa("\\purpleE","\\textcolor{##543b78}{#1}"),pa("\\mintA","\\textcolor{##f5f9e8}{#1}"),pa("\\mintB","\\textcolor{##edf2df}{#1}"),pa("\\mintC","\\textcolor{##e0e5cc}{#1}"),pa("\\grayA","\\textcolor{##f6f7f7}{#1}"),pa("\\grayB","\\textcolor{##f0f1f2}{#1}"),pa("\\grayC","\\textcolor{##e3e5e6}{#1}"),pa("\\grayD","\\textcolor{##d6d8da}{#1}"),pa("\\grayE","\\textcolor{##babec2}{#1}"),pa("\\grayF","\\textcolor{##888d93}{#1}"),pa("\\grayG","\\textcolor{##626569}{#1}"),pa("\\grayH","\\textcolor{##3b3e40}{#1}"),pa("\\grayI","\\textcolor{##21242c}{#1}"),pa("\\kaBlue","\\textcolor{##314453}{#1}"),pa("\\kaGreen","\\textcolor{##71B307}{#1}");var ya={"\\relax":!0,"^":!0,_:!0,"\\limits":!0,"\\nolimits":!0},wa=function(){function t(t,e,r){this.settings=void 0,this.expansionCount=void 0,this.lexer=void 0,this.macros=void 0,this.stack=void 0,this.mode=void 0,this.settings=e,this.expansionCount=0,this.feed(t),this.macros=new ma(ua,e.macros),this.mode=r,this.stack=[]}var e=t.prototype;return e.feed=function(t){this.lexer=new la(t,this.settings)},e.switchMode=function(t){this.mode=t},e.beginGroup=function(){this.macros.beginGroup()},e.endGroup=function(){this.macros.endGroup()},e.future=function(){return 0===this.stack.length&&this.pushToken(this.lexer.lex()),this.stack[this.stack.length-1]},e.popToken=function(){return this.future(),this.stack.pop()},e.pushToken=function(t){this.stack.push(t)},e.pushTokens=function(t){var e;(e=this.stack).push.apply(e,t)},e.consumeSpaces=function(){for(;;){if(" "!==this.future().text)break;this.stack.pop()}},e.consumeArgs=function(t){for(var e=[],r=0;r<t;++r){this.consumeSpaces();var a=this.popToken();if("{"===a.text){for(var n=[],i=1;0!==i;){var s=this.popToken();if(n.push(s),"{"===s.text)++i;else if("}"===s.text)--i;else if("EOF"===s.text)throw new o("End of input in macro argument",a)}n.pop(),n.reverse(),e[r]=n}else{if("EOF"===a.text)throw new o("End of input expecting macro argument");e[r]=[a]}}return e},e.expandOnce=function(){var t=this.popToken(),e=t.text,r=this._getExpansion(e);if(null==r)return this.pushToken(t),t;if(this.expansionCount++,this.expansionCount>this.settings.maxExpand)throw new o("Too many expansions: infinite loop or need to increase maxExpand setting");var a=r.tokens;if(r.numArgs)for(var n=this.consumeArgs(r.numArgs),i=(a=a.slice()).length-1;i>=0;--i){var s=a[i];if("#"===s.text){if(0===i)throw new o("Incomplete placeholder at end of macro body",s);if("#"===(s=a[--i]).text)a.splice(i+1,1);else{if(!/^[1-9]$/.test(s.text))throw new o("Not a valid argument number",s);var h;(h=a).splice.apply(h,[i,2].concat(n[+s.text-1]))}}}return this.pushTokens(a),a},e.expandAfterFuture=function(){return this.expandOnce(),this.future()},e.expandNextToken=function(){for(;;){var t=this.expandOnce();if(t instanceof n){if("\\relax"!==t.text)return this.stack.pop();this.stack.pop()}}throw new Error},e.expandMacro=function(t){if(this.macros.get(t)){var e=[],r=this.stack.length;for(this.pushToken(new n(t));this.stack.length>r;){this.expandOnce()instanceof n&&e.push(this.stack.pop())}return e}},e.expandMacroAsText=function(t){var e=this.expandMacro(t);return e?e.map(function(t){return t.text}).join(""):e},e._getExpansion=function(t){var e=this.macros.get(t);if(null==e)return e;var r="function"==typeof e?e(this):e;if("string"==typeof r){var a=0;if(-1!==r.indexOf("#"))for(var n=r.replace(/##/g,"");-1!==n.indexOf("#"+(a+1));)++a;for(var i=new la(r,this.settings),o=[],s=i.lex();"EOF"!==s.text;)o.push(s),s=i.lex();return o.reverse(),{tokens:o,numArgs:a}}return r},e.isDefined=function(t){return this.macros.has(t)||ia.hasOwnProperty(t)||j.math.hasOwnProperty(t)||j.text.hasOwnProperty(t)||ya.hasOwnProperty(t)},t}(),ka={"\u0301":{text:"\\'",math:"\\acute"},"\u0300":{text:"\\`",math:"\\grave"},"\u0308":{text:'\\"',math:"\\ddot"},"\u0303":{text:"\\~",math:"\\tilde"},"\u0304":{text:"\\=",math:"\\bar"},"\u0306":{text:"\\u",math:"\\breve"},"\u030c":{text:"\\v",math:"\\check"},"\u0302":{text:"\\^",math:"\\hat"},"\u0307":{text:"\\.",math:"\\dot"},"\u030a":{text:"\\r",math:"\\mathring"},"\u030b":{text:"\\H"}},Sa={"\xe1":"a\u0301","\xe0":"a\u0300","\xe4":"a\u0308","\u01df":"a\u0308\u0304","\xe3":"a\u0303","\u0101":"a\u0304","\u0103":"a\u0306","\u1eaf":"a\u0306\u0301","\u1eb1":"a\u0306\u0300","\u1eb5":"a\u0306\u0303","\u01ce":"a\u030c","\xe2":"a\u0302","\u1ea5":"a\u0302\u0301","\u1ea7":"a\u0302\u0300","\u1eab":"a\u0302\u0303","\u0227":"a\u0307","\u01e1":"a\u0307\u0304","\xe5":"a\u030a","\u01fb":"a\u030a\u0301","\u1e03":"b\u0307","\u0107":"c\u0301","\u010d":"c\u030c","\u0109":"c\u0302","\u010b":"c\u0307","\u010f":"d\u030c","\u1e0b":"d\u0307","\xe9":"e\u0301","\xe8":"e\u0300","\xeb":"e\u0308","\u1ebd":"e\u0303","\u0113":"e\u0304","\u1e17":"e\u0304\u0301","\u1e15":"e\u0304\u0300","\u0115":"e\u0306","\u011b":"e\u030c","\xea":"e\u0302","\u1ebf":"e\u0302\u0301","\u1ec1":"e\u0302\u0300","\u1ec5":"e\u0302\u0303","\u0117":"e\u0307","\u1e1f":"f\u0307","\u01f5":"g\u0301","\u1e21":"g\u0304","\u011f":"g\u0306","\u01e7":"g\u030c","\u011d":"g\u0302","\u0121":"g\u0307","\u1e27":"h\u0308","\u021f":"h\u030c","\u0125":"h\u0302","\u1e23":"h\u0307","\xed":"i\u0301","\xec":"i\u0300","\xef":"i\u0308","\u1e2f":"i\u0308\u0301","\u0129":"i\u0303","\u012b":"i\u0304","\u012d":"i\u0306","\u01d0":"i\u030c","\xee":"i\u0302","\u01f0":"j\u030c","\u0135":"j\u0302","\u1e31":"k\u0301","\u01e9":"k\u030c","\u013a":"l\u0301","\u013e":"l\u030c","\u1e3f":"m\u0301","\u1e41":"m\u0307","\u0144":"n\u0301","\u01f9":"n\u0300","\xf1":"n\u0303","\u0148":"n\u030c","\u1e45":"n\u0307","\xf3":"o\u0301","\xf2":"o\u0300","\xf6":"o\u0308","\u022b":"o\u0308\u0304","\xf5":"o\u0303","\u1e4d":"o\u0303\u0301","\u1e4f":"o\u0303\u0308","\u022d":"o\u0303\u0304","\u014d":"o\u0304","\u1e53":"o\u0304\u0301","\u1e51":"o\u0304\u0300","\u014f":"o\u0306","\u01d2":"o\u030c","\xf4":"o\u0302","\u1ed1":"o\u0302\u0301","\u1ed3":"o\u0302\u0300","\u1ed7":"o\u0302\u0303","\u022f":"o\u0307","\u0231":"o\u0307\u0304","\u0151":"o\u030b","\u1e55":"p\u0301","\u1e57":"p\u0307","\u0155":"r\u0301","\u0159":"r\u030c","\u1e59":"r\u0307","\u015b":"s\u0301","\u1e65":"s\u0301\u0307","\u0161":"s\u030c","\u1e67":"s\u030c\u0307","\u015d":"s\u0302","\u1e61":"s\u0307","\u1e97":"t\u0308","\u0165":"t\u030c","\u1e6b":"t\u0307","\xfa":"u\u0301","\xf9":"u\u0300","\xfc":"u\u0308","\u01d8":"u\u0308\u0301","\u01dc":"u\u0308\u0300","\u01d6":"u\u0308\u0304","\u01da":"u\u0308\u030c","\u0169":"u\u0303","\u1e79":"u\u0303\u0301","\u016b":"u\u0304","\u1e7b":"u\u0304\u0308","\u016d":"u\u0306","\u01d4":"u\u030c","\xfb":"u\u0302","\u016f":"u\u030a","\u0171":"u\u030b","\u1e7d":"v\u0303","\u1e83":"w\u0301","\u1e81":"w\u0300","\u1e85":"w\u0308","\u0175":"w\u0302","\u1e87":"w\u0307","\u1e98":"w\u030a","\u1e8d":"x\u0308","\u1e8b":"x\u0307","\xfd":"y\u0301","\u1ef3":"y\u0300","\xff":"y\u0308","\u1ef9":"y\u0303","\u0233":"y\u0304","\u0177":"y\u0302","\u1e8f":"y\u0307","\u1e99":"y\u030a","\u017a":"z\u0301","\u017e":"z\u030c","\u1e91":"z\u0302","\u017c":"z\u0307","\xc1":"A\u0301","\xc0":"A\u0300","\xc4":"A\u0308","\u01de":"A\u0308\u0304","\xc3":"A\u0303","\u0100":"A\u0304","\u0102":"A\u0306","\u1eae":"A\u0306\u0301","\u1eb0":"A\u0306\u0300","\u1eb4":"A\u0306\u0303","\u01cd":"A\u030c","\xc2":"A\u0302","\u1ea4":"A\u0302\u0301","\u1ea6":"A\u0302\u0300","\u1eaa":"A\u0302\u0303","\u0226":"A\u0307","\u01e0":"A\u0307\u0304","\xc5":"A\u030a","\u01fa":"A\u030a\u0301","\u1e02":"B\u0307","\u0106":"C\u0301","\u010c":"C\u030c","\u0108":"C\u0302","\u010a":"C\u0307","\u010e":"D\u030c","\u1e0a":"D\u0307","\xc9":"E\u0301","\xc8":"E\u0300","\xcb":"E\u0308","\u1ebc":"E\u0303","\u0112":"E\u0304","\u1e16":"E\u0304\u0301","\u1e14":"E\u0304\u0300","\u0114":"E\u0306","\u011a":"E\u030c","\xca":"E\u0302","\u1ebe":"E\u0302\u0301","\u1ec0":"E\u0302\u0300","\u1ec4":"E\u0302\u0303","\u0116":"E\u0307","\u1e1e":"F\u0307","\u01f4":"G\u0301","\u1e20":"G\u0304","\u011e":"G\u0306","\u01e6":"G\u030c","\u011c":"G\u0302","\u0120":"G\u0307","\u1e26":"H\u0308","\u021e":"H\u030c","\u0124":"H\u0302","\u1e22":"H\u0307","\xcd":"I\u0301","\xcc":"I\u0300","\xcf":"I\u0308","\u1e2e":"I\u0308\u0301","\u0128":"I\u0303","\u012a":"I\u0304","\u012c":"I\u0306","\u01cf":"I\u030c","\xce":"I\u0302","\u0130":"I\u0307","\u0134":"J\u0302","\u1e30":"K\u0301","\u01e8":"K\u030c","\u0139":"L\u0301","\u013d":"L\u030c","\u1e3e":"M\u0301","\u1e40":"M\u0307","\u0143":"N\u0301","\u01f8":"N\u0300","\xd1":"N\u0303","\u0147":"N\u030c","\u1e44":"N\u0307","\xd3":"O\u0301","\xd2":"O\u0300","\xd6":"O\u0308","\u022a":"O\u0308\u0304","\xd5":"O\u0303","\u1e4c":"O\u0303\u0301","\u1e4e":"O\u0303\u0308","\u022c":"O\u0303\u0304","\u014c":"O\u0304","\u1e52":"O\u0304\u0301","\u1e50":"O\u0304\u0300","\u014e":"O\u0306","\u01d1":"O\u030c","\xd4":"O\u0302","\u1ed0":"O\u0302\u0301","\u1ed2":"O\u0302\u0300","\u1ed6":"O\u0302\u0303","\u022e":"O\u0307","\u0230":"O\u0307\u0304","\u0150":"O\u030b","\u1e54":"P\u0301","\u1e56":"P\u0307","\u0154":"R\u0301","\u0158":"R\u030c","\u1e58":"R\u0307","\u015a":"S\u0301","\u1e64":"S\u0301\u0307","\u0160":"S\u030c","\u1e66":"S\u030c\u0307","\u015c":"S\u0302","\u1e60":"S\u0307","\u0164":"T\u030c","\u1e6a":"T\u0307","\xda":"U\u0301","\xd9":"U\u0300","\xdc":"U\u0308","\u01d7":"U\u0308\u0301","\u01db":"U\u0308\u0300","\u01d5":"U\u0308\u0304","\u01d9":"U\u0308\u030c","\u0168":"U\u0303","\u1e78":"U\u0303\u0301","\u016a":"U\u0304","\u1e7a":"U\u0304\u0308","\u016c":"U\u0306","\u01d3":"U\u030c","\xdb":"U\u0302","\u016e":"U\u030a","\u0170":"U\u030b","\u1e7c":"V\u0303","\u1e82":"W\u0301","\u1e80":"W\u0300","\u1e84":"W\u0308","\u0174":"W\u0302","\u1e86":"W\u0307","\u1e8c":"X\u0308","\u1e8a":"X\u0307","\xdd":"Y\u0301","\u1ef2":"Y\u0300","\u0178":"Y\u0308","\u1ef8":"Y\u0303","\u0232":"Y\u0304","\u0176":"Y\u0302","\u1e8e":"Y\u0307","\u0179":"Z\u0301","\u017d":"Z\u030c","\u1e90":"Z\u0302","\u017b":"Z\u0307","\u03ac":"\u03b1\u0301","\u1f70":"\u03b1\u0300","\u1fb1":"\u03b1\u0304","\u1fb0":"\u03b1\u0306","\u03ad":"\u03b5\u0301","\u1f72":"\u03b5\u0300","\u03ae":"\u03b7\u0301","\u1f74":"\u03b7\u0300","\u03af":"\u03b9\u0301","\u1f76":"\u03b9\u0300","\u03ca":"\u03b9\u0308","\u0390":"\u03b9\u0308\u0301","\u1fd2":"\u03b9\u0308\u0300","\u1fd1":"\u03b9\u0304","\u1fd0":"\u03b9\u0306","\u03cc":"\u03bf\u0301","\u1f78":"\u03bf\u0300","\u03cd":"\u03c5\u0301","\u1f7a":"\u03c5\u0300","\u03cb":"\u03c5\u0308","\u03b0":"\u03c5\u0308\u0301","\u1fe2":"\u03c5\u0308\u0300","\u1fe1":"\u03c5\u0304","\u1fe0":"\u03c5\u0306","\u03ce":"\u03c9\u0301","\u1f7c":"\u03c9\u0300","\u038e":"\u03a5\u0301","\u1fea":"\u03a5\u0300","\u03ab":"\u03a5\u0308","\u1fe9":"\u03a5\u0304","\u1fe8":"\u03a5\u0306","\u038f":"\u03a9\u0301","\u1ffa":"\u03a9\u0300"},Ma=function(){function t(t,e){this.mode=void 0,this.gullet=void 0,this.settings=void 0,this.leftrightDepth=void 0,this.nextToken=void 0,this.mode="math",this.gullet=new wa(t,e,this.mode),this.settings=e,this.leftrightDepth=0}var e=t.prototype;return e.expect=function(t,e){if(void 0===e&&(e=!0),this.fetch().text!==t)throw new o("Expected '"+t+"', got '"+this.fetch().text+"'",this.fetch());e&&this.consume()},e.consume=function(){this.nextToken=null},e.fetch=function(){return null==this.nextToken&&(this.nextToken=this.gullet.expandNextToken()),this.nextToken},e.switchMode=function(t){this.mode=t,this.gullet.switchMode(t)},e.parse=function(){this.gullet.beginGroup(),this.settings.colorIsTextColor&&this.gullet.macros.set("\\color","\\textcolor");var t=this.parseExpression(!1);return this.expect("EOF"),this.gullet.endGroup(),t},e.parseExpression=function(e,r){for(var a=[];;){"math"===this.mode&&this.consumeSpaces();var n=this.fetch();if(-1!==t.endOfExpression.indexOf(n.text))break;if(r&&n.text===r)break;if(e&&ia[n.text]&&ia[n.text].infix)break;var i=this.parseAtom(r);if(!i)break;a.push(i)}return"text"===this.mode&&this.formLigatures(a),this.handleInfixNodes(a)},e.handleInfixNodes=function(t){for(var e,r=-1,a=0;a<t.length;a++){var n=Vt(t[a],"infix");if(n){if(-1!==r)throw new o("only one infix operator per group",n.token);r=a,e=n.replaceWith}}if(-1!==r&&e){var i,s,h=t.slice(0,r),l=t.slice(r+1);return i=1===h.length&&"ordgroup"===h[0].type?h[0]:{type:"ordgroup",mode:this.mode,body:h},s=1===l.length&&"ordgroup"===l[0].type?l[0]:{type:"ordgroup",mode:this.mode,body:l},["\\\\abovefrac"===e?this.callFunction(e,[i,t[r],s],[]):this.callFunction(e,[i,s],[])]}return t},e.handleSupSubscript=function(e){var r=this.fetch(),a=r.text;this.consume();var n=this.parseGroup(e,!1,t.SUPSUB_GREEDINESS,void 0,void 0,!0);if(!n)throw new o("Expected group after '"+a+"'",r);return n},e.formatUnsupportedCmd=function(t){for(var e=[],r=0;r<t.length;r++)e.push({type:"textord",mode:"text",text:t[r]});var a={type:"text",mode:this.mode,body:e};return{type:"color",mode:this.mode,color:this.settings.errorColor,body:[a]}},e.parseAtom=function(t){var e,r,a=this.parseGroup("atom",!1,null,t);if("text"===this.mode)return a;for(;;){this.consumeSpaces();var n=this.fetch();if("\\limits"===n.text||"\\nolimits"===n.text){var i=Vt(a,"op");if(i){var s="\\limits"===n.text;i.limits=s,i.alwaysHandleSupSub=!0}else{if(!(i=Vt(a,"operatorname"))||!i.alwaysHandleSupSub)throw new o("Limit controls must follow a math operator",n);var h="\\limits"===n.text;i.limits=h}this.consume()}else if("^"===n.text){if(e)throw new o("Double superscript",n);e=this.handleSupSubscript("superscript")}else if("_"===n.text){if(r)throw new o("Double subscript",n);r=this.handleSupSubscript("subscript")}else{if("'"!==n.text)break;if(e)throw new o("Double superscript",n);var l={type:"textord",mode:this.mode,text:"\\prime"},m=[l];for(this.consume();"'"===this.fetch().text;)m.push(l),this.consume();"^"===this.fetch().text&&m.push(this.handleSupSubscript("superscript")),e={type:"ordgroup",mode:this.mode,body:m}}}return e||r?{type:"supsub",mode:this.mode,base:a,sup:e,sub:r}:a},e.parseFunction=function(t,e,r){var a=this.fetch(),n=a.text,i=ia[n];if(!i)return null;if(this.consume(),null!=r&&i.greediness<=r)throw new o("Got function '"+n+"' with no arguments"+(e?" as "+e:""),a);if("text"===this.mode&&!i.allowedInText)throw new o("Can't use function '"+n+"' in text mode",a);if("math"===this.mode&&!1===i.allowedInMath)throw new o("Can't use function '"+n+"' in math mode",a);var s=this.parseArguments(n,i),h=s.args,l=s.optArgs;return this.callFunction(n,h,l,a,t)},e.callFunction=function(t,e,r,a,n){var i={funcName:t,parser:this,token:a,breakOnTokenText:n},s=ia[t];if(s&&s.handler)return s.handler(i,e,r);throw new o("No function handler for "+t)},e.parseArguments=function(t,e){var r=e.numArgs+e.numOptionalArgs;if(0===r)return{args:[],optArgs:[]};for(var a=e.greediness,n=[],i=[],s=0;s<r;s++){var h=e.argTypes&&e.argTypes[s],l=s<e.numOptionalArgs,m=s>0&&!l||0===s&&!l&&"math"===this.mode,c=this.parseGroupOfType("argument to '"+t+"'",h,l,a,m);if(!c){if(l){i.push(null);continue}throw new o("Expected group after '"+t+"'",this.fetch())}(l?i:n).push(c)}return{args:n,optArgs:i}},e.parseGroupOfType=function(t,e,r,a,n){switch(e){case"color":return n&&this.consumeSpaces(),this.parseColorGroup(r);case"size":return n&&this.consumeSpaces(),this.parseSizeGroup(r);case"url":return this.parseUrlGroup(r,n);case"math":case"text":return this.parseGroup(t,r,a,void 0,e,n);case"hbox":var i=this.parseGroup(t,r,a,void 0,"text",n);return i?{type:"styling",mode:i.mode,body:[i],style:"text"}:i;case"raw":if(n&&this.consumeSpaces(),r&&"{"===this.fetch().text)return null;var s=this.parseStringGroup("raw",r,!0);if(s)return{type:"raw",mode:"text",string:s.text};throw new o("Expected raw group",this.fetch());case"original":case null:case void 0:return this.parseGroup(t,r,a,void 0,void 0,n);default:throw new o("Unknown group type as "+t,this.fetch())}},e.consumeSpaces=function(){for(;" "===this.fetch().text;)this.consume()},e.parseStringGroup=function(t,e,r){var a=e?"[":"{",n=e?"]":"}",i=this.fetch();if(i.text!==a){if(e)return null;if(r&&"EOF"!==i.text&&/[^{}[\]]/.test(i.text))return this.consume(),i}var s=this.mode;this.mode="text",this.expect(a);for(var h,l="",m=this.fetch(),c=0,u=m;(h=this.fetch()).text!==n||r&&c>0;){switch(h.text){case"EOF":throw new o("Unexpected end of input in "+t,m.range(u,l));case a:c++;break;case n:c--}l+=(u=h).text,this.consume()}return this.expect(n),this.mode=s,m.range(u,l)},e.parseRegexGroup=function(t,e){var r=this.mode;this.mode="text";for(var a,n=this.fetch(),i=n,s="";"EOF"!==(a=this.fetch()).text&&t.test(s+a.text);)s+=(i=a).text,this.consume();if(""===s)throw new o("Invalid "+e+": '"+n.text+"'",n);return this.mode=r,n.range(i,s)},e.parseColorGroup=function(t){var e=this.parseStringGroup("color",t);if(!e)return null;var r=/^(#[a-f0-9]{3}|#?[a-f0-9]{6}|[a-z]+)$/i.exec(e.text);if(!r)throw new o("Invalid color: '"+e.text+"'",e);var a=r[0];return/^[0-9a-f]{6}$/i.test(a)&&(a="#"+a),{type:"color-token",mode:this.mode,color:a}},e.parseSizeGroup=function(t){var e,r=!1;if(!(e=t||"{"===this.fetch().text?this.parseStringGroup("size",t):this.parseRegexGroup(/^[-+]? *(?:$|\d+|\d+\.\d*|\.\d*) *[a-z]{0,2} *$/,"size")))return null;t||0!==e.text.length||(e.text="0pt",r=!0);var a=/([-+]?) *(\d+(?:\.\d*)?|\.\d+) *([a-z]{2})/.exec(e.text);if(!a)throw new o("Invalid size: '"+e.text+"'",e);var n={number:+(a[1]+a[2]),unit:a[3]};if(!At(n))throw new o("Invalid unit: '"+n.unit+"'",e);return{type:"size",mode:this.mode,value:n,isBlank:r}},e.parseUrlGroup=function(t,e){this.gullet.lexer.setCatcode("%",13);var r=this.parseStringGroup("url",t,!0);if(this.gullet.lexer.setCatcode("%",14),!r)return null;var a=r.text.replace(/\\([#$%&~_^{}])/g,"$1");return{type:"url",mode:this.mode,url:a}},e.parseGroup=function(e,r,n,i,s,h){var l=this.mode;s&&this.switchMode(s),h&&this.consumeSpaces();var m,c=this.fetch(),u=c.text;if(r?"["===u:"{"===u||"\\begingroup"===u){this.consume();var p=t.endOfGroup[u];this.gullet.beginGroup();var d=this.parseExpression(!1,p),f=this.fetch();this.expect(p),this.gullet.endGroup(),m={type:"ordgroup",mode:this.mode,loc:a.range(c,f),body:d,semisimple:"\\begingroup"===u||void 0}}else if(r)m=null;else if(null==(m=this.parseFunction(i,e,n)||this.parseSymbol())&&"\\"===u[0]&&!ya.hasOwnProperty(u)){if(this.settings.throwOnError)throw new o("Undefined control sequence: "+u,c);m=this.formatUnsupportedCmd(u),this.consume()}return s&&this.switchMode(l),m},e.formLigatures=function(t){for(var e=t.length-1,r=0;r<e;++r){var n=t[r],i=n.text;"-"===i&&"-"===t[r+1].text&&(r+1<e&&"-"===t[r+2].text?(t.splice(r,3,{type:"textord",mode:"text",loc:a.range(n,t[r+2]),text:"---"}),e-=2):(t.splice(r,2,{type:"textord",mode:"text",loc:a.range(n,t[r+1]),text:"--"}),e-=1)),"'"!==i&&"`"!==i||t[r+1].text!==i||(t.splice(r,2,{type:"textord",mode:"text",loc:a.range(n,t[r+1]),text:i+i}),e-=1)}},e.parseSymbol=function(){var t=this.fetch(),e=t.text;if(/^\\verb[^a-zA-Z]/.test(e)){this.consume();var r=e.slice(5),n="*"===r.charAt(0);if(n&&(r=r.slice(1)),r.length<2||r.charAt(0)!==r.slice(-1))throw new o("\\verb assertion failed --\n                    please report what input caused this bug");return{type:"verb",mode:"text",body:r=r.slice(1,-1),star:n}}Sa.hasOwnProperty(e[0])&&!j[this.mode][e[0]]&&(this.settings.strict&&"math"===this.mode&&this.settings.reportNonstrict("unicodeTextInMathMode",'Accented Unicode text character "'+e[0]+'" used in math mode',t),e=Sa[e[0]]+e.substr(1));var i,s=sa.exec(e);if(s&&("i"===(e=e.substring(0,s.index))?e="\u0131":"j"===e&&(e="\u0237")),j[this.mode][e]){this.settings.strict&&"math"===this.mode&&"\xc7\xd0\xde\xe7\xfe".indexOf(e)>=0&&this.settings.reportNonstrict("unicodeTextInMathMode",'Latin-1/Unicode text character "'+e[0]+'" used in math mode',t);var h,l=j[this.mode][e].group,m=a.range(t);if(W.hasOwnProperty(l)){var c=l;h={type:"atom",mode:this.mode,family:c,loc:m,text:e}}else h={type:l,mode:this.mode,loc:m,text:e};i=h}else{if(!(e.charCodeAt(0)>=128))return null;this.settings.strict&&(M(e.charCodeAt(0))?"math"===this.mode&&this.settings.reportNonstrict("unicodeTextInMathMode",'Unicode text character "'+e[0]+'" used in math mode',t):this.settings.reportNonstrict("unknownSymbol",'Unrecognized Unicode character "'+e[0]+'" ('+e.charCodeAt(0)+")",t)),i={type:"textord",mode:"text",loc:a.range(t),text:e}}if(this.consume(),s)for(var u=0;u<s[0].length;u++){var p=s[0][u];if(!ka[p])throw new o("Unknown accent ' "+p+"'",t);var d=ka[p][this.mode];if(!d)throw new o("Accent "+p+" unsupported in "+this.mode+" mode",t);i={type:"accent",mode:this.mode,loc:a.range(t),label:d,isStretchy:!1,isShifty:!0,base:i}}return i},t}();Ma.endOfExpression=["}","\\endgroup","\\end","\\right","&"],Ma.endOfGroup={"[":"]","{":"}","\\begingroup":"\\endgroup"},Ma.SUPSUB_GREEDINESS=1;var za=function(t,e){if(!("string"==typeof t||t instanceof String))throw new TypeError("KaTeX can only parse string typed expression");var r=new Ma(t,e);delete r.gullet.macros.current["\\df@tag"];var a=r.parse();if(r.gullet.macros.get("\\df@tag")){if(!e.displayMode)throw new o("\\tag works only in display equations");r.gullet.feed("\\df@tag"),a=[{type:"tag",mode:"text",body:a,tag:r.parse()}]}return a},Aa=function(t,e,r){e.textContent="";var a=Ba(t,r).toNode();e.appendChild(a)};"undefined"!=typeof document&&"CSS1Compat"!==document.compatMode&&("undefined"!=typeof console&&console.warn("Warning: KaTeX doesn't work in quirks mode. Make sure your website has a suitable doctype."),Aa=function(){throw new o("KaTeX doesn't work in quirks mode.")});var Ta=function(t,e,r){if(r.throwOnError||!(t instanceof o))throw t;var a=Dt.makeSpan(["katex-error"],[new E(e)]);return a.setAttribute("title",t.toString()),a.setAttribute("style","color:"+r.errorColor),a},Ba=function(t,e){var r=new u(e);try{var a=za(t,r);return Be(a,t,r)}catch(e){return Ta(e,t,r)}},Ca={version:"0.11.1",render:Aa,renderToString:function(t,e){return Ba(t,e).toMarkup()},ParseError:o,__parse:function(t,e){var r=new u(e);return za(t,r)},__renderToDomTree:Ba,__renderToHTMLTree:function(t,e){var r=new u(e);try{return function(t,e,r){var a=de(t,Ae(r)),n=Dt.makeSpan(["katex"],[a]);return Te(n,r)}(za(t,r),0,r)}catch(e){return Ta(e,t,r)}},__setFontMetrics:function(t,e){F[t]=e},__defineSymbol:$,__defineMacro:pa,__domTree:{Span:N,Anchor:I,SymbolNode:E,SvgNode:L,PathNode:H,LineNode:P}};e.default=Ca}]).default});
\ No newline at end of file
diff --git a/registry/vulkan/katex/katex.mjs b/registry/vulkan/katex/katex.mjs
deleted file mode 100644
index dc7eebb..0000000
--- a/registry/vulkan/katex/katex.mjs
+++ /dev/null
@@ -1,17021 +0,0 @@
-/**
- * Lexing or parsing positional information for error reporting.
- * This object is immutable.
- */
-class SourceLocation {
-  // The + prefix indicates that these fields aren't writeable
-  // Lexer holding the input string.
-  // Start offset, zero-based inclusive.
-  // End offset, zero-based exclusive.
-  constructor(lexer, start, end) {
-    this.lexer = void 0;
-    this.start = void 0;
-    this.end = void 0;
-    this.lexer = lexer;
-    this.start = start;
-    this.end = end;
-  }
-  /**
-   * Merges two `SourceLocation`s from location providers, given they are
-   * provided in order of appearance.
-   * - Returns the first one's location if only the first is provided.
-   * - Returns a merged range of the first and the last if both are provided
-   *   and their lexers match.
-   * - Otherwise, returns null.
-   */
-
-
-  static range(first, second) {
-    if (!second) {
-      return first && first.loc;
-    } else if (!first || !first.loc || !second.loc || first.loc.lexer !== second.loc.lexer) {
-      return null;
-    } else {
-      return new SourceLocation(first.loc.lexer, first.loc.start, second.loc.end);
-    }
-  }
-
-}
-
-/**
- * Interface required to break circular dependency between Token, Lexer, and
- * ParseError.
- */
-
-/**
- * The resulting token returned from `lex`.
- *
- * It consists of the token text plus some position information.
- * The position information is essentially a range in an input string,
- * but instead of referencing the bare input string, we refer to the lexer.
- * That way it is possible to attach extra metadata to the input string,
- * like for example a file name or similar.
- *
- * The position information is optional, so it is OK to construct synthetic
- * tokens if appropriate. Not providing available position information may
- * lead to degraded error reporting, though.
- */
-class Token {
-  constructor(text, // the text of this token
-  loc) {
-    this.text = void 0;
-    this.loc = void 0;
-    this.text = text;
-    this.loc = loc;
-  }
-  /**
-   * Given a pair of tokens (this and endToken), compute a `Token` encompassing
-   * the whole input range enclosed by these two.
-   */
-
-
-  range(endToken, // last token of the range, inclusive
-  text) // the text of the newly constructed token
-  {
-    return new Token(text, SourceLocation.range(this, endToken));
-  }
-
-}
-
-/**
- * This is the ParseError class, which is the main error thrown by KaTeX
- * functions when something has gone wrong. This is used to distinguish internal
- * errors from errors in the expression that the user provided.
- *
- * If possible, a caller should provide a Token or ParseNode with information
- * about where in the source string the problem occurred.
- */
-class ParseError {
-  // Error position based on passed-in Token or ParseNode.
-  constructor(message, // The error message
-  token) // An object providing position information
-  {
-    this.position = void 0;
-    let error = "KaTeX parse error: " + message;
-    let start;
-    const loc = token && token.loc;
-
-    if (loc && loc.start <= loc.end) {
-      // If we have the input and a position, make the error a bit fancier
-      // Get the input
-      const input = loc.lexer.input; // Prepend some information
-
-      start = loc.start;
-      const end = loc.end;
-
-      if (start === input.length) {
-        error += " at end of input: ";
-      } else {
-        error += " at position " + (start + 1) + ": ";
-      } // Underline token in question using combining underscores
-
-
-      const underlined = input.slice(start, end).replace(/[^]/g, "$&\u0332"); // Extract some context from the input and add it to the error
-
-      let left;
-
-      if (start > 15) {
-        left = "…" + input.slice(start - 15, start);
-      } else {
-        left = input.slice(0, start);
-      }
-
-      let right;
-
-      if (end + 15 < input.length) {
-        right = input.slice(end, end + 15) + "…";
-      } else {
-        right = input.slice(end);
-      }
-
-      error += left + underlined + right;
-    } // Some hackery to make ParseError a prototype of Error
-    // See http://stackoverflow.com/a/8460753
-
-
-    const self = new Error(error);
-    self.name = "ParseError"; // $FlowFixMe
-
-    self.__proto__ = ParseError.prototype; // $FlowFixMe
-
-    self.position = start;
-    return self;
-  }
-
-} // $FlowFixMe More hackery
-
-
-ParseError.prototype.__proto__ = Error.prototype;
-
-/**
- * This file contains a list of utility functions which are useful in other
- * files.
- */
-
-/**
- * Return whether an element is contained in a list
- */
-const contains = function contains(list, elem) {
-  return list.indexOf(elem) !== -1;
-};
-/**
- * Provide a default value if a setting is undefined
- * NOTE: Couldn't use `T` as the output type due to facebook/flow#5022.
- */
-
-
-const deflt = function deflt(setting, defaultIfUndefined) {
-  return setting === undefined ? defaultIfUndefined : setting;
-}; // hyphenate and escape adapted from Facebook's React under Apache 2 license
-
-
-const uppercase = /([A-Z])/g;
-
-const hyphenate = function hyphenate(str) {
-  return str.replace(uppercase, "-$1").toLowerCase();
-};
-
-const ESCAPE_LOOKUP = {
-  "&": "&amp;",
-  ">": "&gt;",
-  "<": "&lt;",
-  "\"": "&quot;",
-  "'": "&#x27;"
-};
-const ESCAPE_REGEX = /[&><"']/g;
-/**
- * Escapes text to prevent scripting attacks.
- */
-
-function escape(text) {
-  return String(text).replace(ESCAPE_REGEX, match => ESCAPE_LOOKUP[match]);
-}
-/**
- * Sometimes we want to pull out the innermost element of a group. In most
- * cases, this will just be the group itself, but when ordgroups and colors have
- * a single element, we want to pull that out.
- */
-
-
-const getBaseElem = function getBaseElem(group) {
-  if (group.type === "ordgroup") {
-    if (group.body.length === 1) {
-      return getBaseElem(group.body[0]);
-    } else {
-      return group;
-    }
-  } else if (group.type === "color") {
-    if (group.body.length === 1) {
-      return getBaseElem(group.body[0]);
-    } else {
-      return group;
-    }
-  } else if (group.type === "font") {
-    return getBaseElem(group.body);
-  } else {
-    return group;
-  }
-};
-/**
- * TeXbook algorithms often reference "character boxes", which are simply groups
- * with a single character in them. To decide if something is a character box,
- * we find its innermost group, and see if it is a single character.
- */
-
-
-const isCharacterBox = function isCharacterBox(group) {
-  const baseElem = getBaseElem(group); // These are all they types of groups which hold single characters
-
-  return baseElem.type === "mathord" || baseElem.type === "textord" || baseElem.type === "atom";
-};
-
-const assert = function assert(value) {
-  if (!value) {
-    throw new Error('Expected non-null, but got ' + String(value));
-  }
-
-  return value;
-};
-/**
- * Return the protocol of a URL, or "_relative" if the URL does not specify a
- * protocol (and thus is relative).
- */
-
-const protocolFromUrl = function protocolFromUrl(url) {
-  const protocol = /^\s*([^\\/#]*?)(?::|&#0*58|&#x0*3a)/i.exec(url);
-  return protocol != null ? protocol[1] : "_relative";
-};
-var utils = {
-  contains,
-  deflt,
-  escape,
-  hyphenate,
-  getBaseElem,
-  isCharacterBox,
-  protocolFromUrl
-};
-
-/* eslint no-console:0 */
-
-/**
- * The main Settings object
- *
- * The current options stored are:
- *  - displayMode: Whether the expression should be typeset as inline math
- *                 (false, the default), meaning that the math starts in
- *                 \textstyle and is placed in an inline-block); or as display
- *                 math (true), meaning that the math starts in \displaystyle
- *                 and is placed in a block with vertical margin.
- */
-class Settings {
-  constructor(options) {
-    this.displayMode = void 0;
-    this.output = void 0;
-    this.leqno = void 0;
-    this.fleqn = void 0;
-    this.throwOnError = void 0;
-    this.errorColor = void 0;
-    this.macros = void 0;
-    this.minRuleThickness = void 0;
-    this.colorIsTextColor = void 0;
-    this.strict = void 0;
-    this.trust = void 0;
-    this.maxSize = void 0;
-    this.maxExpand = void 0;
-    // allow null options
-    options = options || {};
-    this.displayMode = utils.deflt(options.displayMode, false);
-    this.output = utils.deflt(options.output, "htmlAndMathml");
-    this.leqno = utils.deflt(options.leqno, false);
-    this.fleqn = utils.deflt(options.fleqn, false);
-    this.throwOnError = utils.deflt(options.throwOnError, true);
-    this.errorColor = utils.deflt(options.errorColor, "#cc0000");
-    this.macros = options.macros || {};
-    this.minRuleThickness = Math.max(0, utils.deflt(options.minRuleThickness, 0));
-    this.colorIsTextColor = utils.deflt(options.colorIsTextColor, false);
-    this.strict = utils.deflt(options.strict, "warn");
-    this.trust = utils.deflt(options.trust, false);
-    this.maxSize = Math.max(0, utils.deflt(options.maxSize, Infinity));
-    this.maxExpand = Math.max(0, utils.deflt(options.maxExpand, 1000));
-  }
-  /**
-   * Report nonstrict (non-LaTeX-compatible) input.
-   * Can safely not be called if `this.strict` is false in JavaScript.
-   */
-
-
-  reportNonstrict(errorCode, errorMsg, token) {
-    let strict = this.strict;
-
-    if (typeof strict === "function") {
-      // Allow return value of strict function to be boolean or string
-      // (or null/undefined, meaning no further processing).
-      strict = strict(errorCode, errorMsg, token);
-    }
-
-    if (!strict || strict === "ignore") {
-      return;
-    } else if (strict === true || strict === "error") {
-      throw new ParseError("LaTeX-incompatible input and strict mode is set to 'error': " + `${errorMsg} [${errorCode}]`, token);
-    } else if (strict === "warn") {
-      typeof console !== "undefined" && console.warn("LaTeX-incompatible input and strict mode is set to 'warn': " + `${errorMsg} [${errorCode}]`);
-    } else {
-      // won't happen in type-safe code
-      typeof console !== "undefined" && console.warn("LaTeX-incompatible input and strict mode is set to " + `unrecognized '${strict}': ${errorMsg} [${errorCode}]`);
-    }
-  }
-  /**
-   * Check whether to apply strict (LaTeX-adhering) behavior for unusual
-   * input (like `\\`).  Unlike `nonstrict`, will not throw an error;
-   * instead, "error" translates to a return value of `true`, while "ignore"
-   * translates to a return value of `false`.  May still print a warning:
-   * "warn" prints a warning and returns `false`.
-   * This is for the second category of `errorCode`s listed in the README.
-   */
-
-
-  useStrictBehavior(errorCode, errorMsg, token) {
-    let strict = this.strict;
-
-    if (typeof strict === "function") {
-      // Allow return value of strict function to be boolean or string
-      // (or null/undefined, meaning no further processing).
-      // But catch any exceptions thrown by function, treating them
-      // like "error".
-      try {
-        strict = strict(errorCode, errorMsg, token);
-      } catch (error) {
-        strict = "error";
-      }
-    }
-
-    if (!strict || strict === "ignore") {
-      return false;
-    } else if (strict === true || strict === "error") {
-      return true;
-    } else if (strict === "warn") {
-      typeof console !== "undefined" && console.warn("LaTeX-incompatible input and strict mode is set to 'warn': " + `${errorMsg} [${errorCode}]`);
-      return false;
-    } else {
-      // won't happen in type-safe code
-      typeof console !== "undefined" && console.warn("LaTeX-incompatible input and strict mode is set to " + `unrecognized '${strict}': ${errorMsg} [${errorCode}]`);
-      return false;
-    }
-  }
-  /**
-   * Check whether to test potentially dangerous input, and return
-   * `true` (trusted) or `false` (untrusted).  The sole argument `context`
-   * should be an object with `command` field specifying the relevant LaTeX
-   * command (as a string starting with `\`), and any other arguments, etc.
-   * If `context` has a `url` field, a `protocol` field will automatically
-   * get added by this function (changing the specified object).
-   */
-
-
-  isTrusted(context) {
-    if (context.url && !context.protocol) {
-      context.protocol = utils.protocolFromUrl(context.url);
-    }
-
-    const trust = typeof this.trust === "function" ? this.trust(context) : this.trust;
-    return Boolean(trust);
-  }
-
-}
-
-/**
- * This file contains information and classes for the various kinds of styles
- * used in TeX. It provides a generic `Style` class, which holds information
- * about a specific style. It then provides instances of all the different kinds
- * of styles possible, and provides functions to move between them and get
- * information about them.
- */
-
-/**
- * The main style class. Contains a unique id for the style, a size (which is
- * the same for cramped and uncramped version of a style), and a cramped flag.
- */
-class Style {
-  constructor(id, size, cramped) {
-    this.id = void 0;
-    this.size = void 0;
-    this.cramped = void 0;
-    this.id = id;
-    this.size = size;
-    this.cramped = cramped;
-  }
-  /**
-   * Get the style of a superscript given a base in the current style.
-   */
-
-
-  sup() {
-    return styles[sup[this.id]];
-  }
-  /**
-   * Get the style of a subscript given a base in the current style.
-   */
-
-
-  sub() {
-    return styles[sub[this.id]];
-  }
-  /**
-   * Get the style of a fraction numerator given the fraction in the current
-   * style.
-   */
-
-
-  fracNum() {
-    return styles[fracNum[this.id]];
-  }
-  /**
-   * Get the style of a fraction denominator given the fraction in the current
-   * style.
-   */
-
-
-  fracDen() {
-    return styles[fracDen[this.id]];
-  }
-  /**
-   * Get the cramped version of a style (in particular, cramping a cramped style
-   * doesn't change the style).
-   */
-
-
-  cramp() {
-    return styles[cramp[this.id]];
-  }
-  /**
-   * Get a text or display version of this style.
-   */
-
-
-  text() {
-    return styles[text[this.id]];
-  }
-  /**
-   * Return true if this style is tightly spaced (scriptstyle/scriptscriptstyle)
-   */
-
-
-  isTight() {
-    return this.size >= 2;
-  }
-
-} // Export an interface for type checking, but don't expose the implementation.
-// This way, no more styles can be generated.
-
-
-// IDs of the different styles
-const D = 0;
-const Dc = 1;
-const T = 2;
-const Tc = 3;
-const S = 4;
-const Sc = 5;
-const SS = 6;
-const SSc = 7; // Instances of the different styles
-
-const styles = [new Style(D, 0, false), new Style(Dc, 0, true), new Style(T, 1, false), new Style(Tc, 1, true), new Style(S, 2, false), new Style(Sc, 2, true), new Style(SS, 3, false), new Style(SSc, 3, true)]; // Lookup tables for switching from one style to another
-
-const sup = [S, Sc, S, Sc, SS, SSc, SS, SSc];
-const sub = [Sc, Sc, Sc, Sc, SSc, SSc, SSc, SSc];
-const fracNum = [T, Tc, S, Sc, SS, SSc, SS, SSc];
-const fracDen = [Tc, Tc, Sc, Sc, SSc, SSc, SSc, SSc];
-const cramp = [Dc, Dc, Tc, Tc, Sc, Sc, SSc, SSc];
-const text = [D, Dc, T, Tc, T, Tc, T, Tc]; // We only export some of the styles.
-
-var Style$1 = {
-  DISPLAY: styles[D],
-  TEXT: styles[T],
-  SCRIPT: styles[S],
-  SCRIPTSCRIPT: styles[SS]
-};
-
-/*
- * This file defines the Unicode scripts and script families that we
- * support. To add new scripts or families, just add a new entry to the
- * scriptData array below. Adding scripts to the scriptData array allows
- * characters from that script to appear in \text{} environments.
- */
-
-/**
- * Each script or script family has a name and an array of blocks.
- * Each block is an array of two numbers which specify the start and
- * end points (inclusive) of a block of Unicode codepoints.
- */
-
-/**
- * Unicode block data for the families of scripts we support in \text{}.
- * Scripts only need to appear here if they do not have font metrics.
- */
-const scriptData = [{
-  // Latin characters beyond the Latin-1 characters we have metrics for.
-  // Needed for Czech, Hungarian and Turkish text, for example.
-  name: 'latin',
-  blocks: [[0x0100, 0x024f], // Latin Extended-A and Latin Extended-B
-  [0x0300, 0x036f]]
-}, {
-  // The Cyrillic script used by Russian and related languages.
-  // A Cyrillic subset used to be supported as explicitly defined
-  // symbols in symbols.js
-  name: 'cyrillic',
-  blocks: [[0x0400, 0x04ff]]
-}, {
-  // The Brahmic scripts of South and Southeast Asia
-  // Devanagari (0900–097F)
-  // Bengali (0980–09FF)
-  // Gurmukhi (0A00–0A7F)
-  // Gujarati (0A80–0AFF)
-  // Oriya (0B00–0B7F)
-  // Tamil (0B80–0BFF)
-  // Telugu (0C00–0C7F)
-  // Kannada (0C80–0CFF)
-  // Malayalam (0D00–0D7F)
-  // Sinhala (0D80–0DFF)
-  // Thai (0E00–0E7F)
-  // Lao (0E80–0EFF)
-  // Tibetan (0F00–0FFF)
-  // Myanmar (1000–109F)
-  name: 'brahmic',
-  blocks: [[0x0900, 0x109F]]
-}, {
-  name: 'georgian',
-  blocks: [[0x10A0, 0x10ff]]
-}, {
-  // Chinese and Japanese.
-  // The "k" in cjk is for Korean, but we've separated Korean out
-  name: "cjk",
-  blocks: [[0x3000, 0x30FF], // CJK symbols and punctuation, Hiragana, Katakana
-  [0x4E00, 0x9FAF], // CJK ideograms
-  [0xFF00, 0xFF60]]
-}, {
-  // Korean
-  name: 'hangul',
-  blocks: [[0xAC00, 0xD7AF]]
-}];
-/**
- * Given a codepoint, return the name of the script or script family
- * it is from, or null if it is not part of a known block
- */
-
-function scriptFromCodepoint(codepoint) {
-  for (let i = 0; i < scriptData.length; i++) {
-    const script = scriptData[i];
-
-    for (let i = 0; i < script.blocks.length; i++) {
-      const block = script.blocks[i];
-
-      if (codepoint >= block[0] && codepoint <= block[1]) {
-        return script.name;
-      }
-    }
-  }
-
-  return null;
-}
-/**
- * A flattened version of all the supported blocks in a single array.
- * This is an optimization to make supportedCodepoint() fast.
- */
-
-const allBlocks = [];
-scriptData.forEach(s => s.blocks.forEach(b => allBlocks.push(...b)));
-/**
- * Given a codepoint, return true if it falls within one of the
- * scripts or script families defined above and false otherwise.
- *
- * Micro benchmarks shows that this is faster than
- * /[\u3000-\u30FF\u4E00-\u9FAF\uFF00-\uFF60\uAC00-\uD7AF\u0900-\u109F]/.test()
- * in Firefox, Chrome and Node.
- */
-
-function supportedCodepoint(codepoint) {
-  for (let i = 0; i < allBlocks.length; i += 2) {
-    if (codepoint >= allBlocks[i] && codepoint <= allBlocks[i + 1]) {
-      return true;
-    }
-  }
-
-  return false;
-}
-
-/**
- * This file provides support to domTree.js and delimiter.js.
- * It's a storehouse of path geometry for SVG images.
- */
-// In all paths below, the viewBox-to-em scale is 1000:1.
-const hLinePad = 80; // padding above a sqrt viniculum. Prevents image cropping.
-// The viniculum of a \sqrt can be made thicker by a KaTeX rendering option.
-// Think of variable extraViniculum as two detours in the SVG path.
-// The detour begins at the lower left of the area labeled extraViniculum below.
-// The detour proceeds one extraViniculum distance up and slightly to the right,
-// displacing the radiused corner between surd and viniculum. The radius is
-// traversed as usual, then the detour resumes. It goes right, to the end of
-// the very long viniculumn, then down one extraViniculum distance,
-// after which it resumes regular path geometry for the radical.
-
-/*                                                  viniculum
-                                                   /
-         /▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒←extraViniculum
-        / █████████████████████←0.04em (40 unit) std viniculum thickness
-       / /
-      / /
-     / /\
-    / / surd
-*/
-
-const sqrtMain = function sqrtMain(extraViniculum, hLinePad) {
-  // sqrtMain path geometry is from glyph U221A in the font KaTeX Main
-  return `M95,${622 + extraViniculum + hLinePad}
-c-2.7,0,-7.17,-2.7,-13.5,-8c-5.8,-5.3,-9.5,-10,-9.5,-14
-c0,-2,0.3,-3.3,1,-4c1.3,-2.7,23.83,-20.7,67.5,-54
-c44.2,-33.3,65.8,-50.3,66.5,-51c1.3,-1.3,3,-2,5,-2c4.7,0,8.7,3.3,12,10
-s173,378,173,378c0.7,0,35.3,-71,104,-213c68.7,-142,137.5,-285,206.5,-429
-c69,-144,104.5,-217.7,106.5,-221
-l${extraViniculum / 2.075} -${extraViniculum}
-c5.3,-9.3,12,-14,20,-14
-H400000v${40 + extraViniculum}H845.2724
-s-225.272,467,-225.272,467s-235,486,-235,486c-2.7,4.7,-9,7,-19,7
-c-6,0,-10,-1,-12,-3s-194,-422,-194,-422s-65,47,-65,47z
-M${834 + extraViniculum} ${hLinePad}h400000v${40 + extraViniculum}h-400000z`;
-};
-
-const sqrtSize1 = function sqrtSize1(extraViniculum, hLinePad) {
-  // size1 is from glyph U221A in the font KaTeX_Size1-Regular
-  return `M263,${601 + extraViniculum + hLinePad}c0.7,0,18,39.7,52,119
-c34,79.3,68.167,158.7,102.5,238c34.3,79.3,51.8,119.3,52.5,120
-c340,-704.7,510.7,-1060.3,512,-1067
-l${extraViniculum / 2.084} -${extraViniculum}
-c4.7,-7.3,11,-11,19,-11
-H40000v${40 + extraViniculum}H1012.3
-s-271.3,567,-271.3,567c-38.7,80.7,-84,175,-136,283c-52,108,-89.167,185.3,-111.5,232
-c-22.3,46.7,-33.8,70.3,-34.5,71c-4.7,4.7,-12.3,7,-23,7s-12,-1,-12,-1
-s-109,-253,-109,-253c-72.7,-168,-109.3,-252,-110,-252c-10.7,8,-22,16.7,-34,26
-c-22,17.3,-33.3,26,-34,26s-26,-26,-26,-26s76,-59,76,-59s76,-60,76,-60z
-M${1001 + extraViniculum} ${hLinePad}h400000v${40 + extraViniculum}h-400000z`;
-};
-
-const sqrtSize2 = function sqrtSize2(extraViniculum, hLinePad) {
-  // size2 is from glyph U221A in the font KaTeX_Size2-Regular
-  return `M983 ${10 + extraViniculum + hLinePad}
-l${extraViniculum / 3.13} -${extraViniculum}
-c4,-6.7,10,-10,18,-10 H400000v${40 + extraViniculum}
-H1013.1s-83.4,268,-264.1,840c-180.7,572,-277,876.3,-289,913c-4.7,4.7,-12.7,7,-24,7
-s-12,0,-12,0c-1.3,-3.3,-3.7,-11.7,-7,-25c-35.3,-125.3,-106.7,-373.3,-214,-744
-c-10,12,-21,25,-33,39s-32,39,-32,39c-6,-5.3,-15,-14,-27,-26s25,-30,25,-30
-c26.7,-32.7,52,-63,76,-91s52,-60,52,-60s208,722,208,722
-c56,-175.3,126.3,-397.3,211,-666c84.7,-268.7,153.8,-488.2,207.5,-658.5
-c53.7,-170.3,84.5,-266.8,92.5,-289.5z
-M${1001 + extraViniculum} ${hLinePad}h400000v${40 + extraViniculum}h-400000z`;
-};
-
-const sqrtSize3 = function sqrtSize3(extraViniculum, hLinePad) {
-  // size3 is from glyph U221A in the font KaTeX_Size3-Regular
-  return `M424,${2398 + extraViniculum + hLinePad}
-c-1.3,-0.7,-38.5,-172,-111.5,-514c-73,-342,-109.8,-513.3,-110.5,-514
-c0,-2,-10.7,14.3,-32,49c-4.7,7.3,-9.8,15.7,-15.5,25c-5.7,9.3,-9.8,16,-12.5,20
-s-5,7,-5,7c-4,-3.3,-8.3,-7.7,-13,-13s-13,-13,-13,-13s76,-122,76,-122s77,-121,77,-121
-s209,968,209,968c0,-2,84.7,-361.7,254,-1079c169.3,-717.3,254.7,-1077.7,256,-1081
-l${extraViniculum / 4.223} -${extraViniculum}c4,-6.7,10,-10,18,-10 H400000
-v${40 + extraViniculum}H1014.6
-s-87.3,378.7,-272.6,1166c-185.3,787.3,-279.3,1182.3,-282,1185
-c-2,6,-10,9,-24,9
-c-8,0,-12,-0.7,-12,-2z M${1001 + extraViniculum} ${hLinePad}
-h400000v${40 + extraViniculum}h-400000z`;
-};
-
-const sqrtSize4 = function sqrtSize4(extraViniculum, hLinePad) {
-  // size4 is from glyph U221A in the font KaTeX_Size4-Regular
-  return `M473,${2713 + extraViniculum + hLinePad}
-c339.3,-1799.3,509.3,-2700,510,-2702 l${extraViniculum / 5.298} -${extraViniculum}
-c3.3,-7.3,9.3,-11,18,-11 H400000v${40 + extraViniculum}H1017.7
-s-90.5,478,-276.2,1466c-185.7,988,-279.5,1483,-281.5,1485c-2,6,-10,9,-24,9
-c-8,0,-12,-0.7,-12,-2c0,-1.3,-5.3,-32,-16,-92c-50.7,-293.3,-119.7,-693.3,-207,-1200
-c0,-1.3,-5.3,8.7,-16,30c-10.7,21.3,-21.3,42.7,-32,64s-16,33,-16,33s-26,-26,-26,-26
-s76,-153,76,-153s77,-151,77,-151c0.7,0.7,35.7,202,105,604c67.3,400.7,102,602.7,104,
-606zM${1001 + extraViniculum} ${hLinePad}h400000v${40 + extraViniculum}H1017.7z`;
-};
-
-const sqrtTall = function sqrtTall(extraViniculum, hLinePad, viewBoxHeight) {
-  // sqrtTall is from glyph U23B7 in the font KaTeX_Size4-Regular
-  // One path edge has a variable length. It runs vertically from the viniculumn
-  // to a point near (14 units) the bottom of the surd. The viniculum
-  // is normally 40 units thick. So the length of the line in question is:
-  const vertSegment = viewBoxHeight - 54 - hLinePad - extraViniculum;
-  return `M702 ${extraViniculum + hLinePad}H400000${40 + extraViniculum}
-H742v${vertSegment}l-4 4-4 4c-.667.7 -2 1.5-4 2.5s-4.167 1.833-6.5 2.5-5.5 1-9.5 1
-h-12l-28-84c-16.667-52-96.667 -294.333-240-727l-212 -643 -85 170
-c-4-3.333-8.333-7.667-13 -13l-13-13l77-155 77-156c66 199.333 139 419.667
-219 661 l218 661zM702 ${hLinePad}H400000v${40 + extraViniculum}H742z`;
-};
-
-const sqrtPath = function sqrtPath(size, extraViniculum, viewBoxHeight) {
-  extraViniculum = 1000 * extraViniculum; // Convert from document ems to viewBox.
-
-  let path = "";
-
-  switch (size) {
-    case "sqrtMain":
-      path = sqrtMain(extraViniculum, hLinePad);
-      break;
-
-    case "sqrtSize1":
-      path = sqrtSize1(extraViniculum, hLinePad);
-      break;
-
-    case "sqrtSize2":
-      path = sqrtSize2(extraViniculum, hLinePad);
-      break;
-
-    case "sqrtSize3":
-      path = sqrtSize3(extraViniculum, hLinePad);
-      break;
-
-    case "sqrtSize4":
-      path = sqrtSize4(extraViniculum, hLinePad);
-      break;
-
-    case "sqrtTall":
-      path = sqrtTall(extraViniculum, hLinePad, viewBoxHeight);
-  }
-
-  return path;
-};
-const path = {
-  // The doubleleftarrow geometry is from glyph U+21D0 in the font KaTeX Main
-  doubleleftarrow: `M262 157
-l10-10c34-36 62.7-77 86-123 3.3-8 5-13.3 5-16 0-5.3-6.7-8-20-8-7.3
- 0-12.2.5-14.5 1.5-2.3 1-4.8 4.5-7.5 10.5-49.3 97.3-121.7 169.3-217 216-28
- 14-57.3 25-88 33-6.7 2-11 3.8-13 5.5-2 1.7-3 4.2-3 7.5s1 5.8 3 7.5
-c2 1.7 6.3 3.5 13 5.5 68 17.3 128.2 47.8 180.5 91.5 52.3 43.7 93.8 96.2 124.5
- 157.5 9.3 8 15.3 12.3 18 13h6c12-.7 18-4 18-10 0-2-1.7-7-5-15-23.3-46-52-87
--86-123l-10-10h399738v-40H218c328 0 0 0 0 0l-10-8c-26.7-20-65.7-43-117-69 2.7
--2 6-3.7 10-5 36.7-16 72.3-37.3 107-64l10-8h399782v-40z
-m8 0v40h399730v-40zm0 194v40h399730v-40z`,
-  // doublerightarrow is from glyph U+21D2 in font KaTeX Main
-  doublerightarrow: `M399738 392l
--10 10c-34 36-62.7 77-86 123-3.3 8-5 13.3-5 16 0 5.3 6.7 8 20 8 7.3 0 12.2-.5
- 14.5-1.5 2.3-1 4.8-4.5 7.5-10.5 49.3-97.3 121.7-169.3 217-216 28-14 57.3-25 88
--33 6.7-2 11-3.8 13-5.5 2-1.7 3-4.2 3-7.5s-1-5.8-3-7.5c-2-1.7-6.3-3.5-13-5.5-68
--17.3-128.2-47.8-180.5-91.5-52.3-43.7-93.8-96.2-124.5-157.5-9.3-8-15.3-12.3-18
--13h-6c-12 .7-18 4-18 10 0 2 1.7 7 5 15 23.3 46 52 87 86 123l10 10H0v40h399782
-c-328 0 0 0 0 0l10 8c26.7 20 65.7 43 117 69-2.7 2-6 3.7-10 5-36.7 16-72.3 37.3
--107 64l-10 8H0v40zM0 157v40h399730v-40zm0 194v40h399730v-40z`,
-  // leftarrow is from glyph U+2190 in font KaTeX Main
-  leftarrow: `M400000 241H110l3-3c68.7-52.7 113.7-120
- 135-202 4-14.7 6-23 6-25 0-7.3-7-11-21-11-8 0-13.2.8-15.5 2.5-2.3 1.7-4.2 5.8
--5.5 12.5-1.3 4.7-2.7 10.3-4 17-12 48.7-34.8 92-68.5 130S65.3 228.3 18 247
-c-10 4-16 7.7-18 11 0 8.7 6 14.3 18 17 47.3 18.7 87.8 47 121.5 85S196 441.3 208
- 490c.7 2 1.3 5 2 9s1.2 6.7 1.5 8c.3 1.3 1 3.3 2 6s2.2 4.5 3.5 5.5c1.3 1 3.3
- 1.8 6 2.5s6 1 10 1c14 0 21-3.7 21-11 0-2-2-10.3-6-25-20-79.3-65-146.7-135-202
- l-3-3h399890zM100 241v40h399900v-40z`,
-  // overbrace is from glyphs U+23A9/23A8/23A7 in font KaTeX_Size4-Regular
-  leftbrace: `M6 548l-6-6v-35l6-11c56-104 135.3-181.3 238-232 57.3-28.7 117
--45 179-50h399577v120H403c-43.3 7-81 15-113 26-100.7 33-179.7 91-237 174-2.7
- 5-6 9-10 13-.7 1-7.3 1-20 1H6z`,
-  leftbraceunder: `M0 6l6-6h17c12.688 0 19.313.3 20 1 4 4 7.313 8.3 10 13
- 35.313 51.3 80.813 93.8 136.5 127.5 55.688 33.7 117.188 55.8 184.5 66.5.688
- 0 2 .3 4 1 18.688 2.7 76 4.3 172 5h399450v120H429l-6-1c-124.688-8-235-61.7
--331-161C60.687 138.7 32.312 99.3 7 54L0 41V6z`,
-  // overgroup is from the MnSymbol package (public domain)
-  leftgroup: `M400000 80
-H435C64 80 168.3 229.4 21 260c-5.9 1.2-18 0-18 0-2 0-3-1-3-3v-38C76 61 257 0
- 435 0h399565z`,
-  leftgroupunder: `M400000 262
-H435C64 262 168.3 112.6 21 82c-5.9-1.2-18 0-18 0-2 0-3 1-3 3v38c76 158 257 219
- 435 219h399565z`,
-  // Harpoons are from glyph U+21BD in font KaTeX Main
-  leftharpoon: `M0 267c.7 5.3 3 10 7 14h399993v-40H93c3.3
--3.3 10.2-9.5 20.5-18.5s17.8-15.8 22.5-20.5c50.7-52 88-110.3 112-175 4-11.3 5
--18.3 3-21-1.3-4-7.3-6-18-6-8 0-13 .7-15 2s-4.7 6.7-8 16c-42 98.7-107.3 174.7
--196 228-6.7 4.7-10.7 8-12 10-1.3 2-2 5.7-2 11zm100-26v40h399900v-40z`,
-  leftharpoonplus: `M0 267c.7 5.3 3 10 7 14h399993v-40H93c3.3-3.3 10.2-9.5
- 20.5-18.5s17.8-15.8 22.5-20.5c50.7-52 88-110.3 112-175 4-11.3 5-18.3 3-21-1.3
--4-7.3-6-18-6-8 0-13 .7-15 2s-4.7 6.7-8 16c-42 98.7-107.3 174.7-196 228-6.7 4.7
--10.7 8-12 10-1.3 2-2 5.7-2 11zm100-26v40h399900v-40zM0 435v40h400000v-40z
-m0 0v40h400000v-40z`,
-  leftharpoondown: `M7 241c-4 4-6.333 8.667-7 14 0 5.333.667 9 2 11s5.333
- 5.333 12 10c90.667 54 156 130 196 228 3.333 10.667 6.333 16.333 9 17 2 .667 5
- 1 9 1h5c10.667 0 16.667-2 18-6 2-2.667 1-9.667-3-21-32-87.333-82.667-157.667
--152-211l-3-3h399907v-40zM93 281 H400000 v-40L7 241z`,
-  leftharpoondownplus: `M7 435c-4 4-6.3 8.7-7 14 0 5.3.7 9 2 11s5.3 5.3 12
- 10c90.7 54 156 130 196 228 3.3 10.7 6.3 16.3 9 17 2 .7 5 1 9 1h5c10.7 0 16.7
--2 18-6 2-2.7 1-9.7-3-21-32-87.3-82.7-157.7-152-211l-3-3h399907v-40H7zm93 0
-v40h399900v-40zM0 241v40h399900v-40zm0 0v40h399900v-40z`,
-  // hook is from glyph U+21A9 in font KaTeX Main
-  lefthook: `M400000 281 H103s-33-11.2-61-33.5S0 197.3 0 164s14.2-61.2 42.5
--83.5C70.8 58.2 104 47 142 47 c16.7 0 25 6.7 25 20 0 12-8.7 18.7-26 20-40 3.3
--68.7 15.7-86 37-10 12-15 25.3-15 40 0 22.7 9.8 40.7 29.5 54 19.7 13.3 43.5 21
- 71.5 23h399859zM103 281v-40h399897v40z`,
-  leftlinesegment: `M40 281 V428 H0 V94 H40 V241 H400000 v40z
-M40 281 V428 H0 V94 H40 V241 H400000 v40z`,
-  leftmapsto: `M40 281 V448H0V74H40V241H400000v40z
-M40 281 V448H0V74H40V241H400000v40z`,
-  // tofrom is from glyph U+21C4 in font KaTeX AMS Regular
-  leftToFrom: `M0 147h400000v40H0zm0 214c68 40 115.7 95.7 143 167h22c15.3 0 23
--.3 23-1 0-1.3-5.3-13.7-16-37-18-35.3-41.3-69-70-101l-7-8h399905v-40H95l7-8
-c28.7-32 52-65.7 70-101 10.7-23.3 16-35.7 16-37 0-.7-7.7-1-23-1h-22C115.7 265.3
- 68 321 0 361zm0-174v-40h399900v40zm100 154v40h399900v-40z`,
-  longequal: `M0 50 h400000 v40H0z m0 194h40000v40H0z
-M0 50 h400000 v40H0z m0 194h40000v40H0z`,
-  midbrace: `M200428 334
-c-100.7-8.3-195.3-44-280-108-55.3-42-101.7-93-139-153l-9-14c-2.7 4-5.7 8.7-9 14
--53.3 86.7-123.7 153-211 199-66.7 36-137.3 56.3-212 62H0V214h199568c178.3-11.7
- 311.7-78.3 403-201 6-8 9.7-12 11-12 .7-.7 6.7-1 18-1s17.3.3 18 1c1.3 0 5 4 11
- 12 44.7 59.3 101.3 106.3 170 141s145.3 54.3 229 60h199572v120z`,
-  midbraceunder: `M199572 214
-c100.7 8.3 195.3 44 280 108 55.3 42 101.7 93 139 153l9 14c2.7-4 5.7-8.7 9-14
- 53.3-86.7 123.7-153 211-199 66.7-36 137.3-56.3 212-62h199568v120H200432c-178.3
- 11.7-311.7 78.3-403 201-6 8-9.7 12-11 12-.7.7-6.7 1-18 1s-17.3-.3-18-1c-1.3 0
--5-4-11-12-44.7-59.3-101.3-106.3-170-141s-145.3-54.3-229-60H0V214z`,
-  oiintSize1: `M512.6 71.6c272.6 0 320.3 106.8 320.3 178.2 0 70.8-47.7 177.6
--320.3 177.6S193.1 320.6 193.1 249.8c0-71.4 46.9-178.2 319.5-178.2z
-m368.1 178.2c0-86.4-60.9-215.4-368.1-215.4-306.4 0-367.3 129-367.3 215.4 0 85.8
-60.9 214.8 367.3 214.8 307.2 0 368.1-129 368.1-214.8z`,
-  oiintSize2: `M757.8 100.1c384.7 0 451.1 137.6 451.1 230 0 91.3-66.4 228.8
--451.1 228.8-386.3 0-452.7-137.5-452.7-228.8 0-92.4 66.4-230 452.7-230z
-m502.4 230c0-111.2-82.4-277.2-502.4-277.2s-504 166-504 277.2
-c0 110 84 276 504 276s502.4-166 502.4-276z`,
-  oiiintSize1: `M681.4 71.6c408.9 0 480.5 106.8 480.5 178.2 0 70.8-71.6 177.6
--480.5 177.6S202.1 320.6 202.1 249.8c0-71.4 70.5-178.2 479.3-178.2z
-m525.8 178.2c0-86.4-86.8-215.4-525.7-215.4-437.9 0-524.7 129-524.7 215.4 0
-85.8 86.8 214.8 524.7 214.8 438.9 0 525.7-129 525.7-214.8z`,
-  oiiintSize2: `M1021.2 53c603.6 0 707.8 165.8 707.8 277.2 0 110-104.2 275.8
--707.8 275.8-606 0-710.2-165.8-710.2-275.8C311 218.8 415.2 53 1021.2 53z
-m770.4 277.1c0-131.2-126.4-327.6-770.5-327.6S248.4 198.9 248.4 330.1
-c0 130 128.8 326.4 772.7 326.4s770.5-196.4 770.5-326.4z`,
-  rightarrow: `M0 241v40h399891c-47.3 35.3-84 78-110 128
--16.7 32-27.7 63.7-33 95 0 1.3-.2 2.7-.5 4-.3 1.3-.5 2.3-.5 3 0 7.3 6.7 11 20
- 11 8 0 13.2-.8 15.5-2.5 2.3-1.7 4.2-5.5 5.5-11.5 2-13.3 5.7-27 11-41 14.7-44.7
- 39-84.5 73-119.5s73.7-60.2 119-75.5c6-2 9-5.7 9-11s-3-9-9-11c-45.3-15.3-85
--40.5-119-75.5s-58.3-74.8-73-119.5c-4.7-14-8.3-27.3-11-40-1.3-6.7-3.2-10.8-5.5
--12.5-2.3-1.7-7.5-2.5-15.5-2.5-14 0-21 3.7-21 11 0 2 2 10.3 6 25 20.7 83.3 67
- 151.7 139 205zm0 0v40h399900v-40z`,
-  rightbrace: `M400000 542l
--6 6h-17c-12.7 0-19.3-.3-20-1-4-4-7.3-8.3-10-13-35.3-51.3-80.8-93.8-136.5-127.5
-s-117.2-55.8-184.5-66.5c-.7 0-2-.3-4-1-18.7-2.7-76-4.3-172-5H0V214h399571l6 1
-c124.7 8 235 61.7 331 161 31.3 33.3 59.7 72.7 85 118l7 13v35z`,
-  rightbraceunder: `M399994 0l6 6v35l-6 11c-56 104-135.3 181.3-238 232-57.3
- 28.7-117 45-179 50H-300V214h399897c43.3-7 81-15 113-26 100.7-33 179.7-91 237
--174 2.7-5 6-9 10-13 .7-1 7.3-1 20-1h17z`,
-  rightgroup: `M0 80h399565c371 0 266.7 149.4 414 180 5.9 1.2 18 0 18 0 2 0
- 3-1 3-3v-38c-76-158-257-219-435-219H0z`,
-  rightgroupunder: `M0 262h399565c371 0 266.7-149.4 414-180 5.9-1.2 18 0 18
- 0 2 0 3 1 3 3v38c-76 158-257 219-435 219H0z`,
-  rightharpoon: `M0 241v40h399993c4.7-4.7 7-9.3 7-14 0-9.3
--3.7-15.3-11-18-92.7-56.7-159-133.7-199-231-3.3-9.3-6-14.7-8-16-2-1.3-7-2-15-2
--10.7 0-16.7 2-18 6-2 2.7-1 9.7 3 21 15.3 42 36.7 81.8 64 119.5 27.3 37.7 58
- 69.2 92 94.5zm0 0v40h399900v-40z`,
-  rightharpoonplus: `M0 241v40h399993c4.7-4.7 7-9.3 7-14 0-9.3-3.7-15.3-11
--18-92.7-56.7-159-133.7-199-231-3.3-9.3-6-14.7-8-16-2-1.3-7-2-15-2-10.7 0-16.7
- 2-18 6-2 2.7-1 9.7 3 21 15.3 42 36.7 81.8 64 119.5 27.3 37.7 58 69.2 92 94.5z
-m0 0v40h399900v-40z m100 194v40h399900v-40zm0 0v40h399900v-40z`,
-  rightharpoondown: `M399747 511c0 7.3 6.7 11 20 11 8 0 13-.8 15-2.5s4.7-6.8
- 8-15.5c40-94 99.3-166.3 178-217 13.3-8 20.3-12.3 21-13 5.3-3.3 8.5-5.8 9.5
--7.5 1-1.7 1.5-5.2 1.5-10.5s-2.3-10.3-7-15H0v40h399908c-34 25.3-64.7 57-92 95
--27.3 38-48.7 77.7-64 119-3.3 8.7-5 14-5 16zM0 241v40h399900v-40z`,
-  rightharpoondownplus: `M399747 705c0 7.3 6.7 11 20 11 8 0 13-.8
- 15-2.5s4.7-6.8 8-15.5c40-94 99.3-166.3 178-217 13.3-8 20.3-12.3 21-13 5.3-3.3
- 8.5-5.8 9.5-7.5 1-1.7 1.5-5.2 1.5-10.5s-2.3-10.3-7-15H0v40h399908c-34 25.3
--64.7 57-92 95-27.3 38-48.7 77.7-64 119-3.3 8.7-5 14-5 16zM0 435v40h399900v-40z
-m0-194v40h400000v-40zm0 0v40h400000v-40z`,
-  righthook: `M399859 241c-764 0 0 0 0 0 40-3.3 68.7-15.7 86-37 10-12 15-25.3
- 15-40 0-22.7-9.8-40.7-29.5-54-19.7-13.3-43.5-21-71.5-23-17.3-1.3-26-8-26-20 0
--13.3 8.7-20 26-20 38 0 71 11.2 99 33.5 0 0 7 5.6 21 16.7 14 11.2 21 33.5 21
- 66.8s-14 61.2-42 83.5c-28 22.3-61 33.5-99 33.5L0 241z M0 281v-40h399859v40z`,
-  rightlinesegment: `M399960 241 V94 h40 V428 h-40 V281 H0 v-40z
-M399960 241 V94 h40 V428 h-40 V281 H0 v-40z`,
-  rightToFrom: `M400000 167c-70.7-42-118-97.7-142-167h-23c-15.3 0-23 .3-23
- 1 0 1.3 5.3 13.7 16 37 18 35.3 41.3 69 70 101l7 8H0v40h399905l-7 8c-28.7 32
--52 65.7-70 101-10.7 23.3-16 35.7-16 37 0 .7 7.7 1 23 1h23c24-69.3 71.3-125 142
--167z M100 147v40h399900v-40zM0 341v40h399900v-40z`,
-  // twoheadleftarrow is from glyph U+219E in font KaTeX AMS Regular
-  twoheadleftarrow: `M0 167c68 40
- 115.7 95.7 143 167h22c15.3 0 23-.3 23-1 0-1.3-5.3-13.7-16-37-18-35.3-41.3-69
--70-101l-7-8h125l9 7c50.7 39.3 85 86 103 140h46c0-4.7-6.3-18.7-19-42-18-35.3
--40-67.3-66-96l-9-9h399716v-40H284l9-9c26-28.7 48-60.7 66-96 12.7-23.333 19
--37.333 19-42h-46c-18 54-52.3 100.7-103 140l-9 7H95l7-8c28.7-32 52-65.7 70-101
- 10.7-23.333 16-35.7 16-37 0-.7-7.7-1-23-1h-22C115.7 71.3 68 127 0 167z`,
-  twoheadrightarrow: `M400000 167
-c-68-40-115.7-95.7-143-167h-22c-15.3 0-23 .3-23 1 0 1.3 5.3 13.7 16 37 18 35.3
- 41.3 69 70 101l7 8h-125l-9-7c-50.7-39.3-85-86-103-140h-46c0 4.7 6.3 18.7 19 42
- 18 35.3 40 67.3 66 96l9 9H0v40h399716l-9 9c-26 28.7-48 60.7-66 96-12.7 23.333
--19 37.333-19 42h46c18-54 52.3-100.7 103-140l9-7h125l-7 8c-28.7 32-52 65.7-70
- 101-10.7 23.333-16 35.7-16 37 0 .7 7.7 1 23 1h22c27.3-71.3 75-127 143-167z`,
-  // tilde1 is a modified version of a glyph from the MnSymbol package
-  tilde1: `M200 55.538c-77 0-168 73.953-177 73.953-3 0-7
--2.175-9-5.437L2 97c-1-2-2-4-2-6 0-4 2-7 5-9l20-12C116 12 171 0 207 0c86 0
- 114 68 191 68 78 0 168-68 177-68 4 0 7 2 9 5l12 19c1 2.175 2 4.35 2 6.525 0
- 4.35-2 7.613-5 9.788l-19 13.05c-92 63.077-116.937 75.308-183 76.128
--68.267.847-113-73.952-191-73.952z`,
-  // ditto tilde2, tilde3, & tilde4
-  tilde2: `M344 55.266c-142 0-300.638 81.316-311.5 86.418
--8.01 3.762-22.5 10.91-23.5 5.562L1 120c-1-2-1-3-1-4 0-5 3-9 8-10l18.4-9C160.9
- 31.9 283 0 358 0c148 0 188 122 331 122s314-97 326-97c4 0 8 2 10 7l7 21.114
-c1 2.14 1 3.21 1 4.28 0 5.347-3 9.626-7 10.696l-22.3 12.622C852.6 158.372 751
- 181.476 676 181.476c-149 0-189-126.21-332-126.21z`,
-  tilde3: `M786 59C457 59 32 175.242 13 175.242c-6 0-10-3.457
--11-10.37L.15 138c-1-7 3-12 10-13l19.2-6.4C378.4 40.7 634.3 0 804.3 0c337 0
- 411.8 157 746.8 157 328 0 754-112 773-112 5 0 10 3 11 9l1 14.075c1 8.066-.697
- 16.595-6.697 17.492l-21.052 7.31c-367.9 98.146-609.15 122.696-778.15 122.696
- -338 0-409-156.573-744-156.573z`,
-  tilde4: `M786 58C457 58 32 177.487 13 177.487c-6 0-10-3.345
--11-10.035L.15 143c-1-7 3-12 10-13l22-6.7C381.2 35 637.15 0 807.15 0c337 0 409
- 177 744 177 328 0 754-127 773-127 5 0 10 3 11 9l1 14.794c1 7.805-3 13.38-9
- 14.495l-20.7 5.574c-366.85 99.79-607.3 139.372-776.3 139.372-338 0-409
- -175.236-744-175.236z`,
-  // vec is from glyph U+20D7 in font KaTeX Main
-  vec: `M377 20c0-5.333 1.833-10 5.5-14S391 0 397 0c4.667 0 8.667 1.667 12 5
-3.333 2.667 6.667 9 10 19 6.667 24.667 20.333 43.667 41 57 7.333 4.667 11
-10.667 11 18 0 6-1 10-3 12s-6.667 5-14 9c-28.667 14.667-53.667 35.667-75 63
--1.333 1.333-3.167 3.5-5.5 6.5s-4 4.833-5 5.5c-1 .667-2.5 1.333-4.5 2s-4.333 1
--7 1c-4.667 0-9.167-1.833-13.5-5.5S337 184 337 178c0-12.667 15.667-32.333 47-59
-H213l-171-1c-8.667-6-13-12.333-13-19 0-4.667 4.333-11.333 13-20h359
-c-16-25.333-24-45-24-59z`,
-  // widehat1 is a modified version of a glyph from the MnSymbol package
-  widehat1: `M529 0h5l519 115c5 1 9 5 9 10 0 1-1 2-1 3l-4 22
-c-1 5-5 9-11 9h-2L532 67 19 159h-2c-5 0-9-4-11-9l-5-22c-1-6 2-12 8-13z`,
-  // ditto widehat2, widehat3, & widehat4
-  widehat2: `M1181 0h2l1171 176c6 0 10 5 10 11l-2 23c-1 6-5 10
--11 10h-1L1182 67 15 220h-1c-6 0-10-4-11-10l-2-23c-1-6 4-11 10-11z`,
-  widehat3: `M1181 0h2l1171 236c6 0 10 5 10 11l-2 23c-1 6-5 10
--11 10h-1L1182 67 15 280h-1c-6 0-10-4-11-10l-2-23c-1-6 4-11 10-11z`,
-  widehat4: `M1181 0h2l1171 296c6 0 10 5 10 11l-2 23c-1 6-5 10
--11 10h-1L1182 67 15 340h-1c-6 0-10-4-11-10l-2-23c-1-6 4-11 10-11z`,
-  // widecheck paths are all inverted versions of widehat
-  widecheck1: `M529,159h5l519,-115c5,-1,9,-5,9,-10c0,-1,-1,-2,-1,-3l-4,-22c-1,
--5,-5,-9,-11,-9h-2l-512,92l-513,-92h-2c-5,0,-9,4,-11,9l-5,22c-1,6,2,12,8,13z`,
-  widecheck2: `M1181,220h2l1171,-176c6,0,10,-5,10,-11l-2,-23c-1,-6,-5,-10,
--11,-10h-1l-1168,153l-1167,-153h-1c-6,0,-10,4,-11,10l-2,23c-1,6,4,11,10,11z`,
-  widecheck3: `M1181,280h2l1171,-236c6,0,10,-5,10,-11l-2,-23c-1,-6,-5,-10,
--11,-10h-1l-1168,213l-1167,-213h-1c-6,0,-10,4,-11,10l-2,23c-1,6,4,11,10,11z`,
-  widecheck4: `M1181,340h2l1171,-296c6,0,10,-5,10,-11l-2,-23c-1,-6,-5,-10,
--11,-10h-1l-1168,273l-1167,-273h-1c-6,0,-10,4,-11,10l-2,23c-1,6,4,11,10,11z`,
-  // The next ten paths support reaction arrows from the mhchem package.
-  // Arrows for \ce{<-->} are offset from xAxis by 0.22ex, per mhchem in LaTeX
-  // baraboveleftarrow is mostly from from glyph U+2190 in font KaTeX Main
-  baraboveleftarrow: `M400000 620h-399890l3 -3c68.7 -52.7 113.7 -120 135 -202
-c4 -14.7 6 -23 6 -25c0 -7.3 -7 -11 -21 -11c-8 0 -13.2 0.8 -15.5 2.5
-c-2.3 1.7 -4.2 5.8 -5.5 12.5c-1.3 4.7 -2.7 10.3 -4 17c-12 48.7 -34.8 92 -68.5 130
-s-74.2 66.3 -121.5 85c-10 4 -16 7.7 -18 11c0 8.7 6 14.3 18 17c47.3 18.7 87.8 47
-121.5 85s56.5 81.3 68.5 130c0.7 2 1.3 5 2 9s1.2 6.7 1.5 8c0.3 1.3 1 3.3 2 6
-s2.2 4.5 3.5 5.5c1.3 1 3.3 1.8 6 2.5s6 1 10 1c14 0 21 -3.7 21 -11
-c0 -2 -2 -10.3 -6 -25c-20 -79.3 -65 -146.7 -135 -202l-3 -3h399890z
-M100 620v40h399900v-40z M0 241v40h399900v-40zM0 241v40h399900v-40z`,
-  // rightarrowabovebar is mostly from glyph U+2192, KaTeX Main
-  rightarrowabovebar: `M0 241v40h399891c-47.3 35.3-84 78-110 128-16.7 32
--27.7 63.7-33 95 0 1.3-.2 2.7-.5 4-.3 1.3-.5 2.3-.5 3 0 7.3 6.7 11 20 11 8 0
-13.2-.8 15.5-2.5 2.3-1.7 4.2-5.5 5.5-11.5 2-13.3 5.7-27 11-41 14.7-44.7 39
--84.5 73-119.5s73.7-60.2 119-75.5c6-2 9-5.7 9-11s-3-9-9-11c-45.3-15.3-85-40.5
--119-75.5s-58.3-74.8-73-119.5c-4.7-14-8.3-27.3-11-40-1.3-6.7-3.2-10.8-5.5
--12.5-2.3-1.7-7.5-2.5-15.5-2.5-14 0-21 3.7-21 11 0 2 2 10.3 6 25 20.7 83.3 67
-151.7 139 205zm96 379h399894v40H0zm0 0h399904v40H0z`,
-  // The short left harpoon has 0.5em (i.e. 500 units) kern on the left end.
-  // Ref from mhchem.sty: \rlap{\raisebox{-.22ex}{$\kern0.5em
-  baraboveshortleftharpoon: `M507,435c-4,4,-6.3,8.7,-7,14c0,5.3,0.7,9,2,11
-c1.3,2,5.3,5.3,12,10c90.7,54,156,130,196,228c3.3,10.7,6.3,16.3,9,17
-c2,0.7,5,1,9,1c0,0,5,0,5,0c10.7,0,16.7,-2,18,-6c2,-2.7,1,-9.7,-3,-21
-c-32,-87.3,-82.7,-157.7,-152,-211c0,0,-3,-3,-3,-3l399351,0l0,-40
-c-398570,0,-399437,0,-399437,0z M593 435 v40 H399500 v-40z
-M0 281 v-40 H399908 v40z M0 281 v-40 H399908 v40z`,
-  rightharpoonaboveshortbar: `M0,241 l0,40c399126,0,399993,0,399993,0
-c4.7,-4.7,7,-9.3,7,-14c0,-9.3,-3.7,-15.3,-11,-18c-92.7,-56.7,-159,-133.7,-199,
--231c-3.3,-9.3,-6,-14.7,-8,-16c-2,-1.3,-7,-2,-15,-2c-10.7,0,-16.7,2,-18,6
-c-2,2.7,-1,9.7,3,21c15.3,42,36.7,81.8,64,119.5c27.3,37.7,58,69.2,92,94.5z
-M0 241 v40 H399908 v-40z M0 475 v-40 H399500 v40z M0 475 v-40 H399500 v40z`,
-  shortbaraboveleftharpoon: `M7,435c-4,4,-6.3,8.7,-7,14c0,5.3,0.7,9,2,11
-c1.3,2,5.3,5.3,12,10c90.7,54,156,130,196,228c3.3,10.7,6.3,16.3,9,17c2,0.7,5,1,9,
-1c0,0,5,0,5,0c10.7,0,16.7,-2,18,-6c2,-2.7,1,-9.7,-3,-21c-32,-87.3,-82.7,-157.7,
--152,-211c0,0,-3,-3,-3,-3l399907,0l0,-40c-399126,0,-399993,0,-399993,0z
-M93 435 v40 H400000 v-40z M500 241 v40 H400000 v-40z M500 241 v40 H400000 v-40z`,
-  shortrightharpoonabovebar: `M53,241l0,40c398570,0,399437,0,399437,0
-c4.7,-4.7,7,-9.3,7,-14c0,-9.3,-3.7,-15.3,-11,-18c-92.7,-56.7,-159,-133.7,-199,
--231c-3.3,-9.3,-6,-14.7,-8,-16c-2,-1.3,-7,-2,-15,-2c-10.7,0,-16.7,2,-18,6
-c-2,2.7,-1,9.7,3,21c15.3,42,36.7,81.8,64,119.5c27.3,37.7,58,69.2,92,94.5z
-M500 241 v40 H399408 v-40z M500 435 v40 H400000 v-40z`
-};
-
-/**
- * This node represents a document fragment, which contains elements, but when
- * placed into the DOM doesn't have any representation itself. It only contains
- * children and doesn't have any DOM node properties.
- */
-class DocumentFragment {
-  // HtmlDomNode
-  // Never used; needed for satisfying interface.
-  constructor(children) {
-    this.children = void 0;
-    this.classes = void 0;
-    this.height = void 0;
-    this.depth = void 0;
-    this.maxFontSize = void 0;
-    this.style = void 0;
-    this.children = children;
-    this.classes = [];
-    this.height = 0;
-    this.depth = 0;
-    this.maxFontSize = 0;
-    this.style = {};
-  }
-
-  hasClass(className) {
-    return utils.contains(this.classes, className);
-  }
-  /** Convert the fragment into a node. */
-
-
-  toNode() {
-    const frag = document.createDocumentFragment();
-
-    for (let i = 0; i < this.children.length; i++) {
-      frag.appendChild(this.children[i].toNode());
-    }
-
-    return frag;
-  }
-  /** Convert the fragment into HTML markup. */
-
-
-  toMarkup() {
-    let markup = ""; // Simply concatenate the markup for the children together.
-
-    for (let i = 0; i < this.children.length; i++) {
-      markup += this.children[i].toMarkup();
-    }
-
-    return markup;
-  }
-  /**
-   * Converts the math node into a string, similar to innerText. Applies to
-   * MathDomNode's only.
-   */
-
-
-  toText() {
-    // To avoid this, we would subclass documentFragment separately for
-    // MathML, but polyfills for subclassing is expensive per PR 1469.
-    // $FlowFixMe: Only works for ChildType = MathDomNode.
-    const toText = child => child.toText();
-
-    return this.children.map(toText).join("");
-  }
-
-}
-
-/**
- * These objects store the data about the DOM nodes we create, as well as some
- * extra data. They can then be transformed into real DOM nodes with the
- * `toNode` function or HTML markup using `toMarkup`. They are useful for both
- * storing extra properties on the nodes, as well as providing a way to easily
- * work with the DOM.
- *
- * Similar functions for working with MathML nodes exist in mathMLTree.js.
- *
- * TODO: refactor `span` and `anchor` into common superclass when
- * target environments support class inheritance
- */
-
-/**
- * Create an HTML className based on a list of classes. In addition to joining
- * with spaces, we also remove empty classes.
- */
-const createClass = function createClass(classes) {
-  return classes.filter(cls => cls).join(" ");
-};
-
-const initNode = function initNode(classes, options, style) {
-  this.classes = classes || [];
-  this.attributes = {};
-  this.height = 0;
-  this.depth = 0;
-  this.maxFontSize = 0;
-  this.style = style || {};
-
-  if (options) {
-    if (options.style.isTight()) {
-      this.classes.push("mtight");
-    }
-
-    const color = options.getColor();
-
-    if (color) {
-      this.style.color = color;
-    }
-  }
-};
-/**
- * Convert into an HTML node
- */
-
-
-const toNode = function toNode(tagName) {
-  const node = document.createElement(tagName); // Apply the class
-
-  node.className = createClass(this.classes); // Apply inline styles
-
-  for (const style in this.style) {
-    if (this.style.hasOwnProperty(style)) {
-      // $FlowFixMe Flow doesn't seem to understand span.style's type.
-      node.style[style] = this.style[style];
-    }
-  } // Apply attributes
-
-
-  for (const attr in this.attributes) {
-    if (this.attributes.hasOwnProperty(attr)) {
-      node.setAttribute(attr, this.attributes[attr]);
-    }
-  } // Append the children, also as HTML nodes
-
-
-  for (let i = 0; i < this.children.length; i++) {
-    node.appendChild(this.children[i].toNode());
-  }
-
-  return node;
-};
-/**
- * Convert into an HTML markup string
- */
-
-
-const toMarkup = function toMarkup(tagName) {
-  let markup = `<${tagName}`; // Add the class
-
-  if (this.classes.length) {
-    markup += ` class="${utils.escape(createClass(this.classes))}"`;
-  }
-
-  let styles = ""; // Add the styles, after hyphenation
-
-  for (const style in this.style) {
-    if (this.style.hasOwnProperty(style)) {
-      styles += `${utils.hyphenate(style)}:${this.style[style]};`;
-    }
-  }
-
-  if (styles) {
-    markup += ` style="${utils.escape(styles)}"`;
-  } // Add the attributes
-
-
-  for (const attr in this.attributes) {
-    if (this.attributes.hasOwnProperty(attr)) {
-      markup += ` ${attr}="${utils.escape(this.attributes[attr])}"`;
-    }
-  }
-
-  markup += ">"; // Add the markup of the children, also as markup
-
-  for (let i = 0; i < this.children.length; i++) {
-    markup += this.children[i].toMarkup();
-  }
-
-  markup += `</${tagName}>`;
-  return markup;
-}; // Making the type below exact with all optional fields doesn't work due to
-// - https://github.com/facebook/flow/issues/4582
-// - https://github.com/facebook/flow/issues/5688
-// However, since *all* fields are optional, $Shape<> works as suggested in 5688
-// above.
-// This type does not include all CSS properties. Additional properties should
-// be added as needed.
-
-
-/**
- * This node represents a span node, with a className, a list of children, and
- * an inline style. It also contains information about its height, depth, and
- * maxFontSize.
- *
- * Represents two types with different uses: SvgSpan to wrap an SVG and DomSpan
- * otherwise. This typesafety is important when HTML builders access a span's
- * children.
- */
-class Span {
-  constructor(classes, children, options, style) {
-    this.children = void 0;
-    this.attributes = void 0;
-    this.classes = void 0;
-    this.height = void 0;
-    this.depth = void 0;
-    this.width = void 0;
-    this.maxFontSize = void 0;
-    this.style = void 0;
-    initNode.call(this, classes, options, style);
-    this.children = children || [];
-  }
-  /**
-   * Sets an arbitrary attribute on the span. Warning: use this wisely. Not
-   * all browsers support attributes the same, and having too many custom
-   * attributes is probably bad.
-   */
-
-
-  setAttribute(attribute, value) {
-    this.attributes[attribute] = value;
-  }
-
-  hasClass(className) {
-    return utils.contains(this.classes, className);
-  }
-
-  toNode() {
-    return toNode.call(this, "span");
-  }
-
-  toMarkup() {
-    return toMarkup.call(this, "span");
-  }
-
-}
-/**
- * This node represents an anchor (<a>) element with a hyperlink.  See `span`
- * for further details.
- */
-
-class Anchor {
-  constructor(href, classes, children, options) {
-    this.children = void 0;
-    this.attributes = void 0;
-    this.classes = void 0;
-    this.height = void 0;
-    this.depth = void 0;
-    this.maxFontSize = void 0;
-    this.style = void 0;
-    initNode.call(this, classes, options);
-    this.children = children || [];
-    this.setAttribute('href', href);
-  }
-
-  setAttribute(attribute, value) {
-    this.attributes[attribute] = value;
-  }
-
-  hasClass(className) {
-    return utils.contains(this.classes, className);
-  }
-
-  toNode() {
-    return toNode.call(this, "a");
-  }
-
-  toMarkup() {
-    return toMarkup.call(this, "a");
-  }
-
-}
-/**
- * This node represents an image embed (<img>) element.
- */
-
-class Img {
-  constructor(src, alt, style) {
-    this.src = void 0;
-    this.alt = void 0;
-    this.classes = void 0;
-    this.height = void 0;
-    this.depth = void 0;
-    this.maxFontSize = void 0;
-    this.style = void 0;
-    this.alt = alt;
-    this.src = src;
-    this.classes = ["mord"];
-    this.style = style;
-  }
-
-  hasClass(className) {
-    return utils.contains(this.classes, className);
-  }
-
-  toNode() {
-    const node = document.createElement("img");
-    node.src = this.src;
-    node.alt = this.alt;
-    node.className = "mord"; // Apply inline styles
-
-    for (const style in this.style) {
-      if (this.style.hasOwnProperty(style)) {
-        // $FlowFixMe
-        node.style[style] = this.style[style];
-      }
-    }
-
-    return node;
-  }
-
-  toMarkup() {
-    let markup = `<img  src='${this.src} 'alt='${this.alt}' `; // Add the styles, after hyphenation
-
-    let styles = "";
-
-    for (const style in this.style) {
-      if (this.style.hasOwnProperty(style)) {
-        styles += `${utils.hyphenate(style)}:${this.style[style]};`;
-      }
-    }
-
-    if (styles) {
-      markup += ` style="${utils.escape(styles)}"`;
-    }
-
-    markup += "'/>";
-    return markup;
-  }
-
-}
-const iCombinations = {
-  'î': '\u0131\u0302',
-  'ï': '\u0131\u0308',
-  'í': '\u0131\u0301',
-  // 'ī': '\u0131\u0304', // enable when we add Extended Latin
-  'ì': '\u0131\u0300'
-};
-/**
- * A symbol node contains information about a single symbol. It either renders
- * to a single text node, or a span with a single text node in it, depending on
- * whether it has CSS classes, styles, or needs italic correction.
- */
-
-class SymbolNode {
-  constructor(text, height, depth, italic, skew, width, classes, style) {
-    this.text = void 0;
-    this.height = void 0;
-    this.depth = void 0;
-    this.italic = void 0;
-    this.skew = void 0;
-    this.width = void 0;
-    this.maxFontSize = void 0;
-    this.classes = void 0;
-    this.style = void 0;
-    this.text = text;
-    this.height = height || 0;
-    this.depth = depth || 0;
-    this.italic = italic || 0;
-    this.skew = skew || 0;
-    this.width = width || 0;
-    this.classes = classes || [];
-    this.style = style || {};
-    this.maxFontSize = 0; // Mark text from non-Latin scripts with specific classes so that we
-    // can specify which fonts to use.  This allows us to render these
-    // characters with a serif font in situations where the browser would
-    // either default to a sans serif or render a placeholder character.
-    // We use CSS class names like cjk_fallback, hangul_fallback and
-    // brahmic_fallback. See ./unicodeScripts.js for the set of possible
-    // script names
-
-    const script = scriptFromCodepoint(this.text.charCodeAt(0));
-
-    if (script) {
-      this.classes.push(script + "_fallback");
-    }
-
-    if (/[îïíì]/.test(this.text)) {
-      // add ī when we add Extended Latin
-      this.text = iCombinations[this.text];
-    }
-  }
-
-  hasClass(className) {
-    return utils.contains(this.classes, className);
-  }
-  /**
-   * Creates a text node or span from a symbol node. Note that a span is only
-   * created if it is needed.
-   */
-
-
-  toNode() {
-    const node = document.createTextNode(this.text);
-    let span = null;
-
-    if (this.italic > 0) {
-      span = document.createElement("span");
-      span.style.marginRight = this.italic + "em";
-    }
-
-    if (this.classes.length > 0) {
-      span = span || document.createElement("span");
-      span.className = createClass(this.classes);
-    }
-
-    for (const style in this.style) {
-      if (this.style.hasOwnProperty(style)) {
-        span = span || document.createElement("span"); // $FlowFixMe Flow doesn't seem to understand span.style's type.
-
-        span.style[style] = this.style[style];
-      }
-    }
-
-    if (span) {
-      span.appendChild(node);
-      return span;
-    } else {
-      return node;
-    }
-  }
-  /**
-   * Creates markup for a symbol node.
-   */
-
-
-  toMarkup() {
-    // TODO(alpert): More duplication than I'd like from
-    // span.prototype.toMarkup and symbolNode.prototype.toNode...
-    let needsSpan = false;
-    let markup = "<span";
-
-    if (this.classes.length) {
-      needsSpan = true;
-      markup += " class=\"";
-      markup += utils.escape(createClass(this.classes));
-      markup += "\"";
-    }
-
-    let styles = "";
-
-    if (this.italic > 0) {
-      styles += "margin-right:" + this.italic + "em;";
-    }
-
-    for (const style in this.style) {
-      if (this.style.hasOwnProperty(style)) {
-        styles += utils.hyphenate(style) + ":" + this.style[style] + ";";
-      }
-    }
-
-    if (styles) {
-      needsSpan = true;
-      markup += " style=\"" + utils.escape(styles) + "\"";
-    }
-
-    const escaped = utils.escape(this.text);
-
-    if (needsSpan) {
-      markup += ">";
-      markup += escaped;
-      markup += "</span>";
-      return markup;
-    } else {
-      return escaped;
-    }
-  }
-
-}
-/**
- * SVG nodes are used to render stretchy wide elements.
- */
-
-class SvgNode {
-  constructor(children, attributes) {
-    this.children = void 0;
-    this.attributes = void 0;
-    this.children = children || [];
-    this.attributes = attributes || {};
-  }
-
-  toNode() {
-    const svgNS = "http://www.w3.org/2000/svg";
-    const node = document.createElementNS(svgNS, "svg"); // Apply attributes
-
-    for (const attr in this.attributes) {
-      if (Object.prototype.hasOwnProperty.call(this.attributes, attr)) {
-        node.setAttribute(attr, this.attributes[attr]);
-      }
-    }
-
-    for (let i = 0; i < this.children.length; i++) {
-      node.appendChild(this.children[i].toNode());
-    }
-
-    return node;
-  }
-
-  toMarkup() {
-    let markup = "<svg"; // Apply attributes
-
-    for (const attr in this.attributes) {
-      if (Object.prototype.hasOwnProperty.call(this.attributes, attr)) {
-        markup += ` ${attr}='${this.attributes[attr]}'`;
-      }
-    }
-
-    markup += ">";
-
-    for (let i = 0; i < this.children.length; i++) {
-      markup += this.children[i].toMarkup();
-    }
-
-    markup += "</svg>";
-    return markup;
-  }
-
-}
-class PathNode {
-  constructor(pathName, alternate) {
-    this.pathName = void 0;
-    this.alternate = void 0;
-    this.pathName = pathName;
-    this.alternate = alternate; // Used only for \sqrt
-  }
-
-  toNode() {
-    const svgNS = "http://www.w3.org/2000/svg";
-    const node = document.createElementNS(svgNS, "path");
-
-    if (this.alternate) {
-      node.setAttribute("d", this.alternate);
-    } else {
-      node.setAttribute("d", path[this.pathName]);
-    }
-
-    return node;
-  }
-
-  toMarkup() {
-    if (this.alternate) {
-      return `<path d='${this.alternate}'/>`;
-    } else {
-      return `<path d='${path[this.pathName]}'/>`;
-    }
-  }
-
-}
-class LineNode {
-  constructor(attributes) {
-    this.attributes = void 0;
-    this.attributes = attributes || {};
-  }
-
-  toNode() {
-    const svgNS = "http://www.w3.org/2000/svg";
-    const node = document.createElementNS(svgNS, "line"); // Apply attributes
-
-    for (const attr in this.attributes) {
-      if (Object.prototype.hasOwnProperty.call(this.attributes, attr)) {
-        node.setAttribute(attr, this.attributes[attr]);
-      }
-    }
-
-    return node;
-  }
-
-  toMarkup() {
-    let markup = "<line";
-
-    for (const attr in this.attributes) {
-      if (Object.prototype.hasOwnProperty.call(this.attributes, attr)) {
-        markup += ` ${attr}='${this.attributes[attr]}'`;
-      }
-    }
-
-    markup += "/>";
-    return markup;
-  }
-
-}
-function assertSymbolDomNode(group) {
-  if (group instanceof SymbolNode) {
-    return group;
-  } else {
-    throw new Error(`Expected symbolNode but got ${String(group)}.`);
-  }
-}
-function assertSpan(group) {
-  if (group instanceof Span) {
-    return group;
-  } else {
-    throw new Error(`Expected span<HtmlDomNode> but got ${String(group)}.`);
-  }
-}
-
-// This file is GENERATED by buildMetrics.sh. DO NOT MODIFY.
-var metricMap = {
-  "AMS-Regular": {
-    "65": [0, 0.68889, 0, 0, 0.72222],
-    "66": [0, 0.68889, 0, 0, 0.66667],
-    "67": [0, 0.68889, 0, 0, 0.72222],
-    "68": [0, 0.68889, 0, 0, 0.72222],
-    "69": [0, 0.68889, 0, 0, 0.66667],
-    "70": [0, 0.68889, 0, 0, 0.61111],
-    "71": [0, 0.68889, 0, 0, 0.77778],
-    "72": [0, 0.68889, 0, 0, 0.77778],
-    "73": [0, 0.68889, 0, 0, 0.38889],
-    "74": [0.16667, 0.68889, 0, 0, 0.5],
-    "75": [0, 0.68889, 0, 0, 0.77778],
-    "76": [0, 0.68889, 0, 0, 0.66667],
-    "77": [0, 0.68889, 0, 0, 0.94445],
-    "78": [0, 0.68889, 0, 0, 0.72222],
-    "79": [0.16667, 0.68889, 0, 0, 0.77778],
-    "80": [0, 0.68889, 0, 0, 0.61111],
-    "81": [0.16667, 0.68889, 0, 0, 0.77778],
-    "82": [0, 0.68889, 0, 0, 0.72222],
-    "83": [0, 0.68889, 0, 0, 0.55556],
-    "84": [0, 0.68889, 0, 0, 0.66667],
-    "85": [0, 0.68889, 0, 0, 0.72222],
-    "86": [0, 0.68889, 0, 0, 0.72222],
-    "87": [0, 0.68889, 0, 0, 1.0],
-    "88": [0, 0.68889, 0, 0, 0.72222],
-    "89": [0, 0.68889, 0, 0, 0.72222],
-    "90": [0, 0.68889, 0, 0, 0.66667],
-    "107": [0, 0.68889, 0, 0, 0.55556],
-    "165": [0, 0.675, 0.025, 0, 0.75],
-    "174": [0.15559, 0.69224, 0, 0, 0.94666],
-    "240": [0, 0.68889, 0, 0, 0.55556],
-    "295": [0, 0.68889, 0, 0, 0.54028],
-    "710": [0, 0.825, 0, 0, 2.33334],
-    "732": [0, 0.9, 0, 0, 2.33334],
-    "770": [0, 0.825, 0, 0, 2.33334],
-    "771": [0, 0.9, 0, 0, 2.33334],
-    "989": [0.08167, 0.58167, 0, 0, 0.77778],
-    "1008": [0, 0.43056, 0.04028, 0, 0.66667],
-    "8245": [0, 0.54986, 0, 0, 0.275],
-    "8463": [0, 0.68889, 0, 0, 0.54028],
-    "8487": [0, 0.68889, 0, 0, 0.72222],
-    "8498": [0, 0.68889, 0, 0, 0.55556],
-    "8502": [0, 0.68889, 0, 0, 0.66667],
-    "8503": [0, 0.68889, 0, 0, 0.44445],
-    "8504": [0, 0.68889, 0, 0, 0.66667],
-    "8513": [0, 0.68889, 0, 0, 0.63889],
-    "8592": [-0.03598, 0.46402, 0, 0, 0.5],
-    "8594": [-0.03598, 0.46402, 0, 0, 0.5],
-    "8602": [-0.13313, 0.36687, 0, 0, 1.0],
-    "8603": [-0.13313, 0.36687, 0, 0, 1.0],
-    "8606": [0.01354, 0.52239, 0, 0, 1.0],
-    "8608": [0.01354, 0.52239, 0, 0, 1.0],
-    "8610": [0.01354, 0.52239, 0, 0, 1.11111],
-    "8611": [0.01354, 0.52239, 0, 0, 1.11111],
-    "8619": [0, 0.54986, 0, 0, 1.0],
-    "8620": [0, 0.54986, 0, 0, 1.0],
-    "8621": [-0.13313, 0.37788, 0, 0, 1.38889],
-    "8622": [-0.13313, 0.36687, 0, 0, 1.0],
-    "8624": [0, 0.69224, 0, 0, 0.5],
-    "8625": [0, 0.69224, 0, 0, 0.5],
-    "8630": [0, 0.43056, 0, 0, 1.0],
-    "8631": [0, 0.43056, 0, 0, 1.0],
-    "8634": [0.08198, 0.58198, 0, 0, 0.77778],
-    "8635": [0.08198, 0.58198, 0, 0, 0.77778],
-    "8638": [0.19444, 0.69224, 0, 0, 0.41667],
-    "8639": [0.19444, 0.69224, 0, 0, 0.41667],
-    "8642": [0.19444, 0.69224, 0, 0, 0.41667],
-    "8643": [0.19444, 0.69224, 0, 0, 0.41667],
-    "8644": [0.1808, 0.675, 0, 0, 1.0],
-    "8646": [0.1808, 0.675, 0, 0, 1.0],
-    "8647": [0.1808, 0.675, 0, 0, 1.0],
-    "8648": [0.19444, 0.69224, 0, 0, 0.83334],
-    "8649": [0.1808, 0.675, 0, 0, 1.0],
-    "8650": [0.19444, 0.69224, 0, 0, 0.83334],
-    "8651": [0.01354, 0.52239, 0, 0, 1.0],
-    "8652": [0.01354, 0.52239, 0, 0, 1.0],
-    "8653": [-0.13313, 0.36687, 0, 0, 1.0],
-    "8654": [-0.13313, 0.36687, 0, 0, 1.0],
-    "8655": [-0.13313, 0.36687, 0, 0, 1.0],
-    "8666": [0.13667, 0.63667, 0, 0, 1.0],
-    "8667": [0.13667, 0.63667, 0, 0, 1.0],
-    "8669": [-0.13313, 0.37788, 0, 0, 1.0],
-    "8672": [-0.064, 0.437, 0, 0, 1.334],
-    "8674": [-0.064, 0.437, 0, 0, 1.334],
-    "8705": [0, 0.825, 0, 0, 0.5],
-    "8708": [0, 0.68889, 0, 0, 0.55556],
-    "8709": [0.08167, 0.58167, 0, 0, 0.77778],
-    "8717": [0, 0.43056, 0, 0, 0.42917],
-    "8722": [-0.03598, 0.46402, 0, 0, 0.5],
-    "8724": [0.08198, 0.69224, 0, 0, 0.77778],
-    "8726": [0.08167, 0.58167, 0, 0, 0.77778],
-    "8733": [0, 0.69224, 0, 0, 0.77778],
-    "8736": [0, 0.69224, 0, 0, 0.72222],
-    "8737": [0, 0.69224, 0, 0, 0.72222],
-    "8738": [0.03517, 0.52239, 0, 0, 0.72222],
-    "8739": [0.08167, 0.58167, 0, 0, 0.22222],
-    "8740": [0.25142, 0.74111, 0, 0, 0.27778],
-    "8741": [0.08167, 0.58167, 0, 0, 0.38889],
-    "8742": [0.25142, 0.74111, 0, 0, 0.5],
-    "8756": [0, 0.69224, 0, 0, 0.66667],
-    "8757": [0, 0.69224, 0, 0, 0.66667],
-    "8764": [-0.13313, 0.36687, 0, 0, 0.77778],
-    "8765": [-0.13313, 0.37788, 0, 0, 0.77778],
-    "8769": [-0.13313, 0.36687, 0, 0, 0.77778],
-    "8770": [-0.03625, 0.46375, 0, 0, 0.77778],
-    "8774": [0.30274, 0.79383, 0, 0, 0.77778],
-    "8776": [-0.01688, 0.48312, 0, 0, 0.77778],
-    "8778": [0.08167, 0.58167, 0, 0, 0.77778],
-    "8782": [0.06062, 0.54986, 0, 0, 0.77778],
-    "8783": [0.06062, 0.54986, 0, 0, 0.77778],
-    "8785": [0.08198, 0.58198, 0, 0, 0.77778],
-    "8786": [0.08198, 0.58198, 0, 0, 0.77778],
-    "8787": [0.08198, 0.58198, 0, 0, 0.77778],
-    "8790": [0, 0.69224, 0, 0, 0.77778],
-    "8791": [0.22958, 0.72958, 0, 0, 0.77778],
-    "8796": [0.08198, 0.91667, 0, 0, 0.77778],
-    "8806": [0.25583, 0.75583, 0, 0, 0.77778],
-    "8807": [0.25583, 0.75583, 0, 0, 0.77778],
-    "8808": [0.25142, 0.75726, 0, 0, 0.77778],
-    "8809": [0.25142, 0.75726, 0, 0, 0.77778],
-    "8812": [0.25583, 0.75583, 0, 0, 0.5],
-    "8814": [0.20576, 0.70576, 0, 0, 0.77778],
-    "8815": [0.20576, 0.70576, 0, 0, 0.77778],
-    "8816": [0.30274, 0.79383, 0, 0, 0.77778],
-    "8817": [0.30274, 0.79383, 0, 0, 0.77778],
-    "8818": [0.22958, 0.72958, 0, 0, 0.77778],
-    "8819": [0.22958, 0.72958, 0, 0, 0.77778],
-    "8822": [0.1808, 0.675, 0, 0, 0.77778],
-    "8823": [0.1808, 0.675, 0, 0, 0.77778],
-    "8828": [0.13667, 0.63667, 0, 0, 0.77778],
-    "8829": [0.13667, 0.63667, 0, 0, 0.77778],
-    "8830": [0.22958, 0.72958, 0, 0, 0.77778],
-    "8831": [0.22958, 0.72958, 0, 0, 0.77778],
-    "8832": [0.20576, 0.70576, 0, 0, 0.77778],
-    "8833": [0.20576, 0.70576, 0, 0, 0.77778],
-    "8840": [0.30274, 0.79383, 0, 0, 0.77778],
-    "8841": [0.30274, 0.79383, 0, 0, 0.77778],
-    "8842": [0.13597, 0.63597, 0, 0, 0.77778],
-    "8843": [0.13597, 0.63597, 0, 0, 0.77778],
-    "8847": [0.03517, 0.54986, 0, 0, 0.77778],
-    "8848": [0.03517, 0.54986, 0, 0, 0.77778],
-    "8858": [0.08198, 0.58198, 0, 0, 0.77778],
-    "8859": [0.08198, 0.58198, 0, 0, 0.77778],
-    "8861": [0.08198, 0.58198, 0, 0, 0.77778],
-    "8862": [0, 0.675, 0, 0, 0.77778],
-    "8863": [0, 0.675, 0, 0, 0.77778],
-    "8864": [0, 0.675, 0, 0, 0.77778],
-    "8865": [0, 0.675, 0, 0, 0.77778],
-    "8872": [0, 0.69224, 0, 0, 0.61111],
-    "8873": [0, 0.69224, 0, 0, 0.72222],
-    "8874": [0, 0.69224, 0, 0, 0.88889],
-    "8876": [0, 0.68889, 0, 0, 0.61111],
-    "8877": [0, 0.68889, 0, 0, 0.61111],
-    "8878": [0, 0.68889, 0, 0, 0.72222],
-    "8879": [0, 0.68889, 0, 0, 0.72222],
-    "8882": [0.03517, 0.54986, 0, 0, 0.77778],
-    "8883": [0.03517, 0.54986, 0, 0, 0.77778],
-    "8884": [0.13667, 0.63667, 0, 0, 0.77778],
-    "8885": [0.13667, 0.63667, 0, 0, 0.77778],
-    "8888": [0, 0.54986, 0, 0, 1.11111],
-    "8890": [0.19444, 0.43056, 0, 0, 0.55556],
-    "8891": [0.19444, 0.69224, 0, 0, 0.61111],
-    "8892": [0.19444, 0.69224, 0, 0, 0.61111],
-    "8901": [0, 0.54986, 0, 0, 0.27778],
-    "8903": [0.08167, 0.58167, 0, 0, 0.77778],
-    "8905": [0.08167, 0.58167, 0, 0, 0.77778],
-    "8906": [0.08167, 0.58167, 0, 0, 0.77778],
-    "8907": [0, 0.69224, 0, 0, 0.77778],
-    "8908": [0, 0.69224, 0, 0, 0.77778],
-    "8909": [-0.03598, 0.46402, 0, 0, 0.77778],
-    "8910": [0, 0.54986, 0, 0, 0.76042],
-    "8911": [0, 0.54986, 0, 0, 0.76042],
-    "8912": [0.03517, 0.54986, 0, 0, 0.77778],
-    "8913": [0.03517, 0.54986, 0, 0, 0.77778],
-    "8914": [0, 0.54986, 0, 0, 0.66667],
-    "8915": [0, 0.54986, 0, 0, 0.66667],
-    "8916": [0, 0.69224, 0, 0, 0.66667],
-    "8918": [0.0391, 0.5391, 0, 0, 0.77778],
-    "8919": [0.0391, 0.5391, 0, 0, 0.77778],
-    "8920": [0.03517, 0.54986, 0, 0, 1.33334],
-    "8921": [0.03517, 0.54986, 0, 0, 1.33334],
-    "8922": [0.38569, 0.88569, 0, 0, 0.77778],
-    "8923": [0.38569, 0.88569, 0, 0, 0.77778],
-    "8926": [0.13667, 0.63667, 0, 0, 0.77778],
-    "8927": [0.13667, 0.63667, 0, 0, 0.77778],
-    "8928": [0.30274, 0.79383, 0, 0, 0.77778],
-    "8929": [0.30274, 0.79383, 0, 0, 0.77778],
-    "8934": [0.23222, 0.74111, 0, 0, 0.77778],
-    "8935": [0.23222, 0.74111, 0, 0, 0.77778],
-    "8936": [0.23222, 0.74111, 0, 0, 0.77778],
-    "8937": [0.23222, 0.74111, 0, 0, 0.77778],
-    "8938": [0.20576, 0.70576, 0, 0, 0.77778],
-    "8939": [0.20576, 0.70576, 0, 0, 0.77778],
-    "8940": [0.30274, 0.79383, 0, 0, 0.77778],
-    "8941": [0.30274, 0.79383, 0, 0, 0.77778],
-    "8994": [0.19444, 0.69224, 0, 0, 0.77778],
-    "8995": [0.19444, 0.69224, 0, 0, 0.77778],
-    "9416": [0.15559, 0.69224, 0, 0, 0.90222],
-    "9484": [0, 0.69224, 0, 0, 0.5],
-    "9488": [0, 0.69224, 0, 0, 0.5],
-    "9492": [0, 0.37788, 0, 0, 0.5],
-    "9496": [0, 0.37788, 0, 0, 0.5],
-    "9585": [0.19444, 0.68889, 0, 0, 0.88889],
-    "9586": [0.19444, 0.74111, 0, 0, 0.88889],
-    "9632": [0, 0.675, 0, 0, 0.77778],
-    "9633": [0, 0.675, 0, 0, 0.77778],
-    "9650": [0, 0.54986, 0, 0, 0.72222],
-    "9651": [0, 0.54986, 0, 0, 0.72222],
-    "9654": [0.03517, 0.54986, 0, 0, 0.77778],
-    "9660": [0, 0.54986, 0, 0, 0.72222],
-    "9661": [0, 0.54986, 0, 0, 0.72222],
-    "9664": [0.03517, 0.54986, 0, 0, 0.77778],
-    "9674": [0.11111, 0.69224, 0, 0, 0.66667],
-    "9733": [0.19444, 0.69224, 0, 0, 0.94445],
-    "10003": [0, 0.69224, 0, 0, 0.83334],
-    "10016": [0, 0.69224, 0, 0, 0.83334],
-    "10731": [0.11111, 0.69224, 0, 0, 0.66667],
-    "10846": [0.19444, 0.75583, 0, 0, 0.61111],
-    "10877": [0.13667, 0.63667, 0, 0, 0.77778],
-    "10878": [0.13667, 0.63667, 0, 0, 0.77778],
-    "10885": [0.25583, 0.75583, 0, 0, 0.77778],
-    "10886": [0.25583, 0.75583, 0, 0, 0.77778],
-    "10887": [0.13597, 0.63597, 0, 0, 0.77778],
-    "10888": [0.13597, 0.63597, 0, 0, 0.77778],
-    "10889": [0.26167, 0.75726, 0, 0, 0.77778],
-    "10890": [0.26167, 0.75726, 0, 0, 0.77778],
-    "10891": [0.48256, 0.98256, 0, 0, 0.77778],
-    "10892": [0.48256, 0.98256, 0, 0, 0.77778],
-    "10901": [0.13667, 0.63667, 0, 0, 0.77778],
-    "10902": [0.13667, 0.63667, 0, 0, 0.77778],
-    "10933": [0.25142, 0.75726, 0, 0, 0.77778],
-    "10934": [0.25142, 0.75726, 0, 0, 0.77778],
-    "10935": [0.26167, 0.75726, 0, 0, 0.77778],
-    "10936": [0.26167, 0.75726, 0, 0, 0.77778],
-    "10937": [0.26167, 0.75726, 0, 0, 0.77778],
-    "10938": [0.26167, 0.75726, 0, 0, 0.77778],
-    "10949": [0.25583, 0.75583, 0, 0, 0.77778],
-    "10950": [0.25583, 0.75583, 0, 0, 0.77778],
-    "10955": [0.28481, 0.79383, 0, 0, 0.77778],
-    "10956": [0.28481, 0.79383, 0, 0, 0.77778],
-    "57350": [0.08167, 0.58167, 0, 0, 0.22222],
-    "57351": [0.08167, 0.58167, 0, 0, 0.38889],
-    "57352": [0.08167, 0.58167, 0, 0, 0.77778],
-    "57353": [0, 0.43056, 0.04028, 0, 0.66667],
-    "57356": [0.25142, 0.75726, 0, 0, 0.77778],
-    "57357": [0.25142, 0.75726, 0, 0, 0.77778],
-    "57358": [0.41951, 0.91951, 0, 0, 0.77778],
-    "57359": [0.30274, 0.79383, 0, 0, 0.77778],
-    "57360": [0.30274, 0.79383, 0, 0, 0.77778],
-    "57361": [0.41951, 0.91951, 0, 0, 0.77778],
-    "57366": [0.25142, 0.75726, 0, 0, 0.77778],
-    "57367": [0.25142, 0.75726, 0, 0, 0.77778],
-    "57368": [0.25142, 0.75726, 0, 0, 0.77778],
-    "57369": [0.25142, 0.75726, 0, 0, 0.77778],
-    "57370": [0.13597, 0.63597, 0, 0, 0.77778],
-    "57371": [0.13597, 0.63597, 0, 0, 0.77778]
-  },
-  "Caligraphic-Regular": {
-    "48": [0, 0.43056, 0, 0, 0.5],
-    "49": [0, 0.43056, 0, 0, 0.5],
-    "50": [0, 0.43056, 0, 0, 0.5],
-    "51": [0.19444, 0.43056, 0, 0, 0.5],
-    "52": [0.19444, 0.43056, 0, 0, 0.5],
-    "53": [0.19444, 0.43056, 0, 0, 0.5],
-    "54": [0, 0.64444, 0, 0, 0.5],
-    "55": [0.19444, 0.43056, 0, 0, 0.5],
-    "56": [0, 0.64444, 0, 0, 0.5],
-    "57": [0.19444, 0.43056, 0, 0, 0.5],
-    "65": [0, 0.68333, 0, 0.19445, 0.79847],
-    "66": [0, 0.68333, 0.03041, 0.13889, 0.65681],
-    "67": [0, 0.68333, 0.05834, 0.13889, 0.52653],
-    "68": [0, 0.68333, 0.02778, 0.08334, 0.77139],
-    "69": [0, 0.68333, 0.08944, 0.11111, 0.52778],
-    "70": [0, 0.68333, 0.09931, 0.11111, 0.71875],
-    "71": [0.09722, 0.68333, 0.0593, 0.11111, 0.59487],
-    "72": [0, 0.68333, 0.00965, 0.11111, 0.84452],
-    "73": [0, 0.68333, 0.07382, 0, 0.54452],
-    "74": [0.09722, 0.68333, 0.18472, 0.16667, 0.67778],
-    "75": [0, 0.68333, 0.01445, 0.05556, 0.76195],
-    "76": [0, 0.68333, 0, 0.13889, 0.68972],
-    "77": [0, 0.68333, 0, 0.13889, 1.2009],
-    "78": [0, 0.68333, 0.14736, 0.08334, 0.82049],
-    "79": [0, 0.68333, 0.02778, 0.11111, 0.79611],
-    "80": [0, 0.68333, 0.08222, 0.08334, 0.69556],
-    "81": [0.09722, 0.68333, 0, 0.11111, 0.81667],
-    "82": [0, 0.68333, 0, 0.08334, 0.8475],
-    "83": [0, 0.68333, 0.075, 0.13889, 0.60556],
-    "84": [0, 0.68333, 0.25417, 0, 0.54464],
-    "85": [0, 0.68333, 0.09931, 0.08334, 0.62583],
-    "86": [0, 0.68333, 0.08222, 0, 0.61278],
-    "87": [0, 0.68333, 0.08222, 0.08334, 0.98778],
-    "88": [0, 0.68333, 0.14643, 0.13889, 0.7133],
-    "89": [0.09722, 0.68333, 0.08222, 0.08334, 0.66834],
-    "90": [0, 0.68333, 0.07944, 0.13889, 0.72473]
-  },
-  "Fraktur-Regular": {
-    "33": [0, 0.69141, 0, 0, 0.29574],
-    "34": [0, 0.69141, 0, 0, 0.21471],
-    "38": [0, 0.69141, 0, 0, 0.73786],
-    "39": [0, 0.69141, 0, 0, 0.21201],
-    "40": [0.24982, 0.74947, 0, 0, 0.38865],
-    "41": [0.24982, 0.74947, 0, 0, 0.38865],
-    "42": [0, 0.62119, 0, 0, 0.27764],
-    "43": [0.08319, 0.58283, 0, 0, 0.75623],
-    "44": [0, 0.10803, 0, 0, 0.27764],
-    "45": [0.08319, 0.58283, 0, 0, 0.75623],
-    "46": [0, 0.10803, 0, 0, 0.27764],
-    "47": [0.24982, 0.74947, 0, 0, 0.50181],
-    "48": [0, 0.47534, 0, 0, 0.50181],
-    "49": [0, 0.47534, 0, 0, 0.50181],
-    "50": [0, 0.47534, 0, 0, 0.50181],
-    "51": [0.18906, 0.47534, 0, 0, 0.50181],
-    "52": [0.18906, 0.47534, 0, 0, 0.50181],
-    "53": [0.18906, 0.47534, 0, 0, 0.50181],
-    "54": [0, 0.69141, 0, 0, 0.50181],
-    "55": [0.18906, 0.47534, 0, 0, 0.50181],
-    "56": [0, 0.69141, 0, 0, 0.50181],
-    "57": [0.18906, 0.47534, 0, 0, 0.50181],
-    "58": [0, 0.47534, 0, 0, 0.21606],
-    "59": [0.12604, 0.47534, 0, 0, 0.21606],
-    "61": [-0.13099, 0.36866, 0, 0, 0.75623],
-    "63": [0, 0.69141, 0, 0, 0.36245],
-    "65": [0, 0.69141, 0, 0, 0.7176],
-    "66": [0, 0.69141, 0, 0, 0.88397],
-    "67": [0, 0.69141, 0, 0, 0.61254],
-    "68": [0, 0.69141, 0, 0, 0.83158],
-    "69": [0, 0.69141, 0, 0, 0.66278],
-    "70": [0.12604, 0.69141, 0, 0, 0.61119],
-    "71": [0, 0.69141, 0, 0, 0.78539],
-    "72": [0.06302, 0.69141, 0, 0, 0.7203],
-    "73": [0, 0.69141, 0, 0, 0.55448],
-    "74": [0.12604, 0.69141, 0, 0, 0.55231],
-    "75": [0, 0.69141, 0, 0, 0.66845],
-    "76": [0, 0.69141, 0, 0, 0.66602],
-    "77": [0, 0.69141, 0, 0, 1.04953],
-    "78": [0, 0.69141, 0, 0, 0.83212],
-    "79": [0, 0.69141, 0, 0, 0.82699],
-    "80": [0.18906, 0.69141, 0, 0, 0.82753],
-    "81": [0.03781, 0.69141, 0, 0, 0.82699],
-    "82": [0, 0.69141, 0, 0, 0.82807],
-    "83": [0, 0.69141, 0, 0, 0.82861],
-    "84": [0, 0.69141, 0, 0, 0.66899],
-    "85": [0, 0.69141, 0, 0, 0.64576],
-    "86": [0, 0.69141, 0, 0, 0.83131],
-    "87": [0, 0.69141, 0, 0, 1.04602],
-    "88": [0, 0.69141, 0, 0, 0.71922],
-    "89": [0.18906, 0.69141, 0, 0, 0.83293],
-    "90": [0.12604, 0.69141, 0, 0, 0.60201],
-    "91": [0.24982, 0.74947, 0, 0, 0.27764],
-    "93": [0.24982, 0.74947, 0, 0, 0.27764],
-    "94": [0, 0.69141, 0, 0, 0.49965],
-    "97": [0, 0.47534, 0, 0, 0.50046],
-    "98": [0, 0.69141, 0, 0, 0.51315],
-    "99": [0, 0.47534, 0, 0, 0.38946],
-    "100": [0, 0.62119, 0, 0, 0.49857],
-    "101": [0, 0.47534, 0, 0, 0.40053],
-    "102": [0.18906, 0.69141, 0, 0, 0.32626],
-    "103": [0.18906, 0.47534, 0, 0, 0.5037],
-    "104": [0.18906, 0.69141, 0, 0, 0.52126],
-    "105": [0, 0.69141, 0, 0, 0.27899],
-    "106": [0, 0.69141, 0, 0, 0.28088],
-    "107": [0, 0.69141, 0, 0, 0.38946],
-    "108": [0, 0.69141, 0, 0, 0.27953],
-    "109": [0, 0.47534, 0, 0, 0.76676],
-    "110": [0, 0.47534, 0, 0, 0.52666],
-    "111": [0, 0.47534, 0, 0, 0.48885],
-    "112": [0.18906, 0.52396, 0, 0, 0.50046],
-    "113": [0.18906, 0.47534, 0, 0, 0.48912],
-    "114": [0, 0.47534, 0, 0, 0.38919],
-    "115": [0, 0.47534, 0, 0, 0.44266],
-    "116": [0, 0.62119, 0, 0, 0.33301],
-    "117": [0, 0.47534, 0, 0, 0.5172],
-    "118": [0, 0.52396, 0, 0, 0.5118],
-    "119": [0, 0.52396, 0, 0, 0.77351],
-    "120": [0.18906, 0.47534, 0, 0, 0.38865],
-    "121": [0.18906, 0.47534, 0, 0, 0.49884],
-    "122": [0.18906, 0.47534, 0, 0, 0.39054],
-    "8216": [0, 0.69141, 0, 0, 0.21471],
-    "8217": [0, 0.69141, 0, 0, 0.21471],
-    "58112": [0, 0.62119, 0, 0, 0.49749],
-    "58113": [0, 0.62119, 0, 0, 0.4983],
-    "58114": [0.18906, 0.69141, 0, 0, 0.33328],
-    "58115": [0.18906, 0.69141, 0, 0, 0.32923],
-    "58116": [0.18906, 0.47534, 0, 0, 0.50343],
-    "58117": [0, 0.69141, 0, 0, 0.33301],
-    "58118": [0, 0.62119, 0, 0, 0.33409],
-    "58119": [0, 0.47534, 0, 0, 0.50073]
-  },
-  "Main-Bold": {
-    "33": [0, 0.69444, 0, 0, 0.35],
-    "34": [0, 0.69444, 0, 0, 0.60278],
-    "35": [0.19444, 0.69444, 0, 0, 0.95833],
-    "36": [0.05556, 0.75, 0, 0, 0.575],
-    "37": [0.05556, 0.75, 0, 0, 0.95833],
-    "38": [0, 0.69444, 0, 0, 0.89444],
-    "39": [0, 0.69444, 0, 0, 0.31944],
-    "40": [0.25, 0.75, 0, 0, 0.44722],
-    "41": [0.25, 0.75, 0, 0, 0.44722],
-    "42": [0, 0.75, 0, 0, 0.575],
-    "43": [0.13333, 0.63333, 0, 0, 0.89444],
-    "44": [0.19444, 0.15556, 0, 0, 0.31944],
-    "45": [0, 0.44444, 0, 0, 0.38333],
-    "46": [0, 0.15556, 0, 0, 0.31944],
-    "47": [0.25, 0.75, 0, 0, 0.575],
-    "48": [0, 0.64444, 0, 0, 0.575],
-    "49": [0, 0.64444, 0, 0, 0.575],
-    "50": [0, 0.64444, 0, 0, 0.575],
-    "51": [0, 0.64444, 0, 0, 0.575],
-    "52": [0, 0.64444, 0, 0, 0.575],
-    "53": [0, 0.64444, 0, 0, 0.575],
-    "54": [0, 0.64444, 0, 0, 0.575],
-    "55": [0, 0.64444, 0, 0, 0.575],
-    "56": [0, 0.64444, 0, 0, 0.575],
-    "57": [0, 0.64444, 0, 0, 0.575],
-    "58": [0, 0.44444, 0, 0, 0.31944],
-    "59": [0.19444, 0.44444, 0, 0, 0.31944],
-    "60": [0.08556, 0.58556, 0, 0, 0.89444],
-    "61": [-0.10889, 0.39111, 0, 0, 0.89444],
-    "62": [0.08556, 0.58556, 0, 0, 0.89444],
-    "63": [0, 0.69444, 0, 0, 0.54305],
-    "64": [0, 0.69444, 0, 0, 0.89444],
-    "65": [0, 0.68611, 0, 0, 0.86944],
-    "66": [0, 0.68611, 0, 0, 0.81805],
-    "67": [0, 0.68611, 0, 0, 0.83055],
-    "68": [0, 0.68611, 0, 0, 0.88194],
-    "69": [0, 0.68611, 0, 0, 0.75555],
-    "70": [0, 0.68611, 0, 0, 0.72361],
-    "71": [0, 0.68611, 0, 0, 0.90416],
-    "72": [0, 0.68611, 0, 0, 0.9],
-    "73": [0, 0.68611, 0, 0, 0.43611],
-    "74": [0, 0.68611, 0, 0, 0.59444],
-    "75": [0, 0.68611, 0, 0, 0.90138],
-    "76": [0, 0.68611, 0, 0, 0.69166],
-    "77": [0, 0.68611, 0, 0, 1.09166],
-    "78": [0, 0.68611, 0, 0, 0.9],
-    "79": [0, 0.68611, 0, 0, 0.86388],
-    "80": [0, 0.68611, 0, 0, 0.78611],
-    "81": [0.19444, 0.68611, 0, 0, 0.86388],
-    "82": [0, 0.68611, 0, 0, 0.8625],
-    "83": [0, 0.68611, 0, 0, 0.63889],
-    "84": [0, 0.68611, 0, 0, 0.8],
-    "85": [0, 0.68611, 0, 0, 0.88472],
-    "86": [0, 0.68611, 0.01597, 0, 0.86944],
-    "87": [0, 0.68611, 0.01597, 0, 1.18888],
-    "88": [0, 0.68611, 0, 0, 0.86944],
-    "89": [0, 0.68611, 0.02875, 0, 0.86944],
-    "90": [0, 0.68611, 0, 0, 0.70277],
-    "91": [0.25, 0.75, 0, 0, 0.31944],
-    "92": [0.25, 0.75, 0, 0, 0.575],
-    "93": [0.25, 0.75, 0, 0, 0.31944],
-    "94": [0, 0.69444, 0, 0, 0.575],
-    "95": [0.31, 0.13444, 0.03194, 0, 0.575],
-    "97": [0, 0.44444, 0, 0, 0.55902],
-    "98": [0, 0.69444, 0, 0, 0.63889],
-    "99": [0, 0.44444, 0, 0, 0.51111],
-    "100": [0, 0.69444, 0, 0, 0.63889],
-    "101": [0, 0.44444, 0, 0, 0.52708],
-    "102": [0, 0.69444, 0.10903, 0, 0.35139],
-    "103": [0.19444, 0.44444, 0.01597, 0, 0.575],
-    "104": [0, 0.69444, 0, 0, 0.63889],
-    "105": [0, 0.69444, 0, 0, 0.31944],
-    "106": [0.19444, 0.69444, 0, 0, 0.35139],
-    "107": [0, 0.69444, 0, 0, 0.60694],
-    "108": [0, 0.69444, 0, 0, 0.31944],
-    "109": [0, 0.44444, 0, 0, 0.95833],
-    "110": [0, 0.44444, 0, 0, 0.63889],
-    "111": [0, 0.44444, 0, 0, 0.575],
-    "112": [0.19444, 0.44444, 0, 0, 0.63889],
-    "113": [0.19444, 0.44444, 0, 0, 0.60694],
-    "114": [0, 0.44444, 0, 0, 0.47361],
-    "115": [0, 0.44444, 0, 0, 0.45361],
-    "116": [0, 0.63492, 0, 0, 0.44722],
-    "117": [0, 0.44444, 0, 0, 0.63889],
-    "118": [0, 0.44444, 0.01597, 0, 0.60694],
-    "119": [0, 0.44444, 0.01597, 0, 0.83055],
-    "120": [0, 0.44444, 0, 0, 0.60694],
-    "121": [0.19444, 0.44444, 0.01597, 0, 0.60694],
-    "122": [0, 0.44444, 0, 0, 0.51111],
-    "123": [0.25, 0.75, 0, 0, 0.575],
-    "124": [0.25, 0.75, 0, 0, 0.31944],
-    "125": [0.25, 0.75, 0, 0, 0.575],
-    "126": [0.35, 0.34444, 0, 0, 0.575],
-    "168": [0, 0.69444, 0, 0, 0.575],
-    "172": [0, 0.44444, 0, 0, 0.76666],
-    "176": [0, 0.69444, 0, 0, 0.86944],
-    "177": [0.13333, 0.63333, 0, 0, 0.89444],
-    "184": [0.17014, 0, 0, 0, 0.51111],
-    "198": [0, 0.68611, 0, 0, 1.04166],
-    "215": [0.13333, 0.63333, 0, 0, 0.89444],
-    "216": [0.04861, 0.73472, 0, 0, 0.89444],
-    "223": [0, 0.69444, 0, 0, 0.59722],
-    "230": [0, 0.44444, 0, 0, 0.83055],
-    "247": [0.13333, 0.63333, 0, 0, 0.89444],
-    "248": [0.09722, 0.54167, 0, 0, 0.575],
-    "305": [0, 0.44444, 0, 0, 0.31944],
-    "338": [0, 0.68611, 0, 0, 1.16944],
-    "339": [0, 0.44444, 0, 0, 0.89444],
-    "567": [0.19444, 0.44444, 0, 0, 0.35139],
-    "710": [0, 0.69444, 0, 0, 0.575],
-    "711": [0, 0.63194, 0, 0, 0.575],
-    "713": [0, 0.59611, 0, 0, 0.575],
-    "714": [0, 0.69444, 0, 0, 0.575],
-    "715": [0, 0.69444, 0, 0, 0.575],
-    "728": [0, 0.69444, 0, 0, 0.575],
-    "729": [0, 0.69444, 0, 0, 0.31944],
-    "730": [0, 0.69444, 0, 0, 0.86944],
-    "732": [0, 0.69444, 0, 0, 0.575],
-    "733": [0, 0.69444, 0, 0, 0.575],
-    "915": [0, 0.68611, 0, 0, 0.69166],
-    "916": [0, 0.68611, 0, 0, 0.95833],
-    "920": [0, 0.68611, 0, 0, 0.89444],
-    "923": [0, 0.68611, 0, 0, 0.80555],
-    "926": [0, 0.68611, 0, 0, 0.76666],
-    "928": [0, 0.68611, 0, 0, 0.9],
-    "931": [0, 0.68611, 0, 0, 0.83055],
-    "933": [0, 0.68611, 0, 0, 0.89444],
-    "934": [0, 0.68611, 0, 0, 0.83055],
-    "936": [0, 0.68611, 0, 0, 0.89444],
-    "937": [0, 0.68611, 0, 0, 0.83055],
-    "8211": [0, 0.44444, 0.03194, 0, 0.575],
-    "8212": [0, 0.44444, 0.03194, 0, 1.14999],
-    "8216": [0, 0.69444, 0, 0, 0.31944],
-    "8217": [0, 0.69444, 0, 0, 0.31944],
-    "8220": [0, 0.69444, 0, 0, 0.60278],
-    "8221": [0, 0.69444, 0, 0, 0.60278],
-    "8224": [0.19444, 0.69444, 0, 0, 0.51111],
-    "8225": [0.19444, 0.69444, 0, 0, 0.51111],
-    "8242": [0, 0.55556, 0, 0, 0.34444],
-    "8407": [0, 0.72444, 0.15486, 0, 0.575],
-    "8463": [0, 0.69444, 0, 0, 0.66759],
-    "8465": [0, 0.69444, 0, 0, 0.83055],
-    "8467": [0, 0.69444, 0, 0, 0.47361],
-    "8472": [0.19444, 0.44444, 0, 0, 0.74027],
-    "8476": [0, 0.69444, 0, 0, 0.83055],
-    "8501": [0, 0.69444, 0, 0, 0.70277],
-    "8592": [-0.10889, 0.39111, 0, 0, 1.14999],
-    "8593": [0.19444, 0.69444, 0, 0, 0.575],
-    "8594": [-0.10889, 0.39111, 0, 0, 1.14999],
-    "8595": [0.19444, 0.69444, 0, 0, 0.575],
-    "8596": [-0.10889, 0.39111, 0, 0, 1.14999],
-    "8597": [0.25, 0.75, 0, 0, 0.575],
-    "8598": [0.19444, 0.69444, 0, 0, 1.14999],
-    "8599": [0.19444, 0.69444, 0, 0, 1.14999],
-    "8600": [0.19444, 0.69444, 0, 0, 1.14999],
-    "8601": [0.19444, 0.69444, 0, 0, 1.14999],
-    "8636": [-0.10889, 0.39111, 0, 0, 1.14999],
-    "8637": [-0.10889, 0.39111, 0, 0, 1.14999],
-    "8640": [-0.10889, 0.39111, 0, 0, 1.14999],
-    "8641": [-0.10889, 0.39111, 0, 0, 1.14999],
-    "8656": [-0.10889, 0.39111, 0, 0, 1.14999],
-    "8657": [0.19444, 0.69444, 0, 0, 0.70277],
-    "8658": [-0.10889, 0.39111, 0, 0, 1.14999],
-    "8659": [0.19444, 0.69444, 0, 0, 0.70277],
-    "8660": [-0.10889, 0.39111, 0, 0, 1.14999],
-    "8661": [0.25, 0.75, 0, 0, 0.70277],
-    "8704": [0, 0.69444, 0, 0, 0.63889],
-    "8706": [0, 0.69444, 0.06389, 0, 0.62847],
-    "8707": [0, 0.69444, 0, 0, 0.63889],
-    "8709": [0.05556, 0.75, 0, 0, 0.575],
-    "8711": [0, 0.68611, 0, 0, 0.95833],
-    "8712": [0.08556, 0.58556, 0, 0, 0.76666],
-    "8715": [0.08556, 0.58556, 0, 0, 0.76666],
-    "8722": [0.13333, 0.63333, 0, 0, 0.89444],
-    "8723": [0.13333, 0.63333, 0, 0, 0.89444],
-    "8725": [0.25, 0.75, 0, 0, 0.575],
-    "8726": [0.25, 0.75, 0, 0, 0.575],
-    "8727": [-0.02778, 0.47222, 0, 0, 0.575],
-    "8728": [-0.02639, 0.47361, 0, 0, 0.575],
-    "8729": [-0.02639, 0.47361, 0, 0, 0.575],
-    "8730": [0.18, 0.82, 0, 0, 0.95833],
-    "8733": [0, 0.44444, 0, 0, 0.89444],
-    "8734": [0, 0.44444, 0, 0, 1.14999],
-    "8736": [0, 0.69224, 0, 0, 0.72222],
-    "8739": [0.25, 0.75, 0, 0, 0.31944],
-    "8741": [0.25, 0.75, 0, 0, 0.575],
-    "8743": [0, 0.55556, 0, 0, 0.76666],
-    "8744": [0, 0.55556, 0, 0, 0.76666],
-    "8745": [0, 0.55556, 0, 0, 0.76666],
-    "8746": [0, 0.55556, 0, 0, 0.76666],
-    "8747": [0.19444, 0.69444, 0.12778, 0, 0.56875],
-    "8764": [-0.10889, 0.39111, 0, 0, 0.89444],
-    "8768": [0.19444, 0.69444, 0, 0, 0.31944],
-    "8771": [0.00222, 0.50222, 0, 0, 0.89444],
-    "8776": [0.02444, 0.52444, 0, 0, 0.89444],
-    "8781": [0.00222, 0.50222, 0, 0, 0.89444],
-    "8801": [0.00222, 0.50222, 0, 0, 0.89444],
-    "8804": [0.19667, 0.69667, 0, 0, 0.89444],
-    "8805": [0.19667, 0.69667, 0, 0, 0.89444],
-    "8810": [0.08556, 0.58556, 0, 0, 1.14999],
-    "8811": [0.08556, 0.58556, 0, 0, 1.14999],
-    "8826": [0.08556, 0.58556, 0, 0, 0.89444],
-    "8827": [0.08556, 0.58556, 0, 0, 0.89444],
-    "8834": [0.08556, 0.58556, 0, 0, 0.89444],
-    "8835": [0.08556, 0.58556, 0, 0, 0.89444],
-    "8838": [0.19667, 0.69667, 0, 0, 0.89444],
-    "8839": [0.19667, 0.69667, 0, 0, 0.89444],
-    "8846": [0, 0.55556, 0, 0, 0.76666],
-    "8849": [0.19667, 0.69667, 0, 0, 0.89444],
-    "8850": [0.19667, 0.69667, 0, 0, 0.89444],
-    "8851": [0, 0.55556, 0, 0, 0.76666],
-    "8852": [0, 0.55556, 0, 0, 0.76666],
-    "8853": [0.13333, 0.63333, 0, 0, 0.89444],
-    "8854": [0.13333, 0.63333, 0, 0, 0.89444],
-    "8855": [0.13333, 0.63333, 0, 0, 0.89444],
-    "8856": [0.13333, 0.63333, 0, 0, 0.89444],
-    "8857": [0.13333, 0.63333, 0, 0, 0.89444],
-    "8866": [0, 0.69444, 0, 0, 0.70277],
-    "8867": [0, 0.69444, 0, 0, 0.70277],
-    "8868": [0, 0.69444, 0, 0, 0.89444],
-    "8869": [0, 0.69444, 0, 0, 0.89444],
-    "8900": [-0.02639, 0.47361, 0, 0, 0.575],
-    "8901": [-0.02639, 0.47361, 0, 0, 0.31944],
-    "8902": [-0.02778, 0.47222, 0, 0, 0.575],
-    "8968": [0.25, 0.75, 0, 0, 0.51111],
-    "8969": [0.25, 0.75, 0, 0, 0.51111],
-    "8970": [0.25, 0.75, 0, 0, 0.51111],
-    "8971": [0.25, 0.75, 0, 0, 0.51111],
-    "8994": [-0.13889, 0.36111, 0, 0, 1.14999],
-    "8995": [-0.13889, 0.36111, 0, 0, 1.14999],
-    "9651": [0.19444, 0.69444, 0, 0, 1.02222],
-    "9657": [-0.02778, 0.47222, 0, 0, 0.575],
-    "9661": [0.19444, 0.69444, 0, 0, 1.02222],
-    "9667": [-0.02778, 0.47222, 0, 0, 0.575],
-    "9711": [0.19444, 0.69444, 0, 0, 1.14999],
-    "9824": [0.12963, 0.69444, 0, 0, 0.89444],
-    "9825": [0.12963, 0.69444, 0, 0, 0.89444],
-    "9826": [0.12963, 0.69444, 0, 0, 0.89444],
-    "9827": [0.12963, 0.69444, 0, 0, 0.89444],
-    "9837": [0, 0.75, 0, 0, 0.44722],
-    "9838": [0.19444, 0.69444, 0, 0, 0.44722],
-    "9839": [0.19444, 0.69444, 0, 0, 0.44722],
-    "10216": [0.25, 0.75, 0, 0, 0.44722],
-    "10217": [0.25, 0.75, 0, 0, 0.44722],
-    "10815": [0, 0.68611, 0, 0, 0.9],
-    "10927": [0.19667, 0.69667, 0, 0, 0.89444],
-    "10928": [0.19667, 0.69667, 0, 0, 0.89444],
-    "57376": [0.19444, 0.69444, 0, 0, 0]
-  },
-  "Main-BoldItalic": {
-    "33": [0, 0.69444, 0.11417, 0, 0.38611],
-    "34": [0, 0.69444, 0.07939, 0, 0.62055],
-    "35": [0.19444, 0.69444, 0.06833, 0, 0.94444],
-    "37": [0.05556, 0.75, 0.12861, 0, 0.94444],
-    "38": [0, 0.69444, 0.08528, 0, 0.88555],
-    "39": [0, 0.69444, 0.12945, 0, 0.35555],
-    "40": [0.25, 0.75, 0.15806, 0, 0.47333],
-    "41": [0.25, 0.75, 0.03306, 0, 0.47333],
-    "42": [0, 0.75, 0.14333, 0, 0.59111],
-    "43": [0.10333, 0.60333, 0.03306, 0, 0.88555],
-    "44": [0.19444, 0.14722, 0, 0, 0.35555],
-    "45": [0, 0.44444, 0.02611, 0, 0.41444],
-    "46": [0, 0.14722, 0, 0, 0.35555],
-    "47": [0.25, 0.75, 0.15806, 0, 0.59111],
-    "48": [0, 0.64444, 0.13167, 0, 0.59111],
-    "49": [0, 0.64444, 0.13167, 0, 0.59111],
-    "50": [0, 0.64444, 0.13167, 0, 0.59111],
-    "51": [0, 0.64444, 0.13167, 0, 0.59111],
-    "52": [0.19444, 0.64444, 0.13167, 0, 0.59111],
-    "53": [0, 0.64444, 0.13167, 0, 0.59111],
-    "54": [0, 0.64444, 0.13167, 0, 0.59111],
-    "55": [0.19444, 0.64444, 0.13167, 0, 0.59111],
-    "56": [0, 0.64444, 0.13167, 0, 0.59111],
-    "57": [0, 0.64444, 0.13167, 0, 0.59111],
-    "58": [0, 0.44444, 0.06695, 0, 0.35555],
-    "59": [0.19444, 0.44444, 0.06695, 0, 0.35555],
-    "61": [-0.10889, 0.39111, 0.06833, 0, 0.88555],
-    "63": [0, 0.69444, 0.11472, 0, 0.59111],
-    "64": [0, 0.69444, 0.09208, 0, 0.88555],
-    "65": [0, 0.68611, 0, 0, 0.86555],
-    "66": [0, 0.68611, 0.0992, 0, 0.81666],
-    "67": [0, 0.68611, 0.14208, 0, 0.82666],
-    "68": [0, 0.68611, 0.09062, 0, 0.87555],
-    "69": [0, 0.68611, 0.11431, 0, 0.75666],
-    "70": [0, 0.68611, 0.12903, 0, 0.72722],
-    "71": [0, 0.68611, 0.07347, 0, 0.89527],
-    "72": [0, 0.68611, 0.17208, 0, 0.8961],
-    "73": [0, 0.68611, 0.15681, 0, 0.47166],
-    "74": [0, 0.68611, 0.145, 0, 0.61055],
-    "75": [0, 0.68611, 0.14208, 0, 0.89499],
-    "76": [0, 0.68611, 0, 0, 0.69777],
-    "77": [0, 0.68611, 0.17208, 0, 1.07277],
-    "78": [0, 0.68611, 0.17208, 0, 0.8961],
-    "79": [0, 0.68611, 0.09062, 0, 0.85499],
-    "80": [0, 0.68611, 0.0992, 0, 0.78721],
-    "81": [0.19444, 0.68611, 0.09062, 0, 0.85499],
-    "82": [0, 0.68611, 0.02559, 0, 0.85944],
-    "83": [0, 0.68611, 0.11264, 0, 0.64999],
-    "84": [0, 0.68611, 0.12903, 0, 0.7961],
-    "85": [0, 0.68611, 0.17208, 0, 0.88083],
-    "86": [0, 0.68611, 0.18625, 0, 0.86555],
-    "87": [0, 0.68611, 0.18625, 0, 1.15999],
-    "88": [0, 0.68611, 0.15681, 0, 0.86555],
-    "89": [0, 0.68611, 0.19803, 0, 0.86555],
-    "90": [0, 0.68611, 0.14208, 0, 0.70888],
-    "91": [0.25, 0.75, 0.1875, 0, 0.35611],
-    "93": [0.25, 0.75, 0.09972, 0, 0.35611],
-    "94": [0, 0.69444, 0.06709, 0, 0.59111],
-    "95": [0.31, 0.13444, 0.09811, 0, 0.59111],
-    "97": [0, 0.44444, 0.09426, 0, 0.59111],
-    "98": [0, 0.69444, 0.07861, 0, 0.53222],
-    "99": [0, 0.44444, 0.05222, 0, 0.53222],
-    "100": [0, 0.69444, 0.10861, 0, 0.59111],
-    "101": [0, 0.44444, 0.085, 0, 0.53222],
-    "102": [0.19444, 0.69444, 0.21778, 0, 0.4],
-    "103": [0.19444, 0.44444, 0.105, 0, 0.53222],
-    "104": [0, 0.69444, 0.09426, 0, 0.59111],
-    "105": [0, 0.69326, 0.11387, 0, 0.35555],
-    "106": [0.19444, 0.69326, 0.1672, 0, 0.35555],
-    "107": [0, 0.69444, 0.11111, 0, 0.53222],
-    "108": [0, 0.69444, 0.10861, 0, 0.29666],
-    "109": [0, 0.44444, 0.09426, 0, 0.94444],
-    "110": [0, 0.44444, 0.09426, 0, 0.64999],
-    "111": [0, 0.44444, 0.07861, 0, 0.59111],
-    "112": [0.19444, 0.44444, 0.07861, 0, 0.59111],
-    "113": [0.19444, 0.44444, 0.105, 0, 0.53222],
-    "114": [0, 0.44444, 0.11111, 0, 0.50167],
-    "115": [0, 0.44444, 0.08167, 0, 0.48694],
-    "116": [0, 0.63492, 0.09639, 0, 0.385],
-    "117": [0, 0.44444, 0.09426, 0, 0.62055],
-    "118": [0, 0.44444, 0.11111, 0, 0.53222],
-    "119": [0, 0.44444, 0.11111, 0, 0.76777],
-    "120": [0, 0.44444, 0.12583, 0, 0.56055],
-    "121": [0.19444, 0.44444, 0.105, 0, 0.56166],
-    "122": [0, 0.44444, 0.13889, 0, 0.49055],
-    "126": [0.35, 0.34444, 0.11472, 0, 0.59111],
-    "163": [0, 0.69444, 0, 0, 0.86853],
-    "168": [0, 0.69444, 0.11473, 0, 0.59111],
-    "176": [0, 0.69444, 0, 0, 0.94888],
-    "184": [0.17014, 0, 0, 0, 0.53222],
-    "198": [0, 0.68611, 0.11431, 0, 1.02277],
-    "216": [0.04861, 0.73472, 0.09062, 0, 0.88555],
-    "223": [0.19444, 0.69444, 0.09736, 0, 0.665],
-    "230": [0, 0.44444, 0.085, 0, 0.82666],
-    "248": [0.09722, 0.54167, 0.09458, 0, 0.59111],
-    "305": [0, 0.44444, 0.09426, 0, 0.35555],
-    "338": [0, 0.68611, 0.11431, 0, 1.14054],
-    "339": [0, 0.44444, 0.085, 0, 0.82666],
-    "567": [0.19444, 0.44444, 0.04611, 0, 0.385],
-    "710": [0, 0.69444, 0.06709, 0, 0.59111],
-    "711": [0, 0.63194, 0.08271, 0, 0.59111],
-    "713": [0, 0.59444, 0.10444, 0, 0.59111],
-    "714": [0, 0.69444, 0.08528, 0, 0.59111],
-    "715": [0, 0.69444, 0, 0, 0.59111],
-    "728": [0, 0.69444, 0.10333, 0, 0.59111],
-    "729": [0, 0.69444, 0.12945, 0, 0.35555],
-    "730": [0, 0.69444, 0, 0, 0.94888],
-    "732": [0, 0.69444, 0.11472, 0, 0.59111],
-    "733": [0, 0.69444, 0.11472, 0, 0.59111],
-    "915": [0, 0.68611, 0.12903, 0, 0.69777],
-    "916": [0, 0.68611, 0, 0, 0.94444],
-    "920": [0, 0.68611, 0.09062, 0, 0.88555],
-    "923": [0, 0.68611, 0, 0, 0.80666],
-    "926": [0, 0.68611, 0.15092, 0, 0.76777],
-    "928": [0, 0.68611, 0.17208, 0, 0.8961],
-    "931": [0, 0.68611, 0.11431, 0, 0.82666],
-    "933": [0, 0.68611, 0.10778, 0, 0.88555],
-    "934": [0, 0.68611, 0.05632, 0, 0.82666],
-    "936": [0, 0.68611, 0.10778, 0, 0.88555],
-    "937": [0, 0.68611, 0.0992, 0, 0.82666],
-    "8211": [0, 0.44444, 0.09811, 0, 0.59111],
-    "8212": [0, 0.44444, 0.09811, 0, 1.18221],
-    "8216": [0, 0.69444, 0.12945, 0, 0.35555],
-    "8217": [0, 0.69444, 0.12945, 0, 0.35555],
-    "8220": [0, 0.69444, 0.16772, 0, 0.62055],
-    "8221": [0, 0.69444, 0.07939, 0, 0.62055]
-  },
-  "Main-Italic": {
-    "33": [0, 0.69444, 0.12417, 0, 0.30667],
-    "34": [0, 0.69444, 0.06961, 0, 0.51444],
-    "35": [0.19444, 0.69444, 0.06616, 0, 0.81777],
-    "37": [0.05556, 0.75, 0.13639, 0, 0.81777],
-    "38": [0, 0.69444, 0.09694, 0, 0.76666],
-    "39": [0, 0.69444, 0.12417, 0, 0.30667],
-    "40": [0.25, 0.75, 0.16194, 0, 0.40889],
-    "41": [0.25, 0.75, 0.03694, 0, 0.40889],
-    "42": [0, 0.75, 0.14917, 0, 0.51111],
-    "43": [0.05667, 0.56167, 0.03694, 0, 0.76666],
-    "44": [0.19444, 0.10556, 0, 0, 0.30667],
-    "45": [0, 0.43056, 0.02826, 0, 0.35778],
-    "46": [0, 0.10556, 0, 0, 0.30667],
-    "47": [0.25, 0.75, 0.16194, 0, 0.51111],
-    "48": [0, 0.64444, 0.13556, 0, 0.51111],
-    "49": [0, 0.64444, 0.13556, 0, 0.51111],
-    "50": [0, 0.64444, 0.13556, 0, 0.51111],
-    "51": [0, 0.64444, 0.13556, 0, 0.51111],
-    "52": [0.19444, 0.64444, 0.13556, 0, 0.51111],
-    "53": [0, 0.64444, 0.13556, 0, 0.51111],
-    "54": [0, 0.64444, 0.13556, 0, 0.51111],
-    "55": [0.19444, 0.64444, 0.13556, 0, 0.51111],
-    "56": [0, 0.64444, 0.13556, 0, 0.51111],
-    "57": [0, 0.64444, 0.13556, 0, 0.51111],
-    "58": [0, 0.43056, 0.0582, 0, 0.30667],
-    "59": [0.19444, 0.43056, 0.0582, 0, 0.30667],
-    "61": [-0.13313, 0.36687, 0.06616, 0, 0.76666],
-    "63": [0, 0.69444, 0.1225, 0, 0.51111],
-    "64": [0, 0.69444, 0.09597, 0, 0.76666],
-    "65": [0, 0.68333, 0, 0, 0.74333],
-    "66": [0, 0.68333, 0.10257, 0, 0.70389],
-    "67": [0, 0.68333, 0.14528, 0, 0.71555],
-    "68": [0, 0.68333, 0.09403, 0, 0.755],
-    "69": [0, 0.68333, 0.12028, 0, 0.67833],
-    "70": [0, 0.68333, 0.13305, 0, 0.65277],
-    "71": [0, 0.68333, 0.08722, 0, 0.77361],
-    "72": [0, 0.68333, 0.16389, 0, 0.74333],
-    "73": [0, 0.68333, 0.15806, 0, 0.38555],
-    "74": [0, 0.68333, 0.14028, 0, 0.525],
-    "75": [0, 0.68333, 0.14528, 0, 0.76888],
-    "76": [0, 0.68333, 0, 0, 0.62722],
-    "77": [0, 0.68333, 0.16389, 0, 0.89666],
-    "78": [0, 0.68333, 0.16389, 0, 0.74333],
-    "79": [0, 0.68333, 0.09403, 0, 0.76666],
-    "80": [0, 0.68333, 0.10257, 0, 0.67833],
-    "81": [0.19444, 0.68333, 0.09403, 0, 0.76666],
-    "82": [0, 0.68333, 0.03868, 0, 0.72944],
-    "83": [0, 0.68333, 0.11972, 0, 0.56222],
-    "84": [0, 0.68333, 0.13305, 0, 0.71555],
-    "85": [0, 0.68333, 0.16389, 0, 0.74333],
-    "86": [0, 0.68333, 0.18361, 0, 0.74333],
-    "87": [0, 0.68333, 0.18361, 0, 0.99888],
-    "88": [0, 0.68333, 0.15806, 0, 0.74333],
-    "89": [0, 0.68333, 0.19383, 0, 0.74333],
-    "90": [0, 0.68333, 0.14528, 0, 0.61333],
-    "91": [0.25, 0.75, 0.1875, 0, 0.30667],
-    "93": [0.25, 0.75, 0.10528, 0, 0.30667],
-    "94": [0, 0.69444, 0.06646, 0, 0.51111],
-    "95": [0.31, 0.12056, 0.09208, 0, 0.51111],
-    "97": [0, 0.43056, 0.07671, 0, 0.51111],
-    "98": [0, 0.69444, 0.06312, 0, 0.46],
-    "99": [0, 0.43056, 0.05653, 0, 0.46],
-    "100": [0, 0.69444, 0.10333, 0, 0.51111],
-    "101": [0, 0.43056, 0.07514, 0, 0.46],
-    "102": [0.19444, 0.69444, 0.21194, 0, 0.30667],
-    "103": [0.19444, 0.43056, 0.08847, 0, 0.46],
-    "104": [0, 0.69444, 0.07671, 0, 0.51111],
-    "105": [0, 0.65536, 0.1019, 0, 0.30667],
-    "106": [0.19444, 0.65536, 0.14467, 0, 0.30667],
-    "107": [0, 0.69444, 0.10764, 0, 0.46],
-    "108": [0, 0.69444, 0.10333, 0, 0.25555],
-    "109": [0, 0.43056, 0.07671, 0, 0.81777],
-    "110": [0, 0.43056, 0.07671, 0, 0.56222],
-    "111": [0, 0.43056, 0.06312, 0, 0.51111],
-    "112": [0.19444, 0.43056, 0.06312, 0, 0.51111],
-    "113": [0.19444, 0.43056, 0.08847, 0, 0.46],
-    "114": [0, 0.43056, 0.10764, 0, 0.42166],
-    "115": [0, 0.43056, 0.08208, 0, 0.40889],
-    "116": [0, 0.61508, 0.09486, 0, 0.33222],
-    "117": [0, 0.43056, 0.07671, 0, 0.53666],
-    "118": [0, 0.43056, 0.10764, 0, 0.46],
-    "119": [0, 0.43056, 0.10764, 0, 0.66444],
-    "120": [0, 0.43056, 0.12042, 0, 0.46389],
-    "121": [0.19444, 0.43056, 0.08847, 0, 0.48555],
-    "122": [0, 0.43056, 0.12292, 0, 0.40889],
-    "126": [0.35, 0.31786, 0.11585, 0, 0.51111],
-    "163": [0, 0.69444, 0, 0, 0.76909],
-    "168": [0, 0.66786, 0.10474, 0, 0.51111],
-    "176": [0, 0.69444, 0, 0, 0.83129],
-    "184": [0.17014, 0, 0, 0, 0.46],
-    "198": [0, 0.68333, 0.12028, 0, 0.88277],
-    "216": [0.04861, 0.73194, 0.09403, 0, 0.76666],
-    "223": [0.19444, 0.69444, 0.10514, 0, 0.53666],
-    "230": [0, 0.43056, 0.07514, 0, 0.71555],
-    "248": [0.09722, 0.52778, 0.09194, 0, 0.51111],
-    "305": [0, 0.43056, 0, 0.02778, 0.32246],
-    "338": [0, 0.68333, 0.12028, 0, 0.98499],
-    "339": [0, 0.43056, 0.07514, 0, 0.71555],
-    "567": [0.19444, 0.43056, 0, 0.08334, 0.38403],
-    "710": [0, 0.69444, 0.06646, 0, 0.51111],
-    "711": [0, 0.62847, 0.08295, 0, 0.51111],
-    "713": [0, 0.56167, 0.10333, 0, 0.51111],
-    "714": [0, 0.69444, 0.09694, 0, 0.51111],
-    "715": [0, 0.69444, 0, 0, 0.51111],
-    "728": [0, 0.69444, 0.10806, 0, 0.51111],
-    "729": [0, 0.66786, 0.11752, 0, 0.30667],
-    "730": [0, 0.69444, 0, 0, 0.83129],
-    "732": [0, 0.66786, 0.11585, 0, 0.51111],
-    "733": [0, 0.69444, 0.1225, 0, 0.51111],
-    "915": [0, 0.68333, 0.13305, 0, 0.62722],
-    "916": [0, 0.68333, 0, 0, 0.81777],
-    "920": [0, 0.68333, 0.09403, 0, 0.76666],
-    "923": [0, 0.68333, 0, 0, 0.69222],
-    "926": [0, 0.68333, 0.15294, 0, 0.66444],
-    "928": [0, 0.68333, 0.16389, 0, 0.74333],
-    "931": [0, 0.68333, 0.12028, 0, 0.71555],
-    "933": [0, 0.68333, 0.11111, 0, 0.76666],
-    "934": [0, 0.68333, 0.05986, 0, 0.71555],
-    "936": [0, 0.68333, 0.11111, 0, 0.76666],
-    "937": [0, 0.68333, 0.10257, 0, 0.71555],
-    "8211": [0, 0.43056, 0.09208, 0, 0.51111],
-    "8212": [0, 0.43056, 0.09208, 0, 1.02222],
-    "8216": [0, 0.69444, 0.12417, 0, 0.30667],
-    "8217": [0, 0.69444, 0.12417, 0, 0.30667],
-    "8220": [0, 0.69444, 0.1685, 0, 0.51444],
-    "8221": [0, 0.69444, 0.06961, 0, 0.51444],
-    "8463": [0, 0.68889, 0, 0, 0.54028]
-  },
-  "Main-Regular": {
-    "32": [0, 0, 0, 0, 0.25],
-    "33": [0, 0.69444, 0, 0, 0.27778],
-    "34": [0, 0.69444, 0, 0, 0.5],
-    "35": [0.19444, 0.69444, 0, 0, 0.83334],
-    "36": [0.05556, 0.75, 0, 0, 0.5],
-    "37": [0.05556, 0.75, 0, 0, 0.83334],
-    "38": [0, 0.69444, 0, 0, 0.77778],
-    "39": [0, 0.69444, 0, 0, 0.27778],
-    "40": [0.25, 0.75, 0, 0, 0.38889],
-    "41": [0.25, 0.75, 0, 0, 0.38889],
-    "42": [0, 0.75, 0, 0, 0.5],
-    "43": [0.08333, 0.58333, 0, 0, 0.77778],
-    "44": [0.19444, 0.10556, 0, 0, 0.27778],
-    "45": [0, 0.43056, 0, 0, 0.33333],
-    "46": [0, 0.10556, 0, 0, 0.27778],
-    "47": [0.25, 0.75, 0, 0, 0.5],
-    "48": [0, 0.64444, 0, 0, 0.5],
-    "49": [0, 0.64444, 0, 0, 0.5],
-    "50": [0, 0.64444, 0, 0, 0.5],
-    "51": [0, 0.64444, 0, 0, 0.5],
-    "52": [0, 0.64444, 0, 0, 0.5],
-    "53": [0, 0.64444, 0, 0, 0.5],
-    "54": [0, 0.64444, 0, 0, 0.5],
-    "55": [0, 0.64444, 0, 0, 0.5],
-    "56": [0, 0.64444, 0, 0, 0.5],
-    "57": [0, 0.64444, 0, 0, 0.5],
-    "58": [0, 0.43056, 0, 0, 0.27778],
-    "59": [0.19444, 0.43056, 0, 0, 0.27778],
-    "60": [0.0391, 0.5391, 0, 0, 0.77778],
-    "61": [-0.13313, 0.36687, 0, 0, 0.77778],
-    "62": [0.0391, 0.5391, 0, 0, 0.77778],
-    "63": [0, 0.69444, 0, 0, 0.47222],
-    "64": [0, 0.69444, 0, 0, 0.77778],
-    "65": [0, 0.68333, 0, 0, 0.75],
-    "66": [0, 0.68333, 0, 0, 0.70834],
-    "67": [0, 0.68333, 0, 0, 0.72222],
-    "68": [0, 0.68333, 0, 0, 0.76389],
-    "69": [0, 0.68333, 0, 0, 0.68056],
-    "70": [0, 0.68333, 0, 0, 0.65278],
-    "71": [0, 0.68333, 0, 0, 0.78472],
-    "72": [0, 0.68333, 0, 0, 0.75],
-    "73": [0, 0.68333, 0, 0, 0.36111],
-    "74": [0, 0.68333, 0, 0, 0.51389],
-    "75": [0, 0.68333, 0, 0, 0.77778],
-    "76": [0, 0.68333, 0, 0, 0.625],
-    "77": [0, 0.68333, 0, 0, 0.91667],
-    "78": [0, 0.68333, 0, 0, 0.75],
-    "79": [0, 0.68333, 0, 0, 0.77778],
-    "80": [0, 0.68333, 0, 0, 0.68056],
-    "81": [0.19444, 0.68333, 0, 0, 0.77778],
-    "82": [0, 0.68333, 0, 0, 0.73611],
-    "83": [0, 0.68333, 0, 0, 0.55556],
-    "84": [0, 0.68333, 0, 0, 0.72222],
-    "85": [0, 0.68333, 0, 0, 0.75],
-    "86": [0, 0.68333, 0.01389, 0, 0.75],
-    "87": [0, 0.68333, 0.01389, 0, 1.02778],
-    "88": [0, 0.68333, 0, 0, 0.75],
-    "89": [0, 0.68333, 0.025, 0, 0.75],
-    "90": [0, 0.68333, 0, 0, 0.61111],
-    "91": [0.25, 0.75, 0, 0, 0.27778],
-    "92": [0.25, 0.75, 0, 0, 0.5],
-    "93": [0.25, 0.75, 0, 0, 0.27778],
-    "94": [0, 0.69444, 0, 0, 0.5],
-    "95": [0.31, 0.12056, 0.02778, 0, 0.5],
-    "97": [0, 0.43056, 0, 0, 0.5],
-    "98": [0, 0.69444, 0, 0, 0.55556],
-    "99": [0, 0.43056, 0, 0, 0.44445],
-    "100": [0, 0.69444, 0, 0, 0.55556],
-    "101": [0, 0.43056, 0, 0, 0.44445],
-    "102": [0, 0.69444, 0.07778, 0, 0.30556],
-    "103": [0.19444, 0.43056, 0.01389, 0, 0.5],
-    "104": [0, 0.69444, 0, 0, 0.55556],
-    "105": [0, 0.66786, 0, 0, 0.27778],
-    "106": [0.19444, 0.66786, 0, 0, 0.30556],
-    "107": [0, 0.69444, 0, 0, 0.52778],
-    "108": [0, 0.69444, 0, 0, 0.27778],
-    "109": [0, 0.43056, 0, 0, 0.83334],
-    "110": [0, 0.43056, 0, 0, 0.55556],
-    "111": [0, 0.43056, 0, 0, 0.5],
-    "112": [0.19444, 0.43056, 0, 0, 0.55556],
-    "113": [0.19444, 0.43056, 0, 0, 0.52778],
-    "114": [0, 0.43056, 0, 0, 0.39167],
-    "115": [0, 0.43056, 0, 0, 0.39445],
-    "116": [0, 0.61508, 0, 0, 0.38889],
-    "117": [0, 0.43056, 0, 0, 0.55556],
-    "118": [0, 0.43056, 0.01389, 0, 0.52778],
-    "119": [0, 0.43056, 0.01389, 0, 0.72222],
-    "120": [0, 0.43056, 0, 0, 0.52778],
-    "121": [0.19444, 0.43056, 0.01389, 0, 0.52778],
-    "122": [0, 0.43056, 0, 0, 0.44445],
-    "123": [0.25, 0.75, 0, 0, 0.5],
-    "124": [0.25, 0.75, 0, 0, 0.27778],
-    "125": [0.25, 0.75, 0, 0, 0.5],
-    "126": [0.35, 0.31786, 0, 0, 0.5],
-    "160": [0, 0, 0, 0, 0.25],
-    "167": [0.19444, 0.69444, 0, 0, 0.44445],
-    "168": [0, 0.66786, 0, 0, 0.5],
-    "172": [0, 0.43056, 0, 0, 0.66667],
-    "176": [0, 0.69444, 0, 0, 0.75],
-    "177": [0.08333, 0.58333, 0, 0, 0.77778],
-    "182": [0.19444, 0.69444, 0, 0, 0.61111],
-    "184": [0.17014, 0, 0, 0, 0.44445],
-    "198": [0, 0.68333, 0, 0, 0.90278],
-    "215": [0.08333, 0.58333, 0, 0, 0.77778],
-    "216": [0.04861, 0.73194, 0, 0, 0.77778],
-    "223": [0, 0.69444, 0, 0, 0.5],
-    "230": [0, 0.43056, 0, 0, 0.72222],
-    "247": [0.08333, 0.58333, 0, 0, 0.77778],
-    "248": [0.09722, 0.52778, 0, 0, 0.5],
-    "305": [0, 0.43056, 0, 0, 0.27778],
-    "338": [0, 0.68333, 0, 0, 1.01389],
-    "339": [0, 0.43056, 0, 0, 0.77778],
-    "567": [0.19444, 0.43056, 0, 0, 0.30556],
-    "710": [0, 0.69444, 0, 0, 0.5],
-    "711": [0, 0.62847, 0, 0, 0.5],
-    "713": [0, 0.56778, 0, 0, 0.5],
-    "714": [0, 0.69444, 0, 0, 0.5],
-    "715": [0, 0.69444, 0, 0, 0.5],
-    "728": [0, 0.69444, 0, 0, 0.5],
-    "729": [0, 0.66786, 0, 0, 0.27778],
-    "730": [0, 0.69444, 0, 0, 0.75],
-    "732": [0, 0.66786, 0, 0, 0.5],
-    "733": [0, 0.69444, 0, 0, 0.5],
-    "915": [0, 0.68333, 0, 0, 0.625],
-    "916": [0, 0.68333, 0, 0, 0.83334],
-    "920": [0, 0.68333, 0, 0, 0.77778],
-    "923": [0, 0.68333, 0, 0, 0.69445],
-    "926": [0, 0.68333, 0, 0, 0.66667],
-    "928": [0, 0.68333, 0, 0, 0.75],
-    "931": [0, 0.68333, 0, 0, 0.72222],
-    "933": [0, 0.68333, 0, 0, 0.77778],
-    "934": [0, 0.68333, 0, 0, 0.72222],
-    "936": [0, 0.68333, 0, 0, 0.77778],
-    "937": [0, 0.68333, 0, 0, 0.72222],
-    "8211": [0, 0.43056, 0.02778, 0, 0.5],
-    "8212": [0, 0.43056, 0.02778, 0, 1.0],
-    "8216": [0, 0.69444, 0, 0, 0.27778],
-    "8217": [0, 0.69444, 0, 0, 0.27778],
-    "8220": [0, 0.69444, 0, 0, 0.5],
-    "8221": [0, 0.69444, 0, 0, 0.5],
-    "8224": [0.19444, 0.69444, 0, 0, 0.44445],
-    "8225": [0.19444, 0.69444, 0, 0, 0.44445],
-    "8230": [0, 0.12, 0, 0, 1.172],
-    "8242": [0, 0.55556, 0, 0, 0.275],
-    "8407": [0, 0.71444, 0.15382, 0, 0.5],
-    "8463": [0, 0.68889, 0, 0, 0.54028],
-    "8465": [0, 0.69444, 0, 0, 0.72222],
-    "8467": [0, 0.69444, 0, 0.11111, 0.41667],
-    "8472": [0.19444, 0.43056, 0, 0.11111, 0.63646],
-    "8476": [0, 0.69444, 0, 0, 0.72222],
-    "8501": [0, 0.69444, 0, 0, 0.61111],
-    "8592": [-0.13313, 0.36687, 0, 0, 1.0],
-    "8593": [0.19444, 0.69444, 0, 0, 0.5],
-    "8594": [-0.13313, 0.36687, 0, 0, 1.0],
-    "8595": [0.19444, 0.69444, 0, 0, 0.5],
-    "8596": [-0.13313, 0.36687, 0, 0, 1.0],
-    "8597": [0.25, 0.75, 0, 0, 0.5],
-    "8598": [0.19444, 0.69444, 0, 0, 1.0],
-    "8599": [0.19444, 0.69444, 0, 0, 1.0],
-    "8600": [0.19444, 0.69444, 0, 0, 1.0],
-    "8601": [0.19444, 0.69444, 0, 0, 1.0],
-    "8614": [0.011, 0.511, 0, 0, 1.0],
-    "8617": [0.011, 0.511, 0, 0, 1.126],
-    "8618": [0.011, 0.511, 0, 0, 1.126],
-    "8636": [-0.13313, 0.36687, 0, 0, 1.0],
-    "8637": [-0.13313, 0.36687, 0, 0, 1.0],
-    "8640": [-0.13313, 0.36687, 0, 0, 1.0],
-    "8641": [-0.13313, 0.36687, 0, 0, 1.0],
-    "8652": [0.011, 0.671, 0, 0, 1.0],
-    "8656": [-0.13313, 0.36687, 0, 0, 1.0],
-    "8657": [0.19444, 0.69444, 0, 0, 0.61111],
-    "8658": [-0.13313, 0.36687, 0, 0, 1.0],
-    "8659": [0.19444, 0.69444, 0, 0, 0.61111],
-    "8660": [-0.13313, 0.36687, 0, 0, 1.0],
-    "8661": [0.25, 0.75, 0, 0, 0.61111],
-    "8704": [0, 0.69444, 0, 0, 0.55556],
-    "8706": [0, 0.69444, 0.05556, 0.08334, 0.5309],
-    "8707": [0, 0.69444, 0, 0, 0.55556],
-    "8709": [0.05556, 0.75, 0, 0, 0.5],
-    "8711": [0, 0.68333, 0, 0, 0.83334],
-    "8712": [0.0391, 0.5391, 0, 0, 0.66667],
-    "8715": [0.0391, 0.5391, 0, 0, 0.66667],
-    "8722": [0.08333, 0.58333, 0, 0, 0.77778],
-    "8723": [0.08333, 0.58333, 0, 0, 0.77778],
-    "8725": [0.25, 0.75, 0, 0, 0.5],
-    "8726": [0.25, 0.75, 0, 0, 0.5],
-    "8727": [-0.03472, 0.46528, 0, 0, 0.5],
-    "8728": [-0.05555, 0.44445, 0, 0, 0.5],
-    "8729": [-0.05555, 0.44445, 0, 0, 0.5],
-    "8730": [0.2, 0.8, 0, 0, 0.83334],
-    "8733": [0, 0.43056, 0, 0, 0.77778],
-    "8734": [0, 0.43056, 0, 0, 1.0],
-    "8736": [0, 0.69224, 0, 0, 0.72222],
-    "8739": [0.25, 0.75, 0, 0, 0.27778],
-    "8741": [0.25, 0.75, 0, 0, 0.5],
-    "8743": [0, 0.55556, 0, 0, 0.66667],
-    "8744": [0, 0.55556, 0, 0, 0.66667],
-    "8745": [0, 0.55556, 0, 0, 0.66667],
-    "8746": [0, 0.55556, 0, 0, 0.66667],
-    "8747": [0.19444, 0.69444, 0.11111, 0, 0.41667],
-    "8764": [-0.13313, 0.36687, 0, 0, 0.77778],
-    "8768": [0.19444, 0.69444, 0, 0, 0.27778],
-    "8771": [-0.03625, 0.46375, 0, 0, 0.77778],
-    "8773": [-0.022, 0.589, 0, 0, 1.0],
-    "8776": [-0.01688, 0.48312, 0, 0, 0.77778],
-    "8781": [-0.03625, 0.46375, 0, 0, 0.77778],
-    "8784": [-0.133, 0.67, 0, 0, 0.778],
-    "8801": [-0.03625, 0.46375, 0, 0, 0.77778],
-    "8804": [0.13597, 0.63597, 0, 0, 0.77778],
-    "8805": [0.13597, 0.63597, 0, 0, 0.77778],
-    "8810": [0.0391, 0.5391, 0, 0, 1.0],
-    "8811": [0.0391, 0.5391, 0, 0, 1.0],
-    "8826": [0.0391, 0.5391, 0, 0, 0.77778],
-    "8827": [0.0391, 0.5391, 0, 0, 0.77778],
-    "8834": [0.0391, 0.5391, 0, 0, 0.77778],
-    "8835": [0.0391, 0.5391, 0, 0, 0.77778],
-    "8838": [0.13597, 0.63597, 0, 0, 0.77778],
-    "8839": [0.13597, 0.63597, 0, 0, 0.77778],
-    "8846": [0, 0.55556, 0, 0, 0.66667],
-    "8849": [0.13597, 0.63597, 0, 0, 0.77778],
-    "8850": [0.13597, 0.63597, 0, 0, 0.77778],
-    "8851": [0, 0.55556, 0, 0, 0.66667],
-    "8852": [0, 0.55556, 0, 0, 0.66667],
-    "8853": [0.08333, 0.58333, 0, 0, 0.77778],
-    "8854": [0.08333, 0.58333, 0, 0, 0.77778],
-    "8855": [0.08333, 0.58333, 0, 0, 0.77778],
-    "8856": [0.08333, 0.58333, 0, 0, 0.77778],
-    "8857": [0.08333, 0.58333, 0, 0, 0.77778],
-    "8866": [0, 0.69444, 0, 0, 0.61111],
-    "8867": [0, 0.69444, 0, 0, 0.61111],
-    "8868": [0, 0.69444, 0, 0, 0.77778],
-    "8869": [0, 0.69444, 0, 0, 0.77778],
-    "8872": [0.249, 0.75, 0, 0, 0.867],
-    "8900": [-0.05555, 0.44445, 0, 0, 0.5],
-    "8901": [-0.05555, 0.44445, 0, 0, 0.27778],
-    "8902": [-0.03472, 0.46528, 0, 0, 0.5],
-    "8904": [0.005, 0.505, 0, 0, 0.9],
-    "8942": [0.03, 0.9, 0, 0, 0.278],
-    "8943": [-0.19, 0.31, 0, 0, 1.172],
-    "8945": [-0.1, 0.82, 0, 0, 1.282],
-    "8968": [0.25, 0.75, 0, 0, 0.44445],
-    "8969": [0.25, 0.75, 0, 0, 0.44445],
-    "8970": [0.25, 0.75, 0, 0, 0.44445],
-    "8971": [0.25, 0.75, 0, 0, 0.44445],
-    "8994": [-0.14236, 0.35764, 0, 0, 1.0],
-    "8995": [-0.14236, 0.35764, 0, 0, 1.0],
-    "9136": [0.244, 0.744, 0, 0, 0.412],
-    "9137": [0.244, 0.744, 0, 0, 0.412],
-    "9651": [0.19444, 0.69444, 0, 0, 0.88889],
-    "9657": [-0.03472, 0.46528, 0, 0, 0.5],
-    "9661": [0.19444, 0.69444, 0, 0, 0.88889],
-    "9667": [-0.03472, 0.46528, 0, 0, 0.5],
-    "9711": [0.19444, 0.69444, 0, 0, 1.0],
-    "9824": [0.12963, 0.69444, 0, 0, 0.77778],
-    "9825": [0.12963, 0.69444, 0, 0, 0.77778],
-    "9826": [0.12963, 0.69444, 0, 0, 0.77778],
-    "9827": [0.12963, 0.69444, 0, 0, 0.77778],
-    "9837": [0, 0.75, 0, 0, 0.38889],
-    "9838": [0.19444, 0.69444, 0, 0, 0.38889],
-    "9839": [0.19444, 0.69444, 0, 0, 0.38889],
-    "10216": [0.25, 0.75, 0, 0, 0.38889],
-    "10217": [0.25, 0.75, 0, 0, 0.38889],
-    "10222": [0.244, 0.744, 0, 0, 0.412],
-    "10223": [0.244, 0.744, 0, 0, 0.412],
-    "10229": [0.011, 0.511, 0, 0, 1.609],
-    "10230": [0.011, 0.511, 0, 0, 1.638],
-    "10231": [0.011, 0.511, 0, 0, 1.859],
-    "10232": [0.024, 0.525, 0, 0, 1.609],
-    "10233": [0.024, 0.525, 0, 0, 1.638],
-    "10234": [0.024, 0.525, 0, 0, 1.858],
-    "10236": [0.011, 0.511, 0, 0, 1.638],
-    "10815": [0, 0.68333, 0, 0, 0.75],
-    "10927": [0.13597, 0.63597, 0, 0, 0.77778],
-    "10928": [0.13597, 0.63597, 0, 0, 0.77778],
-    "57376": [0.19444, 0.69444, 0, 0, 0]
-  },
-  "Math-BoldItalic": {
-    "65": [0, 0.68611, 0, 0, 0.86944],
-    "66": [0, 0.68611, 0.04835, 0, 0.8664],
-    "67": [0, 0.68611, 0.06979, 0, 0.81694],
-    "68": [0, 0.68611, 0.03194, 0, 0.93812],
-    "69": [0, 0.68611, 0.05451, 0, 0.81007],
-    "70": [0, 0.68611, 0.15972, 0, 0.68889],
-    "71": [0, 0.68611, 0, 0, 0.88673],
-    "72": [0, 0.68611, 0.08229, 0, 0.98229],
-    "73": [0, 0.68611, 0.07778, 0, 0.51111],
-    "74": [0, 0.68611, 0.10069, 0, 0.63125],
-    "75": [0, 0.68611, 0.06979, 0, 0.97118],
-    "76": [0, 0.68611, 0, 0, 0.75555],
-    "77": [0, 0.68611, 0.11424, 0, 1.14201],
-    "78": [0, 0.68611, 0.11424, 0, 0.95034],
-    "79": [0, 0.68611, 0.03194, 0, 0.83666],
-    "80": [0, 0.68611, 0.15972, 0, 0.72309],
-    "81": [0.19444, 0.68611, 0, 0, 0.86861],
-    "82": [0, 0.68611, 0.00421, 0, 0.87235],
-    "83": [0, 0.68611, 0.05382, 0, 0.69271],
-    "84": [0, 0.68611, 0.15972, 0, 0.63663],
-    "85": [0, 0.68611, 0.11424, 0, 0.80027],
-    "86": [0, 0.68611, 0.25555, 0, 0.67778],
-    "87": [0, 0.68611, 0.15972, 0, 1.09305],
-    "88": [0, 0.68611, 0.07778, 0, 0.94722],
-    "89": [0, 0.68611, 0.25555, 0, 0.67458],
-    "90": [0, 0.68611, 0.06979, 0, 0.77257],
-    "97": [0, 0.44444, 0, 0, 0.63287],
-    "98": [0, 0.69444, 0, 0, 0.52083],
-    "99": [0, 0.44444, 0, 0, 0.51342],
-    "100": [0, 0.69444, 0, 0, 0.60972],
-    "101": [0, 0.44444, 0, 0, 0.55361],
-    "102": [0.19444, 0.69444, 0.11042, 0, 0.56806],
-    "103": [0.19444, 0.44444, 0.03704, 0, 0.5449],
-    "104": [0, 0.69444, 0, 0, 0.66759],
-    "105": [0, 0.69326, 0, 0, 0.4048],
-    "106": [0.19444, 0.69326, 0.0622, 0, 0.47083],
-    "107": [0, 0.69444, 0.01852, 0, 0.6037],
-    "108": [0, 0.69444, 0.0088, 0, 0.34815],
-    "109": [0, 0.44444, 0, 0, 1.0324],
-    "110": [0, 0.44444, 0, 0, 0.71296],
-    "111": [0, 0.44444, 0, 0, 0.58472],
-    "112": [0.19444, 0.44444, 0, 0, 0.60092],
-    "113": [0.19444, 0.44444, 0.03704, 0, 0.54213],
-    "114": [0, 0.44444, 0.03194, 0, 0.5287],
-    "115": [0, 0.44444, 0, 0, 0.53125],
-    "116": [0, 0.63492, 0, 0, 0.41528],
-    "117": [0, 0.44444, 0, 0, 0.68102],
-    "118": [0, 0.44444, 0.03704, 0, 0.56666],
-    "119": [0, 0.44444, 0.02778, 0, 0.83148],
-    "120": [0, 0.44444, 0, 0, 0.65903],
-    "121": [0.19444, 0.44444, 0.03704, 0, 0.59028],
-    "122": [0, 0.44444, 0.04213, 0, 0.55509],
-    "915": [0, 0.68611, 0.15972, 0, 0.65694],
-    "916": [0, 0.68611, 0, 0, 0.95833],
-    "920": [0, 0.68611, 0.03194, 0, 0.86722],
-    "923": [0, 0.68611, 0, 0, 0.80555],
-    "926": [0, 0.68611, 0.07458, 0, 0.84125],
-    "928": [0, 0.68611, 0.08229, 0, 0.98229],
-    "931": [0, 0.68611, 0.05451, 0, 0.88507],
-    "933": [0, 0.68611, 0.15972, 0, 0.67083],
-    "934": [0, 0.68611, 0, 0, 0.76666],
-    "936": [0, 0.68611, 0.11653, 0, 0.71402],
-    "937": [0, 0.68611, 0.04835, 0, 0.8789],
-    "945": [0, 0.44444, 0, 0, 0.76064],
-    "946": [0.19444, 0.69444, 0.03403, 0, 0.65972],
-    "947": [0.19444, 0.44444, 0.06389, 0, 0.59003],
-    "948": [0, 0.69444, 0.03819, 0, 0.52222],
-    "949": [0, 0.44444, 0, 0, 0.52882],
-    "950": [0.19444, 0.69444, 0.06215, 0, 0.50833],
-    "951": [0.19444, 0.44444, 0.03704, 0, 0.6],
-    "952": [0, 0.69444, 0.03194, 0, 0.5618],
-    "953": [0, 0.44444, 0, 0, 0.41204],
-    "954": [0, 0.44444, 0, 0, 0.66759],
-    "955": [0, 0.69444, 0, 0, 0.67083],
-    "956": [0.19444, 0.44444, 0, 0, 0.70787],
-    "957": [0, 0.44444, 0.06898, 0, 0.57685],
-    "958": [0.19444, 0.69444, 0.03021, 0, 0.50833],
-    "959": [0, 0.44444, 0, 0, 0.58472],
-    "960": [0, 0.44444, 0.03704, 0, 0.68241],
-    "961": [0.19444, 0.44444, 0, 0, 0.6118],
-    "962": [0.09722, 0.44444, 0.07917, 0, 0.42361],
-    "963": [0, 0.44444, 0.03704, 0, 0.68588],
-    "964": [0, 0.44444, 0.13472, 0, 0.52083],
-    "965": [0, 0.44444, 0.03704, 0, 0.63055],
-    "966": [0.19444, 0.44444, 0, 0, 0.74722],
-    "967": [0.19444, 0.44444, 0, 0, 0.71805],
-    "968": [0.19444, 0.69444, 0.03704, 0, 0.75833],
-    "969": [0, 0.44444, 0.03704, 0, 0.71782],
-    "977": [0, 0.69444, 0, 0, 0.69155],
-    "981": [0.19444, 0.69444, 0, 0, 0.7125],
-    "982": [0, 0.44444, 0.03194, 0, 0.975],
-    "1009": [0.19444, 0.44444, 0, 0, 0.6118],
-    "1013": [0, 0.44444, 0, 0, 0.48333]
-  },
-  "Math-Italic": {
-    "65": [0, 0.68333, 0, 0.13889, 0.75],
-    "66": [0, 0.68333, 0.05017, 0.08334, 0.75851],
-    "67": [0, 0.68333, 0.07153, 0.08334, 0.71472],
-    "68": [0, 0.68333, 0.02778, 0.05556, 0.82792],
-    "69": [0, 0.68333, 0.05764, 0.08334, 0.7382],
-    "70": [0, 0.68333, 0.13889, 0.08334, 0.64306],
-    "71": [0, 0.68333, 0, 0.08334, 0.78625],
-    "72": [0, 0.68333, 0.08125, 0.05556, 0.83125],
-    "73": [0, 0.68333, 0.07847, 0.11111, 0.43958],
-    "74": [0, 0.68333, 0.09618, 0.16667, 0.55451],
-    "75": [0, 0.68333, 0.07153, 0.05556, 0.84931],
-    "76": [0, 0.68333, 0, 0.02778, 0.68056],
-    "77": [0, 0.68333, 0.10903, 0.08334, 0.97014],
-    "78": [0, 0.68333, 0.10903, 0.08334, 0.80347],
-    "79": [0, 0.68333, 0.02778, 0.08334, 0.76278],
-    "80": [0, 0.68333, 0.13889, 0.08334, 0.64201],
-    "81": [0.19444, 0.68333, 0, 0.08334, 0.79056],
-    "82": [0, 0.68333, 0.00773, 0.08334, 0.75929],
-    "83": [0, 0.68333, 0.05764, 0.08334, 0.6132],
-    "84": [0, 0.68333, 0.13889, 0.08334, 0.58438],
-    "85": [0, 0.68333, 0.10903, 0.02778, 0.68278],
-    "86": [0, 0.68333, 0.22222, 0, 0.58333],
-    "87": [0, 0.68333, 0.13889, 0, 0.94445],
-    "88": [0, 0.68333, 0.07847, 0.08334, 0.82847],
-    "89": [0, 0.68333, 0.22222, 0, 0.58056],
-    "90": [0, 0.68333, 0.07153, 0.08334, 0.68264],
-    "97": [0, 0.43056, 0, 0, 0.52859],
-    "98": [0, 0.69444, 0, 0, 0.42917],
-    "99": [0, 0.43056, 0, 0.05556, 0.43276],
-    "100": [0, 0.69444, 0, 0.16667, 0.52049],
-    "101": [0, 0.43056, 0, 0.05556, 0.46563],
-    "102": [0.19444, 0.69444, 0.10764, 0.16667, 0.48959],
-    "103": [0.19444, 0.43056, 0.03588, 0.02778, 0.47697],
-    "104": [0, 0.69444, 0, 0, 0.57616],
-    "105": [0, 0.65952, 0, 0, 0.34451],
-    "106": [0.19444, 0.65952, 0.05724, 0, 0.41181],
-    "107": [0, 0.69444, 0.03148, 0, 0.5206],
-    "108": [0, 0.69444, 0.01968, 0.08334, 0.29838],
-    "109": [0, 0.43056, 0, 0, 0.87801],
-    "110": [0, 0.43056, 0, 0, 0.60023],
-    "111": [0, 0.43056, 0, 0.05556, 0.48472],
-    "112": [0.19444, 0.43056, 0, 0.08334, 0.50313],
-    "113": [0.19444, 0.43056, 0.03588, 0.08334, 0.44641],
-    "114": [0, 0.43056, 0.02778, 0.05556, 0.45116],
-    "115": [0, 0.43056, 0, 0.05556, 0.46875],
-    "116": [0, 0.61508, 0, 0.08334, 0.36111],
-    "117": [0, 0.43056, 0, 0.02778, 0.57246],
-    "118": [0, 0.43056, 0.03588, 0.02778, 0.48472],
-    "119": [0, 0.43056, 0.02691, 0.08334, 0.71592],
-    "120": [0, 0.43056, 0, 0.02778, 0.57153],
-    "121": [0.19444, 0.43056, 0.03588, 0.05556, 0.49028],
-    "122": [0, 0.43056, 0.04398, 0.05556, 0.46505],
-    "915": [0, 0.68333, 0.13889, 0.08334, 0.61528],
-    "916": [0, 0.68333, 0, 0.16667, 0.83334],
-    "920": [0, 0.68333, 0.02778, 0.08334, 0.76278],
-    "923": [0, 0.68333, 0, 0.16667, 0.69445],
-    "926": [0, 0.68333, 0.07569, 0.08334, 0.74236],
-    "928": [0, 0.68333, 0.08125, 0.05556, 0.83125],
-    "931": [0, 0.68333, 0.05764, 0.08334, 0.77986],
-    "933": [0, 0.68333, 0.13889, 0.05556, 0.58333],
-    "934": [0, 0.68333, 0, 0.08334, 0.66667],
-    "936": [0, 0.68333, 0.11, 0.05556, 0.61222],
-    "937": [0, 0.68333, 0.05017, 0.08334, 0.7724],
-    "945": [0, 0.43056, 0.0037, 0.02778, 0.6397],
-    "946": [0.19444, 0.69444, 0.05278, 0.08334, 0.56563],
-    "947": [0.19444, 0.43056, 0.05556, 0, 0.51773],
-    "948": [0, 0.69444, 0.03785, 0.05556, 0.44444],
-    "949": [0, 0.43056, 0, 0.08334, 0.46632],
-    "950": [0.19444, 0.69444, 0.07378, 0.08334, 0.4375],
-    "951": [0.19444, 0.43056, 0.03588, 0.05556, 0.49653],
-    "952": [0, 0.69444, 0.02778, 0.08334, 0.46944],
-    "953": [0, 0.43056, 0, 0.05556, 0.35394],
-    "954": [0, 0.43056, 0, 0, 0.57616],
-    "955": [0, 0.69444, 0, 0, 0.58334],
-    "956": [0.19444, 0.43056, 0, 0.02778, 0.60255],
-    "957": [0, 0.43056, 0.06366, 0.02778, 0.49398],
-    "958": [0.19444, 0.69444, 0.04601, 0.11111, 0.4375],
-    "959": [0, 0.43056, 0, 0.05556, 0.48472],
-    "960": [0, 0.43056, 0.03588, 0, 0.57003],
-    "961": [0.19444, 0.43056, 0, 0.08334, 0.51702],
-    "962": [0.09722, 0.43056, 0.07986, 0.08334, 0.36285],
-    "963": [0, 0.43056, 0.03588, 0, 0.57141],
-    "964": [0, 0.43056, 0.1132, 0.02778, 0.43715],
-    "965": [0, 0.43056, 0.03588, 0.02778, 0.54028],
-    "966": [0.19444, 0.43056, 0, 0.08334, 0.65417],
-    "967": [0.19444, 0.43056, 0, 0.05556, 0.62569],
-    "968": [0.19444, 0.69444, 0.03588, 0.11111, 0.65139],
-    "969": [0, 0.43056, 0.03588, 0, 0.62245],
-    "977": [0, 0.69444, 0, 0.08334, 0.59144],
-    "981": [0.19444, 0.69444, 0, 0.08334, 0.59583],
-    "982": [0, 0.43056, 0.02778, 0, 0.82813],
-    "1009": [0.19444, 0.43056, 0, 0.08334, 0.51702],
-    "1013": [0, 0.43056, 0, 0.05556, 0.4059]
-  },
-  "Math-Regular": {
-    "65": [0, 0.68333, 0, 0.13889, 0.75],
-    "66": [0, 0.68333, 0.05017, 0.08334, 0.75851],
-    "67": [0, 0.68333, 0.07153, 0.08334, 0.71472],
-    "68": [0, 0.68333, 0.02778, 0.05556, 0.82792],
-    "69": [0, 0.68333, 0.05764, 0.08334, 0.7382],
-    "70": [0, 0.68333, 0.13889, 0.08334, 0.64306],
-    "71": [0, 0.68333, 0, 0.08334, 0.78625],
-    "72": [0, 0.68333, 0.08125, 0.05556, 0.83125],
-    "73": [0, 0.68333, 0.07847, 0.11111, 0.43958],
-    "74": [0, 0.68333, 0.09618, 0.16667, 0.55451],
-    "75": [0, 0.68333, 0.07153, 0.05556, 0.84931],
-    "76": [0, 0.68333, 0, 0.02778, 0.68056],
-    "77": [0, 0.68333, 0.10903, 0.08334, 0.97014],
-    "78": [0, 0.68333, 0.10903, 0.08334, 0.80347],
-    "79": [0, 0.68333, 0.02778, 0.08334, 0.76278],
-    "80": [0, 0.68333, 0.13889, 0.08334, 0.64201],
-    "81": [0.19444, 0.68333, 0, 0.08334, 0.79056],
-    "82": [0, 0.68333, 0.00773, 0.08334, 0.75929],
-    "83": [0, 0.68333, 0.05764, 0.08334, 0.6132],
-    "84": [0, 0.68333, 0.13889, 0.08334, 0.58438],
-    "85": [0, 0.68333, 0.10903, 0.02778, 0.68278],
-    "86": [0, 0.68333, 0.22222, 0, 0.58333],
-    "87": [0, 0.68333, 0.13889, 0, 0.94445],
-    "88": [0, 0.68333, 0.07847, 0.08334, 0.82847],
-    "89": [0, 0.68333, 0.22222, 0, 0.58056],
-    "90": [0, 0.68333, 0.07153, 0.08334, 0.68264],
-    "97": [0, 0.43056, 0, 0, 0.52859],
-    "98": [0, 0.69444, 0, 0, 0.42917],
-    "99": [0, 0.43056, 0, 0.05556, 0.43276],
-    "100": [0, 0.69444, 0, 0.16667, 0.52049],
-    "101": [0, 0.43056, 0, 0.05556, 0.46563],
-    "102": [0.19444, 0.69444, 0.10764, 0.16667, 0.48959],
-    "103": [0.19444, 0.43056, 0.03588, 0.02778, 0.47697],
-    "104": [0, 0.69444, 0, 0, 0.57616],
-    "105": [0, 0.65952, 0, 0, 0.34451],
-    "106": [0.19444, 0.65952, 0.05724, 0, 0.41181],
-    "107": [0, 0.69444, 0.03148, 0, 0.5206],
-    "108": [0, 0.69444, 0.01968, 0.08334, 0.29838],
-    "109": [0, 0.43056, 0, 0, 0.87801],
-    "110": [0, 0.43056, 0, 0, 0.60023],
-    "111": [0, 0.43056, 0, 0.05556, 0.48472],
-    "112": [0.19444, 0.43056, 0, 0.08334, 0.50313],
-    "113": [0.19444, 0.43056, 0.03588, 0.08334, 0.44641],
-    "114": [0, 0.43056, 0.02778, 0.05556, 0.45116],
-    "115": [0, 0.43056, 0, 0.05556, 0.46875],
-    "116": [0, 0.61508, 0, 0.08334, 0.36111],
-    "117": [0, 0.43056, 0, 0.02778, 0.57246],
-    "118": [0, 0.43056, 0.03588, 0.02778, 0.48472],
-    "119": [0, 0.43056, 0.02691, 0.08334, 0.71592],
-    "120": [0, 0.43056, 0, 0.02778, 0.57153],
-    "121": [0.19444, 0.43056, 0.03588, 0.05556, 0.49028],
-    "122": [0, 0.43056, 0.04398, 0.05556, 0.46505],
-    "915": [0, 0.68333, 0.13889, 0.08334, 0.61528],
-    "916": [0, 0.68333, 0, 0.16667, 0.83334],
-    "920": [0, 0.68333, 0.02778, 0.08334, 0.76278],
-    "923": [0, 0.68333, 0, 0.16667, 0.69445],
-    "926": [0, 0.68333, 0.07569, 0.08334, 0.74236],
-    "928": [0, 0.68333, 0.08125, 0.05556, 0.83125],
-    "931": [0, 0.68333, 0.05764, 0.08334, 0.77986],
-    "933": [0, 0.68333, 0.13889, 0.05556, 0.58333],
-    "934": [0, 0.68333, 0, 0.08334, 0.66667],
-    "936": [0, 0.68333, 0.11, 0.05556, 0.61222],
-    "937": [0, 0.68333, 0.05017, 0.08334, 0.7724],
-    "945": [0, 0.43056, 0.0037, 0.02778, 0.6397],
-    "946": [0.19444, 0.69444, 0.05278, 0.08334, 0.56563],
-    "947": [0.19444, 0.43056, 0.05556, 0, 0.51773],
-    "948": [0, 0.69444, 0.03785, 0.05556, 0.44444],
-    "949": [0, 0.43056, 0, 0.08334, 0.46632],
-    "950": [0.19444, 0.69444, 0.07378, 0.08334, 0.4375],
-    "951": [0.19444, 0.43056, 0.03588, 0.05556, 0.49653],
-    "952": [0, 0.69444, 0.02778, 0.08334, 0.46944],
-    "953": [0, 0.43056, 0, 0.05556, 0.35394],
-    "954": [0, 0.43056, 0, 0, 0.57616],
-    "955": [0, 0.69444, 0, 0, 0.58334],
-    "956": [0.19444, 0.43056, 0, 0.02778, 0.60255],
-    "957": [0, 0.43056, 0.06366, 0.02778, 0.49398],
-    "958": [0.19444, 0.69444, 0.04601, 0.11111, 0.4375],
-    "959": [0, 0.43056, 0, 0.05556, 0.48472],
-    "960": [0, 0.43056, 0.03588, 0, 0.57003],
-    "961": [0.19444, 0.43056, 0, 0.08334, 0.51702],
-    "962": [0.09722, 0.43056, 0.07986, 0.08334, 0.36285],
-    "963": [0, 0.43056, 0.03588, 0, 0.57141],
-    "964": [0, 0.43056, 0.1132, 0.02778, 0.43715],
-    "965": [0, 0.43056, 0.03588, 0.02778, 0.54028],
-    "966": [0.19444, 0.43056, 0, 0.08334, 0.65417],
-    "967": [0.19444, 0.43056, 0, 0.05556, 0.62569],
-    "968": [0.19444, 0.69444, 0.03588, 0.11111, 0.65139],
-    "969": [0, 0.43056, 0.03588, 0, 0.62245],
-    "977": [0, 0.69444, 0, 0.08334, 0.59144],
-    "981": [0.19444, 0.69444, 0, 0.08334, 0.59583],
-    "982": [0, 0.43056, 0.02778, 0, 0.82813],
-    "1009": [0.19444, 0.43056, 0, 0.08334, 0.51702],
-    "1013": [0, 0.43056, 0, 0.05556, 0.4059]
-  },
-  "SansSerif-Bold": {
-    "33": [0, 0.69444, 0, 0, 0.36667],
-    "34": [0, 0.69444, 0, 0, 0.55834],
-    "35": [0.19444, 0.69444, 0, 0, 0.91667],
-    "36": [0.05556, 0.75, 0, 0, 0.55],
-    "37": [0.05556, 0.75, 0, 0, 1.02912],
-    "38": [0, 0.69444, 0, 0, 0.83056],
-    "39": [0, 0.69444, 0, 0, 0.30556],
-    "40": [0.25, 0.75, 0, 0, 0.42778],
-    "41": [0.25, 0.75, 0, 0, 0.42778],
-    "42": [0, 0.75, 0, 0, 0.55],
-    "43": [0.11667, 0.61667, 0, 0, 0.85556],
-    "44": [0.10556, 0.13056, 0, 0, 0.30556],
-    "45": [0, 0.45833, 0, 0, 0.36667],
-    "46": [0, 0.13056, 0, 0, 0.30556],
-    "47": [0.25, 0.75, 0, 0, 0.55],
-    "48": [0, 0.69444, 0, 0, 0.55],
-    "49": [0, 0.69444, 0, 0, 0.55],
-    "50": [0, 0.69444, 0, 0, 0.55],
-    "51": [0, 0.69444, 0, 0, 0.55],
-    "52": [0, 0.69444, 0, 0, 0.55],
-    "53": [0, 0.69444, 0, 0, 0.55],
-    "54": [0, 0.69444, 0, 0, 0.55],
-    "55": [0, 0.69444, 0, 0, 0.55],
-    "56": [0, 0.69444, 0, 0, 0.55],
-    "57": [0, 0.69444, 0, 0, 0.55],
-    "58": [0, 0.45833, 0, 0, 0.30556],
-    "59": [0.10556, 0.45833, 0, 0, 0.30556],
-    "61": [-0.09375, 0.40625, 0, 0, 0.85556],
-    "63": [0, 0.69444, 0, 0, 0.51945],
-    "64": [0, 0.69444, 0, 0, 0.73334],
-    "65": [0, 0.69444, 0, 0, 0.73334],
-    "66": [0, 0.69444, 0, 0, 0.73334],
-    "67": [0, 0.69444, 0, 0, 0.70278],
-    "68": [0, 0.69444, 0, 0, 0.79445],
-    "69": [0, 0.69444, 0, 0, 0.64167],
-    "70": [0, 0.69444, 0, 0, 0.61111],
-    "71": [0, 0.69444, 0, 0, 0.73334],
-    "72": [0, 0.69444, 0, 0, 0.79445],
-    "73": [0, 0.69444, 0, 0, 0.33056],
-    "74": [0, 0.69444, 0, 0, 0.51945],
-    "75": [0, 0.69444, 0, 0, 0.76389],
-    "76": [0, 0.69444, 0, 0, 0.58056],
-    "77": [0, 0.69444, 0, 0, 0.97778],
-    "78": [0, 0.69444, 0, 0, 0.79445],
-    "79": [0, 0.69444, 0, 0, 0.79445],
-    "80": [0, 0.69444, 0, 0, 0.70278],
-    "81": [0.10556, 0.69444, 0, 0, 0.79445],
-    "82": [0, 0.69444, 0, 0, 0.70278],
-    "83": [0, 0.69444, 0, 0, 0.61111],
-    "84": [0, 0.69444, 0, 0, 0.73334],
-    "85": [0, 0.69444, 0, 0, 0.76389],
-    "86": [0, 0.69444, 0.01528, 0, 0.73334],
-    "87": [0, 0.69444, 0.01528, 0, 1.03889],
-    "88": [0, 0.69444, 0, 0, 0.73334],
-    "89": [0, 0.69444, 0.0275, 0, 0.73334],
-    "90": [0, 0.69444, 0, 0, 0.67223],
-    "91": [0.25, 0.75, 0, 0, 0.34306],
-    "93": [0.25, 0.75, 0, 0, 0.34306],
-    "94": [0, 0.69444, 0, 0, 0.55],
-    "95": [0.35, 0.10833, 0.03056, 0, 0.55],
-    "97": [0, 0.45833, 0, 0, 0.525],
-    "98": [0, 0.69444, 0, 0, 0.56111],
-    "99": [0, 0.45833, 0, 0, 0.48889],
-    "100": [0, 0.69444, 0, 0, 0.56111],
-    "101": [0, 0.45833, 0, 0, 0.51111],
-    "102": [0, 0.69444, 0.07639, 0, 0.33611],
-    "103": [0.19444, 0.45833, 0.01528, 0, 0.55],
-    "104": [0, 0.69444, 0, 0, 0.56111],
-    "105": [0, 0.69444, 0, 0, 0.25556],
-    "106": [0.19444, 0.69444, 0, 0, 0.28611],
-    "107": [0, 0.69444, 0, 0, 0.53056],
-    "108": [0, 0.69444, 0, 0, 0.25556],
-    "109": [0, 0.45833, 0, 0, 0.86667],
-    "110": [0, 0.45833, 0, 0, 0.56111],
-    "111": [0, 0.45833, 0, 0, 0.55],
-    "112": [0.19444, 0.45833, 0, 0, 0.56111],
-    "113": [0.19444, 0.45833, 0, 0, 0.56111],
-    "114": [0, 0.45833, 0.01528, 0, 0.37222],
-    "115": [0, 0.45833, 0, 0, 0.42167],
-    "116": [0, 0.58929, 0, 0, 0.40417],
-    "117": [0, 0.45833, 0, 0, 0.56111],
-    "118": [0, 0.45833, 0.01528, 0, 0.5],
-    "119": [0, 0.45833, 0.01528, 0, 0.74445],
-    "120": [0, 0.45833, 0, 0, 0.5],
-    "121": [0.19444, 0.45833, 0.01528, 0, 0.5],
-    "122": [0, 0.45833, 0, 0, 0.47639],
-    "126": [0.35, 0.34444, 0, 0, 0.55],
-    "168": [0, 0.69444, 0, 0, 0.55],
-    "176": [0, 0.69444, 0, 0, 0.73334],
-    "180": [0, 0.69444, 0, 0, 0.55],
-    "184": [0.17014, 0, 0, 0, 0.48889],
-    "305": [0, 0.45833, 0, 0, 0.25556],
-    "567": [0.19444, 0.45833, 0, 0, 0.28611],
-    "710": [0, 0.69444, 0, 0, 0.55],
-    "711": [0, 0.63542, 0, 0, 0.55],
-    "713": [0, 0.63778, 0, 0, 0.55],
-    "728": [0, 0.69444, 0, 0, 0.55],
-    "729": [0, 0.69444, 0, 0, 0.30556],
-    "730": [0, 0.69444, 0, 0, 0.73334],
-    "732": [0, 0.69444, 0, 0, 0.55],
-    "733": [0, 0.69444, 0, 0, 0.55],
-    "915": [0, 0.69444, 0, 0, 0.58056],
-    "916": [0, 0.69444, 0, 0, 0.91667],
-    "920": [0, 0.69444, 0, 0, 0.85556],
-    "923": [0, 0.69444, 0, 0, 0.67223],
-    "926": [0, 0.69444, 0, 0, 0.73334],
-    "928": [0, 0.69444, 0, 0, 0.79445],
-    "931": [0, 0.69444, 0, 0, 0.79445],
-    "933": [0, 0.69444, 0, 0, 0.85556],
-    "934": [0, 0.69444, 0, 0, 0.79445],
-    "936": [0, 0.69444, 0, 0, 0.85556],
-    "937": [0, 0.69444, 0, 0, 0.79445],
-    "8211": [0, 0.45833, 0.03056, 0, 0.55],
-    "8212": [0, 0.45833, 0.03056, 0, 1.10001],
-    "8216": [0, 0.69444, 0, 0, 0.30556],
-    "8217": [0, 0.69444, 0, 0, 0.30556],
-    "8220": [0, 0.69444, 0, 0, 0.55834],
-    "8221": [0, 0.69444, 0, 0, 0.55834]
-  },
-  "SansSerif-Italic": {
-    "33": [0, 0.69444, 0.05733, 0, 0.31945],
-    "34": [0, 0.69444, 0.00316, 0, 0.5],
-    "35": [0.19444, 0.69444, 0.05087, 0, 0.83334],
-    "36": [0.05556, 0.75, 0.11156, 0, 0.5],
-    "37": [0.05556, 0.75, 0.03126, 0, 0.83334],
-    "38": [0, 0.69444, 0.03058, 0, 0.75834],
-    "39": [0, 0.69444, 0.07816, 0, 0.27778],
-    "40": [0.25, 0.75, 0.13164, 0, 0.38889],
-    "41": [0.25, 0.75, 0.02536, 0, 0.38889],
-    "42": [0, 0.75, 0.11775, 0, 0.5],
-    "43": [0.08333, 0.58333, 0.02536, 0, 0.77778],
-    "44": [0.125, 0.08333, 0, 0, 0.27778],
-    "45": [0, 0.44444, 0.01946, 0, 0.33333],
-    "46": [0, 0.08333, 0, 0, 0.27778],
-    "47": [0.25, 0.75, 0.13164, 0, 0.5],
-    "48": [0, 0.65556, 0.11156, 0, 0.5],
-    "49": [0, 0.65556, 0.11156, 0, 0.5],
-    "50": [0, 0.65556, 0.11156, 0, 0.5],
-    "51": [0, 0.65556, 0.11156, 0, 0.5],
-    "52": [0, 0.65556, 0.11156, 0, 0.5],
-    "53": [0, 0.65556, 0.11156, 0, 0.5],
-    "54": [0, 0.65556, 0.11156, 0, 0.5],
-    "55": [0, 0.65556, 0.11156, 0, 0.5],
-    "56": [0, 0.65556, 0.11156, 0, 0.5],
-    "57": [0, 0.65556, 0.11156, 0, 0.5],
-    "58": [0, 0.44444, 0.02502, 0, 0.27778],
-    "59": [0.125, 0.44444, 0.02502, 0, 0.27778],
-    "61": [-0.13, 0.37, 0.05087, 0, 0.77778],
-    "63": [0, 0.69444, 0.11809, 0, 0.47222],
-    "64": [0, 0.69444, 0.07555, 0, 0.66667],
-    "65": [0, 0.69444, 0, 0, 0.66667],
-    "66": [0, 0.69444, 0.08293, 0, 0.66667],
-    "67": [0, 0.69444, 0.11983, 0, 0.63889],
-    "68": [0, 0.69444, 0.07555, 0, 0.72223],
-    "69": [0, 0.69444, 0.11983, 0, 0.59722],
-    "70": [0, 0.69444, 0.13372, 0, 0.56945],
-    "71": [0, 0.69444, 0.11983, 0, 0.66667],
-    "72": [0, 0.69444, 0.08094, 0, 0.70834],
-    "73": [0, 0.69444, 0.13372, 0, 0.27778],
-    "74": [0, 0.69444, 0.08094, 0, 0.47222],
-    "75": [0, 0.69444, 0.11983, 0, 0.69445],
-    "76": [0, 0.69444, 0, 0, 0.54167],
-    "77": [0, 0.69444, 0.08094, 0, 0.875],
-    "78": [0, 0.69444, 0.08094, 0, 0.70834],
-    "79": [0, 0.69444, 0.07555, 0, 0.73611],
-    "80": [0, 0.69444, 0.08293, 0, 0.63889],
-    "81": [0.125, 0.69444, 0.07555, 0, 0.73611],
-    "82": [0, 0.69444, 0.08293, 0, 0.64584],
-    "83": [0, 0.69444, 0.09205, 0, 0.55556],
-    "84": [0, 0.69444, 0.13372, 0, 0.68056],
-    "85": [0, 0.69444, 0.08094, 0, 0.6875],
-    "86": [0, 0.69444, 0.1615, 0, 0.66667],
-    "87": [0, 0.69444, 0.1615, 0, 0.94445],
-    "88": [0, 0.69444, 0.13372, 0, 0.66667],
-    "89": [0, 0.69444, 0.17261, 0, 0.66667],
-    "90": [0, 0.69444, 0.11983, 0, 0.61111],
-    "91": [0.25, 0.75, 0.15942, 0, 0.28889],
-    "93": [0.25, 0.75, 0.08719, 0, 0.28889],
-    "94": [0, 0.69444, 0.0799, 0, 0.5],
-    "95": [0.35, 0.09444, 0.08616, 0, 0.5],
-    "97": [0, 0.44444, 0.00981, 0, 0.48056],
-    "98": [0, 0.69444, 0.03057, 0, 0.51667],
-    "99": [0, 0.44444, 0.08336, 0, 0.44445],
-    "100": [0, 0.69444, 0.09483, 0, 0.51667],
-    "101": [0, 0.44444, 0.06778, 0, 0.44445],
-    "102": [0, 0.69444, 0.21705, 0, 0.30556],
-    "103": [0.19444, 0.44444, 0.10836, 0, 0.5],
-    "104": [0, 0.69444, 0.01778, 0, 0.51667],
-    "105": [0, 0.67937, 0.09718, 0, 0.23889],
-    "106": [0.19444, 0.67937, 0.09162, 0, 0.26667],
-    "107": [0, 0.69444, 0.08336, 0, 0.48889],
-    "108": [0, 0.69444, 0.09483, 0, 0.23889],
-    "109": [0, 0.44444, 0.01778, 0, 0.79445],
-    "110": [0, 0.44444, 0.01778, 0, 0.51667],
-    "111": [0, 0.44444, 0.06613, 0, 0.5],
-    "112": [0.19444, 0.44444, 0.0389, 0, 0.51667],
-    "113": [0.19444, 0.44444, 0.04169, 0, 0.51667],
-    "114": [0, 0.44444, 0.10836, 0, 0.34167],
-    "115": [0, 0.44444, 0.0778, 0, 0.38333],
-    "116": [0, 0.57143, 0.07225, 0, 0.36111],
-    "117": [0, 0.44444, 0.04169, 0, 0.51667],
-    "118": [0, 0.44444, 0.10836, 0, 0.46111],
-    "119": [0, 0.44444, 0.10836, 0, 0.68334],
-    "120": [0, 0.44444, 0.09169, 0, 0.46111],
-    "121": [0.19444, 0.44444, 0.10836, 0, 0.46111],
-    "122": [0, 0.44444, 0.08752, 0, 0.43472],
-    "126": [0.35, 0.32659, 0.08826, 0, 0.5],
-    "168": [0, 0.67937, 0.06385, 0, 0.5],
-    "176": [0, 0.69444, 0, 0, 0.73752],
-    "184": [0.17014, 0, 0, 0, 0.44445],
-    "305": [0, 0.44444, 0.04169, 0, 0.23889],
-    "567": [0.19444, 0.44444, 0.04169, 0, 0.26667],
-    "710": [0, 0.69444, 0.0799, 0, 0.5],
-    "711": [0, 0.63194, 0.08432, 0, 0.5],
-    "713": [0, 0.60889, 0.08776, 0, 0.5],
-    "714": [0, 0.69444, 0.09205, 0, 0.5],
-    "715": [0, 0.69444, 0, 0, 0.5],
-    "728": [0, 0.69444, 0.09483, 0, 0.5],
-    "729": [0, 0.67937, 0.07774, 0, 0.27778],
-    "730": [0, 0.69444, 0, 0, 0.73752],
-    "732": [0, 0.67659, 0.08826, 0, 0.5],
-    "733": [0, 0.69444, 0.09205, 0, 0.5],
-    "915": [0, 0.69444, 0.13372, 0, 0.54167],
-    "916": [0, 0.69444, 0, 0, 0.83334],
-    "920": [0, 0.69444, 0.07555, 0, 0.77778],
-    "923": [0, 0.69444, 0, 0, 0.61111],
-    "926": [0, 0.69444, 0.12816, 0, 0.66667],
-    "928": [0, 0.69444, 0.08094, 0, 0.70834],
-    "931": [0, 0.69444, 0.11983, 0, 0.72222],
-    "933": [0, 0.69444, 0.09031, 0, 0.77778],
-    "934": [0, 0.69444, 0.04603, 0, 0.72222],
-    "936": [0, 0.69444, 0.09031, 0, 0.77778],
-    "937": [0, 0.69444, 0.08293, 0, 0.72222],
-    "8211": [0, 0.44444, 0.08616, 0, 0.5],
-    "8212": [0, 0.44444, 0.08616, 0, 1.0],
-    "8216": [0, 0.69444, 0.07816, 0, 0.27778],
-    "8217": [0, 0.69444, 0.07816, 0, 0.27778],
-    "8220": [0, 0.69444, 0.14205, 0, 0.5],
-    "8221": [0, 0.69444, 0.00316, 0, 0.5]
-  },
-  "SansSerif-Regular": {
-    "33": [0, 0.69444, 0, 0, 0.31945],
-    "34": [0, 0.69444, 0, 0, 0.5],
-    "35": [0.19444, 0.69444, 0, 0, 0.83334],
-    "36": [0.05556, 0.75, 0, 0, 0.5],
-    "37": [0.05556, 0.75, 0, 0, 0.83334],
-    "38": [0, 0.69444, 0, 0, 0.75834],
-    "39": [0, 0.69444, 0, 0, 0.27778],
-    "40": [0.25, 0.75, 0, 0, 0.38889],
-    "41": [0.25, 0.75, 0, 0, 0.38889],
-    "42": [0, 0.75, 0, 0, 0.5],
-    "43": [0.08333, 0.58333, 0, 0, 0.77778],
-    "44": [0.125, 0.08333, 0, 0, 0.27778],
-    "45": [0, 0.44444, 0, 0, 0.33333],
-    "46": [0, 0.08333, 0, 0, 0.27778],
-    "47": [0.25, 0.75, 0, 0, 0.5],
-    "48": [0, 0.65556, 0, 0, 0.5],
-    "49": [0, 0.65556, 0, 0, 0.5],
-    "50": [0, 0.65556, 0, 0, 0.5],
-    "51": [0, 0.65556, 0, 0, 0.5],
-    "52": [0, 0.65556, 0, 0, 0.5],
-    "53": [0, 0.65556, 0, 0, 0.5],
-    "54": [0, 0.65556, 0, 0, 0.5],
-    "55": [0, 0.65556, 0, 0, 0.5],
-    "56": [0, 0.65556, 0, 0, 0.5],
-    "57": [0, 0.65556, 0, 0, 0.5],
-    "58": [0, 0.44444, 0, 0, 0.27778],
-    "59": [0.125, 0.44444, 0, 0, 0.27778],
-    "61": [-0.13, 0.37, 0, 0, 0.77778],
-    "63": [0, 0.69444, 0, 0, 0.47222],
-    "64": [0, 0.69444, 0, 0, 0.66667],
-    "65": [0, 0.69444, 0, 0, 0.66667],
-    "66": [0, 0.69444, 0, 0, 0.66667],
-    "67": [0, 0.69444, 0, 0, 0.63889],
-    "68": [0, 0.69444, 0, 0, 0.72223],
-    "69": [0, 0.69444, 0, 0, 0.59722],
-    "70": [0, 0.69444, 0, 0, 0.56945],
-    "71": [0, 0.69444, 0, 0, 0.66667],
-    "72": [0, 0.69444, 0, 0, 0.70834],
-    "73": [0, 0.69444, 0, 0, 0.27778],
-    "74": [0, 0.69444, 0, 0, 0.47222],
-    "75": [0, 0.69444, 0, 0, 0.69445],
-    "76": [0, 0.69444, 0, 0, 0.54167],
-    "77": [0, 0.69444, 0, 0, 0.875],
-    "78": [0, 0.69444, 0, 0, 0.70834],
-    "79": [0, 0.69444, 0, 0, 0.73611],
-    "80": [0, 0.69444, 0, 0, 0.63889],
-    "81": [0.125, 0.69444, 0, 0, 0.73611],
-    "82": [0, 0.69444, 0, 0, 0.64584],
-    "83": [0, 0.69444, 0, 0, 0.55556],
-    "84": [0, 0.69444, 0, 0, 0.68056],
-    "85": [0, 0.69444, 0, 0, 0.6875],
-    "86": [0, 0.69444, 0.01389, 0, 0.66667],
-    "87": [0, 0.69444, 0.01389, 0, 0.94445],
-    "88": [0, 0.69444, 0, 0, 0.66667],
-    "89": [0, 0.69444, 0.025, 0, 0.66667],
-    "90": [0, 0.69444, 0, 0, 0.61111],
-    "91": [0.25, 0.75, 0, 0, 0.28889],
-    "93": [0.25, 0.75, 0, 0, 0.28889],
-    "94": [0, 0.69444, 0, 0, 0.5],
-    "95": [0.35, 0.09444, 0.02778, 0, 0.5],
-    "97": [0, 0.44444, 0, 0, 0.48056],
-    "98": [0, 0.69444, 0, 0, 0.51667],
-    "99": [0, 0.44444, 0, 0, 0.44445],
-    "100": [0, 0.69444, 0, 0, 0.51667],
-    "101": [0, 0.44444, 0, 0, 0.44445],
-    "102": [0, 0.69444, 0.06944, 0, 0.30556],
-    "103": [0.19444, 0.44444, 0.01389, 0, 0.5],
-    "104": [0, 0.69444, 0, 0, 0.51667],
-    "105": [0, 0.67937, 0, 0, 0.23889],
-    "106": [0.19444, 0.67937, 0, 0, 0.26667],
-    "107": [0, 0.69444, 0, 0, 0.48889],
-    "108": [0, 0.69444, 0, 0, 0.23889],
-    "109": [0, 0.44444, 0, 0, 0.79445],
-    "110": [0, 0.44444, 0, 0, 0.51667],
-    "111": [0, 0.44444, 0, 0, 0.5],
-    "112": [0.19444, 0.44444, 0, 0, 0.51667],
-    "113": [0.19444, 0.44444, 0, 0, 0.51667],
-    "114": [0, 0.44444, 0.01389, 0, 0.34167],
-    "115": [0, 0.44444, 0, 0, 0.38333],
-    "116": [0, 0.57143, 0, 0, 0.36111],
-    "117": [0, 0.44444, 0, 0, 0.51667],
-    "118": [0, 0.44444, 0.01389, 0, 0.46111],
-    "119": [0, 0.44444, 0.01389, 0, 0.68334],
-    "120": [0, 0.44444, 0, 0, 0.46111],
-    "121": [0.19444, 0.44444, 0.01389, 0, 0.46111],
-    "122": [0, 0.44444, 0, 0, 0.43472],
-    "126": [0.35, 0.32659, 0, 0, 0.5],
-    "168": [0, 0.67937, 0, 0, 0.5],
-    "176": [0, 0.69444, 0, 0, 0.66667],
-    "184": [0.17014, 0, 0, 0, 0.44445],
-    "305": [0, 0.44444, 0, 0, 0.23889],
-    "567": [0.19444, 0.44444, 0, 0, 0.26667],
-    "710": [0, 0.69444, 0, 0, 0.5],
-    "711": [0, 0.63194, 0, 0, 0.5],
-    "713": [0, 0.60889, 0, 0, 0.5],
-    "714": [0, 0.69444, 0, 0, 0.5],
-    "715": [0, 0.69444, 0, 0, 0.5],
-    "728": [0, 0.69444, 0, 0, 0.5],
-    "729": [0, 0.67937, 0, 0, 0.27778],
-    "730": [0, 0.69444, 0, 0, 0.66667],
-    "732": [0, 0.67659, 0, 0, 0.5],
-    "733": [0, 0.69444, 0, 0, 0.5],
-    "915": [0, 0.69444, 0, 0, 0.54167],
-    "916": [0, 0.69444, 0, 0, 0.83334],
-    "920": [0, 0.69444, 0, 0, 0.77778],
-    "923": [0, 0.69444, 0, 0, 0.61111],
-    "926": [0, 0.69444, 0, 0, 0.66667],
-    "928": [0, 0.69444, 0, 0, 0.70834],
-    "931": [0, 0.69444, 0, 0, 0.72222],
-    "933": [0, 0.69444, 0, 0, 0.77778],
-    "934": [0, 0.69444, 0, 0, 0.72222],
-    "936": [0, 0.69444, 0, 0, 0.77778],
-    "937": [0, 0.69444, 0, 0, 0.72222],
-    "8211": [0, 0.44444, 0.02778, 0, 0.5],
-    "8212": [0, 0.44444, 0.02778, 0, 1.0],
-    "8216": [0, 0.69444, 0, 0, 0.27778],
-    "8217": [0, 0.69444, 0, 0, 0.27778],
-    "8220": [0, 0.69444, 0, 0, 0.5],
-    "8221": [0, 0.69444, 0, 0, 0.5]
-  },
-  "Script-Regular": {
-    "65": [0, 0.7, 0.22925, 0, 0.80253],
-    "66": [0, 0.7, 0.04087, 0, 0.90757],
-    "67": [0, 0.7, 0.1689, 0, 0.66619],
-    "68": [0, 0.7, 0.09371, 0, 0.77443],
-    "69": [0, 0.7, 0.18583, 0, 0.56162],
-    "70": [0, 0.7, 0.13634, 0, 0.89544],
-    "71": [0, 0.7, 0.17322, 0, 0.60961],
-    "72": [0, 0.7, 0.29694, 0, 0.96919],
-    "73": [0, 0.7, 0.19189, 0, 0.80907],
-    "74": [0.27778, 0.7, 0.19189, 0, 1.05159],
-    "75": [0, 0.7, 0.31259, 0, 0.91364],
-    "76": [0, 0.7, 0.19189, 0, 0.87373],
-    "77": [0, 0.7, 0.15981, 0, 1.08031],
-    "78": [0, 0.7, 0.3525, 0, 0.9015],
-    "79": [0, 0.7, 0.08078, 0, 0.73787],
-    "80": [0, 0.7, 0.08078, 0, 1.01262],
-    "81": [0, 0.7, 0.03305, 0, 0.88282],
-    "82": [0, 0.7, 0.06259, 0, 0.85],
-    "83": [0, 0.7, 0.19189, 0, 0.86767],
-    "84": [0, 0.7, 0.29087, 0, 0.74697],
-    "85": [0, 0.7, 0.25815, 0, 0.79996],
-    "86": [0, 0.7, 0.27523, 0, 0.62204],
-    "87": [0, 0.7, 0.27523, 0, 0.80532],
-    "88": [0, 0.7, 0.26006, 0, 0.94445],
-    "89": [0, 0.7, 0.2939, 0, 0.70961],
-    "90": [0, 0.7, 0.24037, 0, 0.8212]
-  },
-  "Size1-Regular": {
-    "40": [0.35001, 0.85, 0, 0, 0.45834],
-    "41": [0.35001, 0.85, 0, 0, 0.45834],
-    "47": [0.35001, 0.85, 0, 0, 0.57778],
-    "91": [0.35001, 0.85, 0, 0, 0.41667],
-    "92": [0.35001, 0.85, 0, 0, 0.57778],
-    "93": [0.35001, 0.85, 0, 0, 0.41667],
-    "123": [0.35001, 0.85, 0, 0, 0.58334],
-    "125": [0.35001, 0.85, 0, 0, 0.58334],
-    "710": [0, 0.72222, 0, 0, 0.55556],
-    "732": [0, 0.72222, 0, 0, 0.55556],
-    "770": [0, 0.72222, 0, 0, 0.55556],
-    "771": [0, 0.72222, 0, 0, 0.55556],
-    "8214": [-0.00099, 0.601, 0, 0, 0.77778],
-    "8593": [1e-05, 0.6, 0, 0, 0.66667],
-    "8595": [1e-05, 0.6, 0, 0, 0.66667],
-    "8657": [1e-05, 0.6, 0, 0, 0.77778],
-    "8659": [1e-05, 0.6, 0, 0, 0.77778],
-    "8719": [0.25001, 0.75, 0, 0, 0.94445],
-    "8720": [0.25001, 0.75, 0, 0, 0.94445],
-    "8721": [0.25001, 0.75, 0, 0, 1.05556],
-    "8730": [0.35001, 0.85, 0, 0, 1.0],
-    "8739": [-0.00599, 0.606, 0, 0, 0.33333],
-    "8741": [-0.00599, 0.606, 0, 0, 0.55556],
-    "8747": [0.30612, 0.805, 0.19445, 0, 0.47222],
-    "8748": [0.306, 0.805, 0.19445, 0, 0.47222],
-    "8749": [0.306, 0.805, 0.19445, 0, 0.47222],
-    "8750": [0.30612, 0.805, 0.19445, 0, 0.47222],
-    "8896": [0.25001, 0.75, 0, 0, 0.83334],
-    "8897": [0.25001, 0.75, 0, 0, 0.83334],
-    "8898": [0.25001, 0.75, 0, 0, 0.83334],
-    "8899": [0.25001, 0.75, 0, 0, 0.83334],
-    "8968": [0.35001, 0.85, 0, 0, 0.47222],
-    "8969": [0.35001, 0.85, 0, 0, 0.47222],
-    "8970": [0.35001, 0.85, 0, 0, 0.47222],
-    "8971": [0.35001, 0.85, 0, 0, 0.47222],
-    "9168": [-0.00099, 0.601, 0, 0, 0.66667],
-    "10216": [0.35001, 0.85, 0, 0, 0.47222],
-    "10217": [0.35001, 0.85, 0, 0, 0.47222],
-    "10752": [0.25001, 0.75, 0, 0, 1.11111],
-    "10753": [0.25001, 0.75, 0, 0, 1.11111],
-    "10754": [0.25001, 0.75, 0, 0, 1.11111],
-    "10756": [0.25001, 0.75, 0, 0, 0.83334],
-    "10758": [0.25001, 0.75, 0, 0, 0.83334]
-  },
-  "Size2-Regular": {
-    "40": [0.65002, 1.15, 0, 0, 0.59722],
-    "41": [0.65002, 1.15, 0, 0, 0.59722],
-    "47": [0.65002, 1.15, 0, 0, 0.81111],
-    "91": [0.65002, 1.15, 0, 0, 0.47222],
-    "92": [0.65002, 1.15, 0, 0, 0.81111],
-    "93": [0.65002, 1.15, 0, 0, 0.47222],
-    "123": [0.65002, 1.15, 0, 0, 0.66667],
-    "125": [0.65002, 1.15, 0, 0, 0.66667],
-    "710": [0, 0.75, 0, 0, 1.0],
-    "732": [0, 0.75, 0, 0, 1.0],
-    "770": [0, 0.75, 0, 0, 1.0],
-    "771": [0, 0.75, 0, 0, 1.0],
-    "8719": [0.55001, 1.05, 0, 0, 1.27778],
-    "8720": [0.55001, 1.05, 0, 0, 1.27778],
-    "8721": [0.55001, 1.05, 0, 0, 1.44445],
-    "8730": [0.65002, 1.15, 0, 0, 1.0],
-    "8747": [0.86225, 1.36, 0.44445, 0, 0.55556],
-    "8748": [0.862, 1.36, 0.44445, 0, 0.55556],
-    "8749": [0.862, 1.36, 0.44445, 0, 0.55556],
-    "8750": [0.86225, 1.36, 0.44445, 0, 0.55556],
-    "8896": [0.55001, 1.05, 0, 0, 1.11111],
-    "8897": [0.55001, 1.05, 0, 0, 1.11111],
-    "8898": [0.55001, 1.05, 0, 0, 1.11111],
-    "8899": [0.55001, 1.05, 0, 0, 1.11111],
-    "8968": [0.65002, 1.15, 0, 0, 0.52778],
-    "8969": [0.65002, 1.15, 0, 0, 0.52778],
-    "8970": [0.65002, 1.15, 0, 0, 0.52778],
-    "8971": [0.65002, 1.15, 0, 0, 0.52778],
-    "10216": [0.65002, 1.15, 0, 0, 0.61111],
-    "10217": [0.65002, 1.15, 0, 0, 0.61111],
-    "10752": [0.55001, 1.05, 0, 0, 1.51112],
-    "10753": [0.55001, 1.05, 0, 0, 1.51112],
-    "10754": [0.55001, 1.05, 0, 0, 1.51112],
-    "10756": [0.55001, 1.05, 0, 0, 1.11111],
-    "10758": [0.55001, 1.05, 0, 0, 1.11111]
-  },
-  "Size3-Regular": {
-    "40": [0.95003, 1.45, 0, 0, 0.73611],
-    "41": [0.95003, 1.45, 0, 0, 0.73611],
-    "47": [0.95003, 1.45, 0, 0, 1.04445],
-    "91": [0.95003, 1.45, 0, 0, 0.52778],
-    "92": [0.95003, 1.45, 0, 0, 1.04445],
-    "93": [0.95003, 1.45, 0, 0, 0.52778],
-    "123": [0.95003, 1.45, 0, 0, 0.75],
-    "125": [0.95003, 1.45, 0, 0, 0.75],
-    "710": [0, 0.75, 0, 0, 1.44445],
-    "732": [0, 0.75, 0, 0, 1.44445],
-    "770": [0, 0.75, 0, 0, 1.44445],
-    "771": [0, 0.75, 0, 0, 1.44445],
-    "8730": [0.95003, 1.45, 0, 0, 1.0],
-    "8968": [0.95003, 1.45, 0, 0, 0.58334],
-    "8969": [0.95003, 1.45, 0, 0, 0.58334],
-    "8970": [0.95003, 1.45, 0, 0, 0.58334],
-    "8971": [0.95003, 1.45, 0, 0, 0.58334],
-    "10216": [0.95003, 1.45, 0, 0, 0.75],
-    "10217": [0.95003, 1.45, 0, 0, 0.75]
-  },
-  "Size4-Regular": {
-    "40": [1.25003, 1.75, 0, 0, 0.79167],
-    "41": [1.25003, 1.75, 0, 0, 0.79167],
-    "47": [1.25003, 1.75, 0, 0, 1.27778],
-    "91": [1.25003, 1.75, 0, 0, 0.58334],
-    "92": [1.25003, 1.75, 0, 0, 1.27778],
-    "93": [1.25003, 1.75, 0, 0, 0.58334],
-    "123": [1.25003, 1.75, 0, 0, 0.80556],
-    "125": [1.25003, 1.75, 0, 0, 0.80556],
-    "710": [0, 0.825, 0, 0, 1.8889],
-    "732": [0, 0.825, 0, 0, 1.8889],
-    "770": [0, 0.825, 0, 0, 1.8889],
-    "771": [0, 0.825, 0, 0, 1.8889],
-    "8730": [1.25003, 1.75, 0, 0, 1.0],
-    "8968": [1.25003, 1.75, 0, 0, 0.63889],
-    "8969": [1.25003, 1.75, 0, 0, 0.63889],
-    "8970": [1.25003, 1.75, 0, 0, 0.63889],
-    "8971": [1.25003, 1.75, 0, 0, 0.63889],
-    "9115": [0.64502, 1.155, 0, 0, 0.875],
-    "9116": [1e-05, 0.6, 0, 0, 0.875],
-    "9117": [0.64502, 1.155, 0, 0, 0.875],
-    "9118": [0.64502, 1.155, 0, 0, 0.875],
-    "9119": [1e-05, 0.6, 0, 0, 0.875],
-    "9120": [0.64502, 1.155, 0, 0, 0.875],
-    "9121": [0.64502, 1.155, 0, 0, 0.66667],
-    "9122": [-0.00099, 0.601, 0, 0, 0.66667],
-    "9123": [0.64502, 1.155, 0, 0, 0.66667],
-    "9124": [0.64502, 1.155, 0, 0, 0.66667],
-    "9125": [-0.00099, 0.601, 0, 0, 0.66667],
-    "9126": [0.64502, 1.155, 0, 0, 0.66667],
-    "9127": [1e-05, 0.9, 0, 0, 0.88889],
-    "9128": [0.65002, 1.15, 0, 0, 0.88889],
-    "9129": [0.90001, 0, 0, 0, 0.88889],
-    "9130": [0, 0.3, 0, 0, 0.88889],
-    "9131": [1e-05, 0.9, 0, 0, 0.88889],
-    "9132": [0.65002, 1.15, 0, 0, 0.88889],
-    "9133": [0.90001, 0, 0, 0, 0.88889],
-    "9143": [0.88502, 0.915, 0, 0, 1.05556],
-    "10216": [1.25003, 1.75, 0, 0, 0.80556],
-    "10217": [1.25003, 1.75, 0, 0, 0.80556],
-    "57344": [-0.00499, 0.605, 0, 0, 1.05556],
-    "57345": [-0.00499, 0.605, 0, 0, 1.05556],
-    "57680": [0, 0.12, 0, 0, 0.45],
-    "57681": [0, 0.12, 0, 0, 0.45],
-    "57682": [0, 0.12, 0, 0, 0.45],
-    "57683": [0, 0.12, 0, 0, 0.45]
-  },
-  "Typewriter-Regular": {
-    "32": [0, 0, 0, 0, 0.525],
-    "33": [0, 0.61111, 0, 0, 0.525],
-    "34": [0, 0.61111, 0, 0, 0.525],
-    "35": [0, 0.61111, 0, 0, 0.525],
-    "36": [0.08333, 0.69444, 0, 0, 0.525],
-    "37": [0.08333, 0.69444, 0, 0, 0.525],
-    "38": [0, 0.61111, 0, 0, 0.525],
-    "39": [0, 0.61111, 0, 0, 0.525],
-    "40": [0.08333, 0.69444, 0, 0, 0.525],
-    "41": [0.08333, 0.69444, 0, 0, 0.525],
-    "42": [0, 0.52083, 0, 0, 0.525],
-    "43": [-0.08056, 0.53055, 0, 0, 0.525],
-    "44": [0.13889, 0.125, 0, 0, 0.525],
-    "45": [-0.08056, 0.53055, 0, 0, 0.525],
-    "46": [0, 0.125, 0, 0, 0.525],
-    "47": [0.08333, 0.69444, 0, 0, 0.525],
-    "48": [0, 0.61111, 0, 0, 0.525],
-    "49": [0, 0.61111, 0, 0, 0.525],
-    "50": [0, 0.61111, 0, 0, 0.525],
-    "51": [0, 0.61111, 0, 0, 0.525],
-    "52": [0, 0.61111, 0, 0, 0.525],
-    "53": [0, 0.61111, 0, 0, 0.525],
-    "54": [0, 0.61111, 0, 0, 0.525],
-    "55": [0, 0.61111, 0, 0, 0.525],
-    "56": [0, 0.61111, 0, 0, 0.525],
-    "57": [0, 0.61111, 0, 0, 0.525],
-    "58": [0, 0.43056, 0, 0, 0.525],
-    "59": [0.13889, 0.43056, 0, 0, 0.525],
-    "60": [-0.05556, 0.55556, 0, 0, 0.525],
-    "61": [-0.19549, 0.41562, 0, 0, 0.525],
-    "62": [-0.05556, 0.55556, 0, 0, 0.525],
-    "63": [0, 0.61111, 0, 0, 0.525],
-    "64": [0, 0.61111, 0, 0, 0.525],
-    "65": [0, 0.61111, 0, 0, 0.525],
-    "66": [0, 0.61111, 0, 0, 0.525],
-    "67": [0, 0.61111, 0, 0, 0.525],
-    "68": [0, 0.61111, 0, 0, 0.525],
-    "69": [0, 0.61111, 0, 0, 0.525],
-    "70": [0, 0.61111, 0, 0, 0.525],
-    "71": [0, 0.61111, 0, 0, 0.525],
-    "72": [0, 0.61111, 0, 0, 0.525],
-    "73": [0, 0.61111, 0, 0, 0.525],
-    "74": [0, 0.61111, 0, 0, 0.525],
-    "75": [0, 0.61111, 0, 0, 0.525],
-    "76": [0, 0.61111, 0, 0, 0.525],
-    "77": [0, 0.61111, 0, 0, 0.525],
-    "78": [0, 0.61111, 0, 0, 0.525],
-    "79": [0, 0.61111, 0, 0, 0.525],
-    "80": [0, 0.61111, 0, 0, 0.525],
-    "81": [0.13889, 0.61111, 0, 0, 0.525],
-    "82": [0, 0.61111, 0, 0, 0.525],
-    "83": [0, 0.61111, 0, 0, 0.525],
-    "84": [0, 0.61111, 0, 0, 0.525],
-    "85": [0, 0.61111, 0, 0, 0.525],
-    "86": [0, 0.61111, 0, 0, 0.525],
-    "87": [0, 0.61111, 0, 0, 0.525],
-    "88": [0, 0.61111, 0, 0, 0.525],
-    "89": [0, 0.61111, 0, 0, 0.525],
-    "90": [0, 0.61111, 0, 0, 0.525],
-    "91": [0.08333, 0.69444, 0, 0, 0.525],
-    "92": [0.08333, 0.69444, 0, 0, 0.525],
-    "93": [0.08333, 0.69444, 0, 0, 0.525],
-    "94": [0, 0.61111, 0, 0, 0.525],
-    "95": [0.09514, 0, 0, 0, 0.525],
-    "96": [0, 0.61111, 0, 0, 0.525],
-    "97": [0, 0.43056, 0, 0, 0.525],
-    "98": [0, 0.61111, 0, 0, 0.525],
-    "99": [0, 0.43056, 0, 0, 0.525],
-    "100": [0, 0.61111, 0, 0, 0.525],
-    "101": [0, 0.43056, 0, 0, 0.525],
-    "102": [0, 0.61111, 0, 0, 0.525],
-    "103": [0.22222, 0.43056, 0, 0, 0.525],
-    "104": [0, 0.61111, 0, 0, 0.525],
-    "105": [0, 0.61111, 0, 0, 0.525],
-    "106": [0.22222, 0.61111, 0, 0, 0.525],
-    "107": [0, 0.61111, 0, 0, 0.525],
-    "108": [0, 0.61111, 0, 0, 0.525],
-    "109": [0, 0.43056, 0, 0, 0.525],
-    "110": [0, 0.43056, 0, 0, 0.525],
-    "111": [0, 0.43056, 0, 0, 0.525],
-    "112": [0.22222, 0.43056, 0, 0, 0.525],
-    "113": [0.22222, 0.43056, 0, 0, 0.525],
-    "114": [0, 0.43056, 0, 0, 0.525],
-    "115": [0, 0.43056, 0, 0, 0.525],
-    "116": [0, 0.55358, 0, 0, 0.525],
-    "117": [0, 0.43056, 0, 0, 0.525],
-    "118": [0, 0.43056, 0, 0, 0.525],
-    "119": [0, 0.43056, 0, 0, 0.525],
-    "120": [0, 0.43056, 0, 0, 0.525],
-    "121": [0.22222, 0.43056, 0, 0, 0.525],
-    "122": [0, 0.43056, 0, 0, 0.525],
-    "123": [0.08333, 0.69444, 0, 0, 0.525],
-    "124": [0.08333, 0.69444, 0, 0, 0.525],
-    "125": [0.08333, 0.69444, 0, 0, 0.525],
-    "126": [0, 0.61111, 0, 0, 0.525],
-    "127": [0, 0.61111, 0, 0, 0.525],
-    "160": [0, 0, 0, 0, 0.525],
-    "176": [0, 0.61111, 0, 0, 0.525],
-    "184": [0.19445, 0, 0, 0, 0.525],
-    "305": [0, 0.43056, 0, 0, 0.525],
-    "567": [0.22222, 0.43056, 0, 0, 0.525],
-    "711": [0, 0.56597, 0, 0, 0.525],
-    "713": [0, 0.56555, 0, 0, 0.525],
-    "714": [0, 0.61111, 0, 0, 0.525],
-    "715": [0, 0.61111, 0, 0, 0.525],
-    "728": [0, 0.61111, 0, 0, 0.525],
-    "730": [0, 0.61111, 0, 0, 0.525],
-    "770": [0, 0.61111, 0, 0, 0.525],
-    "771": [0, 0.61111, 0, 0, 0.525],
-    "776": [0, 0.61111, 0, 0, 0.525],
-    "915": [0, 0.61111, 0, 0, 0.525],
-    "916": [0, 0.61111, 0, 0, 0.525],
-    "920": [0, 0.61111, 0, 0, 0.525],
-    "923": [0, 0.61111, 0, 0, 0.525],
-    "926": [0, 0.61111, 0, 0, 0.525],
-    "928": [0, 0.61111, 0, 0, 0.525],
-    "931": [0, 0.61111, 0, 0, 0.525],
-    "933": [0, 0.61111, 0, 0, 0.525],
-    "934": [0, 0.61111, 0, 0, 0.525],
-    "936": [0, 0.61111, 0, 0, 0.525],
-    "937": [0, 0.61111, 0, 0, 0.525],
-    "8216": [0, 0.61111, 0, 0, 0.525],
-    "8217": [0, 0.61111, 0, 0, 0.525],
-    "8242": [0, 0.61111, 0, 0, 0.525],
-    "9251": [0.11111, 0.21944, 0, 0, 0.525]
-  }
-};
-
-/**
- * This file contains metrics regarding fonts and individual symbols. The sigma
- * and xi variables, as well as the metricMap map contain data extracted from
- * TeX, TeX font metrics, and the TTF files. These data are then exposed via the
- * `metrics` variable and the getCharacterMetrics function.
- */
-// In TeX, there are actually three sets of dimensions, one for each of
-// textstyle (size index 5 and higher: >=9pt), scriptstyle (size index 3 and 4:
-// 7-8pt), and scriptscriptstyle (size index 1 and 2: 5-6pt).  These are
-// provided in the the arrays below, in that order.
-//
-// The font metrics are stored in fonts cmsy10, cmsy7, and cmsy5 respsectively.
-// This was determined by running the following script:
-//
-//     latex -interaction=nonstopmode \
-//     '\documentclass{article}\usepackage{amsmath}\begin{document}' \
-//     '$a$ \expandafter\show\the\textfont2' \
-//     '\expandafter\show\the\scriptfont2' \
-//     '\expandafter\show\the\scriptscriptfont2' \
-//     '\stop'
-//
-// The metrics themselves were retreived using the following commands:
-//
-//     tftopl cmsy10
-//     tftopl cmsy7
-//     tftopl cmsy5
-//
-// The output of each of these commands is quite lengthy.  The only part we
-// care about is the FONTDIMEN section. Each value is measured in EMs.
-const sigmasAndXis = {
-  slant: [0.250, 0.250, 0.250],
-  // sigma1
-  space: [0.000, 0.000, 0.000],
-  // sigma2
-  stretch: [0.000, 0.000, 0.000],
-  // sigma3
-  shrink: [0.000, 0.000, 0.000],
-  // sigma4
-  xHeight: [0.431, 0.431, 0.431],
-  // sigma5
-  quad: [1.000, 1.171, 1.472],
-  // sigma6
-  extraSpace: [0.000, 0.000, 0.000],
-  // sigma7
-  num1: [0.677, 0.732, 0.925],
-  // sigma8
-  num2: [0.394, 0.384, 0.387],
-  // sigma9
-  num3: [0.444, 0.471, 0.504],
-  // sigma10
-  denom1: [0.686, 0.752, 1.025],
-  // sigma11
-  denom2: [0.345, 0.344, 0.532],
-  // sigma12
-  sup1: [0.413, 0.503, 0.504],
-  // sigma13
-  sup2: [0.363, 0.431, 0.404],
-  // sigma14
-  sup3: [0.289, 0.286, 0.294],
-  // sigma15
-  sub1: [0.150, 0.143, 0.200],
-  // sigma16
-  sub2: [0.247, 0.286, 0.400],
-  // sigma17
-  supDrop: [0.386, 0.353, 0.494],
-  // sigma18
-  subDrop: [0.050, 0.071, 0.100],
-  // sigma19
-  delim1: [2.390, 1.700, 1.980],
-  // sigma20
-  delim2: [1.010, 1.157, 1.420],
-  // sigma21
-  axisHeight: [0.250, 0.250, 0.250],
-  // sigma22
-  // These font metrics are extracted from TeX by using tftopl on cmex10.tfm;
-  // they correspond to the font parameters of the extension fonts (family 3).
-  // See the TeXbook, page 441. In AMSTeX, the extension fonts scale; to
-  // match cmex7, we'd use cmex7.tfm values for script and scriptscript
-  // values.
-  defaultRuleThickness: [0.04, 0.049, 0.049],
-  // xi8; cmex7: 0.049
-  bigOpSpacing1: [0.111, 0.111, 0.111],
-  // xi9
-  bigOpSpacing2: [0.166, 0.166, 0.166],
-  // xi10
-  bigOpSpacing3: [0.2, 0.2, 0.2],
-  // xi11
-  bigOpSpacing4: [0.6, 0.611, 0.611],
-  // xi12; cmex7: 0.611
-  bigOpSpacing5: [0.1, 0.143, 0.143],
-  // xi13; cmex7: 0.143
-  // The \sqrt rule width is taken from the height of the surd character.
-  // Since we use the same font at all sizes, this thickness doesn't scale.
-  sqrtRuleThickness: [0.04, 0.04, 0.04],
-  // This value determines how large a pt is, for metrics which are defined
-  // in terms of pts.
-  // This value is also used in katex.less; if you change it make sure the
-  // values match.
-  ptPerEm: [10.0, 10.0, 10.0],
-  // The space between adjacent `|` columns in an array definition. From
-  // `\showthe\doublerulesep` in LaTeX. Equals 2.0 / ptPerEm.
-  doubleRuleSep: [0.2, 0.2, 0.2],
-  // The width of separator lines in {array} environments. From
-  // `\showthe\arrayrulewidth` in LaTeX. Equals 0.4 / ptPerEm.
-  arrayRuleWidth: [0.04, 0.04, 0.04],
-  // Two values from LaTeX source2e:
-  fboxsep: [0.3, 0.3, 0.3],
-  //        3 pt / ptPerEm
-  fboxrule: [0.04, 0.04, 0.04] // 0.4 pt / ptPerEm
-
-}; // This map contains a mapping from font name and character code to character
-// should have Latin-1 and Cyrillic characters, but may not depending on the
-// operating system.  The metrics do not account for extra height from the
-// accents.  In the case of Cyrillic characters which have both ascenders and
-// descenders we prefer approximations with ascenders, primarily to prevent
-// the fraction bar or root line from intersecting the glyph.
-// TODO(kevinb) allow union of multiple glyph metrics for better accuracy.
-
-const extraCharacterMap = {
-  // Latin-1
-  'Å': 'A',
-  'Ç': 'C',
-  'Ð': 'D',
-  'Þ': 'o',
-  'å': 'a',
-  'ç': 'c',
-  'ð': 'd',
-  'þ': 'o',
-  // Cyrillic
-  'А': 'A',
-  'Б': 'B',
-  'В': 'B',
-  'Г': 'F',
-  'Д': 'A',
-  'Е': 'E',
-  'Ж': 'K',
-  'З': '3',
-  'И': 'N',
-  'Й': 'N',
-  'К': 'K',
-  'Л': 'N',
-  'М': 'M',
-  'Н': 'H',
-  'О': 'O',
-  'П': 'N',
-  'Р': 'P',
-  'С': 'C',
-  'Т': 'T',
-  'У': 'y',
-  'Ф': 'O',
-  'Х': 'X',
-  'Ц': 'U',
-  'Ч': 'h',
-  'Ш': 'W',
-  'Щ': 'W',
-  'Ъ': 'B',
-  'Ы': 'X',
-  'Ь': 'B',
-  'Э': '3',
-  'Ю': 'X',
-  'Я': 'R',
-  'а': 'a',
-  'б': 'b',
-  'в': 'a',
-  'г': 'r',
-  'д': 'y',
-  'е': 'e',
-  'ж': 'm',
-  'з': 'e',
-  'и': 'n',
-  'й': 'n',
-  'к': 'n',
-  'л': 'n',
-  'м': 'm',
-  'н': 'n',
-  'о': 'o',
-  'п': 'n',
-  'р': 'p',
-  'с': 'c',
-  'т': 'o',
-  'у': 'y',
-  'ф': 'b',
-  'х': 'x',
-  'ц': 'n',
-  'ч': 'n',
-  'ш': 'w',
-  'щ': 'w',
-  'ъ': 'a',
-  'ы': 'm',
-  'ь': 'a',
-  'э': 'e',
-  'ю': 'm',
-  'я': 'r'
-};
-
-/**
- * This function adds new font metrics to default metricMap
- * It can also override existing metrics
- */
-function setFontMetrics(fontName, metrics) {
-  metricMap[fontName] = metrics;
-}
-/**
- * This function is a convenience function for looking up information in the
- * metricMap table. It takes a character as a string, and a font.
- *
- * Note: the `width` property may be undefined if fontMetricsData.js wasn't
- * built using `Make extended_metrics`.
- */
-
-function getCharacterMetrics(character, font, mode) {
-  if (!metricMap[font]) {
-    throw new Error(`Font metrics not found for font: ${font}.`);
-  }
-
-  let ch = character.charCodeAt(0);
-  let metrics = metricMap[font][ch];
-
-  if (!metrics && character[0] in extraCharacterMap) {
-    ch = extraCharacterMap[character[0]].charCodeAt(0);
-    metrics = metricMap[font][ch];
-  }
-
-  if (!metrics && mode === 'text') {
-    // We don't typically have font metrics for Asian scripts.
-    // But since we support them in text mode, we need to return
-    // some sort of metrics.
-    // So if the character is in a script we support but we
-    // don't have metrics for it, just use the metrics for
-    // the Latin capital letter M. This is close enough because
-    // we (currently) only care about the height of the glpyh
-    // not its width.
-    if (supportedCodepoint(ch)) {
-      metrics = metricMap[font][77]; // 77 is the charcode for 'M'
-    }
-  }
-
-  if (metrics) {
-    return {
-      depth: metrics[0],
-      height: metrics[1],
-      italic: metrics[2],
-      skew: metrics[3],
-      width: metrics[4]
-    };
-  }
-}
-const fontMetricsBySizeIndex = {};
-/**
- * Get the font metrics for a given size.
- */
-
-function getGlobalMetrics(size) {
-  let sizeIndex;
-
-  if (size >= 5) {
-    sizeIndex = 0;
-  } else if (size >= 3) {
-    sizeIndex = 1;
-  } else {
-    sizeIndex = 2;
-  }
-
-  if (!fontMetricsBySizeIndex[sizeIndex]) {
-    const metrics = fontMetricsBySizeIndex[sizeIndex] = {
-      cssEmPerMu: sigmasAndXis.quad[sizeIndex] / 18
-    };
-
-    for (const key in sigmasAndXis) {
-      if (sigmasAndXis.hasOwnProperty(key)) {
-        metrics[key] = sigmasAndXis[key][sizeIndex];
-      }
-    }
-  }
-
-  return fontMetricsBySizeIndex[sizeIndex];
-}
-
-/**
- * This file holds a list of all no-argument functions and single-character
- * symbols (like 'a' or ';').
- *
- * For each of the symbols, there are three properties they can have:
- * - font (required): the font to be used for this symbol. Either "main" (the
-     normal font), or "ams" (the ams fonts).
- * - group (required): the ParseNode group type the symbol should have (i.e.
-     "textord", "mathord", etc).
-     See https://github.com/KaTeX/KaTeX/wiki/Examining-TeX#group-types
- * - replace: the character that this symbol or function should be
- *   replaced with (i.e. "\phi" has a replace value of "\u03d5", the phi
- *   character in the main font).
- *
- * The outermost map in the table indicates what mode the symbols should be
- * accepted in (e.g. "math" or "text").
- */
-// Some of these have a "-token" suffix since these are also used as `ParseNode`
-// types for raw text tokens, and we want to avoid conflicts with higher-level
-// `ParseNode` types. These `ParseNode`s are constructed within `Parser` by
-// looking up the `symbols` map.
-const ATOMS = {
-  "bin": 1,
-  "close": 1,
-  "inner": 1,
-  "open": 1,
-  "punct": 1,
-  "rel": 1
-};
-const NON_ATOMS = {
-  "accent-token": 1,
-  "mathord": 1,
-  "op-token": 1,
-  "spacing": 1,
-  "textord": 1
-};
-const symbols = {
-  "math": {},
-  "text": {}
-};
-/** `acceptUnicodeChar = true` is only applicable if `replace` is set. */
-
-function defineSymbol(mode, font, group, replace, name, acceptUnicodeChar) {
-  symbols[mode][name] = {
-    font,
-    group,
-    replace
-  };
-
-  if (acceptUnicodeChar && replace) {
-    symbols[mode][replace] = symbols[mode][name];
-  }
-} // Some abbreviations for commonly used strings.
-// This helps minify the code, and also spotting typos using jshint.
-// modes:
-
-const math = "math";
-const text$1 = "text"; // fonts:
-
-const main = "main";
-const ams = "ams"; // groups:
-
-const accent = "accent-token";
-const bin = "bin";
-const close = "close";
-const inner = "inner";
-const mathord = "mathord";
-const op = "op-token";
-const open = "open";
-const punct = "punct";
-const rel = "rel";
-const spacing = "spacing";
-const textord = "textord"; // Now comes the symbol table
-// Relation Symbols
-
-defineSymbol(math, main, rel, "\u2261", "\\equiv", true);
-defineSymbol(math, main, rel, "\u227a", "\\prec", true);
-defineSymbol(math, main, rel, "\u227b", "\\succ", true);
-defineSymbol(math, main, rel, "\u223c", "\\sim", true);
-defineSymbol(math, main, rel, "\u22a5", "\\perp");
-defineSymbol(math, main, rel, "\u2aaf", "\\preceq", true);
-defineSymbol(math, main, rel, "\u2ab0", "\\succeq", true);
-defineSymbol(math, main, rel, "\u2243", "\\simeq", true);
-defineSymbol(math, main, rel, "\u2223", "\\mid", true);
-defineSymbol(math, main, rel, "\u226a", "\\ll", true);
-defineSymbol(math, main, rel, "\u226b", "\\gg", true);
-defineSymbol(math, main, rel, "\u224d", "\\asymp", true);
-defineSymbol(math, main, rel, "\u2225", "\\parallel");
-defineSymbol(math, main, rel, "\u22c8", "\\bowtie", true);
-defineSymbol(math, main, rel, "\u2323", "\\smile", true);
-defineSymbol(math, main, rel, "\u2291", "\\sqsubseteq", true);
-defineSymbol(math, main, rel, "\u2292", "\\sqsupseteq", true);
-defineSymbol(math, main, rel, "\u2250", "\\doteq", true);
-defineSymbol(math, main, rel, "\u2322", "\\frown", true);
-defineSymbol(math, main, rel, "\u220b", "\\ni", true);
-defineSymbol(math, main, rel, "\u221d", "\\propto", true);
-defineSymbol(math, main, rel, "\u22a2", "\\vdash", true);
-defineSymbol(math, main, rel, "\u22a3", "\\dashv", true);
-defineSymbol(math, main, rel, "\u220b", "\\owns"); // Punctuation
-
-defineSymbol(math, main, punct, "\u002e", "\\ldotp");
-defineSymbol(math, main, punct, "\u22c5", "\\cdotp"); // Misc Symbols
-
-defineSymbol(math, main, textord, "\u0023", "\\#");
-defineSymbol(text$1, main, textord, "\u0023", "\\#");
-defineSymbol(math, main, textord, "\u0026", "\\&");
-defineSymbol(text$1, main, textord, "\u0026", "\\&");
-defineSymbol(math, main, textord, "\u2135", "\\aleph", true);
-defineSymbol(math, main, textord, "\u2200", "\\forall", true);
-defineSymbol(math, main, textord, "\u210f", "\\hbar", true);
-defineSymbol(math, main, textord, "\u2203", "\\exists", true);
-defineSymbol(math, main, textord, "\u2207", "\\nabla", true);
-defineSymbol(math, main, textord, "\u266d", "\\flat", true);
-defineSymbol(math, main, textord, "\u2113", "\\ell", true);
-defineSymbol(math, main, textord, "\u266e", "\\natural", true);
-defineSymbol(math, main, textord, "\u2663", "\\clubsuit", true);
-defineSymbol(math, main, textord, "\u2118", "\\wp", true);
-defineSymbol(math, main, textord, "\u266f", "\\sharp", true);
-defineSymbol(math, main, textord, "\u2662", "\\diamondsuit", true);
-defineSymbol(math, main, textord, "\u211c", "\\Re", true);
-defineSymbol(math, main, textord, "\u2661", "\\heartsuit", true);
-defineSymbol(math, main, textord, "\u2111", "\\Im", true);
-defineSymbol(math, main, textord, "\u2660", "\\spadesuit", true);
-defineSymbol(text$1, main, textord, "\u00a7", "\\S", true);
-defineSymbol(text$1, main, textord, "\u00b6", "\\P", true); // Math and Text
-
-defineSymbol(math, main, textord, "\u2020", "\\dag");
-defineSymbol(text$1, main, textord, "\u2020", "\\dag");
-defineSymbol(text$1, main, textord, "\u2020", "\\textdagger");
-defineSymbol(math, main, textord, "\u2021", "\\ddag");
-defineSymbol(text$1, main, textord, "\u2021", "\\ddag");
-defineSymbol(text$1, main, textord, "\u2021", "\\textdaggerdbl"); // Large Delimiters
-
-defineSymbol(math, main, close, "\u23b1", "\\rmoustache", true);
-defineSymbol(math, main, open, "\u23b0", "\\lmoustache", true);
-defineSymbol(math, main, close, "\u27ef", "\\rgroup", true);
-defineSymbol(math, main, open, "\u27ee", "\\lgroup", true); // Binary Operators
-
-defineSymbol(math, main, bin, "\u2213", "\\mp", true);
-defineSymbol(math, main, bin, "\u2296", "\\ominus", true);
-defineSymbol(math, main, bin, "\u228e", "\\uplus", true);
-defineSymbol(math, main, bin, "\u2293", "\\sqcap", true);
-defineSymbol(math, main, bin, "\u2217", "\\ast");
-defineSymbol(math, main, bin, "\u2294", "\\sqcup", true);
-defineSymbol(math, main, bin, "\u25ef", "\\bigcirc");
-defineSymbol(math, main, bin, "\u2219", "\\bullet");
-defineSymbol(math, main, bin, "\u2021", "\\ddagger");
-defineSymbol(math, main, bin, "\u2240", "\\wr", true);
-defineSymbol(math, main, bin, "\u2a3f", "\\amalg");
-defineSymbol(math, main, bin, "\u0026", "\\And"); // from amsmath
-// Arrow Symbols
-
-defineSymbol(math, main, rel, "\u27f5", "\\longleftarrow", true);
-defineSymbol(math, main, rel, "\u21d0", "\\Leftarrow", true);
-defineSymbol(math, main, rel, "\u27f8", "\\Longleftarrow", true);
-defineSymbol(math, main, rel, "\u27f6", "\\longrightarrow", true);
-defineSymbol(math, main, rel, "\u21d2", "\\Rightarrow", true);
-defineSymbol(math, main, rel, "\u27f9", "\\Longrightarrow", true);
-defineSymbol(math, main, rel, "\u2194", "\\leftrightarrow", true);
-defineSymbol(math, main, rel, "\u27f7", "\\longleftrightarrow", true);
-defineSymbol(math, main, rel, "\u21d4", "\\Leftrightarrow", true);
-defineSymbol(math, main, rel, "\u27fa", "\\Longleftrightarrow", true);
-defineSymbol(math, main, rel, "\u21a6", "\\mapsto", true);
-defineSymbol(math, main, rel, "\u27fc", "\\longmapsto", true);
-defineSymbol(math, main, rel, "\u2197", "\\nearrow", true);
-defineSymbol(math, main, rel, "\u21a9", "\\hookleftarrow", true);
-defineSymbol(math, main, rel, "\u21aa", "\\hookrightarrow", true);
-defineSymbol(math, main, rel, "\u2198", "\\searrow", true);
-defineSymbol(math, main, rel, "\u21bc", "\\leftharpoonup", true);
-defineSymbol(math, main, rel, "\u21c0", "\\rightharpoonup", true);
-defineSymbol(math, main, rel, "\u2199", "\\swarrow", true);
-defineSymbol(math, main, rel, "\u21bd", "\\leftharpoondown", true);
-defineSymbol(math, main, rel, "\u21c1", "\\rightharpoondown", true);
-defineSymbol(math, main, rel, "\u2196", "\\nwarrow", true);
-defineSymbol(math, main, rel, "\u21cc", "\\rightleftharpoons", true); // AMS Negated Binary Relations
-
-defineSymbol(math, ams, rel, "\u226e", "\\nless", true); // Symbol names preceeded by "@" each have a corresponding macro.
-
-defineSymbol(math, ams, rel, "\ue010", "\\@nleqslant");
-defineSymbol(math, ams, rel, "\ue011", "\\@nleqq");
-defineSymbol(math, ams, rel, "\u2a87", "\\lneq", true);
-defineSymbol(math, ams, rel, "\u2268", "\\lneqq", true);
-defineSymbol(math, ams, rel, "\ue00c", "\\@lvertneqq");
-defineSymbol(math, ams, rel, "\u22e6", "\\lnsim", true);
-defineSymbol(math, ams, rel, "\u2a89", "\\lnapprox", true);
-defineSymbol(math, ams, rel, "\u2280", "\\nprec", true); // unicode-math maps \u22e0 to \npreccurlyeq. We'll use the AMS synonym.
-
-defineSymbol(math, ams, rel, "\u22e0", "\\npreceq", true);
-defineSymbol(math, ams, rel, "\u22e8", "\\precnsim", true);
-defineSymbol(math, ams, rel, "\u2ab9", "\\precnapprox", true);
-defineSymbol(math, ams, rel, "\u2241", "\\nsim", true);
-defineSymbol(math, ams, rel, "\ue006", "\\@nshortmid");
-defineSymbol(math, ams, rel, "\u2224", "\\nmid", true);
-defineSymbol(math, ams, rel, "\u22ac", "\\nvdash", true);
-defineSymbol(math, ams, rel, "\u22ad", "\\nvDash", true);
-defineSymbol(math, ams, rel, "\u22ea", "\\ntriangleleft");
-defineSymbol(math, ams, rel, "\u22ec", "\\ntrianglelefteq", true);
-defineSymbol(math, ams, rel, "\u228a", "\\subsetneq", true);
-defineSymbol(math, ams, rel, "\ue01a", "\\@varsubsetneq");
-defineSymbol(math, ams, rel, "\u2acb", "\\subsetneqq", true);
-defineSymbol(math, ams, rel, "\ue017", "\\@varsubsetneqq");
-defineSymbol(math, ams, rel, "\u226f", "\\ngtr", true);
-defineSymbol(math, ams, rel, "\ue00f", "\\@ngeqslant");
-defineSymbol(math, ams, rel, "\ue00e", "\\@ngeqq");
-defineSymbol(math, ams, rel, "\u2a88", "\\gneq", true);
-defineSymbol(math, ams, rel, "\u2269", "\\gneqq", true);
-defineSymbol(math, ams, rel, "\ue00d", "\\@gvertneqq");
-defineSymbol(math, ams, rel, "\u22e7", "\\gnsim", true);
-defineSymbol(math, ams, rel, "\u2a8a", "\\gnapprox", true);
-defineSymbol(math, ams, rel, "\u2281", "\\nsucc", true); // unicode-math maps \u22e1 to \nsucccurlyeq. We'll use the AMS synonym.
-
-defineSymbol(math, ams, rel, "\u22e1", "\\nsucceq", true);
-defineSymbol(math, ams, rel, "\u22e9", "\\succnsim", true);
-defineSymbol(math, ams, rel, "\u2aba", "\\succnapprox", true); // unicode-math maps \u2246 to \simneqq. We'll use the AMS synonym.
-
-defineSymbol(math, ams, rel, "\u2246", "\\ncong", true);
-defineSymbol(math, ams, rel, "\ue007", "\\@nshortparallel");
-defineSymbol(math, ams, rel, "\u2226", "\\nparallel", true);
-defineSymbol(math, ams, rel, "\u22af", "\\nVDash", true);
-defineSymbol(math, ams, rel, "\u22eb", "\\ntriangleright");
-defineSymbol(math, ams, rel, "\u22ed", "\\ntrianglerighteq", true);
-defineSymbol(math, ams, rel, "\ue018", "\\@nsupseteqq");
-defineSymbol(math, ams, rel, "\u228b", "\\supsetneq", true);
-defineSymbol(math, ams, rel, "\ue01b", "\\@varsupsetneq");
-defineSymbol(math, ams, rel, "\u2acc", "\\supsetneqq", true);
-defineSymbol(math, ams, rel, "\ue019", "\\@varsupsetneqq");
-defineSymbol(math, ams, rel, "\u22ae", "\\nVdash", true);
-defineSymbol(math, ams, rel, "\u2ab5", "\\precneqq", true);
-defineSymbol(math, ams, rel, "\u2ab6", "\\succneqq", true);
-defineSymbol(math, ams, rel, "\ue016", "\\@nsubseteqq");
-defineSymbol(math, ams, bin, "\u22b4", "\\unlhd");
-defineSymbol(math, ams, bin, "\u22b5", "\\unrhd"); // AMS Negated Arrows
-
-defineSymbol(math, ams, rel, "\u219a", "\\nleftarrow", true);
-defineSymbol(math, ams, rel, "\u219b", "\\nrightarrow", true);
-defineSymbol(math, ams, rel, "\u21cd", "\\nLeftarrow", true);
-defineSymbol(math, ams, rel, "\u21cf", "\\nRightarrow", true);
-defineSymbol(math, ams, rel, "\u21ae", "\\nleftrightarrow", true);
-defineSymbol(math, ams, rel, "\u21ce", "\\nLeftrightarrow", true); // AMS Misc
-
-defineSymbol(math, ams, rel, "\u25b3", "\\vartriangle");
-defineSymbol(math, ams, textord, "\u210f", "\\hslash");
-defineSymbol(math, ams, textord, "\u25bd", "\\triangledown");
-defineSymbol(math, ams, textord, "\u25ca", "\\lozenge");
-defineSymbol(math, ams, textord, "\u24c8", "\\circledS");
-defineSymbol(math, ams, textord, "\u00ae", "\\circledR");
-defineSymbol(text$1, ams, textord, "\u00ae", "\\circledR");
-defineSymbol(math, ams, textord, "\u2221", "\\measuredangle", true);
-defineSymbol(math, ams, textord, "\u2204", "\\nexists");
-defineSymbol(math, ams, textord, "\u2127", "\\mho");
-defineSymbol(math, ams, textord, "\u2132", "\\Finv", true);
-defineSymbol(math, ams, textord, "\u2141", "\\Game", true);
-defineSymbol(math, ams, textord, "\u2035", "\\backprime");
-defineSymbol(math, ams, textord, "\u25b2", "\\blacktriangle");
-defineSymbol(math, ams, textord, "\u25bc", "\\blacktriangledown");
-defineSymbol(math, ams, textord, "\u25a0", "\\blacksquare");
-defineSymbol(math, ams, textord, "\u29eb", "\\blacklozenge");
-defineSymbol(math, ams, textord, "\u2605", "\\bigstar");
-defineSymbol(math, ams, textord, "\u2222", "\\sphericalangle", true);
-defineSymbol(math, ams, textord, "\u2201", "\\complement", true); // unicode-math maps U+F0 (ð) to \matheth. We map to AMS function \eth
-
-defineSymbol(math, ams, textord, "\u00f0", "\\eth", true);
-defineSymbol(math, ams, textord, "\u2571", "\\diagup");
-defineSymbol(math, ams, textord, "\u2572", "\\diagdown");
-defineSymbol(math, ams, textord, "\u25a1", "\\square");
-defineSymbol(math, ams, textord, "\u25a1", "\\Box");
-defineSymbol(math, ams, textord, "\u25ca", "\\Diamond"); // unicode-math maps U+A5 to \mathyen. We map to AMS function \yen
-
-defineSymbol(math, ams, textord, "\u00a5", "\\yen", true);
-defineSymbol(text$1, ams, textord, "\u00a5", "\\yen", true);
-defineSymbol(math, ams, textord, "\u2713", "\\checkmark", true);
-defineSymbol(text$1, ams, textord, "\u2713", "\\checkmark"); // AMS Hebrew
-
-defineSymbol(math, ams, textord, "\u2136", "\\beth", true);
-defineSymbol(math, ams, textord, "\u2138", "\\daleth", true);
-defineSymbol(math, ams, textord, "\u2137", "\\gimel", true); // AMS Greek
-
-defineSymbol(math, ams, textord, "\u03dd", "\\digamma", true);
-defineSymbol(math, ams, textord, "\u03f0", "\\varkappa"); // AMS Delimiters
-
-defineSymbol(math, ams, open, "\u250c", "\\ulcorner", true);
-defineSymbol(math, ams, close, "\u2510", "\\urcorner", true);
-defineSymbol(math, ams, open, "\u2514", "\\llcorner", true);
-defineSymbol(math, ams, close, "\u2518", "\\lrcorner", true); // AMS Binary Relations
-
-defineSymbol(math, ams, rel, "\u2266", "\\leqq", true);
-defineSymbol(math, ams, rel, "\u2a7d", "\\leqslant", true);
-defineSymbol(math, ams, rel, "\u2a95", "\\eqslantless", true);
-defineSymbol(math, ams, rel, "\u2272", "\\lesssim", true);
-defineSymbol(math, ams, rel, "\u2a85", "\\lessapprox", true);
-defineSymbol(math, ams, rel, "\u224a", "\\approxeq", true);
-defineSymbol(math, ams, bin, "\u22d6", "\\lessdot");
-defineSymbol(math, ams, rel, "\u22d8", "\\lll", true);
-defineSymbol(math, ams, rel, "\u2276", "\\lessgtr", true);
-defineSymbol(math, ams, rel, "\u22da", "\\lesseqgtr", true);
-defineSymbol(math, ams, rel, "\u2a8b", "\\lesseqqgtr", true);
-defineSymbol(math, ams, rel, "\u2251", "\\doteqdot");
-defineSymbol(math, ams, rel, "\u2253", "\\risingdotseq", true);
-defineSymbol(math, ams, rel, "\u2252", "\\fallingdotseq", true);
-defineSymbol(math, ams, rel, "\u223d", "\\backsim", true);
-defineSymbol(math, ams, rel, "\u22cd", "\\backsimeq", true);
-defineSymbol(math, ams, rel, "\u2ac5", "\\subseteqq", true);
-defineSymbol(math, ams, rel, "\u22d0", "\\Subset", true);
-defineSymbol(math, ams, rel, "\u228f", "\\sqsubset", true);
-defineSymbol(math, ams, rel, "\u227c", "\\preccurlyeq", true);
-defineSymbol(math, ams, rel, "\u22de", "\\curlyeqprec", true);
-defineSymbol(math, ams, rel, "\u227e", "\\precsim", true);
-defineSymbol(math, ams, rel, "\u2ab7", "\\precapprox", true);
-defineSymbol(math, ams, rel, "\u22b2", "\\vartriangleleft");
-defineSymbol(math, ams, rel, "\u22b4", "\\trianglelefteq");
-defineSymbol(math, ams, rel, "\u22a8", "\\vDash", true);
-defineSymbol(math, ams, rel, "\u22aa", "\\Vvdash", true);
-defineSymbol(math, ams, rel, "\u2323", "\\smallsmile");
-defineSymbol(math, ams, rel, "\u2322", "\\smallfrown");
-defineSymbol(math, ams, rel, "\u224f", "\\bumpeq", true);
-defineSymbol(math, ams, rel, "\u224e", "\\Bumpeq", true);
-defineSymbol(math, ams, rel, "\u2267", "\\geqq", true);
-defineSymbol(math, ams, rel, "\u2a7e", "\\geqslant", true);
-defineSymbol(math, ams, rel, "\u2a96", "\\eqslantgtr", true);
-defineSymbol(math, ams, rel, "\u2273", "\\gtrsim", true);
-defineSymbol(math, ams, rel, "\u2a86", "\\gtrapprox", true);
-defineSymbol(math, ams, bin, "\u22d7", "\\gtrdot");
-defineSymbol(math, ams, rel, "\u22d9", "\\ggg", true);
-defineSymbol(math, ams, rel, "\u2277", "\\gtrless", true);
-defineSymbol(math, ams, rel, "\u22db", "\\gtreqless", true);
-defineSymbol(math, ams, rel, "\u2a8c", "\\gtreqqless", true);
-defineSymbol(math, ams, rel, "\u2256", "\\eqcirc", true);
-defineSymbol(math, ams, rel, "\u2257", "\\circeq", true);
-defineSymbol(math, ams, rel, "\u225c", "\\triangleq", true);
-defineSymbol(math, ams, rel, "\u223c", "\\thicksim");
-defineSymbol(math, ams, rel, "\u2248", "\\thickapprox");
-defineSymbol(math, ams, rel, "\u2ac6", "\\supseteqq", true);
-defineSymbol(math, ams, rel, "\u22d1", "\\Supset", true);
-defineSymbol(math, ams, rel, "\u2290", "\\sqsupset", true);
-defineSymbol(math, ams, rel, "\u227d", "\\succcurlyeq", true);
-defineSymbol(math, ams, rel, "\u22df", "\\curlyeqsucc", true);
-defineSymbol(math, ams, rel, "\u227f", "\\succsim", true);
-defineSymbol(math, ams, rel, "\u2ab8", "\\succapprox", true);
-defineSymbol(math, ams, rel, "\u22b3", "\\vartriangleright");
-defineSymbol(math, ams, rel, "\u22b5", "\\trianglerighteq");
-defineSymbol(math, ams, rel, "\u22a9", "\\Vdash", true);
-defineSymbol(math, ams, rel, "\u2223", "\\shortmid");
-defineSymbol(math, ams, rel, "\u2225", "\\shortparallel");
-defineSymbol(math, ams, rel, "\u226c", "\\between", true);
-defineSymbol(math, ams, rel, "\u22d4", "\\pitchfork", true);
-defineSymbol(math, ams, rel, "\u221d", "\\varpropto");
-defineSymbol(math, ams, rel, "\u25c0", "\\blacktriangleleft"); // unicode-math says that \therefore is a mathord atom.
-// We kept the amssymb atom type, which is rel.
-
-defineSymbol(math, ams, rel, "\u2234", "\\therefore", true);
-defineSymbol(math, ams, rel, "\u220d", "\\backepsilon");
-defineSymbol(math, ams, rel, "\u25b6", "\\blacktriangleright"); // unicode-math says that \because is a mathord atom.
-// We kept the amssymb atom type, which is rel.
-
-defineSymbol(math, ams, rel, "\u2235", "\\because", true);
-defineSymbol(math, ams, rel, "\u22d8", "\\llless");
-defineSymbol(math, ams, rel, "\u22d9", "\\gggtr");
-defineSymbol(math, ams, bin, "\u22b2", "\\lhd");
-defineSymbol(math, ams, bin, "\u22b3", "\\rhd");
-defineSymbol(math, ams, rel, "\u2242", "\\eqsim", true);
-defineSymbol(math, main, rel, "\u22c8", "\\Join");
-defineSymbol(math, ams, rel, "\u2251", "\\Doteq", true); // AMS Binary Operators
-
-defineSymbol(math, ams, bin, "\u2214", "\\dotplus", true);
-defineSymbol(math, ams, bin, "\u2216", "\\smallsetminus");
-defineSymbol(math, ams, bin, "\u22d2", "\\Cap", true);
-defineSymbol(math, ams, bin, "\u22d3", "\\Cup", true);
-defineSymbol(math, ams, bin, "\u2a5e", "\\doublebarwedge", true);
-defineSymbol(math, ams, bin, "\u229f", "\\boxminus", true);
-defineSymbol(math, ams, bin, "\u229e", "\\boxplus", true);
-defineSymbol(math, ams, bin, "\u22c7", "\\divideontimes", true);
-defineSymbol(math, ams, bin, "\u22c9", "\\ltimes", true);
-defineSymbol(math, ams, bin, "\u22ca", "\\rtimes", true);
-defineSymbol(math, ams, bin, "\u22cb", "\\leftthreetimes", true);
-defineSymbol(math, ams, bin, "\u22cc", "\\rightthreetimes", true);
-defineSymbol(math, ams, bin, "\u22cf", "\\curlywedge", true);
-defineSymbol(math, ams, bin, "\u22ce", "\\curlyvee", true);
-defineSymbol(math, ams, bin, "\u229d", "\\circleddash", true);
-defineSymbol(math, ams, bin, "\u229b", "\\circledast", true);
-defineSymbol(math, ams, bin, "\u22c5", "\\centerdot");
-defineSymbol(math, ams, bin, "\u22ba", "\\intercal", true);
-defineSymbol(math, ams, bin, "\u22d2", "\\doublecap");
-defineSymbol(math, ams, bin, "\u22d3", "\\doublecup");
-defineSymbol(math, ams, bin, "\u22a0", "\\boxtimes", true); // AMS Arrows
-// Note: unicode-math maps \u21e2 to their own function \rightdasharrow.
-// We'll map it to AMS function \dashrightarrow. It produces the same atom.
-
-defineSymbol(math, ams, rel, "\u21e2", "\\dashrightarrow", true); // unicode-math maps \u21e0 to \leftdasharrow. We'll use the AMS synonym.
-
-defineSymbol(math, ams, rel, "\u21e0", "\\dashleftarrow", true);
-defineSymbol(math, ams, rel, "\u21c7", "\\leftleftarrows", true);
-defineSymbol(math, ams, rel, "\u21c6", "\\leftrightarrows", true);
-defineSymbol(math, ams, rel, "\u21da", "\\Lleftarrow", true);
-defineSymbol(math, ams, rel, "\u219e", "\\twoheadleftarrow", true);
-defineSymbol(math, ams, rel, "\u21a2", "\\leftarrowtail", true);
-defineSymbol(math, ams, rel, "\u21ab", "\\looparrowleft", true);
-defineSymbol(math, ams, rel, "\u21cb", "\\leftrightharpoons", true);
-defineSymbol(math, ams, rel, "\u21b6", "\\curvearrowleft", true); // unicode-math maps \u21ba to \acwopencirclearrow. We'll use the AMS synonym.
-
-defineSymbol(math, ams, rel, "\u21ba", "\\circlearrowleft", true);
-defineSymbol(math, ams, rel, "\u21b0", "\\Lsh", true);
-defineSymbol(math, ams, rel, "\u21c8", "\\upuparrows", true);
-defineSymbol(math, ams, rel, "\u21bf", "\\upharpoonleft", true);
-defineSymbol(math, ams, rel, "\u21c3", "\\downharpoonleft", true);
-defineSymbol(math, ams, rel, "\u22b8", "\\multimap", true);
-defineSymbol(math, ams, rel, "\u21ad", "\\leftrightsquigarrow", true);
-defineSymbol(math, ams, rel, "\u21c9", "\\rightrightarrows", true);
-defineSymbol(math, ams, rel, "\u21c4", "\\rightleftarrows", true);
-defineSymbol(math, ams, rel, "\u21a0", "\\twoheadrightarrow", true);
-defineSymbol(math, ams, rel, "\u21a3", "\\rightarrowtail", true);
-defineSymbol(math, ams, rel, "\u21ac", "\\looparrowright", true);
-defineSymbol(math, ams, rel, "\u21b7", "\\curvearrowright", true); // unicode-math maps \u21bb to \cwopencirclearrow. We'll use the AMS synonym.
-
-defineSymbol(math, ams, rel, "\u21bb", "\\circlearrowright", true);
-defineSymbol(math, ams, rel, "\u21b1", "\\Rsh", true);
-defineSymbol(math, ams, rel, "\u21ca", "\\downdownarrows", true);
-defineSymbol(math, ams, rel, "\u21be", "\\upharpoonright", true);
-defineSymbol(math, ams, rel, "\u21c2", "\\downharpoonright", true);
-defineSymbol(math, ams, rel, "\u21dd", "\\rightsquigarrow", true);
-defineSymbol(math, ams, rel, "\u21dd", "\\leadsto");
-defineSymbol(math, ams, rel, "\u21db", "\\Rrightarrow", true);
-defineSymbol(math, ams, rel, "\u21be", "\\restriction");
-defineSymbol(math, main, textord, "\u2018", "`");
-defineSymbol(math, main, textord, "$", "\\$");
-defineSymbol(text$1, main, textord, "$", "\\$");
-defineSymbol(text$1, main, textord, "$", "\\textdollar");
-defineSymbol(math, main, textord, "%", "\\%");
-defineSymbol(text$1, main, textord, "%", "\\%");
-defineSymbol(math, main, textord, "_", "\\_");
-defineSymbol(text$1, main, textord, "_", "\\_");
-defineSymbol(text$1, main, textord, "_", "\\textunderscore");
-defineSymbol(math, main, textord, "\u2220", "\\angle", true);
-defineSymbol(math, main, textord, "\u221e", "\\infty", true);
-defineSymbol(math, main, textord, "\u2032", "\\prime");
-defineSymbol(math, main, textord, "\u25b3", "\\triangle");
-defineSymbol(math, main, textord, "\u0393", "\\Gamma", true);
-defineSymbol(math, main, textord, "\u0394", "\\Delta", true);
-defineSymbol(math, main, textord, "\u0398", "\\Theta", true);
-defineSymbol(math, main, textord, "\u039b", "\\Lambda", true);
-defineSymbol(math, main, textord, "\u039e", "\\Xi", true);
-defineSymbol(math, main, textord, "\u03a0", "\\Pi", true);
-defineSymbol(math, main, textord, "\u03a3", "\\Sigma", true);
-defineSymbol(math, main, textord, "\u03a5", "\\Upsilon", true);
-defineSymbol(math, main, textord, "\u03a6", "\\Phi", true);
-defineSymbol(math, main, textord, "\u03a8", "\\Psi", true);
-defineSymbol(math, main, textord, "\u03a9", "\\Omega", true);
-defineSymbol(math, main, textord, "A", "\u0391");
-defineSymbol(math, main, textord, "B", "\u0392");
-defineSymbol(math, main, textord, "E", "\u0395");
-defineSymbol(math, main, textord, "Z", "\u0396");
-defineSymbol(math, main, textord, "H", "\u0397");
-defineSymbol(math, main, textord, "I", "\u0399");
-defineSymbol(math, main, textord, "K", "\u039A");
-defineSymbol(math, main, textord, "M", "\u039C");
-defineSymbol(math, main, textord, "N", "\u039D");
-defineSymbol(math, main, textord, "O", "\u039F");
-defineSymbol(math, main, textord, "P", "\u03A1");
-defineSymbol(math, main, textord, "T", "\u03A4");
-defineSymbol(math, main, textord, "X", "\u03A7");
-defineSymbol(math, main, textord, "\u00ac", "\\neg", true);
-defineSymbol(math, main, textord, "\u00ac", "\\lnot");
-defineSymbol(math, main, textord, "\u22a4", "\\top");
-defineSymbol(math, main, textord, "\u22a5", "\\bot");
-defineSymbol(math, main, textord, "\u2205", "\\emptyset");
-defineSymbol(math, ams, textord, "\u2205", "\\varnothing");
-defineSymbol(math, main, mathord, "\u03b1", "\\alpha", true);
-defineSymbol(math, main, mathord, "\u03b2", "\\beta", true);
-defineSymbol(math, main, mathord, "\u03b3", "\\gamma", true);
-defineSymbol(math, main, mathord, "\u03b4", "\\delta", true);
-defineSymbol(math, main, mathord, "\u03f5", "\\epsilon", true);
-defineSymbol(math, main, mathord, "\u03b6", "\\zeta", true);
-defineSymbol(math, main, mathord, "\u03b7", "\\eta", true);
-defineSymbol(math, main, mathord, "\u03b8", "\\theta", true);
-defineSymbol(math, main, mathord, "\u03b9", "\\iota", true);
-defineSymbol(math, main, mathord, "\u03ba", "\\kappa", true);
-defineSymbol(math, main, mathord, "\u03bb", "\\lambda", true);
-defineSymbol(math, main, mathord, "\u03bc", "\\mu", true);
-defineSymbol(math, main, mathord, "\u03bd", "\\nu", true);
-defineSymbol(math, main, mathord, "\u03be", "\\xi", true);
-defineSymbol(math, main, mathord, "\u03bf", "\\omicron", true);
-defineSymbol(math, main, mathord, "\u03c0", "\\pi", true);
-defineSymbol(math, main, mathord, "\u03c1", "\\rho", true);
-defineSymbol(math, main, mathord, "\u03c3", "\\sigma", true);
-defineSymbol(math, main, mathord, "\u03c4", "\\tau", true);
-defineSymbol(math, main, mathord, "\u03c5", "\\upsilon", true);
-defineSymbol(math, main, mathord, "\u03d5", "\\phi", true);
-defineSymbol(math, main, mathord, "\u03c7", "\\chi", true);
-defineSymbol(math, main, mathord, "\u03c8", "\\psi", true);
-defineSymbol(math, main, mathord, "\u03c9", "\\omega", true);
-defineSymbol(math, main, mathord, "\u03b5", "\\varepsilon", true);
-defineSymbol(math, main, mathord, "\u03d1", "\\vartheta", true);
-defineSymbol(math, main, mathord, "\u03d6", "\\varpi", true);
-defineSymbol(math, main, mathord, "\u03f1", "\\varrho", true);
-defineSymbol(math, main, mathord, "\u03c2", "\\varsigma", true);
-defineSymbol(math, main, mathord, "\u03c6", "\\varphi", true);
-defineSymbol(math, main, bin, "\u2217", "*");
-defineSymbol(math, main, bin, "+", "+");
-defineSymbol(math, main, bin, "\u2212", "-");
-defineSymbol(math, main, bin, "\u22c5", "\\cdot", true);
-defineSymbol(math, main, bin, "\u2218", "\\circ");
-defineSymbol(math, main, bin, "\u00f7", "\\div", true);
-defineSymbol(math, main, bin, "\u00b1", "\\pm", true);
-defineSymbol(math, main, bin, "\u00d7", "\\times", true);
-defineSymbol(math, main, bin, "\u2229", "\\cap", true);
-defineSymbol(math, main, bin, "\u222a", "\\cup", true);
-defineSymbol(math, main, bin, "\u2216", "\\setminus");
-defineSymbol(math, main, bin, "\u2227", "\\land");
-defineSymbol(math, main, bin, "\u2228", "\\lor");
-defineSymbol(math, main, bin, "\u2227", "\\wedge", true);
-defineSymbol(math, main, bin, "\u2228", "\\vee", true);
-defineSymbol(math, main, textord, "\u221a", "\\surd");
-defineSymbol(math, main, open, "(", "(");
-defineSymbol(math, main, open, "[", "[");
-defineSymbol(math, main, open, "\u27e8", "\\langle", true);
-defineSymbol(math, main, open, "\u2223", "\\lvert");
-defineSymbol(math, main, open, "\u2225", "\\lVert");
-defineSymbol(math, main, close, ")", ")");
-defineSymbol(math, main, close, "]", "]");
-defineSymbol(math, main, close, "?", "?");
-defineSymbol(math, main, close, "!", "!");
-defineSymbol(math, main, close, "\u27e9", "\\rangle", true);
-defineSymbol(math, main, close, "\u2223", "\\rvert");
-defineSymbol(math, main, close, "\u2225", "\\rVert");
-defineSymbol(math, main, rel, "=", "=");
-defineSymbol(math, main, rel, "<", "<");
-defineSymbol(math, main, rel, ">", ">");
-defineSymbol(math, main, rel, ":", ":");
-defineSymbol(math, main, rel, "\u2248", "\\approx", true);
-defineSymbol(math, main, rel, "\u2245", "\\cong", true);
-defineSymbol(math, main, rel, "\u2265", "\\ge");
-defineSymbol(math, main, rel, "\u2265", "\\geq", true);
-defineSymbol(math, main, rel, "\u2190", "\\gets");
-defineSymbol(math, main, rel, ">", "\\gt");
-defineSymbol(math, main, rel, "\u2208", "\\in", true);
-defineSymbol(math, main, rel, "\ue020", "\\@not");
-defineSymbol(math, main, rel, "\u2282", "\\subset", true);
-defineSymbol(math, main, rel, "\u2283", "\\supset", true);
-defineSymbol(math, main, rel, "\u2286", "\\subseteq", true);
-defineSymbol(math, main, rel, "\u2287", "\\supseteq", true);
-defineSymbol(math, ams, rel, "\u2288", "\\nsubseteq", true);
-defineSymbol(math, ams, rel, "\u2289", "\\nsupseteq", true);
-defineSymbol(math, main, rel, "\u22a8", "\\models");
-defineSymbol(math, main, rel, "\u2190", "\\leftarrow", true);
-defineSymbol(math, main, rel, "\u2264", "\\le");
-defineSymbol(math, main, rel, "\u2264", "\\leq", true);
-defineSymbol(math, main, rel, "<", "\\lt");
-defineSymbol(math, main, rel, "\u2192", "\\rightarrow", true);
-defineSymbol(math, main, rel, "\u2192", "\\to");
-defineSymbol(math, ams, rel, "\u2271", "\\ngeq", true);
-defineSymbol(math, ams, rel, "\u2270", "\\nleq", true);
-defineSymbol(math, main, spacing, "\u00a0", "\\ ");
-defineSymbol(math, main, spacing, "\u00a0", "~");
-defineSymbol(math, main, spacing, "\u00a0", "\\space"); // Ref: LaTeX Source 2e: \DeclareRobustCommand{\nobreakspace}{%
-
-defineSymbol(math, main, spacing, "\u00a0", "\\nobreakspace");
-defineSymbol(text$1, main, spacing, "\u00a0", "\\ ");
-defineSymbol(text$1, main, spacing, "\u00a0", "~");
-defineSymbol(text$1, main, spacing, "\u00a0", "\\space");
-defineSymbol(text$1, main, spacing, "\u00a0", "\\nobreakspace");
-defineSymbol(math, main, spacing, null, "\\nobreak");
-defineSymbol(math, main, spacing, null, "\\allowbreak");
-defineSymbol(math, main, punct, ",", ",");
-defineSymbol(math, main, punct, ";", ";");
-defineSymbol(math, ams, bin, "\u22bc", "\\barwedge", true);
-defineSymbol(math, ams, bin, "\u22bb", "\\veebar", true);
-defineSymbol(math, main, bin, "\u2299", "\\odot", true);
-defineSymbol(math, main, bin, "\u2295", "\\oplus", true);
-defineSymbol(math, main, bin, "\u2297", "\\otimes", true);
-defineSymbol(math, main, textord, "\u2202", "\\partial", true);
-defineSymbol(math, main, bin, "\u2298", "\\oslash", true);
-defineSymbol(math, ams, bin, "\u229a", "\\circledcirc", true);
-defineSymbol(math, ams, bin, "\u22a1", "\\boxdot", true);
-defineSymbol(math, main, bin, "\u25b3", "\\bigtriangleup");
-defineSymbol(math, main, bin, "\u25bd", "\\bigtriangledown");
-defineSymbol(math, main, bin, "\u2020", "\\dagger");
-defineSymbol(math, main, bin, "\u22c4", "\\diamond");
-defineSymbol(math, main, bin, "\u22c6", "\\star");
-defineSymbol(math, main, bin, "\u25c3", "\\triangleleft");
-defineSymbol(math, main, bin, "\u25b9", "\\triangleright");
-defineSymbol(math, main, open, "{", "\\{");
-defineSymbol(text$1, main, textord, "{", "\\{");
-defineSymbol(text$1, main, textord, "{", "\\textbraceleft");
-defineSymbol(math, main, close, "}", "\\}");
-defineSymbol(text$1, main, textord, "}", "\\}");
-defineSymbol(text$1, main, textord, "}", "\\textbraceright");
-defineSymbol(math, main, open, "{", "\\lbrace");
-defineSymbol(math, main, close, "}", "\\rbrace");
-defineSymbol(math, main, open, "[", "\\lbrack");
-defineSymbol(text$1, main, textord, "[", "\\lbrack");
-defineSymbol(math, main, close, "]", "\\rbrack");
-defineSymbol(text$1, main, textord, "]", "\\rbrack");
-defineSymbol(math, main, open, "(", "\\lparen");
-defineSymbol(math, main, close, ")", "\\rparen");
-defineSymbol(text$1, main, textord, "<", "\\textless"); // in T1 fontenc
-
-defineSymbol(text$1, main, textord, ">", "\\textgreater"); // in T1 fontenc
-
-defineSymbol(math, main, open, "\u230a", "\\lfloor", true);
-defineSymbol(math, main, close, "\u230b", "\\rfloor", true);
-defineSymbol(math, main, open, "\u2308", "\\lceil", true);
-defineSymbol(math, main, close, "\u2309", "\\rceil", true);
-defineSymbol(math, main, textord, "\\", "\\backslash");
-defineSymbol(math, main, textord, "\u2223", "|");
-defineSymbol(math, main, textord, "\u2223", "\\vert");
-defineSymbol(text$1, main, textord, "|", "\\textbar"); // in T1 fontenc
-
-defineSymbol(math, main, textord, "\u2225", "\\|");
-defineSymbol(math, main, textord, "\u2225", "\\Vert");
-defineSymbol(text$1, main, textord, "\u2225", "\\textbardbl");
-defineSymbol(text$1, main, textord, "~", "\\textasciitilde");
-defineSymbol(text$1, main, textord, "\\", "\\textbackslash");
-defineSymbol(text$1, main, textord, "^", "\\textasciicircum");
-defineSymbol(math, main, rel, "\u2191", "\\uparrow", true);
-defineSymbol(math, main, rel, "\u21d1", "\\Uparrow", true);
-defineSymbol(math, main, rel, "\u2193", "\\downarrow", true);
-defineSymbol(math, main, rel, "\u21d3", "\\Downarrow", true);
-defineSymbol(math, main, rel, "\u2195", "\\updownarrow", true);
-defineSymbol(math, main, rel, "\u21d5", "\\Updownarrow", true);
-defineSymbol(math, main, op, "\u2210", "\\coprod");
-defineSymbol(math, main, op, "\u22c1", "\\bigvee");
-defineSymbol(math, main, op, "\u22c0", "\\bigwedge");
-defineSymbol(math, main, op, "\u2a04", "\\biguplus");
-defineSymbol(math, main, op, "\u22c2", "\\bigcap");
-defineSymbol(math, main, op, "\u22c3", "\\bigcup");
-defineSymbol(math, main, op, "\u222b", "\\int");
-defineSymbol(math, main, op, "\u222b", "\\intop");
-defineSymbol(math, main, op, "\u222c", "\\iint");
-defineSymbol(math, main, op, "\u222d", "\\iiint");
-defineSymbol(math, main, op, "\u220f", "\\prod");
-defineSymbol(math, main, op, "\u2211", "\\sum");
-defineSymbol(math, main, op, "\u2a02", "\\bigotimes");
-defineSymbol(math, main, op, "\u2a01", "\\bigoplus");
-defineSymbol(math, main, op, "\u2a00", "\\bigodot");
-defineSymbol(math, main, op, "\u222e", "\\oint");
-defineSymbol(math, main, op, "\u222f", "\\oiint");
-defineSymbol(math, main, op, "\u2230", "\\oiiint");
-defineSymbol(math, main, op, "\u2a06", "\\bigsqcup");
-defineSymbol(math, main, op, "\u222b", "\\smallint");
-defineSymbol(text$1, main, inner, "\u2026", "\\textellipsis");
-defineSymbol(math, main, inner, "\u2026", "\\mathellipsis");
-defineSymbol(text$1, main, inner, "\u2026", "\\ldots", true);
-defineSymbol(math, main, inner, "\u2026", "\\ldots", true);
-defineSymbol(math, main, inner, "\u22ef", "\\@cdots", true);
-defineSymbol(math, main, inner, "\u22f1", "\\ddots", true);
-defineSymbol(math, main, textord, "\u22ee", "\\varvdots"); // \vdots is a macro
-
-defineSymbol(math, main, accent, "\u02ca", "\\acute");
-defineSymbol(math, main, accent, "\u02cb", "\\grave");
-defineSymbol(math, main, accent, "\u00a8", "\\ddot");
-defineSymbol(math, main, accent, "\u007e", "\\tilde");
-defineSymbol(math, main, accent, "\u02c9", "\\bar");
-defineSymbol(math, main, accent, "\u02d8", "\\breve");
-defineSymbol(math, main, accent, "\u02c7", "\\check");
-defineSymbol(math, main, accent, "\u005e", "\\hat");
-defineSymbol(math, main, accent, "\u20d7", "\\vec");
-defineSymbol(math, main, accent, "\u02d9", "\\dot");
-defineSymbol(math, main, accent, "\u02da", "\\mathring");
-defineSymbol(math, main, mathord, "\u0131", "\\imath", true);
-defineSymbol(math, main, mathord, "\u0237", "\\jmath", true);
-defineSymbol(text$1, main, textord, "\u0131", "\\i", true);
-defineSymbol(text$1, main, textord, "\u0237", "\\j", true);
-defineSymbol(text$1, main, textord, "\u00df", "\\ss", true);
-defineSymbol(text$1, main, textord, "\u00e6", "\\ae", true);
-defineSymbol(text$1, main, textord, "\u00e6", "\\ae", true);
-defineSymbol(text$1, main, textord, "\u0153", "\\oe", true);
-defineSymbol(text$1, main, textord, "\u00f8", "\\o", true);
-defineSymbol(text$1, main, textord, "\u00c6", "\\AE", true);
-defineSymbol(text$1, main, textord, "\u0152", "\\OE", true);
-defineSymbol(text$1, main, textord, "\u00d8", "\\O", true);
-defineSymbol(text$1, main, accent, "\u02ca", "\\'"); // acute
-
-defineSymbol(text$1, main, accent, "\u02cb", "\\`"); // grave
-
-defineSymbol(text$1, main, accent, "\u02c6", "\\^"); // circumflex
-
-defineSymbol(text$1, main, accent, "\u02dc", "\\~"); // tilde
-
-defineSymbol(text$1, main, accent, "\u02c9", "\\="); // macron
-
-defineSymbol(text$1, main, accent, "\u02d8", "\\u"); // breve
-
-defineSymbol(text$1, main, accent, "\u02d9", "\\."); // dot above
-
-defineSymbol(text$1, main, accent, "\u02da", "\\r"); // ring above
-
-defineSymbol(text$1, main, accent, "\u02c7", "\\v"); // caron
-
-defineSymbol(text$1, main, accent, "\u00a8", '\\"'); // diaresis
-
-defineSymbol(text$1, main, accent, "\u02dd", "\\H"); // double acute
-
-defineSymbol(text$1, main, accent, "\u25ef", "\\textcircled"); // \bigcirc glyph
-// These ligatures are detected and created in Parser.js's `formLigatures`.
-
-const ligatures = {
-  "--": true,
-  "---": true,
-  "``": true,
-  "''": true
-};
-defineSymbol(text$1, main, textord, "\u2013", "--");
-defineSymbol(text$1, main, textord, "\u2013", "\\textendash");
-defineSymbol(text$1, main, textord, "\u2014", "---");
-defineSymbol(text$1, main, textord, "\u2014", "\\textemdash");
-defineSymbol(text$1, main, textord, "\u2018", "`");
-defineSymbol(text$1, main, textord, "\u2018", "\\textquoteleft");
-defineSymbol(text$1, main, textord, "\u2019", "'");
-defineSymbol(text$1, main, textord, "\u2019", "\\textquoteright");
-defineSymbol(text$1, main, textord, "\u201c", "``");
-defineSymbol(text$1, main, textord, "\u201c", "\\textquotedblleft");
-defineSymbol(text$1, main, textord, "\u201d", "''");
-defineSymbol(text$1, main, textord, "\u201d", "\\textquotedblright"); //  \degree from gensymb package
-
-defineSymbol(math, main, textord, "\u00b0", "\\degree", true);
-defineSymbol(text$1, main, textord, "\u00b0", "\\degree"); // \textdegree from inputenc package
-
-defineSymbol(text$1, main, textord, "\u00b0", "\\textdegree", true); // TODO: In LaTeX, \pounds can generate a different character in text and math
-// mode, but among our fonts, only Main-Italic defines this character "163".
-
-defineSymbol(math, main, mathord, "\u00a3", "\\pounds");
-defineSymbol(math, main, mathord, "\u00a3", "\\mathsterling", true);
-defineSymbol(text$1, main, mathord, "\u00a3", "\\pounds");
-defineSymbol(text$1, main, mathord, "\u00a3", "\\textsterling", true);
-defineSymbol(math, ams, textord, "\u2720", "\\maltese");
-defineSymbol(text$1, ams, textord, "\u2720", "\\maltese");
-defineSymbol(text$1, main, spacing, "\u00a0", "\\ ");
-defineSymbol(text$1, main, spacing, "\u00a0", " ");
-defineSymbol(text$1, main, spacing, "\u00a0", "~"); // There are lots of symbols which are the same, so we add them in afterwards.
-// All of these are textords in math mode
-
-const mathTextSymbols = "0123456789/@.\"";
-
-for (let i = 0; i < mathTextSymbols.length; i++) {
-  const ch = mathTextSymbols.charAt(i);
-  defineSymbol(math, main, textord, ch, ch);
-} // All of these are textords in text mode
-
-
-const textSymbols = "0123456789!@*()-=+[]<>|\";:?/.,";
-
-for (let i = 0; i < textSymbols.length; i++) {
-  const ch = textSymbols.charAt(i);
-  defineSymbol(text$1, main, textord, ch, ch);
-} // All of these are textords in text mode, and mathords in math mode
-
-
-const letters = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
-
-for (let i = 0; i < letters.length; i++) {
-  const ch = letters.charAt(i);
-  defineSymbol(math, main, mathord, ch, ch);
-  defineSymbol(text$1, main, textord, ch, ch);
-} // Blackboard bold and script letters in Unicode range
-
-
-defineSymbol(math, ams, textord, "C", "\u2102"); // blackboard bold
-
-defineSymbol(text$1, ams, textord, "C", "\u2102");
-defineSymbol(math, ams, textord, "H", "\u210D");
-defineSymbol(text$1, ams, textord, "H", "\u210D");
-defineSymbol(math, ams, textord, "N", "\u2115");
-defineSymbol(text$1, ams, textord, "N", "\u2115");
-defineSymbol(math, ams, textord, "P", "\u2119");
-defineSymbol(text$1, ams, textord, "P", "\u2119");
-defineSymbol(math, ams, textord, "Q", "\u211A");
-defineSymbol(text$1, ams, textord, "Q", "\u211A");
-defineSymbol(math, ams, textord, "R", "\u211D");
-defineSymbol(text$1, ams, textord, "R", "\u211D");
-defineSymbol(math, ams, textord, "Z", "\u2124");
-defineSymbol(text$1, ams, textord, "Z", "\u2124");
-defineSymbol(math, main, mathord, "h", "\u210E"); // italic h, Planck constant
-
-defineSymbol(text$1, main, mathord, "h", "\u210E"); // The next loop loads wide (surrogate pair) characters.
-// We support some letters in the Unicode range U+1D400 to U+1D7FF,
-// Mathematical Alphanumeric Symbols.
-// Some editors do not deal well with wide characters. So don't write the
-// string into this file. Instead, create the string from the surrogate pair.
-
-let wideChar = "";
-
-for (let i = 0; i < letters.length; i++) {
-  const ch = letters.charAt(i); // The hex numbers in the next line are a surrogate pair.
-  // 0xD835 is the high surrogate for all letters in the range we support.
-  // 0xDC00 is the low surrogate for bold A.
-
-  wideChar = String.fromCharCode(0xD835, 0xDC00 + i); // A-Z a-z bold
-
-  defineSymbol(math, main, mathord, ch, wideChar);
-  defineSymbol(text$1, main, textord, ch, wideChar);
-  wideChar = String.fromCharCode(0xD835, 0xDC34 + i); // A-Z a-z italic
-
-  defineSymbol(math, main, mathord, ch, wideChar);
-  defineSymbol(text$1, main, textord, ch, wideChar);
-  wideChar = String.fromCharCode(0xD835, 0xDC68 + i); // A-Z a-z bold italic
-
-  defineSymbol(math, main, mathord, ch, wideChar);
-  defineSymbol(text$1, main, textord, ch, wideChar);
-  wideChar = String.fromCharCode(0xD835, 0xDD04 + i); // A-Z a-z Fractur
-
-  defineSymbol(math, main, mathord, ch, wideChar);
-  defineSymbol(text$1, main, textord, ch, wideChar);
-  wideChar = String.fromCharCode(0xD835, 0xDDA0 + i); // A-Z a-z sans-serif
-
-  defineSymbol(math, main, mathord, ch, wideChar);
-  defineSymbol(text$1, main, textord, ch, wideChar);
-  wideChar = String.fromCharCode(0xD835, 0xDDD4 + i); // A-Z a-z sans bold
-
-  defineSymbol(math, main, mathord, ch, wideChar);
-  defineSymbol(text$1, main, textord, ch, wideChar);
-  wideChar = String.fromCharCode(0xD835, 0xDE08 + i); // A-Z a-z sans italic
-
-  defineSymbol(math, main, mathord, ch, wideChar);
-  defineSymbol(text$1, main, textord, ch, wideChar);
-  wideChar = String.fromCharCode(0xD835, 0xDE70 + i); // A-Z a-z monospace
-
-  defineSymbol(math, main, mathord, ch, wideChar);
-  defineSymbol(text$1, main, textord, ch, wideChar);
-
-  if (i < 26) {
-    // KaTeX fonts have only capital letters for blackboard bold and script.
-    // See exception for k below.
-    wideChar = String.fromCharCode(0xD835, 0xDD38 + i); // A-Z double struck
-
-    defineSymbol(math, main, mathord, ch, wideChar);
-    defineSymbol(text$1, main, textord, ch, wideChar);
-    wideChar = String.fromCharCode(0xD835, 0xDC9C + i); // A-Z script
-
-    defineSymbol(math, main, mathord, ch, wideChar);
-    defineSymbol(text$1, main, textord, ch, wideChar);
-  } // TODO: Add bold script when it is supported by a KaTeX font.
-
-} // "k" is the only double struck lower case letter in the KaTeX fonts.
-
-
-wideChar = String.fromCharCode(0xD835, 0xDD5C); // k double struck
-
-defineSymbol(math, main, mathord, "k", wideChar);
-defineSymbol(text$1, main, textord, "k", wideChar); // Next, some wide character numerals
-
-for (let i = 0; i < 10; i++) {
-  const ch = i.toString();
-  wideChar = String.fromCharCode(0xD835, 0xDFCE + i); // 0-9 bold
-
-  defineSymbol(math, main, mathord, ch, wideChar);
-  defineSymbol(text$1, main, textord, ch, wideChar);
-  wideChar = String.fromCharCode(0xD835, 0xDFE2 + i); // 0-9 sans serif
-
-  defineSymbol(math, main, mathord, ch, wideChar);
-  defineSymbol(text$1, main, textord, ch, wideChar);
-  wideChar = String.fromCharCode(0xD835, 0xDFEC + i); // 0-9 bold sans
-
-  defineSymbol(math, main, mathord, ch, wideChar);
-  defineSymbol(text$1, main, textord, ch, wideChar);
-  wideChar = String.fromCharCode(0xD835, 0xDFF6 + i); // 0-9 monospace
-
-  defineSymbol(math, main, mathord, ch, wideChar);
-  defineSymbol(text$1, main, textord, ch, wideChar);
-} // We add these Latin-1 letters as symbols for backwards-compatibility,
-// but they are not actually in the font, nor are they supported by the
-// Unicode accent mechanism, so they fall back to Times font and look ugly.
-// TODO(edemaine): Fix this.
-
-
-const extraLatin = "ÇÐÞçþ";
-
-for (let i = 0; i < extraLatin.length; i++) {
-  const ch = extraLatin.charAt(i);
-  defineSymbol(math, main, mathord, ch, ch);
-  defineSymbol(text$1, main, textord, ch, ch);
-}
-
-defineSymbol(text$1, main, textord, "ð", "ð"); // Unicode versions of existing characters
-
-defineSymbol(text$1, main, textord, "\u2013", "–");
-defineSymbol(text$1, main, textord, "\u2014", "—");
-defineSymbol(text$1, main, textord, "\u2018", "‘");
-defineSymbol(text$1, main, textord, "\u2019", "’");
-defineSymbol(text$1, main, textord, "\u201c", "“");
-defineSymbol(text$1, main, textord, "\u201d", "”");
-
-/**
- * This file provides support for Unicode range U+1D400 to U+1D7FF,
- * Mathematical Alphanumeric Symbols.
- *
- * Function wideCharacterFont takes a wide character as input and returns
- * the font information necessary to render it properly.
- */
-/**
- * Data below is from https://www.unicode.org/charts/PDF/U1D400.pdf
- * That document sorts characters into groups by font type, say bold or italic.
- *
- * In the arrays below, each subarray consists three elements:
- *      * The CSS class of that group when in math mode.
- *      * The CSS class of that group when in text mode.
- *      * The font name, so that KaTeX can get font metrics.
- */
-
-const wideLatinLetterData = [["mathbf", "textbf", "Main-Bold"], // A-Z bold upright
-["mathbf", "textbf", "Main-Bold"], // a-z bold upright
-["mathdefault", "textit", "Math-Italic"], // A-Z italic
-["mathdefault", "textit", "Math-Italic"], // a-z italic
-["boldsymbol", "boldsymbol", "Main-BoldItalic"], // A-Z bold italic
-["boldsymbol", "boldsymbol", "Main-BoldItalic"], // a-z bold italic
-// Map fancy A-Z letters to script, not calligraphic.
-// This aligns with unicode-math and math fonts (except Cambria Math).
-["mathscr", "textscr", "Script-Regular"], // A-Z script
-["", "", ""], // a-z script.  No font
-["", "", ""], // A-Z bold script. No font
-["", "", ""], // a-z bold script. No font
-["mathfrak", "textfrak", "Fraktur-Regular"], // A-Z Fraktur
-["mathfrak", "textfrak", "Fraktur-Regular"], // a-z Fraktur
-["mathbb", "textbb", "AMS-Regular"], // A-Z double-struck
-["mathbb", "textbb", "AMS-Regular"], // k double-struck
-["", "", ""], // A-Z bold Fraktur No font metrics
-["", "", ""], // a-z bold Fraktur.   No font.
-["mathsf", "textsf", "SansSerif-Regular"], // A-Z sans-serif
-["mathsf", "textsf", "SansSerif-Regular"], // a-z sans-serif
-["mathboldsf", "textboldsf", "SansSerif-Bold"], // A-Z bold sans-serif
-["mathboldsf", "textboldsf", "SansSerif-Bold"], // a-z bold sans-serif
-["mathitsf", "textitsf", "SansSerif-Italic"], // A-Z italic sans-serif
-["mathitsf", "textitsf", "SansSerif-Italic"], // a-z italic sans-serif
-["", "", ""], // A-Z bold italic sans. No font
-["", "", ""], // a-z bold italic sans. No font
-["mathtt", "texttt", "Typewriter-Regular"], // A-Z monospace
-["mathtt", "texttt", "Typewriter-Regular"]];
-const wideNumeralData = [["mathbf", "textbf", "Main-Bold"], // 0-9 bold
-["", "", ""], // 0-9 double-struck. No KaTeX font.
-["mathsf", "textsf", "SansSerif-Regular"], // 0-9 sans-serif
-["mathboldsf", "textboldsf", "SansSerif-Bold"], // 0-9 bold sans-serif
-["mathtt", "texttt", "Typewriter-Regular"]];
-const wideCharacterFont = function wideCharacterFont(wideChar, mode) {
-  // IE doesn't support codePointAt(). So work with the surrogate pair.
-  const H = wideChar.charCodeAt(0); // high surrogate
-
-  const L = wideChar.charCodeAt(1); // low surrogate
-
-  const codePoint = (H - 0xD800) * 0x400 + (L - 0xDC00) + 0x10000;
-  const j = mode === "math" ? 0 : 1; // column index for CSS class.
-
-  if (0x1D400 <= codePoint && codePoint < 0x1D6A4) {
-    // wideLatinLetterData contains exactly 26 chars on each row.
-    // So we can calculate the relevant row. No traverse necessary.
-    const i = Math.floor((codePoint - 0x1D400) / 26);
-    return [wideLatinLetterData[i][2], wideLatinLetterData[i][j]];
-  } else if (0x1D7CE <= codePoint && codePoint <= 0x1D7FF) {
-    // Numerals, ten per row.
-    const i = Math.floor((codePoint - 0x1D7CE) / 10);
-    return [wideNumeralData[i][2], wideNumeralData[i][j]];
-  } else if (codePoint === 0x1D6A5 || codePoint === 0x1D6A6) {
-    // dotless i or j
-    return [wideLatinLetterData[0][2], wideLatinLetterData[0][j]];
-  } else if (0x1D6A6 < codePoint && codePoint < 0x1D7CE) {
-    // Greek letters. Not supported, yet.
-    return ["", ""];
-  } else {
-    // We don't support any wide characters outside 1D400–1D7FF.
-    throw new ParseError("Unsupported character: " + wideChar);
-  }
-};
-
-/**
- * This file contains information about the options that the Parser carries
- * around with it while parsing. Data is held in an `Options` object, and when
- * recursing, a new `Options` object can be created with the `.with*` and
- * `.reset` functions.
- */
-const sizeStyleMap = [// Each element contains [textsize, scriptsize, scriptscriptsize].
-// The size mappings are taken from TeX with \normalsize=10pt.
-[1, 1, 1], // size1: [5, 5, 5]              \tiny
-[2, 1, 1], // size2: [6, 5, 5]
-[3, 1, 1], // size3: [7, 5, 5]              \scriptsize
-[4, 2, 1], // size4: [8, 6, 5]              \footnotesize
-[5, 2, 1], // size5: [9, 6, 5]              \small
-[6, 3, 1], // size6: [10, 7, 5]             \normalsize
-[7, 4, 2], // size7: [12, 8, 6]             \large
-[8, 6, 3], // size8: [14.4, 10, 7]          \Large
-[9, 7, 6], // size9: [17.28, 12, 10]        \LARGE
-[10, 8, 7], // size10: [20.74, 14.4, 12]     \huge
-[11, 10, 9]];
-const sizeMultipliers = [// fontMetrics.js:getGlobalMetrics also uses size indexes, so if
-// you change size indexes, change that function.
-0.5, 0.6, 0.7, 0.8, 0.9, 1.0, 1.2, 1.44, 1.728, 2.074, 2.488];
-
-const sizeAtStyle = function sizeAtStyle(size, style) {
-  return style.size < 2 ? size : sizeStyleMap[size - 1][style.size - 1];
-}; // In these types, "" (empty string) means "no change".
-
-
-/**
- * This is the main options class. It contains the current style, size, color,
- * and font.
- *
- * Options objects should not be modified. To create a new Options with
- * different properties, call a `.having*` method.
- */
-class Options {
-  // A font family applies to a group of fonts (i.e. SansSerif), while a font
-  // represents a specific font (i.e. SansSerif Bold).
-  // See: https://tex.stackexchange.com/questions/22350/difference-between-textrm-and-mathrm
-
-  /**
-   * The base size index.
-   */
-  constructor(data) {
-    this.style = void 0;
-    this.color = void 0;
-    this.size = void 0;
-    this.textSize = void 0;
-    this.phantom = void 0;
-    this.font = void 0;
-    this.fontFamily = void 0;
-    this.fontWeight = void 0;
-    this.fontShape = void 0;
-    this.sizeMultiplier = void 0;
-    this.maxSize = void 0;
-    this.minRuleThickness = void 0;
-    this._fontMetrics = void 0;
-    this.style = data.style;
-    this.color = data.color;
-    this.size = data.size || Options.BASESIZE;
-    this.textSize = data.textSize || this.size;
-    this.phantom = !!data.phantom;
-    this.font = data.font || "";
-    this.fontFamily = data.fontFamily || "";
-    this.fontWeight = data.fontWeight || '';
-    this.fontShape = data.fontShape || '';
-    this.sizeMultiplier = sizeMultipliers[this.size - 1];
-    this.maxSize = data.maxSize;
-    this.minRuleThickness = data.minRuleThickness;
-    this._fontMetrics = undefined;
-  }
-  /**
-   * Returns a new options object with the same properties as "this".  Properties
-   * from "extension" will be copied to the new options object.
-   */
-
-
-  extend(extension) {
-    const data = {
-      style: this.style,
-      size: this.size,
-      textSize: this.textSize,
-      color: this.color,
-      phantom: this.phantom,
-      font: this.font,
-      fontFamily: this.fontFamily,
-      fontWeight: this.fontWeight,
-      fontShape: this.fontShape,
-      maxSize: this.maxSize,
-      minRuleThickness: this.minRuleThickness
-    };
-
-    for (const key in extension) {
-      if (extension.hasOwnProperty(key)) {
-        data[key] = extension[key];
-      }
-    }
-
-    return new Options(data);
-  }
-  /**
-   * Return an options object with the given style. If `this.style === style`,
-   * returns `this`.
-   */
-
-
-  havingStyle(style) {
-    if (this.style === style) {
-      return this;
-    } else {
-      return this.extend({
-        style: style,
-        size: sizeAtStyle(this.textSize, style)
-      });
-    }
-  }
-  /**
-   * Return an options object with a cramped version of the current style. If
-   * the current style is cramped, returns `this`.
-   */
-
-
-  havingCrampedStyle() {
-    return this.havingStyle(this.style.cramp());
-  }
-  /**
-   * Return an options object with the given size and in at least `\textstyle`.
-   * Returns `this` if appropriate.
-   */
-
-
-  havingSize(size) {
-    if (this.size === size && this.textSize === size) {
-      return this;
-    } else {
-      return this.extend({
-        style: this.style.text(),
-        size: size,
-        textSize: size,
-        sizeMultiplier: sizeMultipliers[size - 1]
-      });
-    }
-  }
-  /**
-   * Like `this.havingSize(BASESIZE).havingStyle(style)`. If `style` is omitted,
-   * changes to at least `\textstyle`.
-   */
-
-
-  havingBaseStyle(style) {
-    style = style || this.style.text();
-    const wantSize = sizeAtStyle(Options.BASESIZE, style);
-
-    if (this.size === wantSize && this.textSize === Options.BASESIZE && this.style === style) {
-      return this;
-    } else {
-      return this.extend({
-        style: style,
-        size: wantSize
-      });
-    }
-  }
-  /**
-   * Remove the effect of sizing changes such as \Huge.
-   * Keep the effect of the current style, such as \scriptstyle.
-   */
-
-
-  havingBaseSizing() {
-    let size;
-
-    switch (this.style.id) {
-      case 4:
-      case 5:
-        size = 3; // normalsize in scriptstyle
-
-        break;
-
-      case 6:
-      case 7:
-        size = 1; // normalsize in scriptscriptstyle
-
-        break;
-
-      default:
-        size = 6;
-      // normalsize in textstyle or displaystyle
-    }
-
-    return this.extend({
-      style: this.style.text(),
-      size: size
-    });
-  }
-  /**
-   * Create a new options object with the given color.
-   */
-
-
-  withColor(color) {
-    return this.extend({
-      color: color
-    });
-  }
-  /**
-   * Create a new options object with "phantom" set to true.
-   */
-
-
-  withPhantom() {
-    return this.extend({
-      phantom: true
-    });
-  }
-  /**
-   * Creates a new options object with the given math font or old text font.
-   * @type {[type]}
-   */
-
-
-  withFont(font) {
-    return this.extend({
-      font
-    });
-  }
-  /**
-   * Create a new options objects with the given fontFamily.
-   */
-
-
-  withTextFontFamily(fontFamily) {
-    return this.extend({
-      fontFamily,
-      font: ""
-    });
-  }
-  /**
-   * Creates a new options object with the given font weight
-   */
-
-
-  withTextFontWeight(fontWeight) {
-    return this.extend({
-      fontWeight,
-      font: ""
-    });
-  }
-  /**
-   * Creates a new options object with the given font weight
-   */
-
-
-  withTextFontShape(fontShape) {
-    return this.extend({
-      fontShape,
-      font: ""
-    });
-  }
-  /**
-   * Return the CSS sizing classes required to switch from enclosing options
-   * `oldOptions` to `this`. Returns an array of classes.
-   */
-
-
-  sizingClasses(oldOptions) {
-    if (oldOptions.size !== this.size) {
-      return ["sizing", "reset-size" + oldOptions.size, "size" + this.size];
-    } else {
-      return [];
-    }
-  }
-  /**
-   * Return the CSS sizing classes required to switch to the base size. Like
-   * `this.havingSize(BASESIZE).sizingClasses(this)`.
-   */
-
-
-  baseSizingClasses() {
-    if (this.size !== Options.BASESIZE) {
-      return ["sizing", "reset-size" + this.size, "size" + Options.BASESIZE];
-    } else {
-      return [];
-    }
-  }
-  /**
-   * Return the font metrics for this size.
-   */
-
-
-  fontMetrics() {
-    if (!this._fontMetrics) {
-      this._fontMetrics = getGlobalMetrics(this.size);
-    }
-
-    return this._fontMetrics;
-  }
-  /**
-   * Gets the CSS color of the current options object
-   */
-
-
-  getColor() {
-    if (this.phantom) {
-      return "transparent";
-    } else {
-      return this.color;
-    }
-  }
-
-}
-
-Options.BASESIZE = 6;
-
-/**
- * This file does conversion between units.  In particular, it provides
- * calculateSize to convert other units into ems.
- */
-// Thus, multiplying a length by this number converts the length from units
-// into pts.  Dividing the result by ptPerEm gives the number of ems
-// *assuming* a font size of ptPerEm (normal size, normal style).
-
-const ptPerUnit = {
-  // https://en.wikibooks.org/wiki/LaTeX/Lengths and
-  // https://tex.stackexchange.com/a/8263
-  "pt": 1,
-  // TeX point
-  "mm": 7227 / 2540,
-  // millimeter
-  "cm": 7227 / 254,
-  // centimeter
-  "in": 72.27,
-  // inch
-  "bp": 803 / 800,
-  // big (PostScript) points
-  "pc": 12,
-  // pica
-  "dd": 1238 / 1157,
-  // didot
-  "cc": 14856 / 1157,
-  // cicero (12 didot)
-  "nd": 685 / 642,
-  // new didot
-  "nc": 1370 / 107,
-  // new cicero (12 new didot)
-  "sp": 1 / 65536,
-  // scaled point (TeX's internal smallest unit)
-  // https://tex.stackexchange.com/a/41371
-  "px": 803 / 800 // \pdfpxdimen defaults to 1 bp in pdfTeX and LuaTeX
-
-}; // Dictionary of relative units, for fast validity testing.
-
-const relativeUnit = {
-  "ex": true,
-  "em": true,
-  "mu": true
-};
-
-/**
- * Determine whether the specified unit (either a string defining the unit
- * or a "size" parse node containing a unit field) is valid.
- */
-const validUnit = function validUnit(unit) {
-  if (typeof unit !== "string") {
-    unit = unit.unit;
-  }
-
-  return unit in ptPerUnit || unit in relativeUnit || unit === "ex";
-};
-/*
- * Convert a "size" parse node (with numeric "number" and string "unit" fields,
- * as parsed by functions.js argType "size") into a CSS em value for the
- * current style/scale.  `options` gives the current options.
- */
-
-const calculateSize = function calculateSize(sizeValue, options) {
-  let scale;
-
-  if (sizeValue.unit in ptPerUnit) {
-    // Absolute units
-    scale = ptPerUnit[sizeValue.unit] // Convert unit to pt
-    / options.fontMetrics().ptPerEm // Convert pt to CSS em
-    / options.sizeMultiplier; // Unscale to make absolute units
-  } else if (sizeValue.unit === "mu") {
-    // `mu` units scale with scriptstyle/scriptscriptstyle.
-    scale = options.fontMetrics().cssEmPerMu;
-  } else {
-    // Other relative units always refer to the *textstyle* font
-    // in the current size.
-    let unitOptions;
-
-    if (options.style.isTight()) {
-      // isTight() means current style is script/scriptscript.
-      unitOptions = options.havingStyle(options.style.text());
-    } else {
-      unitOptions = options;
-    } // TODO: In TeX these units are relative to the quad of the current
-    // *text* font, e.g. cmr10. KaTeX instead uses values from the
-    // comparably-sized *Computer Modern symbol* font. At 10pt, these
-    // match. At 7pt and 5pt, they differ: cmr7=1.138894, cmsy7=1.170641;
-    // cmr5=1.361133, cmsy5=1.472241. Consider $\scriptsize a\kern1emb$.
-    // TeX \showlists shows a kern of 1.13889 * fontsize;
-    // KaTeX shows a kern of 1.171 * fontsize.
-
-
-    if (sizeValue.unit === "ex") {
-      scale = unitOptions.fontMetrics().xHeight;
-    } else if (sizeValue.unit === "em") {
-      scale = unitOptions.fontMetrics().quad;
-    } else {
-      throw new ParseError("Invalid unit: '" + sizeValue.unit + "'");
-    }
-
-    if (unitOptions !== options) {
-      scale *= unitOptions.sizeMultiplier / options.sizeMultiplier;
-    }
-  }
-
-  return Math.min(sizeValue.number * scale, options.maxSize);
-};
-
-/* eslint no-console:0 */
-// The following have to be loaded from Main-Italic font, using class mathit
-const mathitLetters = ["\\imath", "ı", // dotless i
-"\\jmath", "ȷ", // dotless j
-"\\pounds", "\\mathsterling", "\\textsterling", "£"];
-/**
- * Looks up the given symbol in fontMetrics, after applying any symbol
- * replacements defined in symbol.js
- */
-
-const lookupSymbol = function lookupSymbol(value, // TODO(#963): Use a union type for this.
-fontName, mode) {
-  // Replace the value with its replaced value from symbol.js
-  if (symbols[mode][value] && symbols[mode][value].replace) {
-    value = symbols[mode][value].replace;
-  }
-
-  return {
-    value: value,
-    metrics: getCharacterMetrics(value, fontName, mode)
-  };
-};
-/**
- * Makes a symbolNode after translation via the list of symbols in symbols.js.
- * Correctly pulls out metrics for the character, and optionally takes a list of
- * classes to be attached to the node.
- *
- * TODO: make argument order closer to makeSpan
- * TODO: add a separate argument for math class (e.g. `mop`, `mbin`), which
- * should if present come first in `classes`.
- * TODO(#953): Make `options` mandatory and always pass it in.
- */
-
-
-const makeSymbol = function makeSymbol(value, fontName, mode, options, classes) {
-  const lookup = lookupSymbol(value, fontName, mode);
-  const metrics = lookup.metrics;
-  value = lookup.value;
-  let symbolNode;
-
-  if (metrics) {
-    let italic = metrics.italic;
-
-    if (mode === "text" || options && options.font === "mathit") {
-      italic = 0;
-    }
-
-    symbolNode = new SymbolNode(value, metrics.height, metrics.depth, italic, metrics.skew, metrics.width, classes);
-  } else {
-    // TODO(emily): Figure out a good way to only print this in development
-    typeof console !== "undefined" && console.warn("No character metrics " + `for '${value}' in style '${fontName}' and mode '${mode}'`);
-    symbolNode = new SymbolNode(value, 0, 0, 0, 0, 0, classes);
-  }
-
-  if (options) {
-    symbolNode.maxFontSize = options.sizeMultiplier;
-
-    if (options.style.isTight()) {
-      symbolNode.classes.push("mtight");
-    }
-
-    const color = options.getColor();
-
-    if (color) {
-      symbolNode.style.color = color;
-    }
-  }
-
-  return symbolNode;
-};
-/**
- * Makes a symbol in Main-Regular or AMS-Regular.
- * Used for rel, bin, open, close, inner, and punct.
- */
-
-
-const mathsym = function mathsym(value, mode, options, classes) {
-  if (classes === void 0) {
-    classes = [];
-  }
-
-  // Decide what font to render the symbol in by its entry in the symbols
-  // table.
-  // Have a special case for when the value = \ because the \ is used as a
-  // textord in unsupported command errors but cannot be parsed as a regular
-  // text ordinal and is therefore not present as a symbol in the symbols
-  // table for text, as well as a special case for boldsymbol because it
-  // can be used for bold + and -
-  if (options.font === "boldsymbol" && lookupSymbol(value, "Main-Bold", mode).metrics) {
-    return makeSymbol(value, "Main-Bold", mode, options, classes.concat(["mathbf"]));
-  } else if (value === "\\" || symbols[mode][value].font === "main") {
-    return makeSymbol(value, "Main-Regular", mode, options, classes);
-  } else {
-    return makeSymbol(value, "AMS-Regular", mode, options, classes.concat(["amsrm"]));
-  }
-};
-/**
- * Determines which of the two font names (Main-Italic and Math-Italic) and
- * corresponding style tags (maindefault or mathit) to use for default math font,
- * depending on the symbol.
- */
-
-
-const mathdefault = function mathdefault(value, mode, options, classes) {
-  if (/[0-9]/.test(value.charAt(0)) || // glyphs for \imath and \jmath do not exist in Math-Italic so we
-  // need to use Main-Italic instead
-  utils.contains(mathitLetters, value)) {
-    return {
-      fontName: "Main-Italic",
-      fontClass: "mathit"
-    };
-  } else {
-    return {
-      fontName: "Math-Italic",
-      fontClass: "mathdefault"
-    };
-  }
-};
-/**
- * Determines which of the font names (Main-Italic, Math-Italic, and Caligraphic)
- * and corresponding style tags (mathit, mathdefault, or mathcal) to use for font
- * "mathnormal", depending on the symbol.  Use this function instead of fontMap for
- * font "mathnormal".
- */
-
-
-const mathnormal = function mathnormal(value, mode, options, classes) {
-  if (utils.contains(mathitLetters, value)) {
-    return {
-      fontName: "Main-Italic",
-      fontClass: "mathit"
-    };
-  } else if (/[0-9]/.test(value.charAt(0))) {
-    return {
-      fontName: "Caligraphic-Regular",
-      fontClass: "mathcal"
-    };
-  } else {
-    return {
-      fontName: "Math-Italic",
-      fontClass: "mathdefault"
-    };
-  }
-};
-/**
- * Determines which of the two font names (Main-Bold and Math-BoldItalic) and
- * corresponding style tags (mathbf or boldsymbol) to use for font "boldsymbol",
- * depending on the symbol.  Use this function instead of fontMap for font
- * "boldsymbol".
- */
-
-
-const boldsymbol = function boldsymbol(value, mode, options, classes) {
-  if (lookupSymbol(value, "Math-BoldItalic", mode).metrics) {
-    return {
-      fontName: "Math-BoldItalic",
-      fontClass: "boldsymbol"
-    };
-  } else {
-    // Some glyphs do not exist in Math-BoldItalic so we need to use
-    // Main-Bold instead.
-    return {
-      fontName: "Main-Bold",
-      fontClass: "mathbf"
-    };
-  }
-};
-/**
- * Makes either a mathord or textord in the correct font and color.
- */
-
-
-const makeOrd = function makeOrd(group, options, type) {
-  const mode = group.mode;
-  const text = group.text;
-  const classes = ["mord"]; // Math mode or Old font (i.e. \rm)
-
-  const isFont = mode === "math" || mode === "text" && options.font;
-  const fontOrFamily = isFont ? options.font : options.fontFamily;
-
-  if (text.charCodeAt(0) === 0xD835) {
-    // surrogate pairs get special treatment
-    const _wideCharacterFont = wideCharacterFont(text, mode),
-          wideFontName = _wideCharacterFont[0],
-          wideFontClass = _wideCharacterFont[1];
-
-    return makeSymbol(text, wideFontName, mode, options, classes.concat(wideFontClass));
-  } else if (fontOrFamily) {
-    let fontName;
-    let fontClasses;
-
-    if (fontOrFamily === "boldsymbol" || fontOrFamily === "mathnormal") {
-      const fontData = fontOrFamily === "boldsymbol" ? boldsymbol(text, mode, options, classes) : mathnormal(text, mode, options, classes);
-      fontName = fontData.fontName;
-      fontClasses = [fontData.fontClass];
-    } else if (utils.contains(mathitLetters, text)) {
-      fontName = "Main-Italic";
-      fontClasses = ["mathit"];
-    } else if (isFont) {
-      fontName = fontMap[fontOrFamily].fontName;
-      fontClasses = [fontOrFamily];
-    } else {
-      fontName = retrieveTextFontName(fontOrFamily, options.fontWeight, options.fontShape);
-      fontClasses = [fontOrFamily, options.fontWeight, options.fontShape];
-    }
-
-    if (lookupSymbol(text, fontName, mode).metrics) {
-      return makeSymbol(text, fontName, mode, options, classes.concat(fontClasses));
-    } else if (ligatures.hasOwnProperty(text) && fontName.substr(0, 10) === "Typewriter") {
-      // Deconstruct ligatures in monospace fonts (\texttt, \tt).
-      const parts = [];
-
-      for (let i = 0; i < text.length; i++) {
-        parts.push(makeSymbol(text[i], fontName, mode, options, classes.concat(fontClasses)));
-      }
-
-      return makeFragment(parts);
-    }
-  } // Makes a symbol in the default font for mathords and textords.
-
-
-  if (type === "mathord") {
-    const fontLookup = mathdefault(text, mode, options, classes);
-    return makeSymbol(text, fontLookup.fontName, mode, options, classes.concat([fontLookup.fontClass]));
-  } else if (type === "textord") {
-    const font = symbols[mode][text] && symbols[mode][text].font;
-
-    if (font === "ams") {
-      const fontName = retrieveTextFontName("amsrm", options.fontWeight, options.fontShape);
-      return makeSymbol(text, fontName, mode, options, classes.concat("amsrm", options.fontWeight, options.fontShape));
-    } else if (font === "main" || !font) {
-      const fontName = retrieveTextFontName("textrm", options.fontWeight, options.fontShape);
-      return makeSymbol(text, fontName, mode, options, classes.concat(options.fontWeight, options.fontShape));
-    } else {
-      // fonts added by plugins
-      const fontName = retrieveTextFontName(font, options.fontWeight, options.fontShape); // We add font name as a css class
-
-      return makeSymbol(text, fontName, mode, options, classes.concat(fontName, options.fontWeight, options.fontShape));
-    }
-  } else {
-    throw new Error("unexpected type: " + type + " in makeOrd");
-  }
-};
-/**
- * Returns true if subsequent symbolNodes have the same classes, skew, maxFont,
- * and styles.
- */
-
-
-const canCombine = (prev, next) => {
-  if (createClass(prev.classes) !== createClass(next.classes) || prev.skew !== next.skew || prev.maxFontSize !== next.maxFontSize) {
-    return false;
-  }
-
-  for (const style in prev.style) {
-    if (prev.style.hasOwnProperty(style) && prev.style[style] !== next.style[style]) {
-      return false;
-    }
-  }
-
-  for (const style in next.style) {
-    if (next.style.hasOwnProperty(style) && prev.style[style] !== next.style[style]) {
-      return false;
-    }
-  }
-
-  return true;
-};
-/**
- * Combine consequetive domTree.symbolNodes into a single symbolNode.
- * Note: this function mutates the argument.
- */
-
-
-const tryCombineChars = chars => {
-  for (let i = 0; i < chars.length - 1; i++) {
-    const prev = chars[i];
-    const next = chars[i + 1];
-
-    if (prev instanceof SymbolNode && next instanceof SymbolNode && canCombine(prev, next)) {
-      prev.text += next.text;
-      prev.height = Math.max(prev.height, next.height);
-      prev.depth = Math.max(prev.depth, next.depth); // Use the last character's italic correction since we use
-      // it to add padding to the right of the span created from
-      // the combined characters.
-
-      prev.italic = next.italic;
-      chars.splice(i + 1, 1);
-      i--;
-    }
-  }
-
-  return chars;
-};
-/**
- * Calculate the height, depth, and maxFontSize of an element based on its
- * children.
- */
-
-
-const sizeElementFromChildren = function sizeElementFromChildren(elem) {
-  let height = 0;
-  let depth = 0;
-  let maxFontSize = 0;
-
-  for (let i = 0; i < elem.children.length; i++) {
-    const child = elem.children[i];
-
-    if (child.height > height) {
-      height = child.height;
-    }
-
-    if (child.depth > depth) {
-      depth = child.depth;
-    }
-
-    if (child.maxFontSize > maxFontSize) {
-      maxFontSize = child.maxFontSize;
-    }
-  }
-
-  elem.height = height;
-  elem.depth = depth;
-  elem.maxFontSize = maxFontSize;
-};
-/**
- * Makes a span with the given list of classes, list of children, and options.
- *
- * TODO(#953): Ensure that `options` is always provided (currently some call
- * sites don't pass it) and make the type below mandatory.
- * TODO: add a separate argument for math class (e.g. `mop`, `mbin`), which
- * should if present come first in `classes`.
- */
-
-
-const makeSpan = function makeSpan(classes, children, options, style) {
-  const span = new Span(classes, children, options, style);
-  sizeElementFromChildren(span);
-  return span;
-}; // SVG one is simpler -- doesn't require height, depth, max-font setting.
-// This is also a separate method for typesafety.
-
-
-const makeSvgSpan = (classes, children, options, style) => new Span(classes, children, options, style);
-
-const makeLineSpan = function makeLineSpan(className, options, thickness) {
-  const line = makeSpan([className], [], options);
-  line.height = Math.max(thickness || options.fontMetrics().defaultRuleThickness, options.minRuleThickness);
-  line.style.borderBottomWidth = line.height + "em";
-  line.maxFontSize = 1.0;
-  return line;
-};
-/**
- * Makes an anchor with the given href, list of classes, list of children,
- * and options.
- */
-
-
-const makeAnchor = function makeAnchor(href, classes, children, options) {
-  const anchor = new Anchor(href, classes, children, options);
-  sizeElementFromChildren(anchor);
-  return anchor;
-};
-/**
- * Makes a document fragment with the given list of children.
- */
-
-
-const makeFragment = function makeFragment(children) {
-  const fragment = new DocumentFragment(children);
-  sizeElementFromChildren(fragment);
-  return fragment;
-};
-/**
- * Wraps group in a span if it's a document fragment, allowing to apply classes
- * and styles
- */
-
-
-const wrapFragment = function wrapFragment(group, options) {
-  if (group instanceof DocumentFragment) {
-    return makeSpan([], [group], options);
-  }
-
-  return group;
-}; // These are exact object types to catch typos in the names of the optional fields.
-
-
-// Computes the updated `children` list and the overall depth.
-//
-// This helper function for makeVList makes it easier to enforce type safety by
-// allowing early exits (returns) in the logic.
-const getVListChildrenAndDepth = function getVListChildrenAndDepth(params) {
-  if (params.positionType === "individualShift") {
-    const oldChildren = params.children;
-    const children = [oldChildren[0]]; // Add in kerns to the list of params.children to get each element to be
-    // shifted to the correct specified shift
-
-    const depth = -oldChildren[0].shift - oldChildren[0].elem.depth;
-    let currPos = depth;
-
-    for (let i = 1; i < oldChildren.length; i++) {
-      const diff = -oldChildren[i].shift - currPos - oldChildren[i].elem.depth;
-      const size = diff - (oldChildren[i - 1].elem.height + oldChildren[i - 1].elem.depth);
-      currPos = currPos + diff;
-      children.push({
-        type: "kern",
-        size
-      });
-      children.push(oldChildren[i]);
-    }
-
-    return {
-      children,
-      depth
-    };
-  }
-
-  let depth;
-
-  if (params.positionType === "top") {
-    // We always start at the bottom, so calculate the bottom by adding up
-    // all the sizes
-    let bottom = params.positionData;
-
-    for (let i = 0; i < params.children.length; i++) {
-      const child = params.children[i];
-      bottom -= child.type === "kern" ? child.size : child.elem.height + child.elem.depth;
-    }
-
-    depth = bottom;
-  } else if (params.positionType === "bottom") {
-    depth = -params.positionData;
-  } else {
-    const firstChild = params.children[0];
-
-    if (firstChild.type !== "elem") {
-      throw new Error('First child must have type "elem".');
-    }
-
-    if (params.positionType === "shift") {
-      depth = -firstChild.elem.depth - params.positionData;
-    } else if (params.positionType === "firstBaseline") {
-      depth = -firstChild.elem.depth;
-    } else {
-      throw new Error(`Invalid positionType ${params.positionType}.`);
-    }
-  }
-
-  return {
-    children: params.children,
-    depth
-  };
-};
-/**
- * Makes a vertical list by stacking elements and kerns on top of each other.
- * Allows for many different ways of specifying the positioning method.
- *
- * See VListParam documentation above.
- */
-
-
-const makeVList = function makeVList(params, options) {
-  const _getVListChildrenAndD = getVListChildrenAndDepth(params),
-        children = _getVListChildrenAndD.children,
-        depth = _getVListChildrenAndD.depth; // Create a strut that is taller than any list item. The strut is added to
-  // each item, where it will determine the item's baseline. Since it has
-  // `overflow:hidden`, the strut's top edge will sit on the item's line box's
-  // top edge and the strut's bottom edge will sit on the item's baseline,
-  // with no additional line-height spacing. This allows the item baseline to
-  // be positioned precisely without worrying about font ascent and
-  // line-height.
-
-
-  let pstrutSize = 0;
-
-  for (let i = 0; i < children.length; i++) {
-    const child = children[i];
-
-    if (child.type === "elem") {
-      const elem = child.elem;
-      pstrutSize = Math.max(pstrutSize, elem.maxFontSize, elem.height);
-    }
-  }
-
-  pstrutSize += 2;
-  const pstrut = makeSpan(["pstrut"], []);
-  pstrut.style.height = pstrutSize + "em"; // Create a new list of actual children at the correct offsets
-
-  const realChildren = [];
-  let minPos = depth;
-  let maxPos = depth;
-  let currPos = depth;
-
-  for (let i = 0; i < children.length; i++) {
-    const child = children[i];
-
-    if (child.type === "kern") {
-      currPos += child.size;
-    } else {
-      const elem = child.elem;
-      const classes = child.wrapperClasses || [];
-      const style = child.wrapperStyle || {};
-      const childWrap = makeSpan(classes, [pstrut, elem], undefined, style);
-      childWrap.style.top = -pstrutSize - currPos - elem.depth + "em";
-
-      if (child.marginLeft) {
-        childWrap.style.marginLeft = child.marginLeft;
-      }
-
-      if (child.marginRight) {
-        childWrap.style.marginRight = child.marginRight;
-      }
-
-      realChildren.push(childWrap);
-      currPos += elem.height + elem.depth;
-    }
-
-    minPos = Math.min(minPos, currPos);
-    maxPos = Math.max(maxPos, currPos);
-  } // The vlist contents go in a table-cell with `vertical-align:bottom`.
-  // This cell's bottom edge will determine the containing table's baseline
-  // without overly expanding the containing line-box.
-
-
-  const vlist = makeSpan(["vlist"], realChildren);
-  vlist.style.height = maxPos + "em"; // A second row is used if necessary to represent the vlist's depth.
-
-  let rows;
-
-  if (minPos < 0) {
-    // We will define depth in an empty span with display: table-cell.
-    // It should render with the height that we define. But Chrome, in
-    // contenteditable mode only, treats that span as if it contains some
-    // text content. And that min-height over-rides our desired height.
-    // So we put another empty span inside the depth strut span.
-    const emptySpan = makeSpan([], []);
-    const depthStrut = makeSpan(["vlist"], [emptySpan]);
-    depthStrut.style.height = -minPos + "em"; // Safari wants the first row to have inline content; otherwise it
-    // puts the bottom of the *second* row on the baseline.
-
-    const topStrut = makeSpan(["vlist-s"], [new SymbolNode("\u200b")]);
-    rows = [makeSpan(["vlist-r"], [vlist, topStrut]), makeSpan(["vlist-r"], [depthStrut])];
-  } else {
-    rows = [makeSpan(["vlist-r"], [vlist])];
-  }
-
-  const vtable = makeSpan(["vlist-t"], rows);
-
-  if (rows.length === 2) {
-    vtable.classes.push("vlist-t2");
-  }
-
-  vtable.height = maxPos;
-  vtable.depth = -minPos;
-  return vtable;
-}; // Glue is a concept from TeX which is a flexible space between elements in
-// either a vertical or horizontal list. In KaTeX, at least for now, it's
-// static space between elements in a horizontal layout.
-
-
-const makeGlue = (measurement, options) => {
-  // Make an empty span for the space
-  const rule = makeSpan(["mspace"], [], options);
-  const size = calculateSize(measurement, options);
-  rule.style.marginRight = `${size}em`;
-  return rule;
-}; // Takes font options, and returns the appropriate fontLookup name
-
-
-const retrieveTextFontName = function retrieveTextFontName(fontFamily, fontWeight, fontShape) {
-  let baseFontName = "";
-
-  switch (fontFamily) {
-    case "amsrm":
-      baseFontName = "AMS";
-      break;
-
-    case "textrm":
-      baseFontName = "Main";
-      break;
-
-    case "textsf":
-      baseFontName = "SansSerif";
-      break;
-
-    case "texttt":
-      baseFontName = "Typewriter";
-      break;
-
-    default:
-      baseFontName = fontFamily;
-    // use fonts added by a plugin
-  }
-
-  let fontStylesName;
-
-  if (fontWeight === "textbf" && fontShape === "textit") {
-    fontStylesName = "BoldItalic";
-  } else if (fontWeight === "textbf") {
-    fontStylesName = "Bold";
-  } else if (fontWeight === "textit") {
-    fontStylesName = "Italic";
-  } else {
-    fontStylesName = "Regular";
-  }
-
-  return `${baseFontName}-${fontStylesName}`;
-};
-/**
- * Maps TeX font commands to objects containing:
- * - variant: string used for "mathvariant" attribute in buildMathML.js
- * - fontName: the "style" parameter to fontMetrics.getCharacterMetrics
- */
-// A map between tex font commands an MathML mathvariant attribute values
-
-
-const fontMap = {
-  // styles
-  "mathbf": {
-    variant: "bold",
-    fontName: "Main-Bold"
-  },
-  "mathrm": {
-    variant: "normal",
-    fontName: "Main-Regular"
-  },
-  "textit": {
-    variant: "italic",
-    fontName: "Main-Italic"
-  },
-  "mathit": {
-    variant: "italic",
-    fontName: "Main-Italic"
-  },
-  // Default math font, "mathnormal" and "boldsymbol" are missing because they
-  // require the use of several fonts: Main-Italic and Math-Italic for default
-  // math font, Main-Italic, Math-Italic, Caligraphic for "mathnormal", and
-  // Math-BoldItalic and Main-Bold for "boldsymbol".  This is handled by a
-  // special case in makeOrd which ends up calling mathdefault, mathnormal,
-  // and boldsymbol.
-  // families
-  "mathbb": {
-    variant: "double-struck",
-    fontName: "AMS-Regular"
-  },
-  "mathcal": {
-    variant: "script",
-    fontName: "Caligraphic-Regular"
-  },
-  "mathfrak": {
-    variant: "fraktur",
-    fontName: "Fraktur-Regular"
-  },
-  "mathscr": {
-    variant: "script",
-    fontName: "Script-Regular"
-  },
-  "mathsf": {
-    variant: "sans-serif",
-    fontName: "SansSerif-Regular"
-  },
-  "mathtt": {
-    variant: "monospace",
-    fontName: "Typewriter-Regular"
-  }
-};
-const svgData = {
-  //   path, width, height
-  vec: ["vec", 0.471, 0.714],
-  // values from the font glyph
-  oiintSize1: ["oiintSize1", 0.957, 0.499],
-  // oval to overlay the integrand
-  oiintSize2: ["oiintSize2", 1.472, 0.659],
-  oiiintSize1: ["oiiintSize1", 1.304, 0.499],
-  oiiintSize2: ["oiiintSize2", 1.98, 0.659]
-};
-
-const staticSvg = function staticSvg(value, options) {
-  // Create a span with inline SVG for the element.
-  const _svgData$value = svgData[value],
-        pathName = _svgData$value[0],
-        width = _svgData$value[1],
-        height = _svgData$value[2];
-  const path = new PathNode(pathName);
-  const svgNode = new SvgNode([path], {
-    "width": width + "em",
-    "height": height + "em",
-    // Override CSS rule `.katex svg { width: 100% }`
-    "style": "width:" + width + "em",
-    "viewBox": "0 0 " + 1000 * width + " " + 1000 * height,
-    "preserveAspectRatio": "xMinYMin"
-  });
-  const span = makeSvgSpan(["overlay"], [svgNode], options);
-  span.height = height;
-  span.style.height = height + "em";
-  span.style.width = width + "em";
-  return span;
-};
-
-var buildCommon = {
-  fontMap,
-  makeSymbol,
-  mathsym,
-  makeSpan,
-  makeSvgSpan,
-  makeLineSpan,
-  makeAnchor,
-  makeFragment,
-  wrapFragment,
-  makeVList,
-  makeOrd,
-  makeGlue,
-  staticSvg,
-  svgData,
-  tryCombineChars
-};
-
-/**
- * Asserts that the node is of the given type and returns it with stricter
- * typing. Throws if the node's type does not match.
- */
-function assertNodeType(node, type) {
-  const typedNode = checkNodeType(node, type);
-
-  if (!typedNode) {
-    throw new Error(`Expected node of type ${type}, but got ` + (node ? `node of type ${node.type}` : String(node)));
-  } // $FlowFixMe: Unsure why.
-
-
-  return typedNode;
-}
-/**
- * Returns the node more strictly typed iff it is of the given type. Otherwise,
- * returns null.
- */
-
-function checkNodeType(node, type) {
-  if (node && node.type === type) {
-    // The definition of ParseNode<TYPE> doesn't communicate to flow that
-    // `type: TYPE` (as that's not explicitly mentioned anywhere), though that
-    // happens to be true for all our value types.
-    // $FlowFixMe
-    return node;
-  }
-
-  return null;
-}
-/**
- * Asserts that the node is of the given type and returns it with stricter
- * typing. Throws if the node's type does not match.
- */
-
-function assertAtomFamily(node, family) {
-  const typedNode = checkAtomFamily(node, family);
-
-  if (!typedNode) {
-    throw new Error(`Expected node of type "atom" and family "${family}", but got ` + (node ? node.type === "atom" ? `atom of family ${node.family}` : `node of type ${node.type}` : String(node)));
-  }
-
-  return typedNode;
-}
-/**
- * Returns the node more strictly typed iff it is of the given type. Otherwise,
- * returns null.
- */
-
-function checkAtomFamily(node, family) {
-  return node && node.type === "atom" && node.family === family ? node : null;
-}
-/**
- * Returns the node more strictly typed iff it is of the given type. Otherwise,
- * returns null.
- */
-
-function assertSymbolNodeType(node) {
-  const typedNode = checkSymbolNodeType(node);
-
-  if (!typedNode) {
-    throw new Error(`Expected node of symbol group type, but got ` + (node ? `node of type ${node.type}` : String(node)));
-  }
-
-  return typedNode;
-}
-/**
- * Returns the node more strictly typed iff it is of the given type. Otherwise,
- * returns null.
- */
-
-function checkSymbolNodeType(node) {
-  if (node && (node.type === "atom" || NON_ATOMS.hasOwnProperty(node.type))) {
-    // $FlowFixMe
-    return node;
-  }
-
-  return null;
-}
-
-/**
- * Describes spaces between different classes of atoms.
- */
-const thinspace = {
-  number: 3,
-  unit: "mu"
-};
-const mediumspace = {
-  number: 4,
-  unit: "mu"
-};
-const thickspace = {
-  number: 5,
-  unit: "mu"
-}; // Making the type below exact with all optional fields doesn't work due to
-// - https://github.com/facebook/flow/issues/4582
-// - https://github.com/facebook/flow/issues/5688
-// However, since *all* fields are optional, $Shape<> works as suggested in 5688
-// above.
-
-// Spacing relationships for display and text styles
-const spacings = {
-  mord: {
-    mop: thinspace,
-    mbin: mediumspace,
-    mrel: thickspace,
-    minner: thinspace
-  },
-  mop: {
-    mord: thinspace,
-    mop: thinspace,
-    mrel: thickspace,
-    minner: thinspace
-  },
-  mbin: {
-    mord: mediumspace,
-    mop: mediumspace,
-    mopen: mediumspace,
-    minner: mediumspace
-  },
-  mrel: {
-    mord: thickspace,
-    mop: thickspace,
-    mopen: thickspace,
-    minner: thickspace
-  },
-  mopen: {},
-  mclose: {
-    mop: thinspace,
-    mbin: mediumspace,
-    mrel: thickspace,
-    minner: thinspace
-  },
-  mpunct: {
-    mord: thinspace,
-    mop: thinspace,
-    mrel: thickspace,
-    mopen: thinspace,
-    mclose: thinspace,
-    mpunct: thinspace,
-    minner: thinspace
-  },
-  minner: {
-    mord: thinspace,
-    mop: thinspace,
-    mbin: mediumspace,
-    mrel: thickspace,
-    mopen: thinspace,
-    mpunct: thinspace,
-    minner: thinspace
-  }
-}; // Spacing relationships for script and scriptscript styles
-
-const tightSpacings = {
-  mord: {
-    mop: thinspace
-  },
-  mop: {
-    mord: thinspace,
-    mop: thinspace
-  },
-  mbin: {},
-  mrel: {},
-  mopen: {},
-  mclose: {
-    mop: thinspace
-  },
-  mpunct: {},
-  minner: {
-    mop: thinspace
-  }
-};
-
-/**
- * All registered functions.
- * `functions.js` just exports this same dictionary again and makes it public.
- * `Parser.js` requires this dictionary.
- */
-const _functions = {};
-/**
- * All HTML builders. Should be only used in the `define*` and the `build*ML`
- * functions.
- */
-
-const _htmlGroupBuilders = {};
-/**
- * All MathML builders. Should be only used in the `define*` and the `build*ML`
- * functions.
- */
-
-const _mathmlGroupBuilders = {};
-function defineFunction(_ref) {
-  let type = _ref.type,
-      names = _ref.names,
-      props = _ref.props,
-      handler = _ref.handler,
-      htmlBuilder = _ref.htmlBuilder,
-      mathmlBuilder = _ref.mathmlBuilder;
-  // Set default values of functions
-  const data = {
-    type,
-    numArgs: props.numArgs,
-    argTypes: props.argTypes,
-    greediness: props.greediness === undefined ? 1 : props.greediness,
-    allowedInText: !!props.allowedInText,
-    allowedInMath: props.allowedInMath === undefined ? true : props.allowedInMath,
-    numOptionalArgs: props.numOptionalArgs || 0,
-    infix: !!props.infix,
-    handler: handler
-  };
-
-  for (let i = 0; i < names.length; ++i) {
-    _functions[names[i]] = data;
-  }
-
-  if (type) {
-    if (htmlBuilder) {
-      _htmlGroupBuilders[type] = htmlBuilder;
-    }
-
-    if (mathmlBuilder) {
-      _mathmlGroupBuilders[type] = mathmlBuilder;
-    }
-  }
-}
-/**
- * Use this to register only the HTML and MathML builders for a function (e.g.
- * if the function's ParseNode is generated in Parser.js rather than via a
- * stand-alone handler provided to `defineFunction`).
- */
-
-function defineFunctionBuilders(_ref2) {
-  let type = _ref2.type,
-      htmlBuilder = _ref2.htmlBuilder,
-      mathmlBuilder = _ref2.mathmlBuilder;
-  defineFunction({
-    type,
-    names: [],
-    props: {
-      numArgs: 0
-    },
-
-    handler() {
-      throw new Error('Should never be called.');
-    },
-
-    htmlBuilder,
-    mathmlBuilder
-  });
-} // Since the corresponding buildHTML/buildMathML function expects a
-// list of elements, we normalize for different kinds of arguments
-
-const ordargument = function ordargument(arg) {
-  const node = checkNodeType(arg, "ordgroup");
-  return node ? node.body : [arg];
-};
-
-/**
- * This file does the main work of building a domTree structure from a parse
- * tree. The entry point is the `buildHTML` function, which takes a parse tree.
- * Then, the buildExpression, buildGroup, and various groupBuilders functions
- * are called, to produce a final HTML tree.
- */
-const makeSpan$1 = buildCommon.makeSpan; // Binary atoms (first class `mbin`) change into ordinary atoms (`mord`)
-// depending on their surroundings. See TeXbook pg. 442-446, Rules 5 and 6,
-// and the text before Rule 19.
-
-const binLeftCanceller = ["leftmost", "mbin", "mopen", "mrel", "mop", "mpunct"];
-const binRightCanceller = ["rightmost", "mrel", "mclose", "mpunct"];
-const styleMap = {
-  "display": Style$1.DISPLAY,
-  "text": Style$1.TEXT,
-  "script": Style$1.SCRIPT,
-  "scriptscript": Style$1.SCRIPTSCRIPT
-};
-const DomEnum = {
-  mord: "mord",
-  mop: "mop",
-  mbin: "mbin",
-  mrel: "mrel",
-  mopen: "mopen",
-  mclose: "mclose",
-  mpunct: "mpunct",
-  minner: "minner"
-};
-
-/**
- * Take a list of nodes, build them in order, and return a list of the built
- * nodes. documentFragments are flattened into their contents, so the
- * returned list contains no fragments. `isRealGroup` is true if `expression`
- * is a real group (no atoms will be added on either side), as opposed to
- * a partial group (e.g. one created by \color). `surrounding` is an array
- * consisting type of nodes that will be added to the left and right.
- */
-const buildExpression = function buildExpression(expression, options, isRealGroup, surrounding) {
-  if (surrounding === void 0) {
-    surrounding = [null, null];
-  }
-
-  // Parse expressions into `groups`.
-  const groups = [];
-
-  for (let i = 0; i < expression.length; i++) {
-    const output = buildGroup(expression[i], options);
-
-    if (output instanceof DocumentFragment) {
-      const children = output.children;
-      groups.push(...children);
-    } else {
-      groups.push(output);
-    }
-  } // If `expression` is a partial group, let the parent handle spacings
-  // to avoid processing groups multiple times.
-
-
-  if (!isRealGroup) {
-    return groups;
-  }
-
-  let glueOptions = options;
-
-  if (expression.length === 1) {
-    const node = checkNodeType(expression[0], "sizing") || checkNodeType(expression[0], "styling");
-
-    if (!node) ; else if (node.type === "sizing") {
-      glueOptions = options.havingSize(node.size);
-    } else if (node.type === "styling") {
-      glueOptions = options.havingStyle(styleMap[node.style]);
-    }
-  } // Dummy spans for determining spacings between surrounding atoms.
-  // If `expression` has no atoms on the left or right, class "leftmost"
-  // or "rightmost", respectively, is used to indicate it.
-
-
-  const dummyPrev = makeSpan$1([surrounding[0] || "leftmost"], [], options);
-  const dummyNext = makeSpan$1([surrounding[1] || "rightmost"], [], options); // TODO: These code assumes that a node's math class is the first element
-  // of its `classes` array. A later cleanup should ensure this, for
-  // instance by changing the signature of `makeSpan`.
-  // Before determining what spaces to insert, perform bin cancellation.
-  // Binary operators change to ordinary symbols in some contexts.
-
-  traverseNonSpaceNodes(groups, (node, prev) => {
-    const prevType = prev.classes[0];
-    const type = node.classes[0];
-
-    if (prevType === "mbin" && utils.contains(binRightCanceller, type)) {
-      prev.classes[0] = "mord";
-    } else if (type === "mbin" && utils.contains(binLeftCanceller, prevType)) {
-      node.classes[0] = "mord";
-    }
-  }, {
-    node: dummyPrev
-  }, dummyNext);
-  traverseNonSpaceNodes(groups, (node, prev) => {
-    const prevType = getTypeOfDomTree(prev);
-    const type = getTypeOfDomTree(node); // 'mtight' indicates that the node is script or scriptscript style.
-
-    const space = prevType && type ? node.hasClass("mtight") ? tightSpacings[prevType][type] : spacings[prevType][type] : null;
-
-    if (space) {
-      // Insert glue (spacing) after the `prev`.
-      return buildCommon.makeGlue(space, glueOptions);
-    }
-  }, {
-    node: dummyPrev
-  }, dummyNext);
-  return groups;
-}; // Depth-first traverse non-space `nodes`, calling `callback` with the current and
-// previous node as arguments, optionally returning a node to insert after the
-// previous node. `prev` is an object with the previous node and `insertAfter`
-// function to insert after it. `next` is a node that will be added to the right.
-// Used for bin cancellation and inserting spacings.
-
-const traverseNonSpaceNodes = function traverseNonSpaceNodes(nodes, callback, prev, next) {
-  if (next) {
-    // temporarily append the right node, if exists
-    nodes.push(next);
-  }
-
-  let i = 0;
-
-  for (; i < nodes.length; i++) {
-    const node = nodes[i];
-    const partialGroup = checkPartialGroup(node);
-
-    if (partialGroup) {
-      // Recursive DFS
-      // $FlowFixMe: make nodes a $ReadOnlyArray by returning a new array
-      traverseNonSpaceNodes(partialGroup.children, callback, prev);
-      continue;
-    } // Ignore explicit spaces (e.g., \;, \,) when determining what implicit
-    // spacing should go between atoms of different classes
-
-
-    if (node.classes[0] === "mspace") {
-      continue;
-    }
-
-    const result = callback(node, prev.node);
-
-    if (result) {
-      if (prev.insertAfter) {
-        prev.insertAfter(result);
-      } else {
-        // insert at front
-        nodes.unshift(result);
-        i++;
-      }
-    }
-
-    prev.node = node;
-
-    prev.insertAfter = (index => n => {
-      nodes.splice(index + 1, 0, n);
-      i++;
-    })(i);
-  }
-
-  if (next) {
-    nodes.pop();
-  }
-}; // Check if given node is a partial group, i.e., does not affect spacing around.
-
-
-const checkPartialGroup = function checkPartialGroup(node) {
-  if (node instanceof DocumentFragment || node instanceof Anchor) {
-    return node;
-  }
-
-  return null;
-}; // Return the outermost node of a domTree.
-
-
-const getOutermostNode = function getOutermostNode(node, side) {
-  const partialGroup = checkPartialGroup(node);
-
-  if (partialGroup) {
-    const children = partialGroup.children;
-
-    if (children.length) {
-      if (side === "right") {
-        return getOutermostNode(children[children.length - 1], "right");
-      } else if (side === "left") {
-        return getOutermostNode(children[0], "left");
-      }
-    }
-  }
-
-  return node;
-}; // Return math atom class (mclass) of a domTree.
-// If `side` is given, it will get the type of the outermost node at given side.
-
-
-const getTypeOfDomTree = function getTypeOfDomTree(node, side) {
-  if (!node) {
-    return null;
-  }
-
-  if (side) {
-    node = getOutermostNode(node, side);
-  } // This makes a lot of assumptions as to where the type of atom
-  // appears.  We should do a better job of enforcing this.
-
-
-  return DomEnum[node.classes[0]] || null;
-};
-const makeNullDelimiter = function makeNullDelimiter(options, classes) {
-  const moreClasses = ["nulldelimiter"].concat(options.baseSizingClasses());
-  return makeSpan$1(classes.concat(moreClasses));
-};
-/**
- * buildGroup is the function that takes a group and calls the correct groupType
- * function for it. It also handles the interaction of size and style changes
- * between parents and children.
- */
-
-const buildGroup = function buildGroup(group, options, baseOptions) {
-  if (!group) {
-    return makeSpan$1();
-  }
-
-  if (_htmlGroupBuilders[group.type]) {
-    // Call the groupBuilders function
-    let groupNode = _htmlGroupBuilders[group.type](group, options); // If the size changed between the parent and the current group, account
-    // for that size difference.
-
-    if (baseOptions && options.size !== baseOptions.size) {
-      groupNode = makeSpan$1(options.sizingClasses(baseOptions), [groupNode], options);
-      const multiplier = options.sizeMultiplier / baseOptions.sizeMultiplier;
-      groupNode.height *= multiplier;
-      groupNode.depth *= multiplier;
-    }
-
-    return groupNode;
-  } else {
-    throw new ParseError("Got group of unknown type: '" + group.type + "'");
-  }
-};
-/**
- * Combine an array of HTML DOM nodes (e.g., the output of `buildExpression`)
- * into an unbreakable HTML node of class .base, with proper struts to
- * guarantee correct vertical extent.  `buildHTML` calls this repeatedly to
- * make up the entire expression as a sequence of unbreakable units.
- */
-
-function buildHTMLUnbreakable(children, options) {
-  // Compute height and depth of this chunk.
-  const body = makeSpan$1(["base"], children, options); // Add strut, which ensures that the top of the HTML element falls at
-  // the height of the expression, and the bottom of the HTML element
-  // falls at the depth of the expression.
-  // We used to have separate top and bottom struts, where the bottom strut
-  // would like to use `vertical-align: top`, but in IE 9 this lowers the
-  // baseline of the box to the bottom of this strut (instead of staying in
-  // the normal place) so we use an absolute value for vertical-align instead.
-
-  const strut = makeSpan$1(["strut"]);
-  strut.style.height = body.height + body.depth + "em";
-  strut.style.verticalAlign = -body.depth + "em";
-  body.children.unshift(strut);
-  return body;
-}
-/**
- * Take an entire parse tree, and build it into an appropriate set of HTML
- * nodes.
- */
-
-
-function buildHTML(tree, options) {
-  // Strip off outer tag wrapper for processing below.
-  let tag = null;
-
-  if (tree.length === 1 && tree[0].type === "tag") {
-    tag = tree[0].tag;
-    tree = tree[0].body;
-  } // Build the expression contained in the tree
-
-
-  const expression = buildExpression(tree, options, true);
-  const children = []; // Create one base node for each chunk between potential line breaks.
-  // The TeXBook [p.173] says "A formula will be broken only after a
-  // relation symbol like $=$ or $<$ or $\rightarrow$, or after a binary
-  // operation symbol like $+$ or $-$ or $\times$, where the relation or
-  // binary operation is on the ``outer level'' of the formula (i.e., not
-  // enclosed in {...} and not part of an \over construction)."
-
-  let parts = [];
-
-  for (let i = 0; i < expression.length; i++) {
-    parts.push(expression[i]);
-
-    if (expression[i].hasClass("mbin") || expression[i].hasClass("mrel") || expression[i].hasClass("allowbreak")) {
-      // Put any post-operator glue on same line as operator.
-      // Watch for \nobreak along the way, and stop at \newline.
-      let nobreak = false;
-
-      while (i < expression.length - 1 && expression[i + 1].hasClass("mspace") && !expression[i + 1].hasClass("newline")) {
-        i++;
-        parts.push(expression[i]);
-
-        if (expression[i].hasClass("nobreak")) {
-          nobreak = true;
-        }
-      } // Don't allow break if \nobreak among the post-operator glue.
-
-
-      if (!nobreak) {
-        children.push(buildHTMLUnbreakable(parts, options));
-        parts = [];
-      }
-    } else if (expression[i].hasClass("newline")) {
-      // Write the line except the newline
-      parts.pop();
-
-      if (parts.length > 0) {
-        children.push(buildHTMLUnbreakable(parts, options));
-        parts = [];
-      } // Put the newline at the top level
-
-
-      children.push(expression[i]);
-    }
-  }
-
-  if (parts.length > 0) {
-    children.push(buildHTMLUnbreakable(parts, options));
-  } // Now, if there was a tag, build it too and append it as a final child.
-
-
-  let tagChild;
-
-  if (tag) {
-    tagChild = buildHTMLUnbreakable(buildExpression(tag, options, true));
-    tagChild.classes = ["tag"];
-    children.push(tagChild);
-  }
-
-  const htmlNode = makeSpan$1(["katex-html"], children);
-  htmlNode.setAttribute("aria-hidden", "true"); // Adjust the strut of the tag to be the maximum height of all children
-  // (the height of the enclosing htmlNode) for proper vertical alignment.
-
-  if (tagChild) {
-    const strut = tagChild.children[0];
-    strut.style.height = htmlNode.height + htmlNode.depth + "em";
-    strut.style.verticalAlign = -htmlNode.depth + "em";
-  }
-
-  return htmlNode;
-}
-
-/**
- * These objects store data about MathML nodes. This is the MathML equivalent
- * of the types in domTree.js. Since MathML handles its own rendering, and
- * since we're mainly using MathML to improve accessibility, we don't manage
- * any of the styling state that the plain DOM nodes do.
- *
- * The `toNode` and `toMarkup` functions work simlarly to how they do in
- * domTree.js, creating namespaced DOM nodes and HTML text markup respectively.
- */
-function newDocumentFragment(children) {
-  return new DocumentFragment(children);
-}
-/**
- * This node represents a general purpose MathML node of any type. The
- * constructor requires the type of node to create (for example, `"mo"` or
- * `"mspace"`, corresponding to `<mo>` and `<mspace>` tags).
- */
-
-class MathNode {
-  constructor(type, children) {
-    this.type = void 0;
-    this.attributes = void 0;
-    this.children = void 0;
-    this.type = type;
-    this.attributes = {};
-    this.children = children || [];
-  }
-  /**
-   * Sets an attribute on a MathML node. MathML depends on attributes to convey a
-   * semantic content, so this is used heavily.
-   */
-
-
-  setAttribute(name, value) {
-    this.attributes[name] = value;
-  }
-  /**
-   * Gets an attribute on a MathML node.
-   */
-
-
-  getAttribute(name) {
-    return this.attributes[name];
-  }
-  /**
-   * Converts the math node into a MathML-namespaced DOM element.
-   */
-
-
-  toNode() {
-    const node = document.createElementNS("http://www.w3.org/1998/Math/MathML", this.type);
-
-    for (const attr in this.attributes) {
-      if (Object.prototype.hasOwnProperty.call(this.attributes, attr)) {
-        node.setAttribute(attr, this.attributes[attr]);
-      }
-    }
-
-    for (let i = 0; i < this.children.length; i++) {
-      node.appendChild(this.children[i].toNode());
-    }
-
-    return node;
-  }
-  /**
-   * Converts the math node into an HTML markup string.
-   */
-
-
-  toMarkup() {
-    let markup = "<" + this.type; // Add the attributes
-
-    for (const attr in this.attributes) {
-      if (Object.prototype.hasOwnProperty.call(this.attributes, attr)) {
-        markup += " " + attr + "=\"";
-        markup += utils.escape(this.attributes[attr]);
-        markup += "\"";
-      }
-    }
-
-    markup += ">";
-
-    for (let i = 0; i < this.children.length; i++) {
-      markup += this.children[i].toMarkup();
-    }
-
-    markup += "</" + this.type + ">";
-    return markup;
-  }
-  /**
-   * Converts the math node into a string, similar to innerText, but escaped.
-   */
-
-
-  toText() {
-    return this.children.map(child => child.toText()).join("");
-  }
-
-}
-/**
- * This node represents a piece of text.
- */
-
-class TextNode {
-  constructor(text) {
-    this.text = void 0;
-    this.text = text;
-  }
-  /**
-   * Converts the text node into a DOM text node.
-   */
-
-
-  toNode() {
-    return document.createTextNode(this.text);
-  }
-  /**
-   * Converts the text node into escaped HTML markup
-   * (representing the text itself).
-   */
-
-
-  toMarkup() {
-    return utils.escape(this.toText());
-  }
-  /**
-   * Converts the text node into a string
-   * (representing the text iteself).
-   */
-
-
-  toText() {
-    return this.text;
-  }
-
-}
-/**
- * This node represents a space, but may render as <mspace.../> or as text,
- * depending on the width.
- */
-
-class SpaceNode {
-  /**
-   * Create a Space node with width given in CSS ems.
-   */
-  constructor(width) {
-    this.width = void 0;
-    this.character = void 0;
-    this.width = width; // See https://www.w3.org/TR/2000/WD-MathML2-20000328/chapter6.html
-    // for a table of space-like characters.  We use Unicode
-    // representations instead of &LongNames; as it's not clear how to
-    // make the latter via document.createTextNode.
-
-    if (width >= 0.05555 && width <= 0.05556) {
-      this.character = "\u200a"; // &VeryThinSpace;
-    } else if (width >= 0.1666 && width <= 0.1667) {
-      this.character = "\u2009"; // &ThinSpace;
-    } else if (width >= 0.2222 && width <= 0.2223) {
-      this.character = "\u2005"; // &MediumSpace;
-    } else if (width >= 0.2777 && width <= 0.2778) {
-      this.character = "\u2005\u200a"; // &ThickSpace;
-    } else if (width >= -0.05556 && width <= -0.05555) {
-      this.character = "\u200a\u2063"; // &NegativeVeryThinSpace;
-    } else if (width >= -0.1667 && width <= -0.1666) {
-      this.character = "\u2009\u2063"; // &NegativeThinSpace;
-    } else if (width >= -0.2223 && width <= -0.2222) {
-      this.character = "\u205f\u2063"; // &NegativeMediumSpace;
-    } else if (width >= -0.2778 && width <= -0.2777) {
-      this.character = "\u2005\u2063"; // &NegativeThickSpace;
-    } else {
-      this.character = null;
-    }
-  }
-  /**
-   * Converts the math node into a MathML-namespaced DOM element.
-   */
-
-
-  toNode() {
-    if (this.character) {
-      return document.createTextNode(this.character);
-    } else {
-      const node = document.createElementNS("http://www.w3.org/1998/Math/MathML", "mspace");
-      node.setAttribute("width", this.width + "em");
-      return node;
-    }
-  }
-  /**
-   * Converts the math node into an HTML markup string.
-   */
-
-
-  toMarkup() {
-    if (this.character) {
-      return `<mtext>${this.character}</mtext>`;
-    } else {
-      return `<mspace width="${this.width}em"/>`;
-    }
-  }
-  /**
-   * Converts the math node into a string, similar to innerText.
-   */
-
-
-  toText() {
-    if (this.character) {
-      return this.character;
-    } else {
-      return " ";
-    }
-  }
-
-}
-
-var mathMLTree = {
-  MathNode,
-  TextNode,
-  SpaceNode,
-  newDocumentFragment
-};
-
-/**
- * This file converts a parse tree into a cooresponding MathML tree. The main
- * entry point is the `buildMathML` function, which takes a parse tree from the
- * parser.
- */
-
-/**
- * Takes a symbol and converts it into a MathML text node after performing
- * optional replacement from symbols.js.
- */
-const makeText = function makeText(text, mode, options) {
-  if (symbols[mode][text] && symbols[mode][text].replace && text.charCodeAt(0) !== 0xD835 && !(ligatures.hasOwnProperty(text) && options && (options.fontFamily && options.fontFamily.substr(4, 2) === "tt" || options.font && options.font.substr(4, 2) === "tt"))) {
-    text = symbols[mode][text].replace;
-  }
-
-  return new mathMLTree.TextNode(text);
-};
-/**
- * Wrap the given array of nodes in an <mrow> node if needed, i.e.,
- * unless the array has length 1.  Always returns a single node.
- */
-
-const makeRow = function makeRow(body) {
-  if (body.length === 1) {
-    return body[0];
-  } else {
-    return new mathMLTree.MathNode("mrow", body);
-  }
-};
-/**
- * Returns the math variant as a string or null if none is required.
- */
-
-const getVariant = function getVariant(group, options) {
-  // Handle \text... font specifiers as best we can.
-  // MathML has a limited list of allowable mathvariant specifiers; see
-  // https://www.w3.org/TR/MathML3/chapter3.html#presm.commatt
-  if (options.fontFamily === "texttt") {
-    return "monospace";
-  } else if (options.fontFamily === "textsf") {
-    if (options.fontShape === "textit" && options.fontWeight === "textbf") {
-      return "sans-serif-bold-italic";
-    } else if (options.fontShape === "textit") {
-      return "sans-serif-italic";
-    } else if (options.fontWeight === "textbf") {
-      return "bold-sans-serif";
-    } else {
-      return "sans-serif";
-    }
-  } else if (options.fontShape === "textit" && options.fontWeight === "textbf") {
-    return "bold-italic";
-  } else if (options.fontShape === "textit") {
-    return "italic";
-  } else if (options.fontWeight === "textbf") {
-    return "bold";
-  }
-
-  const font = options.font;
-
-  if (!font || font === "mathnormal") {
-    return null;
-  }
-
-  const mode = group.mode;
-
-  if (font === "mathit") {
-    return "italic";
-  } else if (font === "boldsymbol") {
-    return "bold-italic";
-  } else if (font === "mathbf") {
-    return "bold";
-  } else if (font === "mathbb") {
-    return "double-struck";
-  } else if (font === "mathfrak") {
-    return "fraktur";
-  } else if (font === "mathscr" || font === "mathcal") {
-    // MathML makes no distinction between script and caligrahpic
-    return "script";
-  } else if (font === "mathsf") {
-    return "sans-serif";
-  } else if (font === "mathtt") {
-    return "monospace";
-  }
-
-  let text = group.text;
-
-  if (utils.contains(["\\imath", "\\jmath"], text)) {
-    return null;
-  }
-
-  if (symbols[mode][text] && symbols[mode][text].replace) {
-    text = symbols[mode][text].replace;
-  }
-
-  const fontName = buildCommon.fontMap[font].fontName;
-
-  if (getCharacterMetrics(text, fontName, mode)) {
-    return buildCommon.fontMap[font].variant;
-  }
-
-  return null;
-};
-/**
- * Takes a list of nodes, builds them, and returns a list of the generated
- * MathML nodes.  Also combine consecutive <mtext> outputs into a single
- * <mtext> tag.
- */
-
-const buildExpression$1 = function buildExpression(expression, options, isOrdgroup) {
-  if (expression.length === 1) {
-    const group = buildGroup$1(expression[0], options);
-
-    if (isOrdgroup && group instanceof MathNode && group.type === "mo") {
-      // When TeX writers want to suppress spacing on an operator,
-      // they often put the operator by itself inside braces.
-      group.setAttribute("lspace", "0em");
-      group.setAttribute("rspace", "0em");
-    }
-
-    return [group];
-  }
-
-  const groups = [];
-  let lastGroup;
-
-  for (let i = 0; i < expression.length; i++) {
-    const group = buildGroup$1(expression[i], options);
-
-    if (group instanceof MathNode && lastGroup instanceof MathNode) {
-      // Concatenate adjacent <mtext>s
-      if (group.type === 'mtext' && lastGroup.type === 'mtext' && group.getAttribute('mathvariant') === lastGroup.getAttribute('mathvariant')) {
-        lastGroup.children.push(...group.children);
-        continue; // Concatenate adjacent <mn>s
-      } else if (group.type === 'mn' && lastGroup.type === 'mn') {
-        lastGroup.children.push(...group.children);
-        continue; // Concatenate <mn>...</mn> followed by <mi>.</mi>
-      } else if (group.type === 'mi' && group.children.length === 1 && lastGroup.type === 'mn') {
-        const child = group.children[0];
-
-        if (child instanceof TextNode && child.text === '.') {
-          lastGroup.children.push(...group.children);
-          continue;
-        }
-      } else if (lastGroup.type === 'mi' && lastGroup.children.length === 1) {
-        const lastChild = lastGroup.children[0];
-
-        if (lastChild instanceof TextNode && lastChild.text === '\u0338' && (group.type === 'mo' || group.type === 'mi' || group.type === 'mn')) {
-          const child = group.children[0];
-
-          if (child instanceof TextNode && child.text.length > 0) {
-            // Overlay with combining character long solidus
-            child.text = child.text.slice(0, 1) + "\u0338" + child.text.slice(1);
-            groups.pop();
-          }
-        }
-      }
-    }
-
-    groups.push(group);
-    lastGroup = group;
-  }
-
-  return groups;
-};
-/**
- * Equivalent to buildExpression, but wraps the elements in an <mrow>
- * if there's more than one.  Returns a single node instead of an array.
- */
-
-const buildExpressionRow = function buildExpressionRow(expression, options, isOrdgroup) {
-  return makeRow(buildExpression$1(expression, options, isOrdgroup));
-};
-/**
- * Takes a group from the parser and calls the appropriate groupBuilders function
- * on it to produce a MathML node.
- */
-
-const buildGroup$1 = function buildGroup(group, options) {
-  if (!group) {
-    return new mathMLTree.MathNode("mrow");
-  }
-
-  if (_mathmlGroupBuilders[group.type]) {
-    // Call the groupBuilders function
-    const result = _mathmlGroupBuilders[group.type](group, options);
-    return result;
-  } else {
-    throw new ParseError("Got group of unknown type: '" + group.type + "'");
-  }
-};
-/**
- * Takes a full parse tree and settings and builds a MathML representation of
- * it. In particular, we put the elements from building the parse tree into a
- * <semantics> tag so we can also include that TeX source as an annotation.
- *
- * Note that we actually return a domTree element with a `<math>` inside it so
- * we can do appropriate styling.
- */
-
-function buildMathML(tree, texExpression, options, forMathmlOnly) {
-  const expression = buildExpression$1(tree, options); // Wrap up the expression in an mrow so it is presented in the semantics
-  // tag correctly, unless it's a single <mrow> or <mtable>.
-
-  let wrapper;
-
-  if (expression.length === 1 && expression[0] instanceof MathNode && utils.contains(["mrow", "mtable"], expression[0].type)) {
-    wrapper = expression[0];
-  } else {
-    wrapper = new mathMLTree.MathNode("mrow", expression);
-  } // Build a TeX annotation of the source
-
-
-  const annotation = new mathMLTree.MathNode("annotation", [new mathMLTree.TextNode(texExpression)]);
-  annotation.setAttribute("encoding", "application/x-tex");
-  const semantics = new mathMLTree.MathNode("semantics", [wrapper, annotation]);
-  const math = new mathMLTree.MathNode("math", [semantics]);
-  math.setAttribute("xmlns", "http://www.w3.org/1998/Math/MathML"); // You can't style <math> nodes, so we wrap the node in a span.
-  // NOTE: The span class is not typed to have <math> nodes as children, and
-  // we don't want to make the children type more generic since the children
-  // of span are expected to have more fields in `buildHtml` contexts.
-
-  const wrapperClass = forMathmlOnly ? "katex" : "katex-mathml"; // $FlowFixMe
-
-  return buildCommon.makeSpan([wrapperClass], [math]);
-}
-
-const optionsFromSettings = function optionsFromSettings(settings) {
-  return new Options({
-    style: settings.displayMode ? Style$1.DISPLAY : Style$1.TEXT,
-    maxSize: settings.maxSize,
-    minRuleThickness: settings.minRuleThickness
-  });
-};
-
-const displayWrap = function displayWrap(node, settings) {
-  if (settings.displayMode) {
-    const classes = ["katex-display"];
-
-    if (settings.leqno) {
-      classes.push("leqno");
-    }
-
-    if (settings.fleqn) {
-      classes.push("fleqn");
-    }
-
-    node = buildCommon.makeSpan(classes, [node]);
-  }
-
-  return node;
-};
-
-const buildTree = function buildTree(tree, expression, settings) {
-  const options = optionsFromSettings(settings);
-  let katexNode;
-
-  if (settings.output === "mathml") {
-    return buildMathML(tree, expression, options, true);
-  } else if (settings.output === "html") {
-    const htmlNode = buildHTML(tree, options);
-    katexNode = buildCommon.makeSpan(["katex"], [htmlNode]);
-  } else {
-    const mathMLNode = buildMathML(tree, expression, options, false);
-    const htmlNode = buildHTML(tree, options);
-    katexNode = buildCommon.makeSpan(["katex"], [mathMLNode, htmlNode]);
-  }
-
-  return displayWrap(katexNode, settings);
-};
-const buildHTMLTree = function buildHTMLTree(tree, expression, settings) {
-  const options = optionsFromSettings(settings);
-  const htmlNode = buildHTML(tree, options);
-  const katexNode = buildCommon.makeSpan(["katex"], [htmlNode]);
-  return displayWrap(katexNode, settings);
-};
-
-/**
- * This file provides support to buildMathML.js and buildHTML.js
- * for stretchy wide elements rendered from SVG files
- * and other CSS trickery.
- */
-const stretchyCodePoint = {
-  widehat: "^",
-  widecheck: "ˇ",
-  widetilde: "~",
-  utilde: "~",
-  overleftarrow: "\u2190",
-  underleftarrow: "\u2190",
-  xleftarrow: "\u2190",
-  overrightarrow: "\u2192",
-  underrightarrow: "\u2192",
-  xrightarrow: "\u2192",
-  underbrace: "\u23df",
-  overbrace: "\u23de",
-  overgroup: "\u23e0",
-  undergroup: "\u23e1",
-  overleftrightarrow: "\u2194",
-  underleftrightarrow: "\u2194",
-  xleftrightarrow: "\u2194",
-  Overrightarrow: "\u21d2",
-  xRightarrow: "\u21d2",
-  overleftharpoon: "\u21bc",
-  xleftharpoonup: "\u21bc",
-  overrightharpoon: "\u21c0",
-  xrightharpoonup: "\u21c0",
-  xLeftarrow: "\u21d0",
-  xLeftrightarrow: "\u21d4",
-  xhookleftarrow: "\u21a9",
-  xhookrightarrow: "\u21aa",
-  xmapsto: "\u21a6",
-  xrightharpoondown: "\u21c1",
-  xleftharpoondown: "\u21bd",
-  xrightleftharpoons: "\u21cc",
-  xleftrightharpoons: "\u21cb",
-  xtwoheadleftarrow: "\u219e",
-  xtwoheadrightarrow: "\u21a0",
-  xlongequal: "=",
-  xtofrom: "\u21c4",
-  xrightleftarrows: "\u21c4",
-  xrightequilibrium: "\u21cc",
-  // Not a perfect match.
-  xleftequilibrium: "\u21cb" // None better available.
-
-};
-
-const mathMLnode = function mathMLnode(label) {
-  const node = new mathMLTree.MathNode("mo", [new mathMLTree.TextNode(stretchyCodePoint[label.substr(1)])]);
-  node.setAttribute("stretchy", "true");
-  return node;
-}; // Many of the KaTeX SVG images have been adapted from glyphs in KaTeX fonts.
-// Copyright (c) 2009-2010, Design Science, Inc. (<www.mathjax.org>)
-// Copyright (c) 2014-2017 Khan Academy (<www.khanacademy.org>)
-// Licensed under the SIL Open Font License, Version 1.1.
-// See \nhttp://scripts.sil.org/OFL
-// Very Long SVGs
-//    Many of the KaTeX stretchy wide elements use a long SVG image and an
-//    overflow: hidden tactic to achieve a stretchy image while avoiding
-//    distortion of arrowheads or brace corners.
-//    The SVG typically contains a very long (400 em) arrow.
-//    The SVG is in a container span that has overflow: hidden, so the span
-//    acts like a window that exposes only part of the  SVG.
-//    The SVG always has a longer, thinner aspect ratio than the container span.
-//    After the SVG fills 100% of the height of the container span,
-//    there is a long arrow shaft left over. That left-over shaft is not shown.
-//    Instead, it is sliced off because the span's CSS has overflow: hidden.
-//    Thus, the reader sees an arrow that matches the subject matter width
-//    without distortion.
-//    Some functions, such as \cancel, need to vary their aspect ratio. These
-//    functions do not get the overflow SVG treatment.
-// Second Brush Stroke
-//    Low resolution monitors struggle to display images in fine detail.
-//    So browsers apply anti-aliasing. A long straight arrow shaft therefore
-//    will sometimes appear as if it has a blurred edge.
-//    To mitigate this, these SVG files contain a second "brush-stroke" on the
-//    arrow shafts. That is, a second long thin rectangular SVG path has been
-//    written directly on top of each arrow shaft. This reinforcement causes
-//    some of the screen pixels to display as black instead of the anti-aliased
-//    gray pixel that a  single path would generate. So we get arrow shafts
-//    whose edges appear to be sharper.
-// In the katexImagesData object just below, the dimensions all
-// correspond to path geometry inside the relevant SVG.
-// For example, \overrightarrow uses the same arrowhead as glyph U+2192
-// from the KaTeX Main font. The scaling factor is 1000.
-// That is, inside the font, that arrowhead is 522 units tall, which
-// corresponds to 0.522 em inside the document.
-
-
-const katexImagesData = {
-  //   path(s), minWidth, height, align
-  overrightarrow: [["rightarrow"], 0.888, 522, "xMaxYMin"],
-  overleftarrow: [["leftarrow"], 0.888, 522, "xMinYMin"],
-  underrightarrow: [["rightarrow"], 0.888, 522, "xMaxYMin"],
-  underleftarrow: [["leftarrow"], 0.888, 522, "xMinYMin"],
-  xrightarrow: [["rightarrow"], 1.469, 522, "xMaxYMin"],
-  xleftarrow: [["leftarrow"], 1.469, 522, "xMinYMin"],
-  Overrightarrow: [["doublerightarrow"], 0.888, 560, "xMaxYMin"],
-  xRightarrow: [["doublerightarrow"], 1.526, 560, "xMaxYMin"],
-  xLeftarrow: [["doubleleftarrow"], 1.526, 560, "xMinYMin"],
-  overleftharpoon: [["leftharpoon"], 0.888, 522, "xMinYMin"],
-  xleftharpoonup: [["leftharpoon"], 0.888, 522, "xMinYMin"],
-  xleftharpoondown: [["leftharpoondown"], 0.888, 522, "xMinYMin"],
-  overrightharpoon: [["rightharpoon"], 0.888, 522, "xMaxYMin"],
-  xrightharpoonup: [["rightharpoon"], 0.888, 522, "xMaxYMin"],
-  xrightharpoondown: [["rightharpoondown"], 0.888, 522, "xMaxYMin"],
-  xlongequal: [["longequal"], 0.888, 334, "xMinYMin"],
-  xtwoheadleftarrow: [["twoheadleftarrow"], 0.888, 334, "xMinYMin"],
-  xtwoheadrightarrow: [["twoheadrightarrow"], 0.888, 334, "xMaxYMin"],
-  overleftrightarrow: [["leftarrow", "rightarrow"], 0.888, 522],
-  overbrace: [["leftbrace", "midbrace", "rightbrace"], 1.6, 548],
-  underbrace: [["leftbraceunder", "midbraceunder", "rightbraceunder"], 1.6, 548],
-  underleftrightarrow: [["leftarrow", "rightarrow"], 0.888, 522],
-  xleftrightarrow: [["leftarrow", "rightarrow"], 1.75, 522],
-  xLeftrightarrow: [["doubleleftarrow", "doublerightarrow"], 1.75, 560],
-  xrightleftharpoons: [["leftharpoondownplus", "rightharpoonplus"], 1.75, 716],
-  xleftrightharpoons: [["leftharpoonplus", "rightharpoondownplus"], 1.75, 716],
-  xhookleftarrow: [["leftarrow", "righthook"], 1.08, 522],
-  xhookrightarrow: [["lefthook", "rightarrow"], 1.08, 522],
-  overlinesegment: [["leftlinesegment", "rightlinesegment"], 0.888, 522],
-  underlinesegment: [["leftlinesegment", "rightlinesegment"], 0.888, 522],
-  overgroup: [["leftgroup", "rightgroup"], 0.888, 342],
-  undergroup: [["leftgroupunder", "rightgroupunder"], 0.888, 342],
-  xmapsto: [["leftmapsto", "rightarrow"], 1.5, 522],
-  xtofrom: [["leftToFrom", "rightToFrom"], 1.75, 528],
-  // The next three arrows are from the mhchem package.
-  // In mhchem.sty, min-length is 2.0em. But these arrows might appear in the
-  // document as \xrightarrow or \xrightleftharpoons. Those have
-  // min-length = 1.75em, so we set min-length on these next three to match.
-  xrightleftarrows: [["baraboveleftarrow", "rightarrowabovebar"], 1.75, 901],
-  xrightequilibrium: [["baraboveshortleftharpoon", "rightharpoonaboveshortbar"], 1.75, 716],
-  xleftequilibrium: [["shortbaraboveleftharpoon", "shortrightharpoonabovebar"], 1.75, 716]
-};
-
-const groupLength = function groupLength(arg) {
-  if (arg.type === "ordgroup") {
-    return arg.body.length;
-  } else {
-    return 1;
-  }
-};
-
-const svgSpan = function svgSpan(group, options) {
-  // Create a span with inline SVG for the element.
-  function buildSvgSpan_() {
-    let viewBoxWidth = 400000; // default
-
-    const label = group.label.substr(1);
-
-    if (utils.contains(["widehat", "widecheck", "widetilde", "utilde"], label)) {
-      // Each type in the `if` statement corresponds to one of the ParseNode
-      // types below. This narrowing is required to access `grp.base`.
-      const grp = group; // There are four SVG images available for each function.
-      // Choose a taller image when there are more characters.
-
-      const numChars = groupLength(grp.base);
-      let viewBoxHeight;
-      let pathName;
-      let height;
-
-      if (numChars > 5) {
-        if (label === "widehat" || label === "widecheck") {
-          viewBoxHeight = 420;
-          viewBoxWidth = 2364;
-          height = 0.42;
-          pathName = label + "4";
-        } else {
-          viewBoxHeight = 312;
-          viewBoxWidth = 2340;
-          height = 0.34;
-          pathName = "tilde4";
-        }
-      } else {
-        const imgIndex = [1, 1, 2, 2, 3, 3][numChars];
-
-        if (label === "widehat" || label === "widecheck") {
-          viewBoxWidth = [0, 1062, 2364, 2364, 2364][imgIndex];
-          viewBoxHeight = [0, 239, 300, 360, 420][imgIndex];
-          height = [0, 0.24, 0.3, 0.3, 0.36, 0.42][imgIndex];
-          pathName = label + imgIndex;
-        } else {
-          viewBoxWidth = [0, 600, 1033, 2339, 2340][imgIndex];
-          viewBoxHeight = [0, 260, 286, 306, 312][imgIndex];
-          height = [0, 0.26, 0.286, 0.3, 0.306, 0.34][imgIndex];
-          pathName = "tilde" + imgIndex;
-        }
-      }
-
-      const path = new PathNode(pathName);
-      const svgNode = new SvgNode([path], {
-        "width": "100%",
-        "height": height + "em",
-        "viewBox": `0 0 ${viewBoxWidth} ${viewBoxHeight}`,
-        "preserveAspectRatio": "none"
-      });
-      return {
-        span: buildCommon.makeSvgSpan([], [svgNode], options),
-        minWidth: 0,
-        height
-      };
-    } else {
-      const spans = [];
-      const data = katexImagesData[label];
-      const paths = data[0],
-            minWidth = data[1],
-            viewBoxHeight = data[2];
-      const height = viewBoxHeight / 1000;
-      const numSvgChildren = paths.length;
-      let widthClasses;
-      let aligns;
-
-      if (numSvgChildren === 1) {
-        // $FlowFixMe: All these cases must be of the 4-tuple type.
-        const align1 = data[3];
-        widthClasses = ["hide-tail"];
-        aligns = [align1];
-      } else if (numSvgChildren === 2) {
-        widthClasses = ["halfarrow-left", "halfarrow-right"];
-        aligns = ["xMinYMin", "xMaxYMin"];
-      } else if (numSvgChildren === 3) {
-        widthClasses = ["brace-left", "brace-center", "brace-right"];
-        aligns = ["xMinYMin", "xMidYMin", "xMaxYMin"];
-      } else {
-        throw new Error(`Correct katexImagesData or update code here to support
-                    ${numSvgChildren} children.`);
-      }
-
-      for (let i = 0; i < numSvgChildren; i++) {
-        const path = new PathNode(paths[i]);
-        const svgNode = new SvgNode([path], {
-          "width": "400em",
-          "height": height + "em",
-          "viewBox": `0 0 ${viewBoxWidth} ${viewBoxHeight}`,
-          "preserveAspectRatio": aligns[i] + " slice"
-        });
-        const span = buildCommon.makeSvgSpan([widthClasses[i]], [svgNode], options);
-
-        if (numSvgChildren === 1) {
-          return {
-            span,
-            minWidth,
-            height
-          };
-        } else {
-          span.style.height = height + "em";
-          spans.push(span);
-        }
-      }
-
-      return {
-        span: buildCommon.makeSpan(["stretchy"], spans, options),
-        minWidth,
-        height
-      };
-    }
-  } // buildSvgSpan_()
-
-
-  const _buildSvgSpan_ = buildSvgSpan_(),
-        span = _buildSvgSpan_.span,
-        minWidth = _buildSvgSpan_.minWidth,
-        height = _buildSvgSpan_.height; // Note that we are returning span.depth = 0.
-  // Any adjustments relative to the baseline must be done in buildHTML.
-
-
-  span.height = height;
-  span.style.height = height + "em";
-
-  if (minWidth > 0) {
-    span.style.minWidth = minWidth + "em";
-  }
-
-  return span;
-};
-
-const encloseSpan = function encloseSpan(inner, label, pad, options) {
-  // Return an image span for \cancel, \bcancel, \xcancel, or \fbox
-  let img;
-  const totalHeight = inner.height + inner.depth + 2 * pad;
-
-  if (/fbox|color/.test(label)) {
-    img = buildCommon.makeSpan(["stretchy", label], [], options);
-
-    if (label === "fbox") {
-      const color = options.color && options.getColor();
-
-      if (color) {
-        img.style.borderColor = color;
-      }
-    }
-  } else {
-    // \cancel, \bcancel, or \xcancel
-    // Since \cancel's SVG is inline and it omits the viewBox attribute,
-    // its stroke-width will not vary with span area.
-    const lines = [];
-
-    if (/^[bx]cancel$/.test(label)) {
-      lines.push(new LineNode({
-        "x1": "0",
-        "y1": "0",
-        "x2": "100%",
-        "y2": "100%",
-        "stroke-width": "0.046em"
-      }));
-    }
-
-    if (/^x?cancel$/.test(label)) {
-      lines.push(new LineNode({
-        "x1": "0",
-        "y1": "100%",
-        "x2": "100%",
-        "y2": "0",
-        "stroke-width": "0.046em"
-      }));
-    }
-
-    const svgNode = new SvgNode(lines, {
-      "width": "100%",
-      "height": totalHeight + "em"
-    });
-    img = buildCommon.makeSvgSpan([], [svgNode], options);
-  }
-
-  img.height = totalHeight;
-  img.style.height = totalHeight + "em";
-  return img;
-};
-
-var stretchy = {
-  encloseSpan,
-  mathMLnode,
-  svgSpan
-};
-
-// NOTE: Unlike most `htmlBuilder`s, this one handles not only "accent", but
-const htmlBuilder = (grp, options) => {
-  // Accents are handled in the TeXbook pg. 443, rule 12.
-  let base;
-  let group;
-  const supSub = checkNodeType(grp, "supsub");
-  let supSubGroup;
-
-  if (supSub) {
-    // If our base is a character box, and we have superscripts and
-    // subscripts, the supsub will defer to us. In particular, we want
-    // to attach the superscripts and subscripts to the inner body (so
-    // that the position of the superscripts and subscripts won't be
-    // affected by the height of the accent). We accomplish this by
-    // sticking the base of the accent into the base of the supsub, and
-    // rendering that, while keeping track of where the accent is.
-    // The real accent group is the base of the supsub group
-    group = assertNodeType(supSub.base, "accent"); // The character box is the base of the accent group
-
-    base = group.base; // Stick the character box into the base of the supsub group
-
-    supSub.base = base; // Rerender the supsub group with its new base, and store that
-    // result.
-
-    supSubGroup = assertSpan(buildGroup(supSub, options)); // reset original base
-
-    supSub.base = group;
-  } else {
-    group = assertNodeType(grp, "accent");
-    base = group.base;
-  } // Build the base group
-
-
-  const body = buildGroup(base, options.havingCrampedStyle()); // Does the accent need to shift for the skew of a character?
-
-  const mustShift = group.isShifty && utils.isCharacterBox(base); // Calculate the skew of the accent. This is based on the line "If the
-  // nucleus is not a single character, let s = 0; otherwise set s to the
-  // kern amount for the nucleus followed by the \skewchar of its font."
-  // Note that our skew metrics are just the kern between each character
-  // and the skewchar.
-
-  let skew = 0;
-
-  if (mustShift) {
-    // If the base is a character box, then we want the skew of the
-    // innermost character. To do that, we find the innermost character:
-    const baseChar = utils.getBaseElem(base); // Then, we render its group to get the symbol inside it
-
-    const baseGroup = buildGroup(baseChar, options.havingCrampedStyle()); // Finally, we pull the skew off of the symbol.
-
-    skew = assertSymbolDomNode(baseGroup).skew; // Note that we now throw away baseGroup, because the layers we
-    // removed with getBaseElem might contain things like \color which
-    // we can't get rid of.
-    // TODO(emily): Find a better way to get the skew
-  } // calculate the amount of space between the body and the accent
-
-
-  let clearance = Math.min(body.height, options.fontMetrics().xHeight); // Build the accent
-
-  let accentBody;
-
-  if (!group.isStretchy) {
-    let accent;
-    let width;
-
-    if (group.label === "\\vec") {
-      // Before version 0.9, \vec used the combining font glyph U+20D7.
-      // But browsers, especially Safari, are not consistent in how they
-      // render combining characters when not preceded by a character.
-      // So now we use an SVG.
-      // If Safari reforms, we should consider reverting to the glyph.
-      accent = buildCommon.staticSvg("vec", options);
-      width = buildCommon.svgData.vec[1];
-    } else {
-      accent = buildCommon.makeOrd({
-        mode: group.mode,
-        text: group.label
-      }, options, "textord");
-      accent = assertSymbolDomNode(accent); // Remove the italic correction of the accent, because it only serves to
-      // shift the accent over to a place we don't want.
-
-      accent.italic = 0;
-      width = accent.width;
-    }
-
-    accentBody = buildCommon.makeSpan(["accent-body"], [accent]); // "Full" accents expand the width of the resulting symbol to be
-    // at least the width of the accent, and overlap directly onto the
-    // character without any vertical offset.
-
-    const accentFull = group.label === "\\textcircled";
-
-    if (accentFull) {
-      accentBody.classes.push('accent-full');
-      clearance = body.height;
-    } // Shift the accent over by the skew.
-
-
-    let left = skew; // CSS defines `.katex .accent .accent-body:not(.accent-full) { width: 0 }`
-    // so that the accent doesn't contribute to the bounding box.
-    // We need to shift the character by its width (effectively half
-    // its width) to compensate.
-
-    if (!accentFull) {
-      left -= width / 2;
-    }
-
-    accentBody.style.left = left + "em"; // \textcircled uses the \bigcirc glyph, so it needs some
-    // vertical adjustment to match LaTeX.
-
-    if (group.label === "\\textcircled") {
-      accentBody.style.top = ".2em";
-    }
-
-    accentBody = buildCommon.makeVList({
-      positionType: "firstBaseline",
-      children: [{
-        type: "elem",
-        elem: body
-      }, {
-        type: "kern",
-        size: -clearance
-      }, {
-        type: "elem",
-        elem: accentBody
-      }]
-    }, options);
-  } else {
-    accentBody = stretchy.svgSpan(group, options);
-    accentBody = buildCommon.makeVList({
-      positionType: "firstBaseline",
-      children: [{
-        type: "elem",
-        elem: body
-      }, {
-        type: "elem",
-        elem: accentBody,
-        wrapperClasses: ["svg-align"],
-        wrapperStyle: skew > 0 ? {
-          width: `calc(100% - ${2 * skew}em)`,
-          marginLeft: `${2 * skew}em`
-        } : undefined
-      }]
-    }, options);
-  }
-
-  const accentWrap = buildCommon.makeSpan(["mord", "accent"], [accentBody], options);
-
-  if (supSubGroup) {
-    // Here, we replace the "base" child of the supsub with our newly
-    // generated accent.
-    supSubGroup.children[0] = accentWrap; // Since we don't rerun the height calculation after replacing the
-    // accent, we manually recalculate height.
-
-    supSubGroup.height = Math.max(accentWrap.height, supSubGroup.height); // Accents should always be ords, even when their innards are not.
-
-    supSubGroup.classes[0] = "mord";
-    return supSubGroup;
-  } else {
-    return accentWrap;
-  }
-};
-
-const mathmlBuilder = (group, options) => {
-  const accentNode = group.isStretchy ? stretchy.mathMLnode(group.label) : new mathMLTree.MathNode("mo", [makeText(group.label, group.mode)]);
-  const node = new mathMLTree.MathNode("mover", [buildGroup$1(group.base, options), accentNode]);
-  node.setAttribute("accent", "true");
-  return node;
-};
-
-const NON_STRETCHY_ACCENT_REGEX = new RegExp(["\\acute", "\\grave", "\\ddot", "\\tilde", "\\bar", "\\breve", "\\check", "\\hat", "\\vec", "\\dot", "\\mathring"].map(accent => `\\${accent}`).join("|")); // Accents
-
-defineFunction({
-  type: "accent",
-  names: ["\\acute", "\\grave", "\\ddot", "\\tilde", "\\bar", "\\breve", "\\check", "\\hat", "\\vec", "\\dot", "\\mathring", "\\widecheck", "\\widehat", "\\widetilde", "\\overrightarrow", "\\overleftarrow", "\\Overrightarrow", "\\overleftrightarrow", "\\overgroup", "\\overlinesegment", "\\overleftharpoon", "\\overrightharpoon"],
-  props: {
-    numArgs: 1
-  },
-  handler: (context, args) => {
-    const base = args[0];
-    const isStretchy = !NON_STRETCHY_ACCENT_REGEX.test(context.funcName);
-    const isShifty = !isStretchy || context.funcName === "\\widehat" || context.funcName === "\\widetilde" || context.funcName === "\\widecheck";
-    return {
-      type: "accent",
-      mode: context.parser.mode,
-      label: context.funcName,
-      isStretchy: isStretchy,
-      isShifty: isShifty,
-      base: base
-    };
-  },
-  htmlBuilder,
-  mathmlBuilder
-}); // Text-mode accents
-
-defineFunction({
-  type: "accent",
-  names: ["\\'", "\\`", "\\^", "\\~", "\\=", "\\u", "\\.", '\\"', "\\r", "\\H", "\\v", "\\textcircled"],
-  props: {
-    numArgs: 1,
-    allowedInText: true,
-    allowedInMath: false
-  },
-  handler: (context, args) => {
-    const base = args[0];
-    return {
-      type: "accent",
-      mode: context.parser.mode,
-      label: context.funcName,
-      isStretchy: false,
-      isShifty: true,
-      base: base
-    };
-  },
-  htmlBuilder,
-  mathmlBuilder
-});
-
-// Horizontal overlap functions
-defineFunction({
-  type: "accentUnder",
-  names: ["\\underleftarrow", "\\underrightarrow", "\\underleftrightarrow", "\\undergroup", "\\underlinesegment", "\\utilde"],
-  props: {
-    numArgs: 1
-  },
-  handler: (_ref, args) => {
-    let parser = _ref.parser,
-        funcName = _ref.funcName;
-    const base = args[0];
-    return {
-      type: "accentUnder",
-      mode: parser.mode,
-      label: funcName,
-      base: base
-    };
-  },
-  htmlBuilder: (group, options) => {
-    // Treat under accents much like underlines.
-    const innerGroup = buildGroup(group.base, options);
-    const accentBody = stretchy.svgSpan(group, options);
-    const kern = group.label === "\\utilde" ? 0.12 : 0; // Generate the vlist, with the appropriate kerns
-
-    const vlist = buildCommon.makeVList({
-      positionType: "bottom",
-      positionData: accentBody.height + kern,
-      children: [{
-        type: "elem",
-        elem: accentBody,
-        wrapperClasses: ["svg-align"]
-      }, {
-        type: "kern",
-        size: kern
-      }, {
-        type: "elem",
-        elem: innerGroup
-      }]
-    }, options);
-    return buildCommon.makeSpan(["mord", "accentunder"], [vlist], options);
-  },
-  mathmlBuilder: (group, options) => {
-    const accentNode = stretchy.mathMLnode(group.label);
-    const node = new mathMLTree.MathNode("munder", [buildGroup$1(group.base, options), accentNode]);
-    node.setAttribute("accentunder", "true");
-    return node;
-  }
-});
-
-// Helper function
-const paddedNode = group => {
-  const node = new mathMLTree.MathNode("mpadded", group ? [group] : []);
-  node.setAttribute("width", "+0.6em");
-  node.setAttribute("lspace", "0.3em");
-  return node;
-}; // Stretchy arrows with an optional argument
-
-
-defineFunction({
-  type: "xArrow",
-  names: ["\\xleftarrow", "\\xrightarrow", "\\xLeftarrow", "\\xRightarrow", "\\xleftrightarrow", "\\xLeftrightarrow", "\\xhookleftarrow", "\\xhookrightarrow", "\\xmapsto", "\\xrightharpoondown", "\\xrightharpoonup", "\\xleftharpoondown", "\\xleftharpoonup", "\\xrightleftharpoons", "\\xleftrightharpoons", "\\xlongequal", "\\xtwoheadrightarrow", "\\xtwoheadleftarrow", "\\xtofrom", // The next 3 functions are here to support the mhchem extension.
-  // Direct use of these functions is discouraged and may break someday.
-  "\\xrightleftarrows", "\\xrightequilibrium", "\\xleftequilibrium"],
-  props: {
-    numArgs: 1,
-    numOptionalArgs: 1
-  },
-
-  handler(_ref, args, optArgs) {
-    let parser = _ref.parser,
-        funcName = _ref.funcName;
-    return {
-      type: "xArrow",
-      mode: parser.mode,
-      label: funcName,
-      body: args[0],
-      below: optArgs[0]
-    };
-  },
-
-  // Flow is unable to correctly infer the type of `group`, even though it's
-  // unamibiguously determined from the passed-in `type` above.
-  htmlBuilder(group, options) {
-    const style = options.style; // Build the argument groups in the appropriate style.
-    // Ref: amsmath.dtx:   \hbox{$\scriptstyle\mkern#3mu{#6}\mkern#4mu$}%
-    // Some groups can return document fragments.  Handle those by wrapping
-    // them in a span.
-
-    let newOptions = options.havingStyle(style.sup());
-    const upperGroup = buildCommon.wrapFragment(buildGroup(group.body, newOptions, options), options);
-    upperGroup.classes.push("x-arrow-pad");
-    let lowerGroup;
-
-    if (group.below) {
-      // Build the lower group
-      newOptions = options.havingStyle(style.sub());
-      lowerGroup = buildCommon.wrapFragment(buildGroup(group.below, newOptions, options), options);
-      lowerGroup.classes.push("x-arrow-pad");
-    }
-
-    const arrowBody = stretchy.svgSpan(group, options); // Re shift: Note that stretchy.svgSpan returned arrowBody.depth = 0.
-    // The point we want on the math axis is at 0.5 * arrowBody.height.
-
-    const arrowShift = -options.fontMetrics().axisHeight + 0.5 * arrowBody.height; // 2 mu kern. Ref: amsmath.dtx: #7\if0#2\else\mkern#2mu\fi
-
-    let upperShift = -options.fontMetrics().axisHeight - 0.5 * arrowBody.height - 0.111; // 0.111 em = 2 mu
-
-    if (upperGroup.depth > 0.25 || group.label === "\\xleftequilibrium") {
-      upperShift -= upperGroup.depth; // shift up if depth encroaches
-    } // Generate the vlist
-
-
-    let vlist;
-
-    if (lowerGroup) {
-      const lowerShift = -options.fontMetrics().axisHeight + lowerGroup.height + 0.5 * arrowBody.height + 0.111;
-      vlist = buildCommon.makeVList({
-        positionType: "individualShift",
-        children: [{
-          type: "elem",
-          elem: upperGroup,
-          shift: upperShift
-        }, {
-          type: "elem",
-          elem: arrowBody,
-          shift: arrowShift
-        }, {
-          type: "elem",
-          elem: lowerGroup,
-          shift: lowerShift
-        }]
-      }, options);
-    } else {
-      vlist = buildCommon.makeVList({
-        positionType: "individualShift",
-        children: [{
-          type: "elem",
-          elem: upperGroup,
-          shift: upperShift
-        }, {
-          type: "elem",
-          elem: arrowBody,
-          shift: arrowShift
-        }]
-      }, options);
-    } // $FlowFixMe: Replace this with passing "svg-align" into makeVList.
-
-
-    vlist.children[0].children[0].children[1].classes.push("svg-align");
-    return buildCommon.makeSpan(["mrel", "x-arrow"], [vlist], options);
-  },
-
-  mathmlBuilder(group, options) {
-    const arrowNode = stretchy.mathMLnode(group.label);
-    let node;
-
-    if (group.body) {
-      const upperNode = paddedNode(buildGroup$1(group.body, options));
-
-      if (group.below) {
-        const lowerNode = paddedNode(buildGroup$1(group.below, options));
-        node = new mathMLTree.MathNode("munderover", [arrowNode, lowerNode, upperNode]);
-      } else {
-        node = new mathMLTree.MathNode("mover", [arrowNode, upperNode]);
-      }
-    } else if (group.below) {
-      const lowerNode = paddedNode(buildGroup$1(group.below, options));
-      node = new mathMLTree.MathNode("munder", [arrowNode, lowerNode]);
-    } else {
-      // This should never happen.
-      // Parser.js throws an error if there is no argument.
-      node = paddedNode();
-      node = new mathMLTree.MathNode("mover", [arrowNode, node]);
-    }
-
-    return node;
-  }
-
-});
-
-// {123} and converts into symbol with code 123.  It is used by the *macro*
-// \char defined in macros.js.
-
-defineFunction({
-  type: "textord",
-  names: ["\\@char"],
-  props: {
-    numArgs: 1,
-    allowedInText: true
-  },
-
-  handler(_ref, args) {
-    let parser = _ref.parser;
-    const arg = assertNodeType(args[0], "ordgroup");
-    const group = arg.body;
-    let number = "";
-
-    for (let i = 0; i < group.length; i++) {
-      const node = assertNodeType(group[i], "textord");
-      number += node.text;
-    }
-
-    const code = parseInt(number);
-
-    if (isNaN(code)) {
-      throw new ParseError(`\\@char has non-numeric argument ${number}`);
-    }
-
-    return {
-      type: "textord",
-      mode: parser.mode,
-      text: String.fromCharCode(code)
-    };
-  }
-
-});
-
-const htmlBuilder$1 = (group, options) => {
-  const elements = buildExpression(group.body, options.withColor(group.color), false); // \color isn't supposed to affect the type of the elements it contains.
-  // To accomplish this, we wrap the results in a fragment, so the inner
-  // elements will be able to directly interact with their neighbors. For
-  // example, `\color{red}{2 +} 3` has the same spacing as `2 + 3`
-
-  return buildCommon.makeFragment(elements);
-};
-
-const mathmlBuilder$1 = (group, options) => {
-  const inner = buildExpression$1(group.body, options.withColor(group.color));
-  const node = new mathMLTree.MathNode("mstyle", inner);
-  node.setAttribute("mathcolor", group.color);
-  return node;
-};
-
-defineFunction({
-  type: "color",
-  names: ["\\textcolor"],
-  props: {
-    numArgs: 2,
-    allowedInText: true,
-    greediness: 3,
-    argTypes: ["color", "original"]
-  },
-
-  handler(_ref, args) {
-    let parser = _ref.parser;
-    const color = assertNodeType(args[0], "color-token").color;
-    const body = args[1];
-    return {
-      type: "color",
-      mode: parser.mode,
-      color,
-      body: ordargument(body)
-    };
-  },
-
-  htmlBuilder: htmlBuilder$1,
-  mathmlBuilder: mathmlBuilder$1
-});
-defineFunction({
-  type: "color",
-  names: ["\\color"],
-  props: {
-    numArgs: 1,
-    allowedInText: true,
-    greediness: 3,
-    argTypes: ["color"]
-  },
-
-  handler(_ref2, args) {
-    let parser = _ref2.parser,
-        breakOnTokenText = _ref2.breakOnTokenText;
-    const color = assertNodeType(args[0], "color-token").color; // Set macro \current@color in current namespace to store the current
-    // color, mimicking the behavior of color.sty.
-    // This is currently used just to correctly color a \right
-    // that follows a \color command.
-
-    parser.gullet.macros.set("\\current@color", color); // Parse out the implicit body that should be colored.
-
-    const body = parser.parseExpression(true, breakOnTokenText);
-    return {
-      type: "color",
-      mode: parser.mode,
-      color,
-      body
-    };
-  },
-
-  htmlBuilder: htmlBuilder$1,
-  mathmlBuilder: mathmlBuilder$1
-});
-
-// Row breaks within tabular environments, and line breaks at top level
-// same signature, we implement them as one megafunction, with newRow
-// indicating whether we're in the \cr case, and newLine indicating whether
-// to break the line in the \newline case.
-
-defineFunction({
-  type: "cr",
-  names: ["\\cr", "\\newline"],
-  props: {
-    numArgs: 0,
-    numOptionalArgs: 1,
-    argTypes: ["size"],
-    allowedInText: true
-  },
-
-  handler(_ref, args, optArgs) {
-    let parser = _ref.parser,
-        funcName = _ref.funcName;
-    const size = optArgs[0];
-    const newRow = funcName === "\\cr";
-    let newLine = false;
-
-    if (!newRow) {
-      if (parser.settings.displayMode && parser.settings.useStrictBehavior("newLineInDisplayMode", "In LaTeX, \\\\ or \\newline " + "does nothing in display mode")) {
-        newLine = false;
-      } else {
-        newLine = true;
-      }
-    }
-
-    return {
-      type: "cr",
-      mode: parser.mode,
-      newLine,
-      newRow,
-      size: size && assertNodeType(size, "size").value
-    };
-  },
-
-  // The following builders are called only at the top level,
-  // not within tabular/array environments.
-  htmlBuilder(group, options) {
-    if (group.newRow) {
-      throw new ParseError("\\cr valid only within a tabular/array environment");
-    }
-
-    const span = buildCommon.makeSpan(["mspace"], [], options);
-
-    if (group.newLine) {
-      span.classes.push("newline");
-
-      if (group.size) {
-        span.style.marginTop = calculateSize(group.size, options) + "em";
-      }
-    }
-
-    return span;
-  },
-
-  mathmlBuilder(group, options) {
-    const node = new mathMLTree.MathNode("mspace");
-
-    if (group.newLine) {
-      node.setAttribute("linebreak", "newline");
-
-      if (group.size) {
-        node.setAttribute("height", calculateSize(group.size, options) + "em");
-      }
-    }
-
-    return node;
-  }
-
-});
-
-/**
- * This file deals with creating delimiters of various sizes. The TeXbook
- * discusses these routines on page 441-442, in the "Another subroutine sets box
- * x to a specified variable delimiter" paragraph.
- *
- * There are three main routines here. `makeSmallDelim` makes a delimiter in the
- * normal font, but in either text, script, or scriptscript style.
- * `makeLargeDelim` makes a delimiter in textstyle, but in one of the Size1,
- * Size2, Size3, or Size4 fonts. `makeStackedDelim` makes a delimiter out of
- * smaller pieces that are stacked on top of one another.
- *
- * The functions take a parameter `center`, which determines if the delimiter
- * should be centered around the axis.
- *
- * Then, there are three exposed functions. `sizedDelim` makes a delimiter in
- * one of the given sizes. This is used for things like `\bigl`.
- * `customSizedDelim` makes a delimiter with a given total height+depth. It is
- * called in places like `\sqrt`. `leftRightDelim` makes an appropriate
- * delimiter which surrounds an expression of a given height an depth. It is
- * used in `\left` and `\right`.
- */
-
-/**
- * Get the metrics for a given symbol and font, after transformation (i.e.
- * after following replacement from symbols.js)
- */
-const getMetrics = function getMetrics(symbol, font, mode) {
-  const replace = symbols.math[symbol] && symbols.math[symbol].replace;
-  const metrics = getCharacterMetrics(replace || symbol, font, mode);
-
-  if (!metrics) {
-    throw new Error(`Unsupported symbol ${symbol} and font size ${font}.`);
-  }
-
-  return metrics;
-};
-/**
- * Puts a delimiter span in a given style, and adds appropriate height, depth,
- * and maxFontSizes.
- */
-
-
-const styleWrap = function styleWrap(delim, toStyle, options, classes) {
-  const newOptions = options.havingBaseStyle(toStyle);
-  const span = buildCommon.makeSpan(classes.concat(newOptions.sizingClasses(options)), [delim], options);
-  const delimSizeMultiplier = newOptions.sizeMultiplier / options.sizeMultiplier;
-  span.height *= delimSizeMultiplier;
-  span.depth *= delimSizeMultiplier;
-  span.maxFontSize = newOptions.sizeMultiplier;
-  return span;
-};
-
-const centerSpan = function centerSpan(span, options, style) {
-  const newOptions = options.havingBaseStyle(style);
-  const shift = (1 - options.sizeMultiplier / newOptions.sizeMultiplier) * options.fontMetrics().axisHeight;
-  span.classes.push("delimcenter");
-  span.style.top = shift + "em";
-  span.height -= shift;
-  span.depth += shift;
-};
-/**
- * Makes a small delimiter. This is a delimiter that comes in the Main-Regular
- * font, but is restyled to either be in textstyle, scriptstyle, or
- * scriptscriptstyle.
- */
-
-
-const makeSmallDelim = function makeSmallDelim(delim, style, center, options, mode, classes) {
-  const text = buildCommon.makeSymbol(delim, "Main-Regular", mode, options);
-  const span = styleWrap(text, style, options, classes);
-
-  if (center) {
-    centerSpan(span, options, style);
-  }
-
-  return span;
-};
-/**
- * Builds a symbol in the given font size (note size is an integer)
- */
-
-
-const mathrmSize = function mathrmSize(value, size, mode, options) {
-  return buildCommon.makeSymbol(value, "Size" + size + "-Regular", mode, options);
-};
-/**
- * Makes a large delimiter. This is a delimiter that comes in the Size1, Size2,
- * Size3, or Size4 fonts. It is always rendered in textstyle.
- */
-
-
-const makeLargeDelim = function makeLargeDelim(delim, size, center, options, mode, classes) {
-  const inner = mathrmSize(delim, size, mode, options);
-  const span = styleWrap(buildCommon.makeSpan(["delimsizing", "size" + size], [inner], options), Style$1.TEXT, options, classes);
-
-  if (center) {
-    centerSpan(span, options, Style$1.TEXT);
-  }
-
-  return span;
-};
-/**
- * Make an inner span with the given offset and in the given font. This is used
- * in `makeStackedDelim` to make the stacking pieces for the delimiter.
- */
-
-
-const makeInner = function makeInner(symbol, font, mode) {
-  let sizeClass; // Apply the correct CSS class to choose the right font.
-
-  if (font === "Size1-Regular") {
-    sizeClass = "delim-size1";
-  } else
-    /* if (font === "Size4-Regular") */
-    {
-      sizeClass = "delim-size4";
-    }
-
-  const inner = buildCommon.makeSpan(["delimsizinginner", sizeClass], [buildCommon.makeSpan([], [buildCommon.makeSymbol(symbol, font, mode)])]); // Since this will be passed into `makeVList` in the end, wrap the element
-  // in the appropriate tag that VList uses.
-
-  return {
-    type: "elem",
-    elem: inner
-  };
-}; // Helper for makeStackedDelim
-
-
-const lap = {
-  type: "kern",
-  size: -0.005
-};
-/**
- * Make a stacked delimiter out of a given delimiter, with the total height at
- * least `heightTotal`. This routine is mentioned on page 442 of the TeXbook.
- */
-
-const makeStackedDelim = function makeStackedDelim(delim, heightTotal, center, options, mode, classes) {
-  // There are four parts, the top, an optional middle, a repeated part, and a
-  // bottom.
-  let top;
-  let middle;
-  let repeat;
-  let bottom;
-  top = repeat = bottom = delim;
-  middle = null; // Also keep track of what font the delimiters are in
-
-  let font = "Size1-Regular"; // We set the parts and font based on the symbol. Note that we use
-  // '\u23d0' instead of '|' and '\u2016' instead of '\\|' for the
-  // repeats of the arrows
-
-  if (delim === "\\uparrow") {
-    repeat = bottom = "\u23d0";
-  } else if (delim === "\\Uparrow") {
-    repeat = bottom = "\u2016";
-  } else if (delim === "\\downarrow") {
-    top = repeat = "\u23d0";
-  } else if (delim === "\\Downarrow") {
-    top = repeat = "\u2016";
-  } else if (delim === "\\updownarrow") {
-    top = "\\uparrow";
-    repeat = "\u23d0";
-    bottom = "\\downarrow";
-  } else if (delim === "\\Updownarrow") {
-    top = "\\Uparrow";
-    repeat = "\u2016";
-    bottom = "\\Downarrow";
-  } else if (delim === "[" || delim === "\\lbrack") {
-    top = "\u23a1";
-    repeat = "\u23a2";
-    bottom = "\u23a3";
-    font = "Size4-Regular";
-  } else if (delim === "]" || delim === "\\rbrack") {
-    top = "\u23a4";
-    repeat = "\u23a5";
-    bottom = "\u23a6";
-    font = "Size4-Regular";
-  } else if (delim === "\\lfloor" || delim === "\u230a") {
-    repeat = top = "\u23a2";
-    bottom = "\u23a3";
-    font = "Size4-Regular";
-  } else if (delim === "\\lceil" || delim === "\u2308") {
-    top = "\u23a1";
-    repeat = bottom = "\u23a2";
-    font = "Size4-Regular";
-  } else if (delim === "\\rfloor" || delim === "\u230b") {
-    repeat = top = "\u23a5";
-    bottom = "\u23a6";
-    font = "Size4-Regular";
-  } else if (delim === "\\rceil" || delim === "\u2309") {
-    top = "\u23a4";
-    repeat = bottom = "\u23a5";
-    font = "Size4-Regular";
-  } else if (delim === "(" || delim === "\\lparen") {
-    top = "\u239b";
-    repeat = "\u239c";
-    bottom = "\u239d";
-    font = "Size4-Regular";
-  } else if (delim === ")" || delim === "\\rparen") {
-    top = "\u239e";
-    repeat = "\u239f";
-    bottom = "\u23a0";
-    font = "Size4-Regular";
-  } else if (delim === "\\{" || delim === "\\lbrace") {
-    top = "\u23a7";
-    middle = "\u23a8";
-    bottom = "\u23a9";
-    repeat = "\u23aa";
-    font = "Size4-Regular";
-  } else if (delim === "\\}" || delim === "\\rbrace") {
-    top = "\u23ab";
-    middle = "\u23ac";
-    bottom = "\u23ad";
-    repeat = "\u23aa";
-    font = "Size4-Regular";
-  } else if (delim === "\\lgroup" || delim === "\u27ee") {
-    top = "\u23a7";
-    bottom = "\u23a9";
-    repeat = "\u23aa";
-    font = "Size4-Regular";
-  } else if (delim === "\\rgroup" || delim === "\u27ef") {
-    top = "\u23ab";
-    bottom = "\u23ad";
-    repeat = "\u23aa";
-    font = "Size4-Regular";
-  } else if (delim === "\\lmoustache" || delim === "\u23b0") {
-    top = "\u23a7";
-    bottom = "\u23ad";
-    repeat = "\u23aa";
-    font = "Size4-Regular";
-  } else if (delim === "\\rmoustache" || delim === "\u23b1") {
-    top = "\u23ab";
-    bottom = "\u23a9";
-    repeat = "\u23aa";
-    font = "Size4-Regular";
-  } // Get the metrics of the four sections
-
-
-  const topMetrics = getMetrics(top, font, mode);
-  const topHeightTotal = topMetrics.height + topMetrics.depth;
-  const repeatMetrics = getMetrics(repeat, font, mode);
-  const repeatHeightTotal = repeatMetrics.height + repeatMetrics.depth;
-  const bottomMetrics = getMetrics(bottom, font, mode);
-  const bottomHeightTotal = bottomMetrics.height + bottomMetrics.depth;
-  let middleHeightTotal = 0;
-  let middleFactor = 1;
-
-  if (middle !== null) {
-    const middleMetrics = getMetrics(middle, font, mode);
-    middleHeightTotal = middleMetrics.height + middleMetrics.depth;
-    middleFactor = 2; // repeat symmetrically above and below middle
-  } // Calcuate the minimal height that the delimiter can have.
-  // It is at least the size of the top, bottom, and optional middle combined.
-
-
-  const minHeight = topHeightTotal + bottomHeightTotal + middleHeightTotal; // Compute the number of copies of the repeat symbol we will need
-
-  const repeatCount = Math.max(0, Math.ceil((heightTotal - minHeight) / (middleFactor * repeatHeightTotal))); // Compute the total height of the delimiter including all the symbols
-
-  const realHeightTotal = minHeight + repeatCount * middleFactor * repeatHeightTotal; // The center of the delimiter is placed at the center of the axis. Note
-  // that in this context, "center" means that the delimiter should be
-  // centered around the axis in the current style, while normally it is
-  // centered around the axis in textstyle.
-
-  let axisHeight = options.fontMetrics().axisHeight;
-
-  if (center) {
-    axisHeight *= options.sizeMultiplier;
-  } // Calculate the depth
-
-
-  const depth = realHeightTotal / 2 - axisHeight; // This function differs from the TeX procedure in one way.
-  // We shift each repeat element downwards by 0.005em, to prevent a gap
-  // due to browser floating point rounding error.
-  // Then, at the last element-to element joint, we add one extra repeat
-  // element to cover the gap created by the shifts.
-  // Find the shift needed to align the upper end of the extra element at a point
-  // 0.005em above the lower end of the top element.
-
-  const shiftOfExtraElement = (repeatCount + 1) * 0.005 - repeatHeightTotal; // Now, we start building the pieces that will go into the vlist
-  // Keep a list of the inner pieces
-
-  const inners = []; // Add the bottom symbol
-
-  inners.push(makeInner(bottom, font, mode));
-
-  if (middle === null) {
-    // Add that many symbols
-    for (let i = 0; i < repeatCount; i++) {
-      inners.push(lap); // overlap
-
-      inners.push(makeInner(repeat, font, mode));
-    }
-  } else {
-    // When there is a middle bit, we need the middle part and two repeated
-    // sections
-    for (let i = 0; i < repeatCount; i++) {
-      inners.push(lap);
-      inners.push(makeInner(repeat, font, mode));
-    } // Insert one extra repeat element.
-
-
-    inners.push({
-      type: "kern",
-      size: shiftOfExtraElement
-    });
-    inners.push(makeInner(repeat, font, mode));
-    inners.push(lap); // Now insert the middle of the brace.
-
-    inners.push(makeInner(middle, font, mode));
-
-    for (let i = 0; i < repeatCount; i++) {
-      inners.push(lap);
-      inners.push(makeInner(repeat, font, mode));
-    }
-  } // To cover the gap create by the overlaps, insert one more repeat element,
-  // at a position that juts 0.005 above the bottom of the top element.
-
-
-  inners.push({
-    type: "kern",
-    size: shiftOfExtraElement
-  });
-  inners.push(makeInner(repeat, font, mode));
-  inners.push(lap); // Add the top symbol
-
-  inners.push(makeInner(top, font, mode)); // Finally, build the vlist
-
-  const newOptions = options.havingBaseStyle(Style$1.TEXT);
-  const inner = buildCommon.makeVList({
-    positionType: "bottom",
-    positionData: depth,
-    children: inners
-  }, newOptions);
-  return styleWrap(buildCommon.makeSpan(["delimsizing", "mult"], [inner], newOptions), Style$1.TEXT, options, classes);
-}; // All surds have 0.08em padding above the viniculum inside the SVG.
-// That keeps browser span height rounding error from pinching the line.
-
-
-const vbPad = 80; // padding above the surd, measured inside the viewBox.
-
-const emPad = 0.08; // padding, in ems, measured in the document.
-
-const sqrtSvg = function sqrtSvg(sqrtName, height, viewBoxHeight, extraViniculum, options) {
-  const path = sqrtPath(sqrtName, extraViniculum, viewBoxHeight);
-  const pathNode = new PathNode(sqrtName, path);
-  const svg = new SvgNode([pathNode], {
-    // Note: 1000:1 ratio of viewBox to document em width.
-    "width": "400em",
-    "height": height + "em",
-    "viewBox": "0 0 400000 " + viewBoxHeight,
-    "preserveAspectRatio": "xMinYMin slice"
-  });
-  return buildCommon.makeSvgSpan(["hide-tail"], [svg], options);
-};
-/**
- * Make a sqrt image of the given height,
- */
-
-
-const makeSqrtImage = function makeSqrtImage(height, options) {
-  // Define a newOptions that removes the effect of size changes such as \Huge.
-  // We don't pick different a height surd for \Huge. For it, we scale up.
-  const newOptions = options.havingBaseSizing(); // Pick the desired surd glyph from a sequence of surds.
-
-  const delim = traverseSequence("\\surd", height * newOptions.sizeMultiplier, stackLargeDelimiterSequence, newOptions);
-  let sizeMultiplier = newOptions.sizeMultiplier; // default
-  // The standard sqrt SVGs each have a 0.04em thick viniculum.
-  // If Settings.minRuleThickness is larger than that, we add extraViniculum.
-
-  const extraViniculum = Math.max(0, options.minRuleThickness - options.fontMetrics().sqrtRuleThickness); // Create a span containing an SVG image of a sqrt symbol.
-
-  let span;
-  let spanHeight = 0;
-  let texHeight = 0;
-  let viewBoxHeight = 0;
-  let advanceWidth; // We create viewBoxes with 80 units of "padding" above each surd.
-  // Then browser rounding error on the parent span height will not
-  // encroach on the ink of the viniculum. But that padding is not
-  // included in the TeX-like `height` used for calculation of
-  // vertical alignment. So texHeight = span.height < span.style.height.
-
-  if (delim.type === "small") {
-    // Get an SVG that is derived from glyph U+221A in font KaTeX-Main.
-    // 1000 unit normal glyph height.
-    viewBoxHeight = 1000 + 1000 * extraViniculum + vbPad;
-
-    if (height < 1.0) {
-      sizeMultiplier = 1.0; // mimic a \textfont radical
-    } else if (height < 1.4) {
-      sizeMultiplier = 0.7; // mimic a \scriptfont radical
-    }
-
-    spanHeight = (1.0 + extraViniculum + emPad) / sizeMultiplier;
-    texHeight = (1.00 + extraViniculum) / sizeMultiplier;
-    span = sqrtSvg("sqrtMain", spanHeight, viewBoxHeight, extraViniculum, options);
-    span.style.minWidth = "0.853em";
-    advanceWidth = 0.833 / sizeMultiplier; // from the font.
-  } else if (delim.type === "large") {
-    // These SVGs come from fonts: KaTeX_Size1, _Size2, etc.
-    viewBoxHeight = (1000 + vbPad) * sizeToMaxHeight[delim.size];
-    texHeight = (sizeToMaxHeight[delim.size] + extraViniculum) / sizeMultiplier;
-    spanHeight = (sizeToMaxHeight[delim.size] + extraViniculum + emPad) / sizeMultiplier;
-    span = sqrtSvg("sqrtSize" + delim.size, spanHeight, viewBoxHeight, extraViniculum, options);
-    span.style.minWidth = "1.02em";
-    advanceWidth = 1.0 / sizeMultiplier; // 1.0 from the font.
-  } else {
-    // Tall sqrt. In TeX, this would be stacked using multiple glyphs.
-    // We'll use a single SVG to accomplish the same thing.
-    spanHeight = height + extraViniculum + emPad;
-    texHeight = height + extraViniculum;
-    viewBoxHeight = Math.floor(1000 * height + extraViniculum) + vbPad;
-    span = sqrtSvg("sqrtTall", spanHeight, viewBoxHeight, extraViniculum, options);
-    span.style.minWidth = "0.742em";
-    advanceWidth = 1.056;
-  }
-
-  span.height = texHeight;
-  span.style.height = spanHeight + "em";
-  return {
-    span,
-    advanceWidth,
-    // Calculate the actual line width.
-    // This actually should depend on the chosen font -- e.g. \boldmath
-    // should use the thicker surd symbols from e.g. KaTeX_Main-Bold, and
-    // have thicker rules.
-    ruleWidth: (options.fontMetrics().sqrtRuleThickness + extraViniculum) * sizeMultiplier
-  };
-}; // There are three kinds of delimiters, delimiters that stack when they become
-// too large
-
-
-const stackLargeDelimiters = ["(", "\\lparen", ")", "\\rparen", "[", "\\lbrack", "]", "\\rbrack", "\\{", "\\lbrace", "\\}", "\\rbrace", "\\lfloor", "\\rfloor", "\u230a", "\u230b", "\\lceil", "\\rceil", "\u2308", "\u2309", "\\surd"]; // delimiters that always stack
-
-const stackAlwaysDelimiters = ["\\uparrow", "\\downarrow", "\\updownarrow", "\\Uparrow", "\\Downarrow", "\\Updownarrow", "|", "\\|", "\\vert", "\\Vert", "\\lvert", "\\rvert", "\\lVert", "\\rVert", "\\lgroup", "\\rgroup", "\u27ee", "\u27ef", "\\lmoustache", "\\rmoustache", "\u23b0", "\u23b1"]; // and delimiters that never stack
-
-const stackNeverDelimiters = ["<", ">", "\\langle", "\\rangle", "/", "\\backslash", "\\lt", "\\gt"]; // Metrics of the different sizes. Found by looking at TeX's output of
-// $\bigl| // \Bigl| \biggl| \Biggl| \showlists$
-// Used to create stacked delimiters of appropriate sizes in makeSizedDelim.
-
-const sizeToMaxHeight = [0, 1.2, 1.8, 2.4, 3.0];
-/**
- * Used to create a delimiter of a specific size, where `size` is 1, 2, 3, or 4.
- */
-
-const makeSizedDelim = function makeSizedDelim(delim, size, options, mode, classes) {
-  // < and > turn into \langle and \rangle in delimiters
-  if (delim === "<" || delim === "\\lt" || delim === "\u27e8") {
-    delim = "\\langle";
-  } else if (delim === ">" || delim === "\\gt" || delim === "\u27e9") {
-    delim = "\\rangle";
-  } // Sized delimiters are never centered.
-
-
-  if (utils.contains(stackLargeDelimiters, delim) || utils.contains(stackNeverDelimiters, delim)) {
-    return makeLargeDelim(delim, size, false, options, mode, classes);
-  } else if (utils.contains(stackAlwaysDelimiters, delim)) {
-    return makeStackedDelim(delim, sizeToMaxHeight[size], false, options, mode, classes);
-  } else {
-    throw new ParseError("Illegal delimiter: '" + delim + "'");
-  }
-};
-/**
- * There are three different sequences of delimiter sizes that the delimiters
- * follow depending on the kind of delimiter. This is used when creating custom
- * sized delimiters to decide whether to create a small, large, or stacked
- * delimiter.
- *
- * In real TeX, these sequences aren't explicitly defined, but are instead
- * defined inside the font metrics. Since there are only three sequences that
- * are possible for the delimiters that TeX defines, it is easier to just encode
- * them explicitly here.
- */
-
-
-// Delimiters that never stack try small delimiters and large delimiters only
-const stackNeverDelimiterSequence = [{
-  type: "small",
-  style: Style$1.SCRIPTSCRIPT
-}, {
-  type: "small",
-  style: Style$1.SCRIPT
-}, {
-  type: "small",
-  style: Style$1.TEXT
-}, {
-  type: "large",
-  size: 1
-}, {
-  type: "large",
-  size: 2
-}, {
-  type: "large",
-  size: 3
-}, {
-  type: "large",
-  size: 4
-}]; // Delimiters that always stack try the small delimiters first, then stack
-
-const stackAlwaysDelimiterSequence = [{
-  type: "small",
-  style: Style$1.SCRIPTSCRIPT
-}, {
-  type: "small",
-  style: Style$1.SCRIPT
-}, {
-  type: "small",
-  style: Style$1.TEXT
-}, {
-  type: "stack"
-}]; // Delimiters that stack when large try the small and then large delimiters, and
-// stack afterwards
-
-const stackLargeDelimiterSequence = [{
-  type: "small",
-  style: Style$1.SCRIPTSCRIPT
-}, {
-  type: "small",
-  style: Style$1.SCRIPT
-}, {
-  type: "small",
-  style: Style$1.TEXT
-}, {
-  type: "large",
-  size: 1
-}, {
-  type: "large",
-  size: 2
-}, {
-  type: "large",
-  size: 3
-}, {
-  type: "large",
-  size: 4
-}, {
-  type: "stack"
-}];
-/**
- * Get the font used in a delimiter based on what kind of delimiter it is.
- * TODO(#963) Use more specific font family return type once that is introduced.
- */
-
-const delimTypeToFont = function delimTypeToFont(type) {
-  if (type.type === "small") {
-    return "Main-Regular";
-  } else if (type.type === "large") {
-    return "Size" + type.size + "-Regular";
-  } else if (type.type === "stack") {
-    return "Size4-Regular";
-  } else {
-    throw new Error(`Add support for delim type '${type.type}' here.`);
-  }
-};
-/**
- * Traverse a sequence of types of delimiters to decide what kind of delimiter
- * should be used to create a delimiter of the given height+depth.
- */
-
-
-const traverseSequence = function traverseSequence(delim, height, sequence, options) {
-  // Here, we choose the index we should start at in the sequences. In smaller
-  // sizes (which correspond to larger numbers in style.size) we start earlier
-  // in the sequence. Thus, scriptscript starts at index 3-3=0, script starts
-  // at index 3-2=1, text starts at 3-1=2, and display starts at min(2,3-0)=2
-  const start = Math.min(2, 3 - options.style.size);
-
-  for (let i = start; i < sequence.length; i++) {
-    if (sequence[i].type === "stack") {
-      // This is always the last delimiter, so we just break the loop now.
-      break;
-    }
-
-    const metrics = getMetrics(delim, delimTypeToFont(sequence[i]), "math");
-    let heightDepth = metrics.height + metrics.depth; // Small delimiters are scaled down versions of the same font, so we
-    // account for the style change size.
-
-    if (sequence[i].type === "small") {
-      const newOptions = options.havingBaseStyle(sequence[i].style);
-      heightDepth *= newOptions.sizeMultiplier;
-    } // Check if the delimiter at this size works for the given height.
-
-
-    if (heightDepth > height) {
-      return sequence[i];
-    }
-  } // If we reached the end of the sequence, return the last sequence element.
-
-
-  return sequence[sequence.length - 1];
-};
-/**
- * Make a delimiter of a given height+depth, with optional centering. Here, we
- * traverse the sequences, and create a delimiter that the sequence tells us to.
- */
-
-
-const makeCustomSizedDelim = function makeCustomSizedDelim(delim, height, center, options, mode, classes) {
-  if (delim === "<" || delim === "\\lt" || delim === "\u27e8") {
-    delim = "\\langle";
-  } else if (delim === ">" || delim === "\\gt" || delim === "\u27e9") {
-    delim = "\\rangle";
-  } // Decide what sequence to use
-
-
-  let sequence;
-
-  if (utils.contains(stackNeverDelimiters, delim)) {
-    sequence = stackNeverDelimiterSequence;
-  } else if (utils.contains(stackLargeDelimiters, delim)) {
-    sequence = stackLargeDelimiterSequence;
-  } else {
-    sequence = stackAlwaysDelimiterSequence;
-  } // Look through the sequence
-
-
-  const delimType = traverseSequence(delim, height, sequence, options); // Get the delimiter from font glyphs.
-  // Depending on the sequence element we decided on, call the
-  // appropriate function.
-
-  if (delimType.type === "small") {
-    return makeSmallDelim(delim, delimType.style, center, options, mode, classes);
-  } else if (delimType.type === "large") {
-    return makeLargeDelim(delim, delimType.size, center, options, mode, classes);
-  } else
-    /* if (delimType.type === "stack") */
-    {
-      return makeStackedDelim(delim, height, center, options, mode, classes);
-    }
-};
-/**
- * Make a delimiter for use with `\left` and `\right`, given a height and depth
- * of an expression that the delimiters surround.
- */
-
-
-const makeLeftRightDelim = function makeLeftRightDelim(delim, height, depth, options, mode, classes) {
-  // We always center \left/\right delimiters, so the axis is always shifted
-  const axisHeight = options.fontMetrics().axisHeight * options.sizeMultiplier; // Taken from TeX source, tex.web, function make_left_right
-
-  const delimiterFactor = 901;
-  const delimiterExtend = 5.0 / options.fontMetrics().ptPerEm;
-  const maxDistFromAxis = Math.max(height - axisHeight, depth + axisHeight);
-  const totalHeight = Math.max( // In real TeX, calculations are done using integral values which are
-  // 65536 per pt, or 655360 per em. So, the division here truncates in
-  // TeX but doesn't here, producing different results. If we wanted to
-  // exactly match TeX's calculation, we could do
-  //   Math.floor(655360 * maxDistFromAxis / 500) *
-  //    delimiterFactor / 655360
-  // (To see the difference, compare
-  //    x^{x^{\left(\rule{0.1em}{0.68em}\right)}}
-  // in TeX and KaTeX)
-  maxDistFromAxis / 500 * delimiterFactor, 2 * maxDistFromAxis - delimiterExtend); // Finally, we defer to `makeCustomSizedDelim` with our calculated total
-  // height
-
-  return makeCustomSizedDelim(delim, totalHeight, true, options, mode, classes);
-};
-
-var delimiter = {
-  sqrtImage: makeSqrtImage,
-  sizedDelim: makeSizedDelim,
-  customSizedDelim: makeCustomSizedDelim,
-  leftRightDelim: makeLeftRightDelim
-};
-
-// Extra data needed for the delimiter handler down below
-const delimiterSizes = {
-  "\\bigl": {
-    mclass: "mopen",
-    size: 1
-  },
-  "\\Bigl": {
-    mclass: "mopen",
-    size: 2
-  },
-  "\\biggl": {
-    mclass: "mopen",
-    size: 3
-  },
-  "\\Biggl": {
-    mclass: "mopen",
-    size: 4
-  },
-  "\\bigr": {
-    mclass: "mclose",
-    size: 1
-  },
-  "\\Bigr": {
-    mclass: "mclose",
-    size: 2
-  },
-  "\\biggr": {
-    mclass: "mclose",
-    size: 3
-  },
-  "\\Biggr": {
-    mclass: "mclose",
-    size: 4
-  },
-  "\\bigm": {
-    mclass: "mrel",
-    size: 1
-  },
-  "\\Bigm": {
-    mclass: "mrel",
-    size: 2
-  },
-  "\\biggm": {
-    mclass: "mrel",
-    size: 3
-  },
-  "\\Biggm": {
-    mclass: "mrel",
-    size: 4
-  },
-  "\\big": {
-    mclass: "mord",
-    size: 1
-  },
-  "\\Big": {
-    mclass: "mord",
-    size: 2
-  },
-  "\\bigg": {
-    mclass: "mord",
-    size: 3
-  },
-  "\\Bigg": {
-    mclass: "mord",
-    size: 4
-  }
-};
-const delimiters = ["(", "\\lparen", ")", "\\rparen", "[", "\\lbrack", "]", "\\rbrack", "\\{", "\\lbrace", "\\}", "\\rbrace", "\\lfloor", "\\rfloor", "\u230a", "\u230b", "\\lceil", "\\rceil", "\u2308", "\u2309", "<", ">", "\\langle", "\u27e8", "\\rangle", "\u27e9", "\\lt", "\\gt", "\\lvert", "\\rvert", "\\lVert", "\\rVert", "\\lgroup", "\\rgroup", "\u27ee", "\u27ef", "\\lmoustache", "\\rmoustache", "\u23b0", "\u23b1", "/", "\\backslash", "|", "\\vert", "\\|", "\\Vert", "\\uparrow", "\\Uparrow", "\\downarrow", "\\Downarrow", "\\updownarrow", "\\Updownarrow", "."];
-
-// Delimiter functions
-function checkDelimiter(delim, context) {
-  const symDelim = checkSymbolNodeType(delim);
-
-  if (symDelim && utils.contains(delimiters, symDelim.text)) {
-    return symDelim;
-  } else {
-    throw new ParseError("Invalid delimiter: '" + (symDelim ? symDelim.text : JSON.stringify(delim)) + "' after '" + context.funcName + "'", delim);
-  }
-}
-
-defineFunction({
-  type: "delimsizing",
-  names: ["\\bigl", "\\Bigl", "\\biggl", "\\Biggl", "\\bigr", "\\Bigr", "\\biggr", "\\Biggr", "\\bigm", "\\Bigm", "\\biggm", "\\Biggm", "\\big", "\\Big", "\\bigg", "\\Bigg"],
-  props: {
-    numArgs: 1
-  },
-  handler: (context, args) => {
-    const delim = checkDelimiter(args[0], context);
-    return {
-      type: "delimsizing",
-      mode: context.parser.mode,
-      size: delimiterSizes[context.funcName].size,
-      mclass: delimiterSizes[context.funcName].mclass,
-      delim: delim.text
-    };
-  },
-  htmlBuilder: (group, options) => {
-    if (group.delim === ".") {
-      // Empty delimiters still count as elements, even though they don't
-      // show anything.
-      return buildCommon.makeSpan([group.mclass]);
-    } // Use delimiter.sizedDelim to generate the delimiter.
-
-
-    return delimiter.sizedDelim(group.delim, group.size, options, group.mode, [group.mclass]);
-  },
-  mathmlBuilder: group => {
-    const children = [];
-
-    if (group.delim !== ".") {
-      children.push(makeText(group.delim, group.mode));
-    }
-
-    const node = new mathMLTree.MathNode("mo", children);
-
-    if (group.mclass === "mopen" || group.mclass === "mclose") {
-      // Only some of the delimsizing functions act as fences, and they
-      // return "mopen" or "mclose" mclass.
-      node.setAttribute("fence", "true");
-    } else {
-      // Explicitly disable fencing if it's not a fence, to override the
-      // defaults.
-      node.setAttribute("fence", "false");
-    }
-
-    return node;
-  }
-});
-
-function assertParsed(group) {
-  if (!group.body) {
-    throw new Error("Bug: The leftright ParseNode wasn't fully parsed.");
-  }
-}
-
-defineFunction({
-  type: "leftright-right",
-  names: ["\\right"],
-  props: {
-    numArgs: 1
-  },
-  handler: (context, args) => {
-    // \left case below triggers parsing of \right in
-    //   `const right = parser.parseFunction();`
-    // uses this return value.
-    const color = context.parser.gullet.macros.get("\\current@color");
-
-    if (color && typeof color !== "string") {
-      throw new ParseError("\\current@color set to non-string in \\right");
-    }
-
-    return {
-      type: "leftright-right",
-      mode: context.parser.mode,
-      delim: checkDelimiter(args[0], context).text,
-      color // undefined if not set via \color
-
-    };
-  }
-});
-defineFunction({
-  type: "leftright",
-  names: ["\\left"],
-  props: {
-    numArgs: 1
-  },
-  handler: (context, args) => {
-    const delim = checkDelimiter(args[0], context);
-    const parser = context.parser; // Parse out the implicit body
-
-    ++parser.leftrightDepth; // parseExpression stops before '\\right'
-
-    const body = parser.parseExpression(false);
-    --parser.leftrightDepth; // Check the next token
-
-    parser.expect("\\right", false);
-    const right = assertNodeType(parser.parseFunction(), "leftright-right");
-    return {
-      type: "leftright",
-      mode: parser.mode,
-      body,
-      left: delim.text,
-      right: right.delim,
-      rightColor: right.color
-    };
-  },
-  htmlBuilder: (group, options) => {
-    assertParsed(group); // Build the inner expression
-
-    const inner = buildExpression(group.body, options, true, ["mopen", "mclose"]);
-    let innerHeight = 0;
-    let innerDepth = 0;
-    let hadMiddle = false; // Calculate its height and depth
-
-    for (let i = 0; i < inner.length; i++) {
-      // Property `isMiddle` not defined on `span`. See comment in
-      // "middle"'s htmlBuilder.
-      // $FlowFixMe
-      if (inner[i].isMiddle) {
-        hadMiddle = true;
-      } else {
-        innerHeight = Math.max(inner[i].height, innerHeight);
-        innerDepth = Math.max(inner[i].depth, innerDepth);
-      }
-    } // The size of delimiters is the same, regardless of what style we are
-    // in. Thus, to correctly calculate the size of delimiter we need around
-    // a group, we scale down the inner size based on the size.
-
-
-    innerHeight *= options.sizeMultiplier;
-    innerDepth *= options.sizeMultiplier;
-    let leftDelim;
-
-    if (group.left === ".") {
-      // Empty delimiters in \left and \right make null delimiter spaces.
-      leftDelim = makeNullDelimiter(options, ["mopen"]);
-    } else {
-      // Otherwise, use leftRightDelim to generate the correct sized
-      // delimiter.
-      leftDelim = delimiter.leftRightDelim(group.left, innerHeight, innerDepth, options, group.mode, ["mopen"]);
-    } // Add it to the beginning of the expression
-
-
-    inner.unshift(leftDelim); // Handle middle delimiters
-
-    if (hadMiddle) {
-      for (let i = 1; i < inner.length; i++) {
-        const middleDelim = inner[i]; // Property `isMiddle` not defined on `span`. See comment in
-        // "middle"'s htmlBuilder.
-        // $FlowFixMe
-
-        const isMiddle = middleDelim.isMiddle;
-
-        if (isMiddle) {
-          // Apply the options that were active when \middle was called
-          inner[i] = delimiter.leftRightDelim(isMiddle.delim, innerHeight, innerDepth, isMiddle.options, group.mode, []);
-        }
-      }
-    }
-
-    let rightDelim; // Same for the right delimiter, but using color specified by \color
-
-    if (group.right === ".") {
-      rightDelim = makeNullDelimiter(options, ["mclose"]);
-    } else {
-      const colorOptions = group.rightColor ? options.withColor(group.rightColor) : options;
-      rightDelim = delimiter.leftRightDelim(group.right, innerHeight, innerDepth, colorOptions, group.mode, ["mclose"]);
-    } // Add it to the end of the expression.
-
-
-    inner.push(rightDelim);
-    return buildCommon.makeSpan(["minner"], inner, options);
-  },
-  mathmlBuilder: (group, options) => {
-    assertParsed(group);
-    const inner = buildExpression$1(group.body, options);
-
-    if (group.left !== ".") {
-      const leftNode = new mathMLTree.MathNode("mo", [makeText(group.left, group.mode)]);
-      leftNode.setAttribute("fence", "true");
-      inner.unshift(leftNode);
-    }
-
-    if (group.right !== ".") {
-      const rightNode = new mathMLTree.MathNode("mo", [makeText(group.right, group.mode)]);
-      rightNode.setAttribute("fence", "true");
-
-      if (group.rightColor) {
-        rightNode.setAttribute("mathcolor", group.rightColor);
-      }
-
-      inner.push(rightNode);
-    }
-
-    return makeRow(inner);
-  }
-});
-defineFunction({
-  type: "middle",
-  names: ["\\middle"],
-  props: {
-    numArgs: 1
-  },
-  handler: (context, args) => {
-    const delim = checkDelimiter(args[0], context);
-
-    if (!context.parser.leftrightDepth) {
-      throw new ParseError("\\middle without preceding \\left", delim);
-    }
-
-    return {
-      type: "middle",
-      mode: context.parser.mode,
-      delim: delim.text
-    };
-  },
-  htmlBuilder: (group, options) => {
-    let middleDelim;
-
-    if (group.delim === ".") {
-      middleDelim = makeNullDelimiter(options, []);
-    } else {
-      middleDelim = delimiter.sizedDelim(group.delim, 1, options, group.mode, []);
-      const isMiddle = {
-        delim: group.delim,
-        options
-      }; // Property `isMiddle` not defined on `span`. It is only used in
-      // this file above.
-      // TODO: Fix this violation of the `span` type and possibly rename
-      // things since `isMiddle` sounds like a boolean, but is a struct.
-      // $FlowFixMe
-
-      middleDelim.isMiddle = isMiddle;
-    }
-
-    return middleDelim;
-  },
-  mathmlBuilder: (group, options) => {
-    // A Firefox \middle will strech a character vertically only if it
-    // is in the fence part of the operator dictionary at:
-    // https://www.w3.org/TR/MathML3/appendixc.html.
-    // So we need to avoid U+2223 and use plain "|" instead.
-    const textNode = group.delim === "\\vert" || group.delim === "|" ? makeText("|", "text") : makeText(group.delim, group.mode);
-    const middleNode = new mathMLTree.MathNode("mo", [textNode]);
-    middleNode.setAttribute("fence", "true"); // MathML gives 5/18em spacing to each <mo> element.
-    // \middle should get delimiter spacing instead.
-
-    middleNode.setAttribute("lspace", "0.05em");
-    middleNode.setAttribute("rspace", "0.05em");
-    return middleNode;
-  }
-});
-
-const htmlBuilder$2 = (group, options) => {
-  // \cancel, \bcancel, \xcancel, \sout, \fbox, \colorbox, \fcolorbox
-  // Some groups can return document fragments.  Handle those by wrapping
-  // them in a span.
-  const inner = buildCommon.wrapFragment(buildGroup(group.body, options), options);
-  const label = group.label.substr(1);
-  const scale = options.sizeMultiplier;
-  let img;
-  let imgShift = 0; // In the LaTeX cancel package, line geometry is slightly different
-  // depending on whether the subject is wider than it is tall, or vice versa.
-  // We don't know the width of a group, so as a proxy, we test if
-  // the subject is a single character. This captures most of the
-  // subjects that should get the "tall" treatment.
-
-  const isSingleChar = utils.isCharacterBox(group.body);
-
-  if (label === "sout") {
-    img = buildCommon.makeSpan(["stretchy", "sout"]);
-    img.height = options.fontMetrics().defaultRuleThickness / scale;
-    imgShift = -0.5 * options.fontMetrics().xHeight;
-  } else {
-    // Add horizontal padding
-    if (/cancel/.test(label)) {
-      if (!isSingleChar) {
-        inner.classes.push("cancel-pad");
-      }
-    } else {
-      inner.classes.push("boxpad");
-    } // Add vertical padding
-
-
-    let vertPad = 0;
-    let ruleThickness = 0; // ref: cancel package: \advance\totalheight2\p@ % "+2"
-
-    if (/box/.test(label)) {
-      ruleThickness = Math.max(options.fontMetrics().fboxrule, // default
-      options.minRuleThickness // User override.
-      );
-      vertPad = options.fontMetrics().fboxsep + (label === "colorbox" ? 0 : ruleThickness);
-    } else {
-      vertPad = isSingleChar ? 0.2 : 0;
-    }
-
-    img = stretchy.encloseSpan(inner, label, vertPad, options);
-
-    if (/fbox|boxed|fcolorbox/.test(label)) {
-      img.style.borderStyle = "solid";
-      img.style.borderWidth = `${ruleThickness}em`;
-    }
-
-    imgShift = inner.depth + vertPad;
-
-    if (group.backgroundColor) {
-      img.style.backgroundColor = group.backgroundColor;
-
-      if (group.borderColor) {
-        img.style.borderColor = group.borderColor;
-      }
-    }
-  }
-
-  let vlist;
-
-  if (group.backgroundColor) {
-    vlist = buildCommon.makeVList({
-      positionType: "individualShift",
-      children: [// Put the color background behind inner;
-      {
-        type: "elem",
-        elem: img,
-        shift: imgShift
-      }, {
-        type: "elem",
-        elem: inner,
-        shift: 0
-      }]
-    }, options);
-  } else {
-    vlist = buildCommon.makeVList({
-      positionType: "individualShift",
-      children: [// Write the \cancel stroke on top of inner.
-      {
-        type: "elem",
-        elem: inner,
-        shift: 0
-      }, {
-        type: "elem",
-        elem: img,
-        shift: imgShift,
-        wrapperClasses: /cancel/.test(label) ? ["svg-align"] : []
-      }]
-    }, options);
-  }
-
-  if (/cancel/.test(label)) {
-    // The cancel package documentation says that cancel lines add their height
-    // to the expression, but tests show that isn't how it actually works.
-    vlist.height = inner.height;
-    vlist.depth = inner.depth;
-  }
-
-  if (/cancel/.test(label) && !isSingleChar) {
-    // cancel does not create horiz space for its line extension.
-    return buildCommon.makeSpan(["mord", "cancel-lap"], [vlist], options);
-  } else {
-    return buildCommon.makeSpan(["mord"], [vlist], options);
-  }
-};
-
-const mathmlBuilder$2 = (group, options) => {
-  let fboxsep = 0;
-  const node = new mathMLTree.MathNode(group.label.indexOf("colorbox") > -1 ? "mpadded" : "menclose", [buildGroup$1(group.body, options)]);
-
-  switch (group.label) {
-    case "\\cancel":
-      node.setAttribute("notation", "updiagonalstrike");
-      break;
-
-    case "\\bcancel":
-      node.setAttribute("notation", "downdiagonalstrike");
-      break;
-
-    case "\\sout":
-      node.setAttribute("notation", "horizontalstrike");
-      break;
-
-    case "\\fbox":
-      node.setAttribute("notation", "box");
-      break;
-
-    case "\\fcolorbox":
-    case "\\colorbox":
-      // <menclose> doesn't have a good notation option. So use <mpadded>
-      // instead. Set some attributes that come included with <menclose>.
-      fboxsep = options.fontMetrics().fboxsep * options.fontMetrics().ptPerEm;
-      node.setAttribute("width", `+${2 * fboxsep}pt`);
-      node.setAttribute("height", `+${2 * fboxsep}pt`);
-      node.setAttribute("lspace", `${fboxsep}pt`); //
-
-      node.setAttribute("voffset", `${fboxsep}pt`);
-
-      if (group.label === "\\fcolorbox") {
-        const thk = Math.max(options.fontMetrics().fboxrule, // default
-        options.minRuleThickness // user override
-        );
-        node.setAttribute("style", "border: " + thk + "em solid " + String(group.borderColor));
-      }
-
-      break;
-
-    case "\\xcancel":
-      node.setAttribute("notation", "updiagonalstrike downdiagonalstrike");
-      break;
-  }
-
-  if (group.backgroundColor) {
-    node.setAttribute("mathbackground", group.backgroundColor);
-  }
-
-  return node;
-};
-
-defineFunction({
-  type: "enclose",
-  names: ["\\colorbox"],
-  props: {
-    numArgs: 2,
-    allowedInText: true,
-    greediness: 3,
-    argTypes: ["color", "text"]
-  },
-
-  handler(_ref, args, optArgs) {
-    let parser = _ref.parser,
-        funcName = _ref.funcName;
-    const color = assertNodeType(args[0], "color-token").color;
-    const body = args[1];
-    return {
-      type: "enclose",
-      mode: parser.mode,
-      label: funcName,
-      backgroundColor: color,
-      body
-    };
-  },
-
-  htmlBuilder: htmlBuilder$2,
-  mathmlBuilder: mathmlBuilder$2
-});
-defineFunction({
-  type: "enclose",
-  names: ["\\fcolorbox"],
-  props: {
-    numArgs: 3,
-    allowedInText: true,
-    greediness: 3,
-    argTypes: ["color", "color", "text"]
-  },
-
-  handler(_ref2, args, optArgs) {
-    let parser = _ref2.parser,
-        funcName = _ref2.funcName;
-    const borderColor = assertNodeType(args[0], "color-token").color;
-    const backgroundColor = assertNodeType(args[1], "color-token").color;
-    const body = args[2];
-    return {
-      type: "enclose",
-      mode: parser.mode,
-      label: funcName,
-      backgroundColor,
-      borderColor,
-      body
-    };
-  },
-
-  htmlBuilder: htmlBuilder$2,
-  mathmlBuilder: mathmlBuilder$2
-});
-defineFunction({
-  type: "enclose",
-  names: ["\\fbox"],
-  props: {
-    numArgs: 1,
-    argTypes: ["hbox"],
-    allowedInText: true
-  },
-
-  handler(_ref3, args) {
-    let parser = _ref3.parser;
-    return {
-      type: "enclose",
-      mode: parser.mode,
-      label: "\\fbox",
-      body: args[0]
-    };
-  }
-
-});
-defineFunction({
-  type: "enclose",
-  names: ["\\cancel", "\\bcancel", "\\xcancel", "\\sout"],
-  props: {
-    numArgs: 1
-  },
-
-  handler(_ref4, args, optArgs) {
-    let parser = _ref4.parser,
-        funcName = _ref4.funcName;
-    const body = args[0];
-    return {
-      type: "enclose",
-      mode: parser.mode,
-      label: funcName,
-      body
-    };
-  },
-
-  htmlBuilder: htmlBuilder$2,
-  mathmlBuilder: mathmlBuilder$2
-});
-
-/**
- * All registered environments.
- * `environments.js` exports this same dictionary again and makes it public.
- * `Parser.js` requires this dictionary via `environments.js`.
- */
-const _environments = {};
-function defineEnvironment(_ref) {
-  let type = _ref.type,
-      names = _ref.names,
-      props = _ref.props,
-      handler = _ref.handler,
-      htmlBuilder = _ref.htmlBuilder,
-      mathmlBuilder = _ref.mathmlBuilder;
-  // Set default values of environments.
-  const data = {
-    type,
-    numArgs: props.numArgs || 0,
-    greediness: 1,
-    allowedInText: false,
-    numOptionalArgs: 0,
-    handler
-  };
-
-  for (let i = 0; i < names.length; ++i) {
-    // TODO: The value type of _environments should be a type union of all
-    // possible `EnvSpec<>` possibilities instead of `EnvSpec<*>`, which is
-    // an existential type.
-    // $FlowFixMe
-    _environments[names[i]] = data;
-  }
-
-  if (htmlBuilder) {
-    _htmlGroupBuilders[type] = htmlBuilder;
-  }
-
-  if (mathmlBuilder) {
-    _mathmlGroupBuilders[type] = mathmlBuilder;
-  }
-}
-
-function getHLines(parser) {
-  // Return an array. The array length = number of hlines.
-  // Each element in the array tells if the line is dashed.
-  const hlineInfo = [];
-  parser.consumeSpaces();
-  let nxt = parser.fetch().text;
-
-  while (nxt === "\\hline" || nxt === "\\hdashline") {
-    parser.consume();
-    hlineInfo.push(nxt === "\\hdashline");
-    parser.consumeSpaces();
-    nxt = parser.fetch().text;
-  }
-
-  return hlineInfo;
-}
-/**
- * Parse the body of the environment, with rows delimited by \\ and
- * columns delimited by &, and create a nested list in row-major order
- * with one group per cell.  If given an optional argument style
- * ("text", "display", etc.), then each cell is cast into that style.
- */
-
-
-function parseArray(parser, _ref, style) {
-  let hskipBeforeAndAfter = _ref.hskipBeforeAndAfter,
-      addJot = _ref.addJot,
-      cols = _ref.cols,
-      arraystretch = _ref.arraystretch,
-      colSeparationType = _ref.colSeparationType;
-  // Parse body of array with \\ temporarily mapped to \cr
-  parser.gullet.beginGroup();
-  parser.gullet.macros.set("\\\\", "\\cr"); // Get current arraystretch if it's not set by the environment
-
-  if (!arraystretch) {
-    const stretch = parser.gullet.expandMacroAsText("\\arraystretch");
-
-    if (stretch == null) {
-      // Default \arraystretch from lttab.dtx
-      arraystretch = 1;
-    } else {
-      arraystretch = parseFloat(stretch);
-
-      if (!arraystretch || arraystretch < 0) {
-        throw new ParseError(`Invalid \\arraystretch: ${stretch}`);
-      }
-    }
-  } // Start group for first cell
-
-
-  parser.gullet.beginGroup();
-  let row = [];
-  const body = [row];
-  const rowGaps = [];
-  const hLinesBeforeRow = []; // Test for \hline at the top of the array.
-
-  hLinesBeforeRow.push(getHLines(parser));
-
-  while (true) {
-    // eslint-disable-line no-constant-condition
-    // Parse each cell in its own group (namespace)
-    let cell = parser.parseExpression(false, "\\cr");
-    parser.gullet.endGroup();
-    parser.gullet.beginGroup();
-    cell = {
-      type: "ordgroup",
-      mode: parser.mode,
-      body: cell
-    };
-
-    if (style) {
-      cell = {
-        type: "styling",
-        mode: parser.mode,
-        style,
-        body: [cell]
-      };
-    }
-
-    row.push(cell);
-    const next = parser.fetch().text;
-
-    if (next === "&") {
-      parser.consume();
-    } else if (next === "\\end") {
-      // Arrays terminate newlines with `\crcr` which consumes a `\cr` if
-      // the last line is empty.
-      // NOTE: Currently, `cell` is the last item added into `row`.
-      if (row.length === 1 && cell.type === "styling" && cell.body[0].body.length === 0) {
-        body.pop();
-      }
-
-      if (hLinesBeforeRow.length < body.length + 1) {
-        hLinesBeforeRow.push([]);
-      }
-
-      break;
-    } else if (next === "\\cr") {
-      const cr = assertNodeType(parser.parseFunction(), "cr");
-      rowGaps.push(cr.size); // check for \hline(s) following the row separator
-
-      hLinesBeforeRow.push(getHLines(parser));
-      row = [];
-      body.push(row);
-    } else {
-      throw new ParseError("Expected & or \\\\ or \\cr or \\end", parser.nextToken);
-    }
-  } // End cell group
-
-
-  parser.gullet.endGroup(); // End array group defining \\
-
-  parser.gullet.endGroup();
-  return {
-    type: "array",
-    mode: parser.mode,
-    addJot,
-    arraystretch,
-    body,
-    cols,
-    rowGaps,
-    hskipBeforeAndAfter,
-    hLinesBeforeRow,
-    colSeparationType
-  };
-} // Decides on a style for cells in an array according to whether the given
-// environment name starts with the letter 'd'.
-
-
-function dCellStyle(envName) {
-  if (envName.substr(0, 1) === "d") {
-    return "display";
-  } else {
-    return "text";
-  }
-}
-
-const htmlBuilder$3 = function htmlBuilder(group, options) {
-  let r;
-  let c;
-  const nr = group.body.length;
-  const hLinesBeforeRow = group.hLinesBeforeRow;
-  let nc = 0;
-  let body = new Array(nr);
-  const hlines = [];
-  const ruleThickness = Math.max( // From LaTeX \showthe\arrayrulewidth. Equals 0.04 em.
-  options.fontMetrics().arrayRuleWidth, options.minRuleThickness // User override.
-  ); // Horizontal spacing
-
-  const pt = 1 / options.fontMetrics().ptPerEm;
-  let arraycolsep = 5 * pt; // default value, i.e. \arraycolsep in article.cls
-
-  if (group.colSeparationType && group.colSeparationType === "small") {
-    // We're in a {smallmatrix}. Default column space is \thickspace,
-    // i.e. 5/18em = 0.2778em, per amsmath.dtx for {smallmatrix}.
-    // But that needs adjustment because LaTeX applies \scriptstyle to the
-    // entire array, including the colspace, but this function applies
-    // \scriptstyle only inside each element.
-    const localMultiplier = options.havingStyle(Style$1.SCRIPT).sizeMultiplier;
-    arraycolsep = 0.2778 * (localMultiplier / options.sizeMultiplier);
-  } // Vertical spacing
-
-
-  const baselineskip = 12 * pt; // see size10.clo
-  // Default \jot from ltmath.dtx
-  // TODO(edemaine): allow overriding \jot via \setlength (#687)
-
-  const jot = 3 * pt;
-  const arrayskip = group.arraystretch * baselineskip;
-  const arstrutHeight = 0.7 * arrayskip; // \strutbox in ltfsstrc.dtx and
-
-  const arstrutDepth = 0.3 * arrayskip; // \@arstrutbox in lttab.dtx
-
-  let totalHeight = 0; // Set a position for \hline(s) at the top of the array, if any.
-
-  function setHLinePos(hlinesInGap) {
-    for (let i = 0; i < hlinesInGap.length; ++i) {
-      if (i > 0) {
-        totalHeight += 0.25;
-      }
-
-      hlines.push({
-        pos: totalHeight,
-        isDashed: hlinesInGap[i]
-      });
-    }
-  }
-
-  setHLinePos(hLinesBeforeRow[0]);
-
-  for (r = 0; r < group.body.length; ++r) {
-    const inrow = group.body[r];
-    let height = arstrutHeight; // \@array adds an \@arstrut
-
-    let depth = arstrutDepth; // to each tow (via the template)
-
-    if (nc < inrow.length) {
-      nc = inrow.length;
-    }
-
-    const outrow = new Array(inrow.length);
-
-    for (c = 0; c < inrow.length; ++c) {
-      const elt = buildGroup(inrow[c], options);
-
-      if (depth < elt.depth) {
-        depth = elt.depth;
-      }
-
-      if (height < elt.height) {
-        height = elt.height;
-      }
-
-      outrow[c] = elt;
-    }
-
-    const rowGap = group.rowGaps[r];
-    let gap = 0;
-
-    if (rowGap) {
-      gap = calculateSize(rowGap, options);
-
-      if (gap > 0) {
-        // \@argarraycr
-        gap += arstrutDepth;
-
-        if (depth < gap) {
-          depth = gap; // \@xargarraycr
-        }
-
-        gap = 0;
-      }
-    } // In AMS multiline environments such as aligned and gathered, rows
-    // correspond to lines that have additional \jot added to the
-    // \baselineskip via \openup.
-
-
-    if (group.addJot) {
-      depth += jot;
-    }
-
-    outrow.height = height;
-    outrow.depth = depth;
-    totalHeight += height;
-    outrow.pos = totalHeight;
-    totalHeight += depth + gap; // \@yargarraycr
-
-    body[r] = outrow; // Set a position for \hline(s), if any.
-
-    setHLinePos(hLinesBeforeRow[r + 1]);
-  }
-
-  const offset = totalHeight / 2 + options.fontMetrics().axisHeight;
-  const colDescriptions = group.cols || [];
-  const cols = [];
-  let colSep;
-  let colDescrNum;
-
-  for (c = 0, colDescrNum = 0; // Continue while either there are more columns or more column
-  // descriptions, so trailing separators don't get lost.
-  c < nc || colDescrNum < colDescriptions.length; ++c, ++colDescrNum) {
-    let colDescr = colDescriptions[colDescrNum] || {};
-    let firstSeparator = true;
-
-    while (colDescr.type === "separator") {
-      // If there is more than one separator in a row, add a space
-      // between them.
-      if (!firstSeparator) {
-        colSep = buildCommon.makeSpan(["arraycolsep"], []);
-        colSep.style.width = options.fontMetrics().doubleRuleSep + "em";
-        cols.push(colSep);
-      }
-
-      if (colDescr.separator === "|" || colDescr.separator === ":") {
-        const lineType = colDescr.separator === "|" ? "solid" : "dashed";
-        const separator = buildCommon.makeSpan(["vertical-separator"], [], options);
-        separator.style.height = totalHeight + "em";
-        separator.style.borderRightWidth = `${ruleThickness}em`;
-        separator.style.borderRightStyle = lineType;
-        separator.style.margin = `0 -${ruleThickness / 2}em`;
-        separator.style.verticalAlign = -(totalHeight - offset) + "em";
-        cols.push(separator);
-      } else {
-        throw new ParseError("Invalid separator type: " + colDescr.separator);
-      }
-
-      colDescrNum++;
-      colDescr = colDescriptions[colDescrNum] || {};
-      firstSeparator = false;
-    }
-
-    if (c >= nc) {
-      continue;
-    }
-
-    let sepwidth;
-
-    if (c > 0 || group.hskipBeforeAndAfter) {
-      sepwidth = utils.deflt(colDescr.pregap, arraycolsep);
-
-      if (sepwidth !== 0) {
-        colSep = buildCommon.makeSpan(["arraycolsep"], []);
-        colSep.style.width = sepwidth + "em";
-        cols.push(colSep);
-      }
-    }
-
-    let col = [];
-
-    for (r = 0; r < nr; ++r) {
-      const row = body[r];
-      const elem = row[c];
-
-      if (!elem) {
-        continue;
-      }
-
-      const shift = row.pos - offset;
-      elem.depth = row.depth;
-      elem.height = row.height;
-      col.push({
-        type: "elem",
-        elem: elem,
-        shift: shift
-      });
-    }
-
-    col = buildCommon.makeVList({
-      positionType: "individualShift",
-      children: col
-    }, options);
-    col = buildCommon.makeSpan(["col-align-" + (colDescr.align || "c")], [col]);
-    cols.push(col);
-
-    if (c < nc - 1 || group.hskipBeforeAndAfter) {
-      sepwidth = utils.deflt(colDescr.postgap, arraycolsep);
-
-      if (sepwidth !== 0) {
-        colSep = buildCommon.makeSpan(["arraycolsep"], []);
-        colSep.style.width = sepwidth + "em";
-        cols.push(colSep);
-      }
-    }
-  }
-
-  body = buildCommon.makeSpan(["mtable"], cols); // Add \hline(s), if any.
-
-  if (hlines.length > 0) {
-    const line = buildCommon.makeLineSpan("hline", options, ruleThickness);
-    const dashes = buildCommon.makeLineSpan("hdashline", options, ruleThickness);
-    const vListElems = [{
-      type: "elem",
-      elem: body,
-      shift: 0
-    }];
-
-    while (hlines.length > 0) {
-      const hline = hlines.pop();
-      const lineShift = hline.pos - offset;
-
-      if (hline.isDashed) {
-        vListElems.push({
-          type: "elem",
-          elem: dashes,
-          shift: lineShift
-        });
-      } else {
-        vListElems.push({
-          type: "elem",
-          elem: line,
-          shift: lineShift
-        });
-      }
-    }
-
-    body = buildCommon.makeVList({
-      positionType: "individualShift",
-      children: vListElems
-    }, options);
-  }
-
-  return buildCommon.makeSpan(["mord"], [body], options);
-};
-
-const alignMap = {
-  c: "center ",
-  l: "left ",
-  r: "right "
-};
-
-const mathmlBuilder$3 = function mathmlBuilder(group, options) {
-  let table = new mathMLTree.MathNode("mtable", group.body.map(function (row) {
-    return new mathMLTree.MathNode("mtr", row.map(function (cell) {
-      return new mathMLTree.MathNode("mtd", [buildGroup$1(cell, options)]);
-    }));
-  })); // Set column alignment, row spacing, column spacing, and
-  // array lines by setting attributes on the table element.
-  // Set the row spacing. In MathML, we specify a gap distance.
-  // We do not use rowGap[] because MathML automatically increases
-  // cell height with the height/depth of the element content.
-  // LaTeX \arraystretch multiplies the row baseline-to-baseline distance.
-  // We simulate this by adding (arraystretch - 1)em to the gap. This
-  // does a reasonable job of adjusting arrays containing 1 em tall content.
-  // The 0.16 and 0.09 values are found emprically. They produce an array
-  // similar to LaTeX and in which content does not interfere with \hines.
-
-  const gap = group.arraystretch === 0.5 ? 0.1 // {smallmatrix}, {subarray}
-  : 0.16 + group.arraystretch - 1 + (group.addJot ? 0.09 : 0);
-  table.setAttribute("rowspacing", gap + "em"); // MathML table lines go only between cells.
-  // To place a line on an edge we'll use <menclose>, if necessary.
-
-  let menclose = "";
-  let align = "";
-
-  if (group.cols) {
-    // Find column alignment, column spacing, and  vertical lines.
-    const cols = group.cols;
-    let columnLines = "";
-    let prevTypeWasAlign = false;
-    let iStart = 0;
-    let iEnd = cols.length;
-
-    if (cols[0].type === "separator") {
-      menclose += "top ";
-      iStart = 1;
-    }
-
-    if (cols[cols.length - 1].type === "separator") {
-      menclose += "bottom ";
-      iEnd -= 1;
-    }
-
-    for (let i = iStart; i < iEnd; i++) {
-      if (cols[i].type === "align") {
-        align += alignMap[cols[i].align];
-
-        if (prevTypeWasAlign) {
-          columnLines += "none ";
-        }
-
-        prevTypeWasAlign = true;
-      } else if (cols[i].type === "separator") {
-        // MathML accepts only single lines between cells.
-        // So we read only the first of consecutive separators.
-        if (prevTypeWasAlign) {
-          columnLines += cols[i].separator === "|" ? "solid " : "dashed ";
-          prevTypeWasAlign = false;
-        }
-      }
-    }
-
-    table.setAttribute("columnalign", align.trim());
-
-    if (/[sd]/.test(columnLines)) {
-      table.setAttribute("columnlines", columnLines.trim());
-    }
-  } // Set column spacing.
-
-
-  if (group.colSeparationType === "align") {
-    const cols = group.cols || [];
-    let spacing = "";
-
-    for (let i = 1; i < cols.length; i++) {
-      spacing += i % 2 ? "0em " : "1em ";
-    }
-
-    table.setAttribute("columnspacing", spacing.trim());
-  } else if (group.colSeparationType === "alignat") {
-    table.setAttribute("columnspacing", "0em");
-  } else if (group.colSeparationType === "small") {
-    table.setAttribute("columnspacing", "0.2778em");
-  } else {
-    table.setAttribute("columnspacing", "1em");
-  } // Address \hline and \hdashline
-
-
-  let rowLines = "";
-  const hlines = group.hLinesBeforeRow;
-  menclose += hlines[0].length > 0 ? "left " : "";
-  menclose += hlines[hlines.length - 1].length > 0 ? "right " : "";
-
-  for (let i = 1; i < hlines.length - 1; i++) {
-    rowLines += hlines[i].length === 0 ? "none " // MathML accepts only a single line between rows. Read one element.
-    : hlines[i][0] ? "dashed " : "solid ";
-  }
-
-  if (/[sd]/.test(rowLines)) {
-    table.setAttribute("rowlines", rowLines.trim());
-  }
-
-  if (menclose !== "") {
-    table = new mathMLTree.MathNode("menclose", [table]);
-    table.setAttribute("notation", menclose.trim());
-  }
-
-  if (group.arraystretch && group.arraystretch < 1) {
-    // A small array. Wrap in scriptstyle so row gap is not too large.
-    table = new mathMLTree.MathNode("mstyle", [table]);
-    table.setAttribute("scriptlevel", "1");
-  }
-
-  return table;
-}; // Convenience function for aligned and alignedat environments.
-
-
-const alignedHandler = function alignedHandler(context, args) {
-  const cols = [];
-  const res = parseArray(context.parser, {
-    cols,
-    addJot: true
-  }, "display"); // Determining number of columns.
-  // 1. If the first argument is given, we use it as a number of columns,
-  //    and makes sure that each row doesn't exceed that number.
-  // 2. Otherwise, just count number of columns = maximum number
-  //    of cells in each row ("aligned" mode -- isAligned will be true).
-  //
-  // At the same time, prepend empty group {} at beginning of every second
-  // cell in each row (starting with second cell) so that operators become
-  // binary.  This behavior is implemented in amsmath's \start@aligned.
-
-  let numMaths;
-  let numCols = 0;
-  const emptyGroup = {
-    type: "ordgroup",
-    mode: context.mode,
-    body: []
-  };
-  const ordgroup = checkNodeType(args[0], "ordgroup");
-
-  if (ordgroup) {
-    let arg0 = "";
-
-    for (let i = 0; i < ordgroup.body.length; i++) {
-      const textord = assertNodeType(ordgroup.body[i], "textord");
-      arg0 += textord.text;
-    }
-
-    numMaths = Number(arg0);
-    numCols = numMaths * 2;
-  }
-
-  const isAligned = !numCols;
-  res.body.forEach(function (row) {
-    for (let i = 1; i < row.length; i += 2) {
-      // Modify ordgroup node within styling node
-      const styling = assertNodeType(row[i], "styling");
-      const ordgroup = assertNodeType(styling.body[0], "ordgroup");
-      ordgroup.body.unshift(emptyGroup);
-    }
-
-    if (!isAligned) {
-      // Case 1
-      const curMaths = row.length / 2;
-
-      if (numMaths < curMaths) {
-        throw new ParseError("Too many math in a row: " + `expected ${numMaths}, but got ${curMaths}`, row[0]);
-      }
-    } else if (numCols < row.length) {
-      // Case 2
-      numCols = row.length;
-    }
-  }); // Adjusting alignment.
-  // In aligned mode, we add one \qquad between columns;
-  // otherwise we add nothing.
-
-  for (let i = 0; i < numCols; ++i) {
-    let align = "r";
-    let pregap = 0;
-
-    if (i % 2 === 1) {
-      align = "l";
-    } else if (i > 0 && isAligned) {
-      // "aligned" mode.
-      pregap = 1; // add one \quad
-    }
-
-    cols[i] = {
-      type: "align",
-      align: align,
-      pregap: pregap,
-      postgap: 0
-    };
-  }
-
-  res.colSeparationType = isAligned ? "align" : "alignat";
-  return res;
-}; // Arrays are part of LaTeX, defined in lttab.dtx so its documentation
-// is part of the source2e.pdf file of LaTeX2e source documentation.
-// {darray} is an {array} environment where cells are set in \displaystyle,
-// as defined in nccmath.sty.
-
-
-defineEnvironment({
-  type: "array",
-  names: ["array", "darray"],
-  props: {
-    numArgs: 1
-  },
-
-  handler(context, args) {
-    // Since no types are specified above, the two possibilities are
-    // - The argument is wrapped in {} or [], in which case Parser's
-    //   parseGroup() returns an "ordgroup" wrapping some symbol node.
-    // - The argument is a bare symbol node.
-    const symNode = checkSymbolNodeType(args[0]);
-    const colalign = symNode ? [args[0]] : assertNodeType(args[0], "ordgroup").body;
-    const cols = colalign.map(function (nde) {
-      const node = assertSymbolNodeType(nde);
-      const ca = node.text;
-
-      if ("lcr".indexOf(ca) !== -1) {
-        return {
-          type: "align",
-          align: ca
-        };
-      } else if (ca === "|") {
-        return {
-          type: "separator",
-          separator: "|"
-        };
-      } else if (ca === ":") {
-        return {
-          type: "separator",
-          separator: ":"
-        };
-      }
-
-      throw new ParseError("Unknown column alignment: " + ca, nde);
-    });
-    const res = {
-      cols,
-      hskipBeforeAndAfter: true // \@preamble in lttab.dtx
-
-    };
-    return parseArray(context.parser, res, dCellStyle(context.envName));
-  },
-
-  htmlBuilder: htmlBuilder$3,
-  mathmlBuilder: mathmlBuilder$3
-}); // The matrix environments of amsmath builds on the array environment
-// of LaTeX, which is discussed above.
-
-defineEnvironment({
-  type: "array",
-  names: ["matrix", "pmatrix", "bmatrix", "Bmatrix", "vmatrix", "Vmatrix"],
-  props: {
-    numArgs: 0
-  },
-
-  handler(context) {
-    const delimiters = {
-      "matrix": null,
-      "pmatrix": ["(", ")"],
-      "bmatrix": ["[", "]"],
-      "Bmatrix": ["\\{", "\\}"],
-      "vmatrix": ["|", "|"],
-      "Vmatrix": ["\\Vert", "\\Vert"]
-    }[context.envName]; // \hskip -\arraycolsep in amsmath
-
-    const payload = {
-      hskipBeforeAndAfter: false
-    };
-    const res = parseArray(context.parser, payload, dCellStyle(context.envName));
-    return delimiters ? {
-      type: "leftright",
-      mode: context.mode,
-      body: [res],
-      left: delimiters[0],
-      right: delimiters[1],
-      rightColor: undefined // \right uninfluenced by \color in array
-
-    } : res;
-  },
-
-  htmlBuilder: htmlBuilder$3,
-  mathmlBuilder: mathmlBuilder$3
-});
-defineEnvironment({
-  type: "array",
-  names: ["smallmatrix"],
-  props: {
-    numArgs: 0
-  },
-
-  handler(context) {
-    const payload = {
-      arraystretch: 0.5
-    };
-    const res = parseArray(context.parser, payload, "script");
-    res.colSeparationType = "small";
-    return res;
-  },
-
-  htmlBuilder: htmlBuilder$3,
-  mathmlBuilder: mathmlBuilder$3
-});
-defineEnvironment({
-  type: "array",
-  names: ["subarray"],
-  props: {
-    numArgs: 1
-  },
-
-  handler(context, args) {
-    // Parsing of {subarray} is similar to {array}
-    const symNode = checkSymbolNodeType(args[0]);
-    const colalign = symNode ? [args[0]] : assertNodeType(args[0], "ordgroup").body;
-    const cols = colalign.map(function (nde) {
-      const node = assertSymbolNodeType(nde);
-      const ca = node.text; // {subarray} only recognizes "l" & "c"
-
-      if ("lc".indexOf(ca) !== -1) {
-        return {
-          type: "align",
-          align: ca
-        };
-      }
-
-      throw new ParseError("Unknown column alignment: " + ca, nde);
-    });
-
-    if (cols.length > 1) {
-      throw new ParseError("{subarray} can contain only one column");
-    }
-
-    let res = {
-      cols,
-      hskipBeforeAndAfter: false,
-      arraystretch: 0.5
-    };
-    res = parseArray(context.parser, res, "script");
-
-    if (res.body[0].length > 1) {
-      throw new ParseError("{subarray} can contain only one column");
-    }
-
-    return res;
-  },
-
-  htmlBuilder: htmlBuilder$3,
-  mathmlBuilder: mathmlBuilder$3
-}); // A cases environment (in amsmath.sty) is almost equivalent to
-// \def\arraystretch{1.2}%
-// \left\{\begin{array}{@{}l@{\quad}l@{}} … \end{array}\right.
-// {dcases} is a {cases} environment where cells are set in \displaystyle,
-// as defined in mathtools.sty.
-
-defineEnvironment({
-  type: "array",
-  names: ["cases", "dcases"],
-  props: {
-    numArgs: 0
-  },
-
-  handler(context) {
-    const payload = {
-      arraystretch: 1.2,
-      cols: [{
-        type: "align",
-        align: "l",
-        pregap: 0,
-        // TODO(kevinb) get the current style.
-        // For now we use the metrics for TEXT style which is what we were
-        // doing before.  Before attempting to get the current style we
-        // should look at TeX's behavior especially for \over and matrices.
-        postgap: 1.0
-        /* 1em quad */
-
-      }, {
-        type: "align",
-        align: "l",
-        pregap: 0,
-        postgap: 0
-      }]
-    };
-    const res = parseArray(context.parser, payload, dCellStyle(context.envName));
-    return {
-      type: "leftright",
-      mode: context.mode,
-      body: [res],
-      left: "\\{",
-      right: ".",
-      rightColor: undefined
-    };
-  },
-
-  htmlBuilder: htmlBuilder$3,
-  mathmlBuilder: mathmlBuilder$3
-}); // An aligned environment is like the align* environment
-// except it operates within math mode.
-// Note that we assume \nomallineskiplimit to be zero,
-// so that \strut@ is the same as \strut.
-
-defineEnvironment({
-  type: "array",
-  names: ["aligned"],
-  props: {
-    numArgs: 0
-  },
-  handler: alignedHandler,
-  htmlBuilder: htmlBuilder$3,
-  mathmlBuilder: mathmlBuilder$3
-}); // A gathered environment is like an array environment with one centered
-// column, but where rows are considered lines so get \jot line spacing
-// and contents are set in \displaystyle.
-
-defineEnvironment({
-  type: "array",
-  names: ["gathered"],
-  props: {
-    numArgs: 0
-  },
-
-  handler(context) {
-    const res = {
-      cols: [{
-        type: "align",
-        align: "c"
-      }],
-      addJot: true
-    };
-    return parseArray(context.parser, res, "display");
-  },
-
-  htmlBuilder: htmlBuilder$3,
-  mathmlBuilder: mathmlBuilder$3
-}); // alignat environment is like an align environment, but one must explicitly
-// specify maximum number of columns in each row, and can adjust spacing between
-// each columns.
-
-defineEnvironment({
-  type: "array",
-  names: ["alignedat"],
-  // One for numbered and for unnumbered;
-  // but, KaTeX doesn't supports math numbering yet,
-  // they make no difference for now.
-  props: {
-    numArgs: 1
-  },
-  handler: alignedHandler,
-  htmlBuilder: htmlBuilder$3,
-  mathmlBuilder: mathmlBuilder$3
-}); // Catch \hline outside array environment
-
-defineFunction({
-  type: "text",
-  // Doesn't matter what this is.
-  names: ["\\hline", "\\hdashline"],
-  props: {
-    numArgs: 0,
-    allowedInText: true,
-    allowedInMath: true
-  },
-
-  handler(context, args) {
-    throw new ParseError(`${context.funcName} valid only within array environment`);
-  }
-
-});
-
-const environments = _environments;
-
-// defineEnvironment definitions.
-// $FlowFixMe, "environment" handler returns an environment ParseNode
-
-defineFunction({
-  type: "environment",
-  names: ["\\begin", "\\end"],
-  props: {
-    numArgs: 1,
-    argTypes: ["text"]
-  },
-
-  handler(_ref, args) {
-    let parser = _ref.parser,
-        funcName = _ref.funcName;
-    const nameGroup = args[0];
-
-    if (nameGroup.type !== "ordgroup") {
-      throw new ParseError("Invalid environment name", nameGroup);
-    }
-
-    let envName = "";
-
-    for (let i = 0; i < nameGroup.body.length; ++i) {
-      envName += assertNodeType(nameGroup.body[i], "textord").text;
-    }
-
-    if (funcName === "\\begin") {
-      // begin...end is similar to left...right
-      if (!environments.hasOwnProperty(envName)) {
-        throw new ParseError("No such environment: " + envName, nameGroup);
-      } // Build the environment object. Arguments and other information will
-      // be made available to the begin and end methods using properties.
-
-
-      const env = environments[envName];
-
-      const _parser$parseArgument = parser.parseArguments("\\begin{" + envName + "}", env),
-            args = _parser$parseArgument.args,
-            optArgs = _parser$parseArgument.optArgs;
-
-      const context = {
-        mode: parser.mode,
-        envName,
-        parser
-      };
-      const result = env.handler(context, args, optArgs);
-      parser.expect("\\end", false);
-      const endNameToken = parser.nextToken;
-      const end = assertNodeType(parser.parseFunction(), "environment");
-
-      if (end.name !== envName) {
-        throw new ParseError(`Mismatch: \\begin{${envName}} matched by \\end{${end.name}}`, endNameToken);
-      }
-
-      return result;
-    }
-
-    return {
-      type: "environment",
-      mode: parser.mode,
-      name: envName,
-      nameGroup
-    };
-  }
-
-});
-
-const makeSpan$2 = buildCommon.makeSpan;
-
-function htmlBuilder$4(group, options) {
-  const elements = buildExpression(group.body, options, true);
-  return makeSpan$2([group.mclass], elements, options);
-}
-
-function mathmlBuilder$4(group, options) {
-  let node;
-  const inner = buildExpression$1(group.body, options);
-
-  if (group.mclass === "minner") {
-    return mathMLTree.newDocumentFragment(inner);
-  } else if (group.mclass === "mord") {
-    if (group.isCharacterBox) {
-      node = inner[0];
-      node.type = "mi";
-    } else {
-      node = new mathMLTree.MathNode("mi", inner);
-    }
-  } else {
-    if (group.isCharacterBox) {
-      node = inner[0];
-      node.type = "mo";
-    } else {
-      node = new mathMLTree.MathNode("mo", inner);
-    } // Set spacing based on what is the most likely adjacent atom type.
-    // See TeXbook p170.
-
-
-    if (group.mclass === "mbin") {
-      node.attributes.lspace = "0.22em"; // medium space
-
-      node.attributes.rspace = "0.22em";
-    } else if (group.mclass === "mpunct") {
-      node.attributes.lspace = "0em";
-      node.attributes.rspace = "0.17em"; // thinspace
-    } else if (group.mclass === "mopen" || group.mclass === "mclose") {
-      node.attributes.lspace = "0em";
-      node.attributes.rspace = "0em";
-    } // MathML <mo> default space is 5/18 em, so <mrel> needs no action.
-    // Ref: https://developer.mozilla.org/en-US/docs/Web/MathML/Element/mo
-
-  }
-
-  return node;
-} // Math class commands except \mathop
-
-
-defineFunction({
-  type: "mclass",
-  names: ["\\mathord", "\\mathbin", "\\mathrel", "\\mathopen", "\\mathclose", "\\mathpunct", "\\mathinner"],
-  props: {
-    numArgs: 1
-  },
-
-  handler(_ref, args) {
-    let parser = _ref.parser,
-        funcName = _ref.funcName;
-    const body = args[0];
-    return {
-      type: "mclass",
-      mode: parser.mode,
-      mclass: "m" + funcName.substr(5),
-      // TODO(kevinb): don't prefix with 'm'
-      body: ordargument(body),
-      isCharacterBox: utils.isCharacterBox(body)
-    };
-  },
-
-  htmlBuilder: htmlBuilder$4,
-  mathmlBuilder: mathmlBuilder$4
-});
-const binrelClass = arg => {
-  // \binrel@ spacing varies with (bin|rel|ord) of the atom in the argument.
-  // (by rendering separately and with {}s before and after, and measuring
-  // the change in spacing).  We'll do roughly the same by detecting the
-  // atom type directly.
-  const atom = arg.type === "ordgroup" && arg.body.length ? arg.body[0] : arg;
-
-  if (atom.type === "atom" && (atom.family === "bin" || atom.family === "rel")) {
-    return "m" + atom.family;
-  } else {
-    return "mord";
-  }
-}; // \@binrel{x}{y} renders like y but as mbin/mrel/mord if x is mbin/mrel/mord.
-// This is equivalent to \binrel@{x}\binrel@@{y} in AMSTeX.
-
-defineFunction({
-  type: "mclass",
-  names: ["\\@binrel"],
-  props: {
-    numArgs: 2
-  },
-
-  handler(_ref2, args) {
-    let parser = _ref2.parser;
-    return {
-      type: "mclass",
-      mode: parser.mode,
-      mclass: binrelClass(args[0]),
-      body: [args[1]],
-      isCharacterBox: utils.isCharacterBox(args[1])
-    };
-  }
-
-}); // Build a relation or stacked op by placing one symbol on top of another
-
-defineFunction({
-  type: "mclass",
-  names: ["\\stackrel", "\\overset", "\\underset"],
-  props: {
-    numArgs: 2
-  },
-
-  handler(_ref3, args) {
-    let parser = _ref3.parser,
-        funcName = _ref3.funcName;
-    const baseArg = args[1];
-    const shiftedArg = args[0];
-    let mclass;
-
-    if (funcName !== "\\stackrel") {
-      // LaTeX applies \binrel spacing to \overset and \underset.
-      mclass = binrelClass(baseArg);
-    } else {
-      mclass = "mrel"; // for \stackrel
-    }
-
-    const baseOp = {
-      type: "op",
-      mode: baseArg.mode,
-      limits: true,
-      alwaysHandleSupSub: true,
-      parentIsSupSub: false,
-      symbol: false,
-      suppressBaseShift: funcName !== "\\stackrel",
-      body: ordargument(baseArg)
-    };
-    const supsub = {
-      type: "supsub",
-      mode: shiftedArg.mode,
-      base: baseOp,
-      sup: funcName === "\\underset" ? null : shiftedArg,
-      sub: funcName === "\\underset" ? shiftedArg : null
-    };
-    return {
-      type: "mclass",
-      mode: parser.mode,
-      mclass,
-      body: [supsub],
-      isCharacterBox: utils.isCharacterBox(supsub)
-    };
-  },
-
-  htmlBuilder: htmlBuilder$4,
-  mathmlBuilder: mathmlBuilder$4
-});
-
-// TODO(kevinb): implement \\sl and \\sc
-
-const htmlBuilder$5 = (group, options) => {
-  const font = group.font;
-  const newOptions = options.withFont(font);
-  return buildGroup(group.body, newOptions);
-};
-
-const mathmlBuilder$5 = (group, options) => {
-  const font = group.font;
-  const newOptions = options.withFont(font);
-  return buildGroup$1(group.body, newOptions);
-};
-
-const fontAliases = {
-  "\\Bbb": "\\mathbb",
-  "\\bold": "\\mathbf",
-  "\\frak": "\\mathfrak",
-  "\\bm": "\\boldsymbol"
-};
-defineFunction({
-  type: "font",
-  names: [// styles, except \boldsymbol defined below
-  "\\mathrm", "\\mathit", "\\mathbf", "\\mathnormal", // families
-  "\\mathbb", "\\mathcal", "\\mathfrak", "\\mathscr", "\\mathsf", "\\mathtt", // aliases, except \bm defined below
-  "\\Bbb", "\\bold", "\\frak"],
-  props: {
-    numArgs: 1,
-    greediness: 2
-  },
-  handler: (_ref, args) => {
-    let parser = _ref.parser,
-        funcName = _ref.funcName;
-    const body = args[0];
-    let func = funcName;
-
-    if (func in fontAliases) {
-      func = fontAliases[func];
-    }
-
-    return {
-      type: "font",
-      mode: parser.mode,
-      font: func.slice(1),
-      body
-    };
-  },
-  htmlBuilder: htmlBuilder$5,
-  mathmlBuilder: mathmlBuilder$5
-});
-defineFunction({
-  type: "mclass",
-  names: ["\\boldsymbol", "\\bm"],
-  props: {
-    numArgs: 1,
-    greediness: 2
-  },
-  handler: (_ref2, args) => {
-    let parser = _ref2.parser;
-    const body = args[0];
-    const isCharacterBox = utils.isCharacterBox(body); // amsbsy.sty's \boldsymbol uses \binrel spacing to inherit the
-    // argument's bin|rel|ord status
-
-    return {
-      type: "mclass",
-      mode: parser.mode,
-      mclass: binrelClass(body),
-      body: [{
-        type: "font",
-        mode: parser.mode,
-        font: "boldsymbol",
-        body
-      }],
-      isCharacterBox: isCharacterBox
-    };
-  }
-}); // Old font changing functions
-
-defineFunction({
-  type: "font",
-  names: ["\\rm", "\\sf", "\\tt", "\\bf", "\\it"],
-  props: {
-    numArgs: 0,
-    allowedInText: true
-  },
-  handler: (_ref3, args) => {
-    let parser = _ref3.parser,
-        funcName = _ref3.funcName,
-        breakOnTokenText = _ref3.breakOnTokenText;
-    const mode = parser.mode;
-    const body = parser.parseExpression(true, breakOnTokenText);
-    const style = `math${funcName.slice(1)}`;
-    return {
-      type: "font",
-      mode: mode,
-      font: style,
-      body: {
-        type: "ordgroup",
-        mode: parser.mode,
-        body
-      }
-    };
-  },
-  htmlBuilder: htmlBuilder$5,
-  mathmlBuilder: mathmlBuilder$5
-});
-
-const adjustStyle = (size, originalStyle) => {
-  // Figure out what style this fraction should be in based on the
-  // function used
-  let style = originalStyle;
-
-  if (size === "display") {
-    // Get display style as a default.
-    // If incoming style is sub/sup, use style.text() to get correct size.
-    style = style.id >= Style$1.SCRIPT.id ? style.text() : Style$1.DISPLAY;
-  } else if (size === "text" && style.size === Style$1.DISPLAY.size) {
-    // We're in a \tfrac but incoming style is displaystyle, so:
-    style = Style$1.TEXT;
-  } else if (size === "script") {
-    style = Style$1.SCRIPT;
-  } else if (size === "scriptscript") {
-    style = Style$1.SCRIPTSCRIPT;
-  }
-
-  return style;
-};
-
-const htmlBuilder$6 = (group, options) => {
-  // Fractions are handled in the TeXbook on pages 444-445, rules 15(a-e).
-  const style = adjustStyle(group.size, options.style);
-  const nstyle = style.fracNum();
-  const dstyle = style.fracDen();
-  let newOptions;
-  newOptions = options.havingStyle(nstyle);
-  const numerm = buildGroup(group.numer, newOptions, options);
-
-  if (group.continued) {
-    // \cfrac inserts a \strut into the numerator.
-    // Get \strut dimensions from TeXbook page 353.
-    const hStrut = 8.5 / options.fontMetrics().ptPerEm;
-    const dStrut = 3.5 / options.fontMetrics().ptPerEm;
-    numerm.height = numerm.height < hStrut ? hStrut : numerm.height;
-    numerm.depth = numerm.depth < dStrut ? dStrut : numerm.depth;
-  }
-
-  newOptions = options.havingStyle(dstyle);
-  const denomm = buildGroup(group.denom, newOptions, options);
-  let rule;
-  let ruleWidth;
-  let ruleSpacing;
-
-  if (group.hasBarLine) {
-    if (group.barSize) {
-      ruleWidth = calculateSize(group.barSize, options);
-      rule = buildCommon.makeLineSpan("frac-line", options, ruleWidth);
-    } else {
-      rule = buildCommon.makeLineSpan("frac-line", options);
-    }
-
-    ruleWidth = rule.height;
-    ruleSpacing = rule.height;
-  } else {
-    rule = null;
-    ruleWidth = 0;
-    ruleSpacing = options.fontMetrics().defaultRuleThickness;
-  } // Rule 15b
-
-
-  let numShift;
-  let clearance;
-  let denomShift;
-
-  if (style.size === Style$1.DISPLAY.size || group.size === "display") {
-    numShift = options.fontMetrics().num1;
-
-    if (ruleWidth > 0) {
-      clearance = 3 * ruleSpacing;
-    } else {
-      clearance = 7 * ruleSpacing;
-    }
-
-    denomShift = options.fontMetrics().denom1;
-  } else {
-    if (ruleWidth > 0) {
-      numShift = options.fontMetrics().num2;
-      clearance = ruleSpacing;
-    } else {
-      numShift = options.fontMetrics().num3;
-      clearance = 3 * ruleSpacing;
-    }
-
-    denomShift = options.fontMetrics().denom2;
-  }
-
-  let frac;
-
-  if (!rule) {
-    // Rule 15c
-    const candidateClearance = numShift - numerm.depth - (denomm.height - denomShift);
-
-    if (candidateClearance < clearance) {
-      numShift += 0.5 * (clearance - candidateClearance);
-      denomShift += 0.5 * (clearance - candidateClearance);
-    }
-
-    frac = buildCommon.makeVList({
-      positionType: "individualShift",
-      children: [{
-        type: "elem",
-        elem: denomm,
-        shift: denomShift
-      }, {
-        type: "elem",
-        elem: numerm,
-        shift: -numShift
-      }]
-    }, options);
-  } else {
-    // Rule 15d
-    const axisHeight = options.fontMetrics().axisHeight;
-
-    if (numShift - numerm.depth - (axisHeight + 0.5 * ruleWidth) < clearance) {
-      numShift += clearance - (numShift - numerm.depth - (axisHeight + 0.5 * ruleWidth));
-    }
-
-    if (axisHeight - 0.5 * ruleWidth - (denomm.height - denomShift) < clearance) {
-      denomShift += clearance - (axisHeight - 0.5 * ruleWidth - (denomm.height - denomShift));
-    }
-
-    const midShift = -(axisHeight - 0.5 * ruleWidth);
-    frac = buildCommon.makeVList({
-      positionType: "individualShift",
-      children: [{
-        type: "elem",
-        elem: denomm,
-        shift: denomShift
-      }, {
-        type: "elem",
-        elem: rule,
-        shift: midShift
-      }, {
-        type: "elem",
-        elem: numerm,
-        shift: -numShift
-      }]
-    }, options);
-  } // Since we manually change the style sometimes (with \dfrac or \tfrac),
-  // account for the possible size change here.
-
-
-  newOptions = options.havingStyle(style);
-  frac.height *= newOptions.sizeMultiplier / options.sizeMultiplier;
-  frac.depth *= newOptions.sizeMultiplier / options.sizeMultiplier; // Rule 15e
-
-  let delimSize;
-
-  if (style.size === Style$1.DISPLAY.size) {
-    delimSize = options.fontMetrics().delim1;
-  } else {
-    delimSize = options.fontMetrics().delim2;
-  }
-
-  let leftDelim;
-  let rightDelim;
-
-  if (group.leftDelim == null) {
-    leftDelim = makeNullDelimiter(options, ["mopen"]);
-  } else {
-    leftDelim = delimiter.customSizedDelim(group.leftDelim, delimSize, true, options.havingStyle(style), group.mode, ["mopen"]);
-  }
-
-  if (group.continued) {
-    rightDelim = buildCommon.makeSpan([]); // zero width for \cfrac
-  } else if (group.rightDelim == null) {
-    rightDelim = makeNullDelimiter(options, ["mclose"]);
-  } else {
-    rightDelim = delimiter.customSizedDelim(group.rightDelim, delimSize, true, options.havingStyle(style), group.mode, ["mclose"]);
-  }
-
-  return buildCommon.makeSpan(["mord"].concat(newOptions.sizingClasses(options)), [leftDelim, buildCommon.makeSpan(["mfrac"], [frac]), rightDelim], options);
-};
-
-const mathmlBuilder$6 = (group, options) => {
-  let node = new mathMLTree.MathNode("mfrac", [buildGroup$1(group.numer, options), buildGroup$1(group.denom, options)]);
-
-  if (!group.hasBarLine) {
-    node.setAttribute("linethickness", "0px");
-  } else if (group.barSize) {
-    const ruleWidth = calculateSize(group.barSize, options);
-    node.setAttribute("linethickness", ruleWidth + "em");
-  }
-
-  const style = adjustStyle(group.size, options.style);
-
-  if (style.size !== options.style.size) {
-    node = new mathMLTree.MathNode("mstyle", [node]);
-    const isDisplay = style.size === Style$1.DISPLAY.size ? "true" : "false";
-    node.setAttribute("displaystyle", isDisplay);
-    node.setAttribute("scriptlevel", "0");
-  }
-
-  if (group.leftDelim != null || group.rightDelim != null) {
-    const withDelims = [];
-
-    if (group.leftDelim != null) {
-      const leftOp = new mathMLTree.MathNode("mo", [new mathMLTree.TextNode(group.leftDelim.replace("\\", ""))]);
-      leftOp.setAttribute("fence", "true");
-      withDelims.push(leftOp);
-    }
-
-    withDelims.push(node);
-
-    if (group.rightDelim != null) {
-      const rightOp = new mathMLTree.MathNode("mo", [new mathMLTree.TextNode(group.rightDelim.replace("\\", ""))]);
-      rightOp.setAttribute("fence", "true");
-      withDelims.push(rightOp);
-    }
-
-    return makeRow(withDelims);
-  }
-
-  return node;
-};
-
-defineFunction({
-  type: "genfrac",
-  names: ["\\cfrac", "\\dfrac", "\\frac", "\\tfrac", "\\dbinom", "\\binom", "\\tbinom", "\\\\atopfrac", // can’t be entered directly
-  "\\\\bracefrac", "\\\\brackfrac"],
-  props: {
-    numArgs: 2,
-    greediness: 2
-  },
-  handler: (_ref, args) => {
-    let parser = _ref.parser,
-        funcName = _ref.funcName;
-    const numer = args[0];
-    const denom = args[1];
-    let hasBarLine;
-    let leftDelim = null;
-    let rightDelim = null;
-    let size = "auto";
-
-    switch (funcName) {
-      case "\\cfrac":
-      case "\\dfrac":
-      case "\\frac":
-      case "\\tfrac":
-        hasBarLine = true;
-        break;
-
-      case "\\\\atopfrac":
-        hasBarLine = false;
-        break;
-
-      case "\\dbinom":
-      case "\\binom":
-      case "\\tbinom":
-        hasBarLine = false;
-        leftDelim = "(";
-        rightDelim = ")";
-        break;
-
-      case "\\\\bracefrac":
-        hasBarLine = false;
-        leftDelim = "\\{";
-        rightDelim = "\\}";
-        break;
-
-      case "\\\\brackfrac":
-        hasBarLine = false;
-        leftDelim = "[";
-        rightDelim = "]";
-        break;
-
-      default:
-        throw new Error("Unrecognized genfrac command");
-    }
-
-    switch (funcName) {
-      case "\\cfrac":
-      case "\\dfrac":
-      case "\\dbinom":
-        size = "display";
-        break;
-
-      case "\\tfrac":
-      case "\\tbinom":
-        size = "text";
-        break;
-    }
-
-    return {
-      type: "genfrac",
-      mode: parser.mode,
-      continued: funcName === "\\cfrac",
-      numer,
-      denom,
-      hasBarLine,
-      leftDelim,
-      rightDelim,
-      size,
-      barSize: null
-    };
-  },
-  htmlBuilder: htmlBuilder$6,
-  mathmlBuilder: mathmlBuilder$6
-}); // Infix generalized fractions -- these are not rendered directly, but replaced
-// immediately by one of the variants above.
-
-defineFunction({
-  type: "infix",
-  names: ["\\over", "\\choose", "\\atop", "\\brace", "\\brack"],
-  props: {
-    numArgs: 0,
-    infix: true
-  },
-
-  handler(_ref2) {
-    let parser = _ref2.parser,
-        funcName = _ref2.funcName,
-        token = _ref2.token;
-    let replaceWith;
-
-    switch (funcName) {
-      case "\\over":
-        replaceWith = "\\frac";
-        break;
-
-      case "\\choose":
-        replaceWith = "\\binom";
-        break;
-
-      case "\\atop":
-        replaceWith = "\\\\atopfrac";
-        break;
-
-      case "\\brace":
-        replaceWith = "\\\\bracefrac";
-        break;
-
-      case "\\brack":
-        replaceWith = "\\\\brackfrac";
-        break;
-
-      default:
-        throw new Error("Unrecognized infix genfrac command");
-    }
-
-    return {
-      type: "infix",
-      mode: parser.mode,
-      replaceWith,
-      token
-    };
-  }
-
-});
-const stylArray = ["display", "text", "script", "scriptscript"];
-
-const delimFromValue = function delimFromValue(delimString) {
-  let delim = null;
-
-  if (delimString.length > 0) {
-    delim = delimString;
-    delim = delim === "." ? null : delim;
-  }
-
-  return delim;
-};
-
-defineFunction({
-  type: "genfrac",
-  names: ["\\genfrac"],
-  props: {
-    numArgs: 6,
-    greediness: 6,
-    argTypes: ["math", "math", "size", "text", "math", "math"]
-  },
-
-  handler(_ref3, args) {
-    let parser = _ref3.parser;
-    const numer = args[4];
-    const denom = args[5]; // Look into the parse nodes to get the desired delimiters.
-
-    let leftNode = checkNodeType(args[0], "atom");
-
-    if (leftNode) {
-      leftNode = assertAtomFamily(args[0], "open");
-    }
-
-    const leftDelim = leftNode ? delimFromValue(leftNode.text) : null;
-    let rightNode = checkNodeType(args[1], "atom");
-
-    if (rightNode) {
-      rightNode = assertAtomFamily(args[1], "close");
-    }
-
-    const rightDelim = rightNode ? delimFromValue(rightNode.text) : null;
-    const barNode = assertNodeType(args[2], "size");
-    let hasBarLine;
-    let barSize = null;
-
-    if (barNode.isBlank) {
-      // \genfrac acts differently than \above.
-      // \genfrac treats an empty size group as a signal to use a
-      // standard bar size. \above would see size = 0 and omit the bar.
-      hasBarLine = true;
-    } else {
-      barSize = barNode.value;
-      hasBarLine = barSize.number > 0;
-    } // Find out if we want displaystyle, textstyle, etc.
-
-
-    let size = "auto";
-    let styl = checkNodeType(args[3], "ordgroup");
-
-    if (styl) {
-      if (styl.body.length > 0) {
-        const textOrd = assertNodeType(styl.body[0], "textord");
-        size = stylArray[Number(textOrd.text)];
-      }
-    } else {
-      styl = assertNodeType(args[3], "textord");
-      size = stylArray[Number(styl.text)];
-    }
-
-    return {
-      type: "genfrac",
-      mode: parser.mode,
-      numer,
-      denom,
-      continued: false,
-      hasBarLine,
-      barSize,
-      leftDelim,
-      rightDelim,
-      size
-    };
-  },
-
-  htmlBuilder: htmlBuilder$6,
-  mathmlBuilder: mathmlBuilder$6
-}); // \above is an infix fraction that also defines a fraction bar size.
-
-defineFunction({
-  type: "infix",
-  names: ["\\above"],
-  props: {
-    numArgs: 1,
-    argTypes: ["size"],
-    infix: true
-  },
-
-  handler(_ref4, args) {
-    let parser = _ref4.parser,
-        funcName = _ref4.funcName,
-        token = _ref4.token;
-    return {
-      type: "infix",
-      mode: parser.mode,
-      replaceWith: "\\\\abovefrac",
-      size: assertNodeType(args[0], "size").value,
-      token
-    };
-  }
-
-});
-defineFunction({
-  type: "genfrac",
-  names: ["\\\\abovefrac"],
-  props: {
-    numArgs: 3,
-    argTypes: ["math", "size", "math"]
-  },
-  handler: (_ref5, args) => {
-    let parser = _ref5.parser,
-        funcName = _ref5.funcName;
-    const numer = args[0];
-    const barSize = assert(assertNodeType(args[1], "infix").size);
-    const denom = args[2];
-    const hasBarLine = barSize.number > 0;
-    return {
-      type: "genfrac",
-      mode: parser.mode,
-      numer,
-      denom,
-      continued: false,
-      hasBarLine,
-      barSize,
-      leftDelim: null,
-      rightDelim: null,
-      size: "auto"
-    };
-  },
-  htmlBuilder: htmlBuilder$6,
-  mathmlBuilder: mathmlBuilder$6
-});
-
-// NOTE: Unlike most `htmlBuilder`s, this one handles not only "horizBrace", but
-const htmlBuilder$7 = (grp, options) => {
-  const style = options.style; // Pull out the `ParseNode<"horizBrace">` if `grp` is a "supsub" node.
-
-  let supSubGroup;
-  let group;
-  const supSub = checkNodeType(grp, "supsub");
-
-  if (supSub) {
-    // Ref: LaTeX source2e: }}}}\limits}
-    // i.e. LaTeX treats the brace similar to an op and passes it
-    // with \limits, so we need to assign supsub style.
-    supSubGroup = supSub.sup ? buildGroup(supSub.sup, options.havingStyle(style.sup()), options) : buildGroup(supSub.sub, options.havingStyle(style.sub()), options);
-    group = assertNodeType(supSub.base, "horizBrace");
-  } else {
-    group = assertNodeType(grp, "horizBrace");
-  } // Build the base group
-
-
-  const body = buildGroup(group.base, options.havingBaseStyle(Style$1.DISPLAY)); // Create the stretchy element
-
-  const braceBody = stretchy.svgSpan(group, options); // Generate the vlist, with the appropriate kerns        ┏━━━━━━━━┓
-  // This first vlist contains the content and the brace:   equation
-
-  let vlist;
-
-  if (group.isOver) {
-    vlist = buildCommon.makeVList({
-      positionType: "firstBaseline",
-      children: [{
-        type: "elem",
-        elem: body
-      }, {
-        type: "kern",
-        size: 0.1
-      }, {
-        type: "elem",
-        elem: braceBody
-      }]
-    }, options); // $FlowFixMe: Replace this with passing "svg-align" into makeVList.
-
-    vlist.children[0].children[0].children[1].classes.push("svg-align");
-  } else {
-    vlist = buildCommon.makeVList({
-      positionType: "bottom",
-      positionData: body.depth + 0.1 + braceBody.height,
-      children: [{
-        type: "elem",
-        elem: braceBody
-      }, {
-        type: "kern",
-        size: 0.1
-      }, {
-        type: "elem",
-        elem: body
-      }]
-    }, options); // $FlowFixMe: Replace this with passing "svg-align" into makeVList.
-
-    vlist.children[0].children[0].children[0].classes.push("svg-align");
-  }
-
-  if (supSubGroup) {
-    // To write the supsub, wrap the first vlist in another vlist:
-    // They can't all go in the same vlist, because the note might be
-    // wider than the equation. We want the equation to control the
-    // brace width.
-    //      note          long note           long note
-    //   ┏━━━━━━━━┓   or    ┏━━━┓     not    ┏━━━━━━━━━┓
-    //    equation           eqn                 eqn
-    const vSpan = buildCommon.makeSpan(["mord", group.isOver ? "mover" : "munder"], [vlist], options);
-
-    if (group.isOver) {
-      vlist = buildCommon.makeVList({
-        positionType: "firstBaseline",
-        children: [{
-          type: "elem",
-          elem: vSpan
-        }, {
-          type: "kern",
-          size: 0.2
-        }, {
-          type: "elem",
-          elem: supSubGroup
-        }]
-      }, options);
-    } else {
-      vlist = buildCommon.makeVList({
-        positionType: "bottom",
-        positionData: vSpan.depth + 0.2 + supSubGroup.height + supSubGroup.depth,
-        children: [{
-          type: "elem",
-          elem: supSubGroup
-        }, {
-          type: "kern",
-          size: 0.2
-        }, {
-          type: "elem",
-          elem: vSpan
-        }]
-      }, options);
-    }
-  }
-
-  return buildCommon.makeSpan(["mord", group.isOver ? "mover" : "munder"], [vlist], options);
-};
-
-const mathmlBuilder$7 = (group, options) => {
-  const accentNode = stretchy.mathMLnode(group.label);
-  return new mathMLTree.MathNode(group.isOver ? "mover" : "munder", [buildGroup$1(group.base, options), accentNode]);
-}; // Horizontal stretchy braces
-
-
-defineFunction({
-  type: "horizBrace",
-  names: ["\\overbrace", "\\underbrace"],
-  props: {
-    numArgs: 1
-  },
-
-  handler(_ref, args) {
-    let parser = _ref.parser,
-        funcName = _ref.funcName;
-    return {
-      type: "horizBrace",
-      mode: parser.mode,
-      label: funcName,
-      isOver: /^\\over/.test(funcName),
-      base: args[0]
-    };
-  },
-
-  htmlBuilder: htmlBuilder$7,
-  mathmlBuilder: mathmlBuilder$7
-});
-
-defineFunction({
-  type: "href",
-  names: ["\\href"],
-  props: {
-    numArgs: 2,
-    argTypes: ["url", "original"],
-    allowedInText: true
-  },
-  handler: (_ref, args) => {
-    let parser = _ref.parser;
-    const body = args[1];
-    const href = assertNodeType(args[0], "url").url;
-
-    if (!parser.settings.isTrusted({
-      command: "\\href",
-      url: href
-    })) {
-      return parser.formatUnsupportedCmd("\\href");
-    }
-
-    return {
-      type: "href",
-      mode: parser.mode,
-      href,
-      body: ordargument(body)
-    };
-  },
-  htmlBuilder: (group, options) => {
-    const elements = buildExpression(group.body, options, false);
-    return buildCommon.makeAnchor(group.href, [], elements, options);
-  },
-  mathmlBuilder: (group, options) => {
-    let math = buildExpressionRow(group.body, options);
-
-    if (!(math instanceof MathNode)) {
-      math = new MathNode("mrow", [math]);
-    }
-
-    math.setAttribute("href", group.href);
-    return math;
-  }
-});
-defineFunction({
-  type: "href",
-  names: ["\\url"],
-  props: {
-    numArgs: 1,
-    argTypes: ["url"],
-    allowedInText: true
-  },
-  handler: (_ref2, args) => {
-    let parser = _ref2.parser;
-    const href = assertNodeType(args[0], "url").url;
-
-    if (!parser.settings.isTrusted({
-      command: "\\url",
-      url: href
-    })) {
-      return parser.formatUnsupportedCmd("\\url");
-    }
-
-    const chars = [];
-
-    for (let i = 0; i < href.length; i++) {
-      let c = href[i];
-
-      if (c === "~") {
-        c = "\\textasciitilde";
-      }
-
-      chars.push({
-        type: "textord",
-        mode: "text",
-        text: c
-      });
-    }
-
-    const body = {
-      type: "text",
-      mode: parser.mode,
-      font: "\\texttt",
-      body: chars
-    };
-    return {
-      type: "href",
-      mode: parser.mode,
-      href,
-      body: ordargument(body)
-    };
-  }
-});
-
-defineFunction({
-  type: "htmlmathml",
-  names: ["\\html@mathml"],
-  props: {
-    numArgs: 2,
-    allowedInText: true
-  },
-  handler: (_ref, args) => {
-    let parser = _ref.parser;
-    return {
-      type: "htmlmathml",
-      mode: parser.mode,
-      html: ordargument(args[0]),
-      mathml: ordargument(args[1])
-    };
-  },
-  htmlBuilder: (group, options) => {
-    const elements = buildExpression(group.html, options, false);
-    return buildCommon.makeFragment(elements);
-  },
-  mathmlBuilder: (group, options) => {
-    return buildExpressionRow(group.mathml, options);
-  }
-});
-
-const sizeData = function sizeData(str) {
-  if (/^[-+]? *(\d+(\.\d*)?|\.\d+)$/.test(str)) {
-    // str is a number with no unit specified.
-    // default unit is bp, per graphix package.
-    return {
-      number: +str,
-      unit: "bp"
-    };
-  } else {
-    const match = /([-+]?) *(\d+(?:\.\d*)?|\.\d+) *([a-z]{2})/.exec(str);
-
-    if (!match) {
-      throw new ParseError("Invalid size: '" + str + "' in \\includegraphics");
-    }
-
-    const data = {
-      number: +(match[1] + match[2]),
-      // sign + magnitude, cast to number
-      unit: match[3]
-    };
-
-    if (!validUnit(data)) {
-      throw new ParseError("Invalid unit: '" + data.unit + "' in \\includegraphics.");
-    }
-
-    return data;
-  }
-};
-
-defineFunction({
-  type: "includegraphics",
-  names: ["\\includegraphics"],
-  props: {
-    numArgs: 1,
-    numOptionalArgs: 1,
-    argTypes: ["raw", "url"],
-    allowedInText: false
-  },
-  handler: (_ref, args, optArgs) => {
-    let parser = _ref.parser;
-    let width = {
-      number: 0,
-      unit: "em"
-    };
-    let height = {
-      number: 0.9,
-      unit: "em"
-    }; // sorta character sized.
-
-    let totalheight = {
-      number: 0,
-      unit: "em"
-    };
-    let alt = "";
-
-    if (optArgs[0]) {
-      const attributeStr = assertNodeType(optArgs[0], "raw").string; // Parser.js does not parse key/value pairs. We get a string.
-
-      const attributes = attributeStr.split(",");
-
-      for (let i = 0; i < attributes.length; i++) {
-        const keyVal = attributes[i].split("=");
-
-        if (keyVal.length === 2) {
-          const str = keyVal[1].trim();
-
-          switch (keyVal[0].trim()) {
-            case "alt":
-              alt = str;
-              break;
-
-            case "width":
-              width = sizeData(str);
-              break;
-
-            case "height":
-              height = sizeData(str);
-              break;
-
-            case "totalheight":
-              totalheight = sizeData(str);
-              break;
-
-            default:
-              throw new ParseError("Invalid key: '" + keyVal[0] + "' in \\includegraphics.");
-          }
-        }
-      }
-    }
-
-    const src = assertNodeType(args[0], "url").url;
-
-    if (alt === "") {
-      // No alt given. Use the file name. Strip away the path.
-      alt = src;
-      alt = alt.replace(/^.*[\\/]/, '');
-      alt = alt.substring(0, alt.lastIndexOf('.'));
-    }
-
-    if (!parser.settings.isTrusted({
-      command: "\\includegraphics",
-      url: src
-    })) {
-      return parser.formatUnsupportedCmd("\\includegraphics");
-    }
-
-    return {
-      type: "includegraphics",
-      mode: parser.mode,
-      alt: alt,
-      width: width,
-      height: height,
-      totalheight: totalheight,
-      src: src
-    };
-  },
-  htmlBuilder: (group, options) => {
-    const height = calculateSize(group.height, options);
-    let depth = 0;
-
-    if (group.totalheight.number > 0) {
-      depth = calculateSize(group.totalheight, options) - height;
-      depth = Number(depth.toFixed(2));
-    }
-
-    let width = 0;
-
-    if (group.width.number > 0) {
-      width = calculateSize(group.width, options);
-    }
-
-    const style = {
-      height: height + depth + "em"
-    };
-
-    if (width > 0) {
-      style.width = width + "em";
-    }
-
-    if (depth > 0) {
-      style.verticalAlign = -depth + "em";
-    }
-
-    const node = new Img(group.src, group.alt, style);
-    node.height = height;
-    node.depth = depth;
-    return node;
-  },
-  mathmlBuilder: (group, options) => {
-    const node = new mathMLTree.MathNode("mglyph", []);
-    node.setAttribute("alt", group.alt);
-    const height = calculateSize(group.height, options);
-    let depth = 0;
-
-    if (group.totalheight.number > 0) {
-      depth = calculateSize(group.totalheight, options) - height;
-      depth = depth.toFixed(2);
-      node.setAttribute("valign", "-" + depth + "em");
-    }
-
-    node.setAttribute("height", height + depth + "em");
-
-    if (group.width.number > 0) {
-      const width = calculateSize(group.width, options);
-      node.setAttribute("width", width + "em");
-    }
-
-    node.setAttribute("src", group.src);
-    return node;
-  }
-});
-
-// Horizontal spacing commands
-
-defineFunction({
-  type: "kern",
-  names: ["\\kern", "\\mkern", "\\hskip", "\\mskip"],
-  props: {
-    numArgs: 1,
-    argTypes: ["size"],
-    allowedInText: true
-  },
-
-  handler(_ref, args) {
-    let parser = _ref.parser,
-        funcName = _ref.funcName;
-    const size = assertNodeType(args[0], "size");
-
-    if (parser.settings.strict) {
-      const mathFunction = funcName[1] === 'm'; // \mkern, \mskip
-
-      const muUnit = size.value.unit === 'mu';
-
-      if (mathFunction) {
-        if (!muUnit) {
-          parser.settings.reportNonstrict("mathVsTextUnits", `LaTeX's ${funcName} supports only mu units, ` + `not ${size.value.unit} units`);
-        }
-
-        if (parser.mode !== "math") {
-          parser.settings.reportNonstrict("mathVsTextUnits", `LaTeX's ${funcName} works only in math mode`);
-        }
-      } else {
-        // !mathFunction
-        if (muUnit) {
-          parser.settings.reportNonstrict("mathVsTextUnits", `LaTeX's ${funcName} doesn't support mu units`);
-        }
-      }
-    }
-
-    return {
-      type: "kern",
-      mode: parser.mode,
-      dimension: size.value
-    };
-  },
-
-  htmlBuilder(group, options) {
-    return buildCommon.makeGlue(group.dimension, options);
-  },
-
-  mathmlBuilder(group, options) {
-    const dimension = calculateSize(group.dimension, options);
-    return new mathMLTree.SpaceNode(dimension);
-  }
-
-});
-
-// Horizontal overlap functions
-defineFunction({
-  type: "lap",
-  names: ["\\mathllap", "\\mathrlap", "\\mathclap"],
-  props: {
-    numArgs: 1,
-    allowedInText: true
-  },
-  handler: (_ref, args) => {
-    let parser = _ref.parser,
-        funcName = _ref.funcName;
-    const body = args[0];
-    return {
-      type: "lap",
-      mode: parser.mode,
-      alignment: funcName.slice(5),
-      body
-    };
-  },
-  htmlBuilder: (group, options) => {
-    // mathllap, mathrlap, mathclap
-    let inner;
-
-    if (group.alignment === "clap") {
-      // ref: https://www.math.lsu.edu/~aperlis/publications/mathclap/
-      inner = buildCommon.makeSpan([], [buildGroup(group.body, options)]); // wrap, since CSS will center a .clap > .inner > span
-
-      inner = buildCommon.makeSpan(["inner"], [inner], options);
-    } else {
-      inner = buildCommon.makeSpan(["inner"], [buildGroup(group.body, options)]);
-    }
-
-    const fix = buildCommon.makeSpan(["fix"], []);
-    let node = buildCommon.makeSpan([group.alignment], [inner, fix], options); // At this point, we have correctly set horizontal alignment of the
-    // two items involved in the lap.
-    // Next, use a strut to set the height of the HTML bounding box.
-    // Otherwise, a tall argument may be misplaced.
-
-    const strut = buildCommon.makeSpan(["strut"]);
-    strut.style.height = node.height + node.depth + "em";
-    strut.style.verticalAlign = -node.depth + "em";
-    node.children.unshift(strut); // Next, prevent vertical misplacement when next to something tall.
-
-    node = buildCommon.makeVList({
-      positionType: "firstBaseline",
-      children: [{
-        type: "elem",
-        elem: node
-      }]
-    }, options); // Get the horizontal spacing correct relative to adjacent items.
-
-    return buildCommon.makeSpan(["mord"], [node], options);
-  },
-  mathmlBuilder: (group, options) => {
-    // mathllap, mathrlap, mathclap
-    const node = new mathMLTree.MathNode("mpadded", [buildGroup$1(group.body, options)]);
-
-    if (group.alignment !== "rlap") {
-      const offset = group.alignment === "llap" ? "-1" : "-0.5";
-      node.setAttribute("lspace", offset + "width");
-    }
-
-    node.setAttribute("width", "0px");
-    return node;
-  }
-});
-
-defineFunction({
-  type: "styling",
-  names: ["\\(", "$"],
-  props: {
-    numArgs: 0,
-    allowedInText: true,
-    allowedInMath: false
-  },
-
-  handler(_ref, args) {
-    let funcName = _ref.funcName,
-        parser = _ref.parser;
-    const outerMode = parser.mode;
-    parser.switchMode("math");
-    const close = funcName === "\\(" ? "\\)" : "$";
-    const body = parser.parseExpression(false, close);
-    parser.expect(close);
-    parser.switchMode(outerMode);
-    return {
-      type: "styling",
-      mode: parser.mode,
-      style: "text",
-      body
-    };
-  }
-
-}); // Check for extra closing math delimiters
-
-defineFunction({
-  type: "text",
-  // Doesn't matter what this is.
-  names: ["\\)", "\\]"],
-  props: {
-    numArgs: 0,
-    allowedInText: true,
-    allowedInMath: false
-  },
-
-  handler(context, args) {
-    throw new ParseError(`Mismatched ${context.funcName}`);
-  }
-
-});
-
-const chooseMathStyle = (group, options) => {
-  switch (options.style.size) {
-    case Style$1.DISPLAY.size:
-      return group.display;
-
-    case Style$1.TEXT.size:
-      return group.text;
-
-    case Style$1.SCRIPT.size:
-      return group.script;
-
-    case Style$1.SCRIPTSCRIPT.size:
-      return group.scriptscript;
-
-    default:
-      return group.text;
-  }
-};
-
-defineFunction({
-  type: "mathchoice",
-  names: ["\\mathchoice"],
-  props: {
-    numArgs: 4
-  },
-  handler: (_ref, args) => {
-    let parser = _ref.parser;
-    return {
-      type: "mathchoice",
-      mode: parser.mode,
-      display: ordargument(args[0]),
-      text: ordargument(args[1]),
-      script: ordargument(args[2]),
-      scriptscript: ordargument(args[3])
-    };
-  },
-  htmlBuilder: (group, options) => {
-    const body = chooseMathStyle(group, options);
-    const elements = buildExpression(body, options, false);
-    return buildCommon.makeFragment(elements);
-  },
-  mathmlBuilder: (group, options) => {
-    const body = chooseMathStyle(group, options);
-    return buildExpressionRow(body, options);
-  }
-});
-
-// For an operator with limits, assemble the base, sup, and sub into a span.
-const assembleSupSub = (base, supGroup, subGroup, options, style, slant, baseShift) => {
-  // IE 8 clips \int if it is in a display: inline-block. We wrap it
-  // in a new span so it is an inline, and works.
-  base = buildCommon.makeSpan([], [base]);
-  let sub;
-  let sup; // We manually have to handle the superscripts and subscripts. This,
-  // aside from the kern calculations, is copied from supsub.
-
-  if (supGroup) {
-    const elem = buildGroup(supGroup, options.havingStyle(style.sup()), options);
-    sup = {
-      elem,
-      kern: Math.max(options.fontMetrics().bigOpSpacing1, options.fontMetrics().bigOpSpacing3 - elem.depth)
-    };
-  }
-
-  if (subGroup) {
-    const elem = buildGroup(subGroup, options.havingStyle(style.sub()), options);
-    sub = {
-      elem,
-      kern: Math.max(options.fontMetrics().bigOpSpacing2, options.fontMetrics().bigOpSpacing4 - elem.height)
-    };
-  } // Build the final group as a vlist of the possible subscript, base,
-  // and possible superscript.
-
-
-  let finalGroup;
-
-  if (sup && sub) {
-    const bottom = options.fontMetrics().bigOpSpacing5 + sub.elem.height + sub.elem.depth + sub.kern + base.depth + baseShift;
-    finalGroup = buildCommon.makeVList({
-      positionType: "bottom",
-      positionData: bottom,
-      children: [{
-        type: "kern",
-        size: options.fontMetrics().bigOpSpacing5
-      }, {
-        type: "elem",
-        elem: sub.elem,
-        marginLeft: -slant + "em"
-      }, {
-        type: "kern",
-        size: sub.kern
-      }, {
-        type: "elem",
-        elem: base
-      }, {
-        type: "kern",
-        size: sup.kern
-      }, {
-        type: "elem",
-        elem: sup.elem,
-        marginLeft: slant + "em"
-      }, {
-        type: "kern",
-        size: options.fontMetrics().bigOpSpacing5
-      }]
-    }, options);
-  } else if (sub) {
-    const top = base.height - baseShift; // Shift the limits by the slant of the symbol. Note
-    // that we are supposed to shift the limits by 1/2 of the slant,
-    // but since we are centering the limits adding a full slant of
-    // margin will shift by 1/2 that.
-
-    finalGroup = buildCommon.makeVList({
-      positionType: "top",
-      positionData: top,
-      children: [{
-        type: "kern",
-        size: options.fontMetrics().bigOpSpacing5
-      }, {
-        type: "elem",
-        elem: sub.elem,
-        marginLeft: -slant + "em"
-      }, {
-        type: "kern",
-        size: sub.kern
-      }, {
-        type: "elem",
-        elem: base
-      }]
-    }, options);
-  } else if (sup) {
-    const bottom = base.depth + baseShift;
-    finalGroup = buildCommon.makeVList({
-      positionType: "bottom",
-      positionData: bottom,
-      children: [{
-        type: "elem",
-        elem: base
-      }, {
-        type: "kern",
-        size: sup.kern
-      }, {
-        type: "elem",
-        elem: sup.elem,
-        marginLeft: slant + "em"
-      }, {
-        type: "kern",
-        size: options.fontMetrics().bigOpSpacing5
-      }]
-    }, options);
-  } else {
-    // This case probably shouldn't occur (this would mean the
-    // supsub was sending us a group with no superscript or
-    // subscript) but be safe.
-    return base;
-  }
-
-  return buildCommon.makeSpan(["mop", "op-limits"], [finalGroup], options);
-};
-
-// Limits, symbols
-// Most operators have a large successor symbol, but these don't.
-const noSuccessor = ["\\smallint"]; // NOTE: Unlike most `htmlBuilder`s, this one handles not only "op", but also
-// "supsub" since some of them (like \int) can affect super/subscripting.
-
-const htmlBuilder$8 = (grp, options) => {
-  // Operators are handled in the TeXbook pg. 443-444, rule 13(a).
-  let supGroup;
-  let subGroup;
-  let hasLimits = false;
-  let group;
-  const supSub = checkNodeType(grp, "supsub");
-
-  if (supSub) {
-    // If we have limits, supsub will pass us its group to handle. Pull
-    // out the superscript and subscript and set the group to the op in
-    // its base.
-    supGroup = supSub.sup;
-    subGroup = supSub.sub;
-    group = assertNodeType(supSub.base, "op");
-    hasLimits = true;
-  } else {
-    group = assertNodeType(grp, "op");
-  }
-
-  const style = options.style;
-  let large = false;
-
-  if (style.size === Style$1.DISPLAY.size && group.symbol && !utils.contains(noSuccessor, group.name)) {
-    // Most symbol operators get larger in displaystyle (rule 13)
-    large = true;
-  }
-
-  let base;
-
-  if (group.symbol) {
-    // If this is a symbol, create the symbol.
-    const fontName = large ? "Size2-Regular" : "Size1-Regular";
-    let stash = "";
-
-    if (group.name === "\\oiint" || group.name === "\\oiiint") {
-      // No font glyphs yet, so use a glyph w/o the oval.
-      // TODO: When font glyphs are available, delete this code.
-      stash = group.name.substr(1); // $FlowFixMe
-
-      group.name = stash === "oiint" ? "\\iint" : "\\iiint";
-    }
-
-    base = buildCommon.makeSymbol(group.name, fontName, "math", options, ["mop", "op-symbol", large ? "large-op" : "small-op"]);
-
-    if (stash.length > 0) {
-      // We're in \oiint or \oiiint. Overlay the oval.
-      // TODO: When font glyphs are available, delete this code.
-      const italic = base.italic;
-      const oval = buildCommon.staticSvg(stash + "Size" + (large ? "2" : "1"), options);
-      base = buildCommon.makeVList({
-        positionType: "individualShift",
-        children: [{
-          type: "elem",
-          elem: base,
-          shift: 0
-        }, {
-          type: "elem",
-          elem: oval,
-          shift: large ? 0.08 : 0
-        }]
-      }, options); // $FlowFixMe
-
-      group.name = "\\" + stash;
-      base.classes.unshift("mop"); // $FlowFixMe
-
-      base.italic = italic;
-    }
-  } else if (group.body) {
-    // If this is a list, compose that list.
-    const inner = buildExpression(group.body, options, true);
-
-    if (inner.length === 1 && inner[0] instanceof SymbolNode) {
-      base = inner[0];
-      base.classes[0] = "mop"; // replace old mclass
-    } else {
-      base = buildCommon.makeSpan(["mop"], buildCommon.tryCombineChars(inner), options);
-    }
-  } else {
-    // Otherwise, this is a text operator. Build the text from the
-    // operator's name.
-    // TODO(emily): Add a space in the middle of some of these
-    // operators, like \limsup
-    const output = [];
-
-    for (let i = 1; i < group.name.length; i++) {
-      output.push(buildCommon.mathsym(group.name[i], group.mode, options));
-    }
-
-    base = buildCommon.makeSpan(["mop"], output, options);
-  } // If content of op is a single symbol, shift it vertically.
-
-
-  let baseShift = 0;
-  let slant = 0;
-
-  if ((base instanceof SymbolNode || group.name === "\\oiint" || group.name === "\\oiiint") && !group.suppressBaseShift) {
-    // We suppress the shift of the base of \overset and \underset. Otherwise,
-    // shift the symbol so its center lies on the axis (rule 13). It
-    // appears that our fonts have the centers of the symbols already
-    // almost on the axis, so these numbers are very small. Note we
-    // don't actually apply this here, but instead it is used either in
-    // the vlist creation or separately when there are no limits.
-    baseShift = (base.height - base.depth) / 2 - options.fontMetrics().axisHeight; // The slant of the symbol is just its italic correction.
-    // $FlowFixMe
-
-    slant = base.italic;
-  }
-
-  if (hasLimits) {
-    return assembleSupSub(base, supGroup, subGroup, options, style, slant, baseShift);
-  } else {
-    if (baseShift) {
-      base.style.position = "relative";
-      base.style.top = baseShift + "em";
-    }
-
-    return base;
-  }
-};
-
-const mathmlBuilder$8 = (group, options) => {
-  let node;
-
-  if (group.symbol) {
-    // This is a symbol. Just add the symbol.
-    node = new MathNode("mo", [makeText(group.name, group.mode)]);
-
-    if (utils.contains(noSuccessor, group.name)) {
-      node.setAttribute("largeop", "false");
-    }
-  } else if (group.body) {
-    // This is an operator with children. Add them.
-    node = new MathNode("mo", buildExpression$1(group.body, options));
-  } else {
-    // This is a text operator. Add all of the characters from the
-    // operator's name.
-    node = new MathNode("mi", [new TextNode(group.name.slice(1))]); // Append an <mo>&ApplyFunction;</mo>.
-    // ref: https://www.w3.org/TR/REC-MathML/chap3_2.html#sec3.2.4
-
-    const operator = new MathNode("mo", [makeText("\u2061", "text")]);
-
-    if (group.parentIsSupSub) {
-      node = new MathNode("mo", [node, operator]);
-    } else {
-      node = newDocumentFragment([node, operator]);
-    }
-  }
-
-  return node;
-};
-
-const singleCharBigOps = {
-  "\u220F": "\\prod",
-  "\u2210": "\\coprod",
-  "\u2211": "\\sum",
-  "\u22c0": "\\bigwedge",
-  "\u22c1": "\\bigvee",
-  "\u22c2": "\\bigcap",
-  "\u22c3": "\\bigcup",
-  "\u2a00": "\\bigodot",
-  "\u2a01": "\\bigoplus",
-  "\u2a02": "\\bigotimes",
-  "\u2a04": "\\biguplus",
-  "\u2a06": "\\bigsqcup"
-};
-defineFunction({
-  type: "op",
-  names: ["\\coprod", "\\bigvee", "\\bigwedge", "\\biguplus", "\\bigcap", "\\bigcup", "\\intop", "\\prod", "\\sum", "\\bigotimes", "\\bigoplus", "\\bigodot", "\\bigsqcup", "\\smallint", "\u220F", "\u2210", "\u2211", "\u22c0", "\u22c1", "\u22c2", "\u22c3", "\u2a00", "\u2a01", "\u2a02", "\u2a04", "\u2a06"],
-  props: {
-    numArgs: 0
-  },
-  handler: (_ref, args) => {
-    let parser = _ref.parser,
-        funcName = _ref.funcName;
-    let fName = funcName;
-
-    if (fName.length === 1) {
-      fName = singleCharBigOps[fName];
-    }
-
-    return {
-      type: "op",
-      mode: parser.mode,
-      limits: true,
-      parentIsSupSub: false,
-      symbol: true,
-      name: fName
-    };
-  },
-  htmlBuilder: htmlBuilder$8,
-  mathmlBuilder: mathmlBuilder$8
-}); // Note: calling defineFunction with a type that's already been defined only
-// works because the same htmlBuilder and mathmlBuilder are being used.
-
-defineFunction({
-  type: "op",
-  names: ["\\mathop"],
-  props: {
-    numArgs: 1
-  },
-  handler: (_ref2, args) => {
-    let parser = _ref2.parser;
-    const body = args[0];
-    return {
-      type: "op",
-      mode: parser.mode,
-      limits: false,
-      parentIsSupSub: false,
-      symbol: false,
-      body: ordargument(body)
-    };
-  },
-  htmlBuilder: htmlBuilder$8,
-  mathmlBuilder: mathmlBuilder$8
-}); // There are 2 flags for operators; whether they produce limits in
-// displaystyle, and whether they are symbols and should grow in
-// displaystyle. These four groups cover the four possible choices.
-
-const singleCharIntegrals = {
-  "\u222b": "\\int",
-  "\u222c": "\\iint",
-  "\u222d": "\\iiint",
-  "\u222e": "\\oint",
-  "\u222f": "\\oiint",
-  "\u2230": "\\oiiint"
-}; // No limits, not symbols
-
-defineFunction({
-  type: "op",
-  names: ["\\arcsin", "\\arccos", "\\arctan", "\\arctg", "\\arcctg", "\\arg", "\\ch", "\\cos", "\\cosec", "\\cosh", "\\cot", "\\cotg", "\\coth", "\\csc", "\\ctg", "\\cth", "\\deg", "\\dim", "\\exp", "\\hom", "\\ker", "\\lg", "\\ln", "\\log", "\\sec", "\\sin", "\\sinh", "\\sh", "\\tan", "\\tanh", "\\tg", "\\th"],
-  props: {
-    numArgs: 0
-  },
-
-  handler(_ref3) {
-    let parser = _ref3.parser,
-        funcName = _ref3.funcName;
-    return {
-      type: "op",
-      mode: parser.mode,
-      limits: false,
-      parentIsSupSub: false,
-      symbol: false,
-      name: funcName
-    };
-  },
-
-  htmlBuilder: htmlBuilder$8,
-  mathmlBuilder: mathmlBuilder$8
-}); // Limits, not symbols
-
-defineFunction({
-  type: "op",
-  names: ["\\det", "\\gcd", "\\inf", "\\lim", "\\max", "\\min", "\\Pr", "\\sup"],
-  props: {
-    numArgs: 0
-  },
-
-  handler(_ref4) {
-    let parser = _ref4.parser,
-        funcName = _ref4.funcName;
-    return {
-      type: "op",
-      mode: parser.mode,
-      limits: true,
-      parentIsSupSub: false,
-      symbol: false,
-      name: funcName
-    };
-  },
-
-  htmlBuilder: htmlBuilder$8,
-  mathmlBuilder: mathmlBuilder$8
-}); // No limits, symbols
-
-defineFunction({
-  type: "op",
-  names: ["\\int", "\\iint", "\\iiint", "\\oint", "\\oiint", "\\oiiint", "\u222b", "\u222c", "\u222d", "\u222e", "\u222f", "\u2230"],
-  props: {
-    numArgs: 0
-  },
-
-  handler(_ref5) {
-    let parser = _ref5.parser,
-        funcName = _ref5.funcName;
-    let fName = funcName;
-
-    if (fName.length === 1) {
-      fName = singleCharIntegrals[fName];
-    }
-
-    return {
-      type: "op",
-      mode: parser.mode,
-      limits: false,
-      parentIsSupSub: false,
-      symbol: true,
-      name: fName
-    };
-  },
-
-  htmlBuilder: htmlBuilder$8,
-  mathmlBuilder: mathmlBuilder$8
-});
-
-// NOTE: Unlike most `htmlBuilder`s, this one handles not only
-// "operatorname", but also  "supsub" since \operatorname* can
-const htmlBuilder$9 = (grp, options) => {
-  // Operators are handled in the TeXbook pg. 443-444, rule 13(a).
-  let supGroup;
-  let subGroup;
-  let hasLimits = false;
-  let group;
-  const supSub = checkNodeType(grp, "supsub");
-
-  if (supSub) {
-    // If we have limits, supsub will pass us its group to handle. Pull
-    // out the superscript and subscript and set the group to the op in
-    // its base.
-    supGroup = supSub.sup;
-    subGroup = supSub.sub;
-    group = assertNodeType(supSub.base, "operatorname");
-    hasLimits = true;
-  } else {
-    group = assertNodeType(grp, "operatorname");
-  }
-
-  let base;
-
-  if (group.body.length > 0) {
-    const body = group.body.map(child => {
-      // $FlowFixMe: Check if the node has a string `text` property.
-      const childText = child.text;
-
-      if (typeof childText === "string") {
-        return {
-          type: "textord",
-          mode: child.mode,
-          text: childText
-        };
-      } else {
-        return child;
-      }
-    }); // Consolidate function names into symbol characters.
-
-    const expression = buildExpression(body, options.withFont("mathrm"), true);
-
-    for (let i = 0; i < expression.length; i++) {
-      const child = expression[i];
-
-      if (child instanceof SymbolNode) {
-        // Per amsopn package,
-        // change minus to hyphen and \ast to asterisk
-        child.text = child.text.replace(/\u2212/, "-").replace(/\u2217/, "*");
-      }
-    }
-
-    base = buildCommon.makeSpan(["mop"], expression, options);
-  } else {
-    base = buildCommon.makeSpan(["mop"], [], options);
-  }
-
-  if (hasLimits) {
-    return assembleSupSub(base, supGroup, subGroup, options, options.style, 0, 0);
-  } else {
-    return base;
-  }
-};
-
-const mathmlBuilder$9 = (group, options) => {
-  // The steps taken here are similar to the html version.
-  let expression = buildExpression$1(group.body, options.withFont("mathrm")); // Is expression a string or has it something like a fraction?
-
-  let isAllString = true; // default
-
-  for (let i = 0; i < expression.length; i++) {
-    const node = expression[i];
-
-    if (node instanceof mathMLTree.SpaceNode) ; else if (node instanceof mathMLTree.MathNode) {
-      switch (node.type) {
-        case "mi":
-        case "mn":
-        case "ms":
-        case "mspace":
-        case "mtext":
-          break;
-        // Do nothing yet.
-
-        case "mo":
-          {
-            const child = node.children[0];
-
-            if (node.children.length === 1 && child instanceof mathMLTree.TextNode) {
-              child.text = child.text.replace(/\u2212/, "-").replace(/\u2217/, "*");
-            } else {
-              isAllString = false;
-            }
-
-            break;
-          }
-
-        default:
-          isAllString = false;
-      }
-    } else {
-      isAllString = false;
-    }
-  }
-
-  if (isAllString) {
-    // Write a single TextNode instead of multiple nested tags.
-    const word = expression.map(node => node.toText()).join("");
-    expression = [new mathMLTree.TextNode(word)];
-  }
-
-  const identifier = new mathMLTree.MathNode("mi", expression);
-  identifier.setAttribute("mathvariant", "normal"); // \u2061 is the same as &ApplyFunction;
-  // ref: https://www.w3schools.com/charsets/ref_html_entities_a.asp
-
-  const operator = new mathMLTree.MathNode("mo", [makeText("\u2061", "text")]);
-
-  if (group.parentIsSupSub) {
-    return new mathMLTree.MathNode("mo", [identifier, operator]);
-  } else {
-    return mathMLTree.newDocumentFragment([identifier, operator]);
-  }
-}; // \operatorname
-// amsopn.dtx: \mathop{#1\kern\z@\operator@font#3}\newmcodes@
-
-
-defineFunction({
-  type: "operatorname",
-  names: ["\\operatorname", "\\operatorname*"],
-  props: {
-    numArgs: 1
-  },
-  handler: (_ref, args) => {
-    let parser = _ref.parser,
-        funcName = _ref.funcName;
-    const body = args[0];
-    return {
-      type: "operatorname",
-      mode: parser.mode,
-      body: ordargument(body),
-      alwaysHandleSupSub: funcName === "\\operatorname*",
-      limits: false,
-      parentIsSupSub: false
-    };
-  },
-  htmlBuilder: htmlBuilder$9,
-  mathmlBuilder: mathmlBuilder$9
-});
-
-defineFunctionBuilders({
-  type: "ordgroup",
-
-  htmlBuilder(group, options) {
-    if (group.semisimple) {
-      return buildCommon.makeFragment(buildExpression(group.body, options, false));
-    }
-
-    return buildCommon.makeSpan(["mord"], buildExpression(group.body, options, true), options);
-  },
-
-  mathmlBuilder(group, options) {
-    return buildExpressionRow(group.body, options, true);
-  }
-
-});
-
-defineFunction({
-  type: "overline",
-  names: ["\\overline"],
-  props: {
-    numArgs: 1
-  },
-
-  handler(_ref, args) {
-    let parser = _ref.parser;
-    const body = args[0];
-    return {
-      type: "overline",
-      mode: parser.mode,
-      body
-    };
-  },
-
-  htmlBuilder(group, options) {
-    // Overlines are handled in the TeXbook pg 443, Rule 9.
-    // Build the inner group in the cramped style.
-    const innerGroup = buildGroup(group.body, options.havingCrampedStyle()); // Create the line above the body
-
-    const line = buildCommon.makeLineSpan("overline-line", options); // Generate the vlist, with the appropriate kerns
-
-    const defaultRuleThickness = options.fontMetrics().defaultRuleThickness;
-    const vlist = buildCommon.makeVList({
-      positionType: "firstBaseline",
-      children: [{
-        type: "elem",
-        elem: innerGroup
-      }, {
-        type: "kern",
-        size: 3 * defaultRuleThickness
-      }, {
-        type: "elem",
-        elem: line
-      }, {
-        type: "kern",
-        size: defaultRuleThickness
-      }]
-    }, options);
-    return buildCommon.makeSpan(["mord", "overline"], [vlist], options);
-  },
-
-  mathmlBuilder(group, options) {
-    const operator = new mathMLTree.MathNode("mo", [new mathMLTree.TextNode("\u203e")]);
-    operator.setAttribute("stretchy", "true");
-    const node = new mathMLTree.MathNode("mover", [buildGroup$1(group.body, options), operator]);
-    node.setAttribute("accent", "true");
-    return node;
-  }
-
-});
-
-defineFunction({
-  type: "phantom",
-  names: ["\\phantom"],
-  props: {
-    numArgs: 1,
-    allowedInText: true
-  },
-  handler: (_ref, args) => {
-    let parser = _ref.parser;
-    const body = args[0];
-    return {
-      type: "phantom",
-      mode: parser.mode,
-      body: ordargument(body)
-    };
-  },
-  htmlBuilder: (group, options) => {
-    const elements = buildExpression(group.body, options.withPhantom(), false); // \phantom isn't supposed to affect the elements it contains.
-    // See "color" for more details.
-
-    return buildCommon.makeFragment(elements);
-  },
-  mathmlBuilder: (group, options) => {
-    const inner = buildExpression$1(group.body, options);
-    return new mathMLTree.MathNode("mphantom", inner);
-  }
-});
-defineFunction({
-  type: "hphantom",
-  names: ["\\hphantom"],
-  props: {
-    numArgs: 1,
-    allowedInText: true
-  },
-  handler: (_ref2, args) => {
-    let parser = _ref2.parser;
-    const body = args[0];
-    return {
-      type: "hphantom",
-      mode: parser.mode,
-      body
-    };
-  },
-  htmlBuilder: (group, options) => {
-    let node = buildCommon.makeSpan([], [buildGroup(group.body, options.withPhantom())]);
-    node.height = 0;
-    node.depth = 0;
-
-    if (node.children) {
-      for (let i = 0; i < node.children.length; i++) {
-        node.children[i].height = 0;
-        node.children[i].depth = 0;
-      }
-    } // See smash for comment re: use of makeVList
-
-
-    node = buildCommon.makeVList({
-      positionType: "firstBaseline",
-      children: [{
-        type: "elem",
-        elem: node
-      }]
-    }, options); // For spacing, TeX treats \smash as a math group (same spacing as ord).
-
-    return buildCommon.makeSpan(["mord"], [node], options);
-  },
-  mathmlBuilder: (group, options) => {
-    const inner = buildExpression$1(ordargument(group.body), options);
-    const phantom = new mathMLTree.MathNode("mphantom", inner);
-    const node = new mathMLTree.MathNode("mpadded", [phantom]);
-    node.setAttribute("height", "0px");
-    node.setAttribute("depth", "0px");
-    return node;
-  }
-});
-defineFunction({
-  type: "vphantom",
-  names: ["\\vphantom"],
-  props: {
-    numArgs: 1,
-    allowedInText: true
-  },
-  handler: (_ref3, args) => {
-    let parser = _ref3.parser;
-    const body = args[0];
-    return {
-      type: "vphantom",
-      mode: parser.mode,
-      body
-    };
-  },
-  htmlBuilder: (group, options) => {
-    const inner = buildCommon.makeSpan(["inner"], [buildGroup(group.body, options.withPhantom())]);
-    const fix = buildCommon.makeSpan(["fix"], []);
-    return buildCommon.makeSpan(["mord", "rlap"], [inner, fix], options);
-  },
-  mathmlBuilder: (group, options) => {
-    const inner = buildExpression$1(ordargument(group.body), options);
-    const phantom = new mathMLTree.MathNode("mphantom", inner);
-    const node = new mathMLTree.MathNode("mpadded", [phantom]);
-    node.setAttribute("width", "0px");
-    return node;
-  }
-});
-
-defineFunction({
-  type: "raisebox",
-  names: ["\\raisebox"],
-  props: {
-    numArgs: 2,
-    argTypes: ["size", "hbox"],
-    allowedInText: true
-  },
-
-  handler(_ref, args) {
-    let parser = _ref.parser;
-    const amount = assertNodeType(args[0], "size").value;
-    const body = args[1];
-    return {
-      type: "raisebox",
-      mode: parser.mode,
-      dy: amount,
-      body
-    };
-  },
-
-  htmlBuilder(group, options) {
-    const body = buildGroup(group.body, options);
-    const dy = calculateSize(group.dy, options);
-    return buildCommon.makeVList({
-      positionType: "shift",
-      positionData: -dy,
-      children: [{
-        type: "elem",
-        elem: body
-      }]
-    }, options);
-  },
-
-  mathmlBuilder(group, options) {
-    const node = new mathMLTree.MathNode("mpadded", [buildGroup$1(group.body, options)]);
-    const dy = group.dy.number + group.dy.unit;
-    node.setAttribute("voffset", dy);
-    return node;
-  }
-
-});
-
-defineFunction({
-  type: "rule",
-  names: ["\\rule"],
-  props: {
-    numArgs: 2,
-    numOptionalArgs: 1,
-    argTypes: ["size", "size", "size"]
-  },
-
-  handler(_ref, args, optArgs) {
-    let parser = _ref.parser;
-    const shift = optArgs[0];
-    const width = assertNodeType(args[0], "size");
-    const height = assertNodeType(args[1], "size");
-    return {
-      type: "rule",
-      mode: parser.mode,
-      shift: shift && assertNodeType(shift, "size").value,
-      width: width.value,
-      height: height.value
-    };
-  },
-
-  htmlBuilder(group, options) {
-    // Make an empty span for the rule
-    const rule = buildCommon.makeSpan(["mord", "rule"], [], options); // Calculate the shift, width, and height of the rule, and account for units
-
-    const width = calculateSize(group.width, options);
-    const height = calculateSize(group.height, options);
-    const shift = group.shift ? calculateSize(group.shift, options) : 0; // Style the rule to the right size
-
-    rule.style.borderRightWidth = width + "em";
-    rule.style.borderTopWidth = height + "em";
-    rule.style.bottom = shift + "em"; // Record the height and width
-
-    rule.width = width;
-    rule.height = height + shift;
-    rule.depth = -shift; // Font size is the number large enough that the browser will
-    // reserve at least `absHeight` space above the baseline.
-    // The 1.125 factor was empirically determined
-
-    rule.maxFontSize = height * 1.125 * options.sizeMultiplier;
-    return rule;
-  },
-
-  mathmlBuilder(group, options) {
-    const width = calculateSize(group.width, options);
-    const height = calculateSize(group.height, options);
-    const shift = group.shift ? calculateSize(group.shift, options) : 0;
-    const color = options.color && options.getColor() || "black";
-    const rule = new mathMLTree.MathNode("mspace");
-    rule.setAttribute("mathbackground", color);
-    rule.setAttribute("width", width + "em");
-    rule.setAttribute("height", height + "em");
-    const wrapper = new mathMLTree.MathNode("mpadded", [rule]);
-
-    if (shift >= 0) {
-      wrapper.setAttribute("height", "+" + shift + "em");
-    } else {
-      wrapper.setAttribute("height", shift + "em");
-      wrapper.setAttribute("depth", "+" + -shift + "em");
-    }
-
-    wrapper.setAttribute("voffset", shift + "em");
-    return wrapper;
-  }
-
-});
-
-function sizingGroup(value, options, baseOptions) {
-  const inner = buildExpression(value, options, false);
-  const multiplier = options.sizeMultiplier / baseOptions.sizeMultiplier; // Add size-resetting classes to the inner list and set maxFontSize
-  // manually. Handle nested size changes.
-
-  for (let i = 0; i < inner.length; i++) {
-    const pos = inner[i].classes.indexOf("sizing");
-
-    if (pos < 0) {
-      Array.prototype.push.apply(inner[i].classes, options.sizingClasses(baseOptions));
-    } else if (inner[i].classes[pos + 1] === "reset-size" + options.size) {
-      // This is a nested size change: e.g., inner[i] is the "b" in
-      // `\Huge a \small b`. Override the old size (the `reset-` class)
-      // but not the new size.
-      inner[i].classes[pos + 1] = "reset-size" + baseOptions.size;
-    }
-
-    inner[i].height *= multiplier;
-    inner[i].depth *= multiplier;
-  }
-
-  return buildCommon.makeFragment(inner);
-}
-const sizeFuncs = ["\\tiny", "\\sixptsize", "\\scriptsize", "\\footnotesize", "\\small", "\\normalsize", "\\large", "\\Large", "\\LARGE", "\\huge", "\\Huge"];
-const htmlBuilder$a = (group, options) => {
-  // Handle sizing operators like \Huge. Real TeX doesn't actually allow
-  // these functions inside of math expressions, so we do some special
-  // handling.
-  const newOptions = options.havingSize(group.size);
-  return sizingGroup(group.body, newOptions, options);
-};
-defineFunction({
-  type: "sizing",
-  names: sizeFuncs,
-  props: {
-    numArgs: 0,
-    allowedInText: true
-  },
-  handler: (_ref, args) => {
-    let breakOnTokenText = _ref.breakOnTokenText,
-        funcName = _ref.funcName,
-        parser = _ref.parser;
-    const body = parser.parseExpression(false, breakOnTokenText);
-    return {
-      type: "sizing",
-      mode: parser.mode,
-      // Figure out what size to use based on the list of functions above
-      size: sizeFuncs.indexOf(funcName) + 1,
-      body
-    };
-  },
-  htmlBuilder: htmlBuilder$a,
-  mathmlBuilder: (group, options) => {
-    const newOptions = options.havingSize(group.size);
-    const inner = buildExpression$1(group.body, newOptions);
-    const node = new mathMLTree.MathNode("mstyle", inner); // TODO(emily): This doesn't produce the correct size for nested size
-    // changes, because we don't keep state of what style we're currently
-    // in, so we can't reset the size to normal before changing it.  Now
-    // that we're passing an options parameter we should be able to fix
-    // this.
-
-    node.setAttribute("mathsize", newOptions.sizeMultiplier + "em");
-    return node;
-  }
-});
-
-// smash, with optional [tb], as in AMS
-defineFunction({
-  type: "smash",
-  names: ["\\smash"],
-  props: {
-    numArgs: 1,
-    numOptionalArgs: 1,
-    allowedInText: true
-  },
-  handler: (_ref, args, optArgs) => {
-    let parser = _ref.parser;
-    let smashHeight = false;
-    let smashDepth = false;
-    const tbArg = optArgs[0] && assertNodeType(optArgs[0], "ordgroup");
-
-    if (tbArg) {
-      // Optional [tb] argument is engaged.
-      // ref: amsmath: \renewcommand{\smash}[1][tb]{%
-      //               def\mb@t{\ht}\def\mb@b{\dp}\def\mb@tb{\ht\z@\z@\dp}%
-      let letter = "";
-
-      for (let i = 0; i < tbArg.body.length; ++i) {
-        const node = tbArg.body[i]; // $FlowFixMe: Not every node type has a `text` property.
-
-        letter = node.text;
-
-        if (letter === "t") {
-          smashHeight = true;
-        } else if (letter === "b") {
-          smashDepth = true;
-        } else {
-          smashHeight = false;
-          smashDepth = false;
-          break;
-        }
-      }
-    } else {
-      smashHeight = true;
-      smashDepth = true;
-    }
-
-    const body = args[0];
-    return {
-      type: "smash",
-      mode: parser.mode,
-      body,
-      smashHeight,
-      smashDepth
-    };
-  },
-  htmlBuilder: (group, options) => {
-    const node = buildCommon.makeSpan([], [buildGroup(group.body, options)]);
-
-    if (!group.smashHeight && !group.smashDepth) {
-      return node;
-    }
-
-    if (group.smashHeight) {
-      node.height = 0; // In order to influence makeVList, we have to reset the children.
-
-      if (node.children) {
-        for (let i = 0; i < node.children.length; i++) {
-          node.children[i].height = 0;
-        }
-      }
-    }
-
-    if (group.smashDepth) {
-      node.depth = 0;
-
-      if (node.children) {
-        for (let i = 0; i < node.children.length; i++) {
-          node.children[i].depth = 0;
-        }
-      }
-    } // At this point, we've reset the TeX-like height and depth values.
-    // But the span still has an HTML line height.
-    // makeVList applies "display: table-cell", which prevents the browser
-    // from acting on that line height. So we'll call makeVList now.
-
-
-    const smashedNode = buildCommon.makeVList({
-      positionType: "firstBaseline",
-      children: [{
-        type: "elem",
-        elem: node
-      }]
-    }, options); // For spacing, TeX treats \hphantom as a math group (same spacing as ord).
-
-    return buildCommon.makeSpan(["mord"], [smashedNode], options);
-  },
-  mathmlBuilder: (group, options) => {
-    const node = new mathMLTree.MathNode("mpadded", [buildGroup$1(group.body, options)]);
-
-    if (group.smashHeight) {
-      node.setAttribute("height", "0px");
-    }
-
-    if (group.smashDepth) {
-      node.setAttribute("depth", "0px");
-    }
-
-    return node;
-  }
-});
-
-defineFunction({
-  type: "sqrt",
-  names: ["\\sqrt"],
-  props: {
-    numArgs: 1,
-    numOptionalArgs: 1
-  },
-
-  handler(_ref, args, optArgs) {
-    let parser = _ref.parser;
-    const index = optArgs[0];
-    const body = args[0];
-    return {
-      type: "sqrt",
-      mode: parser.mode,
-      body,
-      index
-    };
-  },
-
-  htmlBuilder(group, options) {
-    // Square roots are handled in the TeXbook pg. 443, Rule 11.
-    // First, we do the same steps as in overline to build the inner group
-    // and line
-    let inner = buildGroup(group.body, options.havingCrampedStyle());
-
-    if (inner.height === 0) {
-      // Render a small surd.
-      inner.height = options.fontMetrics().xHeight;
-    } // Some groups can return document fragments.  Handle those by wrapping
-    // them in a span.
-
-
-    inner = buildCommon.wrapFragment(inner, options); // Calculate the minimum size for the \surd delimiter
-
-    const metrics = options.fontMetrics();
-    const theta = metrics.defaultRuleThickness;
-    let phi = theta;
-
-    if (options.style.id < Style$1.TEXT.id) {
-      phi = options.fontMetrics().xHeight;
-    } // Calculate the clearance between the body and line
-
-
-    let lineClearance = theta + phi / 4;
-    const minDelimiterHeight = inner.height + inner.depth + lineClearance + theta; // Create a sqrt SVG of the required minimum size
-
-    const _delimiter$sqrtImage = delimiter.sqrtImage(minDelimiterHeight, options),
-          img = _delimiter$sqrtImage.span,
-          ruleWidth = _delimiter$sqrtImage.ruleWidth,
-          advanceWidth = _delimiter$sqrtImage.advanceWidth;
-
-    const delimDepth = img.height - ruleWidth; // Adjust the clearance based on the delimiter size
-
-    if (delimDepth > inner.height + inner.depth + lineClearance) {
-      lineClearance = (lineClearance + delimDepth - inner.height - inner.depth) / 2;
-    } // Shift the sqrt image
-
-
-    const imgShift = img.height - inner.height - lineClearance - ruleWidth;
-    inner.style.paddingLeft = advanceWidth + "em"; // Overlay the image and the argument.
-
-    const body = buildCommon.makeVList({
-      positionType: "firstBaseline",
-      children: [{
-        type: "elem",
-        elem: inner,
-        wrapperClasses: ["svg-align"]
-      }, {
-        type: "kern",
-        size: -(inner.height + imgShift)
-      }, {
-        type: "elem",
-        elem: img
-      }, {
-        type: "kern",
-        size: ruleWidth
-      }]
-    }, options);
-
-    if (!group.index) {
-      return buildCommon.makeSpan(["mord", "sqrt"], [body], options);
-    } else {
-      // Handle the optional root index
-      // The index is always in scriptscript style
-      const newOptions = options.havingStyle(Style$1.SCRIPTSCRIPT);
-      const rootm = buildGroup(group.index, newOptions, options); // The amount the index is shifted by. This is taken from the TeX
-      // source, in the definition of `\r@@t`.
-
-      const toShift = 0.6 * (body.height - body.depth); // Build a VList with the superscript shifted up correctly
-
-      const rootVList = buildCommon.makeVList({
-        positionType: "shift",
-        positionData: -toShift,
-        children: [{
-          type: "elem",
-          elem: rootm
-        }]
-      }, options); // Add a class surrounding it so we can add on the appropriate
-      // kerning
-
-      const rootVListWrap = buildCommon.makeSpan(["root"], [rootVList]);
-      return buildCommon.makeSpan(["mord", "sqrt"], [rootVListWrap, body], options);
-    }
-  },
-
-  mathmlBuilder(group, options) {
-    const body = group.body,
-          index = group.index;
-    return index ? new mathMLTree.MathNode("mroot", [buildGroup$1(body, options), buildGroup$1(index, options)]) : new mathMLTree.MathNode("msqrt", [buildGroup$1(body, options)]);
-  }
-
-});
-
-const styleMap$1 = {
-  "display": Style$1.DISPLAY,
-  "text": Style$1.TEXT,
-  "script": Style$1.SCRIPT,
-  "scriptscript": Style$1.SCRIPTSCRIPT
-};
-defineFunction({
-  type: "styling",
-  names: ["\\displaystyle", "\\textstyle", "\\scriptstyle", "\\scriptscriptstyle"],
-  props: {
-    numArgs: 0,
-    allowedInText: true
-  },
-
-  handler(_ref, args) {
-    let breakOnTokenText = _ref.breakOnTokenText,
-        funcName = _ref.funcName,
-        parser = _ref.parser;
-    // parse out the implicit body
-    const body = parser.parseExpression(true, breakOnTokenText); // TODO: Refactor to avoid duplicating styleMap in multiple places (e.g.
-    // here and in buildHTML and de-dupe the enumeration of all the styles).
-    // $FlowFixMe: The names above exactly match the styles.
-
-    const style = funcName.slice(1, funcName.length - 5);
-    return {
-      type: "styling",
-      mode: parser.mode,
-      // Figure out what style to use by pulling out the style from
-      // the function name
-      style,
-      body
-    };
-  },
-
-  htmlBuilder(group, options) {
-    // Style changes are handled in the TeXbook on pg. 442, Rule 3.
-    const newStyle = styleMap$1[group.style];
-    const newOptions = options.havingStyle(newStyle).withFont('');
-    return sizingGroup(group.body, newOptions, options);
-  },
-
-  mathmlBuilder(group, options) {
-    // Figure out what style we're changing to.
-    const newStyle = styleMap$1[group.style];
-    const newOptions = options.havingStyle(newStyle);
-    const inner = buildExpression$1(group.body, newOptions);
-    const node = new mathMLTree.MathNode("mstyle", inner);
-    const styleAttributes = {
-      "display": ["0", "true"],
-      "text": ["0", "false"],
-      "script": ["1", "false"],
-      "scriptscript": ["2", "false"]
-    };
-    const attr = styleAttributes[group.style];
-    node.setAttribute("scriptlevel", attr[0]);
-    node.setAttribute("displaystyle", attr[1]);
-    return node;
-  }
-
-});
-
-/**
- * Sometimes, groups perform special rules when they have superscripts or
- * subscripts attached to them. This function lets the `supsub` group know that
- * Sometimes, groups perform special rules when they have superscripts or
- * its inner element should handle the superscripts and subscripts instead of
- * handling them itself.
- */
-const htmlBuilderDelegate = function htmlBuilderDelegate(group, options) {
-  const base = group.base;
-
-  if (!base) {
-    return null;
-  } else if (base.type === "op") {
-    // Operators handle supsubs differently when they have limits
-    // (e.g. `\displaystyle\sum_2^3`)
-    const delegate = base.limits && (options.style.size === Style$1.DISPLAY.size || base.alwaysHandleSupSub);
-    return delegate ? htmlBuilder$8 : null;
-  } else if (base.type === "operatorname") {
-    const delegate = base.alwaysHandleSupSub && (options.style.size === Style$1.DISPLAY.size || base.limits);
-    return delegate ? htmlBuilder$9 : null;
-  } else if (base.type === "accent") {
-    return utils.isCharacterBox(base.base) ? htmlBuilder : null;
-  } else if (base.type === "horizBrace") {
-    const isSup = !group.sub;
-    return isSup === base.isOver ? htmlBuilder$7 : null;
-  } else {
-    return null;
-  }
-}; // Super scripts and subscripts, whose precise placement can depend on other
-// functions that precede them.
-
-
-defineFunctionBuilders({
-  type: "supsub",
-
-  htmlBuilder(group, options) {
-    // Superscript and subscripts are handled in the TeXbook on page
-    // 445-446, rules 18(a-f).
-    // Here is where we defer to the inner group if it should handle
-    // superscripts and subscripts itself.
-    const builderDelegate = htmlBuilderDelegate(group, options);
-
-    if (builderDelegate) {
-      return builderDelegate(group, options);
-    }
-
-    const valueBase = group.base,
-          valueSup = group.sup,
-          valueSub = group.sub;
-    const base = buildGroup(valueBase, options);
-    let supm;
-    let subm;
-    const metrics = options.fontMetrics(); // Rule 18a
-
-    let supShift = 0;
-    let subShift = 0;
-    const isCharacterBox = valueBase && utils.isCharacterBox(valueBase);
-
-    if (valueSup) {
-      const newOptions = options.havingStyle(options.style.sup());
-      supm = buildGroup(valueSup, newOptions, options);
-
-      if (!isCharacterBox) {
-        supShift = base.height - newOptions.fontMetrics().supDrop * newOptions.sizeMultiplier / options.sizeMultiplier;
-      }
-    }
-
-    if (valueSub) {
-      const newOptions = options.havingStyle(options.style.sub());
-      subm = buildGroup(valueSub, newOptions, options);
-
-      if (!isCharacterBox) {
-        subShift = base.depth + newOptions.fontMetrics().subDrop * newOptions.sizeMultiplier / options.sizeMultiplier;
-      }
-    } // Rule 18c
-
-
-    let minSupShift;
-
-    if (options.style === Style$1.DISPLAY) {
-      minSupShift = metrics.sup1;
-    } else if (options.style.cramped) {
-      minSupShift = metrics.sup3;
-    } else {
-      minSupShift = metrics.sup2;
-    } // scriptspace is a font-size-independent size, so scale it
-    // appropriately for use as the marginRight.
-
-
-    const multiplier = options.sizeMultiplier;
-    const marginRight = 0.5 / metrics.ptPerEm / multiplier + "em";
-    let marginLeft = null;
-
-    if (subm) {
-      // Subscripts shouldn't be shifted by the base's italic correction.
-      // Account for that by shifting the subscript back the appropriate
-      // amount. Note we only do this when the base is a single symbol.
-      const isOiint = group.base && group.base.type === "op" && group.base.name && (group.base.name === "\\oiint" || group.base.name === "\\oiiint");
-
-      if (base instanceof SymbolNode || isOiint) {
-        // $FlowFixMe
-        marginLeft = -base.italic + "em";
-      }
-    }
-
-    let supsub;
-
-    if (supm && subm) {
-      supShift = Math.max(supShift, minSupShift, supm.depth + 0.25 * metrics.xHeight);
-      subShift = Math.max(subShift, metrics.sub2);
-      const ruleWidth = metrics.defaultRuleThickness; // Rule 18e
-
-      const maxWidth = 4 * ruleWidth;
-
-      if (supShift - supm.depth - (subm.height - subShift) < maxWidth) {
-        subShift = maxWidth - (supShift - supm.depth) + subm.height;
-        const psi = 0.8 * metrics.xHeight - (supShift - supm.depth);
-
-        if (psi > 0) {
-          supShift += psi;
-          subShift -= psi;
-        }
-      }
-
-      const vlistElem = [{
-        type: "elem",
-        elem: subm,
-        shift: subShift,
-        marginRight,
-        marginLeft
-      }, {
-        type: "elem",
-        elem: supm,
-        shift: -supShift,
-        marginRight
-      }];
-      supsub = buildCommon.makeVList({
-        positionType: "individualShift",
-        children: vlistElem
-      }, options);
-    } else if (subm) {
-      // Rule 18b
-      subShift = Math.max(subShift, metrics.sub1, subm.height - 0.8 * metrics.xHeight);
-      const vlistElem = [{
-        type: "elem",
-        elem: subm,
-        marginLeft,
-        marginRight
-      }];
-      supsub = buildCommon.makeVList({
-        positionType: "shift",
-        positionData: subShift,
-        children: vlistElem
-      }, options);
-    } else if (supm) {
-      // Rule 18c, d
-      supShift = Math.max(supShift, minSupShift, supm.depth + 0.25 * metrics.xHeight);
-      supsub = buildCommon.makeVList({
-        positionType: "shift",
-        positionData: -supShift,
-        children: [{
-          type: "elem",
-          elem: supm,
-          marginRight
-        }]
-      }, options);
-    } else {
-      throw new Error("supsub must have either sup or sub.");
-    } // Wrap the supsub vlist in a span.msupsub to reset text-align.
-
-
-    const mclass = getTypeOfDomTree(base, "right") || "mord";
-    return buildCommon.makeSpan([mclass], [base, buildCommon.makeSpan(["msupsub"], [supsub])], options);
-  },
-
-  mathmlBuilder(group, options) {
-    // Is the inner group a relevant horizonal brace?
-    let isBrace = false;
-    let isOver;
-    let isSup;
-    const horizBrace = checkNodeType(group.base, "horizBrace");
-
-    if (horizBrace) {
-      isSup = !!group.sup;
-
-      if (isSup === horizBrace.isOver) {
-        isBrace = true;
-        isOver = horizBrace.isOver;
-      }
-    }
-
-    if (group.base && (group.base.type === "op" || group.base.type === "operatorname")) {
-      group.base.parentIsSupSub = true;
-    }
-
-    const children = [buildGroup$1(group.base, options)];
-
-    if (group.sub) {
-      children.push(buildGroup$1(group.sub, options));
-    }
-
-    if (group.sup) {
-      children.push(buildGroup$1(group.sup, options));
-    }
-
-    let nodeType;
-
-    if (isBrace) {
-      nodeType = isOver ? "mover" : "munder";
-    } else if (!group.sub) {
-      const base = group.base;
-
-      if (base && base.type === "op" && base.limits && (options.style === Style$1.DISPLAY || base.alwaysHandleSupSub)) {
-        nodeType = "mover";
-      } else if (base && base.type === "operatorname" && base.alwaysHandleSupSub && (base.limits || options.style === Style$1.DISPLAY)) {
-        nodeType = "mover";
-      } else {
-        nodeType = "msup";
-      }
-    } else if (!group.sup) {
-      const base = group.base;
-
-      if (base && base.type === "op" && base.limits && (options.style === Style$1.DISPLAY || base.alwaysHandleSupSub)) {
-        nodeType = "munder";
-      } else if (base && base.type === "operatorname" && base.alwaysHandleSupSub && (base.limits || options.style === Style$1.DISPLAY)) {
-        nodeType = "munder";
-      } else {
-        nodeType = "msub";
-      }
-    } else {
-      const base = group.base;
-
-      if (base && base.type === "op" && base.limits && options.style === Style$1.DISPLAY) {
-        nodeType = "munderover";
-      } else if (base && base.type === "operatorname" && base.alwaysHandleSupSub && (options.style === Style$1.DISPLAY || base.limits)) {
-        nodeType = "munderover";
-      } else {
-        nodeType = "msubsup";
-      }
-    }
-
-    const node = new mathMLTree.MathNode(nodeType, children);
-    return node;
-  }
-
-});
-
-defineFunctionBuilders({
-  type: "atom",
-
-  htmlBuilder(group, options) {
-    return buildCommon.mathsym(group.text, group.mode, options, ["m" + group.family]);
-  },
-
-  mathmlBuilder(group, options) {
-    const node = new mathMLTree.MathNode("mo", [makeText(group.text, group.mode)]);
-
-    if (group.family === "bin") {
-      const variant = getVariant(group, options);
-
-      if (variant === "bold-italic") {
-        node.setAttribute("mathvariant", variant);
-      }
-    } else if (group.family === "punct") {
-      node.setAttribute("separator", "true");
-    } else if (group.family === "open" || group.family === "close") {
-      // Delims built here should not stretch vertically.
-      // See delimsizing.js for stretchy delims.
-      node.setAttribute("stretchy", "false");
-    }
-
-    return node;
-  }
-
-});
-
-// "mathord" and "textord" ParseNodes created in Parser.js from symbol Groups in
-const defaultVariant = {
-  "mi": "italic",
-  "mn": "normal",
-  "mtext": "normal"
-};
-defineFunctionBuilders({
-  type: "mathord",
-
-  htmlBuilder(group, options) {
-    return buildCommon.makeOrd(group, options, "mathord");
-  },
-
-  mathmlBuilder(group, options) {
-    const node = new mathMLTree.MathNode("mi", [makeText(group.text, group.mode, options)]);
-    const variant = getVariant(group, options) || "italic";
-
-    if (variant !== defaultVariant[node.type]) {
-      node.setAttribute("mathvariant", variant);
-    }
-
-    return node;
-  }
-
-});
-defineFunctionBuilders({
-  type: "textord",
-
-  htmlBuilder(group, options) {
-    return buildCommon.makeOrd(group, options, "textord");
-  },
-
-  mathmlBuilder(group, options) {
-    const text = makeText(group.text, group.mode, options);
-    const variant = getVariant(group, options) || "normal";
-    let node;
-
-    if (group.mode === 'text') {
-      node = new mathMLTree.MathNode("mtext", [text]);
-    } else if (/[0-9]/.test(group.text)) {
-      // TODO(kevinb) merge adjacent <mn> nodes
-      // do it as a post processing step
-      node = new mathMLTree.MathNode("mn", [text]);
-    } else if (group.text === "\\prime") {
-      node = new mathMLTree.MathNode("mo", [text]);
-    } else {
-      node = new mathMLTree.MathNode("mi", [text]);
-    }
-
-    if (variant !== defaultVariant[node.type]) {
-      node.setAttribute("mathvariant", variant);
-    }
-
-    return node;
-  }
-
-});
-
-const cssSpace = {
-  "\\nobreak": "nobreak",
-  "\\allowbreak": "allowbreak"
-}; // A lookup table to determine whether a spacing function/symbol should be
-// treated like a regular space character.  If a symbol or command is a key
-// in this table, then it should be a regular space character.  Furthermore,
-// the associated value may have a `className` specifying an extra CSS class
-// to add to the created `span`.
-
-const regularSpace = {
-  " ": {},
-  "\\ ": {},
-  "~": {
-    className: "nobreak"
-  },
-  "\\space": {},
-  "\\nobreakspace": {
-    className: "nobreak"
-  }
-}; // ParseNode<"spacing"> created in Parser.js from the "spacing" symbol Groups in
-// src/symbols.js.
-
-defineFunctionBuilders({
-  type: "spacing",
-
-  htmlBuilder(group, options) {
-    if (regularSpace.hasOwnProperty(group.text)) {
-      const className = regularSpace[group.text].className || ""; // Spaces are generated by adding an actual space. Each of these
-      // things has an entry in the symbols table, so these will be turned
-      // into appropriate outputs.
-
-      if (group.mode === "text") {
-        const ord = buildCommon.makeOrd(group, options, "textord");
-        ord.classes.push(className);
-        return ord;
-      } else {
-        return buildCommon.makeSpan(["mspace", className], [buildCommon.mathsym(group.text, group.mode, options)], options);
-      }
-    } else if (cssSpace.hasOwnProperty(group.text)) {
-      // Spaces based on just a CSS class.
-      return buildCommon.makeSpan(["mspace", cssSpace[group.text]], [], options);
-    } else {
-      throw new ParseError(`Unknown type of space "${group.text}"`);
-    }
-  },
-
-  mathmlBuilder(group, options) {
-    let node;
-
-    if (regularSpace.hasOwnProperty(group.text)) {
-      node = new mathMLTree.MathNode("mtext", [new mathMLTree.TextNode("\u00a0")]);
-    } else if (cssSpace.hasOwnProperty(group.text)) {
-      // CSS-based MathML spaces (\nobreak, \allowbreak) are ignored
-      return new mathMLTree.MathNode("mspace");
-    } else {
-      throw new ParseError(`Unknown type of space "${group.text}"`);
-    }
-
-    return node;
-  }
-
-});
-
-const pad = () => {
-  const padNode = new mathMLTree.MathNode("mtd", []);
-  padNode.setAttribute("width", "50%");
-  return padNode;
-};
-
-defineFunctionBuilders({
-  type: "tag",
-
-  mathmlBuilder(group, options) {
-    const table = new mathMLTree.MathNode("mtable", [new mathMLTree.MathNode("mtr", [pad(), new mathMLTree.MathNode("mtd", [buildExpressionRow(group.body, options)]), pad(), new mathMLTree.MathNode("mtd", [buildExpressionRow(group.tag, options)])])]);
-    table.setAttribute("width", "100%");
-    return table; // TODO: Left-aligned tags.
-    // Currently, the group and options passed here do not contain
-    // enough info to set tag alignment. `leqno` is in Settings but it is
-    // not passed to Options. On the HTML side, leqno is
-    // set by a CSS class applied in buildTree.js. That would have worked
-    // in MathML if browsers supported <mlabeledtr>. Since they don't, we
-    // need to rewrite the way this function is called.
-  }
-
-});
-
-const textFontFamilies = {
-  "\\text": undefined,
-  "\\textrm": "textrm",
-  "\\textsf": "textsf",
-  "\\texttt": "texttt",
-  "\\textnormal": "textrm"
-};
-const textFontWeights = {
-  "\\textbf": "textbf",
-  "\\textmd": "textmd"
-};
-const textFontShapes = {
-  "\\textit": "textit",
-  "\\textup": "textup"
-};
-
-const optionsWithFont = (group, options) => {
-  const font = group.font; // Checks if the argument is a font family or a font style.
-
-  if (!font) {
-    return options;
-  } else if (textFontFamilies[font]) {
-    return options.withTextFontFamily(textFontFamilies[font]);
-  } else if (textFontWeights[font]) {
-    return options.withTextFontWeight(textFontWeights[font]);
-  } else {
-    return options.withTextFontShape(textFontShapes[font]);
-  }
-};
-
-defineFunction({
-  type: "text",
-  names: [// Font families
-  "\\text", "\\textrm", "\\textsf", "\\texttt", "\\textnormal", // Font weights
-  "\\textbf", "\\textmd", // Font Shapes
-  "\\textit", "\\textup"],
-  props: {
-    numArgs: 1,
-    argTypes: ["text"],
-    greediness: 2,
-    allowedInText: true
-  },
-
-  handler(_ref, args) {
-    let parser = _ref.parser,
-        funcName = _ref.funcName;
-    const body = args[0];
-    return {
-      type: "text",
-      mode: parser.mode,
-      body: ordargument(body),
-      font: funcName
-    };
-  },
-
-  htmlBuilder(group, options) {
-    const newOptions = optionsWithFont(group, options);
-    const inner = buildExpression(group.body, newOptions, true);
-    return buildCommon.makeSpan(["mord", "text"], buildCommon.tryCombineChars(inner), newOptions);
-  },
-
-  mathmlBuilder(group, options) {
-    const newOptions = optionsWithFont(group, options);
-    return buildExpressionRow(group.body, newOptions);
-  }
-
-});
-
-defineFunction({
-  type: "underline",
-  names: ["\\underline"],
-  props: {
-    numArgs: 1,
-    allowedInText: true
-  },
-
-  handler(_ref, args) {
-    let parser = _ref.parser;
-    return {
-      type: "underline",
-      mode: parser.mode,
-      body: args[0]
-    };
-  },
-
-  htmlBuilder(group, options) {
-    // Underlines are handled in the TeXbook pg 443, Rule 10.
-    // Build the inner group.
-    const innerGroup = buildGroup(group.body, options); // Create the line to go below the body
-
-    const line = buildCommon.makeLineSpan("underline-line", options); // Generate the vlist, with the appropriate kerns
-
-    const defaultRuleThickness = options.fontMetrics().defaultRuleThickness;
-    const vlist = buildCommon.makeVList({
-      positionType: "top",
-      positionData: innerGroup.height,
-      children: [{
-        type: "kern",
-        size: defaultRuleThickness
-      }, {
-        type: "elem",
-        elem: line
-      }, {
-        type: "kern",
-        size: 3 * defaultRuleThickness
-      }, {
-        type: "elem",
-        elem: innerGroup
-      }]
-    }, options);
-    return buildCommon.makeSpan(["mord", "underline"], [vlist], options);
-  },
-
-  mathmlBuilder(group, options) {
-    const operator = new mathMLTree.MathNode("mo", [new mathMLTree.TextNode("\u203e")]);
-    operator.setAttribute("stretchy", "true");
-    const node = new mathMLTree.MathNode("munder", [buildGroup$1(group.body, options), operator]);
-    node.setAttribute("accentunder", "true");
-    return node;
-  }
-
-});
-
-defineFunction({
-  type: "verb",
-  names: ["\\verb"],
-  props: {
-    numArgs: 0,
-    allowedInText: true
-  },
-
-  handler(context, args, optArgs) {
-    // \verb and \verb* are dealt with directly in Parser.js.
-    // If we end up here, it's because of a failure to match the two delimiters
-    // in the regex in Lexer.js.  LaTeX raises the following error when \verb is
-    // terminated by end of line (or file).
-    throw new ParseError("\\verb ended by end of line instead of matching delimiter");
-  },
-
-  htmlBuilder(group, options) {
-    const text = makeVerb(group);
-    const body = []; // \verb enters text mode and therefore is sized like \textstyle
-
-    const newOptions = options.havingStyle(options.style.text());
-
-    for (let i = 0; i < text.length; i++) {
-      let c = text[i];
-
-      if (c === '~') {
-        c = '\\textasciitilde';
-      }
-
-      body.push(buildCommon.makeSymbol(c, "Typewriter-Regular", group.mode, newOptions, ["mord", "texttt"]));
-    }
-
-    return buildCommon.makeSpan(["mord", "text"].concat(newOptions.sizingClasses(options)), buildCommon.tryCombineChars(body), newOptions);
-  },
-
-  mathmlBuilder(group, options) {
-    const text = new mathMLTree.TextNode(makeVerb(group));
-    const node = new mathMLTree.MathNode("mtext", [text]);
-    node.setAttribute("mathvariant", "monospace");
-    return node;
-  }
-
-});
-/**
- * Converts verb group into body string.
- *
- * \verb* replaces each space with an open box \u2423
- * \verb replaces each space with a no-break space \xA0
- */
-
-const makeVerb = group => group.body.replace(/ /g, group.star ? '\u2423' : '\xA0');
-
-/** Include this to ensure that all functions are defined. */
-const functions = _functions;
-
-/**
- * The Lexer class handles tokenizing the input in various ways. Since our
- * parser expects us to be able to backtrack, the lexer allows lexing from any
- * given starting point.
- *
- * Its main exposed function is the `lex` function, which takes a position to
- * lex from and a type of token to lex. It defers to the appropriate `_innerLex`
- * function.
- *
- * The various `_innerLex` functions perform the actual lexing of different
- * kinds.
- */
-
-/* The following tokenRegex
- * - matches typical whitespace (but not NBSP etc.) using its first group
- * - does not match any control character \x00-\x1f except whitespace
- * - does not match a bare backslash
- * - matches any ASCII character except those just mentioned
- * - does not match the BMP private use area \uE000-\uF8FF
- * - does not match bare surrogate code units
- * - matches any BMP character except for those just described
- * - matches any valid Unicode surrogate pair
- * - matches a backslash followed by one or more letters
- * - matches a backslash followed by any BMP character, including newline
- * Just because the Lexer matches something doesn't mean it's valid input:
- * If there is no matching function or symbol definition, the Parser will
- * still reject the input.
- */
-const spaceRegexString = "[ \r\n\t]";
-const controlWordRegexString = "\\\\[a-zA-Z@]+";
-const controlSymbolRegexString = "\\\\[^\uD800-\uDFFF]";
-const controlWordWhitespaceRegexString = `${controlWordRegexString}${spaceRegexString}*`;
-const controlWordWhitespaceRegex = new RegExp(`^(${controlWordRegexString})${spaceRegexString}*$`);
-const combiningDiacriticalMarkString = "[\u0300-\u036f]";
-const combiningDiacriticalMarksEndRegex = new RegExp(`${combiningDiacriticalMarkString}+$`);
-const tokenRegexString = `(${spaceRegexString}+)|` + // whitespace
-"([!-\\[\\]-\u2027\u202A-\uD7FF\uF900-\uFFFF]" + // single codepoint
-`${combiningDiacriticalMarkString}*` + // ...plus accents
-"|[\uD800-\uDBFF][\uDC00-\uDFFF]" + // surrogate pair
-`${combiningDiacriticalMarkString}*` + // ...plus accents
-"|\\\\verb\\*([^]).*?\\3" + // \verb*
-"|\\\\verb([^*a-zA-Z]).*?\\4" + // \verb unstarred
-"|\\\\operatorname\\*" + // \operatorname*
-`|${controlWordWhitespaceRegexString}` + // \macroName + spaces
-`|${controlSymbolRegexString})`; // \\, \', etc.
-
-/** Main Lexer class */
-
-class Lexer {
-  // category codes, only supports comment characters (14) for now
-  constructor(input, settings) {
-    this.input = void 0;
-    this.settings = void 0;
-    this.tokenRegex = void 0;
-    this.catcodes = void 0;
-    // Separate accents from characters
-    this.input = input;
-    this.settings = settings;
-    this.tokenRegex = new RegExp(tokenRegexString, 'g');
-    this.catcodes = {
-      "%": 14 // comment character
-
-    };
-  }
-
-  setCatcode(char, code) {
-    this.catcodes[char] = code;
-  }
-  /**
-   * This function lexes a single token.
-   */
-
-
-  lex() {
-    const input = this.input;
-    const pos = this.tokenRegex.lastIndex;
-
-    if (pos === input.length) {
-      return new Token("EOF", new SourceLocation(this, pos, pos));
-    }
-
-    const match = this.tokenRegex.exec(input);
-
-    if (match === null || match.index !== pos) {
-      throw new ParseError(`Unexpected character: '${input[pos]}'`, new Token(input[pos], new SourceLocation(this, pos, pos + 1)));
-    }
-
-    let text = match[2] || " ";
-
-    if (this.catcodes[text] === 14) {
-      // comment character
-      const nlIndex = input.indexOf('\n', this.tokenRegex.lastIndex);
-
-      if (nlIndex === -1) {
-        this.tokenRegex.lastIndex = input.length; // EOF
-
-        this.settings.reportNonstrict("commentAtEnd", "% comment has no terminating newline; LaTeX would " + "fail because of commenting the end of math mode (e.g. $)");
-      } else {
-        this.tokenRegex.lastIndex = nlIndex + 1;
-      }
-
-      return this.lex();
-    } // Trim any trailing whitespace from control word match
-
-
-    const controlMatch = text.match(controlWordWhitespaceRegex);
-
-    if (controlMatch) {
-      text = controlMatch[1];
-    }
-
-    return new Token(text, new SourceLocation(this, pos, this.tokenRegex.lastIndex));
-  }
-
-}
-
-/**
- * A `Namespace` refers to a space of nameable things like macros or lengths,
- * which can be `set` either globally or local to a nested group, using an
- * undo stack similar to how TeX implements this functionality.
- * Performance-wise, `get` and local `set` take constant time, while global
- * `set` takes time proportional to the depth of group nesting.
- */
-class Namespace {
-  /**
-   * Both arguments are optional.  The first argument is an object of
-   * built-in mappings which never change.  The second argument is an object
-   * of initial (global-level) mappings, which will constantly change
-   * according to any global/top-level `set`s done.
-   */
-  constructor(builtins, globalMacros) {
-    if (builtins === void 0) {
-      builtins = {};
-    }
-
-    if (globalMacros === void 0) {
-      globalMacros = {};
-    }
-
-    this.current = void 0;
-    this.builtins = void 0;
-    this.undefStack = void 0;
-    this.current = globalMacros;
-    this.builtins = builtins;
-    this.undefStack = [];
-  }
-  /**
-   * Start a new nested group, affecting future local `set`s.
-   */
-
-
-  beginGroup() {
-    this.undefStack.push({});
-  }
-  /**
-   * End current nested group, restoring values before the group began.
-   */
-
-
-  endGroup() {
-    if (this.undefStack.length === 0) {
-      throw new ParseError("Unbalanced namespace destruction: attempt " + "to pop global namespace; please report this as a bug");
-    }
-
-    const undefs = this.undefStack.pop();
-
-    for (const undef in undefs) {
-      if (undefs.hasOwnProperty(undef)) {
-        if (undefs[undef] === undefined) {
-          delete this.current[undef];
-        } else {
-          this.current[undef] = undefs[undef];
-        }
-      }
-    }
-  }
-  /**
-   * Detect whether `name` has a definition.  Equivalent to
-   * `get(name) != null`.
-   */
-
-
-  has(name) {
-    return this.current.hasOwnProperty(name) || this.builtins.hasOwnProperty(name);
-  }
-  /**
-   * Get the current value of a name, or `undefined` if there is no value.
-   *
-   * Note: Do not use `if (namespace.get(...))` to detect whether a macro
-   * is defined, as the definition may be the empty string which evaluates
-   * to `false` in JavaScript.  Use `if (namespace.get(...) != null)` or
-   * `if (namespace.has(...))`.
-   */
-
-
-  get(name) {
-    if (this.current.hasOwnProperty(name)) {
-      return this.current[name];
-    } else {
-      return this.builtins[name];
-    }
-  }
-  /**
-   * Set the current value of a name, and optionally set it globally too.
-   * Local set() sets the current value and (when appropriate) adds an undo
-   * operation to the undo stack.  Global set() may change the undo
-   * operation at every level, so takes time linear in their number.
-   */
-
-
-  set(name, value, global) {
-    if (global === void 0) {
-      global = false;
-    }
-
-    if (global) {
-      // Global set is equivalent to setting in all groups.  Simulate this
-      // by destroying any undos currently scheduled for this name,
-      // and adding an undo with the *new* value (in case it later gets
-      // locally reset within this environment).
-      for (let i = 0; i < this.undefStack.length; i++) {
-        delete this.undefStack[i][name];
-      }
-
-      if (this.undefStack.length > 0) {
-        this.undefStack[this.undefStack.length - 1][name] = value;
-      }
-    } else {
-      // Undo this set at end of this group (possibly to `undefined`),
-      // unless an undo is already in place, in which case that older
-      // value is the correct one.
-      const top = this.undefStack[this.undefStack.length - 1];
-
-      if (top && !top.hasOwnProperty(name)) {
-        top[name] = this.current[name];
-      }
-    }
-
-    this.current[name] = value;
-  }
-
-}
-
-/**
- * Predefined macros for KaTeX.
- * This can be used to define some commands in terms of others.
- */
-const builtinMacros = {};
-
-function defineMacro(name, body) {
-  builtinMacros[name] = body;
-} //////////////////////////////////////////////////////////////////////
-// macro tools
-// LaTeX's \@firstoftwo{#1}{#2} expands to #1, skipping #2
-// TeX source: \long\def\@firstoftwo#1#2{#1}
-
-defineMacro("\\@firstoftwo", function (context) {
-  const args = context.consumeArgs(2);
-  return {
-    tokens: args[0],
-    numArgs: 0
-  };
-}); // LaTeX's \@secondoftwo{#1}{#2} expands to #2, skipping #1
-// TeX source: \long\def\@secondoftwo#1#2{#2}
-
-defineMacro("\\@secondoftwo", function (context) {
-  const args = context.consumeArgs(2);
-  return {
-    tokens: args[1],
-    numArgs: 0
-  };
-}); // LaTeX's \@ifnextchar{#1}{#2}{#3} looks ahead to the next (unexpanded)
-// symbol.  If it matches #1, then the macro expands to #2; otherwise, #3.
-// Note, however, that it does not consume the next symbol in either case.
-
-defineMacro("\\@ifnextchar", function (context) {
-  const args = context.consumeArgs(3); // symbol, if, else
-
-  const nextToken = context.future();
-
-  if (args[0].length === 1 && args[0][0].text === nextToken.text) {
-    return {
-      tokens: args[1],
-      numArgs: 0
-    };
-  } else {
-    return {
-      tokens: args[2],
-      numArgs: 0
-    };
-  }
-}); // LaTeX's \@ifstar{#1}{#2} looks ahead to the next (unexpanded) symbol.
-// If it is `*`, then it consumes the symbol, and the macro expands to #1;
-// otherwise, the macro expands to #2 (without consuming the symbol).
-// TeX source: \def\@ifstar#1{\@ifnextchar *{\@firstoftwo{#1}}}
-
-defineMacro("\\@ifstar", "\\@ifnextchar *{\\@firstoftwo{#1}}"); // LaTeX's \TextOrMath{#1}{#2} expands to #1 in text mode, #2 in math mode
-
-defineMacro("\\TextOrMath", function (context) {
-  const args = context.consumeArgs(2);
-
-  if (context.mode === 'text') {
-    return {
-      tokens: args[0],
-      numArgs: 0
-    };
-  } else {
-    return {
-      tokens: args[1],
-      numArgs: 0
-    };
-  }
-}); // Lookup table for parsing numbers in base 8 through 16
-
-const digitToNumber = {
-  "0": 0,
-  "1": 1,
-  "2": 2,
-  "3": 3,
-  "4": 4,
-  "5": 5,
-  "6": 6,
-  "7": 7,
-  "8": 8,
-  "9": 9,
-  "a": 10,
-  "A": 10,
-  "b": 11,
-  "B": 11,
-  "c": 12,
-  "C": 12,
-  "d": 13,
-  "D": 13,
-  "e": 14,
-  "E": 14,
-  "f": 15,
-  "F": 15
-}; // TeX \char makes a literal character (catcode 12) using the following forms:
-// (see The TeXBook, p. 43)
-//   \char123  -- decimal
-//   \char'123 -- octal
-//   \char"123 -- hex
-//   \char`x   -- character that can be written (i.e. isn't active)
-//   \char`\x  -- character that cannot be written (e.g. %)
-// These all refer to characters from the font, so we turn them into special
-// calls to a function \@char dealt with in the Parser.
-
-defineMacro("\\char", function (context) {
-  let token = context.popToken();
-  let base;
-  let number = '';
-
-  if (token.text === "'") {
-    base = 8;
-    token = context.popToken();
-  } else if (token.text === '"') {
-    base = 16;
-    token = context.popToken();
-  } else if (token.text === "`") {
-    token = context.popToken();
-
-    if (token.text[0] === "\\") {
-      number = token.text.charCodeAt(1);
-    } else if (token.text === "EOF") {
-      throw new ParseError("\\char` missing argument");
-    } else {
-      number = token.text.charCodeAt(0);
-    }
-  } else {
-    base = 10;
-  }
-
-  if (base) {
-    // Parse a number in the given base, starting with first `token`.
-    number = digitToNumber[token.text];
-
-    if (number == null || number >= base) {
-      throw new ParseError(`Invalid base-${base} digit ${token.text}`);
-    }
-
-    let digit;
-
-    while ((digit = digitToNumber[context.future().text]) != null && digit < base) {
-      number *= base;
-      number += digit;
-      context.popToken();
-    }
-  }
-
-  return `\\@char{${number}}`;
-}); // Basic support for macro definitions:
-//     \def\macro{expansion}
-//     \def\macro#1{expansion}
-//     \def\macro#1#2{expansion}
-//     \def\macro#1#2#3#4#5#6#7#8#9{expansion}
-// Also the \gdef and \global\def equivalents
-
-const def = (context, global) => {
-  let arg = context.consumeArgs(1)[0];
-
-  if (arg.length !== 1) {
-    throw new ParseError("\\gdef's first argument must be a macro name");
-  }
-
-  const name = arg[0].text; // Count argument specifiers, and check they are in the order #1 #2 ...
-
-  let numArgs = 0;
-  arg = context.consumeArgs(1)[0];
-
-  while (arg.length === 1 && arg[0].text === "#") {
-    arg = context.consumeArgs(1)[0];
-
-    if (arg.length !== 1) {
-      throw new ParseError(`Invalid argument number length "${arg.length}"`);
-    }
-
-    if (!/^[1-9]$/.test(arg[0].text)) {
-      throw new ParseError(`Invalid argument number "${arg[0].text}"`);
-    }
-
-    numArgs++;
-
-    if (parseInt(arg[0].text) !== numArgs) {
-      throw new ParseError(`Argument number "${arg[0].text}" out of order`);
-    }
-
-    arg = context.consumeArgs(1)[0];
-  } // Final arg is the expansion of the macro
-
-
-  context.macros.set(name, {
-    tokens: arg,
-    numArgs
-  }, global);
-  return '';
-};
-
-defineMacro("\\gdef", context => def(context, true));
-defineMacro("\\def", context => def(context, false));
-defineMacro("\\global", context => {
-  const next = context.consumeArgs(1)[0];
-
-  if (next.length !== 1) {
-    throw new ParseError("Invalid command after \\global");
-  }
-
-  const command = next[0].text; // TODO: Should expand command
-
-  if (command === "\\def") {
-    // \global\def is equivalent to \gdef
-    return def(context, true);
-  } else {
-    throw new ParseError(`Invalid command '${command}' after \\global`);
-  }
-}); // \newcommand{\macro}[args]{definition}
-// \renewcommand{\macro}[args]{definition}
-// TODO: Optional arguments: \newcommand{\macro}[args][default]{definition}
-
-const newcommand = (context, existsOK, nonexistsOK) => {
-  let arg = context.consumeArgs(1)[0];
-
-  if (arg.length !== 1) {
-    throw new ParseError("\\newcommand's first argument must be a macro name");
-  }
-
-  const name = arg[0].text;
-  const exists = context.isDefined(name);
-
-  if (exists && !existsOK) {
-    throw new ParseError(`\\newcommand{${name}} attempting to redefine ` + `${name}; use \\renewcommand`);
-  }
-
-  if (!exists && !nonexistsOK) {
-    throw new ParseError(`\\renewcommand{${name}} when command ${name} ` + `does not yet exist; use \\newcommand`);
-  }
-
-  let numArgs = 0;
-  arg = context.consumeArgs(1)[0];
-
-  if (arg.length === 1 && arg[0].text === "[") {
-    let argText = '';
-    let token = context.expandNextToken();
-
-    while (token.text !== "]" && token.text !== "EOF") {
-      // TODO: Should properly expand arg, e.g., ignore {}s
-      argText += token.text;
-      token = context.expandNextToken();
-    }
-
-    if (!argText.match(/^\s*[0-9]+\s*$/)) {
-      throw new ParseError(`Invalid number of arguments: ${argText}`);
-    }
-
-    numArgs = parseInt(argText);
-    arg = context.consumeArgs(1)[0];
-  } // Final arg is the expansion of the macro
-
-
-  context.macros.set(name, {
-    tokens: arg,
-    numArgs
-  });
-  return '';
-};
-
-defineMacro("\\newcommand", context => newcommand(context, false, true));
-defineMacro("\\renewcommand", context => newcommand(context, true, false));
-defineMacro("\\providecommand", context => newcommand(context, true, true)); //////////////////////////////////////////////////////////////////////
-// Grouping
-// \let\bgroup={ \let\egroup=}
-
-defineMacro("\\bgroup", "{");
-defineMacro("\\egroup", "}"); // Symbols from latex.ltx:
-// \def\lq{`}
-// \def\rq{'}
-// \def \aa {\r a}
-// \def \AA {\r A}
-
-defineMacro("\\lq", "`");
-defineMacro("\\rq", "'");
-defineMacro("\\aa", "\\r a");
-defineMacro("\\AA", "\\r A"); // Copyright (C) and registered (R) symbols. Use raw symbol in MathML.
-// \DeclareTextCommandDefault{\textcopyright}{\textcircled{c}}
-// \DeclareTextCommandDefault{\textregistered}{\textcircled{%
-//      \check@mathfonts\fontsize\sf@size\z@\math@fontsfalse\selectfont R}}
-// \DeclareRobustCommand{\copyright}{%
-//    \ifmmode{\nfss@text{\textcopyright}}\else\textcopyright\fi}
-
-defineMacro("\\textcopyright", "\\html@mathml{\\textcircled{c}}{\\char`©}");
-defineMacro("\\copyright", "\\TextOrMath{\\textcopyright}{\\text{\\textcopyright}}");
-defineMacro("\\textregistered", "\\html@mathml{\\textcircled{\\scriptsize R}}{\\char`®}"); // Characters omitted from Unicode range 1D400–1D7FF
-
-defineMacro("\u212C", "\\mathscr{B}"); // script
-
-defineMacro("\u2130", "\\mathscr{E}");
-defineMacro("\u2131", "\\mathscr{F}");
-defineMacro("\u210B", "\\mathscr{H}");
-defineMacro("\u2110", "\\mathscr{I}");
-defineMacro("\u2112", "\\mathscr{L}");
-defineMacro("\u2133", "\\mathscr{M}");
-defineMacro("\u211B", "\\mathscr{R}");
-defineMacro("\u212D", "\\mathfrak{C}"); // Fraktur
-
-defineMacro("\u210C", "\\mathfrak{H}");
-defineMacro("\u2128", "\\mathfrak{Z}"); // Define \Bbbk with a macro that works in both HTML and MathML.
-
-defineMacro("\\Bbbk", "\\Bbb{k}"); // Unicode middle dot
-// The KaTeX fonts do not contain U+00B7. Instead, \cdotp displays
-// the dot at U+22C5 and gives it punct spacing.
-
-defineMacro("\u00b7", "\\cdotp"); // \llap and \rlap render their contents in text mode
-
-defineMacro("\\llap", "\\mathllap{\\textrm{#1}}");
-defineMacro("\\rlap", "\\mathrlap{\\textrm{#1}}");
-defineMacro("\\clap", "\\mathclap{\\textrm{#1}}"); // \not is defined by base/fontmath.ltx via
-// \DeclareMathSymbol{\not}{\mathrel}{symbols}{"36}
-// It's thus treated like a \mathrel, but defined by a symbol that has zero
-// width but extends to the right.  We use \rlap to get that spacing.
-// For MathML we write U+0338 here. buildMathML.js will then do the overlay.
-
-defineMacro("\\not", '\\html@mathml{\\mathrel{\\mathrlap\\@not}}{\\char"338}'); // Negated symbols from base/fontmath.ltx:
-// \def\neq{\not=} \let\ne=\neq
-// \DeclareRobustCommand
-//   \notin{\mathrel{\m@th\mathpalette\c@ncel\in}}
-// \def\c@ncel#1#2{\m@th\ooalign{$\hfil#1\mkern1mu/\hfil$\crcr$#1#2$}}
-
-defineMacro("\\neq", "\\html@mathml{\\mathrel{\\not=}}{\\mathrel{\\char`≠}}");
-defineMacro("\\ne", "\\neq");
-defineMacro("\u2260", "\\neq");
-defineMacro("\\notin", "\\html@mathml{\\mathrel{{\\in}\\mathllap{/\\mskip1mu}}}" + "{\\mathrel{\\char`∉}}");
-defineMacro("\u2209", "\\notin"); // Unicode stacked relations
-
-defineMacro("\u2258", "\\html@mathml{" + "\\mathrel{=\\kern{-1em}\\raisebox{0.4em}{$\\scriptsize\\frown$}}" + "}{\\mathrel{\\char`\u2258}}");
-defineMacro("\u2259", "\\html@mathml{\\stackrel{\\tiny\\wedge}{=}}{\\mathrel{\\char`\u2258}}");
-defineMacro("\u225A", "\\html@mathml{\\stackrel{\\tiny\\vee}{=}}{\\mathrel{\\char`\u225A}}");
-defineMacro("\u225B", "\\html@mathml{\\stackrel{\\scriptsize\\star}{=}}" + "{\\mathrel{\\char`\u225B}}");
-defineMacro("\u225D", "\\html@mathml{\\stackrel{\\tiny\\mathrm{def}}{=}}" + "{\\mathrel{\\char`\u225D}}");
-defineMacro("\u225E", "\\html@mathml{\\stackrel{\\tiny\\mathrm{m}}{=}}" + "{\\mathrel{\\char`\u225E}}");
-defineMacro("\u225F", "\\html@mathml{\\stackrel{\\tiny?}{=}}{\\mathrel{\\char`\u225F}}"); // Misc Unicode
-
-defineMacro("\u27C2", "\\perp");
-defineMacro("\u203C", "\\mathclose{!\\mkern-0.8mu!}");
-defineMacro("\u220C", "\\notni");
-defineMacro("\u231C", "\\ulcorner");
-defineMacro("\u231D", "\\urcorner");
-defineMacro("\u231E", "\\llcorner");
-defineMacro("\u231F", "\\lrcorner");
-defineMacro("\u00A9", "\\copyright");
-defineMacro("\u00AE", "\\textregistered");
-defineMacro("\uFE0F", "\\textregistered"); //////////////////////////////////////////////////////////////////////
-// LaTeX_2ε
-// \vdots{\vbox{\baselineskip4\p@  \lineskiplimit\z@
-// \kern6\p@\hbox{.}\hbox{.}\hbox{.}}}
-// We'll call \varvdots, which gets a glyph from symbols.js.
-// The zero-width rule gets us an equivalent to the vertical 6pt kern.
-
-defineMacro("\\vdots", "\\mathord{\\varvdots\\rule{0pt}{15pt}}");
-defineMacro("\u22ee", "\\vdots"); //////////////////////////////////////////////////////////////////////
-// amsmath.sty
-// http://mirrors.concertpass.com/tex-archive/macros/latex/required/amsmath/amsmath.pdf
-// Italic Greek capital letters.  AMS defines these with \DeclareMathSymbol,
-// but they are equivalent to \mathit{\Letter}.
-
-defineMacro("\\varGamma", "\\mathit{\\Gamma}");
-defineMacro("\\varDelta", "\\mathit{\\Delta}");
-defineMacro("\\varTheta", "\\mathit{\\Theta}");
-defineMacro("\\varLambda", "\\mathit{\\Lambda}");
-defineMacro("\\varXi", "\\mathit{\\Xi}");
-defineMacro("\\varPi", "\\mathit{\\Pi}");
-defineMacro("\\varSigma", "\\mathit{\\Sigma}");
-defineMacro("\\varUpsilon", "\\mathit{\\Upsilon}");
-defineMacro("\\varPhi", "\\mathit{\\Phi}");
-defineMacro("\\varPsi", "\\mathit{\\Psi}");
-defineMacro("\\varOmega", "\\mathit{\\Omega}"); //\newcommand{\substack}[1]{\subarray{c}#1\endsubarray}
-
-defineMacro("\\substack", "\\begin{subarray}{c}#1\\end{subarray}"); // \renewcommand{\colon}{\nobreak\mskip2mu\mathpunct{}\nonscript
-// \mkern-\thinmuskip{:}\mskip6muplus1mu\relax}
-
-defineMacro("\\colon", "\\nobreak\\mskip2mu\\mathpunct{}" + "\\mathchoice{\\mkern-3mu}{\\mkern-3mu}{}{}{:}\\mskip6mu"); // \newcommand{\boxed}[1]{\fbox{\m@th$\displaystyle#1$}}
-
-defineMacro("\\boxed", "\\fbox{$\\displaystyle{#1}$}"); // \def\iff{\DOTSB\;\Longleftrightarrow\;}
-// \def\implies{\DOTSB\;\Longrightarrow\;}
-// \def\impliedby{\DOTSB\;\Longleftarrow\;}
-
-defineMacro("\\iff", "\\DOTSB\\;\\Longleftrightarrow\\;");
-defineMacro("\\implies", "\\DOTSB\\;\\Longrightarrow\\;");
-defineMacro("\\impliedby", "\\DOTSB\\;\\Longleftarrow\\;"); // AMSMath's automatic \dots, based on \mdots@@ macro.
-
-const dotsByToken = {
-  ',': '\\dotsc',
-  '\\not': '\\dotsb',
-  // \keybin@ checks for the following:
-  '+': '\\dotsb',
-  '=': '\\dotsb',
-  '<': '\\dotsb',
-  '>': '\\dotsb',
-  '-': '\\dotsb',
-  '*': '\\dotsb',
-  ':': '\\dotsb',
-  // Symbols whose definition starts with \DOTSB:
-  '\\DOTSB': '\\dotsb',
-  '\\coprod': '\\dotsb',
-  '\\bigvee': '\\dotsb',
-  '\\bigwedge': '\\dotsb',
-  '\\biguplus': '\\dotsb',
-  '\\bigcap': '\\dotsb',
-  '\\bigcup': '\\dotsb',
-  '\\prod': '\\dotsb',
-  '\\sum': '\\dotsb',
-  '\\bigotimes': '\\dotsb',
-  '\\bigoplus': '\\dotsb',
-  '\\bigodot': '\\dotsb',
-  '\\bigsqcup': '\\dotsb',
-  '\\And': '\\dotsb',
-  '\\longrightarrow': '\\dotsb',
-  '\\Longrightarrow': '\\dotsb',
-  '\\longleftarrow': '\\dotsb',
-  '\\Longleftarrow': '\\dotsb',
-  '\\longleftrightarrow': '\\dotsb',
-  '\\Longleftrightarrow': '\\dotsb',
-  '\\mapsto': '\\dotsb',
-  '\\longmapsto': '\\dotsb',
-  '\\hookrightarrow': '\\dotsb',
-  '\\doteq': '\\dotsb',
-  // Symbols whose definition starts with \mathbin:
-  '\\mathbin': '\\dotsb',
-  // Symbols whose definition starts with \mathrel:
-  '\\mathrel': '\\dotsb',
-  '\\relbar': '\\dotsb',
-  '\\Relbar': '\\dotsb',
-  '\\xrightarrow': '\\dotsb',
-  '\\xleftarrow': '\\dotsb',
-  // Symbols whose definition starts with \DOTSI:
-  '\\DOTSI': '\\dotsi',
-  '\\int': '\\dotsi',
-  '\\oint': '\\dotsi',
-  '\\iint': '\\dotsi',
-  '\\iiint': '\\dotsi',
-  '\\iiiint': '\\dotsi',
-  '\\idotsint': '\\dotsi',
-  // Symbols whose definition starts with \DOTSX:
-  '\\DOTSX': '\\dotsx'
-};
-defineMacro("\\dots", function (context) {
-  // TODO: If used in text mode, should expand to \textellipsis.
-  // However, in KaTeX, \textellipsis and \ldots behave the same
-  // (in text mode), and it's unlikely we'd see any of the math commands
-  // that affect the behavior of \dots when in text mode.  So fine for now
-  // (until we support \ifmmode ... \else ... \fi).
-  let thedots = '\\dotso';
-  const next = context.expandAfterFuture().text;
-
-  if (next in dotsByToken) {
-    thedots = dotsByToken[next];
-  } else if (next.substr(0, 4) === '\\not') {
-    thedots = '\\dotsb';
-  } else if (next in symbols.math) {
-    if (utils.contains(['bin', 'rel'], symbols.math[next].group)) {
-      thedots = '\\dotsb';
-    }
-  }
-
-  return thedots;
-});
-const spaceAfterDots = {
-  // \rightdelim@ checks for the following:
-  ')': true,
-  ']': true,
-  '\\rbrack': true,
-  '\\}': true,
-  '\\rbrace': true,
-  '\\rangle': true,
-  '\\rceil': true,
-  '\\rfloor': true,
-  '\\rgroup': true,
-  '\\rmoustache': true,
-  '\\right': true,
-  '\\bigr': true,
-  '\\biggr': true,
-  '\\Bigr': true,
-  '\\Biggr': true,
-  // \extra@ also tests for the following:
-  '$': true,
-  // \extrap@ checks for the following:
-  ';': true,
-  '.': true,
-  ',': true
-};
-defineMacro("\\dotso", function (context) {
-  const next = context.future().text;
-
-  if (next in spaceAfterDots) {
-    return "\\ldots\\,";
-  } else {
-    return "\\ldots";
-  }
-});
-defineMacro("\\dotsc", function (context) {
-  const next = context.future().text; // \dotsc uses \extra@ but not \extrap@, instead specially checking for
-  // ';' and '.', but doesn't check for ','.
-
-  if (next in spaceAfterDots && next !== ',') {
-    return "\\ldots\\,";
-  } else {
-    return "\\ldots";
-  }
-});
-defineMacro("\\cdots", function (context) {
-  const next = context.future().text;
-
-  if (next in spaceAfterDots) {
-    return "\\@cdots\\,";
-  } else {
-    return "\\@cdots";
-  }
-});
-defineMacro("\\dotsb", "\\cdots");
-defineMacro("\\dotsm", "\\cdots");
-defineMacro("\\dotsi", "\\!\\cdots"); // amsmath doesn't actually define \dotsx, but \dots followed by a macro
-// starting with \DOTSX implies \dotso, and then \extra@ detects this case
-// and forces the added `\,`.
-
-defineMacro("\\dotsx", "\\ldots\\,"); // \let\DOTSI\relax
-// \let\DOTSB\relax
-// \let\DOTSX\relax
-
-defineMacro("\\DOTSI", "\\relax");
-defineMacro("\\DOTSB", "\\relax");
-defineMacro("\\DOTSX", "\\relax"); // Spacing, based on amsmath.sty's override of LaTeX defaults
-// \DeclareRobustCommand{\tmspace}[3]{%
-//   \ifmmode\mskip#1#2\else\kern#1#3\fi\relax}
-
-defineMacro("\\tmspace", "\\TextOrMath{\\kern#1#3}{\\mskip#1#2}\\relax"); // \renewcommand{\,}{\tmspace+\thinmuskip{.1667em}}
-// TODO: math mode should use \thinmuskip
-
-defineMacro("\\,", "\\tmspace+{3mu}{.1667em}"); // \let\thinspace\,
-
-defineMacro("\\thinspace", "\\,"); // \def\>{\mskip\medmuskip}
-// \renewcommand{\:}{\tmspace+\medmuskip{.2222em}}
-// TODO: \> and math mode of \: should use \medmuskip = 4mu plus 2mu minus 4mu
-
-defineMacro("\\>", "\\mskip{4mu}");
-defineMacro("\\:", "\\tmspace+{4mu}{.2222em}"); // \let\medspace\:
-
-defineMacro("\\medspace", "\\:"); // \renewcommand{\;}{\tmspace+\thickmuskip{.2777em}}
-// TODO: math mode should use \thickmuskip = 5mu plus 5mu
-
-defineMacro("\\;", "\\tmspace+{5mu}{.2777em}"); // \let\thickspace\;
-
-defineMacro("\\thickspace", "\\;"); // \renewcommand{\!}{\tmspace-\thinmuskip{.1667em}}
-// TODO: math mode should use \thinmuskip
-
-defineMacro("\\!", "\\tmspace-{3mu}{.1667em}"); // \let\negthinspace\!
-
-defineMacro("\\negthinspace", "\\!"); // \newcommand{\negmedspace}{\tmspace-\medmuskip{.2222em}}
-// TODO: math mode should use \medmuskip
-
-defineMacro("\\negmedspace", "\\tmspace-{4mu}{.2222em}"); // \newcommand{\negthickspace}{\tmspace-\thickmuskip{.2777em}}
-// TODO: math mode should use \thickmuskip
-
-defineMacro("\\negthickspace", "\\tmspace-{5mu}{.277em}"); // \def\enspace{\kern.5em }
-
-defineMacro("\\enspace", "\\kern.5em "); // \def\enskip{\hskip.5em\relax}
-
-defineMacro("\\enskip", "\\hskip.5em\\relax"); // \def\quad{\hskip1em\relax}
-
-defineMacro("\\quad", "\\hskip1em\\relax"); // \def\qquad{\hskip2em\relax}
-
-defineMacro("\\qquad", "\\hskip2em\\relax"); // \tag@in@display form of \tag
-
-defineMacro("\\tag", "\\@ifstar\\tag@literal\\tag@paren");
-defineMacro("\\tag@paren", "\\tag@literal{({#1})}");
-defineMacro("\\tag@literal", context => {
-  if (context.macros.get("\\df@tag")) {
-    throw new ParseError("Multiple \\tag");
-  }
-
-  return "\\gdef\\df@tag{\\text{#1}}";
-}); // \renewcommand{\bmod}{\nonscript\mskip-\medmuskip\mkern5mu\mathbin
-//   {\operator@font mod}\penalty900
-//   \mkern5mu\nonscript\mskip-\medmuskip}
-// \newcommand{\pod}[1]{\allowbreak
-//   \if@display\mkern18mu\else\mkern8mu\fi(#1)}
-// \renewcommand{\pmod}[1]{\pod{{\operator@font mod}\mkern6mu#1}}
-// \newcommand{\mod}[1]{\allowbreak\if@display\mkern18mu
-//   \else\mkern12mu\fi{\operator@font mod}\,\,#1}
-// TODO: math mode should use \medmuskip = 4mu plus 2mu minus 4mu
-
-defineMacro("\\bmod", "\\mathchoice{\\mskip1mu}{\\mskip1mu}{\\mskip5mu}{\\mskip5mu}" + "\\mathbin{\\rm mod}" + "\\mathchoice{\\mskip1mu}{\\mskip1mu}{\\mskip5mu}{\\mskip5mu}");
-defineMacro("\\pod", "\\allowbreak" + "\\mathchoice{\\mkern18mu}{\\mkern8mu}{\\mkern8mu}{\\mkern8mu}(#1)");
-defineMacro("\\pmod", "\\pod{{\\rm mod}\\mkern6mu#1}");
-defineMacro("\\mod", "\\allowbreak" + "\\mathchoice{\\mkern18mu}{\\mkern12mu}{\\mkern12mu}{\\mkern12mu}" + "{\\rm mod}\\,\\,#1"); // \pmb    --   A simulation of bold.
-// The version in ambsy.sty works by typesetting three copies of the argument
-// with small offsets. We use two copies. We omit the vertical offset because
-// of rendering problems that makeVList encounters in Safari.
-
-defineMacro("\\pmb", "\\html@mathml{" + "\\@binrel{#1}{\\mathrlap{#1}\\kern0.5px#1}}" + "{\\mathbf{#1}}"); //////////////////////////////////////////////////////////////////////
-// LaTeX source2e
-// \\ defaults to \newline, but changes to \cr within array environment
-
-defineMacro("\\\\", "\\newline"); // \def\TeX{T\kern-.1667em\lower.5ex\hbox{E}\kern-.125emX\@}
-// TODO: Doesn't normally work in math mode because \@ fails.  KaTeX doesn't
-// support \@ yet, so that's omitted, and we add \text so that the result
-// doesn't look funny in math mode.
-
-defineMacro("\\TeX", "\\textrm{\\html@mathml{" + "T\\kern-.1667em\\raisebox{-.5ex}{E}\\kern-.125emX" + "}{TeX}}"); // \DeclareRobustCommand{\LaTeX}{L\kern-.36em%
-//         {\sbox\z@ T%
-//          \vbox to\ht\z@{\hbox{\check@mathfonts
-//                               \fontsize\sf@size\z@
-//                               \math@fontsfalse\selectfont
-//                               A}%
-//                         \vss}%
-//         }%
-//         \kern-.15em%
-//         \TeX}
-// This code aligns the top of the A with the T (from the perspective of TeX's
-// boxes, though visually the A appears to extend above slightly).
-// We compute the corresponding \raisebox when A is rendered in \normalsize
-// \scriptstyle, which has a scale factor of 0.7 (see Options.js).
-
-const latexRaiseA = metricMap['Main-Regular']["T".charCodeAt(0)][1] - 0.7 * metricMap['Main-Regular']["A".charCodeAt(0)][1] + "em";
-defineMacro("\\LaTeX", "\\textrm{\\html@mathml{" + `L\\kern-.36em\\raisebox{${latexRaiseA}}{\\scriptstyle A}` + "\\kern-.15em\\TeX}{LaTeX}}"); // New KaTeX logo based on tweaking LaTeX logo
-
-defineMacro("\\KaTeX", "\\textrm{\\html@mathml{" + `K\\kern-.17em\\raisebox{${latexRaiseA}}{\\scriptstyle A}` + "\\kern-.15em\\TeX}{KaTeX}}"); // \DeclareRobustCommand\hspace{\@ifstar\@hspacer\@hspace}
-// \def\@hspace#1{\hskip  #1\relax}
-// \def\@hspacer#1{\vrule \@width\z@\nobreak
-//                 \hskip #1\hskip \z@skip}
-
-defineMacro("\\hspace", "\\@ifstar\\@hspacer\\@hspace");
-defineMacro("\\@hspace", "\\hskip #1\\relax");
-defineMacro("\\@hspacer", "\\rule{0pt}{0pt}\\hskip #1\\relax"); //////////////////////////////////////////////////////////////////////
-// mathtools.sty
-//\providecommand\ordinarycolon{:}
-
-defineMacro("\\ordinarycolon", ":"); //\def\vcentcolon{\mathrel{\mathop\ordinarycolon}}
-//TODO(edemaine): Not yet centered. Fix via \raisebox or #726
-
-defineMacro("\\vcentcolon", "\\mathrel{\\mathop\\ordinarycolon}"); // \providecommand*\dblcolon{\vcentcolon\mathrel{\mkern-.9mu}\vcentcolon}
-
-defineMacro("\\dblcolon", "\\html@mathml{" + "\\mathrel{\\vcentcolon\\mathrel{\\mkern-.9mu}\\vcentcolon}}" + "{\\mathop{\\char\"2237}}"); // \providecommand*\coloneqq{\vcentcolon\mathrel{\mkern-1.2mu}=}
-
-defineMacro("\\coloneqq", "\\html@mathml{" + "\\mathrel{\\vcentcolon\\mathrel{\\mkern-1.2mu}=}}" + "{\\mathop{\\char\"2254}}"); // ≔
-// \providecommand*\Coloneqq{\dblcolon\mathrel{\mkern-1.2mu}=}
-
-defineMacro("\\Coloneqq", "\\html@mathml{" + "\\mathrel{\\dblcolon\\mathrel{\\mkern-1.2mu}=}}" + "{\\mathop{\\char\"2237\\char\"3d}}"); // \providecommand*\coloneq{\vcentcolon\mathrel{\mkern-1.2mu}\mathrel{-}}
-
-defineMacro("\\coloneq", "\\html@mathml{" + "\\mathrel{\\vcentcolon\\mathrel{\\mkern-1.2mu}\\mathrel{-}}}" + "{\\mathop{\\char\"3a\\char\"2212}}"); // \providecommand*\Coloneq{\dblcolon\mathrel{\mkern-1.2mu}\mathrel{-}}
-
-defineMacro("\\Coloneq", "\\html@mathml{" + "\\mathrel{\\dblcolon\\mathrel{\\mkern-1.2mu}\\mathrel{-}}}" + "{\\mathop{\\char\"2237\\char\"2212}}"); // \providecommand*\eqqcolon{=\mathrel{\mkern-1.2mu}\vcentcolon}
-
-defineMacro("\\eqqcolon", "\\html@mathml{" + "\\mathrel{=\\mathrel{\\mkern-1.2mu}\\vcentcolon}}" + "{\\mathop{\\char\"2255}}"); // ≕
-// \providecommand*\Eqqcolon{=\mathrel{\mkern-1.2mu}\dblcolon}
-
-defineMacro("\\Eqqcolon", "\\html@mathml{" + "\\mathrel{=\\mathrel{\\mkern-1.2mu}\\dblcolon}}" + "{\\mathop{\\char\"3d\\char\"2237}}"); // \providecommand*\eqcolon{\mathrel{-}\mathrel{\mkern-1.2mu}\vcentcolon}
-
-defineMacro("\\eqcolon", "\\html@mathml{" + "\\mathrel{\\mathrel{-}\\mathrel{\\mkern-1.2mu}\\vcentcolon}}" + "{\\mathop{\\char\"2239}}"); // \providecommand*\Eqcolon{\mathrel{-}\mathrel{\mkern-1.2mu}\dblcolon}
-
-defineMacro("\\Eqcolon", "\\html@mathml{" + "\\mathrel{\\mathrel{-}\\mathrel{\\mkern-1.2mu}\\dblcolon}}" + "{\\mathop{\\char\"2212\\char\"2237}}"); // \providecommand*\colonapprox{\vcentcolon\mathrel{\mkern-1.2mu}\approx}
-
-defineMacro("\\colonapprox", "\\html@mathml{" + "\\mathrel{\\vcentcolon\\mathrel{\\mkern-1.2mu}\\approx}}" + "{\\mathop{\\char\"3a\\char\"2248}}"); // \providecommand*\Colonapprox{\dblcolon\mathrel{\mkern-1.2mu}\approx}
-
-defineMacro("\\Colonapprox", "\\html@mathml{" + "\\mathrel{\\dblcolon\\mathrel{\\mkern-1.2mu}\\approx}}" + "{\\mathop{\\char\"2237\\char\"2248}}"); // \providecommand*\colonsim{\vcentcolon\mathrel{\mkern-1.2mu}\sim}
-
-defineMacro("\\colonsim", "\\html@mathml{" + "\\mathrel{\\vcentcolon\\mathrel{\\mkern-1.2mu}\\sim}}" + "{\\mathop{\\char\"3a\\char\"223c}}"); // \providecommand*\Colonsim{\dblcolon\mathrel{\mkern-1.2mu}\sim}
-
-defineMacro("\\Colonsim", "\\html@mathml{" + "\\mathrel{\\dblcolon\\mathrel{\\mkern-1.2mu}\\sim}}" + "{\\mathop{\\char\"2237\\char\"223c}}"); // Some Unicode characters are implemented with macros to mathtools functions.
-
-defineMacro("\u2237", "\\dblcolon"); // ::
-
-defineMacro("\u2239", "\\eqcolon"); // -:
-
-defineMacro("\u2254", "\\coloneqq"); // :=
-
-defineMacro("\u2255", "\\eqqcolon"); // =:
-
-defineMacro("\u2A74", "\\Coloneqq"); // ::=
-//////////////////////////////////////////////////////////////////////
-// colonequals.sty
-// Alternate names for mathtools's macros:
-
-defineMacro("\\ratio", "\\vcentcolon");
-defineMacro("\\coloncolon", "\\dblcolon");
-defineMacro("\\colonequals", "\\coloneqq");
-defineMacro("\\coloncolonequals", "\\Coloneqq");
-defineMacro("\\equalscolon", "\\eqqcolon");
-defineMacro("\\equalscoloncolon", "\\Eqqcolon");
-defineMacro("\\colonminus", "\\coloneq");
-defineMacro("\\coloncolonminus", "\\Coloneq");
-defineMacro("\\minuscolon", "\\eqcolon");
-defineMacro("\\minuscoloncolon", "\\Eqcolon"); // \colonapprox name is same in mathtools and colonequals.
-
-defineMacro("\\coloncolonapprox", "\\Colonapprox"); // \colonsim name is same in mathtools and colonequals.
-
-defineMacro("\\coloncolonsim", "\\Colonsim"); // Additional macros, implemented by analogy with mathtools definitions:
-
-defineMacro("\\simcolon", "\\mathrel{\\sim\\mathrel{\\mkern-1.2mu}\\vcentcolon}");
-defineMacro("\\simcoloncolon", "\\mathrel{\\sim\\mathrel{\\mkern-1.2mu}\\dblcolon}");
-defineMacro("\\approxcolon", "\\mathrel{\\approx\\mathrel{\\mkern-1.2mu}\\vcentcolon}");
-defineMacro("\\approxcoloncolon", "\\mathrel{\\approx\\mathrel{\\mkern-1.2mu}\\dblcolon}"); // Present in newtxmath, pxfonts and txfonts
-
-defineMacro("\\notni", "\\html@mathml{\\not\\ni}{\\mathrel{\\char`\u220C}}");
-defineMacro("\\limsup", "\\DOTSB\\operatorname*{lim\\,sup}");
-defineMacro("\\liminf", "\\DOTSB\\operatorname*{lim\\,inf}"); //////////////////////////////////////////////////////////////////////
-// MathML alternates for KaTeX glyphs in the Unicode private area
-
-defineMacro("\\gvertneqq", "\\html@mathml{\\@gvertneqq}{\u2269}");
-defineMacro("\\lvertneqq", "\\html@mathml{\\@lvertneqq}{\u2268}");
-defineMacro("\\ngeqq", "\\html@mathml{\\@ngeqq}{\u2271}");
-defineMacro("\\ngeqslant", "\\html@mathml{\\@ngeqslant}{\u2271}");
-defineMacro("\\nleqq", "\\html@mathml{\\@nleqq}{\u2270}");
-defineMacro("\\nleqslant", "\\html@mathml{\\@nleqslant}{\u2270}");
-defineMacro("\\nshortmid", "\\html@mathml{\\@nshortmid}{∤}");
-defineMacro("\\nshortparallel", "\\html@mathml{\\@nshortparallel}{∦}");
-defineMacro("\\nsubseteqq", "\\html@mathml{\\@nsubseteqq}{\u2288}");
-defineMacro("\\nsupseteqq", "\\html@mathml{\\@nsupseteqq}{\u2289}");
-defineMacro("\\varsubsetneq", "\\html@mathml{\\@varsubsetneq}{⊊}");
-defineMacro("\\varsubsetneqq", "\\html@mathml{\\@varsubsetneqq}{⫋}");
-defineMacro("\\varsupsetneq", "\\html@mathml{\\@varsupsetneq}{⊋}");
-defineMacro("\\varsupsetneqq", "\\html@mathml{\\@varsupsetneqq}{⫌}"); //////////////////////////////////////////////////////////////////////
-// stmaryrd and semantic
-// The stmaryrd and semantic packages render the next four items by calling a
-// glyph. Those glyphs do not exist in the KaTeX fonts. Hence the macros.
-
-defineMacro("\\llbracket", "\\html@mathml{" + "\\mathopen{[\\mkern-3.2mu[}}" + "{\\mathopen{\\char`\u27e6}}");
-defineMacro("\\rrbracket", "\\html@mathml{" + "\\mathclose{]\\mkern-3.2mu]}}" + "{\\mathclose{\\char`\u27e7}}");
-defineMacro("\u27e6", "\\llbracket"); // blackboard bold [
-
-defineMacro("\u27e7", "\\rrbracket"); // blackboard bold ]
-
-defineMacro("\\lBrace", "\\html@mathml{" + "\\mathopen{\\{\\mkern-3.2mu[}}" + "{\\mathopen{\\char`\u2983}}");
-defineMacro("\\rBrace", "\\html@mathml{" + "\\mathclose{]\\mkern-3.2mu\\}}}" + "{\\mathclose{\\char`\u2984}}");
-defineMacro("\u2983", "\\lBrace"); // blackboard bold {
-
-defineMacro("\u2984", "\\rBrace"); // blackboard bold }
-// TODO: Create variable sized versions of the last two items. I believe that
-// will require new font glyphs.
-//////////////////////////////////////////////////////////////////////
-// texvc.sty
-// The texvc package contains macros available in mediawiki pages.
-// We omit the functions deprecated at
-// https://en.wikipedia.org/wiki/Help:Displaying_a_formula#Deprecated_syntax
-// We also omit texvc's \O, which conflicts with \text{\O}
-
-defineMacro("\\darr", "\\downarrow");
-defineMacro("\\dArr", "\\Downarrow");
-defineMacro("\\Darr", "\\Downarrow");
-defineMacro("\\lang", "\\langle");
-defineMacro("\\rang", "\\rangle");
-defineMacro("\\uarr", "\\uparrow");
-defineMacro("\\uArr", "\\Uparrow");
-defineMacro("\\Uarr", "\\Uparrow");
-defineMacro("\\N", "\\mathbb{N}");
-defineMacro("\\R", "\\mathbb{R}");
-defineMacro("\\Z", "\\mathbb{Z}");
-defineMacro("\\alef", "\\aleph");
-defineMacro("\\alefsym", "\\aleph");
-defineMacro("\\Alpha", "\\mathrm{A}");
-defineMacro("\\Beta", "\\mathrm{B}");
-defineMacro("\\bull", "\\bullet");
-defineMacro("\\Chi", "\\mathrm{X}");
-defineMacro("\\clubs", "\\clubsuit");
-defineMacro("\\cnums", "\\mathbb{C}");
-defineMacro("\\Complex", "\\mathbb{C}");
-defineMacro("\\Dagger", "\\ddagger");
-defineMacro("\\diamonds", "\\diamondsuit");
-defineMacro("\\empty", "\\emptyset");
-defineMacro("\\Epsilon", "\\mathrm{E}");
-defineMacro("\\Eta", "\\mathrm{H}");
-defineMacro("\\exist", "\\exists");
-defineMacro("\\harr", "\\leftrightarrow");
-defineMacro("\\hArr", "\\Leftrightarrow");
-defineMacro("\\Harr", "\\Leftrightarrow");
-defineMacro("\\hearts", "\\heartsuit");
-defineMacro("\\image", "\\Im");
-defineMacro("\\infin", "\\infty");
-defineMacro("\\Iota", "\\mathrm{I}");
-defineMacro("\\isin", "\\in");
-defineMacro("\\Kappa", "\\mathrm{K}");
-defineMacro("\\larr", "\\leftarrow");
-defineMacro("\\lArr", "\\Leftarrow");
-defineMacro("\\Larr", "\\Leftarrow");
-defineMacro("\\lrarr", "\\leftrightarrow");
-defineMacro("\\lrArr", "\\Leftrightarrow");
-defineMacro("\\Lrarr", "\\Leftrightarrow");
-defineMacro("\\Mu", "\\mathrm{M}");
-defineMacro("\\natnums", "\\mathbb{N}");
-defineMacro("\\Nu", "\\mathrm{N}");
-defineMacro("\\Omicron", "\\mathrm{O}");
-defineMacro("\\plusmn", "\\pm");
-defineMacro("\\rarr", "\\rightarrow");
-defineMacro("\\rArr", "\\Rightarrow");
-defineMacro("\\Rarr", "\\Rightarrow");
-defineMacro("\\real", "\\Re");
-defineMacro("\\reals", "\\mathbb{R}");
-defineMacro("\\Reals", "\\mathbb{R}");
-defineMacro("\\Rho", "\\mathrm{P}");
-defineMacro("\\sdot", "\\cdot");
-defineMacro("\\sect", "\\S");
-defineMacro("\\spades", "\\spadesuit");
-defineMacro("\\sub", "\\subset");
-defineMacro("\\sube", "\\subseteq");
-defineMacro("\\supe", "\\supseteq");
-defineMacro("\\Tau", "\\mathrm{T}");
-defineMacro("\\thetasym", "\\vartheta"); // TODO: defineMacro("\\varcoppa", "\\\mbox{\\coppa}");
-
-defineMacro("\\weierp", "\\wp");
-defineMacro("\\Zeta", "\\mathrm{Z}"); //////////////////////////////////////////////////////////////////////
-// statmath.sty
-// https://ctan.math.illinois.edu/macros/latex/contrib/statmath/statmath.pdf
-
-defineMacro("\\argmin", "\\DOTSB\\operatorname*{arg\\,min}");
-defineMacro("\\argmax", "\\DOTSB\\operatorname*{arg\\,max}");
-defineMacro("\\plim", "\\DOTSB\\mathop{\\operatorname{plim}}\\limits"); // Custom Khan Academy colors, should be moved to an optional package
-
-defineMacro("\\blue", "\\textcolor{##6495ed}{#1}");
-defineMacro("\\orange", "\\textcolor{##ffa500}{#1}");
-defineMacro("\\pink", "\\textcolor{##ff00af}{#1}");
-defineMacro("\\red", "\\textcolor{##df0030}{#1}");
-defineMacro("\\green", "\\textcolor{##28ae7b}{#1}");
-defineMacro("\\gray", "\\textcolor{gray}{#1}");
-defineMacro("\\purple", "\\textcolor{##9d38bd}{#1}");
-defineMacro("\\blueA", "\\textcolor{##ccfaff}{#1}");
-defineMacro("\\blueB", "\\textcolor{##80f6ff}{#1}");
-defineMacro("\\blueC", "\\textcolor{##63d9ea}{#1}");
-defineMacro("\\blueD", "\\textcolor{##11accd}{#1}");
-defineMacro("\\blueE", "\\textcolor{##0c7f99}{#1}");
-defineMacro("\\tealA", "\\textcolor{##94fff5}{#1}");
-defineMacro("\\tealB", "\\textcolor{##26edd5}{#1}");
-defineMacro("\\tealC", "\\textcolor{##01d1c1}{#1}");
-defineMacro("\\tealD", "\\textcolor{##01a995}{#1}");
-defineMacro("\\tealE", "\\textcolor{##208170}{#1}");
-defineMacro("\\greenA", "\\textcolor{##b6ffb0}{#1}");
-defineMacro("\\greenB", "\\textcolor{##8af281}{#1}");
-defineMacro("\\greenC", "\\textcolor{##74cf70}{#1}");
-defineMacro("\\greenD", "\\textcolor{##1fab54}{#1}");
-defineMacro("\\greenE", "\\textcolor{##0d923f}{#1}");
-defineMacro("\\goldA", "\\textcolor{##ffd0a9}{#1}");
-defineMacro("\\goldB", "\\textcolor{##ffbb71}{#1}");
-defineMacro("\\goldC", "\\textcolor{##ff9c39}{#1}");
-defineMacro("\\goldD", "\\textcolor{##e07d10}{#1}");
-defineMacro("\\goldE", "\\textcolor{##a75a05}{#1}");
-defineMacro("\\redA", "\\textcolor{##fca9a9}{#1}");
-defineMacro("\\redB", "\\textcolor{##ff8482}{#1}");
-defineMacro("\\redC", "\\textcolor{##f9685d}{#1}");
-defineMacro("\\redD", "\\textcolor{##e84d39}{#1}");
-defineMacro("\\redE", "\\textcolor{##bc2612}{#1}");
-defineMacro("\\maroonA", "\\textcolor{##ffbde0}{#1}");
-defineMacro("\\maroonB", "\\textcolor{##ff92c6}{#1}");
-defineMacro("\\maroonC", "\\textcolor{##ed5fa6}{#1}");
-defineMacro("\\maroonD", "\\textcolor{##ca337c}{#1}");
-defineMacro("\\maroonE", "\\textcolor{##9e034e}{#1}");
-defineMacro("\\purpleA", "\\textcolor{##ddd7ff}{#1}");
-defineMacro("\\purpleB", "\\textcolor{##c6b9fc}{#1}");
-defineMacro("\\purpleC", "\\textcolor{##aa87ff}{#1}");
-defineMacro("\\purpleD", "\\textcolor{##7854ab}{#1}");
-defineMacro("\\purpleE", "\\textcolor{##543b78}{#1}");
-defineMacro("\\mintA", "\\textcolor{##f5f9e8}{#1}");
-defineMacro("\\mintB", "\\textcolor{##edf2df}{#1}");
-defineMacro("\\mintC", "\\textcolor{##e0e5cc}{#1}");
-defineMacro("\\grayA", "\\textcolor{##f6f7f7}{#1}");
-defineMacro("\\grayB", "\\textcolor{##f0f1f2}{#1}");
-defineMacro("\\grayC", "\\textcolor{##e3e5e6}{#1}");
-defineMacro("\\grayD", "\\textcolor{##d6d8da}{#1}");
-defineMacro("\\grayE", "\\textcolor{##babec2}{#1}");
-defineMacro("\\grayF", "\\textcolor{##888d93}{#1}");
-defineMacro("\\grayG", "\\textcolor{##626569}{#1}");
-defineMacro("\\grayH", "\\textcolor{##3b3e40}{#1}");
-defineMacro("\\grayI", "\\textcolor{##21242c}{#1}");
-defineMacro("\\kaBlue", "\\textcolor{##314453}{#1}");
-defineMacro("\\kaGreen", "\\textcolor{##71B307}{#1}");
-
-/**
- * This file contains the “gullet” where macros are expanded
- * until only non-macro tokens remain.
- */
-// List of commands that act like macros but aren't defined as a macro,
-// function, or symbol.  Used in `isDefined`.
-const implicitCommands = {
-  "\\relax": true,
-  // MacroExpander.js
-  "^": true,
-  // Parser.js
-  "_": true,
-  // Parser.js
-  "\\limits": true,
-  // Parser.js
-  "\\nolimits": true // Parser.js
-
-};
-class MacroExpander {
-  constructor(input, settings, mode) {
-    this.settings = void 0;
-    this.expansionCount = void 0;
-    this.lexer = void 0;
-    this.macros = void 0;
-    this.stack = void 0;
-    this.mode = void 0;
-    this.settings = settings;
-    this.expansionCount = 0;
-    this.feed(input); // Make new global namespace
-
-    this.macros = new Namespace(builtinMacros, settings.macros);
-    this.mode = mode;
-    this.stack = []; // contains tokens in REVERSE order
-  }
-  /**
-   * Feed a new input string to the same MacroExpander
-   * (with existing macros etc.).
-   */
-
-
-  feed(input) {
-    this.lexer = new Lexer(input, this.settings);
-  }
-  /**
-   * Switches between "text" and "math" modes.
-   */
-
-
-  switchMode(newMode) {
-    this.mode = newMode;
-  }
-  /**
-   * Start a new group nesting within all namespaces.
-   */
-
-
-  beginGroup() {
-    this.macros.beginGroup();
-  }
-  /**
-   * End current group nesting within all namespaces.
-   */
-
-
-  endGroup() {
-    this.macros.endGroup();
-  }
-  /**
-   * Returns the topmost token on the stack, without expanding it.
-   * Similar in behavior to TeX's `\futurelet`.
-   */
-
-
-  future() {
-    if (this.stack.length === 0) {
-      this.pushToken(this.lexer.lex());
-    }
-
-    return this.stack[this.stack.length - 1];
-  }
-  /**
-   * Remove and return the next unexpanded token.
-   */
-
-
-  popToken() {
-    this.future(); // ensure non-empty stack
-
-    return this.stack.pop();
-  }
-  /**
-   * Add a given token to the token stack.  In particular, this get be used
-   * to put back a token returned from one of the other methods.
-   */
-
-
-  pushToken(token) {
-    this.stack.push(token);
-  }
-  /**
-   * Append an array of tokens to the token stack.
-   */
-
-
-  pushTokens(tokens) {
-    this.stack.push(...tokens);
-  }
-  /**
-   * Consume all following space tokens, without expansion.
-   */
-
-
-  consumeSpaces() {
-    for (;;) {
-      const token = this.future();
-
-      if (token.text === " ") {
-        this.stack.pop();
-      } else {
-        break;
-      }
-    }
-  }
-  /**
-   * Consume the specified number of arguments from the token stream,
-   * and return the resulting array of arguments.
-   */
-
-
-  consumeArgs(numArgs) {
-    const args = []; // obtain arguments, either single token or balanced {…} group
-
-    for (let i = 0; i < numArgs; ++i) {
-      this.consumeSpaces(); // ignore spaces before each argument
-
-      const startOfArg = this.popToken();
-
-      if (startOfArg.text === "{") {
-        const arg = [];
-        let depth = 1;
-
-        while (depth !== 0) {
-          const tok = this.popToken();
-          arg.push(tok);
-
-          if (tok.text === "{") {
-            ++depth;
-          } else if (tok.text === "}") {
-            --depth;
-          } else if (tok.text === "EOF") {
-            throw new ParseError("End of input in macro argument", startOfArg);
-          }
-        }
-
-        arg.pop(); // remove last }
-
-        arg.reverse(); // like above, to fit in with stack order
-
-        args[i] = arg;
-      } else if (startOfArg.text === "EOF") {
-        throw new ParseError("End of input expecting macro argument");
-      } else {
-        args[i] = [startOfArg];
-      }
-    }
-
-    return args;
-  }
-  /**
-   * Expand the next token only once if possible.
-   *
-   * If the token is expanded, the resulting tokens will be pushed onto
-   * the stack in reverse order and will be returned as an array,
-   * also in reverse order.
-   *
-   * If not, the next token will be returned without removing it
-   * from the stack.  This case can be detected by a `Token` return value
-   * instead of an `Array` return value.
-   *
-   * In either case, the next token will be on the top of the stack,
-   * or the stack will be empty.
-   *
-   * Used to implement `expandAfterFuture` and `expandNextToken`.
-   *
-   * At the moment, macro expansion doesn't handle delimited macros,
-   * i.e. things like those defined by \def\foo#1\end{…}.
-   * See the TeX book page 202ff. for details on how those should behave.
-   */
-
-
-  expandOnce() {
-    const topToken = this.popToken();
-    const name = topToken.text;
-
-    const expansion = this._getExpansion(name);
-
-    if (expansion == null) {
-      // mainly checking for undefined here
-      // Fully expanded
-      this.pushToken(topToken);
-      return topToken;
-    }
-
-    this.expansionCount++;
-
-    if (this.expansionCount > this.settings.maxExpand) {
-      throw new ParseError("Too many expansions: infinite loop or " + "need to increase maxExpand setting");
-    }
-
-    let tokens = expansion.tokens;
-
-    if (expansion.numArgs) {
-      const args = this.consumeArgs(expansion.numArgs); // paste arguments in place of the placeholders
-
-      tokens = tokens.slice(); // make a shallow copy
-
-      for (let i = tokens.length - 1; i >= 0; --i) {
-        let tok = tokens[i];
-
-        if (tok.text === "#") {
-          if (i === 0) {
-            throw new ParseError("Incomplete placeholder at end of macro body", tok);
-          }
-
-          tok = tokens[--i]; // next token on stack
-
-          if (tok.text === "#") {
-            // ## → #
-            tokens.splice(i + 1, 1); // drop first #
-          } else if (/^[1-9]$/.test(tok.text)) {
-            // replace the placeholder with the indicated argument
-            tokens.splice(i, 2, ...args[+tok.text - 1]);
-          } else {
-            throw new ParseError("Not a valid argument number", tok);
-          }
-        }
-      }
-    } // Concatenate expansion onto top of stack.
-
-
-    this.pushTokens(tokens);
-    return tokens;
-  }
-  /**
-   * Expand the next token only once (if possible), and return the resulting
-   * top token on the stack (without removing anything from the stack).
-   * Similar in behavior to TeX's `\expandafter\futurelet`.
-   * Equivalent to expandOnce() followed by future().
-   */
-
-
-  expandAfterFuture() {
-    this.expandOnce();
-    return this.future();
-  }
-  /**
-   * Recursively expand first token, then return first non-expandable token.
-   */
-
-
-  expandNextToken() {
-    for (;;) {
-      const expanded = this.expandOnce(); // expandOnce returns Token if and only if it's fully expanded.
-
-      if (expanded instanceof Token) {
-        // \relax stops the expansion, but shouldn't get returned (a
-        // null return value couldn't get implemented as a function).
-        if (expanded.text === "\\relax") {
-          this.stack.pop();
-        } else {
-          return this.stack.pop(); // === expanded
-        }
-      }
-    } // Flow unable to figure out that this pathway is impossible.
-    // https://github.com/facebook/flow/issues/4808
-
-
-    throw new Error(); // eslint-disable-line no-unreachable
-  }
-  /**
-   * Fully expand the given macro name and return the resulting list of
-   * tokens, or return `undefined` if no such macro is defined.
-   */
-
-
-  expandMacro(name) {
-    if (!this.macros.get(name)) {
-      return undefined;
-    }
-
-    const output = [];
-    const oldStackLength = this.stack.length;
-    this.pushToken(new Token(name));
-
-    while (this.stack.length > oldStackLength) {
-      const expanded = this.expandOnce(); // expandOnce returns Token if and only if it's fully expanded.
-
-      if (expanded instanceof Token) {
-        output.push(this.stack.pop());
-      }
-    }
-
-    return output;
-  }
-  /**
-   * Fully expand the given macro name and return the result as a string,
-   * or return `undefined` if no such macro is defined.
-   */
-
-
-  expandMacroAsText(name) {
-    const tokens = this.expandMacro(name);
-
-    if (tokens) {
-      return tokens.map(token => token.text).join("");
-    } else {
-      return tokens;
-    }
-  }
-  /**
-   * Returns the expanded macro as a reversed array of tokens and a macro
-   * argument count.  Or returns `null` if no such macro.
-   */
-
-
-  _getExpansion(name) {
-    const definition = this.macros.get(name);
-
-    if (definition == null) {
-      // mainly checking for undefined here
-      return definition;
-    }
-
-    const expansion = typeof definition === "function" ? definition(this) : definition;
-
-    if (typeof expansion === "string") {
-      let numArgs = 0;
-
-      if (expansion.indexOf("#") !== -1) {
-        const stripped = expansion.replace(/##/g, "");
-
-        while (stripped.indexOf("#" + (numArgs + 1)) !== -1) {
-          ++numArgs;
-        }
-      }
-
-      const bodyLexer = new Lexer(expansion, this.settings);
-      const tokens = [];
-      let tok = bodyLexer.lex();
-
-      while (tok.text !== "EOF") {
-        tokens.push(tok);
-        tok = bodyLexer.lex();
-      }
-
-      tokens.reverse(); // to fit in with stack using push and pop
-
-      const expanded = {
-        tokens,
-        numArgs
-      };
-      return expanded;
-    }
-
-    return expansion;
-  }
-  /**
-   * Determine whether a command is currently "defined" (has some
-   * functionality), meaning that it's a macro (in the current group),
-   * a function, a symbol, or one of the special commands listed in
-   * `implicitCommands`.
-   */
-
-
-  isDefined(name) {
-    return this.macros.has(name) || functions.hasOwnProperty(name) || symbols.math.hasOwnProperty(name) || symbols.text.hasOwnProperty(name) || implicitCommands.hasOwnProperty(name);
-  }
-
-}
-
-// Mapping of Unicode accent characters to their LaTeX equivalent in text and
-// math mode (when they exist).
-var unicodeAccents = {
-  '\u0301': {
-    text: "\\'",
-    math: '\\acute'
-  },
-  '\u0300': {
-    text: '\\`',
-    math: '\\grave'
-  },
-  '\u0308': {
-    text: '\\"',
-    math: '\\ddot'
-  },
-  '\u0303': {
-    text: '\\~',
-    math: '\\tilde'
-  },
-  '\u0304': {
-    text: '\\=',
-    math: '\\bar'
-  },
-  '\u0306': {
-    text: '\\u',
-    math: '\\breve'
-  },
-  '\u030c': {
-    text: '\\v',
-    math: '\\check'
-  },
-  '\u0302': {
-    text: '\\^',
-    math: '\\hat'
-  },
-  '\u0307': {
-    text: '\\.',
-    math: '\\dot'
-  },
-  '\u030a': {
-    text: '\\r',
-    math: '\\mathring'
-  },
-  '\u030b': {
-    text: '\\H'
-  }
-};
-
-// This file is GENERATED by unicodeMake.js. DO NOT MODIFY.
-var unicodeSymbols = {
-  "\u00e1": "\u0061\u0301",
-  // á = \'{a}
-  "\u00e0": "\u0061\u0300",
-  // à = \`{a}
-  "\u00e4": "\u0061\u0308",
-  // ä = \"{a}
-  "\u01df": "\u0061\u0308\u0304",
-  // ǟ = \"\={a}
-  "\u00e3": "\u0061\u0303",
-  // ã = \~{a}
-  "\u0101": "\u0061\u0304",
-  // ā = \={a}
-  "\u0103": "\u0061\u0306",
-  // ă = \u{a}
-  "\u1eaf": "\u0061\u0306\u0301",
-  // ắ = \u\'{a}
-  "\u1eb1": "\u0061\u0306\u0300",
-  // ằ = \u\`{a}
-  "\u1eb5": "\u0061\u0306\u0303",
-  // ẵ = \u\~{a}
-  "\u01ce": "\u0061\u030c",
-  // ǎ = \v{a}
-  "\u00e2": "\u0061\u0302",
-  // â = \^{a}
-  "\u1ea5": "\u0061\u0302\u0301",
-  // ấ = \^\'{a}
-  "\u1ea7": "\u0061\u0302\u0300",
-  // ầ = \^\`{a}
-  "\u1eab": "\u0061\u0302\u0303",
-  // ẫ = \^\~{a}
-  "\u0227": "\u0061\u0307",
-  // ȧ = \.{a}
-  "\u01e1": "\u0061\u0307\u0304",
-  // ǡ = \.\={a}
-  "\u00e5": "\u0061\u030a",
-  // å = \r{a}
-  "\u01fb": "\u0061\u030a\u0301",
-  // ǻ = \r\'{a}
-  "\u1e03": "\u0062\u0307",
-  // ḃ = \.{b}
-  "\u0107": "\u0063\u0301",
-  // ć = \'{c}
-  "\u010d": "\u0063\u030c",
-  // č = \v{c}
-  "\u0109": "\u0063\u0302",
-  // ĉ = \^{c}
-  "\u010b": "\u0063\u0307",
-  // ċ = \.{c}
-  "\u010f": "\u0064\u030c",
-  // ď = \v{d}
-  "\u1e0b": "\u0064\u0307",
-  // ḋ = \.{d}
-  "\u00e9": "\u0065\u0301",
-  // é = \'{e}
-  "\u00e8": "\u0065\u0300",
-  // è = \`{e}
-  "\u00eb": "\u0065\u0308",
-  // ë = \"{e}
-  "\u1ebd": "\u0065\u0303",
-  // ẽ = \~{e}
-  "\u0113": "\u0065\u0304",
-  // ē = \={e}
-  "\u1e17": "\u0065\u0304\u0301",
-  // ḗ = \=\'{e}
-  "\u1e15": "\u0065\u0304\u0300",
-  // ḕ = \=\`{e}
-  "\u0115": "\u0065\u0306",
-  // ĕ = \u{e}
-  "\u011b": "\u0065\u030c",
-  // ě = \v{e}
-  "\u00ea": "\u0065\u0302",
-  // ê = \^{e}
-  "\u1ebf": "\u0065\u0302\u0301",
-  // ế = \^\'{e}
-  "\u1ec1": "\u0065\u0302\u0300",
-  // ề = \^\`{e}
-  "\u1ec5": "\u0065\u0302\u0303",
-  // ễ = \^\~{e}
-  "\u0117": "\u0065\u0307",
-  // ė = \.{e}
-  "\u1e1f": "\u0066\u0307",
-  // ḟ = \.{f}
-  "\u01f5": "\u0067\u0301",
-  // ǵ = \'{g}
-  "\u1e21": "\u0067\u0304",
-  // ḡ = \={g}
-  "\u011f": "\u0067\u0306",
-  // ğ = \u{g}
-  "\u01e7": "\u0067\u030c",
-  // ǧ = \v{g}
-  "\u011d": "\u0067\u0302",
-  // ĝ = \^{g}
-  "\u0121": "\u0067\u0307",
-  // ġ = \.{g}
-  "\u1e27": "\u0068\u0308",
-  // ḧ = \"{h}
-  "\u021f": "\u0068\u030c",
-  // ȟ = \v{h}
-  "\u0125": "\u0068\u0302",
-  // ĥ = \^{h}
-  "\u1e23": "\u0068\u0307",
-  // ḣ = \.{h}
-  "\u00ed": "\u0069\u0301",
-  // í = \'{i}
-  "\u00ec": "\u0069\u0300",
-  // ì = \`{i}
-  "\u00ef": "\u0069\u0308",
-  // ï = \"{i}
-  "\u1e2f": "\u0069\u0308\u0301",
-  // ḯ = \"\'{i}
-  "\u0129": "\u0069\u0303",
-  // ĩ = \~{i}
-  "\u012b": "\u0069\u0304",
-  // ī = \={i}
-  "\u012d": "\u0069\u0306",
-  // ĭ = \u{i}
-  "\u01d0": "\u0069\u030c",
-  // ǐ = \v{i}
-  "\u00ee": "\u0069\u0302",
-  // î = \^{i}
-  "\u01f0": "\u006a\u030c",
-  // ǰ = \v{j}
-  "\u0135": "\u006a\u0302",
-  // ĵ = \^{j}
-  "\u1e31": "\u006b\u0301",
-  // ḱ = \'{k}
-  "\u01e9": "\u006b\u030c",
-  // ǩ = \v{k}
-  "\u013a": "\u006c\u0301",
-  // ĺ = \'{l}
-  "\u013e": "\u006c\u030c",
-  // ľ = \v{l}
-  "\u1e3f": "\u006d\u0301",
-  // ḿ = \'{m}
-  "\u1e41": "\u006d\u0307",
-  // ṁ = \.{m}
-  "\u0144": "\u006e\u0301",
-  // ń = \'{n}
-  "\u01f9": "\u006e\u0300",
-  // ǹ = \`{n}
-  "\u00f1": "\u006e\u0303",
-  // ñ = \~{n}
-  "\u0148": "\u006e\u030c",
-  // ň = \v{n}
-  "\u1e45": "\u006e\u0307",
-  // ṅ = \.{n}
-  "\u00f3": "\u006f\u0301",
-  // ó = \'{o}
-  "\u00f2": "\u006f\u0300",
-  // ò = \`{o}
-  "\u00f6": "\u006f\u0308",
-  // ö = \"{o}
-  "\u022b": "\u006f\u0308\u0304",
-  // ȫ = \"\={o}
-  "\u00f5": "\u006f\u0303",
-  // õ = \~{o}
-  "\u1e4d": "\u006f\u0303\u0301",
-  // ṍ = \~\'{o}
-  "\u1e4f": "\u006f\u0303\u0308",
-  // ṏ = \~\"{o}
-  "\u022d": "\u006f\u0303\u0304",
-  // ȭ = \~\={o}
-  "\u014d": "\u006f\u0304",
-  // ō = \={o}
-  "\u1e53": "\u006f\u0304\u0301",
-  // ṓ = \=\'{o}
-  "\u1e51": "\u006f\u0304\u0300",
-  // ṑ = \=\`{o}
-  "\u014f": "\u006f\u0306",
-  // ŏ = \u{o}
-  "\u01d2": "\u006f\u030c",
-  // ǒ = \v{o}
-  "\u00f4": "\u006f\u0302",
-  // ô = \^{o}
-  "\u1ed1": "\u006f\u0302\u0301",
-  // ố = \^\'{o}
-  "\u1ed3": "\u006f\u0302\u0300",
-  // ồ = \^\`{o}
-  "\u1ed7": "\u006f\u0302\u0303",
-  // ỗ = \^\~{o}
-  "\u022f": "\u006f\u0307",
-  // ȯ = \.{o}
-  "\u0231": "\u006f\u0307\u0304",
-  // ȱ = \.\={o}
-  "\u0151": "\u006f\u030b",
-  // ő = \H{o}
-  "\u1e55": "\u0070\u0301",
-  // ṕ = \'{p}
-  "\u1e57": "\u0070\u0307",
-  // ṗ = \.{p}
-  "\u0155": "\u0072\u0301",
-  // ŕ = \'{r}
-  "\u0159": "\u0072\u030c",
-  // ř = \v{r}
-  "\u1e59": "\u0072\u0307",
-  // ṙ = \.{r}
-  "\u015b": "\u0073\u0301",
-  // ś = \'{s}
-  "\u1e65": "\u0073\u0301\u0307",
-  // ṥ = \'\.{s}
-  "\u0161": "\u0073\u030c",
-  // š = \v{s}
-  "\u1e67": "\u0073\u030c\u0307",
-  // ṧ = \v\.{s}
-  "\u015d": "\u0073\u0302",
-  // ŝ = \^{s}
-  "\u1e61": "\u0073\u0307",
-  // ṡ = \.{s}
-  "\u1e97": "\u0074\u0308",
-  // ẗ = \"{t}
-  "\u0165": "\u0074\u030c",
-  // ť = \v{t}
-  "\u1e6b": "\u0074\u0307",
-  // ṫ = \.{t}
-  "\u00fa": "\u0075\u0301",
-  // ú = \'{u}
-  "\u00f9": "\u0075\u0300",
-  // ù = \`{u}
-  "\u00fc": "\u0075\u0308",
-  // ü = \"{u}
-  "\u01d8": "\u0075\u0308\u0301",
-  // ǘ = \"\'{u}
-  "\u01dc": "\u0075\u0308\u0300",
-  // ǜ = \"\`{u}
-  "\u01d6": "\u0075\u0308\u0304",
-  // ǖ = \"\={u}
-  "\u01da": "\u0075\u0308\u030c",
-  // ǚ = \"\v{u}
-  "\u0169": "\u0075\u0303",
-  // ũ = \~{u}
-  "\u1e79": "\u0075\u0303\u0301",
-  // ṹ = \~\'{u}
-  "\u016b": "\u0075\u0304",
-  // ū = \={u}
-  "\u1e7b": "\u0075\u0304\u0308",
-  // ṻ = \=\"{u}
-  "\u016d": "\u0075\u0306",
-  // ŭ = \u{u}
-  "\u01d4": "\u0075\u030c",
-  // ǔ = \v{u}
-  "\u00fb": "\u0075\u0302",
-  // û = \^{u}
-  "\u016f": "\u0075\u030a",
-  // ů = \r{u}
-  "\u0171": "\u0075\u030b",
-  // ű = \H{u}
-  "\u1e7d": "\u0076\u0303",
-  // ṽ = \~{v}
-  "\u1e83": "\u0077\u0301",
-  // ẃ = \'{w}
-  "\u1e81": "\u0077\u0300",
-  // ẁ = \`{w}
-  "\u1e85": "\u0077\u0308",
-  // ẅ = \"{w}
-  "\u0175": "\u0077\u0302",
-  // ŵ = \^{w}
-  "\u1e87": "\u0077\u0307",
-  // ẇ = \.{w}
-  "\u1e98": "\u0077\u030a",
-  // ẘ = \r{w}
-  "\u1e8d": "\u0078\u0308",
-  // ẍ = \"{x}
-  "\u1e8b": "\u0078\u0307",
-  // ẋ = \.{x}
-  "\u00fd": "\u0079\u0301",
-  // ý = \'{y}
-  "\u1ef3": "\u0079\u0300",
-  // ỳ = \`{y}
-  "\u00ff": "\u0079\u0308",
-  // ÿ = \"{y}
-  "\u1ef9": "\u0079\u0303",
-  // ỹ = \~{y}
-  "\u0233": "\u0079\u0304",
-  // ȳ = \={y}
-  "\u0177": "\u0079\u0302",
-  // ŷ = \^{y}
-  "\u1e8f": "\u0079\u0307",
-  // ẏ = \.{y}
-  "\u1e99": "\u0079\u030a",
-  // ẙ = \r{y}
-  "\u017a": "\u007a\u0301",
-  // ź = \'{z}
-  "\u017e": "\u007a\u030c",
-  // ž = \v{z}
-  "\u1e91": "\u007a\u0302",
-  // ẑ = \^{z}
-  "\u017c": "\u007a\u0307",
-  // ż = \.{z}
-  "\u00c1": "\u0041\u0301",
-  // Á = \'{A}
-  "\u00c0": "\u0041\u0300",
-  // À = \`{A}
-  "\u00c4": "\u0041\u0308",
-  // Ä = \"{A}
-  "\u01de": "\u0041\u0308\u0304",
-  // Ǟ = \"\={A}
-  "\u00c3": "\u0041\u0303",
-  // Ã = \~{A}
-  "\u0100": "\u0041\u0304",
-  // Ā = \={A}
-  "\u0102": "\u0041\u0306",
-  // Ă = \u{A}
-  "\u1eae": "\u0041\u0306\u0301",
-  // Ắ = \u\'{A}
-  "\u1eb0": "\u0041\u0306\u0300",
-  // Ằ = \u\`{A}
-  "\u1eb4": "\u0041\u0306\u0303",
-  // Ẵ = \u\~{A}
-  "\u01cd": "\u0041\u030c",
-  // Ǎ = \v{A}
-  "\u00c2": "\u0041\u0302",
-  // Â = \^{A}
-  "\u1ea4": "\u0041\u0302\u0301",
-  // Ấ = \^\'{A}
-  "\u1ea6": "\u0041\u0302\u0300",
-  // Ầ = \^\`{A}
-  "\u1eaa": "\u0041\u0302\u0303",
-  // Ẫ = \^\~{A}
-  "\u0226": "\u0041\u0307",
-  // Ȧ = \.{A}
-  "\u01e0": "\u0041\u0307\u0304",
-  // Ǡ = \.\={A}
-  "\u00c5": "\u0041\u030a",
-  // Å = \r{A}
-  "\u01fa": "\u0041\u030a\u0301",
-  // Ǻ = \r\'{A}
-  "\u1e02": "\u0042\u0307",
-  // Ḃ = \.{B}
-  "\u0106": "\u0043\u0301",
-  // Ć = \'{C}
-  "\u010c": "\u0043\u030c",
-  // Č = \v{C}
-  "\u0108": "\u0043\u0302",
-  // Ĉ = \^{C}
-  "\u010a": "\u0043\u0307",
-  // Ċ = \.{C}
-  "\u010e": "\u0044\u030c",
-  // Ď = \v{D}
-  "\u1e0a": "\u0044\u0307",
-  // Ḋ = \.{D}
-  "\u00c9": "\u0045\u0301",
-  // É = \'{E}
-  "\u00c8": "\u0045\u0300",
-  // È = \`{E}
-  "\u00cb": "\u0045\u0308",
-  // Ë = \"{E}
-  "\u1ebc": "\u0045\u0303",
-  // Ẽ = \~{E}
-  "\u0112": "\u0045\u0304",
-  // Ē = \={E}
-  "\u1e16": "\u0045\u0304\u0301",
-  // Ḗ = \=\'{E}
-  "\u1e14": "\u0045\u0304\u0300",
-  // Ḕ = \=\`{E}
-  "\u0114": "\u0045\u0306",
-  // Ĕ = \u{E}
-  "\u011a": "\u0045\u030c",
-  // Ě = \v{E}
-  "\u00ca": "\u0045\u0302",
-  // Ê = \^{E}
-  "\u1ebe": "\u0045\u0302\u0301",
-  // Ế = \^\'{E}
-  "\u1ec0": "\u0045\u0302\u0300",
-  // Ề = \^\`{E}
-  "\u1ec4": "\u0045\u0302\u0303",
-  // Ễ = \^\~{E}
-  "\u0116": "\u0045\u0307",
-  // Ė = \.{E}
-  "\u1e1e": "\u0046\u0307",
-  // Ḟ = \.{F}
-  "\u01f4": "\u0047\u0301",
-  // Ǵ = \'{G}
-  "\u1e20": "\u0047\u0304",
-  // Ḡ = \={G}
-  "\u011e": "\u0047\u0306",
-  // Ğ = \u{G}
-  "\u01e6": "\u0047\u030c",
-  // Ǧ = \v{G}
-  "\u011c": "\u0047\u0302",
-  // Ĝ = \^{G}
-  "\u0120": "\u0047\u0307",
-  // Ġ = \.{G}
-  "\u1e26": "\u0048\u0308",
-  // Ḧ = \"{H}
-  "\u021e": "\u0048\u030c",
-  // Ȟ = \v{H}
-  "\u0124": "\u0048\u0302",
-  // Ĥ = \^{H}
-  "\u1e22": "\u0048\u0307",
-  // Ḣ = \.{H}
-  "\u00cd": "\u0049\u0301",
-  // Í = \'{I}
-  "\u00cc": "\u0049\u0300",
-  // Ì = \`{I}
-  "\u00cf": "\u0049\u0308",
-  // Ï = \"{I}
-  "\u1e2e": "\u0049\u0308\u0301",
-  // Ḯ = \"\'{I}
-  "\u0128": "\u0049\u0303",
-  // Ĩ = \~{I}
-  "\u012a": "\u0049\u0304",
-  // Ī = \={I}
-  "\u012c": "\u0049\u0306",
-  // Ĭ = \u{I}
-  "\u01cf": "\u0049\u030c",
-  // Ǐ = \v{I}
-  "\u00ce": "\u0049\u0302",
-  // Î = \^{I}
-  "\u0130": "\u0049\u0307",
-  // İ = \.{I}
-  "\u0134": "\u004a\u0302",
-  // Ĵ = \^{J}
-  "\u1e30": "\u004b\u0301",
-  // Ḱ = \'{K}
-  "\u01e8": "\u004b\u030c",
-  // Ǩ = \v{K}
-  "\u0139": "\u004c\u0301",
-  // Ĺ = \'{L}
-  "\u013d": "\u004c\u030c",
-  // Ľ = \v{L}
-  "\u1e3e": "\u004d\u0301",
-  // Ḿ = \'{M}
-  "\u1e40": "\u004d\u0307",
-  // Ṁ = \.{M}
-  "\u0143": "\u004e\u0301",
-  // Ń = \'{N}
-  "\u01f8": "\u004e\u0300",
-  // Ǹ = \`{N}
-  "\u00d1": "\u004e\u0303",
-  // Ñ = \~{N}
-  "\u0147": "\u004e\u030c",
-  // Ň = \v{N}
-  "\u1e44": "\u004e\u0307",
-  // Ṅ = \.{N}
-  "\u00d3": "\u004f\u0301",
-  // Ó = \'{O}
-  "\u00d2": "\u004f\u0300",
-  // Ò = \`{O}
-  "\u00d6": "\u004f\u0308",
-  // Ö = \"{O}
-  "\u022a": "\u004f\u0308\u0304",
-  // Ȫ = \"\={O}
-  "\u00d5": "\u004f\u0303",
-  // Õ = \~{O}
-  "\u1e4c": "\u004f\u0303\u0301",
-  // Ṍ = \~\'{O}
-  "\u1e4e": "\u004f\u0303\u0308",
-  // Ṏ = \~\"{O}
-  "\u022c": "\u004f\u0303\u0304",
-  // Ȭ = \~\={O}
-  "\u014c": "\u004f\u0304",
-  // Ō = \={O}
-  "\u1e52": "\u004f\u0304\u0301",
-  // Ṓ = \=\'{O}
-  "\u1e50": "\u004f\u0304\u0300",
-  // Ṑ = \=\`{O}
-  "\u014e": "\u004f\u0306",
-  // Ŏ = \u{O}
-  "\u01d1": "\u004f\u030c",
-  // Ǒ = \v{O}
-  "\u00d4": "\u004f\u0302",
-  // Ô = \^{O}
-  "\u1ed0": "\u004f\u0302\u0301",
-  // Ố = \^\'{O}
-  "\u1ed2": "\u004f\u0302\u0300",
-  // Ồ = \^\`{O}
-  "\u1ed6": "\u004f\u0302\u0303",
-  // Ỗ = \^\~{O}
-  "\u022e": "\u004f\u0307",
-  // Ȯ = \.{O}
-  "\u0230": "\u004f\u0307\u0304",
-  // Ȱ = \.\={O}
-  "\u0150": "\u004f\u030b",
-  // Ő = \H{O}
-  "\u1e54": "\u0050\u0301",
-  // Ṕ = \'{P}
-  "\u1e56": "\u0050\u0307",
-  // Ṗ = \.{P}
-  "\u0154": "\u0052\u0301",
-  // Ŕ = \'{R}
-  "\u0158": "\u0052\u030c",
-  // Ř = \v{R}
-  "\u1e58": "\u0052\u0307",
-  // Ṙ = \.{R}
-  "\u015a": "\u0053\u0301",
-  // Ś = \'{S}
-  "\u1e64": "\u0053\u0301\u0307",
-  // Ṥ = \'\.{S}
-  "\u0160": "\u0053\u030c",
-  // Š = \v{S}
-  "\u1e66": "\u0053\u030c\u0307",
-  // Ṧ = \v\.{S}
-  "\u015c": "\u0053\u0302",
-  // Ŝ = \^{S}
-  "\u1e60": "\u0053\u0307",
-  // Ṡ = \.{S}
-  "\u0164": "\u0054\u030c",
-  // Ť = \v{T}
-  "\u1e6a": "\u0054\u0307",
-  // Ṫ = \.{T}
-  "\u00da": "\u0055\u0301",
-  // Ú = \'{U}
-  "\u00d9": "\u0055\u0300",
-  // Ù = \`{U}
-  "\u00dc": "\u0055\u0308",
-  // Ü = \"{U}
-  "\u01d7": "\u0055\u0308\u0301",
-  // Ǘ = \"\'{U}
-  "\u01db": "\u0055\u0308\u0300",
-  // Ǜ = \"\`{U}
-  "\u01d5": "\u0055\u0308\u0304",
-  // Ǖ = \"\={U}
-  "\u01d9": "\u0055\u0308\u030c",
-  // Ǚ = \"\v{U}
-  "\u0168": "\u0055\u0303",
-  // Ũ = \~{U}
-  "\u1e78": "\u0055\u0303\u0301",
-  // Ṹ = \~\'{U}
-  "\u016a": "\u0055\u0304",
-  // Ū = \={U}
-  "\u1e7a": "\u0055\u0304\u0308",
-  // Ṻ = \=\"{U}
-  "\u016c": "\u0055\u0306",
-  // Ŭ = \u{U}
-  "\u01d3": "\u0055\u030c",
-  // Ǔ = \v{U}
-  "\u00db": "\u0055\u0302",
-  // Û = \^{U}
-  "\u016e": "\u0055\u030a",
-  // Ů = \r{U}
-  "\u0170": "\u0055\u030b",
-  // Ű = \H{U}
-  "\u1e7c": "\u0056\u0303",
-  // Ṽ = \~{V}
-  "\u1e82": "\u0057\u0301",
-  // Ẃ = \'{W}
-  "\u1e80": "\u0057\u0300",
-  // Ẁ = \`{W}
-  "\u1e84": "\u0057\u0308",
-  // Ẅ = \"{W}
-  "\u0174": "\u0057\u0302",
-  // Ŵ = \^{W}
-  "\u1e86": "\u0057\u0307",
-  // Ẇ = \.{W}
-  "\u1e8c": "\u0058\u0308",
-  // Ẍ = \"{X}
-  "\u1e8a": "\u0058\u0307",
-  // Ẋ = \.{X}
-  "\u00dd": "\u0059\u0301",
-  // Ý = \'{Y}
-  "\u1ef2": "\u0059\u0300",
-  // Ỳ = \`{Y}
-  "\u0178": "\u0059\u0308",
-  // Ÿ = \"{Y}
-  "\u1ef8": "\u0059\u0303",
-  // Ỹ = \~{Y}
-  "\u0232": "\u0059\u0304",
-  // Ȳ = \={Y}
-  "\u0176": "\u0059\u0302",
-  // Ŷ = \^{Y}
-  "\u1e8e": "\u0059\u0307",
-  // Ẏ = \.{Y}
-  "\u0179": "\u005a\u0301",
-  // Ź = \'{Z}
-  "\u017d": "\u005a\u030c",
-  // Ž = \v{Z}
-  "\u1e90": "\u005a\u0302",
-  // Ẑ = \^{Z}
-  "\u017b": "\u005a\u0307",
-  // Ż = \.{Z}
-  "\u03ac": "\u03b1\u0301",
-  // ά = \'{α}
-  "\u1f70": "\u03b1\u0300",
-  // ὰ = \`{α}
-  "\u1fb1": "\u03b1\u0304",
-  // ᾱ = \={α}
-  "\u1fb0": "\u03b1\u0306",
-  // ᾰ = \u{α}
-  "\u03ad": "\u03b5\u0301",
-  // έ = \'{ε}
-  "\u1f72": "\u03b5\u0300",
-  // ὲ = \`{ε}
-  "\u03ae": "\u03b7\u0301",
-  // ή = \'{η}
-  "\u1f74": "\u03b7\u0300",
-  // ὴ = \`{η}
-  "\u03af": "\u03b9\u0301",
-  // ί = \'{ι}
-  "\u1f76": "\u03b9\u0300",
-  // ὶ = \`{ι}
-  "\u03ca": "\u03b9\u0308",
-  // ϊ = \"{ι}
-  "\u0390": "\u03b9\u0308\u0301",
-  // ΐ = \"\'{ι}
-  "\u1fd2": "\u03b9\u0308\u0300",
-  // ῒ = \"\`{ι}
-  "\u1fd1": "\u03b9\u0304",
-  // ῑ = \={ι}
-  "\u1fd0": "\u03b9\u0306",
-  // ῐ = \u{ι}
-  "\u03cc": "\u03bf\u0301",
-  // ό = \'{ο}
-  "\u1f78": "\u03bf\u0300",
-  // ὸ = \`{ο}
-  "\u03cd": "\u03c5\u0301",
-  // ύ = \'{υ}
-  "\u1f7a": "\u03c5\u0300",
-  // ὺ = \`{υ}
-  "\u03cb": "\u03c5\u0308",
-  // ϋ = \"{υ}
-  "\u03b0": "\u03c5\u0308\u0301",
-  // ΰ = \"\'{υ}
-  "\u1fe2": "\u03c5\u0308\u0300",
-  // ῢ = \"\`{υ}
-  "\u1fe1": "\u03c5\u0304",
-  // ῡ = \={υ}
-  "\u1fe0": "\u03c5\u0306",
-  // ῠ = \u{υ}
-  "\u03ce": "\u03c9\u0301",
-  // ώ = \'{ω}
-  "\u1f7c": "\u03c9\u0300",
-  // ὼ = \`{ω}
-  "\u038e": "\u03a5\u0301",
-  // Ύ = \'{Υ}
-  "\u1fea": "\u03a5\u0300",
-  // Ὺ = \`{Υ}
-  "\u03ab": "\u03a5\u0308",
-  // Ϋ = \"{Υ}
-  "\u1fe9": "\u03a5\u0304",
-  // Ῡ = \={Υ}
-  "\u1fe8": "\u03a5\u0306",
-  // Ῠ = \u{Υ}
-  "\u038f": "\u03a9\u0301",
-  // Ώ = \'{Ω}
-  "\u1ffa": "\u03a9\u0300" // Ὼ = \`{Ω}
-
-};
-
-/* eslint no-constant-condition:0 */
-
-/**
- * This file contains the parser used to parse out a TeX expression from the
- * input. Since TeX isn't context-free, standard parsers don't work particularly
- * well.
- *
- * The strategy of this parser is as such:
- *
- * The main functions (the `.parse...` ones) take a position in the current
- * parse string to parse tokens from. The lexer (found in Lexer.js, stored at
- * this.gullet.lexer) also supports pulling out tokens at arbitrary places. When
- * individual tokens are needed at a position, the lexer is called to pull out a
- * token, which is then used.
- *
- * The parser has a property called "mode" indicating the mode that
- * the parser is currently in. Currently it has to be one of "math" or
- * "text", which denotes whether the current environment is a math-y
- * one or a text-y one (e.g. inside \text). Currently, this serves to
- * limit the functions which can be used in text mode.
- *
- * The main functions then return an object which contains the useful data that
- * was parsed at its given point, and a new position at the end of the parsed
- * data. The main functions can call each other and continue the parsing by
- * using the returned position as a new starting point.
- *
- * There are also extra `.handle...` functions, which pull out some reused
- * functionality into self-contained functions.
- *
- * The functions return ParseNodes.
- */
-class Parser {
-  constructor(input, settings) {
-    this.mode = void 0;
-    this.gullet = void 0;
-    this.settings = void 0;
-    this.leftrightDepth = void 0;
-    this.nextToken = void 0;
-    // Start in math mode
-    this.mode = "math"; // Create a new macro expander (gullet) and (indirectly via that) also a
-    // new lexer (mouth) for this parser (stomach, in the language of TeX)
-
-    this.gullet = new MacroExpander(input, settings, this.mode); // Store the settings for use in parsing
-
-    this.settings = settings; // Count leftright depth (for \middle errors)
-
-    this.leftrightDepth = 0;
-  }
-  /**
-   * Checks a result to make sure it has the right type, and throws an
-   * appropriate error otherwise.
-   */
-
-
-  expect(text, consume) {
-    if (consume === void 0) {
-      consume = true;
-    }
-
-    if (this.fetch().text !== text) {
-      throw new ParseError(`Expected '${text}', got '${this.fetch().text}'`, this.fetch());
-    }
-
-    if (consume) {
-      this.consume();
-    }
-  }
-  /**
-   * Discards the current lookahead token, considering it consumed.
-   */
-
-
-  consume() {
-    this.nextToken = null;
-  }
-  /**
-   * Return the current lookahead token, or if there isn't one (at the
-   * beginning, or if the previous lookahead token was consume()d),
-   * fetch the next token as the new lookahead token and return it.
-   */
-
-
-  fetch() {
-    if (this.nextToken == null) {
-      this.nextToken = this.gullet.expandNextToken();
-    }
-
-    return this.nextToken;
-  }
-  /**
-   * Switches between "text" and "math" modes.
-   */
-
-
-  switchMode(newMode) {
-    this.mode = newMode;
-    this.gullet.switchMode(newMode);
-  }
-  /**
-   * Main parsing function, which parses an entire input.
-   */
-
-
-  parse() {
-    // Create a group namespace for the math expression.
-    // (LaTeX creates a new group for every $...$, $$...$$, \[...\].)
-    this.gullet.beginGroup(); // Use old \color behavior (same as LaTeX's \textcolor) if requested.
-    // We do this within the group for the math expression, so it doesn't
-    // pollute settings.macros.
-
-    if (this.settings.colorIsTextColor) {
-      this.gullet.macros.set("\\color", "\\textcolor");
-    } // Try to parse the input
-
-
-    const parse = this.parseExpression(false); // If we succeeded, make sure there's an EOF at the end
-
-    this.expect("EOF"); // End the group namespace for the expression
-
-    this.gullet.endGroup();
-    return parse;
-  }
-
-  parseExpression(breakOnInfix, breakOnTokenText) {
-    const body = []; // Keep adding atoms to the body until we can't parse any more atoms (either
-    // we reached the end, a }, or a \right)
-
-    while (true) {
-      // Ignore spaces in math mode
-      if (this.mode === "math") {
-        this.consumeSpaces();
-      }
-
-      const lex = this.fetch();
-
-      if (Parser.endOfExpression.indexOf(lex.text) !== -1) {
-        break;
-      }
-
-      if (breakOnTokenText && lex.text === breakOnTokenText) {
-        break;
-      }
-
-      if (breakOnInfix && functions[lex.text] && functions[lex.text].infix) {
-        break;
-      }
-
-      const atom = this.parseAtom(breakOnTokenText);
-
-      if (!atom) {
-        break;
-      }
-
-      body.push(atom);
-    }
-
-    if (this.mode === "text") {
-      this.formLigatures(body);
-    }
-
-    return this.handleInfixNodes(body);
-  }
-  /**
-   * Rewrites infix operators such as \over with corresponding commands such
-   * as \frac.
-   *
-   * There can only be one infix operator per group.  If there's more than one
-   * then the expression is ambiguous.  This can be resolved by adding {}.
-   */
-
-
-  handleInfixNodes(body) {
-    let overIndex = -1;
-    let funcName;
-
-    for (let i = 0; i < body.length; i++) {
-      const node = checkNodeType(body[i], "infix");
-
-      if (node) {
-        if (overIndex !== -1) {
-          throw new ParseError("only one infix operator per group", node.token);
-        }
-
-        overIndex = i;
-        funcName = node.replaceWith;
-      }
-    }
-
-    if (overIndex !== -1 && funcName) {
-      let numerNode;
-      let denomNode;
-      const numerBody = body.slice(0, overIndex);
-      const denomBody = body.slice(overIndex + 1);
-
-      if (numerBody.length === 1 && numerBody[0].type === "ordgroup") {
-        numerNode = numerBody[0];
-      } else {
-        numerNode = {
-          type: "ordgroup",
-          mode: this.mode,
-          body: numerBody
-        };
-      }
-
-      if (denomBody.length === 1 && denomBody[0].type === "ordgroup") {
-        denomNode = denomBody[0];
-      } else {
-        denomNode = {
-          type: "ordgroup",
-          mode: this.mode,
-          body: denomBody
-        };
-      }
-
-      let node;
-
-      if (funcName === "\\\\abovefrac") {
-        node = this.callFunction(funcName, [numerNode, body[overIndex], denomNode], []);
-      } else {
-        node = this.callFunction(funcName, [numerNode, denomNode], []);
-      }
-
-      return [node];
-    } else {
-      return body;
-    }
-  } // The greediness of a superscript or subscript
-
-
-  /**
-   * Handle a subscript or superscript with nice errors.
-   */
-  handleSupSubscript(name) {
-    const symbolToken = this.fetch();
-    const symbol = symbolToken.text;
-    this.consume();
-    const group = this.parseGroup(name, false, Parser.SUPSUB_GREEDINESS, undefined, undefined, true); // ignore spaces before sup/subscript argument
-
-    if (!group) {
-      throw new ParseError("Expected group after '" + symbol + "'", symbolToken);
-    }
-
-    return group;
-  }
-  /**
-   * Converts the textual input of an unsupported command into a text node
-   * contained within a color node whose color is determined by errorColor
-   */
-
-
-  formatUnsupportedCmd(text) {
-    const textordArray = [];
-
-    for (let i = 0; i < text.length; i++) {
-      textordArray.push({
-        type: "textord",
-        mode: "text",
-        text: text[i]
-      });
-    }
-
-    const textNode = {
-      type: "text",
-      mode: this.mode,
-      body: textordArray
-    };
-    const colorNode = {
-      type: "color",
-      mode: this.mode,
-      color: this.settings.errorColor,
-      body: [textNode]
-    };
-    return colorNode;
-  }
-  /**
-   * Parses a group with optional super/subscripts.
-   */
-
-
-  parseAtom(breakOnTokenText) {
-    // The body of an atom is an implicit group, so that things like
-    // \left(x\right)^2 work correctly.
-    const base = this.parseGroup("atom", false, null, breakOnTokenText); // In text mode, we don't have superscripts or subscripts
-
-    if (this.mode === "text") {
-      return base;
-    } // Note that base may be empty (i.e. null) at this point.
-
-
-    let superscript;
-    let subscript;
-
-    while (true) {
-      // Guaranteed in math mode, so eat any spaces first.
-      this.consumeSpaces(); // Lex the first token
-
-      const lex = this.fetch();
-
-      if (lex.text === "\\limits" || lex.text === "\\nolimits") {
-        // We got a limit control
-        let opNode = checkNodeType(base, "op");
-
-        if (opNode) {
-          const limits = lex.text === "\\limits";
-          opNode.limits = limits;
-          opNode.alwaysHandleSupSub = true;
-        } else {
-          opNode = checkNodeType(base, "operatorname");
-
-          if (opNode && opNode.alwaysHandleSupSub) {
-            const limits = lex.text === "\\limits";
-            opNode.limits = limits;
-          } else {
-            throw new ParseError("Limit controls must follow a math operator", lex);
-          }
-        }
-
-        this.consume();
-      } else if (lex.text === "^") {
-        // We got a superscript start
-        if (superscript) {
-          throw new ParseError("Double superscript", lex);
-        }
-
-        superscript = this.handleSupSubscript("superscript");
-      } else if (lex.text === "_") {
-        // We got a subscript start
-        if (subscript) {
-          throw new ParseError("Double subscript", lex);
-        }
-
-        subscript = this.handleSupSubscript("subscript");
-      } else if (lex.text === "'") {
-        // We got a prime
-        if (superscript) {
-          throw new ParseError("Double superscript", lex);
-        }
-
-        const prime = {
-          type: "textord",
-          mode: this.mode,
-          text: "\\prime"
-        }; // Many primes can be grouped together, so we handle this here
-
-        const primes = [prime];
-        this.consume(); // Keep lexing tokens until we get something that's not a prime
-
-        while (this.fetch().text === "'") {
-          // For each one, add another prime to the list
-          primes.push(prime);
-          this.consume();
-        } // If there's a superscript following the primes, combine that
-        // superscript in with the primes.
-
-
-        if (this.fetch().text === "^") {
-          primes.push(this.handleSupSubscript("superscript"));
-        } // Put everything into an ordgroup as the superscript
-
-
-        superscript = {
-          type: "ordgroup",
-          mode: this.mode,
-          body: primes
-        };
-      } else {
-        // If it wasn't ^, _, or ', stop parsing super/subscripts
-        break;
-      }
-    } // Base must be set if superscript or subscript are set per logic above,
-    // but need to check here for type check to pass.
-
-
-    if (superscript || subscript) {
-      // If we got either a superscript or subscript, create a supsub
-      return {
-        type: "supsub",
-        mode: this.mode,
-        base: base,
-        sup: superscript,
-        sub: subscript
-      };
-    } else {
-      // Otherwise return the original body
-      return base;
-    }
-  }
-  /**
-   * Parses an entire function, including its base and all of its arguments.
-   */
-
-
-  parseFunction(breakOnTokenText, name, // For error reporting.
-  greediness) {
-    const token = this.fetch();
-    const func = token.text;
-    const funcData = functions[func];
-
-    if (!funcData) {
-      return null;
-    }
-
-    this.consume(); // consume command token
-
-    if (greediness != null && funcData.greediness <= greediness) {
-      throw new ParseError("Got function '" + func + "' with no arguments" + (name ? " as " + name : ""), token);
-    } else if (this.mode === "text" && !funcData.allowedInText) {
-      throw new ParseError("Can't use function '" + func + "' in text mode", token);
-    } else if (this.mode === "math" && funcData.allowedInMath === false) {
-      throw new ParseError("Can't use function '" + func + "' in math mode", token);
-    }
-
-    const _this$parseArguments = this.parseArguments(func, funcData),
-          args = _this$parseArguments.args,
-          optArgs = _this$parseArguments.optArgs;
-
-    return this.callFunction(func, args, optArgs, token, breakOnTokenText);
-  }
-  /**
-   * Call a function handler with a suitable context and arguments.
-   */
-
-
-  callFunction(name, args, optArgs, token, breakOnTokenText) {
-    const context = {
-      funcName: name,
-      parser: this,
-      token,
-      breakOnTokenText
-    };
-    const func = functions[name];
-
-    if (func && func.handler) {
-      return func.handler(context, args, optArgs);
-    } else {
-      throw new ParseError(`No function handler for ${name}`);
-    }
-  }
-  /**
-   * Parses the arguments of a function or environment
-   */
-
-
-  parseArguments(func, // Should look like "\name" or "\begin{name}".
-  funcData) {
-    const totalArgs = funcData.numArgs + funcData.numOptionalArgs;
-
-    if (totalArgs === 0) {
-      return {
-        args: [],
-        optArgs: []
-      };
-    }
-
-    const baseGreediness = funcData.greediness;
-    const args = [];
-    const optArgs = [];
-
-    for (let i = 0; i < totalArgs; i++) {
-      const argType = funcData.argTypes && funcData.argTypes[i];
-      const isOptional = i < funcData.numOptionalArgs; // Ignore spaces between arguments.  As the TeXbook says:
-      // "After you have said ‘\def\row#1#2{...}’, you are allowed to
-      //  put spaces between the arguments (e.g., ‘\row x n’), because
-      //  TeX doesn’t use single spaces as undelimited arguments."
-
-      const consumeSpaces = i > 0 && !isOptional || // Also consume leading spaces in math mode, as parseSymbol
-      // won't know what to do with them.  This can only happen with
-      // macros, e.g. \frac\foo\foo where \foo expands to a space symbol.
-      // In LaTeX, the \foo's get treated as (blank) arguments.
-      // In KaTeX, for now, both spaces will get consumed.
-      // TODO(edemaine)
-      i === 0 && !isOptional && this.mode === "math";
-      const arg = this.parseGroupOfType(`argument to '${func}'`, argType, isOptional, baseGreediness, consumeSpaces);
-
-      if (!arg) {
-        if (isOptional) {
-          optArgs.push(null);
-          continue;
-        }
-
-        throw new ParseError(`Expected group after '${func}'`, this.fetch());
-      }
-
-      (isOptional ? optArgs : args).push(arg);
-    }
-
-    return {
-      args,
-      optArgs
-    };
-  }
-  /**
-   * Parses a group when the mode is changing.
-   */
-
-
-  parseGroupOfType(name, type, optional, greediness, consumeSpaces) {
-    switch (type) {
-      case "color":
-        if (consumeSpaces) {
-          this.consumeSpaces();
-        }
-
-        return this.parseColorGroup(optional);
-
-      case "size":
-        if (consumeSpaces) {
-          this.consumeSpaces();
-        }
-
-        return this.parseSizeGroup(optional);
-
-      case "url":
-        return this.parseUrlGroup(optional, consumeSpaces);
-
-      case "math":
-      case "text":
-        return this.parseGroup(name, optional, greediness, undefined, type, consumeSpaces);
-
-      case "hbox":
-        {
-          // hbox argument type wraps the argument in the equivalent of
-          // \hbox, which is like \text but switching to \textstyle size.
-          const group = this.parseGroup(name, optional, greediness, undefined, "text", consumeSpaces);
-
-          if (!group) {
-            return group;
-          }
-
-          const styledGroup = {
-            type: "styling",
-            mode: group.mode,
-            body: [group],
-            style: "text" // simulate \textstyle
-
-          };
-          return styledGroup;
-        }
-
-      case "raw":
-        {
-          if (consumeSpaces) {
-            this.consumeSpaces();
-          }
-
-          if (optional && this.fetch().text === "{") {
-            return null;
-          }
-
-          const token = this.parseStringGroup("raw", optional, true);
-
-          if (token) {
-            return {
-              type: "raw",
-              mode: "text",
-              string: token.text
-            };
-          } else {
-            throw new ParseError("Expected raw group", this.fetch());
-          }
-        }
-
-      case "original":
-      case null:
-      case undefined:
-        return this.parseGroup(name, optional, greediness, undefined, undefined, consumeSpaces);
-
-      default:
-        throw new ParseError("Unknown group type as " + name, this.fetch());
-    }
-  }
-  /**
-   * Discard any space tokens, fetching the next non-space token.
-   */
-
-
-  consumeSpaces() {
-    while (this.fetch().text === " ") {
-      this.consume();
-    }
-  }
-  /**
-   * Parses a group, essentially returning the string formed by the
-   * brace-enclosed tokens plus some position information.
-   */
-
-
-  parseStringGroup(modeName, // Used to describe the mode in error messages.
-  optional, raw) {
-    const groupBegin = optional ? "[" : "{";
-    const groupEnd = optional ? "]" : "}";
-    const beginToken = this.fetch();
-
-    if (beginToken.text !== groupBegin) {
-      if (optional) {
-        return null;
-      } else if (raw && beginToken.text !== "EOF" && /[^{}[\]]/.test(beginToken.text)) {
-        this.consume();
-        return beginToken;
-      }
-    }
-
-    const outerMode = this.mode;
-    this.mode = "text";
-    this.expect(groupBegin);
-    let str = "";
-    const firstToken = this.fetch();
-    let nested = 0; // allow nested braces in raw string group
-
-    let lastToken = firstToken;
-    let nextToken;
-
-    while ((nextToken = this.fetch()).text !== groupEnd || raw && nested > 0) {
-      switch (nextToken.text) {
-        case "EOF":
-          throw new ParseError("Unexpected end of input in " + modeName, firstToken.range(lastToken, str));
-
-        case groupBegin:
-          nested++;
-          break;
-
-        case groupEnd:
-          nested--;
-          break;
-      }
-
-      lastToken = nextToken;
-      str += lastToken.text;
-      this.consume();
-    }
-
-    this.expect(groupEnd);
-    this.mode = outerMode;
-    return firstToken.range(lastToken, str);
-  }
-  /**
-   * Parses a regex-delimited group: the largest sequence of tokens
-   * whose concatenated strings match `regex`. Returns the string
-   * formed by the tokens plus some position information.
-   */
-
-
-  parseRegexGroup(regex, modeName) {
-    const outerMode = this.mode;
-    this.mode = "text";
-    const firstToken = this.fetch();
-    let lastToken = firstToken;
-    let str = "";
-    let nextToken;
-
-    while ((nextToken = this.fetch()).text !== "EOF" && regex.test(str + nextToken.text)) {
-      lastToken = nextToken;
-      str += lastToken.text;
-      this.consume();
-    }
-
-    if (str === "") {
-      throw new ParseError("Invalid " + modeName + ": '" + firstToken.text + "'", firstToken);
-    }
-
-    this.mode = outerMode;
-    return firstToken.range(lastToken, str);
-  }
-  /**
-   * Parses a color description.
-   */
-
-
-  parseColorGroup(optional) {
-    const res = this.parseStringGroup("color", optional);
-
-    if (!res) {
-      return null;
-    }
-
-    const match = /^(#[a-f0-9]{3}|#?[a-f0-9]{6}|[a-z]+)$/i.exec(res.text);
-
-    if (!match) {
-      throw new ParseError("Invalid color: '" + res.text + "'", res);
-    }
-
-    let color = match[0];
-
-    if (/^[0-9a-f]{6}$/i.test(color)) {
-      // We allow a 6-digit HTML color spec without a leading "#".
-      // This follows the xcolor package's HTML color model.
-      // Predefined color names are all missed by this RegEx pattern.
-      color = "#" + color;
-    }
-
-    return {
-      type: "color-token",
-      mode: this.mode,
-      color
-    };
-  }
-  /**
-   * Parses a size specification, consisting of magnitude and unit.
-   */
-
-
-  parseSizeGroup(optional) {
-    let res;
-    let isBlank = false;
-
-    if (!optional && this.fetch().text !== "{") {
-      res = this.parseRegexGroup(/^[-+]? *(?:$|\d+|\d+\.\d*|\.\d*) *[a-z]{0,2} *$/, "size");
-    } else {
-      res = this.parseStringGroup("size", optional);
-    }
-
-    if (!res) {
-      return null;
-    }
-
-    if (!optional && res.text.length === 0) {
-      // Because we've tested for what is !optional, this block won't
-      // affect \kern, \hspace, etc. It will capture the mandatory arguments
-      // to \genfrac and \above.
-      res.text = "0pt"; // Enable \above{}
-
-      isBlank = true; // This is here specifically for \genfrac
-    }
-
-    const match = /([-+]?) *(\d+(?:\.\d*)?|\.\d+) *([a-z]{2})/.exec(res.text);
-
-    if (!match) {
-      throw new ParseError("Invalid size: '" + res.text + "'", res);
-    }
-
-    const data = {
-      number: +(match[1] + match[2]),
-      // sign + magnitude, cast to number
-      unit: match[3]
-    };
-
-    if (!validUnit(data)) {
-      throw new ParseError("Invalid unit: '" + data.unit + "'", res);
-    }
-
-    return {
-      type: "size",
-      mode: this.mode,
-      value: data,
-      isBlank
-    };
-  }
-  /**
-   * Parses an URL, checking escaped letters and allowed protocols,
-   * and setting the catcode of % as an active character (as in \hyperref).
-   */
-
-
-  parseUrlGroup(optional, consumeSpaces) {
-    this.gullet.lexer.setCatcode("%", 13); // active character
-
-    const res = this.parseStringGroup("url", optional, true); // get raw string
-
-    this.gullet.lexer.setCatcode("%", 14); // comment character
-
-    if (!res) {
-      return null;
-    } // hyperref package allows backslashes alone in href, but doesn't
-    // generate valid links in such cases; we interpret this as
-    // "undefined" behaviour, and keep them as-is. Some browser will
-    // replace backslashes with forward slashes.
-
-
-    const url = res.text.replace(/\\([#$%&~_^{}])/g, '$1');
-    return {
-      type: "url",
-      mode: this.mode,
-      url
-    };
-  }
-  /**
-   * If `optional` is false or absent, this parses an ordinary group,
-   * which is either a single nucleus (like "x") or an expression
-   * in braces (like "{x+y}") or an implicit group, a group that starts
-   * at the current position, and ends right before a higher explicit
-   * group ends, or at EOF.
-   * If `optional` is true, it parses either a bracket-delimited expression
-   * (like "[x+y]") or returns null to indicate the absence of a
-   * bracket-enclosed group.
-   * If `mode` is present, switches to that mode while parsing the group,
-   * and switches back after.
-   */
-
-
-  parseGroup(name, // For error reporting.
-  optional, greediness, breakOnTokenText, mode, consumeSpaces) {
-    // Switch to specified mode
-    const outerMode = this.mode;
-
-    if (mode) {
-      this.switchMode(mode);
-    } // Consume spaces if requested, crucially *after* we switch modes,
-    // so that the next non-space token is parsed in the correct mode.
-
-
-    if (consumeSpaces) {
-      this.consumeSpaces();
-    } // Get first token
-
-
-    const firstToken = this.fetch();
-    const text = firstToken.text;
-    let result; // Try to parse an open brace or \begingroup
-
-    if (optional ? text === "[" : text === "{" || text === "\\begingroup") {
-      this.consume();
-      const groupEnd = Parser.endOfGroup[text]; // Start a new group namespace
-
-      this.gullet.beginGroup(); // If we get a brace, parse an expression
-
-      const expression = this.parseExpression(false, groupEnd);
-      const lastToken = this.fetch(); // Check that we got a matching closing brace
-
-      this.expect(groupEnd); // End group namespace
-
-      this.gullet.endGroup();
-      result = {
-        type: "ordgroup",
-        mode: this.mode,
-        loc: SourceLocation.range(firstToken, lastToken),
-        body: expression,
-        // A group formed by \begingroup...\endgroup is a semi-simple group
-        // which doesn't affect spacing in math mode, i.e., is transparent.
-        // https://tex.stackexchange.com/questions/1930/when-should-one-
-        // use-begingroup-instead-of-bgroup
-        semisimple: text === "\\begingroup" || undefined
-      };
-    } else if (optional) {
-      // Return nothing for an optional group
-      result = null;
-    } else {
-      // If there exists a function with this name, parse the function.
-      // Otherwise, just return a nucleus
-      result = this.parseFunction(breakOnTokenText, name, greediness) || this.parseSymbol();
-
-      if (result == null && text[0] === "\\" && !implicitCommands.hasOwnProperty(text)) {
-        if (this.settings.throwOnError) {
-          throw new ParseError("Undefined control sequence: " + text, firstToken);
-        }
-
-        result = this.formatUnsupportedCmd(text);
-        this.consume();
-      }
-    } // Switch mode back
-
-
-    if (mode) {
-      this.switchMode(outerMode);
-    }
-
-    return result;
-  }
-  /**
-   * Form ligature-like combinations of characters for text mode.
-   * This includes inputs like "--", "---", "``" and "''".
-   * The result will simply replace multiple textord nodes with a single
-   * character in each value by a single textord node having multiple
-   * characters in its value.  The representation is still ASCII source.
-   * The group will be modified in place.
-   */
-
-
-  formLigatures(group) {
-    let n = group.length - 1;
-
-    for (let i = 0; i < n; ++i) {
-      const a = group[i]; // $FlowFixMe: Not every node type has a `text` property.
-
-      const v = a.text;
-
-      if (v === "-" && group[i + 1].text === "-") {
-        if (i + 1 < n && group[i + 2].text === "-") {
-          group.splice(i, 3, {
-            type: "textord",
-            mode: "text",
-            loc: SourceLocation.range(a, group[i + 2]),
-            text: "---"
-          });
-          n -= 2;
-        } else {
-          group.splice(i, 2, {
-            type: "textord",
-            mode: "text",
-            loc: SourceLocation.range(a, group[i + 1]),
-            text: "--"
-          });
-          n -= 1;
-        }
-      }
-
-      if ((v === "'" || v === "`") && group[i + 1].text === v) {
-        group.splice(i, 2, {
-          type: "textord",
-          mode: "text",
-          loc: SourceLocation.range(a, group[i + 1]),
-          text: v + v
-        });
-        n -= 1;
-      }
-    }
-  }
-  /**
-   * Parse a single symbol out of the string. Here, we handle single character
-   * symbols and special functions like \verb.
-   */
-
-
-  parseSymbol() {
-    const nucleus = this.fetch();
-    let text = nucleus.text;
-
-    if (/^\\verb[^a-zA-Z]/.test(text)) {
-      this.consume();
-      let arg = text.slice(5);
-      const star = arg.charAt(0) === "*";
-
-      if (star) {
-        arg = arg.slice(1);
-      } // Lexer's tokenRegex is constructed to always have matching
-      // first/last characters.
-
-
-      if (arg.length < 2 || arg.charAt(0) !== arg.slice(-1)) {
-        throw new ParseError(`\\verb assertion failed --
-                    please report what input caused this bug`);
-      }
-
-      arg = arg.slice(1, -1); // remove first and last char
-
-      return {
-        type: "verb",
-        mode: "text",
-        body: arg,
-        star
-      };
-    } // At this point, we should have a symbol, possibly with accents.
-    // First expand any accented base symbol according to unicodeSymbols.
-
-
-    if (unicodeSymbols.hasOwnProperty(text[0]) && !symbols[this.mode][text[0]]) {
-      // This behavior is not strict (XeTeX-compatible) in math mode.
-      if (this.settings.strict && this.mode === "math") {
-        this.settings.reportNonstrict("unicodeTextInMathMode", `Accented Unicode text character "${text[0]}" used in ` + `math mode`, nucleus);
-      }
-
-      text = unicodeSymbols[text[0]] + text.substr(1);
-    } // Strip off any combining characters
-
-
-    const match = combiningDiacriticalMarksEndRegex.exec(text);
-
-    if (match) {
-      text = text.substring(0, match.index);
-
-      if (text === 'i') {
-        text = '\u0131'; // dotless i, in math and text mode
-      } else if (text === 'j') {
-        text = '\u0237'; // dotless j, in math and text mode
-      }
-    } // Recognize base symbol
-
-
-    let symbol;
-
-    if (symbols[this.mode][text]) {
-      if (this.settings.strict && this.mode === 'math' && extraLatin.indexOf(text) >= 0) {
-        this.settings.reportNonstrict("unicodeTextInMathMode", `Latin-1/Unicode text character "${text[0]}" used in ` + `math mode`, nucleus);
-      }
-
-      const group = symbols[this.mode][text].group;
-      const loc = SourceLocation.range(nucleus);
-      let s;
-
-      if (ATOMS.hasOwnProperty(group)) {
-        // $FlowFixMe
-        const family = group;
-        s = {
-          type: "atom",
-          mode: this.mode,
-          family,
-          loc,
-          text
-        };
-      } else {
-        // $FlowFixMe
-        s = {
-          type: group,
-          mode: this.mode,
-          loc,
-          text
-        };
-      }
-
-      symbol = s;
-    } else if (text.charCodeAt(0) >= 0x80) {
-      // no symbol for e.g. ^
-      if (this.settings.strict) {
-        if (!supportedCodepoint(text.charCodeAt(0))) {
-          this.settings.reportNonstrict("unknownSymbol", `Unrecognized Unicode character "${text[0]}"` + ` (${text.charCodeAt(0)})`, nucleus);
-        } else if (this.mode === "math") {
-          this.settings.reportNonstrict("unicodeTextInMathMode", `Unicode text character "${text[0]}" used in math mode`, nucleus);
-        }
-      } // All nonmathematical Unicode characters are rendered as if they
-      // are in text mode (wrapped in \text) because that's what it
-      // takes to render them in LaTeX.  Setting `mode: this.mode` is
-      // another natural choice (the user requested math mode), but
-      // this makes it more difficult for getCharacterMetrics() to
-      // distinguish Unicode characters without metrics and those for
-      // which we want to simulate the letter M.
-
-
-      symbol = {
-        type: "textord",
-        mode: "text",
-        loc: SourceLocation.range(nucleus),
-        text
-      };
-    } else {
-      return null; // EOF, ^, _, {, }, etc.
-    }
-
-    this.consume(); // Transform combining characters into accents
-
-    if (match) {
-      for (let i = 0; i < match[0].length; i++) {
-        const accent = match[0][i];
-
-        if (!unicodeAccents[accent]) {
-          throw new ParseError(`Unknown accent ' ${accent}'`, nucleus);
-        }
-
-        const command = unicodeAccents[accent][this.mode];
-
-        if (!command) {
-          throw new ParseError(`Accent ${accent} unsupported in ${this.mode} mode`, nucleus);
-        }
-
-        symbol = {
-          type: "accent",
-          mode: this.mode,
-          loc: SourceLocation.range(nucleus),
-          label: command,
-          isStretchy: false,
-          isShifty: true,
-          base: symbol
-        };
-      }
-    }
-
-    return symbol;
-  }
-
-}
-Parser.endOfExpression = ["}", "\\endgroup", "\\end", "\\right", "&"];
-Parser.endOfGroup = {
-  "[": "]",
-  "{": "}",
-  "\\begingroup": "\\endgroup"
-  /**
-   * Parses an "expression", which is a list of atoms.
-   *
-   * `breakOnInfix`: Should the parsing stop when we hit infix nodes? This
-   *                 happens when functions have higher precendence han infix
-   *                 nodes in implicit parses.
-   *
-   * `breakOnTokenText`: The text of the token that the expression should end
-   *                     with, or `null` if something else should end the
-   *                     expression.
-   */
-
-};
-Parser.SUPSUB_GREEDINESS = 1;
-
-/**
- * Provides a single function for parsing an expression using a Parser
- * TODO(emily): Remove this
- */
-
-/**
- * Parses an expression using a Parser, then returns the parsed result.
- */
-const parseTree = function parseTree(toParse, settings) {
-  if (!(typeof toParse === 'string' || toParse instanceof String)) {
-    throw new TypeError('KaTeX can only parse string typed expression');
-  }
-
-  const parser = new Parser(toParse, settings); // Blank out any \df@tag to avoid spurious "Duplicate \tag" errors
-
-  delete parser.gullet.macros.current["\\df@tag"];
-  let tree = parser.parse(); // If the input used \tag, it will set the \df@tag macro to the tag.
-  // In this case, we separately parse the tag and wrap the tree.
-
-  if (parser.gullet.macros.get("\\df@tag")) {
-    if (!settings.displayMode) {
-      throw new ParseError("\\tag works only in display equations");
-    }
-
-    parser.gullet.feed("\\df@tag");
-    tree = [{
-      type: "tag",
-      mode: "text",
-      body: tree,
-      tag: parser.parse()
-    }];
-  }
-
-  return tree;
-};
-
-/* eslint no-console:0 */
-
-/**
- * Parse and build an expression, and place that expression in the DOM node
- * given.
- */
-let render = function render(expression, baseNode, options) {
-  baseNode.textContent = "";
-  const node = renderToDomTree(expression, options).toNode();
-  baseNode.appendChild(node);
-}; // KaTeX's styles don't work properly in quirks mode. Print out an error, and
-// disable rendering.
-
-
-if (typeof document !== "undefined") {
-  if (document.compatMode !== "CSS1Compat") {
-    typeof console !== "undefined" && console.warn("Warning: KaTeX doesn't work in quirks mode. Make sure your " + "website has a suitable doctype.");
-
-    render = function render() {
-      throw new ParseError("KaTeX doesn't work in quirks mode.");
-    };
-  }
-}
-/**
- * Parse and build an expression, and return the markup for that.
- */
-
-
-const renderToString = function renderToString(expression, options) {
-  const markup = renderToDomTree(expression, options).toMarkup();
-  return markup;
-};
-/**
- * Parse an expression and return the parse tree.
- */
-
-
-const generateParseTree = function generateParseTree(expression, options) {
-  const settings = new Settings(options);
-  return parseTree(expression, settings);
-};
-/**
- * If the given error is a KaTeX ParseError and options.throwOnError is false,
- * renders the invalid LaTeX as a span with hover title giving the KaTeX
- * error message.  Otherwise, simply throws the error.
- */
-
-
-const renderError = function renderError(error, expression, options) {
-  if (options.throwOnError || !(error instanceof ParseError)) {
-    throw error;
-  }
-
-  const node = buildCommon.makeSpan(["katex-error"], [new SymbolNode(expression)]);
-  node.setAttribute("title", error.toString());
-  node.setAttribute("style", `color:${options.errorColor}`);
-  return node;
-};
-/**
- * Generates and returns the katex build tree. This is used for advanced
- * use cases (like rendering to custom output).
- */
-
-
-const renderToDomTree = function renderToDomTree(expression, options) {
-  const settings = new Settings(options);
-
-  try {
-    const tree = parseTree(expression, settings);
-    return buildTree(tree, expression, settings);
-  } catch (error) {
-    return renderError(error, expression, settings);
-  }
-};
-/**
- * Generates and returns the katex build tree, with just HTML (no MathML).
- * This is used for advanced use cases (like rendering to custom output).
- */
-
-
-const renderToHTMLTree = function renderToHTMLTree(expression, options) {
-  const settings = new Settings(options);
-
-  try {
-    const tree = parseTree(expression, settings);
-    return buildHTMLTree(tree, expression, settings);
-  } catch (error) {
-    return renderError(error, expression, settings);
-  }
-};
-
-var katex = {
-  /**
-   * Current KaTeX version
-   */
-  version: "0.11.1",
-
-  /**
-   * Renders the given LaTeX into an HTML+MathML combination, and adds
-   * it as a child to the specified DOM node.
-   */
-  render,
-
-  /**
-   * Renders the given LaTeX into an HTML+MathML combination string,
-   * for sending to the client.
-   */
-  renderToString,
-
-  /**
-   * KaTeX error, usually during parsing.
-   */
-  ParseError,
-
-  /**
-   * Parses the given LaTeX into KaTeX's internal parse tree structure,
-   * without rendering to HTML or MathML.
-   *
-   * NOTE: This method is not currently recommended for public use.
-   * The internal tree representation is unstable and is very likely
-   * to change. Use at your own risk.
-   */
-  __parse: generateParseTree,
-
-  /**
-   * Renders the given LaTeX into an HTML+MathML internal DOM tree
-   * representation, without flattening that representation to a string.
-   *
-   * NOTE: This method is not currently recommended for public use.
-   * The internal tree representation is unstable and is very likely
-   * to change. Use at your own risk.
-   */
-  __renderToDomTree: renderToDomTree,
-
-  /**
-   * Renders the given LaTeX into an HTML internal DOM tree representation,
-   * without MathML and without flattening that representation to a string.
-   *
-   * NOTE: This method is not currently recommended for public use.
-   * The internal tree representation is unstable and is very likely
-   * to change. Use at your own risk.
-   */
-  __renderToHTMLTree: renderToHTMLTree,
-
-  /**
-   * extends internal font metrics object with a new object
-   * each key in the new object represents a font name
-  */
-  __setFontMetrics: setFontMetrics,
-
-  /**
-   * adds a new symbol to builtin symbols table
-   */
-  __defineSymbol: defineSymbol,
-
-  /**
-   * adds a new macro to builtin macro list
-   */
-  __defineMacro: defineMacro,
-
-  /**
-   * Expose the dom tree node types, which can be useful for type checking nodes.
-   *
-   * NOTE: This method is not currently recommended for public use.
-   * The internal tree representation is unstable and is very likely
-   * to change. Use at your own risk.
-   */
-  __domTree: {
-    Span,
-    Anchor,
-    SymbolNode,
-    SvgNode,
-    PathNode,
-    LineNode
-  }
-};
-
-export default katex;
diff --git a/registry/vulkan/makeAllExts b/registry/vulkan/makeAllExts
deleted file mode 100755
index fce3ce3..0000000
--- a/registry/vulkan/makeAllExts
+++ /dev/null
@@ -1,10 +0,0 @@
-#!/usr/bin/env bash
-#
-# Copyright 2016-2021 The Khronos Group Inc.
-#
-# SPDX-License-Identifier: Apache-2.0
-
-# makeAllExts - invoke Makefile with the right options to build with all
-# extensions included.
-
-./makeSpec -clean -spec all $*
diff --git a/registry/vulkan/makeExt b/registry/vulkan/makeExt
deleted file mode 100755
index 2a92198..0000000
--- a/registry/vulkan/makeExt
+++ /dev/null
@@ -1,16 +0,0 @@
-#!/usr/bin/env bash
-#
-# Copyright 2016-2021 The Khronos Group Inc.
-#
-# SPDX-License-Identifier: Apache-2.0
-
-# makeExt - invoke Makefile with the right options to build with a
-# specific extension included. Only one extension may be specified;
-# for more complex builds, invoke 'makeSpec' directly.
-#
-# Usage: makeExt extension targets
-
-extension=$1
-shift
-
-./makeSpec -clean -spec core -extension $extension $*
diff --git a/registry/vulkan/makeKHR b/registry/vulkan/makeKHR
deleted file mode 100755
index 147f2e3..0000000
--- a/registry/vulkan/makeKHR
+++ /dev/null
@@ -1,13 +0,0 @@
-#!/usr/bin/env bash
-#
-# Copyright 2016-2021 The Khronos Group Inc.
-#
-# SPDX-License-Identifier: Apache-2.0
-
-# makeKHR - invoke Makefile with the right options to build with all
-# KHR extensions included.
-
-# Usage: makeKHR targets
-
-# Load extension dependencies, generated from vk.xml
-./makeSpec -clean -spec khr $*
diff --git a/registry/vulkan/makeSpec b/registry/vulkan/makeSpec
deleted file mode 100755
index a8d4ce0..0000000
--- a/registry/vulkan/makeSpec
+++ /dev/null
@@ -1,131 +0,0 @@
-#!/usr/bin/env python3
-#
-# Copyright 2020-2021 The Khronos Group Inc.
-#
-# SPDX-License-Identifier: Apache-2.0
-
-# Build a spec with requested extension sets and options.
-#
-# Usage: makeSpec script-options make-options
-# Script options are parsed by this script before invoking 'make':
-#   -genpath path - directory for generated files and outputs
-#   -spec core - make a spec with no extensions (default)
-#   -spec khr - make a spec with all KHR extensions
-#   -spec all - make a spec with all registered extensions
-#   -version {1.0 | 1.1 | 1.2} - make a spec with this core version
-#   -ext name - add specified extension and its dependencies
-#   -clean - clean generated files before building
-#   -v - verbose, print actions before executing  them
-#   -n - dry-run, print actions instead of executing them
-# make-options - all other options are passed to 'make', including
-# requested build targets
-
-import argparse, copy, io, os, re, string, subprocess, sys
-
-def execute(args, results):
-    if results.verbose or results.dryrun:
-        print("'" + "' '".join(args) + "'")
-    if not results.dryrun:
-        subprocess.check_call(args)
-
-if __name__ == '__main__':
-    parser = argparse.ArgumentParser()
-
-    parser.add_argument('-clean', action='store_true',
-                        help='Clean generated files before building')
-    parser.add_argument('-extension', action='append',
-                        default=[],
-                        help='Specify a required extension or extensions to add to targets')
-    parser.add_argument('-genpath', action='store',
-                        default='gen',
-                        help='Path to directory containing generated files')
-    parser.add_argument('-spec', action='store',
-                        choices=[ 'core', 'khr', 'all' ],
-                        default='core',
-                        help='Type of spec to generate')
-    parser.add_argument('-version', action='store',
-                        choices=[ '1.0', '1.1', '1.2' ],
-                        default='1.2',
-                        help='Type of spec to generate')
-    parser.add_argument('-n', action='store_true', dest='dryrun',
-                        help='Only prints actions, do not execute them')
-    parser.add_argument('-v', action='store_true', dest='verbose',
-                        help='Print actions before executing them')
-
-    (results, options) = parser.parse_known_args()
-
-    # Ensure genpath is an absolute path, not relative
-    if results.genpath[0] != '/':
-        results.genpath = os.getcwd() + '/' + results.genpath
-
-    # Ensure extDependency.py exists and is up to date before importing it
-    try:
-        execute(['make', 'GENERATED=' + results.genpath, 'extDependency'], results)
-
-        # Look for extDependency.py in the specified directory and import it
-        sys.path.insert(0, results.genpath)
-        from extDependency import extensions, allExts, khrExts
-    except:
-        print('Cannot execute "make extDependency" or determine correct extension list', file=sys.stderr)
-
-    # List of versions to build with from the requested -version
-    versionDict = {
-        '1.0' : [ 'VK_VERSION_1_0' ],
-        '1.1' : [ 'VK_VERSION_1_0', 'VK_VERSION_1_1' ],
-        '1.2' : [ 'VK_VERSION_1_0', 'VK_VERSION_1_1', 'VK_VERSION_1_2' ],
-    }
-    versions = 'VERSIONS={}'.format(' '.join(versionDict[results.version]))
-
-    # List of extensions to build with from the requested -spec
-    # Also construct a spec title
-    if results.spec == 'core':
-        title = ''
-        exts = set()
-    if results.spec == 'khr':
-        title = 'with all KHR extensions'
-        exts = set(khrExts)
-    elif results.spec == 'all':
-        title = 'with all registered extensions'
-        exts = set(allExts)
-
-    # List of explicitly requested extension and all its dependencies
-    extraexts = set()
-    for name in results.extension:
-        if name in extensions:
-            extraexts.add(name)
-            extraexts.update(extensions[name])
-        else:
-            print('ERROR: unknown extension', name, file=sys.stderr)
-            sys.exit(1)
-
-    # See if any explicitly requested extensions aren't implicitly requested
-    # Add any such extensions to the spec title
-    extraexts -= exts
-    if len(extraexts) > 0:
-        exts.update(extraexts)
-        if title != '':
-            title += ' and ' + ', '.join(sorted(extraexts))
-        else:
-            title += 'with ' + ', '.join(sorted(extraexts))
-
-    if title != '':
-        title = '(' + title + ')'
-
-    # Finally, actually invoke make as needed for the targets
-    args = [ 'make', 'GENERATED=' + results.genpath ]
-
-    if results.clean:
-        execute(args + ['clean'], results)
-
-    args.append(versions)
-
-    # The actual target
-    if len(exts) > 0:
-        args.append('EXTENSIONS={}'.format(' '.join(sorted(exts))))
-    args.append('APITITLE={}'.format(title))
-    args += options
-
-    try:
-        execute(args, results)
-    except:
-        sys.exit(1)
diff --git a/registry/vulkan/proposals/VK_HUAWEI_invocation_mask.asciidoc b/registry/vulkan/proposals/VK_HUAWEI_invocation_mask.asciidoc
deleted file mode 100644
index c1726a4..0000000
--- a/registry/vulkan/proposals/VK_HUAWEI_invocation_mask.asciidoc
+++ /dev/null
@@ -1,149 +0,0 @@
-
-// Copyright 2021 HUAWEI, Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-= VK_HUAWEI_invocation_mask
-:toc: left
-:refpage: https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/
-
-
-
-== Problem Statement
-
-The rays to trace may be sparse in some use cases. 
-
-For example, the scene only have a few regions to reflect. 
-
-Providing an invocation mask image to the trace ray commands could potentially give the hardware the hint to do
-
-certain optimization without invoking an additional pass to compact the ray buffer.
-
-== Solution Space
-
-
-
-== Proposal
-
-API proposal
-
-New Enum Constants
-
-• VK_HUAWEI_INVOCATION_MASK_EXTENSION_NAME
-• VK_HUAWEI_INVOCATION_MASK_SPEC_VERSION
-• Extending VkAccessFlagBits2KHR:
-
- ◦ VK_ACCESS_2_INVOCATION_MASK_READ_BIT_HUAWEI
-
-• Extending VkImageUsageFlagBits:
-
- ◦ VK_IMAGE_USAGE_INVOCATION_MASK_BIT_HUAWEI
-
-• Extending VkPipelineStageFlagBits2KHR:
-
- ◦ VK_PIPELINE_STAGE_2_INVOCATION_MASK_BIT_HUAWEI
-
-• Extending VkStructureType:
-
- ◦ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INVOCATION_MASK_FEATURES_HUAWEI
-
-
-New structure
- ◦ VkPhysicalDeviceInvocationMaskFeaturesHUAWEI
-
-typedef enum VkImageUsageFlagBits {
-
- VK_IMAGE_USAGE_TRANSFER_SRC_BIT = 0x00000001,
- VK_IMAGE_USAGE_TRANSFER_DST_BIT = 0x00000002,
- VK_IMAGE_USAGE_SAMPLED_BIT = 0x00000004,
- VK_IMAGE_USAGE_STORAGE_BIT = 0x00000008,
- VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT = 0x00000010,
- VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT = 0x00000020,
- VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT = 0x00000040,
- VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT = 0x00000080,
- VK_IMAGE_USAGE_SHADING_RATE_IMAGE_BIT_NV = 0x00000100,
-
- // Provided by VK_EXT_fragment_density_map
- VK_IMAGE_USAGE_FRAGMENT_DENSITY_MAP_BIT_EXT = 0x00000200,
-
- // Provided by VK_HUAWEI_invocation_mask
- VK_IMAGE_USAGE_INVOCATION_MASK_BIT_HUAWEI = 0x00040000,
-
-} VkImageUsageFlagBits;
-
-New commands
-
-void vkCmdBindInvocationMaskHUAWEI(
-  VkCommandBuffer commandBuffer,
-  VkImageView imageView,
-  VkImageLayout imageLayout);
-  
-• If imageView is not VK_NULL_HANDLE, it must be a valid VkImageView handle of type VK_IMAGE_VIEW_TYPE_2D
-
-• If imageView is not VK_NULL_HANDLE, it must have a format of VK_FORMAT_R8_UINT
-
-• If imageView is not VK_NULL_HANDLE, it must have been created with a usage value including VK_IMAGE_USAGE_INVOCATION_MASK_BIT_HUAWEI
-
-• If imageView is not VK_NULL_HANDLE, imageLayout must match the actual VkImageLayou
-of each subresource accessible from imageView at the time the subresource is accessed
-• If imageView is not VK_NULL_HANDLE, imageLayout must be VK_IMAGE_LAYOUT_GENERAL
-
-Valid usage:
-
-Mask image resolution must match the width/height in vkCmdTraceRay;
-The elment of the invocation mask image use value 0 and 1.
-The value 1 means the invocation is active.
-
-New structure
-
-• Extending VkPhysicalDeviceFeatures2, VkDeviceCreateInfo:
-
- ◦ VkPhysicalDeviceInvocationMaskFeaturesHUAWEI
-
- typedef struct VkPhysicalDeviceInvocationMaskFeaturesHUAWEI {
-  VkStructureType sType;
-  void* pNext;
-  VkBool32 invocationMask;
- } VkPhysicalDeviceInvocationMaskFeaturesHUAWEI;
-
-invocationMask = true mean the feature is supported
-
-
-== Examples
-
-RT mask is updated before each traceRay.
-
-Step 1. Generate InvocationMask.
-
-//the rt mask image bind as color attachment in the fragment shader
-Layout(location = 2) out vec4 outRTmask
-vec4 mask = vec4(x,x,x,x);
-outRTmask = mask;
-
-Step 2. traceRay with InvocationMask
-
-vkCmdBindPipeline(
-    commandBuffers[imageIndex],
-    VK_PIPELINE_BIND_POINT_RAY_TRACING_KHR, m_rtPipeline);
-    vkCmdBindDescriptorSets(commandBuffers[imageIndex],
-    VK_PIPELINE_BIND_POINT_RAY_TRACING_NV,
-    m_rtPipelineLayout, 0, 1, &m_rtDescriptorSet,
-    0, nullptr);
-
-vkCmdBindInvocationMaskHUAWEI(
-    commandBuffers[imageIndex],
-    InvocationMaskimageView,
-    InvocationMaskimageLayout);
-    vkCmdTraceRaysKHR(commandBuffers[imageIndex],
-    pRaygenShaderBindingTable,
-    pMissShaderBindingTable,
-    swapChainExtent.width,
-    swapChainExtent.height, 1);
-
-
-== Issues
-
-
-== Further Functionality
-
-
diff --git a/registry/vulkan/proposals/VK_KHR_dynamic_rendering.asciidoc b/registry/vulkan/proposals/VK_KHR_dynamic_rendering.asciidoc
deleted file mode 100644
index f7ef51e..0000000
--- a/registry/vulkan/proposals/VK_KHR_dynamic_rendering.asciidoc
+++ /dev/null
@@ -1,440 +0,0 @@
-// Copyright 2021 The Khronos Group, Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-= VK_KHR_dynamic_rendering
-:toc: left
-:refpage: https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/
-:sectnums:
-
-This document details API design ideas for the VK_KHR_dynamic_rendering extension, which adds a more dynamic and flexible way to use draw commands, as a straightforward replacement for single pass render passes.
-
-
-== Problem Statement
-
-Render passes are the number one complaint from developers about Vulkan and have been almost since launch. Some of the most pointed issues are as follows:
-
-  . Other APIs have much more flexible APIs for the same functionality
-  . Most of the render pass API in Vulkan goes unused
-  . Most applications don't or can't use subpasses, but still pay the cost of setting them up
-  . The API doesn't fit into most existing software architectures
-  . Fundamentally, other than load/store actions, they don't address real issues for IHVs or ISVs
-  . When teaching Vulkan as an API, this is a huge place where people trip up
-
-An additional problem came up recently that having this state baked into pipeline creation actively contributes to the pipeline compilation time problem and having the ability to separate out most of this state would help enormously.
-
-This proposal _only_ addresses single pass render passes; additional functionality to replace multiple subpasses will be in a separate proposal.
-
-
-== Solution Space
-
-The following rough options exist for addressing this issue:
-
-  . Drastically expand the render pass compatibility options
-  . Allow render pass objects to be “VK_NULL_HANDLE” until record time
-  . Create a new API that pares down the information required to the bare minimum
-
-Option 1 has the advantage of being the least invasive in terms of API changes –it only really affects a handful of VUs, whilst still solving some of the flexibility issues.
-The disadvantage of this is that applications still have to manage render pass objects, and it doesn’t really address any of the points in the problem statement directly.
-
-Option 2 effectively allows applications to provide the same information to applications again without any real API change, and addresses point 4 in the problem statement directly as it allows the render pass information to provided fairly late.
-
-Option 3 is a much more drastic change in terms of the API, requiring additional paths through the API/driver that are generally somewhat annoying to manage. This has the advantage of being able to address all points in the problem statement, however.
-Render pass objects also carry a lot of baggage in terms of developer opinion, and an overhaul replacement is likely to be better received for that reason.
-
-Developers and the Vulkan WG seems to be more enthusiastic about Option 3 than other approaches, and so it is the approach proposed here.
-
-
-== Proposal
-
-=== Begin/End Render Pass
-
-This extension introduces new commands to begin and end a render pass:
-
-[source,c]
-----
-VKAPI_ATTR void VKAPI_CALL vkCmdBeginRenderingKHR(
-    VkCommandBuffer                             commandBuffer,
-    const VkRenderingInfoKHR*                   pRenderingInfo);
-
-VKAPI_ATTR void VKAPI_CALL vkCmdEndRenderingKHR(
-    VkCommandBuffer                             commandBuffer);
-----
-
-Neither of these commands make any reference to a render pass object – render passes are now fully dynamic.
-These commands may be called inside secondary command buffers, but `vkCmdEndRenderingKHR` and `vkCmdBeginRenderingKHR` must always appear as a pair in the same command buffer.
-Note that render passes can still span multiple command buffers via <<suspending-and-resuming,suspended render passes>>.
-
-[source,c]
-----
-typedef struct VkRenderingInfoKHR {
-    VkStructureType                     sType;
-    const void*                         pNext;
-    VkRenderingFlagsKHR                 flags;
-    VkRect2D                            renderArea;
-    uint32_t                            layerCount;
-    uint32_t                            viewMask;
-    uint32_t                            colorAttachmentCount;
-    const VkRenderingAttachmentInfoKHR* pColorAttachments;
-    const VkRenderingAttachmentInfoKHR* pDepthAttachment;
-    const VkRenderingAttachmentInfoKHR* pStencilAttachment;
-} VkRenderingInfoKHR;
-----
-
-The rendering info provided to `vkCmdBeginRenderingKHR` is the essential information needed to begin rendering, based on what is and is not currently inside the compatibility rules for render passes.
-Notably, this is not a synchronization command – there’s no replacement for subpass external dependencies.
-Applications should use other synchronization primitives (barriers, events) to manage synchronization.
-
-If `viewMask` is `0`, then multiview is disabled for this render pass, and `layerCount` indicates the number of layers used in each attachment.
-If `viewMask` is non-zero, then multiview is enabled for this render pass, and each bit in `viewMask` indicates a layer index in each element that will rendered.
-
-==== Attachments
-
-Depth and stencil image info are separated for API clarity (since everything else is applied independently), but they must point to the same image.
-The same restriction applies to their respective resolve images.
-For each attachment, the information provided is a the image view to bind, layout information, resolve information, and load/store ops (including a clear color).
-
-[source,c]
-----
-typedef struct VkRenderingAttachmentInfoKHR {
-    VkStructureType          sType;
-    const void*              pNext;
-    VkImageView              imageView;
-    VkImageLayout            imageLayout;
-    VkResolveModeFlagBits    resolveMode;
-    VkImageView              resolveImageView;
-    VkImageLayout            resolveImageLayout;
-    VkAttachmentLoadOp       loadOp;
-    VkAttachmentStoreOp      storeOp;
-    VkClearValue             clearValue;
-} VkRenderingAttachmentInfoKHR;
-----
-
-There are no layout transitions or other synchronization info for images – synchronization is done exclusively by existing synchronization commands - the layouts provided are those that the image must already be in when rendering.
-
-Image views for any attachment may be link:{refpage}VK_NULL_HANDLE.html[VK_NULL_HANDLE], indicating that writes to the attachment are discarded, and reads return undefined values.
-
-Note that the resolve images do not have their own load/store operations; they are treated as if they are implicitly `VK_ATTACHMENT_LOAD_OP_DONT_CARE` and `VK_ATTACHMENT_STORE_OP_STORE` – other combinations in the existing API don’t really carry any useful meaning.
-
-`resolveMode` for color attachments must be `VK_RESOLVE_MODE_NONE` or `VK_RESOLVE_MODE_AVERAGE_BIT`.
-
-===== Store Op None
-
-A new store operation is provided as originally described by link:{refpage}VK_QCOM_render_pass_store_ops.html[VK_QCOM_render_pass_store_ops]:
-
-[source,c]
-----
-VK_ATTACHMENT_STORE_OP_NONE_KHR = 1000301000,
-----
-
-This store operation works largely like DONT_CARE but guarantees that the store op does not access the attachment.
-When a render pass accesses an attachment as read only, this can be useful in avoiding a potential write operation during the store operation, and removing the need for synchronization in some cases.
-
-
-==== Rendering Flags
-
-Rendering flags cover the following functionality:
-
-[source,c]
-----
-typedef enum VkRenderingFlagsKHR {
-    VK_RENDERING_CONTENTS_SECONDARY_COMMAND_BUFFERS_BIT_KHR = 0x00000001,
-    VK_RENDERING_SUSPENDING_BIT_KHR                         = 0x00000002,
-    VK_RENDERING_RESUMING_BIT_KHR                           = 0x00000004,
-} VkRenderingFlagsKHR;
-----
-
-
-===== Secondary Command Buffer Contents
-
-`VK_RENDERING_CONTENTS_SECONDARY_COMMAND_BUFFERS_BIT_KHR` works more or less identically to `VK_SUBPASS_CONTENTS_SECONDARY_COMMAND_BUFFERS`, indicating that the contents of the render pass will be entirely recorded inside a secondary command buffer and replayed.
-If it is absent, the commands must be wholly recorded inside the command buffer that starts it. 
-
-This requires the introduction of a new inheritance info when dynamic rendering is used, as the renderpass will no longer provide information required by implementations:
-
-[source,c]
-----
-typedef struct VkCommandBufferInheritanceRenderingInfoKHR {
-    VkStructureType          sType;
-    const void*              pNext;
-    VkRenderingFlagsKHR      flags;
-    uint32_t                 viewMask;
-    uint32_t                 colorAttachmentCount;
-    const VkFormat*          pColorAttachmentFormats;
-    VkFormat                 depthAttachmentFormat;
-    VkFormat                 stencilAttachmentFormat;
-    VkSampleCountFlagBits    rasterizationSamples;
-} VkCommandBufferInheritanceRenderingInfoKHR;
-----
-
-Information here must match that in the render pass being executed.
-If no color attachments are used or the formats are all `VK_FORMAT_UNDEFINED`, and the `variableMultisampleRate` feature is supported, the rasterization sample count is ignored.
-If either `depthAttachmentFormat` or `stencilAttachmentFormat` are not `VK_FORMAT_UNDEFINED`, they must have the same value.
-
-This allows applications to use secondary command buffers with dynamic rendering as they would have done in the existing render pass API.
-
-However, an alternative method of recording commands across multiple command buffers is also provided by <<suspending-and-resuming,suspending render passes>>.
-
-[[command-buffer-inheritance-mixed-samples]]
-====== Mixed Samples
-
-If either of link:{refpage}VK_NV_framebuffer_mixed_samples.html[VK_NV_framebuffer_mixed_samples] or link:{refpage}VK_AMD_mixed_attachment_samples.html[VK_AMD_mixed_attachment_samples] are enabled, the sample counts of color and depth attachments may vary from the `rasterizationSamples`.
-In this case, the sample count of each attachment can be specified by including the `VkAttachmentSampleInfoAMD`/`VkAttachmentSampleCountInfoNV` structure in the same `pNext` chain.
-
-[source,c]
-----
-typedef struct VkAttachmentSampleCountInfoAMD {
-    VkStructureType                 sType;
-    const void*                     pNext;
-    VkRenderingFlagsKHR             flags;
-    uint32_t                        colorAttachmentCount;
-    const VkSampleCountFlagBits*    pColorAttachmentSamples;
-    VkSampleCountFlagBits           depthStencilAttachmentSamples;
-} VkAttachmentSampleCountInfoAMD;
-
-typedef VkAttachmentSampleCountInfoAMD VkAttachmentSampleCountInfoNV;
-----
-
-[[command-buffer-inheritance-multiview-per-view-attributes]]
-====== Multiview Per-View Attributes
-
-If link:{refpage}VK_NVX_multiview_per_view_attributes.html[VK_NVX_multiview_per_view_attributes] is enabled, the multiview per-view attributes can be specified by including the `VkMultiviewPerViewAttributesInfoNVX` structure in the same `pNext` chain.
-
-
-[[suspending-and-resuming]]
-===== Suspending and Resuming
-
-`VK_RENDERING_SUSPENDING_BIT_KHR` and `VK_RENDERING_RESUMING_BIT_KHR` allow an alternative method of recording across multiple command buffers.
-Applications can suspend a render pass in one command buffer using `VK_RENDERING_SUSPENDING_BIT_KHR`, and resume it in another command buffer by starting an identical render pass with `VK_RENDERING_RESUMING_BIT_KHR`.
-Suspended render passes must be resumed by a render pass with identical begin parameters, other than the presence absence of `VK_RENDERING_SUSPENDING_BIT_KHR`, `VK_RENDERING_RESUMING_BIT_KHR`, and `VK_RENDERING_CONTENTS_SECONDARY_COMMAND_BUFFERS_BIT_KHR`.
-
-It is invalid to use action commands, synchronization commands, or record additional render passes, between a suspended render pass and the render pass which resumes it.
-All pairs of resuming and suspending render passes must be submitted in the same batch.
-Applications can resume a dynamic render pass in the same command buffer as it was suspended.
-Applications can record a dynamic render pass wholly inside secondary command buffers.
-A dynamic render pass can be both suspending and resuming.
-
-
-==== Device Groups
-
-The link:{refpage}VkDeviceGroupRenderPassBeginInfo.html[VkDeviceGroupRenderPassBeginInfo] structure can be chained from `VkRenderingInfoKHR`, with the same effect as when chained to link:{refpage}VkRenderPassBeginInfo.html[VkRenderPassBeginInfo] - setting the device mask and setting independent render areas per device.
-
-
-==== Fragment Shading Rate
-
-If link:{refpage}VK_KHR_fragment_shading_rate.html[VK_KHR_fragment_shading_rate] is enabled, when calling `vkCmdBeginRenderingKHR`, the following structure should be chained to `VkRenderingInfoKHR` to include a fragment shading rate attachment:
-
-[source,c]
-----
-typedef struct VkRenderingFragmentShadingRateAttachmentInfoKHR {
-    VkStructureType                     sType;
-    const void*                         pNext;
-    VkImageView                         imageView;
-    VkImageLayout                       imageLayout;
-} VkRenderingFragmentShadingRateAttachmentInfoKHR;
-----
-
-
-==== Fragment Density Map
-
-If link:{refpage}VK_EXT_fragment_density_map.html[VK_EXT_fragment_density_map] is enabled, when calling `vkCmdBeginRenderingKHR`, the following structure should be chained to `VkRenderingInfoKHR` to include a fragment density map attachment:
-
-[source,c]
-----
-typedef struct VkRenderingFragmentDensityMapAttachmentInfoEXT {
-    VkStructureType                     sType;
-    const void*                         pNext;
-    VkImageView                         imageView;
-    VkImageLayout                       imageLayout;
-} VkRenderingFragmentDensityMapAttachmentInfoEXT;
-----
-
-
-=== Pipeline Creation
-
-With the removal of render pass objects, it’s now necessary to provide some of that same information to applications at pipeline creation.
-This structure is chained from link:{refpage}VkGraphicsPipelineCreateInfo.html[VkGraphicsPipelineCreateInfo]:
-
-[source,c]
-----
-typedef struct VkPipelineRenderingCreateInfoKHR {
-    VkStructureType    sType;
-    const void*        pNext;
-    uint32_t           colorAttachmentCount;
-    const VkFormat*    pColorAttachmentFormats;
-    VkFormat           depthAttachmentFormat;
-    VkFormat           stencilAttachmentFormat;
-    uint32_t           viewMask;
-} VkPipelineRenderingCreateInfoKHR;
-----
-
-If a color or depth/stencil attachment is specified in `vkCmdBeginRenderingKHR`, its format must match that provided here.
-If any format here is `VK_FORMAT_UNDEFINED`, no attachment must be specified for that attachment in `vkCmdBeginRenderingKHR`.
-Applications can provide a valid format here and then not specify an attachment in `vkCmdBeginRenderingKHR`.
-If either `depthAttachmentFormat` or `stencilAttachmentFormat` are not `VK_FORMAT_UNDEFINED`, they must have the same value.
-
-The value of `viewMask` must match the value of the `viewMask` member of `VkRenderingInfoKHR`.
-
-===== Multiview Per-View Attributes
-
-If link:{refpage}VK_NVX_multiview_per_view_attributes.html[VK_NVX_multiview_per_view_attributes] is enabled, the multiview per-view attributes can be specified by including the `VkMultiviewPerViewAttributesInfoNVX` structure in the same `pNext` chain. 
-
-==== Mixed Sample Attachments
-
-If either of link:{refpage}VK_NV_framebuffer_mixed_samples.html[VK_NV_framebuffer_mixed_samples] or link:{refpage}VK_AMD_mixed_attachment_samples.html[VK_AMD_mixed_attachment_samples] are enabled, the sample counts of color and depth attachments must be specified at pipeline creation as well.
-As with <<command-buffer-inheritance-mixed-samples,command buffer inheritance>>, the sample count of each attachment can be specified by including the `VkAttachmentSampleInfoAMD`/`VkAttachmentSampleCountInfoNV` structure in the `pNext` chain.
-If the structure is omitted, the sample count for each attachment is considered equal to link:{refpage}VkPipelineMultisampleStateCreateInfo.html[`VkPipelineMultisampleStateCreateInfo::rasterizationSamples`].
-
-
-==== Fragment Shading Rate
-
-If link:{refpage}VK_KHR_fragment_shading_rate.html[VK_KHR_fragment_shading_rate] is enabled, a new rasterization state pipeline creation flag must be provided if a shading rate attachment will be used:
-
-[source,c]
-----
-VK_PIPELINE_RASTERIZATION_STATE_CREATE_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR
-----
-
-
-==== Fragment Density Map
-
-If link:{refpage}VK_EXT_fragment_density_map.html[VK_EXT_fragment_density_map] is enabled, a new rasterization state pipeline creation flag must be provided if a fragment density map will be used:
-
-[source,c]
-----
-VK_PIPELINE_RASTERIZATION_STATE_CREATE_FRAGMENT_DENSITY_MAP_ATTACHMENT_BIT_EXT
-----
-
-
-=== Features
-
-The following features are exposed by this extension:
-
-[source,c]
-----
-typedef struct VkPhysicalDeviceDynamicRenderingFeaturesKHR {
-    VkStructureType    sType;
-    void*              pNext;
-    VkBool32           dynamicRendering;
-} VkPhysicalDeviceDynamicRenderingFeaturesKHR
-----
-
-`dynamicRendering` is the core feature enabling this extension's functionality.
-
-
-== Examples
-
-
-=== Creating a Pipeline
-
-[source,c]
-----
-VkFormat colorRenderingFormats[2] = {
-    VK_FORMAT_R8G8B8A8_UNORM,
-    VK_FORMAT_R32_UINT };
-
-VkPipelineRenderingCreateInfoKHR rfInfo = {
-    .sType = VK_STRUCTURE_TYPE_PIPELINE_RENDERING_FORMAT_CREATE_INFO_KHR,
-    .pNext = NULL,
-    .colorAttachmentCount = 2,
-    .pColorAttachmentFormats = colorRenderingFormats,
-    .depthAttachmentFormat = VK_FORMAT_D32_SFLOAT_S8_UINT,
-    .stencilAttachmentFormat = VK_FORMAT_D32_SFLOAT_S8_UINT };
-
-VkGraphicsPipelineCreateInfo createInfo = {
-    .sType = VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO,
-    .pNext = &rfInfo,
-    .renderPass = VK_NULL_HANDLE,
-    .... };
-
-VkPipeline graphicsPipeline;
-
-vkCreateGraphicsPipelines(device, pipelineCache, 1, &createInfo, NULL, &graphicsPipeline);
-----
-
-=== Rendering with a dynamic render pass
-
-[source,c]
-----
-VkRenderingAttachmentInfoKHR colorAttachments[2] = {
-    {
-        .sType = VK_STRUCTURE_TYPE_RENDERING_ATTACHMENT_INFO_KHR
-        .pNext = NULL,
-        .imageView = colorImageViews[0],
-        .imageLayout = VK_IMAGE_LAYOUT_ATTACHMENT_OPTIMAL_KHR,
-        .resolveMode = VK_RESOLVE_MODE_AVERAGE_BIT,
-        .resolveImageView = resolveColorImageView,
-        .resolveImageLayout = VK_IMAGE_LAYOUT_ATTACHMENT_OPTIMAL_KHR,
-        .loadOp = VK_ATTACHMENT_LOAD_OP_CLEAR,
-        .storeOp = VK_ATTACHMENT_STORE_OP_NONE_KHR,
-        .clearValue = {.color = {.float32 = {0.0f,0.0f,0.0f,0.0f} } }
-    }, {
-        .sType = VK_STRUCTURE_TYPE_RENDERING_ATTACHMENT_INFO_KHR
-        .pNext = NULL,
-        .imageView = colorImageViews[0],
-        .imageLayout = VK_IMAGE_LAYOUT_ATTACHMENT_OPTIMAL_KHR,
-        .resolveMode = VK_RESOLVE_MODE_NONE,
-        .loadOp = VK_ATTACHMENT_LOAD_OP_DONT_CARE,
-        .storeOp = VK_ATTACHMENT_STORE_OP_STORE_KHR
-    } };
-
-// A single depth stencil attachment info can be used, but they can also be specified separately.
-// When both are specified separately, the only requirement is that the image view is identical.
-VkRenderingAttachmentInfoKHR depthStencilAttachment = {
-    .sType = VK_STRUCTURE_TYPE_RENDERING_ATTACHMENT_INFO_KHR
-    .pNext = NULL,
-    .imageView = depthStencilImageView,
-    .imageLayout = VK_IMAGE_LAYOUT_ATTACHMENT_OPTIMAL_KHR,
-    .resolveMode = VK_RESOLVE_MODE_NONE,
-    .loadOp = VK_ATTACHMENT_LOAD_OP_CLEAR,
-    .storeOp = VK_ATTACHMENT_STORE_OP_DONT_CARE,
-    .clearValue = {.depthStencil = {.depth = 0.0f, .stencil = 0 } } };
-
-VkRenderingInfoKHR renderingInfo = {
-    .sType = VK_STRUCTURE_TYPE_RENDERING_INFO_KHR,
-    .pNext = NULL,
-    .flags = 0,
-    .renderArea = { ... },
-    .layerCount = 1,
-    .colorAttachmentCount = 2,
-    .pColorAttachments = colorAttachments,
-    .pDepthAttachment = &depthStencilAttachment,
-    .pStencilAttachment = &depthStencilAttachment };
-
-vkCmdBeginRenderingKHR(commandBuffer, &renderingInfo);
-
-vkCmdDraw(commandBuffer, ...);
-
-...
-
-vkCmdDraw(commandBuffer, ...);
-
-vkCmdEndRenderingKHR(commandBuffer);    
-----
-
-
-== Issues
-
-This section describes issues with the existing proposal – including both open issues that you haven’t addressed, and closed issues that aren’t self-evident from the proposal description. 
-
-
-=== RESOLVED: Should we support multiview?
-
-Yes, its complexity is much reduced compared to render pass objects, and it’s probably worth preserving in this limited form for compatibility reasons.
-
-
-=== RESOLVED: Should there be a view mask for multiview?
-
-Yes.
-Without multiple subpasses the view mask is significantly less useful; the layer count provided is sufficient to describe the number of views.
-However, the mask allows specification of a non-contiguous array, and while it's unclear if any applications use this, to maintain compatibility with existing APIs it has been included.
-
-
-=== RESOLVED: Should we have functionality to replace the on-chip storage aspect of subpasses?
-
-No - this will be designed as a separate extension.
-
-
-=== RESOLVED: Should pipeline barriers work inside these limited render passes?
-
-No - without input attachments or a solution for on-chip storage these are currently functionally useless.
diff --git a/registry/vulkan/proposals/VK_KHR_shader_integer_dot_product.asciidoc b/registry/vulkan/proposals/VK_KHR_shader_integer_dot_product.asciidoc
deleted file mode 100644
index 559ccb5..0000000
--- a/registry/vulkan/proposals/VK_KHR_shader_integer_dot_product.asciidoc
+++ /dev/null
@@ -1,130 +0,0 @@
-// Copyright 2021 The Khronos Group, Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-= VK_KHR_shader_integer_dot_product
-:toc: left
-:refpage: https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/
-:sectnums:
-
-This document proposes adding support for shader integer dot product instructions.
-
-== Problem Statement
-
-Dot product operations between vectors of integer values are used heavily in machine learning algorithms, acting as a fairly fundamental building block.
-When running machine learning algorithms in Vulkan, these have to be emulated using other integer operations; however many implementations have dedicated fast paths for these operations.
-
-An additional problem is that there is no clear common subset of accelerated dot product operations between vendors - making standardising on a solution somewhat tricky.
-
-This proposal aims to enable these fast paths for machine learning algorithms with minimal difficulty.
-
-
-== Solution Space
-
-There are two main ways in which applications could gain access to these fast paths:
-
- . Rely on compiler pattern matching to optimise standard integer operations into dot products
- . Add dedicated dot product operations
-
-The first of those is more or less a "do nothing" approach and puts a burden on implementations to detect these cases, with variable success rates.
-Adding dedicated dot product operations is less error prone, but does mean machine learning content needs to be updated to use these new operations.
-In the long run, the latter is likely to be much more reliable for new applications - so this proposal aims to add new operations.
-
-The question then becomes _which_ dedicated dot product operations should be exposed if there's no common subset of accelerated operations.
-Choices become:
-
- . Multiple extensions advertising different operations
- . One extension with the superset of operations but make them all optional
- . One extension with all operations available, emulating those that aren't accelerated
-
-Most existing ML backends targetting SPIR-V compile to SPIR-V once and expect the code to work everywhere within their target market - they will pick a single expression of the ML operations at the macro level and compile to that.
-To run this code everywhere, only option 3 works directly - the only option faced with 1 or 2 would be to emulate the functions as they do today, perhaps picking up optimisations in extreme cases only.
-
-Newer backends such as those using https://www.tensorflow.org/mlir[MLIR] are looking at generating platform-specific optimised IR, which can be done in part by expressing the macro-level operations differently.
-Backends like this could use information about the accelerated operations to determine which SPIR-V operations to target, and thus 1 and 2 are well suited to this.
-Option 3 would also work but would need additional information in order to make optimisation decisions.
-
-In order to satisfy both of these types of backends, this proposal works along the lines of option 3, while providing platform-specific information to allow optimising compilers to make useful choices.
-
-
-== Proposal
-
-=== API Features
-
-The following features are exposed by this extension:
-
-[source,c]
-----
-typedef struct VkPhysicalDeviceShaderIntegerDotProductFeaturesKHR {
-    VkStructureType    sType;
-    void*              pNext;
-    VkBool32           shaderIntegerDotProduct;
-} VkPhysicalDeviceShaderIntegerDotProductFeaturesKHR
-----
-
-`shaderIntegerDotProduct` is the core feature enabling this extension's functionality.
-
-
-=== API Properties
-
-The following features are exposed by this extension:
-
-[source,c]
-----
-typedef struct VkPhysicalDeviceShaderIntegerDotProductPropertiesKHR {
-    VkStructureType    sType;
-    void*              pNext;
-    VkBool32           integerDotProduct8BitUnsignedAccelerated;
-    VkBool32           integerDotProduct8BitSignedAccelerated;
-    VkBool32           integerDotProduct8BitMixedSignednessAccelerated;
-    VkBool32           integerDotProduct4x8BitPackedUnsignedAccelerated;
-    VkBool32           integerDotProduct4x8BitPackedSignedAccelerated;
-    VkBool32           integerDotProduct4x8BitPackedMixedSignednessAccelerated;
-    VkBool32           integerDotProduct16BitUnsignedAccelerated;
-    VkBool32           integerDotProduct16BitSignedAccelerated;
-    VkBool32           integerDotProduct16BitMixedSignednessAccelerated;
-    VkBool32           integerDotProduct32BitUnsignedAccelerated;
-    VkBool32           integerDotProduct32BitSignedAccelerated;
-    VkBool32           integerDotProduct32BitMixedSignednessAccelerated;
-    VkBool32           integerDotProduct64BitUnsignedAccelerated;
-    VkBool32           integerDotProduct64BitSignedAccelerated;
-    VkBool32           integerDotProduct64BitMixedSignednessAccelerated;
-    VkBool32           integerDotProductAccumulatingSaturating8BitUnsignedAccelerated;
-    VkBool32           integerDotProductAccumulatingSaturating8BitSignedAccelerated;
-    VkBool32           integerDotProductAccumulatingSaturating8BitMixedSignednessAccelerated;
-    VkBool32           integerDotProductAccumulatingSaturating4x8BitPackedUnsignedAccelerated;
-    VkBool32           integerDotProductAccumulatingSaturating4x8BitPackedSignedAccelerated;
-    VkBool32           integerDotProductAccumulatingSaturating4x8BitPackedMixedSignednessAccelerated;
-    VkBool32           integerDotProductAccumulatingSaturating16BitUnsignedAccelerated;
-    VkBool32           integerDotProductAccumulatingSaturating16BitSignedAccelerated;
-    VkBool32           integerDotProductAccumulatingSaturating16BitMixedSignednessAccelerated;
-    VkBool32           integerDotProductAccumulatingSaturating32BitUnsignedAccelerated;
-    VkBool32           integerDotProductAccumulatingSaturating32BitSignedAccelerated;
-    VkBool32           integerDotProductAccumulatingSaturating32BitMixedSignednessAccelerated;
-    VkBool32           integerDotProductAccumulatingSaturating64BitUnsignedAccelerated;
-    VkBool32           integerDotProductAccumulatingSaturating64BitSignedAccelerated;
-    VkBool32           integerDotProductAccumulatingSaturating64BitMixedSignednessAccelerated;
-} VkPhysicalDeviceDynamicRenderingFeaturesKHR
-----
-
-Each of these properties is a boolean that will be ename:VK_TRUE if the implementation provides a performance advantage for the corresponding SPIR-V instruction, over application-provided code composed from elementary instructions and/or other dot product instructions.
-This could be either because the implementation uses optimized machine code sequences whose generation from application-provided code cannot be guaranteed or because it uses hardware features that cannot otherwise be targeted from application-provided code.
-
-[NOTE] 
----
-Properties are written as `integerDotProduct<AccumulatingSaturating>{type bitwidth}{Unsigned|Signed|MixedSignedness}Accelerated`.
-Each property corresponds to a SPIR-V opcode of the form `Op{U|S|SU}Dot<AccSat>KHR`, as defined in SPIR-V extension SPV_KHR_integer_dot_product.
-The `<AccumulatingSaturating>` portion of the property corresponds to the `AccSat` instruction variants.
-The type bitwidth refers to the size of the input vectors and whether it is a packed format or not.
-`{Unsigned|Signed|MixedSignedness}` in the property correspond to `{U|S|SU}` in the instruction name.
----
-
-=== SPIR-V Changes
-
-This proposal uses an existing SPIR-V extension: http://htmlpreview.github.io/?https://github.com/KhronosGroup/SPIRV-Registry/blob/master/extensions/KHR/SPV_KHR_integer_dot_product.html[SPV_KHR_integer_dot_product].
-
-
-== Examples
-
-TODO
-
diff --git a/registry/vulkan/proposals/template.asciidoc b/registry/vulkan/proposals/template.asciidoc
deleted file mode 100644
index 45b2d43..0000000
--- a/registry/vulkan/proposals/template.asciidoc
+++ /dev/null
@@ -1,69 +0,0 @@
-// Copyright 2021 The Khronos Group, Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-= Proposal Template
-:toc: left
-:refpage: https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/
-:sectnums:
-
-.How to use this document
-[NOTE]
-====
-This document outlines the expected flow of a proposal - text in the following sections is there as guidance for how to fill out each section.
-When creating a new proposal, text inside these sections (including this note!) should be removed and replaced with actual proposal text.
-
-Proposal documents are standalone and do not use the attributes and extensions associated with the specification - they should be independently buildable with Asciidoctor, which allows them to be previewed live on GitHub/GitLab.
-
-When calling out existing API constructs or extensions, the `refpage` attribute should be used to link to the relevant Khronos reference page.
-For example - "...used to extend link:{refpage}VkGraphicsPipelineCreateInfo.html[VkGraphicsPipelineCreateInfo]..."
-====
-
-A short summary of this proposal should be written here.
-
-== Problem Statement
-
-This section should detail the problem that’s being addressed as succinctly as possible.
-Usually this comes in three parts:
-
- . Setting the scene
- . Bulleted list of problems
- . (Optional) Describe peripheral issues
-  a. I.e. things this may enable solutions for, but doesn’t directly address.
-
-Writing this section is a good opportunity to make sure you’re not overreaching by trying to address too many problems at once.
-
-== Solution Space
-
-This section should briefly describe the options that have been considered (this is a good time to reconsider those options too!).
-
-Start with a bulleted list of the options, usually no more than a paragraph on each option and what the pros/cons of each are, then some sort of brief reason for picking the proposal you’re about to make in section 3.
-
-== Proposal
-
-This section should be the most detailed – it should go into enough detail on specific points of the proposal that readers can understand it, but without being overly verbose.
-Typically, this section will be split into subsections describing different areas of the proposal.
-
-This should only describe the minimum viable proposal; all those extra things that you could put on top that don’t necessarily fix the initial problem should move to section 5 (further functionality).
-They may make it into the final solution, but it’s important to give others the opportunity to evaluate these independently.
-
-== Examples
-
-Where relevant, add one or more examples of how this proposal will be used in practice.
-Some proposals that have limited external surface area (e.g. add a flag in a function call) may not require this but try to write motivating examples down where possible.
-This section is relatively freeform but should remain concise and to the point.
-Extraneous details in examples should be omitted (e.g. code examples don't need to compile).
-
-== Issues
-
-This section describes issues with the existing proposal – including both open issues that you haven’t addressed, and closed issues that aren’t self-evident from the proposal description. 
-
-=== RESOLVED: How are issues written?
-
-Each issue should be a separate subsection starting with a question, an indication of the status (UNRESOLVED/PROPOSED/RESOLVED), discussion expanding on the question, and a proposal for resolving it if there is one.
-
-== Further Functionality
-
-This section is for anything that could be beneficial to in the final solution, but maybe isn’t necessary to address the core problem.
-Subsections here will be like those in section 3 (Proposal) but offer additional background as to what peripheral problem they address, or benefit they provide.
-Writing this section is a good chance to re-evaluate if anything can or should be moved from section 3 to here, or just outright removed.
diff --git a/registry/vulkan/sandboxCopy b/registry/vulkan/sandboxCopy
deleted file mode 100755
index a7bec52..0000000
--- a/registry/vulkan/sandboxCopy
+++ /dev/null
@@ -1,23 +0,0 @@
-#!/usr/bin/env bash
-#
-# Copyright 2018-2021 The Khronos Group, Inc.
-#
-# SPDX-License-Identifier: Apache-2.0
-
-specdir=out
-RHOST=kaylee
-RPATH=/home/khronos/memberftp/vulkan/
-
-cd $specdir || (echo "Can't cd to $specdir !" ; exit 1)
-# Create tarball and upload/copy/extract that to speed things
-echo "Creating tarball"
-tar czpf /tmp/tarball.tgz .
-echo "Uploading tarball"
-scp /tmp/tarball.tgz $RHOST:$RPATH
-echo "Extracting tarball on server"
-# Could add "&& rm tarball.tgz" but nice to have around
-ssh $RHOST "cd $RPATH && tar xzpf tarball.tgz"
-echo "Removing tarball"
-rm /tmp/tarball.tgz
-
-# scp -rp * $RHOST:$RPATH
diff --git a/registry/vulkan/style/extensions.txt b/registry/vulkan/style/extensions.txt
deleted file mode 100644
index 9bffa7b..0000000
--- a/registry/vulkan/style/extensions.txt
+++ /dev/null
@@ -1,1213 +0,0 @@
-// Copyright 2015-2021 The Khronos Group Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-[[extensions]]
-= API Versions, Extensions, and Layers
-
-This chapter describes required and recommended processes for writing
-specification language for different core API versions, extensions, and API
-layers.
-It is concerned with processes and registration, while fine-grained naming
-conventions are included in the <<naming,API Naming Conventions chapter>>.
-
-[NOTE]
-.Note
-====
-The mechanism and process of specifying extensions is subject to change, as
-we receive feedback from authors and further requirements of documentation
-tooling.
-This document will be updated as changes are made.
-====
-
-
-== Introduction
-
-The Khronos extension registries and extension naming conventions serve
-several purposes:
-
-  * Avoiding naming collisions between extensions developed by mutually
-    unaware parties, both in the extension names themselves, as well as
-    their token, command, and type names.
-  * Allocating enumerant values for tokens added by extensions
-  * Creating a defined order between extensions.
-    Extensions with higher numbers may have dependencies upon extensions
-    with lower numbers, and must define any relevant interactions with
-    lower-numbered extensions.
-  * Provides a central repository for documentation and header changes
-    associated with extensions
-
-
-== Proposing New Extensions
-
-The first step in the process should be to fill out a proposal document, and
-iterate on that before committing to writing specification language.
-
-The main reasons to do this are to ensure that everyone understands the
-nature of the problem being addressed, to be clear why a particular solution
-was chosen in lieu of others, and to allow for design changes before
-committing to specification text.
-If a potential implementor has concerns with any of the design choices, it
-is much easier to change details in a proposal document than it is to
-rewrite specification text.
-
-In the top level `proposals` folder there is a template (`template.adoc`)
-for writing design proposals, including guidance on how it should be used.
-
-For some simpler extensions it may not be necessary to write a proposal
-document if both the problem is well understood and the solution well
-bounded, so this is not a required piece of documentation.
-However it may still be useful to write this in a proposal document.
-
-Once a proposal is written, the Vulkan Working Group and other interested
-parties should be asked to review and provide feedback before specification
-work begins.
-
-
-[[extensions-rules]]
-== General Rules/Guidelines
-
-Some general rules to simplify the specific rules below:
-
-  * API versions, extensions and layers must each have a globally unique
-    name.
-  * All commands and tokens must have a globally unique name.
-  * API versions and extensions can expose new commands, types, and/or
-    tokens, but layers must not.
-  ** However, layers can expose their own extensions, which in turn are
-     allowed to expose new commands and tokens.
-  * All extensions must be registered with Khronos.
-  * Extensions in general are strictly additive and backwards-compatible
-    with each other and with the core API.
-    However, as described in more detail the Fundamentals chapter of the
-    <<vulkan-spec,Vulkan API Specification>>, explicit incompatibilities may
-    exist, and must be documented.
-
-
-[[extensions-naming-conventions]]
-== Version, Extension, and Layer Naming Conventions
-
-Versions, extensions and layers have formal _names_.
-These names are used in a variety of places:
-
-  * When specifying extensions and layers to enable in the API.
-  * As a preprocessor symbol in the `vulkan_*.h` header files indicating
-    that an extension interface is defined at compile time.
-  * To control building the Vulkan Specification from asciidoctor source
-    containing multiple versions and extensions, by explicitly enabling
-    their inclusion.
-
-[NOTE]
-.Note
-====
-Published extensions are documented as part of the default branch (`main`)
-of the <<vulkan-docs,KhronosGroup/Vulkan-Docs>> project.
-They can optionally be included or excluded when generating specifications.
-====
-
-There is a rigid syntax for these names:
-
-  * Versions are named with the syntax `VK_VERSION_<major>_<minor>`.
-  * Extensions are named with the syntax `VK_<author>_<name>`.
-  * Layers are named with the syntax `VK_LAYER_<author>_<name>` or
-    `VK_LAYER_<fqdn>_<name>`.
-
-All these names include a `VK_` prefix, as described in the
-<<naming-preprocessor,Preprocessor Defines>> section above.
-In addition, layers add a `LAYER_` prefix.
-
-All these names must be valid C language identifiers.
-
-
-[[extensions-naming-conventions-name-strings]]
-=== Version, Extension and Layer Name Strings
-
-The `<name>` portion of version, extension and layer names is a concise name
-describing its purpose or functionality.
-The underscore (`_`) character is used as a delimiter between words.
-Every alphabetic character of the name must be in lower case.
-
-
-[[extensions-naming-author-IDs]]
-=== Author IDs for Extensions and Layers
-
-Extension and layer names also contain an _author ID_, indicated by
-`<author>` above, identifying the author of the extension/layer.
-This ID is a short, capitalized string identifying an author, such as a
-Khronos member developing Vulkan implementations for their devices, or a
-non-Khronos developer creating Vulkan layers.
-Author IDs must be registered with Khronos.
-
-Some authors have platform communities they wish to distinguish between, and
-can register additional author IDs for that purpose.
-For example, Google has separate Android and Chrome communities.
-
-Details on how to register an author ID are provided below.
-Layer authors not wishing to register an author ID with Khronos can instead
-use a fully-qualified domain name (FQDN, indicated by `<fqdn>` above) as the
-ID.
-The FQDN should be a domain name owned by the author.
-FQDNs cannot be used for extensions, only for layers.
-
-  * The following are examples of extension and layer names, demonstrating
-    the above syntax:
-  ** Extension names all use the base prefix `VK_`.
-  ** Khronos-ratified extensions add the reserved author ID `KHR` and use
-     the prefix `VK_KHR_`.
-  ** The following author IDs are reserved and must not be used:
-  *** `VK` - To avoid confusion with the top-level `VK_` prefix.
-  *** `VULKAN` - To avoid confusion with the name of the Vulkan API.
-  *** `LAYER` - To avoid confusion with the higher-level "`LAYER`" prefix.
-  *** `KHRONOS` - To avoid confusion with the Khronos organization.
-  ** Multi-author extensions that have not been ratified by Khronos (those
-     developed via cooperation between, and intended to be supported by two
-     or more registered authors) add the special author ID `EXT` to the base
-     prefix, and will use the prefix `VK_EXT_`.
-  ** Traditional author-specific extensions developed by one author (or one
-     author in cooperation with non-authors) add the author ID to the base
-     prefix.
-     For example, NVIDIA will use the prefix `VK_NV_`, and Valve will use
-     the prefix `VK_VALVE_`.
-     Some authors can have additional registered author IDs for special
-     purposes.
-     For example, an Android extension developed by Google - but part of an
-     Android open-source community project, and so not a proprietary Google
-     extension - will use the author ID `ANDROID`.
-  ** Layer names follow the same conventions as extensions, but use the base
-     prefix `VK_LAYER_`.
-  ** Because layers need not be registered with Khronos, an alternative
-     mechanism is needed to allow creating unique layer names without
-     registering an author ID.
-     Layer authors that prefer not to register an author ID can instead use
-     a fully-qualified domain name (FQDN) in reverse-order as an author ID,
-     replacing `.` (period) with `_` (underscore) characters.
-     The restriction that layer names must be valid C identifiers means that
-     some FQDNs cannot be used as part of layer names.
-
-[NOTE]
-.Note
-====
-The `KHX` author ID was used for _experimental_ extensions, as described in
-the "`Layers & Extensions`" appendix of the <<vulkan-spec,Vulkan API
-Specification>>.
-As of the initial Vulkan 1.1 public release, all `KHX` extensions have been
-promoted to `KHR` status, and this mechanism is no longer used.
-====
-
-[source, c]
-.Example
-----
-// Core API version name for Vulkan 1.1
-VK_VERSION_1_1
-
-// Khronos extension name
-VK_KHR_mirror_clamp_to_edge
-
-// Multivendor extension name
-VK_EXT_debug_marker
-
-// Vendor extension name using author ID NV
-VK_NV_glsl_shader
-
-// Vendor layer name using author ID LUNARG
-VK_LAYER_LUNARG_vktrace
-
-// Layer name using the FQDN www.3dxcl.invalid instead of an author ID
-VK_LAYER_invalid_3dxcl_www
-----
-
-[NOTE]
-.Note
-====
-To avoid linking to a nonexistent domain, the reserved TLD `.invalid` is
-used in the example above.
-====
-
-
-[[extensions-naming]]
-== Extension Command, Type, and Token Naming Conventions
-
-Extensions may add new commands, types, and tokens, or collectively
-"`objects`", to the Vulkan API.
-These objects are given globally unique names by appending the author ID
-defined above for the extension name as described in the
-<<naming-extension-identifiers, Extension Identifier Naming Conventions>>
-section above.
-
-
-[[extensions-api-registry]]
-== The Vulkan API Registry
-
-The canonical definition of the Vulkan APIs is kept in an XML file known as
-the *Vulkan API Registry*.
-The registry is kept in `xml/vk.xml` in the default branch (`main`) of the
-<<vulkan-docs,KhronosGroup/Vulkan-Docs>> project, containing the most
-recently released Vulkan API specification.
-The registry contains reserved author IDs, core and extension interface
-definitions, definitions of individual commands and structures, and other
-information which must be agreed on by all implementations.
-The registry is used to maintain a single, consistent global namespace for
-the registered entities, to generate the Khronos-supplied Vulkan header
-files, and to create a variety of related documentation used in generating
-the API specification and reference pages.
-Other uses of the registry outside Khronos include the LunarG Loader and
-Validation Layers, and a variety of language bindings.
-
-
-[[extensions-author-ID]]
-== Registering an Author ID with Khronos
-
-Previous Khronos APIs could only officially be modified by Khronos members.
-In an effort to build a more flexible platform, Vulkan allows non-Khronos
-developers to extend and modify the API via layers and extensions in the
-same manner as Khronos members.
-However, extensions must still be registered with Khronos.
-A mechanism for non-members to register layers and extensions is provided.
-
-Extension authors will be able to create an account on GitHub and register
-an author ID with Khronos through the
-<<vulkan-docs,KhronosGroup/Vulkan-Docs>> project.
-The author ID must be used for any extensions that author registers.
-The same mechanism will be used to request registration of extensions or
-layers with Khronos, as described below.
-
-To reserve an author ID, propose a merge request against
-<<extensions-api-registry,`vk.xml`>> in the default branch.
-The merge must add a `<tag>` XML tag and fill in the `name`, `author` and
-`contact` attributes with the requested author ID, the author's formal name
-(e.g. company or project name), and contact email address, respectively.
-The author ID will only be reserved once this merge request is accepted.
-
-Please do not try to reserve author IDs which clearly belong to another
-existing company or project which may wish to develop Vulkan extensions or
-layers in the future, as a matter of courtesy and respect.
-Khronos may decline to register author IDs that are not requested in good
-faith.
-
-
-[[extensions-vendor-id]]
-== Registering a Vendor ID with Khronos
-
-Vulkan implementors must report a valid vendor ID for their implementation
-when queried by fname:vkGetPhysicalDeviceProperties, as described in the
-"`Devices and Queues`" section of the <<vulkan-spec,Vulkan API
-Specification>>.
-If there is no valid PCI vendor ID defined for the physical device,
-implementations must obtain a Khronos vendor ID.
-
-Khronos vendor IDs are reserved in a similar fashion to
-<<extensions-author-ID,author IDs>>.
-While vendor IDs are not directly related to API extensions, the reservation
-process is similar, and so is described in this section.
-
-To reserve an Khronos vendor ID, you must first have a Khronos author ID.
-Propose a merge request against <<extensions-api-registry,`vk.xml`>> in the
-default branch.
-The merge must define a new enumerant by adding an `<enum>` tag to the
-`VkVendorId` `<enums>` tag, following the existing examples.
-The `value` attribute of the `<enum>` must be the next available unused
-value, and is the reserved vendor ID.
-The `name` attribute must be `VK_VENDOR_ID_<author>`, where `<author>` is
-the author tag.
-The vendor ID will be reserved only once this merge request has been
-accepted.
-
-Please do not try to reserve vendor IDs unless you are making a good faith
-effort to develop an implementation of a Khronos API and require one for
-that purpose.
-
-[NOTE]
-.Note
-====
-Other Khronos APIs such as OpenCL also utilize vendor IDs and share the
-Khronos vendor ID space.
-To obtain a vendor ID for these APIs, first reserve it in Vulkan's `vk.xml`
-and once that is done, utilize it in the other API.
-To avoid collisions, we are currently utilizing `vk.xml` as the central
-Khronos vendor ID registry.
-====
-
-
-== Registering Extensions and Layers
-
-Extensions must be registered with Khronos.
-Layers should be registered, but registration is not required.
-Registration means:
-
-  * Receiving an extension number.
-  * Adding the extension or layer name to the list in `vk.xml` and appearing
-    on the Khronos registry website, which will link to associated
-    documentation hosted on Khronos.
-  * For extensions which add to the Vulkan API, including definitions of
-    those additions to `vk.xml`.
-
-Registration for Khronos members is handled by filing a merge request in the
-internal gitlab repository modifying `vk.xml` in the default branch, which
-contains the core specification against which the extension or layer will be
-written.
-Registration is not complete until the registry maintainer has validated and
-accepted the merge.
-
-A similar mechanism is used to register extensions not authored by Khronos
-members.
-Implementors who are not Khronos members and who need to create extensions
-must register with Khronos by creating a GitHub account, and registering
-their author ID and/or FQDNs to that account.
-They can then submit new extension registration requests by proposing merges
-to `vk.xml`.
-On acceptance of the merge, the extension will be registered, though its
-specification need not be checked into the Khronos GitHub repository at that
-point.
-
-The registration process can be split into several steps to accommodate
-extension number assignment prior to extension publication:
-
-  * Acquire an extension number.
-    This is done by proposing a merge request against `vk.xml` similarly to
-    how <<extensions-author-ID,author IDs are reserved>>.
-    The merge should add a new `<extension>` tag at the end of the file with
-    attributes specifying the proposed extension `name`, the next unused
-    sequential extension `number`, the `author` and `contact` information
-    (if different than that already specified for the author ID used in the
-    extension name), and finally, specifying `supported="disabled"`.
-    The extension number will be reserved only once this merge request is
-    accepted into the default branch.
-  * Develop and test the extension using the registered extension number.
-  * Publish the extension to Khronos using the previously registered
-    extension number, by submitting merge requests to the default branch
-    defining the changes specific to the extension.
-    Changes to both the specification source, and to `vk.xml` will be
-    needed.
-  ** Extension changes to the specification source must be protected by
-     asciidoctor conditionals as described in the
-     <<extensions-documenting,Documenting Extensions>> section.
-  ** Changes to `vk.xml` must define the extension interfaces in the
-     `<extension>` block, and must also change the `supported` attribute
-     value of the `<extension>` to `supported="vulkan"`.
-  ** When publishing an extension, mark it as enabled by proposing a merge
-     to the default branch changing the `supported` attribute value of the
-     `<extension>` to `supported="vulkan"`.
-  ** Once the merge request defining an extension has been accepted into the
-     default branch, publication is complete - although it may not be
-     visible on GitHub until the next regular core Specification update is
-     pushed out.
-  ** Publishing on the <<vulkan-docs,Khronos public GitHub repository>> is
-     preferred when possible.
-     Khronos members may instead create branches on Khronos' internal gitlab
-     server, but those branches will eventually be mirrored to GitHub.
-  * It is still possible to publish a separate branch of the repository with
-    appropriate changes relative to the core Vulkan API branch instead, but
-    this approach is deprecated and discouraged.
-    If this is done, all changes to `vk.xml` must still be made in the
-    default branch.
-
-
-[[extensions-documenting]]
-== Documenting API Versions and Extensions
-
-API versions and extensions are documented as modifications to the Vulkan
-specification.
-Changes specific to a version or extension are protected by asciidoctor
-conditionals.
-The changes are only visible in generated documentation when the
-Specification is built with an asciidoctor attribute of that name defined.
-Khronos publishes three forms of the Vulkan Specification: the core API
-(e.g. versions 1.x) only; core API with all registered `KHR` extensions; and
-core API with all registered extensions.
-
-
-[[extensions-documenting-extensions]]
-=== Changes for New Extensions
-
-If an new extension, or a related group of them is of sufficient scope to
-require a new chapter of the specification, localize such changes into a
-small number of asciidoctor include files located under a subdirectory with
-the name of the extension.
-An example can be found in `chapters/VK_KHR_surface/wsi.txt`.
-Most extensions are not entirely self-contained, and also require changes in
-existing parts of the specification to document new interactions.
-Such changes should be inline in existing chapters.
-
-Extensions may also require small additions to `vk.xml`, in addition to
-defining the extension interfaces themselves, for purposes such as
-introducing new return codes or extending structures to existing APIs.
-
-[NOTE]
-.Note
-====
-We do not yet fully document an example of including a new version or
-extension.
-New versions are authored only by Khronos and examples will be available at
-such time that we publish a new version.
-Extension authors should refer to the default branch and search for the
-names of existing extensions, such as `VK_KHR_surface`, for markup examples.
-Some aspects of the changes for this example extension are described below.
-====
-
-Changes for extensions include (but may not be limited to) the following:
-
-  * All extensions must add an appendix to the Vulkan specification.
-    The appendix can be modeled after the `VK_KHR_shader_float_controls`
-    extension in `appendices/VK_KHR_shader_float_controls.txt.txt`, which
-    contains metainformation about the extension (as well as code examples,
-    and revision history).
-    Other useful references are the `VK_KHR_shader_draw_parameters`
-    appendix, which includes a variety of external dependencies and
-    interactions, and the `VK_EXT_debug_marker` appendix, which is a
-    simpler, standalone example.
-  ** The extension appendices are also incorporated in separate
-     per-extension reference pages, and must rigidly follow the structure of
-     the model appendices (although individual subsections can be added or
-     removed as required).
-  ** When creating references to the extension appendix from elsewhere in
-     the Specification, use the custom macro `apiext:`, instead of an
-     explicit asciidoctor link.
-     This allows more easily checking for invalid extensions, and changing
-     the link target for generated reference pages and other alternate
-     output forms.
-+
---
-[source,asciidoc]
-.Example Markup
-----
-A link to the apiext:VK_KHR_shader_float_controls extension.
-
-Do not use this (old) form: `<<VK_KHR_shader_float_controls>>`.
-----
-
-[NOTE]
-.Note
-====
-If you are converting an old branch with extension references in it to use
-the `apiext:` macro, you can use this shell script:
-
-[source,sh,subs=attributes+]
-----
-sed -i -E 's/`?<<(VK_[A-Za-z0-9_]*)>>`?/apiext:\1/g' chapters/{*txt,*/*txt} appendices/*txt
-----
-====
---
-  * In the preamble to the appendix, start with an asciidoctor `include` of
-    the automatically generated meta information.
-    This information includes the extension name string, type, number,
-    revision, and contact information from `vk.xml`.
-  * Following the `include`, add an *Other Extension Metadata* subsection
-    containing as many of the following items as are meaningful:
-  ** *Status* - *Complete*, *Draft*, or other.
-     When an extension is published in the default branch, it is normally
-     assumed to be complete; the *Status* field should be removed at this
-     time, unless it contains additional information.
-  ** *Last Modified Date* - if wanted, although git log queries can provide
-     equivalent information.
-  ** *IP Status* - Such as *No known IP claims*, or more specific
-     information if there are known IP claims and the extension has, or has
-     not been ratified by the Khronos Board of Promoters.
-  ** *Interactions and External Dependencies* - may include requirements or
-     interactions with optional Vulkan features, SPIR-V (`SPV`) and OpenGL
-     extensions, and interactions (other than strictly requiring) with other
-     Vulkan extensions.
-  ** *Contributors* - Names and corporate affiliations of people who have
-     made significant direct contributions to this extension.
-  * Following these items, add whitespace followed by a *Description*
-    section.
-    The first paragraph of this section should be a compact, standalone
-    description of the extension's functionality and purpose, suitable for
-    use in summaries of new functionality such as press releases or the
-    Vulkan change log.
-    Additional paragraphs expanding on the description may be added at the
-    author's discretion.
-  * If the extension has been deprecated or promoted, add *Deprecation*
-    and/or *Promotion* sections describing these actions.
-    There is standard boilerplate *Promotion* language used when promoting
-    to a Vulkan core version.
-    For example, see `appendices/VK_EXT_descriptor_indexing.txt` for
-    language used when promoting to Vulkan core, with some features made
-    optional in the promoted version.
-  * Next, add an asciidoctor `include` of the automatically generated
-    interface information.
-    This information includes API entities defined by the extension in
-    `vk.xml`, such as new commands, structures, enumerants, and so on.
-  * Following the `include`, add subsections describing interface
-    information for SPIR-V shading capabilities not captured in `vk.xml`,
-    such as:
-  ** *New SPIR-V Capabilities* (include xrefs to the appropriate new section
-     of the List of SPIR-V Capabilities in `appendices/spirvenv.txt`).
-  ** *New or Modified Built-In Variables* (include xrefs to the appropriate
-     new section of the Interfaces chapter).
-  ** *New Variable Decorations* (include xrefs to the appropriate new
-     section of the Interfaces chapter).
-  * Finally, add subsections describing other information about the
-    extension, such as:
-  ** *Issues* (in itemized list style, describing each significant issue
-     raised during development of the extension, and its resolution).
-  ** *Version History* (in itemized list style, describing significant
-     functional changes to the extension during its development).
-  * Each extension's appendix file is automatically included from
-    `appendices/extensions.txt` via code generated from `vk.xml`.
-    It is not necessary to explicitly include the appendices.
-  * Extensions usually make significant additions and changes to the Vulkan
-    specification.
-    They often add an entirely new chapter, or a new section of an existing
-    chapter, defining the new commands, structures, and enumerants.
-    For example, in the case of `VK_EXT_debug_marker`, it adds a new section
-    of the "`Debugging`" chapter in `chapters/debugging.txt`, by including
-    in that file:
-+
-[source,asciidoc]
-.Example Markup
-----
-\ifdef::VK_EXT_debug_marker[]
-\include::chapters/VK_EXT_debug_marker/wsi.txt[]
-\endif::VK_EXT_debug_marker[]
-----
-  * In every other place where the extension alters the behavior of the core
-    Specification, make such changes and protect the modifications with the
-    same asciidoctor conditionals.
-    For example, `VK_KHR_surface` adds new error codes to Vulkan.
-    These are added to `chapters/fundamentals.txt` in the "`Return Codes`"
-    section as follows:
-+
-[source,asciidoc]
-.Example Markup
-----
-... list of existing error codes
-\ifdef::VK_KHR_surface[]
-\include::VK_KHR_surface/VkResultErrorDescriptions_surface.txt[]
-\endif::VK_KHR_surface[]
-----
-  * If two extensions interact, the asciidoctor conditionals must be
-    carefully structured so as to properly document the interactions if the
-    specification is built with both extensions.
-    Asciidoc conditionals allow
-    link:{docguide}/directives/ifdef-ifndef/#checking-multiple-attributes[AND
-    and OR constructs].
-+
-[source,asciidoc]
-.Example Markup
-----
-\ifdef::VK_KHR_foo[]
-... discussion of VK_KHR_foo ...
-\ifdef::VK_KHR_fum[]
-... discussion of interactions between VK_KHR_foo and VK_KHR_fum ...
-\endif::VK_KHR_fum[]
-\endif::VK_KHR_foo[]
-
-\ifdef::VK_KHR_fum[]
-... discussion of VK_KHR_fum ...
-\endif::VK_KHR_fum[]
-----
-  * In cases where a new extension (A) modifies both core and an existing
-    extension (B), if the new extension (A) becomes part of the core at a
-    future release (i.e. is no longer an extension), the portion of the new
-    extension that modified the existing extension (B) effectively becomes
-    part of that existing extension.
-    Thus, at the new core release, enabling the pre-existing extension (B)
-    also enables the functionality that was previously enabled by enabling
-    the previously-new extension (A).
-  * For vendor extensions, changes made to existing core Specification
-    source files and to `vk.xml` all fall under the Contributor License
-    Agreement.
-    Vendors may use their own copyright on new files they add to the
-    repository, although that copyright must be compatible with the
-    Specification copyright.
-  * In most cases, there will be at most two new files added to the
-    specification: `extensions/*extension_name*.txt`, and
-    `chapters/*extension_name*.txt`.
-    If you need more than one new file in either the `chapters/` or
-    `extensions/` directories, create a subdirectory named with the
-    extension name and place the new files there.
-    For example, instead of `chapters/VK_KHR_android_surface.txt`, there is
-    `chapters/VK_KHR_android_surface/platformCreateSurface_android.txt` and
-    `chapters/VK_KHR_android_surface/platformQuerySupport_android.txt`, both
-    of which are conditionally included elsewhere in the core specification
-    files.
-  * Valid usage statements referring to interactions between structures in a
-    pname:pNext chain must be described in the parent structure's language,
-    as specified <<extensions-interactions-parent, in more detail below>>.
-  * Valid usage statements must: be kept atomic with regards to extension
-    conditionals.
-    Do not surround part of a single statement with conditionals.
-    Valid usage statements are automatically extracted from the
-    specification for use by ecosystem components like the validation
-    layers, and the extraction scripts need to know which valid usage
-    statements apply to which extensions.
-    The loops required to deal with partial statements are simply not worth
-    the trouble.
-    For example, instead of
-+
-[source,asciidoc]
-.Example Markup
-----
-  * If pname:buffer was created with a sharing mode of
-    ename:VK_SHARING_MODE_EXCLUSIVE, pname:srcQueueFamilyIndex and
-    pname:dstQueueFamilyIndex must: either both be
-    ename:VK_QUEUE_FAMILY_IGNORED, or both be a valid queue family (see
-    <<devsandqueues-queueprops>>)
-\ifdef::VK_KHR_external_memory[]
-    unless one of them is ename:VK_QUEUE_FAMILY_EXTERNAL_KHR and the other
-    is ename:VK_QUEUE_FAMILY_IGNORED.
-\endif::VK_KHR_external_memory[]
-----
-+
-Use
-+
-[source,asciidoc]
-.Example Markup
-----
-ifndef::VK_KHR_external_memory[]
-  * If pname:buffer was created with a sharing mode of
-    ename:VK_SHARING_MODE_EXCLUSIVE, pname:srcQueueFamilyIndex and
-    pname:dstQueueFamilyIndex must: either both be
-    ename:VK_QUEUE_FAMILY_IGNORED, or both be a valid queue family (see
-    <<devsandqueues-queueprops>>)
-endif::VK_KHR_external_memory[]
-ifdef::VK_KHR_external_memory[]
-  * If pname:buffer was created with a sharing mode of
-    ename:VK_SHARING_MODE_EXCLUSIVE, pname:srcQueueFamilyIndex and
-    pname:dstQueueFamilyIndex must: either both be
-    ename:VK_QUEUE_FAMILY_IGNORED, both be a valid queue family (see
-    <<devsandqueues-queueprops>>), or be
-    ename:VK_QUEUE_FAMILY_EXTERNAL_KHR and ename:VK_QUEUE_FAMILY_IGNORED in
-    either order
-endif::VK_KHR_external_memory[]
-----
-
-When writing language dependent on the interaction of multiple extensions,
-asciidoctor conditional syntax is very restricted and only supports a single
-level of logical AND (`+`) or OR (`,`) operators.
-For example, if a section of text only applies when one extensions is
-enabled and another is not, the following markup will not work:
-
-[source,asciidoc]
-.Example Markup (Does Not Work)
-----
-\ifdef::VK_KHR_shader_float16_int8+!VK_KHR_8bit_storage[]
-This should only appear if VK_KHR_shader_float16_int8 is defined and
-VK_KHR_8bit_storage is not defined.
-\endif::VK_KHR_shader_float16_int8+!VK_KHR_8bit_storage[]
-----
-
-Instead, expand the complex conditional into nested simpler ones:
-
-[source,asciidoc]
-.Example Markup (Does Work)
-----
-\ifdef::VK_KHR_shader_float16_int8[]
-\ifndef::VK_KHR_8bit_storage[]
-This should only appear if VK_KHR_shader_float16_int8 is defined and
-VK_KHR_8bit_storage is not defined.
-\endif::VK_KHR_8bit_storage[]
-\endif::VK_KHR_shader_float16_int8
-----
-
-
-[[extensions-documenting-versions]]
-=== Changes for New API Versions
-
-When creating a new version of the core API, such as Vulkan 1.1, changes are
-done similarly to extensions, with the following differences:
-
-[NOTE]
-.Note
-====
-This list is being developed in conjunction with the Vulkan 1.1
-Specification, is probably incomplete, and is subject to change.
-Items marked *TBD* are still being discussed within the Vulkan Working
-Group.
-====
-
-  * New API versions will be more tightly integrated into the specification
-    sources than extensions, although it is still helpful to partition
-    changes into new files when they are sufficiently self-contained.
-  * New API versions must add an appendix to the Vulkan specification.
-    Unlike the extension appendices, this appendix simply summarizes release
-    information (dates of Ratification by the Khronos Board of Promoters,
-    and of public release), the contributor list, and high-level
-    descriptions of new features in this version (including the names of any
-    extensions promoted to core status in this version).
-  ** TBD - we might choose to include a new API summary with links into the
-     specification body for new features, as well.
-  * TBD - how to name and where to include this appendix file.
-  * Changes to the Specification for new versions will range from small
-    changes to existing language, to new commands and structures, to adding
-    entire new chapters.
-    New chapters must be defined in separate files under the `chapters/`
-    directory, and included at an appropriate point in `vkspec.txt` or other
-    specification source files.
-    Other changes and additions are included inline in existing chapters.
-  * All changes that are specific to the new version must be protected by
-    the asciidoctor conditional (e.g. the version name).
-    For example, in the case of Vulkan 1.1:
-+
-[source,asciidoc]
-.Example Markup
-----
-Add a new chapter:
-
-\ifdef::VK_VERSION_1_1[]
-\include::chapters/newchapter11.txt[]
-\endif::VK_VERSION_1_1[]
-
-Add a new feature:
-
-\ifdef::VK_VERSION_1_1[]
-... language describing the new command, structure, or enumeration
-\endif::VK_VERSION_1_1[]
-----
-  * The specification must continue to be a valid document when the new
-    version is *not* defined, so that (for example) the Vulkan 1.1 branch
-    specification can continue to be updated.
-  * TBD - how to deprecate extensions which have been promoted to core
-    status in the new version, while continuing to have those extensions
-    appear then older versions of the specification are being built.
-  * The same constraints <<extensions-documenting-extensions, described
-    above>> for Valid Usage statements modified by extensions apply for new
-    versions.
-
-
-== Assigning Extension Token Values
-
-Extensions can define their own enumeration types and assign any values to
-their enumerants that they like.
-Each enumeration has a private namespace, so collisions are not a problem.
-However, when extending existing enumeration objects with new values, care
-must be taken to preserve global uniqueness of values.
-Enumerations which define new bits in a bitmask are treated specially as
-described in <<extensions-reserving-bitmask-values,Reserving Bitmask
-Values>> below.
-
-Each extension is assigned a range of values that can be used to create
-globally-unique enum values.
-Most values will be negative numbers, but positive numbers are also
-reserved.
-The ability to create both positive and negative extension values is
-necessary to enable extending enumerations such as etext:VkResult that
-assign special meaning to negative and positive values.
-Therefore, 1000 positive and 1000 negative values are reserved for each
-extension.
-Extensions must not define enum values outside their reserved range without
-explicit permission from the owner of those values (e.g. from the author of
-another extension whose range is infringed on, or from the Khronos Registrar
-if the values do not belong to any extension's range).
-
-[NOTE]
-.Note
-====
-Typically, extensions use a unique offset for each enumeration constant they
-add, yielding 1000 distinct token values per extension.
-Since each enumeration object has its own namespace, if an extension needs
-to add many enumeration constant values, it can reuse offsets on a per-type
-basis.
-====
-
-The information needed to add new values to the XML are as follows:
-
-  * The **extension name** (e.g. `VK_KHR_swapchain`) that is adding the new
-    enumeration constant.
-  * The existing enumeration **type** being extended (e.g.
-    stext:VkStructureType).
-  * The name of the new enumeration **token** being added (e.g.
-    etext:VK_STRUCTURE_TYPE_SWAPCHAIN_CREATE_INFO_KHR).
-  * The **offset**, which is an integer between 0 and 999 relative to the
-    base being used for the extension.
-  * The **direction** may be specified to indicate a negative value
-    (`dir="-"`) when needed for negative etext:VkResult values indicating
-    errors, like etext:VK_ERROR_SURFACE_LOST_KHR.
-    The default direction is positive, if not specified.
-
-Implicit is the registered number of an extension, which is used to create a
-range of unused values offset against a global extension base value.
-Individual enumerant values are calculated as offsets in that range.
-Values are calculated as follows:
-
-  * [eq]#_base_value_ = 1000000000#
-  * [eq]#_range_size_ = 1000#
-  * [eq]#enum_offset(_extension_number_, _offset_) = _base_value_ {plus}
-    (_extension_number_ - 1) {times} _range_size_ + _offset_#
-  * Positive values: [eq]#enum_offset(_extension_number_, _offset_})#
-  * Negative values: [eq]#enum_offset(_extension_number_, _offset_})#
-
-The exact syntax for specifying extension enumerant values is defined in the
-`readme.pdf` specifying the format of `vk.xml`, and extension authors can
-also refer to existing extensions for examples.
-
-If an extension becomes part of core, the enumerant values should remain the
-same as they were in the original extension, in order to maintain binary
-compatibility with existing applications.
-
-
-[[extensions-reserving-bitmask-values]]
-=== Reserving Bitmask Values
-
-Enumerants which define bitmask values are a special case, since there are
-only a small number of unused bits available for extensions.
-For core Vulkan API and KHR extension bitmask types, reservations must be
-approved by a vote of the Vulkan Working Group.
-For EXT and vendor extension bitmask types, reservations must be approved by
-the listed contact of the extension.
-Bits are reserved in the same fashion as extension numbers, by creating a
-placeholder reservation for each bit in the disabled XML `<extension>` block
-for that extension in the default branch.
-Once the extension is ready to be merged into the default branch, the
-`<extension>` block is updated with the actual name.
-An example reservation for a disabled extension is:
-
-[source,xml]
-----
-<extension name="VK_AMD_extension_24" number="24" author="AMD" supported="disabled">
-  <require>
-    <enum bitpos="6" extends="VkQueueFlagBits" name="VK_QUEUE_RESERVED_6_BIT_KHR"/>
-----
-
-[NOTE]
-.Note
-====
-Because of the way in which extension bitmask values are assigned inside the
-XML `<extension>` tag, it is not always obvious what the next free bit in a
-bitmask type is, or when a collision occurs.
-The most straightforward way to determine the next free bit for a given
-bitmask type is to look at the declaration of that type in the generated
-header files.
-When generating the headers, the script will raise warnings about "`Two
-enums found with the same value`" that will help identify this problem.
-====
-
-When a 32-bit flags type is close to running out of bits, a corresponding
-64-bit flag type may be created for use with new interfaces, such as the
-tlink:VkAccessFlags and tlink:VkAccessFlags2KHR types.
-These flag types have corresponding 32- and 64-bit bitmask types
-(elink:VkAccessFlagBits and elink:VkAccessFlagBits2KHR).
-When reserving remaining bits at bit positions 0 through 31, a similarly
-named bit should be reserved in both bitmask types
-(ename:VK_ACCESS_MEMORY_READ_BIT and ename:VK_ACCESS_2_MEMORY_READ_BIT_KHR),
-to avoid having the same bit used for different purposes in two otherwise
-very similar interfaces.
-If that usage is not actually supported by one or the other bitmask type,
-the bit should still be reserved, but commented out in the XML.
-
-[NOTE]
-.Note
-====
-The existing reservation mechanism used for in-development extensions does
-not work well for non-disabled extensions.
-So we currently do not have a good way of semantically indicating that a bit
-is reserved, but should not appear in the header file, for a non-disabled
-extension, and an XML comment reserving the bit is a workaround.
-This case will come up very rarely.
-====
-
-
-[[extensions-new-flags-types]]
-== New Flags and Bitmask Types
-
-When an extension introduces a new flags (etext:*Flags) type, it should also
-introduce a corresponding new bitmask (etext:*FlagBits) type.
-The flags type contains zero more more bits from the bitmask, and is used to
-specify sets of bits for commands or structures.
-
-In some cases, a new flags type will be defined with no individual bits yet
-specified.
-This usage occurs when the flags are intended for future expansion.
-In this case, even though the corresponding bitmask type is not yet useful,
-the (empty) bitmask type should be defined in `vk.xml`.
-The empty bitmask type and corresponding flags type should be given
-boilerplate definitions in the specification.
-
-
-== Required Extension Tokens
-
-In addition to any tokens specific to the functionality of an extension, all
-extensions must define two additional tokens.
-
-  * `VK_EXTNAME_SPEC_VERSION` is an integer constant which is the revision
-    of the extension named `VK_extname` (`EXTNAME` is all upper-case, while
-    extname is the capitalization of the actual extension name).
-    This value begins at 1 when an extension specification is first
-    published (pre-release versions may use an internal numbering scheme
-    that is reset at release time), and is incremented when changes are
-    made.
-    Note that the revision of an extension defined in the Vulkan header
-    files and the revision supported by the Vulkan implementation (the
-    pname:specVersion field of the sname:VkExtensionProperties structure
-    corresponding to the extension and returned by one of the
-    link:html/vkspec.html#extendingvulkan-extensions[extension queries]) may
-    differ.
-    The revision value indicates a patch version of the extension
-    specification, and differences in this version number maintain full
-    compatibility, as defined in the
-    link:html/vkspec.html#_compatibility_guarantees_informative[Compatibility
-    Guarantees] section of the <<vulkan-spec,Vulkan API Specification>>.
-
-[NOTE]
-.Note
-====
-Any changes requiring the addition or removal of a type or command should be
-done by creating a new extension.
-The resulting extension should take care to include the appropriate
-dependency information on the original extension.
-====
-
-[NOTE]
-.Note
-====
-When the Debug Report extension (VK_EXT_debug_report) was recently updated
-to include the enum values of VK_DEBUG_REPORT_OBJECT_TYPE_DISPLAY_KHR_EXT
-and VK_DEBUG_REPORT_OBJECT_TYPE_DISPLAY_MODE_KHR_EXT, we violated this
-policy.
-That change was done prior to this revision policy clarification.
-We intend to follow this policy in the future, although in exceptional
-circumstances an exception may be made.
-====
-
-  * `VK_EXTNAME_EXTENSION_NAME` is a string constant which is the name of
-    the extension.
-
-For example, for the WSI extension `VK_KHR_surface`, at the time of writing
-the following definitions were in effect:
-
-[source,c]
-----
-#define VK_KHR_SURFACE_SPEC_VERSION 24
-#define VK_KHR_SURFACE_EXTENSION_NAME "VK_KHR_surface"
-----
-
-
-== Extension Handles, Objects, Enums, and Typedefs
-
-Expanding on previous discussion, extensions can add values to existing
-enums; and can add their own commands, enums, typedefs, etc.
-This is done by adding to <<extensions-api-registry,`vk.xml`>>.
-All such additions will be included in the Vulkan header files supplied by
-Khronos.
-
-If the extension adds a new handle to Vulkan, a corresponding value must be
-added to ename:VkObjectType (as defined in the "`Debugging`" section of the
-<<vulkan-spec,Vulkan API Specification>>) in order to allow components to
-identify and track objects of the new type.
-
-The new enumeration value must conform to the naming defined in the
-<<naming-extension-enumerant-names,Extension Enumerant Names>> section.
-In this case, the type's etext:Vk prefix is replaced with the enum prefix
-etext:VK_OBJECT_TYPE_, and the rest of the handle name is converted as
-described in that section.
-
-.Conversion of Handle to sname:VkObjectType Examples:
-[width="70%",options="header",cols="50%,50%"]
-|====
-| Handle                        | sname:VkObjectType token
-| VkSurfaceKHR                  | VK_OBJECT_TYPE_SURFACE_KHR
-| VkDescriptorUpdateTemplateKHR | VK_OBJECT_TYPE_DESCRIPTOR_UPDATE_TEMPLATE_KHR
-|====
-
-
-[[extension-function_prototypes]]
-== Extension Function Prototypes
-
-Function pointer declarations and function prototypes for all core Vulkan
-API commands are included in the Vulkan header files.
-These come from the official XML specification of the Vulkan API hosted by
-Khronos.
-
-Function pointer declarations are also included in the Vulkan header for all
-commands defined by registered extensions.
-Function prototypes for extensions may be included in the headers.
-Extension commands that are part of the Vulkan ABI must be flagged in the
-XML.
-Function prototypes will be included in the headers for all extension
-commands that are part of the Vulkan ABI.
-
-An extension can be considered platform specific, in which case its
-interfaces in the header files are protected by #ifdefs.
-This is orthogonal to whether an extension command is considered to be part
-of the Vulkan ABI.
-
-The initial set of WSI extension commands (i.e. for `VK_KHR_surface`,
-`VK_KHR_swapchain`, and `VK_KHR_*_surface`) are considered to be part of the
-Vulkan ABI.
-Function prototypes for these WSI commands are included in platform-specific
-files such as `vulkan_android.h`.
-See the "`Window System-Specific Header Control (Informative)`" section of
-the Vulkan Specification for more details.
-
-[NOTE]
-.Note
-====
-Based on feedback from implementors, Khronos expects the Android, Linux, and
-Windows Vulkan SDKs to include our header files, and export the supported
-WSI functions for those platforms from their loader libraries.
-Other implementations can make different choices for their headers and
-loader libraries, but are encouraged to be consistent with these
-implementations.
-====
-
-
-== Accessing Extension Functions from Programs
-
-fname:vkGetInstanceProcAddr and fname:vkGetDeviceProcAddr can be used in
-order to obtain function pointer addresses for core and extension commands
-(per the description in the "`Command Function Pointers`" section of the
-<<vulkan-spec,Vulkan API Specification>>).
-Different Vulkan API loaders can choose to statically export functions for
-some or all of the core Vulkan API commands, and can statically export
-functions for some or all extension commands.
-If a loader statically exports a function, an application can link against
-that function without needing to call one of the ftext:vkGet*ProcAddr
-commands.
-
-[NOTE]
-.Note
-====
-The Vulkan API loader for Android, Linux, and Windows exports functions for
-all core Vulkan API commands, and for a set of WSI extension commands that
-are applicable to those operating systems (see Vulkan loader documentation
-for the relevant platform/OS for details).
-The WSI functions are considered special, because they are required for many
-applications.
-====
-
-
-[[extensions-interactions]]
-== Extending Structures
-
-Extending structures modify the behavior of existing commands or structures
-by providing additional parameters, using the pname:pNext field of an
-existing structure to point to a chain of additional structures.
-This mechanism is described in more detail in the "`Valid Usage for
-Structure Pointer Chains`" section of the <<vulkan-spec,Vulkan API
-Specification>>.
-
-Multiple extending structures affecting the same structure, defined by
-multiple core versions or extensions, can be chained together in this
-fashion.
-Any structure which can be chained in this fashion must begin with the
-following two members:
-
-["source","c++",title=""]
-----
-VkStructureType        sType;
-const void*            pNext;
-----
-
-It is in principle possible for extensions to provide additional parameters
-through alternate means, such as passing a handle parameter to a structure
-with a pname:sType value defined by the extension.
-This approach is strongly discouraged.
-
-When chaining multiple extending structures together, the implementation
-will process the chain starting with the base structure and proceeding
-through each successive extending structure in turn.
-Extending structures should behave in the same fashion no matter the order
-of chaining, and must define their interactions with other extensions such
-that the results are deterministic.
-
-If an extending structure must be present in a pname:pNext chain in specific
-ordering relative to other structures in the chain in order to provide
-deterministic results, it must define that ordering and expected behavior as
-part of its specification and valid usage statements.
-
-[NOTE]
-.Note
-====
-Specific ordering requirements in a pname:pNext chain are strongly
-discouraged.
-====
-
-Validation of structure types in pname:pNext chains is automatically
-generated from the registry, based on the description of attr:structextends
-in link:registry.html[the registry document].
-
-
-[[extensions-interactions-parent]]
-== Valid Usage and pname:pNext Chains
-
-When there is a Valid Usage interaction between a parent structure and an
-extending structure appearing in the pname:pNext chain of the parent, that
-interaction must: be described in the explicit Valid Usage section of the
-parent structure, rather than the extending structure, and must: be
-protected by appropriate extension-specific `ifdef` constructs.
-
-For example, a constraint added to the sname:VkImageCreateInfo structure by
-the presence of structures defined by two extensions which cannot interact
-is described as:
-
-[source,asciidoc]
-.Example Markup
-----
-// CORRECT: define interaction with children in parent VkImageCreateInfo
-// structure
-\ifdef::VK_NV_external_memory+VK_KHR_external_memory[]
-  * If the pname:pNext chain includes a
-    slink:VkExternalMemoryImageCreateInfoNV structure, it must: not include
-    a slink:VkExternalMemoryImageCreateInfoKHR structure.
-\endif::VK_NV_external_memory+VK_KHR_external_memory[]
-----
-
-However, a constraint added to sname:VkBufferCreateInfo by an extending
-structure in the `VK_NV_dedicated_allocation` extension must not be
-described as part of the extending structure's valid usage:
-
-[source,asciidoc]
-.Example Markup
-----
-// WRONG! Do not define interaction with parent in child
-// VkDedicatedAllocationBufferCreateInfoNV structure
-  * If pname:dedicatedAllocation is ename:VK_TRUE,
-    sname:VkBufferCreateInfo::pname:flags must: not include
-    ename:VK_BUFFER_CREATE_SPARSE_BINDING_BIT,
-    ename:VK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT, or
-    ename:VK_BUFFER_CREATE_SPARSE_ALIASED_BIT
-----
-
-Instead, define the constraint as part of the parent
-sname:VkBufferCreateInfo structure's valid usage:
-
-[source,asciidoc]
-.Example Markup
-----
-// REWRITTEN CORRECTLY: Define interaction with child in
-// parent VkBufferCreateInfo structure
-\ifdef::VK_NV_dedicated_allocation[]
-  * If the pname:pNext chain includes a
-    slink:VkDedicatedAllocationBufferCreateInfoNV structure, and the
-    pname:dedicatedAllocation member of the chained structure is
-    ename:VK_TRUE, then pname:flags must: not include
-    ename:VK_BUFFER_CREATE_SPARSE_BINDING_BIT,
-    ename:VK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT, or
-    ename:VK_BUFFER_CREATE_SPARSE_ALIASED_BIT
-\endif::VK_NV_dedicated_allocation[]
-----
-
-[[extensions-feature-structures]]
-== Feature Structures
-
-A feature structure is a structure that extends
-sname:VkPhysicalDeviceFeatures2 and sname:VkDeviceCreateInfo, and which
-provides basetype:VkBool32 members to indicate implementation support for
-individual features.
-
-["source","c++",title=""]
-----
-typedef struct VkPhysicalDeviceImageRobustnessFeaturesEXT {
-    VkStructureType    sType;
-    void*              pNext;
-    VkBool32           robustImageAccess;
-} VkPhysicalDeviceImageRobustnessFeaturesEXT;
-----
-
-Every device or physical-device extension that adds or modifies device-level
-commands, or adds new structures or enum values used in device-level
-commands, must define a feature structure.
-
-If an extension requires a feature structure, then any mandatory features
-must be described in the Feature Requirements section.
-New extensions must mandate that implementions support at least one feature
-of an extension.
-
-[source,asciidoc]
-.Example Markup
-----
-ifdef::VK_EXT_image_robustness[]
-  * <<features-robustImageAccess, pname:robustImageAccess>>, if the
-    apiext:VK_EXT_image_robustness extension is supported.
-endif::VK_EXT_image_robustness[]
-----
diff --git a/registry/vulkan/style/markup.txt b/registry/vulkan/style/markup.txt
deleted file mode 100644
index 741537c..0000000
--- a/registry/vulkan/style/markup.txt
+++ /dev/null
@@ -1,1163 +0,0 @@
-// Copyright 2015-2021 The Khronos Group Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-[[markup]]
-= Markup Style
-
-This chapter demonstrates Asciidoc and Specification structure, including
-text layout and markup style.
-
-
-[[markup-copyrights]]
-== Copyrights and Licenses
-
-The asciidoctor source for the Vulkan Specification and related documents is
-under an open source license.
-
-When creating a *new* file, add the following copyright and license
-statement at the top:
-
-[source,asciidoc]
-.Example Markup
-----
-// Copyright YEAR AUTHOR
-// SPDX-License-Identifier: CC-BY-4.0
-
-----
-
-`YEAR` should be replaced by the year in which the file was created.
-
-`AUTHOR` is normally "`The Khronos Group Inc.`".
-If a new file is created by a member company or outside contributor, use
-that entity's legal name as the author.
-
-`SPDX-License-Identifier` gives the license used for the file, following the
-https://spdx.github.io/spdx-spec/appendix-V-using-SPDX-short-identifiers-in-source-files/[SPDX]
-standard for short identifiers in source files.
-`CC-BY-4.0` is the short identifier for the
-https://spdx.org/licenses/CC-BY-4.0.html[Creative Commons Attribution 4.0
-International] license.
-
-No matter who holds the *copyright* on a source file for the Specification,
-it must be placed under the `CC-BY-4.0` *license*.
-When contributing to the Specification, contributors are required to execute
-a Contributor License Agreement to this effect.
-
-When updating an *existing* file, modify the following copyright and license
-statement to include the year(s) of modification.
-For example:
-
-[source,asciidoc]
-.Example Markup
-----
-// Copyright 2018-2021 The Khronos Group Inc.
-// SPDX-License-Identifier: CC-BY-4.0
-
-----
-
-indicates a file which has been been modified in 2018, 2019, and 2020
-inclusive.
-
-
-[[markup-structure]]
-== Document Structure
-
-Chapters and sections follow a rigid template consisting of an optional
-anchor (if other parts of the document cross-reference the section) followed
-by a link:{docguide}/sections/titles-and-levels/[one line title] and a blank
-line.
-The anchor is typically the base name of the file containing the chapter,
-with a lowercased version of the section name following, with spaces
-replaced by dashes.
-
-Always use the one-line title form, with one to four `=` signs preceding the
-chapter/section title.
-The two-line title form cannot be easily searched for, and often looks like
-other types of asciidoctor delimiters.
-Using a mix of one-line and two-line titles causes compatibility issues, and
-using the two-line title form may implicitly set a backwards-compatibility
-syntax mode we do not want.
-
-Always precede the anchor by two blank lines (except at the beginning of a
-file), and follow the title by a blank line, to set off sections visibly.
-
-[source,asciidoc]
-.Example Markup
-----
-[[markup]]
-= Markup Style
-
-
-[[markup-sample-section]]
-== Sample Section
-----
-
-
-[[markup-sample-section]]
-== Sample Section
-
-This is a sample section structurally similar to the <<vulkan-spec,Vulkan
-API Specification>>, nested one level inside a chapter.
-Sections can be nested up to level 5, although not all levels are included
-in the Table of Contents.
-
-
-[[markup-layout]]
-== Asciidoc Markup And Text Layout
-
-Asciidoc source should be text filled to 76 columns with hard line breaks.
-Each sentence in a paragraph ends with a newline to minimize git diff
-conflicts.
-Except when necessary for lists or other markup, text should begin at the
-first column of each line (leading spaces are often semantically meaningful
-in asciidoctor markup).
-
-UTF-8 characters outside the ASCII subset should be used sparingly, only
-when needed for non-English names.
-Instead use asciidoctor markup for special characters, if required.
-For example, two hyphens produces an em-dash:
-
-[NOTE]
-.Example Markup
-====
-
-`+An -- em-dash+` -> An -- em-dash
-====
-
-As an exception, multiplication should be marked with the unicode
-multiplication symbol "`×`" (and *not* an asterisk) when used in plain text.
-You may also use the `\{times}` asciidoctor attribute for this symbol.
-In math sections, the same symbol should be referred to as `\times`.
-In code sections, a conventional asterisk (`*`) should be used instead.
-
-The trailing `+` character causes a hard break in asciidoctor markup, and
-should not be used except for this purpose.
-Markup addition with the \{plus} asciidoctor attribute, except in
-<<writing-math-latexmath, LaTeX math>> and <<markup-blocks, source blocks>>.
-
-See the Asciidoctor docs for
-link:{docguide}/subs/special-characters[supported special characters], as
-well as use of entity references.
-
-Quotation marks should use the 66/99 convention.
-That is, double asymmetric quotation marks, indicated by a quotation mark
-then a backtick as opening marks, and a backtick then quotation mark as
-closing marks (pass:["`like this`"]), which renders "`like this`".
-
-_Never_ use hard tabs or trailing blanks.
-
-* In some cases, limitations of asciidoctor markup may result in lines that
-  are longer than 76 characters and cannot easily be shortened without
-  compromising the output documents.
-
-
-[[markup-minimize-indentation]]
-=== Minimize Indentation
-
-Indentation (leading whitespace) for markup should not be used, except for
-<<markup-sample-section-bullet-lists, bullet lists>> as described below.
-Leading whitespace can affect asciidoctor processing.
-
-When presenting unformatted text, use asciidoctor source blocks as described
-in the next section.
-Source blocks do allow leading whitespace, for example when including sample
-code in C.
-
-
-[[markup-blocks]]
-=== Blocks
-
-There are a variety of asciidoctor _block_ constructs.
-With the exception of <<markup-sample-section-tables,tables>> and of _open
-blocks_ used to group markup together, blocks should be delimited by exactly
-four repeated characters indicating the block type, for consistency.
-The block types and delimiters are shown in the following table.
-
-.Asciidoc Block Delimiters
-[width="70%",options="header",cols="25%,10%,65%"]
-|====
-| Table Type    | Delimiter     | Comments
-| Open          | `--`          | For <<markup-sample-section-bullet-lists,continuation blocks>>
-| Example       | `====`        | For <<markup-informative-notes,Notes>>
-| Passthrough   | `pass:[++++]` | For some kinds of <<writing-math,math markup>>
-| Comment       | `////`        |
-| Listing       | `----`        | For source code listings
-| Listing (alt.)| `pass:[~~~~]` | For source code listings <<markup-blocks-source, imbedded in Open blocks>>
-| Sidebar       | `pass:[****]` | For <<markup-implementors-notes,implementor's notes>>
-| Table         | `\|====`      | For <<markup-sample-section-tables,tables>>
-| Quote         | `pass:[____]` |
-| Literal       | `pass:[....]` |
-|====
-
-
-[[markup-blocks-source]]
-==== Listing Blocks Imbedded in Open Blocks
-
-If you need to include a `source` block that would normally use `----`
-delimiters inside an open block delimiting a reference page, use
-`pass:[~~~~]` delimiters around the inner source block instead.
-This avoids confusing some of the toolchain which makes assumptions about
-block delimiters not being nested, such as the VUID assignment script.
-Tildes are not standard asciidoctor markup, but are supported by a custom
-Ruby extension.
-
-
-[[markup-footnotes]]
-=== Footnotes
-
-Use manually marked-up footnotes (the asciidoctor footnote construct is OK
-for PDF outputs, but does not work well with long HTML documents since it
-places all footnotes at the end of the document).
-
-Refer to footnotes with asciidoctor superscript notation^1^, and mark up the
-footnotes below, but near the references as labelled lists.
-Manually assigned footnote numbers will inevitably be reused, which is OK as
-long as the colliding numbers are not in the same section.
-
-1::
-    Like this example footnote.
-
-[NOTE]
-====
-.Example Markup
-[source,asciidoc]
-----
-See reference^2^
-
-2::
-    Reference 2.
-----
-
-->
-
-See reference^2^
-
-2::
-    Reference 2.
-====
-
-
-[[markup-sample-section-lists]]
-=== Lists
-
-
-[[markup-sample-section-bullet-lists]]
-==== Bullet Lists and Continuation Blocks
-
-  * Bullet lists are the preferred form of list, aside from glossary
-    definitions.
-  * Lists should have text indented by 4 spaces and the list item delimiter
-    (e.g. one or more asterisks, for bullet lists) indented by two spaces.
-+
-Note that continuation blocks for list items longer than one paragraph
-cannot be indented, only the first paragraph.
-+
-In general, successive list items should not be separated by white space.
-However, list continuation blocks should be followed by a `+` on a line by
-itself, or by a blank line, due to limitations of the asciidoctor parser.
-+
-  * Indent bullet lists two spaces (to the bullet), 4 spaces (to the text,
-    if it extends over multiple lines).
-    This lets us visually distinguish lists from other kinds of markup.
-  ** Nested lists should align the leftmost list item delimiter (bullet,
-     etc.) with the parent delimiter.
-
-[source,asciidoc]
-.Example Markup
-----
-  * This is the first item in a bullet list.
-  * The second item is described with two paragraphs.
-    The second paragraph is in a continuation block:
-+
-This is a continuation block containing the second paragraph,
-+
-  ** This is a nested list item for the second item.
-     Since it follows a continuation block, it must be separated by a blank
-     line or `+` from that block.
-----
-
-[example]
-====
-  * This is the first item in a bullet list.
-  * The second item is described with two paragraphs.
-    The second paragraph is in a continuation block:
-+
-This is a continuation block containing the second paragraph,
-+
-  ** This is a nested list item for the second item.
-     Since it follows a continuation block, it must be separated by a blank
-     line or `+` from that block.
-====
-
-  * It is possible to continue a paragraph of the first bullet after a list
-    of sub-bullets if so desired by using continuations in a similar
-    fashion:
-
-[source,asciidoc]
-.Example Markup
-----
-  * This an item in a bullet list.
-+
-  ** This is a nested list item for the second item.
-     Since it follows a continuation block, it must be separated by a blank
-     line or `+` from that block.
-+
-This is a continuation of the first bullet
-----
-
-[example]
-====
-  * This an item in a bullet list.
-+
-  ** This is a nested list item for the second item.
-     Since it follows a continuation block, it must be separated by a blank
-     line or `+` from that block.
-+
-This is a continuation of the first bullet
-====
-
-[[markup-labelled-lists]]
-==== Labelled Lists
-
-Labelled lists may be used in some cases such as
-<<markup-footnotes,footnotes>>; glossary entries; and long lists of
-information about similar names, such as the "`Features, Limits, and
-Formats`" chapter of the Vulkan Specification.
-Whenever labelled lists are used the label and its terminating double colon
-must be alone on a line, followed by the contents of that list entry.
-
-For consistency do not use labels ending in three or four colons, or two
-semicolons, even though these forms are allowed in asciidoctor markup.
-
-[source,asciidoc]
-.Example Markup
-----
-Glossary Entry::
-    This is a glossary entry.
-
-Last Modified Date::
-    2016-02-16
-----
-
-
-[[markup-numbered-lists]]
-==== Numbered Lists
-
-Numbered lists may be used if strictly necessary to place an ordering on
-list items.
-Always use _implicit numbering_, with the bullet point being a single
-period.
-
-  . Explicit numbering with a number preceding the period is prone to
-    accumulating errors as edits are made.
-  . In addition, the markup is harder to recognize for scripts and tools
-    (other than asciidoctor itself) operating on the document source.
-
-[source,asciidoc]
-.Example Markup
-----
-. First list item.
-. Second list item.
-. Etc.
-----
-
-
-[[markup-sample-section-anchors]]
-=== Anchors and Cross-references
-
-In general, chapters and sections should always have anchors, following the
-naming convention <<markup,discussed above>>.
-Anchors to other sections of the document may be inserted as needed.
-In addition, the autogenerated include files defining commands, structures,
-enumerations and flags all define anchors whose name is the name of the
-command or type being defined, so it is easy to link to a (for example) a
-command name such as <<vkCreateCommandPool,vkCreateCommandPool>>.
-However, using the <<markup-macros,markup macros>> described below is
-preferred when linking to anchors corresponding to API names, such as
-flink:vkCreateCommandPool.
-
-If you want a cross-reference to an anchor to appear as something other than
-the raw anchor name, always make sure to include that text as part of the
-cross-reference.
-There are several different toolchains followed for various forms of
-asciidoctor output, and not all of them treat anchors without alt-text the
-same way.
-
-[source,asciidoc]
-.Example Markup
-----
-In general, chapters and sections should always have anchors, following the
-naming convention <<markup,discussed above>>.
-...
-so it is easy to link to a (for example) a command name such as
-<<vkCreateCommandPool,vkCreateCommandPool>>. However, using the
-<<markup-macros,markup macros>> described below is preferred when linking to
-anchors corresponding to API names, such as flink:vkCreateCommandPool.
-----
-
-
-[[markup-sample-section-tables]]
-=== Tables
-
-Asciidoc tables should use the block prefix `|====`.
-Where feasible, align the `|` separating cells across rows.
-This will sometimes result in very wide tables in the source document, but
-makes it easier to see which cells belong to which column.
-Alternatively, long cells can be broken onto a separate line with the `|`
-separator appearing first, except for the first row of the table, which must
-all appear on a single line.
-
-Tables should usually be preceded with a short title.
-
-[source,asciidoc]
-.Example Markup
-----
-.Normative Terminology Macros
-[width="100%",options="header"]
-|====
-| Macro Name     | Output
-| can{cl}        | can:
-| cannot{cl}     | cannot:
-|====
-----
-
-
-[[markup-sample-section-images]]
-=== Figures
-
-All figures (images) must be marked up as follows, to ensure there is an
-anchor and that the figure is given a caption which shows the figure number
-and is added to the list of figures.
-
-[source,asciidoc]
-.Example Markup
-----
-[[fig-anchorname]]
-image::{images}/imagename.svg[align="center",title="Figure caption",opts="{imageopts}"]
-----
-
-There must be SVG versions of each figure checked into the `images/`
-directory, to support generating both HTML and PDF outputs.
-This directory is referred to as `\{images}` so that there's a consistent
-path no matter what directory the file including the images is in.
-The PDF generation pipeline is now able to use SVG images, so PDF versions
-of each image are no longer required.
-The `opts=` attribute defaults to `inline`, which decreases output image
-size in the generated HTML.
-However, the `inline` option interferes with generating HTML diffs between
-two specifications with the script we currently use.
-By using an asciidoctor attribute, this behavior can be controlled.
-
-Asciidoctor restricts captions in figures to be a single line in the source
-document.
-If a longer caption is required, follow the figure directive with a sidebar
-block including the full caption preceded by a link to the figure:
-
-[source,asciidoc]
-.Example Markup
-----
-.Caption
-****
-In the <<fig-anchorname,Figure caption>> diagram, the diagram represents
-... long caption text here.
-****
-----
-
-
-[[markup-indentation-equations]]
-=== Indentation of Equations
-
-Asciidoctor separates structural markup in asciidoctor source from
-formatting, in HTML CSS stylesheets and invoked via asciidoctor "`role`"
-attributes on blocks.
-However, the flexibility of CSS stylesheets is not available in PDF layout
-using the existing PDF toolchain and YML stylesheets.
-
-Explicit indentation should be used sparingly in the specification, but one
-place it is useful is with equations.
-Using <<writing-math, asciidoctor math markup>>, the easiest way to produce
-indentation is with a list where the leading bullet or descriptive text is
-suppressed
-
-[source,asciidoc]
-.Example Markup
-----
-[none]
-  * A {plus} B
-
-or
-
-  {empty}:: A {plus} B
-----
-
-->
-
-[example]
-====
-[none]
-  * A {plus} B
-
-or
-
-  {empty}:: A {plus} B
-====
-
-
-[[markup-italicized-enumerant-names]]
-=== Italicized Enumerant Names
-
-When writing a "`wildcard`" enumerant name containing an italicized term
-within it, it's difficult to directly combine constrained formatting markup
-(double underscores) and the single underscores that separate words in the
-enumerant.
-Instead, use attribute substitution as suggested in the "`Escape
-unconstrained formatting marks`" section of the AsciiDoc Language
-Documentation.
-To help when this is required, an attribute `\{ibit}` expanding to
-`pass:[_i_]` is defined in `config/attribs.txt`, and the same technique can
-be used for similar markup in other cases if `_i_` is not the desired
-italicized term:
-
-[source,asciidoc]
-.Example Markup
-----
-`VK_IMAGE_ASPECT_PLANE__{ibit}__BIT`
-----
-
-->
-
-[example]
-====
-`VK_IMAGE_ASPECT_PLANE__{ibit}__BIT`
-====
-
-[NOTE]
-.Note
-====
-This technique cannot be used with the <<markup-macros, markup macros>> that
-are normally used to semantically tag API names.
-Because there are so few places it's needed, conventional backquote
-formatting markup is used instead.
-====
-
-
-[[markup-macros]]
-== Markup Macros and Normative Terminology
-
-This section discusses Asciidoc macros used in the document.
-In addition to the macros defined by asciidoctor itself, additional macros
-are defined by the <<vulkan-spec,Vulkan API Specification>> and Reference
-Page configuration files.
-
-
-[[markup-macros-api]]
-=== API Markup Macros
-
-These macros must be used to tag command, structure, enumeration, enumerant,
-and other Vulkan-specific names so they can be rendered in a distinctive
-fashion, link to definitions of those names, and be easily searched for in
-the source documents.
-The validation scripts (`make allchecks` output) also rely on these macros
-being used consistently and correctly.
-The API markup macros, with examples of their use, are in the following
-table (note that these examples will not actually successfully link into
-corresponding specification or reference pages, since they are in an
-unrelated document).
-
-.API Markup Macros
-[width="100%",options="header",cols="20%,80%"]
-|====
-| Macro Name    | Usage and Meaning
-| reflink{cl}   | Generates a cross-reference or link to an unknown type of
-                  API entity. This is only used in generated content in the
-                  reference pages which refers to other reference pages
-                  which are not actually part of the API. Example:
-                  reflink{cl}WSIheaders -> reflink:WSIheaders.
-| pass:c[`apiext:`] | Generates a cross-reference or link to the description
-                  of an extension. Example: pass:c[`apiext:VK_KHR_ray_tracing_pipeline`]
-                  -> `apiext:VK_KHR_ray_tracing_pipeline`.
-| flink{cl}     | Generates a cross-reference or link to the definition of
-                  the command name in the macro argument. Example:
-                  flink{cl}vkCreateCommandPool -> flink:vkCreateCommandPool.
-| fname{cl}     | Formats the macro argument like flink{cl}. Does not
-                  generate a cross-reference. Example:
-                  fname{cl}vkCreateCommandPool -> fname:vkCreateCommandPool.
-
-                  Only use this macro <<markup-macros-api-name, when
-                  necessary>>.
-| ftext{cl}     | Formats the macro argument like fname{cl}. May contain
-                  asterisks for wildcards. Not validated. Example:
-                  ftext{cl}vkCmd* -> ftext:vkCmd*.
-
-                  Only use this macro <<markup-macros-api-text, when
-                  necessary>>.
-| slink{cl}     | Generates a cross-reference or link to the definition
-                  of the structure or handle in the macro argument. Example:
-                  slink{cl}VkMemoryHeap -> slink:VkMemoryHeap.
-| sname{cl}     | Formats the macro argument like slink{cl}. Does not
-                  generate a cross-reference. May also be an abstract
-                  structure or handle name. Example:
-                  sname{cl}VkCommandPoolCreateInfo ->
-                  sname:VkCommandPoolCreateInfo.
-
-                  Only use this macro <<markup-macros-api-name, when
-                  necessary>>.
-| stext{cl}     | Formats the macro argument like sname{cl}. May contain
-                  asterisks for wildcards. Not validated. Example:
-                  stext{cl}Vk*CreateInfo -> stext:Vk*CreateInfo.
-
-                  Only use this macro <<markup-macros-api-text, when
-                  necessary>>.
-| elink{cl}     | Formats the macro argument as a Vulkan enumerated
-                  type name and links to the definition of that enumeration
-                  type. Example: elink{cl}VkResult -> elink:VkResult.
-| ename{cl}     | Formats the macro argument as a Vulkan enumerant name.
-                  Example: ename{cl}VK_EVENT_SET -> ename:VK_EVENT_SET.
-                  Note that this is not related to elink{cl}, unlike the
-                  other macro link{cl}/text{cl} pairings.
-| etext{cl}     | Formats the macro argument like ename{cl}. Not validated.
-                  Examples: etext{cl}_RANGE_SIZE -> etext:_RANGE_SIZE,
-                  etext{cl}VK_IMAGE_CREATE_SPARSE_* ->
-                  etext:VK_IMAGE_CREATE_SPARSE_*
-
-                  Only use this macro <<markup-macros-api-text, when
-                  necessary>>.
-| pname{cl}     | Formats the macro argument as a Vulkan parameter or
-                  structure member name. Example: pname{cl}device ->
-                  pname:device.
-| ptext{cl}     | Formats the macro argument like pname{cl}. May contain
-                  asterisks for wildcards. Not validated. Example:
-                  ptext{cl}sparseResidency* -> ptext:sparseResidency*.
-
-                  Only use this macro <<markup-macros-api-text, when
-                  necessary>>.
-| tlink{cl}     | Generates a cross-reference or link to the definition
-                  of the Vulkan type in the macro argument.
-                  Example: tlink{cl}PFN_vkAllocationFunction ->
-                  tlink:PFN_vkAllocationFunction.
-                  This is only used for function pointer and `Vk*Flags`
-                  types at present, although it is a potentially a catch-all
-                  for other types not covered by a more specific macro.
-| tname{cl}     | Formats the macro argument like tlink{cl}. Does not
-                  generate a cross-reference. Example:
-                  tname{cl}PFN_vkAllocationFunction ->
-                  tname:PFN_vkAllocationFunction.
-
-                  Only use this macro <<markup-macros-api-name, when
-                  necessary>>.
-| dlink{cl}     | Generates a cross-reference or link to the definition of
-                  the Vulkan C macro in the macro argument. Example:
-                  dlink{cl}VK_NULL_HANDLE -> dlink:VK_NULL_HANDLE. There are
-                  only a few macros in the Vulkan API, described in the
-                  "`API Boilerplate`" appendix of the <<vulkan-spec,Vulkan
-                  API Specification>>
-| dname{cl}     | Formats the macro argument like dlink{cl}. Does not
-                  generate a cross-reference.
-
-                  Only use this macro <<markup-macros-api-name, when
-                  necessary>>.
-| basetype{cl}  | Formats the macro argument like a basic scalar type,
-                  handle name, of type defined by an external API. Not
-                  validated.
-                  Examples: basetype{cl}VkBool32 -> basetype:VkBool32,
-                  basetype{cl}AHardwareBuffer -> basetype:AHardwareBuffer,
-                  basetype{cl}VkDeviceSize -> basetype:VkDeviceSize.
-| code{cl}      | Formats the macro argument as a code sample.
-                  Used for SPIR-V keywords, builtin C types, and names
-                  belonging to other APIs such as Linux or Windows system
-                  calls.
-                  Examples: code{cl}uint32_t -> code:uint32_t,
-                  code{cl}ClipDistance -> code:ClipDistance.
-                  code{cl}OpImage*Gather -> code:OpImage*Gather.
-
-                  This macro allows imbedded field member (`.`) and wildcard
-                  (`*`) text separating words, ending with an optional
-                  wildcard.
-|====
-
-When referring to a compound name (function-parameter, or structure-member),
-combine the macros separated by two colons, resulting in
-flink:vkCmdBindIndexBuffer::pname:indexType and
-slink:VkMemoryHeap::pname:flags.
-This is often done when referring to a particular parameter or member in a
-part of the document other than the description of the corresponding
-function or structure.
-When a nested member within the compound name is referred to, use normal C
-markup:
-
-[source,asciidoc]
-.Example Markup
-----
-flink:vkCmdBindIndexBuffer::pname:indexType
-sname:VkExternalImageFormatProperties::pname:externalMemoryProperties.externalMemoryFeatures
-pname:pAllocateInfo->memoryTypeIndex
-----
-
-[NOTE]
-.Note
-====
-In the macros, "```\->```" is correct markup for the C arrow operator.
-But in any other context (including a "```````" delimited inline literal) it
-would be subject to link:{docguide}/subs/replacements/[Asciidoctor character
-replacement substitutions], resulting in a unicode arrow: ->.
-====
-
-
-[[markup-macros-api-name]]
-==== When To Use *name: Macros
-
-Only use the fname{cl}, sname{cl}, tname{cl}, and dname{cl} macros if no
-definition of the target type with a corresponding anchor exists in the
-document.
-Anchors are automatically defined when including the generated API interface
-definitions under `\{generated}/api/*/*txt`.
-If an anchor does exist, use the corresponding *link{cl} macro.
-
-[NOTE]
-.Note
-====
-There are many legacy uses of the *name{cl} macros that will be replaced
-over time.
-These uses date from before anchors were added to the generated API
-definitions.
-====
-
-
-[[markup-macros-api-text]]
-==== When To Use *text: Macros
-
-Only use the ftext{cl}, stext{cl}, etext{cl}, and ptext{cl} macros when
-describing something that should be rendered like a command, structure,
-enumerant, or parameter name, respectively, but is not actually one.
-Typically these macros are used for wildcards describing multiple API names
-with common prefixes or suffixes, or common subsets of API names.
-
-
-[[markup-macros-prime-symbols]]
-==== Prime Symbols
-
-Occasionally we want to use mathematical prime symbols as markup in regular
-text, outside of <<latexmath, LaTeX math markup>>.
-While it is easy to write the single quote character for this, since that's
-what LaTeX uses, asciidoctor will turn this into a curved quote character
-whenever it is followed by an alphabetic character.
-For example, when writing the {YCbCr} term widely used to describe a color
-encoding, the obvious markup does not look quite right:
-
-.Prime Attributes (incorrect, with curved prime symbol)
-[width="30%",options="header"]
-|====
-| Markup              | Output
-| `pass:[Y'C~b~C~r~]` | Y'C~b~C~r~
-|====
-
-Using a backslash to escape the apostrophe works in body text, but not
-places such as section titles, captions, and link text.
-When prime symbols are needed, use the Unicode ``prime'' symbol.
-Several predefined asciidoctor variables are available to help with this,
-including symbols for {YCbCr} and {RGBprime} because they are frequently
-used in the specification.
-
-.Prime Attributes (correct)
-[width="30%",options="header"]
-|====
-| Markup              | Output
-| `pass:[{prime}]`    | {prime}
-| `pass:[{YCbCr}]`    | {YCbCr}
-| `pass:[{RGBprime}]` | {RGBprime}
-|====
-
-
-==== Other Markup
-
-Uses of standard Asciidoc markup are less common.
-Occasional asterisk markup is used for *emphasis*.
-Underscores are used for _glossary terms_.
-Backtick markup is used for the C `NULL` macro.
-
-[source,asciidoc]
-.Example Markup
-----
-*emphasis*
-`NULL`
-----
-
-
-==== Glossary Terms
-
-Glossary terms are currently marked up using underscore markup where they
-are defined in the documents, as well as being added to the formal Glossary
-appendix in the <<vulkan-spec,Vulkan API Specification>>.
-However, we will probably change to using custom macros soon, to enable
-linkage between the glossary and definitions in the specification body.
-
-[source,asciidoc]
-.Example Markup
-----
-_Glossary terms_
-----
-
-
-=== Normative Terminology
-
-Normative terminology is precisely defined in section 1.3 of the
-<<vulkan-spec,Vulkan API Specification>>, and is used to visually tag terms
-which express mandatory and optional behavior of Vulkan implementations, and
-of applications using Vulkan.
-
-Whenever one of these terms appears in the <<vulkan-spec,Vulkan API
-Specification>> outside of an <<markup-informative,informative section>>, it
-must be tagged using the macros, to indicate that its use has been carefully
-considered and is consistent with the definitions in section 1.3.
-This is extremely important for determining IP that is in and out of Scope
-during Ratification reviews.
-The normative terminology macros are defined in the following table:
-
-.Normative Terminology Macros
-[width="30%",options="header"]
-|====
-| Macro Name     | Output
-| can{cl}        | can:
-| cannot{cl}     | cannot:
-| may{cl}        | may:
-| may{cl} not    | may: not
-| must{cl}       | must:
-| must{cl} not   | must: not
-| optional{cl}   | optional:
-| optionally{cl} | optionally:
-| required{cl}   | required:
-| should{cl}     | should:
-| should{cl} not | should: not
-|====
-
-Note that the macros are lower-case only, so language should be written such
-that these terms do not appear at the beginning of a sentence (if really
-necessary, additional capitalized macros could be added).
-
-
-==== Optional Behavior
-
-If a described behavior of the implementation is not necessary for
-conformance, use the terms _may{cl}_, _optional{cl}_, or _optionally{cl}_ to
-describe it.
-
-If a described usage pattern by the application is allowed but not
-necessary, use the term _can{cl}_ to describe it.
-
-If language flows more logically using the term "`may not`", use the term
-_may{cl} not_ to describe it.
-
-
-==== Optional Functionality
-
-If functionality (rather than behavior) is optional, it should be described
-as
-
-[source,asciidoc]
-.Example Markup
-----
-not required:
-----
-
-Implementations are not mandated to support functionality which is not
-required, but if they do, they must behave as described by the
-<<vulkan-spec,Vulkan API Specification>>.
-The term _functionality_ includes API features, extensions, and layers.
-
-
-[[markup-informative]]
-== Informative, Editing and Implementor's Notes
-
-There are several possible types of notes.
-Depending on the type of output, they are rendered in different styles, but
-always include a note title, and are usually set off in a box or with an
-icon.
-While asciidoctor supports a wide set of _admonition paragraphs_ such as
-TIP, IMPORTANT, WARNING, and CAUTION, we always use the NOTE form, augmented
-by a note title.
-Each type of note is discussed below.
-
-
-[[markup-informative-notes]]
-=== Informative Sections and Notes
-
-If an entire chapter or section is considered informative, its title should
-be suffixed with "`(Informative)`".
-Additionally, the chapter or section text may begin with the sentence:
-
-[source,asciidoc]
-.Example Markup
-----
-== Explanatory Section (Informative)
-
-This chapter/section is Informative.
-----
-
-Informative notes always appear as part of the document, but are considered
-non-normative.
-They usually describe usage advice for applications, and are always given
-the title _Note_, as in the following example:
-
-[NOTE]
-.Note
-====
-This is an informative note.
-====
-
-[source,asciidoc]
-.Example Markup
-----
-[NOTE]
-.Note
-====
-This is an informative note.
-====
-----
-
-It is not necessary to include the text "`Informative`" in the body of the
-note.
-
-
-[[markup-editing-notes]]
-=== Editing Notes
-
-Editing notes usually only appear in internal (non-published) versions of
-documents, via asciidoctor conditionals.
-If they are not resolved, or are internal issues that should not be visible
-in public, they should be removed from the source before pushing content to
-the canonical GitHub repository.
-They usually tag places where an outstanding Gitlab/GitHub issue is being
-worked, and are always given the title _editing-note_, as in the following
-example:
-
-ifdef::editing-notes[]
-[NOTE]
-.editing-note
-====
-This is an editing note, marked up as follows:
-====
-endif::editing-notes[]
-
-[source,asciidoc]
-.Example Markup
-----
-\ifdef::editing-notes[]
-[NOTE]
-.editing-note
-====
-Contents of an editing note go here.
-It is good practice to include a Gitlab/GitHub issue number, or link to the
-issue, in the editing note.
-====
-\endif::editing-notes[]
-----
-
-
-[[markup-implementors-notes]]
-=== Implementor's Notes
-
-Implementor's notes may or may not appear in published versions of
-documents, via asciidoctor conditionals.
-They describe suggested approaches or guidelines for people writing Vulkan
-implementations, and are rare because the hardware being targeted varies so
-widely.
-They are always given the title _Implementor's Note_, as in the following
-example:
-
-ifdef::implementation-guide[]
-.Implementor's Note
-====
-This is an implementor's note, marked up as follows:
-====
-endif::implementation-guide[]
-
-[source,asciidoc]
-.Example Markup
-----
-\ifdef::implementation-guide[]
-.Implementor's Note
-====
-Contents of an implementor's note go here.
-====
-\endif::implementation-guide[]
-----
-
-
-[[markup-word-choices]]
-== Word Choices
-
-There are a variety of common terms that have several equivalent word
-choices.
-Always use the words or phrases in the first column instead of the alternate
-terms.
-This list may not be comprehensive; when in doubt, be guided by the existing
-<<vulkan-spec,Vulkan API Specification>>.
-
-.Word Choices
-[width="100%",options="header"]
-|====
-| Use This      | Instead Of     | Comments
-| allocate      | create
-                | When describing objects or memory resulting from
-                  ftext:vkAllocate* commands.
-| application   | client / user  |
-| bitmask       | bit field
-                | Technically correct. Vulkan bitmasks are just integers and
-                  are not logically addressable at the bit level.
-| bound         | currently bound
-                | Appears primarily in valid usage statements, which are
-                  always referring to the current state of the objects
-                  they are validating.
-                  Rare exceptions may be justified in other cases.
-| command       | function
-                | Except when talking about function pointers returned by
-                  ftext:vkGet*ProcAddr commands.
-| create        | allocate
-                | When describing objects resulting from ftext:vkCreate*
-                  commands.
-| depth/stencil | packed (interleaved, combined, _other prefix_)
-                  depth/stencil, depth-stencil, DepthStencil, etc.
-                | Combined format implicit in the name.
-| device        | GPU / processor / accelerator
-                | The Vulkan specification is functional and could be
-                  implemented in many different ways.
-| dispatching command, +
-  drawing command
-                | dispatch command,
-                  draw command   | Glossary usage
-| executable memory +
-  executable state +
-  pipeline executable
-                | executable     | Disambiguation
-| heterogeneous | heterogenous   | More common
-| homogeneous   | homogenous     | More common
-| host          | CPU |
-| host endianness | platform endianness |
-| image subresource | subresource
-                | Except when referring to *host-accessible subresources*
-| implementation| system / hardware / software
-                | For consistency, and avoids implied requirements.
-| implementor   | implementer    | For consistency with historical specification practice
-| indices       | indexes        | More common
-| member        | field          |
-| runtime       | run time / run-time | Arbitrary choice for consistency
-| ename:enumerant specifies
-                | ename:enumerant indicates (denotes)
-                | When giving a brief description of enums in an enumerated
-                  type.
-                  It is often appropriate to use "`enumerant *is*`" when
-                  describing the behavior or meaning of enumerants in other
-                  places.
-| pname:parameter are/is
-                | pname:parameter specifies (denotes, indicates)
-                | In cases when _are_ or _if_ are not grammatically
-                  appropriate, _specifies_ may be used instead.
-| pname:parameter is
-                | the value of pname:parameter is
-                | In rare cases, _the value of_ is appropriate. See the
-                  existing specification language for examples.
-| pname:parameter is a _typename_ containing / controlling / defining /
-  describing / specifying / etc.
-                | pname:parameter is a _typename_ that/which contains
-                  (controls, defines, describes, specifies, etc.)
-                | Commonly used for more nuanced descriptions of parameters
-                  or structure members
-| reference monitor   | mastering display|
-| begins / begun      | starts / started | For ftext:vkBegin* - also see "`finish`"
-| finishes / finished | ends / ended     | For ftext:vkEnd* - also see "`begins`"
-| used          | referenced     | When describing attachments specified in a
-                                   subpass description.
-| statically used | referenced   | When describing resources or push constants
-                                   accessed by shader code
-| a more specific term | referenced | For all other situations.
-| component     | channel        | Specifically this refers to color channels/components
-|====
-
-[NOTE]
-.Note
-====
-The "`begin/start`" and "`end/finish`" distinction is still being sorted
-out.
-See Gitlab issue #61.
-====
-
-
-[[markup-avoid-contractions]]
-=== Avoid Abbreviations and Contractions
-
-Abbreviations and contractions make the specification sound less formal.
-Avoid using them in specification text.
-The following lists provides some guidance, but are not complete.
-
-.Word Choices (Contractions)
-[width="30%",options="header"]
-|====
-| Use This      | Instead Of
-| are not       | aren't
-| cannot{cl}    | can't
-| does not      | doesn't
-| do not        | don't
-| has not       | hasn't
-| is not        | isn't
-| it is         | it's
-| should not    | shouldn't
-| that is       | that's
-| there is      | there's
-| we are        | we're
-| we will       | we'll
-| we would      | we'd
-| what is       | what's
-| will not      | won't
-| would not     | wouldn't
-|====
-
-.Word Choices (Abbreviations)
-[width="30%",options="header"]
-|====
-| Use This      | Instead Of
-| information   | info
-| specification | spec
-|====
-
-[NOTE]
-.Note
-====
-Avoid using abbreviations in specification text describing the API, even
-though there are certain <<naming-abbreviations, approved abbreviations>>
-used in the names of API entities such as commands, structures, and
-enumerants.
-====
-
-
-[[markup-terms-caution]]
-=== Terms to Use With Caution
-
-The term _subset_ is sometimes used to refer to a _strict subset_, and
-sometimes used to refer to a subset which may be equal to the entire set.
-This is particularly likely to come up when describing bitmasks.
-Make sure to use either _subset_ or _strict subset_ as appropriate.
-
-
-[[markup-terms-avoid]]
-=== Terms to Avoid
-
-Do not describe anything in the documentation using vague or wishy-washy
-terms.
-Our goal is to precisely describe behavior of implementations.
-
-The normative terms may{cl}, optional{cl}, and should{cl} are available when
-implementations may make choices of behavior, but when such choices are
-allowed, each choice still must have well-defined behavior.
-
-.Terms to Avoid
-[width="100%",options="header"]
-|====
-| Bad Term | Comments
-| expect   | And variants such as _expected_
-| likely   | And variants such as _will likely_
-| allowed, could, generally, might, probably, perhaps
-           | And all other such terms of choice. Use _may{cl}_ or _can{cl}_
-             depending on the context.
-| may{cl} or may{cl} not   | Just use _may{cl}_.
-|====
diff --git a/registry/vulkan/style/misc.txt b/registry/vulkan/style/misc.txt
deleted file mode 100644
index adf1be5..0000000
--- a/registry/vulkan/style/misc.txt
+++ /dev/null
@@ -1,115 +0,0 @@
-// Copyright 2015-2021 The Khronos Group Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-[[miscellaneous]]
-= Image Authoring, Formats, and Style
-
-Images used in the Vulkan documents must be kept in the directory `images/`
-in SVG format.
-
-Images should be authored in the open-source
-link:https://inkscape.org/[`Inkscape`] tool, downloadable from its website
-or packaged as an optional install for most Linux distributions.
-This allows other people to easily edit your images in the future.
-Also, while SVG is in principle a portable image format, some proprietary
-image editors have been observed to produce images incompatible with the PDF
-image pipeline used by the Specification.
-
-Images must be authored at their actual image size in the HTML and PDF
-output documents, and must not be scaled with asciidoctor options.
-In most cases, images are included as standalone figures and should occupy
-the full width of the document - do not leave unnecessary whitespace on
-either side of the image.
-
-The PDF output has an available width of just over 660px (at the default
-96dpi), and a height somewhere around 1000px (which diagrams should really
-go nowhere near anyway).
-The html output is wider (800 pixels) and with practically unlimited height.
-As the PDF dimensions are more restrictive, images should not exceed these
-limits.
-
-[NOTE]
-.Note
-====
-According to the documentation available, the PDF output *should* have
-dimensions of roughly 184mm x 271mm - or equivalently 697px x 1026px (A4
-size [asciidoctor default] with a 0.5in margin [prawn-pdf default] on each
-side).
-However for reasons currently unknown, at least the available width before
-images are scaled down lies is about 30-something pixels lower than that;
-the height where this happens has not been measured, but is likely to
-similarly be lower than it should be for reasons currently unknown.
-====
-
-Dimensions of elements in the SVG file should be authored in pixels (`px`)
-such that lines/strokes are not unnecessarily anti-aliased (e.g. usually
-stick to integer pixel widths for lines).
-In many cases it is useful to also set the background grid to px, but it not
-necessary; Inkscape has reliable conversions between px and mm using a
-default dpi of 96 (which matches the PDF output), so the output dimension is
-mostly irrelevant.
-
-Text in images should usually appear at 12 point type so as to match that in
-the body of the specification, though 10 point text can be used sparingly
-where necessary (however this is often indicative of the diagram being too
-cramped, so authors should consider scaling or reworking the diagram
-instead).
-Text should use the built-in generic sans serif font so as to ensure the
-font in the output document matches whatever sans serif font is used for
-that document.
-Note that the character set is currently <<character-sets-in-svg,restricted
-to Windows-1252>>.
-
-The font and color scheme used for existing images (black, red, and 50%
-gray) should be used for changes and new images whenever reasonable to do
-so, to preserve a consistent look and feel.
-Whilst a white background is typically assumed, explicitly adding white as a
-color should be avoided - instead leave elements transparent so the diagrams
-can be used in other documents.
-
-Many other elements are consistent throughout the set of diagrams which
-should be maintained in new diagrams where possible.
-Examples include:
-
-  * Lines are usually either fully solid, or use a consistent, and
-    relatively spacious, dash style.
-  * Lines are capped with a consistent arrow shape where relevant.
-  * Small solid circles representing points are a consistently sized circle.
-
-Whenever reasonable, it is advised to copy an existing similar diagram and
-edit it rather than creating one from scratch in order to re-use elements
-and maintain consistency.
-
-
-[[character-sets-in-svg]]
-== Character sets in SVG files
-
-At the moment, the PDF conversion path only supports the Windows-1252
-character set, as we are currently using the standard fonts built into every
-PDF viewer - such that we do not have to embed a different font.
-Unfortunately these only support Windows-1252, which is a highly limited
-character set.
-
-As such, characters not in that set will not display properly when present
-in an SVG, and will fire a warning when building the PDF.
-Luckily, Inkscape has an "Object to path" function built in, which will
-convert text to a raw path, allowing these characters to be supported.
-
-Please ensure that you build the PDF before submitting any new images,
-particularly with non-standard characters, in order to catch such errors.
-
-
-ifdef::editing-notes[]
-[NOTE]
-.editing-note
-====
-*Other Stuff Which May Be Described In This Chapter Eventually*
-
-  * Something about Image formats
-  * Something about validation scripts
-  * Glossary lists
-  * New param/enum macros
-====
-endif::editing-notes[]
-
diff --git a/registry/vulkan/style/naming.txt b/registry/vulkan/style/naming.txt
deleted file mode 100644
index 9433afc..0000000
--- a/registry/vulkan/style/naming.txt
+++ /dev/null
@@ -1,640 +0,0 @@
-// Copyright 2015-2021 The Khronos Group Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-[[naming]]
-= API Naming Conventions
-
-Identifiers in the Vulkan API (e.g. types, parameters, constants, etc.) all
-follow a set of naming rules, providing a consistent scheme for developers.
-
-The Vulkan C API uses prefixes as an implicit namespace control mechanism.
-Bindings to other languages can choose not to use these prefixes if the
-language provides an explicit namespace mechanism.
-
-
-== General Naming Rules
-
-Names of identifiers should generally be written with full words, as a
-concise description of what that identifier is.
-For example, the type of a structure containing information about how to
-create an instance is stext:VkInstanceCreateInfo.
-
-Abbreviations and prefixes are sometimes used in the API when they do not
-impede clarity.
-All abbreviations and prefixes used in the API must be approved by the
-Vulkan working group, and be added to the <<naming-abbreviations,Common
-Abbreviations>> and <<naming-prefixes,Standard Prefixes>> sections,
-respectively.
-Whenever an approved abbreviation exists for a particular word, it should be
-used in place of the full word unless there is good reason not to.
-
-When a number is part of an identifier, it is treated as a word if it is a
-standalone number, such as the extension name token
-ename:VK_KHR_GET_MEMORY_REQUIREMENTS_2_EXTENSION_NAME for the
-`VK_KHR_get_memory_requirements2` extension.
-For uses where the number is part of a common abbreviation such as etext:2D
-or etext:R8B8`, the entire abbreviation is treated as a word.
-
-ifdef::editing-notes[]
-[NOTE]
-.editing-note
-====
-Unfortunately, there is an internal inconsistency here between extension
-name strings, such as VK_KHR_get_memory_requirements2, and tokens encoding
-those names, such as ename:VK_KHR_GET_MEMORY_REQUIREMENTS_2_EXTENSION_NAME.
-====
-endif::editing-notes[]
-
-
-[[naming-preprocessor]]
-== Preprocessor Defines
-
-Preprocessor definitions include an underscore `_` as a delimiter between
-words, with every character in upper case.
-
-Each definition is prefixed with `VK_`, followed by the name.
-
-This rule applies to most declarations with the C Preprocessor's `#define`
-token, including macros and constants.
-There are however a few exceptions:
-
-  * The header guard for each header includes an additional underscore `_`
-    at the end of the identifier.
-  ** Example: `VULKAN_H_`
-  * Definitions that denote the presence of an extension follow the
-    <<extensions-naming-conventions-name-strings,extension name string
-    convention>>.
-  ** Example: `VK_KHR_sampler_mirror_clamp_to_edge`
-  * Three `VKAPI_*` definitions are defined by the platform header to alias
-    certain platform-specific identifiers related to calling conventions.
-  ** Examples: `VKAPI_ATTR`, `VKAPI_CALL` and `VKAPI_PTR`
-  * Preprocessor defines are occasionally used to create aliases between
-    other Vulkan identifiers, which usually happens when something was
-    originally misnamed.
-    In these cases, the fixed name is added to the API, and the old name is
-    made into an alias of that.
-    In these cases, the name will be whatever the original misnamed
-    identifier was.
-
-[source, c]
-.Example
-----
-// VK_VERSION_MAJOR (Macro)
-#define VK_VERSION_MAJOR(version) ((uint32_t)(version) >> 22)
-
-// VK_HEADER_VERSION (Base type)
-#define VK_HEADER_VERSION 10
-----
-
-
-== Type Names
-
-Type names are declared with no separator between words.
-Each word starts with a capital letter, and every other character in each
-word is lower case.
-
-Each type name is prefixed with `Vk`.
-
-This rule applies to all type definitions except <<naming-funcpointers,
-function pointer types>>, including struct and union types, handles, base
-typedefs, and enumerant types.
-
-[source, c]
-.Example
-----
-// VkImage (Handle)
-VK_NONDISP_HANDLE(VkImage)
-
-// VkFlags (Base type)
-typedef uint32_t VkFlags;
-
-// VkResult (Enum type)
-typedef enum VkResult {
-    ...
-};
-
-// VkApplicationInfo (Struct)
-typedef struct VkApplicationInfo {
-    ...
-} VkApplicationInfo;
-
-// VkClearColorValue (Union)
-typedef union VkClearColorValue {
-    ...
-} VkClearColorValue;
-----
-
-
-[[naming-extension-structures]]
-=== Extending Structure Names
-
-Structures which extend a base structures through its pname:pNext chain
-should reflect the name of the base structure.
-Currently there are two examples of such naming schemes.
-
-New structures which add extended object creation parameters to a base
-structure should use this naming scheme:
-
-.Extended Object Information Structures
-[width="60%",options="header"]
-|====
-| Base Structure Name | Extending Structure Name
-| `Vk__Object__CreateInfo`
-    | `Vk__ObjectName__CreateInfo__Author__`
-|====
-
-`_Object_` is the name of the object being created.
-`_Name_` is a short name for the extension or the new information added by
-that extension.
-`_Author_` is the author ID of the extension.
-
-New structures which extend API queries, such as the
-`vkGetPhysicalDeviceFeatures2KHR` and `vkGetPhysicalDeviceProperties2KHR`
-commands defined by the `VK_KHR_get_physical_device_properties2` extension,
-should use this naming scheme:
-
-.Extended Query Structures
-[width="60%",options="header"]
-|====
-| Base Structure Name | Extending Structure Name
-| `vkGetPhysicalDeviceFeatures2KHR`
-    | `VkPhysicalDevice__Name__Features__Author__`
-| `vkGetPhysicalDeviceProperties2KHR`
-    | `VkPhysicalDevice__Name__Properties__Author__`
-|====
-
-`_Name_` is a short name for the extension, or for the new feature or
-property being queried, such as `Multiview` or `DiscardRectangle`.
-`_Author_` is the author ID of the extension.
-
-
-== Enumerant Names
-
-Enumerants include an underscore `_` as a delimiter between words, with
-every character in upper case.
-
-Each enumerant name is prefixed with `VK_`.
-
-Enumerants are prefixed with the exact name of the type it belongs to,
-converted to the correct case (e.g. `VkStructureType` ->
-`VK_STRUCTURE_TYPE_*`).
-
-This rule applies to all enumerants, with one exception.
-
-  * The `VkResult` enumerants are split into two sub types: error and
-    success codes.
-  ** Success codes are not prefixed with anything other than `VK_`.
-  ** Error codes are prefixed with `VK_ERROR_`.
-
-[source, c]
-.Example
-----
-// VK_FORMAT_UNDEFINED, VK_FORMAT_R4G4_UNORM_PACK8 (Enumerants)
-typedef enum VkFormat {
-    VK_FORMAT_UNDEFINED = 0,
-    VK_FORMAT_R4G4_UNORM_PACK8 = 1,
-    ...
-};
-
-// VkResult codes (Exception)
-typedef enum VkResult {
-    VK_SUCCESS = 0,
-    ...
-    VK_ERROR_OUT_OF_HOST_MEMORY = -1,
-    ...
-} VkResult;
-----
-
-
-== Command Names
-
-Command names are declared with no separator between words.
-Each word starts with a capital letter, and every other character in each
-word is lower case.
-
-The structure of a command name should be as follows:
-
-`__prefix Verb Object Property__`
-
-`_prefix_`::
-    This is usually "vk", but will be "vkCmd" if it is a command used to
-    record into a command buffer, or "vkQueue" if it directly affects a
-    queue.
-
-`_Verb_`::
-    The verb that describes the action being performed.
-    A list of most verbs used in Vulkan is available <<command-names-verbs,
-    here>>.
-
-`_Object_`::
-    The name of the object being acted upon by the command.
-
-`_Property_`::
-    The property of the object which is being acted upon by the command, and
-    is omitted in cases where the whole object is being acted upon (e.g.
-    creation commands).
-
-These rules apply to all command declarations.
-
-[source, c]
-.Example
-----
-// Creation command
-VKAPI_ATTR VkResult VKAPI_CALL vkCreateInstance( ... );
-
-// Command buffer recording command
-VKAPI_ATTR VkResult VKAPI_CALL vkCmdBindPipeline( ... );
-
-// Get command
-VKAPI_ATTR VkResult VKAPI_CALL vkGetQueryPoolResults( ... );
-----
-
-.Note
-[NOTE]
-====
-There are three exceptions to the above rule in the core Vulkan API:
-
-  * vkDeviceWaitIdle
-  * vkCmdNextSubpass
-  * vkCmdPipelineBarrier
-
-These names are left as-is to maintain compatibility.
-
-There are additionally a number of exceptions in a few existing extensions.
-====
-
-
-=== Query Commands
-
-A number of commands in the API are used to determine the properties of some
-object in the implementation.
-
-The queried properties may either be invariant, or they may: change based on
-application behavior.
-If the results are not invariant, the lifetime of the results should be
-clearly described in the command description.
-See
-link:html/vkspec.html#fundamentals-commandsyntax-results-lifetime[Lifetime
-of Retrieved Results] in the specification for more information.
-
-These commands fall into two categories from a naming perspective:
-
-Capability Queries::
-
-These are commands which query capabilities of objects that an
-implementation can provide.
-Such commands use the verb "Enumerate" to identify themselves.
-+
-e.g. `vkEnumeratePhysicalDeviceProperties`
-+
-Whilst these commands describe properties of the named object, they do not
-accept a parameter of that object type - though they usually have a
-parameter for the parent type.
-
-Object State Queries::
-
-These commands are used to query the current properties of an object that
-has been created.
-Such commands use the verb "Get" to identify themselves.
-+
-e.g. `vkGetPhysicalDeviceQueueFamilyProperties`
-+
-These commands always have a parameter of the object type.
-
-
-[[command-names-verbs]]
-=== Command Verbs
-
-Below is a list of many of the verbs currently in use in core Vulkan and KHR
-extensions, along with their meanings.
-The list is not guaranteed to be up to date, but covers all core and KHR
-verbs at the time of writing.
-
-[%autowidth,options="header"]
-|===
-| Verb       | Meaning
-| Acquire    | Acquire ownership of an object from an external source
-| Allocate   | Allocates memory in a pool or memory heap and creates object - paired with "Free"
-| Begin      | Start of a range of command buffer commands with different behavior than those outside the range - "End" marks the end of the range
-| Bind       | Binds an object to another object
-| Blit       | Performs a filtered and scaled copy of pixels from one image to another
-| Clear      | Sets all pixels in an image to the same value
-| Copy       | A raw copy of data from one object to another with no transformation of the data
-| Create     | Creates an object - paired with "Destroy"
-| Destroy    | Destroys an object - paired with "Create"
-| Dispatch   | Kicks off a set of compute tasks
-| Draw       | Kicks off a set of rasterization tasks
-| End        | End of a range of command buffer commands with different behavior than those outside the range - "Begin" marks the start of the range
-| Enumerate  | Queries the capabilities of objects that could be created, before creating them
-| Execute    | Executes commands recorded in another command buffer
-| Fill       | Sets all data units in a buffer to the same value
-| Flush      | Flushes data from the host to the device
-| Free       | Destroys an object and then frees memory back to a pool or memory heap - paired with "Allocate"
-| Get        | Queries the state of an existing object
-| Import     | Imports the payload from an external object into a Vulkan object
-| Invalidate | Invalidates data on the host, forcing newer data on the device to be read
-| Map        | Maps an allocation into host memory - paired with "Unmap"
-| Merge      | Merges two objects
-| Present    | Presents an image to a surface
-| Push       | Pushes data to the device as part of a command stream
-| Release    | Releases ownership of an object to an external source
-| Reset      | Resets the state of an object to an initial state
-| Resolve    | Resolves multiple samples in a multisampled image to an image with one sample per pixel
-| Set        | Sets the state of an object
-| Submit     | Submits a set of commands to a queue
-| Unmap      | Unmaps an allocation from host memory - paired with "Map"
-| Update     | Updates entries in a descriptor set
-| Wait       | Waits for some signal
-| Write      | Writes values to an object
-|===
-
-
-[[naming-funcpointers]]
-=== Function Pointer Type Names
-
-Function pointer names are declared exactly as the equivalent statically
-declared command would be declared, but prefixed with `PFN_`, standing for
-"Pointer to FunctioN".
-
-[source, c]
-.Example
-----
-// PFN_vkCreateInstance (Function Pointer)
-typedef VkResult (VKAPI_PTR *PFN_vkCreateInstance)( ... );
-----
-
-
-== Function Parameter and Struct/Union Member Names
-
-Function parameter names are declared with no separator between words.
-Each new word, *except* for the first, starts with a capital letter.
-All other characters in the parameter name are in lower case.
-
-Members/parameters of a type that is not a base type should generally be
-named in a similar way to the type itself, with additional context added for
-clarity when necessary.
-
-Pointer members/parameters are prefixed with a number of `p` characters,
-with one `p` for each level of indirection.
-
-Function pointer members/parameters are prefixed with `pfn`.
-
-Any member that describes the size of a memory allocation should be suffixed
-with `Size`.
-If the context is self-evident from the structure name, then it may simply
-be named `size`.
-
-Any member that describes the number of something, such as an array length
-or number of internal allocations, should be suffixed with `Count`.
-The `size` rule overrides this rule, though it is possible to have multiple
-sizes (e.g. `sizeCount`).
-If the member is an array length, then the name of length should correspond
-to the name of the array member, usually `XYZCount` for an array named
-`pXYZs`.
-If a structure in a pname:pNext chain is an array whose length must match
-the length of an array of the base structure, then that extending structure
-should include an array length member with the same name as the length in
-the base structure.
-
-These rules apply to all function parameters and struct/union members, with
-a single exception:
-
-  * The `sType` member of structures is abbreviated as it is used in almost
-    every structure.
-  ** The slightly odd naming prevents it clashing with any future variables.
-  ** The `s` stands for "`structure`", referring to its enumerant type.
-
-[source, c]
-.Example
-----
-// Function parameters, including a twice indirected pointer.
-VKAPI_ATTR VkResult VKAPI_CALL vkMapMemory(
-    VkDevice                                    device,
-    VkDeviceMemory                              memory,
-    VkDeviceSize                                offset,
-    VkDeviceSize                                size,
-    VkMemoryMapFlags                            flags,
-    void**                                      ppData);
-
-// Structure members, including the sType exception and a single indirected
-// pointer.
-typedef struct VkMemoryBarrier {
-    VkStructureType    sType;
-    const void*        pNext;
-    VkAccessFlags      srcAccessMask;
-    VkAccessFlags      dstAccessMask;
-} VkMemoryBarrier;
-
-// Function pointer members
-typedef struct VkAllocationCallbacks {
-    void*                                   pUserData;
-    PFN_vkAllocationFunction                pfnAllocation;
-    PFN_vkReallocationFunction              pfnReallocation;
-    PFN_vkFreeFunction                      pfnFree;
-    PFN_vkInternalAllocationNotification    pfnInternalAllocation;
-    PFN_vkInternalFreeNotification          pfnInternalFree;
-} VkAllocationCallbacks;
-
-// Size member (pCode is not a specific array of anything, it is just a
-// pointer to memory)
-typedef struct VkShaderModuleCreateInfo {
-    VkStructureType              sType;
-    const void*                  pNext;
-    VkShaderModuleCreateFlags    flags;
-    size_t                       codeSize;
-    const uint32_t*              pCode;
-} VkShaderModuleCreateInfo;
-
-// Count member
-typedef struct VkSparseImageMemoryBindInfo {
-    VkImage                           image;
-    uint32_t                          bindCount;
-    const VkSparseImageMemoryBind*    pBinds;
-} VkSparseImageMemoryBindInfo;
-----
-
-
-[[naming-extension-identifiers]]
-== Extension Identifier Naming Conventions
-
-Identifiers defined by an extension are modified by appending the
-extension's author ID to the end of the identifier, as described below.
-Author IDs are obtained as described in the
-<<extensions-naming-conventions,Extension and Layer Naming Conventions>>
-section.
-
-If an extension becomes part of core, a new version of the extension's
-identifiers should be created, that do not contain the author ID at the end
-of the identifier.
-The original identifiers should be kept in order to maintain source-level
-compatibility with existing applications making use of the earlier
-extension's identifiers.
-
-
-=== Extension Type Names
-
-Types defined by extensions have the author ID appended to the end of the
-type name.
-
-[source, c]
-.Example
-----
-// VkSurfaceFormatKHR (structure type with KHR appended)
-typedef struct VkSurfaceFormatKHR {
-    VkFormat           format;
-    VkColorSpaceKHR    colorSpace;
-} VkSurfaceFormatKHR;
-----
-
-[[naming-extension-enumerant-names]]
-=== Extension Enumerant Names
-
-Enumerants defined by extensions have the author ID appended to the end of
-the enumerant name, separated by an underscore.
-This includes the begin, end, range and max values added to enumeranted type
-definitions by the generator scripts.
-
-[NOTE]
-====
-There is one exception to this rule in the
-`VK_KHR_sampler_mirror_clamp_to_edge` extension.
-This functionality was included in the original specification, but quickly
-separated out at release.
-Due to this late change, the single enum exposed has retained its original
-identifier to avoid compatibility issues:
-ename:VK_SAMPLER_ADDRESS_MODE_MIRROR_CLAMP_TO_EDGE
-====
-
-[source, c]
-.Example
-----
-// VK_COMPOSITE_ALPHA_OPAQUE_BIT_KHR (enumerant with _KHR appended)
-typedef enum VkCompositeAlphaFlagBitsKHR {
-    VK_COMPOSITE_ALPHA_OPAQUE_BIT_KHR = 0x00000001,
-    ...
-} VkCompositeAlphaFlagBitsKHR;
-----
-
-
-=== Extension Function Names
-
-Function and function pointer type names defined by extensions have the
-author ID appended to the end of the name.
-
-[source, c]
-.Example
-----
-// vkDestroySurfaceKHR (function with KHR appended)
-VKAPI_ATTR void VKAPI_CALL vkDestroySurfaceKHR(
-    VkInstance                                  instance,
-    VkSurfaceKHR                                surface,
-    const VkAllocationCallbacks*                pAllocator);
-
-typedef void (VKAPI_PTR *PFN_vkDestroySurfaceKHR)(
-    VkInstance                                  instance,
-    VkSurfaceKHR                                surface,
-    const VkAllocationCallbacks*                pAllocator);
-----
-
-
-[[naming-abbreviations]]
-== Common Abbreviations
-
-Abbreviations and acronyms are sometimes used in the <<vulkan-spec,Vulkan
-API Specification>> and the Vulkan API where they are considered clear and
-commonplace.
-All such abbrevations used in the core API are defined here.
-Extensions should also use these abbreviations where appropriate.
-
-Src::
-    Source
-
-Dst::
-    Destination
-
-Min::
-    Minimum
-
-Max::
-    Maximum
-
-Rect::
-    Rectangle
-
-Info::
-    Information
-
-Lod::
-    Level of Detail
-
-Mip::
-    Related to a mipmap.
-    Use "`mipmap`" in full only when it is a standalone term.
-    If referred to some associating with a mipmap, such as levels, sampling
-    mode, size, tail images, etc., use "`mip`" as a standalone prefix word,
-    e.g. pname:maxMipLevels, ename:VK_MIP_MODE, etc.
-    This is analogous to the <<writing-compound-words,spelling conventions
-    for mip-related terms>>
-
-[NOTE]
-====
-The names pname:mipmapMode, pname:mipmapPrecisionBits,
-sname:VkSamplerMipmapMode, and
-ename:VK_SPARSE_IMAGE_FORMAT_SINGLE_MIPTAIL_BIT are exceptions to this
-general usage guideline, for historical reasons.
-====
-
-ID::
-    Identifier
-
-UUID::
-    Universally Unique Identifier
-
-Op::
-    Operation
-
-R::
-    Red color component
-
-G::
-    Green color component
-
-B::
-    Blue color component
-
-A::
-    Alpha color component
-
-
-[[naming-prefixes]]
-== Standard Prefixes
-
-Prefixes are used in the API to denote specific semantic meaning of Vulkan
-names, or as a label to avoid name clashes, and are explained here:
-
-VK/Vk/vk::
-    Vulkan namespace +
-    All types, commands, enumerants and C macro definitions in the Vulkan
-    specification are prefixed with these two characters, according to the
-    rules defined above.
-
-PFN/pfn::
-    Function Pointer +
-    Denotes that a type is a function pointer, or that a variable is of a
-    pointer type.
-
-p::
-    Pointer +
-    Variable is a pointer.
-
-vkCmd::
-    Commands that record commands in command buffers +
-    These API commands do not result in immediate processing on the device.
-    Instead, they record the requested action in a command buffer for
-    execution when the command buffer is submitted to a queue.
-
-s::
-    Structure +
-    Used to denote the etext:VK_STRUCTURE_TYPE* member of each structure in
-    pname:sType.
diff --git a/registry/vulkan/style/vuid.txt b/registry/vulkan/style/vuid.txt
deleted file mode 100644
index 2dd1b9c..0000000
--- a/registry/vulkan/style/vuid.txt
+++ /dev/null
@@ -1,144 +0,0 @@
-// Copyright 2015-2021 The Khronos Group Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-[appendix]
-[[appendix-vuid]]
-= Valid Usage ID Tags
-
-Valid usage statements in the published Vulkan Specification must all be
-given _Valid Usage ID_ or _VUID_ tags.
-These tags are asciidoctor anchors, intended for use by the validation layer
-to provide unique names for each validation condition, and a way to link
-from validation layer reports into the corresponding parts of the
-Specification.
-
-
-[[appendix-vuid-format]]
-== Format of VUID Tags
-
-For implicit valid usage statements, the tags are formatted like this:
-
-[source,asciidoc]
-----
-[[VUID-blockname-paramname-category]]
-----
-
-_blockname_ is the name of the function or structure for which a valid usage
-statement is being generated.
-
-_paramname_ is the name of the parameter being validated.
-In some cases, the statement does not validate a single parameter and this
-portion of the tag is absent.
-
-_category_ is the type of statement being generated.
-There are over one dozen types referring to distinct conditions such as
-valid objects, required bitmasks, required array lengths, constraints on
-parent objects, and so on.
-
-For explicit valid usage statements, the tags are formatted like this:
-
-[source,asciidoc]
-----
-[[VUID-blockname-paramname-number]]
-----
-
-_blockname_ is the name of the function or structure for which a valid usage
-statement is being generated.
-
-_paramname_ is the name of the parameter being validated.
-In some cases, the statement does not validate a single parameter and this
-portion of the tag is replaced by `-None-`
-
-_number_ is a unique five digit, zero-filled number used to disambiguate
-similar tag names.
-
-[NOTE]
-.Note
-====
-The _blockname_, _paramname_, and _category_ portions of a VUID tag name
-must each be composed only of the alphanumeric characters A-Z, a-z, and 0-9,
-and the ':' character.
-In general only the alphabetic subset of these characters is used, but there
-are a few exceptions.
-====
-
-
-[[appendix-vuid-creating]]
-== Creating VUID Tags
-
-For implicit valid usage statements generated automatically from `vk.xml`,
-VUID tags are created automatically by the generator scripts.
-
-For explicit valid usage statements, VUID tags are generated by passing
-appropriate options to the script `reflow.py`.
-
-Since these tags are of use only to the published validation layer, they are
-needed only in the published Specification sources and outputs.
-Therefore, authors of extensions, or other branches adding valid usage
-statements, are not themselves responsible for adding tags in their
-branches.
-The specification editors will take care of this as part of the process of
-publishing updates.
-For reference purposes, this process is described below:
-
-First, after integrating all new specification language into the internal
-gitlab default branch (currently `main`) which contains the canonical
-Specification source, invoke the following command:
-
-[source,sh]
-----
-python3 reflow.py -overwrite -noflow -tagvu chapters/*.txt chapters/*/*.txt
-----
-
-This will add VUID tags to all statements in valid usage blocks which do not
-already have them.
-Some diagnostics will be reported, but these are do not in general require
-any action.
-
-After updating all files, the script will update the file
-`scripts/vuidCounts.py`, which contains reserved ranges of VUIDs for the
-default branch and certain other development branches.
-
-Commit the updated source files and `vuidCounts.py` together.
-The next time the script is run, VUID tags will be assigned numbers starting
-from the next free value in the range available to default branch.
-
-In-development Vulkan extensions are kept in their own branches, with the
-branch name the same as the name of the extension being developed.
-VUID tags may be assigned in these branches in the same fashion as in
-default branch.
-To enable this, each development branch must be assigned its own independent
-VUID range in the default branch copy of `vuidCounts.py`, to prevent
-collisions.
-In the event that default branch or any development branch exhausts the
-available VUID range, `reflow.py` will report this and stop assigning VUIDs.
-At that point, a new range must be assigned to the branch in the default
-branch copy of `vuidCounts.py`, as well as in the per-branch copy.
-
-
-== Updating VUID Tags When Valid Usage Statements Change
-
-Valid usage statements have corresponding tests in the Vulkan Validation
-Layer.
-The tests must be changed in response to semantic changes in the VU
-statements, whether for bug-fixing, adding extension interactions, or
-otherwise.
-The rule used when updating explicit VU statements is that the merge request
-or pull request responsible for making the change must remove the existing
-VUID tag, so that a new one can be assigned, _except_ in the following
-cases:
-
-  * The changes are non-semantic, such as using consistent phrasing or
-    markup.
-  * The changes consist of removing or changing extension suffixes when
-    promoting an extension to `EXT`, `KHR`, or core status.
-  * The valid usage statement has not yet been implemented in the validation
-    layers.
-
-[NOTE]
-.Note
-====
-This section may need further modification in response to guidelines agreed
-to by the Vulkan Working Group.
-====
diff --git a/registry/vulkan/style/writing.txt b/registry/vulkan/style/writing.txt
deleted file mode 100644
index a346927..0000000
--- a/registry/vulkan/style/writing.txt
+++ /dev/null
@@ -1,1296 +0,0 @@
-// Copyright 2015-2021 The Khronos Group Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-[[writing]]
-= Writing Style
-
-
-[[writing-misc]]
-== Miscellaneous Grammar, Spelling, and Punctuation Issues
-
-=== Use the Oxford Comma (Serial Comma)
-
-When writing a sentence listing a series of items, include a comma before
-the "`and`" separating the last item.
-
-*Correct:* The red, green, blue, and alpha components.
-
-*Incorrect:* The red, green, blue and alpha components.
-
-Also see this
-link:https://blog.oxforddictionaries.com/2015/01/21/video-oxford-comma/[video
-discussion of the Oxford comma] provided by the Oxford Dictionary.
-
-
-=== Date Format
-
-Whenever possible, write dates in the <<iso-8601,ISO 8601>> format:
-YYYY-MM-DD.
-
-If needed for consistency with existing dates, e.g. in appendix changelogs,
-you can also write "`Month DD, YYYY`" where "`Month`" is the English name of
-the month.
-
-Never use ambigious formats such as "`09/12/16`".
-
-[source,asciidoc]
-.Example Markup
-----
-  * 2016-09-12
-  * September 12, 2016
-----
-
-
-[[writing-misc-a-an]]
-=== A/An and Markup Macros
-
-Use "`a`" and "`an`"
-link:https://www.grammar.com/a-vs-an-when-to-use/[correctly], based on the
-*sound* of the letter beginning the following word.
-
-It is easy to get this wrong when talking about Vulkan API names tagged with
-the <<markup-macros,markup macros>>.
-For example, if you wanted to say:
-
-A ename:VK_ERROR_DEVICE_LOST error
-
-the correct way to mark this up in asciidoctor would be:
-
-[source,asciidoc]
-----
-A ename:VK_ERROR_DEVICE_LOST error
-----
-
-However, on first glance at this it *appears* wrong, because the "`word`"
-following "`a`" is the macro name, "`ename{cl}`".
-That starts with a vowel, so the temptation is to say
-
-[source,asciidoc]
-----
-An ename:VK_ERROR_DEVICE_LOST error may occur.
-----
-
-What matters here is how the *output* document is formatted.
-
-
-=== Numbers in Text
-
-When describing the need for a small number of objects, smaller than ten,
-spell the number out (e.g. "`one`").
-If you are describing a literal value that is a small number, you may use a
-numeric value (e.g. "`1`").
-
-For example, instead of writing that a bitmask "`contains 1 or more bits`",
-write that it "`contains one or more bits`".
-A counter example is that it is okay to write "`For non-stereoscopic-3D
-applications, this value is 1.`"
-
-
-=== Use American Spelling Conventions
-
-In case of conflict, use American rather than British spelling conventions,
-except for noted exceptions in the table below.
-
-.Spelling
-[width="60%",options="header"]
-|====
-| Use Spelling  | Instead Of     | Comments
-| color         | colour         |
-| signaled      | signalled      |
-| tessellation  | tesselation    | Historical exception
-|====
-
-
-[[writing-inclusivity]]
-=== Use Inclusive Language
-
-The Vulkan Working Group has begun to apply the
-link:https://www.khronos.org/about/inclusive-language[Khronos Inclusive
-Language] list to our specifications and other documents.
-The Khronos Inclusive Language list contains terms to avoid due to their use
-in discriminatory contexts that make people uncomfortable, or cause
-division.
-
-We are working through the Vulkan Specification repository to make
-appropriate changes, and enhancing the repository continuous integration
-scripts to report questionable terminology usage.
-This process will take some time.
-
-Some files in the repository are incorporated unmodified from external
-projects we do not control, and which may not comply with the Inclusive
-Language list.
-We will ask those projects to update their terminology usage, but cannot
-control their choices.
-
-
-[[writing-pointers-instances]]
-=== Describing Pointers, Handles, Structures, and Arrays
-
-When describing pointer parameters or members, use "`is a pointer to`"
-rather than more informal phrasing such as "`points to`".
-
-When describing individual structures, use "`VkStructname structure`" rather
-than longer phrasing such as "`instance of the VkStructname structure`" or
-"`structure of type VkStructname`".
-
-When describing array parameters or members, use "`is a pointer to an array
-of`" rather than "`is an array of`" unless it is a structure member that is
-a fixed-size array.
-Reference the dynamic size of the array that is pointed to (usually another
-structure member), or the static size for fixed-size arrays, in the
-description.
-
-When describing pointers which may be `NULL`, use "`is `NULL` or a pointer
-to`" rather than "`is an optional pointer`".
-The same principle applies when describing a handle which may be
-dname:VK_NULL_HANDLE.
-"`Optional pointer/handle`" are not well-defined terms in the Specification.
-
-[source,asciidoc]
-.Example Markup
-----
-  * pname:pInfo is a pointer to a slink:VkDebugUtilsLabelEXT structure
-    specifying the parameters of the label to insert.
-  * pname:pBindInfos is a pointer to an array of pname:bindInfoCount
-    slink:VkBindBufferMemoryInfo structures describing buffers and memory to
-    bind.
-  * pname:pStrides is `NULL` or a pointer to an array
-    of buffer strides.
-  * pname:image is dlink:VK_NULL_HANDLE or a handle of an image which this
-    memory will be bound to.
-----
-
-
-[[writing-arrays]]
-=== Describing Properties of Array Elements
-
-Many Vulkan parameters are arrays, or pointers to arrays.
-When describing array elements, use the terminology "`each element`" when
-the description applies uniformly and independently to every element of the
-array.
-For example:
-
-[source,asciidoc]
-.Example Markup
-----
-  * Each element of the pname:pCommandBuffers member of each element of
-    pname:pSubmits must: be in the <<commandbuffers-lifecycle, pending or
-    executable state>>.
-----
-
-Use the terminology "`any element`" when the description is of zero or more
-elements of the array sharing a property.
-For example:
-
-[source,asciidoc]
-.Example Markup
-----
-  * If any element of the pname:pCommandBuffers member of any element
-    of pname:pSubmits was not recorded with the
-    ename:VK_COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT, it must: not be in
-    the <<commandbuffers-lifecycle, pending state>>.
-----
-
-Never use the redundant terminology "`any *given* element`".
-
-
-[[writing-compound-words]]
-=== Compound Words and Preferred Orthography
-
-Unless there is longstanding precedent in computer science literature, or
-the word is a noted exception in the table below, do not arbitrarily cram
-terms together.
-
-This does not apply to parameter names in the API, where capitalization is
-used to distinguish words.
-For example, it is proper to refer to the use of a pname:colorSpace member
-of a structure as a "`color space`" value.
-
-.Spelling
-[width="70%",options="header",cols="20%,20%,60%"]
-|====
-| Use Spelling  | Instead Of     | Comments
-| bit plane     | bitplane       |
-| compile time  | compile-time   | Per Wikipedia "`compile time`"
-| color space   | colorspace     |
-| cube map      | cubemap        |
-| double-buffer | doublebuffer   |
-| entry point   | entry-point +
-                  entrypoint
-                | Except if needed to disambiguate from surrounding terms
-| flat shading  | flatshading    |
-| GitHub        | Github         | Site's preferred spelling
-| LOD           | lod +
-                  level of detail +
-                  level-of-detail| Acronym for "`Level of Detail`"
-| mip level +
-  mip layer +
-  mip size  +
-  mip tail
-                | miplevel +
-                  miplayer +
-                  mipsize  +
-                  miptail        | "`mipmap *term*`" may be used in time
-| render pass   | renderpass     |
-| reuse         | re-use         |
-| side effect   | side-effect    |
-3+h| Exceptions
-| mipmap        | mip map        | Exception for historical reasons
-| pname:pNext chain
-                | pname:pNext-chain +
-                  pname:pNext extension chain
-                                 |
-| general-purpose
-                | general purpose| When used as an adjective
-| implementation-dependent
-                | implementation dependent
-                                 | When used as an adjective
-| swapchain     | swap chain     | Exception due to heavy use in WSI extensions
-| happen-before +
-  happen-after  | happen before +
-                  happen after   | As used in concurrent languages such as
-                                   C++11, Java and OpenCL C.
-|====
-
-==== Words With "Pre-" Prefixes
-
-// also: premultiply preorder prerotation predefined
-
-When using the prefix "`pre`" to indicate "`prior to`", such as in the words
-"`preinitialized`", "`preprocess`", and "`pretransform`", do not separate
-the prefix from the word with a hyphen.
-This list is not intended to be complete.
-
-
-[[writing-references]]
-=== References
-
-When citing external references, use the appropriate <<acm-references,
-Association for Computing Machinery Citation Style>>.
-Most citations in our specifications should follow the _For an online
-document/WWW resource_ style, using the actual date on the document being
-referenced rather than the document retrieval date.
-See the <<vulkan-spec, Vulkan Specification>> citation in this document for
-an example.
-
-
-[[writing-undefined]]
-== Describing Undefined Behavior
-
-When describing undefined behavior that results only in the values of
-specified variables, or the contents of specified memory, becoming undefined
-or implementation-defined, use the undefined{cl} macro to indicate that each
-use of the term "`undefined`" has been carefully considered and accurately
-represents the degree of undefined behavior allowed.
-
-The word "`undefined`" should not be used without the trailing {cl}.
-This is enforced by internal CI tests.
-
-The undefined{cl} macro does not result in visible markup in the output
-document, and is not itself a normative term.
-The macro is simply markup to help ensure that use of the word has been
-consciously chosen.
-
-When describing more general types of undefined behavior (up to and
-including termination of the application), do *not* use the term
-"`undefined`".
-Instead, specify that the application must{cl} not create circumstances that
-would lead to such behavior.
-Such statements should be written as valid usage statements, if possible.
-
-
-[[writing-describing]]
-== Describing Commands and Parameters
-
-The <<vulkan-spec,Vulkan API Specification>> describes API commands followed
-by descriptions of their parameters, which are usually simple scalar types,
-handles or pointers to Vulkan objects or arrays of objects; enumerated types
-specifying values or bitmasks which affect the operation of a command; or
-structures containing combinations of scalar types and objects.
-The templates and examples shown and annotated here are based on the
-<<vulkan-spec,Vulkan API Specification>>.
-Do not vary from them without compelling need.
-
-Normative parts of the <<vulkan-spec,Vulkan API Specification>> should
-describe _what_ something does, rather than _how_ or _why_ an application
-would want to use it.
-
-When explicitly allowed by the Specification, the reserved value `NULL` may:
-be used for pointer parameters and members and dispatchable object handles,
-and the reserved value dname:VK_NULL_HANDLE may: be used for
-non-dispatchable Vulkan object handle parameters and members.
-Otherwise, pointers and handles must: refer to valid memory and valid Vulkan
-objects, respectively.
-
-
-[NOTE]
-.Guideline
-====
-As a simple example, say
-
-"`To create a command pool, call fname:vkCreateCommandPool`"
-
-rather than
-
-"`You/The application/The user can create a command pool by calling
-fname:vkCreateCommandPool`".
-
-====
-
-Explanations of _why_ and _how_ should largely be confined to reference
-documentation, sample code, tutorials, and other such documents.
-Occasional non-normative explanations can be included in the
-<<vulkan-spec,Vulkan API Specification>> using
-<<markup-informative-notes,informative notes>>.
-
-
-[[writing-describing-errors]]
-=== Commands which Return Error Codes
-
-Commands which return elink:VkResult values must list all possible error
-codes for the command in the `errorcodes` XML attribute for the command.
-Almost all such commands may return the ename:VK_ERROR_OUT_OF_HOST_MEMORY
-error code.
-Any exceptions to this rule should be carefully considered by the
-specification author, and a rationale for this anomalous behavior may be
-provided in a NOTE or in the Issues section of the extension appendix
-corresponding to the new command.
-
-See the "`Return Codes`" section of the <<vulkan-spec,Vulkan API
-Specification>> for additional information.
-
-
-[[writing-describing-layers]]
-== Extensions and Grouping Related Language
-
-Language specifying behavior of a command or structure that does not
-originate in an extension should be placed in a single contiguous region of
-the specification.
-
-When defining a new command or structure from an extension that introduces
-additional behavior or options, do not insert such new language in a way
-that "`orphans`" part of an existing description by splitting up the
-existing language.
-
-This constraint does not apply to enumerated types.
-Language for new enumerants defined by extensions should be added to the
-existing enumerant definition, <<extensions-documenting-extensions,
-protected by asciidoctor conditionals>> for the new extension.
-
-[NOTE]
-.Guideline
-====
-Specification language should be structured, whenever possible, so it fits
-into a single open block defining a <<writing-refpages, reference page>>.
-====
-
-
-[[writing-math]]
-== Math Markup
-
-There is a considerable amount of math in the documentation, ranging from
-simple arithmetic expressions to complicated conditionals.
-There are two ways of marking up math expressions, described below.
-
-=== Asciidoc Math Markup
-
-Where possible, math is marked up using straight asciidoctor features.
-For commonality with LaTeX math (see below), some common LaTeX operators and
-names are defined as asciidoctor attributes using the same names, expanding
-to the corresponding Unicode entities.
-The complete set of these attributes is found in `config/attribs.txt`.
-
-.Spelling
-[width="100%",options="header",cols="20%,20%,60%"]
-|====
-| Feature | Result | Sample Markup
-
-| Subscripts
-| [eq]#a~x~#
-| +++[eq]#a~x~#+++
-
-| Superscripts
-| [eq]#-2^(b-1)^#
-| +++[eq]#-2^(b-1)^#+++
-
-| Struct/parameter names as variables
-| [eq]#2^pname:bits^#
-| +++[eq]#2^pname:bits^#+++
-
-| Greek Letters (selected)
-| [eq]#{alpha}, {beta}, {gamma}, {delta}, {DeltaUpper}, {epsilon}, {lambda},
-  {rho}, {tau}#
-| +++[eq]#{alpha}, {beta}, {gamma}, {delta}, {DeltaUpper}, {epsilon}, {lambda},
-  {rho}, {tau}#+++
-
-| Fractions
-| [eq]#{onequarter} {plus} {onehalf}#
-| +++[eq]#{onequarter} {plus} {onehalf}#+++
-
-| Closed Ranges
-| [eq]#[0,1]#
-| +++[eq]#[0,1]#+++
-
-| Open Ranges
-| [eq]#[0,1)#
-| +++[eq]#[0,1)#+++
-
-| Arithmetic and Relational Operators
-| [eq]#a {times} b#, [eq]#a {leq} b#, [eq]#a {neq} b#, [eq]#a {geq} b#, [eq]#{vert}x{vert}#
-| +++[eq]#a {times} b#+++, +++[eq]#a {leq} b#+++, +++[eq]#a {neq} b#+++, +++[eq]#a {geq} b#+++, +++[eq]#{vert}x{vert}#+++
-
-| Floor
-| [eq]#{lfloor}w - {onehalf}{rfloor}#
-| +++[eq]#{lfloor}w - {onehalf}{rfloor}#+++
-
-| Ceiling
-| [eq]#{lceil}log~2~(max(pname:width, pname:height)){rceil} {plus} 1#
-| +++[eq]#{lceil}log~2~(max(pname:width, pname:height)){rceil} {plus} 1#+++
-
-| Logical and Set Operators
-| [eq]#{land} {lnot} {lor} {oplus} {elem}#
-| +++[eq]#{land} {lnot} {lor} {oplus} {elem}#+++
-
-| Partial Derivatives
-| [eq]#{partial}r~x~ / {partial}x = 0#
-| +++[eq]#{partial}r~x~ / {partial}x = 0#+++
-
-| Matrix/Vector Parameter Names
-| [eq]#**P** = t **P**~1~ {plus} (1-t) **P**~2~#
-| +++[eq]#**P** = t **P**~1~ {plus} (1-t) **P**~2~#+++
-
-|====
-
-
-[[writing-math-latexmath]]
-=== LaTeX Math Markup
-
-Math markup more complex than easily supported in straight asciidoctor
-markup (examples found in the Vulkan Specification include matrices,
-tensors, summation notation, conditional assignments, and division of
-complex expressions) are marked up using LaTeX math notation, which is
-either passed through to the KaTeX in-browser rendering script for HTML
-outputs, or passed through asciidoctor-mathematical for PDF outputs.
-
-[NOTE]
-.Note
-====
-There are font and style differences between LaTeX and asciidoctor math
-markup which lead to minor visual inconsistencies.
-We will try to make this better over time, but it is not significant enough
-to be a big priority.
-====
-
-While LaTeX math macros, including the amsmath package, are supported,
-general LaTeX constructs are not.
-
-_Inline math_ is encoded using the latexmath{cl} macro.
-For example:
-
-  * latexmath:[[0,1\]]
-  * latexmath:[\frac{1 - \frac{x}{2}}{x - 1}]
-  * latexmath:[\mathbf{c} = t \mathbf{c}_1 + (1-t) \mathbf{c}_2.]
-
-[source,asciidoc]
-.Example Markup
-----
-  * latexmath:[[0,1\]]
-  * latexmath:[\frac{1 - \frac{x}{2}}{x - 1}]
-  * latexmath:[\mathbf{c} = t \mathbf{c}_1 + (1-t) \mathbf{c}_2. ]
-----
-
-Note the escaped bracket in markup for the first expression, which is
-necessary to work around asciidoctor macro parsing.
-
-_Block math_ is used for more complex equations.
-This example uses the `aligned` environment to delimit the expression.
-
-[latexmath]
-+++++++++++++++++++
-\begin{aligned}
-c_{RGB} & =
-  \begin{cases}
-    \frac{c_{sRGB}}{12.92}                              & \text{for}\  c_{sRGB} \leq 0.04045 \\
-    \left ( \frac{c_{sRGB}+0.055}{1.055} \right )^{2.4} & \text{for}\  c_{sRGB} > 0.04045
-  \end{cases}
-\end{aligned}
-+++++++++++++++++++
-
-[source,asciidoc]
-.Example Markup
-----
-[latexmath]
-+++++++++++++++++++
-\begin{aligned}
-c_{RGB} & =
-  \begin{cases}
-    \frac{c_{sRGB}}{12.92}                              & \text{for}\  c_{sRGB} \leq 0.04045 \\
-    \left ( \frac{c_{sRGB}+0.055}{1.055} \right )^{2.4} & \text{for}\  c_{sRGB} > 0.04045
-  \end{cases}
-\end{aligned}
-+++++++++++++++++++
-----
-
-[NOTE]
-.Note
-====
-The KaTeX processor used to render LaTeX math inside HTML documents does not
-support all features of LaTeX math.
-
-Similarly, the asciidoctor-mathematical processor does not support
-everything, though does have some support for AMSMath.
-
-Some workarounds we've had to make are:
-
-.LaTeX math replacements for KaTeX compatibility
-[width="70%",options="header",cols="20%,20%,60%"]
-|====
-| Replace              | With              | Comments
-| `\begin{equation}`   | _nothing_         | Unnecessary in blocks. Should not be used for inline.
-| `\end{equation}`     | _nothing_         | Unnecessary in blocks. Should not be used for inline.
-| `\begin{align*}`     | `\begin{aligned}` |
-| `\end{align*}`       | `\end{aligned}`   |
-| `\operatorname{foo}` | `\mathbin{foo}`   |
-| `{\rm A}`            | `\mathrm{A}`      |
-| `\text{for }`        | `\text{for}\ `    | Text ending in spaces is unpredictable - favour escaped spaces after text
-|====
-
-The KaTeX repository provides a
-link:https://github.com/Khan/KaTeX/wiki/Function-Support-in-KaTeX[list of
-currently supported LaTeX functionality].
-You can also use the link:https://khan.github.io/KaTeX/[live katex preview
-tool] on the KaTeX website to double check support, without building the
-whole specification.
-
-Note that we use a locally-cached copy of KaTeX which may lag the latest
-published version on the website.
-As of April 2021, we are using v0.11.1.
-
-See the mtex2MML repository for a
-link:https://github.com/gjtorikian/mtex2MML/blob/master/SUPPORTED.md[list of
-supported operations in the PDF build].
-In particular, `\mathop` is not supported properly, but most other standard
-functionality is included.
-
-It is necessary to cross reference these two to make sure that support
-exists before using anything, but almost all standard functionality is
-supported for both.
-====
-
-This example is among the most complex expressions in the Vulkan
-specification:
-
-[latexmath]
-+++++++++++++++++++
-V =
-  \begin{cases}
-    (-1)^S \times 0.0,                      & E = 0, M = 0     \\
-    (-1)^S \times 2^{-14} \times { M \over 2^{10} },
-                                            & E = 0,  M \neq 0 \\
-    (-1)^S \times 2^{E-15} \times { \left( 1 + { M \over 2^{10} } \right) },
-                                            & 0 < E < 31       \\
-    (-1)^S \times Inf,             & E = 31, M = 0             \\
-    NaN,                           & E = 31, M \neq 0
-  \end{cases}
-+++++++++++++++++++
-
-[source,asciidoc]
-.Example Markup
-----
-[latexmath]
-+++++++++++++++++++
-V =
-  \begin{cases}
-    (-1)^S \times 0.0,                      & E = 0, M = 0     \\
-    (-1)^S \times 2^{-14} \times { M \over 2^{10} },
-                                            & E = 0,  M \neq 0 \\
-    (-1)^S \times 2^{E-15} \times { \left( 1 + { M \over 2^{10} } \right) },
-                                            & 0 < E < 31       \\
-    (-1)^S \times Inf,             & E = 31, M = 0             \\
-    NaN,                           & E = 31, M \neq 0
-  \end{cases}
-+++++++++++++++++++
-----
-
-
-[[writing-latexmath-in-table-cells]]
-=== LaTeX Math in Table Cells
-
-To use `[latexmath]` or `latexmath{cl}` constructs inside table cells, the
-cell separator must be `a|` instead of just `|`:
-
-[source,asciidoc]
-.Example Markup
-----
-.Advanced Blend Overlap Modes
-[width="80%",options="header"]
-|====
-| Overlap Mode                              | Weighting Equations
-| ename:VK_BLEND_OVERLAP_UNCORRELATED_EXT  a|
-[latexmath]
-++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-                                              \begin{aligned}
-                                                p_0(A_s,A_d) & = A_sA_d \\
-                                                p_1(A_s,A_d) & = A_s(1-A_d) \\
-                                                p_2(A_s,A_d) & = A_d(1-A_s) \\
-                                              \end{aligned}
-++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-|====
-----
-
-
-[[writing-pNext-chain]]
-== Describing Extending Structure Chains
-
-When describing an extending structure which is passed to an existing
-command by including it in the pname:pNext chain of a structure parameter of
-that command, introduce the structure description in this fashion:
-
-[source,asciidoc]
-----
-When *performing an operation described by the extending structure*, add
-a slink:VkExtensionStructNameID structure to the pname:pNext chain of the
-slink:VkBaseExtensionStructName structure passed to the
-flink:vkBaseFunctionName command *saying what the extending structure
-does*.
-----
-
-When describing properties of a structure included in a pname:pNext chain,
-refer to that structure as "`included in the pname:pNext chain`" rather than
-`"present in`" or other similar terms, in this fashion:
-
-[source,asciidoc]
-----
-If the pname:pNext chain includes a slink:VkPhysicalDeviceFeatures2
-structure, then pname:pEnabledFeatures must: be `NULL`
-----
-
-
-[[writing-example]]
-== Example Command, Structure, and Enumerant Descriptions
-
-The <<sample-command,next section>> is a sample based on the
-<<vulkan-spec,Vulkan API Specification>>, and describes a command and
-related structures and enumerated types in enough detail to see the
-different usage patterns and layout / markup used.
-Informative notes discussing markup and guidelines are interspersed with the
-example description to explain how and why it looks as it does.
-
-
-[[sample-command]]
-== Sample Command Description: Creating Command Pools
-
-[open,refpage='vkCreateCommandPool',desc='Create a new command pool object',type='protos']
---
-To create a command pool, call:
-
-include::{generated}/api/protos/vkCreateCommandPool.txt[]
-
-[NOTE]
-.Guideline
-====
-Begin the command description with an open block delimiting the contents as
-a reference page.
-The open block contains several required attribute values, as described for
-<<writing-refpages, automatic extraction into a reference page>>.
-
-Use a short, active sentence when describing what commands do, instead of
-more passive phrasing like "`A command pool is created by calling:`" or
-"`The application may create a command pool by calling:`".
-
-After the description, include the autogenerated prototype for the command
-from the `\{generated}/api/protos/` directory:
-
-// The 'subs=attributes+' and '{blank}--' are one way to allow the inner
-// [source] block to show the correct two dashes. See
-// http://discuss.asciidoctor.org/Another-markup-escaping-question-td5665.html
-
-[source,asciidoc,subs=attributes+]
-~~~~
-[open,refpage='vkCreateCommandPool',desc='Create a new command pool object',type='protos']
-{blank}--
-To create a command pool, call:
-
-\include::\{generated}/api/protos/vkCreateCommandPool.txt[]
-~~~~
-
-Note that each autogenerated command, enumeration, flag, or structure
-definition include file also defines a corresponding asciidoctor anchor
-which is the base name of the file.
-In this case, the anchor is named `vkCreateCommandPool`.
-====
-
-  * pname:device is the logical device that the command pool is created on.
-  * pname:pCreateInfo is a pointer to a slink:VkCommandPoolCreateInfo
-    structure specifying the state of the command pool object.
-  * pname:pAllocator controls host memory allocation as described in the
-    <<memory-allocation, Memory Allocation>> chapter.
-  * pname:pCommandPool is a pointer to a slink:VkCommandPool handle in which
-    the created pool is returned.
-
-[NOTE]
-.Guideline
-====
-Describe each command parameter in a separate bullet list item.
-in the same order that parameters appear in the command.
-
-Each description must begin with the parameter name.
-This aids in extracting short descriptions of parameters for inclusion in
-annotated headers and similar documentation.
-Make sure to tag each parameter with the pname{cl} macro.
-
-Strive for compact notation, and in particular always try to use the
-phrasing "`pname{cl}param _is_`" rather than wordier forms such as
-"`pname{cl}param _specifies_`" or "`The pname{cl}param parameter
-specifies`".
-In general there is no need to describe a parameter which is a Vulkan object
-handle *as* a handle; for example, say "`pname{cl}device is the logical
-device`" rather than "`pname{cl}device is a handle to the logical device`".
-An exception is object creation functions, where a pointer to a handle of
-the proper type is used to return the newly created object.
-====
-
-This is a general description of creating a command pool.
-
-.Valid Usage
-****
-  * [[VUID-vkCreateCommandPool-queueFamilyIndex-01937]]
-    pname:pCreateInfo->queueFamilyIndex must: be the index of a queue family
-    available in the logical device pname:device
-****
-
-include::{generated}/validity/protos/vkCreateCommandPool.txt[]
---
-
-[NOTE]
-.Guideline
-====
-If there is a general description of the command, add it following the
-parameter descriptions:
-
-[source,asciidoc,subs=attributes+]
-~~~~
-This is a general description of creating a command pool.
-~~~~
-
-If there are _explicit_ valid usage statements for the command, add them in
-their own valid usage block:
-
-[source,asciidoc,subs=attributes+]
-~~~~
-.Valid Usage
-****
-  * [[VUID-vkCreateCommandPool-queueFamilyIndex-01937]]
-    pname:pCreateInfo->queueFamilyIndex must: be the index of a queue family
-    available in the logical device pname:device
-****
-~~~~
-
-Although a valid usage ID is shown in the rendered example above, do not
-specify the ID when initially writing the statement, as
-<<sample-writing-explicit-vu, described below>>.
-VUIDs are normally assigned immediately prior to publication.
-
-Some parameter and member validation language for commands and structures is
-_implicit_ (autogenerated from `vk.xml`), and included from the
-`\{generated}/validity/` directories.
-All Vulkan command and structure language should include the autogenerated
-file at the end of their descriptions.
-It is harmless to include a nonexistent file, in the rare cases where no
-implicit validity language exists.
-
-[source,asciidoc,subs=attributes+]
-~~~~
-\include::\{generated}/validity/protos/vkCreateCommandPool.txt[]
-{blank}--
-~~~~
-
-Close the open block surrounding the command description after the implicit
-validity include.
-All content within the block will be extracted for the corresponding
-reference page.
-
-Open blocks delimiting reference page content should not themselves contain
-section headers, as asciidoctor cannot render such nested content correctly.
-Reference pages should in general be relatively short, so this limitation is
-not severe.
-
-Structures and enumerations first introduced as parameters of a command are
-described next.
-====
-
-[open,refpage='VkCommandPoolCreateInfo',desc='Structure specifying parameters of a newly created command pool',type='structs']
---
-The sname:VkCommandPoolCreateInfo structure is defined as:
-
-include::{generated}/api/structs/VkCommandPoolCreateInfo.txt[]
-
-[NOTE]
-.Guideline
-====
-Begin the structure description with an open block delimiting the contents
-as a reference page, in the same fashion as described above for commands.
-The open block contains several required attribute values, as described for
-<<writing-refpages, automatic extraction into a reference page>>.
-
-Use a short, active paragraph to introduce the structure, usually just "`The
-sname:VkStructureName structure is defined as:`".
-
-After the description, include the autogenerated definition for the
-structure from the `\{generated}/api/structs/` directory:
-
-[source,asciidoc,subs=attributes+]
-~~~~
-[open,refpage='VkCommandPoolCreateInfo',desc='Structure specifying parameters of a newly created command pool',type='structs']
-{blank}--
-
-The sname:VkCommandPoolCreateInfo structure is defined as:
-
-\include::\{generated}/api/structs/VkCommandPoolCreateInfo.txt[]
-~~~~
-====
-
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-+
---
-This demonstrates how to create a continuation paragraph in a member
-description.
-This paragraph is not present in the actual specification the example is
-based on.
---
-  * pname:flags is a bitmask of elink:VkCommandPoolCreateFlagBits indicating
-    usage behavior for the pool and command buffers allocated from it.
-  * pname:queueFamilyIndex designates a queue family as described in section
-    <<devsandqueues-queueprops,Queue Family Properties>>.
-    All command buffers allocated from this command pool must: be submitted
-    on queues from the same queue family.
-
-[NOTE]
-.Guideline
-====
-Each structure member is described in a separate bullet list item.
-For structures with pname:sType and pname:pNext members, there is standard
-boilerplate for their descriptions.
-Descriptions of other members of the structure follow.
-
-[source,asciidoc,subs=attributes+]
-~~~~
-  * pname:sType is the type of this structure.
-  * pname:pNext is `NULL` or a pointer to a structure extending this
-    structure.
-+
-{blank}--
-This demonstrates how to create a continuation paragraph in a member
-description.
-This paragraph is not present in the actual specification the example is
-based on.
-{blank}--
-  * pname:flags is a bitmask of elink:VkCommandPoolCreateFlagBits indicating
-    usage behavior for the pool and command buffers allocated from it.
-  * pname:queueFamilyIndex designates a queue family as described in section
-    <<devsandqueues-queueprops,Queue Family Properties>>.
-    All command buffers allocated from this command pool must: be submitted
-    on queues from the same queue family.
-~~~~
-
-These entries should be short and functional, without describing details of
-e.g. new enumerant values, function of individual parameter settings, etc.
-They can refer to other types using the appropriate *link: macros or to
-related sections of the specification using asciidoctor xrefs.
-
-In rare cases, a member description will cover multiple paragraphs.
-In these cases the normal list nesting and indentation guidelines cannot be
-applied due to limitations of the asciidoctor parser.
-It is usually best to append a continuation block following the first
-paragraph of such a list item, as shown for pname:pNext above.
-
-Add general descriptions of the structure, if any, following the member
-descriptions.
-No general description is shown in this example.
-====
-
-.Valid Usage
-****
-ifdef::VK_VERSION_1_1[]
-  * [[VUID-VkCommandPoolCreateInfo-flags-02860]]
-    If the protected memory feature is not enabled, the
-    ename:VK_COMMAND_POOL_CREATE_PROTECTED_BIT bit of pname:flags must: not
-    be set
-endif::VK_VERSION_1_1[]
-****
-
-include::{generated}/validity/structs/VkCommandPoolCreateInfo.txt[]
---
-
-[NOTE]
-.Guideline
-====
-Add explicit valid usage statements (if any) and the implicit autovalidity
-include in the same fashion as described for commands above, then close the
-open block.
-
-[source,asciidoc,subs=attributes+]
-~~~~
-.Valid Usage
-****
-ifdef::VK_VERSION_1_1[]
-  * [[VUID-VkCommandPoolCreateInfo-flags-02860]]
-    If the protected memory feature is not enabled, the
-    ename:VK_COMMAND_POOL_CREATE_PROTECTED_BIT bit of pname:flags must: not
-    be set
-endif::VK_VERSION_1_1[]
-****
-
-\include::\{generated}/validity/structs/VkCommandPoolCreateInfo.txt[]
-{blank}--
-~~~~
-====
-
-[open,refpage='VkCommandPoolCreateFlagBits',desc='Bitmask specifying usage behavior for a command pool',type='enums']
---
-Bits which can: be set in slink:VkCommandPoolCreateInfo::pname:flags to
-specify usage behavior for a command pool are:
-
-include::{generated}/api/enums/VkCommandPoolCreateFlagBits.txt[]
-
-[NOTE]
-.Guideline
-====
-Begin an enumerated type description with an open block delimiting the
-contents as a reference page, in the same fashion as described above for
-commands and structures.
-
-Use boilerplate language similar to that above to introduce the type.
-
-[source,asciidoc,subs=attributes+]
-~~~~
-[open,refpage='VkCommandPoolCreateFlagBits',desc='Bitmask specifying usage behavior for a command pool',type='enums']
-{blank}--
-Bits which can: be set in slink:VkCommandPoolCreateInfo::pname:flags to
-specify usage behavior for a command pool are:
-
-\include::\{generated}/api/enums/VkCommandPoolCreateFlagBits.txt[]
-~~~~
-====
-
-  * ename:VK_COMMAND_POOL_CREATE_TRANSIENT_BIT specifies that command
-    buffers allocated from the pool will be short-lived, meaning that they
-    will be reset or freed in a relatively short timeframe.
-    This flag may: be used by the implementation to control memory
-    allocation behavior within the pool.
-ifdef::VK_VERSION_1_1[]
-  * ename:VK_COMMAND_POOL_CREATE_PROTECTED_BIT specifies that command
-    buffers allocated from the pool are protected command buffers.
-endif::VK_VERSION_1_1[]
---
-
-[NOTE]
-.Guideline
-====
-Each enumerant in the enumerated type is described in a separate bullet list
-item.
-Make sure to protect enumerants added to the type by extensions or future
-core versions with asciidoctor conditionals.
-Close the open block after all enumerants are described.
-
-[source,asciidoc,subs=attributes+]
-~~~~
-  * ename:VK_COMMAND_POOL_CREATE_TRANSIENT_BIT specifies that command
-    buffers allocated from the pool will be short-lived, meaning that they
-    will be reset or freed in a relatively short timeframe.
-    This flag may: be used by the implementation to control memory
-    allocation behavior within the pool.
-\ifdef::VK_VERSION_1_1[]
-  * ename:VK_COMMAND_POOL_CREATE_PROTECTED_BIT specifies that command
-    buffers allocated from the pool are protected command buffers.
-\endif::VK_VERSION_1_1[]
-{blank}--
-~~~~
-====
-
-
-[[sample-writing-explicit-vu]]
-== Writing Explicit Valid Usage Statements
-
-Explicit valid usage statements must be written at a point that all
-information needed to evaluate them is known.
-In particular, if validity of structure parameters depends on other
-parameters of a command that structure is passed to, such valid usage
-statements must be written for the command, rather than the structure.
-
-Each explicit valid usage statement should be a single, self-contained
-assertion, possibly involving multiple subexpressions or parameters.
-For example, instead of writing "`width, height, and depth must: all be
-greater than zero`", write each condition as a separate statement.
-In contrast, "`width {times} height must: be less than 1024`" is a single
-assertion involving multiple parameters.
-
-Do not use "`unless`" to call out exceptions - always write valid usage
-statements of the form "`if _A_ then _B_`".
-This may result in harder to read statements in a few cases, but maintains
-consistency.
-In many cases, it may lead to a simpler VU statement, or splitting one large
-VU into multiple new ones.
-
-Do not use nested bullet lists or other writing structure where valid usage
-statements are not self-contained.
-This would make it impossible to extract semantically meaningful
-descriptions for each assigned <<appendix-vuid, Valid Usage ID Tag>>.
-
-Be clear on the distinction between a "`valid pointer`" and a "`pointer to a
-valid object`" when writing valid usage statements.
-See the "`Valid Usage`" section of the Vulkan Specification, and
-particularly the "`Valid Usage for Pointers`" section.
-
-When valid usage statements apply only when specific extensions and/or core
-API versions are enabled at runtime, surround those statements in their
-entirety with appropriate asciidoctor conditionals.
-Never use asciidoctor conditionals _inside_ a valid usage statement.
-
-Explicit valid usage statements must be assigned Valid Usage ID tags before
-publication.
-This process is described in the <<appendix-vuid, Valid Usage ID Tags>>
-appendix, but is normally performed only when preparing to integrate
-functionality into the Vulkan Specification prior to publication.
-It is something authors of new functionality should be aware of, but are not
-themselves responsible for.
-For example, when writing the explicit
-flink:vkCreateCommandPool::pname:queueFamilyIndex valid usage statement
-shown above, the tag
-
-[source,asciidoc,subs=attributes+]
-----
-[[VUID-vkCreateCommandPool-queueFamilyIndex-01937]]
-----
-
-was inserted by a script, not the original author.
-
-[NOTE]
-.Guideline
-====
-If the same set of valid usage statements are going to be common to multiple
-commands or structures, these should be extracted into a separate file under
-`chapters/commonvalidity/`.
-The file name should be short but to the point (e.g. `draw_common.txt`), and
-then the file can be included in the relevant API features using standard
-include syntax:
-
-[source,asciidoc,subs=attributes+]
-~~~~
-.Valid Usage
-****
-\include::\{chapters}/commonvalidity/draw_common.txt[]
-\include::\{chapters}/commonvalidity/draw_vertex_binding.txt[]
-  * [[VUID-vkCmdDrawIndirectByteCountEXT-transformFeedback-02287]]
-    sname:VkPhysicalDeviceTransformFeedbackFeaturesEXT::pname:transformFeedback
-    must: be enabled
-****
-~~~~
-
-Common VU includes should appear before individual VUs for consistency.
-
-The file itself should be structured with the comment `// Common Valid
-Usage` used as a delimiter at the start and end of the file, with a comment
-describing in more detail where these are included, and then the valid usage
-statement bullets outside of a valid usage block.
-For example:
-
-[source,asciidoc]
-~~~~
-// Common Valid Usage
-// Common to drawing commands that consume vertex binding state
-  * All vertex input bindings accessed via vertex input variables declared
-    in the vertex shader entry point's interface must: have valid buffers
-    bound
-  * For a given vertex buffer binding, any attribute data fetched must: be
-    entirely contained within the corresponding vertex buffer binding, as
-    described in <<fxvertex-input>>
-// Common Valid Usage
-~~~~
-
-Finally, the original feature section needs to define the `:refpage:`
-attribute to match the name of the feature, as this is used to correctly
-generate links to expanded common valid usage statements in the built
-specification.
-
-[source,asciidoc]
-~~~~
-[open,refpage='vkCmdDrawIndirectByteCountEXT',desc='Draw primitives where the vertex count is derived from the counter byte value in the counter buffer',type='protos']
---
-:refpage: vkCmdDrawIndirectByteCountEXT
-~~~~
-
-In general, this methodology should be preferred over any other method of
-consolidation - e.g. calling out a block of common valid usage statements,
-or referencing the valid usage statements of another command.
-However, for cases where the boilerplate of setting this up creates more
-text than a simple copy paste (e.g. only two commands consume a single
-valid usage statement), the original VUs can be left intact.
-====
-
-
-[[writing-empty-enumerations]]
-== Markup For Empty Enumerated Types
-
-Sometimes an enumerated type has all values defined by extensions, and each
-enumerated value defined by the type will be surrounded by an asciidoctor
-conditional for the corresponding extension.
-When a specification is built without any of those extensions enabled, the
-type should still be included, even though it is empty.
-In this case, the enumerated value descriptions must be followed by one
-additional conditional section which is only included when *none* of the
-relevant extensions are enabled.
-
-For example, the relevant part of the
-ename:VkDescriptorSetLayoutCreateFlagBits description, whose only value is
-defined by an extension, will look like this:
-
-[source,asciidoc,subs=attributes+]
-----
-\include::\{generated}/api/enums/VkDescriptorSetLayoutCreateFlagBits.txt[]
-
-\ifdef::VK_KHR_push_descriptor[]
-  * ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_PUSH_DESCRIPTOR_BIT_KHR specifies
-    that descriptor sets must: not be allocated using this layout, and
-    descriptors are instead pushed by flink:vkCmdPushDescriptorSetKHR.
-\endif::VK_KHR_push_descriptor[]
-
-\ifndef::VK_KHR_push_descriptor[]
-[NOTE]
-.Note
-====
-All bits for this type are defined by extensions, and none of those
-extensions are enabled in this build of the specification.
-====
-\endif::VK_KHR_push_descriptor[]
-----
-
-
-[[writing-refpages]]
-== Markup For Automatic Reference Page Extraction
-
-The Vulkan reference pages are (mostly) extracted from corresponding
-sections of the API Specification.
-This requires that the markup and writing conventions described above be
-adhered to rigidly.
-
-The extraction scripts for a given page rely on the existence of an
-asciidoctor `open` block surrounding markup describing that page, with
-attributes used to specify properties of the reference page.
-Additional heuristics and non-asciidoctor tags, described below, are used to
-identify subsections of a reference page in some cases.
-
-In general the open block introduction will look like:
-
-[source,asciidoc]
-----
-[open,refpage='name',desc='short description',type='pagetype',alias='alias',anchor='anchor',xrefs='xrefs']
---
-----
-
-Attributes which can be set on the block are:
-
-  * *refpage* - the name of the reference page, e.g. the Vulkan interface
-    (command, structure, enumerant, handle, etc.) name. This attribute is
-    required.
-  * *desc* - short description / summary of the page, used in the page
-    title.
-    This attribute is required.
-  * *type* - type of the interface, which must match the directory name
-    following `api/` in the interface `include::` line within the block, and
-    must be one of `basetypes`, `defines`, `enums`, `flags`, `funcpointers`,
-    `handles`, `protos`, or `structs`; or the non-API block types `feature`,
-    `freeform`. or `spirv`.
-    This attribute is required.
-  * *alias* - list of comma-separated names of other API entities which this
-    refpage also describes. This is used when an API is promoted and the
-    refpage block describes both the old and promoted APIs.
-    This attribute is optional.
-  * *anchor* - anchor name at which this reference page is fully described
-    in the API specification document.
-    This attribute is optional except for the non-API block types, which do
-    not correspond to Vulkan APIs.
-  * *xrefs* - list of whitespace-separated names of other reference pages
-    which should be added to the `See Also` section of this page.
-    Most cross-references are automatically generated based on the immediate
-    dependency information in `vk.xml`, but in some cases, such as referring
-    between `*FlagBits` and `*Flags` types, this additional tagging is
-    useful.
-    This attribute is optional.
-
-Attributes of the open block must be written in this format, using single
-quotes as delimiters (even though asciidoctor markup also allows double
-quotes), and escape single quotes in e.g. the *desc* attribute value with
-backquotes.
-
-After the open block is started, the following markup should be provided:
-
-  * A single paragraph of text describing the definition of the interface.
-    This paragraph is optional, but strongly recommended.
-  * The `include` line for the interface, which must be consistent with the
-    page name and type in the open block attributes.
-    This paragraph is required.
-  * A bullet list describing function parameters, structure members,
-    enumerants in an enumerated type, etc.
-    This list should contain no empty lines, as the extraction script
-    classifies the uninterrupted block of text following the `include`
-    directive as the `Parameters` or `Members` section of the ref page.
-    This list is required, unless the interface has nothing to describe,
-    such as an empty structure or enumeration, or a function with no
-    parameters.
-  * Paragraphs of text making up the `Description` section of the ref page.
-    This section is optional.
-    If it is necessary due to constraints of asciidoctor markup to have an
-    empty line in the bullet list section, add a `// refBody` comment
-    immediately following the bullet list and preceding this section:
-+
-[source,asciidoc]
-----
-// refBody
-----
-+
-There are no examples of this usage in the Vulkan 1.2.192 Specification,
-but it has been needed in the past and may again in the future.
-+
-  * An explicit valid usage block.
-    This block is required if the interface has such valid usage
-    constraints.
-  * The `include` line for the implicit valid usage block.
-    This line is required for commands and structures, but not for
-    interfaces such as enumerated types, which do not have implicit valid
-    usage blocks.
-  * Finally, a two-dash asciidoctor delimiter closing the open block:
-+
-[source,asciidoc]
-----
---
-----
-
-All elements specifying an interface name (open block `refpage` attributes,
-interface `include` lines, and validity `include` lines) must use the same
-interface name, if present.
-Otherwise the extraction script is either unable to extract that page, or
-will extract the wrong text - and the language will be structurally
-incorrect, as well.
-The extraction process is somewhat fragile, so care should be taken and the
-results of reference page extraction verified after making changes to that
-portion of the specification source.
-
-Content that should only appear in reference pages, such as
-developer-oriented guidelines for reference pages describing extensions, may
-be conditionally included in the specification as follows:
-
-[source,asciidoc,subs=attributes+]
-----
-\ifdef::isrefpage[]
-
-=== Refpage-Only Section
-
-*This section will appear only when generating an extension refpage,
-but not in the specification extensions appendix.*
-
-\endif::isrefpage[]
-----
diff --git a/registry/vulkan/vkspec.txt b/registry/vulkan/vkspec.txt
deleted file mode 100644
index 3cc3c88..0000000
--- a/registry/vulkan/vkspec.txt
+++ /dev/null
@@ -1,212 +0,0 @@
-// Copyright 2014-2021 The Khronos Group Inc.
-//
-// SPDX-License-Identifier: CC-BY-4.0
-
-// :regtitle: is explained in
-// http://discuss.asciidoctor.org/How-to-add-markup-to-author-information-in-document-title-td6488.html
-= Vulkan^®^ {revnumber} - A Specification {apititle}
-:regtitle: pass:q,r[^®^]
-The Khronos{regtitle} Vulkan Working Group
-:data-uri:
-:icons: font
-:toc2:
-:toclevels: 2
-:numbered:
-:source-highlighter: rouge
-:rouge-style: github
-
-// Various special / math symbols. This is easier to edit with than Unicode.
-include::config/attribs.txt[]
-
-// Table of contents is inserted here
-toc::[]
-
-:leveloffset: 1
-
-<<<<
-
-[[preamble]]
-= Preamble
-
-include::copyright-spec.txt[]
-
-:test: 0
-ifeval::["{test}"=="1"]
-
-// Include or insert trivial test markup here, to bypass building full spec
-// include::chapters/textest.txt[]
-
-include::chapters/introduction.txt[]
-
-endif::[]
-
-ifeval::["{test}"!="1"]
-include::chapters/introduction.txt[]
-
-include::chapters/fundamentals.txt[]
-
-include::chapters/initialization.txt[]
-
-include::chapters/devsandqueues.txt[]
-
-include::chapters/cmdbuffers.txt[]
-
-include::chapters/synchronization.txt[]
-
-include::chapters/renderpass.txt[]
-
-include::chapters/shaders.txt[]
-
-include::chapters/pipelines.txt[]
-
-include::chapters/memory.txt[]
-
-include::chapters/resources.txt[]
-
-include::chapters/samplers.txt[]
-
-include::chapters/descriptorsets.txt[]
-
-include::chapters/interfaces.txt[]
-
-include::chapters/textures.txt[]
-
-ifdef::VK_EXT_fragment_density_map[]
-include::chapters/fragmentdensitymapops.txt[]
-endif::VK_EXT_fragment_density_map[]
-
-include::chapters/queries.txt[]
-
-// Transfer operations
-include::chapters/clears.txt[]
-
-include::chapters/copies.txt[]
-
-// Graphics Operations
-include::chapters/drawing.txt[]
-
-include::chapters/fxvertex.txt[]
-
-include::chapters/tessellation.txt[]
-
-include::chapters/geometry.txt[]
-
-ifdef::VK_NV_mesh_shader[]
-include::chapters/VK_NV_mesh_shader/mesh.txt[]
-endif::VK_NV_mesh_shader[]
-
-include::chapters/vertexpostproc.txt[]
-
-include::chapters/primsrast.txt[]
-
-include::chapters/fragops.txt[]
-
-include::chapters/framebuffer.txt[]
-
-// Compute
-include::chapters/dispatch.txt[]
-
-// Device Generated Commands
-ifdef::VK_NV_device_generated_commands[]
-include::chapters/VK_NV_device_generated_commands/generatedcommands.txt[]
-endif::VK_NV_device_generated_commands[]
-
-// Sparse
-include::chapters/sparsemem.txt[]
-
-ifdef::VK_KHR_surface[]
-include::chapters/VK_KHR_surface/wsi.txt[]
-endif::VK_KHR_surface[]
-
-// Deferred host ops
-ifdef::VK_KHR_deferred_host_operations[]
-include::chapters/VK_KHR_deferred_host_operations/deferred_host_operations.txt[]
-endif::VK_KHR_deferred_host_operations[]
-
-// Private data
-ifdef::VK_EXT_private_data[]
-include::chapters/VK_EXT_private_data.txt[]
-endif::VK_EXT_private_data[]
-
-// Acceleration structures
-ifdef::VK_NV_ray_tracing,VK_KHR_acceleration_structure[]
-include::chapters/accelstructures.txt[]
-endif::VK_NV_ray_tracing,VK_KHR_acceleration_structure[]
-
-// Ray traversal
-ifdef::VK_NV_ray_tracing,VK_KHR_ray_tracing_pipeline,VK_KHR_ray_query[]
-include::chapters/raytraversal.txt[]
-endif::VK_NV_ray_tracing,VK_KHR_ray_tracing_pipeline,VK_KHR_ray_query[]
-
-// Ray tracing
-ifdef::VK_NV_ray_tracing,VK_KHR_ray_tracing_pipeline[]
-include::chapters/raytracing.txt[]
-endif::VK_NV_ray_tracing,VK_KHR_ray_tracing_pipeline[]
-
-// Vulkan Video extensions
-ifdef::VK_KHR_video_queue[]
-include::chapters/video_extensions.txt[]
-endif::VK_KHR_video_queue[]
-
-ifdef::VK_KHR_video_decode_queue[]
-include::chapters/video_decode_extensions.txt[]
-endif::VK_KHR_video_decode_queue[]
-
-ifdef::VK_EXT_video_decode_h264[]
-include::chapters/video_decode_h264_extensions.txt[]
-endif::VK_EXT_video_decode_h264[]
-
-ifdef::VK_EXT_video_decode_h265[]
-include::chapters/video_decode_h265_extensions.txt[]
-endif::VK_EXT_video_decode_h265[]
-
-ifdef::VK_KHR_video_encode_queue[]
-include::chapters/video_encode_extensions.txt[]
-endif::VK_KHR_video_encode_queue[]
-
-ifdef::VK_EXT_video_encode_h264[]
-include::chapters/video_encode_h264_extensions.txt[]
-endif::VK_EXT_video_encode_h264[]
-
-ifdef::VK_EXT_video_encode_h265[]
-include::chapters/video_encode_h265_extensions.txt[]
-endif::VK_EXT_video_encode_h265[]
-
-// Sort of an appendix
-include::chapters/extensions.txt[]
-
-include::chapters/features.txt[]
-
-include::chapters/limits.txt[]
-
-include::chapters/formats.txt[]
-
-include::chapters/capabilities.txt[]
-
-include::chapters/debugging.txt[]
-
-// Appendices
-:numbered!:
-
-include::appendices/spirvenv.txt[]
-
-ifdef::VK_VERSION_1_2,VK_KHR_vulkan_memory_model[]
-include::appendices/memorymodel.txt[]
-endif::VK_VERSION_1_2,VK_KHR_vulkan_memory_model[]
-
-include::appendices/compressedtex.txt[]
-
-include::appendices/versions.txt[]
-
-// Extension appendices are now included from extensions.txt
-include::appendices/extensions.txt[]
-
-include::appendices/boilerplate.txt[]
-
-include::appendices/invariance.txt[]
-
-include::appendices/glossary.txt[]
-
-include::appendices/credits.txt[]
-
-endif::[]
